From 57c0cb130507979223f94c99019f385e3b7a494b Mon Sep 17 00:00:00 2001 From: youngwinds Date: Tue, 25 Feb 2025 13:29:52 +0000 Subject: [PATCH] deploy: 4a04e837f9c0ede13c79bfb53614c8acf0b571c5 --- main.js | 2 +- main.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 467c038..634b8e5 100644 --- a/main.js +++ b/main.js @@ -1,5 +1,5 @@ (()=>{var __webpack_modules__={433:function(e,t,i){!function(t,r){e.exports=r(i(209),i(3963))}(0,function(e,t){"use strict";let i=n("",-1,-1,"",null,!1),r=[];function n(e,t,i,r,n,s){return{source:e,line:t,column:i,name:r,content:n,ignore:s}}function s(e,t,i,r,n){return{map:e,sources:t,source:i,content:r,ignore:n}}function a(e,t){return s(e,t,"",null,!1)}function o(e,t,i){return s(null,r,e,t,i)}function l(r){let n=new t.GenMapping({file:r.map.file}),{sources:s,map:a}=r,o=a.names,l=e.decodedMappings(a);for(let e=0;enew e.TraceMap(t,"")),n=r.pop();for(let e=0;e1)throw Error(`Transformation map ${e} must have exactly one source file. -Did you specify these with the most recent transformation maps first?`);let s=c(n,i,"",0);for(let e=r.length-1;e>=0;e--)s=a(r[e],[s]);return s}function c(t,i,r,n){let{resolvedSources:s,sourcesContent:l,ignoreList:h}=t,u=n+1;return a(t,s.map((t,n)=>{let s={importer:r,depth:u,source:t||"",content:void 0,ignore:void 0},a=i(s.source,s),{source:d,content:p,ignore:f}=s;return a?c(new e.TraceMap(a,d),i,d,u):o(d,void 0!==p?p:l?l[n]:null,void 0!==f?f:!!h&&h.includes(n))}))}class p{toString(){return JSON.stringify(this)}constructor(e,i){let r=i.decodedMappings?t.toDecodedMap(e):t.toEncodedMap(e);this.version=r.version,this.file=r.file,this.mappings=r.mappings,this.names=r.names,this.ignoreList=r.ignoreList,this.sourceRoot=r.sourceRoot,this.sources=r.sources,i.excludeContent||(this.sourcesContent=r.sourcesContent)}}return function(e,t,i){let r="object"==typeof i?i:{excludeContent:!!i,decodedMappings:!1};return new p(l(d(e,t)),r)}})},3963:function(e,t,i){!function(e,r){r(t,i(6001),i(4333),i(209))}(0,function(e,t,i,r){"use strict";let n=0,s=1,a=2,o=3,l=4,h=-1;class u{constructor({file:e,sourceRoot:i}={}){this._names=new t.SetArray,this._sources=new t.SetArray,this._sourcesContent=[],this._mappings=[],this.file=e,this.sourceRoot=i,this._ignoreList=new t.SetArray}}function d(e){return e}function c(e,t,i,r,n,s,a,o){return S(!1,e,t,i,r,n,s,a,o)}function p(e,t){return M(!1,e,t)}let f=(e,t,i,r,n,s,a,o)=>S(!0,e,t,i,r,n,s,a,o),g=(e,t)=>M(!0,e,t);function m(e,i,r){let{_sources:n,_sourcesContent:s}=d(e);s[t.put(n,i)]=r}function y(e,i){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],{_sources:n,_sourcesContent:s,_ignoreList:a}=d(e),o=t.put(n,i);o===s.length&&(s[o]=null),r?t.put(a,o):t.remove(a,o)}function v(e){let{_mappings:t,_sources:i,_sourcesContent:r,_names:n,_ignoreList:s}=d(e);return T(t),{version:3,file:e.file||void 0,names:n.array,sourceRoot:e.sourceRoot||void 0,sources:i.array,sourcesContent:r,mappings:t,ignoreList:s.array}}function b(e){let t=v(e);return Object.assign(Object.assign({},t),{mappings:i.encode(t.mappings)})}function x(e){let t=new r.TraceMap(e),i=new u({file:t.file,sourceRoot:t.sourceRoot});return k(d(i)._names,t.names),k(d(i)._sources,t.sources),d(i)._sourcesContent=t.sourcesContent||t.sources.map(()=>null),d(i)._mappings=r.decodedMappings(t),t.ignoreList&&k(d(i)._ignoreList,t.ignoreList),i}function _(e){let t=[],{_mappings:i,_sources:r,_names:h}=d(e);for(let e=0;e=0&&!(t>=e[r][n]);i=r--);return i}function A(e,t,i){for(let i=e.length;i>t;i--)e[i]=e[i-1];e[t]=i}function T(e){let{length:t}=e,i=t;for(let t=i-1;t>=0&&!(e[t].length>0);i=t,t--);ir&&(r=n)}f(i,r);let n=i.query+i.hash;switch(r){case 2:case 3:return n;case 4:{let r=i.path.slice(1);if(!r)return n||".";if(o(t||e)&&!o(r))return"./"+r+n;return r+n}case 5:return i.path+n;default:return i.scheme+"//"+i.user+i.host+i.port+i.path+n}}})},6001:function(e,t){!function(e,i){i(t)}(0,function(e){"use strict";class t{constructor(){this._indexes={__proto__:null},this.array=[]}}function i(e){return e}function r(e,t){return i(e)._indexes[t]}function n(e,t){let n=r(e,t);if(void 0!==n)return n;let{array:s,_indexes:a}=i(e),o=s.push(t);return a[t]=o-1}function s(e){let{array:t,_indexes:r}=i(e);0!==t.length&&(r[t.pop()]=void 0)}function a(e,t){let n=r(e,t);if(void 0===n)return;let{array:s,_indexes:a}=i(e);for(let e=n+1;e>>=1,s&&(i=-0x80000000|-i),t+i}function l(e,t,i){let r=t-i;r=r<0?-r<<1|1:r<<1;do{let t=31&r;(r>>>=5)>0&&(t|=32),e.write(s[t])}while(r>0);return t}function h(e,i){return!(e.pos>=i)&&e.peek()!==t}let u=16384,d="undefined"!=typeof TextDecoder?new TextDecoder:void 0!==r?{decode:e=>r.from(e.buffer,e.byteOffset,e.byteLength).toString()}:{decode(e){let t="";for(let i=0;i0?t+d.decode(e.subarray(0,i)):t}constructor(){this.pos=0,this.out="",this.buffer=new Uint8Array(u)}}class p{next(){return this.buffer.charCodeAt(this.pos++)}peek(){return this.buffer.charCodeAt(this.pos)}indexOf(e){let{buffer:t,pos:i}=this,r=t.indexOf(e,i);return -1===r?t.length:r}constructor(e){this.pos=0,this.buffer=e}}let f=[];function g(e){let{length:t}=e,i=new p(e),r=[],n=[],s=0;for(;i.pos0&&r.write(t),n[0]=l(r,a,n[0]),l(r,o,0),l(r,d,0),l(r,6===s.length?1:0,0),6===s.length&&l(r,s[5],0),c))l(r,e,0);for(i++;ih||t===h&&s>=u)break;i=y(e,i,r,n)}return r.write(t),n[0]=l(r,h,n[0]),l(r,u,0),i}function v(e){let{length:t}=e,i=new p(e),r=[],n=[],s=0,a=0,l=0,u=0,d=0,c=0,g=0,m=0;do{let e=i.indexOf(";"),t=0;for(;i.posr;t--){let t=g;g=o(i,g),m=o(i,g===t?m:0);let r=o(i,0);e.push([r,g,m])}}else e=[[r]];S.push(e)}while(h(i,e))}p.bindings=S,r.push(p),n.push(p)}s++,i.pos=e+1}while(i.pos0&&r.write(t),n[1]=l(r,s[1],n[1]),l(r,(6===s.length?1:0)|(c?2:0)|(d?4:0),0),6===s.length){let{4:e,5:t}=s;e!==n[2]&&(n[3]=0),n[2]=l(r,e,n[2]),n[3]=l(r,t,n[3])}if(c){let{0:e,1:t,2:i}=s.callsite;e!==n[4]?(n[5]=0,n[6]=0):t!==n[5]&&(n[6]=0),n[4]=l(r,e,n[4]),n[5]=l(r,t,n[5]),n[6]=l(r,i,n[6])}if(p)for(let e of p){e.length>1&&l(r,-e.length,0),l(r,e[0][0],0);let t=a,i=o;for(let n=1;nh||t===h&&s>=u)break;i=x(e,i,r,n)}return n[0]0&&r.write(i),0===u.length)continue;let d=0;for(let e=0;e0&&r.write(t),d=l(r,i[0],d),1!==i.length&&(n=l(r,i[1],n),s=l(r,i[2],s),a=l(r,i[3],a),4!==i.length&&(o=l(r,i[4],o)))}}return r.flush()}e.decode=S,e.decodeGeneratedRanges=v,e.decodeOriginalScopes=g,e.encode=A,e.encodeGeneratedRanges=b,e.encodeOriginalScopes=m,Object.defineProperty(e,"__esModule",{value:!0})})},209:function(e,t,i){!function(e,r){r(t,i(4333),i(1308))}(0,function(e,t,i){"use strict";function r(e,t){return t&&!t.endsWith("/")&&(t+="/"),i(e,t)}function n(e){if(!e)return"";let t=e.lastIndexOf("/");return e.slice(0,t+1)}let s=0,a=1,o=2,l=3,h=4,u=1,d=2;function c(e,t){let i=p(e,0);if(i===e.length)return e;t||(e=e.slice());for(let r=i;r>1),a=e[n][s]-t;if(0===a)return y=!0,n;a<0?i=n+1:r=n-1}return y=!1,i-1}function b(e,t,i){for(let r=i+1;r=0&&e[r][s]===t;i=r--);return i}function _(){return{lastKey:-1,lastNeedle:-1,lastIndex:-1}}function S(e,t,i,r){let{lastKey:n,lastNeedle:a,lastIndex:o}=i,l=0,h=e.length-1;if(r===n){if(t===a)return y=-1!==o&&e[o][s]===t,o;t>=a?l=-1===o?0:o:h=o}return i.lastKey=r,i.lastNeedle=t,i.lastIndex=v(e,t,l,h)}function C(e,t){let i=t.map(A);for(let r=0;rt;i--)e[i]=e[i-1];e[t]=i}function A(){return{__proto__:null}}let T=function(e,t){let i=k(e);if(!("sections"in i))return new D(i,t);let r=[],n=[],s=[],a=[],o=[];return E(i,t,r,n,s,a,o,0,0,1/0,1/0),Y({version:3,file:i.file,names:a,sources:n,sourcesContent:s,mappings:r,ignoreList:o})};function k(e){return"string"==typeof e?JSON.parse(e):e}function E(e,t,i,r,n,s,a,o,l,h,u){let{sections:d}=e;for(let e=0;ef)return;let r=B(i,t),n=0===e?p:0,u=x[e];for(let e=0;e=g)return;if(1===i.length){r.push([d]);continue}let c=v+i[a],p=i[o],m=i[l];r.push(4===i.length?[d,c,p,m]:[d,c,p,m,b+i[h]])}}}function M(e,t){for(let i=0;ir(e||"",p));let{mappings:f}=s;"string"==typeof f?(this._encoded=f,this._decoded=void 0):(this._encoded=void 0,this._decoded=c(f,i)),this._decodedMemo=_(),this._bySources=void 0,this._bySourceMemos=void 0}}function F(e){return e}function N(e){var i,r;return null!==(i=(r=F(e))._encoded)&&void 0!==i?i:r._encoded=t.encode(F(e)._decoded)}function j(e){var i;return(i=F(e))._decoded||(i._decoded=t.decode(F(e)._encoded))}function H(e,t,i){let r=j(e);if(t>=r.length)return null;let n=r[t],s=ee(n,F(e)._decodedMemo,t,i,L);return -1===s?null:n[s]}function z(e,t){let{line:i,column:r,bias:n}=t;if(--i<0)throw Error(R);if(r<0)throw Error(I);let s=j(e);if(i>=s.length)return J(null,null,null,null);let u=s[i],d=ee(u,F(e)._decodedMemo,i,r,n||L);if(-1===d)return J(null,null,null,null);let c=u[d];if(1===c.length)return J(null,null,null,null);let{names:p,resolvedSources:f}=e;return J(f[c[a]],c[o]+1,c[l],5===c.length?p[c[h]]:null)}function W(e,t){let{source:i,line:r,column:n,bias:s}=t;return ei(e,i,r,n,s||L,!1)}function V(e,t){let{source:i,line:r,column:n,bias:s}=t;return ei(e,i,r,n,s||O,!0)}function G(e,t){let i=j(e),{names:r,resolvedSources:n}=e;for(let e=0;e1?i-1:0),n=1;n1?i-1:0),n=1;n1?i-1:0),n=1;n1?i-1:0),n=1;ne.length)&&(i=e.length),e.substring(i-t.length,i)===t}function T(e,t){if(t=Math.floor(t),0==e.length||0==t)return"";var i=e.length*t;for(t=Math.floor(Math.log(t)/Math.log(2));t;)e+=e,t--;return e+e.substring(0,i-e.length)}var k="",E="",P="",M="",B={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"},R=10;function I(e){var t=Object.keys(e),i=Object.create(Object.getPrototypeOf(e));return t.forEach(function(t){i[t]=e[t]}),Object.defineProperty(i,"message",{value:e.message}),i}function O(e){return C(e,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function L(e,t,i){var n="",s="",a=0,o="",l=!1,h=O(e),u=h.split("\n"),d=O(t).split("\n"),c=0,p="";if("strictEqual"===i&&"object"===S(e)&&"object"===S(t)&&null!==e&&null!==t&&(i="strictEqualObject"),1===u.length&&1===d.length&&u[0]!==d[0]){var f=u[0].length+d[0].length;if(f<=R){if(("object"!==S(e)||null===e)&&("object"!==S(t)||null===t)&&(0!==e||0!==t))return"".concat(B[i],"\n\n")+"".concat(u[0]," !== ").concat(d[0],"\n")}else if("strictEqualObject"!==i&&f<(r.stderr&&r.stderr.isTTY?r.stderr.columns:80)){for(;u[0][c]===d[0][c];)c++;c>2&&(p="\n ".concat(T(" ",c),"^"),c=0)}}for(var g=u[u.length-1],m=d[d.length-1];g===m&&(c++<2?o="\n ".concat(g).concat(o):n=g,u.pop(),d.pop(),0!==u.length&&0!==d.length);)g=u[u.length-1],m=d[d.length-1];var y=Math.max(u.length,d.length);if(0===y){var v=h.split("\n");if(v.length>30)for(v[26]="".concat(k,"...").concat(M);v.length>27;)v.pop();return"".concat(B.notIdentical,"\n\n").concat(v.join("\n"),"\n")}c>3&&(o="\n".concat(k,"...").concat(M).concat(o),l=!0),""!==n&&(o="\n ".concat(n).concat(o),n="");var b=0,x=B[i]+"\n".concat(E,"+ actual").concat(M," ").concat(P,"- expected").concat(M),_=" ".concat(k,"...").concat(M," Lines skipped");for(c=0;c1&&c>2&&(C>4?(s+="\n".concat(k,"...").concat(M),l=!0):C>3&&(s+="\n ".concat(d[c-2]),b++),s+="\n ".concat(d[c-1]),b++),a=c,n+="\n".concat(P,"-").concat(M," ").concat(d[c]),b++;else if(d.length1&&c>2&&(C>4?(s+="\n".concat(k,"...").concat(M),l=!0):C>3&&(s+="\n ".concat(u[c-2]),b++),s+="\n ".concat(u[c-1]),b++),a=c,s+="\n".concat(E,"+").concat(M," ").concat(u[c]),b++;else{var w=d[c],I=u[c],L=I!==w&&(!A(I,",")||I.slice(0,-1)!==w);L&&A(w,",")&&w.slice(0,-1)===I&&(L=!1,I+=","),L?(C>1&&c>2&&(C>4?(s+="\n".concat(k,"...").concat(M),l=!0):C>3&&(s+="\n ".concat(u[c-2]),b++),s+="\n ".concat(u[c-1]),b++),a=c,s+="\n".concat(E,"+").concat(M," ").concat(I),n+="\n".concat(P,"-").concat(M," ").concat(w),b+=2):(s+=n,n="",(1===C||0===c)&&(s+="\n ".concat(I),b++))}if(b>20&&c30)for(p[26]="".concat(k,"...").concat(M);p.length>27;)p.pop();t=1===p.length?i.call(this,"".concat(c," ").concat(p[0])):i.call(this,"".concat(c,"\n\n").concat(p.join("\n"),"\n"))}else{var m=O(h),y="",v=B[a];"notDeepEqual"===a||"notEqual"===a?(m="".concat(B[a],"\n\n").concat(m)).length>1024&&(m="".concat(m.slice(0,1021),"...")):(y="".concat(O(u)),m.length>512&&(m="".concat(m.slice(0,509),"...")),y.length>512&&(y="".concat(y.slice(0,509),"...")),"deepEqual"===a||"equal"===a?m="".concat(v,"\n\n").concat(m,"\n\nshould equal\n\n"):y=" ".concat(a," ").concat(y)),t=i.call(this,"".concat(m).concat(y))}return Error.stackTraceLimit=d,t.generatedMessage=!s,Object.defineProperty(g(t),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),t.code="ERR_ASSERTION",t.actual=h,t.expected=u,t.operator=a,Error.captureStackTrace&&Error.captureStackTrace(g(t),l),t.stack,t.name="AssertionError",f(t)}return h(n,[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:t,value:function(e,t){return C(this,s(s({},t),{},{customInspect:!1,depth:0}))}}]),n}(m(Error),C.custom);e.exports=D},2175:function(e,t,i){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(e,t){for(var i=0;i2)?"one of ".concat(t," ").concat(e.slice(0,i-1).join(", "),", or ")+e[i-1]:2===i?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}function _(e,t,i){return e.substr(!i||i<0?0:+i,t.length)===t}function S(e,t,i){return(void 0===i||i>e.length)&&(i=e.length),e.substring(i-t.length,i)===t}function C(e,t,i){return"number"!=typeof i&&(i=0),!(i+t.length>e.length)&&-1!==e.indexOf(t,i)}b("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),b("ERR_INVALID_ARG_TYPE",function(e,t,n){if(void 0===m&&(m=i(6948)),m("string"==typeof e,"'name' must be a string"),"string"==typeof t&&_(t,"not ")?(s="must not be",t=t.replace(/^not /,"")):s="must be",S(e," argument"))a="The ".concat(e," ").concat(s," ").concat(x(t,"type"));else{var s,a,o=C(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(o," ").concat(s," ").concat(x(t,"type"))}return a+". Received type ".concat(r(n))},TypeError),b("ERR_INVALID_ARG_VALUE",function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"is invalid";void 0===y&&(y=i(5135));var n=y.inspect(t);return n.length>128&&(n="".concat(n.slice(0,128),"...")),"The argument '".concat(e,"' ").concat(r,". Received ").concat(n)},TypeError,RangeError),b("ERR_INVALID_RETURN_VALUE",function(e,t,i){var n;return n=i&&i.constructor&&i.constructor.name?"instance of ".concat(i.constructor.name):"type ".concat(r(i)),"Expected ".concat(e,' to be returned from the "').concat(t,'"')+" function but got ".concat(n,".")},TypeError),b("ERR_MISSING_ARGS",function(){for(var e=arguments.length,t=Array(e),r=0;r0,"At least one arg needs to be specified");var n="The ",s=t.length;switch(t=t.map(function(e){return'"'.concat(e,'"')}),s){case 1:n+="".concat(t[0]," argument");break;case 2:n+="".concat(t[0]," and ").concat(t[1]," arguments");break;default:n+=t.slice(0,s-1).join(", "),n+=", and ".concat(t[s-1]," arguments")}return"".concat(n," must be specified")},TypeError),e.exports.codes=v},2677:function(e,t,i){"use strict";function r(e,t){return l(e)||o(e,t)||s(e,t)||n()}function n(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){if(e){if("string"==typeof e)return a(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);if("Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return a(e,t)}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,r=Array(t);i10)return!0;for(var t=0;t57)return!0}return 10===e.length&&e>=0x100000000}function F(e){return Object.keys(e).filter(D).concat(f(e).filter(Object.prototype.propertyIsEnumerable.bind(e)))}function N(e,t){if(e===t)return 0;for(var i=e.length,r=t.length,n=0,s=Math.min(i,r);n0)throw Error("Invalid string. Length must be a multiple of 4");var i=e.indexOf("=");-1===i&&(i=t);var r=i===t?0:4-i%4;return[i,r]}function h(e){var t=l(e),i=t[0],r=t[1];return(i+r)*3/4-r}function u(e,t,i){return(t+i)*3/4-i}function d(e){var t,i,s=l(e),a=s[0],o=s[1],h=new n(u(e,a,o)),d=0,c=o>0?a-4:a;for(i=0;i>16&255,h[d++]=t>>8&255,h[d++]=255&t;return 2===o&&(t=r[e.charCodeAt(i)]<<2|r[e.charCodeAt(i+1)]>>4,h[d++]=255&t),1===o&&(t=r[e.charCodeAt(i)]<<10|r[e.charCodeAt(i+1)]<<4|r[e.charCodeAt(i+2)]>>2,h[d++]=t>>8&255,h[d++]=255&t),h}function c(e){return i[e>>18&63]+i[e>>12&63]+i[e>>6&63]+i[63&e]}function p(e,t,i){for(var r=[],n=t;nl?l:o+a));return 1===n?s.push(i[(t=e[r-1])>>2]+i[t<<4&63]+"=="):2===n&&s.push(i[(t=(e[r-2]<<8)+e[r-1])>>10]+i[t>>4&63]+i[t<<2&63]+"="),s.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},2709:function(e,t,i){var r=i(1251);function n(){}e.exports={loadQueries:function(){throw new r("Sharable configs are not supported in client-side build of Browserslist")},getStat:function(e){return e.stats},loadConfig:function(e){if(e.config)throw new r("Browserslist config are not supported in client-side build")},loadCountry:function(){throw new r("Country statistics are not supported in client-side build of Browserslist")},loadFeature:function(){throw new r("Supports queries are not available in client-side build of Browserslist")},currentNode:function(e,t){return e(["maintained node versions"],t)[0]},parseConfig:n,readConfig:n,findConfig:n,findConfigFile:n,clearCaches:n,oldDataWarning:n,env:{}}},1251:function(e){function t(e){this.name="BrowserslistError",this.message=e,this.browserslist=!0,Error.captureStackTrace&&Error.captureStackTrace(this,t)}t.prototype=Error.prototype,e.exports=t},434:function(e,t,i){var r=i(539),n=i(2573).agents,s=i(916),a=i(2098),o=i(8968),l=i(1251),h=i(2709),u=i(1325),d=31558432982.399998,c="37",p=14;function f(e,t){return 0===(e+".").indexOf(t+".")}function g(e){var t=e.slice(1);return Y.nodeVersions.some(function(e){return f(e,t)})}function m(e){return e.filter(function(e){return"string"==typeof e})}function y(e){var t=e;return 3===e.split(".").length&&(t=e.split(".").slice(0,-1).join(".")),t}function v(e){return function(t){return e+" "+t}}function b(e){return parseInt(e.split(".")[0])}function x(e,t){if(0===e.length)return[];var i=_(e.map(b)),r=i[i.length-t];if(!r)return e;for(var n=[],s=e.length-1;s>=0&&!(r>b(e[s]));s--)n.unshift(e[s]);return n}function _(e){for(var t=[],i=0;i"===e)return function(e){return i(e)>t};if(">="===e)return function(e){return i(e)>=t};if("<"===e)return function(e){return parseFloat(e)"===e)?function(e){return k(e=e.split(".").map(A),t)>0}:">="===e?function(e){return k(e=e.split(".").map(A),t)>=0}:"<"===e?function(e){return e=e.split(".").map(A),k(t,e)>0}:function(e){return e=e.split(".").map(A),k(t,e)>=0}}function A(e){return parseInt(e)}function T(e,t){return et?1:0}function k(e,t){return T(parseInt(e[0]),parseInt(t[0]))||T(parseInt(e[1]||"0"),parseInt(t[1]||"0"))||T(parseInt(e[2]||"0"),parseInt(t[2]||"0"))}function E(e,t){return(void 0===(t=t.split(".").map(A))[1]&&(t[1]="x"),"<="===e)?function(e){return 0>=P(e=e.split(".").map(A),t)}:function(e){return P(e=e.split(".").map(A),t)>=0}}function P(e,t){return e[0]!==t[0]?e[0]=e});return i.concat(s.map(v(n.name)))},[])}function I(e){return{name:e.name,versions:e.versions,released:e.released,releaseDate:e.releaseDate}}function O(e,t){if(e=e.toLowerCase(),e=Y.aliases[e]||e,t.mobileToDesktop&&Y.desktopNames[e]){var i=Y.data[Y.desktopNames[e]];if("android"===e)return F(I(Y.data[e]),i);var r=I(i);return r.name=e,r}return Y.data[e]}function L(e,t){var i=t.indexOf(c);return e.filter(function(e){return/^(?:[2-4]\.|[34]$)/.test(e)}).concat(t.slice(i))}function D(e){var t={};for(var i in e)t[i]=e[i];return t}function F(e,t){return e.released=L(e.released,t.released),e.versions=L(e.versions,t.versions),e.releaseDate=D(e.releaseDate),e.released.forEach(function(i){void 0===e.releaseDate[i]&&(e.releaseDate[i]=t.releaseDate[i])}),e}function N(e,t){var i=O(e,t);if(!i)throw new l("Unknown browser "+e);return i}function j(e){return new l("Unknown browser query `"+e+"`. Maybe you are using old Browserslist or made typo in query.")}function H(e,t,i,r){var n=1;switch(t){case"android":if(r.mobileToDesktop)return e;var s=Y.data.chrome.released;n=s.length-s.indexOf(c);break;case"op_mob":n=b(Y.data.op_mob.released.slice(-1)[0])-p+1;break;default:return e}return i<=n?e.slice(-1):e.slice(n-1-i)}function z(e,t){return"string"==typeof e&&(e.indexOf("y")>=0||t&&e.indexOf("a")>=0)}function W(e,t){return X(e).reduce(function(e,i,r){if(i.not&&0===r)throw new l("Write any browsers query (for instance, `defaults`) before `"+i.query+"`");var n=Q[i.type].select.call(Y,t,i).map(function(e){var i=e.split(" ");return"0"===i[1]?i[0]+" "+O(i[0],t).versions[0]:e});if("and"===i.compose)return i.not?e.filter(function(e){return -1===n.indexOf(e)}):e.filter(function(e){return -1!==n.indexOf(e)});if(i.not){var s={};return n.forEach(function(e){s[e]=!0}),e.filter(function(e){return!s[e]})}return e.concat(n)},[])}function V(e){return void 0===e&&(e={}),void 0===e.path&&(e.path=o.resolve?o.resolve("."):"."),e}function G(e,t){if(null==e){var i=Y.loadConfig(t);e=i||Y.defaults}return e}function U(e){if(!("string"==typeof e||Array.isArray(e)))throw new l("Browser queries must be an array or string. Got "+typeof e+".")}var K={},$={};function Y(e,t){U(e=G(e,t=V(t)));var i=X(e).some(function(e){return Q[e.type].needsPath}),r={ignoreUnknownVersions:t.ignoreUnknownVersions,dangerousExtend:t.dangerousExtend,mobileToDesktop:t.mobileToDesktop,env:t.env};i&&(r.path=t.path),h.oldDataWarning(Y.data);var n=h.getStat(t,Y.data);if(n)for(var s in r.customUsage={},n)S(r.customUsage,s,n[s]);var a=JSON.stringify([e,r]);if(K[a])return K[a];var o=_(W(e,r)).sort(function(e,t){if(e=e.split(" "),t=t.split(" "),e[0]!==t[0])return T(e[0],t[0]);var i=e[1].split("-")[0];return k(t[1].split("-")[0].split("."),i.split("."))});return h.env.BROWSERSLIST_DISABLE_CACHE||(K[a]=o),o}function X(e){var t=JSON.stringify(e);if(t in $)return $[t];var i=u(Q,e);return h.env.BROWSERSLIST_DISABLE_CACHE||($[t]=i),i}function q(e,t){var i=Y.nodeVersions.filter(function(e){return f(e,t.version)});if(0===i.length){if(e.ignoreUnknownVersions)return[];throw new l("Unknown version "+t.version+" of Node.js")}return["node "+i[i.length-1]]}function Z(e,t){return R(Date.UTC(parseInt(t.year),parseInt(t.month||"01")-1,parseInt(t.day||"01"),0,0,0),e)}function J(e,t){var i,r,n=parseFloat(t.coverage),s=Y.usage.global;if(t.place){if(t.place.match(/^my\s+stats$/i)){if(!e.customUsage)throw new l("Custom usage statistics was not provided");s=e.customUsage}else i=2===t.place.length?t.place.toUpperCase():t.place.toLowerCase(),h.loadCountry(Y.usage,i,Y.data),s=Y.usage[i]}for(var a=Object.keys(s).sort(function(e,t){return s[t]-s[e]}),o=0,u=[],d=0;d=n));d++);return u}Y.parse=function(e,t){return U(e=G(e,t=V(t))),X(e)},Y.cache={},Y.data={},Y.usage={global:{},custom:null},Y.defaults=["> 0.5%","last 2 versions","Firefox ESR","not dead"],Y.aliases={fx:"firefox",ff:"firefox",ios:"ios_saf",explorer:"ie",blackberry:"bb",explorermobile:"ie_mob",operamini:"op_mini",operamobile:"op_mob",chromeandroid:"and_chr",firefoxandroid:"and_ff",ucandroid:"and_uc",qqandroid:"and_qq"},Y.desktopNames={and_chr:"chrome",and_ff:"firefox",ie_mob:"ie",android:"chrome"},Y.versionAliases={},Y.clearCaches=h.clearCaches,Y.parseConfig=h.parseConfig,Y.readConfig=h.readConfig,Y.findConfigFile=h.findConfigFile,Y.findConfig=h.findConfig,Y.loadConfig=h.loadConfig,Y.coverage=function(e,t){var i;if(void 0===t)i=Y.usage.global;else if("my stats"===t){var r={};r.path=o.resolve?o.resolve("."):".";var n=h.getStat(r);if(!n)throw new l("Custom usage statistics was not provided");for(var s in i={},n)S(i,s,n[s])}else if("string"==typeof t)t=t.length>2?t.toLowerCase():t.toUpperCase(),h.loadCountry(Y.usage,t,Y.data),i=Y.usage[t];else for(var a in"dataByBrowser"in t&&(t=t.dataByBrowser),i={},t)for(var u in t[a])i[a+" "+u]=t[a][u];return e.reduce(function(e,t){var r=i[t];return void 0===r&&(r=i[t.replace(/ \S+$/," 0")]),e+(r||0)},0)};var Q={last_major_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+major\s+versions?$/i,select:function(e,t){return Object.keys(n).reduce(function(i,r){var n=O(r,e);if(!n)return i;var s=x(n.released,t.versions);return s=H(s=s.map(v(n.name)),n.name,t.versions,e),i.concat(s)},[])}},last_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+versions?$/i,select:function(e,t){return Object.keys(n).reduce(function(i,r){var n=O(r,e);if(!n)return i;var s=n.released.slice(-t.versions);return s=H(s=s.map(v(n.name)),n.name,t.versions,e),i.concat(s)},[])}},last_electron_major_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+electron\s+major\s+versions?$/i,select:function(e,t){return x(Object.keys(s),t.versions).map(function(e){return"chrome "+s[e]})}},last_node_major_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+node\s+major\s+versions?$/i,select:function(e,t){return x(Y.nodeVersions,t.versions).map(function(e){return"node "+e})}},last_browser_major_versions:{matches:["versions","browser"],regexp:/^last\s+(\d+)\s+(\w+)\s+major\s+versions?$/i,select:function(e,t){var i=N(t.browser,e),r=x(i.released,t.versions).map(v(i.name));return H(r,i.name,t.versions,e)}},last_electron_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+electron\s+versions?$/i,select:function(e,t){return Object.keys(s).slice(-t.versions).map(function(e){return"chrome "+s[e]})}},last_node_versions:{matches:["versions"],regexp:/^last\s+(\d+)\s+node\s+versions?$/i,select:function(e,t){return Y.nodeVersions.slice(-t.versions).map(function(e){return"node "+e})}},last_browser_versions:{matches:["versions","browser"],regexp:/^last\s+(\d+)\s+(\w+)\s+versions?$/i,select:function(e,t){var i=N(t.browser,e),r=i.released.slice(-t.versions).map(v(i.name));return H(r,i.name,t.versions,e)}},unreleased_versions:{matches:[],regexp:/^unreleased\s+versions$/i,select:function(e){return Object.keys(n).reduce(function(t,i){var r=O(i,e);if(!r)return t;var n=r.versions.filter(function(e){return -1===r.released.indexOf(e)});return n=n.map(v(r.name)),t.concat(n)},[])}},unreleased_electron_versions:{matches:[],regexp:/^unreleased\s+electron\s+versions?$/i,select:function(){return[]}},unreleased_browser_versions:{matches:["browser"],regexp:/^unreleased\s+(\w+)\s+versions?$/i,select:function(e,t){var i=N(t.browser,e);return i.versions.filter(function(e){return -1===i.released.indexOf(e)}).map(v(i.name))}},last_years:{matches:["years"],regexp:/^last\s+(\d*.?\d+)\s+years?$/i,select:function(e,t){return R(Date.now()-d*t.years,e)}},since_y:{matches:["year"],regexp:/^since (\d+)$/i,select:Z},since_y_m:{matches:["year","month"],regexp:/^since (\d+)-(\d+)$/i,select:Z},since_y_m_d:{matches:["year","month","day"],regexp:/^since (\d+)-(\d+)-(\d+)$/i,select:Z},popularity:{matches:["sign","popularity"],regexp:/^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%$/,select:function(e,t){var i=parseFloat(t.popularity),r=Y.usage.global;return Object.keys(r).reduce(function(e,n){return">"===t.sign?r[n]>i&&e.push(n):"<"===t.sign?r[n]=i&&e.push(n),e},[])}},popularity_in_my_stats:{matches:["sign","popularity"],regexp:/^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+my\s+stats$/,select:function(e,t){var i=parseFloat(t.popularity);if(!e.customUsage)throw new l("Custom usage statistics was not provided");var r=e.customUsage;return Object.keys(r).reduce(function(e,n){var s=r[n];return null==s||(">"===t.sign?s>i&&e.push(n):"<"===t.sign?s=i&&e.push(n)),e},[])}},popularity_in_config_stats:{matches:["sign","popularity","config"],regexp:/^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+(\S+)\s+stats$/,select:function(e,t){var i=parseFloat(t.popularity),r=h.loadStat(e,t.config,Y.data);if(r)for(var n in e.customUsage={},r)S(e.customUsage,n,r[n]);if(!e.customUsage)throw new l("Custom usage statistics was not provided");var s=e.customUsage;return Object.keys(s).reduce(function(e,r){var n=s[r];return null==n||(">"===t.sign?n>i&&e.push(r):"<"===t.sign?n=i&&e.push(r)),e},[])}},popularity_in_place:{matches:["sign","popularity","place"],regexp:/^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+((alt-)?\w\w)$/,select:function(e,t){var i=parseFloat(t.popularity),r=t.place;r=2===r.length?r.toUpperCase():r.toLowerCase(),h.loadCountry(Y.usage,r,Y.data);var n=Y.usage[r];return Object.keys(n).reduce(function(e,r){var s=n[r];return null==s||(">"===t.sign?s>i&&e.push(r):"<"===t.sign?s=i&&e.push(r)),e},[])}},cover:{matches:["coverage"],regexp:/^cover\s+(\d+|\d+\.\d+|\.\d+)%$/i,select:J},cover_in:{matches:["coverage","place"],regexp:/^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/i,select:J},supports:{matches:["supportType","feature"],regexp:/^(?:(fully|partially)\s+)?supports\s+([\w-]+)$/,select:function(e,t){h.loadFeature(Y.cache,t.feature);var i="fully"!==t.supportType,r=Y.cache[t.feature],n=[];for(var s in r){for(var a=O(s,e),o=a.released.length-1;o>=0&&!(a.released[o]in r[s]);)o--;var l=e.mobileToDesktop&&s in Y.desktopNames&&z(r[s][a.released[o]],i);a.versions.forEach(function(e){var t=r[s][e];void 0===t&&l&&(t=r[Y.desktopNames[s]][e]),z(t,i)&&n.push(s+" "+e)})}return n}},electron_range:{matches:["from","to"],regexp:/^electron\s+([\d.]+)\s*-\s*([\d.]+)$/i,select:function(e,t){var i=y(t.from),r=y(t.to),n=parseFloat(t.from),a=parseFloat(t.to);if(!s[i])throw new l("Unknown version "+n+" of electron");if(!s[r])throw new l("Unknown version "+a+" of electron");return Object.keys(s).filter(function(e){var t=parseFloat(e);return t>=n&&t<=a}).map(function(e){return"chrome "+s[e]})}},node_range:{matches:["from","to"],regexp:/^node\s+([\d.]+)\s*-\s*([\d.]+)$/i,select:function(e,t){return Y.nodeVersions.filter(E(">=",t.from)).filter(E("<=",t.to)).map(function(e){return"node "+e})}},browser_range:{matches:["browser","from","to"],regexp:/^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i,select:function(e,t){var i=N(t.browser,e),r=parseFloat(B(i,t.from)||t.from),n=parseFloat(B(i,t.to)||t.to);function s(e){var t=parseFloat(e);return t>=r&&t<=n}return i.released.filter(s).map(v(i.name))}},electron_ray:{matches:["sign","version"],regexp:/^electron\s*(>=?|<=?)\s*([\d.]+)$/i,select:function(e,t){var i=y(t.version);return Object.keys(s).filter(C(t.sign,i)).map(function(e){return"chrome "+s[e]})}},node_ray:{matches:["sign","version"],regexp:/^node\s*(>=?|<=?)\s*([\d.]+)$/i,select:function(e,t){return Y.nodeVersions.filter(w(t.sign,t.version)).map(function(e){return"node "+e})}},browser_ray:{matches:["browser","sign","version"],regexp:/^(\w+)\s*(>=?|<=?)\s*([\d.]+)$/,select:function(e,t){var i=t.version,r=N(t.browser,e),n=Y.versionAliases[r.name][i];return n&&(i=n),r.released.filter(C(t.sign,i)).map(function(e){return r.name+" "+e})}},firefox_esr:{matches:[],regexp:/^(firefox|ff|fx)\s+esr$/i,select:function(){return["firefox 128"]}},opera_mini_all:{matches:[],regexp:/(operamini|op_mini)\s+all/i,select:function(){return["op_mini all"]}},electron_version:{matches:["version"],regexp:/^electron\s+([\d.]+)$/i,select:function(e,t){var i=s[y(t.version)];if(!i)throw new l("Unknown version "+t.version+" of electron");return["chrome "+i]}},node_major_version:{matches:["version"],regexp:/^node\s+(\d+)$/i,select:q},node_minor_version:{matches:["version"],regexp:/^node\s+(\d+\.\d+)$/i,select:q},node_patch_version:{matches:["version"],regexp:/^node\s+(\d+\.\d+\.\d+)$/i,select:q},current_node:{matches:[],regexp:/^current\s+node$/i,select:function(e){return[h.currentNode(W,e)]}},maintained_node:{matches:[],regexp:/^maintained\s+node\s+versions$/i,select:function(e){var t=Date.now();return W(Object.keys(a).filter(function(e){return tDate.parse(a[e].start)&&g(e)}).map(function(e){return"node "+e.slice(1)}),e)}},phantomjs_1_9:{matches:[],regexp:/^phantomjs\s+1.9$/i,select:function(){return["safari 5"]}},phantomjs_2_1:{matches:[],regexp:/^phantomjs\s+2.1$/i,select:function(){return["safari 6"]}},browser_version:{matches:["browser","version"],regexp:/^(\w+)\s+(tp|[\d.]+)$/i,select:function(e,t){var i=t.version;/^tp$/i.test(i)&&(i="TP");var r=N(t.browser,e),n=B(r,i);if(n)i=n;else if(n=B(r,n=-1===i.indexOf(".")?i+".0":i.replace(/\.0$/,"")))i=n;else if(e.ignoreUnknownVersions)return[];else throw new l("Unknown version "+i+" of "+t.browser);return[r.name+" "+i]}},browserslist_config:{matches:[],regexp:/^browserslist config$/i,needsPath:!0,select:function(e){return Y(void 0,e)}},extends:{matches:["config"],regexp:/^extends (.+)$/i,needsPath:!0,select:function(e,t){return W(h.loadQueries(e,t.config),e)}},defaults:{matches:[],regexp:/^defaults$/i,select:function(e){return W(Y.defaults,e)}},dead:{matches:[],regexp:/^dead$/i,select:function(e){return W(["Baidu >= 0","ie <= 11","ie_mob <= 11","bb <= 10","op_mob <= 12.1","samsung 4"],e)}},unknown:{matches:[],regexp:/^(\w+)$/i,select:function(e,t){if(O(t.query,e))throw new l("Specify versions in Browserslist query for browser "+t.query);throw j(t.query)}}};!function(){for(var e in n){var t=n[e];Y.data[e]={name:e,versions:m(n[e].versions),released:m(n[e].versions.slice(0,-3)),releaseDate:n[e].release_date},S(Y.usage.global,e,t.usage_global),Y.versionAliases[e]={};for(var i=0;io)throw RangeError('The value "'+e+'" is invalid for option "size"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,u.prototype),t}function u(e,t,i){if("number"==typeof e){if("string"==typeof t)throw TypeError('The "string" argument must be of type string. Received type number');return f(e)}return d(e,t,i)}function d(e,t,i){if("string"==typeof e)return g(e,t);if(ArrayBuffer.isView(e))return y(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(eo(e,ArrayBuffer)||e&&eo(e.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(eo(e,SharedArrayBuffer)||e&&eo(e.buffer,SharedArrayBuffer)))return v(e,t,i);if("number"==typeof e)throw TypeError('The "value" argument must not be of type number. Received type number');let r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return u.from(r,t,i);let n=b(e);if(n)return n;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return u.from(e[Symbol.toPrimitive]("string"),t,i);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw TypeError('"size" argument must be of type number');if(e<0)throw RangeError('The value "'+e+'" is invalid for option "size"')}function p(e,t,i){return(c(e),e<=0)?h(e):void 0!==t?"string"==typeof i?h(e).fill(t,i):h(e).fill(t):h(e)}function f(e){return c(e),h(e<0?0:0|x(e))}function g(e,t){if(("string"!=typeof t||""===t)&&(t="utf8"),!u.isEncoding(t))throw TypeError("Unknown encoding: "+t);let i=0|S(e,t),r=h(i),n=r.write(e,t);return n!==i&&(r=r.slice(0,n)),r}function m(e){let t=e.length<0?0:0|x(e.length),i=h(t);for(let r=0;r=o)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|e}function _(e){return+e!=e&&(e=0),u.alloc(+e)}function S(e,t){if(u.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||eo(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let i=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===i)return 0;let n=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":return ei(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return es(e).length;default:if(n)return r?-1:ei(e).length;t=(""+t).toLowerCase(),n=!0}}function C(e,t,i){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===i||i>this.length)&&(i=this.length),i<=0||(i>>>=0)<=(t>>>=0)))return"";for(e||(e="utf8");;)switch(e){case"hex":return N(this,t,i);case"utf8":case"utf-8":return I(this,t,i);case"ascii":return D(this,t,i);case"latin1":case"binary":return F(this,t,i);case"base64":return R(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,t,i);default:if(r)throw TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function w(e,t,i){let r=e[t];e[t]=e[i],e[i]=r}function A(e,t,i,r,n){if(0===e.length)return -1;if("string"==typeof i?(r=i,i=0):i>0x7fffffff?i=0x7fffffff:i<-0x80000000&&(i=-0x80000000),el(i=+i)&&(i=n?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(n)return -1;i=e.length-1}else if(i<0){if(!n)return -1;i=0}if("string"==typeof t&&(t=u.from(t,r)),u.isBuffer(t))return 0===t.length?-1:T(e,t,i,r,n);if("number"==typeof t)return(t&=255,"function"==typeof Uint8Array.prototype.indexOf)?n?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):T(e,[t],i,r,n);throw TypeError("val must be string, number or Buffer")}function T(e,t,i,r,n){let s,a=1,o=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return -1;a=2,o/=2,l/=2,i/=2}function h(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(n){let r=-1;for(s=i;so&&(i=o-l),s=i;s>=0;s--){let i=!0;for(let r=0;rs&&(r=s):r=s;let a=t.length;for(r>a/2&&(r=a/2),n=0;n239?4:t>223?3:t>191?2:1;if(n+a<=i){let i,r,o,l;switch(a){case 1:t<128&&(s=t);break;case 2:(192&(i=e[n+1]))==128&&(l=(31&t)<<6|63&i)>127&&(s=l);break;case 3:i=e[n+1],r=e[n+2],(192&i)==128&&(192&r)==128&&(l=(15&t)<<12|(63&i)<<6|63&r)>2047&&(l<55296||l>57343)&&(s=l);break;case 4:i=e[n+1],r=e[n+2],o=e[n+3],(192&i)==128&&(192&r)==128&&(192&o)==128&&(l=(15&t)<<18|(63&i)<<12|(63&r)<<6|63&o)>65535&&l<1114112&&(s=l)}}null===s?(s=65533,a=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),n+=a}return L(r)}r=0x7fffffff,u.TYPED_ARRAY_SUPPORT=l(),u.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(u.prototype,"parent",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.buffer}}),Object.defineProperty(u.prototype,"offset",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.byteOffset}}),u.poolSize=8192,u.from=function(e,t,i){return d(e,t,i)},Object.setPrototypeOf(u.prototype,Uint8Array.prototype),Object.setPrototypeOf(u,Uint8Array),u.alloc=function(e,t,i){return p(e,t,i)},u.allocUnsafe=function(e){return f(e)},u.allocUnsafeSlow=function(e){return f(e)},u.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==u.prototype},u.compare=function(e,t){if(eo(e,Uint8Array)&&(e=u.from(e,e.offset,e.byteLength)),eo(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),!u.isBuffer(e)||!u.isBuffer(t))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let i=e.length,r=t.length;for(let n=0,s=Math.min(i,r);nr.length?(u.isBuffer(t)||(t=u.from(t)),t.copy(r,n)):Uint8Array.prototype.set.call(r,t,n);else if(u.isBuffer(t))t.copy(r,n);else throw TypeError('"list" argument must be an Array of Buffers');n+=t.length}return r},u.byteLength=S,u.prototype._isBuffer=!0,u.prototype.swap16=function(){let e=this.length;if(e%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;ti&&(e+=" ... "),""},a&&(u.prototype[a]=u.prototype.inspect),u.prototype.compare=function(e,t,i,r,n){if(eo(e,Uint8Array)&&(e=u.from(e,e.offset,e.byteLength)),!u.isBuffer(e))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===r&&(r=0),void 0===n&&(n=this.length),t<0||i>e.length||r<0||n>this.length)throw RangeError("out of range index");if(r>=n&&t>=i)return 0;if(r>=n)return -1;if(t>=i)return 1;if(t>>>=0,i>>>=0,r>>>=0,n>>>=0,this===e)return 0;let s=n-r,a=i-t,o=Math.min(s,a),l=this.slice(r,n),h=e.slice(t,i);for(let e=0;e>>=0,isFinite(i)?(i>>>=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let n=this.length-t;if((void 0===i||i>n)&&(i=n),e.length>0&&(i<0||t<0)||t>this.length)throw RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let s=!1;for(;;)switch(r){case"hex":return k(this,e,t,i);case"utf8":case"utf-8":return E(this,e,t,i);case"ascii":case"latin1":case"binary":return P(this,e,t,i);case"base64":return M(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,e,t,i);default:if(s)throw TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};let O=4096;function L(e){let t=e.length;if(t<=O)return String.fromCharCode.apply(String,e);let i="",r=0;for(;rr)&&(i=r);let n="";for(let r=t;ri)throw RangeError("Trying to access beyond buffer length")}function z(e,t,i,r,n,s){if(!u.isBuffer(e))throw TypeError('"buffer" argument must be a Buffer instance');if(t>n||te.length)throw RangeError("Index out of range")}function W(e,t,i,r,n){Z(t,r,n,e,i,7);let s=Number(t&BigInt(0xffffffff));e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s,s>>=8,e[i++]=s;let a=Number(t>>BigInt(32)&BigInt(0xffffffff));return e[i++]=a,a>>=8,e[i++]=a,a>>=8,e[i++]=a,a>>=8,e[i++]=a,i}function V(e,t,i,r,n){Z(t,r,n,e,i,7);let s=Number(t&BigInt(0xffffffff));e[i+7]=s,s>>=8,e[i+6]=s,s>>=8,e[i+5]=s,s>>=8,e[i+4]=s;let a=Number(t>>BigInt(32)&BigInt(0xffffffff));return e[i+3]=a,a>>=8,e[i+2]=a,a>>=8,e[i+1]=a,a>>=8,e[i]=a,i+8}function G(e,t,i,r,n,s){if(i+r>e.length||i<0)throw RangeError("Index out of range")}function U(e,t,i,r,n){return t=+t,i>>>=0,n||G(e,t,i,4,34028234663852886e22,-34028234663852886e22),s.write(e,t,i,r,23,4),i+4}function K(e,t,i,r,n){return t=+t,i>>>=0,n||G(e,t,i,8,17976931348623157e292,-17976931348623157e292),s.write(e,t,i,r,52,8),i+8}u.prototype.slice=function(e,t){let i=this.length;e=~~e,t=void 0===t?i:~~t,e<0?(e+=i)<0&&(e=0):e>i&&(e=i),t<0?(t+=i)<0&&(t=0):t>i&&(t=i),t>>=0,t>>>=0,i||H(e,t,this.length);let r=this[e],n=1,s=0;for(;++s>>=0,t>>>=0,i||H(e,t,this.length);let r=this[e+--t],n=1;for(;t>0&&(n*=256);)r+=this[e+--t]*n;return r},u.prototype.readUint8=u.prototype.readUInt8=function(e,t){return e>>>=0,t||H(e,1,this.length),this[e]},u.prototype.readUint16LE=u.prototype.readUInt16LE=function(e,t){return e>>>=0,t||H(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUint16BE=u.prototype.readUInt16BE=function(e,t){return e>>>=0,t||H(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUint32LE=u.prototype.readUInt32LE=function(e,t){return e>>>=0,t||H(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+0x1000000*this[e+3]},u.prototype.readUint32BE=u.prototype.readUInt32BE=function(e,t){return e>>>=0,t||H(e,4,this.length),0x1000000*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readBigUInt64LE=eu(function(e){J(e>>>=0,"offset");let t=this[e],i=this[e+7];(void 0===t||void 0===i)&&Q(e,this.length-8);let r=t+256*this[++e]+65536*this[++e]+0x1000000*this[++e],n=this[++e]+256*this[++e]+65536*this[++e]+0x1000000*i;return BigInt(r)+(BigInt(n)<>>=0,"offset");let t=this[e],i=this[e+7];(void 0===t||void 0===i)&&Q(e,this.length-8);let r=0x1000000*t+65536*this[++e]+256*this[++e]+this[++e],n=0x1000000*this[++e]+65536*this[++e]+256*this[++e]+i;return(BigInt(r)<>>=0,t>>>=0,i||H(e,t,this.length);let r=this[e],n=1,s=0;for(;++s=(n*=128)&&(r-=Math.pow(2,8*t)),r},u.prototype.readIntBE=function(e,t,i){e>>>=0,t>>>=0,i||H(e,t,this.length);let r=t,n=1,s=this[e+--r];for(;r>0&&(n*=256);)s+=this[e+--r]*n;return s>=(n*=128)&&(s-=Math.pow(2,8*t)),s},u.prototype.readInt8=function(e,t){return(e>>>=0,t||H(e,1,this.length),128&this[e])?-((255-this[e]+1)*1):this[e]},u.prototype.readInt16LE=function(e,t){e>>>=0,t||H(e,2,this.length);let i=this[e]|this[e+1]<<8;return 32768&i?0xffff0000|i:i},u.prototype.readInt16BE=function(e,t){e>>>=0,t||H(e,2,this.length);let i=this[e+1]|this[e]<<8;return 32768&i?0xffff0000|i:i},u.prototype.readInt32LE=function(e,t){return e>>>=0,t||H(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return e>>>=0,t||H(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readBigInt64LE=eu(function(e){J(e>>>=0,"offset");let t=this[e],i=this[e+7];return(void 0===t||void 0===i)&&Q(e,this.length-8),(BigInt(this[e+4]+256*this[e+5]+65536*this[e+6]+(i<<24))<>>=0,"offset");let t=this[e],i=this[e+7];return(void 0===t||void 0===i)&&Q(e,this.length-8),(BigInt((t<<24)+65536*this[++e]+256*this[++e]+this[++e])<>>=0,t||H(e,4,this.length),s.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return e>>>=0,t||H(e,4,this.length),s.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return e>>>=0,t||H(e,8,this.length),s.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return e>>>=0,t||H(e,8,this.length),s.read(this,e,!1,52,8)},u.prototype.writeUintLE=u.prototype.writeUIntLE=function(e,t,i,r){if(e=+e,t>>>=0,i>>>=0,!r){let r=Math.pow(2,8*i)-1;z(this,e,t,i,r,0)}let n=1,s=0;for(this[t]=255&e;++s>>=0,i>>>=0,!r){let r=Math.pow(2,8*i)-1;z(this,e,t,i,r,0)}let n=i-1,s=1;for(this[t+n]=255&e;--n>=0&&(s*=256);)this[t+n]=e/s&255;return t+i},u.prototype.writeUint8=u.prototype.writeUInt8=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,1,255,0),this[t]=255&e,t+1},u.prototype.writeUint16LE=u.prototype.writeUInt16LE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},u.prototype.writeUint16BE=u.prototype.writeUInt16BE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},u.prototype.writeUint32LE=u.prototype.writeUInt32LE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,4,0xffffffff,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},u.prototype.writeUint32BE=u.prototype.writeUInt32BE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,4,0xffffffff,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},u.prototype.writeBigUInt64LE=eu(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return W(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeBigUInt64BE=eu(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return V(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeIntLE=function(e,t,i,r){if(e=+e,t>>>=0,!r){let r=Math.pow(2,8*i-1);z(this,e,t,i,r-1,-r)}let n=0,s=1,a=0;for(this[t]=255&e;++n>0)-a&255;return t+i},u.prototype.writeIntBE=function(e,t,i,r){if(e=+e,t>>>=0,!r){let r=Math.pow(2,8*i-1);z(this,e,t,i,r-1,-r)}let n=i-1,s=1,a=0;for(this[t+n]=255&e;--n>=0&&(s*=256);)e<0&&0===a&&0!==this[t+n+1]&&(a=1),this[t+n]=(e/s>>0)-a&255;return t+i},u.prototype.writeInt8=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},u.prototype.writeInt16BE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},u.prototype.writeInt32LE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,4,0x7fffffff,-0x80000000),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},u.prototype.writeInt32BE=function(e,t,i){return e=+e,t>>>=0,i||z(this,e,t,4,0x7fffffff,-0x80000000),e<0&&(e=0xffffffff+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},u.prototype.writeBigInt64LE=eu(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return W(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeBigInt64BE=eu(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return V(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeFloatLE=function(e,t,i){return U(this,e,t,!0,i)},u.prototype.writeFloatBE=function(e,t,i){return U(this,e,t,!1,i)},u.prototype.writeDoubleLE=function(e,t,i){return K(this,e,t,!0,i)},u.prototype.writeDoubleBE=function(e,t,i){return K(this,e,t,!1,i)},u.prototype.copy=function(e,t,i,r){if(!u.isBuffer(e))throw TypeError("argument should be a Buffer");if(i||(i=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw RangeError("Index out of range");if(r<0)throw RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(n=t;n=r+4;i-=3)t=`_${e.slice(i-3,i)}${t}`;return`${e.slice(0,i)}${t}`}function q(e,t,i){J(t,"offset"),(void 0===e[t]||void 0===e[t+i])&&Q(t,e.length-(i+1))}function Z(e,t,i,r,n,s){if(e>i||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${(s+1)*8}${n}`:`>= -(2${n} ** ${(s+1)*8-1}${n}) and < 2 ** ${(s+1)*8-1}${n}`:`>= ${t}${n} and <= ${i}${n}`,new $.ERR_OUT_OF_RANGE("value",r,e)}q(r,n,s)}function J(e,t){if("number"!=typeof e)throw new $.ERR_INVALID_ARG_TYPE(t,"number",e)}function Q(e,t,i){if(Math.floor(e)!==e)throw J(e,i),new $.ERR_OUT_OF_RANGE(i||"offset","an integer",e);if(t<0)throw new $.ERR_BUFFER_OUT_OF_BOUNDS;throw new $.ERR_OUT_OF_RANGE(i||"offset",`>= ${i?1:0} and <= ${t}`,e)}Y("ERR_BUFFER_OUT_OF_BOUNDS",function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Y("ERR_INVALID_ARG_TYPE",function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`},TypeError),Y("ERR_OUT_OF_RANGE",function(e,t,i){let r=`The value of "${e}" is out of range.`,n=i;return Number.isInteger(i)&&Math.abs(i)>0x100000000?n=X(String(i)):"bigint"==typeof i&&(n=String(i),(i>BigInt(2)**BigInt(32)||i<-(BigInt(2)**BigInt(32)))&&(n=X(n)),n+="n"),r+=` It must be ${t}. Received ${n}`},RangeError);let ee=/[^+/0-9A-Za-z-_]/g;function et(e){if((e=(e=e.split("=")[0]).trim().replace(ee,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}function ei(e,t){let i;t=t||1/0;let r=e.length,n=null,s=[];for(let a=0;a55295&&i<57344){if(!n){if(i>56319||a+1===r){(t-=3)>-1&&s.push(239,191,189);continue}n=i;continue}if(i<56320){(t-=3)>-1&&s.push(239,191,189),n=i;continue}i=(n-55296<<10|i-56320)+65536}else n&&(t-=3)>-1&&s.push(239,191,189);if(n=null,i<128){if((t-=1)<0)break;s.push(i)}else if(i<2048){if((t-=2)<0)break;s.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;s.push(i>>12|224,i>>6&63|128,63&i|128)}else if(i<1114112){if((t-=4)<0)break;s.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}else throw Error("Invalid code point")}return s}function er(e){let t=[];for(let i=0;i>8,n.push(i%256),n.push(r);return n}function es(e){return n.toByteArray(et(e))}function ea(e,t,i,r){let n;for(n=0;n=t.length)&&!(n>=e.length);++n)t[n+i]=e[n];return n}function eo(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function el(e){return e!=e}let eh=function(){let e="0123456789abcdef",t=Array(256);for(let i=0;i<16;++i){let r=16*i;for(let n=0;n<16;++n)t[r+n]=e[i]+e[n]}return t}();function eu(e){return"undefined"==typeof BigInt?ed:e}function ed(){throw Error("BigInt not supported")}},2485:function(e,t,i){"use strict";var r=i(5629),n=i(7883),s=i(2408),a=i(1063);e.exports=a||r.call(s,n)},8783:function(e,t,i){"use strict";var r=i(5629),n=i(7883),s=i(2485);e.exports=function(){return s(r,n,arguments)}},7883:function(e){"use strict";e.exports=Function.prototype.apply},2408:function(e){"use strict";e.exports=Function.prototype.call},3075:function(e,t,i){"use strict";var r=i(5629),n=i(5559),s=i(2408),a=i(2485);e.exports=function(e){if(e.length<1||"function"!=typeof e[0])throw new n("a function is required");return a(r,s,e)}},1063:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect&&Reflect.apply},790:function(e,t,i){"use strict";var r=i(391),n=i(4180),s=n(r("String.prototype.indexOf"));e.exports=function(e,t){var i=r(e,!!t);return"function"==typeof i&&s(e,".prototype.")>-1?n(i):i}},4180:function(e,t,i){"use strict";var r=i(7756),n=i(3700),s=i(3075),a=i(8783);e.exports=function(e){var t=s(arguments),i=e.length-(arguments.length-1);return r(t,1+(i>0?i:0),!0)},n?n(e.exports,"apply",{value:a}):e.exports.apply=a},1637:function(e,t,i){"use strict";var r=i(391),n=i(3075),s=n([r("%String.prototype.indexOf%")]);e.exports=function(e,t){var i=r(e,!!t);return"function"==typeof i&&s(e,".prototype.")>-1?n([i]):i}},1591:function(e){e.exports={A:{A:{K:0,E:0,F:0,G:.0346884,A:0,B:.433605,jC:0},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","jC","K","E","F","G","A","B","","",""],E:"IE",F:{jC:0x395be300,K:0x3b898d80,E:0x45356e80,F:0x49c18b00,G:0x4d7d5a80,A:0x50454480,B:1381968e3}},B:{A:{6:.003521,7:.003521,8:.003521,9:.003521,C:0,L:0,M:0,H:0,N:0,O:.003521,P:.084504,Q:0,I:0,R:0,S:0,T:0,U:0,V:0,W:0,X:0,Y:0,Z:0,a:0,b:.014084,c:0,d:0,e:0,f:0,g:0,h:0,i:0,j:0,k:0,l:0,m:.003521,n:0,o:0,p:0,q:0,r:.003521,s:.052815,t:0,u:.003521,v:.003521,w:.007042,x:.010563,AB:.007042,BB:.017605,CB:.010563,DB:.014084,EB:.007042,FB:.010563,GB:.010563,HB:.024647,IB:.021126,JB:.024647,KB:.03521,LB:.137319,MB:4.16182,D:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","C","L","M","H","N","O","P","Q","I","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","D","","",""],E:"Edge",F:{6:0x64b9ca80,7:1692576e3,8:0x65024d00,9:0x65288880,C:1438128e3,L:0x5643d680,M:1470096e3,H:0x58ec1c80,N:0x59e54800,O:0x5ae65c80,P:0x5bea1400,Q:0x5e1e5600,I:0x5e3ca880,R:1586736e3,S:0x5ec5c480,T:0x5f0f9880,U:0x5f46f780,V:0x5f7fa800,W:0x5fb70700,X:161136e4,Y:1614816e3,Z:0x60763080,a:0x60aee100,b:1626912e3,c:0x61316580,d:0x614d1500,e:0x6170ad80,f:0x619add80,g:0x61d63100,h:0x61fc6c80,i:0x62200500,j:0x62536f80,k:0x626b2a80,l:0x62955a80,m:0x62b3ad00,n:0x62ec5d80,o:0x630ff600,p:0x633a2600,q:0x635b1b80,r:0x638d3480,s:0x63bf4d80,t:0x63e43780,u:0x640e6780,v:0x642f5d00,w:0x6452f580,x:1685664e3,AB:0x65443800,BB:0x65725c80,CB:0x65b2f600,DB:0x65d93180,EB:1711152e3,FB:0x66206280,GB:0x6647ef80,HB:0x66737100,IB:0x66a19580,JB:0x66c7d100,KB:1726704e3,LB:0x67105380,MB:0x67353d80,D:0x678ee380},D:{C:"ms",L:"ms",M:"ms",H:"ms",N:"ms",O:"ms",P:"ms"}},C:{A:{0:0,1:0,2:0,3:0,4:0,5:0,6:.253512,7:0,8:0,9:.088025,kC:0,IC:0,J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:.014084,C:0,L:0,M:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:0,aB:0,bB:0,cB:0,dB:0,eB:.007042,fB:.003521,gB:0,hB:0,iB:0,jB:0,kB:0,lB:0,mB:0,nB:.028168,oB:0,pB:0,qB:.007042,rB:.014084,sB:0,tB:0,JC:.003521,uB:0,KC:0,vB:0,wB:0,xB:0,yB:0,zB:0,"0B":0,"1B":0,"2B":0,"3B":0,"4B":0,"5B":0,"6B":0,"7B":0,"8B":0,"9B":0,AC:0,BC:.010563,Q:0,I:0,R:0,LC:0,S:0,T:0,U:0,V:0,W:0,X:.003521,Y:0,Z:0,a:0,b:0,c:0,d:0,e:0,f:0,g:0,h:0,i:0,j:0,k:0,l:0,m:.007042,n:0,o:0,p:0,q:0,r:0,s:.003521,t:0,u:0,v:0,w:.007042,x:.003521,AB:0,BB:.003521,CB:0,DB:0,EB:0,FB:0,GB:.017605,HB:.003521,IB:.010563,JB:.07042,KB:.007042,LB:.007042,MB:.017605,D:.077462,MC:1.38727,NC:.007042,OC:0,lC:0,mC:0,nC:0,oC:0},B:"moz",C:["kC","IC","nC","oC","J","NB","K","E","F","G","A","B","C","L","M","H","N","O","P","OB","y","z","0","1","2","3","4","5","PB","QB","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","lB","mB","nB","oB","pB","qB","rB","sB","tB","JC","uB","KC","vB","wB","xB","yB","zB","0B","1B","2B","3B","4B","5B","6B","7B","8B","9B","AC","BC","Q","I","R","LC","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","D","MC","NC","OC","lC","mC"],E:"Firefox",F:{0:0x51917e80,1:0x51c8dd80,2:0x52003c80,3:1379376e3,4:0x52a65980,5:1391472e3,6:0x64a36100,7:1690848e3,8:0x64ed3500,9:0x65121f00,kC:1161648e3,IC:0x4856fe80,nC:124632e4,oC:1264032e3,J:1300752e3,NB:0x4dffdf00,K:0x4e49b300,E:0x4e811200,F:0x4e811200,G:0x4eb87100,A:0x4eefd000,B:1327968e3,C:0x4f5e8e00,L:0x4f95ed00,M:0x4fcd4c00,H:0x5004ab00,N:1346112e3,O:0x50736900,P:0x50aebc80,OB:0x50eb6180,y:1361232e3,z:0x515a1f80,PB:0x53278c80,QB:0x535eeb80,RB:0x53964a80,SB:0x53cda980,TB:1409616e3,UB:0x543c6780,VB:1417392e3,WB:0x54b46000,XB:1424736e3,YB:0x5521cc80,ZB:0x55529400,aB:0x5595d080,bB:0x55c93b00,cB:144288e4,dB:0x5637f900,eB:0x566f5800,fB:0x56a80880,gB:0x56de1600,hB:0x571eaf80,iB:0x57560e80,jB:1470096e3,kB:0x57e07c00,lB:1479168e3,mB:1485216e3,nB:0x58bdf800,oB:149256e4,pB:1497312e3,qB:0x5988ff00,rB:0x59cc3b80,sB:0x5a0a3200,tB:0x5a667b00,JC:0x5aa86600,uB:1525824e3,KC:0x5b318200,vB:0x5b8f1c80,wB:0x5bce6480,xB:0x5c0efe00,yB:154872e4,zB:0x5c903100,"0B":0x5ce33f80,"1B":0x5d23d900,"2B":0x5d6dad00,"3B":0x5daf9800,"4B":0x5de5a580,"5B":0x5e13ca00,"6B":0x5e41ee80,"7B":0x5e66d880,"8B":1586304e3,"9B":0x5eb0ac80,AC:1591056e3,BC:0x5efa8080,Q:0x5f1f6a80,I:0x5f445480,R:0x5f693e80,LC:1603152e3,S:0x5fb31280,T:0x5fd7fc80,U:0x600f5b80,V:0x60344580,W:0x60592f80,X:0x607cc800,Y:0x60b57880,Z:0x60ecd780,a:0x6111c180,b:0x6136ab80,c:1633392e3,d:0x61807f80,e:0x61aea400,f:0x61dcc880,g:0x62030400,h:0x62269c80,i:0x624b8680,j:1651536e3,k:0x62955a80,l:0x62ba4480,m:0x62df2e80,n:0x63041880,o:1663632e3,p:0x634dec80,q:0x6372d680,r:0x6397c080,s:0x63c5e500,t:0x63eacf00,u:1678752e3,v:0x6434a300,w:0x64598d00,x:0x647e7700,AB:0x65370900,BB:0x655bf300,CB:1702944e3,DB:1705968e3,EB:0x65d3eb80,FB:0x65f8d580,GB:0x661dbf80,HB:0x6642a980,IB:1718064e3,JB:0x668c7d80,KB:0x66b16780,LB:0x66d65180,MB:0x66fb3b80,D:173016e4,MC:0x67450f80,NC:1736208e3,OC:null,lC:null,mC:null}},D:{A:{0:0,1:0,2:0,3:0,4:0,5:0,6:.024647,7:.130277,8:.07042,9:.059857,J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:0,C:0,L:0,M:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:.007042,aB:0,bB:0,cB:0,dB:0,eB:0,fB:0,gB:.003521,hB:0,iB:.003521,jB:.017605,kB:.014084,lB:.014084,mB:0,nB:.003521,oB:.003521,pB:0,qB:0,rB:.007042,sB:0,tB:.024647,JC:0,uB:0,KC:.007042,vB:0,wB:0,xB:0,yB:0,zB:.021126,"0B":0,"1B":0,"2B":.010563,"3B":.014084,"4B":0,"5B":0,"6B":.007042,"7B":.007042,"8B":.007042,"9B":.003521,AC:.017605,BC:.010563,Q:.084504,I:.007042,R:.03521,S:.028168,T:.003521,U:.014084,V:.021126,W:.063378,X:.007042,Y:.010563,Z:.007042,a:.031689,b:.014084,c:.014084,d:.03521,e:.038731,f:.007042,g:.010563,h:.042252,i:.014084,j:.021126,k:.014084,l:.010563,m:.10563,n:.021126,o:.010563,p:.017605,q:.021126,r:.03521,s:1.09503,t:.017605,u:.031689,v:.03521,w:.109151,x:.07042,AB:.042252,BB:.063378,CB:.119714,DB:.077462,EB:.080983,FB:.14084,GB:1.28869,HB:.415478,IB:.334495,JB:.179571,KB:.232386,LB:.982359,MB:15.0065,D:.017605,MC:.014084,NC:0,OC:0},B:"webkit",C:["","","","","","","","J","NB","K","E","F","G","A","B","C","L","M","H","N","O","P","OB","y","z","0","1","2","3","4","5","PB","QB","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","lB","mB","nB","oB","pB","qB","rB","sB","tB","JC","uB","KC","vB","wB","xB","yB","zB","0B","1B","2B","3B","4B","5B","6B","7B","8B","9B","AC","BC","Q","I","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","6","7","8","9","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","D","MC","NC","OC"],E:"Chrome",F:{0:0x50172000,1:0x5060f400,2:0x5099a480,3:0x50ef5600,4:0x51256380,5:0x51538800,6:0x64b72780,7:0x64dac000,8:0x64ffaa00,9:1696896e3,J:0x4b5cdf00,NB:0x4bfb1300,K:0x4c7ee900,E:0x4cbf8280,F:1291248e3,G:0x4d4b4180,A:0x4d757180,B:0x4db75c80,C:0x4ded6a00,L:0x4e373e00,M:0x4e729180,H:0x4e729180,N:0x4ea5fc00,O:0x4ee69580,P:0x4f31bb00,OB:0x4f725480,y:133704e4,z:0x4fe8fb80,PB:0x519ab900,QB:0x51e73000,RB:0x5212b180,SB:0x52816f80,TB:0x52d47e00,UB:0x53069700,VB:0x53448d80,WB:1400544e3,XB:0x53c5c080,YB:0x53fbce00,ZB:141264e4,aB:0x546a8c00,bB:0x54beec00,cB:0x54f79c80,dB:0x5532f000,eB:143208e4,fB:0x55aedd00,gB:1441152e3,hB:0x561d9b00,iB:0x565e3480,jB:1453248e3,kB:0x56d77e80,lB:1460592e3,mB:0x5744eb00,nB:0x57901080,oB:0x57c61e00,pB:0x57fd7d00,qB:0x583f6800,rB:0x5887ea80,sB:0x58c09b00,tB:149256e4,JC:0x5935f080,uB:0x59768a00,KC:0x59ade900,vB:0x59e54800,wB:0x5a273300,xB:1516752e3,yB:0x5a9dda00,zB:0x5ad53900,"0B":1527552e3,"1B":0x5b566c00,"2B":0x5b8dcb00,"3B":1539648e3,"4B":1543968e3,"5B":154872e4,"6B":0x5c86f680,"7B":0x5cbe5580,"8B":0x5cf5b480,"9B":0x5d3f8880,AC:0x5d76e780,BC:0x5dae4680,Q:1575936e3,I:0x5e3a0580,R:1586304e3,S:0x5ec32180,T:0x5f0cf580,U:0x5f445480,V:0x5f7bb380,W:0x5fb31280,X:0x60062100,Y:0x603c2e80,Z:1618272e3,a:0x60ad8f80,b:0x60f61200,c:1630368e3,d:0x614a7200,e:0x616e0a80,f:0x6192f480,g:0x61d4df80,h:0x61f87800,i:0x621d6200,j:1648512e3,k:0x62673600,l:0x628c2000,m:0x62b10a00,n:0x62e86900,o:0x630d5300,p:0x63323d00,q:1666656e3,r:166968e4,s:0x63bcaa80,t:1675728e3,u:0x64067e80,v:0x642b6880,w:0x64505280,x:0x64753c80,AB:0x65404380,BB:0x65725c80,CB:1705968e3,DB:0x65d3eb80,EB:0x65f8d580,FB:0x661dbf80,GB:0x6642a980,HB:1718064e3,IB:0x66970980,JB:1724112e3,KB:0x66e8c680,LB:0x670db080,MB:0x67329a80,D:0x6785a900,MC:null,NC:null,OC:null}},E:{A:{J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:0,C:0,L:.003521,M:.017605,H:.003521,pC:0,PC:0,qC:0,rC:0,sC:0,tC:0,QC:0,CC:.003521,DC:.007042,uC:.038731,vC:.052815,wC:.014084,RC:.007042,SC:.014084,EC:.021126,xC:.169008,FC:.024647,TC:.028168,UC:.021126,VC:.049294,WC:.017605,XC:.031689,yC:.225344,GC:.014084,YC:.024647,ZC:.024647,aC:.028168,bC:.066899,cC:.130277,zC:.415478,HC:.080983,dC:1.05278,eC:.144361,fC:.003521,gC:0,"0C":0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pC","PC","J","NB","qC","K","rC","E","sC","F","G","tC","A","QC","B","CC","C","DC","L","uC","M","vC","H","wC","RC","SC","EC","xC","FC","TC","UC","VC","WC","XC","yC","GC","YC","ZC","aC","bC","cC","zC","HC","dC","eC","fC","gC","0C",""],E:"Safari",F:{pC:0x47df0600,PC:0x491b6e00,J:0x4a2c5480,NB:0x4c0c3680,qC:131112e4,K:0x500f3700,rC:13824e5,E:13824e5,sC:0x541a2080,F:0x543f0a80,G:0x560c7780,tC:0x56ef3980,A:0x57e07c00,QC:0x58d85600,B:0x59c05e00,CC:0x5abc2c80,C:0x5b9eee80,DC:1553472e3,L:0x5d82c500,uC:1585008e3,M:0x5f615580,vC:0x60860280,H:1632096e3,wC:0x61789680,RC:0x61b68d00,SC:1647216e3,EC:0x6282e580,xC:0x62d74580,FC:0x631e7680,TC:0x6355d580,UC:0x6397c080,VC:1674432e3,WC:0x6420dc80,XC:1684368e3,yC:0x64bdbf00,GC:0x65121f00,YC:1698192e3,ZC:0x65765100,aC:0x65adb000,bC:0x65e66080,cC:0x66415800,zC:0x66a6db80,HC:0x66e77500,dC:0x671ed400,eC:0x6758d600,fC:1737936e3,gC:null,"0C":null}},F:{A:{0:0,1:0,2:0,3:0,4:0,5:0,G:0,B:0,C:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:0,aB:0,bB:.003521,cB:0,dB:0,eB:0,fB:0,gB:0,hB:.014084,iB:0,jB:0,kB:0,lB:0,mB:0,nB:0,oB:0,pB:0,qB:0,rB:0,sB:0,tB:0,uB:0,vB:0,wB:0,xB:0,yB:0,zB:0,"0B":0,"1B":0,"2B":0,"3B":0,"4B":0,"5B":0,"6B":0,"7B":0,"8B":0,"9B":0,AC:0,BC:0,Q:0,I:0,R:0,LC:0,S:0,T:0,U:.007042,V:.028168,W:0,X:0,Y:0,Z:0,a:0,b:0,c:0,d:0,e:.031689,f:0,g:0,h:0,i:0,j:0,k:0,l:.021126,m:0,n:0,o:0,p:0,q:0,r:0,s:0,t:0,u:0,v:0,w:.003521,x:.616175,"1C":0,"2C":0,"3C":0,"4C":0,CC:0,hC:0,"5C":0,DC:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","G","1C","2C","3C","4C","B","CC","hC","5C","C","DC","H","N","O","P","OB","y","z","0","1","2","3","4","5","PB","QB","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","lB","mB","nB","oB","pB","qB","rB","sB","tB","uB","vB","wB","xB","yB","zB","0B","1B","2B","3B","4B","5B","6B","7B","8B","9B","AC","BC","Q","I","R","LC","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","","",""],E:"Opera",F:{0:0x538d1000,1:0x53cda980,2:1409616e3,3:0x543db900,4:0x5477bb00,5:0x54c6d500,G:0x44973a80,"1C":1223424e3,"2C":0x4a9c6400,"3C":1267488e3,"4C":0x4c2bda80,B:0x4d095680,CC:0x4da39600,hC:0x4e091980,"5C":0x4edd5b00,C:0x4edd5b00,DC:0x50970180,H:0x51d21800,N:0x521bec00,O:1381104e3,P:1386288e3,OB:0x52e6f300,y:0x53151780,z:0x53682600,PB:0x54fe3400,QB:0x553ecd80,RB:1433808e3,SB:0x55c00080,TB:1442448e3,UB:1445904e3,VB:0x565f8600,WB:0x56aff180,XB:0x56dcc480,YB:146232e4,ZB:1465344e3,aB:1470096e3,bB:0x57e07c00,cB:0x580d4f00,dB:0x584f3a00,eB:0x58990e00,fB:0x58d06d00,gB:0x59125800,hB:0x5949b700,iB:0x598a5080,jB:0x59caea00,kB:0x5a024900,lB:1515024e3,mB:0x5a7a4180,nB:0x5ab2f200,oB:0x5af38b80,pB:1530144e3,qB:0x5b7df900,rB:0x5ba97a80,sB:0x5bfdda80,tB:0x5c47ae80,uB:1554768e3,vB:0x5d140700,wB:0x5d5b3800,xB:0x5d9a8000,yB:0x5dcc9900,zB:0x5e151b80,"0B":0x5e697b80,"1B":0x5e9f8900,"2B":0x5ef29780,"3B":0x5f1f6a80,"4B":1600128e3,"5B":0x5f8f7a00,"6B":161352e4,"7B":1612224e3,"8B":1616544e3,"9B":1619568e3,AC:0x60c7ed80,BC:0x61088700,Q:0x613fe600,I:1633392e3,R:1635984e3,LC:0x61a80c80,S:0x61e75480,T:0x620c3e80,U:0x623a6300,V:0x625f4d00,W:0x6282e580,X:0x629fe680,Y:1657152e3,Z:0x62fd8100,a:0x63211980,b:1668816e3,c:0x63757980,d:0x639a6380,e:0x63d9ab80,f:1677024e3,g:0x641b9680,h:0x64408080,i:0x6462c780,j:0x6490ec00,k:0x64c06200,l:0x64e54c00,m:0x651a0800,n:169992e4,o:169992e4,p:1702944e3,q:1707264e3,r:0x65ee4980,s:0x66036180,t:1716336e3,u:0x667a0880,v:1721088e3,w:0x66c67f80,x:0x66f35280},D:{G:"o",B:"o",C:"o","1C":"o","2C":"o","3C":"o","4C":"o",CC:"o",hC:"o","5C":"o",DC:"o"}},G:{A:{F:0,PC:0,"6C":0,iC:.00278986,"7C":.00139493,"8C":.00557971,"9C":.00836957,AD:0,BD:.00557971,CD:.0223189,DD:.00278986,ED:.0320834,FD:.234348,GD:.0111594,HD:.00697464,ID:.156232,JD:.00278986,KD:.0474276,LD:.00697464,MD:.0237138,ND:.10462,OD:.0655617,PD:.0362681,RC:.0348732,SC:.0418479,EC:.0474276,QD:.542627,FC:.0906704,TC:.193895,UC:.0990399,VC:.171576,WC:.0348732,XC:.0711414,RD:.683515,GC:.0474276,YC:.078116,ZC:.0641667,aC:.0920653,bC:.199475,cC:.485435,SD:1.82178,HC:.59424,dC:6.92303,eC:.813243,fC:.0306884,gC:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","PC","6C","iC","7C","8C","9C","F","AD","BD","CD","DD","ED","FD","GD","HD","ID","JD","KD","LD","MD","ND","OD","PD","RC","SC","EC","QD","FC","TC","UC","VC","WC","XC","RD","GC","YC","ZC","aC","bC","cC","SD","HC","dC","eC","fC","gC","",""],E:"Safari on iOS",F:{PC:0x4bb68500,"6C":1283904e3,iC:0x4d76c300,"7C":0x4f56a500,"8C":0x5105bf80,"9C":0x531d0080,F:1410912e3,AD:0x54445080,BD:0x55f8b100,CD:0x56ef3980,DD:0x57d74180,ED:0x58d85600,FD:0x59c05e00,GD:0x5abc2c80,HD:0x5b9eee80,ID:1553472e3,JD:0x5d82c500,KD:0x5db62f80,LD:0x5e2f7980,MD:1585008e3,ND:0x5f615580,OD:0x60860280,PD:1632096e3,RC:0x61b68d00,SC:1647216e3,EC:0x62819400,QD:0x62d74580,FC:0x631e7680,TC:0x6355d580,UC:0x6397c080,VC:1674432e3,WC:0x6420dc80,XC:1684368e3,RD:0x64bdbf00,GC:0x65079300,YC:1698192e3,ZC:0x65765100,aC:0x65adb000,bC:0x65e66080,cC:0x66415800,SD:0x66a6db80,HC:0x66e77500,dC:0x671ed400,eC:0x6758d600,fC:1737936e3,gC:null}},H:{A:{TD:.04},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","TD","","",""],E:"Opera Mini",F:{TD:1426464e3}},I:{A:{IC:0,J:0,D:.24566,UD:0,VD:0,WD:0,XD:246202e-10,iC:492404e-10,YD:0,ZD:295442e-9},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","UD","VD","WD","IC","J","XD","iC","YD","ZD","D","","",""],E:"Android Browser",F:{UD:0x4ae4e680,VD:0x4bf47b80,WD:0x4cfc2780,IC:0x4d62fc80,J:1318896e3,XD:1341792e3,iC:1374624e3,YD:0x52a50800,ZD:0x538bbe80,D:0x6792d800}},J:{A:{E:0,A:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","E","A","","",""],E:"Blackberry Browser",F:{E:1325376e3,A:1359504e3}},K:{A:{A:0,B:0,C:0,I:1.0096,CC:0,hC:0,DC:0},B:"o",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","CC","hC","C","DC","I","","",""],E:"Opera Mobile",F:{A:0x4cb79980,B:1300752e3,CC:0x4e5ecb00,hC:0x4e938700,C:0x4f4ac780,DC:0x50736900,I:0x65e90380},D:{I:"webkit"}},L:{A:{D:47.0453},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","D","","",""],E:"Chrome for Android",F:{D:0x6792d800}},M:{A:{D:.32395},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","D","","",""],E:"Firefox for Android",F:{D:173016e4}},N:{A:{A:0,B:0},B:"ms",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A","B","","",""],E:"IE Mobile",F:{A:0x4fe11280,B:1353456e3}},O:{A:{EC:.855228},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","EC","","",""],E:"UC Browser for Android",F:{EC:0x65ee4980},D:{EC:"webkit"}},P:{A:{0:.0322125,1:.04295,2:.0536875,3:.04295,4:.1718,5:1.77169,J:.0859,y:0,z:.0322125,aD:.0107375,bD:0,cD:.021475,dD:0,eD:0,QC:0,fD:0,gD:0,hD:0,iD:0,jD:0,FC:0,GC:.0107375,HC:0,kD:.0107375},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","J","aD","bD","cD","dD","eD","QC","fD","gD","hD","iD","jD","FC","GC","HC","kD","y","z","0","1","2","3","4","5","","",""],E:"Samsung Internet",F:{0:0x64b09000,1:0x652f2000,2:0x66036180,3:0x663ac080,4:0x66624d80,5:0x66db9780,J:1461024e3,aD:0x58532e80,bD:1509408e3,cD:0x5b187580,dD:1546128e3,eD:0x5ca2a600,QC:0x5d744480,fD:0x5e546380,gD:0x5efa8080,hD:0x5fb46400,iD:0x6078d380,jD:1629072e3,FC:1640736e3,GC:0x62731380,HC:0x62ec5d80,kD:0x63606180,y:0x63faa100,z:0x6466bc00}},Q:{A:{lD:.239723},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","lD","","",""],E:"QQ Browser",F:{lD:1710288e3}},R:{A:{mD:0},B:"webkit",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","mD","","",""],E:"Baidu Browser",F:{mD:0x65ef9b00}},S:{A:{nD:.019437,oD:0},B:"moz",C:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","nD","oD","","",""],E:"KaiOS Browser",F:{nD:0x5b108c80,oD:1631664e3}}}},6578:function(e){e.exports={0:"22",1:"23",2:"24",3:"25",4:"26",5:"27",6:"115",7:"116",8:"117",9:"118",A:"10",B:"11",C:"12",D:"132",E:"7",F:"8",G:"9",H:"15",I:"80",J:"4",K:"6",L:"13",M:"14",N:"16",O:"17",P:"18",Q:"79",R:"81",S:"83",T:"84",U:"85",V:"86",W:"87",X:"88",Y:"89",Z:"90",a:"91",b:"92",c:"93",d:"94",e:"95",f:"96",g:"97",h:"98",i:"99",j:"100",k:"101",l:"102",m:"103",n:"104",o:"105",p:"106",q:"107",r:"108",s:"109",t:"110",u:"111",v:"112",w:"113",x:"114",y:"20",z:"21",AB:"119",BB:"120",CB:"121",DB:"122",EB:"123",FB:"124",GB:"125",HB:"126",IB:"127",JB:"128",KB:"129",LB:"130",MB:"131",NB:"5",OB:"19",PB:"28",QB:"29",RB:"30",SB:"31",TB:"32",UB:"33",VB:"34",WB:"35",XB:"36",YB:"37",ZB:"38",aB:"39",bB:"40",cB:"41",dB:"42",eB:"43",fB:"44",gB:"45",hB:"46",iB:"47",jB:"48",kB:"49",lB:"50",mB:"51",nB:"52",oB:"53",pB:"54",qB:"55",rB:"56",sB:"57",tB:"58",uB:"60",vB:"62",wB:"63",xB:"64",yB:"65",zB:"66","0B":"67","1B":"68","2B":"69","3B":"70","4B":"71","5B":"72","6B":"73","7B":"74","8B":"75","9B":"76",AC:"77",BC:"78",CC:"11.1",DC:"12.1",EC:"15.5",FC:"16.0",GC:"17.0",HC:"18.0",IC:"3",JC:"59",KC:"61",LC:"82",MC:"133",NC:"134",OC:"135",PC:"3.2",QC:"10.1",RC:"15.2-15.3",SC:"15.4",TC:"16.1",UC:"16.2",VC:"16.3",WC:"16.4",XC:"16.5",YC:"17.1",ZC:"17.2",aC:"17.3",bC:"17.4",cC:"17.5",dC:"18.1",eC:"18.2",fC:"18.3",gC:"18.4",hC:"11.5",iC:"4.2-4.3",jC:"5.5",kC:"2",lC:"136",mC:"137",nC:"3.5",oC:"3.6",pC:"3.1",qC:"5.1",rC:"6.1",sC:"7.1",tC:"9.1",uC:"13.1",vC:"14.1",wC:"15.1",xC:"15.6",yC:"16.6",zC:"17.6","0C":"TP","1C":"9.5-9.6","2C":"10.0-10.1","3C":"10.5","4C":"10.6","5C":"11.6","6C":"4.0-4.1","7C":"5.0-5.1","8C":"6.0-6.1","9C":"7.0-7.1",AD:"8.1-8.4",BD:"9.0-9.2",CD:"9.3",DD:"10.0-10.2",ED:"10.3",FD:"11.0-11.2",GD:"11.3-11.4",HD:"12.0-12.1",ID:"12.2-12.5",JD:"13.0-13.1",KD:"13.2",LD:"13.3",MD:"13.4-13.7",ND:"14.0-14.4",OD:"14.5-14.8",PD:"15.0-15.1",QD:"15.6-15.8",RD:"16.6-16.7",SD:"17.6-17.7",TD:"all",UD:"2.1",VD:"2.2",WD:"2.3",XD:"4.1",YD:"4.4",ZD:"4.4.3-4.4.4",aD:"5.0-5.4",bD:"6.2-6.4",cD:"7.2-7.4",dD:"8.2",eD:"9.2",fD:"11.1-11.2",gD:"12.0",hD:"13.0",iD:"14.0",jD:"15.0",kD:"19.0",lD:"14.9",mD:"13.52",nD:"2.5",oD:"3.0-3.1"}},2070:function(e){e.exports={A:"ie",B:"edge",C:"firefox",D:"chrome",E:"safari",F:"opera",G:"ios_saf",H:"op_mini",I:"android",J:"bb",K:"op_mob",L:"and_chr",M:"and_ff",N:"ie_mob",O:"and_uc",P:"samsung",Q:"and_qq",R:"baidu",S:"kaios"}},2573:function(e,t,i){"use strict";let r=i(2468).browsers,n=i(9518).browserVersions,s=i(1591);function a(e){return Object.keys(e).reduce((t,i)=>(t[n[i]]=e[i],t),{})}e.exports.agents=Object.keys(s).reduce((e,t)=>{let i=s[t];return e[r[t]]=Object.keys(i).reduce((e,t)=>("A"===t?e.usage_global=a(i[t]):"C"===t?e.versions=i[t].reduce((e,t)=>(""===t?e.push(null):e.push(n[t]),e),[]):"D"===t?e.prefix_exceptions=a(i[t]):"E"===t?e.browser=i[t]:"F"===t?e.release_date=Object.keys(i[t]).reduce((e,r)=>(e[n[r]]=i[t][r],e),{}):e.prefix=i[t],e),{}),e},{})},9518:function(e,t,i){e.exports.browserVersions=i(6578)},2468:function(e,t,i){e.exports.browsers=i(2070)},3167:function(e,t,i){"use strict";var r,n=i(6735).Buffer;function s(e){return n.from(e,"base64").toString()}function a(e){if("number"==typeof value)throw TypeError("The value to decode must not be of type number.");return new n(e,"base64").toString()}function o(e){return decodeURIComponent(escape(atob(e)))}function l(e){return e.split(",").pop()}function h(e,i){var r=t.mapFileCommentRegex.exec(e),n=r[1]||r[2];try{var e=i(n);if(null!=e&&"function"==typeof e.catch)return e.catch(s);return e}catch(e){s(e)}function s(e){throw Error("An error occurred while trying to read the map file at "+n+"\n"+e.stack)}}function u(e,t){(t=t||{}).hasComment&&(e=l(e)),"base64"===t.encoding?e=r(e):"uri"===t.encoding&&(e=decodeURIComponent(e)),(t.isJSON||t.encoding)&&(e=JSON.parse(e)),this.sourcemap=e}function d(){var e=this.toJSON();return n.from(e,"utf8").toString("base64")}function c(){var e=this.toJSON();if("number"==typeof e)throw TypeError("The json to encode must not be of type number.");return new n(e,"utf8").toString("base64")}function p(){return btoa(unescape(encodeURIComponent(this.toJSON())))}function f(e){return new u(e,{isJSON:!0})}Object.defineProperty(t,"commentRegex",{get:function(){return/^\s*?\/[\/\*][@#]\s+?sourceMappingURL=data:(((?:application|text)\/json)(?:;charset=([^;,]+?)?)?)?(?:;(base64))?,(.*?)$/mg}}),Object.defineProperty(t,"mapFileCommentRegex",{get:function(){return/(?:\/\/[@#][ \t]+?sourceMappingURL=([^\s'"`]+?)[ \t]*?$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^*]+?)[ \t]*?(?:\*\/){1}[ \t]*?$)/mg}}),r=void 0!==n?"function"==typeof n.from?s:a:o,u.prototype.toJSON=function(e){return JSON.stringify(this.sourcemap,null,e)},void 0!==n?"function"==typeof n.from?u.prototype.toBase64=d:u.prototype.toBase64=c:u.prototype.toBase64=p,u.prototype.toURI=function(){return encodeURIComponent(this.toJSON())},u.prototype.toComment=function(e){var t,i,r;return null!=e&&"uri"===e.encoding?(t="",i=this.toURI()):(t=";base64",i=this.toBase64()),r="sourceMappingURL=data:application/json;charset=utf-8"+t+","+i,null!=e&&e.multiline?"/*# "+r+" */":"//# "+r},u.prototype.toObject=function(){return JSON.parse(this.toJSON())},u.prototype.addProperty=function(e,t){if(this.sourcemap.hasOwnProperty(e))throw Error('property "'+e+'" already exists on the sourcemap, use set property instead');return this.setProperty(e,t)},u.prototype.setProperty=function(e,t){return this.sourcemap[e]=t,this},u.prototype.getProperty=function(e){return this.sourcemap[e]},t.fromObject=function(e){return new u(e)},t.fromJSON=function(e){return new u(e,{isJSON:!0})},t.fromURI=function(e){return new u(e,{encoding:"uri"})},t.fromBase64=function(e){return new u(e,{encoding:"base64"})},t.fromComment=function(e){var i,r;return e=e.replace(/^\/\*/g,"//").replace(/\*\/$/g,""),r=(i=t.commentRegex.exec(e))&&i[4]||"uri",new u(e,{encoding:r,hasComment:!0})},t.fromMapFileComment=function(e,t){if("string"==typeof t)throw Error("String directory paths are no longer supported with `fromMapFileComment`\nPlease review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading");var i=h(e,t);return null!=i&&"function"==typeof i.then?i.then(f):f(i)},t.fromSource=function(e){var i=e.match(t.commentRegex);return i?t.fromComment(i.pop()):null},t.fromMapFileSource=function(e,i){if("string"==typeof i)throw Error("String directory paths are no longer supported with `fromMapFileSource`\nPlease review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading");var r=e.match(t.mapFileCommentRegex);return r?t.fromMapFileComment(r.pop(),i):null},t.removeComments=function(e){return e.replace(t.commentRegex,"")},t.removeMapFileComments=function(e){return e.replace(t.mapFileCommentRegex,"")},t.generateMapFileComment=function(e,t){var i="sourceMappingURL="+e;return t&&t.multiline?"/*# "+i+" */":"//# "+i}},9215:function(e){var t={},i=RegExp("^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))?\\s*([-,\\\"\\'\\sa-z]+?)\\s*$","i"),r=["style","variant","weight","size","lineHeight","family"],n=/([\.0-9]+)(.*)/,s=function(e,t,i){var r=e.match(n);if(r){e=parseFloat(r[1]);var s=r[2].toLowerCase().trim(),a=Math.round(e);switch(a===e&&(e=a),s){case"em":if(null===t)return;return e*t;case"px":return e;case"pt":return e/(72/i);case"pc":return e/(6/i);case"mm":return i/25.4*e;case"cm":return i/2.54*e;case"in":return e*i;case"%":if(null===t)return;return e/100*t}}},a={size:s,lineHeight:s},o={serif:1,"sans-serif":1,cursive:1,fantasy:1,monospace:1},l=e.exports=function(e,n,s){var h=e+"-"+(n||"null")+"@"+s;if(s=s||96,void 0!==t[h])return t[h];if(n&&(n=l(n,null,s)),"inherit"===e)return n;var u=i.exec(e);if(!u){t[h]=null;return}u.shift();for(var d={},c=0;c-1?'"'+e.replace(/["']/g,"")+'"':e}).join(", "):e}).join(" ")}}),d};e.exports.generics=o},1974:function(e,t,i){var r=i(142);function n(){let e;return"undefined"!=typeof window&&!!window.process&&("renderer"===window.process.type||!!window.process.__nwjs)||!("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function s(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;let i="color: "+this.color;t.splice(1,0,i,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(r++,"%c"===e&&(n=r))}),t.splice(n,0,i)}function a(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}}function o(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG),e}function l(){try{return localStorage}catch(e){}}t.formatArgs=s,t.save=a,t.load=o,t.useColors=n,t.storage=l(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=i(8387)(t);let{formatters:h}=e.exports;h.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},8387:function(e,t,i){function r(e){function t(e){let t=0;for(let i=0;i{if("%%"===e)return"%";h++;let n=r.formatters[t];if("function"==typeof n){let t=i[h];e=n.call(s,t),i.splice(h,1),h--}return e}),r.formatArgs.call(s,i),(s.log||r.log).apply(s,i)}return o.namespace=e,o.useColors=r.useColors(),o.color=r.selectColor(e),o.extend=n,o.destroy=r.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==a?a:(i!==r.namespaces&&(i=r.namespaces,s=r.enabled(e)),s),set:e=>{a=e}}),"function"==typeof r.init&&r.init(o),o}function n(e,t){let i=r(this.namespace+(void 0===t?":":t)+e);return i.log=this.log,i}function s(e){for(let t of(r.save(e),r.namespaces=e,r.names=[],r.skips=[],("string"==typeof e?e:"").trim().replace(" ",",").split(",").filter(Boolean)))"-"===t[0]?r.skips.push(t.slice(1)):r.names.push(t)}function a(e,t){let i=0,r=0,n=-1,s=0;for(;i"-"+e)].join(",");return r.enable(""),e}function l(e){for(let t of r.skips)if(a(e,t))return!1;for(let t of r.names)if(a(e,t))return!0;return!1}function h(e){return e instanceof Error?e.stack||e.message:e}function u(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.debug=r,r.default=r,r.coerce=h,r.disable=o,r.enable=s,r.enabled=l,r.humanize=i(3988),r.destroy=u,Object.keys(e).forEach(t=>{r[t]=e[t]}),r.names=[],r.skips=[],r.formatters={},r.selectColor=t,r.enable(r.load()),r}e.exports=r},3844:function(e,t,i){"use strict";var r=i(3700),n=i(5289),s=i(5559),a=i(798);e.exports=function(e,t,i){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new s("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new s("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new s("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new s("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new s("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new s("`loose`, if provided, must be a boolean");var o=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,h=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!a&&a(e,t);if(r)r(e,t,{configurable:null===h&&d?d.configurable:!h,enumerable:null===o&&d?d.enumerable:!o,value:i,writable:null===l&&d?d.writable:!l});else if(!u&&(o||l||h))throw new n("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");else e[t]=i}},197:function(e,t,i){"use strict";var r=i(2863),n="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),s=Object.prototype.toString,a=Array.prototype.concat,o=i(3844),l=function(e){return"function"==typeof e&&"[object Function]"===s.call(e)},h=i(990)(),u=function(e,t,i,r){if(t in e){if(!0===r){if(e[t]===i)return}else if(!l(r)||!r())return}h?o(e,t,i,!0):o(e,t,i)},d=function(e,t){var i=arguments.length>2?arguments[2]:{},s=r(t);n&&(s=a.call(s,Object.getOwnPropertySymbols(t)));for(var o=0;o=3&&(s=i),"[object Array]"===n.call(e)?a(e,t,s):"string"==typeof e?o(e,t,s):l(e,t,s)};e.exports=h},4517:function(e){"use strict";var t="Function.prototype.bind called on incompatible ",i=Object.prototype.toString,r=Math.max,n="[object Function]",s=function(e,t){for(var i=[],r=0;r{g(e.apply(this,i),t,r)})},errback:function(){let t;for(var i=arguments.length,r=Array(i),n=0;ns(void 0,e),e=>s(e))}}}function h(e,t,i,r){let n;if(typeof i!==e&&(!r||void 0!==i))throw u(n=r?`Expected opts.${t} to be either a ${e}, or undefined.`:`Expected opts.${t} to be a ${e}.`,s)}function u(e,t){return Object.assign(Error(e),{code:t})}function d(e){let{name:t,arity:i,sync:r,async:n,errback:a}=e;if(h("string","name",t,!0),h("number","arity",i,!0),h("function","sync",r),h("function","async",n,!0),h("function","errback",a,!0),n&&a)throw u("Expected one of either opts.async or opts.errback, but got _both_.",s);if("string"!=typeof t){let e;a&&a.name&&"errback"!==a.name&&(e=a.name),n&&n.name&&"async"!==n.name&&(e=n.name.replace(/Async$/,"")),r&&r.name&&"sync"!==r.name&&(e=r.name.replace(/Sync$/,"")),"string"==typeof e&&(t=e)}return"number"!=typeof i&&(i=r.length),p({name:t,arity:i,sync:function(e){return r.apply(this,e)},async:function(e,t,i){n?n.apply(this,e).then(t,i):a?a.call(this,...e,(e,r)=>{null==e?t(r):i(e)}):t(r.apply(this,e))}})}function c(e){return b(e.name,e.length,function(){for(var t=arguments.length,i=Array(t),r=0;r{e||(e={value:t},l())},t=>{e||(e={err:t},l())})}catch(t){e={err:t},l()}if(yield i,e.hasOwnProperty("err"))throw e.err;return e.value})}function f(e){let t;for(;!({value:t}=e.next()).done;)m(t,e);return t}function g(e,t,i){!function r(){try{let i;for(;!({value:i}=e.next()).done;){m(i,e);let t=!0,n=!1,s=e.next(()=>{t?n=!0:r()});if(t=!1,y(s,e),!n)return}return t(i)}catch(e){return i(e)}}()}function m(e,i){e!==t&&v(i,u(`Got unexpected yielded value in gensync generator: ${JSON.stringify(e)}. Did you perhaps mean to use 'yield*' instead of 'yield'?`,r))}function y(e,t){let{value:r,done:s}=e;(s||r!==i)&&v(t,u(s?"Unexpected generator completion. If you get this, it is probably a gensync bug.":`Expected GENSYNC_SUSPEND, got ${JSON.stringify(r)}. If you get this, it is probably a gensync bug.`,n))}function v(e,t){throw e.throw&&e.throw(t),t}function b(e,t,i){if("string"==typeof e){let t=Object.getOwnPropertyDescriptor(i,"name");(!t||t.configurable)&&Object.defineProperty(i,"name",Object.assign(t||{},{configurable:!0,value:e}))}if("number"==typeof t){let e=Object.getOwnPropertyDescriptor(i,"length");(!e||e.configurable)&&Object.defineProperty(i,"length",Object.assign(e||{},{configurable:!0,value:t}))}return i}e.exports=Object.assign(function(e){let t=e;return Object.assign(t="function"!=typeof e?d(e):c(e),l(t))},{all:p({name:"all",arity:1,sync:function(e){return Array.from(e[0]).map(e=>f(e))},async:function(e,t,i){let r=Array.from(e[0]);if(0===r.length){Promise.resolve().then(()=>t([]));return}let n=0,s=r.map(()=>void 0);r.forEach((e,r)=>{g(e,e=>{s[r]=e,(n+=1)===s.length&&t(s)},i)})}}),race:p({name:"race",arity:1,sync:function(e){let t=Array.from(e[0]);if(0===t.length)throw u("Must race at least 1 item",a);return f(t[0])},async:function(e,t,i){let r=Array.from(e[0]);if(0===r.length)throw u("Must race at least 1 item",a);for(let e of r)g(e,t,i)}})})},391:function(e,t,i){"use strict";var r,n=i(5148),s=i(6339),a=i(8641),o=i(9650),l=i(5599),h=i(5289),u=i(5559),d=i(4074),c=i(7525),p=i(8346),f=i(1373),g=i(2879),m=i(3739),y=i(1730),v=i(9246),b=Function,x=function(e){try{return b('"use strict"; return ('+e+").constructor;")()}catch(e){}},_=i(798),S=i(3700),C=function(){throw new u},w=_?function(){try{return arguments.callee,C}catch(e){try{return _(arguments,"callee").get}catch(e){return C}}}():C,A=i(3638)(),T=i(6778),k=i(255),E=i(4954),P=i(7883),M=i(2408),B={},R="undefined"!=typeof Uint8Array&&T?T(Uint8Array):r,I={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":A&&T?T([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":B,"%AsyncGenerator%":B,"%AsyncGeneratorFunction%":B,"%AsyncIteratorPrototype%":B,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":s,"%eval%":eval,"%EvalError%":a,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":b,"%GeneratorFunction%":B,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":A&&T?T(T([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&A&&T?T(new Map()[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":n,"%Object.getOwnPropertyDescriptor%":_,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":o,"%ReferenceError%":l,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&A&&T?T(new Set()[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":A&&T?T(""[Symbol.iterator]()):r,"%Symbol%":A?Symbol:r,"%SyntaxError%":h,"%ThrowTypeError%":w,"%TypedArray%":R,"%TypeError%":u,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":d,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet,"%Function.prototype.call%":M,"%Function.prototype.apply%":P,"%Object.defineProperty%":S,"%Object.getPrototypeOf%":k,"%Math.abs%":c,"%Math.floor%":p,"%Math.max%":f,"%Math.min%":g,"%Math.pow%":m,"%Math.round%":y,"%Math.sign%":v,"%Reflect.getPrototypeOf%":E};if(T)try{null.error}catch(e){var O=T(T(e));I["%Error.prototype%"]=O}var L=function e(t){var i;if("%AsyncFunction%"===t)i=x("async function () {}");else if("%GeneratorFunction%"===t)i=x("function* () {}");else if("%AsyncGeneratorFunction%"===t)i=x("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(i=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var n=e("%AsyncGenerator%");n&&T&&(i=T(n.prototype))}return I[t]=i,i},D={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},F=i(5629),N=i(3520),j=F.call(M,Array.prototype.concat),H=F.call(P,Array.prototype.splice),z=F.call(M,String.prototype.replace),W=F.call(M,String.prototype.slice),V=F.call(M,RegExp.prototype.exec),G=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,U=/\\(\\)?/g,K=function(e){var t=W(e,0,1),i=W(e,-1);if("%"===t&&"%"!==i)throw new h("invalid intrinsic syntax, expected closing `%`");if("%"===i&&"%"!==t)throw new h("invalid intrinsic syntax, expected opening `%`");var r=[];return z(e,G,function(e,t,i,n){r[r.length]=i?z(n,U,"$1"):t||e}),r},$=function(e,t){var i,r=e;if(N(D,r)&&(r="%"+(i=D[r])[0]+"%"),N(I,r)){var n=I[r];if(n===B&&(n=L(r)),void 0===n&&!t)throw new u("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:n}}throw new h("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new u('"allowMissing" argument must be a boolean');if(null===V(/^%?[^%]*%?$/,e))throw new h("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var i=K(e),r=i.length>0?i[0]:"",n=$("%"+r+"%",t),s=n.name,a=n.value,o=!1,l=n.alias;l&&(r=l[0],H(i,j([0,1],l)));for(var d=1,c=!0;d=i.length){var m=_(a,p);a=(c=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:a[p]}else c=N(a,p),a=a[p];c&&!o&&(I[s]=a)}}return a}},255:function(e,t,i){"use strict";var r=i(5148);e.exports=r.getPrototypeOf||null},4954:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect.getPrototypeOf||null},6778:function(e,t,i){"use strict";var r=i(4954),n=i(255),s=i(2305);e.exports=r?function(e){return r(e)}:n?function(e){if(!e||"object"!=typeof e&&"function"!=typeof e)throw TypeError("getProto: not an object");return n(e)}:s?function(e){return s(e)}:null},7208:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deinterlace=void 0;var i=function(e,t){for(var i=Array(e.length),r=e.length/t,n=function(r,n){var s=e.slice(n*t,(n+1)*t);i.splice.apply(i,[r*t,t].concat(s))},s=[0,4,2,1],a=[8,8,4,2],o=0,l=0;l<4;l++)for(var h=s[l];h>=a,f-=a,u>r||u==o)break;if(u==n){s=(1<<(a=c+1))-1,r=n+2,h=_;continue}if(h==_){T[y++]=A[u],h=u,m=u;continue}for(l=u,u==r&&(T[y++]=m,u=h);u>n;)T[y++]=A[u],u=w[u];m=255&A[u],T[y++]=m,r>1,u=-7,d=i?n-1:0,c=i?-1:1,p=e[t+d];for(d+=c,s=p&(1<<-u)-1,p>>=-u,u+=o;u>0;s=256*s+e[t+d],d+=c,u-=8);for(a=s&(1<<-u)-1,s>>=-u,u+=r;u>0;a=256*a+e[t+d],d+=c,u-=8);if(0===s)s=1-h;else{if(s===l)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),s-=h}return(p?-1:1)*a*Math.pow(2,s-r)},t.write=function(e,t,i,r,n,s){var a,o,l,h=8*s-n-1,u=(1<>1,c=23===n?5960464477539062e-23:0,p=r?0:s-1,f=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(isNaN(t=Math.abs(t))||t===1/0?(o=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+d>=1?t+=c/l:t+=c*Math.pow(2,1-d),t*l>=2&&(a++,l/=2),a+d>=u?(o=0,a=u):a+d>=1?(o=(t*l-1)*Math.pow(2,n),a+=d):(o=t*Math.pow(2,d-1)*Math.pow(2,n),a=0));n>=8;e[i+p]=255&o,p+=f,o/=256,n-=8);for(a=a<0;e[i+p]=255&a,p+=f,a/=256,h-=8);e[i+p-f]|=128*g}},6299:function(e){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}},3221:function(e,t,i){"use strict";var r=i(6738)(),n=i(1637)("Object.prototype.toString"),s=function(e){return(!r||!e||"object"!=typeof e||!(Symbol.toStringTag in e))&&"[object Arguments]"===n(e)},a=function(e){return!!s(e)||null!==e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==n(e)&&"callee"in e&&"[object Function]"===n(e.callee)},o=function(){return s(arguments)}();s.isLegacyArguments=a,e.exports=o?s:a},5095:function(e){"use strict";var t,i,r=Function.prototype.toString,n="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof n&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw i}}),i={},n(function(){throw 42},null,t)}catch(e){e!==i&&(n=null)}else n=null;var s=/^\s*class\b/,a=function(e){try{var t=r.call(e);return s.test(t)}catch(e){return!1}},o=function(e){try{if(a(e))return!1;return r.call(e),!0}catch(e){return!1}},l=Object.prototype.toString,h="[object Object]",u="[object Function]",d="[object GeneratorFunction]",c="[object HTMLAllCollection]",p="[object HTML document.all class]",f="[object HTMLCollection]",g="function"==typeof Symbol&&!!Symbol.toStringTag,m=!(0 in[,]),y=function(){return!1};if("object"==typeof document){var v=document.all;l.call(v)===l.call(document.all)&&(y=function(e){if((m||!e)&&(void 0===e||"object"==typeof e))try{var t=l.call(e);return(t===c||t===p||t===f||t===h)&&null==e("")}catch(e){}return!1})}e.exports=n?function(e){if(y(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;try{n(e,null,t)}catch(e){if(e!==i)return!1}return!a(e)&&o(e)}:function(e){if(y(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;if(g)return o(e);if(a(e))return!1;var t=l.call(e);return!!(t===u||t===d||/^\[object HTML/.test(t))&&o(e)}},1550:function(e,t,i){"use strict";var r,n=i(1637),s=i(3197)(/^\s*(?:function)?\*/),a=i(6738)(),o=i(6778),l=n("Object.prototype.toString"),h=n("Function.prototype.toString"),u=function(){if(!a)return!1;try{return Function("return function*() {}")()}catch(e){}};e.exports=function(e){if("function"!=typeof e)return!1;if(s(h(e)))return!0;if(!a)return"[object GeneratorFunction]"===l(e);if(!o)return!1;if(void 0===r){var t=u();r=!!t&&o(t)}return o(e)===r}},3498:function(e){"use strict";e.exports=function(e){return e!=e}},9041:function(e,t,i){"use strict";var r=i(4180),n=i(197),s=i(3498),a=i(6706),o=i(8164),l=r(a(),Number);n(l,{getPolyfill:a,implementation:s,shim:o}),e.exports=l},6706:function(e,t,i){"use strict";var r=i(3498);e.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:r}},8164:function(e,t,i){"use strict";var r=i(197),n=i(6706);e.exports=function(){var e=n();return r(Number,{isNaN:e},{isNaN:function(){return Number.isNaN!==e}}),e}},7690:function(e,t,i){"use strict";var r,n=i(1637),s=i(6738)(),a=i(3520),o=i(798);if(s){var l=n("RegExp.prototype.exec"),h={},u=function(){throw h},d={toString:u,valueOf:u};"symbol"==typeof Symbol.toPrimitive&&(d[Symbol.toPrimitive]=u),r=function(e){if(!e||"object"!=typeof e)return!1;var t=o(e,"lastIndex");if(!(t&&a(t,"value")))return!1;try{l(e,d)}catch(e){return e===h}}}else{var c=n("Object.prototype.toString"),p="[object RegExp]";r=function(e){return!!e&&("object"==typeof e||"function"==typeof e)&&c(e)===p}}e.exports=r},6008:function(e,t,i){"use strict";var r=i(3266);e.exports=function(e){return!!r(e)}},9454:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loop=t.conditional=t.parse=void 0;var i=function e(t,i){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:r;if(Array.isArray(i))i.forEach(function(i){return e(t,i,r,n)});else if("function"==typeof i)i(t,r,n,e);else{var s=Object.keys(i)[0];Array.isArray(i[s])?(n[s]={},e(t,i[s],r,n[s])):n[s]=i[s](t,r,n,e)}return r};t.parse=i;var r=function(e,t){return function(i,r,n,s){t(i,r,n)&&s(i,e,r,n)}};t.conditional=r;var n=function(e,t){return function(i,r,n,s){for(var a=[],o=i.pos;t(i,r,n);){var l={};if(s(i,e,r,l),i.pos===o)break;o=i.pos,a.push(l)}return a}};t.loop=n},572:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readBits=t.readArray=t.readUnsigned=t.readString=t.peekBytes=t.readBytes=t.peekByte=t.readByte=t.buildStream=void 0;var i=function(e){return{data:e,pos:0}};t.buildStream=i;var r=function(){return function(e){return e.data[e.pos++]}};t.readByte=r;var n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(t){return t.data[t.pos+e]}};t.peekByte=n;var s=function(e){return function(t){return t.data.subarray(t.pos,t.pos+=e)}};t.readBytes=s;var a=function(e){return function(t){return t.data.subarray(t.pos,t.pos+e)}};t.peekBytes=a;var o=function(e){return function(t){return Array.from(s(e)(t)).map(function(e){return String.fromCharCode(e)}).join("")}};t.readString=o;var l=function(e){return function(t){var i=s(2)(t);return e?(i[1]<<8)+i[0]:(i[0]<<8)+i[1]}};t.readUnsigned=l;var h=function(e,t){return function(i,r,n){for(var a="function"==typeof t?t(i,r,n):t,o=s(e),l=Array(a),h=0;h=r){var o=r-e.pos;i.push((0,n.readBytes)(o)(e)),s+=o;break}i.push((0,n.readBytes)(a)(e)),s+=a}for(var l=new Uint8Array(s),h=0,u=0;u!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g,t.matchToToken=function(e){var t={type:"invalid",value:e[0],closed:void 0};return e[1]?(t.type="string",t.closed=!!(e[3]||e[4])):e[5]?t.type="comment":e[6]?(t.type="comment",t.closed=!!e[7]):e[8]?t.type="regex":e[9]?t.type="number":e[10]?t.type="name":e[11]?t.type="punctuator":e[12]&&(t.type="whitespace"),t}},8398:function(e,t,i){"use strict";var r=i(6735).Buffer;let n={},s=n.hasOwnProperty,a=(e,t)=>{for(let i in e)s.call(e,i)&&t(i,e[i])},o=(e,t)=>(t&&a(t,(t,i)=>{e[t]=i}),e),l=(e,t)=>{let i=e.length,r=-1;for(;++r"\\u"+("0000"+e).slice(-4),u=(e,t)=>{let i=e.toString(16);return t?i:i.toUpperCase()},d=n.toString,c=Array.isArray,p=e=>"function"==typeof r&&r.isBuffer(e),f=e=>"[object Object]"==d.call(e),g=e=>"string"==typeof e||"[object String]"==d.call(e),m=e=>"number"==typeof e||"[object Number]"==d.call(e),y=e=>"bigint"==typeof e,v=e=>"function"==typeof e,b=e=>"[object Map]"==d.call(e),x=e=>"[object Set]"==d.call(e),_={"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},S=/[\\\b\f\n\r\t]/,C=/[0-9]/,w=/[\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,A=/([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^]/g,T=/([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^ !#-&\(-\[\]-_a-~]/g,k=(e,t)=>{let i;let r=()=>{B=M,++t.indentLevel,M=t.indent.repeat(t.indentLevel)},n={escapeEverything:!1,minimal:!1,isScriptContext:!1,quotes:"single",wrap:!1,es6:!1,json:!1,compact:!0,lowercaseHex:!1,numbers:"decimal",indent:" ",indentLevel:0,__inline1__:!1,__inline2__:!1},s=t&&t.json;s&&(n.quotes="double",n.wrap=!0),"single"!=(t=o(n,t)).quotes&&"double"!=t.quotes&&"backtick"!=t.quotes&&(t.quotes="single");let d="double"==t.quotes?'"':"backtick"==t.quotes?"`":"'",E=t.compact,P=t.lowercaseHex,M=t.indent.repeat(t.indentLevel),B="",R=t.__inline1__,I=t.__inline2__,O=E?"":"\n",L=!0,D="binary"==t.numbers,F="octal"==t.numbers,N="decimal"==t.numbers,j="hexadecimal"==t.numbers;if(s&&e&&v(e.toJSON)&&(e=e.toJSON()),!g(e)){if(b(e))return 0==e.size?"new Map()":(E||(t.__inline1__=!0,t.__inline2__=!1),"new Map("+k(Array.from(e),t)+")");if(x(e))return 0==e.size?"new Set()":"new Set("+k(Array.from(e),t)+")";if(p(e))return 0==e.length?"Buffer.from([])":"Buffer.from("+k(Array.from(e),t)+")";if(c(e))return(i=[],t.wrap=!0,R&&(t.__inline1__=!1,t.__inline2__=!0),I||r(),l(e,e=>{L=!1,I&&(t.__inline2__=!1),i.push((E||I?"":M)+k(e,t))}),L)?"[]":I?"["+i.join(", ")+"]":"["+O+i.join(","+O)+O+(E?"":B)+"]";if(m(e)||y(e)){let t;if(s)return JSON.stringify(Number(e));if(N)t=String(e);else if(j){let i=e.toString(16);P||(i=i.toUpperCase()),t="0x"+i}else D?t="0b"+e.toString(2):F&&(t="0o"+e.toString(8));return y(e)?t+"n":t}if(y(e))return s?JSON.stringify(Number(e)):e+"n";else if(f(e))return(i=[],t.wrap=!0,r(),a(e,(e,r)=>{L=!1,i.push((E?"":M)+k(e,t)+":"+(E?"":" ")+k(r,t))}),L)?"{}":"{"+O+i.join(","+O)+O+(E?"":B)+"}";else return s?JSON.stringify(e)||"null":String(e)}let H=t.escapeEverything?A:T;return i=e.replace(H,(e,i,r,n,a,o)=>{if(i){if(t.minimal)return i;let e=i.charCodeAt(0),r=i.charCodeAt(1);return t.es6?"\\u{"+u((e-55296)*1024+r-56320+65536,P)+"}":h(u(e,P))+h(u(r,P))}if(r)return h(u(r.charCodeAt(0),P));if("\0"==e&&!s&&!C.test(o.charAt(a+1)))return"\\0";if(n)return n==d||t.escapeEverything?"\\"+n:n;if(S.test(e))return _[e];if(t.minimal&&!w.test(e))return e;let l=u(e.charCodeAt(0),P);return s||l.length>2?h(l):"\\x"+("00"+l).slice(-2)}),"`"==d&&(i=i.replace(/\$\{/g,"\\${")),t.isScriptContext&&(i=i.replace(/<\/(script|style)/gi,"<\\/$1").replace(/ * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? safeRe[t.TILDELOOSE] : safeRe[t.TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? safeRe[t.CARETLOOSE] : safeRe[t.CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? safeRe[t.XRANGELOOSE] : safeRe[t.XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p + pr\n } else if (xm) {\n ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0' + pr +\n ' <' + M + '.' + (+m + 1) + '.0' + pr\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(safeRe[t.STAR], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version, options) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n var match = null\n if (!options.rtl) {\n match = version.match(safeRe[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n var next\n while ((next = safeRe[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n safeRe[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(match[2] +\n '.' + (match[3] || '0') +\n '.' + (match[4] || '0'), options)\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","var simplify = require('simplify-geometry')\n\nmodule.exports = function (geojson, tolerance, dontClone) {\n if (!dontClone) geojson = JSON.parse(JSON.stringify(geojson)) // clone obj\n if (geojson.features) return simplifyFeatureCollection(geojson, tolerance)\n else if (geojson.type && geojson.type === 'Feature') return simplifyFeature(geojson, tolerance)\n else return new Error('FeatureCollection or individual Feature required')\n}\n\nmodule.exports.simplify = function (coordinates, tolerance) {\n return simplify(coordinates, tolerance)\n}\n\n// modifies in-place\nfunction simplifyFeature (feat, tolerance) {\n var geom = feat.geometry\n var type = geom.type\n if (type === 'LineString') {\n geom.coordinates = module.exports.simplify(geom.coordinates, tolerance)\n } else if (type === 'Polygon' || type === 'MultiLineString') {\n for (var j = 0; j < geom.coordinates.length; j++) {\n geom.coordinates[j] = module.exports.simplify(geom.coordinates[j], tolerance)\n }\n } else if (type === 'MultiPolygon') {\n for (var k = 0; k < geom.coordinates.length; k++) {\n for (var l = 0; l < geom.coordinates[k].length; l++) {\n geom.coordinates[k][l] = module.exports.simplify(geom.coordinates[k][l], tolerance)\n }\n }\n }\n return feat\n}\n\n// modifies in-place\nfunction simplifyFeatureCollection (fc, tolerance) {\n // process all LineString features, skip non LineStrings\n for (var i = 0; i < fc.features.length; i++) {\n fc.features[i] = simplifyFeature(fc.features[i], tolerance)\n }\n return fc\n}\n","var Line = require('./line');\n\nvar simplifyGeometry = function(points, tolerance){\n\n var dmax = 0;\n var index = 0;\n\n for (var i = 1; i <= points.length - 2; i++){\n var d = new Line(points[0], points[points.length - 1]).perpendicularDistance(points[i]);\n if (d > dmax){\n index = i;\n dmax = d;\n }\n }\n\n if (dmax > tolerance){\n var results_one = simplifyGeometry(points.slice(0, index), tolerance);\n var results_two = simplifyGeometry(points.slice(index, points.length), tolerance);\n\n var results = results_one.concat(results_two);\n\n }\n\n else if (points.length > 1) {\n\n results = [points[0], points[points.length - 1]];\n\n }\n\n else {\n\n results = [points[0]];\n\n }\n\n return results;\n\n\n}\n\nmodule.exports = simplifyGeometry;\n","var Line = function(p1, p2){\n\n this.p1 = p1;\n this.p2 = p2;\n\n};\n\nLine.prototype.rise = function() {\n\n return this.p2[1] - this.p1[1];\n\n};\n\nLine.prototype.run = function() {\n\n return this.p2[0] - this.p1[0];\n\n};\n\nLine.prototype.slope = function(){\n\n return this.rise() / this.run();\n\n};\n\nLine.prototype.yIntercept = function(){\n\n return this.p1[1] - (this.p1[0] * this.slope(this.p1, this.p2));\n\n};\n\nLine.prototype.isVertical = function() {\n\n return !isFinite(this.slope());\n\n};\n\nLine.prototype.isHorizontal = function() {\n\n return this.p1[1] == this.p2[1];\n\n};\n\nLine.prototype._perpendicularDistanceHorizontal = function(point){\n\n return Math.abs(this.p1[1] - point[1]);\n\n};\n\nLine.prototype._perpendicularDistanceVertical = function(point){\n\n return Math.abs(this.p1[0] - point[0]);\n\n};\n\nLine.prototype._perpendicularDistanceHasSlope = function(point){\n var slope = this.slope();\n var y_intercept = this.yIntercept();\n\n return Math.abs((slope * point[0]) - point[1] + y_intercept) / Math.sqrt((Math.pow(slope, 2)) + 1);\n\n};\n\nLine.prototype.perpendicularDistance = function(point){\n if (this.isVertical()) {\n\n return this._perpendicularDistanceVertical(point);\n\n }\n\n else if (this.isHorizontal()){\n\n return this._perpendicularDistanceHorizontal(point);\n\n }\n\n else {\n\n return this._perpendicularDistanceHasSlope(point);\n\n }\n\n};\n\nmodule.exports = Line;\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\n\n/** @type {(O: object) => string} */\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\n/** @type {(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */\n/** @type {{ [k in `\\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 2; i < arguments.length; i++) {\n walker = insert(this, walker, arguments[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","","","","","","","","","","","","","","","","exports.getModuleName = () => require(\"@babel/helper-module-transforms\").getModuleName;\n0 && 0;\n\n//# sourceMappingURL=babel-7-helpers.cjs.map\n","import type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport { getDefs, type InternalTokenType } from \"./defs.ts\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) === \" defs[type as InternalTokenType](str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n","import picocolors, { createColors } from \"picocolors\";\nimport type { Colors, Formatter } from \"picocolors/types\";\n\nexport function isColorSupported() {\n return (\n // See https://github.com/alexeyraspopov/picocolors/issues/62\n typeof process === \"object\" &&\n (process.env.FORCE_COLOR === \"0\" || process.env.FORCE_COLOR === \"false\")\n ? false\n : picocolors.isColorSupported\n );\n}\n\nexport type InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype UITokens = \"gutter\" | \"marker\" | \"message\";\n\nexport type Defs = {\n [_ in InternalTokenType | UITokens | \"reset\"]: Formatter;\n};\n\nconst compose: (f: (gv: U) => V, g: (v: T) => U) => (v: T) => V =\n (f, g) => v =>\n f(g(v));\n\n/**\n * Styles for token types.\n */\nfunction buildDefs(colors: Colors): Defs {\n return {\n keyword: colors.cyan,\n capitalized: colors.yellow,\n jsxIdentifier: colors.yellow,\n punctuator: colors.yellow,\n number: colors.magenta,\n string: colors.green,\n regex: colors.magenta,\n comment: colors.gray,\n invalid: compose(compose(colors.white, colors.bgRed), colors.bold),\n\n gutter: colors.gray,\n marker: compose(colors.red, colors.bold),\n message: compose(colors.red, colors.bold),\n\n reset: colors.reset,\n };\n}\n\nconst defsOn = buildDefs(createColors(true));\nconst defsOff = buildDefs(createColors(false));\n\nexport function getDefs(enabled: boolean): Defs {\n return enabled ? defsOn : defsOff;\n}\n","module.exports = require(\"./data/native-modules.json\");\n","module.exports = require(\"./data/plugins.json\");\n","import gensync from \"gensync\";\nimport type { Handler } from \"gensync\";\nimport {\n maybeAsync,\n isAsync,\n onFirstPause,\n waitFor,\n isThenable,\n} from \"../gensync-utils/async.ts\";\nimport { isIterableIterator } from \"./util.ts\";\n\nexport type { CacheConfigurator };\n\nexport type SimpleCacheConfigurator = {\n (forever: boolean): void;\n (handler: () => T): T;\n\n forever: () => void;\n never: () => void;\n using: (handler: () => T) => T;\n invalidate: (handler: () => T) => T;\n};\n\nexport type CacheEntry = Array<{\n value: ResultT;\n valid: (channel: SideChannel) => Handler;\n}>;\n\nconst synchronize = (\n gen: (...args: ArgsT) => Handler,\n): ((...args: ArgsT) => ResultT) => {\n return gensync(gen).sync;\n};\n\n// eslint-disable-next-line require-yield\nfunction* genTrue() {\n return true;\n}\n\nexport function makeWeakCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(WeakMap, handler);\n}\n\nexport function makeWeakCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeWeakCache(handler),\n );\n}\n\nexport function makeStrongCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(Map, handler);\n}\n\nexport function makeStrongCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeStrongCache(handler),\n );\n}\n\n/* NOTE: Part of the logic explained in this comment is explained in the\n * getCachedValueOrWait and setupAsyncLocks functions.\n *\n * > There are only two hard things in Computer Science: cache invalidation and naming things.\n * > -- Phil Karlton\n *\n * I don't know if Phil was also thinking about handling a cache whose invalidation function is\n * defined asynchronously is considered, but it is REALLY hard to do correctly.\n *\n * The implemented logic (only when gensync is run asynchronously) is the following:\n * 1. If there is a valid cache associated to the current \"arg\" parameter,\n * a. RETURN the cached value\n * 3. If there is a FinishLock associated to the current \"arg\" parameter representing a valid cache,\n * a. Wait for that lock to be released\n * b. RETURN the value associated with that lock\n * 5. Start executing the function to be cached\n * a. If it pauses on a promise, then\n * i. Let FinishLock be a new lock\n * ii. Store FinishLock as associated to the current \"arg\" parameter\n * iii. Wait for the function to finish executing\n * iv. Release FinishLock\n * v. Send the function result to anyone waiting on FinishLock\n * 6. Store the result in the cache\n * 7. RETURN the result\n */\nfunction makeCachedFunction(\n CallCache: new () => CacheMap,\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n const callCacheSync = new CallCache();\n const callCacheAsync = new CallCache();\n const futureCache = new CallCache>();\n\n return function* cachedFunction(arg: ArgT, data: SideChannel) {\n const asyncContext = yield* isAsync();\n const callCache = asyncContext ? callCacheAsync : callCacheSync;\n\n const cached = yield* getCachedValueOrWait(\n asyncContext,\n callCache,\n futureCache,\n arg,\n data,\n );\n if (cached.valid) return cached.value;\n\n const cache = new CacheConfigurator(data);\n\n const handlerResult: Handler | ResultT = handler(arg, cache);\n\n let finishLock: Lock;\n let value: ResultT;\n\n if (isIterableIterator(handlerResult)) {\n value = yield* onFirstPause(handlerResult, () => {\n finishLock = setupAsyncLocks(cache, futureCache, arg);\n });\n } else {\n value = handlerResult;\n }\n\n updateFunctionCache(callCache, cache, arg, value);\n\n if (finishLock) {\n futureCache.delete(arg);\n finishLock.release(value);\n }\n\n return value;\n };\n}\n\ntype CacheMap =\n | Map>\n // @ts-expect-error todo(flow->ts): add `extends object` constraint to ArgT\n | WeakMap>;\n\nfunction* getCachedValue(\n cache: CacheMap,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cachedValue: CacheEntry | void = cache.get(arg);\n\n if (cachedValue) {\n for (const { value, valid } of cachedValue) {\n if (yield* valid(data)) return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction* getCachedValueOrWait(\n asyncContext: boolean,\n callCache: CacheMap,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cached = yield* getCachedValue(callCache, arg, data);\n if (cached.valid) {\n return cached;\n }\n\n if (asyncContext) {\n const cached = yield* getCachedValue(futureCache, arg, data);\n if (cached.valid) {\n const value = yield* waitFor(cached.value.promise);\n return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction setupAsyncLocks(\n config: CacheConfigurator,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n): Lock {\n const finishLock = new Lock();\n\n updateFunctionCache(futureCache, config, arg, finishLock);\n\n return finishLock;\n}\n\nfunction updateFunctionCache<\n ArgT,\n ResultT,\n SideChannel,\n Cache extends CacheMap,\n>(\n cache: Cache,\n config: CacheConfigurator,\n arg: ArgT,\n value: ResultT,\n) {\n if (!config.configured()) config.forever();\n\n let cachedValue: CacheEntry | void = cache.get(arg);\n\n config.deactivate();\n\n switch (config.mode()) {\n case \"forever\":\n cachedValue = [{ value, valid: genTrue }];\n cache.set(arg, cachedValue);\n break;\n case \"invalidate\":\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n break;\n case \"valid\":\n if (cachedValue) {\n cachedValue.push({ value, valid: config.validator() });\n } else {\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n }\n }\n}\n\nclass CacheConfigurator {\n _active: boolean = true;\n _never: boolean = false;\n _forever: boolean = false;\n _invalidate: boolean = false;\n\n _configured: boolean = false;\n\n _pairs: Array<\n [cachedValue: unknown, handler: (data: SideChannel) => Handler]\n > = [];\n\n _data: SideChannel;\n\n constructor(data: SideChannel) {\n this._data = data;\n }\n\n simple() {\n return makeSimpleConfigurator(this);\n }\n\n mode() {\n if (this._never) return \"never\";\n if (this._forever) return \"forever\";\n if (this._invalidate) return \"invalidate\";\n return \"valid\";\n }\n\n forever() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never) {\n throw new Error(\"Caching has already been configured with .never()\");\n }\n this._forever = true;\n this._configured = true;\n }\n\n never() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._forever) {\n throw new Error(\"Caching has already been configured with .forever()\");\n }\n this._never = true;\n this._configured = true;\n }\n\n using(handler: (data: SideChannel) => T): T {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never || this._forever) {\n throw new Error(\n \"Caching has already been configured with .never or .forever()\",\n );\n }\n this._configured = true;\n\n const key = handler(this._data);\n\n const fn = maybeAsync(\n handler,\n `You appear to be using an async cache handler, but Babel has been called synchronously`,\n );\n\n if (isThenable(key)) {\n // @ts-expect-error todo(flow->ts): improve function return type annotation\n return key.then((key: unknown) => {\n this._pairs.push([key, fn]);\n return key;\n });\n }\n\n this._pairs.push([key, fn]);\n return key;\n }\n\n invalidate(handler: (data: SideChannel) => T): T {\n this._invalidate = true;\n return this.using(handler);\n }\n\n validator(): (data: SideChannel) => Handler {\n const pairs = this._pairs;\n return function* (data: SideChannel) {\n for (const [key, fn] of pairs) {\n if (key !== (yield* fn(data))) return false;\n }\n return true;\n };\n }\n\n deactivate() {\n this._active = false;\n }\n\n configured() {\n return this._configured;\n }\n}\n\nfunction makeSimpleConfigurator(\n cache: CacheConfigurator,\n): SimpleCacheConfigurator {\n function cacheFn(val: any) {\n if (typeof val === \"boolean\") {\n if (val) cache.forever();\n else cache.never();\n return;\n }\n\n return cache.using(() => assertSimpleType(val()));\n }\n cacheFn.forever = () => cache.forever();\n cacheFn.never = () => cache.never();\n cacheFn.using = (cb: () => SimpleType) =>\n cache.using(() => assertSimpleType(cb()));\n cacheFn.invalidate = (cb: () => SimpleType) =>\n cache.invalidate(() => assertSimpleType(cb()));\n\n return cacheFn as any;\n}\n\n// Types are limited here so that in the future these values can be used\n// as part of Babel's caching logic.\nexport type SimpleType =\n | string\n | boolean\n | number\n | null\n | void\n | Promise;\nexport function assertSimpleType(value: unknown): SimpleType {\n if (isThenable(value)) {\n throw new Error(\n `You appear to be using an async cache handler, ` +\n `which your current version of Babel does not support. ` +\n `We may add support for this in the future, ` +\n `but if you're on the most recent version of @babel/core and still ` +\n `seeing this error, then you'll need to synchronously handle your caching logic.`,\n );\n }\n\n if (\n value != null &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n typeof value !== \"number\"\n ) {\n throw new Error(\n \"Cache keys must be either string, boolean, number, null, or undefined.\",\n );\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'SimpleType'. This can be removed\n // when strictNullCheck is enabled\n return value;\n}\n\nclass Lock {\n released: boolean = false;\n promise: Promise;\n _resolve: (value: T) => void;\n\n constructor() {\n this.promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n release(value: T) {\n this.released = true;\n this._resolve(value);\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\n\nimport path from \"path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { validate } from \"./validation/options.ts\";\nimport type {\n ValidatedOptions,\n IgnoreList,\n ConfigApplicableTest,\n BabelrcSearch,\n CallerMetadata,\n IgnoreItem,\n} from \"./validation/options.ts\";\nimport pathPatternToRegex from \"./pattern-to-regex.ts\";\nimport { ConfigPrinter, ChainFormatter } from \"./printer.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\n\nimport { endHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nconst debug = buildDebug(\"babel:config:config-chain\");\n\nimport {\n findPackageData,\n findRelativeConfig,\n findRootConfig,\n loadConfig,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile, FilePackageData } from \"./files/index.ts\";\n\nimport { makeWeakCacheSync, makeStrongCacheSync } from \"./caching.ts\";\n\nimport {\n createCachedDescriptors,\n createUncachedDescriptors,\n} from \"./config-descriptors.ts\";\nimport type {\n UnloadedDescriptor,\n OptionsAndDescriptors,\n ValidatedFile,\n} from \"./config-descriptors.ts\";\n\nexport type ConfigChain = {\n plugins: Array>;\n presets: Array>;\n options: Array;\n files: Set;\n};\n\nexport type PresetInstance = {\n options: ValidatedOptions;\n alias: string;\n dirname: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type ConfigContext = {\n filename: string | undefined;\n cwd: string;\n root: string;\n envName: string;\n caller: CallerMetadata | undefined;\n showConfig: boolean;\n};\n\n/**\n * Build a config chain for a given preset.\n */\nexport function* buildPresetChain(\n arg: PresetInstance,\n context: any,\n): Handler {\n const chain = yield* buildPresetChainWalker(arg, context);\n if (!chain) return null;\n\n return {\n plugins: dedupDescriptors(chain.plugins),\n presets: dedupDescriptors(chain.presets),\n options: chain.options.map(o => normalizeOptions(o)),\n files: new Set(),\n };\n}\n\nexport const buildPresetChainWalker = makeChainWalker({\n root: preset => loadPresetDescriptors(preset),\n env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName),\n overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index),\n overridesEnv: (preset, index, envName) =>\n loadPresetOverridesEnvDescriptors(preset)(index)(envName),\n createLogger: () => () => {}, // Currently we don't support logging how preset is expanded\n});\nconst loadPresetDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n buildRootDescriptors(preset, preset.alias, createUncachedDescriptors),\n);\nconst loadPresetEnvDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadPresetOverridesDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadPresetOverridesEnvDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nexport type FileHandling = \"transpile\" | \"ignored\" | \"unsupported\";\nexport type RootConfigChain = ConfigChain & {\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\n/**\n * Build a config chain for Babel's full root configuration.\n */\nexport function* buildRootChain(\n opts: ValidatedOptions,\n context: ConfigContext,\n): Handler {\n let configReport, babelRcReport;\n const programmaticLogger = new ConfigPrinter();\n const programmaticChain = yield* loadProgrammaticChain(\n {\n options: opts,\n dirname: context.cwd,\n },\n context,\n undefined,\n programmaticLogger,\n );\n if (!programmaticChain) return null;\n const programmaticReport = yield* programmaticLogger.output();\n\n let configFile;\n if (typeof opts.configFile === \"string\") {\n configFile = yield* loadConfig(\n opts.configFile,\n context.cwd,\n context.envName,\n context.caller,\n );\n } else if (opts.configFile !== false) {\n configFile = yield* findRootConfig(\n context.root,\n context.envName,\n context.caller,\n );\n }\n\n let { babelrc, babelrcRoots } = opts;\n let babelrcRootsDirectory = context.cwd;\n\n const configFileChain = emptyChain();\n const configFileLogger = new ConfigPrinter();\n if (configFile) {\n const validatedFile = validateConfigFile(configFile);\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n configFileLogger,\n );\n if (!result) return null;\n configReport = yield* configFileLogger.output();\n\n // Allow config files to toggle `.babelrc` resolution on and off and\n // specify where the roots are.\n if (babelrc === undefined) {\n babelrc = validatedFile.options.babelrc;\n }\n if (babelrcRoots === undefined) {\n babelrcRootsDirectory = validatedFile.dirname;\n babelrcRoots = validatedFile.options.babelrcRoots;\n }\n\n mergeChain(configFileChain, result);\n }\n\n let ignoreFile, babelrcFile;\n let isIgnored = false;\n const fileChain = emptyChain();\n // resolve all .babelrc files\n if (\n (babelrc === true || babelrc === undefined) &&\n typeof context.filename === \"string\"\n ) {\n const pkgData = yield* findPackageData(context.filename);\n\n if (\n pkgData &&\n babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)\n ) {\n ({ ignore: ignoreFile, config: babelrcFile } = yield* findRelativeConfig(\n pkgData,\n context.envName,\n context.caller,\n ));\n\n if (ignoreFile) {\n fileChain.files.add(ignoreFile.filepath);\n }\n\n if (\n ignoreFile &&\n shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)\n ) {\n isIgnored = true;\n }\n\n if (babelrcFile && !isIgnored) {\n const validatedFile = validateBabelrcFile(babelrcFile);\n const babelrcLogger = new ConfigPrinter();\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n babelrcLogger,\n );\n if (!result) {\n isIgnored = true;\n } else {\n babelRcReport = yield* babelrcLogger.output();\n mergeChain(fileChain, result);\n }\n }\n\n if (babelrcFile && isIgnored) {\n fileChain.files.add(babelrcFile.filepath);\n }\n }\n }\n\n if (context.showConfig) {\n console.log(\n `Babel configs on \"${context.filename}\" (ascending priority):\\n` +\n // print config by the order of ascending priority\n [configReport, babelRcReport, programmaticReport]\n .filter(x => !!x)\n .join(\"\\n\\n\") +\n \"\\n-----End Babel configs-----\",\n );\n }\n // Insert file chain in front so programmatic options have priority\n // over configuration file chain items.\n const chain = mergeChain(\n mergeChain(mergeChain(emptyChain(), configFileChain), fileChain),\n programmaticChain,\n );\n\n return {\n plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),\n presets: isIgnored ? [] : dedupDescriptors(chain.presets),\n options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)),\n fileHandling: isIgnored ? \"ignored\" : \"transpile\",\n ignore: ignoreFile || undefined,\n babelrc: babelrcFile || undefined,\n config: configFile || undefined,\n files: chain.files,\n };\n}\n\nfunction babelrcLoadEnabled(\n context: ConfigContext,\n pkgData: FilePackageData,\n babelrcRoots: BabelrcSearch | undefined,\n babelrcRootsDirectory: string,\n): boolean {\n if (typeof babelrcRoots === \"boolean\") return babelrcRoots;\n\n const absoluteRoot = context.root;\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcRoots === undefined) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n let babelrcPatterns = babelrcRoots;\n if (!Array.isArray(babelrcPatterns)) {\n babelrcPatterns = [babelrcPatterns as IgnoreItem];\n }\n babelrcPatterns = babelrcPatterns.map(pat => {\n return typeof pat === \"string\"\n ? path.resolve(babelrcRootsDirectory, pat)\n : pat;\n });\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n return babelrcPatterns.some(pat => {\n if (typeof pat === \"string\") {\n pat = pathPatternToRegex(pat, babelrcRootsDirectory);\n }\n\n return pkgData.directories.some(directory => {\n return matchPattern(pat, babelrcRootsDirectory, directory, context);\n });\n });\n}\n\nconst validateConfigFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"configfile\", file.options, file.filepath),\n }),\n);\n\nconst validateBabelrcFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"babelrcfile\", file.options, file.filepath),\n }),\n);\n\nconst validateExtendFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"extendsfile\", file.options, file.filepath),\n }),\n);\n\n/**\n * Build a config chain for just the programmatic options passed into Babel.\n */\nconst loadProgrammaticChain = makeChainWalker({\n root: input => buildRootDescriptors(input, \"base\", createCachedDescriptors),\n env: (input, envName) =>\n buildEnvDescriptors(input, \"base\", createCachedDescriptors, envName),\n overrides: (input, index) =>\n buildOverrideDescriptors(input, \"base\", createCachedDescriptors, index),\n overridesEnv: (input, index, envName) =>\n buildOverrideEnvDescriptors(\n input,\n \"base\",\n createCachedDescriptors,\n index,\n envName,\n ),\n createLogger: (input, context, baseLogger) =>\n buildProgrammaticLogger(input, context, baseLogger),\n});\n\n/**\n * Build a config chain for a given file.\n */\nconst loadFileChainWalker = makeChainWalker({\n root: file => loadFileDescriptors(file),\n env: (file, envName) => loadFileEnvDescriptors(file)(envName),\n overrides: (file, index) => loadFileOverridesDescriptors(file)(index),\n overridesEnv: (file, index, envName) =>\n loadFileOverridesEnvDescriptors(file)(index)(envName),\n createLogger: (file, context, baseLogger) =>\n buildFileLogger(file.filepath, context, baseLogger),\n});\n\nfunction* loadFileChain(\n input: ValidatedFile,\n context: ConfigContext,\n files: Set,\n baseLogger: ConfigPrinter,\n) {\n const chain = yield* loadFileChainWalker(input, context, files, baseLogger);\n chain?.files.add(input.filepath);\n\n return chain;\n}\n\nconst loadFileDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n buildRootDescriptors(file, file.filepath, createUncachedDescriptors),\n);\nconst loadFileEnvDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadFileOverridesDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadFileOverridesEnvDescriptors = makeWeakCacheSync(\n (file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nfunction buildFileLogger(\n filepath: string,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Config, {\n filepath,\n });\n}\n\nfunction buildRootDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n) {\n return descriptors(dirname, options, alias);\n}\n\nfunction buildProgrammaticLogger(\n _: unknown,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Programmatic, {\n callerName: context.caller?.name,\n });\n}\n\nfunction buildEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n envName: string,\n) {\n const opts = options.env?.[envName];\n return opts ? descriptors(dirname, opts, `${alias}.env[\"${envName}\"]`) : null;\n}\n\nfunction buildOverrideDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n) {\n const opts = options.overrides?.[index];\n if (!opts) throw new Error(\"Assertion failure - missing override\");\n\n return descriptors(dirname, opts, `${alias}.overrides[${index}]`);\n}\n\nfunction buildOverrideEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n envName: string,\n) {\n const override = options.overrides?.[index];\n if (!override) throw new Error(\"Assertion failure - missing override\");\n\n const opts = override.env?.[envName];\n return opts\n ? descriptors(\n dirname,\n opts,\n `${alias}.overrides[${index}].env[\"${envName}\"]`,\n )\n : null;\n}\n\nfunction makeChainWalker<\n ArgT extends {\n options: ValidatedOptions;\n dirname: string;\n filepath?: string;\n },\n>({\n root,\n env,\n overrides,\n overridesEnv,\n createLogger,\n}: {\n root: (configEntry: ArgT) => OptionsAndDescriptors;\n env: (configEntry: ArgT, env: string) => OptionsAndDescriptors | null;\n overrides: (configEntry: ArgT, index: number) => OptionsAndDescriptors;\n overridesEnv: (\n configEntry: ArgT,\n index: number,\n env: string,\n ) => OptionsAndDescriptors | null;\n createLogger: (\n configEntry: ArgT,\n context: ConfigContext,\n printer: ConfigPrinter | void,\n ) => (\n opts: OptionsAndDescriptors,\n index?: number | null,\n env?: string | null,\n ) => void;\n}): (\n configEntry: ArgT,\n context: ConfigContext,\n files?: Set,\n baseLogger?: ConfigPrinter,\n) => Handler {\n return function* chainWalker(input, context, files = new Set(), baseLogger) {\n const { dirname } = input;\n\n const flattenedConfigs: Array<{\n config: OptionsAndDescriptors;\n index: number | undefined | null;\n envName: string | undefined | null;\n }> = [];\n\n const rootOpts = root(input);\n if (configIsApplicable(rootOpts, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: rootOpts,\n envName: undefined,\n index: undefined,\n });\n\n const envOpts = env(input, context.envName);\n if (\n envOpts &&\n configIsApplicable(envOpts, dirname, context, input.filepath)\n ) {\n flattenedConfigs.push({\n config: envOpts,\n envName: context.envName,\n index: undefined,\n });\n }\n\n (rootOpts.options.overrides || []).forEach((_, index) => {\n const overrideOps = overrides(input, index);\n if (configIsApplicable(overrideOps, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: overrideOps,\n index,\n envName: undefined,\n });\n\n const overrideEnvOpts = overridesEnv(input, index, context.envName);\n if (\n overrideEnvOpts &&\n configIsApplicable(\n overrideEnvOpts,\n dirname,\n context,\n input.filepath,\n )\n ) {\n flattenedConfigs.push({\n config: overrideEnvOpts,\n index,\n envName: context.envName,\n });\n }\n }\n });\n }\n\n // Process 'ignore' and 'only' before 'extends' items are processed so\n // that we don't do extra work loading extended configs if a file is\n // ignored.\n if (\n flattenedConfigs.some(\n ({\n config: {\n options: { ignore, only },\n },\n }) => shouldIgnore(context, ignore, only, dirname),\n )\n ) {\n return null;\n }\n\n const chain = emptyChain();\n const logger = createLogger(input, context, baseLogger);\n\n for (const { config, index, envName } of flattenedConfigs) {\n if (\n !(yield* mergeExtendsChain(\n chain,\n config.options,\n dirname,\n context,\n files,\n baseLogger,\n ))\n ) {\n return null;\n }\n\n logger(config, index, envName);\n yield* mergeChainOpts(chain, config);\n }\n return chain;\n };\n}\n\nfunction* mergeExtendsChain(\n chain: ConfigChain,\n opts: ValidatedOptions,\n dirname: string,\n context: ConfigContext,\n files: Set,\n baseLogger?: ConfigPrinter,\n): Handler {\n if (opts.extends === undefined) return true;\n\n const file = yield* loadConfig(\n opts.extends,\n dirname,\n context.envName,\n context.caller,\n );\n\n if (files.has(file)) {\n throw new Error(\n `Configuration cycle detected loading ${file.filepath}.\\n` +\n `File already loaded following the config chain:\\n` +\n Array.from(files, file => ` - ${file.filepath}`).join(\"\\n\"),\n );\n }\n\n files.add(file);\n const fileChain = yield* loadFileChain(\n validateExtendFile(file),\n context,\n files,\n baseLogger,\n );\n files.delete(file);\n\n if (!fileChain) return false;\n\n mergeChain(chain, fileChain);\n\n return true;\n}\n\nfunction mergeChain(target: ConfigChain, source: ConfigChain): ConfigChain {\n target.options.push(...source.options);\n target.plugins.push(...source.plugins);\n target.presets.push(...source.presets);\n for (const file of source.files) {\n target.files.add(file);\n }\n\n return target;\n}\n\nfunction* mergeChainOpts(\n target: ConfigChain,\n { options, plugins, presets }: OptionsAndDescriptors,\n): Handler {\n target.options.push(options);\n target.plugins.push(...(yield* plugins()));\n target.presets.push(...(yield* presets()));\n\n return target;\n}\n\nfunction emptyChain(): ConfigChain {\n return {\n options: [],\n presets: [],\n plugins: [],\n files: new Set(),\n };\n}\n\nfunction normalizeOptions(opts: ValidatedOptions): ValidatedOptions {\n const options = {\n ...opts,\n };\n delete options.extends;\n delete options.env;\n delete options.overrides;\n delete options.plugins;\n delete options.presets;\n delete options.passPerPreset;\n delete options.ignore;\n delete options.only;\n delete options.test;\n delete options.include;\n delete options.exclude;\n\n // \"sourceMap\" is just aliased to sourceMap, so copy it over as\n // we merge the options together.\n if (Object.hasOwn(options, \"sourceMap\")) {\n options.sourceMaps = options.sourceMap;\n delete options.sourceMap;\n }\n return options;\n}\n\nfunction dedupDescriptors(\n items: Array>,\n): Array> {\n const map: Map<\n Function,\n Map }>\n > = new Map();\n\n const descriptors = [];\n\n for (const item of items) {\n if (typeof item.value === \"function\") {\n const fnKey = item.value;\n let nameMap = map.get(fnKey);\n if (!nameMap) {\n nameMap = new Map();\n map.set(fnKey, nameMap);\n }\n let desc = nameMap.get(item.name);\n if (!desc) {\n desc = { value: item };\n descriptors.push(desc);\n\n // Treat passPerPreset presets as unique, skipping them\n // in the merge processing steps.\n if (!item.ownPass) nameMap.set(item.name, desc);\n } else {\n desc.value = item;\n }\n } else {\n descriptors.push({ value: item });\n }\n }\n\n return descriptors.reduce((acc, desc) => {\n acc.push(desc.value);\n return acc;\n }, []);\n}\n\nfunction configIsApplicable(\n { options }: OptionsAndDescriptors,\n dirname: string,\n context: ConfigContext,\n configName: string,\n): boolean {\n return (\n (options.test === undefined ||\n configFieldIsApplicable(context, options.test, dirname, configName)) &&\n (options.include === undefined ||\n configFieldIsApplicable(context, options.include, dirname, configName)) &&\n (options.exclude === undefined ||\n !configFieldIsApplicable(context, options.exclude, dirname, configName))\n );\n}\n\nfunction configFieldIsApplicable(\n context: ConfigContext,\n test: ConfigApplicableTest,\n dirname: string,\n configName: string,\n): boolean {\n const patterns = Array.isArray(test) ? test : [test];\n\n return matchesPatterns(context, patterns, dirname, configName);\n}\n\n/**\n * Print the ignoreList-values in a more helpful way than the default.\n */\nfunction ignoreListReplacer(\n _key: string,\n value: IgnoreList | IgnoreItem,\n): IgnoreList | IgnoreItem | string {\n if (value instanceof RegExp) {\n return String(value);\n }\n\n return value;\n}\n\n/**\n * Tests if a filename should be ignored based on \"ignore\" and \"only\" options.\n */\nfunction shouldIgnore(\n context: ConfigContext,\n ignore: IgnoreList | undefined | null,\n only: IgnoreList | undefined | null,\n dirname: string,\n): boolean {\n if (ignore && matchesPatterns(context, ignore, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it matches one of \\`ignore: ${JSON.stringify(\n ignore,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n if (only && !matchesPatterns(context, only, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it fails to match one of \\`only: ${JSON.stringify(\n only,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns result of calling function with filename if pattern is a function.\n * Otherwise returns result of matching pattern Regex with filename.\n */\nfunction matchesPatterns(\n context: ConfigContext,\n patterns: IgnoreList,\n dirname: string,\n configName?: string,\n): boolean {\n return patterns.some(pattern =>\n matchPattern(pattern, dirname, context.filename, context, configName),\n );\n}\n\nfunction matchPattern(\n pattern: IgnoreItem,\n dirname: string,\n pathToTest: string | undefined,\n context: ConfigContext,\n configName?: string,\n): boolean {\n if (typeof pattern === \"function\") {\n return !!endHiddenCallStack(pattern)(pathToTest, {\n dirname,\n envName: context.envName,\n caller: context.caller,\n });\n }\n\n if (typeof pathToTest !== \"string\") {\n throw new ConfigError(\n `Configuration contains string/RegExp pattern, but no filename was passed to Babel`,\n configName,\n );\n }\n\n if (typeof pattern === \"string\") {\n pattern = pathPatternToRegex(pattern, dirname);\n }\n return pattern.test(pathToTest);\n}\n","import gensync, { type Handler } from \"gensync\";\nimport { once } from \"../gensync-utils/functional.ts\";\n\nimport { loadPlugin, loadPreset } from \"./files/index.ts\";\n\nimport { getItemDescriptor } from \"./item.ts\";\n\nimport {\n makeWeakCacheSync,\n makeStrongCacheSync,\n makeStrongCache,\n} from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\n\nimport type {\n ValidatedOptions,\n PluginList,\n PluginItem,\n} from \"./validation/options.ts\";\n\nimport { resolveBrowserslistConfigFile } from \"./resolve-targets.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\n// Represents a config object and functions to lazily load the descriptors\n// for the plugins and presets so we don't load the plugins/presets unless\n// the options object actually ends up being applicable.\nexport type OptionsAndDescriptors = {\n options: ValidatedOptions;\n plugins: () => Handler>>;\n presets: () => Handler>>;\n};\n\n// Represents a plugin or presets at a given location in a config object.\n// At this point these have been resolved to a specific object or function,\n// but have not yet been executed to call functions with options.\nexport interface UnloadedDescriptor {\n name: string | undefined;\n value: object | ((api: API, options: Options, dirname: string) => unknown);\n options: Options;\n dirname: string;\n alias: string;\n ownPass?: boolean;\n file?: {\n request: string;\n resolved: string;\n };\n}\n\nfunction isEqualDescriptor(\n a: UnloadedDescriptor,\n b: UnloadedDescriptor,\n): boolean {\n return (\n a.name === b.name &&\n a.value === b.value &&\n a.options === b.options &&\n a.dirname === b.dirname &&\n a.alias === b.alias &&\n a.ownPass === b.ownPass &&\n a.file?.request === b.file?.request &&\n a.file?.resolved === b.file?.resolved\n );\n}\n\nexport type ValidatedFile = {\n filepath: string;\n dirname: string;\n options: ValidatedOptions;\n};\n\n// eslint-disable-next-line require-yield\nfunction* handlerOf(value: T): Handler {\n return value;\n}\n\nfunction optionsWithResolvedBrowserslistConfigFile(\n options: ValidatedOptions,\n dirname: string,\n): ValidatedOptions {\n if (typeof options.browserslistConfigFile === \"string\") {\n options.browserslistConfigFile = resolveBrowserslistConfigFile(\n options.browserslistConfigFile,\n dirname,\n );\n }\n return options;\n}\n\n/**\n * Create a set of descriptors from a given options object, preserving\n * descriptor identity based on the identity of the plugin/preset arrays\n * themselves, and potentially on the identity of the plugins/presets + options.\n */\nexport function createCachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n const { plugins, presets, passPerPreset } = options;\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n plugins: plugins\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPluginDescriptors(plugins, dirname)(alias)\n : () => handlerOf([]),\n presets: presets\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPresetDescriptors(presets, dirname)(alias)(\n !!passPerPreset,\n )\n : () => handlerOf([]),\n };\n}\n\n/**\n * Create a set of descriptors from a given options object, with consistent\n * identity for the descriptors, but not caching based on any specific identity.\n */\nexport function createUncachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n // The returned result here is cached to represent a config object in\n // memory, so we build and memoize the descriptors to ensure the same\n // values are returned consistently.\n plugins: once(() =>\n createPluginDescriptors(options.plugins || [], dirname, alias),\n ),\n presets: once(() =>\n createPresetDescriptors(\n options.presets || [],\n dirname,\n alias,\n !!options.passPerPreset,\n ),\n ),\n };\n}\n\nconst PRESET_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPresetDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCacheSync((alias: string) =>\n makeStrongCache(function* (\n passPerPreset: boolean,\n ): Handler>> {\n const descriptors = yield* createPresetDescriptors(\n items,\n dirname,\n alias,\n passPerPreset,\n );\n return descriptors.map(\n // Items are cached using the overall preset array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc),\n );\n }),\n );\n },\n);\n\nconst PLUGIN_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPluginDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCache(function* (\n alias: string,\n ): Handler>> {\n const descriptors = yield* createPluginDescriptors(items, dirname, alias);\n return descriptors.map(\n // Items are cached using the overall plugin array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc),\n );\n });\n },\n);\n\n/**\n * When no options object is given in a descriptor, this object is used\n * as a WeakMap key in order to have consistent identity.\n */\nconst DEFAULT_OPTIONS = {};\n\n/**\n * Given the cache and a descriptor, returns a matching descriptor from the\n * cache, or else returns the input descriptor and adds it to the cache for\n * next time.\n */\nfunction loadCachedDescriptor(\n cache: WeakMap<\n object | Function,\n WeakMap>>\n >,\n desc: UnloadedDescriptor,\n) {\n const { value, options = DEFAULT_OPTIONS } = desc;\n if (options === false) return desc;\n\n let cacheByOptions = cache.get(value);\n if (!cacheByOptions) {\n cacheByOptions = new WeakMap();\n cache.set(value, cacheByOptions);\n }\n\n let possibilities = cacheByOptions.get(options);\n if (!possibilities) {\n possibilities = [];\n cacheByOptions.set(options, possibilities);\n }\n\n if (!possibilities.includes(desc)) {\n const matches = possibilities.filter(possibility =>\n isEqualDescriptor(possibility, desc),\n );\n if (matches.length > 0) {\n return matches[0];\n }\n\n possibilities.push(desc);\n }\n\n return desc;\n}\n\nfunction* createPresetDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n passPerPreset: boolean,\n): Handler>> {\n return yield* createDescriptors(\n \"preset\",\n items,\n dirname,\n alias,\n passPerPreset,\n );\n}\n\nfunction* createPluginDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n): Handler>> {\n return yield* createDescriptors(\"plugin\", items, dirname, alias);\n}\n\nfunction* createDescriptors(\n type: \"plugin\" | \"preset\",\n items: PluginList,\n dirname: string,\n alias: string,\n ownPass?: boolean,\n): Handler>> {\n const descriptors = yield* gensync.all(\n items.map((item, index) =>\n createDescriptor(item, dirname, {\n type,\n alias: `${alias}$${index}`,\n ownPass: !!ownPass,\n }),\n ),\n );\n\n assertNoDuplicates(descriptors);\n\n return descriptors;\n}\n\n/**\n * Given a plugin/preset item, resolve it into a standard format.\n */\nexport function* createDescriptor(\n pair: PluginItem,\n dirname: string,\n {\n type,\n alias,\n ownPass,\n }: {\n type?: \"plugin\" | \"preset\";\n alias: string;\n ownPass?: boolean;\n },\n): Handler> {\n const desc = getItemDescriptor(pair);\n if (desc) {\n return desc;\n }\n\n let name;\n let options;\n // todo(flow->ts) better type annotation\n let value: any = pair;\n if (Array.isArray(value)) {\n if (value.length === 3) {\n [value, options, name] = value;\n } else {\n [value, options] = value;\n }\n }\n\n let file = undefined;\n let filepath = null;\n if (typeof value === \"string\") {\n if (typeof type !== \"string\") {\n throw new Error(\n \"To resolve a string-based item, the type of item must be given\",\n );\n }\n const resolver = type === \"plugin\" ? loadPlugin : loadPreset;\n const request = value;\n\n ({ filepath, value } = yield* resolver(value, dirname));\n\n file = {\n request,\n resolved: filepath,\n };\n }\n\n if (!value) {\n throw new Error(`Unexpected falsy value: ${String(value)}`);\n }\n\n if (typeof value === \"object\" && value.__esModule) {\n if (value.default) {\n value = value.default;\n } else {\n throw new Error(\"Must export a default export when using ES6 modules.\");\n }\n }\n\n if (typeof value !== \"object\" && typeof value !== \"function\") {\n throw new Error(\n `Unsupported format: ${typeof value}. Expected an object or a function.`,\n );\n }\n\n if (filepath !== null && typeof value === \"object\" && value) {\n // We allow object values for plugins/presets nested directly within a\n // config object, because it can be useful to define them in nested\n // configuration contexts.\n throw new Error(\n `Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`,\n );\n }\n\n return {\n name,\n alias: filepath || alias,\n value,\n options,\n dirname,\n ownPass,\n file,\n };\n}\n\nfunction assertNoDuplicates(items: Array>): void {\n const map = new Map();\n\n for (const item of items) {\n if (typeof item.value !== \"function\") continue;\n\n let nameMap = map.get(item.value);\n if (!nameMap) {\n nameMap = new Set();\n map.set(item.value, nameMap);\n }\n\n if (nameMap.has(item.name)) {\n const conflicts = items.filter(i => i.value === item.value);\n throw new Error(\n [\n `Duplicate plugin/preset detected.`,\n `If you'd like to use two separate instances of a plugin,`,\n `they need separate names, e.g.`,\n ``,\n ` plugins: [`,\n ` ['some-plugin', {}],`,\n ` ['some-plugin', {}, 'some unique name'],`,\n ` ]`,\n ``,\n `Duplicates detected are:`,\n `${JSON.stringify(conflicts, null, 2)}`,\n ].join(\"\\n\"),\n );\n }\n\n nameMap.add(item.name);\n }\n}\n","import type { Handler } from \"gensync\";\n\nimport type {\n ConfigFile,\n IgnoreFile,\n RelativeConfig,\n FilePackageData,\n} from \"./types.ts\";\n\nimport type { CallerMetadata } from \"../validation/options.ts\";\n\nexport type { ConfigFile, IgnoreFile, RelativeConfig, FilePackageData };\n\nexport function findConfigUpwards(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rootDir: string,\n): string | null {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* findPackageData(filepath: string): Handler {\n return {\n filepath,\n directories: [],\n pkg: null,\n isPackage: false,\n };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRelativeConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n pkgData: FilePackageData,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return { config: null, ignore: null };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRootConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* loadConfig(\n name: string,\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`);\n}\n\n// eslint-disable-next-line require-yield\nexport function* resolveShowConfigPath(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n): Handler {\n return null;\n}\n\nexport const ROOT_CONFIG_FILENAMES: string[] = [];\n\ntype Resolved =\n | { loader: \"require\"; filepath: string }\n | { loader: \"import\"; filepath: string };\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePlugin(name: string, dirname: string): Resolved | null {\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePreset(name: string, dirname: string): Resolved | null {\n return null;\n}\n\nexport function loadPlugin(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load plugin ${name} relative to ${dirname} in a browser`,\n );\n}\n\nexport function loadPreset(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load preset ${name} relative to ${dirname} in a browser`,\n );\n}\n","import gensync, { type Handler } from \"gensync\";\nimport {\n forwardAsync,\n maybeAsync,\n isThenable,\n} from \"../gensync-utils/async.ts\";\n\nimport { mergeOptions } from \"./util.ts\";\nimport * as context from \"../index.ts\";\nimport Plugin from \"./plugin.ts\";\nimport { getItemDescriptor } from \"./item.ts\";\nimport { buildPresetChain } from \"./config-chain.ts\";\nimport { finalize as freezeDeepArray } from \"./helpers/deep-array.ts\";\nimport type { DeepArray, ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type {\n ConfigContext,\n ConfigChain,\n PresetInstance,\n} from \"./config-chain.ts\";\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\nimport traverse from \"@babel/traverse\";\nimport { makeWeakCache, makeWeakCacheSync } from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\nimport {\n validate,\n checkNoUnwrappedItemOptionPairs,\n} from \"./validation/options.ts\";\nimport type { InputOptions, PluginItem } from \"./validation/options.ts\";\nimport { validatePluginObject } from \"./validation/plugins.ts\";\nimport { makePluginAPI, makePresetAPI } from \"./helpers/config-api.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nimport loadPrivatePartialConfig from \"./partial.ts\";\nimport type { ValidatedOptions } from \"./validation/options.ts\";\n\nimport type * as Context from \"./cache-contexts.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\n\ntype LoadedDescriptor = {\n value: any;\n options: object;\n dirname: string;\n alias: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { InputOptions } from \"./validation/options.ts\";\n\nexport type ResolvedConfig = {\n options: any;\n passes: PluginPasses;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { Plugin };\nexport type PluginPassList = Array;\nexport type PluginPasses = Array;\n\nexport default gensync(function* loadFullConfig(\n inputOpts: InputOptions,\n): Handler {\n const result = yield* loadPrivatePartialConfig(inputOpts);\n if (!result) {\n return null;\n }\n const { options, context, fileHandling } = result;\n\n if (fileHandling === \"ignored\") {\n return null;\n }\n\n const optionDefaults: ValidatedOptions = {};\n\n const { plugins, presets } = options;\n\n if (!plugins || !presets) {\n throw new Error(\"Assertion failure - plugins and presets exist\");\n }\n\n const presetContext: Context.FullPreset = {\n ...context,\n targets: options.targets,\n };\n\n const toDescriptor = (item: PluginItem) => {\n const desc = getItemDescriptor(item);\n if (!desc) {\n throw new Error(\"Assertion failure - must be config item\");\n }\n\n return desc;\n };\n\n const presetsDescriptors = presets.map(toDescriptor);\n const initialPluginsDescriptors = plugins.map(toDescriptor);\n const pluginDescriptorsByPass: Array>> = [\n [],\n ];\n const passes: Array> = [];\n\n const externalDependencies: DeepArray = [];\n\n const ignored = yield* enhanceError(\n context,\n function* recursePresetDescriptors(\n rawPresets: Array>,\n pluginDescriptorsPass: Array>,\n ): Handler {\n const presets: Array<{\n preset: ConfigChain | null;\n pass: Array>;\n }> = [];\n\n for (let i = 0; i < rawPresets.length; i++) {\n const descriptor = rawPresets[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var preset = yield* loadPresetDescriptor(descriptor, presetContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_OPTION\") {\n checkNoUnwrappedItemOptionPairs(rawPresets, i, \"preset\", e);\n }\n throw e;\n }\n\n externalDependencies.push(preset.externalDependencies);\n\n // Presets normally run in reverse order, but if they\n // have their own pass they run after the presets\n // in the previous pass.\n if (descriptor.ownPass) {\n presets.push({ preset: preset.chain, pass: [] });\n } else {\n presets.unshift({\n preset: preset.chain,\n pass: pluginDescriptorsPass,\n });\n }\n }\n }\n\n // resolve presets\n if (presets.length > 0) {\n // The passes are created in the same order as the preset list, but are inserted before any\n // existing additional passes.\n pluginDescriptorsByPass.splice(\n 1,\n 0,\n ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass),\n );\n\n for (const { preset, pass } of presets) {\n if (!preset) return true;\n\n pass.push(...preset.plugins);\n\n const ignored = yield* recursePresetDescriptors(preset.presets, pass);\n if (ignored) return true;\n\n preset.options.forEach(opts => {\n mergeOptions(optionDefaults, opts);\n });\n }\n }\n },\n )(presetsDescriptors, pluginDescriptorsByPass[0]);\n\n if (ignored) return null;\n\n const opts: ValidatedOptions = optionDefaults;\n mergeOptions(opts, options);\n\n const pluginContext: Context.FullPlugin = {\n ...presetContext,\n assumptions: opts.assumptions ?? {},\n };\n\n yield* enhanceError(context, function* loadPluginDescriptors() {\n pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors);\n\n for (const descs of pluginDescriptorsByPass) {\n const pass: Plugin[] = [];\n passes.push(pass);\n\n for (let i = 0; i < descs.length; i++) {\n const descriptor = descs[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var plugin = yield* loadPluginDescriptor(descriptor, pluginContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_PLUGIN_PROPERTY\") {\n // print special message for `plugins: [\"@babel/foo\", { foo: \"option\" }]`\n checkNoUnwrappedItemOptionPairs(descs, i, \"plugin\", e);\n }\n throw e;\n }\n pass.push(plugin);\n\n externalDependencies.push(plugin.externalDependencies);\n }\n }\n }\n })();\n\n opts.plugins = passes[0];\n opts.presets = passes\n .slice(1)\n .filter(plugins => plugins.length > 0)\n .map(plugins => ({ plugins }));\n opts.passPerPreset = opts.presets.length > 0;\n\n return {\n options: opts,\n passes: passes,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n});\n\nfunction enhanceError(context: ConfigContext, fn: T): T {\n return function* (arg1: unknown, arg2: unknown) {\n try {\n return yield* fn(arg1, arg2);\n } catch (e) {\n // There are a few case where thrown errors will try to annotate themselves multiple times, so\n // to keep things simple we just bail out if re-wrapping the message.\n if (!/^\\[BABEL\\]/.test(e.message)) {\n e.message = `[BABEL] ${context.filename ?? \"unknown file\"}: ${\n e.message\n }`;\n }\n\n throw e;\n }\n } as any;\n}\n\n/**\n * Load a generic plugin/preset from the given descriptor loaded from the config object.\n */\nconst makeDescriptorLoader = (\n apiFactory: (\n cache: CacheConfigurator,\n externalDependencies: Array,\n ) => API,\n) =>\n makeWeakCache(function* (\n { value, options, dirname, alias }: UnloadedDescriptor,\n cache: CacheConfigurator,\n ): Handler {\n // Disabled presets should already have been filtered out\n if (options === false) throw new Error(\"Assertion failure\");\n\n options = options || {};\n\n const externalDependencies: Array = [];\n\n let item: unknown = value;\n if (typeof value === \"function\") {\n const factory = maybeAsync(\n value as (api: API, options: object, dirname: string) => unknown,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n const api = {\n ...context,\n ...apiFactory(cache, externalDependencies),\n };\n try {\n item = yield* factory(api, options, dirname);\n } catch (e) {\n if (alias) {\n e.message += ` (While processing: ${JSON.stringify(alias)})`;\n }\n throw e;\n }\n }\n\n if (!item || typeof item !== \"object\") {\n throw new Error(\"Plugin/Preset did not return an object.\");\n }\n\n if (isThenable(item)) {\n // if we want to support async plugins\n yield* [];\n\n throw new Error(\n `You appear to be using a promise as a plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version. ` +\n `As an alternative, you can prefix the promise with \"await\". ` +\n `(While processing: ${JSON.stringify(alias)})`,\n );\n }\n\n if (\n externalDependencies.length > 0 &&\n (!cache.configured() || cache.mode() === \"forever\")\n ) {\n let error =\n `A plugin/preset has external untracked dependencies ` +\n `(${externalDependencies[0]}), but the cache `;\n if (!cache.configured()) {\n error += `has not been configured to be invalidated when the external dependencies change. `;\n } else {\n error += ` has been configured to never be invalidated. `;\n }\n error +=\n `Plugins/presets should configure their cache to be invalidated when the external ` +\n `dependencies change, for example using \\`api.cache.invalidate(() => ` +\n `statSync(filepath).mtimeMs)\\` or \\`api.cache.never()\\`\\n` +\n `(While processing: ${JSON.stringify(alias)})`;\n\n throw new Error(error);\n }\n\n return {\n value: item,\n options,\n dirname,\n alias,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n });\n\nconst pluginDescriptorLoader = makeDescriptorLoader<\n Context.SimplePlugin,\n PluginAPI\n>(makePluginAPI);\nconst presetDescriptorLoader = makeDescriptorLoader<\n Context.SimplePreset,\n PresetAPI\n>(makePresetAPI);\n\nconst instantiatePlugin = makeWeakCache(function* (\n { value, options, dirname, alias, externalDependencies }: LoadedDescriptor,\n cache: CacheConfigurator,\n): Handler {\n const pluginObj = validatePluginObject(value);\n\n const plugin = {\n ...pluginObj,\n };\n if (plugin.visitor) {\n plugin.visitor = traverse.explode({\n ...plugin.visitor,\n });\n }\n\n if (plugin.inherits) {\n const inheritsDescriptor: UnloadedDescriptor = {\n name: undefined,\n alias: `${alias}$inherits`,\n value: plugin.inherits,\n options,\n dirname,\n };\n\n const inherits = yield* forwardAsync(loadPluginDescriptor, run => {\n // If the inherited plugin changes, reinstantiate this plugin.\n return cache.invalidate(data => run(inheritsDescriptor, data));\n });\n\n plugin.pre = chainMaybeAsync(inherits.pre, plugin.pre);\n plugin.post = chainMaybeAsync(inherits.post, plugin.post);\n plugin.manipulateOptions = chainMaybeAsync(\n inherits.manipulateOptions,\n plugin.manipulateOptions,\n );\n plugin.visitor = traverse.visitors.merge([\n inherits.visitor || {},\n plugin.visitor || {},\n ]);\n\n if (inherits.externalDependencies.length > 0) {\n if (externalDependencies.length === 0) {\n externalDependencies = inherits.externalDependencies;\n } else {\n externalDependencies = freezeDeepArray([\n externalDependencies,\n inherits.externalDependencies,\n ]);\n }\n }\n }\n\n return new Plugin(plugin, options, alias, externalDependencies);\n});\n\n/**\n * Instantiate a plugin for the given descriptor, returning the plugin/options pair.\n */\nfunction* loadPluginDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.SimplePlugin,\n): Handler {\n if (descriptor.value instanceof Plugin) {\n if (descriptor.options) {\n throw new Error(\n \"Passed options to an existing Plugin instance will not work.\",\n );\n }\n\n return descriptor.value;\n }\n\n return yield* instantiatePlugin(\n yield* pluginDescriptorLoader(descriptor, context),\n context,\n );\n}\n\nconst needsFilename = (val: unknown) => val && typeof val !== \"function\";\n\nconst validateIfOptionNeedsFilename = (\n options: ValidatedOptions,\n descriptor: UnloadedDescriptor,\n): void => {\n if (\n needsFilename(options.test) ||\n needsFilename(options.include) ||\n needsFilename(options.exclude)\n ) {\n const formattedPresetName = descriptor.name\n ? `\"${descriptor.name}\"`\n : \"/* your preset */\";\n throw new ConfigError(\n [\n `Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`,\n `\\`\\`\\``,\n `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`,\n `\\`\\`\\``,\n `See https://babeljs.io/docs/en/options#filename for more information.`,\n ].join(\"\\n\"),\n );\n }\n};\n\nconst validatePreset = (\n preset: PresetInstance,\n context: ConfigContext,\n descriptor: UnloadedDescriptor,\n): void => {\n if (!context.filename) {\n const { options } = preset;\n validateIfOptionNeedsFilename(options, descriptor);\n options.overrides?.forEach(overrideOptions =>\n validateIfOptionNeedsFilename(overrideOptions, descriptor),\n );\n }\n};\n\nconst instantiatePreset = makeWeakCacheSync(\n ({\n value,\n dirname,\n alias,\n externalDependencies,\n }: LoadedDescriptor): PresetInstance => {\n return {\n options: validate(\"preset\", value),\n alias,\n dirname,\n externalDependencies,\n };\n },\n);\n\n/**\n * Generate a config object that will act as the root of a new nested config.\n */\nfunction* loadPresetDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.FullPreset,\n): Handler<{\n chain: ConfigChain | null;\n externalDependencies: ReadonlyDeepArray;\n}> {\n const preset = instantiatePreset(\n yield* presetDescriptorLoader(descriptor, context),\n );\n validatePreset(preset, context, descriptor);\n return {\n chain: yield* buildPresetChain(preset, context),\n externalDependencies: preset.externalDependencies,\n };\n}\n\nfunction chainMaybeAsync>(\n a: undefined | ((...args: Args) => R),\n b: undefined | ((...args: Args) => R),\n): (...args: Args) => R {\n if (!a) return b;\n if (!b) return a;\n\n return function (this: unknown, ...args: Args) {\n const res = a.apply(this, args);\n if (res && typeof res.then === \"function\") {\n return res.then(() => b.apply(this, args));\n }\n return b.apply(this, args);\n } as (...args: Args) => R;\n}\n","import semver from \"semver\";\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nimport { version as coreVersion } from \"../../index.ts\";\nimport { assertSimpleType } from \"../caching.ts\";\nimport type {\n CacheConfigurator,\n SimpleCacheConfigurator,\n SimpleType,\n} from \"../caching.ts\";\n\nimport type { AssumptionName, CallerMetadata } from \"../validation/options.ts\";\n\nimport type * as Context from \"../cache-contexts\";\n\ntype EnvFunction = {\n (): string;\n (extractor: (babelEnv: string) => T): T;\n (envVar: string): boolean;\n (envVars: Array): boolean;\n};\n\ntype CallerFactory = {\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => T,\n ): T;\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => unknown,\n ): SimpleType;\n};\ntype TargetsFunction = () => Targets;\ntype AssumptionFunction = (name: AssumptionName) => boolean | undefined;\n\nexport type ConfigAPI = {\n version: string;\n cache: SimpleCacheConfigurator;\n env: EnvFunction;\n async: () => boolean;\n assertVersion: typeof assertVersion;\n caller?: CallerFactory;\n};\n\nexport type PresetAPI = {\n targets: TargetsFunction;\n addExternalDependency: (ref: string) => void;\n} & ConfigAPI;\n\nexport type PluginAPI = {\n assumption: AssumptionFunction;\n} & PresetAPI;\n\nexport function makeConfigAPI(\n cache: CacheConfigurator,\n): ConfigAPI {\n // TODO(@nicolo-ribaudo): If we remove the explicit type from `value`\n // and the `as any` type cast, TypeScript crashes in an infinite\n // recursion. After upgrading to TS4.7 and finishing the noImplicitAny\n // PR, we should check if it still crashes and report it to the TS team.\n const env: EnvFunction = ((\n value: string | string[] | ((babelEnv: string) => T),\n ) =>\n cache.using(data => {\n if (value === undefined) return data.envName;\n if (typeof value === \"function\") {\n return assertSimpleType(value(data.envName));\n }\n return (Array.isArray(value) ? value : [value]).some(entry => {\n if (typeof entry !== \"string\") {\n throw new Error(\"Unexpected non-string value\");\n }\n return entry === data.envName;\n });\n })) as any;\n\n const caller = (\n cb: (CallerMetadata: CallerMetadata | undefined) => SimpleType,\n ) => cache.using(data => assertSimpleType(cb(data.caller)));\n\n return {\n version: coreVersion,\n cache: cache.simple(),\n // Expose \".env()\" so people can easily get the same env that we expose using the \"env\" key.\n env,\n async: () => false,\n caller,\n assertVersion,\n };\n}\n\nexport function makePresetAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PresetAPI {\n const targets = () =>\n // We are using JSON.parse/JSON.stringify because it's only possible to cache\n // primitive values. We can safely stringify the targets object because it\n // only contains strings as its properties.\n // Please make the Record and Tuple proposal happen!\n JSON.parse(cache.using(data => JSON.stringify(data.targets)));\n\n const addExternalDependency = (ref: string) => {\n externalDependencies.push(ref);\n };\n\n return { ...makeConfigAPI(cache), targets, addExternalDependency };\n}\n\nexport function makePluginAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PluginAPI {\n const assumption = (name: string) =>\n cache.using(data => data.assumptions[name]);\n\n return { ...makePresetAPI(cache, externalDependencies), assumption };\n}\n\nfunction assertVersion(range: string | number): void {\n if (typeof range === \"number\") {\n if (!Number.isInteger(range)) {\n throw new Error(\"Expected string or integer value.\");\n }\n range = `^${range}.0.0-0`;\n }\n if (typeof range !== \"string\") {\n throw new Error(\"Expected string or integer value.\");\n }\n\n // We want \"*\" to also allow any pre-release, but we do not pass\n // the includePrerelease option to semver.satisfies because we\n // do not want ^7.0.0 to match 8.0.0-alpha.1.\n if (range === \"*\" || semver.satisfies(coreVersion, range)) return;\n\n const limit = Error.stackTraceLimit;\n\n if (typeof limit === \"number\" && limit < 25) {\n // Bump up the limit if needed so that users are more likely\n // to be able to see what is calling Babel.\n Error.stackTraceLimit = 25;\n }\n\n const err = new Error(\n `Requires Babel \"${range}\", but was loaded with \"${coreVersion}\". ` +\n `If you are sure you have a compatible version of @babel/core, ` +\n `it is likely that something in your build process is loading the ` +\n `wrong version. Inspect the stack trace of this error to look for ` +\n `the first entry that doesn't mention \"@babel/core\" or \"babel-core\" ` +\n `to see what is calling Babel.`,\n );\n\n if (typeof limit === \"number\") {\n Error.stackTraceLimit = limit;\n }\n\n throw Object.assign(err, {\n code: \"BABEL_VERSION_UNSUPPORTED\",\n version: coreVersion,\n range,\n });\n}\n","export type DeepArray = Array>;\n\n// Just to make sure that DeepArray is not assignable to ReadonlyDeepArray\ndeclare const __marker: unique symbol;\nexport type ReadonlyDeepArray = ReadonlyArray> & {\n [__marker]: true;\n};\n\nexport function finalize(deepArr: DeepArray): ReadonlyDeepArray {\n return Object.freeze(deepArr) as ReadonlyDeepArray;\n}\n\nexport function flattenToSet(\n arr: ReadonlyDeepArray,\n): Set {\n const result = new Set();\n const stack = [arr];\n while (stack.length > 0) {\n for (const el of stack.pop()) {\n if (Array.isArray(el)) stack.push(el as ReadonlyDeepArray);\n else result.add(el as T);\n }\n }\n return result;\n}\n","export function getEnv(defaultValue: string = \"development\"): string {\n return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue;\n}\n","import gensync, { type Handler } from \"gensync\";\n\nexport type {\n ResolvedConfig,\n InputOptions,\n PluginPasses,\n Plugin,\n} from \"./full.ts\";\n\nimport type { InputOptions, PluginTarget } from \"./validation/options.ts\";\n\nimport type {\n PluginAPI as basePluginAPI,\n PresetAPI as basePresetAPI,\n} from \"./helpers/config-api.ts\";\nexport type { PluginObject } from \"./validation/plugins.ts\";\ntype PluginAPI = basePluginAPI & typeof import(\"..\");\ntype PresetAPI = basePresetAPI & typeof import(\"..\");\nexport type { PluginAPI, PresetAPI };\n// todo: may need to refine PresetObject to be a subset of ValidatedOptions\nexport type {\n CallerMetadata,\n ValidatedOptions as PresetObject,\n} from \"./validation/options.ts\";\n\nimport loadFullConfig, { type ResolvedConfig } from \"./full.ts\";\nimport {\n type PartialConfig,\n loadPartialConfig as loadPartialConfigImpl,\n} from \"./partial.ts\";\n\nexport { loadFullConfig as default };\nexport type { PartialConfig } from \"./partial.ts\";\n\nimport { createConfigItem as createConfigItemImpl } from \"./item.ts\";\nimport type { ConfigItem } from \"./item.ts\";\nexport type { ConfigItem };\n\nimport { beginHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\n\nconst loadPartialConfigRunner = gensync(loadPartialConfigImpl);\nexport function loadPartialConfigAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.async)(...args);\n}\nexport function loadPartialConfigSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.sync)(...args);\n}\nexport function loadPartialConfig(\n opts: Parameters[0],\n callback?: (err: Error, val: PartialConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(\n undefined,\n opts as (err: Error, val: PartialConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadPartialConfig' function expects a callback. If you need to call it synchronously, please use 'loadPartialConfigSync'.\",\n );\n } else {\n return loadPartialConfigSync(opts);\n }\n }\n}\n\nfunction* loadOptionsImpl(opts: InputOptions): Handler {\n const config = yield* loadFullConfig(opts);\n // NOTE: We want to return \"null\" explicitly, while ?. alone returns undefined\n return config?.options ?? null;\n}\nconst loadOptionsRunner = gensync(loadOptionsImpl);\nexport function loadOptionsAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.async)(...args);\n}\nexport function loadOptionsSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.sync)(...args);\n}\nexport function loadOptions(\n opts: Parameters[0],\n callback?: (err: Error, val: ResolvedConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadOptionsRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadOptionsRunner.errback)(\n undefined,\n opts as (err: Error, val: ResolvedConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadOptions' function expects a callback. If you need to call it synchronously, please use 'loadOptionsSync'.\",\n );\n } else {\n return loadOptionsSync(opts);\n }\n }\n}\n\nconst createConfigItemRunner = gensync(createConfigItemImpl);\nexport function createConfigItemAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.async)(...args);\n}\nexport function createConfigItemSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.sync)(...args);\n}\nexport function createConfigItem(\n target: PluginTarget,\n options: Parameters[1],\n callback?: (err: Error, val: ConfigItem | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n options,\n callback,\n );\n } else if (typeof options === \"function\") {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n undefined,\n callback,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'createConfigItem' function expects a callback. If you need to call it synchronously, please use 'createConfigItemSync'.\",\n );\n } else {\n return createConfigItemSync(target, options);\n }\n }\n}\n","import type { Handler } from \"gensync\";\nimport type { PluginTarget, PluginOptions } from \"./validation/options.ts\";\n\nimport path from \"path\";\nimport { createDescriptor } from \"./config-descriptors.ts\";\n\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\n\nexport function createItemFromDescriptor(\n desc: UnloadedDescriptor,\n): ConfigItem {\n return new ConfigItem(desc);\n}\n\n/**\n * Create a config item using the same value format used in Babel's config\n * files. Items returned from this function should be cached by the caller\n * ideally, as recreating the config item will mean re-resolving the item\n * and re-evaluating the plugin/preset function.\n */\nexport function* createConfigItem(\n value:\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void],\n {\n dirname = \".\",\n type,\n }: {\n dirname?: string;\n type?: \"preset\" | \"plugin\";\n } = {},\n): Handler> {\n const descriptor = yield* createDescriptor(value, path.resolve(dirname), {\n type,\n alias: \"programmatic item\",\n });\n\n return createItemFromDescriptor(descriptor);\n}\n\nconst CONFIG_ITEM_BRAND = Symbol.for(\"@babel/core@7 - ConfigItem\");\n\nexport function getItemDescriptor(\n item: unknown,\n): UnloadedDescriptor | void {\n if ((item as any)?.[CONFIG_ITEM_BRAND]) {\n return (item as ConfigItem)._descriptor;\n }\n\n return undefined;\n}\n\nexport type { ConfigItem };\n\n/**\n * A public representation of a plugin/preset that will _eventually_ be load.\n * Users can use this to interact with the results of a loaded Babel\n * configuration.\n *\n * Any changes to public properties of this class should be considered a\n * breaking change to Babel's API.\n */\nclass ConfigItem {\n /**\n * The private underlying descriptor that Babel actually cares about.\n * If you access this, you are a bad person.\n */\n _descriptor: UnloadedDescriptor;\n\n // TODO(Babel 9): Check if this symbol needs to be updated\n /**\n * Used to detect ConfigItem instances from other Babel instances.\n */\n [CONFIG_ITEM_BRAND] = true;\n\n /**\n * The resolved value of the item itself.\n */\n value: object | Function;\n\n /**\n * The options, if any, that were passed to the item.\n * Mutating this will lead to undefined behavior.\n *\n * \"false\" means that this item has been disabled.\n */\n options: object | void | false;\n\n /**\n * The directory that the options for this item are relative to.\n */\n dirname: string;\n\n /**\n * Get the name of the plugin, if the user gave it one.\n */\n name: string | void;\n\n /**\n * Data about the file that the item was loaded from, if Babel knows it.\n */\n file: {\n // The requested path, e.g. \"@babel/env\".\n request: string;\n // The resolved absolute path of the file.\n resolved: string;\n } | void;\n\n constructor(descriptor: UnloadedDescriptor) {\n // Make people less likely to stumble onto this if they are exploring\n // programmatically, and also make sure that if people happen to\n // pass the item through JSON.stringify, it doesn't show up.\n this._descriptor = descriptor;\n Object.defineProperty(this, \"_descriptor\", { enumerable: false });\n\n Object.defineProperty(this, CONFIG_ITEM_BRAND, { enumerable: false });\n\n this.value = this._descriptor.value;\n this.options = this._descriptor.options;\n this.dirname = this._descriptor.dirname;\n this.name = this._descriptor.name;\n this.file = this._descriptor.file\n ? {\n request: this._descriptor.file.request,\n resolved: this._descriptor.file.resolved,\n }\n : undefined;\n\n // Freeze the object to make it clear that people shouldn't expect mutating\n // this object to do anything. A new item should be created if they want\n // to change something.\n Object.freeze(this);\n }\n}\n\nObject.freeze(ConfigItem.prototype);\n","import path from \"path\";\nimport type { Handler } from \"gensync\";\nimport Plugin from \"./plugin.ts\";\nimport { mergeOptions } from \"./util.ts\";\nimport { createItemFromDescriptor } from \"./item.ts\";\nimport { buildRootChain } from \"./config-chain.ts\";\nimport type { ConfigContext, FileHandling } from \"./config-chain.ts\";\nimport { getEnv } from \"./helpers/environment.ts\";\nimport { validate } from \"./validation/options.ts\";\n\nimport type {\n ValidatedOptions,\n NormalizedOptions,\n RootMode,\n InputOptions,\n} from \"./validation/options.ts\";\n\nimport {\n findConfigUpwards,\n resolveShowConfigPath,\n ROOT_CONFIG_FILENAMES,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile } from \"./files/index.ts\";\nimport { resolveTargets } from \"./resolve-targets.ts\";\n\nfunction resolveRootMode(rootDir: string, rootMode: RootMode): string {\n switch (rootMode) {\n case \"root\":\n return rootDir;\n\n case \"upward-optional\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n return upwardRootDir === null ? rootDir : upwardRootDir;\n }\n\n case \"upward\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n if (upwardRootDir !== null) return upwardRootDir;\n\n throw Object.assign(\n new Error(\n `Babel was run with rootMode:\"upward\" but a root could not ` +\n `be found when searching upward from \"${rootDir}\".\\n` +\n `One of the following config files must be in the directory tree: ` +\n `\"${ROOT_CONFIG_FILENAMES.join(\", \")}\".`,\n ) as any,\n {\n code: \"BABEL_ROOT_NOT_FOUND\",\n dirname: rootDir,\n },\n );\n }\n default:\n throw new Error(`Assertion failure - unknown rootMode value.`);\n }\n}\n\nexport type PrivPartialConfig = {\n showIgnoredFiles?: boolean;\n options: NormalizedOptions;\n context: ConfigContext;\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\nexport default function* loadPrivatePartialConfig(\n inputOpts: InputOptions,\n): Handler {\n if (\n inputOpts != null &&\n (typeof inputOpts !== \"object\" || Array.isArray(inputOpts))\n ) {\n throw new Error(\"Babel options must be an object, null, or undefined\");\n }\n\n const args = inputOpts ? validate(\"arguments\", inputOpts) : {};\n\n const {\n envName = getEnv(),\n cwd = \".\",\n root: rootDir = \".\",\n rootMode = \"root\",\n caller,\n cloneInputAst = true,\n } = args;\n const absoluteCwd = path.resolve(cwd);\n const absoluteRootDir = resolveRootMode(\n path.resolve(absoluteCwd, rootDir),\n rootMode,\n );\n\n const filename =\n typeof args.filename === \"string\"\n ? path.resolve(cwd, args.filename)\n : undefined;\n\n const showConfigPath = yield* resolveShowConfigPath(absoluteCwd);\n\n const context: ConfigContext = {\n filename,\n cwd: absoluteCwd,\n root: absoluteRootDir,\n envName,\n caller,\n showConfig: showConfigPath === filename,\n };\n\n const configChain = yield* buildRootChain(args, context);\n if (!configChain) return null;\n\n const merged: ValidatedOptions = {\n assumptions: {},\n };\n configChain.options.forEach(opts => {\n mergeOptions(merged as any, opts);\n });\n\n const options: NormalizedOptions = {\n ...merged,\n targets: resolveTargets(merged, absoluteRootDir),\n\n // Tack the passes onto the object itself so that, if this object is\n // passed back to Babel a second time, it will be in the right structure\n // to not change behavior.\n cloneInputAst,\n babelrc: false,\n configFile: false,\n browserslistConfigFile: false,\n passPerPreset: false,\n envName: context.envName,\n cwd: context.cwd,\n root: context.root,\n rootMode: \"root\",\n filename:\n typeof context.filename === \"string\" ? context.filename : undefined,\n\n plugins: configChain.plugins.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n presets: configChain.presets.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n };\n\n return {\n options,\n context,\n fileHandling: configChain.fileHandling,\n ignore: configChain.ignore,\n babelrc: configChain.babelrc,\n config: configChain.config,\n files: configChain.files,\n };\n}\n\nexport function* loadPartialConfig(\n opts?: InputOptions,\n): Handler {\n let showIgnoredFiles = false;\n // We only extract showIgnoredFiles if opts is an object, so that\n // loadPrivatePartialConfig can throw the appropriate error if it's not.\n if (typeof opts === \"object\" && opts !== null && !Array.isArray(opts)) {\n ({ showIgnoredFiles, ...opts } = opts);\n }\n\n const result: PrivPartialConfig | undefined | null =\n yield* loadPrivatePartialConfig(opts);\n if (!result) return null;\n\n const { options, babelrc, ignore, config, fileHandling, files } = result;\n\n if (fileHandling === \"ignored\" && !showIgnoredFiles) {\n return null;\n }\n\n (options.plugins || []).forEach(item => {\n // @ts-expect-error todo(flow->ts): better type annotation for `item.value`\n if (item.value instanceof Plugin) {\n throw new Error(\n \"Passing cached plugin instances is not supported in \" +\n \"babel.loadPartialConfig()\",\n );\n }\n });\n\n return new PartialConfig(\n options,\n babelrc ? babelrc.filepath : undefined,\n ignore ? ignore.filepath : undefined,\n config ? config.filepath : undefined,\n fileHandling,\n files,\n );\n}\n\nexport type { PartialConfig };\n\nclass PartialConfig {\n /**\n * These properties are public, so any changes to them should be considered\n * a breaking change to Babel's API.\n */\n options: NormalizedOptions;\n babelrc: string | void;\n babelignore: string | void;\n config: string | void;\n fileHandling: FileHandling;\n files: Set;\n\n constructor(\n options: NormalizedOptions,\n babelrc: string | void,\n ignore: string | void,\n config: string | void,\n fileHandling: FileHandling,\n files: Set,\n ) {\n this.options = options;\n this.babelignore = ignore;\n this.babelrc = babelrc;\n this.config = config;\n this.fileHandling = fileHandling;\n this.files = files;\n\n // Freeze since this is a public API and it should be extremely obvious that\n // reassigning properties on here does nothing.\n Object.freeze(this);\n }\n\n /**\n * Returns true if there is a config file in the filesystem for this config.\n */\n hasFilesystemConfig(): boolean {\n return this.babelrc !== undefined || this.config !== undefined;\n }\n}\nObject.freeze(PartialConfig.prototype);\n","import path from \"path\";\n\nconst sep = `\\\\${path.sep}`;\nconst endSep = `(?:${sep}|$)`;\n\nconst substitution = `[^${sep}]+`;\n\nconst starPat = `(?:${substitution}${sep})`;\nconst starPatLast = `(?:${substitution}${endSep})`;\n\nconst starStarPat = `${starPat}*?`;\nconst starStarPatLast = `${starPat}*?${starPatLast}?`;\n\nfunction escapeRegExp(string: string) {\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n}\n\n/**\n * Implement basic pattern matching that will allow users to do the simple\n * tests with * and **. If users want full complex pattern matching, then can\n * always use regex matching, or function validation.\n */\nexport default function pathToPattern(\n pattern: string,\n dirname: string,\n): RegExp {\n const parts = path.resolve(dirname, pattern).split(path.sep);\n\n return new RegExp(\n [\n \"^\",\n ...parts.map((part, i) => {\n const last = i === parts.length - 1;\n\n // ** matches 0 or more path parts.\n if (part === \"**\") return last ? starStarPatLast : starStarPat;\n\n // * matches 1 path part.\n if (part === \"*\") return last ? starPatLast : starPat;\n\n // *.ext matches a wildcard with an extension.\n if (part.indexOf(\"*.\") === 0) {\n return (\n substitution + escapeRegExp(part.slice(1)) + (last ? endSep : sep)\n );\n }\n\n // Otherwise match the pattern text.\n return escapeRegExp(part) + (last ? endSep : sep);\n }),\n ].join(\"\"),\n );\n}\n","import { finalize } from \"./helpers/deep-array.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type { PluginObject } from \"./validation/plugins.ts\";\n\nexport default class Plugin {\n key: string | undefined | null;\n manipulateOptions?: (options: unknown, parserOpts: unknown) => void;\n post?: PluginObject[\"post\"];\n pre?: PluginObject[\"pre\"];\n visitor: PluginObject[\"visitor\"];\n\n parserOverride?: Function;\n generatorOverride?: Function;\n\n options: object;\n\n externalDependencies: ReadonlyDeepArray;\n\n constructor(\n plugin: PluginObject,\n options: object,\n key?: string,\n externalDependencies: ReadonlyDeepArray = finalize([]),\n ) {\n this.key = plugin.name || key;\n\n this.manipulateOptions = plugin.manipulateOptions;\n this.post = plugin.post;\n this.pre = plugin.pre;\n this.visitor = plugin.visitor || {};\n this.parserOverride = plugin.parserOverride;\n this.generatorOverride = plugin.generatorOverride;\n\n this.options = options;\n this.externalDependencies = externalDependencies;\n }\n}\n","import gensync from \"gensync\";\n\nimport type { Handler } from \"gensync\";\n\nimport type {\n OptionsAndDescriptors,\n UnloadedDescriptor,\n} from \"./config-descriptors.ts\";\n\n// todo: Use flow enums when @babel/transform-flow-types supports it\nexport const ChainFormatter = {\n Programmatic: 0,\n Config: 1,\n};\n\ntype PrintableConfig = {\n content: OptionsAndDescriptors;\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter];\n callerName: string | undefined | null;\n filepath: string | undefined | null;\n index: number | undefined | null;\n envName: string | undefined | null;\n};\n\nconst Formatter = {\n title(\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n callerName?: string | null,\n filepath?: string | null,\n ): string {\n let title = \"\";\n if (type === ChainFormatter.Programmatic) {\n title = \"programmatic options\";\n if (callerName) {\n title += \" from \" + callerName;\n }\n } else {\n title = \"config \" + filepath;\n }\n return title;\n },\n loc(index?: number | null, envName?: string | null): string {\n let loc = \"\";\n if (index != null) {\n loc += `.overrides[${index}]`;\n }\n if (envName != null) {\n loc += `.env[\"${envName}\"]`;\n }\n return loc;\n },\n\n *optionsAndDescriptors(opt: OptionsAndDescriptors) {\n const content = { ...opt.options };\n // overrides and env will be printed as separated config items\n delete content.overrides;\n delete content.env;\n // resolve to descriptors\n const pluginDescriptors = [...(yield* opt.plugins())];\n if (pluginDescriptors.length) {\n content.plugins = pluginDescriptors.map(d => descriptorToConfig(d));\n }\n const presetDescriptors = [...(yield* opt.presets())];\n if (presetDescriptors.length) {\n content.presets = [...presetDescriptors].map(d => descriptorToConfig(d));\n }\n return JSON.stringify(content, undefined, 2);\n },\n};\n\nfunction descriptorToConfig(\n d: UnloadedDescriptor,\n): object | string | [string, unknown] | [string, unknown, string] {\n let name: object | string = d.file?.request;\n if (name == null) {\n if (typeof d.value === \"object\") {\n name = d.value;\n } else if (typeof d.value === \"function\") {\n // If the unloaded descriptor is a function, i.e. `plugins: [ require(\"my-plugin\") ]`,\n // we print the first 50 characters of the function source code and hopefully we can see\n // `name: 'my-plugin'` in the source\n name = `[Function: ${d.value.toString().slice(0, 50)} ... ]`;\n }\n }\n if (name == null) {\n name = \"[Unknown]\";\n }\n if (d.options === undefined) {\n return name;\n } else if (d.name == null) {\n return [name, d.options];\n } else {\n return [name, d.options, d.name];\n }\n}\n\nexport class ConfigPrinter {\n _stack: Array = [];\n configure(\n enabled: boolean,\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n {\n callerName,\n filepath,\n }: {\n callerName?: string;\n filepath?: string;\n },\n ) {\n if (!enabled) return () => {};\n return (\n content: OptionsAndDescriptors,\n index?: number | null,\n envName?: string | null,\n ) => {\n this._stack.push({\n type,\n callerName,\n filepath,\n content,\n index,\n envName,\n });\n };\n }\n static *format(config: PrintableConfig): Handler {\n let title = Formatter.title(\n config.type,\n config.callerName,\n config.filepath,\n );\n const loc = Formatter.loc(config.index, config.envName);\n if (loc) title += ` ${loc}`;\n const content = yield* Formatter.optionsAndDescriptors(config.content);\n return `${title}\\n${content}`;\n }\n\n *output(): Handler {\n if (this._stack.length === 0) return \"\";\n const configs = yield* gensync.all(\n this._stack.map(s => ConfigPrinter.format(s)),\n );\n return configs.join(\"\\n\\n\");\n }\n}\n","import type { ValidatedOptions } from \"./validation/options.ts\";\nimport getTargets, {\n type InputTargets,\n} from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nexport function resolveBrowserslistConfigFile(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n browserslistConfigFile: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n configFilePath: string,\n): string | void {\n return undefined;\n}\n\nexport function resolveTargets(\n options: ValidatedOptions,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n root: string,\n): Targets {\n const optTargets = options.targets;\n let targets: InputTargets;\n\n if (typeof optTargets === \"string\" || Array.isArray(optTargets)) {\n targets = { browsers: optTargets };\n } else if (optTargets) {\n if (\"esmodules\" in optTargets) {\n targets = { ...optTargets, esmodules: \"intersect\" };\n } else {\n // https://github.com/microsoft/TypeScript/issues/17002\n targets = optTargets as InputTargets;\n }\n }\n\n return getTargets(targets, {\n ignoreBrowserslistConfig: true,\n browserslistEnv: options.browserslistEnv,\n });\n}\n","import type {\n ValidatedOptions,\n NormalizedOptions,\n} from \"./validation/options.ts\";\n\nexport function mergeOptions(\n target: ValidatedOptions,\n source: ValidatedOptions | NormalizedOptions,\n): void {\n for (const k of Object.keys(source)) {\n if (\n (k === \"parserOpts\" || k === \"generatorOpts\" || k === \"assumptions\") &&\n source[k]\n ) {\n const parserOpts = source[k];\n const targetObj = target[k] || (target[k] = {});\n mergeDefaultFields(targetObj, parserOpts);\n } else {\n //@ts-expect-error k must index source\n const val = source[k];\n //@ts-expect-error assigning source to target\n if (val !== undefined) target[k] = val as any;\n }\n }\n}\n\nfunction mergeDefaultFields(target: T, source: T) {\n for (const k of Object.keys(source) as (keyof T)[]) {\n const val = source[k];\n if (val !== undefined) target[k] = val;\n }\n}\n\nexport function isIterableIterator(value: any): value is IterableIterator {\n return (\n !!value &&\n typeof value.next === \"function\" &&\n typeof value[Symbol.iterator] === \"function\"\n );\n}\n","import {\n isBrowsersQueryValid,\n TargetNames,\n} from \"@babel/helper-compilation-targets\";\n\nimport type {\n ConfigFileSearch,\n BabelrcSearch,\n IgnoreList,\n IgnoreItem,\n PluginList,\n PluginItem,\n PluginTarget,\n ConfigApplicableTest,\n SourceMapsOption,\n SourceTypeOption,\n CompactOption,\n RootInputSourceMapOption,\n NestingPath,\n CallerMetadata,\n RootMode,\n TargetsListOrObject,\n AssumptionName,\n} from \"./options.ts\";\n\nimport { assumptionsNames } from \"./options.ts\";\n\nexport type { RootPath } from \"./options.ts\";\n\nexport type ValidatorSet = {\n [name: string]: Validator;\n};\n\nexport type Validator = (loc: OptionPath, value: unknown) => T;\n\nexport function msg(loc: NestingPath | GeneralPath): string {\n switch (loc.type) {\n case \"root\":\n return ``;\n case \"env\":\n return `${msg(loc.parent)}.env[\"${loc.name}\"]`;\n case \"overrides\":\n return `${msg(loc.parent)}.overrides[${loc.index}]`;\n case \"option\":\n return `${msg(loc.parent)}.${loc.name}`;\n case \"access\":\n return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`;\n default:\n // @ts-expect-error should not happen when code is type checked\n throw new Error(`Assertion failure: Unknown type ${loc.type}`);\n }\n}\n\nexport function access(loc: GeneralPath, name: string | number): AccessPath {\n return {\n type: \"access\",\n name,\n parent: loc,\n };\n}\n\nexport type OptionPath = Readonly<{\n type: \"option\";\n name: string;\n parent: NestingPath;\n}>;\ntype AccessPath = Readonly<{\n type: \"access\";\n name: string | number;\n parent: GeneralPath;\n}>;\ntype GeneralPath = OptionPath | AccessPath;\n\nexport function assertRootMode(\n loc: OptionPath,\n value: unknown,\n): RootMode | void {\n if (\n value !== undefined &&\n value !== \"root\" &&\n value !== \"upward\" &&\n value !== \"upward-optional\"\n ) {\n throw new Error(\n `${msg(loc)} must be a \"root\", \"upward\", \"upward-optional\" or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceMaps(\n loc: OptionPath,\n value: unknown,\n): SourceMapsOption | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n value !== \"inline\" &&\n value !== \"both\"\n ) {\n throw new Error(\n `${msg(loc)} must be a boolean, \"inline\", \"both\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCompact(\n loc: OptionPath,\n value: unknown,\n): CompactOption | void {\n if (value !== undefined && typeof value !== \"boolean\" && value !== \"auto\") {\n throw new Error(`${msg(loc)} must be a boolean, \"auto\", or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceType(\n loc: OptionPath,\n value: unknown,\n): SourceTypeOption | void {\n if (\n value !== undefined &&\n value !== \"module\" &&\n value !== \"script\" &&\n value !== \"unambiguous\"\n ) {\n throw new Error(\n `${msg(loc)} must be \"module\", \"script\", \"unambiguous\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCallerMetadata(\n loc: OptionPath,\n value: unknown,\n): CallerMetadata | undefined {\n const obj = assertObject(loc, value);\n if (obj) {\n if (typeof obj.name !== \"string\") {\n throw new Error(\n `${msg(loc)} set but does not contain \"name\" property string`,\n );\n }\n\n for (const prop of Object.keys(obj)) {\n const propLoc = access(loc, prop);\n const value = obj[prop];\n if (\n value != null &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n typeof value !== \"number\"\n ) {\n // NOTE(logan): I'm limiting the type here so that we can guarantee that\n // the \"caller\" value will serialize to JSON nicely. We can always\n // allow more complex structures later though.\n throw new Error(\n `${msg(\n propLoc,\n )} must be null, undefined, a boolean, a string, or a number.`,\n );\n }\n }\n }\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n\nexport function assertInputSourceMap(\n loc: OptionPath,\n value: unknown,\n): RootInputSourceMapOption {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n (typeof value !== \"object\" || !value)\n ) {\n throw new Error(`${msg(loc)} must be a boolean, object, or undefined`);\n }\n return value as RootInputSourceMapOption;\n}\n\nexport function assertString(loc: GeneralPath, value: unknown): string | void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`${msg(loc)} must be a string, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertFunction(\n loc: GeneralPath,\n value: unknown,\n): Function | void {\n if (value !== undefined && typeof value !== \"function\") {\n throw new Error(`${msg(loc)} must be a function, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBoolean(\n loc: GeneralPath,\n value: unknown,\n): boolean | void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new Error(`${msg(loc)} must be a boolean, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertObject(\n loc: GeneralPath,\n value: unknown,\n): { readonly [key: string]: unknown } | void {\n if (\n value !== undefined &&\n (typeof value !== \"object\" || Array.isArray(value) || !value)\n ) {\n throw new Error(`${msg(loc)} must be an object, or undefined`);\n }\n // @ts-expect-error todo(flow->ts) value is still typed as unknown, also assert function typically should not return a value\n return value;\n}\n\nexport function assertArray(\n loc: GeneralPath,\n value: Array | undefined | null,\n): ReadonlyArray | undefined | null {\n if (value != null && !Array.isArray(value)) {\n throw new Error(`${msg(loc)} must be an array, or undefined`);\n }\n return value;\n}\n\nexport function assertIgnoreList(\n loc: OptionPath,\n value: unknown[] | undefined,\n): IgnoreList | void {\n const arr = assertArray(loc, value);\n arr?.forEach((item, i) => assertIgnoreItem(access(loc, i), item));\n // @ts-expect-error todo(flow->ts)\n return arr;\n}\nfunction assertIgnoreItem(loc: GeneralPath, value: unknown): IgnoreItem {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"function\" &&\n !(value instanceof RegExp)\n ) {\n throw new Error(\n `${msg(\n loc,\n )} must be an array of string/Function/RegExp values, or undefined`,\n );\n }\n return value as IgnoreItem;\n}\n\nexport function assertConfigApplicableTest(\n loc: OptionPath,\n value: unknown,\n): ConfigApplicableTest | void {\n if (value === undefined) {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a string/Function/RegExp, or an array of those`,\n );\n }\n return value as ConfigApplicableTest;\n}\n\nfunction checkValidTest(value: unknown): value is string | Function | RegExp {\n return (\n typeof value === \"string\" ||\n typeof value === \"function\" ||\n value instanceof RegExp\n );\n}\n\nexport function assertConfigFileSearch(\n loc: OptionPath,\n value: unknown,\n): ConfigFileSearch | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\"\n ) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string, ` +\n `got ${JSON.stringify(value)}`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBabelrcSearch(\n loc: OptionPath,\n value: unknown,\n): BabelrcSearch | void {\n if (value === undefined || typeof value === \"boolean\") {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` +\n `or an array of those, got ${JSON.stringify(value as any)}`,\n );\n }\n return value as BabelrcSearch;\n}\n\nexport function assertPluginList(\n loc: OptionPath,\n value: unknown[] | null | undefined,\n): PluginList | void {\n const arr = assertArray(loc, value);\n if (arr) {\n // Loop instead of using `.map` in order to preserve object identity\n // for plugin array for use during config chain processing.\n arr.forEach((item, i) => assertPluginItem(access(loc, i), item));\n }\n return arr as any;\n}\nfunction assertPluginItem(loc: GeneralPath, value: unknown): PluginItem {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n throw new Error(`${msg(loc)} must include an object`);\n }\n\n if (value.length > 3) {\n throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`);\n }\n\n assertPluginTarget(access(loc, 0), value[0]);\n\n if (value.length > 1) {\n const opts = value[1];\n if (\n opts !== undefined &&\n opts !== false &&\n (typeof opts !== \"object\" || Array.isArray(opts) || opts === null)\n ) {\n throw new Error(\n `${msg(access(loc, 1))} must be an object, false, or undefined`,\n );\n }\n }\n if (value.length === 3) {\n const name = value[2];\n if (name !== undefined && typeof name !== \"string\") {\n throw new Error(\n `${msg(access(loc, 2))} must be a string, or undefined`,\n );\n }\n }\n } else {\n assertPluginTarget(loc, value);\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\nfunction assertPluginTarget(loc: GeneralPath, value: unknown): PluginTarget {\n if (\n (typeof value !== \"object\" || !value) &&\n typeof value !== \"string\" &&\n typeof value !== \"function\"\n ) {\n throw new Error(`${msg(loc)} must be a string, object, function`);\n }\n return value;\n}\n\nexport function assertTargets(\n loc: GeneralPath,\n value: any,\n): TargetsListOrObject {\n if (isBrowsersQueryValid(value)) return value;\n\n if (typeof value !== \"object\" || !value || Array.isArray(value)) {\n throw new Error(\n `${msg(loc)} must be a string, an array of strings or an object`,\n );\n }\n\n const browsersLoc = access(loc, \"browsers\");\n const esmodulesLoc = access(loc, \"esmodules\");\n\n assertBrowsersList(browsersLoc, value.browsers);\n assertBoolean(esmodulesLoc, value.esmodules);\n\n for (const key of Object.keys(value)) {\n const val = value[key];\n const subLoc = access(loc, key);\n\n if (key === \"esmodules\") assertBoolean(subLoc, val);\n else if (key === \"browsers\") assertBrowsersList(subLoc, val);\n else if (!Object.hasOwn(TargetNames, key)) {\n const validTargets = Object.keys(TargetNames).join(\", \");\n throw new Error(\n `${msg(\n subLoc,\n )} is not a valid target. Supported targets are ${validTargets}`,\n );\n } else assertBrowserVersion(subLoc, val);\n }\n\n return value;\n}\n\nfunction assertBrowsersList(loc: GeneralPath, value: unknown) {\n if (value !== undefined && !isBrowsersQueryValid(value)) {\n throw new Error(\n `${msg(loc)} must be undefined, a string or an array of strings`,\n );\n }\n}\n\nfunction assertBrowserVersion(loc: GeneralPath, value: unknown) {\n if (typeof value === \"number\" && Math.round(value) === value) return;\n if (typeof value === \"string\") return;\n\n throw new Error(`${msg(loc)} must be a string or an integer number`);\n}\n\nexport function assertAssumptions(\n loc: GeneralPath,\n value: { [key: string]: unknown },\n): { [name: string]: boolean } | void {\n if (value === undefined) return;\n\n if (typeof value !== \"object\" || value === null) {\n throw new Error(`${msg(loc)} must be an object or undefined.`);\n }\n\n // todo(flow->ts): remove any\n let root: any = loc;\n do {\n root = root.parent;\n } while (root.type !== \"root\");\n const inPreset = root.source === \"preset\";\n\n for (const name of Object.keys(value)) {\n const subLoc = access(loc, name);\n if (!assumptionsNames.has(name as AssumptionName)) {\n throw new Error(`${msg(subLoc)} is not a supported assumption.`);\n }\n if (typeof value[name] !== \"boolean\") {\n throw new Error(`${msg(subLoc)} must be a boolean.`);\n }\n if (inPreset && value[name] === false) {\n throw new Error(\n `${msg(subLoc)} cannot be set to 'false' inside presets.`,\n );\n }\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n","import type { InputTargets, Targets } from \"@babel/helper-compilation-targets\";\n\nimport type { ConfigItem } from \"../item.ts\";\nimport type Plugin from \"../plugin.ts\";\n\nimport removed from \"./removed.ts\";\nimport {\n msg,\n access,\n assertString,\n assertBoolean,\n assertObject,\n assertArray,\n assertCallerMetadata,\n assertInputSourceMap,\n assertIgnoreList,\n assertPluginList,\n assertConfigApplicableTest,\n assertConfigFileSearch,\n assertBabelrcSearch,\n assertFunction,\n assertRootMode,\n assertSourceMaps,\n assertCompact,\n assertSourceType,\n assertTargets,\n assertAssumptions,\n} from \"./option-assertions.ts\";\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n} from \"./option-assertions.ts\";\nimport type { UnloadedDescriptor } from \"../config-descriptors.ts\";\nimport type { PluginAPI } from \"../helpers/config-api.ts\";\nimport type { ParserOptions } from \"@babel/parser\";\nimport type { GeneratorOptions } from \"@babel/generator\";\nimport ConfigError from \"../../errors/config-error.ts\";\n\nconst ROOT_VALIDATORS: ValidatorSet = {\n cwd: assertString as Validator,\n root: assertString as Validator,\n rootMode: assertRootMode as Validator,\n configFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"configFile\"]\n >,\n\n caller: assertCallerMetadata as Validator,\n filename: assertString as Validator,\n filenameRelative: assertString as Validator<\n ValidatedOptions[\"filenameRelative\"]\n >,\n code: assertBoolean as Validator,\n ast: assertBoolean as Validator,\n\n cloneInputAst: assertBoolean as Validator,\n\n envName: assertString as Validator,\n};\n\nconst BABELRC_VALIDATORS: ValidatorSet = {\n babelrc: assertBoolean as Validator,\n babelrcRoots: assertBabelrcSearch as Validator<\n ValidatedOptions[\"babelrcRoots\"]\n >,\n};\n\nconst NONPRESET_VALIDATORS: ValidatorSet = {\n extends: assertString as Validator,\n ignore: assertIgnoreList as Validator,\n only: assertIgnoreList as Validator,\n\n targets: assertTargets as Validator,\n browserslistConfigFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"browserslistConfigFile\"]\n >,\n browserslistEnv: assertString as Validator<\n ValidatedOptions[\"browserslistEnv\"]\n >,\n};\n\nconst COMMON_VALIDATORS: ValidatorSet = {\n // TODO: Should 'inputSourceMap' be moved to be a root-only option?\n // We may want a boolean-only version to be a common option, with the\n // object only allowed as a root config argument.\n inputSourceMap: assertInputSourceMap as Validator<\n ValidatedOptions[\"inputSourceMap\"]\n >,\n presets: assertPluginList as Validator,\n plugins: assertPluginList as Validator,\n passPerPreset: assertBoolean as Validator,\n assumptions: assertAssumptions as Validator,\n\n env: assertEnvSet as Validator,\n overrides: assertOverridesList as Validator,\n\n // We could limit these to 'overrides' blocks, but it's not clear why we'd\n // bother, when the ability to limit a config to a specific set of files\n // is a fairly general useful feature.\n test: assertConfigApplicableTest as Validator,\n include: assertConfigApplicableTest as Validator,\n exclude: assertConfigApplicableTest as Validator,\n\n retainLines: assertBoolean as Validator,\n comments: assertBoolean as Validator,\n shouldPrintComment: assertFunction as Validator<\n ValidatedOptions[\"shouldPrintComment\"]\n >,\n compact: assertCompact as Validator,\n minified: assertBoolean as Validator,\n auxiliaryCommentBefore: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentBefore\"]\n >,\n auxiliaryCommentAfter: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentAfter\"]\n >,\n sourceType: assertSourceType as Validator,\n wrapPluginVisitorMethod: assertFunction as Validator<\n ValidatedOptions[\"wrapPluginVisitorMethod\"]\n >,\n highlightCode: assertBoolean as Validator,\n sourceMaps: assertSourceMaps as Validator,\n sourceMap: assertSourceMaps as Validator,\n sourceFileName: assertString as Validator,\n sourceRoot: assertString as Validator,\n parserOpts: assertObject as Validator,\n generatorOpts: assertObject as Validator,\n};\nif (!process.env.BABEL_8_BREAKING) {\n Object.assign(COMMON_VALIDATORS, {\n getModuleId: assertFunction,\n moduleRoot: assertString,\n moduleIds: assertBoolean,\n moduleId: assertString,\n });\n}\n\nexport type InputOptions = ValidatedOptions;\n\nexport type ValidatedOptions = {\n cwd?: string;\n filename?: string;\n filenameRelative?: string;\n babelrc?: boolean;\n babelrcRoots?: BabelrcSearch;\n configFile?: ConfigFileSearch;\n root?: string;\n rootMode?: RootMode;\n code?: boolean;\n ast?: boolean;\n cloneInputAst?: boolean;\n inputSourceMap?: RootInputSourceMapOption;\n envName?: string;\n caller?: CallerMetadata;\n extends?: string;\n env?: EnvSet;\n ignore?: IgnoreList;\n only?: IgnoreList;\n overrides?: OverridesList;\n showIgnoredFiles?: boolean;\n // Generally verify if a given config object should be applied to the given file.\n test?: ConfigApplicableTest;\n include?: ConfigApplicableTest;\n exclude?: ConfigApplicableTest;\n presets?: PluginList;\n plugins?: PluginList;\n passPerPreset?: boolean;\n assumptions?: {\n [name: string]: boolean;\n };\n // browserslists-related options\n targets?: TargetsListOrObject;\n browserslistConfigFile?: ConfigFileSearch;\n browserslistEnv?: string;\n // Options for @babel/generator\n retainLines?: boolean;\n comments?: boolean;\n shouldPrintComment?: Function;\n compact?: CompactOption;\n minified?: boolean;\n auxiliaryCommentBefore?: string;\n auxiliaryCommentAfter?: string;\n // Parser\n sourceType?: SourceTypeOption;\n wrapPluginVisitorMethod?: Function;\n highlightCode?: boolean;\n // Sourcemap generation options.\n sourceMaps?: SourceMapsOption;\n sourceMap?: SourceMapsOption;\n sourceFileName?: string;\n sourceRoot?: string;\n // Deprecate top level parserOpts\n parserOpts?: ParserOptions;\n // Deprecate top level generatorOpts\n generatorOpts?: GeneratorOptions;\n};\n\nexport type NormalizedOptions = {\n readonly targets: Targets;\n} & Omit;\n\nexport type CallerMetadata = {\n // If 'caller' is specified, require that the name is given for debugging\n // messages.\n name: string;\n};\nexport type EnvSet = {\n [x: string]: T;\n};\nexport type IgnoreItem =\n | string\n | RegExp\n | ((\n path: string | undefined,\n context: { dirname: string; caller: CallerMetadata; envName: string },\n ) => unknown);\nexport type IgnoreList = ReadonlyArray;\n\nexport type PluginOptions = object | void | false;\nexport type PluginTarget = string | object | Function;\nexport type PluginItem =\n | ConfigItem\n | Plugin\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void];\nexport type PluginList = ReadonlyArray;\n\nexport type OverridesList = Array;\nexport type ConfigApplicableTest = IgnoreItem | Array;\n\nexport type ConfigFileSearch = string | boolean;\nexport type BabelrcSearch = boolean | IgnoreItem | IgnoreList;\nexport type SourceMapsOption = boolean | \"inline\" | \"both\";\nexport type SourceTypeOption = \"module\" | \"script\" | \"unambiguous\";\nexport type CompactOption = boolean | \"auto\";\nexport type RootInputSourceMapOption = object | boolean;\nexport type RootMode = \"root\" | \"upward\" | \"upward-optional\";\n\nexport type TargetsListOrObject =\n | Targets\n | InputTargets\n | InputTargets[\"browsers\"];\n\nexport type OptionsSource =\n | \"arguments\"\n | \"configfile\"\n | \"babelrcfile\"\n | \"extendsfile\"\n | \"preset\"\n | \"plugin\";\n\nexport type RootPath = Readonly<{\n type: \"root\";\n source: OptionsSource;\n}>;\n\ntype OverridesPath = Readonly<{\n type: \"overrides\";\n index: number;\n parent: RootPath;\n}>;\n\ntype EnvPath = Readonly<{\n type: \"env\";\n name: string;\n parent: RootPath | OverridesPath;\n}>;\n\nexport type NestingPath = RootPath | OverridesPath | EnvPath;\n\nconst knownAssumptions = [\n \"arrayLikeIsIterable\",\n \"constantReexports\",\n \"constantSuper\",\n \"enumerableModuleMeta\",\n \"ignoreFunctionLength\",\n \"ignoreToPrimitiveHint\",\n \"iterableIsArray\",\n \"mutableTemplateObject\",\n \"noClassCalls\",\n \"noDocumentAll\",\n \"noIncompleteNsImportDetection\",\n \"noNewArrows\",\n \"noUninitializedPrivateFieldAccess\",\n \"objectRestNoSymbols\",\n \"privateFieldsAsSymbols\",\n \"privateFieldsAsProperties\",\n \"pureGetters\",\n \"setClassMethods\",\n \"setComputedProperties\",\n \"setPublicClassFields\",\n \"setSpreadProperties\",\n \"skipForOfIteratorClosing\",\n \"superIsCallableConstructor\",\n] as const;\nexport type AssumptionName = (typeof knownAssumptions)[number];\nexport const assumptionsNames = new Set(knownAssumptions);\n\nfunction getSource(loc: NestingPath): OptionsSource {\n return loc.type === \"root\" ? loc.source : getSource(loc.parent);\n}\n\nexport function validate(\n type: OptionsSource,\n opts: any,\n filename?: string,\n): ValidatedOptions {\n try {\n return validateNested(\n {\n type: \"root\",\n source: type,\n },\n opts,\n );\n } catch (error) {\n const configError = new ConfigError(error.message, filename);\n // @ts-expect-error TODO: .code is not defined on ConfigError or Error\n if (error.code) configError.code = error.code;\n throw configError;\n }\n}\n\nfunction validateNested(loc: NestingPath, opts: { [key: string]: unknown }) {\n const type = getSource(loc);\n\n assertNoDuplicateSourcemap(opts);\n\n Object.keys(opts).forEach((key: string) => {\n const optLoc = {\n type: \"option\",\n name: key,\n parent: loc,\n } as const;\n\n if (type === \"preset\" && NONPRESET_VALIDATORS[key]) {\n throw new Error(`${msg(optLoc)} is not allowed in preset options`);\n }\n if (type !== \"arguments\" && ROOT_VALIDATORS[key]) {\n throw new Error(\n `${msg(optLoc)} is only allowed in root programmatic options`,\n );\n }\n if (\n type !== \"arguments\" &&\n type !== \"configfile\" &&\n BABELRC_VALIDATORS[key]\n ) {\n if (type === \"babelrcfile\" || type === \"extendsfile\") {\n throw new Error(\n `${msg(\n optLoc,\n )} is not allowed in .babelrc or \"extends\"ed files, only in root programmatic options, ` +\n `or babel.config.js/config file options`,\n );\n }\n\n throw new Error(\n `${msg(\n optLoc,\n )} is only allowed in root programmatic options, or babel.config.js/config file options`,\n );\n }\n\n const validator =\n COMMON_VALIDATORS[key] ||\n NONPRESET_VALIDATORS[key] ||\n BABELRC_VALIDATORS[key] ||\n ROOT_VALIDATORS[key] ||\n (throwUnknownError as Validator);\n\n validator(optLoc, opts[key]);\n });\n\n return opts;\n}\n\nfunction throwUnknownError(loc: OptionPath) {\n const key = loc.name;\n\n if (removed[key]) {\n const { message, version = 5 } = removed[key];\n\n throw new Error(\n `Using removed Babel ${version} option: ${msg(loc)} - ${message}`,\n );\n } else {\n const unknownOptErr = new Error(\n `Unknown option: ${msg(\n loc,\n )}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`,\n );\n // @ts-expect-error todo(flow->ts): consider creating something like BabelConfigError with code field in it\n unknownOptErr.code = \"BABEL_UNKNOWN_OPTION\";\n\n throw unknownOptErr;\n }\n}\n\nfunction assertNoDuplicateSourcemap(opts: any): void {\n if (Object.hasOwn(opts, \"sourceMap\") && Object.hasOwn(opts, \"sourceMaps\")) {\n throw new Error(\".sourceMap is an alias for .sourceMaps, cannot use both\");\n }\n}\n\nfunction assertEnvSet(\n loc: OptionPath,\n value: unknown,\n): void | EnvSet {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside of another .env block`);\n }\n const parent: RootPath | OverridesPath = loc.parent;\n\n const obj = assertObject(loc, value);\n if (obj) {\n // Validate but don't copy the .env object in order to preserve\n // object identity for use during config chain processing.\n for (const envName of Object.keys(obj)) {\n const env = assertObject(access(loc, envName), obj[envName]);\n if (!env) continue;\n\n const envLoc = {\n type: \"env\",\n name: envName,\n parent,\n } as const;\n validateNested(envLoc, env);\n }\n }\n return obj;\n}\n\nfunction assertOverridesList(\n loc: OptionPath,\n value: unknown[],\n): undefined | OverridesList {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside an .env block`);\n }\n if (loc.parent.type === \"overrides\") {\n throw new Error(`${msg(loc)} is not allowed inside an .overrides block`);\n }\n const parent: RootPath = loc.parent;\n\n const arr = assertArray(loc, value);\n if (arr) {\n for (const [index, item] of arr.entries()) {\n const objLoc = access(loc, index);\n const env = assertObject(objLoc, item);\n if (!env) throw new Error(`${msg(objLoc)} must be an object`);\n\n const overridesLoc = {\n type: \"overrides\",\n index,\n parent,\n } as const;\n validateNested(overridesLoc, env);\n }\n }\n return arr as OverridesList;\n}\n\nexport function checkNoUnwrappedItemOptionPairs(\n items: Array>,\n index: number,\n type: \"plugin\" | \"preset\",\n e: Error,\n): void {\n if (index === 0) return;\n\n const lastItem = items[index - 1];\n const thisItem = items[index];\n\n if (\n lastItem.file &&\n lastItem.options === undefined &&\n typeof thisItem.value === \"object\"\n ) {\n e.message +=\n `\\n- Maybe you meant to use\\n` +\n `\"${type}s\": [\\n [\"${lastItem.file.request}\", ${JSON.stringify(\n thisItem.value,\n undefined,\n 2,\n )}]\\n]\\n` +\n `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`;\n }\n}\n","import {\n assertString,\n assertFunction,\n assertObject,\n msg,\n} from \"./option-assertions.ts\";\n\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n RootPath,\n} from \"./option-assertions.ts\";\nimport type { ParserOptions } from \"@babel/parser\";\nimport type { Visitor } from \"@babel/traverse\";\nimport type { ValidatedOptions } from \"./options.ts\";\nimport type { File, PluginAPI, PluginPass } from \"../../index.ts\";\n\n// Note: The casts here are just meant to be static assertions to make sure\n// that the assertion functions actually assert that the value's type matches\n// the declared types.\nconst VALIDATORS: ValidatorSet = {\n name: assertString as Validator,\n manipulateOptions: assertFunction as Validator<\n PluginObject[\"manipulateOptions\"]\n >,\n pre: assertFunction as Validator,\n post: assertFunction as Validator,\n inherits: assertFunction as Validator,\n visitor: assertVisitorMap as Validator,\n\n parserOverride: assertFunction as Validator,\n generatorOverride: assertFunction as Validator<\n PluginObject[\"generatorOverride\"]\n >,\n};\n\nfunction assertVisitorMap(loc: OptionPath, value: unknown): Visitor {\n const obj = assertObject(loc, value);\n if (obj) {\n Object.keys(obj).forEach(prop => {\n if (prop !== \"_exploded\" && prop !== \"_verified\") {\n assertVisitorHandler(prop, obj[prop]);\n }\n });\n\n if (obj.enter || obj.exit) {\n throw new Error(\n `${msg(\n loc,\n )} cannot contain catch-all \"enter\" or \"exit\" handlers. Please target individual nodes.`,\n );\n }\n }\n return obj as Visitor;\n}\n\nfunction assertVisitorHandler(\n key: string,\n value: unknown,\n): asserts value is VisitorHandler {\n if (value && typeof value === \"object\") {\n Object.keys(value).forEach((handler: string) => {\n if (handler !== \"enter\" && handler !== \"exit\") {\n throw new Error(\n `.visitor[\"${key}\"] may only have .enter and/or .exit handlers.`,\n );\n }\n });\n } else if (typeof value !== \"function\") {\n throw new Error(`.visitor[\"${key}\"] must be a function`);\n }\n}\n\ntype VisitorHandler =\n | Function\n | {\n enter?: Function;\n exit?: Function;\n };\n\nexport type PluginObject = {\n name?: string;\n manipulateOptions?: (\n options: ValidatedOptions,\n parserOpts: ParserOptions,\n ) => void;\n pre?: (this: S, file: File) => void | Promise;\n post?: (this: S, file: File) => void | Promise;\n inherits?: (\n api: PluginAPI,\n options: unknown,\n dirname: string,\n ) => PluginObject;\n visitor?: Visitor;\n parserOverride?: Function;\n generatorOverride?: Function;\n};\n\nexport function validatePluginObject(obj: {\n [key: string]: unknown;\n}): PluginObject {\n const rootPath: RootPath = {\n type: \"root\",\n source: \"plugin\",\n };\n Object.keys(obj).forEach((key: string) => {\n const validator = VALIDATORS[key];\n\n if (validator) {\n const optLoc: OptionPath = {\n type: \"option\",\n name: key,\n parent: rootPath,\n };\n validator(optLoc, obj[key]);\n } else {\n const invalidPluginPropertyError = new Error(\n `.${key} is not a valid Plugin property`,\n );\n // @ts-expect-error todo(flow->ts) consider adding BabelConfigError with code field\n invalidPluginPropertyError.code = \"BABEL_UNKNOWN_PLUGIN_PROPERTY\";\n throw invalidPluginPropertyError;\n }\n });\n\n return obj as any;\n}\n","export default {\n auxiliaryComment: {\n message: \"Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`\",\n },\n blacklist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n breakConfig: {\n message: \"This is not a necessary option in Babel 6\",\n },\n experimental: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n externalHelpers: {\n message:\n \"Use the `external-helpers` plugin instead. \" +\n \"Check out http://babeljs.io/docs/plugins/external-helpers/\",\n },\n extra: {\n message: \"\",\n },\n jsxPragma: {\n message:\n \"use the `pragma` option in the `react-jsx` plugin. \" +\n \"Check out http://babeljs.io/docs/plugins/transform-react-jsx/\",\n },\n loose: {\n message:\n \"Specify the `loose` option for the relevant plugin you are using \" +\n \"or use a preset that sets the option.\",\n },\n metadataUsedHelpers: {\n message: \"Not required anymore as this is enabled by default\",\n },\n modules: {\n message:\n \"Use the corresponding module transform plugin in the `plugins` option. \" +\n \"Check out http://babeljs.io/docs/plugins/#modules\",\n },\n nonStandard: {\n message:\n \"Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. \" +\n \"Also check out the react preset http://babeljs.io/docs/plugins/preset-react/\",\n },\n optional: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n sourceMapName: {\n message:\n \"The `sourceMapName` option has been removed because it makes more sense for the \" +\n \"tooling that calls Babel to assign `map.file` themselves.\",\n },\n stage: {\n message:\n \"Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets\",\n },\n whitelist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n\n resolveModuleSource: {\n version: 6,\n message: \"Use `babel-plugin-module-resolver@3`'s 'resolvePath' options\",\n },\n metadata: {\n version: 6,\n message:\n \"Generated plugin metadata is always included in the output result\",\n },\n sourceMapTarget: {\n version: 6,\n message:\n \"The `sourceMapTarget` option has been removed because it makes more sense for the tooling \" +\n \"that calls Babel to assign `map.file` themselves.\",\n },\n} as { [name: string]: { version?: number; message: string } };\n","import {\n injectVirtualStackFrame,\n expectedError,\n} from \"./rewrite-stack-trace.ts\";\n\nexport default class ConfigError extends Error {\n constructor(message: string, filename?: string) {\n super(message);\n expectedError(this);\n if (filename) injectVirtualStackFrame(this, filename);\n }\n}\n","/**\n * This file uses the internal V8 Stack Trace API (https://v8.dev/docs/stack-trace-api)\n * to provide utilities to rewrite the stack trace.\n * When this API is not present, all the functions in this file become noops.\n *\n * beginHiddenCallStack(fn) and endHiddenCallStack(fn) wrap their parameter to\n * mark an hidden portion of the stack trace. The function passed to\n * beginHiddenCallStack is the first hidden function, while the function passed\n * to endHiddenCallStack is the first shown function.\n *\n * When an error is thrown _outside_ of the hidden zone, everything between\n * beginHiddenCallStack and endHiddenCallStack will not be shown.\n * If an error is thrown _inside_ the hidden zone, then the whole stack trace\n * will be visible: this is to avoid hiding real bugs.\n * However, if an error inside the hidden zone is expected, it can be marked\n * with the expectedError(error) function to keep the hidden frames hidden.\n *\n * Consider this call stack (the outer function is the bottom one):\n *\n * 1. a()\n * 2. endHiddenCallStack(b)()\n * 3. c()\n * 4. beginHiddenCallStack(d)()\n * 5. e()\n * 6. f()\n *\n * - If a() throws an error, then its shown call stack will be \"a, b, e, f\"\n * - If b() throws an error, then its shown call stack will be \"b, e, f\"\n * - If c() throws an expected error, then its shown call stack will be \"e, f\"\n * - If c() throws an unexpected error, then its shown call stack will be \"c, d, e, f\"\n * - If d() throws an expected error, then its shown call stack will be \"e, f\"\n * - If d() throws an unexpected error, then its shown call stack will be \"d, e, f\"\n * - If e() throws an error, then its shown call stack will be \"e, f\"\n *\n * Additionally, an error can inject additional \"virtual\" stack frames using the\n * injectVirtualStackFrame(error, filename) function: those are injected as a\n * replacement of the hidden frames.\n * In the example above, if we called injectVirtualStackFrame(err, \"h\") and\n * injectVirtualStackFrame(err, \"i\") on the expected error thrown by c(), its\n * shown call stack would have been \"h, i, e, f\".\n * This can be useful, for example, to report config validation errors as if they\n * were directly thrown in the config file.\n */\n\nconst ErrorToString = Function.call.bind(Error.prototype.toString);\n\nconst SUPPORTED =\n !!Error.captureStackTrace &&\n Object.getOwnPropertyDescriptor(Error, \"stackTraceLimit\")?.writable === true;\n\nconst START_HIDING = \"startHiding - secret - don't use this - v1\";\nconst STOP_HIDING = \"stopHiding - secret - don't use this - v1\";\n\ntype CallSite = NodeJS.CallSite;\n\nconst expectedErrors = new WeakSet();\nconst virtualFrames = new WeakMap();\n\nfunction CallSite(filename: string): CallSite {\n // We need to use a prototype otherwise it breaks source-map-support's internals\n return Object.create({\n isNative: () => false,\n isConstructor: () => false,\n isToplevel: () => true,\n getFileName: () => filename,\n getLineNumber: () => undefined,\n getColumnNumber: () => undefined,\n getFunctionName: () => undefined,\n getMethodName: () => undefined,\n getTypeName: () => undefined,\n toString: () => filename,\n } as CallSite);\n}\n\nexport function injectVirtualStackFrame(error: Error, filename: string) {\n if (!SUPPORTED) return;\n\n let frames = virtualFrames.get(error);\n if (!frames) virtualFrames.set(error, (frames = []));\n frames.push(CallSite(filename));\n\n return error;\n}\n\nexport function expectedError(error: Error) {\n if (!SUPPORTED) return;\n expectedErrors.add(error);\n return error;\n}\n\nexport function beginHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n setupPrepareStackTrace();\n return fn(...args);\n },\n \"name\",\n { value: STOP_HIDING },\n );\n}\n\nexport function endHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n return fn(...args);\n },\n \"name\",\n { value: START_HIDING },\n );\n}\n\nfunction setupPrepareStackTrace() {\n // @ts-expect-error This function is a singleton\n setupPrepareStackTrace = () => {};\n\n const { prepareStackTrace = defaultPrepareStackTrace } = Error;\n\n // We add some extra frames to Error.stackTraceLimit, so that we can\n // always show some useful frames even after deleting ours.\n // STACK_TRACE_LIMIT_DELTA should be around the maximum expected number\n // of internal frames, and not too big because capturing the stack trace\n // is slow (this is why Error.stackTraceLimit does not default to Infinity!).\n // Increase it if needed.\n // However, we only do it if the user did not explicitly set it to 0.\n const MIN_STACK_TRACE_LIMIT = 50;\n Error.stackTraceLimit &&= Math.max(\n Error.stackTraceLimit,\n MIN_STACK_TRACE_LIMIT,\n );\n\n Error.prepareStackTrace = function stackTraceRewriter(err, trace) {\n let newTrace = [];\n\n const isExpected = expectedErrors.has(err);\n let status: \"showing\" | \"hiding\" | \"unknown\" = isExpected\n ? \"hiding\"\n : \"unknown\";\n for (let i = 0; i < trace.length; i++) {\n const name = trace[i].getFunctionName();\n if (name === START_HIDING) {\n status = \"hiding\";\n } else if (name === STOP_HIDING) {\n if (status === \"hiding\") {\n status = \"showing\";\n if (virtualFrames.has(err)) {\n newTrace.unshift(...virtualFrames.get(err));\n }\n } else if (status === \"unknown\") {\n // Unexpected internal error, show the full stack trace\n newTrace = trace;\n break;\n }\n } else if (status !== \"hiding\") {\n newTrace.push(trace[i]);\n }\n }\n\n return prepareStackTrace(err, newTrace);\n };\n}\n\nfunction defaultPrepareStackTrace(err: Error, trace: CallSite[]) {\n if (trace.length === 0) return ErrorToString(err);\n return `${ErrorToString(err)}\\n at ${trace.join(\"\\n at \")}`;\n}\n","import gensync, { type Gensync, type Handler, type Callback } from \"gensync\";\n\ntype MaybePromise = T | Promise;\n\nconst runGenerator: {\n sync(gen: Handler): Return;\n async(gen: Handler): Promise;\n errback(gen: Handler, cb: Callback): void;\n} = gensync(function* (item: Handler): Handler {\n return yield* item;\n});\n\n// This Gensync returns true if the current execution context is\n// asynchronous, otherwise it returns false.\nexport const isAsync = gensync({\n sync: () => false,\n errback: cb => cb(null, true),\n});\n\n// This function wraps any functions (which could be either synchronous or\n// asynchronous) with a Gensync. If the wrapped function returns a promise\n// but the current execution context is synchronous, it will throw the\n// provided error.\n// This is used to handle user-provided functions which could be asynchronous.\nexport function maybeAsync(\n fn: (...args: Args) => Return,\n message: string,\n): Gensync {\n return gensync({\n sync(...args) {\n const result = fn.apply(this, args);\n if (isThenable(result)) throw new Error(message);\n return result;\n },\n async(...args) {\n return Promise.resolve(fn.apply(this, args));\n },\n });\n}\n\nconst withKind = gensync({\n sync: cb => cb(\"sync\"),\n async: async cb => cb(\"async\"),\n}) as (cb: (kind: \"sync\" | \"async\") => MaybePromise) => Handler;\n\n// This function wraps a generator (or a Gensync) into another function which,\n// when called, will run the provided generator in a sync or async way, depending\n// on the execution context where this forwardAsync function is called.\n// This is useful, for example, when passing a callback to a function which isn't\n// aware of gensync, but it only knows about synchronous and asynchronous functions.\n// An example is cache.using, which being exposed to the user must be as simple as\n// possible:\n// yield* forwardAsync(gensyncFn, wrappedFn =>\n// cache.using(x => {\n// // Here we don't know about gensync. wrappedFn is a\n// // normal sync or async function\n// return wrappedFn(x);\n// })\n// )\nexport function forwardAsync(\n action: (...args: Args) => Handler,\n cb: (\n adapted: (...args: Args) => MaybePromise,\n ) => MaybePromise,\n): Handler {\n const g = gensync(action);\n return withKind(kind => {\n const adapted = g[kind];\n return cb(adapted);\n });\n}\n\n// If the given generator is executed asynchronously, the first time that it\n// is paused (i.e. When it yields a gensync generator which can't be run\n// synchronously), call the \"firstPause\" callback.\nexport const onFirstPause = gensync<\n [gen: Handler, firstPause: () => void],\n unknown\n>({\n name: \"onFirstPause\",\n arity: 2,\n sync: function (item) {\n return runGenerator.sync(item);\n },\n errback: function (item, firstPause, cb) {\n let completed = false;\n\n runGenerator.errback(item, (err, value) => {\n completed = true;\n cb(err, value);\n });\n\n if (!completed) {\n firstPause();\n }\n },\n}) as (gen: Handler, firstPause: () => void) => Handler;\n\n// Wait for the given promise to be resolved\nexport const waitFor = gensync({\n sync: x => x,\n async: async x => x,\n}) as (p: T | Promise) => Handler;\n\nexport function isThenable(val: any): val is PromiseLike {\n return (\n !!val &&\n (typeof val === \"object\" || typeof val === \"function\") &&\n !!val.then &&\n typeof val.then === \"function\"\n );\n}\n","import type { Handler } from \"gensync\";\n\nimport { isAsync, waitFor } from \"./async.ts\";\n\nexport function once(fn: () => Handler): () => Handler {\n let result: { ok: true; value: R } | { ok: false; value: unknown };\n let resultP: Promise;\n let promiseReferenced = false;\n return function* () {\n if (!result) {\n if (resultP) {\n promiseReferenced = true;\n return yield* waitFor(resultP);\n }\n\n if (!(yield* isAsync())) {\n try {\n result = { ok: true, value: yield* fn() };\n } catch (error) {\n result = { ok: false, value: error };\n }\n } else {\n let resolve: (result: R) => void, reject: (error: unknown) => void;\n resultP = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n try {\n result = { ok: true, value: yield* fn() };\n // Avoid keeping the promise around\n // now that we have the result.\n resultP = null;\n // We only resolve/reject the promise if it has been actually\n // referenced. If there are no listeners we can forget about it.\n // In the reject case, this avoid uncatchable unhandledRejection\n // events.\n if (promiseReferenced) resolve(result.value);\n } catch (error) {\n result = { ok: false, value: error };\n resultP = null;\n if (promiseReferenced) reject(error);\n }\n }\n }\n\n if (result.ok) return result.value;\n else throw result.value;\n };\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig, { type InputOptions } from \"./config/index.ts\";\nimport parser, { type ParseResult } from \"./parser/index.ts\";\nimport normalizeOptions from \"./transformation/normalize-opts.ts\";\nimport type { ValidatedOptions } from \"./config/validation/options.ts\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\ntype FileParseCallback = {\n (err: Error, ast: null): void;\n (err: null, ast: ParseResult | null): void;\n};\n\ntype Parse = {\n (code: string, callback: FileParseCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileParseCallback,\n ): void;\n (code: string, opts?: InputOptions | null): ParseResult | null;\n};\n\nconst parseRunner = gensync(function* parse(\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config = yield* loadConfig(opts);\n\n if (config === null) {\n return null;\n }\n\n return yield* parser(config.passes, normalizeOptions(config), code);\n});\n\nexport const parse: Parse = function parse(\n code,\n opts?,\n callback?: FileParseCallback,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n opts = undefined as ValidatedOptions;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'parse' function expects a callback. If you need to call it synchronously, please use 'parseSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'parse' function will expect a callback. If you need to call it synchronously, please use 'parseSync'.\",\n // );\n return beginHiddenCallStack(parseRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(parseRunner.errback)(code, opts, callback);\n};\n\nexport function parseSync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.sync)(...args);\n}\nexport function parseAsync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.async)(...args);\n}\n","import type { Handler } from \"gensync\";\nimport { parse, type File as ParseResult } from \"@babel/parser\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport generateMissingPluginMessage from \"./util/missing-plugin-helper.ts\";\nimport type { PluginPasses } from \"../config/index.ts\";\n\nexport type { ParseResult };\n\nexport default function* parser(\n pluginPasses: PluginPasses,\n { parserOpts, highlightCode = true, filename = \"unknown\" }: any,\n code: string,\n): Handler {\n try {\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { parserOverride } = plugin;\n if (parserOverride) {\n const ast = parserOverride(code, parserOpts, parse);\n\n if (ast !== undefined) results.push(ast);\n }\n }\n }\n\n if (results.length === 0) {\n return parse(code, parserOpts);\n } else if (results.length === 1) {\n // If we want to allow async parsers\n yield* [];\n if (typeof results[0].then === \"function\") {\n throw new Error(\n `You appear to be using an async parser plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n return results[0];\n }\n // TODO: Add an error code\n throw new Error(\"More than one plugin attempted to override parsing.\");\n } catch (err) {\n if (err.code === \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\") {\n err.message +=\n \"\\nConsider renaming the file to '.mjs', or setting sourceType:module \" +\n \"or sourceType:unambiguous in your Babel config for this file.\";\n // err.code will be changed to BABEL_PARSE_ERROR later.\n }\n\n const { loc, missingPlugin } = err;\n if (loc) {\n const codeFrame = codeFrameColumns(\n code,\n {\n start: {\n line: loc.line,\n column: loc.column + 1,\n },\n },\n {\n highlightCode,\n },\n );\n if (missingPlugin) {\n err.message =\n `${filename}: ` +\n generateMissingPluginMessage(\n missingPlugin[0],\n loc,\n codeFrame,\n filename,\n );\n } else {\n err.message = `${filename}: ${err.message}\\n\\n` + codeFrame;\n }\n err.code = \"BABEL_PARSE_ERROR\";\n }\n throw err;\n }\n}\n","const pluginNameMap: Record<\n string,\n Partial>>\n> = {\n asyncDoExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-async-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions\",\n },\n },\n decimal: {\n syntax: {\n name: \"@babel/plugin-syntax-decimal\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decimal\",\n },\n },\n decorators: {\n syntax: {\n name: \"@babel/plugin-syntax-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators\",\n },\n transform: {\n name: \"@babel/plugin-proposal-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators\",\n },\n },\n doExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-do-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions\",\n },\n },\n exportDefaultFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-default-from\",\n },\n transform: {\n name: \"@babel/plugin-proposal-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from\",\n },\n },\n flow: {\n syntax: {\n name: \"@babel/plugin-syntax-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-flow\",\n },\n transform: {\n name: \"@babel/preset-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-flow\",\n },\n },\n functionBind: {\n syntax: {\n name: \"@babel/plugin-syntax-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-bind\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-bind\",\n },\n },\n functionSent: {\n syntax: {\n name: \"@babel/plugin-syntax-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-sent\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent\",\n },\n },\n jsx: {\n syntax: {\n name: \"@babel/plugin-syntax-jsx\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx\",\n },\n transform: {\n name: \"@babel/preset-react\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-react\",\n },\n },\n pipelineOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-pipeline-operator\",\n },\n transform: {\n name: \"@babel/plugin-proposal-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator\",\n },\n },\n recordAndTuple: {\n syntax: {\n name: \"@babel/plugin-syntax-record-and-tuple\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-record-and-tuple\",\n },\n },\n throwExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-throw-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-throw-expressions\",\n },\n },\n typescript: {\n syntax: {\n name: \"@babel/plugin-syntax-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-typescript\",\n },\n transform: {\n name: \"@babel/preset-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-typescript\",\n },\n },\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n // TODO: This plugins are now supported by default by @babel/parser.\n Object.assign(pluginNameMap, {\n asyncGenerators: {\n syntax: {\n name: \"@babel/plugin-syntax-async-generators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-generators\",\n },\n transform: {\n name: \"@babel/plugin-transform-async-generator-functions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-async-generator-functions\",\n },\n },\n classProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateMethods: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-methods\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-methods\",\n },\n },\n classStaticBlock: {\n syntax: {\n name: \"@babel/plugin-syntax-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-static-block\",\n },\n },\n dynamicImport: {\n syntax: {\n name: \"@babel/plugin-syntax-dynamic-import\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import\",\n },\n },\n exportNamespaceFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from\",\n },\n transform: {\n name: \"@babel/plugin-transform-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-export-namespace-from\",\n },\n },\n // Will be removed\n importAssertions: {\n syntax: {\n name: \"@babel/plugin-syntax-import-assertions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions\",\n },\n },\n importAttributes: {\n syntax: {\n name: \"@babel/plugin-syntax-import-attributes\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-attributes\",\n },\n },\n importMeta: {\n syntax: {\n name: \"@babel/plugin-syntax-import-meta\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta\",\n },\n },\n logicalAssignment: {\n syntax: {\n name: \"@babel/plugin-syntax-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-logical-assignment-operators\",\n },\n transform: {\n name: \"@babel/plugin-transform-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-logical-assignment-operators\",\n },\n },\n moduleStringNames: {\n syntax: {\n name: \"@babel/plugin-syntax-module-string-names\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names\",\n },\n },\n numericSeparator: {\n syntax: {\n name: \"@babel/plugin-syntax-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator\",\n },\n transform: {\n name: \"@babel/plugin-transform-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-numeric-separator\",\n },\n },\n nullishCoalescingOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-nullish-coalescing-operator\",\n },\n transform: {\n name: \"@babel/plugin-transform-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-nullish-coalescing-opearator\",\n },\n },\n objectRestSpread: {\n syntax: {\n name: \"@babel/plugin-syntax-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-object-rest-spread\",\n },\n transform: {\n name: \"@babel/plugin-transform-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-object-rest-spread\",\n },\n },\n optionalCatchBinding: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-catch-binding\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-catch-binding\",\n },\n },\n optionalChaining: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-chaining\",\n },\n },\n privateIn: {\n syntax: {\n name: \"@babel/plugin-syntax-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-property-in-object\",\n },\n },\n regexpUnicodeSets: {\n syntax: {\n name: \"@babel/plugin-syntax-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-unicode-sets-regex/README.md\",\n },\n transform: {\n name: \"@babel/plugin-transform-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-proposalunicode-sets-regex/README.md\",\n },\n },\n });\n}\n\nconst getNameURLCombination = ({ name, url }: { name: string; url: string }) =>\n `${name} (${url})`;\n\n/*\nReturns a string of the format:\nSupport for the experimental syntax [@babel/parser plugin name] isn't currently enabled ([loc]):\n\n[code frame]\n\nAdd [npm package name] ([url]) to the 'plugins' section of your Babel config\nto enable [parsing|transformation].\n*/\nexport default function generateMissingPluginMessage(\n missingPluginName: string,\n loc: {\n line: number;\n column: number;\n },\n codeFrame: string,\n filename: string,\n): string {\n let helpMessage =\n `Support for the experimental syntax '${missingPluginName}' isn't currently enabled ` +\n `(${loc.line}:${loc.column + 1}):\\n\\n` +\n codeFrame;\n const pluginInfo = pluginNameMap[missingPluginName];\n if (pluginInfo) {\n const { syntax: syntaxPlugin, transform: transformPlugin } = pluginInfo;\n if (syntaxPlugin) {\n const syntaxPluginInfo = getNameURLCombination(syntaxPlugin);\n if (transformPlugin) {\n const transformPluginInfo = getNameURLCombination(transformPlugin);\n const sectionType = transformPlugin.name.startsWith(\"@babel/plugin\")\n ? \"plugins\"\n : \"presets\";\n helpMessage += `\\n\\nAdd ${transformPluginInfo} to the '${sectionType}' section of your Babel config to enable transformation.\nIf you want to leave it as-is, add ${syntaxPluginInfo} to the 'plugins' section to enable parsing.`;\n } else {\n helpMessage +=\n `\\n\\nAdd ${syntaxPluginInfo} to the 'plugins' section of your Babel config ` +\n `to enable parsing.`;\n }\n }\n }\n\n const msgFilename =\n filename === \"unknown\" ? \"\" : filename;\n helpMessage += `\n\nIf you already added the plugin for this syntax to your config, it's possible that your config \\\nisn't being loaded.\nYou can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded \\\nconfiguration:\n\\tnpx cross-env BABEL_SHOW_CONFIG_FOR=${msgFilename} \nSee https://babeljs.io/docs/configuration#print-effective-configs for more info.\n`;\n return helpMessage;\n}\n","import * as helpers from \"@babel/helpers\";\nimport generator from \"@babel/generator\";\nimport template from \"@babel/template\";\nimport {\n arrayExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n cloneNode,\n conditionalExpression,\n exportNamedDeclaration,\n exportSpecifier,\n expressionStatement,\n functionExpression,\n identifier,\n memberExpression,\n objectExpression,\n program,\n stringLiteral,\n unaryExpression,\n variableDeclaration,\n variableDeclarator,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { Replacements } from \"@babel/template\";\n\n// Wrapped to avoid wasting time parsing this when almost no-one uses\n// build-external-helpers.\nconst buildUmdWrapper = (replacements: Replacements) =>\n template.statement`\n (function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === \"object\") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n `(replacements);\n\nfunction buildGlobal(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n const container = functionExpression(\n null,\n [identifier(\"global\")],\n blockStatement(body),\n );\n const tree = program([\n expressionStatement(\n callExpression(container, [\n // typeof global === \"undefined\" ? self : global\n conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", identifier(\"global\")),\n stringLiteral(\"undefined\"),\n ),\n identifier(\"self\"),\n identifier(\"global\"),\n ),\n ]),\n ),\n ]);\n\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(\n namespace,\n assignmentExpression(\n \"=\",\n memberExpression(identifier(\"global\"), namespace),\n objectExpression([]),\n ),\n ),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return tree;\n}\n\nfunction buildModule(allowlist?: Array) {\n const body: t.Statement[] = [];\n const refs = buildHelpers(body, null, allowlist);\n\n body.unshift(\n exportNamedDeclaration(\n null,\n Object.keys(refs).map(name => {\n return exportSpecifier(cloneNode(refs[name]), identifier(name));\n }),\n ),\n );\n\n return program(body, [], \"module\");\n}\n\nfunction buildUmd(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, identifier(\"global\")),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return program([\n buildUmdWrapper({\n FACTORY_PARAMETERS: identifier(\"global\"),\n BROWSER_ARGUMENTS: assignmentExpression(\n \"=\",\n memberExpression(identifier(\"root\"), namespace),\n objectExpression([]),\n ),\n COMMON_ARGUMENTS: identifier(\"exports\"),\n AMD_ARGUMENTS: arrayExpression([stringLiteral(\"exports\")]),\n FACTORY_BODY: body,\n UMD_ROOT: identifier(\"this\"),\n }),\n ]);\n}\n\nfunction buildVar(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, objectExpression([])),\n ]),\n );\n const tree = program(body);\n buildHelpers(body, namespace, allowlist);\n body.push(expressionStatement(namespace));\n return tree;\n}\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression,\n allowlist?: Array,\n): Record;\nfunction buildHelpers(\n body: t.Statement[],\n namespace: null,\n allowlist?: Array,\n): Record;\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression | null,\n allowlist?: Array,\n) {\n const getHelperReference = (name: string) => {\n return namespace\n ? memberExpression(namespace, identifier(name))\n : identifier(`_${name}`);\n };\n\n const refs: { [key: string]: t.Identifier | t.MemberExpression } = {};\n helpers.list.forEach(function (name) {\n if (allowlist && !allowlist.includes(name)) return;\n\n const ref = (refs[name] = getHelperReference(name));\n\n const { nodes } = helpers.get(\n name,\n getHelperReference,\n namespace ? null : `_${name}`,\n [],\n namespace\n ? (ast, exportName, mapExportBindingAssignments) => {\n mapExportBindingAssignments(node =>\n assignmentExpression(\"=\", ref, node),\n );\n ast.body.push(\n expressionStatement(\n assignmentExpression(\"=\", ref, identifier(exportName)),\n ),\n );\n }\n : null,\n );\n\n body.push(...nodes);\n });\n return refs;\n}\nexport default function (\n allowlist?: Array,\n outputType: \"global\" | \"module\" | \"umd\" | \"var\" = \"global\",\n) {\n let tree: t.Program;\n\n const build = {\n global: buildGlobal,\n module: buildModule,\n umd: buildUmd,\n var: buildVar,\n }[outputType];\n\n if (build) {\n tree = build(allowlist);\n } else {\n throw new Error(`Unsupported output type ${outputType}`);\n }\n\n return generator(tree).code;\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\nimport type * as t from \"@babel/types\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\ntype AstRoot = t.File | t.Program;\n\ntype TransformFromAst = {\n (ast: AstRoot, code: string, callback: FileResultCallback): void;\n (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (ast: AstRoot, code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformFromAstRunner = gensync(function* (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n if (!ast) throw new Error(\"No AST given\");\n\n return yield* run(config, code, ast);\n});\n\nexport const transformFromAst: TransformFromAst = function transformFromAst(\n ast,\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transformFromAst' function expects a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transformFromAst' function will expect a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n // );\n return beginHiddenCallStack(transformFromAstRunner.sync)(ast, code, opts);\n }\n }\n\n beginHiddenCallStack(transformFromAstRunner.errback)(\n ast,\n code,\n opts,\n callback,\n );\n};\n\nexport function transformFromAstSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.sync)(...args);\n}\n\nexport function transformFromAstAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.async)(...args);\n}\n","// duplicated from transform-file so we do not have to import anything here\ntype TransformFile = {\n (filename: string, callback: (error: Error, file: null) => void): void;\n (\n filename: string,\n opts: any,\n callback: (error: Error, file: null) => void,\n ): void;\n};\n\nexport const transformFile: TransformFile = function transformFile(\n filename,\n opts,\n callback?: (error: Error, file: null) => void,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n }\n\n callback(new Error(\"Transforming files is not supported in browsers\"), null);\n};\n\nexport function transformFileSync(): never {\n throw new Error(\"Transforming files is not supported in browsers\");\n}\n\nexport function transformFileAsync() {\n return Promise.reject(\n new Error(\"Transforming files is not supported in browsers\"),\n );\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nexport type { FileResult } from \"./transformation/index.ts\";\n\ntype Transform = {\n (code: string, callback: FileResultCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformRunner = gensync(function* transform(\n code: string,\n opts?: InputOptions,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n return yield* run(config, code);\n});\n\nexport const transform: Transform = function transform(\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transform' function expects a callback. If you need to call it synchronously, please use 'transformSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transform' function will expect a callback. If you need to call it synchronously, please use 'transformSync'.\",\n // );\n return beginHiddenCallStack(transformRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(transformRunner.errback)(code, opts, callback);\n};\n\nexport function transformSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.sync)(...args);\n}\nexport function transformAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.async)(...args);\n}\n","import traverse from \"@babel/traverse\";\nimport type { Statement } from \"@babel/types\";\nimport type { PluginObject } from \"../config/index.ts\";\nimport Plugin from \"../config/plugin.ts\";\n\nlet LOADED_PLUGIN: Plugin | void;\n\nconst blockHoistPlugin: PluginObject = {\n /**\n * [Please add a description.]\n *\n * Priority:\n *\n * - 0 We want this to be at the **very** bottom\n * - 1 Default node position\n * - 2 Priority over normal nodes\n * - 3 We want this to be at the **very** top\n * - 4 Reserved for the helpers used to implement module imports.\n */\n\n name: \"internal.blockHoist\",\n\n visitor: {\n Block: {\n exit({ node }) {\n node.body = performHoisting(node.body);\n },\n },\n SwitchCase: {\n exit({ node }) {\n // In case statements, hoisting is difficult to perform correctly due to\n // functions that are declared and referenced in different blocks.\n // Nevertheless, hoisting the statements *inside* of each case should at\n // least mitigate the failure cases.\n node.consequent = performHoisting(node.consequent);\n },\n },\n },\n};\n\nfunction performHoisting(body: Statement[]): Statement[] {\n // Largest SMI\n let max = 2 ** 30 - 1;\n let hasChange = false;\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n if (p > max) {\n hasChange = true;\n break;\n }\n max = p;\n }\n if (!hasChange) return body;\n\n // My kingdom for a stable sort!\n return stableSort(body.slice());\n}\n\nexport default function loadBlockHoistPlugin(): Plugin {\n if (!LOADED_PLUGIN) {\n // cache the loaded blockHoist plugin plugin\n LOADED_PLUGIN = new Plugin(\n {\n ...blockHoistPlugin,\n visitor: traverse.explode(blockHoistPlugin.visitor),\n },\n {},\n );\n }\n\n return LOADED_PLUGIN;\n}\n\nfunction priority(bodyNode: Statement & { _blockHoist?: number | true }) {\n const priority = bodyNode?._blockHoist;\n if (priority == null) return 1;\n if (priority === true) return 2;\n return priority;\n}\n\nfunction stableSort(body: Statement[]) {\n // By default, we use priorities of 0-4.\n const buckets = Object.create(null);\n\n // By collecting into buckets, we can guarantee a stable sort.\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n\n // In case some plugin is setting an unexpected priority.\n const bucket = buckets[p] || (buckets[p] = []);\n bucket.push(n);\n }\n\n // Sort our keys in descending order. Keys are unique, so we don't have to\n // worry about stability.\n const keys = Object.keys(buckets)\n .map(k => +k)\n .sort((a, b) => b - a);\n\n let index = 0;\n for (const key of keys) {\n const bucket = buckets[key];\n for (const n of bucket) {\n body[index++] = n;\n }\n }\n return body;\n}\n","import * as helpers from \"@babel/helpers\";\nimport { NodePath } from \"@babel/traverse\";\nimport type { HubInterface, Visitor, Scope } from \"@babel/traverse\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport traverse from \"@babel/traverse\";\nimport { cloneNode, interpreterDirective } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport semver from \"semver\";\n\nimport type { NormalizedFile } from \"../normalize-file.ts\";\n\n// @ts-expect-error This file is `any`\nimport * as babel7 from \"./babel-7-helpers.cjs\";\n\nconst errorVisitor: Visitor<{ loc: t.SourceLocation | null }> = {\n enter(path, state) {\n const loc = path.node.loc;\n if (loc) {\n state.loc = loc;\n path.stop();\n }\n },\n};\n\nexport default class File {\n _map: Map = new Map();\n opts: { [key: string]: any };\n declarations: { [key: string]: t.Identifier } = {};\n path: NodePath;\n ast: t.File;\n scope: Scope;\n metadata: { [key: string]: any } = {};\n code: string = \"\";\n inputMap: any;\n\n hub: HubInterface & { file: File } = {\n // keep it for the usage in babel-core, ex: path.hub.file.opts.filename\n file: this,\n getCode: () => this.code,\n getScope: () => this.scope,\n addHelper: this.addHelper.bind(this),\n buildError: this.buildCodeFrameError.bind(this),\n };\n\n constructor(options: any, { code, ast, inputMap }: NormalizedFile) {\n this.opts = options;\n this.code = code;\n this.ast = ast;\n this.inputMap = inputMap;\n\n this.path = NodePath.get({\n hub: this.hub,\n parentPath: null,\n parent: this.ast,\n container: this.ast,\n key: \"program\",\n }).setContext() as NodePath;\n this.scope = this.path.scope;\n }\n\n /**\n * Provide backward-compatible access to the interpreter directive handling\n * in Babel 6.x. If you are writing a plugin for Babel 7.x, it would be\n * best to use 'program.interpreter' directly.\n */\n get shebang(): string {\n const { interpreter } = this.path.node;\n return interpreter ? interpreter.value : \"\";\n }\n set shebang(value: string) {\n if (value) {\n this.path.get(\"interpreter\").replaceWith(interpreterDirective(value));\n } else {\n this.path.get(\"interpreter\").remove();\n }\n }\n\n set(key: unknown, val: unknown) {\n if (!process.env.BABEL_8_BREAKING) {\n if (key === \"helpersNamespace\") {\n throw new Error(\n \"Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility.\" +\n \"If you are using @babel/plugin-external-helpers you will need to use a newer \" +\n \"version than the one you currently have installed. \" +\n \"If you have your own implementation, you'll want to explore using 'helperGenerator' \" +\n \"alongside 'file.availableHelper()'.\",\n );\n }\n }\n\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n has(key: unknown): boolean {\n return this._map.has(key);\n }\n\n /**\n * Check if a given helper is available in @babel/core's helper list.\n *\n * This _also_ allows you to pass a Babel version specifically. If the\n * helper exists, but was not available for the full given range, it will be\n * considered unavailable.\n */\n availableHelper(name: string, versionRange?: string | null): boolean {\n let minVersion;\n try {\n minVersion = helpers.minVersion(name);\n } catch (err) {\n if (err.code !== \"BABEL_HELPER_UNKNOWN\") throw err;\n\n return false;\n }\n\n if (typeof versionRange !== \"string\") return true;\n\n // semver.intersects() has some surprising behavior with comparing ranges\n // with pre-release versions. We add '^' to ensure that we are always\n // comparing ranges with ranges, which sidesteps this logic.\n // For example:\n //\n // semver.intersects(`<7.0.1`, \"7.0.0-beta.0\") // false - surprising\n // semver.intersects(`<7.0.1`, \"^7.0.0-beta.0\") // true - expected\n //\n // This is because the first falls back to\n //\n // semver.satisfies(\"7.0.0-beta.0\", `<7.0.1`) // false - surprising\n //\n // and this fails because a prerelease version can only satisfy a range\n // if it is a prerelease within the same major/minor/patch range.\n //\n // Note: If this is found to have issues, please also revisit the logic in\n // transform-runtime's definitions.js file.\n if (semver.valid(versionRange)) versionRange = `^${versionRange}`;\n\n if (process.env.BABEL_8_BREAKING) {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=9.0.0`, versionRange)\n );\n } else {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=8.0.0`, versionRange)\n );\n }\n }\n\n addHelper(name: string): t.Identifier {\n const declar = this.declarations[name];\n if (declar) return cloneNode(declar);\n\n const generator = this.get(\"helperGenerator\");\n if (generator) {\n const res = generator(name);\n if (res) return res;\n }\n\n // make sure that the helper exists\n helpers.minVersion(name);\n\n const uid = (this.declarations[name] =\n this.scope.generateUidIdentifier(name));\n\n const dependencies: { [key: string]: t.Identifier } = {};\n for (const dep of helpers.getDependencies(name)) {\n dependencies[dep] = this.addHelper(dep);\n }\n\n const { nodes, globals } = helpers.get(\n name,\n dep => dependencies[dep],\n uid.name,\n Object.keys(this.scope.getAllBindings()),\n );\n\n globals.forEach(name => {\n if (this.path.scope.hasBinding(name, true /* noGlobals */)) {\n this.path.scope.rename(name);\n }\n });\n\n nodes.forEach(node => {\n // @ts-expect-error Fixme: document _compact node property\n node._compact = true;\n });\n\n const added = this.path.unshiftContainer(\"body\", nodes);\n // TODO: NodePath#unshiftContainer should automatically register new\n // bindings.\n for (const path of added) {\n if (path.isVariableDeclaration()) this.scope.registerDeclaration(path);\n }\n\n return uid;\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error: typeof Error = SyntaxError,\n ): Error {\n let loc = node?.loc;\n\n if (!loc && node) {\n const state: { loc?: t.SourceLocation | null } = {\n loc: null,\n };\n traverse(node, errorVisitor, this.scope, state);\n loc = state.loc;\n\n let txt =\n \"This is an error on an internal node. Probably an internal error.\";\n if (loc) txt += \" Location has been estimated.\";\n\n msg += ` (${txt})`;\n }\n\n if (loc) {\n const { highlightCode = true } = this.opts;\n\n msg +=\n \"\\n\" +\n codeFrameColumns(\n this.code,\n {\n start: {\n line: loc.start.line,\n column: loc.start.column + 1,\n },\n end:\n loc.end && loc.start.line === loc.end.line\n ? {\n line: loc.end.line,\n column: loc.end.column + 1,\n }\n : undefined,\n },\n { highlightCode },\n );\n }\n\n return new _Error(msg);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error Babel 7\n File.prototype.addImport = function addImport() {\n throw new Error(\n \"This API has been removed. If you're looking for this \" +\n \"functionality in Babel 7, you should import the \" +\n \"'@babel/helper-module-imports' module and use the functions exposed \" +\n \" from that module, such as 'addNamed' or 'addDefault'.\",\n );\n };\n // @ts-expect-error Babel 7\n File.prototype.addTemplateObject = function addTemplateObject() {\n throw new Error(\n \"This function has been moved into the template literal transform itself.\",\n );\n };\n\n if (!USE_ESM || IS_STANDALONE) {\n // @ts-expect-error Babel 7\n File.prototype.getModuleName = function getModuleName() {\n return babel7.getModuleName()(this.opts, this.opts);\n };\n }\n}\n","import type { PluginPasses } from \"../../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { GeneratorResult } from \"@babel/generator\";\nimport generate from \"@babel/generator\";\n\nimport type File from \"./file.ts\";\nimport mergeSourceMap from \"./merge-map.ts\";\n\nexport default function generateCode(\n pluginPasses: PluginPasses,\n file: File,\n): {\n outputCode: string;\n outputMap: GeneratorResult[\"map\"] | null;\n} {\n const { opts, ast, code, inputMap } = file;\n const { generatorOpts } = opts;\n\n generatorOpts.inputSourceMap = inputMap?.toObject();\n\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { generatorOverride } = plugin;\n if (generatorOverride) {\n const result = generatorOverride(ast, generatorOpts, code, generate);\n\n if (result !== undefined) results.push(result);\n }\n }\n }\n\n let result;\n if (results.length === 0) {\n result = generate(ast, generatorOpts, code);\n } else if (results.length === 1) {\n result = results[0];\n\n if (typeof result.then === \"function\") {\n throw new Error(\n `You appear to be using an async codegen plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version.`,\n );\n }\n } else {\n throw new Error(\"More than one plugin attempted to override codegen.\");\n }\n\n // Decoded maps are faster to merge, so we attempt to get use the decodedMap\n // first. But to preserve backwards compat with older Generator, we'll fall\n // back to the encoded map.\n let { code: outputCode, decodedMap: outputMap = result.map } = result;\n\n // For backwards compat.\n if (result.__mergedMap) {\n /**\n * @see mergeSourceMap\n */\n outputMap = { ...result.map };\n } else {\n if (outputMap) {\n if (inputMap) {\n // mergeSourceMap returns an encoded map\n outputMap = mergeSourceMap(\n inputMap.toObject(),\n outputMap,\n generatorOpts.sourceFileName,\n );\n } else {\n // We cannot output a decoded map, so retrieve the encoded form. Because\n // the decoded form is free, it's fine to prioritize decoded first.\n outputMap = result.map;\n }\n }\n }\n\n if (opts.sourceMaps === \"inline\" || opts.sourceMaps === \"both\") {\n outputCode += \"\\n\" + convertSourceMap.fromObject(outputMap).toComment();\n }\n\n if (opts.sourceMaps === \"inline\") {\n outputMap = null;\n }\n\n return { outputCode, outputMap };\n}\n","type SourceMap = any;\nimport remapping from \"@ampproject/remapping\";\n\nexport default function mergeSourceMap(\n inputMap: SourceMap,\n map: SourceMap,\n sourceFileName: string,\n): SourceMap {\n // On win32 machines, the sourceFileName uses backslash paths like\n // `C:\\foo\\bar.js`. But sourcemaps are always posix paths, so we need to\n // normalize to regular slashes before we can merge (else we won't find the\n // source associated with our input map).\n // This mirrors code done while generating the output map at\n // https://github.com/babel/babel/blob/5c2fcadc9ae34fd20dd72b1111d5cf50476d700d/packages/babel-generator/src/source-map.ts#L102\n const source = sourceFileName.replace(/\\\\/g, \"/\");\n\n // Prevent an infinite recursion if one of the input map's sources has the\n // same resolved path as the input map. In the case, it would keep find the\n // input map, then get it's sources which will include a path like the input\n // map, on and on.\n let found = false;\n const result = remapping(rootless(map), (s, ctx) => {\n if (s === source && !found) {\n found = true;\n // We empty the source location, which will prevent the sourcemap from\n // becoming relative to the input's location. Eg, if we're transforming a\n // file 'foo/bar.js', and it is a transformation of a `baz.js` file in the\n // same directory, the expected output is just `baz.js`. Without this step,\n // it would become `foo/baz.js`.\n ctx.source = \"\";\n\n return rootless(inputMap);\n }\n\n return null;\n });\n\n if (typeof inputMap.sourceRoot === \"string\") {\n result.sourceRoot = inputMap.sourceRoot;\n }\n\n // remapping returns a SourceMap class type, but this breaks code downstream in\n // @babel/traverse and @babel/types that relies on data being plain objects.\n // When it encounters the sourcemap type it outputs a \"don't know how to turn\n // this value into a node\" error. As a result, we are converting the merged\n // sourcemap to a plain js object.\n return { ...result };\n}\n\nfunction rootless(map: SourceMap): SourceMap {\n return {\n ...map,\n\n // This is a bit hack. Remapping will create absolute sources in our\n // sourcemap, but we want to maintain sources relative to the sourceRoot.\n // We'll re-add the sourceRoot after remapping.\n sourceRoot: null,\n };\n}\n","import traverse from \"@babel/traverse\";\nimport type * as t from \"@babel/types\";\nimport type { GeneratorResult } from \"@babel/generator\";\n\nimport type { Handler } from \"gensync\";\n\nimport type { ResolvedConfig, Plugin, PluginPasses } from \"../config/index.ts\";\n\nimport PluginPass from \"./plugin-pass.ts\";\nimport loadBlockHoistPlugin from \"./block-hoist-plugin.ts\";\nimport normalizeOptions from \"./normalize-opts.ts\";\nimport normalizeFile from \"./normalize-file.ts\";\n\nimport generateCode from \"./file/generate.ts\";\nimport type File from \"./file/file.ts\";\n\nimport { flattenToSet } from \"../config/helpers/deep-array.ts\";\nimport { isAsync, maybeAsync } from \"../gensync-utils/async.ts\";\n\nexport type FileResultCallback = {\n (err: Error, file: null): void;\n (err: null, file: FileResult | null): void;\n};\n\nexport type FileResult = {\n metadata: { [key: string]: any };\n options: { [key: string]: any };\n ast: t.File | null;\n code: string | null;\n map: GeneratorResult[\"map\"] | null;\n sourceType: \"script\" | \"module\";\n externalDependencies: Set;\n};\n\nexport function* run(\n config: ResolvedConfig,\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n const file = yield* normalizeFile(\n config.passes,\n normalizeOptions(config),\n code,\n ast,\n );\n\n const opts = file.opts;\n try {\n yield* transformFile(file, config.passes);\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_TRANSFORM_ERROR\";\n }\n throw e;\n }\n\n let outputCode, outputMap;\n try {\n if (opts.code !== false) {\n ({ outputCode, outputMap } = generateCode(config.passes, file));\n }\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_GENERATE_ERROR\";\n }\n throw e;\n }\n\n return {\n metadata: file.metadata,\n options: opts,\n ast: opts.ast === true ? file.ast : null,\n code: outputCode === undefined ? null : outputCode,\n map: outputMap === undefined ? null : outputMap,\n sourceType: file.ast.program.sourceType,\n externalDependencies: flattenToSet(config.externalDependencies),\n };\n}\n\nfunction* transformFile(file: File, pluginPasses: PluginPasses): Handler {\n const async = yield* isAsync();\n\n for (const pluginPairs of pluginPasses) {\n const passPairs: [Plugin, PluginPass][] = [];\n const passes = [];\n const visitors = [];\n\n for (const plugin of pluginPairs.concat([loadBlockHoistPlugin()])) {\n const pass = new PluginPass(file, plugin.key, plugin.options, async);\n\n passPairs.push([plugin, pass]);\n passes.push(pass);\n visitors.push(plugin.visitor);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.pre) {\n const fn = maybeAsync(\n plugin.pre,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n\n // merge all plugin visitors into a single visitor\n const visitor = traverse.visitors.merge(\n visitors,\n passes,\n file.opts.wrapPluginVisitorMethod,\n );\n if (process.env.BABEL_8_BREAKING) {\n traverse(file.ast.program, visitor, file.scope, null, file.path, true);\n } else {\n traverse(file.ast, visitor, file.scope);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.post) {\n const fn = maybeAsync(\n plugin.post,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { file, traverseFast } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { PluginPasses } from \"../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { SourceMapConverter as Converter } from \"convert-source-map\";\nimport File from \"./file/file.ts\";\nimport parser from \"../parser/index.ts\";\nimport cloneDeep from \"./util/clone-deep.ts\";\n\nconst debug = buildDebug(\"babel:transform:file\");\n\n// These regexps are copied from the convert-source-map package,\n// but without // or /* at the beginning of the comment.\n\nconst INLINE_SOURCEMAP_REGEX =\n /^[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,.*$/;\nconst EXTERNAL_SOURCEMAP_REGEX =\n /^[@#][ \\t]+sourceMappingURL=([^\\s'\"`]+)[ \\t]*$/;\n\nexport type NormalizedFile = {\n code: string;\n ast: t.File;\n inputMap: Converter | null;\n};\n\nexport default function* normalizeFile(\n pluginPasses: PluginPasses,\n options: { [key: string]: any },\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n code = `${code || \"\"}`;\n\n if (ast) {\n if (ast.type === \"Program\") {\n ast = file(ast, [], []);\n } else if (ast.type !== \"File\") {\n throw new Error(\"AST root must be a Program or File node\");\n }\n\n if (options.cloneInputAst) {\n ast = cloneDeep(ast);\n }\n } else {\n // @ts-expect-error todo: use babel-types ast typings in Babel parser\n ast = yield* parser(pluginPasses, options, code);\n }\n\n let inputMap = null;\n if (options.inputSourceMap !== false) {\n // If an explicit object is passed in, it overrides the processing of\n // source maps that may be in the file itself.\n if (typeof options.inputSourceMap === \"object\") {\n inputMap = convertSourceMap.fromObject(options.inputSourceMap);\n }\n\n if (!inputMap) {\n const lastComment = extractComments(INLINE_SOURCEMAP_REGEX, ast);\n if (lastComment) {\n try {\n inputMap = convertSourceMap.fromComment(\"//\" + lastComment);\n } catch (err) {\n if (process.env.BABEL_8_BREAKING) {\n console.warn(\n \"discarding unknown inline input sourcemap\",\n options.filename,\n err,\n );\n } else {\n debug(\"discarding unknown inline input sourcemap\");\n }\n }\n }\n }\n\n if (!inputMap) {\n const lastComment = extractComments(EXTERNAL_SOURCEMAP_REGEX, ast);\n if (typeof options.filename === \"string\" && lastComment) {\n try {\n // when `lastComment` is non-null, EXTERNAL_SOURCEMAP_REGEX must have matches\n const match: [string, string] = EXTERNAL_SOURCEMAP_REGEX.exec(\n lastComment,\n ) as any;\n const inputMapContent = fs.readFileSync(\n path.resolve(path.dirname(options.filename), match[1]),\n \"utf8\",\n );\n inputMap = convertSourceMap.fromJSON(inputMapContent);\n } catch (err) {\n debug(\"discarding unknown file input sourcemap\", err);\n }\n } else if (lastComment) {\n debug(\"discarding un-loadable file input sourcemap\");\n }\n }\n }\n\n return new File(options, {\n code,\n ast: ast as t.File,\n inputMap,\n });\n}\n\nfunction extractCommentsFromList(\n regex: RegExp,\n comments: t.Comment[],\n lastComment: string | null,\n): [t.Comment[], string | null] {\n if (comments) {\n comments = comments.filter(({ value }) => {\n if (regex.test(value)) {\n lastComment = value;\n return false;\n }\n return true;\n });\n }\n return [comments, lastComment];\n}\n\nfunction extractComments(regex: RegExp, ast: t.Node) {\n let lastComment: string = null;\n traverseFast(ast, node => {\n [node.leadingComments, lastComment] = extractCommentsFromList(\n regex,\n node.leadingComments,\n lastComment,\n );\n [node.innerComments, lastComment] = extractCommentsFromList(\n regex,\n node.innerComments,\n lastComment,\n );\n [node.trailingComments, lastComment] = extractCommentsFromList(\n regex,\n node.trailingComments,\n lastComment,\n );\n });\n return lastComment;\n}\n","import path from \"path\";\nimport type { ResolvedConfig } from \"../config/index.ts\";\n\nexport default function normalizeOptions(config: ResolvedConfig) {\n const {\n filename,\n cwd,\n filenameRelative = typeof filename === \"string\"\n ? path.relative(cwd, filename)\n : \"unknown\",\n sourceType = \"module\",\n inputSourceMap,\n sourceMaps = !!inputSourceMap,\n sourceRoot = process.env.BABEL_8_BREAKING\n ? undefined\n : config.options.moduleRoot,\n\n sourceFileName = path.basename(filenameRelative),\n\n comments = true,\n compact = \"auto\",\n } = config.options;\n\n const opts = config.options;\n\n const options = {\n ...opts,\n\n parserOpts: {\n sourceType:\n path.extname(filenameRelative) === \".mjs\" ? \"module\" : sourceType,\n\n sourceFileName: filename,\n plugins: [],\n ...opts.parserOpts,\n },\n\n generatorOpts: {\n // General generator flags.\n filename,\n\n auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n retainLines: opts.retainLines,\n comments,\n shouldPrintComment: opts.shouldPrintComment,\n compact,\n minified: opts.minified,\n\n // Source-map generation flags.\n sourceMaps,\n\n sourceRoot,\n sourceFileName,\n ...opts.generatorOpts,\n },\n };\n\n for (const plugins of config.passes) {\n for (const plugin of plugins) {\n if (plugin.manipulateOptions) {\n plugin.manipulateOptions(options, options.parserOpts);\n }\n }\n }\n\n return options;\n}\n","import type * as t from \"@babel/types\";\nimport type File from \"./file/file.ts\";\n\nexport default class PluginPass {\n _map: Map = new Map();\n key: string | undefined | null;\n file: File;\n opts: Partial;\n\n /**\n * The working directory that Babel's programmatic options are loaded\n * relative to.\n */\n cwd: string;\n\n /** The absolute path of the file being compiled. */\n filename: string | void;\n\n /**\n * Is Babel executed in async mode or not.\n */\n isAsync: boolean;\n\n constructor(\n file: File,\n key: string | null,\n options: Options | undefined,\n isAsync: boolean,\n ) {\n this.key = key;\n this.file = file;\n this.opts = options || {};\n this.cwd = file.opts.cwd;\n this.filename = file.opts.filename;\n this.isAsync = isAsync;\n }\n\n set(key: unknown, val: unknown) {\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n availableHelper(name: string, versionRange?: string | null) {\n return this.file.availableHelper(name, versionRange);\n }\n\n addHelper(name: string) {\n return this.file.addHelper(name);\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error?: typeof Error,\n ) {\n return this.file.buildCodeFrameError(node, msg, _Error);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n (PluginPass as any).prototype.getModuleName = function getModuleName(\n this: PluginPass,\n ): string | undefined {\n // @ts-expect-error only exists in Babel 7\n return this.file.getModuleName();\n };\n (PluginPass as any).prototype.addImport = function addImport(\n this: PluginPass,\n ): void {\n // @ts-expect-error only exists in Babel 7\n this.file.addImport();\n };\n}\n","//https://github.com/babel/babel/pull/14583#discussion_r882828856\nfunction deepClone(value: any, cache: Map): any {\n if (value !== null) {\n if (cache.has(value)) return cache.get(value);\n let cloned: any;\n if (Array.isArray(value)) {\n cloned = new Array(value.length);\n cache.set(value, cloned);\n for (let i = 0; i < value.length; i++) {\n cloned[i] =\n typeof value[i] !== \"object\" ? value[i] : deepClone(value[i], cache);\n }\n } else {\n cloned = {};\n cache.set(value, cloned);\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] =\n typeof value[key] !== \"object\"\n ? value[key]\n : deepClone(value[key], cache);\n }\n }\n return cloned;\n }\n return value;\n}\n\nexport default function (value: T): T {\n if (typeof value !== \"object\") return value;\n return deepClone(value, new Map());\n}\n","import type SourceMap from \"./source-map.ts\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charcodes from \"charcodes\";\n\nexport type Pos = {\n line: number;\n column: number;\n index: number;\n};\nexport type Loc = {\n start?: Pos;\n end?: Pos;\n filename?: string;\n};\ntype SourcePos = {\n line: number | undefined;\n column: number | undefined;\n identifierName: string | undefined;\n filename: string | undefined;\n};\ntype InternalSourcePos = SourcePos & { identifierNamePos: Pos };\n\ntype QueueItem = {\n char: number;\n repeat: number;\n line: number | undefined;\n column: number | undefined;\n identifierName: undefined; // Not used, it always undefined.\n identifierNamePos: undefined; // Not used, it always undefined.\n filename: string | undefined;\n};\n\nexport default class Buffer {\n constructor(map: SourceMap | null, indentChar: string) {\n this._map = map;\n this._indentChar = indentChar;\n\n for (let i = 0; i < 64; i++) {\n this._fastIndentations.push(indentChar.repeat(i));\n }\n\n this._allocQueue();\n }\n\n _map: SourceMap = null;\n _buf = \"\";\n _str = \"\";\n _appendCount = 0;\n _last = 0;\n _queue: QueueItem[] = [];\n _queueCursor = 0;\n _canMarkIdName = true;\n _indentChar = \"\";\n _fastIndentations: string[] = [];\n\n _position = {\n line: 1,\n column: 0,\n };\n _sourcePosition: InternalSourcePos = {\n identifierName: undefined,\n identifierNamePos: undefined,\n line: undefined,\n column: undefined,\n filename: undefined,\n };\n\n _allocQueue() {\n const queue = this._queue;\n\n for (let i = 0; i < 16; i++) {\n queue.push({\n char: 0,\n repeat: 1,\n line: undefined,\n column: undefined,\n identifierName: undefined,\n identifierNamePos: undefined,\n filename: \"\",\n });\n }\n }\n\n _pushQueue(\n char: number,\n repeat: number,\n line: number | undefined,\n column: number | undefined,\n filename: string | undefined,\n ) {\n const cursor = this._queueCursor;\n if (cursor === this._queue.length) {\n this._allocQueue();\n }\n const item = this._queue[cursor];\n item.char = char;\n item.repeat = repeat;\n item.line = line;\n item.column = column;\n item.filename = filename;\n\n this._queueCursor++;\n }\n\n _popQueue(): QueueItem {\n if (this._queueCursor === 0) {\n throw new Error(\"Cannot pop from empty queue\");\n }\n return this._queue[--this._queueCursor];\n }\n\n /**\n * Get the final string output from the buffer, along with the sourcemap if one exists.\n */\n\n get() {\n this._flush();\n\n const map = this._map;\n const result = {\n // Whatever trim is used here should not execute a regex against the\n // source string since it may be arbitrarily large after all transformations\n code: (this._buf + this._str).trimRight(),\n // Decoded sourcemap is free to generate.\n decodedMap: map?.getDecoded(),\n // Used as a marker for backwards compatibility. We moved input map merging\n // into the generator. We cannot merge the input map a second time, so the\n // presence of this field tells us we've already done the work.\n get __mergedMap() {\n return this.map;\n },\n // Encoding the sourcemap is moderately CPU expensive.\n get map() {\n const resultMap = map ? map.get() : null;\n result.map = resultMap;\n return resultMap;\n },\n set map(value) {\n Object.defineProperty(result, \"map\", { value, writable: true });\n },\n // Retrieving the raw mappings is very memory intensive.\n get rawMappings() {\n const mappings = map?.getRawMappings();\n result.rawMappings = mappings;\n return mappings;\n },\n set rawMappings(value) {\n Object.defineProperty(result, \"rawMappings\", { value, writable: true });\n },\n };\n\n return result;\n }\n\n /**\n * Add a string to the buffer that cannot be reverted.\n */\n\n append(str: string, maybeNewline: boolean): void {\n this._flush();\n\n this._append(str, this._sourcePosition, maybeNewline);\n }\n\n appendChar(char: number): void {\n this._flush();\n this._appendChar(char, 1, this._sourcePosition);\n }\n\n /**\n * Add a string to the buffer than can be reverted.\n */\n queue(char: number): void {\n // Drop trailing spaces when a newline is inserted.\n if (char === charcodes.lineFeed) {\n while (this._queueCursor !== 0) {\n const char = this._queue[this._queueCursor - 1].char;\n if (char !== charcodes.space && char !== charcodes.tab) {\n break;\n }\n\n this._queueCursor--;\n }\n }\n\n const sourcePosition = this._sourcePosition;\n this._pushQueue(\n char,\n 1,\n sourcePosition.line,\n sourcePosition.column,\n sourcePosition.filename,\n );\n }\n\n /**\n * Same as queue, but this indentation will never have a sourcemap marker.\n */\n queueIndentation(repeat: number): void {\n if (repeat === 0) return;\n this._pushQueue(-1, repeat, undefined, undefined, undefined);\n }\n\n _flush(): void {\n const queueCursor = this._queueCursor;\n const queue = this._queue;\n for (let i = 0; i < queueCursor; i++) {\n const item: QueueItem = queue[i];\n this._appendChar(item.char, item.repeat, item);\n }\n this._queueCursor = 0;\n }\n\n _appendChar(\n char: number,\n repeat: number,\n sourcePos: InternalSourcePos,\n ): void {\n this._last = char;\n\n if (char === -1) {\n const fastIndentation = this._fastIndentations[repeat];\n if (fastIndentation !== undefined) {\n this._str += fastIndentation;\n } else {\n this._str +=\n repeat > 1 ? this._indentChar.repeat(repeat) : this._indentChar;\n }\n } else {\n this._str +=\n repeat > 1\n ? String.fromCharCode(char).repeat(repeat)\n : String.fromCharCode(char);\n }\n\n if (char !== charcodes.lineFeed) {\n this._mark(\n sourcePos.line,\n sourcePos.column,\n sourcePos.identifierName,\n sourcePos.identifierNamePos,\n sourcePos.filename,\n );\n this._position.column += repeat;\n } else {\n this._position.line++;\n this._position.column = 0;\n }\n\n if (this._canMarkIdName) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n }\n\n _append(\n str: string,\n sourcePos: InternalSourcePos,\n maybeNewline: boolean,\n ): void {\n const len = str.length;\n const position = this._position;\n\n this._last = str.charCodeAt(len - 1);\n\n if (++this._appendCount > 4096) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n +this._str; // Unexplainable huge performance boost. Ref: https://github.com/davidmarkclements/flatstr License: MIT\n this._buf += this._str;\n this._str = str;\n this._appendCount = 0;\n } else {\n this._str += str;\n }\n\n if (!maybeNewline && !this._map) {\n position.column += len;\n return;\n }\n\n const { column, identifierName, identifierNamePos, filename } = sourcePos;\n let line = sourcePos.line;\n\n if (\n (identifierName != null || identifierNamePos != null) &&\n this._canMarkIdName\n ) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n\n // Search for newline chars. We search only for `\\n`, since both `\\r` and\n // `\\r\\n` are normalized to `\\n` during parse. We exclude `\\u2028` and\n // `\\u2029` for performance reasons, they're so uncommon that it's probably\n // ok. It's also unclear how other sourcemap utilities handle them...\n let i = str.indexOf(\"\\n\");\n let last = 0;\n\n // If the string starts with a newline char, then adding a mark is redundant.\n // This catches both \"no newlines\" and \"newline after several chars\".\n if (i !== 0) {\n this._mark(line, column, identifierName, identifierNamePos, filename);\n }\n\n // Now, find each remaining newline char in the string.\n while (i !== -1) {\n position.line++;\n position.column = 0;\n last = i + 1;\n\n // We mark the start of each line, which happens directly after this newline char\n // unless this is the last char.\n // When manually adding multi-line content (such as a comment), `line` will be `undefined`.\n if (last < len && line !== undefined) {\n this._mark(++line, 0, null, null, filename);\n }\n i = str.indexOf(\"\\n\", last);\n }\n position.column += len - last;\n }\n\n _mark(\n line: number | undefined,\n column: number | undefined,\n identifierName: string | undefined,\n identifierNamePos: Pos | undefined,\n filename: string | undefined,\n ): void {\n this._map?.mark(\n this._position,\n line,\n column,\n identifierName,\n identifierNamePos,\n filename,\n );\n }\n\n removeTrailingNewline(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.lineFeed\n ) {\n this._queueCursor--;\n }\n }\n\n removeLastSemicolon(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.semicolon\n ) {\n this._queueCursor--;\n }\n }\n\n getLastChar(): number {\n const queueCursor = this._queueCursor;\n return queueCursor !== 0 ? this._queue[queueCursor - 1].char : this._last;\n }\n\n /**\n * This will only detect at most 1 newline after a call to `flush()`,\n * but this has not been found so far, and an accurate count can be achieved if needed later.\n */\n getNewlineCount(): number {\n const queueCursor = this._queueCursor;\n let count = 0;\n if (queueCursor === 0) return this._last === charcodes.lineFeed ? 1 : 0;\n for (let i = queueCursor - 1; i >= 0; i--) {\n if (this._queue[i].char !== charcodes.lineFeed) {\n break;\n }\n count++;\n }\n return count === queueCursor && this._last === charcodes.lineFeed\n ? count + 1\n : count;\n }\n\n /**\n * check if current _last + queue ends with newline, return the character before newline\n */\n endsWithCharAndNewline(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n if (queueCursor !== 0) {\n // every element in queue is one-length whitespace string\n const lastCp = queue[queueCursor - 1].char;\n if (lastCp !== charcodes.lineFeed) return;\n if (queueCursor > 1) {\n return queue[queueCursor - 2].char;\n } else {\n return this._last;\n }\n }\n // We assume that everything being matched is at most a single token plus some whitespace,\n // which everything currently is, but otherwise we'd have to expand _last or check _buf.\n }\n\n hasContent(): boolean {\n return this._queueCursor !== 0 || !!this._last;\n }\n\n /**\n * Certain sourcemap usecases expect mappings to be more accurate than\n * Babel's generic sourcemap handling allows. For now, we special-case\n * identifiers to allow for the primary cases to work.\n * The goal of this line is to ensure that the map output from Babel will\n * have an exact range on identifiers in the output code. Without this\n * line, Babel would potentially include some number of trailing tokens\n * that are printed after the identifier, but before another location has\n * been assigned.\n * This allows tooling like Rollup and Webpack to more accurately perform\n * their own transformations. Most importantly, this allows the import/export\n * transformations performed by those tools to loose less information when\n * applying their own transformations on top of the code and map results\n * generated by Babel itself.\n *\n * The primary example of this is the snippet:\n *\n * import mod from \"mod\";\n * mod();\n *\n * With this line, there will be one mapping range over \"mod\" and another\n * over \"();\", where previously it would have been a single mapping.\n */\n exactSource(loc: Loc | undefined, cb: () => void) {\n if (!this._map) {\n cb();\n return;\n }\n\n this.source(\"start\", loc);\n // @ts-expect-error identifierName is not defined\n const identifierName = loc.identifierName;\n const sourcePos = this._sourcePosition;\n if (identifierName) {\n this._canMarkIdName = false;\n sourcePos.identifierName = identifierName;\n }\n cb();\n\n if (identifierName) {\n this._canMarkIdName = true;\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n this.source(\"end\", loc);\n }\n\n /**\n * Sets a given position as the current source location so generated code after this call\n * will be given this position in the sourcemap.\n */\n\n source(prop: \"start\" | \"end\", loc: Loc | undefined): void {\n if (!this._map) return;\n\n // Since this is called extremely often, we reuse the same _sourcePosition\n // object for the whole lifetime of the buffer.\n this._normalizePosition(prop, loc, 0);\n }\n\n sourceWithOffset(\n prop: \"start\" | \"end\",\n loc: Loc | undefined,\n columnOffset: number,\n ): void {\n if (!this._map) return;\n\n this._normalizePosition(prop, loc, columnOffset);\n }\n\n _normalizePosition(prop: \"start\" | \"end\", loc: Loc, columnOffset: number) {\n const pos = loc[prop];\n const target = this._sourcePosition;\n\n if (pos) {\n target.line = pos.line;\n // TODO: Fix https://github.com/babel/babel/issues/15712 in downstream\n target.column = Math.max(pos.column + columnOffset, 0);\n target.filename = loc.filename;\n }\n }\n\n getCurrentColumn(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n\n let lastIndex = -1;\n let len = 0;\n for (let i = 0; i < queueCursor; i++) {\n const item = queue[i];\n if (item.char === charcodes.lineFeed) {\n lastIndex = len;\n }\n len += item.repeat;\n }\n\n return lastIndex === -1 ? this._position.column + len : len - 1 - lastIndex;\n }\n\n getCurrentLine(): number {\n let count = 0;\n\n const queue = this._queue;\n for (let i = 0; i < this._queueCursor; i++) {\n if (queue[i].char === charcodes.lineFeed) {\n count++;\n }\n }\n\n return this._position.line + count;\n }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function File(this: Printer, node: t.File) {\n if (node.program) {\n // Print this here to ensure that Program node 'leadingComments' still\n // get printed after the hashbang.\n this.print(node.program.interpreter);\n }\n\n this.print(node.program);\n}\n\nexport function Program(this: Printer, node: t.Program) {\n // An empty Program doesn't have any inner tokens, so\n // we must explicitly print its inner comments.\n this.noIndentInnerCommentsHere();\n this.printInnerComments();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, undefined, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body);\n}\n\nexport function BlockStatement(this: Printer, node: t.BlockStatement) {\n this.token(\"{\");\n const exit = this.enterDelimited();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, true, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body, true);\n\n exit();\n this.rightBrace(node);\n}\n\nexport function Directive(this: Printer, node: t.Directive) {\n this.print(node.value);\n this.semicolon();\n}\n\n// These regexes match an even number of \\ followed by a quote\nconst unescapedSingleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*'/;\nconst unescapedDoubleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*\"/;\n\nexport function DirectiveLiteral(this: Printer, node: t.DirectiveLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const { value } = node;\n\n // NOTE: In directives we can't change escapings,\n // because they change the behavior.\n // e.g. \"us\\x65 strict\" (\\x65 is e) is not a \"use strict\" directive.\n\n if (!unescapedDoubleQuoteRE.test(value)) {\n this.token(`\"${value}\"`);\n } else if (!unescapedSingleQuoteRE.test(value)) {\n this.token(`'${value}'`);\n } else {\n throw new Error(\n \"Malformed AST: it is not possible to print a directive containing\" +\n \" both unescaped single and double quotes.\",\n );\n }\n}\n\nexport function InterpreterDirective(\n this: Printer,\n node: t.InterpreterDirective,\n) {\n this.token(`#!${node.value}`);\n this.newline(1, true);\n}\n\nexport function Placeholder(this: Printer, node: t.Placeholder) {\n this.token(\"%%\");\n this.print(node.name);\n this.token(\"%%\");\n\n if (node.expectedNode === \"Statement\") {\n this.semicolon();\n }\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nexport function ClassDeclaration(\n this: Printer,\n node: t.ClassDeclaration,\n parent: t.Node,\n) {\n const inExport =\n isExportDefaultDeclaration(parent) || isExportNamedDeclaration(parent);\n\n if (\n !inExport ||\n !this._shouldPrintDecoratorsBeforeExport(\n parent as t.ExportDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n this.printJoin(node.decorators);\n }\n\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n if (node.abstract) {\n // TS\n this.word(\"abstract\");\n this.space();\n }\n\n this.word(\"class\");\n\n if (node.id) {\n this.space();\n this.print(node.id);\n }\n\n this.print(node.typeParameters);\n\n if (node.superClass) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.superClass);\n this.print(\n process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeParameters,\n );\n }\n\n if (node.implements) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n\n this.space();\n this.print(node.body);\n}\n\nexport { ClassDeclaration as ClassExpression };\n\nexport function ClassBody(this: Printer, node: t.ClassBody) {\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n\n const separator = classBodyEmptySemicolonsPrinter(this, node);\n separator?.(-1); // print leading semicolons in preserveFormat mode\n\n const exit = this.enterDelimited();\n this.printJoin(node.body, true, true, separator, true);\n exit();\n\n if (!this.endsWith(charCodes.lineFeed)) this.newline();\n\n this.rightBrace(node);\n }\n}\n\nfunction classBodyEmptySemicolonsPrinter(printer: Printer, node: t.ClassBody) {\n if (!printer.tokenMap || node.start == null || node.end == null) {\n return null;\n }\n\n // \"empty statements\" in class bodies are not represented in the AST.\n // Print them by checking if there are any ; tokens between the current AST\n // member and the next one.\n\n const indexes = printer.tokenMap.getIndexes(node);\n if (!indexes) return null;\n\n let k = 1; // start from 1 to skip '{'\n\n let occurrenceCount = 0;\n\n let nextLocIndex = 0;\n const advanceNextLocIndex = () => {\n while (\n nextLocIndex < node.body.length &&\n node.body[nextLocIndex].start == null\n ) {\n nextLocIndex++;\n }\n };\n advanceNextLocIndex();\n\n return (i: number) => {\n if (nextLocIndex <= i) {\n nextLocIndex = i + 1;\n advanceNextLocIndex();\n }\n\n const end =\n nextLocIndex === node.body.length\n ? node.end\n : node.body[nextLocIndex].start;\n\n let tok;\n while (\n k < indexes.length &&\n printer.tokenMap.matchesOriginal(\n (tok = printer._tokens[indexes[k]]),\n \";\",\n ) &&\n tok.start < end\n ) {\n printer.token(\";\", undefined, occurrenceCount++);\n k++;\n }\n };\n}\n\nexport function ClassProperty(this: Printer, node: t.ClassProperty) {\n this.printJoin(node.decorators);\n\n if (!node.static && !this.format.preserveFormat) {\n // catch up to property key, avoid line break\n // between member TS modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassAccessorProperty(\n this: Printer,\n node: t.ClassAccessorProperty,\n) {\n this.printJoin(node.decorators);\n\n // catch up to property key, avoid line break\n // between member modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n\n // TS does not support class accessor property yet\n this.tsPrintClassMemberModifiers(node);\n\n this.word(\"accessor\", true);\n this.space();\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // Todo: Flow does not support class accessor property yet.\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassPrivateProperty(\n this: Printer,\n node: t.ClassPrivateProperty,\n) {\n this.printJoin(node.decorators);\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.print(node.key);\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassMethod(this: Printer, node: t.ClassMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ClassPrivateMethod(this: Printer, node: t.ClassPrivateMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function _classMethodHead(\n this: Printer,\n node: t.ClassMethod | t.ClassPrivateMethod | t.TSDeclareMethod,\n) {\n this.printJoin(node.decorators);\n\n if (!this.format.preserveFormat) {\n // catch up to method key, avoid line break\n // between member modifiers/method heads and the method key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n this._methodHead(node);\n}\n\nexport function StaticBlock(this: Printer, node: t.StaticBlock) {\n this.word(\"static\");\n this.space();\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n this.printSequence(node.body, true);\n this.rightBrace(node);\n }\n}\n","import type Printer from \"../printer\";\nimport type * as t from \"@babel/types\";\n\nexport type DeprecatedBabel7ASTTypes =\n | \"Noop\"\n | \"TSExpressionWithTypeArguments\"\n | \"DecimalLiteral\";\n\nexport function addDeprecatedGenerators(PrinterClass: typeof Printer) {\n // Add Babel 7 generator methods that is removed in Babel 8\n if (!process.env.BABEL_8_BREAKING) {\n const deprecatedBabel7Generators = {\n Noop(this: Printer) {},\n\n TSExpressionWithTypeArguments(\n this: Printer,\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node: t.TSExpressionWithTypeArguments,\n ) {\n this.print(node.expression);\n this.print(node.typeParameters);\n },\n\n DecimalLiteral(this: Printer, node: any) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"m\");\n },\n } satisfies Record<\n DeprecatedBabel7ASTTypes,\n (this: Printer, node: any) => void\n >;\n Object.assign(PrinterClass.prototype, deprecatedBabel7Generators);\n }\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isCallExpression,\n isLiteral,\n isMemberExpression,\n isNewExpression,\n isPattern,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function UnaryExpression(this: Printer, node: t.UnaryExpression) {\n const { operator } = node;\n if (\n operator === \"void\" ||\n operator === \"delete\" ||\n operator === \"typeof\" ||\n // throwExpressions\n operator === \"throw\"\n ) {\n this.word(operator);\n this.space();\n } else {\n this.token(operator);\n }\n\n this.print(node.argument);\n}\n\nexport function DoExpression(this: Printer, node: t.DoExpression) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n this.word(\"do\");\n this.space();\n this.print(node.body);\n}\n\nexport function ParenthesizedExpression(\n this: Printer,\n node: t.ParenthesizedExpression,\n) {\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.print(node.expression);\n exit();\n this.rightParens(node);\n}\n\nexport function UpdateExpression(this: Printer, node: t.UpdateExpression) {\n if (node.prefix) {\n this.token(node.operator);\n this.print(node.argument);\n } else {\n this.print(node.argument, true);\n this.token(node.operator);\n }\n}\n\nexport function ConditionalExpression(\n this: Printer,\n node: t.ConditionalExpression,\n) {\n this.print(node.test);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.consequent);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.alternate);\n}\n\nexport function NewExpression(\n this: Printer,\n node: t.NewExpression,\n parent: t.Node,\n) {\n this.word(\"new\");\n this.space();\n this.print(node.callee);\n if (\n this.format.minified &&\n node.arguments.length === 0 &&\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n !node.optional &&\n !isCallExpression(parent, { callee: node }) &&\n !isMemberExpression(parent) &&\n !isNewExpression(parent)\n ) {\n return;\n }\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // Legacy TS AST\n }\n\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n if (node.optional) {\n // TODO: This can never happen\n this.token(\"?.\");\n }\n\n if (\n node.arguments.length === 0 &&\n this.tokenMap &&\n !this.tokenMap.endMatches(node, \")\")\n ) {\n return;\n }\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function SequenceExpression(this: Printer, node: t.SequenceExpression) {\n this.printList(node.expressions);\n}\n\nexport function ThisExpression(this: Printer) {\n this.word(\"this\");\n}\n\nexport function Super(this: Printer) {\n this.word(\"super\");\n}\n\nexport function _shouldPrintDecoratorsBeforeExport(\n this: Printer,\n node: t.ExportDeclaration & { declaration: t.ClassDeclaration },\n) {\n if (typeof this.format.decoratorsBeforeExport === \"boolean\") {\n return this.format.decoratorsBeforeExport;\n }\n return (\n typeof node.start === \"number\" && node.start === node.declaration.start\n );\n}\n\nexport function Decorator(this: Printer, node: t.Decorator) {\n this.token(\"@\");\n this.print(node.expression);\n this.newline();\n}\n\nexport function OptionalMemberExpression(\n this: Printer,\n node: t.OptionalMemberExpression,\n) {\n let { computed } = node;\n const { optional, property } = node;\n\n this.print(node.object);\n\n if (!computed && isMemberExpression(property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n // @ts-expect-error todo(flow->ts) maybe instead of typeof check specific literal types?\n if (isLiteral(property) && typeof property.value === \"number\") {\n computed = true;\n }\n if (optional) {\n this.token(\"?.\");\n }\n\n if (computed) {\n this.token(\"[\");\n this.print(property);\n this.token(\"]\");\n } else {\n if (!optional) {\n this.token(\".\");\n }\n this.print(property);\n }\n}\n\nexport function OptionalCallExpression(\n this: Printer,\n node: t.OptionalCallExpression,\n) {\n this.print(node.callee);\n\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n\n if (node.optional) {\n this.token(\"?.\");\n }\n\n this.print(node.typeArguments);\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments);\n exit();\n this.rightParens(node);\n}\n\nexport function CallExpression(this: Printer, node: t.CallExpression) {\n this.print(node.callee);\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function Import(this: Printer) {\n this.word(\"import\");\n}\n\nexport function AwaitExpression(this: Printer, node: t.AwaitExpression) {\n this.word(\"await\");\n\n if (node.argument) {\n this.space();\n this.printTerminatorless(node.argument);\n }\n}\n\nexport function YieldExpression(this: Printer, node: t.YieldExpression) {\n this.word(\"yield\", true);\n\n if (node.delegate) {\n this.token(\"*\");\n if (node.argument) {\n this.space();\n // line terminators are allowed after yield*\n this.print(node.argument);\n }\n } else {\n if (node.argument) {\n this.space();\n this.printTerminatorless(node.argument);\n }\n }\n}\n\nexport function EmptyStatement(this: Printer) {\n this.semicolon(true /* force */);\n}\n\nexport function ExpressionStatement(\n this: Printer,\n node: t.ExpressionStatement,\n) {\n this.tokenContext |= TokenContext.expressionStatement;\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function AssignmentPattern(this: Printer, node: t.AssignmentPattern) {\n this.print(node.left);\n if (node.left.type === \"Identifier\" || isPattern(node.left)) {\n if (node.left.optional) this.token(\"?\");\n this.print(node.left.typeAnnotation);\n }\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n}\n\nexport function AssignmentExpression(\n this: Printer,\n node: t.AssignmentExpression | t.BinaryExpression | t.LogicalExpression,\n) {\n this.print(node.left);\n\n this.space();\n if (node.operator === \"in\" || node.operator === \"instanceof\") {\n this.word(node.operator);\n } else {\n this.token(node.operator);\n this._endsWithDiv = node.operator === \"/\";\n }\n this.space();\n\n this.print(node.right);\n}\n\nexport function BindExpression(this: Printer, node: t.BindExpression) {\n this.print(node.object);\n this.token(\"::\");\n this.print(node.callee);\n}\n\nexport {\n AssignmentExpression as BinaryExpression,\n AssignmentExpression as LogicalExpression,\n};\n\nexport function MemberExpression(this: Printer, node: t.MemberExpression) {\n this.print(node.object);\n\n if (!node.computed && isMemberExpression(node.property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n let computed = node.computed;\n // @ts-expect-error todo(flow->ts) maybe use specific literal types\n if (isLiteral(node.property) && typeof node.property.value === \"number\") {\n computed = true;\n }\n\n if (computed) {\n const exit = this.enterDelimited();\n this.token(\"[\");\n this.print(node.property);\n this.token(\"]\");\n exit();\n } else {\n this.token(\".\");\n this.print(node.property);\n }\n}\n\nexport function MetaProperty(this: Printer, node: t.MetaProperty) {\n this.print(node.meta);\n this.token(\".\");\n this.print(node.property);\n}\n\nexport function PrivateName(this: Printer, node: t.PrivateName) {\n this.token(\"#\");\n this.print(node.id);\n}\n\nexport function V8IntrinsicIdentifier(\n this: Printer,\n node: t.V8IntrinsicIdentifier,\n) {\n this.token(\"%\");\n this.word(node.name);\n}\n\nexport function ModuleExpression(this: Printer, node: t.ModuleExpression) {\n this.word(\"module\", true);\n this.space();\n this.token(\"{\");\n this.indent();\n const { body } = node;\n if (body.body.length || body.directives.length) {\n this.newline();\n }\n this.print(body);\n this.dedent();\n this.rightBrace(node);\n}\n","import type Printer from \"../printer.ts\";\nimport { isDeclareExportDeclaration, isStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { ExportAllDeclaration } from \"./modules.ts\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function AnyTypeAnnotation(this: Printer) {\n this.word(\"any\");\n}\n\nexport function ArrayTypeAnnotation(\n this: Printer,\n node: t.ArrayTypeAnnotation,\n) {\n this.print(node.elementType, true);\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function BooleanTypeAnnotation(this: Printer) {\n this.word(\"boolean\");\n}\n\nexport function BooleanLiteralTypeAnnotation(\n this: Printer,\n node: t.BooleanLiteralTypeAnnotation,\n) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteralTypeAnnotation(this: Printer) {\n this.word(\"null\");\n}\n\nexport function DeclareClass(\n this: Printer,\n node: t.DeclareClass,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"class\");\n this.space();\n this._interfaceish(node);\n}\n\nexport function DeclareFunction(\n this: Printer,\n node: t.DeclareFunction,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"function\");\n this.space();\n this.print(node.id);\n // @ts-ignore(Babel 7 vs Babel 8) TODO(Babel 8) Remove this comment, since we'll remove the Noop node\n this.print(node.id.typeAnnotation.typeAnnotation);\n\n if (node.predicate) {\n this.space();\n this.print(node.predicate);\n }\n\n this.semicolon();\n}\n\nexport function InferredPredicate(this: Printer) {\n this.token(\"%\");\n this.word(\"checks\");\n}\n\nexport function DeclaredPredicate(this: Printer, node: t.DeclaredPredicate) {\n this.token(\"%\");\n this.word(\"checks\");\n this.token(\"(\");\n this.print(node.value);\n this.token(\")\");\n}\n\nexport function DeclareInterface(this: Printer, node: t.DeclareInterface) {\n this.word(\"declare\");\n this.space();\n this.InterfaceDeclaration(node);\n}\n\nexport function DeclareModule(this: Printer, node: t.DeclareModule) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.space();\n this.print(node.id);\n this.space();\n this.print(node.body);\n}\n\nexport function DeclareModuleExports(\n this: Printer,\n node: t.DeclareModuleExports,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.token(\".\");\n this.word(\"exports\");\n this.print(node.typeAnnotation);\n}\n\nexport function DeclareTypeAlias(this: Printer, node: t.DeclareTypeAlias) {\n this.word(\"declare\");\n this.space();\n this.TypeAlias(node);\n}\n\nexport function DeclareOpaqueType(\n this: Printer,\n node: t.DeclareOpaqueType,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.OpaqueType(node);\n}\n\nexport function DeclareVariable(\n this: Printer,\n node: t.DeclareVariable,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"var\");\n this.space();\n this.print(node.id);\n this.print(node.id.typeAnnotation);\n this.semicolon();\n}\n\nexport function DeclareExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"export\");\n this.space();\n if (node.default) {\n this.word(\"default\");\n this.space();\n }\n\n FlowExportDeclaration.call(this, node);\n}\n\nexport function DeclareExportAllDeclaration(\n this: Printer,\n node: t.DeclareExportAllDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n ExportAllDeclaration.call(this, node);\n}\n\nexport function EnumDeclaration(this: Printer, node: t.EnumDeclaration) {\n const { id, body } = node;\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.print(body);\n}\n\nfunction enumExplicitType(\n context: Printer,\n name: string,\n hasExplicitType: boolean,\n) {\n if (hasExplicitType) {\n context.space();\n context.word(\"of\");\n context.space();\n context.word(name);\n }\n context.space();\n}\n\nfunction enumBody(context: Printer, node: t.EnumBody) {\n const { members } = node;\n context.token(\"{\");\n context.indent();\n context.newline();\n for (const member of members) {\n context.print(member);\n context.newline();\n }\n if (node.hasUnknownMembers) {\n context.token(\"...\");\n context.newline();\n }\n context.dedent();\n context.token(\"}\");\n}\n\nexport function EnumBooleanBody(this: Printer, node: t.EnumBooleanBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"boolean\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumNumberBody(this: Printer, node: t.EnumNumberBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"number\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumStringBody(this: Printer, node: t.EnumStringBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"string\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumSymbolBody(this: Printer, node: t.EnumSymbolBody) {\n enumExplicitType(this, \"symbol\", true);\n enumBody(this, node);\n}\n\nexport function EnumDefaultedMember(\n this: Printer,\n node: t.EnumDefaultedMember,\n) {\n const { id } = node;\n this.print(id);\n this.token(\",\");\n}\n\nfunction enumInitializedMember(\n context: Printer,\n node: t.EnumBooleanMember | t.EnumNumberMember | t.EnumStringMember,\n) {\n context.print(node.id);\n context.space();\n context.token(\"=\");\n context.space();\n context.print(node.init);\n context.token(\",\");\n}\n\nexport function EnumBooleanMember(this: Printer, node: t.EnumBooleanMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumNumberMember(this: Printer, node: t.EnumNumberMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumStringMember(this: Printer, node: t.EnumStringMember) {\n enumInitializedMember(this, node);\n}\n\nfunction FlowExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n this.token(\"{\");\n if (node.specifiers.length) {\n this.space();\n this.printList(node.specifiers);\n this.space();\n }\n this.token(\"}\");\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n this.print(node.source);\n }\n\n this.semicolon();\n }\n}\n\nexport function ExistsTypeAnnotation(this: Printer) {\n this.token(\"*\");\n}\n\nexport function FunctionTypeAnnotation(\n this: Printer,\n node: t.FunctionTypeAnnotation,\n parent?: t.Node,\n) {\n this.print(node.typeParameters);\n this.token(\"(\");\n\n if (node.this) {\n this.word(\"this\");\n this.token(\":\");\n this.space();\n this.print(node.this.typeAnnotation);\n if (node.params.length || node.rest) {\n this.token(\",\");\n this.space();\n }\n }\n\n this.printList(node.params);\n\n if (node.rest) {\n if (node.params.length) {\n this.token(\",\");\n this.space();\n }\n this.token(\"...\");\n this.print(node.rest);\n }\n\n this.token(\")\");\n\n // this node type is overloaded, not sure why but it makes it EXTREMELY annoying\n\n const type = parent?.type;\n if (\n type != null &&\n (type === \"ObjectTypeCallProperty\" ||\n type === \"ObjectTypeInternalSlot\" ||\n type === \"DeclareFunction\" ||\n (type === \"ObjectTypeProperty\" && parent.method))\n ) {\n this.token(\":\");\n } else {\n this.space();\n this.token(\"=>\");\n }\n\n this.space();\n this.print(node.returnType);\n}\n\nexport function FunctionTypeParam(this: Printer, node: t.FunctionTypeParam) {\n this.print(node.name);\n if (node.optional) this.token(\"?\");\n if (node.name) {\n this.token(\":\");\n this.space();\n }\n this.print(node.typeAnnotation);\n}\n\nexport function InterfaceExtends(this: Printer, node: t.InterfaceExtends) {\n this.print(node.id);\n this.print(node.typeParameters, true);\n}\n\nexport {\n InterfaceExtends as ClassImplements,\n InterfaceExtends as GenericTypeAnnotation,\n};\n\nexport function _interfaceish(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface | t.DeclareClass,\n) {\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n if (node.type === \"DeclareClass\") {\n if (node.mixins?.length) {\n this.space();\n this.word(\"mixins\");\n this.space();\n this.printList(node.mixins);\n }\n if (node.implements?.length) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n }\n this.space();\n this.print(node.body);\n}\n\nexport function _variance(\n this: Printer,\n node:\n | t.TypeParameter\n | t.ObjectTypeIndexer\n | t.ObjectTypeProperty\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty,\n) {\n const kind = node.variance?.kind;\n if (kind != null) {\n if (kind === \"plus\") {\n this.token(\"+\");\n } else if (kind === \"minus\") {\n this.token(\"-\");\n }\n }\n}\n\nexport function InterfaceDeclaration(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface,\n) {\n this.word(\"interface\");\n this.space();\n this._interfaceish(node);\n}\n\nfunction andSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"&\", false, occurrenceCount);\n this.space();\n}\n\nexport function InterfaceTypeAnnotation(\n this: Printer,\n node: t.InterfaceTypeAnnotation,\n) {\n this.word(\"interface\");\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n this.space();\n this.print(node.body);\n}\n\nexport function IntersectionTypeAnnotation(\n this: Printer,\n node: t.IntersectionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, andSeparator);\n}\n\nexport function MixedTypeAnnotation(this: Printer) {\n this.word(\"mixed\");\n}\n\nexport function EmptyTypeAnnotation(this: Printer) {\n this.word(\"empty\");\n}\n\nexport function NullableTypeAnnotation(\n this: Printer,\n node: t.NullableTypeAnnotation,\n) {\n this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport {\n NumericLiteral as NumberLiteralTypeAnnotation,\n StringLiteral as StringLiteralTypeAnnotation,\n} from \"./types.ts\";\n\nexport function NumberTypeAnnotation(this: Printer) {\n this.word(\"number\");\n}\n\nexport function StringTypeAnnotation(this: Printer) {\n this.word(\"string\");\n}\n\nexport function ThisTypeAnnotation(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TupleTypeAnnotation(\n this: Printer,\n node: t.TupleTypeAnnotation,\n) {\n this.token(\"[\");\n this.printList(node.types);\n this.token(\"]\");\n}\n\nexport function TypeofTypeAnnotation(\n this: Printer,\n node: t.TypeofTypeAnnotation,\n) {\n this.word(\"typeof\");\n this.space();\n this.print(node.argument);\n}\n\nexport function TypeAlias(\n this: Printer,\n node: t.TypeAlias | t.DeclareTypeAlias,\n) {\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n this.semicolon();\n}\n\nexport function TypeAnnotation(\n this: Printer,\n node: t.TypeAnnotation,\n parent: t.Node,\n) {\n this.token(\":\");\n this.space();\n if (parent.type === \"ArrowFunctionExpression\") {\n this.tokenContext |= TokenContext.arrowFlowReturnType;\n } else if (\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n node.optional\n ) {\n this.token(\"?\");\n }\n this.print(node.typeAnnotation);\n}\n\nexport function TypeParameterInstantiation(\n this: Printer,\n node: t.TypeParameterInstantiation,\n): void {\n this.token(\"<\");\n this.printList(node.params);\n this.token(\">\");\n}\n\nexport { TypeParameterInstantiation as TypeParameterDeclaration };\n\nexport function TypeParameter(this: Printer, node: t.TypeParameter) {\n this._variance(node);\n\n this.word(node.name);\n\n if (node.bound) {\n this.print(node.bound);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function OpaqueType(\n this: Printer,\n node: t.OpaqueType | t.DeclareOpaqueType,\n) {\n this.word(\"opaque\");\n this.space();\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.supertype) {\n this.token(\":\");\n this.space();\n this.print(node.supertype);\n }\n\n if (node.impltype) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.impltype);\n }\n this.semicolon();\n}\n\nexport function ObjectTypeAnnotation(\n this: Printer,\n node: t.ObjectTypeAnnotation,\n) {\n if (node.exact) {\n this.token(\"{|\");\n } else {\n this.token(\"{\");\n }\n\n // TODO: remove the array fallbacks and instead enforce the types to require an array\n const props = [\n ...node.properties,\n ...(node.callProperties || []),\n ...(node.indexers || []),\n ...(node.internalSlots || []),\n ];\n\n if (props.length) {\n this.newline();\n\n this.space();\n\n this.printJoin(\n props,\n true,\n true,\n undefined,\n undefined,\n function addNewlines(leading) {\n if (leading && !props[0]) return 1;\n },\n () => {\n if (props.length !== 1 || node.inexact) {\n this.token(\",\");\n this.space();\n }\n },\n );\n\n this.space();\n }\n\n if (node.inexact) {\n this.indent();\n this.token(\"...\");\n if (props.length) {\n this.newline();\n }\n this.dedent();\n }\n\n if (node.exact) {\n this.token(\"|}\");\n } else {\n this.token(\"}\");\n }\n}\n\nexport function ObjectTypeInternalSlot(\n this: Printer,\n node: t.ObjectTypeInternalSlot,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.token(\"[\");\n this.token(\"[\");\n this.print(node.id);\n this.token(\"]\");\n this.token(\"]\");\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeCallProperty(\n this: Printer,\n node: t.ObjectTypeCallProperty,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeIndexer(this: Printer, node: t.ObjectTypeIndexer) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this._variance(node);\n this.token(\"[\");\n if (node.id) {\n this.print(node.id);\n this.token(\":\");\n this.space();\n }\n this.print(node.key);\n this.token(\"]\");\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ObjectTypeProperty(this: Printer, node: t.ObjectTypeProperty) {\n if (node.proto) {\n this.word(\"proto\");\n this.space();\n }\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n if (node.kind === \"get\" || node.kind === \"set\") {\n this.word(node.kind);\n this.space();\n }\n this._variance(node);\n this.print(node.key);\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeSpreadProperty(\n this: Printer,\n node: t.ObjectTypeSpreadProperty,\n) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport function QualifiedTypeIdentifier(\n this: Printer,\n node: t.QualifiedTypeIdentifier,\n) {\n this.print(node.qualification);\n this.token(\".\");\n this.print(node.id);\n}\n\nexport function SymbolTypeAnnotation(this: Printer) {\n this.word(\"symbol\");\n}\n\nfunction orSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"|\", false, occurrenceCount);\n this.space();\n}\n\nexport function UnionTypeAnnotation(\n this: Printer,\n node: t.UnionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, orSeparator);\n}\n\nexport function TypeCastExpression(this: Printer, node: t.TypeCastExpression) {\n this.token(\"(\");\n this.print(node.expression);\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function Variance(this: Printer, node: t.Variance) {\n if (node.kind === \"plus\") {\n this.token(\"+\");\n } else {\n this.token(\"-\");\n }\n}\n\nexport function VoidTypeAnnotation(this: Printer) {\n this.word(\"void\");\n}\n\nexport function IndexedAccessType(this: Printer, node: t.IndexedAccessType) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function OptionalIndexedAccessType(\n this: Printer,\n node: t.OptionalIndexedAccessType,\n) {\n this.print(node.objectType);\n if (node.optional) {\n this.token(\"?.\");\n }\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n","export * from \"./template-literals.ts\";\nexport * from \"./expressions.ts\";\nexport * from \"./statements.ts\";\nexport * from \"./classes.ts\";\nexport * from \"./methods.ts\";\nexport * from \"./modules.ts\";\nexport * from \"./types.ts\";\nexport * from \"./flow.ts\";\nexport * from \"./base.ts\";\nexport * from \"./jsx.ts\";\nexport * from \"./typescript.ts\";\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function JSXAttribute(this: Printer, node: t.JSXAttribute) {\n this.print(node.name);\n if (node.value) {\n this.token(\"=\");\n this.print(node.value);\n }\n}\n\nexport function JSXIdentifier(this: Printer, node: t.JSXIdentifier) {\n this.word(node.name);\n}\n\nexport function JSXNamespacedName(this: Printer, node: t.JSXNamespacedName) {\n this.print(node.namespace);\n this.token(\":\");\n this.print(node.name);\n}\n\nexport function JSXMemberExpression(\n this: Printer,\n node: t.JSXMemberExpression,\n) {\n this.print(node.object);\n this.token(\".\");\n this.print(node.property);\n}\n\nexport function JSXSpreadAttribute(this: Printer, node: t.JSXSpreadAttribute) {\n this.token(\"{\");\n this.token(\"...\");\n this.print(node.argument);\n this.rightBrace(node);\n}\n\nexport function JSXExpressionContainer(\n this: Printer,\n node: t.JSXExpressionContainer,\n) {\n this.token(\"{\");\n this.print(node.expression);\n this.rightBrace(node);\n}\n\nexport function JSXSpreadChild(this: Printer, node: t.JSXSpreadChild) {\n this.token(\"{\");\n this.token(\"...\");\n this.print(node.expression);\n this.rightBrace(node);\n}\n\nexport function JSXText(this: Printer, node: t.JSXText) {\n const raw = this.getPossibleRaw(node);\n\n if (raw !== undefined) {\n this.token(raw, true);\n } else {\n this.token(node.value, true);\n }\n}\n\nexport function JSXElement(this: Printer, node: t.JSXElement) {\n const open = node.openingElement;\n this.print(open);\n if (open.selfClosing) return;\n\n this.indent();\n for (const child of node.children) {\n this.print(child);\n }\n this.dedent();\n\n this.print(node.closingElement);\n}\n\nfunction spaceSeparator(this: Printer) {\n this.space();\n}\n\nexport function JSXOpeningElement(this: Printer, node: t.JSXOpeningElement) {\n this.token(\"<\");\n this.print(node.name);\n if (process.env.BABEL_8_BREAKING) {\n //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n if (node.typeArguments) {\n this.print(node.typeArguments); // Flow AST\n }\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // Legacy TS AST\n }\n\n if (node.attributes.length > 0) {\n this.space();\n this.printJoin(node.attributes, undefined, undefined, spaceSeparator);\n }\n if (node.selfClosing) {\n this.space();\n this.token(\"/\");\n }\n this.token(\">\");\n}\n\nexport function JSXClosingElement(this: Printer, node: t.JSXClosingElement) {\n this.token(\"<\");\n this.token(\"/\");\n this.print(node.name);\n this.token(\">\");\n}\n\nexport function JSXEmptyExpression(this: Printer) {\n // This node is empty, so forcefully print its inner comments.\n this.printInnerComments();\n}\n\nexport function JSXFragment(this: Printer, node: t.JSXFragment) {\n this.print(node.openingFragment);\n\n this.indent();\n for (const child of node.children) {\n this.print(child);\n }\n this.dedent();\n\n this.print(node.closingFragment);\n}\n\nexport function JSXOpeningFragment(this: Printer) {\n this.token(\"<\");\n this.token(\">\");\n}\n\nexport function JSXClosingFragment(this: Printer) {\n this.token(\"\");\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\nimport { isIdentifier, type ParentMaps } from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\ntype ParentsOf = ParentMaps[T[\"type\"]];\n\nexport function _params(\n this: Printer,\n node: t.Function | t.TSDeclareMethod | t.TSDeclareFunction,\n idNode: t.Expression | t.PrivateName,\n parentNode: ParentsOf,\n) {\n this.print(node.typeParameters);\n\n const nameInfo = _getFuncIdName.call(this, idNode, parentNode);\n if (nameInfo) {\n this.sourceIdentifierName(nameInfo.name, nameInfo.pos);\n }\n\n this.token(\"(\");\n this._parameters(node.params, \")\");\n\n const noLineTerminator = node.type === \"ArrowFunctionExpression\";\n this.print(node.returnType, noLineTerminator);\n\n this._noLineTerminator = noLineTerminator;\n}\n\nexport function _parameters(\n this: Printer,\n parameters: t.Function[\"params\"],\n endToken: string,\n) {\n const exit = this.enterDelimited();\n\n const trailingComma = this.shouldPrintTrailingComma(endToken);\n\n const paramLength = parameters.length;\n for (let i = 0; i < paramLength; i++) {\n this._param(parameters[i]);\n\n if (trailingComma || i < paramLength - 1) {\n this.token(\",\", null, i);\n this.space();\n }\n }\n\n this.token(endToken);\n exit();\n}\n\nexport function _param(\n this: Printer,\n parameter: t.Identifier | t.RestElement | t.Pattern | t.TSParameterProperty,\n) {\n this.printJoin(parameter.decorators);\n this.print(parameter);\n if (\n // @ts-expect-error optional is not in TSParameterProperty\n parameter.optional\n ) {\n this.token(\"?\"); // TS / flow\n }\n\n this.print(\n // @ts-expect-error typeAnnotation is not in TSParameterProperty\n parameter.typeAnnotation,\n ); // TS / flow\n}\n\nexport function _methodHead(this: Printer, node: t.Method | t.TSDeclareMethod) {\n const kind = node.kind;\n const key = node.key;\n\n if (kind === \"get\" || kind === \"set\") {\n this.word(kind);\n this.space();\n }\n\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (\n kind === \"method\" ||\n // @ts-expect-error Fixme: kind: \"init\" is not defined\n kind === \"init\"\n ) {\n if (node.generator) {\n this.token(\"*\");\n }\n }\n\n if (node.computed) {\n this.token(\"[\");\n this.print(key);\n this.token(\"]\");\n } else {\n this.print(key);\n }\n\n if (\n // @ts-expect-error optional is not in ObjectMethod\n node.optional\n ) {\n // TS\n this.token(\"?\");\n }\n\n this._params(\n node,\n node.computed && node.key.type !== \"StringLiteral\" ? undefined : node.key,\n undefined,\n );\n}\n\nexport function _predicate(\n this: Printer,\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n noLineTerminatorAfter?: boolean,\n) {\n if (node.predicate) {\n if (!node.returnType) {\n this.token(\":\");\n }\n this.space();\n this.print(node.predicate, noLineTerminatorAfter);\n }\n}\n\nexport function _functionHead(\n this: Printer,\n node: t.FunctionDeclaration | t.FunctionExpression | t.TSDeclareFunction,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\");\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.space();\n }\n this.word(\"function\");\n if (node.generator) {\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.token(\"*\");\n }\n\n this.space();\n if (node.id) {\n this.print(node.id);\n }\n\n this._params(node, node.id, parent);\n if (node.type !== \"TSDeclareFunction\") {\n this._predicate(node);\n }\n}\n\nexport function FunctionExpression(\n this: Printer,\n node: t.FunctionExpression,\n parent: ParentsOf,\n) {\n this._functionHead(node, parent);\n this.space();\n this.print(node.body);\n}\n\nexport { FunctionExpression as FunctionDeclaration };\n\nexport function ArrowFunctionExpression(\n this: Printer,\n node: t.ArrowFunctionExpression,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (this._shouldPrintArrowParamsParens(node)) {\n this._params(node, undefined, parent);\n } else {\n this.print(node.params[0], true);\n }\n\n this._predicate(node, true);\n this.space();\n // When printing (x)/*1*/=>{}, we remove the parentheses\n // and thus there aren't two contiguous inner tokens.\n // We forcefully print inner comments here.\n this.printInnerComments();\n this.token(\"=>\");\n\n this.space();\n\n this.tokenContext |= TokenContext.arrowBody;\n this.print(node.body);\n}\n\n// Try to avoid printing parens in simple cases, but only if we're pretty\n// sure that they aren't needed by type annotations or potential newlines.\nexport function _shouldPrintArrowParamsParens(\n this: Printer,\n node: t.ArrowFunctionExpression,\n): boolean {\n if (node.params.length !== 1) return true;\n\n if (node.typeParameters || node.returnType || node.predicate) {\n return true;\n }\n\n const firstParam = node.params[0];\n if (\n !isIdentifier(firstParam) ||\n firstParam.typeAnnotation ||\n firstParam.optional ||\n // Flow does not support `foo /*: string*/ => {};`\n firstParam.leadingComments?.length ||\n firstParam.trailingComments?.length\n ) {\n return true;\n }\n\n if (this.tokenMap) {\n if (node.loc == null) return true;\n if (this.tokenMap.findMatching(node, \"(\") !== null) return true;\n const arrowToken = this.tokenMap.findMatching(node, \"=>\");\n if (arrowToken?.loc == null) return true;\n return arrowToken.loc.start.line !== node.loc.start.line;\n }\n\n if (this.format.retainLines) return true;\n\n return false;\n}\n\nfunction _getFuncIdName(\n this: Printer,\n idNode: t.Expression | t.PrivateName,\n parent: ParentsOf,\n) {\n let id: t.Expression | t.PrivateName | t.LVal = idNode;\n\n if (!id && parent) {\n const parentType = parent.type;\n\n if (parentType === \"VariableDeclarator\") {\n id = parent.id;\n } else if (\n parentType === \"AssignmentExpression\" ||\n parentType === \"AssignmentPattern\"\n ) {\n id = parent.left;\n } else if (\n parentType === \"ObjectProperty\" ||\n parentType === \"ClassProperty\"\n ) {\n if (!parent.computed || parent.key.type === \"StringLiteral\") {\n id = parent.key;\n }\n } else if (\n parentType === \"ClassPrivateProperty\" ||\n parentType === \"ClassAccessorProperty\"\n ) {\n id = parent.key;\n }\n }\n\n if (!id) return;\n\n let nameInfo;\n\n if (id.type === \"Identifier\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.loc?.identifierName || id.name,\n };\n } else if (id.type === \"PrivateName\") {\n nameInfo = {\n pos: id.loc?.start,\n name: \"#\" + id.id.name,\n };\n } else if (id.type === \"StringLiteral\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.value,\n };\n }\n\n return nameInfo;\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isClassDeclaration,\n isExportDefaultSpecifier,\n isExportNamespaceSpecifier,\n isImportDefaultSpecifier,\n isImportNamespaceSpecifier,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function ImportSpecifier(this: Printer, node: t.ImportSpecifier) {\n if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n this.word(node.importKind);\n this.space();\n }\n\n this.print(node.imported);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.local && node.local.name !== node.imported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n }\n}\n\nexport function ImportDefaultSpecifier(\n this: Printer,\n node: t.ImportDefaultSpecifier,\n) {\n this.print(node.local);\n}\n\nexport function ExportDefaultSpecifier(\n this: Printer,\n node: t.ExportDefaultSpecifier,\n) {\n this.print(node.exported);\n}\n\nexport function ExportSpecifier(this: Printer, node: t.ExportSpecifier) {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n this.print(node.local);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.exported && node.local.name !== node.exported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n }\n}\n\nexport function ExportNamespaceSpecifier(\n this: Printer,\n node: t.ExportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n}\n\nlet warningShown = false;\n\nexport function _printAttributes(\n this: Printer,\n node: Extract,\n hasPreviousBrace: boolean,\n) {\n const { importAttributesKeyword } = this.format;\n const { attributes, assertions } = node;\n\n if (\n !process.env.BABEL_8_BREAKING &&\n attributes &&\n !importAttributesKeyword &&\n // In the production build only show the warning once.\n // We want to show it per-usage locally for tests.\n (!process.env.IS_PUBLISH || !warningShown)\n ) {\n warningShown = true;\n console.warn(`\\\nYou are using import attributes, without specifying the desired output syntax.\nPlease specify the \"importAttributesKeyword\" generator option, whose value can be one of:\n - \"with\" : \\`import { a } from \"b\" with { type: \"json\" };\\`\n - \"assert\" : \\`import { a } from \"b\" assert { type: \"json\" };\\`\n - \"with-legacy\" : \\`import { a } from \"b\" with type: \"json\";\\`\n`);\n }\n\n const useAssertKeyword =\n importAttributesKeyword === \"assert\" ||\n (!importAttributesKeyword && assertions);\n\n this.word(useAssertKeyword ? \"assert\" : \"with\");\n this.space();\n\n if (\n !process.env.BABEL_8_BREAKING &&\n !useAssertKeyword &&\n importAttributesKeyword !== \"with\"\n ) {\n // with-legacy\n this.printList(attributes || assertions);\n return;\n }\n\n const occurrenceCount = hasPreviousBrace ? 1 : 0;\n\n this.token(\"{\", null, occurrenceCount);\n this.space();\n this.printList(attributes || assertions, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\", null, occurrenceCount);\n}\n\nexport function ExportAllDeclaration(\n this: Printer,\n node: t.ExportAllDeclaration | t.DeclareExportAllDeclaration,\n) {\n this.word(\"export\");\n this.space();\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n this.token(\"*\");\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, false);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nfunction maybePrintDecoratorsBeforeExport(\n printer: Printer,\n node: t.ExportNamedDeclaration | t.ExportDefaultDeclaration,\n) {\n if (\n isClassDeclaration(node.declaration) &&\n printer._shouldPrintDecoratorsBeforeExport(\n node as t.ExportNamedDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n printer.printJoin(node.declaration.decorators);\n }\n}\n\nexport function ExportNamedDeclaration(\n this: Printer,\n node: t.ExportNamedDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.space();\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n\n // print \"special\" specifiers first\n let hasSpecial = false;\n for (;;) {\n const first = specifiers[0];\n if (\n isExportDefaultSpecifier(first) ||\n isExportNamespaceSpecifier(first)\n ) {\n hasSpecial = true;\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length || (!specifiers.length && !hasSpecial)) {\n hasBrace = true;\n this.token(\"{\");\n if (specifiers.length) {\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n }\n this.token(\"}\");\n }\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n }\n\n this.semicolon();\n }\n}\n\nexport function ExportDefaultDeclaration(\n this: Printer,\n node: t.ExportDefaultDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.noIndentInnerCommentsHere();\n this.space();\n this.word(\"default\");\n this.space();\n this.tokenContext |= TokenContext.exportDefault;\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n}\n\nexport function ImportDeclaration(this: Printer, node: t.ImportDeclaration) {\n this.word(\"import\");\n this.space();\n\n const isTypeKind = node.importKind === \"type\" || node.importKind === \"typeof\";\n if (isTypeKind) {\n this.noIndentInnerCommentsHere();\n this.word(node.importKind);\n this.space();\n } else if (node.module) {\n this.noIndentInnerCommentsHere();\n this.word(\"module\");\n this.space();\n } else if (node.phase) {\n this.noIndentInnerCommentsHere();\n this.word(node.phase);\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n const hasSpecifiers = !!specifiers.length;\n // print \"special\" specifiers first. The loop condition is constant,\n // but there is a \"break\" in the body.\n while (hasSpecifiers) {\n const first = specifiers[0];\n if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) {\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length) {\n hasBrace = true;\n this.token(\"{\");\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\");\n } else if (isTypeKind && !hasSpecifiers) {\n hasBrace = true;\n this.token(\"{\");\n this.token(\"}\");\n }\n\n if (hasSpecifiers || isTypeKind) {\n this.space();\n this.word(\"from\");\n this.space();\n }\n\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nexport function ImportAttribute(this: Printer, node: t.ImportAttribute) {\n this.print(node.key);\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ImportNamespaceSpecifier(\n this: Printer,\n node: t.ImportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n}\n\nexport function ImportExpression(this: Printer, node: t.ImportExpression) {\n this.word(\"import\");\n if (node.phase) {\n this.token(\".\");\n this.word(node.phase);\n }\n this.token(\"(\");\n this.print(node.source);\n if (node.options != null) {\n this.token(\",\");\n this.space();\n this.print(node.options);\n }\n this.token(\")\");\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isFor,\n isForStatement,\n isIfStatement,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function WithStatement(this: Printer, node: t.WithStatement) {\n this.word(\"with\");\n this.space();\n this.token(\"(\");\n this.print(node.object);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function IfStatement(this: Printer, node: t.IfStatement) {\n this.word(\"if\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.space();\n\n const needsBlock =\n node.alternate && isIfStatement(getLastStatement(node.consequent));\n if (needsBlock) {\n this.token(\"{\");\n this.newline();\n this.indent();\n }\n\n this.printAndIndentOnComments(node.consequent);\n\n if (needsBlock) {\n this.dedent();\n this.newline();\n this.token(\"}\");\n }\n\n if (node.alternate) {\n if (this.endsWith(charCodes.rightCurlyBrace)) this.space();\n this.word(\"else\");\n this.space();\n this.printAndIndentOnComments(node.alternate);\n }\n}\n\n// Recursively get the last statement.\nfunction getLastStatement(statement: t.Statement): t.Statement {\n // @ts-expect-error: If statement.body is empty or not a Node, isStatement will return false\n const { body } = statement;\n if (isStatement(body) === false) {\n return statement;\n }\n\n return getLastStatement(body);\n}\n\nexport function ForStatement(this: Printer, node: t.ForStatement) {\n this.word(\"for\");\n this.space();\n this.token(\"(\");\n\n {\n const exit = this.enterForStatementInit();\n this.tokenContext |= TokenContext.forHead;\n this.print(node.init);\n exit();\n }\n\n this.token(\";\");\n\n if (node.test) {\n this.space();\n this.print(node.test);\n }\n this.token(\";\", false, 1);\n\n if (node.update) {\n this.space();\n this.print(node.update);\n }\n\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function WhileStatement(this: Printer, node: t.WhileStatement) {\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.printBlock(node);\n}\n\nfunction ForXStatement(this: Printer, node: t.ForXStatement) {\n this.word(\"for\");\n this.space();\n const isForOf = node.type === \"ForOfStatement\";\n if (isForOf && node.await) {\n this.word(\"await\");\n this.space();\n }\n this.noIndentInnerCommentsHere();\n this.token(\"(\");\n {\n const exit = isForOf ? null : this.enterForStatementInit();\n this.tokenContext |= isForOf\n ? TokenContext.forOfHead\n : TokenContext.forInHead;\n this.print(node.left);\n exit?.();\n }\n this.space();\n this.word(isForOf ? \"of\" : \"in\");\n this.space();\n this.print(node.right);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport const ForInStatement = ForXStatement;\nexport const ForOfStatement = ForXStatement;\n\nexport function DoWhileStatement(this: Printer, node: t.DoWhileStatement) {\n this.word(\"do\");\n this.space();\n this.print(node.body);\n this.space();\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.semicolon();\n}\n\nfunction printStatementAfterKeyword(printer: Printer, node: t.Node) {\n if (node) {\n printer.space();\n printer.printTerminatorless(node);\n }\n\n printer.semicolon();\n}\n\nexport function BreakStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"break\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ContinueStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"continue\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ReturnStatement(this: Printer, node: t.ReturnStatement) {\n this.word(\"return\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function ThrowStatement(this: Printer, node: t.ThrowStatement) {\n this.word(\"throw\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function LabeledStatement(this: Printer, node: t.LabeledStatement) {\n this.print(node.label);\n this.token(\":\");\n this.space();\n this.print(node.body);\n}\n\nexport function TryStatement(this: Printer, node: t.TryStatement) {\n this.word(\"try\");\n this.space();\n this.print(node.block);\n this.space();\n\n // Esprima bug puts the catch clause in a `handlers` array.\n // see https://code.google.com/p/esprima/issues/detail?id=433\n // We run into this from regenerator generated ast.\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n if (node.handlers) {\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n this.print(node.handlers[0]);\n } else {\n this.print(node.handler);\n }\n\n if (node.finalizer) {\n this.space();\n this.word(\"finally\");\n this.space();\n this.print(node.finalizer);\n }\n}\n\nexport function CatchClause(this: Printer, node: t.CatchClause) {\n this.word(\"catch\");\n this.space();\n if (node.param) {\n this.token(\"(\");\n this.print(node.param);\n this.print(node.param.typeAnnotation);\n this.token(\")\");\n this.space();\n }\n this.print(node.body);\n}\n\nexport function SwitchStatement(this: Printer, node: t.SwitchStatement) {\n this.word(\"switch\");\n this.space();\n this.token(\"(\");\n this.print(node.discriminant);\n this.token(\")\");\n this.space();\n this.token(\"{\");\n\n this.printSequence(\n node.cases,\n true,\n undefined,\n function addNewlines(leading, cas) {\n if (!leading && node.cases[node.cases.length - 1] === cas) return -1;\n },\n );\n\n this.rightBrace(node);\n}\n\nexport function SwitchCase(this: Printer, node: t.SwitchCase) {\n if (node.test) {\n this.word(\"case\");\n this.space();\n this.print(node.test);\n this.token(\":\");\n } else {\n this.word(\"default\");\n this.token(\":\");\n }\n\n if (node.consequent.length) {\n this.newline();\n this.printSequence(node.consequent, true);\n }\n}\n\nexport function DebuggerStatement(this: Printer) {\n this.word(\"debugger\");\n this.semicolon();\n}\n\nexport function VariableDeclaration(\n this: Printer,\n node: t.VariableDeclaration,\n parent: t.Node,\n) {\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n const { kind } = node;\n if (kind === \"await using\") {\n this.word(\"await\");\n this.space();\n this.word(\"using\", true);\n } else {\n this.word(kind, kind === \"using\");\n }\n this.space();\n\n let hasInits = false;\n // don't add whitespace to loop heads\n if (!isFor(parent)) {\n for (const declar of node.declarations) {\n if (declar.init) {\n // has an init so let's split it up over multiple lines\n hasInits = true;\n }\n }\n }\n\n //\n // use a pretty separator when we aren't in compact mode, have initializers and don't have retainLines on\n // this will format declarations like:\n //\n // let foo = \"bar\", bar = \"foo\";\n //\n // into\n //\n // let foo = \"bar\",\n // bar = \"foo\";\n //\n\n this.printList(\n node.declarations,\n undefined,\n undefined,\n node.declarations.length > 1,\n hasInits\n ? function (this: Printer, occurrenceCount: number) {\n this.token(\",\", false, occurrenceCount);\n this.newline();\n }\n : undefined,\n );\n\n if (isFor(parent)) {\n // don't give semicolons to these nodes since they'll be inserted in the parent generator\n if (isForStatement(parent)) {\n if (parent.init === node) return;\n } else {\n if (parent.left === node) return;\n }\n }\n\n this.semicolon();\n}\n\nexport function VariableDeclarator(this: Printer, node: t.VariableDeclarator) {\n this.print(node.id);\n if (node.definite) this.token(\"!\"); // TS\n // @ts-ignore(Babel 7 vs Babel 8) Property 'typeAnnotation' does not exist on type 'MemberExpression'.\n this.print(node.id.typeAnnotation);\n if (node.init) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.init);\n }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TaggedTemplateExpression(\n this: Printer,\n node: t.TaggedTemplateExpression,\n) {\n this.print(node.tag);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n this.print(node.typeParameters);\n }\n this.print(node.quasi);\n}\n\nexport function TemplateElement(this: Printer) {\n throw new Error(\"TemplateElement printing is handled in TemplateLiteral\");\n}\n\nexport function TemplateLiteral(this: Printer, node: t.TemplateLiteral) {\n const quasis = node.quasis;\n\n let partRaw = \"`\";\n\n for (let i = 0; i < quasis.length; i++) {\n partRaw += quasis[i].value.raw;\n\n if (i + 1 < quasis.length) {\n this.token(partRaw + \"${\", true);\n this.print(node.expressions[i]);\n partRaw = \"}\";\n\n // In Babel 7 we have indivirual tokens for ${ and }, so the automatic\n // catchup logic does not work. Manually look for those tokens.\n if (!process.env.BABEL_8_BREAKING && this.tokenMap) {\n const token = this.tokenMap.findMatching(node, \"}\", i);\n if (token) this._catchUpTo(token.loc.start);\n }\n }\n }\n\n this.token(partRaw + \"`\", true);\n}\n","import type Printer from \"../printer.ts\";\nimport { isAssignmentPattern, isIdentifier } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport jsesc from \"jsesc\";\n\nlet lastRawIdentNode: t.Identifier | null = null;\nlet lastRawIdentResult: string = \"\";\nexport function _getRawIdentifier(this: Printer, node: t.Identifier) {\n if (node === lastRawIdentNode) return lastRawIdentResult;\n lastRawIdentNode = node;\n\n const { name } = node;\n const token = this.tokenMap.find(node, tok => tok.value === name);\n if (token) {\n lastRawIdentResult = this._originalCode.slice(token.start, token.end);\n return lastRawIdentResult;\n }\n return (lastRawIdentResult = node.name);\n}\n\nexport function Identifier(this: Printer, node: t.Identifier) {\n this.sourceIdentifierName(node.loc?.identifierName || node.name);\n\n this.word(this.tokenMap ? this._getRawIdentifier(node) : node.name);\n}\n\nexport function ArgumentPlaceholder(this: Printer) {\n this.token(\"?\");\n}\n\nexport function RestElement(this: Printer, node: t.RestElement) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport { RestElement as SpreadElement };\n\nexport function ObjectExpression(this: Printer, node: t.ObjectExpression) {\n const props = node.properties;\n\n this.token(\"{\");\n\n if (props.length) {\n const exit = this.enterDelimited();\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(\"}\"), true, true);\n this.space();\n exit();\n }\n\n this.sourceWithOffset(\"end\", node.loc, -1);\n\n this.token(\"}\");\n}\n\nexport { ObjectExpression as ObjectPattern };\n\nexport function ObjectMethod(this: Printer, node: t.ObjectMethod) {\n this.printJoin(node.decorators);\n this._methodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ObjectProperty(this: Printer, node: t.ObjectProperty) {\n this.printJoin(node.decorators);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // print `({ foo: foo = 5 } = {})` as `({ foo = 5 } = {});`\n if (\n isAssignmentPattern(node.value) &&\n isIdentifier(node.key) &&\n // @ts-expect-error todo(flow->ts) `.name` does not exist on some types in union\n node.key.name === node.value.left.name\n ) {\n this.print(node.value);\n return;\n }\n\n this.print(node.key);\n\n // shorthand!\n if (\n node.shorthand &&\n isIdentifier(node.key) &&\n isIdentifier(node.value) &&\n node.key.name === node.value.name\n ) {\n return;\n }\n }\n\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ArrayExpression(this: Printer, node: t.ArrayExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n this.token(\"[\");\n\n const exit = this.enterDelimited();\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(\"]\")) {\n this.token(\",\", false, i);\n }\n } else {\n // If the array expression ends with a hole, that hole\n // will be ignored by the interpreter, but if it ends with\n // two (or more) holes, we need to write out two (or more)\n // commas so that the resulting code is interpreted with\n // both (all) of the holes.\n this.token(\",\", false, i);\n }\n }\n\n exit();\n\n this.token(\"]\");\n}\n\nexport { ArrayExpression as ArrayPattern };\n\nexport function RecordExpression(this: Printer, node: t.RecordExpression) {\n const props = node.properties;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#{\";\n endToken = \"}\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"{|\";\n endToken = \"|}\";\n } else if (\n this.format.recordAndTupleSyntaxType !== \"hash\" &&\n this.format.recordAndTupleSyntaxType != null\n ) {\n throw new Error(\n `The \"recordAndTupleSyntaxType\" generator option must be \"bar\" or \"hash\" (${JSON.stringify(\n this.format.recordAndTupleSyntaxType,\n )} received).`,\n );\n } else {\n startToken = \"#{\";\n endToken = \"}\";\n }\n }\n\n this.token(startToken);\n\n if (props.length) {\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(endToken), true, true);\n this.space();\n }\n this.token(endToken);\n}\n\nexport function TupleExpression(this: Printer, node: t.TupleExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"[|\";\n endToken = \"|]\";\n } else if (this.format.recordAndTupleSyntaxType === \"hash\") {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n throw new Error(\n `${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`,\n );\n }\n }\n\n this.token(startToken);\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(endToken)) {\n this.token(\",\", false, i);\n }\n }\n }\n\n this.token(endToken);\n}\n\nexport function RegExpLiteral(this: Printer, node: t.RegExpLiteral) {\n this.word(`/${node.pattern}/${node.flags}`);\n}\n\nexport function BooleanLiteral(this: Printer, node: t.BooleanLiteral) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteral(this: Printer) {\n this.word(\"null\");\n}\n\nexport function NumericLiteral(this: Printer, node: t.NumericLiteral) {\n const raw = this.getPossibleRaw(node);\n const opts = this.format.jsescOption;\n const value = node.value;\n const str = value + \"\";\n if (opts.numbers) {\n this.number(jsesc(value, opts), value);\n } else if (raw == null) {\n this.number(str, value); // normalize\n } else if (this.format.minified) {\n this.number(raw.length < str.length ? raw : str, value);\n } else {\n this.number(raw, value);\n }\n}\n\nexport function StringLiteral(this: Printer, node: t.StringLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const val = jsesc(node.value, this.format.jsescOption);\n\n this.token(val);\n}\n\nexport function BigIntLiteral(this: Printer, node: t.BigIntLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"n\");\n}\n\n// Hack pipe operator\nconst validTopicTokenSet = new Set([\"^^\", \"@@\", \"^\", \"%\", \"#\"]);\nexport function TopicReference(this: Printer) {\n const { topicToken } = this.format;\n\n if (validTopicTokenSet.has(topicToken)) {\n this.token(topicToken);\n } else {\n const givenTopicTokenJSON = JSON.stringify(topicToken);\n const validTopics = Array.from(validTopicTokenSet, v => JSON.stringify(v));\n throw new Error(\n `The \"topicToken\" generator option must be one of ` +\n `${validTopics.join(\", \")} (${givenTopicTokenJSON} received instead).`,\n );\n }\n}\n\n// Smart-mix pipe operator\nexport function PipelineTopicExpression(\n this: Printer,\n node: t.PipelineTopicExpression,\n) {\n this.print(node.expression);\n}\n\nexport function PipelineBareFunction(\n this: Printer,\n node: t.PipelineBareFunction,\n) {\n this.print(node.callee);\n}\n\nexport function PipelinePrimaryTopicReference(this: Printer) {\n this.token(\"#\");\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TSTypeAnnotation(\n this: Printer,\n node: t.TSTypeAnnotation,\n parent: t.Node,\n) {\n // TODO(@nicolo-ribaudo): investigate not including => in the range\n // of the return type of an arrow function type\n this.token(\n (parent.type === \"TSFunctionType\" || parent.type === \"TSConstructorType\") &&\n (process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n parent.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n parent.typeAnnotation) === node\n ? \"=>\"\n : \":\",\n );\n this.space();\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n if (node.optional) this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSTypeParameterInstantiation(\n this: Printer,\n node: t.TSTypeParameterInstantiation,\n parent: t.Node,\n): void {\n this.token(\"<\");\n\n let printTrailingSeparator =\n parent.type === \"ArrowFunctionExpression\" && node.params.length === 1;\n if (this.tokenMap && node.start != null && node.end != null) {\n // Only force the trailing comma for pre-existing nodes if they\n // already had a comma (either because they were multi-param, or\n // because they had a trailing comma)\n printTrailingSeparator &&= !!this.tokenMap.find(node, t =>\n this.tokenMap.matchesOriginal(t, \",\"),\n );\n // Preseve the trailing comma if it was there before\n printTrailingSeparator ||= this.shouldPrintTrailingComma(\">\");\n }\n\n this.printList(node.params, printTrailingSeparator);\n this.token(\">\");\n}\n\nexport { TSTypeParameterInstantiation as TSTypeParameterDeclaration };\n\nexport function TSTypeParameter(this: Printer, node: t.TSTypeParameter) {\n if (node.in) {\n this.word(\"in\");\n this.space();\n }\n\n if (node.out) {\n this.word(\"out\");\n this.space();\n }\n\n this.word(\n !process.env.BABEL_8_BREAKING\n ? (node.name as unknown as string)\n : (node.name as unknown as t.Identifier).name,\n );\n\n if (node.constraint) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.constraint);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function TSParameterProperty(\n this: Printer,\n node: t.TSParameterProperty,\n) {\n if (node.accessibility) {\n this.word(node.accessibility);\n this.space();\n }\n\n if (node.readonly) {\n this.word(\"readonly\");\n this.space();\n }\n\n this._param(node.parameter);\n}\n\nexport function TSDeclareFunction(\n this: Printer,\n node: t.TSDeclareFunction,\n parent: t.ParentMaps[\"TSDeclareFunction\"],\n) {\n if (node.declare) {\n this.word(\"declare\");\n this.space();\n }\n this._functionHead(node, parent);\n this.semicolon();\n}\n\nexport function TSDeclareMethod(this: Printer, node: t.TSDeclareMethod) {\n this._classMethodHead(node);\n this.semicolon();\n}\n\nexport function TSQualifiedName(this: Printer, node: t.TSQualifiedName) {\n this.print(node.left);\n this.token(\".\");\n this.print(node.right);\n}\n\nexport function TSCallSignatureDeclaration(\n this: Printer,\n node: t.TSCallSignatureDeclaration,\n) {\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nfunction maybePrintTrailingCommaOrSemicolon(printer: Printer, node: t.Node) {\n if (!printer.tokenMap || !node.start || !node.end) {\n printer.semicolon();\n return;\n }\n\n if (printer.tokenMap.endMatches(node, \",\")) {\n printer.token(\",\");\n } else if (printer.tokenMap.endMatches(node, \";\")) {\n printer.semicolon();\n }\n}\n\nexport function TSConstructSignatureDeclaration(\n this: Printer,\n node: t.TSConstructSignatureDeclaration,\n) {\n this.word(\"new\");\n this.space();\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSPropertySignature(\n this: Printer,\n node: t.TSPropertySignature,\n) {\n const { readonly } = node;\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function tsPrintPropertyOrMethodName(\n this: Printer,\n node: t.TSPropertySignature | t.TSMethodSignature,\n) {\n if (node.computed) {\n this.token(\"[\");\n }\n this.print(node.key);\n if (node.computed) {\n this.token(\"]\");\n }\n if (node.optional) {\n this.token(\"?\");\n }\n}\n\nexport function TSMethodSignature(this: Printer, node: t.TSMethodSignature) {\n const { kind } = node;\n if (kind === \"set\" || kind === \"get\") {\n this.word(kind);\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSIndexSignature(this: Printer, node: t.TSIndexSignature) {\n const { readonly, static: isStatic } = node;\n if (isStatic) {\n this.word(\"static\");\n this.space();\n }\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.token(\"[\");\n this._parameters(node.parameters, \"]\");\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSAnyKeyword(this: Printer) {\n this.word(\"any\");\n}\nexport function TSBigIntKeyword(this: Printer) {\n this.word(\"bigint\");\n}\nexport function TSUnknownKeyword(this: Printer) {\n this.word(\"unknown\");\n}\nexport function TSNumberKeyword(this: Printer) {\n this.word(\"number\");\n}\nexport function TSObjectKeyword(this: Printer) {\n this.word(\"object\");\n}\nexport function TSBooleanKeyword(this: Printer) {\n this.word(\"boolean\");\n}\nexport function TSStringKeyword(this: Printer) {\n this.word(\"string\");\n}\nexport function TSSymbolKeyword(this: Printer) {\n this.word(\"symbol\");\n}\nexport function TSVoidKeyword(this: Printer) {\n this.word(\"void\");\n}\nexport function TSUndefinedKeyword(this: Printer) {\n this.word(\"undefined\");\n}\nexport function TSNullKeyword(this: Printer) {\n this.word(\"null\");\n}\nexport function TSNeverKeyword(this: Printer) {\n this.word(\"never\");\n}\nexport function TSIntrinsicKeyword(this: Printer) {\n this.word(\"intrinsic\");\n}\n\nexport function TSThisType(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TSFunctionType(this: Printer, node: t.TSFunctionType) {\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function TSConstructorType(this: Printer, node: t.TSConstructorType) {\n if (node.abstract) {\n this.word(\"abstract\");\n this.space();\n }\n this.word(\"new\");\n this.space();\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function tsPrintFunctionOrConstructorType(\n this: Printer,\n node: t.TSFunctionType | t.TSConstructorType,\n) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.params\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n this.space();\n const returnType = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function TSTypeReference(this: Printer, node: t.TSTypeReference) {\n const typeArguments = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeParameters;\n this.print(node.typeName, !!typeArguments);\n this.print(typeArguments);\n}\n\nexport function TSTypePredicate(this: Printer, node: t.TSTypePredicate) {\n if (node.asserts) {\n this.word(\"asserts\");\n this.space();\n }\n this.print(node.parameterName);\n if (node.typeAnnotation) {\n this.space();\n this.word(\"is\");\n this.space();\n this.print(node.typeAnnotation.typeAnnotation);\n }\n}\n\nexport function TSTypeQuery(this: Printer, node: t.TSTypeQuery) {\n this.word(\"typeof\");\n this.space();\n this.print(node.exprName);\n\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSTypeLiteral(this: Printer, node: t.TSTypeLiteral) {\n printBraced(this, node, () => this.printJoin(node.members, true, true));\n}\n\nexport function TSArrayType(this: Printer, node: t.TSArrayType) {\n this.print(node.elementType, true);\n\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function TSTupleType(this: Printer, node: t.TSTupleType) {\n this.token(\"[\");\n this.printList(node.elementTypes, this.shouldPrintTrailingComma(\"]\"));\n this.token(\"]\");\n}\n\nexport function TSOptionalType(this: Printer, node: t.TSOptionalType) {\n this.print(node.typeAnnotation);\n this.token(\"?\");\n}\n\nexport function TSRestType(this: Printer, node: t.TSRestType) {\n this.token(\"...\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSNamedTupleMember(this: Printer, node: t.TSNamedTupleMember) {\n this.print(node.label);\n if (node.optional) this.token(\"?\");\n this.token(\":\");\n this.space();\n this.print(node.elementType);\n}\n\nexport function TSUnionType(this: Printer, node: t.TSUnionType) {\n tsPrintUnionOrIntersectionType(this, node, \"|\");\n}\n\nexport function TSIntersectionType(this: Printer, node: t.TSIntersectionType) {\n tsPrintUnionOrIntersectionType(this, node, \"&\");\n}\n\nfunction tsPrintUnionOrIntersectionType(\n printer: Printer,\n node: t.TSUnionType | t.TSIntersectionType,\n sep: \"|\" | \"&\",\n) {\n let hasLeadingToken = 0;\n if (printer.tokenMap?.startMatches(node, sep)) {\n hasLeadingToken = 1;\n printer.token(sep);\n }\n\n printer.printJoin(node.types, undefined, undefined, function (i) {\n this.space();\n this.token(sep, null, i + hasLeadingToken);\n this.space();\n });\n}\n\nexport function TSConditionalType(this: Printer, node: t.TSConditionalType) {\n this.print(node.checkType);\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.extendsType);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.trueType);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.falseType);\n}\n\nexport function TSInferType(this: Printer, node: t.TSInferType) {\n this.word(\"infer\");\n this.print(node.typeParameter);\n}\n\nexport function TSParenthesizedType(\n this: Printer,\n node: t.TSParenthesizedType,\n) {\n this.token(\"(\");\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function TSTypeOperator(this: Printer, node: t.TSTypeOperator) {\n this.word(node.operator);\n this.space();\n this.print(node.typeAnnotation);\n}\n\nexport function TSIndexedAccessType(\n this: Printer,\n node: t.TSIndexedAccessType,\n) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function TSMappedType(this: Printer, node: t.TSMappedType) {\n const { nameType, optional, readonly, typeAnnotation } = node;\n this.token(\"{\");\n const exit = this.enterDelimited();\n this.space();\n if (readonly) {\n tokenIfPlusMinus(this, readonly);\n this.word(\"readonly\");\n this.space();\n }\n\n this.token(\"[\");\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.word(node.key.name);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.word(node.typeParameter.name);\n }\n\n this.space();\n this.word(\"in\");\n this.space();\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.print(node.constraint);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(node.typeParameter.constraint);\n }\n\n if (nameType) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(nameType);\n }\n\n this.token(\"]\");\n\n if (optional) {\n tokenIfPlusMinus(this, optional);\n this.token(\"?\");\n }\n\n if (typeAnnotation) {\n this.token(\":\");\n this.space();\n this.print(typeAnnotation);\n }\n this.space();\n exit();\n this.token(\"}\");\n}\n\nfunction tokenIfPlusMinus(self: Printer, tok: true | \"+\" | \"-\") {\n if (tok !== true) {\n self.token(tok);\n }\n}\n\nexport function TSLiteralType(this: Printer, node: t.TSLiteralType) {\n this.print(node.literal);\n}\n\nexport function TSClassImplements(\n this: Printer,\n // TODO(Babel 8): Just use t.TSClassImplements\n node: t.Node & {\n expression: t.TSEntityName;\n typeArguments?: t.TSTypeParameterInstantiation;\n },\n) {\n this.print(node.expression);\n this.print(node.typeArguments);\n}\n\nexport { TSClassImplements as TSInterfaceHeritage };\n\nexport function TSInterfaceDeclaration(\n this: Printer,\n node: t.TSInterfaceDeclaration,\n) {\n const { declare, id, typeParameters, extends: extendz, body } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"interface\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n if (extendz?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(extendz);\n }\n this.space();\n this.print(body);\n}\n\nexport function TSInterfaceBody(this: Printer, node: t.TSInterfaceBody) {\n printBraced(this, node, () => this.printJoin(node.body, true, true));\n}\n\nexport function TSTypeAliasDeclaration(\n this: Printer,\n node: t.TSTypeAliasDeclaration,\n) {\n const { declare, id, typeParameters, typeAnnotation } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"type\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(typeAnnotation);\n this.semicolon();\n}\n\nfunction TSTypeExpression(\n this: Printer,\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n) {\n const { type, expression, typeAnnotation } = node;\n this.print(expression, true);\n this.space();\n this.word(type === \"TSAsExpression\" ? \"as\" : \"satisfies\");\n this.space();\n this.print(typeAnnotation);\n}\n\nexport {\n TSTypeExpression as TSAsExpression,\n TSTypeExpression as TSSatisfiesExpression,\n};\n\nexport function TSTypeAssertion(this: Printer, node: t.TSTypeAssertion) {\n const { typeAnnotation, expression } = node;\n this.token(\"<\");\n this.print(typeAnnotation);\n this.token(\">\");\n this.space();\n this.print(expression);\n}\n\nexport function TSInstantiationExpression(\n this: Printer,\n node: t.TSInstantiationExpression,\n) {\n this.print(node.expression);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters);\n }\n}\n\nexport function TSEnumDeclaration(this: Printer, node: t.TSEnumDeclaration) {\n const { declare, const: isConst, id } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n if (isConst) {\n this.word(\"const\");\n this.space();\n }\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.space();\n\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.body);\n } else {\n // cast to TSEnumBody for Babel 7 AST\n TSEnumBody.call(this, node as unknown as t.TSEnumBody);\n }\n}\n\nexport function TSEnumBody(this: Printer, node: t.TSEnumBody) {\n printBraced(this, node, () =>\n this.printList(\n node.members,\n this.shouldPrintTrailingComma(\"}\") ??\n (process.env.BABEL_8_BREAKING ? false : true),\n true,\n true,\n ),\n );\n}\n\nexport function TSEnumMember(this: Printer, node: t.TSEnumMember) {\n const { id, initializer } = node;\n this.print(id);\n if (initializer) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(initializer);\n }\n}\n\nexport function TSModuleDeclaration(\n this: Printer,\n node: t.TSModuleDeclaration,\n) {\n const { declare, id, kind } = node;\n\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n\n if (process.env.BABEL_8_BREAKING) {\n if (kind !== \"global\") {\n this.word(kind);\n this.space();\n }\n\n this.print(node.id);\n if (!node.body) {\n this.semicolon();\n return;\n }\n this.space();\n this.print(node.body);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n if (!node.global) {\n this.word(kind ?? (id.type === \"Identifier\" ? \"namespace\" : \"module\"));\n this.space();\n }\n\n this.print(id);\n\n if (!node.body) {\n this.semicolon();\n return;\n }\n\n let body = node.body;\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n while (body.type === \"TSModuleDeclaration\") {\n this.token(\".\");\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(body.id);\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n body = body.body;\n }\n\n this.space();\n this.print(body);\n }\n}\n\nexport function TSModuleBlock(this: Printer, node: t.TSModuleBlock) {\n printBraced(this, node, () => this.printSequence(node.body, true));\n}\n\nexport function TSImportType(this: Printer, node: t.TSImportType) {\n const { argument, qualifier, options } = node;\n this.word(\"import\");\n this.token(\"(\");\n this.print(argument);\n if (options) {\n this.token(\",\");\n this.print(options);\n }\n this.token(\")\");\n if (qualifier) {\n this.token(\".\");\n this.print(qualifier);\n }\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSImportEqualsDeclaration(\n this: Printer,\n node: t.TSImportEqualsDeclaration,\n) {\n const { isExport, id, moduleReference } = node;\n if (isExport) {\n this.word(\"export\");\n this.space();\n }\n this.word(\"import\");\n this.space();\n this.print(id);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(moduleReference);\n this.semicolon();\n}\n\nexport function TSExternalModuleReference(\n this: Printer,\n node: t.TSExternalModuleReference,\n) {\n this.token(\"require(\");\n this.print(node.expression);\n this.token(\")\");\n}\n\nexport function TSNonNullExpression(\n this: Printer,\n node: t.TSNonNullExpression,\n) {\n this.print(node.expression);\n this.token(\"!\");\n}\n\nexport function TSExportAssignment(this: Printer, node: t.TSExportAssignment) {\n this.word(\"export\");\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function TSNamespaceExportDeclaration(\n this: Printer,\n node: t.TSNamespaceExportDeclaration,\n) {\n this.word(\"export\");\n this.space();\n this.word(\"as\");\n this.space();\n this.word(\"namespace\");\n this.space();\n this.print(node.id);\n this.semicolon();\n}\n\nexport function tsPrintSignatureDeclarationBase(this: Printer, node: any) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? node.params\n : node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n const returnType = process.env.BABEL_8_BREAKING\n ? node.returnType\n : node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function tsPrintClassMemberModifiers(\n this: Printer,\n node:\n | t.ClassProperty\n | t.ClassAccessorProperty\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.TSDeclareMethod,\n) {\n const isField =\n node.type === \"ClassAccessorProperty\" || node.type === \"ClassProperty\";\n printModifiersList(this, node, [\n isField && node.declare && \"declare\",\n node.accessibility,\n ]);\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n printModifiersList(this, node, [\n node.override && \"override\",\n node.abstract && \"abstract\",\n isField && node.readonly && \"readonly\",\n ]);\n}\n\nfunction printBraced(printer: Printer, node: t.Node, cb: () => void) {\n printer.token(\"{\");\n const exit = printer.enterDelimited();\n cb();\n exit();\n printer.rightBrace(node);\n}\n\nfunction printModifiersList(\n printer: Printer,\n node: t.Node,\n modifiers: (string | false | null)[],\n) {\n const modifiersSet = new Set();\n for (const modifier of modifiers) {\n if (modifier) modifiersSet.add(modifier);\n }\n\n printer.tokenMap?.find(node, tok => {\n if (modifiersSet.has(tok.value)) {\n printer.token(tok.value);\n printer.space();\n modifiersSet.delete(tok.value);\n return modifiersSet.size === 0;\n }\n });\n\n for (const modifier of modifiersSet) {\n printer.word(modifier);\n printer.space();\n }\n}\n","import * as whitespace from \"./whitespace.ts\";\nimport * as parens from \"./parentheses.ts\";\nimport {\n FLIPPED_ALIAS_KEYS,\n VISITOR_KEYS,\n isCallExpression,\n isDecorator,\n isExpressionStatement,\n isMemberExpression,\n isNewExpression,\n isParenthesizedExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport type { WhitespaceFlag } from \"./whitespace.ts\";\n\nexport const enum TokenContext {\n expressionStatement = 1 << 0,\n arrowBody = 1 << 1,\n exportDefault = 1 << 2,\n forHead = 1 << 3,\n forInHead = 1 << 4,\n forOfHead = 1 << 5,\n arrowFlowReturnType = 1 << 6,\n}\n\ntype NodeHandler = (\n node: t.Node,\n // todo:\n // node: K extends keyof typeof t\n // ? Extract\n // : t.Node,\n parent: t.Node,\n tokenContext?: number,\n inForStatementInit?: boolean,\n getRawIdentifier?: (node: t.Identifier) => string,\n) => R;\n\nexport type NodeHandlers = {\n [K in string]?: NodeHandler;\n};\n\nfunction expandAliases(obj: NodeHandlers) {\n const map = new Map>();\n\n function add(type: string, func: NodeHandler) {\n const fn = map.get(type);\n map.set(\n type,\n fn\n ? function (node, parent, stack, inForInit, getRawIdentifier) {\n return (\n fn(node, parent, stack, inForInit, getRawIdentifier) ??\n func(node, parent, stack, inForInit, getRawIdentifier)\n );\n }\n : func,\n );\n }\n\n for (const type of Object.keys(obj)) {\n const aliases = FLIPPED_ALIAS_KEYS[type];\n if (aliases) {\n for (const alias of aliases) {\n add(alias, obj[type]);\n }\n } else {\n add(type, obj[type]);\n }\n }\n\n return map;\n}\n\n// Rather than using `t.is` on each object property, we pre-expand any type aliases\n// into concrete types so that the 'find' call below can be as fast as possible.\nconst expandedParens = expandAliases(parens);\nconst expandedWhitespaceNodes = expandAliases(whitespace.nodes);\n\nfunction isOrHasCallExpression(node: t.Node): boolean {\n if (isCallExpression(node)) {\n return true;\n }\n\n return isMemberExpression(node) && isOrHasCallExpression(node.object);\n}\n\nexport function needsWhitespace(\n node: t.Node,\n parent: t.Node,\n type: WhitespaceFlag,\n): boolean {\n if (!node) return false;\n\n if (isExpressionStatement(node)) {\n node = node.expression;\n }\n\n const flag = expandedWhitespaceNodes.get(node.type)?.(node, parent);\n\n if (typeof flag === \"number\") {\n return (flag & type) !== 0;\n }\n\n return false;\n}\n\nexport function needsWhitespaceBefore(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 1);\n}\n\nexport function needsWhitespaceAfter(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 2);\n}\n\nexport function needsParens(\n node: t.Node,\n parent: t.Node,\n tokenContext?: number,\n inForInit?: boolean,\n getRawIdentifier?: (node: t.Identifier) => string,\n) {\n if (!parent) return false;\n\n if (isNewExpression(parent) && parent.callee === node) {\n if (isOrHasCallExpression(node)) return true;\n }\n\n if (isDecorator(parent)) {\n return (\n !isDecoratorMemberExpression(node) &&\n !(isCallExpression(node) && isDecoratorMemberExpression(node.callee)) &&\n !isParenthesizedExpression(node)\n );\n }\n\n return expandedParens.get(node.type)?.(\n node,\n parent,\n tokenContext,\n inForInit,\n getRawIdentifier,\n );\n}\n\nfunction isDecoratorMemberExpression(node: t.Node): boolean {\n switch (node.type) {\n case \"Identifier\":\n return true;\n case \"MemberExpression\":\n return (\n !node.computed &&\n node.property.type === \"Identifier\" &&\n isDecoratorMemberExpression(node.object)\n );\n default:\n return false;\n }\n}\n\nexport function isLastChild(parent: t.Node, child: t.Node) {\n const visitorKeys = VISITOR_KEYS[parent.type];\n for (let i = visitorKeys.length - 1; i >= 0; i--) {\n const val = (parent as any)[visitorKeys[i]] as t.Node | t.Node[] | null;\n if (val === child) {\n return true;\n } else if (Array.isArray(val)) {\n let j = val.length - 1;\n while (j >= 0 && val[j] === null) j--;\n return j >= 0 && val[j] === child;\n } else if (val) {\n return false;\n }\n }\n return false;\n}\n","import {\n isArrayTypeAnnotation,\n isBinaryExpression,\n isCallExpression,\n isForOfStatement,\n isIndexedAccessType,\n isMemberExpression,\n isObjectPattern,\n isOptionalMemberExpression,\n isYieldExpression,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport { TokenContext } from \"./index.ts\";\n\nconst PRECEDENCE = new Map([\n [\"||\", 0],\n [\"??\", 0],\n [\"|>\", 0],\n [\"&&\", 1],\n [\"|\", 2],\n [\"^\", 3],\n [\"&\", 4],\n [\"==\", 5],\n [\"===\", 5],\n [\"!=\", 5],\n [\"!==\", 5],\n [\"<\", 6],\n [\">\", 6],\n [\"<=\", 6],\n [\">=\", 6],\n [\"in\", 6],\n [\"instanceof\", 6],\n [\">>\", 7],\n [\"<<\", 7],\n [\">>>\", 7],\n [\"+\", 8],\n [\"-\", 8],\n [\"*\", 9],\n [\"/\", 9],\n [\"%\", 9],\n [\"**\", 10],\n]);\n\nfunction getBinaryPrecedence(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n nodeType: string,\n): number;\nfunction getBinaryPrecedence(\n node: t.Node,\n nodeType: string,\n): number | undefined;\nfunction getBinaryPrecedence(node: t.Node, nodeType: string) {\n if (nodeType === \"BinaryExpression\" || nodeType === \"LogicalExpression\") {\n return PRECEDENCE.get((node as t.Binary).operator);\n }\n if (nodeType === \"TSAsExpression\" || nodeType === \"TSSatisfiesExpression\") {\n return PRECEDENCE.get(\"in\");\n }\n}\n\nfunction isTSTypeExpression(nodeType: string) {\n return (\n nodeType === \"TSAsExpression\" ||\n nodeType === \"TSSatisfiesExpression\" ||\n nodeType === \"TSTypeAssertion\"\n );\n}\n\nconst isClassExtendsClause = (\n node: t.Node,\n parent: t.Node,\n): parent is t.Class => {\n const parentType = parent.type;\n return (\n (parentType === \"ClassDeclaration\" || parentType === \"ClassExpression\") &&\n parent.superClass === node\n );\n};\n\nconst hasPostfixPart = (node: t.Node, parent: t.Node) => {\n const parentType = parent.type;\n return (\n ((parentType === \"MemberExpression\" ||\n parentType === \"OptionalMemberExpression\") &&\n parent.object === node) ||\n ((parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\") &&\n parent.callee === node) ||\n (parentType === \"TaggedTemplateExpression\" && parent.tag === node) ||\n parentType === \"TSNonNullExpression\"\n );\n};\n\nexport function NullableTypeAnnotation(\n node: t.NullableTypeAnnotation,\n parent: t.Node,\n): boolean {\n return isArrayTypeAnnotation(parent);\n}\n\nexport function FunctionTypeAnnotation(\n node: t.FunctionTypeAnnotation,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n const parentType = parent.type;\n return (\n // (() => A) | (() => B)\n parentType === \"UnionTypeAnnotation\" ||\n // (() => A) & (() => B)\n parentType === \"IntersectionTypeAnnotation\" ||\n // (() => A)[]\n parentType === \"ArrayTypeAnnotation\" ||\n Boolean(tokenContext & TokenContext.arrowFlowReturnType)\n );\n}\n\nexport function UpdateExpression(\n node: t.UpdateExpression,\n parent: t.Node,\n): boolean {\n return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);\n}\n\nfunction needsParenBeforeExpressionBrace(tokenContext: number) {\n return Boolean(\n tokenContext & (TokenContext.expressionStatement | TokenContext.arrowBody),\n );\n}\n\nexport function ObjectExpression(\n node: t.ObjectExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return needsParenBeforeExpressionBrace(tokenContext);\n}\n\nexport function DoExpression(\n node: t.DoExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n // `async do` can start an expression statement\n return (\n !node.async && Boolean(tokenContext & TokenContext.expressionStatement)\n );\n}\n\nexport function Binary(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean | undefined {\n const parentType = parent.type;\n if (\n node.type === \"BinaryExpression\" &&\n node.operator === \"**\" &&\n parentType === \"BinaryExpression\" &&\n parent.operator === \"**\"\n ) {\n return parent.left === node;\n }\n\n if (isClassExtendsClause(node, parent)) {\n return true;\n }\n\n if (\n hasPostfixPart(node, parent) ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"AwaitExpression\"\n ) {\n return true;\n }\n\n const parentPos = getBinaryPrecedence(parent, parentType);\n if (parentPos != null) {\n const nodePos = getBinaryPrecedence(node, node.type);\n if (\n // Logical expressions with the same precedence don't need parens.\n (parentPos === nodePos &&\n parentType === \"BinaryExpression\" &&\n parent.right === node) ||\n parentPos > nodePos\n ) {\n return true;\n }\n }\n\n return undefined;\n}\n\nexport function UnionTypeAnnotation(\n node: t.UnionTypeAnnotation,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"ArrayTypeAnnotation\" ||\n parentType === \"NullableTypeAnnotation\" ||\n parentType === \"IntersectionTypeAnnotation\" ||\n parentType === \"UnionTypeAnnotation\"\n );\n}\n\nexport { UnionTypeAnnotation as IntersectionTypeAnnotation };\n\nexport function OptionalIndexedAccessType(\n node: t.OptionalIndexedAccessType,\n parent: t.Node,\n): boolean {\n return isIndexedAccessType(parent) && parent.objectType === node;\n}\n\nexport function TSAsExpression(\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean {\n if (\n (parent.type === \"AssignmentExpression\" ||\n parent.type === \"AssignmentPattern\") &&\n parent.left === node\n ) {\n return true;\n }\n if (\n parent.type === \"BinaryExpression\" &&\n (parent.operator === \"|\" || parent.operator === \"&\") &&\n node === parent.left\n ) {\n return true;\n }\n return Binary(node, parent);\n}\n\nexport { TSAsExpression as TSSatisfiesExpression };\n\nexport { UnaryLike as TSTypeAssertion };\n\nexport function TSUnionType(node: t.TSUnionType, parent: t.Node): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSArrayType\" ||\n parentType === \"TSOptionalType\" ||\n parentType === \"TSIntersectionType\" ||\n parentType === \"TSRestType\"\n );\n}\n\nexport { TSUnionType as TSIntersectionType };\n\nexport function TSInferType(node: t.TSInferType, parent: t.Node): boolean {\n const parentType = parent.type;\n return parentType === \"TSArrayType\" || parentType === \"TSOptionalType\";\n}\n\nexport function TSInstantiationExpression(\n node: t.TSInstantiationExpression,\n parent: t.Node,\n) {\n const parentType = parent.type;\n return (\n (parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\" ||\n parentType === \"TSInstantiationExpression\") &&\n !!(process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n parent.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n parent.typeParameters)\n );\n}\n\nexport function BinaryExpression(\n node: t.BinaryExpression,\n parent: t.Node,\n tokenContext: unknown,\n inForStatementInit: boolean,\n): boolean {\n // for ((1 in []);;);\n // for (var x = (1 in []) in 2);\n return node.operator === \"in\" && inForStatementInit;\n}\n\nexport function SequenceExpression(\n node: t.SequenceExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"SequenceExpression\" ||\n parentType === \"ParenthesizedExpression\" ||\n (parentType === \"MemberExpression\" && parent.property === node) ||\n (parentType === \"OptionalMemberExpression\" && parent.property === node) ||\n parentType === \"TemplateLiteral\"\n ) {\n return false;\n }\n if (parentType === \"ClassDeclaration\") {\n return true;\n }\n if (parentType === \"ForOfStatement\") {\n return parent.right === node;\n }\n if (parentType === \"ExportDefaultDeclaration\") {\n return true;\n }\n\n return !isStatement(parent);\n}\n\nexport function YieldExpression(\n node: t.YieldExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n hasPostfixPart(node, parent) ||\n (parentType === \"AwaitExpression\" && isYieldExpression(node)) ||\n (parentType === \"ConditionalExpression\" && node === parent.test) ||\n isClassExtendsClause(node, parent) ||\n isTSTypeExpression(parentType)\n );\n}\n\nexport { YieldExpression as AwaitExpression };\n\nexport function ClassExpression(\n node: t.ClassExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function UnaryLike(\n node:\n | t.UnaryLike\n | t.TSTypeAssertion\n | t.ArrowFunctionExpression\n | t.ConditionalExpression\n | t.AssignmentExpression,\n parent: t.Node,\n): boolean {\n return (\n hasPostfixPart(node, parent) ||\n (isBinaryExpression(parent) &&\n parent.operator === \"**\" &&\n parent.left === node) ||\n isClassExtendsClause(node, parent)\n );\n}\n\nexport function FunctionExpression(\n node: t.FunctionExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function ConditionalExpression(\n node:\n | t.ConditionalExpression\n | t.ArrowFunctionExpression\n | t.AssignmentExpression,\n parent?: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n (parentType === \"ConditionalExpression\" && parent.test === node) ||\n parentType === \"AwaitExpression\" ||\n isTSTypeExpression(parentType)\n ) {\n return true;\n }\n\n return UnaryLike(node, parent);\n}\n\nexport { ConditionalExpression as ArrowFunctionExpression };\n\nexport function OptionalMemberExpression(\n node: t.OptionalMemberExpression,\n parent: t.Node,\n): boolean {\n return (\n (isCallExpression(parent) && parent.callee === node) ||\n (isMemberExpression(parent) && parent.object === node)\n );\n}\n\nexport { OptionalMemberExpression as OptionalCallExpression };\n\nexport function AssignmentExpression(\n node: t.AssignmentExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n if (\n needsParenBeforeExpressionBrace(tokenContext) &&\n isObjectPattern(node.left)\n ) {\n return true;\n } else {\n return ConditionalExpression(node, parent);\n }\n}\n\nexport function LogicalExpression(\n node: t.LogicalExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (isTSTypeExpression(parentType)) return true;\n if (parentType !== \"LogicalExpression\") return false;\n switch (node.operator) {\n case \"||\":\n return parent.operator === \"??\" || parent.operator === \"&&\";\n case \"&&\":\n return parent.operator === \"??\";\n case \"??\":\n return parent.operator !== \"??\";\n }\n}\n\nexport function Identifier(\n node: t.Identifier,\n parent: t.Node,\n tokenContext: number,\n _inForInit: boolean,\n getRawIdentifier: (node: t.Identifier) => string,\n): boolean {\n const parentType = parent.type;\n // 13.15.2 AssignmentExpression RS: Evaluation\n // (fn) = function () {};\n if (\n node.extra?.parenthesized &&\n parentType === \"AssignmentExpression\" &&\n parent.left === node\n ) {\n const rightType = parent.right.type;\n if (\n (rightType === \"FunctionExpression\" || rightType === \"ClassExpression\") &&\n parent.right.id == null\n ) {\n return true;\n }\n }\n\n if (getRawIdentifier && getRawIdentifier(node) !== node.name) {\n return false;\n }\n\n // Non-strict code allows the identifier `let`, but it cannot occur as-is in\n // certain contexts to avoid ambiguity with contextual keyword `let`.\n if (node.name === \"let\") {\n // Some contexts only forbid `let [`, so check if the next token would\n // be the left bracket of a computed member expression.\n const isFollowedByBracket =\n isMemberExpression(parent, {\n object: node,\n computed: true,\n }) ||\n isOptionalMemberExpression(parent, {\n object: node,\n computed: true,\n optional: false,\n });\n if (\n isFollowedByBracket &&\n tokenContext &\n (TokenContext.expressionStatement |\n TokenContext.forHead |\n TokenContext.forInHead)\n ) {\n return true;\n }\n return Boolean(tokenContext & TokenContext.forOfHead);\n }\n\n // ECMAScript specifically forbids a for-of loop from starting with the\n // token sequence `for (async of`, because it would be ambiguous with\n // `for (async of => {};;)`, so we need to add extra parentheses.\n return (\n node.name === \"async\" &&\n isForOfStatement(parent, { left: node, await: false })\n );\n}\n","import {\n FLIPPED_ALIAS_KEYS,\n isArrayExpression,\n isAssignmentExpression,\n isBinary,\n isBlockStatement,\n isCallExpression,\n isFunction,\n isIdentifier,\n isLiteral,\n isMemberExpression,\n isObjectExpression,\n isOptionalCallExpression,\n isOptionalMemberExpression,\n isStringLiteral,\n} from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nimport type { NodeHandlers } from \"./index.ts\";\n\nimport type * as t from \"@babel/types\";\n\nconst enum WhitespaceFlag {\n before = 1 << 0,\n after = 1 << 1,\n}\n\nexport type { WhitespaceFlag };\n\nfunction crawlInternal(\n node: t.Node,\n state: { hasCall: boolean; hasFunction: boolean; hasHelper: boolean },\n) {\n if (!node) return state;\n\n if (isMemberExpression(node) || isOptionalMemberExpression(node)) {\n crawlInternal(node.object, state);\n if (node.computed) crawlInternal(node.property, state);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n crawlInternal(node.left, state);\n crawlInternal(node.right, state);\n } else if (isCallExpression(node) || isOptionalCallExpression(node)) {\n state.hasCall = true;\n crawlInternal(node.callee, state);\n } else if (isFunction(node)) {\n state.hasFunction = true;\n } else if (isIdentifier(node)) {\n state.hasHelper =\n // @ts-expect-error todo(flow->ts): node.callee is not really expected here…\n state.hasHelper || (node.callee && isHelper(node.callee));\n }\n\n return state;\n}\n\n/**\n * Crawl a node to test if it contains a CallExpression, a Function, or a Helper.\n *\n * @example\n * crawl(node)\n * // { hasCall: false, hasFunction: true, hasHelper: false }\n */\n\nfunction crawl(node: t.Node) {\n return crawlInternal(node, {\n hasCall: false,\n hasFunction: false,\n hasHelper: false,\n });\n}\n\n/**\n * Test if a node is or has a helper.\n */\n\nfunction isHelper(node: t.Node): boolean {\n if (!node) return false;\n\n if (isMemberExpression(node)) {\n return isHelper(node.object) || isHelper(node.property);\n } else if (isIdentifier(node)) {\n return (\n node.name === \"require\" ||\n node.name.charCodeAt(0) === charCodes.underscore\n );\n } else if (isCallExpression(node)) {\n return isHelper(node.callee);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n return (\n (isIdentifier(node.left) && isHelper(node.left)) || isHelper(node.right)\n );\n } else {\n return false;\n }\n}\n\nfunction isType(node: t.Node) {\n return (\n isLiteral(node) ||\n isObjectExpression(node) ||\n isArrayExpression(node) ||\n isIdentifier(node) ||\n isMemberExpression(node)\n );\n}\n\n/**\n * Tests for node types that need whitespace.\n */\n\nexport const nodes: NodeHandlers = {\n /**\n * Test if AssignmentExpression needs whitespace.\n */\n\n AssignmentExpression(node: t.AssignmentExpression): WhitespaceFlag {\n const state = crawl(node.right);\n if ((state.hasCall && state.hasHelper) || state.hasFunction) {\n return state.hasFunction\n ? WhitespaceFlag.before | WhitespaceFlag.after\n : WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if SwitchCase needs whitespace.\n */\n\n SwitchCase(node: t.SwitchCase, parent: t.SwitchStatement): WhitespaceFlag {\n return (\n (!!node.consequent.length || parent.cases[0] === node\n ? WhitespaceFlag.before\n : 0) |\n (!node.consequent.length && parent.cases[parent.cases.length - 1] === node\n ? WhitespaceFlag.after\n : 0)\n );\n },\n\n /**\n * Test if LogicalExpression needs whitespace.\n */\n\n LogicalExpression(node: t.LogicalExpression): WhitespaceFlag {\n if (isFunction(node.left) || isFunction(node.right)) {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if Literal needs whitespace.\n */\n\n Literal(node: t.Literal): WhitespaceFlag {\n if (isStringLiteral(node) && node.value === \"use strict\") {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if CallExpressionish needs whitespace.\n */\n\n CallExpression(node: t.CallExpression): WhitespaceFlag {\n if (isFunction(node.callee) || isHelper(node)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n OptionalCallExpression(node: t.OptionalCallExpression): WhitespaceFlag {\n if (isFunction(node.callee)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if VariableDeclaration needs whitespace.\n */\n\n VariableDeclaration(node: t.VariableDeclaration): WhitespaceFlag {\n for (let i = 0; i < node.declarations.length; i++) {\n const declar = node.declarations[i];\n\n let enabled = isHelper(declar.id) && !isType(declar.init);\n if (!enabled && declar.init) {\n const state = crawl(declar.init);\n enabled = (isHelper(declar.init) && state.hasCall) || state.hasFunction;\n }\n\n if (enabled) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n }\n },\n\n /**\n * Test if IfStatement needs whitespace.\n */\n\n IfStatement(node: t.IfStatement): WhitespaceFlag {\n if (isBlockStatement(node.consequent)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n};\n\n/**\n * Test if Property needs whitespace.\n */\n\nnodes.ObjectProperty =\n nodes.ObjectTypeProperty =\n nodes.ObjectMethod =\n function (\n node: t.ObjectProperty | t.ObjectTypeProperty | t.ObjectMethod,\n parent: t.ObjectExpression,\n ): WhitespaceFlag {\n if (parent.properties[0] === node) {\n return WhitespaceFlag.before;\n }\n };\n\nnodes.ObjectTypeCallProperty = function (\n node: t.ObjectTypeCallProperty,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (parent.callProperties[0] === node && !parent.properties?.length) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeIndexer = function (\n node: t.ObjectTypeIndexer,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.indexers[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeInternalSlot = function (\n node: t.ObjectTypeInternalSlot,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.internalSlots[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length &&\n !parent.indexers?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\n/**\n * Add whitespace tests for nodes and their aliases.\n */\n\n(\n [\n [\"Function\", true],\n [\"Class\", true],\n [\"Loop\", true],\n [\"LabeledStatement\", true],\n [\"SwitchStatement\", true],\n [\"TryStatement\", true],\n ] as const\n).forEach(function ([type, amounts]) {\n [type as string]\n .concat(FLIPPED_ALIAS_KEYS[type] || [])\n .forEach(function (type) {\n const ret = amounts ? WhitespaceFlag.before | WhitespaceFlag.after : 0;\n nodes[type] = () => ret;\n });\n});\n","import Buffer, { type Pos } from \"./buffer.ts\";\nimport type { Loc } from \"./buffer.ts\";\nimport * as n from \"./node/index.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n isExpression,\n isFunction,\n isStatement,\n isClassBody,\n isTSInterfaceBody,\n isTSEnumMember,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport { TokenMap } from \"./token-map.ts\";\nimport type { GeneratorOptions } from \"./index.ts\";\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport {\n addDeprecatedGenerators,\n type DeprecatedBabel7ASTTypes,\n} from \"./generators/deprecated.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\nimport type { Token } from \"@babel/parser\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nconst SCIENTIFIC_NOTATION = /e/i;\nconst ZERO_DECIMAL_INTEGER = /\\.0+$/;\nconst HAS_NEWLINE = /[\\n\\r\\u2028\\u2029]/;\nconst HAS_NEWLINE_OR_BlOCK_COMMENT_END = /[\\n\\r\\u2028\\u2029]|\\*\\//;\n\nfunction commentIsNewline(c: t.Comment) {\n return c.type === \"CommentLine\" || HAS_NEWLINE.test(c.value);\n}\n\nconst { needsParens } = n;\n\nconst enum COMMENT_TYPE {\n LEADING,\n INNER,\n TRAILING,\n}\n\nconst enum COMMENT_SKIP_NEWLINE {\n DEFAULT,\n ALL,\n LEADING,\n TRAILING,\n}\n\nconst enum PRINT_COMMENT_HINT {\n SKIP,\n ALLOW,\n DEFER,\n}\n\nexport type Format = {\n shouldPrintComment: (comment: string) => boolean;\n preserveFormat: boolean;\n retainLines: boolean;\n retainFunctionParens: boolean;\n comments: boolean;\n auxiliaryCommentBefore: string;\n auxiliaryCommentAfter: string;\n compact: boolean | \"auto\";\n minified: boolean;\n concise: boolean;\n indent: {\n adjustMultilineComment: boolean;\n style: string;\n };\n /**\n * @deprecated Removed in Babel 8, syntax type is always 'hash'\n */\n recordAndTupleSyntaxType?: GeneratorOptions[\"recordAndTupleSyntaxType\"];\n jsescOption: jsescOptions;\n /**\n * @deprecated Removed in Babel 8, use `jsescOption` instead\n */\n jsonCompatibleStrings?: boolean;\n /**\n * For use with the Hack-style pipe operator.\n * Changes what token is used for pipe bodies’ topic references.\n */\n topicToken?: GeneratorOptions[\"topicToken\"];\n /**\n * @deprecated Removed in Babel 8\n */\n decoratorsBeforeExport?: boolean;\n /**\n * The import attributes syntax style:\n * - \"with\" : `import { a } from \"b\" with { type: \"json\" };`\n * - \"assert\" : `import { a } from \"b\" assert { type: \"json\" };`\n * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n */\n importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n};\n\ninterface AddNewlinesOptions {\n addNewlines(leading: boolean, node: t.Node): number;\n nextNodeStartLine: number;\n}\n\ninterface PrintSequenceOptions extends Partial {\n statement?: boolean;\n indent?: boolean;\n trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n separator?: (this: Printer, occurrenceCount: number, last: boolean) => void;\n iterator?: (node: t.Node, index: number) => void;\n statement?: boolean;\n indent?: boolean;\n printTrailingSeparator?: boolean;\n}\n\nexport type PrintJoinOptions = PrintListOptions & PrintSequenceOptions;\nclass Printer {\n constructor(\n format: Format,\n map: SourceMap,\n tokens?: Token[],\n originalCode?: string,\n ) {\n this.format = format;\n\n this._tokens = tokens;\n this._originalCode = originalCode;\n\n this._indentRepeat = format.indent.style.length;\n\n this._inputMap = map?._inputMap;\n\n this._buf = new Buffer(map, format.indent.style[0]);\n }\n declare _inputMap: TraceMap;\n\n declare format: Format;\n\n inForStatementInit: boolean = false;\n enterForStatementInit() {\n if (this.inForStatementInit) return () => {};\n this.inForStatementInit = true;\n return () => {\n this.inForStatementInit = false;\n };\n }\n\n enterDelimited() {\n const oldInForStatementInit = this.inForStatementInit;\n const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n if (\n oldInForStatementInit === false &&\n oldNoLineTerminatorAfterNode === null\n ) {\n return () => {};\n }\n this.inForStatementInit = false;\n this._noLineTerminatorAfterNode = null;\n return () => {\n this.inForStatementInit = oldInForStatementInit;\n this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n };\n }\n\n tokenContext: number = 0;\n\n _tokens: Token[] = null;\n _originalCode: string | null = null;\n\n declare _buf: Buffer;\n _currentNode: t.Node = null;\n _indent: number = 0;\n _indentRepeat: number = 0;\n _insideAux: boolean = false;\n _noLineTerminator: boolean = false;\n _noLineTerminatorAfterNode: t.Node | null = null;\n _printAuxAfterOnNextUserNode: boolean = false;\n _printedComments = new Set();\n _endsWithInteger = false;\n _endsWithWord = false;\n _endsWithDiv = false;\n _lastCommentLine = 0;\n _endsWithInnerRaw: boolean = false;\n _indentInnerComments: boolean = true;\n tokenMap: TokenMap = null;\n\n _boundGetRawIdentifier = this._getRawIdentifier.bind(this);\n\n generate(ast: t.Node) {\n if (this.format.preserveFormat) {\n this.tokenMap = new TokenMap(ast, this._tokens, this._originalCode);\n }\n this.print(ast);\n this._maybeAddAuxComment();\n\n return this._buf.get();\n }\n\n /**\n * Increment indent size.\n */\n\n indent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent++;\n }\n\n /**\n * Decrement indent size.\n */\n\n dedent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent--;\n }\n\n /**\n * If the next token is on the same line, we must first print a semicolon.\n * This option is only used in `preserveFormat` node, for semicolons that\n * might have omitted due to them being absent in the original code (thanks\n * to ASI).\n *\n * We need both *NextToken and *NextNode because we only want to insert the\n * semicolon when the next token starts a new node, and not in cases like\n * foo} (where } is not starting a new node). So we first set *NextNode, and\n * then the print() method will move it to *NextToken.\n */\n _printSemicolonBeforeNextNode: number = -1;\n _printSemicolonBeforeNextToken: number = -1;\n\n /**\n * Add a semicolon to the buffer.\n */\n semicolon(force: boolean = false): void {\n this._maybeAddAuxComment();\n if (force) {\n this._appendChar(charCodes.semicolon);\n this._noLineTerminator = false;\n return;\n }\n if (this.tokenMap) {\n const node = this._currentNode;\n if (node.start != null && node.end != null) {\n if (!this.tokenMap.endMatches(node, \";\")) {\n // no semicolon\n this._printSemicolonBeforeNextNode = this._buf.getCurrentLine();\n return;\n }\n const indexes = this.tokenMap.getIndexes(this._currentNode);\n this._catchUpTo(this._tokens[indexes[indexes.length - 1]].loc.start);\n }\n }\n this._queue(charCodes.semicolon);\n this._noLineTerminator = false;\n }\n\n /**\n * Add a right brace to the buffer.\n */\n\n rightBrace(node: t.Node): void {\n if (this.format.minified) {\n this._buf.removeLastSemicolon();\n }\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\"}\");\n }\n\n rightParens(node: t.Node): void {\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\")\");\n }\n\n /**\n * Add a space to the buffer unless it is compact.\n */\n\n space(force: boolean = false): void {\n const { format } = this;\n if (format.compact || format.preserveFormat) return;\n\n if (force) {\n this._space();\n } else if (this._buf.hasContent()) {\n const lastCp = this.getLastChar();\n if (lastCp !== charCodes.space && lastCp !== charCodes.lineFeed) {\n this._space();\n }\n }\n }\n\n /**\n * Writes a token that can't be safely parsed without taking whitespace into account.\n */\n\n word(str: string, noLineTerminatorAfter: boolean = false): void {\n this.tokenContext = 0;\n\n this._maybePrintInnerComments(str);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str);\n\n // prevent concatenating words and creating // comment out of division and regex\n if (\n this._endsWithWord ||\n (this._endsWithDiv && str.charCodeAt(0) === charCodes.slash)\n ) {\n this._space();\n }\n this._append(str, false);\n\n this._endsWithWord = true;\n this._noLineTerminator = noLineTerminatorAfter;\n }\n\n /**\n * Writes a number token so that we can validate if it is an integer.\n */\n\n number(str: string, number?: number): void {\n // const NON_DECIMAL_LITERAL = /^0[box]/;\n function isNonDecimalLiteral(str: string) {\n if (str.length > 2 && str.charCodeAt(0) === charCodes.digit0) {\n const secondChar = str.charCodeAt(1);\n return (\n secondChar === charCodes.lowercaseB ||\n secondChar === charCodes.lowercaseO ||\n secondChar === charCodes.lowercaseX\n );\n }\n return false;\n }\n this.word(str);\n\n // Integer tokens need special handling because they cannot have '.'s inserted\n // immediately after them.\n this._endsWithInteger =\n Number.isInteger(number) &&\n !isNonDecimalLiteral(str) &&\n !SCIENTIFIC_NOTATION.test(str) &&\n !ZERO_DECIMAL_INTEGER.test(str) &&\n str.charCodeAt(str.length - 1) !== charCodes.dot;\n }\n\n /**\n * Writes a simple token.\n *\n * @param {string} str The string to append.\n * @param {boolean} [maybeNewline=false] Wether `str` might potentially\n * contain a line terminator or not.\n * @param {number} [occurrenceCount=0] The occurrence count of this token in\n * the current node. This is used when printing in `preserveFormat` mode,\n * to know which token we should map to (for example, to disambiguate the\n * commas in an array literal).\n */\n token(str: string, maybeNewline = false, occurrenceCount = 0): void {\n this.tokenContext = 0;\n\n this._maybePrintInnerComments(str, occurrenceCount);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str, occurrenceCount);\n\n const lastChar = this.getLastChar();\n const strFirst = str.charCodeAt(0);\n if (\n (lastChar === charCodes.exclamationMark &&\n // space is mandatory to avoid outputting ` line comment\n const comment = this.skipLineComment(3);\n if (comment !== undefined) {\n this.addComment(comment);\n comments?.push(comment);\n }\n } else {\n break loop;\n }\n } else if (\n ch === charCodes.lessThan &&\n !this.inModule &&\n this.optionFlags & OptionFlags.AnnexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n this.input.charCodeAt(pos + 2) === charCodes.dash &&\n this.input.charCodeAt(pos + 3) === charCodes.dash\n ) {\n // `', i + 4, 'Comment is not closed.');\n i = endIndex;\n } else {\n const result = readTagExp(xmlData, i, false);\n let tagName = result.tagName;\n let tagExp = result.tagExp;\n const attrExpPresent = result.attrExpPresent;\n const closeIndex = result.closeIndex;\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? '.' + tagName : tagName;\n }\n if (tagExp.length > 0 && tagExp.lastIndexOf('/') === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === '/') {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n const childNode = new XmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf('.'));\n } else {\n const childNode = new XmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = '';\n i = closeIndex;\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n }\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\n/**\n *\n * @param {array} node\n * @param {any} options\n * @returns\n */\nexport function prettify(node: any, options: any) {\n return compress(node);\n}\n\n/**\n *\n * @param {array} arr\n * @param {object} options\n * @param {string} jPath\n * @returns object\n */\nfunction compress(arr: any, jPath?: any) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = '';\n if (jPath === undefined) {\n newJpath = property;\n } else {\n newJpath = jPath + '.' + property;\n }\n\n if (property === undefined) {\n continue;\n } else if (tagObj[property]) {\n const val = compress(tagObj[property], newJpath);\n const isLeaf = isLeafTag(val);\n\n if (tagObj[':@']) {\n assignAttributes(val, tagObj[':@'], newJpath);\n }\n\n if (compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val);\n } else {\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n compressedObj[property] = val;\n }\n }\n }\n return compressedObj;\n}\n\nfunction propName(obj: any) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== ':@') {\n return key;\n }\n }\n}\n\nfunction assignAttributes(obj: any, attrMap: any, jpath: any) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n obj[atrrName] = attrMap[atrrName];\n }\n }\n}\n\nfunction isLeafTag(obj: any) {\n const propCount = Object.keys(obj).length;\n\n if (propCount === 0) {\n return true;\n }\n\n return false;\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\nimport { OrderedObjParser } from './OrderedObjParser';\nimport { prettify } from './node2json';\nimport type { X2jOptions } from './type';\n\nexport class XMLParser {\n static defaultOptions: Partial = {};\n options: Partial;\n\n constructor(options?: Partial) {\n this.options = Object.assign({}, XMLParser.defaultOptions, options);\n }\n\n valid(xml: string) {\n return xml.startsWith('<');\n }\n\n parse(xmlData: string): any {\n if (!this.valid) {\n return false;\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n return prettify(orderedResult, this.options);\n }\n}\n\nexport function isSvg(str: string) {\n return str.startsWith(',\n aabbBounds: IAABBBounds\n): IAABBBounds => {\n const {\n outerBorder,\n shadowBlur = symbolTheme.shadowBlur,\n strokeBoundsBuffer = symbolTheme.strokeBoundsBuffer\n } = attribute;\n\n if (outerBorder) {\n const defaultOuterBorder = symbolTheme.outerBorder;\n const { distance = defaultOuterBorder.distance, lineWidth = defaultOuterBorder.lineWidth } = outerBorder;\n\n // Symbol的distance一定是number\n boundStroke(aabbBounds, (distance as number) + (shadowBlur + lineWidth) / 2, true, strokeBoundsBuffer);\n }\n return aabbBounds;\n};\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { isArray, max } from '@visactor/vutils';\nimport type { ISymbol, ISymbolClass, ISymbolGraphicAttribute } from '../interface';\nimport { builtinSymbolsMap, builtInSymbolStrMap, CustomSymbolClass } from './builtin-symbol';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { SVG_PARSE_ATTRIBUTE_MAP, SVG_PARSE_ATTRIBUTE_MAP_KEYS, SYMBOL_NUMBER_TYPE } from './constants';\nimport { XMLParser } from '../common/xml';\nimport { isSvg } from '../common/xml/parser';\nimport { updateBoundsOfSymbolOuterBorder } from './graphic-service/symbol-outer-border-bounds';\n\nconst _tempBounds = new AABBBounds();\n\nconst SYMBOL_UPDATE_TAG_KEY = ['symbolType', 'size', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * symbol\n */\nexport class Symbol extends Graphic implements ISymbol {\n type: 'symbol' = 'symbol';\n\n static userSymbolMap: Record = {};\n\n static NOWORK_ANIMATE_ATTR = {\n symbolType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: ISymbolGraphicAttribute = { symbolType: 'circle' }) {\n super(params);\n this.numberType = SYMBOL_NUMBER_TYPE;\n }\n\n protected _parsedPath?: ISymbolClass;\n\n getParsedPath(): ISymbolClass {\n if (this.shouldUpdateShape()) {\n this.doUpdateParsedPath();\n this.clearUpdateShapeTag();\n }\n return this._parsedPath as ISymbolClass;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { size } = this.attribute;\n return isArray(size) ? size.length === 2 && size.every(this._validNumber) : this._validNumber(size);\n }\n\n protected doUpdateParsedPath(): ISymbolClass {\n const symbolTheme = this.getGraphicTheme();\n // 查找内置symbol\n let { symbolType = symbolTheme.symbolType } = this.attribute;\n let path = builtinSymbolsMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n path = Symbol.userSymbolMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n\n const _symbolType = builtInSymbolStrMap[symbolType];\n symbolType = _symbolType || symbolType;\n // 判断是否是svg\n const valid = isSvg(symbolType);\n if (valid === true) {\n const parser = new XMLParser();\n const { svg } = parser.parse(symbolType);\n if (!svg) {\n return null;\n }\n const path = isArray(svg.path) ? svg.path : [svg.path];\n _tempBounds.clear();\n const cacheList: { path: CustomPath2D; attribute: Record }[] = [];\n path.forEach((item: any) => {\n const cache = new CustomPath2D().fromString(item.d);\n const attribute: any = {};\n SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach(k => {\n if (item[k]) {\n (attribute as any)[(SVG_PARSE_ATTRIBUTE_MAP as any)[k]] = item[k];\n }\n });\n // 查找\n cacheList.push({\n path: cache,\n attribute\n });\n _tempBounds.union(cache.bounds);\n });\n const width = _tempBounds.width();\n const height = _tempBounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cacheList.forEach(cache => cache.path.transform(0, 0, scale, scale));\n\n this._parsedPath = new CustomSymbolClass(symbolType, cacheList, true);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n const cache = new CustomPath2D().fromString(symbolType);\n const width = cache.bounds.width();\n const height = cache.bounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cache.transform(0, 0, scale, scale);\n this._parsedPath = new CustomSymbolClass(symbolType, cache);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).symbol;\n }\n\n protected updateAABBBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n full?: boolean\n ) {\n if (!this.updatePathProxyAABBBounds(aabbBounds)) {\n full\n ? this.updateSymbolAABBBoundsImprecise(attribute, symbolTheme, aabbBounds)\n : this.updateSymbolAABBBoundsAccurate(attribute, symbolTheme, aabbBounds);\n }\n\n const { tb1, tb2 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n updateBoundsOfSymbolOuterBorder(attribute, symbolTheme, tb1);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n\n const { lineJoin = symbolTheme.lineJoin } = attribute;\n application.graphicService.transformAABBBounds(attribute, aabbBounds, symbolTheme, lineJoin === 'miter', this);\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsImprecise(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds\n ): IAABBBounds {\n // 当做正方形计算\n const { size = symbolTheme.size } = attribute;\n\n if (isArray(size)) {\n aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);\n } else {\n const halfWH = size / 2;\n\n aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);\n }\n\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsAccurate(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds\n ): IAABBBounds {\n const { size = symbolTheme.size } = attribute;\n\n const symbolClass = this.getParsedPath();\n symbolClass.bounds(size, aabbBounds);\n\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, SYMBOL_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, SYMBOL_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const symbolInstance = this.getParsedPath();\n const size = this.attribute.size;\n const x = 0;\n const y = 0;\n const formattedSize = isArray(size) ? size : [size, size];\n\n return symbolInstance.path\n ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, x, y, formattedSize[0], formattedSize[1])\n : new CustomPath2D().fromString(symbolInstance.pathStr, x, y, formattedSize[0], formattedSize[1]);\n }\n\n clone() {\n return new Symbol({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Symbol.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createSymbol(attributes: ISymbolGraphicAttribute): ISymbol {\n return new Symbol(attributes);\n}\n\n// addAttributeToPrototype(DefaultSymbolStyle, Symbol, PURE_STYLE_KEY);\n","import { createSymbol } from '../graphic/symbol';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerSymbolGraphic() {\n graphicCreator.RegisterGraphicCreator('symbol', createSymbol);\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext,\n IBorderStyle,\n IBaseRenderContribution,\n ICustomPath2D\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultSymbolRenderContribution implements ISymbolRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n symbolAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { outerBorder, innerBorder } = symbol.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n\n const {\n size = symbolAttribute.size,\n opacity = symbolAttribute.opacity,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY,\n keepStrokeScale = symbolAttribute.keepStrokeScale\n } = symbol.attribute;\n\n const renderBorder = (borderStyle: Partial, key: 'outerBorder' | 'innerBorder') => {\n const doStroke = !!(borderStyle && borderStyle.stroke);\n\n const { distance = symbolAttribute[key].distance } = borderStyle;\n const d = keepStrokeScale ? (distance as number) : getScaledStroke(context, distance as number, context.dpr);\n const sign = key === 'outerBorder' ? 1 : -1;\n\n context.beginPath();\n if (parsedPath.drawOffset(context, size, x, y, sign * d) === false) {\n context.closePath();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n if (strokeCb) {\n strokeCb(context, borderStyle, symbolAttribute[key]);\n } else if (doStroke) {\n // 存在stroke\n const lastOpacity = (symbolAttribute[key] as any).opacity;\n (symbolAttribute[key] as any).opacity = opacity;\n context.setStrokeStyle(\n symbol,\n borderStyle,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute[key] as any\n );\n (symbolAttribute[key] as any).opacity = lastOpacity;\n context.stroke();\n }\n };\n\n doOuterBorder && renderBorder(outerBorder, 'outerBorder');\n doInnerBorder && renderBorder(innerBorder, 'innerBorder');\n }\n}\n\nexport class DefaultSymbolClipRangeStrokeRenderContribution\n implements IBaseRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n\n drawShape(\n graphic: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const {\n clipRange = graphicAttribute.clipRange,\n x: originX = graphicAttribute.x,\n y: originY = graphicAttribute.y,\n z = graphicAttribute.z,\n size = graphicAttribute.size,\n scaleX = graphicAttribute.scaleX,\n scaleY = graphicAttribute.scaleY\n } = graphic.attribute;\n const parsedPath = graphic.getParsedPath();\n // todo: 考虑使用path\n if (!(parsedPath && clipRange < 1 && clipRange > 0)) {\n return;\n }\n\n const callback = (p: ICustomPath2D, a: any) => {\n // 如果是svg的话,合并一下fill和stroke\n if (graphic._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? graphic.attribute.fill;\n obj.opacity = a.opacity ?? graphic.attribute.opacity;\n obj.fillOpacity = graphic.attribute.fillOpacity;\n obj.stroke = a.stroke ?? graphic.attribute.stroke;\n obj.lineWidth = a.lineWidth ?? graphic.attribute.lineWidth;\n a = obj;\n }\n\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, graphic.attribute, graphicAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(graphic, a, (originX - x) / scaleX, (originY - y) / scaleY, graphicAttribute);\n context.stroke();\n }\n }\n };\n\n context.beginPath();\n parsedPath.drawWithClipRange && parsedPath.drawWithClipRange(context, size, x, y, clipRange, z, callback);\n\n if (doStroke && !parsedPath.isSvg) {\n if (strokeCb) {\n strokeCb(context, graphic.attribute, graphicAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(\n graphic,\n graphic.attribute,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n graphicAttribute\n );\n context.stroke();\n }\n }\n }\n}\n\nexport const defaultSymbolRenderContribution = new DefaultSymbolRenderContribution();\nexport const defaultSymbolClipRangeStrokeRenderContribution = new DefaultSymbolClipRangeStrokeRenderContribution();\nexport const defaultSymbolTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultSymbolBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { inject, injectable, named } from '../../../common/inversify-lite';\n// eslint-disable-next-line\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { getTheme } from '../../../graphic/theme';\nimport { SYMBOL_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n ICustomPath2D\n} from '../../../interface';\nimport type {} from '../../render-service';\nimport { BaseRender } from './base-render';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { isArray } from '@visactor/vutils';\nimport {\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolClipRangeStrokeRenderContribution,\n defaultSymbolRenderContribution,\n defaultSymbolTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasSymbolRender extends BaseRender implements IGraphicRender {\n type: 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(SymbolRenderContribution)\n protected readonly symbolRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultSymbolRenderContribution,\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolTextureRenderContribution,\n defaultSymbolClipRangeStrokeRenderContribution\n ];\n this.init(symbolRenderContribitions);\n }\n\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n\n const {\n size = symbolAttribute.size,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY,\n fillStrokeOrder = symbolAttribute.fillStrokeOrder,\n clipRange = symbolAttribute.clipRange\n } = symbol.attribute;\n\n const data = this.valid(symbol, symbolAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { keepDirIn3d = symbolAttribute.keepDirIn3d } = symbol.attribute;\n const z = this.z ?? 0;\n context.beginPath();\n\n const callback = (p: ICustomPath2D, a: any) => {\n // 如果是svg的话,合并一下fill和stroke\n if (symbol._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? symbol.attribute.fill;\n obj.opacity = a.opacity ?? symbol.attribute.opacity;\n obj.fillOpacity = symbol.attribute.fillOpacity;\n obj.stroke = a.stroke ?? symbol.attribute.stroke;\n obj.lineWidth = a.lineWidth ?? symbol.attribute.lineWidth;\n a = obj;\n }\n const _runFill = () => {\n if (a.fill) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setCommonStyle(symbol, a, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n };\n const _runStroke = () => {\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else if (sVisible && clipRange >= 1) {\n context.setStrokeStyle(symbol, a, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);\n context.stroke();\n }\n }\n };\n if (!fillStrokeOrder) {\n _runFill();\n _runStroke();\n } else {\n _runStroke();\n _runFill();\n }\n };\n let _size = size;\n let _x = x;\n let _y = y;\n let _z = z;\n const camera = context.camera;\n if (keepDirIn3d && camera && context.project) {\n const p = context.project(x, y, z);\n context.camera = null;\n _size = isArray(size) ? [size[0] * scaleX, size[1] * scaleY] : size * scaleX;\n _x = p.x;\n _y = p.y;\n _z = undefined;\n }\n if (parsedPath.draw(context, size, _x, _y, _z, callback) === false) {\n context.closePath();\n }\n context.camera = camera;\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n this.beforeRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n // if (fill !== false) {\n // context.setCommonStyle(symbol.attribute, symbolAttribute);\n // context.fill();\n // }\n // if (stroke !== false) {\n // context.setStrokeStyle(symbol.attribute, symbolAttribute);\n // context.stroke();\n // }\n\n // svg就不用fill和stroke了\n const _runFill = () => {\n if (doFill && !parsedPath.isSvg) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else if (fVisible) {\n context.setCommonStyle(symbol, symbol.attribute, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n };\n const _runStroke = () => {\n if (doStroke && !parsedPath.isSvg) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else if (sVisible && clipRange >= 1) {\n // 如果clipRange < 1,就需要靠afterRender进行绘制了\n context.setStrokeStyle(\n symbol,\n symbol.attribute,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute\n );\n context.stroke();\n }\n }\n };\n\n if (!fillStrokeOrder) {\n _runFill();\n _runStroke();\n } else {\n _runStroke();\n _runFill();\n }\n\n this.afterRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(symbol: ISymbol, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n this._draw(symbol, symbolAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { GraphicRender, SymbolRender } from './symbol';\nimport { DefaultCanvasSymbolRender } from './symbol-render';\n\nlet loadSymbolModule = false;\nexport const symbolModule = new ContainerModule(bind => {\n if (loadSymbolModule) {\n return;\n }\n loadSymbolModule = true;\n // symbol渲染器\n bind(DefaultCanvasSymbolRender).toSelf().inSingletonScope();\n bind(SymbolRender).to(DefaultCanvasSymbolRender).inSingletonScope();\n bind(GraphicRender).toService(SymbolRender);\n bind(SymbolRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // symbol 渲染器注入contributions\n bindContributionProvider(bind, SymbolRenderContribution);\n});\n","import {\n inject,\n injectable,\n SymbolRender,\n mat4Allocate,\n getScaledStroke,\n SYMBOL_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { Base3dPicker } from '../common/base-3d-picker';\n\n@injectable()\nexport class DefaultCanvasSymbolPicker extends Base3dPicker implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(symbol: ISymbol, point: IPoint, params?: IPickParams): boolean {\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const parsedPath = symbol.getParsedPath();\n if (!pickContext.camera) {\n if (!symbol.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (parsedPath.isSvg || symbol.attribute.pickMode === 'imprecise') {\n return true;\n }\n }\n\n pickContext.highPerformanceSave();\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = symbol.getGraphicTheme();\n\n const data = this.transform(symbol, symbolAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n // let { x = symbolAttribute.x, y = symbolAttribute.y } = symbol.attribute;\n\n // pickContext.highPerformanceSave();\n // if (!symbol.transMatrix.onlyTranslate()) {\n // // 性能较差\n // x = 0;\n // y = 0;\n // pickContext.transformFromMatrix(symbol.transMatrix, true);\n // } else {\n // const point = symbol.getOffsetXY(symbolAttribute);\n // x += point.x;\n // y += point.y;\n // // 当前context有rotate/scale,重置matrix\n // pickContext.setTransformForCurrent();\n // }\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = symbol.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n symbol,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = symbolAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n const keepStrokeScale = symbolAttribute.keepStrokeScale || themeAttribute.keepStrokeScale;\n pickContext.lineWidth = keepStrokeScale\n ? lineWidth + pickStrokeBuffer\n : getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasSymbolPicker } from '../constants';\nimport { DefaultCanvasSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(CanvasSymbolPicker).to(DefaultCanvasSymbolPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasSymbolPicker);\n});\n","import { inject, injectable, SymbolRender, SYMBOL_NUMBER_TYPE } from '@visactor/vrender-core';\n\nimport type { IGraphicPicker, IGraphicRender } from '@visactor/vrender-core';\nimport { PickerBase } from '../common/base';\n\n@injectable()\nexport class DefaultMathSymbolPicker extends PickerBase implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathPickerContribution, MathSymbolPicker } from '../constants';\nimport { DefaultMathSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(MathSymbolPicker).to(DefaultMathSymbolPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathSymbolPicker);\n});\n","import type { vec2 } from '@visactor/vutils';\nimport type { ITextMeasure, TextOptionsType } from '../../../interface/text';\nimport type { TextLayoutBBox, LayoutItemType, LayoutType, TextAlignType, TextBaselineType } from '../../../interface';\nimport { MeasureModeEnum } from '../../../interface';\n\nexport class CanvasTextLayout {\n private fontFamily: string;\n private textOptions: TextOptionsType;\n private textMeasure: ITextMeasure;\n\n constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure) {\n this.fontFamily = fontFamily;\n this.textOptions = options;\n this.textMeasure = textMeasure;\n }\n\n /**\n * 布局外部的盒子,盒子的alphabetic属性模拟文字的效果\n * @param bbox\n * @param textAlign\n * @param textBaseline\n * @returns\n */\n LayoutBBox(\n bbox: TextLayoutBBox,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n linesLayout: LayoutItemType[]\n ): TextLayoutBBox {\n if (textAlign === 'left' || textAlign === 'start') {\n bbox.xOffset = 0;\n } else if (textAlign === 'center') {\n bbox.xOffset = bbox.width / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bbox.xOffset = -bbox.width;\n } else {\n bbox.xOffset = 0;\n }\n\n if (textBaseline === 'top') {\n bbox.yOffset = 0;\n } else if (textBaseline === 'middle') {\n bbox.yOffset = bbox.height / -2;\n } else if (textBaseline === 'alphabetic') {\n // 如果仅有一行,要保证和直接使用canvas绘制的textBaseline一致\n let percent = 0.79;\n if (linesLayout.length === 1) {\n const lineInfo = linesLayout[0];\n percent = lineInfo.ascent / (lineInfo.ascent + lineInfo.descent);\n }\n bbox.yOffset = bbox.height * -percent;\n } else {\n bbox.yOffset = -bbox.height;\n }\n\n return bbox;\n }\n\n /**\n * 给定拆分好的每行字符串进行布局,如果传入lineWidth,那么后面的字符就拆分\n * @param lines\n * @param lineWidth\n */\n GetLayoutByLines(\n lines: (string | number)[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string = '',\n wordBreak: boolean,\n params?: {\n lineWidth?: number;\n suffixPosition?: 'start' | 'end' | 'middle';\n measureMode?: MeasureModeEnum;\n keepCenterInLine?: boolean;\n }\n ): LayoutType {\n const {\n lineWidth,\n suffixPosition = 'end',\n measureMode = MeasureModeEnum.actualBounding,\n keepCenterInLine = false\n } = params ?? {};\n lines = lines.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [0, 0];\n if (typeof lineWidth === 'number' && lineWidth !== Infinity) {\n // 直接使用lineWidth,并拆分字符串\n let width: number;\n for (let i = 0, len = lines.length; i < len; i++) {\n const metrics = this.textMeasure.measureTextPixelADscentAndWidth(\n lines[i] as string,\n this.textOptions,\n measureMode\n );\n let str: string = lines[i].toString();\n // 大于最大宽度,需要裁剪\n if (metrics.width > lineWidth) {\n const data = this.textMeasure.clipTextWithSuffix(\n lines[i] as string,\n this.textOptions,\n lineWidth,\n suffix,\n wordBreak,\n suffixPosition\n );\n str = data.str;\n width = data.width;\n } else {\n // 小于最大宽度,不需要裁剪,直接取文字总宽度即可\n width = metrics.width;\n }\n linesLayout.push({\n str,\n width,\n ascent: metrics.ascent,\n descent: metrics.descent,\n keepCenterInLine\n });\n }\n bboxWH[0] = lineWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let _lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n text = lines[i] as string;\n const metrics = this.textMeasure.measureTextPixelADscentAndWidth(\n lines[i] as string,\n this.textOptions,\n measureMode\n );\n width = metrics.width;\n _lineWidth = Math.max(_lineWidth, width);\n linesLayout.push({ str: text, width, ascent: metrics.ascent, descent: metrics.descent, keepCenterInLine });\n }\n bboxWH[0] = _lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n bboxWH[0] = linesLayout.reduce((a, b) => Math.max(a, b.width), 0);\n\n const bbox: TextLayoutBBox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n this.LayoutBBox(bbox, textAlign, textBaseline, linesLayout);\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n /**\n * 给定了bbox,使用拆分好的每行字符串进行布局\n * @param bbox\n * @param lines\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @returns\n */\n layoutWithBBox(\n bbox: TextLayoutBBox,\n lines: LayoutItemType[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number\n ): LayoutType {\n const origin: vec2 = [0, 0];\n const totalLineHeight = lines.length * lineHeight; // 总高度\n // origin在y方向需要初始化,然后递增即可\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n origin[1] = (bbox.height - totalLineHeight) / 2;\n } else if (textBaseline === 'bottom') {\n origin[1] = bbox.height - totalLineHeight;\n }\n\n for (let i = 0; i < lines.length; i++) {\n this.lineOffset(bbox, lines[i], textAlign, textBaseline, lineHeight, origin);\n }\n\n return {\n bbox,\n lines,\n fontFamily: this.fontFamily,\n fontSize: this.textOptions.fontSize,\n fontWeight: this.textOptions.fontWeight,\n lineHeight,\n textAlign,\n textBaseline\n };\n }\n\n /**\n * 计算line在bbox中的位置,需要配合layoutWithBBox使用\n * @param bbox\n * @param line\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @param origin 这个line的左上角位置,会复用并修改\n */\n private lineOffset(\n bbox: TextLayoutBBox,\n line: LayoutItemType,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n origin: vec2\n ): LayoutItemType {\n if (textAlign === 'left' || textAlign === 'start') {\n line.leftOffset = 0;\n } else if (textAlign === 'center') {\n line.leftOffset = (bbox.width - line.width) / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n line.leftOffset = bbox.width - line.width;\n }\n\n line.topOffset = lineHeight / 2 + (line.ascent - line.descent) / 2 + origin[1];\n\n // 在行内进行偏移\n if (!line.keepCenterInLine) {\n const actualHeight = line.ascent + line.descent;\n const buf = 0;\n const actualHeightWithBuf = actualHeight + buf;\n if (actualHeightWithBuf < lineHeight - buf) {\n if (textBaseline === 'bottom') {\n line.topOffset += (lineHeight - actualHeightWithBuf) / 2;\n } else if (textBaseline === 'top') {\n line.topOffset -= (lineHeight - actualHeightWithBuf) / 2;\n }\n }\n if (textBaseline === 'alphabetic') {\n const fontBoundingHeight = line.ascent + line.descent;\n const ratio = lineHeight / fontBoundingHeight;\n line.topOffset = lineHeight / 2 + ((line.ascent - line.descent) / 2) * ratio + origin[1];\n }\n }\n\n origin[1] += lineHeight;\n\n return line;\n }\n}\n","import type { IAABBBounds, IOBBBounds } from '@visactor/vutils';\nimport { max, isArray, getContextFont, transformBoundsWithMatrix, rotatePoint } from '@visactor/vutils';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../common/text';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport { application } from '../application';\nimport type { IText, ITextCache, ITextGraphicAttribute, LayoutItemType, LayoutType } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { calculateLineHeight } from '../common/utils';\nimport { TEXT_NUMBER_TYPE } from './constants';\nimport { boundStroke, TextDirection, verticalLayout } from './tools';\n\nconst TEXT_UPDATE_TAG_KEY = [\n 'text',\n 'maxLineWidth',\n 'maxWidth',\n // 多行文本要用到\n 'textAlign',\n 'textBaseline',\n 'heightLimit',\n 'lineClamp',\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'ellipsis',\n 'lineHeight',\n 'direction',\n 'wordBreak',\n 'heightLimit',\n 'lineClamp',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class Text extends Graphic implements IText {\n type: 'text' = 'text';\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n direction: 1,\n textAlign: 1,\n textBaseline: 1,\n fontFamily: 1,\n fontWeight: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache: ITextCache;\n _font: string;\n\n protected declare obbText?: Text;\n\n /**\n * 获取font字符串\n */\n get font(): string {\n const textTheme = this.getGraphicTheme();\n if (!this._font) {\n this._font = getContextFont(this.attribute, textTheme);\n }\n return this._font as string;\n }\n\n get clipedText(): string | undefined {\n const attribute = this.attribute;\n const textTheme = this.getGraphicTheme();\n const maxWidth = this.getMaxWidth(textTheme);\n if (!Number.isFinite(maxWidth)) {\n return (attribute.text ?? textTheme.text).toString();\n }\n this.tryUpdateAABBBounds();\n return this.cache.clipedText;\n }\n\n get clipedWidth(): number | undefined {\n this.tryUpdateAABBBounds();\n return this.cache.clipedWidth;\n }\n\n /**\n * 支持单行文本,横排纵排均支持\n * TODO 支持多行文本\n */\n get cliped(): boolean | undefined {\n const textTheme = this.getGraphicTheme();\n const attribute = this.attribute;\n const maxWidth = this.getMaxWidth(textTheme);\n if (!Number.isFinite(maxWidth)) {\n return false;\n }\n const { text } = this.attribute;\n this.tryUpdateAABBBounds();\n if (this.cache?.layoutData?.lines) {\n let mergedText = '';\n this.cache.layoutData.lines.forEach(item => {\n mergedText += item.str;\n });\n const originText = Array.isArray(text) ? text.join('') : text;\n\n return originText !== mergedText;\n }\n if (attribute.direction === 'vertical' && this.cache.verticalList && this.cache.verticalList[0]) {\n return this.cache.verticalList[0].map(item => item.text).join('') !== attribute.text.toString();\n }\n if (this.clipedText == null) {\n return false;\n }\n return this.clipedText !== attribute.text.toString();\n }\n\n get multilineLayout(): LayoutType | undefined {\n this.tryUpdateAABBBounds();\n return this.cache.layoutData;\n }\n /**\n * 是否是多行文本\n */\n get isMultiLine(): boolean {\n return Array.isArray(this.attribute.text) || this.attribute.whiteSpace === 'normal';\n }\n\n constructor(params: ITextGraphicAttribute = { text: '', fontSize: 16 }) {\n super(params);\n this.numberType = TEXT_NUMBER_TYPE;\n this.cache = {};\n }\n\n /**\n * 图元属性合法,且文字不为空或者null/undefined\n * @returns\n */\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).text;\n }\n\n protected doUpdateOBBBounds(): IOBBBounds {\n const graphicTheme = this.getGraphicTheme();\n this._OBBBounds.clear();\n const attribute = this.attribute;\n const { angle = graphicTheme.angle } = attribute;\n if (!angle) {\n const b = this.AABBBounds;\n this._OBBBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n return this._OBBBounds;\n }\n if (!this.obbText) {\n this.obbText = new Text({});\n }\n this.obbText.setAttributes({ ...attribute, angle: 0 });\n const bounds1 = this.obbText.AABBBounds;\n const { x, y } = attribute;\n const boundsCenter = { x: (bounds1.x1 + bounds1.x2) / 2, y: (bounds1.y1 + bounds1.y2) / 2 };\n const center = rotatePoint(boundsCenter, angle, { x, y });\n this._OBBBounds.copy(bounds1);\n this._OBBBounds.translate(center.x - boundsCenter.x, center.y - boundsCenter.y);\n this._OBBBounds.angle = angle;\n return this._OBBBounds;\n }\n\n protected updateAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required,\n aabbBounds: IAABBBounds\n ) {\n const { text = textTheme.text } = this.attribute;\n if (Array.isArray(text)) {\n this.updateMultilineAABBBounds(text as (number | string)[]);\n } else {\n this.updateSingallineAABBBounds(text as number | string);\n }\n\n const { tb1 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n const {\n scaleX = textTheme.scaleX,\n scaleY = textTheme.scaleY,\n shadowBlur = textTheme.shadowBlur,\n strokeBoundsBuffer = textTheme.strokeBoundsBuffer\n } = attribute;\n if (shadowBlur) {\n const shadowBlurHalfWidth = shadowBlur / Math.abs(scaleX + scaleY);\n boundStroke(tb1, shadowBlurHalfWidth, true, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n }\n // 合并shadowRoot的bounds\n application.graphicService.combindShadowAABBBounds(aabbBounds, this);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n application.graphicService.updateHTMLTextAABBBounds(attribute, textTheme, aabbBounds);\n }\n\n transformBoundsWithMatrix(aabbBounds, aabbBounds, this.transMatrix);\n return aabbBounds;\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateSingallineAABBBounds(text: number | string): IAABBBounds {\n this.updateMultilineAABBBounds([text]);\n const layoutData = this.cache.layoutData;\n if (layoutData && layoutData.lines && layoutData.lines.length) {\n const line = layoutData.lines[0];\n this.cache.clipedText = line.str;\n this.cache.clipedWidth = line.width;\n }\n return this._AABBBounds;\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n protected updateMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n const { direction = textTheme.direction, underlineOffset = textTheme.underlineOffset } = this.attribute;\n\n const b =\n direction === 'horizontal'\n ? this.updateHorizontalMultilineAABBBounds(text)\n : this.updateVerticalMultilineAABBBounds(text);\n\n if (direction === 'horizontal') {\n if (underlineOffset) {\n this._AABBBounds.add(this._AABBBounds.x1, this._AABBBounds.y2 + underlineOffset);\n }\n }\n return b;\n }\n\n guessLineHeightBuf(fontSize: number) {\n return fontSize ? fontSize * 0.1 : 0;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * @param text\n */\n updateHorizontalMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n\n const attribute = this.attribute;\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n wrap = textTheme.wrap,\n measureMode = textTheme.measureMode,\n lineWidth = textTheme.lineWidth,\n whiteSpace = textTheme.whiteSpace,\n suffixPosition = textTheme.suffixPosition,\n ignoreBuf = textTheme.ignoreBuf,\n keepCenterInLine = textTheme.keepCenterInLine\n } = attribute;\n\n const buf = ignoreBuf ? 0 : this.guessLineHeightBuf(fontSize);\n const lineHeight = this.getLineHeight(attribute, textTheme, buf);\n\n if (whiteSpace === 'normal' || wrap) {\n return this.updateWrapAABBBounds(text);\n }\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily, lineHeight }, textMeasure);\n const layoutData = layoutObj.GetLayoutByLines(\n text,\n textAlign,\n textBaseline as any,\n lineHeight,\n ellipsis === true ? (textTheme.ellipsis as string) : ellipsis || undefined,\n false,\n {\n lineWidth: maxLineWidth,\n suffixPosition,\n measureMode,\n keepCenterInLine\n }\n );\n const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateWrapAABBBounds(text: (number | string) | (number | string)[]) {\n const textTheme = this.getGraphicTheme();\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n measureMode = textTheme.measureMode,\n suffixPosition = textTheme.suffixPosition,\n heightLimit = 0,\n lineClamp,\n keepCenterInLine = textTheme.keepCenterInLine\n } = this.attribute;\n\n const buf = ignoreBuf ? 0 : this.guessLineHeightBuf(fontSize);\n const lineHeight = this.getLineHeight(this.attribute, textTheme, buf);\n\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const textOptions = { fontSize, fontWeight, fontFamily, lineHeight };\n const layoutObj = new CanvasTextLayout(fontFamily, textOptions, textMeasure as any);\n\n // layoutObj内逻辑\n const lines = isArray(text) ? (text.map(l => l.toString()) as string[]) : [text.toString()];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行,如果后面还有行,需要显示省略号\n const clip = textMeasure.clipTextWithSuffix(\n str,\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition,\n i !== lines.length - 1\n );\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = textMeasure.clipText(\n str,\n textOptions,\n maxLineWidth,\n wordBreak !== 'break-all',\n wordBreak === 'keep-all'\n );\n if ((str !== '' && clip.str === '') || clip.wordBreaked) {\n if (ellipsis) {\n const clipEllipsis = textMeasure.clipTextWithSuffix(\n str,\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n let cutLength = clip.str.length;\n if (clip.wordBreaked && !(str !== '' && clip.str === '')) {\n needCut = true;\n cutLength = clip.wordBreaked;\n }\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n let newStr = str.substring(cutLength);\n // 截断后,避免开头有空格很尬,去掉\n if (wordBreak === 'keep-all') {\n newStr = newStr.replace(/^\\s+/g, '');\n }\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = textMeasure.clipTextWithSuffix(\n lines[i],\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = textMeasure.measureTextWidth(text, textOptions);\n lineWidth = Math.max(lineWidth, width);\n const matrics = textMeasure.measureTextPixelADscentAndWidth(text, textOptions, measureMode);\n linesLayout.push({ str: text, width, ascent: matrics.ascent, descent: matrics.descent, keepCenterInLine });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any, linesLayout);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算垂直布局的多行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateVerticalMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n const textMeasure = application.graphicUtil.textMeasure;\n let width: number;\n const attribute = this.attribute;\n const {\n maxLineWidth = textTheme.maxLineWidth,\n ellipsis = textTheme.ellipsis,\n fontFamily = textTheme.fontFamily,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n // wordBreak = textTheme.wordBreak,\n verticalMode = textTheme.verticalMode,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n\n const lineHeight = this.getLineHeight(attribute, textTheme, 0);\n\n let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = (Text.baselineMapAlign as any)[textBaseline] ?? 'left';\n textBaseline = (Text.alignMapBaseline as any)[t] ?? 'top';\n }\n width = 0;\n if (!this.shouldUpdateShape() && this.cache) {\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const verticalLists: { text: string; width?: number; direction: TextDirection }[][] = text.map(str => {\n return verticalLayout(str.toString());\n });\n verticalLists.forEach((verticalData, i) => {\n if (Number.isFinite(maxLineWidth)) {\n if (ellipsis) {\n const strEllipsis = (ellipsis === true ? textTheme.ellipsis : ellipsis) as string;\n const data = textMeasure.clipTextWithSuffixVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n strEllipsis,\n false,\n suffixPosition\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n } else {\n const data = textMeasure.clipTextVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n false\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n }\n // this.cache.clipedWidth = width;\n // todo 计算原本的宽度\n } else {\n width = 0;\n verticalData.forEach(t => {\n const w =\n t.direction === TextDirection.HORIZONTAL\n ? fontSize\n : textMeasure.measureTextWidth(t.text, { fontSize, fontWeight, fontFamily });\n\n width += w;\n t.width = w;\n });\n }\n });\n this.cache.verticalList = verticalLists;\n this.clearUpdateShapeTag();\n\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n // /**\n // * 是否是简单文字\n // * 单行,横排\n // * @returns\n // */\n // protected isSinglelineAndHorizontal(): boolean {\n // return !this.isMultiLine && this.attribute.direction !== 'vertical';\n // }\n\n protected getMaxWidth(theme: ITextGraphicAttribute): number {\n // 传入了maxLineWidth就优先使用,否则使用maxWidth\n const attribute = this.attribute;\n return attribute.maxLineWidth ?? attribute.maxWidth ?? theme.maxWidth;\n }\n\n protected getLineHeight(attribute: ITextGraphicAttribute, textTheme: ITextGraphicAttribute, buf: number) {\n return (\n calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize) ??\n (attribute.fontSize || textTheme.fontSize) + buf\n );\n }\n\n protected needUpdateTags(keys: string[], k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTags(keys, k);\n }\n protected needUpdateTag(key: string, k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTag(key, k);\n }\n\n clone(): Text {\n return new Text({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Text.NOWORK_ANIMATE_ATTR;\n }\n\n /**\n * 用于垂直布局时align和baseline相互转换\n * @returns\n */\n getBaselineMapAlign(): Record {\n return Text.baselineMapAlign;\n }\n\n /**\n * 用于垂直布局时align和baseline相互转换\n * @returns\n */\n getAlignMapBaseline(): Record {\n return Text.alignMapBaseline;\n }\n\n static baselineMapAlign = {\n top: 'left',\n bottom: 'right',\n middle: 'center'\n };\n\n static alignMapBaseline = {\n left: 'top',\n right: 'bottom',\n center: 'middle'\n };\n}\n\nexport function createText(attributes: ITextGraphicAttribute): IText {\n return new Text(attributes);\n}\n\n// addAttributeToPrototype(DefaultLineStyle, Text, PURE_STYLE_KEY);\n","import { createText } from '../graphic/text';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerTextGraphic() {\n graphicCreator.RegisterGraphicCreator('text', createText);\n}\n","import { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { TEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n ITextRenderContribution,\n IContributionProvider\n} from '../../../interface';\nimport { textDrawOffsetX, textDrawOffsetY, textLayoutOffsetY } from '../../../common/text';\nimport type { IText, ITextGraphicAttribute } from '../../../interface/graphic/text';\nimport { BaseRender } from './base-render';\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { TextRenderContribution } from './contributions/constants';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { isNil, max } from '@visactor/vutils';\nimport { calculateLineHeight } from '../../../common/utils';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasTextRender extends BaseRender implements IGraphicRender {\n type: 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextRenderContribution)\n protected readonly textRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init(textRenderContribitions);\n }\n\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const textAttribute = getTheme(text, params?.theme).text;\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n keepDirIn3d = textAttribute.keepDirIn3d,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n // whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n const data = this.valid(text, textAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 文字如果需要变换,那就需要将3dmatrix转成context的2dmatrix\n const transform3dMatrixToContextMatrix = !keepDirIn3d;\n\n const z = this.z || 0;\n\n context.beginPath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(text, text.attribute, textAttribute);\n\n this.beforeRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n transform3dMatrixToContextMatrix && this.transformUseContext2d(text, textAttribute, z, context);\n\n const drawText = (t: string, offsetX: number, offsetY: number, direction: number) => {\n let _x = x + offsetX;\n const _y = y + offsetY;\n if (direction) {\n context.highPerformanceSave();\n _x += fontSize;\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n // matrix.translate(fontSize, 0);\n matrix.rotateByCenter(Math.PI / 2, _x, _y);\n context.transformFromMatrix(matrix, true);\n matrixAllocate.free(matrix);\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(t, _x, _y, z);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(t, _x, _y, z);\n // 垂直布局的情况下不支持下划线和中划线\n // this.drawUnderLine(underline, lineThrough, text, _x, _y, 0, 0, z, textAttribute, context);\n }\n }\n\n if (direction) {\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n }\n };\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n if (direction === 'horizontal') {\n const { multilineLayout } = text;\n if (!multilineLayout) {\n context.highPerformanceRestore();\n return;\n } // 如果不存在的话,需要render层自行布局\n const { xOffset, yOffset } = multilineLayout.bbox;\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.strokeText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n });\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n this.drawUnderLine(\n underline,\n lineThrough,\n text,\n (line.leftOffset || 0) + xOffset + x,\n (line.topOffset || 0) + yOffset + y,\n line.descent,\n (line.descent - line.ascent) / 2,\n z,\n textAttribute,\n context,\n {\n width: line.width\n }\n );\n });\n }\n }\n } else {\n let { textAlign = textAttribute.textAlign, textBaseline = textAttribute.textBaseline } = text.attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = text.getBaselineMapAlign()[textBaseline] ?? ('left' as any);\n textBaseline = text.getAlignMapBaseline()[t] ?? ('top' as any);\n }\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n const { verticalList } = cache;\n context.textAlign = 'left';\n context.textBaseline = 'top';\n const totalHeight = lineHeight * verticalList.length;\n let totalW = 0;\n verticalList.forEach(verticalData => {\n const _w = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n totalW = max(_w, totalW);\n });\n let offsetY = 0;\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -totalHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -totalHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n verticalList.forEach((verticalData, i) => {\n const currentW = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n const dw = totalW - currentW;\n let currentOffsetY = offsetY;\n if (textAlign === 'center') {\n currentOffsetY += dw / 2;\n } else if (textAlign === 'right') {\n currentOffsetY += dw;\n }\n verticalData.forEach(item => {\n const { text, width, direction } = item;\n drawText(text, totalHeight - (i + 1) * lineHeight + offsetX, currentOffsetY, direction);\n currentOffsetY += width;\n });\n });\n }\n transform3dMatrixToContextMatrix && this.restoreTransformUseContext2d(text, textAttribute, z, context);\n\n this.afterRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(text: IText, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const textAttribute = getTheme(text, params?.theme).text;\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n this._draw(text, textAttribute, computed3dMatrix, drawContext, params);\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n anchorX: number,\n anchorY: number,\n offsetUnderLineY: number,\n offsetThroughLineY: number,\n z: number,\n textAttribute: Required,\n context: IContext2d,\n multiOption?: {\n width: number;\n }\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n // textBaseline = textAttribute.textBaseline,\n // fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n const isMulti = !isNil(multiOption);\n const w = isMulti ? multiOption!.width : text.clipedWidth;\n const offsetX = isMulti ? 0 : textDrawOffsetX(textAlign, w);\n // const offsetY = textLayoutOffsetY(isMulti ? 'alphabetic' : textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n // let deltaY = isMulti ? -3 : 0;\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, anchorX, anchorY, textAttribute);\n underlineDash && context.setLineDash(underlineDash);\n context.beginPath();\n // const dy = y + offsetY + fontSize + underlineOffset + deltaY;\n const dy = anchorY + offsetUnderLineY + underlineOffset;\n context.moveTo(anchorX + offsetX, dy, z);\n context.lineTo(anchorX + offsetX + w, dy, z);\n context.stroke();\n }\n // if (isMulti) {\n // deltaY = -1;\n // }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, anchorX, anchorY, textAttribute);\n context.beginPath();\n // const dy = y + offsetY + fontSize / 2 + deltaY;\n const dy = anchorY + offsetThroughLineY;\n context.moveTo(anchorX + offsetX, dy, z);\n context.lineTo(anchorX + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasCircleRender } from './circle-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { CircleRenderContribution, TextRenderContribution } from './contributions/constants';\nimport { CircleRender, GraphicRender, TextRender } from './symbol';\nimport { DefaultCanvasTextRender } from './text-render';\n\nlet loadTextModule = false;\nexport const textModule = new ContainerModule(bind => {\n if (loadTextModule) {\n return;\n }\n loadTextModule = true;\n // text 渲染器\n bind(TextRender).to(DefaultCanvasTextRender).inSingletonScope();\n bind(GraphicRender).toService(TextRender);\n bind(TextRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n bindContributionProvider(bind, TextRenderContribution);\n});\n","import {\n inject,\n injectable,\n getTheme,\n TextRender,\n textDrawOffsetX,\n textLayoutOffsetY,\n mat4Allocate,\n TEXT_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IText,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { Base3dPicker } from '../common/base-3d-picker';\n\n@injectable()\nexport class DefaultCanvasTextPicker extends Base3dPicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(@inject(TextRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n // const { textAttribute } = graphicService.themeService.getCurrentTheme();\n // const {\n // x = textAttribute.x,\n // y = textAttribute.y,\n // } = text.attribute;\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const bounds = text.AABBBounds;\n\n if (!pickContext.camera) {\n if (!bounds.containsPoint(point)) {\n return false;\n }\n return true;\n }\n\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n pickContext.highPerformanceSave();\n const textAttribute = text.getGraphicTheme();\n\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n\n const data = this.transform(text, textAttribute, pickContext, computed3dMatrix);\n const { x, y, z, lastModelMatrix } = data;\n\n this.canvasRenderer.z = z;\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = text.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n text,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const {\n fontSize = textAttribute.fontSize,\n textBaseline = textAttribute.textBaseline,\n textAlign = textAttribute.textAlign\n } = text.attribute;\n // 拾取基于xy的rect\n const bounds = text.AABBBounds;\n const height = bounds.height();\n const width = bounds.width();\n const offsetY = textLayoutOffsetY(textBaseline, height, fontSize);\n const offsetX = textDrawOffsetX(textAlign, width);\n context.rect(offsetX + x, offsetY + y, width, height, z);\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n // pickContext.lineWidth = getScaledStroke(pickContext, lineWidth, pickContext.dpr);\n // picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasLinePicker, CanvasPickerContribution, CanvasTextPicker } from '../constants';\nimport { DefaultCanvasLinePicker } from './line-picker';\nimport { DefaultCanvasTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(CanvasTextPicker).to(DefaultCanvasTextPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasTextPicker);\n});\n","import { injectable, TEXT_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type { IGraphicPicker, IPickParams, IText } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathTextPicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n if (!text.AABBBounds.containsPoint(point)) {\n return false;\n }\n\n // const { pickContext } = params ?? {};\n // if (!pickContext) {\n // return false;\n // }\n\n // TODO: 详细形状判断\n return true;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultMathArcPicker } from './arc-picker';\nimport { MathArcPicker, MathPickerContribution, MathTextPicker } from '../constants';\nimport { DefaultMathTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(MathTextPicker).to(DefaultMathTextPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathTextPicker);\n});\n","import { isArray } from '@visactor/vutils';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport type { IText, ITextGraphicAttribute, IWrapTextGraphicAttribute, LayoutItemType } from '../interface';\nimport { application } from '../application';\nimport { Text } from './text';\nimport { getTheme } from './theme';\nimport { calculateLineHeight } from '../common/utils';\n\nconst WRAP_TEXT_UPDATE_TAG_KEY = ['heightLimit', 'lineClamp'];\n\n/* WrapText功能\n * 1. 按照宽度限制自动折行或显示省略号(maxLineWidth)\n * 2. 高度限制控制显示内容及省略号(heightLimit)\n * 3. 按照行数限制显示内容及省略号(lineClamp)\n */\nexport class WrapText extends Text {\n declare attribute: IWrapTextGraphicAttribute;\n\n constructor(params: ITextGraphicAttribute) {\n super({ ...params, wrap: true });\n }\n\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateMultilineAABBBounds(text: (number | string)[]) {\n const textTheme = this.getGraphicTheme();\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n heightLimit = 0,\n suffixPosition = textTheme.suffixPosition,\n lineClamp\n } = this.attribute;\n const lineHeight =\n calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize) ??\n (this.attribute.fontSize || textTheme.fontSize);\n const buf = ignoreBuf ? 0 : 2;\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily }, textMeasure as any) as any;\n\n // layoutObj内逻辑\n const lines = text.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n // // 测量当前行宽度\n // width = Math.min(\n // layoutObj.textMeasure.measureTextWidth(str, layoutObj.textOptions),\n // maxLineWidth\n // );\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = layoutObj.textMeasure.clipText(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n wordBreak === 'break-word'\n );\n if (str !== '' && clip.str === '') {\n if (ellipsis) {\n const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n const newStr = str.substring(clip.str.length);\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n lines[i],\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = layoutObj.textMeasure.measureTextWidth(text, layoutObj.textOptions, wordBreak === 'break-word');\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width, ascent: 0, descent: 0, keepCenterInLine: false });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * (lineHeight + buf);\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n // const layoutData = layoutObj.GetLayoutByLines(\n // text,\n // textAlign,\n // textBaseline as any,\n // lineHeight,\n // ellipsis === true ? (DefaultTextAttribute.ellipsis as string) : ellipsis || undefined,\n // maxLineWidth\n // );\n // const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return super.needUpdateTags(keys);\n }\n\n protected needUpdateTag(key: string): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (key === attrKey) {\n return true;\n }\n }\n return super.needUpdateTag(key);\n }\n\n getNoWorkAnimateAttr(): Record {\n return WrapText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createWrapText(attributes: ITextGraphicAttribute): IText {\n return new WrapText(attributes);\n}\n","import { createWrapText } from '../graphic/wrap-text';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerWrapTextGraphic() {\n graphicCreator.RegisterGraphicCreator('wrapText', createWrapText);\n}\n","import isType from './isType';\n\nconst isDate = (value: any): value is Date => {\n return isType(value, 'Date');\n};\n\nexport default isDate;\n","import isArray from './isArray';\nimport isBoolean from './isBoolean';\nimport isDate from './isDate';\nimport isNumber from './isNumber';\nimport isString from './isString';\nimport isValid from './isValid';\n\nexport default function cloneDeep(value: any, ignoreWhen?: (value: any) => boolean, excludeKeys?: string[]): any {\n let result;\n if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n\n if (excludeKeys && excludeKeys.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);\n }\n }\n }\n return result;\n}\n","import { ACustomAnimate, createLine, getTextBounds, registerShadowRootGraphic } from '@visactor/vrender';\nimport type { EasingType, IGraphic, IRichText, IRichTextCharacter, ITextGraphicAttribute } from '@visactor/vrender';\nimport { clone, cloneDeep, isArray } from '@visactor/vutils';\nimport { Easing } from '@visactor/vrender';\nregisterShadowRootGraphic();\n\ntype ITypeWriterParams = {\n text: string;\n effect: 'default' | 'blur' | 'scale';\n blur: number;\n scale: number;\n delta: number;\n};\n\nexport class TypeWriter extends ACustomAnimate<{ text: string }> {\n declare valid: boolean;\n declare target: IRichText;\n declare targetTextConfig: IRichTextCharacter[];\n declare originTextConfig: IRichTextCharacter[];\n\n constructor(\n from: { text: string },\n to: { text: string },\n duration: number,\n easing: EasingType,\n params: ITypeWriterParams\n ) {\n super(from, to, duration, easing, params || {});\n }\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.targetTextConfig = [];\n (this.target.attribute.textConfig || []).forEach(config => {\n if (!(config as any).text) {\n this.targetTextConfig.push(config);\n } else {\n Array.from((config as any).text).forEach(str => {\n this.targetTextConfig.push({\n ...config,\n text: str,\n _opacity: (config as any).opacity\n } as any);\n });\n }\n });\n this.originTextConfig = cloneDeep(this.target.attribute.textConfig || []);\n }\n\n onEnd(): void {\n this.target.setAttributes({ textConfig: this.originTextConfig });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n const delta = this.params.delta ?? 0.3;\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity;\n } else {\n (config as any).opacity = 0;\n }\n }\n const { effect = 'default' } = this.params;\n if (effect === 'default') {\n this.onUpdateDefault(ratio, delta, this.params.characterEasing);\n } else if (effect === 'blur') {\n this.onUpdateBlur(ratio, delta, this.params.characterEasing);\n } else if (effect === 'scale') {\n this.onUpdateScale(ratio, delta, this.params.characterEasing);\n }\n }\n\n onUpdateDefault(ratio: number, delta: number, easing: string = 'linear') {\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n\n onUpdateBlur(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // TODO 后续使用blur代替,暂时基于opacity实现\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity * easingFunc(Math.min((ratio - delay) / delta, 1));\n } else {\n (config as any).opacity = 0;\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n onUpdateFadeUp(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // TODO 暂不支持\n const deltaY = this.params.dy ?? 20;\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity * easingFunc(Math.min((ratio - delay) / delta, 1));\n } else {\n (config as any).opacity = 0;\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n onUpdateScale(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // blur\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const fontSize = (config as any)._fontSize ?? this.target.attribute.fontSize ?? 12;\n (config as any)._fontSize = fontSize;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).fontSize = fontSize * easingFunc(Math.min((ratio - delay) / delta, 1));\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, generatorPathEasingFunc } from '@visactor/vrender';\n\nexport const barBounce1Str =\n 'M0,0 C0.126,0.382 0.06,0.254 0.105,0.467 0.159,0.729 0.3,1.173 0.38,1.173 0.476,1.173 0.512,0.909 0.578,0.9 0.632,0.892 0.685,1.084 0.735,1.085 0.784,1.085 0.843,0.966 0.887,0.966 0.94,0.966 0.984,1 1,1';\nexport const barBounce2Str =\n 'M0,0 C0.126,0.382 0.185,0.598 0.262,0.801 0.307,0.919 0.396,1.089 0.476,1.089 0.572,1.089 0.622,0.936 0.688,0.927 0.742,0.919 0.778,1.036 0.828,1.038 0.877,1.038 0.882,0.972 0.926,0.972 0.979,0.972 0.984,1 1,1';\n\nconst barBounce1 = generatorPathEasingFunc(barBounce1Str);\nconst barBounce2 = generatorPathEasingFunc(barBounce2Str);\n\nexport class BarBounce extends ACustomAnimate<{ y?: number; y1?: number; x?: number; x1?: number }> {\n static label: string = 'bar-bounce';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n\n constructor(\n from: { y?: number; y1?: number; x?: number; x1?: number },\n to: { y?: number; y1?: number; x?: number; x1?: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n const f = {\n y: from.y1,\n y1: from.y1,\n x: from.x1,\n x1: from.x1\n };\n super(f, { y: from.y, y1: from.y1, x: from.x, x1: from.x1 }, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes(this.from);\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const from = this.from;\n const to = this.to;\n const r1 = barBounce1!(ratio);\n const r2 = barBounce2!(ratio);\n // const\n if (from.y1) {\n out.y = from.y! + (to.y! - from.y!) * r1;\n const height = to.y1! - to.y!;\n const dh = height * r2;\n out.y1 = Math.min(out.y + dh, this.to.y1!);\n } else {\n out.x = from.x! + (to.x! - from.x!) * r1;\n const width = to.x! - to.x1!;\n const dw = width * r2;\n out.x1 = Math.max(out.x - dw, this.to.x1!);\n }\n\n // out.y1 = from.y1 + (to.y1 - from.y1) * r;\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, CustomPath2D, generatorPathEasingFunc } from '@visactor/vrender';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport const barLeap1Str = 'M0,0 C0.083,0.163 0.179,1 0.6,1 0.814,1 0.898,1 1,1';\nexport const barLeap2Str = 'M0,0 C0.27,0 0.179,0 0.6,0 0.632,0 0.782,-0.132 0.818,-0.132 0.868,-0.132 0.972,0 1,0';\n\nconst barLeap1 = generatorPathEasingFunc(barLeap1Str);\nconst barLeap2 = generatorPathEasingFunc(barLeap2Str);\n\nexport class BarLeap extends ACustomAnimate<{\n y: number;\n y1?: number;\n x: number;\n x1?: number;\n width?: number;\n height?: number;\n cornerRadius?: number;\n}> {\n static label: string = 'bar-leap';\n static delayPerTime: number = 100;\n static enterPerTime: number = 500;\n\n declare valid: boolean;\n\n protected fromCenter: IPointLike;\n protected toCenter: IPointLike;\n\n protected vertical: boolean;\n\n constructor(\n from: { y: number; y1?: number; x: number; x1?: number; width?: number; height?: number },\n to: { y: number; y1?: number; x: number; x1?: number; width?: number; height?: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n super({ ...from, cornerRadius: 0 }, to, duration, easing, params);\n this.vertical = to.y1 != null;\n const centerX = to.x1 != null ? (to.x + to.x1) / 2 : to.x + to.width! / 2;\n const centerY = to.y1 != null ? (to.y + to.y1) / 2 : to.y + to.height! / 2;\n this.toCenter = { x: centerX - to.x, y: centerY - to.y };\n if (this.vertical) {\n this.fromCenter = { x: centerX + 200 - to.x, y: centerY - 600 - to.y };\n } else {\n this.fromCenter = { x: centerX + 600 - to.x, y: centerY - 200 - to.y };\n }\n }\n\n computePath(percent: number, fromCenter: IPointLike, toCenter: IPointLike, pathProxy: CustomPath2D) {\n const center = {\n x: fromCenter.x + (toCenter.x - fromCenter.x) * percent,\n y: fromCenter.y + (toCenter.y - fromCenter.y) * percent\n };\n // console.log(center);\n pathProxy.clear();\n if (this.vertical) {\n const width = this.to.width!;\n const height = this.to.y1! - this.to.y;\n const halfH = height / 2;\n const halfW = width / 2;\n\n // const leftTop = {x: center.x - halfW, y: center.y - halfH};\n // const rightBottom = { x: leftTop.x + width, y: leftTop.y + height };\n // pathProxy.moveTo(leftTop.x, leftTop.y);\n // pathProxy.lineTo(rightBottom.x, leftTop.y);\n // pathProxy.lineTo(rightBottom.x, rightBottom.y);\n // pathProxy.lineTo(leftTop.x, rightBottom.y);\n // pathProxy.lineTo(leftTop.x, leftTop.y);\n\n const angle = ((1 - percent) * Math.PI) / 3;\n const vec1 = { x: Math.sin(angle) * halfH, y: Math.cos(angle) * halfH };\n const ptm = { x: center.x + vec1.x, y: center.y - vec1.y };\n const pbm = { x: center.x - vec1.x, y: center.y + vec1.y };\n const vec2 = { x: Math.cos(angle) * halfW, y: Math.sin(angle) * halfW };\n const plt = { x: ptm.x - vec2.x, y: ptm.y - vec2.y };\n const prt = { x: ptm.x + vec2.x, y: ptm.y + vec2.y };\n const plb = { x: pbm.x - vec2.x, y: pbm.y - vec2.y };\n const prb = { x: pbm.x + vec2.x, y: pbm.y + vec2.y };\n\n const lqp = { x: plb.x + (plt.x - plb.x) / 4, y: (plb.y + plt.y) / 2 };\n const rqp = { x: prb.x + (prt.x - prb.x) / 4, y: (prb.y + prt.y) / 2 };\n\n pathProxy.moveTo(plt.x, plt.y);\n pathProxy.lineTo(prt.x, prt.y);\n pathProxy.quadraticCurveTo(rqp.x, rqp.y, prb.x, prb.y);\n pathProxy.lineTo(plb.x, plb.y);\n pathProxy.quadraticCurveTo(lqp.x, lqp.y, plt.x, plt.y);\n } else {\n const width = this.to.x - this.to.x1!;\n const height = this.to.height!;\n const halfH = height / 2;\n const halfW = width / 2;\n\n const angle = ((1 - percent) * Math.PI) / 3;\n const vec1 = { x: Math.cos(angle) * halfW, y: Math.sin(angle) * halfW };\n const ptm = { x: center.x + vec1.x, y: center.y - vec1.y };\n const pbm = { x: center.x - vec1.x, y: center.y + vec1.y };\n const vec2 = { x: Math.sin(angle) * halfH, y: Math.cos(angle) * halfH };\n const plt = { x: ptm.x - vec2.x, y: ptm.y - vec2.y };\n const prt = { x: ptm.x + vec2.x, y: ptm.y + vec2.y };\n const plb = { x: pbm.x - vec2.x, y: pbm.y - vec2.y };\n const prb = { x: pbm.x + vec2.x, y: pbm.y + vec2.y };\n\n const lqp = { x: (plb.x + plt.x) / 2, y: plb.y - (plb.y - plt.y) / 4 };\n const rqp = { x: (prb.x + prt.x) / 2, y: prb.y - (prb.y - prt.y) / 4 };\n\n pathProxy.moveTo(plt.x, plt.y);\n pathProxy.lineTo(prt.x, prt.y);\n pathProxy.quadraticCurveTo(rqp.x, rqp.y, prb.x, prb.y);\n pathProxy.lineTo(plb.x, plb.y);\n pathProxy.quadraticCurveTo(lqp.x, lqp.y, plt.x, plt.y);\n }\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onEnd(): void {\n this.target.pathProxy = null;\n }\n\n onBind(): void {\n this.target.pathProxy = new CustomPath2D();\n this.target.pathProxy.rect(0, 0, 0, 0);\n this.target && this.target.setAttributes(this.from);\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.computePath(barLeap1!(ratio), this.fromCenter, this.toCenter, this.target.pathProxy);\n if (this.vertical) {\n out.y = this.to.y + barLeap2!(ratio) * 100;\n } else {\n // out.x1 = this.to.x1! + bounce2(ratio) * 100;\n }\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, generatorPathEasingFunc } from '@visactor/vrender';\n\nexport const pieLeap1Str =\n 'M0,0 C0,0.301 0.256,1.032 0.607,1.033 0.763,1.033 0.752,0.983 0.86,0.983 0.978,0.983 0.972,1 1,1';\nexport const pieLeap2Str =\n 'M0,0 C0.331,0 0.047,-0.001 0.4,0 0.554,0 0.623,0.988 0.704,1.05 0.777,1.106 0.826,0.966 0.885,0.966 0.968,0.966 0.986,1 1,1';\n\nconst pieLeap1 = generatorPathEasingFunc(pieLeap1Str);\nconst pieLeap2 = generatorPathEasingFunc(pieLeap2Str);\n\nexport class PieLeap extends ACustomAnimate<{ y: number; x: number; innerRadius: number; outerRadius: number }> {\n static label: string = 'pie-leap';\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n\n constructor(\n from: { y: number; x: number; innerRadius: number; outerRadius: number },\n to: { y: number; x: number; innerRadius: number; outerRadius: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n const f = {\n y: from.y - 500,\n x: from.x + 500,\n innerRadius: from.innerRadius,\n outerRadius: (from.innerRadius + from.outerRadius) / 2\n };\n super(f, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target.setAttributes(this.from);\n }\n\n onEnd(): void {\n this.target.pathProxy = null;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // 位置\n out.x = this.from.x + pieLeap1(ratio) * (this.to.x - this.from.x);\n out.y = this.from.y + pieLeap1(ratio) * (this.to.y - this.from.y);\n out.outerRadius = this.from.outerRadius + pieLeap2(ratio) * (this.to.outerRadius - this.from.outerRadius);\n // this.computePath(bounce1(ratio), this.fromCenter, this.toCenter, this.target.pathProxy);\n // if (this.vertical) {\n // out.y = this.to.y + bounce2(ratio) * 100;\n // } else {\n // // out.x1 = this.to.x1! + bounce2(ratio) * 100;\n // }\n // const cornerRadius = this.to.cornerRadius || 0;\n // out.cornerRadius = cornerRadius;\n // const centerX = this.to;\n // out.y = from.y! + (to.y! - from.y!) * r1;\n // const r1 = bounce1(ratio);\n // const r2 = bounce2(ratio);\n // // const\n // if (from.y1) {\n // out.y = from.y! + (to.y! - from.y!) * r1;\n // const height = to.y1! - to.y!;\n // const dh = height * r2;\n // out.y1 = Math.min(out.y + dh, this.to.y1!);\n // } else {\n // out.x = from.x! + (to.x! - from.x!) * r1;\n // const width = to.x! - to.x1!;\n // const dw = width * r2;\n // out.x1 = Math.max(out.x - dw, this.to.x1!);\n // }\n\n // out.y1 = from.y1 + (to.y1 - from.y1) * r;\n }\n}\n","import { ACustomAnimate, createLine } from '@visactor/vrender-core';\n\nexport class SymbolThrow extends ACustomAnimate<{ x?: number; y?: number }> {\n static label: string = 'symbol-throw';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n declare showLine: boolean;\n\n constructor(\n from: { x?: number; y?: number },\n to: { x?: number; y?: number },\n duration: number,\n easing: any,\n params: any\n ) {\n const f = {\n y: 0,\n x: params.width\n };\n\n super(f, to, duration, easing, params);\n this.showLine = params.showLine ?? true;\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes(this.from);\n if (this.showLine) {\n const shadowRoot = this.target.attachShadow();\n shadowRoot.add(createLine({ lineDash: [3, 3] }));\n }\n }\n\n static getPowIn(pow: number) {\n return function (t: number) {\n return Math.pow(t, pow);\n };\n }\n\n static cubicIn = SymbolThrow.getPowIn(3);\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.throw(ratio, out)) {\n this.bounce(ratio, out);\n }\n }\n onEnd(): void {\n this.target.setAttributes(this.to);\n this.bounce(1, {});\n }\n\n throw(ratio: number, out: Record) {\n ratio = Math.min(ratio * 2, 1);\n const { _layoutHeight } = this.target.attribute;\n const ratioY = SymbolThrow.cubicIn(ratio);\n const x = this.from.x! + (this.to.x! - this.from.x!) * ratio;\n const y = this.from.y! + (_layoutHeight! - this.from.y!) * ratioY;\n out.x = x;\n out.y = y;\n return ratio < 1;\n }\n\n bounce(ratio: number, out: Record) {\n ratio = Math.max((ratio - 0.5) * 2, 0);\n const { _layoutHeight, fill } = this.target.attribute;\n out.y = _layoutHeight - (_layoutHeight - this.to.y!) * ratio;\n const shadowRoot = this.target.shadowRoot;\n if (shadowRoot) {\n const line = shadowRoot.children[0];\n const height = _layoutHeight - out.y!;\n line.setAttributes({\n stroke: fill,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: height }\n ]\n });\n }\n }\n}\n","import { ACustomAnimate, createLine, generatorPathEasingFunc } from '@visactor/vrender-core';\n\nconst swingEaseStr =\n 'M 0 0 C 0.078 0.204 0.05 0.291 0.152 0.363 C 0.291 0.295 0.236 -0.224 0.334 -0.24 C 0.486 -0.224 0.48 0.202 0.566 0.217 C 0.696 0.183 0.622 -0.113 0.751 -0.138 C 0.873 -0.09 0.798 0.085 0.903 0.109 C 0.989 0.097 0.983 0.049 1 0';\nconst swingEase = generatorPathEasingFunc(swingEaseStr);\n\nexport class SymbolSwing extends ACustomAnimate<{ x?: number; y?: number }> {\n static label: string = 'symbol-swing';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n declare delta: number;\n declare showLine: boolean;\n\n constructor(\n from: { x?: number; y?: number },\n to: { x?: number; y?: number },\n duration: number,\n easing: any,\n params: any\n ) {\n super(from, to, duration, easing, params);\n this.delta = params.delta ?? 10;\n this.showLine = params.showLine ?? true;\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes({ ...this.from, y: this.target.attribute._layoutHeight });\n if (this.showLine) {\n const shadowRoot = this.target.attachShadow();\n shadowRoot.add(createLine({ lineDash: [3, 3], curveType: 'basis' }));\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if (!this.throw(ratio, out)) {\n // this.bounce(ratio, out);\n // }\n this.grow(ratio, out);\n this.swing(ratio, out);\n }\n onEnd(): void {\n this.target.setAttributes(this.to);\n this.swing(1, this.to);\n }\n\n grow(ratio: number, out: Record) {\n ratio = Math.min(ratio * 1.5, 1);\n const { _layoutHeight } = this.target.attribute;\n out.y = _layoutHeight - (_layoutHeight - this.to.y!) * ratio;\n out.x = this.to.x!;\n }\n\n swing(ratio: number, out: Record) {\n ratio = swingEase(ratio);\n const deltaX = this.delta * ratio;\n out.x += deltaX;\n\n const { _layoutHeight, fill } = this.target.attribute;\n\n const shadowRoot = this.target.shadowRoot;\n if (shadowRoot) {\n const line = shadowRoot.children[0];\n const height = _layoutHeight - out.y!;\n line.setAttributes({\n stroke: fill,\n points: [\n { x: 0, y: 0 },\n { x: -deltaX, y: height / 2 },\n // { x: -deltaX, y: height / 3 * 2 },\n { x: -deltaX, y: height }\n ]\n });\n }\n }\n}\n","export function flicker(t: number, n: number) {\n const step = 1 / n;\n let flag = 1;\n while (t > step) {\n t -= step;\n flag *= -1;\n }\n const v = (flag * t) / step;\n return v > 0 ? v : 1 + v;\n}\n\nexport function flicker1(t: number) {\n return flicker(t, 3);\n}\nexport function flicker2(t: number) {\n return flicker(t, 3);\n}\nexport function flicker3(t: number) {\n return flicker(t, 3);\n}\nexport function flicker4(t: number) {\n return flicker(t, 3);\n}\nexport function flicker5(t: number) {\n return flicker(t, 5);\n}\nexport function flicker6(t: number) {\n return flicker(t, 5);\n}\nexport function flicker7(t: number) {\n return flicker(t, 5);\n}\nexport function flicker8(t: number) {\n return flicker(t, 5);\n}\nexport function flicker9(t: number) {\n return flicker(t, 5);\n}\nexport function flicker10(t: number) {\n return flicker(t, 5);\n}\n","import { Easing } from '@visactor/vrender-core';\nimport { flicker } from './flicker';\n\nexport function registerEasing() {\n // 注册flicker\n for (let i = 0; i < 10; i++) {\n (Easing as any)[`flicker${i}`] = (t: number) => flicker(t, i);\n }\n}\n","const isUndefined = (value: any): value is undefined => {\n return value === undefined;\n};\n\nexport default isUndefined;\n","import { FederatedEvent } from './base-event';\nimport type { EventPoint } from '../../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for mouse events.\n */\nexport class FederatedMouseEvent extends FederatedEvent implements MouseEvent {\n /** Whether the \"alt\" key was pressed when this mouse event occurred. */\n altKey: boolean;\n\n /** The specific button that was pressed in this mouse event. */\n button: number;\n\n /** The button depressed when this event occurred. */\n buttons: number;\n\n /** Whether the \"control\" key was pressed when this mouse event occurred. */\n ctrlKey: boolean;\n\n /** Whether the \"meta\" key was pressed when this mouse event occurred. */\n metaKey: boolean;\n\n /** This is currently not implemented in the Federated Events API. */\n relatedTarget: EventTarget | null;\n\n /** Whether the \"shift\" key was pressed when this mouse event occurred. */\n shiftKey: boolean;\n\n /** The coordinates of the mouse event relative to the canvas. */\n client: EventPoint = {\n x: 0,\n y: 0\n };\n\n public get clientX(): number {\n return this.client.x;\n }\n\n public get clientY(): number {\n return this.client.y;\n }\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n /** The movement in this pointer relative to the last `mousemove` event. */\n movement: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get movementX(): number {\n return this.movement.x;\n }\n\n /** @readonly */\n get movementY(): number {\n return this.movement.y;\n }\n\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 offset: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get offsetX(): number {\n return this.offset.x;\n }\n\n /** @readonly */\n get offsetY(): number {\n return this.offset.y;\n }\n\n /** The pointer coordinates in world space. */\n global: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get globalX(): number {\n return this.global.x;\n }\n\n /** @readonly */\n get globalY(): number {\n return this.global.y;\n }\n\n screen: EventPoint = {\n x: 0,\n y: 0\n };\n /** @readonly */\n get screenX(): number {\n return this.screen.x;\n }\n /** @readonly */\n get screenY(): number {\n return this.screen.y;\n }\n\n /**\n * Whether the modifier key was pressed when this event natively occurred.\n * @param key - The modifier key.\n */\n getModifierState(key: string): boolean {\n return 'getModifierState' in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n\n /**\n * Not supported.\n * @param _typeArg\n * @param _canBubbleArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n * @param _screenXArg\n * @param _screenYArg\n * @param _clientXArg\n * @param _clientYArg\n * @param _ctrlKeyArg\n * @param _altKeyArg\n * @param _shiftKeyArg\n * @param _metaKeyArg\n * @param _buttonArg\n * @param _relatedTargetArg\n * @deprecated\n */\n // eslint-disable-next-line max-params\n initMouseEvent(\n _typeArg: string,\n _canBubbleArg: boolean,\n _cancelableArg: boolean,\n _viewArg: Window,\n _detailArg: number,\n _screenXArg: number,\n _screenYArg: number,\n _clientXArg: number,\n _clientYArg: number,\n _ctrlKeyArg: boolean,\n _altKeyArg: boolean,\n _shiftKeyArg: boolean,\n _metaKeyArg: boolean,\n _buttonArg: number,\n _relatedTargetArg: EventTarget\n ): void {\n throw new Error('Method not implemented.');\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for pointer events.\n */\nexport class FederatedPointerEvent extends FederatedMouseEvent implements PointerEvent {\n declare pickParams?: any;\n /**\n * The unique identifier of the pointer.\n */\n pointerId: number;\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n width = 0;\n\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n height = 0;\n\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n isPrimary = false;\n\n /**\n * The type of pointer that triggered the event.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\n */\n pointerType: string;\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pressure\n */\n pressure: number;\n\n /**\n * Barrel pressure on a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n tangentialPressure: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltX\n */\n tiltX: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltY\n */\n tiltY: number;\n\n /**\n * Twist of a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n twist: number;\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n getCoalescedEvents(): PointerEvent[] {\n if (this.type === 'pointermove' || this.type === 'mousemove' || this.type === 'touchmove') {\n return [this];\n }\n\n return [];\n }\n\n getPredictedEvents(): PointerEvent[] {\n throw new Error('getPredictedEvents is not supported!');\n }\n\n clone() {\n const event = new FederatedPointerEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyPointerData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n // copy propagation path for perf\n event.target = this.target;\n event.path = this.composedPath().slice();\n const p = this.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = this.type;\n\n return event;\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nexport class FederatedWheelEvent extends FederatedMouseEvent implements WheelEvent {\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 deltaMode: number;\n\n /** Horizontal scroll amount */\n deltaX: number;\n\n /** Vertical scroll amount */\n deltaY: number;\n\n /** z-axis scroll amount. */\n deltaZ: number;\n\n static readonly DOM_DELTA_PIXEL = 0;\n\n readonly DOM_DELTA_PIXEL = 0;\n\n static readonly DOM_DELTA_LINE = 1;\n\n readonly DOM_DELTA_LINE = 1;\n\n static readonly DOM_DELTA_PAGE = 2;\n\n readonly DOM_DELTA_PAGE = 2;\n\n clone() {\n const event = new FederatedWheelEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyWheelData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n event.target = this.target;\n event.path = this.composedPath().slice();\n const p = this.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = this.type;\n\n return event;\n }\n}\n","export const WILDCARD = '*';\n","export const clock = typeof performance === 'object' && (performance as any).now ? performance : Date;\n","import type { Dict } from '@visactor/vutils';\nimport { EventEmitter, Logger, get } from '@visactor/vutils';\nimport { FederatedMouseEvent, FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { IEventTarget } from '../interface/event';\nimport { WILDCARD } from './constant';\nimport type { FederatedEvent } from './federated-event/base-event';\nimport { clock } from './util';\nimport type { Cursor, IGraphic } from '../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// The maximum iterations used in propagation. This prevent infinite loops.\nconst PROPAGATION_LIMIT = 2048;\n\ntype TrackingData = {\n pressTargetsByButton: {\n [id: number]: IEventTarget[];\n };\n clicksByButton: {\n [id: number]: {\n clickCount: number;\n target: IEventTarget;\n timeStamp: number;\n };\n };\n overTargets: IEventTarget[];\n};\n\ntype EventManagerConfig = {\n /**\n * 多次点击之间的最大时间,默认为 200 ms\n * @default 200\n */\n clickInterval?: number;\n supportsTouchEvents?: boolean;\n};\n\ntype EmitterListener = { fn: (...args: any[]) => any; context: any; once: boolean };\ntype EmitterListeners = Record;\n\nfunction isMouseLike(pointerType: string) {\n return pointerType === 'mouse' || pointerType === 'pen';\n}\n\nconst DEFAULT_CLICK_INTERVAL = 200;\n\nexport class EventManager {\n rootTarget: IEventTarget;\n\n dispatch: any = new EventEmitter();\n\n cursor: Cursor | string;\n cursorTarget: IEventTarget | null = null;\n pauseNotify: boolean = false;\n\n protected mappingTable: Record<\n string,\n Array<{\n fn: (e: FederatedEvent, target: IEventTarget) => void;\n priority: number;\n }>\n >;\n\n protected mappingState: Record = {\n trackingData: {}\n };\n\n protected eventPool: Map = new Map();\n\n // 缓存上一个坐标点的拾取结果,用于优化在同一个点连续触发事件的拾取逻辑\n private _prePointTargetCache: Dict & { stageRenderCount: number };\n\n private _config: EventManagerConfig;\n\n constructor(root: IEventTarget, config: EventManagerConfig) {\n this.rootTarget = root;\n this.mappingTable = {};\n this._config = {\n clickInterval: DEFAULT_CLICK_INTERVAL,\n ...config\n };\n this.addEventMapping('pointerdown', this.onPointerDown);\n this.addEventMapping('pointermove', this.onPointerMove);\n this.addEventMapping('pointerout', this.onPointerOut);\n this.addEventMapping('pointerleave', this.onPointerOut);\n this.addEventMapping('pointerover', this.onPointerOver);\n this.addEventMapping('pointerup', this.onPointerUp);\n this.addEventMapping('pointerupoutside', this.onPointerUpOutside);\n this.addEventMapping('wheel', this.onWheel);\n }\n\n addEventMapping(type: string, fn: (e: FederatedEvent, target: IEventTarget) => void): void {\n if (!this.mappingTable[type]) {\n this.mappingTable[type] = [];\n }\n\n this.mappingTable[type].push({\n fn,\n priority: 0\n });\n this.mappingTable[type].sort((a, b) => a.priority - b.priority);\n }\n\n dispatchEvent(e: FederatedEvent, type?: string): void {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n\n this.propagate(e, type);\n this.dispatch.emit(type || e.type, e);\n }\n\n mapEvent(e: FederatedEvent): void {\n if (!this.rootTarget) {\n return;\n }\n const mappers = this.mappingTable[e.type];\n\n let target;\n const cacheKey = `${e.canvasX}-${e.canvasY}`;\n if (\n this._prePointTargetCache?.[cacheKey] &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage.renderCount ===\n (this._prePointTargetCache?.stageRenderCount as number)\n ) {\n target = this._prePointTargetCache[cacheKey];\n } else {\n target = this.pickTarget(e.viewX, e.viewY, e);\n // 缓存上一个坐标点的拾取结果,减少拾取的次数,如 pointermove pointerdown 和 pointerup 在同一个点触发\n // 如果存在params,那么就不缓存\n if (!(e as any).pickParams) {\n this._prePointTargetCache = {\n [cacheKey]: target,\n stageRenderCount: target?.stage.renderCount ?? -1\n };\n }\n }\n\n if (mappers) {\n for (let i = 0, j = mappers.length; i < j; i++) {\n mappers[i].fn(e, target);\n }\n } else {\n Logger.getInstance().warn(`[EventManager]: Event mapping not defined for ${e.type}`);\n }\n }\n\n propagate(e: FederatedEvent, type?: string): void {\n if (!e.target) {\n return;\n }\n\n const composedPath = e.composedPath();\n\n e.eventPhase = e.CAPTURING_PHASE;\n\n for (let i = 0, j = composedPath.length - 1; i < j; i++) {\n e.currentTarget = composedPath[i];\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n\n e.eventPhase = e.BUBBLING_PHASE;\n\n for (let i = composedPath.length - 2; i >= 0; i--) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n }\n\n propagationPath(target: IEventTarget): IEventTarget[] {\n const propagationPath = [target];\n\n for (let i = 0; i < PROPAGATION_LIMIT && target !== this.rootTarget && target.parent; i++) {\n if (!target.parent) {\n throw new Error('Cannot find propagation path to disconnected target');\n }\n\n propagationPath.push(target.parent);\n\n target = target.parent;\n }\n\n propagationPath.reverse();\n\n return propagationPath;\n }\n\n protected notifyTarget(e: FederatedEvent, type?: string): void {\n if (this.pauseNotify) {\n return;\n }\n type = type ?? e.type;\n const key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? `${type}capture` : type;\n\n this.notifyListeners(e, key);\n\n if (e.eventPhase === e.AT_TARGET) {\n this.notifyListeners(e, type);\n }\n }\n\n protected onPointerDown = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerdown');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchstart');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightdown' : 'mousedown');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerMove = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n const trackingData = this.trackingData(from.pointerId);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n if (trackingData.overTargets && outTarget && outTarget !== this.rootTarget && outTarget !== e.target) {\n const outType = from.type === 'mousemove' ? 'mouseout' : 'pointerout';\n const outEvent = this.createPointerEvent(from, outType, outTarget || undefined);\n\n this.dispatchEvent(outEvent, 'pointerout');\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n if (!e.composedPath().includes(outTarget!)) {\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target)) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n this.freeEvent(leaveEvent);\n }\n\n this.freeEvent(outEvent);\n }\n\n if (outTarget !== e.target) {\n const overType = from.type === 'mousemove' ? 'mouseover' : 'pointerover';\n const overEvent = this.clonePointerEvent(e, overType);\n\n this.dispatchEvent(overEvent, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(overEvent, 'mouseover');\n }\n\n let overTargetAncestor = outTarget?.parent;\n\n while (overTargetAncestor && overTargetAncestor !== this.rootTarget.parent) {\n if (overTargetAncestor === e.target) {\n break;\n }\n\n overTargetAncestor = overTargetAncestor.parent;\n }\n\n const didPointerEnter = !overTargetAncestor || overTargetAncestor === this.rootTarget.parent;\n\n if (didPointerEnter) {\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n let currentTarget = enterEvent.target;\n // 预先计算 outTarget 的所有祖先\n const outTargetAncestors = new Set();\n let ancestor = outTarget;\n while (ancestor && ancestor !== this.rootTarget) {\n outTargetAncestors.add(ancestor);\n ancestor = ancestor.parent;\n }\n\n while (currentTarget && currentTarget !== outTarget && currentTarget !== this.rootTarget.parent) {\n // 检查 currentTarget 是否是 outTarget 的祖先\n if (!outTargetAncestors.has(currentTarget)) {\n enterEvent.currentTarget = currentTarget;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n this.freeEvent(enterEvent);\n }\n\n this.freeEvent(overEvent);\n }\n\n const propagationMethod = 'dispatchEvent';\n\n this[propagationMethod](e, 'pointermove');\n\n if (e.pointerType === 'touch') {\n this[propagationMethod](e, 'touchmove');\n }\n\n if (isMouse) {\n this[propagationMethod](e, 'mousemove');\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerOver = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n\n this.dispatchEvent(e, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(e, 'mouseover');\n }\n if (e.pointerType === 'mouse') {\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n\n enterEvent.target = enterEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n this.freeEvent(enterEvent);\n };\n\n protected onPointerOut = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n if (trackingData.overTargets) {\n const isMouse = isMouseLike(from.pointerType);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n const outEvent = this.createPointerEvent(from, 'pointerout', outTarget || undefined);\n\n this.dispatchEvent(outEvent);\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && leaveEvent.target !== this.rootTarget.parent) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = [];\n\n this.freeEvent(outEvent);\n this.freeEvent(leaveEvent);\n }\n\n this.cursorTarget = null;\n this.cursor = '';\n };\n\n protected onPointerUp = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const now = clock.now();\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerup');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchend');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightup' : 'mouseup');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n\n let clickTarget = pressTarget;\n\n if (pressTarget && !e.composedPath().includes(pressTarget)) {\n let currentTarget = pressTarget;\n\n while (currentTarget && !e.composedPath().includes(currentTarget)) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.notifyTarget(e, isRightButton ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n\n clickTarget = currentTarget;\n }\n\n if (clickTarget) {\n const clickEvent = this.clonePointerEvent(e, 'click');\n\n clickEvent.target = clickTarget;\n clickEvent.path = [];\n clickEvent.detailPath = [];\n\n if (!trackingData.clicksByButton[from.button]) {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now\n };\n }\n\n const clickHistory = trackingData.clicksByButton[from.button];\n if (\n clickHistory.target === clickEvent.target &&\n now - clickHistory.timeStamp < (this._config.clickInterval ?? DEFAULT_CLICK_INTERVAL)\n ) {\n ++clickHistory.clickCount;\n } else {\n clickHistory.clickCount = 1;\n }\n\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n\n clickEvent.detail = clickHistory.clickCount;\n\n if (isMouseLike(clickEvent.pointerType)) {\n this.dispatchEvent(clickEvent, 'click');\n\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dblclick');\n }\n } else if (clickEvent.pointerType === 'touch' && this._config.supportsTouchEvents) {\n this.dispatchEvent(clickEvent, 'tap');\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dbltap');\n }\n }\n\n this.dispatchEvent(clickEvent, 'pointertap');\n\n this.freeEvent(clickEvent);\n }\n\n this.freeEvent(e);\n };\n\n protected onPointerUpOutside = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n const e = this.createPointerEvent(from, from.type, target);\n\n if (pressTarget) {\n let currentTarget = pressTarget;\n\n while (currentTarget) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n this.notifyTarget(e, e.button === 2 ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n }\n\n this.freeEvent(e);\n };\n\n protected onWheel = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedWheelEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-wheel event as a wheel event');\n\n return;\n }\n\n const wheelEvent = this.createWheelEvent(from, target);\n\n this.dispatchEvent(wheelEvent);\n this.freeEvent(wheelEvent);\n };\n\n protected findMountedTarget(propagationPath: IEventTarget[] | null): IEventTarget | null {\n if (!propagationPath) {\n return null;\n }\n\n let currentTarget = propagationPath[0];\n\n for (let i = 1; i < propagationPath.length; i++) {\n if (propagationPath[i].parent === currentTarget) {\n currentTarget = propagationPath[i];\n } else {\n break;\n }\n }\n\n return currentTarget;\n }\n\n protected createPointerEvent(\n from: FederatedPointerEvent,\n type?: string,\n target?: IEventTarget\n ): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n\n if (target) {\n event.target = target;\n } else {\n event.target = this.pickTarget(event.viewX ?? event.global.x, event.viewY ?? event.global.y, event);\n }\n\n if (typeof type === 'string') {\n event.type = type;\n }\n\n return event;\n }\n\n protected createWheelEvent(from: FederatedWheelEvent, target?: IEventTarget): FederatedWheelEvent {\n const event = this.allocateEvent(FederatedWheelEvent);\n\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = target || this.pickTarget(event.viewX ?? event.global.x, event.viewY ?? event.global.y, event);\n\n return event;\n }\n\n protected clonePointerEvent(from: FederatedPointerEvent, type?: string): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.target = from.target;\n event.path = from.composedPath().slice();\n const p = from.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = type ?? event.type;\n\n return event;\n }\n\n copyWheelData(from: FederatedWheelEvent, to: FederatedWheelEvent): void {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n\n copyPointerData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedPointerEvent && to instanceof FederatedPointerEvent)) {\n return;\n }\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 copyMouseData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent)) {\n return;\n }\n\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.ctrlKey = from.ctrlKey;\n to.shiftKey = from.shiftKey;\n to.metaKey = from.metaKey;\n\n ['client', 'movement', 'canvas', 'screen', 'global', 'offset', 'viewport'].forEach(key => {\n to[key].x = from[key].x;\n to[key].y = from[key].y;\n });\n }\n\n copyData(from: FederatedEvent, to: FederatedEvent): void {\n to.isTrusted = from.isTrusted;\n to.srcElement = from.srcElement;\n to.timeStamp = clock.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.which = from.which;\n\n to.layer.x = from.layer.x;\n to.layer.y = from.layer.y;\n\n to.page.x = from.page.x;\n to.page.y = from.page.y;\n\n (to as any).pickParams = (from as any).pickParams;\n }\n\n protected trackingData(id: number): TrackingData {\n if (!this.mappingState.trackingData[id]) {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n\n return this.mappingState.trackingData[id];\n }\n\n protected allocateEvent(constructor: { new (boundary: EventManager): T }): T {\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n const event = (this.eventPool.get(constructor as any)?.pop() as T) || new constructor(this);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n return event;\n }\n\n protected freeEvent(event: T): void {\n if (event.manager !== this) {\n throw new Error('It is illegal to free an event not managed by this EventManager!');\n }\n\n const constructor = event.constructor;\n\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n this.eventPool.get(constructor as any)?.push(event);\n }\n\n private notifyListeners(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[type];\n\n if (listeners) {\n if ('fn' in listeners) {\n if (listeners.once) {\n e.currentTarget.removeEventListener(type, listeners.fn, { once: true });\n }\n listeners.fn.call(listeners.context, e);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n if (listeners[i].once) {\n e.currentTarget.removeEventListener(type, listeners[i].fn, { once: true });\n }\n listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n // 永远触发WILDCARD事件代理\n this.emitDelegation(e, type);\n }\n\n private emitDelegation(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n }\n\n private pickTarget(x: number, y: number, e: any) {\n let target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const pickResult = this.rootTarget.pick(x, y);\n if (pickResult && pickResult.graphic) {\n target = pickResult.graphic;\n } else if (pickResult && pickResult.group) {\n target = pickResult.group;\n // } else if (x >= 0 && x <= get(this.rootTarget, 'width') && y >= 0 && y <= get(this.rootTarget, 'height')) {\n } else if ((this.rootTarget as unknown as IGraphic).AABBBounds.contains(x, y)) {\n target = this.rootTarget;\n } else {\n target = null;\n }\n if (e) {\n e.pickParams = pickResult.params;\n }\n return target;\n }\n\n release() {\n this.dispatch.removeAllListeners();\n this.eventPool.clear();\n this.rootTarget = null;\n this.mappingTable = null;\n this.mappingState = null;\n this.cursorTarget = null;\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { isUndefined, has, isString } from '@visactor/vutils';\nimport type { IGlobal, IWindow } from '../interface';\nimport { EventManager } from './event-manager';\nimport { FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { FederatedMouseEvent } from './federated-event/mouse-event';\nimport type { EventPoint, IElementLike, IEventTarget, NativeEvent, RenderConfig } from '../interface/event';\nimport { clock } from './util';\n\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER: Record = {\n touchstart: 'pointerdown',\n touchend: 'pointerup',\n touchendoutside: 'pointerupoutside',\n touchmove: 'pointermove',\n touchcancel: 'pointercancel'\n};\n\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * The system for handling UI events.\n */\nexport class EventSystem {\n private readonly globalObj: IGlobal;\n readonly manager: EventManager;\n\n /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n // readonly supportsTouchEvents = 'ontouchstart' in this.globalObj;\n readonly supportsTouchEvents: boolean;\n\n /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n // readonly supportsPointerEvents = !!this.globalObj.PointerEvent;\n readonly supportsPointerEvents: boolean;\n\n readonly supportsMouseEvents: boolean;\n\n readonly applyStyles: boolean;\n\n /**\n * Should default browser actions automatically be prevented.\n * Does not apply to pointer events for backwards compatibility\n * preventDefault on pointer events stops mouse events from firing\n * Thus, for every pointer event, there will always be either a mouse of touch event alongside it.\n * @default false\n */\n autoPreventDefault: boolean;\n\n /**\n * Dictionary of how different cursor modes are handled. Strings are handled as CSS cursor\n * values, objects are handled as dictionaries of CSS values for domElement,\n * and functions are called instead of changing the CSS.\n * Default CSS cursor values are provided for 'default' and 'pointer' modes.\n * @member {Object void) | CSSStyleDeclaration>}\n */\n cursorStyles: Record void) | CSSStyleDeclaration>;\n\n /**\n * The DOM element to which the root event listeners are bound. This is automatically set to\n */\n domElement: IElementLike | IWindow | null;\n\n /** The resolution used to convert between the DOM client space into world space. */\n resolution = 1;\n\n private currentCursor: string;\n private rootPointerEvent: FederatedPointerEvent;\n private rootWheelEvent: FederatedWheelEvent;\n private eventsAdded: boolean;\n\n constructor(params: RenderConfig) {\n const {\n targetElement, // 别名,避免和浏览器window重名\n resolution,\n rootNode,\n global,\n autoPreventDefault = false,\n clickInterval,\n supportsTouchEvents = global.supportsTouchEvents,\n supportsPointerEvents = global.supportsPointerEvents\n } = params;\n this.manager = new EventManager(rootNode, {\n clickInterval,\n supportsTouchEvents: supportsTouchEvents\n });\n\n this.globalObj = global;\n this.supportsPointerEvents = supportsPointerEvents;\n this.supportsTouchEvents = supportsTouchEvents;\n this.supportsMouseEvents = global.supportsMouseEvents;\n this.applyStyles = global.applyStyles;\n\n this.autoPreventDefault = autoPreventDefault;\n this.eventsAdded = false;\n\n this.rootPointerEvent = new FederatedPointerEvent();\n this.rootWheelEvent = new FederatedWheelEvent();\n\n this.cursorStyles = {\n default: 'inherit',\n pointer: 'pointer'\n };\n\n this.resolution = resolution;\n this.setTargetElement(targetElement);\n }\n\n release(): void {\n this.removeEvents();\n this.manager && this.manager.release();\n this.domElement = null;\n (this as any).manager = null;\n (this as any).globalObj = null;\n }\n\n setCursor(mode: string, target: IEventTarget | null | 'ignore'): void {\n if (!target && !(this.manager.rootTarget as any).window._handler.canvas.controled) {\n return;\n }\n\n if (!mode) {\n mode = 'default';\n }\n const { applyStyles, domElement } = this;\n\n if (this.currentCursor === mode) {\n return;\n }\n this.currentCursor = mode;\n const style = this.cursorStyles[mode];\n if (style) {\n if (typeof style === 'string' && applyStyles) {\n domElement.style.cursor = style;\n } else if (typeof style === 'function') {\n style(mode);\n } else if (typeof style === 'object' && applyStyles) {\n Object.assign(domElement.style, style);\n }\n } else if (applyStyles && isString(mode) && !has(this.cursorStyles, mode)) {\n domElement.style.cursor = mode;\n }\n }\n\n private onPointerDown = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const events = this.normalizeToPointerData(nativeEvent);\n\n if (this.autoPreventDefault && (events[0] as any).isNormalized) {\n const cancelable = nativeEvent.cancelable || !('cancelable' in nativeEvent);\n\n if (cancelable) {\n nativeEvent.preventDefault();\n }\n }\n\n for (let i = 0, j = events.length; i < j; i++) {\n const nativeEvent = events[i];\n const federatedEvent = this.bootstrapEvent(this.rootPointerEvent, nativeEvent);\n\n this.manager.mapEvent(federatedEvent);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerMove = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n if (this.isEventOutsideOfTargetElement(nativeEvent)) {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerUp = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const outside = this.isEventOutsideOfTargetViewPort(nativeEvent) ? 'outside' : '';\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n event.type += outside;\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerOverOut = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n protected onWheel = (nativeEvent: WheelEvent): void => {\n const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n\n this.manager.mapEvent(wheelEvent);\n };\n\n setTargetElement(element: IElementLike | null): void {\n this.removeEvents();\n this.domElement = element;\n this.addEvents();\n }\n\n private addEvents(): void {\n if (this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('pointermove', this.onPointerMove, true);\n domElement.addEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.addEventListener('pointerdown', this.onPointerDown, true);\n domElement.addEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.addEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('mousemove', this.onPointerMove, true);\n domElement.addEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.addEventListener('mousedown', this.onPointerDown, true);\n domElement.addEventListener('mouseout', this.onPointerOverOut, true);\n domElement.addEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.addEventListener('touchstart', this.onPointerDown, true);\n domElement.addEventListener('touchend', this.onPointerUp, true);\n domElement.addEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.addEventListener('wheel', this.onWheel, {\n capture: true\n });\n\n this.eventsAdded = true;\n }\n\n private removeEvents(): void {\n if (!this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('pointermove', this.onPointerMove, true);\n domElement.removeEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.removeEventListener('pointerdown', this.onPointerDown, true);\n domElement.removeEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.removeEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('mousemove', this.onPointerMove, true);\n domElement.removeEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.removeEventListener('mousedown', this.onPointerDown, true);\n domElement.removeEventListener('mouseout', this.onPointerOverOut, true);\n domElement.removeEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.removeEventListener('touchstart', this.onPointerDown, true);\n domElement.removeEventListener('touchend', this.onPointerUp, true);\n domElement.removeEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.removeEventListener('wheel', this.onWheel, true);\n\n this.domElement = null;\n this.eventsAdded = false;\n }\n\n private mapToViewportPoint(event: IPointLike): EventPoint {\n if ((this.domElement as IWindow).pointTransform) {\n return (this.domElement as IWindow).pointTransform(event.x, event.y);\n }\n return event;\n }\n\n private mapToCanvasPoint(nativeEvent: PointerEvent | WheelEvent | TouchEvent): EventPoint {\n const point = this.globalObj?.mapToCanvasPoint(nativeEvent, this.domElement);\n\n if (point) {\n return point;\n }\n\n let x: number = 0;\n let y: number = 0;\n if ((nativeEvent as TouchEvent).changedTouches) {\n const data = (nativeEvent as TouchEvent).changedTouches[0] ?? ({} as any);\n x = data.clientX || 0;\n y = data.clientY || 0;\n } else {\n x = (nativeEvent as PointerEvent | WheelEvent).clientX || 0;\n y = (nativeEvent as PointerEvent | WheelEvent).clientY || 0;\n }\n const rect = this.domElement.getBoundingClientRect();\n return {\n x: x - rect.left,\n y: y - rect.top\n };\n }\n\n private normalizeToPointerData(event: TouchEvent | MouseEvent | PointerEvent): PointerEvent[] {\n const normalizedEvents = [];\n\n if (\n this.supportsTouchEvents &&\n (event as TouchEvent).changedTouches &&\n (event as TouchEvent).changedTouches.length\n ) {\n for (let i = 0, li = (event as TouchEvent).changedTouches.length; i < li; i++) {\n const touch = (event as TouchEvent).changedTouches[i] as VRenderTouch;\n\n if (isUndefined(touch.button)) {\n touch.button = 0;\n }\n if (isUndefined(touch.buttons)) {\n touch.buttons = 1;\n }\n if (isUndefined(touch.isPrimary)) {\n touch.isPrimary = (event as TouchEvent).touches.length === 1 && event.type === 'touchstart';\n }\n if (isUndefined(touch.width)) {\n touch.width = touch.radiusX || 1;\n }\n if (isUndefined(touch.height)) {\n touch.height = touch.radiusY || 1;\n }\n if (isUndefined(touch.tiltX)) {\n touch.tiltX = 0;\n }\n if (isUndefined(touch.tiltY)) {\n touch.tiltY = 0;\n }\n if (isUndefined(touch.pointerType)) {\n touch.pointerType = 'touch';\n }\n if (isUndefined(touch.pointerId)) {\n touch.pointerId = touch.identifier || 0;\n }\n if (isUndefined(touch.pressure)) {\n touch.pressure = touch.force || 0.5;\n }\n if (isUndefined(touch.twist)) {\n touch.twist = 0;\n }\n if (isUndefined(touch.tangentialPressure)) {\n touch.tangentialPressure = 0;\n }\n if (isUndefined(touch.layerX)) {\n touch.layerX = touch.offsetX = touch.clientX;\n }\n if (isUndefined(touch.layerY)) {\n touch.layerY = touch.offsetY = touch.clientY;\n }\n\n touch.isNormalized = true;\n touch.type = event.type;\n\n normalizedEvents.push(touch);\n }\n } else if (\n !this.globalObj.supportsMouseEvents ||\n (event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof PointerEvent)))\n ) {\n const tempEvent = event as VRenderPointerEvent;\n\n if (isUndefined(tempEvent.isPrimary)) {\n tempEvent.isPrimary = true;\n }\n if (isUndefined(tempEvent.width)) {\n tempEvent.width = 1;\n }\n if (isUndefined(tempEvent.height)) {\n tempEvent.height = 1;\n }\n if (isUndefined(tempEvent.tiltX)) {\n tempEvent.tiltX = 0;\n }\n if (isUndefined(tempEvent.tiltY)) {\n tempEvent.tiltY = 0;\n }\n if (isUndefined(tempEvent.pointerType)) {\n tempEvent.pointerType = 'mouse';\n }\n if (isUndefined(tempEvent.pointerId)) {\n tempEvent.pointerId = MOUSE_POINTER_ID;\n }\n if (isUndefined(tempEvent.pressure)) {\n tempEvent.pressure = 0.5;\n }\n if (isUndefined(tempEvent.twist)) {\n tempEvent.twist = 0;\n }\n if (isUndefined(tempEvent.tangentialPressure)) {\n tempEvent.tangentialPressure = 0;\n }\n\n tempEvent.isNormalized = true;\n\n normalizedEvents.push(tempEvent);\n } else {\n normalizedEvents.push(event);\n }\n\n return normalizedEvents as PointerEvent[];\n }\n\n protected normalizeWheelEvent(nativeEvent: WheelEvent): FederatedWheelEvent {\n const event = this.rootWheelEvent;\n\n this.transferMouseData(event, nativeEvent);\n\n event.deltaMode = nativeEvent.deltaMode;\n event.deltaX = nativeEvent.deltaX;\n event.deltaY = nativeEvent.deltaY;\n event.deltaZ = nativeEvent.deltaZ;\n\n // 获取相对画布坐标\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.nativeEvent = nativeEvent;\n event.type = nativeEvent.type;\n\n return event;\n }\n\n /**\n * Normalizes the {@code nativeEvent} into a federateed {@code FederatedPointerEvent}.\n * @param event\n * @param nativeEvent\n */\n private bootstrapEvent(event: FederatedPointerEvent, nativeEvent: PointerEvent): FederatedPointerEvent {\n event.originalEvent = null;\n event.nativeEvent = nativeEvent;\n\n event.pointerId = nativeEvent.pointerId;\n event.width = nativeEvent.width;\n event.height = nativeEvent.height;\n event.isPrimary = nativeEvent.isPrimary;\n event.pointerType = nativeEvent.pointerType;\n event.pressure = nativeEvent.pressure;\n event.tangentialPressure = nativeEvent.tangentialPressure;\n event.tiltX = nativeEvent.tiltX;\n event.tiltY = nativeEvent.tiltY;\n event.twist = nativeEvent.twist;\n this.transferMouseData(event, nativeEvent);\n\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.isTrusted = nativeEvent.isTrusted;\n if (event.type === 'pointerleave') {\n event.type = 'pointerout';\n }\n if (event.type.startsWith('mouse')) {\n event.type = event.type.replace('mouse', 'pointer');\n }\n if (event.type.startsWith('touch')) {\n event.type = TOUCH_TO_POINTER[event.type] || event.type;\n }\n\n return event;\n }\n\n /**\n * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n * @param event\n * @param nativeEvent\n */\n private transferMouseData(event: FederatedMouseEvent, nativeEvent: MouseEvent): void {\n event.isTrusted = nativeEvent.isTrusted;\n event.srcElement = nativeEvent.srcElement as IEventTarget;\n event.timeStamp = clock.now();\n event.type = nativeEvent.type;\n\n event.altKey = nativeEvent.altKey;\n event.button = nativeEvent.button;\n event.buttons = nativeEvent.buttons;\n event.client.x = nativeEvent.clientX;\n event.client.y = nativeEvent.clientY;\n event.ctrlKey = nativeEvent.ctrlKey;\n event.shiftKey = nativeEvent.shiftKey;\n event.metaKey = nativeEvent.metaKey;\n event.movement.x = nativeEvent.movementX;\n event.movement.y = nativeEvent.movementY;\n event.page.x = nativeEvent.pageX;\n event.page.y = nativeEvent.pageY;\n event.relatedTarget = null;\n }\n\n private isEventOutsideOfTargetViewPort(nativeEvent: NativeEvent) {\n if (this.isEventOutsideOfTargetElement(nativeEvent)) {\n return true;\n }\n\n // 判断点是否在区间内\n if ((this.domElement as IWindow).getViewBox) {\n const p = this.mapToViewportPoint(this.mapToCanvasPoint(nativeEvent as any));\n const b = (this.domElement as IWindow).getViewBox();\n const w = b.width();\n const h = b.height();\n const contain = p.x < w && p.y < h && p.x > 0 && p.y > 0;\n return !contain;\n }\n return false;\n }\n\n private isEventOutsideOfTargetElement(nativeEvent: NativeEvent) {\n let target = nativeEvent.target;\n\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0) {\n target = nativeEvent.composedPath()[0];\n }\n\n const nativeElement = this.domElement.getNativeHandler\n ? this.domElement.getNativeHandler().nativeCanvas\n : this.domElement;\n\n return target !== nativeElement;\n }\n\n pauseTriggerEvent() {\n this.manager.pauseNotify = true;\n }\n resumeTriggerEvent() {\n this.manager.pauseNotify = false;\n }\n}\n\ninterface VRenderPointerEvent extends PointerEvent {\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n isNormalized: boolean;\n type: string;\n}\n\ninterface VRenderTouch extends Touch {\n button: number;\n buttons: number;\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n layerX: number;\n layerY: number;\n offsetX: number;\n offsetY: number;\n isNormalized: boolean;\n type: string;\n}\n","import { Generator } from '../../common/generator';\nimport { application } from '../../application';\nimport type { FullTap, IGraphic, IPlugin, IPluginService } from '../../interface';\n\nexport class AutoRenderPlugin implements IPlugin {\n name: 'AutoRenderPlugin' = 'AutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n handleChange = (graphic: IGraphic) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === this.pluginService.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n };\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAttributeUpdate.tap(this.key, this.handleChange);\n application.graphicService.hooks.onSetStage.tap(this.key, this.handleChange);\n application.graphicService.hooks.onRemove.tap(this.key, this.handleChange);\n }\n deactivate(context: IPluginService): void {\n const filterByName = (taps: FullTap[]) => {\n return taps.filter(item => {\n return item.name !== this.key;\n });\n };\n\n application.graphicService.hooks.onAttributeUpdate.taps = filterByName(\n application.graphicService.hooks.onAttributeUpdate.taps\n );\n application.graphicService.hooks.onSetStage.taps = filterByName(application.graphicService.hooks.onSetStage.taps);\n application.graphicService.hooks.onRemove.taps = filterByName(application.graphicService.hooks.onRemove.taps);\n }\n}\n","import { Generator } from '../../common/generator';\nimport { application } from '../../application';\nimport type { IGraphic, IPlugin, IPluginService } from '../../interface';\n\nexport class AutoRefreshPlugin implements IPlugin {\n name: 'AutoRefreshPlugin' = 'AutoRefreshPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n dpr: number;\n rafId: number;\n\n handleChange = (graphic: IGraphic) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === this.pluginService.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n };\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.dpr = application.global.devicePixelRatio;\n this.refresh();\n }\n\n refresh() {\n if (!this._refreshByMediaQuery()) {\n this._refreshByRaf();\n }\n }\n protected _refreshByRaf() {\n const raf = application.global.getRequestAnimationFrame();\n this.rafId = raf(() => {\n if (application.global.devicePixelRatio !== this.dpr) {\n this.dpr = application.global.devicePixelRatio;\n this.pluginService.stage.setDpr(this.dpr, true);\n }\n this.refresh();\n });\n }\n protected _refreshByMediaQuery() {\n try {\n const mqString = `(resolution: ${window.devicePixelRatio}dppx)`;\n\n const updatePixelRatio = () => {\n if (window.devicePixelRatio !== this.dpr) {\n this.dpr = window.devicePixelRatio;\n this.pluginService.stage.setDpr(this.dpr, true);\n }\n };\n\n matchMedia(mqString).addEventListener('change', updatePixelRatio);\n } catch (err) {\n return false;\n }\n return true;\n }\n deactivate(context: IPluginService): void {\n const craf = application.global.getCancelAnimationFrame();\n craf && this.rafId && craf(this.rafId);\n }\n}\n","import type { IGroup, IPlugin, IPluginService, IDrawContext } from '../../interface';\nimport { application } from '../../application';\nimport { Generator } from '../../common/generator';\n\nexport class IncrementalAutoRenderPlugin implements IPlugin {\n name: 'IncrementalAutoRenderPlugin' = 'IncrementalAutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n protected nextFrameRenderGroupSet: Set = new Set();\n protected willNextFrameRender: boolean = false;\n nextUserParams: Partial = {};\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAddIncremental.tap(this.key, (graphic, group, stage) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === context.stage && graphic.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.renderNextFrame(group);\n }\n });\n application.graphicService.hooks.onClearIncremental.tap(this.key, (group, stage) => {\n if (group.stage === context.stage && group.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.nextUserParams.restartIncremental = true;\n this.renderNextFrame(group);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.onAddIncremental.taps =\n application.graphicService.hooks.onAddIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onClearIncremental.taps =\n application.graphicService.hooks.onClearIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n renderNextFrame(group: IGroup): void {\n this.nextFrameRenderGroupSet.add(group);\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n application.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame();\n this.willNextFrameRender = false;\n });\n }\n }\n\n _doRenderInThisFrame() {\n const stage = this.pluginService.stage;\n if (this.nextFrameRenderGroupSet.size) {\n this.nextFrameRenderGroupSet.forEach(group => {\n const layer = group.layer;\n if (!layer || !group.layer.subLayers) {\n return;\n }\n const subLayer = group.layer.subLayers.get(group._uid);\n if (!subLayer || !subLayer.drawContribution) {\n return;\n }\n subLayer.drawContribution.draw(stage.renderService, {\n stage,\n layer,\n viewBox: stage.window.getViewBox(),\n transMatrix: stage.window.getViewBoxTransform(),\n // TODO: 多图层时不应该再用默认background\n clear: 'transparent',\n renderService: stage.renderService,\n updateBounds: false,\n startAtId: group._uid,\n context: subLayer.layer.getNativeHandler().getContext(),\n ...this.nextUserParams\n });\n });\n this.nextUserParams = {};\n this.nextFrameRenderGroupSet.clear();\n }\n }\n}\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport type { IGraphic, IStage, IPlugin, IPluginService } from '../../interface';\nimport { application } from '../../application';\n\nconst globalBounds = new AABBBounds();\n\nexport class DirtyBoundsPlugin implements IPlugin {\n name: 'DirtyBoundsPlugin' = 'DirtyBoundsPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n stage.dirtyBounds.clear();\n });\n application.graphicService.hooks.beforeUpdateAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !graphic.shouldSelfChangeUpdateAABBBounds()) {\n return;\n }\n if (willUpdate) {\n globalBounds.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n stage.dirty(globalBounds, graphic.parent && graphic.parent.globalTransMatrix);\n }\n }\n );\n application.graphicService.hooks.afterUpdateAABBBounds.tap(\n this.key,\n (\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) => {\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !selfChange) {\n return;\n }\n stage.dirty(params.globalAABBBounds);\n }\n );\n application.graphicService.hooks.clearAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, bounds: IAABBBounds) => {\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n if (stage) {\n stage.dirty(bounds);\n }\n }\n );\n application.graphicService.hooks.onRemove.tap(this.key, (graphic: IGraphic) => {\n const stage = graphic.stage;\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n if (stage) {\n stage.dirty(graphic.globalAABBBounds);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.beforeUpdateAABBBounds.taps =\n application.graphicService.hooks.beforeUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.afterUpdateAABBBounds.taps =\n application.graphicService.hooks.afterUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.clearAABBBounds.taps =\n application.graphicService.hooks.clearAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onRemove.taps = application.graphicService.hooks.onRemove.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n}\n","import { application } from '../../application';\nimport type { ITickHandler } from '../../interface/animate';\n\nexport class RAFTickHandler implements ITickHandler {\n protected released: boolean;\n\n static Avaliable(): boolean {\n return !!application.global.getRequestAnimationFrame();\n }\n avaliable(): boolean {\n return RAFTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n const raf = application.global.getRequestAnimationFrame();\n raf(() => {\n if (this.released) {\n return;\n }\n cb(this);\n });\n }\n\n release() {\n this.released = true;\n }\n getTime() {\n return Date.now();\n }\n}\n","import type { ITickHandler } from '../../interface/animate';\n\nexport class TimeOutTickHandler implements ITickHandler {\n protected timerId: number;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return TimeOutTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n this.timerId = setTimeout(() => {\n cb(this);\n }, interval) as unknown as number;\n }\n\n release() {\n if (this.timerId > 0) {\n clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n getTime() {\n return Date.now();\n }\n}\n","import { EventEmitter, Logger } from '@visactor/vutils';\nimport type { ITickHandler, ITickerHandlerStatic, ITimeline, ITicker } from '../../interface';\nimport { application } from '../../application';\nimport type { TickerMode } from './type';\nimport { STATUS } from './type';\nimport { RAFTickHandler } from './raf-tick-handler';\nimport { TimeOutTickHandler } from './timeout-tick-handler';\n\nexport class DefaultTicker extends EventEmitter implements ITicker {\n protected interval: number;\n protected tickerHandler: ITickHandler;\n protected _mode: TickerMode;\n protected status: STATUS;\n protected lastFrameTime: number;\n protected tickCounts: number;\n protected timelines: ITimeline[];\n autoStop: boolean;\n\n set mode(m: TickerMode) {\n if (this._mode === m) {\n return;\n }\n this._mode = m;\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n constructor(timelines: ITimeline[] = []) {\n super();\n this.init();\n this.lastFrameTime = -1;\n this.tickCounts = 0;\n this.timelines = timelines;\n this.autoStop = true;\n }\n\n init() {\n this.interval = NaN;\n this.status = STATUS.INITIAL;\n application.global.hooks.onSetEnv.tap('default-ticker', () => {\n this.initHandler();\n });\n if (application.global.env) {\n this.initHandler();\n }\n }\n\n addTimeline(timeline: ITimeline) {\n this.timelines.push(timeline);\n }\n remTimeline(timeline: ITimeline) {\n this.timelines = this.timelines.filter(t => t !== timeline);\n }\n getTimelines(): ITimeline[] {\n return this.timelines;\n }\n\n protected initHandler(): ITickHandler | null {\n if (this._mode) {\n return null;\n }\n const ticks: { mode: TickerMode; cons: ITickerHandlerStatic }[] = [\n { mode: 'raf', cons: RAFTickHandler },\n { mode: 'timeout', cons: TimeOutTickHandler }\n ];\n for (let i = 0; i < ticks.length; i++) {\n if (ticks[i].cons.Avaliable()) {\n this.mode = ticks[i].mode;\n break;\n }\n }\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n let handler: ITickHandler;\n // 创建下一个tickHandler\n switch (this._mode) {\n case 'raf':\n handler = new RAFTickHandler();\n break;\n case 'timeout':\n handler = new TimeOutTickHandler();\n break;\n // case 'manual':\n // handler = new ManualTickHandler();\n // break;\n default:\n Logger.getInstance().warn('非法的计时器模式');\n handler = new RAFTickHandler();\n break;\n }\n if (!handler.avaliable()) {\n return false;\n }\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n setInterval(interval: number) {\n this.interval = interval;\n }\n getInterval(): number {\n return this.interval;\n }\n\n setFPS(fps: number): void {\n this.setInterval(1000 / fps);\n }\n getFPS(): number {\n return 1000 / this.interval;\n }\n tick(interval: number): void {\n this.tickerHandler.tick(interval, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n tickTo(t: number): void {\n if (!this.tickerHandler.tickTo) {\n return;\n }\n this.tickerHandler.tickTo(t, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n pause(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.PAUSE;\n return true;\n }\n resume(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n\n ifCanStop(): boolean {\n if (this.autoStop) {\n if (!this.timelines.length) {\n return true;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return true;\n }\n }\n return false;\n }\n\n start(force: boolean = false): boolean {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n // 如果不需要start,那就不start\n if (!force) {\n // 暂停状态不执行\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (!this.timelines.length) {\n return false;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return false;\n }\n }\n this.status = STATUS.RUNNING;\n this.tickerHandler.tick(0, this.handleTick);\n return true;\n }\n stop(): void {\n // 重新设置tickHandler\n this.status = STATUS.INITIAL;\n this.setupTickHandler();\n this.lastFrameTime = -1;\n }\n\n protected handleTick = (handler: ITickHandler, params?: { once?: boolean }) => {\n const { once = false } = params ?? {};\n // 尝试停止\n if (this.ifCanStop()) {\n this.stop();\n return;\n }\n this._handlerTick();\n if (!once) {\n handler.tick(this.interval, this.handleTick);\n }\n };\n\n protected _handlerTick = () => {\n // 具体执行函数\n const tickerHandler = this.tickerHandler;\n const time = tickerHandler.getTime();\n // 上一帧经过的时间\n let delta = 0;\n if (this.lastFrameTime >= 0) {\n delta = time - this.lastFrameTime;\n }\n this.lastFrameTime = time;\n\n if (this.status !== STATUS.RUNNING) {\n return;\n }\n this.tickCounts++;\n\n this.timelines.forEach(t => {\n t.tick(delta);\n });\n this.emit('tick');\n };\n\n release(): void {\n this.stop();\n this.timelines = [];\n this.tickerHandler.release();\n this.emit('afterTick');\n }\n\n /**\n * 同步tick状态,需要手动触发tick执行,保证属性为走完动画的属性\n * 【注】grammar会设置属性到最终值,然后调用render,这时候需要VRender手动触发tick,保证属性为走完动画的属性,而不是Grammar设置上的属性\n */\n trySyncTickStatus() {\n if (this.status === STATUS.RUNNING) {\n this._handlerTick();\n }\n }\n}\n","import { DefaultTicker } from './Ticker/default-ticker';\nimport { defaultTimeline } from './timeline';\n\nexport const defaultTicker = new DefaultTicker();\ndefaultTicker.addTimeline(defaultTimeline);\nconst TICKER_FPS = 60;\ndefaultTicker.setFPS(TICKER_FPS);\n","import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';\nimport { Bounds, Point, isString } from '@visactor/vutils';\nimport type {\n IGraphic,\n IExportType,\n IStage,\n IStageParams,\n ILayer,\n IColor,\n IGlobal,\n IOption3D,\n ICamera,\n vec3,\n IDirectionLight,\n ITicker,\n IRenderService,\n IPickerService,\n IPluginService,\n ISyncHook,\n IDrawContext,\n IWindow,\n ILayerService,\n ITimeline,\n IOptimizeType,\n LayerMode,\n PickResult,\n IPlugin\n} from '../interface';\nimport { VWindow } from './window';\nimport type { Layer } from './layer';\nimport { EventSystem } from '../event';\nimport { container } from '../container';\nimport { RenderService } from '../render';\nimport { Group } from '../graphic/group';\nimport { Theme } from '../graphic/theme';\nimport { PickerService } from '../picker/constants';\nimport { PluginService } from '../plugins/constants';\nimport { AutoRenderPlugin } from '../plugins/builtin-plugin/auto-render-plugin';\nimport { AutoRefreshPlugin } from '../plugins/builtin-plugin/auto-refresh-plugin';\nimport { IncrementalAutoRenderPlugin } from '../plugins/builtin-plugin/incremental-auto-render-plugin';\nimport { DirtyBoundsPlugin } from '../plugins/builtin-plugin/dirty-bounds-plugin';\nimport { defaultTicker } from '../animate/default-ticker';\nimport { SyncHook } from '../tapable';\nimport { LayerService } from './constants';\nimport { DefaultTimeline } from '../animate';\nimport { application } from '../application';\nimport { isBrowserEnv } from '../env-check';\nimport { Factory } from '../factory';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n X: 0,\n Y: 0,\n BACKGROUND: 'white'\n};\n\ntype IStageState = 'rendering' | 'normal';\n\n/**\n * Stage是一个舞台或一个视口,并不直接对应一个或多个Canvas,逻辑上和Canvas无关\n *\n * 1. Stage对应一个Canvas的整体,Stage的宽高即为Canvas的宽高\n * 2. Stage小于Canvas,Stage作为Canvas某个区域的视口,只管理这个区域\n * 3. 多图层时Stage的多个图层对应多个Canvas\n *\n * 原生环境下Stage可以拥有一个Window或者使用Window的一块区域\n *\n * 【注】如果希望获取完整的Canvas或窗口或者调整窗口信息,请使用Window模块\n */\nexport class Stage extends Group implements IStage {\n declare parent: IStage | null;\n\n declare state: IStageState;\n\n private _background: string | IColor;\n protected nextFrameRenderLayerSet: Set;\n protected willNextFrameRender: boolean;\n protected _cursor: string;\n renderCount: number;\n dirtyBounds: IBounds | null;\n option3d?: IOption3D;\n declare light?: IDirectionLight;\n declare camera?: ICamera;\n declare renderStyle?: string;\n\n declare hooks: {\n beforeRender: ISyncHook<[IStage]>;\n afterRender: ISyncHook<[IStage]>;\n };\n\n set viewBox(b: IBoundsLike) {\n this.window.setViewBox(b);\n }\n get viewBox(): IAABBBounds {\n return this.window.getViewBox();\n }\n\n /**\n * @deprecated 不建议使用\n */\n get x(): number {\n return this.window.getViewBox().x1;\n }\n /**\n * @deprecated 不建议使用\n */\n set x(x: number) {\n const b = this.window.getViewBox();\n b.translate(x - b.x1, 0);\n this.window.setViewBox(b);\n }\n /**\n * @deprecated 不建议使用\n */\n get y(): number {\n return this.window.getViewBox().y1;\n }\n /**\n * @deprecated 不建议使用\n */\n set y(y: number) {\n const b = this.window.getViewBox();\n b.translate(0, y - b.y1);\n this.window.setViewBox(b);\n }\n get width(): number {\n return this.window.width;\n }\n set width(w: number) {\n this.resize(w, this.height);\n }\n get viewWidth(): number {\n return this.window.getViewBox().width();\n }\n set viewWidth(w: number) {\n this.resizeView(w, this.viewHeight);\n }\n get viewHeight(): number {\n return this.window.getViewBox().height();\n }\n set viewHeight(h: number) {\n this.resizeView(this.viewWidth, h);\n }\n get height(): number {\n return this.window.height;\n }\n set height(h: number) {\n this.resize(this.width, h);\n }\n get dpr(): number {\n return this.window.dpr;\n }\n set dpr(r: number) {\n this.setDpr(r);\n }\n get background(): string | IColor {\n return this._background ?? DefaultConfig.BACKGROUND;\n }\n set background(b: string | IColor) {\n this._background = b;\n }\n get defaultLayer(): ILayer {\n return this.at(0) as unknown as ILayer;\n }\n\n ticker: ITicker;\n\n autoRender: boolean;\n autoRefresh: boolean;\n _enableLayout: boolean;\n htmlAttribute: boolean | string | any;\n reactAttribute: boolean | string | any;\n increaseAutoRender: boolean;\n view3dTranform: boolean;\n readonly window: IWindow;\n private readonly global: IGlobal;\n readonly renderService: IRenderService;\n protected pickerService?: IPickerService;\n readonly pluginService: IPluginService;\n readonly layerService: ILayerService;\n private _eventSystem?: EventSystem;\n private get eventSystem(): EventSystem {\n return this._eventSystem;\n }\n\n protected _beforeRender?: (stage: IStage) => void;\n protected _afterRender?: (stage: IStage) => void;\n // 0: 正常渲染, > 0: 跳过隐藏canvas的渲染, < 0: 禁止渲染\n protected _skipRender?: number;\n protected _afterNextRenderCbs?: ((stage: IStage) => void)[];\n protected lastRenderparams?: Partial;\n\n protected interactiveLayer?: ILayer;\n protected supportInteractiveLayer: boolean;\n protected timeline: ITimeline;\n\n declare params: Partial;\n\n // 是否在render之前执行了tick,如果没有执行,尝试执行tick用来应用动画属性,避免动画过程中随意赋值然后又调用同步render导致属性的突变\n // 第一次render不需要强行走动画\n protected tickedBeforeRender: boolean = true;\n\n /**\n * 所有属性都具有默认值。\n * Canvas为字符串或者Canvas元素,那么默认图层就会绑定到这个Canvas上\n * 如果不传入Canvas,那么会新建一个Canvas,用户可以通过Window模块管理这个Canvas\n * 1. 如果没有传入宽高,那么默认为canvas宽高,如果传入了宽高则stage使用传入宽高作为视口宽高\n * @param params\n */\n constructor(params: Partial = {}) {\n super({});\n this.params = params;\n this.theme = new Theme();\n this.hooks = {\n beforeRender: new SyncHook(['stage']),\n afterRender: new SyncHook(['stage'])\n };\n this.global = application.global;\n if (!this.global.env && isBrowserEnv()) {\n // 如果是浏览器环境,默认设置env\n this.global.setEnv('browser');\n }\n this.window = container.get(VWindow);\n this.renderService = container.get(RenderService);\n this.pluginService = container.get(PluginService);\n this.layerService = container.get(LayerService);\n this.pluginService.active(this, params);\n\n this.window.create({\n width: params.width,\n height: params.height,\n viewBox: params.viewBox,\n container: params.container,\n dpr: params.dpr || this.global.devicePixelRatio,\n canvasControled: params.canvasControled !== false,\n title: params.title || '',\n canvas: params.canvas\n });\n\n this.state = 'normal';\n this.renderCount = 0;\n this.tryInitEventSystem();\n // // 没有传入xy就默认为0\n // this._x = params.x ?? DefaultConfig.X;\n // this._y = params.y ?? DefaultConfig.Y;\n // // 没有传入view的宽高则默认为window的宽高\n // this._viewWidth = params.viewWidth ?? this.window.width;\n // this._viewHeight = params.viewHeight ?? this.window.height;\n // this._AABBBounds.set(this._x, this._y, this._viewWidth + this._x, this._viewHeight + this._y);\n // 背景色默认为纯白色\n this._background = params.background ?? DefaultConfig.BACKGROUND;\n\n // 创建一个默认layer图层\n // this.appendChild(new Layer(this, this.global, this.window, { main: true }));\n this.appendChild(this.layerService.createLayer(this, { main: true }));\n\n this.nextFrameRenderLayerSet = new Set();\n this.willNextFrameRender = false;\n this.stage = this;\n this.renderStyle = params.renderStyle;\n\n // this.autoRender = params.autoRender;\n if (params.autoRender) {\n this.enableAutoRender();\n }\n if (params.autoRefresh) {\n this.enableAutoRefresh();\n }\n // 默认不开启dirtyBounds\n if (params.disableDirtyBounds === false) {\n this.enableDirtyBounds();\n }\n\n if (params.enableHtmlAttribute) {\n this.enableHtmlAttribute(params.enableHtmlAttribute);\n }\n if (params.ReactDOM) {\n this.enableReactAttribute(params.ReactDOM);\n }\n\n params.enableLayout && this.enableLayout();\n this.hooks.beforeRender.tap('constructor', this.beforeRender);\n this.hooks.afterRender.tap('constructor', this.afterRender);\n this._beforeRender = params.beforeRender;\n this._afterRender = params.afterRender;\n this.ticker = params.ticker || defaultTicker;\n this.supportInteractiveLayer = params.interactiveLayer !== false;\n this.timeline = new DefaultTimeline();\n this.ticker.addTimeline(this.timeline);\n this.timeline.pause();\n if (!params.optimize) {\n params.optimize = {};\n }\n this.optmize(params.optimize);\n // 如果背景是图片,触发加载图片操作\n if (params.background && isString(this._background) && this._background.includes('/')) {\n this.setAttributes({ background: this._background });\n }\n this.ticker.on('afterTick', this.afterTickCb);\n }\n\n pauseRender(sr: number = -1) {\n this._skipRender = sr;\n }\n\n resumeRender() {\n this._skipRender = 0;\n }\n\n protected tryInitEventSystem() {\n if (this.global.supportEvent && !this._eventSystem) {\n this._eventSystem = new EventSystem({\n targetElement: this.window,\n resolution: this.window.dpr || this.global.devicePixelRatio,\n rootNode: this as any,\n global: this.global,\n supportsPointerEvents: this.params.supportsPointerEvents,\n supportsTouchEvents: this.params.supportsTouchEvents,\n ...this.params.event\n });\n }\n }\n\n preventRender(prevent: boolean) {\n if (prevent) {\n this._skipRender = -Infinity;\n } else {\n // 判断是否需要outRange优化\n if (this.params.optimize.skipRenderWithOutRange !== false) {\n this._skipRender = this.window.isVisible() ? 0 : 1;\n } else {\n this._skipRender = 0;\n }\n }\n }\n\n // 优化策略\n optmize(params: IOptimizeType) {\n this.optmizeRender(params.skipRenderWithOutRange);\n this.params.optimize = params;\n }\n\n // 优化渲染\n protected optmizeRender(skipRenderWithOutRange: boolean = false) {\n if (!skipRenderWithOutRange) {\n return;\n }\n // 不在视口内的时候,跳过渲染\n this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1;\n this.window.onVisibleChange(this._onVisibleChange);\n }\n\n protected _onVisibleChange = (visible: boolean) => {\n if (this._skipRender < 0) {\n return;\n }\n if (visible) {\n if (this.dirtyBounds) {\n const b = this.window.getViewBox();\n this.dirtyBounds.setValue(b.x1, b.y1, b.width(), b.height());\n }\n if (this._skipRender > 1) {\n this.renderNextFrame();\n }\n this._skipRender = 0;\n } else {\n this._skipRender = 1;\n }\n };\n\n getTimeline() {\n return this.timeline;\n }\n\n get3dOptions(options: IOption3D) {\n const {\n center = { x: this.width / 2, y: this.height / 2, z: 0, dx: 0, dy: 0, dz: 0 },\n light = {},\n alpha = 0,\n beta = 0,\n camera,\n fieldRatio = 1,\n fieldDepth\n } = options;\n\n return {\n ...options,\n center,\n light,\n alpha,\n beta,\n camera,\n fieldRatio,\n fieldDepth\n };\n }\n\n set3dOptions(options: IOption3D) {\n this.option3d = options;\n const options3d = this.get3dOptions(options);\n const { light, center, camera, alpha, beta, fieldRatio, fieldDepth } = options3d;\n const { dir = [1, 1, -1], color = 'white', ambient } = light;\n\n const centerX = (center.x ?? this.width / 2) + (center.dx ?? 0);\n const centerY = (center.y ?? this.height / 2) + (center.dy ?? 0);\n const centerZ = (center.z ?? 0) + (center.dz ?? 0);\n const centerVec3: vec3 = [centerX, centerY, centerZ];\n const z = 1;\n let cameraX = 0;\n let cameraY = 0;\n let cameraZ = 0;\n if (!camera) {\n cameraX = Math.sin(alpha) + centerX;\n cameraY = Math.sin(beta) + centerY;\n cameraZ = Math.cos(alpha) * Math.cos(beta) * z;\n }\n\n const DirectionalLight = Factory.getPlugin('DirectionalLight');\n\n if (DirectionalLight) {\n this.light = new DirectionalLight(dir, color, ambient);\n }\n const cameraParams = {\n left: 0,\n right: this.width,\n top: 0,\n bottom: this.height,\n fieldRatio: fieldRatio,\n fieldDepth,\n viewParams: {\n pos: [cameraX, cameraY, cameraZ] as vec3,\n center: centerVec3,\n up: [0, 1, 0] as vec3\n }\n };\n if (this.camera) {\n this.camera.params = cameraParams;\n } else {\n const OrthoCamera = Factory.getPlugin('OrthoCamera');\n if (OrthoCamera) {\n this.camera = new OrthoCamera(cameraParams);\n }\n }\n\n if (options.enableView3dTransform) {\n this.enableView3dTransform();\n }\n }\n\n protected beforeRender = (stage: IStage) => {\n this._beforeRender && this._beforeRender(stage);\n };\n\n protected afterRender = (stage: IStage) => {\n this.renderCount++;\n this._afterRender && this._afterRender(stage);\n this._afterNextRenderCbs && this._afterNextRenderCbs.forEach(cb => cb(stage));\n this._afterNextRenderCbs = null;\n this.tickedBeforeRender = false;\n };\n\n protected afterTickCb = () => {\n this.tickedBeforeRender = true;\n // 性能模式不用立刻渲染\n if (this.params.optimize?.tickRenderMode === 'performance') {\n // do nothing\n } else {\n // 不是rendering的时候,render\n this.state !== 'rendering' && this.render();\n }\n };\n\n setBeforeRender(cb: (stage: IStage) => void) {\n this._beforeRender = cb;\n }\n\n setAfterRender(cb: (stage: IStage) => void) {\n this._afterRender = cb;\n }\n\n afterNextRender(cb: (stage: IStage) => void) {\n if (!this._afterNextRenderCbs) {\n this._afterNextRenderCbs = [];\n }\n this._afterNextRenderCbs.push(cb);\n }\n\n enableView3dTransform() {\n if (this.view3dTranform) {\n return;\n }\n this.view3dTranform = true;\n const ViewTransform3dPlugin = Factory.getPlugin('ViewTransform3dPlugin');\n\n if (ViewTransform3dPlugin) {\n this.pluginService.register(new ViewTransform3dPlugin());\n }\n }\n\n disableView3dTranform() {\n if (!this.view3dTranform) {\n return;\n }\n this.view3dTranform = false;\n this.pluginService.findPluginsByName('ViewTransform3dPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n enableAutoRender() {\n if (this.autoRender) {\n return;\n }\n this.autoRender = true;\n this.pluginService.register(new AutoRenderPlugin());\n }\n disableAutoRender() {\n if (!this.autoRender) {\n return;\n }\n this.autoRender = false;\n this.pluginService.findPluginsByName('AutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableAutoRefresh() {\n if (this.autoRefresh) {\n return;\n }\n this.autoRefresh = true;\n this.pluginService.register(new AutoRefreshPlugin());\n }\n disableAutoRefresh() {\n if (!this.autoRefresh) {\n return;\n }\n this.autoRefresh = false;\n this.pluginService.findPluginsByName('AutoRefreshPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableIncrementalAutoRender() {\n if (this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = true;\n this.pluginService.register(new IncrementalAutoRenderPlugin());\n }\n disableIncrementalAutoRender() {\n if (!this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = false;\n this.pluginService.findPluginsByName('IncrementalAutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableDirtyBounds() {\n if (this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = new Bounds();\n let plugin = this.pluginService.findPluginsByName('DirtyBoundsPlugin')[0];\n if (!plugin) {\n plugin = new DirtyBoundsPlugin();\n this.pluginService.register(plugin);\n } else {\n plugin.activate(this.pluginService);\n }\n }\n disableDirtyBounds() {\n if (!this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = null;\n this.pluginService.findPluginsByName('DirtyBoundsPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableLayout() {\n if (this._enableLayout) {\n return;\n }\n this._enableLayout = true;\n\n const FlexLayoutPlugin = Factory.getPlugin('FlexLayoutPlugin');\n\n if (FlexLayoutPlugin) {\n this.pluginService.register(new FlexLayoutPlugin());\n }\n }\n disableLayout() {\n if (!this._enableLayout) {\n return;\n }\n this._enableLayout = false;\n this.pluginService.findPluginsByName('FlexLayoutPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableHtmlAttribute(container?: any) {\n if (this.htmlAttribute) {\n return;\n }\n const HtmlAttributePlugin = Factory.getPlugin('HtmlAttributePlugin');\n\n if (HtmlAttributePlugin) {\n this.htmlAttribute = container;\n this.pluginService.register(new HtmlAttributePlugin());\n }\n }\n disableHtmlAttribute() {\n if (!this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = false;\n this.pluginService.findPluginsByName('HtmlAttributePlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableReactAttribute(container?: any) {\n if (this.reactAttribute) {\n return;\n }\n const ReactAttributePlugin = Factory.getPlugin('ReactAttributePlugin');\n\n if (ReactAttributePlugin) {\n this.reactAttribute = container;\n this.pluginService.register(new ReactAttributePlugin());\n }\n }\n disableReactAttribute() {\n if (!this.reactAttribute) {\n return;\n }\n this.reactAttribute = false;\n this.pluginService.findPluginsByName('ReactAttributePlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n getPluginsByName(name: string): IPlugin[] {\n return this.pluginService.findPluginsByName(name);\n }\n\n // /**\n // * stage的appendChild,add\n // * @param node\n // * @returns\n // */\n // appendChild(node: T): T | null {\n // const layer = this.at(0);\n // if (!layer) {\n // return null;\n // }\n // return layer.appendChild(node);\n // }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n const viewBox = this.window.getViewBox();\n this._AABBBounds.setValue(viewBox.x1, viewBox.y1, viewBox.x2, viewBox.y2);\n return this._AABBBounds;\n }\n\n combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer {\n throw new Error('暂不支持');\n }\n // 如果传入CanvasId,如果存在相同Id,说明这两个图层使用相同的Canvas绘制\n // 但需要注意的是依然是两个图层(用于解决Table嵌入ChartSpace不影响Table的绘制)\n createLayer(canvasId?: string, layerMode?: LayerMode): ILayer {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 创建一个默认layer图层\n const layer = this.layerService.createLayer(this, {\n main: false,\n layerMode,\n canvasId\n });\n this.appendChild(layer);\n return layer;\n // const layer = new Layer(this, this.global, this.window, {\n // main: false,\n // canvasId\n // });\n // this.appendChild(layer);\n // return layer;\n }\n sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void {\n const children = this.children;\n children.sort(cb);\n this.removeAllChild();\n children.forEach(c => {\n this.appendChild(c);\n });\n }\n removeLayer(ILayerId: number): ILayer | false {\n return this.removeChild(this.findChildByUid(ILayerId) as IGraphic) as ILayer;\n }\n tryInitInteractiveLayer() {\n if (this.releaseStatus === 'released') {\n return;\n }\n // TODO:顺序可能会存在问题\n // 支持交互层,且没有创建过,那就创建\n if (this.supportInteractiveLayer && !this.interactiveLayer) {\n this.interactiveLayer = this.createLayer();\n this.interactiveLayer.name = '_builtin_interactive';\n this.interactiveLayer.attribute.pickable = false;\n this.nextFrameRenderLayerSet.add(this.interactiveLayer as any); // to be fixed\n }\n // this.interactiveLayer.afterDraw(l => {\n // l.removeAllChild();\n // });\n }\n\n clearViewBox(color?: string) {\n this.window.clearViewBox(color);\n }\n\n render(layers?: ILayer[], params?: Partial): void {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.ticker.start();\n this.timeline.resume();\n const state = this.state;\n this.state = 'rendering';\n // 判断是否需要手动执行tick\n if (!this.tickedBeforeRender) {\n this.ticker.trySyncTickStatus();\n }\n this.layerService.prepareStageLayer(this);\n if (!this._skipRender) {\n this.lastRenderparams = params;\n this.hooks.beforeRender.call(this);\n if (!this._skipRender) {\n this.renderLayerList(this.children as ILayer[]);\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n }\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected combineLayersToWindow() {\n // TODO 后续支持通用的渲染模型\n if (this.global.env === 'harmony') {\n const ctx = this.window.getContext().nativeContext;\n this.forEachChildren((layer, i) => {\n if (i > 0) {\n const image = layer\n .getNativeHandler()\n .getContext()\n .canvas.nativeCanvas.nativeCanvas._c.transferToImageBitmap();\n ctx.transferFromImageBitmap(image);\n }\n });\n }\n return;\n // this.forEach((layer, i) => {\n // layer.combineTo(this.window, {\n // clear: i === 0,\n // x: this.x,\n // y: this.y,\n // width: this.viewWidth,\n // height: this.viewHeight,\n // renderService: this.renderService,\n // background: layer === this.defaultLayer ? this.background : undefined,\n // updateBounds: !!this.dirtyBounds\n // });\n // });\n }\n\n renderNextFrame(layers?: ILayer[], force?: boolean): void {\n // render状态中调用的不会触发nextFrame,避免loop\n // if (this.state === 'rendering' && !force) {\n // console.log('abc');\n // return;\n // }\n // 性能优化,避免重复add\n if (this.nextFrameRenderLayerSet.size !== this.childrenCount) {\n (layers || this).forEach((layer: any) => {\n this.nextFrameRenderLayerSet.add(layer);\n });\n }\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n this.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame(), (this.willNextFrameRender = false);\n });\n }\n }\n\n _doRenderInThisFrame() {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.timeline.resume();\n this.ticker.start();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (this.nextFrameRenderLayerSet.size && !this._skipRender) {\n this.hooks.beforeRender.call(this);\n if (!this._skipRender) {\n this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {});\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n }\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected renderLayerList(layerList: ILayer[], params?: Partial) {\n const list: ILayer[] = [];\n // 只需要render main layer即可\n for (let i = 0; i < layerList.length; i++) {\n let l = layerList[i];\n if (l.layerMode === 'virtual') {\n l = l.getNativeHandler().mainHandler.layer;\n }\n if (!list.includes(l)) {\n list.push(l);\n }\n }\n list.forEach(layer => {\n // 记录当前的stamp,避免重复绘制layer(如果存在virtual layer)\n if (layer.renderCount > this.renderCount) {\n return;\n }\n layer.renderCount = this.renderCount + 1;\n\n if (layer === this.interactiveLayer) {\n // 交互层由于其特殊性,不使用dirtyBounds\n this.dirtyBounds && this.dirtyBounds.clear();\n }\n layer.render(\n {\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty()),\n viewBox: this.window.getViewBox(),\n transMatrix: this.window.getViewBoxTransform()\n },\n { renderStyle: this.renderStyle, ...params }\n );\n });\n\n // 添加交互层渲染\n if (this.interactiveLayer && !layerList.includes(this.interactiveLayer)) {\n // 交互层由于其特殊性,不使用dirtyBounds\n this.dirtyBounds && this.dirtyBounds.clear();\n this.interactiveLayer.render(\n {\n renderService: this.renderService,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty()),\n viewBox: this.window.getViewBox(),\n transMatrix: this.window.getViewBoxTransform()\n },\n { renderStyle: this.renderStyle, ...params }\n );\n }\n }\n\n resizeWindow(w: number, h: number, rerender: boolean = true) {\n this.window.resize(w, h);\n rerender && this.render();\n }\n\n /**\n * 语法糖,如果viewBox和window宽高一样的话,那么会同时缩放window和viewBox\n * @param w\n * @param h\n * @param rerender\n */\n resize(w: number, h: number, rerender: boolean = true): void {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 如果不是子图的stage,那么认为用户也想要resize view\n if (!this.window.hasSubView()) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n }\n this.window.resize(w, h);\n this.forEachChildren(c => {\n c.resize(w, h);\n });\n // 设置camera\n // this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n this.camera && this.option3d && this.set3dOptions(this.option3d);\n rerender && this.render();\n }\n resizeView(w: number, h: number, rerender: boolean = true) {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n this.forEachChildren(c => {\n c.resizeView(w, h);\n });\n // 设置camera\n this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n rerender && this.render();\n }\n setViewBox(viewBox: IBoundsLike, rerender: boolean): void;\n setViewBox(x: number, y: number, w: number, h: number, rerender: boolean): void;\n setViewBox(x: number | IBoundsLike, y: number | boolean, w?: number, h?: number, rerender?: boolean): void {\n let isRerender: boolean = true;\n\n if (typeof x === 'object') {\n this.viewBox.setValue(x.x1, x.y1, x.x2, x.y2);\n if (y === false) {\n isRerender = false;\n }\n } else {\n this.viewBox.setValue(x, y as number, x + w, (y as number) + h);\n\n if (rerender === false) {\n isRerender = false;\n }\n }\n\n this.forEachChildren(c => {\n c.resizeView(this.viewBox.width(), this.viewBox.height());\n });\n isRerender && this.render();\n }\n setDpr(dpr: number, rerender: boolean = true): void {\n // this.window.setDpr(dpr);\n this.forEachChildren(c => {\n c.setDpr(dpr);\n });\n\n rerender && this.render();\n }\n setOrigin(x: number, y: number): void {\n throw new Error('暂不支持');\n }\n export(type: IExportType): HTMLCanvasElement | ImageData {\n throw new Error('暂不支持');\n }\n pick(x: number, y: number): PickResult | false {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 暂时不提供layer的pick\n const result = this.getPickerService().pick(this.children as unknown as IGraphic[], new Point(x, y), {\n bounds: this.AABBBounds\n });\n if (result?.graphic || result?.group) {\n return result;\n }\n return false;\n }\n\n // 动画相关\n startAnimate(t: number): void {\n throw new Error('暂不支持');\n }\n setToFrame(t: number): void {\n throw new Error('暂不支持');\n }\n\n release() {\n super.release();\n\n this.hooks.beforeRender.unTap('constructor', this.beforeRender);\n this.hooks.afterRender.unTap('constructor', this.afterRender);\n\n this.eventSystem && this.eventSystem.release();\n this.layerService.releaseStage(this);\n this.pluginService.release();\n this.forEach(layer => {\n layer.release();\n });\n // 额外删除掉interactiveLayer的节点\n if (this.interactiveLayer) {\n this.interactiveLayer.forEachChildren((item: IGraphic) => {\n item.setStage && item.setStage(null, null);\n this.interactiveLayer.removeChild(item);\n });\n this.interactiveLayer.release();\n }\n this.window.release();\n this.ticker.remTimeline(this.timeline);\n this.ticker.removeListener('afterTick', this.afterTickCb);\n this.renderService.renderTreeRoots = [];\n }\n\n setStage(stage?: IStage) {\n return;\n // this.stage = this;\n // this.forEachChildren(item => {\n // (item as Layer).setStage(this);\n // });\n }\n\n /**\n * 添加dirty区域,会修改参数b\n * @param b\n * @param matrix\n */\n dirty(b: IBounds, matrix?: IMatrix) {\n if (this.releaseStatus === 'released') {\n return;\n }\n if (matrix) {\n b.transformWithMatrix(matrix);\n }\n if (this.dirtyBounds.empty()) {\n this.dirtyBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n this.dirtyBounds.union(b);\n }\n\n getLayer(name: string): undefined | ILayer {\n const layer = this.children.filter(layer => layer.name === name);\n return layer[0] as ILayer;\n }\n\n renderTo(window: IWindow) {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.forEachChildren((layer, i) => {\n layer.drawTo(window, {\n // ...params,\n renderService: this.renderService,\n viewBox: window.getViewBox(),\n transMatrix: window.getViewBoxTransform(),\n background: layer === this.defaultLayer ? this.background : undefined,\n clear: i === 0, // 第一个layer需要clear\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n });\n });\n }\n\n /**\n * 渲染到新的window上去\n * @param fullImage 是否是全量的image,因为可能之前的window有一部分场景树超过window的帧缓冲了\n * @returns\n */\n renderToNewWindow(fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n if (this.releaseStatus === 'released') {\n return;\n }\n const window = container.get(VWindow);\n const x1 = viewBox ? -viewBox.x1 : 0;\n const y1 = viewBox ? -viewBox.y1 : 0;\n const x2 = viewBox ? viewBox.x2 : this.viewWidth;\n const y2 = viewBox ? viewBox.y2 : this.viewHeight;\n const width = viewBox ? viewBox.width() : this.viewWidth;\n const height = viewBox ? viewBox.height() : this.viewHeight;\n if (fullImage) {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n this.renderTo(window);\n return window;\n }\n\n toCanvas(fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n if (this.releaseStatus === 'released') {\n return;\n }\n const window = this.renderToNewWindow(fullImage, viewBox);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n\n setCursor(mode?: string): void {\n this._cursor = mode;\n this.eventSystem.setCursor(mode, 'ignore');\n }\n\n getCursor() {\n return this._cursor;\n }\n\n eventPointTransform(e: PointerEvent | WheelEvent | TouchEvent): { x: number; y: number } {\n const point = this.global.mapToCanvasPoint(e, this.window.getContext().canvas.nativeCanvas);\n\n return this.stage.window.pointTransform(point.x, point.y);\n }\n\n pauseTriggerEvent() {\n this._eventSystem && this._eventSystem.pauseTriggerEvent();\n }\n resumeTriggerEvent() {\n this._eventSystem && this._eventSystem.resumeTriggerEvent();\n }\n\n getPickerService() {\n if (!this.pickerService) {\n this.pickerService = container.get(PickerService);\n }\n return this.pickerService;\n }\n}\n","import { Stage } from './core/stage';\nimport type { IStageParams } from './interface/stage';\n\nexport function createStage(params: Partial) {\n return new Stage(params);\n // return container.get<(params: Partial) => IStage>(StageFactory)(params);\n}\n","import type { ITickHandler } from '../../interface/animate';\n\nexport class ManualTickHandler implements ITickHandler {\n protected timerId: number;\n protected time: number = 0;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return ManualTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, interval + this.time);\n cb(this, { once: true });\n }\n\n tickTo(t: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, t);\n cb(this, { once: true });\n }\n\n release() {\n if (this.timerId > 0) {\n // clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n\n getTime() {\n return this.time;\n }\n}\n","import type { ITicker, ITickHandler, ITimeline } from '../../interface/animate';\nimport { DefaultTicker } from './default-ticker';\nimport { ManualTickHandler } from './manual-ticker-handler';\nimport type { STATUS, TickerMode } from './type';\n\nexport class ManualTicker extends DefaultTicker implements ITicker {\n protected declare interval: number;\n protected declare tickerHandler: ITickHandler;\n protected declare _mode: TickerMode;\n protected declare status: STATUS;\n protected declare lastFrameTime: number;\n protected declare tickCounts: number;\n protected declare timelines: ITimeline[];\n declare autoStop: boolean;\n\n set mode(m: TickerMode) {\n m = 'manual';\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n protected initHandler(): ITickHandler | null {\n this.mode = 'manual';\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new ManualTickHandler();\n this._mode = 'manual';\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n tickAt(time: number) {\n this.tickerHandler.tick(time - Math.max(this.lastFrameTime, 0), (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n\n ifCanStop(): boolean {\n return false;\n }\n}\n","import type { IRect } from '@visactor/vrender-core';\nimport type { IWidgetData } from '../interface/dsl/dsl';\nimport type { ICharacter, ILayoutLine } from '../interface/character';\nimport type { IAABBBounds } from '@visactor/vutils';\n\nexport interface ILayoutAttribute {\n x: number;\n y: number;\n width: number;\n height: number;\n angle: number;\n anchor?: [number | string, number | string];\n dx?: number;\n dy?: number;\n // shapePoints?: IPointLike[];\n}\n\nexport function getLayoutFromWidget(w: Partial | IRect, character: ICharacter): Partial {\n const x = 'x' in w ? w.x : w.left;\n const y = 'y' in w ? w.y : w.top;\n let width = (w as any).width;\n let height = (w as any).height;\n const stage = character.canvas.getStage();\n if (!isFinite(width) && isFinite((w as any).right)) {\n width = stage.width - x - (w as any).right;\n }\n if (!isFinite(height) && isFinite((w as any).bottom)) {\n height = stage.height - y - (w as any).bottom;\n }\n // const width = 'width' in w ? w.width : (w as any).right - w.left;\n // const height = 'height' in w ? w.height : (w as any).bottom - w.top;\n\n return {\n x,\n y,\n width: isFinite(width) ? width : void 0,\n height: isFinite(height) ? height : void 0,\n angle: (w as any).angle ?? 0,\n anchor: [x + width / 2, y + height / 2].map(item => (isFinite(item) ? item : 0)) as [number, number]\n };\n}\n\nexport function getLayoutLine(b: IAABBBounds, opt: any, orient: 'x' | 'y' | 'xy' = 'xy') {\n const result: ILayoutLine[] = [];\n if (orient === 'y' || orient === 'xy') {\n const commonInY: Omit = {\n orient: 'y',\n start: b.x1,\n end: b.x1 + b.width(),\n bounds: b.clone(),\n ...opt\n };\n // top\n result.push({\n value: b.y1,\n type: 'start',\n ...commonInY\n });\n // bottom\n result.push({\n value: b.y2,\n type: 'end',\n ...commonInY\n });\n // middle\n result.push({\n value: (b.y1 + b.y2) * 0.5,\n type: 'middle',\n ...commonInY\n });\n }\n\n if (orient === 'x' || orient === 'xy') {\n const commonInX: Omit = {\n orient: 'x',\n start: b.y1,\n end: b.y2,\n bounds: b.clone(),\n ...opt\n };\n // left\n result.push({\n value: b.x1,\n type: 'start',\n ...commonInX\n });\n // right\n result.push({\n value: b.x2,\n type: 'end',\n ...commonInX\n });\n // middle\n result.push({\n value: (b.x1 + b.x2) * 0.5,\n type: 'middle',\n ...commonInX\n });\n }\n return result;\n}\n","import type { ICanvasLike, IGraphic, IStage } from '@visactor/vrender-core';\nimport { createStage, ManualTicker, vglobal } from '@visactor/vrender-core';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IStory } from '../interface/story';\nimport type { IStoryEvent } from '../interface/event';\nimport type { ICharacter, ILayoutLine } from '../interface/character';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { isValidNumber } from '@visactor/vutils';\nimport { getLayoutLine } from '../utils/layout';\n\nexport class StoryCanvas implements IStoryCanvas {\n protected _story: IStory;\n protected _stage: IStage;\n protected _canvas: ICanvasLike;\n\n getNativeCanvas() {\n return this._canvas;\n }\n\n getStage() {\n return this._stage;\n }\n\n protected _container: HTMLDivElement | null;\n get container() {\n return this._container;\n }\n\n constructor(\n story: IStory,\n params: {\n container?: HTMLDivElement;\n canvas?: HTMLCanvasElement;\n width?: number;\n height?: number;\n dpr?: number;\n background: string;\n layerBackground: string;\n layerViewBox?: IAABBBoundsLike;\n scaleX?: number | 'auto';\n scaleY?: number | 'auto';\n }\n ) {\n this._story = story;\n this._container = params.container;\n this._canvas = params.canvas as any;\n\n const {\n canvas,\n width: _w,\n height: _h,\n background = 'transparent',\n layerBackground = 'transparent',\n dpr = vglobal.devicePixelRatio,\n layerViewBox,\n scaleX: _sx = 1,\n scaleY: _sy = 1\n } = params;\n const { scaleX, scaleY, width, height } = this.getScale(_w, _h, _sx, _sy);\n\n this._container && this._initCanvasByContainer(width, height, dpr, background);\n params.canvas && this._initCanvasByCanvas(canvas, width ?? 500, height ?? 500, dpr, background);\n\n // this._stage.background = background;\n this._stage.defaultLayer.setAttributes({ background: layerBackground });\n if (layerViewBox) {\n this._stage.defaultLayer.setAttributes({\n x: layerViewBox.x1,\n y: layerViewBox.y1,\n width: layerViewBox.x2 - layerViewBox.x1,\n height: layerViewBox.y2 - layerViewBox.y1,\n clip: true\n });\n }\n this._stage.defaultLayer.scale(scaleX, scaleY);\n }\n\n protected _initCanvasByContainer(width: number, height: number, dpr: number, background: string) {\n const container = this._container;\n if (!container) {\n return;\n }\n const canvas = document.createElement('canvas');\n // canvas.style.position = 'absolute';\n canvas.id = `_visactor_story_canvas_${this._story.id}`;\n this._canvas = canvas as any;\n container.appendChild(canvas);\n const stage = this._initCanvas(\n canvas,\n width ?? container.clientWidth,\n height ?? container.clientHeight,\n dpr,\n background\n );\n // @ts-ignore\n this._stage = stage;\n }\n\n protected _initCanvasByCanvas(\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n background: string\n ) {\n const stage = this._initCanvas(canvas, width, height, dpr, background);\n this._canvas = canvas as any;\n // @ts-ignore\n this._stage = stage;\n }\n\n protected _initCanvas(canvas: HTMLCanvasElement, width: number, height: number, dpr: number, background: string) {\n const stage = createStage({\n canvas: canvas,\n width,\n height,\n dpr,\n canvasControled: true,\n background,\n // 得开启自动渲染,否则编辑场景中无法触发视图更新\n autoRender: false,\n disableDirtyBounds: true,\n ticker: new ManualTicker([]),\n pluginList: ['RichTextEditPlugin'],\n event: {\n clickInterval: 300\n }\n });\n stage.id = `vstory_${this._story.id}`;\n return stage;\n }\n\n protected getScale(\n width: number,\n height: number,\n scaleX: number | 'auto',\n scaleY: number | 'auto'\n ): { scaleX: number; scaleY: number; width: number; height: number } {\n // 仅在传入width和height时有效\n if (scaleX === 'auto' || scaleY === 'auto') {\n if (!Number.isFinite(width) || !Number.isFinite(height)) {\n scaleX = scaleY = 1;\n } else {\n const clipWidth = this._container\n ? this._container.clientWidth\n : this._canvas?.width / vglobal.devicePixelRatio;\n const clipHeight = this._container\n ? this._container.clientHeight\n : this._canvas?.height / vglobal.devicePixelRatio;\n if (!isValidNumber(clipWidth) || !isValidNumber(clipHeight)) {\n scaleX = scaleY = 1;\n return { scaleX, scaleY, width, height };\n }\n\n const clipAspectRatio = clipWidth / clipHeight;\n const contentAspectRatio = width / height;\n const scale = clipAspectRatio > contentAspectRatio ? clipHeight / height : clipWidth / width;\n if (!isValidNumber(scale)) {\n scaleX = scaleY = 1;\n } else {\n if (scaleX === 'auto') {\n scaleX = scale;\n }\n\n if (scaleY === 'auto') {\n scaleY = scale;\n }\n }\n width *= scaleX;\n height *= scaleY;\n }\n }\n return { scaleX, scaleY, width, height };\n // this._stage.defaultLayer.scale(scaleX, scaleY);\n }\n\n resize(w: number, h: number) {\n this._stage.resize(w, h, true);\n }\n\n getEventDetail(event: IStoryEvent) {\n // 得到交互元素的详细信息\n let characterInfo;\n let character: ICharacter;\n this._story.getCharacterList().forEach(c => {\n const info = c.checkEvent(event);\n if (info) {\n characterInfo = info;\n character = c;\n return true;\n }\n return false;\n });\n return {\n character,\n characterInfo\n };\n }\n\n tickTo(t: number, render: boolean = true) {\n // 开启ticker,否则ticker那里不会执行,第一帧就掉了\n this._stage.ticker.start();\n this._stage.getTimeline().resume();\n this._stage.ticker.tickAt(t);\n render && this._stage.render();\n }\n\n getDpr(): number {\n return this._stage.dpr;\n }\n\n addGraphic(g: IGraphic): void {\n this._stage.defaultLayer.add(g);\n }\n\n removeGraphic(g: IGraphic): void {\n this._stage.defaultLayer.removeChild(g);\n }\n\n getLayoutGuideLine(): ILayoutLine[] {\n const layer = this._stage.defaultLayer;\n const bounds = layer.AABBBounds.clone();\n bounds.transformWithMatrix(layer.transMatrix.getInverse());\n\n return getLayoutLine(bounds, {\n id: this._stage.id\n });\n }\n\n release() {\n this._stage.release();\n }\n}\n","import type { ICharacterConfig, ICharacterConstructor, ICharacterInitOption } from '../interface/dsl/dsl';\n\nexport class StoryFactory {\n static characterMap: { [key: string]: ICharacterConstructor } = {};\n static registerCharacter(type: string, c: ICharacterConstructor) {\n StoryFactory.characterMap[type] = c;\n }\n static createCharacter(config: ICharacterConfig, opt: ICharacterInitOption) {\n const classC = StoryFactory.characterMap[config.type];\n if (!classC) {\n console.error('获取模板失败', config);\n return null;\n }\n const el = new classC(config, opt);\n el.init();\n return el;\n }\n}\n","import { StoryFactory } from '../utils/factory';\nimport type { ICharacter } from '../interface/character';\nimport type { ICharacterTree } from '../interface/character-tree';\nimport type { ICharacterConfig } from '../interface/dsl/dsl';\nimport type { IStory } from '../interface/story';\n\nexport class CharacterTree implements ICharacterTree {\n protected _characters: { [key: string]: ICharacter } = {};\n protected _story: IStory;\n\n constructor(story: IStory) {\n this._story = story;\n }\n\n getCharacters(): { [key: string]: ICharacter } {\n return this._characters;\n }\n\n getCharacterList(): ICharacter[] {\n return Array.from(Object.values(this._characters));\n }\n\n getCharactersByType(type: string) {\n return this.getCharacterList().filter(c => c.type === type);\n }\n\n getCharacterById(key: string) {\n return this._characters[key] || null;\n }\n\n removeCharacter(cId: string) {\n const c = this._characters[cId];\n // TODO 先直接release掉,后续如果需要复用再说\n c && c.release();\n delete this._characters[cId];\n }\n\n addCharacter(config: ICharacterConfig) {\n const option = {\n story: this._story,\n canvas: this._story.canvas,\n graphicParent: this._story.canvas.getStage().defaultLayer\n };\n if ((config).id) {\n if (!this._characters[(config).id]) {\n const c = StoryFactory.createCharacter(config, option);\n c.hide();\n this._characters[(config).id] = c;\n }\n return this._characters[(config).id];\n }\n return null;\n }\n\n initCharacters(specs: ICharacterConfig[]): void {\n // 先销毁掉当前的所有characters\n this.releaseCurrentCharacters();\n this._characters = {};\n const option = {\n story: this._story,\n canvas: this._story.canvas,\n graphicParent: this._story.canvas.getStage().defaultLayer\n };\n\n specs.forEach(spec => {\n if ((spec).id) {\n if (!this._characters[(spec).id]) {\n const c = StoryFactory.createCharacter(spec, option);\n c.hide();\n this._characters[(spec).id] = c;\n }\n // return this._characters[(spec).id];\n }\n });\n }\n\n protected releaseCurrentCharacters() {\n Object.keys(this._characters).forEach(k => {\n const c = this._characters[k];\n c.release();\n });\n }\n\n reset() {\n for (const k in this._characters) {\n const character = this._characters[k];\n character.reset();\n }\n }\n\n toDSL() {\n return Object.keys(this._characters).map(k => {\n return this._characters[k].toDSL();\n });\n }\n}\n","import type { IPlugin, IPluginService } from '../interface/plugin-service';\nimport type { IStory } from '../interface/story';\n\nexport class DefaultPluginService implements IPluginService {\n declare onStartupFinishedPlugin: IPlugin[];\n declare onRegisterPlugin: IPlugin[];\n declare story: IStory;\n declare actived: boolean;\n\n constructor() {\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin = [];\n this.actived = false;\n }\n\n active(story: IStory, params: { pluginList?: IPlugin[] }) {\n this.story = story;\n this.actived = true;\n\n // 启动插件\n const { pluginList } = params;\n pluginList &&\n pluginList.forEach(p => {\n this.register(p);\n });\n }\n\n findPluginsByName(name: string): IPlugin[] {\n const arr: IPlugin[] = [];\n this.onStartupFinishedPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n this.onRegisterPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n return arr;\n }\n\n register(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.push(plugin);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.push(plugin);\n plugin.activate(this);\n }\n }\n unRegister(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n }\n plugin.deactivate(this);\n }\n\n release(...params: any): void {\n this.onStartupFinishedPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onRegisterPlugin = [];\n }\n}\n","import { Generator, vglobal } from '@visactor/vrender-core';\nimport type { IActionParams, IStory } from '../interface/story';\nimport type { ICharacterConfig, IStoryDSL } from '../interface/dsl/dsl';\nimport { StoryCanvas } from './canvas';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { EventEmitter, isString } from '@visactor/vutils';\nimport type { ICharacter } from '../interface/character';\nimport type { IPlayer } from '../interface/player';\nimport type { ICharacterTree } from '../interface/character-tree';\nimport { CharacterTree } from './character-tree';\nimport type { IPluginService } from '../interface/plugin-service';\nimport { DefaultPluginService } from './plugin-service';\n\ntype NodeCanvas = any;\n\nexport interface IStoryInitOption {\n dom?: string | HTMLDivElement; // dom id\n canvas?: string | HTMLCanvasElement | NodeCanvas; // canvas id\n width?: number;\n height?: number;\n background?: string;\n layerBackground?: string;\n layerViewBox?: IAABBBoundsLike;\n dpr?: number;\n // 对画面的缩放\n scaleX?: number | 'auto';\n scaleY?: number | 'auto';\n theme?: string;\n}\n\nexport class Story extends EventEmitter implements IStory {\n readonly id: string;\n protected _canvas: IStoryCanvas;\n protected _dsl: IStoryDSL | null;\n protected _player: IPlayer;\n protected _characterTree: ICharacterTree;\n protected _theme: string;\n pluginService: IPluginService;\n\n get canvas(): IStoryCanvas {\n return this._canvas;\n }\n\n get player(): IPlayer {\n return this._player;\n }\n\n get theme(): string {\n return this._theme;\n }\n\n constructor(dsl: IStoryDSL | null, option: IStoryInitOption) {\n super();\n this.id = `test-mvp_${Generator.GenAutoIncrementId()}`;\n const {\n dom,\n canvas,\n width,\n height,\n theme,\n background = 'transparent',\n layerBackground = 'transparent',\n layerViewBox,\n dpr = vglobal.devicePixelRatio,\n scaleX = 1,\n scaleY = 1\n } = option;\n if (!(dom || canvas)) {\n throw new Error('dom or canvas is required');\n }\n this._canvas = new StoryCanvas(this, {\n container: isString(dom) ? (vglobal.getElementById(dom) as HTMLDivElement) : dom,\n canvas: isString(canvas) ? (vglobal.getElementById(canvas) as any) : canvas,\n width,\n height,\n background,\n dpr,\n layerBackground,\n layerViewBox,\n scaleX,\n scaleY\n });\n this._characterTree = new CharacterTree(this);\n this._dsl = dsl;\n this._theme = theme;\n this.pluginService = new DefaultPluginService();\n this.pluginService.active(this, {\n pluginList: []\n });\n }\n\n init(player: IPlayer) {\n this._player = player;\n this.load(this._dsl);\n }\n\n reset() {\n this._characterTree.reset();\n this.player.reset();\n }\n\n load(dsl: IStoryDSL) {\n this._dsl = dsl;\n if (!dsl) {\n return;\n }\n // 初始化characterTree\n this._characterTree.initCharacters(this._dsl.characters);\n // 初始化Actions\n this.player.initActions(this._dsl.acts);\n }\n toDSL(): IStoryDSL {\n return {\n acts: this._player.toDSL(),\n characters: this._characterTree.toDSL()\n };\n }\n getCharacters(): { [key: string]: ICharacter } {\n return this._characterTree.getCharacters();\n }\n getCharacterList(): ICharacter[] {\n return this._characterTree.getCharacterList();\n }\n getCharacterById(id: string): ICharacter | null {\n return this._characterTree.getCharacterById(id);\n }\n getCharactersByType(type: string): ICharacter[] {\n return this._characterTree.getCharactersByType(type);\n }\n addCharacter(config: ICharacterConfig, actionParams?: IActionParams): ICharacter {\n const c = this._characterTree.addCharacter(config);\n actionParams && this.addAction(c.id, actionParams);\n return c;\n }\n addCharacterWithAppear(config: ICharacterConfig): ICharacter {\n const c = this._characterTree.addCharacter(config);\n this.addAction(c.id, { sceneId: '', actions: [{ action: 'appear' }] });\n return c;\n }\n\n removeCharacter(cId: string): void {\n this._characterTree.removeCharacter(cId);\n this._player.removeCharacterActions(cId);\n }\n addAction(cId: string, actionParams: IActionParams): void {\n this._player.addAction(actionParams.sceneId, cId, actionParams.actions);\n }\n\n release(): void {\n this._player.release();\n this._canvas.release();\n }\n}\n","import { cloneDeep, isNumber, isString } from '@visactor/vutils';\nimport type { IActionSpec, IActSpec, ISceneSpec } from '../interface/dsl/dsl';\nimport type { IScheduler } from '../interface/scheduler';\nimport type { IActionProcessor } from '../interface/action-processor';\n\ninterface IActInfo {\n startTime: number;\n duration: number;\n id: string;\n sceneInfoList: ISceneInfo[];\n}\ninterface ISceneInfo {\n startTime: number;\n duration: number;\n id: string;\n actionList: IActionItem[];\n}\n\nexport interface IActionItem {\n startTime: number;\n duration: number;\n actionSpec: IActionSpec;\n characterId: string;\n}\n\nclass ActionItem implements IActionItem {\n startTime: number;\n duration: number;\n actionSpec: IActionSpec;\n characterId: string;\n\n constructor(st: number, d: number, as: IActionSpec, ci: string) {\n this.startTime = st;\n this.duration = d;\n this.actionSpec = as;\n this.characterId = ci;\n }\n}\n\nexport class Scheduler implements IScheduler {\n protected _actionProcessor: IActionProcessor;\n protected _actsInfo: IActInfo[];\n // 保存执行过的act\n protected _runnedAct: Set;\n // 保存应用过初始属性的Appear的act\n protected _applyedAppearAct: Set;\n protected _actSpec: IActSpec[];\n\n constructor(actionProcessor: IActionProcessor) {\n this._actionProcessor = actionProcessor;\n this._runnedAct = new Set();\n this._applyedAppearAct = new Set();\n this._actSpec = [\n {\n id: 'defaultAct',\n scenes: [\n {\n id: 'defaultScene',\n actions: []\n }\n ]\n }\n ];\n }\n\n init(acts: IActSpec[]) {\n // 重新设置所有属性\n this.clearState();\n this._actsInfo = [];\n this.clearState();\n\n this._initActs(acts);\n this._actSpec = cloneDeep(acts);\n }\n\n getUnAppliedAppearAction() {\n if (this._applyedAppearAct.size) {\n return [];\n }\n const actionList: IActionItem[] = [];\n this._actsInfo.forEach(actInfo => {\n actInfo.sceneInfoList.forEach(sceneInfo => {\n sceneInfo.actionList.forEach(action => {\n if (this._applyedAppearAct.has(action) || action.actionSpec.action !== 'appear') {\n return;\n }\n this._applyedAppearAct.add(action);\n actionList.push(action);\n });\n });\n });\n return actionList;\n }\n\n addAction(sceneId: string, characterId: string, actions: IActionSpec[]) {\n const scene = sceneId ? this.findScene(sceneId) : this.getScenes()[0];\n if (!scene) {\n return;\n }\n scene.actions.push({\n characterId,\n characterActions: actions\n });\n this.init(this._actSpec);\n }\n\n removeCharacterActions(characterId: string) {\n for (let i = 0; i < this._actSpec.length; i++) {\n for (let j = 0; j < this._actSpec[i].scenes.length; j++) {\n const scene = this._actSpec[i].scenes[j];\n scene.actions = scene.actions.filter(a => a.characterId !== characterId);\n }\n }\n this.init(this._actSpec);\n }\n\n clearState(): void {\n this._runnedAct.clear();\n this._applyedAppearAct.clear();\n }\n\n getTotalTime(): number {\n if (!this._actsInfo) {\n return 0;\n }\n return this._actsInfo.reduce((t, actInfo) => Math.max(t, actInfo.startTime + actInfo.duration), 0);\n }\n\n findActByTime(t: number) {\n if (!this._actsInfo) {\n return {\n actInfo: null,\n t: 0\n };\n }\n // 规范化t\n const totalTime = this.getTotalTime();\n if (totalTime <= 0) {\n return {\n actInfo: this._actsInfo[0],\n t: 0\n };\n }\n for (let i = 0; i < this._actsInfo.length; i++) {\n const actInfo = this._actsInfo[i];\n if (actInfo.startTime <= t && actInfo.startTime + actInfo.duration > t) {\n return {\n actInfo: actInfo,\n t: t - actInfo.startTime\n };\n }\n }\n return {\n actInfo: this._actsInfo[this._actsInfo.length - 1],\n t: t - this._actsInfo[this._actsInfo.length - 1].startTime\n };\n }\n\n /**\n * 获取某个时间区间的所有Action,toTime实际上是当前时间,fromTime是上一次的时间\n * 避免跳帧\n * @param fromTime 上一次的时间\n * @param toTime 当前时间\n */\n getActionsInRange(fromTime: number, toTime: number) {\n // 先找到目前是在哪个幕中\n const { actInfo: fromAct, t: formatFromTime } = this.findActByTime(fromTime);\n const { actInfo: toAct, t: formatToTime } = this.findActByTime(toTime);\n if (fromAct !== toAct) {\n // TODO 跳帧了\n } else if (!(fromAct && toAct)) {\n return [];\n }\n // const formatFromTime = Scheduler.formatTimeInAction(fromTime, toAct);\n // const formatToTime = Scheduler.formatTimeInAction(toTime, toAct);\n\n const actions: IActionItem[] = [];\n toAct.sceneInfoList.forEach(sceneInfo => {\n const { startTime: sceneStartTime } = sceneInfo;\n sceneInfo.actionList.forEach(actionInfo => {\n const startTime = sceneStartTime + actionInfo.startTime;\n if (startTime <= formatToTime) {\n if (!this._runnedAct.has(actionInfo)) {\n this._runnedAct.add(actionInfo);\n actions.push(actionInfo);\n }\n }\n });\n });\n // actions.length && console.log('找到', fromTime, toTime, actions);\n return actions;\n }\n\n protected _initActs(acts: IActSpec[]) {\n // act与act之间是串联的\n let startTime = 0;\n this._actsInfo = acts.map(act => {\n const actInfo = this._getActInfo(act, startTime);\n startTime += actInfo.duration;\n return actInfo;\n });\n }\n\n protected _getActInfo(act: IActSpec, actStartTime: number): IActInfo {\n let sceneStartTime = 0;\n const sceneInfoList = act.scenes.map(scene => {\n const sceneInfo = this._getSceneInfo(scene, sceneStartTime + (scene.delay ?? 0));\n sceneStartTime = sceneInfo.startTime + sceneInfo.duration;\n return sceneInfo;\n });\n const startTime = sceneInfoList.reduce((st, info) => Math.min(info.startTime, st), 0);\n const endTime = sceneInfoList.reduce((et, info) => Math.max(info.startTime + info.duration, et), 0);\n return {\n startTime: actStartTime,\n duration: startTime + endTime - startTime,\n id: act.id,\n sceneInfoList\n };\n }\n\n protected _getSceneInfo(scene: ISceneSpec, sceneStartTime: number): ISceneInfo {\n let scene_st = 0;\n let scene_et = 0;\n const actionList: IActionItem[] = [];\n scene.actions.forEach((action, actIdx) => {\n let character_st = Infinity;\n let character_et = -Infinity;\n action.characterActions.forEach(ca => {\n const characterIdList = isString(action.characterId) ? [action.characterId] : action.characterId;\n characterIdList.forEach(characterId => {\n const info = this._actionProcessor.getActInfo(characterId, ca);\n if (!info) {\n return;\n }\n const item = new ActionItem(info.startTime, info.duration, ca, characterId);\n\n character_st = Math.max(Math.min(item.startTime, character_st), 0);\n character_et = Math.max(item.startTime + item.duration, character_et);\n actionList.push(item);\n });\n });\n\n scene_st = !actIdx ? character_st : Math.max(Math.min(character_st, scene_st), 0);\n scene_et = !actIdx ? character_et : Math.max(character_et, scene_et);\n });\n\n const sceneInfo: ISceneInfo = {\n startTime: sceneStartTime,\n duration: scene_et,\n id: scene.id,\n actionList\n };\n\n return sceneInfo;\n }\n\n findScene(id: string): ISceneSpec | null {\n for (let i = 0; i < this._actSpec.length; i++) {\n const act = this._actSpec[i];\n for (let j = 0; j < act.scenes.length; j++) {\n const scene = act.scenes[j];\n if (scene.id === id) {\n return scene;\n }\n }\n }\n return null;\n }\n\n getScenes(): ISceneSpec[] {\n if (!this._actSpec) {\n return [];\n }\n const scenes: ISceneSpec[] = [];\n for (let i = 0; i < this._actSpec.length; i++) {\n const act = this._actSpec[i];\n scenes.push(...act.scenes);\n }\n return scenes;\n }\n\n toDSL(): IActSpec[] {\n return this._actSpec;\n }\n\n release(): void {\n this._actsInfo = [];\n this._actSpec = [];\n this.clearState();\n }\n}\n","import type { IActionProcessorItem } from '../interface/action-processor';\n\nexport interface IProcessorRegistry {\n registerProcessor: (characterType: string, processor: Record) => void;\n getProcessor: (characterType: string, action: string) => IActionProcessorItem;\n getProcessors: (characterType: string) => Record;\n}\n\nexport class ProcessorRegistry {\n private _processorMap: Map> = new Map();\n registerProcessor(characterType: string, processor: Record) {\n if (!this._processorMap.has(characterType)) {\n this._processorMap.set(characterType, {});\n }\n const processorMap = this._processorMap.get(characterType);\n for (const key in processor) {\n processorMap[key] = processor[key];\n }\n }\n getProcessor(characterType: string, action: string) {\n if (!this._processorMap.has(characterType)) {\n return null;\n }\n const processorMap = this._processorMap.get(characterType);\n if (!processorMap[action]) {\n return null;\n }\n return processorMap[action];\n }\n getProcessors(characterType: string) {\n if (!this._processorMap.has(characterType)) {\n return null;\n }\n const processorMap = this._processorMap.get(characterType);\n return processorMap;\n }\n}\n\nexport const globalProcessorRegistry = new ProcessorRegistry();\n","import type { IProcessorRegistry } from './processorRegistry';\nimport { globalProcessorRegistry } from './processorRegistry';\nimport type { IActionProcessor, IActionProcessorItem } from '../interface/action-processor';\nimport type { ICharacter } from '../interface/character';\nimport type { IActionSpec } from '../interface/dsl/dsl';\nimport type { IStory } from '../interface/story';\nimport { CharacterType } from '../constants/character';\n\nexport type IProcessorMap = Record>;\n\nexport interface IProcessorReturnType {\n totalTime: number;\n revertActionParams?: {\n action: string;\n payload: Record;\n };\n}\n\nexport class ActionProcessor implements IActionProcessor {\n protected _processorRegistry: IProcessorRegistry;\n\n protected _story: IStory;\n\n constructor(story: IStory, processorRegistry: IProcessorRegistry = globalProcessorRegistry) {\n this._processorRegistry = processorRegistry;\n this._story = story;\n }\n\n /**\n * 添加Action,根据Action中的characterId添加对应的characterActions实例\n * @param action\n */\n getActInfo(\n characterId: string,\n action: IActionSpec\n ): {\n startTime: number;\n duration: number;\n } | null {\n const character = this._story.getCharacterById(characterId);\n if (!character) {\n console.error(`获取character失败,请检查 ${characterId} 是否存在`);\n return null;\n }\n const processor = this.getProcessor(character.config.type, action.action);\n\n if (!processor) {\n console.error(`获取processor失败,请检查 ${character.config.type} 是否支持 ${action.action}`);\n return null;\n }\n return processor.getStartTimeAndDuration(action, character);\n }\n\n getProcessorList(name: string): IActionProcessorItem[] {\n return Object.values(this._processorRegistry.getProcessors(name));\n }\n\n getProcessor(name: string, actionName: string): IActionProcessorItem {\n // 获取processor,找不到就用common的processor\n return (\n this._processorRegistry.getProcessor(name, actionName) ||\n this._processorRegistry.getProcessor(CharacterType.COMMON, actionName)\n );\n }\n\n /**\n * Execute action\n * @param name\n * @param actionName\n * @param actionParams\n * @returns IProcessorReturnType\n */\n doAction(name: string, actionName: string, character: ICharacter, actionSpec: IActionSpec): void {\n const processor = this.getProcessor(name, actionName);\n if (processor) {\n const actionResult = processor.run(character, actionSpec);\n return actionResult;\n }\n // eslint-disable-next-line no-console\n console.error(`Action not found: character => ${name}, action => ${actionName} `);\n return undefined;\n }\n\n applyAppearAttrs(name: string, actionName: string, character: ICharacter, actionSpec: IActionSpec) {\n const processor = this.getProcessor(name, actionName);\n if (processor && processor.applyAttrsForVisibility) {\n return processor.applyAttrsForVisibility(character, actionSpec);\n }\n return undefined;\n }\n\n release() {\n this._processorRegistry = null;\n this._story = null;\n }\n}\n","import type { ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTicker, DefaultTimeline } from '@visactor/vrender-core';\n\n// let globalTimeline: ITimeline;\n\nexport class GlobalTickerStore {\n timelineMap: Map;\n protected globalTicker: ITicker;\n\n init() {\n const defaultGlobalTimeline = new DefaultTimeline();\n const globalTicker = new DefaultTicker([]);\n globalTicker.addTimeline(defaultGlobalTimeline);\n globalTicker.autoStop = false;\n const TICKER_FPS = 60;\n globalTicker.setFPS(TICKER_FPS);\n this.globalTicker = globalTicker;\n this.timelineMap = new Map();\n this.timelineMap.set('default', defaultGlobalTimeline);\n }\n\n getGlobalTicker() {\n if (!this.globalTicker) {\n this.init();\n }\n return this.globalTicker;\n }\n\n releaseGlobalTicker() {\n this.globalTicker.release();\n this.globalTicker = null;\n }\n\n getTimeline(name: string) {\n if (!this.globalTicker) {\n this.init();\n }\n let timeline = this.timelineMap.get(name);\n if (!timeline) {\n timeline = new DefaultTimeline();\n this.timelineMap.set(name, timeline);\n this.globalTicker.addTimeline(timeline);\n }\n return timeline;\n }\n\n release() {\n this.globalTicker.release();\n this.globalTicker = null;\n this.timelineMap.forEach(tl => tl.clear());\n this.timelineMap.clear();\n }\n}\n\nexport const globalTickerStore = new GlobalTickerStore();\n","import type { ITicker } from '@visactor/vrender-core';\nimport type { IPlayer, IViewSizeParams } from '../interface/player';\nimport type { IStory } from '../interface/story';\nimport type { IScheduler } from '../interface/scheduler';\nimport { Scheduler } from './scheduler';\nimport type { IActionProcessor } from '../interface/action-processor';\nimport { ActionProcessor } from './action-processor';\nimport type { IActionSpec, IActSpec } from '../interface/dsl/dsl';\nimport type { ICharacter } from '../interface/character';\nimport { globalTickerStore } from '../tools/global-ticker';\n\ninterface IPlayerParams {\n // ticker?: ITicker;\n actionProcessor?: IActionProcessor;\n}\n\nexport class Player implements IPlayer {\n protected _story: IStory | null;\n protected _ticker: ITicker;\n protected _scheduler: IScheduler;\n protected _currTime: number;\n protected _actionProcessor: IActionProcessor;\n protected _loop: number;\n protected _lastFrameTime: number = -1;\n\n constructor(story: IStory, params: IPlayerParams = {}) {\n const { actionProcessor = new ActionProcessor(story) } = params;\n this._story = story;\n this._ticker = globalTickerStore.getGlobalTicker();\n this._actionProcessor = actionProcessor;\n this._scheduler = new Scheduler(actionProcessor);\n this._currTime = 0;\n this.initTicker();\n }\n\n initTicker() {\n this._ticker.addListener('tick', this.handlerTick);\n }\n\n tickTo(t: number) {\n const lastTime = this._currTime;\n // 如果时间倒退,那就重置,从头开始(需要上层场景树也重置)\n if (lastTime > t) {\n this._story.reset();\n }\n\n // 初始化 appear 的属性\n const appearActionList = this._scheduler.getUnAppliedAppearAction();\n appearActionList.forEach(action => {\n const character = this._story.getCharacterById(action.characterId);\n this._actionProcessor.applyAppearAttrs(\n character.config.type,\n action.actionSpec.action,\n character,\n action.actionSpec\n );\n });\n\n const actions = this._scheduler.getActionsInRange(lastTime, t);\n const characterSet = new Set();\n actions.forEach(action => {\n const character = this._story.getCharacterById(action.characterId);\n characterSet.add(character);\n this._actionProcessor.doAction(character.config.type, action.actionSpec.action, character, action.actionSpec);\n });\n\n this._currTime = t;\n\n this._story.getCharacterList().forEach(c => {\n c.tickTo && c.tickTo(t);\n });\n\n this._story.canvas.tickTo(t);\n }\n\n bindStory(story: IStory) {\n this._story = story;\n }\n\n initActions(acts: IActSpec[]) {\n this._scheduler.init(acts);\n }\n\n reset() {\n this._scheduler.clearState();\n this._ticker.getTimelines().forEach(tl => tl.clear());\n this._currTime = 0;\n }\n\n play(loop: number = 0) {\n const totalTime = this._scheduler.getTotalTime();\n this._loop = loop;\n if (totalTime <= 0 && !this._loop) {\n // 没有动画,且不循环也不持续,直接定位到0s\n this._currTime = 0;\n this.tickTo(0);\n } else {\n // 其他环境都需要走ticker\n this._currTime = 0;\n this._ticker.start(true);\n }\n }\n\n protected handlerTick = (delta?: number) => {\n const time = Date.now();\n if (delta === void 0) {\n if (this._lastFrameTime >= 0) {\n delta = time - this._lastFrameTime;\n } else {\n delta = 0;\n }\n }\n this._lastFrameTime = time;\n\n const totalTime = this._scheduler.getTotalTime();\n let currTime = this._currTime;\n\n // 如果是循环播放,_currTime按周期计算\n if (this._loop > 0) {\n if (totalTime <= 0) {\n currTime = 0;\n } else {\n if (currTime + delta > totalTime) {\n currTime = currTime + delta;\n while (currTime > totalTime) {\n currTime = currTime - totalTime;\n }\n }\n }\n }\n\n if (!this._loop && currTime === totalTime) {\n return;\n }\n\n this.tickTo(this._loop >= 0 ? Math.min(currTime + delta, totalTime) : currTime + delta);\n };\n\n setViewScale(offsetX: number, offsetY: number, scaleX: number, scaleY: number, params: IViewSizeParams) {\n return;\n }\n\n toDSL(): IActSpec[] {\n return this._scheduler.toDSL();\n }\n\n addAction(sceneId: string, characterId: string, actions: IActionSpec[]) {\n this._scheduler.addAction(sceneId, characterId, actions);\n }\n\n removeCharacterActions(characterId: string) {\n this._scheduler.removeCharacterActions(characterId);\n }\n\n release() {\n this._actionProcessor.release();\n this._scheduler.release();\n this._ticker.removeListener('tick', this.handlerTick);\n this._ticker = null;\n // globalTickerStore.releaseGlobalTicker();\n }\n}\n","import '@visactor/vrender-core';\nimport {\n container,\n isBrowserEnv,\n isNodeEnv,\n preLoadAllModule,\n registerFlexLayoutPlugin,\n registerViewTransform3dPlugin,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin,\n registerDirectionalLight,\n registerOrthoCamera\n} from '@visactor/vrender-core';\nimport { loadBrowserEnv, loadNodeEnv } from '@visactor/vrender-kits';\nimport {\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n\nlet _registered = false;\nexport function initVR() {\n if (_registered) {\n return;\n }\n _registered = true;\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n registerArc3d();\n registerArea();\n registerCircle();\n registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n registerPath();\n registerPolygon();\n registerPyramid3d();\n registerRect();\n registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerWrapText();\n\n registerFlexLayoutPlugin();\n registerViewTransform3dPlugin();\n registerHtmlAttributePlugin();\n registerReactAttributePlugin();\n registerDirectionalLight();\n registerOrthoCamera();\n}\n","import type { Parser } from '@visactor/vdataset';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const arrayParser: Parser = (array: []) => {\n return array;\n};\n","import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec = Omit;\n\nexport type AdaptiveSpec = {\n [key in Exclude]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec extends Record | IMarkStateStyleSpec> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec | IMarkStateStyleSpec;\n}\n\n/** markSpec */\nexport type IMarkSpec = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record) => boolean);\n\nexport interface IMarkStateSpec {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec;\n}\n\nexport type IMarkStateStyleSpec = ConvertToMarkStyleSpec;\n\nexport interface IMarkStateTheme extends Record {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec\n extends IModelSpec,\n IMarkSpec,\n IAnimationSpec {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec {\n children?: ICustomMarkSpec[];\n}\n\nexport interface IExtensionMarkSpec> extends ICustomMarkSpec {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod = (\n ...args: T\n) => ReturnType> | ReturnType>;\n","export type ComponentType = keyof typeof ComponentTypeEnum | string;\n\nexport enum ComponentTypeEnum {\n cartesianAxis = 'cartesianAxis',\n cartesianBandAxis = 'cartesianAxis-band',\n cartesianLinearAxis = 'cartesianAxis-linear',\n cartesianTimeAxis = 'cartesianAxis-time',\n cartesianLogAxis = 'cartesianAxis-log',\n cartesianSymlogAxis = 'cartesianAxis-symlog',\n polarAxis = 'polarAxis',\n polarBandAxis = 'polarAxis-band',\n polarLinearAxis = 'polarAxis-linear',\n crosshair = 'crosshair',\n cartesianCrosshair = 'cartesianCrosshair',\n polarCrosshair = 'polarCrosshair',\n dataZoom = 'dataZoom',\n geoCoordinate = 'geoCoordinate',\n indicator = 'indicator',\n discreteLegend = 'discreteLegend',\n continuousLegend = 'continuousLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend',\n mapLabel = 'mapLabel',\n markLine = 'markLine',\n markArea = 'markArea',\n markPoint = 'markPoint',\n polarMarkLine = 'polarMarkLine',\n polarMarkArea = 'polarMarkArea',\n polarMarkPoint = 'polarMarkPoint',\n geoMarkPoint = 'geoMarkPoint',\n tooltip = 'tooltip',\n title = 'title',\n player = 'player',\n scrollBar = 'scrollBar',\n label = 'label',\n totalLabel = 'totalLabel',\n\n brush = 'brush',\n\n poptip = 'poptip',\n\n customMark = 'customMark'\n}\n","/**\n * 生成唯一ID。 如果提供了 prefix ,会被添加到ID前缀上。\n * @param prefix 默认 dataset\n * @returns\n */\nlet idIndex: number = 0;\nconst maxId = 100000000;\nexport function getUUID(prefix: string = 'dataset'): string {\n if (idIndex > maxId) {\n idIndex = 0;\n }\n return prefix + '_' + idIndex++;\n}\n","import type { ILogger } from '@visactor/vutils';\nimport { EventEmitter, Logger } from '@visactor/vutils';\nimport type { DataView } from './data-view';\nimport { getUUID } from './utils/uuid';\nimport type { Transform } from './transform';\nimport type { IParserOptions, Parser } from './parser';\n\ninterface IDataSetOptions {\n name?: string;\n logger?: Logger;\n}\n\n/**\n * 数据集\n */\nexport class DataSet {\n isDataSet: boolean = true;\n\n /**\n * 已注册的 Transform(key-value 对)\n */\n transformMap: Record = {};\n\n /**\n * 已注册的 Parser(key-value 对)\n */\n parserMap: Record = {};\n\n /**\n * 所有挂在数据集上的数据视图(key-value 对)\n */\n dataViewMap: Record = {};\n\n name: string;\n\n /**\n * 消息的监听与触发\n */\n target: any = new EventEmitter();\n\n /**\n * 多 DataView消息监听工具\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n _callMap: Map void>;\n\n protected _logger: ILogger;\n\n constructor(public options?: IDataSetOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataset');\n }\n this.name = name;\n\n this._logger = options?.logger ?? Logger.getInstance();\n }\n\n setLogger(logger: Logger) {\n this._logger = logger;\n }\n\n /**\n * 根据name 获取 dataView\n * @param name - name\n */\n getDataView(name: string | number): DataView {\n return this.dataViewMap[name];\n }\n\n /**\n * 设置 dataView\n * @param name - 名称\n * @param dataView - data dataView\n */\n setDataView(name: string | number, dataView: DataView): void {\n if (this.dataViewMap[name]) {\n this._logger?.error(`Error: dataView ${name} 之前已存在,请重新命名`);\n }\n this.dataViewMap[name] = dataView;\n }\n\n /**\n * 移除 dataview\n * @param name\n */\n removeDataView(name: string | number) {\n this.dataViewMap[name] = null;\n\n delete this.dataViewMap[name];\n }\n\n /**\n * 注册一个数据解析器\n * @param name - 类型\n * @param parser - 解析逻辑\n */\n registerParser(name: string, parser: Parser): void {\n if (this.parserMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.parserMap[name] = parser;\n }\n\n /**\n * 移除 parser\n * @param name\n */\n removeParser(name: string) {\n this.parserMap[name] = null;\n delete this.parserMap[name];\n }\n\n /**\n * 根据名称获取数据解析器\n * @param name\n * @returns\n */\n getParser(name: string): Parser {\n return this.parserMap[name] || this.parserMap.default;\n }\n\n /**\n * 注册一个数据处理函数\n * @param name\n * @param transform\n */\n registerTransform(name: string, transform: Transform): void {\n if (this.transformMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.transformMap[name] = transform;\n }\n\n /**\n * 移除 transform\n * @param name\n */\n removeTransform(name: string) {\n this.transformMap[name] = null;\n delete this.transformMap[name];\n }\n\n /**\n * 根据名称获取数据处理函数\n * @param name\n * @returns\n */\n getTransform(name?: string): Transform {\n return this.transformMap[name];\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewAddListener(list: DataView[], event: string, call: Function) {\n if (!this._callMap) {\n this._callMap = new Map();\n }\n\n let callAd = this._callMap.get(call);\n if (!callAd) {\n callAd = () => {\n if (list.some(l => l.isRunning)) {\n return;\n }\n call();\n };\n }\n list.forEach(l => {\n l.target.addListener(event, callAd);\n });\n this._callMap.set(call, callAd);\n }\n\n allDataViewAddListener(event: string, call: () => void) {\n this.multipleDataViewAddListener(Object.values(this.dataViewMap), event, call);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewRemoveListener(list: DataView[], event: string, call: Function) {\n if (this._callMap) {\n const callAd = this._callMap.get(call);\n if (callAd) {\n list.forEach(l => {\n l.target.removeListener(event, callAd);\n });\n }\n this._callMap.delete(call);\n }\n }\n\n multipleDataViewUpdateInParse(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.parseNewData(d.data, d.options));\n }\n\n multipleDataViewUpdateInRawData(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.updateRawData(d.data, d.options));\n }\n\n destroy() {\n this.transformMap = null;\n this.parserMap = null;\n this.dataViewMap = null;\n this._callMap = null;\n this.target.removeAllListeners();\n }\n}\n","import type { DataView } from '../data-view';\nimport type { Parser } from '.';\nimport { isBoolean, isArray } from '@visactor/vutils';\n\nexport interface IDataViewParserOptions {\n dependencyUpdate?: boolean; // 是否依赖更新\n}\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const dataViewParser: Parser = (data: DataView[], options: IDataViewParserOptions, dataView: DataView) => {\n const dependencyUpdate = isBoolean(options?.dependencyUpdate) ? options?.dependencyUpdate : true;\n\n if (!data || !isArray(data)) {\n throw new TypeError('Invalid data: must be DataView array!');\n }\n if (isArray(dataView.rawData)) {\n (dataView.rawData).forEach(rd => {\n if (rd.target) {\n rd.target.removeListener('change', dataView.reRunAllTransform);\n rd.target.removeListener('markRunning', dataView.markRunning);\n }\n });\n }\n\n if (dependencyUpdate) {\n data.forEach(d => {\n d.target.addListener('change', dataView.reRunAllTransform);\n d.target.addListener('markRunning', dataView.markRunning);\n });\n }\n return data;\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 * @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(Function)\n * // => false\n *\n * isObjectLike(null)\n * // => false\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isObjectLike = (value: any): value is object | Function | Array => {\n return typeof value === 'object' && value !== null;\n};\n\nexport default isObjectLike;\n","import isObjectLike from './isObjectLike';\nimport isType from './isType';\n\n/**\n * @see https://github.com/lodash/lodash/blob/master/isPlainObject.js\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 * @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 */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isPlainObject = function (value: any): value is object {\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n\nexport default isPlainObject;\n","import isArray from './isArray';\nimport isArrayLike from './isArrayLike';\nimport isPlainObject from './isPlainObject';\nimport isValid from './isValid';\n\nexport function baseMerge(target: any, source: any, shallowArray: boolean = false, skipTargetArray: boolean = false) {\n if (source) {\n if (target === source) {\n return;\n }\n if (isValid(source) && typeof source === 'object') {\n // baseFor\n const iterable = Object(source);\n const props = [];\n // keysIn\n for (const key in iterable) {\n props.push(key);\n }\n let { length } = props;\n let propIndex = -1;\n while (length--) {\n const key = props[++propIndex];\n // skipArray 这个是vchart spec的特有逻辑\n if (\n isValid(iterable[key]) &&\n typeof iterable[key] === 'object' &&\n (!skipTargetArray || !isArray(target[key]))\n ) {\n baseMergeDeep(target, source, key, shallowArray, skipTargetArray);\n } else {\n assignMergeValue(target, key, iterable[key]);\n }\n }\n }\n }\n}\n\n// 由于目前 ChartSpace 内部对 spec 会先执行一次深拷贝,merge 暂时不考虑 source 中有环的问题\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction baseMergeDeep(\n target: object,\n source: object,\n key: string,\n shallowArray: boolean = false,\n skipTargetArray: boolean = false\n) {\n const objValue = target[key];\n const srcValue = source[key];\n let newValue = source[key];\n let isCommon = true;\n // 不考虑 buffer / typedArray 类型\n if (isArray(srcValue)) {\n if (shallowArray) {\n // 依据参数对数组做浅拷贝\n newValue = [];\n } else if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLike(objValue)) {\n // 如果 source 为数组,则 target 的 arrayLike 对象也视作为数组处理\n newValue = new Array(objValue.length);\n let index = -1;\n const length = objValue.length;\n while (++index < length) {\n newValue[index] = objValue[index];\n }\n }\n }\n // else if (isArray(srcValue) && shallowArray) {\n // newValue = [];\n // }\n // 不考虑 argument 类型\n else if (isPlainObject(srcValue)) {\n newValue = objValue ?? {};\n // 不考虑 prototype 的额外处理\n if (typeof objValue === 'function' || typeof objValue !== 'object') {\n newValue = {};\n }\n } else {\n isCommon = false;\n }\n // 对 class 等复杂对象或者浅拷贝的 array 不做拷贝处理\n if (isCommon) {\n baseMerge(newValue, srcValue, shallowArray, skipTargetArray);\n }\n assignMergeValue(target, key, newValue);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction assignMergeValue(target: object, key: string, value: any) {\n if ((value !== undefined && !eq(target[key], value)) || (value === undefined && !(key in target))) {\n // 不考虑 __proto__ 的赋值处理\n target[key] = value;\n }\n}\n\nfunction eq(value: any, other: any) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\n// 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n// 例如 lineDash 等 spec 的 merge 使用这一操作更合适\nexport default function merge(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true);\n }\n return target;\n}\n","import type { IFields } from '../data-view';\nimport type { IFieldsMeta } from '../data-view';\nimport type { Transform } from '.';\n\ntype SortInfoType = {\n key: string;\n type: 'ordinal' | 'linear';\n index: number;\n sortIndex: { [key: string]: number };\n sortReverse: boolean;\n sortIndexCount: number;\n};\n\nexport interface IFieldsOptions {\n fields: IFields;\n}\n\ninterface IFieldsMetaTemp extends IFieldsMeta {\n _domainCache: { [key: string]: number };\n alias?: string;\n}\ninterface IFieldsTemp extends IFields {\n [key: string]: IFieldsMetaTemp;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const fields: Transform = (data: Array, options: IFieldsOptions) => {\n if (!options?.fields) {\n return data;\n }\n if (data.length === 0) {\n return data;\n }\n const fields = options.fields;\n const dataTemp = data[0];\n const filterFields: IFieldsTemp = {};\n const sortFields: SortInfoType[] = [];\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const fieldInfo = fields[key] as IFieldsMetaTemp;\n if (!fieldInfo.type) {\n let dataCheck = dataTemp;\n if (!(key in dataTemp)) {\n dataCheck = data.find(d => key in d) ?? dataTemp;\n }\n fieldInfo.type = typeof dataCheck[key] === 'number' ? 'linear' : 'ordinal';\n }\n let sortInfo: SortInfoType;\n if (typeof fieldInfo.sortIndex === 'number') {\n sortInfo = {\n key,\n type: fieldInfo.type,\n index: fieldInfo.sortIndex,\n sortIndex: {},\n sortIndexCount: 0,\n sortReverse: fieldInfo.sortReverse === true\n };\n sortFields.push(sortInfo);\n }\n // if has domain & type = ordinal, make domain cache\n if (fieldInfo.domain?.length > 0) {\n if (fieldInfo.type === 'ordinal') {\n fieldInfo._domainCache = {};\n filterFields[key] = fieldInfo;\n // for sort\n const _domainCache = {};\n fieldInfo.domain.forEach((d, i) => {\n _domainCache[d] = i;\n fieldInfo._domainCache[d] = i;\n });\n if (sortInfo) {\n sortInfo.sortIndex = _domainCache;\n sortInfo.sortIndexCount = fieldInfo.domain.length;\n }\n } else if (fieldInfo.domain.length >= 2) {\n filterFields[key] = fieldInfo;\n }\n }\n }\n }\n // domain filter and sort\n const filterKeys = Object.keys(filterFields);\n if (filterKeys.length > 0) {\n data = data.filter(d => {\n for (const key in filterFields) {\n const fieldInfo = filterFields[key];\n if (fieldInfo.type === 'ordinal') {\n if (!(d[key] in fieldInfo._domainCache)) {\n return false;\n }\n } else {\n if (fieldInfo.domain[0] > d[key] || fieldInfo.domain[1] < d[key]) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n sortFields.sort((a, b) => a.index - b.index);\n\n data.sort((a, b) => sortData(a, b, sortFields));\n\n return data;\n};\n\nfunction sortData(a: object, b: object, sortFields: SortInfoType[]) {\n for (let i = 0; i < sortFields.length; i++) {\n const sortInfo = sortFields[i];\n let v = 0;\n if (sortInfo.type === 'ordinal') {\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[b[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[b[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[a[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[a[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n v = sortInfo.sortIndex[a[sortInfo.key]] - sortInfo.sortIndex[b[sortInfo.key]];\n } else if (sortInfo.type === 'linear') {\n v = a[sortInfo.key] - b[sortInfo.key];\n }\n if (sortInfo.sortReverse) {\n v = -v;\n }\n if (v === 0) {\n continue;\n }\n return v;\n }\n return 0;\n}\n","import { cloneDeep, EventEmitter, merge, isNil } from '@visactor/vutils';\nimport type { DataSet } from './data-set';\nimport type { ITransformOptions } from './transform';\nimport type { DATAVIEW_TYPE } from './constants';\nimport { getUUID } from './utils/uuid';\nimport type { IParserOptions } from './parser';\nimport { fields } from './transform/fields';\nexport interface IDataViewOptions {\n name?: string | number; // dataview 名称\n history?: boolean; // 是否启用 historyData 字段存储全部历史变化数据,默认false 不存储\n diffKeys?: string[]; // 用于指定该数据视图监听的 `states` 状态量的。默认监听所有状态量(也就是任何状态量变更都会导致数据视图重新计算),如果指定为空数组 [],则不监听任何状态量,如果指定为非空数组,则只监听数组元素对应的状态量变更。\n fields?: IFields;\n}\n\nexport interface IFieldsMeta {\n type?: 'ordinal' | 'linear';\n domain?: any[];\n sortIndex?: number;\n sortReverse?: boolean;\n [key: string]: unknown;\n}\n\nexport interface IFields {\n [key: string]: IFieldsMeta;\n}\n\nexport const DataViewDiffRank = '_data-view-diff-rank';\n\n/**\n * 数据视图\n * @public\n */\nexport class DataView {\n isDataView: boolean = true;\n\n type: DATAVIEW_TYPE;\n\n name: string | number;\n\n target: any = new EventEmitter();\n\n /**\n * 当前parser\n */\n parseOption: IParserOptions = null;\n\n /**\n * 已应用的 transform\n */\n transformsArr: Array = [];\n\n /**\n * 是否正在运行 parse 和 transform\n */\n isRunning: boolean = false;\n\n /**\n * 原始数据\n */\n rawData: any = {};\n\n history: boolean = false;\n /**\n * 中间态数据,默认 history false 不存储\n */\n historyData: any[];\n\n /**\n * parser后的数据\n */\n parserData: any = {};\n\n /**\n * 最终数据\n */\n latestData: any = {};\n\n /**\n * 数据维度信息\n */\n protected _fields: IFields = null;\n\n // diff用数据id\n private _diffData: boolean;\n private _diffKeys: string[];\n _diffMap: Map;\n _diffRank: number;\n\n // tag\n\n latestDataAUD: {\n add: any;\n update: any;\n del: any;\n };\n\n constructor(public dataSet: DataSet, public options?: IDataViewOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataview');\n }\n this.name = name;\n\n if (options?.history) {\n this.history = options.history;\n this.historyData = [];\n }\n\n this.dataSet.setDataView(name, this);\n this.setFields(options?.fields);\n }\n\n /**\n * 解析数据\n * todo: parse instanceof DataView\n * todo: parse ['dataview1', 'dataview2']\n * @param data\n * @param options\n * @returns\n */\n parse(data: any, options?: IParserOptions, emit: boolean = false): DataView {\n this.isRunning = true;\n if (emit) {\n this.target.emit('beforeParse', []);\n }\n options && (this.parseOption = options);\n const cloneData = this.cloneParseData(data, options);\n if (options?.type) {\n // 默认bytejson\n const parserFn = this.dataSet.getParser(options.type) ?? this.dataSet.getParser('bytejson');\n\n const parserData = parserFn(cloneData, options.options, this);\n\n this.rawData = cloneData;\n this.parserData = parserData;\n\n if (this.history) {\n this.historyData.push(cloneData, parserData);\n }\n\n this.latestData = parserData;\n } else {\n this.parserData = cloneData;\n this.rawData = cloneData;\n\n if (this.history) {\n this.historyData.push(cloneData);\n }\n this.latestData = cloneData;\n }\n\n this.isRunning = false;\n if (emit) {\n this.target.emit('afterParse', []);\n }\n return this;\n }\n /**\n * 执行数据处理数据\n * @param options\n */\n transform(options: ITransformOptions, execute: boolean = true): DataView {\n this.isRunning = true;\n if (options && options.type) {\n // special transform\n let pushOption = true;\n if (options.type === 'fields') {\n this._fields = options.options.fields;\n // make sure only one fields\n const index = this.transformsArr.findIndex(_op => _op.type === options.type);\n if (index >= 0) {\n pushOption = false;\n this.transformsArr[index].options.fields = this._fields;\n }\n }\n pushOption && this.transformsArr.push(options);\n if (execute) {\n const lastTag = this.isLastTransform(options);\n\n this.executeTransform(options);\n if (lastTag) {\n this.diffLastData();\n }\n }\n }\n // 每次新增transform都要进行一次排序\n this.sortTransform();\n this.isRunning = false;\n return this;\n }\n private isLastTransform(options: ITransformOptions) {\n return this.transformsArr[this.transformsArr.length - 1] === options;\n }\n\n sortTransform() {\n if (this.transformsArr.length >= 2) {\n this.transformsArr.sort((a, b) => (a.level ?? 0) - (b.level ?? 0));\n }\n }\n\n private executeTransform(\n options: ITransformOptions,\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) {\n const { pushHistory, emitMessage } = opt;\n const transformFn = this.dataSet.getTransform(options.type);\n const transformData = transformFn(this.latestData, options.options);\n\n if (this.history && pushHistory !== false) {\n this.historyData.push(transformData);\n }\n\n this.latestData = transformData;\n emitMessage !== false && this.target.emit('change', []);\n }\n\n private resetTransformData() {\n this.latestData = this.parserData;\n if (this.history) {\n this.historyData.length = 0;\n this.historyData.push(this.rawData, this.parserData);\n }\n }\n\n reRunAllTransform = (\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) => {\n this.isRunning = true;\n this.resetTransformData();\n this.transformsArr.forEach(t => {\n this.executeTransform(t, { pushHistory: opt.pushHistory, emitMessage: false });\n if (this.isLastTransform(t)) {\n this.diffLastData();\n }\n });\n this.isRunning = false;\n\n opt.emitMessage !== false && this.target.emit('change', []);\n return this;\n };\n\n enableDiff(keys: string[]) {\n this._diffData = true;\n this._diffKeys = keys;\n\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n disableDiff() {\n this._diffData = false;\n this._diffMap = null;\n this._diffRank = null;\n }\n\n resetDiff() {\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n protected diffLastData() {\n if (!this._diffData) {\n return;\n }\n if (!this.latestData.forEach) {\n return;\n }\n if (!this._diffKeys?.length) {\n return;\n }\n const next = this._diffRank + 1;\n if (this._diffRank === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n this._diffMap.set(\n this._diffKeys.reduce((pre, k) => pre + d[k], ''),\n d\n );\n });\n this.latestDataAUD = {\n add: Array.from(this.latestData),\n del: [],\n update: []\n };\n } else {\n this.latestDataAUD = {\n add: [],\n del: [],\n update: []\n };\n let tempKey;\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n tempKey = this._diffKeys.reduce((pre, k) => pre + d[k], '');\n if (this._diffMap.get(tempKey)) {\n this.latestDataAUD.update.push(d);\n } else {\n this.latestDataAUD.add.push(d);\n }\n this._diffMap.set(tempKey, d);\n });\n this._diffMap.forEach((v, k) => {\n if (v[DataViewDiffRank] < next) {\n this.latestDataAUD.del.push(v);\n this._diffMap.delete(k);\n }\n });\n }\n this._diffRank = next;\n }\n\n private cloneParseData(data: any, options?: IParserOptions) {\n let clone = false;\n if (!(data instanceof DataView) && options?.clone === true) {\n clone = true;\n }\n return clone ? cloneDeep(data) : data;\n }\n\n parseNewData(data: any, options?: IParserOptions) {\n this.parse(data, options || this.parseOption);\n this.reRunAllTransform();\n }\n\n updateRawData(data: any, options?: IParserOptions) {\n const cloneData = this.cloneParseData(data, options);\n this.rawData = cloneData;\n this.parserData = cloneData;\n this.latestData = cloneData;\n this.reRunAllTransform();\n }\n\n // updateParseData(data: any) {\n // // this.parse(data, this.parseOption);\n // this.parserData = data;\n // this.reRunAllTransform();\n // }\n // AddParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n // RemParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n\n markRunning = () => {\n this.isRunning = true;\n this.target.emit('markRunning', []);\n };\n\n getFields() {\n if (this._fields) {\n return this._fields;\n }\n if (this.parseOption?.type === 'dataview' && this.rawData.length === 1 && this.rawData[0].getFields) {\n return this.rawData[0].getFields();\n }\n return null;\n }\n\n setFields(f: IFields, foreMerge: boolean = false) {\n if (f && foreMerge) {\n this._fields = merge({}, this._fields, f);\n } else {\n this._fields = f;\n }\n\n const fieldsOption = this.transformsArr.find(_op => _op.type === 'fields');\n if (!isNil(this._fields) && isNil(fieldsOption)) {\n // add\n this.dataSet.registerTransform('fields', fields);\n this.transform(\n {\n type: 'fields',\n options: {\n fields: this._fields\n }\n },\n false\n );\n } else if (fieldsOption) {\n // update\n fieldsOption.options.fields = this._fields;\n }\n }\n\n destroy() {\n this.dataSet.removeDataView(this.name);\n this._diffMap = null;\n this._diffRank = null;\n this.latestData = null;\n this.rawData = null;\n this.parserData = null;\n this.transformsArr = null;\n this.target = null;\n }\n}\n\nexport function isDataView(obj: any): obj is DataView {\n return obj instanceof DataView;\n}\n","import { isArray, isPlainObject, isString } from '@visactor/vutils';\nimport type { ISeriesSpec } from '../../typings';\n\n// todo 以目前的场景来看,并没有递归的需要。\n// 考虑到不确定性,还是递归处理spec对象,时间消耗很少\nexport function specTransform(\n spec: unknown,\n special: {\n [key: string]: (v: unknown) => unknown;\n } = {\n data: v => v\n }\n): unknown {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (spec.constructor === Object) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // todo 特殊处理怎样更合理?\n if (special[key]) {\n result[key] = special[key](spec[key]);\n continue;\n }\n result[key] = specTransform(spec[key], special);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return spec.map(s => specTransform(s, special));\n }\n return spec;\n}\n\n/**\n * functionTransform is used to replace the function registered by the instance\n * @param spec\n * @returns\n */\nexport function functionTransform(spec: ISeriesSpec, VChart: any): any {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (isPlainObject(spec)) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // 如果使用了注册函数\n if (isString(spec[key]) && VChart.getFunction(spec[key])) {\n result[key] = VChart.getFunction(spec[key]);\n continue;\n }\n result[key] = functionTransform(spec[key], VChart);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return (spec as ISeriesSpec[]).map((s: ISeriesSpec) => functionTransform(s, VChart));\n }\n return spec;\n}\n","let VChartId = 0;\nconst VChartIdMax = 9999999;\n\nexport function createID(): number {\n VChartId >= VChartIdMax && (VChartId = 0);\n return VChartId++;\n}\n\nexport function resetID() {\n VChartId = 0;\n}\n","import {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n} from '@visactor/vutils';\nimport type { IDataDomainSpec } from '../typings';\n\nexport {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n};\n\nexport function couldBeValidNumber(v: any) {\n if (v === null || v === undefined || v === '') {\n return false;\n }\n if (isNumber(v)) {\n return true;\n }\n // eslint-disable-next-line no-self-compare\n return +v === +v;\n}\n\nexport function toValidNumber(v: any) {\n if (isValidNumber(v)) {\n return v;\n }\n const value = +v;\n return isValidNumber(value) ? value : 0;\n}\n\n/**\n * 检测一段字符串为合法数值\n */\nexport function isNumeric(value: string): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n}\n\nexport function isDataDomainSpec(domain: any): domain is IDataDomainSpec[] {\n if (!domain || domain.length === 0) {\n return false;\n }\n if (isNil(domain[0]) || isNil(domain[0].dataId)) {\n return false;\n }\n return isArray(domain[0].fields);\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray } from '@visactor/vutils';\nimport { isNumber, isNil, isString, isFunction, couldBeValidNumber, isObject } from './type';\nimport type { IPadding } from '../typings/space';\nimport type { IPoint } from '../typings/coordinate';\nimport type {\n ILayoutNumber,\n ILayoutRect,\n IPercent,\n IPercentOffset,\n ILayoutPaddingSpec,\n ILayoutOrientPadding\n} from '../typings/layout';\n\nexport function isValidOrient(orient: string): boolean {\n switch (orient) {\n case 'left':\n case 'right':\n case 'top':\n case 'bottom':\n return true;\n default:\n return false;\n }\n}\n\nexport function isPercent(v: any): v is IPercent {\n if (!isString(v)) {\n return false;\n }\n if (!v.endsWith('%')) {\n return false;\n }\n return couldBeValidNumber(v.substring(0, v.length - 1));\n}\n\nexport function isPercentOffset(v: any): v is IPercentOffset {\n if (!isObject(v)) {\n return false;\n }\n if ('percent' in v || 'offset' in v) {\n return true;\n }\n return false;\n}\n\nexport function calcLayoutNumber(\n v: ILayoutNumber | undefined,\n size: number,\n callOp?: ILayoutRect, //如果是函数类型的话,函数的参数\n defaultValue: number = 0\n) {\n if (isNumber(v)) {\n return v;\n }\n if (isPercent(v)) {\n return (Number(v.substring(0, v.length - 1)) * size) / 100;\n }\n if (isFunction(v)) {\n return v(callOp);\n }\n if (isObject(v)) {\n return size * (v.percent ?? 0) + (v.offset ?? 0);\n }\n return defaultValue;\n}\n\nexport function calcPadding(\n paddingSpec: ILayoutOrientPadding,\n rect: ILayoutRect,\n callOp: ILayoutRect //如果是函数类型的话,函数的参数\n): IPadding {\n const result: IPadding = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n if (Object.values(paddingSpec).every(value => isNumber(value))) {\n result.top = (paddingSpec).top ?? 0;\n result.right = (paddingSpec).right ?? 0;\n result.bottom = (paddingSpec).bottom ?? 0;\n result.left = (paddingSpec).left ?? 0;\n return result;\n }\n const paddings = [\n {\n orients: ['left', 'right'],\n size: rect.width\n },\n {\n orients: ['top', 'bottom'],\n size: rect.height\n }\n ];\n paddings.forEach(p => {\n p.orients.forEach(o => {\n result[o] = calcLayoutNumber(paddingSpec[o], p.size, callOp);\n });\n });\n return result;\n}\n\nexport function boundsInRect(bounds: IBoundsLike, rect: ILayoutRect): ILayoutRect {\n if (!bounds) {\n return { width: 0, height: 0 };\n }\n return {\n width: Math.ceil(Math.min(bounds.x2 - bounds.x1, rect.width)),\n height: Math.ceil(Math.min(bounds.y2 - bounds.y1, rect.height))\n };\n}\n\nexport function normalizeLayoutPaddingSpec(spec: ILayoutPaddingSpec): ILayoutOrientPadding {\n let result: ILayoutOrientPadding = {};\n if (isArray(spec)) {\n if (!isNil(spec[0])) {\n result.top = result.left = result.bottom = result.right = spec[0];\n }\n if (!isNil(spec[1])) {\n result.left = result.right = spec[1];\n }\n if (!isNil(spec[2])) {\n result.bottom = spec[2];\n }\n if (!isNil(spec[3])) {\n result.left = spec[3];\n }\n return result;\n }\n if (isNumber(spec) || isPercent(spec) || isFunction(spec) || isPercentOffset(spec)) {\n result.top = result.left = result.bottom = result.right = spec;\n return result;\n }\n if (isObject(spec)) {\n result = { ...spec };\n return result;\n }\n return result;\n}\n\nexport function convertPoint(point: IPoint, relativePoint: IPoint, convert: boolean) {\n if (convert) {\n return {\n x: point.x + relativePoint.x,\n y: point.y + relativePoint.y\n };\n }\n return point;\n}\n\n/**\n * 将相对数值转换为绝对数值\n * @param originValue 原始值(相对值或绝对值)\n * @param total 总体值\n * @returns 实际绝对数值\n */\nexport const getActualNumValue = (originValue: number | string, total: number): number => {\n const originNumValue = Number(originValue);\n const originStrValue = originValue.toString();\n if (isNaN(originNumValue) && originStrValue[originStrValue.length - 1] === '%') {\n return total * (Number(originStrValue.slice(0, originStrValue.length - 1)) / 100);\n }\n return originNumValue;\n};\n","import { isBrowserEnv } from '@visactor/vrender-core';\nimport type { RenderMode } from '../typings/spec';\n\nexport const isBrowser = isBrowserEnv();\nexport const domDocument = isBrowser && globalThis ? globalThis.document : undefined;\n\n// Taro 会模拟实现 DOM,所以还是加上 mode 的判断\nexport function isTrueBrowser(mode: RenderMode): boolean {\n return (mode === 'desktop-browser' || mode === 'mobile-browser') && isBrowser;\n}\n\nexport function isPcLikeMode(mode: RenderMode) {\n return mode === 'desktop-miniApp' || mode === 'desktop-browser';\n}\n\nexport function isMobileLikeMode(mode: RenderMode) {\n return isMiniAppLikeMode(mode) || mode === 'mobile-browser';\n}\n\nexport function isMiniAppLikeMode(mode: RenderMode) {\n return mode.includes('miniApp') || mode === 'lynx' || mode === 'wx' || mode === 'harmony';\n}\n","import { Logger, isFunction } from '@visactor/vutils';\n\nexport const log = (msg: string, ...args: any[]) => {\n if (!config.silent) {\n return Logger.getInstance().info(msg, ...args);\n }\n return null;\n};\n\nexport const warn = (msg: string, detail?: any) => {\n if (isFunction(config.warnHandler)) {\n config.warnHandler.call(null, msg, detail);\n }\n if (detail) {\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`, detail);\n }\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`);\n};\n\nexport const error = (msg: string, detail?: any, err?: Error) => {\n if (config.silent) {\n return;\n }\n if (isFunction(config.errorHandler)) {\n config.errorHandler.call(null, msg, detail);\n return;\n }\n throw new Error(msg);\n};\n\nexport const config = {\n silent: false,\n warnHandler: false,\n errorHandler: false\n} as unknown as IConfig;\n\nexport interface IConfig {\n /**\n * 是否开启控制台告警\n */\n silent: boolean;\n /**\n * 错误处理\n */\n errorHandler?: (msg: string, detail?: any) => void;\n /**\n * 警告处理\n */\n warnHandler?: (msg: string, detail?: any) => void;\n}\n","import type { DirectionType, ISeriesSpec } from '../../typings';\nimport type { ICartesianSeriesSpec } from '../cartesian';\nimport { SeriesTypeEnum } from '../interface';\nimport type { ISankeySeriesSpec } from '../sankey/interface';\n\nexport function getDirectionFromSeriesSpec(spec: ISeriesSpec): DirectionType {\n const { type } = spec;\n\n if (type === SeriesTypeEnum.sankey) {\n return (spec as ISankeySeriesSpec).direction ?? 'horizontal';\n }\n\n return (spec as ICartesianSeriesSpec).direction ?? 'vertical';\n}\n","export type SeriesType = keyof typeof SeriesTypeEnum | string;\n\nexport enum SeriesTypeEnum {\n area = 'area',\n line = 'line',\n bar = 'bar',\n bar3d = 'bar3d',\n rangeColumn = 'rangeColumn',\n rangeColumn3d = 'rangeColumn3d',\n rangeArea = 'rangeArea',\n dot = 'dot',\n geo = 'geo',\n link = 'link',\n map = 'map',\n pie = 'pie',\n pie3d = 'pie3d',\n radar = 'radar',\n rose = 'rose',\n scatter = 'scatter',\n circularProgress = 'circularProgress',\n wordCloud = 'wordCloud',\n wordCloud3d = 'wordCloud3d',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n linearProgress = 'linearProgress',\n boxPlot = 'boxPlot',\n sankey = 'sankey',\n gaugePointer = 'gaugePointer',\n gauge = 'gauge',\n treemap = 'treemap',\n sunburst = 'sunburst',\n circlePacking = 'circlePacking',\n waterfall = 'waterfall',\n heatmap = 'heatmap',\n correlation = 'correlation',\n liquid = 'liquid',\n venn = 'venn',\n mosaic = 'mosaic',\n pictogram = 'pictogram'\n}\n\nexport const enum SeriesMarkNameEnum {\n label = 'label',\n point = 'point',\n line = 'line',\n area = 'area',\n bar = 'bar',\n bar3d = 'bar3d',\n boxPlot = 'boxPlot',\n outlier = 'outlier',\n circlePacking = 'circlePacking',\n group = 'group',\n gridBackground = 'gridBackground',\n grid = 'grid',\n dot = 'dot',\n title = 'title',\n subTitle = 'subTitle',\n symbol = 'symbol',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n transform = 'transform',\n transform3d = 'transform3d',\n transformLabel = 'transformLabel',\n outerLabel = 'outerLabel',\n outerLabelLine = 'outerLabelLine',\n pin = 'pin',\n pinBackground = 'pinBackground',\n pointer = 'pointer',\n segment = 'segment',\n track = 'track',\n cell = 'cell',\n cellBackground = 'cellBackground',\n link = 'link',\n arrow = 'arrow',\n pie = 'pie',\n pie3d = 'pie3d',\n labelLine = 'labelLine',\n progress = 'progress',\n minLabel = 'minLabel',\n maxLabel = 'maxLabel',\n rose = 'rose',\n node = 'node',\n sunburst = 'sunburst',\n nonLeaf = 'nonLeaf',\n leaf = 'leaf',\n nonLeafLabel = 'nonLeafLabel',\n leaderLine = 'leaderLine',\n stackLabel = 'stackLabel',\n word = 'word',\n fillingWord = 'fillingWord',\n wordMask = 'wordMask',\n nodePoint = 'nodePoint',\n ripplePoint = 'ripplePoint',\n centerPoint = 'centerPoint',\n centerLabel = 'centerLabel',\n barBackground = 'barBackground',\n lineLabel = 'lineLabel',\n areaLabel = 'areaLabel',\n liquidGroup = 'liquidGroup',\n liquid = 'liquid',\n liquidBackground = 'liquidBackground',\n liquidOutline = 'liquidOutline',\n circle = 'circle',\n overlap = 'overlap',\n overlapLabel = 'overlapLabel',\n pictogram = 'pictogram'\n}\n","// FIXME: token 兼容策略,照目前的设计不应该硬编码。\n// 后续需要二选一:\n// - 主题模块指定唯一一套支持的 token(可以保留这段硬编码)\n// - 在默认主题中做声明式的兼容(需要删除这段硬编码,并在 IColorKey 中支持新属性)\n\nimport type { BuiltinColorPalette } from './builtin';\nimport type { ColorSchemeItem, IColorSchemeStruct } from './interface';\n\nexport const newTokenToLegacyToken: Record = {\n primaryFontColor: 'titleFontColor',\n tertiaryFontColor: 'labelFontColor',\n axisLabelFontColor: 'axisFontColor',\n axisMarkerFontColor: 'labelReverseFontColor',\n dataZoomHandleStrokeColor: 'dataZoomHandlerStrokeColor',\n sliderHandleColor: 'dataZoomHandlerFillColor',\n sliderRailColor: 'dataZoomBackgroundColor',\n sliderTrackColor: 'dataZoomSelectedColor',\n playerControllerColor: 'dataZoomSelectedColor',\n popupBackgroundColor: 'tooltipBackgroundColor',\n hoverBackgroundColor: 'axisGridColor'\n // 以下两个新 token 不做兼容策略,因为其对应的 legacy token 仍在使用\n // axisMarkerBackgroundColor: 'primaryFontColor',\n // markLineStrokeColor: 'primaryFontColor',\n};\n\nexport const legacyTokenToNewToken: Record = {\n titleFontColor: 'primaryFontColor',\n labelFontColor: 'tertiaryFontColor',\n axisFontColor: 'axisLabelFontColor',\n labelReverseFontColor: 'axisMarkerFontColor',\n dataZoomHandlerStrokeColor: 'dataZoomHandleStrokeColor',\n dataZoomHandlerFillColor: 'sliderHandleColor',\n dataZoomBackgroundColor: 'sliderRailColor',\n dataZoomSelectedColor: 'sliderTrackColor',\n tooltipBackgroundColor: 'popupBackgroundColor'\n};\n\nexport function getUpgradedTokenValue(palette: IColorSchemeStruct['palette'], key: string): ColorSchemeItem {\n // 情况一:用户定义了包含旧 token 的新色板\n const legacyKey = newTokenToLegacyToken[key];\n if (legacyKey && palette[legacyKey]) {\n return palette[legacyKey];\n }\n // 情况二:默认情况,用户尝试取色(大部分情况下在此退出)\n if (palette[key]) {\n return palette[key];\n }\n // 情况三:用户没有取到颜色,判断用户是否在尝试用旧 token 取色\n const newKey = legacyTokenToNewToken[key];\n if (newKey) {\n return palette[newKey];\n }\n // 情况四:真的取不到颜色\n return undefined;\n}\n","import { isArray, isFunction, isObject, isString, isValid, Color, isNil, rgbToHsl, hslToRgb } from '@visactor/vutils';\nimport type {\n ColorScheme,\n ColorSchemeItem,\n IColorKey,\n IColorSchemeStruct,\n IProgressiveDataSchemeCase,\n IThemeColorScheme,\n ProgressiveDataScheme\n} from './interface';\nimport type { ISeriesSpec } from '../../typings';\nimport { getDirectionFromSeriesSpec } from '../../series/util/spec';\nimport { getUpgradedTokenValue } from './legacy';\n\n/**\n * 从色板中获取数据色板(在此步骤中替换语义色值)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function getDataScheme(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): Array | ProgressiveDataScheme {\n if (!colorScheme) {\n return [];\n }\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme || isArray(scheme)) {\n // 不带语义色板,直接输出\n return (scheme as Array | ProgressiveDataScheme) ?? [];\n } else if (isObject(scheme)) {\n // 带语义色板,转换颜色后输出\n const { dataScheme } = scheme as IColorSchemeStruct;\n if (!dataScheme) {\n return [];\n }\n // 渐进式色板的情况\n if (isProgressiveDataColorScheme(dataScheme)) {\n return dataScheme.map(item => ({\n ...item,\n scheme: item.scheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid)\n }));\n }\n // 普通色板的情况\n return dataScheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid);\n }\n return [];\n}\n\n/**\n * 计算最终数据色板(在此步骤中获得渐进式色板的最终色板)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function computeActualDataScheme(\n dataScheme: Array | ProgressiveDataScheme,\n colorDomain: any[]\n): Array {\n if (isProgressiveDataColorScheme(dataScheme)) {\n return (\n dataScheme.find(item => {\n if (isValid(item.isAvailable)) {\n if (isFunction(item.isAvailable)) {\n return item.isAvailable(colorDomain);\n }\n return !!item.isAvailable;\n } else if (isValid(item.maxDomainLength)) {\n return colorDomain?.length <= item.maxDomainLength;\n }\n return true;\n })?.scheme ?? dataScheme[dataScheme.length - 1].scheme\n );\n }\n return dataScheme;\n}\n\n/**\n * 根据色板和色值索引生成颜色\n * @param colorScheme\n * @param colorKey\n * @param seriesType\n * @returns\n */\nexport function queryColorFromColorScheme(\n colorScheme: IThemeColorScheme,\n colorKey: IColorKey,\n seriesSpec?: ISeriesSpec\n): ColorSchemeItem | undefined {\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme) {\n return undefined;\n }\n let color;\n const { palette } = scheme as IColorSchemeStruct;\n if (isObject(palette)) {\n color = getUpgradedTokenValue(palette, colorKey.key) ?? colorKey.default;\n }\n if (!color) {\n return undefined;\n }\n if ((isNil(colorKey.a) && isNil(colorKey.l)) || !isString(color)) {\n return color;\n }\n let c = new Color(color);\n if (isValid(colorKey.l)) {\n const { r, g, b } = c.color;\n const { h, s } = rgbToHsl(r, g, b);\n const rgb = hslToRgb(h, s, colorKey.l);\n const newColor = new Color(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`);\n newColor.setOpacity(c.color.opacity);\n c = newColor;\n }\n if (isValid(colorKey.a)) {\n c.setOpacity(colorKey.a);\n }\n return c.toRGBA();\n}\n\n/** 查询语义化颜色 */\nexport const getActualColor = (value: any, colorScheme?: IThemeColorScheme, seriesSpec?: ISeriesSpec) => {\n if (colorScheme && isColorKey(value)) {\n const color = queryColorFromColorScheme(colorScheme, value, seriesSpec);\n if (color) {\n return color;\n }\n }\n return value;\n};\n\nexport function isColorKey(obj: any): obj is IColorKey {\n return obj && (obj as IColorKey).type === 'palette' && !!(obj as IColorKey).key;\n}\n\nexport function isProgressiveDataColorScheme(obj: any): obj is ProgressiveDataScheme {\n if (!isArray(obj) || obj.length === 0) {\n return false;\n }\n return obj.every(item => {\n return isValid((item as IProgressiveDataSchemeCase).scheme);\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToStandardStruct(colorScheme: ColorScheme): IColorSchemeStruct {\n if (isArray(colorScheme)) {\n return {\n dataScheme: colorScheme\n };\n }\n return colorScheme;\n}\n\nexport function getColorSchemeBySeries(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): ColorScheme | undefined {\n const { type: seriesType } = seriesSpec ?? {};\n let scheme: ColorScheme | undefined;\n if (!seriesSpec || isNil(seriesType)) {\n scheme = colorScheme?.default;\n } else {\n const direction = getDirectionFromSeriesSpec(seriesSpec);\n scheme = colorScheme?.[`${seriesType}_${direction}`] ?? colorScheme?.[seriesType] ?? colorScheme?.default;\n }\n return scheme;\n}\n","import { baseMerge, isArray, isObject } from '@visactor/vutils';\n/* 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n * 以及对一些特殊情况的处理,比如对数组类型 padding 和对象类型的 padding 的 merge\n */\nexport function mergeSpec(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true, true);\n }\n return target;\n}\n\nexport function mergeSpecWithFilter(\n target: any,\n filter: string | { type: string; index: number },\n spec: any,\n forceMerge: boolean\n) {\n Object.keys(target).forEach(k => {\n if (isObject(filter)) {\n if (filter.type === k) {\n if (isArray(target[k])) {\n if (target[k].length >= filter.index) {\n target[k][filter.index] = forceMerge ? mergeSpec({}, target[k][filter.index], spec) : spec;\n }\n } else {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n } else {\n // filter === user id\n if (isArray(target[k])) {\n const index = target[k].findIndex((_s: { id: string | number }) => _s.id === filter);\n if (index >= 0) {\n target[k][index] = forceMerge ? mergeSpec({}, target[k][index], spec) : spec;\n }\n } else if (target.id === filter) {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n });\n}\n","import type { Transform } from '.';\n\nexport interface IFilterOptions {\n callback?: (item: any) => boolean;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const filter: Transform = (data: Array, options?: IFilterOptions) => {\n const { callback } = options;\n if (callback) {\n data = data.filter(callback);\n }\n return data;\n};\n","import type { Transform } from '.';\n\nexport interface IFoldOptions {\n fields: string[]; // 展开字段集\n key: string; // key字段\n value: string; // value字段\n retains?: string[]; // 保留字段集,默认为除 fields 以外的所有字段\n}\n\n/**\n *\n * @param data 数据展开\n * @param options\n * @returns\n */\nexport const fold: Transform = (data: Array, options?: IFoldOptions) => {\n const { fields, key, value, retains } = options;\n const results: any[] = [];\n for (let i = 0; i < data.length; i++) {\n fields.forEach(field => {\n const item = {};\n item[key] = field;\n item[value] = data[i][field];\n if (retains) {\n retains.forEach(retain => {\n item[retain] = data[i][retain];\n });\n } else {\n for (const prop in data[i]) {\n if (fields.indexOf(prop) === -1) {\n item[prop] = data[i][prop];\n }\n }\n }\n\n results.push(item);\n });\n }\n return results;\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","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { cloneDeep, isObject } from '@visactor/vutils';\n\n/**\n * 深拷贝\n * @param target 目标对象\n * @param sources 来源对象\n * @returns\n */\nexport const mergeDeepImmer = function (target: Object, ...sources: Array) {\n return mergeOption(cloneDeep(target), ...sources);\n};\n\nfunction _mergeOptionDeep(target: Object, source: Object, key: string) {\n const sourceValue = source[key];\n if (sourceValue === undefined) {\n target[key] = null; // undefined 转为 null 并且也覆盖\n } else if (isObject(sourceValue)) {\n if (!isObject(target[key])) {\n target[key] = {};\n }\n for (const _key in sourceValue) {\n _mergeOptionDeep(target[key], sourceValue, _key);\n }\n } else {\n // 其余类型全部替换\n target[key] = sourceValue;\n }\n}\n\nfunction _mergeOptionBase(target: Object, source: Object) {\n if (!isObject(source)) {\n return;\n }\n if (target === source) {\n return;\n }\n // keysIn\n for (const key in source) {\n _mergeOptionDeep(target, source, key);\n }\n}\n\nfunction mergeOption(target: Object, ...sources: Array): any {\n if (!target) {\n target = {};\n }\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n _mergeOptionBase(target, source);\n }\n return target;\n}\n","import { dsvFormat, csvParse, tsvParse } from 'd3-dsv';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../constants';\nimport type { DataView } from '../data-view';\nimport { mergeDeepImmer } from '../utils/js';\nimport type { Parser } from '.';\n\nexport interface IDsvParserOptions {\n delimiter?: string; // delimiter 必须是一个单字符\n}\n\nconst DEFAULT_DSV_PARSER_OPTIONS = {\n delimiter: ',' // delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV,当delimiter='\\t'时,被处理文件就是TSV。\n};\n\n/**\n * 根据指定的 delimiter 构造一个新的 DSV(支持范式的分隔符分隔值文件,delimiter-separated values)解析以及格式化。\n * @param data\n * @param options\n * @returns\n */\nexport const dsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n\n const mergeOptions = mergeDeepImmer(DEFAULT_DSV_PARSER_OPTIONS, options) as IDsvParserOptions;\n\n const { delimiter } = mergeOptions;\n if (!isString(delimiter)) {\n throw new TypeError('Invalid delimiter: must be a string!');\n }\n return dsvFormat(delimiter).parse(data);\n};\n\n/**\n * 解析指定的 CSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const csvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return csvParse(data);\n};\n\n/**\n * 解析指定的 TSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const tsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return tsvParse(data);\n};\n","import type {\n IChartConstructor,\n IChartOption,\n IChart,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../chart/interface';\nimport type { ISeriesConstructor, ISeriesMarkInfo, ISeriesOption, SeriesMarkNameEnum } from '../series/interface';\nimport type { IComponentConstructor } from '../component/interface';\nimport type { IMarkConstructor, IMarkOption, MarkConstructor } from '../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { IRegion, IRegionConstructor } from '../region/interface';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelOption } from '../model/interface';\nimport type { Transform, Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { fields, filter, fold, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { ILayoutConstructor } from '../layout/interface';\nimport type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { IChartPluginConstructor } from '../plugin/chart/interface';\nimport type { IComponentPluginConstructor } from '../plugin/components/interface';\n\nexport class Factory {\n private static _charts: { [key: string]: IChartConstructor } = {};\n private static _series: { [key: string]: ISeriesConstructor } = {};\n private static _components: { [key: string]: { cmp: IComponentConstructor; alwaysCheck?: boolean } } = {};\n private static _marks: { [key: string]: MarkConstructor } = {};\n private static _regions: { [key: string]: IRegionConstructor } = {};\n private static _animations: { [key: string]: (params?: any, preset?: any) => MarkAnimationSpec } = {};\n private static _implements: { [key: string]: (...args: any) => void } = {};\n private static _chartPlugin: { [key: string]: IChartPluginConstructor } = {};\n private static _componentPlugin: { [key: string]: IComponentPluginConstructor } = {};\n private static _formatter: (\n text: string | number | string[] | number[],\n datum: any,\n formatter: string | string[]\n ) => any;\n\n static transforms: { [key: string]: Transform } = {\n // buildIn transforms\n fields: fields,\n filter: filter,\n fold: fold\n };\n static dataParser: { [key: string]: Parser } = {\n // buildIn parser\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser\n };\n static _layout: { [key: string]: ILayoutConstructor } = {};\n\n static registerChart(key: string, chart: IChartConstructor) {\n Factory._charts[key] = chart;\n }\n static registerSeries(key: string, series: ISeriesConstructor) {\n Factory._series[key] = series;\n }\n static registerComponent(key: string, cmp: IComponentConstructor, alwaysCheck?: boolean) {\n Factory._components[key] = { cmp, alwaysCheck };\n }\n static registerMark(key: string, mark: MarkConstructor) {\n Factory._marks[key] = mark;\n }\n static registerRegion(key: string, region: IRegionConstructor) {\n Factory._regions[key] = region;\n }\n static registerTransform(key: string, transform: Transform) {\n Factory.transforms[key] = transform;\n }\n static registerLayout(key: string, layout: ILayoutConstructor) {\n Factory._layout[key] = layout;\n }\n static registerAnimation(key: string, animation: (params?: any, preset?: any) => MarkAnimationSpec) {\n Factory._animations[key] = animation;\n }\n static registerImplement(key: string, implement: (...args: any) => void) {\n Factory._implements[key] = implement;\n }\n static registerChartPlugin(key: string, plugin: IChartPluginConstructor) {\n Factory._chartPlugin[key] = plugin;\n }\n static registerComponentPlugin(key: string, plugin: IComponentPluginConstructor) {\n Factory._componentPlugin[key] = plugin;\n }\n\n static createChart(chartType: string, spec: any, options: IChartOption): IChart | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n return new ChartConstructor(spec, options);\n }\n\n static createChartSpecTransformer(\n chartType: string,\n option: IChartSpecTransformerOption\n ): IChartSpecTransformer | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n const ChartSpecTransformerConstructor = ChartConstructor.transformerConstructor;\n return new ChartSpecTransformerConstructor({\n seriesType: ChartConstructor.seriesType,\n ...option\n });\n }\n\n static createRegion(regionType: string, spec: any, options: IModelOption): IRegion | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n return new RegionConstructor(spec, options);\n }\n\n static createRegionSpecTransformer(\n regionType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n const RegionSpecTransformerConstructor = RegionConstructor.transformerConstructor;\n return new RegionSpecTransformerConstructor(options);\n }\n\n static createSeries(seriesType: string, spec: any, options: ISeriesOption) {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n return new SeriesConstructor(spec, options);\n }\n\n static createSeriesSpecTransformer(\n seriesType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n const SeriesSpecTransformerConstructor = SeriesConstructor.transformerConstructor;\n return new SeriesSpecTransformerConstructor(options);\n }\n\n static createMark(markType: string, name: string, options: IMarkOption) {\n if (!Factory._marks[markType]) {\n return null;\n }\n const MarkConstructor = Factory._marks[markType] as IMarkConstructor;\n const markInstance = new MarkConstructor(name, options);\n if (markInstance.type === MarkTypeEnum.group) {\n // group 目前关闭交互,不参与事件拾取\n markInstance.setMarkConfig({ interactive: false });\n }\n return markInstance;\n }\n\n static getComponents() {\n return Object.values(Factory._components);\n }\n\n static getComponentInKey(name: string) {\n return Factory._components[name].cmp;\n }\n\n static getLayout() {\n return Object.values(Factory._layout);\n }\n\n static getLayoutInKey(name: string) {\n return Factory._layout[name];\n }\n\n static getSeries() {\n return Object.values(Factory._series);\n }\n\n static getSeriesInType(type: string) {\n return Factory._series[type];\n }\n\n static getRegionInType(type: string) {\n return Factory._regions[type];\n }\n\n static getAnimationInKey(key: string) {\n return Factory._animations[key];\n }\n\n static getImplementInKey(key: string) {\n return Factory._implements[key];\n }\n\n static getSeriesMarkMap(seriesType: string): Partial> {\n if (!Factory._series[seriesType]) {\n return {};\n }\n return Factory._series[seriesType].mark;\n }\n\n static getChartPlugins() {\n return Object.values(Factory._chartPlugin);\n }\n\n static getComponentPlugins() {\n return Object.values(Factory._componentPlugin);\n }\n\n static getComponentPluginInType(type: string) {\n return Factory._componentPlugin[type];\n }\n\n static registerFormatter(func: typeof Factory['_formatter']) {\n this._formatter = func;\n }\n\n static getFormatter() {\n return this._formatter;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array } from '@visactor/vutils';\nimport type { IGlobalMarkThemeByName, IGlobalMarkThemeByType, ITheme } from '../../theme';\nimport { transformColorSchemeToStandardStruct } from '../../theme/color-scheme/util';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo } from '../../series/interface/common';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Factory } from '../../core/factory';\n\nexport function mergeTheme(target: Maybe, ...sources: Maybe[]): Maybe {\n return mergeSpec(transformThemeToMerge(target), ...sources.map(transformThemeToMerge));\n}\n\nfunction transformThemeToMerge(theme?: Maybe): Maybe {\n if (!theme) {\n return theme;\n }\n\n // 将色板转化为标准形式\n const colorScheme = transformColorSchemeToMerge(theme.colorScheme);\n\n return Object.assign({}, theme, {\n colorScheme,\n token: theme.token ?? {},\n series: Object.assign({}, theme.series)\n } as Partial);\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToMerge(colorScheme?: Maybe): Maybe {\n if (colorScheme) {\n colorScheme = Object.keys(colorScheme).reduce((scheme, key) => {\n const value = colorScheme[key];\n scheme[key] = transformColorSchemeToStandardStruct(value);\n return scheme;\n }, {} as IThemeColorScheme);\n }\n return colorScheme;\n}\n\n/** 将全局 mark 主题 merge 进系列主题 */\nexport function transformSeriesThemeToMerge(\n seriesTheme: any,\n seriesType: string,\n markByType: IGlobalMarkThemeByType,\n markByName: IGlobalMarkThemeByName\n): any {\n const seriesMarkInfoMap = Factory.getSeriesMarkMap(seriesType);\n\n if (!seriesMarkInfoMap) {\n return seriesTheme;\n }\n const newTheme: any = {};\n Object.values(seriesMarkInfoMap).forEach(({ type, name }) => {\n newTheme[name] = mergeSpec({}, markByType?.[array(type)[0]], markByName?.[name], seriesTheme?.[name]);\n });\n return {\n ...seriesTheme,\n ...newTheme\n };\n}\n","import type { DataSchemeItem, ProgressiveDataScheme } from '../interface';\n\n/** 标准色板 */\nexport const dataScheme: ProgressiveDataScheme = [\n // 第一档颜色(数据项 <= 10)\n {\n maxDomainLength: 10,\n scheme: [\n '#1664FF',\n '#1AC6FF',\n '#FF8A00',\n '#3CC780',\n '#7442D4',\n '#FFC400',\n '#304D77',\n '#B48DEB',\n '#009488',\n '#FF7DDA'\n ]\n },\n // 第二档颜色(数据项 > 10)\n {\n scheme: [\n '#1664FF',\n '#B2CFFF',\n '#1AC6FF',\n '#94EFFF',\n '#FF8A00',\n '#FFCE7A',\n '#3CC780',\n '#B9EDCD',\n '#7442D4',\n '#DDC5FA',\n '#FFC400',\n '#FAE878',\n '#304D77',\n '#8B959E',\n '#B48DEB',\n '#EFE3FF',\n '#009488',\n '#59BAA8',\n '#FF7DDA',\n '#FFCFEE'\n ]\n }\n];\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#ffffff',\n /** 图表边框色 */\n borderColor: '#e3e5e8',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(33,37,44,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#f1f2f5',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#f1f3f4',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#ffffff',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#0040ff',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#ffffff',\n\n /** 主要字色 */\n primaryFontColor: '#21252c',\n /** 次要字色 */\n secondaryFontColor: '#606773',\n /** 第三字色 */\n tertiaryFontColor: '#89909d',\n /** 轴标签字色 */\n axisLabelFontColor: '#89909d',\n /** 禁用字色 */\n disableFontColor: '#bcc1cb',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#ffffff',\n\n /** 轴网格线颜色 */\n axisGridColor: '#f1f2f5',\n /** 轴线颜色 */\n axisDomainColor: '#d9dde4',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#aeb5be',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#c9ced8',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#0040ff',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(0,0,0,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#21252c',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#f1f2f5',\n /** 标注线颜色 */\n markLineStrokeColor: '#606773',\n\n /** 危险色 */\n dangerColor: '#e33232',\n /** 警告色 */\n warningColor: '#ffc528',\n /** 成功色 */\n successColor: '#07a35a',\n /** 信息色 */\n infoColor: '#3073f2',\n\n /** 图例翻页器文字颜色 */\n discreteLegendPagerTextColor: 'rgb(51, 51, 51)',\n /** 图例翻页器按钮颜色 */\n discreteLegendPagerHandlerColor: 'rgb(47, 69, 84)',\n /** 图例翻页器按钮颜色(disable 态) */\n discreteLegendPagerHandlerDisableColor: 'rgb(170, 170, 170)',\n\n /** 占位圆颜色 */\n emptyCircleColor: '#e3e5e8',\n\n /** 线性进度条颜色 */\n linearProgressTrackColor: '#E7EBED'\n } as BuiltinColorPalette\n }\n};\n","import type { IAreaSeriesTheme } from '../../../../series/area/interface';\n\nexport const area: IAreaSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n },\n seriesMark: 'area'\n};\n","import type { IBarSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar: IBarSeriesTheme = {\n label: {\n visible: false,\n position: 'outside',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IBar3dSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar3d: IBar3dSeriesTheme = {\n bar3d: {\n style: {\n length: 3\n }\n },\n label: {\n visible: false,\n style: {\n offset: 12,\n position: 'outside'\n }\n }\n};\n","import type { ICircularProgressSeriesTheme } from '../../../../series/progress/circular/interface';\n\nexport const circularProgress: ICircularProgressSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fillOpacity: 0.2\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import type { IDotSeriesTheme } from '../../../../series/dot/interface';\n\nexport const dot: IDotSeriesTheme = {\n dot: {\n style: {\n size: 10,\n fillOpacity: 1\n }\n },\n symbol: {\n style: {\n size: 10\n }\n },\n title: {\n style: {\n textAlign: 'left',\n textBaseline: 'middle',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n },\n subTitle: {\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IFunnel3dSeriesTheme, IFunnelSeriesTheme } from '../../../../series/funnel/interface';\n\nconst getFunnelTheme = (is3d?: boolean): IFunnelSeriesTheme | IFunnel3dSeriesTheme => {\n const res: IFunnelSeriesTheme | IFunnel3dSeriesTheme = {\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n lineWidth: 2\n }\n },\n outerLabel: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'secondaryFontColor' }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'axisDomainColor' }\n }\n }\n },\n transformLabel: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'secondaryFontColor' },\n textBaseline: 'middle'\n }\n }\n };\n\n res[is3d ? 'transform3d' : 'transform'] = {\n style: {\n fill: { type: 'palette', key: 'axisGridColor' }\n }\n };\n\n return res;\n};\n\nexport const funnel: IFunnelSeriesTheme = getFunnelTheme();\nexport const funnel3d: IFunnel3dSeriesTheme = getFunnelTheme(true);\n","import type { IGaugePointerSeriesTheme } from '../../../../series/gauge';\n\nconst pointerPath =\n // eslint-disable-next-line max-len\n 'M-0.020059 -0.978425 C-0.018029 -0.9888053 -0.013378 -1 0 -1 C0.01342 -1 0.01812 -0.989146 0.0201 -0.978425 C0.02161 -0.9702819 0.0692 -0.459505 0.09486 -0.184807 C0.10298 -0.097849 0.1089 -0.034548 0.11047 -0.018339 C0.11698 0.04908 0.07373 0.11111 0.00002 0.11111 C-0.07369 0.11111 -0.117184 0.04991 -0.110423 -0.018339 C-0.103662 -0.086591 -0.022089 -0.9680447 -0.020059 -0.978425Z';\nconst circlePath =\n // eslint-disable-next-line max-len\n 'M1 0 C1 0.55228 0.55228 1 0 1 C-0.552285 1 -1 0.55228 -1 0 C-1 -0.552285 -0.552285 -1 0 -1 C0.55228 -1 1 -0.552285 1 0Z';\n\nexport const gaugePointer: IGaugePointerSeriesTheme = {\n pointer: {\n type: 'path',\n width: 0.4,\n height: 0.4,\n style: {\n path: pointerPath\n }\n },\n pin: {\n width: 0.025,\n height: 0.025,\n style: {\n path: circlePath,\n fill: '#888'\n }\n },\n pinBackground: {\n width: 0.06,\n height: 0.06,\n style: {\n path: circlePath,\n fill: '#ddd'\n }\n }\n};\n","export const PREFIX = '__VCHART';\n\nexport const DEFAULT_CHART_WIDTH = 500;\nexport const DEFAULT_CHART_HEIGHT = 500;\n","import { PREFIX } from './base';\n\nexport const ARC_TRANSFORM_VALUE = `${PREFIX}_ARC_TRANSFORM_VALUE`;\nexport const ARC_RATIO = `${PREFIX}_ARC_RATIO`;\nexport const ARC_START_ANGLE = `${PREFIX}_ARC_START_ANGLE`;\nexport const ARC_END_ANGLE = `${PREFIX}_ARC_END_ANGLE`;\nexport const ARC_K = `${PREFIX}_ARC_K`;\nexport const ARC_MIDDLE_ANGLE = `${PREFIX}_ARC_MIDDLE_ANGLE`;\nexport const ARC_QUADRANT = `${PREFIX}_ARC_QUADRANT`;\nexport const ARC_RADIAN = `${PREFIX}_ARC_RADIAN`;\n\nexport const POLAR_START_RADIAN = -Math.PI / 2;\nexport const POLAR_END_RADIAN = (3 * Math.PI) / 2;\n\nexport const POLAR_START_ANGLE = -90;\nexport const POLAR_END_ANGLE = 270;\n\nexport const POLAR_DEFAULT_RADIUS = 0.6;\n","import type { ISeriesTheme } from '../../../../series/interface';\nimport { area } from './area';\nimport { bar } from './bar';\nimport { bar3d } from './bar3d';\nimport { circularProgress } from './circular-progress';\nimport { dot } from './dot';\nimport { funnel, funnel3d } from './funnel';\nimport { gauge } from './gauge';\nimport { gaugePointer } from './gauge-pointer';\nimport { line } from './line';\nimport { linearProgress } from './linear-progress';\nimport { link } from './link';\nimport { map } from './map';\nimport { pie } from './pie';\nimport { pie3d } from './pie3d';\nimport { radar } from './radar';\nimport { scatter } from './scatter';\nimport { waterfall } from './waterfall';\nimport { wordCloud, wordCloud3d } from './word-cloud';\nimport { treemap } from './treemap';\nimport { sunburst } from './sunburst';\nimport { rangeColumn } from './rangeColumn';\nimport { circlePacking } from './circle-packing';\nimport { heatmap } from './heatmap';\nimport { sankey } from './sankey';\nimport { rose } from './rose';\nimport { boxPlot } from './box-plot';\nimport { correlation } from './correlation';\nimport { liquid } from './liquid';\nimport { venn } from './venn';\nimport { mosaic } from './mosaic';\n\nexport const series: ISeriesTheme = {\n scatter,\n line,\n area,\n bar,\n bar3d,\n pie,\n pie3d,\n map,\n radar,\n dot,\n link,\n wordCloud,\n wordCloud3d,\n funnel,\n funnel3d,\n linearProgress,\n circularProgress,\n waterfall,\n gauge,\n gaugePointer,\n treemap,\n sunburst,\n rangeColumn,\n circlePacking,\n heatmap,\n sankey,\n rose,\n boxPlot,\n correlation,\n liquid,\n venn,\n mosaic\n};\n","import type { IScatterSeriesTheme } from '../../../../series/scatter/interface';\n\nexport const scatter: IScatterSeriesTheme = {\n point: {\n style: {\n size: 8,\n symbolType: 'circle',\n lineWidth: 0,\n fillOpacity: 0.8\n }\n },\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { ILineSeriesTheme } from '../../../../series/line/interface';\n\nexport const line: ILineSeriesTheme = {\n label: {\n visible: false,\n position: 'top',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { IPieSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie: IPieSeriesTheme = {\n outerRadius: 0.6,\n pie: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n interactive: true,\n position: 'outside',\n style: {\n fontWeight: 'normal',\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1\n }\n },\n innerLabel: {\n style: {\n lineWidth: 2\n }\n },\n emptyCircle: {\n style: {\n fill: { type: 'palette', key: 'emptyCircleColor' },\n fillOpacity: 1\n }\n }\n};\n","import type { IPie3dSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie3d: IPie3dSeriesTheme = {\n outerRadius: 0.6,\n pie3d: {\n style: {\n height: 10,\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n interactive: true,\n position: 'outside'\n }\n};\n","import type { IMapSeriesTheme } from '../../../../series/map/interface';\n\nexport const map: IMapSeriesTheme = {\n defaultFillColor: '#f3f3f3',\n area: {\n style: {\n lineWidth: 0.5,\n strokeOpacity: 1,\n stroke: 'black',\n fillOpacity: 1\n }\n },\n label: {\n interactive: false,\n style: {\n fontSize: { type: 'token', key: 'l6FontSize' },\n lineHeight: { type: 'token', key: 'l6LineHeight' },\n textBaseline: 'middle',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IRadarSeriesTheme } from '../../../../series/radar/interface';\n\nexport const radar: IRadarSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { ILinkSeriesTheme } from '../../../../series/link/interface';\n\nexport const link: ILinkSeriesTheme = {\n arrow: {\n style: {\n size: 10\n }\n }\n};\n","import type { IWordCloudSeriesTheme, IWordCloud3dSeriesTheme } from '../../../../series/word-cloud/interface';\n\nconst getWordCloudTheme = (): IWordCloudSeriesTheme | IWordCloud3dSeriesTheme => {\n return {\n word: {\n padding: 1,\n style: {\n textAlign: 'center',\n textBaseline: 'alphabetic'\n }\n }\n };\n};\n\nexport const wordCloud: IWordCloudSeriesTheme = getWordCloudTheme();\nexport const wordCloud3d: IWordCloud3dSeriesTheme = getWordCloudTheme();\n","import type { ILinearProgressSeriesTheme } from '../../../../series/progress/linear/interface';\n\nexport const linearProgress: ILinearProgressSeriesTheme = {\n bandWidth: 30,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'linearProgressTrackColor' },\n fillOpacity: 1\n }\n }\n};\n","import type { IWaterfallSeriesTheme } from '../../../../series/waterfall/interface';\n\nexport const waterfall: IWaterfallSeriesTheme = {\n seriesFieldName: {\n total: 'total',\n increase: 'increase',\n decrease: 'decrease'\n },\n leaderLine: {\n style: {\n stroke: 'black',\n lineWidth: 1,\n lineDash: [4, 4]\n }\n },\n stackLabel: {\n visible: true,\n offset: 12,\n position: 'withChange',\n style: {\n fill: 'black',\n fontSize: { type: 'token', key: 'l4FontSize' }\n }\n },\n label: {\n visible: false,\n offset: 12,\n position: 'inside',\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { IGaugeSeriesTheme } from '../../../../series/gauge';\n\nexport const gauge: IGaugeSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n padAngle: 1.146,\n segment: {\n style: {\n fillOpacity: 1\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import type { ITreemapSeriesTheme } from '../../../../series/treemap/interface';\n\nexport const treemap: ITreemapSeriesTheme = {\n gapWidth: 1,\n nodePadding: [5],\n nonLeaf: {\n visible: false,\n style: {\n fillOpacity: 0.5\n }\n },\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n },\n nonLeafLabel: {\n padding: 24,\n style: {\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n textBaseline: 'middle',\n textAlign: 'center'\n }\n }\n};\n","import { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../../../constant/polar';\nimport type { ISunburstSeriesTheme } from '../../../../series/sunburst/interface';\n\nexport const sunburst: ISunburstSeriesTheme = {\n innerRadius: 0,\n outerRadius: 1,\n startAngle: POLAR_START_ANGLE,\n endAngle: POLAR_END_ANGLE,\n gap: 0,\n labelLayout: {\n align: 'center',\n offset: 0,\n rotate: 'radial'\n },\n sunburst: {\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1,\n cursor: 'pointer'\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IRangeColumnSeriesTheme } from '../../../../series/range-column/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { minMaxPositionEnum } from '../../../../series/range-column/interface';\n\nexport const rangeColumn: IRangeColumnSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'inside',\n style: {\n lineWidth: 2,\n fill: { type: 'palette', key: 'axisMarkerFontColor' }\n },\n minLabel: {\n position: minMaxPositionEnum.end\n },\n maxLabel: {\n position: minMaxPositionEnum.start\n }\n }\n};\n","import type { ICirclePackingSeriesTheme } from '../../../../series/circle-packing/interface';\n\nexport const circlePacking: ICirclePackingSeriesTheme = {\n layoutPadding: 5,\n circlePacking: {\n visible: true,\n style: {\n cursor: 'pointer',\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IHeatmapSeriesTheme } from '../../../../series/heatmap/interface';\n\nexport const heatmap: IHeatmapSeriesTheme = {\n cell: {\n style: {\n shape: 'square',\n fillOpacity: 1\n }\n },\n cellBackground: {\n visible: false\n }\n};\n","import type { ISankeySeriesTheme } from '../../../../series/sankey/interface';\n\nexport const sankey: ISankeySeriesTheme = {\n link: {\n style: {\n // lineWidth: 0,\n fillOpacity: 0.15,\n round: true\n }\n }\n};\n","import type { IRoseSeriesTheme } from '../../../../series/rose/interface';\n\nexport const rose: IRoseSeriesTheme = {\n rose: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' },\n textAlign: 'center',\n textBaseline: 'middle'\n }\n }\n};\n","import type { IBoxPlotSeriesTheme } from '../../../../series/box-plot/interface';\n\nexport const boxPlot: IBoxPlotSeriesTheme = {\n boxPlot: {\n style: {\n lineWidth: 1\n }\n },\n label: {\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { ICorrelationSeriesTheme } from '../../../../series/correlation/interface';\n\nexport const correlation: ICorrelationSeriesTheme = {\n centerLabel: {\n visible: true,\n position: 'center',\n style: {\n fill: '#fff',\n text: ''\n }\n },\n label: {\n visible: true,\n position: 'bottom',\n style: {\n fill: '#000'\n }\n }\n};\n","import type { ILiquidSeriesTheme } from '../../../../series/liquid/interface';\n\nexport const liquid: ILiquidSeriesTheme = {\n outlinePadding: 10,\n liquidBackground: {\n style: {\n lineWidth: 0,\n fillOpacity: 0.2\n }\n },\n liquidOutline: {\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { IVennSeriesTheme } from '../../../../series/venn/interface';\n\nexport const venn: IVennSeriesTheme = {\n circle: {\n style: {\n opacity: 0.8\n },\n state: {\n hover: {\n opacity: 1\n }\n }\n },\n overlap: {\n style: {\n opacity: 0.8\n },\n state: {\n hover: {\n opacity: 1,\n stroke: 'white',\n lineWidth: 2\n }\n }\n },\n label: {\n visible: true,\n style: {\n fill: 'white',\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' }\n }\n },\n overlapLabel: {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IMosaicSeriesTheme } from '../../../../series/mosaic/interface';\n\nexport const mosaic: IMosaicSeriesTheme = {\n label: {\n visible: false,\n position: 'center',\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n\n bar: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IGlobalMarkThemeByName, IGlobalMarkThemeByType } from '../../interface';\n\nexport const markByType: IGlobalMarkThemeByType = {\n text: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport const markByName: IGlobalMarkThemeByName = {\n label: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fillOpacity: 1,\n lineJoin: 'bevel'\n }\n },\n area: {\n style: {\n fillOpacity: 0.2\n }\n },\n line: {\n style: {\n lineWidth: 2,\n lineCap: 'round',\n lineJoin: 'round'\n }\n },\n point: {\n style: {\n size: 8,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 1,\n fillOpacity: 1\n }\n },\n word: {\n style: {\n fontWeight: null,\n fontSize: null\n }\n },\n fillingWord: {\n style: {\n fontWeight: null,\n fontSize: null\n }\n },\n sunburst: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n circlePacking: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n funnel3d: {\n style: {\n stroke: false\n }\n },\n barBackground: {\n visible: false,\n style: {\n fill: { type: 'palette', key: 'primaryFontColor', a: 0.06 },\n stroke: 'transparent'\n }\n }\n};\n","import type { IBandAxisTheme } from '../../../../../component/axis';\n\nexport const axisBand: IBandAxisTheme = {\n domainLine: {\n visible: true\n },\n grid: {\n visible: false\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: true\n },\n subTick: {\n visible: false\n }\n};\n","import type { ICartesianAxisCommonTheme, ICartesianAxisUnit } from '../../../../../component/axis/cartesian/interface';\n\nconst getUnitTheme = (): ICartesianAxisUnit => {\n return {\n visible: false,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n };\n};\n\nexport const axisX: ICartesianAxisCommonTheme = {\n label: {\n space: 8\n },\n title: {\n space: 8\n },\n maxHeight: '30%',\n unit: getUnitTheme()\n};\n\nexport const axisY: ICartesianAxisCommonTheme = {\n label: {\n space: 12,\n autoLimit: true\n },\n title: {\n space: 12,\n autoRotate: true\n },\n maxWidth: '30%',\n unit: getUnitTheme()\n};\n\nexport const axisZ: ICartesianAxisCommonTheme = {\n ...axisX,\n label: {\n space: 0\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\n\nexport const commonAxis: IAxisCommonTheme = {\n domainLine: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n grid: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: []\n }\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n },\n tick: {\n visible: true,\n inside: false,\n tickSize: 4,\n alignWithLabel: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n tickSize: 2,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 10,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n title: {\n space: 10,\n padding: 0,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n fill: { type: 'palette', key: 'secondaryFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\n\nexport const axisLinear: IAxisCommonTheme = {\n domainLine: {\n visible: false\n },\n grid: {\n visible: true\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: false\n },\n subTick: {\n visible: false\n }\n};\n","import type { IPolarAxisCommonTheme } from '../../../../../component/axis/polar/interface/theme';\n\nexport const axisRadius: IPolarAxisCommonTheme = {\n grid: {\n smooth: true,\n visible: true\n },\n subGrid: {\n smooth: true,\n visible: false\n }\n};\n\nexport const axisAngle: IPolarAxisCommonTheme = {\n grid: {\n visible: true,\n style: {\n lineDash: [6, 6]\n }\n },\n label: {\n space: 5\n }\n};\n","import type { IBrushTheme } from '../../../../component/brush';\n\nexport const brush: IBrushTheme = {\n style: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n lineWidth: 2\n },\n brushMode: 'single',\n brushType: 'rect',\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 0\n};\n","import type { IDataZoomTheme } from '../../../../component/data-zoom';\n\n// eslint-disable-next-line max-len\nconst DataZoomHandlerSymbolType = `M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\nC-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC0.3-1.4,0.3-1.4,0.3-1.4z;`;\n\nconst getHandlerTheme = (): IDataZoomTheme['startHandler'] => {\n return {\n style: {\n symbolType: DataZoomHandlerSymbolType,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n scaleX: 1.2,\n scaleY: 1.2,\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n lineWidth: 1\n }\n };\n};\n\nconst getTextTheme = () => {\n return {\n padding: 8,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n }\n };\n};\n\nconst getBackgroundChartTheme = (visible: boolean) => {\n return {\n area: {\n style: {\n visible,\n stroke: false,\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n }\n },\n line: {\n style: {\n visible,\n stroke: { type: 'palette', key: 'dataZoomChartColor' },\n lineWidth: 1\n }\n }\n };\n};\n\nexport const dataZoom: IDataZoomTheme = {\n padding: [12, 0],\n showDetail: 'auto',\n brushSelect: false,\n middleHandler: {\n visible: false,\n background: {\n size: 6,\n style: {\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n cornerRadius: 2\n }\n },\n icon: {\n style: {\n size: 4,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n symbolType:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n lineWidth: 0.5\n }\n }\n },\n background: {\n size: 20,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' },\n lineWidth: 0\n }\n },\n selectedBackground: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.1,\n outerBorder: {\n stroke: { type: 'palette', key: 'sliderTrackColor' },\n strokeOpacity: 0.2,\n distance: -0.5,\n lineWidth: 1\n }\n }\n },\n selectedBackgroundChart: getBackgroundChartTheme(false),\n startHandler: getHandlerTheme(),\n endHandler: getHandlerTheme(),\n startText: getTextTheme(),\n endText: getTextTheme(),\n backgroundChart: getBackgroundChartTheme(true)\n};\n","import type { IIndicatorTheme } from '../../../../component/indicator/interface';\n\nconst getTextStyle = (fontSizeKey: string, fillKey: string) => {\n return {\n fontSize: { type: 'token', key: fontSizeKey },\n fill: { type: 'palette', key: fillKey },\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n };\n};\n\nexport const indicator: IIndicatorTheme = {\n title: {\n visible: true,\n autoLimit: false,\n autoFit: false,\n style: getTextStyle('l1FontSize', 'primaryFontColor')\n },\n content: {\n visible: true,\n style: getTextStyle('l2FontSize', 'tertiaryFontColor')\n }\n};\n","import type { IContinuousLegendTheme, TextAttribute } from '../../../../../component/legend';\n\nconst getTextTheme = (): TextAttribute => {\n return {\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n },\n space: 6\n };\n};\n\nexport const DEFAULT_CONTINUOUS_LEGEND_THEME: IContinuousLegendTheme = {\n orient: 'right',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n space: 12\n },\n handler: {\n visible: true\n },\n startText: getTextTheme(),\n endText: getTextTheme(),\n handlerText: getTextTheme()\n};\n","import type { IColorLegendTheme, IContinuousLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst getColorLegendTheme = (horizontal?: boolean): IContinuousLegendTheme => {\n const rail: IContinuousLegendTheme['rail'] = {\n width: 200,\n height: 8,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n };\n\n if (horizontal) {\n rail.width = 200;\n rail.height = 8;\n } else {\n rail.width = 8;\n rail.height = 200;\n }\n\n return {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n rail,\n handler: {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: '#ffffff'\n },\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n }\n }\n };\n};\n\nexport const colorLegend: IColorLegendTheme = {\n horizontal: getColorLegendTheme(true),\n vertical: getColorLegendTheme(false)\n};\n","import type { IDiscreteLegendTheme } from '../../../../../component/legend';\n\nexport const discreteLegend: IDiscreteLegendTheme = {\n orient: 'bottom',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'normal'\n },\n space: 12\n },\n pager: {\n textStyle: {\n fill: { type: 'palette', key: 'discreteLegendPagerTextColor' }\n },\n handler: {\n style: {\n fill: { type: 'palette', key: 'discreteLegendPagerHandlerColor' }\n },\n state: {\n disable: {\n fill: { type: 'palette', key: 'discreteLegendPagerHandlerDisableColor' }\n }\n }\n }\n },\n item: {\n visible: true,\n spaceCol: 10,\n spaceRow: 6,\n padding: 2,\n background: {\n state: {\n selectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n },\n unSelectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n }\n }\n },\n shape: {\n space: 6,\n style: {\n lineWidth: 0,\n fillOpacity: 1,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fillOpacity: 0.2,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n },\n label: {\n space: 6,\n style: {\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fill: { type: 'palette', key: 'disableFontColor' },\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n }\n },\n allowAllCanceled: false\n};\n","import type { IContinuousLegendSpec, ISizeLegendCommonTheme, ISizeLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst getSizeLegendTheme = (horizontal?: boolean): ISizeLegendCommonTheme => {\n const rail: IContinuousLegendSpec['rail'] = {\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n };\n if (horizontal) {\n rail.width = 200;\n rail.height = 4;\n } else {\n rail.height = 200;\n rail.width = 4;\n }\n\n return {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n sizeBackground: {\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor', a: 0.8 }\n }\n },\n rail,\n handler: {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: { type: 'palette', key: 'sliderTrackColor' }\n },\n fill: { type: 'palette', key: 'sliderHandleColor' }\n /*\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n */\n }\n }\n };\n};\n\nexport const sizeLegend: ISizeLegendTheme = {\n horizontal: getSizeLegendTheme(true),\n vertical: getSizeLegendTheme(false)\n};\n","import type { IMapLabelTheme } from '../../../../component/map-label';\nimport type { ITextMarkSpec } from '../../../../typings/visual';\n\nconst getLabelTheme = (): {\n visible?: boolean;\n style?: ITextMarkSpec;\n} => {\n return {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'left',\n fill: 'black',\n fontSize: { type: 'token', key: 'l6FontSize' }\n }\n };\n};\n\nexport const mapLabel: IMapLabelTheme = {\n visible: true,\n offset: 12,\n position: 'top',\n space: 10,\n nameLabel: getLabelTheme(),\n valueLabel: getLabelTheme(),\n background: {\n visible: true,\n padding: { top: 4, bottom: 4, left: 6, right: 6 },\n style: {\n cornerRadius: 2,\n lineWidth: 1,\n fill: 'white',\n stroke: 'grey'\n }\n },\n leader: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: 'red'\n }\n }\n};\n","import type { IMarkerLabelSpec } from '../../../../component/marker/interface';\n\nexport const getCommonLabelTheme = (): IMarkerLabelSpec => {\n return {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fontStyle: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n labelBackground: {\n padding: {\n top: 2,\n bottom: 2,\n right: 4,\n left: 4\n },\n style: {\n cornerRadius: 3,\n fill: { type: 'palette', key: 'markLabelBackgroundColor' }\n }\n }\n };\n};\n","import type { IMarkAreaTheme } from '../../../../component/marker/mark-area/interface';\nimport { getCommonLabelTheme } from './mark';\n\nexport const markArea: IMarkAreaTheme = {\n area: {\n style: {\n fill: { type: 'palette', key: 'axisDomainColor', a: 0.25 }\n }\n },\n label: getCommonLabelTheme()\n};\n","import type { IMarkerSymbol } from '../../../../component/marker/interface';\nimport type { IMarkLineTheme } from '../../../../component/marker/mark-line/interface';\nimport { getCommonLabelTheme } from './mark';\n\nconst getSymbolTheme = (visible?: boolean): IMarkerSymbol => {\n return {\n visible,\n symbolType: 'triangle',\n size: 10,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n };\n};\n\nconst labelTheme = getCommonLabelTheme();\nlabelTheme.refY = 5;\n\nexport const markLine: IMarkLineTheme = {\n line: {\n style: {\n lineDash: [3, 3],\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n },\n startSymbol: getSymbolTheme(false),\n endSymbol: getSymbolTheme(true),\n label: labelTheme\n};\n","import type { IMarkPointTheme } from '../../../../component/marker/mark-point/interface';\n\nexport const markPoint: IMarkPointTheme = {\n itemLine: {\n decorativeLine: {\n visible: false\n },\n startSymbol: {\n size: 5,\n visible: true,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n endSymbol: {\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n }\n },\n itemContent: {\n offsetY: -50\n }\n};\n","import type { BuiltinTokenMap } from './interface';\n\n/** 标准色板 */\nexport const token: BuiltinTokenMap = {\n fontFamily:\n // eslint-disable-next-line max-len\n 'PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol',\n fontSize: 14,\n\n l1FontSize: 32,\n l1LineHeight: '150%',\n\n l2FontSize: 20,\n l2LineHeight: '140%',\n\n l3FontSize: 16,\n l3LineHeight: '150%',\n\n l4FontSize: 14,\n l4LineHeight: '150%',\n\n l5FontSize: 12,\n l5LineHeight: '130%',\n\n l6FontSize: 10,\n l6LineHeight: '120%'\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\nimport { series } from '../common/series';\nimport { markByName, markByType } from '../common/mark';\nimport { component } from '../common/component';\nimport { token } from '../../token';\n\nexport const lightTheme: ITheme = {\n name: 'light',\n background: { type: 'palette', key: 'backgroundColor' },\n padding: 20,\n fontFamily: { type: 'token', key: 'fontFamily' },\n colorScheme,\n token,\n mark: markByType,\n markByName,\n series,\n component,\n animationThreshold: 2000\n};\n","import type { IComponentTheme } from '../../../../component/interface';\nimport { axisBand } from './axis/band-axis';\nimport { axisX, axisY, axisZ } from './axis/cartesian-axis';\nimport { commonAxis } from './axis/common-axis';\nimport { axisLinear } from './axis/linear-axis';\nimport { axisAngle, axisRadius } from './axis/polar-axis';\nimport { brush } from './brush';\nimport { crosshair } from './crosshair';\nimport { dataZoom } from './data-zoom';\nimport { indicator } from './indicator';\nimport { colorLegend } from './legend/color-legend';\nimport { discreteLegend } from './legend/discrete-legend';\nimport { sizeLegend } from './legend/size-legend';\nimport { mapLabel } from './map-label';\nimport { markArea } from './mark-area';\nimport { markLine } from './mark-line';\nimport { markPoint } from './mark-point';\nimport { player } from './player';\nimport { title } from './title';\nimport { tooltip } from './tooltip';\nimport { poptip } from './poptip';\nimport { totalLabel } from './total-label';\nimport { scrollBar } from './scroll-bar';\n\nexport const component: IComponentTheme = {\n discreteLegend,\n colorLegend,\n sizeLegend,\n axis: commonAxis,\n axisBand,\n axisLinear,\n axisX,\n axisY,\n axisZ,\n axisAngle,\n axisRadius,\n markLine: markLine,\n markArea: markArea,\n markPoint: markPoint,\n polarMarkLine: markLine,\n polarMarkArea: markArea,\n polarMarkPoint: markPoint,\n geoMarkPoint: markPoint,\n tooltip,\n dataZoom,\n crosshair,\n player,\n brush,\n indicator,\n title,\n mapLabel,\n poptip,\n totalLabel,\n scrollBar\n};\n","import type { ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip/interface';\nimport type { IColorKey } from '../../../color-scheme';\n\nconst getTitleLabelTheme = (): ITooltipTextTheme => {\n return {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n\n fontColor: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'bold',\n textBaseline: 'middle',\n spacing: 0\n };\n};\n\nexport const tooltip: ITooltipTheme = {\n offset: {\n x: 10,\n y: 10\n },\n panel: {\n padding: {\n top: 10,\n left: 10,\n right: 10,\n bottom: 10\n },\n backgroundColor: { type: 'palette', key: 'popupBackgroundColor' },\n border: {\n color: { type: 'palette', key: 'popupBackgroundColor' },\n width: 0,\n radius: 3\n },\n shadow: {\n x: 0,\n y: 4,\n blur: 12,\n spread: 0,\n color: { type: 'palette', key: 'shadowColor' }\n }\n },\n spaceRow: 6,\n titleLabel: getTitleLabelTheme(),\n shape: {\n size: 8,\n spacing: 6\n },\n keyLabel: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n\n fontColor: { type: 'palette', key: 'secondaryFontColor' },\n textBaseline: 'middle',\n spacing: 26\n },\n valueLabel: getTitleLabelTheme()\n};\n","import type { IPlayerTheme } from '../../../../component/player';\n\nconst getDirectionTheme = (position: 'start' | 'end'): IPlayerTheme['controller']['forward'] => {\n return {\n order: 0,\n space: 10,\n position: 'start',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n };\n};\n\nconst getPlayTheme = (): IPlayerTheme['controller']['pause'] => {\n return {\n order: 0,\n space: 10,\n position: 'start',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n };\n};\n\nexport const player: IPlayerTheme = {\n visible: true,\n position: 'start',\n padding: {\n top: 20,\n bottom: 20\n },\n slider: {\n space: 10,\n trackStyle: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.8\n },\n railStyle: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n },\n handlerStyle: {\n size: 15,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fill: { type: 'palette', key: 'playerControllerColor' }\n }\n },\n controller: {\n start: getPlayTheme(),\n pause: getPlayTheme(),\n backward: getDirectionTheme('start'),\n forward: getDirectionTheme('end')\n }\n};\n","import type { ITitleTheme } from '../../../../component/title/interface';\n\nexport const title: ITitleTheme = {\n padding: {\n top: 4,\n bottom: 20\n },\n textStyle: {\n fontSize: { type: 'token', key: 'l3FontSize' },\n lineHeight: { type: 'token', key: 'l3LineHeight' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n subtextStyle: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n fill: { type: 'palette', key: 'tertiaryFontColor' }\n }\n};\n","import type { IPoptipTheme } from '../../../../component/poptip/interface';\n\nexport const poptip: IPoptipTheme = {\n visible: true,\n position: 'auto',\n padding: 8,\n titleStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fontWeight: 'bold',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n contentStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n panel: {\n visible: true,\n fill: { type: 'palette', key: 'popupBackgroundColor' },\n cornerRadius: 3,\n lineWidth: 0,\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' },\n size: 0,\n space: 12\n }\n};\n","import type { ITotalLabelTheme } from '../../../../component/label';\n\nexport const totalLabel: ITotalLabelTheme = {\n visible: false,\n offset: 5,\n overlap: {\n clampForce: true,\n strategy: []\n },\n smartInvert: false,\n animation: false,\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n }\n};\n","import type { IScrollBarTheme } from '../../../../component/data-zoom';\n\nconst getSlider = () => {\n return {\n style: {\n fill: { type: 'palette', key: 'scrollBarSliderColor' }\n }\n };\n};\n\nexport const scrollBar: IScrollBarTheme = {\n horizontal: {\n height: 10,\n slider: getSlider()\n },\n vertical: {\n width: 10,\n slider: getSlider()\n }\n};\n","import type { ITokenKey, TokenMap } from './interface';\n\n/**\n * 根据 tokenMap 和 token 索引查询 token 值\n */\nexport function queryToken(tokenMap: TokenMap, tokenKey: ITokenKey): T | undefined {\n if (tokenMap && tokenKey.key in tokenMap) {\n return tokenMap[tokenKey.key];\n }\n return tokenKey.default;\n}\n\nexport function isTokenKey(obj: any): obj is ITokenKey {\n return obj && (obj as ITokenKey).type === 'token' && !!(obj as ITokenKey).key;\n}\n","import { isPlainObject } from '@visactor/vutils';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport { getActualColor, isColorKey } from '../../theme/color-scheme/util';\nimport type { ISeriesSpec } from '../../typings';\nimport type { TokenMap } from '../../theme/token';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTokenKey, queryToken } from '../../theme/token';\nimport type { ITheme } from '../../theme';\n\nconst IGNORE_KEYS = ['animationThreshold', 'colorScheme', 'name', 'padding'];\n\nexport function preprocessTheme(\n obj: any,\n colorScheme?: IThemeColorScheme,\n tokenMap?: TokenMap,\n seriesSpec?: ISeriesSpec\n): any {\n if (!obj) {\n return obj;\n }\n if (!colorScheme) {\n colorScheme = (obj as ITheme).colorScheme;\n }\n if (!tokenMap) {\n tokenMap = (obj as ITheme).token;\n }\n const newObj = {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n if (IGNORE_KEYS.includes(key)) {\n newObj[key] = value;\n } else if (isPlainObject(value)) {\n if (isColorKey(value)) {\n // 查询、替换语义化颜色\n newObj[key] = getActualColor(value, colorScheme, seriesSpec);\n } else if (isTokenKey(value)) {\n // 查询、替换语义化 token\n newObj[key] = queryToken(tokenMap, value);\n } else {\n newObj[key] = preprocessTheme(value, colorScheme, tokenMap, seriesSpec);\n }\n } else {\n newObj[key] = value;\n }\n });\n\n return newObj;\n}\n","export * from './light';\nexport * from './dark';\n\nimport { isString } from '@visactor/vutils';\nimport { mergeTheme } from '../../util/theme/merge-theme';\nimport type { ITheme } from '../interface';\nimport { lightTheme } from './light';\n// import { darkTheme } from './dark';\nimport { preprocessTheme } from '../../util/theme/preprocess';\n\n/** 声明内置主题(含 token 未转换) */\nexport const builtinThemes: Record = {\n [lightTheme.name]: lightTheme\n // [darkTheme.name]: darkTheme\n};\n/** 默认主题名称 */\nexport const defaultThemeName = lightTheme.name;\n\n/** 全局主题 map (包含用户新注册的主题)(含 token 未转换) */\nexport const themes: Map = new Map(Object.keys(builtinThemes).map(key => [key, builtinThemes[key]]));\n\n/** 全局已将 token 转换的主题 map (包含用户新注册的主题) */\nconst transformedThemes: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, preprocessTheme(builtinThemes[key])] as [string, ITheme])\n);\n\n/** 主题 map 中的元素是否 merge 过默认主题 (非默认主题的其他内置主题没有 merge 过默认主题) */\nexport const hasThemeMerged: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, key === defaultThemeName])\n);\n\n/** 注册主题 */\nexport const registerTheme = (name: string, theme: Partial) => {\n if (!name) {\n return;\n }\n // 所有主题基于默认主题扩展,保证基础值\n const mergedTheme = getMergedTheme(theme);\n themes.set(name, mergedTheme);\n transformedThemes.set(name, preprocessTheme(mergedTheme));\n hasThemeMerged.set(name, true);\n};\n/**\n * 获取注册过的主题\n * @param name 主题名称\n * @param transformed 是否获取 token 转换后的主题\n * @returns 返回主题\n */\nexport const getTheme = (name: string = defaultThemeName, transformed: boolean = false) => {\n if (hasThemeMerged.has(name) && !hasThemeMerged.get(name)) {\n // 重新 merge 默认主题\n registerTheme(name, themes.get(name));\n }\n\n if (transformed) {\n return transformedThemes.get(name);\n }\n\n return themes.get(name);\n};\n\n/** 删除主题 */\nexport const removeTheme = (name: string): boolean => {\n return themes.delete(name) && transformedThemes.delete(name) && hasThemeMerged.delete(name);\n};\n\n/** 主题是否存在 */\nexport const themeExist = (name: any) => {\n if (!isString(name)) {\n return false;\n }\n return themes.has(name);\n};\n\n/** 使新主题基于默认主题扩展,保证基础值 */\nexport const getMergedTheme = (theme: Partial): ITheme => {\n const baseThemeName = theme.type ?? defaultThemeName;\n const baseTheme = getTheme(baseThemeName);\n return mergeTheme({}, baseTheme, theme);\n};\n","import { array } from '@visactor/vutils';\nimport type { MaybeArray } from '../typings';\nimport type { IVChart } from './interface';\n\n/** vchart 全局实例管理类,为了防止与 ThemeManager 循环依赖,单独从 VChart 类抽出 */\nexport class InstanceManager {\n /** 全局实例 map */\n static readonly instances: Map = new Map();\n /** 注册实例 */\n static registerInstance(instance: IVChart) {\n InstanceManager.instances.set(instance.id, instance);\n }\n /** 注销实例 */\n static unregisterInstance(instance: IVChart) {\n InstanceManager.instances.delete(instance.id);\n }\n /**\n * 根据 vChart 实例的 id 获取 vChart 实例\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static getInstance(id: number): IVChart | undefined {\n return InstanceManager.instances.get(id);\n }\n /**\n * 根据图表 id 判断实例是否存在\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static instanceExist(id: number): boolean {\n return InstanceManager.instances.has(id);\n }\n\n static forEach(\n callbackfn: (instance: IVChart, id: number, map: Map) => void,\n excludeId: MaybeArray = [],\n thisArg?: any\n ) {\n const excludeIdList = array(excludeId);\n return InstanceManager.instances.forEach((instance: IVChart, id: number, map: Map) => {\n if (excludeIdList.includes(id)) {\n return;\n }\n callbackfn(instance, id, map);\n }, thisArg);\n }\n}\n","import { defaultThemeName, getTheme, registerTheme, removeTheme, themeExist, themes } from './builtin';\nimport type { ITheme } from './interface';\nimport { InstanceManager } from '../core/instance-manager';\nimport type { IVChart } from '../core/interface';\n\nexport class ThemeManager {\n /** 主题字典 */\n static readonly themes = themes;\n\n private static _currentThemeName: string = defaultThemeName; // 设置缺省为默认主题\n\n /**\n * 注册主题\n * @param name 主题名称\n * @param theme 主题配置\n * @returns\n */\n static registerTheme(name: string, theme: Partial) {\n registerTheme(name, theme);\n }\n\n /**\n * 获取主题\n * @param name 主题名称\n * @returns\n */\n static getTheme(name: string, transformed: boolean = false) {\n return getTheme(name, transformed);\n }\n\n /**\n * 移除主题\n * @param name 主题名称\n * @returns 是否移除成功\n */\n static removeTheme(name: string): boolean {\n return removeTheme(name);\n }\n\n /**\n * 判断主题是否存在\n * @param name 主题名称\n * @returns 是否存在\n */\n static themeExist(name: any) {\n return themeExist(name);\n }\n\n /** 获取图表默认主题(非用户配置) */\n static getDefaultTheme(): ITheme {\n return ThemeManager.themes.get(defaultThemeName);\n }\n\n /** 设置当前主题(所有实例生效) */\n static setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return;\n }\n ThemeManager._currentThemeName = name;\n InstanceManager.forEach((instance: IVChart) => instance?.setCurrentTheme(name));\n }\n\n /** 获取当前主题(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentTheme(transformed: boolean = false): ITheme {\n return ThemeManager.getTheme(ThemeManager._currentThemeName, transformed);\n }\n\n /** 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentThemeName(): string {\n return ThemeManager._currentThemeName;\n }\n}\n","import type { ITheme } from '../../theme';\n// eslint-disable-next-line no-duplicate-imports\nimport { ThemeManager } from '../../theme';\nimport { isObject, isString } from '@visactor/vutils';\n\nexport function getThemeObject(theme?: string | ITheme, transformed?: boolean): ITheme {\n if (isString(theme)) {\n if (ThemeManager.themeExist(theme)) {\n return ThemeManager.getTheme(theme, transformed);\n }\n return {};\n } else if (isObject(theme)) {\n return theme;\n }\n return {};\n}\n","import type { BaseEventParams } from '../../interface';\nimport type { ISeries } from '../../../series/interface';\nimport type { Datum } from '../../../typings';\nimport type { IAxis } from '../../../component/axis/interface';\n\nexport enum DimensionEventEnum {\n dimensionHover = 'dimensionHover',\n dimensionClick = 'dimensionClick'\n}\n\nexport interface IDimensionInfo {\n /** 维度项索引,在连续轴上不存在 */\n index?: number;\n /** 维度项原始值,在离散轴上为维度标签,在连续轴上为数字 */\n value: string | number;\n /** 维度项所在坐标(scale 执行后的值) */\n position?: number;\n /** 维度项所在轴 */\n axis?: IAxis;\n /** 维度项对应数据 */\n data: IDimensionData[];\n /** 维度对应的类型 */\n dimType?: string;\n}\n\nexport interface IDimensionData {\n /** 图元上的原始数据(考虑到有多个图元的情况,实际为数组类型) */\n datum: Datum[];\n /** 图元所在的系列实例 */\n series: ISeries;\n /** 该数据项的 hash 值 */\n key?: string;\n}\n\nexport type DimensionEventParams = BaseEventParams & {\n action: 'enter' | 'leave' | 'move' | 'click';\n dimensionInfo: IDimensionInfo[];\n};\n","/* eslint-disable max-depth */\nimport type { IChart } from '../../../../chart/interface';\nimport type { IDimensionData, IDimensionInfo } from '../interface';\nimport { isNil, array, isValid, isValidNumber } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Maybe } from '@visactor/vutils';\nimport type { AxisComponent } from '../../../../component/axis/base-axis';\nimport type { CoordinateType, Datum, ILayoutPoint } from '../../../../typings';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianLinearAxisSpec } from '../../../../component';\nimport type { ISeries } from '../../../../series';\n\nconst isInBound = (pos: ILayoutPoint, min: ILayoutPoint, max: ILayoutPoint): boolean =>\n pos.x >= min.x && pos.x <= max.x && pos.y >= min.y && pos.y <= max.y;\n\nexport const isInRegionBound = (chart: IChart, axis: AxisComponent, pos: ILayoutPoint) => {\n const regionList = chart.getRegionsInIds(array(axis.layout.layoutBindRegionID));\n return regionList?.some(region => {\n const rect = region.getLayoutRect();\n const startPoint = region.getLayoutStartPoint();\n return isInBound(\n pos,\n { x: startPoint.x, y: startPoint.y },\n { x: rect.width + startPoint.x, y: rect.height + startPoint.y }\n );\n });\n};\n\nexport const isSameDimensionInfo = (a?: IDimensionInfo, b?: IDimensionInfo): boolean => {\n if (a === b) {\n return true;\n }\n if (isNil(a) || isNil(b)) {\n return false;\n }\n if (a.value !== b.value) {\n return false;\n }\n if (a.axis?.id !== b.axis?.id) {\n return false;\n }\n return true;\n};\n\nconst resolveTooltipFilterRange = (spec: ICartesianLinearAxisSpec, scale: IBaseScale) => {\n const range = spec.tooltipFilterRange;\n const rangeValue = typeof range === 'function' ? range({ scale }) : range;\n const rangeArr = (isValidNumber(rangeValue) ? [-rangeValue, rangeValue] : rangeValue) as Maybe<[number, number]>;\n return rangeArr;\n};\n\n/** 给定维度项的值,获取对应维度数据 */\nexport const getDimensionData = (\n value: any,\n axis: AxisComponent,\n coordinate: CoordinateType,\n getDimensionField: (series: any) => string | string[]\n): IDimensionData[] => {\n const scale = axis.getScale();\n const isDiscreteAxis = isDiscrete(scale.type);\n\n const data: IDimensionData[] = [];\n const seriesList = axis.getOption().getChart().getSeriesInIndex(axis.getSpecInfo().seriesIndexes);\n for (const series of seriesList) {\n if (series.coordinate === coordinate) {\n const dimensionField = array(getDimensionField(series));\n const viewData = series.getViewData()?.latestData;\n if (dimensionField && viewData) {\n if (isDiscreteAxis) {\n const datums: Datum[] = [];\n const datumIdList: number[] = [];\n viewData.forEach((datum: any, i: number) => {\n if (datum[dimensionField[0]]?.toString() === value?.toString()) {\n datums.push(datum); // 获取该维度项所对应的数据\n datumIdList.push(i);\n }\n });\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n } else {\n // 连续轴\n if (isValid(dimensionField[1])) {\n // 直方图情况,根据范围取 datum\n const datums: Datum[] = [];\n const datumIdList: number[] = [];\n viewData.forEach((datum: any, i: number) => {\n if (\n datum[dimensionField[0]]?.toString() === value?.toString() ||\n (isValid(datum[dimensionField[0]]) &&\n isValid(datum[dimensionField[1]]) &&\n value >= datum[dimensionField[0]] &&\n value < datum[dimensionField[1]])\n ) {\n datums.push(datum); // 获取该维度项所对应的数据\n datumIdList.push(i);\n }\n });\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n } else {\n // 散点图情况,依据轴上的配置判断\n const spec = axis.getSpec() as ICartesianLinearAxisSpec;\n const rangeArr = resolveTooltipFilterRange(spec, scale);\n let datums: Datum[] = [];\n let datumIdList: number[] = [];\n if (rangeArr) {\n // 根据范围取 datum\n viewData.forEach((datum: Datum, i: number) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = datum[dimensionField[0]] - value;\n if (delta >= rangeArr[0] && delta <= rangeArr[1]) {\n datums.push(datum);\n datumIdList.push(i);\n }\n }\n });\n } else {\n // 根据最近距离取 datum\n let minDelta = Infinity;\n let deltaSign = 0;\n viewData.forEach((datum: any, i: number) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = Math.abs(datum[dimensionField[0]] - value);\n const sign = Math.sign(datum[dimensionField[0]] - value);\n if (delta < minDelta) {\n minDelta = delta;\n datums = [datum];\n datumIdList = [i];\n deltaSign = sign;\n } else if (delta === minDelta && sign === deltaSign) {\n datums.push(datum);\n datumIdList.push(i);\n }\n }\n });\n }\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n }\n }\n }\n }\n }\n return data;\n};\n\nconst getDimensionDataKey = (series: ISeries, datumIdList: number[]) => `${series.id}_${datumIdList.join('_')}`;\n\nexport const getAxis = (\n chart: IChart,\n filter: (cmp: T) => boolean,\n pos: ILayoutPoint\n): T[] | null => {\n const axesComponents = chart\n .getAllComponents()\n .filter(c => c.specKey === 'axes' && filter(c as T) && isInRegionBound(chart, c as T, pos)) as T[];\n if (!axesComponents.length) {\n return null;\n }\n return axesComponents;\n};\n","import { isNil } from '@visactor/vutils';\n\n/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/regression/ols.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\nexport function ordinaryLeastSquares(uX: number, uY: number, uXY: number, uX2: number) {\n const delta = uX2 - uX * uX;\n const slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;\n const intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function visitPoints(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n callback: (x: number, y: number, index: number) => void\n) {\n let i = -1;\n let u;\n let v;\n\n data.forEach(d => {\n u = x(d);\n v = y(d);\n if (!isNil(u) && (u = +u) >= u && !isNil(v) && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n });\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function rSquared(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n uY: number,\n predict: (x: number) => number\n) {\n let SSE = 0;\n let SST = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx);\n const sst = dy - uY;\n\n SSE += sse * sse;\n SST += sst * sst;\n });\n\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function regressionLinear(\n data: any[],\n x: (datum: any) => number = datum => datum.x,\n y: (datum: any) => number = datum => datum.y\n) {\n let X = 0;\n let Y = 0;\n let XY = 0;\n let X2 = 0;\n let n = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ordinaryLeastSquares(X, Y, XY, X2);\n const predict = (x: number) => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n","export function ascending(a: number, b: number) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export function toNumber(a: any) {\n return Number(a);\n}\n","import { toNumber } from './toNumber';\n\nexport function quantileSorted(\n values: any[],\n percent: number,\n valueof: (entry: any, index: number, arr: any[]) => number = toNumber\n) {\n const n = values.length;\n if (!n) {\n return;\n }\n if (percent <= 0 || n < 2) {\n return valueof(values[0], 0, values);\n }\n if (percent >= 1) {\n return valueof(values[n - 1], n - 1, values);\n }\n const i = (n - 1) * percent;\n const i0 = Math.floor(i);\n const value0 = valueof(values[i0], i0, values);\n const value1 = valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import { ascending } from './ascending';\nimport { quantileSorted } from './quantileSorted';\n\nexport const median = (values: number[], isSorted?: boolean) => {\n let sorted = values;\n if (isSorted !== true) {\n sorted = values.sort(ascending);\n }\n\n return quantileSorted(sorted, 0.5);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport {\n isNumberClose,\n isGreater,\n isLess,\n isValid,\n PointService,\n median as visMedian,\n maxInArray,\n minInArray,\n normalizeAngle\n} from '@visactor/vutils';\nimport { angleLabelOrientAttribute } from '@visactor/vrender-components';\nexport const isClose = isNumberClose;\nexport { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\n\nexport function min(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return minInArray(dataArray);\n}\n\nexport function max(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return maxInArray(dataArray);\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n\n/**\n * 最大余额法计算百分比\n **/\nexport function getPercentValue(valueList: number[], precision = 2) {\n const sum = valueList.reduce((a, c) => {\n return (a += isNaN(c) ? 0 : c);\n }, 0);\n if (sum === 0) {\n return 0;\n }\n\n const digits = Math.pow(10, precision);\n const votesPerQuota = valueList.map(val => {\n return ((isNaN(val) ? 0 : val) / sum) * digits * 100;\n });\n\n const targetSeats = digits * 100;\n const seats = votesPerQuota.map(votes => {\n return Math.floor(votes);\n });\n\n let currentSum = seats.reduce((a, c) => {\n return a + c;\n }, 0);\n\n const remainder = votesPerQuota.map((votes, idx) => {\n return votes - seats[idx];\n });\n\n while (currentSum < targetSeats) {\n let max = Number.NEGATIVE_INFINITY;\n let maxId = null;\n for (let i = 0; i < remainder.length; i++) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n }\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return seats.map(entry => entry / digits);\n}\n\nexport function isValidPoint(p: IPoint) {\n return isValidNumber(p.x) && isValidNumber(p.y);\n}\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getAxis, getDimensionData } from './common';\nimport type { IPolarSeries } from '../../../../series/interface';\nimport { isNil, maxInArray, minInArray } from '@visactor/vutils';\nimport { distance, vectorAngle } from '../../../../util/math';\nimport type { ILayoutPoint } from '../../../../typings/layout';\nimport type { PolarAxis } from '../../../../component';\n/** 将角度标准化为 range 范围内的角度 */\nconst angleStandardize = (angle: number, range: [number, number]) => {\n const unit = Math.PI * 2;\n const min = minInArray(range);\n const max = maxInArray(range);\n if (angle < min) {\n angle += Math.ceil((min - angle) / unit) * unit;\n } else if (angle > max) {\n angle -= Math.ceil((angle - max) / unit) * unit;\n }\n return angle;\n};\n\nexport const getPolarDimensionInfo = (chart: IChart | undefined, pos: ILayoutPoint): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n\n const angleAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'angle', pos);\n const radiusAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'radius', pos);\n\n if ((!angleAxisList || !angleAxisList.length) && (!radiusAxisList || !radiusAxisList.length)) {\n return null;\n }\n\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const getDimensionField = (series: IPolarSeries) => series.getDimensionField()[0];\n const { x, y } = pos;\n\n if (angleAxisList) {\n angleAxisList.forEach(axis => {\n const angleScale = axis.getScale();\n // 限定为离散轴\n if (angleScale && isDiscrete(angleScale.type)) {\n const angleDomain = angleScale.domain();\n const angleRange = angleScale.range();\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n angle = angleStandardize(angle, angleRange);\n\n // 计算半径\n const radius = distance(vector);\n const radiusScale = radiusAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前角度轴对应的径向轴,而不是取第一个\n const radiusRange = radiusScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = axis.invert(angle);\n if (isNil(value)) {\n return;\n }\n let index: number | undefined = angleDomain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, position: angleScale.scale(value), axis, data });\n }\n });\n }\n if (radiusAxisList) {\n radiusAxisList.forEach(axis => {\n const radiusScale = axis.getScale();\n const radiusRange = radiusScale?.range();\n\n // 限定为离散轴\n if (radiusScale && isDiscrete(radiusScale.type)) {\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n if (angle < -Math.PI / 2) {\n angle = Math.PI * 2 + angle;\n }\n\n // 计算半径\n const radius = distance(vector);\n const angleScale = angleAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前径向轴对应的角度轴,而不是取第一个\n const angleRange = angleScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = radiusScale.invert(radius);\n if (isNil(value)) {\n return;\n }\n const domain = radiusScale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, position: radiusScale.scale(value), axis, data });\n }\n });\n }\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n","import type { IOrientType } from '../../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../../typings/space';\nimport { isValid } from '@visactor/vutils';\nimport { isValidOrient } from '../../../../util/space';\nimport type { ICartesianAxisCommonSpec } from '../interface';\nimport { ComponentTypeEnum } from '../../../interface';\n\nexport function isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n\nexport function isZAxis(orient: IOrientType) {\n return orient === 'z';\n}\n\n// 自动推断轴类型,现在根据orient来判断\n// TODO:后续可以根据数据特征推断\nexport function autoAxisType(orient: IOrientType, isHorizontal: boolean) {\n if (isHorizontal) {\n return isXAxis(orient) ? 'linear' : 'band';\n }\n return isXAxis(orient) ? 'band' : 'linear';\n}\n\nexport function getOrient(spec: ICartesianAxisCommonSpec, whiteList?: string[]): IOrientType {\n return isValidOrient(spec.orient) || (whiteList && whiteList.includes(spec.orient)) ? spec.orient : 'left';\n}\n\nexport function getDirectionByOrient(orient: IOrientType) {\n return orient === 'top' || orient === 'bottom' ? Direction.horizontal : Direction.vertical;\n}\n\nexport function isOrientInSameDirection(orient1: IOrientType, orient2: IOrientType) {\n return getDirectionByOrient(orient1) === getDirectionByOrient(orient2);\n}\n\nexport function transformInverse(spec: ICartesianAxisCommonSpec, isHorizontal: boolean) {\n // 这里处理下 direction === 'horizontal' 下的 Y 轴\n // 因为 Y 轴绘制的时候默认是从下至上绘制的,但是在 direction === 'horizontal' 场景下,图表应该是按照从上至下阅读的\n // 所以这里在这种场景下坐标轴会默认 inverse 已达到效果\n let inverse = spec.inverse;\n if (isHorizontal && !isXAxis(spec.orient)) {\n inverse = isValid(spec.inverse) ? !spec.inverse : true;\n }\n return inverse;\n}\n\nexport function getCartesianAxisInfo(spec: ICartesianAxisCommonSpec, isHorizontal?: boolean) {\n const axisType = spec.type ?? autoAxisType(spec.orient, isHorizontal);\n const componentName = `${ComponentTypeEnum.cartesianAxis}-${axisType}`;\n return { axisType, componentName };\n}\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getDimensionData, getAxis } from './common';\nimport type { CartesianAxis } from '../../../../component/axis/cartesian';\nimport type { ICartesianSeries } from '../../../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../../../component/axis/cartesian/util/common';\nimport { Direction } from '../../../../typings/space';\nimport type { ILayoutPoint } from '../../../../typings/layout';\n\nconst discreteXAxisGetDimensionField = (series: ICartesianSeries) => series.fieldX[0];\nconst discreteYAxisGetDimensionField = (series: ICartesianSeries) => series.fieldY[0];\nconst continuousXAxisGetDimensionField = (series: ICartesianSeries) => [\n series.fieldX[0],\n series.fieldX2 ?? series.fieldX[1]\n];\nconst continuousYAxisGetDimensionField = (series: ICartesianSeries) => [\n series.fieldY[0],\n series.fieldY2 ?? series.fieldY[1]\n];\n\nconst getDimensionFieldFunc = (isXAxis: boolean, isDiscreteAxis: boolean) =>\n isXAxis\n ? isDiscreteAxis\n ? discreteXAxisGetDimensionField\n : continuousXAxisGetDimensionField\n : isDiscreteAxis\n ? discreteYAxisGetDimensionField\n : continuousYAxisGetDimensionField;\n\nexport const getCartesianDimensionInfo = (\n chart: IChart | undefined,\n pos: ILayoutPoint,\n isTooltip?: boolean\n): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n\n const { x, y } = pos;\n const xAxisList = getAxis(chart, (cmp: CartesianAxis) => isXAxis(cmp.getOrient()), pos) ?? [];\n const yAxisList = getAxis(chart, (cmp: CartesianAxis) => isYAxis(cmp.getOrient()), pos) ?? [];\n\n if (!xAxisList.length && !yAxisList.length) {\n return null;\n }\n\n /** 离散轴集合 */\n const bandAxisSet: Set = new Set();\n /** 连续轴集合 */\n const linearAxisSet: Set = new Set();\n /** 必须包含的轴的集合 */\n const forceAxisSet: Set = new Set();\n\n [xAxisList, yAxisList].forEach(axisList =>\n axisList.forEach(axis => {\n const isDiscreteAxis = isDiscrete(axis.getScale().type);\n if (isDiscreteAxis) {\n bandAxisSet.add(axis);\n } else {\n linearAxisSet.add(axis);\n }\n if (isTooltip && axis.getSpec().hasDimensionTooltip) {\n forceAxisSet.add(axis);\n }\n })\n );\n\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const addAxisDimensionInfo = (orient: 'x' | 'y') => {\n const isXAxis = orient === 'x';\n const posValue = isXAxis ? x : y;\n const axisList = isXAxis ? xAxisList : yAxisList;\n axisList.forEach(axis => {\n if (forceAxisSet.size > 0) {\n if (forceAxisSet.has(axis)) {\n const info = getDimensionInfoByPosition(\n axis,\n posValue,\n getDimensionFieldFunc(isXAxis, isDiscrete(axis.getScale().type))\n );\n info && targetAxisInfo.push(info);\n }\n } else {\n const hasDiscreteAxis = bandAxisSet.size > 0;\n if ((hasDiscreteAxis ? bandAxisSet : linearAxisSet).has(axis)) {\n const info = getDimensionInfoByPosition(axis, posValue, getDimensionFieldFunc(isXAxis, hasDiscreteAxis));\n info && targetAxisInfo.push(info);\n }\n }\n });\n };\n\n // 优先筛选 band 轴,其次按照 direction 判断\n if (chart.getSpec().direction === Direction.horizontal) {\n addAxisDimensionInfo('y');\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('x');\n }\n } else {\n addAxisDimensionInfo('x');\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('y');\n }\n }\n\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n\nexport const getDimensionInfoByPosition = (\n axis: CartesianAxis,\n posValue: number,\n getDimensionField: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const value = axis.positionToData(posValue, true);\n return isNil(value) ? null : getDimensionInfoByValue(axis, value, getDimensionField);\n};\n\nexport const getDimensionInfoByValue = (\n axis: CartesianAxis,\n value: any,\n getDimensionField?: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const scale = axis.getScale();\n\n if (isNil(value)) {\n return null;\n }\n const domain = scale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(\n value,\n axis,\n 'cartesian',\n getDimensionField ?? (isXAxis(axis.getOrient()) ? discreteXAxisGetDimensionField : discreteYAxisGetDimensionField)\n );\n return { index, value, position: scale.scale(value), axis, data };\n};\n","import { error } from '../../../util/debug';\nimport type { IAxis } from '../../../component/axis/interface';\nimport type { RenderMode } from '../../../typings/spec/common';\nimport type {\n BaseEventParams,\n EventHandler,\n EventParamsDefinition,\n IComposedEvent,\n IEventDispatcher\n} from '../../interface';\nimport type { IChart } from '../../../chart/interface';\nimport type { IDimensionInfo } from './interface';\nimport { getPolarDimensionInfo } from './util/polar';\nimport { getCartesianDimensionInfo, getDimensionInfoByValue } from './util/cartesian';\nimport type { IOrientType, Maybe } from '../../../typings';\nimport { isDiscrete } from '@visactor/vscale';\nimport { isXAxis } from '../../../component/axis/cartesian/util';\n\nexport class DimensionEvent implements IComposedEvent {\n protected _eventDispatcher: IEventDispatcher;\n protected _mode: RenderMode;\n\n protected _callback!: (params: BaseEventParams) => void;\n\n protected _chart: Maybe;\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n private get chart() {\n if (!this._chart) {\n this._chart = this._eventDispatcher.globalInstance.getChart?.();\n }\n return this._chart;\n }\n\n register(eType: Evt, handler: EventHandler): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n unregister(): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n\n protected getTargetDimensionInfo(x: number, y: number): IDimensionInfo[] | null {\n const cartesianInfo = getCartesianDimensionInfo(this.chart, { x, y }) ?? [];\n const polarInfo = getPolarDimensionInfo(this.chart, { x, y }) ?? [];\n\n const result = [].concat(cartesianInfo, polarInfo);\n if (result.length === 0) {\n return null;\n }\n\n return result;\n }\n\n dispatch(v: unknown, opt: { filter?: (axis: IAxis) => boolean }) {\n // get all enable axis\n const axes = this.chart?.getAllComponents().filter(c => {\n if (c.specKey !== 'axes') {\n return false;\n }\n if (opt?.filter) {\n return opt.filter(c);\n }\n return true;\n }) as IAxis[];\n\n const discreteAxes = axes.filter(axis => {\n const scale = (axis).getScale();\n return isDiscrete(scale.type);\n });\n const dimAxes = discreteAxes.length\n ? discreteAxes\n : axes.filter(axis => {\n const orient = axis.getOrient();\n return isXAxis(orient as IOrientType) || orient === 'angle';\n });\n const dimensionInfo: IDimensionInfo[] = [];\n dimAxes.forEach(a => {\n const info = getDimensionInfoByValue(a as unknown as any, v);\n if (info) {\n dimensionInfo.push(info);\n }\n });\n this._callback.call(null, {\n action: 'enter',\n dimensionInfo\n } as unknown as BaseEventParams);\n return dimensionInfo;\n }\n}\n","export { HOOK_EVENT as VGRAMMAR_HOOK_EVENT } from '@visactor/vgrammar-core';\n\nexport const BASE_EVENTS = [\n 'pointerdown',\n 'pointerup',\n 'pointerupoutside',\n 'pointertap', // pointerEvent 下的 click 事件\n 'pointerover',\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerout',\n 'mousedown',\n 'mouseup',\n 'mouseupoutside',\n 'rightdown',\n 'rightup',\n 'rightupoutside',\n 'click',\n 'dblclick',\n 'mousemove',\n 'mouseover',\n 'mouseout',\n 'mouseenter',\n 'mouseleave',\n 'wheel',\n 'touchstart',\n 'touchend',\n 'touchendoutside',\n 'touchmove',\n 'touchcancel',\n 'tap',\n 'dragstart',\n 'drag',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'dragend',\n 'drop',\n // 手势事件\n 'pan',\n 'panstart',\n 'panend',\n 'press',\n 'pressup',\n 'pressend',\n 'pinch',\n 'pinchstart',\n 'pinchend',\n 'swipe'\n];\n\nexport enum ChartEvent {\n initialized = 'initialized', // 图表实例初始化完成\n rendered = 'rendered', // 图表渲染方法被调用时触发,表明图表已经执行过渲染逻辑,只会触发一次\n renderFinished = 'renderFinished', // 每次画布渲染完成触发的事件,不包含动画结束\n animationFinished = 'animationFinished', // 图表动画结束时触发的事件\n // region\n regionSeriesDataFilterOver = 'regionSeriesDataFilterOver',\n // series start\n // series.liftCircle\n afterInitData = 'afterInitData',\n afterInitEvent = 'afterInitEvent',\n afterInitMark = 'afterInitMark',\n // series.data\n rawDataUpdate = 'rawDataUpdate',\n viewDataFilterOver = 'viewDataFilterOver',\n viewDataUpdate = 'viewDataUpdate',\n viewDataStatisticsUpdate = 'viewDataStatisticsUpdate',\n // dot series\n markDeltaYUpdate = 'markDeltaYUpdate',\n // pie series\n viewDataLabelUpdate = 'viewDataLabelUpdate',\n /** series end */\n // scale\n scaleDomainUpdate = 'scaleDomainUpdate',\n scaleUpdate = 'scaleUpdate',\n // datazoom\n dataZoomChange = 'dataZoomChange',\n // Hierarchy\n drill = 'drill',\n layoutStart = 'layoutStart',\n layoutEnd = 'layoutEnd',\n layoutRectUpdate = 'layoutRectUpdate',\n\n // player\n playerPlay = 'playerPlay',\n playerPause = 'playerPause',\n playerEnd = 'playerEnd',\n playerChange = 'playerChange',\n playerForward = 'playerForward',\n playerBackward = 'playerBackward',\n // scrollBar\n scrollBarChange = 'scrollBarChange',\n // brush\n brushStart = 'brushStart',\n brushChange = 'brushChange',\n brushEnd = 'brushEnd',\n brushClear = 'brushClear',\n // legend\n legendSelectedDataChange = 'legendSelectedDataChange',\n legendFilter = 'legendFilter',\n legendItemClick = 'legendItemClick',\n legendItemHover = 'legendItemHover',\n legendItemUnHover = 'legendItemUnHover',\n // tooltip\n tooltipShow = 'tooltipShow',\n tooltipHide = 'tooltipHide',\n tooltipRelease = 'tooltipRelease',\n // resize\n afterResize = 'afterResize',\n afterRender = 'afterRender',\n // layout\n afterLayout = 'afterLayout'\n}\n\nexport enum Event_Source_Type {\n chart = 'chart',\n window = 'window',\n canvas = 'canvas'\n}\n\nexport enum Event_Bubble_Level {\n vchart = 'vchart',\n chart = 'chart',\n model = 'model',\n mark = 'mark'\n}\n","import { isMobileLikeMode } from '../../../util/env';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\nimport { isSameDimensionInfo } from './util/common';\nimport { Event_Source_Type } from '../../../constant/event';\nimport type { IDimensionInfo } from './interface';\n\nexport class DimensionHoverEvent extends DimensionEvent {\n private _cacheDimensionInfo: IDimensionInfo[] | null = null;\n\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointermove'>('pointermove', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n\n this._eventDispatcher.register<'pointerout'>('pointerout', {\n query: { ...handler.query, source: Event_Source_Type.canvas },\n callback: this.onMouseOut\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也触发 hover\n this._eventDispatcher.register<'pointerdown'>('pointerdown', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n }\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointermove', {\n query: null,\n callback: this.onMouseMove\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也出发 hover\n this._eventDispatcher.unregister('pointerdown', {\n query: null,\n callback: this.onMouseMove\n });\n }\n }\n\n private onMouseMove = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (targetDimensionInfo === null && this._cacheDimensionInfo !== null) {\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (\n targetDimensionInfo !== null &&\n (this._cacheDimensionInfo === null ||\n targetDimensionInfo.length !== this._cacheDimensionInfo.length ||\n targetDimensionInfo.some((info, i) => !isSameDimensionInfo(info, this._cacheDimensionInfo![i])))\n ) {\n // 鼠标移入某维度\n this._callback.call(null, {\n ...params,\n action: 'enter',\n dimensionInfo: targetDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (targetDimensionInfo !== null) {\n // 鼠标在某维度上滑动\n this._callback.call(null, {\n ...params,\n action: 'move',\n dimensionInfo: targetDimensionInfo.slice()\n });\n }\n };\n\n private onMouseOut = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo ? this._cacheDimensionInfo.slice() : []\n });\n this._cacheDimensionInfo = null;\n };\n}\n","import { Event_Source_Type } from '../../../constant/event';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\n\nexport class DimensionClickEvent extends DimensionEvent {\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointertap'>('pointertap', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onClick\n });\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointertap', {\n query: null,\n callback: this.onClick\n });\n }\n\n private onClick = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (!targetDimensionInfo) {\n return;\n }\n this._callback.call(null, {\n ...params,\n action: 'click',\n dimensionInfo: targetDimensionInfo.slice()\n });\n };\n}\n","import { DimensionHoverEvent, DimensionEventEnum, DimensionClickEvent } from './dimension';\n\nexport * from './dimension';\n\nexport const ComposedEventMapper = {\n [DimensionEventEnum.dimensionHover]: DimensionHoverEvent,\n [DimensionEventEnum.dimensionClick]: DimensionClickEvent\n};\n","/*eslint no-dupe-class-members: \"off\"*/\n\nimport type { RenderMode } from '../typings/spec/common';\nimport { ComposedEventMapper } from './events';\nimport type {\n EventType,\n EventQuery,\n EventCallback,\n EventParamsDefinition,\n IEvent,\n IEventDispatcher,\n IComposedEvent,\n EventParams,\n EventHandler,\n EventBubbleLevel\n} from './interface';\n\nexport class Event implements IEvent {\n private _eventDispatcher: IEventDispatcher;\n private _mode: RenderMode;\n\n private _composedEventMap: Map, { eventType: EventType; event: IComposedEvent }> =\n new Map();\n getComposedEventMap() {\n return this._composedEventMap;\n }\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n on(eType: Evt, callback: EventCallback): this;\n on(eType: Evt, query: EventQuery, callback: EventCallback): this;\n on(\n eType: Evt,\n query: EventQuery | EventCallback,\n callback?: EventCallback\n ): this {\n const handler =\n typeof query === 'function'\n ? { query: null, callback: query }\n : {\n query,\n callback: callback as EventCallback\n };\n\n if (ComposedEventMapper[eType as string]) {\n const composedEvent = new ComposedEventMapper[eType as string](\n this._eventDispatcher,\n this._mode\n ) as IComposedEvent;\n composedEvent.register(eType, handler);\n this._composedEventMap.set(callback as EventCallback, {\n eventType: eType,\n event: composedEvent\n });\n } else {\n this._eventDispatcher.register(eType, handler);\n }\n\n return this;\n }\n\n off(eType: Evt, callback?: EventCallback): this;\n off(eType: Evt, query: EventQuery, callback: EventCallback): this;\n off(\n eType: Evt,\n query?: EventQuery | EventCallback,\n cb?: EventCallback\n ): this {\n const callback = (cb ?? query) as EventCallback;\n if (ComposedEventMapper[eType as string]) {\n if (callback) {\n this._composedEventMap.get(callback)?.event.unregister();\n this._composedEventMap.delete(callback);\n } else {\n for (const entry of this._composedEventMap.entries()) {\n if (entry[1].eventType === eType) {\n this._composedEventMap.get(entry[0])?.event.unregister();\n this._composedEventMap.delete(entry[0]);\n }\n }\n }\n } else {\n if (callback) {\n const handler: EventHandler = {\n callback,\n query: null,\n // 卸载事件时无需处理 source 以外的参数\n filter: {\n nodeName: null,\n type: eType,\n level: null,\n source: (query as EventQuery).source,\n markName: null,\n filter: null,\n userId: null\n }\n };\n this._eventDispatcher.unregister(eType, handler);\n } else {\n this._eventDispatcher.unregister(eType);\n }\n }\n return this;\n }\n\n emit(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n this._eventDispatcher.dispatch(eType, params, level);\n return this;\n }\n\n prevent(eType: Evt, except?: EventCallback) {\n this._eventDispatcher.prevent(eType, except);\n return this;\n }\n\n allow(eType: Evt) {\n this._eventDispatcher.allow(eType);\n return this;\n }\n\n release(): void {\n this._eventDispatcher.clear();\n this._composedEventMap.clear();\n }\n}\n","import { Event_Bubble_Level } from '../constant/event';\nimport type { EventCallback, EventHandler, EventParams, EventBubbleLevel } from './interface';\n\nexport type BubbleNode = {\n handler: EventHandler;\n level: EventBubbleLevel;\n};\n\nexport class Bubble {\n private _map: Map, BubbleNode> = new Map();\n private _levelNodes: Map = new Map();\n\n constructor() {\n this._levelNodes.set(Event_Bubble_Level.vchart, []);\n this._levelNodes.set(Event_Bubble_Level.chart, []);\n this._levelNodes.set(Event_Bubble_Level.model, []);\n this._levelNodes.set(Event_Bubble_Level.mark, []);\n }\n\n addHandler(handler: EventHandler, level: EventBubbleLevel): this {\n const node: BubbleNode = { level, handler };\n this._levelNodes.get(level)?.push(node);\n this._map.set(handler.callback, node);\n return this;\n }\n\n removeHandler(handler: EventHandler): this {\n const node = this._map.get(handler.callback);\n if (!node) {\n return this;\n }\n this._map.delete(handler.callback);\n const nodes = this._levelNodes.get(node.level);\n // 由于顶层 API 封装不是 handler 形式,因此通过 callback 唯一判断\n const index = nodes?.findIndex(n => n.handler.callback === handler.callback);\n index !== undefined && index >= 0 && nodes?.splice(index, 1);\n return this;\n }\n\n preventHandler(handler: EventHandler): this {\n if (handler) {\n handler.prevented = true;\n }\n return this;\n }\n\n allowHandler(handler: EventHandler): this {\n if (handler) {\n handler.prevented = false;\n }\n return this;\n }\n\n getHandlers(level: EventBubbleLevel): EventHandler[] {\n return this._levelNodes.get(level)?.map(node => node.handler) || [];\n }\n\n getAllHandlers(): EventHandler[] {\n return Array.from(this._map.values()).map(node => node.handler) || [];\n }\n\n getCount() {\n return this._map.size;\n }\n\n release() {\n this._map.clear();\n this._levelNodes.clear();\n }\n}\n","import type { Dict } from '../type';\nimport isString from './isString';\n\nconst get = (obj: Dict, path: string | string[], defaultValue?: any): any => {\n const paths = isString(path) ? (path as string).split('.') : path;\n\n for (let p = 0; p < paths.length; p++) {\n obj = obj ? obj[paths[p]] : undefined;\n }\n return obj === undefined ? defaultValue : obj;\n};\n\nexport default get;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/debounce.js\n */\nimport isObject from './isObject';\nimport isValidNumber from './isValidNumber';\n\nexport type FunctionControlOptions = {\n // 是否在等待开始时调用\n leading?: boolean;\n // 是否在等待结束后调用\n trailing?: boolean;\n // 最长等待时间\n maxWait?: number;\n};\n\nlet hasRaf: boolean = false;\ntry {\n hasRaf = typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function';\n} catch (err) {\n hasRaf = false;\n}\nhasRaf = false;\n\nfunction debounce(\n func: (...args: T[]) => S,\n wait: number,\n options?: FunctionControlOptions\n): (...args: T[]) => S {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number;\n let result: any;\n // eslint-disable-next-line no-undef\n let timerId: number | NodeJS.Timeout | undefined;\n let lastCallTime: number | undefined;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && hasRaf;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(isValidNumber(options.maxWait) ? options.maxWait : 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n cancelAnimationFrame(timerId as number);\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n function cancelTimer(id: number) {\n if (useRAF) {\n return cancelAnimationFrame(id);\n }\n clearTimeout(id);\n }\n\n function leadingEdge(time: number) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const timeWaiting = wait - timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const 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 (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\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 cancelTimer(timerId as number);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function pending() {\n return timerId !== undefined;\n }\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n // @ts-ignore\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 timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n return debounced;\n}\n\nexport default debounce;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\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,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n","/**\n * @file\n * Don't import any type, this may lead to CIRCULAR_DEPENDENCY\n */\n\nexport enum BuiltInEncodeNames {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n group = 'group',\n connectNulls = 'connectNulls'\n}\n\n/**\n * state of diff\n */\nexport enum DiffState {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n unChange = 'unChange'\n}\n/**\n * mark类型\n */\nexport enum GrammarMarkType {\n // basic mark\n arc = 'arc',\n arc3d = 'arc3d',\n area = 'area',\n image = 'image',\n line = 'line',\n path = 'path',\n rect = 'rect',\n rect3d = 'rect3d',\n rule = 'rule',\n shape = 'shape',\n symbol = 'symbol',\n text = 'text',\n richtext = 'richtext',\n polygon = 'polygon',\n pyramid3d = 'pyramid3d',\n circle = 'circle',\n\n // grammer mark\n cell = 'cell',\n interval = 'interval',\n\n // group mark\n group = 'group',\n\n // glyph mark\n glyph = 'glyph',\n\n // component mark\n component = 'component',\n\n // large mark\n largeRects = 'largeRects',\n largeSymbols = 'largeSymbols'\n}\n\n/**\n * built-in component type\n */\nexport enum ComponentEnum {\n axis = 'axis',\n grid = 'grid',\n legend = 'legend',\n slider = 'slider',\n label = 'label',\n datazoom = 'datazoom',\n player = 'player',\n title = 'title',\n scrollbar = 'scrollbar'\n}\n\nexport enum DataFilterRank {\n player = 1,\n rollUp = 2,\n drillDown = 3,\n slider = 4,\n datazoom = 5,\n legend = 6,\n scrollbar = 7,\n brush = 8,\n normal = 9\n}\n\nexport enum AxisEnum {\n lineAxis = 'lineAxis',\n circleAxis = 'circleAxis'\n}\n\nexport enum GridEnum {\n lineAxisGrid = 'lineAxisGrid',\n circleAxisGrid = 'circleAxisGrid'\n}\n\nexport enum LegendEnum {\n discreteLegend = 'discreteLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend'\n}\n\nexport enum CrosshairEnum {\n lineCrosshair = 'lineCrosshair',\n rectCrosshair = 'rectCrosshair',\n sectorCrosshair = 'sectorCrosshair',\n circleCrosshair = 'circleCrosshair',\n polygonCrosshair = 'polygonCrosshair',\n ringCrosshair = 'ringCrosshair'\n}\n\nexport enum LabelEnum {\n symbolLabel = 'symbolLabel',\n rectLabel = 'rectLabel',\n lineLabel = 'lineLabel',\n dataLabel = 'dataLabel'\n}\n\nexport enum PlayerEnum {\n continuousPlayer = 'continuousPlayer',\n discretePlayer = 'discretePlayer'\n}\n\n/** 布局阶段 */\nexport enum LayoutState {\n before = 'before',\n layouting = 'layouting',\n reevaluate = 'reevaluate',\n after = 'after'\n}\n\nexport enum HOOK_EVENT {\n BEFORE_EVALUATE_DATA = 'beforeEvaluateData',\n AFTER_EVALUATE_DATA = 'afterEvaluateData',\n\n BEFORE_EVALUATE_SCALE = 'beforeEvaluateScale',\n AFTER_EVALUATE_SCALE = 'afterEvaluateScale',\n\n BEFORE_PARSE_VIEW = 'beforeParseView',\n AFTER_PARSE_VIEW = 'afterParseView',\n\n BEFORE_TRANSFORM = 'beforeTransform',\n AFTER_TRANSFORM = 'afterTransform',\n\n BEFORE_CREATE_VRENDER_STAGE = 'beforeCreateVRenderStage',\n AFTER_CREATE_VRENDER_STAGE = 'afterCreateVRenderStage',\n\n BEFORE_CREATE_VRENDER_LAYER = 'beforeCreateVRenderLayer',\n AFTER_CREATE_VRENDER_LAYER = 'afterCreateVRenderLayer',\n\n BEFORE_STAGE_RESIZE = 'beforeStageResize',\n AFTER_STAGE_RESIZE = 'afterStageResize',\n\n BEFORE_VRENDER_DRAW = 'beforeVRenderDraw',\n AFTER_VRENDER_DRAW = 'afterVRenderDraw',\n\n BEFORE_MARK_JOIN = 'beforeMarkJoin',\n AFTER_MARK_JOIN = 'afterMarkJoin',\n BEFORE_MARK_UPDATE = 'beforeMarkUpdate',\n AFTER_MARK_UPDATE = 'afterMarkUpdate',\n BEFORE_MARK_STATE = 'beforeMarkState',\n AFTER_MARK_STATE = 'afterMarkState',\n BEFORE_MARK_ENCODE = 'beforeMarkEncode',\n AFTER_MARK_ENCODE = 'afterMarkEncode',\n\n BEFORE_DO_LAYOUT = 'beforeDoLayout',\n AFTER_DO_LAYOUT = 'afterDoLayout',\n\n BEFORE_MARK_LAYOUT_END = 'beforeMarkLayoutEnd',\n AFTER_MARK_LAYOUT_END = 'afterMarkLayoutEnd',\n\n BEFORE_DO_RENDER = 'beforeDoRender',\n AFTER_DO_RENDER = 'afterDoRender',\n\n BEFORE_MARK_RENDER_END = 'beforeMarkRenderEnd',\n AFTER_MARK_RENDER_END = 'afterMarkRenderEnd',\n\n BEFORE_CREATE_VRENDER_MARK = 'beforeCreateVRenderMark',\n AFTER_CREATE_VRENDER_MARK = 'afterCreateVRenderMark',\n\n BEFORE_ADD_VRENDER_MARK = 'beforeAddVRenderMark',\n AFTER_ADD_VRENDER_MARK = 'afterAddVRenderMark',\n\n AFTER_VRENDER_NEXT_RENDER = 'afterVRenderNextRender',\n\n BEFORE_ELEMENT_UPDATE_DATA = 'beforeElementUpdateData',\n AFTER_ELEMENT_UPDATE_DATA = 'afterElementUpdateData',\n\n BEFORE_ELEMENT_STATE = 'beforeElementState',\n AFTER_ELEMENT_STATE = 'afterElementState',\n\n BEFORE_ELEMENT_ENCODE = 'beforeElementEncode',\n AFTER_ELEMENT_ENCODE = 'afterElementEncode',\n\n ANIMATION_START = 'animationStart',\n ANIMATION_END = 'animationEnd',\n\n ELEMENT_ANIMATION_START = 'elementAnimationStart',\n ELEMENT_ANIMATION_END = 'elementAnimationEnd',\n\n ALL_ANIMATION_START = 'allAnimationStart',\n ALL_ANIMATION_END = 'allAnimationEnd'\n}\n\nexport enum GrammarTypeEnum {\n signal = 'signal',\n data = 'data',\n scale = 'scale',\n coordinate = 'coordinate',\n mark = 'mark'\n}\n\nexport enum InteractionStateEnum {\n active = 'active',\n selected = 'selected',\n highlight = 'highlight',\n blur = 'blur'\n}\n","import { array, isString } from '@visactor/vutils';\nimport type { GlyphDefaultEncoder, IGlyphMeta, GlyphChannelEncoder, MarkType, GlyphFunctionEncoder } from '../types';\nexport class GlyphMeta\n implements IGlyphMeta\n{\n private marks: { [markName: string]: MarkType };\n\n private channelEncoder: { [channel: string]: GlyphChannelEncoder } = {};\n private defaultEncoder: GlyphDefaultEncoder;\n private functionEncoder: GlyphFunctionEncoder;\n private progressiveChannels: string[];\n\n constructor(\n marks: { [markName: string]: MarkType },\n encoders?: { [markName: string]: GlyphChannelEncoder },\n defaultEncoder?: GlyphDefaultEncoder,\n progressiveChannels?: string | string[]\n ) {\n this.marks = marks;\n if (encoders) {\n this.registerChannelEncoder(encoders);\n }\n if (defaultEncoder) {\n this.registerDefaultEncoder(defaultEncoder);\n }\n if (this.progressiveChannels) {\n this.registerProgressiveChannels(progressiveChannels);\n }\n }\n\n getMarks() {\n return this.marks;\n }\n\n registerChannelEncoder(encoders: {\n [markName: string]: GlyphChannelEncoder;\n }): this;\n registerChannelEncoder(channel: string, encoder: GlyphChannelEncoder): this;\n registerChannelEncoder(\n channel: string | { [markName: string]: GlyphChannelEncoder },\n encoder?: GlyphChannelEncoder\n ) {\n if (isString(channel)) {\n this.channelEncoder[channel] = encoder;\n } else {\n Object.assign(this.channelEncoder, channel);\n }\n return this;\n }\n registerFunctionEncoder(encoder: GlyphFunctionEncoder) {\n this.functionEncoder = encoder;\n return this;\n }\n\n registerDefaultEncoder(encoder: GlyphDefaultEncoder) {\n this.defaultEncoder = encoder;\n return this;\n }\n\n registerProgressiveChannels(channels: string | string[]) {\n this.progressiveChannels = array(channels);\n return this;\n }\n\n getChannelEncoder() {\n return this.channelEncoder;\n }\n getFunctionEncoder() {\n return this.functionEncoder;\n }\n\n getDefaultEncoder() {\n return this.defaultEncoder;\n }\n\n getProgressiveChannels() {\n return this.progressiveChannels;\n }\n}\n","import { Bubble } from './bubble';\nimport { isValid, debounce, throttle, get, isFunction } from '@visactor/vutils';\nimport { BASE_EVENTS, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type {\n EventType,\n EventQuery,\n EventHandler,\n EventParamsDefinition,\n IEventDispatcher,\n EventBubbleLevel,\n BaseEventParams,\n EventParams,\n EventFilter,\n EventSourceType,\n InteractionEventParam,\n EventCallback\n} from './interface';\nimport type { VChart } from '../core/vchart';\nimport type { CompilerListenerParameters } from '../compile/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { StringOrNumber } from '../typings';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { IComponent } from '../component/interface';\nimport { Factory as VGrammarFactory } from '@visactor/vgrammar-core';\n\nconst componentTypeMap: Record = {\n cartesianAxis: 'axis',\n 'cartesianAxis-band': 'axis',\n 'cartesianAxis-linear': 'axis',\n 'cartesianAxis-time': 'axis',\n polarAxis: 'axis',\n 'polarAxis-band': 'axis',\n 'polarAxis-linear': 'axis',\n discreteLegend: 'legend',\n continuousLegend: 'legend',\n colorLegend: 'legend',\n sizeLegend: 'legend'\n // 组件的 type 如果没有细化的分类,不需要在这里进行映射\n // label: 'label',\n // markLine: 'markLine',\n // markArea: 'markArea',\n // markPoint: 'markPoint',\n // polarMarkLine: 'polarMarkLine',\n // polarMarkArea: 'polarMarkArea',\n // polarMarkPoint: 'polarMarkPoint',\n // geoMarkPoint: 'geoMarkPoint'\n};\n\nexport class EventDispatcher implements IEventDispatcher {\n globalInstance: VChart;\n\n // view 事件与 window 事件视作为不同类型的事件信息,进行独立的冒泡处理\n private _viewBubbles: Map = new Map();\n private _windowBubbles: Map = new Map();\n private _canvasBubbles: Map = new Map();\n\n private _viewListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _windowListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _canvasListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n\n private _compiler: Compiler;\n\n constructor(vchart: VChart, compiler: Compiler) {\n this.globalInstance = vchart;\n this._compiler = compiler;\n }\n\n register(eType: Evt, handler: EventHandler): this {\n // 解析 query 配置并生成最终 handler 内容\n this._parseQuery(handler);\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler.filter?.source || Event_Source_Type.chart);\n\n if (!bubbles.get(eType)) {\n bubbles.set(eType, new Bubble());\n }\n\n // 挂载事件监听\n const bubble = bubbles.get(eType) as Bubble;\n bubble.addHandler(handler, handler.filter?.level as EventBubbleLevel);\n if (this._isValidEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegate.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n } else if (this._isInteractionEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegateInteractionEvent.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n }\n return this;\n }\n\n unregister(eType: Evt, handler?: EventHandler): this {\n let clean: boolean = false;\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler?.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler?.filter?.source || Event_Source_Type.chart);\n\n if (!handler) {\n const bubble = bubbles.get(eType);\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n } else {\n const bubble = bubbles.get(eType);\n bubble?.removeHandler(handler);\n if (bubble?.getCount() === 0) {\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n }\n\n if ((handler?.wrappedCallback as any)?.cancel) {\n // 取消debounce/throttle事件,释放闭包内部的上下文对象\n (handler.wrappedCallback as any).cancel();\n }\n }\n // 某个事件下所有的监听取消之后删除语法层事件的代理\n if (clean && this._isValidEvent(eType)) {\n const callback = listeners.get(eType) as (params: CompilerListenerParameters) => void;\n this._compiler.removeEventListener(handler?.filter?.source || Event_Source_Type.chart, eType, callback);\n listeners.delete(eType);\n }\n return this;\n }\n\n dispatch(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n // 默认事件类别为 view\n const bubble = this.getEventBubble((params as BaseEventParams).source || Event_Source_Type.chart).get(\n eType\n ) as Bubble;\n // 没有任何监听事件时,bubble 不存在\n if (!bubble) {\n return this;\n }\n\n // 事件冒泡逻辑:Mark -> Model -> Chart -> VChart\n let stopBubble: boolean = false;\n\n if (level) {\n // 如果指定了 level,则直接处理,不进行冒泡\n const handlers = bubble.getHandlers(level);\n stopBubble = this._invoke(handlers, eType, params);\n } else {\n const levels = [\n Event_Bubble_Level.mark,\n Event_Bubble_Level.model,\n Event_Bubble_Level.chart,\n Event_Bubble_Level.vchart\n ];\n let i = 0;\n\n // Mark 级别的事件只包含对语法层代理的基础事件\n while (!stopBubble && i < levels.length) {\n stopBubble = this._invoke(bubble.getHandlers(levels[i]), eType, params);\n i++;\n }\n }\n\n return this;\n }\n\n prevent(eType: Evt, except?: EventCallback): this {\n const eventTypes = ['canvas', 'chart', 'window'] as EventSourceType[];\n eventTypes.forEach(type => {\n const bubble = this.getEventBubble(type).get(eType);\n if (bubble) {\n bubble.getAllHandlers().forEach(handler => {\n if (!except || handler.callback !== except) {\n bubble.preventHandler(handler);\n }\n });\n }\n });\n return this;\n }\n\n allow(eType: Evt): this {\n const eventTypes = ['canvas', 'chart', 'window'] as EventSourceType[];\n eventTypes.forEach(type => {\n const bubble = this.getEventBubble(type).get(eType);\n if (bubble) {\n bubble.getAllHandlers().forEach(handler => bubble.allowHandler(handler));\n }\n });\n return this;\n }\n\n clear(): void {\n const types = [Event_Source_Type.chart, Event_Source_Type.window, Event_Source_Type.canvas];\n\n types.forEach(type => {\n const listeners = this.getEventListeners(type);\n for (const entry of listeners.entries()) {\n this._compiler.removeEventListener(type, entry[0], entry[1]);\n }\n listeners.clear();\n });\n\n [this._viewBubbles, this._windowBubbles, this._canvasBubbles].forEach(bubbles => {\n for (const bubble of bubbles.values()) {\n bubble.release();\n }\n bubbles.clear();\n });\n }\n\n release(): void {\n this.clear();\n this.globalInstance = null;\n this._compiler = null;\n }\n\n /**\n * 基于转换后的事件筛选配置过滤需要调用的 handler\n */\n private _filter(filter: EventFilter, evt: Evt, params: EventParamsDefinition[Evt]): boolean {\n if (isFunction(filter.filter) && !filter.filter(params)) {\n return false;\n }\n\n // 事件 level 不需要筛选,在冒泡流程中已经处理了 level 的逻辑\n if (filter.nodeName && get(params, 'node.name') !== filter.nodeName) {\n return false;\n }\n\n if (filter.markName && (params as BaseEventParams)?.mark?.name !== filter.markName) {\n // 对于 markName 的筛选需要包含所有父级 mark 的 name\n return false;\n }\n\n let modelType = params.model?.type;\n if (componentTypeMap[modelType]) {\n modelType = componentTypeMap[modelType];\n }\n if (filter.type && modelType !== filter.type) {\n return false;\n }\n\n // 如果配置了 level 为 'mark' 并且没有配置 type,则只在事件参数中包含了 mark 时才触发\n if (filter.level === 'mark' && !filter.type && !(params as BaseEventParams)?.mark) {\n return false;\n }\n\n // 如果配置了 level 为 'model' 并且没有配置 type,则只在事件参数中包含了 model 时才触发\n if (filter.level === 'model' && !filter.type && !(params as BaseEventParams)?.model) {\n return false;\n }\n\n if (isValid(filter.userId) && params.model?.userId !== filter.userId) {\n return false;\n }\n\n return true;\n }\n\n private _prepareParams(\n filter: EventFilter,\n params: EventParamsDefinition[Evt]\n ): EventParamsDefinition[Evt] {\n // 如果针对于 mark 做了筛选,则事件参数转为筛选器制定的父级 mark\n if (filter.markName && params.mark && (params as BaseEventParams).itemMap) {\n const markId = params.mark.getProductId();\n const item = (params as BaseEventParams).itemMap.get(markId);\n const datum = item?.getDatum();\n return { ...params, item, datum };\n }\n return { ...params };\n }\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegate = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const model = (isValid(listenerParams.modelId) && chart?.getModelById(listenerParams.modelId)) || undefined;\n const mark = (isValid(listenerParams.markId) && chart?.getMarkById(listenerParams.markId)) || null;\n\n // FIXME: 这里操作的应当是场景树结构,与 vgrammar 结构无关\n // 遍历取到所有父级的 mark 以支持子元素响应父元素事件\n const itemMap = new Map();\n let targetMark: any = listenerParams.item?.mark;\n if (targetMark && isValid(targetMark.id())) {\n itemMap.set(targetMark.id(), listenerParams.item);\n }\n while (targetMark?.elements) {\n const id = targetMark.id();\n // 由于父级的 markName 可能重复,因此只取最近的父级 mark\n if (isValid(id) && !itemMap.has(id)) {\n itemMap.set(id, targetMark.elements[0]);\n }\n targetMark = targetMark.group;\n }\n\n const node = get(listenerParams.event, 'target');\n\n let datum = listenerParams.datum;\n if (model && model.modelType === 'component') {\n datum = (model as IComponent).getDatum(node) ?? datum;\n }\n\n const params: BaseEventParams = {\n event: listenerParams.event,\n item: listenerParams.item,\n source: listenerParams.source,\n datum,\n itemMap,\n chart,\n model,\n mark: mark ?? undefined,\n node: get(listenerParams.event, 'target')\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegateInteractionEvent = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const event = listenerParams.event;\n let items: IElement[] = null;\n\n if ((event as any).elements) {\n items = (event as any).elements;\n }\n const params: InteractionEventParam = {\n event: listenerParams.event,\n chart,\n items,\n datums:\n items &&\n items.map(item => {\n return item.getDatum();\n })\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 调用相应事件监听下的 handlers\n */\n private _invoke(\n handlers: EventHandler[],\n type: EventType,\n params: EventParamsDefinition[Evt]\n ): boolean {\n const result = handlers.map(handler => {\n const filter = handler.filter as EventFilter;\n if (!handler.prevented && (!handler.query || this._filter(filter, type, params))) {\n const callback = handler.wrappedCallback || handler.callback;\n const stopBubble = callback.call(null, this._prepareParams(filter, params));\n const doStopBubble = stopBubble ?? handler.query?.consume;\n if (doStopBubble) {\n (params as BaseEventParams).event?.stopPropagation();\n (params as BaseEventParams).event?.preventDefault();\n }\n return !!doStopBubble;\n }\n return undefined;\n });\n // 如果某个事件回调阻止了冒泡,则阻止更高级别事件的调用过程\n return result.some(r => r === true);\n }\n\n /**\n * 依据事件 query 得到事件冒泡层级\n */\n private _getQueryLevel(query: EventQuery | null): EventBubbleLevel {\n // 事件默认监听在 vchart 层\n if (!query) {\n return Event_Bubble_Level.vchart;\n }\n if (query.level) {\n return query.level;\n }\n if (isValid(query.id)) {\n return Event_Bubble_Level.model;\n }\n\n return Event_Bubble_Level.vchart;\n }\n\n /**\n * 将用户 query 配置转换为最终事件筛选参数\n */\n private _parseQuery(handler: EventHandler): EventHandler {\n const query = handler.query;\n // 处理 query 带来的函数封装\n if (query?.throttle) {\n handler.wrappedCallback = throttle(handler.callback, query.throttle);\n } else if (query?.debounce) {\n handler.wrappedCallback = debounce(handler.callback, query.debounce);\n }\n let level = this._getQueryLevel(query);\n let type: string | null = null;\n let source: EventSourceType = Event_Source_Type.chart;\n let nodeName: string | null = null;\n let markName: string | null = null;\n let userId: StringOrNumber | null = null;\n\n if (query?.nodeName) {\n nodeName = query.nodeName;\n }\n\n if (query?.markName) {\n markName = query.markName;\n }\n\n if (query?.type && (level === Event_Bubble_Level.model || level === Event_Bubble_Level.mark)) {\n type = query.type;\n }\n if (query?.source) {\n source = query.source;\n }\n\n if (isValid(query?.id)) {\n userId = query?.id;\n level = Event_Bubble_Level.model; // 如果用户配置了 id,那么默认 level 为 model\n }\n handler.filter = {\n level,\n markName,\n type,\n source,\n nodeName,\n userId,\n filter: query?.filter ?? null\n };\n return handler;\n }\n\n private getEventBubble(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewBubbles;\n case Event_Source_Type.window:\n return this._windowBubbles;\n case Event_Source_Type.canvas:\n return this._canvasBubbles;\n default:\n return this._viewBubbles;\n }\n }\n\n private getEventListeners(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewListeners;\n case Event_Source_Type.window:\n return this._windowListeners;\n case Event_Source_Type.canvas:\n return this._canvasListeners;\n default:\n return this._viewListeners;\n }\n }\n\n private _isValidEvent(eType: string) {\n return BASE_EVENTS.includes(eType) || (Object.values(VGRAMMAR_HOOK_EVENT) as string[]).includes(eType);\n }\n\n private _isInteractionEvent(eType: string) {\n let interactionType: string;\n\n return (\n eType &&\n ((interactionType = eType.split(':')[0]), interactionType) &&\n VGrammarFactory.hasInteraction(interactionType)\n );\n }\n}\n","export default function(x) {\n return x;\n}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\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 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","export default function noop() {}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n areaRingSum = 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.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\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 noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, 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\nexport default boundsStream;\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 {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 adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = 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.reset();\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","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return 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._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\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 var 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 return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : 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 return path.projection(projection).context(context);\n}\n","/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexport default clone;\n","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 { getCoords } from \"@turf/invariant\";\n/**\n * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.\n *\n * @name booleanClockwise\n * @param {Feature|LineString|Array>} line to be evaluated\n * @returns {boolean} true/false\n * @example\n * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);\n * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);\n *\n * turf.booleanClockwise(clockwiseRing)\n * //=true\n * turf.booleanClockwise(counterClockwiseRing)\n * //=false\n */\nexport default function booleanClockwise(line) {\n var ring = getCoords(line);\n var sum = 0;\n var i = 1;\n var prev;\n var cur;\n while (i < ring.length) {\n prev = cur || ring[0];\n cur = ring[i];\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n i++;\n }\n return sum > 0;\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","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 clone from '@turf/clone';\nimport booleanClockwise from '@turf/boolean-clockwise';\nimport { featureEach, geomEach } from '@turf/meta';\nimport { getCoords } from '@turf/invariant';\nimport { isObject, featureCollection } from '@turf/helpers';\n\n/**\n * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).\n *\n * @name rewind\n * @param {GeoJSON} geojson input GeoJSON Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.reverse=false] enable reverse winding\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} rewind Polygon\n * @example\n * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);\n *\n * var rewind = turf.rewind(polygon);\n *\n * //addToMap\n * var addToMap = [rewind];\n */\nfunction rewind(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var reverse = options.reverse || false;\n var mutate = options.mutate || false;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof reverse !== \"boolean\")\n throw new Error(\" must be a boolean\");\n if (typeof mutate !== \"boolean\")\n throw new Error(\" must be a boolean\");\n\n // prevent input mutation\n if (mutate === false) geojson = clone(geojson);\n\n // Support Feature Collection or Geometry Collection\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"FeatureCollection\":\n featureEach(geojson, function (feature) {\n featureEach(rewindFeature(feature, reverse), function (result) {\n results.push(result);\n });\n });\n return featureCollection(results);\n }\n // Support Feature or Geometry Objects\n return rewindFeature(geojson, reverse);\n}\n\n/**\n * Rewind\n *\n * @private\n * @param {Geometry|Feature} geojson Geometry or Feature\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {Geometry|Feature} rewind Geometry or Feature\n */\nfunction rewindFeature(geojson, reverse) {\n var type = geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n\n // Support all GeoJSON Geometry Objects\n switch (type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"LineString\":\n rewindLineString(getCoords(geojson), reverse);\n return geojson;\n case \"Polygon\":\n rewindPolygon(getCoords(geojson), reverse);\n return geojson;\n case \"MultiLineString\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindLineString(lineCoords, reverse);\n });\n return geojson;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindPolygon(lineCoords, reverse);\n });\n return geojson;\n case \"Point\":\n case \"MultiPoint\":\n return geojson;\n }\n}\n\n/**\n * Rewind LineString - outer ring clockwise\n *\n * @private\n * @param {Array>} coords GeoJSON LineString geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindLineString(coords, reverse) {\n if (booleanClockwise(coords) === reverse) coords.reverse();\n}\n\n/**\n * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.\n *\n * @private\n * @param {Array>>} coords GeoJSON Polygon geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindPolygon(coords, reverse) {\n // outer ring\n if (booleanClockwise(coords[0]) !== reverse) {\n coords[0].reverse();\n }\n // inner rings\n for (var i = 1; i < coords.length; i++) {\n if (booleanClockwise(coords[i]) === reverse) {\n coords[i].reverse();\n }\n }\n}\n\nexport default rewind;\n","import { flattenEach } from '@turf/meta';\nimport { featureCollection } from '@turf/helpers';\n\n/**\n * Flattens any {@link GeoJSON} to a {@link FeatureCollection} inspired by [geojson-flatten](https://github.com/tmcw/geojson-flatten).\n *\n * @name flatten\n * @param {GeoJSON} geojson any valid GeoJSON Object\n * @returns {FeatureCollection} all Multi-Geometries are flattened into single Features\n * @example\n * var multiGeometry = turf.multiPolygon([\n * [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],\n * [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],\n * [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]\n * ]);\n *\n * var flatten = turf.flatten(multiGeometry);\n *\n * //addToMap\n * var addToMap = [flatten]\n */\nfunction flatten(geojson) {\n if (!geojson) throw new Error(\"geojson is required\");\n\n var results = [];\n flattenEach(geojson, function (feature) {\n results.push(feature);\n });\n return featureCollection(results);\n}\n\nexport default flatten;\n","import { geoPath } from 'd3-geo';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport trufRewind from '@turf/rewind';\nimport flatten from '@turf/flatten';\nimport { isObject } from '@visactor/vutils';\n\nconst geoPathInstance = geoPath();\nexport interface IGeoJSONOptions {\n centroid?: boolean;\n name?: boolean;\n bbox?: boolean;\n rewind?:\n | boolean\n | {\n reverse?: boolean;\n };\n}\n\nexport const DEFAULT_GEOJSON_OPTIONS = {\n centroid: false,\n name: false,\n bbox: false,\n rewind: false\n};\nexport const MultiToSingle = (feature: any) => {\n if (feature.geometry.type.startsWith('Multi')) {\n const f = flatten(feature).features[0];\n return { ...f, ...f.properties };\n }\n return { ...feature, ...feature.properties };\n};\nexport const flattenFeature = (data: any[]) => {\n const featuresArr: any[] = [];\n data.forEach((item: any) => {\n if (item.type === 'FeatureCollection') {\n // featureCollection\n item.features.forEach((feature: any) => {\n featuresArr.push(MultiToSingle(feature));\n });\n } else {\n // feature\n featuresArr.push(MultiToSingle(item));\n }\n });\n return featuresArr;\n};\n\n/**\n * 解析geojson\n * @param data\n * @param _options\n * @param dataView\n * @returns\n */\nexport const geoJSONParser: Parser = (data: any, options: IGeoJSONOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n\n const mergeOptions: IGeoJSONOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, options);\n\n const { centroid, name, bbox, rewind } = mergeOptions;\n if (Array.isArray(data)) {\n return flattenFeature(data);\n }\n let features: any[] = data.features;\n if (rewind) {\n features = trufRewind(data, { reverse: isObject(rewind) ? rewind.reverse : true }).features;\n }\n features.forEach(feature => {\n if (centroid) {\n const centroid = geoPathInstance.centroid(feature);\n feature.centroidX = centroid[0];\n feature.centroidY = centroid[1];\n }\n\n if (name) {\n feature.name = feature.properties.name;\n }\n\n if (bbox) {\n const bbox = geoPathInstance.bounds(feature);\n feature.bbox = bbox;\n }\n });\n\n data.features = features;\n return data;\n};\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import { feature } from 'topojson-client';\nimport type { Topology } from 'topojson-specification';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { IGeoJSONOptions } from './geojson';\nimport { DEFAULT_GEOJSON_OPTIONS, geoJSONParser } from './geojson';\n\nexport interface ITopoJsonParserOptions extends IGeoJSONOptions {\n object: string; // TopoJSON 相当于多个 GeoJSON 合并起来做了压缩,其中每一个 object 都相当于一份 GeoJSON 数据,指定 object 就是从中提取一份 Geo 数据\n}\n\nconst DEFAULT_TOPOJSON_OPTIONS = {};\n/**s\n * topojson 数据解析\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const topoJSONParser: Parser = (data: Topology, options: ITopoJsonParserOptions, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n const mergeOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, DEFAULT_TOPOJSON_OPTIONS, options);\n const { object } = mergeOptions;\n if (!isString(object)) {\n throw new TypeError('Invalid object: must be a string!');\n }\n const geoData = feature(data, data.objects[object]);\n return geoJSONParser(geoData, mergeOptions, dataView);\n};\n","import geoSimplify from 'simplify-geojson';\nimport type { FeatureCollection } from '@turf/helpers';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { Transform } from '..';\n\nexport interface ISimplifyOptions {\n tolerance?: number; // 简化容差,默认0.01\n}\n\nconst DEFAULT_SIMPLIFY_OPTIONS: ISimplifyOptions = {\n tolerance: 0.01\n};\n/**\n * 简化\n * @param data\n * @param options\n * @returns\n */\nexport const simplify: Transform = (data: FeatureCollection, options?: ISimplifyOptions): FeatureCollection => {\n const mergeOptions = mergeDeepImmer(DEFAULT_SIMPLIFY_OPTIONS, options);\n const { tolerance } = mergeOptions;\n return geoSimplify(data, tolerance);\n};\n","import type { DataSet, Parser, Transform } from '@visactor/vdataset';\n\nexport function registerDataSetInstanceTransform(dataSet: DataSet, name: string, transform: Transform) {\n if (!dataSet.getTransform(name)) {\n dataSet.registerTransform(name, transform);\n }\n}\n\nexport function registerDataSetInstanceParser(dataSet: DataSet, name: string, parse: Parser) {\n if (!dataSet.getParser(name)) {\n dataSet.registerParser(name, parse);\n }\n}\n","import { cloneDeep } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n\nfunction copyOneDataView(d: DataView, deep = false) {\n let _deep = deep;\n if (d.latestData instanceof DataView) {\n _deep = false;\n }\n if (_deep) {\n return cloneDeep(d.latestData);\n }\n\n return d.latestData && d.latestData.slice();\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const copyDataView = (data: Array, options?: ICopyDataViewOption) => {\n if (data.length === 0) {\n return [];\n }\n if (data.length === 1) {\n return copyOneDataView(data[0], options?.deep);\n }\n return data.map(d => copyOneDataView(d, options?.deep));\n};\n\nexport interface ICopyDataViewOption {\n deep?: boolean;\n}\n","import { warn } from '../util/debug';\nimport { isString, cloneDeep } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView } from '@visactor/vdataset';\nimport type { IDataViewOptions, IFields, ITransformOptions } from '@visactor/vdataset';\nimport type { IDataValues, SheetParseOptions } from '../typings/spec/common';\nimport { registerDataSetInstanceTransform } from './register';\nimport { copyDataView } from './transforms/copy-data-view';\nimport type { IParserOptions } from '@visactor/vdataset';\n\nexport function initializeData() {\n // todo\n}\n\nexport function initCSVData() {\n // todo\n}\n\nexport function initData() {\n // todo\n}\n\nexport function initFoldData() {\n // todo\n}\n\nexport function dataViewFromDataView(rawData: DataView, dataSet?: DataSet, op?: IDataViewOptions) {\n dataSet = dataSet instanceof DataSet ? dataSet : rawData.dataSet;\n registerDataSetInstanceTransform(dataSet, 'copyDataView', copyDataView);\n const viewData = new DataView(dataSet, op);\n viewData.parse([rawData], {\n type: 'dataview'\n });\n viewData.transform({\n type: 'copyDataView',\n level: TransformLevel.copyDataView\n });\n return viewData;\n}\n\n/**\n * 将数据实例化为 DataView\n * @param data 数据\n * @param dataSet 数据集\n * @returns\n */\nexport function dataToDataView(data: DataView | IDataValues, dataSet: DataSet, sourceDataViews: DataView[] = []) {\n if (data instanceof DataView) {\n return data;\n }\n\n const { id, values = [], fromDataIndex, fromDataId, transforms = [] } = data;\n const parser = (data.parser ? cloneDeep(data.parser) : { clone: true }) as IParserOptions;\n const fields = cloneDeep(data.fields);\n // set parser.clone default value to true\n parser.clone = !(parser.clone === false);\n let dataView: DataView;\n const existDataView = sourceDataViews.find(dv => dv.name === id);\n if (existDataView) {\n dataView = existDataView;\n } else {\n const initOption: IDataViewOptions = { name: id };\n // fields 支持在dataView初始化参数中传入\n if (fields) {\n initOption.fields = fields as IFields;\n }\n dataView = new DataView(dataSet, initOption);\n if (typeof fromDataId === 'string') {\n // 使用id查找上游dataview\n const fromDataView = sourceDataViews.find(dv => dv.name === fromDataId);\n if (!fromDataView) {\n warn(`no data matches fromDataId ${fromDataId}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (typeof fromDataIndex === 'number') {\n // 使用index查找上游dataview\n const fromDataView = sourceDataViews[fromDataIndex];\n if (!fromDataView) {\n warn(`no data matches fromDataIndex ${fromDataIndex}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (Array.isArray(values)) {\n dataView.parse(values, parser);\n } else if (isString(values) && (!parser || ['csv', 'dsv', 'tsv'].includes((parser as SheetParseOptions).type))) {\n // 内置 csv parser\n dataView.parse(values, (parser as SheetParseOptions) ?? { type: 'csv' });\n } else {\n // 如果 values 不符合要求,则默认设置为 [],同时打印错误信息\n dataView.parse([]);\n warn('values should be array');\n }\n // 处理transform\n if (transforms && transforms.length) {\n transforms.forEach((transform: ITransformOptions) => {\n if (dataSet.getTransform(transform.type)) {\n dataView.transform(transform);\n }\n });\n }\n }\n\n return dataView;\n}\n\nexport function updateDataViewInData(dataView: DataView, data: IDataValues, forceMerge: boolean) {\n if (!dataView) {\n return;\n }\n if (data.fields) {\n dataView.setFields(data.fields as any, forceMerge);\n }\n dataView.parseNewData(data.values, data.parser as any);\n}\n\nexport enum TransformLevel {\n copyDataView = -10,\n\n treemapFilter = -8,\n treemapFlatten = -7,\n\n dotObjFlat = -7,\n linkDotInfo = -7,\n sankeyLayout = -7,\n\n dataZoomFilter = -6,\n legendFilter = -5\n}\n","import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType, T>(\n signal: any\n): signal is SignalFunction {\n return !isFunction(signal) && !!(signal as SignalFunction)?.callback;\n}\n\nexport function parseFunctionType, T>(\n spec: GenericFunctionType | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction)?.callback;\n}\n\nexport function invokeFunctionType, T>(\n spec: GenericFunctionType | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction).callback) {\n if (element) {\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType(spec: ParameterFunctionType, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction, T>).callback) {\n return (spec as SignalFunction, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = (field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field as (datum: T) => symbol | string;\n }\n return (datum: T) => datum[field as string | symbol];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n","export type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { ICompilable } from '../compile/interface';\n\nexport enum AnimationStateEnum {\n appear = 'appear',\n disappear = 'disappear',\n enter = 'enter',\n update = 'update',\n state = 'state',\n exit = 'exit',\n normal = 'normal',\n // for hack\n none = 'none'\n}\n\nexport type IAnimationState = keyof typeof AnimationStateEnum;\n\nexport interface IAnimateState {\n animationState: { callback: (datum: any, element: any) => AnimationStateEnum };\n}\n\nexport interface IAnimate extends ICompilable {\n id: number;\n updateAnimateState: (state: AnimationStateEnum, noRender?: boolean) => void;\n getAnimationStateSignalName: () => string;\n // TODO: animation control\n // pause: () => void;\n // resume: () => void;\n}\n\nexport interface ICartesianGroupAnimationParams {\n direction: () => 'x' | 'y';\n orient: () => 'positive' | 'negative';\n width: () => number;\n height: () => number;\n}\n","import { isFunction, isObject } from '@visactor/vutils';\nimport type { IGrammarBase } from '../types';\nimport { isGrammar } from './util';\n\nexport const parseOptionValue = (value: IGrammarBase | any, params: any) => {\n if (isGrammar(value)) {\n return value.output();\n } else if (value && isObject(value)) {\n if (isFunction(value.callback)) {\n return (datum: any) => {\n return value.callback(datum, params);\n };\n }\n\n if (isFunction(value.value)) {\n return value.value(params);\n }\n\n return value;\n }\n\n return value;\n};\n\nexport const parseOptions = (options: Record | Array, params: any) => {\n if (!options) {\n return options;\n }\n\n if (isObject(options)) {\n return Object.keys(options).reduce((res, key) => {\n const option = options[key];\n\n res[key] = parseOptionValue(option, params);\n\n return res;\n }, {});\n }\n\n return (options as Array).map(option => parseOptionValue(option, params));\n};\n","import { array, EventEmitter, isNil, isString, isValid } from '@visactor/vutils';\nimport type { GrammarType, IGrammarBase, IView, IGrammarTask, BaseEventHandler } from '../types';\nimport { parseOptions } from '../parse/option';\nimport { parseFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\n\nlet grammarBaseId = -1;\n\nexport abstract class GrammarBase extends EventEmitter implements IGrammarBase {\n readonly grammarType: GrammarType;\n\n readonly uid: number;\n protected _id: string;\n protected _name: string;\n\n protected spec: any = {};\n\n view: IView;\n rank: number;\n\n // FIXME: adapt current implementation of dataflow, refactor after dataflow design is finished\n grammarSource: IGrammarBase;\n references: Map = new Map();\n targets: IGrammarBase[] = [];\n transforms: IGrammarTask[] = [];\n\n constructor(view: IView) {\n super();\n this.view = view;\n this.uid = ++grammarBaseId;\n }\n\n parse(spec: any): this {\n this.id(spec.id);\n this.name(spec.name);\n this.depend(spec.dependency);\n return this;\n }\n\n depend(grammars: IGrammarBase[] | IGrammarBase | string[] | string) {\n if (this.spec?.dependency) {\n const lastGrammars = array(this.spec.dependency).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.detach(lastGrammars);\n }\n this.spec.dependency = grammars;\n const currentGrammars = array(grammars).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.attach(currentGrammars);\n\n this.commit();\n return this;\n }\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n emit>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n this.view?.emit?.(event, ...args);\n return super.emit(event, ...args);\n }\n\n emitGrammarEvent>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n return super.emit(event, ...args);\n }\n\n abstract evaluate(upstream: any, parameters: any): this;\n abstract output(): any;\n\n evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n set(value: any): boolean {\n // do nothing\n return false;\n }\n\n id(): string;\n id(id: string): this;\n id(id?: string) {\n if (arguments.length) {\n this.view.grammars.unrecord(this);\n this._id = id;\n this.view.grammars.record(this);\n return this;\n }\n return this._id;\n }\n\n name(): string;\n name(name: string): this;\n name(name?: string) {\n if (arguments.length) {\n this._name = name;\n return this;\n }\n return this._name;\n }\n\n attach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n if (isNil(reference)) {\n return;\n }\n if (!ref.targets.includes(this)) {\n ref.targets.push(this);\n }\n this.references.set(ref, (this.references.get(ref) ?? 0) + count);\n });\n return this;\n }\n\n detach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n const refCount = this.references.get(ref) - count;\n if (refCount > 0) {\n this.references.set(ref, refCount - 1);\n } else {\n this.references.delete(ref);\n if (ref.targets.includes(this)) {\n ref.targets = ref.targets.filter(target => target !== this);\n }\n }\n });\n return this;\n }\n\n detachAll() {\n this.references.forEach((count, ref) => {\n this.detach(ref, count);\n });\n }\n\n link(source: IGrammarBase) {\n this.grammarSource = source;\n }\n\n run() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n return this.evaluate(upstream, parameters);\n }\n\n commit() {\n this.view.commit(this);\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n getSpec() {\n return this.spec;\n }\n\n reuse(grammar: IGrammarBase) {\n return this;\n }\n\n clear() {\n this.spec = null;\n this.view = null;\n }\n\n release() {\n this.clear();\n }\n\n protected setFunctionSpec(spec: T | Nil, specField: string) {\n if (!isNil(this.spec[specField])) {\n this.detach(parseFunctionType(this.spec[specField], this.view));\n }\n this.spec[specField] = spec;\n this.attach(parseFunctionType(spec, this.view));\n this.commit();\n return this;\n }\n}\n","import { isArray, isFunction, isNil } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { IGrammarBase, IGrammarTask, IView, TransformSpec, TransformSpecValue } from '../types';\nimport { isSignal, parseFunctionType, parseReference } from './util';\n\nconst parseSimpleOptionValue = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (key === 'callback' && isFunction(transformSpecValue)) {\n return {\n references: [],\n value: {\n callback: transformSpecValue,\n dependency: []\n }\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).data)) {\n // { data: 'someData' }\n const grammarInstance = view.getDataById((transformSpecValue as TransformSpecValue).data);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).customized)) {\n // { customized: 'proj' }\n const grammarInstance = view.getCustomizedById((transformSpecValue as TransformSpecValue).customized);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).scale)) {\n // { scale: 'scaleX' }\n const grammarInstance = view.getScaleById((transformSpecValue as TransformSpecValue).scale);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (isSignal(transformSpecValue)) {\n const references = parseFunctionType(transformSpecValue, view);\n\n return {\n references,\n value: transformSpecValue.callback\n ? {\n value: transformSpecValue.callback,\n dependency: references\n }\n : references?.[0] ?? transformSpecValue\n };\n }\n\n return { value: transformSpecValue };\n};\n\nconst parseTransformOption = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (isNil(transformSpecValue)) {\n return { value: transformSpecValue };\n }\n\n if (isArray(transformSpecValue)) {\n const values = transformSpecValue.map((v: any) => parseSimpleOptionValue(key, v, view));\n\n return {\n references: values.reduce((res: any[], val: any) => {\n if (val.references) {\n res.concat(val.references);\n }\n\n return res;\n }, []),\n value: values.map((entry: any) => entry.value)\n };\n }\n\n return parseSimpleOptionValue(key, transformSpecValue, view);\n};\n\nconst parseTransform = (transformSpec: TransformSpec, view: IView) => {\n const transformDef = Factory.getTransform(transformSpec.type);\n\n if (!transformDef) {\n return;\n }\n\n const options = {};\n let references: IGrammarBase[] = [];\n\n Object.keys(transformSpec).forEach(specKey => {\n // we dont need to parse type\n if (specKey === 'type') {\n return;\n }\n\n const specValue = transformSpec[specKey];\n if (specKey === 'dependency') {\n if (specValue?.length) {\n references = references.concat(parseReference(specValue, view));\n }\n return;\n }\n const res = parseTransformOption(specKey, specValue, view);\n\n if (res) {\n if (res.references?.length) {\n references = references.concat(res.references);\n }\n\n options[specKey] = res.value;\n }\n });\n\n return {\n markPhase: transformDef.markPhase,\n transform: transformDef.transform,\n canProgressive: transformDef.canProgressive,\n type: transformDef.type,\n options,\n references\n };\n};\n\nexport const parseTransformSpec = (spec: TransformSpec[], view: IView) => {\n if (spec?.length) {\n const transforms: IGrammarTask[] = [];\n let refs: IGrammarBase[] = [];\n spec.forEach(transformSpec => {\n const transform = parseTransform(transformSpec, view);\n\n if (transform) {\n if (transform.references?.length) {\n refs = refs.concat(transform.references);\n }\n\n transforms.push(transform);\n }\n });\n return { transforms, refs };\n }\n\n return null;\n};\n","import type { Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { DataFormatSpec, Datum } from '../types';\nimport { array, isString } from '@visactor/vutils';\n\nconst jsonParser: Parser = (data: string, options: any = {}, dataView: DataView) => {\n if (!isString(data)) {\n return array(data);\n }\n try {\n return array(JSON.parse(data));\n } catch (e) {\n return [];\n }\n};\n\nconst parsers: Record = {\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser,\n json: jsonParser\n};\n\nexport const parseFormat = (data: any, format?: DataFormatSpec): Datum[] => {\n if (!format || !parsers[format.type]) {\n return array(data);\n }\n const options = format.type === 'dsv' ? { delimiter: format.delimiter } : {};\n return parsers[format.type](data, options, new DataView(new DataSet()));\n};\n","import { array, isNil } from '@visactor/vutils';\nimport type {\n IGrammarBase,\n DataSpec,\n IData,\n GrammarType,\n DataFormatSpec,\n IView,\n IGrammarTask,\n TransformSpec,\n ParameterFunctionType,\n IDataFilter\n} from '../types';\nimport { GrammarBase } from './grammar-base';\nimport { invokeParameterFunctionType, isGrammar, parseFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\nimport { parseFormat } from '../util/data';\n\nexport class Data extends GrammarBase implements IData {\n readonly grammarType: GrammarType = 'data';\n\n protected spec: DataSpec = {};\n\n private _dataIDKey = `VGRAMMAR_DATA_ID_KEY_${this.uid}`;\n\n /** 原始输入数据 */\n private _input: any[];\n\n /** 计算后的数据 */\n private _values: any[];\n\n private _isLoaded?: boolean;\n private _loadTasks: IGrammarTask[] = [];\n private _postFilters: IDataFilter[] = [];\n\n constructor(view: IView, values?: any, format?: DataFormatSpec) {\n super(view);\n this._loadTasks = [];\n\n if (!isNil(values)) {\n this.values(values, format);\n // this.ingest({ values });\n }\n }\n\n parse(spec: DataSpec) {\n super.parse(spec);\n this._isLoaded = false;\n\n this.source(spec.source, spec.format, false);\n this.url(spec.url, spec.format, false);\n this.values(spec.values, spec.format, false);\n this.transform(spec.transform);\n\n this.parseLoad(spec);\n\n this.commit();\n return this;\n }\n\n private parseDataSource(spec: DataSpec) {\n const refs: IGrammarBase[] = [];\n const transforms: IGrammarTask[] = [];\n\n const formatRef = spec.format ? parseFunctionType(spec.format, this.view)[0] : null;\n if (formatRef) {\n refs.push(formatRef);\n }\n\n if (spec.values) {\n const valuesRef = parseFunctionType(spec.values, this.view)[0];\n\n if (valuesRef) {\n refs.push(valuesRef);\n }\n\n transforms.push({\n type: 'ingest',\n transform: this.ingest,\n isRawOptions: true,\n options: {\n values: spec.values,\n format: spec.format\n }\n });\n } else if (spec.url) {\n const urlRef = parseFunctionType(spec.url, this.view)[0];\n if (urlRef) {\n refs.push(urlRef);\n }\n\n transforms.push({\n type: 'load',\n transform: this.load,\n options: {\n url: urlRef ?? spec.url,\n format: formatRef ?? spec.format\n }\n });\n } else if (spec.source) {\n const upstreamData: IData[] = [];\n\n array(spec.source).forEach(sourceId => {\n const sourceData = isGrammar(sourceId) ? sourceId : this.view.getDataById(sourceId);\n\n if (sourceData) {\n refs.push(sourceData);\n upstreamData.push(sourceData as IData);\n }\n });\n\n if (upstreamData.length) {\n transforms.push({\n type: 'relay',\n transform: this.relay,\n options: upstreamData\n });\n this.grammarSource = upstreamData[0];\n }\n }\n return { transforms, refs };\n }\n\n private ingest = (options: { values?: any; format?: ParameterFunctionType }) => {\n const format = invokeParameterFunctionType(options.format, this.parameters());\n this._input = parseFormat(options.values, format);\n return this._input;\n };\n\n private load = (options: { values: any; format?: ParameterFunctionType }) => {\n if ((options as { values: any; format?: ParameterFunctionType }).values) {\n return this.ingest(options as { values: any; format?: ParameterFunctionType });\n }\n };\n\n private relay = (options: any[]) => {\n return options[0];\n };\n\n evaluate(upstream: any, parameters: any) {\n this.view.emit(HOOK_EVENT.BEFORE_EVALUATE_DATA);\n const tasks = this._isLoaded ? this.transforms : this._loadTasks.concat(this.transforms);\n if (this.grammarSource) {\n this._input = upstream;\n }\n\n const values = this.evaluateTransform(tasks, this._input, parameters);\n const filteredValues = this._evaluateFilter(values, parameters);\n this.setValues(filteredValues);\n\n this._isLoaded = true;\n this.view.emit(HOOK_EVENT.AFTER_EVALUATE_DATA);\n\n return this;\n }\n\n output() {\n return this._values;\n }\n\n getDataIDKey() {\n return this._dataIDKey;\n }\n\n values(values: any | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { values, format });\n if (!isNil(values)) {\n spec.url = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n url(url: ParameterFunctionType | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { url, format });\n if (!isNil(url)) {\n spec.values = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n source(\n source: string | string[] | IData | IData[] | Nil,\n format?: ParameterFunctionType,\n load: boolean = true\n ) {\n const spec = Object.assign({}, this.spec, { source, format });\n if (!isNil(source)) {\n spec.values = undefined;\n spec.url = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n private parseLoad(spec: DataSpec) {\n this.detach(this.parseDataSource(this.spec).refs);\n\n this.spec = spec;\n\n const dataSourceResult = this.parseDataSource(this.spec);\n this.attach(dataSourceResult.refs);\n this._loadTasks = dataSourceResult.transforms;\n this._isLoaded = false;\n\n this.commit();\n return this;\n }\n\n private setValues(data: any[]) {\n this._values = array(data).map((entry, index) => {\n const datum = entry === Object(entry) ? entry : { data: entry };\n datum[this._dataIDKey] = index;\n return datum;\n });\n }\n\n field(field: string): any[] {\n return this._values.map((value: any) => value[field]);\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n this.spec.transform = transforms;\n\n const nextTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.commit();\n return this;\n }\n\n getValue() {\n return this._values;\n }\n\n getInput() {\n return this._input;\n }\n\n addDataFilter(filter: IDataFilter | IDataFilter[]) {\n this._postFilters = this._postFilters.concat(array(filter));\n this._postFilters.sort((filterA, filterB) => (filterA.rank ?? 0) - (filterB.rank ?? 0));\n return this;\n }\n\n removeDataFilter(filter: IDataFilter | IDataFilter[]) {\n const filters = array(filter);\n this._postFilters = this._postFilters.filter(filter => !filters.includes(filter));\n return this;\n }\n\n private _evaluateFilter(value: any, parameters: any) {\n return this._postFilters.reduce((result, filter) => {\n return filter.filter(result, parameters);\n }, value);\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n\n this._isLoaded = false;\n this._values = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._input = null;\n this._values = null;\n }\n}\n","type CompareFunc = (a: any, b: any) => number;\n\n/**\n * moveToHead - Moves an element down the array until the target element is `smallar` than all the elements in head\n *\n * @param {any[]} array - The array to sift through\n * @param {number} start - The start index of the element\n * @param {number} idx - The index of the element to sift down\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToHead(array: any[], idx: number, start: number, cmp: CompareFunc) {\n let parent;\n let pidx;\n\n const item = array[idx];\n // Move the element down the array\n while (idx > start) {\n pidx = Math.floor((idx - 1) / 2);\n parent = array[pidx];\n if (item && parent && cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\n/**\n * moveToTail - Moves an element up the array until the target element is `greater` than all the elements in tail\n *\n * @param {any[]} array - The array to sift through\n * @param {number} idx - The index of the element to sift up\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToTail(array: any[], idx: number, end: number | undefined, cmp: CompareFunc) {\n const start = idx;\n const endIdx = end ?? array.length;\n const item = array[idx];\n let cidx = idx * 2 + 1;\n let ridx;\n\n // Move the element up the array until it is in the correct position\n while (cidx < endIdx) {\n ridx = cidx + 1;\n if (ridx < endIdx && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = idx * 2 + 1;\n }\n array[idx] = item;\n return moveToHead(array, idx, start, cmp);\n}\n\nexport class Heap {\n protected compare: CompareFunc;\n\n protected nodes: any[];\n\n constructor(compare: CompareFunc) {\n this.compare = compare;\n this.nodes = [];\n }\n\n size() {\n return this.nodes.length;\n }\n\n last() {\n return this.nodes[0];\n }\n\n validate() {\n for (let i = this.nodes.length - 1; i > 0; i -= 1) {\n const parentIndex = Math.floor((i - 1) / 2);\n if (this.compare(this.nodes[parentIndex], this.nodes[i]) > 0) {\n return false;\n }\n }\n return true;\n }\n\n push(node: any) {\n if (this.nodes.includes(node)) {\n // node 的排序等级可能变更,需要重新执行 排序\n const index = this.nodes.indexOf(node);\n moveToHead(this.nodes, index, 0, this.compare);\n return moveToTail(this.nodes, index, null, this.compare);\n }\n this.nodes.push(node);\n return moveToHead(this.nodes, this.nodes.length - 1, 0, this.compare);\n }\n\n remove(node: any) {\n if (this.nodes.includes(node)) {\n const index = this.nodes.indexOf(node);\n\n this.nodes = this.nodes.slice(0, index).concat(this.nodes.slice(index + 1));\n\n moveToHead(this.nodes, index, 0, this.compare);\n moveToTail(this.nodes, index, null, this.compare);\n }\n }\n\n pop() {\n const last = this.nodes.pop();\n let item;\n\n if (this.nodes.length) {\n item = this.nodes[0];\n this.nodes[0] = last;\n\n moveToTail(this.nodes, 0, null, this.compare);\n } else {\n item = last;\n }\n return item;\n }\n\n clear() {\n this.nodes = [];\n }\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/accessors.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nexport const identity = (_: any) => _;\n\nexport const zero = (_: any) => 0;\n","import { identity } from '@visactor/vgrammar-util';\n\nexport class UniqueList {\n private idFunc: (val: T) => number;\n\n private list: T[] = [];\n\n private ids: Record = {};\n\n constructor(idFunc: (val: T) => number) {\n this.idFunc = idFunc || identity;\n }\n\n add(element: T) {\n const id = this.idFunc(element);\n\n if (!this.ids[id]) {\n this.ids[id] = 1;\n this.list.push(element);\n }\n return this;\n }\n\n remove(element: T) {\n const id = this.idFunc(element);\n\n if (this.ids[id]) {\n this.ids[id] = 0;\n this.list = this.list.filter(entry => entry !== element);\n }\n return this;\n }\n\n forEach(callback: (entry: T, index?: number, arr?: T[]) => void, reverse?: boolean) {\n if (reverse) {\n this.list.slice().reverse().forEach(callback);\n } else {\n this.list.forEach(callback);\n }\n }\n\n filter(callback: (entry: T, index?: number, arr?: T[]) => boolean) {\n return this.list.filter(callback);\n }\n\n public get length() {\n return this.list.length;\n }\n\n getElementByIndex(index: number) {\n return this.list[index];\n }\n}\n","import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n evaluate() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.run();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n","import type { IGroupMark, IMark } from '../types';\nimport { GrammarMarkType } from './enums';\n\nexport const traverseMarkTree = (\n rootMark: IMark,\n childrenKey: 'children' | 'layoutChildren',\n apply: (mark: IMark) => any,\n filter?: (mark: IMark) => boolean,\n leafFirst?: boolean\n) => {\n const traverse = (mark: IMark) => {\n if (!leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n\n if (mark.markType === GrammarMarkType.group) {\n const children: IMark[] = (mark as IGroupMark)[childrenKey];\n\n if (children) {\n children.forEach(child => {\n traverse(child);\n });\n }\n }\n\n if (leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n };\n\n traverse(rootMark);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\nimport type { DragNDrop } from '@visactor/vrender-kits';\nimport type { Gesture } from '@visactor/vrender-kits';\nimport { Factory } from '../core/factory';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n ticker: viewOptions.ticker,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents,\n event:{\n clickInterval: this._eventConfig.clickInterval,\n autoPreventDefault: !!this._eventConfig.autoPreventDefault\n },\n ReactDOM: viewOptions.ReactDOM,\n autoRefresh: viewOptions.autoRefresh\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag && Factory.getStageEventPlugin('drag')) {\n // 允许 drag 事件\n this._dragController = new (Factory.getStageEventPlugin('drag'))(stage as unknown as IEventTarget) as DragNDrop;\n }\n if (this._eventConfig?.gesture && Factory.getStageEventPlugin('gesture')) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new (Factory.getStageEventPlugin('gesture'))(\n stage as unknown as IEventTarget,\n gestureConfig\n ) as Gesture;\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n","import { isValidNumber, isNil } from '@visactor/vutils';\n\ninterface EventPosition {\n canvasX: number;\n canvasY: number;\n clientX?: number;\n clientY?: number;\n}\n\nexport function point(event: Event) {\n ['touches', 'changedTouches', 'targetTouches'].forEach(touchKey => {\n if (event[touchKey] && event[touchKey].length) {\n Array.from(event[touchKey]).forEach(touch => {\n const touchPosition = clientToLocal(touch as Event);\n defineSrPosition(touch, touchPosition, false);\n });\n }\n });\n\n const pos = clientToLocal(event);\n return defineSrPosition(event, pos);\n}\n\nfunction clientToLocal(e: Event): EventPosition {\n // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n if (!isNil((e as any).offsetX)) {\n return getOffsetPos(e);\n }\n\n // for miniApp\n if (!isNil((e as any).x)) {\n return getXYPos(e);\n }\n\n // for miniApp\n if ((e as any).changedTouches && (e as any).changedTouches.length) {\n return getChangedTouchesPos(e);\n }\n\n // For some other device, e.g., IOS safari.\n return {\n canvasX: 0,\n canvasY: 0\n };\n}\n\nfunction getOffsetPos(e: any) {\n return {\n canvasX: e.offsetX,\n canvasY: e.offsetY\n };\n}\n\nfunction getXYPos(e: any) {\n return { canvasX: e.x, canvasY: e.y };\n}\n\nfunction getChangedTouchesPos(e: any) {\n const pos = e.changedTouches[0];\n return { canvasX: pos.x, canvasY: pos.y };\n}\n\nfunction defineSrPosition(event: any, pos: EventPosition, client = true) {\n const keys = ['canvasX', 'canvasY'];\n\n if (client) {\n keys.push('clientX');\n keys.push('clientY');\n }\n\n keys.forEach(key => {\n isValidNumber(pos[key]) &&\n Object.defineProperty(event, key, {\n value: pos[key],\n writable: true\n });\n });\n\n return [pos.canvasX, pos.canvasY];\n}\n","export const EVENT_SOURCE_WINDOW = 'window';\nexport const EVENT_SOURCE_VIEW = 'view';\nexport const BROWSER = 'browser';\nexport const NO_TRAP = { trap: false };\n\nexport const SIGNAL_WIDTH = 'width';\nexport const SIGNAL_HEIGHT = 'height';\nexport const SIGNAL_VIEW_WIDTH = 'viewWidth';\nexport const SIGNAL_VIEW_HEIGHT = 'viewHeight';\nexport const SIGNAL_PADDING = 'padding';\nexport const SIGNAL_VIEW_BOX = 'viewBox';\nexport const SIGNAL_AUTOFIT = 'autoFit';\n\nexport const DEFAULT_HOVER_STATE = 'hover';\n\nexport const NAME_PREFIX = '@';\nexport const ID_PREFIX = '#';\n","import type { IAnimationControlOptions } from '../types/animate';\nimport { GrammarMarkType } from './enums';\n\nexport const BridgeElementKey = '__vgrammar_scene_item__';\n\nexport const CollectionMarkType = [GrammarMarkType.line, GrammarMarkType.area];\n\nexport const Mark3DType = [GrammarMarkType.arc3d, GrammarMarkType.rect3d, GrammarMarkType.pyramid3d];\n\nexport const DefaultKey = 'key';\n\nexport const DefaultMarkData = [{}];\n\nexport const DefaultGroupKeys = [DefaultKey];\n\nexport const DefaultReuse = true;\nexport const DefaultMorph = true;\nexport const DefaultMorphAll = false;\nexport const DefaultSplitPath: null | 'clone' = null;\nexport const DefaultEnableExitAnimation = true;\n\nexport const ImmediateAnimationState = 'VGRAMMAR_IMMEDIATE_ANIMATION';\n\n/** default animation configs */\nexport const DefaultAnimationStartTime = 0;\nexport const DefaultAnimationDuration = 1000;\nexport const DefaultAnimationDelay = 0;\nexport const DefaultAnimationDelayAfter = 0;\nexport const DefaultAnimationLoop = false;\nexport const DefaultAnimationOneByOne = false;\nexport const DefaultAnimationEasing = 'quintInOut';\nexport const DefaultAnimationControlOptions: IAnimationControlOptions = {\n stopWhenStateChange: false,\n immediatelyApply: true\n};\nexport const DefaultAnimationParameters = 'VGRAMMAR_ANIMATION_PARAMETERS';\n\nexport const MARK_OVERLAP_HIDE_KEY = '_mo_hide_';\n","import type { FederatedEvent } from '@visactor/vrender-core';\nimport type { IView } from './../../types/view';\nimport { point } from './point';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW } from '../../view/constants';\nimport type { EventSourceType } from '../../types';\nimport { BridgeElementKey } from '../constants';\n\nexport default function getExtendedEvents(view: IView, event: FederatedEvent, type: string, source: EventSourceType) {\n if (source === EVENT_SOURCE_WINDOW) {\n const e = (event as any).changedTouches ? (event as any).changedTouches[0] : event;\n point(e);\n }\n let element = (event.target as any)?.[BridgeElementKey];\n if (!element && source === EVENT_SOURCE_VIEW) {\n let target = event.target;\n const rootGraphic = view.rootMark?.graphicItem;\n\n while (target?.parent && (target.parent as any) !== rootGraphic) {\n target = target.parent;\n if ((target as any)[BridgeElementKey]) {\n element = (target as any)[BridgeElementKey];\n break;\n }\n }\n }\n\n (event as any).element = element;\n\n return event;\n}\n","import { isArray, isNil } from '@visactor/vutils';\nimport type { SignalFunctionType, SignalSpec } from '../types/signal';\nimport type { GrammarType, IGrammarBase, ISignal } from '../types/grammar';\nimport { GrammarBase } from './grammar-base';\nimport { invokeFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\n\nexport class Signal extends GrammarBase implements ISignal {\n readonly grammarType: GrammarType = 'signal';\n\n protected spec: SignalSpec = { value: null, update: null };\n\n private _signal: T;\n\n parse(spec: SignalSpec) {\n super.parse(spec);\n this.value(spec.value);\n this.update(spec.update);\n\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n this._signal = this.spec.update ? invokeFunctionType(this.spec.update, parameters, this._signal) : this.spec.value;\n\n this.spec.value = this._signal;\n return this;\n }\n\n output() {\n return this._signal;\n }\n\n getValue() {\n return this.output();\n }\n\n set(value: T) {\n if (isArray(value) && isArray(this.value) && value.length === this.value.length) {\n for (let i = 0; i < value.length; i++) {\n if (this.value[i] !== value[i]) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n }\n return false;\n }\n if (this._signal !== value) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n return false;\n }\n\n update(update: SignalFunctionType | Nil): this {\n // clear value spec if update is valid\n if (!isNil(update)) {\n this.value(undefined);\n }\n return this.setFunctionSpec(update, 'update');\n }\n\n value(value: T | Nil): this {\n // clear update spec if value is valid\n if (!isNil(value)) {\n this.update(undefined);\n }\n this.spec.value = value;\n this.commit();\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n this._signal = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._signal = null;\n }\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { isNumber, Bounds } from '@visactor/vutils';\nimport {\n DefaultAnimationDelay,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationOneByOne,\n DefaultEnableExitAnimation,\n DefaultMorph,\n DefaultMorphAll,\n DefaultReuse,\n DefaultSplitPath\n} from '../graph/constants';\nimport type { GroupMarkSpec, IRunningConfig, ITheme, MarkSpec, SignalSpec } from '../types';\nimport type { IViewOptions, IViewThemeConfig, ViewSpec } from '../types/view';\nimport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from '../view/constants';\n\nlet markBaseId = -1;\n\nexport const BuiltInSignalID = [\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_BOX,\n SIGNAL_AUTOFIT\n];\n\nexport const builtInSignals = (option: IViewOptions, config: IViewThemeConfig, theme: ITheme): SignalSpec[] => {\n return [\n { id: SIGNAL_WIDTH, value: option[SIGNAL_WIDTH] ?? 0 },\n { id: SIGNAL_HEIGHT, value: option[SIGNAL_HEIGHT] ?? 0 },\n { id: SIGNAL_PADDING, value: normalizePadding(option[SIGNAL_PADDING] ?? config[SIGNAL_PADDING] ?? theme?.padding) },\n {\n id: SIGNAL_VIEW_WIDTH,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_WIDTH] - padding.left - padding.right;\n },\n dependency: [SIGNAL_WIDTH, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_HEIGHT,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_HEIGHT] - padding.top - padding.bottom;\n },\n dependency: [SIGNAL_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_BOX,\n update: {\n callback: (signal: IBounds, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return (signal ? signal : new Bounds()).setValue(\n padding.left,\n padding.top,\n padding.left + params[SIGNAL_VIEW_WIDTH],\n padding.top + params[SIGNAL_VIEW_HEIGHT]\n );\n },\n dependency: [SIGNAL_VIEW_WIDTH, SIGNAL_VIEW_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_AUTOFIT,\n value: option[SIGNAL_AUTOFIT] ?? config[SIGNAL_AUTOFIT]\n }\n ];\n};\n\nexport const normalizePadding = (\n value: number | { top?: number; left?: number; right?: number; bottom?: number }\n): { top: number; left: number; right: number; bottom: number } => {\n if (isNumber(value)) {\n return { top: value, bottom: value, left: value, right: value };\n }\n return { top: value?.top ?? 0, bottom: value?.bottom ?? 0, left: value?.left ?? 0, right: value?.right ?? 0 };\n};\n\nexport const normalizeMarkTree = (spec: ViewSpec) => {\n const traverse = (spec: MarkSpec, group: string) => {\n spec.group = group;\n const id = spec.id ?? `VGRAMMAR_MARK_${++markBaseId}`;\n spec.id = id;\n ((spec as GroupMarkSpec).marks ?? []).forEach(child => traverse(child, id));\n };\n (spec.marks ?? []).forEach(mark => traverse(mark, 'root'));\n return spec;\n};\n\nexport const normalizeRunningConfig = (runningConfig: IRunningConfig): IRunningConfig => {\n const {\n reuse = DefaultReuse,\n morph = DefaultMorph,\n morphAll = DefaultMorphAll,\n animation = {},\n enableExitAnimation = DefaultEnableExitAnimation\n } = runningConfig ?? {};\n return {\n reuse,\n morph,\n morphAll,\n animation: {\n easing: animation.easing ?? DefaultAnimationEasing,\n delay: animation.delay ?? DefaultAnimationDelay,\n duration: animation.duration ?? DefaultAnimationDuration,\n oneByOne: animation.oneByOne ?? DefaultAnimationOneByOne,\n splitPath: animation.splitPath ?? DefaultSplitPath\n },\n enableExitAnimation\n };\n};\n","import { vglobal } from '@visactor/vrender-core';\nimport type { IEnvironmentOptions } from '../../types';\n\nexport function configureEnvironment(options: IEnvironmentOptions) {\n if (options.mode) {\n vglobal.setEnv(options.mode, options.modeParams || {});\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport type { MarkElementItem, MarkType } from '../../types';\nimport { GrammarMarkType } from '../enums';\n\nexport function isValidPointsChannel(channels: string[], markType: MarkType): boolean {\n switch (markType) {\n case 'line':\n return channels.some(channel => ['x', 'y', 'defined'].includes(channel));\n case 'area':\n return channels.some(channel => ['x', 'y', 'x1', 'y1', 'defined'].includes(channel));\n case 'largeRects':\n return channels.some(channel => ['x', 'y', 'width', 'y1'].includes(channel));\n case 'largeSymbols':\n return channels.some(channel => ['x', 'y'].includes(channel));\n }\n return false;\n}\n\n/**\n * 获取rule的points\n * 相对位置\n * @param {*} item\n * @returns\n */\nexport function getRulePoints(nextAttrs: { x: number; y: number; x1: number; y1: number }) {\n const { x, y, x1, y1 } = nextAttrs;\n\n if (!isValidNumber(x) || !isValidNumber(y) || !isValidNumber(x1) || !isValidNumber(y1)) {\n return [];\n }\n return [\n { x, y },\n { x: x1, y: y1 }\n ];\n}\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLinePoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints?: IPointLike[],\n isArea?: boolean\n) {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const hasValidChannel = items.some(item => {\n return isValidPointsChannel(Object.keys(item.nextAttrs), 'line');\n });\n if (!hasValidChannel) {\n return lastPoints ?? [];\n }\n return items.map((item, index) => {\n const attrs = item.nextAttrs;\n const { x, y, x1, y1, defined } = lastPoints?.[index] ?? {};\n if (isNil(attrs.x)) {\n attrs.x = x;\n }\n if (isNil(attrs.y)) {\n attrs.y = y;\n }\n\n if (isNil(attrs.defined) && defined === false) {\n attrs.defined = false;\n }\n\n attrs.context = item.key;\n\n if (isArea) {\n if (isNil(attrs.x1)) {\n attrs.x1 = x1;\n }\n if (isNil(attrs.y1)) {\n attrs.y1 = y1;\n }\n }\n\n return attrs;\n });\n}\n\nexport function getLargeRectsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 4);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 4];\n const y = attrs.y ?? lastPoints[index * 4 + 1];\n const width = attrs.width ?? lastPoints[index * 4 + 2];\n const y1 = attrs.y1 ?? lastPoints[index * 4 + 3];\n arr[index * 4] = x;\n arr[index * 4 + 1] = y;\n arr[index * 4 + 2] = width;\n arr[index * 4 + 3] = y1 - y;\n });\n\n return arr;\n}\n\nexport function getLargeSymbolsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 2);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 2];\n const y = attrs.y ?? lastPoints[index * 2 + 1];\n arr[index * 2] = x;\n arr[index * 2 + 1] = y;\n });\n\n return arr;\n}\n\nexport function isPositionOrSizeChannel(type: string, channel: string) {\n if (['x', 'y', 'dx', 'dy'].includes(channel)) {\n return true;\n }\n\n switch (type) {\n case GrammarMarkType.arc:\n return ['innerRadius', 'outerRadius', 'startAngle', 'endAngle'].includes(channel);\n case GrammarMarkType.group:\n case GrammarMarkType.rect:\n case GrammarMarkType.image:\n return ['width', 'height', 'y1'].includes(channel);\n case GrammarMarkType.path:\n case GrammarMarkType.shape:\n return ['path', 'customPath'].includes(channel);\n case GrammarMarkType.line:\n return channel === 'defined';\n case GrammarMarkType.area:\n return ['x1', 'y1', 'defined'].includes(channel);\n case GrammarMarkType.rule:\n return ['x1', 'y1'].includes(channel);\n case GrammarMarkType.symbol:\n return channel === 'size';\n case GrammarMarkType.polygon:\n return channel === 'points';\n case GrammarMarkType.text:\n return channel === 'text';\n }\n\n return false;\n}\n\nexport function isPointsMarkType(markType: MarkType): boolean {\n return (\n [GrammarMarkType.line, GrammarMarkType.area, GrammarMarkType.largeRects, GrammarMarkType.largeSymbols] as MarkType[]\n ).includes(markType);\n}\n","export const commonAttributes = ['fillOpacity'];\n\nexport const transformCommonAttribute = (graphicAttributes: any, changedKey: string, nextAttrs: any) => {\n if (changedKey === 'fillOpacity') {\n graphicAttributes.fillOpacity = nextAttrs.fillOpacity ?? 1;\n return ['fillOpacity'];\n }\n\n return [];\n};\n","import { has, isNil, isPlainObject, isString, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IGlyphElement } from '../../types/element';\nimport type { AttributeTransform, MarkType } from '../../types/mark';\nimport { GrammarMarkType } from '../enums';\nimport { getRulePoints } from './helpers';\nimport { commonAttributes, transformCommonAttribute } from './common';\n\nfunction storeOriginAttributes(\n name: string,\n channels: string[],\n graphicAttributes: any,\n nextAttrs: any,\n element: IElement,\n markName: string\n): Record {\n const prevStoredAttrs = (element as IGlyphElement).getGraphicAttribute(name, false, markName);\n\n if (prevStoredAttrs) {\n channels.forEach(channel => {\n if (channel in nextAttrs) {\n prevStoredAttrs[channel] = nextAttrs[channel];\n }\n });\n\n return prevStoredAttrs;\n }\n const storedAttrs = {};\n channels.forEach(channel => {\n storedAttrs[channel] = nextAttrs[channel];\n });\n graphicAttributes[name] = storedAttrs;\n return storedAttrs;\n}\n\nexport const transformsByType: Record = {\n rect3d: [\n {\n channels: ['x', 'y', 'z', 'x1', 'y1', 'width', 'height', 'length'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n // width\n if (isValidNumber(nextAttrs.width) || (!isValidNumber(nextAttrs.x1) && isValidNumber(storedAttrs.width))) {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n } else if (isValidNumber(nextAttrs.x1) || (!isValidNumber(nextAttrs.width) && isValidNumber(storedAttrs.x1))) {\n graphicAttributes.x = Math.min(storedAttrs.x, storedAttrs.x1);\n graphicAttributes.width = Math.abs(storedAttrs.x1 - storedAttrs.x);\n } else {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n }\n\n // height\n if (isValidNumber(nextAttrs.height) || (!isValidNumber(nextAttrs.y1) && isValidNumber(storedAttrs.height))) {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n } else if (isValidNumber(nextAttrs.y1) || (!isValidNumber(nextAttrs.height) && isValidNumber(storedAttrs.y1))) {\n graphicAttributes.y = Math.min(storedAttrs.y, storedAttrs.y1);\n graphicAttributes.height = Math.abs(storedAttrs.y1 - storedAttrs.y);\n } else {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n }\n\n // length\n if (isValidNumber(nextAttrs.length) || (!isValidNumber(nextAttrs.z1) && isValidNumber(storedAttrs.length))) {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n } else if (isValidNumber(nextAttrs.z1) || (!isValidNumber(nextAttrs.length) && isValidNumber(storedAttrs.z1))) {\n graphicAttributes.z = Math.min(storedAttrs.z, storedAttrs.z1);\n graphicAttributes.length = Math.abs(storedAttrs.z1 - storedAttrs.z);\n } else {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n }\n },\n storedAttrs: 'sizeAttrs'\n }\n ],\n [GrammarMarkType.text]: [\n {\n channels: ['text', 'limit', 'autoLimit', 'maxLineWidth', 'textType', '_originText'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const limit = storedAttrs.limit ?? Infinity;\n const autoLimit = storedAttrs.autoLimit ?? Infinity;\n const maxWidth = Math.min(limit, autoLimit);\n const isTextConfig = isPlainObject(storedAttrs.text) && !isNil(storedAttrs.text.text);\n const text = isTextConfig ? storedAttrs.text.text : storedAttrs.text;\n\n if (Array.isArray(text)) {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n } else {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n }\n\n if (isTextConfig || storedAttrs.textType) {\n if (storedAttrs.text.type === 'rich' || storedAttrs.textType === 'rich') {\n graphicAttributes.textConfig = text;\n } else if (storedAttrs.text.type === 'html') {\n graphicAttributes.html = text;\n graphicAttributes.text = storedAttrs._originText ?? '';\n graphicAttributes.renderable = false;\n } else if (storedAttrs.text.type === 'react') {\n graphicAttributes.react = text;\n graphicAttributes.text = storedAttrs._originText ?? '';\n graphicAttributes.renderable = false;\n } else {\n graphicAttributes.text = text;\n }\n } else {\n graphicAttributes.text = text;\n }\n },\n storedAttrs: 'limitAttrs'\n }\n ],\n [GrammarMarkType.rule]: [\n {\n channels: ['x', 'y', 'x1', 'y1'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const points = getRulePoints(storedAttrs);\n graphicAttributes.points = points;\n graphicAttributes.x = 0;\n graphicAttributes.y = 0;\n },\n storedAttrs: 'pointAttrs'\n }\n ],\n [GrammarMarkType.symbol]: [\n {\n channels: ['shape', 'symbolType'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n graphicAttributes.symbolType = nextAttrs.shape ?? nextAttrs.symbolType;\n }\n },\n {\n channels: ['image', 'fill', 'background'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (nextAttrs.image) {\n graphicAttributes.background = nextAttrs.image;\n graphicAttributes.fill = false;\n } else if (storedAttrs.image) {\n graphicAttributes.background = storedAttrs.image;\n graphicAttributes.fill = false;\n } else {\n graphicAttributes.fill = storedAttrs.fill;\n graphicAttributes.background = storedAttrs.background;\n }\n },\n storedAttrs: 'imageAttrs'\n }\n ]\n};\n\nexport function cloneTransformAttributes(markType: MarkType, attributes: any) {\n const transforms = transformsByType[markType] ?? [];\n return transforms.reduce((clonedAttributes, transform) => {\n transform.channels.forEach(channel => {\n if (has(attributes, channel)) {\n clonedAttributes[channel] = attributes[channel];\n }\n });\n return clonedAttributes;\n }, {} as any);\n}\n\nexport const transformAttributes = (\n markType: MarkType | AttributeTransform[],\n nextAttrs: any,\n element: IElement,\n markName?: string\n) => {\n const graphicAttributes = {};\n const changedKeys = nextAttrs ? Object.keys(nextAttrs) : [];\n const transforms: AttributeTransform[] = isString(markType)\n ? transformsByType[markType]\n : (markType as AttributeTransform[]);\n\n if (transforms && transforms.length) {\n const tags: boolean[] = [];\n\n changedKeys.forEach(key => {\n let isTransformed = false;\n\n transforms.forEach((transform, index) => {\n if (transform.channels.includes(key)) {\n if (!tags[index]) {\n if (transform.storedAttrs) {\n const storedAttrs = storeOriginAttributes(\n transform.storedAttrs,\n transform.channels,\n graphicAttributes,\n nextAttrs,\n element,\n markName\n );\n transform.transform(graphicAttributes, nextAttrs, storedAttrs);\n } else {\n transform.transform(graphicAttributes, nextAttrs, null);\n }\n }\n // 记录一下,不重复处理\n tags[index] = true;\n isTransformed = true;\n }\n });\n\n if (!isTransformed) {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n }\n });\n } else {\n changedKeys.forEach(key => {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n });\n }\n\n return graphicAttributes;\n};\n","import type { IGlyphMeta, IMark } from '../../types';\nimport type { IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\n\nimport { GrammarMarkType } from '../enums';\nimport { BridgeElementKey } from '../constants';\nimport { Factory } from '../../core/factory';\nimport { Logger } from '@visactor/vutils';\n\nexport const isMarkType = (type: string) => {\n return !!GrammarMarkType[type];\n};\n\nexport function createGraphicItem(mark: IMark, markType: string, attrs: any = {}) {\n const graphicItem: IGraphic = Factory.getGraphicType(markType)\n ? Factory.createGraphic(markType, attrs)\n : Factory.createGraphicComponent(markType, attrs, {\n skipDefault: (mark as any)?.spec?.skipTheme\n });\n\n if (!graphicItem) {\n const logger = Logger.getInstance();\n logger.error(`create ${markType} graphic failed!`);\n }\n\n return graphicItem;\n}\n\nexport function createGlyphGraphicItem(mark: IMark, glyphMeta: IGlyphMeta, attrs: any = {}) {\n if (!Factory.getGraphicType(GrammarMarkType.glyph)) {\n return;\n }\n const graphicItem = Factory.createGraphic(GrammarMarkType.glyph, attrs);\n const glyphMarks = glyphMeta.getMarks();\n const subGraphics: IGraphic[] = Object.keys(glyphMarks).map(name => {\n if (Factory.getGraphicType(glyphMarks[name])) {\n const graphic = Factory.createGraphic(glyphMarks[name]);\n if (graphic) {\n graphic.name = name;\n return graphic;\n }\n }\n });\n graphicItem.setSubGraphic(subGraphics);\n return graphicItem;\n}\n\nexport const removeGraphicItem = (graphicItem: IGraphic) => {\n if (graphicItem) {\n graphicItem[BridgeElementKey] = null;\n graphicItem.release();\n if (graphicItem.parent) {\n graphicItem.parent.removeChild(graphicItem);\n }\n }\n};\n\nexport const getMarkTypeOfLarge = (markType: string) => {\n if (markType === GrammarMarkType.rect) {\n return GrammarMarkType.largeRects;\n }\n\n if (markType === GrammarMarkType.symbol) {\n return GrammarMarkType.largeSymbols;\n }\n\n return markType;\n};\n","import { isNil } from '@visactor/vutils';\nimport type { DiffResult } from '../../types/base';\nimport { parseField } from '../../parse/util';\nimport { DefaultKey, DefaultGroupKeys } from '../constants';\n\nexport type GroupedData = {\n // iterating over array is faster than set\n keys: (symbol | string)[];\n // operation on map is faster than object\n data: Map;\n};\n\nexport function groupData(\n data: T[],\n key: ((datum: T) => symbol | string) | string,\n sort?: (a: T, b: T) => number\n): GroupedData {\n const groupedData = new Map();\n if (!data || data.length === 0) {\n return { keys: [], data: groupedData };\n }\n if (!key) {\n groupedData.set(DefaultKey, sort ? data.slice().sort(sort) : data.slice());\n return { keys: DefaultGroupKeys, data: groupedData };\n }\n const keyGetter = parseField(key);\n\n if (data.length === 1) {\n const key = keyGetter(data[0]);\n groupedData.set(key, [data[0]]);\n\n return {\n keys: [key],\n data: groupedData\n };\n }\n\n const keys = new Set();\n data.forEach(entry => {\n const key = keyGetter(entry);\n const lastData = groupedData.get(key) ?? [];\n lastData.push(entry);\n groupedData.set(key, lastData);\n keys.add(key);\n });\n if (sort) {\n keys.forEach(key => {\n groupedData.get(key).sort(sort);\n });\n }\n return { keys: Array.from(keys), data: groupedData };\n}\n\nexport class Differ {\n private prevData: GroupedData;\n private currentData: GroupedData;\n\n private callback: (key: symbol | string, data: T[] | null, prevData: T[] | null) => void;\n\n constructor(data?: T[], key?: ((datum: T) => symbol | string) | string, sort?: (a: T, b: T) => number) {\n this.prevData = data?.length ? groupData(data, key ?? null, sort) : null;\n }\n\n setCurrentData(currentData: GroupedData) {\n this.currentData = currentData;\n }\n\n getCurrentData(): GroupedData {\n return this.currentData;\n }\n\n doDiff() {\n if (!this.callback) {\n return;\n }\n if (this.currentData && this.prevData) {\n const prevMap = new Map(this.prevData.data);\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), prevMap.get(key));\n prevMap.delete(key);\n });\n\n this.prevData.keys.forEach(key => {\n if (prevMap.has(key)) {\n this.callback(key, null, prevMap.get(key));\n }\n });\n } else if (this.currentData) {\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), null);\n });\n } else if (this.prevData) {\n this.prevData.keys.forEach(key => {\n this.callback(key, null, this.prevData.data.get(key));\n });\n }\n }\n\n setCallback(callback: (key: symbol | string, data: T[], prevData: T[]) => void) {\n this.callback = callback;\n }\n\n updateToCurrent() {\n this.prevData = this.currentData;\n this.currentData = null;\n }\n\n reset() {\n this.prevData = null;\n }\n}\n\nexport function diffSingle(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData[0] as U });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data[0] as V });\n } else {\n // update\n result.update.push({ next: data[0] as V, prev: prevData[0] as U });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n\nexport function diffMultiple(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData as U[] });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data as V[] });\n } else {\n // update\n result.update.push({ next: data as V[], prev: prevData as U[] });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n","import { array } from '@visactor/vutils';\nimport type { IGrammarBase, IView, MarkFunctionType, ScaleEncodeType, FieldEncodeType } from '../types';\nimport { isGrammar, parseFunctionType } from './util';\n\nexport function isScaleEncode(encode: any): encode is ScaleEncodeType {\n return !!encode?.scale;\n}\n\nexport function isFieldEncode(encode: any): encode is FieldEncodeType {\n return !!encode?.field;\n}\n\nexport function parseEncodeType(encoder: MarkFunctionType | ScaleEncodeType, view: IView): IGrammarBase[] {\n if (!encoder) {\n return [];\n }\n let dependencies: IGrammarBase[] = [];\n if (encoder.scale) {\n if (isGrammar(encoder.scale)) {\n dependencies = [encoder.scale];\n } else {\n dependencies = array(view.getScaleById(encoder.scale) as IGrammarBase);\n }\n }\n return dependencies.concat(parseFunctionType(encoder, view));\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/accessor.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil } from '@visactor/vutils';\n\nexport const accessor = (fn: any, fields?: string[], name?: string) => {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n};\n\nexport function accessorName(fn: any) {\n return isNil(fn) ? null : (fn.fname as string);\n}\n\nexport function accessorFields(fn: any) {\n return isNil(fn) ? null : fn.fields;\n}\n","import { get } from '@visactor/vutils';\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/error.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { Logger } from '@visactor/vutils';\n\nexport const error = (message: string) => {\n const logger = Logger.getInstance();\n\n logger.error(message);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/splitAccessPath.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { error } from './error';\n\nexport const splitAccessPath = (p: string) => {\n const path: string[] = [];\n const n = p.length;\n\n let q = null;\n let b = 0;\n let s = '';\n let i: number;\n let j: number;\n let c;\n\n p += '';\n\n const push = () => {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n };\n\n for (i = 0, j = 0; j < n; j += 1) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n // eslint-disable-next-line quotes\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) {\n push();\n }\n i = j + 1;\n b = i;\n } else if (c === ']') {\n if (!b) {\n error('Access path missing open bracket: ' + p);\n }\n if (b > 0) {\n push();\n }\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) {\n error('Access path missing closing bracket: ' + p);\n }\n if (q) {\n error('Access path missing closing quote: ' + p);\n }\n\n if (j > i) {\n j += 1;\n push();\n }\n\n return path;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/field.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isArray, isFunction } from '@visactor/vutils';\nimport { accessor } from './accessor';\nimport { getter } from './getter';\nimport { splitAccessPath } from './splitAccessPath';\nimport type { FieldGetterFunction, FieldGetterGeneratorOptions } from './types';\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, name?: string, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = splitAccessPath(fieldStr);\n const parsedField = path.length === 1 ? path[0] : fieldStr;\n\n return accessor(((opt && opt.get) || getter)(path), [parsedField], name || parsedField);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n name?: string,\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, name, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, name, opt);\n};\n","import { isNil, isNumber, isString } from '@visactor/vutils';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { BaseSingleEncodeSpec, IElement, MarkElementItem } from '../../types';\nimport { isFieldEncode, isScaleEncode } from '../../parse/mark';\nimport { getGrammarOutput, invokeFunctionType, isFunctionType } from '../../parse/util';\nimport { isPositionOrSizeChannel } from '../attributes/helpers';\n\n/**\n * invoke encoder for multiple items\n */\nexport function invokeEncoderToItems(\n element: IElement,\n items: MarkElementItem[],\n encoder: BaseSingleEncodeSpec,\n parameters: any,\n onlyFullEncodeFirst?: boolean\n) {\n if (!encoder) {\n return;\n }\n\n if (isFunctionType(encoder)) {\n items.forEach(item => {\n const attributes = invokeFunctionType(encoder, parameters, item.datum, element);\n Object.assign(item.nextAttrs, attributes);\n });\n } else {\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n const encodeItems =\n onlyFullEncodeFirst && !isPositionOrSizeChannel(element.mark.markType, channel) ? [items[0]] : items;\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n\n let to = hasField ? null : !isNil(encode?.value) ? scale.scale?.(encode.value) : 0;\n\n encodeItems.forEach(item => {\n if (hasField) {\n to = scale.scale?.(fieldAccessor(item.datum));\n }\n item.nextAttrs[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n });\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = fieldAccessor(item.datum);\n });\n } else {\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = invokeFunctionType(encode, parameters, item.datum, element);\n });\n }\n });\n }\n}\n\n/**\n * invoke encoder for single item\n * use invokeEncoderToItems instead if item amount is large\n */\nexport function invokeEncoder(encoder: BaseSingleEncodeSpec, datum: any, element: IElement, parameters: any) {\n if (!encoder) {\n return null;\n }\n if (isFunctionType(encoder)) {\n return invokeFunctionType(encoder, parameters, datum, element);\n }\n const attributes: any = {};\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n const to = hasField\n ? scale.scale?.(fieldAccessor(datum))\n : !isNil(encode?.value)\n ? scale.scale?.(encode.value)\n : 0;\n\n attributes[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n attributes[channel] = fieldAccessor(datum);\n } else {\n attributes[channel] = invokeFunctionType(encode, parameters, datum, element);\n }\n });\n return attributes;\n}\n","import isArray from './isArray';\nimport isFunction from './isFunction';\nimport isPlainObject from './isPlainObject';\n\nfunction objToString(obj: any) {\n return Object.prototype.toString.call(obj);\n}\n\nfunction objectKeys(obj: any) {\n return Object.keys(obj);\n}\n\n// Adapted from https://github.com/antvis/F2/blob/master/packages/f2/src/base/equal.ts by zengyue\n// License: https://github.com/antvis/F2/blob/master/packages/f2/LICENSE\nexport function isEqual(a: any, b: any, options?: { skipFunction?: boolean }): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n // null 和 undefined\n if (a == null || b == null) {\n return false;\n }\n\n // 特殊处理NaN\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (objToString(a) !== objToString(b)) {\n return false;\n }\n\n // 如果是function,则不相等\n if (isFunction(a)) {\n return !!options?.skipFunction;\n }\n\n // 值类型,Number String Boolean\n if (typeof a !== 'object') {\n return false;\n }\n\n if (isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = a.length - 1; i >= 0; i--) {\n if (!isEqual(a[i], b[i], options)) {\n return false;\n }\n }\n return true;\n }\n\n if (!isPlainObject(a)) {\n return false;\n }\n\n const ka = objectKeys(a);\n const kb = objectKeys(b);\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) {\n return false;\n }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (let i = ka.length - 1; i >= 0; i--) {\n // eslint-disable-next-line eqeqeq\n if (ka[i] != kb[i]) {\n return false;\n }\n }\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (let i = ka.length - 1; i >= 0; i--) {\n const key = ka[i];\n if (!isEqual(a[key], b[key], options)) {\n return false;\n }\n }\n\n return true;\n}\n","const getType = (value: any): string => {\n return {}.toString\n .call(value)\n .replace(/^\\[object /, '')\n .replace(/]$/, '');\n};\n\nexport default getType;\n","const objectProto = Object.prototype;\n\nconst isPrototype = function (value: any): boolean {\n const Ctor = value && value.constructor;\n const proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n return value === proto;\n};\n\nexport default isPrototype;\n","import isNil from './isNil';\nimport isArrayLike from './isArrayLike';\nimport getType from './getType';\nimport isPrototype from './isPrototype';\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isEmpty(value: any): boolean {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (isNil(value)) {\n return true;\n }\n if (isArrayLike(value)) {\n return !value.length;\n }\n // TODO: 这里需要优化下\n const type = getType(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !Object.keys(value).length;\n }\n for (const key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import type { IColor, IColorStop, ISegment } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isNil, isString } from '@visactor/vutils';\nimport type { IElement } from '../../types';\n\nconst isStopsEqual = (prev: IColorStop[], next: IColorStop[]) => {\n if (prev === next) {\n return true;\n }\n const prevLength = (prev && prev.length) ?? 0;\n const nextLength = (next && next.length) ?? 0;\n\n if (prevLength !== nextLength || prevLength === 0) {\n return false;\n }\n\n return prev.every((prevEntry, prevIndex) => {\n return (\n (!prevEntry && !next[prevIndex]) ||\n (prevEntry &&\n next[prevIndex] &&\n prevEntry.color === next[prevIndex].color &&\n prevEntry.offset === next[prevIndex].offset)\n );\n });\n};\n\nconst isColorAttrEqual = (prev: IColor, next: IColor) => {\n if (prev === next) {\n return true;\n }\n\n if (typeof prev !== typeof next) {\n return false;\n }\n\n if (isString(prev)) {\n return false;\n }\n\n if (prev.gradient !== (next as any).gradient) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return false;\n }\n\n return prevKeys.every(key => {\n if (key === 'stops') {\n return isStopsEqual(prev[key], next[key]);\n }\n\n return prev[key] === next[key];\n });\n};\n\nconst isLineDashEqual = (prev: number[], next: number[]) => {\n if (prev.length !== next.length) {\n return false;\n }\n\n if (prev.join('-') === next.join('-')) {\n return true;\n }\n\n return false;\n};\n\nconst isSegmentAttrEqual = (prev: any, next: any, key: string) => {\n if (isNil(prev) && isNil(next)) {\n return true;\n }\n\n if (isNil(prev)) {\n return false;\n }\n\n if (isNil(next)) {\n return false;\n }\n\n if (key === 'lineDash') {\n return isLineDashEqual(prev, next);\n }\n\n if (key === 'stroke' || key === 'fill') {\n return isColorAttrEqual(prev, next);\n }\n\n return prev === next;\n};\n\nconst fillAttrs = ['fill', 'fillOpacity', 'background', 'texture', 'texturePadding', 'textureSize', 'textureColor'];\nconst strokeAttrs = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\nconst areaAttrs = fillAttrs.concat(strokeAttrs);\n\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLineSegmentConfigs(items: any[], points: any[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n\n const checkAttributes = element?.mark?.markType === 'area' ? areaAttrs : strokeAttrs;\n\n const segments: any[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !checkAttributes.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n const res = parseCollectionMarkAttributes(entry.attrs) as any;\n\n res.points = points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex);\n return res;\n });\n }\n\n return null;\n}\n\n/**\n * get the segments for connectNulls\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getConnectLineSegmentConfigs(items: any[], points: IPointLike[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n const enableSegments = element ? element.mark.getSpec().enableSegments : false;\n let segments: { isConnect?: boolean; points: any[]; items: any[] }[] = [];\n let point: IPointLike = null;\n let isPrevDefined: boolean;\n let curSegment: { isConnect?: boolean; points: any[]; items: any[] };\n\n items.forEach((item, index) => {\n point = points[index];\n\n if (point && point.defined !== false) {\n if (!isPrevDefined) {\n // start a segment\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n curSegment.points.push(point);\n curSegment.items.push(item);\n\n if (isPrevDefined === false) {\n curSegment.isConnect = true;\n\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n isPrevDefined = true;\n } else {\n isPrevDefined = false;\n }\n });\n\n segments = segments.filter(seg => seg.points.length > 0);\n\n if (segments.length >= 2) {\n const res: ISegment[] = [];\n\n segments.forEach(entry => {\n if (entry.isConnect) {\n res.push({\n points: entry.points,\n isConnect: true\n } as ISegment);\n return;\n } else if (enableSegments) {\n const subSegments = getLineSegmentConfigs(entry.items, entry.points, element);\n\n if (subSegments) {\n subSegments.forEach(subSeg => {\n res.push(subSeg);\n });\n\n return;\n }\n }\n\n const seg = parseCollectionMarkAttributes(entry.items[0]) as any;\n seg.points = entry.points;\n\n res.push(seg);\n });\n\n return res;\n } else if (enableSegments) {\n return getLineSegmentConfigs(items, points, element);\n }\n\n return null;\n}\n\nexport function getLinePointsFromSegments(segments: any[]) {\n if (!segments) {\n return null;\n }\n return segments.reduce((points, segment) => {\n return points.concat(segment.points);\n }, []);\n}\n\nexport function parseCollectionMarkAttributes(itemNextAttrs: any) {\n const result = {};\n\n if (!itemNextAttrs) {\n return result;\n }\n\n const skipKeys = ['x', 'y', 'x1', 'y1', 'defined', 'size', 'width', 'height', 'context'];\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (skipKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n\nexport function removeSegmentAttrs(itemNextAttrs: any, element?: IElement) {\n if (!itemNextAttrs || !itemNextAttrs.segments || !itemNextAttrs.segments.length) {\n return itemNextAttrs;\n }\n\n // TODO 现在非常hack\n const segmentKeys = element?.mark?.markType === 'area' ? ['fillOpacity', 'strokeOpacity'] : ['strokeOpacity'];\n const result = {};\n Object.keys(itemNextAttrs).forEach(key => {\n if (segmentKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n","import type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual,\n isObject\n} from '@visactor/vutils';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey, MARK_OVERLAP_HIDE_KEY } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoder, invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport {\n getLineSegmentConfigs,\n getLinePointsFromSegments,\n parseCollectionMarkAttributes,\n getConnectLineSegmentConfigs,\n removeSegmentAttrs\n} from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IElement,\n IMark,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTransforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(\n attrTransforms ? transformAttributes(attrTransforms, attributes, this) : attributes,\n this.groupKey\n );\n\n if (!this.graphicItem) {\n return;\n }\n\n const { graphicName } = this.mark.getSpec();\n if (isString(graphicName)) {\n this.graphicItem.name = graphicName;\n } else if (isFunction(graphicName)) {\n this.graphicItem.name = graphicName(this);\n }\n\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n if (attrTransforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTransforms, attributes, this);\n return graphicAttributes;\n };\n }\n\n // transform initial attributes\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(Object.assign({}, attributes));\n this.setFinalGraphicAttributes(Object.assign({}, attributes));\n }\n }\n\n updateGraphicItem() {\n if (!this.graphicItem) {\n return;\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate?.getAnimationConfigs('state');\n if (stateAnimation && stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.((animate: any) => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds as IBounds;\n }\n\n getStates() {\n return this.states;\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort && newStateValues.length) {\n newStateValues.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n if (MARK_OVERLAP_HIDE_KEY in this.graphicItem.attribute && 'visible' in graphicAttributes) {\n delete this.graphicItem.attribute[MARK_OVERLAP_HIDE_KEY];\n }\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCustomizedShape();\n }\n\n private _setCustomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n hasStateAnimation() {\n const stateAnimation = this.mark.animate?.getAnimationConfigs('state');\n return stateAnimation && stateAnimation.length > 0;\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && state && this.states.includes(state);\n }\n\n updateStates(states: Record) {\n if (!this.graphicItem) {\n return false;\n }\n let nextStates = this.states.slice();\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n let forceClearState = false;\n let hasUpdate = false;\n\n Object.keys(states).forEach(stateKey => {\n if (!stateKey) {\n return;\n }\n\n const stateValue = states[stateKey];\n const isRuntimeStateUpdate =\n isObject(stateValue) && !isObjEqual(stateValue, this.runtimeStatesEncoder?.[stateKey]);\n\n if (isRuntimeStateUpdate) {\n if (nextStates.includes(stateKey)) {\n forceClearState = true;\n } else {\n nextStates.push(stateKey);\n }\n this._updateRuntimeStates(stateKey, stateValue);\n hasUpdate = true;\n } else if (stateValue) {\n if (!nextStates.includes(stateKey) && encode?.[stateKey]) {\n nextStates.push(stateKey);\n hasUpdate = true;\n }\n } else {\n if (nextStates.length) {\n const newNextStates = nextStates.filter(state => state !== stateKey);\n\n if (newNextStates.length !== nextStates.length) {\n hasUpdate = true;\n nextStates = newNextStates;\n }\n\n if (this.runtimeStatesEncoder && this.runtimeStatesEncoder[stateKey]) {\n this.runtimeStatesEncoder[stateKey] = null;\n }\n }\n }\n });\n\n if (forceClearState) {\n this.graphicItem.clearStates();\n }\n\n if (hasUpdate) {\n this.useStates(nextStates);\n return true;\n }\n\n return false;\n }\n\n addState(state: string | string[], attrs?: BaseSingleEncodeSpec) {\n if (!this.graphicItem) {\n return false;\n }\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n const nextStates = this.states.slice();\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n } else {\n this.graphicItem.clearStates();\n }\n this._updateRuntimeStates(state, attrs);\n\n this.useStates(nextStates);\n return true;\n }\n\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], stateName: string) => {\n if (stateName && !nextStates.includes(stateName) && encode?.[stateName]) {\n nextStates.push(stateName);\n }\n return nextStates;\n }, this.states.slice());\n\n if (nextStates.length !== this.states.length) {\n this.useStates(nextStates);\n\n return true;\n }\n\n return false;\n }\n\n removeState(state: string | string[]) {\n if (!this.graphicItem) {\n return false;\n }\n\n const states = array(state);\n\n if (!states.length) {\n return false;\n }\n\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return false;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? {\n ...(this.mark.getSpec() as MarkSpec).encode?.[stateName],\n ...this.runtimeStatesEncoder[stateName]\n }\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n states.sort(stateSort);\n }\n this.states = states;\n\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!has(finalGraphicAttributes, key) || !isObjEqual(finalGraphicAttributes[key], graphicAttributes[key])) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item.nextAttrs;\n\n if (\n isPointsMarkType(markType) &&\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType))\n ) {\n const markSpec = this.mark.getSpec();\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = markSpec.enableSegments;\n const connectNullsEncoder = (this.mark.getSpec() as MarkSpec).encode?.[BuiltInEncodeNames.connectNulls];\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = parseCollectionMarkAttributes(nextAttrs);\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // vchart新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式;也不支持连接线\n if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else if (connectNullsEncoder) {\n nextAttrs.segments = getConnectLineSegmentConfigs(itemNextAttrs, linePoints, this);\n\n if (nextAttrs.segments && nextAttrs.segments.some((seg: any) => seg.isConnect)) {\n const connectStyle = invokeEncoder(connectNullsEncoder, this.getDatum(), this, this.mark.parameters());\n\n connectStyle &&\n nextAttrs.segments.forEach((seg: any) => {\n if (seg.isConnect) {\n Object.assign(seg, connectStyle);\n }\n });\n }\n // when connectNulls, points need to be saved\n nextAttrs.points = linePoints;\n } else if (enableSegments) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n nextAttrs = removeSegmentAttrs(nextAttrs, this);\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes() ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes() ?? {};\n\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n // ignore loop animation final attributes\n const currentAnimators = this.mark.animate?.getElementAnimators(this).filter(animator => {\n if (animator.animationOptions.timeline.controlOptions?.ignoreLoopFinalAttributes) {\n return !animator.animationOptions.timeline.loop;\n }\n return true;\n });\n\n const animateGraphicAttributes = (currentAnimators || []).reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n /**\n * 在动画执行中获取图元最终的视觉通道结果\n * @param channel 视觉通道\n */\n getFinalAnimationAttribute(channel: string) {\n return this.getFinalGraphicAttributes()?.[channel] ?? this.getGraphicAttribute(channel);\n }\n getFinalAnimationAttributes() {\n return this.getFinalGraphicAttributes() ?? this.graphicItem.attribute;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n (this.graphicItem as any).prevAttrs && this.setPrevGraphicAttributes(null);\n (this.graphicItem as any).nextAttrs && this.setNextGraphicAttributes(null);\n (this.graphicItem as any).finalAttrs && this.setFinalGraphicAttributes(null);\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark && this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark && this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { IBounds } from '@visactor/vutils';\nimport { isArray, isNil, isString, isValid } from '@visactor/vutils';\nimport { CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport type { GroupedData } from '../graph/mark/differ';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\nimport { Element } from '../graph/element';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map = new Map();\n\n isUpdated: boolean = true;\n\n protected _groupEncodeResult: Record;\n private _groupedData: GroupedData;\n\n /** whether mark enter encode is updated */\n protected _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate;\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {}, true);\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, (spec.encode as any)[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n\n (this as any).reuseAnimate?.(mark);\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransform(this._getTransformsBeforeJoin(), data ?? DefaultMarkData, parameters);\n const progressiveTransform = transformData?.progressive;\n\n if (!progressiveTransform) {\n this.evaluateGroup(transformData);\n this.renderContext = this.parseRenderContext(transformData, parameters);\n } else {\n this.renderContext = { large: false };\n }\n\n if (this.renderContext?.progressive) {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n } else {\n let inputData: any[] = null;\n if (progressiveTransform) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n\n if (transformData.progressive.canAnimate && transformData.progressive.unfinished()) {\n this.update(this.spec);\n return this;\n }\n } else {\n inputData = transformData;\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n }\n\n this.update(this.spec);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const res = groupData(currentData, this.spec.groupBy, this.spec.groupSort);\n\n this._groupEncodeResult = null;\n this._groupedData = res;\n }\n\n protected _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType | boolean, clear?: boolean): this {\n return this.encodeState(DiffState.update, channel, value, clear);\n }\n\n encodeState(\n state: string,\n channel: string | BaseSingleEncodeSpec,\n value?: MarkFunctionType | boolean,\n clear?: boolean\n ): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if ((this.spec.encode as any)[state]) {\n const lastEncoder = (this.spec.encode as any)[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n const isSingleChannel = isString(channel);\n const clearAll = (isSingleChannel && clear) || (!isSingleChannel && value);\n\n if (clearAll) {\n Object.keys(lastEncoder).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n\n (this.spec.encode as any)[state] = {};\n } else if (isSingleChannel) {\n this.detach(parseEncodeType(lastEncoder[channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n }\n }\n }\n\n if (channel) {\n if (!(this.spec.encode as any)[state]) {\n (this.spec.encode as any)[state] = {};\n }\n\n // update encode & append new dependencies\n if (isString(channel)) {\n (this.spec.encode as any)[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n (this.spec.encode as any)[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else if (channel) {\n Object.assign((this.spec.encode as any)[state], channel);\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'clipPath',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments',\n 'stateSort',\n 'graphicName',\n 'overflow'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil((this.spec as any)[key])) {\n (this.spec as any)[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil((config as any)[key])) {\n (this.spec as any)[key] = (config as any)[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n (scales as any)[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach((state: string) => {\n const useEncoders = (encoders as any)[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n Object.keys(encoders).forEach((state: string) => {\n const useEncoders = (encoders as any)[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field as string;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const extendedEvt = getExtendedEvents(this.view, event, type, EVENT_SOURCE_VIEW);\n const activeElement = event.element as IElement;\n if (activeElement?.mark === this) {\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n (this as any).initAnimate?.(this.spec);\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n group.appendChild(this);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0,\n overflow: this.spec.overflow\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n\n this.graphicParent.setAttributes({\n overflow: this.spec.overflow\n });\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n (this as any).updateAnimate?.(spec);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n if (!isNil(spec.clipPath)) {\n const paths = isArray(spec.clipPath) ? spec.clipPath : spec.clipPath(this.elements);\n\n if (paths && paths.length) {\n this.graphicItem.setAttribute('path', paths);\n } else {\n this.graphicItem.setAttributes({\n path: paths,\n clip: false\n });\n }\n }\n\n if (!isNil(spec.overflow)) {\n this.graphicItem.setAttribute('overflow', spec.overflow);\n }\n\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n }\n\n createElement() {\n return new Element(this);\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : this.createElement();\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate?.getElementAnimators(element, DiffState.exit);\n animators && animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n } else {\n this.differ.setCurrentData(this._groupedData);\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (!this._groupedData || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupedData.keys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n (res as any)[key] = invokeEncoder(groupEncode, el.items && el.items[0] && el.items[0].datum, el, parameters);\n });\n\n this._groupEncodeResult = res;\n\n return res;\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n return !isNil(spec.interactive) ? { pickable: spec.interactive } : null;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.glyph && this._groupEncodeResult) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, this._groupEncodeResult[element.groupKey]);\n });\n } else if ((groupEncodeAttrs as any)?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, (groupEncodeAttrs as any)[element.groupKey]);\n });\n } else if (initAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n\n if (\n this.isCollectionMark() &&\n (groupEncodeAttrs as any)?.[element.groupKey] &&\n isValid((groupEncodeAttrs as any)[element.groupKey].defined)\n ) {\n element.items.forEach(item => {\n item.nextAttrs.defined = (groupEncodeAttrs as any)[element.groupKey].defined;\n });\n delete (groupEncodeAttrs as any)[element.groupKey].defined;\n }\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? (groupEncodeAttrs as any)?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupedData) {\n const index = this._groupedData.keys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this._groupedData;\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n canAnimateAfterProgressive() {\n return (\n this.renderContext &&\n this.renderContext.beforeTransformProgressive &&\n this.renderContext.beforeTransformProgressive.canAnimate()\n );\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupedData.keys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = this.createElement();\n element.diffState = DiffState.enter;\n element.updateData(key as string, dataSlice, keyGetter);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key as string, dataSlice, keyGetter);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record = {};\n this._groupedData.keys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = this.createElement();\n element.diffState = DiffState.enter;\n element.updateData(key as string, [entry], keyGetter);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key as string] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this.evaluateEncode(elements, encoders, parameters);\n\n if (\n progressiveIndex === 0 &&\n this._groupEncodeResult &&\n !this.isCollectionMark() &&\n this.markType !== GrammarMarkType.glyph\n ) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n if (this._groupEncodeResult[firstElement.groupKey]) {\n (group as IGroup).setTheme({ common: this._groupEncodeResult[firstElement.groupKey] });\n }\n }\n }\n } else {\n this.evaluateEncode(elements, encoders, parameters, true);\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n const transform = this.renderContext.beforeTransformProgressive;\n transform.progressiveRun();\n const output = transform.output();\n\n if (transform.canAnimate) {\n if (transform.unfinished()) {\n return;\n }\n this.evaluateGroup(output);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupedData.keys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransform(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n if (this.elements && this.elements[0] && this.elements[0].getGraphicItem) {\n return this.elements[0].getGraphicItem();\n }\n }\n\n getBounds() {\n return (this.graphicItem ? this.graphicItem.AABBBounds : this.getGroupGraphicItem()?.AABBBounds) as IBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n this.releaseEvent();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n super.clear();\n }\n\n prepareRelease() {\n // 清除数据,防止数据比对失败\n this.differ.setCurrentData(null);\n this.animate?.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.differ = null;\n this.elements = [];\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n","import type { INode } from '@visactor/vrender-core';\nimport { transformsByType } from '../graph/attributes';\nimport { DefaultKey, DefaultMarkData } from '../graph/constants';\nimport { BuiltInEncodeNames, GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport { createGraphicItem } from '../graph/util/graphic';\nimport type { IElement, IGlyphMark, IGroupMark, IMark, IView } from '../types';\nimport { Mark } from './mark';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { invokeEncoderToItems } from '../graph/mark/encode';\n\nexport class GroupMark extends Mark implements IGroupMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, GrammarMarkType.group, group);\n this.children = [];\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n appendChild(mark: IMark) {\n this.children.push(mark);\n return this;\n }\n removeChild(mark: IMark) {\n this.children = this.children.filter(child => child !== mark);\n return this;\n }\n\n includesChild(mark: IMark, descendant: boolean = true) {\n if (this.children.includes(mark)) {\n return true;\n }\n if (!descendant) {\n return false;\n }\n return this.children.some(child => {\n if (child.markType === GrammarMarkType.group) {\n return (child as IGroupMark).includesChild(mark, true);\n }\n return false;\n });\n }\n\n updateLayoutChildren() {\n if (!this.children.length) {\n return this;\n }\n if (!this.layoutChildren) {\n this.layoutChildren = [];\n }\n\n this.layoutChildren = this.children.filter(child => child.needLayout());\n\n return this;\n }\n\n getAttributeTransforms() {\n return transformsByType.rect;\n }\n\n protected evaluateJoin(data: any[]) {\n if (!this.elements.length) {\n const el = this.createElement();\n\n el.updateData(DefaultKey, DefaultMarkData, () => '');\n this.elements = [el];\n this.elementMap.set(DefaultKey, el);\n }\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n const initAttrs: any = {};\n\n if (!isNil(spec.clip)) {\n initAttrs.clip = spec.clip;\n }\n\n if (!isNil(spec.zIndex)) {\n initAttrs.zIndex = spec.zIndex;\n }\n\n if (!isNil(spec.clipPath)) {\n const paths = isFunction(spec.clipPath) ? spec.clipPath([element]) : spec.clipPath;\n\n if (paths && paths.length) {\n initAttrs.path = paths;\n } else {\n initAttrs.path = null;\n initAttrs.clip = false;\n }\n }\n\n if (!isNil(spec.interactive)) {\n initAttrs.pickable = spec.interactive;\n }\n\n return initAttrs;\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n const el = this.elements[0];\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n\n this._groupEncodeResult = nextAttrs;\n return nextAttrs;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, groupEncodeAttrs);\n });\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic();\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK, { graphicItem });\n\n graphicItem.name = `${this.id() || this.markType}`;\n\n this.graphicParent.insertIntoKeepIdx(graphicItem as unknown as INode, this.graphicIndex);\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK, { graphicItem });\n\n return graphicItem;\n }\n}\n","import { isNil, isString } from '@visactor/vutils';\nimport type {\n BuiltInGrammarType,\n ICoordinate,\n IData,\n IGrammarBase,\n IMark,\n IScale,\n ISignal,\n IRecordedGrammars,\n IGroupMark,\n IMarkTreeNode,\n IRecordedTreeGrammars\n} from '../types';\nimport { GrammarMarkType } from '../graph/enums';\n\nexport class RecordedGrammars implements IRecordedGrammars {\n private _warning: (key: string, grammar: IGrammarBase) => void;\n private _mapKey: (grammar: IGrammarBase) => string;\n private _grammars: Record = {\n signal: [],\n data: [],\n scale: [],\n coordinate: [],\n mark: [],\n customized: []\n };\n // map key might not be unique\n private _grammarMap: Record> = {\n signal: {},\n data: {},\n scale: {},\n coordinate: {},\n mark: {},\n customized: {}\n };\n private _size: number = 0;\n\n constructor(\n mapKey: string | ((grammar: IGrammarBase) => string),\n warningWhenDuplicated?: (key: string, grammar: IGrammarBase) => void\n ) {\n this._mapKey = isString(mapKey) ? grammar => grammar[mapKey] : mapKey;\n this._warning = warningWhenDuplicated;\n }\n\n record(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType].push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap[grammarType][key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap[grammarType][key] = grammar;\n }\n }\n } else {\n this._grammars.customized.push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap.customized[key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap.customized[key] = grammar;\n }\n }\n }\n this._size += 1;\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType] = this._grammars[grammarType].filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap[grammarType][key] === grammar) {\n delete this._grammarMap[grammarType][key];\n }\n } else {\n this._grammars.customized = this._grammars.customized.filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap.customized[key] === grammar) {\n delete this._grammarMap.customized[key];\n }\n }\n this._size -= 1;\n return this;\n }\n\n size() {\n return this._size;\n }\n\n getSignal(key: string): ISignal | null {\n return (this._grammarMap.signal[key] as ISignal) ?? null;\n }\n getData(key: string): IData | null {\n return (this._grammarMap.data[key] as IData) ?? null;\n }\n getScale(key: string): IScale | null {\n return (this._grammarMap.scale[key] as IScale) ?? null;\n }\n getCoordinate(key: string): ICoordinate | null {\n return (this._grammarMap.coordinate[key] as ICoordinate) ?? null;\n }\n getMark(key: string): IMark | null {\n return (this._grammarMap.mark[key] as IMark) ?? null;\n }\n getCustomized(key: string): IGrammarBase | null {\n return this._grammarMap.customized[key] ?? null;\n }\n getGrammar(key: string): IGrammarBase | null {\n if (this._grammarMap.data[key]) {\n return this._grammarMap.data[key];\n } else if (this._grammarMap.signal[key]) {\n return this._grammarMap.signal[key];\n } else if (this._grammarMap.scale[key]) {\n return this._grammarMap.scale[key];\n } else if (this._grammarMap.coordinate[key]) {\n return this._grammarMap.coordinate[key];\n } else if (this._grammarMap.mark[key]) {\n return this._grammarMap.mark[key];\n } else if (this._grammarMap.customized[key]) {\n return this._grammarMap.customized[key];\n }\n return null;\n }\n\n getAllSignals(): ISignal[] {\n return this._grammars.signal as ISignal[];\n }\n getAllData(): IData[] {\n return this._grammars.data as IData[];\n }\n getAllScales(): IScale[] {\n return this._grammars.scale as IScale[];\n }\n getAllCoordinates(): ICoordinate[] {\n return this._grammars.coordinate as ICoordinate[];\n }\n getAllMarks(): IMark[] {\n return this._grammars.mark as IMark[];\n }\n getAllCustomized(): IGrammarBase[] {\n return this._grammars.customized;\n }\n\n traverse(func: (grammar: IGrammarBase) => boolean | void) {\n Object.values(this._grammars ?? {}).forEach(grammars =>\n (grammars ?? []).forEach(grammar => {\n // stop traversing when func returns true\n if (func.call(null, grammar)) {\n return;\n }\n })\n );\n }\n\n find(func: (grammar: IGrammarBase) => boolean) {\n let targetGrammar: IGrammarBase = null;\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammar = grammar;\n return true;\n }\n return false;\n });\n return targetGrammar;\n }\n\n filter(func: (grammar: IGrammarBase) => boolean) {\n const targetGrammars: IGrammarBase[] = [];\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammars.push(grammar);\n }\n });\n return targetGrammars;\n }\n\n clear() {\n this._size = 0;\n this._grammars = { signal: [], data: [], scale: [], coordinate: [], mark: [], customized: [] };\n this._grammarMap = { signal: {}, data: {}, scale: {}, coordinate: {}, mark: {}, customized: {} };\n }\n\n release() {\n this._size = 0;\n this._grammars = null;\n this._grammarMap = null;\n }\n}\n\nexport class RecordedTreeGrammars extends RecordedGrammars implements IRecordedTreeGrammars {\n private _markNodes: IMarkTreeNode[] = [];\n\n record(grammar: IGrammarBase) {\n super.record(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode: IMarkTreeNode = {\n mark: mark,\n parent: null,\n children: []\n };\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && (targetMark as IGroupMark).includesChild(mark, false)) {\n node.children.push(currentNode);\n currentNode.parent = node;\n } else if (mark.markType === GrammarMarkType.group && (mark as IGroupMark).includesChild(targetMark, false)) {\n currentNode.children.push(node);\n node.parent = currentNode;\n }\n });\n this._markNodes.push(currentNode);\n }\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n super.unrecord(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode = this._markNodes.find(node => node.mark === mark);\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && node.children.includes(currentNode)) {\n node.children = node.children.filter(n => n !== currentNode);\n currentNode.parent = null;\n } else if (mark.markType === GrammarMarkType.group && currentNode.children.includes(node)) {\n currentNode.children = currentNode.children.filter(n => n !== node);\n node.parent = null;\n }\n });\n this._markNodes = this._markNodes.filter(n => n !== currentNode);\n }\n return this;\n }\n\n getAllMarkNodes() {\n return this._markNodes;\n }\n\n clear() {\n super.clear();\n this._markNodes = [];\n }\n\n release() {\n super.release();\n this._markNodes = null;\n }\n}\n\nexport const releaseUpMarkNode = (node: IMarkTreeNode) => {\n // if (node.mark.get)\n};\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IMark, MarkSpec } from '../types';\nimport { Mark } from '../view/mark';\nimport { createGraphicItem } from '../graph/util/graphic';\n\nexport class Text extends Mark {\n static markType = GrammarMarkType.text;\n declare markType: GrammarMarkType.text;\n protected declare spec: MarkSpec;\n\n addGraphicItem(initAttrs: any, groupKey?: string) {\n const originalAttrs = initAttrs && initAttrs.limitAttrs;\n\n const isRich =\n originalAttrs &&\n (originalAttrs.textType === 'rich' || (originalAttrs.text && originalAttrs.text.type === 'rich'));\n\n const graphicItem = createGraphicItem(\n this as IMark,\n isRich ? GrammarMarkType.richtext : GrammarMarkType.text,\n initAttrs\n );\n\n return super.addGraphicItem(initAttrs, groupKey, graphicItem);\n }\n\n release(): void {\n super.release();\n }\n}\n","import type {\n CircleAxisAttributes,\n CircleCrosshairAttrs,\n ColorLegendAttributes,\n ContinuousPlayerAttributes,\n DataLabelAttrs,\n LineDataLabelAttrs,\n DataZoomAttributes,\n DiscreteLegendAttrs,\n DiscretePlayerAttributes,\n LineAxisAttributes,\n LineCrosshairAttrs,\n LineLabelAttrs,\n PolygonCrosshairAttrs,\n RectCrosshairAttrs,\n RectLabelAttrs,\n SectorCrosshairAttrs,\n SizeLegendAttributes,\n SliderAttributes,\n SymbolLabelAttrs,\n ArcLabelAttrs,\n TooltipAttributes,\n BaseLabelAttrs,\n TitleAttrs,\n LineAxisGridAttributes,\n CircleAxisGridAttributes,\n ScrollBarAttributes,\n AreaLabelAttrs\n} from '@visactor/vrender-components';\nimport type { IComponentTheme, RecursivePartial } from '../../types';\n\nconst axis: RecursivePartial = {\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#89909d',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n start: { x: 0, y: 0 },\n end: { x: 100, y: 0 },\n x: 0,\n y: 0\n};\n\nconst circleAxis: RecursivePartial = {\n title: {\n space: 4,\n padding: [0, 0, 0, 0],\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n },\n text: 'theta'\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#6F6F6F',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n startAngle: 0,\n endAngle: Math.PI * 2,\n radius: 100,\n innerRadius: 0,\n center: { x: 0, y: 0 },\n x: 0,\n y: 0\n};\n\nconst grid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst circleGrid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst discreteLegend: RecursivePartial = {\n layout: 'vertical',\n title: {\n align: 'start',\n space: 12,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: 10,\n spaceRow: 10,\n shape: {\n space: 4,\n style: {\n size: 10,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n stroke: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n label: {\n space: 4,\n style: {\n fontSize: 12,\n fill: 'black',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n fillOpacity: 0.7,\n fill: 'gray'\n },\n unSelectedHover: {\n fillOpacity: 0.2,\n fill: 'gray'\n }\n }\n },\n focus: false,\n focusIconStyle: {\n size: 10,\n fill: '#333',\n cursor: 'pointer'\n },\n visible: true,\n padding: {\n top: 2,\n bottom: 2,\n left: 2,\n right: 2\n }\n },\n autoPage: true,\n pager: {\n space: 12,\n handler: {\n style: {\n size: 10\n },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: false,\n items: [\n {\n index: 0,\n id: '',\n label: '',\n shape: {\n fill: '#6690F2',\n stroke: '#6690F2',\n symbolType: 'circle'\n }\n }\n ]\n};\n\nconst colorLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n colors: [],\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 8,\n railStyle: {\n cornerRadius: 5\n }\n};\n\nconst sizeLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n trackStyle: {\n fill: '#ccc'\n },\n layout: 'horizontal',\n align: 'bottom',\n railWidth: 200,\n railHeight: 6,\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nconst lineCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n};\n\nconst rectCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n rectStyle: {\n width: 10,\n height: 10\n }\n};\n\nconst sectorCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI / 6\n};\n\nconst circleCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nconst polygonCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2,\n sides: 6\n};\n\nconst slider: RecursivePartial = {\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 10,\n railStyle: {\n cornerRadius: 5\n },\n range: {\n draggableTrack: true\n },\n startText: {\n visible: true,\n text: '',\n space: 8\n },\n endText: {\n visible: true,\n text: '',\n space: 8\n },\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nexport const dataLabel: RecursivePartial = {\n size: { width: 400, height: 400 },\n dataLabels: []\n};\n\nexport const lineDataLabel: RecursivePartial = {\n type: 'line-data',\n data: [\n {\n text: ''\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: false,\n clampForce: false\n },\n smartInvert: false\n};\n\nexport const lineLabel: RecursivePartial = {\n type: 'line',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'start',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const areaLabel: RecursivePartial = {\n type: 'area',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'end',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const rectLabel: RecursivePartial = {\n type: 'rect',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const symbolLabel: RecursivePartial = {\n type: 'symbol',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: true,\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const arcLabel: RecursivePartial = {\n type: 'arc',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n width: 800,\n height: 600,\n position: 'outside',\n\n zIndex: 302\n};\n\nexport const pointLabel: RecursivePartial = {\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const datazoom: RecursivePartial = {\n orient: 'bottom',\n showDetail: 'auto',\n brushSelect: true,\n start: 0,\n end: 1,\n position: { x: 0, y: 0 },\n size: { width: 500, height: 40 },\n previewData: []\n};\n\nexport const continuousPlayer: RecursivePartial = {};\n\nexport const discretePlayer: RecursivePartial = {};\n\nexport const tooltip: RecursivePartial = {};\n\nexport const title: RecursivePartial = {\n textStyle: {\n fill: '#21252c'\n },\n subtextStyle: {\n fill: '#606773'\n }\n};\n\nexport const scrollbar: RecursivePartial = {\n width: 12,\n height: 12,\n padding: [2, 2],\n railStyle: {\n fill: 'rgba(0, 0, 0, .1)'\n }\n};\n\nexport const defaultComponentTheme: IComponentTheme = {\n axis,\n circleAxis,\n\n grid,\n circleGrid,\n\n discreteLegend,\n colorLegend,\n sizeLegend,\n\n lineCrosshair,\n rectCrosshair,\n sectorCrosshair,\n circleCrosshair,\n polygonCrosshair,\n\n slider,\n\n dataLabel,\n pointLabel,\n lineLabel,\n areaLabel,\n rectLabel,\n symbolLabel,\n arcLabel,\n lineDataLabel,\n\n datazoom,\n\n continuousPlayer,\n discretePlayer,\n\n tooltip,\n\n title,\n\n scrollbar\n};\n","export const DEFAULT_PADDING = 5;\n","import type { IMarkTheme } from '../../types';\n\nexport const defaultMarkTheme: IMarkTheme = {\n symbol: {\n shape: 'circle',\n size: 8\n },\n text: {\n fontSize: 14,\n fill: '#000000'\n }\n};\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nconst darkComponents = Object.assign({}, defaultComponentTheme);\ndarkComponents.axis = Object.assign({}, darkComponents.axis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.circleAxis = Object.assign({}, darkComponents.circleAxis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.grid = Object.assign({}, darkComponents.grid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.circleGrid = Object.assign({}, darkComponents.circleGrid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.rectLabel = Object.assign({}, darkComponents.rectLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.lineLabel = Object.assign({}, darkComponents.lineLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\n\ndarkComponents.symbolLabel = Object.assign({}, darkComponents.symbolLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.title = Object.assign({}, darkComponents.title, {\n textStyle: {\n fill: '#fdfdfd'\n },\n subtextStyle: {\n fill: '#888c93'\n }\n});\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n padding: DEFAULT_PADDING,\n background: '#202226',\n palette: {\n default: [\n '#5383F4',\n '#7BCF8E',\n '#FF9D2C',\n '#FFDB26',\n '#7568D9',\n '#80D8FB',\n '#1857A3',\n '#CAB0E8',\n '#FF8867',\n '#B9E493',\n '#2CB4A8',\n '#B9E4E3'\n ]\n },\n marks: defaultMarkTheme,\n components: darkComponents\n};\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nexport const defaultTheme: ITheme = {\n name: 'default',\n padding: DEFAULT_PADDING,\n palette: {\n default: [\n '#6690F2',\n '#70D6A3',\n '#B4E6E2',\n '#63B5FC',\n '#FF8F62',\n '#FFDC83',\n '#BCC5FD',\n '#A29BFE',\n '#63C4C7',\n '#F68484'\n ]\n },\n marks: defaultMarkTheme,\n components: defaultComponentTheme\n};\n","import { DefaultKey } from '../graph/constants';\nimport { GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport type {\n IGroupMark,\n IView,\n IComponent,\n ComponentSpec,\n IData,\n Nil,\n MarkFunctionType,\n StateEncodeSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { Mark } from './mark';\n\nexport class Component extends Mark implements IComponent {\n declare markType: GrammarMarkType.component;\n readonly componentType: string;\n protected declare spec: ComponentSpec;\n\n protected mode?: '2d' | '3d';\n\n protected _componentDatum: any = { [DefaultKey]: 0 };\n protected _encoders: StateEncodeSpec;\n\n constructor(view: IView, componentType: string, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, GrammarMarkType.component, group);\n this.componentType = componentType;\n this.spec.type = 'component';\n this.spec.componentType = componentType;\n this.mode = mode;\n this._updateComponentEncoders();\n }\n\n configureComponent(config: any) {\n this.spec.componentConfig = config;\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem =\n newGraphicItem ??\n Factory.createGraphicComponent(this.componentType, attrs, { mode: this.mode, skipDefault: this.spec.skipTheme });\n\n if (graphicItem) {\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK, { graphicItem });\n (this.graphicParent as any).appendChild(graphicItem);\n\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK, { graphicItem });\n }\n\n return graphicItem;\n }\n\n join(data: IData | string | Nil) {\n return super.join(data, DefaultKey);\n }\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n this._updateComponentEncoders();\n return this;\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n protected _prepareRejoin() {\n this._componentDatum[DefaultKey] += 1;\n }\n\n protected evaluateJoin(data: any[]) {\n this.spec.key = DefaultKey;\n\n if (data) {\n (data as any)[DefaultKey] = this._componentDatum[DefaultKey];\n\n this._componentDatum = data;\n } else {\n this._componentDatum = { [DefaultKey]: this._componentDatum[DefaultKey] };\n }\n\n // component mark do not support data join\n return super.evaluateJoin([this._componentDatum]);\n }\n\n protected _updateComponentEncoders() {\n this._encoders = this.spec.encode;\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n}\n","import type { IGrammarBase, IMark, IRunningConfig, MarkSpec } from '../types';\nimport type { DiffResult } from '../types/base';\nimport type { IViewDiff } from '../types/morph';\nimport { diffSingle, groupData } from './mark/differ';\nimport { GrammarMarkType } from './enums';\n\nconst EmptyKey = Symbol.for('key');\n\nexport class ViewDiff implements IViewDiff {\n diffGrammar(prevGrammars: U[], nextGrammars: U[]): DiffResult {\n const key = (grammar: U) => grammar.id() ?? Symbol();\n return diffSingle(prevGrammars, nextGrammars, key);\n }\n\n diffMark(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): DiffResult {\n const diffResult: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n let prevDiffMarks: IMark[] = [];\n let nextDiffMarks: IMark[] = [];\n\n // filter out marks & specs which will not morph\n prevMarks.forEach(mark => {\n if (\n // group mark does not support reusing or morphing\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n prevDiffMarks.push(mark);\n } else {\n diffResult.exit.push({ prev: [mark] });\n }\n });\n nextMarks.forEach(mark => {\n if (\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n nextDiffMarks.push(mark);\n } else {\n diffResult.enter.push({ next: [mark] });\n }\n });\n\n // 1. match by custom key\n const keyDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.getMorphConfig().morphKey,\n mark => mark.getMorphConfig().morphKey\n );\n prevDiffMarks = keyDiffResult.prev;\n nextDiffMarks = keyDiffResult.next;\n diffResult.update = diffResult.update.concat(keyDiffResult.update);\n\n // 2. match by name\n const nameDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.id(),\n mark => mark.id()\n );\n prevDiffMarks = nameDiffResult.prev;\n nextDiffMarks = nameDiffResult.next;\n diffResult.update = diffResult.update.concat(nameDiffResult.update);\n\n // 3. match by index\n\n // FIXME: mark index cannot be get before executing, index is decided by remove/order for now\n const prevParentGroup = groupData(prevDiffMarks, mark => mark.group?.id?.());\n const nextParentGroup = groupData(nextDiffMarks, mark => mark.group?.id?.());\n\n Object.keys(nextParentGroup).forEach(groupName => {\n const prevChildren = prevParentGroup.data.get(groupName);\n const nextChildren = nextParentGroup.data.get(groupName);\n if (prevChildren && nextChildren) {\n for (let i = 0; i < Math.max(prevChildren.length, nextChildren.length); i += 1) {\n const prevChild = prevChildren[i];\n const nextChild = nextChildren[i];\n if (prevChild && nextChild) {\n diffResult.update.push({ prev: [prevChild], next: [nextChild] });\n } else if (prevChild) {\n diffResult.exit.push({ prev: [prevChild] });\n } else if (nextChild) {\n diffResult.enter.push({ next: [nextChild] });\n }\n }\n\n prevDiffMarks = prevDiffMarks.filter(mark => !prevChildren.includes(mark));\n nextDiffMarks = nextDiffMarks.filter(mark => !nextChildren.includes(mark));\n }\n });\n\n // 4. handle unmatched marks\n prevDiffMarks.forEach(mark => diffResult.exit.push({ prev: [mark] }));\n nextDiffMarks.forEach(mark => diffResult.enter.push({ next: [mark] }));\n\n return diffResult;\n }\n\n private diffUpdateByGroup(\n prev: U[],\n next: V[],\n prevKey: (datum: U) => symbol | string,\n nextKey: (datum: V) => symbol | string\n ) {\n const prevGroup = groupData(prev, datum => prevKey(datum) ?? EmptyKey);\n const nextGroup = groupData(next, datum => nextKey(datum) ?? EmptyKey);\n\n let prevAfterDiff = prev;\n let nextAfterDiff = next;\n const update: { prev: U[]; next: V[] }[] = [];\n nextGroup.keys.forEach(key => {\n if (key !== EmptyKey) {\n const prevKeyData = prevGroup.data.get(key);\n const nextKeyData = nextGroup.data.get(key);\n if (prevKeyData && nextKeyData) {\n update.push({ prev: prevKeyData, next: nextKeyData });\n prevAfterDiff = prevAfterDiff.filter(datum => !prevKeyData.includes(datum));\n nextAfterDiff = nextAfterDiff.filter(datum => !nextKeyData.includes(datum));\n }\n }\n });\n return {\n prev: prevAfterDiff,\n next: nextAfterDiff,\n update\n };\n }\n}\n","import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isString, getContainerSize, Logger, array, isNil, isArray } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n GroupMarkSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n SIGNAL_VIEW_BOX,\n ID_PREFIX,\n NAME_PREFIX,\n EVENT_SOURCE_WINDOW\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { isGrammar } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport type { IViewDiff } from '../types/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\nimport { ViewDiff } from '../graph/view-diff';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n\n /** morph animate */\n private _differ: IViewDiff;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: >(\n // event: T,\n // ...args: EventEmitter.EventArgs\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById(id: string): ISignal | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal(signal: string | ISignal, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal(value?: T, update?: SignalFunctionType): ISignal {\n const signal: ISignal = new Signal(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n const GlyphMark = Factory.getMark(GrammarMarkType.glyph);\n\n if (GlyphMark) {\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n }\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n (this as any).event?.(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate?.disable();\n } else {\n this.animate?.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || Factory.getDefaultLayout();\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks && this.animate) {\n this.animate.animate();\n } else {\n // 清理没有动画的离场元素\n this.traverseMarkTree(\n mark => {\n mark.cleanExitElements();\n },\n null,\n true\n );\n }\n // 绘图 =>\n this.renderer.render(immediately);\n //\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n\n // evaluate dataflow\n this._dataflow.evaluate();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n (this as any).morph?.(normalizedRunningConfig);\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._differ.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._differ.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._differ.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if ((this as any).morph && ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll)) {\n (this as any).addMorphMarks?.({ prev: diff.prev, next: diff.next });\n } else if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate?.stop();\n if (runningConfig.enableExitAnimation && this.animate) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || (node.mark.animate && node.mark.animate.getAnimatorCount() !== 0)) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (!mark.animate || mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate && mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n this.evaluate({ morph: false });\n } else {\n this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n interaction(type: string, spec: Partial) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n /**\n * 初始化事件配置,将所有配置转化为 {[key: string]: boolean } 格式。\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n initializeEventConfig(config: any) {\n const eventsConfig = Object.assign({ defaults: {} }, config);\n\n const unpack = (obj: any, keys: string[]) => {\n keys.forEach(k => {\n if (isArray(obj[k])) {\n obj[k] = obj[k].reduce((set: any, key: any) => {\n set[key] = true;\n return set;\n }, {});\n }\n });\n };\n\n unpack(eventsConfig.defaults, ['prevent', 'allow']);\n unpack(eventsConfig, [EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW]);\n\n return eventsConfig;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const extendedEvt = getExtendedEvents(this, event, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, (event as any).element);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = (this as any).initAnimate?.(this);\n\n this._differ = new ViewDiff();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = this.initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n } else if (\n this._progressiveMarks &&\n this.animate &&\n this._progressiveMarks.every(mark => mark.canAnimateAfterProgressive())\n ) {\n this.animate.animate();\n } else if (this._progressiveMarks) {\n this._progressiveMarks = null;\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n Logger.setInstance(null);\n\n this.animate?.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n","import type { RenderMode } from '../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\n\n// TODO: feishu => lark\nexport function toRenderMode(mode: RenderMode): any {\n switch (mode) {\n case RenderModeEnum['desktop-browser']:\n case RenderModeEnum['mobile-browser']:\n return 'browser';\n case RenderModeEnum.node:\n case RenderModeEnum.worker:\n return 'node';\n case RenderModeEnum.miniApp:\n case RenderModeEnum['desktop-miniApp']:\n return 'feishu';\n case RenderModeEnum.lynx:\n return 'lynx';\n case RenderModeEnum.wx:\n return 'wx';\n case RenderModeEnum.tt:\n return 'tt';\n case RenderModeEnum.harmony:\n return 'harmony';\n }\n return 'browser';\n}\n","import type { IGroupMark, IGrammarBase, IView, IRenderer, InteractionSpec } from '@visactor/vgrammar-core';\nimport type { Maybe, IPerformanceHook, StringOrNumber } from '../../typings';\nimport type { IColor, IStage } from '@visactor/vrender-core';\nimport type { IChart } from '../../chart/interface/chart';\nimport type { IVChart } from '../../core/interface';\nimport type { IMorphConfig } from '../../animation/spec';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { EventSourceType, EventType } from '../../event/interface';\n\nexport type CompilerListenerParameters = {\n type: EventType;\n event: Event;\n source: EventSourceType;\n // FIXME: 这里 item 应当为场景树的 Item 类型\n item: any | null;\n datum: any | null;\n markId: number | null;\n modelId: number | null;\n markUserId: StringOrNumber | null;\n modelUserId: StringOrNumber | null;\n};\n\nexport interface IProductMap {\n /** 编译产物 id 和对应的在 vchart 中的 GrammarItem */\n [productId: string]: IGrammarItemMap;\n}\n\nexport interface IGrammarItemMap {\n /** GrammarItem id 和 对应的引用 */\n [id: number]: T;\n}\n\nexport type ICompilerModel = Record>;\n\nexport interface ICompiler {\n isInited?: boolean;\n getVGrammarView: () => IView;\n getModel: () => ICompilerModel;\n getRenderer: () => IRenderer;\n getCanvas: () => HTMLCanvasElement | undefined;\n getStage: () => IStage | undefined;\n compile: (ctx: { chart: IChart; vChart: IVChart }, option: any) => void;\n clear: (ctx: { chart: IChart; vChart: IVChart }, removeGraphicItems?: boolean) => void;\n renderNextTick: (morphConfig?: IMorphConfig) => void;\n render: (morphConfig?: IMorphConfig) => void;\n updateViewBox: (viewBox: IBoundsLike, reRender?: boolean) => void;\n resize: (width: number, height: number, reRender?: boolean) => void;\n setBackground: (color: IColor) => void;\n setSize: (width: number, height: number) => void;\n setViewBox: (viewBox: IBoundsLike, reRender?: boolean) => void;\n addEventListener: (\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ) => void;\n removeEventListener: (\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ) => void;\n release: () => void;\n releaseGrammar: (removeGraphicItems: boolean) => void;\n addGrammarItem: (grammarItem: IGrammarItem) => void;\n removeGrammarItem: (grammarItem: IGrammarItem, reserveVGrammarModel?: boolean) => void;\n addInteraction: (interaction: InteractionSpec & { seriesId?: number; regionId?: number }) => void;\n removeInteraction: (seriesId: number) => void;\n updateDepend: (items?: IGrammarItem[]) => boolean;\n}\n\nexport interface ICompilable {\n /** 获取 compile 对象 */\n getCompiler: () => ICompiler;\n /** 获取 vgrammar view */\n getVGrammarView: () => IView;\n\n /** 编译总入口 */\n compile: () => void;\n /** 编译所有 mark */\n compileMarks?: (group?: string | IGroupMark) => void;\n /** 编译所有 data */\n compileData?: () => void;\n /** 编译所有 signal */\n compileSignal?: () => void;\n\n /** 清除compile 内容入口 */\n clear?: () => void;\n\n /** 全部编译完成 lift circle */\n afterCompile?: () => void;\n\n /** 释放总入口 */\n release: () => void;\n}\n\nexport interface ICompilableInitOption {\n /** 编译对象 应当由外部提供 */\n getCompiler: () => ICompiler;\n /** 性能测试钩子 */\n performanceHook?: IPerformanceHook;\n}\n\nexport enum GrammarType {\n data = 'data',\n signal = 'signal',\n mark = 'mark'\n}\n\nexport interface IGrammarItem extends ICompilable {\n id: number;\n /** 语法元素类型 */\n grammarType: GrammarType;\n /** 获取语法元素 */\n getProduct: () => Maybe;\n /** 生成语法元素名称 */\n generateProductId: () => string;\n /** 获取语法元素名称 */\n getProductId: () => string;\n /** 删除已编译的语法元素 */\n removeProduct: (reserveVGrammarModel?: boolean) => void;\n /** 获取该语法元素依赖的语法元素 */\n getDepend: () => IGrammarItem[];\n /** 设置该语法元素依赖的语法元素 */\n setDepend: (...depend: IGrammarItem[]) => void;\n /** 更新语法元素的依赖,返回是否全部成功更新 */\n updateDepend: () => boolean;\n}\n\nexport type GrammarItemInitOption = ICompilableInitOption;\n\nexport type GrammarItemCompileOption = Record;\n","import { ChartEvent, Event_Source_Type } from './../constant/event';\nimport type { IElement, InteractionSpec, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { View } from '@visactor/vgrammar-core';\nimport type {\n CompilerListenerParameters,\n ICompiler,\n ICompilerModel,\n IGrammarItem,\n IProductMap,\n IRenderContainer,\n IRenderOption\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from './interface/compilable-item';\nimport { toRenderMode } from './util';\nimport { isMobileLikeMode, isTrueBrowser } from '../util/env';\nimport { isString } from '../util/type';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValid, Logger, LoggerLevel } from '@visactor/vutils';\nimport type { EventSourceType } from '../event/interface';\nimport type { IChart } from '../chart/interface';\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IColor, IStage } from '@visactor/vrender-core';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { IVChart } from '../core/interface';\n\ntype EventListener = {\n type: string;\n callback: (...args: any[]) => void;\n};\n\nexport class Compiler implements ICompiler {\n protected _view: IView;\n /**\n * 获取 VGrammar View 实例\n */\n getVGrammarView() {\n return this._view;\n }\n protected _viewListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _windowListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _canvasListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n\n isInited: boolean = false;\n\n private _nextRafId: number;\n\n protected _width: number;\n protected _height: number;\n\n protected _container: IRenderContainer;\n protected _option: IRenderOption;\n // 已释放标记\n private _released: boolean = false;\n\n protected _model: ICompilerModel = {\n [GrammarType.signal]: {},\n [GrammarType.data]: {},\n [GrammarType.mark]: {}\n };\n\n protected _interactions: (InteractionSpec & { seriesId?: number; regionId?: number })[];\n getModel() {\n return this._model;\n }\n\n private _compileChart: IChart = null;\n\n constructor(container: IRenderContainer, option: IRenderOption) {\n this._container = container;\n this._option = option;\n }\n\n getRenderer() {\n return this._view?.renderer;\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._view?.renderer.canvas();\n }\n\n /**\n * 获取 渲染引擎\n */\n getStage(): IStage | undefined {\n return this._view?.renderer.stage() as unknown as IStage;\n }\n\n initView() {\n if (this._released) {\n return;\n }\n this.isInited = true;\n if (this._view) {\n return;\n }\n const logger = new Logger(this._option.logLevel ?? LoggerLevel.Error);\n if (this._option?.onError) {\n logger.addErrorHandler((...args) => {\n this._option?.onError?.(...args);\n });\n }\n const {\n performanceHook,\n autoRefreshDpr,\n dpr,\n mode,\n gestureConfig,\n interactive,\n clickInterval,\n autoPreventDefault,\n ...restOption\n } = this._option;\n this._view = new View({\n width: this._width,\n height: this._height,\n container: this._container.dom ?? null,\n renderCanvas: this._container.canvas ?? null,\n hooks: performanceHook, // vgrammar 事件改造后,性能回调函数放在了hooks中实现\n ...restOption,\n dpr,\n autoRefresh: isValid(autoRefreshDpr) ? autoRefreshDpr : !isValid(dpr),\n mode: toRenderMode(mode),\n autoFit: false,\n eventConfig: {\n gesture: isValid(gestureConfig) ? (gestureConfig as any) : isMobileLikeMode(mode),\n disable: interactive === false,\n clickInterval,\n autoPreventDefault\n },\n doLayout: () => {\n this._compileChart?.onLayout(this._view);\n },\n logger: logger,\n logLevel: logger.level()\n });\n this._setCanvasStyle();\n\n // emit afterRender event\n this.getStage().hooks.afterRender.tap('chart-event', this.handleStageRender);\n\n if (interactive !== false) {\n // 将 view 实例化之前监听的事件挂载到 view 上\n this._viewListeners.forEach(listener => {\n this._view?.addEventListener(listener.type, listener.callback);\n });\n }\n }\n\n protected handleStageRender = () => {\n this._compileChart?.getEvent()?.emit(ChartEvent.afterRender, { chart: this._compileChart });\n };\n\n private _setCanvasStyle() {\n if (!this._view) {\n return;\n }\n if (this._container.dom && !isString(this._container.dom)) {\n this._container.dom.style.display = 'block';\n this._container.dom.style.position = 'relative';\n const canvas = this.getCanvas();\n if (canvas) {\n canvas.style.display = 'block';\n }\n }\n }\n\n protected compileInteractions() {\n this._view.removeAllInteractions();\n if (this._interactions?.length) {\n const regionCombindInteractions = {};\n\n this._interactions.forEach(interaction => {\n if (interaction.regionId) {\n const interactionId = `${interaction.regionId}-${interaction.type}-${interaction.id ?? ''}`;\n const spec = regionCombindInteractions[interactionId];\n if (spec) {\n regionCombindInteractions[interactionId] = {\n ...spec,\n ...interaction,\n selector: [...spec.selector, ...(interaction as any).selector]\n };\n } else {\n regionCombindInteractions[interactionId] = interaction;\n }\n } else {\n this._view.interaction(interaction.type, interaction);\n }\n });\n\n Object.keys(regionCombindInteractions).forEach(key => {\n const interaction = this._view.interaction(regionCombindInteractions[key].type, regionCombindInteractions[key]);\n if (this._compileChart) {\n const region = this._compileChart.getRegionsInIds([regionCombindInteractions[key].regionId])[0];\n if (region) {\n region.interaction.addVgrammarInteraction(interaction.getStartState(), interaction);\n }\n }\n });\n }\n }\n\n compile(ctx: { chart: IChart; vChart: IVChart }, option: any) {\n if (this._released) {\n return;\n }\n const { chart } = ctx;\n this._compileChart = chart;\n this.initView();\n if (!this._view) {\n return;\n }\n\n chart.compile();\n chart.afterCompile();\n this.updateDepend();\n\n this.compileInteractions();\n }\n protected clearNextRender() {\n if (this._nextRafId) {\n vglobal.getCancelAnimationFrame()(this._nextRafId);\n this._nextRafId = null;\n\n return true;\n }\n\n return false;\n }\n\n clear(ctx: { chart: IChart; vChart: IVChart }, removeGraphicItems: boolean = false) {\n const { chart } = ctx;\n\n this.clearNextRender();\n chart.clear();\n this.releaseGrammar(removeGraphicItems);\n }\n\n renderNextTick(morphConfig?: IMorphConfig): void {\n if (this._released) {\n return;\n }\n if (!this._nextRafId) {\n this._nextRafId = vglobal.getRequestAnimationFrame()(() => {\n this._nextRafId = null;\n this.render(morphConfig);\n }) as unknown as number;\n }\n }\n\n render(morphConfig?: IMorphConfig) {\n if (this._released) {\n return;\n }\n\n this.initView();\n if (!this._view) {\n return;\n }\n this._view?.run(morphConfig);\n if (this.clearNextRender()) {\n this._view?.run(morphConfig);\n }\n }\n\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n resize(width: number, height: number, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n this._width = width;\n this._height = height;\n\n this._view.resize(width, height);\n if (reRender) {\n this.render({ morph: false });\n }\n }\n\n setBackground(color: IColor) {\n this._view?.background(color);\n }\n\n setSize(width: number, height: number) {\n this._width = width;\n this._height = height;\n if (!this._view) {\n return;\n }\n\n this._view.width(width);\n this._view.height(height);\n }\n\n setViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n addEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n // TODO: 需要明确一下 interactive 的作用范围,同时考虑是否存在非交互行为的事件以及是否需要生效\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = function (event: any, element: IElement | null) {\n const context = element?.mark?.getContext() ?? {};\n const modelId = isValid(context.modelId) ? context.modelId : null;\n const markId = isValid(context.markId) ? context.markId : null;\n const modelUserId = isValid(context.modelUserId) ? context.modelUserId : null;\n const markUserId = isValid(context.markUserId) ? context.markUserId : null;\n\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: element,\n datum: element?.getDatum?.() || null,\n markId,\n modelId,\n markUserId,\n modelUserId\n };\n callback.call(null, params);\n }.bind(this);\n this._viewListeners.set(callback, { type, callback: wrappedCallback });\n // 如果 view 已经初始化则立刻挂载监听\n // FIXME: 目前 vgrammar 类型声明没有对齐,事件相关类型声明并没有使用 SceneItem\n this._view?.addEventListener(type, wrappedCallback as any);\n } else if (source === Event_Source_Type.window) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._windowListeners.set(callback, { type, callback: wrappedCallback });\n const windowObject = this._getGlobalThis();\n windowObject?.addEventListener(type, wrappedCallback);\n } else if (source === Event_Source_Type.canvas) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._canvasListeners.set(callback, { type, callback: wrappedCallback });\n const canvasObject = this.getStage()?.window;\n canvasObject?.addEventListener(type, wrappedCallback);\n }\n }\n\n removeEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = this._viewListeners.get(callback)?.callback;\n wrappedCallback && this._view?.removeEventListener(type, wrappedCallback);\n this._viewListeners.delete(callback);\n } else if (source === Event_Source_Type.window) {\n const windowObject = this._getGlobalThis();\n const wrappedCallback = this._windowListeners.get(callback)?.callback;\n wrappedCallback && windowObject?.removeEventListener(type, wrappedCallback);\n this._windowListeners.delete(callback);\n } else if (source === Event_Source_Type.canvas) {\n const canvasObject = this.getStage()?.window;\n const wrappedCallback = this._canvasListeners.get(callback)?.callback;\n canvasObject && wrappedCallback && canvasObject?.removeEventListener(type, wrappedCallback);\n this._canvasListeners.delete(callback);\n }\n }\n\n protected releaseEvent(): void {\n const stage = this.getStage();\n\n if (stage) {\n stage.hooks.afterRender.unTap('chart-event', this.handleStageRender);\n }\n\n // 相应的事件remove在model中完成\n this._viewListeners.clear();\n this._windowListeners.clear();\n this._canvasListeners.clear();\n }\n\n release(): void {\n this.clearNextRender();\n this.releaseEvent();\n this._option = this._container = null as any;\n // vgrammar release\n this._releaseModel();\n this._view?.release();\n this._view = null;\n this.isInited = false;\n this._compileChart = null;\n this._released = true;\n }\n\n /**\n * 释放VGrammar\n * @param removeGraphicItems 是否删除场景元素,在同步渲染,并且无动画时,必须设置为true,否则有绘图残留\n */\n releaseGrammar(removeGraphicItems: boolean = false) {\n this._releaseModel();\n if (removeGraphicItems) {\n this._view?.removeAllGraphicItems();\n }\n this._view?.removeAllGrammars();\n }\n\n protected _releaseModel() {\n // 释放model\n Object.keys(this._model).forEach(type => {\n Object.values(this._model[type] as IProductMap).forEach(grammarItemMap => {\n Object.values(grammarItemMap).forEach((item: IGrammarItem) => {\n item.removeProduct(true); // 保留 vgrammar 语法元素,下面一起清空\n });\n });\n this._model[type] = {};\n });\n }\n\n /** 添加语法元素 */\n addGrammarItem(grammarItem: IGrammarItem) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n if (isNil(this._model[type][id])) {\n this._model[type][id] = {};\n }\n this._model[type][id][grammarItem.id] = grammarItem;\n }\n\n /** 删除语法元素 */\n removeGrammarItem(grammarItem: IGrammarItem, reserveVGrammarModel?: boolean) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n const map = this._model[type][id];\n if (isValid(map)) {\n delete map[grammarItem.id];\n if (Object.keys(map).length === 0) {\n delete this._model[type][id];\n }\n }\n if (!reserveVGrammarModel) {\n this._view?.removeGrammar(product);\n }\n }\n\n addInteraction(interaction: InteractionSpec & { seriesId?: number; regionId?: number }) {\n if (!this._interactions) {\n this._interactions = [];\n }\n\n this._interactions.push(interaction);\n }\n\n removeInteraction(seriesId: number) {\n if (!this._interactions) {\n return;\n }\n\n this._interactions = this._interactions.filter(entry => entry.seriesId !== seriesId);\n }\n\n /** 更新语法元素间的依赖关系,返回是否全部成功更新 */\n updateDepend(items?: IGrammarItem[]): boolean {\n if (isValid(items) && items.length > 0) {\n // 局部更新依赖\n return items.every(item => item.updateDepend());\n }\n // 全局更新依赖\n Object.values(this._model).forEach(productMap => {\n Object.values(productMap).forEach(grammarItemMap => {\n const grammarItems = Object.values(grammarItemMap) as IGrammarItem[];\n // 获取编译产物\n const product = grammarItems[0].getProduct();\n\n // 获取编译产物的依赖项\n const dependList = grammarItems\n .reduce((depend, item) => {\n if (item.getDepend().length > 0) {\n return depend.concat(item.getDepend());\n }\n return depend;\n }, [] as IGrammarItem[])\n .filter(grammarItem => !!grammarItem)\n .map(grammarItem => grammarItem.getProduct());\n\n // 更新依赖\n product.depend(dependList);\n });\n });\n return true;\n }\n\n private _getGlobalThis() {\n return isTrueBrowser(this._option.mode) ? globalThis : this.getStage()?.window;\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport { error } from './debug';\n/**\n * @description 图片导出相关接口\n */\n\nexport function URLToImage(name: string = 'vchart', url: string) {\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('target', '_blank');\n link.setAttribute('download', `${name}.png`);\n link.dispatchEvent(new MouseEvent('click'));\n}\n\nexport function OffscreenCanvasToDataURL(c: OffscreenCanvas) {\n // eslint-disable-next-line promise/param-names\n return new Promise((r: (s: string) => void) => {\n c.convertToBlob().then((b: any) => {\n const reader = new FileReader();\n reader.readAsDataURL(b);\n reader.onload = () => {\n r(reader.result as string);\n };\n });\n });\n}\n\nexport async function getCanvasDataURL(c: HTMLCanvasElement | OffscreenCanvas, ctx?: utilFunctionCtx) {\n if (!c) {\n return '';\n }\n try {\n if (OffscreenCanvas !== undefined && c instanceof OffscreenCanvas) {\n return OffscreenCanvasToDataURL(c);\n }\n } catch (_error) {\n (ctx?.onError ?? error)(`getCanvasDataURL error : ${_error.toString()}`);\n }\n return (c).toDataURL();\n}\n","import { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\n\nexport const DEFAULT_THEME: PopTipAttributes = {\n visible: true,\n position: 'auto',\n titleStyle: {\n fontSize: 16,\n fill: '#08979c'\n },\n contentStyle: {\n fontSize: 12,\n fill: 'green'\n },\n panel: {\n visible: true,\n\n fill: '#e6fffb',\n size: 12,\n space: 0,\n stroke: '#87e8de',\n lineWidth: 1,\n cornerRadius: 4\n }\n};\n\nexport const theme: { poptip: PopTipAttributes } = {\n poptip: merge({}, DEFAULT_THEME)\n};\n","import { container } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\nimport { DEFAULT_THEME, theme } from './theme';\nimport { registerGroup, registerRect, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadPoptipComponent() {\n registerGroup();\n registerText();\n registerSymbol();\n registerRect();\n}\n\nexport function setPoptipTheme(defaultPoptipTheme: PopTipAttributes) {\n merge(theme.poptip, DEFAULT_THEME, defaultPoptipTheme);\n}\n","import { getContainerSize, isString } from '@visactor/vutils';\nimport type { IChartSpec } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../typings';\nimport { array, isMiniAppLikeMode, isTrueBrowser, isValid } from '../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ICartesianChartSpec } from './cartesian/interface';\nimport type { IChartOption } from './interface/common';\nimport type { IUpdateSpecResult } from '../model/interface';\nimport { vglobal } from '@visactor/vgrammar-core';\n\nexport function setDefaultCrosshairForCartesianChart(spec: ICartesianChartSpec) {\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n [spec.direction === Direction.horizontal ? 'yField' : 'xField']: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n}\n\nexport function calculateChartSize(\n spec: { width?: number; height?: number },\n option: Pick,\n defaultSize: { width: number; height: number }\n) {\n const { width: userWidth, height: userHeight } = spec;\n if (isValid(userWidth) && isValid(userHeight)) {\n return {\n width: userWidth,\n height: userHeight\n };\n }\n let width = defaultSize.width;\n let height = defaultSize.height;\n const container = option.container;\n const canvas = option.canvas;\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n container,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (canvas && isTrueBrowser(option.mode)) {\n let canvasNode;\n if (isString(canvas)) {\n canvasNode = vglobal.getElementById(canvas);\n } else {\n canvasNode = canvas;\n }\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n canvasNode as HTMLCanvasElement,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (isMiniAppLikeMode(option.mode) && (option.modeParams as any)?.domref) {\n const domRef = (option.modeParams as any).domref;\n width = domRef.width;\n height = domRef.height;\n }\n\n width = userWidth ?? width;\n height = userHeight ?? height;\n\n return {\n width,\n height\n };\n}\n\nexport function mergeUpdateResult(target: IUpdateSpecResult, ...sources: IUpdateSpecResult[]) {\n const merge = (key: keyof IUpdateSpecResult) => sources.reduce((value, cur) => value || cur?.[key], target[key]);\n\n Object.assign(target, {\n change: merge('change'),\n reCompile: merge('reCompile'),\n reMake: merge('reMake'),\n reRender: merge('reRender'),\n reSize: merge('reSize'),\n reTransformSpec: merge('reTransformSpec'),\n changeTheme: merge('changeTheme'),\n changeBackground: merge('changeBackground')\n } as Required);\n return target;\n}\n\nexport function getTrimPaddingConfig(chartType: string, spec: IChartSpec) {\n if (\n chartType === 'line' ||\n chartType === 'area' ||\n (chartType === 'common' && spec.series.every(item => item.type === 'area' || item.type === 'line'))\n ) {\n return {\n paddingInner: 1,\n paddingOuter: 0\n };\n }\n\n return {\n paddingOuter: 0\n };\n}\n","import type { IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { GrammarItemCompileOption, GrammarItemInitOption, IGrammarItem } from '../interface';\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IAnimate,\n IAnimateArranger,\n IElement,\n IGroupMark,\n IMark,\n IMarkConfig,\n MarkAnimationSpec,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport type { IRegion } from '../../region/interface';\nimport type { ICompilableData } from '../data/interface';\n\nexport interface IMarkStateManager {\n getStateInfoList: () => IStateInfo[];\n getStateInfo: (stateValue: StateValue) => IStateInfo;\n addStateInfo: (stateInfo: IStateInfo) => void;\n changeStateInfo: (stateInfo: Partial) => void;\n clearStateInfo: (stateValues: StateValue[]) => void;\n checkOneState: (\n renderNode: IElement,\n datum: Datum | Datum[],\n state: IStateInfo,\n isMultiMark?: boolean\n ) => 'in' | 'out' | 'skip';\n checkState: (renderNode: IElement, datum: Datum | Datum[]) => StateValue[];\n updateLayoutState: (noRender?: boolean) => void;\n}\n\nexport interface IMarkData extends ICompilableData {\n setCompiledProductId: (name: string) => any;\n generateProductId: () => string;\n}\n\nexport interface ICompilableMarkOption extends GrammarItemInitOption {\n key?: string | ((datum: Datum) => string);\n /** 分组字段,更多用于 morphing 动画的 element 匹配 */\n groupKey?: string;\n /** 是否在dataflow的过程中,布局前跳过该mark */\n skipBeforeLayouted?: boolean;\n\n /* VGrammar的组件是否支持3d */\n mode?: '2d' | '3d';\n /** don't separate style of mark */\n noSeparateStyle?: boolean;\n}\n\nexport interface ICompilableMark extends IGrammarItem {\n // 类型\n readonly type: MarkType;\n // id\n readonly id: number;\n // name\n readonly name: string;\n // key field\n readonly key?: string | ((datum: Datum) => string);\n // parent model\n readonly model: IModel;\n\n // 数据 可以没有\n getData: () => IMarkData | undefined;\n setData: (d: IMarkData) => void;\n getDataView: () => DataView | undefined;\n setDataView: (d?: DataView, productId?: string) => void;\n\n // 状态\n state: IMarkStateManager;\n readonly stateStyle: IMarkStateStyle;\n hasState: (state: string) => boolean;\n getState: (state: string) => any;\n updateState: (newState: Record) => void;\n /** 更新group | enter中的静态样式 */\n updateStaticEncode: () => void;\n /** 更新 mark 样式 */\n compileEncode: () => void;\n /** 更新encode中的样式 */\n updateLayoutState: (noRender?: boolean, recursion?: boolean) => void;\n /** 更新某一个状态 */\n updateMarkState: (key: string) => void;\n\n // transform\n setTransform: (transform: TransformSpec[] | Nil) => void;\n\n // 动画配置\n setAnimationConfig: (config: Partial) => void;\n getAnimationConfig: () => Partial;\n\n // 是否显示\n getVisible: () => boolean;\n setVisible: (visible: boolean) => void;\n\n // groupKey 配置\n getGroupKey: () => string | undefined;\n setGroupKey: (groupKey: string) => void;\n\n // 用户 id\n getUserId: () => StringOrNumber | undefined;\n setUserId: (id: StringOrNumber) => void;\n\n compile: (option?: IMarkCompileOption) => void;\n\n getProduct: () => Maybe;\n getProductElements: () => Maybe;\n\n /** 获取子mark */\n getMarks: () => ICompilableMark[];\n\n /** 是否跳过布局阶段 */\n setSkipBeforeLayouted: (skip: boolean) => void;\n getSkipBeforeLayouted: () => boolean;\n\n setStateSortCallback: (stateSort: (stateA: string, stateB: string) => number) => void;\n\n getMarkConfig: () => IMarkConfig;\n setMarkConfig: (config: IMarkConfig) => void;\n\n /** 开始状态动画 */\n runAnimationByState: (animationState?: string) => IAnimateArranger;\n /** 停止状态动画*/\n stopAnimationByState: (animationState?: string) => IAnimate;\n /** 暂停状态动画*/\n pauseAnimationByState: (animationState: string) => IAnimate;\n /** 恢复状态动画*/\n resumeAnimationByState: (animationState: string) => IAnimate;\n}\n\nexport interface IMarkDataInitOption extends ICompilableMarkOption {\n mark: ICompilableMark;\n}\n\nexport interface IMarkCompileOption extends GrammarItemCompileOption {\n group?: string | IGroupMark;\n ignoreChildren?: boolean;\n context?: any;\n}\n\nexport interface IStateInfo {\n /** 状态值 */\n stateValue: StateValue;\n // 对应的数据维度 可以是多维度\n // TODO: fields 是否保留\n fields?: any | null | undefined;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据 */\n datumKeys?: string[] | null | undefined;\n /** 筛选 item */\n items?: any[] | null | undefined;\n /** 筛选函数 */\n filter?: ((datum: any, options: Record) => boolean) | null | undefined;\n cache?: {\n [key: string]: {\n [key: string]: boolean;\n };\n };\n /** 状态优先级 */\n level?: number | undefined;\n}\n// TODO:目前看这个类型没有必要,确认后彻底删除\nexport interface IStateSpec {\n /** 状态值 */\n stateValue: StateValue;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据对应字段 */\n datumKeys?: string[] | null | undefined;\n /** TODO: 暂时不提供 filter 函数形式 */\n // filter?:\n // | ((datum: any, options: Record) => boolean)\n // | null\n // | undefined;\n /** 状态优先级 */\n level?: number | undefined;\n}\n\nexport interface IMarkState {\n readonly id: number;\n // 状态\n getStates: () => IStateInfo[];\n\n // state 相关\n getState: (stateValue: StateValue) => IStateInfo | undefined;\n addState: (stateInfo: IStateInfo) => void;\n changeState: (stateInfo: Partial, update?: boolean) => void;\n checkState: (item: any, datum: any) => string[];\n\n clearState: (stateValues: StateValue[], update?: boolean) => void;\n\n // 更新\n update: () => void;\n}\n\nexport enum STATE_VALUE_ENUM {\n STATE_NORMAL = 'normal',\n\n STATE_HOVER = 'hover',\n STATE_HOVER_REVERSE = 'hover_reverse',\n\n STATE_DIMENSION_HOVER = 'dimension_hover',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n\n STATE_SELECTED = 'selected',\n STATE_SELECTED_REVERSE = 'selected_reverse',\n\n // todo: 2.0考虑优化\n STATE_SANKEY_EMPHASIS = 'selected',\n STATE_SANKEY_EMPHASIS_REVERSE = 'blur'\n}\n\nexport enum STATE_VALUE_ENUM_REVERSE {\n STATE_HOVER_REVERSE = 'hover_reverse',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n STATE_SELECTED_REVERSE = 'selected_reverse'\n}\n\nexport type STATE_NORMAL = typeof STATE_VALUE_ENUM.STATE_NORMAL;\nexport type STATE_HOVER = typeof STATE_VALUE_ENUM.STATE_HOVER;\nexport type STATE_HOVER_REVERSE = typeof STATE_VALUE_ENUM.STATE_HOVER_REVERSE;\nexport type STATE_CUSTOM = string;\n\n// TODO: 待补充\n\nexport type StateValueNot = STATE_HOVER_REVERSE | STATE_CUSTOM;\nexport type StateValue = STATE_NORMAL | STATE_HOVER | STATE_CUSTOM;\nexport type StateValueType = StateValue | StateValueNot;\n\nexport interface IAttributeOpt {\n element: IElement;\n mark: IElement['mark'];\n parent: IElement['mark']['group'];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelMarkAttributeContext {\n [key: string]: unknown;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesMarkAttributeContext extends IModelMarkAttributeContext {\n // 通用的默认属性值获取,比如color,如果有散点图有sizeScale,则可以获取 size\n globalScale: (scaleKey: string, value: string | number) => unknown;\n // 传入seriesField值,获取对应的颜色。\n // 如果传入 null ,返回的是当前系列对应的第一个颜色值。\n seriesColor: (seriesValue?: string | number) => string;\n /**\n * 获取当前的 region\n * @returns\n */\n getRegion: () => IRegion;\n}\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IMark } from '../interface';\n\n/** 跟随 mark 一起存储的信息 */\nexport interface IMarkInfo {\n /** 样式和 seriesField 有关 */\n styleWithSeriesField?: boolean;\n /** mark name */\n name?: string;\n}\n\nexport class MarkSet {\n protected _children: IMark[] = [];\n protected _markNameMap: Record = {};\n getMarkNameMap() {\n return this._markNameMap;\n }\n\n protected readonly _infoMap = new Map();\n static readonly defaultMarkInfo: IMarkInfo = {};\n\n addMark(mark?: IMark, markInfo?: IMarkInfo) {\n if (isNil(mark)) {\n return;\n }\n this._children.push(mark);\n this._markNameMap[mark.name] = mark;\n this._infoMap.set(mark, merge({}, MarkSet.defaultMarkInfo, markInfo));\n }\n\n removeMark(markName: string): void {\n const index = this._children.findIndex(m => m.name === markName);\n if (index >= 0) {\n this._infoMap.delete(this._children[index]);\n delete this._markNameMap[markName];\n this._children.splice(index, 1);\n }\n }\n clear() {\n this._children = [];\n this._markNameMap = {};\n this._infoMap.clear();\n }\n\n forEach(callbackfn: (value: IMark, index: number, array: IMark[]) => void) {\n this._children.forEach(callbackfn);\n }\n\n includes(mark: IMark, fromIndex?: number) {\n return this._children.includes(mark, fromIndex);\n }\n\n get(key: number | string) {\n if (!isNaN(Number(key))) {\n return this._children[key];\n }\n return this._markNameMap[key];\n }\n\n getMarks() {\n return this._children.slice();\n }\n\n getMarksInType(type: string | string[]): IMark[] {\n const types = array(type);\n return this._children.filter(m => types.includes(m.type));\n }\n\n getMarkInId(markId: number): IMark | undefined {\n return this._children.find(m => m.id === markId);\n }\n\n /**\n * 获取满足某 info 的所有 mark\n * @param info\n * @returns\n */\n getMarkWithInfo(info: Partial) {\n return this._children.find(mark => {\n return Object.keys(info).every(key => info[key] === this._infoMap.get(mark)[key]);\n });\n }\n}\n","import { isEmpty, isArray } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DimensionEventParams } from '../event/events/dimension/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionEventEnum } from '../event/events/dimension/interface';\nimport type { IMark } from '../mark/interface';\nimport type { EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\n\nexport class DimensionTrigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _option: ITriggerOption;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n\n private _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n private _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n constructor(option: ITriggerOption) {\n this._option = option;\n this.event = this._option.model.getOption().getChart().getEvent(); // new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n // do nothing\n }\n\n registerMark(mark: IMark): void {\n // do nothing\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER])) {\n this._marks.addMark(mark);\n }\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE])) {\n this._markReverse.addMark(mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n event.on(DimensionEventEnum.dimensionHover, this.onHover as EventCallback);\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n // do nothing\n }\n\n protected getEventElement(params: DimensionEventParams, reverse: boolean = false) {\n // items 修改遍历方法从 mark\n\n const items: IElement[] = [];\n params.dimensionInfo.forEach(df => {\n df.data.forEach(dd => {\n const seriesMark = (reverse ? this._markReverse : this._marks)\n .getMarks()\n .filter(m => m.model === dd.series && m.getVisible());\n\n seriesMark.forEach(m => {\n const markProduct = m.getProduct();\n if (!markProduct || !markProduct.elements) {\n return;\n }\n\n const elements = markProduct.elements.filter(e => {\n const datum = e.getDatum();\n let c;\n if (isArray(datum)) {\n c = datum.every((oneData, i) => oneData === dd.datum[i]);\n } else {\n c = dd.datum.some(dd_d => dd_d === datum);\n }\n return reverse ? !c : c;\n });\n items.push(...elements);\n });\n });\n });\n\n return items;\n }\n\n private onHover = (params: DimensionEventParams) => {\n switch (params.action) {\n case 'enter':\n // clear last hover\n // eslint-disable-next-line no-case-declarations\n const lastHover = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n lastHover.forEach(e => this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE, e));\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, false);\n // add new\n const elements = this.getEventElement(params);\n elements.forEach(el => this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, el));\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n break;\n case 'leave':\n // clear all\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, true);\n params = null;\n break;\n case 'click':\n case 'move':\n default:\n break;\n }\n };\n}\n","import { isFunction } from '@visactor/vutils';\nimport type { IAttrs, IMarkStateStyle } from '../../mark/interface';\nimport { STATE_VALUE_ENUM } from './interface';\n\nexport function isAttrChangeable(key: string, stateStyle: IMarkStateStyle) {\n for (const state in stateStyle) {\n if (state === STATE_VALUE_ENUM.STATE_NORMAL) {\n const style = stateStyle[state][key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n return true;\n }\n continue;\n }\n if (key in stateStyle[state]) {\n return true;\n }\n }\n return false;\n}\n\nexport function isStateAttrChangeable(key: string, stateStyle: Partial>, facetField: string) {\n const style = stateStyle[key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n if (style.field !== facetField) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGradientAttribute(key: string, style: any) {\n return (key === 'fill' || key === 'stroke') && style?.gradient && style?.stops;\n}\n\nconst DEFAULT_STATE_VALUE_ENUM = {};\nObject.values(STATE_VALUE_ENUM).forEach(v => {\n DEFAULT_STATE_VALUE_ENUM[v] = true;\n});\n\nexport function stateInDefaultEnum(state: string) {\n return !!DEFAULT_STATE_VALUE_ENUM[state];\n}\n\nconst DEFAULT_STATE_VALUE_TO_REVERSE = {\n [STATE_VALUE_ENUM.STATE_HOVER]: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n [STATE_VALUE_ENUM.STATE_SELECTED]: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n [STATE_VALUE_ENUM.STATE_DIMENSION_HOVER]: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE\n};\n\nexport function stateToReverse(state: string) {\n return DEFAULT_STATE_VALUE_TO_REVERSE[state];\n}\n","import { isEmpty } from '@visactor/vutils';\nimport type { StateValue } from '../compile/mark';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BaseEventParams } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { IInteraction } from './interface';\nimport type { IInteraction as IVGrammarInteraction } from '@visactor/vgrammar-core';\n\nimport { stateToReverse } from '../compile/mark/util';\n\nexport class Interaction implements IInteraction {\n // 数据\n private _stateMarks: Map = new Map();\n // active\n private _stateElements: Map = new Map();\n\n private _vgrammarInteractions: Map = new Map();\n addVgrammarInteraction(state: StateValue, i: IVGrammarInteraction) {\n if (!state) {\n return;\n }\n\n if (!this._vgrammarInteractions.get(state)) {\n !this._vgrammarInteractions.set(state, [i]);\n } else {\n this._vgrammarInteractions.get(state).push(i);\n }\n }\n\n static markStateEnable(mark: IMark, state: string) {\n return !isEmpty(mark.stateStyle[state]);\n }\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n registerMark(state: StateValue, mark: IMark): void {\n if (!this._stateMarks.has(state)) {\n this._stateMarks.set(state, []);\n }\n this._stateMarks.get(state)?.push(mark);\n }\n\n getStateMark(state: StateValue): IMark[] | null {\n return this._stateMarks.get(state);\n }\n\n filterEventMark(params: BaseEventParams, state: StateValue): boolean {\n return !!(params.mark && this._stateMarks.get(state)?.includes(params.mark));\n }\n\n getEventElement(stateValue: StateValue) {\n return this._stateElements.get(stateValue) ?? [];\n }\n\n getEventElementData(stateValue: StateValue) {\n return this.getEventElement(stateValue).map(e => e.getDatum());\n }\n\n exchangeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n // reverse\n const reState = stateToReverse(stateValue);\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n if (reState) {\n this.addEventElement(reState, e);\n }\n });\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n if (reState) {\n element.removeState(reState);\n }\n }\n this._stateElements.set(stateValue, [element]);\n }\n\n removeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n element.removeState(stateValue);\n const list = this._stateElements.get(stateValue)?.filter(e => e !== element) ?? [];\n this._stateElements.set(stateValue, list);\n // reverse\n const reState = stateToReverse(stateValue);\n if (reState) {\n if (list.length === 0) {\n // clear reverse\n this.clearEventElement(reState, false);\n } else {\n // add reverse to element\n this.addEventElement(reState, element);\n }\n }\n }\n\n addEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n }\n const list = this._stateElements.get(stateValue) ?? [];\n list.push(element);\n this._stateElements.set(stateValue, list);\n }\n\n clearEventElement(stateValue: StateValue, clearReverse: boolean) {\n if (this._disableTriggerEvent) {\n return;\n }\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n });\n this._stateElements.set(stateValue, []);\n\n if (clearReverse) {\n const reState = stateToReverse(stateValue);\n if (reState) {\n this.clearEventElement(reState, false);\n }\n }\n }\n\n clearAllEventElement() {\n if (this._disableTriggerEvent) {\n return;\n }\n for (const [stateValue, elements] of this._stateElements) {\n elements.forEach(e => {\n e.clearStates();\n });\n this._stateElements.set(stateValue, []);\n }\n }\n\n /**\n * 激活交互元素时 进行反选\n * 需要先将元素添加到已交互状态再使用此方法反选\n * @param stateValue\n * @param activeElement\n * @returns\n */\n reverseEventElement(stateValue: StateValue) {\n if (this._disableTriggerEvent) {\n return;\n }\n // TODO:直接加默认后缀?or再增加一个map?\n const state = stateToReverse(stateValue);\n if (!state) {\n return;\n }\n const marks = this.getStateMark(state);\n if (!marks) {\n return;\n }\n const activeElements = this.getEventElement(stateValue);\n if (!activeElements.length) {\n return;\n }\n const currentReverse = this.getEventElement(state);\n if (!currentReverse.length) {\n // all\n // for performance array.include\n // FIXME: 也许并没有太大必要\n if (activeElements.length === 1) {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => e !== activeElements[0])\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n } else {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => !activeElements.includes(e))\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n }\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n startInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.start(element);\n });\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n resetInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(element);\n });\n }\n }\n\n /**\n * 清空所有通过 vgrammar 代理的交互\n * @returns\n */\n resetAllInteraction() {\n for (const [stateValue, interactions] of this._vgrammarInteractions) {\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(null);\n });\n }\n }\n }\n}\n","export const USER_LAYOUT_RECT_LEVEL = 9;\nexport const DEFAULT_LAYOUT_RECT_LEVEL = 0;\nexport const DEFAULT_LAYOUT_RECT_LEVEL_MIN = -1;\n\nexport enum LayoutZIndex {\n SeriesGroup = 0,\n\n Axis_Grid = 50,\n CrossHair_Grid = 100,\n Region = 450,\n\n Mark = 300,\n\n Node = 400,\n\n Axis = 100,\n\n MarkLine = 500,\n\n MarkArea = 100,\n\n MarkPoint = 500,\n\n DataZoom = 500,\n\n ScrollBar = 500,\n\n Player = 500,\n\n Legend = 500,\n\n CrossHair = 500,\n\n Indicator = 500,\n\n Title = 500,\n\n Label = 500,\n\n Brush = 500,\n\n CustomMark = 500,\n\n Interaction = 700\n}\n/**\n * 数值越大,越先布局\n */\nexport enum LayoutLevel {\n Indicator = 10,\n\n Region = 20,\n\n Axis = 30,\n\n DataZoom = 40,\n\n Player = 40,\n\n ScrollBar = 40,\n\n Legend = 50,\n\n Title = 70,\n\n CustomMark = 70\n}\n","export enum AttributeLevel {\n Default = 0,\n Theme = 1,\n Chart = 2,\n Base_Series = 3, // general operation in base series\n Series = 4, // specified operation in derived series\n Mark = 5,\n User_Chart = 6,\n User_Series = 7,\n User_Mark = 8,\n User_SeriesStyle = 9,\n Built_In = 99\n}\n","import type { ICompilableInitOption, ICompilable, ICompiler } from './interface';\n\n/** 可以编译的类的统一基类 */\nexport abstract class CompilableBase implements ICompilable {\n protected _option: ICompilableInitOption;\n getOption() {\n return this._option;\n }\n\n getCompiler: () => ICompiler;\n\n constructor(option: ICompilableInitOption) {\n this._option = option;\n this.getCompiler = this._option.getCompiler;\n }\n\n getVGrammarView() {\n return this.getCompiler()?.getVGrammarView();\n }\n\n abstract compile(): void;\n\n release() {\n this._option = null;\n this.getCompiler = null;\n }\n}\n","import type { IGrammarBase } from '@visactor/vgrammar-core';\nimport type { Maybe } from '../typings';\nimport { isValid } from '@visactor/vutils';\nimport { createID } from '../util/id';\nimport { CompilableBase } from './compilable-base';\nimport type { GrammarItemCompileOption, GrammarType, IGrammarItem, GrammarItemInitOption } from './interface';\n\n/** 可以直接编译为一个 VGrammar 语法元素的类的统一基类 */\nexport abstract class GrammarItem extends CompilableBase implements IGrammarItem {\n grammarType: GrammarType;\n\n protected declare _option: GrammarItemInitOption;\n\n /** id */\n readonly id: number = createID();\n\n protected _product: Maybe;\n /** 获取编译产物 */\n getProduct() {\n if (isValid(this._product)) {\n return this._product;\n }\n const view = this.getVGrammarView();\n const id = this.getProductId();\n if (isValid(id) && isValid(view)) {\n this._product = this._lookupGrammar(id); // 更新product\n }\n return this._product;\n }\n\n protected abstract _lookupGrammar(id: string): IGrammarBase;\n\n /** 已经编译完成的产物的 name */\n protected _compiledProductId: string = null;\n /** 生成产物 name */\n abstract generateProductId(): string;\n /** 获取产物 name */\n getProductId() {\n return this._compiledProductId ?? this.generateProductId();\n }\n\n /** 该语法元素依赖于哪些语法元素 */\n protected _depend: IGrammarItem[] = [];\n getDepend() {\n return this._depend;\n }\n setDepend(...depend: IGrammarItem[]) {\n this._depend = depend;\n }\n\n /** 编译入口(尽量不重写这个方法) */\n compile(option?: GrammarItemCompileOption): void {\n this._compileProduct(option);\n this._afterCompile(option);\n }\n\n /** 编译主过程 */\n protected abstract _compileProduct(option?: GrammarItemCompileOption): void;\n\n /** 编译后的逻辑 */\n protected _afterCompile(option?: GrammarItemCompileOption) {\n if (isValid(this._product)) {\n this.getCompiler()?.addGrammarItem(this);\n }\n }\n\n /** 更新语法元素的依赖,返回是否全部成功更新 */\n updateDepend(): boolean {\n if (isValid(this._product)) {\n const depend = this.getDepend()\n .map(item => item.getProduct())\n .filter(isValid);\n // 更新依赖\n this._product.depend(depend);\n return depend.length === this.getDepend().length;\n }\n return false;\n }\n\n release() {\n this.removeProduct();\n super.release();\n this._depend = [];\n }\n\n /**\n * 删除编译产物\n * @param reserveVGrammarModel 是否保留 view 中的语法元素\n */\n removeProduct(reserveVGrammarModel?: boolean) {\n const compiler = this.getCompiler();\n compiler.removeGrammarItem(this, reserveVGrammarModel);\n this._product = null;\n this._compiledProductId = null;\n }\n}\n","import type { ISignal, SignalFunctionType } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isValid } from '../../util/type';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\nimport type { ICompilableSignal } from './interface';\n\nexport class CompilableSignal extends GrammarItem implements ICompilableSignal {\n readonly grammarType = GrammarType.signal;\n protected declare _product: Maybe>;\n declare getProduct: () => Maybe>;\n\n readonly name: string;\n\n /** signal 的值 */\n protected _value: Maybe;\n getValue() {\n return this._value;\n }\n /** signal 的值回调 */\n protected _updateFunc: Maybe>;\n getUpdateFunc() {\n return this._updateFunc;\n }\n\n constructor(option: GrammarItemInitOption, name: string, value?: T, updateFunc?: SignalFunctionType) {\n super(option);\n this.name = name;\n this._value = value;\n this._updateFunc = updateFunc;\n }\n\n /** 更新 signal */\n updateSignal(value?: T, updateFunc?: SignalFunctionType) {\n this._value = value;\n this._updateFunc = updateFunc;\n this.compile();\n }\n\n protected _compileProduct() {\n const view = this.getVGrammarView();\n if (!view) {\n return;\n }\n\n const product = this.getProduct();\n if (!product) {\n const id = this.getProductId();\n this._product = view.signal().id(id);\n this._compiledProductId = id;\n }\n if (isValid(this._value)) {\n this._product.value(this._value);\n }\n if (isValid(this._updateFunc)) {\n this._product.update(this._updateFunc);\n }\n }\n\n generateProductId(): string {\n return this.name;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getSignalById(id);\n }\n}\n","import type { SignalFunctionType } from '@visactor/vgrammar-core';\nimport { CompilableSignal } from './compilable-signal';\nimport { CompilableBase } from '../compilable-base';\n\nexport class SignalManager extends CompilableBase {\n /** signal map */\n protected _signalMap: Record> = {};\n getSignalMap() {\n return this._signalMap;\n }\n getSignal(name: string) {\n return this._signalMap[name];\n }\n\n /** 增加或更新 signal */\n updateSignal(name: string, value: any, updateFunc?: SignalFunctionType) {\n if (!this._signalMap[name]) {\n this._signalMap[name] = new CompilableSignal(this._option, name, value, updateFunc);\n this._signalMap[name].compile();\n } else {\n this._signalMap[name].updateSignal(value, updateFunc);\n }\n }\n\n compile() {\n Object.values(this._signalMap).forEach(signal => {\n signal.compile();\n });\n }\n\n release() {\n super.release();\n\n Object.values(this._signalMap).forEach(signal => {\n signal.release();\n });\n this._signalMap = {};\n }\n}\n","import { merge } from '@visactor/vutils';\nimport type { IStateManagerOption, StateValueMap } from './interface';\nimport { SignalManager } from './signal-manager';\n\n/** 状态管理器,由 SignalManager 继承而来,管理所有和状态相关的 signal */\nexport class StateManager extends SignalManager {\n protected _stateMap: StateValueMap;\n getStateMap() {\n return this._stateMap;\n }\n\n /** 默认 state map */\n protected _getDefaultStateMap(): StateValueMap {\n return {};\n }\n\n /** state key 转为 signal name */\n protected stateKeyToSignalName: (key: string) => string;\n\n constructor(option: IStateManagerOption) {\n super(option);\n if (option.stateKeyToSignalName) {\n this.stateKeyToSignalName = option.stateKeyToSignalName;\n } else {\n this.stateKeyToSignalName = () => 'state_signal';\n }\n this.initStateMap();\n }\n\n /** 初始化 state map */\n initStateMap(state?: StateValueMap) {\n this._stateMap = state ?? this._getDefaultStateMap();\n }\n\n compile(stateMap?: StateValueMap) {\n const state = stateMap ?? this._stateMap;\n Object.keys(state).forEach(key => {\n const name = this.stateKeyToSignalName(key);\n const value = state[key];\n this.updateSignal(name, value);\n });\n }\n\n /** 更新 state 并默认触发重渲染 */\n updateState(newState: Partial, noRender?: boolean) {\n if (!newState) {\n return;\n }\n merge(this._stateMap, newState);\n\n this.compile(newState);\n\n if (noRender) {\n return;\n }\n return this.getCompiler().renderNextTick();\n }\n}\n","import type { IElement } from '@visactor/vgrammar-core';\nimport { StateManager } from '../compile/signal/state-manager';\nimport type { StateValueMap } from '../compile/signal/interface';\nimport { PREFIX } from '../constant/base';\nimport { createID } from '../util/id';\nimport type { IAnimate, IAnimateState } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from './interface';\n\nexport class AnimateManager extends StateManager implements IAnimate {\n protected declare _stateMap: IAnimateState & StateValueMap;\n\n readonly id: number = createID();\n\n protected stateKeyToSignalName = (key: string) => {\n return `${PREFIX}_animate_${this.id}_${key}`;\n };\n\n getAnimationStateSignalName() {\n return this.stateKeyToSignalName('animationState');\n }\n\n updateAnimateState(state: AnimationStateEnum, noRender?: boolean) {\n // when animation state is 'update', do animations by element diffState(enter & update & exit)\n if (state === AnimationStateEnum.update) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => element.diffState\n }\n },\n noRender\n );\n }\n // when animation state is 'appear', all valid elements would do appear animation except from exit elements\n else if (state === AnimationStateEnum.appear) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit' ? AnimationStateEnum.none : AnimationStateEnum.appear;\n }\n }\n },\n noRender\n );\n }\n // when animation state is other types, all elements would do animation by state\n else {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => state\n }\n },\n noRender\n );\n }\n }\n\n protected _getDefaultStateMap(): IAnimateState & StateValueMap {\n return {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit'\n ? AnimationStateEnum.exit\n : element.diffState === 'update'\n ? AnimationStateEnum.update\n : AnimationStateEnum.appear;\n }\n }\n };\n }\n}\n","import type { IChartSpecInfo } from '../chart/interface';\nimport { isArray } from '../util';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class BaseModelSpecTransformer implements IBaseModelSpecTransformer {\n readonly type: string;\n protected _option: IBaseModelSpecTransformerOption;\n\n protected _theme?: K; // 非全局 theme,是对应于具体 model 的 theme 对象\n\n constructor(option: IBaseModelSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n }\n\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n this._theme = this.getTheme(spec, chartSpec);\n return this._mergeThemeToSpec(spec, chartSpec);\n }\n\n getTheme(spec: T, chartSpec: any): K {\n return undefined;\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): { spec: T; theme: K } {\n this._transformSpecBeforeMergingTheme(spec, chartSpec, chartSpecInfo);\n const result = this._initTheme(spec, chartSpec);\n this._transformSpecAfterMergingTheme(result.spec, chartSpec, chartSpecInfo);\n return result;\n }\n\n protected _transformSpecBeforeMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n // this._originalSpec + specFromChart + this._theme = this._spec\n const merge = (originalSpec: any) => mergeSpec({}, theme, specFromChart, originalSpec);\n\n if (isArray(spec)) {\n return {\n spec: spec.map(specItem => merge(specItem)) as unknown as T,\n theme\n };\n }\n return {\n spec: merge(spec),\n theme\n };\n }\n return { spec, theme };\n }\n\n /** 是否在初始化时将 theme 自动 merge 到 spec */\n protected _shouldMergeThemeToSpec(): boolean {\n return true;\n }\n\n /** 从 chart spec 提取配置作为 model 的默认 spec 配置 */\n protected _getDefaultSpecFromChart(chartSpec: any): Partial | undefined {\n return undefined;\n }\n}\n","import { get, isArray, isFunction, isNil, isObject } from '@visactor/vutils';\n\n/**\n * 判断一个 spec 是否包含另一个 spec 片段\n * @param spec 原始 spec\n * @param searchSpec 要匹配的 spec 片段\n */\nexport const includeSpec = (spec: Partial, searchSpec: Partial): boolean => {\n if (spec === searchSpec) {\n return true;\n }\n if (isFunction(spec) || isFunction(searchSpec)) {\n return false;\n }\n if (isArray(spec) && isArray(searchSpec)) {\n return searchSpec.every(searchItem => spec.some(item => includeSpec(item, searchItem)));\n }\n if (isObject(spec) && isObject(searchSpec)) {\n return Object.keys(searchSpec).every(key => includeSpec(spec[key], searchSpec[key]));\n }\n return false;\n};\n\nexport const setProperty = (target: T, path: Array, value: any): T => {\n if (isNil(path)) {\n return target;\n }\n const key = path[0];\n if (isNil(key)) {\n return target;\n }\n if (path.length === 1) {\n target[key] = value;\n return target;\n }\n if (isNil(target[key])) {\n if (typeof path[1] === 'number') {\n target[key] = [];\n } else {\n target[key] = {};\n }\n }\n return setProperty(target[key], path.slice(1), value);\n};\n\nexport const getProperty = (target: any, path: Array, defaultValue?: T): T => {\n if (isNil(path)) {\n return undefined;\n }\n return get(target, path as string[], defaultValue) as T;\n};\n","import { createID } from '../util/id';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n IModelMarkInfo,\n IModelSpecInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { ICompileMarkConfig, IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type {\n Datum,\n StateValueType,\n ConvertToMarkStyleSpec,\n ICommonSpec,\n StringOrNumber,\n IRect,\n ILayoutRect\n} from '../typings';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport { MarkSet } from '../mark/mark-set';\nimport type { ILayoutItem } from '../layout/interface';\nimport { CompilableBase } from '../compile/compilable-base';\nimport { PREFIX } from '../constant/base';\nimport { BaseModelSpecTransformer } from './base-model-transformer';\nimport { getProperty } from '@visactor/vutils-extension';\n\nexport abstract class BaseModel extends CompilableBase implements IModel {\n readonly transformerConstructor = BaseModelSpecTransformer;\n\n protected _spec: T;\n getSpec(): T {\n return this._spec || ({} as T);\n }\n\n /** 获取当前 model 对应在图表 spec 上的路径 */\n getSpecPath() {\n return this._option?.specPath;\n }\n\n /** 获取当前 model 对应在图表 specInfo 上的路径 */\n getSpecInfoPath() {\n return this._option?.specInfoPath ?? this._option?.specPath;\n }\n\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n // 布局\n protected _layout?: ILayoutItem = null;\n get layout() {\n return this._layout;\n }\n\n readonly specKey: string = '';\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n protected get _theme() {\n return this.getSpecInfo()?.theme;\n }\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this.userId = spec.id;\n this._spec = spec;\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this.setAttrFromSpec();\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n getVisible() {\n return (this._spec as unknown as any)?.visible !== false;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n // do nothing\n this._layout?.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n this._layout?.onLayoutEnd(ctx);\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n beforeRelease() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this._data?.release();\n this._data = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: T) {\n const result = this._compareSpec(spec, this._spec);\n this._spec = spec;\n\n return result;\n }\n\n protected _compareSpec(spec: T, prevSpec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(spec?: T) {\n if (spec) {\n this._spec = spec;\n }\n this.setAttrFromSpec();\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n this._layout?.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle(\n mark: IMarkRaw,\n style?: Partial | ConvertToMarkStyleSpec>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n protected _createMark(\n markInfo: IModelMarkInfo,\n option: Partial = {},\n config?: ICompileMarkConfig\n ): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n\n if (m) {\n m.created();\n config && m.setMarkConfig(config);\n }\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n\n getSpecInfo() {\n const specInfo = this._option.getSpecInfo?.() ?? {};\n return getProperty(specInfo, this.getSpecInfoPath());\n }\n\n getSpecIndex() {\n const path = this.getSpecPath();\n if (!path?.length) {\n return 0;\n }\n const index = Number(path[path.length - 1]);\n if (isNaN(index)) {\n return 0;\n }\n return index;\n }\n}\n","import type { ILayoutModel } from './../model/interface';\nimport type { IPadding, IRect, IPoint } from '../typings';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport { calcLayoutNumber, calcPadding, normalizeLayoutPaddingSpec, boundsInRect } from '../util/space';\nimport { LayoutLevel, DEFAULT_LAYOUT_RECT_LEVEL, USER_LAYOUT_RECT_LEVEL } from '../constant/layout';\n\nimport type { ILayoutItem, ILayoutItemInitOption, ILayoutItemSpec } from './interface';\nimport type { IChartLayoutOption } from '../chart/interface/common';\nimport type { ILayoutAlignSelf, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport class LayoutItem implements ILayoutItem {\n protected _spec: ILayoutItemSpec;\n getSpec() {\n return this._spec || {};\n }\n\n layoutClip: boolean = false;\n\n autoIndent: boolean = false;\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._layoutStartPoint;\n }\n\n private _layoutRect: ILayoutRect = { width: 0, height: 0 };\n\n // 处理用户和逻辑的优先级覆盖,让用户也可以设置 rect\n protected _layoutRectLevelMap: ILayoutRect = {\n width: DEFAULT_LAYOUT_RECT_LEVEL,\n height: DEFAULT_LAYOUT_RECT_LEVEL\n };\n get layoutRectLevelMap() {\n return this._layoutRectLevelMap;\n }\n\n protected _minWidth: number = null;\n get minWidth() {\n return this._minWidth;\n }\n set minWidth(v: number) {\n this._minWidth = v;\n }\n protected _maxWidth: number = null;\n get maxWidth() {\n return this._maxWidth;\n }\n set maxWidth(v: number) {\n this._maxWidth = v;\n }\n protected _minHeight: number = null;\n get minHeight() {\n return this._minHeight;\n }\n set minHeight(v: number) {\n this._minHeight = v;\n }\n protected _maxHeight: number = null;\n get maxHeight() {\n return this._maxHeight;\n }\n set maxHeight(v: number) {\n this._maxHeight = v;\n }\n /** for layout diff */\n protected _lastComputeRect: ILayoutRect = null;\n protected _lastComputeOutBounds: IBoundsLike = { x1: 0, x2: 0, y1: 0, y2: 0 };\n getLastComputeOutBounds(): IBoundsLike {\n return this._lastComputeOutBounds;\n }\n\n getLayoutRect: () => ILayoutRect = () => {\n return this._layoutRect;\n };\n\n layoutType: ILayoutItem['layoutType'] = 'normal';\n\n layoutBindRegionID!: ILayoutItem['layoutBindRegionID'];\n\n _layoutOrient: ILayoutItem['layoutOrient'] = 'left';\n get layoutOrient() {\n return this._layoutOrient;\n }\n set layoutOrient(v: ILayoutItem['layoutOrient']) {\n this._layoutOrient = v;\n }\n layoutPaddingLeft: ILayoutItem['layoutPaddingLeft'] = 0;\n layoutPaddingTop: ILayoutItem['layoutPaddingTop'] = 0;\n layoutPaddingRight: ILayoutItem['layoutPaddingRight'] = 0;\n layoutPaddingBottom: ILayoutItem['layoutPaddingBottom'] = 0;\n\n layoutOffsetX: ILayoutItem['layoutOffsetX'] = 0;\n layoutOffsetY: ILayoutItem['layoutOffsetY'] = 0;\n\n layoutLevel: ILayoutItem['layoutLevel'] = LayoutLevel.Region;\n\n chartLayoutRect!: ILayoutRect;\n\n alignSelf: ILayoutAlignSelf;\n\n protected _model: ILayoutModel;\n\n get model() {\n return this._model;\n }\n\n get type() {\n return this._model.type;\n }\n\n protected _option: ILayoutItemInitOption;\n\n constructor(model: ILayoutModel, option: ILayoutItemInitOption) {\n this._model = model;\n this._option = option;\n this.layoutLevel = option.layoutLevel;\n this.layoutType = option.layoutType;\n if (option.layoutOrient) {\n this.layoutOrient = option.layoutOrient;\n }\n this._spec = model?.getSpec?.();\n }\n\n private _setLayoutAttributeFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n if (!this._spec) {\n return;\n }\n if ((this._spec as unknown as any).visible !== false) {\n // 处理 user spec value to px;\n const padding = normalizeLayoutPaddingSpec(spec.padding);\n const paddingValue = calcPadding(padding, chartViewRect, chartViewRect);\n this.layoutPaddingLeft = paddingValue.left;\n this.layoutPaddingRight = paddingValue.right;\n this.layoutPaddingTop = paddingValue.top;\n this.layoutPaddingBottom = paddingValue.bottom;\n\n this._minHeight = isNil(spec.minHeight)\n ? this._minHeight ?? null\n : calcLayoutNumber(spec.minHeight, chartViewRect.height, chartViewRect);\n this._maxHeight = isNil(spec.maxHeight)\n ? this._maxHeight ?? null\n : calcLayoutNumber(spec.maxHeight, chartViewRect.height, chartViewRect);\n this._minWidth = isNil(spec.minWidth)\n ? this._minWidth ?? null\n : calcLayoutNumber(spec.minWidth, chartViewRect.width, chartViewRect);\n this._maxWidth = isNil(spec.maxWidth)\n ? this._maxWidth ?? null\n : calcLayoutNumber(spec.maxWidth, chartViewRect.width, chartViewRect);\n // 处理 user width\n if (spec.width) {\n this.setLayoutRect(\n {\n width: calcLayoutNumber(spec.width, chartViewRect.width, chartViewRect)\n },\n {\n width: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n if (spec.height) {\n this.setLayoutRect(\n {\n height: calcLayoutNumber(spec.height, chartViewRect.height, chartViewRect)\n },\n {\n height: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n\n // offset\n if (!isNil(spec.offsetX)) {\n this.layoutOffsetX = calcLayoutNumber(spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(spec.offsetY)) {\n this.layoutOffsetY = calcLayoutNumber(spec.offsetY, chartViewRect.height, chartViewRect);\n }\n\n if (spec.alignSelf) {\n this.alignSelf = spec.alignSelf;\n }\n }\n }\n\n setAttrFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n this._spec = spec;\n this.layoutType = spec.layoutType ?? this.layoutType;\n this.layoutLevel = spec.layoutLevel ?? this.layoutLevel;\n this.layoutOrient = spec.orient ?? this.layoutOrient;\n\n this._setLayoutAttributeFromSpec(spec, chartViewRect);\n\n this.layoutClip = spec.clip ?? this.layoutClip;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any) {\n // 在 layoutStart 时重新计算 spec 中的布局属性值,确保 resize 后,这些值保持正确的px值。\n this._setLayoutAttributeFromSpec(this._spec, viewRect);\n }\n\n onLayoutEnd(option: IChartLayoutOption) {\n // do nothing\n }\n\n private _getAbsoluteSpecValue(layoutRect: ILayoutRect) {\n const result: IPadding = { top: null, bottom: null, left: null, right: null };\n ['top', 'bottom', 'left', 'right'].forEach(k => {\n if (!isNil(this._spec[k])) {\n result[k] = calcLayoutNumber(\n this._spec[k],\n k === 'top' || k === 'bottom' ? layoutRect.height : layoutRect.width,\n layoutRect\n );\n }\n });\n return result;\n }\n\n absoluteLayoutInRect(layoutRect: IRect) {\n const { top, bottom, left, right } = this._getAbsoluteSpecValue(layoutRect);\n\n // size first\n const layoutSize = {\n width: layoutRect.width - this.layoutPaddingLeft - this.layoutPaddingRight,\n height: layoutRect.height - this.layoutPaddingTop - this.layoutPaddingBottom\n };\n if (!isNil(left)) {\n layoutSize.width -= left;\n }\n if (!isNil(right)) {\n layoutSize.width -= right;\n }\n if (!isNil(top)) {\n layoutSize.height -= top;\n }\n if (!isNil(bottom)) {\n layoutSize.height -= bottom;\n }\n\n this.setLayoutRect(layoutSize);\n const { width, height } = this.computeBoundsInRect(this.getLayoutRect());\n this.setLayoutRect({ width, height });\n const pos = { x: layoutRect.x, y: layoutRect.y };\n if (this._spec.center === true) {\n pos.x = layoutRect.x + layoutRect.width * 0.5 - width * 0.5;\n pos.y = layoutRect.y + layoutRect.height * 0.5 - height * 0.5;\n } else {\n if (!isNil(left)) {\n pos.x = layoutRect.x + left + this.layoutPaddingLeft;\n } else if (!isNil(right)) {\n pos.x = layoutRect.x + layoutRect.width - this.layoutPaddingRight - right - width;\n }\n if (!isNil(top)) {\n pos.y = layoutRect.y + top + this.layoutPaddingTop;\n } else if (!isNil(bottom)) {\n pos.y = layoutRect.y + layoutRect.height - this.layoutPaddingBottom - bottom - height;\n }\n }\n\n this.setLayoutStartPosition(pos);\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (this._option.transformLayoutPosition) {\n pos = this._option.transformLayoutPosition(pos);\n }\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n\n this._model.afterSetLayoutStartPoint?.(this._layoutStartPoint);\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width) && (levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.width) {\n this._layoutRect.width = width;\n this._layoutRectLevelMap.width = levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n if (isValidNumber(height) && (levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.height) {\n this._layoutRect.height = height;\n this._layoutRectLevelMap.height = levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n this.setRectInSpec(this._layoutRect);\n }\n\n getLayout(): IRect {\n return {\n x: this._layoutStartPoint.x,\n y: this._layoutStartPoint.y,\n width: this._layoutRect.width,\n height: this._layoutRect.height\n };\n }\n\n mergeLayoutRect({ width, height }: ILayoutRect): ILayoutRect {\n const rect = { width, height };\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.width = this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.height = this._layoutRect.height;\n }\n return rect;\n }\n\n getOrientPosAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'x' : 'y';\n }\n getOrientSizeAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'width' : 'height';\n }\n\n protected changeBoundsBySetting(bounds: IBoundsLike): IBoundsLike {\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.x2 = bounds.x1 + this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.y2 = bounds.y1 + this._layoutRect.height;\n }\n bounds.x1 -= this._layoutStartPoint.x;\n bounds.x2 -= this._layoutStartPoint.x;\n bounds.y1 -= this._layoutStartPoint.y;\n bounds.y2 -= this._layoutStartPoint.y;\n return bounds;\n }\n\n setRectInSpec(rect: ILayoutRect) {\n const result = { ...rect };\n if (this._layoutRectLevelMap.width < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minWidth)) {\n result.width = Math.max(result.width, this._minWidth);\n }\n if (!isNil(this._maxWidth)) {\n result.width = Math.min(result.width, this._maxWidth);\n }\n } else {\n result.width = this._layoutRect.width;\n }\n\n if (this._layoutRectLevelMap.height < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minHeight)) {\n result.height = Math.max(result.height, this._minHeight);\n }\n if (!isNil(this._maxHeight)) {\n result.height = Math.min(result.height, this._maxHeight);\n }\n } else {\n result.height = this._layoutRect.height;\n }\n return result;\n }\n\n computeBoundsInRect(rect: ILayoutRect): ILayoutRect {\n // 保留布局使用的rect\n this._lastComputeRect = rect;\n\n if (\n (this.layoutType === 'region-relative' || this.layoutType === 'region-relative-overlap') &&\n ((this._layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'left' || this.layoutOrient === 'right')) ||\n (this._layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'bottom' || this.layoutOrient === 'top')))\n ) {\n return this._layoutRect;\n }\n // 将布局空间限制到 spec 设置内\n // 避免操作到元素本身的 aabbbounds\n const bounds = { ...this._model.getBoundsInRect(this.setRectInSpec(rect), rect) };\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n this.changeBoundsBySetting(bounds);\n // 保留当前模块的布局超出内容,用来处理自动缩进\n // 当前 bounds 需要有实际宽高\n if (this.autoIndent && bounds.x2 - bounds.x1 > 0 && bounds.y2 - bounds.y1 > 0) {\n this._lastComputeOutBounds.x1 = Math.ceil(-bounds.x1);\n this._lastComputeOutBounds.x2 = Math.ceil(bounds.x2 - rect.width);\n this._lastComputeOutBounds.y1 = Math.ceil(-bounds.y1);\n this._lastComputeOutBounds.y2 = Math.ceil(bounds.y2 - rect.height);\n }\n // 返回的布局大小也要限制到 spec 设置内\n let result = this.setRectInSpec(boundsInRect(bounds, rect));\n if (this._option.transformLayoutRect) {\n result = this._option.transformLayoutRect(result);\n }\n\n return result;\n }\n\n getModelId() {\n return this._model.id;\n }\n\n getModelVisible() {\n return this._model.getVisible();\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, merge } from '@visactor/vutils';\nimport type { ILayoutItem } from '../layout/interface';\nimport type { IOrientType, IPolarOrientType, IRect } from '../typings/space';\nimport { BaseModel } from './base-model';\nimport type { IModelSpec } from './interface';\nimport { LayoutItem } from '../layout/layout-item';\nimport type { IPoint } from '../typings/coordinate';\nimport type { ILayoutType, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport abstract class LayoutModel extends BaseModel {\n protected layoutType: ILayoutType | 'none' = 'normal';\n protected layoutLevel?: number = 0;\n protected layoutZIndex: number = 0;\n layoutClip: boolean;\n get layoutOrient() {\n return this._orient as IOrientType;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n this._layout && (this._layout.layoutOrient = v);\n }\n\n protected _forceLayoutTag: boolean = false;\n protected _layout: ILayoutItem = null;\n protected _orient?: IPolarOrientType | IOrientType = null;\n\n protected _layoutRect: ILayoutRect = { width: 0, height: 0 };\n protected _layoutStartPos: IPoint = { x: 0, y: 0 };\n\n // TODO: 有些hack,这个tag是为了避免布局逻辑中,轴的数据变化,又由数据变化触发重新布局\n protected _isLayout: boolean = true;\n\n initLayout() {\n if (this.layoutType === 'none') {\n return;\n }\n this._layout = new LayoutItem(this, {\n layoutType: this.layoutType,\n layoutLevel: this.layoutLevel,\n layoutOrient: this._orient as IOrientType,\n transformLayoutRect: this._transformLayoutRect,\n transformLayoutPosition: this._transformLayoutPosition\n });\n if (this._orient && this._orient !== 'radius' && this._orient !== 'angle' && this._layout) {\n this._layout.layoutOrient = this._orient;\n }\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n this._isLayout = true;\n super.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n // diff layoutRect\n this.updateLayoutAttribute();\n const layoutRect = this.getLayoutRect();\n if (this._forceLayoutTag || !isEqual(this._lastLayoutRect, layoutRect)) {\n this._lastLayoutRect = { ...layoutRect };\n }\n this._forceLayoutTag = false;\n this._isLayout = false;\n }\n\n afterSetLayoutStartPoint(_pos: ILayoutPoint) {\n // do nothing\n }\n\n protected _forceLayout() {\n if (this._isLayout) {\n return;\n }\n this._forceLayoutTag = true;\n this._option.globalInstance.getChart()?.setLayoutTag(true);\n }\n\n // 布局相关\n getLayoutStartPoint() {\n return this._layout ? this._layout.getLayoutStartPoint() : this._layoutStartPos;\n }\n setLayoutStartPosition(pos: Partial) {\n return this._layout\n ? this._layout.setLayoutStartPosition(pos)\n : (this._layoutStartPos = merge(this._layoutStartPos, pos));\n }\n getLayoutRect() {\n return this._layout ? this._layout.getLayoutRect() : this._layoutRect;\n }\n setLayoutRect(rect: Partial, levelMap?: Partial) {\n return this._layout ? this._layout.setLayoutRect(rect) : (this._lastLayoutRect = merge(this._layoutRect, rect));\n }\n\n getLastComputeOutBounds() {\n return this._layout?.getLastComputeOutBounds();\n }\n\n getGraphicBounds = () => {\n if (this._layout) {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n }\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n };\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.layoutClip = this._spec.clip ?? this.layoutClip;\n this.layoutZIndex = this._spec.zIndex ?? this.layoutZIndex;\n this.layoutType = this._spec.layoutType ?? this.layoutType;\n this._orient = this._spec.orient ?? this._orient;\n this.layoutLevel = this._spec.layoutLevel ?? this.layoutLevel;\n }\n\n abstract getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike;\n\n protected _transformLayoutRect: (rect: ILayoutRect) => ILayoutRect = null;\n protected _transformLayoutPosition: (rect: Partial) => Partial = null;\n}\n","import { BaseModelSpecTransformer } from '../model/base-model-transformer';\nimport type { IRegionSpec } from './interface';\n\nexport class RegionSpecTransformer<\n T extends IRegionSpec = IRegionSpec,\n K extends Partial = Partial\n> extends BaseModelSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n // do nothing, region don't need to parse theme\n return {\n spec,\n theme: this._theme\n };\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isEqual, array, isValid } from '@visactor/vutils';\nimport type { IGroupMark as IVGrammarGroupMark, ILayoutOptions, IMark } from '@visactor/vgrammar-core';\nimport { STATE_VALUE_ENUM_REVERSE } from '../compile/mark/interface';\nimport { DimensionTrigger } from '../interaction/dimension-trigger';\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { ISeries } from '../series/interface';\nimport type { IModelOption } from '../model/interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IGeoRegionSpec, IRegion, IRegionSpec, IRegionSpecInfo } from './interface';\nimport type { IInteraction, ITrigger } from '../interaction/interface';\nimport { Interaction } from '../interaction/interaction';\nimport { ChartEvent } from '../constant/event';\nimport { LayoutZIndex } from '../constant/layout';\nimport { AttributeLevel } from '../constant/attribute';\nimport { AnimateManager } from '../animation/animate-manager';\nimport type { IAnimate } from '../animation/interface';\nimport type { ILayoutType, StringOrNumber } from '../typings';\nimport { LayoutModel } from '../model/layout-model';\nimport { RegionSpecTransformer } from './region-transformer';\nimport type { IGroupMark, IRectMark } from '../mark/interface/mark';\n\nexport class Region extends LayoutModel implements IRegion {\n static type = 'region';\n static readonly transformerConstructor = RegionSpecTransformer;\n readonly transformerConstructor = RegionSpecTransformer as any;\n readonly modelType: string = 'region';\n static specKey = 'region';\n specKey: string = 'region';\n\n type = Region.type;\n protected _series: ISeries[] = [];\n layoutType: ILayoutType = 'region';\n layoutZIndex: number = LayoutZIndex.Region;\n\n animate?: IAnimate;\n\n interaction: IInteraction = new Interaction();\n\n declare getSpecInfo: () => IRegionSpecInfo;\n\n getMaxWidth() {\n return this._layout.maxWidth;\n }\n setMaxWidth(value: number) {\n this._layout.maxWidth = value;\n }\n\n getMaxHeight() {\n return this._layout.maxHeight;\n }\n setMaxHeight(value: number) {\n this._layout.maxHeight = value;\n }\n\n protected _groupMark!: IGroupMark;\n getGroupMark() {\n return this._groupMark;\n }\n\n protected _interactionMark!: IGroupMark;\n getInteractionMark() {\n return this._interactionMark;\n }\n\n getStackInverse() {\n return this._spec.stackInverse === true;\n }\n\n getStackSort() {\n return this._spec.stackSort === true;\n }\n\n protected _backgroundMark?: IRectMark;\n protected _foregroundMark?: IRectMark;\n\n protected _trigger: ITrigger;\n\n constructor(spec: T, ctx: IModelOption) {\n super(spec, ctx);\n this.userId = spec.id;\n this.coordinate = spec.coordinate ?? 'cartesian';\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: ctx.getCompiler\n });\n }\n this.interaction.setDisableActiveEffect(this._option.disableTriggerEvent);\n }\n\n protected _getClipDefaultValue() {\n const chartSpec = this._option.getChart().getSpec();\n const hasDataZoom = (chartSpec as any).dataZoom?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? 'filter';\n return filterMode === 'axis';\n });\n const hasScrollBar = (chartSpec as any).scrollBar?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? 'axis';\n return filterMode === 'axis';\n });\n\n return hasDataZoom || hasScrollBar ? true : this._layout.layoutClip;\n }\n\n created(): void {\n this.initLayout();\n super.created();\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this._groupMark = this._createGroupMark('regionGroup', this.userId, this.layoutZIndex);\n if ((this._spec as IGeoRegionSpec).roam) {\n this._groupMark.setMarkConfig({ interactive: true });\n }\n\n // 交互层\n this._interactionMark = this._createGroupMark(\n 'regionInteractionGroup',\n (this.userId ?? this.type) + '_interaction',\n LayoutZIndex.Interaction\n );\n\n // hack: region 的样式不能设置在groupMark上,因为groupMark目前没有计算dirtyBound,会导致拖影问题\n if (!isEmpty(this._spec.style)) {\n this._backgroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionBackground' }) as IRectMark;\n if (clip) {\n this._foregroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionForeground' }) as IRectMark;\n }\n [this._backgroundMark, this._foregroundMark].forEach(mark => {\n if (mark) {\n mark.created();\n this.setMarkStyle(\n mark,\n {\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._groupMark.addMark(mark);\n }\n });\n this._backgroundMark && this._backgroundMark.setMarkConfig({ zIndex: LayoutZIndex.SeriesGroup - 1 });\n this._foregroundMark && this._foregroundMark.setMarkConfig({ zIndex: LayoutZIndex.Mark + 1 });\n }\n this.createTrigger();\n }\n\n private _createGroupMark(name: string, userId: StringOrNumber, zIndex: number) {\n const groupMark = this._createMark({ type: MarkTypeEnum.group, name }) as IGroupMark;\n groupMark.setUserId(userId);\n groupMark.setMarkConfig({ zIndex });\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this.setMarkStyle(\n groupMark,\n {\n x: () => this.getLayoutStartPoint().x,\n y: () => this.getLayoutStartPoint().y,\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height,\n clip\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n groupMark,\n {\n cornerRadius: this._spec.style?.cornerRadius\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n\n this._marks.addMark(groupMark);\n return groupMark;\n }\n\n init(option: any) {\n super.init(option);\n this.initMark();\n this.initSeriesDataflow();\n this.initInteraction();\n this.initTrigger();\n }\n initMark() {\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n protected _initBackgroundMarkStyle() {\n if (this._backgroundMark) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n fillOpacity: this._spec.style?.fill ? 1 : 0,\n ...this._spec.style\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n if (this._spec.clip ?? this._getClipDefaultValue()) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n strokeOpacity: 0\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n }\n\n protected _initForegroundMarkStyle() {\n if (this._foregroundMark) {\n this.setMarkStyle(\n this._foregroundMark,\n {\n ...this._spec.style,\n fillOpacity: 0,\n pickable: false\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec?.style, spec?.style)) {\n result.reMake = true;\n }\n return result;\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n addSeries(s: ISeries) {\n if (!s) {\n return;\n }\n if (!this._series.includes(s)) {\n this._series.push(s);\n }\n }\n\n removeSeries(s: ISeries) {\n if (!s) {\n return;\n }\n const index = this._series.findIndex(s_ => s_ === s);\n if (index >= 0) {\n this._series.splice(index, 1);\n }\n }\n\n getSeries(\n opt: {\n name?: string;\n userId?: StringOrNumber | StringOrNumber[];\n specIndex?: number | number[];\n id?: StringOrNumber;\n type?: string;\n coordinateType?: CoordinateType;\n dataName?: string;\n } = {}\n ): ISeries[] {\n return this._series.filter(\n s =>\n (opt.name ? s?.name === opt.name : true) &&\n (opt.userId ? array(opt.userId).includes(s.userId) : true) &&\n (isValid(opt.specIndex) ? array(opt.specIndex).includes(s.getSpecIndex()) : true) &&\n (opt.id ? s.id === opt.id : true) &&\n (opt.type ? s.type === opt.type : true) &&\n (opt.coordinateType ? s.coordinate === opt.coordinateType : true) &&\n (opt.dataName ? s.getRawData?.()?.name === opt.dataName : true)\n );\n }\n\n getSeriesInName(name: string): ISeries {\n return this.getSeries({ name })[0];\n }\n getSeriesInUserId(userId: string): ISeries {\n return this.getSeries({ userId })[0];\n }\n getSeriesInId(id: number): ISeries {\n return this.getSeries({ id })[0];\n }\n getSeriesInType(type: string): ISeries[] {\n return this.getSeries({ type });\n }\n getSeriesInCoordinateType(coordinateType: CoordinateType): ISeries[] {\n return this.getSeries({ coordinateType });\n }\n getSeriesInDataName(dataName: string): ISeries[] {\n return this.getSeries({ dataName });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n initSeriesDataflow() {\n const viewDataFilters = this._series.map(s => s.getViewDataFilter() ?? s.getViewData()).filter(v => !!v);\n this._option.dataSet.multipleDataViewAddListener(viewDataFilters, 'change', this.seriesDataFilterOver);\n }\n\n seriesDataFilterOver = () => {\n this.event.emit(ChartEvent.regionSeriesDataFilterOver, { model: this, chart: this.getChart() });\n this._series.forEach(s => {\n if (s.getViewDataFilter()) {\n s.reTransformViewData();\n }\n });\n };\n\n release() {\n super.release();\n this._series = [];\n }\n /** dimension */\n createTrigger() {\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this.interaction\n };\n this._trigger = new DimensionTrigger(triggerOptions);\n }\n\n initTrigger() {\n // register all mark\n // trigger check mark enable\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n this._trigger.registerMark(m);\n });\n });\n this._trigger.init();\n }\n\n initInteraction() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n // 注册所有支持反选状态mark\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n for (const key in STATE_VALUE_ENUM_REVERSE) {\n if (!isEmpty(m.stateStyle[STATE_VALUE_ENUM_REVERSE[key]])) {\n this.interaction.registerMark(STATE_VALUE_ENUM_REVERSE[key], m);\n }\n }\n });\n });\n }\n\n compileMarks(group?: string | IVGrammarGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group, context: { model: this } });\n m.getProduct()?.layout(\n (group: IVGrammarGroupMark, children: IMark[], parentLayoutBounds: IBoundsLike, options?: ILayoutOptions) => {\n // console.log('region mark layout');\n }\n );\n });\n }\n\n compile() {\n this.animate?.compile();\n this.compileMarks();\n }\n\n getBoundsInRect = () => {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n };\n\n onLayoutEnd(ctx: any): void {\n this._series.forEach(s => s.onLayoutEnd(ctx));\n super.onLayoutEnd(ctx);\n }\n}\n","import { isNil, last } from '@visactor/vutils';\nimport type { Layout } from './base-layout';\nimport type { ILayoutItem } from './interface';\n\nfunction getPositionItems(items: ILayoutItem[]) {\n const startItems: ILayoutItem[] = [];\n const middleItems: ILayoutItem[] = [];\n const endItems: ILayoutItem[] = [];\n\n items.forEach(item => {\n if (isNil(item.getSpec().position) || item.getSpec().position === 'start') {\n startItems.push(item);\n } else if (item.getSpec().position === 'middle') {\n middleItems.push(item);\n } else if (item.getSpec().position === 'end') {\n endItems.push(item);\n }\n });\n\n return {\n startItems,\n endItems,\n middleItems\n };\n}\n\nfunction adjustItemsToCenter(allItems: ILayoutItem[][], isVertical: boolean, containerLength: number) {\n if (isVertical) {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().y + lastItem.getLayoutRect().height - items[0].getLayoutStartPoint().y;\n const centerY = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x,\n y: item.getLayoutStartPoint().y + centerY\n });\n });\n });\n } else {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().x + lastItem.getLayoutRect().width - items[0].getLayoutStartPoint().x;\n const centerX = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + centerX,\n y: item.getLayoutStartPoint().y\n });\n });\n });\n }\n}\n\nfunction alignSelfOfItems(allItems: ILayoutItem[][], isVertical: boolean, maxSizes: number[], sign: number) {\n let maxSize: number;\n\n allItems.forEach((lineItems: ILayoutItem[], index: number) => {\n if (lineItems.length > 1) {\n maxSize = maxSizes[index];\n\n lineItems.forEach(item => {\n if (!item.alignSelf || item.alignSelf === 'start') {\n return;\n }\n\n const pos = item.getLayoutStartPoint();\n const ratio = item.alignSelf === 'middle' ? 0.5 : 1;\n const delta = isVertical\n ? maxSize - (item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight)\n : maxSize - (item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom);\n\n if (isVertical) {\n item.setLayoutStartPosition({\n x: pos.x + sign * delta * ratio,\n y: pos.y\n });\n } else {\n item.setLayoutStartPosition({\n x: pos.x,\n y: pos.y + sign * delta * ratio\n });\n }\n });\n }\n });\n}\n\nfunction layoutLeftRightStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitHeight: number,\n isMiddle: boolean,\n position: 'left' | 'right'\n) {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preTop = layout.topCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preTop + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n preTop += itemTotalHeight;\n if (preTop > limitHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preTop = layout.topCurrent + itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: layout.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, true, limitHeight);\n }\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutLeftRightEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'left' | 'right') {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preBottom = layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n\n if (preBottom < itemTotalHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preBottom = layout.bottomCurrent;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n preBottom -= itemTotalHeight;\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutTopBottomStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitWidth: number,\n isMiddle: boolean,\n position: 'top' | 'bottom'\n) {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preLeft = layout.leftCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n x: preLeft + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n\n preLeft += itemTotalWidth;\n if (preLeft > limitWidth && singleLineItems.length) {\n maxHeights.push(maxHeight);\n preLeft = layout.leftCurrent + itemTotalWidth;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n item.setLayoutStartPosition({\n x: layout.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n singleLineItems.push(item);\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, false, limitWidth);\n }\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nfunction layoutTopBottomEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'top' | 'bottom') {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preRight = layout.rightCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n\n if (preRight < itemTotalWidth && singleLineItems.length) {\n preRight = layout.rightCurrent;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: layout.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n singleLineItems.push(item);\n item.setLayoutStartPosition({\n x: preRight + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n preRight -= itemTotalWidth;\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nexport function layoutLeftInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'left');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'left');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'left');\n }\n}\n\nexport function layoutRightInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'right');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'right');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'right');\n }\n}\n\nexport function layoutTopInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'top');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'top');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'top');\n }\n}\n\nexport function layoutBottomInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'bottom');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'bottom');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'bottom');\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport type { IChart } from '../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, ILayoutItem } from './interface';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport { error } from '../util/debug';\nimport { layoutBottomInlineItems, layoutLeftInlineItems, layoutRightInlineItems, layoutTopInlineItems } from './util';\nimport type { ILayoutRect } from '../typings/layout';\n\nexport type LayoutSideType = {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface IOffset {\n offsetLeft: number;\n offsetRight: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\ntype overlapInfo = {\n items: ILayoutItem[];\n rect: ILayoutRect;\n};\n\nexport class Layout implements IBaseLayout {\n static type = 'base';\n\n leftCurrent: number = 0;\n topCurrent: number = 0;\n rightCurrent: number = 0;\n bottomCurrent: number = 0;\n\n _chartLayoutRect!: IRect;\n _chartViewBox!: IBoundsLike;\n\n protected _onError: (msg: string) => void;\n\n constructor(_spec?: unknown, ctx?: utilFunctionCtx) {\n this._onError = ctx?.onError;\n }\n\n protected _layoutInit(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike) {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n this.leftCurrent = chartLayoutRect.x;\n this.topCurrent = chartLayoutRect.y;\n this.rightCurrent = chartLayoutRect.x + chartLayoutRect.width;\n this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y;\n\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n }\n\n protected _layoutNormalItems(items: ILayoutItem[]) {\n this.layoutNormalInlineItems(items.filter(x => x.layoutType === 'normal-inline'));\n this.layoutNormalItems(items.filter(x => x.layoutType === 'normal'));\n }\n\n protected _groupItems(items: ILayoutItem[]) {\n const regionItems = items.filter(x => x.layoutType === 'region');\n const relativeItems = items.filter(x => x.layoutType === 'region-relative');\n const relativeOverlapItems = items.filter(x => x.layoutType === 'region-relative-overlap');\n const allRelatives = relativeItems.concat(relativeOverlapItems);\n // 允许重叠元素 ,目前允许重叠元素认为是紧贴region的。最后布局\n const overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n };\n relativeOverlapItems.forEach(i => {\n overlapItems[i.layoutOrient].items.push(i);\n });\n\n return {\n regionItems,\n relativeItems,\n relativeOverlapItems,\n allRelatives,\n overlapItems\n };\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n }\n\n protected _processAutoIndent(\n regionItems: ILayoutItem[],\n relativeItems: ILayoutItem[],\n relativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n allRelatives: ILayoutItem[],\n layoutTemp: LayoutSideType\n ): void {\n // 如果有缩进\n if (allRelatives.some(i => i.autoIndent)) {\n // check auto indent\n const { top, bottom, left, right } = this._checkAutoIndent(allRelatives, layoutTemp);\n // 如果出现了需要自动缩进的场景 则基于缩进再次布局\n if (top || bottom || left || right) {\n // set outer bounds to padding\n this.topCurrent = layoutTemp.top + top;\n this.bottomCurrent = layoutTemp.bottom - bottom;\n this.leftCurrent = layoutTemp.left + left;\n this.rightCurrent = layoutTemp.right - right;\n // reLayout\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n }\n }\n }\n\n protected layoutNormalItems(normalItems: ILayoutItem[]): void {\n normalItems.forEach(item => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingRight,\n y: this.bottomCurrent + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n }\n });\n }\n\n protected layoutNormalInlineItems(normalItems: ILayoutItem[]): void {\n const leftItems = normalItems.filter(item => item.layoutOrient === 'left');\n const rightItems = normalItems.filter(item => item.layoutOrient === 'right');\n const topItems = normalItems.filter(item => item.layoutOrient === 'top');\n const bottomItems = normalItems.filter(item => item.layoutOrient === 'bottom');\n\n const limitWidth = this._chartLayoutRect.width + this._chartLayoutRect.x;\n const limitHeight = this._chartLayoutRect.height + this._chartLayoutRect.y;\n\n // 同 normal,按照 left、top、right、bottom 的顺序进行布局\n // 各个方向上再按照 position 进行分组布局,顺序为 start middle end\n leftItems.length && layoutLeftInlineItems(leftItems, this, limitHeight);\n topItems.length && layoutTopInlineItems(topItems, this, limitWidth);\n rightItems.length && layoutRightInlineItems(rightItems, this, limitHeight);\n bottomItems.length && layoutBottomInlineItems(bottomItems, this, limitWidth);\n }\n\n protected _layoutRelativeOverlap(orient: IOrientType, info: overlapInfo) {\n // 得到 max rect\n info.items.forEach((item: ILayoutItem) => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n info.rect.width = Math.max(rect.width + item.layoutPaddingLeft + item.layoutPaddingRight, info.rect.width);\n info.rect.height = Math.max(rect.height + item.layoutPaddingTop + item.layoutPaddingBottom, info.rect.height);\n });\n\n // 统一设置rect和pos\n info.items.forEach((item: ILayoutItem) => {\n item.setLayoutRect(info.rect);\n if (orient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX\n });\n } else if (orient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent - info.rect.width + item.layoutOffsetX\n });\n } else if (orient === 'top') {\n item.setLayoutStartPosition({\n x: this.topCurrent + item.layoutOffsetY\n });\n } else {\n item.setLayoutStartPosition({\n x: this.bottomCurrent - info.rect.height + item.layoutOffsetY\n });\n }\n });\n\n if (orient === 'left') {\n this.leftCurrent += info.rect.width;\n } else if (orient === 'right') {\n this.rightCurrent -= info.rect.width;\n } else if (orient === 'top') {\n this.topCurrent += info.rect.height;\n } else {\n this.bottomCurrent -= info.rect.height;\n }\n }\n\n protected _layoutRelativeItem(item: ILayoutItem, layoutRect: ILayoutRect) {\n const rect = item.computeBoundsInRect(layoutRect);\n if (item.layoutOrient === 'left' || item.layoutOrient === 'right') {\n item.setLayoutRect({ width: rect.width });\n } else {\n item.setLayoutRect({ height: rect.height });\n }\n // 减少尺寸\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'right') {\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } // 减少尺寸\n else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'bottom') {\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n y: this.bottomCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n }\n }\n\n protected _layoutRegionItem(\n regionItems: ILayoutItem[],\n regionRelativeTotalWidth: number,\n regionRelativeTotalHeight: number\n ) {\n // region 处理\n const regionWidth = Math.max(\n Math.min(regionRelativeTotalWidth, ...regionItems.map(region => region.maxWidth ?? Number.MAX_VALUE)),\n 0\n );\n const regionHeight = Math.max(\n Math.min(regionRelativeTotalHeight, ...regionItems.map(region => region.maxHeight ?? Number.MAX_VALUE)),\n 0\n );\n regionItems.forEach(region => {\n const width = regionWidth - region.layoutPaddingLeft - region.layoutPaddingRight;\n const height = regionHeight - region.layoutPaddingTop - region.layoutPaddingBottom;\n\n region.setLayoutRect({\n width: width,\n height: height\n });\n\n region.setLayoutStartPosition({\n x: this.leftCurrent + region.layoutOffsetX + region.layoutPaddingLeft,\n y: this.topCurrent + region.layoutOffsetY + region.layoutPaddingTop\n });\n });\n\n return {\n regionHeight,\n regionWidth\n };\n }\n\n /**\n *\n * 1. 补全 region-relative rect 和部分 layoutStartPoint\n * 2. 补全 region rect 和 layoutStartPoint\n *\n */\n protected layoutRegionItems(\n regionItems: ILayoutItem[],\n regionRelativeItems: ILayoutItem[],\n regionRelativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n }\n ): void {\n let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n let regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('left', overlapItems.left);\n this._layoutRelativeOverlap('right', overlapItems.right);\n\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'top' || x.layoutOrient === 'bottom')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('top', overlapItems.top);\n this._layoutRelativeOverlap('bottom', overlapItems.bottom);\n\n // 此时得到height\n regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n // region 处理\n const { regionWidth, regionHeight } = this._layoutRegionItem(\n regionItems,\n regionRelativeTotalWidth,\n regionRelativeTotalHeight\n );\n\n // region-relative 特殊处理\n regionRelativeItems.concat(regionRelativeOverlapItems).forEach(item => {\n // 处理特殊元素的宽高\n if (['left', 'right'].includes(item.layoutOrient)) {\n // 用户有配置的话,已经处理过,不需要再次处理\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n height: relativeRegion.getLayoutRect().height\n });\n item.setLayoutStartPosition({\n y: relativeRegion.getLayoutStartPoint().y + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + regionWidth - regionRelativeTotalWidth\n });\n }\n } else if (['top', 'bottom'].includes(item.layoutOrient)) {\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n width: relativeRegion.getLayoutRect().width\n });\n\n item.setLayoutStartPosition({\n x: relativeRegion.getLayoutStartPoint().x + item.layoutOffsetX + item.layoutPaddingLeft\n });\n\n if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n y: item.getLayoutStartPoint().y + regionHeight - regionRelativeTotalHeight\n });\n }\n }\n });\n }\n\n /**\n * 再找出对 absolute 元素,无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n protected layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n // 对普通布局来说,只出一个 region 绑定\n filterRegionsWithID(items: ILayoutItem[], id: number): ILayoutItem {\n const target = items.find(x => x.getModelId() === id);\n if (!target) {\n (this._onError ?? error)('can not find target region item, invalid id');\n }\n return target as ILayoutItem;\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem) {\n const result = {\n width: this.rightCurrent - this.leftCurrent - item.layoutPaddingLeft - item.layoutPaddingRight,\n height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom\n };\n return result;\n }\n\n protected _checkAutoIndent(\n items: ILayoutItem[],\n layoutTemp: {\n top: number;\n left: number;\n bottom: number;\n right: number;\n }\n ): IPadding {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const itemOuter = i.getLastComputeOutBounds();\n const outer = this._getOutInLayout(itemOuter, i, layoutTemp);\n if (vOrH) {\n result.top = Math.max(result.top, outer.top);\n result.bottom = Math.max(result.bottom, outer.bottom);\n } else {\n result.left = Math.max(result.left, outer.left);\n result.right = Math.max(result.right, outer.right);\n }\n });\n return result;\n }\n\n private _getOutInLayout(itemOuter: IBoundsLike, i: ILayoutItem, tempBorder: LayoutSideType): LayoutSideType {\n const { x, y } = i.getLayoutStartPoint();\n const { width, height } = i.getLayoutRect();\n\n const result: LayoutSideType = {\n left: tempBorder.left - (x - itemOuter.x1),\n right: x + width + itemOuter.x2 - tempBorder.right,\n top: tempBorder.top - (y - itemOuter.y1),\n bottom: y + height + itemOuter.y2 - tempBorder.bottom\n };\n return result;\n }\n}\n","import isValid from './isValid';\n\nexport function range(start: number, stop?: number, step?: number): number[] {\n if (!isValid(stop)) {\n stop = start;\n start = 0;\n }\n if (!isValid(step)) {\n step = 1;\n }\n\n let i = -1;\n const n = Math.max(0, Math.ceil((stop - start) / step)) | 0;\n const range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export const memoize = any>(func: T) => {\n let lastArgs: any[] = null;\n let lastResult: any = null;\n\n return ((...args: any[]) => {\n if (lastArgs && args.every((val, i) => val === lastArgs[i])) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = (func as any)(...args);\n\n return lastResult;\n }) as T;\n};\n","import { ascending } from './ascending';\nimport isNil from './isNil';\nimport { Logger } from '../logger';\n\n/**\n * 通过二分法,查找数组a中大于数值x的第一个元素的序号\n * @param a\n * @param x\n * @param lo\n * @param hi\n * @returns\n */\nexport function bisect(a: number[], x: number, lo: number = 0, hi?: number) {\n if (isNil(hi)) {\n hi = a.length;\n }\n while (lo < (hi as number)) {\n const mid: number = (lo + (hi as number)) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n\n/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/bisect.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n/** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\nexport function findZeroOfFunction(\n f: (entry: number) => number,\n a: number,\n b: number,\n parameters?: {\n maxIterations?: number;\n tolerance?: number;\n }\n) {\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\n if (fA * fB > 0) {\n const logger = Logger.getInstance();\n logger.error('Initial bisect points must have opposite signs');\n return NaN;\n }\n\n if (fA === 0) {\n return a;\n }\n if (fB === 0) {\n return b;\n }\n\n for (let i = 0; i < maxIterations; ++i) {\n delta /= 2;\n const mid = a + delta;\n const fMid = f(mid);\n\n if (fMid * fA >= 0) {\n a = mid;\n }\n\n if (Math.abs(delta) < tolerance || fMid === 0) {\n return mid;\n }\n }\n return a + delta;\n}\n\n/**\n * 二分靠近框架,返回数组中第一个大于等于目标值的数的索引\n * @param arr 数组\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearch = (arr: T[], compareFn: (value: T) => number) => {\n return binaryFuzzySearchInNumberRange(0, arr.length, value => compareFn(arr[value]));\n};\n\n/**\n * 二分靠近框架,返回数字区间中第一个大于等于目标值的数字\n * @param x1 区间上界\n * @param x2 区间下界(不包含)\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearchInNumberRange = (x1: number, x2: number, compareFn: (value: number) => number) => {\n let left = x1;\n let right = x2;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n if (compareFn(mid) >= 0) {\n right = mid; // 第一个大于等于目标值的数\n } else {\n left = mid + 1;\n }\n }\n return left;\n};\n","import { bisect, range } from '@visactor/vutils';\nimport type { FloorCeilType, InterpolateType } from '../interface';\n\nexport function identity(x: any) {\n return x;\n}\n\nexport const generatePow = (exponent: number) => {\n return (x: number) => {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n};\n\nexport const sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\nexport const square = (x: number) => {\n return x < 0 ? -x * x : x * x;\n};\n\nexport const log = (x: number) => {\n return Math.log(x);\n};\n\nexport const exp = (x: number) => {\n return Math.exp(x);\n};\n\nexport const logNegative = (x: number) => {\n return -Math.log(-x);\n};\n\nexport const expNegative = (x: number) => {\n return -Math.exp(-x);\n};\n\nexport const pow10 = (x: number) => {\n return isFinite(x) ? Math.pow(10, x) : x < 0 ? 0 : x;\n};\n\nexport const powp = (base: number) => {\n return base === 10 ? pow10 : base === Math.E ? Math.exp : (x: number) => Math.pow(base, x);\n};\n\nexport const logp = (base: number) => {\n return base === Math.E\n ? Math.log\n : base === 10\n ? Math.log10\n : base === 2\n ? Math.log2\n : ((base = Math.log(base)), (x: number) => Math.log(x) / base);\n};\n\nexport const symlog = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n};\n\nexport const symexp = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n};\n\nexport function normalize(a: number, b: number): (x: number) => number {\n a = Number(a);\n b = Number(b);\n b -= a;\n if (b) {\n return (x: number) => {\n return (x - a) / b;\n };\n }\n const result = Number.isNaN(b) ? NaN : 0.5;\n return () => {\n return result;\n };\n}\n\n// 基于d3-scale\n// https://github.com/d3/d3-scale/blob/main/src/continuous.js\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nexport function bimap(\n domain: [number, number],\n range: [any, any],\n interpolate: InterpolateType\n): (x: number) => any {\n const d0 = domain[0];\n const d1 = domain[1];\n const r0 = range[0];\n const r1 = range[1];\n let d0Fuc: any;\n let r0Fuc: any;\n if (d1 < d0) {\n d0Fuc = normalize(d1, d0);\n r0Fuc = interpolate(r1, r0);\n } else {\n d0Fuc = normalize(d0, d1);\n r0Fuc = interpolate(r0, r1);\n }\n return (x: number) => {\n return r0Fuc(d0Fuc(x));\n };\n}\n\nexport function bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n\n/** 计算 scale 的实际 range 长度 */\nexport function scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = space * step;\n return wholeSize;\n}\n\n/** 根据 scale 的实际 range 长度计算 bandwidth */\nexport function calculateBandwidthFromWholeRangeSize(\n count: number,\n wholeSize: number,\n paddingInner: number,\n paddingOuter: number,\n round: boolean\n) {\n const space = bandSpace(count, paddingInner, paddingOuter);\n let step = wholeSize / Math.max(1, space || 1);\n if (round) {\n step = Math.floor(step);\n }\n let bandwidth = step * (1 - paddingInner);\n if (round) {\n bandwidth = Math.round(bandwidth);\n }\n return bandwidth;\n}\n\n/** 根据可见 range 和 rangeFactor 计算整体 range */\nexport function calculateWholeRangeFromRangeFactor(range: number[], rangeFactor: number[]): [number, number] {\n const k = (range[1] - range[0]) / (rangeFactor[1] - rangeFactor[0]);\n const b = range[0] - k * rangeFactor[0];\n const r0 = b;\n const r1 = k + b;\n return [r0, r1];\n}\n\nexport function polymap(domain: number[], range: any[], interpolate: InterpolateType): (x: number) => any {\n const j = Math.min(domain.length, range.length) - 1;\n const d = new Array(j);\n const r = new Array(j);\n let i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function (x: number) {\n const i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport const nice = (domain: number[] | Date[], options: FloorCeilType) => {\n const newDomain = domain.slice();\n\n let startIndex = 0;\n let endIndex = newDomain.length - 1;\n let x0 = newDomain[startIndex];\n let x1 = newDomain[endIndex];\n\n if (x1 < x0) {\n [startIndex, endIndex] = [endIndex, startIndex];\n [x0, x1] = [x1, x0];\n }\n\n newDomain[startIndex] = options.floor(x0);\n newDomain[endIndex] = options.ceil(x1);\n\n return newDomain;\n};\n\nexport const niceNumber = (value: number, round: boolean = false) => {\n const exponent = Math.floor(Math.log10(value));\n const fraction = value / Math.pow(10, exponent);\n\n let niceFraction: number;\n\n if (round) {\n if (fraction < 1.5) {\n niceFraction = 1;\n } else if (fraction < 3) {\n niceFraction = 2;\n } else if (fraction < 7) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n } else {\n if (fraction <= 1) {\n niceFraction = 1;\n } else if (fraction <= 2) {\n niceFraction = 2;\n } else if (fraction <= 5) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n }\n\n return niceFraction * Math.pow(10, exponent);\n};\n\nexport const restrictNumber = (value: number, domain: [number, number]) => {\n let min;\n let max;\n if (domain[0] < domain[1]) {\n min = domain[0];\n max = domain[1];\n } else {\n min = domain[1];\n max = domain[0];\n }\n return Math.min(Math.max(value, min), max);\n};\n","import { range, memoize, isNumber } from '@visactor/vutils';\nimport type { TransformType, ContinuousTicksFunc, NiceOptions, NiceType } from '../interface';\nimport { niceNumber, restrictNumber } from './utils';\n\nconst e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\nconst niceNumbers = [1, 2, 5, 10];\n\ntype TicksFunc = (start: number, stop: number, count: number) => number[];\n// eslint-disable-next-line max-len\ntype TicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\n// eslint-disable-next-line max-len\ntype ForceTicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\ntype D3TicksForLogTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: {\n noDecimals?: boolean;\n }\n) => number[];\n\nexport const calculateTicksOfSingleValue = (value: number, tickCount: number, noDecimals?: boolean) => {\n let step = 1;\n let start = value;\n const middleIndex = Math.floor((tickCount - 1) / 2);\n const absVal = Math.abs(value);\n\n if (value >= 0 && value <= Number.MIN_VALUE) {\n start = 0;\n } else if (value < 0 && value >= -Number.MIN_VALUE) {\n start = -(tickCount - 1);\n } else if (!noDecimals && absVal < 1) {\n step = getNickStep(absVal).step;\n // middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (noDecimals || absVal > 1) {\n start = Math.floor(value) - middleIndex * step;\n }\n\n if (step > 0) {\n if (value > 0) {\n start = Math.max(start, 0);\n } else if (value < 0) {\n // < 0;\n start = Math.min(start, -(tickCount - 1) * step);\n }\n\n return range(0, tickCount).map((index: number) => start + index * step);\n }\n\n return value > 0\n ? calculateTicksByStep(0, -(tickCount - 1) / step, step)\n : calculateTicksByStep((tickCount - 1) / step, 0, step);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const d3Ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let i = -1;\n let n;\n let ticks;\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return [start];\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return [start];\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n step = tickIncrement(start, stop, count).step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let r0 = Math.round(start / step);\n let r1 = Math.round(stop / step);\n if (r0 * step < start) {\n ++r0;\n }\n if (r1 * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else if (step < 0 && options?.noDecimals) {\n step = 1;\n const r0 = Math.ceil(start);\n const r1 = Math.floor(stop);\n\n if (r0 <= r1) {\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = r0 + i;\n }\n } else {\n return [];\n }\n } else {\n step = -step;\n let r0 = Math.round(start * step);\n let r1 = Math.round(stop * step);\n if (r0 / step < start) {\n ++r0;\n }\n if (r1 / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst calculateTicksByStep = (start: number, stop: number, step: number) => {\n let i = -1;\n let n;\n let ticks;\n\n if (step > 0) {\n let r0 = Math.floor(start / step);\n let r1 = Math.ceil(stop / step);\n if ((r0 + 1) * step < start) {\n ++r0;\n }\n if ((r1 - 1) * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else {\n step = -step;\n let r0 = Math.floor(start * step);\n let r1 = Math.ceil(stop * step);\n if ((r0 + 1) / step < start) {\n ++r0;\n }\n if ((r1 - 1) / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n return ticks;\n};\n\nexport const appendTicksToCount = (ticks: number[], count: number, step: number) => {\n let n: number;\n const firstTick = ticks[0];\n const lastTick = ticks[ticks.length - 1];\n const appendCount = count - ticks.length;\n\n if (lastTick <= 0) {\n const headTicks: number[] = [];\n // append to head\n for (n = appendCount; n >= 1; n--) {\n headTicks.push(firstTick - n * step);\n }\n return headTicks.concat(ticks);\n } else if (firstTick >= 0) {\n // append to tail\n for (n = 1; n <= appendCount; n++) {\n ticks.push(lastTick + n * step);\n }\n\n return ticks;\n }\n let headTicks: number[] = [];\n const tailTicks: number[] = [];\n // append to head and tail\n for (n = 1; n <= appendCount; n++) {\n if (n % 2 === 0) {\n headTicks = [firstTick - Math.floor(n / 2) * step].concat(headTicks);\n } else {\n tailTicks.push(lastTick + Math.ceil(n / 2) * step);\n }\n }\n\n return headTicks.concat(ticks).concat(tailTicks);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let ticks;\n let n;\n const maxIterations = 5;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n const stepRes = tickIncrement(start, stop, count);\n let step = stepRes.step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let cur = 1;\n const { power, gap } = stepRes;\n const delatStep = gap === 10 ? 2 * 10 ** power : 1 * 10 ** power;\n while (\n cur <= maxIterations &&\n ((ticks = calculateTicksByStep(start, stop, step)), ticks.length > count + 1) &&\n count > 2\n ) {\n step += delatStep;\n\n cur += 1;\n }\n\n if (count > 2 && ticks.length < count - 1) {\n ticks = appendTicksToCount(ticks, count, step);\n }\n } else {\n if (options?.noDecimals && step < 0) {\n step = 1;\n }\n ticks = calculateTicksByStep(start, stop, step);\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst getNickStep = (step: number) => {\n const power = Math.floor(Math.log(step) / Math.LN10); // 对数取整\n const error = step / 10 ** power;\n\n let gap = niceNumbers[0];\n if (error >= e10) {\n gap = niceNumbers[3];\n } else if (error >= e5) {\n gap = niceNumbers[2];\n } else if (error >= e2) {\n gap = niceNumbers[1];\n }\n\n if (power >= 0) {\n return { step: gap * 10 ** power, gap, power };\n }\n return { step: -(10 ** -power) / gap, gap, power };\n};\n\nexport function tickIncrement(start: number, stop: number, count: number) {\n const step = (stop - start) / Math.max(0, count);\n return getNickStep(step);\n}\n\n/**\n * 严格根据start、stop、count进行分割,要求start、stop、count完全准确(除了count = 1的情况下stop可能不准确)\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport function forceTicks(start: number, stop: number, count: number) {\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n if (start === stop && count > 0) {\n return [start];\n }\n if (count <= 0 || (step = forceTickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n return [];\n }\n\n const ticks = new Array(count);\n for (let i = 0; i < count; i++) {\n ticks[i] = start + i * step;\n }\n\n return ticks;\n}\n\nexport function forceTickIncrement(start: number, stop: number, count: number) {\n // 用绝对数值做步进距离\n const step = (stop - start) / Math.max(1, count - 1);\n return step;\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n let i = -1;\n let n;\n let reverse;\n\n stop = +stop;\n start = +start;\n step = +step;\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n if (!isFinite(step) || stop - start <= step) {\n return [start];\n }\n const count = Math.floor((stop - start) / step + 1);\n const ticks = new Array(count);\n while (++i < count) {\n ticks[i] = start + i * step;\n }\n if (reverse) {\n ticks.reverse();\n }\n return ticks;\n}\n\nexport function niceLinear(d: number[], count: number = 10) {\n let i0 = 0;\n let i1 = d.length - 1;\n let start = d[i0];\n let stop = d[i1];\n let prestep;\n let step;\n let maxIter = 10;\n\n if (stop < start) {\n step = start;\n start = stop;\n stop = step;\n step = i0;\n i0 = i1;\n i1 = step;\n }\n\n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count).step;\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return d;\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 } else {\n break;\n }\n prestep = step;\n }\n\n return;\n}\n\nexport function parseNiceOptions(originalDomain: number[], option: NiceOptions) {\n const hasForceMin = isNumber(option.forceMin);\n const hasForceMax = isNumber(option.forceMax);\n let niceType: NiceType = null;\n const niceMinMax = [];\n let niceDomain: number[] = null;\n\n const domainValidator =\n hasForceMin && hasForceMax\n ? (x: number) => x >= option.forceMin && x <= option.forceMax\n : hasForceMin\n ? (x: number) => x >= option.forceMin\n : hasForceMax\n ? (x: number) => x <= option.forceMax\n : null;\n\n if (hasForceMin) {\n niceMinMax[0] = option.forceMin;\n } else if (\n isNumber(option.min) &&\n option.min <= Math.min(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[0] = option.min;\n }\n\n if (hasForceMax) {\n niceMinMax[1] = option.forceMax;\n } else if (\n isNumber(option.max) &&\n option.max >= Math.max(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[1] = option.max;\n }\n\n if (isNumber(niceMinMax[0]) && isNumber(niceMinMax[1])) {\n niceDomain = originalDomain.slice();\n niceDomain[0] = niceMinMax[0];\n niceDomain[niceDomain.length - 1] = niceMinMax[1];\n } else if (!isNumber(niceMinMax[0]) && !isNumber(niceMinMax[1])) {\n niceType = 'all';\n } else if (!isNumber(niceMinMax[0])) {\n niceType = 'min';\n } else {\n niceType = 'max';\n }\n\n return { niceType, niceDomain, niceMinMax, domainValidator };\n}\n\nexport const fixPrecision = (start: number, stop: number, value: number) => {\n return Math.abs(stop - start) < 1 ? +value.toFixed(1) : Math.round(+value);\n};\n\nexport const d3TicksForLog = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: { noDecimals?: boolean }\n ) => {\n let u = start;\n let v = stop;\n const r = v < u;\n\n if (r) {\n [u, v] = [v, u];\n }\n\n let i = transformer(u);\n let j = transformer(v);\n let k;\n let t;\n let z = [];\n\n if (!(base % 1) && j - i < count) {\n // this._base is integer\n (i = Math.floor(i)), (j = Math.ceil(j));\n if (u > 0) {\n for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n } else {\n for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n }\n if (z.length * 2 < count) {\n z = ticks(u, v, count);\n }\n } else {\n z = ticks(i, j, Math.min(j - i, count)).map(untransformer);\n }\n z = z.filter((t: number) => t !== 0);\n if (options?.noDecimals) {\n z = Array.from(new Set(z.map((t: number) => Math.floor(t))));\n }\n return r ? z.reverse() : z;\n }\n);\n\nexport const ticksBaseTransform = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n ) => {\n const ticksResult: number[] = [];\n const ticksMap = {};\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n let ticksExp = [];\n // get ticks exp\n if (Number.isInteger(base)) {\n ticksExp = ticks(startExp, stopExp, count);\n } else {\n const stepExp = (stopExp - startExp) / (count - 1);\n for (let i = 0; i < count; i++) {\n ticksExp.push(startExp + i * stepExp);\n }\n }\n ticksExp.forEach((tl: number) => {\n // get pow\n const power = untransformer(tl);\n // nice\n const nicePower = Number.isInteger(base)\n ? fixPrecision(start, stop, power)\n : fixPrecision(start, stop, niceNumber(power));\n // scope\n const scopePower = fixPrecision(start, stop, restrictNumber(nicePower, [start, stop]));\n // dedupe\n if (!ticksMap[scopePower] && !isNaN(scopePower) && ticksExp.length > 1) {\n ticksMap[scopePower] = 1;\n ticksResult.push(scopePower);\n }\n });\n return ticksResult;\n }\n);\n\nexport const forceTicksBaseTransform = memoize(\n (start: number, stop: number, count: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = forceTicks(startExp, stopExp, count);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n\nexport const forceStepTicksBaseTransform = memoize(\n (start: number, stop: number, step: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = stepTicks(startExp, stopExp, step);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n","import { clamp, isNil, isValid } from '@visactor/vutils';\nimport type { IRangeFactor, ScaleFishEyeOptions } from './interface';\nimport { calculateWholeRangeFromRangeFactor } from './utils/utils';\n\nexport abstract class BaseScale implements IRangeFactor {\n protected _wholeRange: any[];\n protected _rangeFactorStart?: number = null;\n protected _rangeFactorEnd?: number = null;\n protected _unknown: any;\n protected _fishEyeOptions?: ScaleFishEyeOptions;\n protected _fishEyeTransform?: (output: number) => number;\n\n abstract range(): any[];\n abstract domain(): any[];\n abstract invert(d: any): any;\n\n protected _calculateWholeRange(range: any[]) {\n if (this._wholeRange) {\n return this._wholeRange;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n this._wholeRange = calculateWholeRangeFromRangeFactor(range, [this._rangeFactorStart, this._rangeFactorEnd]);\n return this._wholeRange;\n }\n return range;\n }\n\n abstract calculateVisibleDomain(range: any[]): any[];\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean, clear?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean, clear?: boolean): this | any[] {\n if (!_) {\n if (clear) {\n this._wholeRange = null;\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n return this;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n return [this._rangeFactorStart, this._rangeFactorEnd];\n }\n return null;\n }\n if (_.length === 2 && _.every(r => r >= 0 && r <= 1)) {\n this._wholeRange = null;\n if (_[0] === 0 && _[1] === 1) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _[0];\n this._rangeFactorEnd = _[1];\n }\n }\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorStart;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorEnd) || this._rangeFactorEnd === 1)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _;\n this._rangeFactorEnd = this._rangeFactorEnd ?? 1;\n }\n }\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorEnd;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorStart) || this._rangeFactorStart === 0)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorEnd = _;\n this._rangeFactorStart = this._rangeFactorStart ?? 0;\n }\n }\n\n return this;\n }\n\n protected generateFishEyeTransform() {\n if (!this._fishEyeOptions) {\n this._fishEyeTransform = null;\n\n return;\n }\n const { distortion = 2, radiusRatio = 0.1, radius } = this._fishEyeOptions;\n const range = this.range();\n const first = range[0];\n const last = range[range.length - 1];\n const min = Math.min(first, last);\n const max = Math.max(first, last);\n const focus = clamp(this._fishEyeOptions.focus ?? 0, min, max);\n const rangeRadius = isNil(radius) ? (max - min) * radiusRatio : radius;\n let k0 = Math.exp(distortion);\n k0 = (k0 / (k0 - 1)) * rangeRadius;\n const k1 = distortion / rangeRadius;\n\n this._fishEyeTransform = (output: number) => {\n const delta = Math.abs(output - focus);\n\n if (delta >= rangeRadius) {\n return output;\n }\n\n if (delta <= 1e-6) {\n return focus;\n }\n const k = ((k0 * (1 - Math.exp(-delta * k1))) / delta) * 0.75 + 0.25;\n\n return focus + (output - focus) * k;\n };\n }\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n\n /** 内部变量对外抛出方法 */\n get(key: string, defaultValue?: any) {\n return (this as any)?.[key] ?? defaultValue;\n }\n}\n","/**\n * 将 hex 格式颜色转换为 rgb 格式\n * @param str hex 格式的颜色值\n * @returns rgb 格式\n */\nexport default function hexToRgb(str: string): [number, number, number] {\n let r = '';\n let g = '';\n let b = '';\n const strtIndex = str[0] === '#' ? 1 : 0;\n for (let i = strtIndex; i < str.length; i++) {\n if (str[i] === '#') {\n continue;\n }\n if (i < strtIndex + 2) {\n r += str[i];\n } else if (i < strtIndex + 4) {\n g += str[i];\n } else if (i < strtIndex + 6) {\n b += str[i];\n }\n }\n const ri = parseInt(r, 16);\n const gi = parseInt(g, 16);\n const bi = parseInt(b, 16);\n return [ri, gi, bi];\n}\n","export default function rgbToHex(r: number, g: number, b: number) {\n return Number((1 << 24) + (r << 16) + (g << 8) + b)\n .toString(16)\n .slice(1);\n}\n","import { RGB } from './Color';\n\nexport function interpolateRgb(colorA: RGB, colorB: RGB): (x: number) => RGB {\n const redA = colorA.r;\n const redB = colorB.r;\n const greenA = colorA.g;\n const greenB = colorB.g;\n const blueA = colorA.b;\n const blueB = colorB.b;\n const opacityA = colorA.opacity;\n const opacityB = colorB.opacity;\n\n return (t: number) => {\n const r = Math.round(redA * (1 - t) + redB * t);\n const g = Math.round(greenA * (1 - t) + greenB * t);\n const b = Math.round(blueA * (1 - t) + blueB * t);\n const opacity = opacityA * (1 - t) + opacityB * t;\n\n return new RGB(r, g, b, opacity);\n };\n}\n","export function interpolateNumber(a: number, b: number): (x: number) => number {\n return (t: number) => {\n return a * (1 - t) + b * t;\n };\n}\n\nexport function interpolateNumberRound(a: number, b: number): (x: number) => number {\n return function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n\nexport function interpolateDate(a: Date, b: Date) {\n const aVal = a.valueOf();\n const bVal = b.valueOf();\n\n const d = new Date();\n return (t: number) => {\n d.setTime(aVal * (1 - t) + bVal * t);\n return d;\n };\n}\n\nconst reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\nconst reB = new RegExp(reA.source, 'g');\n\nfunction zero(b: any) {\n return function () {\n return b;\n };\n}\n\nfunction one(b: any) {\n return function (t: any) {\n return b(t) + '';\n };\n}\n\nexport function interpolateString(a: any, b: any) {\n let bi = (reA.lastIndex = reB.lastIndex = 0); // scan index for next number in b\n let am: any; // current match in a\n let bm: any; // current match in b\n let bs; // string preceding current number in b, if any\n let i = -1; // index in s\n const s: any[] = []; // string constants and placeholders\n const q: any[] = []; // 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)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) {\n s[i] += bm;\n } // coalesce with previous string\n else {\n s[++i] = bm;\n }\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({ i: i, x: interpolateNumber(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]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\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\n ? q[0]\n ? one(q[0].x)\n : zero(b)\n : ((b = q.length),\n function (t: any) {\n for (let i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }\n return s.join('');\n });\n}\n","import { ColorUtil, isNil, interpolateNumber, interpolateDate } from '@visactor/vutils';\n\nconst { interpolateRgb } = ColorUtil;\n\nexport function interpolate(a: any, b: any) {\n const t = typeof b;\n let c;\n\n if (isNil(b) || t === 'boolean') {\n return () => b;\n }\n\n if (t === 'number') {\n return interpolateNumber(a, b);\n }\n\n if (t === 'string') {\n if ((c = ColorUtil.Color.parseColorString(b))) {\n const rgb = interpolateRgb(ColorUtil.Color.parseColorString(a as string), c);\n\n return (t: number) => {\n // #rrggbbaa 格式在部分浏览器存在兼容性问题,rgba()字符串兼容性更好,所以还是支持rgba()字符串\n return rgb(t).formatRgb();\n };\n }\n\n return interpolateNumber(Number(a), Number(b));\n }\n\n if (b instanceof ColorUtil.RGB) {\n return interpolateRgb(a, b);\n }\n\n if (b instanceof ColorUtil.Color) {\n return interpolateRgb(a.color, b.color);\n }\n\n if (b instanceof Date) {\n return interpolateDate(a, b);\n }\n\n return interpolateNumber(Number(a), Number(b));\n}\n","export function clamper(a: number, b: number): (x: number) => number {\n let t;\n if (a > b) {\n t = a;\n a = b;\n b = t;\n }\n return (x: number) => {\n return Math.max(a, Math.min(b, x));\n };\n}\n","import { BaseScale } from './base-scale';\nimport type {\n BimapType,\n InterpolateType,\n PolymapType,\n TransformType,\n IContinuousScale,\n ContinuousScaleType,\n TickData,\n NiceType,\n ScaleFishEyeOptions\n} from './interface';\nimport { interpolate } from './utils/interpolate';\nimport { bimap, identity, polymap } from './utils/utils';\nimport { clamper, toNumber, interpolateNumberRound, interpolateNumber, isValid, isNil } from '@visactor/vutils';\n\nexport class ContinuousScale extends BaseScale implements IContinuousScale {\n readonly type: ContinuousScaleType;\n protected transformer: TransformType;\n protected untransformer: TransformType;\n\n protected _niceDomain: number[];\n protected _niceType?: NiceType;\n protected _domain: number[];\n protected _range: any[];\n protected _unknown: any = undefined;\n protected _forceAlign: boolean;\n\n protected _output?: (x: number) => number;\n protected _input?: (x: number) => number;\n protected _interpolate?: InterpolateType;\n protected _piecewise: BimapType | PolymapType;\n protected _domainValidator?: (val: number) => boolean;\n\n _clamp?: (x: number) => number;\n _autoClamp?: boolean;\n\n constructor(transformer: TransformType = identity, untransformer: TransformType = identity) {\n super();\n this.transformer = transformer;\n this.untransformer = untransformer;\n\n this._forceAlign = true;\n this._domain = [0, 1];\n this._range = [0, 1];\n this._clamp = identity;\n this._piecewise = bimap;\n this._interpolate = interpolate;\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._niceDomain ?? this._domain;\n }\n\n fishEye(): ScaleFishEyeOptions;\n fishEye(options: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this;\n fishEye(options?: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this | ScaleFishEyeOptions {\n if (options || clear) {\n this._fishEyeOptions = options;\n this._fishEyeTransform = null;\n\n return this.rescale(slience);\n }\n\n return this._fishEyeOptions;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._clamp(x)));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n invert(y: any): any {\n if (!this._input) {\n this._input = (this._piecewise as PolymapType)(\n this._calculateWholeRange(this._range),\n (this._niceDomain ?? this._domain).map(this.transformer),\n interpolateNumber\n );\n }\n return this._clamp(this.untransformer(this._input(y)));\n }\n\n domain(): any[];\n domain(_: any[], slience?: boolean): this;\n domain(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return (this._niceDomain ?? this._domain).slice();\n }\n this._domainValidator = null;\n this._niceType = null;\n this._niceDomain = null;\n const nextDomain = Array.from(_, toNumber) as [number, number];\n\n this._domain = nextDomain;\n return this.rescale(slience);\n }\n\n range(): any[];\n range(_: any[], slience?: boolean): this;\n range(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return this._range.slice();\n }\n\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n return this.rescale(slience);\n }\n\n rangeRound(_: any[], slience?: boolean): this {\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n this._interpolate = interpolateNumberRound;\n return this.rescale(slience);\n }\n\n rescale(slience?: boolean): this {\n if (slience) {\n return this;\n }\n const domain = this._niceDomain ?? this._domain;\n const domainLength = domain.length;\n const rangeLength = this._range.length;\n let n = Math.min(domainLength, rangeLength);\n\n if (domainLength && domainLength < rangeLength && this._forceAlign) {\n // insert steps to domain\n const deltaStep = rangeLength - domainLength + 1;\n const last = domain[domainLength - 1];\n const delta = domainLength >= 2 ? (last - domain[domainLength - 2]) / deltaStep : 0;\n\n for (let i = 1; i <= deltaStep; i++) {\n domain[domainLength - 2 + i] = last - delta * (deltaStep - i);\n }\n n = rangeLength;\n }\n\n if (this._autoClamp) {\n this._clamp = clamper(domain[0], domain[n - 1]);\n }\n this._piecewise = n > 2 ? polymap : bimap;\n this._output = this._input = null;\n this._wholeRange = null;\n\n this.generateFishEyeTransform();\n return this;\n }\n\n clamp(): boolean;\n clamp(_: boolean, f?: (x: number) => number, slience?: boolean): this;\n clamp(_?: boolean, f?: (x: number) => number, slience?: boolean): this | boolean {\n if (!arguments.length) {\n return this._clamp !== identity;\n }\n if (f) {\n this._autoClamp = false;\n this._clamp = f;\n } else {\n this._autoClamp = !!_;\n this._clamp = _ ? undefined : identity;\n }\n\n return this.rescale(slience);\n }\n\n interpolate(): InterpolateType;\n interpolate(_: InterpolateType, slience?: boolean): this;\n interpolate(_?: InterpolateType, slience?: boolean) {\n if (!arguments.length) {\n return this._interpolate;\n }\n this._interpolate = _;\n return this.rescale(slience);\n }\n\n ticks(count: number = 10): any[] {\n return [];\n }\n\n tickData(count: number = 10): TickData[] {\n const ticks = this.ticks(count);\n return (ticks ?? []).map((tick, index) => {\n const scaledValue = this.scale(tick);\n return {\n index,\n tick,\n value: (scaledValue - this._range[0]) / (this._range[1] - this._range[0])\n };\n });\n }\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean): this | any[] {\n if (!_) {\n return super.rangeFactor();\n }\n super.rangeFactor(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorStart();\n }\n super.rangeFactorStart(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorEnd();\n }\n super.rangeFactorEnd(_);\n this._output = this._input = null;\n\n return this;\n }\n\n forceAlignDomainRange(): boolean;\n forceAlignDomainRange(enable: boolean): this;\n forceAlignDomainRange(forceAlign?: boolean): this | boolean {\n if (!arguments.length) {\n return this._forceAlign;\n }\n this._forceAlign = forceAlign;\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport { d3Ticks, forceTicks, niceLinear, parseNiceOptions, stepTicks, ticks } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport type { ContinuousScaleType, CustomTicksFunc, NiceOptions } from './interface';\nimport { isFunction, isValid } from '@visactor/vutils';\n\n/**\n * TODO:\n * 1. niceMax/niceMin\n * 2. tickFormat\n */\nexport class LinearScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Linear;\n\n clone(): LinearScale {\n return new LinearScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n\n tickFormat() {\n // TODO\n return () => {\n // TODO\n };\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.calculateVisibleDomain(this._range);\n return d3Ticks(d[0], d[d.length - 1], count, options);\n }\n\n /**\n * the kind of algorithms will generate ticks that is smaller than the min or greater than the max\n * if we don't update niceDomain, the ticks will exceed the domain\n */\n ticks(\n count: number = 10,\n options?: { noDecimals?: boolean; customTicks?: CustomTicksFunc }\n ): number[] {\n if (isFunction(options?.customTicks)) {\n return options.customTicks(this, count);\n }\n if (\n (isValid(this._rangeFactorStart) &&\n isValid(this._rangeFactorEnd) &&\n (this._rangeFactorStart > 0 || this._rangeFactorEnd < 1) &&\n this._range.length === 2) ||\n !this._niceType\n ) {\n return this.d3Ticks(count, options);\n }\n const curNiceDomain = this._niceDomain ?? this._domain;\n const originalDomain = this._domain;\n const start = curNiceDomain[0];\n const stop = curNiceDomain[curNiceDomain.length - 1];\n let ticksResult = ticks(originalDomain[0], originalDomain[originalDomain.length - 1], count, options);\n\n if (!ticksResult.length) {\n return ticksResult;\n }\n\n if (this._domainValidator) {\n ticksResult = ticksResult.filter(this._domainValidator);\n } else if ((ticksResult[0] !== start || ticksResult[ticksResult.length - 1] !== stop) && this._niceType) {\n const newNiceDomain = curNiceDomain.slice();\n\n if (this._niceType === 'all') {\n newNiceDomain[0] = ticksResult[0];\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'min' && ticksResult[0] !== start) {\n newNiceDomain[0] = ticksResult[0];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'max' && ticksResult[ticksResult.length - 1] !== stop) {\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n }\n\n if (this._niceType !== 'all') {\n const min = Math.min(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n const max = Math.max(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n\n ticksResult = ticksResult.filter((entry: number) => entry >= min && entry <= max);\n }\n }\n\n return ticksResult;\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicks(d[0], d[d.length - 1], count);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n\n return stepTicks(d[0], d[d.length - 1], step);\n }\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n this._niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n this.rescale();\n\n return this;\n }\n } else {\n this._niceType = 'all';\n }\n\n if (this._niceType) {\n const niceDomain = niceLinear(originalDomain.slice(), count);\n\n if (this._niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (this._niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain;\n this.rescale();\n }\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n */\n niceMin(count: number = 10): this {\n this._niceType = 'min';\n\n const maxD = this._domain[this._domain.length - 1];\n const niceDomain = niceLinear(this.domain(), count);\n\n if (niceDomain) {\n niceDomain[niceDomain.length - 1] = maxD;\n\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n * @returns\n */\n niceMax(count: number = 10): this {\n this._niceType = 'max';\n const minD = this._domain[0];\n const niceDomain = niceLinear(this._domain.slice(), count);\n\n if (niceDomain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport type { DiscreteScaleType, IOrdinalScale } from './interface';\nimport { BaseScale } from './base-scale';\nimport { isValid } from '@visactor/vutils';\n\nexport const implicit = Symbol('implicit');\n\nexport class OrdinalScale extends BaseScale implements IOrdinalScale {\n readonly type: DiscreteScaleType = ScaleEnum.Ordinal;\n protected _index: Map;\n protected _domain: Array;\n protected _ordinalRange: Array;\n /** specified: support scale to return specific value on special input value */\n protected _specified: Record;\n specified(): Record;\n specified(_: Record): this;\n specified(_?: Record): this | Record {\n if (!_) {\n return Object.assign({}, this._specified);\n }\n this._specified = Object.assign(this._specified ?? {}, _);\n return this;\n }\n\n protected _getSpecifiedValue(input: string): undefined | any {\n if (!this._specified) {\n return undefined;\n }\n return this._specified[input];\n }\n\n constructor() {\n super();\n this._index = new Map();\n this._domain = [];\n this._ordinalRange = [];\n this._unknown = implicit;\n }\n\n // TODO checkPoint\n clone(): IOrdinalScale {\n const s = new OrdinalScale().domain(this._domain).range(this._ordinalRange).unknown(this._unknown);\n // _specified 为空时,不会返回this\n this._specified && s.specified(this._specified);\n return s;\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._domain;\n }\n\n scale(d: any): any {\n const key = `${d}`;\n const special = this._getSpecifiedValue(key);\n if (special !== undefined) {\n return special;\n }\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) {\n return this._unknown;\n }\n // TODO checkPoint\n i = this._domain.push(d);\n this._index.set(key, i);\n }\n const output = this._ordinalRange[(i - 1) % this._ordinalRange.length];\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n // d3-scale里没有对ordinal-scale添加invert能力,这里只做简单的映射\n invert(d: any): any {\n // 找到index\n let i = 0;\n while (i < this._ordinalRange.length && this._ordinalRange[i] !== d) {\n i++;\n }\n return this._domain[(i - 1) % this._domain.length];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = [];\n this._index = new Map();\n for (const value of _) {\n const key = `${value}`;\n if (this._index.has(key)) {\n continue;\n }\n this._index.set(key, this._domain.push(value));\n }\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._ordinalRange.slice();\n }\n const nextRange = Array.from(_);\n\n this._ordinalRange = nextRange;\n return this;\n }\n\n index(x: any): number {\n if (!this._index) {\n return -1;\n }\n return this._index.get(`${x}`) ?? -1;\n }\n}\n","import { clamper } from '@visactor/vutils';\n\nfunction generateTicks(start: number, stop: number, step: number, reverse: boolean) {\n const ticks: number[] = [];\n let ptr = start;\n while (ptr <= stop) {\n ticks.push(ptr);\n ptr += step;\n }\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n}\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确,但是保证均匀,输出为整数数组\n * @param start\n * @param stop\n * @param count\n * @param allowExcessive 如果为true,实际输出的tick数 >= count,否则实际输出的tick数 <= count\n * @returns\n */\nexport function ticks(start: number, stop: number, count: number, allowExcessive?: boolean) {\n let reverse: boolean;\n let step: number;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n count = Math.floor(+count);\n if (!count) {\n return [];\n }\n if (start === stop) {\n return [start];\n }\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n\n let expectedCount = clamper(1, stop - start + 1)(count);\n step = Math.floor((stop - start + 1) / expectedCount);\n if (!allowExcessive) {\n while (\n Math.ceil((stop - start + 1) / step) > count && // 估算实际的tick数量,根据数量调整step\n expectedCount > 1\n ) {\n expectedCount -= 1;\n step = Math.floor((stop - start) / expectedCount);\n }\n }\n\n return generateTicks(start, stop, step, reverse);\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n let reverse: boolean;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n step = clamper(1, stop - start + 1)(Math.floor(+step));\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n return generateTicks(start, stop, step, reverse);\n}\n","import { toNumber, isGreater, isLess, isNumber, isValid, isNil } from '@visactor/vutils';\nimport { OrdinalScale, implicit } from './ordinal-scale';\nimport {\n bandSpace,\n calculateBandwidthFromWholeRangeSize,\n calculateWholeRangeFromRangeFactor,\n scaleWholeRangeSize\n} from './utils/utils';\nimport { ScaleEnum } from './type';\nimport { stepTicks, ticks } from './utils/tick-sample-int';\nimport type { DiscreteScaleType, IBandLikeScale, ScaleFishEyeOptions, TickData } from './interface';\n\n// band scale 各参数参考图示 https://raw.githubusercontent.com/d3/d3-scale/master/img/band.png\nexport class BandScale extends OrdinalScale implements IBandLikeScale {\n readonly type: DiscreteScaleType = ScaleEnum.Band;\n protected _step?: number;\n protected _bandwidth?: number;\n /** 是否固定了 bandwidth */\n protected _isFixed?: boolean;\n /** 用户配置的 bandwidth */\n protected _userBandwidth?: number | 'auto';\n protected _maxBandwidth?: number;\n protected _minBandwidth?: number;\n protected _round: boolean;\n protected _paddingInner: number;\n protected _paddingOuter: number;\n protected _align: number;\n protected _range: Array;\n protected _bandRangeState?: { reverse: boolean; start: number; count: number };\n\n constructor(slience?: boolean) {\n super();\n this._range = [0, 1];\n this._step = undefined;\n this._bandwidth = undefined;\n this._isFixed = false;\n this._round = false;\n this._paddingInner = 0;\n this._paddingOuter = 0;\n this._align = 0.5;\n this._unknown = undefined;\n delete this.unknown;\n\n this.rescale(slience);\n }\n\n rescale(slience?: boolean, changeProperty?: keyof IBandLikeScale): this {\n if (slience) {\n return this;\n }\n this._wholeRange = null;\n const wholeRange = this._calculateWholeRange(this._range, changeProperty);\n const n = super.domain().length;\n const reverse = wholeRange[1] < wholeRange[0];\n let start = wholeRange[Number(reverse) - 0];\n const stop = wholeRange[1 - Number(reverse)];\n const space = bandSpace(n, this._paddingInner, this._paddingOuter);\n\n this._step = (stop - start) / Math.max(1, space || 1);\n if (this._round) {\n this._step = Math.floor(this._step);\n }\n start += (stop - start - this._step * (n - this._paddingInner)) * this._align;\n if (!this.isBandwidthFixed()) {\n this._bandwidth = this._step * (1 - this._paddingInner);\n }\n if (this._round) {\n start = Math.round(start);\n if (!this.isBandwidthFixed()) {\n this._bandwidth = Math.round(this._bandwidth);\n }\n }\n\n this._bandRangeState = {\n reverse,\n start: reverse ? start + this._step * (n - 1) : start,\n count: n\n };\n\n this.generateFishEyeTransform();\n\n return this;\n }\n\n scale(d: any): any {\n if (!this._bandRangeState) {\n return undefined;\n }\n const key = `${d}`;\n const special = this._getSpecifiedValue(key);\n if (special !== undefined) {\n return special;\n }\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) {\n return this._unknown;\n }\n // TODO checkPoint\n i = this._domain.push(d);\n this._index.set(key, i);\n }\n const { count, start, reverse } = this._bandRangeState;\n const stepIndex = (i - 1) % count;\n\n const output = start + (reverse ? -1 : 1) * stepIndex * this._step;\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n /**\n * 根据可见 range 计算 scale 的整体 range\n * @param range 可见 range\n * @returns\n */\n protected _calculateWholeRange(range: any[], changeProperty?: keyof IBandLikeScale) {\n if (this._wholeRange) {\n return this._wholeRange;\n }\n\n if ((this._minBandwidth || this._maxBandwidth) && !this._isBandwidthFixedByUser()) {\n let wholeSize: number;\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const wholeRange = calculateWholeRangeFromRangeFactor(range, [this._rangeFactorStart, this._rangeFactorEnd]);\n wholeSize = Math.abs(wholeRange[1] - wholeRange[0]);\n } else {\n wholeSize = Math.abs(range[1] - range[0]);\n }\n const autoBandwidth = calculateBandwidthFromWholeRangeSize(\n super.domain().length,\n wholeSize,\n this._paddingInner,\n this._paddingOuter,\n this._round\n );\n if (autoBandwidth < this._minBandwidth) {\n this._bandwidth = this._minBandwidth;\n this._isFixed = true;\n } else if (autoBandwidth > this._maxBandwidth) {\n this._bandwidth = this._maxBandwidth;\n this._isFixed = true;\n } else {\n this._bandwidth = autoBandwidth;\n this._isFixed = false;\n }\n }\n\n if (this.isBandwidthFixed()) {\n const wholeLength =\n scaleWholeRangeSize(super.domain().length, this._bandwidth, this._paddingInner, this._paddingOuter) *\n Math.sign(range[1] - range[0]);\n const rangeFactorSize = Math.min((range[1] - range[0]) / wholeLength, 1);\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n const canAlignStart = this._rangeFactorStart + rangeFactorSize <= 1;\n const canAlignEnd = this._rangeFactorEnd - rangeFactorSize >= 0;\n\n if (changeProperty === 'rangeFactorStart' && canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else if (changeProperty === 'rangeFactorEnd' && canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else {\n // 判断 scale 方向来决定边界检测顺序\n if (range[0] <= range[1]) {\n if (canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else if (canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else {\n this._rangeFactorStart = 0;\n this._rangeFactorEnd = rangeFactorSize;\n }\n } else {\n if (canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else if (canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else {\n this._rangeFactorStart = 1 - rangeFactorSize;\n this._rangeFactorEnd = 1;\n }\n }\n }\n\n if (wholeLength > 0) {\n const r0 = range[0] - wholeLength * this._rangeFactorStart;\n const r1 = r0 + wholeLength;\n this._wholeRange = [r0, r1];\n } else {\n const r1 = range[1] + wholeLength * (1 - this._rangeFactorEnd);\n const r0 = r1 - wholeLength;\n this._wholeRange = [r0, r1];\n }\n } else {\n this._rangeFactorStart = 0;\n this._rangeFactorEnd = rangeFactorSize;\n this._wholeRange = [range[0], range[0] + wholeLength];\n }\n\n return this._wholeRange;\n }\n\n return super._calculateWholeRange(range);\n }\n\n calculateWholeRangeSize() {\n const wholeRange = this._calculateWholeRange(this._range);\n return Math.abs(wholeRange[1] - wholeRange[0]);\n }\n\n calculateVisibleDomain(range: any[]) {\n const domain = this._domain;\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && domain.length) {\n const d0 = this._getInvertIndex(range[0]);\n const d1 = this._getInvertIndex(range[1]);\n\n return domain.slice(Math.min(d0, d1), Math.max(d0, d1) + 1);\n }\n\n return domain;\n }\n\n domain(): any[];\n domain(_: any[], slience?: boolean): this;\n domain(_?: any[], slience?: boolean): this | any[] {\n if (_) {\n super.domain(_);\n\n return this.rescale(slience);\n }\n return super.domain();\n }\n\n range(): any[];\n range(_: any[], slience?: boolean): this;\n range(_?: any[], slience?: boolean): this | any[] {\n if (_) {\n this._range = [toNumber(_[0]), toNumber(_[1])];\n return this.rescale(slience);\n }\n return this._range;\n }\n\n rangeRound(_: any[], slience?: boolean): this {\n this._range = [toNumber(_[0]), toNumber(_[1])];\n this._round = true;\n return this.rescale(slience);\n }\n\n ticks(count: number = 10) {\n const d = this.calculateVisibleDomain(this._range);\n\n if (count === -1) {\n // return domain as ticks when count is -1\n return d;\n }\n\n const tickIndexList = ticks(0, d.length - 1, count, false);\n return tickIndexList.map(i => d[i]);\n }\n\n tickData(count: number = 10): TickData[] {\n const ticks = this.ticks(count);\n return ticks.map((tick, index) => {\n const scaledValue = this.scale(tick);\n return {\n index,\n tick,\n value: (scaledValue - this._range[0] + this._bandwidth / 2) / (this._range[1] - this._range[0])\n };\n });\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n const tickIndexList = ticks(0, d.length - 1, count, true);\n return tickIndexList\n .filter(i => i < d.length) // 截断不存在的index\n .map(i => d[i]);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n const tickIndexList = stepTicks(0, d.length - 1, step);\n return tickIndexList.map(i => d[i]);\n }\n\n protected _getInvertIndex(d: any): any {\n // 找到index\n let i = 0;\n const halfStep = this.step() / 2;\n const halfBandwidth = this.bandwidth() / 2;\n const len = this._domain.length;\n const range = this.range();\n const start = range[0];\n const stop = range[range.length - 1];\n const reverse = start > stop;\n\n for (i = 0; i < len; i++) {\n const r = this.scale(this._domain[i]) + halfBandwidth;\n\n if (i === 0 && ((!reverse && !isGreater(d, r + halfStep)) || (reverse && !isLess(d, r - halfStep)))) {\n break;\n }\n\n if (i === len - 1) {\n break;\n }\n\n if (!isLess(d, r - halfStep) && !isGreater(d, r + halfStep)) {\n break;\n }\n }\n\n if (i >= 0 && i <= len - 1) {\n return i;\n }\n\n return len - 1;\n }\n\n invert(d: any): any {\n return this._domain[this._getInvertIndex(d)];\n }\n\n padding(p: number | number[], slience?: boolean): this;\n padding(): number;\n padding(p?: number | [number, number], slience?: boolean): this | number {\n if (p !== undefined) {\n this._paddingOuter = Math.max(0, Math.min(Array.isArray(p) ? Math.min.apply(null, p) : p));\n this._paddingInner = this._paddingOuter;\n return this.rescale(slience);\n }\n return this._paddingInner;\n }\n\n paddingInner(p: number, slience?: boolean): this;\n paddingInner(): number;\n paddingInner(_?: number, slience?: boolean) {\n if (_ !== undefined) {\n this._paddingInner = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._paddingInner;\n }\n\n paddingOuter(p: number, slience?: boolean): this;\n paddingOuter(): number;\n paddingOuter(_?: number, slience?: boolean) {\n if (_ !== undefined) {\n this._paddingOuter = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._paddingOuter;\n }\n\n step(): number {\n return this._step;\n }\n\n round(_: boolean, slience?: boolean): this;\n round(): boolean;\n round(_?: boolean, slience?: boolean): this | boolean {\n if (_ !== undefined) {\n this._round = _;\n return this.rescale(slience);\n }\n return this._round;\n }\n\n align(_: number, slience?: boolean): this;\n align(): number;\n align(_?: number, slience?: boolean): this | number {\n if (_ !== undefined) {\n this._align = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._align;\n }\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean): this | any[] {\n if (!_) {\n return super.rangeFactor();\n }\n super.rangeFactor(_);\n return this.rescale(slience);\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorStart();\n }\n super.rangeFactorStart(_);\n return this.rescale(slience, 'rangeFactorStart');\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorEnd();\n }\n super.rangeFactorEnd(_);\n return this.rescale(slience, 'rangeFactorEnd');\n }\n\n bandwidth(): number;\n bandwidth(_: number | 'auto', slience?: boolean): this;\n bandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._bandwidth;\n }\n if (_ === 'auto') {\n this._bandwidth = undefined;\n this._isFixed = false;\n } else {\n this._bandwidth = _;\n this._isFixed = true;\n }\n this._userBandwidth = _;\n return this.rescale(slience);\n }\n\n maxBandwidth(): number;\n maxBandwidth(_: number | 'auto', slience?: boolean): this;\n maxBandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._maxBandwidth;\n }\n if (_ === 'auto') {\n this._maxBandwidth = undefined;\n } else {\n this._maxBandwidth = _;\n }\n return this.rescale(slience);\n }\n\n minBandwidth(): number;\n minBandwidth(_: number | 'auto', slience?: boolean): this;\n minBandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._minBandwidth;\n }\n if (_ === 'auto') {\n this._minBandwidth = undefined;\n } else {\n this._minBandwidth = _;\n }\n return this.rescale(slience);\n }\n\n fishEye(): ScaleFishEyeOptions;\n fishEye(options: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this;\n fishEye(options?: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this | ScaleFishEyeOptions {\n if (options || clear) {\n this._fishEyeOptions = options;\n this._fishEyeTransform = null;\n\n return this.rescale(slience);\n }\n\n return this._fishEyeOptions;\n }\n\n isBandwidthFixed() {\n return this._isFixed && !!this._bandwidth;\n }\n\n protected _isBandwidthFixedByUser() {\n return this._isFixed && this._userBandwidth && isNumber(this._userBandwidth);\n }\n\n clone(): IBandLikeScale {\n const bandScale = new BandScale(true)\n .domain(this._domain, true)\n .range(this._range, true)\n .round(this._round, true)\n .paddingInner(this._paddingInner, true)\n .paddingOuter(this._paddingOuter, true)\n .align(this._align, true)\n .bandwidth(this._userBandwidth ?? 'auto', true)\n .maxBandwidth(this._maxBandwidth ?? 'auto', true)\n .minBandwidth(this._maxBandwidth ?? 'auto');\n return bandScale;\n }\n}\n","import { ScaleEnum } from './type';\nimport { BandScale } from './band-scale';\nimport type { DiscreteScaleType, IBandLikeScale } from './interface';\n\nexport class PointScale extends BandScale implements IBandLikeScale {\n readonly type: DiscreteScaleType = ScaleEnum.Point;\n protected _padding = 0;\n\n constructor(slience?: boolean) {\n super(false);\n this.paddingInner(1, slience);\n this.padding = this.paddingOuter;\n this.paddingInner = undefined;\n this.paddingOuter = undefined;\n }\n}\n","import { isNil, isValidNumber, bisect } from '@visactor/vutils';\nimport type { DiscretizingScaleType, IBaseScale } from './interface';\nimport { ScaleEnum } from './type';\n\nexport class ThresholdScale implements IBaseScale {\n readonly type: DiscretizingScaleType = ScaleEnum.Threshold;\n\n protected _range: any[] = [0, 1];\n protected _domain: number[] = [0.5];\n protected n: number = 1;\n\n protected _unknown: any;\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n\n scale(x: any) {\n return !isNil(x) && isValidNumber(+x) ? this._range[bisect(this._domain, x, 0, this.n)] : this._unknown;\n }\n\n invertExtent(y: any) {\n const i = this._range.indexOf(y);\n return [this._domain[i - 1], this._domain[i]];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._range.slice();\n }\n this._range = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n\n return this;\n }\n\n clone(): ThresholdScale {\n return new ThresholdScale().domain(this._domain).range(this._range).unknown(this._unknown);\n }\n}\n","import { OrdinalScale } from '@visactor/vscale';\nimport type { ColorSchemeItem, ProgressiveDataScheme } from '../theme/color-scheme/interface';\nimport { computeActualDataScheme, isProgressiveDataColorScheme } from '../theme/color-scheme/util';\n\n/** vchart 色板 ordinal scale 类型 */\nexport class ColorOrdinalScale extends OrdinalScale {\n /** range(可能为渐进式色板) */\n protected _range: Array | ProgressiveDataScheme;\n\n range(value?: Array | ProgressiveDataScheme): this | any {\n if (!value) {\n return super.range();\n }\n this._range = value;\n this._resetRange();\n return this;\n }\n\n /** domain */\n domain(value?: any[]): this | any {\n if (!value) {\n return super.domain();\n }\n super.domain(value);\n this._resetRange();\n return this;\n }\n\n /** 重新计算色板 */\n protected _resetRange() {\n if (!isProgressiveDataColorScheme(this._range)) {\n super.range(this._range);\n return;\n }\n const range = computeActualDataScheme(this._range, this._domain);\n super.range(range);\n }\n}\n","/**\n * @description Scale 相关的工具函数\n */\nimport { isString, isValid } from '@visactor/vutils';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { BandScale, LinearScale, OrdinalScale, PointScale, ThresholdScale } from '@visactor/vscale';\nimport type { IVisual, IVisualSpecBase } from '../typings/visual';\nimport { ColorOrdinalScale } from '../scale/color-ordinal-scale';\n\nconst defaultScaleMap = {\n linear: LinearScale,\n band: BandScale,\n point: PointScale,\n ordinal: OrdinalScale,\n threshold: ThresholdScale,\n colorOrdinal: ColorOrdinalScale\n};\n\nexport function createScale(type: keyof typeof defaultScaleMap): IBaseScale | null {\n const scaleConstructor = defaultScaleMap[type];\n if (scaleConstructor) {\n return new scaleConstructor();\n }\n\n return null;\n}\n\nexport function createScaleWithSpec(\n spec: IVisual,\n context: {\n globalScale: IGlobalScale;\n seriesId: number;\n }\n): IBaseScale | null {\n if ('scale' in spec && spec.scale) {\n if (isString(spec.scale) && context?.globalScale) {\n return context.globalScale.registerMarkAttributeScale(spec, context.seriesId);\n }\n return spec.scale as unknown as IBaseScale;\n }\n const scale = createScale((spec as IVisualSpecBase).type);\n if (scale) {\n initScaleWithSpec(scale, spec as IVisualSpecBase);\n }\n return scale;\n}\n\n// 需要一个通用的从spec初始化scale的方法,避免在scale属性更新后需要维护多组逻辑\nfunction initScaleWithSpec(scale: IBaseScale, spec: IVisualSpecBase) {\n if (!scale || !spec) {\n return;\n }\n\n if (spec.domain) {\n scale.domain(spec.domain);\n }\n\n if (spec.range) {\n scale.range(spec.range);\n }\n\n if (spec.specified && (scale).specified) {\n (scale).specified(spec.specified);\n }\n}\n\n/**\n * value限制在scale range内\n * 对于指标轴: 限制在scale可视范围(scale.range)内, 通常发生在自定义domain的场景中, 防止图元绘制超出画布\n * 对于维度轴: 限制在scale数据范围(scale.wholeRange)内, 通常发生在缩略轴等组件扩大scale区域的场景中, 允许图元超出画布\n * 已知图表范围: 柱状图、条形进度图\n */\nexport function valueInScaleRange(v: number, s?: IBaseScale, useWholeRange?: boolean) {\n if (!s) {\n return v;\n }\n const scaleRange = s.range();\n const range =\n useWholeRange && (s as any)._calculateWholeRange ? (s as any)._calculateWholeRange(scaleRange) : s.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const max = Math.max(range[0], range[range.length - 1]);\n return Math.min(Math.max(min, v), max);\n}\n\nexport function isSpecValueWithScale(specValue: any) {\n return isValid(specValue?.field) && isValid(specValue?.scale);\n}\n","export const GradientType = ['linear', 'radial', 'conical'];\n\nexport const DEFAULT_LINEAR_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1\n};\n\nexport const DEFAULT_RADIAL_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1,\n r0: 0,\n r1: 1\n};\n\nexport const DEFAULT_CONICAL_GRADIENT_CONFIG = {\n x: 0.5,\n y: 0.5,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nexport const DEFAULT_GRADIENT_CONFIG = {\n linear: DEFAULT_LINEAR_GRADIENT_CONFIG,\n radial: DEFAULT_RADIAL_GRADIENT_CONFIG,\n conical: DEFAULT_CONICAL_GRADIENT_CONFIG\n};\n","import { MarkTypeEnum } from '../interface/type';\nimport { Direction } from '../../typings';\n\nexport const MultiDatumMark = [MarkTypeEnum.line, MarkTypeEnum.area, 'trail'];\n\nexport function isMultiDatumMark(type: MarkTypeEnum) {\n return MultiDatumMark.includes(type);\n}\n\nexport function curveTypeTransform(type: string, direction: string) {\n if (type === 'monotone') {\n return direction === Direction.horizontal ? 'monotoneY' : 'monotoneX';\n }\n return type;\n}\n\nexport function is3DMark(type: MarkTypeEnum) {\n return [MarkTypeEnum.arc3d, MarkTypeEnum.rect3d, MarkTypeEnum.pyramid3d].includes(type);\n}\n","import type { IElement, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\nimport { isContinuous } from '@visactor/vscale';\nimport { isArray, isObject, isValid, isBoolean } from '@visactor/vutils';\nimport { PREFIX } from '../../constant/base';\nimport type { MarkTypeEnum } from '../../mark/interface';\nimport { isMultiDatumMark } from '../../mark/utils/common';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport type { IStateManagerOption } from '../signal/interface';\nimport { StateManager } from '../signal/state-manager';\nimport type { CompilableMark } from './compilable-mark';\nimport type { IMarkStateManager, IStateInfo, StateValue } from './interface';\nimport { stateInDefaultEnum } from './util';\n\n/** mark state 管理器 */\nexport class MarkStateManager extends StateManager implements IMarkStateManager {\n /** 相关 mark */\n protected _mark: CompilableMark;\n\n // state info:state 种类信息\n private _stateInfoList: IStateInfo[] = [];\n getStateInfoList() {\n return this._stateInfoList;\n }\n\n constructor(option: IStateManagerOption, mark: CompilableMark) {\n super(option);\n this._mark = mark;\n }\n\n protected _getDefaultStateMap(): Record {\n return {\n markUpdateRank: 1\n };\n }\n\n // /** 触发状态更新 */\n // update() {\n // if (this._mark.hasState('stateUpdateRank')) {\n // const rank = this._mark.getState('stateUpdateRank');\n // this._mark.updateState({ stateUpdateRank: rank + 1 });\n // }\n // }\n\n /** 通过 state value 获取 state 信息 */\n getStateInfo(stateValue: StateValue) {\n return this._stateInfoList.find(s => s.stateValue === stateValue);\n }\n\n /** 添加 state info */\n addStateInfo(stateInfo: IStateInfo) {\n if (this.getStateInfo(stateInfo.stateValue)) {\n return;\n }\n stateInfo.level = stateInfo.level || 0;\n\n let needPush = true;\n // 根据 level 大小进行插入,level 最大的插在最后面\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const level = this._stateInfoList[i].level;\n if (level && level > stateInfo.level) {\n this._stateInfoList.splice(i, 0, stateInfo);\n needPush = false;\n break;\n }\n }\n\n if (needPush) {\n this._stateInfoList.push(stateInfo);\n }\n }\n\n /** 设置新状态时,将旧的筛选清除,避免同时存在2种筛选,第二种筛选会不触发 */\n private _clearStateBeforeSet(state: IStateInfo) {\n state.datums = null;\n state.items = null;\n state.fields = null;\n state.filter = null;\n }\n\n /** 更新 state info */\n changeStateInfo(stateInfo: Partial) {\n const s = this.getStateInfo(stateInfo.stateValue);\n if (!s) {\n this.addStateInfo(stateInfo as IStateInfo);\n } else {\n if (stateInfo.datums !== undefined) {\n this._clearStateBeforeSet(s);\n s.datums = stateInfo.datums;\n s.datumKeys = stateInfo.datumKeys;\n }\n if (stateInfo.items !== undefined) {\n this._clearStateBeforeSet(s);\n s.items = stateInfo.items;\n }\n if (stateInfo.fields !== undefined) {\n this._clearStateBeforeSet(s);\n // null\n if (stateInfo.fields === null) {\n s.fields = stateInfo.fields;\n } else {\n s.fields = s.fields || {};\n for (const key in stateInfo.fields) {\n const new_f = stateInfo.fields[key];\n s.fields[key] = s.fields[key] || ({} as any);\n const old_f = s.fields[key];\n isValid(new_f.domain) && (old_f.domain = new_f.domain);\n isValid(new_f.type) && (old_f.type = new_f.type);\n }\n }\n }\n if (stateInfo.filter) {\n this._clearStateBeforeSet(s);\n s.filter = stateInfo.filter;\n }\n }\n }\n\n /** 清除 state info */\n clearStateInfo(stateValues: StateValue[]) {\n stateValues.forEach(stateValue => {\n const state = this.getStateInfo(stateValue);\n if (state) {\n this.changeStateInfo({\n stateValue,\n datumKeys: null,\n datums: null,\n fields: null,\n items: null,\n filter: null,\n cache: {}\n });\n }\n });\n }\n\n checkOneState(\n renderNode: IElement,\n datum: Datum | Datum[],\n state: IStateInfo,\n isMultiMark?: boolean\n ): 'in' | 'out' | 'skip' {\n isMultiMark = isBoolean(isMultiDatumMark)\n ? isMultiMark\n : !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n let inState = false;\n let stateChecked = false;\n // 如果有 state.datum 那么判断是否与datum的所有值相等\n if (isValid(state.datums) && state.datums.length > 0) {\n inState = this.checkDatumState(state, datum, isMultiMark);\n stateChecked = true;\n }\n // 依靠 scenegraph item 引用判断是否在状态中\n else if (state.items) {\n // TODO:确认这个逻辑里为什么有mark比较\n // if (state.marks && !state.marks.includes(renderNode.mark)) {\n // continue;\n // }\n inState = this.checkItemsState(state, renderNode) ?? false;\n stateChecked = true;\n }\n // 每个状态依靠 fields 来判定数据是否在当前状态中\n else if (state.fields) {\n inState = this.checkFieldsState(state, datum, renderNode, isMultiMark);\n stateChecked = true;\n } else if (!inState && state.filter) {\n const options = {\n mark: this._mark,\n renderNode,\n type: renderNode.mark.markType\n };\n inState = state.filter(datum, options);\n stateChecked = true;\n }\n\n // 如果 state 所有字段都为空,此时不应当进入反状态\n if (!stateChecked) {\n return 'skip';\n }\n return inState ? 'in' : 'out';\n }\n\n // TODO:renderNode\n checkState(renderNode: IElement, datum: Datum | Datum[]): StateValue[] {\n // 由于存在多个 stateManager,需要额外返回 state 的优先级\n // 交互状态不要删除,并且交互状态优先级统一为10\n const result: [StateValue, number][] = renderNode\n .getStates()\n .filter(s => stateInDefaultEnum(s))\n .map(s => {\n return [s, 10];\n });\n const isMultiMark = !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n // 优先级从高到低依次检索状态。\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const state = this._stateInfoList[i];\n const inOut = this.checkOneState(renderNode, datum, state, isMultiMark);\n if (inOut === 'skip') {\n continue;\n }\n if (inOut === 'in') {\n result.push([state.stateValue, state.level]);\n }\n }\n // 这里直接返回字符串数组即可\n return result.map(res => res[0]);\n }\n\n checkDatumState(state: IStateInfo, datum: Datum | Datum[], isMultiMark: boolean): boolean {\n let inState = false;\n const datum_v = isMultiMark ? datum[0] : datum;\n if (isArray(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums[0]).filter(k => !k.startsWith(PREFIX));\n inState = state.datums.some(d => {\n // 如果 多数据图元情况下 datums 设置为 单一数据,状态判定失败\n // 这里要考虑 state.datum 本身是一条数据,不含item的情况能与单数据图元统一\n return isMultiMark && isArray(d?.items)\n ? keys.every(k => d?.items?.[0]?.[k] === datum_v?.[k])\n : keys.every(k => d?.[k] === datum_v?.[k]);\n });\n } else if (isObject(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums).filter(k => !k.startsWith(PREFIX));\n inState = keys.every(k => {\n return isMultiMark ? (state.datums as any).items?.[0][k] === datum_v[k] : state.datums?.[k] === datum_v[k];\n });\n } else {\n inState = datum === state.datums;\n }\n return inState;\n }\n\n checkItemsState(state: IStateInfo, item: any): boolean | undefined {\n return state.items?.includes(item);\n }\n\n checkFieldsState(state: IStateInfo, datum: Datum | Datum[], item: any, isMultiMark: boolean): boolean {\n let inState = true;\n // each fields\n for (const key in state.fields) {\n const field = state.fields[key];\n const type = field.type;\n const domain = field.domain;\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n if (isContinuous(type) && domain.length > 1) {\n // 连续\n if (this.checkLinearFieldState(domain, key, datum, item, isMultiMark)) {\n inState = false;\n break;\n } else {\n inState = true;\n }\n } else if (domain.some((d: any) => d === datum_v)) {\n // 离散\n inState = true;\n } else {\n inState = false;\n break;\n }\n }\n return inState;\n }\n\n checkLinearFieldState(domain: StringOrNumber[], key: string, datum: any, item: any, isMultiMark: boolean) {\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n return datum_v < domain[0] || datum_v > domain[domain.length - 1];\n }\n\n updateLayoutState(noRender?: boolean): void {\n (this._stateMap.markUpdateRank as number)++;\n return this.updateState({ markUpdateRank: this._stateMap.markUpdateRank }, noRender);\n }\n\n compileState(product: IVGrammarMark, stateSort?: (stateA: string, stateB: string) => number) {\n (product as any).state(\n {\n callback: (datum: any, element: any) => {\n return this.checkState(element, datum);\n }\n },\n stateSort\n );\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { IData as IVGrammarData } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isNil } from '../../util/type';\nimport type { ICompilableData } from './interface';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\n\nexport class CompilableData extends GrammarItem implements ICompilableData {\n readonly grammarType = GrammarType.data;\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n /** 原始DataView */\n protected _data: Maybe = null;\n getDataView() {\n return this._data;\n }\n setDataView(d?: DataView) {\n this._data = d;\n }\n getLatestData() {\n return this._data?.latestData;\n }\n\n constructor(option: GrammarItemInitOption, dataView?: DataView) {\n super(option);\n this._data = dataView;\n }\n\n release() {\n super.release();\n this._data = null;\n }\n\n /** 更新数据并默认重新渲染 */\n updateData(noRender?: boolean) {\n const product = this.getProduct();\n const data = this.getLatestData();\n if (product && data) {\n product.values(data);\n if (!noRender) {\n // 将实际的 dataflow 推迟到下一次异步操作,以避免同步的数据更新内容被忽略\n return this.getCompiler().renderNextTick();\n }\n }\n return;\n }\n\n protected _compileProduct() {\n const data = this.getLatestData();\n if (isNil(data)) {\n return;\n }\n if (isNil(this.getProduct())) {\n this._initProduct(data);\n } else {\n this._product.values(data);\n }\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(data: any[]) {\n const view = this.getVGrammarView();\n if (!view || !data) {\n return;\n }\n\n const id = this.getProductId();\n this._product = view?.data?.(data)?.id(id);\n this._compiledProductId = id;\n }\n\n generateProductId(): string {\n return `${this.getDataView()?.name}`;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getDataById?.(id);\n }\n}\n","import { CompilableData } from '../data/compilable-data';\nimport { PREFIX } from '../../constant/base';\nimport { isNil, isValid } from '@visactor/vutils';\nimport type { ICompilableMark, IMarkData, IMarkDataInitOption } from './interface';\n\nexport class MarkData extends CompilableData implements IMarkData {\n protected _mark: ICompilableMark;\n\n constructor(option: IMarkDataInitOption) {\n super(option);\n this._mark = option.mark;\n }\n\n setCompiledProductId(name: string) {\n this._compiledProductId = name;\n }\n\n generateProductId(): string {\n const name = super.generateProductId();\n if (isValid(name)) {\n return name;\n }\n return `${PREFIX}_markData_${this._mark.id}`;\n }\n\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n\n this._initProduct(data);\n }\n}\n","import type {\n IData,\n IElement,\n IGroupMark,\n IMark,\n IMarkConfig,\n MarkAnimationSpec,\n MarkFunctionCallback,\n MarkFunctionType,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport { isNil, isValid } from '@visactor/vutils';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { ISeries } from '../../series/interface';\nimport { isStateAttrChangeable } from './util';\nimport { MarkStateManager } from './mark-state-manager';\nimport type {\n ICompilableMark,\n IMarkDataInitOption,\n ICompilableMarkOption,\n StateValueType,\n IMarkCompileOption,\n IAttributeOpt,\n IMarkData\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from './interface';\nimport { MarkData } from './mark-data';\nimport { GrammarType } from '../interface/compilable-item';\nimport type { IComponent } from '../../component/interface';\nimport type { IEvent } from '../../event/interface';\nimport { Event } from '../../event/event';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from '../../animation/interface';\n\n/** 可编译的 mark 对象,这个基类只存放编译相关的逻辑 */\nexport abstract class CompilableMark extends GrammarItem implements ICompilableMark {\n readonly grammarType = GrammarType.mark;\n /** 类型 */\n readonly type: MarkType = undefined as unknown as MarkType;\n\n /** name */\n readonly name: string = 'mark';\n\n /** key field */\n readonly key: ICompilableMark['key'];\n\n protected _markConfig: IMarkConfig = {\n zIndex: LayoutZIndex.Mark,\n /** morph动画关联关系配置 */\n morph: false\n };\n\n getMarkConfig(): IMarkConfig {\n return this._markConfig;\n }\n setMarkConfig(config: IMarkConfig) {\n Object.keys(config).forEach(key => {\n (this._markConfig as any)[key] = (config as any)[key];\n });\n }\n\n /** 可见性 */\n protected _visible: boolean = true;\n getVisible() {\n return this._visible;\n }\n setVisible(visible: boolean) {\n this._visible = visible;\n }\n\n /**\n * 用户设置的 id\n */\n protected _userId: StringOrNumber;\n getUserId() {\n return this._userId;\n }\n setUserId(userId: StringOrNumber) {\n if (isValid(userId)) {\n this._userId = userId;\n }\n }\n\n /** parent model */\n readonly model: IModel;\n\n /** 数据(可以没有) */\n protected _data: IMarkData;\n getDataView(): DataView | undefined {\n return this._data?.getDataView();\n }\n setDataView(d?: DataView, productId?: string) {\n if (isNil(this._data)) {\n this.initMarkData({\n ...this._option,\n mark: this\n });\n }\n if (isValid(productId)) {\n this._data.setCompiledProductId(productId);\n }\n this._data.setDataView(d);\n }\n getData() {\n return this._data;\n }\n setData(d?: IMarkData) {\n this._data = d;\n }\n\n /** 默认的stateStyle */\n stateStyle: IMarkStateStyle = {};\n\n /** 状态管理器 */\n state: MarkStateManager;\n\n protected _unCompileChannel: { [key in string]: boolean } = {};\n\n hasState(state: string) {\n return state in this.state.getStateMap();\n }\n getState(state: string) {\n return this.state.getStateMap()[state];\n }\n\n protected _event: IEvent;\n\n protected _animationConfig: Partial;\n getAnimationConfig() {\n return this._animationConfig;\n }\n setAnimationConfig(config: Partial) {\n this._animationConfig = config;\n }\n\n /** 布局标记 */\n private _skipBeforeLayouted = false;\n\n setSkipBeforeLayouted(skip: boolean) {\n this._skipBeforeLayouted = skip;\n }\n getSkipBeforeLayouted(): boolean {\n return this._skipBeforeLayouted;\n }\n\n protected _groupKey?: string;\n getGroupKey() {\n return this._groupKey;\n }\n setGroupKey(groupKey: string) {\n this._groupKey = groupKey;\n }\n\n protected _stateSort?: (stateA: string, stateB: string) => number;\n setStateSortCallback(stateSort: (stateA: string, stateB: string) => number) {\n this._stateSort = stateSort;\n }\n\n protected declare _option: ICompilableMarkOption;\n\n constructor(option: ICompilableMarkOption, name: string, model: IModel) {\n super(option);\n this.name = name;\n this.model = model;\n this.key = option.key;\n this.state = new MarkStateManager(\n {\n ...option,\n stateKeyToSignalName: this.stateKeyToSignalName.bind(this)\n },\n this\n );\n this._event = new Event(model.getOption().eventDispatcher, model.getOption().mode);\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n // transform目前在形状词云中使用,但直接用的 vgrammar 接口 (this._wordMark as ICompilableMark).getProduct().transform(wordCloudTransforms);\n // 暂时没有用到这里的setTransform()\n protected _transform: TransformSpec[] | Nil;\n setTransform(transform: TransformSpec[] | Nil) {\n this._transform = transform;\n }\n\n /** 初始化 mark data */\n protected initMarkData(option: IMarkDataInitOption) {\n this._data = new MarkData(option);\n }\n\n protected stateKeyToSignalName(key: string) {\n return `${PREFIX}_${this.type}_${this.id}_${key}`;\n }\n\n getAttribute(key: any, datum: any, state: StateValueType, opt?: IAttributeOpt) {\n // do nothing\n }\n\n protected _compileProduct(option?: IMarkCompileOption) {\n const product = this.getProduct();\n // 处理 visible 为 false 的情况\n if (!this.getVisible()) {\n if (isValid(product)) {\n this.removeProduct();\n }\n return;\n } else if (isValid(product)) {\n return; // 每个mark只执行一次编译\n }\n\n const compiler = this.getCompiler();\n if (!compiler.isInited) {\n return;\n }\n this._initProduct(option?.group);\n if (isNil(this._product)) {\n return;\n }\n\n this.compileSignal();\n this.compileData();\n this.compileState();\n this.compileEncode();\n this.compileAnimation();\n this.compileContext(option?.context);\n this.compileTransform();\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view.mark(this.type as GrammarMarkType, group ?? view.rootMark).id(id);\n if (this.name && this._product) {\n this._product.name(this.name);\n }\n this._compiledProductId = id;\n }\n\n generateProductId() {\n if (this._userId) {\n return `${this._userId}`;\n }\n return `${this.name}_${this.id}`;\n }\n\n compileData() {\n if (isNil(this._data)) {\n return;\n }\n this._data.compile();\n\n // 绑定数据\n const dataProduct = this._data.getProduct();\n if (isValid(this._product) && isValid(dataProduct)) {\n this._product.join(dataProduct as IData, this.key, undefined, this.getGroupKey());\n }\n }\n\n updateStaticEncode() {\n if (!this._product) {\n return;\n }\n const { enterStyles, updateStyles } = this._separateStyle();\n\n this._product.encodeState('group', enterStyles, true);\n\n this._product.encode(updateStyles, true);\n }\n\n protected _separateStyle() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n\n const enterStyles: Record> = this._option.noSeparateStyle ? null : {};\n const updateStyles: Record> = {};\n Object.keys(normalStyle).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this.getGroupKey())) {\n updateStyles[key] = {\n callback: this.compileCommonAttributeCallback(key, 'normal'),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n } else {\n enterStyles[key] = this.compileCommonAttributeCallback(key, 'normal');\n }\n });\n return { enterStyles, updateStyles };\n }\n\n compileEncode() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n const { enterStyles, updateStyles } = this._separateStyle();\n this._product.encode(updateStyles, true);\n this._product.encodeState('group', enterStyles, true);\n\n Object.keys(temp).forEach(state => {\n const styles: Record> = {};\n Object.keys(temp[state]).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n styles[key] = {\n callback: this.compileCommonAttributeCallback(key, state),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n });\n this._product.encodeState(state, styles, true);\n });\n\n // 在布局完成前不进行encode\n if (this._skipBeforeLayouted) {\n this._product.layout({\n skipBeforeLayouted: this._skipBeforeLayouted\n });\n }\n }\n\n compileState() {\n this.state.compileState(this._product, this._stateSort);\n }\n\n compileAnimation() {\n if (this._animationConfig) {\n let stateSignal: any;\n if (this.type === 'component') {\n // 组件有自己的动画状态\n stateSignal = (this.model as IComponent).animate?.getAnimationStateSignalName();\n } else {\n const region = (this.model as ISeries).getRegion?.();\n stateSignal = region?.animate?.getAnimationStateSignalName();\n }\n this._product.animation(this._animationConfig);\n this._product.animationState({\n callback: (datum: Datum, element: IElement, parameters: Record) => {\n return parameters[stateSignal]?.callback(datum, element);\n },\n dependency: stateSignal\n });\n if (this._animationConfig.normal) {\n if (!this._animationConfig.appear) {\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, () => {\n this.runAnimationByState(AnimationStateEnum.normal);\n });\n } else {\n this._event.on(VGRAMMAR_HOOK_EVENT.ANIMATION_END, ({ event }) => {\n if (event.mark === this.getProduct() && event.animationState === AnimationStateEnum.appear) {\n this.runAnimationByState(AnimationStateEnum.normal);\n }\n });\n }\n }\n }\n }\n\n compileContext(extraContext?: any) {\n const config: IMarkConfig = {\n ...this._markConfig,\n context: {\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId,\n ...extraContext\n }\n };\n this._product.configure(config);\n }\n\n compileSignal() {\n this.state.compile();\n }\n\n protected _computeAttribute(key: string, state: StateValueType) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return undefined as any;\n };\n }\n\n // TODO: 1. opt内容待定,确实需要再来补充(之前是scale.bindScales/bindSignals,从context.params中可以获取到)\n // TODO: 2. stateSourceItem,是否根据attr区分,存在默认写死的情况,例如\"hover\"/\"normal\";\n protected compileCommonAttributeCallback(key: string, state: string): MarkFunctionCallback {\n const attributeFunctor = this._computeAttribute(key, state);\n // remove state in opt\n const opt: IAttributeOpt = { mark: null, parent: null, element: null };\n return (datum: Datum, element: IElement) => {\n opt.mark = element.mark;\n opt.parent = element.mark.group;\n opt.element = element;\n return attributeFunctor(datum, opt);\n };\n }\n\n protected compileTransform() {\n if (this._transform?.length) {\n this.getProduct().transform(this._transform);\n }\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getMarkById(id);\n }\n\n updateState(newState: Record, noRender?: boolean) {\n return this.state.updateState(newState, noRender);\n }\n\n updateLayoutState(noRender?: boolean, recursion?: boolean): void {\n if (recursion && this.getMarks().length > 0) {\n this.getMarks().forEach(m => m.state.updateLayoutState(true));\n }\n return this.state.updateLayoutState(noRender);\n }\n\n updateMarkState(key: string): void {\n if (!this._product) {\n return;\n }\n const stateInfo = this.state.getStateInfo(key);\n this._product.elements.forEach(e => {\n if (this.state.checkOneState(e, e.getDatum(), stateInfo) === 'in') {\n e.addState(key);\n } else {\n e.removeState(key);\n }\n });\n }\n\n getMarks(): ICompilableMark[] {\n return [];\n }\n\n runAnimationByState(state?: string) {\n return this.getProduct()?.animate?.runAnimationByState(state);\n }\n\n stopAnimationByState(state?: string) {\n return this.getProduct()?.animate?.stopAnimationByState(state);\n }\n\n pauseAnimationByState(state?: string) {\n return this.getProduct()?.animate?.pauseAnimationByState(state);\n }\n\n resumeAnimationByState(state?: string) {\n return this.getProduct()?.animate?.resumeAnimationByState(state);\n }\n\n getProductElements() {\n const product = this.getProduct();\n if (product) {\n return product.elements;\n }\n return undefined;\n }\n\n release() {\n super.release();\n this.state.release();\n }\n}\n","import type { IStateInfo, IAttributeOpt, IModelMarkAttributeContext } from '../../compile/mark/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type {\n Datum,\n IMarkSpec,\n ConvertToMarkStyleSpec,\n GradientStop,\n IVisual,\n IVisualScale,\n IVisualSpecStyle,\n ICommonSpec,\n FunctionType,\n ValueType\n} from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Color } from '../../util/color';\nimport { createScaleWithSpec } from '../../util/scale';\nimport type {\n IMarkRaw,\n IMarkStateStyle,\n IMarkStyle,\n IMark,\n IMarkOption,\n StyleConvert,\n VisualScaleType,\n MarkInputStyle\n} from '../interface';\nimport { GradientType, DEFAULT_GRADIENT_CONFIG } from '../../constant/gradient';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { isValidScaleType } from '@visactor/vscale';\nimport { computeActualDataScheme, getDataScheme } from '../../theme/color-scheme/util';\nimport type { ISeries } from '../../series/interface';\nimport { CompilableMark } from '../../compile/mark/compilable-mark';\nimport type { StateValueType } from '../../compile/mark';\nimport { degreeToRadian, isBoolean, isFunction, isNil, isValid } from '@visactor/vutils';\nimport { curveTypeTransform } from '../utils';\n\nexport type ExChannelCall = (\n key: string | number | symbol,\n datum: Datum,\n states: StateValueType,\n opt: unknown,\n baseValue: unknown\n) => unknown;\n\nexport class BaseMark extends CompilableMark implements IMarkRaw {\n declare stateStyle: IMarkStateStyle;\n\n protected declare _option: IMarkOption;\n\n protected _attributeContext: IModelMarkAttributeContext;\n\n /** by _unCompileChannel, some channel need add default channel to make sure update available */\n _extensionChannel: {\n [key: string | number | symbol]: string[];\n } = {};\n /** same as _extensionChannel. when compute channel, add extension channel effect */\n _computeExChannel: {\n [key: string | number | symbol]: ExChannelCall;\n } = {};\n\n constructor(name: string, option: IMarkOption) {\n super(option, name, option.model);\n // 这里的上下文多数情况下与 mark 是什么是没有关系的,与mark的使用者,也就是series,component有的逻辑有关。\n this._attributeContext = option.attributeContext;\n option.map?.set(this.id, this as unknown as IMark);\n }\n\n created(): void {\n this._initStyle();\n }\n\n /**\n * 外部调用,根据 spec 初始化 style(如果由 IModel 派生类调用,请使用 IModel.initMarkStyleWithSpec)\n * @param spec\n * @param key\n * @returns\n */\n initStyleWithSpec(spec: IMarkSpec, key?: string) {\n if (!spec) {\n return;\n }\n\n if (isValid(spec.id)) {\n this._userId = spec.id;\n }\n\n // interactive\n if (isBoolean(spec.interactive)) {\n this._markConfig.interactive = spec.interactive;\n }\n // zIndex\n if (isValid(spec.zIndex)) {\n this._markConfig.zIndex = spec.zIndex;\n }\n // visible\n if (isBoolean(spec.visible)) {\n this.setVisible(spec.visible);\n }\n // style\n this._initSpecStyle(spec, this.stateStyle, key);\n }\n\n protected _transformStyleValue(\n styleConverter: StyleConvert,\n transform: (value: ValueType) => ValueType\n ): StyleConvert {\n if ((styleConverter as VisualScaleType).scale) {\n const scale = (styleConverter as VisualScaleType).scale;\n const range = scale.range();\n scale.range(range.map(transform));\n return styleConverter as StyleConvert;\n } else if (typeof styleConverter === 'function') {\n return ((...args) => {\n return transform((styleConverter as FunctionType)(...args) as ValueType);\n }) as StyleConvert;\n }\n return transform(styleConverter as ValueType);\n }\n\n convertAngleToRadian(styleConverter: StyleConvert) {\n // 用户传入的角度配置,需要做一层转换\n return this._transformStyleValue(styleConverter, degreeToRadian);\n }\n\n isUserLevel(level: number) {\n return [\n AttributeLevel.User_Mark,\n AttributeLevel.User_Series,\n AttributeLevel.User_Chart,\n AttributeLevel.User_SeriesStyle\n ].includes(level);\n }\n\n /**\n * 由外部series调用,设置markStyle的接口(如果由 IModel 派生类调用,请使用 IModel.setMarkStyle)\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach((attr: string) => {\n let attrStyle = style[attr] as MarkInputStyle;\n if (isNil(attrStyle)) {\n return;\n }\n\n attrStyle = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel, stateStyle);\n\n this.setAttribute(attr as any, attrStyle, state, level, stateStyle);\n });\n }\n\n getStyle(key: string, state: StateValueType = 'normal'): any {\n return this.stateStyle[state][key]?.style;\n }\n\n /** 过滤单个 attribute */\n protected _filterAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType,\n level: number,\n isUserLevel: boolean,\n stateStyle = this.stateStyle\n ): StyleConvert {\n let newStyle = this._styleConvert(style);\n if (isUserLevel) {\n switch (attr) {\n case 'angle':\n newStyle = this.convertAngleToRadian(newStyle);\n break;\n case 'innerPadding':\n case 'outerPadding':\n // VRender 的 padding 定义基于 centent-box 盒模型,默认正方向是向外扩,与 VChart 不一致。这里将 padding 符号取反\n newStyle = this._transformStyleValue(newStyle, (value: number) => -value);\n break;\n case 'curveType':\n newStyle = this._transformStyleValue(newStyle, (value: string) =>\n curveTypeTransform(value, (this._option.model as any).direction)\n );\n break;\n }\n }\n return newStyle;\n }\n\n /**\n * TODO: 没有外部调用\n * 设置mark样式所参考的图元\n */\n setReferer(mark: IMarkRaw, styleKey?: U, state?: StateValueType, stateStyle = this.stateStyle) {\n if (!mark) {\n return;\n }\n if (styleKey && state) {\n const style = stateStyle[state] ?? { [styleKey]: {} };\n stateStyle[state][styleKey] = {\n ...(style[styleKey] as unknown as any),\n ...{ referer: mark }\n };\n return;\n }\n\n Object.entries(stateStyle).forEach(([state, style]) => {\n Object.entries(style).forEach(([styleKey, style]) => {\n stateStyle[state][styleKey].referer = mark;\n });\n });\n }\n\n setPostProcess(key: U, postProcessFunc: any, state: StateValueType = 'normal') {\n if (this.stateStyle[state]?.[key]) {\n this.stateStyle[state][key].postProcess = postProcessFunc;\n }\n }\n\n getAttribute(key: U, datum: Datum, state: StateValueType = 'normal', opt?: IAttributeOpt) {\n return this._computeAttribute(key, state)(datum, opt);\n }\n\n setAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ) {\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n if (stateStyle[state][attr] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][attr] = {\n level,\n style,\n referer: undefined\n };\n }\n const attrLevel = stateStyle[state][attr]?.level;\n if (isValid(attrLevel) && attrLevel <= level) {\n mergeSpec(stateStyle[state][attr], { style, level });\n }\n\n // some attr has extension channel in VChart to make some effect\n if (state !== 'normal') {\n if (attr in this._extensionChannel) {\n this._extensionChannel[attr].forEach(key => {\n if (stateStyle[state][key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][key as keyof T] = stateStyle.normal[key];\n }\n });\n }\n }\n }\n\n /**\n * 与 vgrammar 默认值一致的样式可以不设置默认值或设置为undefined, 减少encode属性\n */\n protected _getDefaultStyle() {\n return {\n visible: true,\n // mark的层级应该在mark层 不在encode属性层\n // zIndex: LayoutZIndex.Mark,\n x: 0,\n y: 0\n } as IMarkStyle;\n }\n\n // /**\n // * 获取该 mark 不支持的图形属性,由子类覆写\n // * @returns\n // */\n // protected getIgnoreAttributes(): string[] {\n // return [];\n // }\n\n protected _styleConvert(style?: MarkInputStyle): StyleConvert | undefined {\n if (!style) {\n return style as undefined;\n }\n // visual spec 转换为 scale 类型的mark style\n if (isValidScaleType((style as IVisualSpecStyle).type) || (style as IVisualScale).scale) {\n // const _style = style as IVisual;\n const scale = createScaleWithSpec(style as IVisual, {\n globalScale: this._option.globalScale,\n seriesId: this._option.seriesId\n });\n if (scale) {\n return {\n scale,\n field: (style as IVisual).field,\n changeDomain: (style as IVisualScale).changeDomain\n };\n }\n }\n return style as StyleConvert;\n }\n\n protected _computeAttribute(key: U, state: StateValueType) {\n let stateStyle = this.stateStyle[state]?.[key];\n if (!stateStyle) {\n stateStyle = this.stateStyle.normal[key];\n }\n const baseValueFunctor = this._computeStateAttribute(stateStyle, key, state);\n const hasPostProcess = isFunction(stateStyle?.postProcess);\n const hasExCompute = key in this._computeExChannel;\n\n if (hasPostProcess && hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n let baseValue = baseValueFunctor(datum, opt);\n\n baseValue = stateStyle.postProcess(baseValue, datum, this._attributeContext, opt, this.getDataView());\n\n return exCompute(key, datum, state, opt, baseValue);\n };\n } else if (hasPostProcess) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.postProcess(\n baseValueFunctor(datum, opt),\n datum,\n this._attributeContext,\n opt,\n this.getDataView()\n );\n };\n } else if (hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n return exCompute(key, datum, state, opt, baseValueFunctor(datum, opt));\n };\n }\n return baseValueFunctor;\n }\n\n protected _computeStateAttribute(stateStyle: any, key: U, state: StateValueType) {\n if (!stateStyle) {\n return (datum: Datum, opt: IAttributeOpt) => undefined as any;\n }\n if (stateStyle.referer) {\n return stateStyle.referer._computeAttribute(key, state);\n }\n if (!stateStyle.style) {\n return (datum: Datum, opt: IAttributeOpt) => stateStyle.style;\n }\n\n if (typeof stateStyle.style === 'function') {\n return (datum: Datum, opt: IAttributeOpt) =>\n stateStyle.style(datum, this._attributeContext, opt, this.getDataView());\n }\n\n if (GradientType.includes(stateStyle.style.gradient)) {\n // 渐变色处理,支持各个属性回调\n return this._computeGradientAttr(stateStyle.style);\n }\n\n if (['outerBorder', 'innerBorder'].includes(key as string)) {\n // 内外描边处理,支持各个属性回调\n return this._computeBorderAttr(stateStyle.style);\n }\n\n if (isValidScaleType(stateStyle.style.scale?.type)) {\n return (datum: Datum, opt: IAttributeOpt) => {\n let data = datum;\n if (this.model.modelType === 'series' && (this.model as ISeries).getMarkData) {\n data = (this.model as ISeries).getMarkData(datum);\n }\n\n return stateStyle.style.scale.scale(data[stateStyle.style.field]);\n };\n }\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.style;\n };\n }\n\n private _initStyle(): void {\n const defaultStyle = this._getDefaultStyle();\n this.setStyle(defaultStyle, 'normal', 0);\n }\n\n private _initSpecStyle(spec: IMarkSpec, stateStyle: IMarkStateStyle, key?: string) {\n // style\n if (spec.style) {\n this.setStyle(spec.style, 'normal', AttributeLevel.User_Mark, stateStyle);\n }\n const state = spec.state;\n if (state) {\n Object.keys(state).forEach(key => {\n const stateTemp = state[key];\n if ('style' in stateTemp) {\n const style = stateTemp.style;\n let stateInfo: IStateInfo = { stateValue: key };\n if ('level' in stateTemp) {\n stateInfo.level = stateTemp.level as number;\n }\n if ('filter' in stateTemp) {\n if (isFunction(stateTemp.filter)) {\n stateInfo = {\n filter: stateTemp.filter as (datum: any, options: Record) => boolean,\n ...stateInfo\n };\n } else {\n stateInfo = { ...stateTemp.filter, ...stateInfo };\n }\n }\n this.state.addStateInfo(stateInfo);\n this.setStyle(style as ConvertToMarkStyleSpec, key, AttributeLevel.User_Mark, stateStyle);\n } else {\n this.setStyle(stateTemp, key, AttributeLevel.User_Mark, stateStyle);\n }\n });\n }\n }\n\n private _computeGradientAttr(gradientStyle: any) {\n const { gradient, scale, field, ...rest } = gradientStyle;\n\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n }\n\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n // 默认配置处理\n const mergedStyle = {\n ...DEFAULT_GRADIENT_CONFIG[gradient],\n ...rest\n };\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n const markData = this.getDataView();\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (key === 'stops') {\n computeStyle.stops = value.map((stop: GradientStop) => {\n const { opacity, color, offset } = stop;\n let computeColor = color ?? colorScale?.scale(data[colorField]);\n if (isFunction(color)) {\n computeColor = color(data, this._attributeContext, opt, markData);\n }\n\n if (isValid(opacity)) {\n computeColor = Color.SetOpacity(computeColor as string, opacity);\n }\n\n return {\n offset: isFunction(offset) ? offset(data, this._attributeContext, opt, markData) : offset,\n color: computeColor || themeColor[0]\n };\n });\n } else if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, markData);\n } else {\n computeStyle[key] = value;\n }\n });\n\n computeStyle.gradient = gradient;\n\n return computeStyle;\n };\n }\n\n private _computeBorderAttr(borderStyle: any) {\n const { scale, field, ...mergedStyle } = borderStyle;\n\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, this.getDataView());\n } else {\n computeStyle[key] = value;\n }\n });\n if (!('stroke' in computeStyle)) {\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n computeStyle.stroke = colorScale?.scale(data[colorField]) || themeColor[0];\n }\n } else if (GradientType.includes(mergedStyle.stroke?.gradient)) {\n computeStyle.stroke = this._computeGradientAttr(mergedStyle.stroke)(data, opt);\n }\n return computeStyle;\n };\n }\n}\n","/**\n * @description 组件基类\n */\nimport type { IGroupGraphicAttribute, ISetAttributeContext } from '@visactor/vrender-core';\nimport { Group, CustomEvent } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { merge, isFunction, isPlainObject, isNil } from '@visactor/vutils';\nimport type { ComponentOptions } from '../interface';\n\nconst GROUP_ATTRIBUTES = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'visible',\n 'clip',\n 'pickable',\n 'childrenPickable',\n 'zIndex',\n 'cursor'\n];\n\nexport abstract class AbstractComponent extends Group {\n declare attribute: Partial;\n\n protected mode?: '2d' | '3d';\n\n protected skipDefault?: boolean;\n\n protected _skipRenderAttributes: string[] = GROUP_ATTRIBUTES;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(attributes);\n\n if (options?.mode) {\n this.mode = options.mode;\n\n this.setMode(options.mode);\n }\n\n if (options?.skipDefault) {\n this.skipDefault = true;\n }\n // 组件需要精准 bounds,所以将这个 strokeBoundsBuffer 设置为 0,否则会影响包围盒的获取\n this.setTheme({\n common: {\n strokeBoundsBuffer: 0\n }\n });\n this.attribute = attributes;\n // 这里调用渲染和事件绑定逻辑\n this.onSetStage(() => {\n this.render();\n this.bindEvents();\n });\n }\n\n /**\n * @override\n * 更新单个属性值\n * @param key\n * @param value\n * @param forceUpdateTag\n */\n setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined, context?: ISetAttributeContext): void {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (params) {\n return this._setAttributes(params as Partial, forceUpdateTag);\n }\n\n // overwrite when previous or next attribute is function\n if (\n isPlainObject(this.attribute[key]) &&\n isPlainObject(value) &&\n !isFunction(this.attribute[key]) &&\n !isFunction(value)\n ) {\n merge(this.attribute[key], value);\n } else {\n this.attribute[key] = value;\n }\n\n // HACK: 待优化\n if (!this._skipRenderAttributes.includes(key as string)) {\n this.render();\n }\n\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key as string))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n setAttributes(params: Partial, forceUpdateTag?: boolean | undefined, context?: ISetAttributeContext): void {\n params =\n (this.onBeforeAttributeUpdate &&\n (this.onBeforeAttributeUpdate(params, this.attribute, null, context) as Partial)) ||\n params;\n return this._setAttributes(params, forceUpdateTag);\n }\n\n // @ts-ignore\n _setAttributes(params: Partial, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof T)[];\n this._mergeAttributes(params, keys);\n\n // HACK: 待优化\n if (!keys.every(key => this._skipRenderAttributes.includes(key as string))) {\n this.render();\n }\n\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys as string[]))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n protected _mergeAttributes(params: Partial, keys?: (keyof T)[]) {\n if (isNil(keys)) {\n keys = Object.keys(params) as (keyof T)[];\n }\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as keyof Partial;\n // overwrite when previous or next attribute is function\n if (isPlainObject(this.attribute[key]) && !isFunction(this.attribute[key]) && !isFunction(params[key])) {\n merge(this.attribute[key], params[key]);\n } else {\n this.attribute[key] = params[key];\n }\n }\n }\n\n protected bindEvents() {\n // please override\n }\n\n protected abstract render(): void;\n\n // 图形元素 id\n protected _getNodeId(id: string) {\n return `${this.id ?? this._uid}-${this.name}-${id}`;\n }\n\n // 用于 emit 组件自己的事件\n protected _dispatchEvent(eventName: string, details?: Dict) {\n // 封装事件\n const changeEvent = new CustomEvent(eventName, details);\n // FIXME: 需要在 vrender 的事件系统支持\n // @ts-ignore\n changeEvent.manager = this.stage?.eventSystem.manager;\n\n this.dispatchEvent(changeEvent);\n }\n}\n","import type { IColor } from '@visactor/vrender-core';\nimport { Color, hexToRgb } from '@visactor/vutils';\n\nconst defaultAlternativeColors: string[] = ['#ffffff', '#000000'];\n\n/**\n * 标签智能反色\n * @param foregroundColorOrigin\n * @param backgroundColorOrogin\n * @returns\n */\nexport function labelSmartInvert(\n foregroundColorOrigin: IColor | undefined,\n backgroundColorOrogin: IColor | undefined,\n textType?: string | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n): IColor | undefined {\n if (typeof foregroundColorOrigin !== 'string' || typeof backgroundColorOrogin !== 'string') {\n return foregroundColorOrigin;\n }\n const foregroundColor = new Color(foregroundColorOrigin as string).toHex();\n const backgroundColor = new Color(backgroundColorOrogin as string).toHex();\n if (!contrastAccessibilityChecker(foregroundColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return improveContrastReverse(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n }\n return foregroundColor;\n}\n\n/**\n * 提升对比度\n * 对于对比度不足阈值的情况,推荐备选颜色色板中的颜色提升对比\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction improveContrastReverse(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n) {\n const alternativeColorPalletes: string[] = [];\n if (alternativeColors) {\n if (alternativeColors instanceof Array) {\n alternativeColorPalletes.push(...alternativeColors);\n } else {\n alternativeColorPalletes.push(alternativeColors);\n }\n }\n alternativeColorPalletes.push(...defaultAlternativeColors);\n for (const alternativeColor of alternativeColorPalletes) {\n if (foregroundColor === alternativeColor) {\n continue;\n }\n if (contrastAccessibilityChecker(alternativeColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return alternativeColor;\n }\n }\n return undefined;\n}\n\n/**\n * 颜色对比度可行性检查 https://webaim.org/articles/contrast/\n * - WCAG 2.0 AA 级要求普通文本的对比度至少为 4.5:1,大文本的对比度至少为 3:1。(目前按照此标准)\n * - WCAG 2.1 要求图形和用户界面组件(例如表单输入边框)的对比度至少为 3:1。\n * - WCAG AAA 级要求普通文本的对比度至少为 7:1,大文本的对比度至少为 4.5:1。\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nexport function contrastAccessibilityChecker(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n mode?: string\n): boolean {\n if (mode === 'lightness') {\n const backgroundColorLightness = Color.getColorBrightness(new Color(backgroundColor as string));\n const foregroundColorLightness = Color.getColorBrightness(new Color(foregroundColor as string));\n if (foregroundColorLightness < 0.5) {\n // 文字颜色为'#ffffff'\n if (backgroundColorLightness >= 0.5) {\n return true;\n }\n return false;\n }\n // 文字颜色为‘#000000'\n if (backgroundColorLightness < 0.5) {\n return true;\n }\n return false;\n }\n //Contrast ratios can range from 1 to 21\n if (contrastRatiosThreshold) {\n if (contrastRatios(foregroundColor, backgroundColor) > contrastRatiosThreshold) {\n return true;\n }\n return false;\n } else if (textType === 'largeText') {\n if (contrastRatios(foregroundColor, backgroundColor) > 3) {\n return true;\n }\n return false;\n }\n if (contrastRatios(foregroundColor, backgroundColor) > 4.5) {\n return true;\n }\n return false;\n}\n\n/**\n * 计算颜色对比度 https://webaim.org/articles/contrast/\n * Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).\n * (L1 + 0.05) / (L2 + 0.05), whereby:\n * L1 is the relative luminance of the lighter of the colors, and\n * L2 is the relative luminance of the darker of the colors.\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction contrastRatios(foregroundColor: IColor | undefined, backgroundColor: IColor | undefined): number {\n const foregroundColorLuminance = getColorLuminance(foregroundColor as string);\n const backgroundColorLuminance = getColorLuminance(backgroundColor as string);\n const L1 = foregroundColorLuminance > backgroundColorLuminance ? foregroundColorLuminance : backgroundColorLuminance;\n const L2 = foregroundColorLuminance > backgroundColorLuminance ? backgroundColorLuminance : foregroundColorLuminance;\n const contrastRatios = (L1 + 0.05) / (L2 + 0.05);\n return contrastRatios;\n}\n\n/**\n * 计算相对亮度 https://webaim.org/articles/contrast/\n * the relative brightness of any point in a colorspace, normalized to 0 for darkest black and 1 for lightest white\n * Note 1: For the sRGB colorspace, the relative luminance of a color is defined as\n * L = 0.2126 * R + 0.7152 * G + 0.0722 * B where R, G and B are defined as:\n * if RsRGB <= 0.03928 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4\n * if GsRGB <= 0.03928 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4\n * if BsRGB <= 0.03928 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4\n * and RsRGB, GsRGB, and BsRGB are defined as:\n * RsRGB = R8bit/255\n * GsRGB = G8bit/255\n * BsRGB = B8bit/255\n * @param color\n * @returns\n */\nfunction getColorLuminance(color: string): number {\n const rgb8bit = hexToRgb(color);\n const RsRGB = rgb8bit[0] / 255;\n const GsRGB = rgb8bit[1] / 255;\n const BsRGB = rgb8bit[2] / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n}\n\nexport function smartInvertStrategy(\n fillStrategy: string,\n baseColor: IColor,\n invertColor: IColor,\n similarColor: IColor\n) {\n let result;\n switch (fillStrategy) {\n case 'base':\n result = baseColor;\n break;\n case 'invertBase':\n result = invertColor;\n break;\n case 'similarBase':\n result = similarColor;\n default:\n break;\n }\n return result;\n}\n","import type {\n IRichText,\n IRichTextAttribute,\n IText,\n ITextGraphicAttribute,\n TextAlignType\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { getTextBounds, graphicCreator } from '@visactor/vrender-core';\nimport type { ITextMeasureOption } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { TextMeasure, isObject, isValid } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE } from '../constant';\nimport type { HTMLTextContent, ReactTextContent, TextContent } from '../core/type';\n\nexport const initTextMeasure = (\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean,\n defaultFontParams?: Partial\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: DEFAULT_TEXT_FONT_SIZE,\n ...defaultFontParams\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n};\n\n// FIXME: 和上一个方法统一,使用 TextMeasure 类\nexport function measureTextSize(\n text: string | number | string[] | number[],\n textSpec: Partial,\n defaultTextTheme: Partial = {}\n) {\n if (!text) {\n return { width: 0, height: 0 };\n }\n const bounds = getTextBounds({\n text,\n fontFamily: textSpec.fontFamily || defaultTextTheme.fontFamily || DEFAULT_TEXT_FONT_FAMILY,\n fontSize: textSpec.fontSize || defaultTextTheme.fontSize || 12,\n fontWeight: textSpec.fontWeight || defaultTextTheme.fontWeight,\n textAlign: textSpec.textAlign || 'center',\n textBaseline: textSpec.textBaseline,\n ellipsis: !!textSpec.ellipsis,\n maxLineWidth: textSpec.maxLineWidth || Infinity,\n lineHeight: textSpec.fontSize || defaultTextTheme.fontSize || 12\n });\n\n return { width: bounds.width(), height: bounds.height() };\n}\n\nexport function isRichText(attributes: TextContent, typeKey = 'type') {\n return getTextType(attributes, typeKey) === 'rich';\n}\n\nexport function getTextType(attributes: TextContent, typeKey = 'type') {\n if (isObject(attributes.text) && 'type' in attributes.text) {\n return attributes.text.type ?? 'text';\n }\n\n if (typeKey in attributes) {\n return attributes[typeKey] ?? 'text';\n }\n\n return 'text';\n}\n\nexport function richTextAttributeTransform(attributes: ITextGraphicAttribute & IRichTextAttribute & TextContent) {\n if (isValid(attributes.maxLineWidth)) {\n attributes.maxWidth = attributes.maxLineWidth;\n delete attributes.maxLineWidth;\n }\n\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n attributes.textConfig = (attributes.text as unknown as any).text || attributes.text;\n return attributes;\n}\n\nexport function htmlAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as HTMLTextContent;\n const { text: html } = text;\n\n attributes.html = html;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 html,则不绘制原始文字\n return attributes;\n}\n\nexport function reactAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as ReactTextContent;\n const { text: react } = text;\n\n attributes.react = react;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 react,则不绘制原始文字\n\n return attributes;\n}\n\nexport function createTextGraphicByType(textAttributes: ITextGraphicAttribute, typeKey = 'type') {\n const textType = getTextType(textAttributes, typeKey);\n if (textType === 'rich') {\n return graphicCreator.richtext(richTextAttributeTransform(textAttributes as IRichTextAttribute));\n }\n\n if (textType === 'html') {\n textAttributes = htmlAttributeTransform(textAttributes);\n } else if (textType === 'react') {\n textAttributes = reactAttributeTransform(textAttributes);\n }\n\n return graphicCreator.text(textAttributes as ITextGraphicAttribute);\n}\n\nexport function alignTextInLine(\n layoutAlign: 'left' | 'right',\n graphic: IText | IRichText,\n textAlign: TextAlignType,\n pos: number,\n textWidth: number\n) {\n if (layoutAlign === 'right') {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos - textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos - textWidth);\n }\n } else {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos + textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos + textWidth);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos);\n }\n }\n}\n","/**\n * @description 存放工具函数\n */\nimport type { IGraphicAttribute, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { isNil } from '@visactor/vutils';\nimport type { Point } from '../core/type';\nimport type { IMarkLineLabelPosition, IMarkPointItemPosition } from '../marker';\n\nexport function traverseGroup(group: IGraphic, cb: (node: IGraphic) => boolean | void) {\n group.forEachChildren(node => {\n const stopped = cb(node as IGraphic);\n if ((node as IGroup).isContainer && !stopped) {\n traverseGroup(node as IGraphic, cb);\n }\n });\n}\n\nexport const isVisible = (obj?: Partial): boolean => {\n if (isNil(obj)) {\n return false;\n }\n return obj.visible !== false;\n};\n\nexport function getMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.getChildren() as IGraphic[];\n}\n\nexport function getNoneGroupMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.findAll(node => node.type !== 'group', true) as unknown as IGraphic[];\n}\n\nexport function removeRepeatPoint(points: Point[]) {\n const result = [points[0]];\n for (let i = 1; i < points.length; i++) {\n if (points[i].x !== points[i - 1].x || points[i].y !== points[i - 1].y) {\n result.push(points[i]);\n }\n }\n return result;\n}\n\nexport function isPostiveXAxis(angle: number) {\n return (angle >= 0 && angle < Math.PI / 2) || (angle > (Math.PI * 3) / 2 && angle <= Math.PI * 2);\n}\n\nexport function fuzzyEqualNumber(a: number, b: number, delta: number): boolean {\n return Math.abs(a - b) < delta;\n}\n\nexport function getTextAlignAttrOfVerticalDir(\n autoRotate: boolean,\n lineEndAngle: number,\n itemPosition: IMarkLineLabelPosition | keyof typeof IMarkPointItemPosition\n) {\n if (autoRotate) {\n return {\n textAlign: 'right',\n textBaseline: 'middle'\n };\n }\n return {\n textAlign:\n // left: 90度方向, 即笛卡尔坐标系y轴负方向 + top 或 270度方向, 即笛卡尔坐标系y轴正方向 + bottom\n (lineEndAngle < Math.PI && itemPosition.toLocaleLowerCase().includes('top')) ||\n (lineEndAngle > Math.PI && itemPosition.toLocaleLowerCase().includes('bottom'))\n ? 'left'\n : // right: 90度方向, 即笛卡尔坐标系y轴负方向 + bottom 或 270度方向, 即笛卡尔坐标系y轴正方向 + top\n (lineEndAngle < Math.PI && itemPosition.toLocaleLowerCase().includes('bottom')) ||\n (lineEndAngle > Math.PI && itemPosition.toLocaleLowerCase().includes('top'))\n ? 'right'\n : 'center',\n textBaseline:\n // bottom: 90度方向, 即笛卡尔坐标系y轴负方向 + inside 或 270度方向, 即笛卡尔坐标系y轴正方向 + outside\n (lineEndAngle < Math.PI && itemPosition.includes('inside')) ||\n (lineEndAngle > Math.PI && !itemPosition.includes('inside'))\n ? 'bottom'\n : 'top'\n };\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst DIV = 5; // bit shift from x, y index to bit vector array index\nconst MOD = 31; // bit mask for index lookup within a bit vector\nconst SIZE = 32; // individual bit vector size\nconst RIGHT0 = new Uint32Array(SIZE + 1); // left-anchored bit vectors, full -> 0\nconst RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = (RIGHT1[i - 1] << 1) | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nexport function bitmap(w: number, h: number) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index: number, mask: number) {\n array[index] |= mask;\n }\n\n function _clear(index: number, mask: number) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n\n get: (x: number, y: number) => {\n const index = y * w + x;\n return array[index >>> DIV] & (1 << (index & MOD));\n },\n\n set: (x: number, y: number) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n\n clear: (x: number, y: number) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n /**\n * 给定范围内是否发生碰撞\n * @param 范围\n * @returns boolean\n */\n getRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return true;\n }\n let r = y2;\n let start;\n let end;\n let indexStart;\n let indexEnd;\n for (; r >= y1; --r) {\n start = r * w + x1;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) {\n return true;\n }\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) {\n return true;\n }\n }\n }\n }\n return false;\n },\n\n setRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return;\n }\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _set(i, 0xffffffff);\n }\n }\n }\n },\n\n clearRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _clear(i, 0);\n }\n }\n }\n },\n\n outOfBounds: ({ x1, y1, x2, y2 }: IBoundsLike) => x1 < 0 || y1 < 0 || y2 >= h || x2 >= w,\n toImageData: (ctx: CanvasRenderingContext2D) => {\n const imageData = ctx.createImageData(w, h);\n const data = imageData.data;\n for (let y = 0; y < h; ++y) {\n for (let x = 0; x < w; ++x) {\n const index = y * w + x;\n const offset = 4 * index;\n const occupied = array[index >>> DIV] & (1 << (index & MOD));\n data[offset + 0] = occupied * 0xff;\n data[offset + 1] = occupied * 0xff;\n data[offset + 2] = occupied * 0xff;\n data[offset + 3] = 0x1f; // alpha\n }\n }\n return imageData;\n }\n };\n}\n\nexport type Bitmap = ReturnType;\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { clamp as clampRange } from '@visactor/vutils';\nimport { bitmap } from './bitmap';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function bitmapTool(\n width: number,\n height: number,\n padding: { top?: number; left?: number; right?: number; bottom?: number } = { top: 0, left: 0, right: 0, bottom: 0 }\n) {\n const { top = 0, left = 0, right = 0, bottom = 0 } = padding;\n const ratio = Math.max(1, Math.sqrt((width * height) / 1e6));\n const w = ~~((width + left + right + ratio) / ratio);\n const h = ~~((height + top + bottom + ratio) / ratio);\n const scale = (_: number) => ~~(_ / ratio);\n\n scale.bitmap = () => bitmap(w, h);\n scale.x = (_: number) => ~~((_ + left) / ratio);\n scale.y = (_: number) => ~~((_ + top) / ratio);\n\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n\n return scale;\n}\n\nexport function clampRangeByBitmap($: BitmapTool, range: IBoundsLike) {\n const { x1, x2, y1, y2 } = range;\n const _x1 = clampRange(x1, 0, $.width);\n const _x2 = clampRange(x2, 0, $.width);\n const _y1 = clampRange(y1, 0, $.height);\n const _y2 = clampRange(y2, 0, $.height);\n return {\n x1: $.x(_x1),\n x2: $.x(_x2),\n y1: $.y(_y1),\n y2: $.y(_y2)\n };\n}\n\nexport function boundToRange($: BitmapTool, bound: IBoundsLike, clamp: boolean = false) {\n if (clamp) {\n return clampRangeByBitmap($, bound);\n }\n\n return {\n x1: $.x(bound.x1),\n x2: $.x(bound.x2),\n y1: $.y(bound.y1),\n y2: $.y(bound.y2)\n };\n}\n\nexport type BitmapTool = ReturnType;\n","import type { IText, Text } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValid } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../../core/type';\nimport type { LabelBase } from '../base';\nimport type { BaseLabelAttrs, OverlapAttrs, Strategy } from '../type';\nimport type { Bitmap } from './bitmap';\nimport type { BitmapTool } from './scaler';\nimport { boundToRange, clampRangeByBitmap } from './scaler';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function canPlace($: BitmapTool, bitmap: Bitmap, bound: IBoundsLike, checkBound = true, pad = 0) {\n let range = bound;\n if (pad > 0) {\n range = {\n x1: bound.x1 - pad,\n x2: bound.x2 + pad,\n y1: bound.y1 - pad,\n y2: bound.y2 + pad\n };\n }\n range = boundToRange($, range);\n\n const outOfBounds = bitmap.outOfBounds(range);\n\n if (checkBound && outOfBounds) {\n return false;\n }\n\n // 超出边界,需要将判断区域调整到可视区域内\n if (outOfBounds) {\n range = clampRangeByBitmap($, range);\n }\n\n return !bitmap.getRange(range);\n}\n\n/**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\nexport function canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n}\n\nexport function placeToCandidates(\n $: BitmapTool,\n bitmap: Bitmap,\n text: Text,\n candidates: PointLocationCfg[] = [],\n clampForce = true,\n pad = 0,\n changePosition = false\n): PointLocationCfg | false {\n const validCandidates = candidates.filter(candidate => isValid(candidate));\n for (let i = 0; i < validCandidates.length; i++) {\n let measureText;\n if (changePosition) {\n measureText = text;\n } else {\n measureText = text.clone();\n }\n measureText.setAttributes(validCandidates[i]);\n\n if (canPlace($, bitmap, measureText.AABBBounds, clampForce, pad)) {\n bitmap.setRange(boundToRange($, measureText.AABBBounds, true));\n return validCandidates[i];\n }\n }\n return false;\n}\n\nexport function place(\n $: BitmapTool,\n bitmap: Bitmap,\n s: Strategy,\n attrs: T,\n text: Text,\n bounds: IBoundsLike,\n labeling?: LabelBase['labeling']\n): PointLocationCfg | false {\n const clampForce = (attrs.overlap as OverlapAttrs)?.clampForce;\n const overlapPadding = (attrs.overlap as OverlapAttrs)?.overlapPadding;\n if (s.type === 'bound' || s.type === 'position') {\n if (isFunction(labeling)) {\n const userPosition = isFunction(s.position) ? s.position(text.attribute) : s.position;\n const positions = (userPosition || defaultLabelPosition(attrs.type)) as string[];\n const candidates = positions.map(p => labeling(text.AABBBounds, bounds, p, attrs.offset) as PointLocationCfg);\n const shouldClone = s.restorePosition === false;\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding, shouldClone);\n }\n return false;\n }\n\n if (s.type === 'moveY') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dy => {\n return { x: text.attribute.x as number, y: (text.attribute.y as number) + dy };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n\n if (s.type === 'moveX') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dx => {\n return { x: (text.attribute.x as number) + dx, y: text.attribute.y as number };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n return false;\n}\n\nexport const DefaultPositions = [\n 'top',\n 'bottom',\n 'right',\n 'left',\n 'top-right',\n 'bottom-right',\n 'top-left',\n 'bottom-left'\n];\nexport const DefaultRectPositions = ['top', 'inside-top', 'inside'];\n\nexport function defaultLabelPosition(type?: string) {\n switch (type) {\n case 'rect':\n return DefaultRectPositions;\n default:\n return DefaultPositions;\n }\n}\n\nexport function clampText(\n text: IText,\n width: number,\n height: number,\n padding: { top?: number; left?: number; right?: number; bottom?: number } = {}\n) {\n const { x1, x2, y1, y2 } = text.AABBBounds;\n const { top = 0, left = 0, right = 0, bottom = 0 } = padding;\n\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n\n const minY = Math.min(y1, y2);\n const maxY = Math.max(y1, y2);\n\n const minXWithPadding = 0 - left;\n const maxXWithPadding = width + right;\n\n const minYWithPadding = 0 - top;\n const maxYWithPadding = height + bottom;\n\n let dx = 0;\n let dy = 0;\n\n // x 方向\n if (minX < minXWithPadding) {\n dx = -minX;\n } else if (maxX > maxXWithPadding) {\n dx = maxXWithPadding - maxX;\n }\n\n // y 方向\n if (minY < minYWithPadding) {\n dy = -minY;\n } else if (maxY > maxYWithPadding) {\n dy = maxYWithPadding - maxY;\n }\n\n return { dx, dy };\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport {\n clamp,\n getDecimalPlaces,\n isArray,\n isNumber,\n isValidNumber,\n pi,\n pi2,\n Point,\n PointService\n} from '@visactor/vutils';\nimport { application } from '../application';\nimport { AttributeUpdateType } from '../common/enums';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport type {\n EasingType,\n IArcGraphicAttribute,\n IArea,\n IAreaCacheItem,\n ICubicBezierCurve,\n ICurve,\n ICustomPath2D,\n IGraphic,\n IGroup,\n ILine,\n ILineAttribute,\n ILinearGradient,\n IRect,\n IRectAttribute,\n IRectGraphicAttribute,\n ISegment,\n IShadowRoot\n} from '../interface';\nimport { ACustomAnimate } from './animate';\nimport { Easing } from './easing';\nimport { pointInterpolation } from '../common/utils';\nimport { divideCubic } from '../common/segment/curve/cubic-bezier';\n\nexport class IncreaseCount extends ACustomAnimate<{ text: string | number }> {\n declare valid: boolean;\n\n private fromNumber: number;\n private toNumber: number;\n private decimalLength: number;\n\n constructor(\n from: { text: string | number },\n to: { text: string | number },\n duration: number,\n easing: EasingType,\n params?: { fixed?: boolean }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record | void {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromNumber = isNumber(this.from?.text) ? this.from?.text : Number.parseFloat(this.from?.text);\n this.toNumber = isNumber(this.to?.text) ? this.to?.text : Number.parseFloat(this.to?.text);\n if (!Number.isFinite(this.toNumber)) {\n this.fromNumber = 0;\n }\n if (!Number.isFinite(this.toNumber)) {\n this.valid = false;\n }\n if (this.valid !== false) {\n this.decimalLength =\n this.params?.fixed ?? Math.max(getDecimalPlaces(this.fromNumber), getDecimalPlaces(this.toNumber));\n }\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n if (end) {\n out.text = this.toNumber;\n } else {\n out.text = (this.fromNumber + (this.toNumber - this.fromNumber) * ratio).toFixed(this.decimalLength);\n }\n }\n}\n\nenum Direction {\n LEFT_TO_RIGHT = 0,\n RIGHT_TO_LEFT = 1,\n TOP_TO_BOTTOM = 2,\n BOTTOM_TO_TOP = 3,\n STROKE = 4\n}\nexport class FadeInPlus extends ACustomAnimate {\n declare direction: number;\n declare toFill: string;\n declare toStroke: string;\n declare fillGradient: ILinearGradient;\n declare strokeGradient: ILinearGradient;\n declare fill: boolean;\n declare stroke: boolean;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { direction?: number; fill?: boolean; stroke?: boolean }\n ) {\n super(from, to, duration, easing, params);\n const { direction = Direction.LEFT_TO_RIGHT, fill = true, stroke = true } = params || {};\n this.direction = direction;\n this.fill = fill;\n this.stroke = stroke;\n this.fillGradient = {\n gradient: 'linear',\n stops: []\n };\n this.strokeGradient = {\n gradient: 'linear',\n stops: []\n };\n }\n\n getEndProps(): Record {\n return {\n fill: this.toFill,\n stroke: this.toStroke\n };\n }\n\n onBind(): void {\n // this.to = parseFloat(this.target.getAnimatePropByName('text'));\n this.toFill = this.target.getComputedAttribute('fill');\n this.toStroke = this.target.getComputedAttribute('stroke');\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.toFill) {\n return;\n }\n if (!this.toStroke) {\n return;\n }\n switch (this.direction) {\n case Direction.RIGHT_TO_LEFT:\n this.rightToLeft(end, ratio, out);\n break;\n case Direction.TOP_TO_BOTTOM:\n this.topToBottom(end, ratio, out);\n break;\n case Direction.BOTTOM_TO_TOP:\n this.bottomToTop(end, ratio, out);\n break;\n case Direction.STROKE:\n this.strokePath(end, ratio, out);\n break;\n default:\n this.leftToRight(end, ratio, out);\n break;\n }\n }\n\n leftToRight(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const toStrokeColor = this.toStroke;\n this.strokeGradient.x0 = 0;\n this.strokeGradient.y0 = 0;\n this.strokeGradient.x1 = 1;\n this.strokeGradient.y1 = 0;\n this.strokeGradient.stops = [\n { offset: 0, color: toStrokeColor },\n { offset: ratio, color: toStrokeColor },\n { offset: Math.min(1, ratio * 6), color: 'transparent' }\n ];\n out.stroke = this.strokeGradient;\n // const dashLen = 300;\n // const offset = ratio * dashLen;\n // out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n\n strokePath(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const dashLen = 300;\n const offset = ratio * dashLen;\n out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n rightToLeft(end: boolean, ratio: number, out: Record) {\n return;\n }\n topToBottom(end: boolean, ratio: number, out: Record) {\n return;\n }\n bottomToTop(end: boolean, ratio: number, out: Record) {\n return;\n }\n}\n\nexport class InputText extends ACustomAnimate<{ text: string }> {\n declare valid: boolean;\n declare target: IGraphic;\n\n private fromText: string = '';\n private toText: string | string[] = '';\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromText = this.from?.text ?? '';\n this.toText = this.to?.text || '';\n if (!this.toText || (isArray(this.toText) && this.toText.length === 0)) {\n this.valid = false;\n }\n if (isArray(this.toText)) {\n this.toText = this.toText.map(item => (item || '').toString());\n }\n // else {\n // this.toText = this.toText.toString();\n // // const root = this.target.attachShadow();\n // // const line = application.graphicService.creator.line({\n // // x: 0,\n // // y: 0,\n // // points: [\n // // { x: 0, y: 0 },\n // // { x: 0, y: this.target.getComputedAttribute('fontSize') }\n // // ],\n // // stroke: 'black',\n // // lineWidth: 1\n // // });\n // // root.add(line);\n // }\n }\n\n onEnd(): void {\n this.target.detachShadow();\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n // update text\n const fromCount = this.fromText.length;\n const toTextIsArray = isArray(this.toText);\n const toCount = toTextIsArray\n ? (this.toText as unknown as string[]).reduce((c, t) => c + (t || '').length, 0)\n : this.toText.length;\n const count = Math.ceil(fromCount + (toCount - fromCount) * ratio);\n\n if (toTextIsArray) {\n out.text = [];\n let len = 0;\n (this.toText as unknown as string[]).forEach(t => {\n if (len + t.length > count) {\n out.text.push(t.substr(0, count - len));\n len = count;\n } else {\n out.text.push(t);\n len += t.length;\n }\n });\n } else {\n out.text = (this.toText as string).substr(0, count);\n }\n // console.log(out.text)\n\n // update line position\n // const line = this.target.shadowRoot?.at(0) as IGraphic;\n // const endX = (this.target as any).clipedWidth + 2;\n // line.setAttribute('x', endX);\n }\n}\n\nexport class StreamLight extends ACustomAnimate {\n declare valid: boolean;\n declare target: IGraphic;\n\n declare rect: IRect;\n declare line: ILine;\n declare area: IArea;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { attribute?: Partial; streamLength?: number; isHorizontal?: boolean }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return {};\n }\n\n onStart(): void {\n if (!this.target) {\n return;\n }\n if (this.target.type === 'rect') {\n this.onStartRect();\n } else if (this.target.type === 'line') {\n this.onStartLineOrArea('line');\n } else if (this.target.type === 'area') {\n this.onStartLineOrArea('area');\n }\n }\n\n onStartLineOrArea(type: 'line' | 'area') {\n const root = this.target.attachShadow();\n const line = application.graphicService.creator[type]({\n ...this.params?.attribute\n });\n this[type] = line;\n line.pathProxy = new CustomPath2D();\n root.add(line);\n }\n\n onStartRect(): void {\n const root = this.target.attachShadow();\n\n const isHorizontal = this.params?.isHorizontal ?? true;\n const sizeAttr = isHorizontal ? 'height' : 'width';\n const otherSizeAttr = isHorizontal ? 'width' : 'height';\n const size = this.target.AABBBounds[sizeAttr]();\n const y = isHorizontal ? 0 : this.target.AABBBounds.y1;\n\n const rect = application.graphicService.creator.rect({\n [sizeAttr]: size,\n fill: '#bcdeff',\n shadowBlur: 30,\n shadowColor: '#bcdeff',\n ...this.params?.attribute,\n x: 0,\n y,\n [otherSizeAttr]: 0\n });\n this.rect = rect;\n root.add(rect);\n }\n\n onBind(): void {\n return;\n }\n\n onEnd(): void {\n this.target.detachShadow();\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.rect) {\n return this.onUpdateRect(end, ratio, out);\n } else if (this.line || this.area) {\n return this.onUpdateLineOrArea(end, ratio, out);\n }\n }\n\n protected onUpdateRect(end: boolean, ratio: number, out: Record): void {\n const isHorizontal = this.params?.isHorizontal ?? true;\n const parentAttr = (this.target as any).attribute;\n if (isHorizontal) {\n const parentWidth = parentAttr.width ?? Math.abs(parentAttr.x1 - parentAttr.x) ?? 250;\n const streamLength = this.params?.streamLength ?? parentWidth;\n const maxLength = this.params?.attribute?.width ?? 60;\n // 起点,rect x右端点 对齐 parent左端点\n // 如果parent.x1 < parent.x, 需要把rect属性移到parent x1的位置上, 因为初始 rect.x = parent.x\n const startX = -maxLength;\n // 插值\n const currentX = startX + (streamLength - startX) * ratio;\n // 位置限定 > 0\n const x = Math.max(currentX, 0);\n // 宽度计算\n const w = Math.min(Math.min(currentX + maxLength, maxLength), streamLength - currentX);\n // 如果 rect右端点 超出 parent右端点, 宽度动态调整\n const width = w + x > parentWidth ? Math.max(parentWidth - x, 0) : w;\n this.rect.setAttributes(\n {\n x,\n width,\n dx: Math.min(parentAttr.x1 - parentAttr.x, 0)\n } as any,\n false,\n {\n type: AttributeUpdateType.ANIMATE_PLAY,\n animationState: {\n ratio,\n end\n }\n }\n );\n } else {\n const parentHeight = parentAttr.height ?? Math.abs(parentAttr.y1 - parentAttr.y) ?? 250;\n const streamLength = this.params?.streamLength ?? parentHeight;\n const maxLength = this.params?.attribute?.height ?? 60;\n // 起点,y上端点 对齐 parent下端点\n const startY = parentHeight;\n // 插值\n const currentY = startY - (streamLength + maxLength) * ratio;\n // 位置限定 < parentHeight\n let y = Math.min(currentY, parentHeight);\n // 高度最小值\n const h = Math.min(parentHeight - currentY, maxLength);\n // 如果 rect上端点=y 超出 parent上端点 = 0, 则高度不断变小\n let height;\n if (y <= 0) {\n // 必须先得到高度再将y置为0, 顺序很重要\n height = Math.max(y + h, 0);\n y = 0;\n } else {\n height = h;\n }\n this.rect.setAttributes(\n {\n y,\n height,\n dy: Math.min(parentAttr.y1 - parentAttr.y, 0)\n } as any,\n false,\n {\n type: AttributeUpdateType.ANIMATE_PLAY,\n animationState: {\n ratio,\n end\n }\n }\n );\n }\n }\n\n protected onUpdateLineOrArea(end: boolean, ratio: number, out: Record) {\n const target = this.line || this.area;\n if (!target) {\n return;\n }\n const customPath = target.pathProxy as ICustomPath2D;\n const targetLine = this.target as ILine | IArea;\n if (targetLine.cache || targetLine.cacheArea) {\n this._onUpdateLineOrAreaWithCache(customPath, targetLine, end, ratio, out);\n } else {\n this._onUpdateLineWithoutCache(customPath, targetLine, end, ratio, out);\n }\n const targetAttrs = targetLine.attribute;\n target.setAttributes({\n stroke: targetAttrs.stroke,\n ...target.attribute\n });\n target.addUpdateBoundTag();\n }\n\n // 针对有cache的linear\n protected _onUpdateLineOrAreaWithCache(\n customPath: ICustomPath2D,\n g: ILine | IArea,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n customPath.clear();\n if (g.type === 'line') {\n let cache = g.cache;\n if (!Array.isArray(cache)) {\n cache = [cache];\n }\n const totalLen = cache.reduce((l: any, c: any) => l + c.getLength(), 0);\n const curves: ICurve[] = [];\n cache.forEach((c: any) => {\n c.curves.forEach((ci: any) => curves.push(ci));\n });\n return this._updateCurves(customPath, curves, totalLen, ratio);\n } else if (g.type === 'area' && g.cacheArea?.top?.curves) {\n const cache = g.cacheArea as IAreaCacheItem;\n const totalLen = cache.top.curves.reduce((a, b) => a + b.getLength(), 0);\n return this._updateCurves(customPath, cache.top.curves, totalLen, ratio);\n }\n }\n\n protected _updateCurves(customPath: ICustomPath2D, curves: ICurve[], totalLen: number, ratio: number) {\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n let lastLen = 0;\n let start = false;\n for (let i = 0; i < curves.length; i++) {\n if (curves[i].defined !== false) {\n const curveItem = curves[i];\n const len = curveItem.getLength();\n const startPercent = 1 - (lastLen + len - startLen) / len;\n let endPercent = 1 - (lastLen + len - endLen) / len;\n let curveForStart: ICubicBezierCurve;\n if (lastLen < startLen && lastLen + len > startLen) {\n start = true;\n if (curveItem.p2 && curveItem.p3) {\n const [_, curve2] = divideCubic(curveItem as ICubicBezierCurve, startPercent);\n customPath.moveTo(curve2.p0.x, curve2.p0.y);\n curveForStart = curve2;\n // console.log(curve2.p0.x, curve2.p0.y);\n } else {\n const p = curveItem.getPointAt(startPercent);\n customPath.moveTo(p.x, p.y);\n }\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n if (curveItem.p2 && curveItem.p3) {\n if (curveForStart) {\n endPercent = (endLen - startLen) / curveForStart.getLength();\n }\n const [curve1] = divideCubic(curveForStart || (curveItem as ICubicBezierCurve), endPercent);\n customPath.bezierCurveTo(curve1.p1.x, curve1.p1.y, curve1.p2.x, curve1.p2.y, curve1.p3.x, curve1.p3.y);\n } else {\n const p = curveItem.getPointAt(endPercent);\n customPath.lineTo(p.x, p.y);\n }\n break;\n } else if (start) {\n if (curveItem.p2 && curveItem.p3) {\n const curve = curveForStart || curveItem;\n customPath.bezierCurveTo(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n } else {\n customPath.lineTo(curveItem.p1.x, curveItem.p1.y);\n }\n }\n lastLen += len;\n }\n }\n }\n\n // 只针对最简单的linear\n protected _onUpdateLineWithoutCache(\n customPath: ICustomPath2D,\n line: ILine,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n const { points, curveType } = line.attribute;\n if (!points || points.length < 2 || curveType !== 'linear') {\n return;\n }\n let totalLen = 0;\n for (let i = 1; i < points.length; i++) {\n totalLen += PointService.distancePP(points[i], points[i - 1]);\n }\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n const nextPoints = [];\n let lastLen = 0;\n for (let i = 1; i < points.length; i++) {\n const len = PointService.distancePP(points[i], points[i - 1]);\n if (lastLen < startLen && lastLen + len > startLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - startLen) / len));\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - endLen) / len));\n break;\n } else if (nextPoints.length) {\n nextPoints.push(points[i]);\n }\n lastLen += len;\n }\n\n if (!nextPoints.length || nextPoints.length < 2) {\n return;\n }\n customPath.clear();\n customPath.moveTo(nextPoints[0].x, nextPoints[0].y);\n for (let i = 1; i < nextPoints.length; i++) {\n customPath.lineTo(nextPoints[i].x, nextPoints[i].y);\n }\n }\n}\n\nexport class Meteor extends ACustomAnimate {\n declare size: number;\n declare target: IGraphic;\n declare root: IShadowRoot;\n declare posList: IPoint[];\n\n get lastPos(): IPoint {\n return this.posList[this.posList.length - 1];\n }\n\n constructor(size: number, duration: number, easing: EasingType, params?: any) {\n super(null, null, duration, easing, params);\n this.size = size;\n this.posList = [];\n }\n\n onBind(): void {\n const root = this.target.attachShadow();\n this.root = root;\n for (let i = 0; i < this.size; i++) {\n const g = this.target.clone();\n const scale = Math.min(((this.size - i) / this.size) * 3, 1);\n const opacity = Math.min(0.2 + 0.7 / this.size);\n g.setAttributes({ x: 0, y: 0, dx: 0, dy: 0, scaleX: scale, scaleY: scale, opacity }, false, {\n type: AttributeUpdateType.ANIMATE_BIND\n });\n root.add(g);\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (end) {\n this.target.detachShadow();\n this.posList.length = 0;\n return;\n }\n\n const x = this.target.getComputedAttribute('x');\n const y = this.target.getComputedAttribute('y');\n\n const nextPos = new Point(x, y);\n if (!this.posList.length) {\n this.posList.push(nextPos);\n return;\n }\n\n this.target.shadowRoot.forEachChildren((g: IGraphic, i) => {\n const pos = this.posList[Math.max(this.posList.length - i - 1, 0)];\n g.setAttributes(\n {\n x: pos.x - x,\n y: pos.y - y\n },\n false\n );\n });\n\n this.posList.push(nextPos);\n }\n}\n\nexport class MotionPath extends ACustomAnimate {\n declare valid: boolean;\n declare pathLength: number;\n declare path: CustomPath2D;\n declare distance: number;\n declare initAngle: number;\n declare changeAngle: boolean;\n declare cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n path: CustomPath2D;\n distance: number;\n cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n initAngle?: number;\n changeAngle?: boolean;\n }\n ) {\n super(from, to, duration, easing, params);\n if (params) {\n this.pathLength = params.path.getLength();\n this.path = params.path;\n this.distance = params.distance;\n this.to = params.distance * this.pathLength;\n this.initAngle = params.initAngle ?? 0;\n this.changeAngle = !!params.changeAngle;\n this.cb = params.cb;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // 计算位置\n const at = this.to * ratio;\n const { pos, angle } = this.path.getAttrAt(at);\n out.x = pos.x;\n out.y = pos.y;\n if (this.changeAngle) {\n out.angle = angle + this.initAngle;\n }\n this.cb && this.cb(this.from, this.to, ratio, this.target as IGraphic);\n // out.angle = angle + this.initAngle;\n }\n}\n\nexport class TagPointsUpdate extends ACustomAnimate<{ points?: IPointLike[]; segments?: ISegment[] }> {\n protected fromPoints: IPointLike[];\n protected toPoints: IPointLike[];\n protected points: IPointLike[];\n protected interpolatePoints: [IPointLike, IPointLike][];\n protected newPointAnimateType: 'grow' | 'appear' | 'clip';\n protected clipRange: number;\n protected shrinkClipRange: number;\n protected clipRangeByDimension: 'x' | 'y';\n protected segmentsCache: number[];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { newPointAnimateType?: 'grow' | 'appear' | 'clip'; clipRangeByDimension?: 'x' | 'y' }\n ) {\n super(from, to, duration, easing, params);\n this.newPointAnimateType = params?.newPointAnimateType ?? 'grow';\n this.clipRangeByDimension = params?.clipRangeByDimension ?? 'x';\n }\n\n private getPoints(attribute: typeof this.from, cache = false): IPointLike[] {\n if (attribute.points) {\n return attribute.points;\n }\n\n if (attribute.segments) {\n const points = [] as IPointLike[];\n if (!this.segmentsCache) {\n this.segmentsCache = [];\n }\n attribute.segments.map(segment => {\n if (segment.points) {\n points.push(...segment.points);\n }\n if (cache) {\n this.segmentsCache.push(segment.points?.length ?? 0);\n }\n });\n return points;\n }\n return [];\n }\n\n onBind(): void {\n const originFromPoints = this.getPoints(this.from);\n const originToPoints = this.getPoints(this.to, true);\n this.fromPoints = !originFromPoints ? [] : !Array.isArray(originFromPoints) ? [originFromPoints] : originFromPoints;\n this.toPoints = !originToPoints ? [] : !Array.isArray(originToPoints) ? [originToPoints] : originToPoints;\n\n const tagMap = new Map();\n this.fromPoints.forEach(point => {\n if (point.context) {\n tagMap.set(point.context, point);\n }\n });\n let firstMatchedIndex = Infinity;\n let lastMatchedIndex = -Infinity;\n let firstMatchedPoint: IPointLike;\n let lastMatchedPoint: IPointLike;\n for (let i = 0; i < this.toPoints.length; i += 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n firstMatchedIndex = i;\n firstMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n for (let i = this.toPoints.length - 1; i >= 0; i -= 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n lastMatchedIndex = i;\n lastMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n\n if (this.newPointAnimateType === 'clip') {\n if (this.toPoints.length !== 0) {\n if (Number.isFinite(lastMatchedIndex)) {\n this.clipRange =\n this.toPoints[lastMatchedIndex][this.clipRangeByDimension] /\n this.toPoints[this.toPoints.length - 1][this.clipRangeByDimension];\n if (this.clipRange === 1) {\n this.shrinkClipRange =\n this.toPoints[lastMatchedIndex][this.clipRangeByDimension] /\n this.fromPoints[this.fromPoints.length - 1][this.clipRangeByDimension];\n }\n if (!isValidNumber(this.clipRange)) {\n this.clipRange = 0;\n } else {\n this.clipRange = clamp(this.clipRange, 0, 1);\n }\n } else {\n this.clipRange = 0;\n }\n }\n }\n // TODO: shrink removed points\n // if no point is matched, animation should start from toPoint[0]\n let prevMatchedPoint = this.toPoints[0];\n this.interpolatePoints = this.toPoints.map((point, index) => {\n const matchedPoint = tagMap.get(point.context);\n if (matchedPoint) {\n prevMatchedPoint = matchedPoint;\n return [matchedPoint, point];\n }\n // appear new point\n if (this.newPointAnimateType === 'appear' || this.newPointAnimateType === 'clip') {\n return [point, point];\n }\n // grow new point\n if (index < firstMatchedIndex && firstMatchedPoint) {\n return [firstMatchedPoint, point];\n } else if (index > lastMatchedIndex && lastMatchedPoint) {\n return [lastMatchedPoint, point];\n }\n return [prevMatchedPoint, point];\n });\n this.points = this.interpolatePoints.map(interpolate => {\n const fromPoint = interpolate[0];\n const toPoint = interpolate[1];\n const newPoint = new Point(fromPoint.x, fromPoint.y, fromPoint.x1, fromPoint.y1);\n newPoint.defined = toPoint.defined;\n newPoint.context = toPoint.context;\n return newPoint;\n });\n }\n\n onFirstRun(): void {\n const lastClipRange = this.target.attribute.clipRange;\n if (isValidNumber(lastClipRange * this.clipRange)) {\n this.clipRange *= lastClipRange;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = pointInterpolation(this.interpolatePoints[index][0], this.interpolatePoints[index][1], ratio);\n newPoint.context = point.context;\n return newPoint;\n });\n if (this.clipRange) {\n if (this.shrinkClipRange) {\n // 折线变短\n if (!end) {\n out.points = this.fromPoints;\n out.clipRange = this.clipRange - (this.clipRange - this.shrinkClipRange) * ratio;\n } else {\n out.points = this.toPoints;\n out.clipRange = 1;\n }\n return;\n }\n out.clipRange = this.clipRange + (1 - this.clipRange) * ratio;\n }\n if (this.segmentsCache && this.to.segments) {\n let start = 0;\n out.segments = this.to.segments.map((segment, index) => {\n const end = start + this.segmentsCache[index];\n const points = this.points.slice(start, end);\n start = end;\n return {\n ...segment,\n points\n };\n });\n } else {\n out.points = this.points;\n }\n }\n}\n\nexport class GraphicAnimate extends ACustomAnimate {\n graphic: IGraphic;\n\n constructor(from: any, to: any, duration: number, easing: EasingType, params?: { graphic: IGraphic }) {\n super(from, to, duration, easing, params);\n this.graphic = params?.graphic;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.graphic) {\n return;\n }\n Object.keys(this.from).forEach(k => {\n out[k] = this.from[k] + (this.to[k] - this.from[k]) * ratio;\n });\n }\n}\n\nexport class ClipGraphicAnimate extends ACustomAnimate {\n private _group?: IGroup;\n private _clipGraphic?: IGraphic;\n protected clipFromAttribute?: any;\n protected clipToAttribute?: any;\n\n private _lastClip?: boolean;\n private _lastPath?: IGraphic[];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { group: IGroup; clipGraphic: IGraphic }\n ) {\n super(null, null, duration, easing, params);\n this.clipFromAttribute = from;\n this.clipToAttribute = to;\n this._group = params?.group;\n this._clipGraphic = params?.clipGraphic;\n }\n\n onBind() {\n if (this._group && this._clipGraphic) {\n this._lastClip = this._group.attribute.clip;\n this._lastPath = this._group.attribute.path;\n this._group.setAttributes(\n {\n clip: true,\n path: [this._clipGraphic]\n },\n false,\n { type: AttributeUpdateType.ANIMATE_BIND }\n );\n }\n }\n\n onEnd() {\n if (this._group) {\n this._group.setAttributes(\n {\n clip: this._lastClip,\n path: this._lastPath\n },\n false,\n { type: AttributeUpdateType.ANIMATE_END }\n );\n }\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._clipGraphic) {\n return;\n }\n const res: any = {};\n Object.keys(this.clipFromAttribute).forEach(k => {\n res[k] = this.clipFromAttribute[k] + (this.clipToAttribute[k] - this.clipFromAttribute[k]) * ratio;\n });\n this._clipGraphic.setAttributes(res, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: { ratio, end }\n });\n }\n}\n\nexport class ClipAngleAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startAngle?: number;\n radius?: number;\n orient?: 'clockwise' | 'anticlockwise';\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startAngle = params?.startAngle ?? 0;\n const orient = params?.orient ?? 'clockwise';\n\n let arcStartAngle = 0;\n let arcEndAngle = 0;\n if (orient === 'anticlockwise') {\n arcEndAngle = animationType === 'in' ? startAngle + Math.PI * 2 : startAngle;\n arcEndAngle = startAngle + Math.PI * 2;\n } else {\n arcStartAngle = startAngle;\n arcEndAngle = animationType === 'out' ? startAngle + Math.PI * 2 : startAngle;\n }\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: params?.radius ?? (width + height) / 2,\n innerRadius: 0,\n startAngle: arcStartAngle,\n endAngle: arcEndAngle,\n fill: true\n });\n let fromAttributes: Partial;\n let toAttributes: Partial;\n if (orient === 'anticlockwise') {\n fromAttributes = { startAngle: startAngle + Math.PI * 2 };\n toAttributes = { startAngle: startAngle };\n } else {\n fromAttributes = { endAngle: startAngle };\n toAttributes = { endAngle: startAngle + Math.PI * 2 };\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipRadiusAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startRadius?: number;\n endRadius?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startRadius = params?.startRadius ?? 0;\n const endRadius = params?.endRadius ?? Math.sqrt((width / 2) ** 2 + (height / 2) ** 2);\n\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: animationType === 'out' ? endRadius : startRadius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: true\n });\n const fromAttributes: Partial = { outerRadius: startRadius };\n const toAttributes: Partial = { outerRadius: endRadius };\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipDirectionAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n direction?: 'x' | 'y';\n orient?: 'positive' | 'negative';\n width?: number;\n height?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = params?.width ?? groupAttribute.width ?? 0;\n const height = params?.height ?? groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const direction = params?.direction ?? 'x';\n const orient = params?.orient ?? 'positive';\n\n const rect = application.graphicService.creator.rect({\n x: 0,\n y: 0,\n width: animationType === 'in' && direction === 'x' ? 0 : width,\n height: animationType === 'in' && direction === 'y' ? 0 : height,\n fill: true\n });\n let fromAttributes: Partial = {};\n let toAttributes: Partial = {};\n if (direction === 'y') {\n if (orient === 'negative') {\n fromAttributes = { y: height, height: 0 };\n toAttributes = { y: 0, height: height };\n } else {\n fromAttributes = { height: 0 };\n toAttributes = { height: height };\n }\n } else {\n if (orient === 'negative') {\n fromAttributes = { x: width, width: 0 };\n toAttributes = { x: 0, width: width };\n } else {\n fromAttributes = { width: 0 };\n toAttributes = { width: width };\n }\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: rect }\n );\n }\n}\n\ntype RotateSphereParams =\n | {\n center: { x: number; y: number; z: number };\n r: number;\n cb?: (out: any) => void;\n }\n | (() => any);\n\nexport class RotateBySphereAnimate extends ACustomAnimate {\n declare params: RotateSphereParams;\n declare theta: number;\n declare phi: number;\n\n onStart(): void {\n const { center, r } = typeof this.params === 'function' ? this.params() : this.params;\n const startX = this.target.getComputedAttribute('x');\n const startY = this.target.getComputedAttribute('y');\n const startZ = this.target.getComputedAttribute('z');\n const phi = Math.acos((startY - center.y) / r);\n let theta = Math.acos((startX - center.x) / r / Math.sin(phi));\n if (startZ - center.z < 0) {\n theta = pi2 - theta;\n }\n this.theta = theta;\n this.phi = phi;\n }\n\n onBind() {\n return;\n }\n\n onEnd() {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.phi == null || this.theta == null) {\n return;\n }\n const { center, r, cb } = typeof this.params === 'function' ? this.params() : this.params;\n const deltaAngle = Math.PI * 2 * ratio;\n const theta = this.theta + deltaAngle;\n const phi = this.phi;\n const x = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const y = r * Math.cos(phi) + center.y;\n const z = r * Math.sin(phi) * Math.sin(theta) + center.z;\n out.x = x;\n out.y = y;\n out.z = z;\n // out.beta = phi;\n out.alpha = theta + pi / 2;\n while (out.alpha > pi2) {\n out.alpha -= pi2;\n }\n out.alpha = pi2 - out.alpha;\n\n out.zIndex = out.z * -10000;\n\n cb && cb(out);\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGroup;\n\n constructor(to: Record, duration: number, easing: EasingType) {\n super({}, to, duration, easing);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind(): void {\n Object.keys(this.to).forEach(k => {\n this.from[k] = this.target.getComputedAttribute(k);\n });\n return;\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this.to,\n this.from\n );\n }\n}\n\nexport class AnimateGroup extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onStart(): void {\n this.customAnimates.forEach(a => {\n a.onStart();\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n\nexport class AnimateGroup1 extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n","import type { IText, ITextGraphicAttribute, EasingType } from '@visactor/vrender-core';\nimport { IncreaseCount } from '@visactor/vrender-core';\nimport type { ILabelAnimation, ILabelUpdateAnimation, ILabelUpdateChannelAnimation, LabelContent } from '../type';\nimport { array, isArray, isEmpty, isValidNumber } from '@visactor/vutils';\n\nconst fadeIn = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n }\n };\n};\n\nconst fadeOut = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n\nconst animationEffects = { fadeIn, fadeOut };\n\nexport function getAnimationAttributes(\n textAttribute: ITextGraphicAttribute,\n type: 'fadeIn' | 'fadeOut'\n): {\n from: any;\n to: any;\n} {\n return animationEffects[type]?.(textAttribute) ?? { from: {}, to: {} };\n}\n\nexport function updateAnimation(\n prev: LabelContent['text'],\n next: LabelContent['text'],\n animationConfig: ILabelUpdateAnimation | ILabelUpdateChannelAnimation[]\n) {\n if (!isArray(animationConfig)) {\n const { duration, easing, increaseEffect = true } = animationConfig;\n prev.animate().to(next.attribute, duration, easing);\n if (increaseEffect && prev.type === 'text' && next.type === 'text') {\n playIncreaseCount(prev as IText, next as IText, duration, easing);\n }\n return;\n }\n\n animationConfig.forEach(cfg => {\n const { duration, easing, increaseEffect = true, channel } = cfg;\n const { to } = update(prev, next, channel, cfg.options);\n if (!isEmpty(to)) {\n prev.animate().to(to, duration, easing);\n }\n\n if (increaseEffect && prev.type === 'text' && next.type === 'text') {\n playIncreaseCount(prev as IText, next as IText, duration, easing);\n }\n });\n}\n\nexport const update = (\n prev: LabelContent['text'],\n next: LabelContent['text'],\n channel?: string[],\n options?: ILabelUpdateChannelAnimation['options']\n) => {\n const from = Object.assign({}, prev.attribute);\n const to = Object.assign({}, next.attribute);\n array(options?.excludeChannels).forEach(key => {\n delete to[key];\n });\n Object.keys(to).forEach(key => {\n if (channel && !channel.includes(key)) {\n delete to[key];\n }\n });\n return { from, to };\n};\n\nexport function playIncreaseCount(prev: IText, next: IText, duration: number, easing: EasingType) {\n if (\n prev.attribute.text !== next.attribute.text &&\n isValidNumber(Number(prev.attribute.text) * Number(next.attribute.text))\n ) {\n prev\n .animate()\n .play(\n new IncreaseCount(\n { text: prev.attribute.text as string },\n { text: next.attribute.text as string },\n duration,\n easing\n )\n );\n }\n}\n\nexport const DefaultLabelAnimation: ILabelAnimation = {\n mode: 'same-time',\n duration: 300,\n easing: 'linear' as EasingType\n};\n","import type { IArea, ILine } from '@visactor/vrender-core';\nimport type { IPoint, Quadrant } from './type';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { radianToDegree, isValidNumber, isRectIntersect, normalizeAngle, polarToCartesian } from '@visactor/vutils';\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\nexport const labelingPoint = (textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) => {\n if (!textBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n const anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n let offsetX = 0;\n let offsetY = 0;\n if (graphicBounds) {\n offsetX = Math.abs(graphicBounds.x1 - graphicBounds.x2) / 2;\n offsetY = Math.abs(graphicBounds.y1 - graphicBounds.y2) / 2;\n }\n\n const angle = {\n 'top-right': -235,\n 'top-left': 235,\n 'bottom-right': 45,\n 'bottom-left': -45\n };\n\n switch (position) {\n case 'top':\n sy = -1;\n break;\n case 'bottom':\n sy = 1;\n break;\n case 'left':\n sx = -1;\n break;\n case 'right':\n sx = 1;\n break;\n case 'bottom-left':\n case 'bottom-right':\n case 'top-left':\n case 'top-right':\n sx = Math.sin(angle[position] * (Math.PI / 180));\n sy = Math.cos(angle[position] * (Math.PI / 180));\n break;\n case 'center':\n sx = 0;\n sy = 0;\n break;\n }\n\n const x = anchorX + sx * (offset + offsetX) + Math.sign(sx) * (width / 2);\n const y = anchorY + sy * (offset + offsetY) + Math.sign(sy) * (height / 2);\n\n return { x, y };\n};\n\nexport const getPointsOfLineArea = (graphic: ILine | IArea): IPointLike[] => {\n if (!graphic || !graphic.attribute) {\n return [];\n }\n\n const { points, segments } = graphic.attribute;\n\n if (segments && segments.length) {\n const res: IPointLike[] = [];\n\n segments.forEach(seg => {\n const segPoints = seg.points;\n\n segPoints.forEach(point => {\n res.push(point);\n });\n });\n\n return res;\n }\n\n return points;\n};\n\nexport function labelingLineOrArea(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position: string = 'end',\n offset = 0\n) {\n if (!textBounds || !graphicBounds) {\n return { x: Infinity, y: Infinity };\n }\n\n const { x1, x2 } = textBounds;\n const width = Math.abs(x2 - x1);\n\n const anchorX = graphicBounds.x1;\n const anchorY = graphicBounds.y1;\n\n let x = anchorX;\n const y = anchorY;\n\n if (position === 'end') {\n x = anchorX + width / 2 + offset;\n } else if (position === 'start') {\n x = anchorX - width / 2 - offset;\n }\n\n return { x, y };\n}\n\nexport function connectLineBetweenBounds(boundA: IBoundsLike, boundB: IBoundsLike) {\n if (!boundA || !boundB) {\n return;\n }\n\n if (isRectIntersect(boundA, boundB, true)) {\n return;\n }\n // Top left coordinates\n const x1 = Math.min(boundA.x1, boundA.x2);\n const y1 = Math.min(boundA.y1, boundA.y2);\n const x2 = Math.min(boundB.x1, boundB.x2);\n const y2 = Math.min(boundB.y1, boundB.y2);\n\n // Half widths and half heights\n const w1 = Math.abs(boundA.x2 - x1) / 2;\n const h1 = Math.abs(boundA.y2 - y1) / 2;\n const w2 = Math.abs(boundB.x2 - x2) / 2;\n const h2 = Math.abs(boundB.y2 - y2) / 2;\n\n // Center coordinates\n const cx1 = x1 + w1;\n const cy1 = y1 + h1;\n const cx2 = x2 + w2;\n const cy2 = y2 + h2;\n\n // Distance between centers\n const dx = cx2 - cx1;\n const dy = cy2 - cy1;\n\n const p1 = getIntersection(dx, dy, cx1, cy1, w1, h1);\n const p2 = getIntersection(-dx, -dy, cx2, cy2, w2, h2);\n\n return [p1, p2];\n}\n\nfunction getIntersection(dx: number, dy: number, cx: number, cy: number, w: number, h: number) {\n if (Math.abs(dy / dx) < h / w) {\n // Hit vertical edge of box1\n return { x: cx + (dx > 0 ? w : -w), y: cy + (dy * w) / Math.abs(dx) };\n }\n // Hit horizontal edge of box1\n return { x: cx + (dx * h) / Math.abs(dy), y: cy + (dy > 0 ? h : -h) };\n}\n\nexport function getAlignOffset(align: 'left' | 'right' | 'center') {\n if (align === 'left') {\n return 0;\n } else if (align === 'right') {\n return 1;\n }\n\n return 0.5;\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNumberClose } from '@visactor/vutils';\n\nexport interface IShiftYOption {\n labelling: (...args: any[]) => any;\n\n maxY?: number;\n globalShiftY?: {\n /**\n * 是否开启全局调整,开启后,所有文字会整体调整,否则只会按照 x 分组调整 top/bottom\n * @default true\n */\n enable?: boolean;\n /**\n * 最大迭代次数\n * @default 10\n */\n maxIterations?: number;\n /**\n * 最大误差\n * @default 0.1\n */\n maxError?: number;\n /**\n * 调整后 text 之间的 padding\n * @default 1\n */\n padding?: number;\n /**\n * 每个 text 最大被调整的次数\n * @default 1000\n */\n maxAttempts?: number;\n /**\n * 每个 text 调整的 y 坐标差值限制\n */\n deltaYTolerance?: number;\n };\n}\n\nconst isIntersect = (top: number, bottom: number) => {\n return Math.ceil(top) > Math.floor(bottom);\n};\n\nconst isXIntersect = ([a, b]: [number, number], [c, d]: [number, number]) => {\n return d > a && b > c;\n};\n\nfunction getIntersectionLength(range1: number[], range2: number[]) {\n const [start1, end1] = range1;\n const [start2, end2] = range2;\n\n const start = Math.max(start1, start2);\n const end = Math.min(end1, end2);\n\n return Math.max(0, end - start);\n}\n\nexport function shiftY(texts: IText[], option: IShiftYOption) {\n const {\n maxY = Number.MAX_VALUE,\n labelling,\n globalShiftY = { enable: true, maxIterations: 10, maxError: 0.1, padding: 1 }\n } = option;\n\n const n = texts.length;\n if (n <= 1) {\n return texts;\n }\n\n // 根据 x 坐标给 text 分组,存放信息到 map 中\n const xMap = new Map<{ start: number; end: number }, IText[]>();\n const textInformation = new Map<\n IText,\n {\n y1Initial: number;\n y1: number;\n y: number;\n y2: number;\n height: number;\n x1: number;\n x2: number;\n x: number;\n attempts: number;\n }\n >();\n\n const getY1Initial = (text: IText) => textInformation.get(text).y1Initial;\n const getHeight = (text: IText) => textInformation.get(text).height;\n const getY1 = (text: IText) => textInformation.get(text).y1;\n const getY = (text: IText) => textInformation.get(text).y;\n const getX = (text: IText) => textInformation.get(text).x;\n const getX1 = (text: IText) => textInformation.get(text).x1;\n const getX2 = (text: IText) => textInformation.get(text).x2;\n const getAdjustAttempts = (text: IText) => textInformation.get(text).attempts;\n\n const setY1 = (text: IText, y: number) => {\n textInformation.get(text).y1 = y;\n };\n\n const setAdjustAttempts = (text: IText, attempts: number) => {\n textInformation.get(text).attempts = attempts;\n };\n\n function adjustPositionInOneGroup(texts: IText[]) {\n // 从最后一个 text 向前遍历,如果与前一个 text 相交,则尝试放到下方(需要判断和前一个 text 是否相交,若相交则不能放到下方)\n for (let i = texts.length - 1; i >= 0; i--) {\n const curText = texts[i];\n const upperText = texts[i - 1];\n const lowerText = texts[i + 1];\n // 当前 text 和上面一个 text 相交\n if (\n (upperText && isIntersect(getY1(upperText) + getHeight(upperText), getY1(curText))) ||\n // 如果是最顶上被 clamp 进来的 text,也尝试向下摆放\n (getY1(curText) === 0 && curText._isClamped)\n ) {\n const { y } = labelling(curText);\n // 挪动当前 text 后, 和下面一个 text 不相交\n if (!lowerText || !isIntersect(y + getHeight(curText) / 2, getY1(lowerText))) {\n if (y + getHeight(curText) / 2 <= maxY) {\n setY1(curText, getY1(curText) + y - getY(curText));\n }\n }\n }\n }\n }\n\n // 根据 x 坐标进行分组\n texts.sort((a, b) => a.attribute.x - b.attribute.x);\n for (const text of texts) {\n const { y1, y2, x1, x2 } = text.AABBBounds;\n const { x, y } = text.attribute;\n textInformation.set(text, { y1Initial: y1, y1, y2, y, height: y2 - y1, x1, x2, x, attempts: 0 });\n let hasRange = false;\n\n for (const [range, xGroupTexts] of xMap) {\n const { start, end } = range;\n // 1. x1,x2 在 start 和 end 范围内\n if (x1 >= start && x2 <= end) {\n xGroupTexts.push(text);\n hasRange = true;\n }\n // 2. x 坐标接近,相差在 5px 以内\n else if (isNumberClose(x, getX(xGroupTexts[0]), undefined, 5)) {\n // x 坐标相等,也纳入到一个分组中,并且要扩大分组 range\n const newRange = { start: Math.min(start, x1), end: Math.max(end, x2) };\n xGroupTexts.push(text);\n xMap.set(newRange, xGroupTexts);\n xMap.delete(range);\n hasRange = true;\n }\n // 3. 与区间相交范围 > 50%\n else if (getIntersectionLength([start, end], [x1, x2]) / (end - start) > 0.5) {\n const newRange = { start: Math.min(start, x1), end: Math.max(end, x2) };\n xGroupTexts.push(text);\n xMap.set(newRange, xGroupTexts);\n xMap.delete(range);\n hasRange = true;\n }\n\n if (hasRange) {\n break;\n }\n }\n\n if (!hasRange) {\n xMap.set({ start: x1, end: x2 }, [text]);\n }\n }\n\n // 对每个 x 坐标的 text 数组进行排序\n for (const xTexts of xMap.values()) {\n // 从上到下排序\n xTexts.sort((a, b) => getY1Initial(a) - getY1Initial(b));\n adjustPositionInOneGroup(xTexts);\n }\n\n // 整体调整一次 Y 坐标,进行散开\n if (globalShiftY.enable !== false) {\n const {\n maxIterations = 10,\n maxError = 0.1,\n padding = 1,\n maxAttempts = 1000,\n deltaYTolerance = Number.MAX_VALUE\n } = globalShiftY;\n for (let iter = 0; iter < maxIterations; iter++) {\n texts.sort((a, b) => getY1Initial(a) - getY1Initial(b));\n let error = 0;\n for (let i = 0; i < n - 1; i++) {\n const curText = texts[i];\n if (getAdjustAttempts(curText) >= maxAttempts) {\n continue;\n }\n let j = i + 1;\n let nextText;\n while (\n (nextText = texts[j]) &&\n !isXIntersect([getX1(curText), getX2(curText)], [getX1(nextText), getX2(nextText)])\n ) {\n j += 1;\n }\n if (nextText) {\n const y1 = getY1(curText);\n const h0 = getHeight(curText);\n const nextY1 = getY1(nextText);\n const delta = nextY1 - (y1 + h0);\n if (delta < padding) {\n const newDelta = (padding - delta) / 2;\n error = Math.max(error, newDelta);\n if (y1 + newDelta + getHeight(nextText) > maxY) {\n const newY1 = y1 - (padding - delta);\n const curTextDelta = getY1Initial(curText) - newY1;\n if (Math.abs(curTextDelta) <= deltaYTolerance) {\n setY1(curText, newY1);\n setAdjustAttempts(curText, getAdjustAttempts(curText) + 1);\n }\n } else if (y1 - newDelta < 0) {\n const newY1 = nextY1 + (padding - delta);\n const nextTextDelta = getY1Initial(nextText) - newY1;\n if (Math.abs(nextTextDelta) <= deltaYTolerance) {\n setY1(nextText, newY1);\n setAdjustAttempts(nextText, getAdjustAttempts(nextText) + 1);\n }\n } else {\n const newCurY1 = y1 - newDelta;\n const curTextDelta = getY1Initial(curText) - newCurY1;\n const newNextY1 = nextY1 + newDelta;\n const nextTextDelta = getY1Initial(nextText) - newNextY1;\n if (Math.abs(curTextDelta) <= deltaYTolerance && Math.abs(nextTextDelta) <= deltaYTolerance) {\n setY1(curText, newCurY1);\n setY1(nextText, newNextY1);\n setAdjustAttempts(curText, getAdjustAttempts(curText) + 1);\n setAdjustAttempts(nextText, getAdjustAttempts(nextText) + 1);\n }\n }\n }\n }\n }\n if (error < maxError) {\n break;\n }\n }\n }\n\n for (const text of texts) {\n const finalY = text.attribute.y + getY1(text) - getY1Initial(text);\n text.setAttribute('y', finalY);\n }\n\n const result = [];\n // 调整文字顺序,越靠前的越优先占据空间\n // texts 按照 x 进行排序,然后左右交替,保证首尾标签优先展示\n texts.sort((a, b) => a.attribute.x - b.attribute.x);\n let start = 0;\n let end = texts.length - 1;\n\n while (start <= end) {\n if (start === end) {\n result.push(texts[start]);\n } else {\n result.push(texts[start]);\n result.push(texts[end]);\n }\n start++;\n end--;\n }\n return result;\n}\n","import { registerGroup, registerLine, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadLabelComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n registerLine();\n}\n","/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea,\n IRichText,\n ILineGraphicAttribute,\n ILinearGradient\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator, AttributeUpdateType, IContainPointMode, CustomPath2D } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n isFunction,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray,\n isObject\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { createTextGraphicByType, getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap, BitmapTool } from './overlap';\n// eslint-disable-next-line no-duplicate-imports\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type {\n BaseLabelAttrs,\n OverlapAttrs,\n ILabelAnimation,\n LabelItem,\n SmartInvertAttrs,\n ILabelEnterAnimation,\n ILabelExitAnimation,\n ILabelUpdateAnimation,\n LabelContent,\n ShiftYStrategy,\n Strategy\n} from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes, updateAnimation } from './animate/animate';\nimport { connectLineBetweenBounds, getPointsOfLineArea } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { loadLabelComponent } from './register';\nimport { shiftY } from './overlap/shiftY';\n\nloadLabelComponent();\nexport class LabelBase extends AbstractComponent {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n // parsed animation config\n protected _animationConfig?: {\n enter: ILabelEnterAnimation | false;\n exit: ILabelExitAnimation | false;\n update: ILabelUpdateAnimation | false;\n };\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-2, -1, -2, -1] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType;\n setBitmapTool(bmpTool: ReturnType) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map;\n\n protected _idToGraphic: Map;\n\n protected _idToPoint: Map;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, LabelBase.defaultAttributes, restAttributes) });\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _getLabelLinePoints(text: IText | IRichText, baseMark?: IGraphic) {\n return connectLineBetweenBounds(text.AABBBounds, baseMark?.AABBBounds);\n }\n\n protected _createLabelLine(text: IText | IRichText, baseMark?: IGraphic): ILine | undefined {\n const points = this._getLabelLinePoints(text, baseMark);\n if (points) {\n const lineGraphic = graphicCreator.line({\n points\n });\n\n const { line = {} } = text.attribute as any;\n\n if (line.customShape) {\n const customShape = line.customShape;\n lineGraphic.pathProxy = (attrs: Partial) => {\n return customShape(\n {\n text,\n baseMark: baseMark\n },\n attrs,\n new CustomPath2D()\n );\n };\n }\n\n if (baseMark && baseMark.attribute.fill) {\n lineGraphic.setAttribute('stroke', baseMark.attribute.fill);\n }\n\n if (this.attribute.line && !isEmpty(this.attribute.line.style)) {\n lineGraphic.setAttributes(this.attribute.line.style);\n }\n this._setStatesOfLabelLine(lineGraphic);\n return lineGraphic;\n }\n }\n\n protected render() {\n this._prepare();\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: (IText | IRichText)[] = this._initText(data);\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n labels,\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(labels);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (isFunction(this.attribute.onAfterOverlapping)) {\n this.attribute.onAfterOverlapping(\n labels as Text[],\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n }\n\n if (labels && labels.length) {\n labels.forEach(label => {\n this._bindEvent(label);\n this._setStatesOfText(label);\n });\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStatesOfText(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n protected _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const textAttrs = {\n ...this.stage?.getTheme()?.text,\n ...attributes\n };\n return createTextGraphicByType(textAttrs, 'textType');\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = this.attribute.type === 'line-data';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points && points.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n if (this.attribute.animation !== false) {\n const { animation, animationEnter, animationExit, animationUpdate } = this.attribute;\n const animationCfg = isObject(animation) ? animation : {};\n this._animationConfig = {\n enter: animationEnter !== false ? merge({}, DefaultLabelAnimation, animationCfg, animationEnter ?? {}) : false,\n exit: animationExit !== false ? merge({}, DefaultLabelAnimation, animationCfg, animationExit ?? {}) : false,\n update:\n animationUpdate !== false\n ? isArray(animationUpdate)\n ? animationUpdate\n : merge({}, DefaultLabelAnimation, animationCfg, animationUpdate ?? {})\n : false\n };\n } else {\n this._animationConfig = {\n enter: false,\n exit: false,\n update: false\n };\n }\n }\n\n protected getRelatedGraphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _initText(data: LabelItem[] = []): (IText | IRichText)[] {\n const { textStyle = {} } = this.attribute;\n const labels = [];\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGraphic(textData);\n if (!baseMark) {\n continue;\n }\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _layout(texts: (IText | IRichText)[]): (IText | IRichText)[] {\n const { position, offset } = this.attribute;\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i];\n if (!text) {\n return;\n }\n const textData = text.attribute as LabelItem;\n const baseMark = this.getRelatedGraphic(textData);\n if (!baseMark) {\n continue;\n }\n\n text.attachedThemeGraphic = this as any;\n const textBounds = this.getGraphicBounds(text);\n text.attachedThemeGraphic = null;\n const actualPosition = isFunction(position) ? position(textData) : (position as string);\n\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id), actualPosition)\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number }, actualPosition);\n\n const textLocation = this.labeling(textBounds, graphicBounds, actualPosition, offset);\n\n if (textLocation) {\n text.setAttributes(textLocation);\n }\n }\n\n return texts;\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = (isObject(this.attribute.overlap) ? this.attribute.overlap : {}) as OverlapAttrs;\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const { strategy, priority } = option;\n\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n\n if (priority) {\n labels = labels.sort((a, b) => priority((b.attribute as any).data) - priority((a.attribute as any).data));\n }\n\n if ((strategy as ShiftYStrategy)?.type === 'shiftY') {\n return this._overlapGlobal(labels, option, bmpTool, bitmap);\n }\n return this._overlapByStrategy(labels, option, bmpTool, bitmap);\n }\n\n protected _overlapGlobal(labels: (IText | IRichText)[], option: OverlapAttrs, bmpTool: BitmapTool, bitmap: Bitmap) {\n let result = labels.filter(label => label.attribute.visible && label.attribute.opacity !== 0);\n const { clampForce = true, hideOnHit = true, overlapPadding, strategy } = option;\n if (clampForce) {\n for (let i = 0; i < result.length; i++) {\n const text = labels[i];\n const { dx = 0, dy = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height, bmpTool.padding);\n if (dx !== 0 || dy !== 0) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n text._isClamped = true;\n }\n }\n }\n result = shiftY(result as any, {\n maxY: bmpTool.height,\n ...(strategy as ShiftYStrategy),\n labelling: (text: IText) => {\n const baseMark = this.getRelatedGraphic(text.attribute);\n const graphicBound = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((text.attribute as any).id))\n : this.getGraphicBounds(baseMark, text);\n return this.labeling(text.AABBBounds, graphicBound, 'bottom', this.attribute.offset);\n }\n });\n\n for (let i = 0; i < result.length; i++) {\n const text = result[i];\n const bounds = text.AABBBounds;\n const range = boundToRange(bmpTool, bounds, true);\n if (canPlace(bmpTool, bitmap, bounds, clampForce, overlapPadding)) {\n bitmap.setRange(range);\n } else {\n if (clampForce) {\n const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding);\n if (placedAfterClampForce) {\n continue;\n }\n }\n if (hideOnHit) {\n text.setAttributes({ visible: false });\n } else {\n bitmap.setRange(range);\n }\n }\n }\n return result;\n }\n\n protected _processClampForce(text: IText, bmpTool: BitmapTool, bitmap: Bitmap, overlapPadding = 0) {\n const { dy = 0, dx = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height, bmpTool.padding);\n if (dx === 0 && dy === 0) {\n // 再次检查,若不考虑边界,仍然可以放得下,代表当前 text 没有与其他 text 重叠\n if (canPlace(bmpTool, bitmap, text.AABBBounds, false, overlapPadding)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n return true;\n }\n } else if (\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n return true;\n }\n return false;\n }\n\n protected _overlapByStrategy(\n labels: (IText | IRichText)[],\n option: OverlapAttrs,\n bmpTool: BitmapTool,\n bitmap: Bitmap\n ) {\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const result: (IText | IRichText)[] = [];\n\n const checkBounds = (strategy as Strategy[]).some(s => s.type === 'bound');\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].attribute.visible === false) {\n continue;\n }\n\n const text = labels[i] as IText | IRichText;\n const baseMark = this.getRelatedGraphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (\n checkBounds &&\n baseMark &&\n baseMark.AABBBounds &&\n this._canPlaceInside(text.AABBBounds, baseMark.AABBBounds)\n ) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < (strategy as Strategy[]).length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n this.attribute,\n text as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding);\n if (placedAfterClampForce) {\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(\n graphic?: IGraphic,\n point: Partial = {},\n position?: string\n ): IBoundsLike {\n if (graphic) {\n if (graphic.attribute.visible !== false) {\n return graphic.AABBBounds;\n }\n const { x, y } = graphic.attribute;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n if (point && position && position === 'inside-middle') {\n const { x, y, x1 = x, y1 = y } = point;\n return {\n x1: (x + x1) / 2,\n x2: (x + x1) / 2,\n y1: (y + y1) / 2,\n y2: (y + y1) / 2\n };\n }\n const { x, y } = point;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n\n protected _renderLabels(labels: (IText | IRichText)[]) {\n const { syncState } = this.attribute;\n const currentTextMap: Map = new Map();\n const prevTextMap: Map = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n const labelLines = [] as ILine[];\n const { visible: showLabelLine } = this.attribute.line ?? {};\n\n labels &&\n labels.forEach((text, index) => {\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n let labelLine;\n if (showLabelLine) {\n labelLine = this._createLabelLine(text as IText, relatedGraphic);\n }\n if (syncState) {\n this.updateStatesOfLabels([labelLine ? { text, labelLine } : { text }], relatedGraphic.currentStates ?? []);\n }\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this._addLabel({ text, labelLine }, texts, labelLines, index);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n this._updateLabel(prevLabel, { text, labelLine });\n }\n });\n\n this._removeLabel(prevTextMap);\n\n this._graphicToText = currentTextMap;\n }\n\n protected _addLabel(\n label: LabelContent,\n texts?: LabelContent['text'][],\n labelLines?: LabelContent['labelLine'][],\n index?: number\n ) {\n const { text, labelLine } = label;\n // TODO: 或许还需要判断关联图元是否有动画?\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n this._syncStateWithRelatedGraphic(relatedGraphic);\n\n if (this._enableAnimation !== false && this._animationConfig.enter !== false) {\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n if (text) {\n this.add(text);\n }\n\n if (labelLine) {\n labelLines.push(labelLine);\n this.add(labelLine);\n }\n\n // enter的时长如果不是大于0,那么直接跳过动画\n this._animationConfig.enter.duration > 0 &&\n relatedGraphic.once('animate-bind', a => {\n // text和labelLine共用一个from\n text.setAttributes(from);\n labelLine && labelLine.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(\n text,\n texts,\n labelLine,\n labelLines,\n index,\n relatedGraphic,\n to,\n this._animationConfig.enter as ILabelEnterAnimation\n );\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else {\n if (text) {\n this.add(text);\n }\n if (labelLine) {\n this.add(labelLine);\n }\n }\n }\n\n protected _updateLabel(prevLabel: LabelContent, currentLabel: LabelContent) {\n const { text: prevText, labelLine: prevLabelLine } = prevLabel;\n const { text: curText, labelLine: curLabelLine } = currentLabel;\n if (this._enableAnimation !== false && this._animationConfig.update !== false) {\n const { duration, easing } = this._animationConfig.update;\n updateAnimation(prevText, curText, this._animationConfig.update);\n if (prevLabelLine && curLabelLine) {\n prevLabel.labelLine.animate().to(curLabelLine.attribute, duration, easing);\n }\n } else {\n prevLabel.text.setAttributes(curText.attribute as any);\n if (prevLabelLine && curLabelLine) {\n prevLabel.labelLine.setAttributes(curLabelLine.attribute);\n }\n }\n }\n\n protected _removeLabel(textMap: Map) {\n const removeLabelAndLine = (label: LabelContent) => {\n this.removeChild(label.text);\n if (label.labelLine) {\n this.removeChild(label.labelLine);\n }\n };\n\n if (this._enableAnimation !== false && this._animationConfig.exit !== false) {\n const { duration, easing } = this._animationConfig.exit;\n textMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n removeLabelAndLine(label);\n });\n });\n } else {\n textMap.forEach(label => {\n removeLabelAndLine(label);\n });\n }\n }\n\n private updateStatesOfLabels(labels: LabelContent[], currentStates?: string[]) {\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (\n e.detail?.type === AttributeUpdateType.STATE ||\n (e.detail?.type === AttributeUpdateType.ANIMATE_UPDATE && e.detail.animationState?.isFirstFrameOfStep)\n ) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n this.updateStatesOfLabels(labels, currentStates);\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState && relatedGraphic) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n // 默认labelLine和text共用相同动画属性\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText | IRichText,\n texts: (IText | IRichText)[],\n labelLine: ILine,\n labelLines: ILine[],\n index: number,\n relatedGraphic: IGraphic,\n to: any,\n { mode, duration, easing, delay }: ILabelAnimation\n ) {\n // TODO: 跟随动画\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n const step = detail.animationState?.step;\n const isValidAnimateState =\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n step &&\n // 不是第一个wait\n !(step.type === 'wait' && step.prev?.type == null);\n\n if (!isValidAnimateState) {\n return {};\n }\n // const prevStep = step.prev;\n // if (prevStep && prevStep.type === 'wait' && prevStep.prev?.type == null) {\n // delay = delay ?? step.position;\n // }\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n labelLine && labelLine.setAttributes(to);\n return;\n }\n\n const onStart = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onStart }).wait(delay).to(to, duration, easing);\n });\n labelLines.forEach(t => {\n t.animate().wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n relatedGraphic.containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.getPickerService())\n ) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: (IText | IRichText)[]) {\n const option = (isObject(this.attribute.smartInvert) ? this.attribute.smartInvert : {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors, mode, interactInvertType } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGraphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * base(baseMark色),\n * inverBase(执行智能反色),\n * similarBase(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n let backgroundColor = baseMark.attribute.fill as IColor;\n let foregroundColor = label.attribute.fill as IColor;\n\n if (isObject(backgroundColor) && backgroundColor.gradient) {\n const firstStopColor = (backgroundColor as ILinearGradient).stops?.[0]?.color;\n\n if (firstStopColor) {\n backgroundColor = firstStopColor;\n foregroundColor = firstStopColor; // 渐变色的时候,标签的颜色可能会和背景色不一致,所以需要设置为相同的颜色\n }\n }\n\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark.AABBBounds);\n const isIntersect =\n !isInside && label.AABBBounds && baseMark.AABBBounds && baseMark.AABBBounds.intersects(label.AABBBounds);\n\n if (isInside || outsideEnable || (isIntersect && interactInvertType === 'inside')) {\n // 按照标签展示在柱子内部的情况,执行反色逻辑\n const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else if (isIntersect && interactInvertType !== 'none') {\n // 存在相交的情况\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {\n continue;\n }\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n // stroke 作为背景色进行反色计算\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n )\n });\n continue;\n }\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n","const labelComponentMap = {};\n\nexport const registerLabelComponent = (type: string, LabelClass: any) => {\n labelComponentMap[type] = LabelClass;\n};\n\nexport const getLabelComponent = (type: string) => {\n return labelComponentMap[type];\n};\n","import type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport {\n merge,\n isValidNumber,\n isNil,\n isLess,\n isGreater,\n isNumberClose as isClose,\n polarToCartesian,\n computeQuadrant\n} from '@visactor/vutils';\nimport { LabelBase } from './base';\nimport type { ArcLabelAttrs, IPoint, Quadrant, BaseLabelAttrs, LabelItem, IArcLabelLineSpec } from './type';\nimport type { IArc, IRichTextAttribute, ITextAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { type IRichText, type IText, type IArcGraphicAttribute, type IGraphic } from '@visactor/vrender-core';\nimport {\n isQuadrantRight,\n isQuadrantLeft,\n lineCirclePoints,\n connectLineRadian,\n checkBoundsOverlap,\n getAlignOffset\n} from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\nimport { isFunction } from '@visactor/vutils';\n\nexport class ArcInfo {\n key!: string;\n refDatum!: any;\n refArc!: IArc;\n /**\n * 绘图区圆弧中点\n */\n center!: IPoint;\n /**\n * label起始区圆弧中点\n */\n outerCenter!: IPoint;\n labelSize!: { width: number; height: number };\n labelPosition!: IPoint;\n labelLimit: number;\n labelVisible: boolean;\n lastLabelY!: number;\n labelYRange!: [number, number];\n labelText!: string | string[];\n pointA: IPoint;\n pointB: IPoint;\n pointC: IPoint;\n labelLine: IArcLabelLineSpec;\n /**\n * 象限\n */\n quadrant: Quadrant;\n radian: number;\n middleAngle: number;\n innerRadius: number;\n outerRadius: number;\n /** 扇形圆心点坐标 */\n circleCenter: IPoint;\n k: number;\n angle: number;\n\n constructor(\n refDatum: any,\n center: IPoint,\n outerCenter: IPoint,\n quadrant: Quadrant,\n radian: number,\n middleAngle: number,\n innerRadius: number,\n outerRadius: number,\n circleCenter: IPoint\n ) {\n this.refDatum = refDatum;\n this.center = center;\n this.outerCenter = outerCenter;\n this.quadrant = quadrant;\n this.radian = radian;\n this.middleAngle = middleAngle;\n this.innerRadius = innerRadius;\n this.outerRadius = outerRadius;\n this.circleCenter = circleCenter;\n this.labelVisible = true;\n }\n\n getLabelBounds(): IBoundsLike {\n if (!this.labelPosition || !this.labelSize) {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n return {\n x1: this.labelPosition.x - this.labelSize.width / 2,\n y1: this.labelPosition.y - this.labelSize.height / 2,\n x2: this.labelPosition.x + this.labelSize.width / 2,\n y2: this.labelPosition.y + this.labelSize.height / 2\n };\n }\n}\n\ntype PriorityArc = {\n arc: ArcInfo;\n /**\n * 在初始 arc 数组中的索引\n */\n originIndex: number;\n priorityIndex: number;\n};\n\nexport class ArcLabel extends LabelBase {\n name = 'arc-label';\n\n static defaultAttributes: Partial = {\n coverEnable: false,\n spaceWidth: 5,\n layoutArcGap: 6,\n textStyle: {\n visible: true,\n fontSize: 14,\n fontWeight: 'normal',\n fillOpacity: 1,\n // arc boundsPadding 宽度设大会家加剧旋转时,AABBbounds.width 大于无旋转角度的情况,导致 arc 内部标签被缩略的问题\n boundsPadding: [-1, 0, -1, 0],\n ellipsis: true\n },\n position: 'outside',\n line: {\n visible: true,\n line1MinLength: 20,\n line2MinLength: 10\n },\n layout: {\n align: 'arc',\n strategy: 'priority',\n tangentConstraint: true\n }\n };\n\n private _ellipsisWidth: number = 0;\n\n private _arcLeft: Map = new Map();\n private _arcRight: Map = new Map();\n private _line2MinLength: number = 0;\n private _alignOffset: number = 0;\n\n constructor(attributes: ArcLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, ArcLabel.defaultAttributes, restAttributes) });\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (['inside', 'inside-center'].includes(this.attribute.position as string)) {\n return super._overlapping(labels);\n }\n return labels;\n }\n\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position = 'outside',\n offset = 0\n ): { x: number; y: number } | undefined {\n if (!textBounds || !graphicBounds) {\n return;\n }\n return { x: 0, y: 0 };\n }\n\n protected _layout(texts: (IText | IRichText)[]) {\n if (!texts || !texts.length) {\n return;\n }\n\n const labels = super._layout(texts);\n const textBoundsArray = labels.map(label => {\n return this.getGraphicBounds(label as any);\n });\n const ellipsisLabelAttribute = {\n ...this.attribute.textStyle,\n text: '…'\n };\n let ellipsisWidth = Infinity;\n if (ellipsisLabelAttribute.ellipsis !== false) {\n const ellipsisText = this._createLabelText(ellipsisLabelAttribute);\n const ellipsisTextBounds = this.getGraphicBounds(ellipsisText);\n ellipsisWidth = ellipsisTextBounds.x2 - ellipsisTextBounds.x1;\n }\n const data = labels.map(label => label.attribute as LabelItem);\n const currentMarks = Array.from(this._idToGraphic.values());\n this._line2MinLength = isFunction(this.attribute.line.line2MinLength)\n ? (\n this.attribute.line.line2MinLength as (\n texts: IGraphic[],\n arcs: IArc[],\n attrs: Partial\n ) => number\n )(texts, currentMarks as IArc[], this.attribute)\n : (this.attribute.line.line2MinLength as number);\n this._alignOffset =\n (isFunction(this.attribute.layout.alignOffset)\n ? (\n this.attribute.layout.alignOffset as (\n texts: IGraphic[],\n arcs: IArc[],\n attrs: Partial\n ) => number\n )(texts, currentMarks as IArc[], this.attribute)\n : (this.attribute.layout.alignOffset as number)) ?? 0;\n\n const arcs: ArcInfo[] = this.layoutArcLabels(\n this.attribute.position,\n this.attribute,\n currentMarks,\n data,\n textBoundsArray,\n ellipsisWidth\n );\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const basedArc = arcs.find(arc => arc.refDatum?.id === textData.id);\n if (basedArc) {\n const labelAttribute = {\n visible: basedArc.labelVisible,\n x: basedArc.labelPosition.x,\n y: basedArc.labelPosition.y,\n angle: basedArc.angle,\n points:\n basedArc.pointA && basedArc.pointB && basedArc.pointC\n ? [basedArc.pointA, basedArc.pointB, basedArc.pointC]\n : undefined,\n line: basedArc.labelLine\n };\n\n if (labels[i].type === 'richtext') {\n (labelAttribute as unknown as IRichTextAttribute).width =\n basedArc.labelLimit ?? (labels[i].attribute as IRichTextAttribute).width;\n } else {\n (labelAttribute as unknown as ITextAttribute).maxLineWidth =\n basedArc.labelLimit ?? (labels[i].attribute as ITextAttribute).maxLineWidth;\n }\n\n if (basedArc.refArc && basedArc.refArc.type === 'arc3d') {\n (labelAttribute as any).anchor3d = [\n basedArc.circleCenter.x - labelAttribute.x,\n basedArc.circleCenter.y - labelAttribute.y\n ];\n (labelAttribute as any).beta = basedArc.refArc.attribute.beta;\n }\n\n labels[i].setAttributes(labelAttribute);\n }\n }\n return labels;\n }\n\n protected layoutArcLabels(\n position: BaseLabelAttrs['position'],\n attribute: any,\n currentMarks?: IGraphic[],\n data?: LabelItem[],\n textBoundsArray?: any,\n ellipsisWidth?: number\n ) {\n // setArcs : 根据 arc 设置 datum 中对应的标签数据\n this._arcLeft.clear();\n this._arcRight.clear();\n this._ellipsisWidth = ellipsisWidth;\n\n let maxRadius = 0;\n currentMarks.forEach(currentMarks => {\n if ((currentMarks.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMarks.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n data.forEach((d, index) => {\n const currentMark = this._idToGraphic.get(d.id);\n const graphicAttribute = currentMark.attribute as IArcGraphicAttribute;\n const center = { x: graphicAttribute?.x ?? 0, y: graphicAttribute?.y ?? 0 };\n if (!isNil(data[index]) && !isNil(textBoundsArray[index])) {\n const item = data[index] ? data[index] : null;\n const textBounds = textBoundsArray[index] ? textBoundsArray[index] : { x1: 0, x2: 0, y1: 0, y2: 0 };\n\n const arcMiddleAngle = (graphicAttribute.startAngle + graphicAttribute.endAngle) / 2;\n const intervalAngle = graphicAttribute.endAngle - graphicAttribute.startAngle;\n const arcQuadrant = computeQuadrant(graphicAttribute.endAngle - intervalAngle / 2);\n\n const arcMiddle = polarToCartesian(center, graphicAttribute.outerRadius, arcMiddleAngle);\n const outerArcMiddle = polarToCartesian(center, maxRadius + attribute.line.line1MinLength, arcMiddleAngle);\n const arc = new ArcInfo(\n item,\n arcMiddle,\n outerArcMiddle,\n arcQuadrant,\n intervalAngle,\n arcMiddleAngle,\n graphicAttribute.innerRadius,\n graphicAttribute.outerRadius,\n center\n );\n arc.refArc = currentMark as IArc;\n arc.pointA = polarToCartesian(\n center as IPoint,\n this.computeDatumRadius(center.x * 2, center.y * 2, graphicAttribute.outerRadius),\n arc.middleAngle\n );\n\n arc.labelSize = {\n width: textBounds.x2 - textBounds.x1,\n height: textBounds.y2 - textBounds.y1\n };\n\n if (isQuadrantRight(arc.quadrant)) {\n this._arcRight.set(arc.refDatum, arc);\n } else if (isQuadrantLeft(arc.quadrant)) {\n this._arcLeft.set(arc.refDatum, arc);\n }\n }\n });\n\n // layoutLabels : 执行内部/外部标签的布局计算\n const leftArcs = Array.from(this._arcLeft.values());\n const rightArcs = Array.from(this._arcRight.values());\n const arcs: ArcInfo[] = [];\n switch (position) {\n case 'inside':\n case 'inside-inner':\n case 'inside-outer':\n case 'inside-center':\n arcs.push(...this._layoutInsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutInsideLabels(leftArcs, attribute, currentMarks));\n break;\n case 'outside':\n default:\n arcs.push(...this._layoutOutsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutOutsideLabels(leftArcs, attribute, currentMarks));\n break;\n }\n return arcs;\n }\n\n /**\n * 布局内部标签\n */\n private _layoutInsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const labelConfig = attribute;\n const spaceWidth = labelConfig.spaceWidth as number;\n const position = labelConfig.position ?? 'inside';\n const offsetRadius = labelConfig.offsetRadius ?? -spaceWidth;\n\n arcs.forEach((arc: ArcInfo) => {\n const { labelSize, radian } = arc;\n const innerRadius = arc.innerRadius;\n const outerRadius = arc.outerRadius;\n const minRadian = connectLineRadian(outerRadius, labelSize.height);\n let limit;\n if (radian < minRadian) {\n limit = 0;\n } else {\n let minRadius;\n if (radian >= Math.PI) {\n minRadius = innerRadius;\n } else {\n minRadius = Math.max(innerRadius, labelSize.height / 2 / Math.tan(radian / 2));\n }\n limit = outerRadius - minRadius - spaceWidth;\n }\n // TODO: 对于不旋转的内部标签设置 limit 为 outerRadius\n if (labelConfig.rotate !== true) {\n limit = outerRadius - spaceWidth;\n }\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n const labelWidth = Math.min(limit, arc.labelSize.width);\n const align = this._computeAlign(arc, attribute);\n let alignOffset = 0;\n if (position === 'inside') {\n alignOffset = align === 'left' ? labelWidth : align === 'right' ? 0 : labelWidth / 2;\n }\n let labelRadius;\n if (position === 'inside-inner') {\n labelRadius = innerRadius - offsetRadius + alignOffset;\n } else if (position === 'inside-center') {\n labelRadius = innerRadius + (outerRadius - innerRadius) / 2;\n } else {\n labelRadius = outerRadius + offsetRadius - alignOffset;\n }\n arc.labelPosition = polarToCartesian(arc.circleCenter, labelRadius, arc.middleAngle);\n arc.labelLimit = labelWidth;\n if (!isGreater(labelWidth, 0)) {\n arc.labelVisible = false;\n }\n\n if (labelConfig.rotate !== false) {\n arc.angle = attribute.textStyle?.angle ?? arc.middleAngle;\n let offsetAngle = labelConfig.offsetAngle ?? 0;\n if (['inside-inner', 'inside-outer'].includes(position as string)) {\n offsetAngle += Math.PI / 2;\n }\n arc.angle += offsetAngle;\n }\n });\n return arcs;\n }\n\n /**\n * 布局外部标签\n */\n private _layoutOutsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const height = center.y * 2;\n const labelLayout = attribute.layout;\n const spaceWidth = attribute.spaceWidth as number;\n\n arcs.forEach(arc => {\n const direction = isQuadrantLeft(arc.quadrant) ? -1 : 1;\n arc.labelPosition = {\n x: arc.outerCenter.x + direction * (arc.labelSize.width / 2 + this._line2MinLength + spaceWidth),\n y: arc.outerCenter.y\n };\n });\n arcs.sort((a, b) => {\n return a.labelPosition.y - b.labelPosition.y;\n });\n\n if (attribute.coverEnable !== false || labelLayout.strategy === 'none') {\n for (const arc of arcs) {\n const { labelPosition, labelSize } = arc;\n arc.labelLimit = labelSize.width;\n arc.pointB = isQuadrantLeft(arc.quadrant)\n ? {\n x: labelPosition.x + labelSize.width / 2 + this._line2MinLength + spaceWidth,\n y: labelPosition.y\n }\n : {\n x: labelPosition.x - labelSize.width / 2 - this._line2MinLength - spaceWidth,\n y: labelPosition.y\n };\n this._computeX(arc, attribute, currentMarks);\n }\n if (attribute.coverEnable === false && labelLayout.strategy === 'none') {\n this._coverLabels(arcs);\n }\n } else {\n // 由于可能存在多行标签,这里仅仅估计一个最大标签数量用于避免冗余计算\n const maxLabels = height / ((attribute.textStyle?.fontSize as number) || 16);\n // 布局圆弧半径\n this._adjustY(arcs, maxLabels, attribute, currentMarks);\n\n const { minY, maxY } = arcs.reduce(\n (yInfo, arc) => {\n const { y1, y2 } = arc.getLabelBounds();\n yInfo.minY = Math.max(0, Math.min(y1, yInfo.minY));\n yInfo.maxY = Math.min(height, Math.max(y2, yInfo.maxY));\n return yInfo;\n },\n { minY: Infinity, maxY: -Infinity }\n );\n const halfY = Math.max(Math.abs(height / 2 - minY), Math.abs(maxY - height / 2));\n // pointB 与 label 的 y 值相同,但是 label 的 x 值依赖于 pointB 的 x 值\n const r = this._computeLayoutRadius(halfY, attribute, currentMarks);\n for (const arc of arcs) {\n this._computePointB(arc, r, attribute, currentMarks);\n this._computeX(arc, attribute, currentMarks);\n }\n }\n const width = center.x * 2;\n arcs.forEach(arc => {\n if (\n arc.labelVisible &&\n (isLess(arc.pointB.x, this._line2MinLength + spaceWidth) ||\n isGreater(arc.pointB.x, width - this._line2MinLength - spaceWidth))\n ) {\n arc.labelVisible = false;\n }\n arc.angle = attribute.textStyle?.angle ?? 0;\n if (attribute.offsetAngle) {\n arc.angle += attribute.offsetAngle;\n }\n\n arc.labelLine = {\n ...attribute.line,\n visible: arc.labelVisible\n };\n });\n\n return arcs;\n }\n\n /**\n * 计算 pointC 以及 label limit 与 position\n */\n private _computeX(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotLayout = {\n x1: 0,\n x2: this.attribute.width,\n y1: 0,\n y2: this.attribute.height\n };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n\n const line1MinLength = attribute.line.line1MinLength as number;\n const labelLayoutAlign = attribute.layout?.align;\n const spaceWidth = attribute.spaceWidth as number;\n\n const { labelPosition, quadrant, pointB } = arc;\n if (!isValidNumber(pointB.x * pointB.y)) {\n arc.pointC = { x: NaN, y: NaN };\n labelPosition.x = NaN;\n arc.labelLimit = 0;\n }\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const flag = isQuadrantLeft(quadrant) ? -1 : 1;\n let cx: number = 0;\n let limit =\n (flag > 0 ? plotLayout.x2 - pointB.x : pointB.x - plotLayout.x1) +\n this._alignOffset -\n this._line2MinLength -\n spaceWidth;\n\n if (labelLayoutAlign === 'labelLine') {\n cx = (radius + line1MinLength + this._line2MinLength) * flag + (center as IPoint).x;\n limit = (flag > 0 ? plotLayout.x2 - cx : cx - plotLayout.x1) - spaceWidth;\n }\n\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n let labelWidth = Math.min(limit, arc.labelSize.width);\n switch (labelLayoutAlign) {\n case 'labelLine':\n break;\n case 'edge':\n cx = flag > 0 ? plotLayout.x2 - labelWidth - spaceWidth : plotLayout.x1 + labelWidth + spaceWidth;\n break;\n case 'arc':\n default:\n cx = pointB.x + flag * this._line2MinLength;\n break;\n }\n labelWidth = Math.max(this._ellipsisWidth, labelWidth);\n const needAdjustLimit = labelWidth < arc.labelSize.width - 1;\n\n if (needAdjustLimit) {\n arc.labelLimit = labelWidth;\n } else {\n arc.labelLimit = null;\n }\n\n arc.pointC = { x: cx, y: labelPosition.y };\n\n const align = this._computeAlign(arc, attribute);\n const targetCenterOffset = getAlignOffset(align) * (needAdjustLimit ? labelWidth : arc.labelSize.width);\n\n if (labelLayoutAlign === 'edge') {\n // edge 模式下的多行文本对齐方向与其他模式相反\n // 贴近画布边缘的布局结果可能会由于 cx 的小数 pixel 导致被部分裁剪,因此额外做计算\n labelPosition.x =\n (flag > 0 ? plotLayout.x2 : plotLayout.x1) - flag * targetCenterOffset + flag * this._alignOffset;\n\n arc.pointC.x += flag * this._alignOffset;\n } else {\n labelPosition.x = cx + flag * (this._alignOffset + spaceWidth + targetCenterOffset);\n }\n }\n\n private _computeAlign(arc: ArcInfo, attribute: any) {\n const labelConfig = attribute;\n // 暂时兼容两种配置方式\n const textAlign = labelConfig.textStyle?.textAlign ?? labelConfig.textStyle?.align;\n const layoutAlign = labelConfig.layout?.textAlign ?? labelConfig.layout?.align;\n if (labelConfig.position !== 'inside') {\n if (isNil(textAlign) || textAlign === 'auto') {\n // edge 模式下沿着画布对齐,与 labelLine & edge 模式相反\n if (layoutAlign === 'edge') {\n return isQuadrantLeft(arc.quadrant) ? 'left' : 'right';\n }\n return isQuadrantLeft(arc.quadrant) ? 'right' : 'left';\n }\n return textAlign;\n }\n return isNil(textAlign) || textAlign === 'auto' ? 'center' : textAlign;\n }\n\n private _getFormatLabelText(value: any, limit?: number) {\n return value?.text ?? '';\n }\n\n /**\n * 调整标签位置的 Y 值\n */\n private _adjustY(arcs: ArcInfo[], maxLabels: number, attribute: any, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n const labelLayout = attribute.layout;\n if (labelLayout.strategy === 'vertical') {\n // vertical 策略类似 echarts 方案,没有切线限制策略,没有优先级,执行整体调整没有标签数量限制\n let lastY = 0;\n let delta;\n const len = arcs.length;\n if (len <= 0) {\n return;\n }\n // 偏移 y 值以避免遮挡\n for (let i = 0; i < len; i++) {\n const { y1 } = arcs[i].getLabelBounds();\n delta = y1 - lastY;\n if (isLess(delta, 0)) {\n const index = this._shiftY(arcs, i, len - 1, -delta);\n this._shiftY(arcs, index, 0, delta / 2);\n }\n const { y2 } = arcs[i].getLabelBounds();\n lastY = y2;\n }\n // 将超出上界的标签下移\n const { y1: firstY1 } = arcs[0].getLabelBounds();\n delta = firstY1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, 0, len - 1, -delta);\n }\n for (let i = arcs.length - 1; i >= 0; i--) {\n if (arcs[i].getLabelBounds().y2 > plotRect.height) {\n arcs[i].labelVisible = false;\n } else {\n break;\n }\n }\n } else if (labelLayout.strategy !== 'none') {\n const priorityArcs: PriorityArc[] = arcs.map((arc, i) => {\n return {\n arc,\n originIndex: i,\n priorityIndex: 0\n };\n });\n priorityArcs.sort((a, b) => {\n return b.arc.radian - a.arc.radian;\n });\n priorityArcs.forEach((priorityArc, i) => {\n priorityArc.priorityIndex = i;\n // 首先隐藏所有标签\n priorityArc.arc.labelVisible = false;\n });\n\n let topLabelIndex = Infinity;\n let bottomLabelIndex = -Infinity;\n // 按照优先级依次布局标签\n for (let i = 0; i < maxLabels && i < arcs.length; i++) {\n this._storeY(arcs);\n const arc = priorityArcs[i].arc;\n this._computeYRange(arc, attribute, currentMarks);\n arc.labelVisible = true;\n const curY = arc.labelPosition.y;\n // 寻找标签在布局前垂直方向上的上下邻居,也就是饼图上的邻居关系\n const { lastIndex, nextIndex } = this._findNeighborIndex(arcs, priorityArcs[i]);\n const lastArc = arcs[lastIndex];\n const nextArc = arcs[nextIndex];\n if (lastIndex === -1 && nextIndex !== -1) {\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n } else if (lastIndex !== -1 && nextIndex === -1) {\n const lastY = lastArc.labelPosition.y;\n if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n }\n } else if (lastIndex !== -1 && nextIndex !== -1) {\n const lastY = lastArc.labelPosition.y;\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n } else if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n }\n\n const nextTopIndex = Math.min(topLabelIndex, priorityArcs[i].originIndex);\n const nextBottomIndex = Math.max(bottomLabelIndex, priorityArcs[i].originIndex);\n let delta;\n // 将超出下界的标签上移\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n if (isGreater(delta, 0)) {\n this._shiftY(arcs, nextBottomIndex, 0, -delta);\n }\n // 将超出上界的标签下移\n delta = arcs[nextTopIndex].getLabelBounds().y1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, nextTopIndex, arcs.length - 1, -delta);\n }\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n // 当整体上下移一次之后仍然无法容纳所有标签,则当前标签应当舍去\n if (isGreater(delta, 0)) {\n arc.labelVisible = false;\n this._restoreY(arcs);\n break;\n } else if (labelLayout.tangentConstraint && !this._checkYRange(arcs)) {\n // 当标签由于 Y 方向调节范围过大而舍弃时不应当终止布局过程\n arc.labelVisible = false;\n this._restoreY(arcs);\n } else {\n topLabelIndex = nextTopIndex;\n bottomLabelIndex = nextBottomIndex;\n }\n }\n }\n }\n\n /**\n * 向某一方向调整局部标签的 Y 值\n */\n private _shiftY(arcs: ArcInfo[], start: number, end: number, delta: number) {\n const direction = start < end ? 1 : -1;\n let index = start;\n while (index !== -1) {\n arcs[index].labelPosition.y += delta;\n const nextIndex = this._findNextVisibleIndex(arcs, index, end, direction);\n if (nextIndex >= 0 && nextIndex < arcs.length) {\n const { y1: curY1, y2: curY2 } = arcs[index].getLabelBounds();\n const { y1: nextY1, y2: nextY2 } = arcs[nextIndex].getLabelBounds();\n if ((direction > 0 && curY2 < nextY1) || (direction < 0 && curY1 > nextY2)) {\n return index;\n }\n }\n index = nextIndex;\n }\n return end;\n }\n\n /**\n * 寻找下一个显示标签索引\n */\n private _findNextVisibleIndex(arcs: ArcInfo[], start: number, end: number, direction: number) {\n const diff = (end - start) * direction;\n for (let i = 1; i <= diff; i++) {\n const index = start + i * direction;\n if (arcs[index].labelVisible) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * 计算 pointB,其 y 值在 adjustY 中确定,也即是 label 的 y 值\n */\n private _computePointB(arc: ArcInfo, r: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = labelConfig.line.line1MinLength as number;\n const labelLayout = labelConfig.layout;\n\n if (labelLayout.strategy === 'none') {\n // 不执行躲避策略或者不显示引导线时紧挨着圆弧布局\n arc.pointB = {\n x: arc.outerCenter.x,\n y: arc.outerCenter.y\n };\n } else {\n const center = arc.circleCenter;\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const { labelPosition, quadrant } = arc;\n const outerR = Math.max(radius + line1MinLength, arc.outerRadius);\n const rd = r - outerR;\n // x 为 pointB.x 与圆心的差值\n const x = Math.sqrt(r ** 2 - Math.abs((center as IPoint).y - labelPosition.y) ** 2) - rd;\n if (isValidNumber(x)) {\n arc.pointB = {\n x: (center as IPoint).x + x * (isQuadrantLeft(quadrant) ? -1 : 1),\n y: labelPosition.y\n };\n } else {\n arc.pointB = { x: NaN, y: NaN };\n }\n }\n }\n\n /**\n * 存储当前所有显示标签的 Y 值\n */\n private _storeY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.lastLabelY = arc.labelPosition.y;\n }\n }\n }\n\n /**\n * 计算圆弧切线所限制的标签 Y 值范围\n */\n private _computeYRange(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = attribute.line.line1MinLength as number;\n\n const { width, height } = plotRect;\n\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n // 出现 y 方向挤压过度必然是由于画布上下某一端被占满,此时半径是确定的\n const r = this._computeLayoutRadius(height / 2, attribute, currentMarks);\n // 所有坐标转化到以圆心为原点的坐标系计算\n // 在饼图上左右计算对称,可以全都转化到右侧计算\n const cx = Math.abs(arc.center.x - width / 2);\n const cy = arc.center.y - height / 2;\n let a;\n let b;\n let c;\n if (isClose(width / 2, cx)) {\n a = 0;\n b = 1;\n c = -cy;\n } else if (isClose(height / 2, cy)) {\n a = 1;\n b = 0;\n c = -cx;\n } else {\n // 斜截式转为一般式\n const k = -1 / (cy / cx);\n a = k;\n b = -1;\n c = cy - k * cx;\n }\n const points = lineCirclePoints(a, b, c, line1MinLength + radius - r, 0, r);\n // 由于饼图上切点在布局圆内部,交点必然有两个\n if (points.length < 2) {\n return;\n }\n let min;\n let max;\n if (points[0].x > points[1].x) {\n points.reverse();\n }\n if (points[0].x < 0) {\n if (isClose(points[0].y, points[1].y)) {\n if (\n (isGreater(arc.middleAngle, -Math.PI) && isLess(arc.middleAngle, 0)) ||\n (isGreater(arc.middleAngle, Math.PI) && isLess(arc.middleAngle, Math.PI * 2))\n ) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = height;\n }\n } else if (points[0].y < points[1].y) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = plotRect.height;\n }\n } else {\n min = Math.min(points[0].y, points[1].y) + height / 2;\n max = Math.max(points[0].y, points[1].y) + height / 2;\n }\n arc.labelYRange = [min, max];\n }\n\n /**\n * 计算标签布局圆弧半径,即 pointB 所落在的圆弧\n */\n private _computeLayoutRadius(halfYLength: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n const layoutArcGap = labelConfig.layoutArcGap as number;\n const line1MinLength = labelConfig.line.line1MinLength as number;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const outerR = radius + line1MinLength;\n\n const a = outerR - layoutArcGap;\n\n return Math.max((a ** 2 + halfYLength ** 2) / (2 * a), outerR);\n }\n\n /**\n * 依据初始的标签排序,寻找某一标签上下最近的显示标签索引\n */\n private _findNeighborIndex(arcs: ArcInfo[], priorityArc: PriorityArc) {\n const index = priorityArc.originIndex;\n let lastIndex = -1;\n let nextIndex = -1;\n for (let i = index - 1; i >= 0; i--) {\n if (arcs[i].labelVisible) {\n lastIndex = i;\n break;\n }\n }\n for (let i = index + 1; i < arcs.length; i++) {\n if (arcs[i].labelVisible) {\n nextIndex = i;\n break;\n }\n }\n return {\n lastIndex,\n nextIndex\n };\n }\n\n /**\n * 执行给定标签 Y 值的 shiftDown 以及 shiftUp\n */\n private _twoWayShift(arcs: ArcInfo[], lastArc: ArcInfo, nextArc: ArcInfo, nextIndex: number) {\n const delta = nextArc.getLabelBounds().y1 - lastArc.getLabelBounds().y2;\n if (isLess(delta, 0)) {\n const i = this._shiftY(arcs, nextIndex, arcs.length - 1, -delta);\n this._shiftY(arcs, i, 0, delta / 2);\n }\n }\n\n /**\n * 恢复所有显示标签在之前存储的 Y 值\n */\n private _restoreY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.labelPosition.y = arc.lastLabelY;\n }\n }\n }\n\n /**\n * 检查每个显示的标签的 Y 值是否在切线限制范围内\n */\n private _checkYRange(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n const { labelYRange, labelPosition } = arc;\n if (\n arc.labelVisible &&\n labelYRange &&\n (isLess(labelPosition.y, labelYRange[0]) || isGreater(labelPosition.y, labelYRange[1]))\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 自上至下计算被遮盖的标签\n */\n private _coverLabels(arcs: ArcInfo[]) {\n if (arcs.length <= 1) {\n return;\n }\n let lastBounds = arcs[0].getLabelBounds();\n for (let i = 1; i < arcs.length; i++) {\n const bounds = arcs[i].getLabelBounds();\n if (!checkBoundsOverlap(lastBounds, bounds)) {\n lastBounds = bounds;\n } else {\n arcs[i].labelVisible = false;\n }\n }\n }\n\n protected _getLabelLinePoints(text: IText | IRichText, baseMark?: IGraphic) {\n return (text.attribute as ArcLabelAttrs).points;\n }\n\n protected _createLabelLine(text: IText, baseMark?: IGraphic) {\n const { line = {}, visible } = text.attribute as ArcLabelAttrs;\n const lineGraphic = super._createLabelLine(text, baseMark);\n if (lineGraphic) {\n lineGraphic.setAttributes({\n visible: (line.visible && visible) ?? text.attribute?.visible ?? true,\n lineWidth: line.style?.lineWidth ?? 1\n });\n if (line.smooth) {\n lineGraphic.setAttributes({\n curveType: 'basis'\n });\n }\n\n if (baseMark.type === 'arc3d' && baseMark) {\n const { beta, x, y } = baseMark.attribute;\n lineGraphic.setAttributes({\n beta,\n anchor3d: [x, y]\n });\n }\n }\n\n return lineGraphic;\n }\n\n protected computeRadius(r: number, width?: number, height?: number, k?: number): number {\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * r * (isNil(k) ? 1 : k);\n }\n\n protected computeLayoutRadius(width: number, height: number) {\n return Math.min(width / 2, height / 2);\n }\n\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n return this.attribute.position === 'inside' || this.attribute.position === 'inside-center';\n }\n\n private computeLayoutOuterRadius(r: number, width: number, height: number) {\n return r / (Math.min(width, height) / 2);\n }\n\n private computeDatumRadius(width?: number, height?: number, outerRadius?: any): number {\n const outerRadiusRatio = this.computeLayoutOuterRadius(outerRadius, width, height); //this.getRadius(state)\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * outerRadiusRatio;\n }\n}\n\nexport const registerArcDataLabel = () => {\n registerLabelComponent('arc', ArcLabel);\n};\n","import type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { ILine } from '@visactor/vrender-core';\nimport type { PointLocationCfg } from '../core/type';\nimport type { LineLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingLineOrArea } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\nimport type { ISegment } from '@visactor/vrender-core';\n\nexport class LineLabel extends LabelBase {\n name = 'line-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'end',\n offset: 6\n };\n\n constructor(attributes: LineLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, LineLabel.defaultAttributes, restAttributes) });\n }\n\n protected getGraphicBounds(graphic: ILine, point: Partial = {}, position = 'end') {\n if (!graphic || (graphic.type !== 'line' && graphic.type !== 'area')) {\n return super.getGraphicBounds(graphic, point);\n }\n\n let points = graphic.attribute.points;\n const segments = graphic.attribute.segments;\n\n if (!points && segments && segments.length) {\n points = segments.reduce((res: IPointLike[], seg: ISegment) => {\n return res.concat(seg.points ?? []);\n }, []);\n }\n\n if (!points || points.length === 0) {\n points = [point as IPointLike];\n }\n\n const index = position === 'start' ? 0 : points.length - 1;\n if (!points[index]) {\n return;\n }\n return {\n x1: points[index].x as number,\n x2: points[index].x as number,\n y1: points[index].y as number,\n y2: points[index].y as number\n };\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string = 'end', offset = 0) {\n return labelingLineOrArea(textBounds, graphicBounds, position, offset);\n }\n}\n\nexport const registerLineDataLabel = () => {\n registerLabelComponent('line', LineLabel);\n registerLabelComponent('area', LineLabel);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { SymbolLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingPoint } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\n\nexport class SymbolLabel extends LabelBase {\n name = 'symbol-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'top',\n offset: 5\n };\n\n constructor(attributes: SymbolLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, SymbolLabel.defaultAttributes, restAttributes) });\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n return labelingPoint(textBounds, graphicBounds, position, offset);\n }\n}\n\nexport const registerSymbolDataLabel = () => {\n registerLabelComponent('symbol', SymbolLabel);\n registerLabelComponent('line-data', SymbolLabel);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { calculateAnchorOfBounds, merge } from '@visactor/vutils';\nimport type { RectLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\n\nexport class RectLabel extends LabelBase {\n static tag = 'rect-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'top',\n offset: 5\n };\n\n constructor(attributes: RectLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, RectLabel.defaultAttributes, restAttributes) });\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n if (!textBounds || !graphicBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const { x: anchorX, y: anchorY } = calculateAnchorOfBounds(graphicBounds, position);\n\n let vx = 0;\n let vy = 0;\n\n const isInside = position.includes('inside');\n\n if (position.includes('top')) {\n vy = isInside ? 1 : -1;\n } else if (position.includes('bottom')) {\n vy = isInside ? -1 : 1;\n } else if (position.includes('left')) {\n vx = isInside ? 1 : -1;\n } else if (position.includes('right')) {\n vx = isInside ? -1 : 1;\n }\n\n switch (position) {\n case 'top-right':\n case 'bottom-right':\n vx = -1;\n break;\n case 'top-left':\n case 'bottom-left':\n vx = 1;\n break;\n default:\n break;\n }\n\n const x = anchorX + vx * offset + (vx * width) / 2;\n const y = anchorY + vy * offset + (vy * height) / 2;\n\n return { x, y };\n }\n}\n\nexport const registerRectDataLabel = () => {\n registerLabelComponent('rect', RectLabel);\n};\n","import { Factory } from '../../core/factory';\nimport { GrammarMarkType } from '../enums';\nimport { LargeRects } from './large-rects';\nimport { LargeSymbols } from './large-symbols';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport {\n registerCircle,\n registerArc,\n registerArc3d,\n registerPyramid3d,\n registerArea,\n registerGroup,\n registerImage,\n registerRect3d,\n registerLine,\n registerPath,\n registerRect,\n registerSymbol,\n registerText,\n registerPolygon,\n registerRichtext,\n registerGlyph,\n registerShadowRoot\n} from '@visactor/vrender-kits';\nimport {\n createArc,\n createCircle,\n createArc3d,\n createPyramid3d,\n createArea,\n createGroup,\n createImage,\n createRect3d,\n createLine,\n createPath,\n createRect,\n createSymbol,\n createText,\n createPolygon,\n createRichText,\n createGlyph\n} from '@visactor/vrender-core';\nimport {\n registerRectDataLabel,\n registerLineDataLabel,\n registerArcDataLabel,\n registerSymbolDataLabel\n} from '@visactor/vrender-components';\n\nexport const registerCircleGraphic = () => {\n registerShadowRoot();\n registerCircle();\n Factory.registerGraphic(GrammarMarkType.circle, createCircle);\n};\n\nexport const registerArcGraphic = () => {\n registerShadowRoot();\n registerArc();\n Factory.registerGraphic(GrammarMarkType.arc, createArc);\n registerArcDataLabel();\n};\n\nexport const registerArc3dGraphic = () => {\n registerShadowRoot();\n registerArc3d();\n Factory.registerGraphic(GrammarMarkType.arc3d, createArc3d);\n};\n\nexport const registerPyramid3dGraphic = () => {\n registerShadowRoot();\n registerPyramid3d();\n Factory.registerGraphic(GrammarMarkType.pyramid3d, createPyramid3d);\n};\n\nexport const registerAreaGraphic = () => {\n registerShadowRoot();\n registerArea();\n Factory.registerGraphic(GrammarMarkType.area, createArea);\n registerLineDataLabel();\n registerSymbolDataLabel();\n};\n\nexport const registerGroupGraphic = () => {\n registerShadowRoot();\n registerGroup();\n Factory.registerGraphic(GrammarMarkType.group, createGroup);\n};\n\nexport const registerImageGraphic = () => {\n registerShadowRoot();\n registerImage();\n Factory.registerGraphic(GrammarMarkType.image, createImage);\n};\n\nexport const registerLineGraphic = () => {\n registerShadowRoot();\n registerLine();\n registerLineDataLabel();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.line, createLine);\n};\n\nexport const registerPathGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.path, createPath);\n};\n\nexport const registerRectGraphic = () => {\n registerShadowRoot();\n registerRect();\n registerRectDataLabel();\n Factory.registerGraphic(GrammarMarkType.rect, createRect);\n};\n\nexport const registerRect3dGraphic = () => {\n registerShadowRoot();\n registerRect3d();\n Factory.registerGraphic(GrammarMarkType.rect3d, createRect3d);\n};\n\nexport const registerRuleGraphic = () => {\n registerShadowRoot();\n registerLine();\n Factory.registerGraphic(GrammarMarkType.rule, createLine);\n};\n\nexport const registerShapeGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.shape, createPath);\n};\n\nexport const registerSymbolGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.symbol, createSymbol);\n};\n\nexport const registerTextGraphic = () => {\n registerShadowRoot();\n registerText();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.text, createText);\n};\n\nexport const registerPolygonGraphic = () => {\n registerShadowRoot();\n registerPolygon();\n Factory.registerGraphic(GrammarMarkType.polygon, createPolygon);\n};\n\nexport const registerRichTextGraphic = () => {\n registerShadowRoot();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.richtext, createRichText);\n};\n\nexport const registerCellGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.cell, createSymbol);\n};\n\nexport const registerIntervalGraphic = () => {\n registerShadowRoot();\n registerRect();\n registerRectDataLabel();\n registerArc();\n registerArcDataLabel();\n Factory.registerGraphic(GrammarMarkType.interval, createRect);\n};\n\nexport const registerGlyphGraphic = () => {\n registerShadowRoot();\n registerGlyph();\n Factory.registerGraphic(GrammarMarkType.glyph, createGlyph);\n};\n\nexport const registerLargeRectsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeRects, (attrs: any) => {\n return new LargeRects(attrs) as unknown as IGraphic;\n });\n};\n\nexport const registerLargeSymbolsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeSymbols, (attrs: any) => {\n return new LargeSymbols(attrs) as unknown as IGraphic;\n });\n};\n","import { Factory } from './../core/factory';\nimport type { Maybe } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { warn } from '../util/debug';\nimport type { IGroupMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGroupMark, IMark, IMarkStyle, MarkType } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport type { IGroupMark as IVGrammarGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerGroupGraphic } from '@visactor/vgrammar-core';\nimport type { IMarkCompileOption } from '../compile/mark';\n\nexport class GroupMark extends BaseMark implements IGroupMark {\n static readonly type = MarkTypeEnum.group;\n readonly type = GroupMark.type;\n protected _marks: IMark[] = [];\n getMarks(): IMark[] {\n return this._marks;\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle()\n // clip: false\n };\n return defaultStyle;\n }\n\n protected isMarkExist(mark: IMark): boolean {\n return this._marks.find(m => m.id === mark.id) !== undefined;\n }\n\n addMark(mark: IMark): boolean {\n if (this.isMarkExist(mark)) {\n warn('Mark already exists, add mark failed.');\n return false;\n }\n\n this._marks.push(mark);\n return true;\n }\n\n removeMark(mark: IMark): boolean {\n const index = this._marks.findIndex(m => m.id === mark.id || m.name === mark.name);\n if (index === -1) {\n warn('Mark does not exists, removeMark failed.');\n return false;\n }\n this._marks.splice(index, 1);\n return true;\n }\n\n getMarkInType(type: MarkType) {\n return this._marks.filter(m => m.type === type);\n }\n\n getMarkInId(id: number) {\n return this._marks.find(m => m.id === id);\n }\n\n getMarkInUserId(id: string | number) {\n let result: IMark | undefined;\n this._marks.forEach(m => {\n if (m.getUserId() === id) {\n result = m;\n }\n });\n\n if (!result) {\n for (let i = 0; i < this._marks.length; i++) {\n const mark = this._marks[i];\n if (mark.type === 'group') {\n result = (mark as GroupMark).getMarkInUserId(id);\n }\n if (result) {\n break;\n }\n }\n }\n\n return result;\n }\n\n getMarkInName(name: string) {\n return this._marks.filter(m => m.name === name);\n }\n\n protected _compileProduct(option?: IMarkCompileOption): void {\n // 编译自身\n super._compileProduct(option);\n\n // 设置zIndex\n this._product.configure({\n zIndex: this._markConfig.zIndex\n });\n\n // 编译子元素\n if (!option?.ignoreChildren) {\n this.getMarks().forEach(mark => {\n // TODO: 如果语法元素已创建,先删除再重新指定父结点生成。vgrammar 是否可以动态指定 mark 父结点?\n if (mark.getProduct()) {\n mark.removeProduct();\n }\n mark.compile({ group: this._product });\n });\n }\n }\n}\n\nexport const registerGroupMark = () => {\n registerGroupGraphic();\n Factory.registerMark(GroupMark.type, GroupMark);\n};\n","import { application, clock, WILDCARD } from '@visactor/vrender-core';\nimport type { IEventTarget, IFederatedPointerEvent, FederatedPointerEvent, INode } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { EventEmitter } from '@visactor/vutils';\n\nimport type { DefaultGestureConfig, EmitEventObject, GestureConfig, GestureDirection, GestureEvent } from './interface';\n\n/**\n * 代码参考 https://github.com/hammerjs/hammer.js\n * The MIT License (MIT)\n\n Copyright (C) 2011-2017 by Jorik Tangelder (Eight Media)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nconst PRESS_TIME = 251;\nconst PRESS_THRESHOLD = 9;\nconst SWIPE_VELOCITY = 0.3;\nconst SWIPE_THRESHOLD = 10;\nconst TAP_INTERVAL = 300;\n\nconst calcDirection = (start: IPointLike, end: IPointLike) => {\n const xDistance = end.x - start.x;\n const yDistance = end.y - start.y;\n if (Math.abs(xDistance) > Math.abs(yDistance)) {\n return xDistance > 0 ? 'right' : 'left';\n }\n return yDistance > 0 ? 'down' : 'up';\n};\n\n// 计算2点之间的距离\nconst calcDistance = (point1: IPointLike, point2: IPointLike) => {\n const xDistance = Math.abs(point2.x - point1.x);\n const yDistance = Math.abs(point2.y - point1.y);\n return Math.sqrt(xDistance * xDistance + yDistance * yDistance);\n};\n\nconst getCenter = (points: IPointLike[]) => {\n const pointersLength = points.length;\n\n if (pointersLength === 1) {\n return {\n x: Math.round(points[0].x),\n y: Math.round(points[0].y)\n };\n }\n\n let x = 0;\n let y = 0;\n let i = 0;\n while (i < pointersLength) {\n x += points[i].x;\n y += points[i].y;\n i++;\n }\n\n return {\n x: Math.round(x / pointersLength),\n y: Math.round(y / pointersLength)\n };\n};\n\nexport class Gesture extends EventEmitter {\n element: INode | null;\n\n private cachedEvents: IFederatedPointerEvent[] = [];\n private startTime: number;\n // @ts-ignore\n // eslint-disable-next-line no-undef\n private pressTimeout: NodeJS.Timeout | null;\n private startPoints: IPointLike[] = [];\n // 用来记录当前触发的事件\n private processEvent: Record = {};\n private startDistance: number;\n private center: IPointLike;\n private eventType: string | null;\n private direction: GestureDirection | null;\n\n private lastMoveTime: number;\n private prevMoveTime: number;\n\n private prevMovePoint: IPointLike | null;\n private lastMovePoint: IPointLike | null;\n\n private throttleTimer: number = 0;\n private emitThrottles: EmitEventObject[] = [];\n\n private config: DefaultGestureConfig;\n\n private tapCount;\n private lastTapTime;\n private lastTapTarget: IEventTarget | null = null;\n\n constructor(element: IEventTarget, config: GestureConfig = {}) {\n super();\n this.element = element;\n this.tapCount = 0;\n this.lastTapTime = 0;\n this.config = {\n press: {\n time: config?.press?.time ?? PRESS_TIME,\n threshold: config?.press?.threshold ?? PRESS_THRESHOLD\n },\n swipe: {\n threshold: config?.swipe?.threshold ?? SWIPE_THRESHOLD,\n velocity: config?.swipe?.velocity ?? SWIPE_VELOCITY\n },\n tap: {\n interval: config?.tap?.interval ?? TAP_INTERVAL\n }\n };\n this.initEvents();\n }\n\n initEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n\n element.addEventListener('pointerdown', this.onStart);\n element.addEventListener('pointermove', this.onMove);\n element.addEventListener('pointerup', this.onEnd);\n element.addEventListener('pointerupoutside', this.onEnd);\n }\n\n removeEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n element.removeEventListener('pointerdown', this.onStart);\n element.removeEventListener('pointermove', this.onMove);\n element.removeEventListener('pointerup', this.onEnd);\n element.removeEventListener('pointerupoutside', this.onEnd);\n }\n\n release() {\n this.removeEvents();\n this.element = null;\n }\n\n private onStart = (ev?: FederatedPointerEvent) => {\n this.cachedEvents = [];\n this.startPoints = [];\n this.reset();\n\n this.startTime = clock.now();\n\n const { cachedEvents, startPoints } = this;\n\n if (ev) {\n cachedEvents.push(ev.clone());\n }\n // 重置 startPoints\n startPoints.length = cachedEvents.length;\n for (let i = 0; i < cachedEvents.length; i++) {\n const { x, y } = cachedEvents[i];\n const point = { x, y };\n startPoints[i] = point;\n }\n\n if (startPoints.length === 1) {\n const event = cachedEvents[0] as unknown as GestureEvent;\n this.pressTimeout = setTimeout(() => {\n const eventType = 'press';\n const direction = 'none';\n event.direction = direction;\n event.deltaX = 0;\n event.deltaY = 0;\n event.points = startPoints;\n this.triggerStartEvent(eventType, event);\n this.triggerEvent(eventType, event);\n this.eventType = eventType;\n this.direction = direction;\n this.pressTimeout = null;\n }, this.config.press.time);\n return;\n }\n\n this.startDistance = calcDistance(startPoints[0], startPoints[1]);\n this.center = getCenter([startPoints[0], startPoints[1]]);\n };\n\n private onMove = (ev: FederatedPointerEvent) => {\n this.clearPressTimeout();\n const { startPoints, cachedEvents } = this;\n if (!startPoints.length) {\n return;\n }\n\n const moveEvent = ev.clone() as unknown as GestureEvent;\n const { x, y, pointerId } = moveEvent;\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (pointerId === cachedEvents[i].pointerId) {\n cachedEvents[i] = moveEvent;\n break;\n }\n }\n const point = { x, y };\n const points = cachedEvents.map(cachedEvent => ({ x: cachedEvent.x, y: cachedEvent.y }));\n\n const now = clock.now();\n this.prevMoveTime = this.lastMoveTime;\n this.prevMovePoint = this.lastMovePoint;\n this.lastMoveTime = now;\n this.lastMovePoint = point;\n\n if (startPoints.length === 1) {\n const startPoint = startPoints[0];\n const deltaX = x - startPoint.x;\n const deltaY = y - startPoint.y;\n const direction = this.direction || calcDirection(startPoint, point);\n this.direction = direction;\n\n const eventType = this.getEventType(point);\n moveEvent.direction = direction;\n moveEvent.deltaX = deltaX;\n moveEvent.deltaY = deltaY;\n moveEvent.points = points;\n this.triggerStartEvent(eventType, moveEvent);\n this.triggerEvent(eventType, moveEvent);\n return;\n }\n\n const { startDistance } = this;\n const currentDistance = calcDistance(points[0], points[1]);\n\n // 缩放比例\n moveEvent.scale = currentDistance / startDistance;\n moveEvent.center = this.center;\n moveEvent.points = points;\n this.triggerStartEvent('pinch', moveEvent);\n this.triggerEvent('pinch', moveEvent);\n };\n\n private onEnd = (ev: FederatedPointerEvent) => {\n const endEvent = ev.clone() as unknown as GestureEvent;\n const { cachedEvents, startPoints } = this;\n const points = cachedEvents.map(ev => {\n return { x: ev.x, y: ev.y };\n });\n endEvent.points = points;\n this.triggerEndEvent(endEvent);\n\n if (cachedEvents.length === 1) {\n const now = clock.now();\n const lastMoveTime = this.lastMoveTime;\n // 做这个判断是为了最后一次touchmove后到end前,是否还有一个停顿的过程\n // 100 是拍的一个值,理论这个值会很短,一般不卡顿的话在10ms以内\n if (now - lastMoveTime < 100) {\n const prevMoveTime = this.prevMoveTime || this.startTime;\n const intervalTime = lastMoveTime - prevMoveTime;\n // 时间间隔一定要大于0, 否则计算没意义\n if (intervalTime > 0) {\n const prevMovePoint = this.prevMovePoint || startPoints[0];\n const lastMovePoint = this.lastMovePoint || startPoints[0];\n const distance = calcDistance(prevMovePoint, lastMovePoint);\n // move速率\n const velocity = distance / intervalTime;\n // 0.3 是参考hammerjs的设置\n if (velocity > this.config.swipe.velocity && distance > this.config.swipe.threshold) {\n endEvent.velocity = velocity;\n endEvent.direction = calcDirection(prevMovePoint, lastMovePoint);\n this.triggerEvent('swipe', endEvent);\n\n this.cachedEvents = [];\n this.startPoints = [];\n this.reset();\n return;\n }\n }\n }\n\n if (now - this.startTime < this.config.press.time) {\n if (now - this.lastTapTime < this.config.tap.interval && ev.target === this.lastTapTarget) {\n this.tapCount++;\n } else {\n this.tapCount = 1;\n }\n this.lastTapTime = now;\n this.lastTapTarget = ev.target;\n\n if (this.tapCount === 1) {\n this.triggerEvent('tap', endEvent);\n } else if (this.tapCount === 2) {\n this.triggerEvent('doubletap', endEvent);\n this.tapCount = 0; // reset tapCount after doubletap\n }\n }\n }\n\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (cachedEvents[i].pointerId === endEvent.pointerId) {\n cachedEvents.splice(i, 1);\n startPoints.splice(i, 1);\n break;\n }\n }\n\n this.reset();\n\n // 多指离开 1 指后,重新触发一次start\n if (cachedEvents.length > 0) {\n this.onStart();\n }\n };\n\n private getEventType(point: IPointLike) {\n const { eventType, startTime, startPoints } = this;\n if (eventType === 'press') {\n return eventType;\n }\n\n let type;\n const now = clock.now();\n if (now - startTime > this.config.press.time && calcDistance(startPoints[0], point) < this.config.press.threshold) {\n type = 'press';\n } else {\n type = 'pan';\n }\n this.eventType = type;\n return type;\n }\n\n private enable(eventType: string) {\n this.processEvent[eventType] = true;\n }\n\n // 是否进行中的事件\n private isProcess(eventType: string) {\n return this.processEvent[eventType];\n }\n\n private pushEvent(type: string, ev: GestureEvent) {\n const { emitThrottles } = this;\n const newEvent = { type, ev };\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n if (emitThrottles[i].type === type) {\n emitThrottles.splice(i, 1, newEvent);\n return;\n }\n }\n emitThrottles.push(newEvent);\n }\n\n private clearPressTimeout() {\n if (this.pressTimeout) {\n clearTimeout(this.pressTimeout);\n this.pressTimeout = null;\n }\n }\n\n private reset() {\n this.clearPressTimeout();\n this.startTime = 0;\n this.startDistance = 0;\n this.direction = null;\n this.eventType = null;\n this.prevMoveTime = 0;\n this.prevMovePoint = null;\n this.lastMoveTime = 0;\n this.lastMovePoint = null;\n }\n\n private triggerEvent(type: string, ev: GestureEvent) {\n // 主要是节流处理\n this.pushEvent(type, ev);\n const { throttleTimer, emitThrottles } = this;\n if (throttleTimer) {\n return;\n }\n\n this.throttleTimer = application.global.getRequestAnimationFrame()(() => {\n application.global.getCancelAnimationFrame()(this.throttleTimer);\n this.throttleTimer = null;\n\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n const { type, ev } = emitThrottles[i];\n this.emitEvent(type, ev);\n }\n // 清空\n this.emitThrottles.length = 0;\n });\n }\n\n // 触发start事件\n private triggerStartEvent(type: string, ev: GestureEvent) {\n if (this.isProcess(type)) {\n return;\n }\n this.enable(type);\n this.triggerEvent(`${type}start`, ev);\n }\n\n private triggerEndEvent(ev: GestureEvent) {\n const processEvent = this.processEvent;\n Object.keys(processEvent).forEach(type => {\n this.triggerEvent(`${type}end`, ev);\n if (type === 'press') {\n // pressend 别名,pressup\n this.triggerEvent(`${type}up`, ev);\n }\n delete processEvent[type];\n });\n }\n\n private emitEvent(type: string, e: GestureEvent) {\n if (!this.element) {\n return;\n }\n const events = (this.element as unknown as any)._events;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n\n this.emit(type, e);\n }\n}\n","import type { Dict } from '../type';\n\nexport type KeyOfDistributive = T extends unknown ? keyof T : never;\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n if (!obj) {\n return [];\n }\n // Return type should be `keyof T` but exclude `number`, becuase\n // `Object.keys` only return string rather than `number | string`.\n type TKeys = KeyOfDistributive & string;\n if (Object.keys) {\n return Object.keys(obj) as TKeys[];\n }\n const keyList: TKeys[] = [];\n for (const key in obj) {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.hasOwnProperty(key)) {\n keyList.push(key as any);\n }\n }\n return keyList;\n}\n\nexport function defaults, S extends Dict>(target: T, source: S, overlay?: boolean): T & S {\n const keysArr = keys(source);\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n if (overlay ? source[key] != null : (target as T & S)[key] == null) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n return target as T & S;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function mixin(target: T | Function, source: S | Function, override: boolean = true) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n target = 'prototype' in target ? target.prototype : target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n source = 'prototype' in source ? source.prototype : source;\n // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n // TODO: Determine if source is ES6 class?\n if (Object.getOwnPropertyNames) {\n const keyList = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keyList.length; i++) {\n const key = keyList[i];\n if (key !== 'constructor') {\n if (override ? (source as any)[key] != null : (target as any)[key] == null) {\n (target as any)[key] = (source as any)[key];\n }\n }\n }\n } else {\n defaults(target as Dict, source as Dict, override);\n }\n}\n","import { HOOK_EVENT } from '../graph/enums';\nimport type { IView, AnimationEvent, IMark, IAnimationConfig, IViewAnimate } from '../types';\n\nexport class ViewAnimate implements IViewAnimate {\n private _view: IView;\n // animation start/end events are triggered on specific animation configuration\n private _animations: { config: IAnimationConfig; mark: IMark }[] = [];\n private _additionalAnimateMarks: IMark[] = [];\n private isEnabled: boolean = true;\n\n constructor(view: IView) {\n this._view = view;\n\n this._view.addEventListener(HOOK_EVENT.ANIMATION_START, this._onAnimationStart);\n this._view.addEventListener(HOOK_EVENT.ANIMATION_END, this._onAnimationEnd);\n }\n\n stop() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.stop?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n pause() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.pause?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.pause?.();\n }\n });\n return this;\n }\n\n resume() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.resume?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.resume?.();\n }\n });\n return this;\n }\n\n enable() {\n this.isEnabled = true;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enable?.();\n });\n return this;\n }\n\n disable() {\n this.isEnabled = false;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disable?.();\n });\n // stop all addition animations when animate is disabled\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n enableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enableAnimationState?.(state);\n });\n return this;\n }\n\n disableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disableAnimationState?.(state);\n });\n return this;\n }\n\n isAnimating() {\n return (\n this._animations.length !== 0 || this._additionalAnimateMarks.some(mark => mark?.animate?.isAnimating() || false)\n );\n }\n\n animate() {\n if (!this.isEnabled) {\n return this;\n }\n\n this._view.traverseMarkTree(\n mark => {\n if (mark.isUpdated && mark.animate) {\n mark.animate.animate();\n }\n mark.cleanExitElements();\n mark.isUpdated = false;\n },\n null,\n true\n );\n return this;\n }\n\n animateAddition(additionMark: IMark) {\n const animate = additionMark.animate?.animate();\n\n if (animate && animate.isAnimating()) {\n this._additionalAnimateMarks.push(additionMark);\n }\n return this;\n }\n\n private _onAnimationStart = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_START, {});\n }\n this._animations = this._animations.concat({ config: event.animationConfig, mark: event.mark });\n };\n\n private _onAnimationEnd = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n this._animations = this._animations.filter(animation => {\n return animation.config !== event.animationConfig || animation.mark !== event.mark;\n });\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_END, {});\n }\n };\n\n release() {\n this._additionalAnimateMarks = [];\n this._animations = [];\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_START, this._onAnimationStart);\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_END, this._onAnimationEnd);\n this._view = null;\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport View from './View';\nimport { ViewAnimate } from './animate';\nimport type { IViewAnimate } from '../types/animate';\nimport type { IView } from '../types';\n\nclass ViewAnimateMixin {\n animate: IViewAnimate;\n\n initAnimate(view: IView) {\n this.animate = new ViewAnimate(view);\n\n return this.animate;\n }\n}\n\nexport const registerViewAnimateAPI = () => {\n mixin(View, ViewAnimateMixin);\n};\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, AttributeUpdateType, NOWORK_ANIMATE_ATTR } from '@visactor/vrender-core';\nimport { isArray, isFunction, isNil, isObject, isValid } from '@visactor/vutils';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationEffect,\n IAnimationParameters,\n IElement,\n IGlyphElement,\n IParsedAnimationAttrs\n} from '../../types';\nimport { isValidPointsChannel } from '../attributes/helpers';\nimport { Factory } from '../../core/factory';\n\nconst transformAnimationAttributes = (attributes: IParsedAnimationAttrs, element: IElement): IParsedAnimationAttrs => {\n if (!attributes) {\n return null;\n }\n\n if (attributes.from) {\n const from = attributes.from;\n const fromKeys = Object.keys(from);\n fromKeys.forEach(channel => {\n if (isNil(from[channel])) {\n delete from[channel];\n }\n });\n const computePoints = isValidPointsChannel(fromKeys, element.mark.markType) && !isValid(from.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, from) }));\n attributes.from = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n if (attributes.to) {\n const to = attributes.to;\n const toKeys = Object.keys(to);\n toKeys.forEach(channel => {\n if (isNil(to[channel])) {\n delete to[channel];\n }\n });\n const computePoints = isValidPointsChannel(toKeys, element.mark.markType) && !isValid(to.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, to) }));\n attributes.to = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n\n return attributes;\n};\n\nexport function typeAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n // const parameters =\n const options = isFunction(effect.options)\n ? effect.options.call(null, element.getDatum(), element, parameters)\n : effect.options;\n if (!effect.type || !Factory.getAnimationType(effect.type)) {\n return null;\n }\n const attributes = Factory.getAnimationType(effect.type)(element as IGlyphElement, options, animationParameters);\n\n return transformAnimationAttributes(attributes, element);\n}\n\nconst parseChannelValue = (\n element: IElement,\n channel: string,\n channelValue: any,\n animationParameters: IAnimationParameters,\n parameters: any\n) => {\n return isFunction(channelValue) ? channelValue(element.getDatum(), element, parameters) : channelValue;\n};\n\nexport function channelAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n const channel = effect.channel;\n let attributes: IParsedAnimationAttrs = null;\n\n if (isArray(channel)) {\n attributes = channel.reduce(\n (res, key) => {\n res.from[key] = element.getGraphicAttribute(key, true);\n res.to[key] = element.getGraphicAttribute(key, false);\n return res;\n },\n { from: {}, to: {} }\n );\n } else if (isObject(channel)) {\n attributes = Object.keys(channel).reduce(\n (res, key) => {\n const hasFrom = !isNil(channel[key]?.from);\n const hasTo = !isNil(channel[key]?.to);\n\n if (hasFrom || hasTo) {\n res.from[key] = hasFrom\n ? parseChannelValue(element, key, channel[key].from, animationParameters, parameters)\n : undefined;\n res.to[key] = hasTo\n ? parseChannelValue(element, key, channel[key].to, animationParameters, parameters)\n : element.getGraphicAttribute(key, false);\n }\n\n return res;\n },\n { from: {}, to: {} }\n );\n }\n\n return transformAnimationAttributes(attributes, element);\n}\n\nexport class CustomInterpolator extends ACustomAnimate {\n private _element: IElement;\n private _interpolator?: IAnimationChannelInterpolator;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { interpolator: IAnimationChannelInterpolator; element: IElement; parameters?: any }\n ) {\n super(from, to, duration, easing, params);\n this._interpolator = params?.interpolator;\n this._element = params?.element;\n }\n\n onBind() {\n this.from = this.from ?? {};\n this.to = this.to ?? {};\n }\n\n getEndProps(): void | Record {\n return this.to;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._interpolator || !this._element) {\n return;\n }\n this._interpolator.call(\n this,\n ratio,\n this.from,\n this.to,\n out,\n this._element.getDatum(),\n this._element,\n this.params.parameters\n );\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGraphic;\n\n private _fromAttribute: any;\n private _toAttribute: any;\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind() {\n const excludedChannelMap = (this.target.constructor as any).NOWORK_ANIMATE_ATTR ?? NOWORK_ANIMATE_ATTR;\n const excludedChannels = Object.keys(excludedChannelMap).filter(channel => excludedChannelMap[channel] !== 0);\n this.subAnimate.animate.preventAttrs(excludedChannels);\n\n const from = Object.assign({}, this.from);\n const to = Object.assign({}, this.to);\n const animatedChannels: string[] = [];\n Object.keys(to).forEach(k => {\n if (excludedChannels.includes(k)) {\n from[k] = to[k];\n this.from[k] = to[k];\n } else if (isNil(from[k])) {\n from[k] = this.target.getComputedAttribute(k);\n } else {\n animatedChannels.push(k);\n }\n });\n\n // prevent attributes at the animation invoking time\n this.target.animates.forEach(a => {\n if (a !== this.subAnimate.animate) {\n a.preventAttrs(animatedChannels);\n }\n });\n\n this._fromAttribute = from;\n this._toAttribute = to;\n }\n\n onStart(): void {\n if (this._fromAttribute) {\n const from = {};\n\n // apply attribute which has not been prevented\n Object.keys(this._fromAttribute).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n from[key] = this._fromAttribute[key];\n }\n });\n\n this.target.setAttributes(from, !1, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio: 0,\n end: !1\n }\n });\n }\n }\n\n onEnd(): void {\n if (this._toAttribute) {\n const out = {};\n\n // apply attribute which has not been prevented\n Object.keys(this._toAttribute).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n out[key] = this._toAttribute[key];\n }\n });\n\n this.target.setAttributes(out, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n }\n }\n\n update(end: boolean, ratio: number, out: Record): void {\n if (this.updateCount === 0) {\n this.onFirstRun();\n }\n this.updateCount += 1;\n\n // Hack: waiting for canopus to remove invalid key when updating\n const lastProps = this.step.getLastProps();\n Object.keys(lastProps).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n out[key] = lastProps[key];\n }\n });\n this.onUpdate(end, ratio, out);\n if (end) {\n this.onEnd();\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this._toAttribute,\n this._fromAttribute\n );\n }\n}\n","import { isNil, isValidNumber } from '@visactor/vutils';\nimport type { IAnimate as IGraphicAnimate } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, Animate, AnimateGroup, AnimateMode } from '@visactor/vrender-core';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationCustomConstructor,\n IAnimationTimeline,\n IAnimator,\n IAnimatorOptions,\n IAnimationUnit,\n IAnimationParameters,\n IAnimationTimeSlice,\n IElement,\n IAnimationEffect\n} from '../../types';\nimport { AttributeAnimate, channelAnimationAttributes, CustomInterpolator, typeAnimationAttributes } from './attribute';\n\nAnimate.mode |= AnimateMode.SET_ATTR_IMMEDIATELY;\n\nlet GlobalAnimatorId = 0;\n\nconst isCustomAnimateCtor = (custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor) => {\n if (isNil(custom) || isNil(custom.prototype)) {\n return false;\n }\n const prototype = custom.prototype ?? {};\n return (\n prototype instanceof ACustomAnimate ||\n // similar to ACustomAnimate, apply for different vrender version\n ('onBind' in prototype && 'onStart' in prototype && 'onEnd' in prototype && 'onUpdate' in prototype)\n );\n};\n\nexport class Animator implements IAnimator {\n id: number = GlobalAnimatorId++;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean = false;\n\n private unit: IAnimationUnit;\n private runnings: IGraphicAnimate[] = [];\n private callbackFunction: (...args: any[]) => any;\n\n constructor(\n element: IElement,\n unit: IAnimationUnit,\n animationOptions: {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n }\n ) {\n this.element = element;\n this.animationOptions = animationOptions;\n this.unit = unit;\n }\n\n callback(callbackFunction: (...args: any[]) => void): this {\n this.callbackFunction = callbackFunction;\n return this;\n }\n\n animate(animationParameters: IAnimationParameters, parameters: any): this {\n this.isAnimating = true;\n\n this.animateElement(animationParameters, parameters);\n\n // if no valid running, end animating immediately\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n return this;\n }\n\n stop(stopState?: 'start' | 'end', invokeCallback: boolean = true): this {\n // FIXME: wait for VRender to fix 'end' parameter\n this.runnings.forEach(running => running.stop(stopState));\n this.animationEnd(invokeCallback);\n return this;\n }\n\n pause(): this {\n this.runnings.forEach(running => running.pause());\n return this;\n }\n\n resume(): this {\n this.runnings.forEach(running => running.resume());\n return this;\n }\n\n startAt(startTime: number): this {\n this.runnings.forEach(running => {\n const initialDelay = this.unit.initialDelay;\n running.startAt(initialDelay + startTime);\n });\n return this;\n }\n\n getTotalAnimationTime() {\n const timeLineDuration = this.unit.initialDelay + this.unit.loopDuration * this.unit.loopCount;\n return this.unit.totalTime ?? timeLineDuration;\n }\n\n getEndAttributes() {\n return this.runnings.reduce((attributes, running) => {\n return Object.assign(attributes, running.getEndProps());\n }, {} as Record);\n }\n\n private animationEnd(invokeCallback: boolean = true) {\n this.isAnimating = false;\n this.runnings = null;\n if (invokeCallback) {\n this.callbackFunction?.call(null);\n }\n }\n\n private animateElement(animationParameters: IAnimationParameters, parameters: any) {\n const graphicItem = this.element.getGraphicItem();\n\n if (!graphicItem) {\n return;\n }\n\n const graphicAnimate: IGraphicAnimate = graphicItem.animate();\n this.runnings.push(graphicAnimate);\n // initialDelay is only used at first loop\n graphicAnimate.startAt(this.unit.initialDelay);\n // execute loop animation\n graphicAnimate.wait(this.unit.loopDelay);\n this.unit.timeSlices.forEach(timeSlice => {\n this.animateTimeSlice(graphicAnimate, timeSlice, animationParameters, parameters);\n });\n graphicAnimate.wait(this.unit.loopDelayAfter);\n\n graphicAnimate.loop(this.unit.loopCount - 1);\n\n if (isValidNumber(this.unit.totalTime)) {\n // FIXME: use VRender api instead after VRender refactor is finished\n setTimeout(() => {\n if (graphicAnimate) {\n graphicAnimate.stop('end');\n }\n }, this.unit.totalTime);\n }\n\n graphicAnimate.onEnd(() => {\n this.runnings = this.runnings.filter(running => running !== graphicAnimate);\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n });\n }\n\n private animateTimeSlice(\n graphicAnimate: IGraphicAnimate,\n timeSlice: IAnimationTimeSlice,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n const delay = timeSlice.delay as number;\n const delayAfter = timeSlice.delayAfter as number;\n const duration = timeSlice.duration as number;\n const effects = timeSlice.effects as IAnimationEffect[];\n\n // wait in loop animation before animation starts\n if (delay > 0) {\n graphicAnimate.wait(delay);\n }\n\n if (effects.length < 0) {\n graphicAnimate.wait(duration);\n } else {\n const customAnimates = effects\n .map((effect, index) => {\n const attributes =\n (effect.type\n ? typeAnimationAttributes(this.element, effect, animationParameters, parameters)\n : effect.channel\n ? channelAnimationAttributes(this.element, effect, animationParameters, parameters)\n : undefined) ?? {};\n\n const customOption = attributes.custom || effect?.custom;\n const customParametersOption = attributes?.customParameters || effect?.customParameters;\n\n if (\n attributes.from &&\n Object.keys(attributes.from).length &&\n this.unit &&\n this.animationOptions.timeline.controlOptions.immediatelyApply &&\n this.element.mark.markType !== 'component'\n ) {\n this.element.getGraphicItem().setAttributes(attributes.from);\n }\n\n const isCustomAnimate = isCustomAnimateCtor(customOption);\n const isCustomInterpolator = !isNil(customOption) && !isCustomAnimateCtor(customOption);\n\n if (isCustomInterpolator) {\n return new CustomInterpolator(attributes.from, attributes.to, duration, effect.easing, {\n interpolator: customOption as IAnimationChannelInterpolator,\n element: this.element,\n parameters: customParametersOption\n });\n } else if (isCustomAnimate) {\n return new (customOption as IAnimationCustomConstructor)(\n attributes.from,\n attributes.to,\n duration,\n effect.easing,\n customParametersOption\n );\n } else if (attributes.to) {\n return new AttributeAnimate(attributes.from, attributes.to, duration, effect.easing);\n }\n })\n .filter(animate => !isNil(animate));\n\n if (customAnimates.length === 1) {\n graphicAnimate.play(customAnimates[0]);\n } else if (customAnimates.length > 1) {\n graphicAnimate.play(new AnimateGroup(duration, customAnimates));\n }\n }\n\n if (delayAfter > 0) {\n graphicAnimate.wait(delayAfter);\n }\n }\n}\n","import { array, isFunction, isNil, merge } from '@visactor/vutils';\nimport type { IElement } from '../../types';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n IParsedAnimationConfig,\n MarkFunctionValueType\n} from '../../types/animate';\nimport {\n DefaultAnimationControlOptions,\n DefaultAnimationDelay,\n DefaultAnimationDelayAfter,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationLoop,\n DefaultAnimationOneByOne,\n DefaultAnimationStartTime\n} from '../constants';\n\nfunction transformToTimelineConfig(animationConfig: IAnimationConfig): IAnimationTimeline {\n if (isNil((animationConfig as IAnimationTimeline).timeSlices)) {\n const typeConfig = animationConfig as IAnimationTypeConfig;\n // transform type animation config into timeline animation config\n return {\n startTime: typeConfig.startTime ?? DefaultAnimationStartTime,\n totalTime: typeConfig.totalTime,\n oneByOne: typeConfig.oneByOne ?? DefaultAnimationOneByOne,\n loop: typeConfig.loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, typeConfig.controlOptions ?? {}),\n timeSlices: [\n {\n duration: typeConfig.duration ?? DefaultAnimationDuration,\n delay: typeConfig.delay ?? DefaultAnimationDelay,\n delayAfter: typeConfig.delayAfter ?? DefaultAnimationDelayAfter,\n effects: [\n {\n type: typeConfig.type,\n channel: typeConfig.channel,\n custom: typeConfig.custom,\n easing: typeConfig.easing ?? DefaultAnimationEasing,\n customParameters: typeConfig.customParameters,\n options: typeConfig.options\n }\n ]\n }\n ]\n };\n }\n\n const timeSlices = array((animationConfig as IAnimationTimeline).timeSlices);\n const formattedTimeSlices = timeSlices.filter(timeSlice => {\n return timeSlice.effects && array(timeSlice.effects).filter(effect => effect.channel || effect.type).length;\n });\n\n if (formattedTimeSlices.length) {\n // fill up default animation config\n return {\n startTime: (animationConfig as IAnimationTimeline).startTime ?? DefaultAnimationStartTime,\n totalTime: (animationConfig as IAnimationTimeline).totalTime,\n oneByOne: (animationConfig as IAnimationTimeline).oneByOne ?? DefaultAnimationOneByOne,\n loop: (animationConfig as IAnimationTimeline).loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, animationConfig.controlOptions ?? {}),\n timeSlices: formattedTimeSlices.map(timeSlice => {\n return {\n duration: timeSlice.duration,\n delay: timeSlice.delay ?? DefaultAnimationDelay,\n delayAfter: timeSlice.delayAfter ?? DefaultAnimationDelayAfter,\n effects: array(timeSlice.effects)\n .filter(effect => effect.channel || effect.type)\n .map(effect => {\n return {\n type: effect.type,\n channel: effect.channel,\n custom: effect.custom,\n easing: effect.easing ?? DefaultAnimationEasing,\n customParameters: effect.customParameters,\n options: effect.options\n };\n })\n };\n }),\n partitioner: (animationConfig as IAnimationTimeline).partitioner,\n sort: (animationConfig as IAnimationTimeline).sort\n };\n }\n\n return;\n}\n\nexport function normalizeAnimationConfig(\n config: Record\n): Array {\n let normalizedConfig: Array = [];\n\n Object.keys(config).forEach(state => {\n normalizedConfig = normalizedConfig.concat(normalizeStateAnimationConfig(state, config[state]));\n });\n return normalizedConfig;\n}\n\nexport function normalizeStateAnimationConfig(\n state: string,\n config: IAnimationConfig | IAnimationConfig[],\n initialIndex: number = 0\n): Array {\n const normalizedConfig: Array = [];\n let index = initialIndex;\n array(config).forEach(animationConfig => {\n const timelineConfig = transformToTimelineConfig(animationConfig);\n if (timelineConfig) {\n normalizedConfig.push({\n state,\n id: timelineConfig.id ?? `${state}-${index}`,\n timeline: timelineConfig,\n originConfig: animationConfig\n });\n index += 1;\n }\n });\n return normalizedConfig;\n}\n\nexport function invokeAnimateSpec(spec: MarkFunctionValueType, element: IElement, parameters: any): T {\n if (isFunction(spec)) {\n return spec.call(null, element.getDatum(), element, parameters);\n }\n return spec;\n}\n","import { isNil } from '@visactor/vutils';\nimport type { IAnimateArranger, IAnimator } from '../../types/animate';\n\nexport class Arranger implements IAnimateArranger {\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[] = [this];\n\n animators: IAnimator[];\n totalTime: number = 0;\n startTime: number = 0;\n endTime: number = 0;\n\n constructor(animators: IAnimator[]) {\n this.animators = animators.filter(animator => !isNil(animator));\n this.totalTime = this.animators.reduce((time, animator) => {\n return Math.max(time, animator.getTotalAnimationTime());\n }, 0);\n }\n\n parallel(arranger: IAnimateArranger) {\n const parallelArrangers = Array.from(new Set(this.parallelArrangers.concat(arranger.parallelArrangers)));\n parallelArrangers.forEach(arranger => {\n arranger.parallelArrangers = parallelArrangers;\n });\n this.arrangeTime();\n return this;\n }\n\n after(arranger: IAnimateArranger) {\n this.afterArranger = arranger;\n this.arrangeTime();\n return this;\n }\n\n arrangeTime() {\n const parallelTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.totalTime);\n }, this.totalTime);\n const startTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.afterArranger?.endTime ?? 0);\n }, 0);\n\n this.parallelArrangers.forEach(arranger => {\n arranger.startTime = startTime;\n arranger.endTime = startTime + parallelTime;\n arranger.animators.forEach(animator => {\n animator.startAt(startTime);\n });\n });\n }\n}\n","import { array, isNil, isNumber } from '@visactor/vutils';\nimport type {\n IAnimate,\n IAnimationConfig,\n IAnimationParameters,\n IAnimationTimeline,\n IAnimationTimeSlice,\n IAnimationUnit,\n IAnimator,\n IParsedAnimationConfig\n} from '../../types/animate';\nimport { Animator } from './animator';\nimport { invokeAnimateSpec, normalizeAnimationConfig, normalizeStateAnimationConfig } from './config';\nimport { DefaultAnimationParameters, ImmediateAnimationState } from '../constants';\nimport type { AnimationEvent, IElement, IMark, MarkFunctionType } from '../../types';\nimport { invokeFunctionType } from '../../parse/util';\nimport { Arranger } from './arranger';\nimport { DiffState, HOOK_EVENT } from '../enums';\n\nexport class Animate implements IAnimate {\n mark: IMark;\n state: MarkFunctionType | null = null;\n configs: Array;\n immediateConfigs: Array = [];\n\n private isEnabled: boolean = true;\n private disabledStates: string[] = [];\n // store animator by animation state\n private animators: Map = new Map();\n // count animation for each elements\n private elementRecorder: WeakMap<\n IElement,\n {\n prevState: string;\n count: { [state: string]: number };\n }\n > = new WeakMap();\n private timelineCount: Record = {};\n // record: IAnimationRecord;\n\n constructor(mark: IMark, config: Record) {\n this.mark = mark;\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n getAnimationConfigs(animationState: string) {\n if (!this.isEnabled) {\n return [];\n }\n return (this.configs ?? []).filter(config => config.state === animationState);\n }\n\n updateConfig(config: Record) {\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n updateState(state: MarkFunctionType | null) {\n this.state = state;\n }\n\n animate() {\n if (!this.isEnabled || !this.configs || !this.configs.length) {\n return;\n }\n\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n elements.forEach(element => {\n // TODO: if element is restored, clear isReserved flag\n if (element.isReserved && element.diffState !== DiffState.exit) {\n element.isReserved = false;\n }\n // clear previous animation when animation state changed\n const prevElementState = this.elementRecorder.get(element)?.prevState;\n const needStopAnimation = this.configs.some(config => {\n return (\n prevElementState !== element.diffState &&\n config.state === prevElementState &&\n config.timeline.controlOptions.stopWhenStateChange\n );\n });\n if (needStopAnimation) {\n this.clearElementAnimation(element, false);\n }\n // clear animations for exit elements\n else if (element.diffState === DiffState.exit) {\n this.clearElementAnimation(element, false);\n }\n });\n\n this.configs.forEach(config => {\n this.animateByTimeline(config, elements, parameters);\n });\n\n this.mark.cleanExitElements();\n\n return this;\n }\n\n runAnimationByState(animationState: string) {\n if (!this.isEnabled) {\n return;\n }\n\n // FIXME: maybe do nothing if state animation is already running\n // if (this.animators.get(animationState)?.length > 0) { return; }\n\n const stateConfigs = this.configs.filter(config => config.state === animationState);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = stateConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stopAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.stop());\n }\n return this;\n }\n pauseAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.pause());\n }\n return this;\n }\n resumeAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.resume());\n }\n return this;\n }\n\n run(config: IAnimationConfig | IAnimationConfig[]) {\n if (!this.isEnabled) {\n return;\n }\n\n const parsedConfigs = normalizeStateAnimationConfig(ImmediateAnimationState, config, this.immediateConfigs.length);\n this.immediateConfigs = this.immediateConfigs.concat(parsedConfigs);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = parsedConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stop() {\n // map will be cleared in animator callback\n this.animators.forEach(animators => {\n animators.forEach(animator => animator.stop());\n });\n return this;\n }\n pause() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.pause()));\n return this;\n }\n resume() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.resume()));\n return this;\n }\n reverse() {\n /** Animation scheduler api, resume the recorded animations */\n return this;\n }\n restart() {\n /** Animation scheduler api, resume current animations */\n return this;\n }\n record() {\n /** Animation scheduler api, start to record a timestamp */\n return this;\n }\n recordEnd() {\n /** Animation scheduler api, end to record a timestamp */\n return this;\n }\n\n isAnimating() {\n let isAnimating = false;\n this.animators.forEach(animators => {\n isAnimating = isAnimating || animators.some(animator => animator.isAnimating);\n });\n return isAnimating;\n }\n\n isElementAnimating(element: IElement) {\n const stateAnimationCounts = this.elementRecorder.get(element)?.count;\n return isNil(stateAnimationCounts) || Object.values(stateAnimationCounts).every(count => count === 0);\n }\n\n getAnimatorCount() {\n let count = 0;\n this.animators.forEach(animators => (count += animators.length));\n return count;\n }\n\n getAllAnimators() {\n const allAnimators: IAnimator[] = [];\n this.animators.forEach(animators => {\n allAnimators.push(...animators);\n });\n return allAnimators;\n }\n\n getElementAnimators(element: IElement | IElement[], animationState?: string) {\n const elements = array(element);\n let animators: IAnimator[] = [];\n if (animationState) {\n animators = this.animators.get(animationState) ?? [];\n } else {\n this.animators.forEach(stateAnimators => {\n animators = animators.concat(stateAnimators);\n });\n }\n return animators.filter(animator => elements.includes(animator.element));\n }\n\n enable() {\n this.isEnabled = true;\n return this;\n }\n disable() {\n this.isEnabled = false;\n this.stop();\n this.animators.clear();\n return this;\n }\n enableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.filter(state => !states.includes(state));\n return this;\n }\n disableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.concat(states);\n return this;\n }\n\n release() {\n this.stop();\n // we need to clear map\n this.animators.clear();\n\n this.configs = null;\n this.animators = null;\n this.elementRecorder = null;\n this.timelineCount = null;\n }\n\n private animateByTimeline(\n config: IParsedAnimationConfig,\n elements: IElement[],\n parameters: any,\n forceState: boolean = false\n ) {\n const animators: IAnimator[] = [];\n const animatedElements = elements.filter(element => {\n // do not animate on element which is running exit animation\n // if an element is reserved, it should be set for exit animation and will be removed\n const checkExit = !(element.isReserved && element.diffState === DiffState.exit);\n // do not check animation state if forceState is set\n const state = this.getAnimationState(element);\n const checkDisabled = !this.disabledStates.includes(state);\n const checkState = forceState || state === config.state;\n // filter elements by partitioner config\n const checkPartitioner =\n !config.timeline.partitioner || config.timeline.partitioner(element.getDatum(), element, parameters);\n return checkExit && checkDisabled && checkState && checkPartitioner;\n });\n\n if (animatedElements.length) {\n if (isNil(this.timelineCount[config.id])) {\n this.timelineCount[config.id] = 0;\n }\n\n if (config.timeline.sort) {\n animatedElements.sort((elementA, elementB) => {\n return config.timeline.sort(elementA.getDatum(), elementB.getDatum(), elementA, elementB, parameters);\n });\n }\n const width = this.mark.view.width();\n const height = this.mark.view.height();\n const animationParameters = {\n width,\n height,\n group: this.mark.group ?? null,\n mark: this.mark,\n view: this.mark.view,\n elementCount: animatedElements.length,\n elementIndex: 0\n };\n // clear animator with same state\n animatedElements.forEach(element => {\n (this.animators.get(config.state) ?? [])\n .filter(animator => animator.element === element && animator.animationOptions.id === config.id)\n .forEach(animator => {\n animator.stop(null, false);\n this.handleAnimatorEnd(animator, false);\n });\n });\n // run animator\n animatedElements.forEach((element, index) => {\n animationParameters.elementIndex = index;\n // add animation parameter into parameters\n const mergedParameters = Object.assign({ [DefaultAnimationParameters]: animationParameters }, parameters);\n const animationUnit = this.getAnimationUnit(\n config.timeline,\n element,\n index,\n animatedElements.length,\n mergedParameters\n );\n animators.push(this.animateElement(config, animationUnit, element, animationParameters, mergedParameters));\n });\n }\n return animators;\n }\n\n private animateElement(\n config: IParsedAnimationConfig,\n animationUnit: IAnimationUnit,\n element: IElement,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n // create animator\n const animator = new Animator(element, animationUnit, config);\n\n // start animating\n animator.animate(animationParameters, parameters);\n // return when animator has no valid animation\n if (!animator.isAnimating) {\n return;\n }\n if (element.diffState === DiffState.exit) {\n element.isReserved = true;\n }\n\n const isFirstAnimator = this.timelineCount[config.id] === 0;\n\n this.timelineCount[config.id] += 1;\n const elementRecord = this.elementRecorder.get(element) ?? { prevState: config.state, count: {} };\n elementRecord.prevState = config.state;\n elementRecord.count[config.state] = (elementRecord.count[config.state] ?? 0) + 1;\n this.elementRecorder.set(element, elementRecord);\n const stateData = this.animators.get(config.state);\n if (!stateData) {\n this.animators.set(config.state, [animator]);\n } else {\n stateData.push(animator);\n }\n // this.animators.set(config.state, (this.animators.get(config.state) ?? []).concat(animator));\n // invoke callback when animation finish\n animator.callback(() => {\n this.handleAnimatorEnd(animator);\n });\n\n // FIXME: handle multiple timelines with same animation state\n // emit animation start event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState: config.state,\n animationConfig: config.originConfig\n };\n if (isFirstAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_START, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_START, animationEvent, element);\n\n return animator;\n }\n\n private getAnimationState(element: IElement): string {\n const customState = invokeFunctionType(this.state, this.mark.parameters(), element.getDatum(), element);\n return customState ?? element.diffState;\n }\n\n private getAnimationUnit(\n timeline: IAnimationTimeline,\n element: IElement,\n index: number,\n elementCount: number,\n parameters: any\n ): IAnimationUnit {\n const timeSlices: IAnimationTimeSlice[] = [];\n const startTime = invokeAnimateSpec(timeline.startTime, element, parameters);\n const totalTime = invokeAnimateSpec(timeline.totalTime, element, parameters);\n const oneByOne = invokeAnimateSpec(timeline.oneByOne, element, parameters);\n const loop = invokeAnimateSpec(timeline.loop, element, parameters);\n\n let loopTime = 0;\n (timeline.timeSlices as IAnimationTimeSlice[]).forEach(timeSlice => {\n const delay = invokeAnimateSpec(timeSlice.delay, element, parameters);\n const delayAfter = invokeAnimateSpec(timeSlice.delayAfter, element, parameters);\n const duration = invokeAnimateSpec(timeSlice.duration, element, parameters) ?? totalTime / elementCount;\n const effects = array(timeSlice.effects).map(effect =>\n Object.assign({}, effect, {\n customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)\n })\n );\n timeSlices.push({\n effects,\n duration,\n delay,\n delayAfter\n });\n loopTime += delay + duration + delayAfter;\n });\n\n const oneByOneDelay = isNumber(oneByOne) ? oneByOne : oneByOne === true ? loopTime : 0;\n return {\n initialDelay: startTime,\n loopCount: isNumber(loop) ? loop : loop === true ? Infinity : 1,\n loopDelay: oneByOneDelay * index,\n loopDelayAfter: oneByOneDelay * (elementCount - index - 1),\n loopAnimateDuration: loopTime,\n loopDuration: loopTime + oneByOneDelay * (elementCount - 1),\n totalTime,\n timeSlices\n };\n }\n\n private clearElementAnimation(element: IElement, clearElement: boolean = true) {\n this.animators.forEach(animators => {\n animators.forEach(animator => {\n if (animator.element === element) {\n // if previous animation state is exit, modify graphic item channel to start\n if (animator.animationOptions.state === DiffState.exit) {\n animator.stop('start', false);\n } else {\n animator.stop('end', false);\n }\n this.handleAnimatorEnd(animator, clearElement);\n }\n });\n });\n this.elementRecorder.delete(element);\n }\n\n private clearAllElements() {\n const elements = this.mark.getAllElements();\n if (elements) {\n elements.forEach((element, i) => {\n // only update mark in previous invocation\n this.clearElement(element, i === elements.length - 1);\n });\n }\n }\n\n private clearElement(element: IElement, updateMark: boolean = true) {\n this.clearElementAnimation(element);\n // element might already be released\n if (element.getGraphicItem()) {\n // if element stops animating or needs to be removed, clear all cached attributes\n element.clearGraphicAttributes();\n // remove element from mark if exit animation is finished\n if (element.diffState === DiffState.exit) {\n element.isReserved = false;\n }\n if (updateMark) {\n this.mark.cleanExitElements();\n }\n // TODO: waiting for vRender to optimize bound cache logic, otherwise this line\n // will cause huge performance waste in multiple animation like appear & disappear.\n // if (updateMark) mark.updateBounds();\n }\n }\n\n private handleAnimatorEnd(animator: IAnimator, clearElement: boolean = true) {\n const element = animator.element;\n const animationOptions = animator.animationOptions;\n const animationState = animationOptions.state;\n const isImmediateAnimation = animationState === ImmediateAnimationState;\n\n // sub element animation count\n const stateAnimationCounts = this.elementRecorder.get(element).count;\n stateAnimationCounts[animationState] -= 1;\n // FIXME: maybe delete zero animationState\n // if (stateAnimationCounts[animationState] === 0) {\n // delete stateAnimationCounts[animationState];\n // }\n\n this.animators.set(\n animationState,\n this.animators.get(animationState).filter(ani => ani !== animator)\n );\n if (this.animators.get(animationState).length === 0) {\n this.animators.delete(animationState);\n }\n this.timelineCount[animationOptions.id] -= 1;\n const isLastAnimator = this.timelineCount[animationOptions.id] === 0;\n\n const originAnimationConfig = isImmediateAnimation\n ? this.immediateConfigs.find(config => config.id === animationOptions.id).originConfig\n : this.configs.find(config => config.id === animationOptions.id).originConfig;\n if (isLastAnimator) {\n delete this.timelineCount[animationOptions.id];\n // delete config when immediate executed animation is finished\n if (isImmediateAnimation) {\n this.immediateConfigs = this.immediateConfigs.filter(config => config.id !== animationOptions.id);\n }\n }\n\n if (clearElement) {\n if (Object.keys(this.timelineCount).length === 0) {\n this.clearAllElements();\n } else if (animationState === DiffState.exit && stateAnimationCounts[DiffState.exit] === 0) {\n // if all exit animations are finished\n this.clearElement(element);\n }\n }\n\n // emit animation end event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState,\n animationConfig: originAnimationConfig\n };\n if (isLastAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_END, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_END, animationEvent, element);\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport { Animate } from '../graph/animation/animate';\nimport type { IMark, MarkSpec } from '../types';\nimport type { IAnimate } from '../types/animate';\nimport { Mark } from './mark';\n\nclass MarkAnimateMixin {\n animate: IAnimate = new Animate(this as unknown as IMark, {});\n\n initAnimate(spec: MarkSpec) {\n if (!this.animate) {\n this.animate = new Animate(this as unknown as IMark, spec.animation);\n if ((this as any).needAnimate()) {\n this.animate.updateState(spec.animationState);\n }\n }\n }\n\n reuseAnimate(mark: IMark) {\n this.animate = mark.animate;\n this.animate.mark = this as unknown as IMark;\n }\n\n updateAnimate(spec: MarkSpec) {\n this.animate.updateConfig(spec.animation);\n this.animate.updateState(spec.animationState);\n }\n}\n\nexport const registerMarkAnimateAPI = () => {\n mixin(Mark, MarkAnimateMixin);\n};\n","import { measureText } from '../util';\n\n/** 存放一些业务方可能会在扩展功能里用到的工具方法 */\nexport const VCHART_UTILS = {\n measureText\n};\n","export class ExpressionFunction {\n functions: { [key: string]: Function };\n\n static instance_: ExpressionFunction;\n\n // 单例模式\n static instance(): ExpressionFunction {\n if (!ExpressionFunction.instance_) {\n ExpressionFunction.instance_ = new ExpressionFunction();\n }\n return ExpressionFunction.instance_;\n }\n\n constructor() {\n this.functions = {};\n }\n\n // 注册函数\n registerFunction(name: string, fun: Function) {\n if (!name || !fun) {\n return;\n }\n this.functions[name] = fun;\n }\n\n // 注销函数\n unregisterFunction(name: string) {\n if (!name) {\n return;\n }\n delete this.functions[name];\n }\n\n // 获取函数\n getFunction(name: string): Function | null {\n return this.functions[name] || null;\n }\n\n // 获取函数名列表\n getFunctionNameList(): string[] | null {\n return Object.keys(this.functions);\n }\n}\n","import {\n initAllEnv,\n loadBrowserEnv,\n loadFeishuEnv,\n loadLynxEnv,\n loadNodeEnv,\n loadTaroEnv,\n loadWxEnv,\n loadTTEnv,\n loadHarmonyEnv\n} from '@visactor/vrender-kits';\nimport { container } from '@visactor/vrender-core';\n\n/**\n * 加载所有环境兼容代码\n */\nexport const registerAllEnv = () => {\n initAllEnv();\n};\n\n/**\n * 加载浏览器环境代码\n */\nexport const registerBrowserEnv = () => {\n loadBrowserEnv(container);\n};\n\n/**\n * 加载飞书(飞书小程序/block/tt)环境代码\n */\nexport const registerLarkEnv = () => {\n // TODO: 后续统一为 loadLarkEnv\n loadFeishuEnv(container);\n};\n\n/**\n * 加载 Lynx 环境代码\n */\nexport const registerLynxEnv = () => {\n loadLynxEnv(container);\n};\n\n/**\n * 加载 Node 环境代码\n */\nexport const registerNodeEnv = () => {\n loadNodeEnv(container);\n};\n\n/**\n * 加载 Taro 环境代码\n */\nexport const registerTaroEnv = () => {\n loadTaroEnv(container);\n};\n\n/**\n * 加载微信小程序环境代码\n */\nexport const registerWXEnv = () => {\n loadWxEnv(container);\n};\n/**\n * 加载TT小程序环境代码\n */\nexport const registerTTEnv = () => {\n loadTTEnv(container);\n};\n/**\n * 加载Harmony环境代码\n */\nexport const registerHarmonyEnv = () => {\n loadHarmonyEnv(container);\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n colorScheme,\n component: {\n dataZoom: {\n selectedBackground: {\n style: {\n fillOpacity: 0.4,\n outerBorder: {\n strokeOpacity: 0.4\n }\n }\n }\n }\n }\n};\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#202226',\n /** 图表边框色 */\n borderColor: '#404349',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(0,0,0,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#404349',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#404349',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#202226',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#4284FF',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#404349',\n\n /** 主要字色 */\n primaryFontColor: '#fdfdfd',\n /** 次要字色 */\n secondaryFontColor: '#bbbdc3',\n /** 第三字色 */\n tertiaryFontColor: '#888c93',\n /** 轴标签字色 */\n axisLabelFontColor: '#888c93',\n /** 禁用字色 */\n disableFontColor: '#55595f',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#202226',\n\n /** 轴网格线颜色 */\n axisGridColor: '#404349',\n /** 轴线颜色 */\n axisDomainColor: '#4b4f54',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#bbbdc3',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#55595F',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#4284FF',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(255,255,255,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#fdfdfd',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#404349',\n /** 标注线颜色 */\n markLineStrokeColor: '#bbbdc3',\n\n /** 危险色 */\n dangerColor: '#eb4b4b',\n /** 警告色 */\n warningColor: '#f0bd30',\n /** 成功色 */\n successColor: '#14b267',\n /** 信息色 */\n infoColor: '#4284ff',\n\n /** 图例翻页器文字颜色 */\n discreteLegendPagerTextColor: '#BBBDC3',\n /** 图例翻页器按钮颜色 */\n discreteLegendPagerHandlerColor: '#BBBDC3',\n /** 图例翻页器按钮颜色(disable 态) */\n discreteLegendPagerHandlerDisableColor: '#55595F',\n\n /** 占位圆颜色 */\n emptyCircleColor: '#bbbdc3',\n\n /** 线性进度条颜色 */\n linearProgressTrackColor: '#404349'\n } as BuiltinColorPalette\n }\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\nimport { warn } from '../../util/debug';\n\nexport class BasePluginService implements IBasePluginService {\n protected _plugins: T[];\n readonly id: number = createID();\n\n constructor() {\n this._plugins = [];\n }\n\n add(plugins: T[]): T[] | null {\n if (!plugins || plugins.length === 0) {\n return null;\n }\n const unloadedPlugins: T[] = [];\n plugins.forEach(plugin => {\n const isExist = this._plugins.find(p => p.id === plugin.id);\n if (isExist) {\n warn('不要重复添加相同的plugin');\n return;\n }\n this._plugins.push(plugin);\n unloadedPlugins.push(plugin);\n plugin.onAdd && plugin.onAdd(this);\n });\n\n return unloadedPlugins;\n }\n\n load(plugins: T[]): void {\n const unloadedPlugins = this.add(plugins);\n if (!unloadedPlugins || !unloadedPlugins.length) {\n return;\n }\n\n this.activate(plugins);\n }\n\n activate(plugins: T[]): void {\n if (!plugins.length) {\n return;\n }\n\n plugins.forEach(plugin => {\n plugin.init && plugin.init();\n });\n }\n\n get(id: number): T | undefined {\n return this._plugins.find(p => p.id === id);\n }\n\n getAll(): T[] {\n return this._plugins.slice();\n }\n\n release(pluginsId: number): void {\n const plugin = this.get(pluginsId);\n if (!plugin) {\n return;\n }\n plugin.release(this);\n this._plugins = this._plugins.filter(entry => entry !== plugin);\n }\n\n releaseAll(): void {\n this._plugins.forEach(plugin => {\n plugin.release(this);\n });\n\n this._plugins = [];\n }\n\n clear(pluginsId: number): void {\n const plugin = this.get(pluginsId);\n if (!plugin) {\n return;\n }\n plugin.clear(this);\n }\n\n clearAll(): void {\n this._plugins.forEach(plugin => {\n plugin.clear?.(this);\n });\n }\n}\n","import type { IChartPlugin, IChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\nimport type { VChartRenderActionSource } from '../../core/interface';\nimport type { IChartSpecInfo } from '../../chart/interface/common';\n\nexport class ChartPluginService\n extends BasePluginService\n implements IChartPluginService\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit(chartSpec: any) {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this, chartSpec);\n });\n }\n\n onBeforeResize(width: number, height: number) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeResize && plugin.onBeforeResize(this, width, height);\n });\n }\n\n onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterChartSpecTransform && plugin.onAfterChartSpecTransform(this, chartSpec, actionSource);\n });\n }\n\n onAfterModelSpecTransform(chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterModelSpecTransform &&\n plugin.onAfterModelSpecTransform(this, chartSpec, chartSpecInfo, actionSource);\n });\n }\n\n onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);\n });\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.globalInstance = null;\n }\n}\n","import { array, isArray, isNil, isString, isValid } from '@visactor/vutils';\nimport type {\n IBaseInteractionOptions,\n IElement,\n IGlyphElement,\n IGrammarBase,\n IView,\n InteractionEventHandler\n} from '../types';\n\nexport abstract class BaseInteraction {\n readonly view: IView;\n\n options: T;\n\n type: string;\n\n constructor(view: IView, options: T) {\n this.view = view;\n this.depend(options?.dependency);\n }\n\n references: Map = new Map();\n\n protected abstract getEvents(): Array<{ type: string | string[]; handler: InteractionEventHandler }>;\n\n getStartState(): string {\n return null;\n }\n\n depend(grammar: IGrammarBase[] | IGrammarBase | string[] | string) {\n this.references.clear();\n array(grammar)\n .map(grammar => (isString(grammar) ? this.view.getGrammarById(grammar) : grammar))\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n this.references.set(ref, (this.references.get(ref) ?? 0) + 1);\n });\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n bind() {\n const events = this.getEvents();\n\n (events ?? []).forEach(evt => {\n if (evt.type && evt.handler) {\n if (isArray(evt.type)) {\n evt.type.forEach(evtType => {\n evtType && evtType !== 'none' && this.view.addEventListener(evtType, evt.handler);\n });\n } else {\n evt.type !== 'none' && this.view.addEventListener(evt.type, evt.handler);\n }\n }\n });\n }\n\n unbind() {\n // unbind events\n const events = this.getEvents();\n\n (events ?? []).forEach(evt => {\n if (evt.type && evt.handler) {\n if (isArray(evt.type)) {\n evt.type.forEach(evtType => {\n evtType && evtType !== 'none' && this.view.removeEventListener(evtType, evt.handler);\n });\n } else {\n evt.type !== 'none' && this.view.removeEventListener(evt.type, evt.handler);\n }\n }\n });\n }\n\n start(element: IElement | IGlyphElement) {\n // do nothing\n }\n\n reset(element?: IElement | IGlyphElement) {\n // do nothing\n }\n\n protected dispatchEvent(type: 'start' | 'reset' | 'update' | 'end', params: any) {\n this.view.emit(`${this.type}:${type}`, params);\n\n if (type === 'start' && this.options.onStart) {\n this.options.onStart(params);\n } else if (type === 'reset' && this.options.onReset) {\n this.options.onReset(params);\n } else if (type === 'update' && this.options.onUpdate) {\n this.options.onUpdate(params);\n } else if (type === 'end' && this.options.onEnd) {\n this.options.onEnd(params);\n }\n }\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementActiveOptions, IElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\n\nexport class ElementActive extends BaseInteraction {\n static type: string = 'element-active';\n type: string = ElementActive.type;\n\n static defaultOptions: ElementActiveOptions = {\n state: InteractionStateEnum.active,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementActiveOptions;\n protected _marks?: IMark[];\n protected _prevActiveElement?: IElement;\n\n constructor(view: IView, options?: ElementActiveOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementActive.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n start(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.addState(this.options.state);\n this._prevActiveElement = element;\n }\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n const el = element ?? this._prevActiveElement;\n\n if (el) {\n if (this._marks && this._marks.includes(el.mark)) {\n el.removeState(this.options.state);\n }\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.reset(e.element);\n };\n}\n","import { array, isNumber, isString } from '@visactor/vutils';\nimport type { ElementFilterOptions, ElementSelectTriggerOff, EventType, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const markSpec = (mark && mark.getSpec()) as MarkSpec;\n const encode = markSpec && markSpec.encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n\nexport const parseTriggerOffOfSelect = (triggerOff: ElementSelectTriggerOff | ElementSelectTriggerOff[]) => {\n const triggerOffArray = array(triggerOff);\n const resetType: ('view' | 'self' | 'timeout')[] = [];\n const eventNames: EventType[] = [];\n\n triggerOffArray.forEach(off => {\n if (off === 'empty') {\n resetType.push('view');\n } else if (isString(off) && off !== 'none') {\n if ((off as string).includes('view:')) {\n eventNames.push((off as string).replace('view:', '') as EventType);\n\n resetType.push('view');\n } else {\n eventNames.push(off as EventType);\n\n resetType.push('self');\n }\n } else if (isNumber(off)) {\n resetType.push('timeout');\n }\n });\n\n return {\n eventNames,\n resetType\n };\n};\n","import { isArray } from '@visactor/vutils';\nimport { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementSelectOptions,\n EventType,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { groupMarksByState, parseTriggerOffOfSelect } from './utils';\nimport { BaseInteraction } from './base';\n\nexport interface ElementSelect extends IToggleStateMixin, BaseInteraction {}\n\nexport class ElementSelect extends BaseInteraction {\n static type: string = 'element-select';\n type: string = ElementSelect.type;\n\n static defaultOptions: ElementSelectOptions = {\n state: InteractionStateEnum.selected,\n trigger: 'click'\n };\n protected _resetType: ('view' | 'self' | 'timeout')[] = [];\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n private _timer?: number;\n protected _statedElements?: (IElement | IGlyphElement)[];\n\n constructor(view: IView, options?: ElementSelectOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementSelect.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.state, this.options.reverseState]);\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n protected getEvents() {\n const triggerOff = this.options.triggerOff;\n const trigger = this.options.trigger;\n\n const events = [\n {\n type: trigger,\n handler: this.handleStart\n }\n ];\n\n const { eventNames, resetType } = parseTriggerOffOfSelect(triggerOff);\n\n eventNames.forEach(evt => {\n if (evt && (isArray(trigger) ? !trigger.includes(evt) : evt !== trigger)) {\n events.push({ type: evt as EventType, handler: this.handleReset });\n }\n });\n\n this._resetType = resetType;\n\n return events;\n }\n\n resetAll = () => {\n const { state, reverseState } = this.options;\n\n if (this._statedElements && this._statedElements.length) {\n this.clearAllStates(state, reverseState);\n this.dispatchEvent('reset', { elements: this._statedElements, options: this.options });\n\n this._statedElements = [];\n }\n };\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n const element = e.element;\n const hasActiveElement = element && this._marks && this._marks.includes(element.mark);\n\n if (this._resetType.includes('view') && !hasActiveElement) {\n this.resetAll();\n } else if (this._resetType.includes('self') && hasActiveElement) {\n this.resetAll();\n }\n };\n\n start(element: InteractionEvent['element']) {\n const { state, reverseState, isMultiple } = this.options;\n if (element && this._marks && this._marks.includes(element.mark)) {\n if (element.hasState(state)) {\n if (this._resetType.includes('self')) {\n const newStatedElements = this._statedElements && this._statedElements.filter(el => el !== element);\n\n if (newStatedElements && newStatedElements.length) {\n this._statedElements = this.updateStates(newStatedElements, this._statedElements, state, reverseState);\n } else {\n this.resetAll();\n }\n }\n } else {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n element.addState(state);\n\n this._statedElements = this.updateStates(\n isMultiple && this._statedElements ? [...this._statedElements, element] : [element],\n this._statedElements,\n state,\n reverseState\n );\n this.dispatchEvent('start', { elements: this._statedElements, options: this.options });\n\n if (this._resetType.includes('timeout')) {\n this._timer = setTimeout(() => {\n this.resetAll();\n }, this.options.triggerOff as number) as unknown as number;\n }\n }\n } else if (this._resetType.includes('view') && this._statedElements && this._statedElements.length) {\n this.resetAll();\n }\n }\n\n reset(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.state, this.options.reverseState]);\n }\n } else {\n this.resetAll();\n }\n }\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementHighlightOptions,\n EventType,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { groupMarksByState } from './utils';\nimport { isString } from '@visactor/vutils';\n\nexport interface ElementHighlight extends IToggleStateMixin, BaseInteraction {}\n\nexport class ElementHighlight extends BaseInteraction {\n static type: string = 'element-highlight';\n type: string = ElementHighlight.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n protected _lastElement?: IElement;\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _resetType?: 'view' | 'self';\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlight.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.highlightState, this.options.blurState]);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n const triggerOff = this.options.triggerOff;\n const trigger = this.options.trigger;\n const events = [\n {\n type: trigger,\n handler: this.handleStart\n }\n ];\n\n let eventName = triggerOff;\n if (isString(triggerOff) && (triggerOff as string).includes('view:')) {\n eventName = (triggerOff as string).replace('view:', '') as EventType;\n this._resetType = 'view';\n } else {\n this._resetType = 'self';\n }\n\n events.push({ type: eventName as EventType, handler: this.handleReset });\n\n return events;\n }\n\n resetAll() {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement) {\n this.clearAllStates(highlightState, blurState);\n\n this.dispatchEvent('reset', { elements: [this._lastElement], options: this.options });\n\n this._lastElement = null;\n\n this._statedElements = null;\n }\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement === element) {\n return;\n }\n\n this._statedElements = this.updateStates([element], this._statedElements, highlightState, blurState);\n\n this._lastElement = element;\n\n this.dispatchEvent('start', { elements: [element], options: this.options });\n } else if (this._lastElement && this._resetType === 'view') {\n this.resetAll();\n }\n }\n\n reset(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n const element = e.element;\n\n if (element) {\n const hasActiveElement = this._marks && this._marks.includes(element.mark);\n\n if (this._resetType === 'view' && !hasActiveElement) {\n this.resetAll();\n } else if (this._resetType === 'self' && hasActiveElement) {\n this.resetAll();\n }\n }\n };\n}\n","import { isNil } from '@visactor/vutils';\nimport type { ElementHighlightOptions, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { InteractionStateEnum } from '../graph/enums';\n\nexport class ElementHighlightByKey extends BaseInteraction {\n static type: string = 'element-highlight-by-key';\n type: string = ElementHighlightByKey.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByKey.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const highlightKey = element.key;\n\n if (isNil(highlightKey)) {\n return;\n }\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.key === highlightKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n const hasActiveElement = e.element && this._marks && this._marks.includes(e.element.mark);\n\n if (hasActiveElement) {\n this.resetAll();\n }\n };\n}\n","import { isNil } from '@visactor/vutils';\nimport type { ElementHighlightOptions, IMark, IView, InteractionEvent } from '../types';\nimport { InteractionStateEnum } from '../graph/enums';\nimport { BaseInteraction } from './base';\n\nexport class ElementHighlightByGroup extends BaseInteraction {\n static type: string = 'element-highlight-by-group';\n type: string = ElementHighlightByGroup.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByGroup.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const highlightKey = element.groupKey;\n\n if (isNil(highlightKey)) {\n return;\n }\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.groupKey === highlightKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n const element = e.element;\n const hasActiveElement = element && this._marks && this._marks.includes(element.mark);\n\n if (hasActiveElement) {\n this.resetAll();\n }\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementActiveByLegendOptions, IElement, IGlyphElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { LegendEvent } from '@visactor/vrender-components';\nimport { isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementActiveByLegend extends BaseInteraction {\n static type: string = 'element-active-by-legend';\n type: string = ElementActiveByLegend.type;\n\n static defaultOptions: ElementActiveByLegendOptions = {\n state: InteractionStateEnum.active,\n filterType: 'groupKey'\n };\n options: ElementActiveByLegendOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementActiveByLegendOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementActiveByLegend.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected getEvents() {\n return [\n {\n type: LegendEvent.legendItemHover,\n handler: this.handleStart\n },\n {\n type: LegendEvent.legendItemUnHover,\n handler: this.handleReset\n }\n ];\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n start(element: IElement | IGlyphElement | string) {\n const itemKey = element;\n\n if (isNil(itemKey)) {\n return;\n }\n\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isActive = filterValue(el) === itemKey;\n\n if (isActive) {\n el.addState(this.options.state);\n } else {\n el.removeState(this.options.state);\n }\n });\n });\n }\n\n resetAll() {\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(this.options.state);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState(this.options.state);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.detail?.data?.id);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.resetAll();\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementHighlightByLegendOptions,\n IElement,\n IGlyphElement,\n IMark,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { LegendEvent } from '@visactor/vrender-components';\nimport { isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementHighlightByLegend extends BaseInteraction {\n static type: string = 'element-highlight-by-legend';\n type: string = ElementHighlightByLegend.type;\n\n static defaultOptions: ElementHighlightByLegendOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n filterType: 'groupKey'\n };\n options: ElementHighlightByLegendOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightByLegendOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByLegend.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: LegendEvent.legendItemHover,\n handler: this.handleStart\n },\n { type: LegendEvent.legendItemUnHover, handler: this.handleReset }\n ];\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = filterValue(el) === itemKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent, element: IElement | IGlyphElement) => {\n this.start(e.detail?.data?.id);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.resetAll();\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementHighlightByNameOptions, IElement, IGlyphElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { array, isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementHighlightByName extends BaseInteraction {\n static type: string = 'element-highlight-by-name';\n type: string = ElementHighlightByName.type;\n\n static defaultOptions: ElementHighlightByNameOptions = {\n trigger: 'pointerover',\n triggerOff: 'pointerout',\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n filterType: 'groupKey'\n };\n options: ElementHighlightByNameOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightByNameOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByName.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n protected _filterByName(e: InteractionEvent) {\n const names = array(this.options.graphicName);\n return e?.target?.name && names.includes(e.target.name);\n }\n\n protected _parseTargetKey(e: InteractionEvent, element: IElement | IGlyphElement) {\n return this.options.parseData\n ? this.options.parseData(e)\n : e.target.type === 'text'\n ? (e.target.attribute as any).text\n : null;\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = filterValue(el) === itemKey;\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n resetAll() {\n const states = [this.options.blurState, this.options.highlightState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent, element: IElement | IGlyphElement) => {\n const shoudStart = this.options.shouldStart ? this.options.shouldStart(e) : this._filterByName(e);\n if (shoudStart) {\n const itemKey = this._parseTargetKey(e, element);\n this.start(itemKey);\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n const shoudReset = this.options.shouldReset ? this.options.shouldReset(e) : this._filterByName(e);\n\n if (shoudReset) {\n this.resetAll();\n }\n };\n}\n","import type { ElementHighlightByGraphicNameOptions, IElement, IGlyphElement, IView, InteractionEvent } from '../types';\nimport { isNil } from '@visactor/vutils';\nimport { ElementHighlight } from './element-highlight';\n\nexport class ElementHighlightByGraphicName extends ElementHighlight {\n static type: string = 'element-highlight-by-graphic-name';\n type: string = ElementHighlightByGraphicName.type;\n\n options: ElementHighlightByGraphicNameOptions;\n\n constructor(view: IView, options?: ElementHighlightByGraphicNameOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByGraphicName.defaultOptions, options);\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected _filterByName(e: InteractionEvent) {\n const name = e?.target?.name;\n return !!name;\n }\n\n protected _parseTargetKey(e: InteractionEvent, element: IElement | IGlyphElement) {\n return e.target.name;\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.getGraphicItem()?.name === itemKey;\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n reset() {\n const states = [this.options.blurState, this.options.highlightState];\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n handleStart = (e: InteractionEvent) => {\n if (e && e.element && this._marks.includes(e.element.mark)) {\n const shouldStart = this.options.shouldStart ? this.options.shouldStart(e) : this._filterByName(e);\n if (shouldStart) {\n const itemKey = this._parseTargetKey(e, e.element);\n this.start(itemKey);\n }\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n if (e && e.element && this._marks.includes(e.element.mark)) {\n this.reset();\n }\n };\n}\n","import type { InteractionEvent } from '../types';\nimport { ElementSelect } from './element-select';\n\nexport class ElementSelectByGraphicName extends ElementSelect {\n static type: string = 'element-select-by-graphic-name';\n type: string = ElementSelectByGraphicName.type;\n\n start(element: InteractionEvent['element']) {\n const name = element.getGraphicItem()?.name;\n if (name) {\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n if (el.getGraphicItem()?.name === name) {\n super.start(el);\n }\n });\n });\n }\n }\n}\n","import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';\n\nexport class ToggleStateMixin implements IToggleStateMixin {\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n\n updateStates(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) {\n if (!newStatedElements || !newStatedElements.length) {\n return null;\n }\n if (state && reverseState) {\n if (prevStatedElements && prevStatedElements.length) {\n // toggle\n this.toggleReverseStateOfElements(newStatedElements, prevStatedElements, reverseState);\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n // update all the elements\n this.addBothStateOfElements(newStatedElements, state, reverseState);\n }\n } else if (state) {\n if (prevStatedElements && prevStatedElements.length) {\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n this.addStateOfElements(newStatedElements, state);\n }\n }\n\n return newStatedElements;\n }\n\n protected toggleReverseStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n reverseState: string\n ) {\n prevStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.addState(reverseState);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.removeState(reverseState);\n }\n });\n }\n\n protected toggleStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n state: string\n ) {\n prevStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.removeState(state);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.addState(state);\n }\n });\n }\n\n protected addBothStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string, reverseState: string) {\n this._marks.forEach(mark => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark);\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n } else {\n if (hasReverse) {\n el.addState(reverseState);\n }\n }\n });\n });\n }\n\n protected addStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string) {\n this._marks.forEach(mark => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n }\n });\n });\n }\n\n clearAllStates(state?: string, reverseState?: string) {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n this._marks.forEach(mark => {\n if (mark && mark.elements) {\n if (reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(reverseState);\n });\n }\n\n if (state && this._stateMarks[state] && this._stateMarks[state].includes(mark)) {\n mark.elements.forEach(el => {\n if (this._statedElements.includes(el)) {\n el.removeState(state);\n }\n });\n }\n }\n });\n }\n}\n","import { Factory } from '../core/factory';\nimport { ElementActive } from './element-active';\nimport { ElementSelect } from './element-select';\nimport { ElementHighlight } from './element-highlight';\nimport { ElementHighlightByKey } from './element-highlight-by-key';\nimport { ElementHighlightByGroup } from './element-highlight-by-group';\nimport { ElementActiveByLegend } from './element-active-by-legend';\nimport { ElementHighlightByLegend } from './element-highlight-by-legend';\nimport { ElementHighlightByName } from './element-highlight-by-name';\nimport { ElementHighlightByGraphicName } from './element-highlight-by-graphic-name';\nimport { ElementSelectByGraphicName } from './element-select-by-graphic-name';\n\nimport { BrushHighlight } from './brush-highlight';\nimport { BrushActive } from './brush-active';\nimport { BrushFilter } from './brush-filter';\nimport { DrillDown } from './drill-down';\nimport { RollUp } from './roll-up';\nimport { Tooltip } from './tooltip';\nimport { DimensionTooltip } from './dimension-tooltip';\nimport { Crosshair } from './crosshair';\nimport { FilterMixin } from './filter';\nimport { ViewZoom } from './view-zoom';\nimport { ViewScroll } from './view-scroll';\nimport { ViewDrag } from './view-drag';\nimport { mixin } from '@visactor/vutils';\nimport { ViewZoomMixin } from './view-zoom-mixin';\nimport { ViewScrollMixin } from './view-scroll-mixin';\nimport { ViewDragMixin } from './view-drag-mixin';\nimport { ViewRoam } from './view-roam';\nimport { FishEye } from './fish-eye';\nimport { ToggleStateMixin } from './toggle-state-mixin';\n\nexport { BaseTooltip } from './base-tooltip';\nexport { BaseInteraction } from './base';\nexport { BrushBase } from './brush-base';\nexport { ViewNavigationBase } from './view-navigation-base';\nexport {\n ElementActive,\n ElementSelect,\n ElementHighlight,\n ElementHighlightByKey,\n ElementHighlightByGroup,\n ElementActiveByLegend,\n ElementHighlightByLegend,\n ElementHighlightByName,\n BrushHighlight,\n BrushActive,\n DrillDown,\n RollUp,\n Tooltip,\n DimensionTooltip,\n Crosshair,\n FilterMixin,\n ViewZoom,\n ViewScroll,\n ViewDrag,\n ViewRoam,\n ViewScrollMixin,\n ViewZoomMixin,\n ViewDragMixin,\n FishEye\n};\n\nexport const registerElementActive = () => {\n Factory.registerInteraction(ElementActive.type, ElementActive);\n};\n\nexport const registerElementSelect = () => {\n mixin(ElementSelect, ToggleStateMixin);\n Factory.registerInteraction(ElementSelect.type, ElementSelect);\n};\n\nexport const registerElementHighlight = () => {\n mixin(ElementHighlight, ToggleStateMixin);\n Factory.registerInteraction(ElementHighlight.type, ElementHighlight);\n};\n\nexport const registerElementHighlightByKey = () => {\n Factory.registerInteraction(ElementHighlightByKey.type, ElementHighlightByKey);\n};\n\nexport const registerElementHighlightByGroup = () => {\n Factory.registerInteraction(ElementHighlightByGroup.type, ElementHighlightByGroup);\n};\n\nexport const registerElementActiveByLegend = () => {\n Factory.registerInteraction(ElementActiveByLegend.type, ElementActiveByLegend);\n};\n\nexport const registerElementHighlightByLegend = () => {\n Factory.registerInteraction(ElementHighlightByLegend.type, ElementHighlightByLegend);\n};\n\nexport const registerElementHighlightByName = () => {\n Factory.registerInteraction(ElementHighlightByName.type, ElementHighlightByName);\n};\n\nexport const registerElementHighlightByGraphicName = () => {\n Factory.registerInteraction(ElementHighlightByGraphicName.type, ElementHighlightByGraphicName);\n};\n\nexport const registerElementSelectByGraphicName = () => {\n Factory.registerInteraction(ElementSelectByGraphicName.type, ElementSelectByGraphicName);\n};\n\nexport const registerBrushHighlight = () => {\n Factory.registerInteraction(BrushHighlight.type, BrushHighlight);\n};\n\nexport const registerBrushActive = () => {\n Factory.registerInteraction(BrushActive.type, BrushActive);\n};\n\nexport const registerBrushFilter = () => {\n mixin(BrushFilter, FilterMixin);\n Factory.registerInteraction(BrushFilter.type, BrushFilter);\n};\n\nexport const registerDrillDown = () => {\n mixin(DrillDown, FilterMixin);\n Factory.registerInteraction(DrillDown.type, DrillDown);\n};\n\nexport const registerRollUp = () => {\n Factory.registerInteraction(RollUp.type, RollUp);\n};\n\nexport const registerTooltip = () => {\n Factory.registerInteraction(Tooltip.type, Tooltip);\n};\n\nexport const registerDimensionTooltip = () => {\n Factory.registerInteraction(DimensionTooltip.type, DimensionTooltip);\n};\n\nexport const registerCrosshair = () => {\n Factory.registerInteraction(Crosshair.type, Crosshair);\n};\nexport const registerViewZoom = () => {\n mixin(ViewZoom, ViewZoomMixin);\n Factory.registerInteraction(ViewZoom.type, ViewZoom);\n};\n\nexport const registerViewScroll = () => {\n mixin(ViewScroll, ViewScrollMixin);\n Factory.registerInteraction(ViewScroll.type, ViewScroll);\n};\n\nexport const registerViewDrag = () => {\n mixin(ViewDrag, ViewDragMixin);\n Factory.registerInteraction(ViewDrag.type, ViewDrag);\n};\n\nexport const registerViewRoam = () => {\n mixin(ViewRoam, ViewZoomMixin);\n mixin(ViewRoam, ViewDragMixin);\n mixin(ViewRoam, ViewScrollMixin);\n Factory.registerInteraction(ViewRoam.type, ViewRoam);\n};\n\nexport const registerFishEye = () => {\n Factory.registerInteraction(FishEye.type, FishEye);\n};\n","import type { IMatrix } from '@visactor/vutils';\nimport { Matrix, isString, isValid, isValidNumber, merge, toCamelCase } from '@visactor/vutils';\nimport type { DataView } from '../data-view';\nimport type { Parser } from './index';\n\nexport interface ISVGSourceOption {\n type?: 'svg';\n customDOMParser?: (svg: string) => Document;\n}\n\nexport interface SVGParserResult {\n root: SVGParsedElement;\n width: number;\n height: number;\n elements: SVGParsedElement[];\n viewBoxRect?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport interface SVGParsedElement {\n id: string;\n tagName: string;\n graphicType: string;\n attributes: Record;\n name?: string;\n transform?: IMatrix;\n parent?: SVGParsedElement;\n value?: string;\n _inheritStyle?: Record;\n _textGroupStyle?: Record;\n _nameFromParent?: string;\n [key: string]: any;\n}\nconst tagNameToType = {\n svg: 'group',\n rect: 'rect',\n line: 'rule',\n polygon: 'polygon',\n path: 'path',\n polyline: 'line',\n g: 'group',\n circle: 'arc',\n ellipse: 'arc'\n};\nconst validTagName = Object.keys(tagNameToType);\nconst validGroupNode = ['g', 'svg', 'text', 'tspan', 'switch'];\nconst validTextAttributes = ['font-size', 'font-family', 'font-weight', 'font-style', 'text-align', 'text-anchor'];\nconst validCircleAttributes = ['cx', 'cy', 'r'];\nconst validEllipseAttributes = ['cx', 'cy', 'rx', 'ry'];\nconst validLineAttributes = ['x1', 'x2', 'y1', 'y2'];\nconst validAttributes = [\n 'visibility',\n 'x',\n 'y',\n 'width',\n 'height',\n 'd',\n 'points',\n 'stroke',\n 'stroke-width',\n 'fill',\n 'fill-opacity',\n 'stroke-opacity',\n ...validTextAttributes,\n ...validCircleAttributes,\n ...validEllipseAttributes,\n ...validLineAttributes\n];\nconst validInheritAttributes = [\n 'visible',\n 'fill',\n 'stroke',\n 'stroke-width',\n 'fill-opacity',\n 'stroke-opacity',\n ...validTextAttributes\n];\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr: string): string[] {\n return rawStr.match(numberReg) || [];\n}\n/**\n * 将 svg 字符串转换为指定的数据结构 SVGParserResult\n * @param data\n * @param options\n * @returns\n */\nexport const svgParser: Parser = (data: string, option: ISVGSourceOption = {}, dataView: DataView) => {\n let parser = option.customDOMParser;\n if (!parser) {\n if (window?.DOMParser) {\n parser = (svg: string) => new DOMParser().parseFromString(svg, 'text/xml');\n }\n }\n\n if (!parser) {\n throw new Error('No Available DOMParser!');\n }\n\n const svg = parser(data);\n\n let node = svg.nodeType === 9 ? svg.firstChild : svg;\n while (node && (node.nodeName.toLowerCase() !== 'svg' || node.nodeType !== 1)) {\n node = node.nextSibling;\n }\n if (node) {\n const result = parseSvgNode(node as SVGElement);\n return result;\n }\n return null;\n};\n\nlet idx = 0;\n\nfunction parseSvgNode(svg: SVGElement, opt: any = {}) {\n const elements: SVGParsedElement[] = [];\n\n const root: SVGParsedElement = parseNode(svg, null);\n let width = parseFloat(svg.getAttribute('width') || opt.width);\n let height = parseFloat(svg.getAttribute('height') || opt.height);\n !isValidNumber(width) && (width = null);\n !isValidNumber(height) && (height = null);\n\n const viewBox = svg.getAttribute('viewBox');\n let viewBoxRect: SVGParserResult['viewBoxRect'];\n\n if (viewBox) {\n const viewBoxArr = splitNumberSequence(viewBox);\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat((viewBoxArr[0] || 0) as string),\n y: parseFloat((viewBoxArr[1] || 0) as string),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n if (width || height) {\n const boundingRect = { x: 0, y: 0, width, height };\n const scaleX = boundingRect.width / viewBoxRect.width;\n const scaleY = boundingRect.height / viewBoxRect.height;\n const scale = Math.min(scaleX, scaleY);\n const transLateX = -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2);\n const transLateY =\n -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2);\n const viewBoxTransform = new Matrix().translate(transLateX, transLateY).scale(scale, scale);\n root.transform = viewBoxTransform;\n }\n }\n }\n\n traverse(svg as SVGElement, root, elements);\n return {\n root,\n width,\n height,\n elements,\n viewBoxRect\n };\n}\n\nfunction parseInheritAttributes(parsedElement: SVGParsedElement) {\n let inheritedAttrs;\n const { parent, attributes } = parsedElement;\n\n const parse = (parent: any) => {\n if (!parent) {\n return {};\n }\n return validInheritAttributes.reduce((acc, attrName) => {\n const camelAttrName = toCamelCase(attrName);\n if (isValid(parent[camelAttrName])) {\n acc[camelAttrName] = parent[camelAttrName];\n }\n return acc;\n }, {});\n };\n\n if (parent) {\n if (!parent._inheritStyle) {\n parent._inheritStyle = parse(parent.attributes);\n }\n inheritedAttrs = merge({}, parent._inheritStyle, parse(attributes));\n } else {\n inheritedAttrs = parse(attributes);\n }\n return inheritedAttrs;\n}\n\nfunction parseAttributes(el: Element) {\n const attrs = {} as any;\n const attributes = el.attributes ?? {};\n const style = (el as any).style ?? {};\n for (let i = 0; i < validAttributes.length; i++) {\n const attrName = validAttributes[i];\n const attrValue =\n isValid(style[attrName]) && style[attrName] !== '' ? style[attrName] : attributes[attrName]?.value;\n if (isValid(attrValue)) {\n attrs[toCamelCase(attrName)] = isNaN(+attrValue) ? attrValue : parseFloat(attrValue);\n }\n }\n\n if (style.display === 'none') {\n attrs.visible = false;\n }\n\n // 简单兼容处理 \"xxx:12px\" 类型的属性\n ['fontSize', 'strokeWidth', 'width', 'height'].forEach(attr => {\n const attrValue = attrs[attr];\n if (isString(attrs[attr])) {\n attrs[attr] = parseFloat(attrValue);\n }\n });\n\n return attrs;\n}\n\nfunction parseNode(node: SVGElement, parent: SVGParsedElement) {\n const tagName = node.tagName?.toLowerCase();\n if (node.nodeType === 3 || tagName === 'text' || tagName === 'tspan') {\n return parseText(node, parent);\n }\n\n if (!validTagName.includes(tagName)) {\n return null;\n }\n\n const parsed: SVGParsedElement = {\n tagName,\n graphicType: tagNameToType[tagName],\n attributes: parseAttributes(node),\n parent,\n name: node.getAttribute('name') ?? parent?.attributes?.name,\n id: node.getAttribute('id') ?? `${tagName}-${idx++}`,\n transform: parseTransform(node)\n };\n\n parsed._inheritStyle = parseInheritAttributes(parsed);\n\n if (parent && !isValid(parsed.name)) {\n parsed._nameFromParent = parent.name ?? parent._nameFromParent;\n }\n\n return parsed;\n}\n\nfunction parseText(node: SVGElement, parent: SVGParsedElement) {\n if (!parent) {\n return null;\n }\n\n const tagName = node.tagName?.toLowerCase();\n // 孤立 #text 节点不处理\n if (!tagName && parent.graphicType !== 'group') {\n return null;\n }\n\n // text 当作 group 处理\n // #text 都当作 text 处理\n const nodeAsGroup = tagName === 'text' || tagName === 'tspan';\n const elType = nodeAsGroup ? 'group' : 'text';\n const value = nodeAsGroup ? undefined : node.textContent?.replace(/\\n/g, ' ').replace(/\\s+/g, ' ');\n\n if (value === ' ') {\n return null;\n }\n\n let parsed: SVGParsedElement;\n\n if (nodeAsGroup) {\n parsed = {\n tagName,\n graphicType: elType,\n attributes: parseAttributes(node),\n parent,\n name: node.getAttribute('name'),\n id: node.getAttribute('id') ?? `${tagName}-${idx++}`,\n transform: parseTransform(node),\n value\n };\n } else {\n // #text or tspan\n parsed = {\n tagName,\n graphicType: 'text',\n attributes: parseAttributes(node),\n parent,\n name: parent?.name,\n id: node.getAttribute?.('id') ?? `${tagName}-${idx++}`,\n value\n };\n }\n\n parsed._inheritStyle = parseInheritAttributes(parsed);\n\n if (!isValid(parsed.name)) {\n parsed._nameFromParent = parent.name ?? parent._nameFromParent;\n }\n\n if (!nodeAsGroup) {\n parsed.attributes = parsed._inheritStyle;\n } else {\n if (parent._textGroupStyle) {\n parsed._textGroupStyle = merge({}, parent._textGroupStyle, parseAttributes(node));\n } else {\n parsed._textGroupStyle = parseAttributes(node);\n }\n }\n\n return parsed;\n}\n\nfunction parseTransform(node: SVGElement) {\n const transforms = (node as any).transform?.baseVal as SVGTransformList;\n if (!transforms) {\n return null;\n }\n const matrix = transforms.consolidate()?.matrix;\n if (!matrix) {\n return null;\n }\n const { a, b, c, d, e, f } = matrix;\n return new Matrix(a, b, c, d, e, f);\n}\n\nfunction traverse(node: SVGElement, parsedParent: SVGParsedElement, result: SVGParsedElement[] = []) {\n if (!node) {\n return;\n }\n\n let parseResult;\n if (node.nodeName !== 'svg') {\n parseResult = parseNode(node, parsedParent);\n }\n\n if (parseResult) {\n result.push(parseResult);\n }\n\n let child: SVGElement | null = validGroupNode.includes(node.tagName?.toLocaleLowerCase())\n ? (node.firstChild as SVGElement)\n : null;\n\n while (child) {\n traverse(child, parseResult ?? parsedParent, result);\n child = child.nextSibling as SVGElement;\n }\n}\n","import { DataSet, DataView, svgParser } from '@visactor/vdataset';\nimport type { ISVGSourceOption } from '@visactor/vdataset';\nimport { registerDataSetInstanceParser } from '../../data/register';\nimport { warn } from '../../util';\n\nexport const svgSourceMap = new Map();\n\nlet svgDataSet: DataSet | null;\n\nfunction initSVGDataSet() {\n if (svgDataSet) {\n return;\n }\n svgDataSet = new DataSet();\n registerDataSetInstanceParser(svgDataSet, 'svg', svgParser);\n}\n\nexport function registerSVGSource(key: string, source: ISVGSourceOption) {\n if (svgSourceMap.has(key)) {\n warn(`svg source key of '${key}' already exists, will be overwritten.`);\n }\n initSVGDataSet();\n const dataView = new DataView(svgDataSet!);\n dataView.parse(source, {\n type: 'svg'\n });\n\n svgSourceMap.set(key, dataView);\n}\n\nexport function unregisterSVGSource(key: string) {\n if (!svgSourceMap.has(key)) {\n warn(`map type of '${key}' does not exists.`);\n return;\n }\n svgSourceMap.delete(key);\n}\n\nexport function getSVGSource(type: string) {\n return svgSourceMap.get(type);\n}\n\nexport function clearSVGSource() {\n svgSourceMap.clear();\n svgDataSet = null;\n}\n","import type { ISeries } from '../series/interface/series';\nimport { arrayParser } from '../data/parser/array';\nimport type { ILayoutConstructor, LayoutCallBack } from '../layout/interface';\nimport type { IDataValues, IMarkStateSpec, IInitOption, IPerformanceHook } from '../typings/spec/common';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\nimport type { ISeriesConstructor } from '../series/interface';\nimport {\n ChartTypeEnum,\n type DimensionIndexOption,\n type IChart,\n type IChartConstructor,\n type IChartOption,\n type IChartSpecInfo,\n type IChartSpecTransformer\n} from '../chart/interface';\nimport type { IComponentConstructor } from '../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../component/interface/type';\nimport type {\n EventCallback,\n EventParams,\n EventParamsDefinition,\n EventQuery,\n EventType,\n IEvent,\n IEventDispatcher\n} from '../event/interface';\nimport type { IParserOptions, IFields, Transform } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, dataViewParser, DataView } from '@visactor/vdataset';\nimport type { IStage, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport { isString, isValid, isNil, array, specTransform, functionTransform } from '../util';\nimport { createID } from '../util/id';\nimport { convertPoint } from '../util/space';\nimport { isTrueBrowser } from '../util/env';\nimport { warn } from '../util/debug';\nimport { getThemeObject } from '../util/theme/common';\nimport { mergeSpec, mergeSpecWithFilter } from '@visactor/vutils-extension';\nimport { Factory } from './factory';\nimport { Event } from '../event/event';\nimport { EventDispatcher } from '../event/event-dispatcher';\nimport type { GeoSourceType } from '../typings/geo';\nimport type { GeoSourceOption } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport { getMapSource } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IMark, MarkConstructor } from '../mark/interface';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../data/register';\nimport { dataToDataView } from '../data/initialize';\nimport { copyDataView } from '../data/transforms/copy-data-view';\nimport type { ITooltipHandler } from '../typings/tooltip';\nimport type { Tooltip } from '../component/tooltip';\nimport type {\n Datum,\n IPoint,\n IRegionQuerier,\n IShowTooltipOption,\n ISpec,\n Maybe,\n MaybeArray,\n StringOrNumber\n} from '../typings';\nimport { AnimationStateEnum } from '../animation/interface';\nimport type { IBoundsLike, ILogger } from '@visactor/vutils';\nimport { ThemeManager } from '../theme/theme-manager';\nimport type { ITheme } from '../theme';\nimport type { IModel, IUpdateDataResult, IUpdateSpecResult } from '../model/interface';\nimport { Compiler } from '../compile/compiler';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { ILegend } from '../component/legend/interface';\nimport { getCanvasDataURL, URLToImage } from '../util/image';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport { DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH } from '../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n isArray,\n isEmpty,\n Logger,\n merge as mergeOrigin,\n isFunction,\n LoggerLevel,\n isEqual,\n get,\n cloneDeep,\n isObject,\n throttle\n} from '@visactor/vutils';\nimport type {\n DataLinkAxis,\n DataLinkSeries,\n IGlobalConfig,\n IVChart,\n IVChartRenderOption,\n VChartRenderActionSource\n} from './interface';\nimport { InstanceManager } from './instance-manager';\nimport type { IAxis } from '../component/axis';\nimport { setPoptipTheme } from '@visactor/vrender-components';\nimport { calculateChartSize, mergeUpdateResult } from '../chart/util';\nimport { Region } from '../region/region';\nimport { Layout } from '../layout/base-layout';\nimport { registerGroupMark } from '../mark/group';\nimport { View, registerGesturePlugin } from '@visactor/vgrammar-core';\nimport { VCHART_UTILS } from './util';\nimport { ExpressionFunction } from './expression-function';\nimport { registerBrowserEnv, registerNodeEnv } from '../env';\nimport { mergeTheme, preprocessTheme } from '../util/theme';\nimport { darkTheme, registerTheme } from '../theme/builtin';\nimport type { IChartPluginService } from '../plugin/chart/interface';\nimport { ChartPluginService } from '../plugin/chart/plugin-service';\nimport {\n registerElementHighlight as registerHoverInteraction,\n registerElementSelect as registerSelectInteraction\n} from '../interaction';\nimport type { IIndicator } from '../component/indicator';\nimport type { IGeoCoordinate } from '../component/geo';\nimport { getSVGSource } from '../series/pictogram/svg-source';\n\nexport class VChart implements IVChart {\n readonly id = createID();\n\n /**\n * 按需注册图表和组件\n * @param comps\n * @since 1.5.1\n */\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n if (typeof fn === 'function') {\n // 确保元素是函数类型\n fn();\n } else {\n console.error('Invalid function:', fn);\n }\n });\n }\n\n /**\n * 注册自定义图表\n * @param charts 图表类\n * @description 若用于按需加载,1.5.1版本后,请统一使用 `useRegisters` API,例如:`VChart.useRegisters([registerLineChart])`。\n */\n static useChart(charts: IChartConstructor[]) {\n charts.forEach(c => Factory.registerChart(c.type, c));\n }\n /**\n * 注册自定义系列\n * @param series 系列类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerLineSeries])`。\n */\n static useSeries(series: ISeriesConstructor[]) {\n series.forEach(s => Factory.registerSeries(s.type, s));\n }\n /**\n * 注册自定义组件\n * @param components 组件类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerCartesianLinearAxis])`。\n */\n static useComponent(components: IComponentConstructor[]) {\n components.forEach(c => Factory.registerComponent(c.type, c));\n }\n /**\n * 注册自定义 Mark\n * @param marks Mark 图元类\n */\n static useMark(marks: MarkConstructor[]) {\n marks.forEach(m => Factory.registerMark(m.constructorType ?? m.type, m));\n }\n /**\n * 注册自定义布局\n * @param layouts 布局类\n */\n static useLayout(layouts: ILayoutConstructor[]) {\n layouts.forEach(l => Factory.registerLayout(l.type, l));\n }\n /**\n * 注册 DataSet 数据方法\n * @param name 数据 transform 方法名称\n * @param transform 具体的 Transform 执行方法\n */\n static registerDataSetTransform(name: string, transform: Transform) {\n Factory.registerTransform(name, transform);\n }\n\n /**\n * 注册函数(全局注册)\n * @param key 函数名称\n * @param fun 函数内容\n */\n static registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销函数(全局注销)\n * @param key 函数名称\n */\n static unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取函数(全局)\n * @param key\n * @returns\n */\n static getFunction(key: string): Function | null {\n if (!key) {\n return null;\n }\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 获取函数列表(全局获取)\n * @returns\n */\n static getFunctionList(): string[] | null {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /**\n * 注册地图数据\n * @param key 地图名称\n * @param source 地图数据\n * @param option 地图数据配置\n */\n static registerMap(key: string, source: GeoSourceType, option?: GeoSourceOption) {\n const impl = Factory.getImplementInKey('registerMap');\n impl && impl(key, source, option);\n }\n\n /**\n * 注销地图数据\n * @param key 地图名称\n */\n static unregisterMap(key: string) {\n const impl = Factory.getImplementInKey('unregisterMap');\n impl && impl(key);\n }\n\n /**\n * 根据地图名称获取地图数据\n * @param key 地图名称\n * @returns 地图数据\n */\n static getMap(key: string): GeoSourceType {\n return getMapSource(key);\n }\n\n /**\n * 注册地图数据\n * @param key 地图名称\n * @param source 地图数据\n * @param option 地图数据配置\n */\n static registerSVG(key: string, source: GeoSourceType, option?: GeoSourceOption) {\n const impl = Factory.getImplementInKey('registerSVG');\n impl && impl(key, source, option);\n }\n\n /**\n * 注销地图数据\n * @param key 地图名称\n */\n static unregisterSVG(key: string) {\n const impl = Factory.getImplementInKey('unregisterSVG');\n impl && impl(key);\n }\n\n /**\n * 根据地图名称获取地图数据\n * @param key 地图名称\n * @returns 地图数据\n */\n static getSVG(key: string): any {\n return getSVGSource(key);\n }\n\n /**\n * 全局关闭 tooltip\n * @param excludeId 可选,指定不需要关闭 tooltip 的实例 id\n */\n static hideTooltip(excludeId: MaybeArray = []): void {\n InstanceManager.forEach(instance => instance?.hideTooltip?.(), excludeId);\n }\n\n /** 获取 Logger */\n static getLogger(): ILogger {\n return Logger.getInstance();\n }\n\n /** 图表实例管理器 */\n static readonly InstanceManager = InstanceManager;\n /** 主题管理器 */\n static readonly ThemeManager = ThemeManager;\n\n /** 全局配置 */\n static globalConfig: IGlobalConfig = {\n uniqueTooltip: true\n };\n\n /** 工具方法 */\n static readonly Utils = VCHART_UTILS;\n\n static readonly vglobal = vglobal;\n\n protected _originalSpec: any;\n protected _spec: any;\n getSpec() {\n return this._spec;\n }\n\n protected _specInfo: IChartSpecInfo;\n getSpecInfo() {\n return this._specInfo;\n }\n\n private _viewBox: IBoundsLike;\n private _chart!: Maybe;\n private _chartSpecTransformer!: Maybe;\n private _compiler: Compiler;\n private _event: Maybe;\n private _userEvents: {\n eType: EventType;\n query: EventQuery | EventCallback;\n handler?: EventCallback;\n }[] = [];\n private _eventDispatcher: Maybe;\n private _dataSet!: Maybe;\n getDataSet() {\n return this._dataSet;\n }\n\n private _container?: HTMLElement;\n private _canvas?: HTMLCanvasElement | OffscreenCanvas | string;\n private _stage?: Stage;\n\n private _autoSize: boolean = true;\n private _option: IInitOption = {\n mode: RenderModeEnum['desktop-browser'],\n onError: (msg: string) => {\n throw new Error(msg);\n },\n optimize: {\n disableCheckGraphicWidthOutRange: true\n }\n };\n\n private _currentSize: { width: number; height: number };\n private _observer: ResizeObserver = null;\n\n private _currentThemeName: string;\n private _currentTheme: ITheme;\n\n private _onError?: (...args: any[]) => void;\n\n private _context: any = {}; // 存放用户在model初始化前通过实例方法传入的配置等\n private _isReleased: boolean;\n\n private _chartPlugin?: IChartPluginService;\n private _onResize?: () => void;\n\n constructor(spec: ISpec, options: IInitOption) {\n this._option = mergeOrigin(this._option, { animation: (spec as any).animation !== false }, options);\n this._onError = this._option?.onError;\n\n const { dom, renderCanvas, mode, stage, poptip, ...restOptions } = this._option;\n const isTrueBrowseEnv = isTrueBrowser(mode);\n\n // 根据 mode 配置动态加载浏览器或 node 环境代码\n if (isTrueBrowseEnv) {\n registerBrowserEnv();\n } else if (mode === 'node') {\n registerNodeEnv();\n }\n\n if (isTrueBrowseEnv && dom) {\n this._container = isString(dom) ? vglobal.getElementById(dom) : dom;\n }\n if (renderCanvas) {\n this._canvas = renderCanvas;\n }\n if (stage) {\n this._stage = stage as unknown as Stage; // FIXME: 等待 vrender 解决类型和接口不匹配的问题 @zhouxinyu\n }\n\n if (mode !== 'node' && !this._container && !this._canvas && !this._stage) {\n this._option?.onError('please specify container or renderCanvas!');\n return;\n }\n\n this._viewBox = this._option.viewBox;\n this._currentThemeName = ThemeManager.getCurrentThemeName();\n this._setNewSpec(spec);\n this._updateCurrentTheme();\n this._currentSize = this.getCurrentSize();\n const pluginList: string[] = [];\n\n if (!poptip !== false) {\n pluginList.push('poptipForText');\n }\n\n if (spec.type === ChartTypeEnum.sankey) {\n // 桑基图默认记载滚动条组件\n pluginList.push('scrollbar');\n }\n // hook增加图表实例参数\n const performanceHook = { ...(restOptions.performanceHook || {}) };\n (Object.keys(performanceHook) as (keyof IPerformanceHook)[]).forEach(hookKey => {\n // @ts-ignore\n restOptions.performanceHook[hookKey] = (...args) => {\n // @ts-ignore\n performanceHook[hookKey](...args, this as any);\n };\n });\n\n this._compiler = new Compiler(\n {\n dom: this._container ?? 'none',\n canvas: renderCanvas\n },\n {\n mode: this._option.mode,\n stage,\n pluginList,\n ...restOptions,\n background: this._getBackground(),\n onError: this._onError\n }\n );\n this._compiler.setSize(this._currentSize.width, this._currentSize.height);\n this._eventDispatcher = new EventDispatcher(this, this._compiler);\n this._event = new Event(this._eventDispatcher, mode);\n this._compiler.initView();\n // TODO: 如果通过 updateSpec 更新主题字体的验证\n // 设置全局字体\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n this._initDataSet(this._option.dataSet);\n this._autoSize = isTrueBrowseEnv ? spec.autoFit ?? this._option.autoFit ?? true : false;\n this._bindResizeEvent();\n this._bindVGrammarViewEvent();\n this._initChartPlugin();\n\n InstanceManager.registerInstance(this);\n this._option.performanceHook?.afterCreateVChart?.(this);\n }\n\n /** 设置新 spec,返回是否成功 */\n private _setNewSpec(spec: any, forceMerge?: boolean): boolean {\n if (!spec) {\n return false;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n if (forceMerge && this._originalSpec) {\n spec = mergeSpec({}, this._originalSpec, spec);\n }\n this._originalSpec = spec;\n this._spec = this._getSpecFromOriginalSpec();\n return true;\n }\n\n private _getSpecFromOriginalSpec() {\n // 转换在实例上注册的函数 + 深拷贝 spec,保证 _originalSpec 和 _spec 的不同\n const spec = specTransform(this._originalSpec) as any;\n // because of in data-init, data will be set as array;\n spec.data = spec.data ?? [];\n return spec;\n }\n\n private _initChartSpec(spec: any, actionSource: VChartRenderActionSource) {\n // 如果用户注册了函数,在配置中替换相应函数名为函数内容\n if (VChart.getFunctionList() && VChart.getFunctionList().length) {\n spec = functionTransform(spec, VChart);\n }\n this._spec = spec;\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(\n this._spec.type,\n this._getChartOption(this._spec.type)\n );\n }\n\n this._chartSpecTransformer?.transformSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterChartSpecTransform', this._spec, actionSource);\n\n this._specInfo = this._chartSpecTransformer?.transformModelSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterModelSpecTransform', this._spec, this._specInfo, actionSource);\n }\n\n private _updateSpecInfo() {\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(\n this._spec.type,\n this._getChartOption(this._spec.type)\n );\n }\n this._specInfo = this._chartSpecTransformer?.createSpecInfo(this._spec);\n }\n\n private _initChart(spec: any) {\n if (!this._compiler) {\n this._option?.onError('compiler is not initialized');\n return;\n }\n if (this._chart) {\n this._option?.onError('chart is already initialized');\n return;\n }\n\n // 放到这里而不是放到chart内的考虑\n // 用户spec更新,也许会有core上图表实例的内容存在\n // 如果要支持spec的类似Proxy监听,更新逻辑应当从这一层开始。如果在chart上做,就需要在再向上发送spec更新消息,不是很合理。\n // todo: 问题1 存不存在 chart 需要在这个阶段处理的特殊字段?目前没有,但是理论上可以有?\n const chart = Factory.createChart(spec.type, spec, this._getChartOption(spec.type));\n if (!chart) {\n this._option?.onError('init chart fail');\n return;\n }\n this._chart = chart;\n this._chart.setCanvasRect(this._currentSize.width, this._currentSize.height);\n this._chart.created(this._chartSpecTransformer);\n this._chart.init();\n this._event.emit(ChartEvent.initialized, {\n chart,\n vchart: this\n });\n }\n\n private _releaseData() {\n if (this._dataSet) {\n // Object.values(this._dataSet.dataViewMap).forEach(d => {\n // d.target.removeAllListeners();\n // d.destroy();\n // });\n this._dataSet.dataViewMap = {};\n this._dataSet = null;\n }\n }\n\n private _bindVGrammarViewEvent() {\n if (!this._compiler) {\n return;\n }\n const view = this._compiler.getVGrammarView();\n\n view.addEventListener(VGRAMMAR_HOOK_EVENT.ALL_ANIMATION_END, () => {\n this._event.emit(ChartEvent.animationFinished, {\n chart: this._chart,\n vchart: this\n });\n });\n view.addEventListener(VGRAMMAR_HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER, () => {\n this._event.emit(ChartEvent.renderFinished, {\n chart: this._chart,\n vchart: this\n });\n });\n }\n\n private _bindResizeEvent() {\n if (this._autoSize) {\n this._onResize = throttle(this._doResize, this._option.resizeDelay ?? 100);\n\n if (this._container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n\n if (ResizeObserverWindow) {\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(this._container);\n }\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this._autoSize) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n getCurrentSize() {\n return calculateChartSize(\n this._spec,\n {\n container: this._container,\n canvas: this._canvas,\n mode: this._getMode(),\n modeParams: this._option.modeParams\n },\n {\n width: this._currentSize?.width ?? DEFAULT_CHART_WIDTH,\n height: this._currentSize?.height ?? DEFAULT_CHART_HEIGHT\n }\n );\n }\n\n private _doResize = () => {\n const { width, height } = this.getCurrentSize();\n if (this._currentSize.width !== width || this._currentSize.height !== height) {\n this._currentSize = { width, height };\n this.resizeSync(width, height);\n }\n };\n\n private _initDataSet(dataSet?: DataSet) {\n if (dataSet instanceof DataSet) {\n this._dataSet = dataSet;\n } else {\n this._dataSet = new DataSet();\n }\n registerDataSetInstanceParser(this._dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceParser(this._dataSet, 'array', arrayParser);\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n // 注册 dataset transform\n for (const key in Factory.transforms) {\n registerDataSetInstanceTransform(this._dataSet, key, Factory.transforms[key]);\n }\n // 注册 dataview parser\n for (const key in Factory.dataParser) {\n registerDataSetInstanceParser(this._dataSet, key, Factory.dataParser[key]);\n }\n }\n\n /** 在修改图表配置后重新渲染 */\n updateCustomConfigAndRerender(\n updateSpecResult: IUpdateSpecResult | (() => IUpdateSpecResult),\n sync?: boolean,\n option: IVChartRenderOption = {}\n ) {\n if (this._isReleased || !updateSpecResult) {\n return undefined;\n }\n if (isFunction(updateSpecResult)) {\n updateSpecResult = updateSpecResult();\n }\n\n if (updateSpecResult.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n\n this._reCompile(updateSpecResult);\n if (sync) {\n return this._renderSync(option);\n }\n return this._renderAsync(option);\n }\n\n /** 执行自定义的回调修改图表配置,并重新编译(不渲染) */\n protected _updateCustomConfigAndRecompile(updateSpecResult: IUpdateSpecResult, option: IVChartRenderOption = {}) {\n if (!updateSpecResult) {\n return false;\n }\n this._reCompile(updateSpecResult);\n return this._beforeRender(option);\n }\n\n protected _reCompile(updateResult: IUpdateSpecResult, morphConfig?: IMorphConfig) {\n if (updateResult.reMake) {\n this._releaseData();\n this._initDataSet();\n this._chart?.release();\n this._chart = null as unknown as IChart;\n }\n\n if (updateResult.reTransformSpec) {\n // 释放图表等等\n this._chartSpecTransformer = null;\n }\n\n // 卸载了chart之后再设置主题 避免多余的reInit\n if (updateResult.changeTheme) {\n this._setCurrentTheme();\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n } else if (updateResult.changeBackground) {\n this._compiler?.setBackground(this._getBackground());\n }\n\n if (updateResult.reMake) {\n // 如果不需要动画,那么释放item,避免元素残留\n this._compiler?.releaseGrammar(this._option?.animation === false || this._spec?.animation === false);\n // chart 内部事件 模块自己必须删除\n // 内部模块删除事件时,调用了event Dispatcher.release() 导致用户事件被一起删除\n // 外部事件现在需要重新添加\n this._userEvents.forEach(e => this._event?.on(e.eType as any, e.query as any, e.handler as any));\n\n if (updateResult.reSize) {\n this._doResize();\n }\n } else {\n if (updateResult.reCompile) {\n // recompile\n // 清除之前的所有 compile 内容\n this._compiler?.clear(\n { chart: this._chart, vChart: this },\n this._option?.animation === false || this._spec?.animation === false\n );\n // TODO: 释放事件? vgrammar 的 view 应该不需要释放,响应的stage也没有释放,所以事件可以不绑定\n // 重新绑定事件\n // TODO: 释放XX?\n // 重新compile\n this._compiler?.compile({ chart: this._chart, vChart: this }, {});\n }\n if (updateResult.reSize) {\n const { width, height } = this.getCurrentSize();\n this._chart.onResize(width, height, false);\n this._compiler.resize(width, height, false);\n }\n }\n }\n\n /** 渲染之前的步骤,返回是否成功 */\n protected _beforeRender(option: IVChartRenderOption = {}): boolean {\n // 如果 vchart 实例已经卸载,终止渲染\n if (this._isReleased) {\n return false;\n }\n // 如果图表已经实例化,跳过该步骤\n if (this._chart) {\n return true;\n }\n\n const { transformSpec, actionSource } = option;\n\n if (transformSpec) {\n // 初始化图表 spec\n this._initChartSpec(this._spec, 'render');\n // 插件生命周期\n }\n this._chartPluginApply('onBeforeInitChart', this._spec, actionSource);\n\n // 实例化图表\n this._option.performanceHook?.beforeInitializeChart?.(this);\n this._initChart(this._spec);\n this._option.performanceHook?.afterInitializeChart?.(this);\n // 如果实例化失败,终止渲染\n if (!this._chart || !this._compiler) {\n return false;\n }\n\n // compile\n this._option.performanceHook?.beforeCompileToVGrammar?.();\n this._compiler.compile({ chart: this._chart, vChart: this }, { performanceHook: this._option.performanceHook });\n this._option.performanceHook?.afterCompileToVGrammar?.();\n return true;\n }\n\n /** 渲染之后的步骤 */\n protected _afterRender(): boolean {\n if (this._isReleased) {\n return false;\n }\n this._updateAnimateState();\n this._event.emit(ChartEvent.rendered, {\n chart: this._chart,\n vchart: this\n });\n return true;\n }\n\n /**\n * **同步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderSync(morphConfig?: IMorphConfig) {\n return this._renderSync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n /**\n * **异步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n async renderAsync(morphConfig?: IMorphConfig) {\n return this._renderAsync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n protected _renderSync = (option: IVChartRenderOption = {}) => {\n const self = this as unknown as IVChart;\n if (!this._beforeRender(option)) {\n return self;\n }\n // 填充数据绘图\n this._compiler?.render(option.morphConfig);\n this._afterRender();\n return self;\n };\n\n protected async _renderAsync(option: IVChartRenderOption = {}) {\n return this._renderSync(option);\n }\n\n private _updateAnimateState(initial?: boolean) {\n if (this._option.animation) {\n const animationState = initial ? AnimationStateEnum.appear : AnimationStateEnum.update;\n this._chart?.getAllRegions().forEach(region => {\n region.animate?.updateAnimateState(animationState, true);\n });\n this._chart?.getAllComponents().forEach(component => {\n component.animate?.updateAnimateState(animationState, true);\n });\n }\n }\n\n /**\n * 销毁图表\n */\n release() {\n if ((this._onResize as any)?.cancel) {\n (this._onResize as any).cancel();\n }\n this._chartPluginApply('releaseAll');\n this._chartPlugin = null;\n this._chartSpecTransformer = null;\n this._chart?.release();\n // eventDispatcher 的release 依赖 compiler\n this._eventDispatcher?.release();\n this._compiler?.release();\n this._unBindResizeEvent();\n // resetID(); // 为什么要重置ID呢?\n\n this._releaseData();\n\n this._onError = null;\n this._onResize = null;\n this._container = null;\n this._currentTheme = null;\n this._option = null;\n this._chart = null;\n this._compiler = null;\n this._spec = null;\n this._specInfo = null;\n this._originalSpec = null;\n // this._option = null;\n this._userEvents = null;\n this._event = null;\n this._eventDispatcher = null;\n this._isReleased = true;\n\n InstanceManager.unregisterInstance(this);\n }\n\n /**\n * **异步方法** 更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param parserOptions 数据参数\n * @returns VChart 实例\n */\n async updateData(\n id: StringOrNumber,\n data: DataView | Datum[] | string,\n parserOptions?: IParserOptions,\n userUpdateOptions?: IUpdateDataResult\n ): Promise {\n return this.updateDataSync(id, data, parserOptions, userUpdateOptions);\n }\n\n private _updateDataById(id: StringOrNumber, data: DataView | Datum[] | string, parserOptions?: IParserOptions) {\n const preDV = this._spec.data.find((dv: any) => dv.name === id || dv.id === id);\n if (preDV) {\n if (preDV.id === id) {\n preDV.values = data;\n } else if (preDV.name === id) {\n preDV.parse(data, parserOptions);\n }\n } else {\n if (isArray(data)) {\n this._spec.data.push({\n id,\n values: data\n });\n } else {\n this._spec.data.push(data);\n }\n }\n }\n\n /**\n * **异步方法** 批量更新数据。\n * @param list 待更新的数据列表\n * @returns VChart 实例\n */\n async updateDataInBatches(list: { id: string; data: Datum[]; options?: IParserOptions }[]): Promise {\n if (this._chart) {\n this._chart.updateFullData(\n list.map(({ id, data, options }) => {\n return { id, values: data, parser: options };\n })\n );\n this._chart.updateGlobalScaleDomain();\n this._compiler.render();\n return this as unknown as IVChart;\n }\n\n this._spec.data = array(this._spec.data);\n list.forEach(({ id, data, options }) => {\n this._updateDataById(id, data, options);\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param id 数据 id\n * @param data 数据值\n * @param parserOptions 数据参数\n * @returns VChart 实例\n */\n updateDataSync(\n id: StringOrNumber,\n data: DataView | Datum[] | string,\n parserOptions?: IParserOptions,\n userUpdateOptions?: IUpdateDataResult\n ) {\n if (isNil(this._dataSet)) {\n return this as unknown as IVChart;\n }\n if (this._chart) {\n if (userUpdateOptions?.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n\n this._chart.updateData(id, data, true, parserOptions);\n\n // after layout\n this._compiler.render();\n return this as unknown as IVChart;\n }\n this._spec.data = array(this._spec.data);\n\n this._updateDataById(id, data, parserOptions);\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n updateFullDataSync(\n data: IDataValues | IDataValues[],\n reRender: boolean = true,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n if (this._chart) {\n if (userUpdateOptions?.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n this._chart.updateFullData(data);\n if (reRender) {\n this._compiler.render();\n }\n return this as unknown as IVChart;\n }\n\n const prevData = array(this._spec.data) as DataView[];\n const list: IDataValues[] = array(data);\n list.forEach(d => {\n // only support update this attrs\n const { id, values, parser, fields } = d;\n const preDV = prevData.find(dv => dv.name === id);\n if (preDV) {\n if (preDV instanceof DataView) {\n preDV.setFields(cloneDeep(fields) as IFields);\n preDV.parse(values, cloneDeep(parser) as IParserOptions);\n } else {\n (preDV as IDataValues).values = values;\n isValid(parser) && ((preDV as IDataValues).parser = parser);\n isValid(fields) && ((preDV as IDataValues).fields = fields);\n }\n } else {\n // new data\n const dataView = dataToDataView(d, this._dataSet, prevData);\n\n if (isArray(this._spec.data)) {\n this._spec.data.push(dataView);\n }\n }\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **异步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n async updateFullData(data: IDataValues | IDataValues[], reRender: boolean = true) {\n return this.updateFullDataSync(data, reRender);\n }\n\n /**\n * **异步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n async updateSpec(\n spec: ISpec,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n const result = this._updateSpec(spec, forceMerge, userUpdateOptions);\n\n if (!result) {\n return this as unknown as IVChart;\n }\n\n await this.updateCustomConfigAndRerender(result, false, {\n morphConfig,\n transformSpec: result.reTransformSpec,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n updateSpecSync(\n spec: ISpec,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n const result = this._updateSpec(spec, forceMerge, userUpdateOptions);\n\n if (!result) {\n return this as unknown as IVChart;\n }\n\n this.updateCustomConfigAndRerender(result, true, {\n morphConfig,\n transformSpec: result.reTransformSpec,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /** 更新 spec 并重新编译(不渲染),返回是否成功 */\n updateSpecAndRecompile(spec: ISpec, forceMerge: boolean = false, option: IVChartRenderOption = {}) {\n const result = this._updateSpec(spec, forceMerge);\n return this._updateCustomConfigAndRecompile(result, {\n actionSource: 'updateSpecAndRecompile',\n ...option\n });\n }\n\n private _updateSpec = (\n spec: ISpec,\n forceMerge: boolean = false,\n userUpdateOptions?: IUpdateSpecResult\n ): IUpdateSpecResult | undefined => {\n const lastSpec = this._spec;\n\n const result: IUpdateSpecResult = {\n changeBackground: false,\n reTransformSpec: false,\n change: false,\n reMake: false,\n reCompile: false,\n reSize: false,\n changeTheme: false\n };\n\n // 这里已经将 this._spec 设置为新spec\n if (!this._setNewSpec(spec, forceMerge)) {\n return undefined;\n }\n\n // 这时图表内对象是旧的,对应上一份 spec\n if (!isEqual(lastSpec.theme, this._spec.theme)) {\n result.changeTheme = true;\n // setCurrentTheme 会导致 chart 实例的 reInit。\n // 只要模块从 vchart 实例获取与 spec 相关的信息,都会出现错误,它们已经不匹配了\n // this._setCurrentTheme();\n } else if (!isEqual(this._spec.background, lastSpec.background)) {\n result.reMake = true;\n result.changeBackground = true;\n }\n\n const reSize = this._shouldChartResize(lastSpec);\n result.reSize = reSize;\n\n if (this._spec.type !== lastSpec.type) {\n this._compiler?.getVGrammarView()?.updateLayoutTag();\n result.reMake = true;\n result.reTransformSpec = true;\n result.change = true;\n result.changeTheme = true; // 支持了根据图表类型 merge 当前主题。当 type 变了后,需要更新主题\n return result;\n }\n // 再次处理 spec 并得到 specInfo\n this._initChartSpec(this._spec, 'updateSpec');\n\n const res = mergeUpdateResult(this._chart.updateSpec(this._spec), result);\n\n return userUpdateOptions\n ? {\n ...res,\n ...userUpdateOptions\n }\n : res;\n };\n\n /**\n * **异步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n async updateModelSpec(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n return this.updateModelSpecSync(filter, spec, forceMerge, morphConfig);\n }\n\n /**\n * **同步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpecSync(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (!spec || !this._spec) {\n return this as unknown as IVChart;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n\n if (!isFunction(filter)) {\n // find spec and update\n mergeSpecWithFilter(this._spec, filter, spec, forceMerge);\n }\n\n if (this._chart) {\n const model = this._chart.getModelInFilter(filter);\n if (model) {\n return this._updateModelSpec(model, spec, true, forceMerge, morphConfig) as IVChart;\n }\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 模块 spec 更新\n * @param model\n * @param spec\n * @param forceMerge\n * @returns\n */\n protected _updateModelSpec(\n model: IModel,\n spec: unknown,\n sync: boolean = false,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (forceMerge) {\n spec = mergeSpec({}, model.getSpec(), spec);\n }\n\n const result = model.updateSpec(spec);\n model.reInit(spec);\n if (result.change || result.reCompile || result.reMake || result.reSize || result.reRender) {\n this._chart.reDataFlow();\n }\n\n return this.updateCustomConfigAndRerender(result, sync, {\n morphConfig,\n transformSpec: false,\n actionSource: 'updateModelSpec'\n });\n }\n\n /**\n * **异步方法**,图表尺寸更新方法\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n async resize(width: number, height: number) {\n return this.resizeSync(width, height);\n }\n\n /**\n * **同步方法**,图表尺寸更新方法\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n resizeSync(width: number, height: number) {\n if (!this._beforeResize(width, height)) {\n return this as unknown as IVChart;\n }\n this._compiler.resize?.(width, height);\n return this._afterResize();\n }\n\n protected _beforeResize(width: number, height: number): boolean {\n if (!this._chart || !this._compiler) {\n return false;\n }\n // 如果宽高未变化,不需要重新执行 resize,防止当图表初始化时会执行一次多余的 resize\n const chartCanvasRect = this._chart.getCanvasRect();\n if (chartCanvasRect && chartCanvasRect.width === width && chartCanvasRect.height === height) {\n return false;\n }\n\n // 插件生命周期\n this._chartPluginApply('onBeforeResize', width, height);\n\n this._option.performanceHook?.beforeResizeWithUpdate?.();\n this._chart.onResize(width, height, false);\n this._option.performanceHook?.afterResizeWithUpdate?.();\n\n return true;\n }\n\n protected _afterResize() {\n if (!this._isReleased) {\n // emit resize event\n this._event.emit(ChartEvent.afterResize, { chart: this._chart });\n }\n return this as unknown as IVChart;\n }\n\n /**\n * 更新绘制区域\n * @param viewBox 绘制区域\n * @param reRender 是否重新渲染,默认为 true\n * @param reLayout 是否重新布局,默认为 true\n * @returns\n */\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true, reLayout: boolean = true) {\n if (!this._chart || !this._compiler) {\n return this as unknown as IVChart;\n }\n this._viewBox = viewBox;\n // 更新 layout 参数\n this._chart.updateViewBox(viewBox, reLayout);\n if (reLayout) {\n // 重新布局\n this._compiler.render();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this._chart.onEvaluateEnd();\n }\n // 获取 compiler\n this._compiler.updateViewBox(viewBox, reRender);\n return this as unknown as IVChart;\n }\n\n // 事件相关方法\n on(eType: EventType, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery | EventCallback, handler?: EventCallback): void {\n if (!this._userEvents) {\n // userEvents正常情况下有默认值,如果!userEvents,说明此时chart被release了,就可以终止流程\n return;\n }\n this._userEvents.push({\n eType,\n query: typeof query === 'function' ? null : query,\n handler: typeof query === 'function' ? query : handler\n });\n this._event?.on(eType as any, query as any, handler as any);\n }\n off(eType: EventType, handler?: EventCallback): void {\n if (!this._userEvents || this._userEvents.length === 0) {\n return;\n }\n if (handler) {\n const index = this._userEvents.findIndex(e => e.eType === eType && e.handler === handler);\n if (index >= 0) {\n this._userEvents.splice(index, 1);\n this._event?.off(eType, handler);\n }\n } else {\n this._userEvents.forEach(e => {\n if (e.eType === eType) {\n this._event?.off(eType, e.handler);\n }\n });\n this._userEvents = this._userEvents.filter(e => e.eType !== eType);\n }\n }\n\n // 状态相关方法\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.updateState(state, filter);\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setSelected(datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setHovered(datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n if (!this._chart) {\n return;\n }\n this._chart.clearState(state);\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n if (!this._chart) {\n return;\n }\n this._chart.clearAllStates();\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n if (!this._chart) {\n return;\n }\n this._chart.clearSelected();\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n if (!this._chart) {\n return;\n }\n this._chart.clearHovered();\n }\n\n // 主题相关方法\n /**\n * 当 spec 或者 currentThemeName 有变化时需要调用此方法对 currentTheme 进行更新\n * @param nextThemeName 通过 setCurrentTheme 方法新设的主题\n */\n private _updateCurrentTheme(nextThemeName?: string) {\n const optionTheme: Maybe = this._option.theme;\n const specTheme: Maybe = this._spec?.theme;\n const chartType: string = this._spec?.type;\n if (nextThemeName) {\n this._currentThemeName = nextThemeName;\n }\n\n const processThemeByChartType = (type: string, theme: ITheme) => {\n if (theme.chart?.[type]) {\n theme = mergeTheme({}, theme, theme.chart[type]);\n }\n return theme;\n };\n\n let currentTheme;\n // 处理 specTheme 和 optionTheme, merge -> transform\n // 优先级 currentTheme < optionTheme < specTheme\n if (!isEmpty(optionTheme) || !isEmpty(specTheme)) {\n if (\n (isString(optionTheme) && (!specTheme || isString(specTheme))) ||\n (isString(specTheme) && (!optionTheme || isString(optionTheme)))\n ) {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName, true),\n getThemeObject(optionTheme, true),\n getThemeObject(specTheme, true)\n );\n\n this._currentTheme = processThemeByChartType(chartType, finalTheme);\n } else {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName),\n getThemeObject(optionTheme),\n getThemeObject(specTheme)\n );\n this._currentTheme = preprocessTheme(processThemeByChartType(chartType, finalTheme));\n }\n } else {\n currentTheme = getThemeObject(this._currentThemeName, true);\n this._currentTheme = processThemeByChartType(chartType, currentTheme);\n }\n\n // 设置 poptip 的主题\n setPoptipTheme(get(this._currentTheme, 'component.poptip'));\n // 设置背景色\n this._compiler?.setBackground(this._getBackground());\n }\n\n private _shouldChartResize(oldSpec: ISpec): boolean {\n let resize = false;\n\n if (isNil(this._spec.width)) {\n !isNil(oldSpec.width) && (this._spec.width = oldSpec.width);\n } else if (this._spec.width !== oldSpec.width) {\n resize = true;\n }\n\n if (isNil(this._spec.height)) {\n !isNil(oldSpec.height) && (this._spec.height = oldSpec.height);\n } else if (this._spec.height !== oldSpec.height) {\n resize = true;\n }\n\n const lasAutoSize = this._autoSize;\n this._autoSize = isTrueBrowser(this._option.mode) ? this._spec.autoFit ?? this._option.autoFit ?? true : false;\n if (this._autoSize !== lasAutoSize) {\n resize = true;\n }\n return resize;\n }\n\n private _getBackground() {\n const specBackground =\n typeof this._spec.background === 'string' || (isObject(this._spec.background) && this._spec.background.gradient)\n ? this._spec.background\n : null;\n // spec > spec.theme > initOptions.theme\n return specBackground || (this._currentTheme.background as string) || this._option.background;\n }\n\n /**\n * 获取当前主题,会返回完整的主题配置(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n * */\n getCurrentTheme() {\n return getThemeObject(this._currentThemeName);\n }\n\n /**\n * 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n */\n getCurrentThemeName() {\n return this._currentThemeName;\n }\n\n /**\n * **异步方法**, 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n async setCurrentTheme(name: string) {\n return this.setCurrentThemeSync(name);\n }\n\n /**\n * **同步方法** 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n setCurrentThemeSync(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return this as unknown as IVChart;\n }\n const result = this._setCurrentTheme(name);\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n this.updateCustomConfigAndRerender(result, true, {\n transformSpec: false,\n actionSource: 'setCurrentTheme'\n });\n return this as unknown as IVChart;\n }\n\n protected _setCurrentTheme(name?: string): IUpdateSpecResult {\n this._updateCurrentTheme(name);\n this._initChartSpec(this._getSpecFromOriginalSpec(), 'setCurrentTheme');\n this._chart?.setCurrentTheme();\n return { change: true, reMake: false };\n }\n\n private _setFontFamilyTheme(fontFamily: string) {\n if (!fontFamily) {\n return;\n }\n // 全局字体的特殊设置逻辑\n // 设置全局字体\n (this.getStage() as any)?.setTheme({ text: { fontFamily } });\n }\n\n // Tooltip 相关方法\n private _getTooltipComponent(): Tooltip | undefined {\n const tooltip = this._chart?.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as Tooltip;\n return tooltip;\n }\n\n /**\n * 自定义 TooltipHandler\n * @param tooltipHandler\n */\n setTooltipHandler(tooltipHandler: ITooltipHandler) {\n this._context.tooltipHandler = tooltipHandler;\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n tooltip.tooltipHandler?.release?.();\n tooltip.tooltipHandler = tooltipHandler;\n }\n }\n\n /**\n * 获取用户定义的 TooltipHandler\n * @returns ITooltipHandler\n */\n getTooltipHandlerByUser(): ITooltipHandler | undefined {\n return this._context?.tooltipHandler;\n }\n\n /**\n * 获取 TooltipHandler\n * @returns\n */\n getTooltipHandler(): ITooltipHandler | undefined {\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n return tooltip.tooltipHandler;\n }\n return this._context.tooltipHandler;\n }\n\n /**\n * 手动调用展示 tooltip\n * @param datum 原始数据\n * @param options\n * @returns\n */\n showTooltip(datum: Datum, options: IShowTooltipOption): boolean {\n const tooltip = this._getTooltipComponent();\n return (isValid(datum) && tooltip?.showTooltip(datum, options) !== 'none') ?? false;\n }\n\n /**\n * 手动调用,关闭 tooltip\n * @returns\n */\n hideTooltip(): boolean {\n const tooltip = this._getTooltipComponent();\n return tooltip?.hideTooltip() ?? false;\n }\n\n // 图例相关 api\n /**\n * 根据图例组件 id 获取图例数据\n * @param id 组件 id\n * @returns\n */\n getLegendDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getLegendData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取图例数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendDataByIndex(index: number = 0) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n return legends[index].getLegendData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 获取当前图例的选中项\n * @param id 组件 id\n * @returns\n */\n getLegendSelectedDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getSelectedData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取当前图例的选中项\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendSelectedDataByIndex(index: number = 0) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n return legends[index].getSelectedData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 更新图例选中数据\n * @param id\n * @returns\n */\n setLegendSelectedDataById(id: string, selectedData: StringOrNumber[]) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n legendComponent.setSelectedData(selectedData);\n }\n }\n\n /**\n * 根据图例组件索引更新图例选中数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n setLegendSelectedDataByIndex(index: number = 0, selectedData: StringOrNumber[]) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n legends[index].setSelectedData(selectedData);\n }\n }\n\n // 保存图片相关的方法\n /**\n * **异步方法**返回一个包含图片展示的 data URI。\n * @returns data URI\n */\n async getDataURL() {\n const stage = this.getStage();\n if (this._chart && stage) {\n // 因为 vrender 是 autoRender 的,它不能确认第几帧才是完整的图表,所以这里调用一次 render 以保证获取到的是完整的画布\n stage.render();\n const canvas = this._chart.getCanvas();\n const url = await getCanvasDataURL(canvas, {\n onError: this._onError\n });\n return url;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n /**\n * **异步方法** 导出图表图片,只支持浏览器端。\n * @param name 保存的图片名称\n * @returns\n */\n async exportImg(name?: string) {\n if (!isTrueBrowser(this._option.mode)) {\n this._option?.onError(new TypeError(`non-browser environment can not export img`));\n return;\n }\n\n const dataURL = await this.getDataURL();\n if (dataURL) {\n URLToImage(name, dataURL);\n } else {\n this._option?.onError(new ReferenceError(`render is not defined`));\n }\n }\n /**\n * 导出绘制了图表内容的 canvas\n * @returns HTMLCanvasElement\n */\n exportCanvas(): HTMLCanvasElement | undefined {\n const stage = this.getStage();\n if (this._chart && stage) {\n return stage.toCanvas();\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n return undefined;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._option.mode !== 'node') {\n this._option?.onError(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.getStage();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // 布局相关的方法\n /**\n * 设置自定义布局\n */\n setLayout(layout: LayoutCallBack) {\n this._option.layout = layout;\n this._chart?.setLayout(layout);\n }\n /**\n * 强制重新布局\n */\n reLayout() {\n this._chart?.setLayoutTag(true);\n }\n\n /**\n * 获取编译器实例\n * @returns\n */\n getCompiler() {\n return this._compiler;\n }\n\n /**\n * Get the chart instance\n * 获取 Chart 图表实例。\n * @returns Chart 实例\n */\n getChart() {\n return this._chart;\n }\n\n /**\n * Get the renderer instance.\n * 获取渲染引擎实例。\n * @returns the instance of VRender Stage\n */\n getStage(): IStage {\n return this._compiler.getStage();\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._compiler?.getCanvas();\n }\n\n /**\n * 获取图表的 dom 容器\n * @returns\n */\n getContainer(): Maybe {\n // 用户传入 dom container\n if (isValid(this._container)) {\n return this._container;\n }\n\n // 用户传入 canvas\n let canvasNode: Maybe;\n if (isString(this._canvas)) {\n canvasNode = vglobal.getElementById(this._canvas) as HTMLCanvasElement;\n } else {\n canvasNode = this._canvas as HTMLCanvasElement;\n }\n if (isValid(canvasNode)) {\n return canvasNode.parentElement;\n }\n\n // 用户传入 stage\n return this.getCanvas()?.parentElement;\n }\n\n /**\n * 获取图表所有的组件实例\n * @returns 组件实例\n */\n getComponents() {\n return this._chart.getAllComponents();\n }\n\n /**\n * 获取全局scale\n * @param scaleName 指定scale的id\n * @returns scale实例\n */\n getScale(scaleId: string) {\n const globalScale = this._chart?.getGlobalScale();\n\n return globalScale?.getScale(scaleId);\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption = {}) {\n return this._chart?.setDimensionIndex(value, opt);\n }\n\n /** 停止正在进行的所有动画 */\n stopAnimation() {\n this._compiler?.getVGrammarView()?.animate?.stop();\n }\n\n /** 暂停正在进行的所有动画 */\n pauseAnimation() {\n this._compiler?.getVGrammarView()?.animate?.pause();\n }\n\n /** 恢复暂停时正在进行的所有动画 */\n resumeAnimation() {\n this._compiler?.getVGrammarView()?.animate?.resume();\n }\n\n // TODO: 后续需要考虑滚动场景\n /**\n * Convert the data corresponding to the graph into coordinates\n * 将图形对应的数据转换为坐标,该数据需要从传入图表的数据集中获取,如果数据不存在数据集中,可以使用 `convertValueToPosition` 方法\n * @param datum 要转化的数据 the datum(from data source)to convert\n * @param dataLinkInfo 数据的绑定信息,the data link info, could be seriesId or seriesIndex, default is { seriesIndex: 0 }\n * @param isRelativeToCanvas 是否相对画布坐标 Whether relative to canvas coordinates\n * @param checkInViewData 是否检查数据对应的图元是否在视图中,如果不在视图中,返回 null\n * @returns\n */\n convertDatumToPosition(\n datum: Datum,\n dataLinkInfo: DataLinkSeries = {},\n isRelativeToCanvas: boolean = false,\n checkInViewData?: boolean\n ): IPoint | null {\n if (!this._chart) {\n return null;\n }\n if (isEmpty(datum)) {\n return null;\n }\n const { seriesId, seriesIndex = 0 } = dataLinkInfo;\n\n let series: ISeries;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (series) {\n const keys = Object.keys(datum);\n const handledDatum = series\n .getViewData()\n // eslint-disable-next-line eqeqeq\n .latestData.find((viewDatum: Datum) => keys.every(k => viewDatum[k] == datum[k]));\n const seriesLayoutStartPoint = series.getRegion().getLayoutStartPoint();\n let point: IPoint;\n if (handledDatum) {\n point = series.dataToPosition(handledDatum, checkInViewData);\n } else {\n point = series.dataToPosition(datum, checkInViewData);\n }\n if (!point) {\n return null;\n }\n return convertPoint(point, seriesLayoutStartPoint, isRelativeToCanvas);\n }\n\n return null;\n }\n\n // TODO: 1. 后续需要考虑滚动场景 2. 极坐标场景支持\n convertValueToPosition(\n value: StringOrNumber,\n dataLinkInfo: DataLinkAxis,\n isRelativeToCanvas?: boolean\n ): number | null;\n convertValueToPosition(\n value: [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkSeries,\n isRelativeToCanvas?: boolean\n ): IPoint | null;\n convertValueToPosition(\n value: StringOrNumber | [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkAxis | DataLinkSeries,\n isRelativeToCanvas: boolean = false\n ): number | IPoint | null {\n if (!this._chart || isNil(value) || isEmpty(dataLinkInfo)) {\n return null;\n }\n\n if (!isArray(value)) {\n // 如果单个值,则默认使用 axis 绑定信息\n const { axisId, axisIndex } = dataLinkInfo as DataLinkAxis;\n let axis;\n if (isValid(axisId)) {\n axis = this._chart.getComponentsByKey('axes').find(s => s.userId === axisId);\n } else if (isValid(axisIndex)) {\n axis = this._chart.getComponentsByKey('axes')?.[axisIndex];\n }\n if (!axis) {\n warn('Please check whether the `axisId` or `axisIndex` is set!');\n return null;\n }\n\n const pointValue = (axis as IAxis)?.valueToPosition(value);\n if (isRelativeToCanvas) {\n const axisLayoutStartPoint = axis.getLayoutStartPoint();\n const axisOrient = (axis as IAxis).getOrient();\n return (\n pointValue +\n (axisOrient === 'bottom' || axisOrient === 'top' ? axisLayoutStartPoint.x : axisLayoutStartPoint.y)\n );\n }\n\n return pointValue;\n }\n const { seriesId, seriesIndex } = dataLinkInfo as DataLinkSeries;\n let series;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (!series) {\n warn('Please check whether the `seriesId` or `seriesIndex` is set!');\n return null;\n }\n\n return convertPoint(\n (series as ISeries).valueToPosition(value[0], value[1]),\n series.getRegion().getLayoutStartPoint(),\n isRelativeToCanvas\n );\n }\n\n /**\n * 获取实例函数\n * @param key 函数名称\n * @returns\n */\n getFunction(key: string): Function | null {\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 注册实例函数(对内包装一层,区分名字,避免重名问题)\n * @param key 函数名称\n * @param fun 函数内容\n * @returns\n */\n registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销实例函数\n * @param key 函数名称\n */\n unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取实例函数列表\n * @returns\n */\n getFunctionList() {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /** 设置运行时 spec */\n setRuntimeSpec(spec: any) {\n this._spec = spec;\n this._updateSpecInfo();\n }\n\n /**\n * 根据 indicator 组件 id 更新 indicator 数据\n * @since 1.11.7\n */\n updateIndicatorDataById(id: string, datum?: Datum) {\n const indicator = this._chart?.getComponentByUserId(id) as unknown as IIndicator;\n if (indicator) {\n indicator.updateDatum(datum);\n }\n }\n\n /**\n * 根据 indicator 组件索引更新 indicator 数据\n * @since 1.11.7\n */\n updateIndicatorDataByIndex(index: number = 0, datum?: Datum) {\n const indicators = this._chart?.getComponentsByType(ComponentTypeEnum.indicator) as unknown as IIndicator[];\n if (indicators && indicators[index]) {\n indicators[index].updateDatum(datum);\n }\n }\n\n /**\n * 地图缩放 API\n * @param [regionIndex=0] 根据索引顺序指定某个 region 区域的地图坐标系进行缩放\n * @param zoom 缩放比例\n * @param center 缩放中心\n * @since 1.11.10\n */\n geoZoomByIndex(regionIndex: number = 0, zoom: number, center?: { x: number; y: number }) {\n this._geoZoomByQuery({ regionIndex }, zoom, center);\n }\n\n /**\n * 地图缩放 API\n * @param [regionId=0] 根据 region id 指定某个 region 区域的地图坐标系进行缩放\n * @param zoom 缩放比例\n * @param center 缩放中心\n * @since 1.11.10\n */\n geoZoomById(regionId: string | number, zoom: number, center?: { x: number; y: number }) {\n this._geoZoomByQuery({ regionId }, zoom, center);\n }\n\n _geoZoomByQuery(query: MaybeArray, zoom: number, center?: { x: number; y: number }) {\n const region = this._chart?.getRegionsInQuerier(query)[0];\n const geoCoordinates = this._chart?.getComponentsByType(\n ComponentTypeEnum.geoCoordinate\n ) as unknown as IGeoCoordinate[];\n const coord = geoCoordinates?.find(coord => coord.getRegions()?.includes(region));\n if (coord) {\n coord.dispatchZoom(zoom, center);\n }\n }\n\n private _initChartPlugin() {\n const pluginList = Factory.getChartPlugins();\n if (pluginList.length > 0) {\n this._chartPlugin = new ChartPluginService(this);\n this._chartPlugin.load(pluginList.map(p => new p()));\n // 插件生命周期\n this._chartPluginApply('onInit', this._spec);\n }\n }\n\n private _chartPluginApply(funcName: keyof IChartPluginService, ...args: any[]) {\n if (!this._chartPlugin || !this._chartPlugin[funcName]) {\n return;\n }\n (this._chartPlugin[funcName] as (...args: any[]) => any).apply(this._chartPlugin, args);\n }\n\n protected _getMode() {\n return this._option.mode || RenderModeEnum['desktop-browser'];\n }\n\n protected _getChartOption(type: string): IChartOption {\n return {\n type,\n globalInstance: this,\n eventDispatcher: this._eventDispatcher!,\n dataSet: this._dataSet!,\n container: this._container,\n canvas: this._canvas,\n map: new Map(),\n mode: this._getMode(),\n modeParams: this._option.modeParams,\n getCompiler: () => this._compiler,\n performanceHook: this._option.performanceHook,\n viewBox: this._viewBox,\n animation: this._option.animation,\n getTheme: () => this._currentTheme ?? {},\n getSpecInfo: () => this._specInfo ?? {},\n\n layout: this._option.layout,\n onError: this._onError,\n disableTriggerEvent: this._option.disableTriggerEvent === true\n };\n }\n}\n\nexport const registerVChartCore = () => {\n // install region module\n Factory.registerRegion('region', Region);\n // install layout module\n Factory.registerLayout('base', Layout);\n // install essential marks\n registerGroupMark();\n // install essential vgrammar transform\n View.useRegisters([registerGesturePlugin]);\n // install default interaction\n registerHoverInteraction();\n registerSelectInteraction();\n // install default theme\n registerTheme(darkTheme.name, darkTheme);\n // set default logger level to Level.error\n Logger.getInstance(LoggerLevel.Error);\n};\n\nregisterVChartCore();\n","import { PREFIX } from './base';\n\nexport const DEFAULT_MEASURE_CANVAS_ID = `${PREFIX}_MEASURE_CANVAS_ID`;\n\nexport const DEFAULT_DATA_INDEX = `${PREFIX}_DEFAULT_DATA_INDEX`;\n\nexport const DEFAULT_DATA_KEY = `${PREFIX}_DEFAULT_DATA_KEY`;\n\nexport const DEFAULT_DATA_SERIES_FIELD = `${PREFIX}_DEFAULT_DATA_SERIES_FIELD`;\n\nexport const DEFAULT_SERIES_STYLE_NAME = `${PREFIX}_DEFAULT_SERIES_STYLE_NAME`;\n\nexport const STACK_FIELD_KEY = `${PREFIX}_STACK_KEY`;\nexport const STACK_FIELD_START = `${PREFIX}_STACK_START`;\nexport const STACK_FIELD_END = `${PREFIX}_STACK_END`;\nexport const STACK_FIELD_START_PERCENT = `${PREFIX}_STACK_START_PERCENT`;\nexport const STACK_FIELD_END_PERCENT = `${PREFIX}_STACK_END_PERCENT`;\nexport const STACK_FIELD_START_OffsetSilhouette = `${PREFIX}_STACK_START_OffsetSilhouette`;\nexport const STACK_FIELD_END_OffsetSilhouette = `${PREFIX}_STACK_END_OffsetSilhouette`;\nexport const STACK_FIELD_TOTAL = `${PREFIX}_STACK_TOTAL`;\nexport const STACK_FIELD_TOTAL_PERCENT = `${PREFIX}_STACK_TOTAL_PERCENT`;\nexport const STACK_FIELD_TOTAL_TOP = `${PREFIX}_STACK_TOTAL_TOP`;\nexport const STACK_FIELD_TOTAL_BOTTOM = `${PREFIX}_STACK_TOTAL_BOTTOM`;\n\nexport const MOSAIC_VALUE_START_PERCENT = `${PREFIX}_MOSAIC_VALUE_START_PERCENT`;\nexport const MOSAIC_VALUE_END_PERCENT = `${PREFIX}_MOSAIC_VALUE_END_PERCENT`;\nexport const MOSAIC_CAT_START_PERCENT = `${PREFIX}_MOSAIC_CAT_START_PERCENT`;\nexport const MOSAIC_CAT_END_PERCENT = `${PREFIX}_MOSAIC_CAT_END_PERCENT`;\n\nexport const SEGMENT_FIELD_START = `${PREFIX}_SEGMENT_START`;\nexport const SEGMENT_FIELD_END = `${PREFIX}_SEGMENT_END`;\n","export type AddVChartPropertyContext = {\n keyMap: Map;\n needDefaultSeriesField: boolean;\n defaultSeriesField?: string;\n getKey?: (d: any, i: number, context: AddVChartPropertyContext) => string;\n categoryField?: string;\n};\nexport interface IAddVChartPropertyOpt {\n beforeCall: () => AddVChartPropertyContext;\n call: (d: any, i: number, context: AddVChartPropertyContext) => void;\n}\n\nexport const addVChartProperty = (data: Array, op: IAddVChartPropertyOpt) => {\n const context = op.beforeCall();\n data && data.forEach((d, i) => op.call(d, i, context));\n\n if (context.keyMap) {\n context.keyMap.clear();\n context.keyMap = null;\n }\n\n return data;\n};\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-time-format\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-time-format/blob/d6feb945baa4b7a45898a9ca926ebca044e20657/src/locale.js\n * License: https://github.com/d3/d3-time-format/blob/main/LICENSE\n * @license\n */\n\ninterface dateInfo {\n y?: number;\n m?: number;\n d?: number;\n w?: number;\n p?: number;\n H?: number;\n M?: number;\n S?: number;\n L?: number;\n}\n\nexport class TimeUtil {\n private locale_shortWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n private locale_periods = ['AM', 'PM'];\n private locale_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n private locale_shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n private numberRe = /^\\s*\\d+/; // note: ignores next directive\n private pads = { '-': '', _: ' ', '0': '0' };\n\n // const percentRe = /^%/;\n private requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n private periodRe: RegExp;\n private periodLookup: Map;\n private weekdayRe: RegExp;\n private weekdayLookup: Map;\n private shortWeekdayRe: RegExp;\n private shortWeekdayLookup: Map;\n private monthRe: RegExp;\n private monthLookup: Map;\n private shortMonthRe: RegExp;\n private shortMonthLookup: Map;\n\n private static instance: TimeUtil;\n static getInstance(): TimeUtil {\n if (!TimeUtil.instance) {\n TimeUtil.instance = new TimeUtil();\n }\n\n return TimeUtil.instance;\n }\n\n private requoteF;\n private constructor() {\n this.requoteF = this.requote.bind(this);\n this.periodRe = this.formatRe(this.locale_periods);\n this.periodLookup = this.formatLookup(this.locale_periods);\n this.weekdayRe = this.formatRe(this.locale_weekdays);\n this.weekdayLookup = this.formatLookup(this.locale_weekdays);\n this.shortWeekdayRe = this.formatRe(this.locale_shortWeekdays);\n this.shortWeekdayLookup = this.formatLookup(this.locale_shortWeekdays);\n this.monthRe = this.formatRe(this.locale_months);\n this.monthLookup = this.formatLookup(this.locale_months);\n this.shortMonthRe = this.formatRe(this.locale_shortMonths);\n this.shortMonthLookup = this.formatLookup(this.locale_shortMonths);\n }\n\n private requote(s: string) {\n return s.replace(this.requoteRe, '\\\\$&');\n }\n\n private localDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n private utcDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n private newDate(y: number, m: number, d: number) {\n return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };\n }\n private formatRe(names: string[]) {\n return new RegExp('^(?:' + names.map(this.requoteF).join('|') + ')', 'i');\n }\n private formatLookup(names: string[]) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n }\n\n private locale_months = [\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 ];\n\n private formatShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getDay()];\n };\n\n private formatWeekday = (d: Date) => {\n return this.locale_weekdays[d.getDay()];\n };\n\n private formatShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getMonth()];\n };\n\n private formatMonth = (d: Date) => {\n return this.locale_months[d.getMonth()];\n };\n\n private pad(value: number, fill: string, width: number) {\n const sign = value < 0 ? '-' : '';\n const string = (sign ? -value : value) + '';\n const length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n private formatDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getDate(), p, 2);\n };\n\n private formatHour24 = (d: Date, p: string) => {\n return this.pad(d.getHours(), p, 2);\n };\n\n private formatHour12 = (d: Date, p: string) => {\n return this.pad(d.getHours() % 12 || 12, p, 2);\n };\n\n private formatMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getMilliseconds(), p, 3);\n };\n\n private formatMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getMonth() + 1, p, 2);\n };\n\n private formatMinutes = (d: Date, p: string) => {\n return this.pad(d.getMinutes(), p, 2);\n };\n\n private formatPeriod = (d: Date) => {\n return this.locale_periods[+(d.getHours() >= 12)];\n };\n\n private formatSeconds = (d: Date, p: string) => {\n return this.pad(d.getSeconds(), p, 2);\n };\n\n private formatFullYear = (d: Date, p: string) => {\n return this.pad(d.getFullYear() % 10000, p, 4);\n };\n\n private formatUTCShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getUTCDay()];\n };\n\n private formatUTCWeekday = (d: Date) => {\n return this.locale_weekdays[d.getUTCDay()];\n };\n\n private formatUTCShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getUTCMonth()];\n };\n\n private formatUTCMonth = (d: Date) => {\n return this.locale_months[d.getUTCMonth()];\n };\n\n private formatUTCDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getUTCDate(), p, 2);\n };\n\n private formatUTCHour24 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours(), p, 2);\n };\n\n private formatUTCHour12 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours() % 12 || 12, p, 2);\n };\n\n private formatUTCMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getUTCMilliseconds(), p, 3);\n };\n\n private formatUTCMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getUTCMonth() + 1, p, 2);\n };\n\n private formatUTCMinutes = (d: Date, p: string) => {\n return this.pad(d.getUTCMinutes(), p, 2);\n };\n\n private formatUTCPeriod = (d: Date) => {\n return this.locale_periods[+(d.getUTCHours() >= 12)];\n };\n\n private formatUTCSeconds = (d: Date, p: string) => {\n return this.pad(d.getUTCSeconds(), p, 2);\n };\n\n private formatUTCFullYear = (d: Date, p: string) => {\n return this.pad(d.getUTCFullYear() % 10000, p, 4);\n };\n\n private formats = {\n a: this.formatShortWeekday,\n A: this.formatWeekday,\n b: this.formatShortMonth,\n B: this.formatMonth,\n d: this.formatDayOfMonth,\n e: this.formatDayOfMonth,\n H: this.formatHour24,\n I: this.formatHour12,\n L: this.formatMilliseconds,\n m: this.formatMonthNumber,\n M: this.formatMinutes,\n p: this.formatPeriod,\n S: this.formatSeconds,\n Y: this.formatFullYear\n };\n\n private utcFormats = {\n a: this.formatUTCShortWeekday,\n A: this.formatUTCWeekday,\n b: this.formatUTCShortMonth,\n B: this.formatUTCMonth,\n d: this.formatUTCDayOfMonth,\n e: this.formatUTCDayOfMonth,\n H: this.formatUTCHour24,\n I: this.formatUTCHour12,\n L: this.formatUTCMilliseconds,\n m: this.formatUTCMonthNumber,\n M: this.formatUTCMinutes,\n p: this.formatUTCPeriod,\n S: this.formatUTCSeconds,\n Y: this.formatUTCFullYear\n };\n\n private parseShortWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.shortWeekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.shortWeekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.weekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.weekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseShortMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.shortMonthRe.exec(string.slice(i));\n return n ? ((d.m = this.shortMonthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.monthRe.exec(string.slice(i));\n return n ? ((d.m = this.monthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseDayOfMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.d = +n[0]), i + n[0].length) : -1;\n };\n\n private parseHour24 = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.H = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMilliseconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 3));\n return n ? ((d.L = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMonthNumber = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.m = (n as any[0]) - 1), i + n[0].length) : -1;\n };\n\n private parseMinutes = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.M = +n[0]), i + n[0].length) : -1;\n };\n\n private parsePeriod = (d: dateInfo, string: string, i: number) => {\n const n = this.periodRe.exec(string.slice(i));\n return n ? ((d.p = this.periodLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseSeconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.S = +n[0]), i + n[0].length) : -1;\n };\n\n private parseFullYear = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 4));\n return n ? ((d.y = +n[0]), i + n[0].length) : -1;\n };\n\n private parses = {\n a: this.parseShortWeekday,\n A: this.parseWeekday,\n b: this.parseShortMonth,\n B: this.parseMonth,\n d: this.parseDayOfMonth,\n e: this.parseDayOfMonth,\n H: this.parseHour24,\n I: this.parseHour24,\n L: this.parseMilliseconds,\n m: this.parseMonthNumber,\n M: this.parseMinutes,\n p: this.parsePeriod,\n S: this.parseSeconds,\n Y: this.parseFullYear\n };\n\n private parseSpecifier(d: dateInfo, specifier: string, string: string, j: number) {\n let i = 0;\n const n = specifier.length;\n const m = string.length;\n let c;\n let parse;\n\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = this.parses[c in this.pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) {\n return -1;\n }\n } else if (c !== string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n private newParse(specifier: string, Z: boolean) {\n const that = this;\n return function (string: string) {\n const d = that.newDate(1900, undefined, 1) as any;\n const i = that.parseSpecifier(d, specifier, (string += ''), 0);\n if (i !== string.length) {\n return null;\n }\n\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n if ('s' in d) {\n return new Date(d.s * 1000 + ('L' in d ? d.L : 0));\n }\n\n // If this is utcParse, never use the local timezone.\n if (Z && !('Z' in d)) {\n d.Z = 0;\n }\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = (d.H % 12) + d.p * 12;\n }\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) {\n d.m = 'q' in d ? d.q : 0;\n }\n if ('Z' in d) {\n d.H += (d.Z / 100) | 0;\n d.M += d.Z % 100;\n return that.utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return that.localDate(d);\n };\n }\n private newFormat(specifier: string, formats: any) {\n const that = this;\n return function (date: Date) {\n const string = [];\n let i = -1;\n let j = 0;\n const n = specifier.length;\n let c;\n let pad;\n let format;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = that.pads[(c = specifier.charAt(++i))])) {\n c = specifier.charAt(++i);\n } else {\n pad = c === 'e' ? ' ' : '0';\n }\n format = formats[c];\n c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n\n private getFullTimeStamp(timeText: string | number) {\n const timeOriStamp = parseInt(timeText + '', 10);\n return String(timeOriStamp).length === 10 ? timeOriStamp * 1000 : timeOriStamp;\n }\n\n timeFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.formats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeUTCFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.utcFormats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeParse = (specifier: string, timeText: string | number) => {\n return this.newParse(specifier, false)(timeText + '');\n };\n}\n","import type { Maybe } from '@visactor/vutils';\nimport { get, isArray, isNil } from '@visactor/vutils';\nimport type { ITheme } from '../theme';\nimport type { Datum } from '../typings';\nimport { Factory } from '../core/factory';\nimport type { IModelSpecInfo } from '../model/interface';\n\nexport function getComponentThemeFromOption(type: string, chartTheme: ITheme) {\n return get(chartTheme, `component.${type}`);\n}\n\nexport function getFormatFunction(\n formatMethod?: any,\n formatter?: string | string[],\n text?: string | number,\n datum?: Datum\n) {\n if (formatMethod) {\n return { formatFunc: formatMethod, args: [text, datum] };\n }\n const formatterImpl = Factory.getFormatter();\n if (formatter && formatterImpl) {\n return { formatFunc: formatterImpl, args: [text, datum, formatter] };\n }\n return {};\n}\n\nexport const getSpecInfo = >(\n chartSpec: any,\n specKey: string,\n compType: string,\n filter?: (spec: T) => boolean\n): Maybe[]> => {\n if (isNil(chartSpec[specKey])) {\n return undefined;\n }\n const isArraySpec = isArray(chartSpec[specKey]);\n const spec = isArraySpec ? chartSpec[specKey] : [chartSpec[specKey]];\n\n const specInfos: IModelSpecInfo[] = [];\n (spec as T[]).forEach((s, i: number) => {\n if (s && (!filter || filter(s))) {\n specInfos.push({\n spec: s,\n specPath: isArraySpec ? [specKey, i] : [specKey],\n specInfoPath: ['component', specKey, i],\n type: compType\n });\n }\n });\n return specInfos;\n};\n","import { get, isFunction, isNil, isPlainObject, isValid } from '@visactor/vutils';\nimport type {\n Datum,\n TooltipContentCallback,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternProperty\n} from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport { getFormatFunction } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../../event';\n\nexport const getTooltipContentValue = (\n field?: TooltipContentProperty,\n datum?: any,\n params?: TooltipHandlerParams,\n formatter?: string\n): T | undefined => {\n let value: T;\n if (isFunction(field)) {\n value = (field as TooltipContentCallback)(datum, params);\n } else if (isPlainObject(field) && isValid(field.field)) {\n value = get(datum, field.field) as T;\n } else {\n value = field as T;\n }\n\n if (formatter) {\n const { formatFunc, args } = getFormatFunction(undefined, formatter, field as string, datum);\n if (formatFunc && args) {\n value = formatFunc(...args);\n }\n }\n\n return value;\n};\n\nexport const getTooltipPatternValue = (\n field?: TooltipPatternProperty,\n data?: TooltipData,\n params?: TooltipHandlerParams\n): T | undefined => {\n if (isNil(field)) {\n return field as undefined;\n }\n if (isFunction(field)) {\n return (field as TooltipContentCallback)(data, params);\n }\n return field as T;\n};\n\nexport function getFirstDatumFromTooltipData(data: TooltipData): Datum {\n // 找到第一个可用的datum\n const dimInfoList: IDimensionInfo[] = (data as IDimensionData[])[0]?.series\n ? [{ data: data as IDimensionData[], value: '' }]\n : (data as IDimensionInfo[]);\n for (const { data: dataList } of dimInfoList) {\n for (const { datum: datumList } of dataList) {\n for (const datumItem of datumList ?? []) {\n if (datumItem) {\n return datumItem;\n }\n }\n }\n }\n return undefined;\n}\n","import { isArray, isFunction, isNil, isValid, TimeUtil, isEmpty } from '@visactor/vutils';\nimport type {\n Datum,\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n MaybeArray,\n TooltipActiveType,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternCallback,\n TooltipPatternProperty\n} from '../../../typings';\nimport type { ISeriesTooltipSpec, ITooltipActiveTypeAsKeys, ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { BaseEventParams } from '../../../event/interface';\nimport { getTooltipContentValue } from './get-value';\n\nexport const getTooltipActualActiveType = (spec?: ITooltipSpec): TooltipActiveType[] => {\n if (spec?.visible === false) {\n return [];\n }\n\n const activeTypeMap: ITooltipActiveTypeAsKeys = {\n mark: spec?.mark?.visible !== false,\n dimension: spec?.dimension?.visible !== false,\n group: spec?.group?.visible !== false\n };\n\n if (isValid(spec?.activeType)) {\n Object.keys(activeTypeMap).forEach(t => {\n activeTypeMap[t as TooltipActiveType] = spec?.activeType?.includes(t as TooltipActiveType);\n });\n }\n\n return Object.keys(activeTypeMap).filter(t => activeTypeMap[t as TooltipActiveType]) as TooltipActiveType[];\n};\n\nexport const isActiveTypeVisible = (type: TooltipActiveType, spec?: ISeriesTooltipSpec) => {\n if (!spec) {\n return true;\n }\n\n if (spec.visible === false) {\n return false;\n }\n\n if (spec[type] && spec[type].visible === false) {\n return false;\n }\n\n if (spec.activeType && (isArray(spec.activeType) ? !spec.activeType.includes(type) : spec.activeType !== type)) {\n return false;\n }\n\n return true;\n};\n\nexport function isEmptyPos(params: BaseEventParams): boolean {\n return isNil(params.mark) && isNil(params.model) && isNil(params.datum);\n}\n\nfunction addContentLine(\n result: ITooltipLineActual[],\n contentSpec: MaybeArray,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n datum: Datum,\n params?: TooltipHandlerParams\n) {\n const addByDatum = (spec: ITooltipLinePattern) => {\n if (spec) {\n const res: ITooltipLineActual = { datum };\n const finalSpec: ITooltipLinePattern =\n isNil(spec.key) && isNil(spec.value) && !isEmpty(spec)\n ? {\n ...shapeAttrs,\n ...defaultContent,\n ...spec\n }\n : { ...shapeAttrs, ...spec };\n const {\n key,\n keyFormatter,\n keyTimeFormat,\n keyTimeFormatMode,\n value,\n valueFormatter,\n valueTimeFormat,\n valueTimeFormatMode,\n ...others\n } = finalSpec;\n\n res.key = getTimeString(\n getTooltipContentValue(key, datum, params, keyFormatter),\n keyTimeFormat,\n keyTimeFormatMode\n );\n res.value = getTimeString(\n getTooltipContentValue(value, datum, params, valueFormatter),\n valueTimeFormat,\n valueTimeFormatMode\n );\n Object.keys(others).forEach(k => {\n (res as any)[k] = getTooltipContentValue((finalSpec as any)[k], datum, params);\n });\n if (res.visible !== false && (isValid(res.key) || isValid(res.value))) {\n result.push(res);\n }\n }\n };\n\n if (isArray(contentSpec)) {\n (contentSpec as ITooltipLinePattern[]).forEach(spec => {\n addByDatum(spec);\n });\n } else {\n addByDatum(contentSpec as ITooltipLinePattern);\n }\n}\n\nfunction parseContentFunction(\n result: ITooltipLineActual[],\n contentSpec: TooltipPatternProperty>,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum,\n params?: TooltipHandlerParams\n) {\n if (isFunction(contentSpec)) {\n const specs = (contentSpec as TooltipPatternCallback>)(data, params);\n\n addContentLine(result, specs, defaultContent, shapeAttrs, datum, params);\n } else if (contentSpec) {\n addContentLine(result, contentSpec as MaybeArray, defaultContent, shapeAttrs, datum, params);\n }\n}\n\nexport function parseContent(\n contentSpec: MaybeArray>>,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n): ITooltipLineActual[] {\n if (datum && datum.length) {\n const contents: ITooltipLineActual[] = [];\n\n datum.forEach(d => {\n if (isArray(contentSpec)) {\n (contentSpec as TooltipPatternProperty>[]).forEach(spec => {\n parseContentFunction(contents, spec, defaultContent, shapeAttrs, data, d, params);\n });\n } else if (isFunction(contentSpec)) {\n parseContentFunction(\n contents,\n contentSpec as TooltipPatternCallback>,\n defaultContent,\n shapeAttrs,\n data,\n d,\n params\n );\n } else if (contentSpec) {\n addContentLine(contents, contentSpec as MaybeArray, defaultContent, shapeAttrs, d, params);\n }\n });\n\n return contents;\n }\n\n return null;\n}\n\nexport function combineContents(patternList: ITooltipActual[]) {\n if (!patternList || !patternList.length) {\n return null;\n }\n\n // 拼接默认 tooltip content\n const defaultPatternContent: ITooltipLineActual[] = [];\n patternList.forEach(({ content }) => {\n if (content) {\n (content as ITooltipLineActual[]).forEach(c => {\n defaultPatternContent.push(c);\n });\n }\n });\n\n if (defaultPatternContent.length) {\n return {\n ...patternList[0],\n content: defaultPatternContent\n };\n }\n\n return patternList[0];\n}\n\nexport const getTimeString = (value: any, timeFormat?: string, timeFormatMode?: 'local' | 'utc') => {\n if (!timeFormat && !timeFormatMode) {\n if (typeof value !== 'object') {\n return value?.toString();\n }\n return value;\n }\n\n const timeUtil = TimeUtil.getInstance();\n timeFormat = timeFormat || '%Y%m%d';\n timeFormatMode = timeFormatMode || 'local';\n const timeFormatter = timeFormatMode === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n return timeFormatter(timeFormat, value);\n};\n","import type { ISeriesTooltipSpec, ITooltipSpec, TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type {\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n ITooltipPattern,\n MaybeArray,\n ShapeType,\n TooltipActiveType,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternCallback,\n TooltipPatternProperty\n} from '../../typings';\nimport { array, isFunction, isValid } from '@visactor/vutils';\nimport type { ISeries, ISeriesTooltipHelper } from '../interface';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { IMark } from '../../mark/interface/common';\nimport { getTimeString, isActiveTypeVisible, parseContent } from '../../component/tooltip/utils/common';\nimport { getFirstDatumFromTooltipData, getTooltipContentValue } from '../../component/tooltip/utils/get-value';\nimport { isNil } from '../../util';\n\ninterface ISeriesCacheInfo {\n seriesFields: string[];\n dimensionFields: string[];\n measureFields: string[];\n type: string;\n}\n\nexport class BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n series: ISeries;\n\n spec: ISeriesTooltipSpec | undefined;\n activeType: TooltipActiveType[];\n\n activeTriggerSet = {\n mark: new Set(),\n group: new Set()\n };\n ignoreTriggerSet = {\n mark: new Set()\n };\n protected _seriesCacheInfo: ISeriesCacheInfo;\n\n constructor(series: ISeries) {\n this.series = series;\n this.updateTooltipSpec();\n }\n\n updateTooltipSpec() {\n const seriesTooltipSpec = this.series.getSpec()?.tooltip;\n\n this.spec = seriesTooltipSpec;\n this._seriesCacheInfo = this._getSeriesCacheInfo();\n }\n\n protected _getSeriesCacheInfo = (): ISeriesCacheInfo => {\n const { series } = this;\n const _seriesField = series.getSeriesField();\n const seriesFields = isValid(_seriesField) ? array(_seriesField) : series.getSeriesKeys() ?? [];\n return {\n seriesFields,\n dimensionFields: series.getDimensionField() ?? [],\n measureFields: series.getMeasureField() ?? [],\n type: series.type\n };\n };\n\n protected _getDimensionData = (datum: any) => {\n const { dimensionFields } = this._seriesCacheInfo;\n return dimensionFields[0] && datum?.[dimensionFields[0]];\n };\n\n protected _getMeasureData = (datum: any) => {\n const { measureFields } = this._seriesCacheInfo;\n return measureFields[0] && datum?.[measureFields[0]];\n };\n\n protected _getSeriesFieldData = (datum: any) => {\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n\n if (isValid(seriesFields[0]) && datum?.[seriesFields[0]]) {\n return datum?.[seriesFields[0]];\n }\n\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n if (dimensionFields.length > 1 && (seriesFields.length === 0 || this.series.getSeriesKeys().length <= 1)) {\n return datum?.[subDimensionField];\n }\n\n return datum?.[subDimensionField];\n };\n\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n const value = this.series.getSeriesStyle(datum)?.(key);\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n\n markTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesFieldData(datum);\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getMeasureData(datum);\n };\n\n shapeTypeCallback = (datum: Datum, params?: TooltipHandlerParams): ShapeType | undefined => {\n return (\n this._getSeriesStyle(datum, 'shape', null) ??\n this._getSeriesStyle(datum, 'symbolType', this.series.getDefaultShapeType())\n );\n };\n\n shapeColorCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesStyle(datum, ['fill', 'stroke']);\n };\n\n shapeStrokeCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesStyle(datum, ['stroke', 'fill']);\n };\n\n dimensionTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getDimensionData(datum);\n };\n\n groupTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesFieldData(datum);\n };\n\n groupTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n const { seriesFields } = this._seriesCacheInfo;\n let dimensionFields = this._seriesCacheInfo.dimensionFields;\n if (seriesFields[0]) {\n dimensionFields = dimensionFields.filter(field => field !== seriesFields[0]);\n }\n return dimensionFields.map(field => datum?.[field]).join('-');\n };\n\n getHasShape = (isContent: boolean) => {\n return !!isContent;\n };\n\n protected getShapeAttrs(activeType: TooltipActiveType, isContent: boolean, chartTooltipSpec?: ITooltipSpec) {\n const key = isContent ? 'content' : 'title';\n const shapeAttrs: ITooltipPattern = {\n ...chartTooltipSpec?.style?.shape,\n ...chartTooltipSpec?.[activeType],\n ...(chartTooltipSpec as any)?.[activeType]?.[key],\n ...this.spec?.[activeType],\n ...(this.spec as any)?.[activeType]?.[key]\n };\n\n const res = {\n shapeType: shapeAttrs.shapeType ?? this.shapeTypeCallback,\n shapeFill: shapeAttrs.shapeFill ?? shapeAttrs.shapeColor ?? this.shapeColorCallback,\n shapeStroke: shapeAttrs.shapeStroke ?? this.shapeStrokeCallback,\n shapeHollow: shapeAttrs.shapeHollow ?? false,\n shapeLineWidth: shapeAttrs.shapeLineWidth,\n shapeSize: shapeAttrs.shapeSize ?? (shapeAttrs as any).size,\n hasShape: shapeAttrs.hasShape ?? this.getHasShape(isContent)\n };\n\n return res;\n }\n\n protected enableByType(activeType: TooltipActiveType) {\n return true;\n }\n\n protected getDefaultContentList(\n activeType: TooltipActiveType\n ): MaybeArray>> {\n return [this.getDefaultContentPattern(activeType)];\n }\n\n protected getContentList(\n activeType: TooltipActiveType,\n spec: ITooltipPattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipLineActual[] {\n return parseContent(\n spec?.content ?? this.getDefaultContentList(activeType),\n this.getDefaultContentPattern(activeType),\n shapeAttrs,\n data,\n datum,\n params\n );\n }\n\n protected getTitleResult(\n activeType: TooltipActiveType,\n titleSpec: TooltipPatternProperty,\n shapeAttrs: Record>,\n data?: TooltipData,\n params?: TooltipHandlerParams\n ) {\n let titlePattern = isFunction(titleSpec)\n ? ((titleSpec as TooltipPatternCallback)(data, params) as ITooltipLinePattern)\n : (titleSpec as ITooltipLinePattern);\n\n if (!titlePattern) {\n titlePattern = this.getDefaultTitlePattern(activeType);\n } else if (isNil(titlePattern.value)) {\n titlePattern = {\n ...this.getDefaultTitlePattern(activeType),\n ...titlePattern\n };\n }\n\n if (titlePattern && titlePattern.visible !== false) {\n const datum = getFirstDatumFromTooltipData(data);\n const res = {\n visible: getTooltipContentValue(titlePattern.visible, datum, params),\n value: getTimeString(\n getTooltipContentValue(titlePattern.value, datum, params, titlePattern.valueFormatter),\n titlePattern.valueTimeFormat,\n titlePattern.valueTimeFormatMode\n ),\n valueStyle: getTooltipContentValue(titlePattern.valueStyle, datum, params),\n hasShape: titlePattern.hasShape\n } as ITooltipActual['title'];\n Object.keys(shapeAttrs).forEach(key => {\n (res as any)[key] = getTooltipContentValue(shapeAttrs[key], datum, params);\n });\n\n return res;\n }\n\n return {\n hasShape: false,\n visible: false\n } as ITooltipActual['title'];\n }\n\n getTooltipData(\n activeType: TooltipActiveType,\n chartTooltipSpec?: ITooltipSpec,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipActual | null {\n if (\n !this.enableByType(activeType) ||\n !isActiveTypeVisible(activeType, this.spec) ||\n (activeType === 'dimension' && (!datum || !datum.length))\n ) {\n return null;\n }\n const patternSpec = this.spec?.[activeType] ?? chartTooltipSpec?.[activeType];\n const contentShapeAttrs = this.getShapeAttrs(activeType, true, chartTooltipSpec);\n const titleShapeAttrs = this.getShapeAttrs(activeType, false, chartTooltipSpec);\n let content: ITooltipLineActual[];\n\n if (activeType === 'dimension') {\n content = [];\n const userContents = this.getContentList(activeType, patternSpec, contentShapeAttrs, data, datum, params);\n\n userContents.forEach(entry => {\n content.push(entry);\n });\n } else {\n content = this.getContentList(activeType, patternSpec, contentShapeAttrs, data, datum, params);\n }\n\n return {\n visible: true,\n activeType,\n data,\n title: this.getTitleResult(activeType, patternSpec?.title, titleShapeAttrs, data, params),\n content\n };\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: undefined,\n value: activeType === 'group' ? this.groupTooltipTitleCallback : this.dimensionTooltipTitleCallback\n };\n }\n\n protected getDefaultContentPattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n seriesId: this.series.id,\n key: activeType === 'group' ? this.groupTooltipKeyCallback : this.markTooltipKeyCallback,\n value: this.markTooltipValueCallback\n };\n }\n}\n","import { isNil, isFunction, minInArray, maxInArray } from '@visactor/vutils';\nimport type { IFieldsMeta } from '../../typings/spec';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeFields } from '../../util/data';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport type { IStatisticsOption, StatisticOperations } from './interface';\n\nconst methods = {\n min: (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n max: (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-min': (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-max': (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n values: (arr: any[]) => {\n const map = {};\n const res: any[] = [];\n\n for (const entry of arr) {\n if (!map[entry]) {\n res.push(entry);\n map[entry] = 1;\n }\n }\n\n return res;\n }\n};\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatistics = (data: Array, op: IStatisticsOption) => {\n // const operations = op.operations;\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return {};\n }\n\n // merge same key\n fields = mergeFields([], fields);\n\n const dataKey = op.target === 'parser' ? 'parserData' : 'latestData';\n const latestData = data[0][dataKey] ? data[0][dataKey] : data || [];\n const dataFields = data[0].getFields?.() as Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n return dimensionStatisticsOfSimpleData(latestData, fields, dataFields);\n};\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatisticsOfSimpleData = (\n latestData: Datum[],\n fields: {\n key: string;\n operations: StatisticOperations;\n filter?: (fv: any) => boolean;\n customize?: { max: number; min: number } | any[];\n }[],\n dataFields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >\n) => {\n const result = {};\n\n let fValues: any[] = [];\n let nextFValues: any[] = [];\n fields.forEach(f => {\n const key = f.key;\n // NOTE: the same key in fields has been merge already\n result[key] = {};\n const dataFieldInKey = dataFields?.[key];\n const operations: StatisticOperations = f.operations;\n const isNumberField = operations.some(op => op === 'min' || op === 'max' || op === 'allValid');\n let allValid = true;\n fValues.length = 0;\n\n latestData &&\n latestData.forEach((d: Datum) => {\n if (d) {\n fValues.push(d[key]);\n }\n });\n const len = fValues.length;\n\n if (isNumberField) {\n nextFValues.length = 0;\n fValues.forEach((item, i) => {\n if (couldBeValidNumber(item)) {\n nextFValues.push(item);\n }\n });\n const t = fValues;\n fValues = nextFValues;\n nextFValues = t;\n // fValues = fValues.filter(couldBeValidNumber);\n allValid = fValues.length === len;\n } else if (operations.some(op => op === 'array-min' || op === 'array-max')) {\n fValues = fValues.reduce((res, entry) => {\n if (entry) {\n entry.forEach((d: any) => {\n if (couldBeValidNumber(d)) {\n res.push(d);\n }\n });\n }\n\n return res;\n }, []);\n } else {\n fValues = fValues.filter((entry: any) => entry !== undefined);\n }\n\n if (f.filter) {\n fValues = fValues.filter(f.filter);\n }\n\n operations.forEach(op => {\n // @chensij 如果指定了计算的domain结果,则忽略计算(目前该逻辑仅在dot series中维护,因为dot series期望在filter data之后x轴改变domain,y轴不改变domain)\n if (f.customize) {\n result[key][op] = f.customize;\n } else {\n if (dataFieldInKey && dataFieldInKey.lockStatisticsByDomain && !isNil(dataFieldInKey.domain)) {\n if (op === 'values') {\n result[key][op] = dataFieldInKey.domain.slice();\n return;\n }\n } else if (op === 'allValid') {\n return;\n }\n\n result[key][op] = methods[op](fValues);\n\n if (op === 'array-max') {\n result[key].max = result[key][op];\n }\n if (op === 'array-min') {\n result[key].min = result[key][op];\n }\n }\n });\n\n if (isNumberField) {\n result[key].allValid = allValid;\n }\n });\n\n return result;\n};\n","import type { Datum, IInvalidType, StringOrNumber } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\n\nexport interface ITravelOpt {\n config: () => {\n invalidType: IInvalidType;\n checkField: StringOrNumber[];\n };\n}\n\nexport const invalidTravel = (data: Array, op: ITravelOpt) => {\n const { config } = op;\n if (!config) {\n return data;\n }\n const { invalidType, checkField } = config();\n if (invalidType !== 'zero') {\n return data;\n }\n\n if (checkField && checkField.length) {\n data.forEach((datum: Datum) => {\n checkField.forEach(field => {\n if (!couldBeValidNumber(datum[field])) {\n datum[field] = 0;\n }\n });\n });\n }\n return data;\n};\n","import { isNil, isValid } from '@visactor/vutils';\nimport { CompilableData } from '../../compile/data/compilable-data';\n\nexport class SeriesData extends CompilableData {\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n this._initProduct([]); // 性能优化:初次编译不需要数据\n }\n\n generateProductId(): string {\n return this._data?.name as string;\n }\n}\n","import { PREFIX } from './base';\n\nexport const DEFAULT_HIERARCHY_DEPTH = `${PREFIX}_HIERARCHY_DEPTH`;\nexport const DEFAULT_HIERARCHY_ROOT = `${PREFIX}_HIERARCHY_ROOT`;\nexport const DEFAULT_HIERARCHY_ROOT_INDEX = `${PREFIX}_HIERARCHY_ROOT_INDEX`;\n","import { DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type { TreemapSeries } from '../../series/treemap/treemap';\nimport type { AddVChartPropertyContext } from './add-property';\nimport {\n DEFAULT_HIERARCHY_DEPTH,\n DEFAULT_HIERARCHY_ROOT,\n DEFAULT_HIERARCHY_ROOT_INDEX\n} from '../../constant/hierarchy';\nimport type { SunburstSeries } from '../../series/sunburst/sunburst';\nimport type { CirclePackingSeries } from '../../series/circle-packing/circle-packing';\n\nexport function initKeyMap(this: BaseSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: !this._seriesField,\n defaultSeriesField: !this._seriesField ? this.getSeriesKeys()[0] : null,\n getKey: this.generateDefaultDataKey(this._spec.dataKey)\n };\n}\n\nexport function addDataKey(d: any, i: number, context: AddVChartPropertyContext) {\n if (!d) {\n return;\n }\n if (context.needDefaultSeriesField) {\n d[DEFAULT_DATA_SERIES_FIELD] = context.defaultSeriesField;\n }\n d[DEFAULT_DATA_INDEX] = i;\n d[DEFAULT_DATA_KEY] = context.getKey(d, i, context);\n}\n\nexport function initHierarchyKeyMap(this: TreemapSeries | SunburstSeries | CirclePackingSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: true,\n defaultSeriesField: this.getSeriesKeys()[0],\n getKey: (this as any).generateDefaultDataKey((this as any)._spec.dataKey),\n categoryField: this.getCategoryField()\n };\n}\n\nexport function addHierarchyDataKey(\n d: any,\n i: number,\n context: AddVChartPropertyContext,\n depth: number = 0,\n root?: string,\n rootIndex?: number\n) {\n if (rootIndex === undefined) {\n rootIndex = i;\n }\n addDataKey(d, i, context);\n d[DEFAULT_HIERARCHY_DEPTH] = depth;\n d[DEFAULT_HIERARCHY_ROOT] = root || d[context.categoryField];\n d[DEFAULT_HIERARCHY_ROOT_INDEX] = rootIndex;\n if (d.children && d.children.length) {\n d.children.forEach((_d: any, _i: number) =>\n addHierarchyDataKey(_d, _i, context, d[DEFAULT_HIERARCHY_DEPTH] + 1, d[DEFAULT_HIERARCHY_ROOT], rootIndex)\n );\n }\n}\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { PREFIX } from '../../constant/base';\n\nexport const baseSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.label]: { name: SeriesMarkNameEnum.label, type: MarkTypeEnum.text }\n};\n\nexport const RECT_X = `${PREFIX}_rect_x`;\nexport const RECT_X1 = `${PREFIX}_rect_x1`;\nexport const RECT_Y = `${PREFIX}_rect_y`;\nexport const RECT_Y1 = `${PREFIX}_rect_y1`;\n\nexport const defaultSeriesIgnoreCheckKeys: { [key: string]: true } = {\n data: true\n};\n\nexport const defaultSeriesCompileCheckKeys: { [key: string]: true } = {\n invalidType: true,\n animation: true,\n animationAppear: true,\n animationEnter: true,\n animationUpdate: true,\n animationExit: true,\n animationNormal: true\n};\n","import { Direction } from '../../typings/space';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { ILineAnimationParams, LineAppearPreset } from './interface';\n\nconst Appear_ClipIn = (params: ILineAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'clipIn',\n options: {\n clipDimension: params.direction === Direction.horizontal ? 'y' : 'x'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_Grow = (params: ILineAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport function linePresetAnimation(params: ILineAnimationParams, preset: LineAppearPreset): IAnimationTypeConfig {\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn(params);\n }\n}\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, IClipAnimationOptions, TypeAnimation } from '../../../types/animate';\n\nexport const clipIn: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', false);\n const clipRange = element.getGraphicAttribute('clipRange', false) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: 0, clipRangeByDimension: options.clipDimension },\n to: { clipRange: clipRange, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: 0 },\n to: { clipRange: clipRange }\n };\n};\n\nexport const clipOut: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', true);\n const clipRange = element.getGraphicAttribute('clipRange', true) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: clipRange, clipRangeByDimension: options.clipDimension },\n to: { clipRange: 0, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: clipRange },\n to: { clipRange: 0 }\n };\n};\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport const fadeIn: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes() ?? {};\n\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: attrs.opacity ?? 1,\n fillOpacity: attrs.fillOpacity ?? 1,\n strokeOpacity: attrs.strokeOpacity ?? 1\n }\n };\n};\n\nexport const fadeOut: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: {\n opacity: element.getGraphicAttribute('opacity', true) ?? 1,\n fillOpacity: element.getGraphicAttribute('fillOpacity', true) ?? 1,\n strokeOpacity: element.getGraphicAttribute('strokeOpacity', true) ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n","import { isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IGrowCartesianAnimationOptions, IAnimationParameters, IElement, TypeAnimation } from '../../../types';\n\n// grow center\nexport const growCenterIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n return {\n from: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n },\n to: { x, x1, width }\n };\n }\n case 'y': {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n return {\n from: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n },\n to: { y, y1, height }\n };\n }\n case 'xy':\n default: {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n const from: any = {};\n\n if (isValid(width)) {\n from.x = x + width / 2;\n from.width = 0;\n from.x1 = undefined;\n } else {\n from.x = (x + x1) / 2;\n from.x1 = (x + x1) / 2;\n from.width = undefined;\n }\n\n if (isValid(height)) {\n from.y = y + height / 2;\n from.height = 0;\n from.y1 = undefined;\n } else {\n from.y = (y + y1) / 2;\n from.y1 = (y + y1) / 2;\n from.height = undefined;\n }\n\n return {\n from,\n to: { x, y, x1, y1, width, height }\n };\n }\n }\n};\n\nexport const growCenterOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n return {\n to: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n }\n };\n }\n case 'y': {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n return {\n to: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n }\n };\n }\n case 'xy':\n default: {\n const x = element.getFinalAnimationAttribute('x');\n const y = element.getFinalAnimationAttribute('y');\n const x1 = element.getFinalAnimationAttribute('x1');\n const y1 = element.getFinalAnimationAttribute('y1');\n const width = element.getFinalAnimationAttribute('width');\n const height = element.getFinalAnimationAttribute('height');\n const to: any = {};\n\n if (isValid(width)) {\n to.x = x + width / 2;\n to.width = 0;\n to.x1 = undefined;\n } else {\n to.x = (x + x1) / 2;\n to.x1 = (x + x1) / 2;\n to.width = undefined;\n }\n\n if (isValid(height)) {\n to.y = y + height / 2;\n to.height = 0;\n to.y1 = undefined;\n } else {\n to.y = (y + y1) / 2;\n to.y1 = (y + y1) / 2;\n to.height = undefined;\n }\n\n return {\n to\n };\n }\n }\n};\n\n// grow width\nfunction growWidthInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n from: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n from: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nfunction growWidthInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n // no need to handle the situation where x > x1\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options?.overall : 0;\n }\n return {\n from: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nexport const growWidthIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthInOverall(element, options, animationParameters)\n : growWidthInIndividual(element, options, animationParameters);\n};\n\nfunction growWidthOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n to: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n to: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 }\n };\n}\n\nfunction growWidthOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 }\n };\n}\n\nexport const growWidthOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthOutOverall(element, options, animationParameters)\n : growWidthOutIndividual(element, options, animationParameters);\n};\n\n// grow height\n\nfunction growHeightInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n return {\n from: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n from: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nfunction growHeightInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n from: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nexport const growHeightIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightInOverall(element, options, animationParameters)\n : growHeightInIndividual(element, options, animationParameters);\n};\n\nfunction growHeightOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n\n return {\n to: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n to: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 }\n };\n}\n\nfunction growHeightOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 }\n };\n}\n\nexport const growHeightOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightOutOverall(element, options, animationParameters)\n : growHeightOutIndividual(element, options, animationParameters);\n};\n","import { isNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowAngleAnimationOptions,\n IAnimationParameters,\n IGrowRadiusAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\n// grow angle\n\nconst growAngleInIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: attrs?.endAngle },\n to: { startAngle: attrs?.startAngle }\n };\n }\n return {\n from: { endAngle: attrs?.startAngle },\n to: { endAngle: attrs?.endAngle }\n };\n};\n\nconst growAngleInOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: attrs?.startAngle,\n endAngle: attrs?.endAngle\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: attrs?.startAngle,\n endAngle: attrs?.endAngle\n }\n };\n};\n\nexport const growAngleIn: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleInOverall(element, options, animationParameters)\n : growAngleInIndividual(element, options, animationParameters);\n};\n\nconst growAngleOutIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: element.getGraphicAttribute('startAngle', true) },\n to: { startAngle: attrs?.endAngle }\n };\n }\n return {\n from: { endAngle: element.getGraphicAttribute('endAngle', true) },\n to: { endAngle: attrs?.startAngle }\n };\n};\n\nconst growAngleOutOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n};\n\nexport const growAngleOut: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleOutOverall(element, options, animationParameters)\n : growAngleOutIndividual(element, options, animationParameters);\n};\n\n// grow radius\n\nconst growRadiusInIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: attrs?.outerRadius },\n to: { innerRadius: attrs?.innerRadius }\n };\n }\n return {\n from: { outerRadius: attrs?.innerRadius },\n to: { outerRadius: attrs?.outerRadius }\n };\n};\n\nconst growRadiusInOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: overallValue,\n outerRadius: overallValue\n },\n to: {\n innerRadius: attrs?.innerRadius,\n outerRadius: attrs?.outerRadius\n }\n };\n};\n\nexport const growRadiusIn: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusInOverall(element, options, animationParameters)\n : growRadiusInIndividual(element, options, animationParameters);\n};\n\nconst growRadiusOutIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: element.getGraphicAttribute('innerRadius', true) },\n to: { innerRadius: attrs?.outerRadius }\n };\n }\n return {\n from: { outerRadius: element.getGraphicAttribute('outerRadius', true) },\n to: { outerRadius: attrs?.innerRadius }\n };\n};\n\nconst growRadiusOutOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: element.getGraphicAttribute('innerRadius', true),\n outerRadius: element.getGraphicAttribute('outerRadius', true)\n },\n to: {\n innerRadius: overallValue,\n outerRadius: overallValue\n }\n };\n};\n\nexport const growRadiusOut: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusOutOverall(element, options, animationParameters)\n : growRadiusOutIndividual(element, options, animationParameters);\n};\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowPointsOverallAnimationOptions,\n IAnimationParameters,\n IGrowPointsAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\nconst getCenterPoints = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points: IPointLike[] = element.getGraphicAttribute('points', false);\n const center: IPointLike = { x: 0, y: 0 };\n points.forEach(point => {\n center.x += point.x;\n center.y += point.y;\n });\n center.x /= points.length;\n center.y /= points.length;\n\n if (options && options.center) {\n if (isValidNumber(options.center.x)) {\n center.x = options.center.x;\n }\n if (isValidNumber(options.center.y)) {\n center.y = options.center.y;\n }\n }\n\n if (element.mark.markType === 'area') {\n center.x1 = center.x;\n center.y1 = center.y;\n }\n\n return points.map(point => Object.assign({}, point, center));\n};\n\nexport const growPointsIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: getCenterPoints(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: getCenterPoints(element, options, animationParameters) }\n };\n};\n\n// grow points x\n\nconst changePointsX = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupRight = animationParameters.width;\n\n if (animationParameters.group) {\n groupRight = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = groupRight;\n }\n\n return {\n ...point,\n x: groupRight,\n y: point.y,\n x1: groupRight,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n ...point,\n x: 0,\n y: point.y,\n x1: 0,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsXIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsX(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsXOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsX(element, options, animationParameters) }\n };\n};\n\n// grow points y\n\nconst changePointsY = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupBottom = animationParameters.height;\n\n if (animationParameters.group) {\n groupBottom = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = groupBottom;\n }\n\n return {\n ...point,\n x: point.x,\n y: groupBottom,\n x1: point.x1,\n y1: groupBottom,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n ...point,\n x: point.x,\n y: 0,\n x1: point.x1,\n y1: 0,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsYIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsY(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsYOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsY(element, options, animationParameters) }\n };\n};\n","import { isFunction, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IMoveAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// When user did not provide proper x/y value, move animation will never work properly,\n// due to that, default x/y value won't be set.\n\nexport const moveIn: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt, excludeChannels = [] } = options ?? {};\n let changedX = 0;\n let changedY = 0;\n\n if (orient === 'negative') {\n // consider the offset of group\n if (animationParameters.group) {\n changedX = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n changedY = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupWidth = changedX;\n (animationParameters as any).groupHeight = changedY;\n } else {\n changedX = animationParameters.width;\n changedY = animationParameters.height;\n }\n }\n\n changedX += offset;\n changedY += offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n const finalAttrsX = excludeChannels.includes('x')\n ? element.getGraphicAttribute('x')\n : element.getFinalAnimationAttribute('x');\n const finalAttrsY = excludeChannels.includes('y')\n ? element.getGraphicAttribute('y')\n : element.getFinalAnimationAttribute('y');\n\n switch (direction) {\n case 'x':\n return {\n from: { x: fromX },\n to: { x: finalAttrsX }\n };\n case 'y':\n return {\n from: { y: fromY },\n to: { y: finalAttrsY }\n };\n case 'xy':\n default:\n return {\n from: { x: fromX, y: fromY },\n to: {\n x: finalAttrsX,\n y: finalAttrsY\n }\n };\n }\n};\n\nexport const moveOut: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt } = options ?? {};\n\n // consider the offset of group\n const groupBounds = animationParameters.group ? animationParameters.group.getBounds() : null;\n const groupWidth = groupBounds?.width() ?? animationParameters.width;\n const groupHeight = groupBounds?.height() ?? animationParameters.height;\n const changedX = (orient === 'negative' ? groupWidth : 0) + offset;\n const changedY = (orient === 'negative' ? groupHeight : 0) + offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n\n switch (direction) {\n case 'x':\n return {\n from: { x: element.getGraphicAttribute('x', true) },\n to: { x: fromX }\n };\n case 'y':\n return {\n from: { y: element.getGraphicAttribute('y', true) },\n to: { y: fromY }\n };\n case 'xy':\n default:\n return {\n from: {\n x: element.getGraphicAttribute('x', true),\n y: element.getGraphicAttribute('y', true)\n },\n to: { x: fromX, y: fromY }\n };\n }\n};\n","import type { IElement, IScaleAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// TODO: negative direction, need support from VRender\n\nexport const scaleIn: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: 0 },\n to: { scaleX: attrs?.scaleX ?? 1 }\n };\n case 'y':\n return {\n from: { scaleY: 0 },\n to: { scaleY: attrs?.scaleY ?? 1 }\n };\n case 'xy':\n default:\n return {\n from: { scaleX: 0, scaleY: 0 },\n to: {\n scaleX: attrs?.scaleX ?? 1,\n scaleY: attrs?.scaleY ?? 1\n }\n };\n }\n};\n\nexport const scaleOut: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: element.getGraphicAttribute('scaleX', true) ?? 1 },\n to: { scaleX: 0 }\n };\n case 'y':\n return {\n from: { scaleY: element.getGraphicAttribute('scaleY', true) ?? 1 },\n to: { scaleY: 0 }\n };\n case 'xy':\n default:\n return {\n from: {\n scaleX: element.getGraphicAttribute('scaleX', true) ?? 1,\n scaleY: element.getGraphicAttribute('scaleY', true) ?? 1\n },\n to: { scaleX: 0, scaleY: 0 }\n };\n }\n};\n","import { array, isNil, isEqual } from '@visactor/vutils';\nimport type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport interface IUpdateAnimationOptions {\n excludeChannels: string[];\n}\n\nconst BUILT_IN_EXCLUDE_CHANNELS = {\n symbol: ['_mo_hide_', 'visible']\n};\n\nexport const update: TypeAnimation = (\n element: IElement,\n options: IUpdateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const from = Object.assign({}, element.getPrevGraphicAttributes());\n const to = Object.assign({}, element.getNextGraphicAttributes());\n if (options) {\n array(options.excludeChannels).forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n let excludeChannels: string[];\n if (element.mark && element.mark.markType && (excludeChannels = BUILT_IN_EXCLUDE_CHANNELS[element.mark.markType])) {\n excludeChannels.forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n\n Object.keys(to).forEach(key => {\n if (isEqual(from[key], to[key])) {\n delete from[key];\n delete to[key];\n }\n });\n\n const final = element.getFinalGraphicAttributes();\n\n Object.keys(from).forEach(key => {\n if (isNil(to[key])) {\n if (isNil(final[key]) || isEqual(from[key], final[key])) {\n delete from[key];\n } else {\n to[key] = final[key];\n }\n }\n });\n\n return { from, to };\n};\n","import { isNumberClose, isValidNumber } from '@visactor/vutils';\nimport type { IAnimationParameters, IRotateAnimationOptions, TypeAnimation, IElement } from '../../../types';\n\nexport const rotateIn: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attributeAngle = element.getFinalAnimationAttribute('angle') ?? 0;\n\n let angle = 0;\n if (isNumberClose(attributeAngle / (Math.PI * 2), 0)) {\n angle = Math.round(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle },\n to: { angle: attributeAngle }\n };\n};\n\nexport const rotateOut: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const finalAngle = element.getGraphicAttribute('angle', true) ?? 0;\n let angle = 0;\n if (isNumberClose(finalAngle / (Math.PI * 2), 0)) {\n angle = Math.round(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle: finalAngle },\n to: { angle }\n };\n};\n","import { clipIn, clipOut } from './clip';\nimport { fadeIn, fadeOut } from './fade';\nimport { growCenterIn, growCenterOut, growHeightIn, growHeightOut, growWidthIn, growWidthOut } from './grow-cartesian';\nimport { growAngleIn, growAngleOut, growRadiusIn, growRadiusOut } from './grow-polar';\nimport {\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut\n} from './grow-points';\nimport { growIntervalIn, growIntervalOut } from './grow-interval';\nimport { moveIn, moveOut } from './move';\nimport { scaleIn, scaleOut } from './scale';\nimport { update } from './update';\nimport { rotateIn, rotateOut } from './rotate';\nimport { Factory } from '../../../core/factory';\n\nexport {\n clipIn,\n clipOut,\n fadeIn,\n fadeOut,\n moveIn,\n moveOut,\n scaleIn,\n scaleOut,\n rotateIn,\n rotateOut,\n growCenterIn,\n growCenterOut,\n growWidthIn,\n growWidthOut,\n growHeightIn,\n growHeightOut,\n growAngleIn,\n growAngleOut,\n growRadiusIn,\n growRadiusOut,\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut,\n growIntervalIn,\n growIntervalOut,\n update\n};\n\nexport const registerClipInAnimation = () => {\n Factory.registerAnimationType('clipIn', clipIn);\n};\nexport const registerClipOutAnimation = () => {\n Factory.registerAnimationType('clipOut', clipOut);\n};\n\nexport const registerFadeInAnimation = () => {\n Factory.registerAnimationType('fadeIn', fadeIn);\n};\nexport const registerFadeOutAnimation = () => {\n Factory.registerAnimationType('fadeOut', fadeOut);\n};\n\nexport const registerGrowCenterInAnimation = () => {\n Factory.registerAnimationType('growCenterIn', growCenterIn);\n};\nexport const registerGrowCenterOutAnimation = () => {\n Factory.registerAnimationType('growCenterOut', growCenterOut);\n};\nexport const registerGrowHeightInAnimation = () => {\n Factory.registerAnimationType('growHeightIn', growHeightIn);\n};\nexport const registerGrowHeightOutAnimation = () => {\n Factory.registerAnimationType('growHeightOut', growHeightOut);\n};\nexport const registerGrowWidthInAnimation = () => {\n Factory.registerAnimationType('growWidthIn', growWidthIn);\n};\nexport const registerGrowWidthOutAnimation = () => {\n Factory.registerAnimationType('growWidthOut', growWidthOut);\n};\n\nexport const registerGrowIntervalInAnimation = () => {\n Factory.registerAnimationType('growIntervalIn', growIntervalIn);\n};\nexport const registerGrowIntervalOutAnimation = () => {\n Factory.registerAnimationType('growIntervalOut', growIntervalOut);\n};\n\nexport const registerGrowPointsInAnimation = () => {\n Factory.registerAnimationType('growPointsIn', growPointsIn);\n};\nexport const registerGrowPointsOutAnimation = () => {\n Factory.registerAnimationType('growPointsOut', growPointsOut);\n};\nexport const registerGrowPointsXInAnimation = () => {\n Factory.registerAnimationType('growPointsXIn', growPointsXIn);\n};\nexport const registerGrowPointsXOutAnimation = () => {\n Factory.registerAnimationType('growPointsXOut', growPointsXOut);\n};\nexport const registerGrowPointsYInAnimation = () => {\n Factory.registerAnimationType('growPointsYIn', growPointsYIn);\n};\nexport const registerGrowPointsYOutAnimation = () => {\n Factory.registerAnimationType('growPointsYOut', growPointsYOut);\n};\n\nexport const registerGrowAngleInAnimation = () => {\n Factory.registerAnimationType('growAngleIn', growAngleIn);\n};\nexport const registerGrowAngleOutAnimation = () => {\n Factory.registerAnimationType('growAngleOut', growAngleOut);\n};\nexport const registerGrowRadiusInAnimation = () => {\n Factory.registerAnimationType('growRadiusIn', growRadiusIn);\n};\nexport const registerGrowRadiusOutAnimation = () => {\n Factory.registerAnimationType('growRadiusOut', growRadiusOut);\n};\n\nexport const registerMoveInAnimation = () => {\n Factory.registerAnimationType('moveIn', moveIn);\n};\nexport const registerMoveOutAnimation = () => {\n Factory.registerAnimationType('moveOut', moveOut);\n};\n\nexport const registerScaleInAnimation = () => {\n Factory.registerAnimationType('scaleIn', scaleIn);\n};\nexport const registerScaleOutAnimation = () => {\n Factory.registerAnimationType('scaleOut', scaleOut);\n};\n\nexport const registerRotateInAnimation = () => {\n Factory.registerAnimationType('rotateIn', rotateIn);\n};\nexport const registerRotateOutAnimation = () => {\n Factory.registerAnimationType('rotateOut', rotateOut);\n};\n\nexport const registerUpdateAnimation = () => {\n Factory.registerAnimationType('update', update);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { TagPointsUpdate, ClipDirectionAnimate } from '@visactor/vrender-core';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILineAnimationParams, LineAppearPreset } from '../series/line/interface';\nimport { linePresetAnimation } from '../series/line/animation';\nimport type { MarkAnimationSpec, ICartesianGroupAnimationParams } from './interface';\nimport { Factory } from '../core/factory';\nimport {\n View,\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation,\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n} from '@visactor/vgrammar-core';\nimport { Direction } from '../typings/space';\n\nexport const DEFAULT_ANIMATION_CONFIG = {\n appear: {\n duration: 1000,\n easing: 'cubicOut'\n },\n update: {\n type: 'update',\n duration: 300,\n easing: 'linear'\n },\n enter: {\n duration: 300,\n easing: 'linear'\n },\n exit: {\n duration: 300,\n easing: 'linear'\n },\n disappear: {\n duration: 500,\n easing: 'cubicIn'\n },\n state: {\n duration: 300,\n easing: 'linear'\n }\n};\n\nexport const ScaleInOutAnimation = {\n appear: { type: 'scaleIn' },\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: { type: 'scaleOut' }\n};\n\nexport const FadeInOutAnimation = {\n appear: { type: 'fadeIn' },\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n};\n\nexport const registerScaleInOutAnimation = () => {\n Factory.registerAnimation('scaleInOut', () => ScaleInOutAnimation);\n};\n\nexport const registerFadeInOutAnimation = () => {\n Factory.registerAnimation('fadeInOut', () => FadeInOutAnimation);\n};\n\nexport const registerCartesianGroupClipAnimation = () => {\n Factory.registerAnimation('cartesianGroupClip', (params?: ICartesianGroupAnimationParams) => {\n return {\n appear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'in',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n },\n disappear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'out',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n }\n };\n });\n};\n\nconst lineOrAreaAnimation = (params: ILineAnimationParams, preset: LineAppearPreset) => {\n return {\n appear: linePresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n update: [\n {\n type: 'update',\n options: { excludeChannels: ['points', 'defined', 'segments'] }\n },\n {\n channel: ['points', 'segments'],\n custom: TagPointsUpdate,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing,\n customParameters: {\n clipRangeByDimension: params.direction === Direction.horizontal ? 'y' : 'x'\n }\n }\n ],\n disappear: { type: 'clipOut' }\n } as MarkAnimationSpec;\n};\n\nexport const registerLineAnimation = () => {\n Factory.registerAnimation('line', lineOrAreaAnimation);\n};\n\nexport const registerAreaAnimation = () => {\n Factory.registerAnimation('area', lineOrAreaAnimation);\n};\n\nexport const registerVGrammarCommonAnimation = () => {\n View.useRegisters([\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n ]);\n};\n\nexport const registerVGrammarRectAnimation = () => {\n View.useRegisters([\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation\n ]);\n};\n\nexport const registerVGrammarArcAnimation = () => {\n View.useRegisters([\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation\n ]);\n};\n\nexport const registerVGrammarLineOrAreaAnimation = () => {\n View.useRegisters([\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation\n ]);\n};\n\nexport const registerVGrammarPolygonAnimation = () => {\n View.useRegisters([registerGrowPointsInAnimation, registerGrowPointsOutAnimation]);\n};\n","import type { IAnimationConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IElement, IAnimationTypeConfig, IAnimationTimeline } from '@visactor/vgrammar-core';\nimport type { MarkAnimationSpec, IAnimationState } from './interface';\nimport type { IStateAnimateSpec, IAnimationSpec } from './spec';\nimport { isFunction, isValidNumber } from '../util/type';\nimport { DEFAULT_DATA_INDEX } from '../constant/data';\nimport { DEFAULT_ANIMATION_CONFIG } from './config';\nimport { cloneDeep, isArray, isObject, isValid } from '@visactor/vutils';\nimport type { SeriesMarkNameEnum } from '../series/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../series';\nimport type { ISeriesSpec } from '../typings';\nimport type { IModelMarkAttributeContext } from '../compile/mark';\n\nexport const AnimationStates = [...Object.keys(DEFAULT_ANIMATION_CONFIG), 'normal'];\n\nexport function animationConfig(\n defaultConfig: MarkAnimationSpec = {},\n userConfig?: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n >,\n params?: {\n dataIndex: (datum: any, params: any) => number;\n dataCount: () => number;\n }\n) {\n const config = {} as MarkAnimationSpec;\n for (let i = 0; i < AnimationStates.length; i++) {\n const state = AnimationStates[i];\n const userStateConfig = userConfig ? userConfig[state] : undefined;\n\n if (userStateConfig === false) {\n continue;\n }\n\n if (state === 'normal') {\n userStateConfig && (config.normal = userStateConfig as IAnimationTypeConfig);\n continue;\n } else if (state === 'state') {\n if (userStateConfig !== false) {\n config.state = (userStateConfig ?? DEFAULT_ANIMATION_CONFIG.state) as any;\n }\n continue;\n }\n\n if (state !== 'update' && !userStateConfig && !defaultConfig[state]) {\n // no user config and default config\n continue;\n }\n\n // 开始处理默认动画逻辑\n let defaultStateConfig: IAnimationConfig[];\n if (isArray(defaultConfig[state])) {\n defaultStateConfig = defaultConfig[state] as IAnimationConfig[];\n } else {\n defaultStateConfig = [{ ...DEFAULT_ANIMATION_CONFIG[state], ...defaultConfig[state] } as any];\n }\n // FIXME: 用来控制当动画状态发生变更时是否清除正在执行的动画。\n // 现在 vrender 对于同一个视觉通道的 tween 不会做覆盖的处理。若不做动画清空同时 exit 动画比 update 动画时间长的情况下,效果会不正确\n if (state === 'exit') {\n defaultStateConfig.forEach(exitConfig => {\n exitConfig.controlOptions = { stopWhenStateChange: true };\n });\n }\n\n if (!userStateConfig) {\n config[state] = defaultStateConfig;\n continue;\n }\n\n // 开始处理用户配置的动画逻辑\n let stateConfig: IAnimationConfig[];\n if (isArray(userStateConfig)) {\n stateConfig = userStateConfig.map((userConfig, i) => {\n let singleConfig: IAnimationConfig = userConfig;\n // not merge default config when user animation config is array\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n } else {\n stateConfig = defaultStateConfig.map((stateConfig, i) => {\n let singleConfig: IAnimationConfig = mergeSpec({}, defaultStateConfig[i], userStateConfig) as IAnimationConfig;\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n }\n\n config[state] = stateConfig;\n }\n return config;\n}\n\nexport function userAnimationConfig(\n markName: SeriesMarkNameEnum | string,\n spec: IAnimationSpec,\n ctx: IModelMarkAttributeContext\n) {\n const userConfig: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n > = {};\n\n if (isValid(spec.animationAppear)) {\n userConfig.appear = spec.animationAppear[markName] ?? spec.animationAppear;\n }\n if (isValid(spec.animationDisappear)) {\n userConfig.disappear = spec.animationDisappear[markName] ?? spec.animationDisappear;\n }\n if (isValid(spec.animationEnter)) {\n userConfig.enter = spec.animationEnter[markName] ?? spec.animationEnter;\n }\n if (isValid(spec.animationExit)) {\n userConfig.exit = spec.animationExit[markName] ?? spec.animationExit;\n }\n if (isValid(spec.animationUpdate)) {\n userConfig.update = spec.animationUpdate[markName] ?? spec.animationUpdate;\n }\n if (isValid(spec.animationState)) {\n userConfig.state = spec.animationState[markName] ?? spec.animationState;\n }\n if (spec.animationNormal && spec.animationNormal[markName]) {\n userConfig.normal = spec.animationNormal[markName];\n }\n\n return uniformAnimationConfig(userConfig, ctx);\n}\n\n/**\n * oneByOne\n */\nfunction produceOneByOne(\n stateConfig: IAnimationTypeConfig,\n dataIndex: (datum: any, params: any) => number,\n dataCount?: () => number\n) {\n const { oneByOne, duration, delay, delayAfter } = stateConfig;\n stateConfig.delay = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelay = isFunction(delay) ? delay(datum, element, params) : isValidNumber(delay) ? delay : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelay;\n }\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelay + index * (durationTime + oneByOneTime);\n };\n stateConfig.delayAfter = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelayAfter = isFunction(delayAfter)\n ? delayAfter(datum, element, params)\n : isValidNumber(delayAfter)\n ? delayAfter\n : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelayAfter;\n }\n const indexCount = dataCount ? dataCount() : element.mark.elements.length;\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelayAfter + (indexCount - index) * (durationTime + oneByOneTime);\n };\n delete stateConfig.oneByOne;\n return stateConfig;\n}\n\nfunction defaultDataIndex(datum: any, params: any) {\n return datum?.[DEFAULT_DATA_INDEX] ?? params?.VGRAMMAR_ANIMATION_PARAMETERS?.elementIndex;\n}\n\nexport function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec, markName: string) {\n if (spec.animation === false) {\n return false;\n }\n\n if (spec.morph?.enable === false) {\n return false;\n }\n\n const appearAnimationEnabled = (spec.animationAppear?.[markName] ?? spec.animationAppear) !== false;\n const updateAnimationEnabled = (spec.animationUpdate?.[markName] ?? spec.animationUpdate) !== false;\n\n if (!appearAnimationEnabled || !updateAnimationEnabled) {\n return false;\n }\n\n return true;\n}\n\nexport function isTimeLineAnimation(animationConfig: IAnimationConfig) {\n return isValid((animationConfig as IAnimationTimeline).timeSlices);\n}\n\nexport function isChannelAnimation(animationConfig: IAnimationConfig) {\n return !isTimeLineAnimation(animationConfig) && isValid((animationConfig as IAnimationTypeConfig).channel);\n}\n\nexport function uniformAnimationConfig(\n config: Partial | IAnimationConfig | IAnimationConfig[]>>,\n ctx: IModelMarkAttributeContext\n) {\n if (!config) {\n return config;\n }\n const excludeKeys = ['custom', 'customParameters'];\n config = cloneDeep(config, null, excludeKeys);\n traverseSpec(\n config,\n (node: any) => {\n // 将函数转换为 vchart 代理的函数\n // 这里可能会传自定义动画的构造函数,不能被代理\n if (isFunction(node) && node.prototype?.constructor !== node) {\n const name = (...args: any) => {\n return node(...args, ctx);\n };\n return name;\n }\n return node;\n },\n excludeKeys\n );\n\n return config;\n}\n\nfunction traverseSpec(spec: any, transform: (node: any, key: string | number) => any, excludeKeys: string[] = []) {\n if (isArray(spec)) {\n spec.forEach((i: any, index: number) => {\n spec[index] = transform(spec[index], index);\n traverseSpec(spec[index], transform, excludeKeys);\n });\n } else if (isObject(spec)) {\n for (const key in spec) {\n if (!excludeKeys.includes(key)) {\n spec[key] = transform(spec[key], key);\n traverseSpec(spec[key], transform, excludeKeys);\n }\n }\n }\n}\n\nexport function isAnimationEnabledForSeries(series: ISeries) {\n const seriesSpec = series.getSpec();\n\n if (seriesSpec.animation === false) {\n return false;\n }\n\n if (!isValid(series.getRegion().animate)) {\n return false;\n }\n\n let animationThreshold = seriesSpec.animationThreshold ?? Number.MAX_SAFE_INTEGER;\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n series.getMarks()?.forEach(m => {\n const config = m.getMarkConfig();\n if (config) {\n if (config.large && config.largeThreshold) {\n animationThreshold = Math.min(animationThreshold, config.largeThreshold);\n }\n if (config.progressiveThreshold) {\n animationThreshold = Math.min(animationThreshold, config.progressiveThreshold);\n }\n }\n });\n // auto close animation\n if (series.getRawData()?.latestData?.length >= animationThreshold) {\n return false;\n }\n\n return true;\n}\n","import { isBoolean, isFunction, isNil, isObject } from '@visactor/vutils';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport type { ILabelSpec, TransformedLabelSpec } from '../../component/label';\nimport { BaseModelSpecTransformer } from '../../model/base-model-transformer';\nimport type { ISeriesSpec } from '../../typings';\nimport { array, get, isArray, isValid, transformSeriesThemeToMerge } from '../../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeriesSpecTransformerResult, SeriesMarkNameEnum } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../interface';\nimport { getDirectionFromSeriesSpec } from '../util/spec';\nimport { Factory } from '../../core/factory';\n\nexport class BaseSeriesSpecTransformer extends BaseModelSpecTransformer {\n markLabelSpec: Partial> = {};\n stack: boolean;\n protected _supportStack: boolean;\n\n getLabelSpec(markName: string) {\n return this.markLabelSpec[markName];\n }\n\n setLabelSpec(markName: string, label: TransformedLabelSpec | TransformedLabelSpec[]) {\n this.markLabelSpec[markName] = array(label);\n }\n\n addLabelSpec(markName: string, label: TransformedLabelSpec, head = false) {\n if (!this.markLabelSpec[markName]) {\n this.markLabelSpec[markName] = [];\n }\n if (head) {\n // 排序靠前的 label 优先布局,尽可能避免碰撞隐藏\n this.markLabelSpec[markName].unshift(label);\n } else {\n this.markLabelSpec[markName].push(label);\n }\n }\n\n getTheme(spec: T, chartSpec: any): K {\n const direction = getDirectionFromSeriesSpec(spec);\n const chartTheme = this._option?.getTheme();\n const { markByName, mark } = chartTheme;\n const type = this._option.type;\n // 基本主题\n const seriesMarkMap = Factory.getSeriesMarkMap(type);\n\n const theme = seriesMarkMap\n ? transformSeriesThemeToMerge(get(chartTheme, `series.${type}`), type, mark, markByName)\n : {};\n // 区分方向的主题\n const themeWithDirection = get(chartTheme, `series.${type}_${direction}`);\n // stack 状态下的主题\n const stack = this.stack ?? themeWithDirection?.stack ?? theme?.stack;\n const themeWithStack = stack ? get(chartTheme, `series.${type}_stack`) : undefined;\n return mergeSpec({}, theme, themeWithDirection, themeWithStack);\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): ISeriesSpecTransformerResult {\n this._transformStack(spec);\n const result = super.transformSpec(spec, chartSpec, chartSpecInfo);\n this._transformLabelSpec(result.spec);\n return {\n ...result,\n markLabelSpec: this.markLabelSpec,\n stack: this.stack\n };\n }\n\n protected _transformLabelSpec(spec: T) {\n // empty\n }\n\n protected _transformStack(spec: T) {\n if (isBoolean(spec.stack)) {\n this.stack = spec.stack;\n }\n if (isBoolean(spec.percent)) {\n this.stack = spec.percent || this.stack; // this.stack is `true` in bar/area series\n }\n\n if (isNil(this.stack) && this._supportStack && spec.seriesField) {\n // only set default value of stack to be `true` when series support stack and seriesField is not null\n this.stack = true;\n }\n }\n\n protected _addMarkLabelSpec(\n spec: T,\n markName: SeriesMarkNameEnum | ((spec: ILabelSpec) => SeriesMarkNameEnum),\n labelSpecKey: keyof T = 'label' as any,\n styleHandlerName: keyof V = 'initLabelMarkStyle',\n hasAnimation: boolean = true,\n head?: boolean\n ): void {\n if (!spec) {\n return;\n }\n const labels = array(spec[labelSpecKey]);\n labels.forEach(labelSpec => {\n if (labelSpec && labelSpec.visible) {\n // animation config priority: option.animation > spec.animation > spec.label.animation\n const {\n animation = true,\n animationUpdate: labelAnimationUpdate = true,\n animationEnter: labelAnimationEnter = true,\n animationExit: labelAnimationExit = true\n } = labelSpec;\n const { animationUpdate = true, animationEnter = true, animationExit = true } = spec as any;\n const animationEnabled = this._option?.animation ?? spec.animation ?? labelSpec.animation;\n const labelAnimationEnabled = !!animationEnabled && !!hasAnimation;\n\n this.addLabelSpec(\n isFunction(markName) ? markName(labelSpec) : markName,\n {\n ...labelSpec,\n animation: labelAnimationEnabled ? animation : false,\n animationUpdate: labelAnimationEnabled && animationUpdate && labelAnimationUpdate ? animationUpdate : false,\n animationEnter: labelAnimationEnabled && animationEnter && labelAnimationEnter ? animationEnter : false,\n animationExit: labelAnimationEnabled && animationEnter && labelAnimationExit ? animationExit : false,\n getStyleHandler: (series: V) => (series[styleHandlerName] as any)?.bind(series)\n } as TransformedLabelSpec,\n head\n );\n }\n });\n }\n\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = (super._getDefaultSpecFromChart(chartSpec) as any) ?? {};\n const { outerRadius, innerRadius, direction } = chartSpec;\n if (isValid(outerRadius)) {\n spec.outerRadius = outerRadius;\n }\n if (isValid(innerRadius)) {\n spec.innerRadius = innerRadius;\n }\n\n if (isValid(direction)) {\n spec.direction = direction;\n }\n\n return Object.keys(spec).length > 0 ? spec : undefined;\n }\n\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n // this._originalSpec + specFromChart + this._theme = spec\n const merge = (originalSpec: any) => {\n const result = mergeSpec({}, theme, specFromChart, originalSpec);\n const labelTheme = (theme as any).label;\n if (labelTheme && isObject(labelTheme) && isArray(result.label)) {\n result.label = result.label.map((label: ILabelSpec) => mergeSpec({}, labelTheme, label));\n }\n return result;\n };\n\n if (isArray(spec)) {\n return {\n spec: spec.map(specItem => merge(specItem)) as unknown as T,\n theme\n };\n }\n\n return {\n spec: merge(spec),\n theme\n };\n }\n return { spec, theme };\n }\n}\n","import type { RenderMode } from '../typings/spec/common';\nimport { RenderModeEnum } from '../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../util';\n\nexport function getDefaultInteractionConfigByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n hover: {\n enable: true,\n trigger: 'pointermove',\n triggerOff: 'view:pointerleave'\n },\n select: {\n enable: true,\n trigger: 'pointertap'\n }\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n hover: {\n enable: true,\n trigger: ['pointerdown', 'pointermove'],\n triggerOff: 'view:pointerleave'\n },\n select: {\n enable: true,\n trigger: 'tap'\n }\n };\n }\n\n return null;\n}\n","import { ChartEvent } from '../../constant/event';\nimport {\n DEFAULT_DATA_KEY,\n DEFAULT_DATA_SERIES_FIELD,\n DEFAULT_SERIES_STYLE_NAME,\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { PREFIX } from '../../constant/base';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet, ITransformOptions } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport type { ICompileMarkConfig, IGroupMark, IMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type {\n CoordinateType,\n IInvalidType,\n IPoint,\n DataKeyType,\n Datum,\n Maybe,\n ISeriesSpec,\n IExtensionMarkSpec,\n IExtensionGroupMarkSpec,\n EnableMarkType,\n IGroup,\n ILayoutType,\n ILayoutPoint,\n ILayoutRect\n} from '../../typings';\nimport { BaseModel } from '../../model/base-model';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ISeriesOption,\n ISeries,\n ISeriesMarkInitOption,\n ISeriesStackData,\n ISeriesTooltipHelper,\n SeriesMarkMap,\n ISeriesMarkInfo,\n ISeriesSpecInfo,\n ISeriesStackDataLeaf,\n ISeriesStackDataNode,\n ISeriesStackDataMeta,\n ISeriesSeriesInfo\n} from '../interface';\nimport { dataToDataView, dataViewFromDataView, updateDataViewInData } from '../../data/initialize';\nimport { mergeFields, getFieldAlias } from '../../util/data';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IModelEvaluateOption, IModelRenderOption, IUpdateSpecResult } from '../../model/interface';\nimport type { AddVChartPropertyContext } from '../../data/transforms/add-property';\n// eslint-disable-next-line no-duplicate-imports\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport type { IBaseInteractionSpec, IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { BaseSeriesTooltipHelper } from './tooltip-helper';\n// eslint-disable-next-line no-duplicate-imports\nimport { dimensionStatistics, dimensionStatisticsOfSimpleData } from '../../data/transforms/dimension-statistics';\nimport { invalidTravel } from '../../data/transforms/invalid-travel';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport { SeriesData } from './series-data';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport type { ISeriesMarkAttributeContext } from '../../compile/mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark';\nimport {\n array,\n isEqual,\n isNil,\n isValid,\n isBoolean,\n isString,\n isFunction,\n isArray,\n isValidNumber,\n isObject,\n minInArray,\n maxInArray,\n merge\n} from '@visactor/vutils';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { baseSeriesMark, defaultSeriesIgnoreCheckKeys, defaultSeriesCompileCheckKeys } from './constant';\nimport { animationConfig, userAnimationConfig, isAnimationEnabledForSeries } from '../../animation/utils';\nimport { BaseSeriesSpecTransformer } from './base-series-transformer';\nimport type { EventType, IMarkConfig } from '@visactor/vgrammar-core';\nimport { getDefaultInteractionConfigByMode } from '../../interaction/config';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { ILabelSpec } from '../../component/label/interface';\nimport type { StatisticOperations } from '../../data/transforms/interface';\nimport { is3DMark } from '../../mark/utils';\n\nexport abstract class BaseSeries extends BaseModel implements ISeries {\n readonly specKey: string = 'series';\n readonly type: string = 'series';\n layoutType: ILayoutType = 'absolute';\n readonly modelType: string = 'series';\n readonly name: string | undefined = undefined;\n\n static readonly mark: SeriesMarkMap = baseSeriesMark;\n static readonly transformerConstructor = BaseSeriesSpecTransformer;\n readonly transformerConstructor = BaseSeriesSpecTransformer as any;\n\n declare getSpecInfo: () => ISeriesSpecInfo;\n\n protected declare _option: ISeriesOption;\n\n // 坐标系信息\n readonly coordinate: CoordinateType = 'none';\n\n // 区域\n protected _region: IRegion = null as unknown as IRegion;\n getRegion(): IRegion {\n return this._region;\n }\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._region.getLayoutStartPoint();\n }\n\n private _layoutRect: ILayoutRect = { width: null, height: null };\n\n getLayoutRect: () => ILayoutRect = () => {\n return {\n width: this._layoutRect.width ?? this._region.getLayoutRect().width,\n height: this._layoutRect.height ?? this._region.getLayoutRect().height\n };\n };\n\n /** 系列的根 mark */\n protected _rootMark: IGroupMark = null;\n getRootMark() {\n return this._rootMark;\n }\n\n /** series field 所作用的 mark */\n protected _seriesMark: Maybe = null;\n getSeriesMark() {\n return this._seriesMark;\n }\n\n protected _layoutLevel!: number;\n\n /**\n * data\n * 数据节点\n * rawData 只进行 fields 相关能力,筛选+sort。\n * rawDataStatistics 的统计值是fields筛选后的。是符合预期的。\n * viewDatFilter 节点用来做组件等图表逻辑的数据筛选\n * viewData上不允许挂 filter\n * 数据更新流程一:重新做数据变换\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程二:图表逻辑更新,进行数据筛选\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程三:用户更新数据\n * rawData().parse().rawDataStatistics()=>\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n *\n * NEED-OPTIMIZATION:\n * 一:额外增加了 filter 节点,流程断开为2部分。只是因为堆积需要,因为 filter 和数据变换可以用排序解决。\n * 二:running tag 没有找到好办法消除。只是增加了一个易用 api 到 dataView 上\n */\n protected _rawData!: DataView;\n getRawData() {\n return this._rawData;\n }\n\n protected _rawDataStatistics?: DataView;\n protected _rawStatisticsCache: Record;\n\n protected _viewDataMap: Map = new Map();\n\n // only add viewDataFilter when this._stack is true\n protected _viewDataFilter: DataView = null;\n\n getViewDataFilter() {\n return this._viewDataFilter;\n }\n\n // view data\n protected _data: SeriesData = null;\n getViewData() {\n return this._data?.getDataView();\n }\n getViewDataProductId() {\n return this._data?.getProductId();\n }\n\n protected _viewDataStatistics!: DataView;\n getViewDataStatistics() {\n return this._viewDataStatistics;\n }\n protected _viewStackData!: DataView;\n getViewStackData() {\n return this._viewStackData;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n }\n }\n\n protected _groups?: IGroup;\n getGroups() {\n return this._groups;\n }\n\n getStack() {\n return this.getSpecInfo()?.stack;\n }\n\n getStackValue() {\n return this._spec.stackValue ?? `${PREFIX}_series_${this.type}`;\n }\n getPercent() {\n return this._spec.percent;\n }\n getStackOffsetSilhouette() {\n return this._spec.stackOffsetSilhouette;\n }\n protected _dataSet: DataSet;\n\n protected declare _tooltipHelper: ISeriesTooltipHelper | undefined;\n get tooltipHelper() {\n if (!this._tooltipHelper) {\n this.initTooltip();\n }\n\n return this._tooltipHelper;\n }\n\n layoutZIndex: number = LayoutZIndex.SeriesGroup;\n\n protected _invalidType: IInvalidType = 'break';\n getInvalidType() {\n return this._invalidType;\n }\n setInvalidType(t: IInvalidType) {\n this._invalidType = t;\n this.getViewData()?.reRunAllTransform();\n }\n\n protected _markAttributeContext: ISeriesMarkAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n constructor(spec: T, options: ISeriesOption) {\n super(spec, options);\n this._region = options.region;\n this._dataSet = options.dataSet;\n this._spec?.name && (this.name = this._spec.name);\n }\n\n created(): void {\n super.created();\n this._buildMarkAttributeContext();\n // data\n this.initData();\n this.initGroups();\n // 调整统计数据的创建时机,需要等待group创建完成\n this.initStatisticalData();\n this.event.emit(ChartEvent.afterInitData, { model: this });\n // mark\n this.initRootMark();\n this.initMark();\n const hasAnimation = isAnimationEnabledForSeries(this);\n\n this._initExtensionMark({ hasAnimation });\n\n this.initMarkStyle();\n this.initMarkState();\n if (hasAnimation) {\n this.initAnimation();\n }\n\n if (!this._option.disableTriggerEvent) {\n this.initInteraction();\n }\n this.afterInitMark();\n\n // event\n this.initEvent();\n this.event.emit(ChartEvent.afterInitEvent, { model: this });\n }\n\n protected _buildMarkAttributeContext() {\n this._markAttributeContext = {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n },\n seriesColor: (seriesValue: string | number) => {\n if (isNil(seriesValue)) {\n seriesValue = this.getSeriesKeys()[0];\n }\n return this._option.globalScale.getScale('color')?.scale(seriesValue);\n },\n getRegion: () => this._region\n };\n }\n\n /** 预处理spec信息 */\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setSeriesField(this._spec.seriesField);\n if (isValid(this._spec.invalidType)) {\n this._invalidType = this._spec.invalidType;\n }\n }\n\n protected getInvalidCheckFields() {\n return [this.getStackValueField()];\n }\n\n protected initInvalidDataTransform(): void {\n // _invalidType 默认为 break/ignore,直接走图形层面的解析,不需要走 transform 数据处理逻辑\n if (this._invalidType === 'zero' && this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'invalidTravel', invalidTravel);\n // make sure each series only transform once\n this._rawData?.transform(\n {\n type: 'invalidTravel',\n options: {\n config: () => {\n return {\n invalidType: this._invalidType,\n checkField: this.getInvalidCheckFields()\n };\n }\n }\n },\n false\n );\n }\n }\n\n /** data */\n protected initData(): void {\n const d = this._spec.data ?? this._option.getSeriesData(this._spec.dataId, this._spec.dataIndex);\n if (d) {\n this._rawData = dataToDataView(d, this._dataSet, this._option.sourceDataList);\n }\n this._rawData?.target?.addListener('change', this.rawDataUpdate.bind(this));\n this._addDataIndexAndKey();\n // 初始化viewData\n if (this._rawData) {\n if (this.getStack()) {\n // 初始化viewDataFilter\n this._viewDataFilter = dataViewFromDataView(this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewDataFilter`\n });\n }\n\n // 初始化viewData\n const viewData = dataViewFromDataView(this.getStack() ? this._viewDataFilter : this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewData`\n });\n this._data = new SeriesData(this._option, viewData);\n\n if (this.getStack()) {\n this._viewDataFilter.target.removeListener('change', viewData.reRunAllTransform);\n }\n }\n\n this.initInvalidDataTransform();\n }\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = { fields: groupFields };\n // this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n protected initStatisticalData(): void {\n if (this._data) {\n this._statisticViewData();\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (\n !this._rawStatisticsCache[field] ||\n // 如果数值类型与当前的计算结果类型不一致的话,也需要把结果更新到cache中\n // 具体场景: field同时在axis中作为离散字段,在图例中作为连续字段,此时min、max、values都应该被计算并更新在cache中\n (isNumeric && (isNil(this._rawStatisticsCache[field].min) || isNil(this._rawStatisticsCache[field].max))) ||\n (!isNumeric && isNil(this._rawStatisticsCache[field].values))\n ) {\n const canUseViewStatistics =\n this._viewDataStatistics &&\n (!this._viewDataFilter || this._viewDataFilter.transformsArr.length <= 1) &&\n this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n // 如果有设置统计信息,应当与设置值保持一致\n const fieldInfo = this._rawData.getFields()?.[field];\n if (fieldInfo && fieldInfo.lockStatisticsByDomain && fieldInfo.domain) {\n this._rawStatisticsCache[field] = {};\n if (isNumeric) {\n this._rawStatisticsCache[field].min = minInArray(fieldInfo.domain);\n this._rawStatisticsCache[field].max = maxInArray(fieldInfo.domain);\n } else {\n this._rawStatisticsCache[field].values = fieldInfo.domain;\n }\n } else {\n const result = (\n dimensionStatisticsOfSimpleData(this._rawData.latestData as Datum[], [\n { key: field, operations: isNumeric ? ['min', 'max'] : ['values'] }\n ]) as any\n )[field];\n this._rawStatisticsCache[field] = merge(this._rawStatisticsCache[field] ?? {}, result);\n }\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n protected _statisticViewData() {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const viewDataStatisticsName = `${this.type}_${this.id}_viewDataStatic`;\n this._viewDataStatistics = new DataView(this._dataSet, { name: viewDataStatisticsName });\n this._viewDataStatistics.parse([this._data.getDataView()], {\n type: 'dataview'\n });\n this._viewDataStatistics.transform(\n {\n type: 'dimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n\n this._data.getDataView().target.removeListener('change', this._viewDataStatistics.reRunAllTransform);\n if (this.getStack()) {\n this.createdStackData();\n }\n }\n\n protected createStatisticalData(\n dataName: string,\n rawData: DataView,\n staticFields?: (dataId: string) => {\n key: string;\n operations: StatisticOperations;\n }[]\n ) {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse([rawData], {\n type: 'dataview'\n });\n // data.name = dataName;\n data.transform(\n {\n type: 'dimensionStatistics',\n options: {\n operations: ['max', 'min', 'values'],\n fields: () => {\n const fields = mergeFields(this.getStatisticFields(), staticFields?.(rawData.name as string) ?? []);\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n return data;\n }\n\n // stack\n private createdStackData(): void {\n const dataName = `${this.type}_${this.id}_viewStackData`;\n this._viewStackData = new DataView(this._dataSet, { name: dataName });\n this._viewStackData.parse([this._viewDataFilter], {\n type: 'dataview'\n });\n this._viewStackData.transform(\n {\n type: 'stackSplit',\n options: {\n fields: this.getStackGroupFields()\n }\n },\n false\n );\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return index;\n }\n\n protected generateDefaultDataKey(dataKey: DataKeyType) {\n if (isNil(dataKey)) {\n return (datum: Datum, index: number, context: AddVChartPropertyContext) => {\n // check if need animation data key\n if (this._spec.animation === false) {\n const v = this._noAnimationDataKey(datum, index);\n if (v !== undefined) {\n return v;\n }\n }\n const { keyMap } = context;\n const seriesDataKey = this._getSeriesDataKey(datum);\n if (keyMap.get(seriesDataKey) === undefined) {\n keyMap.set(seriesDataKey, 0);\n\n return seriesDataKey;\n }\n\n keyMap.set(seriesDataKey, keyMap.get(seriesDataKey) + 1);\n return `${seriesDataKey}_${keyMap.get(seriesDataKey)}`;\n };\n }\n\n if (isString(dataKey)) {\n return (datum: Datum) => datum[dataKey];\n }\n\n if (isArray(dataKey) && dataKey.every(d => isString(d))) {\n return (datum: Datum) => dataKey.map(k => datum[k]).join('-');\n }\n\n if (isFunction(dataKey)) {\n return (datum: Datum, index: number) => dataKey(datum, index);\n }\n\n this._option?.onError(`invalid dataKey: ${dataKey}`);\n return (datum: Datum, index: number) => undefined as string;\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n }\n }\n\n updateRawData(d: any): void {\n if (!this._rawData) {\n return;\n }\n this._rawData.updateRawData(d);\n }\n rawDataUpdate(d: DataView): void {\n this._rawDataStatistics?.reRunAllTransform();\n this._rawStatisticsCache = null;\n this.event.emit(ChartEvent.rawDataUpdate, { model: this });\n }\n viewDataFilterOver(d: DataView): void {\n this.event.emit(ChartEvent.viewDataFilterOver, { model: this });\n }\n viewDataUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataUpdate, { model: this });\n // 依据数据更新设置渲染结果\n // 初始化时会触发 viewDataUpdate,但是此时 srView 还未生成,因此实际上不会产生多余的 updateData 调用\n this._data?.updateData();\n this._viewDataStatistics && this._viewDataStatistics.reRunAllTransform();\n }\n viewDataStatisticsUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataStatisticsUpdate, { model: this });\n }\n\n // 数据到位置值\n getDatumPositionValue(datum: Datum, field: string) {\n if (!datum || isNil(field)) {\n return null;\n }\n return datum[field];\n }\n getDatumPositionValues(datum: Datum, fields: string | string[]) {\n if (!datum || isNil(fields)) {\n return [];\n }\n\n if (isString(fields)) {\n return [datum[fields]];\n }\n return fields.map(f => datum[f]);\n }\n /** mark end */\n\n /** 获取参与统计的字段与统计类型 */\n abstract getStatisticFields(): {\n key: string;\n operations: StatisticOperations;\n }[];\n /** 获取分组字段 */\n abstract getGroupFields(): string[];\n /** 数据到坐标点的映射 */\n abstract dataToPosition(data: Datum, checkInViewData?: boolean): IPoint;\n /** 数据到 x 坐标点的映射 */\n abstract dataToPositionX(data: Datum): number;\n /** 数据到 y 坐标点的映射 */\n abstract dataToPositionY(data: Datum): number;\n /** 数据到坐标点的映射 */\n abstract valueToPosition(value1: any, value2?: any): IPoint;\n abstract initMark(): void;\n abstract initMarkStyle(): void;\n\n /** stack start */\n abstract getStackGroupFields(): string[];\n abstract getStackValueField(): string | undefined;\n setValueFieldToStack() {\n // do nothing\n }\n setValueFieldToPercent() {\n // do nothing;\n }\n setValueFieldToStackOffsetSilhouette() {\n // do nothing\n }\n\n /** 获取系列中可以被操作的mark(brush需要通过在图元spec中内置state的方式实现框选样式,所以需要获取可被框选的mark) */\n abstract getActiveMarks(): IMark[];\n\n initRootMark() {\n this._rootMark = this._createMark(\n { type: MarkTypeEnum.group, name: `seriesGroup_${this.type}_${this.id}` },\n {\n parent: this._region.getGroupMark?.(),\n dataView: false\n }\n ) as IGroupMark;\n this._rootMark.setMarkConfig({ zIndex: this._spec.zIndex ?? this.layoutZIndex });\n }\n\n private _getExtensionMarkNamePrefix() {\n return `${this.type}_${this.id}_extensionMark`;\n }\n\n protected _initExtensionMark(options: { hasAnimation: boolean; depend?: IMark[] }) {\n if (!this._spec.extensionMark) {\n return;\n }\n const mainMarks = this.getMarksWithoutRoot();\n\n options.depend = mainMarks;\n\n this._spec.extensionMark?.forEach((m, i) => {\n this._createExtensionMark(m, null, this._getExtensionMarkNamePrefix(), i, options);\n });\n }\n\n private _createExtensionMark(\n spec: IExtensionMarkSpec> | IExtensionGroupMarkSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number,\n options: { hasAnimation: boolean; depend?: IMark[] }\n ) {\n const mark = this._createMark(\n { type: spec.type, name: isValid(spec.name) ? `${spec.name}` : `${namePrefix}_${index}` },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n markSpec: spec,\n parent: parentMark,\n dataView: false,\n componentType: spec.componentType,\n depend: options.depend,\n key: spec.dataKey\n },\n {\n setCustomizedShape: spec?.customShape\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n\n if (isValid(spec.id)) {\n mark.setUserId(spec.id);\n }\n\n if (options.hasAnimation) {\n // 自定义图元默认不添加动画\n const config = animationConfig({}, userAnimationConfig(spec.type, spec as any, this._markAttributeContext));\n mark.setAnimationConfig(config);\n }\n\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i, options);\n });\n } else if (!parentMark && (!isNil(spec.dataId) || !isNil(spec.dataIndex))) {\n const dataView = this._option.getSeriesData(spec.dataId, spec.dataIndex);\n if (dataView === this._rawData) {\n mark.setDataView(this.getViewData(), this.getViewDataProductId());\n } else {\n mark.setDataView(dataView);\n\n dataView.target.addListener('change', () => {\n mark.getData().updateData();\n });\n }\n }\n }\n\n protected _updateExtensionMarkSpec() {\n this._spec.extensionMark?.forEach((spec, i) => {\n const mark = this._marks.getMarkWithInfo({\n name: isValid(spec.name) ? `${spec.name}` : `${this._getExtensionMarkNamePrefix()}_${i}`\n });\n if (!mark) {\n return;\n }\n this.initMarkStyleWithSpec(mark, spec);\n mark.updateStaticEncode();\n mark.updateLayoutState();\n });\n }\n\n getStackData(): ISeriesStackData {\n return this._viewStackData?.latestData;\n }\n /** stack end */\n\n /** mark */\n\n protected _parseSelectorOfInteraction(interactionSpec: IBaseInteractionSpec, marks: IMark[]) {\n if (!marks || !marks.length) {\n return [];\n }\n const selector: string[] = [];\n\n if (interactionSpec.markIds) {\n marks.filter(mark => {\n if (interactionSpec.markIds.includes(mark.getProductId())) {\n selector.push(`#${mark.getProductId()}`);\n }\n });\n } else if (interactionSpec.markNames) {\n marks.forEach(mark => {\n if (interactionSpec.markNames.includes(mark.name)) {\n selector.push(`#${mark.getProductId()}`);\n }\n });\n } else {\n marks.forEach(mark => {\n selector.push(`#${mark.getProductId()}`);\n });\n }\n\n return selector;\n }\n\n protected _parseDefaultInteractionConfig(mainMarks?: IMark[]) {\n if (!mainMarks?.length) {\n return [];\n }\n\n const defaultConfig = getDefaultInteractionConfigByMode(this._option.mode);\n let finalHoverSpec = { ...defaultConfig?.hover };\n let finalSelectSpec: ISelectSpec = { ...defaultConfig?.select };\n\n const hoverSpec = this._spec.hover;\n if (isBoolean(hoverSpec)) {\n finalHoverSpec.enable = hoverSpec as boolean;\n } else if (isObject(hoverSpec)) {\n finalHoverSpec.enable = true;\n finalHoverSpec = mergeSpec(finalHoverSpec, hoverSpec);\n }\n\n const selectSpec = this._spec.select;\n if (isBoolean(selectSpec)) {\n finalSelectSpec.enable = selectSpec as boolean;\n } else if (isObject(selectSpec)) {\n finalSelectSpec.enable = true;\n finalSelectSpec = mergeSpec(finalSelectSpec, selectSpec);\n }\n const res = [];\n\n if (finalHoverSpec.enable) {\n const selector: string[] = this._parseSelectorOfInteraction(finalHoverSpec as IBaseInteractionSpec, mainMarks);\n\n selector.length && res.push(this._defaultHoverConfig(selector, finalHoverSpec));\n }\n\n if (finalSelectSpec.enable) {\n const selector: string[] = this._parseSelectorOfInteraction(finalSelectSpec as IBaseInteractionSpec, mainMarks);\n selector.length && res.push(this._defaultSelectConfig(selector, finalSelectSpec));\n }\n return res;\n }\n\n protected _defaultHoverConfig(selector: string[], finalHoverSpec: IHoverSpec) {\n return {\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n type: 'element-highlight',\n trigger: finalHoverSpec.trigger as EventType,\n triggerOff: finalHoverSpec.triggerOff as EventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(selector: string[], finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty']\n : ['empty', finalSelectSpec.trigger];\n return {\n type: 'element-select',\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n trigger: finalSelectSpec.trigger as EventType,\n triggerOff: triggerOff as EventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n protected _parseInteractionConfig(mainMarks?: IMark[]) {\n const compiler = this.getCompiler();\n if (!compiler) {\n return;\n }\n\n const { interactions } = this._spec;\n const res = this._parseDefaultInteractionConfig(mainMarks);\n\n if (res && res.length) {\n res.forEach(interaction => {\n compiler.addInteraction(interaction);\n });\n }\n\n if (interactions && interactions.length) {\n interactions.forEach(interaction => {\n const selectors: string[] = this._parseSelectorOfInteraction(interaction, this.getMarks());\n\n if (selectors.length) {\n compiler.addInteraction({\n ...interaction,\n selector: selectors,\n seriesId: this.id,\n regionId: this._region.id\n });\n }\n });\n }\n }\n\n initInteraction() {\n const marks = this.getMarksWithoutRoot();\n this._parseInteractionConfig(marks);\n }\n\n initAnimation() {\n // do nothing\n }\n\n initMarkState() {\n this.initSeriesStyleState();\n }\n\n /**\n * 初始化initSeriesStyleState所对应的state,配置series-style数组会转化到state实现,每一个seriesItem都对应一个state\n * @returns\n */\n initSeriesStyleState() {\n const seriesStyle = this._spec.seriesStyle;\n if (!seriesStyle || !seriesStyle.length) {\n return;\n }\n const groupBy = this._seriesField ?? DEFAULT_DATA_SERIES_FIELD;\n this.getMarksWithoutRoot().forEach(mark => {\n const filterMap: { [key: string]: true } = {};\n const attrMap: { [key: string]: true } = {};\n const markStyle: { [key: string]: { [key: string]: any } } = {};\n seriesStyle.forEach(item => {\n const style = item[mark.name]?.style;\n if (style) {\n filterMap[item.name] = true;\n markStyle[item.name] = markStyle[item.name] || {};\n Object.keys(style).forEach(key => {\n attrMap[key] = true;\n markStyle[item.name][key] = style[key];\n });\n }\n });\n mark.state.addStateInfo({\n stateValue: DEFAULT_SERIES_STYLE_NAME,\n level: -1,\n filter: (datum: Datum) => {\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return false;\n }\n return filterMap[datum[0][groupBy]] === true;\n }\n return filterMap[datum[groupBy]] === true;\n }\n });\n const style: Record any> = {};\n Object.keys(attrMap).forEach(key => {\n style[key] = (datum: Datum) => {\n let style;\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return undefined;\n }\n style = markStyle[datum[0][groupBy]]?.[key];\n }\n style = markStyle[datum[groupBy]]?.[key];\n if (isValid(style)) {\n return style;\n }\n return mark.getAttribute(key as any, datum);\n };\n });\n this.setMarkStyle(mark, style, DEFAULT_SERIES_STYLE_NAME, AttributeLevel.User_SeriesStyle);\n });\n }\n\n afterInitMark(): void {\n this.event.emit(ChartEvent.afterInitMark, { model: this });\n this.setSeriesField(this._spec.seriesField);\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n this.getMarks().forEach(m => {\n if (m.stateStyle?.normal?.lineWidth) {\n m.setAttribute('stroke', this.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n });\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(m => !m.name?.includes('seriesGroup'));\n }\n getMarksInType(type: string | string[]): IMark[] {\n return this._marks.getMarksInType(type);\n }\n getMarkInName(name: string): IMark | undefined {\n return this._marks.get(name);\n }\n getMarkInId(markId: number): IMark | undefined {\n return this.getMarks().find(m => m.id === markId);\n }\n /** mark end */\n\n /** event */\n protected initEvent() {\n this._data?.getDataView()?.target.addListener('change', this.viewDataUpdate.bind(this));\n this._viewDataStatistics?.target.addListener('change', this.viewDataStatisticsUpdate.bind(this));\n }\n\n protected _releaseEvent(): void {\n super._releaseEvent();\n this.getCompiler().removeInteraction(this.id);\n }\n\n /** event end */\n\n /** 初始化tooltip helper */\n protected initTooltip() {\n this._tooltipHelper = new BaseSeriesTooltipHelper(this);\n }\n\n _compareExtensionMarksSpec(\n newMarks: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[],\n prevMarks: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[],\n compareResult: IUpdateSpecResult\n ) {\n if (\n newMarks.length !== prevMarks.length ||\n prevMarks.some((prev, index) => {\n return (\n prev.type !== newMarks[index].type || prev.id !== newMarks[index].id || prev.name !== newMarks[index].name\n );\n })\n ) {\n compareResult.reMake = true;\n } else if (\n prevMarks.some((prev, index) => {\n return prev.visible !== newMarks[index].visible;\n })\n ) {\n compareResult.reCompile = true;\n }\n }\n\n _compareLabelSpec(newLabels: ILabelSpec[], prevLabels: ILabelSpec[], compareResult: IUpdateSpecResult) {\n if (\n newLabels.length !== prevLabels.length ||\n prevLabels.some((prev, index) => {\n return prev.labelLayout !== newLabels[index].labelLayout || prev.visible !== newLabels[index].visible;\n })\n ) {\n compareResult.reMake = true;\n } else if (\n !compareResult.reCompile &&\n prevLabels.some((prev, index) => {\n return !isEqual(prev, newLabels[index]);\n })\n ) {\n compareResult.reCompile = true;\n }\n }\n\n /** updateSpec */\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: Record) {\n const result = super._compareSpec(spec, prevSpec);\n\n const currentKeys = Object.keys(prevSpec || {}).sort();\n const nextKeys = Object.keys(spec || {}).sort();\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n\n const ignores: Record = {\n ...defaultSeriesIgnoreCheckKeys,\n ...defaultSeriesCompileCheckKeys,\n ...ignoreCheckKeys,\n extensionMark: true,\n label: true,\n totalLabel: true\n };\n\n this._compareExtensionMarksSpec(array((spec as any).extensionMark), array((prevSpec as any).extensionMark), result);\n // 比较label\n !result.reMake && this._compareLabelSpec(array((spec as any).label), array((prevSpec as any).label), result);\n // 比较totalLabel\n !result.reMake &&\n this._compareLabelSpec(array((spec as any).totalLabel), array((prevSpec as any).totalLabel), result);\n\n if (result.reMake) {\n return result;\n }\n\n // mark visible logic in compile\n if (\n !result.reCompile &&\n this._marks.getMarks().some(m => {\n (ignores as { [key: string]: true })[m.name] = true;\n return (prevSpec as any)[m.name]?.visible !== (spec as any)[m.name]?.visible;\n })\n ) {\n result.reCompile = true;\n }\n\n // check default compile keys\n if (\n !result.reCompile &&\n currentKeys.some((k: string) => {\n return defaultSeriesCompileCheckKeys[k] && !isEqual((spec as any)[k], (prevSpec as any)[k]);\n })\n ) {\n result.reCompile = true;\n }\n\n if (\n currentKeys.some((k: string) => {\n return !ignores[k] && !isEqual((spec as any)[k], (prevSpec as any)[k]);\n })\n ) {\n result.reMake = true;\n return result;\n }\n\n return result;\n }\n\n _updateSpecData() {\n if (this._rawData && this._spec.data && !(this._spec.data instanceof DataView)) {\n updateDataViewInData(this._rawData, this._spec.data, true);\n }\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n\n const marks = this.getMarksWithoutRoot();\n // FIXME: 合并 mark spec 的时机是否需要统一调整到 this.initMarkStyle() 中?\n marks.forEach(mark => {\n (this._spec as any)[mark.name] && this.initMarkStyleWithSpec(mark, (this._spec as any)[mark.name]);\n });\n this.initMarkStyle();\n marks.forEach(mark => {\n mark.updateStaticEncode();\n mark.updateLayoutState(true);\n });\n this._updateExtensionMarkSpec();\n this._updateSpecData();\n\n if (this._tooltipHelper) {\n this._tooltipHelper.updateTooltipSpec();\n }\n\n // update animation config\n const hasAnimation = isAnimationEnabledForSeries(this);\n if (hasAnimation) {\n this.initAnimation();\n }\n }\n\n // 首次布局完成后填充系列数据\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n this._data.updateData();\n }\n onRender(ctx: IModelRenderOption): void {\n return;\n }\n release(): void {\n super.release();\n this._viewDataMap.clear();\n // TODO: rawData transform clear;\n // this._dataSet=>// _rawData.tag = vchart\n // clear add transforms of rawData\n const transformIndex = this._rawData?.transformsArr?.findIndex(t => t.type === 'addVChartProperty');\n if (transformIndex >= 0) {\n this._rawData.transformsArr.splice(transformIndex, 1);\n }\n this._data?.release();\n this._dataSet =\n this._data =\n this._rawData =\n this._rawDataStatistics =\n this._spec =\n this._region =\n this._viewDataStatistics =\n this._viewStackData =\n null;\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width)) {\n this._layoutRect.width = width;\n }\n\n if (isValidNumber(height)) {\n this._layoutRect.height = height;\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return this.getRawDataStatisticsByField(this._seriesField)?.values ?? [];\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n }\n\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n [field]: key\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n\n getSeriesInfoInField(field: string) {\n return this._getSeriesInfo(field, this.getRawDataStatisticsByField(field)?.values ?? []);\n }\n\n getSeriesInfoList() {\n return this._getSeriesInfo(this._seriesField ?? DEFAULT_DATA_SERIES_FIELD, this.getSeriesKeys());\n }\n\n /** seriesField end */\n\n // get default color scale\n // 重复代码太多了,整合一下\n protected _getDefaultColorScale() {\n const colorDomain = this.getDefaultColorDomain();\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n protected _getDataScheme() {\n return getDataScheme(this.getColorScheme(), this.type as any);\n }\n\n /** 获取默认 color scale 的 domain */\n getDefaultColorDomain(): any[] {\n return this._seriesField ? this.getViewDataStatistics()?.latestData[this._seriesField]?.values : [];\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [];\n }\n\n // 用于 axisHelper 更新\n protected onMarkPositionUpdate(): void {\n this.onMarkTreePositionUpdate(this.getMarksWithoutRoot());\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n // do nothing\n }\n\n protected _createMark(\n markInfo: ISeriesMarkInfo,\n option: ISeriesMarkInitOption = {},\n config: ICompileMarkConfig = {}\n ) {\n const {\n key,\n groupKey,\n skipBeforeLayouted,\n themeSpec = {},\n markSpec,\n dataView,\n dataProductId,\n parent,\n isSeriesMark,\n depend,\n stateSort,\n noSeparateStyle = false\n } = option;\n const m = super._createMark(markInfo, {\n key: key ?? this._getDataIdKey(),\n seriesId: this.id,\n attributeContext: this._markAttributeContext,\n componentType: option.componentType,\n noSeparateStyle\n });\n\n if (isValid(m)) {\n const spec = this.getSpec() || ({} as T);\n this._marks.addMark(m, { name: markInfo.name });\n\n if (isSeriesMark) {\n this._seriesMark = m;\n }\n\n if (isNil(parent)) {\n this._rootMark?.addMark(m);\n } else if (parent !== false) {\n parent.addMark(m);\n }\n\n if (isNil(dataView)) {\n m.setDataView(this.getViewData(), this.getViewDataProductId());\n m.setSkipBeforeLayouted(true);\n } else if (dataView !== false) {\n m.setDataView(dataView, dataProductId);\n }\n\n if (isBoolean(skipBeforeLayouted)) {\n m.setSkipBeforeLayouted(skipBeforeLayouted);\n }\n\n if (isValid(depend)) {\n m.setDepend(...array(depend));\n }\n\n if (!isNil(groupKey)) {\n m.setGroupKey(groupKey);\n }\n\n if (stateSort) {\n m.setStateSortCallback(stateSort);\n }\n\n const markConfig: IMarkConfig = {\n ...config,\n morph: config.morph ?? false,\n support3d:\n is3DMark(markInfo.type as MarkTypeEnum) || (config.support3d ?? (spec.support3d || !!(spec as any).zField)),\n morphKey: spec.morph?.morphKey || `${this.getSpecIndex()}_${this.getMarks().length}`,\n morphElementKey: spec.morph?.morphElementKey ?? config.morphElementKey\n };\n\n m.setMarkConfig(markConfig);\n\n this.initMarkStyleWithSpec(m, mergeSpec({}, themeSpec, markSpec || spec[m.name]));\n }\n return m;\n }\n\n protected _getDataIdKey() {\n // 系列图元默认使用 rawData 初始生成的唯一数据 id 作为 key\n return super._getDataIdKey() ?? DEFAULT_DATA_KEY;\n }\n\n /**\n * 默认数据 id 生成逻辑。\n * 数据中的 维度A的值_维度B的值_***_维度C的值_seriesField的值_index\n * index作用是为了避免 id 重复\n */\n protected _getSeriesDataKey(datum: Datum) {\n let key = '';\n if (!datum) {\n return key;\n }\n\n const dimensionFields = this.getDimensionField();\n key = dimensionFields.map(field => datum[field]).join('_');\n\n const seriesField = this.getSeriesField();\n\n if (seriesField && !dimensionFields.includes(seriesField)) {\n key += `_${datum[seriesField]}`;\n }\n\n return key;\n }\n\n /**\n * data\n */\n addViewDataFilter(option: ITransformOptions) {\n (this._viewDataFilter ?? this.getViewData())?.transform(option, false);\n }\n\n reFilterViewData() {\n (this._viewDataFilter ?? this.getViewData())?.reRunAllTransform();\n }\n\n reTransformViewData() {\n this._data?.getDataView()?.reRunAllTransform();\n }\n\n fillData() {\n this.getRawData()?.reRunAllTransform();\n }\n\n compile() {\n this.compileData(); // 系列只需要编译数据,mark 将在 region 编译过程中编译\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getFieldAlias(field: string) {\n if (\n field === STACK_FIELD_END ||\n field === STACK_FIELD_END_PERCENT ||\n field === STACK_FIELD_START ||\n field === STACK_FIELD_START_PERCENT\n ) {\n field = this.getStackValueField();\n }\n return getFieldAlias(this.getRawData(), field) ?? field;\n }\n\n protected _getInvalidConnectType() {\n return this._invalidType === 'zero' ? 'zero' : this._invalidType === 'link' ? 'connect' : 'none';\n }\n\n protected _getInvalidDefined(datum: Datum) {\n const checkFields = this.getInvalidCheckFields();\n\n if (!checkFields.length) {\n return true;\n }\n\n return checkFields.every(field => {\n return couldBeValidNumber(datum[field]);\n });\n }\n\n protected _getRelatedComponentSpecInfo(specKey: string) {\n const specIndex = this.getSpecIndex();\n const relatedComponent = this._option\n .getSpecInfo()\n .component[specKey]?.filter(componentInfo => componentInfo.seriesIndexes.includes(specIndex));\n return relatedComponent ?? [];\n }\n\n protected _forEachStackGroup(callback: (node: ISeriesStackDataLeaf) => void, node?: ISeriesStackDataMeta) {\n node = node ?? this._viewStackData?.latestData;\n if (!node) {\n return;\n }\n\n if ((node as ISeriesStackDataLeaf).values?.length) {\n callback(node as ISeriesStackDataLeaf);\n } else if ((node as ISeriesStackDataNode).nodes) {\n Object.values((node as ISeriesStackDataNode).nodes).forEach(n => {\n this._forEachStackGroup(callback, n);\n });\n }\n }\n\n /** 判断 datum 是否在 viewData 中 */\n isDatumInViewData(datum: Datum) {\n if (!datum) {\n return false;\n }\n const viewDataList = this.getViewData().latestData;\n if (!viewDataList) {\n return false;\n }\n if (viewDataList.includes(datum)) {\n return true;\n }\n return viewDataList.some((viewDatum: Datum) => Object.keys(datum).every(key => datum[key] === viewDatum[key]));\n }\n\n getSeriesFieldValue(datum: Datum, seriesField?: string) {\n return datum[seriesField ?? this.getSeriesField() ?? DEFAULT_DATA_SERIES_FIELD];\n }\n}\n","import type { IAxisHelper as CartesianHelper } from '../../component/axis/cartesian/interface/common';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { Datum } from '../../typings';\nimport type { IOrdinalScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport type { ICartesianSeries } from '../interface';\n\nexport function isPolarAxisSeries(type: string) {\n return ([SeriesTypeEnum.rose, SeriesTypeEnum.radar, SeriesTypeEnum.circularProgress] as string[]).includes(type);\n}\n\nexport function sortDataInAxisHelper(axisHelper: CartesianHelper | IPolarAxisHelper, field: string, dataList: Datum[]) {\n const scale = axisHelper.getScale(0);\n const isRevert = 'isInverse' in axisHelper ? axisHelper.isInverse() : false;\n if (isContinuous(scale.type)) {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n return (datumA[field] - datumB[field]) * (isRevert ? -1 : 1);\n });\n } else {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n return (\n ((scale as IOrdinalScale).index(datumA[field]) - (scale as IOrdinalScale).index(datumB[field])) *\n (isRevert ? -1 : 1)\n );\n });\n }\n}\n\nexport function getGroupAnimationParams(series: ICartesianSeries) {\n // 分组数据的 dataIndex 应该与轴顺序一致,而非 data[DEFAULT_DATA_INDEX] 顺序\n const dataIndex = (datum: any) => {\n const indexField = series.direction === 'horizontal' ? series.fieldY[0] : series.fieldX[0];\n const indexValue = datum?.[indexField];\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n const index = (scale?.domain?.() ?? []).indexOf(indexValue);\n // 不应该出现xIndex === -1 || undefined的情况\n return index || 0;\n };\n const dataCount = () => {\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n return (scale?.domain?.() ?? []).length ?? 0;\n };\n return { dataIndex, dataCount };\n}\n","import type { ICartesianSeries } from '../interface';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPoint } from '../../typings/coordinate';\nimport type { IBaseScale } from '@visactor/vscale';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_END_OffsetSilhouette,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_START_OffsetSilhouette\n} from '../../constant/data';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { array, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport type { ICartesianSeriesSpec } from './interface';\nimport { sortDataInAxisHelper } from '../util/utils';\nimport type { IAxisLocationCfg } from '../../component/axis';\nimport { ComponentTypeEnum } from '../../component/interface/type';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { StatisticOperations } from '../../data/transforms/interface';\n\nexport abstract class CartesianSeries\n extends BaseSeries\n implements ICartesianSeries\n{\n readonly coordinate: 'cartesian' = 'cartesian';\n protected _bandPosition = 0.5;\n protected _scaleConfig: IAxisLocationCfg = {\n bandPosition: this._bandPosition\n };\n protected _buildScaleConfig() {\n this._scaleConfig = {\n bandPosition: this._bandPosition\n };\n }\n\n protected _fieldX!: string[];\n get fieldX() {\n return this._fieldX;\n }\n setFieldX(f: string | string[]) {\n this._fieldX = array(f);\n }\n\n protected _fieldY!: string[];\n get fieldY() {\n return this._fieldY;\n }\n setFieldY(f: string | string[]) {\n this._fieldY = array(f);\n }\n\n protected _fieldZ?: string[];\n get fieldZ(): string[] | undefined {\n return this._fieldZ;\n }\n setFieldZ(f?: string | string[]) {\n this._fieldZ = f && array(f);\n }\n\n protected _fieldX2!: string;\n get fieldX2() {\n return this._fieldX2;\n }\n setFieldX2(f: string) {\n this._fieldX2 = f;\n }\n\n protected _fieldY2!: string;\n get fieldY2() {\n return this._fieldY2;\n }\n setFieldY2(f: string) {\n this._fieldY2 = f;\n }\n\n protected _specXField: string[];\n protected _specYField: string[];\n\n protected _direction: DirectionType = Direction.vertical;\n get direction() {\n return this._direction;\n }\n\n protected _scaleX!: IBaseScale;\n get scaleX() {\n return this._scaleX;\n }\n setScaleX(s: IBaseScale) {\n this._scaleX = s;\n }\n\n protected _scaleY!: IBaseScale;\n get scaleY() {\n return this._scaleY;\n }\n setScaleY(s: IBaseScale) {\n this._scaleY = s;\n }\n\n protected _scaleZ?: IBaseScale;\n get scaleZ() {\n return this._scaleZ;\n }\n setScaleZ(s: IBaseScale) {\n this._scaleZ = s;\n }\n\n _xAxisHelper!: IAxisHelper;\n getXAxisHelper() {\n return this._xAxisHelper;\n }\n setXAxisHelper(h: IAxisHelper) {\n this._xAxisHelper = h;\n this.onXAxisHelperUpdate();\n }\n\n _yAxisHelper!: IAxisHelper;\n getYAxisHelper() {\n return this._yAxisHelper;\n }\n setYAxisHelper(h: IAxisHelper) {\n this._yAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n _zAxisHelper?: IAxisHelper;\n getZAxisHelper() {\n return this._zAxisHelper;\n }\n setZAxisHelper(h: IAxisHelper) {\n this._zAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: StatisticOperations }[] = [];\n const axes = [\n {\n axisHelper: this.getXAxisHelper(),\n fields: this._fieldX2 ? [...this._fieldX, this._fieldX2] : this._fieldX\n },\n {\n axisHelper: this.getYAxisHelper(),\n fields: this._fieldY2 ? [...this._fieldY, this._fieldY2] : this._fieldY\n },\n {\n axisHelper: this.getZAxisHelper(),\n fields: this._fieldZ\n }\n ];\n\n axes.forEach(axisOption => {\n if (axisOption.axisHelper && axisOption.axisHelper.getScale && axisOption.fields) {\n axisOption.fields.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'>; filter?: (fv: any) => boolean } = {\n key: f,\n operations: []\n };\n const scale = axisOption.axisHelper.getScale(0);\n if (isContinuous(scale.type)) {\n result.operations = ['max', 'min'];\n\n if (scale.type === 'log') {\n result.filter = (fv: any) => fv > 0;\n }\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n });\n\n if (this.getStack()) {\n fields.push({\n key: this.getStackValueField(),\n operations: ['allValid']\n });\n }\n return fields;\n }\n\n getGroupFields() {\n return this.direction === 'vertical' ? this._fieldX : this._fieldY;\n }\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getStackValue() {\n const axisId = (\n this.direction === Direction.horizontal ? this.getXAxisHelper() : this.getYAxisHelper()\n )?.getAxisId();\n return this._spec.stackValue ?? `${PREFIX}_series_${this.type}_${axisId}`;\n }\n\n getStackValueField() {\n // TODO: hack\n if (this.direction === Direction.horizontal) {\n return array(this._spec.xField)[0];\n }\n return array(this._spec.yField)[0];\n }\n\n setValueFieldToStack(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END);\n this.setFieldX2(STACK_FIELD_START);\n } else {\n this.setFieldY(STACK_FIELD_END);\n this.setFieldY2(STACK_FIELD_START);\n }\n }\n\n setValueFieldToPercent(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END_PERCENT);\n this.setFieldX2(STACK_FIELD_START_PERCENT);\n } else {\n this.setFieldY(STACK_FIELD_END_PERCENT);\n this.setFieldY2(STACK_FIELD_START_PERCENT);\n }\n }\n\n setValueFieldToStackOffsetSilhouette(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldX2(STACK_FIELD_START_OffsetSilhouette);\n } else {\n this.setFieldY(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldY2(STACK_FIELD_START_OffsetSilhouette);\n }\n }\n\n onXAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onYAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onZAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldX(this._spec.xField);\n this.setFieldY(this._spec.yField);\n this.setFieldZ(this._spec.zField);\n this._specXField = array(this._spec.xField);\n this._specYField = array(this._spec.yField);\n if (isValid(this._spec.direction)) {\n this._direction = this._spec.direction;\n }\n\n this.setFieldX2(this._spec?.x2Field);\n this.setFieldY2(this._spec?.y2Field);\n\n if (this.getStack()) {\n this.setValueFieldToStack();\n }\n if (this.getPercent()) {\n this.setValueFieldToPercent();\n }\n if (this.getStackOffsetSilhouette()) {\n this.setValueFieldToStackOffsetSilhouette();\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint | null {\n if (!datum) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return {\n x: this.dataToPositionX(datum),\n y: this.dataToPositionY(datum)\n } as IPoint;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToX = this.valueToPositionX.bind(this);\n this._markAttributeContext.valueToY = this.valueToPositionY.bind(this);\n this._markAttributeContext.xBandwidth = (depth: number = 0) => this.getXAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.yBandwidth = (depth: number = 0) => this.getYAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n }\n\n valueToPosition(xValue: StringOrNumber | StringOrNumber[], yValue: StringOrNumber | StringOrNumber[]) {\n return {\n x: this.valueToPositionX(xValue),\n y: this.valueToPositionY(yValue)\n };\n }\n\n protected _axisPosition(helper: IAxisHelper, value: StringOrNumber | StringOrNumber[], datum?: any) {\n this._scaleConfig.datum = datum;\n if (helper.isContinuous) {\n return helper.valueToPosition(value, this._scaleConfig);\n }\n return helper.dataToPosition(array(value), this._scaleConfig);\n }\n\n valueToPositionX(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._xAxisHelper, value, datum);\n }\n valueToPositionY(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._yAxisHelper, value, datum);\n }\n\n protected _dataToPosition(\n datum: Datum,\n axisHelper: IAxisHelper,\n field: string[],\n scaleDepth: number | undefined,\n getEncoder: () => (datum: Datum) => number,\n setEncoder: (encoder: (datum: Datum) => number) => void\n ): number {\n const encoder = getEncoder();\n if (encoder) {\n return encoder(datum);\n }\n\n if (!axisHelper) {\n setEncoder((datum: Datum) => Number.NaN);\n return Number.NaN;\n }\n const fields = (axisHelper.getFields ? axisHelper.getFields() : field).slice(0, scaleDepth);\n if (!fields || fields.length === 0) {\n setEncoder((datum: Datum) => null);\n return null;\n }\n\n if (axisHelper.isContinuous) {\n setEncoder((datum: Datum) => {\n this._scaleConfig.datum = datum;\n return axisHelper.valueToPosition(this.getDatumPositionValue(datum, fields[0]), this._scaleConfig);\n });\n } else {\n setEncoder((datum: Datum) => {\n this._scaleConfig.datum = datum;\n return axisHelper.dataToPosition(array(this.getDatumPositionValues(datum, fields)), this._scaleConfig);\n });\n }\n\n return getEncoder()(datum);\n }\n\n protected _positionXEncoder?: (datum: Datum) => number;\n protected _getPositionXEncoder = () => this._positionXEncoder?.bind(this);\n protected _setPositionXEncoder = (encoder: (datum: Datum) => number) => {\n this._positionXEncoder = encoder.bind(this);\n };\n\n dataToPositionX(datum: Datum): number {\n return this._dataToPosition(\n datum,\n this._xAxisHelper,\n this.fieldX,\n undefined,\n this._getPositionXEncoder,\n this._setPositionXEncoder\n );\n }\n\n protected _positionYEncoder?: (datum: Datum) => number;\n protected _getPositionYEncoder = () => this._positionYEncoder?.bind(this);\n protected _setPositionYEncoder = (encoder: (datum: Datum) => number) => {\n this._positionYEncoder = encoder.bind(this);\n };\n\n dataToPositionY(datum: Datum): number {\n return this._dataToPosition(\n datum,\n this._yAxisHelper,\n this.fieldY,\n undefined,\n this._getPositionYEncoder,\n this._setPositionYEncoder\n );\n }\n\n dataToPositionZ(datum: Datum): number {\n if (!this._zAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._zAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fieldZ), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionX1(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n return this._fieldX2 && this._fieldX2 in datum\n ? this.valueToPositionX(this.getDatumPositionValues(datum, this._fieldX2))\n : this.valueToPositionX(0);\n }\n\n dataToPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n return this._fieldY2 && this._fieldY2 in datum\n ? this.valueToPositionY(this.getDatumPositionValues(datum, this._fieldY2))\n : this.valueToPositionY(0);\n }\n\n positionToData(p: IPoint): IPoint | null {\n if (!p) {\n return null;\n }\n return {\n x: this.positionToDataX(p.x),\n y: this.positionToDataY(p.y)\n };\n }\n\n positionToDataX(xPos: number): any | null {\n if (!this._scaleX) {\n return null;\n }\n return this._scaleX.invert(xPos);\n }\n\n positionToDataY(yPos: number): any | null {\n if (!this._scaleY) {\n return null;\n }\n return this._scaleY.invert(yPos);\n }\n\n getRegionRectLeft(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[0];\n }\n\n getRegionRectRight(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[1];\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this.setFieldX(this._fieldX);\n this.setFieldY(this._fieldY);\n this._buildScaleConfig();\n }\n\n getDimensionField(): string[] {\n if (this._direction === Direction.horizontal) {\n return this._specYField;\n }\n return this._specXField;\n }\n\n getDimensionContinuousField(): string[] {\n if (this._direction === Direction.horizontal) {\n return [this.fieldY[0], this.fieldY2];\n }\n return [this.fieldX[0], this.fieldX2];\n }\n\n getMeasureField(): string[] {\n if (this._direction === Direction.horizontal) {\n return this._specXField;\n }\n return this._specYField;\n }\n\n protected initEvent() {\n super.initEvent();\n // 通过轴事件来进行排序。轴的domain数据变化在系列的统计数据完成后\n if (this.sortDataByAxis) {\n this.event.on(\n ChartEvent.scaleDomainUpdate,\n {\n filter: param =>\n param.model.id ===\n (this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper)?.getAxisId()\n },\n () => {\n // 只能排序,不能修改数据,此时已经在数据流的统计流程之后\n this._sortDataInAxisDomain();\n }\n );\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(\n this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper,\n this._direction === Direction.horizontal ? this._fieldY[0] : this._fieldX[0],\n this.getViewData().latestData\n );\n this._data?.updateData(true);\n }\n }\n\n protected getInvalidCheckFields() {\n const fields: string[] = [];\n\n if (\n this._xAxisHelper &&\n this._xAxisHelper.isContinuous &&\n this._xAxisHelper.getAxisType() !== ComponentTypeEnum.geoCoordinate\n ) {\n const xFields = this._xAxisHelper.getFields ? this._xAxisHelper.getFields() : this._specXField;\n xFields.forEach(f => {\n fields.push(f);\n });\n }\n\n if (\n this._yAxisHelper &&\n this._yAxisHelper.isContinuous &&\n this._yAxisHelper.getAxisType() !== ComponentTypeEnum.geoCoordinate\n ) {\n const yFields = this._yAxisHelper.getFields ? this._yAxisHelper.getFields() : this._specYField;\n\n yFields.forEach(f => {\n fields.push(f);\n });\n }\n return fields;\n }\n\n reInit(spec: T) {\n if (this._positionXEncoder) {\n this._positionXEncoder = null;\n }\n if (this._positionYEncoder) {\n this._positionYEncoder = null;\n }\n\n super.reInit(spec);\n }\n}\n","export type InterpolateType =\n | 'basis'\n | 'linear'\n | 'monotone'\n | 'monotoneX'\n | 'monotoneY'\n | 'step'\n | 'stepAfter'\n | 'stepBefore'\n | 'linearClosed'\n | 'catmullRom'\n | 'catmullRomClosed';\n\nexport const DEFAULT_SMOOTH_INTERPOLATE = 'monotone';\nexport const DEFAULT_LINEAR_INTERPOLATE = 'linear';\n","// somehow? 使用 vrender 的声明文件会 build 报错\n// import { LineJoinType, LineCapType } from '@visactor/vrender-core';\nexport type ILineStrokeCap = 'butt' | 'round' | 'square';\nexport type ILineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n\nexport const DEFAULT_CLOSE_STROKE_JOIN = 'bevel';\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const lineLikeSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.point]: { name: SeriesMarkNameEnum.point, type: MarkTypeEnum.symbol },\n [SeriesMarkNameEnum.line]: { name: SeriesMarkNameEnum.line, type: MarkTypeEnum.line }\n};\n","import { PREFIX } from '../../constant/base';\nimport type { ISeriesOption } from '../interface/common';\nimport { DataView } from '@visactor/vdataset';\nimport { ChartEvent } from '../../constant/event';\nimport type { ISeries } from '../interface/series';\nimport { AttributeLevel } from '../../constant/attribute';\n\nimport type {\n ICompileMarkConfig,\n IMark,\n IMarkProgressiveConfig,\n ILabelMark,\n ILineMark,\n ISymbolMark,\n ITextMark\n} from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { DirectionType, IInvalidType, InterpolateType, Maybe, Datum, ILayoutRect } from '../../typings';\nimport { DEFAULT_LINEAR_INTERPOLATE, DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_CLOSE_STROKE_JOIN } from '../../typings/line-stroke';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo, ISeriesMarkInitOption, ISeriesTooltipHelper } from '../interface';\nimport { shouldMarkDoMorph } from '../../animation/utils';\nimport type { DimensionEventParams } from '../../event/events/dimension';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { EventCallback, EventParams } from '../../event/interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { lineLikeSeriesMark } from './constant';\nimport type { IRegion } from '../../region/interface';\nimport type { SeriesData } from '../base/series-data';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ILineLikeSeriesTheme } from './interface';\n\nexport interface LineLikeSeriesMixin extends ISeries {\n _spec: any;\n _option: ISeriesOption;\n _seriesField: string;\n _theme: Maybe;\n _tooltipHelper: ISeriesTooltipHelper;\n _invalidType: IInvalidType;\n _region: IRegion;\n _direction: DirectionType;\n _data: SeriesData;\n\n _lineMark: ILineMark;\n _symbolMark: ISymbolMark;\n _symbolActiveMark: ISymbolMark;\n _labelMark: ITextMark;\n _fieldX?: string[];\n _fieldY?: string[];\n _fieldZ?: string[];\n\n _createMark: (markInfo: ISeriesMarkInfo, option?: ISeriesMarkInitOption, config?: ICompileMarkConfig) => IMark;\n _getInvalidDefined: (datum: Datum) => boolean;\n _getInvalidConnectType: () => IInvalidType;\n\n getLayoutRect: () => ILayoutRect;\n}\n\nexport class LineLikeSeriesMixin {\n addSamplingCompile(): void {\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.horizontal ? height : width,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.horizontal ? fieldsX[0] : fieldsY[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n addOverlapCompile(): void {\n if (this._spec.markOverlap) {\n const overlapTrans = [];\n overlapTrans.push({\n type: 'markoverlap',\n direction: this._direction === Direction.horizontal && this.coordinate === 'cartesian' ? 2 : 1,\n delta: this._spec.pointDis,\n deltaMul: this._spec.pointDisMul,\n groupBy: this._seriesField\n });\n this._symbolMark?.getProduct().transform(overlapTrans);\n }\n }\n\n reCompileSampling(): void {\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n initLineMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n this._lineMark = this._createMark(\n lineLikeSeriesMark.line,\n {\n groupKey: this._seriesField,\n isSeriesMark: isSeriesMark ?? true,\n stateSort: this._spec.line?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.line?.customShape,\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ILineMark;\n return this._lineMark;\n }\n\n initLineMarkStyle(direction?: DirectionType, areaCurveType?: InterpolateType) {\n const lineMark = this._lineMark;\n if (lineMark) {\n this.setMarkStyle(\n lineMark,\n {\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n lineMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(lineMark, 'defined');\n });\n if (this.coordinate === 'polar') {\n // 极坐标系下需要关闭\n this.setMarkStyle(\n lineMark,\n {\n lineJoin: DEFAULT_CLOSE_STROKE_JOIN,\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const userCurveType = areaCurveType ?? this.getSpec().line?.style?.curveType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? direction === Direction.horizontal\n ? 'monotoneY'\n : 'monotoneX'\n : userCurveType;\n\n this.setMarkStyle(\n lineMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n\n this.setMarkStyle(\n lineMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n return lineMark;\n }\n\n protected _getEventElement(params: DimensionEventParams, reverse: boolean = false): Datum[] {\n // items 修改遍历方法从 mark\n let data: Datum[] = [];\n params.dimensionInfo.some(df => {\n df.data.some(dd => {\n if (dd.series === this) {\n data = dd.datum;\n return true;\n }\n return false;\n });\n return !data.length;\n });\n return data;\n }\n\n protected _dimensionTrigger(params: DimensionEventParams) {\n const elements = this._getEventElement(params);\n\n switch (params.action) {\n case 'enter':\n this._symbolActiveMark.getDataView().parse(elements);\n this._symbolActiveMark.getData().updateData(false);\n break;\n case 'leave':\n this._symbolActiveMark.getDataView().parse([]);\n this._symbolActiveMark.getData().updateData(false);\n case 'click':\n case 'move':\n default:\n break;\n }\n }\n\n initSymbolMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n const pointSpec = this._spec.point || {};\n\n if (pointSpec.visible !== false) {\n this._symbolMark = this._createMark(\n lineLikeSeriesMark.point,\n {\n groupKey: this._seriesField,\n isSeriesMark: !!isSeriesMark,\n stateSort: pointSpec.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: pointSpec.customShape,\n morph: shouldMarkDoMorph(this._spec, lineLikeSeriesMark.point.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ISymbolMark;\n }\n\n if (this._spec.activePoint === true) {\n const activeData = new DataView(this._option.dataSet, { name: `${PREFIX}_series_${this.id}_active_point` });\n activeData.parse([]);\n this._symbolActiveMark = this._createMark(\n { name: `active_point_${this.id}`, type: MarkTypeEnum.symbol },\n {\n groupKey: this._seriesField,\n isSeriesMark: false,\n dataView: activeData,\n parent: this._region.getInteractionMark(),\n stateSort: pointSpec.stateSort\n },\n {\n setCustomizedShape: pointSpec.customShape,\n morph: false\n }\n ) as ISymbolMark;\n this._symbolActiveMark.setVisible(false);\n }\n\n return this._symbolMark;\n }\n\n initSymbolMarkStyle() {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n this._initSymbolActiveMarkAlone();\n return symbolMark;\n }\n // 设置基础样式\n this._initSymbolMark(symbolMark);\n\n // setStyle to active point\n if (this._symbolActiveMark && this._symbolMark.stateStyle.dimension_hover) {\n // active point will show\n this._symbolActiveMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n for (const state in this._symbolMark.stateStyle) {\n this._symbolActiveMark.stateStyle[state] = {};\n for (const key in this._symbolMark.stateStyle[state]) {\n // symbolActiveMark 的 visible 具有额外逻辑,不要使用原始 symbol 的 visible\n if (key === 'visible') {\n continue;\n }\n this._symbolActiveMark.stateStyle[state][key] = {\n style: null,\n level: AttributeLevel.Series,\n referer: symbolMark\n };\n }\n }\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n\n return symbolMark;\n }\n\n private _initSymbolMark(symbolMark: ISymbolMark) {\n if (!symbolMark) {\n return;\n }\n this.setMarkStyle(\n symbolMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n symbolMark,\n {\n x: (datum: Datum) => {\n // 对于symbol而言,如果undefined 的元素还进行scale机会,Null/undefined 会被当成0,导致交互误显示的问题\n return this._invalidType !== 'zero' && !this._getInvalidDefined(datum)\n ? Number.NaN\n : this.dataToPositionX(datum);\n },\n y: (datum: Datum) => {\n return this._invalidType !== 'zero' && !this._getInvalidDefined(datum)\n ? Number.NaN\n : this.dataToPositionY(datum);\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n private _initSymbolActiveMarkAlone() {\n const symbolMark = this._symbolActiveMark;\n if (!symbolMark) {\n return;\n }\n this._initSymbolMark(symbolMark);\n\n // 这里应该不能讲trigger-mark改为activeMark,activeMark数据会变,并且目前不支持selected等操作改变它的数据\n // this._trigger.registerMark(symbolMark);\n\n // setStyle to active point\n if (symbolMark && this._spec[lineLikeSeriesMark.point.name]?.state?.dimension_hover) {\n // active point will show\n symbolMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n this.initMarkStyleWithSpec(\n symbolMark,\n mergeSpec({}, this._spec[lineLikeSeriesMark.point.name], { visible: true })\n );\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n if (labelMark.getTarget()?.type !== 'symbol') {\n labelMark.setRule('line-data');\n }\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(labelMark, 'visible');\n });\n }\n\n initLineLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getSeriesField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n encodeDefined(mark: IMark, attr: string) {\n if (!mark) {\n return;\n }\n const allValid = this._isFieldAllValid();\n if (this._invalidType === 'zero' || allValid) {\n if (mark.stateStyle.normal?.[attr]?.style === true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: true }, 'normal', AttributeLevel.Series);\n } else {\n if (mark.stateStyle.normal?.[attr]?.style !== true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: this._getInvalidDefined.bind(this) }, 'normal', AttributeLevel.Series);\n }\n // if has produce, reCompile encode to set attribute to product\n if (mark.getProduct()) {\n mark.compileEncode();\n }\n }\n\n protected _isFieldAllValid() {\n const viewStatistics = this.getViewDataStatistics();\n const field = this.getStackValueField();\n if (viewStatistics && viewStatistics.latestData && field) {\n return viewStatistics.latestData[field] && viewStatistics.latestData[field].allValid;\n }\n return false;\n }\n}\n","import { isValidScaleType } from '@visactor/vscale';\nimport type { StateValueType } from '../../compile/mark';\nimport type { ConvertToMarkStyleSpec, ILineLikeMarkSpec } from '../../typings/visual';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { BaseMark } from './base-mark';\nimport type { IMarkStyle } from '../interface';\n\nexport abstract class BaseLineMark extends BaseMark {\n protected abstract _getIgnoreAttributes(): string[];\n\n /**\n * @override\n * 之所以覆写是因为 vgrammar 侧默认都会处理 lineSegments,非常耗性能,所以需要 VChart 给一个标志位用于是否执行。\n * 由外部series调用,设置markStyle的接口。\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial> | Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const ignoreAttributes = this._getIgnoreAttributes();\n const segmentAttributes = [\n 'strokeWidth',\n 'lineWidth',\n 'lineDash',\n 'strokeDash',\n 'lineJoin',\n 'stroke',\n 'strokeOpacity',\n 'opacity',\n 'fill',\n 'fillOpacity',\n 'texture',\n 'texturePadding',\n 'textureSize',\n 'textureColor'\n ];\n const isUserLevel = this.isUserLevel(level);\n let enableSegments = false;\n Object.keys(style).forEach(attr => {\n const attrStyle = style[attr];\n if (isNil(attrStyle) || ignoreAttributes.includes(attr)) {\n return;\n }\n if (\n isUserLevel &&\n segmentAttributes.includes(attr) &&\n (isValidScaleType(attrStyle?.type) || attrStyle?.scale || isFunction(attrStyle))\n ) {\n enableSegments = true;\n }\n\n const styleConverter = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel, stateStyle);\n\n this.setAttribute(attr as any, styleConverter, state, level, stateStyle);\n });\n if (enableSegments) {\n this.setMarkConfig({\n enableSegments: true\n });\n }\n }\n}\n","import { Factory } from './../core/factory';\nimport { SeriesTypeEnum } from '../series/interface/type';\nimport type { ILineMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { ILineMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLineGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport class LineMark extends BaseLineMark implements ILineMark {\n static readonly type = MarkTypeEnum.line;\n readonly type = LineMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 1\n };\n return defaultStyle;\n }\n\n /**\n * TODO: SeriesTypeEnum 移到最外层\n * @override 线不支持填充\n * @returns\n */\n protected _getIgnoreAttributes(): string[] {\n if (this.model?.type === SeriesTypeEnum.radar && this.model?.coordinate === 'polar') {\n return [];\n }\n return ['fill', 'fillOpacity'];\n }\n}\n\nexport const registerLineMark = () => {\n Factory.registerMark(LineMark.type, LineMark);\n registerLineGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import { Factory } from './../core/factory';\nimport type { ISymbolMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, ISymbolMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerSymbolGraphic } from '@visactor/vgrammar-core';\n\nexport class BaseSymbolMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n size: 1,\n symbolType: 'circle',\n fill: undefined,\n lineWidth: 0\n };\n return defaultStyle as IMarkStyle;\n }\n}\n\nexport class SymbolMark extends BaseSymbolMark implements ISymbolMark {\n static readonly type = MarkTypeEnum.symbol;\n readonly type = SymbolMark.type;\n}\n\nexport const registerSymbolMark = () => {\n Factory.registerMark(SymbolMark.type, SymbolMark);\n registerSymbolGraphic();\n};\n","import type { FilterTransformOption } from '../../types';\n\nexport const transform = (options: FilterTransformOption, data: any[], parameters?: any) => {\n return data.filter(entry => {\n return options.callback(entry, parameters);\n });\n};\n","import { isNil } from '@visactor/vutils';\nimport type { MapTransformOption } from '../../types';\n\nexport const transform = (options: MapTransformOption, upstreamData: any[], params?: any) => {\n const func = options.callback;\n const as = options.as;\n\n if (!options.all) {\n upstreamData.forEach(entry => {\n const data = func(entry, params);\n\n if (!isNil(as)) {\n if (isNil(entry)) {\n return;\n }\n entry[as] = data;\n }\n\n return data;\n });\n\n return upstreamData;\n }\n const data = func(upstreamData, params);\n\n if (isNil(as) || isNil(upstreamData)) {\n return data;\n }\n\n (upstreamData as any)[as] = data;\n\n return upstreamData;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-transforms/src/util/util.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil, isString } from '@visactor/vutils';\nimport type { FieldGetterFunction } from '@visactor/vgrammar-util';\nimport { accessorName } from '@visactor/vgrammar-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]) {\n if (!fields) {\n return null;\n }\n return fields.map((f, i) => {\n return as[i] ?? (isString(f) ? f : accessorName(f));\n });\n}\n\nexport function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction) {\n // partition data points into groups\n if (isNil(groupBy)) {\n return [data.map(field)];\n }\n\n const groups: any[] = [];\n const map: Record = {};\n data.forEach((entry: any) => {\n const groupKey = groupBy.map((groupFunc: (arg: any) => any) => groupFunc(entry)).toString();\n\n if (!map[groupKey]) {\n const groupItem: any[] = [];\n (groupItem as any).dims = groupKey;\n groups.push(groupItem);\n map[groupKey] = groupItem;\n } else {\n map[groupKey].push(field(entry));\n }\n });\n\n return groups;\n}\n\nexport function sum(arr: any[]) {\n return arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n}\n\nexport function average(arr: any[]) {\n if (arr.length === 0) {\n return 0;\n }\n const total = sum(arr);\n return total / arr.length;\n}\n","import { maxInArray, minInArray } from '@visactor/vutils';\nimport type { SampleTransformOptions } from '../../types';\nimport { average, sum } from '../util/util';\n\nconst samplerMap = {\n min: minInArray,\n max: maxInArray,\n average: average,\n sum: sum\n};\n\nfunction lttb(size: number, array: any[], isGroup: boolean, yfield: string) {\n const frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n\n let currentIndex = 0;\n let sampledIndex = 0;\n let maxArea;\n let area;\n let nextIndex;\n\n // First frame use the first data.\n newIndices[sampledIndex++] = currentIndex;\n\n for (let i = 1; i < len - 1; i += frameSize) {\n const nextFrameStart = Math.min(i + frameSize, len - 1);\n const nextFrameEnd = Math.min(i + frameSize * 2, len);\n\n const avgX = (nextFrameEnd + nextFrameStart) / 2;\n let avgY = 0;\n\n for (let idx = nextFrameStart; idx < nextFrameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(value)) {\n continue;\n }\n avgY += value;\n }\n avgY /= nextFrameEnd - nextFrameStart;\n\n const frameStart = i;\n const frameEnd = Math.min(i + frameSize, len);\n\n const pointAX = i - 1;\n const pointAY = array[currentIndex][yfield];\n\n maxArea = -1;\n\n nextIndex = frameStart;\n // Find a point from current frame that construct a triangel with largest area with previous selected point\n // And the average of next frame.\n for (let idx = frameStart; idx < frameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(yfield)) {\n continue;\n }\n // Calculate triangle area over three buckets\n area = Math.abs((pointAX - avgX) * (value - pointAY) - (pointAX - idx) * (avgY - pointAY));\n if (area > maxArea) {\n maxArea = area;\n nextIndex = idx; // Next a is this b\n }\n }\n\n newIndices[sampledIndex++] = nextIndex;\n\n currentIndex = nextIndex; // This a is the next a (chosen b)\n }\n\n // First frame use the last data.\n if (newIndices[sampledIndex - 1] !== len - 1) {\n newIndices[sampledIndex++] = len - 1;\n }\n\n // output newly added tuples\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sample(size: number, array: any[], isGroup: boolean, mode: 'min' | 'max' | 'average' | 'sum', yfield: string) {\n let frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n let sampledIndex = 0;\n let frameValues = [];\n\n newIndices.push(sampledIndex);\n array[sampledIndex][yfield] = array[sampledIndex][yfield];\n\n for (let i = 1; i < len - 1; i += frameSize) {\n if (frameSize > len - i) {\n frameSize = len - i;\n frameValues.length = frameSize;\n }\n frameValues = [];\n for (let k = 0; k < frameSize; k++) {\n frameValues.push(array[i + k][yfield]);\n }\n const value = samplerMap[mode](frameValues);\n sampledIndex = Math.min(Math.round(i + frameValues.length / 2) || 0, len - 1);\n array[sampledIndex][yfield] = value;\n newIndices.push(sampledIndex);\n }\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sampleMin(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'min', yfield);\n}\n\nfunction sampleMax(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'max', yfield);\n}\n\nfunction sampleAverage(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'average', yfield);\n}\n\nfunction sampleSum(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'sum', yfield);\n}\n\n/**\n * Samples tuples passing through this operator.\n * mode: 'lttb' - Uses lttb sampling to maintain a trend-maintained sample.\n * mode: 'min' | 'max' | 'average' | 'sum' - Uses aggregation methods to location sample points.\n * @constructor\n * @param {object} options - The parameters for this operator.\n * @param {number} [options.size=1000] - The maximum number of samples.\n * @param {string} [options.yfield] - The yfield string of data.\n * @param {string} [options.groupBy] - The groupBy string of data.\n */\n\nexport const transform = (options: SampleTransformOptions, upstreamData: any[]) => {\n let size = options.size;\n const factor = options.factor || 1;\n\n if (Array.isArray(size)) {\n size = Math.floor(size[1] - size[0]);\n }\n\n size *= factor;\n\n // size<=0的特殊情况不采样,返回空\n if (size <= 0) {\n return [];\n }\n\n // 数据 {\n const group = groups[groupName];\n if (group.length <= size) {\n const indices = group.map((datum: any) => {\n return datum.i;\n });\n rawIndice = rawIndice.concat(indices);\n } else {\n const indices = sampler(size, group, true, yfield);\n rawIndice = rawIndice.concat(indices);\n group.forEach((datum: any) => (upstreamData[datum.i][yfield] = datum[yfield]));\n }\n });\n\n // 采样后,按照原始顺序排序\n rawIndice.sort((a, b) => a - b);\n\n return rawIndice.map((index: number) => upstreamData[index]);\n }\n return sampler(size, upstreamData, false, yfield).map(index => upstreamData[index]);\n }\n\n return [];\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\nimport { MARK_OVERLAP_HIDE_KEY } from '../../graph/constants';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(MARK_OVERLAP_HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n","import { transform as binTransform } from './data/bin';\nimport { transform as contourTransform } from './data/contour';\nimport { transform as sortTransform } from './data/sort';\nimport { transform as filterTransform } from './data/filter';\nimport { transform as mapTransform } from './data/map';\nimport { transform as kdeTransform } from './data/kde';\nimport { transform as joinTransform } from './data/join';\nimport { transform as pickTransform } from './data/pick';\nimport { transform as rangeTransform } from './data/range';\nimport { transform as stackTransform } from './data/stack';\nimport { transform as foldTransform } from './data/fold';\nimport { transform as unfoldTransform } from './data/unfold';\n\nimport { transform as funnelTransform } from './data/funnel';\nimport { transform as pieTransform } from './data/pie';\nimport { transform as circularRelationTransform } from './data/circular-relation';\n\nimport { transform as sampleTransform } from './data/sampling';\nimport { transform as markoverlapTransform } from './mark/mark-overlap';\n\nimport { transform as identifierTransform } from './view/identifier';\n\nimport { transform as dodgeTransform } from './mark/dodge';\nimport { transform as jitterTransform, jitterX as jitterXTransform, jitterY as jitterYTransform } from './mark/jitter';\nimport { symmetry as symmetryTransform } from './mark/symmetry';\nimport { Factory } from '../core/factory';\nimport type { ITransform } from '../types';\n\nexport const registerBinTransform = () => {\n Factory.registerTransform(\n 'bin',\n { transform: binTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerContourTransform = () => {\n Factory.registerTransform(\n 'contour',\n { transform: contourTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSortTransform = () => {\n Factory.registerTransform(\n 'sort',\n { transform: sortTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFilterTransform = () => {\n Factory.registerTransform(\n 'filter',\n { transform: filterTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerJoinTransform = () => {\n Factory.registerTransform(\n 'join',\n { transform: joinTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerKdeTransform = () => {\n Factory.registerTransform(\n 'kde',\n { transform: kdeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerMapTransform = () => {\n Factory.registerTransform(\n 'map',\n { transform: mapTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPickTransform = () => {\n Factory.registerTransform(\n 'pick',\n { transform: pickTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerRangeTransform = () => {\n Factory.registerTransform(\n 'range',\n { transform: rangeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerStackTransform = () => {\n Factory.registerTransform(\n 'stack',\n { transform: stackTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFunnelTransform = () => {\n Factory.registerTransform(\n 'funnel',\n { transform: funnelTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPieTransform = () => {\n Factory.registerTransform(\n 'pie',\n { transform: pieTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerCircularRelationTransform = () => {\n Factory.registerTransform(\n 'circularRelation',\n { transform: circularRelationTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFoldTransform = () => {\n Factory.registerTransform(\n 'fold',\n { transform: foldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerUnfoldTransform = () => {\n Factory.registerTransform(\n 'unfold',\n { transform: unfoldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerIdentifierTransform = () => {\n Factory.registerTransform(\n 'identifier',\n { transform: identifierTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSampleTransform = () => {\n Factory.registerTransform(\n 'sampling',\n { transform: sampleTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerMarkOverlapTransform = () => {\n Factory.registerTransform(\n 'markoverlap',\n { transform: markoverlapTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerDodgeTransform = () => {\n Factory.registerTransform(\n 'dodge',\n { transform: dodgeTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterTransform = () => {\n Factory.registerTransform(\n 'jitter',\n { transform: jitterTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterXTransform = () => {\n Factory.registerTransform(\n 'jitterX',\n { transform: jitterXTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterYTransform = () => {\n Factory.registerTransform(\n 'jitterY',\n { transform: jitterYTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerSymmetryTransform = () => {\n Factory.registerTransform(\n 'symmetry',\n { transform: symmetryTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\n\nexport class LineLikeSeriesSpecTransformer extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: any): void {\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n if (!isPointVisible) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.line);\n } else {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.line,\n 'lineLabel' as any,\n 'initLineLabelMarkStyle' as any,\n undefined,\n true\n );\n }\n}\n","import type { IRegion, ISeriesFilter } from '../region/interface';\nimport type { ISeries } from '../series/interface';\nimport { isFunction } from './type';\n\nexport function eachSeries(regions: IRegion[], callback: (s: ISeries) => boolean | void, filter?: ISeriesFilter) {\n let flag = false;\n if (callback && isFunction(callback)) {\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n flag = !!callback.call(null, s);\n if (flag) {\n return flag;\n }\n }\n }\n }\n return flag;\n}\n\nexport function getSeries(regions: IRegion[], filter?: ISeriesFilter) {\n const result: ISeries[] = [];\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n result.push(s);\n }\n }\n return result;\n}\n\nexport const getFirstSeries = (regions: IRegion[], coordinateType?: 'cartesian' | 'polar') => {\n for (let i = 0; i < regions.length; i++) {\n const r = regions[i];\n const series = r.getSeries();\n for (let j = 0; j < series.length; j++) {\n const s = series[j];\n if (coordinateType && s && s.coordinate === coordinateType) {\n return s;\n }\n if (!coordinateType && s) {\n return s;\n }\n }\n }\n return null;\n};\n","import { isValidNumber, last } from '@visactor/vutils';\nimport type { CartesianAxis } from '../../../component';\nimport type { LinearAxisMixin } from '../../../component/axis/mixin/linear-axis-mixin';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n break?: boolean;\n};\n\nexport function isValidAlignDomain(domain: number[]): boolean {\n return domain.length >= 2 && isValidNumber(domain[0]) && isValidNumber(last(domain)) && last(domain) >= domain[0];\n}\n\nexport function getScaleInfo(axis: LinearAxisMixin, domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = last(domain) - domain[0];\n const includeZero = last(domain) * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = last(domain) > 0 ? last(domain) - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n const domainSpec = axis.getDomainSpec();\n const result: ScaleInfo = {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: !isValidNumber(domainSpec.min),\n extendable_max: !isValidNumber(domainSpec.max)\n };\n if (axis._break?.scope) {\n // 当前轴有截断\n const index = domain.findIndex(value => value >= 0);\n\n let scope;\n let domainTemp;\n // 得到0值位置\n if (index === 0) {\n scope = axis._break.scope[index];\n domainTemp = [domain[0], domain[1]];\n result.positive = 1;\n result.negative = 0;\n } else {\n // 如果最大值小于 0\n if (last(domain) <= 0) {\n result.positive = 0;\n result.negative = 1;\n domainTemp = [domain[domain.length - 2], domain[domain.length - 1]];\n } else {\n // 0值在中间\n scope = axis._break.scope[index - 1];\n domainTemp = [domain[index - 1], domain[index]];\n // 得到0值在range中的实际比例\n result.negative = scope[0] + ((0 - domainTemp[0]) / (domainTemp[1] - domainTemp[0])) * (scope[1] - scope[0]);\n result.positive = 1 - result.negative;\n }\n }\n // 只要有截断,就不做domain修改\n result.break = true;\n result.extendable_max = false;\n result.extendable_min = false;\n result.domain = domainTemp;\n }\n return result;\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport const zeroAlign = (targetAxis: CartesianAxis, currentAxis: CartesianAxis) => {\n const s1 = targetAxis.getScale();\n const s2 = currentAxis.getScale();\n\n if (!s1 || !s2) {\n return;\n }\n\n const domain1 = (targetAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n const domain2 = (currentAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n\n if (!domain1 || !domain2 || !isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return;\n }\n\n // 先分别获取正负比例\n const info1 = getScaleInfo((targetAxis), domain1);\n const info2 = getScaleInfo((currentAxis), domain2);\n if (info1.break === true && info2.break === true) {\n return;\n }\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return;\n }\n domain1[0] = 0;\n } else {\n return;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return;\n }\n domain1[1] = 0;\n } else {\n return;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return;\n }\n }\n }\n s1.domain(domain1);\n s2.domain(domain2);\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport { AABBBounds, degreeToRadian } from '@visactor/vutils';\nimport type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { initTextMeasure } from '../../util/text';\nimport type { ICartesianTickDataOpt, IOrientType, ITickData } from '../type';\n\nexport const convertDomainToTickData = (domain: any[]): ITickData[] => {\n const ticks = domain.map((t: number, index: number) => {\n return {\n index,\n value: t\n };\n });\n return ticks;\n};\n\n/** 判断两个label是否有重叠情况 */\nexport const labelOverlap = (prevLabel: AABBBounds, nextLabel: AABBBounds, gap = 0): boolean => {\n const prevBounds = new AABBBounds(prevLabel).expand(gap / 2);\n const nextBounds = new AABBBounds(nextLabel).expand(gap / 2);\n return prevBounds.intersects(nextBounds);\n};\n\n/** 判断两个不相交的label相隔的距离 */\nexport const labelDistance = (prevLabel: AABBBounds, nextLabel: AABBBounds): [number, number] => {\n let horizontal = 0;\n if (prevLabel.x2 < nextLabel.x1) {\n horizontal = nextLabel.x1 - prevLabel.x2;\n } else if (nextLabel.x2 < prevLabel.x1) {\n horizontal = prevLabel.x1 - nextLabel.x2;\n }\n\n let vertical = 0;\n if (prevLabel.y2 < nextLabel.y1) {\n vertical = nextLabel.y1 - prevLabel.y2;\n } else if (nextLabel.y2 < prevLabel.y1) {\n vertical = prevLabel.y1 - nextLabel.y2;\n }\n\n return [horizontal, vertical];\n};\n\nexport const MIN_TICK_GAP = 12;\n\nconst calculateFlushPos = (basePosition: number, size: number, rangePosition: number, otherEnd: number) => {\n return rangePosition < basePosition\n ? Math.max(basePosition - size / 2, rangePosition)\n : rangePosition > basePosition\n ? Math.min(basePosition - size / 2, rangePosition - size)\n : rangePosition < otherEnd\n ? rangePosition\n : rangePosition - size;\n};\n\nexport const getCartesianLabelBounds = (scale: IBaseScale, domain: any[], op: ICartesianTickDataOpt): AABBBounds[] => {\n const { labelStyle, axisOrientType, labelFlush, labelFormatter, startAngle = 0 } = op;\n let labelAngle = labelStyle.angle ?? 0;\n if (labelStyle.direction === 'vertical') {\n labelAngle += degreeToRadian(90);\n }\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const isVertical = ['left', 'right'].includes(axisOrientType);\n let scaleX = 1;\n let scaleY = 0;\n if (isHorizontal) {\n // nothing to update\n } else if (isVertical) {\n scaleX = 0;\n scaleY = 1;\n } else if (startAngle) {\n scaleX = Math.cos(startAngle);\n scaleY = -Math.sin(startAngle);\n }\n\n const textMeasure = initTextMeasure(labelStyle);\n const range = scale.range();\n const labelBoundsList = domain.map((v: any, i: number) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const pos = scale.scale(v);\n const baseTextX = scaleX * pos;\n const baseTextY = scaleY * pos;\n let textX = baseTextX;\n let textY = baseTextY;\n\n let align: TextAlignType;\n if (labelFlush && isHorizontal && i === 0) {\n textX = calculateFlushPos(baseTextX, textWidth, range[0], range[range.length - 1]);\n } else if (labelFlush && isHorizontal && i === domain.length - 1) {\n textX = calculateFlushPos(baseTextX, textWidth, range[range.length - 1], range[0]);\n } else {\n align = labelStyle.textAlign ?? 'center';\n }\n if (align === 'right') {\n textX -= textWidth;\n } else if (align === 'center') {\n textX -= textWidth / 2;\n }\n\n let baseline: TextBaselineType;\n if (labelFlush && isVertical && i === 0) {\n textY = calculateFlushPos(baseTextY, textHeight, range[0], range[range.length - 1]);\n } else if (labelFlush && isVertical && i === domain.length - 1) {\n textY = calculateFlushPos(baseTextY, textHeight, range[range.length - 1], range[0]);\n } else {\n baseline = labelStyle.textBaseline ?? 'middle';\n }\n if (baseline === 'bottom') {\n textY -= textHeight;\n } else if (baseline === 'middle') {\n textY -= textHeight / 2;\n }\n\n // 计算 label 包围盒\n const bounds = new AABBBounds().set(textX, textY, textX + textWidth, textY + textHeight);\n\n if (labelAngle) {\n bounds.rotate(labelAngle, baseTextX, baseTextY);\n }\n\n return bounds;\n });\n\n return labelBoundsList;\n};\n\nexport const isAxisHorizontal = (axisOrientType: IOrientType) => {\n return (['bottom', 'top', 'z'] as IOrientType[]).includes(axisOrientType);\n};\n","import type { Datum } from '../../../typings';\nimport type { CartesianAxis } from '../../../component';\nimport { convertDomainToTickData } from '@visactor/vrender-components';\nimport { last } from '@visactor/vutils';\n\nexport interface ITickAlignOpt {\n targetAxis: () => CartesianAxis;\n currentAxis: () => CartesianAxis;\n}\n\nexport const tickAlign = (data: Array, op: ITickAlignOpt) => {\n if (!data) {\n return data;\n }\n // check align enable\n const targetAxis = op?.targetAxis?.();\n if (!targetAxis) {\n return data;\n }\n const currentAxis = op?.currentAxis?.();\n if (!currentAxis) {\n return data;\n }\n const currentData = currentAxis.getTickData()?.getDataView();\n if (!currentData) {\n return data;\n }\n // TODO 这种方法有点hack\n const currentTickTransform = currentData.transformsArr.find(t => t.type.includes('ticks'));\n if (!currentTickTransform) {\n return data;\n }\n const currentScale = currentAxis.getScale();\n if (!currentScale) {\n return data;\n }\n const targetData = targetAxis.getTickData()?.getDataView()?.latestData;\n if (!targetData?.length) {\n return data;\n }\n const targetScale = targetAxis.getScale();\n if (!targetScale) {\n return data;\n }\n const targetDomain = targetScale.domain();\n const targetRange = last(targetDomain) - targetDomain[0];\n if (targetRange === 0) {\n return data;\n }\n const currentDomain = currentScale.domain();\n const currentRange = last(currentDomain) - currentDomain[0];\n if (targetRange === 0) {\n return data;\n }\n // make the tickData of the current axis consistent with the tickData of the target axis\n const newTicks: number[] = targetData.map((d: { value: number }) => {\n const percent = (d.value - targetDomain[0]) / targetRange;\n return currentRange * percent + currentDomain[0];\n });\n return convertDomainToTickData(newTicks);\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\n\nexport class BasePlugin implements IBasePlugin {\n readonly id: number;\n readonly name: string;\n readonly type: string;\n protected service?: T;\n\n constructor(type: string) {\n this.id = createID();\n this.name = `${type}_${this.id}`;\n }\n\n onAdd(service: T): void {\n this.service = service;\n }\n\n release(): void {\n this.service = null;\n }\n}\n","import { ChartEvent } from '../../../constant/event';\nimport { zeroAlign } from './zero-align-transform';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport type { CartesianAxis, ICartesianLinearAxisSpec, ILinearAxisSync } from '../../../component/axis/cartesian';\nimport { isContinuous } from '@visactor/vscale';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { tickAlign } from './tick-align-transform';\nimport { BasePlugin } from '../../base/base-plugin';\n\nexport class AxisSyncPlugin\n extends BasePlugin\n implements IComponentPlugin\n{\n static readonly pluginType: 'component' = 'component';\n static readonly type: string = 'AxisSyncPlugin';\n readonly type: string = 'AxisSyncPlugin';\n\n constructor() {\n super(AxisSyncPlugin.type);\n }\n\n protected _checkEnableSync(axis: CartesianAxis): ILinearAxisSync | false {\n if (!isContinuous(axis.getScale().type)) {\n return false;\n }\n const sync = (axis.getSpec() as ICartesianLinearAxisSpec).sync as ILinearAxisSync;\n if (!sync?.axisId) {\n return false;\n }\n return sync;\n }\n\n private _getTargetAxis(axis: CartesianAxis, sync: ILinearAxisSync) {\n const targetAxis = axis.getOption().getChart().getComponentByUserId(sync.axisId) as CartesianAxis;\n if (!targetAxis?.type.startsWith('cartesianAxis')) {\n return null;\n }\n return targetAxis;\n }\n\n onInit(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n if (!sync.zeroAlign) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n // because of if the to axes bind in same region, the region will update them both in the data update.\n axis.event.on(\n ChartEvent.scaleDomainUpdate,\n { filter: ({ model }) => model.id === axis.id || model.id === targetAxis.id },\n () => {\n zeroAlign(targetAxis, axis);\n }\n );\n }\n\n onDidCompile(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n if (sync.tickAlign) {\n registerDataSetInstanceTransform(axis.getOption().dataSet, 'tickAlign', tickAlign);\n const opt = {\n targetAxis: () => targetAxis,\n currentAxis: () => axis\n };\n // only make this one follow target\n axis.addTransformToTickData({ type: 'tickAlign', options: opt, level: Number.MAX_SAFE_INTEGER }, false);\n }\n }\n}\n","import { degreeToRadian, isEmpty, isFunction } from '@visactor/vutils';\nimport type { Datum } from '../typings';\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n\n/**\n * 针对一些可以配置状态样式的属性的转换函数,结构如下:\n * { style: {}, state: { hover: {} } }\n * @param cfg\n * @returns\n */\nexport function transformComponentStyle(cfg: any = {}) {\n const newConfig = {\n ...cfg\n };\n\n if (isFunction(cfg.style)) {\n newConfig.style = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.style(item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.style)) {\n newConfig.style = transformToGraphic(cfg.style);\n }\n\n if (!isEmpty(cfg.state)) {\n const newStateStyle = {};\n Object.keys(cfg.state).forEach(key => {\n if (isFunction(cfg.state[key])) {\n newStateStyle[key] = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.state[key](item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.state[key])) {\n newStateStyle[key] = transformToGraphic(cfg.state[key]);\n }\n });\n newConfig.state = newStateStyle;\n }\n\n return newConfig;\n}\n\nexport function transformStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (value: any, index: number, datum: Datum, data: Datum[]) =>\n transformToGraphic(stateStyle[key](value, index, datum, data));\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformAxisLabelStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (datum: Datum, index: number, data: Datum[], layer?: number) => {\n return transformToGraphic(stateStyle[key](datum.rawValue, index, datum, data, layer));\n };\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformIndicatorStyle(style: any, datum: any) {\n if (isEmpty(style)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(style).forEach(key => {\n if (isFunction(style[key])) {\n newStateStyle[key] = style[key](datum);\n } else {\n newStateStyle[key] = style[key];\n }\n });\n return transformToGraphic(newStateStyle);\n}\n\nexport function transformToGraphic(style: any) {\n if (style?.angle) {\n style.angle = degreeToRadian(style.angle);\n }\n\n return style;\n}\n","import { get } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IOrientType, IPolarOrientType } from '../../typings';\nimport type { AxisType, ICommonAxisSpec, ILinearAxisSpec } from './interface';\nimport { transformComponentStyle } from '../../util/style';\nimport { isXAxis, isYAxis } from './cartesian/util/common';\nimport { getComponentThemeFromOption } from '../util';\nimport type { ITheme } from '../../theme';\nimport type { IAxisHelper } from './cartesian';\nimport type { IPolarAxisHelper } from './polar';\n\nexport const DEFAULT_TITLE_STYLE = {\n left: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n right: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n radius: {},\n angle: {}\n};\n\nexport function transformAxisLineStyle(lineCfg: any) {\n lineCfg = transformComponentStyle(lineCfg);\n lineCfg.startSymbol = transformComponentStyle(lineCfg.startSymbol);\n lineCfg.endSymbol = transformComponentStyle(lineCfg.endSymbol);\n\n return lineCfg;\n}\n\nexport function getAxisLabelOffset(axisSpec: ICommonAxisSpec) {\n let labelOffset = 0;\n if (get(axisSpec, 'tick.visible')) {\n labelOffset += get(axisSpec, 'tick.tickSize');\n }\n\n if (get(axisSpec, 'label.visible')) {\n labelOffset += get(axisSpec, 'label.space');\n }\n\n return labelOffset;\n}\n\nexport function getLinearAxisSpecDomain(\n axisSpec: ILinearAxisSpec,\n defaultDomain?: {\n min?: number;\n max?: number;\n }\n) {\n // 兼容策略\n return {\n min: axisSpec.min ?? axisSpec.range?.min ?? defaultDomain?.min,\n max: axisSpec.max ?? axisSpec.range?.max ?? defaultDomain?.max\n };\n}\n\nexport function isValidCartesianAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'top' || orient === 'bottom' || orient === 'left' || orient === 'right' || orient === 'z';\n}\n\nexport function isValidPolarAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'angle' || orient === 'radius';\n}\n\nexport const getCartesianAxisTheme = (orient: IOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : (['linear', 'log', 'symlog'] as AxisType[]).includes(type)\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme = isXAxis(orient)\n ? getComponentThemeFromOption('axisX', chartTheme)\n : isYAxis(orient)\n ? getComponentThemeFromOption('axisY', chartTheme)\n : getComponentThemeFromOption('axisZ', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const getPolarAxisTheme = (orient: IPolarOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : type === 'linear'\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme =\n orient === 'angle'\n ? getComponentThemeFromOption('axisAngle', chartTheme)\n : getComponentThemeFromOption('axisRadius', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const isDiscreteAxis = (axisType: AxisType) =>\n axisType === 'band' || axisType === 'ordinal' || axisType === 'point';\n\nexport function getAxisItem(value: any, normalizedValue: number) {\n return {\n id: value,\n label: value,\n value: normalizedValue,\n rawValue: value\n };\n}\n\n// 更新的条件: 指定绑定关系 或 初次绑定 或 更新前后id一致(防止声明多个轴时, 后面的轴覆盖前面的轴)\nexport function shouldUpdateAxis(\n preHelper: IAxisHelper | IPolarAxisHelper,\n curHelper: IAxisHelper | IPolarAxisHelper,\n forceUpdate: boolean\n) {\n return forceUpdate || !preHelper || preHelper.getAxisId() === curHelper.getAxisId();\n}\n","import type { IComponentPlugin, IComponentPluginService } from './interface';\nimport type { IComponent } from '../../component/interface';\nimport { BasePluginService } from '../base/base-plugin-service';\n\nexport class ComponentPluginService\n extends BasePluginService\n implements IComponentPluginService\n{\n component: IComponent;\n\n constructor(component: IComponent) {\n super();\n this.component = component;\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.component = null;\n }\n}\n","import type { Tag } from '@visactor/vrender-components';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { Datum } from '../../../typings';\nimport type { ICrosshairTheme } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../axis/cartesian/util/common';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianAxisCommonSpec, IPolarAxisCommonSpec } from '../../axis';\nimport { getComponentThemeFromOption } from '../../util';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { ITheme } from '../../../theme';\nimport { isDiscreteAxis } from '../../axis/util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport function limitTagInBounds(shape: Tag, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n\n/**\n * 查找系列中的数据\n * @todo 待重构优化,和 `getDimensionData` 中的逻辑存在重合\n * @param data 系列数据\n * @param value 数据值\n * @param startField 开始值对应的字段\n * @param endField 结束值对应的字段\n * @returns 系列数据\n */\nexport function getDatumByValue(data: Datum[], value: number, startField: string, endField?: string): Datum | null {\n for (let i = 0, len = data.length; i < len; i++) {\n const record = data[i];\n\n if (record) {\n const startValue = record[startField];\n const endValue = record[endField || startField];\n\n if (startValue <= value && endValue >= value) {\n return record;\n }\n }\n }\n\n return null;\n}\n\nexport const getCartesianCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: ICartesianAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, xField, yField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const xAxis = axes.find(axis => isXAxis(axis.orient));\n let newXField;\n if (isValid(xAxis)) {\n newXField = mergeSpec({}, isDiscreteAxis(xAxis.type) ? bandField : linearField, xField);\n } else {\n newXField = xField;\n }\n\n const yAxis = axes.find(axis => isYAxis(axis.orient));\n let newYField;\n if (isValid(yAxis)) {\n newYField = mergeSpec({}, isDiscrete(yAxis.type) ? bandField : linearField, yField);\n } else {\n newYField = yField;\n }\n\n return {\n xField: newXField,\n yField: newYField\n };\n};\n\nexport const getPolarCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: IPolarAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, categoryField, valueField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const angleAxis = axes.find(axis => axis.orient === 'angle');\n let newAngleField;\n if (isValid(angleAxis)) {\n newAngleField = mergeSpec({}, isDiscreteAxis(angleAxis.type) ? bandField : linearField, categoryField);\n } else {\n newAngleField = categoryField;\n }\n\n const radiusAxis = axes.find(axis => axis.orient === 'radius');\n let newRadiusField;\n if (isValid(radiusAxis)) {\n newRadiusField = mergeSpec({}, isDiscrete(radiusAxis.type) ? bandField : linearField, valueField);\n } else {\n newRadiusField = valueField;\n }\n\n return {\n categoryField: newAngleField,\n valueField: newRadiusField\n };\n};\n","import type { ITheme } from '../../theme';\nimport { Direction, type IOrientType } from '../../typings';\nimport { getDirectionByOrient, getOrient } from '../axis/cartesian/util/common';\nimport { getCartesianAxisTheme, getPolarAxisTheme } from '../axis/util';\nimport { getCartesianCrosshairTheme, getPolarCrosshairTheme } from '../crosshair/utils';\nimport type { ComponentThemeWithDirection } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { getComponentThemeFromOption } from '../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport function getComponentThemeFromGlobalTheme(\n type: ComponentTypeEnum,\n chartTheme: ITheme,\n componentSpec: any,\n chartSpec: any\n) {\n switch (type) {\n case ComponentTypeEnum.cartesianBandAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'band', chartTheme);\n case ComponentTypeEnum.cartesianLinearAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'linear', chartTheme);\n case ComponentTypeEnum.cartesianLogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'log', chartTheme);\n case ComponentTypeEnum.cartesianSymlogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'symlog', chartTheme);\n case ComponentTypeEnum.cartesianAxis:\n case ComponentTypeEnum.cartesianTimeAxis:\n return getCartesianAxisTheme(getOrient(componentSpec), undefined, chartTheme);\n case ComponentTypeEnum.polarBandAxis:\n return getPolarAxisTheme(componentSpec.orient, 'band', chartTheme);\n case ComponentTypeEnum.polarLinearAxis:\n return getPolarAxisTheme(componentSpec.orient, 'linear', chartTheme);\n case ComponentTypeEnum.polarAxis:\n return getPolarAxisTheme(componentSpec.orient, undefined, chartTheme);\n case ComponentTypeEnum.cartesianCrosshair:\n return getCartesianCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.polarCrosshair:\n return getPolarCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.colorLegend:\n case ComponentTypeEnum.sizeLegend:\n case ComponentTypeEnum.discreteLegend:\n case ComponentTypeEnum.dataZoom:\n case ComponentTypeEnum.scrollBar:\n return getComponentThemeWithDirection(componentSpec, getComponentThemeFromOption(type, chartTheme));\n default:\n return getComponentThemeFromOption(type, chartTheme);\n }\n}\n\nexport const getComponentThemeWithDirection = (\n componentSpec: { orient?: IOrientType },\n originalTheme: ComponentThemeWithDirection\n): T => {\n const orient = componentSpec.orient ?? originalTheme.orient;\n const directionTheme = originalTheme[getDirectionByOrient(orient)];\n const finalTheme = mergeSpec({}, originalTheme, directionTheme);\n\n delete finalTheme[Direction.horizontal];\n delete finalTheme[Direction.vertical];\n return finalTheme;\n};\n","import { BaseModelSpecTransformer } from '../../model';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { ComponentTypeEnum } from '../interface';\nimport type { IComponentSpec } from './interface';\nimport { getComponentThemeFromGlobalTheme } from './util';\n\nexport class BaseComponentSpecTransformer<\n T extends IComponentSpec = IComponentSpec,\n K = any\n> extends BaseModelSpecTransformer {\n getTheme(spec: T, chartSpec: any): K {\n return getComponentThemeFromGlobalTheme(this.type as ComponentTypeEnum, this._option.getTheme(), spec, chartSpec);\n }\n\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const { spec: newSpec, theme } = super._mergeThemeToSpec(spec, chartSpec);\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n\n protected _adjustPadding(spec: T) {\n // 默认忽略外侧 padding\n const { padding, noOuterPadding = true, orient } = spec;\n if (noOuterPadding && padding && orient) {\n spec.padding = {\n ...normalizeLayoutPaddingSpec(padding),\n [orient]: 0\n };\n }\n }\n}\n","import { CustomEvent, type IGraphicAttribute, type IGraphic, type IGroup, type INode } from '@visactor/vrender-core';\nimport type { IRegion } from '../../region/interface';\nimport type { IComponent, IComponentOption } from '../interface';\nimport { ComponentPluginService } from '../../plugin/components/plugin-service';\nimport type { IComponentPluginService, IComponentPlugin } from '../../plugin/components/interface';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { Event_Source_Type } from '../../constant/event';\nimport type { IAnimate } from '../../animation/interface';\nimport { AnimateManager } from '../../animation/animate-manager';\n// import { preprocessSpecOrTheme } from '../../util/spec/preprocess';\nimport type { Datum, ILayoutRect } from '../../typings';\nimport type { IComponentSpec } from './interface';\nimport { LayoutModel } from '../../model/layout-model';\nimport { BaseComponentSpecTransformer } from './base-component-transformer';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\n\nexport class BaseComponent extends LayoutModel implements IComponent {\n static transformerConstructor = BaseComponentSpecTransformer;\n name: string = 'component';\n readonly modelType: string = 'component';\n readonly transformerConstructor = BaseComponentSpecTransformer as any;\n pluginService?: IComponentPluginService;\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption): IComponent {\n const { spec, ...others } = specInfo;\n return new this(spec, {\n ...options,\n ...others\n });\n }\n\n protected declare _option: IComponentOption;\n\n protected _regions: IRegion[];\n getRegions() {\n return this._regions;\n }\n\n protected _container: IGroup;\n\n created() {\n super.created();\n this.initLayout();\n this.pluginService = new ComponentPluginService(this);\n }\n\n animate?: IAnimate;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n // 创建组件自己的动画管理器\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: options.getCompiler\n });\n }\n }\n\n initLayout(): void {\n super.initLayout();\n this._regions = this._regions ?? this._option.getRegionsInIndex();\n this._layout && (this._layout.layoutBindRegionID = this._regions.map(x => x?.id));\n }\n\n changeRegions(regions: IRegion[]): void {\n throw new Error('Method not implemented.');\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n throw new Error('Method not implemented.');\n }\n onRender(ctx: IModelRenderOption): void {\n throw new Error('Method not implemented.');\n }\n\n getVRenderComponents() {\n return this._getNeedClearVRenderComponents();\n }\n\n protected callPlugin(cb: (plugin: IComponentPlugin) => void) {\n if (this.pluginService) {\n this.pluginService.getAll().forEach(plugin => cb(plugin));\n }\n }\n\n protected getContainer() {\n if (!this._container) {\n this._container = this._option?.globalInstance.getStage().find(node => node.name === 'root', true) as IGroup;\n }\n\n return this._container;\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['seriesId', 'seriesIndex', 'regionId', 'regionIndex'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n if ((prevSpec as any)?.visible !== (spec as any).visible) {\n result.reCompile = true;\n }\n return result;\n }\n\n release() {\n super.release();\n this.clear();\n\n this.pluginService?.releaseAll();\n this.pluginService = null;\n }\n\n clear() {\n const components = this._getNeedClearVRenderComponents();\n if (components && components.length) {\n components.forEach(c => {\n if (c) {\n this.getContainer()?.removeChild(c as unknown as INode);\n c = null;\n }\n });\n }\n this._container = null;\n this.pluginService?.clearAll();\n }\n\n compile(): void {\n this.compileMarks();\n this.reAppendComponents();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group, context: { model: this } });\n });\n }\n\n reAppendComponents() {\n const components = this._getNeedClearVRenderComponents();\n if (components && components.length) {\n components.forEach(c => {\n if (c && !c.stage) {\n // component is removed remove stage\n\n this.getContainer()?.appendChild(c as unknown as INode);\n }\n });\n }\n }\n\n // 代理组件本身的事件(非内部图形),如坐标轴整体的点击等\n protected _delegateEvent = (component: IGraphic, event: any, type: string, item: any = null, datum: Datum = null) => {\n // 组件这里只代理基础的事件,自定义事件不需要代理\n if (!(event instanceof CustomEvent)) {\n this.event.emit(\n type,\n {\n model: this,\n node: component,\n event,\n item: item,\n datum: datum,\n source: Event_Source_Type.chart,\n chart: this._option?.globalInstance?.getChart()\n },\n 'model'\n );\n }\n };\n\n getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n\n getDatum(graphic?: IGraphic>) {\n // override\n return;\n }\n}\n","import isPlainObject from './isPlainObject';\nimport isString from './isString';\n\nexport default function pickWithout>(obj: T, keys: (string | RegExp)[]): Partial {\n if (!obj || !isPlainObject(obj)) {\n return obj;\n }\n const result = {};\n\n Object.keys(obj).forEach((k: string) => {\n const v = obj[k];\n\n let match = false;\n\n keys.forEach(itKey => {\n if (isString(itKey) && itKey === k) {\n match = true;\n } else if (itKey instanceof RegExp && k.match(itKey)) {\n match = true;\n }\n });\n\n if (!match) {\n result[k] = v;\n }\n });\n\n return result as Partial;\n}\n","import { Factory } from './../core/factory';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { ICommonSpec } from '../typings';\nimport { BaseMark } from './base/base-mark';\nimport type { IComponentMark, IMarkOption } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\n\nexport class ComponentMark extends BaseMark implements IComponentMark {\n static readonly type = MarkTypeEnum.component;\n type: string = 'component';\n\n private _componentType: string;\n private _mode: '2d' | '3d';\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n // 这里需要将 type 指定为具体的组件名称,即调用 vgrammar 的 registerComponent API 注册的组件名称\n this._componentType = option.componentType;\n this._mode = option.mode;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view\n .mark(GrammarMarkType.component, group ?? view.rootMark, { componentType: this._componentType, mode: this._mode })\n .id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerComponentMark = () => {\n Factory.registerMark(ComponentMark.type, ComponentMark);\n};\n","import type { EasingType, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { ACustomAnimate, AnimateMode } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { cloneDeep, interpolateString, isEqual, isValidNumber } from '@visactor/vutils';\nimport { traverseGroup } from '../../util';\n\nexport class GroupTransition extends ACustomAnimate {\n declare target: IGroup;\n\n private _newElementAttrMap: Dict;\n mode = AnimateMode.NORMAL; // 组件的群组动画不需要设置走 AnimateMode.SET_ATTR_IMMEDIATELY\n\n onBind(): void {\n // @ts-ignore\n const currentInnerView = this.target.getInnerView();\n // @ts-ignore\n const prevInnerView = this.target.getPrevInnerView();\n if (!prevInnerView) {\n return;\n }\n\n this._newElementAttrMap = {};\n\n // 遍历新的场景树,将新节点属性更新为旧节点\n // TODO: 目前只处理更新场景\n traverseGroup(currentInnerView, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n const oldEl = prevInnerView[el.id];\n if (oldEl) {\n if (!isEqual((el as IGraphic).attribute, (oldEl as IGraphic).attribute)) {\n // 更新\n const newProps = cloneDeep((el as IGraphic).attribute);\n this._newElementAttrMap[el.id] = {\n state: 'update',\n node: el,\n attrs: {\n ...newProps,\n opacity: newProps.opacity ?? 1,\n fillOpacity: newProps.fillOpacity ?? 1,\n strokeOpacity: newProps.strokeOpacity ?? 1\n }\n };\n\n (el as IGraphic).setAttributes((oldEl as IGraphic).attribute);\n }\n } else {\n // 新入场元素,进行 fadeIn 动画\n const finalOpacityAttrs = {\n opacity: el.attribute.opacity ?? 1,\n fillOpacity: el.attribute.fillOpacity ?? 1,\n strokeOpacity: el.attribute.strokeOpacity ?? 1\n };\n this._newElementAttrMap[el.id] = {\n state: 'enter',\n node: el,\n attrs: finalOpacityAttrs\n };\n (el as IGraphic).setAttributes({\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n });\n }\n }\n });\n }\n\n onStart(): void {\n let duration = this.duration;\n let easing = this.easing;\n\n // 新的场景树\n this._newElementAttrMap &&\n Object.keys(this._newElementAttrMap).forEach(id => {\n const { node, attrs, state } = this._newElementAttrMap[id];\n if (state === 'enter') {\n const { enter = {} } = this.params ?? {};\n duration = isValidNumber(enter.duration) ? enter.duration : duration;\n easing = enter.easing ? enter.easing : easing;\n }\n if ((node as IGraphic).type === 'path') {\n (node as IGraphic)\n .animate({\n interpolate(key: string, ratio: number, from: any, to: any, nextAttributes: any) {\n if (key === 'path') {\n nextAttributes.path = interpolateString(from, to)(ratio);\n return true;\n }\n\n return false;\n }\n })\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n } else {\n (node as IGraphic)\n .animate()\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n }\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // do nothing\n }\n}\n","import type { IGroup } from '../interface/graphic/group';\nimport { ACustomAnimate } from './animate';\n\nexport class GroupFadeIn extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: ratio\n }\n });\n }\n}\n\nexport class GroupFadeOut extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: 1 - ratio\n }\n });\n }\n}\n","import type { Parser } from '@visactor/vdataset';\nimport type { IBaseScale } from '@visactor/vscale';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const scaleParser: Parser = (scale: IBaseScale) => {\n return scale;\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport type { ITickDataOpt } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport type { IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n IOrientType,\n IPolarOrientType,\n Datum,\n StringOrNumber,\n IGroup as ISeriesGroup,\n CoordinateType\n} from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport { CompilableData } from '../../compile/data';\nimport type { IAxis, ICommonAxisSpec, ITick } from './interface';\nimport { ComponentTypeEnum, type IComponentOption } from '../interface';\nimport { eachSeries, getSeries } from '../../util/model';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../../series/interface';\nimport { ChartEvent } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { animationConfig } from '../../animation/utils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n degreeToRadian,\n pickWithout,\n isEqual,\n array,\n get,\n isArray,\n isFunction,\n isNil,\n isValid,\n maxInArray\n} from '@visactor/vutils';\nimport { DEFAULT_TITLE_STYLE, transformAxisLineStyle } from './util';\nimport { transformAxisLabelStateStyle, transformStateStyle, transformToGraphic } from '../../util/style';\nimport type { ITransformOptions } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataView } from '@visactor/vdataset';\nimport { GridEnum } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerComponentMark } from '../../mark/component';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { AXIS_ELEMENT_NAME, GroupTransition } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupFadeOut, GroupFadeIn } from '@visactor/vrender-core';\nimport { scaleParser } from '../../data/parser/scale';\nimport { registerDataSetInstanceParser } from '../../data/register';\nimport { getFormatFunction } from '../util';\nimport type { IComponentMark } from '../../mark/interface/mark';\n\nexport abstract class AxisComponent = any> // FIXME: 补充公共类型,去掉 Record\n extends BaseComponent\n implements IAxis\n{\n static specKey = 'axes';\n specKey = 'axes';\n\n protected _orient: IPolarOrientType | IOrientType;\n getOrient() {\n return this._orient;\n }\n\n protected _scale!: IBaseScale;\n getScale() {\n return this._scale;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tickData: CompilableData[] = [];\n getTickData(index = 0) {\n return this._tickData[index];\n }\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionIndex?: number[];\n\n /**\n * if axis will be shown\n */\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n /** 轴是否产生反转的真实值,在横向图表的竖轴上可能和用户在 spec 上配的值相反 */\n protected _inverse: boolean;\n getInverse() {\n return this._inverse;\n }\n\n protected _tick: ITick | undefined = undefined;\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n protected abstract axisHelper(): any;\n protected abstract getSeriesStatisticsField(s: ISeries): string[];\n protected abstract updateSeriesScale(): void;\n protected abstract collectSeriesField(depth: number, series: ISeries): string | string[];\n abstract transformScaleDomain(): void;\n protected abstract updateScaleRange(): boolean;\n protected abstract getDefaultInteractive(): boolean;\n\n protected _dataFieldText: string;\n protected _axisMark: IComponentMark;\n protected _gridMark: IComponentMark;\n\n protected _coordinateType: CoordinateType;\n getCoordinateType() {\n return this._coordinateType;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._visible = spec.visible ?? true;\n this._coordinateType = 'none';\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n getVRenderComponents() {\n return [\n this._axisMark?.getProduct()?.getGroupGraphicItem(),\n this._gridMark?.getProduct()?.getGroupGraphicItem()\n ].filter(isValid);\n }\n\n created() {\n super.created();\n //series and regions\n this.setSeriesAndRegionsFromSpec();\n // event\n this.initEvent();\n // scales\n this.initScales();\n this.updateSeriesScale();\n // data\n this._shouldComputeTickData() && this._initData();\n\n if (this._visible) {\n // 创建语法元素\n const axisMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}` },\n {\n componentType: this.getOrient() === 'angle' ? 'circleAxis' : 'axis',\n mode: this._spec.mode,\n noSeparateStyle: true\n },\n {\n skipTheme: true // skip theme of vgrammar to avoid merge\n }\n );\n this._axisMark = axisMark;\n axisMark.setMarkConfig({ zIndex: this.layoutZIndex });\n if (isValid(this._spec.id)) {\n axisMark.setUserId(this._spec.id);\n }\n axisMark.setMarkConfig({ interactive: this._spec.interactive ?? this.getDefaultInteractive() });\n this._marks.addMark(axisMark);\n\n if (this._spec.grid?.visible) {\n const gridMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}-grid` },\n {\n componentType: this.getOrient() === 'angle' ? GridEnum.circleAxisGrid : GridEnum.lineAxisGrid,\n mode: this._spec.mode,\n noSeparateStyle: true\n },\n {\n skipTheme: true\n }\n );\n gridMark.setMarkConfig({\n zIndex: this._spec.grid?.style?.zIndex ?? this._spec.grid?.zIndex ?? LayoutZIndex.Axis_Grid,\n interactive: false // 轴网格线关闭交互\n });\n this._marks.addMark(gridMark);\n this._gridMark = gridMark;\n }\n\n // Tip: 支持 spec.animationAppear.axis,并且坐标轴默认关闭动画\n if (\n this._option.animation !== false &&\n get(this._option.getChart().getSpec(), 'animation') !== false &&\n this._spec.animation === true\n ) {\n const axisAnimateConfig = animationConfig(Factory.getAnimationInKey('axis')?.(), {\n appear:\n this._spec.animationAppear ??\n get(this._option.getChart().getSpec(), 'animationAppear.axis') ??\n get(this._option.getChart().getSpec(), 'animationAppear'),\n disappear:\n this._spec.animationDisappear ??\n get(this._option.getChart().getSpec(), 'animationDisappear.axis') ??\n get(this._option.getChart().getSpec(), 'animationDisappear'),\n enter:\n this._spec.animationEnter ??\n get(this._option.getChart().getSpec(), 'animationEnter.axis') ??\n get(this._option.getChart().getSpec(), 'animationEnter'),\n exit:\n this._spec.animationExit ??\n get(this._option.getChart().getSpec(), 'animationExit.axis') ??\n get(this._option.getChart().getSpec(), 'animationExit'),\n update:\n this._spec.animationUpdate ??\n get(this._option.getChart().getSpec(), 'animationUpdate.axis') ??\n get(this._option.getChart().getSpec(), 'animationUpdate')\n });\n // 因为坐标轴的更新动画中处理了 enter,所以需要将 enter 的参数传入\n if (axisAnimateConfig.enter) {\n axisAnimateConfig.update[0].customParameters = {\n enter: axisAnimateConfig.enter[0]\n };\n }\n this._marks.forEach(m => m.setAnimationConfig(axisAnimateConfig));\n }\n }\n }\n\n protected _shouldComputeTickData() {\n // 当轴被展示、或者强制要求计算 data 时再计算 data\n return this.getVisible() || this._spec.forceInitTick;\n }\n\n // data\n protected _initData() {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n this._tickData = [new CompilableData(this._option, tickData)];\n }\n\n protected collectData(depth: number, rawData?: boolean) {\n const data: { min: number; max: number; values: any[] }[] = [];\n eachSeries(\n this._regions,\n s => {\n let field = this.collectSeriesField(depth, s);\n field = (isArray(field) ? (isContinuous(this._scale.type) ? field : [field[0]]) : [field]) as string[];\n if (!depth) {\n this._dataFieldText = s.getFieldAlias(field[0]);\n }\n\n if (field) {\n const viewData = s.getViewData();\n if (rawData) {\n field.forEach(f => {\n data.push(s.getRawDataStatisticsByField(f, false) as { min: number; max: number; values: any[] });\n });\n } else if (viewData && viewData.latestData && viewData.latestData.length) {\n const seriesData = s.getViewDataStatistics?.();\n const userSetBreaks =\n this.type === ComponentTypeEnum.cartesianLinearAxis && this._spec.breaks && this._spec.breaks.length;\n\n field.forEach(f => {\n if (seriesData?.latestData?.[f]) {\n if (userSetBreaks) {\n data.push({\n ...seriesData.latestData[f],\n values: viewData.latestData.map((obj: Datum) => obj[f])\n });\n } else {\n data.push(seriesData.latestData[f]);\n }\n }\n });\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return data;\n }\n\n protected isSeriesDataEnable() {\n let enable = true;\n eachSeries(\n this._regions,\n s => {\n if (isArray(s.getViewDataStatistics()?.latestData)) {\n enable = false;\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return enable;\n }\n\n protected setSeriesAndRegionsFromSpec() {\n const { seriesId, seriesIndex, regionId, regionIndex } = this._spec;\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId as string[], this._regionIndex);\n // _regions 被更新了,layoutBindRegionID 也要更新\n this.layout.layoutBindRegionID = this._regions.map(x => x.id);\n }\n\n getBindSeriesFilter() {\n return {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n };\n }\n\n protected initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n const viewStatistics = getSeries(this._regions, {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n })\n .map(s => s.getViewDataStatistics())\n .filter(v => !!v);\n\n if (viewStatistics.length > 1) {\n this._option.dataSet.multipleDataViewAddListener(viewStatistics, 'change', () => {\n this.updateScaleDomain();\n });\n } else if (viewStatistics.length === 1) {\n viewStatistics[0].target.addListener('change', () => {\n this.updateScaleDomain();\n });\n }\n\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n // 只清除,不更新,在需要时,更新一次。避免多系列下多次更新\n this._clearRawDomain();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected updateScaleDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n protected _clearRawDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n onLayoutEnd(ctx: any): void {\n const changed = this.updateScaleRange();\n\n this.event.emit(ChartEvent.scaleUpdate, { model: this, value: 'range' });\n\n super.onLayoutEnd(ctx);\n }\n\n protected computeData(updateType?: 'domain' | 'range' | 'force'): void {\n // 对应问题#3287: 轴隐藏(tickData为[])时, dataZoom/scrollBar无法触发视图更新\n // 解决方式: dataZoom/scrollBar更新时, 使用force, 此时即使没有tickData也要触发视图更新\n // ps:\n // 1. 其他逻辑没有使用force更新, 所以不会带来额外影响\n // 2. force更新时, 如果有tickData仍然走老逻辑, 这里只考虑force && 无tickData的情况\n if (updateType === 'force' && (!this._tickData || !this._tickData.length)) {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.reRunAllTransform();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n } else if (\n this._tickData &&\n this._tickData.length &&\n (updateType === 'force' || !isEqual(this._scale.range(), [0, 1]))\n ) {\n this._tickData.forEach(tickData => {\n tickData.getDataView().reRunAllTransform();\n tickData.updateData();\n });\n }\n }\n\n protected initScales() {\n this._scales = [this._scale];\n const groups: ISeriesGroup[] = [];\n eachSeries(\n this._regions,\n s => {\n const g = s.getGroups();\n g && groups.push(g);\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n if (groups.length !== 0) {\n const depth = maxInArray(groups.map(g => g.fields.length));\n for (let i = 1; i < depth; i++) {\n const scale = this._scale.clone();\n this._scales.push(scale);\n }\n }\n // this.updateScaleDomain();\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (result.reMake) {\n return result;\n }\n\n result.reRender = true;\n /**\n * 存在轴同步相关配置的时候,暂时通过`reMake`触发更新\n */\n if (prevSpec?.type !== spec?.type || prevSpec?.visible !== spec?.visible) {\n result.reMake = true;\n return result;\n }\n\n result.reMake = ['grid', 'subGrid', 'tick', 'subTick', 'label', 'domainLine', 'title'].some(k => {\n return prevSpec?.[k]?.visible !== spec?.[k]?.visible;\n });\n\n return result;\n }\n\n protected _getAxisAttributes() {\n const spec = this._spec;\n\n const axisAttrs: any = {\n orient: this.getOrient(),\n select: this._option.disableTriggerEvent === true ? false : spec.select,\n hover: this._option.disableTriggerEvent === true ? false : spec.hover\n };\n\n // 属性均需要显示开启\n if (spec.domainLine && spec.domainLine.visible) {\n axisAttrs.line = transformAxisLineStyle(spec.domainLine);\n } else {\n axisAttrs.line = { visible: false };\n }\n\n if (spec.label && spec.label.visible) {\n const labelSpec = pickWithout(spec.label, ['style', 'formatMethod', 'state']);\n axisAttrs.label = labelSpec;\n if (spec.label.style) {\n axisAttrs.label.style = isFunction(spec.label.style)\n ? (datum: Datum, index: number, data: Datum[], layer?: number) => {\n const style = spec.label.style(datum.rawValue, index, datum, data, layer);\n return transformToGraphic(mergeSpec({}, this._theme.label?.style, style));\n }\n : transformToGraphic(spec.label.style);\n }\n if (spec.label.formatMethod || spec.label.formatter) {\n axisAttrs.label.formatMethod = this._getLabelFormatMethod();\n }\n if (spec.label.state) {\n axisAttrs.label.state = transformAxisLabelStateStyle(spec.label.state);\n }\n } else {\n axisAttrs.label = {\n visible: false\n };\n }\n\n if (spec.tick && spec.tick.visible) {\n axisAttrs.tick = {\n visible: spec.tick.visible,\n length: spec.tick.tickSize,\n inside: spec.tick.inside,\n alignWithLabel: spec.tick.alignWithLabel,\n dataFilter: spec.tick.dataFilter\n };\n if (spec.tick.style) {\n axisAttrs.tick.style = isFunction(spec.tick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.tick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.tick?.style, style));\n }\n : transformToGraphic(spec.tick.style);\n }\n if (spec.tick.state) {\n axisAttrs.tick.state = transformStateStyle(spec.tick.state);\n }\n } else {\n axisAttrs.tick = {\n visible: false\n };\n }\n\n if (spec.subTick && spec.subTick.visible) {\n axisAttrs.subTick = {\n visible: spec.subTick.visible,\n length: spec.subTick.tickSize,\n inside: spec.subTick.inside,\n count: spec.subTick.tickCount\n };\n if (spec.subTick.style) {\n axisAttrs.subTick.style = isFunction(spec.subTick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.subTick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.subTick?.style, style));\n }\n : transformToGraphic(spec.subTick.style);\n }\n if (spec.subTick.state) {\n axisAttrs.subTick.state = transformStateStyle(spec.subTick.state);\n }\n } else {\n axisAttrs.subTick = {\n visible: false\n };\n }\n\n if (spec.title && spec.title.visible) {\n const {\n autoRotate,\n angle,\n style: titleStyle = {},\n background: titleBackgroundSpec,\n state: titleState,\n shape: titleShapeSpec,\n ...restTitleAttrs\n } = spec.title;\n let titleAngle = angle;\n let titleTextStyle;\n if (spec.orient === 'left' || spec.orient === 'right') {\n // 处理纵轴的标题样式\n if (autoRotate && isNil(titleAngle)) {\n titleAngle = spec.orient === 'left' ? -90 : 90;\n titleTextStyle = (DEFAULT_TITLE_STYLE as any)[spec.orient];\n }\n }\n\n axisAttrs.title = {\n ...restTitleAttrs,\n autoRotate: false, // 默认不对外提供该配置\n angle: titleAngle ? degreeToRadian(titleAngle) : null,\n textStyle: mergeSpec({}, titleTextStyle, transformToGraphic(titleStyle)),\n pickable: titleStyle.pickable !== false,\n childrenPickable: titleStyle.pickable !== false,\n state: {}\n };\n\n if (titleShapeSpec && titleShapeSpec.visible) {\n axisAttrs.title.shape = {\n ...titleShapeSpec,\n style: transformToGraphic(titleShapeSpec.style)\n };\n if (titleShapeSpec.state) {\n axisAttrs.title.state.shape = transformStateStyle(titleShapeSpec.state);\n }\n } else {\n axisAttrs.title.shape = { visible: false };\n }\n\n if (titleBackgroundSpec && titleBackgroundSpec.visible) {\n axisAttrs.title.background = {\n ...titleBackgroundSpec,\n style: transformToGraphic(titleBackgroundSpec.style)\n };\n if (titleBackgroundSpec.state) {\n axisAttrs.title.state.background = transformStateStyle(titleBackgroundSpec.state);\n }\n } else {\n axisAttrs.title.background = { visible: false };\n }\n\n if (titleState) {\n axisAttrs.title.state.text = transformStateStyle(titleState);\n }\n } else {\n axisAttrs.title = {\n visible: false\n };\n }\n\n if (spec.background && spec.background.visible) {\n axisAttrs.panel = {\n visible: true\n };\n if (spec.background.style) {\n axisAttrs.panel.style = transformToGraphic(spec.background.style);\n }\n if (spec.background.state) {\n axisAttrs.panel.state = transformStateStyle(spec.background.state);\n }\n } else {\n axisAttrs.panel = {\n visible: false\n };\n }\n\n return axisAttrs;\n }\n\n protected _getGridAttributes() {\n const spec = this._spec;\n return {\n alternateColor: spec.grid.alternateColor,\n alignWithLabel: spec.grid.alignWithLabel,\n style: isFunction(spec.grid.style)\n ? () => {\n return (datum: Datum, index: number) => {\n const style = spec.grid.style(datum.datum?.rawValue, index, datum.datum);\n return transformToGraphic(mergeSpec({}, this._theme.grid?.style, style));\n };\n }\n : transformToGraphic(spec.grid.style),\n subGrid:\n spec.subGrid.visible === false\n ? { visible: false }\n : {\n type: 'line',\n visible: spec.subGrid.visible,\n alternateColor: spec.subGrid.alternateColor,\n style: transformToGraphic(spec.subGrid.style)\n }\n };\n }\n\n protected _getLabelFormatMethod() {\n const { formatMethod, formatter } = this._spec.label;\n const { formatFunc } = getFormatFunction(formatMethod, formatter);\n return formatFunc ? (value: any, datum: any, index: number) => formatFunc(datum.rawValue, datum, formatter) : null;\n }\n\n protected abstract registerTicksTransform(): string;\n\n protected _initTickDataSet(options: T, index: number = 0) {\n registerDataSetInstanceParser(this._option.dataSet, 'scale', scaleParser);\n const name = this.registerTicksTransform();\n const tickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_ticks_${index}` })\n .parse(this._scales[index], {\n type: 'scale'\n })\n .transform(\n {\n type: name,\n options\n },\n false\n );\n return tickData;\n }\n\n protected _tickTransformOption(): ITickDataOpt {\n const tick = this._tick || {};\n const label = this._spec.label || {};\n const { tickCount, forceTickCount, tickStep, tickMode } = tick;\n const { style: labelStyle, formatMethod: labelFormatter, minGap: labelGap } = label;\n return {\n sampling: this._spec.sampling !== false,\n tickCount,\n forceTickCount,\n tickStep,\n tickMode,\n axisOrientType: this._orient,\n coordinateType: this._coordinateType,\n\n labelStyle,\n labelFormatter,\n labelGap\n };\n }\n\n addTransformToTickData(options: ITransformOptions, execute?: boolean) {\n this._tickData.forEach(tickData => {\n tickData?.getDataView()?.transform(options, execute);\n });\n }\n\n dataToPosition(values: any[]): number {\n return this._scale.scale(values);\n }\n\n getDatum(childGraphic?: IGraphic) {\n if (childGraphic && childGraphic.name === AXIS_ELEMENT_NAME.label) {\n return childGraphic.data;\n }\n\n if (this._axisMark) {\n return this._axisMark.getProduct()?.getGroupGraphicItem()?.attribute.items;\n }\n }\n}\n\nexport const registerAxis = () => {\n registerComponentMark();\n Factory.registerAnimation('axis', () => ({\n appear: {\n custom: GroupFadeIn\n },\n update: {\n custom: GroupTransition\n },\n exit: {\n custom: GroupFadeOut\n }\n }));\n};\n","import type { ICartesianHorizontal } from './interface/spec';\nimport { Bounds, last, type IBounds, type IBoundsLike, type Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IEffect, IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport type { IRegion } from '../../../region/interface';\nimport type { ICartesianAxisCommonSpec, IAxisHelper, ICartesianVertical } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport {\n isArray,\n isValid,\n isValidNumber,\n eachSeries,\n isNil,\n isUndefined,\n calcLayoutNumber,\n maxInArr,\n minInArr,\n clamp\n} from '../../../util';\nimport type { IOrientType, IRect } from '../../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { Factory } from '../../../core/factory';\nimport { isXAxis, getOrient, isZAxis, isYAxis, getCartesianAxisInfo, transformInverse } from './util/common';\nimport { ChartEvent } from '../../../constant/event';\nimport { LayoutLevel, DEFAULT_LAYOUT_RECT_LEVEL, LayoutZIndex, USER_LAYOUT_RECT_LEVEL } from '../../../constant/layout';\nimport { AxisSyncPlugin } from '../../../plugin/components/axis-sync/axis-sync';\nimport type { Datum, StringOrNumber } from '../../../typings/common';\nimport type { IPoint } from '../../../typings/coordinate';\nimport type { ILayoutRect, ILayoutType } from '../../../typings/layout';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\nimport type { AxisItem, LineAxisAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { getAxisItem, isValidCartesianAxis, shouldUpdateAxis } from '../util';\nimport type { IAxis, ITick } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { AxisComponent } from '../base-axis';\nimport type { IGraphic, IText } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createText } from '@visactor/vrender-core';\nimport type { ICartesianChartSpec } from '../../../chart/cartesian/interface';\n\nconst CartesianAxisPlugin = [AxisSyncPlugin];\n\nexport abstract class CartesianAxis\n extends AxisComponent\n implements IAxis\n{\n static type = ComponentTypeEnum.cartesianAxis;\n type = ComponentTypeEnum.cartesianAxis;\n name: string = ComponentTypeEnum.cartesianAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0.5;\n protected readonly _defaultBandInnerPadding = 0.1;\n protected readonly _defaultBandOuterPadding = 0.3;\n\n // 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n declare directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n\n layoutType: ILayoutType = 'region-relative';\n layoutZIndex: number = LayoutZIndex.Axis;\n layoutLevel: number = LayoutLevel.Axis;\n\n protected _dataSet: DataSet;\n\n layout3dBox?: { width: number; height: number; length: number };\n\n protected _orient: IOrientType = 'left';\n getOrient() {\n return this._orient;\n }\n\n protected getDefaultInteractive() {\n return true;\n }\n\n protected _autoIndentOnce: boolean = false;\n protected _hasAutoIndent: boolean = false;\n set autoIndentOnce(v: boolean) {\n this._autoIndentOnce = v;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tick: ITick | undefined = undefined;\n\n private _axisStyle: Partial;\n private _latestBounds: IBounds;\n private _verticalLimitSize: number;\n private _unitText: IText;\n\n protected _layoutCache: {\n width: number;\n height: number;\n _lastComputeOutBounds: IBoundsLike;\n } = { width: 0, height: 0, _lastComputeOutBounds: { x1: 0, x2: 0, y1: 0, y2: 0 } };\n\n // 内padding\n protected _innerOffset: { top: number; bottom: number; left: number; right: number } = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = getOrient(spec, ['z']);\n if (isZAxis(this._orient)) {\n this.layoutType = 'absolute';\n }\n this._dataSet = options.dataSet;\n this._coordinateType = 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n const axesSpec = chartSpec[this.specKey];\n if (!axesSpec) {\n return null;\n }\n\n const isHorizontal = chartSpec.direction === Direction.horizontal;\n\n if (!isArray(axesSpec)) {\n // 如果非法,或者只有一个z轴就不创建\n if (!isValidCartesianAxis(axesSpec)) {\n return null;\n }\n const { axisType, componentName } = getCartesianAxisInfo(axesSpec, isHorizontal);\n axesSpec.type = axisType;\n return [\n {\n spec: axesSpec,\n specPath: [this.specKey],\n specInfoPath: ['component', this.specKey, 0],\n type: componentName\n }\n ];\n }\n // 处理spec\n const zAxis = axesSpec.filter(s => s.orient === 'z')[0];\n let valid = true;\n if (zAxis) {\n const xAxis = axesSpec.filter(s => s.orient === 'bottom')[0];\n const yAxis = axesSpec.filter(s => isYAxis(s.orient))[0];\n // 必须有x和y,且x必须是bottom\n valid = axesSpec.length === 3 && xAxis && yAxis;\n }\n\n let axesSpecList = axesSpec.map((spec, index) => ({ spec, index }));\n if (!valid) {\n axesSpecList = axesSpecList.filter(({ spec }) => spec.orient !== 'z');\n }\n const specInfos: IModelSpecInfo[] = [];\n axesSpecList.forEach(({ spec, index }) => {\n if (!isValidCartesianAxis(spec)) {\n return;\n }\n const { axisType, componentName } = getCartesianAxisInfo(spec, isHorizontal);\n spec.type = axisType;\n specInfos.push({\n spec,\n specPath: [this.specKey, index],\n specInfoPath: ['component', this.specKey, index],\n type: componentName\n });\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout.autoIndent = this._spec.autoIndent !== false;\n this._layout.layoutOrient = this._orient;\n }\n\n setLayout3dBox(box3d: { width: number; height: number; length: number }) {\n this.layout3dBox = box3d;\n }\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n const orient = this.getOrient();\n if (isXAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else if (isYAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n } else if (isZAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getZAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n\n protected getNewScaleRange() {\n const { width, height } = this.getLayoutRect();\n const { left, right, top, bottom } = this._innerOffset;\n let newRange: number[] = [];\n if (isXAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n }\n } else if (isZAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n this._scale.range(newRange);\n }\n } else {\n if (isValidNumber(height)) {\n newRange = this._inverse ? [top, height - bottom] : [height - bottom, top];\n }\n }\n\n return newRange;\n }\n\n protected updateScaleRange() {\n let isScaleChange = false;\n\n const newRange = this.getNewScaleRange();\n const range = this._scale.range();\n if (newRange.length === range.length && newRange.every((value, index) => value === range[index])) {\n isScaleChange = false; // No change\n } else {\n isScaleChange = true; // Change detected\n this._scale.range(newRange);\n }\n\n return isScaleChange;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.pluginService?.load(CartesianAxisPlugin.map(P => new P()));\n this.callPlugin(plugin => {\n this.pluginService && plugin.onInit && plugin.onInit(this.pluginService, this);\n });\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n const isX = isXAxis(this.getOrient());\n if (isX) {\n if (isUndefined(this._spec.maxHeight)) {\n this._spec.maxHeight = '30%';\n }\n } else if (isUndefined(this._spec.maxWidth)) {\n this._spec.maxWidth = '30%';\n }\n\n const axisStyle: any = this._getAxisAttributes();\n axisStyle.label.formatMethod = this._getLabelFormatMethod();\n axisStyle.verticalFactor = this.getOrient() === 'top' || this.getOrient() === 'right' ? -1 : 1;\n this._axisStyle = axisStyle;\n }\n this._tick = this._spec.tick;\n const chartSpec = this._option.getChart()?.getSpec() as ICartesianChartSpec;\n this._inverse = transformInverse(this._spec, chartSpec?.direction === Direction.horizontal);\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n // 计算innerOffset\n if (!isZAxis(this.getOrient()) && (this._spec as ICartesianVertical | ICartesianHorizontal).innerOffset) {\n const spec = this._spec as ICartesianVertical | ICartesianHorizontal;\n if (isYAxis(this.getOrient())) {\n ['top', 'bottom'].forEach(orient => {\n this._innerOffset[orient as 'top' | 'bottom'] = calcLayoutNumber(\n (spec as ICartesianVertical).innerOffset[orient as 'top' | 'bottom'],\n viewRect.height,\n viewRect\n );\n });\n } else {\n ['left', 'right'].forEach(orient => {\n this._innerOffset[orient as 'left' | 'right'] = calcLayoutNumber(\n (spec as ICartesianHorizontal).innerOffset[orient as 'left' | 'right'],\n viewRect.width,\n viewRect\n );\n });\n }\n }\n }\n\n protected getSeriesStatisticsField(s: ICartesianSeries) {\n let f: string[];\n if (isXAxis(this.getOrient())) {\n f = s.fieldX;\n } else if (isZAxis(this.getOrient())) {\n f = s.fieldZ;\n } else {\n f = s.fieldY;\n }\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n noDecimals: this._tick?.noDecimals,\n labelLastVisible: this._spec.label?.lastVisible,\n labelFirstVisible: this._spec.label?.firstVisible,\n labelFlush: this._spec.label?.flush\n } as ICartesianTickDataOpt;\n }\n\n protected axisHelper(): IAxisHelper {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n return {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse === true,\n getSpec: () => this._spec\n };\n }\n\n /** LifeCycle API**/\n afterCompile() {\n const product = this._axisMark?.getProduct();\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n // 布局结束之后再进行插件的调用\n // 插件在布局后\n if (isXAxis(this.getOrient())) {\n this.callPlugin(plugin => {\n this.pluginService &&\n plugin.onDidLayoutHorizontal &&\n plugin.onDidLayoutHorizontal(this.pluginService, this);\n });\n } else {\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidLayoutVertical && plugin.onDidLayoutVertical(this.pluginService, this);\n });\n }\n\n // 更新单位的显示位置\n if (this._unitText) {\n const { x, y } = this.getLayoutStartPoint();\n const pos = isXAxis(this._orient)\n ? {\n x: maxInArr(this._scale.range()) + x,\n y\n }\n : {\n x,\n y: minInArr(this._scale.range()) + y\n };\n\n this._unitText.setAttributes(pos);\n }\n }\n });\n }\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidCompile && plugin.onDidCompile(this.pluginService, this);\n });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n protected collectScale() {\n const scales: IBaseScale[] = [];\n eachSeries(\n this._regions,\n s => {\n scales.push(\n this.getOrient() === 'left' || this.getOrient() === 'right'\n ? (s as ICartesianSeries).scaleY\n : (s as ICartesianSeries).scaleX\n );\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return scales;\n }\n\n protected collectSeriesField(depth: number, series: ICartesianSeries) {\n let field: string | string[];\n if (depth > 0) {\n field = series.getGroups()?.fields?.[depth];\n } else {\n if (isXAxis(this.getOrient())) {\n field = series.getSpec().x2Field ? [...series.fieldX, series.fieldX2] : series.fieldX;\n } else if (isZAxis(this.getOrient())) {\n field = series.fieldZ;\n } else {\n field = series.getSpec().y2Field ? [...series.fieldY, series.fieldY2] : series.fieldY;\n }\n }\n return field;\n }\n\n protected updateSeriesScale() {\n const orient = this.getOrient();\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleX(this._scale);\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else if (isYAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleY(this._scale);\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n } else if (isZAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getZAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleZ(this._scale);\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n // protected _seriesUpdateAfterScaleChange(updateInfo: { domain?: boolean; range?: boolean; type?: boolean }) {\n // const orient = this.getOrient();\n // eachSeries(\n // this._regions,\n // s => {\n // if (isXAxis(orient)) {\n // (s as ICartesianSeries).xAxisUpdated(updateInfo);\n // } else if (isYAxis(orient)) {\n // (s as ICartesianSeries).yAxisUpdated(updateInfo);\n // } else if (isZAxis(orient)) {\n // (s as ICartesianSeries).zAxisUpdated(updateInfo);\n // }\n // },\n // {\n // userId: this._seriesUserId,\n // specIndex: this._seriesIndex\n // }\n // );\n // }\n\n _transformLayoutPosition = (pos: Partial) => {\n let { x, y } = pos;\n if (isValidNumber(x)) {\n x += Number(this._orient === 'left') * this.getLayoutRect().width;\n }\n if (isValidNumber(y)) {\n y += Number(this._orient === 'top') * this.getLayoutRect().height;\n }\n return { x, y };\n };\n\n _transformLayoutRect = (result: ILayoutRect) => {\n if (!this._visible) {\n return result;\n }\n const bounds = this._latestBounds.clone().translate(-this.getLayoutStartPoint().x, -this.getLayoutStartPoint().y);\n switch (this._layout.layoutOrient) {\n case 'left':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x1 < 0 ? -bounds.x1 : 0;\n }\n break;\n case 'right':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x2 > 0 ? bounds.x2 : 0;\n }\n break;\n case 'top':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y1 < 0 ? -bounds.y1 : 0;\n }\n break;\n case 'bottom':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y2 > 0 ? bounds.y2 : 0;\n }\n break;\n default:\n break;\n }\n result.width = Math.ceil(result.width);\n result.height = Math.ceil(result.height);\n return this._layout.setRectInSpec(this._layoutCacheProcessing(result));\n };\n /**\n * bounds 预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n let result: IBoundsLike = { x1: 0, y1: 0, x2: 0, y2: 0 };\n if (!this._visible) {\n return result;\n }\n this._verticalLimitSize = isXAxis(this.getOrient()) ? rect.height : rect.width;\n\n this.setLayoutRect(rect);\n const isChanged = this.updateScaleRange();\n // 防止一直没有计算latestData\n if (isChanged || !isArray(this.getTickData()?.getLatestData())) {\n this.computeData('range');\n }\n const context = { skipLayout: false };\n const isX = isXAxis(this.getOrient());\n if (this.pluginService) {\n isX\n ? this.callPlugin(plugin => {\n plugin.onWillLayoutHorizontal && plugin.onWillLayoutHorizontal(this.pluginService, context, this);\n })\n : this.callPlugin(plugin => {\n plugin.onWillLayoutVertical && plugin.onWillLayoutVertical(this.pluginService, context, this);\n });\n }\n const product = this._axisMark.getProduct();\n let hasBounds = false;\n\n if (!context.skipLayout) {\n const attrs = this._getUpdateAttribute(true);\n const axisComponent = product.getGroupGraphicItem();\n\n const spec = mergeSpec({ ...this.getLayoutStartPoint() }, this._axisStyle, attrs, { line: { visible: false } });\n let updateBounds = axisComponent.getBoundsWithoutRender(spec);\n\n if (updateBounds.empty()) {\n // 如果包围盒为空,设置为布局起点,宽高为0的包围盒\n updateBounds = new Bounds().set(spec.x, spec.y, spec.x, spec.y);\n }\n\n hasBounds = true;\n this._latestBounds = updateBounds;\n // 因为轴单位在某些区域显示的时候,是不参与轴某个方向的包围盒计算的,\n // 所以不太合适放在轴组件内支持,所以就在 VChart 层的轴组件上通过添加 text 图元支持\n result = this._appendAxisUnit(updateBounds, isX);\n }\n\n if (!hasBounds) {\n this._latestBounds = product.getBounds();\n }\n return result;\n }\n\n positionToData(pos: number, isViewPos?: boolean) {\n const isX = isXAxis(this.getOrient());\n if (isViewPos) {\n pos -= isX ? this.getLayoutStartPoint().x : this.getLayoutStartPoint().y;\n }\n\n if (this._innerOffset) {\n pos = isX\n ? clamp(pos, this._innerOffset.left, this.getLayoutRect().width - this._innerOffset.right)\n : clamp(pos, this._innerOffset.top, this.getLayoutRect().height - this._innerOffset.bottom);\n }\n const range = this._scale.range();\n\n if ((pos - range[0]) * (pos - last(range)) > 0) {\n return null;\n }\n\n return this._scale.invert(pos);\n }\n\n private _getTitleLimit(isX: boolean) {\n const titleSpec = this._spec.title;\n if (titleSpec.visible && isNil(titleSpec.style?.maxLineWidth)) {\n const angle = this._axisStyle.title?.angle ?? titleSpec.style?.angle ?? 0;\n if (isX) {\n const width = this.getLayoutRect().width;\n const cosValue = Math.abs(Math.cos(angle));\n // VRender 接收到的limit是考虑角度计算后的宽度\n // TODO:还需要考虑angle后,高度是否太高,综合计算一个limit,比如高度不能超过图表整体高度的1/4\n return cosValue < 1e-6 ? Infinity : width / cosValue;\n }\n const height = this.getLayoutRect().height;\n const sinValue = Math.abs(Math.sin(angle));\n\n // TODO:还需要考虑angle后,宽度是否太宽,综合计算一个limit,比如宽度度不能超过图表整体宽度的1/4\n return sinValue < 1e-6 ? Infinity : height / sinValue;\n }\n\n return null;\n }\n\n protected _getUpdateAttribute(ignoreGrid: boolean) {\n // 获取更新的坐标轴属性\n let regionHeight = 0;\n let regionWidth = 0;\n\n if (!ignoreGrid) {\n const regions = this.getRegions();\n let { x: minX, y: minY } = regions[0].getLayoutStartPoint();\n let maxX = minX + regions[0].getLayoutRect().width;\n let maxY = minY + regions[0].getLayoutRect().height;\n\n for (let index = 1; index < regions.length; index++) {\n const region = regions[index];\n const { x, y } = region.getLayoutStartPoint();\n const { width, height } = region.getLayoutRect();\n\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, width + x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, height + y);\n }\n regionHeight = Math.abs(maxY - minY);\n regionWidth = Math.abs(maxX - minX);\n }\n\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this._orient);\n const isY = isYAxis(this._orient);\n const isZ = isZAxis(this._orient);\n const depth = this.layout3dBox ? this.layout3dBox.length : 0;\n let end = { x: 0, y: 0 };\n let gridLength = regionHeight;\n let axisLength = width;\n\n if (isX) {\n end = { x: width, y: 0 };\n } else if (isY) {\n end = { x: 0, y: height };\n gridLength = regionWidth;\n axisLength = height;\n } else if (isZ) {\n end = { x: depth, y: 0 };\n }\n\n const items = this.getLabelItems(axisLength);\n const attrs: any = {\n start: { x: 0, y: 0 },\n end,\n title: {\n text: this._spec.title.text || this._dataFieldText,\n maxWidth: this._getTitleLimit(isX)\n },\n items\n };\n if (!ignoreGrid) {\n attrs.grid = {\n type: 'line',\n start: { x: 0, y: 0 },\n end,\n items: items[0],\n verticalFactor: this._axisStyle.verticalFactor,\n depth,\n length: gridLength\n };\n }\n\n if (isZ) {\n const directionStr = this.directionStr ?? 'r2l';\n const depthZ = this.layout3dBox ? this.layout3dBox.width : 0;\n let anchor3d = [0, 0];\n let alpha = -Math.PI / 2;\n let z = 0;\n if (directionStr === 'l2r') {\n z = this.layout3dBox.length;\n anchor3d = [0, 0, 0];\n alpha = Math.PI / 2;\n }\n attrs.z = z;\n attrs.alpha = alpha;\n attrs.anchor3d = anchor3d;\n\n if (!ignoreGrid) {\n attrs.grid.depth = depthZ;\n }\n } else {\n let verticalMinSize = isX ? this.layout.minHeight : this.layout.minWidth;\n if (\n (isX && this._layout.layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL) ||\n (isY && this._layout.layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL)\n ) {\n verticalMinSize = this._verticalLimitSize;\n }\n\n attrs.verticalLimitSize = this._verticalLimitSize;\n attrs.verticalMinSize = verticalMinSize;\n attrs.label = {\n overflowLimitLength: this._getLabelOverflowLimit(isX)\n };\n }\n\n return attrs;\n }\n\n protected getLabelItems(length: number) {\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n return [\n tickLatestData\n .map((obj: Datum) => {\n const normalizedValue = this._getNormalizedValue([obj.value], length);\n return getAxisItem(obj.value, normalizedValue);\n })\n .filter((entry: AxisItem) => {\n const { value, rawValue } = entry;\n const domain = this._scale.domain();\n if (this.getSpec().type === 'log') {\n return value >= 0 && value <= 1;\n }\n if (isContinuous(this._scale.type)) {\n return rawValue >= domain[0] && rawValue <= last(domain);\n }\n return domain.includes(rawValue);\n })\n ];\n }\n return [];\n }\n\n protected initEvent() {\n super.initEvent();\n\n if (this.visible) {\n // 过程: dolayout -> getBoundsInRect: update tick attr -> forceLayout -> updateLayoutAttr: update tick attr -> chart layout -> scale update -> mark encode\n // 问题: chart layout之后, scale发生变化, 导致tick 和 mark position 不同步\n // 解决方案: chart layout 之后重新计算tick位置\n this.event.on(ChartEvent.layoutEnd, this._updateAxisLayout);\n // 布局结束之后处理 0 基线问题\n this.event.on(ChartEvent.layoutEnd, this._fixAxisOnZero);\n // 图表resize后,需要正常布局,清除布局缓存\n this.event.on(ChartEvent.layoutRectUpdate, () => {\n this._clearLayoutCache();\n });\n }\n }\n\n protected _updateAxisLayout = () => {\n const startPoint = this.getLayoutStartPoint();\n const { grid: updateGridAttrs, ...updateAxisAttrs } = this._getUpdateAttribute(false);\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素\n const axisAttrs = mergeSpec({ x: startPoint.x, y: startPoint.y }, this._axisStyle, updateAxisAttrs);\n axisProduct.encode(axisAttrs);\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素\n gridProduct.encode(mergeSpec({ x: startPoint.x, y: startPoint.y }, this._getGridAttributes(), updateGridAttrs));\n }\n };\n\n protected _getNormalizedValue(values: any[], length: number) {\n return length === 0 ? 0 : this.dataToPosition(values) / length;\n }\n\n private _fixAxisOnZero = () => {\n // 在布局结束之后调整坐标轴零基线\n const { onZero, visible } = this._spec.domainLine;\n if (this.visible && onZero && visible !== false) {\n const { onZeroAxisId, onZeroAxisIndex } = this._spec.domainLine;\n const axesComponents = this._option.getComponentsByKey('axes') as IAxis[];\n const isX = isXAxis(this.getOrient());\n\n // 判断坐标轴是否可用\n const isValidAxis = (item: any) => {\n return (\n (isX ? !isXAxis(item.getOrient()) : isXAxis(item.getOrient())) &&\n isContinuous(item.getScale().type) &&\n (item.getTickData()\n ? item\n .getTickData()\n .getLatestData()\n ?.find((d: any) => d.value === 0)\n : item.getScale().domain()[0] <= 0 && last(item.getScale().domain()) >= 0)\n );\n };\n const relativeAxes = axesComponents.filter(item => isValidAxis(item));\n if (relativeAxes.length) {\n let bindAxis;\n if (isValid(onZeroAxisId)) {\n bindAxis = relativeAxes.find(axis => axis.id === onZeroAxisId);\n } else if (isValid(onZeroAxisIndex)) {\n const indexAxis = axesComponents[onZeroAxisIndex];\n if (isValidAxis(indexAxis)) {\n bindAxis = indexAxis;\n }\n } else {\n // 默认绑定第一条的相对坐标轴\n bindAxis = relativeAxes[0];\n }\n if (bindAxis) {\n const axisMark = this._axisMark.getProduct();\n // 找到了绑定的 axis,获取基线的位置\n const position = bindAxis.valueToPosition(0);\n // 获取偏移量\n if (isX) {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dy:\n this._orient === 'bottom'\n ? -(\n (bindAxis.getInverse() ? bindAxis.getScale().range()[1] : bindAxis.getScale().range()[0]) -\n position\n )\n : position\n }\n });\n } else {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dx:\n this._orient === 'left'\n ? position\n : -(\n (bindAxis.getInverse() ? bindAxis.getScale().range()[0] : bindAxis.getScale().range()[1]) -\n position\n )\n }\n });\n }\n }\n }\n }\n };\n\n protected _layoutCacheProcessing(rect: ILayoutRect) {\n ['width', 'height'].forEach(key => {\n if (rect[key as 'width' | 'height'] < this._layoutCache[key as 'width' | 'height']) {\n rect[key as 'width' | 'height'] = this._layoutCache[key as 'width' | 'height'];\n } else {\n this._layoutCache[key as 'width' | 'height'] = rect[key as 'width' | 'height'];\n }\n });\n\n // outBounds\n if (this._autoIndentOnce && this._hasAutoIndent) {\n // use cache\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'];\n });\n } else {\n this._hasAutoIndent = true;\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n if (\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] <\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2']\n ) {\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'];\n } else {\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'];\n }\n });\n }\n\n return rect;\n }\n\n _clearLayoutCache() {\n this._hasAutoIndent = false;\n this._layoutCache.width = 0;\n this._layoutCache.height = 0;\n this._layoutCache._lastComputeOutBounds = { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n\n onDataUpdate(): void {\n // clear layout cache\n this._clearLayoutCache();\n }\n\n private _appendAxisUnit(bounds: IBounds, isX: boolean) {\n if (this._spec.unit && this._spec.unit.visible) {\n const { text, style } = this._spec.unit;\n let pos;\n let unitTextStyle: any;\n const { x, y } = this.getLayoutStartPoint();\n if (isX) {\n pos = {\n x: maxInArr(this._scale.range()) + x,\n y\n };\n unitTextStyle = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n } else {\n pos = {\n x,\n y: minInArr(this._scale.range()) + y\n };\n unitTextStyle = {\n textAlign: this._orient === 'left' ? 'left' : 'right',\n textBaseline: 'bottom'\n };\n }\n\n unitTextStyle = {\n ...unitTextStyle,\n ...style,\n x: pos.x,\n y: pos.y,\n text\n };\n if (this._unitText) {\n this._unitText.setAttributes(unitTextStyle);\n } else {\n this._unitText = createText(unitTextStyle);\n this._unitText.name = 'axis-unit';\n this.getContainer()?.add(this._unitText);\n }\n\n // 左轴\n const textBounds = this._unitText.AABBBounds;\n if (!isX) {\n bounds.x1 += textBounds.x1 < bounds.x1 ? textBounds.x1 - bounds.x1 : 0;\n bounds.y1 += textBounds.y1 < bounds.y1 ? textBounds.y1 - bounds.y1 : 0;\n } else {\n bounds.x2 += textBounds.x2 > bounds.x2 ? textBounds.x2 - bounds.x2 : 0;\n bounds.y2 += textBounds.y2 > bounds.y2 ? textBounds.y2 - bounds.y2 : 0;\n }\n }\n\n return bounds;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._unitText ? [this._unitText] : [];\n }\n\n private _getLabelOverflowLimit(isX: boolean) {\n if (isX && this._spec.label?.visible !== false && this._spec.label?.autoLimit === true) {\n const axesComponents = this._option.getComponentsByKey('axes') as IAxis[];\n const relativeRegions = this.getRegions();\n const relativeAxes = axesComponents.filter(item => {\n const orient = item.getOrient();\n return (\n (orient === 'left' || orient === 'right') &&\n item.getRegions().some(region => relativeRegions.includes(region))\n );\n });\n\n let leftLimitLength = 0;\n let rightLimitLength = 0;\n const startX = this.getLayoutStartPoint().x;\n const endX = startX + this.getLayoutRect().width;\n relativeAxes.forEach(axis => {\n const relativeStartX = axis.getLayoutStartPoint().x;\n if (axis.getOrient() === 'left' && relativeStartX === startX) {\n const leftAxisWidth = axis.getLayoutRect().width;\n leftLimitLength = Math.max(leftLimitLength, leftAxisWidth);\n } else if (relativeStartX === endX) {\n const rightAxisWidth = axis.getLayoutRect().width;\n rightLimitLength = Math.max(rightLimitLength, rightAxisWidth);\n }\n });\n return { left: leftLimitLength, right: rightLimitLength };\n }\n return undefined;\n }\n}\n","import type { BandScale } from '@visactor/vscale';\nimport type { Dict } from '@visactor/vutils';\nimport { array, isArray } from '@visactor/vutils';\nimport type { Datum, IOrientType, IPolarOrientType, StringOrNumber } from '../../../typings';\nimport type { IEvent } from '../../../event/interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IModel } from '../../../model/interface';\nimport type { IAxisLocationCfg } from '../interface';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { AxisItem } from '@visactor/vrender-components';\nimport { getAxisItem } from '../util';\n\nexport interface BandAxisMixin {\n _orient: IOrientType | IPolarOrientType;\n _option: any;\n _scale: BandScale;\n _scales: BandScale[];\n _spec: any;\n _tick: any;\n _tickData: CompilableData[];\n _defaultBandPosition: number;\n _defaultBandInnerPadding: number;\n _defaultBandOuterPadding: number;\n event: IEvent;\n isSeriesDataEnable: () => boolean;\n collectData: (depth: number, rawData?: boolean) => { min: number; max: number; values: any[] }[];\n computeDomain: (data: { min: number; max: number; values: any[] }[]) => StringOrNumber[];\n transformScaleDomain: () => void;\n _initTickDataSet: (options: any, index?: number) => any;\n _tickTransformOption: () => any;\n _forceLayout: () => void;\n _getNormalizedValue: (values: any[], length: number) => number;\n}\n\nexport class BandAxisMixin {\n private _tickDataMap: Dict;\n protected _initData() {\n if (this._spec.showAllGroupLayers && this._scales.length > 1) {\n // 显示所有分组层级\n for (let layer = 0; layer < this._scales.length; layer++) {\n const layers = this._spec.layers ?? [];\n const layerConfig = layers[this._scales.length - 1 - layer] || {};\n if (layerConfig.visible !== false && layerConfig.tickCount !== 0 && layerConfig.forceTickCount !== 0) {\n const tickData = this._initTickDataSet(\n {\n ...this._tickTransformOption(),\n ...layerConfig\n },\n layer\n );\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData.push(compilableData);\n\n if (!this._tickDataMap) {\n this._tickDataMap = {};\n }\n this._tickDataMap[layer] = compilableData;\n }\n }\n } else {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData = [compilableData];\n this._tickDataMap = {\n 0: compilableData\n };\n }\n }\n protected _rawDomainIndex: { [key: string | number | symbol]: number }[] = [];\n\n dataToPosition(values: any[], cfg: IAxisLocationCfg = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n return (\n position + bandScale.bandwidth() * (cfg.bandPosition ?? this._spec.bandPosition ?? this._defaultBandPosition)\n );\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n updateGroupScaleRange() {\n let parentScale = this._scale;\n this._scales.forEach((scale, i) => {\n if (i > 0) {\n scale.range([0, parentScale.bandwidth()]);\n parentScale = scale;\n }\n });\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n\n calcScales(DEFAULT_BAND_INNER_PADDING: number, DEFAULT_BAND_OUTER_PADDING: number) {\n const { bandPadding, paddingInner, paddingOuter } = this._spec;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? DEFAULT_BAND_INNER_PADDING, true)\n .paddingOuter(_paddingOuter ?? _padding ?? DEFAULT_BAND_OUTER_PADDING, true);\n }\n }\n computeBandDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n if (!data.length) {\n return [];\n }\n\n // 性能优化 9.13\n if (data.length === 1) {\n return data[0].values;\n }\n const tempSet = new Set();\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].values.length; j++) {\n tempSet.add(data[i].values[j]);\n }\n }\n return Array.from(tempSet) as StringOrNumber[];\n }\n\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n if (!this._rawDomainIndex?.length && this._scales.length) {\n this._updateRawDomain();\n }\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i);\n const domain = this.computeBandDomain(data);\n this._scales[i].domain(domain.sort((a, b) => this._rawDomainIndex[i][a] - this._rawDomainIndex[i][b]));\n }\n }\n this.transformScaleDomain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as unknown as IModel });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as unknown as IModel, value: 'domain' });\n }\n\n protected getLabelItems(length: number) {\n const labelItems: Dict[][] = [];\n let preData: any[] = [];\n\n this._scales.forEach((scale, index) => {\n const tickData = this._tickDataMap[index];\n\n // 因为多层级标签会依赖上一层标签的分组值定位,所以如果上一层标签没有内容,那么就直接获取 bandScale 的 domain()\n const isTickDataHaveData = tickData?.getLatestData()?.length;\n const ticks: string[] = isTickDataHaveData\n ? tickData.getLatestData().map((obj: Datum) => obj.value)\n : scale.domain();\n if (ticks && ticks.length) {\n if (preData && preData.length) {\n const currentLabelItems: any[] = [];\n const curData: any[] = [];\n preData.forEach(value => {\n ticks.forEach(tick => {\n const values = array(value).concat(tick);\n curData.push(values);\n\n if (isTickDataHaveData) {\n const axisItem = getAxisItem(tick, this._getNormalizedValue(values, length));\n currentLabelItems.push(axisItem);\n }\n });\n });\n if (isTickDataHaveData) {\n labelItems.push(currentLabelItems.filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1));\n }\n preData = curData;\n } else {\n ticks.forEach(tick => {\n preData.push(tick);\n });\n if (isTickDataHaveData) {\n labelItems.push(\n tickData\n .getLatestData()\n .map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n .filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1)\n );\n }\n }\n }\n });\n\n return labelItems.reverse();\n }\n\n protected _updateRawDomain() {\n // 默认值设置了无效?\n this._rawDomainIndex = [];\n\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i, true);\n const domain = this.computeBandDomain(data);\n this._rawDomainIndex[i] = {};\n domain.forEach((d, _i) => (this._rawDomainIndex[i][d] = _i));\n }\n }\n }\n\n protected _clearRawDomain() {\n this._rawDomainIndex = [];\n }\n}\n","import isValidNumber from './common/isValidNumber';\nimport isArray from './common/isArray';\nimport isObject from './common/isObject';\n\nexport type IPadding = {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n};\n\n/**\n * 将 padding 转换为通用的格式([上,右,下,左])\n * @param padding\n * @return [ top, right, bottom, left ]\n */\nexport function normalizePadding(padding: number | number[] | IPadding) {\n if (isValidNumber(padding)) {\n return [padding, padding, padding, padding];\n }\n\n if (isArray(padding)) {\n const length = padding.length;\n\n if (length === 1) {\n const paddingValue = padding[0];\n return [paddingValue, paddingValue, paddingValue, paddingValue];\n }\n\n if (length === 2) {\n const [vertical, horizontal] = padding;\n return [vertical, horizontal, vertical, horizontal];\n }\n\n if (length === 3) {\n const [top, horizontal, bottom] = padding;\n return [top, horizontal, bottom, horizontal];\n }\n\n if (length === 4) {\n return padding;\n }\n }\n\n if (isObject(padding)) {\n const { top = 0, right = 0, bottom = 0, left = 0 } = padding as IPadding;\n return [top, right, bottom, left];\n }\n\n return [0, 0, 0, 0];\n}\n","import { registerGroup, registerLine, registerPolygon, registerSymbol, registerArc } from '@visactor/vrender-kits';\n\nexport function loadSegmentComponent() {\n registerGroup();\n registerLine();\n registerPolygon();\n registerSymbol();\n}\n\nexport function loadArcSegmentComponent() {\n registerGroup();\n registerLine();\n registerArc();\n registerSymbol();\n}\n","/**\n * @description 标签组件\n */\nimport { array, flattenArray, isArray, isEmpty, isValidNumber, merge } from '@visactor/vutils';\nimport type { ILine, ISymbol } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { ILineGraphicWithCornerRadius, SegmentAttributes, SymbolAttributes } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSegmentComponent } from './register';\nimport { normalizeAngle } from '@visactor/vutils';\n\nloadSegmentComponent();\nexport class Segment extends AbstractComponent> {\n name = 'segment';\n key = 'segment';\n startSymbol?: ISymbol;\n endSymbol?: ISymbol;\n lines?: ILine[] = [];\n // animate?: (startSymbol, endSymbol, lines) => void;\n\n protected _startAngle!: number;\n /**\n * 外部获取segment起点正方向\n */\n getStartAngle() {\n return normalizeAngle(this._startAngle);\n }\n\n protected _endAngle!: number;\n /**\n * 外部获取segment终点正方向\n */\n getEndAngle() {\n return normalizeAngle(this._endAngle);\n }\n\n protected _mainSegmentPoints: Point[]; // 组成主线段的点\n getMainSegmentPoints() {\n return this._mainSegmentPoints;\n }\n\n static defaultAttributes: Partial = {\n visible: true,\n lineStyle: {\n lineWidth: 1,\n stroke: '#000'\n },\n startSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n },\n endSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n }\n };\n\n constructor(attributes: SegmentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Segment.defaultAttributes, attributes));\n }\n\n protected render() {\n this.removeAllChild(true);\n this._reset();\n const {\n // points,\n startSymbol,\n endSymbol,\n lineStyle,\n state,\n visible = true,\n multiSegment,\n mainSegmentIndex\n } = this.attribute as SegmentAttributes;\n\n if (!visible) {\n return;\n }\n\n // 计算线的起点和终点角度\n // 计算角度的原因:\n // 1. segment symbol的自动旋转提供参数\n // 2. 使用segment时,需要根据line的角度对附加元素进行自动旋转(比如:markLine的标签, markPoint的装饰线)\n this._computeLineAngle();\n\n // 绘制start和end symbol\n const points = this._getMainSegmentPoints();\n const startSymbolShape = this._renderSymbol(startSymbol as SymbolAttributes, points, 'start');\n const endSymbolShape = this._renderSymbol(endSymbol as SymbolAttributes, points, 'end');\n\n this.startSymbol = startSymbolShape;\n this.endSymbol = endSymbolShape;\n\n if (multiSegment) {\n const points = [...this.attribute.points];\n if (isValidNumber(mainSegmentIndex)) {\n points[mainSegmentIndex] = this._clipPoints(points[mainSegmentIndex] as Point[]);\n } else {\n const clipPoints = this._clipPoints(flattenArray(points) as Point[]);\n points[0][0] = clipPoints[0];\n (points[points.length - 1] as Point[])[(points[points.length - 1] as Point[]).length - 1] =\n clipPoints[clipPoints.length - 1];\n }\n points.forEach((point: Point[], index) => {\n const line = graphicCreator.line({\n points: point,\n ...(isArray(lineStyle) ? lineStyle[index] ?? lineStyle[lineStyle.length - 1] : lineStyle),\n fill: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line' + index);\n if (!isEmpty(state?.line)) {\n line.states = isArray(state.line) ? state.line[index] ?? state.line[state.line.length - 1] : state.line;\n }\n this.add(line);\n this.lines.push(line);\n });\n } else {\n // 如果配置了cornerRadius, 则绘制polygon, 否则绘制line\n let lineCreator = graphicCreator.line;\n if ((array(lineStyle)[0] as ILineGraphicWithCornerRadius).cornerRadius) {\n lineCreator = graphicCreator.polygon;\n }\n const line = lineCreator({\n points: this._clipPoints(this.attribute.points as Point[]),\n ...array(lineStyle)[0],\n fill: false,\n closePath: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line');\n if (!isEmpty(state?.line)) {\n line.states = [].concat(state.line)[0];\n }\n this.add(line);\n this.lines.push(line);\n }\n }\n\n protected _computeStartRotate(angle: number) {\n return angle + Math.PI / 2;\n }\n\n protected _computeEndRotate(angle: number) {\n return angle + Math.PI / 2;\n }\n\n protected _renderSymbol(attribute: SymbolAttributes, points: Point[], dim: string): ISymbol | undefined {\n if (!points.length) {\n return;\n }\n const { autoRotate = true } = attribute;\n let symbol;\n if (attribute && attribute.visible) {\n const startAngle = this.getStartAngle();\n const endAngle = this.getEndAngle();\n const { state } = this.attribute as SegmentAttributes;\n const start = points[0];\n const end = points[points.length - 1];\n const { refX = 0, refY = 0, refAngle = 0, style, symbolType, size = 12 } = attribute;\n let position;\n let rotate;\n if (dim === 'start') {\n position = {\n x:\n start.x +\n (isValidNumber(startAngle) ? refX * Math.cos(startAngle) + refY * Math.cos(startAngle - Math.PI / 2) : 0),\n y:\n start.y +\n (isValidNumber(startAngle) ? refX * Math.sin(startAngle) + refY * Math.sin(startAngle - Math.PI / 2) : 0)\n };\n rotate = this._computeStartRotate(this._startAngle); // @chensiji - 加Math.PI / 2是因为:默认symbol的包围盒垂直于line,所以在做自动旋转时需要在line正方向基础上做90度偏移\n } else {\n position = {\n x:\n end.x + (isValidNumber(endAngle) ? refX * Math.cos(endAngle) + refY * Math.cos(endAngle - Math.PI / 2) : 0),\n y: end.y + (isValidNumber(endAngle) ? refX * Math.sin(endAngle) + refY * Math.sin(endAngle - Math.PI / 2) : 0)\n };\n rotate = this._computeEndRotate(this._endAngle);\n }\n\n symbol = graphicCreator.symbol({\n ...position,\n symbolType: symbolType as string,\n size,\n angle: autoRotate ? rotate + refAngle : 0,\n strokeBoundsBuffer: 0,\n ...style\n });\n symbol.name = `${this.name}-${dim}-symbol`;\n symbol.id = this._getNodeId(`${dim}-symbol`);\n\n // 兼容旧逻辑, state.symbol同时应用到startSymbol和endSymbol\n if (!isEmpty(state?.symbol)) {\n symbol.states = state.symbol;\n }\n\n // 新逻辑, state.startSymbol和state.endSymbol做不同匹配\n if (dim === 'start') {\n if (!isEmpty(state?.startSymbol)) {\n symbol.states = state.startSymbol;\n }\n } else {\n if (!isEmpty(state?.endSymbol)) {\n symbol.states = state.endSymbol;\n }\n }\n\n this.add(symbol);\n }\n return symbol;\n }\n\n private _getMainSegmentPoints(): Point[] {\n if (this._mainSegmentPoints) {\n return this._mainSegmentPoints;\n }\n const { points: originPoints, multiSegment, mainSegmentIndex } = this.attribute as SegmentAttributes;\n\n let points: Point[];\n // 需要做下约束判断\n if (multiSegment) {\n if (isValidNumber(mainSegmentIndex)) {\n points = originPoints[mainSegmentIndex] as Point[];\n } else {\n points = flattenArray(originPoints);\n }\n } else {\n points = originPoints as Point[];\n }\n this._mainSegmentPoints = points;\n // 去除重复的点, 目前发现计算startAngle和endAngle时会有问题\n\n return points;\n }\n\n private _clipPoints(points: Point[]) {\n const { startSymbol = {} as SegmentAttributes['startSymbol'], endSymbol = {} as SegmentAttributes['endSymbol'] } =\n this.attribute as SegmentAttributes;\n // 通过改变line起点和终点的方式达到symbol在fill为false的情况下,也可以遮盖line的效果\n let pointsAfterClip = points;\n if (startSymbol.visible) {\n const startSize = startSymbol.clip ? startSymbol.size || 10 : 0;\n const pointsStart = {\n x: points[0].x - (startSize / 2) * (Math.cos(this._startAngle) || 0),\n y: points[0].y - (startSize / 2) * (Math.sin(this._startAngle) || 0)\n };\n pointsAfterClip = [pointsStart, ...pointsAfterClip.slice(1)];\n }\n if (endSymbol.visible) {\n const endSize = endSymbol.clip ? endSymbol.size || 10 : 0;\n const pointsEnd = {\n x: points[points.length - 1].x - (endSize / 2) * (Math.cos(this._endAngle) || 0),\n y: points[points.length - 1].y - (endSize / 2) * (Math.sin(this._endAngle) || 0)\n };\n pointsAfterClip = [...pointsAfterClip.slice(0, pointsAfterClip.length - 1), pointsEnd];\n }\n\n return pointsAfterClip;\n }\n\n private _computeLineAngle() {\n const points = this._getMainSegmentPoints();\n if (points.length <= 1) {\n return;\n }\n const start = points[0];\n const startInside = points[1];\n const endInside = points[points.length - 2];\n const end = points[points.length - 1];\n const startVector = [start.x - startInside.x, start.y - startInside.y]; // 起点正方向向量\n const startAngle = Math.atan2(startVector[1], startVector[0]); // 起点正方向角度\n const endVector = [end.x - endInside.x, end.y - endInside.y]; // 终点正方向向量\n const endAngle = Math.atan2(endVector[1], endVector[0]); // 终点正方向角度\n\n this._startAngle = startAngle;\n this._endAngle = endAngle;\n }\n\n protected _reset() {\n this.startSymbol = null;\n this.endSymbol = null;\n this._startAngle = null;\n this._endAngle = null;\n this._mainSegmentPoints = null;\n }\n}\n","import { crossProduct } from '@visactor/vutils';\n\nexport type Vector2 = [number, number];\n\n/**\n * Scales a vec2 by a scalar number\n */\nexport function scale(vector: Vector2, scale: number): [number, number] {\n return [vector[0] * scale, vector[1] * scale];\n}\n\n/**\n * Calculates the length of a vec2\n */\nexport function length(vector: Vector2) {\n const [x, y] = vector;\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Normalize a vec2\n */\nexport function normalize(vector: Vector2) {\n let len = length(vector);\n if (len > 0) {\n len = 1 / len;\n }\n return [vector[0] * len, vector[1] * len];\n}\n\n/**\n * Get the angle between two 2D vectors\n */\nexport function angle(vector1: Vector2, vector2: Vector2) {\n const [x1, y1] = vector1;\n const [x2, y2] = vector2;\n const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\nexport function angleTo(v1: [number, number], v2: [number, number], direct: boolean): number {\n const ang = angle(v1, v2);\n const angleLargeThanPI = crossProduct(v1, v2) >= 0;\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - ang;\n }\n return ang;\n }\n\n if (angleLargeThanPI) {\n return ang;\n }\n return Math.PI * 2 - ang;\n}\n","export const DEFAULT_AXIS_THEME = {\n title: {\n space: 4,\n padding: 0,\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n padding: 0,\n style: {\n fontSize: 12,\n fill: '#333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n }\n};\n\nexport const DEFAULT_AXIS_BREAK_SYMBOL_STYLE = {\n size: 8,\n stroke: '#000',\n lineWidth: 1,\n zIndex: 1\n};\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTagComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerRichtext();\n registerText();\n}\n","/**\n * @description 标签组件\n */\nimport {\n type IGroup,\n type IRect,\n type ISymbol,\n type IText,\n type ITextAttribute,\n type ITextGraphicAttribute,\n type IRichTextGraphicAttribute,\n type IRichText,\n type IGraphicAttribute,\n CustomPath2D\n} from '@visactor/vrender-core';\nimport { isBoolean, isEmpty, isNil, isNumber, isObject, isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { isRichText, measureTextSize, richTextAttributeTransform } from '../util';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { TagAttributes, TagShapeAttributes } from './type';\nimport { loadTagComponent } from './register';\nimport type { TextContent } from '../core/type';\n\nloadTagComponent();\nexport class Tag extends AbstractComponent> {\n name = 'tag';\n\n private _bgRect!: IRect;\n private _textShape!: IText | IRichText;\n private _symbol!: ISymbol;\n private _tagStates: string[] = [];\n private _rectStates: string[] = [];\n private _symbolStates: string[] = [];\n private _textStates: string[] = [];\n\n getBgRect() {\n return this._bgRect;\n }\n\n getTextShape() {\n return this._textShape;\n }\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n space: 4,\n padding: 4,\n // @ts-ignore\n shape: {\n fill: '#000'\n }\n };\n\n constructor(attributes: TagAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tag.defaultAttributes, attributes));\n }\n\n protected render() {\n this.cacheStates();\n const {\n text = '',\n textStyle = {} as ITextGraphicAttribute | IRichTextGraphicAttribute,\n shape = {} as TagShapeAttributes,\n panel = {} as BackgroundAttributes,\n space = 4,\n minWidth,\n maxWidth,\n padding = 4,\n visible,\n state,\n type,\n textAlwaysCenter,\n containerTextAlign\n } = this.attribute as TagAttributes;\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('tag-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n let symbol;\n let tagX = -parsedPadding[3];\n let tagY = -parsedPadding[0];\n let tagWidth = parsedPadding[1] + parsedPadding[3];\n let tagHeight = parsedPadding[0] + parsedPadding[2];\n let textX = 0;\n let symbolPlaceWidth = 0;\n const { visible: shapeVisible, ...shapeStyle } = shape;\n if (isBoolean(shapeVisible)) {\n const size = shapeStyle?.size || 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n\n symbol = group.createOrUpdateChild(\n 'tag-shape',\n {\n symbolType: 'circle',\n size,\n strokeBoundsBuffer: 0,\n ...shapeStyle,\n visible: shapeVisible,\n x: maxSize / 2,\n y: maxSize / 2\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.shape)) {\n symbol.states = state.shape;\n }\n\n if (shapeVisible) {\n symbolPlaceWidth = maxSize + space;\n }\n }\n\n tagWidth += symbolPlaceWidth;\n textX += symbolPlaceWidth;\n\n let textShape: IRichText | IText;\n const isRich = isRichText({ text } as TextContent) || type === 'rich';\n if (isRich) {\n const richTextAttrs = {\n ...richTextAttributeTransform({ type, text, ...textStyle } as any),\n ...(textStyle as IRichTextGraphicAttribute),\n visible: isValid(text) && visible !== false,\n x: textX,\n y: 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n tagWidth += textShape.AABBBounds.width();\n tagHeight += textShape.AABBBounds.height();\n tagX += textShape.AABBBounds.x1;\n tagY += textShape.AABBBounds.y1;\n } else {\n const textAttrs = {\n text: isObject(text) && 'type' in text && text.type === 'text' ? text.text : text,\n visible: isValid(text) && visible !== false,\n lineHeight: (textStyle as ITextGraphicAttribute)?.fontSize,\n ...(textStyle as ITextGraphicAttribute),\n x: textX,\n y: 0\n };\n if (isNil(textAttrs.lineHeight)) {\n textAttrs.lineHeight = (textStyle as ITextGraphicAttribute).fontSize;\n }\n textShape = group.createOrUpdateChild('tag-text', textAttrs as ITextGraphicAttribute, 'text') as IText;\n if (!isEmpty(state?.text)) {\n textShape.states = state.text;\n }\n\n // 因为文本可能发生旋转,所以需要使用 measureTextSize 方法\n const textBounds = measureTextSize(textAttrs.text as string, textStyle, this.stage?.getTheme()?.text);\n const textWidth = textBounds.width;\n const textHeight = textBounds.height;\n tagWidth += textWidth;\n const size = shape.size ?? 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n tagHeight += Math.max(textHeight, shape.visible ? maxSize : 0);\n\n const { textAlign, textBaseline } = textStyle as ITextAttribute;\n\n if (isValid(minWidth) || isValid(maxWidth)) {\n if (isValid(minWidth) && tagWidth < minWidth) {\n tagWidth = minWidth;\n }\n if (isValid(maxWidth) && tagWidth > maxWidth) {\n tagWidth = maxWidth;\n textShape.setAttribute('maxLineWidth', maxWidth - parsedPadding[1] - parsedPadding[2]);\n }\n }\n\n tagX = 0;\n tagY = 0;\n let flag = 0;\n if (textAlign === 'left' || textAlign === 'start') {\n flag = 1;\n } else if (textAlign === 'right' || textAlign === 'end') {\n flag = -1;\n } else if (textAlign === 'center') {\n flag = 0;\n }\n if (!flag) {\n tagX -= tagWidth / 2;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth / 2);\n }\n\n group.setAttribute('x', -symbolPlaceWidth / 2);\n } else if (flag < 0) {\n tagX -= tagWidth;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth);\n }\n\n group.setAttribute('x', -parsedPadding[1] - symbolPlaceWidth);\n } else if (flag > 0) {\n group.setAttribute('x', parsedPadding[3]);\n }\n\n const shouldCenter = containerTextAlign ? containerTextAlign === 'center' : textAlwaysCenter;\n const shouldRight = containerTextAlign === 'right' || containerTextAlign === 'end';\n const shouldLeft = containerTextAlign === 'left' || containerTextAlign === 'start';\n\n if (shouldCenter && flag) {\n // 文本容器内居中\n // 剔除padding后的内宽度\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const tsWidth = textWidth + symbolPlaceWidth;\n const textX =\n flag === 1\n ? (containerWidth - tsWidth) / 2 + symbolPlaceWidth + textWidth / 2\n : parsedPadding[0] + symbolPlaceWidth - (tagWidth / 2 + tsWidth / 2 - symbolPlaceWidth) + textWidth / 2;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'center'\n });\n if (symbol) {\n const symbolX = textX - textWidth / 2 - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldLeft && flag !== 1) {\n // 文本容器内朝左展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const offset =\n flag === 0\n ? -containerWidth / 2 + symbolPlaceWidth / 2\n : -tagWidth + parsedPadding[3] + parsedPadding[1] + symbolPlaceWidth;\n const textX = offset + symbolPlaceWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'left'\n });\n\n if (symbol) {\n const symbolX = offset + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldRight && flag !== -1) {\n // 文本容器内朝右展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const textX = flag === 0 ? containerWidth / 2 + symbolPlaceWidth / 2 : containerWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'right'\n });\n if (symbol) {\n const symbolX = textX - textWidth - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (textBaseline === 'middle') {\n tagY -= tagHeight / 2;\n if (symbol) {\n symbol.setAttribute('y', 0);\n }\n } else if (textBaseline === 'bottom') {\n tagY -= tagHeight;\n if (symbol) {\n symbol.setAttribute('y', -textHeight / 2);\n }\n\n group.setAttribute('y', -parsedPadding[2]);\n } else if (textBaseline === 'top') {\n group.setAttribute('y', parsedPadding[0]);\n if (symbol) {\n symbol.setAttribute('y', textHeight / 2);\n }\n }\n }\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n width: tagWidth,\n height: tagHeight,\n x: tagX,\n y: tagY\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial) => {\n return customShape(this, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n this._textShape = textShape;\n this._symbol = symbol;\n\n this.resetStates();\n }\n\n initAttributes(params: TagAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Tag.defaultAttributes, params);\n super.initAttributes(params);\n this.render();\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean): void {\n super.addState(stateName, keepCurrentStates, hasAnimation);\n if (this._textShape) {\n this._textShape.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.addState(stateName, keepCurrentStates, hasAnimation);\n }\n }\n\n removeState(stateName: string, hasAnimation?: boolean): void {\n super.removeState(stateName, hasAnimation);\n if (this._textShape) {\n this._textShape.removeState(stateName, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.removeState(stateName, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.removeState(stateName, hasAnimation);\n }\n }\n\n cacheStates() {\n this._tagStates = this.currentStates?.slice() ?? [];\n this._rectStates = this._bgRect?.currentStates?.slice() ?? [];\n this._symbolStates = this._symbol?.currentStates?.slice() ?? [];\n this._textStates = this._textShape?.currentStates?.slice() ?? [];\n this.clearStates();\n this._bgRect?.clearStates();\n this._symbol?.clearStates();\n this._textShape?.clearStates();\n }\n resetStates() {\n this._tagStates.length && this.useStates(this._tagStates);\n this._rectStates.length && this._bgRect?.useStates(this._rectStates);\n this._symbolStates.length && this._symbol?.useStates(this._symbolStates);\n this._textStates.length && this._textShape?.useStates(this._textStates);\n }\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNil, isRectIntersect, isRotateAABBIntersect, rotatePoint } from '@visactor/vutils';\n\n// 计算水平情况下的包围盒\nfunction genNormalBounds(item: IText) {\n const bounds = item.AABBBounds;\n\n return {\n x1: bounds.x1,\n x2: bounds.x2,\n y1: bounds.y1,\n y2: bounds.y2,\n centerX: item.attribute.x,\n centerY: item.attribute.y,\n angle: item.attribute.angle\n };\n}\n\nexport function genRotateBounds(items: IText[]) {\n items.forEach(item => {\n if (item.rotatedBounds || !item.attribute.angle) {\n return;\n }\n // 计算水平情况下的包围盒\n const bounds = genNormalBounds(item);\n const rotatedCenter = rotatePoint({ x: item.attribute.x, y: item.attribute.y }, bounds.angle, {\n x: bounds.centerX,\n y: bounds.centerY\n });\n\n const deltaX = rotatedCenter.x - bounds.centerX;\n const deltaY = rotatedCenter.y - bounds.centerY;\n bounds.x1 += deltaX;\n bounds.x2 += deltaX;\n bounds.y1 += deltaY;\n bounds.y2 += deltaY;\n bounds.centerX += deltaX;\n bounds.centerY += deltaY;\n item.rotatedBounds = bounds;\n });\n}\n\nexport function itemIntersect(item1: IText, item2: IText) {\n if (!item1.OBBBounds?.empty() && !item2.OBBBounds?.empty()) {\n return item1.OBBBounds.intersects(item2.OBBBounds);\n }\n return (\n isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) &&\n (item1.rotatedBounds && item2.rotatedBounds\n ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true)\n : true)\n );\n}\n\nconst DELTA_ANGLE = Math.sin(Math.PI / 10);\nexport function isAngleVertical(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const cos = hasAngle ? Math.cos(angle) : 1;\n return hasAngle && Math.abs(cos) <= delta;\n}\n\nexport function isAngleHorizontal(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const sin = hasAngle ? Math.sin(angle) : 0;\n return !hasAngle || Math.abs(sin) <= delta;\n}\n","// eslint-disable-next-line no-duplicate-imports\nimport type { IGraphic, IGroup, IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport type { Dict, IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isGreater, isLess, tau, normalizeAngle, polarToCartesian, merge } from '@visactor/vutils';\nimport { traverseGroup } from '../util/common';\nimport type { Vector2 } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { scale, length } from '../util';\nimport type { BreakSymbol } from './type';\nimport { DEFAULT_AXIS_BREAK_SYMBOL_STYLE } from './config';\nimport type { Point } from '../core/type';\nimport { isAngleHorizontal } from './overlap/util';\n\n// 和 vutils 版本不同\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < 0) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n return angle;\n};\n\n// 判断数值是否在制定范围内,包含误差\nexport function isInRange(a: number, min: number, max: number) {\n return !isLess(a, min, 0, 1e-6) && !isGreater(a, max, 0, 1e-6);\n}\n\nexport function getCircleLabelPosition(tickPosition: Point, tickVector: [number, number]) {\n return {\n x: tickPosition.x + tickVector[0],\n y: tickPosition.y + tickVector[1]\n };\n}\n\nexport function getAxisBreakSymbolAttrs(props: BreakSymbol = {}) {\n const { style = {}, angle = Math.PI * 0.5 } = props;\n const symbolStyle = merge({}, DEFAULT_AXIS_BREAK_SYMBOL_STYLE, style);\n const symbolSize = symbolStyle.size ?? DEFAULT_AXIS_BREAK_SYMBOL_STYLE.size;\n return {\n ...symbolStyle,\n symbolType:\n symbolStyle.symbolType ??\n `M ${-symbolSize / 2} ${symbolSize * Math.sin(angle)} L ${symbolSize / 2} ${-symbolSize * Math.sin(angle)}`,\n symbolSize\n };\n}\nexport function getElMap(g: IGroup) {\n const elMap: Dict = {};\n traverseGroup(g, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n elMap[el.id] = el;\n }\n });\n return elMap;\n}\n\nexport function getVerticalCoord(point: Point, vector: Vector2): Point {\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n}\n\nexport function getCircleVerticalVector(\n offset: number,\n point: Point,\n center: Point,\n inside = false,\n axisInside = false\n): Vector2 {\n const vector: [number, number] = [point.x - center.x, point.y - center.y];\n return scale(vector, ((inside ? -1 : 1) * (axisInside ? -1 : 1) * offset) / length(vector));\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlignType = 'center';\n let baseline: TextBaselineType = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\nexport function getPolarAngleLabelPosition(\n angle: number,\n center: { x: number; y: number },\n radius: number,\n labelOffset: number,\n inside: boolean\n) {\n const point = polarToCartesian({ x: 0, y: 0 }, radius, angle);\n const labelPoint = getVerticalCoord(point, getCircleVerticalVector(labelOffset, point, center, inside));\n const vector = getCircleVerticalVector(labelOffset || 1, labelPoint, center, inside);\n return getCircleLabelPosition(labelPoint, vector);\n}\n\nexport function getCirclePoints(center: Point, count: number, radius: number, startAngle: number, endAngle: number) {\n const points: Point[] = [];\n const range = endAngle - startAngle;\n for (let i = 0; i < count; i++) {\n const angle = startAngle + (i * range) / count;\n points.push(polarToCartesian(center, radius, angle));\n }\n return points;\n}\n\nexport function getPolygonPath(points: Point[], closed: boolean) {\n let path = '';\n if (points.length === 0) {\n return path;\n }\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n });\n if (closed) {\n path += 'Z';\n }\n\n return path;\n}\n\nexport function textIntersect(textA: IText, textB: IText, sep: number) {\n let a: IBounds;\n let b: IBounds;\n // 注意:默认旋转角度一样\n const angle = textA.attribute?.angle;\n const isHorizontal = isAngleHorizontal(angle, Number.EPSILON);\n const isAABBIntersects = (textA: IText, textB: IText, sep: number) => {\n a = textA.AABBBounds;\n b = textB.AABBBounds;\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n };\n\n // 水平文字可以直接用 AABB 包围盒计算\n if (isHorizontal) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n a = textA.OBBBounds;\n b = textB.OBBBounds;\n\n // 没有 OBB bounds 则用 AABB 包围盒计算\n if (!a || !b || a.empty() || b.empty()) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n // 非水平文字且有 OBB 包围盒\n // TODO: 待支持有旋转角度下的 sep 计算逻辑\n return a.intersects(b);\n // const expandedTextA = textA.clone();\n // const boundsPaddingA = textA.attribute.boundsPadding ?? 0;\n // expandedTextA.setAttributes({\n // boundsPadding: isNumber(boundsPaddingA) ? boundsPaddingA + sep / 2 : boundsPaddingA.map(v => v + sep / 2)\n // });\n // const expandTextB = textB.clone();\n // const boundsPaddingB = textB.attribute.boundsPadding ?? 0;\n\n // expandTextB.setAttributes({\n // boundsPadding: isNumber(boundsPaddingB) ? boundsPaddingB + sep / 2 : boundsPaddingB.map(v => v + sep / 2)\n // });\n\n // return expandedTextA.OBBBounds.intersects(expandTextB.OBBBounds);\n}\n\nexport function hasOverlap(items: IText[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (textIntersect(a, b, pad)) {\n return true;\n }\n }\n return false;\n}\n","import type { FederatedPointerEvent, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { StateValue } from '../constant';\nimport { traverseGroup } from '../util';\nimport { isEmpty } from '@visactor/vutils';\n\nexport const dispatchHoverState = (e: FederatedPointerEvent, container: IGroup, lastHover: IGraphic | null) => {\n const target = e.target as unknown as IGraphic;\n if (target !== lastHover && target.name && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(container, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n return target;\n }\n return lastHover;\n};\n\nexport const dispatchUnHoverState = (e: FederatedPointerEvent, container: IGroup, lastHover: IGraphic | null) => {\n if (lastHover) {\n traverseGroup(container, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n return null;\n }\n return lastHover;\n};\n\nexport const dispatchClickState = (e: FederatedPointerEvent, container: IGroup, lastSelect: IGraphic | null) => {\n const target = e.target as unknown as IGraphic;\n if (lastSelect === target && target.hasState(StateValue.selected)) {\n traverseGroup(container, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n // 取消选中\n return null;\n }\n\n if (target.name && !isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(container, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n return target;\n }\n return lastSelect;\n};\n","/**\n * TODO:\n * 1. trunk 坐标轴截断\n * @description 坐标轴组件基类\n */\nimport type {\n IGroup,\n INode,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType,\n FederatedPointerEvent,\n IGraphic,\n IText\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { abs, cloneDeep, get, isEmpty, isFunction, merge, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { Point } from '../core/type';\nimport type { TagAttributes } from '../tag';\nimport { createTextGraphicByType } from '../util';\nimport { DEFAULT_STATES } from '../constant';\nimport { AXIS_ELEMENT_NAME } from './constant';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport type {\n LabelAttributes,\n AxisBaseAttributes,\n AxisItem,\n TickAttributes,\n TransformedAxisItem,\n SubTickAttributes,\n TickLineItem,\n callbackFunc\n} from './type';\nimport { Tag } from '../tag/tag';\nimport { getElMap, getVerticalCoord } from './util';\nimport { dispatchClickState, dispatchHoverState, dispatchUnHoverState } from '../util/interaction';\n\nexport abstract class AxisBase extends AbstractComponent> {\n name = 'axis';\n\n // TODO: 组件整体统一起来\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n protected tickLineItems: TickLineItem[] = [];\n protected subTickLineItems: TickLineItem[] = [];\n protected axisLabelLayerSize: Dict<{\n width: number;\n height: number;\n textAlign: string;\n textBaseline: string;\n labelPos: number;\n }> = {};\n protected axisLabelsContainer: IGroup | null = null;\n protected axisContainer: IGroup;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract renderLine(container: IGroup): void;\n abstract isInValidValue(value: number): boolean;\n abstract getTickCoord(value: number): Point;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n abstract getRelativeVector(point?: Point): [number, number];\n protected abstract getTitleAttribute(): TagAttributes;\n protected abstract beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType };\n\n /**\n * 坐标轴的一个特殊的方法,用于不更新场景树来获取更新属性后的包围盒\n * TODO:后面看情况再抽象为通用的方法\n */\n getBoundsWithoutRender(attributes: Partial) {\n const currentAttribute = cloneDeep(this.attribute);\n merge(this.attribute, attributes);\n\n const offscreenGroup = graphicCreator.group({\n x: this.attribute.x,\n y: this.attribute.y\n });\n this.add(offscreenGroup);\n\n this._renderInner(offscreenGroup);\n\n this.removeChild(offscreenGroup);\n this.attribute = currentAttribute;\n return offscreenGroup.AABBBounds;\n }\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n this._renderInner(this._innerView);\n\n this._bindEvent();\n }\n\n private _bindEvent() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._innerView.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._innerView.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._innerView.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchHoverState(e, this.axisContainer, this._lastHover);\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchUnHoverState(e, this.axisContainer, this._lastHover);\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n this._lastSelect = dispatchClickState(e, this.axisContainer, this._lastSelect);\n };\n\n protected _renderInner(container: IGroup) {\n const { title, label, tick, line, items } = this.attribute;\n\n const axisContainer = graphicCreator.group({ x: 0, y: 0, zIndex: 1, pickable: false });\n axisContainer.name = AXIS_ELEMENT_NAME.axisContainer;\n axisContainer.id = this._getNodeId('container');\n axisContainer.setMode(this.mode);\n this.axisContainer = axisContainer;\n container.add(axisContainer);\n\n // 渲染轴线\n if (line && line.visible) {\n this.renderLine(axisContainer);\n }\n\n if (items && items.length) {\n this.data = this._transformItems(items[0]);\n\n // 渲染刻度线,包含子刻度线\n if (tick && tick.visible) {\n this.renderTicks(axisContainer);\n }\n // 渲染标签\n if (label && label.visible) {\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = AXIS_ELEMENT_NAME.labelContainer;\n labelGroup.id = this._getNodeId('label-container');\n this.axisLabelsContainer = labelGroup;\n axisContainer.add(labelGroup);\n items.forEach((axisItems: AxisItem[], layer: number) => {\n const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);\n\n const labels = layerLabelGroup.getChildren() as IText[];\n this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n // handle overlap\n this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n\n let maxTextWidth = 0;\n let maxTextHeight = 0;\n let textAlign = 'center';\n let textBaseline = 'middle';\n let labelPos: number = 0;\n labels.forEach((label: IText, index) => {\n const labelStyle = label.attribute;\n\n const angle = labelStyle.angle ?? 0;\n const textBounds = label.AABBBounds;\n let textWidth = textBounds.width();\n let textHeight = textBounds.height();\n if (angle) {\n textWidth = Math.abs(textWidth * Math.cos(angle));\n textHeight = Math.abs(textHeight * Math.sin(angle));\n }\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, textHeight);\n\n textAlign = labelStyle.textAlign as string;\n textBaseline = labelStyle.textBaseline as string;\n if (index === 0) {\n labelPos = labelStyle.x;\n }\n });\n this.axisLabelLayerSize[layer] = {\n width: maxTextWidth,\n height: maxTextHeight,\n\n labelPos,\n textAlign,\n textBaseline\n };\n });\n }\n }\n\n // 渲染标题\n if (title && title.visible) {\n this.renderTitle(axisContainer);\n }\n }\n protected renderTicks(container: IGroup) {\n const tickLineItems = this.getTickLineItems();\n\n const tickLineGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n tickLineGroup.name = AXIS_ELEMENT_NAME.tickContainer;\n tickLineGroup.id = this._getNodeId('tick-container');\n container.add(tickLineGroup);\n\n tickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('tick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.tick;\n line.id = this._getNodeId(item.id);\n\n if (isEmpty(this.attribute.tick?.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const data = this.data[index];\n const tickLineState = merge({}, DEFAULT_STATES, this.attribute.tick.state);\n Object.keys(tickLineState).forEach(key => {\n if (isFunction(tickLineState[key])) {\n tickLineState[key] = tickLineState[key](data.rawValue, index, data, this.data);\n }\n });\n line.states = tickLineState;\n }\n\n tickLineGroup.add(line);\n });\n this.tickLineItems = tickLineItems;\n\n // subTick 处理\n const { subTick } = this.attribute;\n if (subTick && subTick.visible) {\n const subTickLineItems: TickLineItem[] = this.getSubTickLineItems();\n if (subTickLineItems.length) {\n subTickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('subTick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.subTick;\n line.id = this._getNodeId(`${index}`);\n\n if (isEmpty(subTick.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const subTickLineState = merge({}, DEFAULT_STATES, subTick.state);\n Object.keys(subTickLineState).forEach(key => {\n if (isFunction(subTickLineState[key])) {\n subTickLineState[key] = subTickLineState[key](item.value, index, item, tickLineItems);\n }\n });\n line.states = subTickLineState;\n }\n\n tickLineGroup.add(line);\n });\n }\n\n this.subTickLineItems = subTickLineItems;\n }\n }\n\n protected renderLabels(container: IGroup, items: AxisItem[], layer: number) {\n const { dataFilter } = this.attribute.label;\n if (dataFilter && isFunction(dataFilter)) {\n items = dataFilter(items, layer) as TransformedAxisItem[];\n }\n const data = this._transformItems(items);\n\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = `${AXIS_ELEMENT_NAME.labelContainer}-layer-${layer}`;\n labelGroup.id = this._getNodeId(`label-container-layer-${layer}`);\n container.add(labelGroup);\n\n data.forEach((item: TransformedAxisItem, index: number) => {\n const labelStyle: any = this._getLabelAttribute(item, index, data, layer);\n const text = createTextGraphicByType(labelStyle);\n\n text.name = AXIS_ELEMENT_NAME.label;\n text.id = this._getNodeId(`layer${layer}-label-${item.id}`);\n if (isEmpty(this.attribute.label?.state)) {\n text.states = DEFAULT_STATES;\n } else {\n const labelState = merge({}, DEFAULT_STATES, this.attribute.label.state);\n Object.keys(labelState).forEach(key => {\n if (isFunction(labelState[key])) {\n labelState[key] = labelState[key](item, index, data, layer);\n }\n });\n text.states = labelState;\n }\n text.data = { ...item, index, layer };\n labelGroup.add(text);\n });\n\n return labelGroup;\n }\n\n protected renderTitle(container: IGroup) {\n const titleAttributes = this.getTitleAttribute();\n const axisTitle = new Tag({\n ...titleAttributes\n });\n axisTitle.name = AXIS_ELEMENT_NAME.title;\n axisTitle.id = this._getNodeId('title');\n container.add(axisTitle as unknown as INode);\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));\n }\n\n protected getTickLineItems() {\n const { tick } = this.attribute;\n const data = this.data;\n // tick 处理\n const tickLineItems: TickLineItem[] = [];\n const { alignWithLabel, inside = false, length, dataFilter } = tick as TickAttributes;\n let tickSegment = 1;\n const count = data.length;\n if (count >= 2) {\n tickSegment = data[1].value - data[0].value;\n }\n\n (dataFilter && isFunction(dataFilter) ? dataFilter(data) : data).forEach((item: TransformedAxisItem) => {\n let point = item.point;\n let tickValue = item.value;\n if (!alignWithLabel) {\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n tickValue = value;\n }\n const endPoint = this.getVerticalCoord(point, length as number, inside);\n\n if (this.mode === '3d') {\n const vec = this.getVerticalVector(length as number, inside, point);\n let alpha = 0;\n let beta = 0;\n if (abs(vec[0]) > abs(vec[1])) {\n alpha = (pi / 2) * (endPoint.x > point.x ? 1 : -1);\n } else {\n beta = (pi / 2) * (endPoint.y > point.y ? -1 : 1);\n }\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`,\n anchor: [point.x, point.y],\n alpha,\n beta\n });\n } else {\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`\n });\n }\n });\n\n return tickLineItems;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as AxisBaseAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n\n if (tickLineCount >= 2) {\n for (let i = 0; i < tickLineCount - 1; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value,\n id: `sub-tick-${value}`\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n private _getTickLineAttribute(type: string, tickItem: TickLineItem, index: number, tickItems: TickLineItem[]) {\n let style = get(this.attribute, `${type}.style`);\n const data = this.data[index];\n style = isFunction(style)\n ? merge(\n {},\n get(DEFAULT_AXIS_THEME, `${type}.style`),\n type === 'tick'\n ? style(data.rawValue, index, data, this.data)\n : style(tickItem.value, index, tickItem, tickItems)\n )\n : style;\n\n const { start, end, anchor, alpha, beta } = tickItem;\n return {\n points: [start, end],\n anchor,\n alpha,\n beta,\n ...style\n };\n }\n\n private _getLabelAttribute(\n tickDatum: TransformedAxisItem,\n index: number,\n tickData: TransformedAxisItem[],\n layer: number\n ) {\n const { space = 4, inside = false, formatMethod, type = 'text', text } = this.attribute.label as LabelAttributes;\n let offset = space;\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === inside) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === inside) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n offset += tickLength;\n\n // 先测试 line\n const axisVector = this.getRelativeVector(tickDatum.point);\n if (layer > 0) {\n if (axisVector[1] === 0) {\n offset += (this.axisLabelLayerSize[layer - 1].height + get(this.attribute, 'label.space', 4)) * layer;\n } else {\n offset += (this.axisLabelLayerSize[layer - 1].width + get(this.attribute, 'label.space', 4)) * layer;\n }\n }\n\n const point = this.getVerticalCoord(tickDatum.point, offset, inside);\n const vector = this.getVerticalVector(offset || 1, inside, point);\n const textContent = formatMethod\n ? formatMethod(`${tickDatum.label}`, tickDatum, index, tickData, layer)\n : tickDatum.label;\n let { style: textStyle } = this.attribute.label as LabelAttributes;\n textStyle = isFunction(textStyle)\n ? merge(\n {},\n DEFAULT_AXIS_THEME.label.style,\n (textStyle as callbackFunc | undefined>)(tickDatum, index, tickData, layer)\n )\n : textStyle;\n\n const labelAlign = this.getLabelAlign(vector, inside, (textStyle as ITextGraphicAttribute).angle);\n textStyle = merge(labelAlign, textStyle) as Partial;\n // 兼容原先 style.text 回调的方式\n if (isFunction(textStyle.text)) {\n // @ts-ignore\n textStyle.text = textStyle.text({\n label: tickDatum.label,\n value: tickDatum.rawValue,\n index: tickDatum.index,\n layer\n });\n }\n return {\n ...this.getLabelPosition(point, vector, textContent, textStyle),\n text: text ?? textContent,\n _originText: tickDatum.label,\n lineHeight: textStyle?.fontSize,\n type,\n ...textStyle\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return point;\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n","/**\n * @description 自动隐藏\n */\n\nimport { createRect, type IText } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isFunction, last } from '@visactor/vutils';\nimport type { CustomMethod } from '../type';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst methods = {\n parity: function (items: IText[]) {\n return items.filter((item, i) => (i % 2 ? item.setAttribute('opacity', 0) : 1));\n },\n greedy: function (items: IText[], sep: number) {\n let a: IText;\n return items.filter((b, i) => {\n if (!i || !intersect(a, b, sep)) {\n a = b;\n return 1;\n }\n return b.setAttribute('opacity', 0);\n });\n }\n};\n\nfunction hasBounds(item: IText) {\n let bounds;\n if (!item.OBBBounds.empty()) {\n bounds = item.OBBBounds;\n } else {\n bounds = item.AABBBounds;\n }\n return bounds.width() > 1 && bounds.height() > 1;\n}\n\n// reset all items to be fully opaque\nfunction reset(items: IText[]) {\n items.forEach(item => item.setAttribute('opacity', 1));\n return items;\n}\n\nfunction forceItemVisible(sourceItem: IText, items: IText[], check: boolean, comparator: any, inverse = false) {\n if (check && !sourceItem.attribute.opacity) {\n const remainLength = items.length;\n if (remainLength > 1) {\n sourceItem.setAttribute('opacity', 1);\n for (let i = 0; i < remainLength; i++) {\n const item = inverse ? items[remainLength - 1 - i] : items[i];\n if (comparator(item)) {\n item.setAttribute('opacity', 0);\n } else {\n break;\n }\n }\n }\n }\n}\n\ntype HideConfig = {\n /**\n * 轴的方向\n */\n orient: string;\n /**\n * 防重叠策略。\n * - 'parity': 奇偶校验,使用删除所有其他标签的策略(这对于标准线性轴非常有效)。\n * - 'greedy': 将执行标签的线性扫描,并删除与最后一个可见标签重叠的所有标签。\n * - 也可以传入函数用于自定义策略\n */\n method?: 'parity' | 'greedy' | CustomMethod;\n /**\n * 设置文本之间的间隔距离,单位 px\n */\n separation?: number;\n /**\n * 保证最后的label展示\n */\n lastVisible?: boolean;\n /**\n * 保证第一个的label展示\n */\n firstVisible?: boolean;\n};\n\nexport function autoHide(labels: IText[], config: HideConfig) {\n if (isEmpty(labels)) {\n return;\n }\n\n const source = labels.filter(hasBounds);\n if (isEmpty(source)) {\n return;\n }\n\n let items: IText[];\n\n items = reset(source);\n\n const { method = 'parity', separation: sep = 0 } = config;\n\n const reduce = isFunction(method) ? method : methods[method] || methods.parity;\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n const shouldCheck = (length: number, visibility: boolean, checkLength: boolean = true) => {\n return checkLength ? length < 3 || visibility : visibility;\n };\n\n const checkFirst = shouldCheck(items.length, config.firstVisible, false);\n /**\n * 0.17.10 之前,当最后 label 个数小于 3 的时候,才做最后的label强制显示的策略\n */\n let checkLast = shouldCheck(items.length, config.lastVisible);\n\n const firstSourceItem = source[0];\n const lastSourceItem = last(source);\n\n if (intersect(firstSourceItem, lastSourceItem, sep) && checkFirst && checkLast) {\n lastSourceItem.setAttribute('opacity', 0); // Or firstSourceItem, depending on preference\n checkLast = false;\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: IText) => intersect(item, firstSourceItem, sep));\n\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: IText) =>\n intersect(item, lastSourceItem, sep) ||\n (checkFirst && item !== firstSourceItem ? intersect(item, firstSourceItem, sep) : false),\n true\n );\n }\n\n source.forEach(item => {\n item.setAttribute('visible', !!item.attribute.opacity);\n });\n}\n","/**\n * @description 坐标轴标签自动旋转\n */\nimport type { IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { degreeToRadian, isEmpty } from '@visactor/vutils';\nimport { genRotateBounds, itemIntersect } from './util';\n\ntype RotateConfig = {\n /**\n * 坐标轴的显示位置\n */\n orient: string;\n /**\n * 自动旋转的可选角度\n */\n labelRotateAngle?: number[];\n};\n\nexport function autoRotate(items: IText[], rotateConfig: RotateConfig) {\n if (isEmpty(items)) {\n return;\n }\n\n const { orient, labelRotateAngle = [0, 45, 90] } = rotateConfig;\n if (labelRotateAngle.length === 0 || items.some(item => !!item.attribute.angle)) {\n return;\n }\n\n let i = 0;\n let n = 0;\n if (labelRotateAngle && labelRotateAngle.length > 0) {\n n = labelRotateAngle.length;\n }\n\n while (i < n) {\n const angle = labelRotateAngle[i++];\n items.forEach(item => {\n // item.angle = angle;\n item.attribute.angle = degreeToRadian(angle);\n });\n tryRotate(orient, items);\n if (!hasIntersect(items)) {\n break;\n }\n }\n}\n\nfunction hasIntersect(items: IText[]): boolean {\n for (let i = 1; i < items.length; i++) {\n if (itemIntersect(items[i - 1], items[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction tryRotate(orient: string, items: IText[]) {\n // 针对 top bottom轴的自动旋转逻辑\n if (orient === 'bottom' || orient === 'top') {\n rotateXAxis(orient, items);\n }\n if (orient === 'left' || orient === 'right') {\n rotateYAxis(orient, items);\n }\n // 先旋转,再计算这个limit,避免算limit后发现不需要旋转,导致莫名的水平limit\n genRotateBounds(items);\n}\n\nfunction clampAngle(angle = 0) {\n if (angle < 0) {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n }\n if (angle > 0) {\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n }\n\n return angle;\n}\n\nexport function rotateYAxis(orient: string, items: IText[]) {\n // 由于左右轴会裁切,所以上下两个label需要额外处理,做tighten处理\n items.forEach((item, i) => {\n item.attribute.angle &&\n item.setAttributes({\n ...getYAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function rotateXAxis(orient: string, items: IText[]) {\n items.forEach(item => {\n item.attribute.angle &&\n item.setAttributes({\n ...getXAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function getXAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['center', 'left', 'left', 'left', 'center', 'right', 'right', 'right', 'left'];\n let baseline = ['top', 'top', 'middle', 'bottom', 'bottom', 'bottom', 'middle', 'top', 'top'];\n if (orient === 'top') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['center', 'right', 'right', 'right', 'center', 'left', 'left', 'left', 'right'];\n baseline = ['bottom', 'bottom', 'middle', 'top', 'top', 'top', 'middle', 'bottom', 'bottom'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n\nexport function getYAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['right', 'right', 'center', 'left', 'left', 'left', 'center', 'right', 'right'];\n let baseline = ['middle', 'middle', 'top', 'top', 'middle', 'middle', 'bottom', 'bottom', 'middle'];\n\n if (orient === 'right') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['left', 'left', 'center', 'right', 'right', 'right', 'center', 'left', 'left'];\n baseline = ['middle', 'middle', 'bottom', 'bottom', 'middle', 'middle', 'top', 'middle', 'middle'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n","/**\n * 自动省略\n */\nimport type { IText } from '@visactor/vrender-core';\nimport { isAngleHorizontal, isAngleVertical } from './util';\nimport type { AxisLabelOverlap } from '../type';\nimport { isEmpty, isNil, isObject, isValidNumber } from '@visactor/vutils';\n\ntype LimitConfig = {\n orient: string;\n limitLength: number;\n axisLength: number;\n verticalLimitLength?: number;\n ellipsis?: string;\n overflowLimitLength?: AxisLabelOverlap['overflowLimitLength'];\n};\n\nfunction normalizeOverflowLimitLength(overflowLimitLength?: AxisLabelOverlap['overflowLimitLength']) {\n if (isValidNumber(overflowLimitLength)) {\n return {\n left: overflowLimitLength,\n right: overflowLimitLength\n // top: overflowLimitLength,\n // bottom: overflowLimitLength\n };\n } else if (isObject(overflowLimitLength)) {\n return {\n left: overflowLimitLength.left || 0,\n right: overflowLimitLength.right || 0\n // top: overflowLimitLength.top || 0,\n // bottom: overflowLimitLength.bottom || 0\n };\n }\n return { left: 0, right: 0 };\n}\n\nexport function autoLimit(labels: IText[], config: LimitConfig) {\n const { limitLength, verticalLimitLength, ellipsis = '...', orient, axisLength } = config;\n if (isEmpty(labels) || !isValidNumber(limitLength)) {\n return;\n }\n const overflowLimitLength = normalizeOverflowLimitLength(config.overflowLimitLength);\n // 注意:自动隐藏算法暂时只考虑所有标签角度都一致的情况\n const firstLabel = labels[0];\n const angle = firstLabel.attribute.angle;\n const hasAngle = !isNil(angle);\n const cos = hasAngle ? Math.cos(angle) : 1;\n const sin = hasAngle ? Math.sin(angle) : 0;\n const isHorizontal = isAngleHorizontal(angle);\n const isVertical = isAngleVertical(angle);\n const isX = orient === 'top' || orient === 'bottom';\n const direction = firstLabel.attribute.direction;\n // 判断有长度差异的阀值\n const THRESHOLD = 2;\n const checkBox =\n !isHorizontal &&\n !isVertical &&\n isX &&\n (labels.length < 2 ||\n labels.some(label => Math.abs(label.AABBBounds.width() - firstLabel.AABBBounds.width()) >= THRESHOLD)) &&\n firstLabel.AABBBounds.width() > Math.abs(limitLength / sin);\n\n labels.forEach(label => {\n if (isX) {\n if (isVertical && Math.floor(label.AABBBounds.height()) <= limitLength) {\n return;\n }\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= verticalLimitLength) {\n return;\n }\n }\n\n if (!isX) {\n if (direction === 'vertical' && Math.floor(label.AABBBounds.height()) <= verticalLimitLength) {\n return;\n }\n\n if (direction !== 'vertical') {\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= limitLength) {\n return;\n }\n if (isVertical && Math.floor(label.AABBBounds.height()) <= verticalLimitLength) {\n return;\n }\n }\n }\n\n // 如果水平并且文本未发生旋转,则不配置 maxLineWidth\n let limitLabelLength = null;\n\n if (!isHorizontal && !isVertical) {\n if (isX) {\n const { x1, x2 } = label.AABBBounds;\n const tan = sin / cos;\n const verticalSizeLimit = Math.abs(limitLength / sin);\n\n if (\n checkBox &&\n tan > 0 &&\n x1 <= axisLength + overflowLimitLength.right &&\n limitLength / tan + x1 > axisLength + overflowLimitLength.right\n ) {\n // 以 x1 近似为锚点,文字在 x1 右侧\n const lengthLimit = (axisLength - x1 + overflowLimitLength.right) / Math.abs(cos);\n limitLabelLength = Math.min(lengthLimit, verticalSizeLimit);\n } else if (\n checkBox &&\n tan < 0 &&\n x2 >= -overflowLimitLength.left &&\n limitLength / tan + x2 < -overflowLimitLength.left\n ) {\n // 以 x2 近似为锚点,文字在 x2 左侧\n const lengthLimit = (x2 + overflowLimitLength.left) / Math.abs(cos);\n limitLabelLength = Math.min(lengthLimit, verticalSizeLimit);\n } else {\n limitLabelLength = verticalSizeLimit;\n }\n } else {\n // y轴暂时不限制在平行于坐标轴的矩形内,后续可以考虑通过配置开启\n // const { y1, y2 } = label.AABBBounds;\n // const tan = sin / cos;\n // if (tan > 0 && y2 >= 0 && y2 - tan * limitLength < 0) {\n // limitLabelLength = y2 / Math.abs(sin);\n // } else if (tan < 0 && y1 <= axisLength && y1 - tan * limitLength > axisLength) {\n // limitLabelLength = (axisLength - y1) / Math.abs(sin);\n // } else {\n // }\n limitLabelLength = Math.abs(limitLength / cos);\n }\n } else if (isX) {\n limitLabelLength = isHorizontal ? verticalLimitLength : limitLength;\n } else {\n limitLabelLength = direction === 'vertical' || isVertical ? verticalLimitLength : limitLength;\n }\n\n if (isValidNumber(label.attribute.maxLineWidth)) {\n limitLabelLength = isValidNumber(limitLabelLength)\n ? Math.min(label.attribute.maxLineWidth, limitLabelLength)\n : label.attribute.maxLineWidth;\n }\n label.setAttributes({\n maxLineWidth: limitLabelLength,\n ellipsis: label.attribute.ellipsis ?? ellipsis\n });\n });\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isEmpty, isValidNumber, min } from '@visactor/vutils';\nimport { isAngleHorizontal, isAngleVertical } from './util';\n\ntype WrapConfig = {\n orient: string;\n limitLength: number;\n axisLength: number;\n ellipsis?: string;\n};\n\nexport function autoWrap(labels: IText[], config: WrapConfig) {\n const { limitLength, axisLength, ellipsis = '...', orient } = config;\n if (isEmpty(labels) || !isValidNumber(limitLength)) {\n return;\n }\n\n // 注意:自动换行算法暂时只考虑所有标签角度都一致的情况\n const firstLabel = labels[0];\n const angle = firstLabel.attribute.angle;\n const isHorizontal = isAngleHorizontal(angle);\n const isVertical = isAngleVertical(angle);\n const isX = orient === 'top' || orient === 'bottom';\n\n let verticalLimitLength = axisLength / labels.length;\n\n labels.forEach((label, index) => {\n if (isX) {\n if (isVertical && Math.floor(label.AABBBounds.height()) <= limitLength) {\n return;\n }\n if (isHorizontal) {\n const curLabelX = label.attribute.x;\n const nextLabelX = labels[index + 1]?.attribute.x;\n const lastLabelX = labels[index - 1]?.attribute.x;\n const minGap = getLabelMinGap(curLabelX, nextLabelX, lastLabelX);\n if (isValidNumber(minGap)) {\n verticalLimitLength = min(verticalLimitLength, minGap);\n }\n }\n } else {\n if (isVertical) {\n const curLabelY = label.attribute.y;\n const nextLabelY = labels[index + 1]?.attribute.y;\n const lastLabelY = labels[index - 1]?.attribute.y;\n const minGap = getLabelMinGap(curLabelY, nextLabelY, lastLabelY);\n if (isValidNumber(minGap)) {\n verticalLimitLength = min(verticalLimitLength, minGap);\n }\n }\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= limitLength) {\n return;\n }\n }\n\n let limitLabelLength = null;\n let heightLimit = null;\n\n if (isX) {\n if (isVertical) {\n limitLabelLength = limitLength;\n heightLimit = verticalLimitLength;\n } else {\n limitLabelLength = verticalLimitLength;\n heightLimit = limitLength;\n }\n } else {\n if (isVertical) {\n limitLabelLength = verticalLimitLength;\n heightLimit = limitLength;\n } else {\n limitLabelLength = limitLength;\n heightLimit = verticalLimitLength;\n }\n }\n label.setAttributes({\n maxLineWidth: limitLabelLength,\n ellipsis: label.attribute.ellipsis ?? ellipsis,\n whiteSpace: 'normal',\n heightLimit\n });\n });\n}\n\nfunction getLabelMinGap(current: number, next?: number, prev?: number) {\n let minGap;\n if (isValidNumber(next)) {\n minGap = Math.abs(next - current);\n }\n\n if (isValidNumber(prev)) {\n if (isValidNumber(minGap)) {\n minGap = Math.min(Math.abs(current - prev), minGap);\n } else {\n minGap = Math.abs(current - prev);\n }\n }\n\n return minGap;\n}\n","import type { IText } from '@visactor/vrender-core';\n\nexport function alignAxisLabels(labels: IText[], start: number, containerSize: number, orient: string, align: string) {\n if (orient === 'left' || orient === 'right') {\n if (align === 'left') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start - label.AABBBounds.x1\n });\n });\n } else if (align === 'right') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start + containerSize - label.AABBBounds.x2\n });\n });\n } else if (align === 'center') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start + containerSize / 2 - (label.AABBBounds.x1 + label.AABBBounds.x2) / 2\n });\n });\n }\n } else if (orient === 'bottom' || orient === 'top') {\n if (align === 'top') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start - label.AABBBounds.y1\n });\n });\n } else if (align === 'bottom') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start + containerSize - label.AABBBounds.y2\n });\n });\n } else if (align === 'middle') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start + containerSize / 2 - (label.AABBBounds.y1 + label.AABBBounds.y2) / 2\n });\n });\n }\n }\n}\n","import type { Point } from '../../core/type';\nimport { normalize, scale } from '../../util';\n\nexport interface LineAxisMixin {\n attribute: { start: Point; end: Point; verticalFactor?: number };\n}\n\nexport class LineAxisMixin {\n isInValidValue(value: number) {\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const { start } = this.attribute;\n const axisVector = this.getRelativeVector();\n return {\n x: start.x + axisVector[0] * tickValue,\n y: start.y + axisVector[1] * tickValue\n };\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { start, end } = this.attribute;\n return [end.x - start.x, end.y - start.y];\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n const { verticalFactor = 1 } = this.attribute;\n const axisVector = this.getRelativeVector();\n const normalizedAxisVector = normalize(axisVector);\n const verticalVector: [number, number] = [normalizedAxisVector[1], normalizedAxisVector[0] * -1];\n return scale(verticalVector, offset * (inside ? 1 : -1) * verticalFactor);\n }\n}\n","import {\n registerCircle,\n registerGroup,\n registerLine,\n registerPath,\n registerRect,\n registerRichtext,\n registerText\n} from '@visactor/vrender-kits';\n\nfunction loadBasicAxis() {\n registerGroup();\n registerLine();\n registerRichtext();\n registerText();\n}\n\nexport function loadLineAxisComponent() {\n loadBasicAxis();\n registerRect();\n}\n\nexport function loadCircleAxisComponent() {\n loadBasicAxis();\n registerCircle();\n}\n\nexport function loadLineAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadCircleAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n","/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TextAlignType, IGroup, INode, IText, TextBaselineType } from '@visactor/vrender-core';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport type { TagAttributes } from '../tag';\nimport type { LineAttributes, LineAxisAttributes, TitleAttributes, AxisItem, TransformedAxisBreak } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES, TopZIndex } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { autoWrap as autoWrapFunc } from './overlap/auto-wrap';\n\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineAxisComponent } from './register';\nimport { getAxisBreakSymbolAttrs } from './util';\n\nloadLineAxisComponent();\nexport interface LineAxis\n extends Pick,\n AxisBase {}\n\nexport class LineAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: LineAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineAxis.defaultAttributes, attributes), options);\n }\n\n private _breaks: TransformedAxisBreak[];\n\n protected _renderInner(container: IGroup) {\n this._breaks = null; // 置空,防止轴更新时缓存了旧值\n if (this.attribute.breaks && this.attribute.breaks.length) {\n const transformedBreaks = [];\n for (let index = 0; index < this.attribute.breaks.length; index++) {\n const aBreak = this.attribute.breaks[index];\n const { range, breakSymbol, rawRange } = aBreak;\n transformedBreaks.push({\n startPoint: this.getTickCoord(range[0]),\n endPoint: this.getTickCoord(range[1]),\n range,\n breakSymbol,\n rawRange\n });\n }\n this._breaks = transformedBreaks;\n }\n super._renderInner(container);\n\n // 渲染 break symbol\n if (this._breaks && this._breaks.length) {\n this._breaks.forEach((b, index) => {\n const { startPoint, endPoint, breakSymbol, rawRange } = b;\n\n if (breakSymbol?.visible !== false) {\n const axisBreakGroup = graphicCreator.group({\n zIndex: TopZIndex // 层级需要高于轴线\n });\n axisBreakGroup.name = AXIS_ELEMENT_NAME.axisBreak;\n axisBreakGroup.id = this._getNodeId(`${AXIS_ELEMENT_NAME.axisBreak}-${index}`);\n axisBreakGroup.data = rawRange;\n const symbolStyle = getAxisBreakSymbolAttrs(breakSymbol);\n const shape1 = graphicCreator.symbol({\n x: startPoint.x,\n y: startPoint.y,\n ...symbolStyle\n });\n shape1.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n const shape2 = graphicCreator.symbol({\n x: endPoint.x,\n y: endPoint.y,\n ...symbolStyle\n });\n shape2.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n\n axisBreakGroup.add(shape1);\n axisBreakGroup.add(shape2);\n\n container.add(axisBreakGroup);\n }\n });\n }\n\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = graphicCreator.rect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n }\n\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, state, ...restLineAttrs } = line as LineAttributes;\n\n const lineAttrs = {\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (this._breaks && this._breaks.length) {\n // 配置了轴截断\n const linePoints = [];\n let lastStartPoint = start;\n this._breaks.forEach(b => {\n const { startPoint, endPoint } = b;\n linePoints.push([lastStartPoint, startPoint]);\n lastStartPoint = endPoint;\n });\n linePoints.push([lastStartPoint, end]);\n lineAttrs.points = linePoints;\n lineAttrs.multiSegment = true;\n } else {\n lineAttrs.points = [start, end];\n }\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state = {},\n maxWidth,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.height() : 0;\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n if (\n this.axisLabelsContainer &&\n this.axisLabelsContainer.AABBBounds &&\n !this.axisLabelsContainer.AABBBounds.empty()\n ) {\n const baseX = this.axisLabelLayerSize[0].labelPos;\n const bounds = this.axisLabelsContainer.AABBBounds;\n\n labelLength +=\n (factor === 1\n ? bounds.x2 > baseX\n ? Math.min(bounds.x2 - baseX, bounds.width())\n : 0\n : bounds.x1 < baseX\n ? Math.min(baseX - bounds.x1, bounds.width())\n : 0) +\n (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const titlePoint = this.getVerticalCoord(point, offset, false); // 标题的点\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算标题缩略\n let maxTagWidth = maxWidth;\n if (isNil(maxTagWidth)) {\n const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n if (isValidNumber(limitSize)) {\n const isX = orient === 'bottom' || orient === 'top';\n if (isX) {\n if (angle !== Math.PI / 2) {\n const cosValue = Math.abs(Math.cos(angle ?? 0));\n maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n } else {\n maxTagWidth = limitSize - offset;\n }\n } else {\n if (angle && angle !== 0) {\n const sinValue = Math.abs(Math.sin(angle));\n maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n } else {\n maxTagWidth = limitSize - offset;\n }\n }\n }\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n const isCartesian = ['top', 'bottom', 'right', 'left'].includes(orient);\n // 目前的向量方法暂无法返回正确的笛卡尔坐标轴下文本旋转后的问题,所以通过这种方法判断,保证旋转后 textAlign 和 textBaseline 也正确\n if (isCartesian || (vector[0] === 0 && vector[1] === 0)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(inside ? (orient === 'bottom' ? 'top' : 'bottom') : orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(inside ? (orient === 'left' ? 'right' : 'left') : orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start: axisStart, end: axisEnd } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n if (isX) {\n const leftMostLabel = isInverse ? last : first;\n const rightMostLabel = isInverse ? first : last;\n const left = axisStart.x;\n const right = axisEnd.x;\n const leftBound = leftMostLabel.AABBBounds.x1;\n const rightBound = rightMostLabel.AABBBounds.x2;\n\n if (leftBound < left) {\n const angle = leftMostLabel.attribute.angle;\n\n if (angle) {\n leftMostLabel.setAttributes({ dx: (leftMostLabel.attribute.dx ?? 0) + left - leftBound });\n } else {\n leftMostLabel.setAttributes({\n x: left,\n textAlign: 'left'\n });\n }\n }\n\n if (rightBound > right) {\n const angle = rightMostLabel.attribute.angle;\n\n if (angle) {\n rightMostLabel.setAttributes({ dx: (rightMostLabel.attribute.dx ?? 0) + right - rightBound });\n } else {\n rightMostLabel.setAttributes({\n x: right,\n textAlign: 'right'\n });\n }\n }\n } else {\n const bottomMostLabel = isInverse ? last : first;\n const topMostLabel = isInverse ? first : last;\n const bottomBound = bottomMostLabel.AABBBounds.y2;\n const topBound = topMostLabel.AABBBounds.y1;\n const top = axisStart.y;\n const bottom = axisEnd.y;\n\n if (topBound < top) {\n const angle = topMostLabel.attribute.angle;\n\n if (angle) {\n // has rotate\n topMostLabel.setAttributes({\n dy: (topMostLabel.attribute.dy ?? 0) + top - topBound\n });\n } else {\n topMostLabel.setAttributes({\n y: top,\n textBaseline: 'top'\n });\n }\n }\n\n if (bottomBound > bottom) {\n const angle = bottomMostLabel.attribute.angle;\n\n if (angle) {\n bottomMostLabel.setAttributes({\n dy: (bottomMostLabel.attribute.dy ?? 0) + bottom - bottomBound\n });\n } else {\n bottomMostLabel.setAttributes({\n y: bottom,\n textBaseline: 'bottom'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation,\n lastVisible,\n firstVisible,\n autoWrap,\n overflowLimitLength\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate Or autoRotate -> autoLimit -> autoHide\n // priority: autoRotate > autoWrap\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n } else if (autoWrap) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n autoWrapFunc(labelShapes, { orient, limitLength, axisLength, ellipsis: limitEllipsis });\n }\n\n // autoWrap has computed width & height limit\n if (!autoWrap && autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n\n const verticalLimitLength = isVertical\n ? axisLength / labelShapes.length\n : !autoHide && !autoRotate\n ? axisLength / labelShapes.length\n : Infinity;\n\n autoLimitFunc(labelShapes, {\n limitLength,\n verticalLimitLength,\n ellipsis: limitEllipsis,\n orient,\n axisLength,\n overflowLimitLength\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation,\n lastVisible,\n firstVisible\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = graphicCreator.rect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line && line.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick && tick.visible ? tick.length ?? 4 : 0;\n if (title && title.visible && typeof title.text === 'string') {\n titleHeight = measureTextSize(title.text, title.textStyle, this.stage?.getTheme()?.text).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n\n release(): void {\n super.release();\n this._breaks = null;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n","import { polarToCartesian } from '@visactor/vutils';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport type { Point } from '../../core/type';\nimport { getCircleVerticalVector } from '../util';\n\nexport interface CircleAxisMixin {\n attribute: {\n /**\n * 当配置了 innerRadius 时,可以通过设置 inside: true,将坐标轴战士在内圆半径上。\n * @default false\n */\n inside?: boolean;\n /**\n * 圆心坐标\n */\n center: Point;\n /**\n * **弧度值**,起始弧度,默认 -0.5 * Math.PI\n *\n */\n startAngle?: number;\n /**\n * **弧度值**,结束弧度,默认 1.5 * Math.PI\n */\n endAngle?: number;\n /**\n * 半径\n */\n radius: number;\n /** 内半径 */\n innerRadius?: number;\n };\n}\n\nexport class CircleAxisMixin {\n isInValidValue(value: number) {\n const { startAngle = POLAR_START_ANGLE, endAngle = POLAR_END_ANGLE } = this.attribute;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n return value > 1;\n }\n\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n radius,\n inside = false,\n innerRadius = 0\n } = this.attribute;\n const angle = startAngle + (endAngle - startAngle) * tickValue;\n return polarToCartesian(center, inside && innerRadius > 0 ? innerRadius : radius, angle);\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n return getCircleVerticalVector(offset, point, this.attribute.center, inside, this.attribute.inside);\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { center } = this.attribute;\n return [point.y - center.y, -1 * (point.x - center.x)];\n }\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNumberClose } from '@visactor/vutils';\nimport type { Point } from '../../core/type';\n\ntype WrapConfig = {\n center: Point;\n inside?: boolean;\n ellipsis?: string;\n bounds: { x1: number; x2: number; y1: number; y2: number };\n autoWrap?: boolean;\n};\n\nfunction findSiblingLabels(labels: IText[], selfIndex: number) {\n const len = labels.length;\n const prevLabel = selfIndex >= 1 ? labels[selfIndex - 1] : labels[len - 1];\n const nextLabel = selfIndex < len - 1 ? labels[selfIndex + 1] : labels[0];\n\n return { prevLabel, nextLabel };\n}\n\nfunction adjustMaxLineWidth(label: IText, maxLineWidth: number, ellipsis: string) {\n label.setAttributes({\n maxLineWidth,\n ellipsis: label.attribute.ellipsis ?? ellipsis\n });\n}\n\nfunction adjustMaxHeight(\n labels: IText[],\n selfIndex: number,\n bounds: { x1: number; x2: number; y1: number; y2: number }\n) {\n const siblings = [];\n if (labels.length >= 3) {\n const { prevLabel, nextLabel } = findSiblingLabels(labels, selfIndex);\n\n siblings.push(prevLabel, nextLabel);\n } else if (labels.length === 2) {\n siblings.push(labels[selfIndex === 0 ? 1 : 0]);\n }\n const label = labels[selfIndex];\n\n let heightLimit = Math.min(Math.abs(label.attribute.y - bounds.y1), Math.abs(label.attribute.y - bounds.y2));\n\n siblings.forEach(sibling => {\n heightLimit = Math.min(heightLimit, Math.abs(sibling.attribute.y - label.attribute.y));\n });\n\n if (heightLimit > 0) {\n label.setAttributes({ whiteSpace: 'normal', heightLimit });\n }\n}\n/**\n * 基于所有的标签初始化未知已经布局在圆的边缘\n * @param labels\n * @param labelPoints\n * @param config\n */\nexport function circleAutoLimit(labels: IText[], config: WrapConfig) {\n const { ellipsis, inside, bounds, autoWrap, center } = config;\n\n if (!inside) {\n // TODO inside label暂不处理,现在应该没有类似的需求\n labels.forEach((label, index) => {\n const { x, y } = label.attribute;\n const b = label.AABBBounds;\n\n if (isNumberClose(x, center.x)) {\n if (y > bounds.y2 || y < bounds.y1) {\n adjustMaxLineWidth(label, 0, ellipsis);\n return;\n }\n\n const boxWidth = bounds.x2 - bounds.x1;\n // 12点和6点钟方向对应的label\n if (labels.length >= 3) {\n // 这里其实有一个前提:所有的label都是按照顺时针或者逆时针排序好的\n const { prevLabel, nextLabel } = findSiblingLabels(labels, index);\n let leftX = prevLabel.attribute.x;\n let rightX = nextLabel.attribute.x;\n\n if (leftX > rightX) {\n leftX = nextLabel.attribute.x;\n rightX = prevLabel.attribute.x;\n }\n\n const maxWidth =\n leftX === rightX\n ? boxWidth\n : x >= leftX && x <= rightX\n ? rightX - leftX\n : Math.min(Math.abs(leftX - x), Math.abs(rightX - x));\n if (label.AABBBounds.width() > maxWidth) {\n adjustMaxLineWidth(label, maxWidth, ellipsis);\n }\n } else if (label.AABBBounds.width() > boxWidth) {\n adjustMaxLineWidth(label, boxWidth, ellipsis);\n }\n } else if (x > center.x && b.x2 > bounds.x2) {\n adjustMaxLineWidth(label, bounds.x2 - x, ellipsis);\n autoWrap && adjustMaxHeight(labels, index, bounds);\n } else if (x < center.x && b.x1 < bounds.x1) {\n adjustMaxLineWidth(label, x - bounds.x1, ellipsis);\n autoWrap && adjustMaxHeight(labels, index, bounds);\n }\n });\n }\n}\n","/**\n * @description 圆弧型坐标轴\n */\nimport type {\n IGraphic,\n IGroup,\n IText,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Point } from '@visactor/vutils';\nimport { isNil, get, merge, isNumberClose, isEmpty, mixin, isValidNumber, isFunction } from '@visactor/vutils';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport type { CircleAxisAttributes, TitleAttributes, SubTickAttributes, TickLineItem, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { CircleAxisMixin } from './mixin/circle';\nimport { getCirclePoints, getPolygonPath } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleAxisComponent } from './register';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { circleAutoLimit } from './overlap/circle-auto-limit';\n\nloadCircleAxisComponent();\nexport interface CircleAxis\n extends Pick,\n AxisBase {}\n\nexport class CircleAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: CircleAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleAxis.defaultAttributes, attributes));\n }\n\n protected renderLine(container: IGroup): void {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n radius,\n center,\n innerRadius = 0,\n line = {},\n inside = false,\n sides\n } = this.attribute as CircleAxisAttributes;\n\n let arcRadius = radius;\n let arcInnerRadius = innerRadius;\n if (inside && innerRadius > 0) {\n arcRadius = innerRadius;\n arcInnerRadius = 0;\n }\n\n let lineGraphic: IGraphic;\n if (isValidNumber(sides) && sides >= 3) {\n const gridPoints = getCirclePoints(center as Point, sides as number, arcRadius, startAngle, endAngle);\n\n lineGraphic = graphicCreator.path({\n ...line.style,\n path: getPolygonPath(gridPoints, true)\n });\n } else {\n const arcAttrs = {\n ...center,\n startAngle,\n endAngle,\n radius: arcRadius,\n innerRadius: arcInnerRadius,\n ...line.style\n };\n lineGraphic = graphicCreator.circle(arcAttrs);\n }\n\n lineGraphic.name = AXIS_ELEMENT_NAME.line;\n lineGraphic.id = this._getNodeId('line');\n\n if (!isEmpty(line.state)) {\n lineGraphic.states = merge({}, DEFAULT_STATES, line.state);\n }\n container.add(lineGraphic);\n }\n\n protected getTitleAttribute() {\n const { center, radius, innerRadius = 0 } = this.attribute as CircleAxisAttributes;\n const {\n space = 4,\n textStyle = {},\n shape,\n background,\n state = {},\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let titlePoint = center;\n let labelHeight = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n // 这里取 label 的最大长度\n labelHeight = get(this.attribute.label, 'style.fontSize', 12) + get(this.attribute.label, 'space', 4);\n }\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n const offset = radius + tickLength + labelHeight + space;\n let textBaseline: TextBaselineType = 'middle';\n let { position } = this.attribute.title as TitleAttributes;\n if (isNil(position)) {\n position = innerRadius === 0 ? 'end' : 'middle';\n }\n if (position === 'start') {\n textBaseline = 'bottom';\n titlePoint = {\n x: center.x,\n y: center.y - offset\n };\n } else if (position === 'end') {\n textBaseline = 'top';\n titlePoint = {\n x: center.x,\n y: center.y + offset\n };\n }\n const attrs: any = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n textBaseline,\n textAlign: 'center',\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n\n const { angle } = restAttrs; // 用户设置的是角度\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as CircleAxisAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const tickSegment = this.data[1].value - this.data[0].value;\n const isAlignWithLable = this.attribute?.tick?.alignWithLabel;\n for (let i = 0; i < tickLineCount; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : isAlignWithLable ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { inside, radius, center, size, label, orient } = this.attribute;\n // 宽高为0的异常情况,还是以圆心进行布局\n const bounds = size\n ? {\n x1: 0,\n y1: 0,\n x2: size.width,\n y2: size.height\n }\n : {\n x1: center.x - radius,\n y1: center.y - radius,\n x2: center.x + radius,\n y2: center.y + radius\n };\n const { layoutFunc, autoLimit, limitEllipsis, autoHide, autoHideMethod, autoHideSeparation, autoWrap } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // autoWrap has computed width & height limit\n if (autoLimit || autoWrap) {\n circleAutoLimit(labelShapes, { inside, autoWrap, bounds, ellipsis: limitEllipsis, center });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation\n });\n }\n }\n }\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n\n protected getTextBaseline(vector: [number, number]) {\n if (Math.abs(vector[1] / vector[0]) < 0.3) {\n return 'middle';\n } else if (vector[1] < 0) {\n return 'bottom';\n } else if (vector[1] > 0) {\n return 'top';\n }\n\n return 'middle';\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n if (isNumberClose(vector[0], 0)) {\n return {\n textAlign: 'center',\n textBaseline: vector[1] > 0 ? 'top' : 'bottom'\n };\n } else if (vector[0] < 0) {\n return {\n textAlign: 'right',\n textBaseline: this.getTextBaseline(vector)\n };\n } else if (vector[0] > 0) {\n return {\n textAlign: 'left',\n textBaseline: this.getTextBaseline(vector)\n };\n }\n\n return {\n textAlign: 'center', //'left',\n textBaseline: 'middle' //'top'\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return point;\n }\n}\n\nmixin(CircleAxis, CircleAxisMixin);\n","import { isString } from '@visactor/vutils';\nimport type { IScale, Nil } from '../types';\nimport type { IScaleComponent, ScaleComponentSpec } from '../types/component';\nimport { Component } from '../view/component';\n\nexport abstract class ScaleComponent extends Component implements IScaleComponent {\n protected declare spec: ScaleComponentSpec;\n\n protected parseAddition(spec: ScaleComponentSpec) {\n super.parseAddition(spec);\n this.scale(spec.scale);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n if (this.spec.scale) {\n const lastScaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this.detach(lastScaleGrammar);\n this.spec.scale = undefined;\n }\n const scaleGrammar = isString(scale) ? this.view.getScaleById(scale) : scale;\n this.spec.scale = scaleGrammar;\n this.attach(scaleGrammar);\n\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n getScale() {\n return isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n }\n}\n","import { isNil, isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisAttributes, LineAxisAttributes, ComponentOptions } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxis as CircleAxisComponent, LineAxis as LineAxisComponent } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum } from '../graph/enums';\nimport type { AxisSpec, AxisType, IAxis } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport type { IPolarCoordinate, IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisAttributes => {\n const axisTheme = theme?.components?.axis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisAttributes => {\n const axisTheme = theme?.components?.circleAxis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCoordinateAxisAttribute = (\n scale: IScale,\n coordinate: IBaseCoordinate,\n inside: boolean,\n baseValue: number,\n layout: MarkRelativeItemSpec,\n isGrid?: boolean\n) => {\n const axisPosition = scale.getCoordinateAxisPosition();\n if (layout && layout.position === 'auto') {\n // FIXME: too hack\n layout.position = inside ? 'content' : axisPosition;\n }\n\n const axisPoints = scale.getCoordinateAxisPoints(baseValue);\n\n if (axisPoints) {\n const start = axisPoints[0];\n const end = axisPoints[1];\n const res: any = {\n start,\n end,\n verticalFactor:\n (axisPosition === 'top' || axisPosition === 'left' ? -1 : 1) *\n (inside ? -1 : 1) *\n (scale.getSpec().range?.reversed ? -1 : 1)\n };\n\n if (isGrid && coordinate.type === 'polar') {\n const angle = (coordinate as IPolarCoordinate).angle();\n\n res.center = (coordinate as IPolarCoordinate).origin();\n res.startAngle = angle[0];\n res.endAngle = angle[1];\n }\n\n return res;\n }\n\n const radius = (coordinate as IPolarCoordinate).radius();\n const angle = (coordinate as IPolarCoordinate).angle();\n return {\n center: (coordinate as IPolarCoordinate).origin(),\n radius: radius[1],\n innerRadius: radius[0],\n inside: inside,\n startAngle: angle[0],\n endAngle: angle[1]\n };\n};\n\nexport class Axis extends ScaleComponent implements IAxis {\n static readonly componentType: string = ComponentEnum.axis;\n\n protected declare spec: AxisSpec;\n\n private _axisComponentType: keyof typeof AxisEnum;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.axis, group);\n this.spec.componentType = ComponentEnum.axis;\n this.mode = mode;\n }\n\n protected parseAddition(spec: AxisSpec) {\n super.parseAddition(spec);\n\n this.axisType(spec.axisType);\n this.tickCount(spec.tickCount);\n this.inside(spec.inside);\n this.baseValue(spec.baseValue);\n\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._axisComponentType = null;\n return this;\n }\n\n axisType(axisType: AxisType | Nil) {\n this.spec.axisType = axisType;\n this._axisComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getAxisComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n getAxisComponentType() {\n return this._axisComponentType;\n }\n\n protected _updateComponentEncoders() {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec\n ),\n addition\n );\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n\n switch (this._getAxisComponentType()) {\n case AxisEnum.lineAxis:\n return generateLineAxisAttributes(scale, theme, addition, tickCount);\n case AxisEnum.circleAxis:\n return generateCircleAxisAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getAxisComponentType() {\n if (this._axisComponentType) {\n return this._axisComponentType;\n }\n\n let type = this.spec.axisType;\n\n if (isNil(type)) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n type = scaleGrammar?.getCoordinate?.() ? (scaleGrammar.getCoordinateAxisPoints() ? 'line' : 'circle') : 'line';\n }\n\n this._axisComponentType = type === 'circle' ? AxisEnum.circleAxis : AxisEnum.lineAxis;\n\n return this._axisComponentType;\n }\n}\n\nexport const registerAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.lineAxis,\n (attrs: LineAxisAttributes, options?: ComponentOptions) =>\n new LineAxisComponent(attrs, options) as unknown as IGraphic\n );\n Factory.registerGraphicComponent(\n AxisEnum.circleAxis,\n (attrs: CircleAxisAttributes) => new CircleAxisComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n\nexport const registerLineAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.lineAxis,\n (attrs: LineAxisAttributes, options?: ComponentOptions) =>\n new LineAxisComponent(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n\nexport const registerCircleAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.circleAxis,\n (attrs: CircleAxisAttributes) => new CircleAxisComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n","/**\n * @description 网格线\n */\nimport { isFunction, isArray, merge, PointService, abs, pi, isNumberClose } from '@visactor/vutils';\nimport type { IGraphic, IGroup, Path } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { Point } from '../../core/type';\nimport type { GridItem, CircleGridAttributes, GridBaseAttributes, GridAttributes, LineGridAttributes } from './type';\nimport type { AxisItem, TransformedAxisItem } from '../type';\nimport { AXIS_ELEMENT_NAME } from '../constant';\nimport { getElMap, getPolygonPath, getVerticalCoord } from '../util';\n\nfunction getArcPath(center: Point, points: Point[], reverse: boolean, closed: boolean) {\n let path = '';\n if (!center || points.length === 0) {\n return path;\n }\n const firstPoint = points[0];\n const radius = PointService.distancePP(center, firstPoint);\n const sweepFlag = reverse ? 0 : 1; // 顺时针还是逆时针\n if (closed) {\n // 封闭时,绘制整个圆\n path += `M${center.x},${center.y - radius}A${radius},${radius},0,0,${sweepFlag},${center.x},${\n center.y + radius\n }A${radius},${radius},0,0,${sweepFlag},${center.x},${center.y - radius}Z`;\n } else {\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `A${radius},${radius},0,0,${sweepFlag},${point.x},${point.y}`;\n }\n });\n }\n\n return path;\n}\n\nfunction getRegionPath(from: Point[], to: Point[], attribute: GridAttributes) {\n const { type, closed } = attribute;\n const reversePoints = to.slice(0).reverse();\n\n let regionPath = '';\n let nextPath = '';\n\n if (type === 'line' && (attribute as LineGridAttributes).smoothLink && (attribute as LineGridAttributes).center) {\n const fromStart = from[0];\n const toEnd = reversePoints[0];\n const center = (attribute as LineGridAttributes).center as Point;\n\n regionPath = getPolygonPath(from, !!closed);\n nextPath = getPolygonPath(reversePoints, !!closed);\n const toEndRadius = PointService.distancePP(toEnd, center);\n const fromStartRadius = PointService.distancePP(fromStart, center);\n regionPath += `A${toEndRadius},${toEndRadius},0,0,1,${toEnd.x},${toEnd.y}L${toEnd.x},${toEnd.y}`;\n nextPath += `A${fromStartRadius},${fromStartRadius},0,0,0,${fromStart.x},${fromStart.y}`;\n } else if (type === 'circle') {\n const { center } = attribute as CircleGridAttributes;\n regionPath = getArcPath(center, from, false, !!closed);\n nextPath = getArcPath(center, reversePoints, true, !!closed);\n } else if (type === 'line' || type === 'polygon') {\n regionPath = getPolygonPath(from, !!closed);\n nextPath = getPolygonPath(reversePoints, !!closed);\n }\n\n if (closed) {\n regionPath += nextPath;\n } else {\n nextPath = 'L' + nextPath.substring(1); // 更新第一个节点\n regionPath += nextPath;\n regionPath += 'Z';\n }\n return regionPath;\n}\n\nexport abstract class BaseGrid extends AbstractComponent> {\n name = 'axis-grid';\n\n static defaultAttributes: Partial = {\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n }\n };\n\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n abstract getTickCoord(value: number): Point;\n abstract isInValidValue(value: number): boolean;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n protected abstract getGridAttribute(isSubGrid: boolean): T;\n protected abstract getGridPointsByValue(value: number): Point[];\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n const { items, visible } = this.attribute;\n if (items && items.length && visible !== false) {\n this.data = this._transformItems(items);\n this._renderGrid(this._innerView);\n }\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n private _renderGrid(container: any) {\n // 渲染 subGrid\n const { visible } = this.attribute.subGrid || {};\n if (visible) {\n this._renderGridByType(true, container);\n }\n\n // 渲染 Grid,Grid 需要在 subGrid 上层渲染\n this._renderGridByType(false, container);\n }\n\n private _renderGridByType(isSubGrid: boolean, container: IGroup) {\n const gridAttrs = merge({}, this.attribute, this.getGridAttribute(isSubGrid));\n\n const { type, items, style, closed, alternateColor, depth = 0 } = gridAttrs;\n const name = isSubGrid ? `${AXIS_ELEMENT_NAME.grid}-sub` : `${AXIS_ELEMENT_NAME.grid}`;\n\n // 绘制网格线\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n let path = '';\n if (type === 'line' || type === 'polygon') {\n path = getPolygonPath(points, !!closed);\n } else if (type === 'circle') {\n const { center } = this.attribute as unknown as CircleGridAttributes;\n path = getArcPath(center, points, false, !!closed);\n }\n const shape = graphicCreator.path({\n path,\n z: depth,\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n\n // 添加额外的3d线段\n if (depth && type === 'line') {\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n // 重新计算points,使其长度为depth\n const nextPoints = [];\n nextPoints.push(points[0]);\n const dir = { x: points[1].x - points[0].x, y: points[1].y - points[0].y };\n const dirLen = Math.sqrt(dir.x * dir.x + dir.y * dir.y);\n const ratio = depth / dirLen;\n nextPoints.push({ x: points[0].x + dir.x * ratio, y: points[0].y + dir.y * ratio });\n const path = getPolygonPath(nextPoints, !!closed);\n const deltaX = abs(nextPoints[0].x - nextPoints[1].x);\n const deltaY = abs(nextPoints[0].y - nextPoints[1].y);\n const shape = graphicCreator.path({\n path,\n z: 0,\n alpha: deltaX > deltaY ? ((points[1].x - points[0].x > 0 ? -1 : 1) * pi) / 2 : 0,\n beta: deltaX < deltaY ? -pi / 2 : 0,\n anchor3d: deltaX > deltaY ? [nextPoints[0].x, 0] : [0, nextPoints[0].y],\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n }\n\n // 绘制填充区域\n if (items.length > 1 && alternateColor) {\n const colors: string[] = isArray(alternateColor)\n ? (alternateColor as string[])\n : [alternateColor as string, 'transparent'];\n const getColor = (index: number) => colors[index % colors.length];\n const originalItems = this.attribute.items;\n const firstItem = originalItems[0];\n const lastItem = originalItems[originalItems.length - 1];\n const noZero = !isNumberClose(firstItem.value, 0) && !isNumberClose(lastItem.value, 0);\n const noOne = !isNumberClose(firstItem.value, 1) && !isNumberClose(lastItem.value, 1);\n const allPoints = [];\n const isDesc = firstItem.value > lastItem.value;\n\n if ((isDesc && noOne) || (!isDesc && noZero)) {\n allPoints.push(this.getGridPointsByValue(isDesc ? 1 : 0));\n }\n items.forEach((item: any) => {\n allPoints.push(item.points as Point[]);\n });\n\n if ((isDesc && noZero) || (!isDesc && noOne)) {\n allPoints.push(this.getGridPointsByValue(isDesc ? 0 : 1));\n }\n\n for (let index = 0; index < allPoints.length - 1; index++) {\n const prev = allPoints[index];\n const curr = allPoints[index + 1];\n const path = getRegionPath(prev, curr, gridAttrs);\n const shape = graphicCreator.path({\n path,\n fill: getColor(index)\n }) as Path;\n shape.name = `${name}-region`;\n shape.id = this._getNodeId(`${name}-region-${index}`);\n container.add(shape);\n }\n }\n }\n\n /**\n * @override 覆写\n * @param id\n * @returns\n */\n protected _getNodeId(id: string) {\n return `${this.id}-${id}`;\n }\n\n protected _parseTickSegment() {\n let tickSegment = 1;\n const count = this.data.length;\n if (count >= 2) {\n tickSegment = this.data[1].value - this.data[0].value;\n }\n\n return tickSegment;\n }\n\n protected _getPointsOfSubGrid(tickSegment: number, alignWithLabel: boolean) {\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n const points: { value: number }[] = [];\n if (tickLineCount >= 2) {\n this.data.forEach((item: TransformedAxisItem) => {\n let tickValue = item.value;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n tickValue = value;\n }\n points.push({\n value: tickValue\n });\n });\n }\n\n return points;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n","/**\n * @description 直线型坐标轴的网格线\n * - `type: 'line'` 用于直角坐标系下的坐标轴网格线绘制\n * - `type: 'circle'` 或者 `type: 'polygon'` 用于极坐标半径轴的网格线绘制\n */\nimport type { IPointLike } from '@visactor/vutils';\nimport { PointService, merge, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type {\n GridItem,\n LineAxisGridAttributes,\n LineGridOfLineAxisAttributes,\n PolarGridOfLineAxisAttributes\n} from './type';\nimport type { Point } from '../../core/type';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport { LineAxisMixin } from '../mixin/line';\nimport type { ComponentOptions } from '../../interface';\nimport { loadLineAxisGridComponent } from '../register';\nimport { getCirclePoints } from '../util';\n\nexport interface LineAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadLineAxisGridComponent();\nexport class LineAxisGrid extends BaseGrid {\n constructor(attributes: LineAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n private _getGridPoint(gridType: string, point: IPointLike): Point[] {\n let gridPoints;\n if (gridType === 'line') {\n const { length } = this.attribute as LineGridOfLineAxisAttributes;\n const endPoint = this.getVerticalCoord(point, length as number, true);\n\n gridPoints = [point, endPoint];\n } else if (gridType === 'circle' || gridType === 'polygon') {\n const {\n center,\n sides = 6,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as PolarGridOfLineAxisAttributes;\n const distance = PointService.distancePP(center as Point, point);\n gridPoints = getCirclePoints(center as Point, sides as number, distance, startAngle, endAngle);\n }\n\n return gridPoints;\n }\n\n protected getGridPointsByValue(value: number) {\n const basePoint = this.getTickCoord(value);\n\n return this._getGridPoint(this.attribute.type, basePoint);\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n const { type: gridType, alignWithLabel = true } = this.attribute;\n\n const tickSegment = this._parseTickSegment();\n\n let gridAttribute;\n let items: GridItem[] = [];\n if (!isSubGrid) {\n gridAttribute = this.attribute;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n this.data.forEach(item => {\n let { point } = item;\n\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n\n gridItems.push({\n id: item.label,\n datum: item,\n points: this._getGridPoint(gridType, point)\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, this.attribute, this.attribute.subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = gridAttribute;\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points = this._getPointsOfSubGrid(tickSegment, alignWithLabel);\n\n for (let i = 0; i < points.length - 1; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-0`,\n points: this.getGridPointsByValue(pre.value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: this.getGridPointsByValue(value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n if (i === points.length - 2) {\n subGridItems.push({\n id: `sub-${i}-${subCount + 1}`,\n points: this.getGridPointsByValue(next.value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n }\n items = subGridItems;\n }\n }\n\n return {\n ...gridAttribute,\n items\n };\n }\n}\n\nmixin(LineAxisGrid, LineAxisMixin);\n","/**\n * @description 圆弧型坐标轴的网格线\n */\n\nimport { merge, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type { CircleAxisGridAttributes, GridItem } from './type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../constant';\nimport { CircleAxisMixin } from '../mixin/circle';\nimport type { ComponentOptions } from '../../interface';\nimport { loadCircleAxisGridComponent } from '../register';\n\nexport interface CircleAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadCircleAxisGridComponent();\nexport class CircleAxisGrid extends BaseGrid {\n constructor(attributes: CircleAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n protected getGridPointsByValue(value: number) {\n const basePoint = this.getTickCoord(value);\n const { radius, innerRadius = 0 } = this.attribute;\n\n return [basePoint, this.getVerticalCoord(basePoint, radius - innerRadius, true)];\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n let gridAttribute;\n let items: GridItem[] = [];\n const {\n radius,\n innerRadius = 0,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n subGrid,\n ...grid\n } = this.attribute;\n const { alignWithLabel = true } = grid || {};\n\n const length = radius - innerRadius;\n const tickSegment = this._parseTickSegment();\n if (!isSubGrid) {\n gridAttribute = grid as CircleAxisGridAttributes;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n let data;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n data = [...this.data].concat(this.data[0]);\n } else {\n data = this.data;\n }\n\n data.forEach(item => {\n let { point } = item;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n const endPoint = this.getVerticalCoord(point, length as number, true);\n gridItems.push({\n id: item.id,\n points: [point, endPoint],\n datum: item\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, grid, subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = subGrid || {};\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points = this._getPointsOfSubGrid(tickSegment, alignWithLabel);\n\n for (let i = 0; i < tickLineCount; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-${0}`,\n points: [this.getTickCoord(pre.value), this.getVerticalCoord(this.getTickCoord(pre.value), length, true)],\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, true);\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: [point, endPoint],\n // TODO: 这里也需要,后续考虑如何加上\n datum: {}\n });\n }\n }\n\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n subGridItems.push(subGridItems[0]);\n }\n\n items = subGridItems;\n }\n }\n return {\n ...gridAttribute,\n items,\n center,\n type: 'line'\n };\n }\n}\n\nmixin(CircleAxisGrid, CircleAxisMixin);\n","import { isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisGridAttributes, ComponentOptions, LineAxisGridAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxisGrid, LineAxisGrid } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum, GridEnum } from '../graph/enums';\nimport type { GridShape, GridSpec, AxisType, IAxis, IGrid } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { generateCoordinateAxisAttribute } from './axis';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisGridAttributes => {\n const gridTheme = theme?.components?.grid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisGridAttributes => {\n const gridTheme = theme?.components?.circleGrid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport class Grid extends ScaleComponent implements IGrid {\n static readonly componentType: string = ComponentEnum.grid;\n protected declare spec: GridSpec;\n\n protected mode?: '2d' | '3d';\n\n private _gridComponentType: keyof typeof GridEnum;\n private _targetAxis: IAxis;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.grid, group);\n this.spec.componentType = ComponentEnum.grid;\n this.mode = mode;\n }\n\n protected parseAddition(spec: GridSpec) {\n super.parseAddition(spec);\n this.target(spec.target);\n this.gridType(spec.gridType);\n this.gridShape(spec.gridShape);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._gridComponentType = null;\n return this;\n }\n\n gridType(gridType: AxisType | Nil) {\n this.spec.gridType = gridType;\n this._gridComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n gridShape(gridShape: GridShape | Nil) {\n this.spec.gridShape = gridShape;\n // no need to rejoin when gridShape is updated\n // this._gridComponentType = null;\n // this._prepareRejoin();\n this.commit();\n return this;\n }\n\n target(axis: IAxis | string | Nil) {\n if (this.spec.target) {\n const prevAxis = isString(this.spec.target)\n ? (this.view.getMarkById(this.spec.target) as IAxis)\n : this.spec.target;\n this.detach(prevAxis);\n }\n this.spec.target = axis;\n const nextAxis = isString(axis) ? (this.view.getMarkById(axis) as IAxis) : axis;\n this.attach(nextAxis);\n this._targetAxis = nextAxis;\n\n // clear grid type when target is updated\n this._gridComponentType = null;\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getGridComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n let scaleGrammar: IScale;\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n // get attributes from target axis\n if (this._targetAxis) {\n const targetScale = this._targetAxis.getSpec()?.scale as IScale | string | Nil;\n scaleGrammar = isString(targetScale) ? this.view.getScaleById(targetScale) : targetScale;\n\n const targetElement = this._targetAxis.elements[0];\n if (targetElement) {\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n start: targetElement.getGraphicAttribute('start'),\n end: targetElement.getGraphicAttribute('end'),\n verticalFactor: targetElement.getGraphicAttribute('verticalFactor') ?? 1\n },\n addition\n );\n break;\n case GridEnum.circleAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n center: targetElement.getGraphicAttribute('center'),\n radius: targetElement.getGraphicAttribute('radius'),\n innerRadius: targetElement.getGraphicAttribute('innerRadius'),\n inside: targetElement.getGraphicAttribute('inside'),\n startAngle: targetElement.getGraphicAttribute('startAngle'),\n endAngle: targetElement.getGraphicAttribute('endAngle')\n },\n addition\n );\n break;\n }\n }\n }\n // compute attribute by spec\n else {\n scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec,\n true\n ),\n addition\n );\n }\n }\n\n // compute addition shape attributes for line grid\n if (this._getGridComponentType() === GridEnum.lineAxisGrid) {\n if (this.spec.gridShape === 'line' || !this.spec.gridShape) {\n // set axis type\n addition = Object.assign({}, addition, { type: 'line' });\n } else {\n // set addition length & axis type\n addition = Object.assign(\n {\n center: addition.start,\n closed: true\n },\n addition,\n { type: this.spec.gridShape }\n );\n }\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n return generateLineAxisGridAttributes(scale, theme, addition, tickCount);\n case GridEnum.circleAxisGrid:\n return generateCircleAxisGridAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getGridComponentType() {\n if (this._gridComponentType) {\n return this._gridComponentType;\n }\n\n if (this.spec.gridType) {\n switch (this.spec.gridType) {\n case 'circle':\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case 'line':\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this._targetAxis) {\n const axisComponentType = this._targetAxis.getAxisComponentType();\n switch (axisComponentType) {\n case AxisEnum.circleAxis:\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case AxisEnum.lineAxis:\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this.spec.scale) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this._gridComponentType = scaleGrammar?.getCoordinate?.()\n ? scaleGrammar.getCoordinateAxisPoints()\n ? GridEnum.lineAxisGrid\n : GridEnum.circleAxisGrid\n : GridEnum.lineAxisGrid;\n } else {\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n\n return this._gridComponentType;\n }\n}\n\nexport const registerGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.lineAxisGrid,\n (attrs: LineAxisGridAttributes, options?: ComponentOptions) =>\n new LineAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerGraphicComponent(\n GridEnum.circleAxisGrid,\n (attrs: CircleAxisGridAttributes, options?: ComponentOptions) =>\n new CircleAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n\nexport const registerLineGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.lineAxisGrid,\n (attrs: LineAxisGridAttributes, options?: ComponentOptions) =>\n new LineAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n\nexport const registerCircleGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.circleAxisGrid,\n (attrs: CircleAxisGridAttributes, options?: ComponentOptions) =>\n new CircleAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n","import type { BandScale, IBaseScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray, binaryFuzzySearchInNumberRange } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ITickData } from '../../type';\nimport { convertDomainToTickData, getCartesianLabelBounds, isAxisHorizontal } from '../util';\n\n/** x1, x2, length */\ntype OneDimensionalBounds = [number, number, number];\n\nconst getOneDimensionalLabelBounds = (\n scale: IBaseScale,\n domain: any[],\n op: ICartesianTickDataOpt,\n isHorizontal: boolean\n): OneDimensionalBounds[] => {\n const labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n return labelBoundsList.map(bounds => {\n if (isHorizontal) {\n return [bounds.x1, bounds.x2, bounds.width()];\n }\n return [bounds.y1, bounds.y2, bounds.height()];\n });\n};\n\n/** 判断两个 bounds 是否有重叠情况 */\nconst boundsOverlap = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds, gap = 0): boolean => {\n return Math.max(prevBounds[0], nextBounds[0]) - gap / 2 <= Math.min(prevBounds[1], nextBounds[1]) + gap / 2;\n};\n\n/** 判断两个不相交的 bounds 相隔的距离 */\nexport const boundsDistance = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds): number => {\n if (prevBounds[1] < nextBounds[0]) {\n return nextBounds[0] - prevBounds[1];\n } else if (nextBounds[1] < prevBounds[0]) {\n return prevBounds[0] - nextBounds[1];\n }\n return 0;\n};\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const domain = scale.domain();\n if (!domain.length) {\n return [];\n }\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType, labelStyle } = op;\n const isHorizontal = isAxisHorizontal(axisOrientType);\n const range = scale.range();\n\n // if range is so small\n const rangeSize = scale.calculateWholeRangeSize();\n if (rangeSize < 2) {\n if (op.labelLastVisible) {\n return convertDomainToTickData([domain[domain.length - 1]]);\n }\n return convertDomainToTickData([domain[0]]);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const fontSize = (op.labelStyle.fontSize ?? 12) + 2;\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n if (domain.length <= rangeSize / fontSize) {\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const labelBoundsList = getOneDimensionalLabelBounds(scale, domain, op, isHorizontal);\n const minBoundsLength = Math.min(...labelBoundsList.map(bounds => bounds[2]));\n\n const stepResult = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n Math.floor(minBoundsLength / incrementUnit), // 给step赋上合适的初值,有效改善外层循环次数\n false\n );\n\n scaleTicks = (scale as BandScale).stepTicks(stepResult.step);\n if (op.labelLastVisible) {\n if (stepResult.delCount) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - stepResult.delCount);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n // only check first middle last, use the max size to sampling\n const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];\n const tempList = getOneDimensionalLabelBounds(scale, tempDomain, op, isHorizontal);\n let maxBounds: OneDimensionalBounds = null;\n tempList.forEach(current => {\n if (!maxBounds) {\n maxBounds = current;\n return;\n }\n if (maxBounds[2] < current[2]) {\n maxBounds = current;\n }\n });\n\n const step =\n rangeEnd - rangeStart - labelGap > 0\n ? Math.ceil((domain.length * (labelGap + maxBounds[2])) / (rangeEnd - rangeStart - labelGap))\n : domain.length - 1;\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n\n if (\n op.labelLastVisible &&\n (!scaleTicks.length || scaleTicks[scaleTicks.length - 1] !== domain[domain.length - 1])\n ) {\n if (\n scaleTicks.length &&\n Math.abs(scale.scale(scaleTicks[scaleTicks.length - 1]) - scale.scale(domain[domain.length - 1])) <\n maxBounds[2]\n ) {\n scaleTicks = scaleTicks.slice(0, -1);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: OneDimensionalBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n defaultStep: number,\n areAllBoundsSame: boolean\n) => {\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n\n /** 验证在当前 step 下是否会产生重叠 */\n const validateStep = (step: number) => {\n let success = true;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && boundsOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n return success;\n };\n\n // 通过二分来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n const minValidStep = binaryFuzzySearchInNumberRange(defaultStep, domain.length, step =>\n validateStep(step) ? 1 : -1\n );\n\n // 对 step 进行微调\n let step = minValidStep;\n do {\n if (step > minValidStep && !areAllBoundsSame) {\n if (!validateStep(step)) {\n step++;\n continue;\n }\n }\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n let delCount = 0;\n let ptr;\n if (domain.length % step > 0) {\n ptr = domain.length - (domain.length % step) + step;\n } else {\n ptr = domain.length;\n }\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || boundsOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distance1 = boundsDistance(labelBoundsList[ptr], labelBoundsList[lastIndex]); // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0 ? boundsDistance(labelBoundsList[ptr - step], labelBoundsList[ptr]) : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n if (distance1 <= distance2) {\n break;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n step++;\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n","import { BandScale, scaleWholeRangeSize } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport type { ICartesianBandAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface';\nimport { isNil, isString, isValid, mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { linearDiscreteTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n CartesianAxis {}\n\nexport class CartesianBandAxis extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianBandAxis;\n type = ComponentTypeEnum.cartesianBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n const getBandwidth = (depth: number = 0) => {\n return getScale(depth).bandwidth();\n };\n\n return {\n isContinuous: false,\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getBandwidth,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse,\n getSpec: () => this._spec\n };\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, linearDiscreteTicks);\n\n return name;\n }\n transformScaleDomain() {\n this.updateFixedWholeLength();\n }\n\n updateFixedWholeLength() {\n if (this._scale) {\n const { bandSize, maxBandSize, minBandSize } = this._getOuterBandSizeFromSpec();\n if (bandSize) {\n this._scale.bandwidth(bandSize);\n }\n if (maxBandSize) {\n this._scale.maxBandwidth(maxBandSize);\n }\n if (minBandSize) {\n this._scale.minBandwidth(minBandSize);\n }\n // 更改 region 最大大小\n if (this._scale.isBandwidthFixed() && this._spec.autoRegionSize && (bandSize || maxBandSize)) {\n const rangeSize = scaleWholeRangeSize(\n this._scale.domain().length,\n bandSize ?? maxBandSize,\n this._scale.paddingInner(),\n this._scale.paddingOuter()\n );\n if (['bottom', 'top'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxWidth(rangeSize));\n } else if (['left', 'right'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxHeight(rangeSize));\n }\n }\n }\n }\n\n /** 获取最外层 scale 的实际 bandSize 配置 */\n protected _getOuterBandSizeFromSpec() {\n let { bandSize, maxBandSize, minBandSize, bandSizeLevel = 0 } = this._spec;\n const { gap, extend = 0 } = this._spec.bandSizeExtend ?? {};\n bandSizeLevel = Math.min(bandSizeLevel, this._scales.length - 1);\n\n // 由内而外计算最外层 scale 的 bandSize\n for (let i = bandSizeLevel; i > 0; i--) {\n const scale = this._scales[i];\n const domain = scale.domain();\n const paddingInner = scale.paddingInner();\n const paddingOuter = scale.paddingOuter();\n\n const getOuterBandSize = (b: number) => {\n const extendValue = i === bandSizeLevel ? extend : 0;\n if (isNil(gap) || i < bandSizeLevel) {\n return scaleWholeRangeSize(domain.length, b, paddingInner, paddingOuter) + extendValue;\n }\n const gapValue = isString(gap) ? b * (Number(gap.substring(0, gap.length - 1)) / 100) : gap;\n // 这里使组间距恰好等于柱间距\n return ((b + gapValue) * domain.length) / (this._scales[i - 1].paddingInner() + 1) + extendValue;\n };\n\n if (isValid(bandSize)) {\n bandSize = getOuterBandSize(bandSize);\n }\n if (isValid(maxBandSize)) {\n maxBandSize = getOuterBandSize(maxBandSize);\n }\n if (isValid(minBandSize)) {\n minBandSize = getOuterBandSize(minBandSize);\n }\n }\n\n return {\n bandSize,\n maxBandSize,\n minBandSize\n };\n }\n}\n\nmixin(CartesianBandAxis, BandAxisMixin);\n\nexport const registerCartesianBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianBandAxis.type, CartesianBandAxis);\n};\n","import { array, last as peek, maxInArray as maxInArr, minInArray as minInArr } from '@visactor/vutils';\n\nexport function shallowCompare(arrA: T | T[], arrB: U | U[]): boolean {\n const setA = new Set(array(arrA));\n const setB = new Set(array(arrB));\n if (setA.size !== setB.size) {\n return false;\n }\n for (const v of setA.values()) {\n if (!setB.has(v)) {\n return false;\n }\n }\n return true;\n}\n\nexport function combineDomains(domains: number[][]): number[] {\n const result = [];\n for (let index = 0; index < domains.length; index++) {\n const domain = domains[index];\n if (index === 0 || domain[0] !== result[result.length - 1]) {\n result.push(domain[0]);\n }\n\n result.push(domain[1]);\n }\n\n return result;\n}\n\nexport { array, peek, maxInArr, minInArr };\n","import { isEqual } from '@visactor/vutils';\n\nconst setDomain = (min: number, max: number, breaks: number[]): [number, number][] =>\n breaks.reduce(\n (r, b, i) => {\n r.push([b, breaks.length === i + 1 ? max : breaks[i + 1]]);\n return r;\n },\n [[min, breaks[0]]]\n );\n\nfunction breakDomain(data: number[], points: number[]): [number, number][] {\n // 默认数据已经排序\n const min = data[0];\n const max = data[data.length - 1];\n const breaks = points.filter(point => point > min && point < max);\n if (breaks.length === 0) {\n return [[min, max]];\n }\n\n return setDomain(min, max, breaks);\n}\n\nconst sorter = (a: number, b: number) => a - b;\n\nconst fillBins = (data: number[], points: number[]) => {\n const bins: Array<{ count: number; sub: number[]; max: number; min: number }> = [\n { count: 0, sub: [], max: points[0], min: points[0] }\n ];\n let i = 0;\n let j = 0;\n while (i < points.length) {\n if (data[j] <= points[i]) {\n bins[i].count += 1;\n bins[i].sub.push(data[j]);\n j += 1;\n } else {\n i += 1;\n bins[i] = { count: 0, sub: [], max: points[i], min: points[i] };\n }\n }\n bins.forEach(bin => {\n if (bin.count) {\n bin.min = Math.min.apply(null, bin.sub);\n }\n });\n\n const remain = data.slice(j);\n bins[i] = { count: remain.length, sub: remain, min: points[points.length - 1], max: Math.max.apply(null, remain) };\n return bins;\n};\n\nfunction breakScope(data: number[], points: number[], scopeType: 'count' | 'length' = 'count'): [number, number][] {\n // 默认 data 和 points 已经排序\n const bins = fillBins(data, points);\n\n const totalLength =\n scopeType === 'count'\n ? data.length\n : bins.reduce((res, bin, i) => {\n return bin.count > 0 ? res + bin.max - bin.min : res;\n }, 0);\n const res: [number, number][] = [];\n let acc = 0;\n\n let resIndex = 0; // 因为有的结果会被剔除,所以要从 res 的真实索引上拿\n bins.forEach((bin, i) => {\n if (totalLength === 0) {\n res.push([0, i / bins.length - 1]);\n } else {\n const length = scopeType === 'count' ? bin.count : bin.max - bin.min;\n const b0 = res[resIndex - 1] ? res[resIndex - 1][1] : 0;\n const b1 = i === bins.length - 1 ? 1 : Math.min((acc + length) / totalLength, 1);\n\n if (b0 === b1 && (b0 === 0 || b0 === 1)) {\n } else {\n resIndex += 1;\n res.push([b0, b1]);\n acc += length;\n }\n }\n });\n\n return res;\n}\n\nexport function breakData(data: number[], points: number[], scopeType?: 'count' | 'length') {\n // 现将数据和断点排序\n data.sort(sorter);\n points.sort(sorter);\n\n return {\n domain: breakDomain(data, points),\n scope: breakScope(data, points, scopeType)\n };\n}\n","import { isValidNumber, isNil, isValid, isFunction, last } from '@visactor/vutils';\nimport type { LinearScale } from '@visactor/vscale';\nimport { combineDomains, maxInArr, minInArr } from '../../../util/array';\nimport { getLinearAxisSpecDomain } from '../util';\nimport type { IAxisLocationCfg, ILinearAxisBreakSpec, ITick } from '../interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IEvent } from '../../../event/interface';\nimport { isXAxis } from '../cartesian/util/common';\nimport type { IOrientType } from '../../../typings/space';\nimport type { IComponentOption } from '../../interface/common';\nimport type { StringOrNumber } from '../../../typings';\nimport { breakData } from './util/break-data';\n\nexport const e10 = Math.sqrt(50);\nexport const e5 = Math.sqrt(10);\nexport const e2 = Math.sqrt(2);\nconst DEFAULT_TICK_COUNT = 5;\n\nexport interface LinearAxisMixin {\n _scale: LinearScale;\n _scales: LinearScale[];\n _spec: any;\n _nice: boolean;\n _zero: boolean;\n /**\n * spec中申明的min,max\n */\n _domain: { min?: number; max?: number };\n /**\n * 记录一下解析spec后,获取到的domain,\n * 用于在插件(如0值对齐等功能)中使用\n */\n _domainAfterSpec: number[];\n _softMinValue?: number;\n _softMaxValue?: number;\n _expand?: { max?: number; min?: number };\n _tick: ITick | undefined;\n isSeriesDataEnable: any;\n computeDomain: any;\n collectData: (depth?: number) => { min: number; max: number; values: any[] }[];\n /**\n * 这个变量在其他break相关组件和扩展中都有使用\n */\n _break: {\n domain: [number, number][];\n scope: [number, number][];\n breakDomains: [number, number][];\n breaks: ILinearAxisBreakSpec[];\n };\n event: IEvent;\n _orient: IOrientType;\n _option: IComponentOption;\n niceLabelFormatter: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport class LinearAxisMixin {\n protected _extend: { [key: string]: number } = {};\n\n niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n\n setExtraAttrFromSpec() {\n isValid(this._spec.nice) && (this._nice = this._spec.nice);\n isValid(this._spec.zero) && (this._zero = this._spec.zero);\n this._expand = this._spec.expand;\n this._domain = getLinearAxisSpecDomain(this._spec);\n }\n transformScaleDomain() {\n this.setScaleNice();\n }\n\n setLinearScaleNice() {\n if (!this._nice) {\n return false;\n }\n let tickCount: number = DEFAULT_TICK_COUNT;\n const tick = this._spec.tick || {};\n\n if (isValidNumber(tick.forceTickCount)) {\n tickCount = tick.forceTickCount;\n } else if (isFunction(tick.tickCount)) {\n const range = this._scale.range();\n let rangeSize = Math.abs(last(range) - range[0]);\n\n if (rangeSize === 1 && this._option) {\n // TODO: need to be optimized, when the range is not updated, use the size of view\n const isX = isXAxis(this._orient);\n rangeSize = isX ? this._option.getChartViewRect().width : this._option.getChartViewRect().height;\n }\n\n // tickCount需要一致,不然会导致效果不一致, fix #2050\n tickCount = tick.tickCount({\n axisLength: rangeSize,\n labelStyle: this._spec.label && this._spec.label.style\n });\n } else if (isValidNumber(tick.tickCount)) {\n tickCount = tick.tickCount;\n } else {\n tickCount = DEFAULT_TICK_COUNT;\n }\n // 如果配置了精度优先,那么最低是 5\n // 否则就直接使用tickCount即可\n if (this._spec.niceType === 'accurateFirst') {\n tickCount = Math.max(DEFAULT_TICK_COUNT, tickCount);\n }\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max) && isNil(this._softMaxValue) && isNil(this._softMinValue)) {\n return this._scale.nice(tickCount);\n } else if ((isValid(min) || isValid(this._softMinValue)) && isNil(max) && isNil(this._softMaxValue)) {\n return this._scale.niceMax(tickCount);\n } else if (isNil(min) && isNil(this._softMinValue) && (isValid(max) || isValid(this._softMaxValue))) {\n return this._scale.niceMin(tickCount);\n }\n\n return false;\n }\n\n setLogScaleNice() {\n if (!this._nice) {\n return false;\n }\n\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max) && isNil(this._softMaxValue) && isNil(this._softMinValue)) {\n return this._scale.nice();\n } else if ((isValid(min) || isValid(this._softMinValue)) && isNil(max) && isNil(this._softMaxValue)) {\n return this._scale.niceMax();\n } else if (isNil(min) && isNil(this._softMinValue) && (isValid(max) || isValid(this._softMaxValue))) {\n return this._scale.niceMin();\n }\n\n return false;\n }\n\n setScaleNice() {\n if (this._spec.type === 'log') {\n return this.setLogScaleNice();\n }\n return this.setLinearScaleNice();\n }\n\n dataToPosition(values: any[], cfg?: IAxisLocationCfg): number {\n return this.valueToPosition(values[0]);\n }\n\n valueToPosition(value: any): number {\n return this._scale.scale(value);\n }\n\n computeLinearDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n let domain: number[] = [];\n\n if (data.length) {\n const userSetBreaks = this._spec.breaks && this._spec.breaks.length;\n let values: any[] = [];\n let minDomain: number;\n let maxDomain: number;\n data.forEach(d => {\n const { min, max } = d;\n minDomain = minDomain === undefined ? min : Math.min(minDomain, min as number);\n maxDomain = maxDomain === undefined ? max : Math.max(maxDomain, max as number);\n if (userSetBreaks) {\n values = values.concat(d.values);\n }\n });\n\n if (userSetBreaks) {\n const breakRanges = [];\n const breaks = [];\n // 如果用户手动的手指了max,可以将break的最大值限制在用户设置的最大值范围内\n const breakMaxLimit = isNil(this._domain.max) ? maxDomain : this._domain.max;\n for (let index = 0; index < this._spec.breaks.length; index++) {\n const { range } = this._spec.breaks[index];\n if (range[0] <= range[1] && range[1] <= breakMaxLimit) {\n breakRanges.push(range);\n breaks.push(this._spec.breaks[index]);\n }\n }\n breakRanges.sort((a: [number, number], b: [number, number]) => a[0] - b[0]);\n if (breakRanges.length) {\n const { domain: breakDomains, scope: breakScopes } = breakData(\n values,\n combineDomains(breakRanges),\n this._spec.breaks[0].scopeType\n );\n\n domain = combineDomains(breakDomains);\n this._break = {\n domain: breakDomains,\n scope: breakScopes,\n breakDomains: breakRanges,\n breaks\n };\n } else {\n domain = [minDomain, maxDomain];\n }\n } else {\n domain = [minDomain, maxDomain];\n }\n } else {\n // default value for linear axis\n domain[0] = 0;\n domain[1] = 0;\n }\n this.setSoftDomainMinMax(domain);\n this.expandDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n return domain;\n }\n\n protected expandDomain(domain: number[]): void {\n if (!this._expand) {\n return;\n }\n\n let domainMin = domain[0];\n let domainMax = last(domain);\n\n if (domainMin === domainMax) {\n if (domainMax === 0) {\n domainMax = 1;\n } else if (domainMax > 0) {\n domainMin = 0;\n } else if (domainMax < 0) {\n domainMax = 0;\n }\n }\n\n if (isValid(this._expand.min)) {\n domain[0] = domainMin - (domainMax - domainMin) * this._expand.min;\n }\n if (isValid(this._expand.max)) {\n domain[domain.length - 1] = domainMax + (domainMax - domainMin) * this._expand.max;\n }\n }\n\n protected niceDomain(domain: number[]) {\n const { min: userMin, max: userMax } = getLinearAxisSpecDomain(this._spec);\n if (isValid(userMin) || isValid(userMax) || this._spec.type !== 'linear') {\n // 如果用户设置了 min 或者 max 则按照用户设置的为准\n // 如果是非 linear 类型也不处理\n return domain;\n }\n if (Math.abs(minInArr(domain) - maxInArr(domain)) <= 1e-12) {\n let num = domain[0];\n const flag = num >= 0 ? 1 : -1;\n num = Math.abs(num);\n if (num < 1) {\n domain[0] = 0;\n domain[domain.length - 1] = 1; // 在[0, 1) 区间变成[0, 1]\n } else {\n let step = num / DEFAULT_TICK_COUNT; // 默认5个ticks\n const power = Math.floor(Math.log(step) / Math.LN10);\n const err = step / Math.pow(10, power);\n step = (err >= e10 ? 10 : err >= e5 ? 5 : err >= e2 ? 2 : 1) * Math.pow(10, power);\n\n domain[0] = 0;\n domain[domain.length - 1] = step * 10;\n }\n if (flag < 0) {\n domain.reverse();\n domain[0] *= -1;\n domain[domain.length - 1] *= -1;\n }\n }\n return domain;\n }\n\n protected includeZero(domain: number[]): void {\n if (this._zero) {\n domain[0] = Math.min(domain[0], 0);\n domain[domain.length - 1] = Math.max(last(domain), 0);\n }\n }\n\n // 用户其他模块扩充轴scale的区间\n setExtendDomain(key: string, value: number | undefined) {\n if (value === undefined) {\n delete this._extend[key];\n return;\n }\n this._extend[key] = value;\n const domain = this._scale.domain();\n this.extendDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n\n if (this._nice) {\n const niced = this.setScaleNice();\n\n !niced && this._scale.rescale();\n }\n\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n\n protected extendDomain(domain: number[]) {\n let temp;\n const domainLast = domain.length - 1;\n const reverse = domain[0] - domain[domainLast] > 0;\n const min = reverse ? domainLast : 0;\n const max = reverse ? 0 : domainLast;\n for (const key in this._extend) {\n temp = this._extend[key];\n temp > domain[max] && (domain[max] = temp);\n temp < domain[min] && (domain[min] = temp);\n }\n }\n\n getDomainSpec() {\n return this._domain;\n }\n\n protected setDomainMinMax(domain: number[]): void {\n if (!this._domain) {\n return;\n }\n const { min, max } = this._domain;\n isValid(min) && (domain[0] = min);\n isValid(max) && (domain[domain.length - 1] = max);\n }\n\n protected setSoftDomainMinMax(domain: number[]): void {\n const { softMin, softMax } = this._spec;\n\n if (isValid(softMin)) {\n let softMinValue = isFunction(softMin) ? softMin(domain) : (softMin as number);\n\n if (isNil(softMinValue)) {\n softMinValue = domain[0];\n }\n\n if (softMinValue <= domain[0]) {\n domain[0] = softMinValue;\n this._softMinValue = softMinValue;\n }\n }\n\n if (isValid(softMax)) {\n let softMaxValue = isFunction(softMax) ? softMax(domain) : (softMax as number);\n\n if (isNil(softMaxValue)) {\n softMaxValue = last(domain);\n }\n\n if (softMaxValue >= last(domain)) {\n domain[domain.length - 1] = softMaxValue;\n }\n\n this._softMaxValue = softMaxValue;\n }\n }\n\n setZero(zero: boolean) {\n if (this._zero !== zero) {\n this._zero = zero;\n this.updateScaleDomain();\n }\n }\n /**\n * @override\n * TODO event.emit是否可以考虑用decorator\n */\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n const data = this.collectData();\n const domain: number[] = this.computeLinearDomain(data) as number[];\n this.updateScaleDomainByModel(domain);\n }\n\n /**\n * TODO event.emit是否可以考虑用decorator\n * 数据逻辑外,模块的设置更新对scale-domain的修改操作\n */\n protected updateScaleDomainByModel(domain?: number[]) {\n domain = domain ?? this._scale.domain();\n // 其他模块的设置 domain\n this.extendDomain(domain);\n this.includeZero(domain);\n // 用户 spec 的 min-max\n this.setDomainMinMax(domain);\n // nice 优先级最高\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n // 设置scale的nice-min-max\n if (this._nice) {\n const niced = this.setScaleNice();\n\n !niced && this._scale.rescale();\n }\n this._updateNiceLabelFormatter(domain);\n\n this._domainAfterSpec = this._scale.domain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as any });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n\n getDomainAfterSpec() {\n return this._domainAfterSpec;\n }\n\n protected _updateNiceLabelFormatter(domain: number[]) {\n // 根据轴 domain 范围做动态判断,取最多 n + 2 位小数\n const domainSpan = Math.abs(last(domain) - domain[0]);\n const n = Math.max(-Math.floor(Math.log10(domainSpan)), 0) + 2;\n const unit = Math.pow(10, n);\n this.niceLabelFormatter = (value: StringOrNumber) => {\n if (isValidNumber(+value)) {\n return Math.round((+value as number) * unit) / unit;\n }\n return value;\n };\n }\n}\n","import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isFunction, isValid, last } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ILabelItem, ITickData, ITickDataOpt } from '../type';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds } from './util';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst filterTicksByBreak = (ticks: number[], breakDomains: [number, number][]) => {\n return breakDomains && breakDomains.length\n ? ticks.filter(tick => {\n return breakDomains.every(breakDomain => {\n return tick < breakDomain[0] || tick > breakDomain[1];\n });\n })\n : ticks;\n};\nfunction getScaleTicks(\n op: ITickDataOpt,\n scale: ContinuousScale,\n count: number,\n getTicks: (count: number, domain?: [number, number]) => number[]\n) {\n let scaleTicks: number[];\n const { breakData } = op;\n\n // Todo: @zwx 将截断的逻辑挪到 scale 中\n if (breakData && breakData()) {\n const { breakDomains } = breakData();\n const domain = scale.domain();\n scaleTicks = [];\n for (let i = 0; i < domain.length - 1; i++) {\n const subDomain: [number, number] = [domain[i], domain[i + 1]];\n const ticks = getTicks(count, subDomain); // 暂时不对个数进行分段\n ticks.forEach(tick => {\n if (!breakDomains.some(breakDomain => tick >= breakDomain[0] && tick <= breakDomain[1])) {\n scaleTicks.push(tick);\n }\n });\n }\n // reset\n (scale as LinearScale).domain(domain);\n } else {\n scaleTicks = getTicks(count);\n }\n\n return scaleTicks;\n}\n\nfunction forceItemVisible(\n sourceItem: ILabelItem,\n items: ILabelItem[],\n check: boolean,\n comparator: any,\n inverse = false\n) {\n if (check && !items.includes(sourceItem)) {\n let remainLength = items.length;\n if (remainLength > 1) {\n if (inverse) {\n items.push(sourceItem);\n } else {\n items.unshift(sourceItem);\n }\n for (let i = 0; i < remainLength; i++) {\n const index = inverse ? remainLength - 1 - i : i;\n if (comparator(items[index])) {\n items.splice(index, 1);\n i--;\n remainLength--;\n } else {\n break;\n }\n }\n }\n }\n}\n/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain());\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]]);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false, labelStyle, breakData } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = filterTicksByBreak(\n (scale as LinearScale).stepTicks(tickStep),\n breakData && breakData() ? breakData().breakDomains : null\n );\n } else if (isValid(forceTickCount)) {\n scaleTicks = getScaleTicks(op, scale, forceTickCount, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).forceTicks(count);\n }\n return (scale as LinearScale).forceTicks(count);\n });\n } else if (op.tickMode === 'd3') {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).d3Ticks(count, { noDecimals });\n }\n return (scale as LinearScale).d3Ticks(count, { noDecimals });\n });\n } else {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n const customTicks = isFunction(op.tickMode) ? op.tickMode : undefined;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).ticks(count, { noDecimals, customTicks });\n }\n return (scale as LinearScale).ticks(count, { noDecimals, customTicks });\n });\n }\n\n const domain = scale.domain();\n\n if (op.labelFirstVisible && domain[0] !== scaleTicks[0] && !scaleTicks.includes(domain[0])) {\n scaleTicks.unshift(domain[0]);\n }\n\n if (\n op.labelLastVisible &&\n domain[domain.length - 1] !== scaleTicks[scaleTicks.length - 1] &&\n !scaleTicks.includes(domain[domain.length - 1])\n ) {\n scaleTicks.push(domain[domain.length - 1]);\n }\n if (op.sampling && scaleTicks.length > 1) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n const MIN_FONT_SIZE = 6;\n let items: ILabelItem[];\n // 刻度个数 > 像素个数的情况,先做一层预估,减少计算,避免卡死的情况\n if (scaleTicks.length * MIN_FONT_SIZE > rangeSize) {\n const samplingScaleTicks: number[] = [];\n const step = Math.floor((scaleTicks.length * MIN_FONT_SIZE) / rangeSize);\n scaleTicks.forEach((tick, index) => {\n if (index % step === 0 || index === scaleTicks.length - 1) {\n samplingScaleTicks.push(tick);\n }\n });\n items = getCartesianLabelBounds(scale, samplingScaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: samplingScaleTicks[i]\n } as ILabelItem)\n );\n } else {\n items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem)\n );\n }\n const firstSourceItem = items[0];\n const lastSourceItem = last(items);\n\n const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity; // 由于轴截断后刻度会存在不均匀的情况,所以不能使用 parity 算法\n while (items.length >= 3 && hasOverlap(items as any, labelGap)) {\n items = samplingMethod(items, labelGap);\n }\n\n const checkFirst = op.labelFirstVisible;\n let checkLast = op.labelLastVisible; // 这里和 auto-hide 里的逻辑有差异,不根据 length 自动强制显示最后一个(会引起 vtable 较多 badcase)。\n\n if (intersect(firstSourceItem as any, lastSourceItem as any, labelGap)) {\n if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {\n items.splice(items.indexOf(lastSourceItem), 1);\n checkLast = false;\n }\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: ILabelItem) =>\n intersect(item as any, firstSourceItem as any, labelGap)\n );\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: ILabelItem) =>\n intersect(item as any, lastSourceItem as any, labelGap) ||\n (checkFirst && item !== firstSourceItem ? intersect(item as any, firstSourceItem as any, labelGap) : false),\n true\n );\n\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (last(ticks) !== last(scaleTicks)) {\n ticks.push(last(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n return convertDomainToTickData(scaleTicks);\n};\n\nconst methods = {\n parity: function (items: ILabelItem[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function (items: ILabelItem[], sep: number) {\n let a: ILabelItem;\n return items.filter((b, i) => {\n if (!i || !intersect(a as any, b as any, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n","import type { LogScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport { isValid, isValidNumber, last, mixin } from '@visactor/vutils';\nimport type { IAxisHelper, ICartesianLinearAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { isXAxis, isZAxis } from './util';\nimport { combineDomains, isPercent } from '../../../util';\n\nexport interface CartesianLinearAxis\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'computeLinearDomain'\n | 'valueToPosition'\n | 'setScaleNice'\n | '_domain'\n | 'transformScaleDomain'\n | 'setExtendDomain'\n | '_break'\n >,\n CartesianAxis {}\n\nexport class CartesianLinearAxis<\n T extends ICartesianLinearAxisSpec = ICartesianLinearAxisSpec\n> extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianLinearAxis;\n type = ComponentTypeEnum.cartesianLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale: LinearScale | LogScale = new LinearScale();\n protected declare _scales: LinearScale[] | LogScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n const tickTransform = this._tickData?.[0]\n ?.getDataView()\n .transformsArr.find(t => t.type === this.registerTicksTransform());\n tickTransform && (tickTransform.options = this._tickTransformOption());\n }\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n const range = [0, 1];\n if (isValid(this._domain?.min)) {\n range[0] = this._domain.min;\n }\n if (isValid(this._domain?.max)) {\n range[1] = this._domain.max;\n }\n this._scale.domain(range);\n // this.setScaleNice();\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n breakData: this._spec.breaks?.length ? () => this._break : null\n } as ICartesianTickDataOpt;\n }\n\n protected _getUpdateAttribute(ignoreGrid: boolean) {\n const attrs = super._getUpdateAttribute(ignoreGrid);\n\n // get axis break configuration\n if (!isZAxis(this._orient) && this._break?.breaks?.length) {\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this._orient);\n const axisLength = isX ? width : height;\n\n attrs.breaks = this._break.breaks.map(obj => {\n const { range, breakSymbol, gap = 6 } = obj;\n const position = this.valueToPosition((range[0] + range[1]) / 2);\n const ratio = position / axisLength;\n\n let gapRatio;\n if (isPercent(gap)) {\n gapRatio = Number(gap.substring(0, gap.length - 1)) / 100;\n } else {\n gapRatio = (gap as number) / axisLength;\n }\n const symbolAngle = isValidNumber(breakSymbol?.angle) ? breakSymbol.angle : isX ? 60 : 15;\n\n return {\n range: [ratio - gapRatio / 2, ratio + gapRatio / 2],\n breakSymbol: {\n visible: true,\n ...breakSymbol,\n angle: (symbolAngle * Math.PI) / 180\n },\n rawRange: range\n };\n });\n }\n\n return attrs;\n }\n\n protected getNewScaleRange() {\n let newRange = super.getNewScaleRange();\n if (this._spec.breaks?.length && this._break?.scope) {\n // get axis breaks\n newRange = combineDomains(this._break.scope).map(val => newRange[0] + (last(newRange) - newRange[0]) * val);\n }\n\n return newRange;\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n helper.valueToPosition = this.valueToPosition.bind(this);\n return helper;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n}\n\nmixin(CartesianLinearAxis, LinearAxisMixin);\n\nexport const registerCartesianLinearAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianLinearAxis.type, CartesianLinearAxis);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport { mixin } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerLineAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport type { ILineSeriesSpec, LineAppearPreset } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { lineSeriesMark } from './constant';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport interface LineSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n >,\n CartesianSeries {}\n\nexport class LineSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.line;\n type = SeriesTypeEnum.line;\n\n static readonly mark: SeriesMarkMap = lineSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n protected _sortDataByAxis: boolean = false;\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n const seriesMark = this._spec.seriesMark ?? 'line';\n this.initLineMark(progressive, seriesMark === 'line');\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initMarkStyle(): void {\n this.initLineMarkStyle(this._direction);\n this.initSymbolMarkStyle();\n }\n\n initAnimation() {\n const lineAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(lineAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n const isLineAsSeriesMark = this._spec?.seriesMark !== 'point'; // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n return (attribute: string) => {\n if (isLineAsSeriesMark) {\n // 增加一个标识位,用于是否替换,因为图例获取颜色的时候是不需要替换的\n attribute === 'fill' && (attribute = 'stroke');\n }\n return this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n };\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._lineMark, this._symbolMark];\n }\n}\n\nmixin(LineSeries, LineLikeSeriesMixin);\n\nexport const registerLineSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerSymbolMark();\n registerLineAnimation();\n registerScaleInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(LineSeries.type, LineSeries);\n};\n","import { array, isValid } from '@visactor/vutils';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport type { RegionSpec, IRegionSpecInfo } from '../../region/interface';\nimport type { IChartSpecInfo } from '../interface';\nimport type { ISeriesSpecInfo } from '../../series/interface';\nimport type { ISeriesSpec } from '../../typings';\nimport type { IComponentSpec } from '../../component/base/interface';\n\n/** 寻找和 model 关联的 region info */\nexport const getRelatedRegionInfo = (\n modelInfo: IModelSpecInfo,\n currentChartSpecInfo: IChartSpecInfo\n): Array> | undefined => {\n const spec = modelInfo.spec as IComponentSpec;\n const { regionId, regionIndex } = spec;\n if (isValid(regionId)) {\n const regionIdList = array(regionId);\n return currentChartSpecInfo.region?.filter(({ spec }) => regionIdList.includes(spec.id));\n } else if (isValid(regionIndex)) {\n return array(regionIndex)\n .map((index: number) => currentChartSpecInfo.region?.[index])\n .filter(isValid);\n }\n return undefined;\n};\n\n/** 寻找和 model 关联的 series info */\nexport const getRelatedSeriesInfo = (\n modelInfo: IModelSpecInfo,\n currentChartSpecInfo: IChartSpecInfo\n): Array> | undefined => {\n const spec = modelInfo.spec as IComponentSpec;\n const { seriesId, seriesIndex } = spec;\n if (isValid(seriesId)) {\n const seriesIdList = array(seriesId);\n return currentChartSpecInfo.series?.filter(({ spec }) => seriesIdList.includes(spec.id));\n } else if (isValid(seriesIndex)) {\n return array(seriesIndex)\n .map((index: number) => currentChartSpecInfo.series?.[index])\n .filter(isValid);\n }\n return undefined;\n};\n","import { isArray, isNumber, isValid } from '@visactor/vutils';\nimport type { IChartSpec, ISeriesSpec } from '../../typings';\nimport type { IChartSpecInfo, IChartSpecTransformer, IChartSpecTransformerOption } from '../interface';\nimport type { IModelConstructor, IModelSpecInfo } from '../../model/interface';\nimport type { IRegionConstructor, RegionSpec } from '../../region/interface';\nimport { Factory } from '../../core';\nimport type { ISeriesConstructor } from '../../series';\nimport type { IComponentConstructor } from '../../component/interface/common';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { setProperty } from '@visactor/vutils-extension';\nimport { getRelatedRegionInfo, getRelatedSeriesInfo } from './util';\nimport type { ICartesianBandAxisSpec } from '../..//component/axis/cartesian/interface';\nimport { array } from '../../util';\nimport { getSpecInfo } from '../../component/util';\n\nexport class BaseChartSpecTransformer implements IChartSpecTransformer {\n readonly type: string;\n readonly seriesType: string;\n\n protected _option: IChartSpecTransformerOption;\n\n constructor(option: IChartSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n this.seriesType = option.seriesType;\n }\n\n /** 此方法不建议重写 */\n initChartSpec(chartSpec: T): IChartSpecInfo {\n this.transformSpec(chartSpec);\n return this.transformModelSpec(chartSpec);\n }\n\n /**\n * 转换 chart spec。包含以下步骤:\n * - 将图表 spec 统一转换为 common 图表 spec\n * - 图表层级的在初始化阶段的 spec 修改\n */\n transformSpec(chartSpec: T): void {\n if (!chartSpec.region || chartSpec.region.length === 0) {\n chartSpec.region = [{}];\n }\n if (chartSpec.tooltip === undefined) {\n chartSpec.tooltip = {};\n }\n // 堆积逆序\n if (isValid(chartSpec.stackInverse)) {\n chartSpec.region.forEach((r: RegionSpec) => {\n !isValid(r.stackInverse) && (r.stackInverse = chartSpec.stackInverse);\n });\n }\n // 堆积排序\n if (isValid(chartSpec.stackSort)) {\n chartSpec.region.forEach((r: RegionSpec) => {\n !isValid(r.stackSort) && (r.stackSort = chartSpec.stackSort);\n });\n }\n }\n\n generateTransform(chartSpec: T, isRuntime?: boolean) {\n return (constructor: IModelConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => {\n const { spec, specPath, specInfoPath, type } = specInfo;\n const transformer = new constructor.transformerConstructor({\n ...this._option,\n type\n });\n // 调用 model 自己的 transformer 进行转换\n const transformResult = transformer.transformSpec(spec, chartSpec, chartSpecInfo);\n const chartSpecInfoValue = {\n ...specInfo,\n ...transformResult\n };\n if (isRuntime) {\n chartSpecInfoValue.theme = transformer.getTheme(spec, chartSpec);\n } else {\n setProperty(chartSpec, specPath, transformResult.spec);\n }\n setProperty(chartSpecInfo, specInfoPath ?? specPath, chartSpecInfoValue);\n };\n }\n\n /**\n * 转换 model spec。包含以下步骤:\n * - model 层级的主题合并\n * - model 层级的在初始化阶段的 spec 修改,如添加 label spec\n */\n transformModelSpec(chartSpec: T): IChartSpecInfo {\n return this.createSpecInfo(chartSpec, this.generateTransform(chartSpec, false));\n }\n\n /** 遍历图表 spec 中包含的所有的 model,进行 spec 转换并生成图表 spec info */\n createSpecInfo(\n chartSpec: T,\n transform?: (\n /** 当前 model 的类 */\n constructor: IModelConstructor,\n /** 当前 model 的 spec info */\n specInfo: IModelSpecInfo,\n /** 图表 spec info */\n chartSpecInfo?: IChartSpecInfo\n ) => void\n ): IChartSpecInfo {\n if (!transform) {\n transform = this.generateTransform(chartSpec, true);\n }\n\n const currentChartSpecInfo: IChartSpecInfo = {};\n\n /* 预处理 region */\n this.forEachRegionInSpec(chartSpec, transform, currentChartSpecInfo);\n\n /* 预处理 series */\n this.forEachSeriesInSpec(chartSpec, transform, currentChartSpecInfo);\n // 记录每个 series 关联的 region\n currentChartSpecInfo.series?.forEach((seriesSpecInfo, i) => {\n const relatedRegion =\n getRelatedRegionInfo(seriesSpecInfo, currentChartSpecInfo) ?? currentChartSpecInfo.region ?? [];\n const region = relatedRegion[0];\n if (region) {\n if (!region.seriesIndexes) {\n region.seriesIndexes = [];\n }\n region.seriesIndexes.push(i);\n seriesSpecInfo.regionIndexes = region.regionIndexes.slice();\n }\n });\n\n /* 预处理 component */\n this.forEachComponentInSpec(chartSpec, transform, currentChartSpecInfo);\n // 记录每个 component 关联的 region、series\n Object.values(currentChartSpecInfo.component ?? {}).forEach(specInfoList =>\n specInfoList.forEach((componentSpecInfo, i) => {\n if (!componentSpecInfo) {\n return;\n }\n if (!componentSpecInfo.regionIndexes) {\n const relatedRegion =\n getRelatedRegionInfo(componentSpecInfo, currentChartSpecInfo) ?? currentChartSpecInfo.region ?? [];\n componentSpecInfo.regionIndexes = relatedRegion.map(region => region.regionIndexes[0]);\n }\n if (!componentSpecInfo.seriesIndexes) {\n const seriesInfo = getRelatedSeriesInfo(componentSpecInfo, currentChartSpecInfo);\n if (!seriesInfo) {\n const seriesIndexSet = new Set();\n (componentSpecInfo.regionIndexes ?? []).forEach(regionIndex => {\n const region = currentChartSpecInfo.region?.[regionIndex];\n region?.seriesIndexes?.forEach(seriesIndex => seriesIndexSet.add(seriesIndex));\n });\n componentSpecInfo.seriesIndexes = Array.from(seriesIndexSet);\n } else {\n componentSpecInfo.seriesIndexes = seriesInfo.map(({ seriesIndexes }) => seriesIndexes[0]);\n }\n }\n })\n );\n return currentChartSpecInfo;\n }\n\n protected _isValidSeries(seriesType: string): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(chartSpec: any, pickKeys?: string[], pickKeys2?: string[]) {\n const series: any = {\n dataKey: chartSpec.dataKey,\n\n hover: chartSpec.hover,\n select: chartSpec.select,\n\n label: chartSpec.label,\n\n seriesStyle: chartSpec.seriesStyle,\n\n animation: chartSpec.animation ?? this._option.animation,\n animationThreshold: chartSpec.animationThreshold ?? this._option.getTheme?.().animationThreshold,\n animationAppear: chartSpec.animationAppear,\n animationDisappear: chartSpec.animationDisappear,\n animationEnter: chartSpec.animationEnter,\n animationUpdate: chartSpec.animationUpdate,\n animationExit: chartSpec.animationExit,\n animationNormal: chartSpec.animationNormal,\n animationState: chartSpec.animationState,\n\n extensionMark: chartSpec.extensionMark,\n\n large: chartSpec.large,\n largeThreshold: chartSpec.largeThreshold,\n progressiveStep: chartSpec.progressiveStep,\n progressiveThreshold: chartSpec.progressiveThreshold,\n background: chartSpec.seriesBackground,\n\n invalidType: chartSpec.invalidType,\n\n seriesField: chartSpec.seriesField,\n\n morph: chartSpec.morph,\n\n interactions: chartSpec.interactions\n };\n\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = (chartSpec as any)[seriesType];\n }\n\n if (pickKeys && pickKeys.length) {\n pickKeys.forEach(k => {\n series[k] = chartSpec[k];\n });\n }\n if (pickKeys2 && pickKeys2.length) {\n pickKeys2.forEach(k => {\n series[k] = chartSpec[k];\n });\n }\n return series;\n }\n\n /** 遍历 spec 中每个有效的 region */\n forEachRegionInSpec(\n chartSpec: T,\n callbackfn: (constructor: IRegionConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const regionSpec = (chartSpec.region as RegionSpec[]) ?? [];\n return regionSpec.map((spec, index) =>\n callbackfn(\n Factory.getRegionInType('region'),\n {\n spec,\n specPath: ['region', index],\n type: 'region',\n regionIndexes: [index]\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 series */\n forEachSeriesInSpec(\n chartSpec: T,\n callbackfn: (constructor: ISeriesConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const seriesSpec = (chartSpec.series as ISeriesSpec[]) ?? [];\n return seriesSpec.map((spec, index) =>\n callbackfn(\n Factory.getSeriesInType(spec.type),\n {\n spec,\n specPath: ['series', index],\n type: spec.type,\n seriesIndexes: [index]\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 component */\n forEachComponentInSpec(\n chartSpec: T,\n callbackfn: (constructor: IComponentConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const results: K[] = [];\n const components = Factory.getComponents();\n\n // 坐标轴组件只需要调用一次\n let cartesianAxis: IComponentConstructor;\n let polarAxis: IComponentConstructor;\n let geoCoordinate: IComponentConstructor;\n let tooltip: IComponentConstructor;\n const otherComponents = [];\n\n for (let index = 0; index < components.length; index++) {\n const { cmp, alwaysCheck } = components[index];\n if (cmp.type.startsWith(ComponentTypeEnum.cartesianAxis)) {\n cartesianAxis = cmp;\n } else if (cmp.type.startsWith(ComponentTypeEnum.polarAxis)) {\n polarAxis = cmp;\n } else if (cmp.type === ComponentTypeEnum.geoCoordinate) {\n geoCoordinate = cmp;\n } else if (alwaysCheck || (chartSpec as any)[cmp.specKey ?? cmp.type]) {\n if (cmp.type === ComponentTypeEnum.tooltip) {\n tooltip = cmp;\n } else {\n otherComponents.push(cmp);\n }\n }\n }\n\n // NOTE: 坐标轴组件需要在其他组件之前创建\n let hasInitAxis = false;\n if (cartesianAxis) {\n const infoList = cartesianAxis.getSpecInfo(chartSpec, chartSpecInfo);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (polarAxis && !hasInitAxis) {\n const infoList = polarAxis.getSpecInfo(chartSpec, chartSpecInfo);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (geoCoordinate && !hasInitAxis) {\n geoCoordinate.getSpecInfo(chartSpec, chartSpecInfo)?.forEach(info => {\n results.push(callbackfn(geoCoordinate, info, chartSpecInfo));\n });\n }\n\n otherComponents.forEach(C => {\n (C.getSpecInfo ? C.getSpecInfo(chartSpec, chartSpecInfo) : getSpecInfo(chartSpec, C.specKey, C.type))?.forEach(\n info => {\n results.push(callbackfn(C, info, chartSpecInfo));\n }\n );\n });\n\n // NOTE: tooltip 组件需要在 crosshair 组件之后创建\n if (tooltip) {\n getSpecInfo(chartSpec, tooltip.specKey, tooltip.type)?.forEach(info => {\n results.push(callbackfn(tooltip, info, chartSpecInfo));\n });\n }\n\n return results;\n }\n\n /** 处理series配置 */\n transformSeriesSpec(spec: T): void {\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach(s => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n (s as any)[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n\n protected _findBandAxisBySeries(seriesSpec: ISeriesSpec, seriesIndex: number, axesSpec: any) {\n const isHorizontal = (seriesSpec as any)?.direction === 'horizontal';\n const matchOrient = isHorizontal ? ['left', 'right'] : ['top', 'bottom'];\n const targetBandAxis: any = axesSpec.find((axis: any) => {\n if (!matchOrient.includes(axis.orient)) {\n // orient必须匹配\n return false;\n }\n if (isValid(axis.seriesId)) {\n // 1. 通过seriesId绑定\n if (array(axis.seriesId).includes(seriesSpec?.id)) {\n return true;\n }\n } else if (isValid(axis.seriesIndex)) {\n // 2. 通过seriesIndex绑定\n if (array(axis.seriesIndex).includes(seriesIndex)) {\n return true;\n }\n } else if (axis.type === 'band') {\n // 3. 通过axis type识别\n return true;\n }\n // 4. 剩下的情况满足axis orient要求\n return true;\n });\n\n return targetBandAxis;\n }\n\n /**\n * @description bar chart 和 common chart支持autoBandsize, 此方法用于识别barWidth配置后应用到轴上\n * */\n protected _applyAxisBandSize(\n axis: ICartesianBandAxisSpec,\n extend: number,\n barWidthSpec: {\n barMaxWidth: number | string;\n barMinWidth: number | string;\n barWidth: number | string;\n barGapInGroup: number | string | (number | string)[];\n }\n ) {\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = barWidthSpec;\n let hasBarWidth = false;\n if (isNumber(barMinWidth)) {\n axis.minBandSize = barMinWidth as number;\n hasBarWidth = true;\n } else if (isNumber(barWidth)) {\n axis.minBandSize = barWidth as number;\n hasBarWidth = true;\n } else if (isNumber(barMaxWidth)) {\n axis.minBandSize = barMaxWidth as number;\n hasBarWidth = true;\n }\n if (hasBarWidth) {\n axis.bandSizeLevel = Number.MAX_VALUE; // 影响最底层的 scale\n axis.bandSizeExtend = {\n extend,\n gap: isArray(barGapInGroup) ? barGapInGroup[(barGapInGroup as any[]).length - 1] : barGapInGroup\n };\n }\n }\n}\n","import type { ICartesianAxisSpec } from '../../component';\nimport type { ISeriesSpec } from '../../typings';\nimport { get, isNil } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICartesianChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class CartesianChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected _getDefaultSeriesSpec(spec: any, pickKeys?: string[]): any {\n const series: any = super._getDefaultSeriesSpec(\n spec,\n [\n 'xField',\n 'yField',\n 'zField',\n 'direction',\n 'stack', // 是否堆叠\n 'percent', // 是否百分比堆叠\n 'stackOffsetSilhouette', // 是否围绕中心轴偏移轮廓,\n 'totalLabel',\n 'sortDataByAxis'\n ],\n pickKeys\n );\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n super.transformSeriesSpec(spec);\n\n this._transformAxisSpec(spec);\n }\n\n protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'bottom'\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'left'\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultZAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'z'\n } as ICartesianAxisSpec;\n }\n\n protected _transformAxisSpec(spec: T) {\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { x: false, y: false, z: false };\n spec.axes.forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n let defaultSpec: ICartesianAxisSpec = null;\n if (orient === 'top' || orient === 'bottom') {\n haxAxes.x = true;\n defaultSpec = this._setDefaultXAxisSpec(spec);\n }\n if (orient === 'left' || orient === 'right') {\n haxAxes.y = true;\n\n defaultSpec = this._setDefaultYAxisSpec(spec);\n }\n if (orient === 'z') {\n haxAxes.z = true;\n\n defaultSpec = this._setDefaultZAxisSpec(spec);\n }\n\n if (defaultSpec) {\n Object.keys(defaultSpec).forEach(key => {\n if (isNil(axis[key])) {\n axis[key] = defaultSpec[key];\n }\n });\n }\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n if (!haxAxes.x) {\n spec.axes.push(this._setDefaultXAxisSpec(spec));\n }\n if (!haxAxes.y) {\n spec.axes.push(this._setDefaultYAxisSpec(spec));\n }\n // 如果有zField字段,但是没有配置z轴,那么添加一个z轴\n if ((spec as any).zField && !haxAxes.z) {\n spec.axes.push(this._setDefaultZAxisSpec(spec));\n }\n }\n }\n}\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { ILineChartSpec } from './interface';\n\nexport class LineChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'point',\n 'line',\n 'activePoint',\n 'sampling',\n 'samplingFactor',\n 'pointDis',\n 'pointDisMul',\n 'markOverlap',\n 'lineLabel'\n ]);\n seriesSpec.seriesMark = spec.seriesMark ?? 'line';\n return seriesSpec;\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { array } from '@visactor/vutils';\nimport type { IData } from './../../typings/spec/common';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport type { IDataValues, StringOrNumber } from '../../typings';\nimport { dataToDataView, updateDataViewInData } from '../../data/initialize';\nimport { warn } from '../../util/debug';\nexport class ChartData {\n protected _dataArr: DataView[] = [];\n get dataList() {\n return this._dataArr;\n }\n\n protected _dataSet: DataSet;\n\n constructor(dataSet: DataSet) {\n this._dataSet = dataSet;\n }\n\n parseData(dataSpec: IData) {\n this._dataArr = [];\n const list = array(dataSpec);\n for (let i = 0; i < list.length; i++) {\n this._dataArr.push(dataToDataView(list[i], this._dataSet, this._dataArr));\n }\n }\n\n updateData(dataSpec: IData, fullUp: boolean = false, forceMerge: boolean = true) {\n const list = array(dataSpec);\n if (fullUp && list.length !== this._dataArr.length) {\n return false;\n }\n this._dataValueForEach(list, (_data, dv) => {\n dv.markRunning();\n });\n this._dataValueForEach(list, (data, dv) => {\n updateDataViewInData(dv, data, forceMerge);\n });\n return true;\n }\n\n private _dataValueForEach(\n list: (IDataValues | DataView)[],\n callBack: (data: IDataValues, dv: DataView, index: number) => void\n ) {\n list.forEach((data, i) => {\n if (data instanceof DataView) {\n // ignore DataView, it should be update by use DataView api\n return;\n }\n const dv = this.getSeriesData(data.id, i);\n if (!dv) {\n return;\n }\n\n callBack(data, dv, i);\n });\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n if (!this._dataArr.length) {\n return null;\n }\n\n // dataId 优先\n if (typeof id === 'string') {\n const metchData = this._dataArr.filter((data: any) => {\n return data.name === id;\n });\n\n if (metchData[0]) {\n return metchData[0];\n }\n warn(`no data matches dataId ${id}!`);\n }\n\n // 其次使用dataIndex\n if (typeof index === 'number') {\n if (this._dataArr[index]) {\n return this._dataArr[index];\n }\n\n warn(`no data matches dataIndex ${index}!`);\n }\n\n // 最后返回第一条数据\n return this._dataArr[0];\n }\n}\n","import type { IGlobalScale } from './interface';\nimport { isArray, isEmpty, isEqual, isNil } from '@visactor/vutils';\nimport type { IBaseScale, OrdinalScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IChart } from '../chart/interface';\nimport type { IChartSpec } from '../typings/spec';\nimport { createScale } from '../util/scale';\nimport { isDataDomainSpec } from '../util/type';\nimport { mergeFields } from '../util/data';\nimport type { IVisualScale, IVisualSpecScale } from '../typings';\nimport type { StatisticOperations } from '../data/transforms/interface';\nimport type { ISeries } from '../series';\n\nexport class GlobalScale implements IGlobalScale {\n private _scaleSpecMap: Map> = new Map();\n private _scaleMap: Map = new Map();\n private _modelScaleSpecMap: Map> = new Map();\n private _markAttributeScaleMap: Map =\n new Map();\n private _spec: IChartSpec['scales'] = null;\n private readonly _chart: IChart = null;\n constructor(spec: IChartSpec['scales'], chart: IChart) {\n this._spec = spec;\n this._chart = chart;\n this._setAttrFromSpec();\n }\n\n private _createFromSpec(s: IVisualSpecScale): IBaseScale {\n if (!s.id) {\n return null;\n }\n let scale = this._scaleMap.get(s.id);\n if (!scale) {\n if (s.type === 'ordinal' && s.id === 'color') {\n scale = createScale('colorOrdinal'); // 全局颜色色板的特殊逻辑\n } else {\n scale = createScale(s.type);\n }\n }\n if (!scale) {\n return null;\n }\n if (isArray(s.range)) {\n scale.range(s.range);\n }\n if (isArray(s.domain)) {\n if (!isDataDomainSpec(s.domain)) {\n scale.domain(s.domain);\n }\n }\n if (s.specified && (scale).specified) {\n (scale).specified(s.specified);\n }\n return scale;\n }\n\n private _setAttrFromSpec() {\n if (!this._spec?.length) {\n return;\n }\n const newScaleMap: Map = new Map();\n const newScaleSpecMap: Map> = new Map();\n this._spec.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n this._modelScaleSpecMap.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n\n this._scaleSpecMap = newScaleSpecMap;\n this._scaleMap = newScaleMap;\n }\n\n updateSpec(spec: IChartSpec['scales']) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n if (isEqual(spec, this._spec)) {\n return result;\n }\n result.change = true;\n for (let i = 0; i < spec.length; i++) {\n const s = spec[i];\n const scale = this._scaleMap.get(s.id);\n if (!scale) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n const lastSpec = this._spec.find(_s => _s.id === s.id);\n if (!lastSpec.id) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n if (lastSpec.type !== s.type) {\n // scale cannot change type, need remake chart\n result.reMake = true;\n return result;\n }\n if (!isEqual(lastSpec.specified, s.specified)) {\n result.reMake = true;\n return result;\n }\n if (s.range && !isEqual(s.range, scale.range())) {\n scale.range(s.range);\n result.reRender = true;\n }\n if (isDataDomainSpec(s.domain)) {\n result.reRender = true;\n } else if (!isEqual(s.domain, scale.domain())) {\n scale.domain(s.domain);\n result.reRender = true;\n }\n // replace specMap, this use for data domain\n this._scaleSpecMap.set(s.id, s);\n }\n this._spec = spec;\n return result;\n }\n\n registerModelScale(spec: IVisualSpecScale) {\n const scale = this._createFromSpec(spec);\n if (!scale) {\n return;\n }\n this._modelScaleSpecMap.set(spec.id, spec);\n this._scaleSpecMap.set(spec.id, spec);\n this._scaleMap.set(spec.id, scale);\n }\n\n removeModelScale(filter: (spec: IVisualSpecScale) => boolean) {\n this._modelScaleSpecMap.forEach(spec => {\n if (filter(spec)) {\n this._modelScaleSpecMap.delete(spec.id);\n this._scaleSpecMap.delete(spec.id);\n this._scaleMap.delete(spec.id);\n }\n });\n }\n\n getScale(user_id: string): IBaseScale | null {\n return this._scaleMap.get(user_id);\n }\n\n getScaleSpec(user_id: string): IVisualSpecScale | null {\n return this._scaleSpecMap.get(user_id);\n }\n\n getStatisticalFields = (\n dataId: string\n ): {\n key: string;\n operations: StatisticOperations;\n }[] => {\n const result: {\n key: string;\n operations: StatisticOperations;\n }[] = [];\n this._scaleSpecMap.forEach((v, k) => {\n if (!isDataDomainSpec(v.domain)) {\n return;\n }\n v.domain.forEach(spec => {\n if (spec.dataId === dataId) {\n spec.fields.forEach(key => {\n mergeFields(result, [\n {\n key,\n operations: isContinuous(v.type) ? ['max', 'min'] : ['values']\n }\n ]);\n });\n }\n });\n });\n this._markAttributeScaleMap.forEach((specList, scaleName) => {\n const scale = this.getScale(scaleName);\n specList.forEach(spec => {\n const series = this._getSeriesBySeriesId(spec.seriesId);\n\n if (series.getRawData().name === dataId && spec.field) {\n mergeFields(result, [\n {\n key: spec.field,\n operations: isContinuous(scale.type) ? ['max', 'min'] : ['values']\n }\n ]);\n }\n });\n });\n return result;\n };\n\n private _getSeriesByRawDataId(id: string): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.getRawData().name === id) {\n return s;\n }\n }\n return null;\n }\n\n private _getSeriesBySeriesId(id: number): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.id === id) {\n return s;\n }\n }\n return null;\n }\n\n updateScaleDomain(defaultDomain: unknown[]) {\n this._scaleSpecMap.forEach((scaleSpec, id) => {\n const scale = this._scaleMap.get(id);\n if (!scale) {\n return;\n }\n if (!isDataDomainSpec(scaleSpec.domain)) {\n if (!scaleSpec.domain || scaleSpec.domain.length === 0) {\n scale.domain(defaultDomain);\n }\n this._updateMarkScale(id, scale, scale.domain().slice());\n return;\n }\n let domain: unknown[] | Set;\n if (isContinuous(scaleSpec.type)) {\n domain = [null, null];\n } else {\n domain = new Set();\n }\n scaleSpec.domain.forEach(spec => {\n const series = this._getSeriesByRawDataId(spec.dataId);\n\n if (!series) {\n return;\n }\n\n const isContinuousField = isContinuous(scaleSpec.type);\n spec.fields.forEach(key => {\n const statistics = series.getRawDataStatisticsByField(key, isContinuousField);\n if (!statistics) {\n return;\n }\n if (isContinuousField) {\n if (isNil(domain[0])) {\n domain[0] = statistics.min;\n } else {\n domain[0] = Math.min(statistics.min, domain[0]);\n }\n if (isNil(domain[1])) {\n domain[1] = statistics.max;\n } else {\n domain[1] = Math.max(statistics.max, domain[1]);\n }\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n }\n });\n });\n\n const scaleDomain = domain;\n if (!isContinuous(scaleSpec.type)) {\n domain = Array.from(domain);\n }\n scale.domain(domain as unknown[]);\n this._updateMarkScale(id, scale, scaleDomain);\n });\n }\n\n private _updateMarkScale(id: string, scale: IBaseScale, domain: unknown[] | Set) {\n const list = this._markAttributeScaleMap.get(id);\n if (!list || list.length === 0) {\n return;\n }\n list.forEach(info => {\n if (!info.field || !info.markScale || info.markScale === scale) {\n return;\n }\n if (isNil(info.changeDomain) || info.changeDomain === 'none' || isNil(info.seriesId)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n const series = this._getSeriesBySeriesId(info.seriesId);\n const isContinuousScale = isContinuous(scale.type);\n const statistics = series.getRawDataStatisticsByField(info.field, isContinuousScale);\n\n if (isEmpty(statistics)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n if (info.changeDomain === 'expand') {\n if (isContinuousScale) {\n domain[0] = Math.min(domain[0], statistics.min);\n domain[1] = Math.max(domain[1], statistics.max);\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n domain = Array.from(domain);\n }\n info.markScale.domain(domain as any[]);\n return;\n }\n if (info.changeDomain === 'replace') {\n if (isContinuousScale) {\n info.markScale.domain([statistics.min, statistics.max]);\n } else {\n info.markScale.domain(statistics.values);\n }\n return;\n }\n });\n }\n\n registerMarkAttributeScale(spec: IVisualScale, seriesId: number): IBaseScale {\n const scale = this._scaleMap.get(spec.scale);\n let list = this._markAttributeScaleMap.get(spec.scale);\n if (!list) {\n list = [];\n this._markAttributeScaleMap.set(spec.scale, list);\n }\n let markScale = scale;\n if (isNil(spec.field) || (!isNil(spec.changeDomain) && spec.changeDomain !== 'none' && !isNil(seriesId))) {\n markScale = scale.clone();\n }\n list.push({\n ...spec,\n seriesId,\n markScale\n });\n return markScale;\n }\n}\n","import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\n\nexport class BaseChart extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (d.series).fieldY[0] : (d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.clearAxisValue?.();\n crosshair.hide?.();\n } else {\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value } = d;\n crosshair.clearAxisValue();\n crosshair.setAxisValue(value, axis);\n crosshair.layoutByValue();\n });\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n","import type { ISeriesStackData, ISeriesStackDataLeaf, ISeriesStackDataNode } from '../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport interface IStackOption {\n fields: string[];\n}\n\nexport const stackSplit = (data: Array, op: IStackOption) => {\n const result: ISeriesStackData = {\n nodes: {}\n };\n const { fields } = op;\n if (!fields?.length) {\n return result;\n }\n const lastFieldIndex = fields.length - 1;\n let temp: ISeriesStackDataNode = result;\n let nextNode: ISeriesStackDataNode;\n let leaf: ISeriesStackDataLeaf;\n data.forEach(dv => {\n dv.latestData &&\n dv.latestData.forEach((d: Datum) => {\n temp = result;\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i];\n const fV = d[f];\n if (isNil(fV)) {\n break;\n }\n temp.groupField = f;\n if (!temp.nodes[fV]) {\n if (i === lastFieldIndex) {\n temp.nodes[fV] = { values: [] };\n } else {\n nextNode = { nodes: {} };\n temp.nodes[fV] = nextNode;\n }\n }\n if (i === lastFieldIndex) {\n leaf = temp.nodes[fV] as ISeriesStackDataLeaf;\n leaf.values.push(d);\n } else {\n temp = temp.nodes[fV] as ISeriesStackDataNode;\n }\n }\n });\n });\n return result;\n};\n","import { ChartEvent } from '../constant/event';\nimport type { IRegion } from '../region/interface';\nimport type { IChart } from './interface';\nimport type { IStackCacheNode, IStackCacheRoot } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRegionStackGroup, stack, stackOffsetSilhouette, stackTotal } from '../util';\nimport type { EventCallback } from '../event/interface';\nimport type { DataSet } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../data/register';\nimport { stackSplit } from '../data/transforms/stack-split';\n\n// stack\n// 1. 不可以多个region之间的series进行堆积,目前看这种需求没有场景。将堆积改为针对 region\n// 2. 堆积是一个数据层面的逻辑,但是会影响系列当前使用的yField到底是什么。\n// 3. ECharts 线系列参与堆积后,线系列的y不变,但是与它一起堆积的柱图,数据变化了了,是堆积后的值\n// 4. x 方向分组的功能,是属于轴的,与堆积和怎么堆积无关。\n// 现有功能,有支持堆积时的方向可以调整。也就是sort\nexport class Stack {\n protected _chart: IChart;\n protected _options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n };\n\n constructor(\n chart: IChart,\n options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n }\n ) {\n this._chart = chart;\n this._options = options;\n }\n\n init() {\n this._chart.getAllRegions().forEach(r => {\n r.event.on(\n ChartEvent.regionSeriesDataFilterOver,\n { filter: ({ model }) => model?.id === r.id },\n this.stackRegion as EventCallback\n );\n });\n }\n\n stackAll() {\n this._chart.getAllRegions().forEach(r => {\n this.stackRegion({ model: r });\n });\n }\n\n stackRegion = ({ model }: { model: IRegion }) => {\n const series = model.getSeries();\n const hasStack = series.some(s => s.getStack());\n\n if (!hasStack) {\n return;\n }\n // total label need percent\n const hasTotalLabel = series.some(s => {\n return s.getSpec()?.totalLabel?.visible;\n });\n const hasPercent = hasTotalLabel || series.some(s => s.getPercent());\n const hasOffsetSilhouette = series.some(s => s.getStackOffsetSilhouette());\n\n const stackValueGroup = getRegionStackGroup(model, true);\n\n // 计算堆积\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], model.getStackInverse(), hasPercent, hasTotalLabel);\n }\n }\n\n if (hasOffsetSilhouette) {\n // 围绕中心轴偏移轮廓\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackOffsetSilhouette(stackValueGroup[stackValue].nodes[key]);\n }\n }\n }\n\n if (hasTotalLabel) {\n model.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n if (stackData && stackValueField) {\n stackTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n }\n });\n }\n\n if (this._options?.afterStackRegion) {\n this._options.afterStackRegion(model, stackValueGroup);\n }\n };\n}\n\nexport class StackChartMixin {\n protected _stack: Stack;\n protected _dataSet: DataSet;\n\n protected _beforeInit() {\n if (this._dataSet) {\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n }\n }\n\n protected _initStack() {\n this._stack = new Stack(this as unknown as IChart);\n this._stack.init();\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ILineChartSpec } from './interface';\nimport { registerLineSeries } from '../../series/line/line';\nimport { Factory } from '../../core/factory';\nimport { LineChartSpecTransformer } from './line-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class LineChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.line;\n static readonly seriesType: string = SeriesTypeEnum.line;\n static readonly transformerConstructor = LineChartSpecTransformer;\n readonly transformerConstructor = LineChartSpecTransformer;\n readonly type: string = ChartTypeEnum.line;\n readonly seriesType: string = SeriesTypeEnum.line;\n}\n\nmixin(LineChart, StackChartMixin);\n\nexport const registerLineChart = () => {\n registerLineSeries();\n Factory.registerChart(LineChart.type, LineChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IAreaMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { IAreaMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerAreaGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport class AreaMark extends BaseLineMark implements IAreaMark {\n static readonly type = MarkTypeEnum.area;\n readonly type = AreaMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n\n protected _getIgnoreAttributes(): string[] {\n return [];\n }\n}\n\nexport const registerAreaMark = () => {\n Factory.registerMark(AreaMark.type, AreaMark);\n registerAreaGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { array, isValid } from '@visactor/vutils';\n\nexport class AreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n let value = this.series.getSeriesStyle(datum)?.(key);\n // because of line mark merge into area mark\n // TODO: if tooltip symbol use mark fill & stroke ,remove this code\n if (value === false && (key === 'fill' || key === 'stroke')) {\n if (key === 'fill') {\n value = this.series.getSeriesStyle(datum)?.('stroke')?.[0];\n } else {\n value = this.series.getSeriesStyle(datum)?.('fill');\n }\n }\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n}\n","import { registerLineAnimation, registerAreaAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport { Direction } from '../../typings/space';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { AreaAppearPreset, IAreaAnimationParams } from './interface';\n\nconst Appear_ClipIn: IAnimationTypeConfig = {\n type: 'clipIn'\n};\n\nconst Appear_Grow = (params: IAreaAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function areaPresetAnimation(\n params: IAreaAnimationParams,\n preset: AreaAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn;\n }\n}\n\nexport const registerAreaSeriesAnimation = () => {\n registerAreaAnimation();\n registerLineAnimation();\n registerScaleInOutAnimation();\n};\n","import { isValid } from '@visactor/vutils';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport type { AreaSeries } from './area';\nimport type { IAreaSeriesSpec, IAreaSeriesTheme } from './interface';\nimport type { ConvertToMarkStyleSpec, IAreaMarkSpec } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class AreaSeriesSpecTransformer<\n T extends IAreaSeriesSpec = IAreaSeriesSpec,\n K extends IAreaSeriesTheme = IAreaSeriesTheme\n> extends LineLikeSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n\n this._addMarkLabelSpec(spec, (spec: any) => {\n const isAreaMiddle = spec.position === 'inside-middle';\n return !isPointVisible || isAreaMiddle ? SeriesMarkNameEnum.area : SeriesMarkNameEnum.point;\n });\n\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.area,\n 'areaLabel' as any,\n 'initLineLabelMarkStyle',\n undefined,\n true\n );\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n super._transformSpecAfterMergingTheme(spec, chartSpec, chartSpecInfo);\n\n const { area = {}, line = {}, seriesMark } = spec;\n const isAreaVisible = area.visible !== false && area.style?.visible !== false;\n const isLineVisible = line.visible !== false && line.style?.visible !== false;\n // merge line to area\n\n area.support3d = !!(area.support3d || line.support3d);\n area.zIndex =\n isValid(area.zIndex) || isValid(line.zIndex) ? Math.max(area.zIndex ?? 0, line.zIndex ?? 0) : undefined;\n\n // remove area stroke\n if (area.style) {\n delete area.style.stroke;\n }\n if (area.state) {\n Object.keys(area.state).forEach(state => {\n if ('style' in area.state[state]) {\n delete area.state[state].style.stroke;\n } else {\n delete (>area.state[state]).stroke;\n }\n });\n }\n // check which one is main\n let mainSpec = area;\n let subSpec = line;\n if (seriesMark === 'line' || (isLineVisible && !isAreaVisible)) {\n mainSpec = line;\n subSpec = area;\n }\n area.style = mergeSpec({}, subSpec.style, mainSpec.style);\n area.state = mergeSpec({}, subSpec.state, mainSpec.state);\n\n if (area.interactive === false) {\n area.style.fillPickable = false;\n }\n if (line.interactive === false) {\n line.style.strokePickable = false;\n }\n\n area.interactive = !!(area.interactive || (line.interactive ?? true));\n\n spec.area = area;\n spec.line = line;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { isArray } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum, InterpolateType } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { mixin } from '@visactor/vutils';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport type { IAreaSeriesSpec } from './interface';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { registerLineMark } from '../../mark/line';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { AreaSeriesTooltipHelper } from './tooltip-helpter';\nimport { areaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerAreaSeriesAnimation } from './animation';\nimport type { IMark, IAreaMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { AreaSeriesSpecTransformer } from './area-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport interface AreaSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n | 'initLineLabelMarkStyle'\n >,\n CartesianSeries {}\n\nexport class AreaSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.area;\n type = SeriesTypeEnum.area;\n\n static readonly mark: SeriesMarkMap = areaSeriesMark;\n static readonly transformerConstructor = AreaSeriesSpecTransformer as any;\n readonly transformerConstructor = AreaSeriesSpecTransformer;\n\n protected _areaMark!: IAreaMark;\n protected _sortDataByAxis: boolean = false;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const areaSpec = this._spec.area || {};\n\n const seriesMark = this._spec.seriesMark ?? 'area';\n const isAreaMarkVisible = this._isAreaVisible() || this._isLineVisible();\n // area\n this._areaMark = this._createMark(\n AreaSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark: isAreaMarkVisible && seriesMark !== 'point',\n stateSort: areaSpec.stateSort\n },\n {\n ...progressive,\n morphElementKey: this.getDimensionField()[0],\n setCustomizedShape: areaSpec.customShape\n }\n ) as IAreaMark;\n\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initSymbolMarkStyle();\n }\n\n initAreaMarkStyle() {\n // FIXME 是不是应该把curveType提前到上层配置\n // 不允许area和line的curveType不一致\n const userCurveType = (this.getSpec().area?.style?.curveType ??\n this.getSpec().line?.style?.curveType) as InterpolateType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? this._direction === Direction.horizontal\n ? 'monotoneY'\n : 'monotoneX'\n : userCurveType;\n\n // area\n const areaMark = this._areaMark;\n if (areaMark) {\n const isAreaVisible = this._isAreaVisible();\n const isLineVisible = this._isLineVisible();\n if (isAreaVisible || isLineVisible) {\n areaMark.setVisible(true);\n } else {\n areaMark.setVisible(false);\n }\n\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionX1(datum), this._xAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n y1: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n orient: this._direction\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: this.dataToPositionX.bind(this),\n y1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionY1(datum), this._yAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n fill: isAreaVisible ? this.getColorAttribute() : false,\n stroke: isLineVisible ? this.getColorAttribute() : false\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n\n // change stroke to area stoke = [lineStroke,false,false,false]\n Object.keys(areaMark.stateStyle).forEach(state => {\n if (areaMark.stateStyle[state].stroke) {\n areaMark.setPostProcess(\n 'stroke',\n result => {\n return [result, false, false, false];\n },\n state\n );\n }\n });\n }\n }\n\n initAnimation() {\n const areaAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._lineMark) {\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._areaMark) {\n this._areaMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('area')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected _isAreaVisible() {\n const areaSpec = this._spec.area || {};\n return areaSpec.visible !== false && areaSpec.style?.visible !== false;\n }\n\n protected _isLineVisible() {\n const lineSpec = this._spec.line || {};\n return lineSpec.visible !== false && lineSpec.style?.visible !== false;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new AreaSeriesTooltipHelper(this);\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n this.encodeDefined(this._areaMark, 'defined');\n }\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n const seriesMarkType = this._spec.seriesMark ?? 'area';\n\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && (!result || seriesMarkType === 'line')) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(AreaSeries, LineLikeSeriesMixin);\n\nexport const registerAreaSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerAreaMark();\n registerSymbolMark();\n registerAreaSeriesAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(AreaSeries.type, AreaSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IAreaChartSpec } from './interface';\n\nexport class AreaChartSpecTransformer<\n T extends IAreaChartSpec = IAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'point',\n 'line',\n 'area',\n 'seriesMark',\n 'activePoint',\n 'sampling',\n 'samplingFactor',\n 'pointDis',\n 'pointDisMul',\n 'markOverlap',\n 'areaLabel'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerAreaSeries } from '../../series/area/area';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IAreaChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { AreaChartSpecTransformer } from './area-transformer';\nimport { BaseChart } from '../base';\nimport { mixin } from '@visactor/vutils';\nimport { StackChartMixin } from '../stack';\n\nexport class AreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.area;\n static readonly seriesType: string = SeriesTypeEnum.area;\n static readonly transformerConstructor = AreaChartSpecTransformer;\n readonly transformerConstructor = AreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.area;\n readonly seriesType: string = SeriesTypeEnum.area;\n}\nmixin(AreaChart, StackChartMixin);\n\nexport const registerAreaChart = () => {\n registerAreaSeries();\n Factory.registerChart(AreaChart.type, AreaChart);\n};\n","import { Factory } from '../../core/factory';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Datum } from '../../typings';\nimport type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { BarAppearPreset, IBarAnimationParams } from './interface';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nfunction barGrowOption(barParams: IBarAnimationParams, isOverall = true) {\n return (datum: Datum, element: IElement, params: any) => {\n const field = barParams.direction === 'vertical' ? barParams.yField : barParams.xField;\n const data = datum?.[field];\n if (barParams.direction === 'vertical') {\n return {\n overall: isOverall ? barParams.growFrom() : isOverall,\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n return {\n overall: isOverall ? barParams.growFrom() : false,\n orient: data > 0 ? 'positive' : 'negative'\n };\n };\n}\nexport const barGrowIn = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: barGrowOption(params, isOverall)\n };\n};\n\nexport const barGrowOut = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: barGrowOption(params, isOverall)\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function barPresetAnimation(\n params: IBarAnimationParams,\n preset: BarAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params);\n }\n}\n\nexport const registerBarAnimation = () => {\n Factory.registerAnimation('bar', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n\nexport const registerBar3dAnimation = () => {\n Factory.registerAnimation('bar3d', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n","import { Factory } from './../core/factory';\nimport type { IRectMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRectMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRectGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport class RectMark extends BaseMark implements IRectMark {\n static readonly type = MarkTypeEnum.rect;\n readonly type = RectMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRectMark = () => {\n Factory.registerMark(RectMark.type, RectMark);\n registerRectGraphic();\n registerVGrammarRectAnimation();\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const barSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar]: { name: SeriesMarkNameEnum.bar, type: MarkTypeEnum.rect },\n [SeriesMarkNameEnum.barBackground]: { name: SeriesMarkNameEnum.barBackground, type: MarkTypeEnum.rect }\n};\n\nexport const bar3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar3d]: { name: SeriesMarkNameEnum.bar3d, type: MarkTypeEnum.rect3d }\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IStackCacheNode } from '../../util/data';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { ISeries } from '../interface/series';\n\nexport function stackWithMinHeight(\n stackCache: IStackCacheNode,\n stackInverse: boolean,\n context: {\n isVertical: boolean;\n start: string;\n end: string;\n startMethod: string;\n endMethod: string;\n axisHelper: string;\n }\n) {\n if (stackCache.values.length > 0) {\n // temp\n let lastY: number;\n // 如果进行了夸系列的排序\n if (stackCache.sortDatums.length) {\n let sortDatums = stackCache.sortDatums;\n if (stackInverse) {\n sortDatums = stackCache.sortDatums.slice().reverse();\n }\n for (let index = 0; index < sortDatums.length; index++) {\n lastY = computeOneDatumY(\n sortDatums[index].datum,\n lastY,\n sortDatums[index].series,\n context,\n sortDatums[index].series[context.axisHelper].getScale?.(0),\n index === 0\n );\n }\n } else {\n // 使用基于系列数据顺序的排序\n // stack one group\n let seriesInfo = stackCache.series;\n if (stackInverse) {\n seriesInfo = seriesInfo.slice().reverse();\n }\n seriesInfo.forEach(({ s, values }, sIndex) => {\n const seriesScale = s[context.axisHelper].getScale?.(0);\n // stack\n for (let index = 0; index < values.length; index++) {\n const obj = values[stackInverse ? values.length - 1 - index : index];\n lastY = computeOneDatumY(obj, lastY, s, context, seriesScale, index === 0 && sIndex === 0);\n }\n });\n }\n }\n for (const key in stackCache.nodes) {\n stackWithMinHeight(stackCache.nodes[key], stackInverse, context);\n }\n}\n\nfunction computeOneDatumY(\n obj: any,\n lastY: number,\n s: ISeries,\n context: {\n isVertical: boolean;\n start: string;\n end: string;\n startMethod: string;\n endMethod: string;\n axisHelper: string;\n },\n seriesScale: IBaseScale,\n isFirst: boolean\n) {\n // stack info in series\n const barMinHeight = s.getSpec().barMinHeight;\n const inverse = s[context.axisHelper].isInverse();\n\n const y1 = valueInScaleRange(s[context.startMethod](obj), seriesScale);\n let y = valueInScaleRange(s[context.endMethod](obj), seriesScale);\n\n if (isFirst) {\n lastY = y1;\n }\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = context.isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n y = lastY + flag * height;\n obj[context.start] = lastY;\n obj[context.end] = y;\n return y;\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IBarSeriesSpec, IBarSeriesTheme } from './interface';\n\nexport class BarSeriesSpecTransformer<\n T extends IBarSeriesSpec = IBarSeriesSpec,\n K extends IBarSeriesTheme = IBarSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IBaseScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport {\n DEFAULT_DATA_KEY,\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum, DirectionType } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { getRegionStackGroup } from '../../util/data';\nimport { getActualNumValue } from '../../util/space';\nimport { registerBarAnimation } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { BarAppearPreset, IBarAnimationParams, IBarSeriesSpec } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { IModelInitOption } from '../../model/interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerRectMark } from '../../mark/rect';\nimport { array, isFunction, isNil, isValid, last } from '@visactor/vutils';\nimport { barSeriesMark } from './constant';\nimport { stackWithMinHeight } from '../util/stack';\nimport { Factory } from '../../core/factory';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { DataView } from '@visactor/vdataset';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { registerSampleTransform } from '@visactor/vgrammar-core';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { BarSeriesSpecTransformer } from './bar-transformer';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { RECT_X, RECT_X1, RECT_Y, RECT_Y1 } from '../base/constant';\nimport { createRect } from '@visactor/vrender-core';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class BarSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.bar;\n type = SeriesTypeEnum.bar;\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n\n static readonly mark: SeriesMarkMap = barSeriesMark;\n static readonly transformerConstructor = BarSeriesSpecTransformer as any;\n readonly transformerConstructor = BarSeriesSpecTransformer;\n\n protected _bandPosition = 0;\n protected _barMark!: IRectMark;\n protected _barBackgroundMark!: IRectMark;\n\n protected _barBackgroundViewData: SeriesData;\n\n initMark(): void {\n this._initBarBackgroundMark();\n\n this._barMark = this._createMark(\n {\n ...BarSeries.mark.bar,\n name: this._barMarkName,\n type: this._barMarkType\n },\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.bar?.stateSort\n },\n {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold,\n morphElementKey: this.getDimensionField()[0],\n morph: shouldMarkDoMorph(this._spec, this._barMarkName),\n setCustomizedShape: this._spec.bar?.customShape\n }\n ) as IRectMark;\n }\n\n protected _initBarBackgroundMark(): void {\n if (this._spec.barBackground && this._spec.barBackground.visible) {\n this._barBackgroundMark = this._createMark(\n BarSeries.mark.barBackground,\n {\n dataView: this._barBackgroundViewData.getDataView(),\n dataProductId: this._barBackgroundViewData.getProductId(),\n stateSort: this._spec.barBackground.stateSort\n },\n {\n setCustomizedShape: this._spec.barBackground.customShape,\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n }\n ) as IRectMark;\n }\n }\n\n initMarkStyle(): void {\n if (this._barMark) {\n this.setMarkStyle(\n this._barMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { mark, group } = this._tooltipHelper.activeTriggerSet;\n if (this._barMark) {\n mark.add(this._barMark);\n group.add(this._barMark);\n }\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n\n const spec = this._spec.barBackground ?? {};\n if (!spec.visible) {\n return;\n }\n\n const hasBandAxis = this._getRelatedComponentSpecInfo('axes').some(\n axisInfo => axisInfo.type === ComponentTypeEnum.cartesianBandAxis\n );\n\n let barBackgroundData: DataView;\n registerDataSetInstanceTransform(this._option.dataSet, 'addVChartProperty', addVChartProperty);\n\n if (hasBandAxis) {\n type DimensionItemsConfig = { scaleDepth?: number };\n\n /**\n * @description 准备 barBackground 数据(离散轴)\n */\n const dimensionItems = ([data]: DataView[], { scaleDepth }: DimensionItemsConfig) => {\n let dataCollect: Datum[] = [{}];\n const fields = this.getDimensionField();\n // 将维度轴的所有层级 field 的对应数据做笛卡尔积\n const depth = isNil(scaleDepth) ? fields.length : Math.min(fields.length, scaleDepth);\n for (let i = 0; i < depth; i++) {\n const field = fields[i];\n const values = data.latestData[field]?.values;\n if (!values?.length) {\n continue;\n }\n const newDataCollect: Datum[] = [];\n const dataKey = (this._spec.dataKey as string) ?? DEFAULT_DATA_KEY;\n for (let j = 0; j < values.length; j++) {\n for (let k = 0; k < dataCollect.length; k++) {\n newDataCollect.push({\n ...dataCollect[k],\n [field]: values[j],\n [dataKey]: values[j]\n });\n }\n }\n dataCollect = newDataCollect;\n }\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'dimensionItems', dimensionItems);\n\n barBackgroundData = new DataView(this._option.dataSet)\n .parse([this._viewDataStatistics], {\n type: 'dataview'\n })\n .transform(\n {\n type: 'dimensionItems',\n options: {\n scaleDepth: isNil(spec.fieldLevel) ? undefined : spec.fieldLevel + 1\n } as DimensionItemsConfig\n },\n false\n )\n .transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._viewDataStatistics?.target.addListener('change', barBackgroundData.reRunAllTransform);\n } else {\n /**\n * @description 准备 barBackground 数据(连续轴)\n */\n const dimensionItems = ([data]: DataView[]) => {\n const dataCollect: Datum[] = [];\n const [field0, field1] = this.getDimensionContinuousField();\n const map: Record = {};\n viewData.latestData.forEach((datum: Datum) => {\n const key = `${datum[field0]}-${datum[field1]}`;\n if (!map[key]) {\n map[key] = {\n [field0]: datum[field0],\n [field1]: datum[field1]\n };\n dataCollect.push(map[key]);\n }\n });\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'dimensionItems', dimensionItems);\n\n const viewData = this.getViewData();\n barBackgroundData = new DataView(this._option.dataSet)\n .parse([viewData], {\n type: 'dataview'\n })\n .transform(\n {\n type: 'dimensionItems'\n },\n false\n )\n .transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n viewData?.target.addListener('change', barBackgroundData.reRunAllTransform);\n }\n this._barBackgroundViewData = new SeriesData(this._option, barBackgroundData);\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n if (this.direction === 'vertical') {\n this._xAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n } else {\n this._yAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n }\n }\n\n private _shouldDoPreCalculate() {\n const region = this.getRegion();\n return this.getStack() && region.getSeries().filter(s => s.type === this.type && s.getSpec().barMinHeight).length;\n }\n\n private _calculateStackRectPosition(isVertical: boolean) {\n const region = this.getRegion();\n\n // @ts-ignore\n if (region._bar_series_position_calculated) {\n return;\n }\n // @ts-ignore\n region._bar_series_position_calculated = true; // 因为是 region 内堆叠矩形的计算,所以加一个 hack 标识位用于避免重复计算\n let start: string;\n let end: string;\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n start = RECT_Y1;\n end = RECT_Y;\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n start = RECT_X1;\n end = RECT_X;\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n // only reCompute bar\n const stackValueGroup = getRegionStackGroup(region, false, s => s.type === this.type);\n // 按照堆积逻辑 重新计算一次图形的堆积位置并设置到数据上\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackWithMinHeight(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), {\n isVertical,\n start,\n end,\n startMethod,\n endMethod,\n axisHelper\n });\n }\n }\n }\n\n private _calculateRectPosition(datum: Datum, isVertical: boolean, useWholeRange?: boolean) {\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n const seriesScale = this[axisHelper].getScale?.(0);\n const inverse = this[axisHelper].isInverse();\n const barMinHeight = this._spec.barMinHeight;\n const y1 = valueInScaleRange(this[startMethod](datum), seriesScale, useWholeRange);\n const y = valueInScaleRange(this[endMethod](datum), seriesScale, useWholeRange);\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n return y1 + flag * height;\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosX(datum: Datum) {\n return this.dataToPositionX(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosX1(datum: Datum) {\n return this.dataToPositionX1(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosY(datum: Datum) {\n return this.dataToPositionY(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosY1(datum: Datum) {\n return this.dataToPositionY1(datum);\n }\n\n protected _getBarXStart = (datum: Datum, scale: IBaseScale, useWholeRange?: boolean) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, false, useWholeRange);\n }\n\n return valueInScaleRange(this._dataToPosX(datum), scale, useWholeRange);\n };\n\n protected _getBarXEnd = (datum: Datum, scale: IBaseScale, useWholeRange?: boolean) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X1];\n }\n\n return valueInScaleRange(this._dataToPosX1(datum), scale, useWholeRange);\n };\n\n protected _getBarYStart = (datum: Datum, scale: IBaseScale) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, true);\n }\n\n return valueInScaleRange(this._dataToPosY(datum), scale);\n };\n\n protected _getBarYEnd = (datum: Datum, scale: IBaseScale) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y1];\n }\n\n return valueInScaleRange(this._dataToPosY1(datum), scale);\n };\n\n initBandRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barMark,\n {\n x: datum => this._getBarXStart(datum, xScale),\n x1: datum => this._getBarXEnd(datum, xScale),\n y: datum => this._getPosition(this.direction, datum),\n height: () => this._getBarWidth(this._yAxisHelper),\n width: () => undefined,\n y1: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barMark,\n {\n y: datum => this._getBarYStart(datum, yScale),\n y1: datum => this._getBarYEnd(datum, yScale),\n x: datum => this._getPosition(this.direction, datum),\n width: () => this._getBarWidth(this._xAxisHelper),\n x1: () => undefined,\n height: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this._initStackBarMarkStyle();\n\n this._initBandBarBackgroundMarkStyle();\n }\n\n protected _initStackBarMarkStyle() {\n if (!this._spec.stackCornerRadius) {\n return;\n }\n\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n this._barMark.setMarkConfig({\n clip: true,\n clipPath: () => {\n const rectPaths: any[] = [];\n this._forEachStackGroup(node => {\n let min = Infinity;\n let max = -Infinity;\n let hasPercent = false;\n let minPercent = Infinity;\n let maxPercent = -Infinity;\n node.values.forEach(datum => {\n const start = datum[STACK_FIELD_START];\n const end = datum[STACK_FIELD_END];\n const startPercent = datum[STACK_FIELD_START_PERCENT];\n const endPercent = datum[STACK_FIELD_END_PERCENT];\n min = Math.min(min, start, end);\n max = Math.max(max, start, end);\n if (isValid(startPercent) && isValid(endPercent)) {\n hasPercent = true;\n minPercent = Math.min(minPercent, startPercent, endPercent);\n maxPercent = Math.max(maxPercent, startPercent, endPercent);\n }\n });\n const mockDatum = {\n ...node.values[0],\n [STACK_FIELD_START]: min,\n [STACK_FIELD_END]: max,\n ...(hasPercent\n ? {\n [STACK_FIELD_START_PERCENT]: minPercent,\n [STACK_FIELD_END_PERCENT]: maxPercent\n }\n : undefined)\n };\n const rectAttr =\n this.direction === Direction.horizontal\n ? {\n x: this._getBarXStart(mockDatum, xScale),\n x1: this._getBarXEnd(mockDatum, xScale),\n y: this._getPosition(this.direction, mockDatum),\n height: this._getBarWidth(this._yAxisHelper)\n }\n : {\n y: this._getBarYStart(mockDatum, yScale),\n y1: this._getBarYEnd(mockDatum, yScale),\n x: this._getPosition(this.direction, mockDatum),\n width: this._getBarWidth(this._xAxisHelper)\n };\n rectPaths.push(\n createRect({\n ...rectAttr,\n cornerRadius: isFunction(this._spec.stackCornerRadius)\n ? this._spec.stackCornerRadius(rectAttr, mockDatum, this._markAttributeContext)\n : this._spec.stackCornerRadius,\n fill: true\n })\n );\n });\n return rectPaths;\n }\n });\n }\n\n initLinearRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n if (this.direction === Direction.horizontal) {\n const yChannels = isValid(this._fieldY2)\n ? {\n y: (datum: Datum) => valueInScaleRange(this._dataToPosY(datum), yScale, true),\n y1: (datum: Datum) => valueInScaleRange(this._dataToPosY1(datum), yScale, true)\n }\n : {\n y: (datum: Datum) =>\n valueInScaleRange(this._dataToPosY(datum) - this._getBarWidth(this._yAxisHelper) / 2, yScale, true),\n height: (datum: Datum) => this._getBarWidth(this._yAxisHelper)\n };\n\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => this._getBarXStart(datum, xScale, true),\n x1: (datum: Datum) => this._getBarXEnd(datum, xScale, true),\n ...yChannels\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: () => this._getBarBackgroundXStart(xScale),\n x1: () => this._getBarBackgroundXEnd(xScale),\n ...yChannels\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const xChannels = isValid(this._fieldX2)\n ? {\n x: (datum: Datum) => valueInScaleRange(this._dataToPosX(datum), xScale, true),\n x1: (datum: Datum) => valueInScaleRange(this._dataToPosX1(datum), xScale, true)\n }\n : {\n x: (datum: Datum) =>\n valueInScaleRange(this._dataToPosX(datum) - this._getBarWidth(this._xAxisHelper) / 2, xScale, true),\n width: (datum: Datum) => this._getBarWidth(this._xAxisHelper)\n };\n this.setMarkStyle(\n this._barMark,\n {\n ...xChannels,\n y: datum => this._getBarYStart(datum, yScale),\n y1: datum => this._getBarYEnd(datum, yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n ...xChannels,\n y: () => this._getBarBackgroundYStart(yScale),\n y1: () => this._getBarBackgroundYEnd(yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected _getBarBackgroundXStart = (scale: IBaseScale) => {\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n };\n\n protected _getBarBackgroundXEnd = (scale: IBaseScale) => {\n const range = scale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n };\n\n protected _getBarBackgroundYStart = (scale: IBaseScale) => {\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n };\n\n protected _getBarBackgroundYEnd = (scale: IBaseScale) => {\n const range = scale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n };\n\n protected _initBandBarBackgroundMarkStyle() {\n if (!this._barBackgroundMark) {\n return;\n }\n\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n const spec = this._spec.barBackground ?? {};\n const scaleDepth = isNil(spec.fieldLevel) ? undefined : spec.fieldLevel + 1;\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: () => this._getBarBackgroundXStart(xScale),\n x1: () => this._getBarBackgroundXEnd(xScale),\n y: datum => this._getPosition(this.direction, datum, scaleDepth, SeriesMarkNameEnum.barBackground),\n height: () => this._getBarWidth(this._yAxisHelper, scaleDepth),\n width: () => undefined,\n y1: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: datum => this._getPosition(this.direction, datum, scaleDepth, SeriesMarkNameEnum.barBackground),\n y: () => this._getBarBackgroundYStart(yScale),\n y1: () => this._getBarBackgroundYEnd(yScale),\n width: () => this._getBarWidth(this._xAxisHelper, scaleDepth),\n x1: () => undefined,\n height: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const barAnimationParams: IBarAnimationParams = {\n yField: this._fieldY[0],\n xField: this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('bar')?.(barAnimationParams, appearPreset),\n userAnimationConfig(this._barMarkName, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected _getBarWidth(axisHelper: IAxisHelper, scaleDepth?: number) {\n const depthFromSpec = this._groups ? this._groups.fields.length : 1;\n const depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth);\n\n const bandWidth = axisHelper.getBandwidth?.(depth - 1) ?? DefaultBandWidth;\n const hasBarWidth = isValid(this._spec.barWidth) && depth === depthFromSpec;\n\n const hasBarMinWidth = isValid(this._spec.barMinWidth);\n const hasBarMaxWidth = isValid(this._spec.barMaxWidth);\n let width = bandWidth;\n if (hasBarWidth) {\n width = getActualNumValue(this._spec.barWidth, bandWidth);\n }\n if (hasBarMinWidth) {\n width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth));\n }\n if (hasBarMaxWidth) {\n width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth));\n }\n return width;\n }\n\n protected _getPosition(direction: DirectionType, datum: Datum, scaleDepth?: number, mark?: SeriesMarkNameEnum) {\n let axisHelper;\n let sizeAttribute;\n let dataToPosition;\n if (direction === Direction.horizontal) {\n axisHelper = this.getYAxisHelper();\n sizeAttribute = 'height';\n dataToPosition =\n mark === SeriesMarkNameEnum.barBackground\n ? this.dataToBarBackgroundPositionY.bind(this)\n : this.dataToPositionY.bind(this);\n } else {\n axisHelper = this.getXAxisHelper();\n sizeAttribute = 'width';\n dataToPosition =\n mark === SeriesMarkNameEnum.barBackground\n ? this.dataToBarBackgroundPositionX.bind(this)\n : this.dataToPositionX.bind(this);\n }\n const scale = axisHelper.getScale(0);\n\n const depthFromSpec = this._groups ? this._groups.fields.length : 1;\n const depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth);\n\n const bandWidth = axisHelper.getBandwidth?.(depth - 1) ?? DefaultBandWidth;\n const size = depth === depthFromSpec ? (this._barMark.getAttribute(sizeAttribute, datum) as number) : bandWidth;\n\n if (depth > 1 && isValid(this._spec.barGapInGroup)) {\n // 自里向外计算,沿着第一层分组的中心点进行位置调整\n const groupFields = this._groups.fields;\n const barInGroup = array(this._spec.barGapInGroup);\n let totalWidth: number = 0;\n let offSet: number = 0;\n\n for (let index = groupFields.length - 1; index >= 1; index--) {\n const groupField = groupFields[index];\n // const groupValues = this.getViewDataStatistics()?.latestData?.[groupField]?.values ?? [];\n const groupValues = axisHelper.getScale(index)?.domain() ?? [];\n const groupCount = groupValues.length;\n const gap = getActualNumValue(barInGroup[index - 1] ?? last(barInGroup), bandWidth);\n const i = groupValues.indexOf(datum[groupField]);\n if (index === groupFields.length - 1) {\n totalWidth += groupCount * size + (groupCount - 1) * gap;\n offSet += i * (size + gap);\n } else {\n offSet += i * (totalWidth + gap);\n totalWidth += totalWidth + (groupCount - 1) * gap;\n }\n }\n\n const center = scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2;\n return center - totalWidth / 2 + offSet;\n }\n\n const continuous = isContinuous(scale.type || 'band');\n const pos = dataToPosition(datum, depth);\n\n return pos + (bandWidth - size) * 0.5 + (continuous ? -bandWidth / 2 : 0);\n }\n\n protected _barBackgroundPositionXEncoder?: (datum: Datum) => number;\n protected _getBarBackgroundPositionXEncoder = () => this._barBackgroundPositionXEncoder?.bind(this);\n protected _setBarBackgroundPositionXEncoder = (encoder: (datum: Datum) => number) => {\n this._barBackgroundPositionXEncoder = encoder.bind(this);\n };\n\n dataToBarBackgroundPositionX(datum: Datum, scaleDepth?: number): number {\n return this._dataToPosition(\n datum,\n this._xAxisHelper,\n this.fieldX,\n scaleDepth,\n this._getBarBackgroundPositionXEncoder,\n this._setBarBackgroundPositionXEncoder\n );\n }\n\n protected _barBackgroundPositionYEncoder?: (datum: Datum) => number;\n protected _getBarBackgroundPositionYEncoder = () => this._barBackgroundPositionYEncoder?.bind(this);\n protected _setBarBackgroundPositionYEncoder = (encoder: (datum: Datum) => number) => {\n this._barBackgroundPositionYEncoder = encoder.bind(this);\n };\n\n dataToBarBackgroundPositionY(datum: Datum, scaleDepth?: number): number {\n return this._dataToPosition(\n datum,\n this._yAxisHelper,\n this.fieldY,\n scaleDepth,\n this._getBarBackgroundPositionYEncoder,\n this._setBarBackgroundPositionYEncoder\n );\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n const region = this.getRegion();\n // @ts-ignore\n region._bar_series_position_calculated = false;\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n compile(): void {\n super.compile();\n\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.horizontal ? height : width,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.horizontal ? fieldsX[0] : fieldsY[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._barMark];\n }\n\n compileData() {\n super.compileData();\n this._barBackgroundViewData?.compile();\n }\n\n fillData() {\n super.fillData();\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n this._barBackgroundViewData?.updateData();\n }\n\n release() {\n super.release();\n this._barBackgroundViewData?.release();\n this._barBackgroundViewData = null;\n }\n}\n\nexport const registerBarSeries = () => {\n registerSampleTransform();\n registerRectMark();\n registerBarAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(BarSeries.type, BarSeries);\n};\n","import { isObject } from '@visactor/vutils';\nimport type { IBarSeriesSpec } from '../../series';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBarChartSpec } from './interface';\nimport type { ICartesianBandAxisSpec } from '../../component';\n\nexport class BarChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barMinHeight',\n 'sampling',\n 'samplingFactor',\n 'barBackground',\n 'stackCornerRadius'\n ]) as IBarSeriesSpec;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _transformAxisSpec(spec: T) {\n super._transformAxisSpec(spec);\n if (!spec.axes) {\n return;\n }\n const isHorizontal = spec.series.some(series => series.direction === 'horizontal');\n const bandAxis: ICartesianBandAxisSpec =\n spec.axes.find(axis => axis.type === 'band') ??\n spec.axes.find(axis => (isHorizontal ? ['left', 'right'] : ['top', 'bottom']).includes(axis.orient));\n if (bandAxis && !bandAxis.bandSize && !bandAxis.maxBandSize && !bandAxis.minBandSize) {\n // 将 autoBandSize 应用在轴上\n if (!!spec.autoBandSize) {\n const extend = isObject(spec.autoBandSize) ? spec.autoBandSize.extend ?? 0 : 0;\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = spec.series.find(\n series => series.type === 'bar'\n ) as IBarSeriesSpec;\n this._applyAxisBandSize(bandAxis, extend, { barMaxWidth, barMinWidth, barWidth, barGapInGroup });\n }\n }\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBarChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BarChartSpecTransformer } from './bar-transformer';\nimport { BaseChart } from '../base';\nimport { mixin } from '@visactor/vutils';\nimport { StackChartMixin } from '../stack';\n\nexport class BarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.bar;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly transformerConstructor = BarChartSpecTransformer;\n readonly transformerConstructor = BarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar;\n readonly seriesType: string = SeriesTypeEnum.bar;\n}\n\nmixin(BarChart, StackChartMixin);\n\nexport const registerBarChart = () => {\n registerBarSeries();\n Factory.registerChart(BarChart.type, BarChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IRect3dMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRect3dMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRect3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport class Rect3dMark extends BaseMark implements IRect3dMark {\n static readonly type = MarkTypeEnum.rect3d;\n readonly type = Rect3dMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n length: 3\n };\n return defaultStyle;\n }\n}\n\nexport const registerRect3dMark = () => {\n Factory.registerMark(Rect3dMark.type, Rect3dMark);\n registerRect3dGraphic();\n registerVGrammarRectAnimation();\n};\n","import type { IBar3dSeriesSpec, IBar3dSeriesTheme } from './interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { BarSeriesSpecTransformer } from './bar-transformer';\n\nexport class Bar3dSeriesSpecTransformer<\n T extends IBar3dSeriesSpec = IBar3dSeriesSpec,\n K extends IBar3dSeriesTheme = IBar3dSeriesTheme\n // @ts-ignore\n> extends BarSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar3d);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../interface/type';\nimport { BarSeries } from './bar';\nimport { registerRect3dMark } from '../../mark/rect-3d';\nimport type { IBar3dSeriesSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { bar3dSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerBar3dAnimation } from './animation';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { Bar3dSeriesSpecTransformer } from './bar-3d-transformer';\n\nexport class Bar3dSeries extends BarSeries> {\n static readonly type: string = SeriesTypeEnum.bar3d;\n type = SeriesTypeEnum.bar3d;\n\n static readonly mark: SeriesMarkMap = bar3dSeriesMark;\n\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n\n static readonly transformerConstructor = Bar3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Bar3dSeriesSpecTransformer as any;\n}\n\nexport const registerBar3dSeries = () => {\n registerBar3dAnimation();\n registerRect3dMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(Bar3dSeries.type, Bar3dSeries);\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport type { IBar3dChartSpec } from '../interface';\nimport { BarChartSpecTransformer } from '../bar-transformer';\n\nexport class Bar3dChartSpecTransformer extends BarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n seriesSpec.barWidth = spec.barWidth;\n seriesSpec.barMaxWidth = spec.barMaxWidth;\n seriesSpec.barMinWidth = spec.barMinWidth;\n seriesSpec.barGapInGroup = spec.barGapInGroup;\n\n return seriesSpec;\n }\n}\n","import {\n registerDirectionalLight,\n registerOrthoCamera,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin,\n registerViewTransform3dPlugin\n} from '@visactor/vrender-core';\n\nimport {\n registerViewMorphAPI,\n registerAnimate as registerAnimateAPI,\n registerDragPlugin,\n registerGesturePlugin\n} from '@visactor/vgrammar-core';\nimport { registerVGrammarCommonAnimation } from '../animation/config';\n\nexport const register3DPlugin = () => {\n registerDirectionalLight();\n registerOrthoCamera();\n registerViewTransform3dPlugin();\n};\n\nexport const registerAnimate = () => {\n registerAnimateAPI();\n registerVGrammarCommonAnimation();\n};\n\nexport { registerReactAttributePlugin, registerHtmlAttributePlugin, registerDragPlugin, registerGesturePlugin };\nexport const registerMorph = registerViewMorphAPI;\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IBar3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { BarChart } from '../bar';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { Bar3dChartSpecTransformer } from './bar-3d-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Bar3dChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.bar3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly transformerConstructor = Bar3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Bar3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\n\nexport const registerBar3dChart = () => {\n register3DPlugin();\n registerBar3dSeries();\n Factory.registerChart(Bar3dChart.type, Bar3dChart);\n};\n","/**\n * Checks if `value` is classified as a legal string number\n *\n * @param {*} value The string value to check.\n * @returns {boolean} Returns `true` if `value` is a legal string number, else `false`.\n * @example\n *\n * isNumeric(1)\n * // => false\n *\n * isNumeric('2.0')\n * // => true\n *\n * isNumeric('3a')\n * // => false\n *\n * isNumeric('4.a')\n * // => false\n *\n * isNumeric(Infinity)\n * // => false\n *\n * isNumeric('01')\n * // => true\n */\nconst isNumeric = (value: string): boolean => {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n};\n\nexport default isNumeric;\n","import { ScaleEnum } from '@visactor/vscale';\n\nexport const SCATTER_DEFAULT_SIZE = 10;\nexport const SCATTER_DEFAULT_RANGE_SIZE = [10, 20];\nexport const SCATTER_DEFAULT_SIZE_SCALE_TYPE = ScaleEnum.Linear;\n\nexport const SCATTER_DEFAULT_SHAPE = 'circle';\nexport const SCATTER_DEFAULT_SHAPE_SCALE_TYPE = ScaleEnum.Ordinal;\nexport const SCATTER_DEFAULT_RANGE_SHAPE = ['circle', 'square', 'triangle', 'diamond', 'star'];\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\nimport type { IScatterAnimationParams, ScatterAppearPreset } from './interface';\n\nexport const scatterPresetAnimation = (\n _params: IScatterAnimationParams, // 此处仅为保持结构统一\n preset: ScatterAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerScatterAnimation = () => {\n Factory.registerAnimation('scatter', (params: IScatterAnimationParams, preset: ScatterAppearPreset) => ({\n appear: scatterPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IScatterSeriesSpec, IScatterSeriesTheme } from './interface';\n\nexport class ScatterSeriesSpecTransformer<\n T extends IScatterSeriesSpec = IScatterSeriesSpec,\n K extends IScatterSeriesTheme = IScatterSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { PREFIX } from '../../constant/base';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum, ScaleType, VisualType, IScatterInvalidType } from '../../typings';\nimport type { IScatterSeriesSpec, ScatterAppearPreset } from './interface';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { isNil, isValid, isObject, isFunction, isString, isArray, isNumber, isNumeric } from '@visactor/vutils';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport {\n SCATTER_DEFAULT_RANGE_SHAPE,\n SCATTER_DEFAULT_RANGE_SIZE,\n SCATTER_DEFAULT_SHAPE,\n SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n SCATTER_DEFAULT_SIZE,\n SCATTER_DEFAULT_SIZE_SCALE_TYPE\n} from '../../constant/scatter';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerScatterAnimation } from './animation';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { scatterSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { ILabelMark, IMark, ISymbolMark } from '../../mark/interface';\nimport { ScatterSeriesSpecTransformer } from './scatter-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport class ScatterSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.scatter;\n type = SeriesTypeEnum.scatter;\n\n static readonly mark: SeriesMarkMap = scatterSeriesMark;\n static readonly transformerConstructor = ScatterSeriesSpecTransformer as any;\n readonly transformerConstructor = ScatterSeriesSpecTransformer;\n\n private _symbolMark: ISymbolMark;\n private _labelMark: ILabelMark;\n\n private _size: IScatterSeriesSpec['size'];\n private _sizeField: string;\n private _shape: IScatterSeriesSpec['shape'];\n private _shapeField: string;\n\n protected _invalidType: IScatterInvalidType = 'zero';\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // size\n this._size = this._spec.size;\n this._sizeField = this._spec.sizeField;\n // shape\n this._shape = this._spec.shape;\n this._shapeField = this._spec.shapeField;\n }\n\n private _getSeriesAttribute(\n field: string,\n spec: VisualType,\n {\n defaultScaleType,\n defaultRange\n }: {\n defaultScaleType: ScaleType;\n defaultRange: T[];\n },\n key: string\n ): VisualType {\n // 若sizeSpec是函数\n if (isFunction(spec)) {\n return spec;\n }\n\n if (isArray(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n\n if (defaultScaleType !== 'ordinal' && (spec as any[]).length > 2) {\n this._option?.onError(`${key} length is invalid, specify up to 2 ${key}s.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n this._option.globalScale.registerModelScale({\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: spec\n });\n return {\n scale: scaleName,\n field\n };\n }\n\n // 若sizeSpec是对象\n if (isObject(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n const visualSpec = {\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: defaultRange,\n ...spec\n };\n\n this._option.globalScale.registerModelScale(visualSpec);\n return {\n scale: visualSpec.id,\n field\n };\n }\n\n // 其余情况报错\n this._option?.onError(`${key} attribute is invalid.`);\n return spec;\n }\n\n /**\n * 计算sizeScale\n * @param field 数据对应字段\n * @param sizeSpec size配置\n */\n private getSizeAttribute(field: string, sizeSpec: IScatterSeriesSpec['size']): VisualType {\n // 若sizeSpec不存在\n if (isNil(sizeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SIZE;\n }\n\n // 若sizeSpec是数值\n if (isNumber(sizeSpec)) {\n return sizeSpec;\n }\n\n // 若sizeSpec是字符串中的数值\n if (isString(sizeSpec) && isNumeric(sizeSpec)) {\n return parseFloat(sizeSpec);\n }\n\n return this._getSeriesAttribute(\n field,\n sizeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SIZE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SIZE\n },\n 'size'\n );\n }\n\n /**\n * 计算shapeScale\n * @param field 数据对应字段\n * @param shapeSpec shape配置\n */\n private getShapeAttribute(field: string, shapeSpec: IScatterSeriesSpec['shape']): VisualType {\n // 若shapeSpec不存在\n if (isNil(shapeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SHAPE;\n }\n\n // 若shapeSpec是字符串\n if (isString(shapeSpec)) {\n return shapeSpec;\n }\n\n return this._getSeriesAttribute(\n field,\n shapeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SHAPE\n },\n 'shape'\n );\n }\n\n /**\n * 初始化Mark\n */\n initMark(): void {\n this._symbolMark = this._createMark(\n ScatterSeries.mark.point,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.point?.stateSort\n },\n {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold,\n morph: shouldMarkDoMorph(this._spec, ScatterSeries.mark.point.name),\n morphElementKey: this.getDimensionField()[0],\n setCustomizedShape: this._spec.point?.customShape\n }\n ) as ISymbolMark;\n }\n\n /**\n * 初始化散点图各类Mark的Style\n */\n initMarkStyle(): void {\n this.initSymbolMarkStyle();\n }\n\n /**\n * 初始化动画\n */\n initAnimation(): void {\n const animationParams = getGroupAnimationParams(this);\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scatter')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n /**\n * 初始化SymbolMark\n */\n private initSymbolMarkStyle(): void {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n return;\n }\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(symbolMark, {\n visible: this._getInvalidDefined.bind(this)\n });\n }\n\n this.setMarkStyle(\n symbolMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n fill: this.getColorAttribute(),\n size: isNumber(this._size) || isFunction(this._size) ? this._size : SCATTER_DEFAULT_SIZE,\n symbolType: isString(this._shape) || isFunction(this._shape) ? this._shape : SCATTER_DEFAULT_SHAPE\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n if (isValid(this._sizeField) || isValid(this._size)) {\n this.setMarkStyle(\n symbolMark,\n {\n size: this.getSizeAttribute(this._sizeField, this._size) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n if (isValid(this._shapeField) || isValid(this._shape)) {\n this.setMarkStyle(\n symbolMark,\n {\n symbolType: this.getShapeAttribute(this._shapeField, this._shape) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n const fields = [this.getDimensionField()[0], this.getStackValueField()];\n const allValid = fields.every(field => field && this.getViewDataStatistics()?.latestData?.[field]?.allValid);\n if (this._invalidType === 'zero' || allValid) {\n this.setMarkStyle(this._symbolMark, { visible: true }, 'normal', AttributeLevel.Series);\n } else {\n this.setMarkStyle(\n this._symbolMark,\n { visible: this._getInvalidDefined.bind(this) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n // if has produce, reCompile encode to set attribute to product\n if (this._symbolMark.getProduct()) {\n this._symbolMark.compileEncode();\n }\n }\n\n /**\n * 初始化LabelMark\n */\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined.bind(this)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n /**\n * 处理缩放\n */\n handleZoom(e: any) {\n this.getMarksWithoutRoot().forEach(mark => {\n const vGrammarMark = mark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const elements = vGrammarMark.elements;\n\n elements.forEach((el: IElement, i: number) => {\n const graphicItem = el.getGraphicItem();\n const datum = el.getDatum();\n const newPosition = this.dataToPosition(datum);\n if (newPosition && graphicItem) {\n graphicItem.translateTo(newPosition.x, newPosition.y);\n }\n });\n });\n\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n handlePan(e: any) {\n // TODO 现在处理好像一模一样\n this.handleZoom(e);\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._symbolMark];\n }\n}\n\nexport const registerScatterSeries = () => {\n registerSymbolMark();\n registerScatterAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(ScatterSeries.type, ScatterSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IScatterChartSpec } from './interface';\n\nexport class ScatterChartSpecTransformer<\n T extends IScatterChartSpec = IScatterChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: IScatterChartSpec): any {\n return super._getDefaultSeriesSpec(spec, ['point', 'size', 'shape', 'shapeField', 'sizeField']);\n }\n}\n","import { registerScatterSeries } from '../../series/scatter/scatter';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IScatterChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { ScatterChartSpecTransformer } from './scatter-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class ScatterChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.scatter;\n static readonly seriesType: string = SeriesTypeEnum.scatter;\n static readonly transformerConstructor = ScatterChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = ScatterChartSpecTransformer;\n readonly type: string = ChartTypeEnum.scatter;\n readonly seriesType: string = SeriesTypeEnum.scatter;\n}\n\nmixin(ScatterChart, StackChartMixin);\n\nexport const registerScatterChart = () => {\n registerScatterSeries();\n Factory.registerChart(ScatterChart.type, ScatterChart);\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","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 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 {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","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return 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 sum.reset();\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 < -epsilon) ^ (winding & 1);\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","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\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","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(6),\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 = 6 * 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","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 return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : 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 return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : 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","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","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 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 = (alpha ? scaleTranslateRotate : scaleTranslate)(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 {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 {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 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 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","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-projection/src/projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport {\n geoAlbers,\n geoAlbersUsa,\n geoAzimuthalEqualArea,\n geoAzimuthalEquidistant,\n geoConicConformal,\n geoConicEqualArea,\n geoConicEquidistant,\n geoEqualEarth,\n geoEquirectangular,\n geoGnomonic,\n geoIdentity,\n geoMercator,\n geoNaturalEarth1,\n geoOrthographic,\n geoStereographic,\n geoTransverseMercator,\n geoPath\n} from 'd3-geo';\nimport { error } from '@visactor/vgrammar-util';\nimport { isString } from '@visactor/vutils';\n\nconst defaultPath = geoPath();\n\nexport function getProjectionPath(proj: any) {\n return (proj && proj.path) || defaultPath;\n}\n\nconst projections = {\n // base d3-geo projection types\n};\n\nexport const projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'parallels',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type: string, constructor: any) {\n return function projectionGenerator() {\n const p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy =\n p.copy ||\n function () {\n const c = projectionGenerator();\n projectionProperties.forEach(prop => {\n if (p[prop]) {\n c[prop](p[prop]());\n }\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nexport function projection(type: string, proj?: () => any) {\n if (!type || !isString(type)) {\n error('Projection type must be a name string.');\n }\n const projectionType = type.toLowerCase();\n if (arguments.length > 1) {\n projections[projectionType] = create(projectionType, proj);\n }\n return projections[projectionType] || null;\n}\n\nconst builtInProjections = {\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nObject.keys(builtInProjections).forEach((projectionType: string) => {\n projection(projectionType, builtInProjections[projectionType]);\n});\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-geo/src/Projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { array, isFunction, isNil } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport { projection, projectionProperties } from './projections';\nimport type {\n IView,\n IGrammarBase,\n Nil,\n FeatureCollectionData,\n FeatureData,\n IProjection,\n ProjectionSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarBase, parseFunctionType, invokeFunctionType } from '@visactor/vgrammar-core';\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\n\nfunction featurize(f: FeatureCollectionData | FeatureData) {\n return f.type === FeatureCollection\n ? f.features\n : array(f)\n .filter(d => !isNil(d))\n .map(d => (d.type === Feature ? d : { type: Feature, geometry: d }));\n}\n\nexport function collectGeoJSON(data: any) {\n const arrayData = array(data);\n return arrayData.length === 1\n ? arrayData[0]\n : {\n type: FeatureCollection,\n features: arrayData.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction create(type: string) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) {\n error('Unrecognized projection type: ' + type);\n }\n return constructor();\n}\n\nfunction set(proj: any, key: string, value: any) {\n if (isFunction(proj[key])) {\n proj[key](value);\n }\n}\n\nconst projectionOptions = projectionProperties.concat(['pointRadius', 'fit', 'extent', 'size']);\n\nexport function parseProjection(spec: ProjectionSpec, view: IView) {\n let refs: IGrammarBase[] = [];\n\n if (!spec) {\n return refs;\n }\n\n Object.keys(spec).forEach(key => {\n if (projectionOptions.includes(key)) {\n refs = refs.concat(parseFunctionType(spec[key], view));\n }\n });\n\n return refs;\n}\n\nexport class Projection extends GrammarBase implements IProjection {\n readonly grammarType = 'projection';\n\n private projection: any;\n\n constructor(view: IView) {\n super(view);\n }\n\n parse(spec: ProjectionSpec) {\n super.parse(spec);\n this.pointRadius(spec.pointRadius);\n this.size(spec.size);\n this.extent(spec.extent);\n this.fit(spec.fit);\n this.configure(spec);\n\n this.commit();\n\n return this;\n }\n\n pointRadius(pointRadius: ProjectionSpec['pointRadius']) {\n if (!isNil(this.spec.pointRadius)) {\n this.detach(parseFunctionType(this.spec.pointRadius, this.view));\n }\n this.spec.pointRadius = pointRadius;\n this.attach(parseFunctionType(pointRadius, this.view));\n this.commit();\n return this;\n }\n\n size(data: ProjectionSpec['size']) {\n if (!isNil(this.spec.size)) {\n this.detach(parseFunctionType(this.spec.size, this.view));\n }\n this.spec.size = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n extent(data: ProjectionSpec['extent']) {\n if (!isNil(this.spec.extent)) {\n this.detach(parseFunctionType(this.spec.extent, this.view));\n }\n this.spec.extent = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n fit(data: ProjectionSpec['fit']) {\n if (!isNil(this.spec.fit)) {\n this.detach(parseFunctionType(this.spec.fit, this.view));\n }\n this.spec.fit = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n configure(config: Omit | Nil) {\n this.detach(parseProjection(this.spec, this.view));\n\n if (isNil(config)) {\n this.spec = {\n type: this.spec.type,\n fit: this.spec.fit,\n extent: this.spec.extent,\n size: this.spec.size,\n pointRadius: this.spec.pointRadius\n };\n } else {\n Object.assign(this.spec, config);\n this.attach(parseProjection(this.spec, this.view));\n }\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n if (!this.projection || this.projection.type !== this.spec.type) {\n this.projection = create(this.spec.type);\n this.projection.type = this.spec.type;\n }\n projectionProperties.forEach(prop => {\n if (!isNil(this.spec[prop])) {\n set(this.projection, prop, invokeFunctionType(this.spec[prop], parameters, projection));\n }\n });\n\n if (!isNil(this.spec.pointRadius)) {\n this.projection.path.pointRadius(invokeFunctionType(this.spec.pointRadius, parameters, projection));\n }\n if (!isNil(this.spec.fit) && (!isNil(this.spec.extent) || !isNil(this.spec.size))) {\n const fit = invokeFunctionType(this.spec.fit, parameters, projection);\n const data = collectGeoJSON(fit);\n\n if (this.spec.extent) {\n this.projection.fitExtent(invokeFunctionType(this.spec.extent, parameters, projection), data);\n } else if (this.spec.size) {\n this.projection.fitSize(invokeFunctionType(this.spec.size, parameters, projection), data);\n }\n }\n\n return this.projection;\n }\n\n output() {\n return this.projection;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { isFunction, isNil, isValid } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\n\nexport interface ILookUpOpt {\n from: () => object[];\n key: string;\n // 暂时不支持Multi-field lookup\n fields: string;\n values?: string[];\n as?: string[];\n default?: any;\n set?: (A: Datum, B: Datum) => void;\n}\n\nexport const lookup = (data: Array, opt: ILookUpOpt) => {\n if (!opt.from || !opt.from()) {\n return data;\n }\n\n const fields = opt.fields;\n const key = opt.key;\n const values = opt.values;\n const defaultValue = opt.default;\n const as = opt.as || [fields];\n const index = opt.from().reduce(function (map: Map, obj) {\n if (obj[fields]) {\n map.set(obj[fields], obj);\n }\n return map;\n }, new Map());\n\n let set: (d: any) => void;\n if (isFunction(opt.set)) {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n opt.set(d, v);\n };\n } else if (values) {\n const m = values.length;\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n if (isNil(v)) {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = defaultValue;\n }\n } else {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = v[values[i]];\n }\n }\n };\n } else {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n d[as[0]] = isValid(v) ? v : defaultValue;\n };\n }\n\n if (data.length === 0) {\n return [];\n }\n return data.map(d => {\n set(d);\n return d;\n });\n};\n","import type { IGeoCoordinateHelper } from '../../component/geo/interface';\nimport type { IPoint } from '../../typings';\nimport type { IGeoSeries } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { BaseSeries } from '../base/base-series';\nimport { isNil } from '@visactor/vutils';\nimport type { SeriesData } from '../base/series-data';\nimport type { DataView } from '@visactor/vdataset';\nimport { PREFIX } from '../../constant/base';\nimport type { IGeoSeriesSpec } from './interface';\nimport type { IMark } from '../../mark/interface';\n\nexport abstract class GeoSeries extends BaseSeries implements IGeoSeries {\n type = SeriesTypeEnum.geo;\n readonly coordinate = 'geo';\n\n protected _mapViewData: SeriesData;\n getMapViewData() {\n return this._mapViewData?.getDataView();\n }\n\n protected _mapViewDataStatistics!: DataView;\n\n _nameField!: string;\n get nameField() {\n return this._nameField;\n }\n set nameField(f: string) {\n this._nameField = f;\n }\n\n _valueField!: string;\n get valueField() {\n return this._valueField;\n }\n set valueField(f: string) {\n this._valueField = f;\n }\n\n protected _nameProperty: string = 'name';\n getNameProperty() {\n return this._nameProperty;\n }\n\n protected _centroidProperty?: string;\n getCentroidProperty() {\n return this._centroidProperty;\n }\n\n _coordinateHelper!: IGeoCoordinateHelper;\n getCoordinateHelper() {\n return this._coordinateHelper;\n }\n setCoordinateHelper(h: IGeoCoordinateHelper) {\n this._coordinateHelper = h;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n // position\n dataToPosition(datum: any, checkInViewData?: boolean): IPoint | null {\n let result: IPoint | null = null;\n\n if (!datum) {\n return result;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return result;\n }\n const { dataToPosition, latitudeField, longitudeField } = this._coordinateHelper;\n\n // 从地理数据映射中获取\n result = this.nameToPosition(datum);\n\n // 从用户传入的经纬度获取\n if (result === null) {\n const lonValue = longitudeField ? datum?.[longitudeField] : Number.NaN;\n const latValue = latitudeField ? datum?.[latitudeField] : Number.NaN;\n result = dataToPosition?.([lonValue, latValue]) ?? null;\n }\n\n return result;\n }\n\n protected nameToPosition(datum: any): IPoint | null {\n const name = this.getDatumName(datum);\n if (isNil(name)) {\n return null;\n }\n return this.nameValueToPosition(name);\n }\n\n nameValueToPosition(name: string): IPoint | null {\n const mapData = this.getMapViewData()?.latestData?.filter((data: any) => this.getDatumName(data) === name)[0];\n if (isNil(mapData)) {\n return null;\n }\n\n const { dataToPosition } = this._coordinateHelper;\n const center = this.getDatumCenter(mapData);\n\n const pos = dataToPosition?.(center);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return null;\n }\n return pos;\n }\n\n abstract getDatumCenter(datum: any): [number, number];\n abstract getDatumName(datum: any): string;\n\n dataToLatitude(latValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(latValue);\n }\n\n dataToLongitude(lonValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(lonValue);\n }\n\n valueToPosition(lonValue: number, latValue: number): IPoint {\n return {\n x: this.dataToLongitude(lonValue),\n y: this.dataToLatitude(latValue)\n };\n }\n\n positionToData(p: IPoint) {\n // TODO\n }\n latitudeToData(lat: number) {\n // TODO\n }\n longitudeToData(lon: number) {\n // TODO\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionZ(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n release() {\n super.release();\n this._mapViewData.release();\n this._mapViewData = this._mapViewDataStatistics = null;\n }\n\n // TODO: geo 不支持 stack,这些方法没有意义\n getStackGroupFields() {\n return [this._nameField];\n }\n\n getStackValueField() {\n // TODO: hack\n return this._spec.valueField;\n }\n\n compileData() {\n this._mapViewData?.compile();\n }\n\n protected initStatisticalData(): void {\n super.initStatisticalData();\n if (this._mapViewData) {\n const viewDataName = `${PREFIX}_series_${this.id}_mapViewDataStatic`;\n this._mapViewDataStatistics = this.createStatisticalData(viewDataName, this._mapViewData.getDataView());\n this._mapViewData.getDataView().target.removeListener('change', this._mapViewDataStatistics.reRunAllTransform);\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return (\n this.getRawDataStatisticsByField(this._seriesField)?.values ??\n this._mapViewDataStatistics?.latestData[this._seriesField]?.values ??\n []\n );\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n fillData() {\n super.fillData();\n this._mapViewData.getDataView()?.reRunAllTransform();\n this._mapViewDataStatistics?.reRunAllTransform();\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n","import { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { GeoSourceType } from '../../typings/geo';\n\nexport interface IMapOpt {\n nameMap: Record;\n nameProperty: string;\n}\n\nexport const DEFAULT_MAP_LOOK_UP_KEY = `${PREFIX}_MAP_LOOK_UP_KEY`;\n\nexport const map = (data: GeoSourceType, opt: IMapOpt) => {\n if (data.features) {\n data.features.forEach((f: any, index: number) => {\n f[DEFAULT_DATA_INDEX] = index;\n const name = f.properties?.[opt.nameProperty];\n if (opt.nameMap && opt.nameMap[name]) {\n f[DEFAULT_MAP_LOOK_UP_KEY] = opt.nameMap[name];\n } else {\n f[DEFAULT_MAP_LOOK_UP_KEY] = name;\n }\n });\n }\n return data.features;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { MapSeries } from './map';\n\nexport class MapSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n const series = this.series as MapSeries;\n return this._getDimensionData(datum) ?? series.getDatumName(datum);\n };\n}\n","import { Factory } from './../core/factory';\nimport type { IPathMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IPathMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerPathGraphic } from '@visactor/vgrammar-core';\n\nexport class PathMark extends BaseMark implements IPathMark {\n static readonly type = MarkTypeEnum.path;\n readonly type = PathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0,\n path: ''\n };\n return defaultStyle;\n }\n}\n\nexport const registerPathMark = () => {\n Factory.registerMark(PathMark.type, PathMark);\n registerPathGraphic();\n};\n","import { projection } from '@visactor/vgrammar-projection';\nimport type { IProjectionSpec } from './interface';\n\n// TODO: 待 vgrammar 补充上后修改回去\ntype GeoJsonFeatureSpec = any;\nexport class Projection {\n projection: any;\n\n constructor(projectionSpec: IProjectionSpec) {\n // TODO: vgrammar 类型问题\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.projection = projection(projectionSpec.type)();\n }\n\n fit(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const fitData = { type: 'FeatureCollection', features };\n this.projection.fitExtent([start, size], fitData);\n }\n\n center(center: [number, number]) {\n this.projection?.center?.(center);\n }\n\n project(point: [number, number]) {\n return this.projection?.(point);\n }\n\n shape(data: GeoJsonFeatureSpec) {\n return this.projection?.path?.(data);\n }\n\n invert(point: [number, number]) {\n return this.projection?.invert?.(point);\n }\n\n scale(): number;\n scale(scale: number): void;\n scale(scale?: number): number | void {\n if (this.projection?.scale) {\n if (scale !== undefined) {\n this.projection.scale(scale);\n } else {\n return this.projection.scale() as number;\n }\n }\n }\n\n translate(): [number, number];\n translate(point: [number, number]): void;\n translate(point?: [number, number] | void) {\n if (this.projection?.scale) {\n if (point !== undefined) {\n this.projection.translate(point);\n } else {\n return this.projection.translate();\n }\n }\n }\n\n evaluate(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const tmp = this.projection.copy();\n return tmp?.fitExtent([start, size], {\n type: 'FeatureCollection',\n features\n });\n }\n}\n","import type { IZoomTrigger } from './interface';\n\nexport class DeskTopTrigger implements IZoomTrigger {\n pointerId: number;\n\n parserScrollEvent(e: any) {\n if (!e) {\n return e;\n }\n\n // 经过测试ctrlKey这个字段只有在双指方向不一致时,才会为true,根据这个判断是否触发scroll事件\n if (!e.ctrlKey && (e.deltaY !== 0 || e.deltaX !== 0)) {\n e.scrollX = e.deltaX;\n e.scrollY = e.deltaY;\n return e;\n }\n\n return false;\n }\n\n parserZoomEvent(e: any) {\n if (!e) {\n return e;\n }\n // @see https://vega.github.io/vega/examples/zoomable-world-map/\n const zoom = Math.pow(1.0005, -e.deltaY * Math.pow(16, e.deltaMode));\n e.zoomDelta = zoom;\n e.zoomX = e.canvasX;\n e.zoomY = e.canvasY;\n return e;\n }\n clearZoom(): void {\n // do nothing\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n parserDragEvent(): boolean {\n return true;\n }\n}\n","import type { IZoomTrigger } from './interface';\nexport class MobileTrigger implements IZoomTrigger {\n private _lastScale = 0;\n pointerId: number;\n\n clearZoom(): void {\n this._lastScale = 0;\n this.pointerId = null;\n }\n\n parserDragEvent(event: any): boolean {\n // 下面的代码逻辑本意是:单指(pointerId===0) -> 多指(pointerId === 1) 切换后, 终止touch事件\n // 问题:ios系统/部分MIUI系统,单指/多指滑动过程中, pointerId每次都不一样,所以无法做到上述识别\n // 解决方法: 暂时不做流程判断, 如果后续有需求, 单指 -> 多指可以考虑用event.isPrimary判断\n // if (this.pointerId) {\n // return this.pointerId === event.pointerId;\n // }\n // this.pointerId = event.pointerId;\n return true;\n }\n\n parserZoomEvent(event: any) {\n const scale = event.scale;\n if (this._lastScale === 0) {\n this._lastScale = scale;\n return event;\n }\n event.zoomDelta = scale / this._lastScale;\n\n const center = event.center;\n event.zoomX = center.x;\n event.zoomY = center.y;\n this._lastScale = scale;\n\n return event;\n }\n\n parserScrollEvent(event: any) {\n // todo\n return event;\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n}\n","import type { RenderMode } from '../../../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../../../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../../util/env';\nimport { DeskTopTrigger } from './desktop';\nimport { MobileTrigger } from './mobile';\n\nexport function getDefaultTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: ['pointerup', 'pointerupoutside'],\n zoom: 'wheel',\n zoomEnd: 'pointerup',\n scroll: 'wheel',\n // scrollEnd: 'pointerup',\n trigger: DeskTopTrigger\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: ['pointerup', 'pointerupoutside'],\n zoom: 'pinch',\n zoomEnd: 'pinchend',\n scroll: 'pan',\n scrollEnd: 'panend',\n trigger: MobileTrigger\n };\n }\n\n return null;\n}\n","import type { IModelOption } from './../../model/interface';\n/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, pointInRect, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventQuery, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport type { IDelayType } from '../../typings/event';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\nimport type { Gesture } from '@visactor/vrender-kits';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n}\n\nexport type ZoomEventParams = { zoomDelta: number; zoomX: number; zoomY: number };\n\nexport type ZoomCallback = (params: ZoomEventParams, e: BaseEventParams['event']) => Record | void;\n\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (s: ISeries, callback?: ZoomCallback) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _option: IModelOption;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n private _gestureController!: Gesture | null;\n\n private _isGestureListener: boolean = false;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n this._gestureController = (this._option.getChart().getVGrammarView().renderer as any)._gestureController;\n this._isGestureListener = isMobileLikeMode(this._renderMode) || isMiniAppLikeMode(this._renderMode);\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getZoomTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getZoomTriggerEvent(type: string): EventType | EventType[] {\n return getDefaultTriggerEventByMode(this._renderMode)[type];\n }\n\n private _zoomEventDispatch(params: BaseEventParams, regionOrSeries: IRegion | ISeries, callback?: ZoomCallback) {\n if (!this._isGestureListener && !params.event) {\n return;\n }\n const event = this._isGestureListener ? params : params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY, path } = event as any;\n\n // 不响应由组件触发的 zoom 事件(例如滚动分页的离散图例)\n if (!path.some((node: any) => node.name && node.name.includes('region'))) {\n return;\n }\n\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !pointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return;\n }\n let extendParams: ReturnType = {};\n if (callback) {\n extendParams = callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n ...extendParams,\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _getRegionOrSeriesLayout(rs: IRegion | ISeries) {\n if (rs.type !== 'region') {\n rs = (rs).getRegion();\n }\n const { x, y, width, height } = rs.layout.getLayout();\n return {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n };\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const zoomParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoom')]\n : [this._getZoomTriggerEvent('zoom'), { level: Event_Bubble_Level.chart, consume: true }];\n const zoomEndParams: [string] | [string, EventQuery] = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoomEnd') as string]\n : [this._getZoomTriggerEvent('zoomEnd') as string, { level: Event_Bubble_Level.chart, consume: false }];\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...zoomEndParams,\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n (event as any).on(\n ...zoomParams,\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(s: ISeries, callback?: ZoomCallback, option?: ITriggerOption) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any\n ) {\n let stopBubble: boolean | undefined = false;\n if (!this._isGestureListener && (!params.event || this._option.disableTriggerEvent)) {\n return stopBubble;\n }\n const event = this._isGestureListener ? params : params.event;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY, canvasX, canvasY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return stopBubble;\n }\n if (\n !pointInRect(\n {\n x: canvasX,\n y: canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return stopBubble;\n }\n\n if (callback) {\n stopBubble = callback({ scrollX, scrollY }, event as any);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n\n return stopBubble;\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const scrollParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scroll')]\n : [this._getZoomTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }];\n const scrollEndParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scrollEnd')]\n : [this._getZoomTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...scrollEndParams,\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n (event as any).on(\n ...scrollParams,\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n return this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getZoomTriggerEvent('start') as string, { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = pointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n this._clickEnable = false;\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n const mouseup = delayMap[delayType]((params: BaseEventParams) => {\n this._clickEnable = true;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._zoomableTrigger.pointerId = null;\n this._eventObj.off(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n end.forEach(endEventType => {\n this._eventObj.off(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mouseup as any\n );\n this._eventObj.allow(endEventType);\n });\n }, delayTime);\n\n const mousemove = delayMap[delayType]((params: BaseEventParams) => {\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n this._clickEnable = false;\n end.forEach(endEventType => this._eventObj.prevent(endEventType, mouseup as any));\n\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n end.forEach(endEventType => {\n this._eventObj.on(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mouseup as any\n );\n });\n }\n}\n","import { LayoutZIndex } from './../../constant/layout';\n/* eslint-disable no-duplicate-imports */\nimport type { IPoint } from '../../typings/coordinate';\nimport { Projection } from './projection';\nimport type { IEffect, IModelLayoutOption, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IGeoRegionSpec, IRegion, RegionSpec } from '../../region/interface';\nimport { eachSeries } from '../../util/model';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IGeoCoordinate, IGeoCoordinateHelper, IGeoCoordinateSpec, IProjectionSpec } from './interface';\nimport type { BaseEventParams, ExtendEventParam, PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { StringOrNumber } from '../../typings';\nimport type { IZoomable, ZoomEventParams } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport { isValid, mixin, isNil, Matrix, isEqual } from '@visactor/vutils';\nimport type { Maybe } from '@visactor/vutils';\nimport { DEFAULT_MAP_LOOK_UP_KEY } from '../../data/transforms/map';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { MapSeries } from '../../series';\n\nexport function projectionName(key: string, id: number) {\n return `${PREFIX}_${id}_${key}`;\n}\nexport class GeoCoordinate extends BaseComponent implements IGeoCoordinate {\n static type = ComponentTypeEnum.geoCoordinate;\n type = ComponentTypeEnum.geoCoordinate;\n name: string = ComponentTypeEnum.geoCoordinate;\n\n layoutType: 'none' = 'none';\n protected layoutZIndex: number = LayoutZIndex.Mark;\n\n _longitudeField?: string;\n get longitudeField() {\n return this._longitudeField;\n }\n\n _latitudeField?: string;\n get latitudeField() {\n return this._latitudeField;\n }\n\n protected _projectionSpec: IProjectionSpec = {\n name: projectionName(this.type, this.id),\n type: 'mercator'\n };\n get projectionSpec() {\n return this._projectionSpec;\n }\n setProjection(projectionSpec: IGeoCoordinateSpec['projection']) {\n this._projectionSpec = {\n ...projectionSpec,\n name: this._projectionSpec.name\n };\n }\n\n protected _projection!: Projection;\n\n protected _centerCache: Map;\n\n private _actualScale = 1;\n\n getZoom() {\n return this._actualScale;\n }\n\n private _initialScale = 1;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (isNil(chartSpec)) {\n return null;\n }\n const specInfos: IModelSpecInfo[] = [];\n chartSpec.region.forEach((r: RegionSpec, i: number) => {\n if (r.coordinate === 'geo') {\n // 去除 padding 配置,避免重复计算\n const spec = { ...r, padding: 0 };\n specInfos.push({\n spec,\n regionIndex: i,\n type: ComponentTypeEnum.geoCoordinate,\n specInfoPath: ['component', 'geoCoordinate', i]\n } as any);\n }\n });\n return specInfos;\n }\n\n effect: IEffect = {\n scaleUpdate: () => {\n this.coordinateHelper();\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n this._projectionSpec = mergeSpec(this._projectionSpec, this._spec.projection);\n if (this._projectionSpec.zoom > this._spec.zoomLimit?.max) {\n this._projectionSpec.zoom = this._spec.zoomLimit.max;\n }\n if (this._projectionSpec.zoom < this._spec.zoomLimit?.min) {\n this._projectionSpec.zoom = this._spec.zoomLimit.min;\n }\n\n this._actualScale = this._projectionSpec.zoom ?? 1;\n this._initialScale = this._actualScale;\n this._longitudeField = this._spec.longitudeField;\n this._latitudeField = this._spec.latitudeField;\n }\n\n // life cycle\n created() {\n super.created();\n this._regions = this._option.getRegionsInIndex([(this._option as any).regionIndex]);\n this.initProjection();\n this.coordinateHelper();\n this.initEvent();\n this._initCenterCache();\n // FIXME: 这里是在开启缩放时,处理关联的symbol等mark,在地图缩放时应该同步缩放\n // this.rescaleMark();\n }\n\n private _handleChartZoom = (params: ZoomEventParams, event?: BaseEventParams['event']) => {\n let scale = params.zoomDelta;\n // check if the next scale will outrange\n const _lastActualScale = this._actualScale;\n this._actualScale *= scale;\n if (this._actualScale < this._spec.zoomLimit?.min) {\n this._actualScale = this._spec.zoomLimit?.min;\n scale = this._spec.zoomLimit?.min / _lastActualScale;\n } else if (this._actualScale > this._spec.zoomLimit?.max) {\n this._actualScale = this._spec.zoomLimit?.max;\n scale = this._spec.zoomLimit?.max / _lastActualScale;\n }\n this.zoom(scale, [params.zoomX, params.zoomY]);\n return { scale, totalScale: this._actualScale };\n };\n\n dispatchZoom(zoomDelta: number, center?: { x: number; y: number }) {\n const scaleCenter = center || {\n x: this.getLayoutStartPoint().x + this.getLayoutRect().width / 2,\n y: this.getLayoutStartPoint().y + this.getLayoutRect().height / 2\n };\n const { scale, totalScale } = this._handleChartZoom({ zoomDelta, zoomX: scaleCenter.x, zoomY: scaleCenter.y });\n if (scale !== 1) {\n this.event.emit('zoom', {\n scale,\n scaleCenter,\n totalScale,\n model: this\n } as unknown as ExtendEventParam);\n }\n }\n\n initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n\n const { roam } = this._spec;\n if (roam) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom);\n (this as unknown as IZoomable).initDragEventOfRegions(\n this._regions,\n (roam as any).blank ? null : () => true,\n this.pan\n );\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n s.event.on('zoom', e => {\n s.handleZoom(e as ZoomEventParam);\n return true;\n });\n\n s.event.on('panmove', e => {\n s.handlePan(e as PanEventParam);\n return true;\n });\n });\n });\n }\n }\n\n initProjection() {\n this._projection = new Projection(this._projectionSpec);\n if (this._projection.projection === null) {\n this._option?.onError('unsupported projection type!');\n return;\n }\n }\n\n coordinateHelper() {\n const helper: IGeoCoordinateHelper = {\n longitudeField: this._longitudeField,\n latitudeField: this._latitudeField,\n dataToPosition: this.dataToPosition.bind(this),\n dataToLongitude: this.dataToLongitude.bind(this),\n dataToLatitude: this.dataToLatitude.bind(this),\n shape: this.shape.bind(this),\n getCoordinateId: () => this.id\n };\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as IGeoSeries).setCoordinateHelper(helper);\n } else {\n // 散点地图\n (s as ICartesianSeries).setXAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n getFields: () => [this._longitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n (s as unknown as ICartesianSeries).setYAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n getFields: () => [this._latitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n }\n });\n });\n }\n\n onLayoutEnd(ctx: IModelLayoutOption) {\n this.setLayoutRect(this._regions[0].getLayoutRect());\n this.setLayoutStartPosition(this._regions[0].getLayoutStartPoint());\n const { width, height } = this.getLayoutRect();\n const { translate, scale, center } = this.evaluateProjection([0, 0], [width, height]);\n translate && this._projection.translate(translate);\n scale && this._projection.scale(scale);\n center && this._projection.center(center);\n eachSeries(this._regions, s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as MapSeries).areaPath?.clear();\n const pathGroup = s.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n }\n }\n });\n this._actualScale = this._initialScale;\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption) {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n // util\n protected collectFeatures() {\n const features: any[] = [];\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n features.push(...((s as unknown as IGeoSeries).getMapViewData()?.latestData ?? []));\n }\n });\n });\n return features;\n }\n\n // API\n dataToPosition(values: number[] = []): IPoint {\n const point = this._projection?.project([values[0], values[1]]);\n return {\n x: point?.[0],\n y: point?.[1]\n };\n }\n\n dataToLatitude(lat: number): number {\n const point = this._projection?.project([0, lat]);\n return point?.[1];\n }\n\n dataToLongitude(lon: number): number {\n const point = this._projection?.project([lon, 0]);\n return point?.[0];\n }\n\n // interaction\n zoom(p: number, anchor: [number, number] = [0, 0]) {\n let s = this._projection?.scale() ?? 0;\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n s = s * p;\n t_x -= (anchor[0] - t_x) * (p - 1);\n t_y -= (anchor[1] - t_y) * (p - 1);\n\n this._projection?.scale(s);\n this._projection?.translate([t_x, t_y]);\n }\n\n pan = (delta: [number, number] = [0, 0]) => {\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n t_x += delta[0];\n t_y += delta[1];\n this._projection?.translate([t_x, t_y]);\n };\n\n shape(datum?: any) {\n return this._projection.shape(datum);\n }\n\n /**\n * 根据像素坐标获取经纬度位置\n */\n invert(point: [number, number]) {\n return this._projection.invert(point);\n }\n\n private evaluateProjection(start: [number, number], size: [number, number]) {\n const evaluated = this._projection.evaluate(start, size, this.collectFeatures());\n let translate = evaluated.translate();\n const scale = evaluated.scale() * this._initialScale;\n const center = this._projectionSpec.center ?? evaluated.invert([size[0] / 2, size[1] / 2]);\n center && (translate = [size[0] / 2, size[1] / 2]);\n return { translate, scale, center };\n }\n\n protected _initCenterCache() {\n if (!this._centerCache) {\n this._centerCache = new Map();\n }\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === 'map') {\n const mapData = (s as IGeoSeries).getMapViewData()?.latestData ?? [];\n mapData.forEach((feature: any = {}) => {\n const key = feature[s.getDimensionField()[0]] || feature[DEFAULT_MAP_LOOK_UP_KEY];\n const center = (s as IGeoSeries).getDatumCenter(feature);\n if (key && isValid(center)) {\n this._centerCache.set(key, { x: center[0], y: center[1] });\n }\n });\n }\n });\n });\n }\n\n _compareSpec(spec: IGeoRegionSpec, prevSpec: IGeoRegionSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['roam', 'longitudeField', 'latitudeField', 'projection', 'zoomLimit'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n\n return result;\n }\n\n release(): void {\n super.release();\n this._centerCache && this._centerCache.clear();\n this._centerCache = null;\n }\n}\n\nmixin(GeoCoordinate, Zoomable);\n\nexport const registerGeoCoordinate = () => {\n Factory.registerComponent(GeoCoordinate.type, GeoCoordinate);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IMapSeriesSpec, IMapSeriesTheme } from './interface';\n\nexport class MapSeriesSpecTransformer<\n T extends IMapSeriesSpec = IMapSeriesSpec,\n K extends IMapSeriesTheme = IMapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.area, undefined, undefined, false); // 地图交互通过 vrender api,自身不支持动画,所以 label 也不支持动画\n }\n}\n","import { Matrix, isValid, isValidNumber } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport type { FeatureData } from '@visactor/vgrammar-core';\nimport { registerProjection } from '@visactor/vgrammar-projection';\nimport { DataView } from '@visactor/vdataset';\nimport { geoSourceMap, registerMapSource, unregisterMapSource } from './geo-source';\nimport { lookup } from '../../data/transforms/lookup';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { GeoSeries } from '../geo/geo';\nimport { DEFAULT_MAP_LOOK_UP_KEY, map } from '../../data/transforms/map';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { MapSeriesTooltipHelper } from './tooltip-helper';\nimport { DEFAULT_DATA_SERIES_FIELD, DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IMapSeriesSpec } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { registerPathMark } from '../../mark/path';\nimport { mapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerGeoCoordinate } from '../../component/geo';\nimport type { ILabelMark, IMark, IPathMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport { MapSeriesSpecTransformer } from './map-transformer';\n\nexport class MapSeries extends GeoSeries {\n static readonly type: string = SeriesTypeEnum.map;\n type = SeriesTypeEnum.map;\n\n static readonly mark: SeriesMarkMap = mapSeriesMark;\n static readonly transformerConstructor = MapSeriesSpecTransformer as any;\n readonly transformerConstructor = MapSeriesSpecTransformer;\n\n map!: string;\n\n protected _nameMap!: { [key: StringOrNumber]: StringOrNumber };\n getNameMap() {\n return this._nameMap;\n }\n\n private _areaCache: Map = new Map();\n get areaPath() {\n return this._areaCache;\n }\n\n private _pathMark: IPathMark;\n private _labelMark: ILabelMark;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.map = this._spec.map;\n this._nameMap = this._spec.nameMap;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n this._spec.nameProperty && (this._nameProperty = this._spec.nameProperty);\n this._spec.centroidProperty && (this._centroidProperty = this._spec.centroidProperty);\n\n if (!this.map) {\n this._option?.onError(`map type '${this.map}' is not specified !`);\n }\n\n if (!geoSourceMap.get(this.map)) {\n this._option?.onError(`'${this.map}' data is not registered !`);\n }\n }\n\n // data\n initData(): void {\n super.initData();\n\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceTransform(this._dataSet, 'map', map);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n\n // 初始化地图数据\n const features = geoSourceMap.get(this.map);\n if (!features) {\n this._option?.onError('no valid map data found!');\n }\n const mapData = new DataView(this._dataSet, { name: `map_${this.id}_data` });\n\n mapData\n .parse([features], {\n type: 'dataview'\n })\n .transform({ type: 'copyDataView', options: { deep: true }, level: TransformLevel.copyDataView })\n .transform({\n type: 'map',\n options: {\n nameMap: this._nameMap,\n nameProperty: this._nameProperty\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this._data?.getLatestData(),\n key: DEFAULT_MAP_LOOK_UP_KEY,\n fields: this._nameField,\n set: (feature: FeatureData, datum: Datum) => {\n if (datum) {\n Object.keys(datum).forEach(key => {\n if (!(key in feature)) {\n feature[key] = datum[key];\n }\n });\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', mapData.reRunAllTransform);\n this._mapViewData = new SeriesData(this._option, mapData);\n }\n\n compileData() {\n super.compileData();\n this._mapViewData?.compile();\n }\n\n // mark\n initMark() {\n this._pathMark = this._createMark(\n MapSeries.mark.area,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId()\n },\n {\n morph: shouldMarkDoMorph(this._spec, MapSeries.mark.area.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IPathMark;\n }\n\n initMarkStyle() {\n const pathMark = this._pathMark;\n if (pathMark) {\n this.setMarkStyle(\n pathMark,\n {\n fill: (datum: any) => {\n if (isValid(datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD])) {\n return (this._option.globalScale.getScale('color') ?? this._getDefaultColorScale()).scale(\n datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD]\n );\n }\n return this._spec?.defaultFillColor;\n },\n path: this.getPath.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n\n pathMark.setPostProcess('fill', result => {\n if (!isValid(result)) {\n return this._spec.defaultFillColor;\n }\n return result;\n });\n\n this.setMarkStyle(\n pathMark,\n {\n smoothScale: true\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n const text = this.getDatumName(datum);\n return text;\n },\n x: (datum: Datum) => this.dataToPosition(datum)?.x,\n y: (datum: Datum) => this.dataToPosition(datum)?.y\n });\n }\n\n initAnimation() {\n this._pathMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new MapSeriesTooltipHelper(this);\n this._pathMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pathMark);\n }\n\n protected getPath(datum: any) {\n const area = this._areaCache.get(datum[DEFAULT_DATA_INDEX]);\n if (area) {\n return area.shape;\n }\n const shape = this._coordinateHelper?.shape(datum);\n this._areaCache.set(datum[DEFAULT_DATA_INDEX], {\n shape\n });\n return shape;\n }\n\n // life cycle\n onEvaluateEnd() {\n this._mapViewData.updateData();\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n release() {\n super.release();\n this._areaCache.clear();\n this._nameMap = {};\n this._mapViewData = null as any;\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.scale(scale, scale, scaleCenter);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.translate(delta[0], delta[1]);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n getDatumCenter(datum: any): [number, number] {\n if (this._centroidProperty && datum.properties?.[this._centroidProperty]) {\n return datum.properties?.[this._centroidProperty];\n }\n\n if (isValidNumber(datum.centroidX * datum.centroidY)) {\n return [datum.centroidX, datum.centroidY];\n }\n\n if (datum.properties?.center) {\n return datum.properties.center;\n }\n\n if (datum.properties?.centroid) {\n return datum.properties.centroid;\n }\n\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: any): string {\n if (datum[this.nameField]) {\n return datum[this.nameField];\n }\n const name = datum.properties?.[this._nameProperty];\n if (name) {\n if (this._spec.nameMap) {\n if (this._spec.nameMap[name]) {\n return this._spec.nameMap[name];\n }\n }\n // TODO:\n // 1. showDefaultName 是一个考虑配置兼容的产物,不然会有 break-change\n // 2. 后续大版本升级,这里无需判断条件,直接返回 name 是更合理的\n if (this._spec.showDefaultName || !this._spec.nameMap) {\n return name;\n }\n }\n return '';\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._mapViewData?.getDataView()?.reRunAllTransform();\n this._mapViewData?.updateData();\n }\n\n protected _getDataIdKey() {\n return DEFAULT_DATA_INDEX;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pathMark];\n }\n}\n\nexport const registerMapSeries = () => {\n // 注册语法元素\n registerProjection();\n registerGeoCoordinate();\n registerPathMark();\n Factory.registerSeries(MapSeries.type, MapSeries);\n Factory.registerImplement('registerMap', registerMapSource);\n Factory.registerImplement('unregisterMap', unregisterMapSource);\n registerFadeInOutAnimation();\n};\n","import type { IMapSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport type { RegionSpec, ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IMapChartSpec } from './interface';\n\nexport class MapChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string) {\n return type === SeriesTypeEnum.map;\n }\n\n protected _getDefaultSeriesSpec(spec: IMapChartSpec): IMapSeriesSpec {\n return super._getDefaultSeriesSpec(spec, [\n 'type',\n 'nameField',\n 'valueField',\n 'map',\n 'nameProperty',\n 'centroidProperty',\n 'nameMap',\n 'area',\n 'defaultFillColor',\n 'showDefaultName'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n spec.region.forEach((r: RegionSpec) => {\n r.coordinate = 'geo';\n });\n\n super.transformSeriesSpec(spec);\n }\n}\n","import { registerMapSeries } from '../../series/map/map';\nimport { BaseChart } from '../base/base-chart';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IMapChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { MapChartSpecTransformer } from './map-transformer';\n\nexport class MapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.map;\n static readonly seriesType: string = SeriesTypeEnum.map;\n static readonly transformerConstructor = MapChartSpecTransformer;\n readonly transformerConstructor = MapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.map;\n readonly seriesType: string = SeriesTypeEnum.map;\n}\n\nexport const registerMapChart = () => {\n registerMapSeries();\n Factory.registerChart(MapChart.type, MapChart);\n};\n","import { get, pick, cloneDeep, isArray } from '@visactor/vutils';\n\nexport { get, pick, cloneDeep };\n\nexport function field(f: string | string[]) {\n return function (datum: any) {\n let value: any;\n if (!isArray(f)) {\n value = datum?.[f];\n } else {\n value = f.reduce((cur, g) => cur?.[g], datum);\n }\n return value;\n };\n}\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IPoint, IPolarPoint } from '../../typings/coordinate';\nimport type { IPolarSeries } from '../interface';\nimport { array, isValid, isNil } from '@visactor/vutils';\nimport type { IPolarAxisHelper } from '../../component/axis/polar/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant/polar';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPolarSeriesSpec } from './interface';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { sortDataInAxisHelper } from '../util/utils';\nimport { ChartEvent } from '../../constant/event';\nimport type { StatisticOperations } from '../../data/transforms/interface';\n\nexport abstract class PolarSeries\n extends BaseSeries\n implements IPolarSeries\n{\n readonly coordinate: 'polar' = 'polar';\n\n protected _outerRadius: number = POLAR_DEFAULT_RADIUS;\n public get outerRadius() {\n return this._outerRadius;\n }\n\n protected _innerRadius: number = 0;\n public get innerRadius() {\n return this._innerRadius;\n }\n\n protected _angleField: string[] = [];\n getAngleField() {\n return this._angleField;\n }\n setAngleField(f: string | string[]): string[] {\n this._angleField = isValid(f) ? array(f) : [];\n return this._angleField;\n }\n\n protected _radiusField: string[] = [];\n getRadiusField() {\n return this._radiusField;\n }\n setRadiusField(f: string | string[]): string[] {\n this._radiusField = isValid(f) ? array(f) : [];\n return this._radiusField;\n }\n\n protected _specAngleField: string[];\n protected _specRadiusField: string[];\n\n protected _innerRadiusField!: string[];\n public get innerRadiusField() {\n return this._innerRadiusField;\n }\n setInnerRadiusField(f: string | string[]): string[] {\n this._innerRadiusField = array(f);\n return this._innerRadiusField;\n }\n\n protected _radiusScale!: IBaseScale;\n public get radiusScale() {\n return this._radiusScale;\n }\n setRadiusScale(s: IBaseScale) {\n this._radiusScale = s;\n return s;\n }\n\n protected _angleScale!: IBaseScale;\n public get angleScale() {\n return this._angleScale;\n }\n setAngleScale(s: IBaseScale) {\n this._angleScale = s;\n return s;\n }\n\n private _angleAxisHelper!: IPolarAxisHelper;\n public get angleAxisHelper() {\n return this._angleAxisHelper;\n }\n\n public set angleAxisHelper(h: IPolarAxisHelper) {\n this._angleAxisHelper = h;\n this.onAngleAxisHelperUpdate();\n }\n\n private _radiusAxisHelper!: IPolarAxisHelper;\n public get radiusAxisHelper() {\n return this._radiusAxisHelper;\n }\n public set radiusAxisHelper(h: IPolarAxisHelper) {\n this._radiusAxisHelper = h;\n this.onRadiusAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getCenter = () => this.angleAxisHelper.center();\n this._markAttributeContext.getLayoutRadius = () => this._computeLayoutRadius();\n }\n\n valueToPosition(angleValue: StringOrNumber | StringOrNumber[], radiusValue: StringOrNumber | StringOrNumber[]) {\n if (isNil(angleValue) || isNil(radiusValue) || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return { x: Number.NaN, y: Number.NaN };\n }\n const radius = this.radiusAxisHelper.dataToPosition(array(radiusValue));\n if (radius < 0) {\n // 'link' 实现还有问题\n if (this._invalidType === 'break' || this._invalidType === 'link') {\n return { x: Number.NaN, y: Number.NaN };\n } else if (this._invalidType === 'zero') {\n return this.angleAxisHelper.center();\n }\n }\n const angle = this.angleAxisHelper.dataToPosition(array(angleValue));\n\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.angleAxisHelper.coordToPoint({ angle, radius });\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getDatumPositionValues(datum, this._radiusField)\n );\n }\n\n dataToPositionX(datum: Datum): number {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: Datum): number {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: Datum): number {\n return 0;\n }\n\n // todo: 待实现\n positionToData(p: IPolarPoint): any {\n /* do nothing */\n }\n radiusToData(r: number): any {\n /* do nothing */\n }\n angleToData(a: number): any {\n /* do nothing */\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: StatisticOperations }[] = [];\n if (this.radiusAxisHelper?.getScale) {\n this._radiusField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.radiusAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this.angleAxisHelper?.getScale) {\n this._angleField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.angleAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n return fields;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n if (isValid(this._spec.outerRadius)) {\n this._outerRadius = this._spec.outerRadius;\n }\n if (isValid(this._spec.radius)) {\n // 优先使用outerRadius, 但要兼容spec.radius\n this._outerRadius = this._spec.radius;\n }\n if (isValid(this._spec.innerRadius)) {\n this._innerRadius = this._spec.innerRadius;\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n onRadiusAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n onAngleAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n protected _computeLayoutRadius() {\n const axisHelper = this._angleAxisHelper || this._radiusAxisHelper;\n\n if (axisHelper) {\n return axisHelper.layoutRadius();\n }\n\n const { width, height } = this._region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n protected initEvent() {\n super.initEvent();\n // 通过轴事件来进行排序。轴的domain数据变化在系列的统计数据完成后\n if (this.sortDataByAxis) {\n this.event.on(\n ChartEvent.scaleDomainUpdate,\n {\n filter: param => param.model.id === this._angleAxisHelper?.getAxisId()\n },\n () => {\n // 只能排序,不能修改数据,此时已经在数据流的统计流程之后\n this._sortDataInAxisDomain();\n }\n );\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(this.angleAxisHelper, this._angleField[0], this.getViewData().latestData);\n }\n }\n\n protected getInvalidCheckFields() {\n const fields: string[] = [];\n\n if (this.angleAxisHelper.isContinuous) {\n this._angleField.forEach(f => {\n fields.push(f);\n });\n }\n\n if (this.radiusAxisHelper.isContinuous) {\n this._radiusField.forEach(f => {\n fields.push(f);\n });\n }\n return fields;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\nimport { getPercentValue } from '../../util/math';\nimport { ARC_TRANSFORM_VALUE } from '../../constant/polar';\nimport { computeQuadrant, isNil } from '@visactor/vutils';\n\nexport interface IPieOpt {\n angleField: () => string;\n startAngle: () => number;\n endAngle: () => number;\n minAngle: () => number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n showAllZero: boolean;\n supportNegative: boolean;\n showEmptyCircle: boolean;\n}\n\nfunction transformInvalidValue(value: any) {\n if (!couldBeValidNumber(value)) {\n return 0;\n }\n return Number.parseFloat(value);\n}\n\nexport const pie = (originData: Array, op: IPieOpt) => {\n const {\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK,\n showAllZero,\n supportNegative,\n showEmptyCircle\n } = op;\n\n const angleField = op.angleField();\n const startAngle = op.startAngle();\n const endAngle = op.endAngle();\n const minAngle = op.minAngle();\n\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n\n if (!showAllZero && showEmptyCircle && isDataEmpty(data, angleField, supportNegative)) {\n return data;\n }\n\n const appendArcInfo = (data: Datum, startAngle: number, angle: number) => {\n data[asStartAngle] = startAngle;\n data[asEndAngle] = startAngle + angle;\n data[asMiddleAngle] = startAngle + angle / 2;\n data[asRadian] = angle;\n data[asQuadrant] = computeQuadrant(startAngle + angle / 2);\n };\n\n let total = 0;\n let max = -Infinity;\n let isAllZero = true;\n for (let index = 0; index < data.length; index++) {\n const angleFieldValue = supportNegative\n ? Math.abs(transformInvalidValue(data[index][angleField]))\n : transformInvalidValue(data[index][angleField]);\n total += angleFieldValue;\n max = Math.max(angleFieldValue, max);\n if (isAllZero && angleFieldValue !== 0) {\n isAllZero = false;\n }\n\n data[index][ARC_TRANSFORM_VALUE] = angleFieldValue;\n }\n\n const valueList = data.map(d => Number(d[angleField]));\n const angleRange = endAngle - startAngle;\n let lastAngle = startAngle;\n let restAngle = angleRange;\n let largeThanMinAngleTotal = 0;\n const percents = getPercentValue(valueList);\n\n data.forEach((d, i) => {\n const angleFieldValue = d[ARC_TRANSFORM_VALUE];\n const ratio = total ? angleFieldValue / total : 0;\n let radian = ratio * angleRange;\n\n if (radian < minAngle) {\n radian = minAngle;\n restAngle -= minAngle;\n } else {\n largeThanMinAngleTotal += angleFieldValue;\n }\n\n const dStartAngle = lastAngle;\n const dEndAngle = lastAngle + radian;\n\n d[asRatio] = ratio;\n d[asK] = max ? angleFieldValue / max : 0;\n d._percent_ = (percents as number[])[i];\n appendArcInfo(d, dStartAngle, radian);\n\n lastAngle = dEndAngle;\n });\n\n if (restAngle < angleRange) {\n if (restAngle <= 1e-3) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n } else {\n const unitRadian = restAngle / largeThanMinAngleTotal;\n lastAngle = startAngle;\n data.forEach(d => {\n const angle = d[asRadian] === minAngle ? minAngle : d[ARC_TRANSFORM_VALUE] * unitRadian;\n appendArcInfo(d, lastAngle, angle);\n\n lastAngle += angle;\n });\n }\n }\n\n if (total !== 0) {\n // 数据都为 0 时,起始角和结束角相同,不应该强制赋值\n // 防止一个扇区的角度会因为浮点数精度问题和传入的 endAngle 不相等\n data[data.length - 1][asEndAngle] = endAngle;\n }\n\n if (isAllZero && showAllZero) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n }\n return data;\n};\n\nexport const isDataEmpty = (data: Datum[], angleField: string, supportNegative: boolean) => {\n if (isNil(data)) {\n return true;\n }\n if (data.length === 0) {\n return true;\n }\n if (data.every(datum => transformInvalidValue(datum[angleField]) === 0)) {\n return true;\n }\n // 未支持负数, 并且和为0, 则也认为是空数据\n if (!supportNegative && data.reduce((sum, datum) => sum + transformInvalidValue(datum[angleField]), 0) === 0) {\n return true;\n }\n\n return false;\n};\n","import type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { AnimationStateEnum } from '../../../animation/interface';\nimport type { Datum } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport type { IPieAnimationParams, PieAppearPreset } from '../interface';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nexport function pieGrowOption(pieParams: IPieAnimationParams, isOverall: boolean, state: AnimationStateEnum) {\n return (datum: Datum, element: IElement, params: AnimationStateEnum) => {\n if (isOverall) {\n if (pieParams.growField === 'radius') {\n return {\n overall: 0\n };\n }\n return {\n overall: pieParams.growFrom(datum, element, state)\n };\n }\n return {\n overall: false\n };\n };\n}\n\nexport const Appear_Grow = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n options: pieGrowOption(params, true, AnimationStateEnum.appear)\n };\n};\n\nexport const Appear_FadeIn = {\n type: 'fadeIn'\n};\n\nexport const pieEnter = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.enter)\n };\n};\n\nexport const pieExit = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport const pieDisappear = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport function piePresetAnimation(params: IPieAnimationParams, preset: PieAppearPreset | boolean) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growRadius':\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n }\n}\n\nexport const registerPieAnimation = () => {\n Factory.registerAnimation('pie', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n\nexport const registerEmptyCircleAnimation = () => {\n Factory.registerAnimation('emptyCircle', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset)\n };\n });\n};\n\nexport const registerPie3dAnimation = () => {\n Factory.registerAnimation('pie3d', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n","import type { IAnimationTimeline, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { ARC_MIDDLE_ANGLE } from '../../../constant/polar';\nimport type { Datum } from '../../../typings';\nimport { isValidNumber, polarToCartesian } from '@visactor/vutils';\nimport type { IArcMark } from '../../../mark/interface';\n\nexport function centerOffsetConfig(mark: IArcMark, originalConfig: IAnimationTypeConfig): IAnimationTimeline {\n const offset = originalConfig.options?.distance ?? 10;\n const duration = isValidNumber(originalConfig.duration) ? originalConfig.duration / 2 : 1000;\n const easing = originalConfig.options.easing ?? 'cubicOut';\n return {\n oneByOne: originalConfig.oneByOne,\n loop: originalConfig.loop ?? false,\n timeSlices: [\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n from: (datum: Datum) => mark.getAttribute('x', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.x;\n }\n },\n y: {\n from: (datum: Datum) => mark.getAttribute('y', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.y;\n }\n }\n }\n }\n },\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n to: (datum: Datum) => mark.getAttribute('x', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.x;\n }\n },\n y: {\n to: (datum: Datum) => mark.getAttribute('y', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.y;\n }\n }\n }\n }\n }\n ]\n };\n}\n","import { Factory } from './../core/factory';\nimport { ARC_MIDDLE_ANGLE } from '../constant/polar';\nimport type { IArcMarkSpec, Datum, StateValueType } from '../typings';\nimport type { ExChannelCall } from './base/base-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseMark } from './base/base-mark';\nimport type { IArcMark, IMarkOption, IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArcGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class BaseArcMark extends BaseMark implements IMarkRaw {\n readonly type: MarkTypeEnum = ArcMark.type;\n\n _unCompileChannel = { centerOffset: true, radiusOffset: true };\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n\n // because of set object.function, this setting should be write after object init\n this._computeExChannel.x = this.computeCenter as ExChannelCall;\n this._computeExChannel.y = this.computeCenter as ExChannelCall;\n this._computeExChannel.outerRadius = this.computeOuterRadius as ExChannelCall;\n\n this._extensionChannel.centerOffset = ['x', 'y'];\n this._extensionChannel.radiusOffset = ['outerRadius'];\n }\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n startAngle: 0,\n endAngle: 0,\n outerRadius: 0,\n innerRadius: 0,\n cornerRadius: 0,\n lineWidth: 0,\n innerPadding: 0,\n outerPadding: 0\n };\n return defaultStyle;\n }\n\n protected computeOuterRadius = (\n key: string,\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n superValue: number\n ): number => {\n const offset = (this.getAttribute('radiusOffset', datum, states, opt) as number) ?? 0;\n return superValue + offset;\n };\n\n protected computeCenter = (\n key: 'x' | 'y',\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n center: number\n ) => {\n return (\n polarToCartesian(\n { x: 0, y: 0 },\n this.getAttribute('centerOffset', datum, states, opt) as number,\n datum[ARC_MIDDLE_ANGLE]\n )[key] + center\n );\n };\n}\n\nexport class ArcMark extends BaseArcMark implements IArcMark {\n static readonly type = MarkTypeEnum.arc;\n readonly type: MarkTypeEnum = ArcMark.type;\n}\n\nexport const registerArcMark = () => {\n registerArcGraphic();\n registerVGrammarArcAnimation();\n Factory.registerMark(ArcMark.type, ArcMark);\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const pieSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie]: { name: SeriesMarkNameEnum.pie, type: MarkTypeEnum.arc },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n\nexport const pie3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie3d]: { name: SeriesMarkNameEnum.pie3d, type: MarkTypeEnum.arc3d },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n","import { isArray, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IArcLabelSpec, IBasePieSeriesSpec, IPieSeriesTheme } from './interface';\n\nexport class PieSeriesSpecTransformer<\n T extends IBasePieSeriesSpec = IBasePieSeriesSpec,\n K extends IPieSeriesTheme = IPieSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie);\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n\n // this._originalSpec + specFromChart + this._theme = this._spec\n // 动态处理 label 样式,对于展示在内部的 label 默认使用 innerLabel 样式\n newSpec = mergeSpec({}, this._theme, specFromChart, spec) as any;\n\n const getMergedLabelSpec = (position: IArcLabelSpec['position'], label: IArcLabelSpec) => {\n if (position === 'inside' || position === 'inside-center') {\n return mergeSpec({}, this._theme.innerLabel, label);\n }\n return mergeSpec({}, this._theme.outerLabel, label);\n };\n\n if (isArray(newSpec.label)) {\n newSpec.label = newSpec.label.map(label => getMergedLabelSpec(label.position, label));\n } else {\n newSpec.label = getMergedLabelSpec(newSpec.label.position, newSpec.label);\n }\n }\n\n return { spec: newSpec, theme };\n }\n\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = (super._getDefaultSpecFromChart(chartSpec) as any) ?? {};\n const { centerX, centerY } = chartSpec;\n if (isValid(centerX)) {\n spec.centerX = centerX;\n }\n if (isValid(centerY)) {\n spec.centerY = centerY;\n }\n return Object.keys(spec).length > 0 ? spec : undefined;\n }\n}\n","import { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../../../constant/polar';\nimport { calculateMaxRadius, isFunction, isNumber, isValid } from '@visactor/vutils';\nimport { ComponentTypeEnum } from '../../../interface';\nimport type { IPolarAxisCommonSpec } from '../interface';\nimport type { ILayoutRect } from '../../../../typings/layout';\nimport type { IPoint } from '../../../../typings/coordinate';\n\nexport const getPolarAxisInfo = (spec: IPolarAxisCommonSpec, chartSpec: any) => {\n // TODO: 基于数据处理 axis 类型\n const axisType = spec.type ?? (spec.orient === 'angle' ? 'band' : 'linear');\n const componentName = `${ComponentTypeEnum.polarAxis}-${axisType}`;\n\n const startAngleFromSpec = spec.startAngle ?? chartSpec.startAngle;\n const endAngleFromSpec = spec.endAngle ?? chartSpec.endAngle;\n return {\n axisType,\n componentName,\n startAngle: startAngleFromSpec ?? POLAR_START_ANGLE,\n endAngle: endAngleFromSpec ?? (isValid(startAngleFromSpec) ? startAngleFromSpec + 360 : POLAR_END_ANGLE),\n center: isValid(chartSpec.center)\n ? chartSpec.center\n : isValid(chartSpec?.centerX) || isValid(chartSpec?.centerY)\n ? {\n x: chartSpec?.centerX,\n y: chartSpec?.centerY\n }\n : undefined,\n // 优先使用 outerRadius, 但要兼容 radius\n outerRadius: spec.outerRadius ?? spec.radius ?? chartSpec.outerRadius ?? chartSpec.radius,\n layoutRadius: chartSpec.layoutRadius\n };\n};\n\nexport const computeLayoutRadius = (\n getLayoutRadius: () => 'auto' | number | ((layoutRect: ILayoutRect, center: IPoint) => number),\n getLayoutRect: () => ILayoutRect,\n getCenter: () => IPoint,\n getAngles: () => { startAngle: number; endAngle: number }\n) => {\n const layoutRadius = getLayoutRadius();\n if (isNumber(layoutRadius)) {\n return layoutRadius;\n } else if (isFunction(layoutRadius)) {\n return layoutRadius(getLayoutRect(), getCenter());\n }\n\n const rect = getLayoutRect();\n\n if (layoutRadius === 'auto' && rect.width > 0 && rect.height > 0) {\n const { startAngle = 0, endAngle = 2 * Math.PI } = getAngles();\n return calculateMaxRadius(rect, getCenter(), startAngle, endAngle);\n }\n\n return Math.min(rect.width / 2, rect.height / 2);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { degreeToRadian, isValid } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport {\n ARC_START_ANGLE,\n ARC_END_ANGLE,\n ARC_RATIO,\n ARC_MIDDLE_ANGLE,\n ARC_RADIAN,\n ARC_QUADRANT,\n ARC_K,\n POLAR_START_RADIAN,\n POLAR_END_RADIAN\n} from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY, DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { IPoint, Datum, StateValueType, IArcMarkSpec, ILayoutNumber } from '../../typings';\nimport { normalizeStartEndAngle } from '../../util/math';\nimport { isSpecValueWithScale } from '../../util/scale';\nimport { field } from '../../util/object';\nimport type { IModelLayoutOption } from '../../model/interface';\nimport { PolarSeries } from '../polar/polar';\nimport type { IArcMark, IMark, IMarkStyle, IPathMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IArcSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IPieOpt } from '../../data/transforms/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { isDataEmpty, pie } from '../../data/transforms/pie';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { registerEmptyCircleAnimation, registerPieAnimation } from './animation/animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { AnimationStateEnum } from '../../animation/interface';\nimport type { IBasePieSeriesSpec, IPieAnimationParams, IPieSeriesSpec, PieAppearPreset } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { centerOffsetConfig } from './animation/centerOffset';\nimport { registerArcMark } from '../../mark/arc';\nimport { pieSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { isNil, polarToCartesian } from '@visactor/vutils';\nimport { PieSeriesSpecTransformer } from './pie-transformer';\nimport { DEFAULT_LABEL_VISIBLE } from '../../constant/label';\nimport { ChartEvent } from '../../constant/event';\nimport { computeLayoutRadius } from '../../component/axis/polar/util/common';\nimport { calcLayoutNumber } from '../../util/space';\n\nexport class BasePieSeries extends PolarSeries implements IArcSeries {\n static readonly transformerConstructor = PieSeriesSpecTransformer as any;\n readonly transformerConstructor = PieSeriesSpecTransformer;\n\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc;\n\n static readonly mark: SeriesMarkMap = pieSeriesMark;\n\n protected _viewDataLabel!: SeriesData;\n\n // 饼图渲染不依赖于极坐标系轴,因此由 series 自己存储相关配置信息\n getCenter = (): IPoint => {\n const layoutRect = this._region.getLayoutRect();\n\n return {\n x: calcLayoutNumber(this._spec?.centerX as ILayoutNumber, layoutRect.width, layoutRect, layoutRect.width / 2),\n y: calcLayoutNumber(this._spec?.centerY as ILayoutNumber, layoutRect.height, layoutRect, layoutRect.height / 2)\n };\n };\n protected _centerOffset!: number;\n\n protected _cornerRadius!: number;\n\n protected _startAngle: number = POLAR_START_RADIAN;\n protected _endAngle: number = POLAR_END_RADIAN;\n protected _padAngle!: number;\n\n protected _pieMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n protected _labelLineMark: IPathMark | null = null;\n\n protected _showEmptyCircle: boolean;\n protected _emptyArcMark: IArcMark | null = null;\n\n protected _showAllZero: boolean;\n protected _supportNegative: boolean;\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => ({\n x: () => this.getCenter().x,\n y: () => this.getCenter().y\n });\n\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._centerOffset = this._spec.centerOffset ?? 0;\n this._cornerRadius = this._spec.cornerRadius ?? 0;\n\n const normalized = normalizeStartEndAngle(\n isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : this._startAngle,\n isValid(this._spec.endAngle) ? degreeToRadian(this._spec.endAngle) : this._endAngle\n );\n this._startAngle = normalized.startAngle;\n this._endAngle = normalized.endAngle;\n this._padAngle = isValid(this._spec.padAngle) ? degreeToRadian(this._spec.padAngle) : 0;\n\n // 值信息给角度,angleField 是为了兼容小组件用法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n this._radiusField = [];\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = [];\n\n this._showEmptyCircle = this._spec.emptyPlaceholder?.showEmptyCircle ?? false;\n\n this._showAllZero = this._spec.showAllZero ?? false;\n this._supportNegative = this._spec.supportNegative ?? false;\n }\n\n initData() {\n super.initData();\n\n const viewData = this.getViewData();\n if (!viewData) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'pie', pie);\n\n viewData.transform(\n {\n type: 'pie',\n options: {\n angleField: () => this._angleField[0],\n startAngle: () => this._startAngle,\n endAngle: () => this._endAngle,\n minAngle: () => (isValid(this._spec.minAngle) ? degreeToRadian(this._spec.minAngle) : 0),\n asStartAngle: ARC_START_ANGLE,\n asEndAngle: ARC_END_ANGLE,\n asRatio: ARC_RATIO,\n asMiddleAngle: ARC_MIDDLE_ANGLE,\n asRadian: ARC_RADIAN,\n asQuadrant: ARC_QUADRANT,\n asK: ARC_K,\n showAllZero: this._showAllZero,\n supportNegative: this._supportNegative,\n showEmptyCircle: this._showEmptyCircle\n } as IPieOpt\n },\n false\n );\n\n const viewDataLabel = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataLabel` });\n viewDataLabel.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataLabel = new SeriesData(this._option, viewDataLabel);\n }\n\n compileData() {\n super.compileData();\n this._viewDataLabel?.compile();\n }\n\n initMark(): void {\n this._pieMark = this._createMark(\n {\n ...BasePieSeries.mark.pie,\n name: this._pieMarkName,\n type: this._pieMarkType\n },\n {\n key: DEFAULT_DATA_KEY,\n groupKey: this._seriesField,\n skipBeforeLayouted: true,\n isSeriesMark: true,\n stateSort: this._spec.pie?.stateSort\n },\n {\n setCustomizedShape: this._spec.pie?.customShape,\n morph: shouldMarkDoMorph(this._spec, this._pieMarkName),\n morphElementKey: this._seriesField\n }\n ) as IArcMark;\n\n if (this._showEmptyCircle) {\n this._emptyArcMark = this._createMark(\n {\n name: 'emptyCircle',\n type: 'arc'\n },\n {\n dataView: false\n }\n ) as IArcMark;\n }\n }\n\n private startAngleScale(datum: Datum) {\n return field(ARC_START_ANGLE)(datum);\n }\n\n private endAngleScale(datum: Datum) {\n return field(ARC_END_ANGLE)(datum);\n }\n\n protected _computeLayoutRadius() {\n return computeLayoutRadius(\n () => this._spec.layoutRadius,\n this.getLayoutRect,\n this.getCenter,\n () => ({ startAngle: this._startAngle, endAngle: this._endAngle })\n );\n }\n\n initMarkStyle(): void {\n const initialStyle: Partial> = {\n x: () => this.getCenter().x,\n y: () => this.getCenter().y,\n fill: this.getColorAttribute(),\n outerRadius: isSpecValueWithScale(this._outerRadius)\n ? this._outerRadius\n : () => this._computeLayoutRadius() * this._outerRadius,\n innerRadius: isSpecValueWithScale(this._innerRadius)\n ? this._innerRadius\n : () => this._computeLayoutRadius() * this._innerRadius,\n cornerRadius: () => this._computeLayoutRadius() * this._cornerRadius,\n startAngle: datum => this.startAngleScale(datum),\n endAngle: datum => this.endAngleScale(datum),\n padAngle: this._padAngle,\n centerOffset: this._centerOffset\n };\n\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(pieMark, initialStyle, 'normal', AttributeLevel.Series);\n }\n\n /**\n * !important\n * !TODO: isDataEmpty执行了2次, 需要结构上优化, 保存isEmpty的状态, 尝试将2次执行优化为1次\n */\n const emptyPieMark = this._emptyArcMark;\n if (emptyPieMark) {\n this.setMarkStyle(\n emptyPieMark,\n {\n ...initialStyle,\n visible: () => {\n const angleField = this.getAngleField()[0];\n return isDataEmpty(this.getViewData().latestData, angleField, this._supportNegative);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._pieMark ? [this._pieMark] : []);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._pieMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pieMark);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string): void {\n super.initMarkStyleWithSpec(mark, spec, key);\n if (mark.name === this._pieMarkName) {\n // radius 配置需要额外处理比例值\n const pieSpec = this.getSpec()[mark.name as 'pie'];\n if (pieSpec) {\n for (const state in pieSpec.state || {}) {\n this.setMarkStyle(mark, this.generateRadiusStyle(pieSpec.state[state]), state, AttributeLevel.User_Mark);\n }\n }\n }\n if (mark.name === 'emptyCircle') {\n // 使用emptyCircle的radius比例值进行覆盖\n this.setMarkStyle(mark, this.generateRadiusStyle(spec.style), 'normal', AttributeLevel.User_Mark);\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n visible: field(DEFAULT_LABEL_VISIBLE).bind(this),\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: this.dataToPositionZ.bind(this)\n });\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n initEvent(): void {\n super.initEvent();\n this._viewDataLabel.getDataView()?.target.addListener('change', this.viewDataLabelUpdate.bind(this));\n }\n\n // 饼图不支持分组\n initGroups() {\n return;\n }\n\n /**\n * @override\n * @param ctx\n */\n onLayoutEnd(ctx: IModelLayoutOption): void {\n this._viewDataLabel.getDataView().reRunAllTransform();\n this.onMarkPositionUpdate();\n super.onLayoutEnd(ctx);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n private viewDataLabelUpdate() {\n this.event.emit(ChartEvent.viewDataLabelUpdate, { model: this });\n this._viewDataLabel.updateData();\n }\n\n protected generateRadiusStyle(spec: any) {\n if (!spec) {\n return;\n }\n const style: any = {};\n spec.outerRadius && (style.outerRadius = () => this._computeLayoutRadius() * spec.outerRadius);\n spec.innerRadius && (style.innerRadius = () => this._computeLayoutRadius() * spec.innerRadius);\n spec.cornerRadius && (style.cornerRadius = () => this._computeLayoutRadius() * spec.cornerRadius);\n return style;\n }\n\n computeCenter(datum: Datum): IPoint {\n return {\n x: this._pieMark.getAttribute('x', datum, 'normal') as number,\n y: this._pieMark.getAttribute('y', datum, 'normal') as number\n };\n }\n\n getRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.outerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.outerRadius;\n return styleRadius ?? this._outerRadius;\n }\n\n getInnerRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.innerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.innerRadius;\n return styleRadius ?? this._innerRadius;\n }\n\n computeRadius(r: number, k?: number): number {\n return this._computeLayoutRadius() * r * (isNil(k) ? 1 : k) + this._centerOffset;\n }\n\n computeDatumRadius(datum: Datum, state?: string): number {\n return this._computeLayoutRadius() * this.getRadius(state) + this._centerOffset;\n }\n\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: { [key: string]: true }) {\n ignoreCheckKeys = ignoreCheckKeys ?? { data: true };\n const defaultIgnoreKeys: string[] = [\n 'centerX',\n 'centerY',\n 'centerOffset',\n 'radius',\n 'innerRadius',\n 'cornerRadius',\n 'startAngle',\n 'endAngle',\n 'padAngle'\n ];\n defaultIgnoreKeys.forEach(key => {\n ignoreCheckKeys[key] = true;\n });\n\n const result = super._compareSpec(spec, prevSpec, ignoreCheckKeys);\n spec = spec ?? ({} as T);\n if (defaultIgnoreKeys.some(key => (spec as any)[key] !== (prevSpec as any)[key])) {\n result.reRender = true;\n result.change = true;\n }\n return result;\n }\n\n computeDatumInnerRadius(datum: Datum, state?: string): number {\n return this._computeLayoutRadius() * this.getInnerRadius(state) + this._centerOffset;\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint | null {\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const center = this.computeCenter(datum);\n\n return polarToCartesian(center, radius, angle);\n }\n\n dataToCentralPosition = (datum: Datum): IPoint | null => {\n // 和 PieSeries.dataToPosition 实现不同,这里考虑了美观性,返回的位置是曲边梯形的中心\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const innerRadius = this.computeDatumInnerRadius(datum);\n const center = this.computeCenter(datum);\n\n return polarToCartesian(center, (radius + innerRadius) / 2, angle);\n };\n\n initAnimation() {\n const animationParams: IPieAnimationParams = {\n growFrom: (datum, element, state) => {\n if (state === AnimationStateEnum.appear) {\n return this._startAngle;\n }\n if (state === AnimationStateEnum.disappear) {\n return this._endAngle;\n }\n\n const outState = [AnimationStateEnum.disappear, AnimationStateEnum.exit];\n const markElements = element.mark.elements;\n\n const data = datum;\n const dataIndex = data?.[DEFAULT_DATA_INDEX];\n\n // 当前 mark 在上个状态是否处于第一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex) === undefined) {\n return this._startAngle;\n }\n // 当前 mark 在上个状态是否处于最后一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] > dataIndex) === undefined) {\n return this._endAngle;\n }\n\n // 扇形不在边缘时,获取扇形生长点:获取相邻状态下相邻扇形的边缘\n const prevMarkElement = [...markElements].reverse().find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex);\n\n if (outState.includes(state)) {\n return prevMarkElement?.getNextGraphicAttributes()?.endAngle;\n }\n return prevMarkElement?.getGraphicAttribute('endAngle', true);\n }\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._pieMark) {\n const pieAnimationConfig = animationConfig(\n Factory.getAnimationInKey('pie')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.pie, this._spec, this._markAttributeContext)\n );\n\n if (pieAnimationConfig.normal && (pieAnimationConfig.normal as IAnimationTypeConfig).type) {\n pieAnimationConfig.normal = centerOffsetConfig(\n this._pieMark,\n pieAnimationConfig.normal as IAnimationTypeConfig\n );\n }\n\n this._pieMark.setAnimationConfig(pieAnimationConfig);\n }\n\n if (this._emptyArcMark) {\n const pieAnimationConfig = animationConfig(\n Factory.getAnimationInKey('emptyCircle')?.(animationParams, appearPreset ?? 'fadeIn')\n );\n this._emptyArcMark.setAnimationConfig(pieAnimationConfig);\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number) {\n return index;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pieMark];\n }\n}\n\nexport class PieSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie;\n type = SeriesTypeEnum.pie;\n}\n\nexport const registerPieSeries = () => {\n registerArcMark();\n registerPieAnimation();\n registerEmptyCircleAnimation();\n Factory.registerSeries(PieSeries.type, PieSeries);\n};\n","import { array, isArray, isNil, isValid } from '@visactor/vutils';\nimport type { IDataZoomSpec, IIndicatorSpec } from '../../component';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IPolarChartSpec } from './interface';\n\nexport class PolarChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected getIndicatorSpec(spec: any): IIndicatorSpec[] {\n const indicatorSpec = array(spec.indicator) as IIndicatorSpec[];\n const limitRatio = spec.innerRadius ?? spec.series?.[0]?.innerRadius;\n if (isValid(limitRatio)) {\n indicatorSpec.forEach(indicator => {\n if (isNil(indicator.limitRatio)) {\n indicator.limitRatio = limitRatio;\n }\n });\n }\n return indicatorSpec;\n }\n\n protected _getDefaultSeriesSpec(spec: any, pickKeys?: string[]): any {\n /**\n * 旧的radius写法, 仅做兼容\n * @deprecated use outerRadius instead\n */\n const series: any = super._getDefaultSeriesSpec(\n spec,\n ['radius', 'outerRadius', 'innerRadius', 'startAngle', 'endAngle', 'sortDataByAxis'],\n pickKeys\n );\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n /** 处理极坐标系下的 datazoom */\n if (isArray(spec.dataZoom) && spec.dataZoom.length > 0) {\n spec.dataZoom.forEach((zoom: IDataZoomSpec) => {\n // 极坐标系下 datazoom 目前只支持数据过滤\n // 理想效果:角度轴不支持 axis, 径向轴均支持(通过 group.clip 自定义 clipPath 支持)\n if (zoom.filterMode === 'axis') {\n zoom.filterMode = 'filter';\n }\n });\n }\n\n this.transformSeriesSpec(spec);\n\n /* 处理 indicator 配置 */\n if (isValid((spec as any).indicator)) {\n (spec as any).indicator = this.getIndicatorSpec(spec);\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { PolarChartSpecTransformer } from '../../polar';\nimport type { IPieChartSpec } from '../interface';\n\nexport class BasePieChartSpecTransformer extends PolarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'center',\n 'centerOffset',\n 'cornerRadius',\n 'padAngle',\n 'minAngle',\n 'emptyPlaceholder',\n 'showAllZero',\n 'supportNegative',\n 'layoutRadius'\n ]);\n // 兼容旧版写法\n seriesSpec.categoryField = spec.categoryField || spec.seriesField;\n seriesSpec.valueField = spec.valueField || spec.angleField;\n seriesSpec.emptyCircle = spec.emptyPlaceholder?.emptyCircle;\n return seriesSpec;\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\nimport type { IPieChartSpec } from '../interface';\nimport { BasePieChartSpecTransformer } from './pie-transformer';\n\nexport class BasePieChart extends BaseChart> {\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = BasePieChartSpecTransformer;\n}\n","import { registerPieSeries } from '../../series/pie/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BasePieChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IPieChartSpec } from './interface';\nimport { BasePieChartSpecTransformer } from './base';\n\nexport class PieChart extends BasePieChart {\n static readonly type: string = ChartTypeEnum.pie;\n static readonly seriesType: string = SeriesTypeEnum.pie;\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie;\n readonly seriesType: string = SeriesTypeEnum.pie;\n}\n\nexport const registerPieChart = () => {\n registerPieSeries();\n Factory.registerChart(PieChart.type, PieChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IArc3dMarkSpec } from '../typings';\nimport { BaseArcMark } from './arc';\nimport type { IArc3dMark } from './interface';\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArc3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\n\nexport class Arc3dMark extends BaseArcMark implements IArc3dMark {\n static readonly type = MarkTypeEnum.arc3d;\n readonly type: MarkTypeEnum = Arc3dMark.type;\n protected _support3d?: boolean = true;\n}\n\nexport const registerArc3dMark = () => {\n registerVGrammarArcAnimation();\n registerArc3dGraphic();\n Factory.registerMark(Arc3dMark.type, Arc3dMark);\n};\n","import type { IPie3dSeriesSpec, IPie3dSeriesTheme } from '../interface';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport { PieSeriesSpecTransformer } from '../pie-transformer';\n\nexport class Pie3dSeriesSpecTransformer<\n T extends IPie3dSeriesSpec = IPie3dSeriesSpec,\n K extends IPie3dSeriesTheme = IPie3dSeriesTheme\n> extends PieSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie3d);\n }\n}\n","import { AttributeLevel } from '../../../constant/attribute';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { IArcSeries, SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPie3dSeriesSpec } from '../interface';\nimport { registerArc3dMark } from '../../../mark/arc-3d';\nimport { BasePieSeries } from '../pie';\nimport { pie3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { registerPie3dAnimation } from '../animation/animation';\nimport { Pie3dSeriesSpecTransformer } from './pie-3d-transformer';\nimport type { ITextMark } from '../../../mark/interface';\n\nexport class Pie3dSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie3d;\n type = SeriesTypeEnum.pie3d;\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie3d;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc3d;\n\n static readonly mark: SeriesMarkMap = pie3dSeriesMark;\n static readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n\n protected _angle3d: number;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._angle3d = this._spec?.angle3d ?? -Math.PI / 3;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(\n pieMark,\n {\n beta: () => this._angle3d\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark, spec: any = {}): void {\n if (!textMark) {\n return;\n }\n super.initLabelMarkStyle(textMark);\n this.setMarkStyle(textMark, { support3d: true }, undefined, AttributeLevel.Mark);\n }\n}\n\nexport const registerPie3dSeries = () => {\n registerPie3dAnimation();\n registerArc3dMark();\n Factory.registerSeries(Pie3dSeries.type, Pie3dSeries);\n};\n","import { registerPie3dSeries } from '../../../series/pie/3d/pie-3d';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BasePieChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IPie3dChartSpec } from '../interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../../typings';\nimport { BasePieChartSpecTransformer } from '../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Pie3dChartSpecTransformer extends BasePieChartSpecTransformer<\n AdaptiveSpec\n> {\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type === 'pie3d') {\n (s as any).angle3d = spec.angle3d;\n }\n });\n }\n}\n\nexport class Pie3dChart extends BasePieChart> {\n static readonly type: string = ChartTypeEnum.pie3d;\n static readonly seriesType: string = SeriesTypeEnum.pie3d;\n static readonly transformerConstructor = Pie3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Pie3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie3d;\n readonly seriesType: string = SeriesTypeEnum.pie3d;\n}\n\nexport const registerPie3dChart = () => {\n register3DPlugin();\n registerPie3dSeries();\n Factory.registerChart(Pie3dChart.type, Pie3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { Datum } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport type { IRoseAnimationParams, RoseAppearPreset } from './interface';\n\nexport const Appear_Grow = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n const from = params.growField === 'angle' ? 0 : params.innerRadius;\n //TODO: 待 vgrammar 内置后替换\n return params.growField === 'angle'\n ? {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n }\n : {\n channel: {\n innerRadius: { from, to: (datum: Datum, element: any) => element.getFinalGraphicAttributes()?.innerRadius },\n outerRadius: { from, to: (datum: Datum, element: any) => element.getFinalGraphicAttributes()?.outerRadius }\n }\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const roseEnter = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n };\n};\n\nexport const roseExit = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport const roseDisappear = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport function rosePresetAnimation(\n params: IRoseAnimationParams,\n preset: RoseAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growAngle':\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n }\n}\n\nexport const registerRoseAnimation = () => {\n Factory.registerAnimation('rose', (params: IRoseAnimationParams, preset: RoseAppearPreset) => {\n return {\n appear: rosePresetAnimation(params, preset),\n enter: roseEnter(params),\n exit: roseExit(params),\n disappear: roseDisappear(params)\n };\n });\n};\n","import { array } from '@visactor/vutils';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../../constant/data';\nimport { PolarSeries } from '../polar';\nimport type { IRoseLikeSeriesSpec } from './interface';\n\nexport abstract class RoseLikeSeries extends PolarSeries {\n getStackGroupFields(): string[] {\n return this._angleField;\n }\n\n getStackValueField() {\n return array(this._spec.valueField)[0] || array(this._spec.radiusField)[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // 兼容小组件写法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.categoryField || this._spec.angleField);\n this.setRadiusField(this._spec.valueField || this._spec.radiusField);\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n this.setInnerRadiusField(this._spec.valueField || this._spec.radiusField);\n if (this.getStack()) {\n this.setValueFieldToStack();\n }\n if (this.getPercent()) {\n this.setValueFieldToPercent();\n }\n }\n\n setValueFieldToStack(): void {\n this.setRadiusField(STACK_FIELD_END);\n this.setInnerRadiusField(STACK_FIELD_START);\n }\n\n setValueFieldToPercent(): void {\n this.setRadiusField(STACK_FIELD_END_PERCENT);\n this.setInnerRadiusField(STACK_FIELD_START_PERCENT);\n }\n\n getDimensionField(): string[] {\n return this._specAngleField;\n }\n getMeasureField(): string[] {\n return this._specRadiusField;\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IRoseSeriesSpec, IRoseSeriesTheme } from './interface';\n\nexport class RoseSeriesSpecTransformer<\n T extends IRoseSeriesSpec = IRoseSeriesSpec,\n K extends IRoseSeriesTheme = IRoseSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.rose);\n }\n}\n","import { POLAR_DEFAULT_RADIUS, POLAR_END_RADIAN, POLAR_START_RADIAN } from '../../../constant/polar';\nimport type { IBaseScale, BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IPolarAxis, IPolarAxisCommonSpec } from './interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { Factory } from '../../../core/factory';\nimport { eachSeries } from '../../../util/model';\nimport type { IPolarTickDataOpt } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPolarSeries } from '../../../series/interface';\nimport type {\n IPoint,\n IPolarOrientType,\n IPolarPoint,\n Datum,\n StringOrNumber,\n ILayoutType,\n ILayoutNumber\n} from '../../../typings';\nimport { isPolarAxisSeries } from '../../../series/util/utils';\nimport { getAxisItem, getAxisLabelOffset, isValidPolarAxis, shouldUpdateAxis } from '../util';\nimport type { Dict, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n PointService,\n degreeToRadian,\n isValid,\n isArray,\n isValidNumber,\n polarToCartesian,\n cartesianToPolar\n} from '@visactor/vutils';\nimport type { IEffect, IModelSpecInfo } from '../../../model/interface';\nimport { AxisComponent } from '../base-axis';\nimport type { IBandAxisSpec, ITick } from '../interface';\nimport { computeLayoutRadius, getPolarAxisInfo } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { calcLayoutNumber } from '../../../util/space';\n\nexport abstract class PolarAxis\n extends AxisComponent\n implements IPolarAxis\n{\n static type = ComponentTypeEnum.polarAxis;\n type = ComponentTypeEnum.polarAxis;\n name: string = ComponentTypeEnum.polarAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0;\n protected readonly _defaultBandInnerPadding = 0;\n protected readonly _defaultBandOuterPadding = 0;\n\n layoutType: ILayoutType = 'absolute';\n layoutZIndex: number = LayoutZIndex.Axis;\n protected _tick: ITick | undefined = undefined;\n\n protected _center: { x: string | number; y: string | number } | null = null;\n get center() {\n return this._center;\n }\n\n protected _startAngle: number = POLAR_START_RADIAN;\n get startAngle() {\n return this._startAngle;\n }\n\n protected _endAngle: number = POLAR_END_RADIAN;\n get endAngle() {\n return this._endAngle;\n }\n\n protected _orient: IPolarOrientType = 'radius';\n getOrient() {\n return this._orient;\n }\n\n protected getDefaultInteractive() {\n return this._orient !== 'angle';\n }\n\n protected _groupScales: IBaseScale[] = [];\n getGroupScales() {\n return this._groupScales;\n }\n\n private _axisStyle: any;\n private _gridStyle: any;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (!chartSpec[this.specKey]) {\n return null;\n }\n const isArraySpec = isArray(chartSpec[this.specKey]);\n const axesSpec = isArraySpec ? chartSpec[this.specKey] : [chartSpec[this.specKey]];\n const specInfos: IModelSpecInfo[] = [];\n let angleAxisIndex: number;\n let radiusAxisIndex: number;\n const radiusAxisSpecInfos: IModelSpecInfo[] = [];\n const angleAxisSpecInfos: IModelSpecInfo[] = [];\n\n axesSpec.forEach((s: any, i: number) => {\n if (!isValidPolarAxis(s)) {\n return;\n }\n const { axisType, componentName, startAngle, endAngle, center, outerRadius, layoutRadius } = getPolarAxisInfo(\n s,\n chartSpec\n );\n s.center = center;\n s.startAngle = startAngle;\n s.endAngle = endAngle;\n s.outerRadius = outerRadius;\n s.type = axisType;\n s.layoutRadius = layoutRadius;\n const info = {\n spec: s,\n specPath: isArraySpec ? [this.specKey, i] : [this.specKey],\n specInfoPath: ['component', this.specKey, i],\n type: componentName\n };\n specInfos.push(info);\n if (s.orient === 'radius') {\n radiusAxisSpecInfos.push(info);\n radiusAxisIndex = i;\n } else {\n angleAxisSpecInfos.push(info);\n angleAxisIndex = i;\n }\n });\n radiusAxisSpecInfos.forEach(info => {\n (info as any).angleAxisIndex = angleAxisIndex;\n });\n\n angleAxisSpecInfos.forEach(info => {\n (info as any).radiusAxisIndex = radiusAxisIndex;\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IPolarAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n this._coordinateType = 'polar';\n }\n\n effect: IEffect = {\n scaleUpdate: param => {\n this.computeData(param?.value);\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).radiusAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).angleAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n this._axisStyle = this._getAxisAttributes();\n this._gridStyle = this._getGridAttributes();\n }\n\n this._tick = this._spec.tick;\n this._orient = this._spec.orient === 'angle' ? 'angle' : 'radius';\n this._center = this._spec.center;\n this._startAngle = degreeToRadian(this._spec.startAngle);\n this._endAngle = degreeToRadian(this._spec.endAngle);\n this._inverse = this._spec.inverse;\n }\n\n _transformLayoutPosition = (pos: Partial) => {\n const region = this.getRegions()?.[0];\n return region ? region.getLayoutStartPoint() : pos;\n };\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n noDecimal: this._tick?.noDecimals,\n startAngle: this.startAngle,\n labelOffset: getAxisLabelOffset(this._spec),\n getRadius: () => this.getOuterRadius(),\n inside: this._spec.inside\n } as IPolarTickDataOpt;\n }\n\n protected updateScaleRange() {\n const prevRange = this._scale.range();\n let newRange: [number, number];\n\n if (this.getOrient() === 'radius') {\n newRange = this._inverse\n ? [this.computeLayoutOuterRadius(), this.computeLayoutInnerRadius()]\n : [this.computeLayoutInnerRadius(), this.computeLayoutOuterRadius()];\n } else {\n newRange = this._inverse ? [this._endAngle, this._startAngle] : [this._startAngle, this._endAngle];\n }\n\n if (prevRange && newRange && prevRange[0] === newRange[0] && prevRange[1] === newRange[1]) {\n return false;\n }\n\n this._scale.range(newRange);\n\n return true;\n }\n\n protected collectSeriesField(depth: number, series: IPolarSeries) {\n let field: string | string[];\n\n if (depth > 0) {\n field = series.getGroups()?.fields?.[depth];\n } else {\n field = this.getOrient() === 'radius' ? series.getRadiusField() : series.getAngleField();\n }\n return field;\n }\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n\n protected updateSeriesScale(): void {\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).radiusAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).setRadiusScale(this._scale);\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).angleAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).setAngleScale(this._scale);\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected getSeriesStatisticsField(s: IPolarSeries) {\n const f = this.getOrient() === 'radius' ? s.getRadiusField() : s.getAngleField();\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected initGroupScales() {\n // do nothing\n }\n\n // axisHelper\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n\n const helper = {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n coordToPoint: this.coordToPoint.bind(this),\n pointToCoord: this.pointToCoord.bind(this),\n center: this.getCenter.bind(this),\n layoutRadius: this._computeLayoutRadius.bind(this),\n getScale,\n getAxisId: () => this.id,\n getSpec: () => this._spec\n };\n return helper;\n }\n\n positionToData(position: IPoint) {\n const coord = this.pointToCoord(position);\n if (this.getOrient() === 'radius') {\n return this.invert(coord.radius);\n }\n return this.invert(coord.angle);\n }\n\n /**\n * 将半径和角度转换为笛卡尔坐标点\n * @param point 角度 & 弧度信息\n * @returns 笛卡尔坐标点 { x, y }\n */\n coordToPoint(point: IPolarPoint): IPoint {\n // center & startAngle 都是坐标系转换的配置,在 scale 中不生效,仅在最终转换时生效\n const center = this.getCenter();\n\n return polarToCartesian(center, point.radius, point.angle);\n }\n\n /**\n * 将笛卡尔坐标转换为对应的半径和弧度\n * @param point 笛卡尔坐标点 { x, y }\n * @returns 角度 & 弧度信息 { radius, angle }\n */\n pointToCoord(point: IPoint): IPolarPoint {\n const center = this.getCenter();\n const startAngle = this._startAngle;\n const endAngle = this._endAngle;\n return cartesianToPolar(point, center, startAngle, endAngle);\n }\n\n /**\n * 获取坐标轴圆心位置\n * @returns 圆心位置\n */\n getCenter = (): IPoint => {\n const layoutRect = this.getRefLayoutRect();\n const { width, height } = layoutRect;\n\n return {\n x: calcLayoutNumber(this._center?.x as ILayoutNumber, width, layoutRect, width / 2),\n y: calcLayoutNumber(this._center?.y as ILayoutNumber, height, layoutRect, height / 2)\n };\n };\n\n /**\n * 获取极坐标半径值\n * @returns 半径数值\n */\n getOuterRadius(): number {\n return this.computeLayoutOuterRadius();\n }\n\n /**\n * 获取极坐标内半径值\n * @returns 内半径数值\n */\n getInnerRadius(): number {\n return this.computeLayoutInnerRadius();\n }\n\n updateLayoutAttribute(): void {\n if (this._visible) {\n if (this.getOrient() === 'radius') {\n this._layoutRadiusAxis();\n } else {\n this._layoutAngleAxis();\n }\n }\n\n super.updateLayoutAttribute();\n }\n\n protected _getNormalizedValue(values: any[], length: number) {\n return length === 0 ? 0 : (this.dataToPosition(values) - this._getStartValue()) / length;\n }\n\n protected getLabelItems(length: number) {\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n return [\n tickLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n ];\n }\n return [];\n }\n protected _getStartValue() {\n if (this.getOrient() === 'radius') {\n return this.computeLayoutInnerRadius();\n }\n\n return this._startAngle;\n }\n\n private _layoutAngleAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const angleRange = this._endAngle - this._startAngle;\n const items = this.getLabelItems(angleRange);\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n inside: this._spec.inside,\n center,\n radius,\n innerRadius,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n sides: this._getRelatedAxis((this._option as any).radiusAxisIndex)?.getSpec()?.grid?.smooth\n ? undefined\n : this.getScale().domain().length\n };\n const attrs: any = {\n ...commonAttrs,\n size: this.getRefLayoutRect(),\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items,\n orient: 'angle'\n };\n if (this._spec.grid.visible) {\n attrs.grid = {\n type: 'line',\n smoothLink: true,\n items: items[0],\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n private _layoutRadiusAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const endPoint = this.coordToPoint({ angle: this._startAngle, radius });\n const startPoint = this.coordToPoint({ angle: this._startAngle, radius: innerRadius });\n const distance = PointService.distancePP(startPoint, endPoint);\n const items = this.getLabelItems(distance);\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n start: startPoint,\n end: endPoint,\n verticalFactor: -1\n };\n const attrs: any = {\n ...commonAttrs,\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items,\n orient: 'radius'\n };\n if (this._spec.grid?.visible) {\n attrs.grid = {\n items: items[0],\n type: this._spec.grid?.smooth ? 'circle' : 'polygon',\n center,\n closed: true,\n sides: this._getRelatedAxis((this._option as any).angleAxisIndex)\n ?.getScale()\n .domain().length,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n protected _getRelatedAxis(index: number): IPolarAxis | undefined {\n if (isValid(index)) {\n return this._option.getComponentByIndex(this.specKey, index) as IPolarAxis;\n }\n return undefined;\n }\n\n private _computeLayoutRadius() {\n return computeLayoutRadius(\n () => this._spec.layoutRadius,\n this.getRefLayoutRect,\n this.getCenter,\n () => ({ startAngle: this._startAngle, endAngle: this._endAngle })\n );\n }\n\n private computeLayoutOuterRadius() {\n /**\n * 兼容radius旧配置\n * @deprecated use outerRadius instead\n */\n const radius = this._spec.outerRadius ?? this._spec.radius;\n const outerRadius = radius ?? this.getRefSeriesRadius().outerRadius;\n return this._computeLayoutRadius() * outerRadius;\n }\n\n private computeLayoutInnerRadius() {\n const innerRadius = this._spec.innerRadius ?? this.getRefSeriesRadius().innerRadius;\n return this._computeLayoutRadius() * innerRadius;\n }\n\n private getRefLayoutRect = () => {\n return this.getRegions()[0].getLayoutRect();\n };\n\n private getRefSeriesRadius() {\n let outerRadius: number = POLAR_DEFAULT_RADIUS;\n let innerRadius: number = 0;\n const chartSpec = this.getChart().getSpec() as any;\n // FIXME: 为了保证 common 图表能够应用系列的 radius 配置,当前从相应的 region 中取到 radius 信息\n eachSeries(\n this.getRegions(),\n s => {\n const series = s as IPolarSeries;\n if (isPolarAxisSeries(series.type)) {\n const {\n outerRadius: seriesRadius = chartSpec.outerRadius,\n innerRadius: seriesInnerRadius = chartSpec.innerRadius\n } = series;\n if (isValidNumber(seriesRadius)) {\n outerRadius = seriesRadius;\n }\n if (isValidNumber(seriesInnerRadius)) {\n innerRadius = seriesInnerRadius;\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return { outerRadius, innerRadius };\n }\n\n private _update(attrs: Dict) {\n const { grid: gridAttrs, ...axisAttrs } = attrs;\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素并更新\n axisProduct.encode(mergeSpec({}, this._axisStyle, axisAttrs));\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素并更新\n gridProduct.encode(mergeSpec({}, this._gridStyle, gridAttrs));\n }\n }\n\n invert(value: number): number {\n if (this.getOrient() === 'angle' && this._scale.type === 'band') {\n //极坐标轴需要手动取模,超出range时默认会截断\n const range = this._scale.range();\n const rangeValue = range[range.length - 1] - range[0];\n const bandPosition = (this.getSpec() as IBandAxisSpec).bandPosition ?? this._defaultBandPosition;\n const offset = bandPosition === 0.5 ? 0 : (this._scale as BandScale).bandwidth() / 2;\n if (range[0] < 0) {\n const angle = value + offset;\n const transformedAngle = ((angle + Math.abs(range[0])) % rangeValue) - Math.abs(range[0]);\n return this._scale.invert(transformedAngle);\n }\n return this._scale.invert((value + offset) % rangeValue);\n }\n\n return this._scale.invert(value);\n }\n}\n","import type { BandScale, IBaseScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray, isNumberClose } from '@visactor/vutils';\nimport type { IPolarTickDataOpt, ITickCallbackOption, ITickData } from '../../type';\nimport { MIN_TICK_GAP, convertDomainToTickData, labelOverlap } from '../util';\nimport { AABBBounds } from '@visactor/vutils';\nimport { initTextMeasure } from '../../../util/text';\nimport { getPolarAngleLabelPosition } from '../../util';\n\nexport const getPolarAngleLabelBounds = (scale: IBaseScale, domain: any[], op: IPolarTickDataOpt): AABBBounds[] => {\n const { labelStyle, getRadius, labelOffset, labelFormatter, inside } = op;\n const radius = getRadius?.();\n const labelAngle = labelStyle.angle ?? 0;\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const angle = scale.scale(v);\n const center = { x: 0, y: 0 };\n let textX = 0;\n let textY = 0;\n const orient = {\n align: labelStyle.textAlign,\n baseline: labelStyle.textBaseline\n };\n\n const { x, y } = getPolarAngleLabelPosition(angle, center, radius, labelOffset, inside);\n\n if (!orient.align) {\n if (isNumberClose(x, center.x)) {\n if (!orient.baseline) {\n if (y > center.y) {\n orient.baseline = 'top';\n } else {\n orient.baseline = 'bottom';\n }\n }\n } else if (x > center.x) {\n orient.align = 'left';\n } else if (x < center.x) {\n orient.align = 'right';\n }\n }\n\n textX = x + (orient.align === 'right' ? -textWidth : orient.align === 'left' ? 0 : -textWidth / 2);\n textY = y + (orient.baseline === 'bottom' ? -textHeight : orient.baseline === 'top' ? 0 : -textHeight / 2);\n\n // 计算 label 包围盒\n const bounds = new AABBBounds()\n .set(textX, textY, textX + textWidth, textY + textHeight)\n .rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);\n return bounds;\n });\n\n return labelBoundsList;\n};\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽高并存为数组labelBoundsList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到labelBoundsList和scale.range());\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const polarAngleAxisDiscreteTicks = (scale: BandScale, op: IPolarTickDataOpt): ITickData[] => {\n const { tickCount, forceTickCount, tickStep, getRadius, labelOffset, labelGap = 0, labelStyle } = op;\n const radius = getRadius?.();\n if (!radius) {\n return convertDomainToTickData(scale.domain());\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n const count = isFunction(tickCount)\n ? (tickCount as (option: ITickCallbackOption) => number)({ axisLength: rangeSize, labelStyle })\n : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const domain = scale.domain();\n const range = scale.range();\n\n const labelBoundsList = getPolarAngleLabelBounds(scale, domain, op);\n\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n const axisLength = Math.abs(rangeEnd - rangeStart) * (radius + labelOffset);\n const incrementUnit = axisLength / domain.length;\n const { step, delCount } = getStep(\n domain,\n labelBoundsList,\n labelGap,\n Math.floor(\n labelBoundsList.reduce((min, curBounds) => {\n return Math.min(min, curBounds.width(), curBounds.height());\n }, Number.MAX_VALUE) / incrementUnit\n ) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - delCount);\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (domain: any[], labelBoundsList: AABBBounds[], labelGap: number, defaultStep: number) => {\n let step = defaultStep;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n if (success) {\n break;\n }\n } while (step <= domain.length);\n\n let delCount = 0;\n if (domain.length > 2) {\n let ptr = domain.length - (domain.length % step);\n if (ptr >= domain.length) {\n ptr -= step;\n }\n // 判断首尾是否互相覆盖\n while (ptr > 0 && labelOverlap(labelBoundsList[0], labelBoundsList[ptr])) {\n delCount++;\n ptr -= step;\n }\n }\n\n return {\n step,\n delCount\n };\n};\n","import { BandScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport { mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport type { IPolarBandAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid, registerCircleAxis, registerCircleGrid } from '@visactor/vgrammar-core';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { polarAngleAxisDiscreteTicks } from '@visactor/vrender-components';\n\nexport interface PolarBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n PolarAxis {}\n\nexport class PolarBandAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarBandAxis;\n type = ComponentTypeEnum.polarBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n // axisHelper\n protected axisHelper() {\n const helper = super.axisHelper();\n const getBandwidth = (depth: number) => {\n return (helper.getScale(depth) as BandScale).bandwidth();\n };\n\n return { ...helper, getBandwidth };\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, polarAngleAxisDiscreteTicks);\n return name;\n }\n transformScaleDomain() {\n // do nothing\n }\n}\nmixin(PolarBandAxis, BandAxisMixin);\n\nexport const registerPolarBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerCircleAxis();\n registerCircleGrid();\n registerAxis();\n Factory.registerComponent(PolarBandAxis.type, PolarBandAxis);\n};\n","import { LinearScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport type { IPolarLinearAxisSpec } from './interface/spec';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { mixin } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport type { IPolarAxisHelper } from './interface';\nimport { registerLineAxis, registerLineGrid, registerCircleAxis, registerCircleGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface PolarLinearAxis\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'transformScaleDomain'\n | 'valueToPosition'\n | 'computeLinearDomain'\n | 'setScaleNice'\n | 'setExtendDomain'\n >,\n PolarAxis {}\n\nexport class PolarLinearAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarLinearAxis;\n type = ComponentTypeEnum.polarLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale = new LinearScale();\n protected declare _groupScales: LinearScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n }\n\n protected initScales() {\n super.initScales();\n this.setScaleNice();\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IPolarAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n return helper as any;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n}\n\nmixin(PolarLinearAxis, LinearAxisMixin);\n\nexport const registerPolarLinearAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerCircleAxis();\n registerCircleGrid();\n registerAxis();\n Factory.registerComponent(PolarLinearAxis.type, PolarLinearAxis);\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { Datum } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerRoseAnimation } from './animation';\nimport type { IRoseAnimationParams, IRoseSeriesSpec, RoseAppearPreset } from './interface';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerArcMark } from '../../mark/arc';\nimport { roseSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IArcMark, ILabelMark, IMark, ITextMark } from '../../mark/interface';\nimport { RoseSeriesSpecTransformer } from './rose-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport const DefaultBandWidth = 0.5;\n\nexport class RoseSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.rose;\n type = SeriesTypeEnum.rose;\n\n static readonly mark: SeriesMarkMap = roseSeriesMark;\n static readonly transformerConstructor = RoseSeriesSpecTransformer as any;\n readonly transformerConstructor = RoseSeriesSpecTransformer;\n\n private _roseMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n\n initMark(): void {\n this.initRoseMark();\n }\n\n initMarkStyle(): void {\n this.initRoseMarkStyle();\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y\n };\n };\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n private initRoseMark() {\n this._roseMark = this._createMark(\n RoseSeries.mark.rose,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.rose?.stateSort\n },\n {\n setCustomizedShape: this._spec.rose?.customShape,\n morph: shouldMarkDoMorph(this._spec, RoseSeries.mark.rose.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IArcMark;\n }\n\n private getRoseAngle() {\n const angleBandWidth =\n this.angleAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n return angleBandWidth;\n }\n\n private startAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private endAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.getRoseAngle() -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private initRoseMarkStyle() {\n const roseMark = this._roseMark;\n if (roseMark) {\n this.setMarkStyle(roseMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: (datum: Datum) => this.startAngleScale(datum),\n endAngle: (datum: Datum) => this.endAngleScale(datum),\n fill: this.getColorAttribute(),\n outerRadius: (datum: Datum) =>\n valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n ),\n innerRadius: (datum: Datum) => {\n if (!this.getStack()) {\n return 0;\n }\n const stackStart = valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._innerRadiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n );\n return stackStart <= Number.MIN_VALUE\n ? this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n : stackStart;\n }\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._roseMark && this._tooltipHelper.activeTriggerSet.mark.add(this._roseMark);\n }\n\n initLabelMarkStyle(textMark: ILabelMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: 0\n });\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._roseMark) {\n const animationParams: IRoseAnimationParams = {\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n };\n this._roseMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rose')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.rose, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._roseMark];\n }\n}\n\nexport const registerRoseSeries = () => {\n Factory.registerSeries(RoseSeries.type, RoseSeries);\n registerArcMark();\n registerRoseAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import type { IPolarAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\n\nexport class RoseLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n\n // 兼容旧版写法\n series.categoryField = spec.categoryField || spec.angleField;\n series.valueField = spec.valueField || spec.radiusField;\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // set default config for axis\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { radius: false, angle: false };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n haxAxes.radius = true;\n }\n if (orient === 'angle') {\n haxAxes.angle = true;\n }\n });\n if (!haxAxes.angle) {\n spec.axes.push({\n orient: 'angle'\n });\n }\n if (!haxAxes.radius) {\n spec.axes.push({\n orient: 'radius'\n });\n }\n }\n }\n}\n","import { array, isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec } from '../../component';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant/polar';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class RoseChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.radius = spec.radius ?? POLAR_DEFAULT_RADIUS;\n series.outerRadius = spec.outerRadius ?? POLAR_DEFAULT_RADIUS;\n series.innerRadius = spec.innerRadius ?? 0;\n\n series.stack = spec.stack;\n series.percent = spec.percent;\n return series;\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n ['domainLine', 'grid', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (axis.orient === 'angle' && isNil((axis as IPolarBandAxisSpec).bandPosition)) {\n // 玫瑰图的中心点应该是带宽的中心,保证第一个扇形是从坐标系的 startAngle 开始的\n (axis as IPolarBandAxisSpec).bandPosition = 0.5;\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRoseSeries } from '../../series/rose/rose';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from './interface';\nimport { RoseChartSpecTransformer } from './rose-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class RoseChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rose;\n static readonly seriesType: string = SeriesTypeEnum.rose;\n static readonly transformerConstructor = RoseChartSpecTransformer;\n readonly transformerConstructor = RoseChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rose;\n readonly seriesType: string = SeriesTypeEnum.rose;\n}\n\nmixin(RoseChart, StackChartMixin);\n\nexport const registerRoseChart = () => {\n registerRoseSeries();\n Factory.registerChart(RoseChart.type, RoseChart);\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';\nimport { Point, isValidNumber, polarToCartesian, cartesianToPolar } from '@visactor/vutils';\nimport { isClose, isValidPoint, normalizeAngle } from '../../util';\nimport type { IPoint } from '../../typings';\n\nexport class PolarPointUpdate extends ACustomAnimate<{ x: number; y: number }> {\n declare valid: boolean;\n\n private _fromAngle: number;\n private _fromRadius: number;\n\n private _toAngle: number;\n private _toRadius: number;\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: { x: number; y: number; center: IPointLike },\n to: { x: number; y: number; center: IPointLike },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n if (!this._center || !this._prevCenter) {\n this.valid = false;\n }\n }\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return polarToCartesian(this._center, this._toRadius, this._toAngle);\n }\n\n onBind(): void {\n const { angle: fromAngle, radius: fromRadius } = cartesianToPolar(this.from, this._prevCenter);\n const { angle: toAngle, radius: toRadius } = cartesianToPolar(this.to, this._center);\n if (!isValidNumber(toAngle * toRadius)) {\n this.valid = false;\n }\n this._fromAngle = isValidNumber(fromAngle) ? fromAngle : toAngle;\n this._fromRadius = isValidNumber(fromRadius) ? fromRadius : toRadius;\n this._toAngle = toAngle;\n this._toRadius = toRadius;\n if (isClose(this._fromAngle, this._toAngle) && isClose(this._fromRadius, this._toRadius)) {\n this.valid = false;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n out.x = this.to.x;\n out.y = this.to.y;\n return;\n }\n if (end) {\n const { x, y } = this.getEndProps();\n out.x = x;\n out.y = y;\n out.center = this._center;\n } else {\n const { x, y } = polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n this._fromRadius + (this._toRadius - this._fromRadius) * ratio,\n this._fromAngle + (this._toAngle - this._fromAngle) * ratio\n );\n out.x = x;\n out.y = y;\n }\n }\n}\n\n// @ts-ignore\n// FIXME: some private attribute should be changed to protected for better inheritance\nexport class PolarTagPointsUpdate extends TagPointsUpdate {\n private declare points: IPointLike[];\n private declare interpolatePoints: [IPointLike, IPointLike][];\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n newPointAnimateType?: 'grow' | 'appear';\n }\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n }\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = this.polarPointInterpolation(\n this.interpolatePoints[index][0],\n this.interpolatePoints[index][1],\n ratio\n );\n if (end) {\n out.center = this._center;\n }\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n\n private _interpolationSinglePoint(pointA: IPoint, pointB: IPoint, ratio: number): IPoint {\n if (!isValidPoint(pointA) && !isValidPoint(pointB)) {\n return pointB;\n }\n const polarPointA = cartesianToPolar(pointA, this._prevCenter);\n const polarPointB = cartesianToPolar(pointB, this._center);\n let angleA = normalizeAngle(polarPointA.angle);\n let angleB = normalizeAngle(polarPointB.angle);\n\n // handle center point radius\n if (!isValidNumber(angleA) && isValidNumber(angleB)) {\n angleA = angleB;\n }\n if (isValidNumber(angleA) && !isValidNumber(angleB)) {\n angleB = angleA;\n }\n const angle = angleA + (angleB - angleA) * ratio;\n const radius = polarPointA.radius + (polarPointB.radius - polarPointA.radius) * ratio;\n\n return polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n radius,\n angle\n );\n }\n\n private polarPointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const { x, y } = this._interpolationSinglePoint(pointA, pointB, ratio);\n const { x: x1, y: y1 } = this._interpolationSinglePoint(\n {\n x: pointA.x1,\n y: pointA.y1\n },\n {\n x: pointB.x1,\n y: pointB.y1\n },\n ratio\n );\n\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n }\n}\n","import type { Datum, IAnimationTypeConfig, IElement, MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport { ClipAngleAnimate } from '@visactor/vrender-core';\nimport { Factory } from '../../core/factory';\nimport { PolarPointUpdate, PolarTagPointsUpdate } from '../polar/animation';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { registerArc } from '@visactor/vrender-kits';\nimport type { IRadarAnimationParams, RadarAppearPreset } from './interface';\n\nexport const radarFadeAnimation = (animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'fadeIn' : 'fadeOut'\n});\n\nexport const radarGrowAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'growPointsIn' : 'growPointsOut',\n options: () => ({\n center: params.center()\n })\n});\n\nexport function radarPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarGrowAnimation(params, animationType);\n }\n}\n\nexport const radarSymbolMoveAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => {\n const xFrom = () => params.center()?.x;\n const xTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('x');\n const yFrom = () => params.center()?.y;\n const yTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('y');\n if (animationType === 'in') {\n return {\n channel: {\n x: { from: xFrom, to: xTo },\n y: { from: yFrom, to: yTo }\n }\n };\n }\n return {\n channel: {\n x: { from: xTo, to: xFrom },\n y: { from: yTo, to: yFrom }\n }\n };\n};\n\nexport function radarSymbolPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarSymbolMoveAnimation(params, animationType);\n }\n}\n\nexport const radarGroupClipAnimation = (\n params: IRadarAnimationParams,\n animationType: 'in' | 'out'\n): IAnimationTypeConfig => {\n return {\n custom: ClipAngleAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n group: element.getGraphicItem(),\n startAngle: params.startAngle ?? Math.PI / 2,\n orient: 'clockwise',\n center: params.center(),\n radius: params.radius(),\n animationType\n };\n }\n };\n};\n\nexport const registerRadarAnimation = () => {\n Factory.registerAnimation('radar', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'in'),\n enter: radarPresetAnimation(params, preset, 'in'),\n exit: radarPresetAnimation(params, preset, 'out'),\n disappear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['points', 'defined', 'center'] }\n },\n {\n channel: ['points', 'center'],\n custom: PolarTagPointsUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec;\n });\n Factory.registerAnimation(\n 'radarSymbol',\n (params: IRadarAnimationParams, preset: RadarAppearPreset) =>\n ({\n appear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'in'),\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['x', 'y', 'center'] }\n },\n {\n channel: ['x', 'y', 'center'],\n custom: PolarPointUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec)\n );\n Factory.registerAnimation('radarGroup', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: radarGroupClipAnimation(params, 'in'),\n disappear: radarGroupClipAnimation(params, 'out')\n };\n });\n registerArc(); // clipAngle animation will use arc graphic\n};\n","/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { IAreaMark, ILineMark, IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { POLAR_START_RADIAN } from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { DEFAULT_LINEAR_INTERPOLATE } from '../../typings/interpolate';\nimport type { Datum } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { degreeToRadian, isArray, mixin, isValid } from '@visactor/vutils';\nimport type { IRadarAnimationParams, IRadarSeriesSpec, RadarAppearPreset } from './interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerRadarAnimation } from './animation';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { radarSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport interface RadarSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addOverlapCompile'\n >,\n RoseLikeSeries {}\n\nexport class RadarSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.radar;\n type = SeriesTypeEnum.radar;\n\n static readonly mark: SeriesMarkMap = radarSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer as any;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n private _areaMark: ILineMark;\n protected _sortDataByAxis: boolean = false;\n\n initGroups() {\n // do nothing\n }\n\n compile(): void {\n super.compile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n const seriesMark = this._spec.seriesMark ?? 'area';\n this.initAreaMark(progressive, isAreaVisible && seriesMark === 'area');\n this.initLineMark(progressive, seriesMark === 'line' || (seriesMark === 'area' && !isAreaVisible));\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initLineMarkStyle();\n this.initSymbolMarkStyle();\n [this._lineMark, this._symbolMark, this._areaMark].forEach(mark => {\n if (mark) {\n this.setMarkStyle(mark, {\n center: () => {\n return this.angleAxisHelper?.center();\n }\n });\n }\n });\n }\n\n initAreaMark(progressive: IMarkProgressiveConfig, isSeriesMark: boolean) {\n this._areaMark = this._createMark(\n RadarSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark,\n stateSort: this._spec.area?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.area?.customShape\n }\n ) as IAreaMark;\n }\n\n initAreaMarkStyle() {\n const areaMark = this._areaMark;\n if (areaMark) {\n this.setMarkStyle(\n areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).x;\n },\n y1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n\n const value = this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).y;\n return value;\n },\n fill: this.getColorAttribute(),\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(areaMark, 'defined');\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initAnimation() {\n const animationParams: IRadarAnimationParams = {\n center: () => this.angleAxisHelper?.center(),\n radius: () => {\n const rect = this.getLayoutRect();\n return Math.min(rect.width, rect.height);\n },\n startAngle: isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : POLAR_START_RADIAN\n };\n const appearPreset = ((this._spec?.animationAppear as IStateAnimateSpec)?.preset ??\n 'clipIn') as RadarAppearPreset;\n\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('radarGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n // TODO: animationType\n const markAnimationMap: [IMark, string][] = [\n [this._areaMark, 'radar'],\n [this._lineMark, 'radar'],\n [this._symbolMark, 'radarSymbol']\n ];\n\n // 为 mark 添加动画\n markAnimationMap.forEach(([mark, animation]) => {\n if (isValid(mark)) {\n const getAnimation = Factory.getAnimationInKey(animation);\n mark.setAnimationConfig(\n animationConfig(\n getAnimation?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && !result) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(RadarSeries, LineLikeSeriesMixin);\n\nexport const registerRadarSeries = () => {\n Factory.registerSeries(RadarSeries.type, RadarSeries);\n registerAreaMark();\n registerLineMark();\n registerSymbolMark();\n registerRadarAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { array } from '../../util';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from '../rose';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class RadarChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.line = spec.line;\n series.point = spec.point;\n series.stack = spec.stack;\n series.percent = spec.percent;\n series.area = mergeSpec(\n {\n visible: false\n },\n spec.area\n );\n series.seriesMark = spec.seriesMark ?? 'area';\n series.activePoint = spec.activePoint;\n series.pointDis = spec.pointDis;\n series.pointDisMul = spec.pointDisMul;\n series.markOverlap = spec.markOverlap;\n return series;\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴的domainLine和Tick\n (spec.axes ?? []).forEach((axis: any) => {\n if (axis.orient === 'radius') {\n ['domainLine', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (!axis.grid) {\n axis.grid = { visible: true };\n }\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'line'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRadarSeries } from '../../series/radar/radar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from '../rose';\nimport { RadarChartSpecTransformer } from './radar-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class RadarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.radar;\n static readonly seriesType: string = SeriesTypeEnum.radar;\n static readonly transformerConstructor = RadarChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RadarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.radar;\n readonly seriesType: string = SeriesTypeEnum.radar;\n}\n\nmixin(RadarChart, StackChartMixin);\n\nexport const registerRadarChart = () => {\n registerRadarSeries();\n Factory.registerChart(RadarChart.type, RadarChart);\n};\n","import type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { get, isObject } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICommonChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class CommonChartSpecTransformer extends BaseChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec) {\n const defaultSpec = super._getDefaultSeriesSpec(spec);\n // 组合图系列的默认配置由系列自身配置 data/dataIndex/dataId 决定,无需默认配置\n delete defaultSpec.data;\n return defaultSpec;\n }\n\n // common chart 支持 autoBandSize 配置\n protected _transformAxisSpec(spec: AdaptiveSpec) {\n if (!spec.axes) {\n return;\n }\n if (!!spec.autoBandSize) {\n // 遍历series\n // 1. 找到bar系列\n // 2. 如果bar系列配置了autoBandSize\n // 3. 找到bar系列对应的axis\n // 4. 为该axis配置bandSize\n spec.series.forEach((series: any, seriesIndex: number) => {\n if (series.type === 'bar') {\n const relatedAxis = this._findBandAxisBySeries(series, seriesIndex, spec.axes);\n if (relatedAxis && !relatedAxis.bandSize && !relatedAxis.maxBandSize && !relatedAxis.minBandSize) {\n const extend = isObject(series.autoBandSize) ? series.autoBandSize.extend ?? 0 : 0;\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = series;\n this._applyAxisBandSize(relatedAxis, extend, { barMaxWidth, barMinWidth, barWidth, barGapInGroup });\n }\n }\n });\n }\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.series && spec.series.length) {\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n if (spec.axes && spec.axes.length) {\n spec.axes.forEach((axis: any) => {\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n }\n this._transformAxisSpec(spec);\n }\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { ICommonChartSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { CommonChartSpecTransformer } from './common-transformer';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class CommonChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.common;\n static readonly transformerConstructor = CommonChartSpecTransformer;\n readonly transformerConstructor = CommonChartSpecTransformer;\n readonly type: string = ChartTypeEnum.common;\n}\n\nmixin(CommonChart, StackChartMixin);\n\nexport const registerCommonChart = () => {\n Factory.registerChart(CommonChart.type, CommonChart);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { ITooltipLinePattern, TooltipActiveType } from '../../typings';\nimport { TimeUtil } from '@visactor/vutils';\n\nexport class LinkSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType === 'mark';\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: 'link info',\n value: 'link info'\n };\n }\n\n shapeTypeCallback = () => {\n return 'square';\n };\n\n protected getDefaultContentList(): ITooltipLinePattern[] {\n return [\n {\n key: 'time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d %H:%M', datum.from.split('_')[1])\n },\n {\n key: 'type',\n value: (datum: any) => datum.action_type\n },\n {\n key: 'from',\n value: (datum: any) => datum.from\n },\n {\n key: 'to',\n value: (datum: any) => datum.to\n }\n ];\n }\n}\n","import { Factory } from './../core/factory';\nimport type { IRuleMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRuleMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRuleGraphic } from '@visactor/vgrammar-core';\n\nexport class RuleMark extends BaseMark implements IRuleMark {\n static readonly type = MarkTypeEnum.rule;\n readonly type = RuleMark.type;\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x1: 0,\n y1: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRuleMark = () => {\n Factory.registerMark(RuleMark.type, RuleMark);\n registerRuleGraphic();\n};\n","import type { Datum } from '../../typings';\n\nexport interface ILinkDotInfoOpt {\n infoKey: string;\n fields: () => {\n fromField: string;\n toField: string;\n xField: string | string[];\n yField: string | string[];\n };\n linkData: () => Datum[];\n dotData: () => Datum[];\n}\n\n/**\n * @description 根据link数据以及对应的dot数据生成node name和node data的哈希表,并将node data的信息放进来\n */\nexport const linkDotInfo = (data: Array, op: ILinkDotInfoOpt) => {\n const { infoKey, fields, linkData, dotData } = op;\n const { fromField, toField, xField, yField } = fields();\n const dataLinkObj = linkData();\n const dataDotObj = dotData();\n const dataLinkDotHash = {};\n\n // 遍历dot数据,生成哈希表\n dataDotObj.forEach((datum: any) => {\n const dataCopy: any = {};\n for (const key in datum) {\n if (key !== infoKey) {\n dataCopy[key] = datum[key];\n }\n }\n const dataOp = datum[infoKey];\n dataOp?.forEach((d: any) => {\n dataLinkDotHash[d.node_name] = Object.assign({}, dataCopy, d);\n });\n });\n\n // 将起始点的node data加入进来\n dataLinkObj.forEach((datum: any) => {\n datum[fromField + '_xField'] = dataLinkDotHash?.[datum[fromField]]?.[xField];\n datum[fromField + '_yField'] = dataLinkDotHash?.[datum[fromField]]?.[yField];\n datum[toField + '_xField'] = dataLinkDotHash?.[datum[toField]]?.[xField];\n datum[toField + '_yField'] = dataLinkDotHash?.[datum[toField]]?.[yField];\n });\n return dataLinkObj;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Datum } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport type { IGroupMark, IMark, IRuleMark, ISymbolMark } from '../../mark/interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { IDotSeriesSpec } from '../dot/interface';\nimport { LinkSeriesTooltipHelper } from './tooltip-helper';\nimport type { ILinkSeriesSpec } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { registerRuleMark } from '../../mark/rule';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { linkSeriesMark } from './constant';\nimport { linkDotInfo } from '../../data/transforms/link-dot-info';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class LinkSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.link;\n type = SeriesTypeEnum.link;\n\n static readonly mark: SeriesMarkMap = linkSeriesMark;\n\n protected _fromField?: string;\n getFromField() {\n return this._fromField;\n }\n setFromField(field: string) {\n if (isValid(field)) {\n this._fromField = field;\n }\n }\n\n protected _toField?: string;\n getToField() {\n return this._toField;\n }\n setToField(field: string) {\n if (isValid(field)) {\n this._toField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _dotSeriesSpec?: IDotSeriesSpec;\n getDotSeriesSpec() {\n return this._dotSeriesSpec;\n }\n setDotSeriesSpec(spec: IDotSeriesSpec) {\n if (isValid(spec)) {\n this._dotSeriesSpec = spec;\n }\n }\n\n protected _getDotData() {\n const dotSeries = this._option.getChart().getSeriesInIndex([this._spec.dotSeriesIndex])[0];\n if (!dotSeries) {\n return [];\n }\n return dotSeries.getRawData().latestData;\n }\n\n initData() {\n super.initData();\n\n registerDataSetInstanceTransform(this._option.dataSet, 'linkDotInfo', linkDotInfo);\n this.getViewData()?.transform(\n {\n type: 'linkDotInfo',\n options: {\n infoKey: 'dots',\n fields: () => {\n return {\n fromField: this._fromField,\n toField: this._toField,\n xField: this._dotSeriesSpec.xField,\n yField: this._dotSeriesSpec.yField\n };\n },\n linkData: () => this._rawData.latestData,\n dotData: () => this._getDotData()\n },\n level: TransformLevel.linkDotInfo\n },\n false\n );\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFromField(this._spec.fromField);\n this.setToField(this._spec.toField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setDotSeriesSpec(this._spec.dotSeriesSpec);\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _linkMark: IRuleMark;\n private _arrowMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(LinkSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(LinkSeries.mark.group, {\n parent: this._clipMark\n }) as IGroupMark;\n\n this._linkMark = this._createMark(LinkSeries.mark.link, {\n skipBeforeLayouted: false,\n parent: this._containerMark\n }) as IRuleMark;\n\n this._arrowMark = this._createMark(LinkSeries.mark.arrow, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setMarkConfig({ interactive: false, clip: true });\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding,\n width: this.getLayoutRect().width\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setMarkConfig({ interactive: false });\n }\n\n const linkMark = this._linkMark;\n if (linkMark) {\n this.setMarkStyle(\n linkMark,\n {\n stroke: this.getColorAttribute(),\n strokeOpacity: this.dataToOpacity.bind(this),\n x: this.dataToPositionXFrom.bind(this),\n y: this.dataToPositionYFrom.bind(this),\n x1: this.dataToPositionXTo.bind(this),\n y1: this.dataToPositionYTo.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const arrowMark = this._arrowMark;\n if (arrowMark) {\n const arrowSize = (this._theme?.arrow?.style?.size as number) ?? 10;\n this.setMarkStyle(\n arrowMark,\n {\n x: this.dataToPositionXTo.bind(this),\n y: (datum: Datum) => this.dataToPositionArrowYTo(datum, arrowSize), // csj-to do:箭头的dy不生效,暂时改变y position逻辑\n fill: this.getColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this),\n size: arrowSize,\n symbolType: (datum: Datum) => {\n return this.isPositionYFromHigher(datum) ? 'triangleDown' : 'triangleUp';\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n /** 以下函数用于定位link和arrow */\n\n dataToPositionXFrom(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYFrom(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_yField'));\n }\n\n dataToPositionXTo(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYTo(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionArrowYTo(datum: Datum, arrowSize: number): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n const offset = this.isPositionYFromHigher(datum) ? -arrowSize / 2 : arrowSize / 2;\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n }) + offset\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (\n this.isPositionXOuterRange(datum, this._fromField + '_xField') ||\n this.isPositionXOuterRange(datum, this._toField + '_xField') ||\n datum[this._fromField] === datum[this._toField]\n ) {\n return 0;\n }\n return 1;\n }\n\n /**\n * @description 用于判断link的箭头方向\n */\n isPositionYFromHigher(datum: Datum): boolean {\n return this.dataToPositionYFrom(datum) < this.dataToPositionYTo(datum);\n }\n\n /**\n * @description 用于判断link的起点、终点坐标是否超出range范围\n */\n isPositionXOuterRange(datum: Datum, field: string): boolean {\n if (!this._xAxisHelper) {\n return false;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * @override\n * @description 如果用户设置了dotType,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._dotTypeField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._linkMark) {\n marks.push(this._linkMark);\n }\n\n if (this._arrowMark) {\n marks.push(this._arrowMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinkSeriesTooltipHelper(this);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n this._arrowMark && this._tooltipHelper.activeTriggerSet.mark.add(this._arrowMark);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotInfoData() {\n return (this._linkMark ?? this._arrowMark)?.getData();\n }\n\n getActiveMarks(): IMark[] {\n return [this._linkMark, this._arrowMark];\n }\n}\n\nexport const registerLinkSeries = () => {\n registerRuleMark();\n registerSymbolMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(LinkSeries.type, LinkSeries);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type {\n Datum,\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n MaybeArray,\n TooltipActiveType,\n TooltipData,\n TooltipPatternProperty\n} from '../../typings';\nimport { TimeUtil } from '@visactor/vutils';\nimport type { ITooltipSpec } from '../../component/tooltip/interface/spec';\nimport type { TooltipHandlerParams } from '../../component/tooltip/interface/common';\n\nexport class DotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType === 'mark';\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: 'event info',\n value: 'event info'\n };\n }\n\n shapeTypeCallback = () => {\n return 'square';\n };\n\n protected getDefaultContentList(): MaybeArray>> {\n return [\n {\n key: (datum: any) => datum.type,\n value: (datum: any) => datum.id\n },\n {\n key: 'event_time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d', datum.event_time)\n },\n {\n key: 'action_type',\n value: (datum: any) => datum.action_type\n },\n {\n key: 'children',\n value: (datum: any) => {\n return datum.children;\n }\n }\n ];\n }\n\n getTooltipData(\n activeType: TooltipActiveType,\n chartTooltipSpec?: ITooltipSpec,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipActual | null {\n const res = super.getTooltipData(activeType, chartTooltipSpec, data, datum, params);\n const userUpdateContent = this.spec?.[activeType]?.updateContent ?? chartTooltipSpec?.[activeType]?.updateContent;\n\n if (res && !userUpdateContent) {\n res.updateContent = (prev: any, datum: any, params: any) => {\n const childrenContent: ITooltipLineActual[] = [];\n const childrenPrev = prev.filter((p: any) => p.key === 'children');\n\n childrenPrev.length > 0 &&\n childrenPrev[0].value.forEach((element: any) => {\n let flag = true;\n for (const key in element) {\n childrenContent.push({\n ...childrenPrev[0],\n shapeType: 'circle',\n hasShape: flag,\n key: key,\n value: element[key] + ''\n } as ITooltipLineActual);\n flag = false;\n }\n });\n return prev.concat(childrenContent);\n };\n }\n\n return res;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\n/**\n * @description 针对某个数组进行数据展开,将数组中的每个元素拆出来加入数据集\n */\nexport const objFlat = (data: Array, op: string) => {\n // 数据处理\n const dataCollect = data[0]?.latestData ? data[0].latestData : data || [];\n const result: any[] = [];\n dataCollect.forEach((datum: any) => {\n const dataKey: any = {};\n for (const key in datum) {\n if (key !== op) {\n dataKey[key] = datum[key];\n }\n }\n const dataOp = datum[op];\n dataOp?.forEach((d: any) => {\n result.push(Object.assign({}, dataKey, d));\n });\n });\n return result;\n};\n","export const DEFAULT_GRID_BACKGROUND = {\n fill: '#bbb',\n fillOpacity: 0.2\n};\n","import { Factory } from './../core/factory';\nimport type { IComposedTextMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkOption, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface';\nimport { registerRichTextGraphic, registerTextGraphic } from '@visactor/vgrammar-core';\nimport type { ITextMark, ITextSpec } from './interface/mark';\n\nexport class TextMark extends BaseMark implements ITextMark {\n static readonly type = MarkTypeEnum.text;\n readonly type = TextMark.type;\n\n protected _textType: 'text' | 'rich' = 'text';\n getTextType() {\n return this._textType;\n }\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n }\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n // TODO: 删除后会有显示问题,待排查\n angle: 0,\n textAlign: 'center',\n lineWidth: 0,\n textConfig: []\n };\n return defaultStyle;\n }\n\n initStyleWithSpec(spec: ITextSpec, key?: string) {\n super.initStyleWithSpec(spec, key);\n if (spec.textType) {\n this._textType = spec.textType;\n }\n }\n\n compileEncode() {\n super.compileEncode();\n if (this._textType === 'rich') {\n this._product.encodeState('group', { textType: this._textType });\n }\n }\n}\n\nexport const registerTextMark = () => {\n Factory.registerMark(TextMark.type, TextMark);\n registerTextGraphic();\n registerRichTextGraphic();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Datum } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { isValid } from '@visactor/vutils';\nimport type { IGroupMark, IMark, IRectMark, IRuleMark, ISymbolMark, ITextMark } from '../../mark/interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { dataViewParser } from '@visactor/vdataset';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport { DotSeriesTooltipHelper } from './tooltip-helper';\nimport type { FunctionType, IFillMarkSpec, VisualType } from '../../typings/visual';\nimport type { IDotSeriesSpec } from './interface';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { objFlat } from '../../data/transforms/obj-flat';\nimport { DEFAULT_GRID_BACKGROUND } from './config';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { registerRectMark } from '../../mark/rect';\nimport { dotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class DotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.dot;\n type = SeriesTypeEnum.dot;\n\n static readonly mark: SeriesMarkMap = dotSeriesMark;\n\n private _xDimensionStatisticsDomain: any[];\n\n // csj-Q: 是否需要把这些属性写成接口?\n protected _seriesGroupField?: string;\n getSeriesGroupField() {\n return this._seriesField;\n }\n setSeriesGroupField(field: string) {\n if (isValid(field)) {\n this._seriesGroupField = field;\n }\n }\n\n protected _titleField?: string;\n getTitleField() {\n return this._titleField;\n }\n setTitleField(field: string) {\n if (isValid(field)) {\n this._titleField = field;\n }\n }\n\n protected _subTitleField?: string;\n getSubTitleField() {\n return this._subTitleField;\n }\n setSubTitleField(field: string) {\n if (isValid(field)) {\n this._subTitleField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _highLightSeriesGroup?: string;\n getHighLightSeriesGroup() {\n return this._highLightSeriesGroup;\n }\n setHighLightSeriesGroup(field: string) {\n if (isValid(field)) {\n this._highLightSeriesGroup = field;\n }\n }\n\n protected _gridBackground?: IFillMarkSpec;\n setGridBackground(gridBackground: IFillMarkSpec) {\n if (isValid(gridBackground)) {\n this._gridBackground = gridBackground;\n }\n }\n\n /**\n * @override\n */\n initData(): void {\n super.initData();\n this._xDimensionStatisticsDomain = this.getRawData().latestData.map((d: Datum) => d[this._fieldY[0]]);\n\n // data to dataview\n registerDataSetInstanceTransform(this._option.dataSet, 'objFlat', objFlat);\n registerDataSetInstanceTransform(this._option.dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceParser(this._option.dataSet, 'dataview', dataViewParser);\n\n this.getViewData()?.transform(\n {\n type: 'objFlat',\n options: 'dots',\n level: TransformLevel.dotObjFlat\n },\n false\n );\n }\n\n getStatisticFields() {\n return [{ key: this._fieldY[0], operations: ['values'], customize: this._xDimensionStatisticsDomain }] as {\n key: string;\n operations: Array<'max' | 'min' | 'values'>;\n customize: any[];\n }[];\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setSeriesGroupField(this._spec.seriesGroupField);\n this.setTitleField(this._spec.titleField);\n this.setSubTitleField(this._spec.subTitleField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setHighLightSeriesGroup(this._spec.highLightSeriesGroup);\n this.setGridBackground(mergeSpec(DEFAULT_GRID_BACKGROUND, this._spec.grid?.background || {}));\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _gridBackgroundMark: IRectMark;\n private _gridMark: IRuleMark;\n private _dotMark: ISymbolMark;\n private _titleMark: ITextMark;\n private _subTitleMark: ITextMark;\n private _symbolMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(DotSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(DotSeries.mark.group, {\n parent: this._clipMark,\n dataView: this.getRawData()\n }) as IGroupMark;\n\n this._gridBackgroundMark = this._createMark(DotSeries.mark.gridBackground, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRectMark;\n\n this._gridMark = this._createMark(DotSeries.mark.grid, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRuleMark;\n\n this._dotMark = this._createMark(DotSeries.mark.dot, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n\n this._titleMark = this._createMark(DotSeries.mark.title, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._subTitleMark = this._createMark(DotSeries.mark.subTitle, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._symbolMark = this._createMark(DotSeries.mark.symbol, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setMarkConfig({ interactive: false, clip: true });\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setMarkConfig({ interactive: false });\n }\n\n const gridBackgroundMark = this._gridBackgroundMark;\n if (gridBackgroundMark) {\n this.setMarkStyle(\n gridBackgroundMark,\n {\n x: this.getRegionRectLeft.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y: this.dataToGridBackgroundPositionY.bind(this),\n y1: this.dataToGridBackgroundPositionY1.bind(this),\n fill: this._gridBackground.fill,\n fillOpacity: this.dataToGridBackgroundOpacity.bind(this) as FunctionType\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const gridMark = this._gridMark;\n if (gridMark) {\n this.setMarkStyle(\n gridMark,\n {\n stroke: this.getColorAttribute(),\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y1: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const dotMark = this._dotMark;\n if (dotMark) {\n this.setMarkStyle(\n dotMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getDotColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const titleMark = this._titleMark;\n if (titleMark) {\n this.setMarkStyle(\n titleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const subTitleMark = this._subTitleMark;\n if (subTitleMark) {\n this.setMarkStyle(\n subTitleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getSubTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const symbolMark = this._symbolMark;\n if (symbolMark) {\n this.setMarkStyle(\n symbolMark,\n {\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n dataToGridBackgroundPositionY(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) -\n getBandwidth(0) / 2\n );\n }\n\n dataToGridBackgroundPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) / 2\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return 0;\n }\n return this._theme?.dot?.style?.fillOpacity ?? 1;\n }\n\n dataToGridBackgroundOpacity(datum: Datum): VisualType {\n if (datum[this._seriesGroupField] === this._highLightSeriesGroup) {\n return this._gridBackground.fillOpacity;\n }\n return 0;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n const layoutOffsetX = this._spec?.leftAppendPadding ?? 0;\n this.setMarkStyle(\n this._clipMark,\n {\n width: this.getLayoutRect().width + layoutOffsetX //clip的数值只能在layoutEnd之后获得\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n /**\n * @override\n * @description 如果用户设置了seriesGroup,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /**\n * @override\n * @description 对于dot来说,dotType优先级高于seriesGroup,作为颜色映射字段\n */\n protected getDotColorScale() {\n const colorDomain = this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range(colorRange);\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getDotColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this.getDotColorScale(),\n field: this._dotTypeField ?? this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n protected initTooltip() {\n this._tooltipHelper = new DotSeriesTooltipHelper(this);\n this._dotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._dotMark);\n }\n\n /**\n * @description onEvaluateEnd之后可以拿到canvas element,将滚动条挂载到canvas element上\n */\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotData() {\n return this._dotMark?.getData();\n }\n\n protected _getDataIdKey() {\n // dot 系列没有动画,可以使用默认的 dataKey\n return undefined as any;\n }\n\n getStackValueField(): string {\n return null;\n }\n\n getActiveMarks(): IMark[] {\n return [this._dotMark];\n }\n}\n\nexport const registerDotSeries = () => {\n registerSymbolMark();\n registerRuleMark();\n registerRectMark();\n registerTextMark();\n\n Factory.registerSeries(DotSeries.type, DotSeries);\n};\n","export const SCROLL_BAR_DEFAULT_SIZE = 12;\n","import { array } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISequenceChartSpec, ISequenceSeriesSpec } from './interface';\nimport type { Datum, RegionSpec } from '../../typings';\nimport type { ICartesianAxisSpec, IScrollBarSpec } from '../../component';\nimport { SeriesTypeEnum } from '../../series';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { IGridLayoutSpec } from '../../layout';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../constant/scroll-bar';\n\nexport class SequenceChartSpecTransformer<\n T extends ISequenceChartSpec = ISequenceChartSpec\n> extends BaseChartSpecTransformer {\n private _getSeriesDataLength(spec: T, seriesSpec: any) {\n if (seriesSpec.data) {\n const _d = array(seriesSpec.data)[0];\n if (_d instanceof DataView) {\n return _d.latestData?.length;\n }\n return _d.values?.length;\n }\n const dataTemp = array(spec.data).find((_d, index) => {\n if (seriesSpec.dataId) {\n if (_d instanceof DataView) {\n return _d.name === seriesSpec.dataId;\n }\n return _d.id === seriesSpec.dataId;\n }\n return seriesSpec.dataIndex === index;\n });\n if (!dataTemp) {\n return 0;\n }\n if (dataTemp instanceof DataView) {\n return dataTemp.latestData.length;\n }\n return dataTemp.values.length;\n }\n\n addAttrToComponentSpec(componentSpec: any, attr: string, value: any) {\n if (Array.isArray(componentSpec)) {\n componentSpec[0][attr] = value;\n } else {\n componentSpec[attr] = value;\n }\n return componentSpec;\n }\n\n addPaddingRow(rowHeight: any[], rowNum: number, size: number) {\n rowHeight.push({\n index: rowNum,\n size\n });\n }\n\n addOrientAxes(region: RegionSpec[], elements: any[], rowNum: number, spec: T) {\n // Tips: id should not has duplicate name\n region.push({\n id: `regionAxesRow${rowNum}`\n });\n elements.push({\n modelId: `axesRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n spec.axes[0].id = `axesRow${rowNum}`;\n spec.axes[0].regionIndex = Array.from(Array(spec.series.length), (_, index) =>\n spec.axes[0].orient === 'top' ? index + 1 : index\n );\n }\n\n /**\n * @override\n * @description 主要是处理布局逻辑 & 部分仅针对sequenceChart的特殊属性\n */\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // 初始化目标属性\n let rowNum = 0;\n const elements: any[] = [];\n const region: RegionSpec[] = [];\n const axes: ICartesianAxisSpec[] = [];\n const scrollBar: IScrollBarSpec[] = [];\n const rowHeight: any[] = [];\n\n // FIXME: 重构之前这里取的是 chart 上的 this._layoutRect,这里有点问题。\n // 重构之前 chart 上的 transformSpec() 本来就在布局之前执行,\n // 原始代码中的 this._layoutRect 中取到的永远是常量 { width: 500, height: 500 }。\n // 重构之后保留这个 mock 值,可以尽快修改下 @skie1997\n const viewLayoutRect = {\n width: this._option.getCompiler().getVGrammarView().width(),\n height: this._option.getCompiler().getVGrammarView().height()\n };\n let componentsHeight = 0;\n const defaultcomponentsHeight = 60;\n const defaultComponentRowHeight = 10;\n if (spec?.legends) {\n elements.push({\n modelId: `legendRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.legends, 'id', `legendRow${rowNum}`);\n // legend offset 和 padding 兼容处理\n const legendSpec = array(spec.legends);\n let legendHeight = (legendSpec[0].height as number) ?? 40;\n if (legendSpec[0].padding) {\n const legendPadding = normalizeLayoutPaddingSpec(legendSpec[0].padding);\n legendHeight += Number(legendPadding?.bottom ?? 0);\n legendHeight += Number(legendPadding?.top ?? 0);\n legendSpec[0].offsetY = Number(legendSpec[0]?.offsetY ?? 0) + Number(legendPadding?.top ?? 0);\n }\n rowHeight.push({\n index: rowNum,\n size: legendHeight\n });\n componentsHeight += legendHeight;\n rowNum++;\n }\n\n if (spec?.dataZoom) {\n elements.push({\n modelId: `dataZoomRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.dataZoom, 'id', `dataZoomRow${rowNum}`);\n componentsHeight += defaultcomponentsHeight;\n rowNum++;\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, 10);\n componentsHeight += defaultComponentRowHeight;\n rowNum++;\n }\n\n // 遍历axes\n // 1. 在elements中添加时间轴元素\n // 2. 并统计rowNum\n // 在sequenceChart中,axes有几种情况(本期考虑1/2/3,也就是默认只有1个top/bottom轴):1.不声明axes 2.声明且为仅有一个top axes 3.声明且仅有一个bottom axes 4.多个axes组合\n componentsHeight += defaultcomponentsHeight;\n if (spec.axes === null || spec?.axes?.[0]?.orient === 'top') {\n this.addOrientAxes(region, elements, rowNum, spec);\n rowNum++;\n }\n\n // 计算默认series padding和series高度\n const defaultSeriesPadding = 20;\n const seriesRegionNum = spec.series.filter(d => d.type !== SeriesTypeEnum.link).length;\n const defaultSeriesRowHeight =\n (viewLayoutRect.height - componentsHeight - defaultSeriesPadding * seriesRegionNum) / seriesRegionNum;\n const leftAppendPadding = spec?.appendPadding?.left || 0;\n const rightAppendPadding = spec?.appendPadding?.right || 0;\n\n // 遍历series\n // 1. 在spec.layout => elements、region数组和spec.axes的数组中中添加元素\n // 2. 为series绑定regionIndex\n // 3. 统计rowNum\n // 4. 用空行拟合series padding\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (\n ([SeriesTypeEnum.bar, SeriesTypeEnum.line, SeriesTypeEnum.area, SeriesTypeEnum.dot] as string[]).includes(\n seriesSpec.type\n )\n ) {\n // elements数组\n elements.push({\n modelId: `${seriesSpec.type}Row${rowNum}`,\n col: 1,\n row: rowNum\n });\n elements.push({\n modelId: `axesLeftRow${rowNum}`,\n col: 0,\n row: rowNum\n });\n\n // region数组\n region.push({\n id: `${seriesSpec.type}Row${rowNum}`,\n clip: false\n });\n\n rowHeight.push({\n index: rowNum,\n size: seriesSpec?.height || defaultSeriesRowHeight\n });\n\n // axes数组添加left axes(每个series都需要一个left axes)\n axes.push({\n orient: 'left',\n id: `axesLeftRow${rowNum}`,\n type: seriesSpec.type === SeriesTypeEnum.dot ? 'band' : 'linear',\n visible: seriesSpec.type !== SeriesTypeEnum.dot,\n\n // 对于bar series,axes title模拟bar title\n title: {\n visible: true,\n // 特殊处理时序图的 title 样式,默认的坐标轴左右轴会进行旋转\n autoRotate: false,\n style: {\n text: (seriesSpec as any)?.barTitle,\n dx: -20,\n textBaseline: 'middle',\n textAlign: 'end'\n }\n },\n // 对于bar series,axes grid模拟series分割线\n grid: {\n visible:\n typeof (seriesSpec as any)?.grid?.visible === 'boolean' ? (seriesSpec as any)?.grid?.visible : true, // bar grid默认绘制\n style: (datum: Datum, index: number) => {\n let lineWidth = 0;\n if (index === 0) {\n const style = (seriesSpec as any)?.grid?.style;\n\n // 兼容一下spec中通过strokeWidth申明的方式\n lineWidth = style?.lineWidth ?? style?.strokeWidth ?? 1;\n }\n return {\n lineWidth,\n stroke: (seriesSpec as any)?.grid?.style?.stroke || '#dfdfdf',\n lineDash: [0, 0]\n };\n }\n },\n // 其他轴元素隐藏\n domainLine: {\n visible: false\n },\n tick: {\n visible: false\n },\n label: {\n visible: false\n },\n\n // 绑定regionIndex\n regionIndex: region.length - 1\n });\n\n // scrollBar 内置\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n elements.push({\n modelId: `scrollBarRightRow${rowNum}`,\n col: 2,\n row: rowNum\n });\n const dataLength = this._getSeriesDataLength(spec, seriesSpec);\n let ratio = 0;\n if (dataLength) {\n ratio = (seriesSpec?.height || defaultSeriesRowHeight) / (dataLength * 30);\n }\n // scrollBar数组增加一个right scrollBar\n scrollBar.push({\n orient: 'right',\n visible: seriesSpec.type === SeriesTypeEnum.dot && ratio < 1,\n id: `scrollBarRightRow${rowNum}`,\n start: 0,\n end: Math.min(ratio, 1),\n filterMode: 'axis',\n regionIndex: region.length - 1,\n axisId: `axesLeftRow${rowNum}`,\n ...array(spec?.scrollBar)[0]\n });\n }\n\n // seriesSpec绑定regionIndex\n seriesSpec.regionIndex = region.length - 1;\n rowNum++;\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, seriesSpec?.padding || defaultSeriesPadding);\n rowNum++;\n\n // chart的leftAppendPadding用于具体元素的dx偏移\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n\n // title和subTitle自动定位到画布最左端\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n (seriesSpec as any).title.style.dx = -leftAppendPadding;\n (seriesSpec as any).subTitle.style.dx = -leftAppendPadding;\n }\n }\n });\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, defaultSeriesPadding);\n rowNum++;\n\n // 对于link series,所有属性跟随它绑定的dot series\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (seriesSpec.type === SeriesTypeEnum.link) {\n const dotRowNum = seriesSpec.dotSeriesIndex + 1;\n elements.push({\n modelId: `${seriesSpec.type}Row${dotRowNum}`,\n col: 1,\n row: dotRowNum - 1\n });\n seriesSpec.regionIndex = spec.series[seriesSpec.dotSeriesIndex].regionIndex;\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n (seriesSpec as any).height = (spec.series[seriesSpec.dotSeriesIndex] as any).height;\n (seriesSpec as any).clipHeight = (spec.series[seriesSpec.dotSeriesIndex] as any).clipHeight;\n }\n });\n\n // 添加legends和datazoom的regionIndex\n if (spec?.legends) {\n this.addAttrToComponentSpec(spec.legends, 'regionIndex', [region.length - 1]);\n }\n // if ((spec as any)?.dataZoom) {\n // (spec as any).dataZoom[0].regionIndex = Array.from({length: region.length - 1},(item, index)=> index+1);\n // }\n\n if (spec?.axes?.[0]?.orient === 'bottom') {\n this.addOrientAxes(region, elements, rowNum, spec);\n rowNum++;\n }\n\n const layout: IGridLayoutSpec = {\n type: 'grid',\n col: 4,\n row: rowNum,\n colWidth: [\n {\n index: 0,\n size: leftAppendPadding\n },\n {\n index: 2,\n size: SCROLL_BAR_DEFAULT_SIZE\n },\n {\n index: 3,\n size: rightAppendPadding\n }\n ],\n rowHeight: rowHeight,\n elements: elements\n };\n\n spec.layout = layout;\n spec.region = region;\n spec.axes?.push(...axes);\n spec.scrollBar = scrollBar;\n }\n}\n","import { registerLinkSeries } from '../../series/link/link';\nimport { registerDotSeries } from '../../series/dot/dot';\nimport { BaseChart } from '../base/base-chart';\nimport type { ISequenceChartSpec } from './interface';\nimport type { IRegion } from '../../region/interface';\nimport { Factory } from '../../core/factory';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISeriesConstructor, ISeriesOption } from '../../series/interface';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { SequenceChartSpecTransformer } from './sequence-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport class SequenceChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sequence;\n static readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sequence;\n\n /**\n * @override\n * @description 主要是将link series关联的dot data放到link series中\n */\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n if (spec.type === SeriesTypeEnum.link) {\n spec.dotSeriesSpec = this._spec.series[spec.dotSeriesIndex];\n }\n\n let region: IRegion | undefined;\n if (spec.regionId) {\n region = this.getRegionsInUserId(spec.regionId);\n }\n if (!region) {\n region = this.getRegionsInIndex(spec.regionIndex ? [spec.regionIndex] : undefined)[0];\n }\n if (!region) {\n return;\n }\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n region,\n specKey: 'series',\n globalScale: this._globalScale\n } as ISeriesOption);\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n}\n\nexport const registerSequenceChart = () => {\n registerDotSeries();\n registerLinkSeries();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerChart(SequenceChart.type, SequenceChart);\n};\n","import type { ICartesianAxisCommonSpec } from '../../../component/axis';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IHistogramChartSpec } from '../interface';\n\nexport class BaseHistogramChartSpecTransformer extends CartesianChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n spec.axes.forEach((axis: ICartesianAxisCommonSpec) => (axis.type = 'linear'));\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['x2Field', 'y2Field', 'barMinHeight', 'barBackground']);\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport type { IHistogramChartSpec } from '../interface';\nimport { BaseHistogramChartSpecTransformer } from './histogram-base-transformer';\n\nexport class BaseHistogramChart extends BaseChart {\n static readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n}\n\nmixin(BaseHistogramChart, StackChartMixin);\n","import { setDefaultCrosshairForCartesianChart } from '../util';\nimport { BaseHistogramChartSpecTransformer } from './base';\nimport type { IHistogramChartSpec } from './interface';\n\nexport class HistogramChartSpecTransformer<\n T extends IHistogramChartSpec = IHistogramChartSpec\n> extends BaseHistogramChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BaseHistogramChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IHistogramChartSpec } from './interface';\nimport { HistogramChartSpecTransformer } from './histogram-transformer';\n\nexport class HistogramChart extends BaseHistogramChart {\n static readonly type: string = ChartTypeEnum.histogram;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram;\n readonly seriesType: string = SeriesTypeEnum.bar;\n}\n\nexport const registerHistogramChart = () => {\n registerBarSeries();\n Factory.registerChart(HistogramChart.type, HistogramChart);\n};\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseHistogramChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IHistogram3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { HistogramChartSpecTransformer } from '../histogram-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Histogram3dChart extends BaseHistogramChart> {\n static readonly type: string = ChartTypeEnum.histogram3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\nexport const registerHistogram3dChart = () => {\n register3DPlugin();\n registerBar3dSeries();\n Factory.registerChart(Histogram3dChart.type, Histogram3dChart);\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport { degreeToRadian, isNil, isValid, isValidNumber, binaryFuzzySearch } from '@visactor/vutils';\nimport { SEGMENT_FIELD_START, STACK_FIELD_END, STACK_FIELD_START } from '../../../constant/data';\nimport { POLAR_END_RADIAN, POLAR_START_RADIAN } from '../../../constant/polar';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport type { IGroupMark, IMarkStyle } from '../../../mark/interface';\nimport type { ConvertToMarkStyleSpec, ICommonSpec } from '../../../typings';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { PolarSeries } from '../polar';\nimport type { IContinuousTickData, IProgressLikeSeriesSpec } from './interface';\nimport type { IPolarAxis, IPolarAxisSpec } from '../../../component/axis';\nimport { createArc, createRect } from '@visactor/vrender-core';\nimport type { SeriesMarkMap } from '../../interface';\nimport { progressLikeSeriesMark } from './constant';\n\nexport abstract class ProgressLikeSeries extends PolarSeries {\n static readonly mark: SeriesMarkMap = progressLikeSeriesMark;\n\n protected _startAngle: number;\n protected _endAngle: number;\n\n protected _arcGroupMark: IGroupMark | null = null;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n const chartSpec = this._option.globalInstance.getChart()?.getSpec() as any;\n const startAngle = this._spec.startAngle ?? chartSpec?.startAngle;\n this._startAngle = isValid(startAngle) ? degreeToRadian(startAngle) : POLAR_START_RADIAN;\n const endAngle = this._spec.endAngle ?? chartSpec?.endAngle;\n this._endAngle = isValid(endAngle) ? degreeToRadian(endAngle) : POLAR_END_RADIAN;\n\n // 值信息给角度\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n // 分类信息给半径\n this.setRadiusField(this._spec.categoryField || this._spec.radiusField);\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n }\n\n getStackGroupFields(): string[] {\n return this._radiusField;\n }\n\n getStackValueField() {\n return this._angleField?.[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n /** 重载 mark style 赋值前转换逻辑 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle = super._convertMarkStyle(style) as unknown as any;\n\n const fillKey = 'fill';\n if (newStyle[fillKey]) {\n const value = style[fillKey] as unknown as any;\n // 为环形渐变色自动加 startAngle 和 endAngle\n if (value?.gradient === 'conical' && !isValid(value?.startAngle) && !isValid(value?.endAngle)) {\n newStyle[fillKey] = {\n ...value,\n startAngle: this._startAngle,\n endAngle: this._endAngle\n };\n }\n }\n\n return newStyle;\n }\n\n protected _getAngleValueStart = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this.getStack() ? STACK_FIELD_START : SEGMENT_FIELD_START;\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n let pos: number | undefined;\n if (isValid(originValue)) {\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n index >= subTickData.length || originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value - step / 2 // 确保占满整个 tick mask\n ]);\n }\n }\n if (isNil(pos)) {\n pos = this.angleAxisHelper.dataToPosition(\n [subTickData[0].value - step / 2] // 确保空出整个 tick mask\n );\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueStartWithoutMask(datum);\n };\n\n protected _getAngleValueEnd = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this.getStack() ? STACK_FIELD_END : this._angleField[0];\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n index >= subTickData.length || originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n let pos: number;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value + step / 2 // 确保占满整个 tick mask\n ]);\n } else {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[0].value - step / 2 // 确保空出整个 tick mask\n ]);\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueEndWithoutMask(datum);\n };\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n if (this.getStack()) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_START]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this._startAngle;\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n if (this.getStack()) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_END]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]]);\n }\n\n getDimensionField(): string[] {\n return this._specRadiusField;\n }\n\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n initMark(): void {\n this._initArcGroupMark();\n }\n\n initMarkStyle(): void {\n this._initArcGroupMarkStyle();\n }\n\n protected _initArcGroupMark() {\n // FIXME: disable group mark layout to prevent reevaluate after layout end\n this._arcGroupMark = this._createMark(ProgressLikeSeries.mark.group, {\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._arcGroupMark;\n }\n\n protected _initArcGroupMarkStyle() {\n const groupMark = this._arcGroupMark;\n groupMark.created();\n this.setMarkStyle(\n groupMark,\n {\n x: 0,\n y: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n this._arcGroupMark.setMarkConfig({\n interactive: false,\n zIndex: this.layoutZIndex,\n clip: true,\n clipPath: () => {\n const axis = this._getAngleAxis();\n if (this._isTickMaskVisible(axis)) {\n const { tickMask } = this._spec;\n const { angle, offsetAngle, style = {} } = tickMask;\n const subTickData = this._getAngleAxisSubTickData(axis);\n const { x, y } = this.angleAxisHelper.center();\n const radius = this._computeLayoutRadius();\n const markStyle = style as any;\n return subTickData.map(({ value }) => {\n const pos = this.angleAxisHelper.dataToPosition([value]) + degreeToRadian(offsetAngle);\n const angleUnit = degreeToRadian(angle) / 2;\n return createArc({\n ...markStyle,\n x,\n y,\n startAngle: pos - angleUnit,\n endAngle: pos + angleUnit,\n innerRadius: radius * this._innerRadius,\n outerRadius: radius * this._outerRadius,\n fill: true\n });\n });\n }\n const { width, height } = this.getLayoutRect();\n return [\n createRect({\n width,\n height,\n fill: true\n })\n ];\n }\n });\n }\n\n protected _getAngleAxis() {\n if (!this.angleAxisHelper) {\n return undefined;\n }\n const angleAxisId = this.angleAxisHelper.getAxisId();\n const angleAxis = this._option\n .getChart()\n .getAllComponents()\n .find(component => component.id === angleAxisId) as IPolarAxis;\n return angleAxis;\n }\n\n protected _getAngleAxisTickData(angleAxis?: IPolarAxis): IContinuousTickData[] {\n const tickData = angleAxis?.getTickData()?.getLatestData();\n return tickData;\n }\n\n protected _isTickMaskVisible(angleAxis?: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n const { tickMask } = this._spec;\n return tickMask && tickMask.visible !== false && tickData?.length > 1;\n }\n\n protected _getAngleAxisSubTickData(angleAxis: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n // TODO: 这块照搬了 vrender-components 的计算方法,需要抽出这块的公用逻辑\n const subTickData: IContinuousTickData[] = [];\n const { subTick = {}, tick = {} } = (angleAxis?.getSpec() ?? {}) as IPolarAxisSpec;\n const { tickCount: subTickCount = 4 } = subTick;\n const { alignWithLabel } = tick;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickData?.length >= 2) {\n const tickSegment = tickData[1].value - tickData[0].value;\n for (let i = 0; i < tickData.length - 1; i++) {\n const pre = tickData[i];\n const next = tickData[i + 1];\n subTickData.push(pre);\n for (let j = 0; j < subTickCount; j++) {\n const percent = (j + 1) / (subTickCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n subTickData.push({\n value\n });\n }\n }\n subTickData.push(tickData[tickData.length - 1]);\n return subTickData;\n }\n return tickData;\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../../core/factory';\nimport type { IProgressLikeAnimationParams, ProgressLikeAppearPreset } from './interface';\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n type: 'growAngleIn',\n options: {\n overall: params.startAngle\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function progressLikePresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerProgressLikeAnimation = () => {\n Factory.registerAnimation(\n 'circularProgress',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => ({\n appear: progressLikePresetAnimation(params, preset),\n enter: { type: 'growAngleIn' },\n disappear: { type: 'growAngleOut' }\n })\n );\n};\n","import { BaseSeriesSpecTransformer } from '../../base';\nimport type { ICircularProgressSeriesSpec, ICircularProgressSeriesTheme } from './interface';\n\nexport class CircularProgressSeriesSpecTransformer<\n T extends ICircularProgressSeriesSpec = ICircularProgressSeriesSpec,\n K extends ICircularProgressSeriesTheme = ICircularProgressSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { BandScale } from '@visactor/vscale';\nimport type { Datum } from '../../../typings';\nimport { isValidNumber } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport type { ICircularProgressSeriesSpec } from './interface';\nimport { ProgressLikeSeries } from '../../polar/progress-like/progress-like';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport { registerArcMark } from '../../../mark/arc';\nimport { circularProgressSeriesMark } from './constant';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../../constant/data';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport { Factory } from '../../../core/factory';\nimport { registerProgressLikeAnimation } from '../../polar/progress-like';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IArcMark, IMark } from '../../../mark/interface';\nimport { CircularProgressSeriesSpecTransformer } from './circular-transformer';\nimport { registerPolarLinearAxis, registerPolarBandAxis } from '../../../component/axis/polar';\n\nexport class CircularProgressSeries<\n T extends ICircularProgressSeriesSpec = ICircularProgressSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.circularProgress;\n type = SeriesTypeEnum.circularProgress;\n\n static readonly mark: SeriesMarkMap = circularProgressSeriesMark;\n static readonly transformerConstructor = CircularProgressSeriesSpecTransformer as any;\n readonly transformerConstructor = CircularProgressSeriesSpecTransformer;\n\n private _progressMark: IArcMark | null = null;\n private _trackMark: IArcMark | null = null;\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getGroupFields() {\n return this._radiusField;\n }\n\n initMark(): void {\n super.initMark();\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(\n CircularProgressSeries.mark.progress,\n {\n parent: this._arcGroupMark,\n isSeriesMark: true,\n stateSort: this._spec.progress?.stateSort\n },\n {\n setCustomizedShape: this._spec.progress?.customShape\n }\n ) as IArcMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n this.setMarkStyle(\n progressMark,\n {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart,\n endAngle: this._getAngleValueEnd,\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._trackMark) {\n marks.push(this._trackMark);\n }\n\n if (this._progressMark) {\n marks.push(this._progressMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n }\n\n private _initTrackMark() {\n this._trackMark = this._createMark(\n CircularProgressSeries.mark.track,\n {\n parent: this._arcGroupMark,\n stateSort: this._spec.track?.stateSort\n },\n {\n setCustomizedShape: this._spec.track?.customShape\n }\n ) as IArcMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(\n trackMark,\n {\n visible: (datum: Datum) => {\n const scale = this.angleAxisHelper.getScale(0);\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const startValue = this._getAngleValueStartWithoutMask(datum);\n // 堆叠情况只显示第一组的背景\n return Math.abs(startValue - min) <= 1e-14;\n },\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: () => {\n const fieldName = this.getStack() ? STACK_FIELD_START : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueStart({ [fieldName]: domain[0] });\n },\n endAngle: () => {\n const fieldName = this.getStack() ? STACK_FIELD_END : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueEnd({ [fieldName]: domain[domain.length - 1] });\n },\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 100\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected _getRadiusValueStart = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value = this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields()));\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]);\n };\n\n protected _getRadiusValueEnd = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value =\n this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.radiusAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0);\n if (isValidNumber(value)) {\n return value;\n }\n }\n return (\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]) +\n (this.radiusAxisHelper.getScale(0) as BandScale).step()\n );\n };\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.({ startAngle: this._startAngle }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerCircularProgressSeries = () => {\n Factory.registerSeries(CircularProgressSeries.type, CircularProgressSeries);\n registerArcMark();\n registerProgressLikeAnimation();\n registerFadeInOutAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec, IPolarLinearAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class ProgressLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec, ['startAngle', 'endAngle', 'centerX', 'centerY']);\n\n series.categoryField = spec.categoryField || spec.radiusField;\n series.valueField = spec.valueField || spec.angleField;\n\n return series;\n }\n\n protected _transformProgressAxisSpec(\n spec: T,\n angleAxisDefaultSpec: IPolarAxisSpec,\n radiusAxisDefaultSpec: IPolarAxisSpec,\n angleAxisAppendSpec?: Partial,\n radiusAxisAppendSpec?: Partial\n ): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n // 找到用户配的角度轴和半径轴\n let radiusAxis: IPolarBandAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'radius');\n let angleAxis: IPolarLinearAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'angle');\n // 如果没有找到对应的轴,则自动补充默认配置\n if (!angleAxis) {\n angleAxis = angleAxisDefaultSpec;\n spec.axes.push(angleAxis);\n }\n if (!radiusAxis) {\n radiusAxis = radiusAxisDefaultSpec;\n spec.axes.push(radiusAxis);\n }\n\n // 在以上配置的基础上,对轴 spec 进行统一修改\n\n // 自动补充缺失的配置\n if (isNil(angleAxis.type)) {\n angleAxis.type = 'linear';\n }\n if (isNil(radiusAxis.type)) {\n radiusAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(angleAxis, { min: 0, max: 1 });\n if (isNil(angleAxis.min)) {\n angleAxis.min = domain.min;\n }\n if (isNil(angleAxis.max)) {\n angleAxis.max = domain.max;\n }\n\n // merge 额外的配置\n if (angleAxisAppendSpec) {\n Object.assign(angleAxis, mergeSpec({}, angleAxisAppendSpec, angleAxis));\n }\n if (radiusAxisAppendSpec) {\n Object.assign(radiusAxis, mergeSpec({}, radiusAxisAppendSpec, radiusAxis));\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../../polar';\nimport type { ICircularProgressChartSpec } from './interface';\n\nexport class CircularProgressChartSpecTransformer<\n T extends ICircularProgressChartSpec = ICircularProgressChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n\n series.progress = spec.progress;\n series.track = spec.track;\n series.tickMask = spec.tickMask;\n series.cornerRadius = spec.cornerRadius ?? 0;\n series.roundCap = spec.roundCap ?? false;\n return series;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: false\n },\n {\n orient: 'radius',\n visible: false\n },\n {\n forceInitTick: spec.tickMask && spec.tickMask.visible !== false\n }\n );\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface';\nimport { registerCircularProgressSeries } from '../../../series/progress/circular';\nimport { Factory } from '../../../core/factory';\nimport type { ICircularProgressChartSpec } from './interface';\nimport { CircularProgressChartSpecTransformer } from './circular-progress-transformer';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class CircularProgressChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.circularProgress;\n static readonly seriesType: string = SeriesTypeEnum.circularProgress;\n static readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circularProgress;\n readonly seriesType: string = SeriesTypeEnum.circularProgress;\n}\n\nmixin(CircularProgressChart, StackChartMixin);\n\nexport const registerCircularProgressChart = () => {\n registerCircularProgressSeries();\n Factory.registerChart(CircularProgressChart.type, CircularProgressChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core';\n\nexport type ProgressLikeAppearPreset = 'grow' | 'fadeIn';\n\nexport interface IProgressLikeAnimationParams {\n startAngle?: number;\n}\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n channel: {\n angle: {\n from: params.startAngle + Math.PI / 2\n }\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function gaugePointerPresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerGaugePointerAnimation = () => {\n Factory.registerAnimation(\n 'gaugePointer',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => {\n const animation = gaugePointerPresetAnimation(params, preset);\n return {\n appear: animation,\n enter: animation,\n disappear: { type: 'fadeOut' }\n };\n }\n );\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport type { IGaugePointerSeriesSpec, IGaugePointerSeriesTheme } from './interface';\n\nexport class GaugePointerSeriesSpecTransformer<\n T extends IGaugePointerSeriesSpec = IGaugePointerSeriesSpec,\n K extends IGaugePointerSeriesTheme = IGaugePointerSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { TooltipActiveType } from '../../typings';\n\nexport class GaugePointerTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IMark, IPathMark, IRectMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { clamp, isValid, maxInArray, minInArray } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugePointerSeriesSpec, PinMarkSpec, PointerMarkSpec } from './interface';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { ProgressLikeSeries } from '../polar/progress-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPathMark } from '../../mark/path';\nimport { registerRectMark } from '../../mark/rect';\nimport { gaugePointerSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerGaugePointerAnimation } from './animation';\nimport { GaugePointerSeriesSpecTransformer } from './gauge-pointer-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\nimport { GaugePointerTooltipHelper } from './pointer-tooltip-helper';\n\nexport class GaugePointerSeries<\n T extends IGaugePointerSeriesSpec = IGaugePointerSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gaugePointer;\n type = SeriesTypeEnum.gaugePointer;\n\n static readonly mark: SeriesMarkMap = gaugePointerSeriesMark;\n static readonly transformerConstructor = GaugePointerSeriesSpecTransformer as any;\n readonly transformerConstructor = GaugePointerSeriesSpecTransformer;\n\n private _pinMark: IPathMark | null = null;\n private _pointerMark: IPathMark | IRectMark | null = null;\n private _pinBackgroundMark: IPathMark | null = null;\n\n protected _pointerType: MarkTypeEnum;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n // 半径信息\n this.setRadiusField(this._spec.radiusField);\n\n this._pointerType = this._spec.pointer?.type === 'rect' ? MarkTypeEnum.rect : MarkTypeEnum.path;\n }\n\n initMark(): void {\n this._pinBackgroundMark = this._createMark(GaugePointerSeries.mark.pinBackground) as IPathMark;\n this._pointerMark = this._createMark(\n {\n ...GaugePointerSeries.mark.pointer,\n type: this._pointerType\n },\n {\n isSeriesMark: true\n }\n ) as IPathMark;\n this._pinMark = this._createMark(GaugePointerSeries.mark.pin) as IPathMark;\n }\n\n initMarkStyle(): void {\n this.initPinBackgroundMarkStyle();\n this.initPointerMarkStyle();\n this.initPinMarkStyle();\n }\n\n initGroups() {\n // do nothing\n }\n\n private initPointerMarkStyle() {\n const pointerMark = this._pointerMark;\n const pointerSpec = this._spec.pointer;\n if (pointerMark) {\n this.setMarkStyle(pointerMark, {\n x: (datum: Datum) => {\n const { x } = this._getPointerAnchor(datum, pointerSpec);\n const dx = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n return x - dx;\n },\n y: (datum: Datum) => {\n const { y } = this._getPointerAnchor(datum, pointerSpec);\n const dy = this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n return y - dy;\n },\n anchor: (datum: Datum) => {\n const { x, y } = this._getPointerAnchor(datum, pointerSpec);\n return [x, y];\n },\n fill: this.getColorAttribute(),\n zIndex: 200\n });\n if (this._pointerType === MarkTypeEnum.path) {\n this.setMarkStyle(pointerMark as IPathMark, {\n scaleX: this._getPointerWidth.bind(this),\n scaleY: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) + Math.PI / 2\n });\n } else {\n this.setMarkStyle(pointerMark as IRectMark, {\n width: this._getPointerWidth.bind(this),\n height: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) - Math.PI / 2\n });\n }\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new GaugePointerTooltipHelper(this);\n\n this._pointerMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pointerMark);\n }\n\n protected _getPointerAnchor(datum: Datum, markSpec: PinMarkSpec | PointerMarkSpec) {\n if (markSpec.isOnCenter ?? true) {\n return this.angleAxisHelper.center();\n }\n return this.radiusAxisHelper.coordToPoint({\n radius: this._innerRadius * this._computeLayoutRadius(),\n angle: this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]])\n });\n }\n\n protected _getPointerWidth() {\n return this._spec.pointer.width * this._computeLayoutRadius();\n }\n\n protected _getPointerHeight(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const radiusField = this._radiusField[0];\n if (isValid(this.radiusAxisHelper) && isValid(radiusField)) {\n return (\n this.radiusAxisHelper.dataToPosition([datum[radiusField]]) -\n (pointerSpec?.innerPadding ?? 0) -\n (pointerSpec?.outerPadding ?? 10)\n );\n }\n return pointerSpec.height * this._computeLayoutRadius();\n }\n\n protected _getPointerAngle(datum: Datum) {\n const scale = this.angleAxisHelper.getScale();\n const domain = scale.domain();\n const max = maxInArray(domain);\n const min = minInArray(domain);\n const angle = clamp(datum[this._angleField[0]], min, max);\n return this.angleAxisHelper.dataToPosition([angle]);\n }\n\n protected _getRotatedPointerCenterOffset(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const x = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n const y = -this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n const angle = this._getPointerAngle(datum) - Math.PI / 2;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x1 = x * cos + y * sin;\n const y1 = y * cos - x * sin;\n return {\n x: x1,\n y: -y1\n };\n }\n\n private initPinBackgroundMarkStyle() {\n const pinBackgroundMark = this._pinBackgroundMark;\n const pinBackgroundSpec = this._spec.pinBackground;\n if (pinBackgroundMark) {\n this.setMarkStyle(pinBackgroundMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).y,\n scaleX: () => pinBackgroundSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinBackgroundSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 100\n });\n }\n }\n\n private initPinMarkStyle() {\n const pinMark = this._pinMark;\n const pinSpec = this._spec.pin;\n if (pinMark) {\n this.setMarkStyle(pinMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).y,\n scaleX: () => pinSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 300\n });\n }\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._pointerMark ? [this._pointerMark] : []);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._pointerMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('gaugePointer')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.pointer, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugePointerSeries = () => {\n Factory.registerSeries(GaugePointerSeries.type, GaugePointerSeries);\n registerPathMark();\n registerRectMark();\n registerGaugePointerAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IGaugeSeriesSpec, IGaugeSeriesTheme } from './interface';\n\nexport class GaugeSeriesSpecTransformer<\n T extends IGaugeSeriesSpec = IGaugeSeriesSpec,\n K extends IGaugeSeriesTheme = IGaugeSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.segment);\n }\n}\n","import type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugeSeriesSpec } from './interface';\nimport { ProgressLikeSeries } from '../polar/progress-like/progress-like';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SEGMENT_FIELD_END, SEGMENT_FIELD_START } from '../../constant/data';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { gaugeSeriesMark } from './constant';\nimport { clamper, degreeToRadian, isValid } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport { registerProgressLikeAnimation } from '../polar/progress-like';\nimport type { IArcMark, IMark } from '../../mark/interface';\nimport { GaugeSeriesSpecTransformer } from './gauge-transformer';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerPolarLinearAxis } from '../../component/axis/polar';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class GaugeSeries extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gauge;\n type = SeriesTypeEnum.gauge;\n\n static readonly mark: SeriesMarkMap = gaugeSeriesMark;\n static readonly transformerConstructor = GaugeSeriesSpecTransformer as any;\n readonly transformerConstructor = GaugeSeriesSpecTransformer;\n\n private _segmentMark: IArcMark | null = null;\n private _trackMark: IArcMark | null = null;\n\n protected _padAngle: number = 0;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._padAngle = degreeToRadian(this._spec.padAngle ?? 0);\n }\n\n initData(): void {\n super.initData();\n\n /**\n * @description 将数据排序并调整图元的起始点为上一个数据的终点,但是终点维持不变\n */\n const spiltSegment = (data: Datum[], op: string) => {\n // 数据处理\n const dataCollect = data.slice();\n dataCollect.sort((a, b) => a[this._angleField[0]] - b[this._angleField[0]]);\n dataCollect.forEach((datum: any, i) => {\n datum[SEGMENT_FIELD_END] = datum[this._angleField[0]];\n if (i > 0) {\n datum[SEGMENT_FIELD_START] = dataCollect[i - 1][SEGMENT_FIELD_END];\n } else {\n datum[SEGMENT_FIELD_START] = undefined;\n }\n });\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'spiltSegment', spiltSegment);\n this.getViewData()?.transform(\n {\n type: 'spiltSegment'\n },\n false\n );\n }\n\n initMark(): void {\n super.initMark();\n this._trackMark = this._createMark(GaugeSeries.mark.track, {\n parent: this._arcGroupMark,\n dataView: false\n }) as IArcMark;\n this._segmentMark = this._createMark(GaugeSeries.mark.segment, {\n parent: this._arcGroupMark,\n isSeriesMark: true\n }) as IArcMark;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this.initTrackMarkStyle();\n this.initSegmentMarkStyle();\n }\n\n private initSegmentMarkStyle() {\n const segmentMark = this._segmentMark;\n if (segmentMark) {\n this.setMarkStyle(segmentMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart.bind(this),\n endAngle: this._getAngleValueEnd.bind(this),\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n });\n }\n }\n\n protected generateRadiusStyle(spec: any) {\n if (!spec) {\n return;\n }\n const style: any = {};\n spec.outerRadius && (style.outerRadius = () => this._computeLayoutRadius() * spec.outerRadius);\n spec.innerRadius && (style.innerRadius = () => this._computeLayoutRadius() * spec.innerRadius);\n return style;\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string): void {\n super.initMarkStyleWithSpec(mark, spec, key);\n if (mark && mark.name === SeriesMarkNameEnum.segment) {\n // radius 配置需要额外处理比例值\n const segmentSpec = this.getSpec()[SeriesMarkNameEnum.segment];\n if (segmentSpec) {\n for (const state in segmentSpec.state || {}) {\n this.setMarkStyle(mark, this.generateRadiusStyle(segmentSpec.state[state]), state, AttributeLevel.User_Mark);\n }\n }\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._segmentMark && this._tooltipHelper.activeTriggerSet.mark.add(this._segmentMark);\n }\n\n private initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(trackMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n zIndex: 100\n });\n }\n }\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return clamper(\n startAngle,\n (startAngle + endAngle) / 2\n )(startAngle + (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return clamper(\n endAngle,\n (startAngle + endAngle) / 2\n )(endAngle - (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));\n }\n\n protected _getAngleValueStartWithoutPadAngle(datum: Datum) {\n return isValid(datum[SEGMENT_FIELD_START])\n ? this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_START]])\n : this._startAngle;\n }\n\n protected _getAngleValueEndWithoutPadAngle(datum: Datum) {\n return this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_END]]);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._segmentMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.segment, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugeSeries = () => {\n Factory.registerSeries(GaugeSeries.type, GaugeSeries);\n registerArcMark();\n registerProgressLikeAnimation();\n // 仪表盘只使用了角度轴\n registerPolarLinearAxis();\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICircularProgressSeriesSpec, IGaugeSeriesSpec } from '../../series';\nimport { SeriesTypeEnum } from '../../series/interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../polar';\nimport type { IGaugeChartSpec } from './interface';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IPolarAxisSpec, IPolarLinearAxisSpec } from '../../component';\n\nexport class GaugeChartSpecTransformer<\n T extends IGaugeChartSpec = IGaugeChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n\n series.radiusField = spec.radiusField;\n series.pin = spec.pin;\n series.pinBackground = spec.pinBackground;\n series.pointer = spec.pointer;\n return series;\n }\n\n protected _getDefaultCircularProgressSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n series.type = SeriesTypeEnum.circularProgress;\n return series;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n\n /** 充当仪表图非指针部分的系列 */\n let backgroundSeries = spec.series?.find(\n (series: ISeriesSpec) => series.type === SeriesTypeEnum.gauge || series.type === SeriesTypeEnum.circularProgress\n ) as ICircularProgressSeriesSpec | IGaugeSeriesSpec;\n if (isNil(backgroundSeries)) {\n backgroundSeries = spec.gauge ?? this._getDefaultCircularProgressSeriesSpec(spec as any);\n\n // 补充可能缺失的属性\n if (backgroundSeries.type === 'circularProgress') {\n if (isNil(backgroundSeries.radiusField) && isNil(backgroundSeries.categoryField)) {\n backgroundSeries.radiusField = spec.radiusField ?? (spec.categoryField as string) ?? spec.seriesField;\n }\n if (isNil(backgroundSeries.valueField) && isNil(backgroundSeries.angleField)) {\n backgroundSeries.valueField = spec.valueField ?? spec.angleField;\n }\n }\n\n if (spec.series.length === 1) {\n spec.series.push(backgroundSeries);\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type !== backgroundSeries.type) {\n return;\n }\n Object.keys(backgroundSeries).forEach(k => {\n if (!(k in s)) {\n s[k] = backgroundSeries[k];\n }\n });\n });\n }\n }\n\n if (backgroundSeries.type === SeriesTypeEnum.circularProgress) {\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: true,\n domainLine: {\n visible: false\n },\n grid: {\n visible: false\n }\n },\n {\n orient: 'radius',\n visible: false\n },\n {\n zIndex: LayoutZIndex.Region + 50 // 仪表图特例:轴在 region 上层\n }\n );\n } else {\n this._transformGaugeAxisSpec(spec);\n }\n }\n\n protected _transformGaugeAxisSpec(spec: AdaptiveSpec): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n const axesPtr: {\n radius: IPolarLinearAxisSpec | null;\n angle: IPolarLinearAxisSpec | null;\n } = { radius: null, angle: null };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n axesPtr.radius = axis;\n }\n if (orient === 'angle') {\n axesPtr.angle = axis;\n }\n });\n if (!axesPtr.angle) {\n axesPtr.angle = {\n orient: 'angle',\n visible: true\n };\n spec.axes.push(axesPtr.angle);\n }\n if (!axesPtr.radius) {\n axesPtr.radius = {\n orient: 'radius',\n visible: false\n };\n spec.axes.push(axesPtr.radius);\n }\n\n // 自动补充缺失的配置\n if (isNil(axesPtr.angle.type)) {\n axesPtr.angle.type = 'linear';\n }\n if (isNil(axesPtr.radius.type)) {\n axesPtr.radius.type = 'linear';\n }\n if (isNil(axesPtr.angle.zIndex)) {\n axesPtr.angle.zIndex = LayoutZIndex.Region + 50; // 仪表图特例:轴在 region 上层\n }\n }\n}\n","import { registerGaugePointerSeries, registerGaugeSeries } from '../../series/gauge';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IGaugeChartSpec } from './interface';\nimport { GaugeChartSpecTransformer } from './gauge-transformer';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BaseChart } from '../base';\n\nexport class GaugeChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.gauge;\n static readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n static readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly type: string = ChartTypeEnum.gauge;\n readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n}\n\nexport const registerGaugeChart = () => {\n registerGaugePointerSeries();\n registerGaugeSeries();\n Factory.registerChart(GaugeChart.type, GaugeChart);\n};\n","import { BaseChartSpecTransformer } from '../../base';\nimport type { IWordCloudChartSpec } from '../interface';\n\nexport class BaseWordCloudChartSpecTransformer extends BaseChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'nameField',\n 'valueField',\n 'fontFamilyField',\n 'fontWeightField',\n 'fontStyleField',\n 'colorHexField',\n 'colorMode',\n 'colorList',\n 'rotateAngles',\n 'fontWeightRange',\n 'fontSizeRange',\n 'maskShape',\n 'keepAspect',\n 'random',\n 'wordCloudConfig',\n 'wordCloudShapeConfig',\n 'word',\n 'fillingWord',\n 'wordMask'\n ]);\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseChart } from '../../base/base-chart';\nimport type { IWordCloudChartSpec } from '../interface';\nimport { BaseWordCloudChartSpecTransformer } from './word-cloud-base-transformer';\n\nexport class BaseWordCloudChart extends BaseChart {\n static readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n","export const DEFAULT_ROTATE_ANGLES: number[] = [0];\nexport const DEFAULT_DRAW_OUT_OF_BOUND = 'hidden';\nexport const DEFAULT_MIN_FONT_SIZE = 20;\nexport const DEFAULT_FONTSIZE_RANGE: [number, number] = [20, 40];\nexport const DEFAULT_FONT_WEIGHT_RANGE: [number, number] = [200, 500];\nexport const DEFAULT_MASK_SHAPE = 'circle';\nexport const DEFAULT_ZOOM_TO_FIT = {\n shrink: false,\n enlarge: false,\n fontSizeLimitMin: 0\n};\nexport const DEFAULT_RANDOM = true;\nexport const DEFAULT_FONT_PADDING = 1;\nexport const DEFAULT_TEXT_ALIGN = 'center';\nexport const DEFAULT_TEXT_BASE_LINE = 'alphabetic';\nexport const SHAPE_TYPE = [\n 'triangleForward',\n 'triangle',\n 'diamond',\n 'square',\n 'star',\n 'cardioid',\n 'circle',\n 'pentagon',\n 'rect'\n];\n","/* eslint-disable no-duplicate-imports */\nimport type { IPadding } from '@visactor/vutils';\nimport { isNil, isObject, isValidNumber } from '@visactor/vutils';\nimport { isValid } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { isTrueBrowser } from '../../util/env';\nimport {\n DEFAULT_DRAW_OUT_OF_BOUND,\n DEFAULT_FONTSIZE_RANGE,\n DEFAULT_FONT_PADDING,\n DEFAULT_FONT_WEIGHT_RANGE,\n DEFAULT_MASK_SHAPE,\n DEFAULT_MIN_FONT_SIZE,\n DEFAULT_RANDOM,\n DEFAULT_ROTATE_ANGLES,\n DEFAULT_ZOOM_TO_FIT,\n SHAPE_TYPE\n} from './config';\nimport type {\n IWordCloudSeriesSpec,\n WordCloudConfigType,\n WordCloudShapeConfigType,\n WordCloudShapeType\n} from './interface';\nimport type { Datum, IMarkSpec, IPoint, ITextMarkSpec } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { WORD_CLOUD_TEXT } from '../../constant/word-cloud';\nimport type { ICompilableMark } from '../../compile/mark';\nimport { BaseSeries } from '../base/base-series';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { wordCloudSeriesMark } from './constant';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { Factory } from '../../core/factory';\nimport type { IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { LinearScale } from '@visactor/vscale';\nimport type { GeometricMaskShape, TextShapeMask } from '@visactor/vgrammar-util';\n\nexport type IBaseWordCloudSeriesSpec = Omit & { type: string };\n\nexport class BaseWordCloudSeries extends BaseSeries {\n static readonly mark: SeriesMarkMap = wordCloudSeriesMark;\n\n protected _nameField: string;\n protected _valueField?: string;\n setValueField(field: string) {\n if (isValid(field)) {\n this._valueField = field;\n }\n }\n\n protected _colorMode: 'linear' | 'ordinal';\n protected _colorList: string[];\n protected _rotateAngles?: number[];\n protected _fontWeightRange?: [number, number];\n protected _textField?: string;\n protected _maskCanvas?: HTMLCanvasElement;\n protected _maskMark?: IRectMark;\n\n protected _fontSizeRange?: [number, number] | 'auto' = [DEFAULT_MIN_FONT_SIZE, DEFAULT_MIN_FONT_SIZE];\n setFontSizeRange(fontSizeRange: [number, number] | 'auto') {\n if (isValid(fontSizeRange)) {\n this._fontSizeRange = fontSizeRange;\n } else {\n this._fontSizeRange = DEFAULT_FONTSIZE_RANGE;\n }\n }\n\n protected _maskShape?: string | WordCloudShapeType | TextShapeMask | GeometricMaskShape;\n protected _isWordCloudShape: boolean = false;\n\n protected _wordCloudConfig?: WordCloudConfigType;\n protected _wordCloudShapeConfig?: WordCloudShapeConfigType;\n\n protected _padding?: IPadding;\n protected _defaultFontFamily: string;\n\n protected _keyWordColorCallback: (datum: Datum) => string;\n protected _fillingColorCallback: (datum: Datum) => string;\n protected _dataChange: boolean = true;\n\n protected handleMaskCanvasUpdate = (canvas: HTMLCanvasElement, imageUrl?: string) => {\n this._maskCanvas = canvas;\n };\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // series布局相关\n this._padding = this._option.getChart().padding;\n\n // 普通词云 & 形状词云 共有spec相关\n this._nameField = this._spec.nameField;\n this._colorMode = this._spec.colorMode ?? 'ordinal';\n this._colorList = this._spec.colorList;\n this.setValueField(this._spec.valueField);\n this._fontWeightRange = this._spec.fontWeightRange ?? DEFAULT_FONT_WEIGHT_RANGE;\n this._rotateAngles = this._spec.rotateAngles ?? DEFAULT_ROTATE_ANGLES;\n this.setFontSizeRange(this._spec.fontSizeRange);\n this._maskShape = this._spec.maskShape ?? DEFAULT_MASK_SHAPE;\n this._textField = this._spec.word?.formatMethod ? WORD_CLOUD_TEXT : this._nameField;\n const wordCloudConfig = this._spec.wordCloudConfig;\n // 普通词云spec相关\n this._wordCloudConfig = {\n drawOutOfBound: DEFAULT_DRAW_OUT_OF_BOUND,\n layoutMode: 'default',\n zoomToFit: DEFAULT_ZOOM_TO_FIT,\n ...this._spec.wordCloudConfig\n };\n\n if ((!wordCloudConfig || isNil(wordCloudConfig.layoutMode)) && !isTrueBrowser(this._option.mode)) {\n this._wordCloudConfig.layoutMode = 'fast';\n }\n\n // 形状词云spec相关\n this._wordCloudShapeConfig = {\n fillingSeriesField: this.getSeriesField(),\n fillingRotateAngles: DEFAULT_ROTATE_ANGLES,\n layoutMode: 'default',\n ...this._spec.wordCloudShapeConfig\n };\n\n this._isWordCloudShape =\n !SHAPE_TYPE.includes(this._maskShape as string) &&\n !['fast', 'grid', 'cloud'].includes(this._wordCloudConfig.layoutMode);\n this._defaultFontFamily = this._option.getTheme().fontFamily as string;\n }\n\n /**\n * @override\n */\n protected initData(): void {\n super.initData();\n // data改变时, 需要重新编译, 重新布局\n this.getViewData()?.target?.addListener('change', () => {\n this._dataChange = true;\n this.compile();\n });\n }\n\n protected _wordMark: ITextMark;\n\n initMark(): void {\n if (this._spec.wordMask?.visible) {\n this._maskMark = this._createMark(BaseWordCloudSeries.mark.wordMask, { dataView: false }) as IRectMark;\n }\n\n this._wordMark = this._createMark(\n BaseWordCloudSeries.mark.word,\n {\n key: DEFAULT_DATA_KEY,\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n morphElementKey: this._seriesField\n }\n ) as ITextMark;\n }\n\n initMarkStyle() {\n this.initMarkStyleOfWord(this._wordMark, this._spec.word, this._spec.colorHexField, this._seriesField);\n\n if (this._maskMark) {\n this.setMarkStyle(\n this._maskMark,\n {\n width: () => {\n return this._region.getLayoutRect().width;\n },\n height: () => {\n return this._region.getLayoutRect().height;\n },\n background: () => {\n return this._maskCanvas;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initMarkStyleOfWord(\n wordMark: ITextMark,\n wordSpec?: IMarkSpec,\n colorHexField?: string,\n seriesField?: string,\n isFillingWord?: boolean\n ): void {\n if (!wordMark) {\n return;\n }\n this.setMarkStyle(\n wordMark,\n {\n text: (wordSpec as any)?.formatMethod\n ? (datum: Datum) => {\n return (wordSpec as any).formatMethod(datum);\n }\n : (datum: Datum) => datum[this._textField],\n x: (datum: Datum) => datum.x,\n y: (datum: Datum) => datum.y,\n fontSize: (datum: Datum) => datum.fontSize,\n fontStyle: (datum: Datum) => datum.fontStyle,\n\n angle: (datum: Datum) => datum.angle,\n visible: (datum: Datum) => datum.visible\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n wordMark,\n {\n fill: wordSpec?.style?.fill ?? this.getWordColor,\n // style和field相关的配置都已经传给vgrammar, 所以这里直接拿结果就可以\n fontWeight: (datum: Datum) => datum.fontWeight,\n fontFamily: (datum: Datum) => datum.fontFamily\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._wordMark && this._tooltipHelper.activeTriggerSet.mark.add(this._wordMark);\n }\n\n initAnimation() {\n [this._wordMark].forEach(mark => {\n if (mark) {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const params = {\n animationConfig: () => mark.getAnimationConfig()?.appear?.[0]\n };\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud')(params, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n protected getWordOrdinalColorScale(field: string, isFillingWord: boolean) {\n const colorList = isFillingWord ? this._wordCloudShapeConfig.fillingColorList : this._colorList;\n const colorDomain = field ? this.getViewData()?.latestData.map((datum: Datum) => datum[field]) : [];\n const colorRange = colorList ?? this._option.globalScale.getScale('color')?.range() ?? this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n protected initColorCallback(field: string, isFillingWord: boolean) {\n if (this._colorMode === 'ordinal') {\n const scale = this.getWordOrdinalColorScale(field, isFillingWord);\n return (datum: Datum) => {\n return scale.scale(datum[field ?? DEFAULT_DATA_SERIES_FIELD]);\n };\n }\n\n const colorList =\n (isFillingWord ? this._colorList : this._wordCloudShapeConfig.fillingColorList) ??\n this._option.globalScale.getScale('color').range();\n\n if (colorList.length === 1) {\n return (datum: Datum) => colorList[0];\n }\n\n if (this._valueField) {\n const stats = this.getRawDataStatisticsByField(this._valueField, true);\n if (stats.min === stats.max) {\n return colorList[0];\n }\n const scale = new LinearScale().domain([stats.min, stats.max]).range(colorList);\n\n return (datum: Datum) => {\n return scale.scale(datum[this._valueField]);\n };\n }\n\n const scale = new LinearScale().domain([0, this.getViewData()?.latestData?.length ?? 1]).range(colorList);\n\n return (datum: Datum) => {\n return scale.scale(datum[DEFAULT_DATA_INDEX]);\n };\n }\n\n getWordColor = (datum: Datum) => {\n if (datum.isFillingWord) {\n if (!this._fillingColorCallback || this._dataChange) {\n // 如果updateData数据变更了, 颜色映射也需要重新计算\n this._fillingColorCallback = this._wordCloudShapeConfig.fillingColorHexField\n ? (datum: Datum) => datum[this._wordCloudShapeConfig.fillingColorHexField]\n : this.initColorCallback(this._wordCloudShapeConfig.fillingSeriesField, true);\n }\n\n return this._fillingColorCallback(datum);\n }\n\n if (!this._keyWordColorCallback || this._dataChange) {\n // 如果updateData数据变更了, 颜色映射也需要重新计算\n this._keyWordColorCallback = this._spec.colorHexField\n ? datum => datum[this._spec.colorHexField]\n : this.initColorCallback(this._seriesField, false);\n }\n\n return this._keyWordColorCallback(datum);\n };\n\n private _calculateFontWeight = (datum: Datum) => {\n const stats = this.getRawDataStatisticsByField(this._valueField, true);\n\n if (stats.min === stats.max) {\n return this._fontWeightRange[0];\n }\n\n return (\n this._fontWeightRange[0] +\n ((this._fontWeightRange[this._fontWeightRange.length - 1] - this._fontWeightRange[0]) *\n (datum[this._valueField] - stats.min)) /\n (stats.max - stats.min)\n );\n };\n\n compile(): void {\n super.compile();\n const { width, height } = this._region.getLayoutRect();\n // 非正常尺寸下不进行布局\n if (!isValidNumber(width) || !isValidNumber(height) || !(height > 0 && width > 0)) {\n return;\n }\n\n const product = (this._wordMark as ICompilableMark).getProduct();\n\n if (product) {\n const wordCloudTransforms: any[] = [];\n\n // 词云 transform\n if (!this._isWordCloudShape) {\n wordCloudTransforms.push({\n type: 'wordcloud',\n ...this._wordCloudTransformOption()\n });\n }\n // 形状词云 transform\n else {\n wordCloudTransforms.push({\n type: 'wordcloudShape',\n // 形状词云中必须要传入dataIndexKey, 否则填充词无法绘制\n ...this._wordCloudShapeTransformOption()\n });\n }\n\n // 挂到mark的transform上\n product.transform(wordCloudTransforms);\n }\n }\n\n protected _getCommonTransformOptions(): any {\n const { width, height } = this._region.getLayoutRect();\n const wordSpec = this._spec.word ?? {};\n const wordStyleSpec = wordSpec.style ?? {};\n\n return {\n size: [width, height],\n shape:\n isObject(this._maskShape) &&\n (this._maskShape as TextShapeMask).type === 'text' &&\n isNil((this._maskShape as TextShapeMask).fontFamily)\n ? {\n fontFamily: this._option.getTheme()?.fontFamily,\n ...this._maskShape\n }\n : this._maskShape,\n onUpdateMaskCanvas: this.handleMaskCanvasUpdate,\n dataIndexKey: DEFAULT_DATA_KEY,\n text: wordSpec.formatMethod\n ? (datum: Datum) => {\n return wordSpec.formatMethod(datum);\n }\n : { field: this._textField },\n fontSize: this._valueField ? { field: this._valueField } : this._fontSizeRange[0],\n fontSizeRange: this._fontSizeRange === 'auto' ? null : this._fontSizeRange,\n\n padding: this._spec.word?.padding ?? DEFAULT_FONT_PADDING,\n fontFamily: isValid(this._spec.fontFamilyField)\n ? { field: this._spec.fontFamilyField }\n : wordStyleSpec.fontFamily ?? this._defaultFontFamily,\n // 为了保持和旧版逻辑一致,优先级如下: spec field > mark style > default (根据valueField映射)\n fontWeight: isValid(this._spec.fontWeightField)\n ? { field: this._spec.fontWeightField }\n : isValid(wordStyleSpec.fontWeight)\n ? wordStyleSpec.fontWeight\n : isValid(this._valueField)\n ? this._calculateFontWeight\n : 'normal',\n fontStyle: isValid(this._spec.fontStyleField) ? { field: this._spec.fontStyleField } : wordStyleSpec.fontStyle\n };\n }\n\n protected _wordCloudTransformOption(): Object {\n const wordCloudConfig = this._wordCloudConfig ?? {};\n\n return {\n ...wordCloudConfig,\n ...this._getCommonTransformOptions(),\n // TIP: 非浏览器环境下,使用 fast 布局,否则会出现兼容问题\n layoutType: this._wordCloudConfig.layoutMode,\n\n rotate: this._rotateAngles,\n\n randomVisible: this._spec.random ?? DEFAULT_RANDOM,\n clip: this._wordCloudConfig.drawOutOfBound === 'clip',\n shrink: this._wordCloudConfig.zoomToFit.shrink,\n enlarge: this._wordCloudConfig.zoomToFit.enlarge,\n minFontSize: this._wordCloudConfig.zoomToFit.fontSizeLimitMin,\n progressiveTime: this._wordCloudConfig.progressiveTime,\n progressiveStep: this._wordCloudConfig.progressiveStep,\n repeatFill: this._wordCloudConfig.zoomToFit.repeat\n };\n }\n\n protected _wordCloudShapeTransformOption(): Object {\n const fillingWordStyleSpec = this._spec.fillingWord?.style ?? {};\n const wordCloudShapeConfig = this._wordCloudShapeConfig ?? {};\n\n return {\n ...wordCloudShapeConfig,\n ...this._getCommonTransformOptions(),\n\n rotateList: this._rotateAngles,\n fillingRotateList: wordCloudShapeConfig.fillingRotateAngles,\n\n fillingFontFamily: isValid(wordCloudShapeConfig.fillingFontFamilyField)\n ? { field: wordCloudShapeConfig.fillingFontFamilyField }\n : fillingWordStyleSpec.fontFamily ?? this._defaultFontFamily,\n fillingPadding: this._spec.fillingWord?.padding ?? DEFAULT_FONT_PADDING,\n fillingFontStyle: isValid(wordCloudShapeConfig.fillingFontStyleField)\n ? { field: wordCloudShapeConfig.fillingFontStyleField }\n : fillingWordStyleSpec.fontStyle,\n // 如果配置了字段映射,优先按照映射进行展示\n fillingFontWeight: isValid(wordCloudShapeConfig.fillingFontWeightField)\n ? {\n field: wordCloudShapeConfig.fillingFontWeightField\n }\n : fillingWordStyleSpec.fontWeight // 填充词fontWeight默认不跟随valueField\n };\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n dataToPosition(data: Datum): IPoint {\n return null;\n }\n dataToPositionX(data: any): number {\n return null;\n }\n dataToPositionY(data: any): number {\n return null;\n }\n dataToPositionZ(data: any): number {\n return null;\n }\n valueToPosition(value1: any, value2?: any): IPoint {\n return null;\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.compile();\n this._dataChange = false;\n }\n\n getActiveMarks(): IMark[] {\n return [this._wordMark];\n }\n\n reInit() {\n super.reInit();\n if (this._keyWordColorCallback) {\n this._keyWordColorCallback = null;\n }\n\n if (this._fillingColorCallback) {\n this._fillingColorCallback = null;\n }\n }\n}\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport { RotateBySphereAnimate } from '@visactor/vrender-core';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { Factory } from '../../core/factory';\nimport type { IWordcloud3dAnimationParams, IWordcloudAnimationParams, WordcloudAppearPreset } from './interface';\n\nexport const WordCloud3dAnimation = (params: IWordcloud3dAnimationParams | (() => any)): IAnimationTypeConfig => {\n return {\n custom: RotateBySphereAnimate,\n customParameters: (datum: any, element: IElement) => params,\n easing: 'linear',\n loop: Infinity,\n duration: 6000\n };\n};\n\nfunction computeWordDelay(duration: number, totalTime: number, wordCount: number) {\n if (duration * wordCount < totalTime) {\n return duration + (totalTime - wordCount * duration) / (wordCount - 1);\n }\n return (totalTime - duration) / (wordCount - 1);\n}\n\nexport const WordCloudScaleInAnimation = (params: IWordcloudAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n fontSize: {\n from: 0\n }\n },\n duration: 200,\n delay: (datum, element, vgrammarParams) => {\n const animationConfig = params.animationConfig();\n const duration = animationConfig?.duration || 200;\n const totalTime = animationConfig?.totalTime || DEFAULT_ANIMATION_CONFIG.appear.duration;\n const count = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementCount;\n const index = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementIndex;\n return index * computeWordDelay(duration as number, totalTime as number, count);\n }\n };\n};\n\nexport function wordcloudPresetAnimation(\n params: IWordcloudAnimationParams,\n preset: WordcloudAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return { type: 'fadeIn' };\n case 'scaleIn':\n default:\n return WordCloudScaleInAnimation(params);\n }\n}\n\nexport const registerWordCloudAnimation = () => {\n Factory.registerAnimation('wordCloud', (params: IWordcloudAnimationParams, preset: WordcloudAppearPreset) => ({\n appear: wordcloudPresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n }));\n};\n\nexport const registerWordCloud3dAnimation = () => {\n Factory.registerAnimation('wordCloud3d', (params: IWordcloud3dAnimationParams) => ({\n enter: WordCloud3dAnimation(params)\n }));\n};\n","export const shapes = {\n triangleForward: triangleForward,\n triangleUpright: triangle,\n triangle, // 三角形\n diamond, // 菱形\n square, // 方形\n star, // 星形\n cardioid, // 心形\n circle, // 圆形\n pentagon // 五角形\n};\n\nfunction diamond() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 4);\n return 1 / (Math.cos(thetaPrime) + Math.sin(thetaPrime));\n };\n}\nfunction star() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 10);\n if (((theta + 0.955) % ((2 * Math.PI) / 5)) - (2 * Math.PI) / 10 >= 0) {\n return 1 / (Math.cos((2 * Math.PI) / 10 - thetaPrime) + 3.07768 * Math.sin((2 * Math.PI) / 10 - thetaPrime));\n }\n return 1 / (Math.cos(thetaPrime) + 3.07768 * Math.sin(thetaPrime));\n };\n}\nfunction square() {\n return function (theta: number) {\n return Math.min(1 / Math.abs(Math.cos(theta)), 1 / Math.abs(Math.sin(theta)));\n };\n}\n\nfunction triangle() {\n return function (theta: number) {\n const thetaPrime = (theta + (Math.PI * 3) / 2) % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction triangleForward() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction cardioid() {\n return function (theta: number) {\n return 1 + Math.sin(theta);\n };\n}\nfunction circle() {\n return function () {\n return 1;\n };\n}\n\nfunction pentagon() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 5);\n return 1 / (Math.cos(thetaPrime) + 0.726543 * Math.sin(thetaPrime));\n };\n}\n\nexport function getMaxRadiusAndCenter(shape: string, size: [number, number]) {\n const w = size[0];\n const h = size[1];\n let maxRadius = 1;\n const center = [size[0] >> 1, size[1] >> 1];\n\n switch (shape) {\n case 'cardioid':\n center[1] = ~~((h / 2.7) * 0.4);\n maxRadius = Math.floor(Math.min(w / 2.3, h / 2.6));\n break;\n case 'triangleForward':\n maxRadius = h / Math.sqrt(0.75) > w ? Math.floor(w / 2) : Math.floor(h / (2 * Math.sqrt(0.75)));\n break;\n case 'triangle':\n case 'triangleUpright':\n center[1] = ~~(h / 1.5);\n maxRadius = Math.floor(Math.min(h / 1.5, w / 2));\n break;\n case 'circle':\n case 'diamond':\n case 'square':\n case 'star':\n case 'pentagon':\n maxRadius = Math.floor(Math.min(w / 2, h / 2));\n break;\n case 'rect':\n default:\n maxRadius = Math.floor(Math.max(w / 2, h / 2));\n break;\n }\n return { maxRadius, center };\n}\n\nexport const getShapeFunction = (type: string) => {\n if (shapes[type]) {\n return shapes[type]();\n }\n\n return shapes.circle();\n};\n","export function seedRandom(seed: number) {\n return parseFloat('0.' + Math.sin(seed).toString().substring(6));\n}\n","import { isFunction } from '@visactor/vutils';\n\nexport function isSupported() {\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n if (!canvas || !canvas.getContext) {\n return false;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n if (!ctx.getImageData) {\n return false;\n }\n if (!ctx.fillText) {\n return false;\n }\n\n if (!Array.prototype.some) {\n return false;\n }\n if (!Array.prototype.push) {\n return false;\n }\n\n return true;\n}\n\nexport function getMinFontSizeOfEnv() {\n // eslint-disable-next-line no-undef\n const ctx = document.createElement('canvas').getContext('2d');\n\n // start from 20\n let size = 20;\n\n // two sizes to measure\n let hanWidth;\n let mWidth;\n\n while (size) {\n ctx.font = size.toString(10) + 'px sans-serif';\n if (ctx.measureText('\\uFF37').width === hanWidth && ctx.measureText('m').width === mWidth) {\n return size + 1;\n }\n\n hanWidth = ctx.measureText('\\uFF37').width;\n mWidth = ctx.measureText('m').width;\n\n size--;\n }\n\n return 12;\n}\n\nexport const randomHslColor = (min: number, max: number) => {\n return (\n 'hsl(' +\n (Math.random() * 360).toFixed() +\n ',' +\n (Math.random() * 30 + 70).toFixed() +\n '%,' +\n (Math.random() * (max - min) + min).toFixed() +\n '%)'\n );\n};\n\nexport function functor(d: any) {\n return isFunction(d)\n ? d\n : function () {\n return d;\n };\n}\n","import { array, degreeToRadian, isFunction, isNil, merge, seedRandom } from '@visactor/vutils';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport type { IBaseLayoutOptions, TagItemFunction, TagOutputItem } from './interface';\nimport { getShapeFunction } from '@visactor/vgrammar-util';\nimport { functor, randomHslColor } from './util';\n\nexport abstract class BaseLayout implements IProgressiveTransformResult {\n static defaultOptions: Partial = {\n fontFamily: '\"Trebuchet MS\", \"Heiti TC\", \"微軟正黑體\", ' + '\"Arial Unicode MS\", \"Droid Fallback Sans\", sans-serif',\n fontWeight: 'normal',\n color: 'random-dark',\n fontStyle: 'normal',\n minFontSize: 12, // 0 to disable\n drawOutOfBound: false,\n shrink: false,\n\n minRotation: -Math.PI / 2,\n maxRotation: Math.PI / 2,\n rotationSteps: 0,\n rotateRatio: 0.1,\n\n random: false,\n\n shape: 'circle',\n progressiveTime: 0,\n progressiveStep: 0,\n repeatFill: false,\n fillTextFontSize: 12,\n maxFailCount: 20\n };\n\n options: Partial;\n\n shape: (theta: number) => number;\n getTextFontWeight: TagItemFunction;\n getTextFontSize: TagItemFunction;\n getTextFontFamily: TagItemFunction;\n getText: TagItemFunction;\n getTextColor: TagItemFunction;\n getTextFontStyle: TagItemFunction;\n getTextRotate: TagItemFunction;\n outputCallback: (res: any[]) => any[];\n\n /* ================== runtime vars ================== */\n escapeTime?: number;\n result: TagOutputItem[];\n data?: any[];\n originalData?: any[];\n currentStepIndex?: number;\n progressiveIndex?: number;\n progressiveResult?: TagOutputItem[];\n drawnCount?: number;\n isTryRepeatFill?: boolean;\n\n failCount?: number;\n\n constructor(options: Partial) {\n this.options = merge({}, BaseLayout.defaultOptions, options);\n\n if (isFunction(this.options.shape)) {\n this.shape = this.options.shape;\n } else {\n this.shape = getShapeFunction(this.options.shape as string);\n }\n\n /* function for getting the font-weight of the text */\n this.getText = functor(this.options.text) ?? ((d: any) => d);\n this.getTextFontWeight = functor(this.options.fontWeight);\n this.getTextFontSize = functor(this.options.fontSize);\n this.getTextFontStyle = functor(this.options.fontStyle);\n this.getTextFontFamily = functor(this.options.fontFamily);\n this.outputCallback = this.options.outputCallback ?? ((res: any[]) => res);\n\n switch (this.options.color) {\n case 'random-dark':\n this.getTextColor = () => {\n return randomHslColor(10, 50);\n };\n break;\n\n case 'random-light':\n this.getTextColor = () => {\n return randomHslColor(50, 90);\n };\n break;\n\n default:\n this.getTextColor = functor(this.options.color);\n break;\n }\n\n if (!isNil(this.options.rotate)) {\n this.getTextRotate = isFunction(this.options.rotate)\n ? (d: any) => degreeToRadian((this.options.rotate as (d: any) => number)(d) ?? 0)\n : (d: any, i: number) => {\n const rotates = array(this.options.rotate as number | number[]);\n const random = this.options.random ? Math.random() : seedRandom(i); // 如果配置了random, 则从角度列表随机取值,反之使用种子伪随机取值\n return degreeToRadian(rotates[Math.floor(random * rotates.length)]);\n };\n } else if (this.options.useRandomRotate) {\n const rotationRange = Math.abs(this.options.maxRotation - this.options.minRotation);\n const rotationSteps = Math.abs(Math.floor(this.options.rotationSteps));\n const minRotation = Math.min(this.options.maxRotation, this.options.minRotation);\n\n this.getTextRotate = () => {\n if (this.options.rotateRatio === 0) {\n return 0;\n }\n\n if (Math.random() > this.options.rotateRatio) {\n return 0;\n }\n\n if (rotationRange === 0) {\n return minRotation;\n }\n\n if (rotationSteps > 0) {\n // Min rotation + zero or more steps * span of one step\n return minRotation + (Math.floor(Math.random() * rotationSteps) * rotationRange) / (rotationSteps - 1);\n }\n return minRotation + Math.random() * rotationRange;\n };\n } else {\n this.getTextRotate = () => 0;\n }\n }\n\n canRepeat() {\n return false;\n }\n\n /* Return true if we had spent too much time */\n exceedTime() {\n if (this.options.progressiveStep > 0) {\n return this.progressiveIndex >= ((this.currentStepIndex ?? -1) + 1) * this.options.progressiveStep;\n }\n\n return this.options.progressiveTime > 0 && new Date().getTime() - this.escapeTime > this.options.progressiveTime;\n }\n\n progressiveRun() {\n if (this.options.progressiveStep > 0) {\n this.currentStepIndex = (this.currentStepIndex ?? -1) + 1;\n } else if (this.options.progressiveTime > 0) {\n this.escapeTime = Date.now();\n }\n\n if (this.data && this.progressiveIndex < this.data.length) {\n this.progressiveResult = [];\n let i = this.progressiveIndex;\n\n let curWordTryCount = 0;\n const maxSingleWordTryCount = this.options.maxSingleWordTryCount;\n const maxFailCount = Math.min(this.options.maxFailCount, this.originalData.length);\n\n while (i < this.data.length && this.failCount < maxFailCount) {\n const drawn = this.layoutWord(i);\n curWordTryCount++;\n\n if (drawn || curWordTryCount > maxSingleWordTryCount) {\n i++;\n curWordTryCount = 0;\n this.failCount = drawn ? 0 : this.failCount + 1;\n }\n this.progressiveIndex = i;\n if (this.exceedTime()) {\n break;\n } else if (\n i === this.data.length &&\n this.failCount < maxFailCount &&\n this.options.repeatFill &&\n this.canRepeat()\n ) {\n this.data = [\n ...this.data,\n ...this.originalData.map(entry => {\n return {\n ...entry,\n isFill: true\n };\n })\n ];\n this.isTryRepeatFill = true;\n }\n }\n\n return this.progressiveResult;\n }\n\n return this.result;\n }\n\n abstract layoutWord(i: number): boolean;\n abstract layout(\n data: any[],\n config: { width: number; height: number; origin?: [number, number]; canvas?: HTMLCanvasElement }\n ): any[];\n\n initProgressive() {\n this.failCount = 0;\n this.progressiveIndex = 0;\n if (this.options.progressiveStep > 0) {\n this.currentStepIndex = -1;\n } else if (this.options.progressiveTime > 0) {\n this.escapeTime = Date.now();\n }\n\n this.progressiveResult = [];\n }\n\n output() {\n return this.result ? this.outputCallback(this.result) : null;\n }\n\n progressiveOutput() {\n return this.progressiveResult ? this.outputCallback(this.progressiveResult) : null;\n }\n\n unfinished() {\n return this.data && this.data.length && !isNil(this.progressiveIndex) && this.progressiveIndex < this.data.length;\n }\n\n release() {\n this.data = null;\n this.result = null;\n this.progressiveIndex = null;\n this.progressiveResult = null;\n }\n}\n","export const spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nfunction archimedeanSpiral(size: [number, number]) {\n const e = size[0] / size[1];\n return (t: number) => {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)] as [number, number];\n };\n}\n\nfunction rectangularSpiral(size: number) {\n const dy = 4;\n const dx = (dy * size[0]) / size[1];\n let x = 0;\n let y = 0;\n return (t: number) => {\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] as [number, number];\n };\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-wordcloud/src/CloudLayout.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\n/**\n * 小程序canvas相关API,getImageData、draw都是异步的,导致渐进渲染流程处理非常麻烦,实际上小程序并未使用这个算法,所以暂时不考虑支持小程序\n */\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport { isString, merge } from '@visactor/vutils';\nimport type { Bounds, IBaseLayoutOptions, TagItemAttribute, TagItemFunction, TagOutputItem } from './interface';\nimport { getMaxRadiusAndCenter } from '@visactor/vgrammar-util';\nimport { BaseLayout } from './base';\nimport { spirals } from './spirals';\nimport { functor } from './util';\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\n// 一次扩充数组的数量\nconst MAX_ARGUMENTS_LENGTH = 60000;\n\nexport interface TagItem {\n text: number | string;\n /** font-family */\n fontFamily?: string;\n /** font-style */\n fontStyle?: string;\n /** font-weight */\n fontWeight?: string;\n /** 旋转角度 */\n angle?: number;\n /** font-size */\n fontSize?: number;\n padding?: number;\n /** 偏移量,仅内部计算使用 */\n xoff?: number;\n /** 偏移量,仅内部计算使用 */\n yoff?: number;\n /** 中心点坐标 */\n x?: number;\n /** 中心点坐标 */\n y?: number;\n /** 右下角点坐标 */\n x1?: number;\n /** 右下角点坐标 */\n y1?: number;\n /** 左上角点坐标 */\n x0?: number;\n /** 左上角点坐标 */\n y0?: number;\n hasText?: boolean;\n /** 像素是否有填充 */\n sprite?: number[];\n datum: any;\n /** 旋转后,词语所占区域的宽度 */\n width: number;\n /** 旋转后,词语所占区域的高度 */\n height: number;\n}\n\ninterface ICloudLayoutOptions extends IBaseLayoutOptions {\n spiral?: 'archimedean' | 'rectangular' | ((size: [number, number]) => (t: number) => [number, number]);\n\n padding?: TagItemAttribute;\n enlarge?: boolean;\n\n customInsertZerosToArray?: (array: any[], index: number, length: number) => void;\n}\n\nexport class CloudLayout extends BaseLayout implements IProgressiveTransformResult {\n getTextPadding: TagItemFunction;\n spiral: (size: [number, number]) => (t: any) => [number, number];\n random: () => number;\n\n /* ==================== runtime vars ======================== */\n cw: number = (1 << 11) >> 5;\n ch: number = 1 << 11;\n _size: [number, number] = [256, 256];\n _originSize: [number, number];\n _isBoardExpandCompleted = false;\n _placeStatus: number = 0;\n _tTemp?: number = null;\n _dtTemp?: number = null;\n _dy: number = 0;\n\n contextAndRatio?: { context: CanvasRenderingContext2D; ratio: number; canvas: HTMLCanvasElement };\n _board: number[];\n /** 已经绘制文字的最小包围盒 */\n _bounds: Bounds;\n\n /**\n * 最大无法放置字体缓存, key值为rotate + 摆放顺序(顺时针|逆时针)的组合\n */\n cacheMap = new Map();\n\n static defaultOptions: Partial = {\n enlarge: false,\n minFontSize: 2,\n maxSingleWordTryCount: 2\n };\n\n constructor(options: ICloudLayoutOptions) {\n super(merge({}, CloudLayout.defaultOptions, options));\n\n if (this.options.minFontSize <= CloudLayout.defaultOptions.minFontSize) {\n this.options.minFontSize = CloudLayout.defaultOptions.minFontSize;\n }\n\n this.spiral = isString(this.options.spiral)\n ? spirals[this.options.spiral as string] ?? spirals.archimedean\n : (this.options.spiral as (size: [number, number]) => (t: any) => [number, number]);\n this.random = this.options.random ? Math.random : () => 1;\n this.getTextPadding = functor(this.options.padding);\n }\n\n zoomRatio() {\n return this._originSize[0] / this._size[0];\n }\n\n dy() {\n return this._dy;\n }\n\n layoutWord(index: number) {\n const d = this.data[index];\n\n // 当 text 为空时,直接跳过对其的布局,否则会卡死\n if (('' + d.text).trim() === '') {\n return true;\n }\n\n // size可能会更新\n const { maxRadius, center } = getMaxRadiusAndCenter(this.options.shape as string, this._size);\n d.x = center[0];\n d.y = center[1];\n cloudSprite(this.contextAndRatio, d, this.data, index, this.cw, this.ch);\n /* 一次place判断可能发生的情况:\n * 1. 成功找到位置,更新board,返回true ==》 更新词语位置,完成布局\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n *\n * 目标:\n * 1. `超长词`语判断(d.fontSize > size),返回false,size扩大到可以容纳d.fontSize\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * `长词`?记录可以容纳词语的最小fontSize(一次),扩大board范围再次尝试布局;目前测试数据只命中1,3,未发现命中2的情况\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 从起点开始不断进行collide检测,第一次未通过range和shape判断时,记录当时的dt,扩大画布以后从该dt开始扫描\n *\n */\n this._placeStatus = 0;\n if (d.hasText && this.place(this._board, d, this._bounds, maxRadius)) {\n this.result.push(d);\n if (this._bounds) {\n cloudBounds(this._bounds, d);\n } else {\n this._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 -= this._size[0] >> 1;\n d.y -= this._size[1] >> 1;\n\n // 清空t, dt缓存\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n\n return true;\n }\n // 扩大画布问题:\n // 每次扩大画布,都是依据当前单词的d.fontSize和minFontSize比较后再扩大,\n // 如果某个词绘制顺序比较靠前,且尺寸较大,就会在绘制时将board拉大,\n // 后续尺寸较小的词语再画在borad后,其实际大小就会远远小于minFontSize,\n // 是不是应该先遍历数据,找到最小的词语尺寸,按照minFontSize算出board能扩大的最大尺寸,\n // 后面再绘制时board扩大不能超过这个尺寸。\n this.updateBoardExpandStatus(d.fontSize);\n if (d.hasText && this.shouldShrinkContinue()) {\n // 不需要为hasText为false时扩大画布\n if (this._placeStatus === 1) {\n // 按照字体要求能扩大的最大尺寸\n const maxSize0 = (d.fontSize * this._originSize[0]) / this.options.minFontSize;\n const distSize0 = Math.max(d.width, d.height);\n if (distSize0 <= maxSize0) {\n // 扩大尺寸满足最小字体要求 =》 按照要求扩大board\n this.expandBoard(this._board, this._bounds, distSize0 / this._size[0]);\n } else if (this.options.clip) {\n // 扩大尺寸不满足最小字体要求,但支持裁剪 =》 按最大尺寸扩大,裁剪词语\n this.expandBoard(this._board, this._bounds, maxSize0 / this._size[0]);\n } else {\n // 扩大尺寸不满足最小字体要求,且不支持裁剪 =》 丢弃词语\n return true;\n }\n } else if (this._placeStatus === 3) {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n } else {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n }\n // 更新一次状态,下次大尺寸词语进入裁剪\n this.updateBoardExpandStatus(d.fontSize);\n return false;\n }\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n return true;\n }\n\n layout(words: any[], config: { width: number; height: number }) {\n this.initProgressive();\n this.result = [];\n this._size = [config.width, config.height];\n // console.time('prepare data');\n // 开始新的layout时清除旧的缓存\n this.clearCache();\n this._originSize = [...this._size];\n const contextAndRatio = this.getContext(vglobal.createCanvas({ width: 1, height: 1 }));\n this.contextAndRatio = contextAndRatio;\n this._board = new Array((this._size[0] >> 5) * this._size[1]).fill(0);\n // 已经绘制文字的最小包围盒\n this._bounds = null;\n\n const n = words.length;\n const i = 0;\n\n this.result = [];\n const data = words\n .map((d: any, i: number) => {\n return {\n text: this.getText(d),\n fontFamily: this.getTextFontFamily(d),\n fontStyle: this.getTextFontStyle(d),\n fontWeight: this.getTextFontWeight(d),\n angle: this.getTextRotate(d, i),\n fontSize: ~~this.getTextFontSize(d),\n padding: this.getTextPadding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n })\n .sort(function (a, b) {\n return b.fontSize - a.fontSize;\n });\n this.originalData = data;\n this.data = data;\n\n this.progressiveRun();\n\n if (!this.options.clip && this.options.enlarge && this._bounds) {\n this.shrinkBoard(this._bounds);\n }\n\n // 处理y方向偏移\n if (this._bounds && ['cardioid', 'triangle', 'triangle-upright'].includes(this.options.shape as string)) {\n const currentCenterY = (this._bounds[0].y + this._bounds[1].y) / 2;\n this._dy = -(currentCenterY - this._originSize[1] / 2);\n }\n\n return this.result;\n }\n\n formatTagItem(words: TagOutputItem[]) {\n /** 调整结果 */\n const size = this._size;\n const zoomRatio = this.zoomRatio();\n const globalDy = this.dy();\n const dx = size[0] >> 1;\n const dy = size[1] >> 1;\n\n const n = words.length;\n const result = [];\n let w;\n let t: any;\n\n for (let i = 0; i < n; ++i) {\n w = words[i];\n t = {};\n t.datum = w.datum;\n t.x = (w.x + dx) * zoomRatio;\n t.y = (w.y + dy + globalDy) * zoomRatio;\n t.fontFamily = w.fontFamily;\n t.fontSize = w.fontSize * zoomRatio;\n t.fontStyle = w.fontStyle;\n t.fontWeight = w.fontWeight;\n t.angle = w.angle;\n\n result.push(t);\n }\n\n return result;\n }\n\n output() {\n return this.outputCallback ? this.outputCallback(this.formatTagItem(this.result)) : this.formatTagItem(this.result);\n }\n\n progressiveOutput() {\n return this.outputCallback\n ? this.outputCallback(this.formatTagItem(this.progressiveResult))\n : this.formatTagItem(this.progressiveResult);\n }\n // 词语尺寸是否达小于最小尺寸,true时不能继续扩大画布“\n private updateBoardExpandStatus(fontSize: number) {\n this._isBoardExpandCompleted = fontSize * (this._originSize[0] / this._size[0]) < this.options.minFontSize;\n }\n\n // 是否可以继续扩大画布,true可以继续扩大\n private shouldShrinkContinue() {\n return !this.options.clip && this.options.shrink && !this._isBoardExpandCompleted;\n }\n\n // 根据 bounds 最大比例缩小 size\n private shrinkBoard(bounds: Bounds) {\n const leftTopPoint = bounds[0];\n const rightBottomPoint = bounds[1];\n if (rightBottomPoint.x >= this._size[0] || rightBottomPoint.y >= this._size[1]) {\n return;\n }\n const minXValue = Math.min(leftTopPoint.x, this._size[0] - rightBottomPoint.x);\n const minYValue = Math.min(leftTopPoint.y, this._size[1] - rightBottomPoint.y);\n const minRatio = Math.min(minXValue / this._size[0], minYValue / this._size[1]) * 2;\n this._size = this._size.map(v => v * (1 - minRatio)) as any;\n }\n\n // 扩充 bitmap\n private expandBoard(board: number[], bounds: Bounds, factor?: any) {\n const expandedLeftWidth = (this._size[0] * (factor || 1.1) - this._size[0]) >> 5;\n let diffWidth = expandedLeftWidth * 2 > 2 ? expandedLeftWidth : 2;\n if (diffWidth % 2 !== 0) {\n diffWidth++;\n }\n let diffHeight = Math.ceil((this._size[1] * (diffWidth << 5)) / this._size[0]);\n if (diffHeight % 2 !== 0) {\n diffHeight++;\n }\n const w = this._size[0];\n const h = this._size[1];\n const widthArr = new Array(diffWidth).fill(0);\n\n const heightArr = new Array((diffHeight / 2) * (diffWidth + (w >> 5))).fill(0);\n this.insertZerosToArray(board, h * (w >> 5), heightArr.length + diffWidth / 2);\n for (let i = h - 1; i > 0; i--) {\n this.insertZerosToArray(board, i * (w >> 5), widthArr.length);\n }\n this.insertZerosToArray(board, 0, heightArr.length + diffWidth / 2);\n this._size = [w + (diffWidth << 5), h + diffHeight];\n if (bounds) {\n bounds[0].x += (diffWidth << 5) / 2;\n bounds[0].y += diffHeight / 2;\n bounds[1].x += (diffWidth << 5) / 2;\n bounds[1].y += diffHeight / 2;\n }\n }\n\n // 分组扩充填充数组, 一次填充超过大概126000+会报stack overflow,worker环境下大概6w,这边取个比较小的\n // https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why\n private insertZerosToArray(array: any[], index: number, length: number) {\n if (this.options.customInsertZerosToArray) {\n return this.options.customInsertZerosToArray(array, index, length);\n }\n const len = Math.floor(length / MAX_ARGUMENTS_LENGTH);\n const restLen = length % MAX_ARGUMENTS_LENGTH;\n\n for (let i = 0; i < len; i++) {\n array.splice(index + i * MAX_ARGUMENTS_LENGTH, 0, ...new Array(MAX_ARGUMENTS_LENGTH).fill(0));\n }\n array.splice(index + len * MAX_ARGUMENTS_LENGTH, 0, ...new Array(restLen).fill(0));\n }\n\n private getContext(canvas: any) {\n // 缩放比例\n canvas.width = 1;\n canvas.height = 1;\n const tempContext = canvas.getContext('2d', { willReadFrequently: true });\n const imageData = tempContext.getImageData(0, 0, 1, 1);\n const ratio = Math.sqrt(imageData.data.length >> 2);\n\n canvas.width = (this.cw << 5) / ratio;\n canvas.height = this.ch / ratio;\n const context = canvas.getContext('2d', { willReadFrequently: true });\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n\n return { context: context, ratio: ratio, canvas };\n }\n\n private place(board: number[], tag: TagItem, bounds: Bounds, maxRadius: number) {\n let isCollide = false;\n // 情况1,超长词语\n if (this.shouldShrinkContinue() && (tag.width > this._size[0] || tag.height > this._size[1])) {\n this._placeStatus = 1;\n return false;\n }\n\n const dt: number = this.random() < 0.5 ? 1 : -1;\n // 根据缓存判断是否有放置空间\n if (!this.shouldShrinkContinue() && this.isSizeLargerThanMax(tag, dt)) {\n return null;\n }\n const startX = tag.x;\n const startY = tag.y;\n const maxDelta = Math.sqrt(this._size[0] * this._size[0] + this._size[1] * this._size[1]);\n const s = this.spiral(this._size);\n let t: number = -dt;\n let dxdy;\n let dx;\n let dy;\n let _tag;\n\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n while ((dxdy = s((t += dt)))) {\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 半径\n const radius = Math.sqrt(dx ** 2 + dy ** 2);\n // 弧度\n let rad = Math.atan(dy / dx);\n /*\n * 弧度从x轴正方向开始,逆时针方向为正,范围[0, 2PI]\n * atan返回值∈[-1/2PI, 1/2PI],可以正确描述一四象限\n * 第一象限atan为正,弧度正确\n * 第二象限atan为负,等同于第四象限,弧度需要+PI矫正到第二象限\n * 第三象限atan为正,等同于第一象限,弧度需要+PI矫正到第三象限\n * 第四象限atan为负,需要矫正到正值,因此弧度需要+2PI\n */\n if (dx < 0) {\n rad += Math.PI;\n } else if (dy < 0) {\n rad = 2 * Math.PI + rad;\n }\n\n // 半径更改比例[0, 1]\n const rx = this.shape(rad);\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) {\n break;\n } // (dx, dy)距离中心超过maxDelta,跳出螺旋返回false\n\n if (radius >= maxRadius) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue; // 判断是否在指定形状内\n }\n\n tag.x = startX + ~~(radius * rx * Math.cos(-rad));\n tag.y = startY + ~~(radius * rx * Math.sin(-rad));\n\n // 超出画布范围\n _tag = tag;\n if (this.options.clip) {\n // 通过剪裁文字,让文字能够正常渲染\n\n if (!this.shouldShrinkContinue()) {\n // 当文字全部在外面时\n if (isFullOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n } else if (isPartOutside(_tag, this._size)) {\n // 部分在外面\n _tag = clipInnerTag(_tag, this._size);\n }\n } else {\n if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n }\n } else if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n\n // 进入collide检测\n isCollide = true;\n // TODO only check for collisions within current bounds.\n if (!bounds || collideRects(_tag, bounds)) {\n if (!bounds || !cloudCollide(_tag, board, this._size)) {\n // 合并文字占用部分到board\n const sprite = _tag.sprite;\n const w = _tag.width >> 5;\n const sw = this._size[0] >> 5;\n const lx = _tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = _tag.y1 - _tag.y0;\n let x = (_tag.y + _tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n // paint(board, size, originSize)\n x += sw;\n }\n // paint(_tag.sprite, [_tag.width, _tag.height])\n // paint(board, size, originSize)\n tag.sprite = null;\n _tag.sprite = null;\n // if (Date.now() - start > 10) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n return true;\n }\n }\n }\n // if (Date.now() - start > 50) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n if (this._tTemp !== null) {\n this._placeStatus = 3;\n }\n !this.shouldShrinkContinue() && this.setCache(_tag, dt);\n\n return false;\n }\n\n /**\n * 清除缓存\n */\n private clearCache() {\n this.cacheMap.clear();\n }\n /**\n * 设置缓存\n * @param {*} tag\n * @param {number} dt 旋转方向, 1, -1\n */\n private setCache(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n if (!this.cacheMap.has(cacheKey)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n return;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n if ((w < width && h < height) || (w <= width && h < height)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n }\n }\n\n /**\n * 判断当前text是否能放置\n * 如果缓存中有同旋转角度和旋转方向的text,\n * 且当前text的boundingBox大于缓存boundingBox, 则跳过放置尝试\n * @param {*} tag\n * @param {*} dt 旋转方向, 1, -1\n */\n private isSizeLargerThanMax(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n if (!this.cacheMap.has(cacheKey)) {\n return false;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n return w >= width && h >= height;\n }\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n// cloudSprite从索引di开始向后绘制词语sprite,直到可以一次绘制的最大范围;\n// 如果索引di在它自己的轮次都无法绘制(hasText = true),那么它就是超大词语,无法在屏幕出现\n// 此时,不需要为他扩大画布\nfunction cloudSprite(contextAndRatio: any, d: TagItem, data: TagItem[], di: number, cw: number, ch: number) {\n if (d.sprite) {\n return;\n }\n const c = contextAndRatio.context;\n const ratio = contextAndRatio.ratio;\n // 设置transform\n c.setTransform(ratio, 0, 0, ratio, 0, 0);\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n let x = 0;\n let y = 0;\n let maxh = 0;\n const n = data.length;\n let w;\n let w32;\n let h;\n let i;\n let j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.fontStyle + ' ' + d.fontWeight + ' ' + ~~((d.fontSize + 1) / ratio) + 'px ' + d.fontFamily;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.fontSize << 1;\n if (d.angle) {\n const sr = Math.sin(d.angle);\n const cr = Math.cos(d.angle);\n const wcr = w * cr;\n const wsr = w * sr;\n const hcr = h * cr;\n const hsr = h * sr;\n w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = ((w + 31) >> 5) << 5;\n }\n // w, h为旋转后,词语所占区域的宽高\n if (h > maxh) {\n maxh = h;\n } // 记录当前行最大高度\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) {\n break;\n } // 绘制区域的高度为2048px,超过长度下次绘制(TODO: 如果存在超高词语,这里是否可以当做一个退出机制?)\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.angle) {\n c.rotate(d.angle);\n }\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 // 词语绘制完成,记录其在画布上的相对位置和范围\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n // x0, x1, y0, y1是四角相对于中心点的相对坐标\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位置右移,等待下一个词语绘制\n x += w;\n }\n\n const pixelsImageData = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio);\n const pixels = pixelsImageData.data;\n const sprite: any[] = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) {\n continue;\n }\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) {\n sprite[i] = 0;\n }\n x = d.xoff;\n if (x == null) {\n return;\n }\n y = d.yoff;\n let seen = 0;\n let seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n // 在sprite数组中,每一个Uint32的数字记录了32个像素的绘制情况\n // 在pixels中,只取alpha通道的值,因此需要每个像素需要 << 2 得到alpha通道\n const k = w32 * j + (i >> 5);\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n // 如果当前行发现着色,开始记录行号\n if (seen) {\n seenRow = j;\n } else {\n // 如果当前行未发现着色,则在结果中省去改行(高度--,y坐标++,左上角相对坐标++)\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\n// Use mask-based collision detection.\nfunction cloudCollide(tag: TagItem, board: number[], size: [number, number]) {\n const sw = size[0] >> 5;\n const sprite = tag.sprite;\n const w = tag.width >> 5;\n const lx = tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\n let 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)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds: Bounds, d: TagItem) {\n const b0 = bounds[0];\n const b1 = bounds[1];\n if (d.x + d.x0 < b0.x) {\n b0.x = d.x + d.x0;\n }\n if (d.y + d.y0 < b0.y) {\n b0.y = d.y + d.y0;\n }\n if (d.x + d.x1 > b1.x) {\n b1.x = d.x + d.x1;\n }\n if (d.y + d.y1 > b1.y) {\n b1.y = d.y + d.y1;\n }\n}\n\nfunction collideRects(a: TagItem, b: Bounds) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nconst isFullOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 > size[0] || tag.y + tag.y0 > size[0] || tag.x + tag.x1 < 0 || tag.y + tag.y1 < 0;\n};\n\nconst isPartOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1];\n};\n\nfunction clipInnerTag(tag: TagItem, size: [number, number]) {\n const sprite = tag.sprite;\n const h = tag.y1 - tag.y0;\n const w = tag.width >> 5;\n let x = 0;\n\n const _sprite: number[] = [];\n const js = Math.max(-(tag.y0 + tag.y), 0);\n const je = Math.min(h + (size[1] - (tag.y1 + tag.y)), h);\n const is = Math.max(-(tag.x0 + tag.x), 0) >> 5;\n const ie = Math.min(w + ((size[0] - (tag.x1 + tag.x)) >> 5) + 1, w);\n\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (j < js || je <= j || i < is || ie <= i) {\n // sprite[x + i] = null\n // if (ie === i) {\n // var value = sprite[x + i]\n // var overflow = (ie << 5) - (tag.x1 + tag.x)\n // _sprite.push((value >> overflow << overflow))\n // }\n } else {\n _sprite.push(sprite[x + i]);\n }\n }\n x += w;\n }\n // paint(sprite, [tag.width, tag.height])\n // var _sprite = sprite.filter(d => d !== null)\n const xl = is << 5;\n const xr = (w - ie) << 5;\n const yb = js;\n const yt = h - je;\n // paint(_sprite, [tag.width - xl - xr, tag.height - yb - yt])\n\n return {\n ...tag,\n width: tag.width - xl - xr,\n height: tag.height - yb - yt,\n x0: tag.x0 + xl,\n x1: tag.x1 - xr,\n y0: tag.y0 + yb,\n y1: tag.y1 - yt,\n x: tag.x + xl / 2 - xr / 2,\n // y: tag.y + yb / 2 - yt / 2,\n sprite: _sprite\n };\n}\n","import { vglobal } from '@visactor/vrender-core';\nimport type { GeometricMaskShape, TextShapeMask } from './types/wordcloud';\nimport { getMaxRadiusAndCenter, getShapeFunction } from './shapes';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isValid, polarToCartesian } from '@visactor/vutils';\n\nexport const generateIsEmptyPixel = (backgroundColor?: string) => {\n if (!backgroundColor || backgroundColor === '#fff') {\n return (imageData: ImageData, y: number, x: number) => {\n const width = imageData.width;\n return (\n imageData.data[y * width * 4 + x * 4 + 3] === 0 ||\n (imageData.data[y * width * 4 + x * 4 + 0] === 255 &&\n imageData.data[y * width * 4 + x * 4 + 1] === 255 &&\n imageData.data[y * width * 4 + x * 4 + 2] === 255)\n );\n };\n }\n\n /* Determine bgPixel by creating\n another canvas and fill the specified background color. */\n // eslint-disable-next-line no-undef\n const bctx = vglobal.createCanvas({ width: 1, height: 1 }).getContext('2d', { willReadFrequently: true });\n\n bctx.fillStyle = backgroundColor;\n bctx.fillRect(0, 0, 1, 1);\n const bgPixel = bctx.getImageData(0, 0, 1, 1).data;\n\n return (imageData: ImageData, y: number, x: number) => {\n const width = imageData.width;\n\n return [0, 1, 2, 3].every(i => {\n return imageData.data[(y * width + x) * 4 + i] === bgPixel[i];\n });\n };\n};\n\nexport const generateMaskCanvas = (\n shape: TextShapeMask | GeometricMaskShape,\n width: number,\n height: number,\n cacheCanvas?: HTMLCanvasElement\n) => {\n const { backgroundColor = '#fff' } = shape;\n\n const maskCanvas =\n cacheCanvas ||\n vglobal.createCanvas({\n width,\n height,\n dpr: 1\n });\n const tempContext = maskCanvas.getContext('2d', { willReadFrequently: true });\n if (cacheCanvas) {\n const prevWidth = cacheCanvas.width;\n const prevHeight = cacheCanvas.height;\n tempContext.clearRect(0, 0, prevWidth, prevHeight);\n cacheCanvas.style.width = `${width}px`;\n cacheCanvas.style.height = `${height}px`;\n cacheCanvas.width = width;\n cacheCanvas.height = height;\n }\n tempContext.fillStyle = backgroundColor;\n tempContext.fillRect(0, 0, maskCanvas.width, maskCanvas.height);\n\n if ((shape as TextShapeMask).type === 'text') {\n drawTextMask(shape as TextShapeMask, maskCanvas.width, maskCanvas.height, tempContext);\n } else if ((shape as GeometricMaskShape).type === 'geometric') {\n drawGeometricMask(shape as GeometricMaskShape, maskCanvas.width, maskCanvas.height, tempContext);\n }\n\n return maskCanvas;\n};\n\nconst drawTextMask = (shape: TextShapeMask, width: number, height: number, ctx: CanvasRenderingContext2D) => {\n const {\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontStyle = 'normal',\n fontVariant = 'normal',\n fill,\n text,\n hollow\n } = shape;\n\n let baseFontSize = 12;\n\n ctx.font = `${fontStyle} ${fontVariant} ${fontWeight} ${baseFontSize}px ${fontFamily}`;\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = fill ?? 'black';\n const textMetrics = ctx.measureText(text);\n /** 斜体计算字体宽度存在不准的情况,暂时通过方法来解决 */\n const scale = fontStyle !== 'normal' ? 1.1 : 1;\n const actualWidth =\n isValid(textMetrics.actualBoundingBoxRight) && isValid(textMetrics.actualBoundingBoxLeft)\n ? Math.ceil(scale * (Math.abs(textMetrics.actualBoundingBoxRight) + Math.abs(textMetrics.actualBoundingBoxLeft)))\n : 0;\n const textWidth = Math.max(Math.ceil(textMetrics.width), actualWidth, baseFontSize);\n\n if (hollow) {\n ctx.globalCompositeOperation = 'xor';\n }\n if (textWidth > width) {\n const scale = Math.min(width / textWidth, height / baseFontSize);\n ctx.fillText(text, width / 2, height / 2);\n ctx.scale(scale, scale);\n } else {\n baseFontSize = Math.floor((baseFontSize * width) / textWidth);\n baseFontSize = Math.min(baseFontSize, height);\n\n ctx.font = `${fontStyle} ${fontVariant} ${fontWeight} ${baseFontSize}px ${fontFamily}`;\n ctx.fillText(text, Math.floor(width / 2), Math.floor(height / 2));\n }\n};\n\nexport const generatePoints = (center: IPointLike, radius: number, startAngle: number = 0, count: number) => {\n const angle = (2 * Math.PI) / count;\n return new Array(count).fill(0).map((entry, index) => {\n return polarToCartesian(center, radius, startAngle + index * angle);\n });\n};\n\nexport const generateCardioidPoints = (center: IPointLike, radius: number, startAngle: number = 0, count: number) => {\n const angle = (2 * Math.PI) / count;\n const func = getShapeFunction('cardioid');\n\n return new Array(count).fill(0).map((entry, index) => {\n const theta = startAngle + index * angle;\n const r = radius * func(theta);\n const res = polarToCartesian(center, r, theta);\n return res;\n });\n};\n\nexport const drawRegularPolygon = (ctx: CanvasRenderingContext2D, points: IPointLike[]) => {\n ctx.beginPath();\n points.forEach((p: IPointLike, index: number) => {\n if (index === 0) {\n ctx.moveTo(p.x, p.y);\n } else {\n ctx.lineTo(p.x, p.y);\n }\n });\n\n ctx.closePath();\n ctx.fill();\n};\n\nexport const drawCardioid = (ctx: CanvasRenderingContext2D, points: IPointLike[]) => {\n ctx.beginPath();\n let prev: IPointLike;\n points.forEach((p: IPointLike, index: number) => {\n if (index === 0) {\n ctx.moveTo(p.x, p.y);\n } else {\n ctx.bezierCurveTo(p.x, p.y, prev.x, prev.y, p.x, p.y);\n }\n prev = p;\n });\n\n ctx.closePath();\n ctx.fill();\n};\n\nconst drawGeometricMask = (shape: GeometricMaskShape, width: number, height: number, ctx: CanvasRenderingContext2D) => {\n const { fill, hollow } = shape;\n const { center, maxRadius } = getMaxRadiusAndCenter(shape.shape, [width, height]);\n\n ctx.fillStyle = fill ?? 'black';\n\n if (hollow) {\n ctx.globalCompositeOperation = 'xor';\n }\n const cx = center[0];\n const cy = center[1];\n\n if (shape.shape === 'cardioid') {\n drawCardioid(ctx, generateCardioidPoints({ x: cx, y: cy }, maxRadius, 0, 100));\n } else if (shape.shape === 'circle') {\n ctx.beginPath();\n ctx.arc(cx, cy, maxRadius, 0, 2 * Math.PI, true);\n ctx.fill();\n } else if (shape.shape === 'diamond') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 4));\n } else if (shape.shape === 'square') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 4, 4));\n } else if (shape.shape === 'pentagon') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, Math.PI / 2, 5));\n } else if (shape.shape === 'triangle' || shape.shape === 'triangleUpright') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 3));\n } else if (shape.shape === 'triangleForward') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, 0, 3));\n } else if (shape.shape === 'star') {\n const outterPoints = generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 5);\n const innerPoints = generatePoints(\n { x: cx, y: cy },\n maxRadius / (2 * Math.cos(Math.PI / 5)),\n -Math.PI / 2 + Math.PI / 5,\n 5\n );\n const points = [];\n for (let i = 0; i < 5; i++) {\n points.push(outterPoints[i]);\n points.push(innerPoints[i]);\n }\n drawRegularPolygon(ctx, points);\n } else {\n ctx.fillRect(0, 0, width, height);\n }\n};\n","import { type IProgressiveTransformResult } from '@visactor/vgrammar-core';\n\n/*!\n * wordcloud2.js\n * http://timdream.org/wordcloud2.js/\n *\n * Copyright 2011 - 2019 Tim Guan-tin Chien and contributors.\n * Released under the MIT license\n */\n\nimport type { IBaseLayoutOptions } from './interface';\nimport { isObject, merge, shuffleArray } from '@visactor/vutils';\nimport { BaseLayout } from './base';\nimport type { CanvasMaskShape } from '@visactor/vgrammar-util';\nimport { generateIsEmptyPixel, generateMaskCanvas, getMaxRadiusAndCenter } from '@visactor/vgrammar-util';\n\ninterface IGridLayoutOptions extends IBaseLayoutOptions {\n gridSize?: number;\n\n ellipticity?: number;\n}\n\ninterface TextInfo {\n datum: any;\n /** Read the pixels and save the information to the occupied array */\n occupied: [number, number][];\n bounds: [number, number, number, number];\n gw: number;\n gh: number;\n fillTextOffsetX: number;\n fillTextOffsetY: number;\n fillTextWidth: number;\n fillTextHeight: number;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n text: string;\n distance?: number;\n theta?: number;\n}\n\nexport class GridLayout extends BaseLayout implements IProgressiveTransformResult {\n static defaultOptions: Partial = {\n gridSize: 8,\n ellipticity: 1,\n maxSingleWordTryCount: 1\n };\n\n private gridSize: number;\n\n /* ================== runtime vars ================== */\n private center: [number, number];\n private pointsAtRadius: [number, number, number][][];\n private ngx: number;\n private ngy: number;\n private grid: boolean[][];\n private maxRadius: number;\n\n constructor(options: IGridLayoutOptions) {\n super(merge({}, GridLayout.defaultOptions, options));\n\n this.gridSize = Math.max(Math.floor(this.options.gridSize), 4);\n }\n\n private getPointsAtRadius(radius: number) {\n if (this.pointsAtRadius[radius]) {\n return this.pointsAtRadius[radius];\n }\n\n // Look for these number of points on each radius\n const T = radius * 8;\n\n // Getting all the points at this radius\n let t = T;\n const points: [number, number, number][] = [];\n\n if (radius === 0) {\n points.push([this.center[0], this.center[1], 0]);\n }\n\n while (t--) {\n // distort the radius to put the cloud in shape\n const rx = this.shape((t / T) * 2 * Math.PI); // 0 to 1\n\n // Push [x, y, t] t is used solely for getTextColor()\n points.push([\n this.center[0] + radius * rx * Math.cos((-t / T) * 2 * Math.PI),\n this.center[1] + radius * rx * Math.sin((-t / T) * 2 * Math.PI) * this.options.ellipticity,\n (t / T) * 2 * Math.PI\n ]);\n }\n\n this.pointsAtRadius[radius] = points;\n return points;\n }\n\n private getTextInfo(item: any, shrinkRatio: number = 1, index: number): TextInfo {\n // calculate the acutal font size\n // fontSize === 0 means weightFactor function wants the text skipped,\n // and size < minSize means we cannot draw the text.\n const sizeShrinkRatio = this.options.clip ? 1 : shrinkRatio;\n\n const fontSize = Math.max(\n Math.floor((this.isTryRepeatFill ? this.options.fillTextFontSize : this.getTextFontSize(item)) * sizeShrinkRatio),\n this.options.minFontSize\n );\n let word = this.getText(item) + '';\n\n if (this.options.clip) {\n word = word.slice(0, Math.ceil(word.length * shrinkRatio));\n }\n\n if (!word) {\n return null;\n }\n\n // Get fontWeight that will be used to set fctx.font\n const fontWeight = this.getTextFontWeight(item);\n const fontStyle = this.getTextFontStyle(item);\n const angle = this.getTextRotate ? this.getTextRotate(item, index) ?? 0 : 0;\n const fontFamily = this.getTextFontFamily(item);\n\n // eslint-disable-next-line no-undef\n const fcanvas = document.createElement('canvas');\n const fctx = fcanvas.getContext('2d', { willReadFrequently: true });\n\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Estimate the dimension of the text with measureText().\n const fw = fctx.measureText(word).width;\n const fh = Math.max(fontSize, fctx.measureText('m').width, fctx.measureText('\\uFF37').width);\n\n // Create a boundary box that is larger than our estimates,\n // so text don't get cut of (it sill might)\n let boxWidth = fw + fh * 2;\n let boxHeight = fh * 3;\n const fgw = Math.ceil(boxWidth / this.gridSize);\n const fgh = Math.ceil(boxHeight / this.gridSize);\n boxWidth = fgw * this.gridSize;\n boxHeight = fgh * this.gridSize;\n\n // Calculate the proper offsets to make the text centered at\n // the preferred position.\n\n // This is simply half of the width.\n const fillTextOffsetX = -fw / 2;\n // Instead of moving the box to the exact middle of the preferred\n // position, for Y-offset we move 0.4 instead, so Latin alphabets look\n // vertical centered.\n const fillTextOffsetY = -fh * 0.4;\n\n // Calculate the actual dimension of the canvas, considering the rotation.\n const cgh = Math.ceil(\n (boxWidth * Math.abs(Math.sin(angle)) + boxHeight * Math.abs(Math.cos(angle))) / this.gridSize\n );\n const cgw = Math.ceil(\n (boxWidth * Math.abs(Math.cos(angle)) + boxHeight * Math.abs(Math.sin(angle))) / this.gridSize\n );\n const width = cgw * this.gridSize;\n const height = cgh * this.gridSize;\n\n fcanvas.setAttribute('width', '' + width);\n fcanvas.setAttribute('height', '' + height);\n\n // Scale the canvas with |mu|.\n fctx.scale(1, 1);\n fctx.translate(width / 2, height / 2);\n fctx.rotate(-angle);\n\n // Once the width/height is set, ctx info will be reset.\n // Set it again here.\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Fill the text into the fcanvas.\n // XXX: We cannot because textBaseline = 'top' here because\n // Firefox and Chrome uses different default line-height for canvas.\n // Please read https://bugzil.la/737852#c6.\n // Here, we use textBaseline = 'middle' and draw the text at exactly\n // 0.5 * fontSize lower.\n fctx.fillStyle = '#000';\n fctx.textBaseline = 'middle';\n fctx.fillText(word, fillTextOffsetX, fillTextOffsetY);\n\n // Get the pixels of the text\n const imageData = fctx.getImageData(0, 0, width, height).data;\n\n if (this.exceedTime()) {\n return null;\n }\n\n // Read the pixels and save the information to the occupied array\n const occupied: [number, number][] = [];\n let gx = cgw;\n let gy;\n const bounds: [number, number, number, number] = [cgh / 2, cgw / 2, cgh / 2, cgw / 2];\n\n const singleGridLoop = (gx: number, gy: number, out: [number, number][]) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n if (imageData[((gy * this.gridSize + y) * width + (gx * this.gridSize + x)) * 4 + 3]) {\n out.push([gx, gy]);\n\n if (gx < bounds[3]) {\n bounds[3] = gx;\n }\n if (gx > bounds[1]) {\n bounds[1] = gx;\n }\n if (gy < bounds[0]) {\n bounds[0] = gy;\n }\n if (gy > bounds[2]) {\n bounds[2] = gy;\n }\n\n return;\n }\n }\n }\n };\n while (gx--) {\n gy = cgh;\n while (gy--) {\n singleGridLoop(gx, gy, occupied);\n }\n }\n\n // Return information needed to create the text on the real canvas\n return {\n datum: item,\n occupied: occupied,\n bounds: bounds,\n gw: cgw,\n gh: cgh,\n fillTextOffsetX: fillTextOffsetX,\n fillTextOffsetY: fillTextOffsetY,\n fillTextWidth: fw,\n fillTextHeight: fh,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n angle,\n text: word\n };\n }\n\n private calculateEmptyRate() {\n const totalCount = this.ngx * this.ngy;\n let emptyCount = 0;\n\n for (let gx = 0; gx < this.ngx; gx++) {\n for (let gy = 0; gy < this.ngy; gy++) {\n if (this.grid[gx][gy]) {\n emptyCount++;\n }\n }\n }\n return emptyCount / totalCount;\n }\n\n /* Help function to updateGrid */\n private fillGridAt = (x: number, y: number) => {\n if (x >= this.ngx || y >= this.ngy || x < 0 || y < 0) {\n return;\n }\n\n this.grid[x][y] = false;\n };\n\n /* Update the filling information of the given space with occupied points.\n Draw the mask on the canvas if necessary. */\n private updateGrid = (gx: number, gy: number, gw: number, gh: number, info: TextInfo) => {\n const occupied = info.occupied;\n\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n continue;\n }\n\n this.fillGridAt(px, py);\n }\n };\n\n /* Determine if there is room available in the given dimension */\n private canFitText(gx: number, gy: number, gw: number, gh: number, occupied: number[][]) {\n // Go through the occupied points,\n // return false if the space is not available.\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n if (!this.options.drawOutOfBound) {\n return false;\n }\n continue;\n }\n\n if (!this.grid[px][py]) {\n return false;\n }\n }\n return true;\n }\n\n /* putWord() processes each item on the list,\n calculate it's size and determine it's position, and actually\n put it on the canvas. */\n layoutWord(index: number, shrinkRatio: number = 1): boolean {\n // get info needed to put the text onto the canvas\n const item = this.data[index];\n const info = this.getTextInfo(item, shrinkRatio, index);\n\n // not getting the info means we shouldn't be drawing this one.\n if (!info) {\n return false;\n }\n\n if (this.exceedTime()) {\n return false;\n }\n\n // If drawOutOfBound is set to false,\n // skip the loop if we have already know the bounding box of\n // word is larger than the canvas.\n if (\n !this.options.drawOutOfBound &&\n (!this.options.shrink || info.fontSize <= this.options.minFontSize) &&\n !this.options.clip\n ) {\n const bounds = info.bounds;\n if (bounds[1] - bounds[3] + 1 > this.ngx || bounds[2] - bounds[0] + 1 > this.ngy) {\n return false;\n }\n }\n\n // Determine the position to put the text by\n // start looking for the nearest points\n let r = this.maxRadius + 1;\n\n const tryToPutWordAtPoint = (gxy: [number, number, number]) => {\n const gx = Math.floor(gxy[0] - info.gw / 2);\n const gy = Math.floor(gxy[1] - info.gh / 2);\n const gw = info.gw;\n const gh = info.gh;\n\n // If we cannot fit the text at this position, return false\n // and go to the next position.\n if (!this.canFitText(gx, gy, gw, gh, info.occupied)) {\n return false;\n }\n\n info.distance = this.maxRadius - r;\n info.theta = gxy[2];\n\n // Actually put the text on the canvas\n this.outputText(gx, gy, info);\n\n // Mark the spaces on the grid as filled\n this.updateGrid(gx, gy, gw, gh, info);\n\n // Return true so some() will stop and also return true.\n return true;\n };\n\n while (r--) {\n let points = this.getPointsAtRadius(this.maxRadius - r);\n\n if (this.options.random) {\n points = [].concat(points);\n shuffleArray(points);\n }\n\n // Try to fit the words by looking at each point.\n // array.some() will stop and return true\n // when putWordAtPoint() returns true.\n // If all the points returns false, array.some() returns false.\n const drawn = points.some(tryToPutWordAtPoint);\n\n if (drawn) {\n // leave putWord() and return true\n return true;\n }\n }\n if (this.options.clip) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n } else if (this.options.shrink && info.fontSize > this.options.minFontSize) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n }\n // we tried all distances but text won't fit, return false\n return false;\n }\n\n private outputText(gx: number, gy: number, info: TextInfo) {\n const color = this.getTextColor(info);\n const output = {\n text: info.text,\n datum: info.datum,\n color,\n fontStyle: info.fontStyle,\n fontWeight: info.fontWeight,\n fontFamily: info.fontFamily,\n angle: info.angle,\n width: info.fillTextWidth,\n height: info.fillTextHeight,\n x: (gx + info.gw / 2) * this.gridSize,\n y: (gy + info.gh / 2) * this.gridSize + info.fillTextOffsetY + info.fontSize * 0.5,\n fontSize: info.fontSize\n };\n\n this.result.push(output);\n\n if (this.progressiveResult) {\n this.progressiveResult.push(output);\n }\n }\n\n private initGrid(config: { width: number; height: number }) {\n /* Clear the canvas only if the clearCanvas is set,\n if not, update the grid to the current canvas state */\n this.grid = [];\n const shape = this.options.shape;\n\n if (isObject(shape)) {\n const canvas = generateMaskCanvas(shape as CanvasMaskShape, config.width, config.height);\n /* Read back the pixels of the canvas we got to tell which part of the\n canvas is empty.\n (no clearCanvas only works with a canvas, not divs) */\n let imageData = canvas.getContext('2d').getImageData(0, 0, this.ngx * this.gridSize, this.ngy * this.gridSize);\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(canvas);\n }\n\n let isEmptyPixel = generateIsEmptyPixel((shape as CanvasMaskShape).backgroundColor);\n let i;\n const singleGridLoop = (gx: number, gy: number) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n i = 4;\n\n if (!isEmptyPixel(imageData, gy * this.gridSize + y, gx * this.gridSize + x)) {\n this.grid[gx][gy] = true;\n return;\n }\n }\n }\n this.grid[gx][gy] = false;\n };\n\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n /* eslint no-labels: [\"error\", { \"allowLoop\": true }] */\n singleGridLoop(gx, gy);\n if (this.grid[gx][gy] !== false) {\n this.grid[gx][gy] = true;\n }\n }\n }\n\n imageData = isEmptyPixel = undefined;\n } else {\n /* fill the grid with empty state */\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n this.grid[gx][gy] = true;\n }\n }\n }\n }\n\n canRepeat() {\n return this.calculateEmptyRate() > 1e-3;\n }\n\n layout(data: any[], config: { width: number; height: number; origin?: [number, number] }) {\n this.initProgressive();\n this.drawnCount = 0;\n this.isTryRepeatFill = false;\n this.originalData = data;\n this.data = data;\n this.pointsAtRadius = [];\n this.ngx = Math.floor(config.width / this.gridSize);\n this.ngy = Math.floor(config.height / this.gridSize);\n const { center, maxRadius } = getMaxRadiusAndCenter(this.options.shape as string, [config.width, config.height]);\n\n // Determine the center of the word cloud\n this.center = config.origin\n ? [config.origin[0] / this.gridSize, config.origin[1] / this.gridSize]\n : [center[0] / this.gridSize, center[1] / this.gridSize];\n\n // Maxium radius to look for space\n this.maxRadius = Math.floor(maxRadius / this.gridSize);\n\n this.initGrid(config);\n this.result = [];\n\n return this.progressiveRun();\n }\n}\n","/**\n * 主要用于小程序环境的快速布局算法\n */\nimport type { ITextAttribute } from '@visactor/vrender-core';\nimport { getTextBounds } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport type { IBaseLayoutOptions, TagItemAttribute } from './interface';\nimport { BaseLayout } from './base';\nimport { merge } from '@visactor/vutils';\nexport interface TagItem {\n datum: any;\n width: number;\n height: number;\n text: string;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n x: number;\n y: number;\n top: number;\n left: number;\n}\n\ninterface IFastLayoutOptions extends IBaseLayoutOptions {\n padding?: TagItemAttribute;\n enlarge?: boolean;\n}\n\nexport class FastLayout extends BaseLayout implements IProgressiveTransformResult {\n private random: () => number;\n\n /* ==================== runtime vars ======================== */\n private center: [number, number];\n private aspectRatio: number;\n private maxRadius: number;\n private width: number;\n private height: number;\n\n static defaultOptions: Partial = {\n enlarge: false\n };\n\n constructor(options: IFastLayoutOptions) {\n super(merge({}, FastLayout.defaultOptions, options));\n this.random = this.options.random ? Math.random : () => 0;\n this.aspectRatio = 1;\n }\n\n // 新词是否与目前layout结果重叠\n private fit(word: TagItem) {\n for (let i = 0, len = this.result.length; i < len; i++) {\n if (isOverlap(word, this.result[i] as TagItem)) {\n return false;\n }\n }\n return true;\n }\n\n private getTextInfo(datum: any, index: number) {\n const info: Partial = {\n datum,\n fontSize: this.getTextFontSize(datum),\n fontWeight: this.getTextFontWeight(datum),\n fontStyle: this.getTextFontStyle(datum),\n fontFamily: this.getTextFontFamily(datum),\n angle: this.getTextRotate(datum, index),\n text: this.getText(datum) + '',\n x: this.center[0],\n y: this.center[1]\n };\n\n const bounds = getTextBounds(info as ITextAttribute);\n\n info.width = bounds.width();\n info.height = bounds.height();\n info.top = this.center[1] - info.height + info.height * 0.21;\n info.left = this.center[0] - info.width / 2;\n\n return info as TagItem;\n }\n\n layoutWord(index: number) {\n const step = 0.5; // 步长决定布局时间,也决定布局结果\n const info = this.getTextInfo(this.data[index], index);\n\n let angle = 2 * Math.PI;\n let radius = 0;\n let left = info.left;\n let top = info.top;\n const width = info.width;\n const height = info.height;\n let rx = 1;\n let isFit = this.fit(info);\n\n while (!isFit && radius < this.maxRadius) {\n // elliptic shape\n radius += step; // spiral radius\n rx = this.shape((radius / this.maxRadius) * 2 * Math.PI); // 0 to 1\n angle += (this.options.random ? (this.random() > 0.5 ? 1 : -1) : index % 2 === 0 ? 1 : -1) * step;\n\n left = this.center[0] - width / 2 + radius * rx * Math.cos(angle) * this.aspectRatio;\n top = this.center[1] - height / 2 + radius * rx * Math.sin(angle);\n\n info.left = left;\n info.top = top;\n info.x = left + width / 2;\n info.y = top + height / 2;\n\n isFit = this.fit(info);\n }\n\n if (!isFit) {\n return false;\n }\n\n if (\n this.options.clip ||\n (info.left >= 0 && info.left + info.width <= this.width && info.top >= 0 && info.top + info.height <= this.height)\n ) {\n this.result.push(info);\n\n return true;\n }\n\n return false;\n }\n\n layout(data: any[], config: { width: number; height: number }) {\n if (!data?.length) {\n return [];\n }\n\n this.initProgressive();\n this.result = [];\n this.maxRadius = Math.sqrt(config.width * config.width + config.height * config.height) / 2;\n this.center = [config.width / 2, config.height / 2];\n this.width = config.width;\n this.height = config.height;\n this.data = data.sort((a: any, b: any) => {\n return this.getTextFontSize(b) - this.getTextFontSize(a);\n });\n\n // 将words按照fontSize排序,结果更美观\n // words.sort((a, b) => b.fontSize - a.fontSize);\n\n let i = 0;\n\n while (i < data.length) {\n const drawn = this.layoutWord(i);\n\n i++;\n this.progressiveIndex = i;\n\n if (this.exceedTime()) {\n break;\n }\n }\n\n return this.result;\n }\n}\n\n// 判断矩形是否重叠\nfunction isOverlap(a: TagItem, b: TagItem) {\n if (a.left + a.width < b.left || a.top + a.height < b.top || a.left > b.left + b.width || a.top > b.top + b.height) {\n return false;\n }\n return true;\n}\n","import { CloudLayout } from './cloud-layout';\nimport { isFunction, isNumber, isString, toNumber, Logger, isArray } from '@visactor/vutils';\nimport type { TagOutputItem, TagItemAttribute } from './interface';\nimport { GridLayout } from './grid-layout';\nimport { FastLayout } from './fast-layout';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n z: 'z',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle'\n};\n\nexport type FieldOption = { field: string };\nexport type CallbackOption = (datum: any) => any;\nexport type AsType = {\n x: string;\n y: string;\n z: string;\n fontFamily: string;\n fontSize: string;\n fontStyle: string;\n fontWeight: string;\n angle: string;\n};\n\nexport const transform = (\n options: {\n size?: [number, number];\n fontFamily?: FieldOption | TagItemAttribute;\n fontStyle?: FieldOption | TagItemAttribute;\n fontWeight?: FieldOption | TagItemAttribute;\n fontSize?: FieldOption | TagItemAttribute;\n fontSizeRange?: [number, number];\n rotate?: FieldOption | TagItemAttribute;\n text: FieldOption | CallbackOption | string;\n spiral?: string;\n padding?: FieldOption | TagItemAttribute;\n shape?: string;\n shrink?: boolean;\n enlarge?: boolean;\n clip?: boolean;\n minFontSize?: number;\n randomVisible?: boolean;\n as?: AsType;\n layoutType?: string;\n progressiveTime?: number;\n progressiveStep?: number;\n depth_3d?: number;\n postProjection?: string;\n dataIndexKey?: string;\n repeatFill?: boolean;\n },\n upstreamData: any[]\n) => {\n if (options.size && (options.size[0] <= 0 || options.size[1] <= 0)) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n\n /** 输入数据转换 */\n const data = upstreamData;\n const canvasSize = (options.size ?? [500, 500]).slice() as [number, number];\n // canvasSize必须是整数\n canvasSize[0] = Math.floor(canvasSize[0]);\n canvasSize[1] = Math.floor(canvasSize[1]);\n const fontFamily = options.fontFamily ? field(options.fontFamily) : 'sans-serif';\n const fontStyle = options.fontStyle ? field(options.fontStyle) : 'normal';\n const fontWeight = options.fontWeight ? field(options.fontWeight) : 'normal';\n const rotate = options.rotate ? field(options.rotate) : 0;\n const text = field(options.text);\n const spiral = options.spiral ?? 'archimedean';\n const padding = options.padding ? field(options.padding) : 1;\n const shape = options.shape ?? 'square';\n const shrink = options.shrink ?? false;\n const enlarge = options.enlarge ?? false;\n const clip = options.clip ?? false;\n const minFontSize = options.minFontSize;\n const randomVisible = options.randomVisible;\n const as = options.as ? { ...OUTPUT, ...options.as } : OUTPUT;\n const depth_3d = options.depth_3d;\n const postProjection = options.postProjection;\n\n // 根据range转换fontSize\n let fontSize = options.fontSize ? field(options.fontSize) : 14;\n const fontSizeRange = options.fontSizeRange;\n // 只有fontSize不为固定值时,fontSizeRange才生效\n if (fontSizeRange && !isNumber(fontSize)) {\n const fsize: any = fontSize;\n const fontSizeSqrtScale = generateScale(extent(fsize, data), fontSizeRange as number[]);\n\n fontSize = datum => {\n return fontSizeSqrtScale(fsize(datum));\n };\n }\n\n let Layout: any = CloudLayout;\n\n if (options.layoutType === 'fast') {\n Layout = FastLayout;\n } else if (options.layoutType === 'grid') {\n Layout = GridLayout;\n }\n\n /** 执行布局算法 */\n const layout = new Layout({\n ...options,\n text,\n padding,\n spiral,\n shape,\n rotate,\n fontFamily,\n fontStyle,\n fontWeight,\n fontSize,\n shrink,\n clip,\n enlarge,\n minFontSize,\n random: randomVisible,\n outputCallback: (words: any[]) => {\n const res: any[] = [];\n let t: any;\n let w: TagOutputItem;\n\n for (let i = 0, len = words.length; i < len; i++) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = w.angle;\n\n if (postProjection === 'StereographicProjection') {\n stereographicProjection(canvasSize, w, t, as, depth_3d);\n }\n\n if (options.dataIndexKey) {\n t[options.dataIndexKey] = `${i}`;\n }\n\n res.push(t);\n }\n return res;\n }\n });\n\n layout.layout(data, {\n width: canvasSize[0],\n height: canvasSize[1]\n });\n\n if (options.progressiveStep > 0 || options.progressiveTime > 0) {\n return {\n progressive: layout\n };\n }\n return layout.output();\n};\n\n// 取数逻辑\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (isString(option) || isNumber(option) || isFunction(option) || isArray(option)) {\n return option as TagItemAttribute;\n }\n return (datum: any) => datum[(option as FieldOption).field] as T;\n};\n\nconst sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\n// simulation sqrt scale\nconst generateScale = (domain: number[], range: number[], type?: 'linear' | 'sqrt') => {\n if (domain[0] === domain[1]) {\n return (datum: number) => range[0]; // match smallest fontsize\n }\n const s0 = sqrt(domain[0]);\n const s1 = sqrt(domain[1]);\n const min = Math.min(s0, s1);\n const max = Math.max(s0, s1);\n\n return (datum: number) => ((sqrt(datum) - min) / (max - min)) * (range[1] - range[0]) + range[0];\n};\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\nfunction stereographicProjection(canvasSize: [number, number], w: any, t: any, as: any, depth_3d?: number) {\n const maxSize = Math.max(canvasSize[0], canvasSize[1]);\n const r = maxSize / 2;\n const out = _StereographicProjection(canvasSize[0], canvasSize[1], r, { x: r, y: r, z: depth_3d ?? r }, w);\n t[as.x] = out.x;\n t[as.y] = out.y;\n t[as.z] = out.z;\n}\n\nfunction _StereographicProjection(\n w: number,\n h: number,\n r: number,\n center: { x: number; y: number; z: number },\n word: { x: number; y: number }\n) {\n const { x, y } = word;\n const theta = (x / w) * Math.PI * 2;\n let phi = Math.PI - (y / h) * Math.PI;\n // 由于cos函数的特性,调整phi的分布,向内聚\n phi += ((phi < Math.PI / 2 ? 1 : -1) * Math.pow(Math.min(phi - Math.PI / 2, 1), 2)) / 5;\n const nx = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const ny = r * Math.cos(phi) + center.y;\n const nz = r * Math.sin(phi) * Math.sin(theta) + center.z;\n return {\n x: nx,\n y: ny,\n z: nz\n };\n}\n","import type { CloudWordType, SegmentationInputType, SegmentationOutputType } from './interface';\n\n/**\n * 求图像连通区域的个数、面积、边界、中心点\n * @param {*} shape 图像 base64\n * @param {*} size 画布大小\n */\nexport function segmentation(segmentationInput: SegmentationInputType) {\n const { size, maskCanvas } = segmentationInput;\n const ctx = maskCanvas.getContext('2d', { willReadFrequently: true });\n const imageData = ctx.getImageData(0, 0, maskCanvas.width, maskCanvas.height);\n // 保存分组标签,0 是背景(像素为白色或透明度为 0),>1 的分组\n const labels = new Array(size[0] * size[1]).fill(0);\n // 当前的种子标签\n let curLabel = 1;\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n // 当前连通域中的单位域队列\n let queue = [];\n // 注意此处,i 为行数即 y,j为x,下同\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n // 当前单位域已被标记或者属于背景区域, 则跳过\n if (labels[i * size[0] + j] !== 0 || segmentationInput.isEmptyPixel(imageData, i, j)) {\n continue;\n }\n\n labels[i * size[0] + j] = curLabel;\n // 加入当前域队列\n queue.push([i, j]);\n\n // 遍历当前域队列\n for (let k = 0; k < queue.length; k++) {\n // 四连通范围内检查未标记的前景单位域\n for (let m = 0; m < 4; m++) {\n let row: number = queue[k][0] + offset[m][0];\n let col: number = queue[k][1] + offset[m][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n // 邻近单位域未标记并且属于前景区域, 标记并加入队列\n if (labels[row * size[0] + col] === 0 && !segmentationInput.isEmptyPixel(imageData, row, col)) {\n labels[row * size[0] + col] = curLabel;\n queue.push([row, col]);\n }\n }\n }\n\n // 一个完整连通域查找完毕,标签更新\n curLabel++;\n // 清空队列\n queue = [];\n }\n }\n\n /**\n * 使用一次扫描线算法,识别出连通域的边界、面积、最大的边界点以求的最大半径\n * 边界:二值图像发生突变的地方\n * 面积:连通域中的像素个数\n * ratio: 连通区域的大致宽高比\n */\n const boundaries = {};\n const areas = {};\n const centers = {};\n const maxPoints = {}; // 存储顺序为 iMin, iMax, jMin, jMax\n const maxR = {};\n const ratios = {};\n // 存储形状的范围\n const shapeBounds = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity,\n width: 0,\n height: 0\n };\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n continue;\n }\n\n // 当前像素为边界\n if (isBoundaryPixel(i, j)) {\n boundaries[label] = boundaries[label] || [];\n boundaries[label].push([j, i]);\n\n if (!maxPoints[label]) {\n maxPoints[label] = [Infinity, -Infinity, Infinity, -Infinity];\n }\n if (i < maxPoints[label][0]) {\n maxPoints[label][0] = i;\n }\n if (i > maxPoints[label][1]) {\n maxPoints[label][1] = i;\n }\n if (j < maxPoints[label][2]) {\n maxPoints[label][2] = j;\n }\n if (j > maxPoints[label][3]) {\n maxPoints[label][3] = j;\n }\n\n // 更新 bounds\n if (j < shapeBounds.x1) {\n shapeBounds.x1 = j;\n }\n if (j > shapeBounds.x2) {\n shapeBounds.x2 = j;\n }\n if (i < shapeBounds.y1) {\n shapeBounds.y1 = i;\n }\n if (i > shapeBounds.y2) {\n shapeBounds.y2 = i;\n }\n }\n\n // 计算面积\n areas[label] = areas[label] || 0;\n areas[label]++;\n }\n }\n\n // 用于计算整个 shape 的中心点\n const allBoundaries = [];\n\n // 计算中心点\n for (const label in boundaries) {\n const boundary = boundaries[label];\n // 计算多边形重心\n const x = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[0], 0) / boundary.length);\n const y = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[1], 0) / boundary.length);\n centers[label] = [x, y];\n allBoundaries.push(...boundary);\n\n const [yMin, yMax, xMin, xMax] = maxPoints[label];\n\n maxR[label] = ~~Math.max(\n Math.sqrt((x - xMin) ** 2 + (y - yMin) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMin) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMin) ** 2)\n );\n\n ratios[label] = (xMax - xMin) / (yMax - yMin);\n }\n\n const regions = Object.keys(centers).map((key: any) => ({\n label: key - 1,\n boundary: boundaries[key],\n area: areas[key],\n center: centers[key],\n maxPoint: maxPoints[key],\n maxR: maxR[key],\n ratio: ratios[key]\n }));\n\n // 计算整个 shape 的一些属性\n shapeBounds.width = shapeBounds.x2 - shapeBounds.x1 + 1;\n shapeBounds.height = shapeBounds.y2 - shapeBounds.y1 + 1;\n\n const x = ~~(allBoundaries.reduce((acc, cur) => acc + cur[0], 0) / allBoundaries.length);\n const y = ~~(allBoundaries.reduce((acc, cur) => acc + cur[1], 0) / allBoundaries.length);\n\n const shapeMaxR = ~~Math.max(\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y1) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y1) ** 2)\n );\n const shapeRatio = shapeBounds.width / shapeBounds.height;\n const shapeArea = Object.keys(areas).reduce((acc, key) => (acc += areas[key]), 0);\n // 输出到 config 上\n const segmentation = {\n regions,\n labels,\n labelNumber: curLabel - 1\n };\n return Object.assign(segmentationInput, {\n segmentation,\n shapeBounds,\n shapeMaxR,\n shapeRatio,\n shapeCenter: [x, y],\n shapeArea\n });\n\n /**\n * 用四联通去判断是否是边缘像素\n * @param {*} i\n * @param {*} j\n */\n function isBoundaryPixel(i: number, j: number) {\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n\n // 当 i,j 非背景,且是画布边缘时,则为 boundary\n if (i === 0 || j === 0 || i === size[1] - 1 || j === size[0] - 1) {\n return true;\n }\n\n // 其他情况用四连通去判断\n for (let k = 0; k < 4; k++) {\n let row = i + offset[k][0];\n let col = j + offset[k][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n if (labels[row * size[0] + col] === 0) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 移除图像中的白边\n */\nexport function removeBorder(\n image: any,\n canvas: HTMLCanvasElement | any,\n isEmptyPixel: (imageData: ImageData, i: number, j: number) => boolean\n) {\n canvas.width = image.width;\n canvas.height = image.height;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0);\n const width = canvas.width;\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n let top = 0;\n let bottom = imageData.height;\n let left = 0;\n let right = imageData.width;\n\n const rowBlank = (width: number, y: number) => {\n for (let x = 0; x < width; ++x) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n };\n\n const columnBlank = (x: number, y0: number, y1: number) => {\n for (let y = y0; y < y1; ++y) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n };\n\n while (top < bottom && rowBlank(width, top)) {\n ++top;\n }\n while (bottom - 1 > top && rowBlank(width, bottom - 1)) {\n --bottom;\n }\n while (left < right && columnBlank(left, top, bottom)) {\n ++left;\n }\n while (right - 1 > left && columnBlank(right - 1, top, bottom)) {\n --right;\n }\n\n const trimmed = ctx.getImageData(left, top, right - left, bottom - top);\n canvas.width = trimmed.width;\n canvas.height = trimmed.height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.putImageData(trimmed, 0, 0);\n\n return canvas;\n}\n\n/**\n * 调整图像大小和位置,将图像按照长边缩放到适应画布大小,并且居中\n * 此处让图片占满画布,padding 不是这个 transform 需要考虑的\n */\nexport function scaleAndMiddleShape(image: any, size: [number, number]) {\n const width = image.width;\n const height = image.height;\n let scale = size[0] / width;\n if (height * scale > size[1]) {\n scale = size[1] / height;\n }\n\n const newWidth = Math.floor(scale * width);\n const newHeight = Math.floor(scale * height);\n // 图片绘制时的坐标\n const x = (size[0] - newWidth) / 2;\n const y = (size[1] - newHeight) / 2;\n\n return {\n x,\n y,\n width: newWidth,\n height: newHeight,\n scale\n };\n}\n/**\n * 将单词分配到不同的区域内\n *\n * 先使用相对简单的分配逻辑,即根据区域面积来决定分配到的单词的 权重大小和数量\n * @param {*} words\n * @param {*} config\n */\nexport function allocateWords(words: CloudWordType[], segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { regions }\n } = segmentationOutput;\n let areaMax = -Infinity;\n let totalArea = 0;\n let areaMaxIndex = 0;\n\n // 查找最大面积的区域,同时计算总的面积\n regions.forEach((region: any, index: number) => {\n const area = region.area;\n if (area > areaMax) {\n areaMax = area;\n areaMaxIndex = index;\n }\n totalArea += area;\n });\n\n // 根据每个区域的面积大小给每个区域分配单词数量和权重限制\n let wordsSum = 0;\n regions.forEach((region: any) => {\n const area = region.area;\n const regionNum = Math.ceil((area / totalArea) * words.length);\n const regionWeight = area / areaMax;\n\n region.words = [];\n region.regionNum = regionNum;\n region.regionWeight = regionWeight;\n wordsSum += regionNum;\n });\n // 如果有未分配的单词, 则分配到面积最大区域\n if (wordsSum < words.length) {\n regions[areaMaxIndex].wordsNum += words.length - wordsSum;\n }\n\n // 对单词进行分配,先分配面积最大的区域\n let currIndex = areaMaxIndex;\n const regionNums = regions.map((region: any) => region.regionNum);\n words.forEach((word: any) => {\n // 记录总的失败次数\n let failCounter = 0;\n // 记录失败次数,超过区域的数量,则更新一下所有区域的权重上限\n let updateCounter = 0;\n word.regionIndex = -1;\n\n do {\n if (regionNums[currIndex] > 0 && word.weight <= regions[currIndex].regionWeight) {\n word.regionIndex = currIndex;\n regions[currIndex].words.push(word);\n regionNums[currIndex]--;\n currIndex = (currIndex + 1) % regions.length;\n break;\n }\n currIndex = (currIndex + 1) % regions.length;\n\n failCounter++;\n updateCounter++;\n // 如果没有找到合适的区域,则更新所有区域的权重\n if (updateCounter > regions.length + 1) {\n regions.forEach((region: any) => {\n // 这里 0.15 是经验值,可以后续根据业务场景调整\n region.regionWeight += 0.15;\n });\n updateCounter = 0;\n }\n } while (word.regionIndex === -1 && failCounter < regions.length * 3);\n\n // 未分配则分配为 area 最大的区域\n if (word.regionIndex === -1) {\n word.regionIndex = areaMaxIndex;\n regions[areaMaxIndex].words.push(word);\n regionNums[areaMaxIndex]--;\n }\n });\n\n // 对每个区域里的单词根据权重进行排序\n regions.forEach((region: any) => {\n region.words.sort((a: CloudWordType, b: CloudWordType) => b.weight - a.weight);\n });\n}\n","import { sqrt, square } from './utils/utils';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport type { ContinuousScaleType } from './interface';\n\nexport class SqrtScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Sqrt;\n\n constructor() {\n super(sqrt, square);\n }\n\n clone(): SqrtScale {\n return new SqrtScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n}\n","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport function layout(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter((word: CloudWordType) => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfShrink(\n words: CloudWordType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n let fontFactor = 1;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else {\n // console.log('失败迭代', word.text);\n fontFactor = fontFactor * layoutConfig.fontSizeShrinkFactor;\n for (let j = i; j < regionWords.length; j++) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * fontFactor), layoutConfig.minFontSize);\n }\n i--;\n }\n }\n }\n\n // // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n // for (let _ = 0; _ < config.textLayoutTimes; _++) {\n // const failedWords = words.filter((word) => {\n // if (!word.hasPlaced) {\n // word.hasText = false\n // word.sprite = null\n // word.fontSize = ~~(word.fontSize * config.fontSizeShrinkFactor)\n // }\n\n // return !word.hasPlaced\n // })\n\n // if (failedWords.length === 0) break\n\n // for (let i = 0; i < failedWords.length; i++) {\n // const word = failedWords[i]\n // measureSprite(canvas, ctx, failedWords, i)\n // word.x = shapeCenter[0]\n // word.y = shapeCenter[1]\n // if (\n // word.hasText &&\n // place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)\n // ) {\n // word.hasPlaced = true\n // }\n // }\n // }\n\n layoutConfig.board = board;\n}\n\nexport function layoutGlobalShrink(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { stepFactor, importantWordCount, globalShinkLimit } = layoutConfig;\n const {\n size,\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeShrinkFactor;\n\n // 同一个词如果降低到globalShinkLimit还没有布局成功,恢复到该词未布局状态\n let id = null;\n let idIntialFactor = 1;\n /* eslint-disable no-loop-func */\n let globalShinkFactor = 1;\n // 找到高优保障词weight,暂定10个\n const importantCount = importantWordCount;\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount].weight;\n }\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (!word.skip && word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else if (!word.skip && word.weight > weightStd && globalShinkFactor > globalShinkLimit) {\n const wordId = word.datum[Symbol.for('vGrammar_id')];\n if (wordId !== id) {\n id = wordId;\n idIntialFactor = globalShinkFactor;\n }\n // 缩小字号\n globalShinkFactor = globalShinkFactor * fontFactor;\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalShinkFactor);\n restartTag = true;\n break;\n } else if (!word.skip && word.datum[Symbol.for('vGrammar_id')] === id) {\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / globalShinkFactor;\n });\n\n word.skip = true;\n globalShinkFactor = idIntialFactor;\n id = null;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, idIntialFactor);\n restartTag = true;\n break;\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfEnlarge(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor, importantWordCount } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeEnlargeFactor;\n // const fontFactor = 1.5;\n\n // 找到高优保障词weight,暂定10个\n const importantCount = Math.min(importantWordCount, words.length);\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount - 1].weight;\n }\n\n // 高优词布局成功数量\n let importantWordSuccessedNum = 0;\n // 目前放大系数\n let globalEnlargeFactor = 1;\n // 回退标志\n let layoutFinish = false;\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n if (word.weight >= weightStd) {\n importantWordSuccessedNum++;\n }\n if (importantWordSuccessedNum >= importantCount && !layoutFinish) {\n // 重点词完全布局,尝试增大字号\n // 增大系数\n globalEnlargeFactor = globalEnlargeFactor * fontFactor;\n\n // 增大字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalEnlargeFactor);\n restartTag = true;\n importantWordSuccessedNum = 0;\n\n break;\n }\n } else if (word.weight >= weightStd && globalEnlargeFactor > 1) {\n // 之前重点词完全布局,此次重点词未完成布局,回退字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / fontFactor;\n });\n\n // 恢复系数\n globalEnlargeFactor = globalEnlargeFactor / fontFactor;\n layoutFinish = true;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, globalEnlargeFactor);\n restartTag = true;\n\n break;\n } else if (word.weight >= weightStd) {\n // 初次未完成布局,使用ensureMapping算法\n // console.log('use layoutGlobalShrink')\n return layoutGlobalShrink(words, layoutConfig, segmentationOutput);\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\n/**\n * 使用螺旋线放置单词,成功返回 true\n */\nfunction place(\n board: number[],\n word: CloudWordType,\n maxR: number,\n ratio: number,\n size: [number, number],\n boardSize: [number, number],\n stepFactor: number\n) {\n const startX = word.x;\n const startY = word.y;\n const spiral = archimedeanSpiral(ratio);\n\n const dt = 1 * stepFactor;\n let dxdy;\n let dx;\n let dy;\n let t = -dt;\n\n while ((dxdy = spiral((t += dt)))) {\n const {\n wordSize,\n bounds: { dTop, dBottom, dLeft, dRight }\n } = word;\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 判断螺旋线是否超出了最大的半径\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxR) {\n break;\n }\n word.x = ~~(startX + dx);\n word.y = ~~(startY + dy);\n\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (!isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n\n return true;\n }\n }\n return false;\n}\n\n/**\n * 在 board 中放置 word\n * 会在 filling 中复用\n */\nexport function placeWordOnBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { wordSize } = word;\n // 放置单词,以 x, y 为中心\n const sprite = word.sprite;\n const w = wordSize[0] >> 5; // 单词占用的 int 的数量\n const sw = boardSize[0] >> 5; // board 的宽度\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // 单词偏移(px), 当前元素右侧移除数量\n const msx = 32 - sx; // 需要从sprite上一个元素中移除的数量\n const h = wordSize[1];\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n let last;\n\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n board[x + i] |= sprite[j * w + i];\n }\n x += sw;\n }\n } else {\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n }\n}\n\n/**\n * 检测 word 是否与 board 中的元素发生碰撞\n *\n * 会在 filling words 中复用\n */\nexport function isCollideWithBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { sprite, wordSize } = word;\n\n const sw = boardSize[0] >> 5;\n const w = wordSize[0] >> 5;\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // sprite数组左侧偏移\n const msx = 32 - sx; // 位移遮罩\n const h = wordSize[1];\n let last;\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n\n // 逐行遍历单词sprite,判断与已绘制内容重叠\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (board[x + i] & sprite[j * w + i]) {\n return true;\n }\n }\n x += sw;\n }\n } else {\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)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n }\n\n return false;\n}\n\nfunction archimedeanSpiral(ratio: number) {\n // t 为弧度值\n return function (t: number) {\n return [ratio * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\n/**\n * 测量一批单词的 sprite\n * 会在测量 filling words 时复用,修改时注意兼容性\n */\nexport function measureSprite(\n canvas: HTMLCanvasElement | any,\n ctx: CanvasRenderingContext2D | null,\n words: CloudWordType[] | any,\n wi: number\n) {\n if (words[wi].sprite || words[wi].fontSize === 0) {\n return;\n }\n\n const cw = 2048;\n const ch = 2048;\n const radians = Math.PI / 180;\n const n = words.length;\n\n canvas.width = cw;\n canvas.height = ch;\n ctx.clearRect(0, 0, cw, ch);\n ctx.textAlign = 'center';\n\n let x = 0;\n let y = 0;\n let maxHeight = 0;\n let wordW; // 单词盒子 宽度\n let wordH;\n let yMax = 0; // 记录画布中绘制的 y 最大范围\n\n const wiDist = wi;\n --wi;\n while (++wi < n) {\n const word = words[wi];\n const fontSize = Math.max(word.fontSize, 2); // 最小字号2px\n ctx.save();\n ctx.font = word.fontStyle + ' ' + word.fontWeight + ' ' + fontSize + 'px ' + word.fontFamily;\n\n // 计算单词盒子宽高\n wordW = ctx.measureText(word.text + 'm').width + word.padding * 2;\n wordH = fontSize * 2 + word.padding * 2;\n\n if (word.rotate !== 0) {\n const sr = Math.sin(word.rotate * radians);\n const cr = Math.cos(word.rotate * radians);\n const wcr = wordW * cr;\n const wsr = wordW * sr;\n const hcr = wordH * cr;\n const hsr = wordH * sr;\n wordW = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr));\n wordH = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n wordW = ((wordW + 31) >> 5) << 5; // 宽度必须是 32 的倍数\n wordH = Math.ceil(wordH);\n\n // 记录当前行最大高度\n if (wordH > maxHeight) {\n maxHeight = wordH;\n }\n\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + wordW >= cw) {\n x = 0;\n y += maxHeight;\n maxHeight = wordH;\n }\n\n // 如果绘制不下,则停止\n if (y + wordH >= ch) {\n if (y === 0) {\n word.hasText = false;\n continue;\n } else {\n break;\n }\n }\n // 更新绘制范围 y 的最大值\n if (y + wordH >= yMax) {\n yMax = y + wordH;\n }\n\n ctx.translate(x + (wordW >> 1), y + (wordH >> 1));\n if (word.rotate !== 0) {\n ctx.rotate(word.rotate * radians);\n }\n ctx.fillText(word.text, 0, 0);\n if (word.padding) {\n ctx.lineWidth = 2 * word.padding;\n ctx.strokeText(word.text, 0, 0);\n }\n ctx.restore();\n\n // 词语绘制完成,记录其在画布上位置信息\n word.LT = [x, y]; // 左上角点\n word.wordSize = [wordW, wordH];\n\n // 指示在临时画布上绘制过了单词\n word.hasText = true;\n\n // x位置右移,等待下一个词语绘制\n x += wordW;\n }\n\n if (yMax === 0) {\n return;\n }\n const pixels = ctx.getImageData(0, 0, cw, yMax).data;\n\n let i;\n let j;\n\n // 提取画布上的 sprite 信息\n while (--wi >= wiDist) {\n const word = words[wi];\n if (!word.hasText) {\n word.bounds = {\n dTop: Infinity,\n dBottom: -Infinity,\n dLeft: Infinity,\n dRight: -Infinity\n };\n break;\n }\n\n const { LT = [0, 0], wordSize } = word;\n [x, y] = LT;\n const w32 = wordSize[0] >> 5;\n // 将数组归0\n const sprite = new Array(w32 * wordSize[1]).fill(0);\n\n // 先记录单词 bounds 的行列号,然后转换成与中心的delta\n let [dTop, dBottom, dLeft, dRight] = [Infinity, -Infinity, Infinity, -Infinity];\n\n for (j = 0; j < wordSize[1]; j++) {\n let seen: any;\n for (i = 0; i < wordSize[0]; i++) {\n // 取 alpha 通道的值,\n if (pixels[((y + j) * cw + (x + i)) * 4 + 3] > 0) {\n const k = w32 * j + (i >> 5);\n const m = 1 << (31 - (i % 32));\n sprite[k] |= m;\n\n if (i < dLeft) {\n dLeft = i;\n }\n if (i > dRight) {\n dRight = i;\n }\n seen |= m;\n }\n }\n if (seen) {\n if (j < dTop) {\n dTop = j;\n }\n if (j > dBottom) {\n dBottom = j;\n }\n }\n }\n\n // 记录单词准确的的 bounds\n word.bounds = {\n dTop: (wordSize[1] >> 1) - dTop,\n dBottom: dBottom - (wordSize[1] >> 1),\n dLeft: (wordSize[0] >> 1) - dLeft,\n dRight: dRight - (wordSize[0] >> 1)\n };\n word.sprite = sprite;\n // 后续操作中 LT 无意义\n delete word.LT;\n }\n\n // debug 代码\n // words.forEach((word) => {\n // const {\n // LT,\n // wordSize,\n // hasText,\n // sprite,\n // bounds: { dTop, dBottom, dLeft, dRight },\n // } = word\n // if (hasText) {\n // paint(sprite, wordSize)\n // // 绘制用于 debug 的\n // ctx.save()\n // ctx.strokeStyle = '#f00'\n // ctx.fillStyle = '#0f0'\n // // 绘制 word 包围盒\n // ctx.strokeRect(...LT, ...wordSize)\n // ctx.translate(LT[0] + wordSize[0] / 2, LT[1] + wordSize[1] / 2)\n // ctx.strokeStyle = '#00f'\n // // 绘制bounds\n // ctx.strokeRect(-dLeft, -dTop, dLeft + dRight, dTop + dBottom)\n // // 绘制中心点\n // ctx.fillRect(0, 0, 3, 3)\n // ctx.restore()\n // }\n // })\n\n // document.body.prepend(canvas)\n}\n\n/**\n * 根据 shape 相关的信息初始化 board\n */\nfunction initBoardWithShape(segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { labels },\n boardSize,\n size\n } = segmentationOutput;\n // board 每个 int 编码 32 个像素的占用信息,求得 w32 表示一行有几个 int\n const w32 = boardSize[0] >> 5;\n const board = new Array(w32 * size[1]).fill(0);\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n // 取得 board 中对应 int 的索引\n const k = w32 * i + (j >> 5);\n // 构造代表该像素被占用的 int\n const m = 1 << (31 - (j % 32));\n board[k] |= m;\n }\n }\n }\n\n // 对 boardSize 和 size 进行比较,如果 boardSize 大于 size,则将差距的部分设置为不可放置\n if (boardSize[0] > size[0]) {\n const width = boardSize[0] - size[0];\n const m = (1 << width) - 1;\n for (let y = 0; y < size[1]; y++) {\n const k = w32 * y + w32 - 1;\n board[k] |= m;\n }\n }\n\n return board;\n}\n","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\nimport { measureSprite, isCollideWithBoard, placeWordOnBoard } from './wordle';\n\nexport function filling(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const {\n size,\n fillingTimes,\n fillingXStep,\n fillingYStep,\n getFillingFontStyle,\n getFillingFontWeight,\n getFillingFontFamily,\n fillingInitialFontSize,\n fillingDeltaFontSize,\n fillingInitialOpacity,\n fillingDeltaOpacity,\n fillingRotateList,\n getFillingPadding,\n random,\n board,\n minFillFontSize\n } = layoutConfig;\n\n const { boardSize, shapeBounds, tempCanvas: canvas, randomGenerator } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // const padding = fillingPadding\n\n let fontSize = fillingInitialFontSize;\n let opacity = fillingInitialOpacity;\n const placedFillingWords: CloudWordType[] = [];\n\n for (let i = 0; i < fillingTimes; i++) {\n filling1Time(fontSize, opacity);\n\n // 完成一次填充,则更新一下填充词的属性,继续下一次填充\n fontSize = Math.max(\n fontSize > fillingDeltaFontSize ? fontSize - fillingDeltaFontSize : fillingDeltaFontSize,\n minFillFontSize\n ); // 填充词最小字号4px\n opacity = opacity > fillingDeltaOpacity ? opacity - fillingDeltaOpacity : fillingDeltaOpacity;\n }\n\n return placedFillingWords;\n\n function filling1Time(fontSize: number, opacity: number) {\n const fillingWords: CloudWordType[] = words.map(word => {\n const { text, color, fillingColor, hasPlaced, datum } = word;\n return {\n x: 0,\n y: 0,\n weight: 0,\n text,\n fontFamily: getFillingFontFamily(datum),\n fontStyle: getFillingFontStyle(datum),\n fontWeight: getFillingFontWeight(datum),\n fontSize,\n rotate: fillingRotateList[~~(randomGenerator() * fillingRotateList.length)],\n padding: getFillingPadding(datum),\n opacity,\n visible: true,\n color,\n fillingColor,\n hasPlaced,\n datum\n };\n });\n randomArray(fillingWords);\n let wi = 0;\n const { x1, y1, x2, y2 } = shapeBounds;\n // 小范围随机一个起点\n const [startX, startY] = [\n x1 + ~~(randomGenerator() * fillingXStep * 2),\n y1 + ~~(randomGenerator() * fillingYStep * 2)\n ];\n\n for (let y = startY; y <= y2; y += fillingYStep) {\n for (let x = startX; x <= x2; x += fillingXStep) {\n // 测量填充词的 bounds\n measureSprite(canvas, ctx, fillingWords, wi);\n const word = fillingWords[wi];\n word.x = x;\n word.y = y;\n const { wordSize, bounds, hasPlaced } = word;\n\n /*\n * 这里有一个问题,如果一个词语一直布局不通过,就会在一次filling1Time中一直尝试布局\n * 导致fill次数达到上限后也无法填满空隙\n * 因此在此处跳过无法布局的核心词(一般为超场词),避免出现问题\n */\n if (!hasPlaced || !bounds) {\n // 跳过未成功布局的核心词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n continue;\n }\n\n const { dTop, dBottom, dLeft, dRight } = bounds;\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (word.hasText && word.sprite && !isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n placedFillingWords.push(Object.assign({}, word));\n // 所有单词放置完后,随机排序一下填充词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n }\n }\n }\n }\n\n function randomArray(words: CloudWordType[]) {\n return words.sort(() => randomGenerator() - 0.5);\n }\n}\n","import { allocateWords } from './segmentation';\nimport { layout, layoutGlobalShrink, layoutSelfEnlarge } from './wordle';\nimport { filling } from './filling';\nimport type { LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport default function (words: any, layoutConfig: LayoutConfigType, segmentationOutput: SegmentationOutputType) {\n // 将单词分配到各个连通区域中\n allocateWords(words, segmentationOutput);\n if (layoutConfig.layoutMode === 'ensureMapping') {\n layoutGlobalShrink(words, layoutConfig, segmentationOutput);\n } else if (layoutConfig.layoutMode === 'ensureMappingEnlarge') {\n layoutSelfEnlarge(words, layoutConfig, segmentationOutput);\n } else {\n layout(words, layoutConfig, segmentationOutput);\n }\n // const fillingWords = []\n const fillingWords = filling(words, layoutConfig, segmentationOutput);\n\n // 处理布局失败的单词, 设置 visible 为 false\n // const failedWords = words.filter((word) => !word.hasPlaced)\n const failedWords = [];\n const successedWords = [];\n for (let i = 0; i < words.length; i++) {\n if (words[i].hasPlaced) {\n successedWords.push(words[i]);\n } else {\n failedWords.push(words[i]);\n }\n }\n failedWords.forEach(word => (word.visible = false));\n\n // debug 常用代码\n // const { board, boardSize } = layoutConfig\n // paint(board, boardSize)\n // paintLabels(layoutConfig)\n // draw(words, fillingWords, layoutConfig, 1)\n // console.log(`核心词数量:${words.length} 填充词数量:${fillingWords.length}`)\n // console.log('放置失败的单词', failedWords)\n // console.log(layoutConfig, words, fillingWords)\n\n return {\n fillingWords,\n successedWords,\n failedWords\n };\n}\n","import { degreeToRadian, isFunction, isString, maxInArray, toNumber } from '@visactor/vutils';\nimport type {\n CloudWordType,\n FieldOption,\n LayoutConfigType,\n SegmentationInputType,\n SegmentationOutputType,\n TagItemAttribute,\n WordCloudShapeOptions,\n wordsConfigType\n} from './interface';\nimport { removeBorder, scaleAndMiddleShape, segmentation } from './segmentation';\nimport { WORDCLOUD_SHAPE_HOOK_EVENT, calTextLength, colorListEqual, fakeRandom, functor, loadImage } from './util';\nimport { LinearScale, OrdinalScale, SqrtScale } from '@visactor/vscale';\nimport cloud from './cloud-shape-layout';\nimport { type IProgressiveTransformResult, type IView } from '@visactor/vgrammar-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { generateIsEmptyPixel, generateMaskCanvas } from '@visactor/vgrammar-util';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle',\n opacity: 'opacity',\n visible: 'visible',\n isFillingWord: 'isFillingWord',\n color: 'color'\n};\n\nexport class Layout implements IProgressiveTransformResult {\n options: WordCloudShapeOptions;\n\n data: any[];\n view?: IView;\n\n private isImageFinished?: boolean;\n private isLayoutFinished?: boolean;\n private progressiveResult?: any[] = [];\n private segmentationInput?: SegmentationInputType;\n\n constructor(options: WordCloudShapeOptions, view?: IView) {\n this.options = options;\n this.view = view;\n }\n\n layout(data: any[]) {\n this.data = data;\n\n const options = this.options;\n\n /** step1: 根据shapeUrl, 计算segmentation */\n const segmentationInput: SegmentationInputType = {\n shapeUrl: options.shape,\n size: options.size,\n ratio: options.ratio || 0.8,\n tempCanvas: undefined,\n boardSize: [0, 0],\n random: false,\n randomGenerator: undefined\n };\n\n // 全局共用的临时画板,此处需要对小程序的 canvas 进行兼容\n const tempCanvas = vglobal.createCanvas({ width: options.size[0], height: options.size[1] });\n const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true });\n tempCtx.textAlign = 'center';\n tempCtx.textBaseline = 'middle';\n segmentationInput.tempCanvas = tempCanvas;\n\n // board 的宽必须为 32 的倍数\n const boardW = ((options.size[0] + 31) >> 5) << 5;\n segmentationInput.boardSize = [boardW, options.size[1]];\n\n // 用于随机的随机数生成器\n if (segmentationInput.random) {\n segmentationInput.randomGenerator = Math.random;\n } else {\n segmentationInput.randomGenerator = fakeRandom();\n }\n this.segmentationInput = segmentationInput;\n if (isString(segmentationInput.shapeUrl)) {\n segmentationInput.isEmptyPixel = generateIsEmptyPixel();\n const imagePromise = loadImage(segmentationInput.shapeUrl);\n\n if (imagePromise) {\n this.isImageFinished = false;\n this.isLayoutFinished = false;\n imagePromise\n .then(shapeImage => {\n this.isImageFinished = true;\n const maskCanvas = vglobal.createCanvas({ width: options.size[0], height: options.size[1], dpr: 1 });\n segmentationInput.maskCanvas = maskCanvas;\n const ctx = maskCanvas.getContext('2d');\n if (options.removeWhiteBorder) {\n removeBorder(shapeImage, maskCanvas, segmentationInput.isEmptyPixel);\n }\n const shapeConfig = scaleAndMiddleShape(shapeImage, options.size);\n ctx.clearRect(0, 0, options.size[0], options.size[1]);\n ctx.drawImage(shapeImage, shapeConfig.x, shapeConfig.y, shapeConfig.width, shapeConfig.height);\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(segmentationInput.maskCanvas);\n }\n })\n .catch(error => {\n this.isImageFinished = true;\n });\n } else {\n this.isImageFinished = true;\n this.isLayoutFinished = true;\n }\n } else if (\n segmentationInput.shapeUrl &&\n (segmentationInput.shapeUrl.type === 'text' || segmentationInput.shapeUrl.type === 'geometric')\n ) {\n segmentationInput.isEmptyPixel = generateIsEmptyPixel(segmentationInput.shapeUrl.backgroundColor);\n const maskCanvas = generateMaskCanvas(segmentationInput.shapeUrl, options.size[0], options.size[1]);\n segmentationInput.maskCanvas = maskCanvas;\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(maskCanvas);\n }\n this.doLayout();\n this.isImageFinished = true;\n this.isLayoutFinished = true;\n }\n }\n canAnimate() {\n return true;\n }\n\n unfinished(): boolean {\n return !this.isLayoutFinished;\n }\n\n output(): any[] {\n return this.progressiveResult;\n }\n\n progressiveRun() {\n if (!this.isImageFinished || this.isLayoutFinished) {\n return;\n }\n\n if (this.segmentationInput.maskCanvas) {\n this.doLayout();\n }\n\n this.isLayoutFinished = true;\n }\n\n progressiveOutput(): any[] {\n return this.progressiveResult;\n }\n\n doLayout() {\n const segmentationInput = this.segmentationInput;\n // 对用户输入的图形进行预处理\n const segmentationOutput: SegmentationOutputType = segmentation(segmentationInput);\n\n if (!segmentationOutput.segmentation.regions.length) {\n return;\n }\n\n const options = this.options;\n const data = this.data;\n\n /** step2: 收集 wordsConfig, 并计算fontSizeScale */\n const colorMode = options.colorMode || 'ordinal';\n const wordsConfig: wordsConfigType = {\n getText: field(options.text),\n getFontSize: field(options.fontSize),\n fontSizeRange: options.fontSizeRange,\n\n // color 相关\n colorMode: colorMode,\n getColor: options.colorField ? field(options.colorField) : field(options.text),\n getFillingColor: field(options.fillingColorField),\n // 根据不同的 colorMode 赋值不同的默认值\n colorList:\n options.colorList ||\n (colorMode === 'ordinal' ? ['#2E62F1'] : ['#537EF5', '#2E62F1', '#2358D8', '#184FBF', '#0C45A6', '#013B8E']),\n getColorHex: field(options.colorHexField),\n\n // 字体相关\n getFontFamily: field(options.fontFamily || 'sans-serif'),\n rotateList: options.rotateList || [0],\n getPadding: field(options.padding || 1),\n getFontStyle: field(options.fontStyle || 'normal'),\n getFontWeight: field(options.fontWeight || 'normal'),\n // fontField: options.fontFamily,\n // fontWeightField: options.fontWeight,\n // fontStyleField: options.fontStyle,\n getFontOpacity: options.fontOpacity ? field(options.fontOpacity) : () => 1\n };\n\n initFontSizeScale(data, wordsConfig, segmentationOutput);\n\n /** step3: 收集 layoutConfig, 初始化colorScale */\n const layoutConfig: LayoutConfigType = {\n // font style 相关\n size: options.size,\n ratio: options.ratio || 0.8,\n\n // layout 相关\n shapeUrl: options.shape,\n random: typeof options.random === 'undefined' ? true : options.random,\n textLayoutTimes: options.textLayoutTimes ?? 3,\n removeWhiteBorder: options.removeWhiteBorder,\n layoutMode: options.layoutMode ?? 'default',\n fontSizeShrinkFactor: options.fontSizeShrinkFactor ?? 0.8,\n stepFactor: options.stepFactor ?? 1,\n importantWordCount: options.importantWordCount ?? 10,\n globalShinkLimit: options.globalShinkLimit || 0.2,\n // textLengthLimit: 10,\n fontSizeEnlargeFactor: options.fontSizeEnlargeFactor ?? 1.5,\n\n // fill 相关\n fillingRatio: options.fillingRatio ?? 0.7,\n fillingTimes: options.fillingTimes ?? 4,\n // fillingXRatioStep: options.fillingXRatioStep || 0,\n // fillingYRatioStep: options.fillingYRatioStep || 0,\n // fillingRatioStep: 步长占长宽的比例,优先级高于fillingStep\n fillingXStep: options.fillingXRatioStep\n ? Math.max(Math.floor(options.size[0] * options.fillingXRatioStep), 1)\n : options.fillingXStep ?? 4,\n fillingYStep: options.fillingYRatioStep\n ? Math.max(Math.floor(options.size[1] * options.fillingYRatioStep), 1)\n : options.fillingYStep ?? 4,\n fillingInitialFontSize: options.fillingInitialFontSize,\n fillingDeltaFontSize: options.fillingDeltaFontSize,\n fillingInitialOpacity: options.fillingInitialOpacity ?? 0.8,\n fillingDeltaOpacity: options.fillingDeltaOpacity ?? 0.05,\n\n // fill font style 相关\n getFillingFontFamily: field(options.fillingFontFamily || 'sans-serif'),\n getFillingFontStyle: field(options.fillingFontStyle || 'normal'),\n getFillingFontWeight: field(options.fillingFontWeight || 'normal'),\n getFillingPadding: field(options.fillingPadding ?? 0.4),\n fillingRotateList: options.fillingRotateList ?? [0, 90],\n fillingDeltaFontSizeFactor: options.fillingDeltaFontSizeFactor ?? 0.2,\n\n // fill color 相关\n fillingColorList: options.fillingColorList || ['#537EF5'],\n\n // 经过计算,补充的内容\n sameColorList: false,\n\n minInitFontSize: options.minInitFontSize ?? 10,\n minFontSize: options.minFontSize ?? 4,\n minFillFontSize: options.minFillFontSize ?? 2\n };\n // 核心词与填充词colorList和colorField不一致时,会给填充词设置独立scale\n const sameColorList = colorListEqual(wordsConfig.colorList, layoutConfig.fillingColorList);\n layoutConfig.sameColorList = sameColorList;\n initColorScale(data, wordsConfig, layoutConfig, options);\n\n /** step4: 初始化填充次fontSize */\n initFillingWordsFontSize(data, wordsConfig, layoutConfig, segmentationOutput);\n\n // 过滤掉上游 source 中的填充词,上游数据相关,待去除 @chensiji\n // data = data.filter((d) => !d.isFillingWord || d.isFillingWord !== true)\n\n /** step5: 初始化words信息,并执行layout算法 */\n // 初始化单词信息, 用个代码块避免变量污染外面的变量环境\n const {\n getText,\n getFontFamily,\n getFontStyle,\n getFontWeight,\n getPadding,\n getColor,\n getFillingColor,\n getColorHex,\n fontSizeScale,\n colorScale,\n fillingColorScale,\n getFontOpacity,\n rotateList\n } = wordsConfig;\n\n const words: CloudWordType[] = data.map(datum => {\n return {\n x: 0,\n y: 0,\n weight: 0,\n text: getText(datum),\n // text: addEllipsis(text(word), config.textLengthLimit),\n fontFamily: getFontFamily(datum),\n fontWeight: getFontWeight(datum),\n fontStyle: getFontStyle(datum),\n rotate: rotateList[~~(segmentationInput.randomGenerator() * rotateList.length)],\n fontSize: Math.max(layoutConfig.minInitFontSize, ~~fontSizeScale(datum)),\n opacity: getFontOpacity(datum),\n padding: getPadding(datum),\n color: (getColorHex && getColorHex(datum)) || (colorScale && colorScale(getColor(datum))) || 'black',\n fillingColor:\n getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)\n ? (getColorHex && getColorHex(datum)) ||\n (fillingColorScale && fillingColorScale(getFillingColor(datum))) ||\n 'black'\n : undefined,\n datum: datum,\n visible: true,\n hasPlaced: false\n // 上游数据相关,待去除 @chensiji\n // isInAdd: add.indexOf(word) !== -1,\n };\n });\n\n // 计算所有单词的权重 weight,用于后续的布局\n const wordsMaxFontSize = maxInArray(words.map(word => word.fontSize));\n words.forEach(word => (word.weight = word.fontSize / wordsMaxFontSize));\n words.sort((a, b) => b.weight - a.weight);\n\n // 进行布局\n const { fillingWords, successedWords, failedWords } = cloud(words, layoutConfig, segmentationOutput);\n const textKey = (options.text as FieldOption)?.field ?? 'textKey'; // 记录用户是用什么 key 存储 text 信息\n const dataIndexKey = options.dataIndexKey ?? 'defaultDataIndexKey';\n\n /** step5: 将单词信息转换为输出 */\n const as = options.as ? { ...OUTPUT, ...options.as } : OUTPUT;\n let w;\n let t;\n const modKeywords = [];\n for (let i = 0; i < words.length; ++i) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = degreeToRadian(w.rotate);\n t[as.opacity] = w.opacity;\n t[as.visible] = w.visible;\n t[as.isFillingWord] = false;\n t[as.color] = w.color;\n t[dataIndexKey] = `${w.text}_${i}_keyword`;\n\n modKeywords.push(t);\n }\n\n const fillingWordsData: any[] = [];\n fillingWords.forEach((word, index) => {\n const t = { ...word.datum };\n t[as.x] = word.x;\n t[as.y] = word.y;\n t[as.fontFamily] = word.fontFamily;\n t[as.fontSize] = word.fontSize;\n t[as.fontStyle] = word.fontStyle;\n t[as.fontWeight] = word.fontWeight;\n t[as.angle] = degreeToRadian(word.rotate);\n t[as.opacity] = word.opacity;\n t[as.visible] = word.visible;\n t[as.isFillingWord] = true;\n t[as.color] = !getFillingColor\n ? layoutConfig.fillingColorList[~~(segmentationInput.randomGenerator() * layoutConfig.fillingColorList.length)]\n : options.colorField?.field !== options.fillingColorField?.field || !sameColorList\n ? word.fillingColor\n : word.color;\n t[textKey] = word.text;\n\n // 保证绘制时,mark的唯一性\n t[dataIndexKey] = `${word.text}_${index}_fillingWords`;\n\n // updateid(t)\n fillingWordsData.push(t);\n });\n\n // 抛出事件\n if (this.view && this.view.emit) {\n this.view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_LAYOUT, { successedWords, failedWords });\n const stage = this.view.renderer?.stage();\n\n if (stage) {\n stage.hooks.afterRender.tap(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW, () => {\n this.view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW, { successedWords, failedWords });\n stage.hooks.afterRender.unTap(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW);\n });\n }\n }\n\n // 最后将核心词和填充词合并返回\n this.progressiveResult = modKeywords.concat(fillingWordsData);\n }\n\n release() {\n this.segmentationInput = null;\n this.data = null;\n this.progressiveResult = null;\n this.options = null;\n }\n}\n\n/**\n * 根据用户输入的参数初始化 colorScale\n */\nconst initColorScale = (data: any[], wordsConfig: wordsConfigType, layoutConfig: LayoutConfigType, options: any) => {\n const { colorMode, getColor, getFillingColor } = wordsConfig;\n const { sameColorList } = layoutConfig;\n let colorScale;\n let colorList = wordsConfig.colorList;\n let fillingColorScale;\n let fillingColorList = layoutConfig.fillingColorList;\n if (colorMode === 'ordinal') {\n // 序数着色模式下\n const uniqueColorField = data.map(word => getColor(word));\n colorScale = (datum: any) => {\n return new OrdinalScale().domain(uniqueColorField).range(colorList).scale(datum);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n const uniquefillingColorField = data.map(datum => getFillingColor(datum));\n fillingColorScale = (datum: any) => {\n return new OrdinalScale().domain(uniquefillingColorField).range(fillingColorList).scale(datum);\n };\n }\n } else {\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (colorList.length === 1) {\n colorList = [colorList[0], colorList[0]];\n }\n // 线性着色模式下\n const valueScale = new LinearScale().domain(extent(getColor, data)).range(colorList);\n\n colorScale = (i: any) => {\n return valueScale.scale(i);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n // 线性着色模式下\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (fillingColorList.length === 1) {\n fillingColorList = [fillingColorList[0], fillingColorList[0]];\n }\n const fillingValueScale = new LinearScale().domain(extent(getFillingColor, data)).range(fillingColorList);\n\n fillingColorScale = (i: any) => {\n return fillingValueScale.scale(i);\n };\n }\n }\n Object.assign(wordsConfig, { colorScale, fillingColorScale });\n};\n\n/**\n * 根据用户输入参数初始化 fontSizeScale\n */\nconst initFontSizeScale = (data: any[], wordsConfig: wordsConfigType, segmentationOutput: SegmentationOutputType) => {\n let { fontSizeRange: range } = wordsConfig;\n const { getFontSize, getText } = wordsConfig;\n // const { shapeArea, ratio } = segmentationOutput\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n // const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n // 生成 fontSize 的 scale\n let fontSizeScale;\n if (!getFontSize) {\n // 如果用户没有提供 fontSize 映射的 field, 自动计算 一个固定的 fontSize\n /**\n * 单词 字长*(fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const words = data.map(word => ({\n text: getText(word)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // return textLength < shapeSizeLimitTextLength ? acc + textLength : acc\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, false);\n\n // fontSize = x\n // 有了 fontSize 后求解 fontSizeScale\n fontSizeScale = functor(x);\n // console.log('自动计算的 fontSize', fontSize)\n } else if (getFontSize && range) {\n // fontSize 和 range 都提供了\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum));\n };\n } else if (getFontSize && isFunction(getFontSize) && !range) {\n // 提供了 fontSize 的取值的 key,没提供 range,自动计算 range\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const a = 0.5;\n const [min, max] = extent(getFontSize, data);\n const words = data.map(datum => ({\n text: getText(datum),\n value: getFontSize(datum),\n // weight: (fontSize(word) - min) / (max - min),\n weight: max === min ? 1 : (getFontSize(datum) - min) / (max - min)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // if (textLength > shapeSizeLimitTextLength) return acc;\n // return acc + textLength * (a + (1 - a) * word.weight) ** 2\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, true);\n\n range = [~~(a * x), ~~x];\n // 有了 range 后求解 fontSizeScale\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum)); // 最小核心词初始字号10px\n };\n // console.log('自动计算的 range', range)\n }\n\n // 将相关配置更新到 wordsConfig 上\n Object.assign(wordsConfig, { getFontSize, fontSizeRange: range, fontSizeScale });\n};\n\nconst getInitialFontSize = (words: any[], segmentationOutput: SegmentationOutputType, weight: boolean) => {\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n\n const a = 0.5;\n const b = 1.7;\n const shapeArea = segmentationOutput.shapeArea;\n const ratio = segmentationOutput.ratio;\n const regions = segmentationOutput.segmentation.regions;\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n const wordArea =\n // b *\n words.reduce((acc, word) => {\n // 旧版 VGrammar 逻辑\n // const textLength = calTextLength(word.text, segmentationOutput.textLengthLimit)\n const textLength = calTextLength(word.text);\n return textLength < shapeSizeLimitTextLength\n ? acc + textLength * (weight ? (a + (1 - a) * word.weight) ** 2 : 1)\n : acc;\n }, 0);\n if (wordArea === 0) {\n // 只有一个超长词,以12px字号开始初始布局\n return 12;\n }\n\n let x = 20;\n if (regions.length === 1) {\n // 单一区域\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n } else {\n const xArr = [];\n for (let i = 0; i < regions.length; i++) {\n const regionArea = regions[i].area;\n const regionAspect = regions[i].ratio;\n const regionRatio = regionArea / shapeArea;\n if (regionRatio < 0.1) {\n continue;\n }\n // 考虑区域长宽比对文字面积的影响(2.7 - regionAspect),经验参数\n const regionWordArea = regionRatio * (wordArea * (regionAspect < 1 ? 2.7 - regionAspect : b));\n const x = Math.sqrt(ratio * (regionArea / regionWordArea));\n\n xArr.push(x);\n }\n\n if (xArr.length) {\n x = Math.min(...xArr);\n } else {\n // 特殊情况当做单一区域处理\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n }\n }\n return x;\n};\n\n/**\n * 自动计算 fillingWords 相关的 fontSize\n */\nfunction initFillingWordsFontSize(\n data: any[],\n wordsConfig: wordsConfigType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { getText } = wordsConfig;\n let { fillingInitialFontSize, fillingDeltaFontSize } = layoutConfig;\n const { fillingRatio } = layoutConfig;\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 4 > sqrt(shapeArea)\n * (字号为4px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(segmentationOutput.shapeArea) / 4);\n\n // 两个值中有一个每天写则自动计算\n if (!fillingInitialFontSize || !fillingDeltaFontSize) {\n /**\n * 自动计算的依据是 填充面积应该与 单词平均长度 * fontSize**2 成一个固定比例 a\n */\n\n const a = fillingRatio / 100;\n\n const averageLength =\n data.reduce((acc, word) => {\n const length = calTextLength(getText(word));\n if (length > shapeSizeLimitTextLength) {\n return acc;\n }\n return acc + length;\n }, 0) / data.length;\n let fontSize;\n if (averageLength === 0) {\n // 只有一个超长词,以8px字号开始初始布局\n fontSize = 8;\n } else {\n const area = segmentationOutput.shapeArea * 0.2;\n fontSize = Math.sqrt(a * (area / averageLength));\n }\n\n fillingInitialFontSize = ~~fontSize;\n fillingDeltaFontSize = fontSize * layoutConfig.fillingDeltaFontSizeFactor;\n\n Object.assign(layoutConfig, {\n fillingInitialFontSize,\n fillingDeltaFontSize\n });\n // console.log('自动计算的 filling', [\n // fillingInitialFontSize,\n // fillingDeltaFontSize,\n // ])\n }\n}\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\n/**\n * 取数逻辑\n */\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n","import { Logger, isNil } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport type { WordCloudShapeOptions } from './interface';\nimport { WORDCLOUD_SHAPE_HOOK_EVENT } from './util';\nimport type { IProgressiveTransformResult, IView } from '@visactor/vgrammar-core';\nimport { Layout } from './layout';\n\nexport const transform = (\n options: WordCloudShapeOptions,\n upstreamData: any[],\n parameters?: any,\n view?: IView\n): any[] | IProgressiveTransformResult => {\n /** options 配置错误提示 */\n if (\n !options.size ||\n isNil(options.size[0]) ||\n isNil(options.size[1]) ||\n options.size[0] <= 0 ||\n options.size[1] <= 0\n ) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n /** size 处理, 如果是小数, segmentation 计算会有问题导致place陷入死循环 */\n options.size = [Math.ceil(options.size[0]), Math.ceil(options.size[1])];\n\n if (!options.shape) {\n error('WordcloudShape shape must be specified.');\n }\n if (!options.text) {\n error('WordcloudShape text must be specified.');\n }\n\n view?.emit && view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.BEFORE_WORDCLOUD_SHAPE_LAYOUT);\n\n // 第一次数据流到这里data为空,如果不做判断,走到布局算法会报错\n if (!upstreamData || upstreamData.length === 0) {\n return [];\n }\n\n const layout = new Layout(options, view);\n\n layout.layout(upstreamData);\n\n if (layout.unfinished()) {\n return {\n progressive: layout\n } as unknown as IProgressiveTransformResult;\n }\n return layout.output();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloudSeriesSpec } from './interface';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloudAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\nimport { registerTextMark } from '../../mark/text';\n\nexport class WordCloudSeries extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud;\n type = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloudAnimation();\n Factory.registerSeries(WordCloudSeries.type, WordCloudSeries);\n};\n\nexport const registerWordCloudShapeSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloudSeries();\n};\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IWordCloudChartSpec } from './interface';\nimport { BaseWordCloudChart } from './base/base';\nimport { registerWordCloudSeries, registerWordCloudShapeSeries } from '../../series/word-cloud/word-cloud';\nimport { Factory } from '../../core/factory';\nimport { BaseWordCloudChartSpecTransformer } from './base/word-cloud-base-transformer';\n\nexport class WordCloudChart extends BaseWordCloudChart {\n static readonly type: string = ChartTypeEnum.wordCloud;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud;\n static readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudChart = () => {\n registerWordCloudSeries();\n Factory.registerChart(WordCloudChart.type, WordCloudChart);\n};\n\n// Splitting the register logic into two parts is to tree-shake the unused transforms as much as possible.\n// Especially in the cross-terminal environment, word-cloud shape is not compatible.\nexport const registerWordCloudShapeChart = () => {\n registerWordCloudShapeSeries();\n registerWordCloudChart();\n};\n","import { AttributeLevel } from '../../constant/attribute';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloud3dSeriesSpec } from './interface';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloud3dAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\nimport type { ITextMark } from '../../mark/interface';\n\nexport class WordCloud3dSeries<\n T extends IWordCloud3dSeriesSpec = IWordCloud3dSeriesSpec\n> extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud3d;\n type = SeriesTypeEnum.wordCloud3d;\n\n protected _wordCloudTransformOption() {\n return {\n ...super._wordCloudTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n protected _wordCloudShapeTransformOption() {\n return {\n ...super._wordCloudShapeTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n initMark(): void {\n this._wordMark = this._createMark(\n BaseWordCloudSeries.mark.word,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n support3d: true\n }\n ) as ITextMark;\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const wordMark = this._wordMark;\n if (wordMark) {\n this.setMarkStyle(\n wordMark,\n {\n z: (datum: Datum) => datum.z ?? 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const padding = this._padding ?? {};\n if (this._wordMark) {\n this._wordMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud3d')?.(() => {\n const srView = this.getCompiler().getVGrammarView();\n const width = srView.width() - padding.left || 0 - padding.right || 0;\n const height = srView.height() - padding.top || 0 - padding.bottom || 0;\n const r = Math.max(width, height) / 2;\n return {\n center: { x: r, y: r, z: this._spec.depth_3d ?? r },\n r\n };\n }),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n}\n\nexport const registerWordCloud3dSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloud3dAnimation();\n Factory.registerSeries(WordCloud3dSeries.type, WordCloud3dSeries);\n};\n\nexport const registerWordCloudShape3dSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloud3dSeries();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseWordCloudChartSpecTransformer } from '../base/word-cloud-base-transformer';\nimport type { IWordCloud3dChartSpec } from '../interface';\n\nexport class WordCloud3dChartSpecTransformer<\n T extends IWordCloud3dChartSpec = IWordCloud3dChartSpec\n> extends BaseWordCloudChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: IWordCloud3dChartSpec): any {\n const series: any = super._getDefaultSeriesSpec(spec as any);\n series.depth_3d = spec.depth_3d;\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IWordCloud3dChartSpec } from '../interface';\nimport { BaseWordCloudChart } from '../base/base';\nimport { registerWordCloud3dSeries, registerWordCloudShape3dSeries } from '../../../series/word-cloud/word-cloud-3d';\nimport { Factory } from '../../../core/factory';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { WordCloud3dChartSpecTransformer } from './word-cloud-3d-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class WordCloud3dChart extends BaseWordCloudChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.wordCloud3d;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n static readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud3d;\n readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n}\n\nexport const registerWordCloud3dChart = () => {\n register3DPlugin();\n registerWordCloud3dSeries();\n Factory.registerChart(WordCloud3dChart.type, WordCloud3dChart);\n};\n\nexport const registerWordCloudShape3dChart = () => {\n register3DPlugin();\n registerWordCloudShape3dSeries();\n registerWordCloud3dChart();\n};\n","import type { DataView } from '@visactor/vdataset';\nimport { isValidNumber } from '@visactor/vutils';\n\nexport interface IFunnelOpt {\n valueField: string;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: boolean;\n /** 高度是否进行数据映射 **/\n heightVisual?: boolean;\n\n /** 数值范围 */\n range?: { min: number; max: number };\n}\n\nexport const funnel = (originData: Array, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n valueField,\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue,\n heightVisual = false,\n isCone = true,\n range\n } = op;\n\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -Infinity), -Infinity);\n const min = data.reduce((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || Infinity), Infinity);\n const rangeArr = [range?.min ?? min, range?.max ?? max];\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : nextValue / rangeArr[1]);\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : lastValue / rangeArr[1]);\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array, op: IFunnelTransformOpt) => {\n const data = originData[0]?.latestData?.map((datum: any) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach((d: any) => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n","import { PREFIX } from './base';\n\nexport const FUNNEL_TRANSFORM_RATIO = `${PREFIX}_FUNNEL_TRANSFORM_RATIO`;\nexport const FUNNEL_REACH_RATIO = `${PREFIX}_FUNNEL_REACH_RATIO`;\nexport const FUNNEL_HEIGHT_RATIO = `${PREFIX}_FUNNEL_HEIGHT_RATIO`;\nexport const FUNNEL_VALUE_RATIO = `${PREFIX}_FUNNEL_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE_RATIO = `${PREFIX}_FUNNEL_LAST_VALUE_RATIO`;\nexport const FUNNEL_NEXT_VALUE_RATIO = `${PREFIX}_FUNNEL_NEXT_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE = `${PREFIX}_FUNNEL_LAST_VALUE`;\nexport const FUNNEL_CURRENT_VALUE = `${PREFIX}_FUNNEL_CURRENT_VALUE`;\nexport const FUNNEL_NEXT_VALUE = `${PREFIX}_FUNNEL_NEXT_VALUE`;\n\nexport const FUNNEL_TRANSFORM_LEVEL = `${PREFIX}_FUNNEL_TRANSFORM_LEVEL`;\n\nexport const FUNNEL_LABEL_LINE_LENGTH = 20;\nexport const FUNNEL_LABEL_SPACE_WIDTH = 5;\nexport const FUNNEL_MAX_SIZE = '80%';\nexport const FUNNEL_MIN_SIZE = 0;\n","import type { IFunnelSeries, ISeriesTooltipHelper } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { FUNNEL_REACH_RATIO } from '../../constant/funnel';\nimport { isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type { Datum } from '@visactor/vgrammar-core';\n\nexport class FunnelSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n const series = this.series as IFunnelSeries;\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n return this._getDimensionData(datum) ?? datum.properties?.[`${series.getCategoryField()}`];\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n const measureData = datum?.[FUNNEL_REACH_RATIO];\n return `${(measureData * 100).toFixed(1)}%`;\n }\n return this._getMeasureData(datum);\n };\n\n markTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n\n if (isValid(seriesFields[0])) {\n return datum?.[seriesFields[0]];\n }\n return datum?.[subDimensionField];\n };\n}\n","import type { ICommonSpec } from '../../typings/visual';\nimport { BaseMark } from '../base/base-mark';\nimport type { IMarkStyle } from '../interface';\n\nexport class BasePolygonMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n points: []\n };\n return defaultStyle;\n }\n}\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPolygonMarkSpec } from '../../typings/visual';\nimport { BasePolygonMark } from './base-polygon';\nimport type { IMarkStyle, IPolygonMark } from '../interface';\nimport { MarkTypeEnum } from '../interface/type';\nimport { registerPolygonGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\n\nexport class PolygonMark extends BasePolygonMark implements IPolygonMark {\n static readonly type = MarkTypeEnum.polygon;\n readonly type = PolygonMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerPolygonMark = () => {\n Factory.registerMark(PolygonMark.type, PolygonMark);\n registerPolygonGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const funnelSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel]: { name: SeriesMarkNameEnum.funnel, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transform]: { name: SeriesMarkNameEnum.transform, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n\nexport const funnel3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel3d]: { name: SeriesMarkNameEnum.funnel3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transform3d]: { name: SeriesMarkNameEnum.transform3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IFunnelSeriesSpec, IFunnelSeriesTheme } from './interface';\n\nexport class FunnelSeriesSpecTransformer<\n T extends IFunnelSeriesSpec = IFunnelSeriesSpec,\n K extends IFunnelSeriesTheme = IFunnelSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IFunnelSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { IOrientType, IPoint, TextAlign, TextBaseLine, Datum, StringOrNumber } from '../../typings';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { BaseSeries } from '../base/base-series';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport type { ILabelMark, IMark, IPolygonMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IFunnelOpt } from '../../data/transforms/funnel';\nimport { funnel, funnelTransform } from '../../data/transforms/funnel';\nimport {\n FUNNEL_CURRENT_VALUE,\n FUNNEL_HEIGHT_RATIO,\n FUNNEL_LABEL_LINE_LENGTH,\n FUNNEL_LABEL_SPACE_WIDTH,\n FUNNEL_LAST_VALUE,\n FUNNEL_LAST_VALUE_RATIO,\n FUNNEL_MAX_SIZE,\n FUNNEL_MIN_SIZE,\n FUNNEL_NEXT_VALUE,\n FUNNEL_NEXT_VALUE_RATIO,\n FUNNEL_REACH_RATIO,\n FUNNEL_TRANSFORM_LEVEL,\n FUNNEL_TRANSFORM_RATIO,\n FUNNEL_VALUE_RATIO\n} from '../../constant/funnel';\nimport { calcLayoutNumber } from '../../util/space';\nimport { field } from '../../util/object';\nimport type { FunnelAppearPreset, IFunnelSeriesSpec } from './interface';\nimport { FunnelSeriesTooltipHelper } from './tooltip-helper';\nimport { isFunction, isValid, isNumber } from '@visactor/vutils';\nimport {\n FadeInOutAnimation,\n registerCartesianGroupClipAnimation,\n registerFadeInOutAnimation\n} from '../../animation/config';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPolygonMark } from '../../mark/polygon/polygon';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { funnelSeriesMark } from './constant';\nimport type { LabelItem } from '@visactor/vrender-components';\nimport { Factory } from '../../core/factory';\nimport { FunnelSeriesSpecTransformer } from './funnel-transformer';\n\nexport class FunnelSeries\n extends BaseSeries\n implements IFunnelSeries\n{\n static readonly type: string = SeriesTypeEnum.funnel;\n type = SeriesTypeEnum.funnel;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n\n static readonly mark: SeriesMarkMap = funnelSeriesMark;\n static readonly transformerConstructor = FunnelSeriesSpecTransformer as any;\n readonly transformerConstructor = FunnelSeriesSpecTransformer;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _viewDataTransform!: SeriesData;\n\n protected _funnelAlign: 'left' | 'center' | 'right' | 'top' | 'bottom';\n protected _funnelOrient: IOrientType;\n protected _shape: 'rect' | 'trapezoid';\n\n protected _funnelMark: IPolygonMark | null = null;\n protected _funnelTransformMark: IPolygonMark | null = null;\n protected _labelMark: ILabelMark | null = null;\n protected _transformLabelMark: ILabelMark | null = null;\n protected _funnelOuterLabelMark: { label?: ITextMark; line?: IRuleMark } = {};\n\n protected _minLabelLineWidth: number;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this._funnelOrient = this._spec.funnelOrient ?? 'top';\n this._shape = this._spec.shape ?? 'trapezoid';\n this._minLabelLineWidth = this._spec.outerLabel?.line?.minLength ?? FUNNEL_LABEL_LINE_LENGTH;\n\n if (this._isHorizontal()) {\n this._funnelAlign = ['top', 'bottom'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n } else {\n this._funnelAlign = ['left', 'right'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n }\n\n if (!this._seriesField && this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n }\n\n initData() {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'funnel', funnel);\n registerDataSetInstanceTransform(this._dataSet, 'funnelTransform', funnelTransform);\n\n const viewDataTransform = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataTransform` });\n viewDataTransform.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataTransform = new SeriesData(this._option, viewDataTransform);\n }\n\n compileData() {\n super.compileData();\n this._viewDataTransform?.compile();\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'funnel',\n options: {\n valueField: this.getValueField(),\n isCone: this._spec.isCone,\n // heightVisual: true,\n asCurrentValue: FUNNEL_CURRENT_VALUE,\n asTransformRatio: FUNNEL_TRANSFORM_RATIO,\n asReachRatio: FUNNEL_REACH_RATIO,\n asHeightRatio: FUNNEL_HEIGHT_RATIO,\n asValueRatio: FUNNEL_VALUE_RATIO,\n asNextValueRatio: FUNNEL_NEXT_VALUE_RATIO,\n asLastValueRatio: FUNNEL_LAST_VALUE_RATIO,\n asLastValue: FUNNEL_LAST_VALUE,\n asNextValue: FUNNEL_NEXT_VALUE,\n range: {\n min: this._spec.range?.min ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.min,\n max: this._spec.range?.max ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.max\n }\n } as IFunnelOpt\n });\n\n this._viewDataTransform.getDataView()?.transform({\n type: 'funnelTransform',\n options: { asIsTransformLevel: FUNNEL_TRANSFORM_LEVEL }\n });\n }\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...FunnelSeries.mark.funnel,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel,\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.funnel?.stateSort,\n noSeparateStyle: true\n },\n {\n setCustomizedShape: this._spec.funnel?.customShape,\n morph: shouldMarkDoMorph(this._spec, this._funnelMarkName),\n morphElementKey: this._seriesField\n }\n ) as IPolygonMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...FunnelSeries.mark.transform,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId(),\n stateSort: this._spec.transform?.stateSort,\n noSeparateStyle: true\n },\n {\n setCustomizedShape: this._spec.transform?.customShape\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(FunnelSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n markSpec: this._spec.outerLabel,\n skipBeforeLayouted: true,\n noSeparateStyle: true\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(FunnelSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label],\n noSeparateStyle: true\n }) as IRuleMark;\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new FunnelSeriesTooltipHelper(this);\n this._funnelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelMark);\n this._funnelTransformMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelTransformMark);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n initMarkStyle() {\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n points: (datum: Datum) => this.getPoints(datum),\n visible: (datum: Datum) => isValid(datum[this._valueField]),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const funnelTransformMark = this._funnelTransformMark;\n if (funnelTransformMark) {\n this.setMarkStyle(\n funnelTransformMark,\n { points: (datum: Datum) => this.getPoints(datum) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const outerLabelMark = this._funnelOuterLabelMark.label;\n if (outerLabelMark) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]}`,\n x: (datum: Datum) => this._computeOuterLabelPosition(datum).x,\n y: (datum: Datum) => this._computeOuterLabelPosition(datum).y,\n textAlign: (datum: Datum) => this._computeOuterLabelPosition(datum).align,\n textBaseline: (datum: Datum) => this._computeOuterLabelPosition(datum).textBaseline,\n maxLineWidth: (datum: Datum) => this._computeOuterLabelLimit(datum),\n /** 不设置 width/height 会导致 richtext 有默认宽高, case: richtext-bounds */\n /** width 和 height 对 text 标签不影响 */\n width: 0,\n height: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n if (isFunction(this._spec.outerLabel.formatMethod)) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => {\n return this._spec.outerLabel.formatMethod(`${datum[this.getCategoryField()]}`, datum) as any;\n }\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n const outerLabelLineMark = this._funnelOuterLabelMark.line;\n if (outerLabelLineMark && outerLabelMark) {\n this.setMarkStyle(\n outerLabelLineMark,\n {\n x: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x1,\n y: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y1,\n x1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x2,\n y1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y2\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n const target = labelMark.getTarget();\n const component = labelMark.getComponent();\n\n if (target === this._funnelMark) {\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]} ${datum[this.getValueField()]}`,\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.label),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(component);\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n } else if (this._funnelTransformMark && target === this._funnelTransformMark) {\n this._transformLabelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => {\n const ratio = field(FUNNEL_REACH_RATIO).bind(this)(datum) as number;\n return `${(ratio * 100).toFixed(1)}%`;\n },\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.transformLabel)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset ?? 'clipIn';\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('cartesianGroupClip')?.(\n {\n direction: () => (this._isHorizontal() ? 'x' : 'y'),\n width: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { x1, x2 } = rootMark.getBounds();\n return Math.max(x1, x2); // rootMark.x === 0, so need to find largest bound x instead of bounds width\n }\n return this.getLayoutRect().width;\n },\n height: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { y1, y2 } = rootMark.getBounds();\n return Math.max(y1, y2);\n }\n return this.getLayoutRect().height;\n },\n orient: () => (this._isReverse() ? 'negative' : 'positive')\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n [this._funnelOuterLabelMark?.label].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')(),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n [this._funnelMark, this._funnelTransformMark].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('funnel')({}, appearPreset),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.outerLabelLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n // hack group\n initGroups() {\n // do nothing\n }\n\n // handle stack\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n // hack\n return null;\n }\n\n /** event */\n protected initEvent() {\n super.initEvent();\n // 同步更新转化层数据\n this._viewDataTransform.getDataView()?.target.addListener('change', (d: DataView) => {\n this._viewDataTransform.updateData();\n });\n }\n\n /**\n *\n * P0 ----------- P1 P2 ------ P3\n * \\ / / \\\n * P3 ------ P2 P1 ---------- P0\n *\n * P1 P0\n * |\\ P2 P3 /|\n * | | | |\n * |/ P3 P2 \\|\n * P0 P1\n */\n getPoints(datum: Datum) {\n // 对特殊数据层不进行绘制\n const isTransformLevel = this.isTransformLevel(datum);\n\n const heightHalf = this._getMainAxisLength(isTransformLevel) / 2;\n let upperLeft;\n let lowerLeft;\n if (isTransformLevel) {\n upperLeft =\n this._shape === 'rect'\n ? this._getSecondaryAxisLength(datum[FUNNEL_LAST_VALUE_RATIO]) / 2\n : this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n } else {\n upperLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._shape === 'rect' ? upperLeft : this._getSecondaryAxisLength(datum[FUNNEL_NEXT_VALUE_RATIO]) / 2;\n }\n\n const { x, y } = this._getPositionByData(datum);\n\n const points = this._getPolygonPoints([x, y], upperLeft, lowerLeft, upperLeft, lowerLeft, heightHalf);\n\n if (this._funnelAlign !== 'center') {\n this._adjustPoints(points);\n }\n return points;\n }\n\n isTransformLevel(datum: Datum) {\n return !!datum?.[FUNNEL_TRANSFORM_LEVEL];\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getPoints = this.getPoints.bind(this);\n this._markAttributeContext.isTransformLevel = this.isTransformLevel.bind(this);\n }\n\n valueToPosition(category: StringOrNumber) {\n const innerDatum = this.getViewData()?.latestData?.find?.((d: Datum) => d[this._categoryField] === category);\n if (!isValid(innerDatum)) {\n return null;\n }\n return this._getPolygonCenter(this.getPoints(innerDatum));\n }\n\n dataToPosition(datum: any, checkInViewData?: boolean) {\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return this.valueToPosition(datum[this._categoryField]);\n }\n\n dataToPositionX(datum: any) {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: any) {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: any) {\n return 0;\n }\n\n private _getMainAxisLength(isTransform = false) {\n const funnelCount = this.getViewData().latestData.length;\n const viewHeight = this._isHorizontal() ? this.getLayoutRect().width : this.getLayoutRect().height;\n\n const hasTransform = !!this._spec.isTransform;\n const gap = hasTransform ? 0 : this._spec.gap ?? 0;\n const transformCount = hasTransform ? Math.max(0, funnelCount - 1) : 0;\n const heightRatio = this._spec.heightRatio || 0.5;\n const funnelHeight =\n (viewHeight - gap * Math.max(0, funnelCount - 1)) / (funnelCount + heightRatio * transformCount);\n if (isTransform) {\n return hasTransform ? funnelHeight * heightRatio : 0;\n }\n return funnelHeight;\n }\n\n private _getSecondaryAxisLength(ratio: number) {\n const validRatio = Number.isNaN(ratio) || !Number.isFinite(ratio) ? 0 : ratio;\n const maxSize = this._computeMaxSize();\n const minSize = this._computeMinSize();\n return minSize + (maxSize - minSize) * validRatio;\n }\n\n /**\n * 根据数据计算主轴中心点\n * @param datum\n * @returns\n */\n private _getPositionByData(datum: Datum) {\n const index = this.getViewData().latestData?.findIndex(\n (d: Datum) =>\n d[this._categoryField] === datum[this._categoryField] && d[DEFAULT_DATA_KEY] === datum[DEFAULT_DATA_KEY]\n );\n if (!isValid(index) || index < 0) {\n return {};\n }\n const isTransform = this.isTransformLevel(datum);\n const isHorizontal = this._isHorizontal();\n const viewWidth = isHorizontal ? this.getLayoutRect().height : this.getLayoutRect().width;\n const viewHeight = isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n const centerX = viewWidth / 2;\n\n let centerY = 0;\n const funnelHeight = this._getMainAxisLength();\n const transformHeight = this._getMainAxisLength(true);\n const offset = funnelHeight + transformHeight;\n\n centerY += index * offset;\n centerY += isTransform ? -transformHeight / 2 : funnelHeight / 2;\n if (!this._spec.isTransform && this._spec.gap) {\n centerY += this._spec.gap * index;\n }\n\n this._isReverse() && (centerY = viewHeight - centerY);\n\n return this._isHorizontal() ? { x: centerY, y: centerX } : { x: centerX, y: centerY };\n }\n\n private _getPolygonPoints(\n center: [number, number],\n upperLeft: number,\n lowerLeft: number,\n upperRight: number,\n lowerRight: number,\n heightHalf: number\n ) {\n const x = center[0];\n const y = center[1];\n switch (this._funnelOrient) {\n case 'left':\n return [\n { x: x - heightHalf, y: y + upperLeft },\n { x: x - heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y - lowerRight },\n { x: x + heightHalf, y: y + lowerLeft }\n ];\n case 'right':\n return [\n { x: x + heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y + upperRight },\n { x: x - heightHalf, y: y + lowerLeft },\n { x: x - heightHalf, y: y - lowerLeft }\n ];\n case 'bottom':\n return [\n { x: x + upperLeft, y: y + heightHalf },\n { x: x - upperRight, y: y + heightHalf },\n { x: x - lowerRight, y: y - heightHalf },\n { x: x + lowerLeft, y: y - heightHalf }\n ];\n default:\n // top\n return [\n { x: x - upperLeft, y: y - heightHalf },\n { x: x + upperRight, y: y - heightHalf },\n { x: x + lowerRight, y: y + heightHalf },\n { x: x - lowerLeft, y: y + heightHalf }\n ];\n }\n }\n\n /** 计算梯形中位线的中点\n * @param points\n * @returns\n */\n private _getPolygonCenter(points: IPoint[]) {\n if (this._isHorizontal()) {\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n // 梯形中位线坐标\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n /**\n * 调整点的偏移量,满足align效果\n * @param points\n * @returns\n */\n private _adjustPoints(points: IPoint[]) {\n let upperOffset;\n let lowerOffset;\n let dirKey;\n if (this._isHorizontal()) {\n dirKey = 'y';\n if (this._funnelOrient === 'left') {\n upperOffset = this._funnelAlign === 'bottom' ? -points[1].y : points[1].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[2].y : points[2].y;\n } else {\n upperOffset = this._funnelAlign === 'bottom' ? -points[0].y : points[0].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[3].y : points[3].y;\n }\n } else {\n dirKey = 'x';\n if (this._funnelOrient === 'top') {\n upperOffset = this._funnelAlign === 'left' ? points[0].x : -points[0].x;\n lowerOffset = this._funnelAlign === 'left' ? points[3].x : -points[3].x;\n } else {\n upperOffset = this._funnelAlign === 'left' ? points[1].x : -points[1].x;\n lowerOffset = this._funnelAlign === 'left' ? points[2].x : -points[2].x;\n }\n }\n (points[0][dirKey] -= upperOffset), (points[1][dirKey] -= upperOffset);\n (points[2][dirKey] -= lowerOffset), (points[3][dirKey] -= lowerOffset);\n return points;\n }\n\n private _computeLabelPosition(datum: Datum) {\n const points = this.getPoints(datum);\n return this._getPolygonCenter(points);\n }\n\n // label 相关\n private _computeLabelLimit(datum: Datum, labelSpec: IFunnelSeriesSpec['label']) {\n const limit = labelSpec?.limit;\n\n if (isNumber(limit)) {\n return limit;\n }\n\n const points = this.getPoints(datum);\n\n if (limit === 'shapeSize') {\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n return (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n }\n\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n // return this._computeMaxSize();\n // FIXME: 待 vrender 修复 maxLineWidth 在 bound 计算的 bug 后可以恢复注释\n return undefined;\n }\n\n private _computeOuterLabelPosition(datum: Datum) {\n let x;\n let y;\n let position: IOrientType = this._spec.outerLabel?.position;\n let textAlign: TextAlign = 'center';\n let textBaseline: TextBaseLine = 'middle';\n if (this._isHorizontal()) {\n position = ['top', 'bottom'].includes(position) ? position : this._funnelAlign === 'bottom' ? 'top' : 'bottom';\n } else {\n position = ['left', 'right'].includes(position) ? position : this._funnelAlign === 'left' ? 'right' : 'left';\n }\n\n if (this._spec.outerLabel?.alignLabel !== false) {\n ({ x, y } = this._getPositionByData(datum));\n if (position === 'left') {\n (x = 0), (textAlign = 'left');\n } else if (position === 'right') {\n (x = this.getLayoutRect().width), (textAlign = 'right');\n } else if (position === 'top') {\n (y = 0), (textBaseline = 'top');\n } else if (position === 'bottom') {\n (y = this.getLayoutRect().height), (textBaseline = 'bottom');\n }\n } else {\n const { x2, y2 } = this._computeOuterLabelLinePosition(datum);\n (x = x2), (y = y2);\n if (position === 'left') {\n (x -= FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'right');\n } else if (position === 'right') {\n (x += FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'left');\n } else if (position === 'top') {\n (y -= FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'bottom');\n } else if (position === 'bottom') {\n (y += FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'top');\n }\n }\n return { x, y, align: textAlign, textBaseline };\n }\n\n private _computeOuterLabelLimit(datum: Datum) {\n if (this._isHorizontal()) {\n return this._getMainAxisLength(this.isTransformLevel(datum));\n }\n\n // 垂直方向上的limit计算逻辑\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const categoryField = this.getCategoryField();\n\n const funnelLabelBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n ?.getGroupGraphicItem()\n ?.find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n\n const funnelLabelWidth = funnelLabelBounds ? funnelLabelBounds.x2 - funnelLabelBounds.x1 : 0;\n const outerLineSpace = this._funnelOuterLabelMark.line ? this._minLabelLineWidth : 0;\n\n let space = this.getLayoutRect().width - Math.max(shapeMiddleWidth, funnelLabelWidth);\n if (this._funnelAlign === 'center') {\n space /= 2;\n }\n return space - outerLineSpace - (this._spec.outerLabel?.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH);\n }\n\n private _computeOuterLabelLinePosition(datum: Datum) {\n const categoryField = this.getCategoryField();\n const outerLabelMarkBounds = this._funnelOuterLabelMark?.label\n ?.getProduct()\n ?.elements?.find((el: any) => el.data[0]?.[categoryField] === datum[categoryField])\n ?.getBounds();\n\n const labelMarkBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n ?.getGroupGraphicItem()\n ?.find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n const outerLabelSpec = this._spec.outerLabel ?? {};\n let x1;\n let x2;\n let y1;\n let y2;\n if (this._isHorizontal()) {\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n const points = this.getPoints(datum);\n const shapeMiddleHeight = (Math.abs(points[0].y - points[1].y) + Math.abs(points[2].y - points[3].y)) / 2;\n if (this._spec.outerLabel.position === 'top' || this._funnelAlign === 'bottom') {\n y1 = this._getPolygonCenter(points).y - shapeMiddleHeight / 2 - spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y2 + spaceWidth : y1 - spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y1 - y2 < this._minLabelLineWidth && (y2 = y1 - this._minLabelLineWidth);\n x2 = x1;\n } else {\n y1 = this._getPolygonCenter(points).y + shapeMiddleHeight / 2 + spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y1 - spaceWidth : y1 + spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y2 - y1 < this._minLabelLineWidth && (y2 = y1 + this._minLabelLineWidth);\n x2 = x1;\n }\n return { x1, x2, y1, y2 };\n }\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const labelWidth = labelMarkBounds?.x2 - labelMarkBounds?.x1 || 0;\n\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n if (this._spec.outerLabel.position === 'right' || this._funnelAlign === 'left') {\n x1 = this._getPolygonCenter(points).x + Math.max(labelWidth / 2, shapeMiddleWidth / 2) + spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x1 - spaceWidth : x1 + spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x2 - x1 < this._minLabelLineWidth && (x2 = x1 + this._minLabelLineWidth);\n y2 = y1;\n } else {\n x1 = this._getPolygonCenter(points).x - Math.max(labelWidth / 2, shapeMiddleWidth / 2) - spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x2 + spaceWidth : x1 - spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x1 - x2 < this._minLabelLineWidth && (x2 = x1 - this._minLabelLineWidth);\n y2 = y1;\n }\n return { x1, x2, y1, y2 };\n }\n\n protected _computeMaxSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const maxSize = this._spec.maxSize ?? FUNNEL_MAX_SIZE;\n return calcLayoutNumber(maxSize, size);\n }\n\n protected _computeMinSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const minSize = this._spec.minSize ?? FUNNEL_MIN_SIZE;\n return calcLayoutNumber(minSize, size);\n }\n\n protected _isHorizontal() {\n return this._funnelOrient === 'left' || this._funnelOrient === 'right';\n }\n\n private _isReverse() {\n return this._funnelOrient === 'bottom' || this._funnelOrient === 'right';\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._funnelMark];\n }\n}\n\nexport const registerFunnelSeries = () => {\n registerPolygonMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(FunnelSeries.type, FunnelSeries);\n Factory.registerAnimation('funnel', (params: any, preset: FunnelAppearPreset) => ({\n appear: preset === 'clipIn' ? undefined : { type: 'fadeIn' },\n ...FadeInOutAnimation\n }));\n registerCartesianGroupClipAnimation();\n registerFadeInOutAnimation();\n};\n","import type { IFunnelSeriesSpec } from '../../series';\nimport type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IFunnelChartSpec } from './interface';\n\nexport class FunnelChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): IFunnelSeriesSpec {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'funnelAlign',\n 'funnelOrient',\n 'heightRatio',\n 'shape',\n 'funnel',\n 'transform',\n 'outerLabel',\n 'transformLabel',\n 'isTransform',\n 'maxSize',\n 'minSize',\n 'gap',\n 'isCone',\n 'range'\n ]);\n\n return series;\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n super.transformSeriesSpec(spec);\n }\n}\n","import { registerFunnelSeries } from './../../series/funnel/funnel';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IFunnelChartSpec } from './interface';\nimport { FunnelChartSpecTransformer } from './funnel-transformer';\nimport { BaseChart } from '../base';\n\nexport class FunnelChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.funnel;\n static readonly seriesType: string = SeriesTypeEnum.funnel;\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel;\n readonly seriesType: string = SeriesTypeEnum.funnel;\n}\n\nexport const registerFunnelChart = () => {\n registerFunnelSeries();\n Factory.registerChart(FunnelChart.type, FunnelChart);\n};\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPyramid3dMarkSpec } from '../../typings/visual';\nimport { MarkTypeEnum } from '../interface/type';\nimport { BasePolygonMark } from './base-polygon';\nimport { registerPyramid3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\nimport type { IPyramid3dMark } from '../interface/mark';\n\nexport class Pyramid3dMark extends BasePolygonMark implements IPyramid3dMark {\n static readonly type = MarkTypeEnum.pyramid3d;\n readonly type = Pyramid3dMark.type;\n}\n\nexport const registerPyramid3dMark = () => {\n Factory.registerMark(Pyramid3dMark.type, Pyramid3dMark);\n registerPyramid3dGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport type { IFunnel3dSeriesSpec, IFunnel3dSeriesTheme } from '../interface';\nimport { FunnelSeriesSpecTransformer } from '../funnel-transformer';\n\nexport class Funnel3dSeriesSpecTransformer<\n T extends IFunnel3dSeriesSpec = IFunnel3dSeriesSpec,\n K extends IFunnel3dSeriesTheme = IFunnel3dSeriesTheme\n> extends FunnelSeriesSpecTransformer, K> {\n protected _transformLabelSpec(spec: AdaptiveSpec): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel3d);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform3d, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel } from '../../../constant/attribute';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../../interface/type';\nimport { FunnelSeries } from '../funnel';\nimport type { IFunnel3dSeriesSpec } from '../interface';\nimport { registerPyramid3dMark } from '../../../mark/polygon/pyramid-3d';\nimport { registerTextMark } from '../../../mark/text';\nimport { registerRuleMark } from '../../../mark/rule';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { funnel3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { Funnel3dSeriesSpecTransformer } from './funnel-3d-transformer';\nimport type { ILabelMark, IPyramid3dMark, IRuleMark, ITextMark } from '../../../mark/interface';\n\nexport class Funnel3dSeries extends FunnelSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.funnel3d;\n type = SeriesTypeEnum.funnel3d;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel3d;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform3d;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n\n static readonly mark: SeriesMarkMap = funnel3dSeriesMark;\n static readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...Funnel3dSeries.mark.funnel3d,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel3d,\n key: this._seriesField,\n isSeriesMark: true\n },\n {\n support3d: true\n }\n ) as IPyramid3dMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...Funnel3dSeries.mark.transform3d,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform3d,\n key: this._seriesField,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId()\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(Funnel3dSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n key: this._seriesField,\n markSpec: this._spec.outerLabel\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(Funnel3dSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n key: this._seriesField,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label]\n }) as IRuleMark;\n }\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n super.initLabelMarkStyle(labelMark);\n\n this.setMarkStyle(\n labelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._labelMark = labelMark;\n\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(labelMark.getComponent());\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n }\n}\n\nexport const registerFunnel3dSeries = () => {\n registerPyramid3dMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(Funnel3dSeries.type, Funnel3dSeries);\n};\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { registerFunnel3dSeries } from '../../../series/funnel/3d/funnel-3d';\nimport { Factory } from '../../../core/factory';\nimport type { IFunnel3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { FunnelChartSpecTransformer } from '../funnel-transformer';\nimport { BaseChart } from '../../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Funnel3dChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.funnel3d;\n static readonly seriesType: string = SeriesTypeEnum.funnel3d;\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel3d;\n readonly seriesType: string = SeriesTypeEnum.funnel3d;\n}\n\nexport const registerFunnel3dChart = () => {\n register3DPlugin();\n registerFunnel3dSeries();\n Factory.registerChart(Funnel3dChart.type, Funnel3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport { Factory } from '../../../core/factory';\nimport type { ILinearProgressAnimationParams, LinearProgressAppearPreset } from './interface';\n\nfunction LinearProgressGrowOption(params: ILinearProgressAnimationParams) {\n return () => {\n if (params.direction === 'vertical') {\n return {\n orient: 'negative'\n };\n }\n return {\n orient: 'positive'\n };\n };\n}\n\nconst Appear_Grow = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const linearProgressDisappear = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function linearProgressPresetAnimation(\n params: ILinearProgressAnimationParams,\n preset: LinearProgressAppearPreset | boolean\n) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerLinearProgressAnimation = () => {\n Factory.registerAnimation(\n 'linearProgress',\n (params: ILinearProgressAnimationParams, preset: LinearProgressAppearPreset) => {\n return {\n appear: linearProgressPresetAnimation(params, preset),\n enter: { type: 'grow' },\n disappear: linearProgressDisappear(params)\n };\n }\n );\n};\n","import { BaseSeriesTooltipHelper } from '../../base/tooltip-helper';\nimport type { ISeriesTooltipHelper } from '../../interface';\nimport type { TooltipActiveType } from '../../../typings';\n\nexport class LinearProgressSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport type { Datum } from '../../../typings';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport { registerLinearProgressAnimation } from './animation';\nimport type {\n ILinearProgressAnimationParams,\n ILinearProgressSeriesSpec,\n LinearProgressAppearPreset\n} from './interface';\nimport { LinearProgressSeriesTooltipHelper } from './tooltip-helper';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport { registerRectMark } from '../../../mark/rect';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\nimport { linearProgressSeriesMark } from './constant';\nimport { Factory } from '../../../core/factory';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IMark, IRectMark } from '../../../mark/interface';\nimport { isValid } from '@visactor/vutils';\n\nexport class LinearProgressSeries<\n T extends ILinearProgressSeriesSpec = ILinearProgressSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.linearProgress;\n type = SeriesTypeEnum.linearProgress;\n\n static readonly mark: SeriesMarkMap = linearProgressSeriesMark;\n\n private _progressMark: IRectMark | null = null;\n private _trackMark: IRectMark | null = null;\n\n initMark(): void {\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(\n LinearProgressSeries.mark.progress,\n {\n isSeriesMark: true,\n stateSort: this._spec.progress?.stateSort\n },\n {\n setCustomizedShape: this._spec.progress?.customShape ?? this._defaultProgressCustomShape\n }\n ) as IRectMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n if (this._spec.direction === 'vertical') {\n const progress = this._spec.progress || {};\n const leftPadding = progress.leftPadding ?? 0;\n const rightPadding = progress.rightPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2 +\n leftPadding\n );\n },\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)),\n y: () => this._yAxisHelper?.dataToPosition([0], { bandPosition: this._bandPosition }),\n width: this._spec.bandWidth - leftPadding - rightPadding,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const progress = this._spec.progress || {};\n const topPadding = progress.topPadding ?? 0;\n const bottomPadding = progress.bottomPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)),\n y: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2 +\n topPadding\n );\n },\n height: this._spec.bandWidth - topPadding - bottomPadding,\n x: () => this._xAxisHelper?.dataToPosition([0], { bandPosition: this._bandPosition }),\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n\n private _defaultProgressCustomShape = (datum: any[], attrs: any, path: ICustomPath2D) => {\n const cornerRadius = this._spec?.cornerRadius;\n const width = isValid(attrs.width) ? attrs.width : attrs.x1 - attrs.x;\n const height = isValid(attrs.height) ? attrs.height : attrs.y1 - attrs.y;\n const x0 = Math.min(0, width);\n const x1 = Math.max(0, width);\n const y0 = Math.min(0, height);\n const y1 = Math.max(0, height);\n\n if (cornerRadius > 0) {\n let realCornerRadius = cornerRadius;\n\n if (this._spec?.direction === 'vertical') {\n realCornerRadius = Math.min(Math.abs(width / 2), cornerRadius);\n\n if (2 * realCornerRadius > Math.abs(height)) {\n const angle = Math.acos((realCornerRadius - Math.abs(height) / 2) / realCornerRadius);\n\n path.moveTo(x0 + realCornerRadius, y0);\n path.arc(\n x0 + realCornerRadius,\n y0 + realCornerRadius,\n realCornerRadius,\n 1.5 * Math.PI,\n 1.5 * Math.PI - angle,\n true\n );\n path.arc(\n x0 + realCornerRadius,\n y1 - realCornerRadius,\n realCornerRadius,\n angle + Math.PI / 2,\n Math.PI / 2,\n true\n );\n\n path.lineTo(x1 - cornerRadius, y1);\n path.arc(\n x1 - realCornerRadius,\n y1 - realCornerRadius,\n realCornerRadius,\n Math.PI / 2,\n Math.PI / 2 - angle,\n true\n );\n path.arc(\n x1 - realCornerRadius,\n y0 + realCornerRadius,\n realCornerRadius,\n -Math.PI / 2 + angle,\n -Math.PI / 2,\n true\n );\n path.lineTo(x0 + realCornerRadius, y0);\n\n path.closePath();\n\n return path;\n }\n } else {\n realCornerRadius = Math.min(Math.abs(height / 2), cornerRadius);\n\n if (2 * realCornerRadius > Math.abs(width)) {\n const angle = Math.acos((realCornerRadius - Math.abs(width) / 2) / realCornerRadius);\n path.moveTo(x0, y0 + realCornerRadius);\n path.arc(x0 + realCornerRadius, y0 + realCornerRadius, realCornerRadius, Math.PI, Math.PI + angle);\n path.arc(x1 - realCornerRadius, y0 + realCornerRadius, realCornerRadius, -angle, 0);\n path.lineTo(x1, y1 - realCornerRadius);\n path.arc(x1 - realCornerRadius, y1 - realCornerRadius, realCornerRadius, 0, angle);\n path.arc(x0 + realCornerRadius, y1 - realCornerRadius, realCornerRadius, Math.PI - angle, Math.PI);\n path.closePath();\n\n return path;\n }\n }\n\n path.moveTo(x0, y0 + realCornerRadius);\n path.arc(x0 + realCornerRadius, y0 + realCornerRadius, realCornerRadius, Math.PI, 1.5 * Math.PI);\n path.lineTo(x1 - realCornerRadius, y0);\n path.arc(x1 - realCornerRadius, y0 + realCornerRadius, realCornerRadius, -Math.PI / 2, 0);\n path.lineTo(x1, y1 - realCornerRadius);\n path.arc(x1 - realCornerRadius, y1 - realCornerRadius, realCornerRadius, 0, Math.PI / 2);\n path.lineTo(x0 + realCornerRadius, y1);\n path.arc(x0 + realCornerRadius, y1 - realCornerRadius, realCornerRadius, Math.PI / 2, Math.PI);\n path.closePath();\n } else {\n path.moveTo(x0, y0);\n path.lineTo(x1, y0);\n path.lineTo(x1, y1);\n path.lineTo(x0, y1);\n path.closePath();\n }\n\n return path;\n };\n\n private _initTrackMark() {\n this._trackMark = this._createMark(\n LinearProgressSeries.mark.track,\n {\n stateSort: this._spec.track?.stateSort\n },\n {\n setCustomizedShape: this._spec.track?.customShape\n }\n ) as IRectMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n if (this._spec.direction === 'vertical') {\n this.setMarkStyle(\n trackMark,\n {\n x: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2\n );\n },\n y: 0,\n width: this._spec.bandWidth,\n height: () => this._scaleY.range()[0],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n trackMark,\n {\n x: 0,\n y: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2\n );\n },\n height: this._spec.bandWidth,\n width: () => this._scaleX.range()[1],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._trackMark) {\n marks.push(this._trackMark);\n }\n\n if (this._progressMark) {\n marks.push(this._progressMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n initAnimation() {\n const animationParams: ILinearProgressAnimationParams = {\n direction: this.direction\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('linearProgress')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinearProgressSeriesTooltipHelper(this);\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n this._trackMark && this._tooltipHelper.activeTriggerSet.mark.add(this._trackMark);\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerLinearProgressSeries = () => {\n registerRectMark();\n registerLinearProgressAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(LinearProgressSeries.type, LinearProgressSeries);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICartesianAxisSpec, ICartesianBandAxisSpec, ICartesianLinearAxisSpec } from '../../../component';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\n\nexport class LinearProgressChartSpecTransformer<\n T extends ILinearProgressChartSpec = ILinearProgressChartSpec\n> extends CartesianChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): ILinearProgressChartSpec {\n const series = super._getDefaultSeriesSpec(spec, ['bandWidth', 'progress', 'track']);\n series.direction = spec.direction ?? 'horizontal';\n\n series.cornerRadius = spec.cornerRadius ?? 0;\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n if (!spec.axes) {\n spec.axes = [];\n }\n\n if (spec.direction === 'vertical') {\n let leftAxis: ICartesianLinearAxisSpec = null;\n let bottomAxis: ICartesianBandAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'band';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'linear';\n }\n const domain = getLinearAxisSpecDomain(leftAxis, { min: 0, max: 1 });\n if (isNil(leftAxis.min)) {\n leftAxis.min = domain.min;\n }\n if (isNil(leftAxis.max)) {\n leftAxis.max = domain.max;\n }\n } else {\n let leftAxis: ICartesianBandAxisSpec = null;\n let bottomAxis: ICartesianLinearAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n type: 'band',\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'linear';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(bottomAxis, { min: 0, max: 1 });\n if (isNil(bottomAxis.min)) {\n bottomAxis.min = domain.min;\n }\n if (isNil(bottomAxis.max)) {\n bottomAxis.max = domain.max;\n }\n }\n }\n}\n","import { ChartTypeEnum } from '../../interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { registerLinearProgressSeries } from '../../../series/progress/linear';\nimport { Factory } from '../../../core/factory';\nimport { LinearProgressChartSpecTransformer } from './linear-progress-transformer';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class LinearProgressChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.linearProgress;\n static readonly seriesType: string = SeriesTypeEnum.linearProgress;\n static readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.linearProgress;\n readonly seriesType: string = SeriesTypeEnum.linearProgress;\n}\n\nmixin(LinearProgressChart, StackChartMixin);\n\nexport const registerLinearProgressChart = () => {\n registerLinearProgressSeries();\n Factory.registerChart(LinearProgressChart.type, LinearProgressChart);\n};\n","import type { ITextMark } from '../../mark/interface';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ISeries } from '../interface';\n\n// 直角坐标系下 固定点位的标签\n// only used in rangeColumn\nexport function setRectLabelPos(\n component: ISeries,\n labelMark: ITextMark,\n position: string,\n offset: number,\n x: (datum: any) => number,\n x1: (datum: any) => number,\n y: (datum: any) => number,\n y1: (datum: any) => number,\n direction: () => DirectionType\n) {\n component.setMarkStyle(labelMark, {\n textAlign: (datum: any) => {\n const d = direction();\n if (d === Direction.vertical) {\n return 'center';\n }\n const _x = x(datum);\n const _x1 = x1(datum);\n // d = h\n if (position === 'middle') {\n return 'center';\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return 'left';\n }\n if (position === 'end') {\n return 'right';\n }\n if (position === 'outside') {\n return 'left';\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return 'right';\n }\n if (position === 'end') {\n return 'left';\n }\n if (position === 'outside') {\n return 'right';\n }\n }\n return 'center';\n },\n textBaseline: (datum: any) => {\n const d = direction();\n if (d === Direction.horizontal) {\n return 'middle';\n }\n // d = v\n const _y = y(datum);\n const _y1 = y1(datum);\n if (position === 'middle') {\n return 'middle';\n }\n // 柱子 从下到上\n if (_y1 >= _y) {\n if (position === 'start') {\n return 'bottom';\n }\n if (position === 'end') {\n return 'top';\n }\n if (position === 'outside') {\n return 'bottom';\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return 'top';\n }\n if (position === 'end') {\n return 'bottom';\n }\n if (position === 'outside') {\n return 'top';\n }\n }\n return 'middle';\n }\n });\n component.setMarkStyle(\n labelMark,\n {\n x: (datum: any) => {\n const d = direction();\n const _x = x(datum);\n const _x1 = x1(datum);\n if (d === Direction.vertical) {\n return (_x + _x1) / 2;\n }\n // d = h\n if (position === 'middle') {\n return (_x + _x1) / 2;\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return _x1 + offset;\n }\n if (position === 'end') {\n return _x - offset;\n }\n if (position === 'outside') {\n return _x + offset;\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return _x1 - offset;\n }\n if (position === 'end') {\n return _x + offset;\n }\n if (position === 'outside') {\n return _x - offset;\n }\n }\n return (_x + _x1) / 2;\n },\n y: (datum: any) => {\n const d = direction();\n const _y = y(datum);\n const _y1 = y1(datum);\n if (d === Direction.horizontal) {\n return (_y + _y1) / 2;\n }\n // d = v\n if (position === 'middle') {\n return (_y + _y1) / 2;\n }\n // 柱子 从下到上\n if (_y >= _y1) {\n if (position === 'start') {\n return _y1 + offset;\n }\n if (position === 'end') {\n return _y - offset;\n }\n if (position === 'outside') {\n return _y + offset;\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return _y1 - offset;\n }\n if (position === 'end') {\n return _y + offset;\n }\n if (position === 'outside') {\n return _y - offset;\n }\n }\n return (_y + _y1) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { Direction } from '../../typings/space';\n\nexport class RangeColumnSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getMeasureData = (datum: any) => {\n return this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]];\n };\n}\n","import { Factory } from '../../core/factory';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { IRangeColumnAnimationParams, RangeColumnAppearPreset } from './interface';\n\nexport const rangeColumnGrowIn = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterIn',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const rangeColumnGrowOut = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterOut',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nexport function rangeColumnPresetAnimation(\n params: IRangeColumnAnimationParams,\n preset: RangeColumnAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'grow':\n default:\n return rangeColumnGrowIn(params);\n }\n}\n\nexport const registerRangeColumnAnimation = () => {\n Factory.registerAnimation('rangeColumn', (params: IRangeColumnAnimationParams, preset: RangeColumnAppearPreset) => ({\n appear: rangeColumnPresetAnimation(params, preset),\n enter: rangeColumnGrowIn(params),\n exit: rangeColumnGrowOut(params),\n disappear: rangeColumnGrowOut(params)\n }));\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { bar3dSeriesMark, barSeriesMark } from '../bar/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const rangeColumnSeriesMark: SeriesMarkMap = {\n ...barSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n\nexport const rangeColumn3dSeriesMark: SeriesMarkMap = {\n ...bar3dSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IRangeColumnSeriesSpec, IRangeColumnSeriesTheme } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { PositionEnum } from './interface';\n\nexport class RangeColumnSeriesSpecTransformer<\n T extends IRangeColumnSeriesSpec = IRangeColumnSeriesSpec,\n K extends IRangeColumnSeriesTheme = IRangeColumnSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n const labelPosition = spec.label?.position;\n if (labelPosition !== PositionEnum.bothEnd) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n }\n}\n","import { BarSeries } from '../bar/bar';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRectMark } from '../../mark/rect';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { setRectLabelPos } from '../util/label-mark';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { RangeColumnSeriesTooltipHelper } from './tooltip-helper';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { Datum } from '../../typings';\nimport type { IRangeColumnSeriesSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { PositionEnum } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { RangeColumnAppearPreset } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRangeColumnAnimation } from './animation';\nimport { rangeColumnSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { RangeColumnSeriesSpecTransformer } from './range-column-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport type { IRectMark, ITextMark } from '../../mark/interface';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumnSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.rangeColumn;\n type = SeriesTypeEnum.rangeColumn;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n protected _barName: string = SeriesTypeEnum.bar;\n\n protected declare _spec: T;\n\n static readonly mark: SeriesMarkMap = rangeColumnSeriesMark;\n static readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n\n private _minLabelMark?: ITextMark;\n private _maxLabelMark?: ITextMark;\n private _labelMark?: ITextMark;\n\n initMark(): void {\n this._initBarBackgroundMark();\n\n const labelPosition = this._spec.label?.position;\n this._barMark = this._createMark(\n RangeColumnSeries.mark.bar,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.bar?.stateSort\n },\n {\n setCustomizedShape: this._spec.bar?.customShape,\n morph: shouldMarkDoMorph(this._spec, RangeColumnSeries.mark.bar.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IRectMark;\n\n if (this._spec.label?.visible !== false && labelPosition === PositionEnum.bothEnd) {\n if (this._spec.label?.minLabel?.visible !== false) {\n this._minLabelMark = this._createMark(RangeColumnSeries.mark.minLabel, {\n markSpec: this._spec.label?.minLabel\n }) as ITextMark;\n }\n if (this._spec.label?.maxLabel?.visible !== false) {\n this._maxLabelMark = this._createMark(RangeColumnSeries.mark.maxLabel, {\n markSpec: this._spec.label?.maxLabel\n }) as ITextMark;\n }\n }\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this._initLabelMarkPos(this._minLabelMark, this._spec.label?.minLabel, 0, 'end');\n this._initLabelMarkPos(this._maxLabelMark, this._spec.label?.maxLabel, 1, 'start');\n }\n\n _initLabelMarkPos(\n labelMark: ITextMark,\n labelSpec: IRangeColumnSeriesSpec['label']['minLabel'],\n fieldIndex: number,\n defaultPosition: string\n ): void {\n if (labelMark) {\n this.setMarkStyle(labelMark, {\n fill: labelSpec?.style?.fill ?? this.getColorAttribute(),\n text: (datum: Datum) => {\n const val =\n this._spec.direction === Direction.horizontal\n ? datum[this._spec.xField[fieldIndex]]\n : datum[this._spec.yField[fieldIndex]];\n if (labelSpec?.formatMethod) {\n return labelSpec.formatMethod(val, datum);\n }\n return val;\n }\n });\n const position = labelSpec?.position ?? defaultPosition;\n const offset = labelSpec?.offset ?? (this._direction === 'vertical' ? -20 : -25);\n setRectLabelPos(\n this,\n labelMark,\n position,\n offset,\n (datum: Datum) => this._barMark.getAttribute('x', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('x', datum) as number) +\n (this._barMark.getAttribute('width', datum) as number)\n : (this._barMark.getAttribute('x1', datum) as number);\n },\n (datum: Datum) => this._barMark.getAttribute('y', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('y1', datum) as number)\n : (this._barMark.getAttribute('y', datum) as number) +\n (this._barMark.getAttribute('height', datum) as number);\n },\n () => this._direction\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ITextMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n let min;\n let max;\n if (this._spec.direction === Direction.horizontal) {\n min = datum[this._spec.xField[0]];\n max = datum[this._spec.xField[1]];\n } else {\n min = datum[this._spec.yField[0]];\n max = datum[this._spec.yField[1]];\n }\n return min + '-' + max;\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n this._labelMark = labelMark;\n }\n\n protected _dataToPosX(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosX1(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY1(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rangeColumn')?.({ direction: this.direction }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._minLabelMark) {\n this._minLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n if (this._maxLabelMark) {\n this._maxLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeColumnSeriesTooltipHelper(this);\n this._barMark && this._tooltipHelper.activeTriggerSet.mark.add(this._barMark);\n\n this._minLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._minLabelMark);\n this._maxLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._maxLabelMark);\n this._labelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._labelMark);\n }\n}\n\nexport const registerRangeColumnSeries = () => {\n registerRectMark();\n registerTextMark();\n registerRangeColumnAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeColumnSeries.type, RangeColumnSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeColumnChartSpec } from './interface';\n\nexport class RangeColumnChartSpecTransformer<\n T extends IRangeColumnChartSpec = IRangeColumnChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barBackground',\n 'barMinHeight',\n 'stackCornerRadius',\n 'bar'\n ]);\n\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IRangeColumnChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { registerRangeColumnSeries } from '../../series/range-column/range-column';\nimport { RangeColumnChartSpecTransformer } from './range-column-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeColumnChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n static readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n}\n\nexport const registerRangeColumnChart = () => {\n registerRangeColumnSeries();\n Factory.registerChart(RangeColumnChart.type, RangeColumnChart);\n};\n","import { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum } from '../../interface/type';\nimport { RangeColumnSeries } from '../range-column';\nimport { registerRect3dMark } from '../../../mark/rect-3d';\nimport type { AdaptiveSpec } from '../../../typings';\nimport type { IRangeColumn3dSeriesSpec } from '../interface';\nimport { rangeColumn3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumn3dSeries<\n T extends IRangeColumn3dSeriesSpec = IRangeColumn3dSeriesSpec\n> extends RangeColumnSeries> {\n static readonly type: string = SeriesTypeEnum.rangeColumn3d;\n type = SeriesTypeEnum.rangeColumn3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n protected _barName: string = SeriesTypeEnum.bar3d;\n static readonly mark: SeriesMarkMap = rangeColumn3dSeriesMark;\n}\n\nexport const registerRangeColumn3dSeries = () => {\n registerRect3dMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeColumn3dSeries.type, RangeColumn3dSeries);\n};\n","import { Direction } from '../../../typings';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IRangeColumn3dChartSpec } from '../interface';\n\nexport class RangeColumn3dChartSpecTransformer<\n T extends IRangeColumn3dChartSpec = IRangeColumn3dChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec, ['bar3d', 'barGapInGroup']);\n\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n}\n","import { ChartTypeEnum } from '../../interface/type';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { IRangeColumn3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { registerRangeColumn3dSeries } from '../../../series/range-column/3d/range-column-3d';\nimport { RangeColumn3dChartSpecTransformer } from './range-column-3d-transformer';\nimport { BaseChart } from '../../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class RangeColumn3dChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn3d;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n static readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn3d;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n}\n\nexport const registerRangeColumn3dChart = () => {\n register3DPlugin();\n registerRangeColumn3dSeries();\n Factory.registerChart(RangeColumn3dChart.type, RangeColumn3dChart);\n};\n","import type { IElement } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiffState } from '@visactor/vgrammar-core';\nimport { minInArray } from '@visactor/vutils';\n\n/**\n * 计算角度对于起点的比例\n */\nexport const computeRatio = (angle: number, range: [number, number]) => {\n /**\n * 计算当前处理的角度, 与range的距离\n * 若ratio为负, 则代表需要向起点靠拢\n * 若ratio为正, 则代表需要向终点靠拢\n */\n const ratio = (angle - range[0]) / (range[1] - range[0] || 1);\n\n /**\n * ratio若为负值, 则取0, 代表起点.\n * ratio若为正值, 则取1, 代表终点.\n * Tips: 仅代表一个比例, 具体的值是多少, 需要在外部计算.\n */\n return Math.max(0, Math.min(1, ratio));\n};\n\n/**\n * 得到最内层的Elements\n */\nexport const getInnerMostElements = (element: IElement) => {\n // 所有待更新的marks\n const updateElements = element.mark.elements.filter(e => e.diffState === DiffState.update);\n // 得到最内层级\n const minDepth = minInArray(updateElements.map(e => e?.data?.[0].depth));\n // 内层的Marks\n return updateElements.filter(e => e?.data?.[0].depth === minDepth);\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { isEmpty, maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[], startAngle: number, endAngle: number): [number, number] => {\n // 处理enter时从无到有的case, 例如图例.\n if (isEmpty(elements)) {\n return [startAngle, endAngle];\n }\n\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstEnter = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.startAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.startAngle\n },\n endAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.endAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.endAngle\n },\n outerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.outerRadius\n },\n innerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[]): [number, number] => {\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstExit = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('startAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('startAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n endAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('endAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('endAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n outerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('outerRadius', false),\n to: () => params.animationInfo().innerRadius\n },\n innerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('innerRadius', false),\n to: () => params.animationInfo().innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams, SunburstAppearPreset } from './interface';\n\n/**\n * 预设\n */\nexport const sunburstPresetAnimation = (\n _params: ISunburstAnimationParams, // 此处仅为保持结构统一\n preset: SunburstAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growAngle': {\n return {\n type: 'growAngleIn'\n };\n }\n case 'growRadius': {\n return {\n type: 'growRadiusIn'\n };\n }\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n","import type { TreeLinkElement, TreemapNodeElement, TreeNodeElement } from './interface';\n\nexport const flattenNodes = (\n nodes: TreemapNodeElement[],\n output: T[] = [],\n options?: {\n maxDepth?: number;\n callback?: (node: TreemapNodeElement) => T;\n }\n) => {\n const hasMaxDepth = options?.maxDepth >= 0;\n\n nodes.forEach(node => {\n if (!hasMaxDepth || node.depth <= options.maxDepth) {\n output.push(options?.callback ? options.callback(node) : (node as unknown as T));\n if (node.children) {\n if (hasMaxDepth && node.depth === options.maxDepth) {\n node.children = null;\n node.isLeaf = true;\n } else {\n flattenNodes(node.children, output, options);\n }\n }\n }\n });\n\n return output;\n};\n\nexport const flattenTreeLinks = (\n nodes: TreeNodeElement[],\n output: T[] = [],\n options?: {\n maxDepth?: number;\n callback?: (link: TreeLinkElement) => T;\n }\n): T[] => {\n const hasMaxDepth = options?.maxDepth >= 0;\n\n nodes.forEach(node => {\n if (!hasMaxDepth || node.depth <= options.maxDepth - 1) {\n if (node.children) {\n node.children.forEach(child => {\n const link = {\n source: node,\n target: child,\n x0: node.x,\n y0: node.y,\n x1: child.x,\n y1: child.y,\n key: `${node.key}~${child.key}`\n };\n\n output.push(options?.callback ? options.callback(link) : (link as unknown as T));\n\n if (child.children?.length) {\n flattenTreeLinks([child], output, options);\n }\n });\n }\n }\n });\n\n return output;\n};\n","import { flattenNodes } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TreemapNodeElement, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\n\nexport type FlattenNodeElement = TreemapNodeElement | SunburstNodeElement;\n\nexport interface IFlattenOpt {\n output?: Datum[];\n maxDepth?: number;\n callback?: (node: FlattenNodeElement) => T;\n}\n\nexport const flatten = (data: Array, op: IFlattenOpt = {}) => {\n if (!data) {\n return [];\n }\n\n const result = [] as FlattenNodeElement[];\n flattenNodes(data as unknown as FlattenNodeElement[], result, op);\n return result;\n};\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/dice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { HierarchicalDatum } from '../interface';\n\n/**\n * split rect in horizontal direction\n */\nexport default function (\n parent: T,\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n keyMap: Record = { x0: 'x0', x1: 'x1', y0: 'y0', y1: 'y1' }\n) {\n const nodes = parent.children;\n let node;\n let i = -1;\n const n = nodes.length;\n const k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i];\n node[keyMap.y0] = y0;\n node[keyMap.y1] = y1;\n node[keyMap.x0] = x0;\n node[keyMap.x1] = x0 += node.value * k;\n }\n}\n","import { isNil, isString } from '@visactor/vutils';\n\nexport const toPercent = (percent: string | number, total: number) => {\n if (isNil(percent)) {\n return total;\n }\n\n return isString(percent) ? (total * parseFloat(percent as string)) / 100 : percent;\n};\n","import isValidNumber from './isValidNumber';\n\nexport function toValidNumber(v: any) {\n if (isValidNumber(v)) {\n return v;\n }\n const value = +v;\n return isValidNumber(value) ? value : 0;\n}\n","import type {\n SunburstOptions,\n HierarchicalDatum,\n SunburstNodeElement,\n HierarchicalData,\n SunburstLabelConfig\n} from '../interface';\nimport { isNil, isArray, isFunction, range, isBoolean, polarToCartesian } from '@visactor/vutils';\nimport dice from '../treemap/dice';\nimport { field, toPercent } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\nconst keyMap = {\n x0: 'startAngle',\n x1: 'endAngle',\n y0: 'innerRadius',\n y1: 'outerRadius'\n};\n\nexport class SunburstLayout {\n private options: SunburstOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _maxDepth: number;\n\n private _parsedCenter: [number, number];\n\n private _parsedInnerRadius: number | number[];\n\n private _parsedOutterRadius: number | number[];\n\n private _maxRadius: number;\n\n static defaultOpionts: Partial = {\n startAngle: Math.PI / 2,\n endAngle: (-3 * Math.PI) / 2,\n center: ['50%', '50%'],\n gapRadius: 0,\n innerRadius: 0,\n outerRadius: '70%'\n };\n\n constructor(options?: SunburstOptions) {\n this.options = options\n ? Object.assign({}, SunburstLayout.defaultOpionts, options)\n : Object.assign({}, SunburstLayout.defaultOpionts);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._maxDepth = -1;\n }\n\n private _parseRadius(\n viewBox: { x0: number; x1: number; y0: number; y1: number; width: number; height: number },\n maxDepth: number\n ) {\n const cx = viewBox.x0 + toPercent(this.options.center[0], viewBox.width);\n const cy = viewBox.y0 + toPercent(this.options.center[1], viewBox.height);\n const maxRadius = Math.min(viewBox.width / 2, viewBox.height / 2);\n const innerRadius = this.options.innerRadius;\n const outerRadius = this.options.outerRadius;\n const isInnerArray = isArray(innerRadius);\n const parsedInnerRadius = isInnerArray\n ? innerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(innerRadius, maxRadius);\n const isOuterArray = isArray(outerRadius);\n const gapRadius = this.options.gapRadius;\n const parsedOuterRadius = isOuterArray\n ? outerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(outerRadius, maxRadius);\n const rangeArr = range(0, maxDepth + 1);\n\n if (isInnerArray) {\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n const ir = parsedInnerRadius[index];\n return isNil(ir) ? maxRadius : ir;\n });\n\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isOuterArray\n ? parsedOuterRadius[index] ?? maxRadius\n : index < maxDepth\n ? this._parsedInnerRadius[index + 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius)\n : (parsedOuterRadius as number);\n });\n } else if (isOuterArray) {\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isNil(parsedOuterRadius[index]) ? maxRadius : parsedOuterRadius[index];\n });\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return index === 0\n ? (parsedInnerRadius as number)\n : this._parsedOutterRadius[index - 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n } else {\n const ir = toPercent(innerRadius, maxRadius);\n const or = parsedOuterRadius as number;\n const step = (or - ir) / (maxDepth + 1);\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return ir + index * step;\n });\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return this._parsedInnerRadius[index] + step - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n }\n\n this._parsedCenter = [cx, cy];\n this._maxRadius = maxRadius;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: SunburstNodeElement[] = [];\n const res = calculateNodeValue(data, nodes, 0, -1, null, this._getNodeKey);\n\n this._parseRadius(viewBox, res.maxDepth);\n this._maxDepth = res.maxDepth;\n\n this._layout(nodes, {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n startAngle: this.options.startAngle,\n endAngle: this.options.endAngle\n });\n\n return nodes;\n }\n\n private _layout(nodes: SunburstNodeElement[], parent: SunburstNodeElement) {\n this._layoutNode(parent);\n\n nodes.forEach(node => {\n if (node?.children?.length) {\n this._layout(node.children, node);\n } else {\n this._layoutNode(node);\n }\n });\n }\n\n private _layoutLabel(child: SunburstNodeElement, labelOption: SunburstLabelConfig) {\n const angle = (child.startAngle + child.endAngle) / 2;\n const r =\n (labelOption.align === 'start'\n ? (child.innerRadius as number)\n : labelOption.align === 'end'\n ? child.outerRadius\n : (child.innerRadius + child.outerRadius) / 2) + (labelOption.offset ?? 0);\n const pos = polarToCartesian({ x: this._parsedCenter[0], y: this._parsedCenter[1] }, r, angle);\n\n child.label = {\n x: pos.x,\n y: pos.y,\n textBaseline: 'middle'\n };\n\n if (labelOption.rotate === 'tangential') {\n child.label.angle = angle - Math.PI / 2;\n child.label.textAlign = 'center';\n child.label.maxLineWidth = Math.abs(child.endAngle - child.startAngle) * r;\n } else {\n const uniformAngle = angle % (Math.PI * 2);\n const formatAngle = uniformAngle < 0 ? uniformAngle + Math.PI * 2 : uniformAngle;\n\n if (formatAngle > Math.PI / 2 && formatAngle < Math.PI * 1.5) {\n child.label.angle = formatAngle + Math.PI;\n child.label.textAlign =\n labelOption.align === 'start' ? 'end' : labelOption.align === 'end' ? 'start' : 'center';\n } else {\n child.label.angle = formatAngle;\n child.label.textAlign = labelOption.align;\n }\n\n child.label.maxLineWidth = child.isLeaf ? undefined : Math.abs(child.outerRadius - child.innerRadius);\n }\n }\n\n private _layoutNode = (parent: SunburstNodeElement) => {\n parent.maxDepth = this._maxDepth;\n\n if (parent.children) {\n const ir = this._parsedInnerRadius[parent.depth + 1];\n const or = this._parsedOutterRadius[parent.depth + 1];\n\n dice(parent, parent.startAngle, Math.min(ir, or), parent.endAngle, Math.max(ir, or), keyMap);\n\n const labelOption = isArray(this.options.label) ? this.options.label[parent.depth + 1] : this.options.label;\n\n parent.children.forEach(child => {\n child.x = this._parsedCenter[0];\n child.y = this._parsedCenter[1];\n\n if (labelOption) {\n return this._layoutLabel(child, isBoolean(labelOption) ? { align: 'center', rotate: 'radial' } : labelOption);\n }\n });\n }\n };\n}\n","import type { SunburstOptions } from '@visactor/vgrammar-hierarchy';\n// eslint-disable-next-line no-duplicate-imports\nimport { SunburstLayout } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n\nexport interface ISunburstOpt extends SunburstOptions {\n width: number;\n height: number;\n}\n\n/**\n * 旭日图布局算法,VGrammar 提供.\n */\nexport const sunburstLayout = (data: Array, op: () => ISunburstOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n const layout = new SunburstLayout(options);\n return layout.layout(data, { width, height });\n};\n","export const SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD = 10;\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class SunburstTooltipHelper extends BaseSeriesTooltipHelper {\n markTooltipKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import { isObject } from '@visactor/vutils';\n\n/**\n * 根据Key, 找到对应节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNode = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[keyField] === key) {\n return node;\n }\n if (node[childrenField]) {\n const result = findHierarchyNode(node[childrenField], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\n/**\n * 根据key, 找到对应节点的父节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNodeParent = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[childrenField]) {\n for (let j = 0; j < node[childrenField].length; j++) {\n const childNode = node[childrenField][j];\n if (childNode[keyField] === key) {\n return node;\n }\n const result = findHierarchyNodeParent([childNode], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n};\n\n/**\n * 回溯遍历多叉树, 找到给定key的路径.\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyPath = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): string[] => {\n const result: string[] = [];\n const dfs = (data: T[], path: string[]): boolean => {\n for (const item of data) {\n if (item[keyField] === key) {\n result.push(...path, item[keyField].toString());\n return true;\n }\n\n if (item[childrenField]) {\n const res = dfs(item[childrenField], [...path, item[keyField]]);\n if (res === true) {\n return res;\n }\n }\n }\n return false;\n };\n dfs(hierarchyData, []);\n return result;\n};\n\nexport function isHierarchyItem(item: Object, valueField = 'value', childrenField = 'children') {\n // 检查 item 是否为对象且不为 null\n if (!isObject(item)) {\n return false;\n }\n\n // 检查 item 是否包含 childrenKey 属性且其值为数组\n if (item.hasOwnProperty(childrenField)) {\n return Array.isArray(item[childrenField]);\n }\n\n return false;\n}\n\nexport function filterHierarchyDataByRange(\n data: any[],\n minValue: number,\n maxValue: number,\n valueField = 'value',\n childrenField = 'children'\n) {\n if (!Array.isArray(data)) {\n return data;\n }\n\n return data\n .map(item => {\n const newItem = { ...item };\n if (Array.isArray(newItem[childrenField])) {\n newItem[childrenField] = filterHierarchyDataByRange(\n newItem[childrenField],\n minValue,\n maxValue,\n valueField,\n childrenField\n );\n }\n return newItem;\n })\n .filter(\n item =>\n (+item[valueField] >= minValue && +item[valueField] <= maxValue) ||\n (item[childrenField] && item[childrenField].length > 0)\n );\n}\n","import type { Datum } from '../../typings';\nimport { findHierarchyNode, findHierarchyNodeParent } from '../../util/hierarchy';\nimport { array, isNil } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\n\nexport enum DrillEnum {\n DrillDown = 'drillDown',\n DrillUp = 'drillUp'\n}\n\nexport type DrillInfo = {\n key: string;\n type: DrillEnum;\n path: string[];\n};\n\n/**\n * 通用的上卷下钻的数据过滤方法.\n */\nexport const drillFilter = (\n data: Array,\n op: {\n info: () => DrillInfo;\n keyField: () => string;\n }\n) => {\n // 根据key找到节点\n const info = op.info();\n const keyField = op.keyField();\n const dataKey = info?.key;\n\n if (isNil(dataKey)) {\n return data;\n }\n\n // 下钻, 找到当前选中节点\n if (info.type === DrillEnum.DrillDown) {\n const targetNode = findHierarchyNode(data, dataKey, keyField, 'children');\n return array(targetNode);\n }\n\n // 上卷, 找到当前选中节点的父节点\n if (info.type === DrillEnum.DrillUp) {\n const targetNode = findHierarchyNodeParent(data, dataKey, keyField, 'children');\n if (targetNode) {\n return array(targetNode);\n }\n }\n return data;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isArray, isEmpty, isNil } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\n\nimport type { DrillInfo } from '../../data/transforms/drill';\nimport { drillFilter, DrillEnum } from '../../data/transforms/drill';\nimport type { EventType, IEvent } from '../../event/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport { findHierarchyPath } from '../../util/hierarchy';\nimport { ChartEvent } from '../../constant/event';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { IModel } from '../../model/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport { ComponentTypeEnum } from '../../component/interface/type';\nimport type { Tooltip } from '../../component/tooltip';\n\ninterface DrillParams {\n event: IEvent;\n mode: RenderMode;\n drillField: () => string;\n getRawData: () => DataView;\n}\n\nexport interface IDrillable {\n /**\n * 初始化钻取设置\n */\n initDrillable: (params: DrillParams) => void;\n\n /**\n * 初始化钻取数据\n */\n initDrillableData: (dataSet: DataSet) => void;\n\n /**\n * 绑定钻取事件\n */\n bindDrillEvent: () => void;\n\n /**\n * 上卷\n */\n drillUp: () => void;\n\n /**\n * 下钻\n * @param drillPath 钻取路径\n */\n drillDown: (drillPath: string[]) => string[];\n}\n\nexport class Drillable implements IDrillable {\n private _drillParams: DrillParams;\n private _drillInfo: DrillInfo;\n\n private _getDrillTriggerEvent(type: string): EventType {\n const { mode } = this._drillParams;\n\n return getDefaultTriggerEventByMode(mode)?.[type];\n }\n\n private _hideTooltip() {\n const tooltip = (this as unknown as BaseSeries)\n .getChart()\n .getComponentsByType(ComponentTypeEnum.tooltip)[0] as Tooltip;\n tooltip && tooltip.hideTooltip();\n }\n\n initDrillable(params: DrillParams) {\n this._drillParams = params;\n }\n\n initDrillableData(dataSet: DataSet) {\n const { getRawData } = this._drillParams;\n // 注册筛选方法\n registerDataSetInstanceTransform(dataSet, 'drillFilter', drillFilter);\n\n // 调用筛选数据, 用于上卷下钻\n getRawData().transform({\n type: 'drillFilter',\n options: {\n info: () => this._drillInfo,\n keyField: () => this._drillParams.drillField()\n }\n });\n }\n\n bindDrillEvent() {\n const { event, getRawData, drillField } = this._drillParams;\n const keyField = drillField();\n if (this._getDrillTriggerEvent('start')) {\n event.on(this._getDrillTriggerEvent('start'), e => {\n if (isNil(e.datum) || isNil(e.datum?.[keyField])) {\n this.drillUp();\n return;\n }\n\n // Drill交互后, 隐藏Tooltip\n this._hideTooltip();\n // 获取数据key\n const dataKey = e.datum[keyField];\n // 已钻取的路径\n const selectPath = this._drillInfo?.path ?? [];\n // 用户点击的路径\n const clickedPath = findHierarchyPath(getRawData().rawData, dataKey, keyField, 'children');\n // 已钻取过, 则一定上卷\n if (selectPath[selectPath.length - 1] === clickedPath[clickedPath.length - 1]) {\n this.drillUp();\n } else {\n this.drillDown(clickedPath);\n }\n });\n }\n }\n\n /**\n * 下钻接口\n * @param drillPath 下钻后的路径\n * @returns 当然路径\n * @description 根据传入的path, 向指定层级下钻.\n */\n drillDown(drillPath: string[] = []): string[] {\n const { getRawData, event } = this._drillParams;\n if (!isArray(drillPath) || isEmpty(drillPath)) {\n return drillPath;\n }\n\n // 根据钻取路径, 获得当前需要展示的层级\n const dataKey = drillPath[drillPath.length - 1];\n\n this._drillInfo = {\n key: dataKey,\n path: drillPath,\n type: DrillEnum.DrillDown\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path: drillPath, type: DrillEnum.DrillDown },\n model: this as unknown as IModel\n });\n return drillPath;\n }\n\n /**\n * 上卷接口\n * @returns 上卷后的路径\n * @description 根据path信息, 向父层级上卷.\n */\n drillUp() {\n const { getRawData, event } = this._drillParams;\n\n const path = this._drillInfo?.path ?? [];\n if (!isArray(path) || isEmpty(path)) {\n return path;\n }\n\n const dataKey = path.pop();\n\n this._drillInfo = {\n key: dataKey,\n path: path,\n type: DrillEnum.DrillUp\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path, type: DrillEnum.DrillUp },\n model: this as unknown as IModel\n });\n return path;\n }\n}\n","import type { StatisticOperations } from '../../data/transforms/interface';\nimport { DEFAULT_HIERARCHY_DEPTH, DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\n\nexport const appendHierarchyFields = (\n fields: { key: string; operations: StatisticOperations }[],\n catField: string,\n valueField: string\n) => {\n fields.push({\n key: catField,\n operations: ['values']\n });\n fields.push({\n key: valueField,\n operations: ['max', 'min']\n });\n\n fields.push({\n key: DEFAULT_HIERARCHY_DEPTH,\n operations: ['max', 'min', 'values']\n });\n\n fields.push({\n key: DEFAULT_HIERARCHY_ROOT,\n operations: ['values']\n });\n\n return fields;\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { SunburstLabelConfig, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { array, isArray, isNil, isValid, isObject, degreeToRadian, mixin } from '@visactor/vutils';\n\nimport type { IMarkSpec } from '../../typings/spec';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark, IArcMark } from '../../mark/interface';\nimport type { Datum, IArcMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport type { ISunburstAnimationParams, SunburstAppearPreset } from './animation';\nimport { registerSunburstAnimation } from './animation';\nimport type { ISunburstSeriesSpec, LabelAutoVisibleType } from './interface';\nimport type { ISunburstOpt } from '../../data/transforms/sunburst';\n\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { flatten } from '../../data/transforms/flatten';\nimport { sunburstLayout } from '../../data/transforms/sunburst';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { PolarSeries } from '../polar/polar';\nimport { SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD } from '../../constant/sunburst';\nimport { SunburstTooltipHelper } from './tooltip-helper';\nimport type { animationInfo } from './animation/interface';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerTextMark } from '../../mark/text';\nimport { sunburstSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class SunburstSeries extends PolarSeries {\n protected declare _spec: ISunburstSeriesSpec;\n\n static readonly type: string = SeriesTypeEnum.sunburst;\n type = SeriesTypeEnum.sunburst;\n\n static readonly mark: SeriesMarkMap = sunburstSeriesMark;\n\n private _sunburstMark: IArcMark;\n private _labelMark: ITextMark;\n\n protected _categoryField!: string;\n protected _valueField!: string;\n\n private _centerX: number;\n private _centerY: number;\n private _offsetX: number;\n private _offsetY: number;\n private _startAngle: number;\n private _endAngle: number;\n\n private __innerRadius: number | number[];\n private __outerRadius: number | number[];\n private _gap: number | number[];\n private _labelLayout: SunburstLabelConfig | SunburstLabelConfig[];\n\n private _labelAutoVisible?: LabelAutoVisibleType;\n\n private _label: IMarkSpec;\n private _sunburst: IMarkSpec;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n /**\n * 角度区间\n */\n this._startAngle = degreeToRadian(this._spec.startAngle);\n this._endAngle = degreeToRadian(this._spec.endAngle);\n\n /**\n * 中心点\n */\n this._centerX = this._spec.centerX;\n this._centerY = this._spec.centerY;\n this._offsetX = this._spec.offsetX;\n this._offsetY = this._spec.offsetY;\n\n /**\n * 对所有层生效的布局配置\n */\n this.__innerRadius = this._spec.innerRadius;\n this.__outerRadius = this._spec.outerRadius;\n this._gap = this._spec.gap;\n this._labelLayout = this._spec.labelLayout;\n\n /**\n * 图元配置\n */\n this._sunburst = this._spec.sunburst;\n this._label = this._spec.label;\n\n /**\n * 功能配置\n */\n this._labelAutoVisible = this._spec.labelAutoVisible;\n }\n\n protected initData() {\n super.initData();\n const rawData = this.getRawData();\n if (!rawData) {\n return;\n }\n\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'sunburstLayout', sunburstLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 对筛选后的数据, 调用sunburst布局算法\n rawData.transform({\n type: 'sunburstLayout',\n options: (): ISunburstOpt => {\n const { innerRadius, outerRadius, gap, label } = this._computeLevel();\n return {\n nodeKey: this._categoryField,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n center: [\n isValid(this._centerX) ? this._centerX : this.getLayoutRect().width / 2,\n isValid(this._centerY) ? this._centerY : this.getLayoutRect().height / 2\n ],\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n gapRadius: gap,\n label: label\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: SunburstNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initArcMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initArcMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initArcMark() {\n if (this._sunburst.visible === false) {\n return;\n }\n // SunburstMark\n const sunburstMark = this._createMark(\n SunburstSeries.mark.sunburst,\n {\n isSeriesMark: true,\n stateSort: this._spec.sunburst?.stateSort\n },\n {\n setCustomizedShape: this._spec.sunburst?.customShape\n }\n ) as IArcMark;\n this._sunburstMark = sunburstMark;\n }\n\n private _initArcMarkStyle() {\n if (isNil(this._sunburstMark)) {\n return;\n }\n this.setMarkStyle(\n this._sunburstMark,\n {\n x: d => d.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.y + (isValid(this._offsetY) ? this._offsetY : 0),\n outerRadius: d => d.outerRadius,\n innerRadius: d => d.innerRadius,\n startAngle: d => d.startAngle,\n endAngle: d => d.endAngle,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label.visible !== true) {\n return;\n }\n // Label\n const labelMark = this._createMark(SunburstSeries.mark.label, {\n isSeriesMark: false\n }) as ITextMark;\n this._labelMark = labelMark;\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: d => {\n // 自动隐藏密集标签逻辑.\n const labelAutoVisible = this._labelAutoVisible;\n\n if (isObject(labelAutoVisible) && labelAutoVisible.enable === true) {\n return (\n (d.endAngle - d.startAngle) * (d.outerRadius - d.innerRadius) >\n (labelAutoVisible?.circumference ?? SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD)\n );\n }\n return this._spec.label.visible;\n },\n x: d => d.label?.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.label?.y + (isValid(this._offsetY) ? this._offsetY : 0),\n textBaseline: d => d.label?.textBaseline,\n textAlign: d => d.label?.textAlign,\n angle: d => d.label?.angle ?? 0,\n fontSize: 10,\n text: (d: Datum) => d.name\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new SunburstTooltipHelper(this);\n this._sunburstMark && this._tooltipHelper.activeTriggerSet.mark.add(this._sunburstMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation() {\n const animationParams: ISunburstAnimationParams = {\n animationInfo: (): animationInfo => {\n // 返回用户的交互元素信息\n return {\n innerRadius: this._computeRadius(array(this.__innerRadius))[0],\n outerRadius: this._computeRadius(array(this.__outerRadius))[0],\n startAngle: array(this._startAngle)[0],\n endAngle: array(this._endAngle)[0]\n };\n }\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sunburst')?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n /**\n * 计算radius, 转换为布局属性\n * @radius radius是一个比例值, 取值范围为[0,1]\n */\n private _computeRadius(radius: number | number[]) {\n if (isArray(radius)) {\n return radius.map(r => {\n return this._computeLayoutRadius() * r;\n });\n }\n return this._computeLayoutRadius() * radius;\n }\n\n private _computeLevel(): {\n innerRadius: number | number[];\n outerRadius: number | number[];\n gap: number | number[];\n label: SunburstLabelConfig | SunburstLabelConfig[];\n } {\n return {\n innerRadius: this._computeRadius(this.__innerRadius),\n outerRadius: this._computeRadius(this.__outerRadius),\n gap: this._gap,\n label: this._labelLayout\n };\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._sunburstMark];\n }\n\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(SunburstSeries, Drillable);\n\nexport const registerSunBurstSeries = () => {\n Factory.registerSeries(SunburstSeries.type, SunburstSeries);\n registerArcMark();\n registerTextMark();\n registerFadeInOutAnimation();\n registerSunburstAnimation();\n};\n","import { isValid, radianToDegree } from '@visactor/vutils';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISunburstChartSpec } from './interface';\nimport { POLAR_START_ANGLE } from '../../constant/polar';\nimport type { ISunburstSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\n\nexport class SunburstChartSpecTransformer<\n T extends ISunburstChartSpec = ISunburstChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T) {\n // 开始角度默认使用用户配置\n const startAngle = isValid(spec.startAngle) ? spec.startAngle : POLAR_START_ANGLE;\n // 结束角度默认使用用户的配置, 若用户没配置, 默认补成整圆.\n const endAngle = isValid(spec.endAngle) ? spec.endAngle : startAngle + radianToDegree(Math.PI * 2);\n\n const series: ISunburstSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'centerX',\n 'centerY',\n 'offsetX',\n 'offsetY',\n 'innerRadius',\n 'outerRadius',\n 'gap',\n 'labelLayout',\n 'label',\n 'labelAutoVisible',\n 'drill',\n 'drillField'\n ]);\n\n series.startAngle = startAngle;\n series.endAngle = endAngle;\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { registerSunBurstSeries } from './../../series/sunburst/sunburst';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISunburstChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { SunburstChartSpecTransformer } from './sunburst-transformer';\n\nexport class SunburstChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sunburst;\n static readonly seriesType: string = SeriesTypeEnum.sunburst;\n static readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sunburst;\n readonly seriesType: string = SeriesTypeEnum.sunburst;\n}\n\nexport const registerSunburstChart = () => {\n registerSunBurstSeries();\n Factory.registerChart(SunburstChart.type, SunburstChart);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/lcg.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\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 function randomLCG(initS: number = 1) {\n let s = initS;\n return () => (s = (a * s + c) % m) / m;\n}\n","import { shuffleArray, Logger } from '@visactor/vutils';\nimport type { ICircle } from '../interface';\nimport { randomLCG } from '../lcg';\n\nexport default function (circles: ICircle[]) {\n return packEncloseRandom(circles, randomLCG());\n}\n\nexport function packEncloseRandom(circles: ICircle[], random: () => number) {\n let i = 0;\n const sCircles = shuffleArray(Array.from(circles), random);\n const n = sCircles.length;\n let B: ICircle[] = [];\n let p: ICircle;\n let e: ICircle;\n\n while (i < n) {\n p = sCircles[i];\n if (e && enclosesWeak(e, p)) {\n ++i;\n } else {\n B = extendBasis(B, p);\n e = encloseBasis(B);\n i = 0;\n }\n }\n\n return e;\n}\n\nfunction extendBasis(B: ICircle[], p: ICircle) {\n let i;\n let j;\n\n if (enclosesWeakAll(p, B)) {\n return [p];\n }\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]) && 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 (\n 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 ) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n Logger.getInstance().error('error when packEncloseRandom');\n}\n\nfunction enclosesNot(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius + Math.max(a.radius, b.radius, 1) * 1e-9;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a: ICircle, B: ICircle[]) {\n for (let 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: ICircle[]) {\n switch (B.length) {\n case 1:\n return encloseBasis1(B[0]);\n case 2:\n return encloseBasis2(B[0], B[1]);\n case 3:\n return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a: ICircle) {\n return {\n x: a.x,\n y: a.y,\n radius: a.radius\n };\n}\n\nfunction encloseBasis2(a: ICircle, b: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x21 = x2 - x1;\n const y21 = y2 - y1;\n const r21 = r2 - r1;\n const 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 radius: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a: ICircle, b: ICircle, c: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x3 = c.x;\n const y3 = c.y;\n const r3 = c.radius;\n const a2 = x1 - x2;\n const a3 = x1 - x3;\n const b2 = y1 - y2;\n const b3 = y1 - y3;\n const c2 = r2 - r1;\n const c3 = r3 - r1;\n const d1 = x1 * x1 + y1 * y1 - r1 * r1;\n const d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2;\n const d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3;\n const ab = a3 * b2 - a2 * b3;\n const xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1;\n const xb = (b3 * c2 - b2 * c3) / ab;\n const ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1;\n const yb = (a2 * c3 - a3 * c2) / ab;\n const A = xb * xb + yb * yb - 1;\n const B = 2 * (r1 + xa * xb + ya * yb);\n const C = xa * xa + ya * ya - r1 * r1;\n const r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n radius: r\n };\n}\n","import { array } from '@visactor/vutils';\nimport { randomLCG } from '../lcg';\nimport { packEncloseRandom } from './enclose';\nimport type { ICircle } from '../interface';\n\ninterface CircleNode {\n _: ICircle;\n next?: CircleNode;\n prev?: CircleNode;\n}\n\nfunction place(b: ICircle, a: ICircle, c: ICircle) {\n const dx = b.x - a.x;\n let x;\n let a2;\n const dy = b.y - a.y;\n let y;\n let b2;\n const d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.radius + c.radius;\n a2 *= a2;\n b2 = b.radius + c.radius;\n 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.radius;\n c.y = a.y;\n }\n}\n\nfunction intersects(a: ICircle, b: ICircle) {\n const dr = a.radius + b.radius - 1e-6;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node: CircleNode) {\n const a = node._;\n const b = node.next._;\n const ab = a.radius + b.radius;\n const dx = (a.x * b.radius + b.x * a.radius) / ab;\n const dy = (a.y * b.radius + b.y * a.radius) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction getCicleNode(circle: ICircle): CircleNode {\n return {\n _: circle,\n next: null as CircleNode,\n prev: null as CircleNode\n };\n}\n\nexport function packSiblingsRandom(circles: ICircle[], random: () => number) {\n circles = array(circles);\n\n const n = circles.length;\n if (!n) {\n return 0;\n }\n\n // Place the first circle.\n let a = circles[0];\n a.x = 0;\n a.y = 0;\n if (n === 1) {\n return a.radius;\n }\n\n // Place the second circle.\n const b = circles[1];\n a.x = -b.radius;\n b.x = a.radius;\n b.y = 0;\n if (n === 2) {\n return a.radius + b.radius;\n }\n\n let c = circles[2];\n // Place the third circle.\n place(b, a, c);\n\n // Initialize the front-chain using the first three circles a, b and c.\n let aNode = getCicleNode(a);\n let bNode = getCicleNode(b);\n let cNode = getCicleNode(c);\n aNode.next = bNode;\n cNode.prev = bNode;\n\n bNode.next = cNode;\n aNode.prev = cNode;\n\n cNode.next = aNode;\n bNode.prev = aNode;\n\n let j: CircleNode;\n let k: CircleNode;\n let sj: number;\n let sk: number;\n let aa: number;\n let ca: number;\n let isContinue: boolean;\n\n // Attempt to place each remaining circle…\n for (let i = 3; i < n; ++i) {\n isContinue = false;\n c = circles[i];\n place(aNode._, bNode._, c);\n cNode = getCicleNode(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 = bNode.next;\n k = aNode.prev;\n sj = bNode._.radius;\n sk = aNode._.radius;\n\n do {\n if (sj <= sk) {\n if (intersects(j._, cNode._)) {\n bNode = j;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n isContinue = true;\n break;\n }\n sj += j._.radius;\n j = j.next;\n } else {\n if (intersects(k._, cNode._)) {\n aNode = k;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n\n isContinue = true;\n break;\n }\n sk += k._.radius;\n k = k.prev;\n }\n } while (j !== k.next);\n\n if (isContinue) {\n continue;\n }\n\n // Success! Insert the new circle c between a and b.\n cNode.prev = aNode;\n cNode.next = bNode;\n aNode.next = bNode.prev = bNode = cNode;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(aNode);\n cNode = cNode.next;\n while (cNode !== bNode) {\n ca = score(cNode);\n if (ca < aa) {\n aNode = cNode;\n aa = ca;\n }\n cNode = cNode.next;\n }\n bNode = aNode.next;\n }\n\n // Compute the enclosing circle of the front chain.\n const aCircles = [bNode._];\n cNode = bNode.next;\n while (cNode !== bNode) {\n aCircles.push(cNode._);\n cNode = cNode.next;\n }\n c = packEncloseRandom(aCircles, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (let i = 0; i < n; ++i) {\n a = circles[i];\n a.x -= c.x;\n a.y -= c.y;\n }\n\n return c.radius;\n}\n\nexport default function (circles: ICircle[]) {\n packSiblingsRandom(circles, randomLCG());\n return circles;\n}\n","import { eachBefore, eachAfter, calculateNodeValue } from '../utils';\nimport type { CirclePackingOptions, HierarchicalDatum, CirclePackingNodeElement, HierarchicalData } from '../interface';\nimport { isFunction, isNumber, isArray } from '@visactor/vutils';\nimport { field, zero } from '@visactor/vgrammar-util';\nimport { randomLCG } from '../lcg';\nimport { packSiblingsRandom } from './siblings';\n\nfunction radiusLeaf(radius: (node: CirclePackingNodeElement) => number) {\n return function (node: CirclePackingNodeElement) {\n if (!node.children) {\n node.radius = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding: (node: CirclePackingNodeElement) => number, k: number, random: () => number) {\n return function (node: CirclePackingNodeElement) {\n const children = node?.children;\n if (children) {\n let i;\n const n = children.length;\n const r = padding(node) * k || 0;\n\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius += r;\n }\n }\n const e = packSiblingsRandom(children, random);\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius -= r;\n }\n }\n node.radius = e + r;\n }\n };\n}\n\nfunction translateChild(k: number, maxDepth: number) {\n return function (node: CirclePackingNodeElement, index: number, parent: CirclePackingNodeElement) {\n node.radius *= k;\n node.maxDepth = maxDepth;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\nexport class CirclePackingLayout {\n private options: CirclePackingOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _getPadding?: (node: CirclePackingNodeElement) => number;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n setRadius: (node: CirclePackingNodeElement) => {\n return Math.sqrt(node.value);\n },\n padding: 0,\n nodeSort: (a, b) => b.value - a.value\n };\n\n constructor(options?: CirclePackingOptions) {\n this.options = options;\n\n const keyOption = options?.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._getPadding = isNumber(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding as number\n : isArray(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding[node.depth + 1] ?? 0\n : () => 0;\n this._maxDepth = -1;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: CirclePackingNodeElement[] = [];\n const res = calculateNodeValue(\n data,\n nodes,\n 0,\n -1,\n null,\n this._getNodeKey\n );\n this._maxDepth = res.maxDepth;\n\n const random = randomLCG();\n const root: CirclePackingNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: 'root',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n x: viewBox.x0 + viewBox.width / 2,\n y: viewBox.y0 + viewBox.height / 2\n };\n const { nodeSort, setRadius, padding, includeRoot } = this.options ?? {};\n if (nodeSort !== false) {\n const sort = (isFunction(nodeSort) ? this.options.nodeKey : CirclePackingLayout.defaultOpionts.nodeSort) as (\n a: CirclePackingNodeElement,\n b: CirclePackingNodeElement\n ) => number;\n // 默认排序,布局效果更好\n eachBefore([root], (node: CirclePackingNodeElement) => {\n if (node.children && node.children.length) {\n node.children.sort(sort);\n }\n });\n }\n if (setRadius) {\n eachBefore([root], radiusLeaf(setRadius));\n eachAfter([root], packChildrenRandom(this._getPadding, 0.5, random));\n eachBefore([root], translateChild(1, this._maxDepth));\n } else {\n const size = Math.min(viewBox.width, viewBox.height);\n\n eachBefore([root], radiusLeaf(CirclePackingLayout.defaultOpionts.setRadius));\n // layout by value\n eachAfter([root], packChildrenRandom(zero, 1, random));\n if (padding) {\n eachAfter([root], packChildrenRandom(this._getPadding, root.radius / size, random));\n }\n eachBefore([root], translateChild(size / (2 * root.radius), this._maxDepth));\n }\n\n return includeRoot ? [root] : nodes;\n }\n}\n","import type { Datum } from '../../typings';\nimport type { CirclePackingOptions } from '@visactor/vgrammar-hierarchy';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { CirclePackingLayout } from '@visactor/vgrammar-hierarchy';\n\nexport interface ICirclePackingOpt extends CirclePackingOptions {\n width: number;\n height: number;\n}\n\n/**\n * CirclePacking布局算法,VGrammar 提供.\n */\nexport const circlePackingLayout = (data: Array, op: () => ICirclePackingOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n if (width === 0 || height === 0) {\n return data;\n }\n const layout = new CirclePackingLayout(options);\n return layout.layout(data, { width, height });\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class CirclePackingTooltipHelper extends BaseSeriesTooltipHelper {\n markTooltipKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { CirclePackingAppearPreset } from './interface';\n\nexport const circlePackingPresetAnimation = (preset: CirclePackingAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n\nexport const registerCirclePackingAnimation = () => {\n Factory.registerAnimation('circlePacking', (parmas: unknown, preset: CirclePackingAppearPreset) => ({\n appear: circlePackingPresetAnimation(preset),\n enter: { type: 'growRadiusIn' },\n exit: { type: 'growRadiusOut' },\n disappear: { type: 'growRadiusOut' }\n }));\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isNil, mixin } from '@visactor/vutils';\n\nimport type { ICirclePackingOpt } from '../../data/transforms/circle-packing';\nimport type { CirclePackingAppearPreset, ICirclePackingSeriesSpec } from './interface';\n\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport { Factory } from '../../core/factory';\nimport type { Datum, IArcMarkSpec, IComposedTextMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { circlePackingLayout } from '../../data/transforms/circle-packing';\nimport type { IMark, IArcMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport type { CirclePackingNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { flatten } from '../../data/transforms/flatten';\nimport { CirclePackingTooltipHelper } from './tooltip-helper';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerCirclePackingAnimation } from './animation';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerTextMark } from '../../mark/text';\nimport { circlePackingSeriesMark } from './constant';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class CirclePackingSeries<\n T extends ICirclePackingSeriesSpec = ICirclePackingSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.circlePacking;\n type = SeriesTypeEnum.circlePacking;\n\n static readonly mark: SeriesMarkMap = circlePackingSeriesMark;\n\n // 映射字段\n protected _categoryField!: string;\n protected _valueField!: string;\n // 配置\n private _layoutPadding: number | number[];\n private _circlePacking: IMarkSpec;\n private _label: IMarkSpec;\n // Mark\n private _circlePackingMark: IArcMark;\n private _labelMark: ITextMark;\n\n // 钻取功能开启\n private _drill?: boolean;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n this._circlePacking = this._spec.circlePacking;\n this._label = this._spec.label;\n this._layoutPadding = this._spec.layoutPadding;\n }\n\n protected initData(): void {\n super.initData();\n\n const rawData = this.getRawData();\n\n if (isNil(rawData)) {\n return;\n }\n\n if (this._spec.drill) {\n // 对原始数据进行上卷下钻筛选\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'circlePackingLayout', circlePackingLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 布局算法\n rawData.transform({\n type: 'circlePackingLayout',\n options: (): ICirclePackingOpt => {\n return {\n nodeKey: this._categoryField,\n padding: this._layoutPadding,\n includeRoot: false,\n width: this.getLayoutRect().width || 1,\n height: this.getLayoutRect().height || 1\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: CirclePackingNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initCirclePackingMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initCirclePackingMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initCirclePackingMark() {\n if (this._circlePacking?.visible === false) {\n return;\n }\n\n const circlePacking = this._createMark(\n CirclePackingSeries.mark.circlePacking,\n {\n isSeriesMark: true\n },\n {\n setCustomizedShape: this._spec.circlePacking?.customShape\n }\n ) as IArcMark;\n\n this._circlePackingMark = circlePacking;\n }\n\n private _initCirclePackingMarkStyle() {\n if (isNil(this._circlePackingMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._circlePackingMark,\n {\n x: d => d.x,\n y: d => d.y,\n outerRadius: d => d.radius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: this.getColorAttribute(),\n zIndex: d => d.depth\n // Todo 内置根节点和叶节点透明度\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label?.visible === false) {\n return;\n }\n const labelMark = this._createMark(CirclePackingSeries.mark.label, {\n isSeriesMark: false\n }) as ITextMark;\n\n this._labelMark = labelMark;\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._labelMark,\n {\n x: d => d.x,\n y: d => d.y,\n text: d => {\n return d.key;\n },\n cursor: 'pointer'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n protected initTooltip() {\n this._tooltipHelper = new CirclePackingTooltipHelper(this);\n this._circlePackingMark && this._tooltipHelper.activeTriggerSet.mark.add(this._circlePackingMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation(): void {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circlePacking')?.(undefined, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._circlePackingMark];\n }\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(CirclePackingSeries, Drillable);\n\nexport const registerCirclePackingSeries = () => {\n Factory.registerSeries(CirclePackingSeries.type, CirclePackingSeries);\n registerArcMark();\n registerTextMark();\n registerScaleInOutAnimation();\n registerCirclePackingAnimation();\n};\n","import type { ICirclePackingSeriesSpec } from '../../series/circle-packing/interface';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICirclePackingChartSpec } from './interface';\n\nexport class CirclePackingChartSpecTransformer<\n T extends ICirclePackingChartSpec = ICirclePackingChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: ICirclePackingChartSpec) {\n const series: ICirclePackingSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'layoutPadding',\n 'circlePacking',\n 'drill',\n 'drillField'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ICirclePackingChartSpec } from './interface';\nimport { registerCirclePackingSeries } from '../../series/circle-packing/circle-packing';\nimport { Factory } from '../../core/factory';\nimport { CirclePackingChartSpecTransformer } from './circle-packing-transformer';\n\nexport class CirclePackingChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.circlePacking;\n static readonly seriesType: string = SeriesTypeEnum.circlePacking;\n static readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circlePacking;\n readonly seriesType: string = SeriesTypeEnum.circlePacking;\n}\n\nexport const registerCirclePackingChart = () => {\n registerCirclePackingSeries();\n Factory.registerChart(CirclePackingChart.type, CirclePackingChart);\n};\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/slice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\n/**\n * split rect in vertical direction\n */\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n let node;\n let i = -1;\n const n = nodes.length;\n const k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i];\n node.x0 = x0;\n node.x1 = x1;\n node.y0 = y0;\n y0 += node.value * k;\n node.y1 = y0;\n }\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/sliceDice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\n/**\n * split rect in vertical, horizontal direction alternatively\n */\nimport dice from './dice';\nimport type { TreemapNodeElement } from '../interface';\nimport slice from './slice';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n (parent.depth % 2 === 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/squarify.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\nimport treemapDice from './dice';\nimport treemapSlice from './slice';\n\nexport function squarifyRatio(\n ratio: number,\n parent: TreemapNodeElement,\n x0: number,\n y0: number,\n x1: number,\n y1: number\n) {\n const rows = [];\n const nodes = parent.children;\n let row;\n let nodeValue;\n let i0 = 0;\n let i1 = 0;\n const n = nodes.length;\n let dx;\n let dy;\n let value = parent.value;\n let sumValue;\n let minValue;\n let maxValue;\n let newRatio;\n let minRatio;\n let alpha;\n let beta;\n\n while (i0 < n) {\n dx = x1 - x0;\n dy = y1 - y0;\n\n // Find the next non-empty node.\n do {\n sumValue = nodes[i1++].value;\n } while (!sumValue && i1 < n);\n\n minValue = sumValue;\n 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 nodeValue = nodes[i1].value;\n sumValue += nodeValue;\n\n if (nodeValue < minValue) {\n minValue = nodeValue;\n }\n if (nodeValue > maxValue) {\n maxValue = nodeValue;\n }\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) {\n sumValue -= nodeValue;\n break;\n }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n row = Object.assign({}, parent, { value: sumValue, children: nodes.slice(i0, i1) });\n rows.push(row);\n if (dx < dy) {\n treemapDice(row, x0, y0, x1, value ? (y0 += (dy * sumValue) / value) : y1);\n } else {\n treemapSlice(row, x0, y0, value ? (x0 += (dx * sumValue) / value) : x1, y1);\n }\n value -= sumValue;\n i0 = i1;\n }\n\n return rows;\n}\n\nexport const generateSquarify = (ratio: number) => {\n return (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n };\n};\n","import type { TreemapOptions, TreemapDatum, TreemapNodeElement, TreemapData } from '../interface';\n// eslint-disable-next-line\nimport { isArray, isFunction, isNumber } from '@visactor/vutils';\nimport binary from './binary';\nimport dice from './dice';\nimport slice from './slice';\nimport sliceDice from './sliceDice';\nimport { generateSquarify } from './squarify';\nimport { field } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\n\nconst algorithms = { binary, dice, slice, sliceDice };\n\nexport class TreemapLayout {\n private options: TreemapOptions;\n\n private _splitNode: (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => void;\n\n private _getNodeKey?: (datum: TreemapDatum) => string;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n aspectRatio: (1 + Math.sqrt(5)) / 2,\n gapWidth: 0,\n labelPadding: 0,\n labelPosition: 'top',\n splitType: 'binary',\n minVisibleArea: 10\n };\n constructor(options?: TreemapOptions) {\n this.options = Object.assign({}, TreemapLayout.defaultOpionts, options);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._splitNode =\n this.options.splitType === 'squarify'\n ? generateSquarify(this.options.aspectRatio)\n : algorithms[this.options.splitType] ?? algorithms.binary;\n this._maxDepth = -1;\n }\n\n private _filterByArea = (node: TreemapNodeElement, ratio: number) => {\n const minArea = this._getMinAreaByDepth(node.depth);\n\n if (minArea > 0 && node.value * ratio < minArea) {\n return false;\n } else if (node.children?.length) {\n const newChildren = node.children.filter(child => {\n return this._filterByArea(child, ratio);\n });\n\n if (!newChildren.length) {\n node.isLeaf = true;\n node.children = null;\n } else if (newChildren.length !== node.children.length) {\n node.children = newChildren;\n }\n }\n\n return true;\n };\n\n layout(\n data: TreemapData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n if (!data || !data.length) {\n return [];\n }\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n const nodes: TreemapNodeElement[] = [];\n const res = calculateNodeValue(\n data,\n nodes,\n 0,\n -1,\n null,\n this._getNodeKey,\n this.options.valueField\n );\n this._maxDepth = res.maxDepth;\n\n if (res.sum <= 0) {\n return [];\n }\n\n const root: TreemapNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n x0: viewBox.x0,\n x1: viewBox.x1,\n y0: viewBox.y0,\n y1: viewBox.y1,\n children: nodes\n };\n const areaRatio = (viewBox.width * viewBox.height) / res.sum;\n this._filterByArea(root, areaRatio);\n\n this._layout(root);\n\n return root.children ?? [];\n }\n\n private _getMinAreaByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (\n (isArray(this.options.minVisibleArea) ? this.options.minVisibleArea[depth] : this.options.minVisibleArea) ?? 0\n );\n };\n\n private _getGapWidthByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.gapWidth) ? this.options.gapWidth[depth] : this.options.gapWidth) ?? 0;\n };\n\n private _getPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.padding) ? this.options.padding[depth] : this.options.padding) ?? 0;\n };\n\n private _getLabelPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.labelPadding) ? this.options.labelPadding[depth] : this.options.labelPadding) ?? 0;\n };\n\n private _filterChildren(node: TreemapNodeElement) {\n const maxDepth = this.options.maxDepth;\n if (isNumber(maxDepth) && maxDepth >= 0 && node.depth >= maxDepth) {\n return false;\n }\n\n const minChildrenVisibleArea = this.options.minChildrenVisibleArea;\n if (\n isNumber(minChildrenVisibleArea) &&\n Math.abs((node.x1 - node.x0) * (node.y1 - node.y0)) < minChildrenVisibleArea\n ) {\n return false;\n }\n\n const minChildrenVisibleSize = this.options.minChildrenVisibleSize;\n if (\n isNumber(minChildrenVisibleSize) &&\n (Math.abs(node.x1 - node.x0) < minChildrenVisibleSize || Math.abs(node.y1 - node.y0) < minChildrenVisibleSize)\n ) {\n return false;\n }\n\n return true;\n }\n\n private _layout(parent: TreemapNodeElement) {\n if (!this._filterChildren(parent)) {\n parent.children = null;\n parent.isLeaf = true;\n }\n\n this._layoutNode(parent);\n\n if (parent.children?.length) {\n parent.children.forEach(child => {\n if (child?.children?.length) {\n this._layout(child);\n } else {\n this._layoutNode(child);\n }\n });\n }\n }\n\n private _layoutNode = (parent: TreemapNodeElement) => {\n const gapWidth = this._getGapWidthByDepth(parent.depth);\n let x0 = parent.x0;\n let y0 = parent.y0;\n let x1 = parent.x1;\n let y1 = parent.y1;\n\n parent.maxDepth = this._maxDepth;\n\n if (gapWidth > 0) {\n x0 += gapWidth / 2;\n x1 -= gapWidth / 2;\n y0 += gapWidth / 2;\n y1 -= gapWidth / 2;\n\n if (x0 > x1) {\n x0 = (x0 + x1) / 2;\n x1 = x0;\n }\n\n if (y0 > y1) {\n y0 = (y0 + y1) / 2;\n y1 = y0;\n }\n\n parent.x0 = x0;\n parent.x1 = x1;\n parent.y0 = y0;\n parent.y1 = y1;\n }\n\n if (parent.children) {\n const labelPadding = this._getLabelPaddingByDepth(parent.depth);\n const padding = this._getPaddingByDepth(parent.depth);\n\n if (padding > 0) {\n if (padding < Math.min(x1 - x0, y1 - y0) / 2) {\n // has enough space for padding\n y0 += padding;\n y1 -= padding;\n x0 += padding;\n x1 -= padding;\n }\n }\n\n if (labelPadding > 0) {\n if (this.options.labelPosition === 'top' && y0 + labelPadding < y1) {\n parent.labelRect = { x0: x0, y0: y0, x1, y1: y0 + labelPadding };\n y0 += labelPadding;\n } else if (this.options.labelPosition === 'bottom' && y1 - labelPadding > y0) {\n parent.labelRect = { x0: x0, y0: y1 - labelPadding, x1, y1: y1 };\n y1 -= labelPadding;\n } else if (this.options.labelPosition === 'left' && x0 + labelPadding < x1) {\n parent.labelRect = { x0: x0, y0: y0, x1: x0 + labelPadding, y1 };\n x0 += labelPadding;\n } else if (this.options.labelPosition === 'right' && x1 - labelPadding > x0) {\n parent.labelRect = { x0: x1 - labelPadding, y0: y0, x1: x1, y1 };\n x1 -= labelPadding;\n }\n }\n\n const childGapWidth = this._getGapWidthByDepth(parent.depth + 1);\n\n if (childGapWidth > 0) {\n x0 -= childGapWidth / 2;\n x1 += childGapWidth / 2;\n y0 -= childGapWidth / 2;\n y1 += childGapWidth / 2;\n }\n\n this._splitNode(parent, x0, y0, x1, y1);\n }\n };\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/binary.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n const n = nodes.length;\n let sum = 0;\n const sums = new Array(n + 1);\n sums[0] = 0;\n\n for (let i = 0; i < n; ++i) {\n sum += nodes[i].value;\n sums[i + 1] = sum;\n }\n\n const partition = (i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) => {\n if (i >= j - 1) {\n const node = nodes[i];\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n return;\n }\n\n const valueOffset = sums[i];\n const valueTarget = value / 2 + valueOffset;\n let k = i + 1;\n let hi = j - 1;\n\n while (k < hi) {\n const mid = (k + hi) >>> 1;\n if (sums[mid] < valueTarget) {\n k = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n if (valueTarget - sums[k - 1] < sums[k] - valueTarget && i + 1 < k) {\n --k;\n }\n\n const valueLeft = sums[k] - valueOffset;\n const valueRight = value - valueLeft;\n\n if (x1 - x0 > y1 - y0) {\n const 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 const 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 partition(0, n, parent.value, x0, y0, x1, y1);\n}\n","import { flattenNodes } from '../format';\nimport type { TreemapData, TreemapNodeElement, TreemapTramsformOptions } from '../interface';\nimport { TreemapLayout } from './layout';\n\nexport const transform = (options: TreemapTramsformOptions, upstreamData: TreemapData) => {\n const layout = new TreemapLayout(options);\n\n const res = layout.layout(\n upstreamData,\n 'width' in options\n ? {\n width: options.width,\n height: options.height\n }\n : {\n x0: options.x0,\n x1: options.x1,\n y0: options.y0,\n y1: options.y1\n }\n );\n\n if (options.flatten) {\n const nodes: TreemapNodeElement[] = [];\n flattenNodes(res, nodes, { maxDepth: options?.maxDepth });\n\n return nodes;\n }\n return res;\n};\n","import { isFunction } from '@visactor/vutils';\nimport { dimensionStatistics } from './dimension-statistics';\nimport type { DataView } from '@visactor/vdataset';\nimport { flatten } from './flatten';\nimport type { Datum } from '../../typings';\nimport type { IStatisticsOption } from './interface';\n\n/**\n * 层次聚合统计主要用于处理层次数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const hierarchyDimensionStatistics = (data: Array, op: IStatisticsOption) => {\n let result = {};\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return result;\n }\n\n if (!data[0].latestData) {\n return result;\n }\n\n const hierarchyData = data[0].latestData as Datum[];\n const flatData = flatten(hierarchyData);\n result = dimensionStatistics([{ latestData: flatData } as any], op);\n return result;\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { TreemapSeries } from './treemap';\n\nexport class TreemapTooltipHelper extends BaseSeriesTooltipHelper {\n declare series: TreemapSeries;\n get defaultShapeType(): string {\n return 'square';\n }\n\n markTooltipKeyCallback = (datum: Datum) => {\n return this.series?.getMarkData(datum)?.[this.series.getDimensionField()[0]];\n };\n\n markTooltipValueCallback = (datum: Datum): string | undefined => {\n const { measureFields } = this._seriesCacheInfo;\n const data = this.series?.getMarkData(datum);\n if (measureFields[0] && data) {\n return data[measureFields[0]] ?? datum.value;\n }\n return undefined;\n };\n\n dimensionTooltipTitleCallback = (datum: Datum): string | undefined => {\n const { dimensionFields } = this._seriesCacheInfo;\n const data = this.series?.getMarkData(datum);\n if (dimensionFields[0] && data) {\n return data[dimensionFields[0]];\n }\n return undefined;\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { TreemapAppearPreset } from './interface';\n\nexport const treemapPresetAnimation = (preset: TreemapAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return {\n type: 'growCenterIn'\n };\n }\n default: {\n return {\n type: 'growCenterIn'\n };\n }\n }\n};\nexport const registerTreemapAnimation = () => {\n Factory.registerAnimation('treemap', (params: unknown, preset: TreemapAppearPreset) => {\n return {\n appear: treemapPresetAnimation(preset),\n enter: { type: 'growCenterIn' },\n exit: { type: 'growCenterOut' },\n disappear: { type: 'growCenterOut' }\n };\n });\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ITreemapSeriesSpec, ITreemapSeriesTheme } from './interface';\n\nexport class TreemapSeriesSpecTransformer<\n T extends ISeriesSpec = Omit,\n K extends ITreemapSeriesTheme = ITreemapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nonLeaf, 'nonLeafLabel' as any, 'initNonLeafLabelMarkStyle' as any);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.leaf);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport type { IMark, IRectMark, ILabelMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { Datum, IComposedTextMarkSpec, IRectMarkSpec } from '../../typings';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { ITreemapSeriesSpec } from './interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { IBounds } from '@visactor/vutils';\nimport { isValidNumber, Bounds, Matrix, mixin, merge } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport { registerTreemapTransforms } from '@visactor/vgrammar-hierarchy';\nimport type { TreemapNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { DataView } from '@visactor/vdataset';\nimport { hierarchyDimensionStatistics } from '../../data/transforms/hierarchy-dimension-statistics';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { TreemapTooltipHelper } from './tooltip-helper';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { TransformSpec } from '@visactor/vgrammar-core';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerRectMark } from '../../mark/rect';\nimport { registerTextMark } from '../../mark/text';\nimport { treemapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerTreemapAnimation } from './animation';\nimport { TreemapSeriesSpecTransformer } from './treemap-transform';\nimport { registerFilterTransform, registerMapTransform } from '@visactor/vgrammar-core';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class TreemapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.treemap;\n type = SeriesTypeEnum.treemap;\n\n static readonly mark: SeriesMarkMap = treemapSeriesMark;\n\n static readonly transformerConstructor = TreemapSeriesSpecTransformer;\n readonly transformerConstructor = TreemapSeriesSpecTransformer;\n\n private _leafMark: IRectMark;\n private _nonLeafMark: IRectMark;\n private _labelMark: ILabelMark;\n private _nonLeafLabelMark: ILabelMark;\n\n protected declare _spec: ITreemapSeriesSpec;\n\n protected _categoryField: string = 'name';\n\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField: string = 'value';\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n private _maxDepth: number;\n\n // global scale and translate matrix\n private _matrix: Matrix;\n\n // range for treemap layout, change while zoom and pan\n private _viewBox: IBounds = new Bounds();\n\n private _enableAnimationHook = this.enableMarkAnimation.bind(this);\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n this._matrix = new Matrix();\n }\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? this._categoryField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n if (isValidNumber(this._spec.maxDepth)) {\n this._maxDepth = this._spec.maxDepth - 1;\n }\n }\n\n initData() {\n super.initData();\n // 矩形树图中原始数据为层次结果,图元数据为平坦化后的结构,具体逻辑如下:\n if (this.getViewData()) {\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n }\n }\n\n compile(): void {\n super.compile();\n this._runTreemapTransform();\n }\n\n protected _runTreemapTransform(render = false) {\n const viewDataProduct = this._data.getProduct();\n if (viewDataProduct) {\n viewDataProduct.transform([\n {\n type: 'treemap',\n nameField: this._categoryField,\n valueField: this._valueField,\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2,\n maxDepth: this._maxDepth,\n gapWidth: this._spec.gapWidth,\n padding: this._spec.nodePadding,\n splitType: this._spec.splitType,\n aspectRatio: this._spec.aspectRatio,\n labelPadding: this._spec.nonLeafLabel?.visible ? this._spec.nonLeafLabel?.padding : 0,\n labelPosition: this._spec.nonLeafLabel?.position,\n minVisibleArea: this._spec.minVisibleArea ?? 10,\n minChildrenVisibleArea: this._spec.minChildrenVisibleArea,\n minChildrenVisibleSize: this._spec.minChildrenVisibleSize,\n flatten: true\n },\n {\n type: 'map',\n callback: (datum: TreemapNodeElement) => {\n if (datum) {\n [DEFAULT_HIERARCHY_ROOT, 'name'].forEach(key => {\n datum[key] = datum.datum[datum.depth][this._categoryField];\n });\n }\n return datum;\n }\n }\n ]);\n }\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n }\n // rawDataStatistic 需要统计 addHierarchyDataKey 的一些字段,所以必须要运行一下\n // false\n );\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n // overwrite the getRawDataStatisticsByField of base-series\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n if (this._rawData) {\n const result = hierarchyDimensionStatistics([this._rawData], {\n fields: [{ key: field, operations: isNumeric ? ['min', 'max'] : ['values'] }]\n })[field];\n this._rawStatisticsCache[field] = merge(this._rawStatisticsCache[field] ?? {}, result);\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n protected _createHierarchyDataStatistics(dataName: string, rawData: DataView[]) {\n registerDataSetInstanceTransform(this._dataSet, 'hierarchyDimensionStatistics', hierarchyDimensionStatistics);\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse(rawData, {\n type: 'dataview'\n });\n data.transform(\n {\n type: 'hierarchyDimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField && this._seriesField !== this._categoryField) {\n fields.push({\n key: this._seriesField,\n operations: ['values']\n });\n }\n return fields;\n }\n }\n },\n false\n );\n return data;\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n initMark() {\n const nonLeafMark = this._createMark(\n TreemapSeries.mark.nonLeaf,\n {\n isSeriesMark: true,\n stateSort: this._spec.nonLeaf?.stateSort\n },\n {\n setCustomizedShape: this._spec.nonLeaf?.customShape\n }\n );\n if (nonLeafMark) {\n nonLeafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'nonLeaf');\n }\n } as TransformSpec\n ]);\n this._nonLeafMark = nonLeafMark;\n }\n\n const leafMark = this._createMark(\n TreemapSeries.mark.leaf,\n {\n isSeriesMark: true,\n stateSort: this._spec.leaf?.stateSort\n },\n {\n setCustomizedShape: this._spec.leaf?.customShape\n }\n );\n if (leafMark) {\n leafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'leaf');\n }\n } as TransformSpec\n ]);\n this._leafMark = leafMark;\n }\n }\n\n initMarkStyle() {\n this._initLeafMarkStyle();\n this._initNonLeafMarkStyle();\n }\n\n protected _initLeafMarkStyle() {\n if (!this._leafMark) {\n return;\n }\n\n this.setMarkStyle(\n this._leafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initNonLeafMarkStyle() {\n if (!this._nonLeafMark) {\n return;\n }\n this.setMarkStyle(\n this._nonLeafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n _initRichStyleOfLabelMark(labelMark: ILabelMark) {\n if (labelMark.getTextType() === 'rich') {\n this.setMarkStyle(\n labelMark,\n {\n maxWidth: datum => Math.abs(datum.x0 - datum.x1),\n maxHeight: datum => Math.abs(datum.y0 - datum.y1),\n ellipsis: true\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum.x0 + datum.x1) / 2,\n y: datum => (datum.y0 + datum.y1) / 2,\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: Datum) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this._initRichStyleOfLabelMark(labelMark);\n }\n\n protected initNonLeafLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._nonLeafLabelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.x0 + datum.labelRect.x1) / 2;\n }\n return (datum.x0 + datum.x1) / 2;\n },\n y: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.y0 + datum.labelRect.y1) / 2;\n }\n return (datum.y0 + datum.y1) / 2;\n },\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: any) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this._initRichStyleOfLabelMark(labelMark);\n }\n\n initAnimation(): void {\n this.getMarksInType(MarkTypeEnum.rect).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('treemap')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n protected initEvent(): void {\n super.initEvent();\n // Roam\n if (this._spec.roam) {\n // 拖拽事件\n (this as unknown as IZoomable).initDragEventOfSeries(this);\n this.event.on('panmove', e => {\n this.handlePan(e as PanEventParam);\n });\n // 缩放事件\n (this as unknown as IZoomable).initZoomEventOfSeries(this);\n this.event.on('zoom', e => {\n this.handleZoom(e as ZoomEventParam);\n });\n }\n // Drill\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n protected _getDataIdKey() {\n return 'key';\n }\n\n protected initTooltip() {\n this._tooltipHelper = new TreemapTooltipHelper(this);\n this._leafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._leafMark);\n this._nonLeafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nonLeafMark);\n }\n\n private _shouldFilterElement(datum: TreemapNodeElement, nodeType: 'leaf' | 'nonLeaf') {\n const isLeaf = datum.isLeaf;\n // 过滤掉非需要的节点\n return nodeType === 'leaf' ? !isLeaf : isLeaf;\n }\n\n handlePan(event: PanEventParam) {\n const { delta } = event;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n this._matrix.reset();\n this._matrix.translate(delta[0], delta[1]);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n\n this._viewBox.transformWithMatrix(this._matrix);\n\n this._runTreemapTransform(true);\n }\n\n handleZoom(event: ZoomEventParam) {\n const { scale, scaleCenter } = event;\n if (scale === 1) {\n return;\n }\n\n this._matrix.reset();\n const { x, y } = scaleCenter;\n this._matrix.translate(x, y);\n this._matrix.scale(scale, scale);\n this._matrix.translate(-x, -y);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n // 缩放过程中会有新增/减少的element,对应执行enter/exit动画,会使得缩放交互效果体验很差\n // 这里在缩放过程中先关闭所有动画\n this.disableMarkAnimation();\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n this._viewBox.transformWithMatrix(this._matrix);\n this._runTreemapTransform(true);\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this.getLayoutRect().width, this.getLayoutRect().height);\n this._runTreemapTransform();\n }\n\n protected enableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.enable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().enableAnimation();\n }\n });\n // 在所有动画执行之后关闭动画\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n }\n\n protected disableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.disable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().disableAnimation();\n }\n });\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._nonLeafMark, this._leafMark];\n }\n\n isHierarchyData = () => {\n return true;\n };\n\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(TreemapSeries, Drillable);\nmixin(TreemapSeries, Zoomable);\n\nexport const registerTreemapSeries = () => {\n registerFilterTransform();\n registerMapTransform();\n registerRectMark();\n registerTextMark();\n registerTreemapAnimation();\n registerFadeInOutAnimation();\n registerTreemapTransforms();\n Factory.registerSeries(TreemapSeries.type, TreemapSeries);\n};\n","import type { AdaptiveSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ITreemapChartSpec } from './interface';\n\nexport class TreemapChartSpecTransformer<\n T extends ITreemapChartSpec = ITreemapChartSpec\n> extends BaseChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'aspectRatio',\n 'splitType',\n 'maxDepth',\n 'gapWidth',\n 'nodePadding',\n 'minVisibleArea',\n 'minChildrenVisibleArea',\n 'minChildrenVisibleSize',\n 'roam',\n 'drill',\n 'drillField',\n 'leaf',\n 'nonLeaf',\n 'nonLeafLabel'\n ]);\n return series;\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ITreemapChartSpec } from './interface';\nimport { registerTreemapSeries } from '../../series/treemap/treemap';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { TreemapChartSpecTransformer } from './treemap-transformer';\n\nexport class TreemapChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.treemap;\n static readonly seriesType: string = SeriesTypeEnum.treemap;\n static readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.treemap;\n readonly seriesType: string = SeriesTypeEnum.treemap;\n}\n\nexport const registerTreemapChart = () => {\n registerTreemapSeries();\n Factory.registerChart(TreemapChart.type, TreemapChart);\n};\n","import { isNil, precisionAdd, precisionSub } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IWaterfallSeriesSpec,\n IWaterfallTotalCustom,\n IWaterfallTotalField\n} from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { warn } from '../../util/debug';\nimport { STACK_FIELD_TOTAL_TOP } from '../../constant/data';\n\ntype TotalInfo = {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n};\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, total: totalSpec, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n // 上一次的计算结果\n let temp: { start: number; end: number; lastIndex: string; positive: number; negative: number } = {\n start: 0,\n end: 0,\n positive: 0,\n negative: 0,\n lastIndex: null\n };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false,\n positive: temp.end,\n negative: temp.end\n };\n\n const indexData = dimensionData[key];\n indexData?.forEach((d, i) => {\n if (i === indexData.length - 1) {\n d[STACK_FIELD_TOTAL_TOP] = true;\n } else {\n delete d[STACK_FIELD_TOTAL_TOP];\n }\n });\n // 1.9.5 新增能力\n // 当前 key 对应的数据中有一个总计数据,并且还有其他的分组数据时。总计的计算逻辑需要将总计值拆分\n if (indexData.length > 1) {\n const isTotalCheck = (d: Datum) => {\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n return true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n return !!tag;\n }\n return false;\n };\n const isTotalTag = indexData.some(d => isTotalCheck(d));\n if (isTotalTag) {\n temp = computeTotalWithMultipleData(\n indexData,\n key,\n total,\n totalData,\n temp,\n indexValues,\n index,\n op,\n isTotalCheck\n );\n totalData.push(total);\n return;\n }\n }\n temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op);\n totalData.push(total);\n });\n return totalData;\n};\n\nfunction computeTotalWithMultipleData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt,\n isTotalCheck: (d: Datum) => boolean\n) {\n total.isTotal = true;\n const { valueField, startAs, endAs, total: totalSpec } = op;\n // 先将数据分为总计数据与常规数据\n const _normalTemp: Datum[] = [];\n const _totalTemp: Datum[] = [];\n indexData.forEach(d => {\n if (isTotalCheck(d)) {\n _totalTemp.push(d);\n } else {\n _normalTemp.push(d);\n }\n });\n // 1. 不可能全都不是总计数据\n // 2. 如果全都是总计数据,让它们都是同一个值\n if (_totalTemp.length === indexData.length) {\n const result = computeNormalData([indexData[0]], key, total, totalData, temp, indexValues, index, op);\n _totalTemp.forEach(d => {\n d[startAs] = indexData[0][startAs];\n d[endAs] = indexData[0][endAs];\n d[valueField] = indexData[0][valueField];\n });\n return result;\n }\n\n // 3. 其他常规情况\n // 先获取当前的起始值/结束值应当是多少\n // 按照第一个总计数据的配置来决定\n const totalConfigData = _totalTemp[0];\n // eslint-disable-next-line prefer-const\n let { start, end } = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);\n total.start = start;\n total.end = end;\n let positive = start;\n let navigate = start;\n // 当前剩余的总计值\n let valueTemp = end - start;\n // 将非总计数据进行堆叠\n _normalTemp.forEach(d => {\n const value = +d[valueField];\n if (value >= 0) {\n d[startAs] = +positive;\n positive = precisionAdd(positive, value);\n } else {\n d[startAs] = +navigate;\n navigate = precisionAdd(navigate, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n start = precisionAdd(start, value);\n valueTemp = precisionSub(valueTemp, value);\n });\n // 现在的start end 就是 total 的\n _totalTemp.forEach(d => {\n d[startAs] = +start;\n d[endAs] = precisionAdd(d[startAs], valueTemp);\n d[valueField] = valueTemp;\n });\n return { ...total, lastIndex: key };\n}\n\nfunction computeNormalData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt\n) {\n const { valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName } = op;\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n const { start, end } = getTotalStartEnd(d, total, totalData, temp, totalSpec);\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n if (!isTotalTag) {\n const value = +d[valueField];\n // 区分正负值\n if (value >= 0) {\n d[startAs] = +total.positive;\n total.positive = precisionAdd(total.positive, value);\n } else {\n d[startAs] = +total.negative;\n total.negative = precisionAdd(total.negative, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n total.end = precisionAdd(total.end, value);\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n return { ...total, lastIndex: key };\n}\n\nfunction getTotalStartEnd(\n d: Datum,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n if (!totalSpec || totalSpec.type === 'end') {\n return getTotalInEndType(total);\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n if (totalSpec.type === 'custom') {\n return getTotalInCustomType(d, temp, totalSpec);\n }\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n return getTotalInCollectField(d, totalData, total, totalSpec);\n }\n return getTotalInField(d, total, totalSpec);\n }\n return { start: 0, end: 0 };\n}\n\nfunction getTotalInEndType(total: TotalInfo) {\n return { start: 0, end: total.end };\n}\n\nfunction getTotalInCustomType(\n d: Datum,\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n return (totalSpec).product(d, temp);\n}\n\nfunction getTotalInCollectField(d: Datum, totalData: TotalInfo[], total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n return { start, end };\n}\n\nfunction getTotalInField(d: Datum, total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n return { start, end };\n}\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { IBarAnimationParams, BarAppearPreset } from '../bar/interface';\nimport { barGrowIn, barGrowOut } from '../bar/animation';\nimport { Factory } from '../../core/factory';\nimport type { WaterfallAppearPreset } from './interface';\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function waterfallPresetAnimation(\n params: IBarAnimationParams,\n preset: WaterfallAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params, false);\n }\n}\n\nexport const registerWaterfallAnimation = () => {\n Factory.registerAnimation('waterfall', (params: IBarAnimationParams, preset: WaterfallAppearPreset) => {\n return {\n appear: waterfallPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params, false)\n };\n });\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\n\nexport interface IDimensionTreeOpt {\n fields: string[];\n}\n\nexport const dimensionTree = (data: Array, op: IDimensionTreeOpt) => {\n if (!op.fields) {\n return data;\n }\n const dataCollect = data\n .map(d => {\n return d.latestData;\n })\n .flat();\n const dimensionValues = {};\n return {\n dimensionValues,\n dimensionData: groups(dataCollect, op.fields, dimensionValues)\n };\n};\n\nfunction groups(data: Datum[], fields: string[], dimensionValues: object): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n dimensionValues[first] = new Set();\n\n const grouped = groupBy(data, first, dimensionValues[first]);\n if (_rest.length) {\n return mapValues(grouped, (value, key) => {\n return groups(value, _rest, dimensionValues);\n });\n }\n\n return grouped;\n}\n\nfunction groupBy(data: Datum[], field: string, set: Set) {\n const groups = {};\n\n data.forEach(d => {\n const key = d[field];\n if (!groups[key]) {\n groups[key] = [];\n set.add(key);\n }\n groups[key].push(d);\n });\n return groups;\n}\n\nexport function mapValues(target: object, fn: (value: any, key: string) => any) {\n return Object.keys(target).reduce((result, key) => {\n result[key] = fn(target[key], key);\n return result;\n }, {});\n}\n\nexport function findDataInFields(data: any, fields: string[]): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n if (data[first] === undefined) {\n return undefined;\n }\n return findDataInFields(data[first], _rest);\n}\n\n/**\n *\n const data = [\n { type: \"circle\", color: \"red\", x: 10, y:100 },\n { type: \"circle\", color: \"blue\", x: 10, y:100 },\n { type: \"rect\", color: \"red\", x: 10, y:100 },\n { type: \"rect\", color: \"blue\", x: 10, y:100 },\n ]\n\n groups(data, [\"circle\", \"color\"])\n\n =====>\n {\n circle: {\n red:[{ type: \"circle\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"circle\", color: \"blue\", x: 10, y:100 }]\n },\n rect:{\n red:[{ type: \"rect\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"rect\", color: \"blue\", x: 10, y:100 }]\n }\n }\n */\n","import { DataSet, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { dimensionTree } from '../../data/transforms/dimension-data';\nimport type { IGroup } from '../../typings';\n\nexport class Group implements IGroup {\n protected _fields: string[] = [];\n get fields() {\n return this._fields;\n }\n\n protected _groupData?: DataView;\n get groupData() {\n return this._groupData;\n }\n\n constructor(fields: string[]) {\n this._fields = fields;\n }\n\n initData(viewData: DataView, dataSet: DataSet) {\n const dataName = viewData.name;\n const groupData = new DataView(dataSet instanceof DataSet ? dataSet : viewData.dataSet);\n groupData.name = dataName;\n groupData.parse([viewData], {\n type: 'dataview'\n });\n registerDataSetInstanceTransform(dataSet, 'dimensionTree', dimensionTree);\n groupData.transform(\n {\n type: 'dimensionTree',\n options: {\n fields: this._fields\n }\n },\n false\n );\n groupData.target.addListener('change', this.groupDataUpdate.bind(this));\n this._groupData = groupData;\n }\n\n groupDataUpdate() {\n // do nothing\n }\n\n getGroupValueInField(field: string) {\n const values = this.groupData?.latestData?.dimensionValues?.[field];\n return values ? Array.from(values) : [];\n }\n}\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IWaterfallSeriesSpec, IWaterfallSeriesTheme } from './interface';\n\nexport class WaterfallSeriesSpecTransformer<\n T extends IWaterfallSeriesSpec = IWaterfallSeriesSpec,\n K extends IWaterfallSeriesTheme = IWaterfallSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar, 'stackLabel', 'initStackLabelMarkStyle' as any);\n }\n}\n","import type { WaterfallSeries } from './../../series/waterfall/waterfall';\nimport type { Datum } from '../../typings/common';\nimport { Direction } from '../../typings/space';\nimport type { BaseLabelAttrs, LabelItem, OverlapAttrs, Strategy } from '@visactor/vrender-components';\nimport { SeriesTypeEnum, type ICartesianSeries } from '../../series/interface';\nimport { isBoolean, isFunction, isObject, isString } from '@visactor/vutils';\nimport { createText } from '@visactor/vrender-core';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { ILabelInfo, ILabelSpec } from './interface';\nimport { getFormatFunction } from '../util';\n\nexport const labelRuleMap = {\n rect: barLabel,\n symbol: symbolLabel,\n arc: pieLabel,\n point: pointLabel,\n 'line-data': lineDataLabel,\n stackLabel: stackLabel,\n line: LineLabel,\n area: LineLabel,\n rect3d: barLabel,\n arc3d: pieLabel,\n treemap: treemapLabel,\n venn: vennLabel\n};\n\nexport function defaultLabelConfig(rule: string, labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n if (labelSpec.overlap && !isObject(labelSpec.overlap)) {\n labelSpec.overlap = {};\n }\n const processor = labelRuleMap[rule] ?? labelRuleMap.point;\n\n if (labelInfo.series.type === SeriesTypeEnum.sankey) {\n return sankeyLabel(labelInfo);\n }\n return processor(labelInfo);\n}\n\nexport function textAttribute(\n labelInfo: ILabelInfo,\n datum: Datum,\n formatMethod?: ILabelSpec['formatMethod'],\n formatter?: ILabelSpec['formatter']\n) {\n const { labelMark, series } = labelInfo;\n const field = series.getMeasureField()[0];\n const textAttribute = { text: datum[field], data: datum, textType: labelInfo.labelSpec.textType ?? 'text' } as any;\n\n const attributes = Object.keys(labelMark.stateStyle.normal);\n\n for (const key of attributes) {\n const attr = labelMark.getAttribute(key as any, datum);\n textAttribute[key] = attr;\n }\n\n if (series.type !== SeriesTypeEnum.sankey) {\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, textAttribute.text, datum);\n if (formatFunc) {\n textAttribute._originText = textAttribute.text;\n textAttribute.text = formatFunc(...args, { series });\n }\n }\n\n return textAttribute;\n}\n\nfunction uniformLabelPosition(position?: ILabelSpec['position']) {\n if (isFunction(position)) {\n return (datum: Datum) => {\n return position(datum.data);\n };\n }\n return position;\n}\n\n/**\n * symbol 图元标签规则。\n */\nexport function symbolLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec } = labelInfo;\n\n // encode position config\n const defaultPosition = (series as ICartesianSeries).direction === 'horizontal' ? 'right' : 'top';\n const position = uniformLabelPosition(labelSpec.position) ?? defaultPosition;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? symbolLabelOverlapStrategy(),\n avoidBaseMark: position !== 'center'\n };\n }\n\n return { position, overlap };\n}\n\nexport function lineDataLabel(labelInfo: ILabelInfo) {\n const result = symbolLabel(labelInfo);\n if (!isBoolean(result.overlap)) {\n result.overlap.avoidBaseMark = false;\n }\n return result;\n}\n\nfunction symbolLabelOverlapStrategy() {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: ['top', 'bottom', 'right', 'left', 'top-right', 'top-left', 'bottom-left', 'bottom-right']\n }\n ];\n\n return strategy;\n}\n\n/**\n *\n */\nexport function barLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec = {} as ILabelSpec } = labelInfo;\n\n // encode position config\n const originPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const direction = (series as ICartesianSeries).direction ?? 'vertical';\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n\n let position = originPosition as BaseLabelAttrs['position'];\n\n position = (datum: Datum) => {\n const { data } = datum;\n\n const labelPosition =\n (typeof labelSpec.position === 'function'\n ? (labelSpec.position as (a: Datum) => string)(data)\n : labelSpec.position) ?? 'outside';\n\n if (labelPosition === 'outside') {\n const dataField = series.getMeasureField()[0];\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = (data?.[dataField] >= 0 && isInverse) || (data?.[dataField] < 0 && !isInverse) ? 1 : 0;\n return positionMap[direction][index];\n }\n\n return labelPosition;\n };\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? barLabelOverlapStrategy(series as ICartesianSeries)\n };\n }\n\n // encode smartInvert\n let smartInvert = false;\n if (isString(originPosition) && originPosition.includes('inside')) {\n smartInvert = true;\n }\n\n return { position, overlap, smartInvert };\n}\n\nfunction barLabelOverlapStrategy(series: ICartesianSeries) {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: (data: any) => {\n const { data: datum } = data;\n const dataField = series.getMeasureField()[0];\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n if (isInverse) {\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n }\n ];\n\n return strategy;\n}\n\n/**\n * 无关图元,指定x/y坐标的标签配置规则\n */\nexport function pointLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n avoidBaseMark: false\n };\n }\n\n return { position: 'center', overlap };\n}\n\n/**\n * pie 图元标签配置规则\n */\n\nexport function pieLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n // encode position config\n const labelPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const position = labelPosition as BaseLabelAttrs['position'];\n\n // encode smartInvert\n let smartInvert;\n if (labelSpec.smartInvert) {\n smartInvert = labelSpec.smartInvert;\n } else {\n smartInvert = isString(labelPosition) && labelPosition.includes('inside');\n }\n\n return { position, smartInvert };\n}\n\n/**\n * 瀑布图堆积标签配置规则\n */\n\nexport function stackLabelX(datum2: Datum, series: WaterfallSeries, pos: string, offset: number) {\n if (series.direction === Direction.horizontal) {\n if (pos === 'middle') {\n return (series.totalPositionX(datum2, 'end') + series.totalPositionY(datum2, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionX(datum2, datum2.end >= datum2.start ? 'end' : 'start') + offset;\n } else if (pos === 'min') {\n return series.totalPositionX(datum2, datum2.end >= datum2.start ? 'start' : 'end') - offset;\n }\n return series.totalPositionX(datum2, 'end') + (datum2.end >= datum2.start ? offset : -offset);\n }\n return series.totalPositionX(datum2, 'index', 0.5);\n}\nexport function stackLabelY(datum2: Datum, series: WaterfallSeries, pos: string, offset: number) {\n if (series.direction === Direction.horizontal) {\n return series.totalPositionY(datum2, 'index', 0.5);\n }\n if (pos === 'middle') {\n return (series.totalPositionY(datum2, 'end') + series.totalPositionY(datum2, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionY(datum2, datum2.end >= datum2.start ? 'end' : 'start') - offset;\n } else if (pos === 'min') {\n return series.totalPositionY(datum2, datum2.end >= datum2.start ? 'start' : 'end') + offset;\n }\n return series.totalPositionY(datum2, 'end') + (datum2.end >= datum2.start ? -offset : offset);\n}\n\nexport function stackLabel(\n labelInfo: ILabelInfo,\n datumTransform?: (data: any) => any,\n attributeTransform?: (label: LabelItem, datum: Datum, att: any) => any\n) {\n const series = labelInfo.series as WaterfallSeries;\n const labelSpec = labelInfo.labelSpec || ({} as IWaterfallSeriesSpec['stackLabel']);\n const totalData = series.getTotalData();\n return {\n customLayoutFunc: (labels: LabelItem[]) => {\n return labels.map(label => {\n const pos = labelSpec.position || 'withChange';\n const offset = labelSpec.offset || 0;\n\n const datum = datumTransform ? datumTransform(label.data) : label.data;\n const attribute = textAttribute(labelInfo, datum, labelSpec.formatMethod);\n\n attribute.x = stackLabelX(datum, series, pos, offset);\n attribute.y = stackLabelY(datum, series, pos, offset);\n if (series.direction === Direction.horizontal) {\n attribute.textAlign =\n pos === 'middle'\n ? 'center'\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'left'\n : 'right';\n } else {\n attribute.textBaseline =\n pos === 'middle'\n ? pos\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'bottom'\n : 'top';\n }\n attributeTransform?.(label, datum, attribute);\n return createText({ ...attribute, id: label.id });\n });\n },\n dataFilter: (labels: LabelItem[]) => {\n const result: LabelItem[] = [];\n totalData.forEach((total: any) => {\n const label = labels.find(labelItem => {\n return total.index === labelItem.data?.[series.getDimensionField()[0]];\n });\n if (label) {\n label.data = total;\n result.push(label);\n }\n });\n return result;\n },\n overlap: {\n strategy: [] as any\n }\n };\n}\n\n/**\n * treemap 非叶子节点标签配置规则\n */\nexport function treemapLabel(labelInfo: ILabelInfo) {\n return {\n customLayoutFunc: (labels: LabelItem[], text: any) => text,\n overlap: false\n };\n}\n\n/**\n * venn 标签配置规则\n */\nexport function vennLabel(labelInfo: ILabelInfo) {\n return {\n customLayoutFunc: (labels: LabelItem[], text: any) => text,\n smartInvert: true\n };\n}\n\n/**\n * line 图元标签\n */\n\nexport function LineLabel(labelInfo: ILabelInfo) {\n const { labelSpec, series } = labelInfo;\n\n const seriesData = series.getViewDataStatistics?.().latestData?.[series.getSeriesField()]?.values;\n const data = seriesData ? seriesData.map((d: Datum, index: number) => ({ [series.getSeriesField()]: d, index })) : [];\n return { position: labelSpec.position ?? 'end', data };\n}\n\nexport function sankeyLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec = {} as ILabelSpec } = labelInfo;\n // encode position config\n const originPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const direction = (series as ICartesianSeries).direction;\n let position = originPosition as BaseLabelAttrs['position'];\n\n if (isString(originPosition)) {\n if (direction === 'vertical') {\n if (originPosition === 'inside-start') {\n position = (datum: Datum) => {\n return 'inside-left';\n };\n } else if (originPosition === 'inside-middle') {\n position = (datum: Datum) => {\n return 'center';\n };\n } else if (originPosition === 'inside-end') {\n position = (datum: Datum) => {\n return 'inside-right';\n };\n } else {\n position = (datum: Datum) => {\n return 'bottom';\n };\n }\n } else {\n if (originPosition === 'inside-start') {\n position = (datum: Datum) => {\n return 'inside-left';\n };\n } else if (originPosition === 'inside-middle') {\n position = (datum: Datum) => {\n return 'center';\n };\n } else if (originPosition === 'inside-end') {\n position = (datum: Datum) => {\n return 'inside-right';\n };\n } else if (originPosition === 'outside') {\n position = (datum: Datum) => {\n return 'right';\n };\n }\n }\n }\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap =\n isString(originPosition) && originPosition.includes('inside')\n ? false\n : {\n strategy:\n (labelSpec.overlap as OverlapAttrs)?.strategy ?? sankeyLabelOverlapStrategy(series as ICartesianSeries)\n };\n }\n\n return {\n position,\n overlap,\n smartInvert: false,\n offset: 0,\n syncState: true\n };\n}\n\nfunction sankeyLabelOverlapStrategy(series: ICartesianSeries) {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: (data: any) => {\n return series.direction === 'horizontal' ? ['right', 'left'] : ['bottom', 'top'];\n }\n }\n ];\n\n return strategy;\n}\n","/* eslint-disable no-duplicate-imports */\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../constant/data';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { valueInScaleRange } from '../../util/scale';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec, WaterfallAppearPreset } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { ITransformOptions, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { stackLabel } from '../../component/label/util';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { PREFIX } from '../../constant/base';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport type { IBarAnimationParams } from '../bar/interface';\nimport type { ILabelInfo } from '../../component/label/interface';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class WaterfallSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.waterfall;\n type = SeriesTypeEnum.waterfall;\n\n static readonly mark: SeriesMarkMap = waterfallSeriesMark;\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: SeriesData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n protected declare _spec: T;\n\n protected _leaderLineMark: IRuleMark = null;\n protected _stackLabelMark: ITextMark = null;\n protected _labelMark: ITextMark = null;\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = new Group(groupFields);\n this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // waterfall data stack data\n this.setValueFieldToStack();\n // 不支持多维度;\n this._fieldX = [this._fieldX[0]];\n this._fieldY = [this._fieldY[0]];\n if (isNil(this._seriesField)) {\n this._seriesField = WaterfallDefaultSeriesField;\n }\n }\n\n getSeriesKeys(): string[] {\n if (this._seriesField === WaterfallDefaultSeriesField) {\n return [\n this._theme.seriesFieldName.increase,\n this._theme.seriesFieldName.decrease,\n this._theme.seriesFieldName.total\n ];\n }\n return super.getSeriesKeys();\n }\n\n protected initData(): void {\n super.initData();\n registerDataSetInstanceTransform(this._dataSet, 'waterfallFillTotal', waterfallFillTotal);\n registerDataSetInstanceTransform(this._dataSet, 'waterfall', waterfall);\n // 如果要在最后添加总计\n if (isNil(this._spec.total) || this._spec.total.type === 'end') {\n this._rawData?.transform(\n {\n type: 'waterfallFillTotal',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n total: this._spec.total\n }\n },\n false\n );\n }\n // 总计数据\n const totalData = dataViewFromDataView(this.getViewData(), this._dataSet, {\n name: `${PREFIX}_series_${this.id}_totalData`\n });\n this.getViewData().target.removeListener('change', totalData.reRunAllTransform);\n this._totalData = new SeriesData(this._option, totalData);\n totalData.transform(\n {\n type: 'waterfall',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n startAs: STACK_FIELD_START,\n endAs: STACK_FIELD_END,\n total: this._spec.total,\n groupData: () => this.getGroups().groupData\n }\n },\n false\n );\n }\n\n compileData() {\n super.compileData();\n this._totalData?.compile();\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const waterfallAnimationParams: IBarAnimationParams = {\n yField: this.direction === 'horizontal' ? this._fieldY[0] : this.getStackValueField(),\n xField: this.direction === 'horizontal' ? this.getStackValueField() : this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('waterfall')?.(waterfallAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._leaderLineMark) {\n this._leaderLineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.leaderLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n viewDataUpdate(d: DataView): void {\n this._totalData.getDataView().reRunAllTransform();\n this._totalData.updateData();\n super.viewDataUpdate(d);\n }\n /**\n * data\n */\n // waterfall 不支持任何的 data filter\n addViewDataFilter(_option: ITransformOptions) {\n // do nothing\n }\n reFilterViewData() {\n // do nothing\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n this._totalData.updateData();\n }\n\n initMark(): void {\n super.initMark();\n const leaderLine = this._createMark(\n WaterfallSeries.mark.leaderLine,\n {\n key: 'index',\n stateSort: this._spec.leaderLine?.stateSort\n },\n {\n setCustomizedShape: this._spec.leaderLine?.customShape\n }\n ) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n\n if (!this._labelMark && this._spec.label?.visible) {\n super.initLabelMarkStyle(labelMark);\n this._labelMark = labelMark;\n return;\n }\n }\n\n initStackLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n return this._spec.stackLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n // 样式设置在这里的原因是执行顺序的问题\n // 首先执行这里的 mark.style\n // 然后执行用户的 formatMethod\n // 最后执行下方的 getTotalLabelComponentStyle 。如果在下方实现值函数,就会导致用户format无法生效\n initTotalLabelMarkStyle(labelMark: ILabelMark) {\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n if (!('end' in datum)) {\n return this.direction === Direction.horizontal ? datum[this._fieldX[0]] : datum[this._fieldY[0]];\n }\n return this._spec.totalLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n getTotalLabelComponentStyle(info: Pick) {\n return stackLabel(\n {\n ...info,\n series: this,\n // @ts-ignore\n labelSpec: this._spec.totalLabel\n },\n d => {\n const index = this.direction === Direction.vertical ? d[this._fieldX[0]] : d[this._fieldY[0]];\n return this._totalData.getLatestData().find((_d: Datum) => _d.index === index);\n }\n );\n }\n\n totalPositionX(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._xAxisHelper;\n if (this._direction === Direction.horizontal) {\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('width', datum) as number) * (0.5 - pos)\n );\n }\n\n totalPositionY(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n if (this._direction === Direction.horizontal) {\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('height', datum) as number) * (0.5 - pos)\n );\n }\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => this.totalPositionX(datum, 'lastEnd', 0),\n x1: (datum: Datum) => this.totalPositionX(datum, datum.isTotal ? 'end' : 'start', 0),\n y: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionY(datum, 'lastIndex', 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', 0),\n y: (datum: Datum) => this.totalPositionY(datum, 'lastEnd', 0),\n y1: (datum: Datum) => this.totalPositionY(datum, datum.isTotal ? 'end' : 'start', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n","import { array } from '@visactor/vutils';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BarChartSpecTransformer } from '../bar';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IWaterfallChartSpec } from './interface';\n\nexport class WaterfallChartSpecTransformer<\n T extends IWaterfallChartSpec = IWaterfallChartSpec\n> extends BarChartSpecTransformer> {\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.legends) {\n array(spec.legends).forEach((l: any) => {\n l.select = false;\n l.hover = false;\n l.filter = false;\n });\n }\n\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.bar = spec.bar;\n series.stackLabel = spec.stackLabel;\n series.leaderLine = spec.leaderLine;\n series.total = spec.total;\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BarChart } from '../bar';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IWaterfallChartSpec } from './interface';\nimport { registerWaterfallSeries } from '../../series/waterfall/waterfall';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { WaterfallChartSpecTransformer } from './waterfall-transformer';\n\nexport class WaterfallChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.waterfall;\n static readonly seriesType: string = SeriesTypeEnum.waterfall;\n static readonly transformerConstructor = WaterfallChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WaterfallChartSpecTransformer;\n readonly type: string = ChartTypeEnum.waterfall;\n readonly seriesType: string = SeriesTypeEnum.waterfall;\n}\n\nexport const registerWaterfallChart = () => {\n registerWaterfallSeries();\n Factory.registerChart(WaterfallChart.type, WaterfallChart);\n};\n","import { PREFIX } from './base';\n\nexport const BOX_PLOT_OUTLIER_VALUE_FIELD = `${PREFIX}_BOX_PLOT_OUTLIER_VALUE`;\n\nexport enum BOX_PLOT_TOOLTIP_KEYS {\n OUTLIER = 'outlier',\n MAX = 'max',\n MIN = 'min',\n MEDIAN = 'median',\n Q1 = 'q1',\n Q3 = 'q3',\n SERIES_FIELD = 'seriesField'\n}\n","import { isArray } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport type { Datum } from '../../typings';\n\nexport interface IBoxPlotOutlierOpt {\n dimensionField: string[];\n outliersField: string;\n}\n/**\n * 将箱型图outlier数组展平\n * @param data\n * @param options\n * @returns\n */\nexport const foldOutlierData = (data: Array, op: IBoxPlotOutlierOpt) => {\n const result: any = [];\n const { outliersField, dimensionField } = op;\n const latestData = (data[0] as any).latestData || [];\n latestData.forEach((d: Datum) => {\n let outlierValues = d[outliersField];\n if (!isArray(outlierValues)) {\n outlierValues = [outlierValues];\n }\n result.push(\n ...outlierValues.map((v: any) => {\n const resData = {\n [BOX_PLOT_OUTLIER_VALUE_FIELD]: v\n };\n dimensionField.forEach(field => {\n resData[field] = d[field];\n });\n return resData;\n })\n );\n });\n return result;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum, ITooltipLinePattern, TooltipActiveType } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD, BOX_PLOT_TOOLTIP_KEYS } from '../../constant/box-plot';\nimport type { BoxPlotSeries } from './box-plot';\n\nexport class BoxPlotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n protected getDefaultContentList(activeType: TooltipActiveType): ITooltipLinePattern[] {\n return [\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n shapeType: this.shapeTypeCallback,\n shapeColor: this.getOutlierFillColor,\n shapeStroke: this.getOutlierFillColor\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MAX),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MAX)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q3),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q3)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MEDIAN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MEDIAN)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q1),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q1)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MIN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MIN)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD)\n }\n ];\n }\n getContentKey = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return (this.series as BoxPlotSeries).getOutliersField();\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return minField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return maxField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return medianField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return q1Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return q3Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n }\n\n return null;\n };\n\n getContentValue = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return datum[BOX_PLOT_OUTLIER_VALUE_FIELD];\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return datum[minField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return datum[maxField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return datum[medianField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return datum[q1Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return datum[q3Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n }\n\n return null;\n };\n shapeColorCallback = (datum: Datum) => {\n const shaftShape = (this.series as BoxPlotSeries).getShaftShape();\n return shaftShape === 'line'\n ? (this.series.getMarkInName('boxPlot').getAttribute('stroke' as any, datum) as any)\n : (this.series.getMarkInName('boxPlot').getAttribute('fill' as any, datum) as any);\n };\n\n getOutlierFillColor = (datum: Datum) => {\n const outliersStyle = (this.series as BoxPlotSeries).getOutliersStyle();\n return outliersStyle?.fill ?? (this.series.getMarkInName('outlier').getAttribute('fill' as any, datum) as any);\n };\n isOutlierMark = (datum: Datum) => {\n return isValid(datum[BOX_PLOT_OUTLIER_VALUE_FIELD]);\n };\n}\n","export function isHorizontal(direction: string) {\n return direction === 'horizontal';\n}\n\nexport function isVertical(direction: string) {\n return direction === 'vertical';\n}\n\nexport function isValidDirection(direction: string) {\n return direction === 'vertical' || direction === 'horizontal';\n}\n\nexport function isValidPosition(position: string) {\n return position === 'top' || position === 'bottom' || position === 'left' || position === 'right';\n}\n\nexport function isHorizontalPosition(position: string) {\n return position === 'top' || position === 'bottom';\n}\n","import { has, isNil, isBoolean, isFunction, isEqual } from '@visactor/vutils';\nimport type {\n IGlyphElement,\n IGlyphMark,\n MarkElementItem,\n MarkSpec,\n IGlyphMeta,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport { cloneTransformAttributes, transformAttributes } from './attributes/transform';\nimport { BridgeElementKey, CollectionMarkType } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType } from './enums';\nimport { Element } from './element';\nimport { invokeEncoderToItems } from './mark/encode';\nimport type { IGraphicAttribute, IGlyph } from '@visactor/vrender-core';\n\nexport class GlyphElement extends Element implements IGlyphElement {\n declare graphicItem: IGlyph;\n\n declare mark: IGlyphMark;\n protected glyphGraphicItems: { [markName: string]: any };\n\n private glyphMeta: IGlyphMeta;\n\n constructor(mark: IGlyphMark) {\n super(mark);\n this.glyphMeta = this.mark.getGlyphMeta();\n }\n\n getGlyphGraphicItems() {\n return this.glyphGraphicItems;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n\n this.graphicItem = this.mark.addGraphicItem(attributes, this.groupKey) as IGlyph;\n this.graphicItem[BridgeElementKey] = this;\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n\n const glyphMarks = this.glyphMeta.getMarks();\n this.glyphGraphicItems = {};\n this.graphicItem.getSubGraphic().forEach((graphic: any) => {\n const markType = glyphMarks[graphic.name];\n this.glyphGraphicItems[graphic.name] = graphic;\n graphic.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(markType, attributes, this, graphic.name);\n return graphicAttributes;\n };\n });\n\n this.clearGraphicAttributes();\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.graphicItem.glyphStateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n\n const encoder = isRuntimeState\n ? {\n ...(this.mark.getSpec() as MarkSpec).encode?.[stateName],\n ...this.runtimeStatesEncoder[stateName]\n }\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n const glyphStateAttributes = {} as {\n attributes: Partial;\n subAttributes: Partial[];\n };\n\n if (!encoder) {\n return glyphStateAttributes;\n }\n\n if (isFunction(encoder)) {\n glyphStateAttributes.attributes = (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n return glyphStateAttributes;\n }\n\n if (!isRuntimeState && this.graphicItem.glyphStates?.[stateName]) {\n return this.graphicItem.glyphStates[stateName];\n }\n\n if (encoder) {\n const item = this.items[0];\n const targetItems = [Object.assign({}, item, { nextAttrs: {} })];\n\n invokeEncoderToItems(this, targetItems, encoder, (this.mark as any).parameters());\n this.coordinateTransformEncode(targetItems);\n\n glyphStateAttributes.attributes = targetItems[0].nextAttrs;\n\n if (!this.graphicItem.glyphStates) {\n this.graphicItem.glyphStates = { [stateName]: glyphStateAttributes };\n } else if (!this.graphicItem.glyphStates[stateName]) {\n this.graphicItem.glyphStates[stateName] = glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n };\n\n encodeGraphic() {\n this.coordinateTransformEncode(this.items);\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n const isGraphicInit = !this.graphicItem;\n if (!this.graphicItem) {\n this.initGraphicItem();\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n }\n\n if (this.diffState === DiffState.enter || isGraphicInit) {\n // apply default encoder when enter or graphic item is created\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(true);\n this.applyGraphicAttributes(graphicAttributes);\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n } else {\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n // 更新数据流后,states计算不缓存\n graphicItem.states = {};\n });\n this.useStates(this.states);\n }\n\n // clear item attributes\n this.items.map(item => {\n item.nextAttrs = {};\n });\n }\n\n encodeCustom(nextAttrs?: any): { [markName: string]: any } {\n let customEncodeValues: { [markName: string]: any } = {};\n const channelEncoder = this.glyphMeta.getChannelEncoder();\n const functionEncoder = this.glyphMeta.getFunctionEncoder();\n\n if (functionEncoder) {\n customEncodeValues = functionEncoder.call(\n null,\n Object.assign({}, this.graphicItem?.attribute, nextAttrs),\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n }\n if (channelEncoder) {\n // TODO: maybe delete origin encode value?\n let allAttrs: any;\n Object.keys(channelEncoder).forEach(channel => {\n if (!isNil(nextAttrs[channel])) {\n if (!allAttrs) {\n allAttrs = Object.assign({}, this.graphicItem?.attribute, nextAttrs);\n }\n const encodeResult = channelEncoder[channel].call(\n null,\n channel,\n nextAttrs[channel],\n allAttrs,\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n Object.keys(encodeResult ?? {}).forEach(markName => {\n customEncodeValues[markName] = Object.assign(customEncodeValues[markName] ?? {}, encodeResult[markName]);\n });\n }\n });\n }\n return customEncodeValues;\n }\n\n private encodeDefault() {\n const defaultEncodeValues: { [markName: string]: any } = {};\n // apply default encode\n if (this.glyphMeta.getDefaultEncoder()) {\n const defaultEncodeResult = this.glyphMeta\n .getDefaultEncoder()\n .call(null, this.getDatum(), this, this.mark.getGlyphConfig());\n Object.assign(defaultEncodeValues, defaultEncodeResult);\n }\n return defaultEncodeValues;\n }\n\n private _onGlyphAttributeUpdate(first: boolean = false) {\n return (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const glyphMarks = this.glyphMeta.getMarks();\n\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n\n // apply default encode\n const defaultEncodeValues = first ? this.encodeDefault() : null;\n // apply custom encode\n const customEncodeValues = this.encodeCustom(attributes);\n\n Object.keys(glyphMarks).forEach(markName => {\n const markType = glyphMarks[markName];\n const graphicItem = this.glyphGraphicItems[markName];\n const customAttributes = customEncodeValues?.[markName];\n const additionalAttributes = Object.assign({}, customAttributes);\n if (first) {\n // apply default attributes when visual channel is not set\n const defaultAttributes = defaultEncodeValues?.[markName];\n Object.keys(defaultAttributes ?? {}).forEach(key => {\n if (!has(this.items[0].nextAttrs, key) && !has(additionalAttributes, key)) {\n additionalAttributes[key] = defaultAttributes[key];\n }\n });\n }\n const glyphAttributes = Object.assign({}, cloneTransformAttributes(markType, attributes), additionalAttributes);\n const glyphItems = this._generateGlyphItems(markType, this.items, glyphAttributes);\n this.coordinateTransformEncode(glyphItems);\n const graphicAttributes = this.transformElementItems(glyphItems, markType);\n\n this.applyGlyphGraphicAttributes(graphicAttributes, markName, graphicItem);\n\n if (markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n graphicItem.datum = glyphItems[0].datum;\n }\n });\n\n return graphicAttributes;\n };\n }\n\n private _generateGlyphItems(markType: MarkType, items: MarkElementItem[], additionalAttributes: any) {\n const glyphItems = items.map(item => Object.assign({}, item, { nextAttrs: additionalAttributes }));\n\n if ((CollectionMarkType as string[]).includes(markType) && this.mark.getSpec().enableSegments) {\n // segment mark require all items to apply additional attributes\n glyphItems.forEach((glyphItem, index) => {\n glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);\n });\n }\n\n return glyphItems;\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false, markName?: any) {\n if (!this.graphicItem) {\n return undefined;\n }\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n if (prev && has(prevGraphicAttributes, channel)) {\n return prevGraphicAttributes[channel];\n }\n\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.attribute[channel];\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n if (final) {\n finalGraphicAttributes[channel] = value;\n }\n if (!has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n }\n\n graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n Object.keys(attributes).forEach(key => {\n if (final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (!has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = graphicItem.attribute[key];\n }\n });\n\n graphicItem.setAttributes(attributes);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }, markName?: string) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n for (const key in graphicAttributes) {\n if (!has(finalGraphicAttributes, key) || !isEqual(finalGraphicAttributes[key], graphicAttributes[key])) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n protected applyGlyphGraphicAttributes(graphicAttributes: any, markName: string, graphicItem: any): void {\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes, markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName) ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName) ?? {};\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes, markName);\n this.setPrevGraphicAttributes(prevGraphicAttributes, markName);\n this.setFinalGraphicAttributes(finalGraphicAttributes, markName);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n graphicItem.setAttributes(nextGraphicAttributes);\n } else {\n graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getFinalGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.finalAttrs = attributes;\n }\n\n getPrevGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.prevAttrs = attributes;\n }\n\n getNextGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n });\n }\n\n clearGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n this.setFinalGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n this.setFinalGraphicAttributes(null, markName);\n });\n }\n\n remove() {\n this.glyphGraphicItems = null;\n super.remove();\n }\n\n release() {\n if (this.glyphGraphicItems) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n graphicItem[BridgeElementKey] = null;\n });\n this.glyphGraphicItems = null;\n }\n super.release();\n }\n}\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IGlyphMark, IGroupMark, IView, GlyphMarkSpec, IGlyphMeta } from '../types';\nimport { createGlyphGraphicItem } from '../graph/util/graphic';\nimport { Mark } from './mark';\nimport { Factory } from '../core/factory';\nimport { GlyphElement } from '../graph/glyph-element';\n\nexport class GlyphMark extends Mark implements IGlyphMark {\n static markType = GrammarMarkType.glyph;\n protected declare spec: GlyphMarkSpec;\n declare markType: GrammarMarkType.glyph;\n readonly glyphType: string;\n\n private glyphMeta: IGlyphMeta;\n\n constructor(view: IView, glyphType: string, group?: IGroupMark) {\n super(view, GrammarMarkType.glyph, group);\n this.glyphType = glyphType;\n this.glyphMeta = Factory.getGlyph(glyphType);\n }\n\n configureGlyph(config: any) {\n this.spec.glyphConfig = config;\n this.commit();\n return this;\n }\n\n getGlyphMeta() {\n return this.glyphMeta;\n }\n\n getGlyphConfig() {\n return this.spec.glyphConfig;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const graphicItem = createGlyphGraphicItem(this, this.glyphMeta, attrs);\n return super.addGraphicItem(attrs, groupKey, graphicItem);\n }\n\n createElement() {\n return new GlyphElement(this);\n }\n}\nexport const registerGlyphMark = () => {\n Factory.registerMark(GrammarMarkType.glyph, GlyphMark);\n};\n","import { isValidNumber } from '@visactor/vutils';\nimport type {\n BarBoxPlotEncoderSpec,\n BoxPlotEncoderSpec,\n IAnimationParameters,\n IGlyphElement,\n TypeAnimation\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerRectGraphic, registerRuleGraphic } from '../graph/mark/graphic';\nimport { isHorizontal } from '@visactor/vgrammar-util';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport interface IBoxplotScaleAnimationOptions {\n center?: number;\n}\n\nconst scaleIn = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', false);\n const y = element.getGraphicAttribute('y', false);\n const min = element.getGraphicAttribute('min', false);\n const max = element.getGraphicAttribute('max', false);\n const q1 = element.getGraphicAttribute('q1', false);\n const q3 = element.getGraphicAttribute('q3', false);\n const median = element.getGraphicAttribute('median', false);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.from.min = center;\n animateAttributes.to.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.from.max = center;\n animateAttributes.to.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.from.q1 = center;\n animateAttributes.to.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.from.q3 = center;\n animateAttributes.to.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.from.median = center;\n animateAttributes.to.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst scaleOut = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', true);\n const y = element.getGraphicAttribute('y', true);\n const min = element.getGraphicAttribute('min', true);\n const max = element.getGraphicAttribute('max', true);\n const q1 = element.getGraphicAttribute('q1', true);\n const q3 = element.getGraphicAttribute('q3', true);\n const median = element.getGraphicAttribute('median', true);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.to.min = center;\n animateAttributes.from.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.to.max = center;\n animateAttributes.from.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.to.q1 = center;\n animateAttributes.from.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.to.q3 = center;\n animateAttributes.from.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.to.median = center;\n animateAttributes.from.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst computeBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (options && isValidNumber(options.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.x;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.x;\n\n const boxWidth = glyphElement.getGraphicAttribute('width', false, 'box');\n const boxX = glyphElement.getGraphicAttribute('x', false, 'box');\n q1 = boxX;\n q3 = boxX + boxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.y;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.y;\n\n const boxHeight = glyphElement.getGraphicAttribute('height', false, 'box');\n const boxY = glyphElement.getGraphicAttribute('y', false, 'box');\n q1 = boxY;\n q3 = boxY + boxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n shaft: {},\n box: {},\n max: {},\n min: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const boxWidth = encodeValues.boxWidth ?? element.getGraphicAttribute('boxWidth', false);\n const boxHeight = encodeValues.boxHeight ?? element.getGraphicAttribute('boxHeight', false);\n const ruleWidth = encodeValues.ruleWidth ?? element.getGraphicAttribute('ruleWidth', false);\n const ruleHeight = encodeValues.ruleHeight ?? element.getGraphicAttribute('ruleHeight', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(boxHeight)) {\n Object.assign(attributes.box, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n Object.assign(attributes.median, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n } else {\n // median rule always has the same length with box rect\n Object.assign(attributes.box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(ruleHeight)) {\n Object.assign(attributes.max, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n Object.assign(attributes.min, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n } else {\n Object.assign(attributes.max, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.min, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(boxWidth)) {\n Object.assign(attributes.box, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n Object.assign(attributes.median, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n } else {\n Object.assign(attributes.box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(ruleWidth)) {\n Object.assign(attributes.max, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n Object.assign(attributes.min, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n } else {\n Object.assign(attributes.max, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.min, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const boxplotScaleIn = scaleIn(computeBoxplotCenter);\nexport const boxplotScaleOut = scaleOut(computeBoxplotCenter);\n\nexport function registerBoxplotGlyph() {\n Factory.registerGlyph('boxplot', {\n shaft: 'rule',\n box: 'rect',\n max: 'rule',\n min: 'rule',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'boxWidth',\n 'boxHeight',\n 'ruleWidth',\n 'ruleHeight'\n ])\n .registerFunctionEncoder(encodeBoxplotSize)\n .registerChannelEncoder('x', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (config && isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { x: encodeValue, x1: encodeValue }\n };\n })\n .registerChannelEncoder('y', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (!config || !isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { y: encodeValue, y1: encodeValue }\n };\n })\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x: encodeValue } } : { box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x1: encodeValue } } : { box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x: encodeValue },\n min: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y: encodeValue },\n min: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x1: encodeValue },\n max: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y1: encodeValue },\n max: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n median: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n median: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const defaultAnchor =\n config && isHorizontal(config.direction)\n ? [(encodeValues.min + encodeValues.max) / 2, encodeValues.y]\n : [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n const anchor = encodeValues.anchor ?? defaultAnchor;\n return {\n shaft: { angle: encodeValue, anchor },\n box: { angle: encodeValue, anchor },\n max: { angle: encodeValue, anchor },\n min: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n max: { visible: false },\n min: { visible: false },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('boxplotScaleIn', boxplotScaleIn);\n Factory.registerAnimationType('boxplotScaleOut', boxplotScaleOut);\n registerGlyphMark();\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n\nconst computeBarBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (isValidNumber(options?.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n\n const minMaxBoxWidth = glyphElement.getGraphicAttribute('width', false, 'minMaxBox');\n const minMaxBoxBoxX = glyphElement.getGraphicAttribute('x', false, 'minMaxBox');\n min = minMaxBoxBoxX;\n max = minMaxBoxBoxX + minMaxBoxWidth;\n\n const q1q3BoxWidth = glyphElement.getGraphicAttribute('width', false, 'q1q3Box');\n const q1q3BoxX = glyphElement.getGraphicAttribute('x', false, 'q1q3Box');\n q1 = q1q3BoxX;\n q3 = q1q3BoxX + q1q3BoxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n\n const minMaxBoxHeight = glyphElement.getGraphicAttribute('height', false, 'minMaxBox');\n const minMaxBoxBoxY = glyphElement.getGraphicAttribute('y', false, 'minMaxBox');\n min = minMaxBoxBoxY;\n max = minMaxBoxBoxY + minMaxBoxHeight;\n\n const q1q3BoxHeight = glyphElement.getGraphicAttribute('height', false, 'q1q3Box');\n const q1q3BoxY = glyphElement.getGraphicAttribute('y', false, 'q1q3Box');\n q1 = q1q3BoxY;\n q3 = q1q3BoxY + q1q3BoxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBarBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n minMaxBox: {},\n q1q3Box: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const minMaxWidth = encodeValues.minMaxWidth ?? element.getGraphicAttribute('minMaxWidth', false);\n const q1q3Width = encodeValues.q1q3Width ?? element.getGraphicAttribute('q1q3Width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const minMaxHeight = encodeValues.minMaxHeight ?? element.getGraphicAttribute('minMaxHeight', false);\n const q1q3Height = encodeValues.q1q3Height ?? element.getGraphicAttribute('q1q3Height', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(minMaxHeight)) {\n Object.assign(attributes.minMaxBox, { y: y - minMaxHeight / 2, y1: y + minMaxHeight / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(q1q3Height)) {\n Object.assign(attributes.q1q3Box, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n Object.assign(attributes.median, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(minMaxWidth)) {\n Object.assign(attributes.minMaxBox, { x: x - minMaxWidth / 2, x1: x + minMaxWidth / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(q1q3Width)) {\n Object.assign(attributes.q1q3Box, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n Object.assign(attributes.median, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const barBoxplotScaleIn = scaleIn(computeBarBoxplotCenter);\nexport const barBoxplotScaleOut = scaleOut(computeBarBoxplotCenter);\n\nexport function registerBarBoxplotGlyph() {\n Factory.registerGlyph('barBoxplot', {\n minMaxBox: 'rect',\n q1q3Box: 'rect',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'minMaxWidth',\n 'q1q3Width',\n 'minMaxHeight',\n 'q1q3Height'\n ])\n .registerFunctionEncoder(encodeBarBoxplotSize)\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x: encodeValue } }\n : { q1q3Box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x1: encodeValue } }\n : { q1q3Box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x: encodeValue } }\n : { minMaxBox: { y: encodeValue } };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x1: encodeValue } }\n : { minMaxBox: { y1: encodeValue } };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { median: { x: encodeValue, x1: encodeValue, visible: true } }\n : { median: { y: encodeValue, y1: encodeValue, visible: true } };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const anchor = encodeValues.anchor ?? [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n return {\n minMaxBox: { angle: encodeValue, anchor },\n q1q3Box: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerChannelEncoder('lineWidth', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 }\n };\n })\n .registerChannelEncoder('minMaxFillOpacity', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { fillOpacity: encodeValue }\n };\n })\n .registerChannelEncoder('stroke', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { stroke: false },\n q1q3Box: { stroke: false }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('barBoxplotScaleIn', barBoxplotScaleIn);\n Factory.registerAnimationType('barBoxplotScaleOut', barBoxplotScaleOut);\n registerGlyphMark();\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n","import { Factory } from './../core/factory';\nimport type { IBoxPlotMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerBarBoxplotGlyph, registerBoxplotGlyph } from '@visactor/vgrammar-core';\nimport type { IBoxPlotMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\n\nconst BOX_PLOT_GLYPH_TYPE = 'boxplot';\nconst BAR_BOX_PLOT_GLYPH_TYPE = 'barBoxplot';\n\nexport class BoxPlotMark extends BaseMark implements IBoxPlotMark {\n static readonly type = MarkTypeEnum.boxPlot;\n readonly type = BoxPlotMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 2,\n boxWidth: 30,\n shaftWidth: 20,\n shaftShape: 'line'\n };\n return defaultStyle;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const shaftShape = this.getStyle('shaftShape');\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = shaftShape === 'bar' ? BAR_BOX_PLOT_GLYPH_TYPE : BOX_PLOT_GLYPH_TYPE;\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerBoxPlotMark = () => {\n Factory.registerMark(BoxPlotMark.type, BoxPlotMark);\n registerBoxplotGlyph();\n registerBarBoxplotGlyph();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { IModelEvaluateOption, IModelInitOption } from '../../model/interface';\nimport type { BoxPlotShaftShape, IOutlierMarkSpec, Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { valueInScaleRange } from '../../util/scale';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IBoxPlotSeriesSpec } from './interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport { SeriesData } from '../base/series-data';\nimport { foldOutlierData } from '../../data/transforms/box-plot';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport { BoxPlotSeriesTooltipHelper } from './tooltip-helper';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { registerBoxPlotMark } from '../../mark/box-plot';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { boxPlotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IBoxPlotMark, IMark, ISymbolMark } from '../../mark/interface';\nimport { merge, isNumber } from '@visactor/vutils';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nconst DEFAULT_STROKE_WIDTH = 2;\nconst DEFAULT_SHAFT_FILL_OPACITY = 0.5;\nconst DEFAULT_SHAFT_SHAPE = 'line';\nexport const DEFAULT_FILL_COLOR = '#FFF';\nexport const DEFAULT_STROKE_COLOR = '#000';\n\nconst DEFAULT_OUTLIER_SIZE = 10;\n\nexport class BoxPlotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.boxPlot;\n type = SeriesTypeEnum.boxPlot;\n\n static readonly mark: SeriesMarkMap = boxPlotSeriesMark;\n\n protected _minField: string;\n getMinField() {\n return this._minField;\n }\n protected _maxField: string;\n getMaxField() {\n return this._maxField;\n }\n protected _q1Field: string;\n getQ1Field() {\n return this._q1Field;\n }\n protected _medianField: string;\n getMedianField() {\n return this._medianField;\n }\n protected _q3Field: string;\n getQ3Field() {\n return this._q3Field;\n }\n protected _outliersField: string;\n getOutliersField() {\n return this._outliersField;\n }\n protected _lineWidth: number;\n protected _boxWidth: number;\n protected _shaftShape: BoxPlotShaftShape;\n getShaftShape() {\n return this._shaftShape;\n }\n protected _shaftWidth: number;\n protected _boxFillColor: string;\n getBoxFillColor() {\n return this._boxFillColor;\n }\n protected _strokeColor: string;\n getStrokeColor() {\n return this._strokeColor;\n }\n protected _shaftFillOpacity: number;\n protected _outliersStyle: IOutlierMarkSpec;\n getOutliersStyle() {\n return this._outliersStyle;\n }\n protected _outlierDataView: SeriesData;\n\n private _autoBoxWidth: number;\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const boxPlotStyle: any = this._spec.boxPlot?.style ?? {};\n this._minField = this._spec.minField;\n this._maxField = this._spec.maxField;\n this._q1Field = this._spec.q1Field;\n this._medianField = this._spec.medianField;\n this._q3Field = this._spec.q3Field;\n this._outliersField = this._spec.outliersField;\n this._lineWidth = boxPlotStyle.lineWidth ?? DEFAULT_STROKE_WIDTH;\n this._boxWidth = boxPlotStyle.boxWidth;\n this._shaftShape = boxPlotStyle.shaftShape ?? DEFAULT_SHAFT_SHAPE;\n this._shaftWidth = boxPlotStyle.shaftWidth;\n this._boxFillColor = boxPlotStyle.boxFill;\n this._strokeColor = boxPlotStyle.stroke;\n\n this._shaftFillOpacity =\n this._shaftShape === 'bar' ? boxPlotStyle.shaftFillOpacity ?? DEFAULT_SHAFT_FILL_OPACITY : undefined;\n\n this._outliersStyle = this._spec.outliersStyle;\n }\n\n private _boxPlotMark?: IBoxPlotMark;\n private _outlierMark?: ISymbolMark;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._boxPlotMark = this._createMark(\n BoxPlotSeries.mark.boxPlot,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n progressive\n ) as IBoxPlotMark;\n this._outlierMark = this._createMark(\n BoxPlotSeries.mark.outlier,\n {\n key: DEFAULT_DATA_INDEX,\n groupKey: this._seriesField,\n dataView: this._outlierDataView.getDataView(),\n dataProductId: this._outlierDataView.getProductId()\n },\n progressive\n ) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n if (boxPlotMark) {\n const commonBoxplotStyles = {\n direction: this._direction,\n lineWidth: this._lineWidth,\n shaftShape: this._shaftShape,\n fill: this._boxFillColor ?? (this._shaftShape === 'line' ? DEFAULT_FILL_COLOR : this.getColorAttribute()),\n minMaxFillOpacity: this._shaftFillOpacity,\n stroke: this._strokeColor ?? (this._shaftShape === 'line' ? this.getColorAttribute() : DEFAULT_STROKE_COLOR)\n };\n\n const boxPlotMarkStyles =\n this._direction === Direction.horizontal\n ? {\n y: this.dataToPositionY.bind(this),\n ...commonBoxplotStyles,\n boxHeight: () => this._boxWidth ?? this._getMarkWidth(),\n ruleHeight: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Height: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxHeight: () => this._shaftWidth ?? this._getMarkWidth()\n }\n : {\n x: this.dataToPositionX.bind(this),\n ...commonBoxplotStyles,\n boxWidth: () => this._boxWidth ?? this._getMarkWidth(),\n ruleWidth: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Width: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxWidth: () => this._shaftWidth ?? this._getMarkWidth()\n };\n this.setMarkStyle(boxPlotMark, boxPlotMarkStyles, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n }\n\n const outlierMark = this._outlierMark;\n if (outlierMark) {\n this.setMarkStyle(\n outlierMark,\n {\n fill: this._outliersStyle?.fill ?? this.getColorAttribute(),\n size: isNumber(this._outliersStyle?.size) ? this._outliersStyle.size : DEFAULT_OUTLIER_SIZE,\n symbolType: 'circle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n initBoxPlotMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n const axisHelper = this._direction === Direction.horizontal ? this._xAxisHelper : this._yAxisHelper;\n if (boxPlotMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n this.setMarkStyle(\n boxPlotMark,\n {\n min: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._minField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q1: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q1Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n median: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._medianField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q3: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q3Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n max: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._maxField), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n const outlierMark = this._outlierMark;\n if (outlierMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n const outlierMarkPositionChannel =\n this._direction === Direction.horizontal\n ? {\n y: this.dataToPositionY.bind(this),\n x: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n }\n : {\n x: this.dataToPositionX.bind(this),\n y: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n };\n this.setMarkStyle(outlierMark, outlierMarkPositionChannel, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n }\n }\n\n initData(): void {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'foldOutlierData', foldOutlierData);\n registerDataSetInstanceTransform(this._dataSet, 'addVChartProperty', addVChartProperty);\n\n const outlierDataView = new DataView(this._dataSet, { name: `${this.type}_outlier_${this.id}_data` });\n outlierDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n outlierDataView.name = `${PREFIX}_series_${this.id}_outlierData`;\n outlierDataView.transform({\n type: 'foldOutlierData',\n options: {\n dimensionField: this._direction === Direction.horizontal ? this._fieldY : this._fieldX,\n outliersField: this._outliersField\n }\n });\n\n outlierDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._outlierDataView = new SeriesData(this._option, outlierDataView);\n }\n\n compileData() {\n super.compileData();\n this._outlierDataView?.compile();\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n //init在axis初始化之后才被执行,此时axisHelper不为空\n this.initBoxPlotMarkStyle();\n }\n\n private _getMarkWidth() {\n if (this._autoBoxWidth) {\n return this._autoBoxWidth;\n }\n //获取自适应的图元宽度\n const bandAxisHelper = this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper;\n const xField = this._direction === Direction.horizontal ? this._fieldY : this._fieldX;\n\n const innerBandWidth = bandAxisHelper.getBandwidth(xField.length - 1);\n const autoBoxWidth = innerBandWidth / xField.length;\n this._autoBoxWidth = autoBoxWidth;\n\n return this._autoBoxWidth;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n //每次布局结束,清除自适应宽度缓存\n this._autoBoxWidth = null;\n }\n\n private _initAnimationSpec(config: any = {}) {\n //将spec中的animation的type替换为箱型图的type\n const newConfig = merge({}, config);\n ['appear', 'enter', 'update', 'exit', 'disappear'].forEach(state => {\n if (newConfig[state] && newConfig[state].type === 'scaleIn') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleIn' : 'barBoxplotScaleIn';\n } else if (newConfig[state] && newConfig[state].type === 'scaleOut') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleOut' : 'barBoxplotScaleOut';\n }\n });\n return newConfig;\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n if (this._boxPlotMark) {\n const newDefaultConfig = this._initAnimationSpec(Factory.getAnimationInKey('scaleInOut')?.());\n const newConfig = this._initAnimationSpec(\n userAnimationConfig(SeriesMarkNameEnum.boxPlot, this._spec, this._markAttributeContext)\n );\n this._boxPlotMark.setAnimationConfig(animationConfig(newDefaultConfig, newConfig, animationParams));\n }\n\n if (this._outlierMark) {\n const outlierMarkUserAnimation = {\n appear: (this._spec.animationAppear as IMarkAnimateSpec)?.symbol,\n disappear: (this._spec.animationDisappear as IMarkAnimateSpec)?.symbol,\n enter: (this._spec.animationEnter as IMarkAnimateSpec)?.symbol,\n exit: (this._spec.animationExit as IMarkAnimateSpec)?.symbol,\n update: (this._spec.animationUpdate as IMarkAnimateSpec)?.symbol\n };\n this._outlierMark.setAnimationConfig(\n animationConfig(Factory.getAnimationInKey('scaleInOut')?.(), outlierMarkUserAnimation, animationParams)\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new BoxPlotSeriesTooltipHelper(this);\n this._boxPlotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._boxPlotMark);\n this._outlierMark && this._tooltipHelper.activeTriggerSet.mark.add(this._outlierMark);\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n const outliersField = fields.find(f => f.key === this._outliersField);\n if (outliersField) {\n outliersField.operations = ['array-min', 'array-max'];\n }\n return fields;\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n //初次编译时,会传入空数据;待所有计算完成后,需要重新执行updateData更新数据\n super.onEvaluateEnd(ctx);\n this._outlierDataView.updateData();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._boxPlotMark];\n }\n}\n\nexport const registerBoxplotSeries = () => {\n registerBoxPlotMark();\n registerSymbolMark();\n registerScaleInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(BoxPlotSeries.type, BoxPlotSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBoxPlotChartSpec } from './interface';\n\nexport class BoxPlotChartSpecTransformer<\n T extends IBoxPlotChartSpec = IBoxPlotChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const dataFields = [spec.maxField, spec.medianField, spec.q1Field, spec.q3Field, spec.minField, spec.outliersField];\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'boxPlot',\n 'minField',\n 'maxField',\n 'q1Field',\n 'medianField',\n 'q3Field',\n 'outliersField',\n 'outliersStyle'\n ]);\n seriesSpec.direction = spec.direction ?? Direction.vertical;\n seriesSpec[seriesSpec.direction === Direction.horizontal ? 'xField' : 'yField'] = dataFields;\n\n return seriesSpec;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n if (!spec.axes) {\n spec.axes = [\n {\n orient: 'bottom'\n },\n {\n orient: 'left'\n }\n ];\n }\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBoxPlotChartSpec } from './interface';\nimport { registerBoxplotSeries } from '../../series/box-plot/box-plot';\nimport { Factory } from '../../core/factory';\nimport { BoxPlotChartSpecTransformer } from './box-plot-transformer';\nimport { BaseChart } from '../base';\n\nexport class BoxPlotChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.boxPlot;\n static readonly seriesType: string = SeriesTypeEnum.boxPlot;\n static readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly type: string = ChartTypeEnum.boxPlot;\n readonly seriesType: string = SeriesTypeEnum.boxPlot;\n}\n\nexport const registerBoxplotChart = () => {\n registerBoxplotSeries();\n Factory.registerChart(BoxPlotChart.type, BoxPlotChart);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { HierarchyNodeDatum } from './interface';\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach((node, index) => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n","import type { SankeyOptions, SankeyData } from '@visactor/vgrammar-sankey';\nimport { SankeyLayout } from '@visactor/vgrammar-sankey';\nimport { isArray, isNil } from '@visactor/vutils';\n\nexport interface ISankeyOpt extends SankeyOptions {\n targetField: string;\n sourceField: string;\n valueField: string;\n view: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\nexport const collectHierarchyField = (set: Set, data: any[], field: string) => {\n data.forEach((obj: any) => {\n if (!isNil(obj[field])) {\n set.add(obj[field]);\n }\n\n if (obj.children && obj.children.length > 0) {\n collectHierarchyField(set, obj.children, field); // 递归处理子节点\n }\n });\n};\n\nexport const sankeyFormat = (data: any[]): SankeyData[] => {\n if (!data || !isArray(data)) {\n return [] as SankeyData[];\n }\n\n if (data.length > 1) {\n /**\n * data structure for Fengshen:\n * [{id:’nodes’, values:[xxx]},{id:’links’, values:[xxx]}]\n */\n const updateData: SankeyData = {\n links: [],\n nodes: []\n };\n data.forEach((datum: any) => {\n if (datum.id === 'links' || datum.id === 'nodes') {\n updateData[datum.id] = datum.values;\n }\n });\n return [updateData];\n }\n /**\n * data structure:\n * [{nodes: [xxx], links: [xxx]}]\n */\n if (data[0]?.latestData) {\n return data[0].latestData;\n }\n return data;\n};\n\nexport const sankeyLayout = (data: SankeyData[], op: ISankeyOpt) => {\n if (!data || !op?.view || !data.length) {\n return [];\n }\n\n const view = op.view();\n\n if (\n view.x1 - view.x0 === 0 ||\n view.y1 - view.y0 === 0 ||\n view.x1 - view.x0 === -Infinity ||\n view.x1 - view.x0 === Infinity ||\n view.y1 - view.y0 === -Infinity ||\n view.y1 - view.y0 === Infinity\n ) {\n return [];\n }\n\n const originalData = data[0];\n\n if (op.sourceField !== 'source' || op.targetField !== 'target' || op.valueField !== 'value') {\n if ((originalData as any).links) {\n const updatedData: {}[] = [];\n\n (originalData as any).links.forEach((datum: any) => {\n const updatedDatum: any = {};\n for (const key in datum) {\n if (key === op.sourceField) {\n updatedDatum.source = datum[op.sourceField];\n } else if (key === op.targetField) {\n updatedDatum.target = datum[op.targetField];\n } else if (key === op.valueField) {\n updatedDatum.value = datum[op.valueField];\n } else {\n updatedDatum[key] = datum[key];\n }\n }\n updatedData.push(updatedDatum);\n });\n (originalData as any).links = updatedData;\n }\n }\n\n const layout = new SankeyLayout(op);\n\n const result = [];\n\n result.push(layout.layout(originalData, view));\n\n return result;\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyNodes = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].nodes ?? [];\n }\n\n return [];\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyLinks = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].links ?? [];\n }\n\n return [];\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isNumber } from '@visactor/vutils';\n\nexport class SankeySeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getDimensionData = (datum: any) => {\n if (datum.source) {\n if (isNumber(datum.source)) {\n const seriesKeys = this.series.getSeriesKeys();\n return seriesKeys[datum.source] + ' => ' + seriesKeys[datum.target];\n }\n return datum.source + ' => ' + datum.target;\n }\n return datum.datum ? datum.datum[this.series.getSpec().categoryField] : datum.key;\n };\n\n markTooltipValueCallback = (datum: Datum): string | undefined => {\n return datum.value;\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\nimport type { ISankeyAnimationParams, SankeyAppearPreset } from './interface';\n\nexport const sankeyGrowIn = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyGrowOut = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyNodePresetAnimation = (\n params: ISankeyAnimationParams,\n preset: SankeyAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return sankeyGrowIn(params);\n }\n default: {\n return sankeyGrowIn(params);\n }\n }\n};\n\nexport const sankeyLinkPresetAnimation = (preset: SankeyAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return { type: 'linkPathGrowIn' };\n }\n default: {\n return { type: 'linkPathGrowIn' };\n }\n }\n};\n\nexport const registerSankeyAnimation = () => {\n Factory.registerAnimation('sankeyNode', (params: ISankeyAnimationParams, preset: SankeyAppearPreset) => ({\n appear: sankeyNodePresetAnimation(params, preset),\n ...FadeInOutAnimation\n }));\n Factory.registerAnimation('sankeyLinkPath', (params: unknown, preset: SankeyAppearPreset) => ({\n appear: sankeyLinkPresetAnimation(preset),\n enter: { type: 'linkPathGrowIn' },\n exit: { type: 'linkPathGrowOut' },\n disappear: { type: 'linkPathGrowOut' }\n }));\n};\n","import type { IAnimationParameters, LinkPathEncoderSpec, TypeAnimation } from '../types';\nimport type { IElement } from '../types/element';\nimport { Factory } from '../core/factory';\nimport { isNil } from '@visactor/vutils';\nimport { registerGlyphGraphic, registerPathGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport interface LinkPathConfig {\n direction?: 'horizontal' | 'vertical' | 'LR' | 'RL' | 'TB' | 'BL' | 'radial';\n}\n\n// const isValidThickness = (thickness: number) => isValidNumber(thickness) && thickness > 1;\n// const hasValidThickness = (options: LinkPathEncodeValues) => isValidThickness(options.thickness);\n\nexport const getHorizontalPath = (options: LinkPathEncoderSpec, ratio?: number) => {\n const curvature = options.curvature ?? 0.5;\n const hasThickness = true;\n const thickness = typeof ratio === 'number' ? options.thickness * ratio : options.thickness;\n\n let x0 = options.x0;\n let x1 = options.x1;\n let y00 = options.y0;\n let y10 = options.y1;\n let cpx0 = x0 + curvature * (x1 - x0);\n let cpx1 = x1 + curvature * (x0 - x1);\n let formatter = (v: number) => v;\n\n if (options.round !== false) {\n x0 = Math.round(x0);\n x1 = Math.round(x1);\n y00 = Math.round(y00);\n y10 = Math.round(y10);\n cpx0 = Math.round(cpx0);\n cpx1 = Math.round(cpx1);\n formatter = Math.round;\n }\n const topPath =\n options.pathType === 'line'\n ? `M${x0},${y00}L${x1},${y10}`\n : options.pathType === 'polyline'\n ? `M${x0},${y00}L${cpx0},${y00}L${cpx0},${y10}L${x1},${y10}`\n : `M${x0},${y00}C${cpx0},${y00},${cpx1},${y10},${x1},${y10}`;\n\n if (!hasThickness) {\n // simplified to a single path\n return topPath;\n }\n\n if (options.align === 'center') {\n y00 = formatter(options.y0 - thickness / 2);\n y10 = formatter(options.y1 - thickness / 2);\n } else if (options.align === 'end') {\n y00 = formatter(options.y0 + options.thickness / 2 - thickness);\n y10 = formatter(options.y1 + options.thickness / 2 - thickness);\n } else {\n y00 = formatter(options.y0 - options.thickness / 2);\n y10 = formatter(options.y1 - options.thickness / 2);\n }\n\n const y01 = formatter(y00 + thickness);\n const y11 = formatter(y10 + thickness);\n\n const hasLength = Math.abs(x1 - x0) > 1e-6;\n const endArrowPath =\n options.endArrow && hasLength\n ? `L${x1},${formatter(y10 - thickness / 2)}L${formatter(x1 + thickness)},${formatter(\n (y10 + y11) / 2\n )}L${x1},${formatter(y11 + thickness / 2)}`\n : '';\n const startArrowPath =\n options.startArrow && hasLength\n ? `L${x0},${formatter(y01 + thickness / 2)}L${formatter(x0 - thickness)},${formatter(\n (y00 + y01) / 2\n )}L${x0},${formatter(y00 - thickness / 2)}`\n : '';\n\n if (options.pathType === 'line') {\n return `M${x0},${y00}L${x1},${y10}${endArrowPath}L${x1},${y11}L${x0},${y01}${startArrowPath}Z`;\n } else if (options.pathType === 'polyline') {\n return `M${x0},${y00}L${cpx0},${y00}L${cpx0},${y10}L${x1},${y10}\n ${endArrowPath}L${x1},${y11}L${cpx0},${y11}L${cpx0},${y01}L${x0},${y01}${startArrowPath}Z`;\n }\n\n return `M${x0},${y00}C${cpx0},${y00},${cpx1},${y10},${x1},${y10}\n ${endArrowPath}L${x1},${y11}C${cpx1},${y11},${cpx0},${y01},${x0},${y01}${startArrowPath}Z`;\n};\n\nexport const getVerticalPath = (options: LinkPathEncoderSpec, ratio?: number) => {\n const curvature = options.curvature ?? 0.5;\n const hasThickness = true;\n const thickness = typeof ratio === 'number' ? options.thickness * ratio : options.thickness;\n let y0 = options.y0;\n let y1 = options.y1;\n let x00 = options.x0;\n let x10 = options.x1;\n let cpy0 = y0 + curvature * (y1 - y0);\n let cpy1 = y1 + curvature * (y0 - y1);\n let formatter = (v: number) => v;\n\n if (options.round !== false) {\n formatter = Math.round;\n y0 = Math.round(y0);\n y1 = Math.round(y1);\n x00 = Math.round(x00);\n x10 = Math.round(x10);\n cpy0 = Math.round(cpy0);\n cpy1 = Math.round(cpy1);\n }\n const leftpath =\n options.pathType === 'line'\n ? `M${x00},${y0}L${x10},${y1}`\n : options.pathType === 'polyline'\n ? `M${x00},${y0}L${x00},${cpy0}L${x10},${cpy0}L${x10},${y1}`\n : `M${x00},${y0}C${x00},${cpy0},${x10},${cpy1},${x10},${y1}`;\n if (!hasThickness) {\n // simplified to a single path\n return leftpath;\n }\n\n if (options.align === 'center') {\n x00 = formatter(options.x0 - thickness / 2);\n x10 = formatter(options.x1 - thickness / 2);\n } else if (options.align === 'end') {\n x00 = formatter(options.x0 + options.thickness / 2 - thickness);\n x10 = formatter(options.x1 + options.thickness / 2 - thickness);\n } else {\n x00 = formatter(options.x0 - options.thickness / 2);\n x10 = formatter(options.x1 - options.thickness / 2);\n }\n\n const x01 = formatter(x00 + thickness);\n const x11 = formatter(x10 + thickness);\n\n const hasLength = Math.abs(y1 - y0) > 1e-6;\n const endArrowPath =\n options.endArrow && hasLength\n ? `L${formatter(x10 - thickness / 2)},${y1}L${formatter((x10 + x11) / 2)},${formatter(\n y1 + thickness\n )}L${formatter(x11 + thickness / 2)},${y1}`\n : '';\n const startArrowPath =\n options.startArrow && hasLength\n ? `L${formatter(x01 + thickness / 2)},${y0}L${formatter((x01 + x00) / 2)},${formatter(\n y0 - thickness\n )}L${formatter(x00 - thickness / 2)},${y0}`\n : '';\n\n if (options.pathType === 'line') {\n return `M${x00},${y0}L${x10},${y1}${endArrowPath}L${x11},${y1}L${x01},${y0}${startArrowPath}Z`;\n } else if (options.pathType === 'polyline') {\n return `M${x00},${y0}L${x00},${cpy0}L${x10},${cpy0}L${x10},${y1}\n ${endArrowPath}L${x11},${y1}L${x11},${cpy0}L${x01},${cpy0}L${x01},${y0}${startArrowPath}Z`;\n }\n\n return `M${x00},${y0}C${x00},${cpy0},${x10},${cpy1},${x10},${y1}\n ${endArrowPath}L${x11},${y1}C${x11},${cpy1},${x01},${cpy0},${x01},${y0}${startArrowPath}Z`;\n};\n\nconst encoder = (encodeValues: LinkPathEncoderSpec, datum: any, element: IElement, config: LinkPathConfig) => {\n const direction = encodeValues.direction ?? config?.direction;\n const parsePath = ['vertical', 'TB', 'BT'].includes(direction) ? getVerticalPath : getHorizontalPath;\n const isRatioShow = typeof encodeValues.ratio === 'number' && encodeValues.ratio >= 0 && encodeValues.ratio <= 1;\n\n const encodeChannels = Object.keys(encodeValues);\n // parse path when all required channels are included\n if (['x0', 'y0', 'x1', 'y1'].every(channel => encodeChannels.includes(channel))) {\n return {\n back: {\n path: isRatioShow ? parsePath(encodeValues, 1) : ''\n },\n front: {\n path: parsePath(encodeValues, isRatioShow ? encodeValues.ratio : 1)\n }\n };\n }\n\n return {};\n};\n\nconst linkPathGrowIn: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const linkValues: LinkPathEncoderSpec = {\n x0: element.getGraphicAttribute('x0', false),\n x1: element.getGraphicAttribute('x1', false),\n y0: element.getGraphicAttribute('y0', false),\n y1: element.getGraphicAttribute('y1', false),\n thickness: element.getGraphicAttribute('thickness', false),\n round: element.getGraphicAttribute('round', false),\n align: element.getGraphicAttribute('align', false),\n pathType: element.getGraphicAttribute('pathType', false),\n endArrow: element.getGraphicAttribute('endArrow', false),\n startArrow: element.getGraphicAttribute('startArrow', false)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(linkValues).forEach(key => {\n if (isNil(linkValues[key])) {\n delete linkValues[key];\n }\n });\n return {\n from: Object.assign({}, linkValues, { x1: linkValues.x0, y1: linkValues.y0 }),\n to: linkValues\n };\n};\n\nconst linkPathGrowOut: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const linkValues: LinkPathEncoderSpec = {\n x0: element.getGraphicAttribute('x0', true),\n x1: element.getGraphicAttribute('x1', true),\n y0: element.getGraphicAttribute('y0', true),\n y1: element.getGraphicAttribute('y1', true),\n thickness: element.getGraphicAttribute('thickness', true),\n round: element.getGraphicAttribute('round', true),\n align: element.getGraphicAttribute('align', true),\n pathType: element.getGraphicAttribute('pathType', true),\n endArrow: element.getGraphicAttribute('endArrow', true),\n startArrow: element.getGraphicAttribute('startArrow', true)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(linkValues).forEach(key => {\n if (isNil(linkValues[key])) {\n delete linkValues[key];\n }\n });\n return {\n from: linkValues,\n to: Object.assign({}, linkValues, { x1: linkValues.x0, y1: linkValues.y0 })\n };\n};\n\nconst linkPathUpdate: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const bassLinkValues = {\n thickness: element.getGraphicAttribute('thickness', false),\n round: element.getGraphicAttribute('round', false),\n align: element.getGraphicAttribute('align', false),\n pathType: element.getGraphicAttribute('pathType', false),\n endArrow: element.getGraphicAttribute('endArrow', false),\n startArrow: element.getGraphicAttribute('startArrow', false)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(bassLinkValues).forEach(key => {\n if (isNil(bassLinkValues[key])) {\n delete bassLinkValues[key];\n }\n });\n const prevLinkValues: LinkPathEncoderSpec = Object.assign(\n {\n x0: element.getGraphicAttribute('x0', true),\n x1: element.getGraphicAttribute('x1', true),\n y0: element.getGraphicAttribute('y0', true),\n y1: element.getGraphicAttribute('y1', true),\n ...bassLinkValues\n },\n bassLinkValues\n );\n const nextLinkValues: LinkPathEncoderSpec = Object.assign(\n {\n x0: element.getGraphicAttribute('x0', false),\n x1: element.getGraphicAttribute('x1', false),\n y0: element.getGraphicAttribute('y0', false),\n y1: element.getGraphicAttribute('y1', false)\n },\n bassLinkValues\n );\n\n return {\n from: prevLinkValues,\n to: nextLinkValues\n };\n};\n\nexport const registerLinkPathGlyph = () => {\n Factory.registerGlyph('linkPath', {\n back: 'path',\n front: 'path'\n })\n .registerFunctionEncoder(encoder)\n .registerChannelEncoder('backgroundStyle', (channel, encodeValue) => {\n return {\n back: encodeValue\n };\n })\n .registerDefaultEncoder(() => {\n return {\n back: { zIndex: 0 },\n front: { zIndex: 1 }\n };\n });\n\n Factory.registerAnimationType('linkPathGrowIn', linkPathGrowIn);\n Factory.registerAnimationType('linkPathGrowOut', linkPathGrowOut);\n Factory.registerAnimationType('linkPathUpdate', linkPathUpdate);\n registerGlyphMark();\n registerGlyphGraphic();\n registerPathGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { ILinkPathMarkSpec } from '../typings/visual';\nimport type { ILinkPathMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLinkPathGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport class LinkPathMark extends BaseMark implements ILinkPathMark {\n static readonly type = MarkTypeEnum.linkPath;\n readonly type = LinkPathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n x0: 0,\n y0: 0,\n x1: 100,\n y1: 100,\n thickness: 1,\n round: true\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'linkPath';\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction: direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerLinkPathMark = () => {\n registerLinkPathGlyph();\n Factory.registerMark(LinkPathMark.type, LinkPathMark as any);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ISankeySeriesSpec, ISankeySeriesTheme } from './interface';\n\nexport class SankeySeriesSpecTransformer<\n T extends ISankeySeriesSpec = ISankeySeriesSpec,\n K extends ISankeySeriesTheme = ISankeySeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.node);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerSankeyTransforms } from '@visactor/vgrammar-sankey';\nimport type { Datum, IRectMarkSpec, ILinkPathMarkSpec, IComposedTextMarkSpec, StringOrNumber } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { ISankeyOpt } from '../../data/transforms/sankey';\nimport { sankeyFormat, sankeyLayout, collectHierarchyField } from '../../data/transforms/sankey';\nimport { sankeyNodes } from '../../data/transforms/sankey-nodes';\nimport { sankeyLinks } from '../../data/transforms/sankey-links';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { Event_Bubble_Level } from '../../constant/event';\nimport { SeriesData } from '../base/series-data';\nimport { SankeySeriesTooltipHelper } from './tooltip-helper';\nimport type { IBounds } from '@visactor/vutils';\nimport { Bounds, array, isNil, isValid, isNumber, isArray } from '@visactor/vutils';\nimport { registerSankeyAnimation } from './animation';\nimport type { ISankeySeriesSpec, SankeyLinkElement, ISankeyLabelSpec, ISankeyAnimationParams } from './interface';\nimport type { ExtendEventParam } from '../../event/interface';\nimport type { IElement, IGlyphElement, IMark as IVgrammarMark } from '@visactor/vgrammar-core';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { registerRectMark } from '../../mark/rect';\nimport { registerTextMark } from '../../mark/text';\nimport { registerLinkPathMark } from '../../mark/link-path';\nimport { sankeySeriesMark } from './constant';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { SankeyNodeElement } from '@visactor/vgrammar-sankey';\nimport { Factory } from '../../core/factory';\nimport type { ILinkPathMark, IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { SankeySeriesSpecTransformer } from './sankey-transformer';\nimport { getFormatFunction } from '../../component/util';\nimport type { ILabelSpec } from '../../component';\n\nexport class SankeySeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.sankey;\n type = SeriesTypeEnum.sankey;\n\n static readonly transformerConstructor = SankeySeriesSpecTransformer as any;\n readonly transformerConstructor = SankeySeriesSpecTransformer;\n\n static readonly mark: SeriesMarkMap = sankeySeriesMark;\n\n private _nodeMark: IRectMark;\n private _linkMark: ILinkPathMark;\n\n private _nodeLayoutZIndex = LayoutZIndex.Node;\n private _labelLayoutZIndex = LayoutZIndex.Label;\n\n protected _nodesSeriesData?: SeriesData;\n protected _linksSeriesData?: SeriesData;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n private _colorScale: IBaseScale;\n private _nodeList: (string | number)[];\n private _needClear: boolean;\n\n get direction() {\n return this._spec.direction ?? 'horizontal';\n }\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? this._spec.categoryField);\n }\n\n initData() {\n super.initData();\n const viewData = this.getViewData();\n const rawData = this.getRawData();\n\n if (rawData && viewData) {\n // 初始化桑基图数据\n registerDataSetInstanceTransform(this._dataSet, 'sankeyLayout', sankeyLayout);\n registerDataSetInstanceTransform(this._dataSet, 'sankeyFormat', sankeyFormat);\n\n rawData.transform(\n {\n type: 'sankeyFormat'\n },\n false\n );\n\n viewData.transform({\n type: 'sankeyLayout',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n sourceField: this._spec.sourceField,\n targetField: this._spec.targetField,\n valueField: this._spec.valueField,\n direction: this.direction,\n crossNodeAlign: this._spec.crossNodeAlign,\n nodeAlign: this._spec.nodeAlign ?? 'justify',\n nodeGap: this._spec.nodeGap ?? 8,\n nodeWidth: this._spec.nodeWidth ?? 10,\n linkWidth: this._spec.linkWidth,\n minStepWidth: this._spec.minStepWidth,\n minNodeHeight: this._spec.minNodeHeight ?? 4,\n maxNodeHeight: this._spec.maxNodeHeight,\n minLinkHeight: this._spec.minLinkHeight,\n maxLinkHeight: this._spec.maxLinkHeight,\n iterations: this._spec.iterations,\n nodeKey: this._spec.nodeKey,\n linkSortBy: this._spec.linkSortBy,\n nodeSortBy: this._spec.nodeSortBy,\n setNodeLayer: this._spec.setNodeLayer,\n dropIsolatedNode: this._spec.dropIsolatedNode,\n nodeHeight: this._spec.nodeHeight,\n linkHeight: this._spec.linkHeight,\n equalNodeHeight: this._spec.equalNodeHeight,\n linkOverlap: this._spec.linkOverlap,\n inverse: this._spec.inverse\n } as ISankeyOpt,\n level: TransformLevel.sankeyLayout\n });\n\n // 注册扁平化算法\n const { dataSet } = this._option;\n registerDataSetInstanceTransform(dataSet, 'sankeyNodes', sankeyNodes);\n registerDataSetInstanceTransform(dataSet, 'flatten', flatten);\n const nodesDataView = new DataView(dataSet, { name: `sankey-node-${this.id}-data` });\n nodesDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n nodesDataView.transform({\n type: 'sankeyNodes'\n });\n // sankeyNode进行扁平化处理(针对层级数据)\n nodesDataView.transform(\n {\n type: 'flatten',\n options: {\n callback: (node: SankeyNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n },\n false\n );\n\n nodesDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._nodesSeriesData = new SeriesData(this._option, nodesDataView);\n\n registerDataSetInstanceTransform(dataSet, 'sankeyLinks', sankeyLinks);\n const linksDataView = new DataView(dataSet, { name: `sankey-link-${this.id}-data` });\n linksDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n linksDataView.transform({\n type: 'sankeyLinks'\n });\n\n linksDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n this._linksSeriesData = new SeriesData(this._option, linksDataView);\n }\n }\n\n compileData() {\n super.compileData();\n this._linksSeriesData?.compile();\n this._nodesSeriesData?.compile();\n }\n\n initMark(): void {\n // 为了让sankey 正常的滚动,interactive 需要设置为true,不然在空白处会滚动不了\n this._rootMark.setMarkConfig({\n overflow: this._spec.overflow,\n interactive: !!this._spec.overflow\n });\n const nodeMark = this._createMark(\n SankeySeries.mark.node,\n {\n isSeriesMark: true,\n dataView: this._nodesSeriesData.getDataView(),\n dataProductId: this._nodesSeriesData.getProductId(),\n stateSort: this._spec.node?.stateSort\n },\n {\n setCustomizedShape: this._spec.node?.customShape\n }\n ) as IRectMark;\n if (nodeMark) {\n nodeMark.setMarkConfig({ zIndex: this._nodeLayoutZIndex });\n this._nodeMark = nodeMark;\n }\n\n const linkMark = this._createMark(\n SankeySeries.mark.link,\n {\n dataView: this._linksSeriesData.getDataView(),\n dataProductId: this._linksSeriesData.getProductId(),\n stateSort: this._spec.link?.stateSort\n },\n {\n setCustomizedShape: this._spec.link?.customShape\n }\n ) as ILinkPathMark;\n if (linkMark) {\n this._linkMark = linkMark;\n }\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n\n this._markAttributeContext.valueToNode = this.valueToNode.bind(this);\n this._markAttributeContext.valueToLink = this.valueToLink.bind(this);\n }\n\n valueToNode(value: StringOrNumber | StringOrNumber[]) {\n const nodes = this._nodesSeriesData.getLatestData();\n const specifyValue = array(value)[0];\n return nodes && nodes.find((node: SankeyNodeElement) => node.key === specifyValue);\n }\n\n valueToLink(value: StringOrNumber | StringOrNumber[]) {\n const links = this._linksSeriesData.getLatestData();\n const specifyValue = array(value);\n\n return (\n links &&\n links.find(\n (link: SankeyLinkElement) => link && link.source === specifyValue[0] && link.target === specifyValue[1]\n )\n );\n }\n\n valueToPositionX(value: StringOrNumber | StringOrNumber[]) {\n const node = this.valueToNode(value);\n\n return node?.x0;\n }\n valueToPositionY(value: StringOrNumber | StringOrNumber[]) {\n const node = this.valueToNode(value);\n\n return node?.y0;\n }\n\n initMarkStyle(): void {\n this._initNodeMarkStyle();\n this._initLinkMarkStyle();\n }\n\n protected _initNodeMarkStyle() {\n const nodeMark = this._nodeMark;\n if (!nodeMark) {\n return;\n }\n\n this.setMarkStyle(\n nodeMark,\n {\n x: (datum: Datum) => {\n return datum.x0;\n },\n x1: (datum: Datum) => datum.x1,\n y: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Mark\n );\n\n this.setMarkStyle(\n nodeMark,\n {\n fill: this._spec.node.style?.fill ?? this._fillByNode\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n protected _fillByNode = (datum: Datum) => {\n if (datum && datum.sourceRect && datum.targetRect) {\n return this._fillByLink(datum);\n }\n\n const fill = this._spec.node?.style?.fill;\n\n if (isValid(fill)) {\n return fill;\n } else if (isValid(this._spec.seriesField)) {\n const colorScale = this._option?.globalScale?.getScale('color');\n const nodeDatum = datum?.datum ? datum.datum : datum;\n\n return colorScale?.scale(nodeDatum?.[this._spec.seriesField]);\n }\n\n return this._colorScale?.scale(this._getNodeNameFromData(datum));\n };\n\n protected _fillByLink = (datum: Datum) => {\n const fill = this._spec.link?.style?.fill;\n\n if (fill) {\n return fill;\n } else if (isValid(this._spec.seriesField)) {\n const sourceNode = this._nodesSeriesData?.getLatestData()?.find((entry: any) => datum.source === entry.key);\n const nodeDatum = sourceNode?.datum;\n const colorScale = this._option?.globalScale?.getScale('color');\n\n return colorScale?.scale(nodeDatum?.[this._spec.seriesField]);\n }\n\n const sourceName = isNumber(datum.source) ? this.getNodeList()[datum.source] : datum.source;\n return this._colorScale?.scale(sourceName);\n };\n\n protected _initLinkMarkStyle() {\n const linkMark = this._linkMark;\n if (!linkMark) {\n return;\n }\n\n this.setMarkStyle(\n linkMark,\n {\n x0: (datum: Datum) => datum.x0,\n x1: (datum: Datum) => datum.x1,\n y0: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n thickness: (datum: Datum) => datum.thickness,\n direction: this.direction\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n linkMark,\n {\n fill: this._spec.link.style?.fill ?? this._fillByLink\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n initLabelMarkStyle(labelMark: ITextMark, labelSpec: ILabelSpec) {\n if (!labelMark) {\n return;\n }\n const position = labelSpec.position;\n\n if (position && position.includes('inside')) {\n this.setMarkStyle(labelMark, {\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum, labelSpec as ISankeyLabelSpec),\n maxLineWidth: (datum: Datum) => (labelSpec as ISankeyLabelSpec).limit ?? datum.x1 - datum.x0\n });\n } else {\n this.setMarkStyle(labelMark, {\n fill: this._fillByNode,\n text: (datum: Datum) => this._createText(datum, labelSpec as ISankeyLabelSpec),\n maxLineWidth: (labelSpec as ISankeyLabelSpec).limit\n });\n }\n\n labelMark.setMarkConfig({ zIndex: this._labelLayoutZIndex });\n }\n\n private _createText(datum: Datum, labelSpec: ISankeyLabelSpec) {\n if (isNil(datum) || isNil(datum.datum)) {\n return '';\n }\n let text = datum.datum[this._spec.categoryField] || '';\n const { formatMethod, formatter } = labelSpec || {};\n\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, text, datum.datum);\n if (formatFunc) {\n text = formatFunc(...args, { series: this });\n }\n return text;\n }\n\n initAnimation() {\n const animationParams: ISankeyAnimationParams = {\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._nodeMark) {\n this._nodeMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyNode')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.node, this._spec, this._markAttributeContext)\n )\n );\n }\n if (this._linkMark) {\n this._linkMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyLinkPath')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.link, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n\n this._nodesSeriesData.getDataView()?.target.addListener('change', this.nodesSeriesDataUpdate.bind(this));\n this._linksSeriesData.getDataView()?.target.addListener('change', this.linksSeriesDataUpdate.bind(this));\n const emphasisSpec = this._spec.emphasis ?? ({} as T['emphasis']);\n // 没有关闭交互时,才增加这些交互事件\n if (this._option.disableTriggerEvent !== true) {\n if (emphasisSpec.enable && (emphasisSpec.effect === 'adjacency' || emphasisSpec.effect === 'related')) {\n const event = emphasisSpec.trigger === 'hover' ? 'pointerover' : 'pointerdown';\n\n this.event.on(event, { level: Event_Bubble_Level.chart }, this._handleEmphasisElement);\n }\n }\n }\n\n private nodesSeriesDataUpdate() {\n this._nodesSeriesData.updateData();\n\n this._nodeList = null;\n this._setNodeOrdinalColorScale();\n }\n\n private linksSeriesDataUpdate() {\n this._linksSeriesData.updateData();\n }\n\n protected _handleEmphasisElement = (params: ExtendEventParam) => {\n const emphasisSpec = this._spec.emphasis ?? ({} as T['emphasis']);\n\n const element = params.item;\n\n if (emphasisSpec.effect === 'adjacency') {\n if (element && element.mark === this._nodeMark?.getProduct()) {\n this._handleNodeAdjacencyClick(element);\n } else if (element && element.mark === this._linkMark?.getProduct()) {\n this._handleLinkAdjacencyClick(element);\n } else {\n this._handleClearEmpty();\n }\n } else if (emphasisSpec.effect === 'related') {\n if (element && element.mark === this._nodeMark?.getProduct()) {\n this._handleNodeRelatedClick(element);\n } else if (element && element.mark === this._linkMark?.getProduct()) {\n this._handleLinkRelatedClick(element);\n } else {\n this._handleClearEmpty();\n }\n }\n };\n\n protected _handleClearEmpty = () => {\n if (!this._needClear) {\n return;\n }\n\n const allNodeElements = this._nodeMark?.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n\n const allLinkElements = this._linkMark?.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const states = [STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE];\n\n allNodeElements.forEach(el => {\n el.removeState(states);\n });\n allLinkElements.forEach(el => {\n el.removeState(states);\n });\n\n this._needClear = false;\n };\n\n protected _handleNodeAdjacencyClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const highlightNodes: string[] = [nodeDatum.key];\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n\n if (linkDatum.source === nodeDatum.key) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS); // 设置上用户配置选中状态\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS); // 设置上用户配置选中状态\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _handleLinkAdjacencyClick = (element: IGlyphElement) => {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n allLinkElements.forEach(linkEl => {\n if (linkEl === element) {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: 1 });\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _handleNodeRelatedClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const allNodeElements = this._nodeMark.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const father = allLinkElements[0].getDatum()?.parents ? 'parents' : 'source';\n\n if (father === 'source') {\n // node-link 型数据\n const highlightNodes: string[] = [nodeDatum.key];\n const highlightLinks: string[] = [];\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n const father = linkDatum?.parents ? 'parents' : 'source';\n\n if (array(linkDatum[father]).includes(nodeDatum.key)) {\n // 下游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n // 下游link的目标节点\n const targetNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.target;\n });\n\n // 以下游link的目标节点为起点的links\n let targetNodeSourceLinks: any[] = targetNode.data[0].sourceLinks as any[];\n while (targetNodeSourceLinks?.length > 0) {\n const newTargetNodeSourceLinks: any[] = [];\n targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum: any) => {\n if (!highlightLinks.includes(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index)) {\n highlightLinks.push(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index);\n // 该links的目标节点\n if (!highlightNodes.includes(targetNodeSourceLinkDatum.target)) {\n highlightNodes.push(targetNodeSourceLinkDatum.target);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === targetNodeSourceLinkDatum.target;\n });\n // 以该目标节点为起点的links\n newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n targetNodeSourceLinks = newTargetNodeSourceLinks;\n return;\n }\n }\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n const sourceNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.source;\n });\n let sourceNodeTargetLinks: any[] = sourceNode.data[0].targetLinks as any;\n while (sourceNodeTargetLinks?.length > 0) {\n const newSourceNodeTargetLinks: any[] = [];\n sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum: any) => {\n if (!highlightLinks.includes(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index)) {\n highlightLinks.push(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index);\n if (!highlightNodes.includes(sourceNodeTargetLinkDatum.source)) {\n highlightNodes.push(sourceNodeTargetLinkDatum.source);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === sourceNodeTargetLinkDatum.source;\n });\n newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n sourceNodeTargetLinks = newSourceNodeTargetLinks;\n return;\n }\n }\n }\n });\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n if (highlightLinks.includes(linkEl.getDatum().key ?? linkEl.getDatum().index)) {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n } else {\n // 层级型数据\n const highlightNodes: string[] = [nodeDatum.key];\n\n const upstreamLinks = nodeDatum.targetLinks.reduce((res: any[], link: any) => {\n const dividedLinks = array((link as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = dividedLink.parents;\n const len = parents.length;\n\n for (let i = 0; i < len; i++) {\n const source = parents[i].key;\n const target = parents[i + 1] ? parents[i + 1].key : nodeDatum.key;\n const value = dividedLink.value;\n\n // 检查 res 数组中是否已存在相同的 source 和 target\n const existingItem = res.find(item => item.source === source && item.target === target);\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 res 数组中\n res.push({ source, target, value });\n }\n }\n });\n return res;\n }, []);\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n const originalDatum = linkDatum.datum;\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => entry[father].some((par: any) => par.key === nodeDatum.key))\n : null;\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum.reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio }); // 设置默认的部分高亮\n\n return;\n }\n\n if (upSelectedLink) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: upSelectedLink.value / linkDatum.value }); // 设置默认的部分高亮\n\n return;\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n\n return;\n });\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n }\n\n this._needClear = true;\n };\n\n protected _handleLinkRelatedClick = (element: IGlyphElement) => {\n const allNodeElements = this._nodeMark.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const father = element.getDatum()?.parents ? 'parents' : 'source';\n if (father === 'source') {\n const states = [STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE];\n if (this._linkMark) {\n allLinkElements.forEach(linkEl => {\n linkEl.removeState(states);\n });\n }\n\n if (this._nodeMark) {\n allNodeElements.forEach(el => {\n el.removeState(states);\n });\n }\n } else {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n const upstreamLinks: Array<{ source: string; target: string; value: number }> = [];\n\n const dividedLinks = array((curLinkDatum as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = (dividedLink as any).parents;\n const len = parents.length;\n for (let i = 0; i < len - 1; i++) {\n const source = parents[i].key;\n const target = parents[i + 1].key;\n const value = dividedLink.value;\n\n // 检查 upstreamLinks 数组中是否已存在相同的 source 和 target\n const existingItem = upstreamLinks.find(item => item.source === source && item.target === target);\n upstreamLinks.push({\n source: parents[i].key,\n target: parents[i + 1].key,\n value: dividedLink.value\n });\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 upstreamLinks 数组中\n upstreamLinks.push({ source, target, value });\n }\n }\n });\n\n allLinkElements.forEach(linkEl => {\n const linkDatum = linkEl.getDatum();\n const originalDatum = linkDatum.datum;\n\n if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) {\n // 自身\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: 1 });\n return;\n }\n\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => {\n const parentKeysList = entry.parents.map((item: any) => item.key);\n return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);\n })\n : null;\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum\n .filter((entry: any) => {\n return entry.parents.some((par: any, index: number) => {\n return par.key === curLinkDatum.source && entry.parents[index + 1]?.key === curLinkDatum.target;\n });\n })\n .reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio }); // 设置默认的部分高亮\n\n return;\n }\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (upSelectedLink) {\n // 点击节点的上游一层的节点\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: upSelectedLink.value / linkDatum.value }); // 设置默认的部分高亮\n\n return;\n }\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n\n return;\n });\n\n this._highLightElements(allNodeElements, highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _highLightElements(vGrammarElements: IVgrammarMark['elements'], highlightNodes: string[]) {\n if (!vGrammarElements || !vGrammarElements.length) {\n return;\n }\n\n vGrammarElements.forEach(el => {\n el.removeState([STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS]);\n\n if (highlightNodes.includes(el.getDatum().key)) {\n el.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n } else {\n el.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n protected initTooltip() {\n this._tooltipHelper = new SankeySeriesTooltipHelper(this);\n this._nodeMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodeMark);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n }\n\n _setNodeOrdinalColorScale() {\n const colorScale = this._option?.globalScale?.getScale('color');\n\n if ((colorScale as any)?._specified) {\n this._colorScale = colorScale;\n return;\n }\n\n let colorDomain: string[];\n let colorRange: string[];\n\n if (colorScale) {\n colorDomain = colorScale.domain();\n colorRange = colorScale.range();\n }\n\n if (!colorRange) {\n colorRange = this._getDataScheme() as unknown as string[];\n }\n\n if (!colorDomain || isNil(colorDomain[0])) {\n // no validate domain\n colorDomain = this.getNodeList();\n\n if (colorDomain.length > 10) {\n colorRange = (this._getDataScheme()[1] as any)?.scheme;\n }\n }\n\n const ordinalScale = new ColorOrdinalScale();\n\n ordinalScale.domain(colorDomain).range?.(colorRange);\n\n this._colorScale = ordinalScale;\n return;\n }\n\n getNodeList() {\n if (this._nodeList) {\n return this._nodeList;\n }\n\n const data = this._rawData.latestData[0];\n\n const nodeList = data?.nodes\n ? data.nodes[0]?.children\n ? Array.from(this.extractNamesFromTree(data.nodes, this._spec.categoryField))\n : data.nodes.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n })\n : data?.links\n ? Array.from(this.extractNamesFromLink(data.links))\n : data?.values?.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n });\n\n this._nodeList = nodeList;\n\n return nodeList;\n }\n\n _getNodeNameFromData(datum: Datum) {\n return datum?.datum ? datum.datum[this._spec.categoryField] : datum.key ?? datum[this._spec.categoryField];\n }\n\n extractNamesFromTree(tree: any, categoryName: string) {\n // Set 用于存储唯一的 name 值\n const uniqueNames = new Set();\n\n // 遍历当前节点的子节点\n tree.forEach((node: any) => {\n // 将当前节点的 name 值添加到 Set 中\n uniqueNames.add(node[categoryName]);\n\n // 如果当前节点还有子节点,则递归调用该函数继续遍历子节点\n if (node.children) {\n const childNames = this.extractNamesFromTree(node.children, categoryName);\n childNames.forEach(name => uniqueNames.add(name));\n }\n });\n\n return uniqueNames;\n }\n\n extractNamesFromLink(links: any[]) {\n // Set 用于存储唯一的 name 值\n const uniqueNames = new Set();\n const { sourceField, targetField } = this._spec;\n\n // 遍历所有的边\n links.forEach((link: any) => {\n isValid(link[sourceField]) && uniqueNames.add(link[sourceField]);\n isValid(link[targetField]) && uniqueNames.add(link[targetField]);\n });\n\n return uniqueNames;\n }\n\n getDimensionField() {\n return [this._spec.categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n // overwrite the getRawDataStatisticsByField of base-series\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n const canUseViewStatistics = this._viewDataStatistics && this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n this._rawStatisticsCache[field] = {\n values: this._collectByField(field)\n };\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n private _collectByField(field: string): string[] {\n const keyArray: any[] = [];\n const rawData = this.getRawData()?.latestData?.[0];\n\n if (!rawData) {\n return [];\n }\n\n if ((rawData as any).links) {\n //node-link型数据\n if ((rawData as any).nodes?.length) {\n (rawData as any).nodes.forEach((node: any) => {\n if (node[this._seriesField]) {\n keyArray.push(node[this._seriesField]);\n }\n });\n }\n } else if ((rawData as any).nodes) {\n const set = new Set();\n // 层级型数据\n collectHierarchyField(set, (rawData as any).nodes, this._seriesField);\n\n return Array.from(set);\n }\n\n return keyArray;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n\n // calculate the sankeyLayout\n this.getViewData().reRunAllTransform();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._nodeMark, this._linkMark];\n }\n\n getMarkData(datum: Datum) {\n if (datum.datum) {\n if (isArray(datum.datum)) {\n return datum.datum[datum.datum.length - 1];\n }\n return datum.datum;\n }\n return datum;\n }\n}\n\nexport const registerSankeySeries = () => {\n registerSankeyTransforms();\n registerRectMark();\n registerLinkPathMark();\n registerTextMark();\n registerSankeyAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(SankeySeries.type, SankeySeries);\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISankeyChartSpec } from './interface';\n\nexport class SankeyChartSpecTransformer<\n T extends ISankeyChartSpec = ISankeyChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'sourceField',\n 'targetField',\n 'direction',\n 'nodeAlign',\n 'crossNodeAlign',\n 'nodeGap',\n 'nodeWidth',\n 'linkWidth',\n 'minStepWidth',\n 'minNodeHeight',\n 'maxNodeHeight',\n 'minLinkHeight',\n 'maxLinkHeight',\n 'dropIsolatedNode',\n 'nodeHeight',\n 'linkHeight',\n 'equalNodeHeight',\n 'linkOverlap',\n 'iterations',\n 'nodeKey',\n 'linkSortBy',\n 'nodeSortBy',\n 'setNodeLayer',\n 'node',\n 'link',\n 'emphasis',\n 'inverse',\n 'overflow'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","const clampRange = (range: [number, number], min: number, max: number): [number, number] => {\n let [lowValue, highValue] = range;\n\n if (highValue < lowValue) {\n lowValue = range[1];\n highValue = range[0];\n }\n const span = highValue - lowValue;\n\n if (span >= max - min) {\n return [min, max];\n }\n\n lowValue = Math.min(Math.max(lowValue, min), max - span);\n\n return [lowValue, lowValue + span];\n};\n\nexport default clampRange;\n","import { registerGroup, registerRect } from '@visactor/vrender-kits';\n\nexport function loadScrollbarComponent() {\n registerGroup();\n registerRect();\n}\n","/**\n * @description 滚动条组件\n */\nimport type { IRectGraphicAttribute, FederatedPointerEvent, IGroup, IRect } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport { merge, normalizePadding, clamp, clampRange, debounce, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\n\nimport type { ScrollBarAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadScrollbarComponent } from './register';\nimport { SCROLLBAR_EVENT } from '../constant';\n\ntype ComponentBounds = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n width: number;\n height: number;\n};\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadScrollbarComponent();\n\nexport class ScrollBar extends AbstractComponent> {\n name = 'scrollbar';\n\n static defaultAttributes = {\n direction: 'horizontal',\n round: true,\n sliderSize: 20,\n sliderStyle: {\n fill: 'rgba(0, 0, 0, .5)'\n },\n railStyle: {\n fill: 'rgba(0, 0, 0, .0)'\n },\n padding: 2,\n scrollRange: [0, 1],\n delayType: 'throttle',\n delayTime: 0,\n realTime: true\n };\n\n private _container!: IGroup;\n // 滚动条滑块\n private _slider!: IRect;\n // 滚动条滑轨\n private _rail!: IRect;\n // 滑块可渲染的区域包围盒\n private _sliderRenderBounds!: ComponentBounds | null;\n // 滑块滑动的范围\n private _sliderLimitRange!: [number, number] | null;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // TODO: 临时方案\n private _viewPosition!: { x: number; y: number };\n private _sliderSize!: number;\n\n constructor(attributes: ScrollBarAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ScrollBar.defaultAttributes, attributes));\n }\n\n setScrollRange(range: [number, number], render = true) {\n const {\n direction = 'horizontal',\n limitRange = [0, 1],\n range: preRange,\n realTime = true\n } = this.attribute as ScrollBarAttributes;\n\n const currScrollRange = clampRange(range, limitRange[0], limitRange[1]);\n if (render) {\n // 更新图形\n const sliderPos = this._getSliderPos(currScrollRange);\n if (this._slider) {\n const sliderSize = sliderPos[1] - sliderPos[0];\n this._sliderSize = sliderSize;\n\n if (direction === 'horizontal') {\n this._slider.setAttributes(\n {\n x: sliderPos[0],\n width: sliderSize\n },\n true\n );\n } else {\n this._slider.setAttributes(\n {\n y: sliderPos[0],\n height: sliderSize\n },\n true\n );\n }\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n }\n }\n (this.attribute as ScrollBarAttributes).range = currScrollRange;\n // 发射 change 事件\n if (realTime) {\n this._dispatchEvent(SCROLLBAR_EVENT, {\n pre: preRange,\n value: currScrollRange\n });\n }\n }\n\n getScrollRange(): [number, number] {\n return (this.attribute as ScrollBarAttributes).range;\n }\n\n // public setLocation(point: PointLocationCfg) {\n // this.translateTo(point.x, point.y);\n // }\n\n // 绑定事件\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { delayType = 'throttle', delayTime = 0 } = this.attribute as ScrollBarAttributes;\n // TODO: wheel 事件支持\n if (this._rail) {\n this._rail.addEventListener(\n 'pointerdown',\n delayMap[delayType](this._onRailPointerDown, delayTime) as EventListener\n );\n }\n if (this._slider) {\n this._slider.addEventListener('pointerdown', this._onSliderPointerDown as EventListener);\n }\n }\n\n protected render() {\n this._reset();\n const {\n direction = 'horizontal',\n width,\n height,\n range,\n limitRange = [0, 1],\n // sliderSize = 20,\n // scrollValue = 0,\n // scrollRange = [0, 1],\n railStyle,\n sliderStyle,\n padding = 2\n } = this.attribute as ScrollBarAttributes;\n\n const group = this.createOrUpdateChild('scrollbar-container', {}, 'group') as IGroup;\n // 绘制轨道\n\n const rail = group.createOrUpdateChild(\n 'scrollbar-rail',\n {\n x: 0,\n y: 0,\n width,\n height,\n ...railStyle\n },\n 'rect'\n ) as IRect;\n this._rail = rail;\n\n // 滑块\n const sliderRenderBounds = this.getSliderRenderBounds();\n const sliderPos = this._getSliderPos(clampRange(range, limitRange[0], limitRange[1]));\n const sliderSize = sliderPos[1] - sliderPos[0];\n this._sliderSize = sliderSize;\n // const sliderRangePos = this._getScrollRange();\n\n let sliderAttribute: IRectGraphicAttribute;\n if (direction === 'horizontal') {\n sliderAttribute = {\n x: sliderPos[0],\n y: sliderRenderBounds.y1,\n width: sliderSize,\n height: sliderRenderBounds.height\n };\n } else {\n sliderAttribute = {\n x: sliderRenderBounds.x1,\n y: sliderPos[0],\n width: sliderRenderBounds.width,\n height: sliderSize\n };\n }\n\n const slider = group.createOrUpdateChild(\n 'slider',\n {\n ...sliderAttribute,\n cornerRadius: this._getDefaultSliderCornerRadius(),\n ...sliderStyle,\n boundsPadding: normalizePadding(padding),\n pickMode: 'imprecise'\n },\n 'rect'\n ) as IRect;\n this._slider = slider;\n this._container = group;\n\n const containerAABBBounds = this._container.AABBBounds;\n this._viewPosition = {\n x: containerAABBBounds.x1,\n y: containerAABBBounds.y1\n };\n }\n\n // 获取滑块渲染的包围盒区域\n getSliderRenderBounds() {\n if (this._sliderRenderBounds) {\n return this._sliderRenderBounds;\n }\n const { width, height, padding = 2 } = this.attribute as ScrollBarAttributes;\n const [top, right, bottom, left] = normalizePadding(padding);\n const renderBounds = {\n x1: left,\n y1: top,\n x2: width - right,\n y2: height - bottom,\n width: Math.max(0, width - (left + right)),\n height: Math.max(0, height - (top + bottom))\n };\n this._sliderRenderBounds = renderBounds;\n return renderBounds;\n }\n\n // 获取默认的滑块圆角\n private _getDefaultSliderCornerRadius() {\n const { direction, round } = this.attribute as ScrollBarAttributes;\n\n if (round) {\n const { width, height } = this.getSliderRenderBounds();\n return direction === 'horizontal' ? height : width;\n }\n\n return 0;\n }\n\n // 计算滑块在轨道的位置\n private _getSliderPos(range: [number, number]) {\n const { direction } = this.attribute as ScrollBarAttributes;\n const { width, height, x1, y1 } = this.getSliderRenderBounds();\n\n if (direction === 'horizontal') {\n return [width * range[0] + x1, width * range[1] + x1];\n }\n return [height * range[0] + y1, height * range[1] + y1];\n }\n\n private _getScrollRange() {\n if (this._sliderLimitRange) {\n return this._sliderLimitRange;\n }\n const { limitRange = [0, 1], direction } = this.attribute as ScrollBarAttributes;\n const [min, max] = clampRange(limitRange, 0, 1);\n const { width, height, x1, y1 } = this.getSliderRenderBounds();\n const sliderSize = this._sliderSize;\n\n return direction === 'horizontal'\n ? clampRange([x1 + min * width, x1 + max * width], x1, width - sliderSize)\n : clampRange([y1 + min * height, y1 + max * height], y1, height - sliderSize);\n }\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n // 将事件坐标转换为实际的滑块位置\n // TODO: 这里有问题,应该拿 viewX viewY,同时 graphic 要提供接口获取它的 相对 view 的坐标\n const { viewX, viewY } = e;\n const { direction, width, height, range } = this.attribute as ScrollBarAttributes;\n const sliderSize = this._sliderSize;\n const [min, max] = this._getScrollRange();\n let currentScrollValue;\n if (direction === 'vertical') {\n const relativeY = viewY - this._viewPosition.y;\n const currentYPos = clamp(relativeY - sliderSize / 2, min, max);\n currentScrollValue = relativeY / height;\n this._slider.setAttribute('y', currentYPos, true);\n } else {\n const relativeX = viewX - this._viewPosition.x;\n const currentXPos = clamp(relativeX - sliderSize / 2, min, max);\n currentScrollValue = relativeX / width;\n this._slider.setAttribute('x', currentXPos, true);\n }\n\n this.setScrollRange(\n [currentScrollValue - (range[1] - range[0]) / 2, currentScrollValue + (range[1] - range[0]) / 2],\n false\n );\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n };\n\n private _onSliderPointerDown = (e: FederatedPointerEvent) => {\n const { stopSliderDownPropagation = true } = this.attribute as ScrollBarAttributes;\n if (stopSliderDownPropagation) {\n e.stopPropagation();\n }\n const { direction } = this.attribute as ScrollBarAttributes;\n const { x, y } = this.stage.eventPointTransform(e);\n this._prePos = direction === 'horizontal' ? x : y;\n this._dispatchEvent('scrollDown', {\n pos: this._prePos,\n event: e\n });\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n vglobal.addEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n this.stage.addEventListener('pointerup', this._onSliderPointerUp);\n this.stage.addEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _computeScrollValue = (e: any) => {\n const { direction } = this.attribute as ScrollBarAttributes;\n const { x, y } = this.stage.eventPointTransform(e);\n\n let currentScrollValue;\n let currentPos;\n let delta = 0;\n\n const { width, height } = this.getSliderRenderBounds();\n if (direction === 'vertical') {\n currentPos = y;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / height;\n } else {\n currentPos = x;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / width;\n }\n return [currentPos, currentScrollValue];\n };\n\n private _onSliderPointerMove = (e: any) => {\n const { stopSliderMovePropagation = true } = this.attribute as ScrollBarAttributes;\n if (stopSliderMovePropagation) {\n e.stopPropagation();\n }\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n this.setScrollRange([preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue], true);\n this._prePos = currentPos;\n };\n\n private _onSliderPointerMoveWithDelay =\n this.attribute.delayTime === 0\n ? this._onSliderPointerMove\n : delayMap[this.attribute.delayType](this._onSliderPointerMove, this.attribute.delayTime);\n\n private _onSliderPointerUp = (e: any) => {\n e.preventDefault();\n const { realTime = true, range: preRange, limitRange = [0, 1] } = this.attribute as ScrollBarAttributes;\n // 发射 change 事件\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n const range: [number, number] = [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue];\n\n this._dispatchEvent('scrollUp', {\n pre: preRange,\n value: clampRange(range, limitRange[0], limitRange[1])\n });\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n vglobal.removeEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n this.stage.removeEventListener('pointerup', this._onSliderPointerUp);\n this.stage.removeEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _reset() {\n this._sliderRenderBounds = null;\n this._sliderLimitRange = null;\n }\n}\n","import type { IGraphic, IGroup, IPlugin, IPluginService } from '@visactor/vrender-core';\nimport { Generator, injectable } from '@visactor/vrender-core';\nimport { ScrollBar } from './scrollbar';\nimport type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds, abs, Bounds } from '@visactor/vutils';\nimport { SCROLLBAR_EVENT } from '../constant';\nimport type { ScrollBarAttributes } from './type';\n\n// _showPoptip: 0-没有,1-添加,2-删除\n\ntype IParams = {\n timeout?: number; // 消失的timeout\n bufferV?: number; // 判定是否出现滚动条的buffer\n bufferH?: number; // 判定是否出现滚动条的buffer\n};\n\n@injectable()\nexport class ScrollBarPlugin implements IPlugin {\n name: 'scrollbar' = 'scrollbar';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n scrollContainer?: { g: IGroup; showH: boolean; showV: boolean };\n scrollContainerBounds: IAABBBounds;\n childrenBounds: IAABBBounds;\n\n static defaultParams: IParams = {\n timeout: 500\n };\n\n params: IParams;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n this.childrenBounds = new AABBBounds();\n stage.addEventListener('wheel', this.scroll as any);\n this.params = ScrollBarPlugin.defaultParams;\n }\n scroll = (e: { deltaX: number; deltaY: number; target: IGraphic }) => {\n // 计算子元素的bounds\n const graphic = e.target as any;\n // childrenBounds.set(0, 0, scrollContainer.AABBBounds.width(), scrollContainer.AABBBounds.height());\n\n const data = this.getScrollContainer(graphic);\n\n if (!data && !this.scrollContainer) {\n return;\n }\n\n if (!data && this.scrollContainer) {\n if (!this.scrollContainer.g.stage || this.scrollContainer.g.stage !== graphic.stage) {\n return;\n }\n const newScrollContainer = this.formatScrollContainer(this.scrollContainer.g);\n\n if (!newScrollContainer) {\n this.clearScrollbar(this.scrollContainer.g, 'all');\n // 删除老的scrollbar\n return;\n }\n if (this.scrollContainer.showH && !newScrollContainer.showH) {\n this.clearScrollbar(this.scrollContainer.g, 'horizontal');\n }\n\n if (this.scrollContainer.showV && !newScrollContainer.showV) {\n this.clearScrollbar(this.scrollContainer.g, 'vertical');\n }\n\n this.scrollContainer = newScrollContainer;\n } else if (data && this.scrollContainer && data.g !== this.scrollContainer.g) {\n this.clearScrollbar(this.scrollContainer.g, 'all');\n }\n\n this.scrollContainer = data ?? this.scrollContainer;\n if (!data) {\n return;\n }\n const scrollContainer = data.g;\n if (!scrollContainer) {\n return;\n }\n const { width, height, scrollX = 0, scrollY = 0 } = scrollContainer.attribute;\n let newScrollX = scrollX;\n let newScrollY = scrollY;\n let { showH, showV } = data;\n this.scrollContainerBounds = new Bounds().set(\n 0,\n 0,\n scrollContainer.attribute.width,\n scrollContainer.attribute.height\n );\n if (showH && showH) {\n if (abs(e.deltaX) > abs(e.deltaY)) {\n showH = showH && true;\n showV = showV && false;\n } else {\n showH = showH && false;\n showV = showV && true;\n }\n }\n\n const scrollWidth = this.childrenBounds.width();\n const scrollHeight = this.childrenBounds.height();\n\n if (showH) {\n newScrollX = scrollX - (e.deltaX ?? 0);\n if (newScrollX > 0) {\n newScrollX = 0;\n } else if (newScrollX < width - scrollWidth) {\n newScrollX = width - scrollWidth;\n }\n }\n\n if (showV) {\n newScrollY = scrollY - (e.deltaY ?? 0);\n if (newScrollY > 0) {\n newScrollY = 0;\n } else if (newScrollY < height - scrollHeight) {\n newScrollY = height - scrollHeight;\n }\n }\n\n scrollContainer.setAttributes({\n scrollX: newScrollX,\n scrollY: newScrollY\n });\n this.addOrUpdateScroll(showH, showV, scrollContainer.parent, scrollContainer);\n };\n\n handleScrollBarChange = (params: any) => {\n if (\n !this.scrollContainer ||\n !this.scrollContainerBounds ||\n !this.childrenBounds ||\n !params ||\n !params.target ||\n !params.detail ||\n !params.detail.value\n ) {\n return;\n }\n const scrollbar = params.target;\n const newRange = params.detail.value;\n\n if (scrollbar.attribute.direction === 'horizontal') {\n const scrollWidth = this.childrenBounds.width();\n\n this.scrollContainer.g.setAttributes({ scrollX: -newRange[0] * scrollWidth });\n } else {\n const scrollHeight = this.childrenBounds.height();\n\n this.scrollContainer.g.setAttributes({ scrollY: -newRange[0] * scrollHeight });\n }\n };\n\n initEventOfScrollbar(scrollContainer: IGroup, scrollbar: IGroup, isHorozntal?: boolean) {\n scrollContainer.addEventListener('pointerover', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollContainer.addEventListener('pointermove', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollContainer.addEventListener('pointerout', () => {\n scrollbar.setAttribute('visibleAll', false);\n });\n scrollbar.addEventListener('pointerover', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollbar.addEventListener('pointerout', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n\n scrollbar.addEventListener('scrollUp', this.handleScrollBarChange);\n scrollbar.addEventListener(SCROLLBAR_EVENT, this.handleScrollBarChange);\n }\n\n addOrUpdateScroll(showH: boolean, showV: boolean, container: IGroup, scrollContainer: IGroup) {\n if (showH) {\n const { scrollBar: hScrollbar, isUpdate } = this.addOrUpdateHScroll(scrollContainer, container, true);\n\n if (!isUpdate) {\n this.initEventOfScrollbar(scrollContainer, hScrollbar, true);\n }\n } else {\n this.clearScrollbar(scrollContainer, 'horizontal');\n }\n if (showV) {\n const { scrollBar: vScrollbar, isUpdate } = this.addOrUpdateHScroll(scrollContainer, container, false);\n\n if (!isUpdate) {\n this.initEventOfScrollbar(scrollContainer, vScrollbar, false);\n }\n } else {\n this.clearScrollbar(scrollContainer, 'vertical');\n }\n }\n\n getDirection(isHorozntal?: boolean) {\n return isHorozntal ? 'horizontal' : 'vertical';\n }\n\n addOrUpdateHScroll(scrollContainer: IGroup, container: IGroup, isHorozntal?: boolean) {\n const direction = this.getDirection(isHorozntal);\n const name = `${scrollContainer.name ?? scrollContainer._uid}_${this.getDirection(isHorozntal)}_${this.name}`;\n const scrollbars = container.children.filter((g: ScrollBar) => g.name === name);\n let isUpdate = true;\n let scrollBar = scrollbars[0] as ScrollBar;\n\n const { y = 0, dy = 0, x = 0, dx = 0, height, width, zIndex = 0 } = this.scrollContainer.g.attribute;\n const attrs: Partial = {\n x: 0,\n y: 0,\n direction,\n zIndex: zIndex + 1,\n visibleAll: true,\n padding: [2, 0],\n railStyle: {\n fill: 'rgba(0, 0, 0, .1)'\n },\n range: [0, 0.05]\n };\n\n if (isHorozntal) {\n attrs.width = this.scrollContainerBounds.width();\n attrs.height = 12;\n } else {\n attrs.height = this.scrollContainerBounds.height();\n attrs.width = 12;\n }\n\n if (!scrollBar) {\n isUpdate = false;\n\n scrollBar = new ScrollBar(attrs as ScrollBarAttributes);\n scrollBar.name = name;\n container.add(scrollBar);\n (scrollBar as any).isScrollBar = true;\n } else if (scrollbars.length > 1) {\n scrollbars.forEach((child: IGraphic, index: number) => {\n if (index) {\n child.parent?.removeChild(child);\n }\n });\n }\n const childrenBounds = this.childrenBounds;\n\n const { scrollX, scrollY } = scrollContainer.attribute;\n if (isHorozntal) {\n const ratio = Math.min(this.scrollContainerBounds.width() / childrenBounds.width(), 1);\n const start = Math.max(Math.min(scrollX / this.childrenBounds.width(), 0), ratio - 1);\n attrs.x = x + dx;\n attrs.y = y + dy + height - (attrs.height ?? 0);\n attrs.range = [-start, -start + ratio];\n } else {\n const ratio = Math.min(this.scrollContainerBounds.height() / childrenBounds.height(), 1);\n const start = Math.max(Math.min(scrollY / this.childrenBounds.height(), 0), ratio - 1);\n attrs.x = x + dx + width - this.scrollContainerBounds.width();\n attrs.y = y + dy;\n attrs.range = [-start, -start + ratio];\n }\n\n scrollBar.setAttributes(attrs);\n return {\n scrollBar,\n isUpdate\n };\n }\n\n clearScrollbar(scrollContainer: IGroup, type: 'horizontal' | 'vertical' | 'all') {\n if (!scrollContainer.parent) {\n return;\n }\n const scrollbarBars = scrollContainer.parent.children.filter((child: IGroup) => {\n return (child as any).isScrollBar && (type === 'all' || (child.attribute as any).direction === type);\n });\n\n scrollbarBars.forEach((child: IGraphic) => {\n child.parent.removeChild(child);\n });\n }\n\n formatScrollContainer(g: IGraphic) {\n if (!g || g.type !== 'group' || !g.attribute) {\n return null;\n }\n\n const { overflow, width, height } = (g as IGroup).attribute;\n\n if (!overflow || overflow === 'hidden') {\n return null;\n }\n\n let showH = false;\n let showV = false;\n\n if (overflow === 'scroll') {\n showH = true;\n showV = true;\n } else {\n showH = overflow === 'scroll-x';\n showV = !showH;\n }\n\n const childrenBounds = this.childrenBounds;\n\n childrenBounds.clear();\n g.forEachChildren((g: IGraphic) => {\n childrenBounds.union(g.AABBBounds);\n });\n\n if (!g.AABBBounds.empty()) {\n if (showH) {\n showH = width < childrenBounds.width();\n }\n\n if (showV) {\n showV = height < childrenBounds.height();\n }\n }\n\n return showH || showV ? { g: g as IGroup, showH, showV } : null;\n }\n\n // 获取响应滚动的元素\n getScrollContainer(graphic: IGraphic): { g: IGroup; showH: boolean; showV: boolean } | null {\n let g = graphic;\n while (g) {\n const res = this.formatScrollContainer(g);\n\n if (res) {\n return res;\n }\n g = g.parent;\n }\n return null;\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('wheel', this.scroll as any);\n }\n}\n","import { AutoEnablePlugins, ContainerModule, container } from '@visactor/vrender-core';\nimport { ScrollBarPlugin } from './scrollbar-plugin';\n\nexport const scrollbarModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(ScrollBarPlugin)) {\n bind(ScrollBarPlugin).toSelf();\n bind(AutoEnablePlugins).toService(ScrollBarPlugin);\n }\n});\n\nexport function loadScrollbar() {\n container.load(scrollbarModule);\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ISankeyChartSpec } from './interface';\nimport { registerSankeySeries } from '../../series/sankey/sankey';\nimport { Factory } from '../../core/factory';\nimport { SankeyChartSpecTransformer } from './sankey-transformer';\nimport type { Datum, MaybeArray } from '../../typings/common';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface/common';\nimport type { IRegionQuerier } from '../../typings/params';\nimport { isArray, isFunction } from '@visactor/vutils';\nimport { loadScrollbar } from '@visactor/vrender-components';\n\nexport class SankeyChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sankey;\n static readonly seriesType: string = SeriesTypeEnum.sankey;\n static readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sankey;\n readonly seriesType: string = SeriesTypeEnum.sankey;\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n // 桑基图暂时只支持单选\n const activeDatum = isArray(datum) ? datum[0] : datum;\n const keys = !activeDatum ? null : Object.keys(activeDatum);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!activeDatum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n let hasPick = false;\n r.getSeries().forEach(s => {\n let activeNodeOrLink = null;\n\n s.getMarksWithoutRoot().forEach(m => {\n if (m.type === 'text') {\n return;\n }\n\n let pickElement = null;\n const mark = m.getProduct();\n if (!mark) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n pickElement = mark.elements.find((e: any) =>\n keys.every(k => {\n let datum = e.getDatum()?.datum;\n\n if (isArray(datum)) {\n // data of link\n datum = datum[0];\n }\n\n // eslint-disable-next-line eqeqeq\n return activeDatum[k] == datum?.[k];\n })\n );\n }\n if (pickElement) {\n hasPick = true;\n r.interaction.startInteraction(stateKey, pickElement);\n\n if (mark.id().includes('node') || mark.id().includes('link')) {\n activeNodeOrLink = pickElement;\n }\n }\n });\n\n if (activeNodeOrLink) {\n (s as any)._handleEmphasisElement?.({ item: activeNodeOrLink });\n }\n });\n if (checkReverse && hasPick) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n}\n\nexport const registerSankeyChart = () => {\n loadScrollbar();\n registerSankeySeries();\n\n Factory.registerChart(SankeyChart.type, SankeyChart);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\n\nexport class RangeAreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getMeasureData = (datum: any) => {\n return this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]];\n };\n}\n","import { AreaSeries } from '../area/area';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { registerAreaMark } from '../../mark/area';\nimport { Direction } from '../../typings/space';\nimport type { Datum } from '../../typings';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { RangeAreaSeriesTooltipHelper } from './tooltip-helper';\nimport type { IAreaSeriesSpec } from '../area/interface';\nimport { rangeAreaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport type { IAreaMark } from '../../mark/interface';\n\nexport class RangeAreaSeries extends AreaSeries {\n static readonly type: string = SeriesTypeEnum.rangeArea;\n type = SeriesTypeEnum.rangeArea;\n\n static readonly mark: SeriesMarkMap = rangeAreaSeriesMark;\n\n initMark(): void {\n const { customShape, stateSort } = this._spec.area ?? {};\n this._areaMark = this._createMark(\n RangeAreaSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort\n },\n {\n setCustomizedShape: customShape,\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IAreaMark;\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n }\n\n initAreaMarkStyle(): void {\n const areaMark = this._areaMark;\n if (areaMark) {\n super.initAreaMarkStyle();\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._areaMark,\n {\n x1: (datum: Datum) => {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n y1: (datum: Datum) => {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.setMarkStyle(areaMark, { stroke: false }, 'normal', AttributeLevel.Series);\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeAreaSeriesTooltipHelper(this);\n }\n\n protected _isFieldAllValid() {\n const viewStatistics = this.getViewDataStatistics();\n const fields = this.fieldY;\n if (viewStatistics && viewStatistics.latestData && fields.length) {\n return fields.every(field => viewStatistics.latestData[field] && viewStatistics.latestData[field].allValid);\n }\n return false;\n }\n}\n\nexport const registerRangeAreaSeries = () => {\n registerAreaMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeAreaSeries.type, RangeAreaSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeAreaChartSpec } from './interface';\n\nexport class RangeAreaChartSpecTransformer<\n T extends IRangeAreaChartSpec = IRangeAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n series.area = spec.area;\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n series.stack = false;\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { registerRangeAreaSeries } from '../../series/range-area/range-area';\nimport { Factory } from '../../core/factory';\nimport type { IRangeAreaChartSpec } from './interface';\nimport { RangeAreaChartSpecTransformer } from './range-area-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeAreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeArea;\n static readonly seriesType: string = SeriesTypeEnum.rangeArea;\n static readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeArea;\n readonly seriesType: string = SeriesTypeEnum.rangeArea;\n}\n\nexport const registerRangeAreaChart = () => {\n registerRangeAreaSeries();\n Factory.registerChart(RangeAreaChart.type, RangeAreaChart);\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport { GrammarMarkType } from '../graph/enums';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { isScaleEncode } from '../parse/mark';\nimport { getGrammarOutput, isFunctionType } from '../parse/util';\nimport type {\n StateEncodeSpec,\n MarkSpec,\n IElement,\n MarkFunctionType,\n AttributeTransform,\n GetSingleEncodeSpecByType,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Mark } from '../view/mark';\nimport { isArray, isNil, isNumber } from '@visactor/vutils';\nimport { transformsByType } from '../graph/attributes/transform';\nimport { getBandWidthOfScale } from '../util/scale';\nimport { Factory } from '../core/factory';\n\nexport class Cell extends Mark {\n static markType = GrammarMarkType.cell;\n declare markType: GrammarMarkType.cell;\n protected declare spec: MarkSpec;\n\n protected _encoders: StateEncodeSpec | null;\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n\n this._updateComponentEncoders(state);\n\n return this;\n }\n\n protected _updateComponentEncoders(state: string) {\n if (!this._encoders) {\n this._encoders = {};\n }\n\n const userEncoder = this.spec.encode[state] as GetSingleEncodeSpecByType<'cell'>;\n\n if (userEncoder && state === 'update') {\n const params = this.parameters();\n const scales: Record = isFunctionType(userEncoder)\n ? null\n : Object.keys(userEncoder).reduce((res, channel) => {\n if (isScaleEncode(userEncoder[channel])) {\n res[channel] = getGrammarOutput(userEncoder[channel].scale, params);\n }\n return res;\n }, {});\n\n this._encoders[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const userEncodeRes = invokeEncoder(userEncoder, datum, element, parameters);\n\n if (isNil(userEncodeRes.size)) {\n const sizeX = scales.x ? getBandWidthOfScale(scales.x) : undefined;\n const sizeY = scales.y ? getBandWidthOfScale(scales.y) : undefined;\n\n if (isNil(sizeX) && isNil(sizeY)) {\n userEncodeRes.size = 10;\n } else if (isNil(sizeX)) {\n userEncodeRes.size = sizeY;\n } else if (isNil(sizeY)) {\n userEncodeRes.size = sizeX;\n }\n\n userEncodeRes.size = [sizeX, sizeY];\n }\n\n if (isNil(userEncodeRes.shape)) {\n userEncodeRes.shape = 'rect';\n }\n\n return userEncodeRes;\n }\n } as GetSingleEncodeSpecByType<'cell'>;\n } else {\n this._encoders[state] = userEncoder;\n }\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n\n getAttributeTransforms() {\n return (\n [\n {\n channels: ['size', 'padding'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (isNumber(storedAttrs.padding) && storedAttrs.padding > 0) {\n graphicAttributes.size = isArray(storedAttrs.size)\n ? storedAttrs.size.map((entry: number) => Math.max(entry - storedAttrs.padding, 1))\n : Math.max(storedAttrs.size - storedAttrs.padding, 1);\n } else if (isArray(storedAttrs.padding) && storedAttrs.padding.length === 2) {\n const arraySize = isArray(storedAttrs.size) ? storedAttrs.size : [storedAttrs.size, storedAttrs.size];\n\n graphicAttributes.size = [\n Math.max(arraySize[0] - storedAttrs.padding[0], 1),\n Math.max(arraySize[1] - storedAttrs.padding[1], 1)\n ];\n } else {\n graphicAttributes.size = storedAttrs.size;\n }\n },\n storedAttrs: 'paddingAttrs'\n }\n ] as AttributeTransform[]\n ).concat(transformsByType.symbol);\n }\n\n release(): void {\n super.release();\n this._encoders = null;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(GrammarMarkType.cell, Cell);\n};\n","import { Factory } from './../core/factory';\nimport type { ICellMarkSpec } from '../typings';\nimport type { ICellMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseSymbolMark } from './symbol';\nimport { registerCellGraphic, registerCellMark as registerVgrammarCellMark } from '@visactor/vgrammar-core';\n\nexport class CellMark extends BaseSymbolMark implements ICellMark {\n static readonly type = MarkTypeEnum.cell;\n readonly type = CellMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n padding: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(CellMark.type, CellMark);\n registerCellGraphic();\n registerVgrammarCellMark();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\nimport type { HeatmapAppearPreset } from './interface';\n\nexport function heatmapPresetAnimation(preset: HeatmapAppearPreset | boolean): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n return {\n type: 'fadeIn'\n };\n}\n\nexport const registerHeatmapAnimation = () => {\n Factory.registerAnimation('heatmap', (params: any, preset: HeatmapAppearPreset) => {\n return {\n ...FadeInOutAnimation,\n appear: heatmapPresetAnimation(preset)\n };\n });\n};\n","import type { TooltipActiveType } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class HeatmapSeriesTooltipHelper extends BaseSeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IHeatmapSeriesSpec, IHeatmapSeriesTheme } from './interface';\n\nexport class HeatmapSeriesSpecTransformer<\n T extends IHeatmapSeriesSpec = IHeatmapSeriesSpec,\n K extends IHeatmapSeriesTheme = IHeatmapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.cell);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { registerCellMark } from './../../mark/cell';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum } from '../../typings';\nimport { registerHeatmapAnimation } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { HeatmapAppearPreset, IHeatmapSeriesSpec } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport { registerTextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { normalizePadding, array } from '@visactor/vutils';\nimport { HeatmapSeriesTooltipHelper } from './tooltip-helper';\nimport { heatmapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { ICellMark, IMark, ITextMark } from '../../mark/interface';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { HeatmapSeriesSpecTransformer } from './heatmap-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class HeatmapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.heatmap;\n type = SeriesTypeEnum.heatmap;\n\n static readonly mark: SeriesMarkMap = heatmapSeriesMark;\n static readonly transformerConstructor = HeatmapSeriesSpecTransformer as any;\n readonly transformerConstructor = HeatmapSeriesSpecTransformer;\n\n protected _cellMark: ICellMark;\n protected _backgroundMark: ICellMark;\n\n protected _fieldValue!: string[];\n getFieldValue() {\n return this._fieldValue;\n }\n setFieldValue(f: string | string[]) {\n this._fieldValue = array(f);\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldValue(this._spec.valueField);\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._cellMark = this._createMark(\n HeatmapSeries.mark.cell,\n {\n isSeriesMark: true,\n stateSort: this._spec.cell?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.cell?.customShape,\n morph: shouldMarkDoMorph(this._spec, HeatmapSeries.mark.cell.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ICellMark;\n\n this._backgroundMark = this._createMark(\n HeatmapSeries.mark.cellBackground,\n {\n stateSort: this._spec.cellBackground?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.cellBackground?.customShape\n }\n ) as ICellMark;\n }\n\n initMarkStyle(): void {\n this.initCellMarkStyle();\n this.initCellBackgroundMarkStyle();\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getMeasureField()[0]];\n }\n });\n }\n\n initCellMarkStyle() {\n this.setMarkStyle(\n this._cellMark,\n {\n x: (datum: Datum) => {\n const pos = this.dataToPositionX(datum);\n return pos;\n },\n y: (datum: Datum) => {\n const pos = this.dataToPositionY(datum);\n return pos;\n },\n size: () => {\n return [this.getCellSize(this._xAxisHelper), this.getCellSize(this._yAxisHelper)];\n },\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n initCellBackgroundMarkStyle() {\n const padding = normalizePadding(this._spec.cellBackground?.style?.padding ?? 0);\n this.setMarkStyle(\n this._backgroundMark,\n {\n x: (datum: Datum) => {\n const width = this.getCellSize(this._xAxisHelper);\n const pos = this.dataToPositionX(datum);\n return pos - width / 2 + padding[3];\n },\n y: (datum: Datum) => {\n const height = this.getCellSize(this._yAxisHelper);\n const pos = this.dataToPositionY(datum);\n return pos - height / 2 + padding[0];\n },\n width: () => {\n return this.getCellSize(this._xAxisHelper) - padding[1] - padding[3];\n },\n height: () => {\n return this.getCellSize(this._yAxisHelper) - padding[0] - padding[2];\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n // TODO: 为热力图实现默认线性颜色 scale\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this.getFieldValue[0]\n };\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._cellMark ? [this._cellMark] : []);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._cellMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('heatmap')?.(appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.cell, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected getCellSize(axisHelper: IAxisHelper) {\n return axisHelper.getBandwidth?.(0) ?? DefaultBandWidth;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new HeatmapSeriesTooltipHelper(this);\n this._cellMark && this._tooltipHelper.activeTriggerSet.mark.add(this._cellMark);\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getDimensionField(): string[] {\n return [].concat(this.fieldX, this.fieldY);\n }\n\n getMeasureField(): string[] {\n return this.getFieldValue();\n }\n\n getActiveMarks(): IMark[] {\n return [this._cellMark];\n }\n}\n\nexport const registerHeatmapSeries = () => {\n registerTextMark();\n registerCellMark();\n registerHeatmapAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(HeatmapSeries.type, HeatmapSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IHeatmapChartSpec } from './interface';\n\nexport class HeatmapChartSpecTransformer<\n T extends IHeatmapChartSpec = IHeatmapChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['valueField', 'cell']);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { registerHeatmapSeries } from '../../series/heatmap/heatmap';\nimport { Factory } from '../../core/factory';\nimport type { IHeatmapChartSpec } from './interface';\nimport { HeatmapChartSpecTransformer } from './heatmap-transformer';\nimport { BaseChart } from '../base';\n\nexport class HeatmapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.heatmap;\n static readonly seriesType: string = SeriesTypeEnum.heatmap;\n static readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.heatmap;\n readonly seriesType: string = SeriesTypeEnum.heatmap;\n}\n\nexport const registerHeatmapChart = () => {\n registerHeatmapSeries();\n Factory.registerChart(HeatmapChart.type, HeatmapChart);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/extent.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isFunction, isNumber, isNil } from '@visactor/vutils';\nimport type { ReturnNumberFunction } from './types';\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: ReturnNumberFunction) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n","import { PREFIX } from './base';\n\nexport const CORRELATION_X = `${PREFIX}_CORRELATION_X`;\nexport const CORRELATION_Y = `${PREFIX}_CORRELATION_Y`;\nexport const CORRELATION_SIZE = `${PREFIX}_CORRELATION_SIZE`;\n","import { isNil, isNumber, degreeToRadian, isArray } from '@visactor/vutils';\nimport { field as getFieldAccessor, extent, toPercent } from '@visactor/vgrammar-util';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\n\nexport interface ICorrelationOpt {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n}\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n size: number;\n datum: any;\n}\n\nexport const correlation = (data: any, options: any) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(options.startAngle ?? -90);\n const endAngle = degreeToRadian(options.endAngle ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(options.innerRadius ?? 0, maxRadius);\n const outerRadius = toPercent(options.outerRadius, maxRadius);\n\n const center = [\n isNumber(options.center?.[0])\n ? options.center[0]\n : viewBox.x0 + toPercent(options.center?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(options.center?.[1])\n ? options.center[1]\n : viewBox.y0 + toPercent(options.center?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(options.field);\n const values = data.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const sizeAccessor = !isNil(options.radiusField) ? getFieldAccessor(options.radiusField) : fieldAccessor;\n const defaultSize = options?.radiusRange?.[1] ?? 5;\n let sizeScale = (datum: any) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [min, max];\n const minR = options.radiusRange?.[0] ?? 5;\n const maxR = options.radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: any) => minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, data.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n data.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: Omit, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n return Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2);\n });\n};\n","import { isArray } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\n\nexport const correlationCenter = (data: any, options: any) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n const { keyword, categoryField } = options;\n\n const nodeInfo = data[0].latestData[0];\n\n const centerInfo = {\n [categoryField]: keyword,\n [DEFAULT_DATA_INDEX]: nodeInfo?.[DEFAULT_DATA_INDEX],\n [DEFAULT_DATA_SERIES_FIELD]: nodeInfo?.[DEFAULT_DATA_SERIES_FIELD]\n };\n\n return centerInfo;\n};\n","import type { IElement, RipplePointEncoderSpec } from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerSymbolGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport const registerRippleGlyph = () => {\n Factory.registerGlyph('ripplePoint', {\n symbol: 'symbol',\n ripple0: 'symbol',\n ripple1: 'symbol',\n ripple2: 'symbol'\n })\n .registerFunctionEncoder((encodeValues: RipplePointEncoderSpec, datum: any, element: IElement, config: any) => {\n // ripple value should be between 0 and 1\n const ripple = Math.max(0, Math.min(encodeValues.ripple, 1));\n const size = encodeValues.size ?? element.getGraphicAttribute('size');\n const rippleSize = size * 0.5;\n return {\n ripple0: { size: size + rippleSize * ripple, fillOpacity: 0.75 - ripple * 0.25 },\n ripple1: { size: size + rippleSize * (1 + ripple), fillOpacity: 0.5 - ripple * 0.25 },\n ripple2: { size: size + rippleSize * (2 + ripple), fillOpacity: 0.25 - ripple * 0.25 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n ripple0: { fillOpacity: 0.75 },\n ripple1: { fillOpacity: 0.5 },\n ripple2: { fillOpacity: 0.25 }\n };\n });\n registerGlyphMark();\n registerGlyphGraphic();\n registerSymbolGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { IRippleMarkSpec } from '../typings/visual';\nimport type { IMarkStyle, IRippleMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRippleGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport class RippleMark extends BaseMark implements IRippleMark {\n static readonly type = MarkTypeEnum.ripple;\n readonly type = RippleMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n ripple: 0\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'ripplePoint';\n this._product = view.glyph(glyphType, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerRippleMark = () => {\n Factory.registerMark(RippleMark.type, RippleMark);\n registerRippleGlyph();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\nimport type { CorrelationAppearPreset, ICorrelationAnimationParams } from './interface';\n\nexport const correlationPresetAnimation = (\n _params: ICorrelationAnimationParams, // 此处仅为保持结构统一\n preset: CorrelationAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerCorrelationAnimation = () => {\n Factory.registerAnimation('correlation', (params: ICorrelationAnimationParams, preset: CorrelationAppearPreset) => ({\n appear: correlationPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ICorrelationSeriesSpec, ICorrelationSeriesTheme } from './interface';\n\nexport class CorrelationSeriesSpecTransformer<\n T extends ICorrelationSeriesSpec = ICorrelationSeriesSpec,\n K extends ICorrelationSeriesTheme = ICorrelationSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nodePoint);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.centerPoint, 'centerLabel' as any);\n }\n}\n","import { PolarSeries } from '../polar/polar';\nimport type { CorrelationAppearPreset, ICorrelationSeriesSpec } from './interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { correlationSeriesMark } from './constant';\nimport { registerDataSetInstanceTransform, registerDataSetInstanceParser } from '../../data/register';\nimport { correlation } from '../../data/transforms/correlation';\nimport { correlationCenter } from '../../data/transforms/correlation-center';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICorrelationOpt } from '../../data/transforms/correlation';\nimport type { IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { SeriesData } from '../base/series-data';\nimport type { Datum, ISymbolMarkSpec, IRippleMarkSpec, AdaptiveSpec } from '../../typings';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { DataView, DataSet, dataViewParser } from '@visactor/vdataset';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRippleMark } from '../../mark/ripple';\n// eslint-disable-next-line no-duplicate-imports\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerCorrelationAnimation } from './animation';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ILabelMark, IMark, IRippleMark, ISymbolMark } from '../../mark/interface';\nimport { CorrelationSeriesSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationSeries extends PolarSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.correlation;\n type = SeriesTypeEnum.correlation;\n\n static readonly mark: SeriesMarkMap = correlationSeriesMark;\n static readonly transformerConstructor = CorrelationSeriesSpecTransformer as any;\n readonly transformerConstructor = CorrelationSeriesSpecTransformer;\n\n protected _centerSeriesData: SeriesData;\n\n private _nodePointMark: ISymbolMark;\n private _ripplePointMark: IRippleMark;\n private _centerPointMark: ISymbolMark;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n }\n }\n\n protected _sizeField?: ICorrelationSeriesSpec['sizeField'];\n getSizeField() {\n return this._sizeField;\n }\n setSizeField(field: string) {\n if (isValid(field)) {\n this._sizeField = field;\n }\n }\n\n protected _sizeRange?: ICorrelationSeriesSpec['sizeRange'];\n getSizeRange() {\n return this._sizeRange;\n }\n setSizeRange(range: number[]) {\n if (isValid(range)) {\n this._sizeRange = range;\n }\n }\n\n protected _viewDataTransform!: SeriesData;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this.setSeriesField(this._spec.seriesField);\n this.setSizeField(this._spec.sizeField);\n this.setSizeRange(this._spec.sizeRange);\n }\n\n protected initData() {\n super.initData();\n\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'correlation', correlation);\n\n const centerDataSet = new DataSet();\n registerDataSetInstanceParser(centerDataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(centerDataSet, 'correlationCenter', correlationCenter);\n const centerDataView = new DataView(centerDataSet, { name: `${this.type}_${this.id}_center` });\n centerDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n centerDataView.transform({\n type: 'correlationCenter',\n options: {\n keyword: this._spec.centerLabel?.style?.text ?? '',\n categoryField: this._spec.categoryField\n }\n });\n\n this._centerSeriesData = new SeriesData(this._option, centerDataView);\n }\n\n compileData() {\n super.compileData();\n this._centerSeriesData?.compile();\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'correlation',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n field: this._spec.valueField,\n radiusRange: this._spec.sizeRange as [number, number],\n radiusField: this._spec.sizeField,\n center: [this._spec.centerX, this._spec.centerY],\n innerRadius: this._spec.innerRadius,\n outerRadius: this._spec.outerRadius,\n startAngle: this._spec.startAngle,\n endAngle: this._spec.endAngle\n } as ICorrelationOpt\n });\n }\n\n initMark(): void {\n const nodePointMark = this._createMark(\n CorrelationSeries.mark.nodePoint,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n key: DEFAULT_DATA_INDEX,\n stateSort: this._spec.nodePoint?.stateSort\n },\n {\n setCustomizedShape: this._spec.nodePoint?.customShape\n }\n ) as ISymbolMark;\n if (nodePointMark) {\n nodePointMark.setMarkConfig({ zIndex: LayoutZIndex.Node });\n this._nodePointMark = nodePointMark;\n }\n\n const ripplePointMark = this._createMark(CorrelationSeries.mark.ripplePoint, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId()\n }) as IRippleMark;\n if (ripplePointMark) {\n this._ripplePointMark = ripplePointMark;\n }\n\n const centerPointMark = this._createMark(\n CorrelationSeries.mark.centerPoint,\n {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId(),\n stateSort: this._spec.centerPoint?.stateSort\n },\n {\n setCustomizedShape: this._spec.centerPoint?.customShape\n }\n ) as ISymbolMark;\n if (centerPointMark) {\n centerPointMark.setMarkConfig({ zIndex: LayoutZIndex.Node });\n this._centerPointMark = centerPointMark;\n }\n }\n\n initMarkStyle(): void {\n this._initNodePointMarkStyle();\n this._initRipplePointMarkStyle();\n this._initCenterPointMarkStyle();\n }\n\n protected _initNodePointMarkStyle() {\n const nodePointMark = this._nodePointMark;\n if (!nodePointMark) {\n return;\n }\n const nodePointStyle = this._spec.nodePoint?.style ?? {};\n this.setMarkStyle(\n nodePointMark,\n {\n x: (datum: Datum) => datum[CORRELATION_X],\n y: (datum: Datum) => datum[CORRELATION_Y],\n size: (datum: Datum) => datum[CORRELATION_SIZE],\n fill: nodePointStyle.fill ?? this.getColorAttribute(),\n fillOpacity: nodePointStyle.fillOpacity ?? 1,\n lineWidth: 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initRipplePointMarkStyle() {\n const ripplePointMark = this._ripplePointMark;\n if (!ripplePointMark) {\n return;\n }\n const ripplePointStyle = this._spec.ripplePoint?.style ?? {};\n\n this.setMarkStyle(\n ripplePointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1) / 2;\n },\n fill: ripplePointStyle.fill ?? this.getColorAttribute(),\n opacity: ripplePointStyle.fillOpacity ?? 0.2,\n ripple: ripplePointStyle.ripple ?? 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initCenterPointMarkStyle() {\n const centerPointMark = this._centerPointMark;\n if (!centerPointMark) {\n return;\n }\n this.setMarkStyle(\n centerPointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return (0.2 * Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1)) / 2;\n },\n fill: this._spec.centerPoint?.style?.fill ?? this.getColorAttribute(),\n fillOpacity: this._spec.centerPoint?.style?.fillOpacity ?? 1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._nodePointMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodePointMark);\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this._categoryField];\n },\n z: this.dataToPositionZ.bind(this)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initAnimation() {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this._nodePointMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('correlation')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.nodePoint, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n getActiveMarks(): IMark[] {\n return [this._nodePointMark, this._centerPointMark];\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [this._categoryField];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n this._rawData.reRunAllTransform();\n this.getViewData().reRunAllTransform();\n }\n}\n\nexport const registerCorrelationSeries = () => {\n registerSymbolMark();\n registerRippleMark();\n Factory.registerSeries(CorrelationSeries.type, CorrelationSeries);\n registerCorrelationAnimation();\n};\n","import type { ICorrelationSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICorrelationChartSpec } from './interface';\n\nexport class CorrelationChartSpecTransformer<\n T extends ICorrelationChartSpec = ICorrelationChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: ICorrelationSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'sizeField',\n 'sizeRange',\n 'centerX',\n 'centerY',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'endAngle',\n 'ripplePoint',\n 'centerPoint',\n 'centerLabel',\n 'nodePoint'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { registerCorrelationSeries } from '../../series/correlation/correlation';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ICorrelationChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { CorrelationChartSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.correlation;\n static readonly seriesType: string = SeriesTypeEnum.correlation;\n static readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly type: string = ChartTypeEnum.correlation;\n readonly seriesType: string = SeriesTypeEnum.correlation;\n}\n\nexport const registerCorrelationChart = () => {\n registerCorrelationSeries();\n Factory.registerChart(CorrelationChart.type, CorrelationChart);\n};\n","import type { IEffect } from '../../../model/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { isXAxis } from './util/common';\nimport { isValid, TimeUtil } from '@visactor/vutils';\nimport { eachSeries } from '../../../util/model';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport { CartesianLinearAxis } from './linear-axis';\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { Datum } from '../../../typings';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport type { ICartesianTimeAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { getAxisItem, shouldUpdateAxis } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianTimeAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianTimeAxis<\n T extends ICartesianTimeAxisSpec = ICartesianTimeAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianTimeAxis;\n type = ComponentTypeEnum.cartesianTimeAxis;\n\n static specKey = 'axes';\n\n protected _layerTickData!: CompilableData;\n\n protected _zero: boolean = false;\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(this.getOrient())) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._tick = mergeSpec({}, this._spec.tick, this._spec.layers?.[0]);\n }\n\n protected _initData() {\n super._initData();\n\n // 如果layer数组的第二项未配置,则不显示第二层\n if (this._spec.layers?.[1]) {\n const layerTickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_layer_1_ticks` })\n .parse(this._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: `${this.type}-ticks`,\n options: {\n ...this._tickTransformOption(),\n tickCount: this._spec.layers[1].tickCount,\n forceTickCount: this._spec.layers[1].forceTickCount,\n tickStep: this._spec.layers[1].tickStep\n } as ICartesianTickDataOpt\n },\n false\n );\n this._layerTickData = new CompilableData(this._option, layerTickData);\n }\n }\n\n /**\n * @override\n */\n protected computeData(updateType?: 'range' | 'domain' | 'force'): void {\n super.computeData(updateType);\n if (this._layerTickData) {\n this._layerTickData.getDataView().reRunAllTransform();\n this._layerTickData.updateData();\n }\n }\n\n protected _getLabelFormatMethod(): any {\n const timeUtil = TimeUtil.getInstance();\n const timeFormat1 = this._spec.layers?.[1]?.timeFormat || '%Y%m%d';\n const timeFormatMode1 = this._spec.layers?.[1]?.timeFormatMode || 'local';\n const timeFormatter1 = timeFormatMode1 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n const timeFormat0 = this._spec.layers?.[0]?.timeFormat || '%Y%m%d';\n const timeFormatMode0 = this._spec.layers?.[0]?.timeFormatMode || 'local';\n const timeFormatter0 = timeFormatMode0 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n return (value: any, datum: any, index: number, data: any[], layer: number) => {\n let timeValue: string;\n if (layer === 0) {\n timeValue = timeFormatter0(timeFormat0, value);\n } else {\n timeValue = timeFormatter1(timeFormat1, value);\n }\n\n return this._spec.label?.formatMethod ? this._spec.label.formatMethod(timeValue, datum) : timeValue;\n };\n }\n\n protected getLabelItems(length: number) {\n const items = [];\n\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n items.push(\n tickLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n );\n }\n\n const layerLatestData = this._layerTickData?.getLatestData();\n if (layerLatestData && layerLatestData.length) {\n items.push(\n layerLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n );\n }\n\n return items;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n transformScaleDomain() {\n // do nothing\n }\n}\n\nexport const registerCartesianTimeAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianTimeAxis.type, CartesianTimeAxis);\n};\n","import type { NiceOptions, NiceType } from './interface';\nimport { parseNiceOptions } from './utils/tick-sample';\nimport { nice } from './utils/utils';\n\nexport class LogNiceMixin {\n protected _domain: number[];\n protected _domainValidator?: (val: number) => boolean;\n protected _niceDomain: number[];\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n let niceType: NiceType = null;\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n\n niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n (this as any).rescale();\n return this;\n }\n } else {\n niceType = 'all';\n }\n\n if (niceType) {\n const niceDomain = nice(\n originalDomain.slice(),\n (this as any).getNiceConfig?.() ?? {\n floor: (x: number) => Math.floor(x),\n ceil: (x: number) => Math.ceil(x)\n }\n );\n\n if (niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain as number[];\n (this as any).rescale();\n return this;\n }\n\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMin(): this {\n const maxD = this._domain[this._domain.length - 1];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[niceDomain.length - 1] = maxD;\n this._niceDomain = niceDomain;\n (this as any).rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMax(): this {\n const minD = this._domain[0];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n (this as any).rescale();\n }\n\n return this;\n }\n}\n","import { ticksBaseTransform, forceTicksBaseTransform, parseNiceOptions, d3TicksForLog } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport { ScaleEnum } from './type';\nimport { logp, nice, powp, logNegative, expNegative, identity } from './utils/utils';\nimport type { ContinuousScaleType, IContinuousScale, NiceOptions, NiceType, PolymapType } from './interface';\nimport { mixin } from '@visactor/vutils';\nimport { LogNiceMixin } from './log-nice-mixin';\n\n/**\n * 逆反函数\n * @param f\n * @returns\n */\nfunction reflect(f: (x: number) => number) {\n return (x: number) => -f(-x);\n}\n\nfunction limitPositiveZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.max(x, min);\n };\n}\n\nfunction limitNegativeZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.min(x, -min);\n };\n}\n\nexport interface LogScale extends ContinuousScale {\n nice: (count?: number, option?: NiceOptions) => this;\n niceMin: (count?: number) => this;\n niceMax: (count?: number) => this;\n}\n\nexport class LogScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Log;\n\n _base: number;\n _logs: (x: number) => number;\n _pows: (x: number) => number;\n _limit: (x: number) => number;\n\n constructor() {\n super(logp(10), powp(10));\n\n this._limit = limitPositiveZero();\n this._logs = this.transformer;\n this._pows = this.untransformer;\n this._domain = [1, 10];\n this._base = 10;\n }\n\n clone(): LogScale {\n return new LogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .base(this._base) as LogScale;\n }\n\n rescale(slience?: boolean) {\n if (slience) {\n return this;\n }\n super.rescale();\n\n const logs = logp(this._base);\n const pows = powp(this._base);\n\n const domain = this._niceDomain ?? this._domain;\n\n if (domain[0] < 0) {\n this._logs = reflect(logs);\n this._pows = reflect(pows);\n this._limit = limitNegativeZero();\n\n this.transformer = logNegative;\n this.untransformer = expNegative;\n } else {\n this._logs = logs;\n this._pows = pows;\n this._limit = limitPositiveZero();\n\n this.transformer = this._logs;\n this.untransformer = pows;\n }\n\n return this;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this._limit).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._limit(this._clamp(x))));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n base(): number;\n base(_: number, slience?: boolean): this;\n base(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._base;\n }\n\n this._base = _;\n return this.rescale(slience);\n }\n\n tickFormat() {\n // TODO\n return identity;\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = this._limit(d[0]);\n const v = this._limit(d[d.length - 1]);\n return d3TicksForLog(u, v, count, this._base, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n count,\n this._base,\n this.transformer,\n this.untransformer\n );\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n step,\n this.transformer,\n this.untransformer\n );\n }\n\n protected getNiceConfig() {\n return {\n floor: (x: number) => this._pows(Math.floor(this._logs(this._limit(x)))),\n ceil: (x: number) => (Math.abs(x) >= 1 ? Math.ceil(x) : this._pows(Math.ceil(this._logs(this._limit(x)))))\n };\n }\n}\n\nmixin(LogScale, LogNiceMixin);\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { LogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianLogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianLogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianLogAxis extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianLogAxis;\n type = ComponentTypeEnum.cartesianLogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: LogScale = new LogScale();\n protected declare _scales: LogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.base(this._spec.base ?? 10);\n this._scale.clamp(true, null, false);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianLogAxis, LinearAxisMixin);\n\nexport const registerCartesianLogAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianLogAxis.type, CartesianLogAxis);\n};\n","import { mixin } from '@visactor/vutils';\nimport type { ContinuousScaleType, NiceOptions, NiceType } from './interface';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport { d3TicksForLog, forceTicksBaseTransform, parseNiceOptions, ticksBaseTransform } from './utils/tick-sample';\nimport { symlog, symexp, nice } from './utils/utils';\nimport { LogNiceMixin } from './log-nice-mixin';\n\nexport interface SymlogScale extends LinearScale {\n nice: (count?: number, option?: NiceOptions) => this;\n niceMin: (count?: number) => this;\n niceMax: (count?: number) => this;\n}\n\nexport class SymlogScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Symlog;\n\n _const: number;\n\n constructor() {\n super(symlog(1), symexp(1));\n this._const = 1;\n }\n\n clone(): SymlogScale {\n return new SymlogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .constant(this._const) as SymlogScale;\n }\n\n constant(): number;\n constant(_: number, slience?: boolean): this;\n constant(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._const;\n }\n\n this._const = _;\n this.transformer = symlog(_);\n this.untransformer = symexp(_);\n\n return this.rescale(slience);\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = d[0];\n const v = d[d.length - 1];\n return d3TicksForLog(u, v, count, this._const, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(d[0], d[d.length - 1], count, this._const, this.transformer, this.untransformer);\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], step, this.transformer, this.untransformer);\n }\n}\n\nmixin(SymlogScale, LogNiceMixin);\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { SymlogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianSymlogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianSymlogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianSymlogAxis<\n T extends ICartesianSymlogAxisSpec = ICartesianSymlogAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianSymlogAxis;\n type = ComponentTypeEnum.cartesianSymlogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: SymlogScale = new SymlogScale();\n protected declare _scales: SymlogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.constant(this._spec.constant ?? 10);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianSymlogAxis, LinearAxisMixin);\n\nexport const registerCartesianSymlogAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianSymlogAxis.type, CartesianSymlogAxis);\n};\n","import type { ITitle } from './interface';\nimport { isEmpty } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformToGraphic } from '../../util/style';\n\nexport function transformLegendTitleAttributes(title: ITitle) {\n const transformedTitle = {\n ...title\n };\n if (!isEmpty(title.style)) {\n transformedTitle.textStyle = transformToGraphic(title.style);\n }\n if (!isEmpty(title.textStyle)) {\n mergeSpec(transformedTitle.textStyle, transformToGraphic(title.textStyle));\n }\n\n if (title.shape?.style) {\n transformToGraphic(transformedTitle.shape.style);\n }\n\n if (title.background?.style) {\n transformToGraphic(transformedTitle.background.style);\n }\n return transformedTitle;\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = transformComponentStyle(item.shape);\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","/**\n * TODO:\n * align 为 'top' 时,操作区域同标题的间距有问题\n */\nimport { isValid, normalizePadding } from '@visactor/vutils';\nimport type { IGroup, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\nimport { Tag } from '../tag';\nimport type { LegendBaseAttributes, LegendTitle } from './type';\nimport { LEGEND_ELEMENT_NAME } from './constant';\n\nexport abstract class LegendBase extends AbstractComponent> {\n name = 'legend';\n protected _innerView!: IGroup;\n protected _title: Tag | null = null;\n protected _parsedPadding: number[];\n\n render() {\n this.removeAllChild(true);\n\n const { interactive = true, title, padding = 0 } = this.attribute;\n this._parsedPadding = normalizePadding(padding);\n\n // 创建一个内部的 container 用于存储所有的元素\n const innerView = graphicCreator.group({\n x: this._parsedPadding[3],\n y: this._parsedPadding[0],\n pickable: interactive,\n childrenPickable: interactive\n });\n innerView.name = LEGEND_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n if (title?.visible) {\n // 渲染标题\n this._renderTitle(title);\n }\n\n this._renderContent();\n\n this._adjustLayout();\n\n if (interactive) {\n this._bindEvents();\n }\n\n const viewBounds = this._innerView.AABBBounds;\n this.attribute.width = viewBounds.width() + this._parsedPadding[1] + this._parsedPadding[3];\n this.attribute.height = viewBounds.height() + this._parsedPadding[0] + this._parsedPadding[2];\n }\n /**\n * 图例主体内容渲染\n */\n protected abstract _renderContent(): void;\n /**\n * 事件绑定逻辑\n */\n protected abstract _bindEvents(): void;\n\n private _renderTitle(title: LegendTitle) {\n const { text = '', textStyle, padding = 0, background, minWidth, maxWidth, shape } = title;\n\n const tagAttrs: TagAttributes = {\n x: 0,\n y: 0,\n text,\n textStyle,\n padding: normalizePadding(padding),\n minWidth,\n maxWidth\n } as TagAttributes;\n\n if (shape && shape.visible) {\n tagAttrs.shape = {\n visible: true,\n ...shape.style\n };\n if (isValid(shape.space)) {\n tagAttrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n tagAttrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n const titleTag = new Tag(tagAttrs);\n titleTag.name = LEGEND_ELEMENT_NAME.title;\n this._title = titleTag;\n\n this._innerView.add(titleTag as unknown as INode);\n }\n\n private _adjustLayout() {\n // 调整 title\n if (this._title) {\n const innerViewWidth = this._innerView.AABBBounds.width();\n const titleWidth = this._title.AABBBounds.width();\n\n const align = this.attribute.title?.align;\n if (align === 'center') {\n this._title.setAttribute('x', (innerViewWidth - titleWidth) / 2);\n } else if (align === 'end') {\n this._title.setAttribute('x', innerViewWidth - titleWidth);\n }\n }\n }\n}\n","import { registerGroup, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadPagerComponent() {\n registerGroup();\n registerSymbol();\n registerText();\n}\n","/**\n * @description 翻页器\n */\nimport type { ISymbol, IText, FederatedPointerEvent } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, normalizePadding, isNumber, isFunction } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { measureTextSize } from '../util';\nimport type { PagerAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPagerComponent } from './register';\n\nconst DEFAULT_HANDLER_STYLE: PagerAttributes['handler'] = {\n space: 8,\n style: {\n fill: 'rgb(47, 69, 84)',\n cursor: 'pointer',\n size: 15\n },\n state: {\n disable: {\n fill: 'rgb(170, 170, 170)',\n cursor: 'not-allowed'\n },\n hover: {}\n }\n};\n\nloadPagerComponent();\n\nexport class Pager extends AbstractComponent> {\n name = 'pager';\n\n private _current = 1;\n getCurrent() {\n return this._current;\n }\n\n private _total!: number;\n preHandler!: ISymbol | null;\n nextHandler!: ISymbol | null;\n text!: IText | null;\n\n static defaultAttributes: Partial = {\n handler: DEFAULT_HANDLER_STYLE,\n textStyle: {\n fill: 'rgb(51, 51, 51)',\n fontSize: 12\n }\n };\n\n constructor(attributes: PagerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Pager.defaultAttributes, attributes));\n }\n\n protected render() {\n this._reset();\n const {\n layout = 'horizontal',\n handler = DEFAULT_HANDLER_STYLE,\n total,\n defaultCurrent = 1,\n textStyle,\n padding = 0\n } = this.attribute;\n\n this._current = defaultCurrent;\n const parsedPadding = normalizePadding(padding);\n const isHorizontal = layout === 'horizontal';\n\n const container = graphicCreator.group({\n x: 0,\n y: 0\n });\n\n const handlerStyle = handler.style || {};\n const handlerSize = handlerStyle.size || 15;\n const handlerSpace = handler.space ?? 8;\n const handlerState = handler.state || {};\n\n let { preShape, nextShape } = handler;\n if (!preShape) {\n preShape = isHorizontal ? 'triangleLeft' : 'triangleUp';\n }\n if (!nextShape) {\n nextShape = isHorizontal ? 'triangleRight' : 'triangleDown';\n }\n\n const preHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: 0,\n y: 0,\n symbolType: preShape,\n size: handlerSize\n });\n preHandler.states = handlerState;\n preHandler.name = 'preHandler';\n this.preHandler = preHandler;\n container.add(preHandler);\n\n // 获取文本的最大长度,如果不固定的话随着文本的变化整体会发生抖动\n const { width: maxTextWidth, height: maxTextHeight } = measureTextSize(\n this._getPageText(total),\n {\n textAlign: 'center',\n textBaseline: 'middle',\n ...textStyle\n },\n this.stage?.getTheme()?.text\n );\n\n const handlerSizeX = isNumber(handlerSize) ? handlerSize : handlerSize[0];\n const handlerSizeY = isNumber(handlerSize) ? handlerSize : handlerSize[1];\n\n const text = graphicCreator.text({\n x: isHorizontal ? handlerSizeX / 2 + handlerSpace + maxTextWidth / 2 : 0,\n y: isHorizontal ? 0 : handlerSizeY / 2 + handlerSpace + maxTextHeight / 2,\n text: this._getPageText(defaultCurrent),\n textAlign: 'center',\n textBaseline: 'middle',\n lineHeight: textStyle?.fontSize,\n ...textStyle\n });\n this.text = text;\n container.add(text);\n\n const nextHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: isHorizontal ? handlerSizeX + handlerSpace * 2 + maxTextWidth : 0,\n y: isHorizontal ? 0 : handlerSizeY + handlerSpace * 2 + maxTextHeight,\n symbolType: nextShape,\n size: handlerSize\n });\n nextHandler.name = 'nextHandler';\n nextHandler.states = handlerState;\n this.nextHandler = nextHandler;\n\n container.add(nextHandler);\n\n if (this._total === 1) {\n preHandler.addState('disable');\n nextHandler.addState('disable');\n } else if (this._current === 1) {\n preHandler.addState('disable');\n } else if (this._current === total) {\n nextHandler.addState('disable');\n }\n\n const containerBounds = container.AABBBounds;\n const width = containerBounds.width();\n const height = containerBounds.height();\n\n container.translateTo(0 - containerBounds.x1 + parsedPadding[3], 0 - containerBounds.y1 + parsedPadding[0]);\n this.add(container);\n\n this.attribute.width = width + parsedPadding[1] + parsedPadding[3];\n this.attribute.height = height + parsedPadding[0] + parsedPadding[2];\n\n this._bindEvents();\n }\n\n private _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this.preHandler) {\n this.preHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n\n if (this.nextHandler) {\n this.nextHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (!target.hasState('disable')) {\n target.addState('hover');\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n target.removeState('hover');\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (target.name === 'preHandler') {\n if (this._current === 1) {\n return;\n }\n this._current -= 1;\n if (this._current === 1) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toPrev', {\n current: this._current,\n total: this._total,\n direction: 'pre',\n event: e\n });\n }\n\n if (target.name === 'nextHandler') {\n if (this._current === this._total) {\n return;\n }\n this._current += 1;\n\n if (this._current === this._total) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toNext', {\n current: this._current,\n total: this._total,\n direction: 'next',\n event: e\n });\n }\n\n if (this._current > 1) {\n (this.preHandler as ISymbol).removeState('disable');\n }\n if (this._current < this._total) {\n (this.nextHandler as ISymbol).removeState('disable');\n }\n\n (this.text as IText).setAttribute('text', this._getPageText(this._current));\n };\n\n private _reset() {\n this.removeAllChild(true);\n this._current = 1;\n this._total = this.attribute.total as number;\n this.preHandler = this.nextHandler = this.text = null;\n }\n\n private _getPageText(current: number) {\n const { pageFormatter } = this.attribute;\n\n if (pageFormatter) {\n return isFunction(pageFormatter)\n ? pageFormatter(current, this._total)\n : `${pageFormatter}`.replace('{current}', `${current}`).replace('{total}', `${this._total}`);\n }\n\n return `${current}/${this._total}`;\n }\n\n setTotal(total: number) {\n if (total !== this.attribute.total) {\n this._total = total;\n\n if (this._current !== 1 && this._current <= total) {\n this.setAttributes({ total, defaultCurrent: this._current });\n } else {\n this.setAttribute('total', total);\n }\n }\n }\n}\n","import { registerGroup, registerRect, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadSliderComponent() {\n registerGroup();\n registerText();\n registerRect();\n registerSymbol();\n}\n","import { registerGroup, registerPath } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadPagerComponent } from '../pager/register';\nimport { loadSliderComponent } from '../slider/register';\nimport { loadScrollbarComponent } from '../scrollbar/register';\n\nfunction loadBaseLegend() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadDiscreteLegendComponent() {\n loadBaseLegend();\n loadPagerComponent();\n loadScrollbarComponent();\n}\n\nexport function loadColorContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n}\n\nexport function loadSizeContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n registerPath();\n}\n","/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n if (contentWidth < startX + (width as number)) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { height } = item.attribute;\n if (contentHeight < startY + (height as number)) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n","import { isValid, isArray } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IDiscreteLegendData, IDiscreteLegendDataMakeOption, IDiscreteLegendFilterOption } from './interface';\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../../../constant/data';\n\nexport const discreteLegendDataMake = (data: Array, op: IDiscreteLegendDataMakeOption) => {\n const result: IDiscreteLegendData[] = [];\n const tempKey: { [key in string]: boolean } = {};\n const { series, seriesField } = op;\n series().forEach(s => {\n const field = seriesField(s);\n let infoList;\n if (field === s.getSeriesField()) {\n infoList = s.getSeriesInfoList();\n } else {\n infoList = s.getSeriesInfoInField(field);\n }\n infoList.forEach(info => {\n if (tempKey[info.key]) {\n return;\n }\n tempKey[info.key] = true;\n result.push(info);\n });\n });\n return result;\n};\n\nexport const discreteLegendFilter = (data: Array, op: IDiscreteLegendFilterOption) => {\n const { series, selected, field, data: legendData, customFilter } = op;\n const selectedData = selected();\n const legendKeys = legendData(); // 全量的图例项\n if (selectedData.length === 0 && legendKeys.length) {\n return [];\n }\n\n if (selectedData.length === legendKeys.length) {\n return data;\n }\n\n const selectedFilter = {};\n selectedData.forEach(s => {\n selectedFilter[s] = true;\n });\n\n const datumField = field() ?? DEFAULT_DATA_SERIES_FIELD;\n\n if (customFilter) {\n return customFilter(data, selectedData, datumField);\n } else if (isArray(data) && data[0]?.nodes) {\n // data silter for sankey chart\n data[0].nodes = data[0].nodes.filter((d: any) => selectedFilter[d.key] === true);\n if (data[0]?.links) {\n data[0].links = data[0].links.filter(\n (d: any) => selectedFilter[d.source] === true && selectedFilter[d.target] === true\n );\n }\n } else {\n if (isValid(datumField)) {\n data = data.filter(d => selectedFilter[series.getSeriesFieldValue(d, datumField)] === true);\n }\n }\n\n return data;\n};\n","import { isNil, isEqual, isValid, array, isValidNumber } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect } from '../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutRect, ILayoutType, IOrientType, IPoint, StringOrNumber } from '../../typings';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { ChartEvent } from '../../constant/event';\nimport { eachSeries } from '../../util/model';\nimport { isValidOrient } from '../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { CompilableData } from '../../compile/data/compilable-data';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILegend, ILegendCommonSpec } from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseLegend extends BaseComponent implements ILegend {\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Legend;\n layoutLevel: number = LayoutLevel.Legend;\n\n static specKey = 'legends';\n specKey = 'legends';\n\n protected _orient: IOrientType = 'left';\n get orient() {\n return this._orient;\n }\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n protected _position: 'start' | 'middle' | 'end' = 'middle';\n get position() {\n return this._position;\n }\n\n protected _legendData!: CompilableData;\n /**\n * 获取图例数据\n * @returns 图例的数据\n */\n getLegendData() {\n return this._legendData.getLatestData();\n }\n\n private _preSelectedData: StringOrNumber[] = [];\n protected _selectedData: StringOrNumber[] = [];\n /**\n * getSelectedData\n */\n getSelectedData() {\n return this._selectedData;\n }\n\n protected _legendComponent: IGroup;\n private _cacheAttrs: any;\n\n effect: IEffect = {\n onSelectedDataChange: () => {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionUserIndex?: number[];\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this._orient = isValidOrient(this._spec.orient) ? this._spec.orient : 'left';\n this._position = this._spec.position ?? 'middle';\n this._visible = this._spec.visible !== false;\n\n const { regionId, regionIndex, seriesId, seriesIndex } = this._spec;\n\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionUserIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId, this._regionUserIndex);\n }\n\n created() {\n super.created();\n // data\n this.initData();\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (spec?.orient !== prevSpec?.orient) {\n result.reMake = true;\n return result;\n }\n if (!isEqual(prevSpec, spec)) {\n result.reCompile = true;\n }\n return result;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected abstract _initLegendData(): DataView;\n protected abstract _initSelectedData(): void;\n protected abstract _getLegendAttributes(rect: ILayoutRect): any;\n protected abstract _getLegendConstructor(): any;\n protected abstract _initEvent(): void;\n\n private _bindLegendDataChange() {\n this._preSelectedData = this._selectedData.slice();\n this._initSelectedData();\n }\n\n protected initData() {\n const legendData = this._initLegendData();\n legendData.target.addListener('change', this._bindLegendDataChange.bind(this));\n this._legendData = new CompilableData(this._option, legendData);\n\n this._initSelectedData();\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n this._legendData.getDataView().reRunAllTransform();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n const lastData = this._selectedData;\n if (isNil(selectedData) || JSON.stringify(lastData) === JSON.stringify(selectedData)) {\n return;\n }\n\n // 更新图例筛选\n eachSeries(\n this._regions,\n s => {\n if (s.legendSelectedFilter) {\n selectedData = s.legendSelectedFilter(this, selectedData);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n\n this._selectedData = [...selectedData];\n // 更新数据\n this.effect.onSelectedDataChange?.();\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n\n // 更新图例样式\n (this._legendComponent as unknown as any)?.setSelected(this._selectedData);\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n super.afterSetLayoutStartPoint(pos);\n\n if (this._legendComponent) {\n const { x, y } = pos;\n if (isValidNumber(x * y)) {\n this._legendComponent.setAttributes({ x, y });\n }\n }\n }\n\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n if (!this._visible) {\n if (this._legendComponent && this._legendComponent.parent) {\n this._legendComponent.parent.removeChild(this._legendComponent);\n this._legendComponent = null;\n }\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n const result = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n const attrs = this._getLegendAttributes(rect);\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n if (this._legendComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n } else {\n const legendConstructor = this._getLegendConstructor();\n const legend = new legendConstructor(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData\n })\n );\n legend.name = 'legend';\n this._legendComponent = legend;\n const container = this.getContainer();\n container.add(legend);\n\n // 绑定事件\n if (!this._option.disableTriggerEvent) {\n this._initEvent();\n }\n\n // 代理 legend 上的事件\n legend.on('*', (event: any, type: string) => this._delegateEvent(this._legendComponent, event, type));\n }\n this._cacheAttrs = attrs;\n\n const width = isFinite(this._legendComponent.AABBBounds.width()) ? this._legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this._legendComponent.AABBBounds.height()) ? this._legendComponent.AABBBounds.height() : 0;\n\n if (this.layoutType !== 'normal-inline') {\n // 调整位置\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const position = this._position;\n const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width;\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height;\n }\n }\n\n this._legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY\n });\n }\n\n result.x2 = result.x1 + width;\n result.y2 = result.y1 + height;\n return result;\n }\n\n onDataUpdate(): void {\n if (JSON.stringify(this._preSelectedData) === JSON.stringify(this._selectedData)) {\n return;\n }\n\n if (this._legendComponent) {\n // 更新组件\n const attrs = this._getLegendAttributes(this.getLayoutRect());\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n }\n // 更新数据流\n this.effect.onSelectedDataChange?.();\n // 需要重新布局\n this.getChart()?.setLayoutTag(true, null, false);\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._legendComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n this._preSelectedData = null;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isNil, isValidNumber, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport type { IDiscreteLegendSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { getLegendAttributes } from './util';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { LegendEvent } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscreteLegend as LegendComponent } from '@visactor/vrender-components';\nimport { discreteLegendDataMake, discreteLegendFilter } from '../../../data/transforms/legend-data/discrete/discrete';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { StringOrNumber } from '../../../typings';\nimport { getFormatFunction, getSpecInfo } from '../../util';\nimport type { IDiscreteLegendData } from '../../../data/transforms/legend-data/discrete';\n\nexport class DiscreteLegend extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.discreteLegend;\n type = ComponentTypeEnum.discreteLegend;\n name: string = ComponentTypeEnum.discreteLegend;\n\n protected _unselectedData: StringOrNumber[];\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IDiscreteLegendSpec) => {\n return !s.type || s.type === 'discrete';\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'discreteLegendFilter',\n options: {\n series: s,\n selected: () => this._selectedData,\n field: () => this._getSeriesLegendField(s),\n data: () => this.getLegendDefaultData(),\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendFilter', discreteLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendDataMake', discreteLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'discreteLegendDataMake',\n options: {\n series: () => {\n const result: ISeries[] = [];\n eachSeries(\n this._regions,\n s => {\n result.push(s);\n },\n {\n specIndex: this._spec.seriesIndex,\n userId: this._spec.seriesId\n }\n );\n return result;\n },\n seriesField: (s: ISeries) => this._getSeriesLegendField(s)\n }\n });\n\n return legendData;\n }\n\n protected _getSeriesLegendField(s: ISeries) {\n const defaultField = s.getSeriesField();\n const specifyScaleId = this._spec.scaleName ?? this._spec.scale;\n\n if (isNil(specifyScaleId)) {\n return defaultField;\n }\n if (!s.getRawData()) {\n return defaultField;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(specifyScaleId);\n if (!scaleSpec) {\n return defaultField;\n }\n\n // field是只在图例指定了scale的情况下生效\n if (this._spec.field) {\n return this._spec.field;\n }\n\n if (!isDataDomainSpec(scaleSpec.domain)) {\n return defaultField;\n }\n const seriesData = scaleSpec.domain.find(d => d.dataId === s.getRawData().name);\n if (!seriesData) {\n return defaultField;\n }\n return seriesData.fields?.[0] ?? defaultField;\n }\n\n protected _initSelectedData(): void {\n const fullSelectedData = this.getLegendDefaultData();\n\n if (this._unselectedData) {\n const selected: StringOrNumber[] = [];\n const unselected: StringOrNumber[] = [];\n\n fullSelectedData.forEach((entry: StringOrNumber) => {\n if (this._unselectedData.includes(entry)) {\n unselected.push(entry);\n } else {\n selected.push(entry);\n }\n });\n this._selectedData = selected;\n this._unselectedData = unselected;\n } else if (this._spec.defaultSelected) {\n this._selectedData = [...this._spec.defaultSelected];\n } else {\n this._selectedData = fullSelectedData;\n }\n }\n\n getLegendDefaultData(originalData?: boolean) {\n if (isFunction(this._spec.data)) {\n return this._getLegendItems().map((obj: LegendItemDatum) => obj.label);\n }\n\n return this._legendData\n .getLatestData()\n .map(originalData ? (obj: IDiscreteLegendData) => obj.originalKey : (obj: IDiscreteLegendData) => obj.key);\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n // 默认使用第0个系列的 seriesField 别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), series.getSeriesField());\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const attrs = {\n layout,\n items: this._getLegendItems(),\n zIndex: this.layoutZIndex,\n ...getLegendAttributes(this._spec, rect),\n // maxWidth 和 maxHeight 已经在布局模块处理了,所以 rect 的优先级最高\n maxWidth: rect.width,\n maxHeight: rect.height\n };\n this._addDefaultTitleText(attrs);\n this._addLegendItemFormatMethods(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return LegendComponent;\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n if (selectedData) {\n this._unselectedData = this.getLegendDefaultData().filter(\n (entry: StringOrNumber) => !selectedData.includes(entry)\n );\n }\n\n super.setSelectedData(selectedData);\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n doFilter && this.setSelectedData(selectedData);\n this.event.emit(ChartEvent.legendItemClick, { model: this, value: selectedData, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemHover, { model: this, value: detail, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemUnHover, { model: this, value: detail, event: e });\n });\n }\n }\n\n private _getLegendItems() {\n const originData = (this._legendData.getLatestData() || []).map((datum: any) => {\n const fillOpacity = datum.style('fillOpacity');\n const strokeOpacity = datum.style('strokeOpacity');\n const opacity = datum.style('opacity');\n const texture = datum.style('texture');\n\n return {\n label: datum.key,\n shape: {\n symbolType: datum.style('symbolType') ?? datum.shapeType ?? 'circle',\n fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,\n strokeOpacity: isValidNumber(strokeOpacity) ? strokeOpacity : 1,\n opacity: isValidNumber(opacity) ? opacity : 1,\n texturePadding: texture ? 1 : null,\n textureSize: texture ? 4 : null,\n texture,\n fill: datum.style('fill'),\n stroke: datum.style('stroke'),\n textureColor: datum.style('textureColor'),\n innerBorder: datum.style('innerBorder'),\n outerBorder: datum.style('outerBorder'),\n lineDash: datum.style('lineDash'),\n lineDashOffset: datum.style('lineDashOffset'),\n lineWidth: datum.style('lineWidth')\n }\n };\n });\n const legendItems = isFunction(this._spec.data)\n ? this._spec.data(originData, this._option.globalScale.getScale('color'), this._option.globalScale)\n : originData;\n return legendItems;\n }\n\n private _addLegendItemFormatMethods(attrs: any) {\n const { formatMethod: labelFormatMethod, formatter: labelFormatter } = this._spec.item?.label ?? {};\n const { formatMethod: valueFormatMethod, formatter: valueFormatter } = this._spec.item?.value ?? {};\n\n const { formatFunc: labelFormatFunc } = getFormatFunction(labelFormatMethod, labelFormatter);\n if (labelFormatter && !labelFormatMethod && labelFormatFunc) {\n attrs.item.label.formatMethod = (value: string, datum: any) => {\n return labelFormatFunc(value, datum, labelFormatter);\n };\n }\n const { formatFunc: valueFormatFunc } = getFormatFunction(valueFormatMethod, valueFormatter);\n if (valueFormatter && !valueFormatMethod && valueFormatFunc) {\n attrs.item.value.formatMethod = (value: string, datum: any) => {\n return valueFormatFunc(valueFormatter, value, datum, labelFormatter);\n };\n }\n }\n}\n\nexport const registerDiscreteLegend = () => {\n Factory.registerComponent(DiscreteLegend.type, DiscreteLegend);\n};\n","import { isEmpty, isValidNumber } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IContinuousLegendDataMakeOption, IContinuousLegendFilterOption } from './interface';\nimport { filterHierarchyDataByRange, isHierarchyItem } from '../../../../util';\n\n// 获取数值范围\nexport const continuousLegendDataMake = (data: Array, op: IContinuousLegendDataMakeOption) => {\n const { series, field, scale } = op;\n const datumField = field();\n if (field && datumField) {\n let min: number = Infinity;\n let max: number = -Infinity;\n series().forEach(s => {\n const statisticData = s.getRawDataStatisticsByField(datumField, true);\n const seriesMin = statisticData?.min;\n const seriesMax = statisticData?.max;\n if (isValidNumber(seriesMin)) {\n min = Math.min(seriesMin, min);\n }\n if (isValidNumber(seriesMax)) {\n max = Math.max(seriesMax, max);\n }\n });\n return [min, max];\n }\n if (scale) {\n const _scale = scale();\n if (!_scale) {\n return [];\n }\n return _scale.domain();\n }\n return [];\n};\n\n// 连续数据过滤\nexport const continuousLegendFilter = (data: Array, op: IContinuousLegendFilterOption) => {\n const { selected, field, data: legendData, isHierarchyData, customFilter } = op;\n const selectedRange = selected();\n const datumField = field();\n const dataRange = legendData();\n const isHierarchy = isHierarchyData\n ? isHierarchyData\n : (data: Array) => data && data.some(d => d && isHierarchyItem(d));\n\n // 如果数值范围相等,就不进行返回 data,不需要进行过滤\n if (selectedRange === dataRange) {\n return data;\n }\n if (datumField && !isEmpty(selectedRange)) {\n const [min, max] = selectedRange;\n\n if (customFilter) {\n return customFilter(data, selectedRange, datumField);\n } else if (isHierarchy(data)) {\n return filterHierarchyDataByRange(data, +min, +max, datumField);\n }\n return data.filter(datum => {\n return datum[datumField] >= min && datum[datumField] <= max;\n });\n }\n\n return data;\n};\n","/**\n * @description slider 滑块组件\n * TODO:\n * 3. step 功能开发\n * 4. tooltip 功能开发\n */\nimport type {\n IGroup,\n ISymbol,\n IGraphic,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n FederatedPointerEvent,\n Cursor\n} from '@visactor/vrender-core';\nimport { isNil, merge, clamp, isValid, array, isObject, isArray, clampRange, debounce } from '@visactor/vutils';\nimport { graphicCreator, vglobal, CustomEvent } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { SLIDER_ELEMENT_NAME } from './constant';\n\nimport type { SliderAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSliderComponent } from './register';\n\nfunction convertValueToRange(value: number | [number, number]) {\n if (isArray(value)) {\n return value;\n }\n return [value, value];\n}\n\nfunction getDefaultCursor(isHorizontal: boolean) {\n return isHorizontal ? 'ew-resize' : 'ns-resize';\n}\n\nloadSliderComponent();\n\nexport class Slider extends AbstractComponent> {\n name = 'slider';\n\n static defaultAttributes = {\n slidable: true,\n layout: 'horizontal',\n align: 'bottom',\n height: 8,\n showHandler: true,\n handlerSize: 14,\n handlerStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n tooltip: {\n shapeStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n text: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n },\n railStyle: {\n fill: 'rgba(0,0,0,.04)'\n },\n trackStyle: {\n fill: '#91caff'\n },\n showValue: true,\n valueStyle: {\n fill: '#2C3542',\n fontSize: 12\n },\n startText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n endText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n handlerText: {\n visible: true,\n space: 4,\n precision: 0,\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n };\n\n protected _isHorizontal = true;\n protected _innerView!: IGroup;\n protected _mainContainer!: IGroup;\n protected _startHandler: ISymbol | null = null;\n protected _endHandler: ISymbol | null = null;\n protected _startHandlerText: IText | null = null;\n protected _endHandlerText: IText | null = null;\n protected _railContainer!: IGroup;\n protected _rail!: IGraphic;\n protected _track!: IGraphic;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // 存储当前正在操作的滑块\n private _currentHandler: IGraphic | null = null;\n private _currentValue: { startValue?: number; endValue?: number; startPos?: number; endPos?: number } = {};\n private _tooltipState: {\n isActive?: boolean;\n pos?: number;\n value?: number;\n };\n private _isChanging?: boolean;\n\n protected _tooltipShape?: ISymbol;\n protected _tooltipText?: IText;\n\n get track() {\n return this._track;\n }\n\n get currentValue() {\n return this._currentValue;\n }\n\n get startHandler() {\n return this._startHandler;\n }\n\n get endHandler() {\n return this._endHandler;\n }\n\n get tooltipShape() {\n return this._tooltipShape;\n }\n\n constructor(attributes: SliderAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Slider.defaultAttributes, attributes));\n }\n\n protected calculatePosByValue(value: number, pos?: 'start' | 'end') {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n let ratio = 0;\n\n if (min === max) {\n ratio = pos === 'start' ? 0 : pos === 'end' ? 1 : 0;\n } else {\n ratio = (value - min) / (max - min);\n }\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return (inverse ? 1 - ratio : ratio) * railLen;\n }\n\n protected calculateValueByPos(pos: number) {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return min + (max - min) * (inverse ? 1 - pos / railLen : pos / railLen);\n }\n\n /**\n * 更新值域\n */\n setValue(value: number | number[]) {\n const { min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const [startValue, endValue] = array(value);\n\n const { startHandler, endHandler } = this._getHandlers();\n if (startHandler) {\n this._updateHandler(startHandler, this.calculatePosByValue(startValue), startValue);\n }\n\n if (endHandler) {\n this._updateHandler(endHandler, this.calculatePosByValue(endValue), endValue);\n }\n\n this._updateTrack();\n }\n\n render() {\n this.removeAllChild(true);\n const {\n layout = 'horizontal',\n railWidth,\n railHeight,\n startText,\n endText,\n min,\n max,\n showHandler = true,\n showTooltip\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n this._currentValue = {\n startValue: convertValueToRange(value)[0],\n endValue: convertValueToRange(value)[1]\n };\n const isHorizontal = layout === 'horizontal';\n this._isHorizontal = isHorizontal;\n\n const innerView = graphicCreator.group({\n x: 0,\n y: 0\n });\n innerView.name = SLIDER_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n let startLen = 0;\n let startTextShape;\n if (startText && startText.visible) {\n // 渲染首部文本\n startTextShape = graphicCreator.text({\n x: isHorizontal ? 0 : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : 0,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: startText.text,\n lineHeight: startText.style?.fontSize,\n ...startText.style\n });\n startTextShape.name = SLIDER_ELEMENT_NAME.startText;\n innerView.add(startTextShape);\n const space = isValid(startText.space) ? startText.space : 0;\n startLen += (isHorizontal ? startTextShape.AABBBounds.width() : startTextShape.AABBBounds.height()) + space;\n }\n const mainContainer = graphicCreator.group({\n x: isHorizontal ? startLen : 0,\n y: isHorizontal ? 0 : startLen\n });\n innerView.add(mainContainer);\n\n const railContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n railContainer.name = SLIDER_ELEMENT_NAME.railContainer;\n this._railContainer = railContainer;\n mainContainer.add(railContainer);\n\n this._mainContainer = mainContainer;\n\n this._renderRail(railContainer);\n\n startLen += isHorizontal ? (railWidth as number) : (railHeight as number);\n\n let endTextShape;\n if (endText && endText.visible) {\n const space = isValid(endText.space) ? endText.space : 0;\n\n // 渲染首部文本\n endTextShape = graphicCreator.text({\n x: isHorizontal ? startLen + space : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : startLen + space,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: endText.text,\n lineHeight: endText.style?.fontSize,\n ...endText.style\n });\n endTextShape.name = SLIDER_ELEMENT_NAME.endText;\n innerView.add(endTextShape);\n }\n\n this._renderTrack(railContainer);\n\n if (showHandler) {\n this._renderHandlers(mainContainer);\n this._bindEvents();\n }\n\n if (showTooltip) {\n this._renderTooltip();\n this._bindTooltipEvents();\n }\n }\n\n // 渲染滑块轨道\n protected _renderRail(container: IGroup) {\n const { railWidth, railHeight, railStyle, slidable } = this.attribute;\n\n let cursor: Cursor = 'default';\n if (slidable !== false) {\n cursor = 'pointer';\n }\n\n const railShape = graphicCreator.rect({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cursor,\n ...railStyle\n });\n railShape.name = SLIDER_ELEMENT_NAME.rail;\n container.add(railShape);\n this._rail = railShape;\n\n return railShape;\n }\n\n // 渲染 handler\n protected _renderHandlers(container: IGroup) {\n const {\n range,\n min,\n max,\n handlerSize = 14,\n handlerStyle,\n handlerText,\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n const handlerTextVisible = handlerText && handlerText.visible;\n const isHorizontal = this._isHorizontal;\n\n const [startValue, endValue] = convertValueToRange(value);\n // 单滑块\n const startPos = this.calculatePosByValue(startValue, range ? 'start' : 'end');\n const startHandler = this._renderHandler({\n x: isHorizontal ? startPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : startPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n startHandler.name = SLIDER_ELEMENT_NAME.startHandler;\n this._startHandler = startHandler;\n container.add(startHandler);\n this._currentValue.startPos = startPos;\n\n if (handlerTextVisible) {\n const startHandlerText = this._renderHandlerText(startValue, range ? 'start' : 'end');\n startHandlerText.name = SLIDER_ELEMENT_NAME.startHandlerText;\n container.add(startHandlerText);\n\n this._startHandlerText = startHandlerText;\n }\n\n if (range) {\n // 绘制第二个滑块\n // 单滑块\n const endPos = this.calculatePosByValue(endValue, 'end');\n const endHandler = this._renderHandler({\n x: isHorizontal ? endPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : endPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n endHandler.name = SLIDER_ELEMENT_NAME.endHandler;\n this._endHandler = endHandler;\n container.add(endHandler);\n this._currentValue.endPos = endPos;\n\n if (handlerTextVisible) {\n const endHandlerText = this._renderHandlerText(endValue, 'end');\n endHandlerText.name = SLIDER_ELEMENT_NAME.endHandlerText;\n container.add(endHandlerText);\n\n this._endHandlerText = endHandlerText;\n }\n }\n }\n\n // 渲染选中区域\n protected _renderTrack(container: IGroup) {\n const { range, min, max, railHeight, railWidth, trackStyle, railStyle, slidable, value } = this\n .attribute as SliderAttributes;\n\n let startValue;\n let endValue;\n\n if (isNil(value)) {\n if (range) {\n startValue = min;\n endValue = max;\n } else {\n startValue = endValue = min;\n }\n } else {\n if (range) {\n const clampValue = clampRange(value as [number, number], min, max);\n startValue = clampValue[0];\n endValue = clampValue[1];\n } else {\n startValue = min;\n endValue = clamp(value as number, min, max);\n }\n }\n\n const isHorizontal = this._isHorizontal;\n // eslint-disable-next-line prefer-const\n // let [startValue, endValue] = convertValueToRange(value);\n\n if (!range) {\n startValue = min;\n }\n\n const trackContainer = graphicCreator.group({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cornerRadius: railStyle?.cornerRadius,\n clip: true,\n pickable: false\n });\n trackContainer.name = SLIDER_ELEMENT_NAME.trackContainer;\n\n const draggableTrack = isObject(range) && range.draggableTrack === true;\n let cursor: Cursor;\n if (slidable === false) {\n cursor = 'default';\n } else if (range === false) {\n cursor = 'pointer';\n } else if (draggableTrack === false) {\n cursor = 'pointer';\n } else {\n cursor = getDefaultCursor(isHorizontal);\n }\n\n const startPos = this.calculatePosByValue(startValue, 'start');\n const endPos = this.calculatePosByValue(endValue, range ? 'end' : 'start');\n\n const track = graphicCreator.rect({\n x: isHorizontal ? Math.min(startPos, endPos) : 0,\n y: isHorizontal ? 0 : Math.min(startPos, endPos),\n width: isHorizontal ? Math.abs(endPos - startPos) : railWidth,\n height: isHorizontal ? railHeight : Math.abs(endPos - startPos),\n cursor,\n ...trackStyle\n });\n track.name = SLIDER_ELEMENT_NAME.track;\n this._track = track;\n trackContainer.add(track);\n container.add(trackContainer);\n }\n\n protected _renderHandler(style: Partial) {\n // 渲染单个滑块\n const handler = graphicCreator.symbol(style);\n\n return handler;\n }\n\n private _renderHandlerText(value: number, position: 'start' | 'end') {\n const {\n align,\n handlerSize = 14,\n handlerText = {},\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n\n const isHorizontal = this._isHorizontal;\n\n const pos = this.calculatePosByValue(value, position);\n const textSpace = handlerText.space ?? 4;\n const textStyle: ITextGraphicAttribute = {\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n lineHeight: handlerText.style?.lineHeight,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)\n };\n if (isHorizontal) {\n if (align === 'top') {\n // 展示 slider 上部\n textStyle.textBaseline = 'bottom';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight - handlerSize) / 2 - textSpace;\n } else {\n // 展示 slider 下部\n textStyle.textBaseline = 'top';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight + handlerSize) / 2 + textSpace;\n }\n } else {\n if (align === 'left') {\n // 展示 slider 左侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'end';\n textStyle.x = (railWidth - handlerSize) / 2 - textSpace;\n textStyle.y = pos;\n } else {\n // 展示 slider 右侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'start';\n textStyle.x = (railWidth + handlerSize) / 2 + textSpace;\n textStyle.y = pos;\n }\n }\n\n // 展示 handler 当前所在的数值\n const textShape = graphicCreator.text({\n ...textStyle,\n ...handlerText.style\n });\n return textShape;\n }\n\n private _renderTooltip() {\n const { tooltip, railHeight, railWidth, align } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n this._tooltipState = {\n value: this._currentValue.startValue,\n pos: this._currentValue.startPos\n };\n } else {\n this._tooltipState = null;\n }\n\n const cx = this._isHorizontal ? 0 : railWidth / 2;\n const cy = this._isHorizontal ? railHeight / 2 : 0;\n\n if (tooltip && tooltip.shape) {\n const shape = graphicCreator.symbol({\n pickable: false,\n visible: !!this._tooltipState,\n x: cx,\n y: cy,\n symbolType: 'circle',\n\n ...tooltip.shapeStyle\n });\n\n this._tooltipShape = shape;\n this._mainContainer.add(shape);\n }\n\n const textConfig = (tooltip && tooltip.text) || {};\n const space = textConfig.space ?? 6;\n\n const textStyle: ITextGraphicAttribute = {\n pickable: false,\n visible: !!this._tooltipState,\n text: ''\n };\n\n if (this._isHorizontal) {\n textStyle.x = cx;\n textStyle.y = align === 'top' ? cy - railHeight / 2 - space : cy + railHeight / 2 + space;\n textStyle.textAlign = 'center';\n textStyle.textBaseline = align === 'top' ? 'bottom' : 'top';\n } else {\n textStyle.y = cy;\n textStyle.x = align === 'left' ? cx - railWidth / 2 - space : cy + railWidth / 2 + space;\n textStyle.textAlign = align === 'left' ? 'end' : 'start';\n textStyle.textBaseline = 'middle';\n }\n const text = graphicCreator.text({\n ...textStyle,\n ...textConfig.style\n });\n\n this._mainContainer.add(text);\n this._tooltipText = text;\n\n if (this._tooltipState) {\n this._updateTooltip();\n }\n }\n\n private _updateTooltip() {\n if ((!this._tooltipShape && !this._tooltipText) || !this._tooltipState) {\n return;\n }\n const { railWidth, railHeight } = this.attribute;\n\n const railLen = this._isHorizontal ? railWidth : railHeight;\n const coord = this._tooltipState.pos * railLen;\n const coordKey = this._isHorizontal ? 'x' : 'y';\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttributes({\n visible: true,\n [coordKey]: coord\n });\n }\n const { align } = this.attribute;\n\n if (this._tooltipText) {\n const textConfig = (this.attribute.tooltip && this.attribute.tooltip.text) || {};\n this._tooltipText.setAttributes({\n visible: true,\n [coordKey]: coord,\n text: textConfig.formatter\n ? textConfig.formatter(this._tooltipState.value)\n : !this._isHorizontal && align === 'left'\n ? `${this._tooltipState.value.toFixed(textConfig.precision ?? 0)} ≈`\n : `≈ ${this._tooltipState.value.toFixed(textConfig.precision ?? 0)}`\n });\n }\n }\n\n private _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { slidable, range } = this.attribute as SliderAttributes;\n if (slidable) {\n if (this._startHandler) {\n this._startHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._startHandlerText) {\n this._startHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandler) {\n this._endHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandlerText) {\n this._endHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n\n if (isObject(range) && range.draggableTrack) {\n this._track.addEventListener('pointerdown', this._onTrackPointerdown as EventListenerOrEventListenerObject);\n }\n\n this._railContainer.addEventListener(\n 'pointerdown',\n this._onRailPointerDown as EventListenerOrEventListenerObject\n );\n }\n }\n\n private _bindTooltipEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n\n this._mainContainer.addEventListener('pointerenter', this._onTooltipShow as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointermove', this._onTooltipUpdate as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointerleave', this._onTooltipHide as EventListenerOrEventListenerObject);\n }\n\n private _onTooltipShow = (e: FederatedPointerEvent) => {\n if (this._isChanging || (this._tooltipState && this._tooltipState.isActive)) {\n return;\n }\n\n if (!this._tooltipState) {\n this._tooltipState = { isActive: true };\n } else {\n this._tooltipState.isActive = true;\n }\n\n this._onTooltipUpdate(e);\n this._dispatchTooltipEvent('sliderTooltipShow');\n };\n\n private _onTooltipUpdate = (e: FederatedPointerEvent) => {\n if (this._isChanging || !this._tooltipState || !this._tooltipState.isActive) {\n return;\n }\n const railLen = this._isHorizontal ? this._rail.globalAABBBounds.width() : this._rail.globalAABBBounds.height();\n const pos = clamp(\n this._isHorizontal\n ? (e.viewX - this._rail.globalAABBBounds.x1) / railLen\n : (e.viewY - this._rail.globalAABBBounds.y1) / railLen,\n 0,\n 1\n );\n\n if (pos !== this._tooltipState.pos) {\n this._tooltipState.pos = pos;\n this._tooltipState.value = this.calculateValueByPos(pos * railLen);\n\n this._updateTooltip();\n this._dispatchTooltipEvent('sliderTooltipUpdate');\n }\n };\n\n private _onTooltipHide = () => {\n const { tooltip } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n return;\n }\n\n this._tooltipState = null;\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttribute('visible', false);\n }\n if (this._tooltipText) {\n this._tooltipText.setAttribute('visible', false);\n }\n this._dispatchTooltipEvent('sliderTooltipHide');\n };\n\n private _onHandlerPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { x, y } = this.stage.eventPointTransform(e);\n this._currentHandler = e.target as unknown as IGraphic;\n this._prePos = this._isHorizontal ? x : y;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onHandlerPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const { x, y } = this.stage.eventPointTransform(e);\n let currentPos;\n let delta = 0;\n let originPos;\n let railLen;\n if (!this._isHorizontal) {\n currentPos = y;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.y as number;\n railLen = railHeight;\n } else {\n currentPos = x;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.x as number;\n railLen = railWidth;\n }\n\n const newPos = clamp(originPos + delta, 0, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n\n if (this._currentHandler.type === 'text') {\n this._updateHandlerText(this._currentHandler as IText, newPos, currentValue);\n } else {\n this._updateHandler(this._currentHandler as ISymbol, newPos, currentValue);\n }\n\n this._updateTrack();\n this._prePos = currentPos;\n\n this._dispatchChangeEvent();\n };\n\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n this._currentHandler = null;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener(\n 'pointerupoutside',\n this._onHandlerPointerUp as EventListenerOrEventListenerObject\n );\n }\n };\n\n private _onTrackPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n\n const { x, y } = this.stage.eventPointTransform(e);\n this._prePos = this._isHorizontal ? x : y;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onTrackPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n const { startHandler, endHandler } = this._getHandlers();\n\n let currentPos;\n let trackLen;\n let railLen;\n const { x, y } = this.stage.eventPointTransform(e);\n if (this._isHorizontal) {\n currentPos = x;\n // @ts-ignore\n trackLen = this._track.attribute.width;\n railLen = railWidth;\n } else {\n currentPos = y;\n // @ts-ignore\n trackLen = this._track.attribute.height;\n railLen = railHeight;\n }\n const delta = currentPos - this._prePos; // 实际位移的变化\n if (startHandler) {\n const originPos = (this._isHorizontal ? startHandler.attribute.x : startHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, trackLen, railLen)\n : clamp(originPos + delta, 0, railLen - trackLen);\n const currentValue = this.calculateValueByPos(newPos);\n this._updateHandler(startHandler, newPos, currentValue);\n }\n\n if (endHandler) {\n const originPos = (this._isHorizontal ? endHandler.attribute.x : endHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, 0, railLen - trackLen)\n : clamp(originPos + delta, trackLen, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n const startHandlerAttribute = startHandler?.attribute;\n this._updateHandler(endHandler, newPos, currentValue);\n this._track.setAttributes(\n this._isHorizontal\n ? {\n x: Math.min(startHandlerAttribute.x as number, endHandler.attribute.x as number),\n // @ts-ignore\n width: Math.abs((startHandlerAttribute.x as number) - (endHandler.attribute.x as number))\n }\n : {\n y: Math.min(startHandlerAttribute.y as number, endHandler.attribute.y as number),\n // @ts-ignore\n height: Math.abs((startHandlerAttribute.y as number) - (endHandler.attribute.y as number))\n }\n );\n }\n\n this._prePos = currentPos;\n this._dispatchChangeEvent();\n };\n\n private _onTrackPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n\n const startHandler = this._startHandler as ISymbol;\n const endHandler = this._endHandler;\n\n let currentPos;\n let startHandlerPos;\n let endHandlerPos;\n let railLen;\n // 更新 handler, text 以及 track\n if (this._isHorizontal) {\n currentPos = e.viewX - this._rail.globalAABBBounds.x1;\n startHandlerPos = startHandler?.attribute.x as number;\n endHandlerPos = endHandler?.attribute.x;\n railLen = railWidth;\n } else {\n currentPos = e.viewY - this._rail.globalAABBBounds.y1;\n startHandlerPos = startHandler?.attribute.y as number;\n endHandlerPos = endHandler?.attribute.y;\n railLen = railHeight;\n }\n\n const currentValue = this.calculateValueByPos(currentPos);\n\n if (isValid(endHandlerPos)) {\n const updateHandler = (\n Math.abs(currentPos - startHandlerPos) > Math.abs(currentPos - endHandlerPos) ? endHandler : startHandler\n ) as ISymbol;\n this._updateHandler(updateHandler, currentPos, currentValue);\n } else {\n this._updateHandler(startHandler, currentPos, currentValue);\n }\n this._updateTrack();\n\n this._dispatchChangeEvent();\n };\n\n // 更新 track 样式\n private _updateTrack() {\n // 更新 track\n const { inverse, railWidth, railHeight } = this.attribute;\n const startHandler = this._startHandler;\n const endHandler = this._endHandler;\n\n if (this._isHorizontal) {\n const startHandlerPos = startHandler?.attribute.x as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.x as number;\n // 区间\n this._track.setAttributes({\n x: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n width: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n x: startHandlerPos,\n // @ts-ignore\n width: railWidth - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n width: startHandlerPos\n });\n }\n } else {\n const startHandlerPos = startHandler?.attribute.y as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.y as number;\n // 区间\n this._track.setAttributes({\n y: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n height: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n y: startHandlerPos,\n // @ts-ignore\n height: railHeight - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n height: startHandlerPos\n });\n }\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandler(handler: ISymbol, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n handler.setAttribute(isHorizontal ? 'x' : 'y', position);\n const updateHandlerText =\n handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;\n if (updateHandlerText) {\n const { handlerText = {} } = this.attribute as SliderAttributes;\n updateHandlerText.setAttributes({\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandlerText(handlerText: IText, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n const { handlerText: handlerTextAttr = {} } = this.attribute as SliderAttributes;\n handlerText.setAttributes({\n [isHorizontal ? 'x' : 'y']: position,\n text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed(handlerTextAttr.precision ?? 0)\n });\n const updateHandler =\n handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;\n if (updateHandler) {\n updateHandler.setAttributes({\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n private _dispatchChangeEvent() {\n const isRange = !!this.attribute.range;\n const currentValue = this._currentValue;\n\n this._dispatchEvent('change', {\n value: isRange\n ? [\n Math.min(currentValue.endValue as number, currentValue.startValue as number),\n Math.max(currentValue.endValue as number, currentValue.startValue as number)\n ]\n : currentValue.startValue,\n position: isRange\n ? [\n Math.min(currentValue.endPos as number, currentValue.startPos as number),\n Math.max(currentValue.endPos as number, currentValue.startPos as number)\n ]\n : currentValue.startPos\n });\n }\n\n private _dispatchTooltipEvent(type: string) {\n this._dispatchEvent('sliderTooltip', {\n type,\n position: this._tooltipState && this._tooltipState.pos,\n value: this._tooltipState && this._tooltipState.value\n });\n }\n\n private _getHandlers() {\n const { inverse } = this.attribute as SliderAttributes;\n let startHandler = this._startHandler;\n let endHandler = this._endHandler;\n\n if (!endHandler) {\n return { startHandler, endHandler };\n }\n\n if (this._isHorizontal) {\n if (\n (!inverse && (endHandler.attribute.x as number) < (startHandler?.attribute.x as number)) ||\n (inverse && (endHandler.attribute.x as number) > (startHandler?.attribute.x as number))\n ) {\n [startHandler, endHandler] = [endHandler, startHandler];\n }\n } else {\n if (\n (!inverse && (endHandler.attribute.y as number) < (startHandler?.attribute.y as number)) ||\n (inverse && (endHandler.attribute.y as number) > (startHandler?.attribute.y as number))\n ) {\n [startHandler, endHandler] = [endHandler, startHandler];\n }\n }\n\n return {\n startHandler,\n endHandler\n };\n }\n}\n","/**\n * @description 连续颜色图例\n * TODO:\n * showHandlers 测试\n */\nimport { merge, isEmpty, get, isNil } from '@visactor/vutils';\nimport type { FederatedPointerEvent, FederatedEvent, IColor, ILinearGradient, INode } from '@visactor/vrender-core';\nimport type { ILinearScale } from '@visactor/vscale';\nimport { LinearScale } from '@visactor/vscale';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ColorLegendAttributes } from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadColorContinuousLegendComponent } from '../register';\n\nloadColorContinuousLegendComponent();\nexport class ColorContinuousLegend extends LegendBase {\n name = 'colorLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n // orient: 'top',\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n fill: null as any,\n lineWidth: 4,\n stroke: '#fff',\n outerBorder: {\n distance: 2,\n lineWidth: 1,\n stroke: '#ccc'\n }\n },\n tooltip: {\n shapeStyle: {\n lineWidth: 4,\n stroke: '#fff'\n }\n }\n };\n\n private _slider!: Slider;\n private _colorScale!: ILinearScale;\n private _color: IColor | undefined;\n\n constructor(attributes: ColorLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ColorContinuousLegend.defaultAttributes, attributes));\n }\n\n /**\n * 更新数据选中范围\n * @param value 选中数据范围\n * @returns\n */\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n this._updateColor();\n }\n\n protected _renderContent(): void {\n const {\n colors,\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n inverse,\n disableTriggerEvent\n } = this.attribute as ColorLegendAttributes;\n\n // 创建 colorScale\n const domain = [];\n const step = (max - min) / (colors.length - 1);\n for (let i = 0; i < colors.length; i++) {\n domain.push(min + step * i);\n }\n\n this._colorScale = new LinearScale().domain(domain, true).range(colors);\n this._color = this._getTrackColor();\n\n const slider = new Slider({\n x: 0,\n y: 0,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle: {\n fill: this._color,\n ...trackStyle\n },\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent,\n inverse\n });\n this._innerView.add(slider as unknown as INode);\n this._slider = slider;\n // 做下位置调整,对齐\n slider.translateTo(\n 0 - slider.AABBBounds.x1,\n (this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE) : 0) -\n slider.AABBBounds.y1\n );\n this._updateColor();\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n this._slider.addEventListener('sliderTooltip', this._onSliderToolipChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _getTrackColor(): IColor | undefined {\n const { colors, layout, inverse } = this.attribute as ColorLegendAttributes;\n\n if (isEmpty(colors)) {\n return undefined;\n }\n const count = colors.length;\n if (count === 1) {\n return colors[0];\n }\n const stops = [];\n\n for (let i = 0; i < count; i++) {\n const percent = i / (count - 1);\n stops.push({\n offset: percent,\n color: colors[i]\n });\n }\n const isHorizontal = layout === 'horizontal';\n\n const res: IColor = {\n gradient: 'linear',\n stops,\n x0: 0,\n y0: 0,\n x1: isHorizontal ? 1 : 0,\n y1: isHorizontal ? 0 : 1\n };\n\n if (inverse) {\n if (isHorizontal) {\n res.x0 = 1;\n res.x1 = 0;\n } else {\n res.y0 = 1;\n res.y1 = 0;\n }\n }\n\n return res;\n }\n\n private _onSliderToolipChange = (e: FederatedEvent) => {\n const tooltipShape = this._slider.tooltipShape;\n\n if (tooltipShape && e.detail && !isNil(e.detail.value)) {\n const color = this._colorScale.scale(e.detail.value);\n\n tooltipShape.setAttribute('fill', color);\n }\n\n this.dispatchEvent(e);\n };\n\n private _onSliderChange = (e: FederatedEvent) => {\n // 更新 handler 以及 track 的渐变色\n this._updateColor();\n this.dispatchEvent(e);\n };\n\n private _updateColor() {\n const { layout = 'horizontal', colors, railWidth, railHeight } = this.attribute as ColorLegendAttributes;\n const { startHandler, endHandler, track, attribute } = this._slider;\n const { startValue, endValue, startPos, endPos } = this._slider.currentValue;\n const handlerColor = attribute.handlerStyle?.fill;\n // 计算颜色\n if (startHandler && !handlerColor) {\n const startHandlerColor = this._colorScale.scale(startValue);\n startHandler.setAttribute('fill', startHandlerColor);\n }\n\n if (endHandler && !handlerColor) {\n const endHandlerColor = this._colorScale.scale(endValue);\n endHandler.setAttribute('fill', endHandlerColor);\n }\n\n const isHorizontal = layout === 'horizontal';\n const railLen = isHorizontal ? railWidth : railHeight;\n const trackLength = Math.abs((startPos as number) - (endPos as number));\n\n // 计算渐变色\n if (trackLength !== railLen && colors && colors.length > 1) {\n const stops = (this._color as ILinearGradient).stops;\n const start = Math.min(startPos as number, endPos as number);\n const end = Math.max(startPos as number, endPos as number);\n const startRatio = start / railLen;\n const endRatio = end / railLen;\n const range = endRatio - startRatio;\n const betweenStops = stops.filter(stop => stop.offset > startRatio && stop.offset < endRatio);\n\n const minValue = Math.min(startValue, endValue);\n const maxValue = Math.max(startValue, endValue);\n const startColor = this._colorScale.scale(minValue);\n const endColor = this._colorScale.scale(maxValue);\n const newStops = [{ offset: 0, color: startColor }];\n betweenStops.forEach(stop => {\n newStops.push({\n offset: (stop.offset - startRatio) / range,\n color: stop.color\n });\n });\n newStops.push({\n offset: 1,\n color: endColor\n });\n track.setAttribute('fill', {\n ...(this._color as ILinearGradient),\n stops: newStops\n });\n }\n }\n}\n","import type { OrientType } from '../interface';\n\nexport function getSizeHandlerPath(align: OrientType = 'bottom') {\n let centerX = 0;\n const centerY = 0;\n const upperHalf = 3.5;\n const leftHalf = 2.5;\n const arrowY = 6;\n\n if (align === 'top') {\n return `\n M${centerX},${centerY - arrowY}L${centerX - upperHalf},${centerY - leftHalf}\n v${2 * leftHalf}\n h${2 * upperHalf}\n v${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'left') {\n centerX = 1;\n return `\n M${centerX - arrowY},${centerY}L${centerX - arrowY + leftHalf},${centerY - upperHalf}\n h${2 * leftHalf}\n v${2 * upperHalf}\n h${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'right') {\n centerX = -1;\n\n return `\n M${centerX + arrowY},${centerY}L${centerX + arrowY - leftHalf},${centerY - upperHalf}\n h${-2 * leftHalf}\n v${2 * upperHalf}\n h${2 * leftHalf}\n Z\n `;\n }\n\n return `\n M${centerX},${centerY + arrowY}L${centerX - upperHalf},${centerY + leftHalf}\n v${-2 * leftHalf}\n h${2 * upperHalf}\n v${2 * leftHalf}\n Z\n`;\n}\n","/**\n * @description 连续尺寸图例\n */\nimport type { FederatedEvent, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, get } from '@visactor/vutils';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ComponentOptions } from '../../interface';\nimport type { SizeLegendAttributes } from './type';\nimport { getSizeHandlerPath } from '../util';\nimport { loadSizeContinuousLegendComponent } from '../register';\n\nloadSizeContinuousLegendComponent();\nexport class SizeContinuousLegend extends LegendBase {\n name = 'sizeLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n lineWidth: 1,\n stroke: '#ccc',\n fill: '#fff'\n },\n sizeBackground: {\n fill: 'rgba(20,20,20,0.1)'\n }\n };\n\n private _slider!: Slider;\n\n constructor(attributes: SizeLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SizeContinuousLegend.defaultAttributes, attributes));\n }\n\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n }\n\n protected _renderContent(): void {\n const {\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n sizeBackground,\n disableTriggerEvent,\n inverse\n } = this.attribute as SizeLegendAttributes;\n\n const mainContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._innerView.add(mainContainer);\n\n const slider = new Slider({\n x: 0,\n y: 0,\n zIndex: 1,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle: {\n symbolType: getSizeHandlerPath(align),\n ...handlerStyle\n },\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent,\n inverse\n });\n mainContainer.add(slider as unknown as INode);\n\n // 绘制 size 背景\n let start = 0;\n let path;\n const backgroundHeight = 12; // 目前暂不开放配置\n if (layout === 'horizontal') {\n if (align === 'top') {\n path = `M0,0L${railWidth},0L${inverse ? 0 : railWidth},${backgroundHeight}Z`;\n start = railHeight;\n } else {\n path = `M0,${backgroundHeight}L${railWidth},${backgroundHeight}L${inverse ? 0 : railWidth},0Z`;\n slider.setAttribute('y', backgroundHeight);\n }\n } else {\n if (align === 'left') {\n path = `M${railWidth},0L${railWidth + backgroundHeight},${\n inverse ? 0 : railHeight\n }L${railWidth},${railHeight}Z`;\n } else {\n path = `M0,${inverse ? 0 : railHeight}L${backgroundHeight},${railHeight}L${backgroundHeight},0Z`;\n slider.setAttribute('x', backgroundHeight);\n }\n }\n const background = graphicCreator.path({\n x: 0,\n y: start,\n path,\n ...sizeBackground,\n zIndex: 0\n });\n mainContainer.add(background);\n\n // 做下位置调整\n const titleSpace = this._title\n ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE)\n : 0;\n\n mainContainer.translate(0 - mainContainer.AABBBounds.x1, titleSpace - mainContainer.AABBBounds.y1);\n\n this._slider = slider;\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n this._slider.addEventListener('sliderTooltip', this._onSliderToolipChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _onSliderChange = (e: FederatedEvent) => {\n this.dispatchEvent(e);\n };\n\n private _onSliderToolipChange = (e: FederatedEvent) => {\n this.dispatchEvent(e);\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport { ColorContinuousLegend, SizeContinuousLegend } from '@visactor/vrender-components';\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\n\n// 获取连续图例组件属性\nexport function getContinuousLegendAttributes(spec: IColorLegendSpec | ISizeLegendSpec) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = mergeSpec({}, spec);\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n\nexport function isContinuousLegend(type: string) {\n return type === 'color' || type === 'size';\n}\n\nexport const ContinuousLegendMap = {\n color: ColorContinuousLegend,\n size: SizeContinuousLegend\n};\n","/**\n * @description color legend component\n */\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { debounce, isEmpty, isNil, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries, getSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport {\n continuousLegendDataMake,\n continuousLegendFilter\n} from '../../../data/transforms/legend-data/continuous/continuous';\nimport { ContinuousLegendMap, getContinuousLegendAttributes, isContinuousLegend } from './util';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport { getSpecInfo } from '../../util';\n\nconst SINGLE_SEQUENCE = ['#C4E7FF', '#98CAFF', '#75ACFF', '#518FF9', '#2775DC', '#005CBE', '#00429F', '#00287E'];\nconst SIZE = [2, 10];\n\nexport class ContinuousLegend<\n T extends IColorLegendSpec | ISizeLegendSpec = IColorLegendSpec | ISizeLegendSpec\n> extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.continuousLegend;\n type = ComponentTypeEnum.colorLegend;\n name: string = ComponentTypeEnum.colorLegend;\n\n private _field: string | undefined;\n private _legendType: string;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const infos = getSpecInfo(\n chartSpec,\n this.specKey,\n this.type,\n (s: IColorLegendSpec | ISizeLegendSpec) => {\n return isContinuousLegend(s.type);\n }\n );\n\n if (infos) {\n infos.forEach(info => {\n info.type = info.spec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend;\n });\n }\n\n return infos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n // 这里需要区分下是 colorLegend 还是 sizeLegend\n const legendName = this._spec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend;\n this.type = legendName;\n this.name = legendName;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._field = this._spec.field;\n this._legendType = this._spec.type;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'continuousLegendFilter',\n options: {\n selected: () => this._selectedData,\n field: () => this._field,\n data: () => this._legendData.getLatestData(),\n isHierarchyData: s.isHierarchyData,\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n private _getScaleInGlobal() {\n const globalScale = this._option.globalScale;\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n return globalScale.getScale(scaleKey);\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendFilter', continuousLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendDataMake', continuousLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'continuousLegendDataMake',\n options: {\n series: () => {\n return getSeries(this._regions, {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n });\n },\n field: () => this._field,\n scale: this._getScaleInGlobal.bind(this)\n }\n });\n return legendData;\n }\n\n protected _initSelectedData(): void {\n if (this._spec.defaultSelected) {\n this._selectedData = this._spec.defaultSelected.slice();\n } else {\n this._selectedData = this._legendData.getLatestData();\n }\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n const field = this._field;\n if (field) {\n // 默认使用第0个系列的对应别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), field);\n return;\n }\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(scaleKey);\n if (!isDataDomainSpec(scaleSpec?.domain)) {\n return;\n }\n const dataInfo = scaleSpec.domain[0];\n if (dataInfo.fields.length === 0) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(this._option.dataSet.getDataView(dataInfo.dataId), dataInfo.fields[0]);\n return;\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const align = layout === 'horizontal' ? 'bottom' : this.layoutOrient;\n\n // 获取关联的 scale 以获取 colors / size\n let visualMappingRange = [];\n const scale = this._getScaleInGlobal();\n if (scale && scale.type === 'linear') {\n visualMappingRange = scale.range();\n }\n if (isEmpty(visualMappingRange)) {\n visualMappingRange = this._legendType === 'color' ? SINGLE_SEQUENCE : SIZE;\n }\n let min = this._legendData.getLatestData()[0] ?? 0;\n let max = this._legendData.getLatestData()[1] ?? 1;\n\n const isSame = this._legendData.getLatestData()[0] === this._legendData.getLatestData()[1];\n if (isSame) {\n min = Math.min(0, this._legendData.getLatestData()[0]);\n max = this._legendData.getLatestData()[0] === 0 ? 1 : Math.max(0, this._legendData.getLatestData()[0]);\n }\n\n const attrs: any = {\n layout,\n align,\n zIndex: this.layoutZIndex,\n min,\n max,\n value: this._spec.defaultSelected,\n [this._legendType === 'color' ? 'colors' : 'sizeRange']: visualMappingRange,\n ...getContinuousLegendAttributes(this._spec)\n };\n this._addDefaultTitleText(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return ContinuousLegendMap[this._legendType];\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(\n 'change',\n debounce((e: any) => {\n const selectedData = get(e, 'detail.value');\n if (doFilter) {\n this.setSelectedData(selectedData);\n }\n this.event.emit(ChartEvent.legendFilter, { model: this, value: selectedData, event: e });\n }, 30)\n );\n }\n }\n}\n\nexport const registerContinuousLegend = () => {\n Factory.registerComponent(ContinuousLegend.type, ContinuousLegend);\n};\n","import { Direction, type Datum, type IPoint, type IShowTooltipOption, type TooltipActiveType } from '../../../typings';\nimport type { ICartesianSeries, IPolarSeries, ISeries } from '../../../series/interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { PieSeries } from '../../../series/pie/pie';\nimport type { TooltipHandlerParams } from '../interface';\nimport { Event_Source_Type } from '../../../constant/event';\nimport { getElementAbsolutePosition, isArray, isValid, isNil } from '@visactor/vutils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { VChart } from '../../../core/vchart';\nimport type { IRegion } from '../../../region';\nimport type { Tooltip } from '../tooltip';\nimport type { IComponentOption } from '../../interface';\nimport { isDiscrete } from '@visactor/vscale';\n\nconst getDataArrayFromFieldArray = (fields: string[], datum?: Datum) =>\n isValid(datum) ? fields.map(f => datum[f]) : undefined;\n\nconst datumContainsArray = (fields: string[], data?: Datum[]) => (datum: Datum) =>\n fields.every((key, i) => datum[key] === data?.[i]);\n\nconst hasData = (data?: any[] | Datum) => {\n if (isNil(data)) {\n return false;\n }\n if (isArray(data)) {\n return data.length > 0 && data.every(isValid);\n }\n return Object.keys(data).length > 0;\n};\n\ntype MarkInfo = {\n pos: IPoint;\n data: {\n dimensionFields: string[];\n measureFields: string[];\n dimensionData?: any[];\n measureData?: any[];\n hasMeasureData?: boolean;\n groupField?: string;\n groupData?: any;\n };\n series: ISeries;\n dimType?: string;\n};\n\nexport function showTooltip(datum: Datum, options: IShowTooltipOption, component: Tooltip): TooltipActiveType | 'none' {\n const opt: IShowTooltipOption = {\n regionIndex: 0,\n ...options\n };\n const componentOptions = component.getOption() as IComponentOption;\n\n // 确认region\n const region = componentOptions.getRegionsInUserIdOrIndex(\n isValid(opt.regionId) ? [opt.regionId] : undefined,\n isValid(opt.regionIndex) ? [opt.regionIndex] : undefined\n )[0];\n if (!region) {\n return 'none';\n }\n\n // 查询图元信息\n const markInfoList = getMarkInfoList(datum, region);\n\n // 组织数据\n const activeType = opt.activeType ?? (markInfoList.length > 1 ? 'dimension' : 'mark');\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n const container = componentOptions.globalInstance.getContainer();\n const containerPos = {\n x: 0,\n y: 0,\n ...(container ? getElementAbsolutePosition(container) : {})\n };\n const bound = (pos: IPoint): IPoint => ({\n x: Math.min(Math.max(pos.x, 0), regionRect.width),\n y: Math.min(Math.max(pos.y, 0), regionRect.height)\n });\n const getOriginDatum = (info: MarkInfo) => {\n const { dimensionFields, dimensionData, measureFields, measureData, groupField, groupData } = info.data;\n const originDatum = info.series.getViewData()?.latestData.find((datum: any) => {\n return (\n datumContainsArray(dimensionFields, dimensionData)(datum) &&\n datumContainsArray(measureFields, measureData)(datum) &&\n (isNil(groupField) || datumContainsArray([groupField], [groupData])(datum))\n );\n });\n return originDatum;\n };\n const getMockEvent = (originPos: IPoint): any => {\n const pos = bound(originPos);\n const canvasX = opt.x ?? regionPos.x + pos.x;\n const canvasY = opt.y ?? regionPos.y + pos.y;\n return {\n canvasX,\n canvasY,\n clientX: containerPos.x + canvasX,\n clientY: containerPos.y + canvasY\n };\n };\n\n // 显示tooltip\n if (activeType === 'dimension') {\n const firstInfo = markInfoList[0];\n if (!firstInfo) {\n return 'none';\n }\n\n // 将markInfoList按系列分组\n const markInfoSeriesMap = new Map();\n markInfoList.forEach(info => {\n if (!markInfoSeriesMap.has(info.series)) {\n markInfoSeriesMap.set(info.series, []);\n }\n markInfoSeriesMap.get(info.series)?.push(info);\n });\n\n const mockDimensionInfo: IDimensionInfo[] = [\n {\n value: datum[firstInfo.data.dimensionFields[0]],\n data: [...markInfoSeriesMap.keys()].map(series => {\n return {\n series,\n datum: markInfoSeriesMap.get(series)?.map(info => getOriginDatum(info)) ?? []\n };\n })\n }\n ];\n\n if (isValid(firstInfo.dimType)) {\n mockDimensionInfo[0].position = firstInfo.pos[firstInfo.dimType];\n mockDimensionInfo[0].dimType = firstInfo.dimType;\n }\n\n const mockParams: TooltipHandlerParams = {\n changePositionOnly: false,\n action: 'enter',\n tooltip: null,\n dimensionInfo: mockDimensionInfo,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: undefined,\n model: undefined,\n source: Event_Source_Type.chart,\n event: getMockEvent({\n x: markInfoList.reduce((sum, info) => sum + info.pos.x, 0) / markInfoList.length,\n y: markInfoList.reduce((sum, info) => sum + info.pos.y, 0) / markInfoList.length // 位置求平均\n }),\n item: undefined,\n itemMap: new Map()\n };\n\n component.processor.dimension.showTooltip(mockDimensionInfo, mockParams, false);\n\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n\n return activeType;\n } else if (activeType === 'mark') {\n const info = markInfoList[0];\n if (!info) {\n return 'none';\n }\n const mockDatum = {\n ...getOriginDatum(info),\n ...datum\n };\n const mockDimensionData: IDimensionData[] = [\n {\n datum: [mockDatum],\n series: info.series\n }\n ];\n const mockDimensionInfo: IDimensionInfo[] = [\n {\n value: mockDatum[info.data.dimensionFields[0]],\n data: mockDimensionData\n }\n ];\n const mockParams: TooltipHandlerParams = {\n // FIXME: 补充 action、dimensionInfo\n changePositionOnly: false,\n tooltip: null,\n dimensionInfo: mockDimensionInfo,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: mockDatum,\n model: info.series,\n source: Event_Source_Type.chart,\n event: getMockEvent(info.pos),\n item: undefined,\n itemMap: new Map()\n } as any;\n\n component.processor.mark.showTooltip(\n {\n datum: mockDatum,\n mark: null,\n series: info.series\n },\n mockParams,\n false\n );\n\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n return activeType;\n }\n return 'none';\n}\n\nexport const getMarkInfoList = (datum: Datum, region: IRegion) => {\n const seriesList = region.getSeries();\n const markInfoList: MarkInfo[] = [];\n\n seriesList.forEach(series => {\n /** 维度field */\n const dimensionFields = series.getDimensionField();\n /** 指标原始field(用于显示tooltip) */\n const measureFields = series.getMeasureField();\n\n const groupField = series.getSeriesField();\n const groupData = isValid(groupField) ? datum[groupField] : undefined;\n const groupDomain = isValid(groupField)\n ? series.getViewDataStatistics?.()?.latestData[groupField]?.values ?? []\n : [];\n\n const dimensionData = getDataArrayFromFieldArray(dimensionFields, datum);\n let measureData = getDataArrayFromFieldArray(measureFields, datum);\n const hasMeasureData = hasData(measureData);\n\n const isMultiGroups = !hasMeasureData && isValid(groupField) && isNil(groupData) && groupDomain.length > 0; // 是否需要考虑多个数据组\n\n const parseMarkInfoOfSimpleSeries = () => {\n const originDatum = series.getViewData()?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos =\n series.type === SeriesTypeEnum.pie\n ? (series as PieSeries).dataToCentralPosition(originDatum)\n : series.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n };\n\n if (series.coordinate === 'cartesian') {\n const cartesianSeries = series as ICartesianSeries;\n const dimType = isDiscrete((series as ICartesianSeries).getYAxisHelper()?.getScale(0)?.type) ? 'y' : 'x';\n\n // 补全维度轴数据\n const invalidDimensionFields = dimensionFields\n .map((field, i) => [field, i] as [string, number])\n .filter(([, i]) => isNil(dimensionData?.[i]));\n let dimensionDataList: any[][] = [dimensionData ?? []];\n if (invalidDimensionFields.length > 0) {\n invalidDimensionFields.forEach(([field, i]) => {\n const domain = series.getViewDataStatistics?.()?.latestData[field]?.values ?? [];\n const nextList: any[][] = [];\n dimensionDataList.forEach(dimensionData => {\n domain.forEach((value: any) => {\n const newData = dimensionData?.slice() ?? [];\n newData[i] = value;\n nextList.push(newData);\n });\n });\n dimensionDataList = nextList;\n });\n }\n dimensionDataList.forEach(dimensionData => {\n if (isMultiGroups) {\n const measureDataList = cartesianSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n groupDomain.forEach((groupData: any) => {\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series,\n dimType\n });\n });\n } else {\n const originDatum = cartesianSeries\n .getViewData()\n ?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n dimType,\n series\n });\n }\n });\n } else if (series.coordinate === 'polar') {\n if (series.type === SeriesTypeEnum.pie) {\n parseMarkInfoOfSimpleSeries();\n } else {\n // 处理玫瑰图、雷达图\n const polarSeries = series as IPolarSeries;\n\n if (isMultiGroups) {\n const measureDataList = polarSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n groupDomain.forEach((groupData: any) => {\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = polarSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n });\n } else {\n parseMarkInfoOfSimpleSeries();\n }\n }\n } else if (series.coordinate === 'geo') {\n parseMarkInfoOfSimpleSeries();\n }\n });\n\n return markInfoList;\n};\n","import type { ITooltipActual, TooltipActiveType, TooltipData } from '../../../typings';\nimport type { ISeries } from '../../../series/interface';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../interface/common';\nimport { combineContents, isActiveTypeVisible } from './common';\nimport type { ITooltipSpec } from '../interface/spec';\n\nconst pick_keys = ['updateTitle', 'updateContent', 'updatePosition', 'maxLineCount', 'othersLine'];\n\nexport const getTooltipSpecForShow = (\n activeType: TooltipActiveType,\n globalSpec: ITooltipSpec,\n series?: ISeries,\n data?: TooltipData,\n params?: TooltipHandlerParams\n): ITooltipActual => {\n // 组装tooltip spec\n const finalSpec = {\n activeType\n } as ITooltipActual;\n\n switch (activeType) {\n case 'mark':\n case 'group':\n if (series) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesSpec = series.getSpec()?.tooltip as ITooltipSpec;\n\n finalSpec.visible = true;\n\n if (seriesSpec?.handler) {\n // 优先使用自定义handler\n finalSpec.handler = seriesSpec.handler;\n }\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n if (seriesSpec?.[activeType]) {\n pick_keys.forEach(k => {\n if (isValid((seriesSpec[activeType] as any)[k])) {\n (finalSpec as any)[k] = (seriesSpec as any)[activeType][k];\n }\n });\n }\n\n return {\n ...finalSpec,\n ...series.tooltipHelper.getTooltipData(\n activeType,\n globalSpec,\n data as IDimensionData[],\n (data as IDimensionData[])[0].datum,\n params\n )\n };\n }\n break;\n case 'dimension':\n if ((data as IDimensionInfo[])?.length) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesList = getSeriesListFromDimensionInfo(data as IDimensionInfo[]);\n\n // visible\n if (seriesList.every(series => !isActiveTypeVisible('dimension', series.tooltipHelper?.spec))) {\n finalSpec.visible = false;\n } else {\n finalSpec.visible = true;\n }\n\n // 优先使用自定义handler\n finalSpec.handler = globalSpec.handler;\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n\n const patternList: ITooltipActual[] = [];\n (data as IDimensionInfo[]).forEach(info =>\n info.data.forEach(datum => {\n const { series } = datum;\n const pattern = series.tooltipHelper.getTooltipData(activeType, globalSpec, data, datum.datum, params);\n if (pattern) {\n patternList.push(pattern);\n }\n })\n );\n\n return combineContents(patternList);\n }\n break;\n }\n\n return null;\n};\n\nconst getSeriesListFromDimensionInfo = (dimensionInfo: IDimensionInfo[]): ISeries[] => {\n const list: ISeries[] = [];\n dimensionInfo.forEach(info => {\n info.data.forEach(datum => {\n if (isValid(datum.series)) {\n list.push(datum.series);\n }\n });\n });\n\n return list;\n};\n","import { PREFIX } from '../../constant/base';\nimport type { ITooltipLineActual, TooltipActiveType } from '../../typings';\n\nexport const TooltipHandlerType = {\n dom: `${PREFIX}_TOOLTIP_HANDLER_DOM`, // 模拟 enum\n canvas: `${PREFIX}_TOOLTIP_HANDLER_CANVAS`\n};\n\nexport const TOOLTIP_EL_CLASS_NAME = 'vchart-tooltip-element';\n\nexport const TOOLTIP_MAX_LINE_COUNT = 20;\n\nexport const TOOLTIP_OTHERS_LINE = {\n // TODO: i18n\n key: '其他',\n value: '...'\n} as ITooltipLineActual;\n\nexport const TOOLTIP_TYPES: TooltipActiveType[] = ['group', 'mark', 'dimension'];\n\nexport const DEFAULT_SHOW_DELAY = 50;\n","import { isNil, isValid } from '@visactor/vutils';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { ITooltipActual, TooltipActiveType, TooltipData } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { Tooltip } from '../tooltip';\nimport type { MouseEventData, TooltipInfo } from './interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { TooltipEventParams } from '../interface/event';\nimport type { IDimensionInfo } from '../../../event/events/dimension';\nimport type { ISeries } from '../../../series/interface';\nimport { getTooltipSpecForShow } from '../utils/get-spec';\nimport { isActiveTypeVisible } from '../utils/common';\nimport { TOOLTIP_MAX_LINE_COUNT, TOOLTIP_OTHERS_LINE } from '../constant';\n\nexport abstract class BaseTooltipProcessor {\n readonly component: Tooltip;\n abstract activeType: TooltipActiveType;\n\n protected _cacheActiveSpec: ITooltipActual | undefined;\n\n constructor(component: Tooltip) {\n this.component = component;\n }\n\n /** 触发对应类型的 tooltip */\n abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;\n /** 获取触发 tooltip 需要的信息 */\n abstract getMouseEventData(params: BaseEventParams): MouseEventData;\n\n protected _showTooltipByHandler = (data: TooltipData | undefined, params: TooltipHandlerParams): TooltipResult => {\n if (isNil(data)) {\n return TooltipResult.failed;\n }\n\n if (!params.changePositionOnly) {\n this.clearCache();\n }\n\n // 更新 this._cacheActiveSpec\n this._updateViewSpec(data, params);\n const spec = this._cacheActiveSpec;\n if (isNil(spec) || spec.visible === false) {\n return TooltipResult.failed;\n }\n params.tooltipSpec = this.component.getSpec();\n params.activeTooltipSpec = spec;\n\n // 判断 tooltip 是否为空\n const { title, content } = spec;\n\n const isEmpty = isNil(title?.key) && isNil(title?.value) && !content?.length;\n // 触发事件\n this.component.event.emit(ChartEvent.tooltipShow, {\n ...params,\n isEmptyTooltip: isEmpty,\n tooltipData: data,\n activeType: this.activeType,\n tooltip: this.component\n } as TooltipEventParams);\n\n if (isEmpty) {\n return TooltipResult.failed;\n }\n\n // 显示 tooltip\n let showTooltip;\n if (spec.handler?.showTooltip) {\n showTooltip = spec.handler.showTooltip.bind(spec.handler);\n } else if (this.component.tooltipHandler?.showTooltip) {\n showTooltip = this.component.tooltipHandler.showTooltip.bind(this.component.tooltipHandler);\n }\n if (showTooltip) {\n return showTooltip(this.activeType, data, params) ?? TooltipResult.success;\n }\n return TooltipResult.failed;\n };\n\n protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined {\n const newDimensionInfo: IDimensionInfo[] = [];\n dimensionInfo?.forEach(info => {\n const di: IDimensionInfo = {\n ...info,\n data: info.data.filter(\n ({ series }: any) => series.getSpec()?.tooltip?.visible !== false // 过滤掉不需要显示的维度数据\n )\n };\n if (di.data.length > 0) {\n newDimensionInfo.push(di);\n }\n });\n if (newDimensionInfo.length > 0) {\n return newDimensionInfo;\n }\n return undefined;\n }\n\n /**\n * 合成实际显示的 tooltip spec\n * @param params\n */\n protected _updateViewSpec(data: TooltipData, params: TooltipHandlerParams) {\n const { changePositionOnly, model } = params;\n if (!changePositionOnly || !this._cacheActiveSpec) {\n const tooltipSpec = this.component.getSpec();\n /** spec 预处理 */\n this._cacheActiveSpec = getTooltipSpecForShow(\n this.activeType,\n this.component.getSpec(),\n model as ISeries,\n data,\n params\n );\n\n if (this._cacheActiveSpec) {\n if (isNil(this._cacheActiveSpec.handler) && isValid(tooltipSpec.handler)) {\n this._cacheActiveSpec.handler = tooltipSpec.handler;\n }\n const specByType = tooltipSpec[this.activeType] ?? {};\n const updateTitle = this._cacheActiveSpec.updateTitle ?? specByType.updateTitle;\n const updateContent = this._cacheActiveSpec.updateContent ?? specByType.updateContent;\n const maxLineCount = this._cacheActiveSpec.maxLineCount ?? specByType.maxLineCount ?? TOOLTIP_MAX_LINE_COUNT;\n\n if (updateTitle) {\n this._cacheActiveSpec.title =\n updateTitle(this._cacheActiveSpec.title, data, params) ?? this._cacheActiveSpec.title;\n }\n\n if (updateContent) {\n this._cacheActiveSpec.content =\n updateContent(this._cacheActiveSpec.content, data, params) ?? this._cacheActiveSpec.content;\n } else if (maxLineCount >= 1 && this._cacheActiveSpec.content?.length > maxLineCount) {\n const othersLine = this._cacheActiveSpec.othersLine ?? specByType.othersLine;\n const otherLine = othersLine\n ? {\n ...TOOLTIP_OTHERS_LINE,\n ...othersLine\n }\n : TOOLTIP_OTHERS_LINE;\n this._cacheActiveSpec.content = [\n ...this._cacheActiveSpec.content.slice(0, maxLineCount - 1),\n {\n ...this._cacheActiveSpec.content[maxLineCount - 1],\n ...otherLine\n }\n ];\n }\n }\n }\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, info: TooltipInfo): boolean {\n if (isNil(info)) {\n return false;\n }\n\n return isActiveTypeVisible(this.activeType, (params.model as ISeries)?.tooltipHelper?.spec);\n }\n\n clearCache() {\n this._cacheActiveSpec = undefined;\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { DimensionTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isValid } from '@visactor/vutils';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport { getCartesianDimensionInfo } from '../../../event/events/dimension/util/cartesian';\nimport { getPolarDimensionInfo } from '../../../event/events/dimension/util/polar';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { isDiscrete } from '@visactor/vscale';\n\nexport class DimensionTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'dimension';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: DimensionTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const newParams: TooltipHandlerParams = {\n ...(params as TooltipHandlerParams),\n dimensionInfo: this._preprocessDimensionInfo(info),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(info, newParams);\n }\n\n protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[] {\n let targetDimensionInfo: IDimensionInfo[] | undefined;\n // 处理dimension info\n const chart = this.component.getChart();\n\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n targetDimensionInfo = [\n ...(getCartesianDimensionInfo(chart, point, true) ?? []),\n ...(getPolarDimensionInfo(chart, point) ?? [])\n ];\n if (targetDimensionInfo.length === 0) {\n targetDimensionInfo = undefined;\n } else if (targetDimensionInfo.length > 1) {\n // 只保留一个轴的dimension info\n const dimensionAxisInfo = targetDimensionInfo.filter(info => {\n const axis = info.axis;\n if (axis.getSpec().hasDimensionTooltip) {\n return true;\n }\n\n // 优先显示离散轴 tooltip\n if (!isDiscrete(axis.getScale().type)) {\n return false;\n }\n // 下面的逻辑用来判断当前的离散轴是不是维度轴\n let firstSeries: ICartesianSeries | undefined;\n for (const region of axis?.getRegions() ?? []) {\n for (const series of region.getSeries()) {\n if (series.coordinate === 'cartesian') {\n firstSeries = series as ICartesianSeries;\n break;\n }\n }\n if (isValid(firstSeries)) {\n break;\n }\n }\n if (isValid(firstSeries) && firstSeries.getDimensionField()[0] === firstSeries.fieldY[0]) {\n // 维度轴为Y轴时,选择只显示Y轴tooltip\n return axis.getOrient() === 'left' || axis.getOrient() === 'right';\n }\n // 维度轴为X轴时,选择只显示X轴tooltip\n return axis.getOrient() === 'bottom' || axis.getOrient() === 'top';\n });\n targetDimensionInfo = dimensionAxisInfo.length ? dimensionAxisInfo : targetDimensionInfo.slice(0, 1);\n\n // datum 去重,保证每个系列的每个数据项只对应于一行 tooltip 内容项\n if (targetDimensionInfo.length > 1) {\n const dimensionDataKeySet = new Set();\n targetDimensionInfo.forEach(info => {\n info.data = info.data.filter(({ key }: IDimensionData) => {\n if (dimensionDataKeySet.has(key)) {\n return false;\n }\n dimensionDataKeySet.add(key);\n return true;\n });\n });\n }\n }\n\n return targetDimensionInfo;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n return {\n tooltipInfo: this._getDimensionInfo(params),\n // 排除被声明要忽略的项\n ignore: false\n };\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { Datum, IGroupTooltipPattern, TooltipActiveType } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { GroupTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { array } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class GroupTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'group';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: GroupTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series } = info;\n const tooltipData = [{ datum: array(datum), series }];\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n groupDatum: this._getGroupDatum(params),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: GroupTooltipInfo | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.group;\n\n if (activeTriggers?.has(params.mark)) {\n const patternSpec: IGroupTooltipPattern = (this.component.getSpec() as ITooltipSpec)[this.activeType];\n const triggerMark = patternSpec?.triggerMark ? array(patternSpec.triggerMark) : [];\n if (triggerMark.includes(params.mark?.name as any)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series\n };\n }\n }\n }\n\n return {\n tooltipInfo: info,\n ignore: false\n };\n }\n\n protected _getGroupDatum(params: BaseEventParams) {\n const { model, mark, datum } = params;\n const series = model as ISeries;\n if (['line', 'area'].includes(mark.type)) {\n return array(datum);\n }\n\n const datumList = series.getViewData().latestData;\n const seriesField = series.getSeriesField();\n if (!seriesField) {\n return datumList;\n }\n\n const seriesFieldValue = array(datum)[0][seriesField];\n return datumList.filter((d: Datum) => d[seriesField] === seriesFieldValue);\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { MarkTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport type { ISeries } from '../../../series/interface';\nimport { IContainPointMode } from '@visactor/vrender-core';\nimport type { IDimensionData } from '../../../event/events/dimension/interface';\n\nexport class MarkTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'mark';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series } = info;\n const tooltipSpec = this.component.getSpec();\n const tooltipData = [{ datum: [datum], series }];\n const helper = series.tooltipHelper;\n const seriesSpec = series.getSpec()?.tooltip as ITooltipSpec;\n const seriesCheckOverlap = seriesSpec?.mark?.checkOverlap;\n let checkOverlap = false;\n\n if (seriesCheckOverlap === true || (tooltipSpec.mark?.checkOverlap === true && seriesCheckOverlap !== false)) {\n const activeTriggers = helper?.activeTriggerSet.mark;\n\n if (activeTriggers) {\n checkOverlap = true;\n const chart = this.component.getChart();\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n activeTriggers.forEach(mark => {\n mark.getProductElements().forEach(el => {\n const graphic = el.getGraphicItem();\n\n if (\n el !== params.item &&\n graphic &&\n graphic.containsPoint(point.x, point.y, IContainPointMode.GLOBAL, graphic.stage.getPickerService())\n ) {\n tooltipData[0].datum.push(el.getDatum());\n }\n });\n });\n }\n }\n\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n changePositionOnly,\n tooltip: this.component\n };\n if (changePositionOnly && checkOverlap) {\n const cacheData = this._cacheActiveSpec && this._cacheActiveSpec.data;\n\n if (\n !cacheData ||\n (cacheData as IDimensionData[])[0].series !== tooltipData[0].series ||\n (cacheData as IDimensionData[])[0].datum.length !== tooltipData[0].datum.length ||\n (cacheData as IDimensionData[])[0].datum.some((d, index) => d !== tooltipData[0].datum[index])\n ) {\n newParams.changePositionOnly = false;\n }\n }\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: MarkTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.mark;\n const ignoreTriggers = helper?.ignoreTriggerSet.mark;\n if (activeTriggers?.has(params.mark)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series\n };\n } else if (ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray, isValid } from '@visactor/vutils';\nimport type { DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './interface';\n\nexport const isMarkInfo = (info: Maybe): info is MarkTooltipInfo => isValid(info) && !isArray(info);\n\nexport const isDimensionInfo = (info: Maybe): info is DimensionTooltipInfo =>\n isValid(info) && isArray(info);\n","import { vglobal } from '@visactor/vrender-core';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { domDocument, isMiniAppLikeMode, isString, isTrueBrowser, isValid } from '../../util';\nimport { BaseComponentSpecTransformer } from '../base';\nimport { TOOLTIP_EL_CLASS_NAME } from './constant';\nimport { getTooltipActualActiveType } from './utils/common';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class TooltipSpecTransformer extends BaseComponentSpecTransformer {\n protected _shouldMergeThemeToSpec() {\n return false;\n }\n\n protected _initTheme(spec: any, chartSpec: any): { spec: any; theme: any } {\n const { spec: newSpec, theme } = super._initTheme(spec, chartSpec);\n newSpec.style = mergeSpec({}, this._theme, newSpec.style);\n newSpec.offset = mergeSpec({}, theme.offset, spec.offset);\n newSpec.transitionDuration = spec.transitionDuration ?? theme.transitionDuration;\n return { spec: newSpec, theme };\n }\n\n protected _transformSpecAfterMergingTheme(spec: any, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n super._transformSpecAfterMergingTheme(spec, chartSpec, chartSpecInfo);\n\n spec.visible = spec.visible ?? true;\n spec.activeType = getTooltipActualActiveType(spec);\n spec.renderMode =\n spec.renderMode ??\n // 小程序或非浏览器环境下,默认使用canvas渲染\n (isMiniAppLikeMode(this._option.mode) || !isTrueBrowser(this._option.mode) ? 'canvas' : 'html');\n spec.trigger = spec.trigger ?? 'hover';\n spec.className = spec.className ?? TOOLTIP_EL_CLASS_NAME;\n spec.enterable = spec.enterable ?? false;\n spec.transitionDuration = spec.transitionDuration ?? 150;\n spec.confine = spec.confine ?? spec.renderMode === 'canvas';\n\n if (isValid(spec.parentElement)) {\n if (isString(spec.parentElement)) {\n spec.parentElement = vglobal.getElementById(spec.parentElement);\n }\n } else if (isTrueBrowser(this._option.mode)) {\n spec.parentElement = domDocument?.body;\n }\n }\n}\n","import { ComponentTypeEnum } from '../interface/type';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { BaseEventParams, EventCallback, EventQuery, EventType } from '../../event/interface';\nimport type { ITooltipHandler, TooltipActiveType } from '../../typings/tooltip';\nimport type { Datum, IPoint, IShowTooltipOption } from '../../typings';\nimport { isMobileLikeMode, isTrueBrowser, isMiniAppLikeMode } from '../../util/env';\nimport type {\n ITooltip,\n ITooltipActiveTypeAsKeys,\n ITooltipSpec,\n TooltipHandlerParams,\n TotalMouseEventData\n} from './interface';\nimport { TooltipResult } from './interface/common';\nimport { showTooltip } from './utils/show-tooltip';\nimport { isEmptyPos } from './utils/common';\nimport { isSameDimensionInfo } from '../../event/events/dimension/util/common';\nimport { ChartEvent, Event_Source_Type } from '../../constant/event';\nimport type { BaseTooltipProcessor, DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './processor';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupTooltipProcessor, DimensionTooltipProcessor, MarkTooltipProcessor } from './processor';\nimport { isDimensionInfo, isMarkInfo } from './processor/util';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid, isNil, array, isNumber, throttle, isObject } from '@visactor/vutils';\nimport { VChart } from '../../core/vchart';\nimport type { TooltipEventParams } from './interface/event';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { TooltipSpecTransformer } from './tooltip-transformer';\nimport { error } from '../../util';\nimport { DEFAULT_SHOW_DELAY, TOOLTIP_TYPES, TooltipHandlerType } from './constant';\n\ntype EventHandlerList = {\n eventType: EventType;\n handler: any;\n}[];\n\nexport class Tooltip extends BaseComponent implements ITooltip {\n protected layoutZIndex: number = 1;\n static type = ComponentTypeEnum.tooltip;\n static readonly transformerConstructor = TooltipSpecTransformer;\n type = ComponentTypeEnum.tooltip;\n name: string = ComponentTypeEnum.tooltip;\n readonly transformerConstructor = TooltipSpecTransformer;\n\n static specKey = 'tooltip';\n specKey = 'tooltip';\n\n layoutType: 'none' = 'none';\n private _hideTimer?: number;\n private _outTimer?: number;\n private _showTimer?: number;\n private _needInitEventOfTooltip?: boolean;\n private _enterable: boolean;\n private _isReleased: boolean = false;\n protected declare _spec: ITooltipSpec;\n\n tooltipHandler?: ITooltipHandler;\n\n processor: ITooltipActiveTypeAsKeys;\n\n private _alwaysShow: boolean = false;\n\n private _cacheInfo: TooltipInfo | undefined;\n private _cacheParams: BaseEventParams | undefined;\n private _cacheActiveType: TooltipActiveType | undefined;\n private _cacheEnterableRect: { x: number; y: number; width: number; height: number };\n\n private _eventList: EventHandlerList = [];\n\n protected _isTooltipShown: boolean = false;\n\n protected _clickLock: boolean = false;\n private _handleMouseMove: (params: BaseEventParams) => void;\n\n /** 当前是否正在显示 tooltip */\n isTooltipShown() {\n return this._isTooltipShown;\n }\n\n changeRegions(regions: IRegion[]) {\n /* do nothing */\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n protected _registerEvent() {\n /* do nothing */\n }\n protected _releaseEvent() {\n /* do nothing */\n }\n onLayout(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onLayoutEnd(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onRender(ctx: IModelRenderOption) {\n /* do nothing */\n }\n\n created() {\n super.created();\n this._regions = this._option.getAllRegions();\n // event\n this._initEvent();\n }\n\n release() {\n super.release();\n this._isReleased = true;\n if (this._hideTimer) {\n clearTimeout(this._hideTimer);\n }\n\n this._eventList.forEach(({ eventType, handler }) => {\n this.event.off(eventType, handler);\n });\n this._eventList = [];\n this.tooltipHandler?.release?.();\n this._isTooltipShown = false;\n }\n\n beforeRelease() {\n // 触发事件\n this.event.emit(ChartEvent.tooltipHide, {\n tooltip: this,\n chart: this.getChart()\n } as unknown as TooltipEventParams);\n this.event.emit(ChartEvent.tooltipRelease, {\n tooltip: this,\n chart: this.getChart()\n } as unknown as TooltipEventParams);\n }\n\n protected _initHandler() {\n const renderMode = this._spec.renderMode ?? 'html';\n\n const userTooltipHandler = this._option.globalInstance.getTooltipHandlerByUser();\n if (userTooltipHandler) {\n this.tooltipHandler = userTooltipHandler;\n this._enterable = false;\n } else {\n // 构造内部默认 handler\n const type = renderMode === 'canvas' ? TooltipHandlerType.canvas : TooltipHandlerType.dom;\n const handlerConstructor = Factory.getComponentPluginInType(type);\n if (!handlerConstructor) {\n error('Can not find tooltip handler: ' + type);\n }\n const handler = new handlerConstructor();\n handler.name = `${this._spec.className}-${this._option.globalInstance.id ?? 0}-${this.getSpecIndex()}`;\n this.pluginService?.load([handler]);\n\n this.tooltipHandler = handler as unknown as ITooltipHandler;\n\n if (this._spec.enterable && renderMode === 'html' && this.tooltipHandler) {\n this._enterable = true;\n this._needInitEventOfTooltip = true;\n } else {\n this._enterable = false;\n }\n }\n }\n\n protected _initEventOfTooltipContent() {\n if (!this._needInitEventOfTooltip) {\n return;\n }\n\n const container = this.tooltipHandler.getTooltipContainer?.();\n const element = container?.firstChild as HTMLElement;\n\n if (element) {\n element.addEventListener('pointerenter', () => {\n if (!this._enterable) {\n return;\n }\n\n const rect = element.getBoundingClientRect?.();\n if (rect) {\n this._cacheEnterableRect = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n }\n if (this._outTimer) {\n clearTimeout(this._outTimer);\n this._outTimer = null;\n }\n\n if (this._showTimer) {\n clearTimeout(this._showTimer);\n this._showTimer = null;\n }\n });\n\n element.addEventListener('pointerleave', () => {\n if (!this._enterable) {\n return;\n }\n\n if (this._cacheEnterableRect) {\n const newRect = element.getBoundingClientRect?.();\n\n if (\n newRect &&\n Object.keys(this._cacheEnterableRect).every(\n k => (this._cacheEnterableRect as any)[k] === (newRect as any)[k]\n )\n ) {\n this._cacheEnterableRect = null;\n this._outTimer = setTimeout(\n this.hideTooltip,\n this._spec?.showDelay ?? DEFAULT_SHOW_DELAY\n ) as unknown as number;\n }\n }\n });\n\n this._needInitEventOfTooltip = false;\n }\n }\n\n protected _initProcessor() {\n // 初始化 tooltip 类型\n const activeType = this._spec.activeType;\n\n this.processor = {};\n\n if (activeType.includes('dimension')) {\n this.processor.dimension = new DimensionTooltipProcessor(this);\n }\n\n if (activeType.includes('group')) {\n this.processor.group = new GroupTooltipProcessor(this);\n }\n\n if (activeType.includes('mark')) {\n this.processor.mark = new MarkTooltipProcessor(this);\n }\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = array(this._spec.trigger ?? 'hover');\n const triggerOff = array(this._spec.triggerOff);\n const mode = this._option.mode;\n\n trigger.forEach(triggerType => {\n if (triggerType === 'hover') {\n this._handleMouseMove = this._throttle(this._getMouseMoveHandler(false));\n\n this._mountEvent('pointermove', { source: 'chart' }, this._handleMouseMove);\n // 移动端的点按 + 滑动触发\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n this._mountEvent('pointerdown', { source: 'chart' }, this._getMouseMoveHandler(false));\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n }\n this._mountEvent('pointerleave', { source: 'chart' }, this._getMouseOutHandler(false));\n } else if (triggerType === 'click') {\n this._mountEvent('pointertap', { source: 'chart' }, this._getMouseMoveHandler(true));\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n } else if (isObject(triggerType)) {\n this._mountEvent(\n triggerType.eventType,\n { source: triggerType.source ?? 'chart', consume: triggerType.consume },\n this._getMouseMoveHandler(true)\n );\n }\n });\n const offEvents = triggerOff.filter(entry => isObject(entry));\n\n offEvents.forEach(entry => {\n this._mountEvent(\n (entry as any).eventType,\n { source: (entry as any).source ?? 'chart', consume: (entry as any).consume },\n this._getMouseOutHandler((entry as any).checkOutside ?? false)\n );\n });\n\n if (!trigger.includes('click') && this._spec.lockAfterClick) {\n this._mountEvent('pointertap', { source: 'chart' }, this._handleClickToLock);\n }\n }\n\n protected _throttle(callback: (...args: any[]) => any): (...args: any[]) => any {\n let wait: number;\n if (isNumber(this._spec.throttleInterval)) {\n wait = this._spec.throttleInterval;\n } else {\n if (this._spec.renderMode !== 'html' || !this._spec.transitionDuration) {\n wait = 10;\n } else {\n wait = 50;\n }\n }\n return throttle(callback, wait);\n }\n\n protected _mountEvent = (eType: EventType, query: EventQuery, callback: EventCallback) => {\n this.event.on(eType, query, callback);\n this._eventList.push({\n eventType: eType,\n handler: callback\n });\n };\n\n protected _handleClickToLock = (params: BaseEventParams) => {\n if (this._clickLock) {\n this._handleChartMouseOut(params);\n this._clickLock = false;\n } else {\n this._clickLock = true;\n }\n };\n\n protected _getMouseOutHandler = (needPointerDetection?: boolean) => (params: BaseEventParams) => {\n if (this._isReleased) {\n return;\n }\n if (this._alwaysShow || this._clickLock) {\n return;\n }\n\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n return;\n }\n\n const browserEnv = isTrueBrowser(this._option?.mode);\n const { clientX, clientY } = params.event as MouseEvent;\n\n // 当 enterable 为 true,同时鼠标移入 tooltip 时 pointerleave 事件也会触发,所以这里做一个判断\n\n // 判断鼠标是否在图表范围内\n if (browserEnv && needPointerDetection && this._isPointerInChart({ x: clientX, y: clientY })) {\n return;\n }\n\n if (this._enterable) {\n this._outTimer = setTimeout(() => {\n this._handleChartMouseOut(params);\n }, this._spec?.showDelay ?? DEFAULT_SHOW_DELAY) as unknown as number;\n } else {\n this._handleChartMouseOut(params);\n }\n };\n\n protected _handleChartMouseOut = (params?: BaseEventParams) => {\n if (this._alwaysShow || this._isReleased) {\n return;\n }\n\n if (this._spec.triggerOff !== 'none') {\n this._hideTooltipByHandler({\n ...(params as any),\n tooltip: this\n });\n\n if (this._handleMouseMove && (this._handleMouseMove as any).cancel) {\n // 防止因为throttle,mousemove事件又触发了一遍,导致 tooltip 隐藏失败\n (this._handleMouseMove as any).cancel();\n }\n this._cacheEnterableRect = null;\n this._cacheInfo = undefined;\n this._cacheParams = undefined;\n this._cacheActiveType = undefined;\n }\n };\n\n protected _getMouseMoveHandler = (isClick: boolean) => (params: BaseEventParams) => {\n if (this._isReleased) {\n return;\n }\n if (this._outTimer) {\n clearTimeout(this._outTimer);\n this._outTimer = null;\n }\n\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this.processor) {\n this._initProcessor();\n }\n\n if (this._alwaysShow) {\n return;\n }\n\n if (this._clickLock) {\n if (isClick) {\n this._handleChartMouseOut(params);\n this._clickLock = false;\n }\n return;\n }\n\n if (!isClick && this._enterable && this.tooltipHandler?.isTooltipShown?.()) {\n if (this._showTimer) {\n clearTimeout(this._showTimer);\n }\n\n this._showTimer = setTimeout(() => {\n this._handleChartMouseMove(params, isClick);\n }, this._spec?.showDelay ?? DEFAULT_SHOW_DELAY) as unknown as number;\n } else {\n this._handleChartMouseMove(params, isClick);\n }\n };\n\n protected _handleChartMouseMove = (params: BaseEventParams, isClick: boolean) => {\n if (this._isReleased) {\n return;\n }\n /* 获取 tooltip 原始数据 */\n const mouseEventData = this._getMouseEventData(params);\n const {\n tooltipInfo: { dimension: dimensionInfo },\n ignore: { mark: ignoreMark }\n } = mouseEventData;\n\n /** tooltip 是否显示成功 */\n const success: ITooltipActiveTypeAsKeys = {\n mark: false,\n dimension: false,\n group: false\n };\n\n for (let i = 0, len = TOOLTIP_TYPES.length; i < len; i++) {\n const type = TOOLTIP_TYPES[i];\n const res = this.processor[type] ? this._showTooltipByMouseEvent(type, mouseEventData, params, isClick) : false;\n\n if (res) {\n success[type] = true;\n break;\n }\n }\n\n /* 如果不是常规情况,进行一些特殊情况tooltip处理 */\n if (Object.values(success).every(val => !val) && !isEmptyPos(params)) {\n // 用户手动配置ignore,则继续显示缓存tooltip\n if (ignoreMark && isMarkInfo(this._cacheInfo)) {\n success.mark = this._showTooltipByMouseEvent('mark', mouseEventData, params, isClick, true);\n } else if (isValid(dimensionInfo)) {\n // 用户没有手动配置ignore的话,默认显示dimension tooltip\n success.dimension = this._showTooltipByMouseEvent('dimension', mouseEventData, params, isClick);\n }\n }\n\n /* 如果还是不应该显示tooltip,则隐藏上一次tooltip */\n if (!success.mark && !success.group && (!success.dimension || isNil(dimensionInfo))) {\n this._handleChartMouseOut(params);\n } else {\n this._initEventOfTooltipContent();\n }\n };\n\n /**\n * 通过鼠标事件触发 tooltip,返回是否成功\n * @param activeType tooltip 类型\n * @param mouseEventData tooltip 相关数据\n * @param params 事件参数\n * @param useCache 是否直接显示缓存 tooltip\n * @returns 是否成功执行\n */\n protected _showTooltipByMouseEvent = (\n activeType: TooltipActiveType,\n mouseEventData: TotalMouseEventData,\n params: BaseEventParams,\n isClick: boolean,\n useCache?: boolean\n ): boolean => {\n const processor = this.processor[activeType];\n // 判断是否应该触发 tooltip\n if (!processor.shouldHandleTooltip(params, mouseEventData.tooltipInfo[activeType])) {\n return false;\n }\n if (this._hideTimer) {\n clearTimeout(this._hideTimer);\n }\n\n let success: boolean;\n\n if (useCache) {\n // 直接显示缓存 tooltip\n success = !processor.showTooltip(this._cacheInfo as any, params, true);\n } else {\n const tooltipInfo = mouseEventData.tooltipInfo[activeType];\n const isSameAsCache = this._isSameAsCache(tooltipInfo, params, activeType);\n\n success = !processor.showTooltip(tooltipInfo as any, params, isSameAsCache);\n\n if (success) {\n // 成功显示 tooltip,则更新缓存\n this._cacheInfo = tooltipInfo;\n this._cacheParams = params;\n this._cacheActiveType = activeType;\n }\n }\n if (success) {\n this._isTooltipShown = true;\n if (isClick && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n } else if (Number.isFinite(this._spec.hideTimer)) {\n // hover 事件,设置默认的定时器,避免out事件不触发的问题\n this._hideTimer = setTimeout(() => {\n this._handleChartMouseOut();\n }, this._spec.hideTimer as number) as unknown as number;\n }\n }\n // 全局唯一 tooltip\n const vchart = this._option?.globalInstance;\n if (success && VChart.globalConfig.uniqueTooltip && vchart) {\n VChart.hideTooltip(vchart.id);\n }\n return success;\n };\n\n protected _getMouseEventData = (params: BaseEventParams): TotalMouseEventData => {\n const result: TotalMouseEventData = {\n tooltipInfo: {},\n ignore: {}\n };\n\n Object.keys(this.processor).forEach(activeType => {\n const { tooltipInfo, ignore } = this.processor[activeType as TooltipActiveType].getMouseEventData(params);\n result.tooltipInfo[activeType as TooltipActiveType] = tooltipInfo as any;\n result.ignore[activeType as TooltipActiveType] = ignore;\n });\n return result;\n };\n\n protected _hideTooltipByHandler = (params: TooltipHandlerParams): TooltipResult => {\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n // 如果当前 tooltip 未显示,则提前退出\n return TooltipResult.success;\n }\n\n // 触发事件\n this.event.emit(ChartEvent.tooltipHide, {\n ...params,\n source: Event_Source_Type.chart, // 统一 event 的来源\n tooltip: this\n });\n\n // 删除缓存\n Object.values(this.processor).forEach((processor: BaseTooltipProcessor) => {\n processor.clearCache();\n });\n\n // 隐藏 tooltip\n const handler = this._spec.handler ?? this.tooltipHandler;\n\n if (handler.hideTooltip) {\n const result = handler.hideTooltip.call(handler, params);\n if (!result) {\n this._isTooltipShown = false;\n }\n return result;\n }\n return TooltipResult.failed;\n };\n\n reInit(spec?: any) {\n super.reInit(spec);\n\n if (this.tooltipHandler) {\n const renderMode = this._spec.renderMode ?? 'html';\n const newEnterable = this._spec.enterable && renderMode === 'html';\n\n if (newEnterable && !this._enterable) {\n this._needInitEventOfTooltip = true;\n }\n this._enterable = newEnterable;\n\n this.tooltipHandler.reInit?.();\n } else {\n this._initHandler();\n }\n }\n\n showTooltip(datum: Datum, options: IShowTooltipOption) {\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this.processor) {\n this._initProcessor();\n }\n\n if (!this.tooltipHandler?.showTooltip) {\n return false;\n }\n const result = showTooltip(datum, options, this);\n if (result !== 'none') {\n this._alwaysShow = !!options?.alwaysShow;\n }\n return result;\n }\n\n /** 手动隐藏 tooltip,返回是否成功 */\n hideTooltip = (): boolean => {\n if (this._isReleased) {\n return false;\n }\n const params: TooltipHandlerParams = {\n changePositionOnly: false,\n tooltip: this,\n item: undefined,\n datum: undefined,\n source: Event_Source_Type.chart\n } as any;\n\n this._alwaysShow = false;\n return !this._hideTooltipByHandler(params);\n };\n\n private _isSameAsCache(\n nextInfo?: TooltipInfo,\n nextParams?: BaseEventParams,\n nextActiveType?: TooltipActiveType\n ): boolean {\n if (nextActiveType !== this._cacheActiveType) {\n return false;\n }\n if (nextInfo === this._cacheInfo) {\n return true;\n }\n if (isNil(this._cacheInfo) || isNil(nextInfo)) {\n return false;\n }\n\n // 判断 tooltip 信息是否一致\n if (isDimensionInfo(nextInfo)) {\n if (isMarkInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as DimensionTooltipInfo;\n const isSameAsCacheInfo =\n prevInfo.length === nextInfo.length && nextInfo.every((info, i) => isSameDimensionInfo(info, prevInfo[i]));\n\n return isSameAsCacheInfo;\n }\n\n if (isDimensionInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as MarkTooltipInfo;\n const isSameAsCacheInfo =\n nextInfo?.datum === prevInfo.datum && nextInfo?.mark === prevInfo.mark && nextInfo?.series === prevInfo.series;\n if (!isSameAsCacheInfo) {\n return false;\n }\n\n // 判断事件触发信息是否一致\n const prevParams = this._cacheParams;\n if (isNil(prevParams) || isNil(nextParams)) {\n return false;\n }\n return (\n prevParams.mark === nextParams.mark &&\n prevParams.model === nextParams.model &&\n prevParams.datum === nextParams.datum\n );\n }\n\n private _isPointerInChart(point: IPoint): boolean {\n const globalInstance = this._option?.globalInstance;\n if (!globalInstance) {\n return false;\n }\n const chart = globalInstance.getChart();\n if (!chart) {\n return false;\n }\n const { x, y } = point;\n const canvas = globalInstance.getCanvas();\n const { x: chartX, y: chartY, width: chartWidth, height: chartHeight } = canvas.getBoundingClientRect();\n // 鼠标仍在图表范围内,则不处理\n if (x >= chartX && x <= chartX + chartWidth && y >= chartY && y <= chartY + chartHeight) {\n return true;\n }\n\n return false;\n }\n\n getVisible() {\n return this._spec.visible !== false;\n }\n}\n\nexport const registerTooltip = () => {\n Factory.registerComponent(Tooltip.type, Tooltip);\n};\n","/**\n * @description Crosshair 基类\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { LocationCfg } from '../core/type';\nimport type { BaseCrosshairAttrs } from './type';\n\nexport abstract class CrosshairBase extends AbstractComponent> {\n name = 'crosshair';\n\n protected abstract renderCrosshair(container: IGroup): any;\n /**\n * 更新位置\n * @param location 位置信息\n */\n abstract setLocation(location: LocationCfg): void;\n\n protected render() {\n this.renderCrosshair(this as unknown as IGroup);\n }\n}\n","// import { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\nimport { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\n\nexport function loadLineCrosshairComponent() {\n registerGroup();\n registerLine();\n}\n\nexport function loadCircleCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n\nexport function loadPolygonCrosshairComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadRectCrosshairComponent() {\n registerGroup();\n registerRect();\n}\n\nexport function loadSectorCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n\nexport function loadPolygonSectorCrosshairComponent() {\n registerGroup();\n registerPath();\n}\n","/**\n * @description 直线类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { LineCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineCrosshairComponent } from './register';\n\nloadLineCrosshairComponent();\nexport class LineCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: LineCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, lineStyle } = this.attribute as LineCrosshairAttrs;\n\n const line = container.createOrUpdateChild(\n 'crosshair-line',\n {\n points: [start, end],\n ...lineStyle\n },\n 'line'\n );\n return line;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","/**\n * @description 矩形类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport type { Tag } from '../tag';\nimport { CrosshairBase } from './base';\nimport type { RectCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadRectCrosshairComponent } from './register';\n\nloadRectCrosshairComponent();\nexport class RectCrosshair extends CrosshairBase {\n static defaultAttributes = {\n rectStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n protected topLabelShape?: Tag;\n protected bottomLabelShape?: Tag;\n protected leftLabelShape?: Tag;\n protected rightLabelShape?: Tag;\n\n constructor(attributes: RectCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, rectStyle } = this.attribute as RectCrosshairAttrs;\n\n const rect = container.createOrUpdateChild(\n 'crosshair-rect',\n {\n x: start.x,\n y: start.y,\n width: end.x - start.x,\n height: end.y - start.y,\n ...rectStyle\n },\n 'rect'\n );\n return rect;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","import type { RenderMode } from '../../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../../typings/spec';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\n\nexport function getDefaultCrosshairTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n click: 'pointertap',\n hover: 'pointermove',\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n click: 'tap',\n hover: ['pointerdown', 'pointermove'],\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n return null;\n}\n\nexport const enum LayoutType {\n ALL = 0b0011,\n HORIZONTAL = 0b0010,\n VERTICAL = 0b0001\n}\n","import type { Dict, IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { throttle, PointService, isEqual, isArray, isNumber, get, isBoolean, isObject, array } from '@visactor/vutils';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport type { BaseEventParams, EventType } from '../../event/interface';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPadding, Maybe, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { outOfBounds } from '../../util/math';\nimport type { IComponentOption } from '../interface';\nimport type {\n ICrossHair,\n CrossHairTrigger,\n ICartesianCrosshairSpec,\n IPolarCrosshairSpec,\n ICrosshairCategoryFieldSpec\n} from './interface';\nimport { ChartEvent, Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { getDefaultCrosshairTriggerEventByMode } from './config';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IAxis } from '../axis/interface';\nimport type { TooltipEventParams } from '../tooltip/interface/event';\n\nexport type IBound = { x1: number; y1: number; x2: number; y2: number };\nexport type IAxisInfo = Map;\n\nexport interface IHair {\n /** 是否展示 crosshair 辅助图形 */\n visible: boolean;\n /** 类型 */\n type: 'rect' | 'line';\n /** 样式 */\n style?: Dict;\n label?: {\n /** 文本是否可见 */\n visible: boolean;\n /** 格式化函数 */\n formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 文本样式 */\n textStyle?: Dict;\n minWidth?: number;\n maxWidth?: number;\n padding?: IPadding | number | number[];\n panel?: Dict;\n zIndex?: number;\n };\n}\n\nexport interface IHairRadius extends IHair {\n smooth?: boolean;\n}\n\nconst ORIENT_MAP = {\n x: ['top', 'bottom'],\n y: ['left', 'right'],\n category: ['angle'],\n value: ['radius']\n};\n\nexport abstract class BaseCrossHair\n extends BaseComponent\n implements ICrossHair\n{\n static specKey = 'crosshair';\n specKey = 'crosshair';\n\n layoutType: 'none' = 'none';\n gridZIndex: number = LayoutZIndex.CrossHair_Grid;\n labelZIndex: number = LayoutZIndex.CrossHair;\n trigger: CrossHairTrigger = 'hover';\n enable: boolean;\n showDefault: boolean;\n triggerOff: 'none' | number; // 为none则不消失\n\n private _timer?: number;\n private _clickLock?: boolean;\n private _hasActive?: boolean;\n private _onlyLockClick?: boolean;\n\n get enableRemain(): boolean {\n return this.triggerOff === 'none';\n }\n\n private _limitBounds: Maybe;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this.enable = true;\n this.showDefault = true;\n }\n\n protected abstract _showDefaultCrosshairBySpec(): void;\n protected abstract _layoutCrosshair(\n x: number,\n y: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ): void;\n protected abstract _parseFieldInfo(): void;\n abstract hide(): void;\n\n protected _getLimitBounds() {\n if (!this._limitBounds) {\n const { width, height } = this._option.globalInstance.getChart()?.getViewRect() ?? {\n width: 0,\n height: 0\n };\n this._limitBounds = {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height\n };\n }\n return this._limitBounds;\n }\n\n protected _showDefaultCrosshair() {\n if (!this.showDefault) {\n return;\n }\n\n this._showDefaultCrosshairBySpec();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._parseCrosshairSpec();\n }\n\n created() {\n super.created();\n // event\n this._initEvent();\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n if (this._spec.followTooltip) {\n this._registerTooltipEvent();\n } else {\n const triggerConfig = this._getTriggerEvent();\n\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._registerEvent(cfg.in, false, cfg.click);\n cfg.out && this._registerEvent(cfg.out, true);\n });\n }\n }\n }\n\n private _registerEvent(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n const cfg = isOut ? { level: Event_Bubble_Level.chart } : { source: Event_Source_Type.chart };\n\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.on(evt, cfg, handler);\n });\n } else {\n this.event.on(eventName as EventType, cfg, handler);\n }\n }\n\n private _eventOff(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.off(evt, handler);\n });\n } else {\n this.event.off(eventName as EventType, handler);\n }\n }\n\n updateLayoutAttribute() {\n this._limitBounds = null;\n this._showDefaultCrosshair();\n }\n\n protected calculateTriggerPoint(params: any) {\n const { event } = params as BaseEventParams;\n // compute layer offset\n const layer = this._option.getCompiler().getStage().getLayer(undefined);\n const point = { x: event.viewX, y: event.viewY };\n layer.globalTransMatrix.transformPoint({ x: event.viewX, y: event.viewY }, point);\n\n return {\n x: point.x - this.getLayoutStartPoint().x,\n y: point.y - this.getLayoutStartPoint().y\n };\n }\n\n private _handleIn = (params: any) => {\n if (!this._option) {\n return;\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleClickInEvent = (params: any) => {\n if (this._hasActive && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n return;\n } else if (this._clickLock) {\n this._clickLock = false;\n this._handleOutEvent();\n return;\n }\n\n if (this._onlyLockClick) {\n return;\n }\n\n this._handleIn(params);\n\n if (isNumber(this.triggerOff)) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timer = setTimeout(() => {\n this._handleOutEvent();\n }, this.triggerOff as number) as unknown as number;\n }\n };\n\n private _handleHoverInEvent = throttle((params: any) => {\n if (this._clickLock) {\n return;\n }\n\n this._handleIn(params);\n }, 10);\n\n private _handleOutEvent = () => {\n if (this.enableRemain || this._clickLock || !this._hasActive) {\n return;\n }\n this.clearOutEvent();\n\n this.hide();\n };\n\n private _getTriggerEvent() {\n const { mode = RenderModeEnum['desktop-browser'] } = this._option;\n const triggerConfig = getDefaultCrosshairTriggerEventByMode(mode);\n if (triggerConfig) {\n const trigger: string[] = array(this.trigger || 'hover');\n const outTrigger = (inTrigger: CrossHairTrigger) => {\n if (inTrigger === 'click') {\n return this.triggerOff === 'none' ? null : triggerConfig.clickOut;\n }\n return triggerConfig.hoverOut;\n };\n\n if (this._spec.lockAfterClick && !trigger.includes('click')) {\n trigger.push('click');\n this._onlyLockClick = true;\n } else {\n this._onlyLockClick = false;\n }\n // 同时配置了多个触发事件\n const res: { in: EventType | EventType[]; out: EventType | EventType[]; click: boolean }[] = [];\n (trigger as ['click', 'hover']).forEach(item => {\n res.push({\n click: item === 'click',\n in: triggerConfig[item],\n out: outTrigger(item)\n });\n });\n return res;\n }\n return null;\n }\n\n private _registerTooltipEvent() {\n this.event.on(ChartEvent.tooltipHide, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n this.event.on(ChartEvent.tooltipShow, { source: Event_Source_Type.chart }, this._handleTooltipShow);\n this.event.on(ChartEvent.tooltipRelease, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n }\n\n private _handleTooltipShow = (params: TooltipEventParams) => {\n const tooltipData = params.tooltipData;\n\n if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) {\n this._handleTooltipHideOrRelease();\n return;\n }\n\n if (isObject(this._spec.followTooltip)) {\n if (this._spec.followTooltip[params.activeType] === false) {\n this._handleTooltipHideOrRelease();\n return;\n }\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y, tooltipData, params.activeType);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleTooltipHideOrRelease = () => {\n this.clearOutEvent();\n\n this.hide();\n };\n\n protected _getAxisInfoByField(field: 'x' | 'y' | 'category' | 'value') {\n // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n const axesComponents = this._option.getComponentsByKey?.('axes') as IAxis[];\n if (!axesComponents?.length) {\n return null;\n }\n let bindingAxesIndex: number[] = get(this._spec, `${field}Field.bindingAxesIndex`);\n if (!bindingAxesIndex) {\n bindingAxesIndex = [];\n axesComponents.forEach((item, index) => {\n if (ORIENT_MAP[field].includes(item.getOrient())) {\n bindingAxesIndex.push(index);\n }\n });\n }\n if (!bindingAxesIndex.length) {\n return null;\n }\n\n const map: IAxisInfo = new Map();\n let x1 = Infinity;\n let y1 = Infinity;\n let x2 = -Infinity;\n let y2 = -Infinity;\n const { x: sx, y: sy } = this.getLayoutStartPoint();\n bindingAxesIndex.forEach(idx => {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n const axis = axesComponents.find(axis => axis.getSpecIndex() === idx);\n if (!axis) {\n return;\n }\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x: regionStartX, y: regionStartY } = r.getLayoutStartPoint();\n x1 = Math.min(x1, regionStartX - sx);\n y1 = Math.min(y1, regionStartY - sy);\n x2 = Math.max(x2, regionStartX + r.getLayoutRect().width - sx);\n y2 = Math.max(y2, regionStartY + r.getLayoutRect().height - sy);\n });\n map.set(idx, { x1, y1, x2, y2, axis: axis as unknown as T });\n });\n\n return map;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onLayoutEnd(ctx: IModelLayoutOption): void {\n const region = this._regions[0];\n this.setLayoutRect(region.getLayoutRect());\n this.setLayoutStartPosition(region.getLayoutStartPoint());\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _releaseEvent(): void {\n this.clearOutEvent();\n\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._eventOff(cfg.in, false, cfg.click);\n cfg.out && this._eventOff(cfg.out, true);\n });\n }\n }\n\n protected _parseCrosshairSpec() {\n this._parseFieldInfo();\n\n const { trigger, triggerOff, labelZIndex, gridZIndex } = this._spec;\n if (trigger) {\n this.trigger = trigger;\n }\n if (triggerOff === 'none' || (isNumber(triggerOff) && triggerOff > 0)) {\n this.triggerOff = triggerOff;\n }\n if (labelZIndex !== undefined) {\n this.labelZIndex = labelZIndex;\n }\n if (gridZIndex !== undefined) {\n this.gridZIndex = gridZIndex;\n }\n }\n\n protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string) {\n const hair = {} as any;\n const { line = {}, label = {}, visible } = field;\n\n hair.visible = visible;\n hair.type = line.type || 'line';\n\n if (line.visible === false) {\n hair.style = { visible: false };\n } else {\n const style = line.style || {};\n const { stroke, fill, lineWidth } = style as any;\n const { strokeOpacity, fillOpacity, opacity, ...restStyle } = style as any;\n const isLineType = hair.type === 'line';\n let finalOpacity = isLineType ? strokeOpacity : fillOpacity;\n if (isNumber(opacity)) {\n // FIXME: 之前的兼容逻辑,去掉可能会影响现有 crosshair 的展示效果\n finalOpacity = (finalOpacity ?? 1) * opacity;\n }\n hair.style = {\n opacity: finalOpacity,\n pickable: false,\n visible: true,\n ...restStyle\n };\n\n if (isLineType) {\n hair.style.stroke = stroke || fill;\n hair.style.lineWidth = get(line, 'width', lineWidth || 2);\n } else {\n hair.style.fill = fill || stroke;\n if (this._spec[fieldName]?.line?.style?.stroke) {\n hair.style.stroke = this._spec[fieldName].line.style.stroke;\n }\n const rectSize = get(line, 'width');\n if (typeof rectSize === 'string') {\n const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;\n hair.style.sizePercent = percent;\n } else if (typeof rectSize === 'number' || typeof rectSize === 'function') {\n hair.style.size = rectSize;\n }\n }\n }\n\n if (!!label.visible) {\n const labelBackground = label.labelBackground || {};\n const labelStyle = label.style || {};\n const {\n fill: rectFill = 'rgba(47, 59, 82, 0.9)',\n stroke: rectStroke,\n outerBorder,\n ...rectStyle\n } = labelBackground.style || {};\n hair.label = {\n visible: true,\n formatMethod: label.formatMethod,\n formatter: label.formatter,\n minWidth: labelBackground.minWidth,\n maxWidth: labelBackground.maxWidth,\n padding: labelBackground.padding,\n textStyle: {\n fontSize: 14,\n pickable: false,\n ...labelStyle,\n fill: labelStyle.fill || '#fff',\n stroke: get(labelStyle, 'stroke')\n },\n panel: (isBoolean(labelBackground.visible) ? labelBackground.visible : !!labelBackground)\n ? {\n visible: true,\n pickable: false,\n fill: rectFill,\n stroke: rectStroke,\n // Note: 通过这个配置可以保证 label 和 轴 label 对齐\n outerBorder: {\n stroke: rectFill,\n distance: 0,\n lineWidth: 3,\n ...outerBorder\n },\n ...rectStyle\n }\n : { visible: false },\n zIndex: this.labelZIndex,\n childrenPickable: false,\n pickable: false\n };\n } else {\n hair.label = { visible: false };\n }\n\n return hair;\n }\n\n protected _filterAxisByPoint(axisMap: IAxisInfo, relativeX: number, relativeY: number) {\n axisMap &&\n axisMap.forEach(item => {\n const axis = item.axis as unknown as IAxis | IPolarAxis;\n if (outOfBounds(item, relativeX, relativeY)) {\n axisMap.delete(axis.getSpecIndex());\n }\n if ((axis as IPolarAxis).type.startsWith('polarAxis')) {\n // 极坐标下需要判断是否在半径内\n const center = (axis as IPolarAxis).getCenter();\n const innerRadius = (axis as IPolarAxis).getInnerRadius();\n const outerRadius = (axis as IPolarAxis).getOuterRadius();\n const distance = PointService.distancePP({ x: relativeX, y: relativeY }, center);\n if (distance > outerRadius || distance < innerRadius) {\n axisMap.delete((axis as IPolarAxis).getSpecIndex());\n }\n }\n });\n return axisMap;\n }\n\n protected clearOutEvent() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._clickLock) {\n this._clickLock = null;\n }\n\n if (this._hasActive) {\n this._hasActive = null;\n }\n }\n}\n","import type { BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series';\nimport type { ILayoutPoint, StringOrNumber } from '../../../typings';\nimport type { IBound, IHair } from '../base';\nimport { LayoutType } from '../config';\nimport type { AxisCurrentValueMap, ICrosshairInfoX, ICrosshairInfoY, ICrosshairLabelInfo } from '../interface';\nimport { getDatumByValue } from './common';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { isValid } from '@visactor/vutils';\nimport type { IAxis, ILinearAxis } from '../../axis';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n tag: number = LayoutType.ALL,\n series: ICartesianSeries,\n layoutStartPoint: ILayoutPoint,\n currValueX: AxisCurrentValueMap,\n currValueY: AxisCurrentValueMap,\n xHair: IHair,\n yHair: IHair,\n enableRemain: boolean = false,\n cacheXCrossHairInfo?: ICrosshairInfoX,\n cacheYCrossHairInfo?: ICrosshairInfoY\n) => {\n const layoutX = tag & LayoutType.VERTICAL;\n const layoutY = tag & LayoutType.HORIZONTAL;\n\n if (!layoutStartPoint) {\n layoutStartPoint = { x: 0, y: 0 };\n }\n\n // 计算x和y的坐标\n let xAxis = null;\n let yAxis = null;\n let x = 0;\n let y = 0;\n if (currValueX.size) {\n const item = Array.from(currValueX.values())[0];\n x = item.axis.getScale().scale(item.value) + item.axis.getLayoutStartPoint().x - layoutStartPoint.x;\n xAxis = item.axis;\n }\n if (currValueY.size) {\n const item = Array.from(currValueY.values())[0];\n y = item.axis.getScale().scale(item.value) + item.axis.getLayoutStartPoint().y - layoutStartPoint.y;\n yAxis = item.axis;\n }\n\n const xVisible = !!currValueX.size && Number.isFinite(x);\n const yVisible = !!currValueY.size && Number.isFinite(y);\n const xUseCache = enableRemain && !xVisible && isValid(cacheXCrossHairInfo);\n const yUseCache = enableRemain && !yVisible && isValid(cacheYCrossHairInfo);\n\n let xCrossHairInfo: ICrosshairInfoX;\n if (layoutX) {\n xCrossHairInfo = xUseCache\n ? cacheXCrossHairInfo\n : {\n height: 0,\n leftPos: 0,\n rightPos: 0,\n topPos: 0,\n x: 0,\n bottom: { visible: false, text: '', dx: 0, dy: 0 },\n top: { visible: false, text: '', dx: 0, dy: 0 },\n visible: xVisible,\n axis: xAxis\n };\n }\n\n let yCrossHairInfo: ICrosshairInfoY;\n if (layoutY) {\n yCrossHairInfo = yUseCache\n ? cacheYCrossHairInfo\n : {\n width: 0,\n leftPos: 0,\n topPos: 0,\n bottomPos: 0,\n y: 0,\n left: { visible: false, text: '', dx: 0, dy: 0 },\n right: { visible: false, text: '', dx: 0, dy: 0 },\n visible: yVisible,\n axis: yAxis\n };\n }\n\n let bandWidth;\n let offsetWidth: number = 0;\n let bandHeight;\n let offsetHeight: number = 0;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (xHair) {\n currValueX.forEach(({ axis, value }) => {\n value = value ?? '';\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const xScale = axis.getScale();\n if (isDiscrete(xScale.type)) {\n bandWidth = (xScale as BandScale).bandwidth();\n\n if (bandWidth === 0 && (xScale as BandScale).step) {\n offsetWidth = (xScale as BandScale).step();\n }\n } else if (isContinuous(xScale.type)) {\n const fieldX = series.fieldX[0];\n const fieldX2 = series.fieldX2;\n const datum = getDatumByValue(series.getViewData().latestData, +value, fieldX, fieldX2);\n if (datum) {\n const startX = series.dataToPositionX(datum);\n if (fieldX2) {\n bandWidth = Math.abs(startX - series.dataToPositionX1(datum));\n value = `${datum[fieldX]} ~ ${datum[fieldX2]}`;\n } else {\n bandWidth = 1;\n }\n x = startX;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (xCrossHairInfo && xHair.label?.visible && !xUseCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'bottom') {\n xCrossHairInfo.bottom.visible = true;\n xCrossHairInfo.bottom.defaultFormatter = niceLabelFormatter;\n xCrossHairInfo.bottom.text = value;\n xCrossHairInfo.bottom.dx = 0;\n xCrossHairInfo.bottom.dy = labelOffset;\n } else if (axis.getOrient() === 'top') {\n xCrossHairInfo.top.visible = true;\n xCrossHairInfo.top.defaultFormatter = niceLabelFormatter;\n xCrossHairInfo.top.text = value;\n xCrossHairInfo.top.dx = 0;\n xCrossHairInfo.top.dy = -labelOffset;\n }\n }\n });\n }\n\n if (yHair) {\n currValueY.forEach(({ axis, value }) => {\n value = value ?? '';\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const yScale = axis.getScale();\n if (isDiscrete(yScale.type)) {\n bandHeight = (yScale as BandScale).bandwidth();\n\n if (bandHeight === 0 && (yScale as BandScale).step) {\n offsetHeight = (yScale as BandScale).step();\n }\n } else if (isContinuous(yScale.type)) {\n const fieldY = series.fieldY[0];\n const fieldY2 = series.fieldY2;\n const datum = getDatumByValue(series.getViewData().latestData, +value, fieldY, fieldY2);\n if (datum) {\n const startY = series.dataToPositionY(datum);\n if (fieldY2) {\n bandHeight = Math.abs(startY - series.dataToPositionY1(datum));\n value = `${datum[fieldY]} ~ ${datum[fieldY2]}`;\n } else {\n bandHeight = 1;\n }\n y = startY;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (yCrossHairInfo && yHair.label?.visible && !yUseCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'left') {\n yCrossHairInfo.left.visible = true;\n yCrossHairInfo.left.defaultFormatter = niceLabelFormatter;\n yCrossHairInfo.left.text = value;\n yCrossHairInfo.left.dx = -labelOffset;\n yCrossHairInfo.left.dy = 0;\n } else if (axis.getOrient() === 'right') {\n yCrossHairInfo.right.visible = true;\n yCrossHairInfo.right.defaultFormatter = niceLabelFormatter;\n yCrossHairInfo.right.text = value;\n yCrossHairInfo.right.dx = labelOffset;\n yCrossHairInfo.right.dy = 0;\n }\n }\n });\n }\n\n if (xCrossHairInfo && !xUseCache) {\n const xRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(xRegion, currValueX);\n xCrossHairInfo.leftPos = xRegion.x1;\n xCrossHairInfo.rightPos = xRegion.x2;\n xCrossHairInfo.topPos = xRegion.y1;\n xCrossHairInfo.height = xRegion.y2 - xRegion.y1;\n xCrossHairInfo.x = x + layoutStartPoint.x;\n\n if (xHair && xHair.label) {\n const { top, bottom } = xCrossHairInfo;\n if (top.visible) {\n setFormattedCrosshairLabel(top, 'top', xHair.label);\n }\n if (bottom.visible) {\n setFormattedCrosshairLabel(bottom, 'bottom', xHair.label);\n }\n }\n }\n\n if (yCrossHairInfo && !yUseCache) {\n const yRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(yRegion, currValueY);\n yCrossHairInfo.leftPos = yRegion.x1;\n yCrossHairInfo.topPos = yRegion.y1;\n yCrossHairInfo.bottomPos = yRegion.y2;\n yCrossHairInfo.width = yRegion.x2 - yRegion.x1;\n yCrossHairInfo.y = y + layoutStartPoint.y;\n\n if (yHair && yHair.label) {\n const { left, right } = yCrossHairInfo;\n if (left.visible) {\n setFormattedCrosshairLabel(left, 'left', yHair.label);\n }\n if (right.visible) {\n setFormattedCrosshairLabel(right, 'right', yHair.label);\n }\n }\n }\n\n return {\n x: layoutX && xCrossHairInfo ? xCrossHairInfo : undefined,\n y: layoutY && yCrossHairInfo ? yCrossHairInfo : undefined,\n offsetWidth,\n offsetHeight,\n bandWidth: bandWidth ?? 0,\n bandHeight: bandHeight ?? 0\n };\n};\n\nconst setFormattedCrosshairLabel = (labelInfo: ICrosshairLabelInfo, position: string, labelSpec: IHair['label']) => {\n const { formatMethod, formatter } = labelSpec;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, labelInfo.text, {\n label: labelInfo.text,\n position\n });\n if (formatFunc) {\n labelInfo.text = formatFunc(...args);\n } else if (labelInfo.defaultFormatter) {\n labelInfo.text = labelInfo.defaultFormatter(labelInfo.text);\n }\n};\n\n// 计算x轴和y轴对应的region区域\nconst setRegionArea = (outRegion: IBound, currentValue: AxisCurrentValueMap) => {\n currentValue.forEach(({ axis }) => {\n const regions = axis.getRegions();\n regions.forEach(r => {\n outRegion.x1 = Math.min(outRegion.x1, r.getLayoutStartPoint().x);\n outRegion.y1 = Math.min(outRegion.y1, r.getLayoutStartPoint().y);\n outRegion.x2 = Math.max(outRegion.x2, r.getLayoutStartPoint().x + r.getLayoutRect().width);\n outRegion.y2 = Math.max(outRegion.y2, r.getLayoutStartPoint().y + r.getLayoutRect().height);\n });\n });\n};\n\nexport const layoutVerticalCrosshair = (\n xHair: IHair,\n crosshairInfo: ICrosshairInfoX,\n bandWidth: number,\n offsetWidth: number\n) => {\n const { x, topPos, height } = crosshairInfo;\n\n // 外部设置的size\n const type = xHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n visible: true,\n start: { x: x + bandWidth / 2, y: topPos },\n end: { x: x + bandWidth / 2, y: topPos + height }\n };\n } else if (type === 'rect') {\n const extend = getRectSize(xHair, bandWidth, crosshairInfo.axis);\n const { leftPos, rightPos } = crosshairInfo;\n\n positionAttribute = {\n visible: true,\n start: { x: Math.max(x - extend / 2 - offsetWidth / 2, leftPos), y: topPos },\n end: { x: Math.min(x + bandWidth + extend / 2 + offsetWidth / 2, rightPos), y: topPos + height }\n };\n }\n\n return positionAttribute;\n};\n\nexport const layoutHorizontalCrosshair = (\n yHair: IHair,\n crosshairInfo: ICrosshairInfoY,\n bandHeight: number,\n offsetHeight: number\n) => {\n const { leftPos, width, y } = crosshairInfo;\n\n // 外部设置的size\n const type = yHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n visible: true,\n start: { x: leftPos, y: y + bandHeight / 2 },\n end: { x: leftPos + width, y: y + bandHeight / 2 }\n };\n } else if (type === 'rect') {\n const extend = getRectSize(yHair, bandHeight, crosshairInfo.axis);\n const { topPos, bottomPos } = crosshairInfo;\n\n positionAttribute = {\n visible: true,\n start: { x: leftPos, y: Math.max(y - extend / 2 - offsetHeight / 2, topPos) },\n end: { x: leftPos + width, y: Math.min(y + bandHeight + extend / 2 + offsetHeight / 2, bottomPos) }\n };\n }\n\n return positionAttribute;\n};\n\nconst getRectSize = (hair: IHair, bandSize: number, axis: IAxis) => {\n // 外部设置的size\n let extend = 0;\n if (hair.style?.sizePercent) {\n extend = (hair.style.sizePercent - 1) * bandSize;\n } else if (typeof hair.style?.size === 'number') {\n extend = hair.style.size - bandSize;\n } else if (typeof hair.style?.size === 'function') {\n const axisRect = axis.getLayoutRect();\n extend = hair.style.size(axisRect, axis) - bandSize;\n }\n\n return extend;\n};\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type {\n AxisCurrentValueMap,\n ICartesianCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n ICrosshairInfoX,\n ICrosshairInfoY\n} from './interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';\nimport type { IAxisInfo, IHair } from './base';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseCrossHair } from './base';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\nimport { limitTagInBounds } from './utils';\nimport type { IAxis } from '../axis/interface';\nimport type { IOrientType, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { isXAxis, isYAxis } from '../axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { layoutByValue, layoutHorizontalCrosshair, layoutVerticalCrosshair } from './utils/cartesian';\nimport { getFirstSeries } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../event/events/dimension/interface';\nimport { getSpecInfo } from '../util';\n\n// 1. crosshair保存上次记录的x和y轴dimension\n// 2. 每次交互触发时,首先转化成dimension保存,然后依据dimension计算x和y绘制\n// 3. 如果同方向同时有多个轴,那么同时保存这些轴的数据\n// 4. 如果同方向的轴有多个离散轴,那么直接不显示\n\nexport class CartesianCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.cartesianCrosshair;\n type = ComponentTypeEnum.cartesianCrosshair;\n name: string = ComponentTypeEnum.cartesianCrosshair;\n\n private _xHair: IHair | undefined;\n private _yHair: IHair | undefined;\n\n private _cacheXCrossHairInfo: ICrosshairInfoX | undefined;\n private _cacheYCrossHairInfo: ICrosshairInfoY | undefined;\n\n private _xCrosshair: LineCrosshair | RectCrosshair;\n private _xTopLabel: Tag;\n private _xBottomLabel: Tag;\n\n private _yCrosshair: LineCrosshair | RectCrosshair;\n private _yLeftLabel: Tag;\n private _yRightLabel: Tag;\n\n private _currValueX: AxisCurrentValueMap;\n private _currValueY: AxisCurrentValueMap;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: ICartesianCrosshairSpec) => {\n return (s.xField && s.xField.visible !== false) || (s.yField && s.yField.visible !== false);\n });\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueX = new Map();\n this._currValueY = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n if (xField?.visible && xField.defaultSelect) {\n const { axisIndex, datum } = xField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (yField?.visible && yField.defaultSelect) {\n const { axisIndex, datum } = yField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, value: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueX.clear();\n this._currValueX.set(axisIndex, { axis, value });\n } else {\n this._currValueY.clear();\n this._currValueY.set(axisIndex, { axis, value });\n }\n this.layoutByValue(tag);\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const xAxisMap = this._getAxisInfoByField('x');\n const yAxisMap = this._getAxisInfoByField('y');\n return {\n xAxisMap: this._filterAxisByPoint(xAxisMap, relativeX, relativeY),\n yAxisMap: this._filterAxisByPoint(yAxisMap, relativeX, relativeY)\n };\n }\n\n private _getValueAt(axis: IAxis, p: number): number | string {\n const value = axis.getScale().invert(p);\n return value;\n }\n\n /**\n * clear axis value of crosshair\n */\n clearAxisValue() {\n this._currValueX.clear();\n this._currValueY.clear();\n }\n\n /**\n * set axis value of crosshair\n */\n setAxisValue(value: StringOrNumber, axis: IAxis) {\n if (isXAxis(axis.getOrient() as unknown as IOrientType)) {\n this._currValueX.set(axis.getSpecIndex(), {\n value,\n axis\n });\n } else {\n this._currValueY.set(axis.getSpecIndex(), {\n value,\n axis\n });\n }\n }\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(\n axisMap: IAxisInfo,\n p: number,\n currValue: AxisCurrentValueMap,\n vertical: boolean\n ): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, {\n value: this._getValueAt(\n axis,\n p -\n (vertical\n ? axis.getLayoutStartPoint().x - this.getLayoutStartPoint().x\n : axis.getLayoutStartPoint().y - this.getLayoutStartPoint().y)\n ),\n axis\n });\n });\n return true;\n }\n\n protected _layoutCrosshair(\n relativeX: number,\n relativeY: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ) {\n let x = relativeX;\n let y = relativeY;\n\n if (tooltipData && tooltipData.length) {\n if (activeType === 'dimension') {\n const dimensionInfo = (tooltipData as IDimensionInfo[])[0];\n // 图例筛选时, 找到第一个没有被筛选的系列\n const datumIndex = dimensionInfo.data.findIndex(dimData => dimData.datum.length > 0);\n let pos;\n if (datumIndex > -1) {\n const dimensionData = dimensionInfo.data[datumIndex];\n pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n }\n\n const isY = isValid(dimensionInfo.dimType)\n ? dimensionInfo.dimType === 'y'\n : isYAxis(dimensionInfo?.axis?.getOrient() as IOrientType);\n\n if (isY) {\n y = pos?.y;\n } else {\n x = pos?.x;\n }\n } else if (activeType === 'mark') {\n const dimensionData = (tooltipData as IDimensionData[])[0];\n const pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n\n x = pos?.x;\n y = pos?.y;\n }\n }\n\n // 找到所有的包含这个点的轴\n const { xAxisMap, yAxisMap } = this._findAllAxisContains(x, y);\n if ((xAxisMap && xAxisMap.size === 0) || (yAxisMap && yAxisMap.size === 0)) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueX.clear();\n this._currValueY.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n xAxisMap && xAxisMap.size && this._getAllAxisValues(xAxisMap, x, this._currValueX, true);\n yAxisMap && yAxisMap.size && this._getAllAxisValues(yAxisMap, y, this._currValueY, false);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n // 隐藏\n this._xCrosshair && this._xCrosshair.hideAll();\n this._xTopLabel && this._xTopLabel.hideAll();\n this._xBottomLabel && this._xBottomLabel.hideAll();\n\n this._yCrosshair && this._yCrosshair.hideAll();\n this._yLeftLabel && this._yLeftLabel.hideAll();\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n const series = getFirstSeries(this._regions, 'cartesian') as ICartesianSeries;\n if (!series) {\n return;\n }\n\n const { x, y, offsetWidth, offsetHeight, bandWidth, bandHeight } = layoutByValue(\n tag,\n series,\n this.getLayoutStartPoint(),\n this._currValueX,\n this._currValueY,\n this._xHair,\n this._yHair,\n this.enableRemain,\n this._cacheXCrossHairInfo,\n this._cacheYCrossHairInfo\n );\n\n if (this.enableRemain) {\n x && (this._cacheXCrossHairInfo = { ...x, _isCache: true });\n y && (this._cacheYCrossHairInfo = { ...y, _isCache: true });\n }\n\n x && this._layoutVertical(x, bandWidth, offsetWidth);\n y && this._layoutHorizontal(y, bandHeight, offsetHeight);\n }\n\n private _layoutVertical(crosshairInfo: ICrosshairInfoX, bandWidth: number, offsetWidth: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._xHair) {\n return;\n }\n\n const { x, topPos, height, top, bottom, visible } = crosshairInfo;\n\n if (visible) {\n // 外部设置的size\n const type = this._xHair.type;\n const positionAttribute = layoutVerticalCrosshair(this._xHair, crosshairInfo, bandWidth, offsetWidth);\n this._updateCrosshair('x', type, positionAttribute);\n // 文本\n if (top.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos,\n ...top,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n zIndex: this.labelZIndex,\n visible: true\n };\n this._updateCrosshairLabel(this._xTopLabel, updateAttrs, label => {\n label.name = 'crosshair-x-top-label';\n this._xTopLabel = label;\n });\n } else {\n this._xTopLabel && this._xTopLabel.hideAll();\n }\n\n if (bottom.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos + height,\n ...bottom,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'top'\n },\n zIndex: this.labelZIndex,\n visible: true\n };\n this._updateCrosshairLabel(this._xBottomLabel, updateAttrs, label => {\n label.name = 'crosshair-x-bottom-label';\n this._xBottomLabel = label;\n });\n } else {\n this._xBottomLabel && this._xBottomLabel.hideAll();\n }\n }\n }\n\n private _layoutHorizontal(crosshairInfo: ICrosshairInfoY, bandHeight: number, offsetHeight: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._yHair) {\n return;\n }\n const { leftPos, width, y, left, right, visible } = crosshairInfo;\n if (visible) {\n const type = this._yHair.type;\n const positionAttribute = layoutHorizontalCrosshair(this._yHair, crosshairInfo, bandHeight, offsetHeight);\n this._updateCrosshair('y', type, positionAttribute);\n\n // 文本\n if (left.visible) {\n const updateAttrs = {\n x: leftPos,\n y: y + bandHeight / 2,\n ...left,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n\n this._updateCrosshairLabel(this._yLeftLabel, updateAttrs, label => {\n label.name = 'crosshair-y-left-label';\n this._yLeftLabel = label;\n });\n } else {\n this._yLeftLabel && this._yLeftLabel.hideAll();\n }\n\n if (right.visible) {\n const updateAttrs = {\n x: leftPos + width,\n y: y + bandHeight,\n ...right,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._yRightLabel, updateAttrs, label => {\n label.name = 'crosshair-y-right-label';\n this._yRightLabel = label;\n });\n } else {\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n }\n }\n\n protected _parseFieldInfo() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n this._parseAndSetCrosshair(xField, 'x');\n this._parseAndSetCrosshair(yField, 'y');\n }\n\n private _parseAndSetCrosshair(field: ICrosshairCategoryFieldSpec, axis: 'x' | 'y') {\n const hairProp = `_${axis}Hair` as '_xHair' | '_yHair';\n const crosshairProp = `_${axis}Crosshair` as '_xCrosshair' | '_yCrosshair';\n if (field && field.visible) {\n this[hairProp] = this._parseField(field, `${axis}Field` as 'xField' | 'yField');\n\n if (this[crosshairProp]) {\n const { style, type } = this[hairProp];\n const styleKey = type === 'rect' ? 'rectStyle' : 'lineStyle';\n\n this[crosshairProp].setAttributes({\n [styleKey]: style\n });\n }\n } else if (this[crosshairProp] && this[crosshairProp].parent) {\n this[crosshairProp].parent.removeChild(this[crosshairProp]);\n }\n }\n\n private _updateCrosshair(dim: string, type: string, attributes: any) {\n const container = this.getContainer();\n let crosshair;\n if (dim === 'x') {\n crosshair = this._xCrosshair;\n } else {\n crosshair = this._yCrosshair;\n }\n if (crosshair) {\n crosshair.setAttributes(attributes);\n } else {\n const style = dim === 'x' ? this._xHair.style : this._yHair.style;\n // 创建\n if (type === 'line') {\n crosshair = new LineCrosshair({\n ...attributes,\n lineStyle: style,\n zIndex: this.gridZIndex + 1, // 样式优化:线盖在面上\n disableTriggerEvent: this._option.disableTriggerEvent,\n pickable: false\n });\n } else if (type === 'rect') {\n crosshair = new RectCrosshair({\n ...attributes,\n rectStyle: style,\n zIndex: this.gridZIndex,\n disableTriggerEvent: this._option.disableTriggerEvent,\n pickable: false\n });\n }\n // 添加至场景树\n container?.add(crosshair as unknown as INode);\n if (dim === 'x') {\n this._xCrosshair = crosshair;\n } else {\n this._yCrosshair = crosshair;\n }\n }\n }\n\n private _updateCrosshairLabel(label: Tag, attributes: any, callback: (label: Tag) => void) {\n const container = this.getContainer();\n if (label) {\n label.setAttributes(attributes);\n } else {\n label = new Tag(attributes);\n callback(label);\n container?.add(label as unknown as INode);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._xCrosshair,\n this._xTopLabel,\n this._xBottomLabel,\n this._yCrosshair,\n this._yLeftLabel,\n this._yRightLabel\n ] as unknown as IGraphic[];\n }\n}\n\nexport const registerCartesianCrossHair = () => {\n Factory.registerComponent(CartesianCrossHair.type, CartesianCrossHair);\n};\n","/**\n * @description sector 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, getAngleByPoint, radianToDegree } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport { CrosshairBase } from './base';\nimport type { SectorCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSectorCrosshairComponent } from './register';\n\nloadSectorCrosshairComponent();\nexport class SectorCrosshair extends CrosshairBase {\n static defaultAttributes = {\n sectorStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n constructor(attributes: SectorCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SectorCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, innerRadius = 0, sectorStyle } = this.attribute as SectorCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n const circle = container.createOrUpdateChild(\n 'crosshair-sector',\n {\n ...center,\n outerRadius: radius,\n innerRadius,\n startAngle,\n endAngle,\n ...sectorStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const {\n center,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as SectorCrosshairAttrs;\n const sectorAngle = endAngle - startAngle;\n const pointAngle = radianToDegree(getAngleByPoint(center, point));\n this.setAttributes({\n startAngle: pointAngle - sectorAngle / 2,\n endAngle: pointAngle + sectorAngle / 2\n });\n }\n}\n","/**\n * @description polygon 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, polarToCartesian, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { PolygonCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPolygonCrosshairComponent } from './register';\n\nloadPolygonCrosshairComponent();\nexport class PolygonCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: PolygonCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PolygonCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, sides = 6, lineStyle } = this.attribute as PolygonCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n\n const isClose = (endAngle - startAngle) % (Math.PI * 2) === 0;\n const eachAngle = (endAngle - startAngle) / sides;\n let path;\n for (let index = 0; index <= sides; index++) {\n const angle = startAngle + eachAngle * index;\n const point = polarToCartesian(center, radius, angle);\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n if (index === sides && isClose) {\n path += 'Z';\n }\n }\n\n const polygon = container.createOrUpdateChild(\n 'crosshair-polygon',\n {\n path,\n ...lineStyle\n },\n 'path'\n );\n return polygon;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as PolygonCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","/**\n * @description circle 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { CircleCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleCrosshairComponent } from './register';\n\nloadCircleCrosshairComponent();\nexport class CircleCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: ['#b2bacf', false, false, false],\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: CircleCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, lineStyle } = this.attribute as CircleCrosshairAttrs;\n\n const circle = container.createOrUpdateChild(\n 'crosshair-circle',\n {\n ...center,\n outerRadius: radius,\n // TODO: group的cornerRadius支持数组,arc的不支持数组,此处会有类型转换问题\n ...(this.attribute as any),\n ...lineStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as CircleCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","import type { BandScale } from '@visactor/vscale';\nimport type { IPolarSeries } from '../../../series';\nimport type { IHair, IHairRadius } from '../base';\nimport type { AxisCurrentValueMap, IPolarCrosshairInfo } from '../interface';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { PointService, clamp, getAngleByPoint, getIntersectPoint, isValid, polarToCartesian } from '@visactor/vutils';\nimport type { ILinearAxis, IPolarAxis } from '../../axis';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n series: IPolarSeries,\n currValueAngle: AxisCurrentValueMap,\n currValueRadius: AxisCurrentValueMap,\n angleHair: IHair,\n radiusHair: IHair,\n enableRemain: boolean = false,\n cacheAngleCrossHairInfo?: IPolarCrosshairInfo,\n cacheRadiusCrossHairInfo?: IPolarCrosshairInfo\n) => {\n let angleCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n let radiusCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n sides: (series.angleAxisHelper.getScale(0) as BandScale).domain().length,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (angleHair) {\n angleCrossHairInfo.visible = !!currValueAngle.size;\n const bandWidth = series.angleAxisHelper.getBandwidth(0);\n currValueAngle.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n mergeSpec(angleCrossHairInfo, rest);\n const angle = series.angleAxisHelper.dataToPosition([value]);\n angleCrossHairInfo.angle = angle;\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (angleHair.label?.visible) {\n angleCrossHairInfo.label.visible = true;\n angleCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n angleCrossHairInfo.label.text = value;\n angleCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n\n angleCrossHairInfo.startAngle = angle - bandWidth / 2;\n angleCrossHairInfo.endAngle = angle + bandWidth / 2;\n });\n }\n\n if (radiusHair) {\n radiusCrossHairInfo.visible = !!currValueRadius.size;\n currValueRadius.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (radiusHair.label?.visible) {\n radiusCrossHairInfo.label.visible = true;\n radiusCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n radiusCrossHairInfo.label.text = value;\n radiusCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n radiusCrossHairInfo.angle = coord.angle;\n radiusCrossHairInfo.axis = axis as IPolarAxis;\n mergeSpec(radiusCrossHairInfo, rest);\n });\n }\n\n if (enableRemain && !angleCrossHairInfo.visible && isValid(cacheAngleCrossHairInfo)) {\n angleCrossHairInfo = cacheAngleCrossHairInfo;\n } else {\n if (angleCrossHairInfo.label.visible) {\n if (angleHair && angleHair.label) {\n const { label } = angleCrossHairInfo;\n const { formatMethod, formatter } = angleHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'angle'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n if (enableRemain && !radiusCrossHairInfo.visible && isValid(cacheRadiusCrossHairInfo)) {\n radiusCrossHairInfo = cacheRadiusCrossHairInfo;\n } else {\n if (radiusCrossHairInfo.label.visible) {\n if (radiusHair && radiusHair.label) {\n const { label } = radiusCrossHairInfo;\n const { formatMethod, formatter } = radiusHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'radius'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n return {\n angle: angleCrossHairInfo,\n radius: radiusCrossHairInfo\n };\n};\n\nexport const layoutAngleCrosshair = (angleHair: IHair, crosshairInfo: IPolarCrosshairInfo) => {\n const { angle, innerRadius, radius, startAngle, endAngle, center } = crosshairInfo;\n\n const crosshairType = angleHair.type === 'rect' ? 'sector' : 'line';\n let positionAttrs;\n if (crosshairType === 'sector') {\n positionAttrs = {\n center,\n innerRadius,\n radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n } else {\n positionAttrs = {\n start: polarToCartesian(center, innerRadius, angle),\n end: polarToCartesian(center, radius, angle)\n };\n }\n\n return positionAttrs;\n};\n\nexport const layoutRadiusCrosshair = (radiusHair: IHairRadius, crosshairInfo: IPolarCrosshairInfo) => {\n const { center, startAngle, endAngle, distance, sides, axis, point, radius, innerRadius } = crosshairInfo;\n\n const crosshairType = radiusHair.smooth ? 'circle' : 'polygon';\n\n let polygonRadius = distance;\n if (crosshairType === 'polygon') {\n const axisCenter = axis.getCenter();\n // 需要计算半径\n // 获取当前点的角度\n const curAngle = getAngleByPoint(axisCenter, point);\n const stepAngle = (endAngle - startAngle) / sides;\n const index = Math.floor((curAngle - startAngle) / stepAngle);\n const preAngle = index * stepAngle + startAngle;\n const nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle);\n\n const prePoint = polarToCartesian(axisCenter, distance, preAngle);\n const nextPoint = polarToCartesian(axisCenter, distance, nextAngle);\n // 求交点\n const insertPoint = getIntersectPoint(\n [nextPoint.x, nextPoint.y],\n [prePoint.x, prePoint.y],\n [axisCenter.x, axisCenter.y],\n [point.x, point.y]\n );\n if (insertPoint) {\n polygonRadius = clamp(\n PointService.distancePN(point, insertPoint[0], insertPoint[1]) + distance,\n innerRadius,\n radius\n );\n }\n }\n const positionAttrs = {\n center,\n startAngle: startAngle,\n endAngle: endAngle,\n radius: polygonRadius,\n sides\n };\n\n return positionAttrs;\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { IPolarSeries } from '../../series/interface/series';\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { AxisCurrentValueMap, IPolarCrosshairInfo, IPolarCrosshairSpec } from './interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { Tag } from '@visactor/vrender-components';\nimport { LineCrosshair, SectorCrosshair, CircleCrosshair, PolygonCrosshair } from '@visactor/vrender-components';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IPoint, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport type { IAxisInfo, IHair, IHairRadius } from './base';\nimport { BaseCrossHair } from './base';\nimport type { Maybe } from '@visactor/vutils';\nimport { polarToCartesian, PointService, isArray, isNil } from '@visactor/vutils';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport { angleLabelOrientAttribute, radiusLabelOrientAttribute } from '../../util/math';\nimport { limitTagInBounds } from './utils';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { layoutByValue, layoutAngleCrosshair, layoutRadiusCrosshair } from './utils/polar';\nimport { getFirstSeries } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../event/events/dimension/interface';\nimport { getSpecInfo } from '../util';\n\nexport class PolarCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.polarCrosshair;\n type = ComponentTypeEnum.polarCrosshair;\n name: string = ComponentTypeEnum.polarCrosshair;\n private _currValueAngle: AxisCurrentValueMap;\n private _currValueRadius: AxisCurrentValueMap;\n\n private _angleHair: IHair | undefined;\n private _radiusHair: IHairRadius | undefined;\n\n private _cacheAngleCrossHairInfo: IPolarCrosshairInfo | undefined;\n private _cacheRadiusCrossHairInfo: IPolarCrosshairInfo | undefined;\n\n private _radiusCrosshair: IGroup;\n private _radiusLabelCrosshair: Tag;\n private _angleCrosshair: IGroup;\n private _angleLabelCrosshair: Tag;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IPolarCrosshairSpec) => {\n return (s.categoryField && s.categoryField.visible !== false) || (s.valueField && s.valueField.visible !== false);\n });\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueAngle = new Map();\n this._currValueRadius = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField?.visible && categoryField.defaultSelect) {\n const { axisIndex, datum } = categoryField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (valueField?.visible && valueField.defaultSelect) {\n const { axisIndex, datum } = valueField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, datum: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IPolarAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueAngle.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.valueToPosition(datum),\n radius: axis.getOuterRadius()\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueAngle.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n } else {\n this._currValueRadius.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.startAngle,\n radius: axis.valueToPosition(datum)\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueRadius.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n }\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n this._radiusCrosshair && this._radiusCrosshair.hideAll();\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n this._angleCrosshair && this._angleCrosshair.hideAll();\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const angleAxisMap = this._getAxisInfoByField('category');\n const radiusAxisMap = this._getAxisInfoByField('value');\n return {\n angleAxisMap: this._filterAxisByPoint(angleAxisMap, relativeX, relativeY),\n radiusAxisMap: this._filterAxisByPoint(radiusAxisMap, relativeX, relativeY)\n };\n }\n\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(axisMap: IAxisInfo, point: IPoint, currValue: AxisCurrentValueMap): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, this._getValueByAxis(axis, point));\n });\n return true;\n }\n\n private _getValueByAxis(axis: IPolarAxis, point: IPoint) {\n const { x: axisStartX, y: axisStartY } = axis.getLayoutStartPoint();\n const { x, y } = this.getLayoutStartPoint();\n const value = axis.positionToData({\n x: point.x - (axisStartX - x),\n y: point.y - (axisStartY - y)\n });\n\n const center = {\n x: axis.getCenter().x + this.getLayoutStartPoint().x,\n y: axis.getCenter().y + this.getLayoutStartPoint().y\n };\n\n return {\n value,\n axis,\n center,\n innerRadius: axis.getInnerRadius(),\n radius: axis.getOuterRadius(),\n startAngle: axis.startAngle,\n endAngle: axis.endAngle,\n distance: PointService.distancePP(point, axis.getCenter()),\n coord: axis.pointToCoord(point),\n point\n };\n }\n\n protected _layoutCrosshair(\n relativeX: number,\n relativeY: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ) {\n let x = relativeX;\n let y = relativeY;\n\n if (tooltipData && tooltipData.length) {\n if (activeType === 'dimension') {\n const dimensionInfo = (tooltipData as IDimensionInfo[])[0];\n\n if (dimensionInfo.axis) {\n const triggerCoord = (dimensionInfo.axis as IPolarAxis).pointToCoord({ x, y });\n const isRadius = dimensionInfo.axis.getOrient() === 'radius';\n const coord = isRadius\n ? {\n radius: dimensionInfo.position,\n angle: triggerCoord.angle\n }\n : {\n radius: triggerCoord.radius,\n angle: dimensionInfo.position\n };\n const uniformPos = (dimensionInfo.axis as IPolarAxis).coordToPoint(coord);\n x = uniformPos.x;\n y = uniformPos.y;\n }\n } else if (activeType === 'mark') {\n const dimensionData = (tooltipData as IDimensionData[])[0];\n const pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n\n x = pos.x;\n y = pos.y;\n }\n }\n\n // 找到所有的包含这个点的轴\n const { angleAxisMap, radiusAxisMap } = this._findAllAxisContains(x, y);\n if (angleAxisMap.size === 0 && radiusAxisMap.size === 0) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueAngle.clear();\n this._currValueRadius.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n angleAxisMap && this._getAllAxisValues(angleAxisMap, { x, y }, this._currValueAngle);\n radiusAxisMap && this._getAllAxisValues(radiusAxisMap, { x, y }, this._currValueRadius);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n const series = getFirstSeries(this._regions, 'polar') as IPolarSeries;\n if (!series) {\n return;\n }\n\n const { angle, radius } = layoutByValue(\n series,\n this._currValueAngle,\n this._currValueRadius,\n this._angleHair,\n this._radiusHair,\n this.enableRemain,\n this._cacheAngleCrossHairInfo,\n this._cacheRadiusCrossHairInfo\n );\n\n if (this.enableRemain) {\n this._cacheAngleCrossHairInfo = { ...angle, _isCache: true };\n this._cacheRadiusCrossHairInfo = { ...radius, _isCache: true };\n }\n\n if (tag) {\n LayoutType.HORIZONTAL && this._layoutRadius(radius);\n LayoutType.VERTICAL && this._layoutAngle(angle);\n }\n }\n\n private _layoutAngle(crosshairInfo: IPolarCrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const container = this.getContainer();\n const { angle, radius, label, center, visible } = crosshairInfo;\n if (visible) {\n const crosshairType = this._angleHair.type === 'rect' ? 'sector' : 'line';\n const positionAttrs = layoutAngleCrosshair(this._angleHair, crosshairInfo);\n\n if (this._angleCrosshair) {\n this._angleCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n // 创建\n if (crosshairType === 'line') {\n crosshair = new LineCrosshair({\n ...(positionAttrs as { start: IPoint; end: IPoint }),\n lineStyle: this._angleHair.style,\n zIndex: this.gridZIndex,\n pickable: false\n });\n } else if (crosshairType === 'sector') {\n crosshair = new SectorCrosshair({\n ...(positionAttrs as {\n center: IPoint;\n innerRadius: number;\n radius: number;\n startAngle: number;\n endAngle: number;\n }),\n sectorStyle: this._angleHair.style,\n zIndex: this.gridZIndex,\n pickable: false\n });\n }\n this._angleCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = angleLabelOrientAttribute(angle);\n const labelAttrs = {\n ...polarToCartesian(center, radius + label.offset, angle),\n ...this._angleHair.label,\n ...label,\n textStyle: {\n ...this._angleHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._angleLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-angle-label';\n this._angleLabelCrosshair = label;\n });\n } else {\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n }\n }\n\n private _layoutRadius(crosshairInfo: IPolarCrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const { center, startAngle, label, visible } = crosshairInfo;\n const container = this.getContainer();\n if (visible) {\n const crosshairType = this._radiusHair.smooth ? 'circle' : 'polygon';\n const positionAttrs = layoutRadiusCrosshair(this._radiusHair, crosshairInfo);\n const polygonRadius = positionAttrs.radius;\n\n if (this._radiusCrosshair) {\n this._radiusCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n if (crosshairType === 'polygon') {\n crosshair = new PolygonCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex + 1 // 样式优化:线盖在面上\n });\n } else {\n crosshair = new CircleCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex\n });\n }\n this._radiusCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = radiusLabelOrientAttribute(startAngle);\n const labelAttrs = {\n ...polarToCartesian(center, polygonRadius, startAngle),\n ...this._radiusHair.label,\n ...label,\n textStyle: {\n ...this._radiusHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._radiusLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-radius-label';\n this._radiusLabelCrosshair = label;\n });\n } else {\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n }\n }\n }\n\n protected _parseFieldInfo() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField && categoryField.visible) {\n this._angleHair = this._parseField(categoryField, 'categoryField');\n }\n if (valueField && valueField.visible) {\n this._radiusHair = this._parseField(valueField, 'valueField');\n this._radiusHair.smooth = valueField?.line?.smooth;\n }\n }\n\n private _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void) {\n // 文本\n const container = this.getContainer();\n if (label) {\n label.setAttributes(labelAttrs);\n } else {\n label = new Tag(labelAttrs);\n container?.add(label as unknown as INode);\n callback(label);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._radiusCrosshair,\n this._radiusLabelCrosshair,\n this._angleCrosshair,\n this._angleLabelCrosshair\n ] as unknown as IGroup[];\n }\n}\n\nexport const registerPolarCrossHair = () => {\n Factory.registerComponent(PolarCrossHair.type, PolarCrossHair);\n};\n","import { isArray, last } from '@visactor/vutils';\nimport { array, isNil } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\n\nexport interface IDataFilterWithNewDomainOption {\n getNewDomain: () => any[];\n isContinuous: () => boolean;\n field: () => string;\n}\n\nexport const lockStatisticsFilter = (\n statisticsData: any,\n op: IDataFilterWithNewDomainOption & {\n originalFields: () => Record;\n }\n) => {\n const { getNewDomain, isContinuous, field, originalFields } = op;\n\n const datumField = field();\n const newDomain = getNewDomain();\n if (isNil(newDomain) || isNil(datumField)) {\n return statisticsData;\n }\n const fields = originalFields();\n const realField = isArray(datumField) ? datumField[0] : datumField;\n\n if (\n statisticsData[realField] &&\n fields &&\n fields[realField] &&\n fields[realField].lockStatisticsByDomain &&\n !isContinuous()\n ) {\n statisticsData[realField].values = newDomain;\n }\n\n return statisticsData;\n};\n\n/**\n * 保证数据筛选的结果全都在坐标轴的新domain范围中,防止出现point数据因为超出domain范围而绘制在原点的情况\n */\nexport const dataFilterWithNewDomain = (data: Array, op: IDataFilterWithNewDomainOption) => {\n const { getNewDomain, isContinuous, field } = op;\n const datumField = field();\n const newDomain = getNewDomain();\n if (isNil(newDomain) || isNil(datumField)) {\n return data;\n }\n if (newDomain.length === 0) {\n return [];\n }\n\n // 使用map代替indexOf查找,提升性能\n const domainMap = {};\n newDomain.forEach(d => {\n if (!domainMap[d]) {\n domainMap[d] = 1;\n }\n });\n\n let filter = null;\n if (isContinuous()) {\n filter = (d: any) => {\n let flag = false;\n array(datumField).every(field => {\n if (d[field] >= newDomain[0] && d[field] <= last(newDomain)) {\n flag = true;\n }\n return;\n });\n return flag;\n };\n } else {\n filter = (d: any) => {\n let flag = false;\n array(datumField).every(field => {\n // 这里d[f] + ''的原因是:数据是number类型的,但轴声明为band轴,domain会强制将number => string,所以filter的时候要将data中的number => string\n if (domainMap[d[field] + ''] || domainMap[d[field]]) {\n flag = true;\n }\n return;\n });\n return flag;\n };\n }\n\n return data.filter(filter);\n};\n\nexport interface IDataFilterComputeDomainOption {\n input: {\n dataCollection: any[];\n stateFields: string[];\n valueFields: string[];\n method: 'sum'; // todo: 也许可以提供多种数据统计方法 @chensiji\n };\n output: {\n stateField: string;\n valueField: string;\n };\n}\n\nexport const dataFilterComputeDomain = (data: Array, op: IDataFilterComputeDomainOption) => {\n const { stateFields, valueFields, dataCollection } = op.input;\n const { stateField, valueField } = op.output;\n const resultObj = {};\n const resultData: any[] = [];\n\n dataCollection.forEach((dv: DataView, i) => {\n if (isNil(stateFields[i])) {\n return;\n }\n // 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果)\n const stateFieldInfo = dv.getFields()?.[stateFields[i]];\n if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) {\n stateFieldInfo.domain.forEach((d: any) => {\n resultObj[d] = 0;\n });\n }\n dv.latestData.forEach((d: any) => {\n // 针对rangeColumn等xField为数组形式的图表,需要将xField的所有value都记录下来\n array(stateFields[i]).forEach(state => {\n if (!isNil(d[state])) {\n if (isNil(resultObj[d[state]])) {\n resultObj[d[state]] = 0;\n }\n if (!isNil(valueFields[i])) {\n // 传进来的d[yFields[i]]可能是stringnumber\n // 传进来的d[yFields[i]]可能是普通的字符串,这时计数按1计算(其实相当于计算数据条数)\n resultObj[d[state]] += isNaN(parseFloat(d[valueFields[i]])) ? 1 : parseFloat(d[valueFields[i]]);\n }\n }\n });\n });\n });\n Object.keys(resultObj).forEach((d, i) => {\n const res = { [stateField]: d };\n\n if (valueField) {\n res[valueField] = resultObj[d];\n }\n\n resultData.push(res);\n });\n\n return resultData;\n};\n","import type { ICartesianSeries, IPolarSeries, ISeries } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { eachSeries } from '../../util/model';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect, IModelInitOption } from '../../model/interface';\nimport { ComponentTypeEnum, type IComponent, type IComponentOption } from '../interface';\nimport { dataFilterComputeDomain, dataFilterWithNewDomain, lockStatisticsFilter } from './util';\nimport type { AdaptiveSpec, ILayoutRect, ILayoutType, IOrientType, IRect, StringOrNumber } from '../../typings';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport { BandScale, isContinuous, isDiscrete } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBandLikeScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { CartesianAxis, ICartesianBandAxisSpec } from '../axis/cartesian';\nimport { getDirectionByOrient, getOrient } from '../axis/cartesian/util/common';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n mixin,\n clamp,\n isNil,\n merge,\n isEqual,\n isValid,\n array,\n minInArray,\n maxInArray,\n abs,\n last\n} from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IFilterMode } from './interface';\nimport type {\n IDataFilterComponent,\n IDataFilterComponentSpec,\n IRoamDragSpec,\n IRoamScrollSpec,\n IRoamZoomSpec\n} from './interface';\nimport { dataViewParser, DataView } from '@visactor/vdataset';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport type { BaseEventParams } from '../../event/interface';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\n// eslint-disable-next-line no-duplicate-imports\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { AbstractComponent, DataZoom } from '@visactor/vrender-components';\nimport type { IDelayType } from '../../typings/event';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IDataZoomSpec } from './data-zoom/interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { IGroupMark } from '../../mark/interface/mark';\n\nexport abstract class DataFilterBaseComponent\n extends BaseComponent>\n implements IDataFilterComponent\n{\n layoutType: ILayoutType | 'none' = 'none';\n\n protected _component: AbstractComponent;\n\n protected _orient: IOrientType = 'left';\n protected _isHorizontal: boolean;\n\n // 是否为自动模式\n protected _auto?: boolean;\n protected _fixedBandSize?: number;\n protected _cacheRect?: ILayoutRect;\n protected _cacheVisibility?: boolean = undefined;\n protected _dataUpdating: boolean = false;\n\n // 数据\n protected _stateScale: IBaseScale;\n\n protected _relatedAxisComponent!: IComponent;\n protected _originalStateFields: Record;\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId!: string[];\n protected _regionIndex!: number[];\n protected _newDomain: any[];\n\n // 起点数据\n protected _startValue!: number | string;\n // 终点数据\n protected _endValue!: number | string;\n // 开始值,百分比值,0 - 1\n protected _start!: number;\n // 结束值,百分比值,0 - 1\n protected _end!: number;\n // 最小窗口范围\n protected _minSpan!: number;\n // 最大窗口范围\n protected _maxSpan!: number;\n // 窗口范围缓存\n protected _spanCache!: number;\n protected _shouldChange: boolean = true;\n\n protected _domainCache!: any;\n\n protected _field!: string | undefined;\n protected _stateField: string = 'x';\n protected _valueField?: string;\n\n protected _width!: number;\n protected _height!: number;\n\n protected _filterMode!: IFilterMode;\n\n protected _activeRoam: boolean = true;\n protected _zoomAttr: IRoamZoomSpec = {\n enable: true,\n rate: 1,\n focus: true\n };\n protected _dragAttr: IRoamDragSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n protected _scrollAttr: IRoamScrollSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n\n get relatedAxisComponent() {\n return this._relatedAxisComponent;\n }\n\n /**\n * 外部可以通过此方法强制改变datazoom的start和end,达到聚焦定位的效果\n * @param start datazoom起点所在的相对位置\n * @param end datazoom终点所在的相对位置\n * @returns\n */\n setStartAndEnd(\n start: number | string,\n end: number | string,\n rangeMode: ['percent' | 'value', 'percent' | 'value'] = ['percent', 'percent']\n ) {\n const [startMode = 'percent', endMode = 'percent'] = rangeMode;\n\n const startPercent = (startMode === 'percent' ? start : this.dataToStatePoint(start)) as number;\n const endPercent = (endMode === 'percent' ? end : this.dataToStatePoint(end)) as number;\n\n this._handleChange(startPercent, endPercent, true);\n }\n\n enableInteraction() {\n this._activeRoam = true;\n }\n disableInteraction() {\n this._activeRoam = false;\n }\n zoomIn(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 1.2, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n zoomOut(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 0.8, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n protected abstract _createOrUpdateComponent(): void;\n protected abstract _computeWidth(): number;\n protected abstract _computeHeight(): number;\n protected abstract _handleDataCollectionChange(): void;\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n const zoomLock = this._spec?.zoomLock ?? false;\n if (\n zoomLock ||\n // 拖拽两端的handler, 而非拖拽中间handler\n (end - start !== this._spanCache &&\n // 拖拽后超出限制范围\n (end - start < this._minSpan || end - start > this._maxSpan))\n ) {\n this._shouldChange = false;\n } else {\n this._shouldChange = true;\n this._spanCache = end - start;\n }\n }\n\n protected _isReverse() {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (!axis) {\n return false;\n }\n const axisScale = axis.getScale() as IBandLikeScale;\n return axisScale.range()[0] > axisScale.range()[1] && (!axis.getInverse() || this._isHorizontal);\n }\n\n protected _updateRangeFactor(tag?: 'startHandler' | 'endHandler') {\n // 轴的range有时是相反的\n // 比如相同的region范围, 有的场景range为[0, 500], 有的场景range为[500, 0]\n // 而datazoom/scrollbar的range是根据布局强制转化为[0, 500]\n // 所以这里在转换时进行判断并做转置, 有待优化\n // 轴在inverse时,也要做转置处理\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisScale = axis.getScale() as IBandLikeScale;\n const reverse = this._isReverse();\n const newRangeFactor: [number, number] = reverse ? [1 - this._end, 1 - this._start] : [this._start, this._end];\n\n if (reverse) {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n case 'endHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n default:\n axisScale.rangeFactorStart(newRangeFactor[0], true);\n axisScale.rangeFactorEnd(newRangeFactor[1]); // end 保证为准确值\n }\n } else {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n case 'endHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n default:\n axisScale.rangeFactorEnd(newRangeFactor[1], true);\n axisScale.rangeFactorStart(newRangeFactor[0]); // start 保证为准确值\n }\n }\n\n const newFactor = axisScale.rangeFactor();\n if (newFactor) {\n this._start = reverse ? 1 - newFactor[1] : newFactor[0];\n this._end = reverse ? 1 - newFactor[0] : newFactor[1];\n } else {\n this._start = 0;\n this._end = 1;\n }\n }\n\n effect: IEffect = {\n onZoomChange: (tag?: 'startHandler' | 'endHandler') => {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (axis && this._filterMode === 'axis') {\n const axisScale = axis.getScale() as IBandLikeScale;\n const axisSpec = axis.getSpec() as ICartesianBandAxisSpec;\n // 判断是否允许自由更改轴 bandSize\n if (this._auto && this._getAxisBandSize(axisSpec) && (this._spec as IDataZoomSpec).ignoreBandSize) {\n axisScale.bandwidth('auto');\n axisScale.maxBandwidth('auto');\n axisScale.minBandwidth('auto');\n }\n\n this._updateRangeFactor(tag);\n if (this._auto) {\n (this._component as DataZoom)?.setStartAndEnd?.(this._start, this._end);\n }\n\n // 强制更新视图, 不管/component/axis/base-axis.ts computeData中的tickData判断\n axis.effect.scaleUpdate({\n value: 'force'\n });\n } else {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n };\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._orient = getOrient(spec as any);\n this._isHorizontal = getDirectionByOrient(this._orient) === Direction.horizontal;\n }\n\n /**\n * the hook after this component is created\n */\n created() {\n super.created();\n // related axis\n this._setAxisFromSpec();\n // related regions\n this._setRegionsFromSpec();\n this._initEvent();\n // data for background\n this._initData();\n // init the state scale\n this._initStateScale();\n // set state: _start, _end, _startValue, _endValue, _newDomain from spec\n this._setStateFromSpec();\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n protected _setAxisFromSpec() {\n if (isValid(this._spec.axisId)) {\n this._relatedAxisComponent = this._option.getComponentByUserId(this._spec.axisId);\n } else if (isValid(this._spec.axisIndex)) {\n this._relatedAxisComponent = this._option.getComponentByIndex('axes', this._spec.axisIndex);\n }\n\n // 如果用户没有配置关联轴 或 用户配置的关联轴和datazoom方向不一致\n // 则 使用与datazoom的orient相同的第一个axis作为关联轴\n if (isNil(this._spec.field) && !this._relatedAxisComponent) {\n const axes = this._option.getComponentsByKey('axes');\n const sameOrientAxis = axes.find((cm: any) => (cm as any)._orient === this._orient);\n\n if (sameOrientAxis) {\n this._relatedAxisComponent = sameOrientAxis;\n } else {\n const bandAxis = axes.find((cm: any) => !isContinuous((cm as any).getScale().type));\n\n this._relatedAxisComponent = bandAxis;\n }\n }\n if (this._relatedAxisComponent && this._filterMode === 'axis') {\n (this._relatedAxisComponent as CartesianAxis).autoIndentOnce = true;\n }\n }\n\n protected _setRegionsFromSpec() {\n // 从axis中获取关联的regions\n this._regions = this._relatedAxisComponent ? this._relatedAxisComponent.getRegions() : this._option.getAllRegions();\n // 默认使用关联轴的系列绑定关系\n const bindSeriesFilter = this._relatedAxisComponent ? this._relatedAxisComponent.getBindSeriesFilter?.() : null;\n if (isValid(bindSeriesFilter)) {\n isValid(bindSeriesFilter.userId) && (this._seriesUserId = array(bindSeriesFilter.userId));\n isValid(bindSeriesFilter.specIndex) && (this._seriesIndex = array(bindSeriesFilter.specIndex));\n }\n // spec中的系列绑定关系 取交集\n if (isValid(this._spec.seriesId)) {\n const specSeriesId = array(this._spec.seriesId);\n if (this._seriesUserId) {\n this._seriesUserId = this._seriesUserId.filter(s => specSeriesId.includes(s));\n } else {\n this._seriesUserId = specSeriesId;\n }\n }\n if (isValid(this._spec.seriesIndex)) {\n const specSeriesIndex = array(this._spec.seriesIndex);\n if (this._seriesIndex) {\n this._seriesIndex = this._seriesIndex.filter(s => specSeriesIndex.includes(s));\n } else {\n this._seriesIndex = specSeriesIndex;\n }\n }\n if (isValid(this._spec.regionIndex)) {\n const regionsFromSpec = this._option.getRegionsInIndex(array(this._spec.regionIndex));\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = this._regions.filter(r => regionsFromSpec.includes(r));\n return;\n }\n if (isValid(this._spec.regionId)) {\n const ids = array(this._spec.regionId);\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = ids.length ? this._regions.filter(r => ids.includes(r.id)) : [];\n return;\n }\n return;\n }\n\n onDataUpdate(): void {\n const domain = this._computeDomainOfStateScale(isContinuous(this._stateScale.type));\n\n this._stateScale.domain(domain, false);\n this._handleChange(this._start, this._end, true);\n // auto 模式下需要重新布局\n if (this._spec.auto && !isEqual(this._domainCache, domain)) {\n this._domainCache = domain;\n this._dataUpdating = true;\n this.getChart()?.setLayoutTag(true, null, false);\n }\n }\n\n protected _computeDomainOfStateScale(isContinuous?: boolean) {\n if ((this._spec as IDataZoomSpec).customDomain) {\n return (this._spec as IDataZoomSpec).customDomain;\n }\n\n const domain = this._data.getLatestData().map((d: any) => d[this._stateField]);\n\n if (isContinuous) {\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [-Infinity, Infinity];\n }\n\n return domain;\n }\n\n protected _initEvent() {\n this._initCommonEvent();\n }\n\n protected _initData() {\n const dataCollection: any[] = [];\n const stateFields: string[] = [];\n const valueFields: string[] = [];\n\n if (this._relatedAxisComponent) {\n const originalStateFields = {};\n eachSeries(\n this._regions,\n s => {\n // 如果副轴的类型是time或band,则无法进行数据统计\n const xAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getXAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).angleAxisHelper\n : null;\n const yAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getYAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).radiusAxisHelper\n : null;\n if (!xAxisHelper || !yAxisHelper) {\n return;\n }\n const stateAxisHelper =\n xAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? xAxisHelper\n : yAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? yAxisHelper\n : this._isHorizontal\n ? xAxisHelper\n : yAxisHelper;\n const valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper;\n const isValidateValueAxis = isContinuous(valueAxisHelper.getScale(0).type);\n const isValidateStateAxis = isContinuous(stateAxisHelper.getScale(0).type);\n\n dataCollection.push(s.getRawData());\n // 这里获取原始的spec中的xField和yField,而非经过stack处理后的fieldX和fieldY,原因如下:\n // 1. dataFilterComputeDomain处理时拿到的viewData中没有__VCHART_STACK_START等属性,也就是还没处理\n // 2. datazoom计算的是原始的value值,如果要根据stack后的数据来算,则需要__VCHART_STACK_END - __VCHART_STACK_START\n const seriesSpec = s.getSpec();\n\n const xField =\n s.coordinate === 'cartesian'\n ? array(seriesSpec.xField)\n : array(seriesSpec.angleField ?? seriesSpec.categoryField);\n const yField =\n s.coordinate === 'cartesian'\n ? array(seriesSpec.yField)\n : array(seriesSpec.radiusField ?? seriesSpec.valueField);\n\n originalStateFields[s.id] =\n s.type === 'link' ? ['from_xField'] : stateAxisHelper === xAxisHelper ? xField : yField;\n\n if (isValidateStateAxis) {\n stateFields.push(originalStateFields[s.id]);\n } else {\n stateFields.push(originalStateFields[s.id][0]);\n }\n\n if (this._valueField) {\n const valueField = s.type === 'link' ? ['from_yField'] : valueAxisHelper === xAxisHelper ? xField : yField;\n if (isValidateValueAxis) {\n valueFields.push(...valueField);\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n\n this._originalStateFields = originalStateFields;\n } else {\n eachSeries(\n this._regions,\n s => {\n dataCollection.push(s.getRawData());\n\n stateFields.push(this._field);\n if (this._valueField) {\n valueFields.push(this._spec.valueField);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n const { dataSet } = this._option;\n registerDataSetInstanceParser(dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(dataSet, 'dataFilterComputeDomain', dataFilterComputeDomain);\n const data = new DataView(dataSet, { name: `${this.type}_${this.id}_data` });\n data.transform(\n {\n type: 'dataFilterComputeDomain',\n options: {\n input: {\n dataCollection: dataCollection,\n stateFields,\n valueFields\n },\n output: {\n stateField: this._stateField,\n valueField: this._valueField\n }\n }\n },\n false\n );\n\n this._data = new CompilableData(this._option, data);\n data.reRunAllTransform();\n dataSet.multipleDataViewAddListener(dataCollection, 'change', this._handleDataCollectionChange.bind(this));\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // interaction相关\n if (this._spec.roamZoom === true || this._spec.roamZoom) {\n this._zoomAttr = merge({}, this._zoomAttr, this._spec.roamZoom);\n } else {\n this._zoomAttr.enable = false;\n }\n\n if (this._spec.roamDrag === true || this._spec.roamDrag) {\n this._dragAttr = merge({}, this._dragAttr, this._spec.roamDrag);\n } else {\n this._dragAttr.enable = false;\n }\n\n if (this._spec.roamScroll === true || this._spec.roamScroll) {\n this._scrollAttr = merge({}, this._scrollAttr, this._spec.roamScroll);\n } else {\n this._scrollAttr.enable = false;\n }\n\n // style相关\n this._field = this._spec.field;\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n this._visible = this._spec.visible ?? true;\n }\n\n protected _statePointToData(state: number) {\n const scale = this._stateScale;\n const domain = scale.domain();\n\n // continuous scale: 本来可以用scale invert,但scale invert在大数据场景下性能不太好,所以这里自行计算\n if (isContinuous(scale.type)) {\n if (this._isReverse()) {\n return domain[0] + (last(domain) - domain[0]) * (1 - state);\n }\n return domain[0] + (last(domain) - domain[0]) * state;\n }\n\n // discete scale: 根据bandSize计算不准确, bandSize不是最新的, 导致index计算错误, 所以仍然使用invert\n let range = scale.range();\n if (this._isReverse()) {\n range = range.slice().reverse();\n }\n const posInRange: number = range[0] + (last(range) - range[0]) * state;\n // const bandSize = (scale as BandScale).bandwidth();\n // const domainIndex = Math.min(Math.max(0, Math.floor(posInRange / bandSize)), domain.length - 1);\n // return domain[domainIndex];\n return scale.invert(posInRange);\n }\n\n dataToStatePoint(data: number | string) {\n const scale = this._stateScale;\n const pos = scale.scale(data);\n let range = scale.range();\n\n if (!this._isHorizontal && isContinuous(scale.type)) {\n range = range.slice().reverse();\n }\n\n return (pos - range[0]) / (last(range) - range[0]);\n }\n\n protected _modeCheck(statePoint: 'start' | 'end', mode: string): any {\n if (statePoint === 'start') {\n return (mode === 'percent' && isValid(this._spec.start)) || (mode === 'value' && isValid(this._spec.startValue));\n }\n return (mode === 'percent' && isValid(this._spec.end)) || (mode === 'value' && isValid(this._spec.endValue));\n }\n\n protected _setStateFromSpec() {\n this._auto = !!this._spec.auto;\n let start;\n let end;\n if (this._spec.rangeMode) {\n const [startMode, endMode] = this._spec.rangeMode;\n // 只有mode与配置相符时,才会生效\n // 比如rangeMode为['value', 'percent'],那么start为dataValue, end为[0, 1]\n if (this._modeCheck('start', startMode) && this._modeCheck('end', endMode)) {\n start = startMode === 'percent' ? this._spec.start : this.dataToStatePoint(this._spec.startValue);\n end = endMode === 'percent' ? this._spec.end : this.dataToStatePoint(this._spec.endValue);\n }\n } else {\n start = this._spec.start\n ? this._spec.start\n : this._spec.startValue\n ? this.dataToStatePoint(this._spec.startValue)\n : 0;\n end = this._spec.end ? this._spec.end : this._spec.endValue ? this.dataToStatePoint(this._spec.endValue) : 1;\n }\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n this._start = start;\n this._end = end;\n this._minSpan = this._spec.minSpan ?? 0;\n this._maxSpan = this._spec.maxSpan ?? 1;\n if (isContinuous(this._stateScale.type) && this._stateScale.domain()[0] !== last(this._stateScale.domain())) {\n if (this._spec.minValueSpan) {\n this._minSpan = this._spec.minValueSpan / (last(this._stateScale.domain()) - this._stateScale.domain()[0]);\n }\n if (this._spec.maxValueSpan) {\n this._maxSpan = this._spec.maxValueSpan / (last(this._stateScale.domain()) - this._stateScale.domain()[0]);\n }\n }\n this._minSpan = Math.max(0, this._minSpan);\n this._maxSpan = Math.min(this._maxSpan, 1);\n\n // eslint-disable-next-line max-len\n if ((!this._relatedAxisComponent || this._filterMode !== 'axis') && (this._start !== 0 || this._end !== 1)) {\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n }\n }\n\n private _parseFieldOfSeries(s: ISeries) {\n return this._originalStateFields?.[s.id];\n }\n\n protected _initStateScale() {\n const defaultRange = [0, 1];\n\n if (this._relatedAxisComponent) {\n const scale = (this._relatedAxisComponent as CartesianAxis).getScale();\n const isContinuousScale = isContinuous(scale.type);\n const domain = this._computeDomainOfStateScale(isContinuousScale);\n\n this._stateScale = scale.clone();\n if (isContinuousScale) {\n const domainNum = domain.map((n: any) => n * 1);\n this._stateScale\n .domain(domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [0, 1], true)\n .range(defaultRange);\n } else {\n this._stateScale.domain(domain, true).range(defaultRange);\n }\n } else {\n this._stateScale = new BandScale();\n this._stateScale.domain(this._computeDomainOfStateScale(), true).range(defaultRange);\n }\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n // 添加 transform\n this._addTransformToSeries();\n // 增加datazoom 数据统计\n // 只有在轴没有被设置数据时才有用\n // this.addZoomStatistics();\n\n if (this._start !== 0 || this._end !== 1) {\n this.effect.onZoomChange();\n }\n }\n\n protected _addTransformToSeries() {\n if (!this._relatedAxisComponent || this._filterMode !== 'axis') {\n registerDataSetInstanceTransform(this._option.dataSet, 'dataFilterWithNewDomain', dataFilterWithNewDomain);\n registerDataSetInstanceTransform(this._option.dataSet, 'lockStatisticsFilter', lockStatisticsFilter);\n\n eachSeries(\n this._regions,\n s => {\n s.getViewDataStatistics().transform(\n {\n type: 'lockStatisticsFilter',\n options: {\n originalFields: () => {\n return s.getViewDataStatistics().getFields();\n },\n getNewDomain: () => this._newDomain,\n field: () => {\n return this._field ?? this._parseFieldOfSeries(s);\n },\n isContinuous: () => isContinuous(this._stateScale.type)\n },\n level: 1\n },\n false\n );\n\n s.addViewDataFilter({\n type: 'dataFilterWithNewDomain',\n options: {\n getNewDomain: () => this._newDomain,\n field: () => {\n return this._field ?? this._parseFieldOfSeries(s);\n },\n isContinuous: () => isContinuous(this._stateScale.type)\n },\n level: TransformLevel.dataZoomFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: AdaptiveSpec, prevSpec: AdaptiveSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n\n return result;\n }\n\n reInit(spec?: AdaptiveSpec) {\n super.reInit(spec);\n\n this._marks.forEach(g => {\n (g).getMarks().forEach(m => {\n this.initMarkStyleWithSpec(m, this._spec[m.name]);\n });\n });\n }\n\n changeRegions() {\n // do nothing\n }\n protected update(ctx: IComponentOption) {\n // do nothing\n }\n protected resize(ctx: IComponentOption) {\n // do nothing\n }\n\n protected _parseDomainFromState(startValue: number | string, endValue: number | string) {\n if (isContinuous(this._stateScale.type)) {\n return [Math.min(endValue as number, startValue as number), Math.max(endValue as number, startValue as number)];\n }\n const allDomain = this._stateScale.domain();\n const startIndex = allDomain.indexOf(startValue);\n const endIndex = allDomain.indexOf(endValue);\n return allDomain.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex) + 1);\n }\n\n protected _handleStateChange = (startValue: number, endValue: number, tag?: string) => {\n this._startValue = startValue;\n this._endValue = endValue;\n\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n\n this.effect.onZoomChange?.(tag);\n return true;\n };\n\n protected _handleChartZoom = (params: { zoomDelta: number; zoomX?: number; zoomY?: number }) => {\n if (!this._activeRoam) {\n return;\n }\n\n const { zoomDelta, zoomX, zoomY } = params;\n const { x, y } = this._regions[0].getLayoutStartPoint();\n const { width, height } = this._regions[0].getLayoutRect();\n\n const delta = Math.abs(this._start - this._end);\n const zoomRate = (this._spec.roamZoom as IRoamZoomSpec)?.rate ?? 1;\n // zoomDelta > 1表示放大, zoomDelta < 1表示缩小\n if (delta >= 1 && zoomDelta < 1) {\n return;\n }\n if (delta <= 0.01 && zoomDelta > 1) {\n return;\n }\n const focusLoc = this._isHorizontal ? zoomX : zoomY;\n const totalValue = delta * (zoomDelta - 1) * zoomRate;\n let startValue = totalValue / 2;\n let endValue = totalValue / 2;\n if (focusLoc) {\n const startLoc = this._isHorizontal ? x : y;\n const endLoc = this._isHorizontal ? width : height;\n startValue = (Math.abs(startLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n endValue = (Math.abs(endLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n }\n const start = clamp(this._start + startValue, 0, 1);\n const end = clamp(this._end - endValue, 0, 1);\n\n this._handleChange(Math.min(start, end), Math.max(start, end), true);\n };\n\n protected _handleChartScroll = (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return false;\n }\n const { scrollX, scrollY } = params;\n let value = this._isHorizontal ? scrollX : scrollY;\n // 判断这次是否应该要滚动,最少\n const active = this._isHorizontal ? abs(scrollX / scrollY) >= 0.5 : abs(scrollY / scrollX) >= 0.5;\n if (!this._scrollAttr.reverse) {\n value = -value;\n }\n\n if (active) {\n this._handleChartMove(value, this._scrollAttr.rate ?? 1);\n }\n\n // 判断是否滚动到最顶部或最底部\n // 如果滚动到最顶部或最底部,则不应该stopBubble\n const hasChange = this._start !== 0 && this._end !== 1;\n\n return active && hasChange;\n };\n\n protected _handleChartDrag = (delta: [number, number], e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return;\n }\n const [dx, dy] = delta;\n let value = this._isHorizontal ? dx : dy;\n if (this._dragAttr.reverse) {\n value = -value;\n }\n\n this._handleChartMove(value, this._dragAttr.rate ?? 1);\n };\n\n protected _handleChartMove = (value: number, rate: number) => {\n const totalValue = this._isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n if (Math.abs(value) >= 1e-6) {\n if (value > 0 && this._end < 1) {\n const moveDelta = Math.min(1 - this._end, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n } else if (value < 0 && this._start > 0) {\n const moveDelta = Math.max(-this._start, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n }\n }\n return false;\n };\n\n protected _initCommonEvent() {\n const delayType: IDelayType = this._spec?.delayType ?? 'throttle';\n const delayTime = isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0;\n const realTime = this._spec?.realTime ?? true;\n const option = { delayType, delayTime, realTime };\n if (this._zoomAttr.enable) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom, option);\n }\n if (this._scrollAttr.enable) {\n (this as unknown as IZoomable).initScrollEventOfRegions(this._regions, null, this._handleChartScroll, option);\n }\n if (this._dragAttr.enable) {\n (this as unknown as IZoomable).initDragEventOfRegions(this._regions, null, this._handleChartDrag, option);\n }\n }\n\n updateLayoutAttribute(): void {\n // create or update component\n if (this._visible) {\n this._createOrUpdateComponent();\n }\n super.updateLayoutAttribute();\n }\n\n protected _autoVisible(isShown: boolean) {\n if (!this._auto) {\n return;\n }\n if (isShown) {\n this.show();\n } else {\n this.hide();\n }\n const sizeKey = this._isHorizontal ? 'height' : 'width';\n this.layout.setLayoutRect(\n {\n [sizeKey]: isShown ? this[`_${sizeKey}`] : 0\n },\n {\n [sizeKey]: AttributeLevel.Built_In\n }\n );\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n const isShown = this._autoUpdate(layoutRect);\n this._autoVisible(isShown);\n this._dataUpdating = false;\n }\n\n onLayoutEnd(ctx: any): void {\n // 布局结束后, start和end会发生变化, 因此需要再次更新visible\n const isShown = !(this._start === 0 && this._end === 1);\n this._autoVisible(isShown);\n super.onLayoutEnd(ctx);\n }\n\n /**\n * bounds预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n const result: IBoundsLike = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n\n if (this._isHorizontal) {\n result.y2 = result.y1 + this._height;\n result.x2 = result.x1 + rect.width;\n } else {\n result.x2 = result.x1 + this._width;\n result.y2 = result.y1 + rect.height;\n }\n return result;\n }\n\n hide() {\n this._component?.hideAll();\n }\n\n show() {\n this._component?.showAll();\n }\n\n protected _getAxisBandSize(axisSpec?: ICartesianBandAxisSpec) {\n const bandSize = axisSpec?.bandSize;\n const maxBandSize = axisSpec?.maxBandSize;\n const minBandSize = axisSpec?.minBandSize;\n if (bandSize || minBandSize || maxBandSize) {\n return { bandSize, maxBandSize, minBandSize };\n }\n return undefined;\n }\n\n protected _autoUpdate(rect?: ILayoutRect): boolean {\n if (!this._auto) {\n this._cacheVisibility = undefined;\n return true;\n }\n\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisSpec = axis?.getSpec() as ICartesianBandAxisSpec | undefined;\n const axisScale = axis?.getScale() as IBandLikeScale;\n const bandSizeResult = this._getAxisBandSize(axisSpec);\n\n if (\n !this._dataUpdating &&\n isDiscrete(axisScale.type) &&\n rect?.height === this._cacheRect?.height &&\n rect?.width === this._cacheRect?.width &&\n this._fixedBandSize === bandSizeResult?.bandSize\n ) {\n return this._cacheVisibility;\n }\n\n let isShown = true;\n if (this._isHorizontal && rect?.width !== this._cacheRect?.width) {\n axisScale.range(axis.getInverse() ? [rect.width, 0] : [0, rect.width]);\n } else if (rect?.height !== this._cacheRect?.height) {\n axisScale.range(axis.getInverse() ? [0, rect.height] : [rect.height, 0]);\n }\n\n this._cacheRect = {\n width: rect?.width,\n height: rect?.height\n };\n this._fixedBandSize = bandSizeResult?.bandSize;\n\n if (isDiscrete(axisScale.type)) {\n if (bandSizeResult && (this._start || this._end)) {\n if (this.type === ComponentTypeEnum.scrollBar) {\n this._start = 0;\n this._end = 1;\n }\n this._updateRangeFactor();\n }\n const [start, end] = axisScale.rangeFactor() ?? [];\n if (isNil(start) && isNil(end)) {\n isShown = false;\n } else {\n isShown = !(start === 0 && end === 1);\n }\n } else {\n const [start, end] = axisScale.rangeFactor() ?? [this._start, this._end];\n isShown = !(start === 0 && end === 1);\n }\n this.setStartAndEnd(this._start, this._end);\n this._cacheVisibility = isShown;\n return isShown;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nmixin(DataFilterBaseComponent, Zoomable);\n","/*\n 优化自simplify-js: https://github.com/mourner/simplify-js\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nimport type { IPointLike } from '@visactor/vutils';\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: IPointLike[], sqTolerance: number): IPointLike[] {\n let lastX = points[0].x;\n let lastY = points[0].y;\n let deltaX;\n let deltaY;\n const newPoints: IPointLike[] = [points[0]];\n for (let i = 1, len = points.length; i < len; i++) {\n deltaX = points[i].x - lastX;\n deltaY = points[i].y - lastY;\n if (deltaX * deltaX + deltaY * deltaY > sqTolerance) {\n lastX = points[i].x;\n lastY = points[i].y;\n newPoints.push(points[i]);\n }\n }\n if (points[points.length - 1].x !== lastX || points[points.length - 1].y !== lastY) {\n newPoints.push(points[points.length - 1]);\n }\n return newPoints;\n}\nfunction simplifyDPStep(\n points: IPointLike[],\n startIdx: number,\n endIdx: number,\n sqTolerance: number,\n simplified: IPointLike[]\n) {\n let maxSqDist = sqTolerance;\n let nextIdx = startIdx;\n const startX = points[startIdx].x;\n const startY = points[startIdx].y;\n const endX = points[endIdx].x;\n const endY = points[endIdx].y;\n const vecX2 = endX - startX;\n const vecY2 = endY - startY;\n const sqLength = vecX2 * vecX2 + vecY2 * vecY2;\n let area;\n let sqArea;\n let sqDistance;\n // 计算距离startIdx到endIdx最长的distance\n let vecX1;\n let vecY1;\n for (let i = startIdx + 1, len = endIdx - 1; i < len; i++) {\n vecX1 = points[i].x - startX;\n vecY1 = points[i].y - startY;\n // axb = x1y2 - x2y1\n area = vecX1 * vecY2 - vecX2 * vecY1;\n sqArea = area * area;\n sqDistance = sqArea / sqLength;\n if (sqDistance > maxSqDist) {\n maxSqDist = sqDistance;\n nextIdx = i;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (nextIdx - startIdx > 2) {\n simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified);\n }\n simplified.push(points[nextIdx], points[nextIdx + 1]);\n if (endIdx - nextIdx > 2) {\n simplifyDPStep(points, nextIdx + 1, endIdx, sqTolerance, simplified);\n }\n }\n}\n// simplification using Ramer-Douglas-Peucker algorithm\n// https://karthaus.nl/rdp/\nfunction simplifyDouglasPeucker(points: IPointLike[], sqTolerance: number): IPointLike[] {\n const lastIdx = points.length - 1;\n const simplified = [points[0]];\n simplifyDPStep(points, 0, lastIdx, sqTolerance, simplified);\n simplified.push(points[lastIdx]);\n return simplified;\n}\n// both algorithms combined for awesome performance\nexport function flatten_simplify(points: IPointLike[], tolerance: number, highestQuality: boolean): IPointLike[] {\n if (points.length <= 10) {\n return points;\n }\n const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n // 暂时屏蔽 Douglas-Peucker 算法, 因为在极端情况下不会有点被删除, 导致性能问题\n // points = simplifyDouglasPeucker(points, sqTolerance);\n return points;\n}\n","export const DEFAULT_HANDLER_PATH =\n // eslint-disable-next-line max-len\n 'M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z';\nexport const DEFAULT_DATA_ZOOM_ATTRIBUTES = {\n orient: 'bottom',\n showDetail: 'auto',\n brushSelect: true,\n zoomLock: false,\n minSpan: 0,\n maxSpan: 1,\n delayType: 'throttle',\n delayTime: 0,\n realTime: true,\n backgroundStyle: {\n fill: 'white',\n stroke: '#D1DBEE',\n lineWidth: 1,\n cornerRadius: 2\n },\n dragMaskStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2\n },\n backgroundChartStyle: {\n area: {\n visible: true,\n stroke: '#D1DBEE',\n lineWidth: 1,\n fill: '#F6F8FC'\n },\n line: {\n visible: true,\n stroke: '#D1DBEE',\n lineWidth: 1\n }\n },\n selectedBackgroundStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.5\n },\n selectedBackgroundChartStyle: {\n area: {\n visible: true,\n stroke: '#B0C8F9',\n lineWidth: 1,\n fill: '#fbb934'\n },\n line: {\n visible: true,\n stroke: '#fbb934',\n lineWidth: 1\n }\n },\n middleHandlerStyle: {\n visible: true,\n background: {\n size: 8,\n style: {\n fill: 'white',\n stroke: '#B0C8F9',\n cornerRadius: 2\n }\n },\n icon: {\n size: 6,\n fill: 'white',\n stroke: '#B0C8F9',\n symbolType:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n lineWidth: 0.5\n }\n },\n startHandlerStyle: {\n visible: true,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: 'white',\n stroke: '#B0C8F9',\n lineWidth: 0.5\n },\n endHandlerStyle: {\n visible: true,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: 'white',\n stroke: '#B0C8F9',\n lineWidth: 0.5\n },\n startTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: '#6F6F6F'\n }\n },\n endTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: '#6F6F6F'\n }\n }\n};\n\nexport const DEFAULT_HANDLER_ATTR_MAP = {\n horizontal: {\n angle: 0,\n strokeBoundsBuffer: 0,\n boundsPadding: 2,\n pickMode: 'imprecise',\n cursor: 'ew-resize'\n },\n vertical: {\n angle: 90 * (Math.PI / 180),\n cursor: 'ns-resize',\n boundsPadding: 2,\n pickMode: 'imprecise',\n strokeBoundsBuffer: 0\n }\n};\n","import type {\n IAreaGraphicAttribute,\n ICurveType,\n IGroupGraphicAttribute,\n ILineGraphicAttribute,\n IRectGraphicAttribute,\n ISymbolGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { IDelayType, OrientType } from '../interface';\nimport type { TagAttributes } from '../tag/type';\n\nexport enum DataZoomActiveTag {\n startHandler = 'startHandler',\n endHandler = 'endHandler',\n middleHandler = 'middleHandler',\n background = 'background'\n}\n\nexport interface DataZoomAttributes extends IGroupGraphicAttribute {\n /**\n * DataZoom位置\n */\n position: IPointLike;\n /**\n * DataZoom 尺寸\n */\n size: {\n width: number;\n height: number;\n };\n /**\n * DataZoom方向\n * @default 'bottom'\n */\n orient?: OrientType;\n\n /**\n * 起点配置(比例):范围[0, 1]\n * @default 0\n */\n start?: number;\n\n /**\n * 终点配置(比例):范围[0, 1]\n * @default 1\n */\n end?: number;\n\n /**\n * 背景样式\n */\n backgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 起点手柄样式\n */\n startHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 中间手柄样式\n */\n middleHandlerStyle?: {\n /**\n * 是否显示\n * @default false\n */\n visible?: boolean;\n /**\n * 中间手柄的中间symbol样式\n */\n icon?: ISymbolGraphicAttribute;\n /**\n * 中间手柄的背景rect样式\n */\n background?: {\n style?: IRectGraphicAttribute;\n size?: number;\n };\n };\n\n /**\n * 终点手柄样式\n */\n endHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 起点文字样式\n */\n startTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 终点文字样式\n */\n endTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 选中背景样式\n */\n selectedBackgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 拖拽进行中的选中背景样式\n */\n dragMaskStyle?: IRectGraphicAttribute;\n\n /**\n * 背景图表样式\n */\n backgroundChartStyle?: {\n line?: {\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 选中的背景图表样式\n */\n selectedBackgroundChartStyle?: {\n line?: {\n /**\n * @default true\n */\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 是否显示startText和endText\n * @default 'auto' 鼠标hover在选中区域时才显示startText和endText\n */\n showDetail?: 'auto' | boolean;\n\n /**\n * 是否开启框选, 如果不开启则支持selectedBackground拖拽(框选和拖拽两者互斥)\n * @default true\n */\n brushSelect?: boolean;\n\n /**\n * 是否锁定选择区域(或叫做数据窗口)的大小\n */\n zoomLock?: boolean;\n\n /**\n * 用于限制窗口大小的最小值, [0, 1]\n * @default 0\n */\n minSpan?: number;\n\n /**\n * 用于限制窗口大小的最大值, [0, 1]\n * @default 1\n */\n maxSpan?: number;\n\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 是否在操作时动态更新视图\n * @default true\n */\n realTime?: boolean;\n\n /**\n * 绘制背景图表的数据 & 映射函数\n */\n previewData?: any[];\n previewPointsX?: (datum: any) => number;\n previewPointsY?: (datum: any) => number;\n previewPointsX1?: (datum: any) => number;\n previewPointsY1?: (datum: any) => number;\n updateStateCallback?: (start: number, end: number) => any;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 背景图表数据点采样压缩率\n * 参考: https://mourner.github.io/simplify-js/\n */\n tolerance?: number;\n}\n","import type { FederatedPointerEvent, IArea, IGroup, ILine, IRect, ISymbol, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { flatten_simplify, vglobal } from '@visactor/vrender-core';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, array, clamp, debounce, isFunction, isValid, merge, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { DEFAULT_DATA_ZOOM_ATTRIBUTES, DEFAULT_HANDLER_ATTR_MAP } from './config';\nimport { DataZoomActiveTag } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadDataZoomComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nloadDataZoomComponent();\nexport class DataZoom extends AbstractComponent> {\n name = 'dataZoom';\n static defaultAttributes = DEFAULT_DATA_ZOOM_ATTRIBUTES;\n\n private _isHorizontal: boolean;\n\n private _background!: IRect;\n\n private _container!: IGroup;\n\n /** 手柄 */\n private _startHandlerMask!: IRect;\n private _startHandler!: ISymbol;\n private _middleHandlerSymbol!: ISymbol;\n private _middleHandlerRect!: IRect;\n private _endHandlerMask!: IRect;\n private _endHandler!: ISymbol;\n private _selectedBackground!: IRect;\n private _dragMask!: IRect;\n private _startText!: Tag;\n private _endText!: Tag;\n private _startValue!: string | number;\n private _endValue!: string | number;\n private _showText!: boolean;\n\n /** 背景图表 */\n private _previewData: any[] = [];\n private _previewGroup!: IGroup;\n private _previewLine!: ILine;\n private _previewArea!: IArea;\n private _selectedPreviewGroupClip!: IGroup;\n private _selectedPreviewGroup!: IGroup;\n private _selectedPreviewLine!: ILine;\n private _selectedPreviewArea!: IArea;\n\n /** 交互状态 */\n protected _activeTag!: DataZoomActiveTag;\n protected _activeItem!: any;\n protected _activeState = false;\n protected _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n protected _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n max: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n max: 0\n };\n /** 起始状态 */\n readonly state = {\n start: 0,\n end: 1\n };\n protected _spanCache: number;\n\n /** 回调函数 */\n private _previewPointsX!: (datum: any) => number;\n private _previewPointsY!: (datum: any) => number;\n private _previewPointsX1!: (datum: any) => number;\n private _previewPointsY1!: (datum: any) => number;\n private _statePointToData: (state: number) => any = state => state;\n private _layoutAttrFromConfig: any; // 用于缓存\n\n setPropsFromAttrs() {\n const { start, end, orient, previewData, previewPointsX, previewPointsY, previewPointsX1, previewPointsY1 } = this\n .attribute as DataZoomAttributes;\n start && (this.state.start = start);\n end && (this.state.end = end);\n const { width, height } = this.getLayoutAttrFromConfig();\n this._spanCache = this.state.end - this.state.start;\n this._isHorizontal = orient === 'top' || orient === 'bottom';\n this._layoutCache.max = this._isHorizontal ? width : height;\n this._layoutCache.attPos = this._isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = this._isHorizontal ? 'width' : 'height';\n previewData && (this._previewData = previewData);\n isFunction(previewPointsX) && (this._previewPointsX = previewPointsX);\n isFunction(previewPointsY) && (this._previewPointsY = previewPointsY);\n isFunction(previewPointsX1) && (this._previewPointsX1 = previewPointsX1);\n isFunction(previewPointsY1) && (this._previewPointsY1 = previewPointsY1);\n }\n\n constructor(attributes: DataZoomAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DataZoom.defaultAttributes, attributes));\n const { position, showDetail } = attributes;\n // 这些属性在事件交互过程中会改变,所以不能在setAttrs里面动态更改\n this._activeCache.startPos = position;\n this._activeCache.lastPos = position;\n if (showDetail === 'auto') {\n this._showText = false as boolean;\n } else {\n this._showText = showDetail as boolean;\n }\n this.setPropsFromAttrs();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n this.setPropsFromAttrs();\n }\n\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n this.setAttribute('childrenPickable', false);\n return;\n }\n const { showDetail, brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n if (this._startHandlerMask) {\n this._startHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n }\n if (this._endHandlerMask) {\n this._endHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n }\n if (this._middleHandlerSymbol) {\n this._middleHandlerSymbol.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n }\n if (this._middleHandlerRect) {\n this._middleHandlerRect.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n }\n\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n if (this._selectedBackground) {\n this._selectedBackground.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n if (brushSelect && this._background) {\n this._background.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (brushSelect && this._previewGroup) {\n this._previewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (this._selectedPreviewGroup) {\n this._selectedPreviewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n // 拖拽结束\n (this as unknown as IGroup).addEventListener('pointerup', this._onHandlerPointerUp);\n (this as unknown as IGroup).addEventListener('pointerupoutside', this._onHandlerPointerUp);\n // hover\n if (showDetail === 'auto') {\n (this as unknown as IGroup).addEventListener('pointerenter', this._onHandlerPointerEnter as EventListener);\n (this as unknown as IGroup).addEventListener('pointerleave', this._onHandlerPointerLeave as EventListener);\n }\n }\n\n /** dragMask size边界处理 */\n protected dragMaskSize() {\n const { position } = this.attribute as DataZoomAttributes;\n const { attPos, max } = this._layoutCache;\n if (this._activeCache.lastPos[attPos] - position[attPos] > max) {\n return max + position[attPos] - this._activeCache.startPos[attPos];\n } else if (this._activeCache.lastPos[attPos] - position[attPos] < 0) {\n return position[attPos] - this._activeCache.startPos[attPos];\n }\n return this._activeCache.lastPos[attPos] - this._activeCache.startPos[attPos];\n }\n\n /** state 边界处理 */\n protected setStateAttr(start: number, end: number, shouldRender: boolean) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this.state.start = start;\n this.state.end = end;\n shouldRender && this.setAttributes({ start, end });\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n e.stopPropagation();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this.eventPosToStagePos(e);\n this._activeCache.lastPos = this.eventPosToStagePos(e);\n\n // 拖拽开始时监听事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp);\n }\n // 拖拽时\n (this as unknown as IGroup).addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => dragMask的宽 or 高被改变\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => 所有handler的位置被改变\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => 所有handler的位置被改变\n * 4. 在endHandler上拖拽,同上\n */\n private _pointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { start: startAttr, end: endAttr, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n const pos = this.eventPosToStagePos(e);\n const { attPos, max } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / max;\n\n let { start, end } = this.state;\n // this._activeState= false;\n if (this._activeState) {\n // if (this._activeTag === DataZoomActiveTag.background) {\n // } else\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis);\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n if (start + dis > end) {\n start = end;\n end = start + dis;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n start = start + dis;\n }\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n if (end + dis < start) {\n end = start;\n start = end + dis;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n end = end + dis;\n }\n }\n this._activeCache.lastPos = pos;\n brushSelect && this.renderDragMask();\n }\n start = Math.min(Math.max(start, 0), 1);\n end = Math.min(Math.max(end, 0), 1);\n\n // 避免attributes相同时, 重复渲染\n if (startAttr !== start || endAttr !== end) {\n this.setStateAttr(start, end, true);\n\n if (realTime) {\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }\n };\n private _onHandlerPointerMove =\n this.attribute.delayTime === 0\n ? this._pointerMove\n : delayMap[this.attribute.delayType](this._pointerMove, this.attribute.delayTime);\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n const { start, end, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.background) {\n const pos = this.eventPosToStagePos(e);\n this.backgroundDragZoom(this._activeCache.startPos, pos);\n }\n }\n this._activeState = false;\n\n // dragMask不依赖于state更新\n brushSelect && this.renderDragMask();\n\n // 避免attributes相同时, 重复渲染\n if (start !== this.state.start || end !== this.state.end) {\n this.setStateAttr(this.state.start, this.state.end, true);\n\n this._dispatchEvent('change', {\n start: this.state.start,\n end: this.state.end,\n tag: this._activeTag\n });\n }\n\n // 拖拽结束后卸载事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp);\n }\n // 拖拽时\n (this as unknown as IGroup).removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n (this as unknown as IGroup).removeEventListener('pointerup', this._onHandlerPointerUp);\n };\n\n /**\n * 鼠标进入事件\n * @description 鼠标进入选中部分出现start和end文字\n */\n private _onHandlerPointerEnter(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = true;\n this.renderText();\n }\n\n /**\n * 鼠标移出事件\n * @description 鼠标移出选中部分不出现start和end文字\n */\n private _onHandlerPointerLeave(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = false;\n this.renderText();\n }\n\n protected backgroundDragZoom(startPos: IPointLike, endPos: IPointLike) {\n const { attPos, max } = this._layoutCache;\n const { position } = this.attribute as DataZoomAttributes;\n const startPosInComponent = startPos[attPos] - position[attPos];\n const endPosInComponent = endPos[attPos] - position[attPos];\n const start = Math.min(Math.max(Math.min(startPosInComponent, endPosInComponent) / max, 0), 1);\n const end = Math.min(Math.max(Math.max(startPosInComponent, endPosInComponent) / max, 0), 1);\n if (Math.abs(start - end) < 0.01) {\n this.moveZoomWithMiddle(start);\n } else {\n this.setStateAttr(start, end, false);\n }\n }\n\n protected moveZoomWithMiddle(middle: number) {\n const currentMiddle = (this.state.start + this.state.end) / 2;\n let offset = middle - currentMiddle;\n // 拖拽middleHandler时,限制在background范围内\n if (offset === 0) {\n return;\n } else if (offset > 0) {\n if (this.state.end + offset > 1) {\n offset = 1 - this.state.end;\n }\n } else if (offset < 0) {\n if (this.state.start + offset < 0) {\n offset = -this.state.start;\n }\n }\n this.setStateAttr(this.state.start + offset, this.state.end + offset, false);\n }\n\n protected renderDragMask() {\n const { dragMaskStyle } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n // drag部分\n if (this._isHorizontal) {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.x : this._activeCache.startPos.x,\n position.x,\n position.x + width\n ),\n y: position.y,\n width:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n height,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n } else {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: position.x,\n y: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.y : this._activeCache.startPos.y,\n position.y,\n position.y + height\n ),\n width,\n height:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n }\n }\n\n /**\n * 判断文字是否超出datazoom范围\n */\n protected isTextOverflow(componentBoundsLike: IBoundsLike, textBounds: IBoundsLike | null, layout: 'start' | 'end') {\n if (!textBounds) {\n return false;\n }\n if (this._isHorizontal) {\n if (layout === 'start') {\n if (textBounds.x1 < componentBoundsLike.x1) {\n return true;\n }\n } else {\n if (textBounds.x2 > componentBoundsLike.x2) {\n return true;\n }\n }\n } else {\n if (layout === 'start') {\n if (textBounds.y1 < componentBoundsLike.y1) {\n return true;\n }\n } else {\n if (textBounds.y2 > componentBoundsLike.y2) {\n return true;\n }\n }\n }\n return false;\n }\n\n protected setTextAttr(startTextBounds: IBoundsLike, endTextBounds: IBoundsLike) {\n const { startTextStyle, endTextStyle } = this.attribute as DataZoomAttributes;\n const { formatMethod: startTextFormat, ...restStartTextStyle } = startTextStyle;\n const { formatMethod: endTextFormat, ...restEndTextStyle } = endTextStyle;\n const { start, end } = this.state;\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n const { position, width, height } = this.getLayoutAttrFromConfig();\n\n const startTextValue = startTextFormat ? startTextFormat(this._startValue) : this._startValue;\n const endTextValue = endTextFormat ? endTextFormat(this._endValue) : this._endValue;\n const componentBoundsLike = {\n x1: position.x,\n y1: position.y,\n x2: position.x + width,\n y2: position.y + height\n };\n let startTextPosition: IPointLike;\n let endTextPosition: IPointLike;\n let startTextAlignStyle: any;\n let endTextAlignStyle: any;\n if (this._isHorizontal) {\n startTextPosition = {\n x: position.x + start * width,\n y: position.y + height / 2\n };\n endTextPosition = {\n x: position.x + end * width,\n y: position.y + height / 2\n };\n startTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'left' : 'right',\n textBaseline: restStartTextStyle?.textStyle?.textBaseline ?? 'middle'\n };\n endTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'right' : 'left',\n textBaseline: restEndTextStyle?.textStyle?.textBaseline ?? 'middle'\n };\n } else {\n startTextPosition = {\n x: position.x + width / 2,\n y: position.y + start * height\n };\n endTextPosition = {\n x: position.x + width / 2,\n y: position.y + end * height\n };\n startTextAlignStyle = {\n textAlign: restStartTextStyle?.textStyle?.textAlign ?? 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'top' : 'bottom'\n };\n endTextAlignStyle = {\n textAlign: restEndTextStyle?.textStyle?.textAlign ?? 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'bottom' : 'top'\n };\n }\n\n this._startText = this.maybeAddLabel(\n this._container,\n merge({}, restStartTextStyle, {\n text: startTextValue,\n x: startTextPosition.x,\n y: startTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: startTextAlignStyle\n }),\n `data-zoom-start-text-${position}`\n );\n this._endText = this.maybeAddLabel(\n this._container,\n merge({}, restEndTextStyle, {\n text: endTextValue,\n x: endTextPosition.x,\n y: endTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: endTextAlignStyle\n }),\n `data-zoom-end-text-${position}`\n );\n }\n\n protected renderText() {\n let startTextBounds: IBoundsLike | null = null;\n let endTextBounds: IBoundsLike | null = null;\n\n // 第一次绘制\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n\n // 第二次绘制: 将text限制在组件bounds内\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n const { x1, x2, y1, y2 } = startTextBounds;\n const { dx: startTextDx = 0, dy: startTextDy = 0 } = this.attribute.startTextStyle;\n\n // 第三次绘制: 避免startText和endText重叠, 如果重叠了, 对startText做位置调整(考虑到调整的最小化,只单独调整startText而不调整endText)\n if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {\n const direction = this.attribute.orient === 'bottom' || this.attribute.orient === 'right' ? -1 : 1;\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy + direction * Math.abs(endTextBounds.y1 - endTextBounds.y2));\n } else {\n this._startText.setAttribute('dx', startTextDx + direction * Math.abs(endTextBounds.x1 - endTextBounds.x2));\n }\n } else {\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy);\n } else {\n this._startText.setAttribute('dx', startTextDx);\n }\n }\n }\n\n /**\n * 获取背景框中的位置和宽高\n * @description 实际绘制的背景框中的高度或宽度 减去 中间手柄的高度或宽度\n */\n protected getLayoutAttrFromConfig() {\n if (this._layoutAttrFromConfig) {\n return this._layoutAttrFromConfig;\n }\n const {\n position: positionConfig,\n size,\n orient,\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {},\n backgroundStyle = {}\n } = this.attribute as DataZoomAttributes;\n const { width: widthConfig, height: heightConfig } = size;\n const middleHandlerSize = middleHandlerStyle.background?.size ?? 10;\n\n // 如果middleHandler显示的话,要将其宽高计入datazoom宽高\n let width;\n let height;\n let position;\n if (middleHandlerStyle.visible) {\n if (this._isHorizontal) {\n width = widthConfig;\n height = heightConfig - middleHandlerSize;\n position = {\n x: positionConfig.x,\n y: positionConfig.y + middleHandlerSize\n };\n } else {\n width = widthConfig - middleHandlerSize;\n height = heightConfig;\n position = {\n x: positionConfig.x + (orient === 'left' ? middleHandlerSize : 0),\n y: positionConfig.y\n };\n }\n } else {\n width = widthConfig;\n height = heightConfig;\n position = positionConfig;\n }\n\n const startHandlerSize = (startHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n const endHandlerSize = (endHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n // 如果startHandler显示的话,要将其宽高计入dataZoom宽高\n if (startHandlerStyle.visible) {\n if (this._isHorizontal) {\n width -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x + startHandlerSize / 2,\n y: position.y\n };\n } else {\n height -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x,\n y: position.y + startHandlerSize / 2\n };\n }\n }\n\n // stroke 需计入宽高, 否则dataZoom在画布边缘会被裁剪lineWidth / 2\n height += backgroundStyle.lineWidth / 2 ?? 1;\n width += backgroundStyle.lineWidth / 2 ?? 1;\n\n this._layoutAttrFromConfig = {\n position,\n width,\n height\n };\n return this._layoutAttrFromConfig;\n }\n\n protected render() {\n this._layoutAttrFromConfig = null;\n const {\n // start,\n // end,\n orient,\n backgroundStyle,\n backgroundChartStyle = {},\n selectedBackgroundStyle = {},\n selectedBackgroundChartStyle = {},\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {},\n brushSelect,\n zoomLock\n } = this.attribute as DataZoomAttributes;\n const { start, end } = this.state;\n\n const { position, width, height } = this.getLayoutAttrFromConfig();\n const startHandlerMinSize = startHandlerStyle.triggerMinSize ?? 40;\n const endHandlerMinSize = endHandlerStyle.triggerMinSize ?? 40;\n const group = (this as unknown as IGroup).createOrUpdateChild('dataZoom-container', {}, 'group') as IGroup;\n this._container = group;\n this._background = group.createOrUpdateChild(\n 'background',\n {\n x: position.x,\n y: position.y,\n width,\n height,\n cursor: brushSelect ? 'crosshair' : 'auto',\n ...backgroundStyle,\n pickable: zoomLock ? false : backgroundStyle.pickable ?? true\n },\n 'rect'\n ) as IRect;\n\n /** 背景图表 */\n backgroundChartStyle.line?.visible && this.setPreviewAttributes('line', group);\n backgroundChartStyle.area?.visible && this.setPreviewAttributes('area', group);\n\n /** drag mask */\n brushSelect && this.renderDragMask();\n\n /** 选中背景 */\n if (this._isHorizontal) {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x + start * width,\n y: position.y,\n width: (end - start) * width,\n height: height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: zoomLock ? false : (selectedBackgroundChartStyle as any).pickable ?? true\n },\n 'rect'\n ) as IRect;\n } else {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x,\n y: position.y + start * height,\n width,\n height: (end - start) * height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: zoomLock ? false : selectedBackgroundStyle.pickable ?? true\n },\n 'rect'\n ) as IRect;\n }\n\n /** 选中的背景图表 */\n selectedBackgroundChartStyle.line?.visible && this.setSelectedPreviewAttributes('line', group);\n selectedBackgroundChartStyle.area?.visible && this.setSelectedPreviewAttributes('area', group);\n\n /** 左右 和 中间手柄 */\n if (this._isHorizontal) {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: position.x + start * width,\n y: position.y - middleHandlerBackgroundSize,\n width: (end - start) * width,\n height: middleHandlerBackgroundSize,\n ...middleHandlerStyle.background?.style,\n pickable: zoomLock ? false : middleHandlerStyle.background?.style?.pickable ?? true\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x: position.x + ((start + end) / 2) * width,\n y: position.y - middleHandlerBackgroundSize / 2,\n strokeBoundsBuffer: 0,\n angle: 0,\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n ...middleHandlerStyle.icon,\n pickable: zoomLock ? false : middleHandlerStyle.icon.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + start * width,\n y: position.y + height / 2,\n size: height,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...startHandlerStyle,\n pickable: zoomLock ? false : startHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + end * width,\n y: position.y + height / 2,\n size: height,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...endHandlerStyle,\n pickable: zoomLock ? false : endHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + start * width - startHandlerWidth / 2,\n y: position.y + height / 2 - startHandlerHeight / 2,\n width: startHandlerWidth,\n height: startHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + end * width - endHandlerWidth / 2,\n y: position.y + height / 2 - endHandlerHeight / 2,\n width: endHandlerWidth,\n height: endHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n } else {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: orient === 'left' ? position.x - middleHandlerBackgroundSize : position.x + width,\n y: position.y + start * height,\n width: middleHandlerBackgroundSize,\n height: (end - start) * height,\n ...middleHandlerStyle.background?.style,\n pickable: zoomLock ? false : middleHandlerStyle.background?.style?.pickable ?? true\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x:\n orient === 'left'\n ? position.x - middleHandlerBackgroundSize / 2\n : position.x + width + middleHandlerBackgroundSize / 2,\n y: position.y + ((start + end) / 2) * height,\n // size: height,\n angle: 90 * (Math.PI / 180),\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n strokeBoundsBuffer: 0,\n ...middleHandlerStyle.icon,\n pickable: zoomLock ? false : middleHandlerStyle.icon?.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + width / 2,\n y: position.y + start * height,\n size: width,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...startHandlerStyle,\n pickable: zoomLock ? false : startHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + width / 2,\n y: position.y + end * height,\n size: width,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...endHandlerStyle,\n pickable: zoomLock ? false : endHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + width / 2 + startHandlerWidth / 2,\n y: position.y + start * height - startHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + width / 2 + endHandlerWidth / 2,\n y: position.y + end * height - endHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n }\n\n /** 左右文字 */\n if (this._showText) {\n this.renderText();\n }\n }\n\n computeBasePoints() {\n const { orient } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n let basePointStart: any;\n let basePointEnd: any;\n if (this._isHorizontal) {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else if (orient === 'left') {\n basePointStart = [\n {\n x: position.x + width,\n y: position.y\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x,\n y: position.y\n }\n ];\n }\n return {\n basePointStart,\n basePointEnd\n };\n }\n\n protected simplifyPoints(points: IPointLike[]) {\n // 采样压缩率策略: 如果没做任何配置, 那么限制在niceCount内, 如果做了配置, 则按照配置计算\n const niceCount = 10000; // 经验值\n if (points.length > niceCount) {\n const tolerance = this.attribute.tolerance ?? this._previewData.length / niceCount;\n return flatten_simplify(points, tolerance, false);\n }\n return points;\n }\n\n protected getPreviewLinePoints() {\n let previewPoints = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n\n // 采样\n previewPoints = this.simplifyPoints(previewPoints);\n\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n protected getPreviewAreaPoints() {\n let previewPoints: IPointLike[] = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d),\n x1: this._previewPointsX1 && this._previewPointsX1(d),\n y1: this._previewPointsY1 && this._previewPointsY1(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n\n // 采样\n previewPoints = this.simplifyPoints(previewPoints);\n\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n /** 使用callback绘制背景图表 (数据和数据映射从外部传进来) */\n protected setPreviewAttributes(type: 'line' | 'area', group: IGroup) {\n if (!this._previewGroup) {\n this._previewGroup = group.createOrUpdateChild('previewGroup', { pickable: false }, 'group') as IGroup;\n }\n if (type === 'line') {\n this._previewLine = this._previewGroup.createOrUpdateChild('previewLine', {}, 'line') as ILine;\n } else {\n this._previewArea = this._previewGroup.createOrUpdateChild(\n 'previewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { backgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n type === 'line' &&\n this._previewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.line\n });\n type === 'area' &&\n this._previewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.area\n });\n }\n\n /** 使用callback绘制选中的背景图表 (数据和数据映射从外部传进来) */\n protected setSelectedPreviewAttributes(type: 'area' | 'line', group: IGroup) {\n if (!this._selectedPreviewGroupClip) {\n this._selectedPreviewGroupClip = group.createOrUpdateChild(\n 'selectedPreviewGroupClip',\n { pickable: false },\n 'group'\n ) as IGroup;\n this._selectedPreviewGroup = this._selectedPreviewGroupClip.createOrUpdateChild(\n 'selectedPreviewGroup',\n {},\n 'group'\n ) as IGroup;\n }\n\n if (type === 'line') {\n this._selectedPreviewLine = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewLine',\n {},\n 'line'\n ) as ILine;\n } else {\n this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { selectedBackgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n const { start, end } = this.state;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n this._selectedPreviewGroupClip.setAttributes({\n x: this._isHorizontal ? position.x + start * width : position.x,\n y: this._isHorizontal ? position.y : position.y + start * height,\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n clip: true,\n pickable: false\n } as any);\n this._selectedPreviewGroup.setAttributes({\n x: -(this._isHorizontal ? position.x + start * width : position.x),\n y: -(this._isHorizontal ? position.y : position.y + start * height),\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n pickable: false\n } as any);\n type === 'line' &&\n this._selectedPreviewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.line\n });\n type === 'area' &&\n this._selectedPreviewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.area\n });\n }\n\n protected maybeAddLabel(container: IGroup, attributes: TagAttributes, name: string): Tag {\n let labelShape = (this as unknown as IGroup).find(node => node.name === name, true) as unknown as Tag;\n if (labelShape) {\n labelShape.setAttributes(attributes);\n } else {\n labelShape = new Tag(attributes);\n labelShape.name = name;\n }\n\n container.add(labelShape as unknown as INode);\n return labelShape;\n }\n\n /** 外部重置组件的起始状态 */\n setStartAndEnd(start?: number, end?: number) {\n const { start: startAttr, end: endAttr } = this.attribute as DataZoomAttributes;\n if (isValid(start) && isValid(end) && (start !== this.state.start || end !== this.state.end)) {\n this.state.start = start;\n this.state.end = end;\n if (startAttr !== this.state.start || endAttr !== this.state.end) {\n this.setStateAttr(start, end, true);\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }\n }\n\n /** 外部更新背景图表的数据 */\n setPreviewData(data: any[]) {\n this._previewData = data;\n }\n\n /** 外部更新手柄文字 */\n setText(text: string, tag: 'start' | 'end') {\n if (tag === 'start') {\n this._startText.setAttribute('text', text);\n } else {\n this._endText.setAttribute('text', text);\n }\n }\n\n /** 外部获取起始点数据值 */\n getStartValue() {\n return this._startValue;\n }\n\n getEndTextValue() {\n return this._endValue;\n }\n\n getMiddleHandlerSize() {\n const { middleHandlerStyle = {} } = this.attribute as DataZoomAttributes;\n const middleHandlerRectSize = middleHandlerStyle.background?.size ?? 10;\n const middleHandlerSymbolSize = middleHandlerStyle.icon?.size ?? 10;\n return Math.max(middleHandlerRectSize, ...array(middleHandlerSymbolSize));\n }\n\n /** 外部传入数据映射 */\n setPreviewPointsX(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX = callback);\n }\n setPreviewPointsY(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY = callback);\n }\n setPreviewPointsX1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX1 = callback);\n }\n setPreviewPointsY1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY1 = callback);\n }\n setStatePointToData(callback: (state: number) => any) {\n isFunction(callback) && (this._statePointToData = callback);\n }\n}\n","import { registerArea, registerLine, registerRect, registerSymbol } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nexport function loadDataZoomComponent() {\n loadTagComponent();\n registerRect();\n registerSymbol();\n registerArea();\n registerLine();\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { isArray } from '../../../util';\nimport { BaseComponentSpecTransformer } from '../../base';\nimport type { IDataZoomSpec, IDataZoomTheme } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class DataZoomSpecTransformer<\n T extends IDataZoomSpec = IDataZoomSpec,\n K extends IDataZoomTheme = IDataZoomTheme\n> extends BaseComponentSpecTransformer, K> {\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(\n spec: AdaptiveSpec,\n chartSpec: any\n ): { spec: AdaptiveSpec; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n // this._originalSpec + this._theme = this._spec\n const merge = (originalSpec: any) => {\n const result = mergeSpec(\n {\n selectedBackgroundChart: {\n line: {},\n area: {}\n }\n },\n this._theme,\n originalSpec\n );\n\n // 兼容:为了减少主题更改造成的影响,如果用户在 spec 配置了主题默认关闭的 mark,则自动加上 visible: true\n const { selectedBackgroundChart = {} } = originalSpec;\n const { line, area } = selectedBackgroundChart;\n\n if (line && line.visible !== false) {\n result.selectedBackgroundChart.line.style = {\n ...result.selectedBackgroundChart.line.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n if (area && area.visible !== false) {\n result.selectedBackgroundChart.area.style = {\n ...result.selectedBackgroundChart.area.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n\n return result;\n };\n\n const baseSpec = spec;\n if (isArray(baseSpec)) {\n newSpec = baseSpec.map(spec => merge(spec)) as unknown as any;\n } else {\n newSpec = merge(baseSpec);\n }\n }\n\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n}\n","// eslint-disable-next-line no-duplicate-imports\nimport {\n isBoolean,\n isFunction,\n isNil,\n isNumber,\n isValid,\n last,\n maxInArray,\n minInArray,\n uniqArray\n} from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataZoom as DataZoomComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, ISymbolGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { Datum, ILayoutType } from '../../../typings';\nimport type { ILinearScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale, isContinuous, isDiscrete } from '@visactor/vscale';\nimport { LayoutLevel, LayoutZIndex } from '../../../constant/layout';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IDataZoomSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { CartesianAxis } from '../../axis/cartesian';\nimport { DataZoomSpecTransformer } from './data-zoom-transformer';\nimport { getFormatFunction } from '../../util';\n\nexport class DataZoom extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.dataZoom;\n static readonly transformerConstructor = DataZoomSpecTransformer as any;\n type = ComponentTypeEnum.dataZoom;\n name: string = ComponentTypeEnum.dataZoom;\n readonly transformerConstructor = DataZoomSpecTransformer;\n\n static specKey = 'dataZoom';\n specKey = 'dataZoom';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: DataZoomComponent;\n\n protected _valueScale!: ILinearScale;\n\n protected _backgroundSize!: number;\n protected _middleHandlerSize!: number;\n protected _startHandlerSize!: number;\n protected _endHandlerSize!: number;\n\n protected _isReverseCache: boolean = false;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n this._valueField = 'y';\n this._filterMode = spec.filterMode ?? 'filter';\n }\n\n created() {\n super.created();\n this._initValueScale();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = (this._spec as any).roam;\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n // size相关\n this._backgroundSize = this._spec.background?.size ?? 30;\n this._middleHandlerSize = this._computeMiddleHandlerSize();\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n // startHandler和endHandler size如果没有配置,则默认跟随background宽 or 高\n if (isNil(this._spec?.startHandler?.style?.size)) {\n this._spec.startHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n if (isNil(this._spec?.endHandler?.style?.size)) {\n this._spec.endHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n const startHandlerVisble = this._spec.startHandler.style.visible ?? true;\n const endHandlerVisble = this._spec.endHandler.style.visible ?? true;\n this._startHandlerSize = startHandlerVisble ? this._spec.startHandler.style.size : 0;\n this._endHandlerSize = endHandlerVisble ? this._spec.endHandler.style.size : 0;\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n // 初始时reverse判断并不准确,导致start和end颠倒, 保险起见在layoutend之后触发该逻辑\n // FIXME: 牺牲了一定性能,有待优化\n if (this._isReverse() && !this._isReverseCache) {\n this._isReverseCache = this._isReverse();\n this.effect.onZoomChange();\n }\n if (this._cacheVisibility !== false) {\n super.onLayoutEnd(ctx);\n }\n }\n\n protected _initValueScale() {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n const valueScale = new LinearScale();\n valueScale.domain(domain);\n this._valueScale = valueScale;\n }\n }\n\n protected _updateScaleRange() {\n const handlerSize = this._startHandlerSize + this._endHandlerSize;\n if (!this._stateScale || !this._valueScale) {\n return;\n }\n\n // visible为false时, 计算stateScale的兜底range\n let stateScaleRange;\n const defaultSize = this._isHorizontal\n ? this.getLayoutRect().width - handlerSize\n : this.getLayoutRect().height - handlerSize;\n\n const defaultRange = (this._relatedAxisComponent as CartesianAxis)?.getScale().range() ?? [\n this._startHandlerSize / 2,\n defaultSize + this._startHandlerSize / 2\n ];\n\n const compWidth = this._computeWidth();\n const compHeight = this._computeHeight();\n\n if (this._isHorizontal) {\n stateScaleRange = this._visible\n ? [this._startHandlerSize / 2, compWidth - handlerSize + this._startHandlerSize / 2]\n : defaultRange;\n this._stateScale.range(stateScaleRange);\n this._valueScale.range([compHeight - this._middleHandlerSize, 0]);\n } else {\n stateScaleRange = this._visible\n ? [this._startHandlerSize / 2, compHeight - handlerSize + this._startHandlerSize / 2]\n : defaultRange;\n\n this._stateScale.range(stateScaleRange);\n\n if (this.layoutOrient === 'left') {\n this._valueScale.range([compWidth - this._middleHandlerSize, 0]);\n } else {\n this._valueScale.range([0, compWidth - this._middleHandlerSize]);\n }\n }\n if (this._component && this._cacheVisibility !== false) {\n this._component.setAttributes({\n size: {\n width: compWidth,\n height: compHeight\n },\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n }\n });\n }\n }\n\n protected _computeDomainOfValueScale() {\n const domain = this._data.getLatestData().map((d: any) => d[this._valueField]);\n\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : null;\n }\n\n protected _computeMiddleHandlerSize(): number {\n let size = 0;\n if (this._spec?.middleHandler?.visible) {\n const middleHandlerIconSize = this._spec.middleHandler.icon.style.size ?? 8;\n const middleHandlerBackSize = this._spec.middleHandler.background.size ?? 40;\n size += Math.max(middleHandlerIconSize as number, middleHandlerBackSize);\n }\n return size;\n }\n\n protected _computeWidth(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n\n return this._backgroundSize + this._middleHandlerSize;\n }\n\n protected _computeHeight(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n if (this._isHorizontal) {\n return this._backgroundSize + this._middleHandlerSize;\n }\n return this.getLayoutRect().height;\n }\n\n protected _isScaleValid(scale: IBaseScale | ILinearScale) {\n if (!scale || !scale.domain()) {\n return false;\n }\n const domain = scale.domain();\n if (isContinuous(scale.type) && domain[0] === last(domain)) {\n return false;\n }\n if (isDiscrete(scale.type) && uniqArray(domain).length === 1) {\n return false;\n }\n return true;\n }\n\n protected _dataToPositionX = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const xField = this._isHorizontal ? this._stateField : this._valueField;\n return xScale.scale(datum[xField]) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionX2 = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const min = xScale.domain()[0];\n return xScale.scale(min) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionY = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const yField = this._isHorizontal ? this._valueField : this._stateField;\n return yScale.scale(datum[yField]) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n protected _dataToPositionY2 = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const min = yScale.domain()[0];\n return yScale.scale(min) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n private _getAttrs(isNeedPreview: boolean) {\n const spec = this._spec ?? ({} as T);\n return {\n zIndex: this.layoutZIndex,\n start: this._start,\n end: this._end,\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n },\n orient: this._orient,\n size: {\n width: this._computeWidth(),\n height: this._computeHeight()\n },\n showDetail: spec.showDetail,\n brushSelect: spec.brushSelect ?? false,\n zoomLock: spec.zoomLock ?? false,\n minSpan: this._minSpan,\n maxSpan: this._maxSpan,\n delayType: spec.delayType,\n delayTime: isValid(spec.delayType) ? spec.delayTime ?? 30 : 0,\n realTime: spec.realTime ?? true,\n previewData: isNeedPreview && this._data.getLatestData(),\n previewPointsX: isNeedPreview && this._dataToPositionX,\n previewPointsY: isNeedPreview && this._dataToPositionY,\n tolerance: this._spec.tolerance,\n ...(this._getComponentAttrs(isNeedPreview) as any)\n } as DataZoomAttributes;\n }\n\n protected _createOrUpdateComponent() {\n if (this._visible) {\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const isNeedPreview =\n this._isScaleValid(xScale) && this._isScaleValid(yScale) && this._spec.showBackgroundChart !== false;\n const attrs = this._getAttrs(isNeedPreview);\n\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new DataZoomComponent(attrs);\n\n if (this._isHorizontal) {\n isNeedPreview && this._component.setPreviewPointsY1(this._dataToPositionY2);\n } else {\n isNeedPreview && this._component.setPreviewPointsX1(this._dataToPositionX2);\n }\n this._component.setStatePointToData((state: number) => this._statePointToData(state));\n\n this._component.addEventListener('change', (e: any) => {\n const { start, end, tag } = e.detail;\n this._handleChange(start, end, undefined, tag);\n });\n container.add(this._component as unknown as INode);\n\n this._updateScaleRange();\n }\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean, tag?: string) {\n super._handleChange(start, end, updateComponent);\n\n if (this._shouldChange) {\n if (updateComponent && this._component) {\n this._component.setStartAndEnd(start, end);\n }\n\n this._start = start;\n this._end = end;\n const startValue = this._statePointToData(start);\n const endValue = this._statePointToData(end);\n const hasChange = isFunction(this._spec.updateDataAfterChange)\n ? this._spec.updateDataAfterChange(start, end, startValue, endValue)\n : this._handleStateChange(startValue, endValue, tag);\n if (hasChange) {\n this.event.emit(ChartEvent.dataZoomChange, {\n model: this,\n value: {\n filterData: this._filterMode !== 'axis',\n start,\n end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n }\n\n protected _handleDataCollectionChange() {\n const data = this._data.getDataView();\n data.reRunAllTransform();\n this._component?.setPreviewData(data.latestData);\n\n if (this._valueScale) {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n this._valueScale.domain(domain);\n }\n }\n }\n\n protected _getComponentAttrs(isNeedPreview: boolean) {\n const {\n middleHandler = {},\n startText = {},\n endText = {},\n backgroundChart = {},\n selectedBackgroundChart = {}\n } = this._spec as T;\n return {\n backgroundStyle: transformToGraphic(this._spec.background?.style) as unknown as IRectGraphicAttribute,\n startHandlerStyle: transformToGraphic(this._spec.startHandler?.style) as unknown as ISymbolGraphicAttribute,\n middleHandlerStyle: middleHandler.visible\n ? {\n visible: true,\n icon: transformToGraphic(middleHandler.icon?.style) as unknown as ISymbolGraphicAttribute,\n background: {\n size: middleHandler.background?.size,\n style: transformToGraphic(middleHandler.background?.style)\n } as any\n }\n : { visible: false },\n endHandlerStyle: transformToGraphic(this._spec.endHandler?.style) as unknown as ISymbolGraphicAttribute,\n startTextStyle: {\n padding: startText.padding,\n formatMethod: this._getHandlerTextFormatMethod(startText),\n textStyle: transformToGraphic(startText.style)\n } as unknown,\n endTextStyle: {\n padding: endText.padding,\n formatMethod: this._getHandlerTextFormatMethod(endText),\n textStyle: transformToGraphic(endText.style)\n } as unknown,\n selectedBackgroundStyle: transformToGraphic(\n this._spec.selectedBackground.style\n ) as unknown as IRectGraphicAttribute,\n dragMaskStyle: transformToGraphic(this._spec.dragMask?.style) as unknown as IRectGraphicAttribute,\n backgroundChartStyle: isNeedPreview\n ? {\n line: mergeSpec(transformToGraphic(backgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(backgroundChart.area?.style)\n }\n }\n : {\n line: { visible: false },\n area: { visible: false }\n },\n selectedBackgroundChartStyle: isNeedPreview\n ? {\n line: mergeSpec(transformToGraphic(selectedBackgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(selectedBackgroundChart.area?.style)\n }\n }\n : {\n line: { visible: false },\n area: { visible: false }\n },\n disableTriggerEvent: this._option.disableTriggerEvent\n };\n }\n\n protected _getHandlerTextFormatMethod(spec: IDataZoomSpec['startText']) {\n const { formatMethod, formatter } = spec;\n const { formatFunc } = getFormatFunction(formatMethod, formatter);\n return formatFunc ? (text: any) => formatFunc(text, { label: text }, formatter) : undefined;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n\n clear(): void {\n if (this._component) {\n const container = this.getContainer();\n this._component.removeAllChild();\n if (container) {\n container.removeChild(this._component as unknown as INode);\n }\n\n this._component = null;\n }\n super.clear();\n }\n}\n\nexport const registerDataZoom = () => {\n Factory.registerComponent(DataZoom.type, DataZoom);\n};\n","import { isBoolean, isEmpty, isFunction, isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\nimport type { ScrollBarAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { ScrollBar as ScrollBarComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport { LayoutLevel, LayoutZIndex } from '../../../constant/layout';\nimport { ChartEvent } from '../../../constant/event';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../../constant/scroll-bar';\nimport type { IScrollBarSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { ILayoutType } from '../../../typings/layout';\nimport { isClose } from '../../../util';\n\nexport class ScrollBar extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.scrollBar;\n type = ComponentTypeEnum.scrollBar;\n name: string = ComponentTypeEnum.scrollBar;\n\n static specKey = 'scrollBar';\n specKey = 'scrollBar';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: ScrollBarComponent;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._filterMode = spec.filterMode ?? 'axis';\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // roam兼容逻辑\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = false; // 对于之前的逻辑而言,只要配置了roam,zoom始终不打开\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n this.effect.onZoomChange?.();\n super.onLayoutEnd(ctx);\n }\n\n protected _updateScaleRange() {\n if (this._component) {\n this._component.setAttributes({\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height\n });\n }\n }\n\n protected _computeWidth(): number {\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n // default value\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n protected _computeHeight(): number {\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n // default value\n if (!this._isHorizontal) {\n return this.getLayoutRect().height;\n }\n\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n private _getAttrs() {\n return {\n zIndex: this.layoutZIndex,\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n range: [this._start, this._end],\n direction: this._isHorizontal ? 'horizontal' : 'vertical',\n delayType: this._spec?.delayType,\n delayTime: isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0,\n realTime: this._spec?.realTime ?? true,\n ...this._getComponentAttrs()\n } as ScrollBarAttributes;\n }\n\n protected _createOrUpdateComponent() {\n const attrs = this._getAttrs();\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new ScrollBarComponent(attrs);\n // 绑定事件,防抖,防止频繁触发\n this._component.addEventListener('scrollDrag', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n container.add(this._component as unknown as INode);\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n super._handleChange(start, end, updateComponent);\n // filter out scroll event with same scroll value\n const isSameScrollValue = isClose(this._start, start) && isClose(this._end, end);\n if (this._shouldChange && !isSameScrollValue) {\n if (updateComponent && this._component) {\n this._component.setAttribute('range', [start, end]);\n }\n\n this._start = start;\n this._end = end;\n const startValue = this._statePointToData(start);\n const endValue = this._statePointToData(end);\n const hasChange = isFunction(this._spec.updateDataAfterChange)\n ? this._spec.updateDataAfterChange(start, end, startValue, endValue)\n : this._handleStateChange(this._statePointToData(start), this._statePointToData(end));\n if (hasChange) {\n this.event.emit(ChartEvent.scrollBarChange, {\n model: this,\n value: {\n filterData: this._filterMode !== 'axis',\n start: this._start,\n end: this._end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n }\n\n protected _handleDataCollectionChange() {\n if (this._spec.auto) {\n const data = this._data.getDataView();\n data.reRunAllTransform();\n }\n }\n\n protected _initCommonEvent() {\n super._initCommonEvent();\n if (this._component) {\n this._component.on('scrollDrag', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n }\n }\n\n protected _getComponentAttrs() {\n const { rail, slider, innerPadding } = this._spec;\n const attrs: Partial = {};\n\n if (!isNil(innerPadding)) {\n attrs.padding = innerPadding;\n }\n\n if (!isEmpty(rail?.style)) {\n attrs.railStyle = transformToGraphic(rail.style) as unknown as IRectGraphicAttribute;\n }\n if (!isEmpty(slider?.style)) {\n attrs.sliderStyle = transformToGraphic(slider.style) as unknown as IRectGraphicAttribute;\n }\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n return attrs;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nexport const registerScrollBar = () => {\n Factory.registerComponent(ScrollBar.type, ScrollBar);\n};\n","import { array } from '@visactor/vutils';\nimport type { IIndicatorItemSpec } from './interface';\n\nexport interface IIndicatorDatum {\n type: 'title' | 'content';\n index: number;\n datum: any;\n spec: IIndicatorItemSpec;\n}\n\nexport interface IIndicatorMapper {\n title: IIndicatorItemSpec;\n content: IIndicatorItemSpec[];\n datum: () => any;\n}\n\nexport const indicatorMapper = (data: Array, op: IIndicatorMapper) => {\n const { datum, title, content } = op;\n const mappedData: Array = [];\n const datumResult = datum.call(null);\n if (title.visible) {\n mappedData.push({\n type: 'title',\n index: 0,\n datum: datumResult,\n spec: title\n } as IIndicatorDatum);\n }\n array(content).forEach((c, i) => {\n if (c.visible) {\n mappedData.push({\n type: 'content',\n index: i,\n datum: datumResult,\n spec: c\n } as IIndicatorDatum);\n }\n });\n return mappedData;\n};\n","import { IndicatorAttributes } from './type';\nexport const DEFAULT_INDICATOR_THEME: Partial = {\n title: {\n style: {\n text: '',\n fontSize: 20,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n },\n content: {\n style: {\n text: '',\n fontSize: 16,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n }\n};\n","import { registerGroup, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadIndicatorComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 指标卡组件\n */\nimport type { IGroup, IRichText, IText, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { merge, isValid, array, isValidNumber, get } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { createTextGraphicByType, measureTextSize } from '../util';\nimport type { IndicatorAttributes, IndicatorItemSpec } from './type';\nimport { DEFAULT_INDICATOR_THEME } from './config';\nimport { loadIndicatorComponent } from './register';\n\nloadIndicatorComponent();\nexport class Indicator extends AbstractComponent> {\n name = 'indicator';\n\n private _title?: IText | IRichText;\n private _content?: (IText | IRichText)[];\n\n protected _renderText(\n group: IGroup,\n title: IndicatorItemSpec,\n limit: number,\n limitRatio: number,\n themePath: string,\n graphicName: string\n ) {\n if (title.visible !== false) {\n const titleStyle = merge({}, get(DEFAULT_INDICATOR_THEME, themePath), title.style, {\n visible: title.visible\n });\n titleStyle.lineHeight = isValid(titleStyle.lineHeight) ? titleStyle.lineHeight : titleStyle.fontSize;\n\n if (title.formatMethod) {\n titleStyle._originText = titleStyle.text;\n titleStyle.text = title.formatMethod(titleStyle.text, titleStyle);\n }\n const textGraphic = createTextGraphicByType(titleStyle);\n textGraphic.name = graphicName;\n group.appendChild(textGraphic);\n\n // auto-fit\n if (title.autoFit && isValidNumber(limit)) {\n this._setLocalAutoFit(limit, textGraphic as IText, title);\n }\n\n //auto-limit\n if (title.autoLimit && isValidNumber(limitRatio)) {\n textGraphic.setAttribute('maxLineWidth', limit);\n }\n\n return textGraphic;\n }\n\n return undefined;\n }\n\n protected render() {\n this.removeAllChild(true);\n\n if (this.attribute.visible !== true) {\n return;\n }\n const { title = {}, content, size, limitRatio = Infinity } = this.attribute as IndicatorAttributes;\n\n const limit = Math.min(size.width, size.height) * limitRatio;\n\n const group = this.createOrUpdateChild(\n 'indicator-container',\n { x: 0, y: 0, zIndex: 1, pickable: this.attribute.pickable ?? true },\n 'group'\n ) as IGroup;\n if (isValid(title)) {\n this._title = this._renderText(group, title, limit, limitRatio, 'title.style', 'indicator-title');\n }\n\n if (isValid(content)) {\n const contents: IndicatorItemSpec[] = array(content);\n const contentComponents: (IText | IRichText)[] = [];\n contents.forEach((contentItem, i) => {\n if (contentItem.visible !== false) {\n contentComponents.push(\n this._renderText(group, contentItem, limit, limitRatio, 'content.style', 'indicator-content-' + i)\n );\n } else {\n }\n });\n this._content = contentComponents;\n }\n\n this._setGlobalAutoFit(limit);\n this._setYPosition();\n\n const totalHeight = group?.AABBBounds.height() ?? 0;\n group.setAttribute('y', size.height / 2 - totalHeight / 2);\n group.setAttribute('x', size.width / 2);\n }\n\n private _setLocalAutoFit(limit: number, indicatorItem: IText, indicatorItemSpec: IndicatorItemSpec) {\n // only apply local auto fit for default auto fit text\n if ((indicatorItemSpec.fitStrategy ?? 'default') !== 'default') {\n return;\n }\n const originWidth = measureTextSize(\n (indicatorItemSpec.style?.text ?? '') as string | number | number[] | string[],\n (indicatorItemSpec.style ?? {}) as Partial,\n this.stage?.getTheme()?.text\n ).width;\n if (originWidth > 0) {\n const ratio = (limit * (indicatorItemSpec.fitPercent ?? 0.5)) / originWidth;\n const fontSize = Math.floor((indicatorItemSpec.style?.fontSize ?? 20) * ratio);\n indicatorItem.setAttribute('fontSize', fontSize);\n indicatorItem.setAttribute(\n 'lineHeight',\n isValid(indicatorItemSpec.style.lineHeight) ? indicatorItemSpec.style.lineHeight : fontSize\n );\n }\n }\n\n private _setGlobalAutoFit(limit: number) {\n // compute the inscribed rect width & height for all texts\n // the font size will be determined by the longest text\n // 1. hx^2 + hy^2 = r^2\n // 2. hy = ra * hx + h\n // -> (ra^2 + 1) * x^2 + (2 * h * ra) * x + (h^2 - r^2) = 0\n\n const r = limit / 2;\n\n // unify the initial font size for auto fit texts\n const singleHeight = 12;\n const autoFitTexts: { text: IText; spec: IndicatorItemSpec }[] = [];\n // other text height\n let otherHeight = 0;\n // non auto fit title height\n const titleSpec = this.attribute.title ?? {};\n if (titleSpec.autoFit && titleSpec.fitStrategy === 'inscribed') {\n this._title.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: this._title as IText, spec: this.attribute.title ?? {} });\n } else {\n otherHeight += this._title?.AABBBounds?.height?.() ?? 0;\n }\n const titleSpace = titleSpec.space ?? 0;\n otherHeight += titleSpace;\n // non auto fit content height\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n if (contentSpec.autoFit && contentSpec.fitStrategy === 'inscribed') {\n contentText.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: contentText as IText, spec: contentSpec });\n } else {\n otherHeight += contentText?.AABBBounds?.height?.() ?? 0;\n }\n const contentSpace = contentSpec.space ?? 0;\n otherHeight += contentSpace;\n });\n if (autoFitTexts.length <= 0) {\n return;\n }\n\n // max width for all auto fit texts\n const maxWidth = autoFitTexts.reduce((width, textItem) => {\n return Math.max(width, textItem.text.AABBBounds.width());\n }, 0);\n\n // y = x * (singleHeight / maxWidth * textCount) + otherHeight\n // hy = hx * (singleHeight / maxWidth * textCount) + otherHeight / 2\n const ra = (singleHeight / maxWidth) * autoFitTexts.length;\n const h = otherHeight / 2;\n const a = ra ** 2 + 1;\n const b = 2 * h * ra;\n const c = h ** 2 - r ** 2;\n const hx = (-b + Math.sqrt(b ** 2 - 4 * a * c)) / (2 * a);\n const hy = ra * hx + h;\n const y = 2 * hy;\n const lineHeight = (y - otherHeight) / autoFitTexts.length;\n if (isValidNumber(y)) {\n autoFitTexts.forEach(textItem => {\n const specLineHeight = textItem.spec.style?.lineHeight;\n textItem.text.setAttribute('fontSize', lineHeight);\n textItem.text.setAttribute('lineHeight', isValid(specLineHeight) ? specLineHeight : lineHeight);\n });\n }\n }\n\n private _setYPosition() {\n let lastContentHeight = 0;\n\n const titleHeight = this._title?.AABBBounds?.height?.() ?? 0;\n const titleSpace = this.attribute.title?.space ?? 0;\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n contentText.setAttribute('y', titleHeight + titleSpace + lastContentHeight);\n const contentSpace = contentSpec.space ?? 0;\n lastContentHeight += contentText.AABBBounds.height() + contentSpace;\n });\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IRegion } from '../../region/interface';\nimport type { IIndicator, IIndicatorItemSpec, IIndicatorSpec } from './interface';\nimport type { Maybe } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformIndicatorStyle } from '../../util/style';\nimport { getActualNumValue } from '../../util/space';\nimport { isEqual, isValid, isFunction, array, pickWithout } from '@visactor/vutils';\nimport { indicatorMapper } from './util';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { Indicator as IndicatorComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IndicatorAttributes } from '@visactor/vrender-components';\nimport type { IGraphic, INode, IGroup } from '@visactor/vrender-core';\nimport type { FunctionType } from '../../typings/visual';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\nimport { getSpecInfo } from '../util';\n\nexport class Indicator extends BaseComponent implements IIndicator {\n static type = ComponentTypeEnum.indicator;\n type = ComponentTypeEnum.indicator;\n name: string = ComponentTypeEnum.indicator;\n\n static specKey = 'indicator';\n specKey = 'indicator';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Indicator;\n layoutLevel: number = LayoutLevel.Indicator;\n\n private _gap: number = 0;\n\n private _activeDatum: any = null;\n private _displayData!: CompilableData;\n\n private _title: IIndicatorItemSpec;\n private _content: IIndicatorItemSpec[];\n\n private _indicatorComponent: IndicatorComponents;\n private _cacheAttrs: IndicatorAttributes;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IIndicatorSpec) => {\n return s && s.visible !== false;\n });\n }\n\n created() {\n super.created();\n // data\n this.initData();\n // event\n this.initEvent();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._gap = this._spec.gap || 0;\n this._title = this._spec.title;\n this._content = array(this._spec.content);\n this._regions = this._option.getRegionsInUserIdOrIndex(array(this._spec.regionId), array(this._spec.regionIndex));\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n // event\n protected initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n const view = this.getCompiler()?.getVGrammarView();\n\n if (!view) {\n return;\n }\n\n if (this._spec.trigger === 'hover') {\n view.addEventListener('element-highlight:start', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-highlight:reset', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(null);\n }\n });\n } else {\n view.addEventListener('element-select:start', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-select:reset', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(null);\n }\n });\n }\n }\n\n updateDatum(datum: any) {\n this._activeDatum = datum;\n this._displayData.updateData();\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n }\n\n // data\n private initData() {\n registerDataSetInstanceTransform(this._option.dataSet, 'indicatorFilter', indicatorMapper);\n const displayData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n displayData.transform({\n type: 'indicatorFilter',\n options: {\n title: this._title,\n content: this._content,\n datum: () => this._activeDatum\n }\n });\n\n displayData.target.addListener('change', this.updateDatum.bind(this));\n\n this._displayData = new CompilableData(this._option, displayData);\n }\n\n updateLayoutAttribute(): void {\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n\n super.updateLayoutAttribute();\n }\n\n private _getIndicatorAttrs() {\n if (this._spec.visible === false || (this._spec.fixed === false && this._activeDatum === null)) {\n return {\n visible: false\n } as IndicatorAttributes;\n }\n\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n const { x, y } = region.getLayoutStartPoint();\n const { content, offsetX, offsetY, limitRatio, title, ...restSpec } = this._spec;\n\n const contentComponentSpec: IIndicatorItemSpec[] = [];\n array(content).forEach((eachItem: IIndicatorItemSpec) => {\n const contentSpec = mergeSpec({}, this._theme.content, eachItem);\n contentComponentSpec.push({\n visible: contentSpec.visible !== false && (contentSpec.field ? this._activeDatum !== null : true),\n space: contentSpec.space || this._gap,\n autoLimit: contentSpec.autoLimit,\n autoFit: contentSpec.autoFit,\n fitPercent: contentSpec.fitPercent,\n fitStrategy: contentSpec.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(contentSpec.style, ['text']), this._activeDatum),\n text: this._createText(contentSpec.field, contentSpec.style.text)\n }\n });\n });\n\n return {\n visible: true,\n size: {\n width: width,\n height: height\n },\n zIndex: this.layoutZIndex,\n x: x,\n y: y,\n dx: offsetX ? getActualNumValue(offsetX, this._computeLayoutRadius()) : 0,\n dy: offsetY ? getActualNumValue(offsetY, this._computeLayoutRadius()) : 0,\n limitRatio: limitRatio || Infinity,\n title: {\n visible: title.visible !== false && (!isValid(title.field) || this._activeDatum !== null),\n space: title.space || this._gap,\n autoLimit: title.autoLimit,\n autoFit: title.autoFit,\n fitPercent: title.fitPercent,\n fitStrategy: title.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(title.style, ['text']), this._activeDatum),\n text: this._createText(title.field, title.style.text as any) // FIXME: type\n }\n },\n content: contentComponentSpec,\n ...(restSpec as unknown as IndicatorAttributes)\n } as IndicatorAttributes;\n }\n\n private _createOrUpdateIndicatorComponent(attrs: IndicatorAttributes) {\n if (attrs.visible === false) {\n // 按照vrender-component 的设置,只切换visible: false,并不会更新组件,所以强制删掉节点\n if (this._indicatorComponent && this._indicatorComponent.parent) {\n this._indicatorComponent.parent.removeChild(this._indicatorComponent);\n }\n this._indicatorComponent = null;\n return;\n }\n\n if (this._indicatorComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._indicatorComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n //FIXME:类型“IndicatorAttributes”的参数不能赋给类型“Required”的参数\n const indicator = new IndicatorComponents(attrs as any);\n indicator.name = 'indicator';\n container.add(indicator as unknown as INode);\n this._indicatorComponent = indicator;\n this._indicatorComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._indicatorComponent as unknown as IGraphic, event, type)\n );\n }\n this._cacheAttrs = attrs;\n }\n\n private _createText(\n field: string | undefined,\n text:\n | string\n | number\n | string[]\n | number[]\n | IRichTextCharacter[]\n | FunctionType\n ) {\n if (field) {\n return this._activeDatum ? this._activeDatum[field] : '';\n }\n if (isFunction(text)) {\n return text(this._activeDatum, undefined) ?? '';\n }\n return text ?? '';\n }\n\n private _computeLayoutRadius() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n private isRelativeModel(regionId: number) {\n return this._regions.some(region => region.id === regionId);\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._indicatorComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n this._cacheAttrs = null;\n super.clear();\n }\n\n getIndicatorComponent(): IndicatorComponents {\n return this._indicatorComponent;\n }\n}\n\nexport const registerIndicator = () => {\n Factory.registerComponent(Indicator.type, Indicator);\n};\n","import type { IAggrType } from '../component/marker/interface';\nimport type { IRegressType } from '../component/marker/mark-area/interface';\n\nexport const AGGR_TYPE: IAggrType[] = ['sum', 'average', 'min', 'max', 'variance', 'standardDeviation', 'median'];\n\nexport const REGRESS_TYPE: IRegressType[] = ['regression'];\n","import type { ICartesianSeries, IGeoSeries, IPolarSeries, ISeries } from '../../series/interface';\nimport type { DataView } from '@visactor/vdataset';\nimport {\n isValid,\n isNumber,\n array,\n minInArray,\n maxInArray,\n isArray,\n normalizePadding,\n isFunction,\n type IPointLike\n} from '@visactor/vutils';\nimport type { Datum, IPoint, StringOrNumber } from '../../typings';\nimport { isPercent, transformToGraphic } from '../../util';\nimport type {\n IDataPos,\n IMarkerAttributeContext,\n IMarkerLabelSpec,\n IMarkerState,\n IMarkerSupportSeries,\n IPolarPoint,\n MarkerPositionPoint,\n MarkerStateValue\n} from './interface';\nimport { AGGR_TYPE } from '../../constant/marker';\nimport type { IRegion } from '../../region/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { OffsetPoint } from './interface';\n\nfunction isNeedExtendDomain(domain: number[], datum: number, autoRange: boolean) {\n if (!autoRange) {\n return false;\n }\n const domainNum = domain.map((n: any) => n * 1);\n const min = minInArray(domainNum);\n const max = maxInArray(domainNum);\n if (datum < min || datum > max) {\n return true;\n }\n return false;\n}\n\nfunction getXValue(\n datum: Datum,\n xDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries },\n regionWidth: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.x) &&\n isNeedExtendDomain(xDomain, datum.x, autoRange) &&\n (relativeSeries as ICartesianSeries)?.getXAxisHelper().setExtendDomain?.('marker_xAxis_extend', datum.x);\n let x: number;\n if (isPercent(datum.x)) {\n x = convertPercentToValue(datum.x, regionWidth) + regionStartLayoutStartPoint.x;\n } else {\n x = (relativeSeries as ICartesianSeries).getXAxisHelper().dataToPosition([datum.x]) + regionStartLayoutStartPoint.x;\n }\n\n return x;\n}\n\nfunction getYValue(\n datum: Datum,\n yDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries },\n regionHeight: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.y) &&\n isNeedExtendDomain(yDomain, datum.y, autoRange) &&\n (relativeSeries as ICartesianSeries).getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', datum.y);\n\n let y: number;\n if (isPercent(datum.y)) {\n y = convertPercentToValue(datum.y, regionHeight) + regionStartLayoutStartPoint.y;\n } else {\n y = (relativeSeries as ICartesianSeries).getYAxisHelper().dataToPosition([datum.y]) + regionStartLayoutStartPoint.y;\n }\n\n return y;\n}\n\nfunction getAngleValue(\n datum: Datum,\n angleDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries }\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.angle) &&\n isNeedExtendDomain(angleDomain, datum.angle, autoRange) &&\n (relativeSeries as IPolarSeries).angleAxisHelper?.setExtendDomain?.('marker_angleAxis_extend', datum.angle);\n\n return (relativeSeries as IPolarSeries).angleAxisHelper.dataToPosition([datum.angle]);\n}\n\nfunction getRadiusValue(\n datum: Datum,\n radiusDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries }\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.radius) &&\n isNeedExtendDomain(radiusDomain, datum.radius, autoRange) &&\n (relativeSeries as IPolarSeries).radiusAxisHelper?.setExtendDomain?.('marker_radiusAxis_extend', datum.radius);\n\n return (relativeSeries as IPolarSeries).radiusAxisHelper.dataToPosition([datum.radius]);\n}\n\nfunction convertPercentToValue(percent: string, relativeLength: number) {\n return (Number(percent.substring(0, percent.length - 1)) * relativeLength) / 100;\n}\n\nexport function isAggrSpec(spec: IDataPos) {\n return AGGR_TYPE.includes(spec as any);\n}\n\nexport function xyLayout(\n data: DataView,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean\n) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n\n const refSeries = {\n relativeSeries,\n startRelativeSeries,\n endRelativeSeries\n };\n\n const lines: IPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const xDomain = (relativeSeries as ICartesianSeries).getXAxisHelper().getScale(0).domain();\n const yDomain = (relativeSeries as ICartesianSeries).getYAxisHelper().getScale(0).domain();\n dataPoints.forEach((datum: IPoint) => {\n const isValidX = isValid(datum.x);\n const isValidY = isValid(datum.y);\n if (isValidX && isValidY) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n lines.push([{ x, y }]);\n } else if (isValidX) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n );\n const y1 = Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y);\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x,\n y: y1\n }\n ]);\n } else if (isValidY) {\n const x = Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n const x1 = Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n );\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x1,\n y: y\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function polarLayout(\n data: DataView,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean\n) {\n const refSeries = {\n relativeSeries,\n startRelativeSeries,\n endRelativeSeries\n };\n const lines: IPolarPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n\n const angleDomain = (relativeSeries as IPolarSeries).angleAxisHelper.getScale(0).domain();\n const radiusDomain = (relativeSeries as IPolarSeries).radiusAxisHelper.getScale(0).domain();\n const regionRadius = Math.min(\n relativeSeries.getRegion().getLayoutRect().width / 2,\n relativeSeries.getRegion().getLayoutRect().height / 2\n );\n dataPoints.forEach((datum: IPolarPoint) => {\n const isValidAngle = isValid(datum.angle);\n const isValidRadius = isValid(datum.radius);\n if (isValidAngle && isValidRadius) {\n const angle = getAngleValue(datum, angleDomain, autoRange, refSeries);\n const radius = getRadiusValue(datum, radiusDomain, autoRange, refSeries);\n lines.push([{ angle, radius }]);\n } else if (isValidAngle) {\n const angle = getAngleValue(datum, angleDomain, autoRange, refSeries);\n lines.push([\n {\n angle,\n radius: -regionRadius\n },\n {\n angle,\n radius: regionRadius\n }\n ]);\n } else if (isValidRadius) {\n const radius = getRadiusValue(datum, radiusDomain, autoRange, refSeries);\n lines.push([\n {\n radius,\n angle: 0\n },\n {\n radius,\n angle: Math.PI * 2\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function geoLayout(data: DataView, relativeSeries: IMarkerSupportSeries) {\n const lines: IPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n dataPoints.forEach((datum: any) => {\n const isValidName = isValid(datum.areaName);\n if (isValidName) {\n lines.push([\n {\n x:\n (relativeSeries as IGeoSeries).nameValueToPosition(datum.areaName).x +\n relativeSeries.getRegion().getLayoutStartPoint().x,\n y:\n (relativeSeries as IGeoSeries).nameValueToPosition(datum.areaName).y +\n relativeSeries.getRegion().getLayoutStartPoint().y\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function cartesianCoordinateLayout(\n data: DataView,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean,\n coordinatesOffset: OffsetPoint[] | OffsetPoint\n) {\n const points: IPoint[] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const isArrayCoordinatesOffset = isArray(coordinatesOffset);\n dataPoints.forEach(\n (\n datum: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n },\n index: number\n ) => {\n const refRelativeSeries = (\n datum?.getRefRelativeSeries ? datum.getRefRelativeSeries() : relativeSeries\n ) as ICartesianSeries;\n const regionStart = refRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n\n const { width: regionWidth, height: regionHeight } = regionStart.getLayoutRect();\n\n let offsetX = 0;\n let offsetY = 0;\n if (coordinatesOffset) {\n const currentCoordinatesOffset = isArrayCoordinatesOffset ? coordinatesOffset[index] : coordinatesOffset;\n const x = currentCoordinatesOffset.x;\n const y = currentCoordinatesOffset.y;\n if (x) {\n offsetX = isPercent(x) ? (Number(x.substring(0, x.length - 1)) * regionWidth) / 100 : (x as number);\n }\n if (y) {\n offsetY = isPercent(y) ? (Number(y.substring(0, y.length - 1)) * regionHeight) / 100 : (y as number);\n }\n }\n\n const xDomain = refRelativeSeries.getXAxisHelper().getScale(0).domain();\n const yDomain = refRelativeSeries.getYAxisHelper().getScale(0).domain();\n const xValue = array(datum.x);\n const yValue = array(datum.y);\n\n xValue.length === 1 &&\n isNumber(xValue[0]) &&\n isNeedExtendDomain(xDomain, xValue[0], autoRange) &&\n refRelativeSeries.getXAxisHelper()?.setExtendDomain?.('marker_xAxis_extend', xValue[0] as number);\n\n yValue.length === 1 &&\n isNumber(yValue[0]) &&\n isNeedExtendDomain(yDomain, yValue[0], autoRange) &&\n refRelativeSeries.getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', yValue[0] as number);\n points.push({\n x: refRelativeSeries.getXAxisHelper().dataToPosition(xValue) + regionStartLayoutStartPoint.x + offsetX,\n y: refRelativeSeries.getYAxisHelper().dataToPosition(yValue) + regionStartLayoutStartPoint.y + offsetY\n });\n }\n );\n return points;\n}\n\nexport function polarCoordinateLayout(data: DataView, relativeSeries: IMarkerSupportSeries, autoRange: boolean) {\n const points: IPolarPoint[] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n dataPoints.forEach(\n (datum: {\n angle: StringOrNumber[] | StringOrNumber | null;\n radius: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n }) => {\n const refRelativeSeries = (\n datum?.getRefRelativeSeries ? datum.getRefRelativeSeries() : relativeSeries\n ) as IPolarSeries;\n\n const angleDomain = refRelativeSeries.angleAxisHelper.getScale(0).domain();\n const radiusDomain = refRelativeSeries.radiusAxisHelper.getScale(0).domain();\n const angleValue = array(datum.angle);\n const radiusValue = array(datum.radius);\n\n angleValue.length === 1 &&\n isNumber(angleValue[0]) &&\n isNeedExtendDomain(angleDomain, angleValue[0], autoRange) &&\n refRelativeSeries.angleAxisHelper?.setExtendDomain?.('marker_xAxis_extend', angleValue[0] as number);\n\n radiusValue.length === 1 &&\n isNumber(radiusValue[0]) &&\n isNeedExtendDomain(radiusDomain, radiusValue[0], autoRange) &&\n refRelativeSeries.radiusAxisHelper?.setExtendDomain?.('marker_yAxis_extend', radiusValue[0] as number);\n points.push({\n angle: refRelativeSeries.angleAxisHelper.dataToPosition(angleValue),\n radius: refRelativeSeries.radiusAxisHelper.dataToPosition(radiusValue)\n });\n }\n );\n return points;\n}\n\nfunction convertPosition(position: MarkerPositionPoint, relativeWidth: number, relativeHeight: number): IPoint {\n let { x, y } = position;\n if (isPercent(x)) {\n x = convertPercentToValue(x, relativeWidth);\n }\n if (isPercent(y)) {\n y = convertPercentToValue(y, relativeHeight);\n }\n\n return {\n x: x as number,\n y: y as number\n };\n}\n\nexport function positionLayout(\n positions:\n | MarkerPositionPoint\n | MarkerPositionPoint[]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint)\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint[]),\n series: IMarkerSupportSeries,\n regionRelative: boolean\n): IPoint[] {\n let transformPositions;\n if (isFunction(positions)) {\n transformPositions = array(positions(series.getData().getLatestData(), series));\n } else {\n transformPositions = array(positions);\n }\n\n if (regionRelative) {\n const region = series.getRegion();\n const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint();\n const { width: regionWidth, height: regionHeight } = region.getLayoutRect();\n return transformPositions.map(position => {\n let { x, y } = convertPosition(position, regionWidth, regionHeight);\n\n x = (x as number) + regionStartX;\n y = (y as number) + regionStartY;\n\n return {\n x,\n y\n };\n });\n }\n\n const { width: canvasWidth, height: canvasHeight } = series.getOption().getChart().getViewRect();\n return transformPositions.map(position => {\n return convertPosition(position, canvasWidth, canvasHeight);\n });\n}\n\nexport function computeClipRange(regions: IRegion[]) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n regions.forEach((region: IRegion) => {\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n if (regionPos.x < minX) {\n minX = regionPos.x;\n }\n if (regionPos.x + regionRect.width > maxX) {\n maxX = regionPos.x + regionRect.width;\n }\n if (regionPos.y < minY) {\n minY = regionPos.y;\n }\n if (regionPos.y + regionRect.height > maxY) {\n maxY = regionPos.y + regionRect.height;\n }\n });\n return { minX, maxX, minY, maxY };\n}\n\nexport function transformLabelAttributes(\n label: IMarkerLabelSpec,\n markerData: any,\n markAttributeContext: IMarkerAttributeContext\n) {\n const { labelBackground = {}, style, shape, ...restLabel } = label;\n\n if (label.visible !== false) {\n const labelAttrs = restLabel as any;\n\n if (shape?.visible) {\n labelAttrs.shape = {\n visible: true,\n ...transformToGraphic(shape.style)\n };\n } else {\n labelAttrs.shape = {\n visible: false\n };\n }\n\n if (labelBackground.visible !== false) {\n labelAttrs.panel = {\n visible: true,\n customShape: labelBackground.customShape,\n ...transformStyle(transformToGraphic(labelBackground.style), markerData, markAttributeContext)\n };\n if (isValid(labelBackground.padding)) {\n labelAttrs.padding = normalizePadding(labelBackground.padding);\n }\n } else {\n labelAttrs.panel = {\n visible: false\n };\n labelAttrs.padding = 0;\n }\n\n if (style) {\n labelAttrs.textStyle = transformStyle(transformToGraphic(style), markerData, markAttributeContext);\n }\n return labelAttrs;\n }\n return {\n visible: false\n };\n}\n\nexport function transformState(\n state: {} | Record>,\n markerData: DataView,\n markerAttributeContext: IMarkerAttributeContext\n) {\n for (const stateKey in state) {\n if (isFunction(state[stateKey])) {\n state[stateKey] = state[stateKey](markerData, markerAttributeContext);\n }\n }\n return state;\n}\n\nexport function transformStyle(style: any, markerData: DataView, markerAttributeContext: IMarkerAttributeContext) {\n if (isFunction(style)) {\n return style(markerData, markerAttributeContext);\n }\n return style;\n}\n\nexport function transformOffset(offset: string | number | Function, region: IRegion) {\n if (isFunction(offset)) {\n return offset(region);\n }\n return offset;\n}\n\nexport function computeOffsetFromRegion(point: IPointLike, offset: string | number, region: IRegion): number {\n if (!isValid(point)) {\n return offset as number;\n }\n if (offset === 'regionLeft') {\n return region.getLayoutStartPoint().x - point.x;\n } else if (offset === 'regionRight') {\n return region.getLayoutStartPoint().x + region.getLayoutRect().width - point.x;\n } else if (offset === 'regionTop') {\n return region.getLayoutStartPoint().y - point.y;\n } else if (offset === 'regionBottom') {\n return region.getLayoutStartPoint().y + region.getLayoutRect().height - point.y;\n }\n return offset as number;\n}\n\nexport function getMarkLineProcessInfo(spec: any) {\n const isXProcess = 'x' in spec;\n const isYProcess = 'y' in spec;\n const isX1Process = 'x1' in spec;\n const isY1Process = 'y1' in spec;\n const isAngleProcess = 'angle' in spec;\n const isRadiusProcess = 'radius' in spec;\n const isAngle1Process = 'angle1' in spec;\n const isRadius1Process = 'radius1' in spec;\n const isCoordinatesProcess = 'coordinates' in spec;\n const isValidProcess = 'process' in spec;\n\n return {\n doXProcess: isXProcess && !isYProcess && !isY1Process,\n doXYY1Process: isXProcess && isYProcess && isY1Process,\n doYProcess: isYProcess && !isXProcess && !isX1Process,\n doYXX1Process: isYProcess && isXProcess && isX1Process,\n doXYProcess: isXProcess && isYProcess && isX1Process && isY1Process,\n doAngleProcess: isAngleProcess && !isAngle1Process && !isRadiusProcess && !isRadius1Process,\n doRadiusProcess: isRadiusProcess && !isRadius1Process && !isAngleProcess && !isAngle1Process,\n doAngRadRad1Process: isAngleProcess && !isAngle1Process && isRadiusProcess && isRadius1Process,\n doRadAngAng1Process: isRadiusProcess && isAngleProcess && isAngle1Process && !isRadius1Process,\n doRadAngProcess: isAngleProcess && isRadiusProcess && isAngle1Process && isRadius1Process,\n doCoordinatesProcess: isCoordinatesProcess && (!isValidProcess || ('process' in spec && 'xy' in spec.process))\n };\n}\n\nexport function getMarkAreaProcessInfo(spec: any) {\n const isXProcess = 'x' in spec;\n const isX1Process = 'x1' in spec;\n const isYProcess = 'y' in spec;\n const isY1Process = 'y1' in spec;\n const isAngleProcess = 'angle' in spec;\n const isRadiusProcess = 'radius' in spec;\n const isAngle1Process = 'angle1' in spec;\n const isRadius1Process = 'radius1' in spec;\n const isCoordinatesProcess = 'coordinates' in spec;\n return {\n doXProcess: isXProcess && isX1Process && !isYProcess && !isY1Process,\n doYProcess: isYProcess && isY1Process && !isXProcess && !isX1Process,\n doXYProcess: isXProcess && isX1Process && isYProcess && isY1Process,\n doAngleProcess: isAngleProcess && isAngle1Process && !isRadiusProcess && !isRadius1Process,\n doRadiusProcess: isRadiusProcess && isRadius1Process && !isAngleProcess && !isAngle1Process,\n doRadAngProcess: isAngleProcess && isRadiusProcess && isAngle1Process && isRadius1Process,\n doCoordinatesProcess: isCoordinatesProcess\n };\n}\n\nexport function getMarkPointProcessInfo(spec: any) {\n const isXYProcess = isValid(spec.x) && isValid(spec.y);\n const isPolarProcess = isValid(spec.angle) && isValid(spec.radius);\n const isGeoProcess = isValid(spec.areaName);\n return {\n doXYProcess: isXYProcess,\n doPolarProcess: isPolarProcess,\n doGeoProcess: isGeoProcess\n };\n}\n","import {\n registerArc,\n registerGroup,\n registerImage,\n registerLine,\n registerPolygon,\n registerSymbol\n} from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadArcSegmentComponent, loadSegmentComponent } from '../segment/register';\nfunction loadBaseMarker() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadMarkLineComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n}\n\nexport function loadMarkArcLineComponent() {\n loadBaseMarker();\n loadArcSegmentComponent();\n}\n\nexport function loadMarkAreaComponent() {\n loadBaseMarker();\n registerPolygon();\n}\n\nexport function loadMarkArcAreaComponent() {\n loadBaseMarker();\n registerArc();\n}\n\nexport function loadMarkPointComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n loadArcSegmentComponent();\n registerSymbol();\n registerImage();\n registerLine();\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IBoundsLike } from '@visactor/vutils';\n\nexport function computeOffsetForlimit(shape: IGraphic, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n return {\n dx,\n dy\n };\n}\nexport function limitShapeInBounds(shape: IGraphic, bounds: IBoundsLike) {\n const { dx, dy } = computeOffsetForlimit(shape, bounds);\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n","import type { FederatedPointerEvent, IGraphic, IGroup, IImage, IRichText, ISymbol } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { Tag } from '../tag';\nimport type { MarkerAnimationState, MarkerAttrs, MarkerExitAnimation, MarkerUpdateAnimation } from './type';\nimport { dispatchClickState, dispatchHoverState, dispatchUnHoverState } from '../util/interaction';\nimport { isObject, merge } from '@visactor/vutils';\n\nexport abstract class Marker, AnimationAttr> extends AbstractComponent<\n Required\n> {\n name = 'marker';\n\n private _containerClip!: IGroup;\n protected _container!: IGroup;\n\n protected _label!: Tag;\n\n /** animate */\n static _animate?: (\n marker: any,\n label: Tag | IRichText | ISymbol | IImage,\n animationConfig: any,\n state: MarkerAnimationState\n ) => void;\n\n defaultUpdateAnimation!: MarkerUpdateAnimation;\n defaultExitAnimation!: MarkerExitAnimation;\n\n protected _animationConfig?: {\n enter: MarkerUpdateAnimation;\n exit: MarkerExitAnimation;\n update: MarkerUpdateAnimation;\n };\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract setLabelPos(): any;\n protected abstract initMarker(container: IGroup): any;\n protected abstract updateMarker(): any;\n protected abstract isValidPoints(): any;\n protected abstract markerAnimate(state: MarkerAnimationState): void;\n\n private transAnimationConfig(): void {\n if (this.attribute.animation !== false) {\n const animation = isObject(this.attribute.animation) ? this.attribute.animation : {};\n this._animationConfig = {\n enter: merge(\n {},\n this.defaultUpdateAnimation,\n animation,\n this.attribute.animationEnter ?? {}\n ) as MarkerUpdateAnimation,\n exit: merge({}, this.defaultExitAnimation, animation, this.attribute.animationExit ?? {}),\n update: merge(\n {},\n this.defaultUpdateAnimation,\n animation,\n this.attribute.animationUpdate ?? {}\n ) as MarkerUpdateAnimation\n };\n }\n }\n setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined): void {\n super.setAttribute(key, value, forceUpdateTag);\n if (key === 'visible') {\n this.render();\n }\n }\n\n private _bindEvent() {\n if (!this.attribute.interactive) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._container?.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._container?.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._container?.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _releaseEvent() {\n this._container?.removeEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._container?.removeEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n this._container?.removeEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchHoverState(e, this._container, this._lastHover);\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchUnHoverState(e, this._container, this._lastHover);\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n this._lastSelect = dispatchClickState(e, this._container, this._lastSelect);\n };\n\n private _initContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n let group;\n if (clipInRange) {\n // 如果用户配置了剪切\n const groupClip = graphicCreator.group({\n ...limitRect,\n clip: true,\n pickable: false\n });\n group = graphicCreator.group({\n x: -(limitRect.x ?? 0),\n y: -(limitRect.y ?? 0),\n pickable: false\n });\n groupClip.add(group);\n this._containerClip = groupClip;\n this.add(groupClip);\n } else {\n group = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n this.add(group);\n }\n group.name = 'marker-container';\n this._container = group;\n }\n\n private _updateContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n if (this._containerClip) {\n this._containerClip.setAttributes({\n ...limitRect\n });\n }\n\n this._container.setAttributes({\n x: clipInRange ? -(limitRect.x ?? 0) : 0,\n y: clipInRange ? -(limitRect.y ?? 0) : 0\n });\n }\n\n protected render() {\n this.transAnimationConfig();\n\n // 因为标注本身不规则,所以默认将组件的 group 设置为不可拾取\n this.setAttribute('pickable', false);\n\n const markerVisible = this.attribute.visible ?? true;\n if (this.attribute.interactive === false) {\n this.setAttribute('childrenPickable', false);\n }\n\n if (markerVisible && this.isValidPoints()) {\n if (!this._container) {\n this._initContainer();\n this.initMarker(this._container);\n this.markerAnimate('enter');\n } else {\n this._updateContainer();\n this.updateMarker();\n this.markerAnimate('update');\n }\n } else {\n this.markerAnimate('exit');\n this._container = null;\n this.removeAllChild(true);\n }\n\n // 先把之前的event都release掉,否则会重复触发\n this._releaseEvent();\n this._bindEvent();\n }\n\n release(): void {\n this.markerAnimate('exit');\n super.release();\n this._releaseEvent();\n this._container = null;\n }\n}\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\n\n/** fade-in */\nexport function graphicFadeIn(graphic: IGraphic, delay: number, duration: number, easing: EasingType) {\n if (!graphic) {\n return;\n }\n graphic?.animates?.forEach(a => a.stop('end'));\n const fillOpacityConfig = graphic.attribute?.fillOpacity ?? 1;\n const strokeOpacityConfig = graphic.attribute?.strokeOpacity ?? 1;\n\n graphic.setAttributes({\n fillOpacity: 0,\n strokeOpacity: 0\n });\n\n graphic.animate().wait(delay).to(\n {\n fillOpacity: fillOpacityConfig,\n strokeOpacity: strokeOpacityConfig\n },\n duration,\n easing\n );\n}\n\nexport function segmentFadeIn(segment: Segment, delay: number, duration: number, easing: EasingType) {\n if (!segment) {\n return;\n }\n\n // start symbol\n graphicFadeIn(segment.startSymbol, delay, duration, easing);\n\n // line\n segment.lines.forEach(line => graphicFadeIn(line, delay, duration, easing));\n graphicFadeIn((segment as ArcSegment).line, delay, duration, easing);\n\n // end symbol\n graphicFadeIn(segment.endSymbol, delay, duration, easing);\n}\n\nexport function tagFadeIn(tag: Tag, delay: number, duration: number, easing: EasingType) {\n if (!tag) {\n return;\n }\n\n // text\n graphicFadeIn(tag.getTextShape(), delay, duration, easing);\n\n // text background\n graphicFadeIn(tag.getBgRect(), delay, duration, easing);\n}\n\n/** fade-out */\nexport function graphicFadeOut(graphic: IGraphic, delay: number, duration: number, easing: EasingType) {\n if (!graphic) {\n return;\n }\n\n graphic.setAttributes({\n fillOpacity: graphic.attribute?.fillOpacity ?? 1,\n strokeOpacity: graphic.attribute?.strokeOpacity ?? 1\n });\n\n graphic.animate().wait(delay).to({ fillOpacity: 0, strokeOpacity: 0 }, duration, easing);\n}\n\nexport function segmentFadeOut(segment: Segment | ArcSegment, delay: number, duration: number, easing: EasingType) {\n if (!segment) {\n return;\n }\n\n // start symbol\n graphicFadeOut(segment.startSymbol, delay, duration, easing);\n\n // line\n segment.lines.forEach(line => graphicFadeOut(line, delay, duration, easing));\n graphicFadeOut((segment as ArcSegment).line, delay, duration, easing);\n\n // end symbol\n graphicFadeOut(segment.endSymbol, delay, duration, easing);\n}\n\nexport function tagFadeOut(tag: Tag, delay: number, duration: number, easing: EasingType) {\n if (!tag) {\n return;\n }\n\n // text\n graphicFadeOut(tag.getTextShape(), delay, duration, easing);\n\n // text background\n graphicFadeOut(tag.getBgRect(), delay, duration, easing);\n}\n","import type { EasingType } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn } from './common';\n\nexport function commonLineClipIn(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n const startSymbolDuration = 0.1 * duration;\n const lineDuration = 0.7 * duration;\n const endSymbolDuration = 0.1 * duration;\n const labelDuration = 0.1 * duration;\n\n // start symbol\n graphicFadeIn(line.startSymbol, delay, startSymbolDuration, easing);\n\n // line\n line.lines.forEach(line => line.setAttribute('clipRange', 0));\n line.lines.forEach((l, index) => {\n const stepDuration = lineDuration / line.lines.length;\n l.animate()\n .wait(delay + startSymbolDuration + index * stepDuration)\n .to({ clipRange: 1 }, stepDuration, easing);\n });\n\n // end symbol\n graphicFadeIn(line.endSymbol, delay + startSymbolDuration + lineDuration, endSymbolDuration, easing);\n\n // text\n graphicFadeIn(\n label.getTextShape(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n\n // text background\n graphicFadeIn(\n label.getBgRect(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n}\n","import type { EasingType, IArc, IImage, ILine, IPolygon, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn, segmentFadeIn, tagFadeIn } from './common';\n\nexport function commonLineFadeIn(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeIn(line, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function areaFadeIn(area: IPolygon, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeIn(area, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function arcAreaFadeIn(area: IArc, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeIn(area, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function pointFadeIn(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeIn(itemLine, delay, duration, easing);\n graphicFadeIn(decorativeLine, delay, duration, easing);\n if (item.getTextShape?.()) {\n // tag\n tagFadeIn(item as Tag, delay, duration, easing);\n } else {\n // symbol / richText / image\n graphicFadeIn(item, delay, duration, easing);\n }\n}\n","import type { EasingType, IArc, IImage, ILine, IPolygon, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeOut, segmentFadeOut, tagFadeOut } from './common';\n\nexport function commonLineFadeOut(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeOut(line, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function areaFadeOut(area: IPolygon, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeOut(area, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function arcAreaFadeOut(area: IArc, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeOut(area, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function pointFadeOut(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeOut(itemLine, delay, duration, easing);\n graphicFadeOut(decorativeLine, delay, duration, easing);\n if (item.getTextShape?.()) {\n // tag\n tagFadeOut(item as Tag, delay, duration, easing);\n } else {\n // symbol / richText / image\n graphicFadeOut(item, delay, duration, easing);\n }\n}\n","import type { EasingType, IImage, ILine, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn } from './common';\n\nexport function pointCallIn(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n const startSymbolDuration = 0.1 * duration;\n const lineDuration = 0.65 * duration;\n const decorativeDuration = 0.05 * duration;\n const endSymbolDuration = 0.1 * duration;\n const labelDuration = 0.1 * duration;\n\n // start symbol\n graphicFadeIn(itemLine.startSymbol, delay, startSymbolDuration, easing);\n\n // line\n itemLine.lines.forEach(line => line.setAttribute('clipRange', 0));\n itemLine.lines.forEach((l, index) => {\n const stepDuration = lineDuration / itemLine.lines.length;\n l.animate()\n .wait(delay + startSymbolDuration + index * stepDuration)\n .to({ clipRange: 1 }, stepDuration, easing);\n });\n\n graphicFadeIn(decorativeLine, delay + startSymbolDuration + lineDuration, decorativeDuration, easing);\n\n // end symbol\n graphicFadeIn(\n itemLine.endSymbol,\n delay + startSymbolDuration + lineDuration + decorativeDuration,\n endSymbolDuration,\n easing\n );\n\n if (item.getTextShape?.()) {\n // text\n graphicFadeIn(\n item.getTextShape(),\n delay + startSymbolDuration + lineDuration + decorativeDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n\n // text background\n graphicFadeIn(\n item.getBgRect(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n } else {\n graphicFadeIn(item, delay + startSymbolDuration + lineDuration + endSymbolDuration, labelDuration, easing);\n }\n}\n","import type { IRichText, ISymbol, IImage, IArc } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILine, IPolygon } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport type {\n CommonMarkAreaAnimationType,\n MarkCommonLineAnimationType,\n MarkPointAnimationType,\n MarkerAnimationState,\n MarkerExitAnimation,\n MarkerUpdateAnimation\n} from '../type';\nimport { commonLineClipIn } from './clip-in';\nimport { areaFadeIn, commonLineFadeIn, arcAreaFadeIn, pointFadeIn } from './fade-in';\nimport { areaFadeOut, commonLineFadeOut, arcAreaFadeOut, pointFadeOut } from './fade-out';\nimport { pointCallIn } from './call-in';\n\nexport function markCommonLineAnimate(\n line: Segment | ArcSegment,\n label: Tag,\n animationconfig: any,\n state: MarkerAnimationState\n) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'clipIn') {\n commonLineClipIn(line, label, duration, delay, easing);\n } else if (type === 'fadeIn') {\n commonLineFadeIn(line, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'clipIn') {\n commonLineClipIn(line, label, duration, delay, easing);\n } else if (type === 'fadeIn') {\n commonLineFadeIn(line, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n commonLineFadeOut(line, label, duration, delay, easing);\n }\n}\n\nexport function markAreaAnimate(area: IPolygon, label: Tag, animationconfig: any, state: MarkerAnimationState) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n areaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n areaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n areaFadeOut(area, label, duration, delay, easing);\n }\n}\n\nexport function markArcAreaAnimate(area: IArc, label: Tag, animationconfig: any, state: MarkerAnimationState) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n arcAreaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n arcAreaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n arcAreaFadeOut(area, label, duration, delay, easing);\n }\n}\n\nexport function markPointAnimate(\n lines: [Segment, ILine],\n item: Tag | IRichText | ISymbol | IImage,\n animationconfig: any,\n state: MarkerAnimationState\n) {\n const [itemLine, decorativeLine] = lines;\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n pointFadeIn(itemLine, decorativeLine, item, duration, delay, easing);\n } else if (type === 'callIn') {\n pointCallIn(itemLine, decorativeLine, item, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n pointFadeIn(itemLine, decorativeLine, item, duration, delay, easing);\n } else if (type === 'callIn') {\n pointCallIn(itemLine, decorativeLine, item, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n pointFadeOut(itemLine, decorativeLine, item, duration, delay, easing);\n }\n}\n\nexport const DefaultUpdateMarkLineAnimation: MarkerUpdateAnimation = {\n type: 'clipIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultUpdateMarkAreaAnimation: MarkerUpdateAnimation = {\n type: 'fadeIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultUpdateMarkPointAnimation: MarkerUpdateAnimation = {\n type: 'callIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultExitMarkerAnimation: MarkerExitAnimation = {\n type: 'fadeOut',\n duration: 500,\n easing: 'linear',\n delay: 0\n};\n","import type { IGroup, INode } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { ArcSegment, Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport type { MarkCommonLineAnimationType, MarkCommonLineAttrs, MarkerAnimationState } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport { DEFAULT_STATES } from '../constant';\nimport { Marker } from './base';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkLineAnimation } from './animate/animate';\n\nexport abstract class MarkCommonLine extends Marker<\n MarkCommonLineAttrs,\n MarkCommonLineAnimationType\n> {\n name = 'markCommonLine';\n\n /** animate */\n static _animate?: (line: Segment | ArcSegment, label: Tag, animationConfig: any, state: MarkerAnimationState) => void;\n defaultUpdateAnimation = DefaultUpdateMarkLineAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n\n protected _line!: Segment | ArcSegment;\n protected abstract createSegment(): any;\n protected abstract setLineAttributes(): any;\n protected abstract getPointAttrByPosition(position: any): any;\n protected abstract getRotateByAngle(angle: number): number;\n protected abstract getTextStyle(position: any, labelAngle: number, autoRotate: boolean): any;\n protected abstract markerAnimate(state: MarkerAnimationState): void;\n\n getLine() {\n return this._line;\n }\n getLabel() {\n return this._label;\n }\n\n protected setLabelPos(): void {\n const { label = {}, limitRect } = this.attribute;\n const { position, confine, autoRotate } = label;\n const labelPoint = this.getPointAttrByPosition(position);\n const labelAngle = position.toString().toLocaleLowerCase().includes('start')\n ? this._line.getStartAngle() || 0\n : this._line.getEndAngle() || 0;\n this._label.setAttributes({\n ...labelPoint.position,\n angle: autoRotate ? this.getRotateByAngle(labelPoint.angle) : 0,\n textStyle: {\n ...this.getTextStyle(position, labelAngle, autoRotate),\n ...label.textStyle\n }\n });\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n\n protected initMarker(container: IGroup) {\n const { label, state } = this.attribute as MarkCommonLineAttrs<\n LineAttr,\n LabelPosition,\n MarkCommonLineAnimationType\n >;\n const line = this.createSegment();\n line.name = 'mark-common-line-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-common-line-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { label, state } = this.attribute as MarkCommonLineAttrs<\n LineAttr,\n LabelPosition,\n MarkCommonLineAnimationType\n >;\n\n this.setLineAttributes();\n\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n this.setLabelPos();\n }\n }\n}\n","import type {\n EasingType,\n IArcGraphicAttribute,\n IGroup,\n IGroupGraphicAttribute,\n IImageGraphicAttribute,\n ILineGraphicAttribute,\n IPolygonAttribute,\n IPolygonGraphicAttribute,\n IRectGraphicAttribute,\n IRichTextGraphicAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { CommonSegmentAttributes, ILineGraphicWithCornerRadius, SegmentAttributes } from '../segment/type';\nimport type { TagAttributes } from '../tag/type';\nimport type { Point, State } from '../core/type';\n\nexport enum IMarkLineLabelPosition {\n start = 'start',\n startTop = 'startTop',\n startBottom = 'startBottom',\n insideStart = 'insideStart',\n insideStartTop = 'insideStartTop',\n insideStartBottom = 'insideStartBottom',\n\n middle = 'middle',\n insideMiddleTop = 'insideMiddleTop',\n insideMiddleBottom = 'insideMiddleBottom',\n\n end = 'end',\n endTop = 'endTop',\n endBottom = 'endBottom',\n insideEnd = 'insideEnd',\n insideEndTop = 'insideEndTop',\n insideEndBottom = 'insideEndBottom'\n}\n\nexport enum IMarkAreaLabelPosition {\n left = 'left',\n right = 'right',\n top = 'top',\n bottom = 'bottom',\n topLeft = 'topLeft',\n topRight = 'topRight',\n bottomLeft = 'bottomLeft',\n bottomRight = 'bottomRight',\n\n middle = 'middle',\n\n insideLeft = 'insideLeft',\n insideRight = 'insideRight',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom',\n insideTopLeft = 'insideTopLeft',\n insideTopRight = 'insideTopRight',\n insideBottomLeft = 'insideBottomLeft',\n insideBottomRight = 'insideBottomRight'\n}\n\nexport enum IMarkCommonArcLabelPosition {\n arcInnerStart = 'arcInnerStart',\n arcInnerEnd = 'arcInnerEnd',\n arcInnerMiddle = 'arcInnerMiddle',\n arcOuterStart = 'arcOuterStart',\n arcOuterEnd = 'arcOuterEnd',\n arcOuterMiddle = 'arcOuterMiddle',\n center = 'center'\n}\n\nexport enum IMarkPointItemPosition {\n top = 'top',\n bottom = 'bottom',\n middle = 'middle',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom',\n insideMiddle = 'insideMiddle'\n}\n\nexport type IMarkBackgroundAttributes = {\n /**\n * 是否绘制背景层\n */\n visible: boolean;\n /**\n * TODO: 根据文字宽度进行背景 panel size自适应\n */\n autoHeight?: boolean;\n /**\n * TODO: 根据文高度度进行背景 panel size自适应\n */\n autoWidth?: boolean;\n} & Partial;\n\nexport type IMarkLabel = Omit & {\n /**\n * 标签的背景面板配置\n */\n panel?: IMarkBackgroundAttributes;\n};\n\nexport type IMarkRef = {\n /**\n * 自动旋转,沿着线的方向\n * @default\n * mark-line/mark-area/mark-point: false - 旧逻辑里autoRotate是false, 保持不变\n * mark-arc-line/mark-arc-area: true - 新增逻辑, 如果不开启的话, 效果不太好, 所以默认true\n * mark-point - 旧逻辑里autoRotate是true, 保持不变\n */\n autoRotate?: boolean;\n /**\n * label 相对line平行方向上的偏移\n */\n refX?: number;\n /**\n * label 相对line正交方向上的偏移\n */\n refY?: number;\n /**\n * label 相对默认角度的偏移 (label跟随line的角度做自动旋转时,默认按照line的平行向量作为初始角度)\n */\n refAngle?: number;\n};\n\nexport type MarkerAttrs = IGroupGraphicAttribute & {\n type?: 'line' | 'arc-line' | 'area' | 'arc-area' | 'point';\n /**\n * 是否支持交互\n * @default true\n */\n interactive?: boolean;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 是否显示marker组件\n * @default true\n */\n visible?: boolean;\n /**\n * 是否将组件在绘制区域内进行剪切\n * @default true\n */\n clipInRange?: boolean;\n /**\n * 组件绘制范围配置\n */\n limitRect?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n} & BaseMarkerAnimation;\n\n/** animation type */\nexport type BaseMarkerAnimation = {\n animation?: MarkerAnimation | boolean;\n animationEnter?: MarkerUpdateAnimation;\n animationUpdate?: MarkerUpdateAnimation;\n animationExit?: MarkerExitAnimation;\n};\nexport type MarkerAnimation = MarkerUpdateAnimation | MarkerUpdateAnimation;\n\nexport type MarkerUpdateAnimation = {\n type: T;\n} & MarkerExitAnimation;\n\nexport type MarkCommonLineAnimationType = 'clipIn' | 'fadeIn';\n\nexport type CommonMarkAreaAnimationType = 'fadeIn';\n\nexport type MarkPointAnimationType = 'callIn' | 'fadeIn';\n\nexport type MarkerExitAnimation = {\n type: 'fadeOut';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n};\n\nexport type MarkerAnimationState = 'enter' | 'update' | 'exit';\n\n/** state type */\nexport type MarkCommonLineState = {\n line?: State;\n lineStartSymbol?: State>;\n lineEndSymbol?: State>;\n label?: State>;\n labelBackground?: State>;\n};\n\nexport type CommonMarkAreaState = {\n area?: State>;\n label?: State>;\n labelBackground?: State>;\n};\n\nexport type MarkPointState = {\n line?: State[]>;\n lineStartSymbol?: State>;\n lineEndSymbol?: State>;\n symbol?: State>;\n image?: State>;\n text?: State>;\n textBackground?: State>;\n richText?: State>;\n customMark?: State>;\n targetItem?: State>;\n};\n\nexport type MarkCommonLineAttrs =\n MarkerAttrs &\n Omit & {\n /**\n * 标签\n */\n label?: {\n /**\n * label 相对line的位置\n */\n position?: LineLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkRef &\n IMarkLabel;\n state?: MarkCommonLineState;\n };\n\nexport type MarkLineAttrs = MarkCommonLineAttrs<\n ILineGraphicWithCornerRadius | ILineGraphicAttribute[],\n keyof typeof IMarkLineLabelPosition,\n MarkCommonLineAnimationType\n> & {\n type?: 'line';\n /**\n * 是否对 points 进行多段处理,默认为 false,即直接将所有的点连接成线。\n * 如果需要进行多段处理,需要将 points 属性配置为 Point[][] 类型\n * @default false\n */\n multiSegment?: boolean;\n /**\n * 在 `multiSegment` 属性开启的前提下,用于声明那一段线段用来作为主线段,如果不声明,默认全段为主线段\n */\n mainSegmentIndex?: number;\n /**\n * 构成line的点: 如果是两个点,则为直线;多个点则为曲线\n */\n points: Point[] | Point[][];\n lineStyle?: ILineGraphicAttribute;\n};\n\nexport type MarkArcLineAttrs = MarkCommonLineAttrs<\n IArcGraphicAttribute,\n keyof typeof IMarkCommonArcLabelPosition,\n MarkCommonLineAnimationType\n> & {\n type?: 'arc-line';\n /**\n * 弧线中心位置\n */\n center: {\n x: number;\n y: number;\n };\n /**\n * 弧线半径\n */\n radius: number;\n /**\n * 弧线起始角度(弧度)\n */\n startAngle: number;\n /**\n * 弧线终点角度(弧度)\n */\n endAngle: number;\n lineStyle?: IArcGraphicAttribute;\n};\n\nexport type MarkAreaAttrs = MarkerAttrs & {\n type?: 'area';\n /**\n * 构成area的点\n */\n points: Point[];\n /**\n * 标签\n */\n label?: {\n position?: keyof typeof IMarkAreaLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkLabel;\n /**\n * area的样式\n */\n areaStyle?: IPolygonAttribute;\n\n state?: CommonMarkAreaState;\n};\n\nexport type MarkArcAreaAttrs = MarkerAttrs & {\n type?: 'arc-area';\n /**\n * 扇区中心位置\n */\n center: {\n x: number;\n y: number;\n };\n /**\n * 扇区内半径\n */\n innerRadius: number;\n /**\n * 扇区外半径\n */\n outerRadius: number;\n /**\n * 扇区起始角度(弧度)\n */\n startAngle: number;\n /**\n * 扇区终点角度(弧度)\n */\n endAngle: number;\n /**\n * 标签\n */\n label?: {\n position?: keyof typeof IMarkCommonArcLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkRef &\n IMarkLabel;\n /**\n * area的样式\n */\n areaStyle?: IArcGraphicAttribute;\n\n state?: CommonMarkAreaState;\n};\n\nexport type IItemContent = IMarkRef & {\n /**\n * 标注类型\n * Tips: 保留'richText'与之前的定义做兼容\n */\n type?: 'symbol' | 'text' | 'image' | 'richText' | 'custom';\n position?: keyof typeof IMarkPointItemPosition;\n /**\n * x 方向偏移量\n */\n offsetX?: number;\n /**\n * y 方向偏移量\n */\n offsetY?: number;\n /**\n * type为symbol时, symbol的样式\n */\n symbolStyle?: ISymbolGraphicAttribute;\n /**\n * type为image时, image的样式\n */\n imageStyle?: IImageGraphicAttribute;\n /**\n * type为text时, text的配置\n * 'text'类型的ItemContent新增三种子类型:'text','rich','html'。配置在textStyle.type上,继承自TagAttributes。\n */\n textStyle?: IMarkLabel;\n /**\n * type为rich text时, rich text的样式\n */\n richTextStyle?: IRichTextGraphicAttribute;\n /**\n * type为custom时,允许以callback的方式传入需要render的item\n */\n renderCustomCallback?: () => IGroup;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n};\n\nexport type IItemLine = {\n /** TODO:'type-opo' */\n type?: 'type-s' | 'type-do' | 'type-po' | 'type-op' | 'type-arc';\n visible?: boolean;\n /**\n * 当type为type-arc时生效, 数值决定曲率, 符号决定法向, 不能等于0\n * @default 0.8\n */\n arcRatio?: number;\n /**\n * 垂直于引导线的装饰线,参考案例: https://observablehq.com/@mikelotis/edmonton-population-history-line-chart\n */\n decorativeLine?: {\n visible?: boolean;\n length?: number;\n };\n} & Omit;\n\nexport type MarkPointAttrs = Omit, 'labelStyle'> & {\n /**\n * markPoint的位置(也是path的起点)\n */\n position: Point;\n /**\n * 标注引导线\n */\n itemLine?: IItemLine;\n\n /**\n * 标注内容\n */\n itemContent?: IItemContent;\n\n /**\n * 被标注的内容\n */\n targetSymbol?: {\n /**\n * 被标注内容与标记线间的间隙\n * @default 0\n */\n offset?: number;\n /**\n * 是否显示\n * @default false\n */\n visible?: boolean;\n /**\n * 大小\n * @default 20\n */\n size?: number;\n style?: ISymbol;\n };\n\n state?: MarkPointState;\n} & BaseMarkerAnimation;\n","import type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { IMarkAreaLabelPosition, IMarkLineLabelPosition, IMarkCommonArcLabelPosition } from './type';\n\nexport const FUZZY_EQUAL_DELTA = 0.001;\nexport const DEFAULT_MARK_LINE_THEME = {\n interactive: true,\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n label: {\n position: IMarkLineLabelPosition.end,\n refX: 0,\n refY: 0,\n refAngle: 0,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n};\n\nexport const DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP: {\n [K: string]: {\n [T: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n };\n} = {\n postiveXAxis: {\n start: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n startTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n startBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideStart: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideStartTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideStartBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n insideMiddleTop: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideMiddleBottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n end: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n endTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n endBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideEnd: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideEndTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideEndBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n }\n },\n negativeXAxis: {\n start: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n startTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n startBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideStart: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideStartTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideStartBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n insideMiddleTop: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideMiddleBottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n end: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n endTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n endBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideEnd: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideEndTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideEndBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n }\n }\n};\n\nexport const DEFAULT_MARK_ARC_LINE_THEME = {\n interactive: true,\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n label: {\n position: IMarkCommonArcLabelPosition.arcOuterMiddle,\n refX: 0,\n refY: 0,\n refAngle: 0,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n};\n\nexport const DEFAULT_MARK_AREA_THEME = {\n interactive: true,\n label: {\n position: IMarkAreaLabelPosition.right,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n areaStyle: {\n fill: '#b2bacf',\n visible: true\n }\n};\n\nexport const DEFAULT_MARK_ARC_AREA_THEME = {\n interactive: true,\n label: {\n position: IMarkCommonArcLabelPosition.arcOuterMiddle,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n areaStyle: {\n fill: '#b2bacf',\n visible: true\n }\n};\n\nexport const DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n arcInnerStart: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n arcInnerEnd: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n arcInnerMiddle: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n arcOuterStart: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n arcOuterEnd: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n arcOuterMiddle: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n center: {\n textAlign: 'center',\n textBaseline: 'middle'\n }\n};\n\nexport const DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n left: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideLeft: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n\n right: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideRight: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n\n top: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideTop: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n bottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n insideBottom: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n\n topLeft: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideTopLeft: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n topRight: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideTopRight: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n bottomLeft: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideBottomLeft: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n bottomRight: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideBottomRight: {\n textAlign: 'right',\n textBaseline: 'bottom'\n }\n};\n\nexport const DEFAULT_MARK_POINT_THEME = {\n interactive: true,\n targetSymbol: {\n visible: false,\n offset: 0,\n style: {\n symbolType: 'circle',\n size: 20,\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n itemLine: {\n visible: true,\n decorativeLine: {\n visible: false,\n length: 30\n },\n startSymbol: {\n visible: true,\n clip: true,\n symbolType: 'circle',\n size: 20,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n endSymbol: {\n visible: false,\n clip: true,\n symbolType: 'triangle',\n size: 12,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n lineStyle: {\n stroke: '#000',\n lineWidth: 1\n }\n },\n itemContent: {\n type: 'text',\n position: 'middle',\n refX: 10,\n symbolStyle: {\n symbolType: 'star',\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8,\n size: 20\n },\n textStyle: {\n dx: 0,\n dy: 0\n },\n imageStyle: {\n width: 80,\n height: 80\n },\n richTextStyle: {\n width: 100,\n height: 100\n }\n }\n};\n\nexport const DEFAULT_MARK_POINT_TEXT_STYLE_MAP: {\n [K: string]: {\n [T: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n };\n} = {\n postiveXAxis: {\n top: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n bottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n middle: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideMiddle: {\n textAlign: 'right',\n textBaseline: 'middle'\n }\n },\n negativeXAxis: {\n top: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n bottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n middle: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideMiddle: {\n textAlign: 'left',\n textBaseline: 'middle'\n }\n }\n};\n","import { isValidNumber, merge } from '@visactor/vutils';\nimport type { IMarkLineLabelPosition } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkLineAttrs, MarkerAnimationState } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkLineComponent } from './register';\nimport type { Point } from '../core/type';\nimport { MarkCommonLine } from './common-line';\nimport type { ArcSegment } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { DEFAULT_STATES } from '../constant';\nimport { DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP, DEFAULT_MARK_LINE_THEME, FUZZY_EQUAL_DELTA } from './config';\nimport type { ILineGraphicAttribute } from '@visactor/vrender-core';\nimport { markCommonLineAnimate } from './animate/animate';\nimport { fuzzyEqualNumber, getTextAlignAttrOfVerticalDir, isPostiveXAxis } from '../util';\n\nloadMarkLineComponent();\n\nexport function registerMarkLineAnimate() {\n MarkLine._animate = markCommonLineAnimate;\n}\n\nexport class MarkLine extends MarkCommonLine {\n name = 'markLine';\n // eslint-disable-next-line max-len\n static defaultAttributes: Partial = DEFAULT_MARK_LINE_THEME as unknown as MarkLineAttrs;\n protected _line!: Segment | ArcSegment;\n\n /** animate */\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkLine._animate && this._animationConfig) {\n MarkLine._animate(this._line, this._label, this._animationConfig, state);\n }\n }\n\n constructor(attributes: MarkLineAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkLine.defaultAttributes, attributes));\n }\n\n protected getPointAttrByPosition(position: IMarkLineLabelPosition) {\n const { label = {} } = this.attribute;\n const { refX = 0, refY = 0 } = label;\n const points = this._line.getMainSegmentPoints();\n const lineEndAngle = this._line.getEndAngle() ?? 0;\n const labelAngle = isPostiveXAxis(lineEndAngle) ? lineEndAngle : lineEndAngle;\n\n const labelOffsetX = refX * Math.cos(labelAngle) + refY * Math.cos(labelAngle - Math.PI / 2);\n const labelOffsetY = refX * Math.sin(labelAngle) + refY * Math.sin(labelAngle - Math.PI / 2);\n\n if (position.includes('start') || position.includes('Start')) {\n return {\n position: {\n x: points[0].x + labelOffsetX,\n y: points[0].y + labelOffsetY\n },\n angle: labelAngle\n };\n } else if (position.includes('middle') || position.includes('Middle')) {\n return {\n position: {\n x: (points[0].x + points[points.length - 1].x) / 2 + labelOffsetX,\n y: (points[0].y + points[points.length - 1].y) / 2 + labelOffsetY\n },\n angle: labelAngle\n };\n }\n return {\n position: {\n x: points[points.length - 1].x + labelOffsetX,\n y: points[points.length - 1].y + labelOffsetY\n },\n angle: labelAngle\n };\n }\n\n protected getRotateByAngle(angle: number): number {\n const itemAngle = isPostiveXAxis(angle) ? angle : angle - Math.PI;\n return itemAngle + (this.attribute.label.refAngle ?? 0);\n }\n\n protected getTextStyle(position: IMarkLineLabelPosition, labelAngle: number, autoRotate: boolean) {\n // 垂直方向例外\n if (\n fuzzyEqualNumber(Math.abs(labelAngle), Math.PI / 2, FUZZY_EQUAL_DELTA) ||\n fuzzyEqualNumber(Math.abs(labelAngle), (Math.PI * 3) / 2, FUZZY_EQUAL_DELTA)\n ) {\n return getTextAlignAttrOfVerticalDir(autoRotate, labelAngle, position);\n }\n\n if (isPostiveXAxis(labelAngle)) {\n return DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP.postiveXAxis[position];\n }\n return DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP.negativeXAxis[position];\n }\n\n protected createSegment() {\n const { points, startSymbol, endSymbol, lineStyle, mainSegmentIndex, multiSegment, state } = this\n .attribute as MarkLineAttrs;\n return new Segment({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment,\n pickable: false, // 组件容器本身不参与拾取\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n\n protected setLineAttributes() {\n const { points, startSymbol, endSymbol, lineStyle, mainSegmentIndex, multiSegment, state } = this\n .attribute as MarkLineAttrs;\n if (this._line) {\n this._line.setAttributes({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkLineAttrs;\n if (!points || points.length < 2) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point | Point[]) => {\n if ((point as any).length) {\n (point as Point[]).forEach((p: Point) => {\n if (!isValidNumber((p as Point).x) || !isValidNumber((p as Point).y)) {\n validFlag = false;\n return;\n }\n });\n } else if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import type { IPoint } from '../../../typings';\n\nexport function getInsertPoints(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const points: IPoint[] = [];\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n switch (direction) {\n case 'top':\n points.push(start);\n points.push({\n x: start.x,\n y: dy > 0 ? start.y - offset - Math.abs(dy) : start.y - offset\n });\n points.push({\n x: end.x,\n y: dy > 0 ? end.y - offset : end.y - offset - Math.abs(dy)\n });\n points.push(end);\n break;\n case 'bottom':\n points.push(start);\n points.push({ x: start.x, y: dy < 0 ? start.y + offset + Math.abs(dy) : start.y + offset });\n points.push({ x: end.x, y: dy < 0 ? end.y + offset : end.y + offset + Math.abs(dy) });\n points.push(end);\n break;\n case 'left':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x - offset - Math.abs(dx) : start.x - offset,\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x - offset : end.x - offset - Math.abs(dx),\n y: end.y\n });\n points.push(end);\n break;\n case 'right':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x + offset : start.x + offset + Math.abs(dx),\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x + offset + Math.abs(dx) : end.x + offset,\n y: end.y\n });\n points.push(end);\n break;\n default:\n break;\n }\n return points;\n}\n\nexport function getTextOffset(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n if (direction === 'bottom') {\n return {\n dx: dx > 0 ? -dx / 2 : Math.abs(dx / 2),\n dy: dy > 0 ? offset : Math.abs(dy) + offset\n };\n }\n\n if (direction === 'top') {\n return {\n dx: dx > 0 ? -Math.abs(dx / 2) : +Math.abs(dx / 2),\n dy: dy > 0 ? -(Math.abs(dy) + offset) : -offset\n };\n }\n\n if (direction === 'left') {\n return {\n dx: dx > 0 ? -dx - offset : -offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n if (direction === 'right') {\n return {\n dx: dx > 0 ? offset : Math.abs(dx) + offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n return {};\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { IAggrType, IDataPointSpec, IDataPos, IMarkerSupportSeries } from '../../component/marker/interface';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { array, isArray, isFunction, isPlainObject, isString, isValid } from '@visactor/vutils';\nimport { variance, average, min, max, sum, standardDeviation, median } from '../../util/math';\nimport { isAggrSpec } from '../../component/marker/utils';\nimport type {\n IOption,\n IOptionAggr,\n IOptionAggrField,\n IOptionCallback,\n IOptionPos,\n IOptionWithCoordinates\n} from './interface';\n\nexport const markerMin = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return min(data, opt.field);\n};\nexport const markerMax = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return max(data, opt.field);\n};\n\nexport function markerSum(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return sum(data, opt.field);\n}\nexport function markerAverage(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return average(data, opt.field);\n}\n\nexport function markerVariance(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return variance(data, opt.field);\n}\n\nexport function markerStandardDeviation(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return standardDeviation(data, opt.field);\n}\n\nexport function markerMedian(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return median(data, opt.field);\n}\n\nexport function markerAggregation(_data: Array, options: IOptionWithCoordinates | IOptionAggr[]) {\n let markerSource: IOptionAggr[];\n if ((options as IOptionWithCoordinates).coordinates) {\n const {\n coordinates: coordinatesInOptions,\n coordinateType,\n getSeriesByIdOrIndex,\n ...rest\n } = options as IOptionWithCoordinates;\n let coordinates;\n if (isFunction(coordinatesInOptions)) {\n const relativeSeries = (options as IOptionWithCoordinates).getRelativeSeries();\n coordinates = coordinatesInOptions(relativeSeries.getData().getLatestData(), relativeSeries);\n } else {\n coordinates = coordinatesInOptions;\n }\n coordinates = array(coordinates);\n let option: IOptionAggr;\n\n markerSource = coordinates.map((coordinate: IDataPointSpec) => {\n const refRelativeSeries = getSeriesByIdOrIndex(coordinate.refRelativeSeriesId, coordinate.refRelativeSeriesIndex);\n\n if (coordinateType === 'cartesian') {\n const { xField, yField } = refRelativeSeries.getSpec();\n const { xFieldDim, xFieldIndex, yFieldDim, yFieldIndex } = coordinate;\n let bindXField = xField;\n if (isValid(xFieldIndex)) {\n bindXField = array(xField)[xFieldIndex];\n }\n if (xFieldDim && array(xField).includes(xFieldDim)) {\n bindXField = xFieldDim;\n }\n\n let bindYField = yField;\n if (isValid(yFieldIndex)) {\n bindYField = array(yField)[yFieldIndex];\n }\n if (yFieldDim && array(yField).includes(yFieldDim)) {\n bindYField = yFieldDim;\n }\n\n option = {\n x: undefined,\n y: undefined,\n ...rest\n };\n\n if (isString(coordinate[bindXField]) && isAggrSpec(coordinate[bindXField] as IDataPos)) {\n option.x = { field: bindXField, aggrType: coordinate[bindXField] as IAggrType };\n } else {\n option.x = array(bindXField).map(field => coordinate[field]) as StringOrNumber[];\n }\n\n if (isString(coordinate[bindYField]) && isAggrSpec(coordinate[bindYField] as IDataPos)) {\n option.y = { field: bindYField, aggrType: coordinate[bindYField] as IAggrType };\n } else {\n option.y = array(bindYField).map(field => coordinate[field]) as StringOrNumber[];\n }\n } else if (coordinateType === 'polar') {\n const { valueField: radiusField, categoryField: angleField } = refRelativeSeries.getSpec();\n const { angleFieldDim, angleFieldIndex } = coordinate;\n let bindAngleField = angleField;\n if (isValid(angleFieldIndex)) {\n bindAngleField = array(angleField)[angleFieldIndex];\n }\n if (angleFieldDim && array(angleField).includes(angleFieldDim)) {\n bindAngleField = angleFieldDim;\n }\n\n const bindRadiusField = radiusField;\n\n option = {\n angle: undefined,\n radius: undefined,\n ...rest\n };\n\n if (isString(coordinate[bindAngleField]) && isAggrSpec(coordinate[bindAngleField] as IDataPos)) {\n option.angle = { field: bindAngleField, aggrType: coordinate[bindAngleField] as IAggrType };\n } else {\n option.angle = array(bindAngleField).map(field => coordinate[field]) as StringOrNumber[];\n }\n\n if (isString(coordinate[bindRadiusField]) && isAggrSpec(coordinate[bindRadiusField] as IDataPos)) {\n option.radius = { field: bindRadiusField, aggrType: coordinate[bindRadiusField] as IAggrType };\n } else {\n option.radius = array(bindRadiusField).map(field => coordinate[field]) as StringOrNumber[];\n }\n }\n\n option.getRefRelativeSeries = () => refRelativeSeries;\n return option;\n });\n } else {\n markerSource = options as IOptionAggr[];\n }\n\n const results: {\n x: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n y: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n angle: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n radius: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n areaName: string | IOptionCallback | null;\n }[] = [];\n markerSource.forEach(option => {\n const result: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n angle: StringOrNumber[] | StringOrNumber | null;\n radius: StringOrNumber[] | StringOrNumber | null;\n areaName: string | null;\n getRefRelativeSeries?: () => IMarkerSupportSeries;\n } = { x: null, y: null, angle: null, radius: null, areaName: null };\n\n if (isValid(option.x)) {\n const x = option.x;\n\n if (isArray(x)) {\n result.x = x.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.x = getFinalValue(x, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.y)) {\n const y = option.y;\n if (isArray(y)) {\n result.y = y.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.y = getFinalValue(y, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.angle)) {\n const angle = option.angle;\n if (isArray(angle)) {\n result.angle = angle.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.angle = getFinalValue(angle, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.radius)) {\n const radius = option.radius;\n if (isArray(radius)) {\n result.radius = radius.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.radius = getFinalValue(radius, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.areaName)) {\n const name = option.areaName;\n result.areaName = getFinalValue(name, _data, option) as string;\n }\n if (option.getRefRelativeSeries) {\n result.getRefRelativeSeries = option.getRefRelativeSeries;\n }\n results.push(result);\n });\n\n return results;\n}\n\nconst aggrMap = {\n min: markerMin,\n max: markerMax,\n sum: markerSum,\n average: markerAverage,\n variance: markerVariance,\n standardDeviation: markerStandardDeviation,\n median: markerMedian\n};\n\nfunction getFinalValue(source: IOptionPos | IOptionCallback, _data: Array, option: IOptionAggr) {\n const relativeSeries = option.getRelativeSeries();\n const startSeries = option.getStartRelativeSeries();\n const endSeries = option.getEndRelativeSeries();\n const relativeSeriesData = relativeSeries.getData().getLatestData();\n const startRelativeSeriesData = startSeries.getData().getLatestData();\n const endRelativeSeriesData = endSeries.getData().getLatestData();\n\n if (isFunction(source)) {\n return source(\n relativeSeriesData,\n startRelativeSeriesData,\n endRelativeSeriesData,\n relativeSeries,\n startSeries,\n endSeries\n ) as StringOrNumber[] | StringOrNumber;\n }\n if (isPlainObject(source)) {\n const { aggrType, field } = source as IOptionAggrField;\n return aggrMap[aggrType](_data, { field: field });\n }\n\n return source;\n}\n","import type { ICartesianSeries } from '../../series/interface/series';\n\nexport interface IMarkerFilterOptions {\n getRelativeSeries: () => ICartesianSeries;\n}\n\nexport function markerFilter(data: Array, options: IMarkerFilterOptions) {\n if (options && options.getRelativeSeries) {\n const series = options.getRelativeSeries();\n\n if (series) {\n const viewData = series.getViewData();\n return viewData && viewData.latestData && viewData.latestData.length ? data : [];\n }\n }\n\n return data;\n}\n","import { DataSet, DataView } from '@visactor/vdataset';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid, isNil, isString, isEqual } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { CoordinateType, ILayoutRect, ILayoutType, IRect, StringOrNumber } from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type {\n IAggrType,\n IDataPos,\n IDataPosCallback,\n IMarkerAttributeContext,\n IMarkerSpec,\n IMarkerSupportSeries,\n IMarkProcessOptions\n} from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { calcLayoutNumber } from '../../util/space';\nimport { isAggrSpec } from './utils';\nimport { getFirstSeries } from '../../util';\nimport { arrayParser } from '../../data/parser/array';\nimport { getSpecInfo } from '../util';\nimport type { IOptionWithCoordinates } from '../../data/transforms/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { markerAggregation } from '../../data/transforms/aggregation';\nimport { markerFilter } from '../../data/transforms/marker-filter';\n\nexport abstract class BaseMarker extends BaseComponent {\n layoutType: ILayoutType | 'none' = 'none';\n\n // 下面三个属性需要子组件复写\n static specKey: string;\n static type: string;\n static coordinateType: string;\n coordinateType: CoordinateType;\n\n protected _startRelativeSeries!: IMarkerSupportSeries;\n protected _endRelativeSeries!: IMarkerSupportSeries;\n protected _relativeSeries!: IMarkerSupportSeries;\n protected _specifiedDataSeries!: IMarkerSupportSeries | IMarkerSupportSeries[];\n getRelativeSeries() {\n return this._relativeSeries;\n }\n\n // marker 组件数据\n protected _markerData!: DataView;\n getMarkerData() {\n return this._markerData;\n }\n // marker 组件\n protected _markerComponent!: any;\n\n protected _layoutOffsetX: number = 0;\n protected _layoutOffsetY: number = 0;\n\n private _firstSeries: ICartesianSeries;\n\n protected abstract _initDataView(): void;\n protected abstract _createMarkerComponent(): IGroup;\n protected abstract _markerLayout(): void;\n protected abstract _computeOptions(): IMarkProcessOptions;\n // 该方法需要子组件复写\n static _getMarkerCoordinateType(markerSpec: any): string {\n return 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IMarkerSpec) => {\n return s.visible !== false && this._getMarkerCoordinateType(s) === this.coordinateType;\n });\n }\n\n protected _markAttributeContext: IMarkerAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkerAttributeContext() {\n this._markAttributeContext = {\n relativeSeries: this._relativeSeries,\n startRelativeSeries: this._startRelativeSeries,\n endRelativeSeries: this._endRelativeSeries,\n vchart: this._option.globalInstance\n };\n }\n\n created() {\n super.created();\n this._bindSeries();\n this._initDataView();\n this.initEvent();\n this._buildMarkerAttributeContext();\n }\n\n protected _getAllRelativeSeries() {\n return {\n getRelativeSeries: () => this._relativeSeries,\n getStartRelativeSeries: () => this._startRelativeSeries,\n getEndRelativeSeries: () => this._endRelativeSeries\n };\n }\n\n private _getFieldInfoFromSpec(\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName',\n spec: IDataPos | IDataPosCallback,\n relativeSeries: IMarkerSupportSeries\n ) {\n const specKeyByDim = {\n x: 'xField',\n y: 'yField',\n radius: 'valueField',\n angle: 'categoryField',\n areaName: 'nameField'\n };\n\n if (isString(spec) && isAggrSpec(spec)) {\n return {\n field: relativeSeries.getSpec()[specKeyByDim[dim]],\n aggrType: spec as unknown as IAggrType\n };\n }\n return spec;\n }\n\n protected _processSpecByDims(\n dimSpec: {\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName';\n specValue: IDataPos | IDataPosCallback;\n }[]\n ) {\n const relativeSeries = this._relativeSeries;\n const dimMap = {};\n dimSpec.forEach(d => (dimMap[d.dim] = this._getFieldInfoFromSpec(d.dim, d.specValue, relativeSeries)));\n return {\n ...dimMap,\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecCoo(spec: any): IOptionWithCoordinates {\n return {\n coordinates: spec.coordinates || spec.coordinate,\n ...this._getAllRelativeSeries(),\n getSeriesByIdOrIndex: (seriesUserId: StringOrNumber, seriesIndex: number) =>\n this._getSeriesByIdOrIndex(seriesUserId, seriesIndex),\n coordinateType: this.coordinateType\n };\n }\n\n protected _getRelativeDataView() {\n if (this._specifiedDataSeries) {\n let resultData: any[] = [];\n array(this._specifiedDataSeries).forEach(series => {\n resultData = resultData.concat(series.getViewData().latestData);\n });\n const dataSet = new DataSet();\n dataSet.registerParser('array', arrayParser);\n return new DataView(dataSet).parse(resultData, { type: 'array' });\n }\n return this._relativeSeries.getViewData();\n }\n\n updateLayoutAttribute(): void {\n const markerVisible = this._spec.visible ?? true;\n if (markerVisible) {\n // 创建marker组件\n if (!this._markerComponent) {\n const markerComponent = this._createMarkerComponent();\n markerComponent.name = this._spec.name ?? this.type;\n markerComponent.id = this._spec.id ?? `${this.type}-${this.id}`;\n this._markerComponent = markerComponent;\n\n this.getContainer().add(this._markerComponent);\n // 代理 marker 组件上的事件\n this._markerComponent.on('*', (event: any, type: string) => {\n this._delegateEvent(\n this._markerComponent as unknown as IGraphic,\n event,\n type,\n null,\n this.getMarkerData.bind(this)\n );\n });\n }\n this._markerLayout();\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getSeriesByIdOrIndex(seriesUserId: StringOrNumber, seriesIndex: number) {\n let series: IMarkerSupportSeries;\n series = this._option.getSeriesInUserIdOrIndex(isValid(seriesUserId) ? [seriesUserId] : [], [\n seriesIndex\n ])?.[0] as IMarkerSupportSeries;\n if (!series) {\n series = this._relativeSeries ?? this._getFirstSeries();\n }\n return series;\n }\n\n protected _bindSeries() {\n const spec: any = this._spec;\n this._relativeSeries = this._getSeriesByIdOrIndex(spec.relativeSeriesId, spec.relativeSeriesIndex);\n this._startRelativeSeries = this._getSeriesByIdOrIndex(spec.startRelativeSeriesId, spec.startRelativeSeriesIndex);\n this._endRelativeSeries = this._getSeriesByIdOrIndex(spec.endRelativeSeriesId, spec.endRelativeSeriesIndex);\n if (\n (spec.specifiedDataSeriesIndex && spec.specifiedDataSeriesIndex === 'all') ||\n (spec.specifiedDataSeriesId && spec.specifiedDataSeriesId === 'all')\n ) {\n this._specifiedDataSeries = this._option.getAllSeries() as IMarkerSupportSeries[];\n } else if (spec.specifiedDataSeriesIndex || spec.specifiedDataSeriesId) {\n this._specifiedDataSeries = this._getSeriesByIdOrIndex(spec.specifiedDataSeriesId, spec.specifiedDataSeriesIndex);\n }\n }\n\n protected initEvent() {\n // 在极坐标系/地理坐标系中, 滚动或缩放画布不会update layout, 所以需要通过事件监听来更新标注的位置\n // 在直角坐标系中, update layout中已经更新标注位置, 在这里不需要重复监听\n if (this._relativeSeries.coordinate !== 'cartesian') {\n this._relativeSeries.event.on('zoom', this._markerLayout.bind(this));\n this._relativeSeries.event.on('panmove', this._markerLayout.bind(this));\n this._relativeSeries.event.on('scroll', this._markerLayout.bind(this));\n }\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n clear(): void {\n super.clear();\n this._firstSeries = null;\n }\n\n private _getFirstSeries(): ICartesianSeries {\n if (this._firstSeries) {\n return this._firstSeries;\n }\n const firstSeries = getFirstSeries(this._regions) as ICartesianSeries;\n if (firstSeries) {\n this._firstSeries = firstSeries;\n return firstSeries;\n }\n this._option?.onError('need at least one series');\n return null;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._markerComponent] as unknown as IGroup[];\n }\n\n onLayoutStart(layoutRect: IRect, chartViewRect: ILayoutRect, ctx: any): void {\n // offset\n if (!isNil(this._spec.offsetX)) {\n this._layoutOffsetX = calcLayoutNumber(this._spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(this._spec.offsetY)) {\n this._layoutOffsetY = calcLayoutNumber(this._spec.offsetY, chartViewRect.height, chartViewRect);\n }\n super.onLayoutStart(layoutRect, chartViewRect, ctx);\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n result.change = true;\n }\n return result;\n }\n\n _initCommonDataView() {\n const { options } = this._computeOptions();\n\n const seriesData = this._getRelativeDataView();\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { regression } from '../../util/math';\nimport type { IOptionRegr } from './interface';\n\nexport function markerRegression(_data: Array, opt: IOptionRegr) {\n const data = _data[0].latestData;\n\n return regression(data, opt.fieldX, opt.fieldY);\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IMarkLine, IMarkLineSpec } from './interface';\nimport { markerAggregation } from '../../../data/transforms/aggregation';\nimport {\n computeClipRange,\n transformLabelAttributes,\n transformState,\n transformStyle,\n getMarkLineProcessInfo\n} from '../utils';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { MarkArcLineAttrs, MarkLineAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkLine as MarkLineComponent, MarkArcLine as MarkArcLineComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { IMarkerSymbol } from '../interface';\nimport { markerRegression } from '../../../data/transforms/regression';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport { markerFilter } from '../../../data/transforms/marker-filter';\n\nexport abstract class BaseMarkLine extends BaseMarker implements IMarkLine {\n static specKey = 'markLine';\n specKey = 'markLine';\n layoutZIndex: number = LayoutZIndex.MarkLine;\n\n // eslint-disable-next-line max-len\n protected abstract _newMarkLineComponent(\n attr: MarkLineAttrs | MarkArcLineAttrs\n ): MarkLineComponent | MarkArcLineComponent;\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doAngleProcess, doRadiusProcess, doAngRadRad1Process, doRadAngAng1Process, doRadAngProcess } =\n getMarkLineProcessInfo(markerSpec);\n\n if (\n markerSpec.coordinateType === 'polar' ||\n doAngleProcess ||\n doRadiusProcess ||\n doAngRadRad1Process ||\n doRadAngAng1Process ||\n doRadAngProcess\n ) {\n return 'polar';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const {\n label = {},\n startSymbol = {} as IMarkerSymbol,\n endSymbol = {} as IMarkerSymbol\n } = this._spec as IMarkLineSpec;\n\n const markLineAttrs: MarkLineAttrs | MarkArcLineAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ],\n center: {\n x: 0,\n y: 0\n },\n radius: 0,\n startAngle: 0,\n endAngle: 0,\n lineStyle: transformStyle(\n transformToGraphic(this._spec.line?.style),\n this._markerData,\n this._markAttributeContext\n ),\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label, this._markerData, this._markAttributeContext),\n state: {\n line: transformState(this._spec.line?.state ?? {}, this._markerData, this._markAttributeContext),\n lineStartSymbol: transformState(\n this._spec.startSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n lineEndSymbol: transformState(this._spec.endSymbol?.state ?? {}, this._markerData, this._markAttributeContext),\n label: transformState(this._spec?.label?.state ?? {}, this._markerData, this._markAttributeContext),\n labelBackground: transformState(\n this._spec?.label?.labelBackground?.state ?? {},\n this._markerData,\n this._markAttributeContext\n )\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n if (startSymbol.visible) {\n markLineAttrs.startSymbol = {\n ...startSymbol,\n visible: true,\n style: transformStyle(transformToGraphic(startSymbol.style), this._markerData, this._markAttributeContext)\n };\n } else {\n markLineAttrs.startSymbol = {\n visible: false\n };\n }\n\n if (endSymbol.visible) {\n markLineAttrs.endSymbol = {\n ...endSymbol,\n visible: true,\n style: transformStyle(transformToGraphic(endSymbol.style), this._markerData, this._markAttributeContext)\n };\n } else {\n markLineAttrs.endSymbol = {\n visible: false\n };\n }\n const markLine = this._newMarkLineComponent(markLineAttrs);\n return markLine as unknown as IGroup;\n }\n\n protected _getUpdateMarkerAttrs() {\n const spec = this._spec;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const pointsAttr = this._computePointsAttr();\n\n const seriesData = relativeSeries.getViewData().latestData;\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n const markerComponentAttr = this._markerComponent?.attribute ?? {};\n const labelAttrs = {\n ...markerComponentAttr.label,\n text: this._spec.label.formatMethod\n ? this._spec.label.formatMethod(dataPoints, seriesData)\n : markerComponentAttr.label?.text\n };\n\n return {\n ...pointsAttr,\n label: labelAttrs as MarkLineComponent['attribute']['label'],\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n };\n }\n\n protected _markerLayout() {\n const updateAttrs = this._getUpdateMarkerAttrs();\n this._markerComponent?.setAttributes(updateAttrs);\n }\n\n protected _initDataView(): void {\n const spec = this._spec;\n const isCoordinateProcess = 'coordinates' in spec;\n\n const {\n doXProcess,\n doYProcess,\n doXYY1Process,\n doYXX1Process,\n doXYProcess,\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess\n } = getMarkLineProcessInfo(spec);\n this._markerData = this._getRelativeDataView();\n\n if (\n !doXProcess &&\n !doYProcess &&\n !doXYY1Process &&\n !doYXX1Process &&\n !doXYProcess &&\n !doAngleProcess &&\n !doRadiusProcess &&\n !doAngRadRad1Process &&\n !doRadAngAng1Process &&\n !doRadAngProcess &&\n !isCoordinateProcess\n ) {\n return;\n }\n\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerRegression', markerRegression);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n\n const { options, needAggr, needRegr, processData } = this._computeOptions();\n\n const data = new DataView(this._option.dataSet);\n data.parse([processData], {\n type: 'dataview'\n });\n if (needAggr) {\n data.transform({\n type: 'markerAggregation',\n options\n });\n }\n if (needRegr) {\n data.transform({\n type: 'markerRegression',\n options\n });\n }\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IStepMarkLineSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates, IOptionRegr } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, positionLayout, xyLayout, getMarkLineProcessInfo } from '../utils';\nimport {\n type MarkLineAttrs,\n MarkLine as MarkLineComponent,\n registerMarkLineAnimate\n} from '@visactor/vrender-components';\nimport { isValid, isValidNumber } from '@visactor/vutils';\nimport type { IDataPos, IMarkProcessOptions } from '../interface';\nimport { getInsertPoints, getTextOffset } from './util';\nimport { Factory } from '../../../core/factory';\nimport { isPercent } from '../../../util';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport { BaseMarkLine } from './base-mark-line';\n\nexport class CartesianMarkLine extends BaseMarkLine {\n static type = ComponentTypeEnum.markLine;\n type = ComponentTypeEnum.markLine;\n name: string = ComponentTypeEnum.markLine;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected declare _markerComponent: MarkLineComponent;\n\n protected _newMarkLineComponent(attr: MarkLineAttrs): MarkLineComponent {\n return new MarkLineComponent(attr);\n }\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const isValidCoordinates = isValid(spec.coordinates);\n const isValidProcess = isValid(spec.process);\n const isValidProcessX = isValidProcess && isValid(spec.process.x);\n const isValidProcessY = isValidProcess && isValid(spec.process.y);\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n const { doXProcess, doYProcess, doXYY1Process, doYXX1Process, doXYProcess, doCoordinatesProcess } =\n getMarkLineProcessInfo(spec);\n\n let points: IPoint[] = [];\n if (\n doXProcess ||\n doXYY1Process ||\n doYProcess ||\n doYXX1Process ||\n doXYProcess ||\n (isValidCoordinates && isValidProcessX) ||\n (isValidCoordinates && isValidProcessY)\n ) {\n const xyPoints = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 这里不同的场景返回的值不同,如果同时声明了 x x1 y y1,会返回两个数值的数组(如 [[{}], [{}]]),所以需要分别处理下\n points = (xyPoints.length === 1 ? xyPoints[0] : xyPoints.map(point => point[0])) as IPoint[];\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n return { points };\n }\n\n protected _markerLayout() {\n const updateAttrs = this._getUpdateMarkerAttrs();\n\n if ((this._spec as IStepMarkLineSpec).type === 'type-step') {\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n\n const { multiSegment, mainSegmentIndex } = (this._spec as IStepMarkLineSpec).line || {};\n const { connectDirection, expandDistance = 0 } = this._spec as IStepMarkLineSpec;\n\n let expandDistanceValue: number;\n if (isPercent(expandDistance)) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n if (connectDirection === 'bottom' || connectDirection === 'top') {\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionHeight) / 100;\n } else {\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionWidth) / 100;\n }\n } else {\n expandDistanceValue = expandDistance as number;\n }\n const { points, label, limitRect } = updateAttrs;\n\n const joinPoints = getInsertPoints(\n (points as IPoint[])[0],\n (points as IPoint[])[1],\n connectDirection,\n expandDistanceValue\n );\n\n let labelPositionAttrs: any;\n if (multiSegment && isValid(mainSegmentIndex)) {\n // 如果用户配置了主线段,则不进行 label 的偏移处理,直接显示在主线段中间\n labelPositionAttrs = {\n position: 'middle',\n autoRotate: false,\n refX: 0,\n refY: 0\n };\n } else {\n labelPositionAttrs = {\n position: 'start',\n autoRotate: false,\n ...getTextOffset((points as IPoint[])[0], (points as IPoint[])[1], connectDirection, expandDistanceValue),\n refX: 0,\n refY: 0\n };\n }\n\n if (isValidNumber(this._spec.label?.refX)) {\n labelPositionAttrs.refX += this._spec.label.refX;\n }\n if (isValidNumber(this._spec.label?.refY)) {\n labelPositionAttrs.refY += this._spec.label.refY;\n }\n if (isValidNumber(this._spec.label?.dx)) {\n labelPositionAttrs.dx = (labelPositionAttrs.dx || 0) + this._spec.label.dx;\n }\n if (isValidNumber(this._spec.label?.dy)) {\n labelPositionAttrs.dy = (labelPositionAttrs.dy || 0) + this._spec.label.dy;\n }\n const markerComponentAttr = this._markerComponent?.attribute ?? {};\n this._markerComponent?.setAttributes({\n points: multiSegment\n ? [\n [joinPoints[0], joinPoints[1]],\n [joinPoints[1], joinPoints[2]],\n [joinPoints[2], joinPoints[3]]\n ]\n : joinPoints,\n label: {\n ...label,\n ...labelPositionAttrs,\n textStyle: {\n ...markerComponentAttr.label.textStyle,\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n limitRect,\n multiSegment,\n mainSegmentIndex,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n } as any);\n } else {\n this._markerComponent?.setAttributes(updateAttrs);\n }\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n let options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n let processData: DataView = this._getRelativeDataView();\n let needAggr: boolean = true;\n let needRegr: boolean = false;\n const spec: any = this._spec;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYY1Process, doYXX1Process, doXYProcess, doCoordinatesProcess } =\n getMarkLineProcessInfo(spec);\n\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [this._processSpecByDims([{ dim: 'x', specValue: spec.x }])];\n } else if (doYProcess) {\n options = [this._processSpecByDims([{ dim: 'y', specValue: spec.y }])];\n } else if (doXYY1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doYXX1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y }\n ])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n needAggr = false;\n processData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` })\n .parse([relativeSeries.getViewData()], {\n type: 'dataview'\n })\n .transform({\n type: 'markerAggregation',\n options\n });\n if (spec.process && 'x' in spec.process) {\n options = [this._processSpecByDims([{ dim: 'x', specValue: spec.process.x as unknown as IDataPos }])];\n needAggr = true;\n }\n if (spec.process && 'y' in spec.process) {\n options = options = [this._processSpecByDims([{ dim: 'y', specValue: spec.process.y as unknown as IDataPos }])];\n needAggr = true;\n }\n if (spec.process && 'xy' in spec.process) {\n const { xField, yField } = relativeSeries.getSpec();\n options = {\n fieldX: xField,\n fieldY: yField\n };\n needRegr = true;\n }\n } else {\n needAggr = false;\n }\n return { options, needAggr, needRegr, processData };\n }\n}\n\nexport const registerMarkLine = () => {\n Factory.registerComponent(CartesianMarkLine.type, CartesianMarkLine);\n registerMarkLineAnimate();\n};\n","/**\n * @description 标签组件\n */\nimport { isEmpty, merge } from '@visactor/vutils';\nimport type { IArc } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { ArcSegmentAttributes, SymbolAttributes } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadArcSegmentComponent } from './register';\nimport { Segment } from './segment';\n\nloadArcSegmentComponent();\nexport class ArcSegment extends Segment {\n name = 'arc-segment';\n key = 'arc-segment';\n line?: IArc;\n isReverseArc: boolean = false;\n\n constructor(attributes: ArcSegmentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Segment.defaultAttributes, attributes));\n }\n\n /**\n * 外部获取segment起点切线正方向\n */\n getStartAngle() {\n // 如果是顺时针弧, start切线方向 = 弧度方向 - Math.PI / 2, 反之相反\n const tangAng = this.isReverseArc ? this._startAngle + Math.PI / 2 : this._startAngle - Math.PI / 2;\n\n // 经过刚刚的计算角度范围: [0, 360] => [-90, 270] 或 [0, 450]\n // 将其规范范围到[0, 360]\n return tangAng < 0 ? tangAng + Math.PI * 2 : tangAng > Math.PI * 2 ? tangAng - Math.PI * 2 : tangAng;\n }\n\n /**\n * 外部获取segment终点切线正方向\n */\n getEndAngle() {\n // 如果是顺时针弧, end切线方向 = 弧度方向 + Math.PI / 2, 反之相反\n const tangAng = this.isReverseArc ? this._endAngle - Math.PI / 2 : this._endAngle + Math.PI / 2;\n\n // 经过刚刚的计算角度范围: [0, 360] => [-90, 270] 或 [0, 450]\n // 将其规范范围到[0, 360]\n return tangAng < 0 ? tangAng + Math.PI * 2 : tangAng > Math.PI * 2 ? tangAng - Math.PI * 2 : tangAng;\n }\n\n getMainSegmentPoints() {\n return this._mainSegmentPoints;\n }\n\n protected _computeStartRotate(angle: number) {\n return this.isReverseArc ? angle + Math.PI : angle;\n }\n\n protected _computeEndRotate(angle: number) {\n return this.isReverseArc ? angle : angle + Math.PI;\n }\n\n protected render() {\n this.removeAllChild(true);\n this._reset();\n const {\n // points,\n startSymbol,\n endSymbol,\n lineStyle,\n state,\n visible = true,\n radius,\n startAngle,\n endAngle,\n center\n } = this.attribute as ArcSegmentAttributes;\n\n if (!visible) {\n return;\n }\n\n this._startAngle = startAngle;\n this._endAngle = endAngle;\n this.isReverseArc = startAngle > endAngle;\n\n // 绘制start和end symbol\n const startPoint: Point = {\n x: center.x + radius * Math.cos(this._startAngle),\n y: center.y + radius * Math.sin(this._startAngle)\n };\n const endPoint: Point = {\n x: center.x + radius * Math.cos(this._endAngle),\n y: center.y + radius * Math.sin(this._endAngle)\n };\n this._mainSegmentPoints = [startPoint, endPoint];\n\n const startSymbolShape = this._renderSymbol(startSymbol as SymbolAttributes, this._mainSegmentPoints, 'start');\n const endSymbolShape = this._renderSymbol(endSymbol as SymbolAttributes, this._mainSegmentPoints, 'end');\n\n this.startSymbol = startSymbolShape;\n this.endSymbol = endSymbolShape;\n\n const line = graphicCreator.arc({\n x: center.x,\n y: center.y,\n // startAngle: Math.PI + 0.5,\n // endAngle: 0,\n startAngle,\n endAngle,\n innerRadius: radius,\n outerRadius: radius,\n ...lineStyle\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('arc');\n if (!isEmpty(state?.line)) {\n line.states = [].concat(state.line)[0];\n }\n this.add(line);\n this.line = line;\n }\n}\n","import { merge } from '@visactor/vutils';\nimport { ArcSegment } from '../segment';\nimport { loadMarkArcLineComponent } from './register';\nimport { DEFAULT_STATES } from '../constant';\nimport { MarkCommonLine } from './common-line';\nimport type { ComponentOptions } from '../interface';\nimport type { IArcGraphicAttribute } from '@visactor/vrender-core';\nimport { IMarkCommonArcLabelPosition } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkArcLineAttrs, MarkerAnimationState } from './type';\nimport { DEFAULT_MARK_ARC_LINE_THEME, DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP } from './config';\nimport { markCommonLineAnimate } from './animate/animate';\n\nloadMarkArcLineComponent();\n\nexport function registerMarkArcLineAnimate() {\n MarkArcLine._animate = markCommonLineAnimate;\n}\nexport class MarkArcLine extends MarkCommonLine {\n name = 'markArcLine';\n // eslint-disable-next-line max-len\n static defaultAttributes: Partial = DEFAULT_MARK_ARC_LINE_THEME as unknown as MarkArcLineAttrs;\n protected _line!: ArcSegment;\n\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArcLine._animate && this._animationConfig) {\n MarkArcLine._animate(this._line, this._label, this._animationConfig, state);\n }\n }\n\n constructor(attributes: MarkArcLineAttrs, options?: ComponentOptions) {\n // eslint-disable-next-line max-len\n super(\n options?.skipDefault\n ? attributes\n : merge({}, MarkArcLine.defaultAttributes, attributes, { label: { autoRotate: true } })\n );\n }\n\n protected getPointAttrByPosition(direction: IMarkCommonArcLabelPosition) {\n const { center, radius, startAngle, endAngle, label } = this.attribute as MarkArcLineAttrs;\n const { refX = 0, refY = 0 } = label;\n let angle;\n\n switch (direction) {\n case IMarkCommonArcLabelPosition.arcInnerStart:\n angle = startAngle;\n case IMarkCommonArcLabelPosition.arcOuterStart:\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerEnd:\n angle = endAngle;\n case IMarkCommonArcLabelPosition.arcOuterEnd:\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.center:\n case IMarkCommonArcLabelPosition.arcInnerMiddle:\n case IMarkCommonArcLabelPosition.arcOuterMiddle:\n angle = (startAngle + endAngle) / 2;\n break;\n default: // default arcInnerMiddle\n angle = (startAngle + endAngle) / 2;\n }\n\n return {\n position: {\n x: center.x + (radius + refY) * Math.cos(angle) + refX * Math.cos(angle - Math.PI / 2),\n y: center.y + (radius + refY) * Math.sin(angle) + refX * Math.sin(angle - Math.PI / 2)\n },\n angle\n };\n }\n\n protected getTextStyle(position: IMarkCommonArcLabelPosition) {\n return DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP[position];\n }\n\n protected getRotateByAngle(angle: number): number {\n return angle - Math.PI / 2 + (this.attribute.label.refAngle ?? 0);\n }\n\n protected createSegment() {\n const { center, radius, startAngle, endAngle, startSymbol, endSymbol, lineStyle, state } = this\n .attribute as MarkArcLineAttrs;\n return new ArcSegment({\n center,\n radius,\n startAngle,\n endAngle,\n startSymbol,\n endSymbol,\n lineStyle,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n\n protected setLineAttributes() {\n const { center, radius, startAngle, endAngle, startSymbol, endSymbol, lineStyle, state } = this\n .attribute as MarkArcLineAttrs;\n if (this._line) {\n (this._line as any).setAttributes({\n center,\n radius,\n startAngle,\n endAngle,\n startSymbol,\n endSymbol,\n lineStyle,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n }\n\n protected isValidPoints() {\n return true;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IOptionAggr, IOptionWithCoordinates, IOptionRegr } from '../../../data/transforms/interface';\nimport { polarLayout, getMarkLineProcessInfo, polarCoordinateLayout } from '../utils';\nimport type { MarkArcLineAttrs, MarkLineAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n MarkArcLine as MarkArcLineComponent,\n MarkLine as MarkLineComponent,\n registerMarkArcLineAnimate,\n registerMarkLineAnimate\n} from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint, IPolarPoint } from '../../../typings';\nimport type { IPolarSeries } from 'src/series';\nimport { BaseMarkLine } from './base-mark-line';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class PolarMarkLine extends BaseMarkLine {\n static type = ComponentTypeEnum.polarMarkLine;\n type = ComponentTypeEnum.polarMarkLine;\n name: string = ComponentTypeEnum.polarMarkLine;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected declare _markerComponent: MarkArcLineComponent;\n\n protected _newMarkLineComponent(attr: MarkArcLineAttrs | MarkLineAttrs): MarkArcLineComponent | MarkLineComponent {\n const { doRadiusProcess, doRadAngAng1Process } = getMarkLineProcessInfo(this._spec as any);\n const isArcLine = doRadiusProcess || doRadAngAng1Process;\n return isArcLine\n ? new MarkArcLineComponent(attr as MarkArcLineAttrs)\n : new MarkLineComponent(attr as MarkLineAttrs);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n const autoRange = spec.autoRange ?? false;\n\n const {\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkLineProcessInfo(spec);\n\n let points: IPolarPoint[] = [];\n let pointsAttr: {\n points?: IPoint[];\n radius?: number;\n startAngle?: number;\n endAngle?: number;\n center?: IPoint;\n } = {};\n\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n\n if (doAngleProcess || doRadiusProcess || doAngRadRad1Process || doRadAngAng1Process || doRadAngProcess) {\n const polarPoints = polarLayout(\n data,\n startRelativeSeries as IPolarSeries,\n endRelativeSeries as IPolarSeries,\n relativeSeries as IPolarSeries,\n autoRange\n );\n\n points = (polarPoints.length === 1 ? polarPoints[0] : polarPoints.map(point => point[0])) as IPolarPoint[];\n\n if (points[0].radius === points[1].radius) {\n pointsAttr = {\n radius: points[0].radius,\n startAngle: points[0].angle,\n endAngle: points[1].angle,\n center\n };\n } else {\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n } else if (doCoordinatesProcess) {\n points = polarCoordinateLayout(data, relativeSeries, autoRange);\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n return pointsAttr;\n }\n\n protected _computeOptions(): any {\n const spec = this._spec as any;\n const {\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkLineProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n const processData: DataView = this._getRelativeDataView();\n const needAggr: boolean = true;\n const needRegr: boolean = false;\n\n if (doRadAngProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doAngleProcess) {\n options = [this._processSpecByDims([{ dim: 'angle', specValue: spec.angle }])];\n } else if (doRadiusProcess) {\n options = [this._processSpecByDims([{ dim: 'radius', specValue: spec.radius }])];\n } else if (doAngRadRad1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doRadAngAng1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius }\n ])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options, needAggr, needRegr, processData };\n }\n}\n\nexport const registerPolarMarkLine = () => {\n Factory.registerComponent(PolarMarkLine.type, PolarMarkLine);\n registerMarkArcLineAnimate();\n registerMarkLineAnimate();\n};\n","import { registerGroup, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadTitleComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRichTextCharacter } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isArray } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TitleAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTitleComponent } from './register';\n\nloadTitleComponent();\nexport class Title extends AbstractComponent> {\n name = 'title';\n\n private _mainTitle?: IText | IRichText;\n private _subTitle?: IText | IRichText;\n\n static defaultAttributes: Partial = {\n textStyle: {\n ellipsis: '...',\n fill: '#333',\n fontSize: 20,\n fontWeight: 'bold',\n textAlign: 'left',\n textBaseline: 'top'\n },\n subtextStyle: {\n ellipsis: '...',\n fill: '#6F6F6F',\n fontSize: 16,\n fontWeight: 'normal',\n textAlign: 'left',\n textBaseline: 'top'\n }\n };\n\n constructor(attributes: TitleAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Title.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n textType,\n text,\n subtextType,\n textStyle = {},\n subtext,\n subtextStyle = {},\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n align,\n verticalAlign,\n padding = 0\n } = this.attribute as TitleAttrs;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild(\n 'title-container',\n { x: parsedPadding[3], y: parsedPadding[0], zIndex: 1 },\n 'group'\n ) as IGroup;\n\n if (this.attribute.visible !== false && textStyle.visible !== false) {\n const {\n width: mainTitleWidth,\n height: mainTitleHeight,\n maxHeight: mainTitleMaxHeight,\n maxWidth: mainTitleMaxWidth,\n x = 0,\n y = 0,\n ellipsis = true,\n wordBreak = 'break-word',\n maxWidth,\n lineClamp\n } = textStyle;\n if (textType === 'rich' || isValid(textStyle.character)) {\n const attr = {\n x,\n y,\n width: mainTitleWidth ?? width ?? 0,\n height: mainTitleHeight ?? height ?? 0,\n ellipsis: ellipsis ?? true,\n wordBreak: wordBreak ?? 'break-word',\n maxHeight: mainTitleMaxHeight ?? maxHeight,\n maxWidth: mainTitleMaxWidth ?? maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: textStyle.character ?? (text as IRichTextCharacter[]),\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (textType === 'html') {\n const attr = {\n html: {\n dom: text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...textStyle\n },\n x,\n y,\n width: mainTitleWidth ?? width ?? 0,\n height: mainTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: mainTitleMaxHeight ?? maxHeight,\n maxWidth: mainTitleMaxWidth ?? maxWidth,\n textConfig: [] as any[],\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (isValid(text)) {\n this._mainTitle = group.createOrUpdateChild(\n 'mainTitle',\n {\n text: isArray(text) ? (text as any) : [text as string],\n whiteSpace: 'normal',\n ...textStyle,\n maxLineWidth: textStyle.maxLineWidth ?? mainTitleWidth ?? width,\n heightLimit: mainTitleHeight ?? maxHeight,\n lineClamp,\n ellipsis,\n x,\n y\n },\n 'text'\n ) as IText;\n }\n }\n\n const maintextHeight = this._mainTitle ? this._mainTitle.AABBBounds.height() : 0;\n const maintextWidth = this._mainTitle ? this._mainTitle.AABBBounds.width() : 0;\n\n // 目前 height 限制等于 0 时,相当于 Infinity,无限制\n\n if (this.attribute.visible !== false && subtextStyle.visible !== false) {\n const {\n width: subTitleWidth,\n height: subTitleHeight,\n maxWidth: subTitleMaxWidth,\n maxHeight: subTitleMaxHeight,\n x = 0,\n y = 0,\n ellipsis = true,\n wordBreak = 'break-word',\n lineClamp\n } = subtextStyle;\n const maxSubTextHeight = Math.max(Number.MIN_VALUE, maxHeight - maintextHeight);\n\n if (subtextType === 'rich' || isValid(subtextStyle.character)) {\n const attr: any = {\n x,\n y,\n width: subTitleWidth ?? width ?? 0,\n height: subTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: subTitleMaxHeight ?? maxSubTextHeight,\n maxWidth: subTitleMaxWidth ?? maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: subtextStyle.character ?? (subtext as IRichTextCharacter[]),\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (subtextType === 'html') {\n const attr: any = {\n html: {\n dom: subtext as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...subtextStyle\n },\n x,\n y,\n width: subTitleWidth ?? width ?? 0,\n height: subTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: subTitleMaxHeight ?? maxSubTextHeight,\n maxWidth: subTitleMaxWidth ?? maxWidth,\n textConfig: [] as any[],\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (isValid(subtext)) {\n this._subTitle = group.createOrUpdateChild(\n 'subTitle',\n {\n text: isArray(subtext) ? (subtext as any) : [subtext as string],\n whiteSpace: 'normal',\n ...subtextStyle,\n maxLineWidth: subtextStyle.maxLineWidth ?? width,\n heightLimit: subtextStyle.heightLimit ?? maxSubTextHeight,\n lineClamp,\n ellipsis,\n x: 0,\n y: maintextHeight\n },\n 'text'\n ) as IText;\n }\n }\n\n const subtextHeight = this._subTitle ? this._subTitle.AABBBounds.height() : 0;\n const subtextWidth = this._subTitle ? this._subTitle.AABBBounds.width() : 0;\n\n // 设置宽高\n let titleWidth = Math.max(maintextWidth, subtextWidth);\n let titleHeight = maintextHeight + (subtextStyle.height ?? subtextHeight);\n\n if (isValid(width)) {\n titleWidth = width;\n }\n\n if (isValid(height)) {\n titleHeight = height;\n }\n\n if (isValid(minWidth) && titleWidth < minWidth) {\n titleWidth = minWidth;\n }\n if (isValid(maxWidth)) {\n if (titleWidth > maxWidth) {\n titleWidth = maxWidth;\n }\n }\n\n if (isValid(minHeight) && titleHeight < minHeight) {\n titleHeight = minHeight;\n }\n\n if (isValid(maxHeight)) {\n if (titleHeight > maxHeight) {\n titleHeight = maxHeight;\n }\n }\n group.attribute.width = titleWidth;\n group.attribute.height = titleHeight;\n group.attribute.boundsPadding = parsedPadding;\n\n // 设置对齐\n if (this._mainTitle) {\n if (isValid(align) || isValid(textStyle.align)) {\n const mainTitleAlign = textStyle.align ? textStyle.align : align;\n const mainTitleWidth = textStyle.width ?? maintextWidth;\n if (mainTitleAlign === 'left') {\n this._mainTitle.setAttribute('x', 0);\n this._mainTitle.setAttribute('textAlign', 'left');\n } else if (mainTitleAlign === 'center') {\n this._mainTitle.setAttribute('x', mainTitleWidth / 2);\n this._mainTitle.setAttribute('textAlign', 'center');\n } else if (mainTitleAlign === 'right') {\n this._mainTitle.setAttribute('x', mainTitleWidth);\n this._mainTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const mainTitleVerticalAlign = textStyle.verticalAlign ? textStyle.verticalAlign : verticalAlign;\n const mainTitleHeight = textStyle.height ? textStyle.height : titleHeight;\n if (mainTitleVerticalAlign === 'top') {\n this._mainTitle.setAttribute('y', 0);\n this._mainTitle.setAttribute('textBaseline', 'top');\n } else if (mainTitleVerticalAlign === 'middle') {\n this._mainTitle.setAttribute('y', mainTitleHeight / 2);\n this._mainTitle.setAttribute('textBaseline', 'middle');\n } else if (mainTitleVerticalAlign === 'bottom') {\n this._mainTitle.setAttribute('y', mainTitleHeight);\n this._mainTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n\n if (this._subTitle) {\n if (isValid(align) || isValid(subtextStyle.align)) {\n const subTitleAlign = subtextStyle.align ? subtextStyle.align : align;\n const subTitleWidth = subtextStyle.width ?? subtextWidth;\n if (subTitleAlign === 'left') {\n this._subTitle.setAttribute('x', 0);\n this._subTitle.setAttribute('textAlign', 'left');\n } else if (subTitleAlign === 'center') {\n this._subTitle.setAttribute('x', subTitleWidth / 2);\n this._subTitle.setAttribute('textAlign', 'center');\n } else if (subTitleAlign === 'right') {\n this._subTitle.setAttribute('x', subTitleWidth);\n this._subTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const subTitleVerticalAlign = subtextStyle.verticalAlign ? subtextStyle.verticalAlign : verticalAlign;\n const subTitleYStart = maintextHeight;\n const subTitleHeight = subtextStyle.height ?? 0;\n if (subTitleVerticalAlign === 'top') {\n this._subTitle.setAttribute('y', subTitleYStart);\n this._subTitle.setAttribute('textBaseline', 'top');\n } else if (subTitleVerticalAlign === 'middle') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight / 2);\n this._subTitle.setAttribute('textBaseline', 'middle');\n } else if (subTitleVerticalAlign === 'bottom') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight);\n this._subTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n }\n}\n","import { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { Factory } from '../../core/factory';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IPoint, IOrientType, ILayoutType, ILayoutRect } from '../../typings';\nimport { calcLayoutNumber, isValidOrient } from '../../util/space';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { ITitle, ITitleSpec } from './interface';\nimport { Title as TitleComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TitleAttrs } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, isValidNumber, pickWithout, isValid } from '@visactor/vutils';\nimport { getSpecInfo } from '../util';\n\nexport class Title extends BaseComponent implements ITitle {\n static type = ComponentTypeEnum.title;\n type = ComponentTypeEnum.title;\n static specKey = ComponentTypeEnum.title;\n specKey: string = ComponentTypeEnum.title;\n\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Title;\n layoutLevel: number = LayoutLevel.Title;\n\n protected _orient: IOrientType = 'top';\n\n private _titleComponent: TitleComponents;\n private _cacheAttrs: TitleAttrs;\n\n get orient() {\n return this._orient;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = isValidOrient(spec.orient) ? spec.orient : 'top';\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, ComponentTypeEnum.title, (s: ITitleSpec) => {\n return s.visible !== false;\n });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n\n if (prevSpec?.orient !== spec?.orient || (prevSpec as any)?.visible !== (spec as any).visible) {\n // title 组件切换visible会影响布局,所以需要重新remake\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n if (isValidNumber(pos.x)) {\n this._titleComponent && this._titleComponent.setAttribute('x', pos.x);\n }\n if (isValidNumber(pos.y)) {\n this._titleComponent && this._titleComponent.setAttribute('y', pos.y);\n }\n super.afterSetLayoutStartPoint(pos);\n }\n\n getBoundsInRect(rect: ILayoutRect) {\n let result: Partial = {};\n this.setLayoutRect(rect);\n\n const attrs = this._getTitleAttrs();\n this._createOrUpdateTitleComponent(attrs);\n\n result = this._getTitleLayoutRect();\n const { x, y } = this.getLayoutStartPoint();\n return {\n x1: x,\n y1: y,\n x2: x + result.width,\n y2: y + result.height\n };\n }\n\n private _getTitleLayoutRect() {\n const titleBounds = this._titleComponent.AABBBounds;\n const width = this._spec.width ? this._spec.width : isValidNumber(titleBounds.width()) ? titleBounds.width() : 0;\n const height = this._spec.height\n ? this._spec.height\n : isValidNumber(titleBounds.height())\n ? titleBounds.height()\n : 0;\n return {\n width,\n height\n };\n }\n\n private _getTitleAttrs() {\n // 当 width 小于 0 时,设置为 0,负数场景容易引起不可预知的问题\n if (this._spec.visible === false) {\n return { visible: false };\n }\n const layoutRect = this.getLayoutRect();\n const titleWidth = calcLayoutNumber(this._spec.width, layoutRect.width, null, layoutRect.width);\n const titleMaxWidth = calcLayoutNumber(this._spec.maxWidth, layoutRect.width, null, layoutRect.width);\n const maxWidth = Math.max(Math.min(titleWidth, titleMaxWidth, layoutRect.width), 0);\n\n const attrs = {\n ...(pickWithout(this._spec, ['padding']) as any),\n textType: this._spec.textType ?? 'text',\n text: this._spec.text ?? '',\n subtextType: this._spec.subtextType ?? 'text',\n subtext: this._spec.subtext ?? '',\n x: this._spec.x ?? 0,\n y: this._spec.y ?? 0,\n height: this._spec.height,\n minWidth: this._spec.minWidth,\n maxWidth,\n minHeight: this._spec.minHeight,\n maxHeight: this._spec.maxHeight,\n padding: this._spec.innerPadding,\n align: this._spec.align ?? 'left',\n verticalAlign: this._spec.verticalAlign ?? 'top',\n textStyle: {\n width: maxWidth,\n maxLineWidth: maxWidth,\n ...this._spec.textStyle\n },\n subtextStyle: {\n maxLineWidth: maxWidth,\n ...this._spec.subtextStyle\n }\n } as TitleAttrs;\n\n if (isValid(this._spec.width)) {\n attrs.textStyle.width = Math.max(titleWidth, layoutRect.width);\n attrs.subtextStyle.width = attrs.textStyle.width;\n }\n return attrs;\n }\n\n private _createOrUpdateTitleComponent(attrs: TitleAttrs): TitleComponents {\n if (this._titleComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._titleComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n const title = new TitleComponents(attrs);\n title.name = 'title';\n container.add(title as unknown as INode);\n this._titleComponent = title;\n // 代理 title 组件上的事件\n title.on('*', (event: any, type: string) => this._delegateEvent(title as unknown as IGraphic, event, type));\n }\n this._cacheAttrs = attrs;\n return this._titleComponent;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._titleComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n }\n}\n\nexport const registerTitle = () => {\n Factory.registerComponent(Title.type, Title);\n};\n","import type { IGroup, INode, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP, DEFAULT_MARK_AREA_THEME } from './config';\nimport type { CommonMarkAreaAnimationType, IMarkAreaLabelPosition, MarkAreaAttrs, MarkerAnimationState } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkAreaComponent } from './register';\nimport type { Point } from '../core/type';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkAreaAnimation, markAreaAnimate } from './animate/animate';\n\nloadMarkAreaComponent();\n\nexport function registerMarkAreaAnimate() {\n MarkArea._animate = markAreaAnimate;\n}\n\nexport class MarkArea extends Marker {\n name = 'markArea';\n static defaultAttributes = DEFAULT_MARK_AREA_THEME;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkAreaAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArea._animate && this._animationConfig) {\n MarkArea._animate(this._area, this._label, this._animationConfig, state);\n }\n }\n\n private _area!: IPolygon;\n getArea() {\n return this._area;\n }\n\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkAreaAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkArea.defaultAttributes, attributes));\n }\n\n protected getPointAttrByPosition(position: IMarkAreaLabelPosition) {\n const { x1, x2, y1, y2 } = this._area.AABBBounds;\n\n if (position.includes('left') || position.includes('Left')) {\n return {\n x: x1,\n y: (y1 + y2) / 2\n };\n }\n if (position.includes('right') || position.includes('Right')) {\n return {\n x: x2,\n y: (y1 + y2) / 2\n };\n }\n if (position.includes('top') || position.includes('Top')) {\n return {\n x: (x1 + x2) / 2,\n y: y1\n };\n }\n if (position.includes('bottom') || position.includes('Bottom')) {\n return {\n x: (x1 + x2) / 2,\n y: y2\n };\n }\n\n return {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n };\n }\n\n protected setLabelPos() {\n if (this._label && this._area) {\n const { label = {} } = this.attribute as MarkAreaAttrs;\n const labelPosition = label.position ?? 'middle';\n const labelPoint = this.getPointAttrByPosition(labelPosition as IMarkAreaLabelPosition);\n this._label.setAttributes({\n ...labelPoint,\n textStyle: {\n ...DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP[labelPosition],\n ...label.textStyle\n }\n });\n\n if (this.attribute.limitRect && label.confine) {\n const { x, y, width, height } = this.attribute.limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n }\n\n protected initMarker(container: IGroup) {\n const { points, label, areaStyle, state } = this.attribute as MarkAreaAttrs;\n const area = graphicCreator.polygon({\n points: points,\n ...areaStyle\n });\n area.states = merge({}, DEFAULT_STATES, state?.area);\n area.name = 'mark-area-polygon';\n this._area = area;\n container.add(area);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-area-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { points, label, areaStyle, state } = this.attribute as MarkAreaAttrs;\n if (this._area) {\n this._area.setAttributes({\n points: points,\n ...areaStyle\n });\n this._area.states = merge({}, DEFAULT_STATES, state?.area);\n }\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n }\n this.setLabelPos();\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkAreaAttrs;\n if (!points || points.length < 3) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point) => {\n if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import type { IMarkArea, IMarkAreaSpec } from './interface';\nimport {\n computeClipRange,\n transformLabelAttributes,\n transformState,\n transformStyle,\n getMarkAreaProcessInfo\n} from '../utils';\nimport type { MarkArcAreaAttrs, MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkArea as MarkAreaComponent, MarkArcArea as MarkArcAreaComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IGroup } from '@visactor/vrender-core';\nexport abstract class BaseMarkArea extends BaseMarker implements IMarkArea {\n static specKey = 'markArea';\n specKey = 'markArea';\n\n layoutZIndex: number = LayoutZIndex.MarkArea;\n\n // eslint-disable-next-line max-len\n protected abstract _newMarkAreaComponent(\n attr: MarkAreaAttrs | MarkArcAreaAttrs\n ): MarkAreaComponent | MarkArcAreaComponent;\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doAngleProcess, doRadiusProcess, doRadAngProcess } = getMarkAreaProcessInfo(markerSpec);\n\n if (markerSpec.coordinateType === 'polar' || doAngleProcess || doRadiusProcess || doRadAngProcess) {\n return 'polar';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const label = this._spec.label ?? {};\n const markAreaAttrs: MarkAreaAttrs | MarkArcAreaAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n points: [\n {\n x: 0,\n y: 0\n }\n ],\n center: {\n x: 0,\n y: 0\n },\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n areaStyle: transformStyle(\n transformToGraphic(this._spec.area?.style),\n this._markerData,\n this._markAttributeContext\n ),\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label, this._markerData, this._markAttributeContext),\n state: {\n area: transformState(this._spec.area?.state, this._markerData, this._markAttributeContext),\n label: transformState(this._spec.label?.state, this._markerData, this._markAttributeContext),\n labelBackground: transformState(\n this._spec?.label?.labelBackground?.state,\n this._markerData,\n this._markAttributeContext\n )\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n const markArea = this._newMarkAreaComponent(markAreaAttrs);\n return markArea as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const pointsAttr = this._computePointsAttr();\n\n const seriesData = this._getRelativeDataView().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n if (this._markerComponent) {\n this._markerComponent.setAttributes({\n ...pointsAttr,\n label: {\n ...this._markerComponent.attribute?.label,\n text: this._spec.label.formatMethod\n ? // type error here will be fixed in components\n (this._spec.label.formatMethod(dataPoints, seriesData) as any)\n : this._markerComponent.attribute?.label?.text\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n } as any);\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const {\n doXProcess,\n doYProcess,\n doXYProcess,\n doAngleProcess,\n doRadiusProcess,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkAreaProcessInfo(spec);\n if (\n !doXProcess &&\n !doYProcess &&\n !doXYProcess &&\n !doAngleProcess &&\n !doRadiusProcess &&\n !doRadAngProcess &&\n !doCoordinatesProcess\n ) {\n return null;\n }\n\n this._initCommonDataView();\n }\n}\n","import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, getMarkAreaProcessInfo, positionLayout, xyLayout } from '../utils';\nimport type { MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkArea as MarkAreaComponent, registerMarkAreaAnimate } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport type { IMarkProcessOptions } from '../interface';\nimport { BaseMarkArea } from './base-mark-area';\n\nexport class CartesianMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.markArea;\n type = ComponentTypeEnum.markArea;\n name: string = ComponentTypeEnum.markArea;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected _newMarkAreaComponent(attr: MarkAreaAttrs): MarkAreaComponent {\n return new MarkAreaComponent(attr);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n let points: IPoint[] = [];\n let lines: IPoint[][] = [];\n if (doXYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 格式为 [[{x, y}], [{x, y}]]\n // 顺序为左下角开始逆时针绘制\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [\n {\n x: start[0].x,\n y: end[0].y\n },\n start[0],\n {\n x: end[0].x,\n y: start[0].y\n },\n end[0]\n ];\n }\n } else if (doXProcess || doYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [...start, end[1], end[0]];\n }\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n return { points };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [\n this._processSpecByDims([{ dim: 'x', specValue: spec.x }]),\n this._processSpecByDims([{ dim: 'x', specValue: spec.x1 }])\n ];\n } else if (doYProcess) {\n options = [\n this._processSpecByDims([{ dim: 'y', specValue: spec.y }]),\n this._processSpecByDims([{ dim: 'y', specValue: spec.y1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n return { options };\n }\n}\n\nexport const registerMarkArea = () => {\n Factory.registerComponent(CartesianMarkArea.type, CartesianMarkArea);\n registerMarkAreaAnimate();\n};\n","import type { IArc, IGroup, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_ARC_AREA_THEME, DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP } from './config';\nimport type { CommonMarkAreaAnimationType, MarkerAnimationState } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IMarkCommonArcLabelPosition, type MarkArcAreaAttrs } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkArcAreaComponent } from './register';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkAreaAnimation, markArcAreaAnimate } from './animate/animate';\n\nloadMarkArcAreaComponent();\n\nexport function registerMarkArcAreaAnimate() {\n MarkArcArea._animate = markArcAreaAnimate;\n}\n\nexport class MarkArcArea extends Marker {\n name = 'markArcArea';\n static defaultAttributes = DEFAULT_MARK_ARC_AREA_THEME;\n private _area!: IArc;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkAreaAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArcArea._animate && this._animationConfig) {\n MarkArcArea._animate(this._area, this._label, this._animationConfig, state);\n }\n }\n\n getArea() {\n return this._area;\n }\n\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkArcAreaAttrs, options?: ComponentOptions) {\n // eslint-disable-next-line max-len\n super(\n options?.skipDefault\n ? attributes\n : merge({}, MarkArcArea.defaultAttributes, attributes, { label: { autoRotate: true } })\n );\n }\n\n protected getPointAttrByPosition(position: IMarkCommonArcLabelPosition) {\n const { center, innerRadius, outerRadius, startAngle, endAngle, label } = this.attribute as MarkArcAreaAttrs;\n const { refX = 0, refY = 0 } = label;\n\n let radius;\n let angle;\n\n switch (position) {\n case IMarkCommonArcLabelPosition.center:\n radius = (innerRadius + outerRadius) / 2;\n angle = (startAngle + endAngle) / 2;\n break;\n case IMarkCommonArcLabelPosition.arcInnerStart:\n radius = innerRadius;\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcOuterStart:\n radius = outerRadius;\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerEnd:\n radius = innerRadius;\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.arcOuterEnd:\n radius = outerRadius;\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerMiddle:\n radius = innerRadius;\n angle = (startAngle + endAngle) / 2;\n break;\n case IMarkCommonArcLabelPosition.arcOuterMiddle:\n radius = outerRadius;\n angle = (startAngle + endAngle) / 2;\n break;\n default: // default arcInnerMiddle\n radius = innerRadius;\n angle = (startAngle + endAngle) / 2;\n }\n\n return {\n position: {\n x: center.x + (radius + refY) * Math.cos(angle) + refX * Math.cos(angle - Math.PI / 2),\n y: center.y + (radius + refY) * Math.sin(angle) + refX * Math.sin(angle - Math.PI / 2)\n },\n angle\n };\n }\n\n protected setLabelPos() {\n if (this._label && this._area) {\n const { label = {} } = this.attribute as MarkArcAreaAttrs;\n const { position: labelPosition = 'arcInnerMiddle', autoRotate } = label;\n const labelAttr = this.getPointAttrByPosition(labelPosition as IMarkCommonArcLabelPosition);\n\n this._label.setAttributes({\n ...labelAttr.position,\n angle: autoRotate ? labelAttr.angle - Math.PI / 2 + (label.refAngle ?? 0) : 0,\n textStyle: {\n ...DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP[labelPosition],\n ...label.textStyle\n }\n });\n\n if (this.attribute.limitRect && label.confine) {\n const { x, y, width, height } = this.attribute.limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n }\n\n protected initMarker(container: IGroup) {\n const { center, innerRadius, outerRadius, startAngle, endAngle, areaStyle, label, state } = this\n .attribute as MarkArcAreaAttrs;\n const area = graphicCreator.arc({\n x: center.x,\n y: center.y,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n ...areaStyle\n });\n area.states = merge({}, DEFAULT_STATES, state?.area);\n area.name = 'polar-mark-area-area';\n this._area = area;\n container.add(area);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-area-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { center, innerRadius, outerRadius, startAngle, endAngle, areaStyle, label, state } = this\n .attribute as MarkArcAreaAttrs;\n if (this._area) {\n this._area.setAttributes({\n x: center.x,\n y: center.y,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n ...areaStyle\n });\n this._area.states = merge({}, DEFAULT_STATES, state?.area);\n }\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n this.setLabelPos();\n }\n }\n\n protected isValidPoints() {\n return true;\n }\n}\n","import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { getMarkAreaProcessInfo, polarCoordinateLayout, polarLayout } from '../utils';\nimport type { MarkArcAreaAttrs, MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n MarkArcArea as MarkArcAreaComponent,\n MarkArea as MarkAreaComponent,\n registerMarkArcAreaAnimate,\n registerMarkAreaAnimate\n} from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint, IPolarPoint } from '../../../typings';\nimport type { IPolarSeries } from 'src/series';\nimport { BaseMarkArea } from './base-mark-area';\nimport type { IMarkProcessOptions } from '../interface';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class PolarMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.polarMarkArea;\n type = ComponentTypeEnum.polarMarkArea;\n name: string = ComponentTypeEnum.polarMarkArea;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected declare _markerComponent: MarkArcAreaComponent;\n\n protected _newMarkAreaComponent(attr: MarkArcAreaAttrs | MarkAreaAttrs): MarkArcAreaComponent | MarkAreaComponent {\n const { doRadiusProcess, doAngleProcess, doRadAngProcess } = getMarkAreaProcessInfo(this._spec as any);\n const isArcArea = doAngleProcess || doRadiusProcess || doRadAngProcess;\n return isArcArea\n ? new MarkArcAreaComponent(attr as MarkArcAreaAttrs)\n : new MarkAreaComponent(attr as MarkAreaAttrs);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n const { doAngleProcess, doRadiusProcess, doRadAngProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const autoRange = spec.autoRange ?? false;\n\n let points: IPolarPoint[];\n let pointsAttr: {\n points?: IPoint[] | IPolarPoint[];\n innerRadius?: number;\n outerRadius?: number;\n startAngle?: number;\n endAngle?: number;\n center?: IPoint;\n } = {};\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n\n if (doAngleProcess || doRadiusProcess || doRadAngProcess) {\n const polarLines = polarLayout(\n data,\n startRelativeSeries as IPolarSeries,\n endRelativeSeries as IPolarSeries,\n relativeSeries as IPolarSeries,\n autoRange\n );\n if (doRadAngProcess) {\n pointsAttr = {\n innerRadius: polarLines[0][0].radius,\n outerRadius: polarLines[1][0].radius,\n startAngle: polarLines[0][0].angle,\n endAngle: polarLines[1][0].angle,\n center\n };\n } else if (doAngleProcess) {\n pointsAttr = {\n innerRadius: 0,\n outerRadius: Math.abs(polarLines[0][0].radius),\n startAngle: polarLines[0][1].angle,\n endAngle: polarLines[1][1].angle,\n center\n };\n } else if (doRadiusProcess) {\n pointsAttr = {\n innerRadius: polarLines[0][0].radius,\n outerRadius: polarLines[1][0].radius,\n startAngle: polarLines[0][0].angle,\n endAngle: polarLines[1][1].angle,\n center\n };\n }\n } else if (doCoordinatesProcess) {\n points = polarCoordinateLayout(data, relativeSeries as IPolarSeries, autoRange);\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n\n return pointsAttr;\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doAngleProcess, doRadiusProcess, doRadAngProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doRadAngProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doAngleProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius }\n ])\n ];\n } else if (doRadiusProcess) {\n options = [\n this._processSpecByDims([{ dim: 'radius', specValue: spec.radius }]),\n this._processSpecByDims([{ dim: 'radius', specValue: spec.radius1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options };\n }\n}\n\nexport const registerPolarMarkArea = () => {\n Factory.registerComponent(PolarMarkArea.type, PolarMarkArea);\n registerMarkArcAreaAnimate();\n registerMarkAreaAnimate();\n};\n","// export const iconPlay = `\n// M 837.808 551.64 L 219.376 968.6 a 8 8 0 0 1 -12.48 -6.64 V 128.04 a 8 8 0 0 1 12.48 -6.624 l 618.432 416.96 a 8 8 0 0 1 0 13.264 z m -534.896 -246.8 v 480.288 L 687.52 545 L 302.912 304.84 z\n// `;\n\nexport const iconPlay = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -73.1429 161.4994 a 48.7619 48.7619 0 0 1 25.9901 7.5093 l 201.7524 127.1223 a 48.7619 48.7619 0 0 1 0.3657 82.2613 l -201.7524 129.6335 A 48.7619 48.7619 0 0 1 292.5952 540.1838 v -256.7314 a 48.7619 48.7619 0 0 1 48.7619 -48.7619 z m 24.381 92.9402 v 167.9116 l 131.9497 -84.7726 L 365.7381 327.6063 z`;\nexport const iconPause = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -48.7619 195.0476 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z m 158.4762 0 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z`;\nexport const iconLeft = `M 521.29 734.276 L 230.929 448.019 L 521.29 161.762 c 37.685 -37.153 38.003 -97.625 0.707 -134.384 c -37.297 -36.758 -98.646 -36.435 -136.331 0.718 l -357.43 352.378 c -0.155 0.153 -0.297 0.314 -0.451 0.468 c -0.084 0.082 -0.172 0.157 -0.256 0.239 c -18.357 18.092 -27.581 41.929 -27.743 65.902 c -0.004 0.311 -0.017 0.623 -0.018 0.934 c 0.001 0.316 0.014 0.632 0.018 0.948 c 0.165 23.97 9.389 47.803 27.743 65.892 c 0.083 0.082 0.171 0.157 0.255 0.239 c 0.154 0.154 0.296 0.315 0.452 0.468 l 357.43 352.378 c 37.685 37.153 99.034 37.476 136.331 0.718 c 37.297 -36.758 36.979 -97.231 -0.707 -134.384 z`;\n\nexport const iconDown = `M 734.276 28.71 L 448.019 319.071 L 161.762 28.71 c -37.153 -37.685 -97.625 -38.003 -134.384 -0.707 c -36.758 37.297 -36.435 98.646 0.718 136.331 l 352.378 357.43 c 0.153 0.155 0.314 0.297 0.468 0.451 c 0.082 0.084 0.157 0.172 0.239 0.256 c 18.092 18.357 41.929 27.581 65.902 27.743 c 0.311 0.004 0.623 0.017 0.934 0.018 c 0.316 -0.001 0.632 -0.014 0.948 -0.018 c 23.97 -0.165 47.803 -9.389 65.892 -27.743 c 0.082 -0.083 0.157 -0.171 0.239 -0.255 c 0.154 -0.154 0.315 -0.296 0.468 -0.452 l 352.378 -357.43 c 37.153 -37.685 37.476 -99.034 0.718 -136.331 c -36.758 -37.297 -97.231 -36.979 -134.384 0.707 z`;\n\nexport const iconUp = `m 161.724 521.29 l 286.257 -290.361 l 286.257 290.361 c 37.153 37.685 97.625 38.003 134.384 0.707 c 36.758 -37.297 36.435 -98.646 -0.718 -136.331 l -352.378 -357.43 c -0.153 -0.155 -0.314 -0.297 -0.468 -0.451 c -0.082 -0.084 -0.157 -0.172 -0.239 -0.256 c -18.092 -18.357 -41.929 -27.581 -65.902 -27.743 c -0.311 -0.004 -0.623 -0.017 -0.934 -0.018 c -0.316 0.001 -0.632 0.014 -0.948 0.018 c -23.97 0.165 -47.803 9.389 -65.892 27.743 c -0.082 0.083 -0.157 0.171 -0.239 0.255 c -0.154 0.154 -0.315 0.296 -0.468 0.452 l -352.378 357.43 c -37.153 37.685 -37.476 99.034 -0.718 136.331 c 36.758 37.297 97.231 36.979 134.384 -0.707 z`;\n\nexport const iconRight = `M 30 163 L 320.361 449.257 L 30 735.514 c -37.685 37.153 -38.003 97.625 -0.707 134.384 c 37.297 36.758 98.646 36.435 136.331 -0.718 l 357.43 -352.378 c 0.155 -0.153 0.297 -0.314 0.451 -0.468 c 0.084 -0.082 0.172 -0.157 0.256 -0.239 c 18.357 -18.092 27.581 -41.929 27.743 -65.902 c 0.004 -0.311 0.017 -0.623 0.018 -0.934 c -0.001 -0.316 -0.014 -0.632 -0.018 -0.948 c -0.165 -23.97 -9.389 -47.803 -27.743 -65.892 c -0.083 -0.082 -0.171 -0.157 -0.255 -0.239 c -0.154 -0.154 -0.296 -0.315 -0.452 -0.468 l -357.43 -352.378 c -37.685 -37.153 -99.034 -37.476 -136.331 -0.718 c -37.297 36.758 -36.979 97.231 0.707 134.384 z`;\n","import type { ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { Symbol } from '@visactor/vrender-core';\n\nexport class PlayerIcon extends Symbol {\n constructor(params: ISymbolGraphicAttribute) {\n super(params);\n }\n}\n","export enum ControllerEventEnum {\n OnPlay = 'onPlay',\n OnPause = 'onPause',\n OnForward = 'onForward',\n OnBackward = 'onBackward'\n}\n\nexport enum ControllerTypeEnum {\n Start = 'start',\n Pause = 'pause',\n Forward = 'forward',\n Backward = 'backward'\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { BaseGraphicAttributes } from '../../core/type';\nimport type { ControllerAttributes, LayoutType } from './type';\nimport { iconRight, iconPause, iconPlay, iconLeft, iconUp, iconDown } from './assets';\nimport { PlayerIcon } from './icon';\nimport { ControllerEventEnum, ControllerTypeEnum } from './constant';\nimport type { ComponentOptions } from '../../interface';\n\nexport class Controller extends AbstractComponent> {\n static defaultControllerAttr: ISymbolGraphicAttribute = {\n visible: true,\n x: 0,\n y: 0,\n size: 20,\n fill: '#91caff',\n pickMode: 'imprecise',\n cursor: 'pointer'\n };\n static defaultAttributes: ControllerAttributes = {\n [ControllerTypeEnum.Start]: {},\n [ControllerTypeEnum.Pause]: {},\n [ControllerTypeEnum.Backward]: {},\n [ControllerTypeEnum.Forward]: {}\n };\n\n private _isPaused = true;\n private _playController: PlayerIcon;\n private _forwardController: PlayerIcon;\n private _backwardController: PlayerIcon;\n\n private _layout: LayoutType;\n private _startAttr: BaseGraphicAttributes;\n private _pauseAttr: BaseGraphicAttributes;\n private _forwardAttr: BaseGraphicAttributes;\n private _backwardAttr: BaseGraphicAttributes;\n\n constructor(attributes: ControllerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Controller.defaultAttributes, attributes));\n this.updateAttributes();\n this._initPlay();\n this._initBackward();\n this._initForward();\n this._initEvents();\n }\n\n updateAttributes = () => {\n this._startAttr = {\n style: {\n symbolType: iconPlay,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.start.visible,\n ...this.attribute.start.style\n }\n };\n this._pauseAttr = {\n style: {\n symbolType: iconPause,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.pause.visible,\n ...this.attribute.pause.style\n }\n };\n this._forwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.forward.visible,\n ...this.attribute.forward.style\n }\n };\n this._backwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.backward.visible,\n ...this.attribute.backward.style\n }\n };\n this.updateLayout();\n };\n\n private updateLayout = () => {\n this._layout = this.attribute.layout;\n // 若水平布局\n if (this._layout === 'horizontal') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconLeft;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconRight;\n }\n // 若垂直布局\n else if (this._layout === 'vertical') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconUp;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconDown;\n }\n };\n\n private _initPlay = () => {\n if (isNil(this._playController)) {\n this._playController = new PlayerIcon({\n ...this._startAttr.style\n });\n\n this.add(this._playController);\n }\n };\n\n private _initBackward = () => {\n if (isNil(this._backwardController)) {\n this._backwardController = new PlayerIcon({\n ...this._backwardAttr.style\n });\n\n this.add(this._backwardController);\n }\n };\n\n private _initForward = () => {\n if (isNil(this._forwardController)) {\n this._forwardController = new PlayerIcon({\n ...this._forwardAttr.style\n });\n\n this.add(this._forwardController);\n }\n };\n\n /**\n * 初始化事件\n * 1. 注册\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._playController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n if (this._isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n });\n\n this._backwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._forwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n };\n\n render(): void {\n this.updateAttributes();\n this.renderPlay();\n this.renderBackward();\n this.renderForward();\n }\n\n renderPlay = () => {\n if (this._isPaused) {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._startAttr.style\n });\n } else {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._pauseAttr.style\n });\n }\n };\n\n renderBackward = () => {\n this._backwardController.setAttributes(this._backwardAttr.style);\n };\n\n renderForward = () => {\n this._forwardController.setAttributes(this._forwardAttr.style);\n };\n\n play = () => {\n this._dispatchEvent(ControllerEventEnum.OnPlay);\n };\n\n pause = () => {\n this._dispatchEvent(ControllerEventEnum.OnPause);\n };\n\n forward = () => {\n this._dispatchEvent(ControllerEventEnum.OnForward);\n };\n\n backward = () => {\n this._dispatchEvent(ControllerEventEnum.OnBackward);\n };\n\n togglePlay = () => {\n this._playController.setAttributes(this._startAttr.style);\n this._isPaused = true;\n };\n\n togglePause = () => {\n this._playController.setAttributes(this._pauseAttr.style);\n this._isPaused = false;\n };\n}\n","export const defaultControllerAttributes = {\n visible: true,\n style: {\n x: 0,\n y: 0,\n dx: 0,\n dy: 0,\n size: 20\n },\n order: 0,\n space: 10\n};\n\n/**\n * 滑轨默认[长度,宽度]\n */\nexport const RailDefaultSize = [200, 10];\n","export enum DirectionEnum {\n Default = 'default',\n Reverse = 'reverse'\n}\n\nexport type DirectionType = 'default' | 'reverse';\n","import { OrientType } from '../interface';\nimport { DirectionEnum, DirectionType } from './type';\n\n/**\n * 检测下标是否正确\n */\ninterface ICheckIndex {\n direction: DirectionType;\n maxIndex: number;\n minIndex: number;\n dataIndex: number;\n}\nexport const checkIndex = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n // 若默认方向, 检测下标是否合法\n if (direction === DirectionEnum.Default) {\n return dataIndex < maxIndex;\n }\n // 若逆向, 检测下标是否合法\n else if (direction === DirectionEnum.Reverse) {\n return dataIndex > minIndex;\n }\n};\n\n/**\n * 判断能否进入循环\n */\n\nexport const canPlay = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n return checkIndex({ direction, maxIndex, minIndex, dataIndex });\n};\n\n/**\n * 判断是否到达了末尾\n */\nexport const isReachEndByDefault = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachEndByReverse = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachEnd = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachEndByDefault({ direction, maxIndex, dataIndex }) || isReachEndByReverse({ direction, minIndex, dataIndex })\n );\n};\n\n/**\n * 判断是否处于起点\n */\nexport const isReachStartByDefault = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachStartByReverse = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachStart = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachStartByDefault({ direction, minIndex, dataIndex }) ||\n isReachStartByReverse({ direction, maxIndex, dataIndex })\n );\n};\n\n/**\n * 得到初始化下标\n */\n\nexport const isVertical = (orient: OrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: OrientType) => orient === 'top' || orient === 'bottom';\n\nexport const forwardStep = (direction: DirectionType, currentIndex: number, min: number, max: number) => {\n if (direction === 'default') {\n return Math.min(currentIndex + 1, max);\n }\n return Math.max(currentIndex - 1, min);\n};\n","import type { INode } from '@visactor/vrender-core';\nimport { isNumber, isValidNumber, max, merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { ComponentOptions, OrientType } from '../interface';\nimport type { SliderAttributes } from '../slider';\nimport { Slider } from '../slider';\nimport type { ControllerAttributes } from './controller';\nimport { Controller } from './controller';\nimport type {\n Datum,\n PlayerEventEnum,\n PlayerAttributes,\n RailStyleType,\n ControllerType,\n TrackStyleType,\n HandlerStyleType\n} from './type';\nimport { RailDefaultSize, defaultControllerAttributes } from './constant';\nimport { isHorizontal } from './utils';\n\n/**\n * 基本播放器组件\n * 提供最基本的布局能力,\n */\nexport abstract class BasePlayer extends AbstractComponent> {\n static defaultAttributes = {\n visible: true,\n data: [] as Datum[],\n interval: 1000,\n orient: 'bottom',\n align: 'center',\n size: {\n height: 20,\n width: 300\n },\n slider: {\n visible: true,\n space: 10,\n dx: 0,\n dy: 0,\n railStyle: {\n cornerRadius: 5\n },\n trackStyle: {},\n handlerStyle: {}\n },\n controller: {\n visible: true,\n start: { ...defaultControllerAttributes, key: 'start', position: 'start', space: 0 },\n pause: { ...defaultControllerAttributes, key: 'pause', position: 'start' },\n forward: { ...defaultControllerAttributes, key: 'forward', position: 'end' },\n backward: { ...defaultControllerAttributes, key: 'backward', position: 'start' }\n }\n };\n\n // 组件属性\n protected _slider: Slider;\n protected _controller: Controller;\n\n // 数据属性\n protected _data = [] as Datum[];\n protected _minIndex: number;\n getMinIndex() {\n return this._minIndex;\n }\n protected _maxIndex: number;\n getMaxIndex() {\n return this._maxIndex;\n }\n\n // 滑轨属性\n private _sliderVisible: boolean;\n private _railStyle: RailStyleType;\n private _trackStyle: TrackStyleType;\n private _handlerStyle: HandlerStyleType;\n\n // 控件属性\n private _controllerVisible: boolean;\n private _start: ControllerType;\n private _pause: ControllerType;\n private _forward: ControllerType;\n private _backward: ControllerType;\n\n // 布局属性\n private _size: { width: number; height: number };\n private _orient: OrientType;\n\n // dataIndex, 代表slider的value\n protected _dataIndex: number = 0;\n getDataIndex() {\n return this._dataIndex;\n }\n\n private _layoutInfo: {\n // 滚动条位置\n slider?: { x: number; y: number; size: number };\n\n // 控件位置\n start?: { x: number; y: number; size: number };\n pause?: { x: number; y: number; size: number };\n backward?: { x: number; y: number; size: number };\n forward?: { x: number; y: number; size: number };\n } = {};\n\n abstract play(): void;\n abstract pause(): void;\n abstract backward(): void;\n abstract forward(): void;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BasePlayer.defaultAttributes, attributes));\n // 先初始化属性, 再初始化Slider、Controller, 最后初始化事件.\n this._initAttributes();\n this._initDataIndex();\n this._initLayoutInfo();\n this._initController();\n this._initSlider();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes() {\n // 基本布局属性\n this._size = this.attribute.size;\n this._orient = this.attribute.orient;\n\n // Slider范围, 起点一定要从0开始\n this._data = this.attribute.data;\n this._minIndex = 0;\n this._maxIndex = this._data.length - 1;\n\n const { slider = {}, controller = {} as PlayerAttributes['controller'] } = this.attribute;\n // 轨道样式\n this._sliderVisible = slider.visible;\n this._railStyle = { ...slider.railStyle };\n this._trackStyle = { ...slider.trackStyle };\n this._handlerStyle = { ...slider.handlerStyle };\n\n // 控制器样式\n this._controllerVisible = controller.visible;\n this._start = { ...controller.start };\n this._pause = { ...controller.pause };\n this._forward = { ...controller.forward };\n this._backward = { ...controller.backward };\n }\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex() {\n this._dataIndex = this.attribute.dataIndex ?? 0;\n }\n\n private _initLayoutInfo() {\n // 控制器\n const controllers = [this._start, this._backward, this._forward].sort((a, b) => a.order - b.order);\n // 在开始位置的控制器\n const startControllers = controllers.filter(d => d.position !== 'end');\n // 在结束位置的控制器\n const endControllers = controllers.filter(d => d.position === 'end');\n // 滑轨横切面长度\n const railSectionLength =\n (isHorizontal(this._orient) ? this._railStyle.height : this._railStyle.width) ?? RailDefaultSize[1];\n\n // 1. 计算所有组件自身占据的宽度 or 高度\n const controllerPx = controllers.reduce((len, controller) => {\n const size = controller.style.size;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n return len + controller.space + maxSize;\n }, 0);\n\n // 2. 计算slider的总占据像素\n const sliderPx = this._sliderVisible\n ? (isHorizontal(this._orient) ? this._size?.width : this._size?.height) - controllerPx\n : 0;\n\n // 3. 计算slider滑轨的总占据像素\n const railPx = sliderPx - this.attribute.slider.space;\n\n // 4. 计算起点控件坐标\n const startPx = startControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, 0);\n\n // 5. 计算slider的起点坐标\n this._layoutInfo.slider = {\n ...this._layoutInfo.slider,\n size: railPx,\n x: isHorizontal(this._orient)\n ? startPx + this.attribute.slider.space\n : (this._size.width - railSectionLength) / 2,\n y: isHorizontal(this._orient)\n ? (this._size.height - railSectionLength) / 2\n : startPx + this.attribute.slider.space\n };\n\n // 6. 计算终点控件坐标\n endControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, startPx + sliderPx);\n }\n\n /**\n * 初始化滑动条\n */\n private _updateSliderAttrs = () => {\n let handlerSize;\n if (isValidNumber(this._handlerStyle.size)) {\n handlerSize = this._handlerStyle.size;\n } else if (this._handlerStyle.size && this._handlerStyle.size.length) {\n handlerSize = max(this._handlerStyle.size[0], this._handlerStyle.size[1]);\n }\n\n const attrs: SliderAttributes = {\n visible: this._sliderVisible,\n // 重要参数\n min: this._minIndex,\n max: this._maxIndex,\n value: this._dataIndex,\n railWidth: this._railStyle.width,\n railHeight: this._railStyle.height,\n railStyle: this._railStyle,\n trackStyle: this._trackStyle,\n handlerSize: isValidNumber(handlerSize) ? handlerSize : undefined,\n handlerStyle: this._handlerStyle,\n // 不重要, 但需要预设的参数\n dy: this.attribute.slider.dy,\n dx: this.attribute.slider.dx,\n slidable: true,\n range: false,\n handlerText: { visible: false },\n startText: { visible: false },\n endText: { visible: false },\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n\n // 横向布局\n if (isHorizontal(this._orient)) {\n // 滑动条水平居中\n const railWidth = Math.max(0, this._layoutInfo.slider.size);\n const railHeight = this._railStyle.height ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'horizontal';\n attrs.railHeight = railHeight;\n attrs.railWidth = railWidth;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n // 纵向布局\n else {\n // 滑动条垂直居中\n const railHeight = Math.max(0, this._layoutInfo.slider.size);\n const railWidth = this._railStyle.width ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'vertical';\n attrs.railWidth = railWidth;\n attrs.railHeight = railHeight;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n return attrs;\n };\n\n private _initSlider = () => {\n const attrs = this._updateSliderAttrs();\n this._slider = new Slider(attrs);\n if (this._sliderVisible) {\n this.add(this._slider as unknown as INode);\n }\n };\n\n /**\n * 初始化控制器\n */\n private _updateControllerAttrs = () => {\n const attrs: ControllerAttributes = {\n start: this._start,\n pause: this._pause,\n forward: this._forward,\n backward: this._backward,\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n // 横向布局\n attrs.layout = isHorizontal(this._orient) ? 'horizontal' : 'vertical';\n attrs.start = {\n ...attrs.start,\n style: {\n ...attrs.start.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.pause = {\n ...attrs.pause,\n // 暂停按钮, 复用开始按钮的布局\n style: {\n ...attrs.pause.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.backward = {\n ...attrs.backward,\n style: {\n ...attrs.backward.style,\n x: this._layoutInfo.backward.x,\n y: this._layoutInfo.backward.y\n }\n };\n attrs.forward = {\n ...attrs.forward,\n style: {\n ...attrs.forward.style,\n x: this._layoutInfo.forward.x,\n y: this._layoutInfo.forward.y\n }\n };\n return attrs;\n };\n\n private _initController = () => {\n const attrs = this._updateControllerAttrs();\n this._controller = new Controller(attrs);\n if (this._controllerVisible) {\n this.add(this._controller as unknown as INode);\n }\n };\n\n /**\n * 渲染\n */\n render() {\n this._initLayoutInfo();\n this.renderSlider();\n this.renderController();\n }\n\n /**\n * 更新滑动条\n */\n renderSlider() {\n const attrs = this._updateSliderAttrs();\n this._slider.setAttributes(attrs);\n }\n\n /**\n * 更新控制器\n */\n renderController() {\n const attrs = this._updateControllerAttrs();\n this._controller.setAttributes(attrs);\n }\n\n /**\n * 触发事件\n * @param eventType 事件类型\n * @param dataIndex 数据下标\n */\n dispatchCustomEvent(eventType: PlayerEventEnum, dataIndex: number) {\n this._dispatchEvent(eventType, {\n eventType,\n index: dataIndex,\n value: this._data[dataIndex]\n });\n }\n}\n","import { registerGroup, registerSymbol } from '@visactor/vrender-kits';\nimport { loadSliderComponent } from '../slider/register';\n\nfunction loadBasePlayer() {\n loadSliderComponent();\n registerGroup();\n registerSymbol();\n}\n\nexport function loadDiscretePlayerComponent() {\n loadBasePlayer();\n}\n\nexport function loadContinuousPlayerComponent() {\n loadBasePlayer();\n}\n","export enum PlayerEventEnum {\n change = 'change',\n play = 'play',\n pause = 'pause',\n backward = 'backward',\n forward = 'forward',\n end = 'end',\n\n /**\n * @deprecated please use `change` instead.\n */\n OnChange = 'change',\n /**\n * @deprecated please use `play` instead.\n */\n OnPlay = 'play',\n /**\n * @deprecated please use `pause` instead.\n */\n OnPause = 'pause',\n /**\n * @deprecated please use `backward` instead.\n */\n OnBackward = 'backward',\n /**\n * @deprecated please use `forward` instead.\n */\n OnForward = 'forward',\n /**\n * @deprecated please use `end` instead.\n */\n OnEnd = 'end'\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { DirectionType, DiscretePlayerAttributes, PlayerAttributes } from './type';\nimport { DirectionEnum, PlayerEventEnum } from './type';\nimport { forwardStep, isReachEnd, isReachStart } from './utils';\nimport { ControllerEventEnum } from './controller/constant';\nimport type { ComponentOptions } from '../interface';\nimport { loadDiscretePlayerComponent } from './register';\n\nloadDiscretePlayerComponent();\nexport class DiscretePlayer extends BasePlayer {\n declare attribute: DiscretePlayerAttributes;\n\n private _activeIndex = -1;\n\n protected _alternate: boolean;\n protected _interval: number;\n\n private _isPlaying: boolean;\n private _direction: DirectionType;\n private _tickTime: number;\n private _rafId: number;\n private _isReachEnd = false;\n\n constructor(attributes: DiscretePlayerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, attributes));\n\n this._initAttributes();\n this._initDataIndex();\n this._initEvents();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n this._initAttributes();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n this._alternate = this.attribute.alternate ?? false;\n this._interval = this.attribute.interval ?? 1000;\n this._direction = this.attribute.direction ?? DirectionEnum.Default;\n };\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex = () => {\n this._dataIndex = isNil(this.attribute.dataIndex)\n ? this._direction === 'default'\n ? this._minIndex\n : this._maxIndex\n : this.attribute.dataIndex ?? 0;\n\n this._slider.setAttribute('value', this._dataIndex);\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent & { detail: { value: number } }) => {\n const middle = Math.floor(e.detail.value) + 0.5;\n this._dataIndex = e.detail.value >= middle ? Math.ceil(e.detail.value) : Math.floor(e.detail.value);\n this._slider.setValue(this._dataIndex);\n this.dispatchCustomEvent(PlayerEventEnum.change);\n });\n };\n\n /**\n * 派遣事件\n */\n dispatchCustomEvent(event: PlayerEventEnum) {\n super.dispatchCustomEvent(event, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = () => {\n if (this._isPlaying) {\n return;\n }\n // 一条数据无需播放\n if (this._data.length === 1) {\n return;\n }\n // 图标切换\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 若到达末尾, 则计算下一次播放的状态下标\n if (\n isReachEnd({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n }) ||\n isReachStart({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n })\n ) {\n // 根据方向恢复dataIndex\n if (this._direction === DirectionEnum.Default) {\n this._updateDataIndex(this._minIndex);\n } else {\n this._updateDataIndex(this._maxIndex);\n }\n }\n\n // 事件触发\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 重置结束状态\n this._isReachEnd = false;\n // 重置tick时间, 暂停后重新播放也会重新计时\n this._tickTime = Date.now();\n // 开启动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, true));\n };\n\n /**\n * 播放过程\n */\n private _play = (isFirstPlay: boolean) => {\n const now = Date.now();\n\n // 抵达终点, 延迟一个interval触发end\n if (this._isReachEnd && now - this._tickTime >= this._interval) {\n this._isReachEnd = false;\n this._playEnd();\n return;\n }\n // 未达终点\n\n // 第一个播放帧, 立即执行\n if (isFirstPlay && this._activeIndex !== this._dataIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this._activeIndex = this._dataIndex;\n }\n // 中间播放帧, 每一个interval执行一次\n else if (now - this._tickTime >= this._interval) {\n this._tickTime = now;\n this._updateDataIndex(forwardStep(this._direction, this._dataIndex, this._minIndex, this._maxIndex));\n this._activeIndex = this._dataIndex;\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n\n // 终止条件\n if (\n (this._direction === 'default' && this._dataIndex >= this._maxIndex) ||\n (this._direction === 'reverse' && this._dataIndex <= this._minIndex)\n ) {\n this._isReachEnd = true;\n }\n\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, false));\n };\n\n /**\n * 更新数据\n */\n private _updateDataIndex = (dataIndex: number) => {\n this._dataIndex = dataIndex;\n this._slider.setValue(this._dataIndex);\n };\n\n /**\n * 播放结束\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 图标切换\n this._controller.togglePlay();\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 重置ActiveIndex\n this._activeIndex = -1;\n // 播放结束时并且到达终点\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 后退接口\n */\n backward = () => {\n const { loop = false } = this.attribute as PlayerAttributes;\n let index;\n if (loop) {\n index = this._dataIndex - 1 < this._minIndex ? this._maxIndex : this._dataIndex - 1;\n } else {\n index = Math.max(this._dataIndex - 1, this._minIndex);\n }\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 前进接口\n */\n forward = () => {\n const { loop = false } = this.attribute as PlayerAttributes;\n let index;\n if (loop) {\n index = this._dataIndex + 1 > this._maxIndex ? this._minIndex : this._dataIndex + 1;\n } else {\n index = Math.min(this._dataIndex + 1, this._maxIndex);\n }\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n}\n","import type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { ContinuousPlayerAttributes } from './type';\nimport { PlayerEventEnum } from './type';\nimport { ControllerEventEnum } from './controller/constant';\nimport { loadContinuousPlayerComponent } from './register';\n\nloadContinuousPlayerComponent();\nexport class ContinuousPlayer extends BasePlayer {\n declare attribute: ContinuousPlayerAttributes;\n\n private _activeIndex: number;\n\n protected _alternate: boolean;\n protected _interval: number;\n protected _totalDuration: number;\n\n private _isPlaying = false;\n private _startTime: number = Date.now();\n private _elapsed: number;\n private _rafId: number;\n\n constructor(attributes: ContinuousPlayerAttributes) {\n super(attributes);\n\n this._initAttributes();\n this._initDataIndex();\n this._initEvents();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n // 新增一个占位数据\n this._maxIndex = this._data.length;\n this._slider.setAttribute('max', this._maxIndex);\n\n this._isPlaying = false;\n this._elapsed = 0;\n this._interval = this.attribute.interval ?? 1000;\n\n // 播放帧数(10条数据, 需要10个播放帧)\n const frames = this._data.length;\n\n // 若用户配置了总时长\n if (this.attribute.totalDuration && this._data.length) {\n this._totalDuration = this.attribute.totalDuration;\n // 避免除0\n this._interval = this._totalDuration / (frames ?? 1);\n }\n // 若未配置总时长, 则根据interval算出一个总时长, interval有默认值\n else {\n this._totalDuration = this._interval * frames;\n this._interval = this.attribute.interval;\n }\n };\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex = () => {\n this._dataIndex = this.attribute.dataIndex ?? this._minIndex;\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n /**\n * 根据value, 反推开始时间\n * 1. 计算进度\n * 2. 计算流逝时间\n * 3. 用现在的时间, 模拟一个开始时间\n */\n const value = (e.detail as unknown as { value: number; position: number })?.value;\n const progress = value / this._maxIndex;\n this._elapsed = progress * this._totalDuration;\n this._startTime = Date.now() - this._elapsed;\n\n this._dispatchChange(value);\n });\n };\n\n /**\n * 根据已流逝时间和总时长, 计算slider的值\n */\n private _getSliderValue = () => {\n const progress = this._elapsed / this._totalDuration;\n return Math.min(progress * this._maxIndex, this._maxIndex);\n };\n\n /**\n * 根据流逝时间, 更新Slider的值\n */\n private _updateSlider = () => {\n const value = this._getSliderValue();\n this._dataIndex = Math.floor(value);\n this._slider.setValue(Math.min(value, this._maxIndex));\n this._dispatchChange(Math.floor(value));\n };\n\n /**\n * 根据Slider的值, 判断是否要触发Change事件.\n */\n private _dispatchChange = (value: number) => {\n const index = Math.floor(value);\n if (index !== this._activeIndex) {\n this._dataIndex = index;\n this._activeIndex = index;\n\n if (index !== this._maxIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n }\n };\n\n /**\n * 派遣事件\n * @param eventType 事件类型\n */\n dispatchCustomEvent(eventType: PlayerEventEnum) {\n super.dispatchCustomEvent(eventType, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = async () => {\n if (this._isPlaying) {\n return;\n }\n // 切换按钮\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 播放结束后再点击play, 此条件下生效.\n if (this._elapsed >= this._totalDuration) {\n this._elapsed = 0;\n }\n // 此时此刻减去已流逝的时间, 则为起点对应的时间戳.\n this._startTime = Date.now() - this._elapsed;\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 开始播放动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放动画主要逻辑\n */\n private _play = () => {\n // 计算已流逝的时间, 但不需要保存\n this._elapsed = Date.now() - this._startTime;\n // 计算Slider的值.\n const value = this._getSliderValue();\n // 更新Slider的值.\n this._updateSlider();\n\n // 播放终止条件\n if (value >= this._maxIndex) {\n this._playEnd();\n return;\n }\n\n // 持续播放\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放结束时触发\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 切换按钮\n this._controller.togglePlay();\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n // 计算已流逝的时间, 需要记录下来\n this._elapsed = Date.now() - this._startTime;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 前进接口\n */\n backward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 减去 interval\n const elapsed = this._elapsed - interval;\n\n // 若到达起点\n if (elapsed <= 0) {\n this._elapsed = 0;\n this._startTime = now;\n }\n // 若未到达起点\n else {\n this._elapsed = elapsed;\n this._startTime = this._startTime + this._interval;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 后退接口\n */\n forward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 加上 1个interval\n const elapsed = this._elapsed + interval;\n // 若超过终点\n if (elapsed >= this._totalDuration) {\n this._startTime = now - this._totalDuration;\n this._elapsed = this._totalDuration;\n }\n // 未超过终点\n else {\n this._startTime = this._startTime - interval;\n this._elapsed = elapsed;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n\n render() {\n super.render();\n }\n}\n","import type { ContinuousPlayerAttributes, DiscretePlayerAttributes, Datum } from '@visactor/vrender-components';\nimport type { IPlayer } from '../interface';\nimport type { IRectGraphicAttribute, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport type { IRectMarkSpec, ISymbolMarkSpec } from '../../../typings';\nimport { transformToGraphic } from '../../../util/style';\nimport type { BaseGraphicAttributes } from '@visactor/vrender-components';\n\n/**\n * IRectMarkSpec => IRectGraphicAttribute\n */\nconst rectToAttribute = (markSpec: IRectMarkSpec): IRectGraphicAttribute => {\n const result: IRectGraphicAttribute = {\n ...(markSpec as unknown as IRectGraphicAttribute)\n };\n\n return transformToGraphic(result) as IRectGraphicAttribute;\n};\n\n/**\n * ISymbolMarkSpec => ISymbolGraphicAttribute\n */\nconst symbolToAttribute = (markSpec: ISymbolMarkSpec): ISymbolGraphicAttribute => {\n const result: ISymbolGraphicAttribute = {\n ...(markSpec as unknown as ISymbolGraphicAttribute)\n };\n\n return transformToGraphic(result) as ISymbolGraphicAttribute;\n};\n\nconst baseToAttribute = (spec: BaseGraphicAttributes) => {\n const result: BaseGraphicAttributes = {\n ...spec,\n style: {\n ...transformToGraphic(spec.style)\n }\n };\n return result;\n};\n\nconst transformToAttrs = (spec: IPlayer) => {\n // slider\n const trackStyle = rectToAttribute(spec?.slider?.trackStyle ?? {});\n const railStyle = rectToAttribute(spec?.slider?.railStyle ?? {});\n const handlerStyle = symbolToAttribute(spec?.slider?.handlerStyle ?? {});\n\n // controllers\n const start = baseToAttribute(spec?.controller?.start ?? {});\n const pause = baseToAttribute(spec?.controller?.pause ?? {});\n const backward = baseToAttribute(spec?.controller?.backward ?? {});\n const forward = baseToAttribute(spec?.controller?.forward ?? {});\n\n const attrs = {\n ...spec,\n direction: spec.direction,\n interval: spec.interval,\n visible: spec.visible,\n // 不配置默认值的话, set attr时会将undefined代入配置, 导致vrender默认配置失效\n orient: spec.orient ?? 'bottom',\n slider: {\n ...spec.slider,\n trackStyle: trackStyle,\n railStyle: railStyle,\n handlerStyle: handlerStyle\n },\n controller: {\n ...spec.controller,\n start: start,\n pause: pause,\n backward: backward,\n forward: forward\n }\n };\n\n // player hidden after set player.visible: 'false'\n if (!spec.visible) {\n attrs.controller.visible = false;\n attrs.slider.visible = false;\n }\n\n return attrs;\n};\n\n/**\n * 连续型播放器spec转换为Attrs\n */\nexport const transformContinuousSpecToAttrs = (spec: IPlayer, data: Datum[]): ContinuousPlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'continuous'\n});\n\nexport const transformDiscreteSpecToAttrs = (spec: IPlayer, data: Datum[]): DiscretePlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'discrete'\n});\n","import type { IOrientType } from '../../../typings';\n\nexport const isVertical = (orient: IOrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: IOrientType) => orient === 'top' || orient === 'bottom';\n","import { Factory } from './../../core/factory';\nimport type { INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { ContinuousPlayerAttributes, DiscretePlayerAttributes } from '@visactor/vrender-components';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscretePlayer, ContinuousPlayer, PlayerEventEnum } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, array, isEqual, isValidNumber } from '@visactor/vutils';\n\nimport type { IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\n\nimport type { DirectionType, IPlayer } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent } from '../interface';\nimport type { IPoint, IOrientType, ILayoutRect, IChartSpec, IDataValues } from '../../typings';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport { transformContinuousSpecToAttrs, transformDiscreteSpecToAttrs } from './utils/transform';\nimport { isHorizontal, isVertical } from './utils/orient';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { ChartEvent } from '../../constant/event';\n\nexport class Player extends BaseComponent implements IComponent {\n layoutZIndex: number = LayoutZIndex.Player;\n layoutLevel: number = LayoutLevel.Player;\n\n static specKey = 'player';\n specKey: string = 'player';\n\n static type = ComponentTypeEnum.player;\n type = ComponentTypeEnum.player;\n protected _orient: IOrientType = 'bottom';\n private _specs: Partial[];\n\n private _playerComponent: DiscretePlayer | ContinuousPlayer;\n private _cacheAttrs: ContinuousPlayerAttributes | DiscretePlayerAttributes;\n\n private _visible: boolean;\n private _direction: DirectionType;\n private _alternate: boolean;\n private _dx: number;\n private _dy: number;\n private _width: number;\n private _height: number;\n private _position: 'start' | 'middle' | 'end';\n\n get orient() {\n return this._orient;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n }\n\n /**\n * 设置Attr\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._orient = this._spec.orient ?? 'bottom';\n this._specs = this._spec.specs ?? [];\n this._direction = this._spec.direction ?? 'default';\n this._alternate = this._spec.alternate ?? false;\n this._dx = this._spec.dx ?? 0;\n this._dy = this._spec.dy ?? 0;\n this._position = this._spec.position ?? 'middle';\n this._visible = this._spec.visible ?? true;\n }\n\n /**\n * 计算组件位置(布局的左上角起点)\n * @param pos\n */\n afterSetLayoutStartPoint(pos: IPoint) {\n super.afterSetLayoutStartPoint(pos);\n if (isValidNumber(pos.x)) {\n const offsetX = isVertical(this._orient) ? pos.x + this._sliderExceededSize() / 2 : pos.x;\n this._playerComponent && this._playerComponent.setAttribute('x', offsetX);\n }\n if (isValidNumber(pos.y)) {\n const offsetY = isHorizontal(this._orient) ? pos.y + this._sliderExceededSize() / 2 : pos.y;\n this._playerComponent && this._playerComponent.setAttribute('y', offsetY);\n }\n }\n\n /**\n * 计算组件占用的bound box\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n this._width = this._computeWidth(rect);\n this._height = this._computeHeight(rect);\n this._dx = this._computeDx(fullSpace);\n this._dy = this._computeDy(fullSpace);\n\n const bounds = this._computeLayoutRect(rect, this._width, this._height);\n\n this._createOrUpdatePlayerComponent();\n\n return bounds;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._playerComponent] as unknown as IGroup[];\n }\n\n /**\n * 播放器属性\n */\n private _getPlayerAttrs = () => {\n const type = this._spec.type;\n const layoutAttrs = {\n size: {\n width: this._width,\n height: this._height\n },\n dx: this._spec.dx ?? 0 + this._dx,\n dy: this._spec.dy ?? 0 + this._dy\n };\n // 离散类型Attrs\n if (type === 'discrete') {\n return {\n ...transformDiscreteSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent,\n loop: this._spec?.loop ?? true\n };\n }\n // 连续类型Attrs\n return {\n ...transformContinuousSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent,\n loop: this._spec?.loop ?? true\n };\n };\n\n /**\n * 创建或更新播放器组件\n */\n private _createOrUpdatePlayerComponent = () => {\n const attrs = { ...this._getPlayerAttrs() };\n const container = this.getContainer();\n if (this._playerComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._cacheAttrs = attrs;\n this._playerComponent.setAttributes(attrs);\n // FIXME: player 组件没有重写 setAttributes 方法,因此不能正常更新样式。以下两句模拟执行了 setAttributes 方法,但是应在 vrender-component 的后续版本中实现 setAttributes 方法\n this._playerComponent._initAttributes();\n this._playerComponent.render();\n }\n } else {\n if (attrs.type === 'discrete') {\n this._playerComponent = new DiscretePlayer(attrs);\n } else {\n this._playerComponent = new ContinuousPlayer(attrs);\n }\n\n this._cacheAttrs = attrs;\n this._playerComponent.name = `player`;\n\n container.add(this._playerComponent as unknown as INode);\n\n this._initEvent();\n }\n };\n\n /**\n * 计算起点\n */\n private _computeLayoutRect(rect: ILayoutRect, width: number, height: number) {\n // don't set bounds when player hidden\n if (this._visible === false) {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n // set bounds by 4 kinds of orient\n switch (this._orient) {\n case 'top': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'right': {\n return { x1: rect.width - width, y1: 0, x2: rect.width, y2: rect.height };\n }\n case 'left': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'bottom':\n default: {\n return { x1: 0, y1: rect.height - height, x2: rect.width, y2: rect.height };\n }\n }\n }\n\n /**\n * 计算组件宽度\n */\n private _computeWidth(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.width)) {\n return Math.min(rect.width, Number(this._spec.width));\n }\n\n if (isVertical(this._orient)) {\n return this._maxSize();\n }\n return rect.width;\n }\n\n /**\n * 计算组件高度\n */\n private _computeHeight(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.height)) {\n this._height = this._spec.height;\n return Math.min(rect.height, Number(this._spec.height));\n }\n\n if (isHorizontal(this._orient)) {\n return this._maxSize();\n }\n return rect.height;\n }\n\n /**\n * 计算x方向的偏移, 用于实现对齐\n */\n private _computeDx(rect: ILayoutRect) {\n // 垂直时, x不偏移\n if (isVertical(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.width - this._width) / 2;\n }\n // end\n return rect.width - this._width;\n }\n\n /**\n * 计算y方向的偏移, 用于实现对齐\n */\n private _computeDy(rect: ILayoutRect) {\n // 水平时, y不偏移\n if (isHorizontal(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.height - this._height) / 2;\n }\n\n // end\n return rect.height - this._height;\n }\n\n /**\n * 播放器宽度取计算子组件中最高的一个\n */\n private _maxSize = () => {\n return Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size),\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10\n );\n };\n\n /**\n * 滑动条超过按钮的高度\n */\n private _sliderExceededSize = () => {\n const sliderHeight =\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10;\n const controllersHeight = Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size)\n );\n if (sliderHeight >= controllersHeight) {\n return sliderHeight - controllersHeight;\n }\n return 0;\n };\n\n changePlayerIndex(index: number) {\n const spec = this._specs[index];\n (array(spec.data) as IDataValues[]).forEach(data => {\n this._option?.globalInstance?.updateData(data.id, data.values);\n });\n this.event.emit(ChartEvent.playerChange, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n }\n\n /**\n * 事件\n */\n private _initEvent = () => {\n if (this._option.disableTriggerEvent) {\n return;\n }\n // 自动播放\n this._option.globalInstance.on(ChartEvent.rendered, () => {\n if (this._spec?.auto) {\n this._playerComponent.play();\n }\n });\n\n // 循环播放 与 交替方向\n this._playerComponent.addEventListener(PlayerEventEnum.end, () => {\n this.event.emit(ChartEvent.playerEnd, { model: this });\n\n // 交替方向, 仅离散轴支持\n if (this._alternate && this._spec.type === 'discrete') {\n this._direction = this._direction === 'default' ? 'reverse' : 'default';\n this._playerComponent.setAttributes({\n direction: this._direction,\n dataIndex: this._direction === 'reverse' ? this._specs.length - 2 : 1\n });\n }\n\n // 循环播放\n if (this._spec?.loop) {\n this._playerComponent.play();\n }\n });\n\n // 数据更新\n this._playerComponent.addEventListener(PlayerEventEnum.change, (e: { detail: { index: number } }) => {\n // 更新data\n const { index } = e.detail;\n this.changePlayerIndex(index);\n });\n\n // 后退\n this._playerComponent.addEventListener(PlayerEventEnum.backward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerBackward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 前进\n this._playerComponent.addEventListener(PlayerEventEnum.forward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerForward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 播放\n this._playerComponent.addEventListener(PlayerEventEnum.play, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPlay, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 暂停\n this._playerComponent.addEventListener(PlayerEventEnum.pause, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPause, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n };\n}\n\nexport const registerPlayer = () => {\n Factory.registerComponent(Player.type, Player);\n};\n","import { isValidNumber, merge } from '@visactor/vutils';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { bitmapTool } from './overlap';\nimport type { DataLabelAttrs } from './type';\nimport type { LabelBase } from './base';\nimport { LabelBase as PointLabel } from './base';\nimport type { ComponentOptions } from '../interface';\nimport { getLabelComponent } from './data-label-register';\n\nexport class DataLabel extends AbstractComponent {\n name = 'data-label';\n\n private _componentMap: Map>;\n\n private static defaultAttributes: Partial = {\n pickable: false\n };\n\n constructor(attributes: DataLabelAttrs, options?: ComponentOptions) {\n const { dataLabels, ...restAttributes } = attributes;\n super(\n options?.skipDefault ? attributes : { dataLabels, ...merge({}, DataLabel.defaultAttributes, restAttributes) }\n );\n }\n\n protected render(): void {\n const { dataLabels, size } = this.attribute;\n if (!dataLabels || dataLabels.length === 0) {\n return;\n }\n const { width = 0, height = 0, padding } = size || {};\n\n if (!width || !height || !isValidNumber(height * width)) {\n return;\n }\n\n if (!this._componentMap) {\n this._componentMap = new Map();\n }\n const tool = bitmapTool(width, height, padding);\n const bitmap = tool.bitmap();\n\n const currentComponentMap = new Map();\n const prevComponentMap = this._componentMap;\n\n for (let i = 0; i < dataLabels.length; i++) {\n const dataLabel = dataLabels[i];\n const labelComponent = getLabelComponent(dataLabel.type) || PointLabel;\n if (labelComponent) {\n const { baseMarkGroupName, type } = dataLabel;\n const id = dataLabel.id ?? `${baseMarkGroupName}-${type}-${i}`;\n\n if (dataLabel.type === 'arc') {\n dataLabel.width = size.width;\n dataLabel.height = size.height;\n }\n\n let component = this._componentMap.get(id);\n if (component) {\n component.setBitmapTool(tool);\n component.setBitmap(bitmap);\n component.setAttributes(dataLabel);\n currentComponentMap.set(id, component);\n } else {\n component = new labelComponent(dataLabel as any);\n component.setBitmap(bitmap);\n component.setBitmapTool(tool);\n this.add(component as unknown as INode);\n currentComponentMap.set(id, component);\n }\n }\n }\n\n prevComponentMap.forEach((cp, key) => {\n if (!currentComponentMap.get(key)) {\n this.removeChild(cp as unknown as IGraphic);\n }\n });\n\n this._componentMap = currentComponentMap;\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._componentMap.forEach(component => {\n component.disableAnimation();\n });\n }\n\n enableAnimation() {\n this._componentMap.forEach(component => {\n component.enableAnimation();\n });\n }\n}\n","import { array, isNil, isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { BaseLabelAttrs, DataLabelAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataLabel } from '@visactor/vrender-components';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IMark,\n ITheme,\n IView,\n MarkFunctionType,\n Nil,\n StateEncodeSpec\n} from '../types';\nimport { ComponentEnum, GrammarMarkType } from '../graph/enums';\nimport type { ILabel, LabelSpec } from '../types/component';\nimport { Component } from '../view/component';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { Factory } from '../core/factory';\n\nexport const generateLabelAttributes = (\n marks: IMark[],\n groupSize: { width: number; height: number },\n encoder: BaseSingleEncodeSpec,\n labelStyle: MarkFunctionType>,\n parameters: any,\n theme: ITheme = {}\n): DataLabelAttrs => {\n const labelTheme = theme.components?.dataLabel;\n const dataLabels = marks\n .map((mark, index) => {\n const labelParameters = { ...parameters, labelIndex: index };\n const addition = invokeFunctionType(labelStyle, labelParameters, mark) ?? {};\n const { components = {} } = theme;\n let currentTheme: any = {};\n\n switch (mark.markType) {\n case GrammarMarkType.line:\n case GrammarMarkType.area:\n if (addition.type === 'line') {\n currentTheme = components.lineLabel;\n } else if (addition.type === 'area') {\n currentTheme = components.areaLabel;\n } else {\n currentTheme = components.lineDataLabel;\n }\n break;\n case GrammarMarkType.rect:\n case GrammarMarkType.rect3d:\n case GrammarMarkType.interval:\n currentTheme = components.rectLabel;\n break;\n case GrammarMarkType.symbol:\n case GrammarMarkType.circle:\n case GrammarMarkType.cell:\n currentTheme = components.symbolLabel;\n break;\n case GrammarMarkType.arc:\n case GrammarMarkType.arc3d:\n currentTheme = components.arcLabel;\n break;\n case GrammarMarkType.polygon:\n case GrammarMarkType.path:\n default:\n currentTheme = components.pointLabel;\n break;\n }\n\n const data: any[] = addition.data ?? [];\n const themeDatum = currentTheme?.data?.[0] ?? {};\n if (data && data.length > 0) {\n data.forEach((d, index) => {\n if (mark.elements[index]) {\n const attributes = invokeEncoder(encoder, d, mark.elements[index], labelParameters);\n merge(d, themeDatum, attributes);\n }\n });\n } else {\n const mergeAttributes = (attributes: any, themeDatum: any) => {\n const { data: labelData, ...restAttribute } = attributes;\n return { ...merge({}, themeDatum, restAttribute), data: labelData };\n };\n // process by order of elements\n mark.elements.forEach(element => {\n const graphicItem = element.getGraphicItem();\n if ((graphicItem as any).releaseStatus !== 'willRelease') {\n if (mark.isCollectionMark()) {\n const datum = element.getDatum();\n\n datum.forEach((entry: any) => {\n const attributes = invokeEncoder(encoder, entry, element, labelParameters);\n data.push(mergeAttributes(attributes, themeDatum));\n });\n } else {\n const attributes = invokeEncoder(encoder, element.getDatum(), element, labelParameters);\n data.push(mergeAttributes(attributes, themeDatum));\n }\n }\n });\n }\n\n const graphicItemName = mark.graphicItem?.name;\n const result = merge(\n {},\n currentTheme,\n {\n baseMarkGroupName: graphicItemName,\n // FIXME: hack\n // 标签是对数据顺序有强要求的场景,因为顺序会影响标签躲避结果;而目前没有机制保证 vrender 图元顺序与数据顺序一致。\n // 这里目前只能通过自定义方法来 hack\n getBaseMarks: () => mark.elements.map(element => element.getGraphicItem())\n },\n addition ?? {}\n );\n result.data = data ?? currentTheme.data;\n return result;\n })\n .filter(label => !isNil(label));\n\n const result = merge({}, labelTheme, { size: groupSize });\n result.dataLabels = dataLabels;\n return result;\n};\n\nexport class Label extends Component implements ILabel {\n static readonly componentType: string = ComponentEnum.label;\n protected declare spec: LabelSpec;\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, ComponentEnum.label, group);\n this.spec.componentType = ComponentEnum.label;\n }\n\n protected parseAddition(spec: LabelSpec) {\n super.parseAddition(spec);\n this.labelStyle(spec.labelStyle);\n this.size(spec.size);\n this.target(spec.target);\n return this;\n }\n\n labelStyle(style: MarkFunctionType>) {\n return this.setFunctionSpec(style, 'labelStyle');\n }\n\n size(size: LabelSpec['size']) {\n return this.setFunctionSpec(size, 'size');\n }\n\n target(mark: IMark | IMark[] | string | string[] | Nil): this {\n if (this.spec.target) {\n const prevMarks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.detach(prevMarks);\n }\n this.spec.target = mark;\n if (mark) {\n const nextMarks = array(mark).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.attach(nextMarks);\n }\n this.commit();\n return this;\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const marks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n const groupGraphicItem = this.group?.getGroupGraphicItem?.();\n let size = invokeFunctionType(this.spec.size, parameters);\n if (!size) {\n size = groupGraphicItem\n ? {\n width: groupGraphicItem.attribute.width ?? groupGraphicItem.AABBBounds.width(),\n height: groupGraphicItem.attribute.height ?? groupGraphicItem.AABBBounds.height()\n }\n : { width: Infinity, height: Infinity };\n }\n\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n\n return generateLabelAttributes(\n marks,\n size,\n encoder as BaseSingleEncodeSpec,\n this.spec.labelStyle,\n parameters,\n theme\n );\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n}\n\nexport const registerLabel = () => {\n Factory.registerGraphicComponent(\n ComponentEnum.label,\n (attrs: DataLabelAttrs) => new DataLabel(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.label, Label);\n};\n","import { BaseComponent } from '../base/base-component';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption } from '../../model/interface';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { ILabelSpec } from './interface';\nimport type { IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport type { LooseFunction } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Label;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._regions = options.getRegionsInIndex(options.regionIndexes);\n }\n\n protected _interactiveConfig(labelSpec: ILabelSpec) {\n const { interactive } = labelSpec;\n const result = { hover: false, select: false, state: labelSpec.state };\n if (interactive !== true) {\n return result;\n }\n\n const { hover, select } = this._option.getChart().getSpec();\n if (hover !== false || (hover as unknown as IHoverSpec).enable !== false) {\n result.hover = true;\n }\n if (select !== false || (select as unknown as ISelectSpec).enable !== false) {\n result.select = true;\n }\n return result;\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n return result;\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n}\n","import { registerTextGraphic } from '@visactor/vgrammar-core';\nimport { Factory } from './../core/factory';\nimport type { IMark } from './interface/common';\nimport { MarkTypeEnum } from './interface/type';\nimport { TextMark } from './text';\nimport type { ILabelMark } from './interface/mark';\n\nexport class LabelMark extends TextMark implements ILabelMark {\n static readonly type = MarkTypeEnum.text;\n static readonly constructorType = MarkTypeEnum.label;\n\n skipEncode = false;\n\n private _rule: string;\n getRule() {\n return this._rule;\n }\n setRule(rule: string) {\n this._rule = rule;\n }\n\n private _target: IMark;\n getTarget() {\n return this._target;\n }\n setTarget(target: IMark) {\n this._target = target;\n if (!this._rule) {\n this.setRule(target.type);\n }\n }\n\n private _component: IMark;\n getComponent() {\n return this._component;\n }\n setComponent(component: IMark) {\n this._component = component;\n }\n}\n\nexport const registerLabelMark = () => {\n Factory.registerMark(LabelMark.constructorType, LabelMark);\n registerTextGraphic();\n};\n","import type { IChartSpec } from '../../typings';\nimport { BaseComponentSpecTransformer } from '../base';\n\nexport class LabelSpecTransformer extends BaseComponentSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n return { spec, theme: this._theme };\n }\n}\n","import type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport { STACK_FIELD_TOTAL_BOTTOM, STACK_FIELD_TOTAL_TOP } from '../../constant/data';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IComponentMark, ILabelMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { eachSeries } from '../../util/model';\nimport type { ISeries } from '../../series/interface';\nimport type { IGroupMark, ILabel, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { defaultLabelConfig, textAttribute } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerComponentMark } from '../../mark/component';\nimport { BaseLabelComponent } from './base-label';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isArray, isFunction, isValid, pickWithout } from '@visactor/vutils';\nimport type { ILabelInfo, ILabelSpec, TransformedLabelSpec } from './interface';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport type { IChartSpec } from '../../typings';\nimport { LabelSpecTransformer } from './label-transformer';\n\nexport class Label extends BaseLabelComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n static specKey = 'label';\n specKey = 'label';\n\n static readonly transformerConstructor = LabelSpecTransformer as any;\n readonly transformerConstructor = LabelSpecTransformer;\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n protected _labelInfoMap: Map;\n\n protected _labelComponentMap: Map ILabelInfo | ILabelInfo[]>;\n\n protected _layoutRule: 'series' | 'region';\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._layoutRule = (spec as any).labelLayout || 'series';\n }\n\n static getSpecInfo(chartSpec: any, chartSpecInfo: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n const regionSpecInfo = chartSpecInfo?.region || [];\n const isLabelVisible = (labelSpecList: ILabelSpec[]) => {\n return labelSpecList.some(labelSpec => labelSpec.visible);\n };\n\n regionSpecInfo.forEach((regionInfo, i) => {\n const seriesIndexes = regionInfo.seriesIndexes || [];\n const hasVisibleLabel = seriesIndexes.some(seriesIndex => {\n const seriesInfo = chartSpecInfo.series[seriesIndex];\n const { markLabelSpec = {} } = seriesInfo;\n\n return Object.values(markLabelSpec).some(\n labelSpecList => Array.isArray(labelSpecList) && isLabelVisible(labelSpecList)\n );\n });\n if (hasVisibleLabel) {\n specInfo.push({\n spec: chartSpec,\n type: ComponentTypeEnum.label,\n specInfoPath: ['component', this.specKey, i],\n regionIndexes: [i]\n });\n }\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.initEvent();\n this._initTextMark();\n this._initLabelComponent();\n this._initTextMarkStyle();\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._labelInfoMap && this._labelInfoMap.clear();\n this._initTextMark();\n this._initTextMarkStyle();\n }\n\n initEvent() {\n this.event.on(ChartEvent.dataZoomChange, () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.disableAnimation();\n }\n });\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n });\n const enableAnimation = () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.enableAnimation();\n }\n });\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n };\n }\n\n protected _initTextMark() {\n if (!this._labelInfoMap) {\n this._labelInfoMap = new Map();\n }\n\n if (!this._labelComponentMap) {\n this._labelComponentMap = new Map();\n }\n eachSeries(this._regions, (series: ISeries) => {\n const { markLabelSpec = {} } = series.getSpecInfo();\n const markNames = Object.keys(markLabelSpec);\n const region = series.getRegion();\n\n if (!this._labelInfoMap.get(region)) {\n this._labelInfoMap.set(region, []);\n }\n for (let i = 0; i < markNames.length; i++) {\n const markName = markNames[i];\n const mark = series.getMarkInName(markName);\n if (!mark) {\n continue;\n }\n markLabelSpec[markName].forEach((spec: TransformedLabelSpec, index: number) => {\n if (spec.visible) {\n const info = this._labelInfoMap.get(region);\n const labelMark = this._createMark(\n {\n type: MarkTypeEnum.label,\n name: `${markName}-label-${index}`\n },\n { noSeparateStyle: true, attributeContext: series.getMarkAttributeContext() }\n ) as ILabelMark;\n labelMark.setTarget(mark);\n info.push({\n labelMark,\n baseMark: mark,\n series,\n labelSpec: spec\n });\n }\n });\n }\n });\n }\n\n protected _initLabelComponent() {\n this._labelInfoMap.forEach((regionLabelInfo, region) => {\n if (this._layoutRule === 'region') {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${region.getGroupMark().name}-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: (this._spec as any).support3d\n }\n );\n if (component) {\n component.setSkipBeforeLayouted(true);\n\n if (regionLabelInfo[0] && isValid(regionLabelInfo[0].labelSpec.zIndex)) {\n component.setMarkConfig({ zIndex: regionLabelInfo[0].labelSpec.zIndex });\n }\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region);\n });\n }\n } else {\n regionLabelInfo.forEach((labelInfo, i) => {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${labelInfo.labelMark.name}-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: labelInfo.baseMark.getMarkConfig().support3d\n }\n );\n if (component) {\n if (isValid(labelInfo.labelSpec.zIndex)) {\n component.setMarkConfig({ zIndex: labelInfo.labelSpec.zIndex });\n }\n\n component.setSkipBeforeLayouted(true);\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region)[i];\n });\n }\n });\n }\n });\n }\n\n protected _initTextMarkStyle() {\n this._labelComponentMap.forEach((labelInfoCb, labelComponent) => {\n const labelInfoArray = array(labelInfoCb());\n labelInfoArray.forEach(({ labelMark }) => {\n labelMark.setComponent(labelComponent);\n });\n });\n this._labelInfoMap.forEach(labelInfos => {\n labelInfos.forEach(info => {\n const { labelMark, labelSpec, series } = info;\n this.initMarkStyleWithSpec(labelMark, labelSpec, undefined);\n if (isFunction(labelSpec?.getStyleHandler)) {\n const styleHandler = labelSpec.getStyleHandler(series);\n styleHandler?.call(series, labelMark, labelSpec);\n }\n if (labelMark.stateStyle?.normal?.lineWidth) {\n labelMark.setAttribute('stroke', series.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n });\n });\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n this._labelComponentMap.forEach((labelInfoCb, labelComponent) => {\n const labelInfo = labelInfoCb();\n if (isArray(labelInfo)) {\n this._updateMultiLabelAttribute(labelInfo, labelComponent);\n } else {\n this._updateSingleLabelAttribute(labelInfo, labelComponent);\n }\n });\n }\n\n protected _updateMultiLabelAttribute(labelInfo: ILabelInfo[], labelComponent: IComponentMark) {\n this._updateLabelComponentAttribute(\n labelComponent.getProduct() as ILabel,\n labelInfo.map(({ baseMark }) => baseMark.getProduct()),\n labelInfo\n );\n }\n\n protected _updateSingleLabelAttribute(labelInfo: ILabelInfo, labelComponent: IComponentMark) {\n const { baseMark } = labelInfo;\n this._updateLabelComponentAttribute(labelComponent.getProduct() as ILabel, baseMark.getProduct(), [labelInfo]);\n }\n\n protected _updateLabelComponentAttribute(\n component: ILabel,\n target: IVGrammarMark | IVGrammarMark[],\n labelInfos: ILabelInfo[]\n ) {\n const dependCmp = this._option.getComponentsByType('totalLabel');\n component\n .target(target)\n .configure({ interactive: false })\n .depend(dependCmp.map(cmp => cmp.getMarks()[0].getProduct()))\n .labelStyle((mark: IVGrammarMark, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark, series } = labelInfo;\n const rule = labelMark.getRule();\n const interactive = this._interactiveConfig(labelSpec);\n /** arc label When setting the centerOffset of the spec, the label also needs to be offset accordingly, and the centerOffset is not in the labelSpec */\n const centerOffset = (this._spec as any)?.centerOffset ?? 0;\n let spec = mergeSpec(\n {\n textStyle: { pickable: labelSpec.interactive === true, ...labelSpec.style },\n overlap: {\n avoidMarks: dependCmp.map(cmp => cmp.getMarks()[0].getProductId())\n }\n },\n defaultLabelConfig(rule, labelInfo),\n {\n ...pickWithout(labelSpec, [\n 'position',\n 'style',\n 'state',\n 'type',\n 'stackDataFilterType',\n 'getStyleHandler'\n ]),\n ...interactive,\n centerOffset\n },\n labelSpec.stackDataFilterType\n ? {\n dataFilter:\n labelSpec.stackDataFilterType === 'min'\n ? (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_BOTTOM]);\n }\n : (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n }\n }\n : {}\n );\n\n if (series && series.parseLabelStyle) {\n spec = series.parseLabelStyle(spec, labelSpec, labelMark);\n }\n // TODO 可以优化。vgrammar 的 label 图元类型分发是完全依赖 baseMark 的类型。默认情况下,line/area 图元的标签会使用'line-data'标签,此时需要 vchart 将类型传给 vgrammar\n if (rule === 'line' || rule === 'area') {\n spec.type = rule;\n }\n return spec;\n }\n })\n .encode((datum, element, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark } = labelInfos[params.labelIndex];\n\n return labelMark.skipEncode\n ? { data: datum }\n : textAttribute(labelInfos[params.labelIndex], datum, labelSpec.formatMethod, labelSpec.formatter);\n }\n })\n .size(() => labelInfos[0].series.getRegion().getLayoutRect());\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const labelInfo = this._labelComponentMap.get(m)();\n let group;\n if (isArray(labelInfo)) {\n group = labelInfo[0].series.getRegion().getGroupMark().getProduct() as IGroupMark;\n } else {\n group = labelInfo.series.getRegion().getGroupMark().getProduct() as IGroupMark;\n }\n m.compile({ group, context: { model: this, labelInfo } });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n}\n\nexport const registerLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(Label.type, Label, true);\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_TOP } from '../../constant/data';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IMark, MarkType } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { IGroupMark, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { textAttribute } from './util';\nimport { BaseLabelComponent } from './base-label';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport { registerComponentMark } from '../../mark/component';\nimport type { IChartSpecInfo } from '../../chart/interface';\n\nexport class TotalLabel extends BaseLabelComponent {\n static type = ComponentTypeEnum.totalLabel;\n type = ComponentTypeEnum.totalLabel;\n name: string = ComponentTypeEnum.totalLabel;\n\n static specKey = 'totalLabel';\n specKey = 'totalLabel';\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n private _textMark?: ILabelMark;\n private _baseMark?: IMark;\n\n static getSpecInfo(chartSpec: any, chartSpecInfo?: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n chartSpecInfo?.region?.forEach((regionInfo, regionIndex) => {\n regionInfo.seriesIndexes?.forEach(seriesIndex => {\n const { spec } = chartSpecInfo.series[seriesIndex];\n const labelSpec = spec[this.specKey];\n if (labelSpec?.visible) {\n specInfo.push({\n spec: labelSpec,\n type: ComponentTypeEnum.totalLabel,\n specPath: ['series', seriesIndex, this.specKey],\n specInfoPath: ['component', this.specKey, seriesIndex],\n regionIndexes: [regionIndex],\n seriesIndexes: [seriesIndex]\n });\n }\n });\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this._initTextMark();\n this._initLabelComponent();\n }\n\n reInit(spec?: any) {\n super.reInit(spec);\n this._initTextMark();\n }\n\n protected _initTextMark() {\n const series = this._getSeries();\n if (series.getSpec().totalLabel?.visible) {\n const mark = series.getSeriesMark();\n if (mark) {\n const textMark = this._createMark({ type: MarkTypeEnum.label, name: `${mark.name}-total-label` }) as ILabelMark;\n this._baseMark = mark;\n this._textMark = textMark;\n this._initTextMarkStyle();\n }\n }\n }\n\n _initTextMarkStyle() {\n super.initMarkStyleWithSpec(this._textMark, this._spec);\n this.setMarkStyle(\n this._textMark,\n {\n text: (datum: Datum) => {\n return datum[STACK_FIELD_TOTAL];\n }\n },\n 'normal',\n AttributeLevel.Default\n );\n\n const series = this._getSeries();\n series.initTotalLabelMarkStyle?.(this._textMark);\n }\n\n protected _initLabelComponent() {\n const series = this._getSeries();\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${series.name}-total-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: this._spec.support3d\n }\n );\n if (component) {\n this._marks.addMark(component);\n }\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n const series = this._getSeries();\n this._marks.forEach((componentMark, index) => {\n const component = componentMark.getProduct() as ReturnType;\n component\n .target(this._baseMark.getProduct())\n .configure({ interactive: false })\n .labelStyle(() => {\n if (this._baseMark) {\n const { offset, animation, overlap } = this._spec;\n const interactive = this._interactiveConfig(this._spec);\n return mergeSpec(\n {\n textStyle: { pickable: this._spec.interactive === true },\n position: totalLabelPosition(series, this._baseMark.type),\n x: 0,\n y: 0\n },\n series.getTotalLabelComponentStyle?.({\n baseMark: this._baseMark,\n labelMark: this._textMark\n }) ?? {},\n {\n offset,\n animation,\n overlap,\n dataFilter: (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n },\n ...interactive\n }\n );\n }\n })\n .encode(datum => {\n return textAttribute(\n {\n baseMark: this._baseMark,\n labelMark: this._textMark,\n series,\n labelSpec: series.getSpec().totalLabel\n },\n datum,\n this._spec.formatMethod\n );\n })\n .size(() => this._regions[0].getLayoutRect());\n });\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const group = this._regions[0].getGroupMark().getProduct() as IGroupMark;\n m.compile({ group, context: { model: this } });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this.getMarks().forEach(m => {\n const graphicItem = m.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n\n protected _getSeries() {\n return this._option.getSeriesInIndex([this.getSpecPath()[1] as number])[0];\n }\n}\n\nexport function totalLabelPosition(series: ISeries, type: MarkType) {\n let position;\n const { direction } = series as ICartesianSeries;\n const isInverse =\n direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = isInverse ? 1 : 0;\n switch (type) {\n case 'rect':\n case 'symbol':\n position = positionMap[direction][index];\n break;\n default:\n position = 'top';\n }\n return position;\n}\n\nexport const registerTotalLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(TotalLabel.type, TotalLabel, true);\n};\n","/**\n *\n * @param x x方向到圆心距离\n * @param y y方向到圆心距离\n * @returns 在圆上的角度(顺时针方向, 与arc图元绘制方向一致)\n */\nexport const deltaXYToAngle = (y: number, x: number) => {\n const angle = Math.atan2(y, x);\n // ref: https://jsbin.com/taxozoyaja/2/edit?html,js,output\n return angle < 0 ? angle + Math.PI * 2 : angle;\n};\n\nexport const tan2AngleToAngle = (angle: number) => {\n return angle < 0 ? angle + Math.PI * 2 : angle;\n};\n","import type {\n IGroup,\n IImage,\n INode,\n ISymbol,\n IImageGraphicAttribute,\n IRichText,\n IRichTextGraphicAttribute,\n ILine,\n ILineGraphicAttribute\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport { ArcSegment, Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_POINT_TEXT_STYLE_MAP, DEFAULT_MARK_POINT_THEME, FUZZY_EQUAL_DELTA } from './config';\nimport type { IItemContent, IItemLine, MarkPointAnimationType, MarkPointAttrs, MarkerAnimationState } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IMarkPointItemPosition } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkPointComponent } from './register';\nimport { computeOffsetForlimit } from '../util/limit-shape';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkPointAnimation, markPointAnimate } from './animate/animate';\nimport {\n deltaXYToAngle,\n fuzzyEqualNumber,\n getTextAlignAttrOfVerticalDir,\n isPostiveXAxis,\n removeRepeatPoint\n} from '../util';\n\nloadMarkPointComponent();\n\nexport function registerMarkPointAnimate() {\n MarkPoint._animate = markPointAnimate;\n}\n\nexport class MarkPoint extends Marker {\n name = 'markPoint';\n static defaultAttributes = DEFAULT_MARK_POINT_THEME;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkPointAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState): void {\n if (MarkPoint._animate && this._animationConfig) {\n MarkPoint._animate([this._line, this._decorativeLine], this._item, this._animationConfig, state);\n }\n }\n\n private _item!: ISymbol | Tag | IImage | IRichText;\n private _targetItem!: ISymbol;\n\n private _line?: Segment;\n\n private _decorativeLine!: ILine;\n private _isArcLine: boolean = false; // 用于区分 arc-segment 和 segment\n private _isStraightLine: boolean = false; // 用于区分绘制 纯直线 和 折线,(type-do/op/po时, 如果偏移量很小, 视觉无法分辨, 也需要绘制成直线)\n\n constructor(attributes: MarkPointAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkPoint.defaultAttributes, attributes));\n }\n\n protected setLabelPos() {\n //do nothing\n }\n\n protected getTextAlignAttr(\n autoRotate: boolean,\n offsetX: number,\n offsetY: number,\n lineEndAngle: number,\n itemPosition: keyof typeof IMarkPointItemPosition\n ) {\n // 垂直方向例外\n if (\n fuzzyEqualNumber(Math.abs(lineEndAngle), Math.PI / 2, FUZZY_EQUAL_DELTA) ||\n fuzzyEqualNumber(Math.abs(lineEndAngle), (Math.PI * 3) / 2, FUZZY_EQUAL_DELTA)\n ) {\n return getTextAlignAttrOfVerticalDir(autoRotate, lineEndAngle, itemPosition);\n }\n\n if (isPostiveXAxis(lineEndAngle)) {\n return DEFAULT_MARK_POINT_TEXT_STYLE_MAP.postiveXAxis[itemPosition];\n }\n return DEFAULT_MARK_POINT_TEXT_STYLE_MAP.negativeXAxis[itemPosition];\n }\n\n protected setItemAttributes(\n item: ISymbol | Tag | IImage | IRichText,\n itemContent: IItemContent,\n newPosition: Point,\n newItemPosition: Point,\n itemType: 'symbol' | 'text' | 'image' | 'richText' | 'custom'\n ) {\n if (!item) {\n return;\n }\n const {\n autoRotate = true,\n refX = 0,\n refY = 0,\n refAngle = 0,\n textStyle = {},\n richTextStyle = {},\n imageStyle = {},\n position: positionType = IMarkPointItemPosition.middle\n } = itemContent;\n const { state } = this.attribute as MarkPointAttrs;\n const lineEndAngle = this._line?.getEndAngle() || 0;\n const itemRefOffsetX = refX * Math.cos(lineEndAngle) + refY * Math.cos(lineEndAngle - Math.PI / 2);\n const itemRefOffsetY = refX * Math.sin(lineEndAngle) + refY * Math.sin(lineEndAngle - Math.PI / 2);\n if (itemType === 'text') {\n const offsetX = newItemPosition.x - newPosition.x;\n const offsetY = newItemPosition.y - newPosition.y;\n item.setAttributes({\n ...(textStyle as TagAttributes),\n textStyle: {\n ...this.getTextAlignAttr(\n autoRotate,\n offsetX,\n offsetY,\n lineEndAngle,\n itemContent.position ?? ('end' as keyof typeof IMarkPointItemPosition)\n ),\n ...textStyle.textStyle\n },\n state: {\n panel: merge({}, DEFAULT_STATES, state?.textBackground),\n text: merge({}, DEFAULT_STATES, state?.text)\n }\n } as any);\n } else if (itemType === 'richText') {\n item.setAttributes({\n dx: this.getItemDx(item, positionType, richTextStyle) + (richTextStyle.dx || 0),\n dy: this.getItemDy(item, positionType, richTextStyle) + (richTextStyle.dy || 0)\n });\n item.states = merge({}, DEFAULT_STATES, state?.richText);\n } else if (itemType === 'image') {\n item.setAttributes({\n dx: this.getItemDx(item, positionType, imageStyle) + (imageStyle.dx || 0),\n dy: this.getItemDy(item, positionType, imageStyle) + (imageStyle.dy || 0)\n });\n item.states = merge({}, DEFAULT_STATES, state?.image);\n }\n\n const itemAngle = isPostiveXAxis(lineEndAngle) ? lineEndAngle : lineEndAngle - Math.PI;\n\n item.setAttributes({\n x: newItemPosition.x + (itemRefOffsetX || 0),\n y: newItemPosition.y + (itemRefOffsetY || 0),\n angle: autoRotate && itemAngle + refAngle\n });\n }\n\n protected getItemDx(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const width = (item as IGroup)?.AABBBounds?.width() ?? (style?.width || 0);\n if (position.includes('inside')) {\n return -width;\n }\n if (position === 'insideTop') {\n return 0;\n }\n return 0;\n }\n\n protected getItemDy(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const height = (item as IGroup)?.AABBBounds?.height() ?? (style?.height || 0);\n if (position.includes('top') || position.includes('Top')) {\n return -height;\n }\n if (position.includes('middle') || position.includes('Middle')) {\n return -height / 2;\n }\n return 0;\n }\n\n protected initItem(itemContent: IItemContent, newPosition: Point, newItemPosition: Point) {\n const { state } = this.attribute as MarkPointAttrs;\n const { type = 'text', symbolStyle, richTextStyle, imageStyle, renderCustomCallback } = itemContent;\n let item: ISymbol | Tag | IImage | IRichText | IGroup;\n if (type === 'symbol') {\n item = graphicCreator.symbol({\n ...newItemPosition,\n ...symbolStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.symbol);\n } else if (type === 'text') {\n item = new Tag({\n ...newItemPosition,\n state: {\n panel: merge({}, DEFAULT_STATES, state?.textBackground),\n text: merge({}, DEFAULT_STATES, state?.text)\n }\n });\n } else if (type === 'richText') {\n item = graphicCreator.richtext({\n ...newItemPosition,\n ...richTextStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.richText);\n } else if (type === 'image') {\n item = graphicCreator.image({\n ...newItemPosition,\n ...imageStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.image);\n } else if (type === 'custom' && renderCustomCallback) {\n item = renderCustomCallback();\n item.states = merge({}, DEFAULT_STATES, state?.customMark);\n }\n item.name = `mark-point-${type}`;\n this.setItemAttributes(item, itemContent, newPosition, newItemPosition, type);\n return item;\n }\n\n protected getItemLineAttr(itemLine: IItemLine, newPosition: Point, newItemPosition: Point) {\n let points: Point[] = [];\n let center = { x: 0, y: 0 };\n let radius = 0;\n let startAngle = 0;\n let endAngle = 0;\n const { type = 'type-s', arcRatio = 0.8 } = itemLine;\n // confine之后位置会变化,所以这里需要重新check是否是直线\n const itemOffsetX = newItemPosition.x - newPosition.x;\n const itemOffsetY = newItemPosition.y - newPosition.y;\n this._isStraightLine =\n fuzzyEqualNumber(itemOffsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(itemOffsetY, 0, FUZZY_EQUAL_DELTA);\n if (this._isArcLine) {\n // 思路:\n // 1. 以数据位置为起点, 标记内容的位置为终点绘制圆弧\n // - 在起点与终点的垂直平分线上找圆心\n // - 根据圆心计算半径\n // - 根据圆心计算起始角度和结束角度\n // 2. 根据数据位置上要绘制的targetSymbol调整起始角度, 保证标记线上的startSymbol紧贴在targetSymbol上\n // ps: 计算时将targetSymbol看作圆, 如果是其他不规则形状, 无法保证\n // - 直接计算圆弧与targetSymbol的交点 到 圆心 的角度(也可以先计算交点的准确坐标, 但需解二元二次方程, 可行却没必要)\n // - 用计算好的起始角度 - 交点到圆心的角度, 得到最终起始角度\n // 3. 根据是否为凹凸圆弧, 进行角度的进一步加工\n\n const { x: x1, y: y1 } = this.attribute.position;\n const { x: x2, y: y2 } = newItemPosition;\n // 得到中点和斜率\n const x0 = (x1 + x2) / 2;\n const y0 = (y1 + y2) / 2;\n // 得到垂直平分线表达式\n const k = y1 === y2 ? 0 : -(x1 - x2) / (y1 - y2); // 垂直平分线斜率 * 两点连线斜率 = -1\n const line = (x: number) => k * (x - x0) + y0;\n // 在垂直平分线上找圆心\n const direction = y2 > y1 ? -1 : 1;\n const deltaX = arcRatio * direction * x0; // 数值决定曲率, 符号决定法向, 可通过配置自定义\n const centerX = x0 + deltaX;\n const centerY = line(centerX);\n // 计算半径和角度\n startAngle = deltaXYToAngle(y1 - centerY, x1 - centerX);\n endAngle = deltaXYToAngle(y2 - centerY, x2 - centerX);\n center = { x: centerX, y: centerY };\n\n // 圆弧与symbol交点的角度\n const R = Math.sqrt((centerX - x1) * (centerX - x1) + (centerY - y1) * (centerY - y1));\n const r = this.attribute.targetSymbol.style.size / 2;\n const deltaAngle = Math.acos(Math.sqrt(1 - (r * r) / (4 * R * R))) * 2;\n startAngle = startAngle + deltaAngle;\n\n if (arcRatio > 0) {\n // 此时绘制凹圆弧, 顺时针绘制\n // 根据arc图元绘制逻辑, 需要保证endAngle > startAngle, 才能顺时针绘制\n if (endAngle < startAngle) {\n endAngle += Math.PI * 2;\n }\n } else {\n // 此时绘制凸圆弧, 顺时针绘制\n // 根据arc图元绘制逻辑, 需要保证endAngle < startAngle, 才能逆时针绘制\n if (startAngle < endAngle) {\n startAngle += Math.PI * 2;\n }\n }\n\n radius = Math.sqrt((centerX - x1) * (centerX - x1) + (centerY - y1) * (centerY - y1));\n } else if (type === 'type-do' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: (newPosition.x + newItemPosition.x) / 2,\n y: newItemPosition.y\n },\n newItemPosition\n ];\n } else if (type === 'type-po' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: newItemPosition.x,\n y: newPosition.y\n },\n newItemPosition\n ];\n } else if (type === 'type-op' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: newPosition.x,\n y: newItemPosition.y\n },\n newItemPosition\n ];\n } else {\n points = [newPosition, newItemPosition];\n }\n // 插值的过程中可能会产生重复的点, 在此去除\n points = removeRepeatPoint(points);\n return {\n points,\n center,\n radius,\n startAngle,\n endAngle\n };\n }\n\n protected reDrawLine(itemLine: IItemLine, pointsAttr: any) {\n this._line.release();\n const { startSymbol, endSymbol, lineStyle, type = 'type-s' } = itemLine;\n const { state } = this.attribute as MarkPointAttrs;\n const lineConstructor = this._isArcLine ? ArcSegment : Segment;\n this._container.removeChild(this._line);\n this._line = new lineConstructor({\n ...pointsAttr,\n pickable: false,\n startSymbol,\n endSymbol,\n lineStyle,\n visible: itemLine.visible,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n } as any);\n this._container.add(this._line as unknown as INode);\n }\n\n protected setItemLineAttr(itemLine: IItemLine, newPosition: Point, newItemPosition: Point) {\n if (this._line) {\n const { startSymbol, endSymbol, lineStyle, type = 'type-s' } = itemLine;\n const { state } = this.attribute as MarkPointAttrs;\n const pointsAttr = this.getItemLineAttr(itemLine, newPosition, newItemPosition);\n if ((this._isArcLine && this._line.key === 'arc-segment') || (!this._isArcLine && this._line.key === 'segment')) {\n this._line.setAttributes({\n ...pointsAttr,\n startSymbol,\n endSymbol,\n lineStyle,\n visible: itemLine.visible,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n } else {\n this.reDrawLine(itemLine, pointsAttr);\n }\n }\n }\n\n protected getDecorativeLineAttr(itemLine: IItemLine) {\n const decorativeLength = itemLine?.decorativeLine?.length || 10;\n const itemAngle = this._line.getEndAngle() || 0;\n\n const startPointOffsetX = (decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const startPointOffsetY = (decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n const endPointOffsetX = (-decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const endPointOffsetY = (-decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n return {\n startPointOffsetX,\n startPointOffsetY,\n endPointOffsetX,\n endPointOffsetY\n };\n }\n\n protected setDecorativeLineAttr(itemLine: IItemLine, newItemPosition: Point, visible: boolean) {\n if (this._decorativeLine) {\n const { lineStyle } = itemLine;\n const { startPointOffsetX, startPointOffsetY, endPointOffsetX, endPointOffsetY } =\n this.getDecorativeLineAttr(itemLine);\n this._decorativeLine.setAttributes({\n points: [\n {\n x: newItemPosition.x + startPointOffsetX,\n y: newItemPosition.y + startPointOffsetY\n },\n {\n x: newItemPosition.x + endPointOffsetX,\n y: newItemPosition.y + endPointOffsetY\n }\n ] as IPointLike[],\n ...(lineStyle as Partial),\n visible\n });\n this._decorativeLine.states = merge({}, DEFAULT_STATES, this.attribute.state?.line);\n }\n }\n\n protected setTargetItemAttributes(targetItem: any, position: IPointLike) {\n if (this._targetItem) {\n this._targetItem.setAttributes({\n x: position.x,\n y: position.y,\n visible: targetItem.visible ?? false,\n size: targetItem.size,\n ...targetItem.style\n });\n this._targetItem.states = merge({}, DEFAULT_STATES, this.attribute.state?.targetItem);\n }\n }\n\n protected setAllOfItemsAttr(newPosition: Point, newItemPosition: Point) {\n const { position, itemLine = {}, itemContent = {}, limitRect, targetSymbol } = this.attribute as MarkPointAttrs;\n const { type = 'text', confine } = itemContent;\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n const { dx, dy } = computeOffsetForlimit(this._item, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n newItemPosition.x = newItemPosition.x + dx;\n newItemPosition.y = newItemPosition.y + dy;\n }\n this.setTargetItemAttributes(targetSymbol, position);\n this.setItemLineAttr(itemLine, newPosition, newItemPosition);\n this.setItemAttributes(this._item, itemContent, newPosition, newItemPosition, type);\n this.setDecorativeLineAttr(itemLine, newItemPosition, itemLine.decorativeLine?.visible);\n }\n\n protected computeNewPositionAfterTargetItem(position: Point) {\n const { itemContent = {}, targetSymbol, itemLine } = this.attribute as MarkPointAttrs;\n const { offsetX: itemContentOffsetX = 0, offsetY: itemContentOffsetY = 0 } = itemContent;\n const {\n offset: targetSymbolOffset = 0,\n style: targetSymbolStyle,\n visible: targetItemvisible = false,\n size: targetSymbolSize\n } = targetSymbol;\n const targetSize = targetItemvisible ? targetSymbolStyle.size ?? targetSymbolSize ?? 20 : 0;\n\n let targetOffsetAngle;\n if (itemLine.type === 'type-do') {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, itemContentOffsetX / 2);\n } else if (itemLine.type === 'type-po') {\n targetOffsetAngle = deltaXYToAngle(0, itemContentOffsetX);\n } else if (itemLine.type === 'type-op') {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, 0);\n } else {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, itemContentOffsetX);\n }\n\n const newPosition: Point = {\n x: position.x + (targetSize / 2 + targetSymbolOffset) * Math.cos(targetOffsetAngle),\n y: position.y + (targetSize / 2 + targetSymbolOffset) * Math.sin(targetOffsetAngle)\n };\n const newItemPosition: Point = {\n x: position.x + (targetSize / 2 + targetSymbolOffset) * Math.cos(targetOffsetAngle) + itemContentOffsetX, // 偏移量 = targetItem size + targetItem space + 用户配置offset\n y: position.y + (targetSize / 2 + targetSymbolOffset) * Math.sin(targetOffsetAngle) + itemContentOffsetY // 偏移量 = targetItem size + targetItem space + 用户配置offset\n };\n return { newPosition, newItemPosition };\n }\n\n protected initMarker(container: IGroup) {\n const { position, itemContent = {}, itemLine } = this.attribute as MarkPointAttrs;\n const { type: itemLineType = 'type-s', arcRatio = 0.8 } = itemLine;\n const { offsetX = 0, offsetY = 0 } = itemContent;\n\n this._isStraightLine =\n fuzzyEqualNumber(offsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(offsetY, 0, FUZZY_EQUAL_DELTA);\n this._isArcLine = itemLineType === 'type-arc' && arcRatio !== 0 && !this._isStraightLine;\n\n /** 根据targetItem计算新的弧线起点 */\n const { newPosition, newItemPosition } = this.computeNewPositionAfterTargetItem(position);\n\n /** itemline - 连接线 */\n\n const lineConstructor = this._isArcLine ? ArcSegment : Segment;\n const line = new lineConstructor({\n points: [],\n pickable: false, // 组件容器本身不参与拾取\n center: { x: 0, y: 0 },\n radius: 0,\n startAngle: 0,\n endAngle: 0\n });\n\n line.name = 'mark-point-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n /** decorativeLine - 装饰线 */\n const decorativeLine = graphicCreator.line({\n points: []\n });\n decorativeLine.name = 'mark-point-decorativeLine';\n this._decorativeLine = decorativeLine;\n container.add(decorativeLine as unknown as INode);\n\n /** targetItem - 被标注的点上需要放置的内容 */\n const targetItem = graphicCreator.symbol({});\n targetItem.name = 'mark-point-targetItem';\n this._targetItem = targetItem;\n container.add(this._targetItem);\n\n /** item - 标注的内容 */\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n const item = this.initItem(itemContent as any, newPosition, newItemPosition);\n this._item = item;\n container.add(item as unknown as INode);\n\n /** 全部属性确定后, 给每个元素 set attr */\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(newPosition, newItemPosition);\n }\n\n protected updateMarker() {\n const { position, itemContent = {}, itemLine } = this.attribute as MarkPointAttrs;\n const { type = 'text' } = itemContent;\n const { type: itemLineType = 'type-s', arcRatio = 0.8 } = itemLine;\n const { offsetX = 0, offsetY = 0 } = itemContent;\n\n this._isStraightLine =\n fuzzyEqualNumber(offsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(offsetY, 0, FUZZY_EQUAL_DELTA);\n const isArcLine = itemLineType === 'type-arc' && arcRatio !== 0 && !this._isStraightLine;\n /** 根据targetItem计算新的弧线起点 */\n const { newPosition, newItemPosition } = this.computeNewPositionAfterTargetItem(position);\n\n if (isArcLine !== this._isArcLine) {\n // 如果曲线和直线相互切换了, 则需要重新绘制line\n this._isArcLine = isArcLine;\n this.reDrawLine(itemLine, {\n points: [{ x: 0, y: 0 }],\n pickable: false,\n center: { x: 0, y: 0 },\n radius: 0,\n startAngle: 0,\n endAngle: 0\n });\n } else {\n this._isArcLine = isArcLine;\n }\n\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n this.setItemAttributes(this._item, itemContent, newPosition, newItemPosition, type);\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(newPosition, newItemPosition);\n }\n\n protected isValidPoints() {\n const { position } = this.attribute as MarkPointAttrs;\n if (isValidNumber(position.x) && isValidNumber(position.y)) {\n return true;\n }\n return false;\n }\n}\n","import type { IMarkPoint, IMarkPointSpec } from './interface';\nimport {\n computeClipRange,\n computeOffsetFromRegion,\n getMarkPointProcessInfo,\n transformLabelAttributes,\n transformOffset,\n transformState,\n transformStyle\n} from '../utils';\nimport type { MarkPointAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkPoint as MarkPointComponent } from '@visactor/vrender-components';\nimport { isValid } from '@visactor/vutils';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseMarkPoint extends BaseMarker implements IMarkPoint {\n static specKey = 'markPoint';\n specKey = 'markPoint';\n\n layoutZIndex: number = LayoutZIndex.MarkPoint;\n protected declare _markerComponent: MarkPointComponent;\n\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doPolarProcess, doGeoProcess } = getMarkPointProcessInfo(markerSpec);\n if (markerSpec.coordinateType === 'polar' || doPolarProcess) {\n return 'polar';\n } else if (markerSpec.coordinateType === 'geo' || doGeoProcess) {\n return 'geo';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const { itemContent = {}, itemLine = {}, targetSymbol = {} } = this._spec;\n const { text: label = {}, symbol, image, richText, ...restItemContent } = itemContent;\n\n const markPointAttrs: MarkPointAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n position: { x: 0, y: 0 },\n clipInRange: this._spec.clip ?? false,\n itemContent: {\n offsetX: transformOffset(itemContent.offsetX, this._relativeSeries.getRegion()),\n offsetY: transformOffset(itemContent.offsetX, this._relativeSeries.getRegion()),\n ...restItemContent // Tips: 因为网站 demo 上已经透出了 imageStyle richTextStyle 的写法,为了兼容所以这个需要在后面覆盖\n },\n targetSymbol: {\n offset: targetSymbol.offset ?? 0,\n visible: targetSymbol.visible ?? false,\n size: targetSymbol.size ?? 20,\n style: transformStyle(targetSymbol.style, this._markerData, this._markAttributeContext)\n },\n state: {\n line: transformState(this._spec.itemLine.line?.state ?? {}, this._markerData, this._markAttributeContext),\n lineStartSymbol: transformState(\n this._spec.itemLine.startSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n lineEndSymbol: transformState(\n this._spec.itemLine.endSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n symbol: transformState(\n this._spec.itemContent.symbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n image: transformState(this._spec.itemContent.image?.state ?? {}, this._markerData, this._markAttributeContext),\n text: transformState(this._spec.itemContent.text?.state ?? {}, this._markerData, this._markAttributeContext),\n textBackground: transformState(\n this._spec.itemContent.text?.labelBackground?.state,\n this._markerData,\n this._markAttributeContext\n ),\n richText: transformState(\n this._spec.itemContent.richText?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n customMark: transformState(\n this._spec.itemContent.customMark?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n targetItem: transformState(this._spec.targetSymbol?.state ?? {}, this._markerData, this._markAttributeContext)\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n if (symbol?.style) {\n markPointAttrs.itemContent.symbolStyle = transformToGraphic(\n transformStyle(symbol.style, this._markerData, this._markAttributeContext)\n );\n }\n if (image?.style) {\n markPointAttrs.itemContent.imageStyle = transformStyle(image.style, this._markerData, this._markAttributeContext);\n }\n if (label) {\n markPointAttrs.itemContent.textStyle = transformLabelAttributes(\n label,\n this._markerData,\n this._markAttributeContext\n );\n }\n if (richText?.style) {\n markPointAttrs.itemContent.richTextStyle = transformStyle(\n richText.style,\n this._markerData,\n this._markAttributeContext\n );\n }\n\n const { visible, line = {}, ...restItemLine } = itemLine;\n if (visible !== false) {\n markPointAttrs.itemLine = {\n ...restItemLine,\n visible: true,\n lineStyle: transformToGraphic(line.style)\n } as any;\n } else {\n markPointAttrs.itemLine = {\n visible: false\n };\n }\n\n const markPoint = new MarkPointComponent(markPointAttrs);\n return markPoint as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec;\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n\n const { point } = this._computePointsAttr();\n\n const seriesData = this._getRelativeDataView().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.itemContent?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([relativeSeries.getRegion()]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n if (this._markerComponent) {\n const attribute = this._markerComponent.attribute ?? {};\n const textStyle = attribute.itemContent?.textStyle ?? {};\n this._markerComponent.setAttributes({\n position: point === undefined ? { x: null, y: null } : point, // setAttrs时merge时undefined会被忽略, 所以这里做转换\n itemContent: {\n ...attribute.itemContent,\n textStyle: {\n ...textStyle,\n text: this._spec.itemContent.text?.formatMethod\n ? // type error here will be fixed in components\n (this._spec.itemContent.text.formatMethod(dataPoints, seriesData) as any)\n : textStyle.text\n },\n offsetX: computeOffsetFromRegion(point, attribute.itemContent.offsetX, this._relativeSeries.getRegion()),\n offsetY: computeOffsetFromRegion(point, attribute.itemContent.offsetY, this._relativeSeries.getRegion())\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const { doXYProcess, doPolarProcess, doGeoProcess } = getMarkPointProcessInfo(spec);\n const isCoordinateProcess = isValid(spec.coordinate);\n if (!isCoordinateProcess && !doXYProcess && !doPolarProcess && !doGeoProcess) {\n return;\n }\n\n this._initCommonDataView();\n }\n}\n","import type { IMarkPointCoordinateSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { cartesianCoordinateLayout, getMarkPointProcessInfo, positionLayout, xyLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { IMarkProcessOptions } from '../interface';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\n\nexport class CartesianMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.markPoint;\n type = ComponentTypeEnum.markPoint;\n name: string = ComponentTypeEnum.markPoint;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected _computePointsAttr() {\n const spec = this._spec;\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const isXYLayout = 'x' in spec && 'y' in spec;\n const isCoordinateLayout = 'coordinate' in spec;\n const isPositionLayout = 'position' in spec;\n const autoRange = spec?.autoRange ?? false;\n\n let point: IPoint;\n\n if (isXYLayout) {\n point = xyLayout(data, relativeSeries, relativeSeries, relativeSeries, autoRange)[0][0];\n } else if (isCoordinateLayout) {\n point = cartesianCoordinateLayout(\n data,\n relativeSeries,\n autoRange,\n (spec as IMarkPointCoordinateSpec).coordinatesOffset\n )[0];\n } else if (isPositionLayout) {\n point = positionLayout(spec.position, relativeSeries, spec.regionRelative)[0];\n }\n\n return { point };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXYProcess } = getMarkPointProcessInfo(spec);\n const isCoordinateProcess = isValid(spec.coordinate);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ])\n ];\n } else if (isCoordinateProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options };\n }\n}\n\nexport const registerMarkPoint = () => {\n Factory.registerComponent(CartesianMarkPoint.type, CartesianMarkPoint);\n registerMarkPointAnimate();\n};\n","import { ComponentTypeEnum } from '../../interface/type';\nimport { polarLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { IPolarSeries } from 'src/series';\nimport type { IMarkProcessOptions } from '../interface';\nimport { polarToCartesian } from '@visactor/vutils';\nimport type { CoordinateType } from '../../../typings';\n\nexport class PolarMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.polarMarkPoint;\n type = ComponentTypeEnum.polarMarkPoint;\n name: string = ComponentTypeEnum.polarMarkPoint;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected _computePointsAttr() {\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const autoRange = this._spec?.autoRange ?? false;\n const polarPoint = polarLayout(data, relativeSeries, relativeSeries, relativeSeries, autoRange)[0][0];\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n const point = polarToCartesian(center, polarPoint.radius, polarPoint.angle);\n\n return { point };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const options = [\n this._processSpecByDims([\n { dim: 'radius', specValue: spec.radius },\n { dim: 'angle', specValue: spec.angle }\n ])\n ];\n return { options };\n }\n}\n\nexport const registerPolarMarkPoint = () => {\n Factory.registerComponent(PolarMarkPoint.type, PolarMarkPoint);\n registerMarkPointAnimate();\n};\n","import { ComponentTypeEnum } from '../../interface/type';\nimport { geoLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { CoordinateType } from '../../../typings';\n\nexport class GeoMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.geoMarkPoint;\n type = ComponentTypeEnum.geoMarkPoint;\n name: string = ComponentTypeEnum.geoMarkPoint;\n static coordinateType: string = 'geo';\n coordinateType = 'geo' as CoordinateType;\n\n protected _computePointsAttr() {\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const point = geoLayout(data, relativeSeries)[0][0];\n\n return { point };\n }\n\n protected _computeOptions(): any {\n const spec = this._spec as any;\n const options = [this._processSpecByDims([{ dim: 'areaName', specValue: spec.areaName }])];\n return { options };\n }\n}\n\nexport const registerGeoMarkPoint = () => {\n Factory.registerComponent(GeoMarkPoint.type, GeoMarkPoint);\n registerMarkPointAnimate();\n};\n","import type { IPointLike } from '../data-structure';\nimport { isIntersect } from './algorithm';\n\nconst EPSILON = 1e-8;\n\n// Adapted from https://github.com/apache/echarts/blob/master/src/util/graphic.ts by striezel\n// License: https://github.com/apache/echarts/blob/master/LICENSE\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\nexport function lineIntersectPolygon(\n a1x: number,\n a1y: number,\n a2x: number,\n a2y: number,\n points: IPointLike[]\n): boolean {\n for (let i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n const p = points[i];\n if (isIntersect([a1x, a1y], [a2x, a2y], [p.x, p.y], [p2.x, p2.y])) {\n return true;\n }\n p2 = p;\n }\n return false;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function polygonContainPoint(points: IPointLike[], x: number, y: number) {\n let w = 0;\n let p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (let i = 1; i < points.length; i++) {\n const p2 = points[i];\n w += isPointInLine(p.x, p.y, p2.x, p2.y, x, y);\n p = p2;\n }\n\n // Close polygon\n const p0 = points[0];\n if (!isAroundEqual(p.x, p0.x) || !isAroundEqual(p.y, p0.y)) {\n w += isPointInLine(p.x, p.y, p0.x, p0.y, x, y);\n }\n\n return w !== 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/windingLine.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function isPointInLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nfunction isAroundEqual(a: number, b: number): boolean {\n return Math.abs(a - b) < EPSILON;\n}\n\n/**\n * polygon图元之间是否相交\n * @param pointsA 图元A的points\n * @param pointsB 图元B的points\n * @returns 是否相交\n */\nexport function polygonIntersectPolygon(pointsA: IPointLike[], pointsB: IPointLike[]) {\n for (let i = 0; i < pointsB.length; i++) {\n if (polygonContainPoint(pointsA, pointsB[i].x, pointsB[i].y)) {\n return true;\n }\n if (i > 0 && lineIntersectPolygon(pointsB[i - 1].x, pointsB[i - 1].y, pointsB[i].x, pointsB[i].y, pointsA)) {\n return true;\n }\n }\n return false;\n}\n","import type { GraphicEventType, IGroupGraphicAttribute, IPolygonGraphicAttribute } from '@visactor/vrender-core';\nimport type { IDelayType } from '../interface';\n\nexport interface BrushAttributes extends IGroupGraphicAttribute {\n /**\n * 触发框选的事件名称\n */\n trigger?: GraphicEventType;\n /**\n * 更新框选的事件名称\n */\n updateTrigger?: GraphicEventType;\n /**\n * 结束框选的事件名称\n */\n endTrigger?: GraphicEventType;\n /**\n * 清空框选的事件名称\n */\n resetTrigger?: GraphicEventType;\n /**\n * 可交互范围\n */\n interactiveRange?: {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n };\n /**\n * 框选模式\n * @default 'single'\n */\n brushMode?: IBrushMode;\n /**\n * 框选类型\n * @default 'rect'\n */\n brushType?: IBrushType;\n /**\n * brushType为'y'时, x的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n xRange?: [number, number];\n /**\n * brushType为'x'时, y的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n yRange?: [number, number];\n /** 是否展示brush mask */\n hasMask?: boolean;\n /**\n * 框选区域的样式\n */\n brushStyle?: IPolygonGraphicAttribute;\n /**\n * 是否可被平移\n * @default true\n */\n brushMoved?: boolean;\n /**\n * brushMode为'single'时,是否单击清除选框\n * @default true\n */\n removeOnClick?: boolean;\n /**\n * brush选框的大小阈值\n */\n sizeThreshold?: number;\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n\nexport type IBrushType = 'x' | 'y' | 'rect' | 'polygon';\nexport type IBrushMode = 'single' | 'multiple';\n\nexport enum IOperateType {\n drawStart = 'drawStart',\n drawEnd = 'drawEnd',\n drawing = 'drawing',\n moving = 'moving',\n moveStart = 'moveStart',\n moveEnd = 'moveEnd',\n brushClear = 'brushClear'\n}\n","export const DEFAULT_BRUSH_ATTRIBUTES = {\n trigger: 'pointerdown',\n updateTrigger: 'pointermove',\n endTrigger: 'pointerup',\n resetTrigger: 'pointerupoutside',\n hasMask: true,\n brushMode: 'single',\n brushType: 'rect',\n brushStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n strokeWidth: 2\n },\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 10,\n interactiveRange: {\n y1: -Infinity,\n y2: Infinity,\n x1: -Infinity,\n x2: Infinity\n }\n};\n\nexport const DEFAULT_SIZE_THRESHOLD = 5;\n","/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\nimport { graphicCreator, vglobal } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\nimport { cloneDeep, debounce, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n private _isDrawedBeforeEnd = false;\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const {\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n // 拖拽绘制开始\n this.stage.addEventListener(trigger, this._onBrushStart as EventListener);\n // 拖拽绘制时\n this.stage.addEventListener(updateTrigger, this._onBrushingWithDelay as EventListener);\n // 拖拽绘制结束\n this.stage.addEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.addEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n\n const brushMoved = this.attribute.brushMoved ?? true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n\n this._activeDrawState && this._initDraw(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._initMove(e);\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n\n if (this._activeDrawState || this._activeMoveState) {\n e.stopPropagation();\n }\n\n this._activeDrawState && this._drawing(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._moving(e);\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n if (!this._activeDrawState && !this._activeMoveState) {\n return;\n }\n\n e.preventDefault();\n const { removeOnClick = true } = this.attribute as BrushAttributes;\n if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {\n // _isDrawedBeforeEnd有两种情况:\n // 1. 没有绘制mask\n // 2. 绘制了mask但没有超过阈值\n // 只有第2种情况才会触发clear, 可以理解为双击才触发clear\n if (this._operatingMask?._AABBBounds.empty()) {\n this._dispatchEvent(IOperateType.brushClear, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n this._container.incrementalClearChild();\n this._brushMaskAABBBoundsDict = {};\n } else {\n if (this._activeDrawState) {\n this._dispatchEvent(IOperateType.drawEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n if (this._activeMoveState) {\n this._dispatchEvent(IOperateType.moveEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n this._isDrawedBeforeEnd = false;\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [pos];\n this._isDrawedBeforeEnd = false;\n if (brushMode === 'single') {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n }\n this._addBrushMask();\n this._dispatchEvent(IOperateType.drawStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchEvent(IOperateType.moveStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { sizeThreshold = DEFAULT_SIZE_THRESHOLD, brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n\n // 更新形状之后再判断是否需要正在绘制\n // if not, 则_isDrawedBeforeEnd false\n // then: 1. 不暴露drawing状态 2. 在brushEnd时该形状会被清空\n const { x1 = 0, x2 = 0, y1 = 0, y2 = 0 } = this._operatingMask?._AABBBounds;\n this._isDrawedBeforeEnd =\n !this._operatingMask._AABBBounds.empty() &&\n !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);\n if (this._isDrawedBeforeEnd) {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.drawing, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.moving, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? brushStyle.opacity ?? 1 : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const {\n delayType = 'throttle',\n delayTime = 0,\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n this.stage.removeEventListener(trigger, this._onBrushStart as EventListener);\n this.stage.removeEventListener(updateTrigger, this._onBrushingWithDelay as EventListener);\n this.stage.removeEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.removeEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n}\n","import { registerGroup, registerPolygon } from '@visactor/vrender-kits';\n\nexport function loadBrushComponent() {\n registerGroup();\n registerPolygon();\n}\n","import { ChartEvent } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { Brush as BrushComponent, IOperateType as BrushEvent } from '@visactor/vrender-components';\nimport type { IPointLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, polygonIntersectPolygon, isValid, last } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IGraphic, IGroup, INode, IPolygon, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BrushInteractiveRangeAttr, IBrush, IBrushSpec, selectedItemStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { DataZoom } from '../data-zoom';\nimport type { IBandLikeScale, IContinuousScale, ILinearScale } from '@visactor/vscale';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\n\nconst IN_BRUSH_STATE = 'inBrush';\nconst OUT_BRUSH_STATE = 'outOfBrush';\n\nexport class Brush extends BaseComponent implements IBrush {\n layoutType: 'none' = 'none';\n static type = ComponentTypeEnum.brush;\n type = ComponentTypeEnum.brush;\n name: string = ComponentTypeEnum.brush;\n\n static specKey = 'brush';\n specKey = 'brush';\n\n layoutZIndex: number = LayoutZIndex.Brush;\n\n // brush组件\n protected _brushComponents!: BrushComponent[];\n protected _relativeRegions!: IRegion[];\n protected _linkedSeries: ISeries[] = [];\n\n private _itemMap: { [regionId: string | number]: IMark[] } = {};\n private _linkedItemMap: { [seriesId: string | number]: IMark[] } = {};\n\n // 用brushName做分组管理的原因是: 如果有多个brush, 某个图元A brush内, 但在B brush外, 该图元state会被B误变成out of brush。 但其实该图元只有在A brush外才能被判断out of brush\n // 用dict做存储因为方便查找和删减对应图元\n protected _inBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n\n private _needInitOutState: boolean = true;\n private _cacheInteractiveRangeAttrs: BrushInteractiveRangeAttr[] = [];\n\n private _needDisablePickable: boolean = false;\n\n private _releatedAxes: AxisComponent[] = [];\n\n // 根据region找axis\n private _regionAxisMap: { [regionId: string]: AxisComponent[] } = {};\n // 根据axis找dataZoom\n private _axisDataZoomMap: { [axisId: string]: DataZoom } = {};\n // 记录当前操作的axis或dataZoom的状态\n private _zoomRecord: { operateComponent: AxisComponent | DataZoom; start: number; end: number }[] = [];\n\n init() {\n const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush);\n const outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);\n // 写入mark state, 便于后续state管理\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getActiveMarks().forEach((m: IMark) => {\n if (m) {\n s.setMarkStyle(\n m,\n {\n ...inBrushMarkAttr\n },\n IN_BRUSH_STATE,\n AttributeLevel.Series\n );\n s.setMarkStyle(\n m,\n {\n ...outOfBrushMarkAttr\n },\n OUT_BRUSH_STATE,\n AttributeLevel.Series\n );\n }\n });\n });\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IBrushSpec) => {\n return s.visible !== false;\n });\n }\n\n created() {\n super.created();\n\n // event\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IElement } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey]?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IElement }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].data?.[0]);\n }\n return data;\n }\n\n protected _getBrushInteractiveAttr(region: IRegion) {\n const regionLayoutPosition = region.getLayoutStartPoint();\n const regionLayoutRect = region.getLayoutRect();\n const seriesRegionStartX = regionLayoutPosition.x;\n const seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width;\n const seriesRegionStartY = regionLayoutPosition.y;\n const seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;\n return {\n interactiveRange: {\n minY: seriesRegionStartY,\n maxY: seriesRegionEndY,\n minX: seriesRegionStartX,\n maxX: seriesRegionEndX\n },\n xRange: [seriesRegionStartX, seriesRegionEndX],\n yRange: [seriesRegionStartY, seriesRegionEndY]\n } as BrushInteractiveRangeAttr;\n }\n\n protected _updateBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n // 布局变化后, 更新可交互范围\n const brushComponent = this._brushComponents[componentIndex];\n brushComponent.setAttributes(interactiveAttr as any);\n\n // 布局变化后, 更新brush 和 图元状态\n // 方案一:\n // TODO: 更新mask位置(保持选框在画布中的相对位置)\n // TODO: 是否更新mask大小有待商榷(保持选框位置和图元高亮区域一致)\n\n // 方案二: 清空brushMask 和 图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n this._needInitOutState = true;\n }\n\n protected _createBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n const brush = new BrushComponent({\n zIndex: this.layoutZIndex,\n brushStyle: transformToGraphic(this._spec?.style),\n ...interactiveAttr,\n ...this._spec,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n brush.id = this._spec.id ?? `brush-${this.id}`;\n this.getContainer().add(brush as unknown as INode);\n const { brushMode = 'single' } = this._spec;\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\n\n brush.addEventListener(BrushEvent.drawStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.moveStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.drawing, (e: any) => {\n // 需要重置out状态的情况:\n // _needInitOutState:框选模式为'single' 且 开始后的第一次drawing时(这里不选择drawStart而选择第一次触发drawing的时机是因为点击空白处也会触发drawStart), 需要重置图元状态\n if (this._needInitOutState && brushMode === 'single') {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n }\n this._needInitOutState = false;\n this._needDisablePickable = true;\n\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._handleBrushChange(ChartEvent.brushClear, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needInitOutState = true;\n this._needDisablePickable = false;\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n\n brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n }\n\n private _handleBrushChange(eventType: string, region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\n }\n\n private _emitEvent(eventType: string, region: IRegion) {\n this.event.emit(eventType, {\n model: this,\n value: {\n // 操作类型\n operateType: eventType,\n // 正在操作的region\n operateRegion: region,\n // 在选框内的 element data\n inBrushData: this._extendDataInBrush(this._inBrushElementsMap),\n // 在选框外的 element data\n outOfBrushData: this._extendDatumOutOfBrush(this._outOfBrushElementsMap),\n // 被链接的系列中:在选框内的 element data\n linkInBrushData: this._extendDataInBrush(this._linkedInBrushElementsMap),\n // 被链接的系列中:在选框外的 element data\n linkOutOfBrushData: this._extendDatumOutOfBrush(this._linkedOutOfBrushElementsMap),\n // 在选框内的 vgrammar elements\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 vgrammar elements\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 vgrammar elements\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 vgrammar elements\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n }\n });\n }\n\n private _transformBrushedMarkAttr(brushedStyle: selectedItemStyle) {\n const styleResult: any = {};\n if (brushedStyle?.symbol) {\n styleResult.symbolType = brushedStyle.symbol;\n }\n if (brushedStyle?.symbolSize) {\n styleResult.size = brushedStyle.symbolSize;\n }\n if (brushedStyle?.color) {\n styleResult.fill = brushedStyle.color;\n }\n if (brushedStyle?.colorAlpha) {\n styleResult.fillOpacity = brushedStyle.colorAlpha;\n }\n return {\n ...transformToGraphic(brushedStyle),\n ...styleResult\n };\n }\n\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (this._outOfBrushElementsMap?.[elementKey] && this._isBrushContainItem(operateMask, graphicItem)) {\n el.addState(IN_BRUSH_STATE);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (\n this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem)\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._outOfBrushElementsMap[elementKey] = el;\n delete this._inBrushElementsMap[operateMask.name][elementKey];\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n\n private _reconfigLinkedItem(operateMask: IPolygon, region: IRegion) {\n const regionLayoutPos = region.getLayoutStartPoint();\n const seriesId = region.getSeries().map(s => s.id);\n this._linkedSeries.forEach((s: ISeries) => {\n if (!seriesId.includes(s.id)) {\n const sRegionLayoutPos = s.getRegion().getLayoutStartPoint();\n\n const regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x;\n const regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;\n\n this._linkedItemMap[s.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (\n this._linkedOutOfBrushElementsMap?.[elementKey] &&\n this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.addState(IN_BRUSH_STATE);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMask: IPolygon, item: IGraphic, linkedOffset?: { dx: number; dy: number }) {\n if (!brushMask?.globalTransMatrix || !brushMask?.attribute?.points) {\n return false;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = brushMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = brushMask.globalTransMatrix;\n\n const dx = linkedOffset?.dx || 0;\n const dy = linkedOffset?.dy || 0;\n\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e + dx,\n y: b * p.x + d * p.y + f + dy\n };\n });\n\n brushMask.globalAABBBounds\n .clone()\n .set(\n brushMask.globalAABBBounds.x1 + dx,\n brushMask.globalAABBBounds.y1 + dy,\n brushMask.globalAABBBounds.x2 + dx,\n brushMask.globalAABBBounds.y2 + dy\n );\n\n // 根据变换矩阵得到item的实际坐标\n const x = item.globalTransMatrix.e;\n const y = item.globalTransMatrix.f;\n\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (item.type === 'symbol') {\n const { size: itemSize = 0 } = item?.attribute as ISymbolGraphicAttribute;\n const size = array(itemSize)[0] / 2;\n itemBounds = [\n {\n x: x - size,\n y: y - size\n },\n {\n x: x + size,\n y: y - size\n },\n {\n x: x + size,\n y: y + size\n },\n {\n x: x - size,\n y: y + size\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n } else if (item.type === 'rect') {\n const { x1, x2, y1, y2 } = item?.AABBBounds;\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n itemBounds = [\n {\n x: x,\n y: y\n },\n {\n x: x + width,\n y: y\n },\n {\n x: x + width,\n y: y + height\n },\n {\n x: x,\n y: y + height\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n }\n return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);\n }\n\n private _stateClamp(state: number) {\n return Math.min(Math.max(0, state), 1);\n }\n\n private _setAxisAndDataZoom(operateMask: IPolygon, region: IRegion) {\n this._zoomRecord = [];\n if (this._spec.zoomAfterBrush) {\n // step1: 拿到brush bounds, 计算 continuous axis/dataZoom新范围\n const operateMaskBounds = operateMask.AABBBounds;\n\n // step2:\n // 如果轴关联了dataZoom,则通过dataZoom更新轴\n // 如果轴没有关联dataZoom,则直接更改轴rangeFactor\n this._regionAxisMap['region_' + region.id]?.forEach(axis => {\n const isHorizontal = axis.layoutOrient === 'bottom' || axis.layoutOrient === 'top';\n const axisRangeExpand = this._spec.axisRangeExpand ?? 0;\n const { x1, x2, y1, y2 } = operateMaskBounds;\n const regionStartAttr = isHorizontal ? 'x' : 'y';\n const boundsStart = isHorizontal ? x1 : y1;\n const boundsEnd = isHorizontal ? x2 : y2;\n\n if (this._axisDataZoomMap[axis.id]) {\n const dataZoom = this._axisDataZoomMap[axis.id];\n const releatedAxis = dataZoom.relatedAxisComponent as AxisComponent;\n const startValue = releatedAxis\n .getScale()\n .invert(boundsStart - region.getLayoutStartPoint()[regionStartAttr]);\n const endValue = releatedAxis.getScale().invert(boundsEnd - region.getLayoutStartPoint()[regionStartAttr]);\n const startPercent = dataZoom.dataToStatePoint(startValue);\n const endPercent = dataZoom.dataToStatePoint(endValue);\n const newStartPercent = this._stateClamp(startPercent - axisRangeExpand);\n const newEndPercent = this._stateClamp(endPercent + axisRangeExpand);\n dataZoom.setStartAndEnd(Math.min(newStartPercent, newEndPercent), Math.max(newStartPercent, newEndPercent), [\n 'percent',\n 'percent'\n ]);\n\n this._zoomRecord.push({\n operateComponent: dataZoom,\n start: newStartPercent,\n end: newEndPercent\n });\n } else {\n const range = axis.getScale().range();\n const rangeFactor = (axis.getScale() as IContinuousScale | IBandLikeScale).rangeFactor() ?? [0, 1];\n\n // 判断轴是否为反向轴(last(range) < range[0]),即从右到左, 或从下到上\n // 如果是反向轴, 计算start和end时, 也要保持 start < end\n const isAxisReverse = last(range) < range[0];\n const startPosTemp = boundsStart - region.getLayoutStartPoint()[regionStartAttr];\n const endPosTemp = boundsEnd - region.getLayoutStartPoint()[regionStartAttr];\n const endPos = isAxisReverse ? Math.min(startPosTemp, endPosTemp) : Math.max(startPosTemp, endPosTemp);\n const startPos = isAxisReverse ? Math.max(startPosTemp, endPosTemp) : Math.min(startPosTemp, endPosTemp);\n\n const start =\n ((startPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const end =\n ((endPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const newStart = this._stateClamp(start - axisRangeExpand);\n const newEnd = this._stateClamp(end + axisRangeExpand);\n (axis.getScale() as ILinearScale).rangeFactor([newStart, newEnd]);\n axis.effect.scaleUpdate();\n\n this._zoomRecord.push({\n operateComponent: axis,\n start: newStart,\n end: newEnd\n });\n }\n });\n }\n }\n\n protected _bindRegions() {\n if (isValid(this._spec.regionId) && isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n }\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\n );\n }\n\n protected _bindLinkedSeries() {\n if (isValid(this._spec.brushLinkSeriesId) && isValid(this._spec.brushLinkSeriesIndex)) {\n return;\n }\n this._linkedSeries = this._option.getSeriesInUserIdOrIndex(\n array(this._spec.brushLinkSeriesId),\n array(this._spec.brushLinkSeriesIndex)\n );\n }\n\n private _initRegionAxisMap() {\n // 如果配置了axis,则按配置\n // 如果没有配置axis,则默认所有axis\n if (isValid(this._spec.axisId)) {\n array(this._spec.axisId).forEach((axisId: string) => {\n this._releatedAxes.push(this._option.getComponentByUserId(axisId) as AxisComponent);\n });\n } else if (isValid(this._spec.axisIndex)) {\n array(this._spec.axisIndex).forEach((axisIndex: number) => {\n this._releatedAxes.push(this._option.getComponentByIndex('axes', axisIndex) as AxisComponent);\n });\n } else {\n this._releatedAxes = this._option.getComponentsByKey('axes') as AxisComponent[];\n }\n\n // 按照region进行分组,便于brush找到关联axis (brush -> region -> axis)\n this._releatedAxes.forEach((axis: AxisComponent) => {\n axis?.getRegions().forEach((region: IRegion) => {\n if (this._regionAxisMap['region_' + region.id]) {\n this._regionAxisMap['region_' + region.id].push(axis);\n } else {\n this._regionAxisMap['region_' + region.id] = [axis];\n }\n });\n });\n }\n\n private _initAxisDataZoomMap() {\n (this._option.getComponentsByKey('dataZoom') as DataZoom[]).forEach((dz: DataZoom) => {\n if (dz.relatedAxisComponent) {\n this._axisDataZoomMap[(dz.relatedAxisComponent as AxisComponent).id] = dz;\n }\n });\n }\n\n private _initNeedOperatedItem() {\n const seriesUserId = this._spec.seriesId;\n const seriesIndex = this._spec.seriesIndex;\n this._relativeRegions.forEach(r => {\n const allMarks: IMark[] = [];\n r.getSeries().forEach((s: ISeries) => {\n if (\n (seriesUserId && array(seriesUserId).includes(s.userId.toString())) ||\n (seriesIndex && array(seriesIndex).includes(s.getSpecIndex())) ||\n (!seriesIndex && !seriesUserId)\n ) {\n allMarks.push(...s.getMarksWithoutRoot());\n }\n this._itemMap[r.id] = allMarks;\n });\n });\n\n this._linkedSeries.forEach(s => {\n this._linkedItemMap[s.id] = s.getMarksWithoutRoot();\n });\n }\n\n protected _initMarkBrushState(componentIndex: number, stateName: string) {\n this._brushComponents.forEach((brush, index) => {\n if (index !== componentIndex) {\n brush.children[0].removeAllChild();\n }\n });\n\n this._inBrushElementsMap = {};\n this._outOfBrushElementsMap = {};\n this._linkedInBrushElementsMap = {};\n this._linkedOutOfBrushElementsMap = {};\n\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getMarksWithoutRoot().forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const elementKey = mark.id + '_' + el.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n el.addState(stateName);\n this._outOfBrushElementsMap[elementKey] = el;\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n });\n });\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n if (this._brushComponents) {\n // FIXME: 这个逻辑放在这个方法里不太妥当?\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n // 创建或更新marker组件\n if (!this._brushComponents) {\n this._brushComponents = [];\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._createBrushComponent(region, index);\n });\n } else {\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n }\n }\n\n clearGraphic(): void {\n if (this._brushComponents) {\n this._brushComponents.forEach(brush => {\n (brush as any)._container.incrementalClearChild();\n });\n }\n }\n\n clear(): void {\n if (this._brushComponents) {\n const container = this.getContainer();\n this._brushComponents.forEach(brush => {\n brush.removeAllChild();\n brush.releaseBrushEvents();\n\n if (container) {\n container.removeChild(brush as unknown as INode);\n }\n });\n this._brushComponents = null;\n }\n }\n}\n\nexport const registerBrush = () => {\n Factory.registerComponent(Brush.type, Brush);\n};\n","import { BaseComponent } from '../base/base-component';\nimport { ComponentTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption } from '../../model/interface';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { PREFIX } from '../../constant/base';\nimport type { EnableMarkType, ICustomMarkGroupSpec, ICustomMarkSpec, ILayoutRect } from '../../typings';\nimport type { IGroupMark, IMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, isEqual, isNil, isValid, isValidNumber } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IModelMarkAttributeContext } from '../../compile/mark/interface';\n\n// TODO: 规范范型\nexport class CustomMark extends BaseComponent> {\n static type = ComponentTypeEnum.customMark;\n type = ComponentTypeEnum.customMark;\n\n static specKey = 'customMark';\n specKey = 'customMark';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.CustomMark;\n layoutLevel: number = LayoutLevel.CustomMark;\n\n protected declare _spec: ICustomMarkSpec> | ICustomMarkGroupSpec;\n\n created() {\n super.created();\n this.initMarks();\n this.initEvent();\n }\n\n protected _markAttributeContext: IModelMarkAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkAttributeContext() {\n this._markAttributeContext = {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n }\n };\n }\n\n protected initMarks() {\n if (!this._spec) {\n return;\n }\n const series = this._option && this._option.getAllSeries();\n const hasAnimation = this._option.animation !== false;\n const depend: IMark[] = [];\n\n if (series && series.length) {\n series.forEach(s => {\n const marks = s && s.getMarksWithoutRoot();\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n depend.push(mark);\n });\n }\n });\n }\n let parentMark: IGroupMark | null = null;\n if (this._spec.parent) {\n const mark = this.getChart()\n .getAllMarks()\n .find(m => m.getUserId() === this._spec.parent) as IGroupMark;\n if (mark.type === 'group') {\n parentMark = mark;\n }\n }\n this._createExtensionMark(this._spec, parentMark, `${PREFIX}_series_${this.id}_extensionMark`, 0, {\n depend,\n hasAnimation\n });\n }\n\n private _createExtensionMark(\n spec: ICustomMarkSpec> | ICustomMarkGroupSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number = 0,\n options: { hasAnimation?: boolean; depend?: IMark[] }\n ) {\n const mark = this._createMark(\n {\n type: spec.type,\n name: isValid(spec.name) ? `${spec.name}` : `${namePrefix}_${index}`\n },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n attributeContext: this._getMarkAttributeContext(),\n componentType: spec.componentType,\n key: spec.dataKey\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n\n if (isValid(spec.id)) {\n mark.setUserId(spec.id);\n }\n\n if (options.hasAnimation && spec.animation) {\n // 自定义图元默认不添加动画\n const config = animationConfig({}, userAnimationConfig(spec.type, spec as any, this._markAttributeContext));\n mark.setAnimationConfig(config);\n }\n\n if (options.depend && options.depend.length) {\n mark.setDepend(...options.depend);\n }\n if (isNil(parentMark)) {\n this._marks.addMark(mark);\n } else if (parentMark) {\n parentMark.addMark(mark);\n }\n // set style\n this.initMarkStyleWithSpec(mark, spec);\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i, options);\n });\n }\n\n if (isValid(spec.dataId) || isValidNumber(spec.dataIndex)) {\n const dataview = this.getChart().getSeriesData(spec.dataId, spec.dataIndex);\n if (dataview) {\n dataview.target.addListener('change', () => {\n mark.getData().updateData();\n });\n mark.setDataView(dataview);\n }\n }\n }\n\n initEvent() {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: ICustomMarkSpec, prevSpec: ICustomMarkSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing;\n }\n\n private _getMarkAttributeContext() {\n return {\n vchart: this._option.globalInstance,\n chart: this.getChart(),\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n },\n getLayoutBounds: () => {\n const { x, y } = this.getLayoutStartPoint();\n const { width, height } = this.getLayoutRect();\n return new Bounds().set(x, y, x + width, y + height);\n }\n };\n }\n\n private _getLayoutRect() {\n const bounds = new Bounds();\n\n this.getMarks().forEach(mark => {\n const product = mark.getProduct();\n\n if (product) {\n bounds.union(product.getBounds());\n }\n });\n\n if (bounds.empty()) {\n return {\n width: 0,\n height: 0\n };\n }\n\n return {\n width: bounds.width(),\n height: bounds.height()\n };\n }\n\n getBoundsInRect(rect: ILayoutRect) {\n this.setLayoutRect(rect);\n\n const result = this._getLayoutRect();\n const { x, y } = this.getLayoutStartPoint();\n return {\n x1: x,\n y1: y,\n x2: x + result.width,\n y2: y + result.height\n };\n }\n}\n\nexport const registerCustomMark = () => {\n Factory.registerComponent(CustomMark.type, CustomMark);\n};\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Morgan Herlocker\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\nimport type { Feature, MultiPolygon, Polygon, Units } from './interface';\nimport { lengthToRadians } from '@turf/helpers';\nimport { pointInRect, polygonContainPoint } from '../graphics';\nimport type { IPointLike } from '../data-structure';\nimport { degreeToRadian, radianToDegree } from '../angle';\n\n// https://github.com/Turfjs/turf\nfunction getGeom(geojson: any): any {\n if (geojson.type === 'Feature') {\n return geojson.geometry;\n }\n return geojson;\n}\n\nexport function isPointInPolygon(point: IPointLike, polygon: Feature | G) {\n if (!point) {\n return false;\n }\n\n if (!polygon) {\n return false;\n }\n\n const geom = getGeom(polygon);\n const type = geom.type;\n // BBox [west, south, east, north]\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n if (bbox && pointInRect(point, { x1: bbox[0], x2: bbox[1], y1: bbox[1], y2: bbox[3] }, true) === true) {\n return false;\n }\n\n if (type === 'Polygon') {\n polys = [polys];\n }\n let result = false;\n\n for (let i = 0; i < polys.length; ++i) {\n for (let j = 0; j < polys[i].length; ++j) {\n const polyResult = polygonContainPoint(\n polys[i][j].map((p: number[]) => ({ x: p[0], y: p[1] })),\n point.x,\n point.y\n );\n if (polyResult) {\n result = true;\n return result;\n }\n }\n }\n\n return result;\n}\n\n// https://github.com/Turfjs/turf\nexport function destination(\n point: IPointLike,\n distance: number,\n bearing: number,\n options: {\n units?: Units;\n } = {}\n) {\n const longitude1 = degreeToRadian(point[0]);\n const latitude1 = degreeToRadian(point[1]);\n const bearingRad = degreeToRadian(bearing);\n const radians = lengthToRadians(distance, options.units);\n\n // Main\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 =\n longitude1 +\n Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radianToDegree(longitude2);\n const lat = radianToDegree(latitude2);\n\n return { x: lng, y: lat };\n}\n","import type { Feature } from '@visactor/vutils';\nimport { isPointInPolygon, destination, getAABBFromPoints } from '@visactor/vutils';\nimport type { IRect, IOrientType, IPoint } from '../../typings';\n\ntype IBound = {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n};\nexport interface IPairInfo {\n /** 矩形信息 */\n rect: IRect;\n /** 对应点的画布坐标 */\n point: IPoint;\n /** 对应点的经纬度坐标 */\n pointCoord?: IPoint;\n /** 基于锚点的可放置位置 */\n anchors?: IOrientType[];\n /** 距离锚点的位置偏移量 */\n offset?: number;\n /** 原始顺序 */\n index: number;\n}\n\nfunction overlap(a: T, b: T, sep: number = 0) {\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport function bound(rect: IRect): IBound {\n return {\n x1: rect.x,\n x2: rect.x + rect.width,\n y1: rect.y,\n y2: rect.y + rect.height\n };\n}\n\nfunction toRect(bound: IBound): IRect {\n return {\n x: bound.x1,\n y: bound.y1,\n width: bound.x2 - bound.x1,\n height: bound.y2 - bound.y1\n };\n}\n\n/**\n * 根据可选位置进行躲避布局\n * @param pairs\n * @returns\n */\nexport function layoutByPosition(pairs: IPairInfo[]): IRect[] {\n if (!pairs || pairs.length === 0) {\n return [];\n }\n\n // 只有一个无需布局\n if (pairs.length === 1) {\n return [pairs[0].rect];\n }\n\n const _pairs = pairs.map(pair => {\n return {\n ...pair,\n bound: bound(pair.rect),\n anchorCandidates: candidatesByOrient(pair.anchors ?? [], pair.point!, pair.rect, pair.offset)\n };\n });\n\n const resultBound: IBound[] = [];\n // 默认布局第一个\n resultBound.push(_pairs[0].bound);\n\n for (let i = 1; i <= _pairs.length - 1; i++) {\n const curPair = _pairs[i];\n const curBound = curPair.bound;\n // 遍历检测\n let isOverlap = resultBound.some(r => overlap(r, curBound));\n if (!curPair.anchorCandidates) {\n continue;\n }\n if (isOverlap && curPair.anchorCandidates?.length > 0) {\n for (let j = 0; j < curPair.anchorCandidates.length; j++) {\n const anchor = curPair.anchorCandidates[j];\n const newBound = {\n x1: anchor.x,\n y1: anchor.y,\n x2: anchor.x + curBound.x2 - curBound.x1,\n y2: anchor.y + curBound.y2 - curBound.y1,\n anchor\n };\n if (!resultBound.some(r => overlap(r, newBound))) {\n resultBound.push(newBound);\n isOverlap = false;\n break;\n }\n }\n if (isOverlap) {\n // 所有候选位置都放不下\n resultBound.push(curPair.bound);\n }\n } else {\n resultBound.push(curPair.bound);\n }\n }\n\n return resultBound.map(bound => toRect(bound));\n}\n\nexport function layoutOuter(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算包围圆\n const _points = pairs.map(rect => rect.pointCoord);\n const { x1, x2, y1, y2 } = getAABBFromPoints(_points);\n const geoCenter = [(x1 + x2) / 2, (y1 + y2) / 2];\n const centerPosition = dataToPosition(geoCenter);\n\n if (!centerPosition) {\n return [];\n }\n\n // 2. 遍历每个rect\n // anchor与圆心的交点方向,尝试寻找不在地图区域内部的新锚点\n const result = pairs.map(pair => {\n const rect = pair.rect;\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord!)\n ? pair.point\n : dataToPosition(\n nearestPoint(\n features,\n [pair.pointCoord!.x, pair.pointCoord!.y],\n uniformDegree(lineDegree(pair.point!, centerPosition))\n )\n );\n\n if (targetPoint) {\n rect.x = targetPoint.x;\n rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n\n const degree = uniformDegree(lineDegree(pair.point!, centerPosition));\n\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result);\n}\n\nexport function layoutOuter2(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算几何中心\n let x = 0;\n let y = 0;\n for (let i = 0; i < pairs.length; i++) {\n x += pairs[i].pointCoord.x;\n y += pairs[i].pointCoord.y;\n }\n x /= pairs.length;\n y /= pairs.length;\n const centerPosition = dataToPosition([x, y]);\n if (!centerPosition) {\n return [];\n }\n\n const count = pairs.length;\n\n // 2. 按照圆心角排序\n pairs.sort((a, b) => {\n return lineDegree(centerPosition, a.point) - lineDegree(centerPosition, b.point);\n });\n\n const result = pairs.map((pair, index) => {\n let degree = (360 / count) * index;\n const _degree = lineDegree(centerPosition, pair.point);\n degree = uniformDegree((degree + _degree) / 2);\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord)\n ? pair.point\n : dataToPosition(nearestPoint(features, [pair.pointCoord.x, pair.pointCoord.y], degree));\n if (targetPoint) {\n pair.rect.x = targetPoint.x;\n pair.rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result.sort((a, b) => a.index - b.index));\n}\n\nfunction uniformDegree(degree: number) {\n return degree > 180 ? degree - 360 : degree;\n}\n\nfunction lineDegree(start: IPoint, end: IPoint) {\n return (Math.atan2(start.y - end.y, start.x - end.x) * 180) / Math.PI + 90;\n}\n\nfunction nearestPoint(features: Feature[], origin: number[], bearing: number, distance = 200) {\n const count = 5621 / distance;\n let curOrigin = origin;\n for (let i = 1; i <= count; i++) {\n const dest = destination(curOrigin as unknown as IPoint, distance, bearing);\n if (!isPointWithinFeatures(features, dest)) {\n return [dest.x, dest.y];\n }\n curOrigin = [dest.x, dest.y];\n }\n return origin;\n}\n\nfunction isPointWithinFeatures(features: Feature[], p: IPoint) {\n for (let i = 0; i < features.length; i++) {\n const inside = isPointInPolygon(p, features[i] as any);\n if (inside) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * 以rect左上角为锚点的,根据position位置调整rect布局。\n * @param rect\n * @param position 在锚点的四周位置,'top' | 'bottom' | 'left' | 'right'\n * @param offset rect与锚点间的距离\n * @returns\n */\nexport function placeRectByOrient(rect: IRect, position: IOrientType, offset: number = 0) {\n const result: IRect = { ...rect };\n if (position === 'top') {\n result.x -= rect.width / 2;\n result.y -= offset + rect.height / 2;\n } else if (position === 'bottom') {\n result.x -= rect.width / 2;\n result.y += offset - rect.height / 2;\n } else if (position === 'left') {\n result.x -= offset + rect.width;\n result.y -= rect.height / 2;\n } else if (position === 'right') {\n result.x += offset;\n result.y -= rect.height / 2;\n }\n return result;\n}\n\nexport function candidatesByOrient(\n positions: IOrientType[],\n anchor: IPoint,\n rect: Pick,\n offset = 0\n) {\n const candidates: IPoint[] = [];\n positions.forEach((p: IOrientType) => {\n const { x, y } = placeRectByOrient({ ...anchor, width: rect.width, height: rect.height }, p, offset);\n candidates.push({ x, y });\n });\n return candidates;\n}\n","import type { IPadding, IRect, IOrientType } from '../../typings/space';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IMapLabelSpec, MapLabelSceneNodeMap } from './interface';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport type { IPoint, Datum } from '../../typings';\nimport type { IPairInfo } from './layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { layoutByPosition, layoutOuter, placeRectByOrient } from './layout';\n\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { normalizeLayoutPaddingSpec } from '../../util/space';\nimport { MarkPoint } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode, IRect as IRectGraphic } from '@visactor/vrender-core';\nimport { createGroup, createRect, createSymbol, createText } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { IModel, IModelSpecInfo } from '../../model/interface';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { getSpecInfo } from '../util';\n\nexport class MapLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.mapLabel;\n type = ComponentTypeEnum.mapLabel;\n name: string = ComponentTypeEnum.mapLabel;\n\n static specKey = 'mapLabel';\n specKey = 'mapLabel';\n\n layoutType: 'none' = 'none';\n\n layoutZIndex = LayoutZIndex.MarkPoint;\n\n protected nameField: string;\n protected valueField?: string;\n\n protected _series: ICartesianSeries | IGeoSeries;\n protected _map: any[];\n protected _longitudeField: string;\n protected _latitudeField: string;\n\n protected _markerComponents: MarkPoint[];\n\n private _activeDatum: Datum[] = [];\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IMapLabelSpec) => {\n return s.visible && isValid(s.seriesId);\n });\n }\n\n setAttrFromSpec(): void {\n this.nameField = this._spec.nameField ?? this._series?.getDimensionField()[0];\n this.valueField = this._spec.valueField ?? this._series?.getMeasureField()[0];\n }\n\n created() {\n super.created();\n if (!!this._spec.visible === false) {\n return;\n }\n this.initRelatedInfo();\n this.initData();\n this.initEvent();\n }\n\n initRelatedInfo(): void {\n this._series = this._option.getSeriesInUserIdOrIndex([this._spec.seriesId])[0] as ICartesianSeries;\n if (this._spec.position === 'outer') {\n // 需要获取region上的地理坐标系\n this._map = (this._regions[0].getSeriesInType('map')[0] as IGeoSeries)?.getMapViewData()?.latestData;\n\n this._longitudeField = this._regions[0].getSpec?.()?.longitudeField;\n this._latitudeField = this._regions[0].getSpec?.()?.latitudeField;\n }\n }\n\n initData() {\n const series = this._series;\n if (!series) {\n return;\n }\n const seriesData = series.getViewData();\n if (seriesData) {\n const data = new DataView(this._option.dataSet, { name: `${this.name}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({ type: 'copyDataView', level: TransformLevel.copyDataView }, false);\n\n this._data = new CompilableData(this._option, data);\n data.target.addListener('change', () => {\n if (this._spec.trigger !== 'hover' && this._spec.trigger !== 'click') {\n this._activeDatum = this._data.getLatestData();\n }\n });\n }\n }\n\n initEvent() {\n this.event.on('zoom', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handleZoom(e as unknown as ZoomEventParam);\n return true;\n });\n\n this.event.on('panmove', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handlePan(e as unknown as PanEventParam);\n return true;\n });\n\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n const view = this.getCompiler()?.getVGrammarView();\n\n if (!view) {\n return;\n }\n\n if (trigger === 'hover') {\n view.addEventListener('element-highlight:start', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-highlight:reset', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(null);\n }\n });\n } else if (trigger === 'click') {\n view.addEventListener('element-select:start', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('elementSelectReset', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum([]);\n }\n });\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n this._markerComponents.forEach(marker => {\n marker.translate(delta[0], delta[1]);\n });\n }\n\n handleZoom(e: ZoomEventParam) {\n this._updateMarkerLayoutAttribute();\n }\n\n private _updateDatum(datum: Datum[]) {\n this._activeDatum = datum;\n this._markerComponents.forEach((marker, index) => {\n const markerDatum = this._data?.getLatestData()[index];\n if (this._activeDatum.includes(markerDatum)) {\n marker.setAttribute('visible', true);\n } else {\n marker.setAttribute('visible', false);\n }\n });\n }\n\n dataToPosition(datum: any) {\n return this._series.dataToPosition(datum);\n }\n\n updateLayoutAttribute() {\n const markData = this._data?.getLatestData();\n if (!markData || markData.length === 0) {\n return;\n }\n super.updateLayoutAttribute();\n this._updateMarkerLayoutAttribute();\n }\n\n protected _updateMarkerLayoutAttribute() {\n const layoutPairInfo: IPairInfo[] = [];\n const markerMarks: MapLabelSceneNodeMap[] = [];\n if (!this._markerComponents) {\n this._markerComponents = this._data?.getLatestData().map((data: Datum, index: number) => {\n const cmp = new MarkPoint({\n position: undefined,\n animation: false // 地图标签使用的是markPoint, 暂不开启动画, 待优化@chensiji\n });\n if (cmp) {\n cmp.name = `${this.name}_marker_${index}`;\n cmp.id = this._spec.id ?? `${this.name}_marker_${this.id}`;\n cmp.setAttribute('zIndex', this.layoutZIndex);\n }\n return cmp;\n });\n }\n\n const markerComponents = this._markerComponents;\n markerComponents.forEach((marker, index) => {\n marker.removeAllChild();\n const { pairInfo, contentMarks } = this._evaluateMarker(this._data.getLatestData()[index], index);\n pairInfo && layoutPairInfo.push(pairInfo);\n contentMarks && markerMarks.push(contentMarks);\n });\n\n const positionedRects = this._layoutLabels(layoutPairInfo);\n this._layoutMarkers(positionedRects, markerMarks);\n this._renderMarkers();\n }\n\n protected _evaluateMarker(data: Datum, index: number) {\n let contentItemCount = 0;\n let paddingWidth = 0;\n let paddingHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n\n const position = this._spec.position || 'top';\n const offset = this._spec.offset;\n\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n paddingWidth += (padding?.left || 0) + (padding?.right || 0);\n paddingHeight += (padding?.top || 0) + (padding?.bottom || 0);\n\n const contentMarks: MapLabelSceneNodeMap = {};\n const positionAttr = this.dataToPosition(data);\n\n const container = createGroup({});\n container.name = `${this.name}_marker_itemContainer_${index}`;\n contentMarks.container = container;\n\n if (this._spec.background?.visible) {\n const labelBackground = createRect(transformToGraphic({ ...this._spec.background.style }));\n labelBackground.setAttributes(positionAttr);\n contentMarks.labelBackground = labelBackground;\n container.appendChild(labelBackground);\n }\n\n if (this._spec.icon?.visible) {\n const icon = createSymbol(transformToGraphic({ ...this._spec.icon.style }));\n icon.setAttributes(positionAttr);\n icon.setAttribute('symbolType', this._spec.icon.style?.shape);\n const iconBound = icon.AABBBounds;\n const iconHeight = iconBound?.y2 - iconBound?.y1 ?? 0;\n const iconWidth = iconBound?.x2 - iconBound?.x1 ?? 0;\n contentMarks.icon = icon;\n container.appendChild(icon);\n\n contentHeight = iconHeight;\n contentWidth += iconWidth;\n contentItemCount++;\n }\n\n if (this._spec.nameLabel?.visible) {\n const nameLabel = createText(transformToGraphic({ ...this._spec.nameLabel.style }));\n nameLabel.setAttributes(positionAttr);\n nameLabel.setAttribute('text', data[this.nameField]);\n const nameLabelBound = nameLabel.AABBBounds;\n const nameLabelHeight = nameLabelBound?.y2 - nameLabelBound?.y1 ?? 0;\n const nameLabelWidth = nameLabelBound?.x2 - nameLabelBound?.x1 ?? 0;\n contentMarks.nameLabel = nameLabel;\n container.appendChild(nameLabel);\n\n contentHeight = Math.max(contentHeight, nameLabelHeight);\n contentWidth += nameLabelWidth;\n contentItemCount++;\n }\n\n if (this._spec.valueLabel?.visible && isValid(data[this.valueField])) {\n const valueLabel = createText(transformToGraphic({ ...this._spec.valueLabel.style }));\n valueLabel.setAttributes(positionAttr);\n valueLabel.setAttribute('text', data[this.valueField]);\n const valueLabelBound = valueLabel.AABBBounds;\n const valueLabelHeight = valueLabelBound?.y2 - valueLabelBound?.y1 ?? 0;\n const valueLabelWidth = valueLabelBound?.x2 - valueLabelBound?.x1 ?? 0;\n contentMarks.valueLabel = valueLabel;\n container.appendChild(valueLabel);\n\n contentHeight = Math.max(contentHeight, valueLabelHeight);\n contentWidth += valueLabelWidth;\n contentItemCount++;\n }\n\n const firstValidMark = Object.values(contentMarks).find(m => !!m && m.type !== 'group');\n\n const anchor: IPoint = {\n x: firstValidMark?.getComputedAttribute('x'),\n y: firstValidMark?.getComputedAttribute('y')\n };\n const itemRect = {\n x: anchor.x,\n y: anchor.y,\n width: 0,\n height: 0\n };\n\n itemRect.width = paddingWidth + contentWidth + (contentItemCount - 1) * space;\n itemRect.height = paddingHeight + contentHeight;\n\n const pairInfo: IPairInfo = {\n rect: itemRect,\n point: anchor,\n index\n };\n // 计算得到最终所有元素包围盒的布局位置\n if (position !== 'outer') {\n const anchors = ['top', 'right', 'left', 'bottom'].filter(a => a !== position);\n pairInfo.rect = placeRectByOrient(itemRect, position, offset);\n pairInfo.anchors = anchors as IOrientType[];\n pairInfo.offset = offset;\n } else {\n pairInfo.pointCoord = {\n x: +data?.[this._longitudeField],\n y: +data?.[this._latitudeField]\n };\n }\n return { pairInfo, contentMarks };\n }\n\n protected _layoutMarkers(positionedRects: IRect[], contentMarks: MapLabelSceneNodeMap[]) {\n for (let i = 0; i < contentMarks.length; i++) {\n if (!positionedRects[i] || !contentMarks[i]) {\n return;\n }\n const { icon, nameLabel, valueLabel, labelBackground, container } = contentMarks[i];\n\n const itemRect = positionedRects[i];\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n\n const curY = itemRect.height / 2;\n let curX = padding?.left || 0;\n [icon, nameLabel, valueLabel].forEach((item, index) => {\n if (item) {\n const bounds = item.AABBBounds;\n let offset = 0;\n if (item.type === 'symbol') {\n // 文字的锚点在文字左侧,baseline在中心\n // symbol的锚点[0,0]在图形中心。所以x方向要偏移半个bound。\n offset += (bounds.x2 - bounds.x1 ?? 0) / 2;\n }\n item.setAttributes({\n x: curX + offset,\n y: curY\n });\n\n curX += bounds.x2 - bounds.x1 ?? 0;\n if (index !== 2) {\n curX += space;\n }\n }\n });\n (labelBackground as IRectGraphic)?.setAttributes({\n x: 0,\n y: 0,\n width: itemRect.width,\n height: itemRect.height\n });\n container?.setAttributes({\n dx: -itemRect.width / 2,\n dy: -itemRect.height / 2\n });\n const datum = this._data.getLatestData()[i];\n const anchor = this.dataToPosition(datum);\n const regionPos = this.getRegions()[0].getLayoutStartPoint();\n const showLeader = !!(this._spec.leader?.visible && (icon || nameLabel || valueLabel));\n this._markerComponents[i].setAttributes({\n x: regionPos.x,\n y: regionPos.y,\n position: anchor,\n visible: this._activeDatum.includes(datum),\n itemContent: {\n refX: 0,\n type: 'custom',\n renderCustomCallback: () => container as unknown as IGroup,\n autoRotate: false,\n offsetX: itemRect.x + itemRect.width / 2 - anchor.x,\n offsetY: itemRect.y + itemRect.height / 2 - anchor.y\n },\n itemLine: {\n visible: showLeader,\n type: 'type-po',\n lineStyle: transformToGraphic({ ...this._spec.leader?.style }),\n startSymbol: { visible: false }\n }\n });\n }\n }\n\n protected _renderMarkers() {\n if (!this._markerComponents || !this._markerComponents.length) {\n return;\n }\n\n for (let i = 0; i < this._markerComponents.length; i++) {\n this.getContainer().add(this._markerComponents[i] as unknown as INode);\n }\n }\n\n protected _layoutLabels(rects: IPairInfo[]) {\n const result =\n this._spec.position === 'outer' && this._map\n ? layoutOuter(rects, this._map, (coord: number[]) =>\n this._series.dataToPosition({\n [this._longitudeField]: coord[0],\n [this._latitudeField]: coord[1]\n })\n )\n : layoutByPosition(rects);\n\n return result;\n }\n\n private _isRelativeModel(model: IModel) {\n const id =\n (this._series as ICartesianSeries).getXAxisHelper()?.getAxisId() ??\n (this._series as IGeoSeries).getCoordinateHelper()?.getCoordinateId();\n return model?.id === id;\n }\n\n private _isRelativeSeries(model: IModel) {\n return model?.id === this._series.id;\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._markerComponents as unknown as IGroup[];\n }\n}\n\nexport const registerMapLabel = () => {\n Factory.registerComponent(MapLabelComponent.type, MapLabelComponent);\n};\n","import type { utilFunctionCtx } from '../../typings/params';\nimport type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, IGridLayoutSpec, ElementSpec, ILayoutItem } from '../interface';\nimport { isFunction, isValid, isValidNumber } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport { Factory } from '../../core/factory';\n\ntype GridSize = {\n value: number;\n isUserSetting: boolean;\n isLayoutSetting: boolean;\n};\n\nexport class GridLayout implements IBaseLayout {\n static type = 'grid';\n private _chartLayoutRect: IRect = { x: 0, y: 0, width: 1, height: 1 };\n private _chartViewBox: IBoundsLike;\n\n protected _col: number = 1;\n protected _row: number = 1;\n protected _colSize: GridSize[];\n protected _rowSize: GridSize[];\n\n protected _colElements: ILayoutItem[][];\n protected _rowElements: ILayoutItem[][];\n\n protected _gridInfo: IGridLayoutSpec;\n\n protected _elementMap: Map = new Map();\n\n protected _onError: (...args: any[]) => void;\n\n constructor(gridInfo: IGridLayoutSpec, ctx: utilFunctionCtx) {\n this.standardizationSpec(gridInfo);\n this._gridInfo = gridInfo;\n this._col = gridInfo.col;\n this._row = gridInfo.row;\n this._colSize = new Array(this._col).fill(null);\n this._rowSize = new Array(this._row).fill(null);\n this._colElements = new Array(this._col).fill([]);\n this._rowElements = new Array(this._row).fill([]);\n this._onError = ctx?.onError;\n\n this.initUserSetting();\n }\n\n protected standardizationSpec(gridInfo: IGridLayoutSpec) {\n gridInfo.col = gridInfo.col ?? 1;\n gridInfo.row = gridInfo.row ?? 1;\n gridInfo.elements = gridInfo.elements ?? [];\n }\n\n protected initUserSetting() {\n // 先对用户设置的宽高进行设置\n this._gridInfo.colWidth &&\n this.setSizeFromUserSetting(this._gridInfo.colWidth, this._colSize, this._col, this._chartLayoutRect.width);\n\n this._gridInfo.rowHeight &&\n this.setSizeFromUserSetting(this._gridInfo.rowHeight, this._rowSize, this._row, this._chartLayoutRect.height);\n // 其余位置默认填充0\n this._colSize.forEach((c, i) => {\n if (!c) {\n this._colSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n this._rowSize.forEach((r, i) => {\n if (!r) {\n this._rowSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n }\n\n /**\n * 设置用户设置的 colWidth 和 rowHeight\n */\n protected setSizeFromUserSetting(\n userSetting: {\n index: number;\n size: number | ((maxSize: number) => number);\n }[],\n gridSize: GridSize[],\n gridMax: number,\n maxSize: number\n ) {\n userSetting.forEach(userSet => {\n if (userSet.index < 0 && userSet.index >= gridMax) {\n return;\n }\n if (isValidNumber(userSet.size)) {\n gridSize[userSet.index] = {\n value: +userSet.size,\n isUserSetting: true,\n isLayoutSetting: false\n };\n } else if (isFunction(userSet.size)) {\n gridSize[userSet.index] = {\n value: userSet.size(maxSize),\n isUserSetting: true,\n isLayoutSetting: false\n };\n }\n });\n }\n\n protected clearLayoutSize() {\n // 其余位置默认填充0\n this._colSize.forEach(c => {\n c.isLayoutSetting = false;\n if (!c.isUserSetting) {\n c.value = 0;\n }\n });\n this._rowSize.forEach(r => {\n r.isLayoutSetting = false;\n if (!r.isUserSetting) {\n r.value = 0;\n }\n });\n }\n\n protected getItemGridInfo(item: ILayoutItem): ElementSpec {\n // map 中寻找\n const mapResult = this._elementMap.get(item);\n if (mapResult) {\n return mapResult;\n }\n // 配置中匹配\n let result: ElementSpec | undefined;\n result = this._gridInfo.elements?.find(e => {\n if ('modelId' in e && isValid(e.modelId)) {\n if (isValid(item.model.userId) && item.model.userId === e.modelId) {\n return true;\n }\n } else if ('modelKey' in e && isValid(e.modelKey) && 'modelIndex' in e && isValid(e.modelIndex)) {\n const specKey = item.model.specKey ?? item.model.type;\n if (specKey === e.modelKey && item.model.getSpecIndex() === e.modelIndex) {\n return true;\n }\n }\n return false;\n });\n // default\n if (!result) {\n result = {\n col: 0,\n colSpan: 1,\n row: 0,\n rowSpan: 1\n } as ElementSpec;\n }\n this._elementMap.set(item, result);\n return result;\n }\n\n protected getSizeFromGrid(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected getSizeFromUser(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n if (!sizeList[spec[type]]?.isUserSetting) {\n return undefined;\n }\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n if (!sizeList[index].isUserSetting) {\n return undefined;\n }\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected setItemLayoutSizeToGrid(item: ILayoutItem, gridSpec: ElementSpec) {\n if (isColItem(item)) {\n if (gridSpec.colSpan && gridSpec.colSpan > 1) {\n return;\n }\n if (this._colSize[gridSpec.col].isUserSetting) {\n return;\n }\n this._colSize[gridSpec.col].value = Math.max(\n this._colSize[gridSpec.col].value,\n item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight\n );\n this._colSize[gridSpec.col].isLayoutSetting = true;\n } else {\n if (gridSpec.rowSpan && gridSpec.rowSpan > 1) {\n return;\n }\n if (this._rowSize[gridSpec.row].isUserSetting) {\n return;\n }\n this._rowSize[gridSpec.row].value = Math.max(\n this._rowSize[gridSpec.row].value,\n item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom\n );\n this._rowSize[gridSpec.row].isLayoutSetting = true;\n }\n }\n\n protected layoutGrid(type: 'col' | 'row') {\n const gridSize = type === 'col' ? this._colSize : this._rowSize;\n let unSetSize = type === 'col' ? this._chartLayoutRect.width : this._chartLayoutRect.height;\n const willSize: GridSize[] = [];\n gridSize.forEach(s => {\n if (s.isUserSetting || s.isLayoutSetting) {\n unSetSize -= s.value;\n } else {\n willSize.push(s);\n }\n });\n if (unSetSize < 0) {\n console.warn(`layout content ${type} size bigger than chart`);\n }\n willSize.forEach(s => (s.value = unSetSize / willSize.length));\n }\n\n protected getItemPosition(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n const point = { x: this._chartLayoutRect.x, y: this._chartLayoutRect.y };\n for (let col = 0; col < gridSpec.col; col++) {\n point.x += this._colSize[col].value;\n }\n for (let row = 0; row < gridSpec.row; row++) {\n point.y += this._rowSize[row].value;\n }\n point.x += item.layoutPaddingLeft + item.layoutOffsetX;\n point.y += item.layoutPaddingTop + item.layoutOffsetY;\n return point;\n }\n\n protected getItemLayoutRect(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const rect = {\n width:\n (this.getSizeFromGrid(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (this.getSizeFromGrid(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n return rect;\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n // 先清空旧布局信息\n this.clearLayoutSize();\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n\n // 剔除 region 后,其余元素先布局运算\n const normalItems = items.filter(item => item.layoutType === 'normal' && item.getModelVisible() !== false);\n const normalItemsCol = normalItems.filter(item => isColItem(item));\n const normalItemsRow = normalItems.filter(item => !isColItem(item));\n normalItems.forEach(item => {\n this.layoutOneItem(item, 'user', false);\n });\n\n // region 和 region 关联元素\n const regionsRelative = items.filter(x => x.layoutType === 'region-relative');\n const regionsRelativeCol = regionsRelative.filter(item => isColItem(item));\n const regionsRelativeRow = regionsRelative.filter(item => !isColItem(item));\n // 先进行 col 方向布局\n regionsRelativeCol.forEach(item => this.layoutOneItem(item, 'user', false));\n // 然后得到最终 col 信息 此时已经是最终 col 信息\n this.layoutGrid('col');\n // 再使用宽度信息辅助row方向排序\n // 此时普通占位元素,会因为布局宽度影响最终布局高度\n normalItemsRow.forEach(item => this.layoutOneItem(item, 'colGrid', false));\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'colGrid', false);\n });\n // 然后得到最终 row 信息\n this.layoutGrid('row');\n // 统一水平方向元素高度\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'grid', false);\n });\n // 再使用宽度信息,第二次次对 col 方向布局\n normalItemsCol.forEach(item => this.layoutOneItem(item, 'grid', false));\n regionsRelativeCol.forEach(item => {\n // 此时从布局逻辑可知,item的layoutRect会发生,将item的layoutTag设置为true\n this.layoutOneItem(item, 'grid', true);\n });\n this.layoutGrid('col');\n\n // region\n items.filter(x => x.layoutType === 'region').forEach(item => this.layoutOneItem(item, 'grid', false));\n\n // 再找出 absolute 元素,无需排序,在 compiler 层需要排序放置\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n\n // 最后基于grid 设置位置\n items\n .filter(x => x.layoutType !== 'absolute')\n .forEach(item => {\n item.setLayoutStartPosition(this.getItemPosition(item));\n });\n }\n\n /**\n *\n * 无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n\n private layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n protected layoutOneItem(item: ILayoutItem, sizeType: 'user' | 'grid' | 'colGrid' | 'rowGrid', ignoreTag: boolean) {\n const sizeCallRow =\n sizeType === 'rowGrid' || sizeType === 'grid' ? this.getSizeFromGrid.bind(this) : this.getSizeFromUser.bind(this);\n const sizeCallCol =\n sizeType === 'colGrid' || sizeType === 'grid' ? this.getSizeFromGrid.bind(this) : this.getSizeFromUser.bind(this);\n // 先获取 item 的 grid 信息\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const computeRect = {\n width:\n (sizeCallCol(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (sizeCallRow(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n const rect = item.computeBoundsInRect(computeRect);\n if (!isValidNumber(rect.width)) {\n rect.width = computeRect.width;\n }\n if (!isValidNumber(rect.height)) {\n rect.height = computeRect.height;\n }\n item.setLayoutRect(sizeType !== 'grid' ? rect : computeRect);\n // 设置大小到grid\n this.setItemLayoutSizeToGrid(item, gridSpec);\n }\n}\n\nfunction isColItem(item: ILayoutItem) {\n return item.layoutOrient === 'left' || item.layoutOrient === 'right';\n}\n\nexport const registerGridLayout = () => {\n Factory.registerLayout(GridLayout.type, GridLayout);\n};\n","import type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport type { IBaseLayout, ILayoutItem } from '../interface';\nimport type { IOffset, LayoutSideType } from '../base-layout';\nimport { Layout } from '../base-layout';\nimport { isXAxis, isYAxis } from '../../component/axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport type { IAxis } from '../../component/axis';\n\nexport class Layout3d extends Layout implements IBaseLayout {\n static type = 'layout3d';\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n // 计算3d轴\n const absoluteItem = items.filter(x => x.layoutType === 'absolute');\n const zItems = absoluteItem.filter(i => {\n return i.layoutOrient === 'z';\n });\n\n // 计算z的宽高,让出一部分位置\n let extraWH = { width: 0, height: 0 };\n if (zItems.length) {\n const layoutRect = zItems[0].getLayoutRect();\n extraWH = layoutRect;\n }\n this.leftCurrent += extraWH.width / 8;\n this.rightCurrent -= extraWH.width / 8;\n this.topCurrent += extraWH.height / 8;\n this.bottomCurrent -= extraWH.height / 8;\n\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n // z轴以外的绝对定位\n const absoluteItemExceptZAxis = absoluteItem.filter(i => i.layoutOrient !== 'z');\n this.layoutAbsoluteItems(absoluteItemExceptZAxis);\n\n // 找到x轴\n const xAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isXAxis(item.layoutOrient);\n })[0];\n const yAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isYAxis(item.layoutOrient);\n })[0];\n if (xAxis && zItems.length) {\n const sp = xAxis.getLayoutStartPoint();\n const lr = xAxis.getLayoutRect();\n const zRect = {\n x: yAxis.layoutOrient === 'left' ? sp.x + lr.width : sp.x,\n y: sp.y,\n width: this._chartLayoutRect.width,\n height: this._chartLayoutRect.height\n };\n (zItems[0].model as IAxis).directionStr = yAxis.layoutOrient === 'left' ? 'r2l' : 'l2r';\n // 将长宽高信息传给所有的轴\n const xRect = xAxis.getLayoutRect();\n const yRect = yAxis.getLayoutRect();\n // const zRect = zItems[0].getLayoutRect();\n const box3d = {\n length: zItems[0].getLayoutRect().width,\n width: xRect.width,\n height: yRect.height\n };\n\n (xAxis.model).setLayout3dBox && (xAxis.model).setLayout3dBox(box3d);\n (yAxis.model).setLayout3dBox && (yAxis.model).setLayout3dBox(box3d);\n (zItems[0].model).setLayout3dBox && (zItems[0].model).setLayout3dBox(box3d);\n\n this.layoutZAxisItems(zItems, zRect);\n }\n }\n\n /**\n * 对z轴进行布局\n * @param zItems\n */\n protected layoutZAxisItems(zItems: ILayoutItem[], zRect: IRect) {\n zItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(zRect);\n });\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem, extraOffset?: IOffset) {\n if (!extraOffset) {\n extraOffset = { offsetLeft: 0, offsetRight: 0, offsetTop: 0, offsetBottom: 0 };\n }\n const result = {\n width:\n this.rightCurrent -\n this.leftCurrent -\n item.layoutPaddingLeft -\n item.layoutPaddingRight -\n (extraOffset.offsetLeft + extraOffset.offsetRight),\n height:\n this.bottomCurrent -\n this.topCurrent -\n item.layoutPaddingTop -\n item.layoutPaddingBottom -\n (extraOffset.offsetTop + extraOffset.offsetBottom)\n };\n return result;\n }\n\n protected _checkAutoIndent(items: ILayoutItem[]) {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n const rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent;\n const bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const outer = i.getLastComputeOutBounds();\n if (vOrH) {\n result.top = Math.max(result.top, outer.y1 - this.topCurrent);\n result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent);\n } else {\n result.left = Math.max(result.left, outer.x1 - this.leftCurrent);\n result.right = Math.max(result.right, outer.x2 - rightCurrent);\n }\n });\n return result;\n }\n}\n\nexport const registerLayout3d = () => {\n Factory.registerLayout(Layout3d.type, Layout3d);\n};\n","/**\n * @description PopTip组件\n */\nimport {\n InputText,\n type IGraphic,\n type IGroup,\n type IRect,\n type ISymbol,\n type ISymbolGraphicAttribute,\n type IText,\n type ITextGraphicAttribute,\n type TextAlignType,\n type TextBaselineType\n} from '@visactor/vrender-core';\nimport {\n AABBBounds,\n Bounds,\n getRectIntersect,\n isArray,\n isBoolean,\n isEmpty,\n isValid,\n max,\n merge,\n normalizePadding,\n pi,\n rectInsideAnotherRect\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { PopTipAttributes } from './type';\nimport { loadPoptipComponent } from './register';\n\nconst _tBounds = new AABBBounds();\n\nloadPoptipComponent();\n\nconst tlStr = 'M -0.5 -0.5, L -0.5 0.5, L 0.5 -0.5, Z';\nconst blStr = 'M -0.5 -0.5, L -0.5 0.5, L 0.5 0.5, Z';\nconst trStr = 'M -0.5 -0.5, L 0.5 -0.5, L 0.5 0.5, Z';\nconst brStr = 'M 0.5 -0.5, L 0.5 0.5, L -0.5 0.5, Z';\n\nconst conciseSymbolMap = {\n tl: tlStr,\n tr: trStr,\n bl: blStr,\n br: brStr,\n lt: tlStr,\n lb: blStr,\n rt: trStr,\n rb: brStr\n};\nexport class PopTip extends AbstractComponent> {\n name = 'poptip';\n\n static defaultAttributes: Partial = {\n position: 'rt',\n visible: true,\n title: null,\n content: null,\n titleStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n contentStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n panel: {} as any,\n maxWidthPercent: 0.8,\n space: 8,\n padding: 10\n };\n\n titleShape?: IText;\n contentShape?: IText;\n group?: IGroup;\n\n constructor(attributes: PopTipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTip.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n titleStyle = {} as ITextGraphicAttribute,\n position,\n contentStyle = {} as ITextGraphicAttribute,\n panel,\n logoSymbol,\n logoText,\n logoTextStyle = {} as ITextGraphicAttribute,\n triangleMode = 'default',\n space = 4,\n minWidth = 0,\n maxWidth = Infinity,\n padding = 4,\n maxWidthPercent,\n visible,\n state,\n dx = 0,\n dy = 0\n } = this.attribute as PopTipAttributes;\n\n let { title = '', content = '' } = this.attribute as PopTipAttributes;\n\n title = this.attribute.titleFormatMethod ? this.attribute.titleFormatMethod(title) : title;\n content = this.attribute.contentFormatMethod ? this.attribute.contentFormatMethod(content) : content;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('poptip-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n this.group = group;\n\n const maxLineWidth = maxWidth - parsedPadding[1] - parsedPadding[3];\n\n const titleVisible = isValid(title) && visible !== false;\n const titleAttrs = {\n text: isArray(title) ? title : ([title] as any),\n visible: titleVisible,\n wrap: true,\n ...titleStyle,\n x: parsedPadding[3],\n y: parsedPadding[0],\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const titleShape = group.createOrUpdateChild('poptip-title', titleAttrs, 'text') as IText;\n if (!isEmpty(state?.title)) {\n titleShape.states = state.title;\n }\n\n const titleBounds = titleShape.AABBBounds;\n const titleHeight = titleBounds.height();\n const titleWidth = titleBounds.width();\n let height = titleHeight + space;\n if (!titleVisible) {\n height = 0;\n }\n\n const contentVisible = isValid(content) && visible !== false;\n const contentAttrs = {\n text: isArray(content) ? content : ([content] as any),\n visible: contentVisible,\n wrap: true,\n ...contentStyle,\n x: parsedPadding[3],\n y: parsedPadding[0] + height,\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const contentShape = group.createOrUpdateChild('poptip-content', contentAttrs, 'text') as IText;\n if (!isEmpty(state?.content)) {\n contentShape.states = state.content;\n }\n\n const contentBounds = contentShape.AABBBounds;\n const contentHeight = contentBounds.height();\n const contentWidth = contentBounds.width();\n\n if (contentVisible) {\n height += contentHeight;\n }\n\n this.titleShape = titleShape;\n this.contentShape = contentShape;\n\n // 计算整个popTip的宽高\n let popTipWidth = max(\n titleWidth + parsedPadding[1] + parsedPadding[3],\n contentWidth + parsedPadding[1] + parsedPadding[3]\n );\n if (popTipWidth > maxWidth) {\n popTipWidth = maxWidth;\n } else if (popTipWidth < minWidth) {\n popTipWidth = minWidth;\n }\n let poptipHeight = parsedPadding[0] + parsedPadding[2] + height;\n\n // 绘制背景层\n const { visible: bgVisible, square, ...backgroundStyle } = panel;\n // 如果是正方形,取宽高的最大值,同时文字也需要居中\n if (square) {\n const maxWH = max(popTipWidth, poptipHeight);\n popTipWidth = maxWH;\n const deltaH = maxWH - poptipHeight;\n poptipHeight = maxWH;\n titleShape.setAttributes({ dy: deltaH / 2 });\n contentShape.setAttributes({ dy: deltaH / 2 });\n }\n const symbolSize = backgroundStyle.size ?? 12;\n const spaceSize: number | [number, number] = isArray(symbolSize)\n ? [symbolSize[0] + (backgroundStyle.space ?? 0), symbolSize[1] + (backgroundStyle.space ?? 0)]\n : (symbolSize as number) + (backgroundStyle.space ?? 0);\n const lineWidth = backgroundStyle.lineWidth ?? 1;\n const range: [number, number] | undefined = (this as any).stage\n ? [\n (this as any).stage.viewWidth ?? (this as any).stage.width,\n (this as any).stage.viewHeight ?? (this as any).stage.height\n ]\n : undefined;\n\n if (range) {\n // 尝试进行换行\n const b = (this as any).AABBBounds;\n const leftWidth = this.attribute.x ?? b.x1;\n const rightWidth = range[0] - b.x1;\n let maxSpace = Math.max(leftWidth, rightWidth);\n // 减一些buffer,buffer不能超过maxSpace的20%\n const buf = (isArray(symbolSize) ? symbolSize[0] : 12) + 3;\n maxSpace = Math.min(maxSpace - buf, maxSpace * maxWidthPercent);\n // 需要进行换行\n if (maxSpace < popTipWidth) {\n popTipWidth = maxSpace;\n const buf = parsedPadding[1] + parsedPadding[3];\n titleShape.setAttribute('maxLineWidth', maxSpace - buf);\n contentShape.setAttribute('maxLineWidth', maxSpace - buf);\n poptipHeight = parsedPadding[0] + parsedPadding[2];\n if (titleVisible) {\n poptipHeight += titleShape.AABBBounds.height() + space;\n }\n poptipHeight += contentShape.AABBBounds.height();\n }\n }\n\n const layout = position === 'auto';\n // 最多循环this.positionList次\n let maxBBoxI: number;\n let maxBBoxSize: number = -Infinity;\n\n for (let i = 0; i < this.positionList.length + 1; i++) {\n const p = layout ? this.positionList[i === this.positionList.length ? maxBBoxI : i] : position;\n let symbolType = 'arrow2Left';\n let offsetX = (isArray(symbolSize) ? symbolSize[0] : symbolSize) / 4;\n let offsetY = 0;\n if (p === 'top' || p === 'bottom' || p === 'left' || p === 'right') {\n symbolType = 'arrow2Left';\n } else if (triangleMode === 'concise') {\n symbolType = (conciseSymbolMap as any)[p];\n offsetX = ['tl', 'bl', 'rt', 'rb'].includes(position)\n ? (isArray(symbolSize) ? symbolSize[0] : symbolSize) / 2\n : -(isArray(symbolSize) ? symbolSize[0] : symbolSize) / 2;\n offsetY = ['tl', 'tr', 'lb', 'rb'].includes(position)\n ? -(isArray(symbolSize) ? symbolSize[1] : symbolSize) / 2\n : (isArray(symbolSize) ? symbolSize[1] : symbolSize) / 2;\n }\n\n const { angle, offset } = this.getAngleAndOffset(\n p,\n popTipWidth,\n poptipHeight,\n isArray(spaceSize) ? (spaceSize as [number, number]) : [spaceSize, spaceSize - lineWidth],\n symbolType\n );\n if (isBoolean(bgVisible)) {\n const bgSymbol = group.createOrUpdateChild(\n 'poptip-symbol-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: offsetX,\n y: offsetY,\n strokeBoundsBuffer: -1,\n boundsPadding: -2,\n anchor: [0, 0],\n symbolType,\n angle: angle,\n dx: offset[0],\n // 标签和背景同时移动\n dy: offset[1] - (backgroundStyle.space ?? 0),\n size: symbolSize,\n zIndex: 9\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.panel)) {\n bgSymbol.states = state.panel;\n }\n\n let bgRect: IGraphic;\n if (panel.panelSymbolType) {\n bgRect = group.createOrUpdateChild(\n 'poptip-rect-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: 0,\n y: 0,\n symbolType: 'rect',\n size: [popTipWidth, poptipHeight],\n zIndex: -8\n },\n 'symbol'\n ) as ISymbol;\n } else {\n bgRect = group.createOrUpdateChild(\n 'poptip-rect-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: 0,\n y: 0,\n width: popTipWidth,\n height: poptipHeight,\n zIndex: -8\n },\n 'rect'\n ) as IRect;\n }\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n\n group.setAttributes({\n x: -offset[0] + dx,\n y: -offset[1] + dy,\n anchor: [offsetX, offsetY]\n });\n\n // 添加logo和logo内的text\n if (logoSymbol) {\n const { size = 12 } = logoSymbol;\n const sizeArray = isArray(size) ? (size as [number | string, number | string]) : [size, size];\n if (sizeArray[1] === 'auto') {\n sizeArray[1] = poptipHeight;\n }\n if (sizeArray[0] === 'auto') {\n sizeArray[0] = poptipHeight;\n }\n const sizeW = sizeArray[0] as number;\n group.createOrUpdateChild(\n 'poptip-logo',\n {\n ...logoSymbol,\n x: 0,\n y: poptipHeight / 2,\n visible: bgVisible && (contentVisible || titleVisible),\n zIndex: 10,\n size: sizeArray as [number, number]\n },\n 'symbol'\n );\n group.setAttributes({\n x: -offset[0] + dx + sizeW / 2,\n y: -offset[1] + dy\n });\n if (logoText) {\n group.createOrUpdateChild(\n 'poptip-logo-text',\n {\n ...logoTextStyle,\n x: 0,\n y: poptipHeight / 2,\n visible: bgVisible && (contentVisible || titleVisible),\n text: logoText,\n textAlign: 'center',\n textBaseline: 'middle',\n zIndex: 10\n },\n 'text'\n );\n }\n }\n\n if (layout && range) {\n _tBounds.setValue(0, 0, popTipWidth, poptipHeight).transformWithMatrix(group.globalTransMatrix);\n const b = _tBounds;\n const stageBounds = new Bounds().setValue(0, 0, range[0], range[1]);\n if (rectInsideAnotherRect(b, stageBounds, false)) {\n break;\n } else {\n const bbox = getRectIntersect(b, stageBounds, false);\n const size = (bbox.x2 - bbox.x1) * (bbox.y2 - bbox.y1);\n if (size > maxBBoxSize) {\n maxBBoxSize = size;\n maxBBoxI = i;\n }\n }\n } else {\n break;\n }\n }\n }\n\n positionList = ['top', 'tl', 'tr', 'bottom', 'bl', 'br', 'left', 'lt', 'lb', 'right', 'rt', 'rb'];\n\n getAngleAndOffset(\n position: string,\n width: number,\n height: number,\n size: [number, number],\n symbolType: 'arrow2Left' | string\n ): { angle: number; offset: [number, number] } {\n // const sizeW = size[0];\n const sizeH = symbolType === 'arrow2Left' ? size[1] / 2 : size[1];\n switch (position) {\n case 'tl':\n return {\n angle: symbolType === 'arrow2Left' ? (pi / 2) * 3 : 0,\n offset: symbolType === 'arrow2Left' ? [width / 4, height + sizeH] : [0, height + sizeH]\n };\n case 'top':\n return { angle: (pi / 2) * 3, offset: [width / 2, height + sizeH] };\n case 'tr':\n return {\n angle: symbolType === 'arrow2Left' ? (pi / 2) * 3 : 0,\n offset: symbolType === 'arrow2Left' ? [(width / 4) * 3, height + sizeH] : [width, height + sizeH]\n };\n case 'rt':\n return {\n angle: 0,\n offset: symbolType === 'arrow2Left' ? [-sizeH, height / 5] : [-sizeH, 0]\n };\n case 'right':\n return { angle: 0, offset: [-sizeH, height / 2] };\n case 'rb':\n return {\n angle: 0,\n offset: symbolType === 'arrow2Left' ? [-sizeH, (height / 5) * 4] : [-sizeH, height]\n };\n case 'bl':\n return {\n angle: symbolType === 'arrow2Left' ? pi / 2 : 0,\n offset: symbolType === 'arrow2Left' ? [width / 4, -sizeH] : [0, -sizeH]\n };\n case 'bottom':\n return { angle: pi / 2, offset: [width / 2, -sizeH] };\n case 'br':\n return {\n angle: symbolType === 'arrow2Left' ? pi / 2 : 0,\n offset: symbolType === 'arrow2Left' ? [(width / 4) * 3, -sizeH] : [width, -sizeH]\n };\n case 'lt':\n return {\n angle: symbolType === 'arrow2Left' ? pi : 0,\n offset: symbolType === 'arrow2Left' ? [width + sizeH, height / 5] : [width + sizeH, 0]\n };\n case 'left':\n return { angle: pi, offset: [width + sizeH, height / 2] };\n case 'lb':\n return {\n angle: symbolType === 'arrow2Left' ? pi : 0,\n offset: symbolType === 'arrow2Left' ? [width + sizeH, (height / 5) * 4] : [width + sizeH, height]\n };\n }\n }\n\n appearAnimate(animateConfig: { duration?: number; easing?: string; wave?: number }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.setAttributes({ scaleX: 0, scaleY: 0 });\n this.animate().to({ scaleX: 1, scaleY: 1 }, (duration / 3) * 2, easing as any);\n this.titleShape &&\n this.titleShape\n .animate()\n .play(new InputText({ text: '' }, { text: this.titleShape.attribute.text as string }, duration, easing as any));\n this.contentShape &&\n this.contentShape\n .animate()\n .play(\n new InputText({ text: '' }, { text: this.contentShape.attribute.text as string }, duration, easing as any)\n );\n\n // 摇摆\n if (animateConfig.wave) {\n const dur = duration / 6;\n this.group\n .animate()\n .to({ angle: animateConfig.wave }, dur, easing as any)\n .to({ angle: -animateConfig.wave }, dur * 2, easing as any)\n .to({ angle: animateConfig.wave }, dur * 2, easing as any)\n .to({ angle: 0 }, dur, easing as any);\n }\n }\n\n disappearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n }\n}\n","import type {\n IContext2d,\n IGraphic,\n IGraphicAttribute,\n IInteractiveSubRenderContribution,\n IThemeAttribute,\n IDrawContext\n} from '@visactor/vrender-core';\nimport { injectable } from '@visactor/vrender-core';\nimport { PopTip } from './poptip';\nimport { merge } from '@visactor/vutils';\nimport { theme } from './theme';\n\nfunction wrapPoptip(target: Record, source: Record) {\n merge(target, theme.poptip, source);\n return target;\n}\n\n@injectable()\nexport class PopTipRenderContribution implements IInteractiveSubRenderContribution {\n declare poptipComponent: PopTip;\n render(\n graphic: IGraphic>,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ): void {\n if (graphic._showPoptip === 1) {\n const { visible, visibleCb } = (graphic.attribute as any).poptip || {};\n if (visible === false || (visibleCb && visibleCb(graphic) === false)) {\n return;\n }\n const attribute = {};\n merge(\n attribute,\n PopTip.defaultAttributes,\n (graphic.attribute as any).poptip ? (graphic.attribute as any).poptip : {}\n );\n if (!this.poptipComponent) {\n this.poptipComponent = new PopTip(attribute);\n } else {\n this.poptipComponent.initAttributes(attribute);\n }\n // 如果text图元没有配置title和content的话\n let poptip = (graphic.attribute as any).poptip || {};\n if (graphic.type === 'text' && poptip.title == null && poptip.content == null) {\n const out = {};\n wrapPoptip(out, poptip);\n poptip = out;\n poptip.content = poptip.content ?? (graphic.attribute as any).text;\n }\n const matrix = graphic.globalTransMatrix;\n this.poptipComponent.setAttributes({\n visibleAll: true,\n pickable: false,\n childrenPickable: false,\n ...poptip,\n x: matrix.e,\n y: matrix.f\n });\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n interactiveLayer.add(this.poptipComponent);\n }\n } else if (graphic._showPoptip === 2) {\n graphic._showPoptip = 0;\n if (this.poptipComponent) {\n this.poptipComponent.setAttributes({\n visibleAll: false\n });\n this.poptipComponent.parent?.removeChild(this.poptipComponent);\n this.poptipComponent = null;\n }\n }\n }\n}\n","import type { FederatedPointerEvent, IGraphic, IPlugin, IPluginService } from '@visactor/vrender-core';\nimport { Generator, injectable } from '@visactor/vrender-core';\n\n// _showPoptip: 0-没有,1-添加,2-删除\n\nexport abstract class PopTipPluginBase {\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n activeGraphic: IGraphic;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerover', this.poptip);\n }\n\n needHide(graphic: IGraphic) {\n return graphic.isContainer || !graphic.attribute;\n }\n\n needShow(graphic: IGraphic) {\n return !!(graphic.attribute as any).poptip;\n }\n\n poptip = (e: FederatedPointerEvent) => {\n const graphic = e.target as any;\n if (this.needHide(graphic)) {\n this.unpoptip(e);\n return;\n }\n // 触发graphic重绘\n if (graphic === this.activeGraphic) {\n return;\n }\n if (this.needShow(graphic)) {\n graphic.setAttributes({});\n graphic._showPoptip = 1;\n }\n\n if (this.activeGraphic) {\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n }\n // console.log(graphic)\n this.setActiveGraphic(graphic, true);\n };\n\n unpoptip = (e: FederatedPointerEvent) => {\n if (!this.activeGraphic) {\n return;\n }\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n this.setActiveGraphic(null, true);\n };\n\n setActiveGraphic(graphic: any | null, rerender?: boolean) {\n this.activeGraphic = graphic;\n // 触发重绘\n this.pluginService.stage.renderNextFrame();\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('pointerover', this.poptip);\n }\n}\n\n@injectable()\nexport class PopTipPlugin extends PopTipPluginBase implements IPlugin {\n name: 'poptip' = 'poptip';\n key: string = this.name + this._uid;\n}\n\n@injectable()\nexport class PopTipForClipedTextPlugin extends PopTipPluginBase implements IPlugin {\n name: 'poptipForText' = 'poptipForText';\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n super.activate(context);\n\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerleave', this.pointerlave);\n }\n pointerlave = (e: any) => {\n const { stage } = this.pluginService;\n if (e.target === stage) {\n this.unpoptip(e);\n }\n };\n\n needHide(graphic: IGraphic) {\n return (\n graphic.type !== 'text' ||\n !graphic.cliped ||\n graphic.isContainer ||\n !graphic.attribute ||\n (graphic as any).attribute.disableAutoClipedPoptip\n );\n }\n needShow(graphic: IGraphic): boolean {\n return true;\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n super.deactivate(context);\n stage.removeEventListener('pointerleave', this.pointerlave);\n }\n}\n","import {\n InteractiveSubRenderContribution,\n AutoEnablePlugins,\n ContainerModule,\n container\n} from '@visactor/vrender-core';\nimport { PopTipRenderContribution } from './contribution';\nimport { PopTipPlugin, PopTipForClipedTextPlugin } from './poptip-plugin';\n\nexport const popTipModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(PopTipRenderContribution)) {\n bind(PopTipRenderContribution).toSelf().inSingletonScope();\n bind(InteractiveSubRenderContribution).toService(PopTipRenderContribution);\n }\n if (!isBound(PopTipPlugin)) {\n bind(PopTipPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipPlugin);\n }\n if (!isBound(PopTipForClipedTextPlugin)) {\n bind(PopTipForClipedTextPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipForClipedTextPlugin);\n }\n});\n\nexport function loadPoptip() {\n container.load(popTipModule);\n}\n","import { loadPoptip } from '@visactor/vrender-components';\n\nexport const registerPoptip = () => {\n loadPoptip();\n};\n","import type { ITooltipHandlerOptions } from './interface';\n\nexport const TOOLTIP_PREFIX = 'vchart-tooltip';\nexport const TOOLTIP_CONTAINER_EL_CLASS_NAME = `${TOOLTIP_PREFIX}-container`;\nexport const TOOLTIP_TITLE_CLASS_NAME = `${TOOLTIP_PREFIX}-title`;\nexport const TOOLTIP_CONTENT_BOX_CLASS_NAME = `${TOOLTIP_PREFIX}-content-box`;\nexport const TOOLTIP_EMPTY_STRING = '';\n\nexport const DEFAULT_OPTIONS: ITooltipHandlerOptions = {\n /**\n * X offset.\n */\n offsetX: 10,\n\n /**\n * Y offset.\n */\n offsetY: 10\n};\nexport const DEFAULT_TOOLTIP_Z_INDEX = '99999999999999';\n","import { isString, isNumber } from '@visactor/vutils';\nimport { TOOLTIP_EMPTY_STRING } from '../constants';\n\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value: any): string {\n return String(value)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\\(/g, '(')\n .replace(/ /g, '  '); // 转义符和真空格夹杂,在转义和正常换行之间取得平衡\n}\n\n/** 获取元素的绝对缩放因数(支持外部传入 boundingClientRect 提升性能) */\nexport const getScale = (element: HTMLElement, boundingClientRect?: DOMRect) => {\n if (!element) {\n return 1;\n }\n if (!boundingClientRect) {\n boundingClientRect = element.getBoundingClientRect();\n }\n if (element.offsetWidth > 0) {\n return boundingClientRect.width / element.offsetWidth;\n }\n return element.offsetHeight > 0 ? boundingClientRect.height / element.offsetHeight : 1;\n};\n\nexport const formatContent = (content: any) => {\n if ((isString(content) && content?.trim() !== '') || isNumber(content)) {\n return escapeHTML(content);\n }\n\n return TOOLTIP_EMPTY_STRING;\n};\n","import type { IAxis } from '../../../../component/axis';\nimport type { AxisCurrentValueMap } from '../../../../component/crosshair';\nimport type { IHair } from '../../../../component/crosshair/base';\nimport { LayoutType } from '../../../../component/crosshair/config';\nimport {\n layoutByValue,\n layoutHorizontalCrosshair,\n layoutVerticalCrosshair\n} from '../../../../component/crosshair/utils/cartesian';\nimport type { IDimensionData } from '../../../../event';\nimport type { ICartesianSeries } from '../../../../series';\nimport { Direction, type ILayoutPoint } from '../../../../typings';\nimport type {\n IFixedTooltipPositionPattern,\n IGlobalTooltipPositionPattern,\n TooltipFixedPosition\n} from '../../../../typings/tooltip/position';\nimport { isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\n\nexport const getActualTooltipPositionValue = (\n position: number | ((event: MouseEvent) => number) | null | undefined,\n event: MouseEvent\n): number => {\n let result: number;\n if (isValid(position)) {\n if (isNumber(position)) {\n result = position as number;\n } else if (isFunction(position)) {\n // 这里额外判断下是否合法\n const tooltipPosition = (position as (event: MouseEvent) => number)(event);\n\n if (isNumber(tooltipPosition)) {\n result = tooltipPosition;\n }\n }\n }\n return result;\n};\n\n// 'left' | 'centerLeft' | 'center' | 'centerRight' | 'right'\n// 'top' | 'centerTop' | 'center' | 'centerBottom' | 'bottom'\nexport type TooltipPositionType = -2 | -1 | 0 | 1 | 2;\n\n/** position 对齐方式在 x、y 分量下的分解 */\nexport const positionType: Record = {\n left: [-2, 0],\n right: [2, 0],\n top: [0, -2],\n lt: [-2, -2],\n tl: [-2, -2],\n rt: [2, -2],\n tr: [2, -2],\n bottom: [0, 2],\n bl: [-2, 2],\n lb: [-2, 2],\n br: [2, 2],\n rb: [2, 2],\n inside: [0, 0], // 旧版兼容\n center: [0, 0],\n centerBottom: [0, 1],\n centerTop: [0, -1],\n centerLeft: [-1, 0],\n centerRight: [1, 0]\n};\n\nexport const getPositionType = (\n position: TooltipFixedPosition,\n dim: 'x' | 'y',\n defaultCase: TooltipPositionType = 2\n): TooltipPositionType => positionType[position]?.[dim === 'x' ? 0 : 1] ?? defaultCase;\n\nexport const getCartesianCrosshairRect = (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => {\n const currValueX: AxisCurrentValueMap = new Map();\n const currValueY: AxisCurrentValueMap = new Map();\n const { series, datum } = dimensionData;\n const isHorizontal = (series as ICartesianSeries).direction === Direction.horizontal;\n const axisHelper = isHorizontal\n ? (series as ICartesianSeries).getYAxisHelper()\n : (series as ICartesianSeries).getXAxisHelper();\n const axisId = axisHelper.getAxisId();\n const axis = series\n .getChart()\n .getComponentsByKey('axes')\n .find(axis => axis.id === axisId) as IAxis;\n\n if (!axis) {\n return undefined;\n }\n (isHorizontal ? currValueY : currValueX).set(axis.getSpecIndex(), {\n value: series.getDatumPositionValues(datum[0], series.getDimensionField())?.[0],\n axis\n });\n\n const xHair: IHair = {\n visible: !!currValueX.size,\n type: 'rect'\n };\n const yHair: IHair = {\n visible: !!currValueY.size,\n type: 'rect'\n };\n\n const {\n x: crosshairInfoX,\n y: crosshairInfoY,\n offsetWidth,\n offsetHeight,\n bandWidth,\n bandHeight\n } = layoutByValue(LayoutType.ALL, series as ICartesianSeries, layoutStartPoint, currValueX, currValueY, xHair, yHair);\n\n if (crosshairInfoX) {\n return layoutVerticalCrosshair(xHair, crosshairInfoX, bandWidth, offsetWidth);\n }\n if (crosshairInfoY) {\n return layoutHorizontalCrosshair(yHair, crosshairInfoY, bandHeight, offsetHeight);\n }\n return undefined;\n};\n\nexport const isGlobalTooltipPositionPattern = (obj: any): obj is IGlobalTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IGlobalTooltipPositionPattern).left) ||\n isValid((obj as IGlobalTooltipPositionPattern).right) ||\n isValid((obj as IGlobalTooltipPositionPattern).top) ||\n isValid((obj as IGlobalTooltipPositionPattern).bottom))\n );\n};\n\nexport const isFixedTooltipPositionPattern = (obj: any): obj is IFixedTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IFixedTooltipPositionPattern).x) || isValid((obj as IFixedTooltipPositionPattern).y))\n );\n};\n","import { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_OPTIONS } from './constants';\nimport type { Maybe, IPoint, RenderMode } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITooltipPositionFixedValue, TooltipPositionKeys } from '../../../typings/tooltip/position';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTrueBrowser } from '../../../util/env';\nimport type {\n TooltipData,\n ITooltipActual,\n TooltipActiveType,\n ITooltipHandler,\n ITooltipPositionActual,\n IGlobalTooltipPositionPattern\n} from '../../../typings/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TooltipFixedPosition } from '../../../typings/tooltip';\nimport { getScale } from './utils/common';\nimport {\n getActualTooltipPositionValue,\n getCartesianCrosshairRect,\n getPositionType,\n isFixedTooltipPositionPattern,\n isGlobalTooltipPositionPattern\n} from './utils/position';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { AABBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, isObject, isValidNumber, isValid, isFunction } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILayoutModel } from '../../../model/interface';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport type { IChartOption } from '../../../chart/interface';\nimport type { ITooltipSpec, Tooltip, TooltipHandlerParams } from '../../../component/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../../../component/tooltip';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport { getTooltipPatternValue } from '../../../component/tooltip/utils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport type { ITooltipHandlerOptions } from './interface';\nimport type { ICompiler } from '../../../compile/interface/compilable-item';\n\ntype ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => TooltipResult;\n\ntype ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => TooltipResult;\n\n/**\n * The tooltip handler class.\n */\nexport abstract class BaseTooltipHandler extends BasePlugin implements ITooltipHandler, IComponentPlugin {\n static readonly pluginType: 'component';\n static readonly specKey = 'tooltip';\n\n readonly type: string;\n\n /** 是否可见 */\n protected _visible = true;\n\n // protected _style: ITooltipStyle = {};\n\n protected _option: ITooltipHandlerOptions;\n\n protected _chartOption: IChartOption;\n\n protected _env: RenderMode;\n public get env() {\n return this._env;\n }\n\n protected _component: Tooltip;\n\n protected _chartContainer: Maybe;\n protected _compiler: ICompiler;\n\n // tooltip 容器\n protected _container!: Maybe;\n\n protected _isReleased: boolean = false;\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n const component = service.component as Tooltip;\n this._component = component;\n this._chartOption = component.getOption() as any;\n this._env = this._chartOption.mode;\n this._chartContainer = this._chartOption.globalInstance.getContainer();\n this._compiler = component.getCompiler();\n this._initFromSpec();\n }\n\n showTooltip = (activeType: TooltipActiveType, data: TooltipData, params: TooltipHandlerParams) => {\n const { changePositionOnly } = params;\n\n if (changePositionOnly) {\n return this.changeTooltipPosition(params, data);\n }\n return this.changeTooltip(true, params, data);\n };\n\n /** 改变 tooltip 内容和位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltip: ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n if (!visible) {\n /** 关闭 tooltip */\n this._updateTooltip(false, params);\n return TooltipResult.success;\n }\n\n return this.changeTooltipPosition(params, data);\n };\n\n /** 改变 tooltip 位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltipPosition: ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n const event = params.event as MouseEvent;\n const { tooltipSpec, activeTooltipSpec, changePositionOnly } = params;\n\n if (!activeTooltipSpec) {\n return TooltipResult.failed;\n }\n\n const activeType = activeTooltipSpec.activeType;\n\n /** 用户自定义逻辑 */\n if (activeTooltipSpec.handler) {\n return activeTooltipSpec.handler.showTooltip?.(activeType, data, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = activeTooltipSpec;\n\n // 计算 tooltip 位置\n const position = this._getActualTooltipPosition(\n activeTooltipSpec,\n params,\n this._getTooltipBoxSize(activeTooltipSpec, changePositionOnly)\n );\n activeTooltipSpec.position = position;\n const updatePosition = activeTooltipSpec.updatePosition ?? tooltipSpec[activeType]?.updatePosition;\n\n if (updatePosition) {\n activeTooltipSpec.position = updatePosition(activeTooltipSpec.position, data, params);\n }\n\n // 判断 tooltip 可见性\n let tooltipVisible = pattern?.visible !== false;\n if (\n !data ||\n event.type === 'pointerout' ||\n !activeTooltipSpec.visible ||\n (!activeTooltipSpec.title && !activeTooltipSpec.content)\n ) {\n tooltipVisible = false;\n }\n\n this._updateTooltip(tooltipVisible, {\n ...params,\n changePositionOnly\n });\n return TooltipResult.success;\n };\n\n hideTooltip(params: TooltipHandlerParams): TooltipResult {\n return this.changeTooltip(false, params);\n }\n\n release(): void {\n const spec = this._component.getSpec() ?? {};\n /** 用户自定义逻辑 */\n if (spec.handler) {\n spec.handler.release?.();\n return;\n }\n /** 默认逻辑 */\n this._removeTooltip();\n\n this._isReleased = true;\n }\n\n /* -----需要子类继承的方法开始----- */\n\n protected abstract _updateTooltip(visible: boolean, params: TooltipHandlerParams): void;\n protected abstract _removeTooltip(): void;\n protected abstract _getTooltipBoxSize(\n actualTooltip: ITooltipActual,\n changePositionOnly: boolean\n ): IContainerSize | undefined;\n\n /* -----需要子类继承的方法结束----- */\n\n protected _getDefaultOption(): ITooltipHandlerOptions {\n const { offset } = this._component.getSpec();\n\n return offset\n ? {\n offsetX: offset.x ?? DEFAULT_OPTIONS.offsetX,\n offsetY: offset.y ?? DEFAULT_OPTIONS.offsetY\n }\n : DEFAULT_OPTIONS;\n }\n\n /**\n * 计算实际的 tooltip 位置\n */\n protected _getActualTooltipPosition = (\n actualTooltip: ITooltipActual,\n params: TooltipHandlerParams,\n tooltipBoxSize: IContainerSize | undefined\n ): ITooltipPositionActual => {\n const { tooltipSpec } = params;\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n if (!tooltipSpec) {\n return invalidPosition;\n }\n const event = params.event as MouseEvent;\n const { activeType, data } = actualTooltip;\n const firstDim =\n activeType === 'dimension' ? (data as IDimensionInfo[])[0]?.data?.[0] : (data as IDimensionData[])?.[0];\n\n const { offsetX, offsetY } = this._option;\n\n const spec = tooltipSpec[activeType];\n const position = getTooltipPatternValue(spec?.position, data, params);\n const positionMode =\n getTooltipPatternValue(spec?.positionMode, data, params) ?? (activeType === 'mark' ? 'mark' : 'pointer');\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = tooltipBoxSize ?? {};\n\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const canvasRect = params?.chart?.getCanvasRect();\n const canvasWidth = canvasRect?.width ?? DEFAULT_CHART_WIDTH;\n const canvasHeight = canvasRect?.height ?? DEFAULT_CHART_HEIGHT;\n let isFixedPosition = false;\n\n const containerSize = {\n width: 0,\n height: 0\n };\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementRect: DOMRect;\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n const isBrowser = isTrueBrowser(this._env);\n\n if (isBrowser && !tooltipSpec.confine) {\n // 只有在 browser 模式下才可以获取到 window 对象\n containerSize.width = window.innerWidth;\n containerSize.height = window.innerHeight;\n } else {\n containerSize.width = canvasWidth;\n containerSize.height = canvasHeight;\n }\n if (isBrowser && !isCanvas) {\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect?.() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n const tooltipSizeScale = tooltipParentElementScale / chartElementScale;\n\n /* 一、计算 left、top、right、bottom */\n\n const calcPos: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const pointerFixedPosition: {\n x: TooltipFixedPosition;\n y: TooltipFixedPosition;\n } = { x: position as any, y: position as any };\n const dimToPos = { x: ['left', 'right'], y: ['top', 'bottom'] };\n\n const processCartesianFixedPosition = ({ orient, mode, offset }: ITooltipPositionFixedValue, dim: 'x' | 'y') => {\n let dim1: number;\n let dim2: number;\n const model = params.model as ILayoutModel;\n const startPoint = model?.getLayoutStartPoint();\n const dimOffset = offset ?? (dim === 'x' ? offsetX : offsetY);\n\n if (mode === 'mark') {\n isFixedPosition = true;\n const element = params.item as IElement;\n const bounds = element?.getBounds() as AABBBounds;\n if (bounds && startPoint) {\n dim1 = (dim === 'x' ? bounds.x1 : bounds.y1) + startPoint[dim];\n dim2 = (dim === 'x' ? bounds.x2 : bounds.y2) + startPoint[dim];\n }\n } else if (\n mode === 'crosshair' &&\n firstDim?.series?.coordinate === 'cartesian' &&\n firstDim.datum &&\n firstDim.datum.length\n ) {\n isFixedPosition = true;\n const rect = getCartesianCrosshairRect(firstDim, startPoint);\n if (rect) {\n dim1 = rect.start[dim];\n dim2 = rect.end[dim];\n }\n } else {\n pointerFixedPosition[dim] = orient;\n }\n\n if (isFixedPosition) {\n const posKey = dimToPos[dim][0] as TooltipPositionKeys;\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n switch (getPositionType(orient, dim)) {\n case -2:\n calcPos[posKey] = dim1 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 0:\n calcPos[posKey] = (dim1 + dim2) / 2 - (boxSize * tooltipSizeScale) / 2;\n break;\n case -1:\n calcPos[posKey] = (dim1 + dim2) / 2 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 1:\n calcPos[posKey] = (dim1 + dim2) / 2 + dimOffset;\n break;\n case 2:\n calcPos[posKey] = dim2 + dimOffset;\n break;\n }\n }\n };\n const dims = ['x', 'y'] as ('x' | 'y')[];\n if (isObject(position)) {\n if (isGlobalTooltipPositionPattern(position)) {\n const {\n left: posLeft,\n right: posRight,\n top: posTop,\n bottom: posBottom\n } = position as IGlobalTooltipPositionPattern;\n calcPos.left = getActualTooltipPositionValue(posLeft, event);\n calcPos.top = getActualTooltipPositionValue(posTop, event);\n calcPos.right = getActualTooltipPositionValue(posRight, event);\n calcPos.bottom = getActualTooltipPositionValue(posBottom, event);\n } else if (isFixedTooltipPositionPattern(position)) {\n dims.forEach(dim => {\n const dimValue = position[dim];\n if (isNumber(dimValue) || isFunction(dimValue)) {\n calcPos[dimToPos[dim][0] as TooltipPositionKeys] = getActualTooltipPositionValue(\n dimValue as number | ((event: MouseEvent) => number),\n event\n );\n } else {\n processCartesianFixedPosition(dimValue as ITooltipPositionFixedValue, dim);\n }\n });\n }\n } else if (isValid(position)) {\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'x');\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'y');\n }\n\n const result: ITooltipPositionActual = { x: null, y: null };\n\n dims.forEach(dim => {\n /* 二、换算成 x 和 y */\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n const canvasSize = dim === 'x' ? canvasWidth : canvasHeight;\n const offset = dim === 'x' ? offsetX : offsetY;\n const posType = getPositionType(pointerFixedPosition[dim], dim);\n if (isValidNumber(calcPos[dimToPos[dim][0] as TooltipPositionKeys])) {\n result[dim] = calcPos[dimToPos[dim][0] as TooltipPositionKeys];\n } else if (isValidNumber(calcPos[dimToPos[dim][1] as TooltipPositionKeys])) {\n result[dim] = canvasSize - boxSize * tooltipSizeScale - calcPos[dimToPos[dim][1] as TooltipPositionKeys];\n } else {\n const value0 = dim === 'x' ? (event as any).canvasX : (event as any).canvasY;\n\n if (posType > 0) {\n result[dim] = value0 + offset;\n } else if (posType === 0) {\n result[dim] = value0 - (boxSize * tooltipSizeScale) / 2;\n } else {\n result[dim] = value0 - boxSize * tooltipSizeScale - offset;\n }\n }\n result[dim] *= chartElementScale;\n\n if (isBrowser) {\n result[dim] += relativePosOffset[dim];\n }\n result[dim] /= tooltipParentElementScale;\n\n /* 三、确保tooltip在视区内 */\n const containerDimSize = dim === 'x' ? containerSize.width : containerSize.height;\n const leftOrTop = tooltipSpec.confine\n ? -(tooltipParentElementRect[dim] - (chartElementRect?.[dim] ?? 0) / chartElementScale) /\n tooltipParentElementScale\n : -tooltipParentElementRect[dim] / tooltipParentElementScale;\n const rightOrBottom = containerDimSize / tooltipParentElementScale + leftOrTop - boxSize;\n\n // 处理左右\n if (posType !== 2 && result[dim] < leftOrTop) {\n // 优先检测left\n if (isFixedPosition) {\n result[dim] = leftOrTop;\n } else {\n if (posType === 0) {\n // 从居中 挪至 右侧\n result[dim] += offset + boxSize / 2;\n } else {\n // 从居左/左侧 挪至 居右/右侧\n result[dim] += offset * 2 + boxSize;\n }\n\n if (result[dim] > rightOrBottom) {\n // 位置不超出视区右界\n result[dim] = rightOrBottom;\n }\n }\n } else if (posType !== -2 && result[dim] > rightOrBottom) {\n // 优先检测right\n // 位置不超出视区右界\n if (isFixedPosition) {\n result[dim] = rightOrBottom;\n } else {\n if (posType === 0) {\n // 从居中 挪至 左侧\n result[dim] -= offset + boxSize / 2;\n } else {\n // 从居右/右侧 挪至 居左/左侧\n result[dim] -= offset * 2 + boxSize;\n }\n\n if (result[dim] < leftOrTop) {\n // 位置不超出视区左界\n result[dim] = leftOrTop;\n }\n }\n }\n });\n\n return result;\n };\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return spec.parentElement as any;\n }\n\n getTooltipContainer() {\n return this._container;\n }\n\n protected _initFromSpec() {\n this._option = this._getDefaultOption();\n }\n\n reInit() {\n this._initFromSpec();\n }\n}\n","import { isArray, isValid, isValidNumber, normalizePadding } from '@visactor/vutils';\nimport type { ITooltipSpec, ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip';\nimport { calcLayoutNumber } from '../../../../util/space';\nimport type { ILayoutNumber } from '../../../../typings/layout';\nconst DEFAULT_SHAPE_SPACING = 8;\nconst DEFAULT_KEY_SPACING = 26;\nconst DEFAULT_VALUE_SPACING = 0;\n\nexport const getPixelPropertyStr = (num?: number | number[], defaultStr?: string) => {\n if (isValid(num)) {\n if (isArray(num)) {\n return num.map(n => `${n}px`).join(' ');\n }\n return `${num}px`;\n }\n return defaultStr ?? 'initial';\n};\n\nexport const getTextStyle = (style: ITooltipTextTheme = {}, textStyle: Partial = {}) => {\n if (isValid(style.fontFamily)) {\n textStyle.fontFamily = style.fontFamily;\n }\n const color = style.fill ?? style.fontColor;\n\n if (isValid(color)) {\n textStyle.color = color;\n }\n if (isValid(style.fontWeight)) {\n textStyle.fontWeight = style.fontWeight as string;\n }\n if (isValid(style.textAlign)) {\n textStyle.textAlign = style.textAlign as string;\n }\n if (isValid(style.fontSize)) {\n textStyle.fontSize = getPixelPropertyStr(style.fontSize as number);\n }\n if (isValid(style.maxWidth)) {\n textStyle.maxWidth = getPixelPropertyStr(style.maxWidth as number);\n }\n if (style.multiLine) {\n textStyle.whiteSpace = 'initial';\n textStyle.wordBreak = style.wordBreak ?? 'break-word';\n } else {\n textStyle.wordBreak = 'normal';\n textStyle.whiteSpace = 'nowrap';\n }\n\n return textStyle;\n};\n\nexport const getLineHeight = (style: ITooltipTextTheme = {}) => {\n const { lineHeight } = style;\n\n if (style.fontSize) {\n return calcLayoutNumber(lineHeight as ILayoutNumber, style.fontSize as number);\n }\n\n return 0;\n};\n\nexport const getDomStyle = (spec: ITooltipSpec = {}) => {\n const { style = {}, enterable, transitionDuration } = spec;\n const { panel = {}, titleLabel, shape, keyLabel, valueLabel, spaceRow: commonSpaceRow, align } = style;\n const { panelStyle, panelPadding } = getPanelStyle(panel);\n const rowStyle: Partial = {\n marginTop: '0px',\n marginBottom: '0px'\n };\n\n panelStyle.pointerEvents = enterable ? 'auto' : 'none';\n if (transitionDuration) {\n panelStyle.transitionDuration = transitionDuration ? `${transitionDuration}ms` : 'initial';\n panelStyle.transitionProperty = transitionDuration ? 'transform' : 'initial';\n panelStyle.transitionTimingFunction = transitionDuration ? 'ease-out' : 'initial';\n }\n\n if (isValidNumber(commonSpaceRow)) {\n rowStyle.marginBottom = `${commonSpaceRow}px`;\n }\n\n const shapeStyle: Partial = {\n // TODO 默认值优化\n width: getPixelPropertyStr(shape?.size ?? 8)\n };\n const titleStyle = getTextStyle(titleLabel);\n const keyStyle = getTextStyle(keyLabel);\n const valueStyle = getTextStyle(valueLabel);\n const marginKey = align === 'right' ? 'marginLeft' : 'marginRight';\n\n if (align === 'right') {\n // rtl\n panelStyle.direction = 'rtl';\n titleStyle.textAlign = 'right';\n keyStyle.textAlign = 'right';\n valueStyle.textAlign = 'left';\n } else {\n titleStyle.textAlign = 'left';\n keyStyle.textAlign = 'left';\n valueStyle.textAlign = 'right';\n }\n shapeStyle[marginKey] = getPixelPropertyStr(shape.spacing ?? DEFAULT_SHAPE_SPACING);\n keyStyle[marginKey] = getPixelPropertyStr(keyLabel.spacing ?? DEFAULT_KEY_SPACING);\n valueStyle[marginKey] = getPixelPropertyStr(valueLabel.spacing ?? DEFAULT_VALUE_SPACING);\n const lineHeight = Math.max(getLineHeight(valueLabel), getLineHeight(keyLabel));\n\n // 如果不设置lineHeight,会导致横向不对齐的问题\n rowStyle.lineHeight = lineHeight > 0 ? `${lineHeight}px` : '20px';\n\n return {\n panelPadding,\n row: rowStyle,\n panel: panelStyle,\n title: titleStyle,\n shape: shapeStyle,\n key: keyStyle,\n value: valueStyle\n };\n};\n\nexport const getPanelStyle = (\n style: ITooltipTheme['panel']\n): { panelStyle: Partial; panelPadding?: number[] } => {\n const { backgroundColor, border, shadow, padding } = style;\n const panelStyle: Partial = {\n borderWidth: `${border?.width ?? 0}px`\n };\n let panelPadding: number[] = null;\n\n if (border?.color) {\n panelStyle.borderColor = border.color as string;\n }\n if (backgroundColor) {\n panelStyle.backgroundColor = backgroundColor as string;\n }\n panelStyle.boxShadow = shadow\n ? `${shadow.x}px ${shadow.y}px ${shadow.blur}px ${shadow.spread}px ${shadow.color}`\n : 'initial';\n const { radius } = border ?? {};\n\n if (isValid(radius)) {\n panelStyle.borderRadius = isValidNumber(radius) ? `${radius}px` : `${radius}`;\n }\n\n if (padding) {\n panelPadding = normalizePadding(padding);\n panelStyle.padding = getPixelPropertyStr(panelPadding);\n }\n\n return { panelStyle, panelPadding };\n};\n\nexport function setStyleToDom(dom: HTMLElement, style: Partial) {\n if (!dom || !dom.style || !style) {\n return;\n }\n\n Object.keys(style).forEach(key => {\n (dom.style as any)[key] = (style as any)[key];\n });\n}\n","import { Factory } from '../../core/factory';\nimport type { IComponentPluginConstructor } from './interface';\n\nexport const registerComponentPlugin = (plugin: IComponentPluginConstructor) => {\n Factory.registerComponentPlugin(plugin.type, plugin);\n};\n","import { escapeHTML } from './common';\n// eslint-disable-next-line no-duplicate-imports\nimport type { CustomSymbolClass, IGradientColor, ILinearGradient } from '@visactor/vrender-core';\nimport { Symbol } from '@visactor/vrender-core';\nimport { Bounds, isObject, isString } from '@visactor/vutils';\nimport type { ITooltipShapeActual } from '../../../../typings';\n\nexport function getSvgHtml(option: ITooltipShapeActual | undefined, gradientId?: string) {\n if (!option || !option.hasShape || !option.shapeType) {\n return '';\n }\n\n const styleString = `style=\"display:inline-block;vertical-align:middle;\"`;\n const { shapeType, shapeFill, shapeStroke, shapeHollow = false } = option;\n const size = option.shapeSize ?? 8;\n const lineWidth = option.shapeLineWidth ? escapeHTML(option.shapeLineWidth) + 'px' : '0px';\n let fillString: string = 'currentColor';\n const getStroke = () => (shapeStroke ? escapeHTML(shapeStroke) : fillString);\n\n const sizeNumber = size;\n const createSymbol = (symbolType: string) => new Symbol({ symbolType, size: sizeNumber, fill: true });\n\n let symbol = createSymbol(shapeType);\n const parsedPath = symbol.getParsedPath();\n if (!parsedPath.path && parsedPath.pathStr) {\n symbol = createSymbol(parsedPath.pathStr);\n }\n\n let bounds;\n let path;\n if (symbol.getParsedPath().path) {\n const pathModel = symbol.getParsedPath().path;\n\n path = pathModel.toString();\n bounds = pathModel.bounds;\n } else if (parsedPath.isSvg && (parsedPath as unknown as CustomSymbolClass).svgCache) {\n path = (parsedPath as unknown as CustomSymbolClass).svgCache.map(s => s.path.toString()).join();\n bounds = (parsedPath as unknown as CustomSymbolClass).svgCache.reduce(\n (acc, cur) => acc.union(cur.path.bounds),\n new Bounds()\n );\n }\n let viewBox = `${bounds.x1} ${bounds.y1} ${bounds.width()} ${bounds.height()}`;\n\n // svg 不支持内描边,需要手动将描边空间预留在 viewBox 上\n if (lineWidth !== '0px') {\n const [x, y, w, h] = viewBox.split(' ').map(n => Number(n));\n const lw = Number(lineWidth.slice(0, -2));\n viewBox = `${x - lw / 2} ${y - lw / 2} ${w + lw} ${h + lw}`;\n }\n\n if (!shapeFill || isString(shapeFill) || shapeHollow) {\n fillString = shapeHollow ? 'none' : shapeFill ? escapeHTML(shapeFill) : 'currentColor';\n return `\n \n \n \n `;\n }\n if (isObject(shapeFill)) {\n fillString = 'gradientColor' + (gradientId ?? '');\n let gradient = '';\n const stops = ((shapeFill as IGradientColor).stops ?? [])\n .map(s => ``)\n .join('');\n if ((shapeFill as IGradientColor).gradient === 'radial') {\n gradient = `\n ${stops}\n `;\n } else if ((shapeFill as IGradientColor).gradient === 'linear') {\n gradient = `\n ${stops}\n `;\n }\n return `\n \n ${gradient}\n \n \n `;\n }\n\n return '';\n}\n","import type { ITooltipActual, ITooltipPositionActual } from '../../../typings/tooltip';\nimport { BaseTooltipHandler } from './base';\nimport { getDomStyle, getTextStyle, setStyleToDom } from './utils/style';\nimport {\n TOOLTIP_CONTAINER_EL_CLASS_NAME,\n DEFAULT_TOOLTIP_Z_INDEX,\n TOOLTIP_PREFIX,\n TOOLTIP_CONTENT_BOX_CLASS_NAME,\n TOOLTIP_TITLE_CLASS_NAME\n} from './constants';\nimport { type Maybe, isValid } from '@visactor/vutils';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { domDocument } from '../../../util/env';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport type { ILayoutPoint } from '../../../typings';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport { getSvgHtml } from './utils/svg';\nimport { formatContent } from './utils/common';\nimport { token } from '../../../theme/token';\nimport { calcLayoutNumber } from '../../../util/space';\n/**\n * The tooltip handler class.\n */\nexport class DomTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.dom;\n readonly type = TooltipHandlerType.dom;\n\n protected _tooltipContainer = domDocument?.body;\n protected _domStyle: {\n panelPadding?: number[];\n panel: Partial;\n row: Partial;\n title: Partial;\n shape: Partial;\n key: Partial;\n value: Partial;\n };\n protected _rootDom?: HTMLElement;\n protected _tooltipActual?: ITooltipActual;\n protected declare _container: Maybe;\n\n /** 自定义 tooltip 的位置缓存 */\n protected _cacheCustomTooltipPosition: ILayoutPoint;\n\n getVisibility() {\n return this._rootDom ? this._rootDom.style.visibility === 'visible' : false;\n }\n\n setVisibility(_value: boolean) {\n // 这里做个节流\n if (_value !== this.getVisibility() && this._rootDom) {\n this._rootDom.style.visibility = _value ? 'visible' : 'hidden';\n }\n }\n\n constructor() {\n super(DomTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n this._initStyle();\n this.initEl();\n }\n\n initEl() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const parentElement = tooltipSpec.parentElement as HTMLElement | HTMLCanvasElement;\n if (domDocument && parentElement && parentElement.children && parentElement.children.length) {\n for (let i = 0; i < parentElement.children.length; i++) {\n if (parentElement.children[i].classList.contains(TOOLTIP_CONTAINER_EL_CLASS_NAME)) {\n this._container = parentElement.children[i] as HTMLDivElement;\n break;\n }\n }\n if (!this._container) {\n this._container = domDocument.createElement('div');\n this._container.style.position = 'relative';\n this._container.style.zIndex = DEFAULT_TOOLTIP_Z_INDEX;\n this._container.classList.add(TOOLTIP_CONTAINER_EL_CLASS_NAME);\n parentElement.appendChild(this._container);\n }\n }\n }\n\n initRootDom() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const tooltipElement = document.createElement('div');\n const globalTheme = this._chartOption?.getTheme() ?? {};\n\n setStyleToDom(tooltipElement, {\n left: '0',\n top: '0',\n pointerEvents: 'none',\n padding: '12px',\n position: 'absolute',\n zIndex: DEFAULT_TOOLTIP_Z_INDEX,\n fontFamily: (globalTheme?.fontFamily ?? token.fontFamily) as string,\n fontSize: '11px',\n borderRadius: '3px',\n borderStyle: 'solid',\n lineHeight: 'initial',\n background: '#fff',\n boxShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',\n maxWidth: '100wh',\n maxHeight: '100vh',\n visibility: 'hidden',\n ...this._domStyle.panel\n } as CSSStyleDeclaration);\n tooltipElement.classList.add(tooltipSpec.className);\n tooltipElement.setAttribute('vchart-tooltip-id', `${this.id}`);\n this._container.appendChild(tooltipElement);\n this._rootDom = tooltipElement;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!this._rootDom) {\n this.initRootDom();\n }\n if (!changePositionOnly) {\n this._updateDomStringByCol(actualTooltip);\n }\n\n this._updateDomStyle('height');\n\n const rect = this._rootDom?.getBoundingClientRect();\n\n return {\n width: rect?.width,\n height: rect?.height\n };\n }\n\n protected _removeTooltip() {\n if (this._rootDom && this._rootDom.parentNode) {\n this._rootDom.parentNode.removeChild(this._rootDom);\n this._rootDom = null;\n }\n this._container = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n if (!visible || !this._rootDom) {\n this.setVisibility(visible);\n this._cacheCustomTooltipPosition = undefined;\n } else {\n const { tooltipSpec, activeTooltipSpec } = params;\n\n if (!params.changePositionOnly) {\n this._tooltipActual = activeTooltipSpec;\n }\n const currentVisible = this.getVisibility();\n\n // 位置\n const el = this._rootDom;\n if (el) {\n const { x = 0, y = 0 } = activeTooltipSpec.position ?? {};\n if (tooltipSpec.updateElement) {\n // 此处先设定一次位置,防止页面暂时出现滚动条(优先设置上次的位置)\n this._updatePosition(this._cacheCustomTooltipPosition ?? { x, y });\n // 更新 tooltip dom\n tooltipSpec.updateElement(el, activeTooltipSpec, params);\n // 重新计算 tooltip 位置\n const position = this._getActualTooltipPosition(activeTooltipSpec, params, {\n width: el.offsetWidth,\n height: el.offsetHeight\n });\n // 更新位置\n this._updatePosition(position);\n // 更新缓存\n this._cacheCustomTooltipPosition = position;\n } else {\n if (!currentVisible) {\n // 当从隐藏切换到显示的时候,需要先设置一次 transition 为 0ms,防止出现从一个非常远的初始位置进行动画\n this._rootDom.style.transitionDuration = '0ms';\n } else {\n this._rootDom.style.transitionDuration = this._domStyle.panel.transitionDuration ?? 'initial';\n }\n this._updatePosition({ x, y });\n }\n }\n this.setVisibility(visible);\n }\n }\n\n protected _initStyle() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n\n this._domStyle = getDomStyle(tooltipSpec);\n }\n\n protected _updateDomStringByCol(actualTooltip?: ITooltipActual) {\n const { title = {}, content } = actualTooltip;\n const hasContent = content && content.length;\n const rowStyle = this._domStyle.row;\n const chilren = [...(this._rootDom.children as any)] as HTMLElement[];\n let titleDom = chilren.find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n\n if (!titleDom && title.visible !== false) {\n titleDom = document.createElement('h2');\n const span = document.createElement('span');\n titleDom.appendChild(span);\n\n titleDom.classList.add(TOOLTIP_TITLE_CLASS_NAME);\n this._rootDom.appendChild(titleDom);\n }\n\n if (titleDom && title.visible !== false) {\n setStyleToDom(titleDom, {\n ...this._domStyle.title,\n ...(hasContent ? rowStyle : { marginBottom: '0px' }),\n marginTop: '0px'\n });\n (titleDom.firstChild as HTMLElement).innerHTML = `${title.value ?? ''}`;\n } else if (titleDom && title.visible === false) {\n titleDom.parentNode.removeChild(titleDom);\n }\n\n let contentDom = chilren.find(child => child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME));\n const columns = ['shape', 'key', 'value'];\n\n if (!contentDom && hasContent) {\n contentDom = document.createElement('div');\n\n columns.forEach(col => {\n const colDiv = document.createElement('div');\n\n colDiv.classList.add(`${TOOLTIP_PREFIX}-column`);\n colDiv.classList.add(`${TOOLTIP_PREFIX}-${col}-column`);\n colDiv.setAttribute('data-col', col);\n contentDom.appendChild(colDiv);\n });\n\n contentDom.classList.add(TOOLTIP_CONTENT_BOX_CLASS_NAME);\n this._rootDom.appendChild(contentDom);\n }\n\n if (contentDom && hasContent) {\n const columnDivs = [...(contentDom.children as any)] as HTMLElement[];\n setStyleToDom(contentDom, { whiteSpace: 'nowrap' });\n\n columnDivs.forEach((colDiv, index) => {\n const colName = colDiv.getAttribute('data-col');\n\n if (colName && columns.includes(colName)) {\n const hideColumn = colName === 'shape' && content.every(c => !c.hasShape || !c.shapeType);\n\n setStyleToDom(colDiv, {\n ...(this._domStyle as any)[colName],\n display: hideColumn ? 'none' : 'inline-block',\n verticalAlign: 'top'\n });\n const rows = [...(colDiv.children as any)] as HTMLElement[];\n\n // 删除多余的行\n rows.slice(content.length).forEach(extraRow => {\n extraRow.parentNode.removeChild(extraRow);\n });\n\n content.forEach((entry, index) => {\n let row = rows[index];\n\n if (!row) {\n row = document.createElement('div');\n row.classList.add(`${TOOLTIP_PREFIX}-${colName}`);\n colDiv.appendChild(row);\n }\n const styleByRow = {\n ...rowStyle\n };\n\n if (index === content.length - 1) {\n styleByRow.marginBottom = '0px';\n }\n\n styleByRow.display = entry.visible === false ? 'none' : 'block';\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n styleByRow.height = 'initial';\n\n if (colName === 'key') {\n row.innerHTML = formatContent(entry.key);\n if (entry.keyStyle) {\n getTextStyle(entry.keyStyle, styleByRow);\n }\n } else if (colName === 'value') {\n row.innerHTML = formatContent(entry.value);\n if (entry.valueStyle) {\n getTextStyle(entry.valueStyle, styleByRow);\n }\n } else if (colName === 'shape') {\n row.innerHTML = getSvgHtml(entry, `${this.id}_${index}`);\n }\n\n setStyleToDom(row, styleByRow);\n });\n }\n });\n } else if (contentDom && !hasContent) {\n contentDom.parentNode.removeChild(contentDom);\n }\n }\n protected _updateDomStyle(sizeKey: 'width' | 'height' = 'width') {\n const rootDom = this._rootDom;\n\n const contentDom = [...(rootDom.children as any)].find(child =>\n child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME)\n );\n\n if (contentDom) {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const contentStyle: Partial = {};\n\n if (isValid(tooltipSpec?.style?.maxContentHeight)) {\n const titleDom = rootDom.children[0];\n const titleHeight =\n titleDom && titleDom.className.includes(TOOLTIP_TITLE_CLASS_NAME)\n ? titleDom.getBoundingClientRect().height + (tooltipSpec.style.spaceRow ?? 0)\n : 0;\n const viewRect = (this._chartOption as any).getChartViewRect();\n const maxHeight = calcLayoutNumber(\n tooltipSpec.style.maxContentHeight,\n Math.min(viewRect.height, document.body.clientHeight) -\n titleHeight -\n (this._domStyle.panelPadding ? this._domStyle.panelPadding[0] + this._domStyle.panelPadding[1] : 0)\n );\n\n if (maxHeight > 0) {\n contentStyle.maxHeight = `${maxHeight}px`;\n contentStyle.overflowY = 'auto';\n // todo 让内容宽度往外阔一点,给滚动条留出位置\n contentStyle.width = `calc(100% + ${\n this._domStyle.panelPadding ? this._domStyle.panelPadding[1] + 'px' : '10px'\n })`;\n\n setStyleToDom(contentDom as HTMLElement, contentStyle);\n }\n }\n\n const rows = contentDom.children;\n const widthByCol: number[] = [];\n if (rows) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n const width = cols[j].getBoundingClientRect()[sizeKey];\n if (widthByCol[j] === undefined || widthByCol[j] < width) {\n widthByCol[j] = width;\n }\n }\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n (cols[j] as HTMLElement).style[sizeKey] = `${widthByCol[j]}px`;\n }\n }\n }\n }\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return this._container ?? super._getParentElement(spec);\n }\n\n isTooltipShown() {\n return this.getVisibility();\n }\n\n reInit() {\n super.reInit();\n this._initStyle();\n if (this._rootDom) {\n setStyleToDom(this._rootDom, this._domStyle.panel);\n }\n\n if (this.getVisibility()) {\n this._updateDomStringByCol(this._tooltipActual);\n this._updateDomStyle('height');\n }\n }\n\n protected _updatePosition({ x, y }: ITooltipPositionActual) {\n if (this._rootDom) {\n // translate3d 性能较好:https://stackoverflow.com/questions/22111256/translate3d-vs-translate-performance\n this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n }\n}\n\nexport const registerDomTooltipHandler = () => {\n registerComponentPlugin(DomTooltipHandler);\n};\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IRichTextGraphicAttribute } from '@visactor/vrender-core';\nimport type { TooltipRowAttrs, TooltipRowStyleAttrs, TooltipTextAttrs, TooltipRichTextAttrs } from './type';\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\n\nexport const mergeRowAttrs = (\n target: TooltipRowAttrs | TooltipRowStyleAttrs,\n ...sources: (TooltipRowAttrs | TooltipRowStyleAttrs)[]\n): TooltipRowAttrs | TooltipRowStyleAttrs => {\n const shapeList = [target.shape, ...sources.map(s => s?.shape)];\n const keyList = [target.key, ...sources.map(s => s?.key)];\n const valueList = [target.value, ...sources.map(s => s?.value)];\n\n return merge(target, ...sources, {\n shape: shapeList.every(isNil) ? undefined : merge({}, ...shapeList),\n key: keyList.every(isNil) ? undefined : merge({}, ...keyList),\n value: valueList.every(isNil) ? undefined : merge({}, ...valueList)\n }) as TooltipRowAttrs | TooltipRowStyleAttrs;\n};\n\nexport const getRichTextAttribute = (attr: TooltipTextAttrs): IRichTextGraphicAttribute => {\n const { width, height, wordBreak = 'break-word', textAlign, textBaseline, text } = attr;\n if (Array.isArray(text)) {\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: array(text as string[]).map(\n text =>\n ({\n ...attr,\n text\n } as any)\n )\n };\n }\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: (text as TooltipRichTextAttrs)?.text as IRichTextCharacter[]\n };\n};\n","import { AABBBounds } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY } from '../constant';\nimport { TooltipAttributes } from './type';\n\nexport const defaultAttributes: Partial = {\n panel: {\n visible: true,\n cornerRadius: [3, 3, 3, 3],\n fill: 'white',\n shadow: true,\n shadowBlur: 12,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowSpread: 0,\n stroke: 'white'\n },\n titleStyle: {\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 14,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n spaceRow: 6\n },\n contentStyle: {\n shape: {\n fill: 'black',\n size: 8,\n symbolType: 'circle',\n spacing: 6\n },\n key: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle',\n spacing: 26\n },\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'right',\n textBaseline: 'middle',\n spacing: 0\n },\n spaceRow: 6\n },\n padding: 10,\n positionX: 'right',\n positionY: 'bottom',\n offsetX: 10,\n offsetY: 10,\n parentBounds: new AABBBounds().setValue(\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY\n ),\n autoCalculatePosition: true,\n autoMeasure: true,\n\n pickable: false,\n childrenPickable: false,\n zIndex: 500\n};\n\nexport const TOOLTIP_POSITION_ATTRIBUTES = [\n 'pointerX',\n 'pointerY',\n 'offsetX',\n 'offsetY',\n 'positionX',\n 'positionY',\n 'parentBounds'\n];\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTooltipComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type {\n IGroup,\n IText,\n IRichText,\n IRect,\n ISymbol,\n ITextGraphicAttribute,\n TextAlignType\n} from '@visactor/vrender-core';\nimport { builtinSymbolsMap, calculateLineHeight } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { alignTextInLine, initTextMeasure } from '../util/text';\nimport { isVisible } from '../util';\nimport type { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs, TooltipRichTextAttrs } from './type';\nimport { getRichTextAttribute, mergeRowAttrs } from './util';\nimport { defaultAttributes, TOOLTIP_POSITION_ATTRIBUTES } from './config';\nimport type { ComponentOptions } from '../interface';\nimport type { TextMeasureInput } from '@visactor/vutils';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTooltipComponent } from './register';\n\nconst TOOLTIP_BACKGROUND_NAME = 'tooltip-background';\nconst TOOLTIP_TITLE_NAME = 'tooltip-title';\nconst TOOLTIP_CONTENT_NAME = 'tooltip-content';\n\nconst TOOLTIP_SHAPE_NAME_SUFFIX = 'shape';\nconst TOOLTIP_KEY_NAME_SUFFIX = 'key';\nconst TOOLTIP_VALUE_NAME_SUFFIX = 'value';\n\nloadTooltipComponent();\nexport class Tooltip extends AbstractComponent> {\n name = 'tooltip';\n\n // tooltip 背景\n private _tooltipPanel!: IRect;\n // tooltip title 容器\n private _tooltipTitleContainer!: IGroup;\n // tooltip title shape\n private _tooltipTitleSymbol!: ISymbol;\n // tooltip title 文本\n private _tooltipTitle!: IText | IRichText;\n // tooltip 内容项容器\n private _tooltipContent!: IGroup;\n\n static defaultAttributes: Partial = defaultAttributes;\n\n constructor(attributes: TooltipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tooltip.defaultAttributes, attributes), options);\n }\n\n protected render() {\n const {\n visible,\n content,\n panel,\n keyWidth,\n valueWidth,\n hasContentShape,\n autoCalculatePosition,\n autoMeasure,\n align\n } = this.attribute;\n\n if (!visible) {\n this.hideAll();\n return;\n }\n\n if (autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n if (autoCalculatePosition) {\n Tooltip.calculateTooltipPosition(this.attribute);\n }\n\n const padding = normalizePadding(this.attribute.padding);\n\n // 创建背景层\n this._tooltipPanel = this.createOrUpdateChild(\n TOOLTIP_BACKGROUND_NAME,\n {\n visible: true,\n ...panel\n },\n 'rect'\n ) as IRect;\n\n // 创建标题层\n this._tooltipTitleContainer = this.createOrUpdateChild(\n TOOLTIP_TITLE_NAME,\n { visible: true, x: padding[3], y: padding[0] },\n 'group'\n ) as IGroup;\n\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(this.attribute);\n\n // 创建标题 shape\n // 创建 symbol\n this._tooltipTitleSymbol = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n merge({ symbolType: 'circle' }, titleAttr.shape, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.shape)\n }),\n 'symbol'\n ) as ISymbol;\n\n // 文本\n if (\n typeof titleAttr.value.text === 'object' &&\n titleAttr.value.text !== null &&\n ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (titleAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'html') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (titleAttr.value.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...titleAttr.value\n },\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: [],\n ...(titleAttr.value as any)\n },\n 'richtext'\n ) as IRichText;\n }\n } else if (titleAttr.value.multiLine) {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n text: (titleAttr.value.text ?? '') as any,\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...titleAttr.value\n },\n 'text'\n ) as IText;\n }\n\n // 调整标题的位置\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\n const { textAlign, textBaseline } = titleAttr.value;\n const contentWidth = panel.width - padding[3] - padding[0] - titlePaddingLeft;\n if (textAlign === 'center') {\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth);\n } else {\n // 默认左对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft);\n }\n if (textBaseline === 'bottom') {\n this._tooltipTitle.setAttribute('y', titleAttr.height);\n } else if (textBaseline === 'middle') {\n this._tooltipTitle.setAttribute('y', titleAttr.height / 2);\n } else {\n this._tooltipTitle.setAttribute('y', 0);\n }\n const titleHeight = isVisible(titleAttr) ? titleAttr.height + titleAttr.spaceRow : 0;\n\n // 创建内容层\n this._tooltipContent = this.createOrUpdateChild(TOOLTIP_CONTENT_NAME, { visible: true }, 'group') as IGroup;\n this._tooltipContent.removeAllChild(true); // 清空内容区\n\n if (content && content.length) {\n this._tooltipContent.setAttribute('x', padding[3]);\n this._tooltipContent.setAttribute('y', padding[0] + titleHeight);\n\n let lastYPos = 0;\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(this.attribute, i);\n\n if (!isVisible(itemAttr)) {\n return;\n }\n\n const itemGroupName = `${TOOLTIP_CONTENT_NAME}-${i}`;\n const itemGroup = this._tooltipContent.createOrUpdateChild(\n itemGroupName,\n { visible: true, x: 0, y: lastYPos },\n 'group'\n ) as IGroup;\n\n const shapeOffsetWidth = itemAttr.shape.size + itemAttr.shape.spacing;\n let x =\n align === 'right'\n ? (hasContentShape ? shapeOffsetWidth : 0) +\n (isVisible(itemAttr.key) ? keyWidth + itemAttr.key.spacing : 0) +\n (isVisible(itemAttr.value) ? valueWidth : 0)\n : 0;\n\n this._createShape(\n align === 'right' ? x - itemAttr.shape.size / 2 : x + itemAttr.shape.size / 2,\n itemAttr,\n itemGroup,\n itemGroupName\n );\n if (hasContentShape) {\n if (align === 'right') {\n x -= shapeOffsetWidth;\n } else {\n x += shapeOffsetWidth;\n }\n }\n\n const keyGraphic = this._createKey(itemAttr, itemGroup, itemGroupName);\n\n if (keyGraphic) {\n alignTextInLine(align, keyGraphic, itemAttr.key.textAlign, x, keyWidth);\n keyGraphic.setAttribute('y', 0);\n if (align === 'right') {\n x -= keyWidth + itemAttr.key.spacing;\n } else {\n x += keyWidth + itemAttr.key.spacing;\n }\n }\n const valueGraphic = this._createValue(itemAttr, itemGroup, itemGroupName);\n if (valueGraphic) {\n let textAlign: TextAlignType = 'right';\n\n if (isValid(itemAttr.value.textAlign)) {\n textAlign = itemAttr.value.textAlign;\n } else if (!isVisible(itemAttr.key) && align !== 'right') {\n textAlign = 'left';\n }\n valueGraphic.setAttribute('textAlign', textAlign);\n alignTextInLine(align, valueGraphic, textAlign, x, valueWidth);\n valueGraphic.setAttribute('y', 0);\n }\n\n lastYPos += itemAttr.height + itemAttr.spaceRow;\n });\n }\n }\n\n protected _createShape(\n x: number,\n itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs,\n itemGroup: IGroup,\n itemGroupName: string\n ) {\n if (isVisible(itemAttr.shape)) {\n // 存在 symbol\n return itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n {\n visible: true,\n x: x,\n y:\n itemAttr.shape.size / 2 +\n ((calculateLineHeight(itemAttr.key.lineHeight, itemAttr.key.fontSize) ?? itemAttr.key.fontSize) -\n itemAttr.shape.size) /\n 2,\n ...itemAttr.shape\n },\n 'symbol'\n ) as ISymbol;\n }\n\n return;\n }\n\n protected _createKey(itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs, itemGroup: IGroup, itemGroupName: string) {\n if (isVisible(itemAttr.key)) {\n let element: IRichText | IText;\n if (itemAttr.key.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.key.text === 'object' &&\n itemAttr.key.text !== null &&\n ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.key.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.key.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...itemAttr.key\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.key.text ?? '') as any,\n ...itemAttr.key,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n return element;\n }\n return;\n }\n\n protected _createValue(itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs, itemGroup: IGroup, itemGroupName: string) {\n if (isVisible(itemAttr.value)) {\n let element: IRichText | IText;\n if (itemAttr.value.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.value.text === 'object' &&\n itemAttr.value.text !== null &&\n ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.value.text as TooltipRichTextAttrs).text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...itemAttr.value\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.value.text ?? '') as any,\n ...itemAttr.value,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n return element;\n }\n\n return;\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof TooltipAttributes)[];\n // 优化:只更改 tooltip 位置\n if (this.attribute.autoCalculatePosition && keys.every(key => TOOLTIP_POSITION_ATTRIBUTES.includes(key))) {\n this._mergeAttributes(params, keys);\n // 计算 x y\n if (isNil(this.attribute.panel.width) && this.attribute.autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n Tooltip.calculateTooltipPosition(this.attribute);\n // 应用 x y\n super.setAttributes(\n {\n x: this.attribute.x,\n y: this.attribute.y\n },\n forceUpdateTag\n );\n } else {\n super.setAttributes(params, forceUpdateTag);\n }\n }\n\n static calculateTooltipPosition(attribute: Partial): Partial {\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = attribute.panel;\n\n const { offsetX, offsetY, pointerX, pointerY, positionX, positionY, parentBounds } = attribute;\n\n let x = pointerX;\n let y = pointerY;\n if (positionX === 'left') {\n x -= tooltipBoxWidth + offsetX;\n } else if (positionX === 'center') {\n x -= tooltipBoxWidth / 2;\n } else {\n x += offsetX;\n }\n if (positionY === 'top') {\n y -= tooltipBoxHeight + offsetY;\n } else if (positionY === 'middle') {\n y -= tooltipBoxHeight / 2;\n } else {\n y += offsetY;\n }\n\n /* 确保tooltip在视区内 */\n if (x + tooltipBoxWidth > parentBounds.x2) {\n // 位置不超出视区右界\n x -= tooltipBoxWidth + offsetX;\n }\n if (y + tooltipBoxHeight > parentBounds.y2) {\n // 位置不超出视区下界\n y -= tooltipBoxHeight + offsetY;\n }\n if (x < parentBounds.x1) {\n // 位置不超出视区左界\n x = parentBounds.x1;\n }\n if (y < parentBounds.y1) {\n // 位置不超出视区上界\n y = parentBounds.y1;\n }\n\n attribute.x = x;\n attribute.y = y;\n\n return attribute;\n }\n\n static measureTooltip(attribute: Partial): Partial {\n const { content, contentStyle } = attribute;\n const padding = normalizePadding(attribute.padding);\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(attribute);\n\n let maxWidth = 0;\n let containerHeight = padding[0] + padding[2];\n\n // calculate title\n let titleMaxHeight = 0;\n const { value: titleValue, shape: titleShape } = titleAttr;\n const { visible: titleHasShape = false, symbolType: titleShapeType = '' } = titleShape ?? {};\n\n if (isValid(titleValue) && typeof titleAttr.value.text !== 'object') {\n const { width, height } = initTextMeasure(titleValue as Partial).quickMeasure(\n titleValue.text as TextMeasureInput\n );\n maxWidth = width;\n titleMaxHeight = height;\n }\n if (titleHasShape && builtinSymbolsMap[titleShapeType]) {\n maxWidth += titleShape.size + titleShape.spacing;\n titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);\n }\n\n if (attribute.title) {\n attribute.title.width = maxWidth;\n attribute.title.height = titleMaxHeight;\n }\n\n if (isVisible(titleAttr)) {\n containerHeight += titleMaxHeight + titleAttr.spaceRow;\n }\n\n // calculate content\n if (content && content.length) {\n // filter content\n const filteredContent: [TooltipRowAttrs, TooltipRowAttrs][] = [];\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(attribute, i);\n if ((item.key || item.value) && isVisible(itemAttr)) {\n filteredContent.push([item, itemAttr]);\n }\n });\n\n if (filteredContent.length) {\n let hasContentShape = false;\n const shapeWidths: number[] = [];\n const keyWidths: number[] = [];\n const valueWidths: number[] = [];\n\n filteredContent.forEach(([item, itemAttr], i) => {\n const { key, value, shape, spaceRow } = itemAttr;\n const itemHasShape = isVisible(shape);\n const itemShapeType = shape?.symbolType ?? '';\n\n const keyTextMeasure = initTextMeasure(key as Partial);\n const valueTextMeasure = initTextMeasure(value as Partial);\n\n let itemHeight = 0;\n if (isVisible(key)) {\n const { width, height } = keyTextMeasure.quickMeasure(key.text as TextMeasureInput);\n keyWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (isVisible(value)) {\n const { width, height } = valueTextMeasure.quickMeasure(value.text as TextMeasureInput);\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (itemHasShape && builtinSymbolsMap[itemShapeType]) {\n hasContentShape = true;\n shapeWidths.push(shape.size);\n itemHeight = Math.max(shape.size, itemHeight);\n }\n\n item.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += spaceRow ?? contentStyle.spaceRow;\n }\n });\n\n const maxShapeWidth = shapeWidths.length ? Math.max(...shapeWidths) : 0; // shape 需要对齐\n const maxKeyWidth = keyWidths.length ? Math.max(...keyWidths) : 0; // name 需要对齐\n const maxValueWidth = valueWidths.length ? Math.max(...valueWidths) : 0; // value 需要对齐\n maxWidth = Math.max(\n maxKeyWidth +\n maxValueWidth +\n contentStyle.key.spacing +\n contentStyle.value.spacing +\n (hasContentShape ? maxShapeWidth + contentStyle.shape.spacing : 0),\n maxWidth\n );\n content.forEach(item => {\n item.width = maxWidth;\n });\n attribute.hasContentShape = hasContentShape;\n attribute.keyWidth = maxKeyWidth;\n attribute.valueWidth = maxValueWidth;\n }\n }\n\n attribute.panel.width = maxWidth + padding[1] + padding[3];\n attribute.panel.height = containerHeight;\n\n return attribute;\n }\n\n static getTitleAttr(attribute: Partial): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs(\n {},\n Tooltip.defaultAttributes.titleStyle,\n Tooltip.defaultAttributes.title,\n attribute.titleStyle,\n attribute.title\n );\n }\n\n static getContentAttr(attribute: Partial, index: number): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs({}, Tooltip.defaultAttributes.contentStyle, attribute.contentStyle, attribute.content[index]);\n }\n}\n","import type {\n TooltipPanelAttrs,\n TooltipRowAttrs,\n TooltipRowStyleAttrs,\n TooltipSymbolAttrs,\n TooltipTextAttrs,\n TooltipRichTextAttrs\n} from '@visactor/vrender-components';\nimport type { IPadding, ITooltipActual, MaybeArray } from '../../../../typings';\nimport type { ITooltipAttributes, ITooltipTextStyle } from '../interface';\nimport { isValid, maxInArray, normalizePadding } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { normalizeLayoutPaddingSpec } from '../../../../util/space';\nimport type { ITheme } from '../../../../theme';\nimport type { ITooltipSpec, ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip';\nimport { token } from '../../../../theme/token';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRichTextBounds } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter, IRichTextParagraphCharacter } from '@visactor/vrender-core';\n\nconst DEFAULT_TEXT_ATTRIBUTES: Partial = {\n fontFamily: token.fontFamily,\n spacing: 10,\n wordBreak: 'break-word'\n};\n\ninterface ITooltipTextInfo {\n width: number;\n height: number;\n text: MaybeArray | MaybeArray | TooltipRichTextAttrs;\n}\n\n/** 测量 tooltip 标签文本 */\nexport const measureTooltipText = (text: string | TooltipRichTextAttrs, style: ITooltipTextStyle): ITooltipTextInfo => {\n let textLines: string[] | TooltipRichTextAttrs;\n let textConfig: IRichTextCharacter[];\n if (!((text as TooltipRichTextAttrs)?.type === 'rich' || (text as TooltipRichTextAttrs)?.type === 'html')) {\n text = (text ?? '').toString();\n if (style.multiLine) {\n textLines = text.split('\\n');\n textLines = textLines.map((line, i) => (i < (textLines as string[]).length - 1 ? line + '\\n' : line));\n } else {\n textLines = [text];\n }\n textConfig = textLines.map(\n line =>\n ({\n ...style,\n text: line\n } as unknown as IRichTextParagraphCharacter)\n );\n } else {\n textConfig = (text as TooltipRichTextAttrs).text as IRichTextCharacter[];\n textLines = text as TooltipRichTextAttrs;\n }\n\n const bound = getRichTextBounds({\n wordBreak: (style as any).wordBreak ?? 'break-word',\n maxWidth: style.maxWidth ? style.maxWidth : undefined,\n width: 0,\n height: 0,\n textConfig: textConfig\n });\n return {\n width: bound.width(),\n height: bound.height(),\n text: textLines\n };\n};\n\nexport function getTextAttributes(\n style: ITooltipTextTheme = {},\n globalTheme?: ITheme,\n defaultAttributes?: Partial\n): ITooltipTextStyle {\n const attrs: ITooltipTextStyle = {\n ...(defaultAttributes ?? DEFAULT_TEXT_ATTRIBUTES),\n fill: (style.fill ?? style.fontColor) as string,\n textAlign: style.textAlign,\n textBaseline: style.textBaseline,\n fontFamily: style.fontFamily ?? (globalTheme?.fontFamily as string),\n fontSize: style.fontSize as number,\n fontWeight: style.fontWeight,\n lineHeight: style.lineHeight as number,\n spacing: style.spacing,\n multiLine: style.multiLine,\n maxWidth: style.maxWidth,\n wordBreak: style.wordBreak,\n autoWidth: style.autoWidth\n };\n return attrs;\n}\n\nexport const getPanelAttributes = (style: ITooltipTheme['panel']): TooltipPanelAttrs => {\n const { backgroundColor, border, shadow } = style;\n const panelAttrs: TooltipPanelAttrs = {\n lineWidth: border?.width ?? 0,\n shadow: !!shadow\n };\n if (border?.color) {\n panelAttrs.stroke = border.color as string;\n }\n if (backgroundColor) {\n panelAttrs.fill = backgroundColor as string;\n }\n if (shadow) {\n panelAttrs.shadowColor = shadow.color as string;\n panelAttrs.shadowBlur = shadow.blur;\n panelAttrs.shadowOffsetX = shadow.x;\n panelAttrs.shadowOffsetY = shadow.y;\n panelAttrs.shadowSpread = shadow.spread;\n }\n const { radius } = border ?? {};\n if (isValid(radius)) {\n panelAttrs.cornerRadius = [radius, radius, radius, radius];\n }\n return panelAttrs;\n};\n\nexport const getTooltipAttributes = (\n actualTooltip: ITooltipActual,\n spec: ITooltipSpec,\n globalTheme: ITheme\n): ITooltipAttributes => {\n const { style = {}, enterable, transitionDuration } = spec;\n const { panel = {}, titleLabel, shape, keyLabel, valueLabel, spaceRow: commonSpaceRow, align } = style;\n const padding = normalizePadding(panel.padding);\n const paddingSpec = normalizeLayoutPaddingSpec(panel.padding) as IPadding;\n\n const titleStyle = getTextAttributes(\n {\n textAlign: align === 'right' ? 'right' : 'left',\n ...titleLabel\n },\n globalTheme\n );\n const keyStyle = getTextAttributes(\n {\n textAlign: align === 'right' ? 'right' : 'left',\n ...keyLabel\n },\n globalTheme\n );\n const valueStyle = getTextAttributes(valueLabel, globalTheme);\n const shapeStyle: TooltipRowStyleAttrs['shape'] = {\n fill: true,\n size: shape?.size ?? 8,\n spacing: shape?.spacing ?? 6\n };\n\n const attributes: ITooltipAttributes = {\n panel: getPanelAttributes(panel),\n padding,\n\n title: {},\n content: [],\n\n titleStyle: {\n value: titleStyle,\n spaceRow: commonSpaceRow\n },\n contentStyle: {\n shape: shapeStyle,\n key: keyStyle,\n value: valueStyle,\n spaceRow: commonSpaceRow\n },\n hasContentShape: false,\n keyWidth: 0,\n valueWidth: 0,\n\n enterable,\n transitionDuration,\n align\n };\n\n const { title = {}, content = [] } = actualTooltip;\n\n let panelWidth = paddingSpec.left + paddingSpec.right;\n let panelHeight = paddingSpec.top + paddingSpec.bottom;\n\n // calculate content\n let contentMaxWidth = 0;\n\n const hasContent = !!content.length;\n let maxKeyWidth = 0;\n let maxAdaptiveKeyWidth = 0;\n let maxValueWidth = 0;\n let maxShapeWidth = 0;\n\n if (hasContent) {\n const keyWidths: number[] = [];\n const adaptiveKeyWidths: number[] = [];\n const valueWidths: number[] = [];\n const shapeWidths: number[] = [];\n\n let contentHeight = 0;\n attributes.content = content.map((item, i) => {\n let itemHeight = 0;\n const {\n hasShape: actualHasShape,\n key: actualKey,\n shapeType: actualShapeType = '',\n shapeFill: actualShapeFill,\n shapeStroke: actualShapeStroke,\n shapeLineWidth: actualShapeLineWidth,\n shapeSize: actualShapeSize,\n value: actualValue,\n isKeyAdaptive: actualIsKeyAdaptive,\n spaceRow: actualSpaceRow,\n keyStyle: actualKeyStyle,\n valueStyle: actualValueStyle,\n shapeHollow: actualShapeHollow\n } = item;\n const itemAttrs: TooltipRowAttrs = { height: 0, spaceRow: actualSpaceRow ?? commonSpaceRow };\n if (isValid(actualKey)) {\n const itemKeyStyle: ITooltipTextStyle = mergeSpec(\n {},\n keyStyle,\n getTextAttributes(actualKeyStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualKey, itemKeyStyle);\n itemAttrs.key = {\n width,\n height,\n ...itemKeyStyle,\n text\n };\n if (!actualIsKeyAdaptive) {\n keyWidths.push(width);\n } else {\n adaptiveKeyWidths.push(width);\n }\n itemHeight = Math.max(itemHeight, height);\n }\n if (isValid(actualValue)) {\n const itemValueStyle: ITooltipTextStyle = mergeSpec(\n {},\n valueStyle,\n getTextAttributes(actualValueStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualValue, itemValueStyle);\n itemAttrs.value = {\n width,\n height,\n ...itemValueStyle,\n text\n };\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (actualHasShape) {\n const shape: TooltipSymbolAttrs = {\n visible: true,\n symbolType: actualShapeType\n };\n if (actualShapeHollow) {\n shape.stroke = actualShapeFill;\n } else {\n shape.fill = actualShapeFill;\n }\n shape.stroke = actualShapeStroke ?? actualShapeFill;\n shape.lineWidth = actualShapeLineWidth;\n itemAttrs.shape = shape;\n\n const shapeWidth = actualShapeSize ?? shapeStyle.size;\n itemHeight = Math.max(shapeWidth, itemHeight);\n shapeWidths.push(shapeWidth);\n } else {\n itemAttrs.shape = { visible: false };\n }\n\n itemAttrs.height = itemHeight;\n contentHeight += itemHeight;\n if (i < content.length - 1) {\n contentHeight += itemAttrs.spaceRow;\n }\n\n return itemAttrs;\n });\n panelHeight += contentHeight;\n\n maxKeyWidth = keyWidths.length ? maxInArray(keyWidths) : 0; // name 需要对齐\n maxAdaptiveKeyWidth = adaptiveKeyWidths.length ? maxInArray(adaptiveKeyWidths) : 0;\n maxValueWidth = valueWidths.length ? maxInArray(valueWidths) : 0; // value 需要对齐\n maxShapeWidth = shapeWidths.length ? maxInArray(shapeWidths) + shapeStyle.spacing : 0; // shape 列宽度\n contentMaxWidth = Math.max(\n maxShapeWidth + maxKeyWidth + keyStyle.spacing + maxValueWidth + valueStyle.spacing,\n maxShapeWidth + maxAdaptiveKeyWidth,\n contentMaxWidth\n );\n attributes.hasContentShape = !!shapeWidths.length;\n attributes.keyWidth = maxKeyWidth;\n attributes.valueWidth = maxValueWidth;\n }\n\n // calculate title\n let titleMaxWidth = 0;\n let titleMaxHeight = 0;\n let titleHeightWithSpace = 0;\n const {\n visible: actualTitleVisible = true,\n value: actualTitleValue = '',\n valueStyle: actualTitleValueStyle,\n spaceRow: actualTitleSpaceRow\n } = title;\n attributes.title.visible = actualTitleVisible;\n attributes.title.spaceRow = actualTitleSpaceRow ?? commonSpaceRow;\n\n let titleValueStyle: ITooltipTextStyle = {};\n // 当前是否处于自适应宽度模式\n const isAutoWidthMode = () => titleValueStyle.autoWidth && titleValueStyle.multiLine !== false;\n if (actualTitleVisible) {\n titleValueStyle = mergeSpec({}, titleStyle, getTextAttributes(actualTitleValueStyle, undefined, {}));\n // 标题默认优化策略:如果 autoWidth 为 true,则宽度默认跟随 content 宽度并开启自动换行\n if (isAutoWidthMode()) {\n titleValueStyle.multiLine = titleValueStyle.multiLine ?? true;\n titleValueStyle.maxWidth = titleValueStyle.maxWidth ?? (hasContent ? Math.ceil(contentMaxWidth) : undefined);\n }\n\n const { text, width, height } = measureTooltipText(actualTitleValue, titleValueStyle);\n attributes.title.value = {\n width: isAutoWidthMode() ? Math.min(width, titleValueStyle.maxWidth ?? Number.MAX_VALUE) : width,\n height,\n ...titleValueStyle,\n text\n };\n titleMaxWidth = attributes.title.value.width;\n titleMaxHeight = attributes.title.value.height;\n\n titleHeightWithSpace = titleMaxHeight + (hasContent ? attributes.title.spaceRow : 0);\n }\n panelHeight += titleHeightWithSpace;\n attributes.title.width = titleMaxWidth;\n attributes.title.height = titleMaxHeight;\n\n if (isAutoWidthMode()) {\n panelWidth += contentMaxWidth ? contentMaxWidth : titleMaxWidth;\n } else {\n panelWidth += Math.max(titleMaxWidth, contentMaxWidth);\n }\n\n // 处理 content 的自动宽度模式\n if (hasContent) {\n attributes.content.forEach(item => {\n const value = item.value as ITooltipTextStyle & TooltipTextAttrs;\n // 最后一列默认自适应宽度\n if (value && (value.autoWidth ?? true)) {\n value.width =\n panelWidth -\n paddingSpec.left -\n paddingSpec.right -\n maxShapeWidth -\n maxKeyWidth -\n keyStyle.spacing -\n valueStyle.spacing;\n //value.multiLine = true; multiLine 需要用户手动开启,不会自动开启\n if (!value.maxWidth) {\n value.maxWidth = Math.ceil(value.width);\n }\n attributes.valueWidth = Math.max(attributes.valueWidth, value.width);\n }\n });\n }\n\n attributes.panel.width = panelWidth;\n attributes.panel.height = panelHeight;\n return attributes;\n};\n","import type { ILayer, INode, IStage } from '@visactor/vrender-core';\nimport { BaseTooltipHandler } from './base';\nimport { Tooltip as TooltipComponent } from '@visactor/vrender-components';\nimport { isValid, isNil } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport type { ITooltipActual } from '../../../typings';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { getTooltipAttributes } from './utils/attribute';\nimport type { ITooltipAttributes } from './interface';\n\n/**\n * The tooltip handler class.\n */\nexport class CanvasTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.canvas;\n readonly type = TooltipHandlerType.canvas;\n\n private _layer: ILayer;\n protected _el?: HTMLCanvasElement;\n protected _tooltipCanvasId?: string;\n protected _tooltipComponent: TooltipComponent;\n protected _attributes?: ITooltipAttributes | null = null;\n\n constructor() {\n super(CanvasTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n this._tooltipCanvasId = (this._chartOption.modeParams as any)?.tooltipCanvasId;\n }\n\n private _initTooltipComponent(stage: IStage) {\n const layer = this._getLayer(stage);\n this._tooltipComponent = new TooltipComponent({\n autoCalculatePosition: false,\n autoMeasure: false\n });\n layer.add(this._tooltipComponent as unknown as INode);\n }\n\n private _getLayer(stage: IStage) {\n if (this._layer) {\n return this._layer;\n }\n\n this._layer = stage.createLayer(this._tooltipCanvasId);\n\n // 需要关闭 layer 对应的 canvas 的事件\n const layerCanvas = this._layer.layerHandler.canvas.nativeCanvas as HTMLCanvasElement;\n // TODO:待 vrender 支持\n if (layerCanvas && layerCanvas.style) {\n layerCanvas.style.touchAction = 'none';\n layerCanvas.style.pointerEvents = 'none';\n }\n\n return this._layer;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!changePositionOnly || isNil(this._attributes)) {\n const chartTheme = this._chartOption?.getTheme() ?? {};\n this._attributes = getTooltipAttributes(actualTooltip, this._component.getSpec(), chartTheme);\n }\n const { panel } = this._attributes ?? {};\n // canvas模式下, size需要考虑border size, 目的是为了精准判断边界是否超出画布,达到confine效果\n // html模式不提供confine, 所以不考虑精准计算size\n\n return {\n width: panel.width + panel.lineWidth,\n height: panel.height + panel.lineWidth\n };\n }\n\n protected _removeTooltip() {\n if (this._layer) {\n this._layer.removeAllChild();\n // this._layer.render();\n }\n this._attributes = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n this._visible = visible;\n\n const stage = this._compiler.getStage();\n if (!stage) {\n return;\n }\n\n if (!visible) {\n if (this._tooltipComponent && this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.hideAll();\n this._tooltipComponent.setAttributes({\n visibleAll: false\n });\n }\n return;\n }\n\n if (!this._tooltipComponent) {\n this._initTooltipComponent(stage);\n }\n\n const { activeTooltipSpec } = params;\n const pos = activeTooltipSpec.position;\n if (!params.changePositionOnly) {\n this._tooltipComponent.setAttributes({\n ...this._attributes,\n ...pos\n });\n } else if (isValid(pos)) {\n this._tooltipComponent.setAttributes(pos);\n }\n\n if (!this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.showAll();\n this._tooltipComponent.setAttributes({\n visibleAll: true\n });\n }\n }\n\n isTooltipShown() {\n return this._tooltipComponent?.attribute.visibleAll;\n }\n\n release() {\n super.release();\n this._layer?.release();\n }\n}\n\nexport const registerCanvasTooltipHandler = () => {\n registerComponentPlugin(CanvasTooltipHandler);\n};\n","import { Logger } from '../../logger';\n\nexport interface IFormatSpecifier {\n fill?: string | undefined;\n align?: string | undefined;\n sign?: string | undefined;\n symbol?: string | undefined;\n zero?: string | undefined;\n width?: string | undefined;\n comma?: string | undefined;\n precision?: string | undefined;\n trim?: string | undefined;\n type?: string | undefined;\n}\n\nexport class FormatSpecifier {\n fill;\n align;\n sign;\n symbol;\n zero;\n width;\n comma;\n precision;\n trim;\n type;\n\n constructor(specifier: IFormatSpecifier = {}) {\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\n toString() {\n return (\n 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 }\n}\n\nexport const numberSpecifierReg = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport function formatSpecifier(specifier: string) {\n let match;\n if (!(match = numberSpecifierReg.exec(specifier))) {\n Logger.getInstance().error('invalid format: ' + specifier);\n return;\n }\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","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatDecimal(x: number) {\n return Math.abs((x = Math.round(x))) >= 1e21 ? x.toLocaleString('en').replace(/,/g, '') : x.toString(10);\n}\n\nexport function formatDecimalParts(x: number, p?: number): [string, number] | null {\n const _x = p ? x.toExponential(p - 1) : x.toExponential();\n const i = _x.indexOf('e');\n if (i < 0) {\n return null; // NaN, ±Infinity\n }\n const coefficient = _x.slice(0, i);\n\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +_x.slice(i + 1)];\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatGroup(grouping: number[], thousands: string) {\n return function (value: string, width: number) {\n let i = value.length;\n const t = [];\n let j = 0;\n let g = grouping[0];\n let length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) {\n g = Math.max(1, width - length);\n }\n t.push(value.substring((i -= g), i + g));\n if ((length += g + 1) > width) {\n break;\n }\n g = grouping[(j = (j + 1) % grouping.length)];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nimport { formatDecimalParts } from './formatDecimal';\n\nexport function formatRounded(x: number, p: number) {\n const d = formatDecimalParts(x, p);\n if (!d) {\n return x + '';\n }\n const coefficient = d[0];\n const exponent = d[1];\n return exponent < 0\n ? '0.' + new Array(-exponent).join('0') + coefficient\n : coefficient.length > exponent + 1\n ? coefficient.slice(0, exponent + 1) + '.' + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join('0');\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatTrim(s: string) {\n const n = s.length;\n let i0 = -1;\n let i1;\n out: for (let i = 1; i < n; ++i) {\n switch (s[i]) {\n case '.':\n i0 = i1 = i;\n break;\n case '0':\n if (i0 === 0) {\n i0 = i;\n }\n i1 = i;\n break;\n default:\n if (!+s[i]) {\n break out;\n }\n if (i0 > 0) {\n i0 = 0;\n }\n break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\n\nimport { formatDecimal, formatDecimalParts } from './formatDecimal';\nimport { formatGroup } from './formatGroup';\nimport { formatPrefixAuto, prefixExponent } from './formatPrefixAuto';\nimport { formatRounded } from './formatRounded';\nimport { formatTrim } from './formatTrim';\nimport { formatSpecifier } from './specifier';\n\nexport interface FormatLocale {\n thousands: string;\n grouping: number[];\n currency: [string, string];\n numerals?: string[] | undefined;\n percent?: string | undefined;\n minus?: string | undefined;\n nan?: string | undefined;\n decimal?: string;\n}\n\nconst prefixes = ['y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\n\nexport class NumberUtil {\n private locale: FormatLocale = {\n thousands: ',',\n grouping: [3],\n currency: ['$', '']\n };\n\n private group =\n this.locale.grouping === undefined || this.locale.thousands === undefined\n ? (group: any) => group\n : formatGroup([...this.locale.grouping].map(Number), `${this.locale.thousands}`);\n private currencyPrefix = this.locale.currency === undefined ? '' : this.locale.currency[0] + '';\n private currencySuffix = this.locale.currency === undefined ? '' : this.locale.currency[1] + '';\n private decimal = this.locale.decimal === undefined ? '.' : this.locale.decimal + '';\n private numerals =\n this.locale.numerals === undefined\n ? (numerals: any) => numerals\n : formatNumerals([...this.locale.numerals].map(String));\n private percent = this.locale.percent === undefined ? '%' : this.locale.percent + '';\n private minus = this.locale.minus === undefined ? '−' : this.locale.minus + '';\n private nan = this.locale.nan === undefined ? 'NaN' : this.locale.nan + '';\n\n private static instance: NumberUtil;\n\n static getInstance(): NumberUtil {\n if (!NumberUtil.instance) {\n NumberUtil.instance = new NumberUtil();\n }\n return NumberUtil.instance;\n }\n\n private newFormat(specifier: string) {\n const specifierIns = formatSpecifier(specifier);\n\n let fill = specifierIns.fill;\n let align = specifierIns.align;\n const sign = specifierIns.sign;\n const symbol = specifierIns.symbol;\n let zero = specifierIns.zero;\n const width = specifierIns.width;\n let comma = specifierIns.comma;\n let precision = specifierIns.precision;\n let trim = specifierIns.trim;\n let type = specifierIns.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === 'n') {\n (comma = true), (type = 'g');\n }\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n // @ts-ignore\n else if (!formatTypes[type]) {\n precision === undefined && (precision = 12), (trim = true), (type = 'g');\n }\n\n // If zero fill is specified, padding goes after sign and before digits.\n // @ts-ignore\n if (zero || (fill === '0' && align === '=')) {\n (zero = true), (fill = '0'), (align = '=');\n }\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n const prefix =\n symbol === '$' ? this.currencyPrefix : symbol === '#' && /[boxX]/.test(type) ? '0' + type.toLowerCase() : '';\n const suffix = symbol === '$' ? this.currencySuffix : /[%p]/.test(type) ? this.percent : '';\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n const formatType = formatTypes[type];\n const maybeSuffix = /[defgprstz%]/.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 =\n precision === undefined\n ? 6\n : /[gprs]/.test(type)\n ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n const { nan, minus, decimal, group, numerals } = this;\n\n function format(value: number) {\n let valuePrefix = prefix;\n let valueSuffix = suffix;\n let i;\n let n;\n let c;\n let _value: any = value;\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 let 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) {\n _value = formatTrim(_value);\n }\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 !== '+') {\n valueNegative = false;\n }\n\n // Compute the prefix and suffix.\n valuePrefix =\n (valueNegative ? (sign === '(' ? sign : minus) : sign === '-' || sign === '(' ? '' : sign) + valuePrefix;\n valueSuffix =\n (type === 's' ? prefixes[8 + prefixExponent / 3] : '') +\n valueSuffix +\n (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) {\n _value = group(_value, Infinity);\n }\n\n // Compute the padding.\n let length = valuePrefix.length + _value.length + valueSuffix.length;\n let 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) {\n _value = group(padding + _value, padding.length ? width - valueSuffix.length : Infinity);\n padding = '';\n }\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case '<':\n _value = valuePrefix + _value + valueSuffix + padding;\n break;\n case '=':\n _value = valuePrefix + padding + _value + valueSuffix;\n break;\n case '^':\n _value =\n padding.slice(0, (length = padding.length >> 1)) +\n valuePrefix +\n _value +\n valueSuffix +\n padding.slice(length);\n break;\n default:\n _value = padding + valuePrefix + _value + valueSuffix;\n break;\n }\n return numerals(_value);\n }\n\n format.toString = function () {\n return specifier + '';\n };\n\n return format;\n }\n\n private _formatPrefix(specifier: string, value: number) {\n const _specifier = formatSpecifier(specifier);\n _specifier.type = 'f';\n const f = this.newFormat(_specifier.toString());\n const e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3;\n const k = Math.pow(10, -e);\n const prefix = prefixes[8 + e / 3];\n return function (value: number) {\n return f(k * value) + prefix;\n };\n }\n\n formatter = (specifier: string) => {\n return this.newFormat(specifier);\n };\n\n format = (specifier: string, value: number) => {\n return this.formatter(specifier)(value);\n };\n\n formatPrefix = (specifier: string, value: number) => {\n return this._formatPrefix(specifier, value);\n };\n}\n\nexport const formatTypes = {\n '%': (x: number, p: number) => (x * 100).toFixed(p),\n b: (x: number) => Math.round(x).toString(2),\n c: (x: number) => x + '',\n d: formatDecimal,\n f: (x: number, p: number) => x.toFixed(p),\n e: (x: number, p: number) => x.toExponential(p),\n g: (x: number, p: number) => x.toPrecision(p),\n o: (x: number) => Math.round(x).toString(8),\n p: (x: number, p: number) => formatRounded(x * 100, p),\n r: formatRounded,\n s: formatPrefixAuto,\n X: (x: number) => Math.round(x).toString(16).toUpperCase(),\n x: (x: number) => Math.round(x).toString(16),\n t: (x: number, p: number) => {\n // 判断是否为整数\n if (Number.isInteger(x)) {\n return x.toFixed(2);\n }\n return Math.floor(x * Math.pow(10, p)) / Math.pow(10, p) + '';\n },\n z: (x: number, p: number) => (x % 1 === 0 ? x + '' : x.toFixed(p))\n};\n\nexport function exponent(x: number) {\n const _x = formatDecimalParts(Math.abs(x));\n return _x ? _x[1] : NaN;\n}\n\nexport function formatNumerals(numerals: string[]) {\n return function (value: string) {\n return value.replace(/[0-9]/g, (i: string) => numerals[+i]);\n };\n}\n","import { Factory } from '../../core/factory';\nimport type { IChartPluginConstructor } from './interface';\n\nexport const registerChartPlugin = (plugin: IChartPluginConstructor) => {\n Factory.registerChartPlugin(plugin.type, plugin);\n};\n","import { isFunction, isArray, TimeUtil, NumberUtil, numberSpecifierReg } from '@visactor/vutils';\n\nimport { BasePlugin } from '../../base/base-plugin';\n\nimport type { IChartPlugin, IChartPluginService } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { registerChartPlugin } from '../register';\n\nconst bracketReg = /\\{([^}]+)\\}/;\nconst bracketGReg = /\\{([^}]+)\\}/g;\n\nconst semicolonReg = /:/;\n\nexport class FormatterPlugin extends BasePlugin implements IChartPlugin {\n static readonly pluginType: 'chart' = 'chart';\n\n static readonly specKey = 'formatter';\n\n static readonly type: string = 'formatterPlugin';\n readonly type: string = 'formatterPlugin';\n\n private readonly _timeModeFormat = {\n utc: TimeUtil.getInstance().timeUTCFormat,\n local: TimeUtil.getInstance().timeFormat\n };\n\n protected _spec: {\n timeMode: 'utc' | 'local';\n customFormatter: (specifier: string, text: string | number | string[] | number[], datum: any) => string | string[];\n numericFormatter: (specifier: string, text: string | number | string[] | number[]) => string;\n timeFormatter: (specifier: string, text: string | number | string[] | number[]) => string;\n };\n\n protected _formatter = this._format;\n\n private _timeFormatter = this._timeModeFormat.local;\n private _numericFormatter = NumberUtil.getInstance().format;\n\n // used for optimize performance,avoiding repeatedly parsing same format template string,\n private _numericSpecifier = NumberUtil.getInstance().formatter;\n private _numericFormatterCache = new Map();\n private _isNumericFormatterCache = new Map();\n\n constructor() {\n super(FormatterPlugin.type);\n }\n\n onInit(service: IChartPluginService, chartSpec: any) {\n const { globalInstance } = service;\n if (!globalInstance) {\n return;\n }\n this._spec = chartSpec?.[FormatterPlugin.specKey] ?? {};\n const { timeMode, customFormatter, numericFormatter, timeFormatter } = this._spec;\n\n if (isFunction(customFormatter)) {\n this._formatter = customFormatter;\n } else {\n this._formatter = this._format.bind(this);\n if (isFunction(timeFormatter)) {\n this._timeFormatter = timeFormatter;\n } else if (timeMode && this._timeModeFormat[timeMode]) {\n this._timeFormatter = this._timeModeFormat[timeMode];\n }\n\n if (numericFormatter) {\n this._numericFormatter = numericFormatter;\n this._numericSpecifier = null;\n this._numericFormatterCache = null;\n }\n }\n Factory.registerFormatter(this._formatter);\n }\n\n protected _format(text: string | number | string[] | number[], datum: any, formatter: string | string[]) {\n if (isArray(text)) {\n return text.map((t, i) => {\n const f = isArray(formatter) ? formatter[i] : formatter;\n return f ? this._formatSingleLine(t, datum, f) : t;\n });\n }\n\n if (isArray(formatter)) {\n return formatter.map(f => this._formatSingleLine(text, datum, f));\n }\n return this._formatSingleLine(text, datum, formatter);\n }\n\n protected _formatSingleLine(text: string | number, datum: any, formatter: string) {\n let isTemplate;\n if (this._isNumericFormatterCache) {\n if (this._isNumericFormatterCache.get(formatter)) {\n isTemplate = this._isNumericFormatterCache.get(formatter);\n } else {\n isTemplate = bracketReg.test(formatter);\n this._isNumericFormatterCache.set(formatter, isTemplate);\n }\n }\n if (isTemplate) {\n const result = formatter.replace(bracketGReg, (match, key) => {\n const hasFormatter = semicolonReg.test(key);\n if (!hasFormatter) {\n const value = datum[key.trim()];\n return typeof value !== 'undefined' ? value : match;\n }\n const parts = key.split(':');\n const value = datum[parts.shift()];\n const valueFormatter = parts.join(':');\n return this._formatSingleText(value, valueFormatter);\n });\n return result;\n }\n return this._formatSingleText(text, formatter);\n }\n\n protected _formatSingleText(text: string | number, formatter: string): string | number {\n const isNumeric = numberSpecifierReg.test(formatter);\n if (isNumeric && this._numericFormatter) {\n // 内置的 formatter 逻辑,可以进行缓存性能优化\n let numericFormat;\n if (this._numericFormatterCache && this._numericSpecifier) {\n if (this._numericFormatterCache.get(formatter)) {\n numericFormat = this._numericFormatterCache.get(formatter);\n } else {\n numericFormat = this._numericSpecifier(formatter) as any;\n this._numericFormatterCache.set(formatter, numericFormat);\n }\n return numericFormat(Number(text));\n }\n return this._numericFormatter(formatter, Number(text));\n } else if (formatter.includes('%') && this._timeFormatter) {\n return this._timeFormatter(formatter, text);\n }\n return text;\n }\n\n release() {\n super.release();\n this._format = null;\n this._timeFormatter = null;\n this._numericFormatter = null;\n this._numericSpecifier = null;\n this._numericFormatterCache = null;\n this._isNumericFormatterCache = null;\n }\n}\n\nexport const registerFormatPlugin = () => {\n registerChartPlugin(FormatterPlugin);\n};\n","import { Factory } from './../core/factory';\nimport type { IImageMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IImageMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerImageGraphic } from '@visactor/vgrammar-core';\n\nexport class ImageMark extends BaseMark implements IImageMark {\n static readonly type = MarkTypeEnum.image;\n readonly type = ImageMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerImageMark = () => {\n Factory.registerMark(ImageMark.type, ImageMark);\n registerImageGraphic();\n};\n","import { VChart } from './core';\n\nimport { registerLineChart } from './chart/line';\nimport { registerAreaChart } from './chart/area';\nimport { registerBar3dChart, registerBarChart } from './chart/bar';\nimport { registerScatterChart } from './chart/scatter';\nimport { registerMapChart } from './chart/map';\nimport { registerPie3dChart, registerPieChart } from './chart/pie';\nimport { registerRoseChart } from './chart/rose';\nimport { registerRadarChart } from './chart/radar';\nimport { registerCommonChart } from './chart/common';\nimport { registerSequenceChart } from './chart/sequence';\nimport { registerHistogram3dChart, registerHistogramChart } from './chart/histogram';\nimport { registerCircularProgressChart } from './chart/progress/circular';\nimport { registerGaugeChart } from './chart/gauge';\nimport {\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart\n} from './chart/word-cloud';\nimport { registerFunnel3dChart, registerFunnelChart } from './chart/funnel';\nimport { registerLinearProgressChart } from './chart/progress/linear';\nimport { registerRangeColumn3dChart, registerRangeColumnChart } from './chart/range-column';\nimport { registerSunburstChart } from './chart/sunburst';\nimport { registerCirclePackingChart } from './chart/circle-packing';\nimport { registerTreemapChart } from './chart/treemap';\nimport { registerWaterfallChart } from './chart/waterfall';\nimport { registerBoxplotChart } from './chart/box-plot';\nimport { registerSankeyChart } from './chart/sankey';\nimport { registerRangeAreaChart } from './chart/range-area';\nimport { registerHeatmapChart } from './chart/heatmap';\nimport { registerCorrelationChart } from './chart/correlation';\nimport {\n registerCartesianBandAxis,\n registerCartesianLinearAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerCartesianTimeAxis\n} from './component/axis/cartesian';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from './component/axis/polar';\nimport { registerContinuousLegend, registerDiscreteLegend } from './component/legend';\nimport { registerTooltip } from './component/tooltip';\nimport { registerCartesianCrossHair, registerPolarCrossHair } from './component/crosshair';\nimport { registerDataZoom, registerScrollBar } from './component/data-zoom';\nimport { registerIndicator } from './component/indicator';\nimport { registerGeoCoordinate } from './component/geo';\nimport { registerMarkLine, registerPolarMarkLine } from './component/marker/mark-line';\nimport { registerTitle } from './component/title';\nimport { registerMarkArea, registerPolarMarkArea } from './component/marker/mark-area';\nimport { registerPlayer } from './component/player';\nimport { registerLabel } from './component/label';\nimport { registerTotalLabel } from './component/label/total-label';\nimport { registerMarkPoint, registerPolarMarkPoint, registerGeoMarkPoint } from './component/marker/mark-point';\nimport { registerBrush } from './component/brush';\nimport { registerCustomMark } from './component/custom-mark';\nimport { registerMapLabel } from './component/map-label';\nimport { registerGridLayout } from './layout/grid-layout/grid-layout';\nimport { registerLayout3d } from './layout/layout3d';\nimport { registerPoptip } from './component/poptip';\nimport { registerCanvasTooltipHandler, registerDomTooltipHandler } from './plugin/components/tooltip-handler';\nimport { registerFormatPlugin } from './plugin/chart/formatter';\n\nimport {\n registerElementActive,\n registerElementActiveByLegend,\n registerElementHighlightByLegend,\n registerElementHighlightByName,\n registerElementHighlightByGroup,\n registerElementHighlightByKey\n} from './interaction';\nimport { registerAllMarks } from './mark';\nimport {\n register3DPlugin,\n registerAnimate,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin\n} from './plugin/other';\n\nVChart.useRegisters([\n // charts\n registerLineChart,\n registerAreaChart,\n registerBarChart,\n registerScatterChart,\n registerPieChart,\n registerRoseChart,\n registerRadarChart,\n registerHistogramChart,\n registerMapChart,\n registerGaugeChart,\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerFunnelChart,\n registerWaterfallChart,\n registerBoxplotChart,\n registerCircularProgressChart,\n registerLinearProgressChart,\n registerRangeColumnChart,\n registerRangeAreaChart,\n registerSunburstChart,\n registerCirclePackingChart,\n registerTreemapChart,\n registerSankeyChart,\n registerHeatmapChart,\n registerSequenceChart,\n registerCorrelationChart,\n // 优化vchart-all体积, 默认不注册\n // registerLiquidChart,\n // registerVennChart,\n registerCommonChart,\n\n // 3d charts\n registerBar3dChart,\n registerPie3dChart,\n registerHistogram3dChart,\n registerFunnel3dChart,\n registerRangeColumn3dChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart,\n\n // components\n registerCartesianLinearAxis,\n registerCartesianBandAxis,\n registerCartesianTimeAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerPolarBandAxis,\n registerPolarLinearAxis,\n\n registerDiscreteLegend,\n registerContinuousLegend,\n\n registerTooltip,\n registerCartesianCrossHair,\n registerPolarCrossHair,\n\n registerDataZoom,\n registerScrollBar,\n registerIndicator,\n registerGeoCoordinate,\n\n registerMarkLine,\n registerMarkArea,\n registerMarkPoint,\n registerPolarMarkLine,\n registerPolarMarkArea,\n registerPolarMarkPoint,\n registerGeoMarkPoint,\n\n registerTitle,\n registerPlayer,\n registerLabel,\n registerTotalLabel,\n registerBrush,\n registerCustomMark,\n registerMapLabel,\n registerPoptip,\n\n // layout\n registerGridLayout,\n registerLayout3d,\n\n // mark\n registerAllMarks,\n\n // plugin\n registerDomTooltipHandler,\n registerCanvasTooltipHandler,\n registerFormatPlugin,\n\n // vgrammar interactions,\n registerElementActive,\n\n registerElementActiveByLegend,\n registerElementHighlightByLegend,\n\n registerElementHighlightByName,\n registerElementHighlightByGroup,\n registerElementHighlightByKey,\n\n // vgrammar animate,\n registerAnimate,\n registerReactAttributePlugin,\n registerHtmlAttributePlugin\n]);\n\nexport { VChart };\n","import type { IInitOption } from '@visactor/vchart';\nimport { merge } from '@visactor/vutils';\n\nexport function mergeChartOption(\n target: Partial,\n ...sources: Partial[]\n): Partial {\n const performanceHook: { [key: string]: (() => void)[] } = {};\n\n function pushHookToTemp(hooks: IInitOption['performanceHook']) {\n Object.keys(hooks).forEach((k: string) => {\n if (!performanceHook[k]) {\n performanceHook[k] = [];\n }\n // @ts-ignore\n performanceHook[k].push(hooks[k]);\n });\n }\n if (target.performanceHook) {\n pushHookToTemp(target.performanceHook);\n }\n sources.forEach(source => {\n if (!source) {\n return;\n }\n const { performanceHook, ...rest } = source;\n if (performanceHook) {\n pushHookToTemp(performanceHook);\n }\n merge(target, rest);\n });\n target.performanceHook = {};\n Object.keys(performanceHook).forEach(k => {\n // @ts-ignore\n target.performanceHook[k] = (...args) => {\n // @ts-ignore\n performanceHook[k].forEach(f => f(...args));\n };\n });\n return target;\n}\n","// Adapted from https://github.com/antvis/F2/blob/master/packages/f2/src/base/equal.ts by zengyue\n// License: https://github.com/antvis/F2/blob/master/packages/f2/LICENSE\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { isArray, isPlainObject } from '@visactor/vutils';\n\n/**\n * 所有a中的属性都和b相等,但不要求b和a相等\n * @param a\n * @param b\n * @returns\n */\nexport function allParamsEqualTo(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n // null 和 undefined\n if (a == null || b == null) {\n return false;\n }\n\n // 特殊处理NaN\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = a.length - 1; i >= 0; i--) {\n if (!allParamsEqualTo(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (!isPlainObject(a)) {\n return false;\n }\n\n const ka = Object.keys(a);\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (let i = ka.length - 1; i >= 0; i--) {\n const key = ka[i];\n if (!allParamsEqualTo((a as any)[key], b[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getDiffedParams(from: any, to: any): any {\n if (from === to) {\n return null;\n }\n const obj: any = {};\n for (const key in from) {\n if (from[key] !== to[key]) {\n obj[key] = to[key];\n }\n }\n return obj;\n}\n\nexport function isBoundsLikeEqual(a: IBoundsLike, b: IBoundsLike) {\n return a.x1 === b.x1 && a.x2 === b.x2 && a.y1 === b.y1 && a.y2 === b.y2;\n}\n","import type { IInitOption, IVChart } from '@visactor/vchart';\nimport VChart from '@visactor/vchart';\nimport type { GraphicType, IGraphic, IGroup, IRectGraphicAttribute, ITicker } from '@visactor/vrender-core';\nimport { genNumberType, parsePadding, Rect } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { Bounds, pointInAABB, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { mergeChartOption } from '../../../utils/chart';\nimport { isBoundsLikeEqual } from '../../../utils/equal';\n\nexport interface IChartGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // ClassType: any;\n vchart?: IVChart;\n mode?: IInitOption['mode'];\n modeParams?: any;\n dpr: number;\n interactive?: boolean;\n animation?: boolean;\n disableTriggerEvent: boolean;\n disableDirtyBounds: boolean;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n chartInitOptions?: any;\n enablePickBounds?: boolean;\n width: number;\n height: number;\n x?: number;\n y?: number;\n angle?: number;\n anchor?: [number, number];\n zIndex?: number;\n panel?: Partial;\n vchartBoundsMode?: 'clip' | 'auto';\n}\n\nexport const CHART_NUMBER_TYPE = genNumberType();\n\nexport class VChartGraphic extends Rect {\n type: GraphicType = 'chart' as any;\n declare attribute: IChartGraphicAttribute;\n protected _vchart: IVChart;\n\n get vchart() {\n return this._vchart;\n }\n // vchart 的实际绘图绘制位置\n // 首先 vchart.stage 会根据 stage.window.viewBoxTransform 变换第一次,这一次变化包括了\n // 1. 全局stage的缩放;2. vchart-graphic 的位置定位;3. auto 模式下的自动偏移(这个等同于位置偏移)\n // 然后 vchart.stage.defaultLayer 会根据偏移量,将图表绘制内容再偏移回来\n // 来回2次偏移的目的是,让 vchart 内容超出原是viewBox的部分,可以正常被viewBox包含并绘制\n protected _vchartAutoTranslate: { x: number; y: number } = { x: 0, y: 0 };\n get vchartAutoTranslate() {\n return this._vchartAutoTranslate;\n }\n\n // 实际渲染图表内容的 bounds\n // 只在 auto 模式下生效\n protected _displayBounds: Bounds;\n\n doUpdateAABBBounds(full?: boolean): IAABBBounds {\n if (!this._displayBounds) {\n return super.doUpdateAABBBounds(full);\n }\n this.updateAABBBoundsStamp++;\n const graphicTheme = this.getGraphicTheme();\n const bounds = this._displayBounds.clone();\n transformBoundsWithMatrix(bounds, bounds, this.transMatrix);\n // @ts-ignore\n const { boundsPadding = graphicTheme.boundsPadding } = this.attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray as number);\n }\n this.clearUpdateBoundTag();\n this._AABBBounds.copy(bounds);\n return bounds;\n }\n\n constructor(params: IChartGraphicAttribute) {\n const { panel, zIndex } = params;\n super({ ...(panel || {}), zIndex, visible: false });\n this.numberType = CHART_NUMBER_TYPE;\n // 创建chart\n const {\n spec,\n renderCanvas,\n mode,\n modeParams,\n dpr,\n interactive,\n disableTriggerEvent,\n disableDirtyBounds,\n ticker,\n chartInitOptions,\n viewBox,\n vchartBoundsMode\n } = params;\n this.attribute.viewBox = viewBox;\n this.attribute.vchartBoundsMode = vchartBoundsMode;\n this._vchart = new VChart(\n spec,\n mergeChartOption(\n {\n renderCanvas,\n mode,\n modeParams,\n canvasControled: false,\n viewBox,\n dpr,\n interactive,\n // animation: false,\n autoFit: false,\n disableTriggerEvent,\n disableDirtyBounds,\n // @ts-ignore\n ticker,\n // 只有vstory触发的render才会真的render\n beforeRender: stage => {\n const chartStage = this._vchart.getStage();\n if (!(chartStage as any)._story_needRender) {\n chartStage.pauseRender();\n stage.dirtyBounds?.union(this.globalAABBBounds);\n stage.renderNextFrame();\n }\n },\n afterRender: stage => {\n // @ts-ignore\n stage._story_needRender = false;\n stage.resumeRender();\n }\n },\n chartInitOptions ?? {}\n )\n );\n\n // 背景设置为false后,不会擦除画布内容,可以实现元素正常堆叠绘制\n const stage = this._vchart.getStage();\n // TODO stage的pauseRender支持传入count\n (stage as any)._skipRender = -Infinity;\n this._vchart.renderSync();\n if (stage) {\n stage.background = false as any;\n // 关闭交互\n // stage.pauseTriggerEvent();\n }\n stage.resumeRender();\n\n if (vchartBoundsMode === 'auto') {\n // auto 模式下,需要手动更新一下\n this.updateVChartGraphicViewBoxInAuto();\n }\n }\n\n /**\n * 判定点是否在设置 viewBox 内。设置 viewBox 会小于展示 bounds\n * @param canvasX\n * @param canvasY\n */\n pointInViewBox(canvasX: number, canvasY: number): boolean {\n const target = { x: 0, y: 0 };\n this.globalTransMatrix.transformPoint({ x: canvasX, y: canvasY }, target);\n return pointInAABB(target, this._vchart.getStage().viewBox);\n }\n\n release() {\n this._vchart && this._vchart.release();\n super.release();\n }\n\n setAttribute(key: string, value: any) {\n if (key === 'viewBox') {\n super.setAttribute('x', value.x1);\n super.setAttribute('y', value.y1);\n this.updateVChartGraphicViewBox(value);\n }\n if (key === 'spec') {\n this._vchart.updateSpecSync(value, false, {}, { reMake: true, change: true });\n } else {\n super.setAttribute(key, value);\n }\n }\n setAttributes(attrs: IChartGraphicAttribute) {\n const lastedViewBox = this.attribute.viewBox;\n super.setAttributes(attrs);\n if (attrs.viewBox) {\n this.attribute.viewBox = lastedViewBox;\n this.updateVChartGraphicViewBox(attrs.viewBox);\n }\n if (attrs.spec) {\n this._vchart.updateSpecSync(attrs.spec, false, {}, { reMake: true, change: true });\n }\n }\n\n private _getVChartGroupActualBounds(bounds: Bounds, _group: IGraphic) {\n if (_group.type !== 'group') {\n bounds.union(_group.globalAABBBounds);\n return;\n }\n // 以下是 group 的情况\n const group = _group as IGroup;\n if (group.childrenCount === 0) {\n return;\n }\n if (group.name?.startsWith('seriesGroup_')) {\n return bounds.union(group.globalAABBBounds);\n }\n if (group.attribute.clip === true && (group.attribute.width || group.attribute.height)) {\n bounds.union(group.globalAABBBounds);\n return;\n }\n group.forEachChildren(_child => {\n this._getVChartGroupActualBounds(bounds, _child as IGraphic);\n });\n }\n\n /**\n * 获取 VChart 图形的实际边界。\n * 该方法通过遍历 VChart stage的默认图层中的所有子组,计算并返回它们的边界框。\n *\n * @returns {Bounds} 返回包含所有子组边界的 Bounds 对象。\n */\n getVChartActualBounds() {\n const stage = this._vchart.getStage();\n // const layer = stage.defaultLayer;\n const root = stage.defaultLayer.getChildByName('root') as IGroup;\n const bounds = new Bounds();\n root.forEachChildren((child: IGroup) => {\n this._getVChartGroupActualBounds(bounds, child);\n });\n\n bounds.translate(-(stage.defaultLayer.attribute.x ?? 0), -(stage.defaultLayer.attribute.y ?? 0));\n return bounds;\n }\n\n updateVChartGraphicViewBox(bounds: IBoundsLike) {\n if (this.attribute.viewBox && isBoundsLikeEqual(this.attribute.viewBox, bounds)) {\n // 没有变化,不需要更新\n return;\n }\n // 先更新 viewBox\n this.attribute.viewBox = bounds;\n // 不是auto模式\n if (this.attribute.vchartBoundsMode !== 'auto') {\n // 直接更新\n this._vchart.updateViewBox(bounds);\n return;\n }\n this.updateVChartGraphicViewBoxInAuto();\n }\n\n updateVChartGraphicViewBoxInAuto() {\n // 1. 得到当前设置 viewBox 的实际渲染bounds\n const rect = this._vchart.getChart().getCanvasRect();\n const viewBoxSize = {\n width: this.attribute.viewBox.x2 - this.attribute.viewBox.x1,\n height: this.attribute.viewBox.y2 - this.attribute.viewBox.y1\n };\n // 当尺寸变化时,进行一次 resize\n if (rect.width !== viewBoxSize.width || rect.height !== viewBoxSize.height) {\n // vchart 使用当前的设置 viewBox 进行 resize\n // 这里的 resize 不期望修改viewBox\n // 但是 vchart 内 viewBox 优先级更高,所以这里的实现有点hack。\n // @ts-ignore\n this.vchart._viewBox = this.attribute.viewBox;\n // @ts-ignore\n this.vchart._option.viewBox = this.attribute.viewBox;\n // @ts-ignore\n this.vchart.getChart()._option.viewBox = this.attribute.viewBox;\n this.vchart.resize(viewBoxSize.width, viewBoxSize.height);\n }\n const rootBounds = this.getVChartActualBounds();\n // 2. 得到需要绘制全部内容时的 vchart 的 viewBox\n // 不要小于设置viewBox;\n rootBounds.union(this.attribute.viewBox);\n // 当前实际绘图内容的 bounds\n this._displayBounds = rootBounds.clone();\n // 3. 考虑到 vchart 可能会将内容绘制到 -x, -y,记录下这个偏移量\n this._vchartAutoTranslate.x = rootBounds.x1 < 0 ? rootBounds.x1 : 0;\n this._vchartAutoTranslate.y = rootBounds.y1 < 0 ? rootBounds.y1 : 0;\n // 4. 将 bounds 标准化到 0, 0, width, height\n rootBounds.translate(-this._vchartAutoTranslate.x, -this._vchartAutoTranslate.y);\n // 5. 将绘图 viewBox 更新到 vchart.stage\n // 注意不要更新到 vchart,更新到vchart会触发vchart重新布局,但是我们不需要vchart按照 viewBox_display 重新布局\n this._vchart.getStage().defaultLayer.translateTo(-this.vchartAutoTranslate.x, -this.vchartAutoTranslate.y);\n // @ts-ignore\n this._vchart._compiler._view.renderer.setViewBox(rootBounds, true);\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasRectRender } from '@visactor/vrender';\nimport type { VChartGraphic } from './vchart-graphic';\nimport { CHART_NUMBER_TYPE } from './vchart-graphic';\n\nexport const ChartRender = Symbol.for('VStoryChartRender');\nexport const ChartRenderContribution = Symbol.for('VStoryChartRenderContribution');\n\n@injectable()\nexport class VChartRender extends DefaultCanvasRectRender implements IGraphicRender {\n type: 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n drawShape(\n chart: any,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { baseOpacity = 1 } = chart.attribute;\n if (baseOpacity <= 0) {\n return;\n }\n context.baseGlobalAlpha *= baseOpacity;\n super.drawShape(chart, context, x, y, drawContext, params, fillCb, strokeCb);\n // TODO 考虑一个通用的ctx清理逻辑\n if (context._clearFilterStyle && context.nativeContext) {\n context.nativeContext.filter = 'blur(0px)';\n context._clearFilterStyle = false;\n }\n context.baseGlobalAlpha /= baseOpacity;\n const vChart = (chart as VChartGraphic).vchart;\n const vchartStage = vChart.getStage();\n const vchartCtx = vchartStage.window.getContext();\n vchartCtx.baseGlobalAlpha *= baseOpacity;\n // @ts-ignore\n vchartStage._story_needRender = true;\n const matrix = chart.globalTransMatrix.clone();\n // auto 模式下,需要将vchart.stage的viewBoxTransform 设置到包含偏移量的位置\n matrix.translate(chart.vchartAutoTranslate.x, chart.vchartAutoTranslate.y);\n const stageMatrix = chart.stage.window.getViewBoxTransform().clone();\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n vchartStage.window.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n vchartStage.dirtyBounds?.clear();\n vchartStage.render();\n vchartCtx.baseGlobalAlpha /= baseOpacity;\n }\n\n draw(chart: any, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const chartAttribute = getTheme(chart, params?.theme).circle;\n this._draw(chart, {} as any, false, drawContext, params);\n }\n}\n","import { injectable } from '@visactor/vrender';\nimport type { IGraphicPicker, IPickParams } from '@visactor/vrender';\nimport type { VChartGraphic } from './vchart-graphic';\nimport { CHART_NUMBER_TYPE } from './vchart-graphic';\n\n@injectable()\nexport class VChartPicker implements IGraphicPicker {\n type = 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n contains(chart: any, point: any, params?: IPickParams): boolean | any {\n // 将当前的point转化到global\n const matrix = chart.parent.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n const toGlobalMatrix = matrix.getInverse();\n const nextP = { x: 0, y: 0 };\n toGlobalMatrix.transformPoint(point, nextP);\n\n // 得到 vchart stage\n const vChart = (chart as VChartGraphic).vchart;\n const vchartStage = vChart.getStage();\n vchartStage.dirtyBounds?.clear();\n const toChartMatrix = vchartStage.window.getViewBoxTransform();\n toChartMatrix.transformPoint(nextP, nextP);\n const pick = vchartStage.pick(nextP.x, nextP.y);\n // @ts-ignore\n if (pick.graphic === null && pick.group.name === 'root') {\n return false;\n }\n return pick;\n }\n}\n","import type { IPickerService, IPickParams, PickResult } from '@visactor/vrender-core';\nimport { injectable } from '@visactor/vrender-core';\nimport type { IMatrix, IPointLike } from '@visactor/vutils';\n\n@injectable()\nexport class VChartPickServiceInterceptorContribution {\n order: number = 1;\n afterPickItem(\n result: PickResult,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n // 点击到图表的空白区域了,那么就判断该位置是否有其他图元,如果有,那就返回false,否则还是认为选中了图表\n if (\n result.graphic === null &&\n result.group &&\n (result.group as any).stage &&\n (result.group as any).stage.id === 'vstory'\n ) {\n // console.log('aaaa', result);\n const stage = (result.group as any).stage;\n const charts = stage.getElementsByType('chart');\n const nextPoint = { x: point.x, y: point.y };\n if (params && params.parentMatrix) {\n params.parentMatrix.transformPoint(point, nextPoint);\n }\n\n for (let i = charts.length - 1; i >= 0; i--) {\n const chart = charts[i];\n const pointInChart = { x: nextPoint.x, y: nextPoint.y };\n chart.globalTransMatrix.transformPoint(pointInChart, pointInChart);\n const viewBox = chart._vchart.getStage().viewBox;\n // console.log(chart);\n if (viewBox.contains(pointInChart.x, pointInChart.y)) {\n result.graphic = chart;\n result.group = null;\n // result.group =\n return result;\n }\n }\n }\n\n return result;\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport type { IVChart } from '@visactor/vchart';\nimport type { GraphicType, IGroupGraphicAttribute, ITicker } from '@visactor/vrender';\nimport { genNumberType, Group } from '@visactor/vrender';\n\nexport interface IChartGraphicAttribute extends IGroupGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // ClassType: any;\n vchart: IVChart;\n mode: string;\n modeParams?: any;\n dpr: number;\n interactive: boolean;\n animation: boolean;\n disableTriggerEvent: boolean;\n disableDirtyBounds: boolean;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n chartInitOptions?: any;\n}\n\nexport const COMPONENT_NUMBER_TYPE = genNumberType();\n\n// @ts-ignore\nexport class ComponentGroup extends Group {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n constructor(attrs: IGroupGraphicAttribute) {\n // vstory-component-group没有主题,必须都初始化,否则动画会找不到属性\n super({ scaleX: 1, scaleY: 1, x: 0, y: 0, angle: 0, ...attrs, pickable: false });\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute,\n IGraphic,\n IGroup\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasGroupRender } from '@visactor/vrender';\nimport { COMPONENT_NUMBER_TYPE } from './component-group-graphic';\n\nexport const ComponentRender = Symbol.for('VStoryComponentRender');\nexport const ComponentRenderContribution = Symbol.for('VStoryComponentRenderContribution');\n\n@injectable()\nexport class ComponentGroupRender extends DefaultCanvasGroupRender implements IGraphicRender {\n type: any = 'vstory-component-group';\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n draw(group: IGroup, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const { context } = drawContext;\n if (!context) {\n return;\n }\n const { wipeDirection, wipeRatio, wipeColor, wipeBlur } = group.attribute as any;\n const drawWipe = isFinite(wipeRatio);\n let x1;\n let y1;\n let x2;\n let y2;\n if (drawWipe) {\n const b = group.AABBBounds;\n if (wipeDirection === 'l2r') {\n x1 = b.x1;\n y1 = b.y1;\n x2 = x1 + b.width() * wipeRatio;\n y2 = b.height() + y1;\n } else if (wipeDirection === 'r2l') {\n x2 = b.x1;\n y1 = b.y1;\n x1 = x2 - b.width() * wipeRatio;\n y2 = b.height() + y1;\n } else if (wipeDirection === 't2b') {\n x1 = b.x1;\n y1 = b.y1;\n x2 = x1 + b.width();\n y2 = b.height() * wipeRatio + y1;\n } else if (wipeDirection === 'b2t') {\n x1 = b.x1;\n y2 = b.y1;\n x2 = x1 + b.width();\n y1 = y2 - b.height() * wipeRatio;\n }\n context.save();\n context.setTransformForCurrent();\n context.beginPath();\n context.rect(x1, y1, x2 - x1, y2 - y1);\n context.clip();\n }\n super.draw(group, renderService, drawContext, params);\n if (drawWipe) {\n context.restore();\n }\n }\n}\n","export const chartTypes: { [key: string]: any } = {};\n","import { icons as iconPlugins } from './plugins/icons';\nimport { themes as themePlugins } from './plugins/themes';\nimport { chartTypes as chartTypePlugins } from './plugins/chartModules';\nimport type { ColumnIconOption, ITableThemeDefine } from './ts-types';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { editors } from './edit/editors';\n\nfunction register(obj: { [key: string]: any }, name: string, value: any): any {\n const old = obj[name];\n obj[name] = value;\n return old;\n}\n\nexport function theme(name: string, theme?: ITableThemeDefine): ITableThemeDefine {\n if (theme !== null && theme !== undefined) {\n return register(themePlugins, name, theme);\n }\n return themePlugins[name];\n}\nexport function icon(name: string, icon?: ColumnIconOption): ColumnIconOption {\n if (icon !== null && icon !== undefined) {\n return register(iconPlugins, name, icon);\n }\n return iconPlugins[name];\n}\nexport function chartModule(name: string, chartModule?: any): any {\n if (chartModule !== null && chartModule !== undefined) {\n return register(chartTypePlugins, name, chartModule);\n }\n return chartTypePlugins[name];\n}\nexport function editor(name: string, editor?: IEditor): IEditor {\n if (editor !== null && editor !== undefined) {\n return register(editors, name, editor);\n }\n return editors[name];\n}\n// 清理注册的全局theme icon chartModule\nfunction clear(obj: any) {\n for (const key in obj) {\n delete obj[key];\n }\n}\n/**\n * 清理注册的全局theme icon chartModule\n */\nexport function clearAll() {\n clear(themePlugins);\n clear(iconPlugins);\n clear(chartTypePlugins);\n}\n","import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n\n /** 是否开启树形结构复选框 */\n enableTreeCheckbox?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: (index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n\n enableTreeNodeMerge?: boolean;\n groupBy?: GroupByOption;\n groupTitleCustomLayout?: ICustomLayout;\n\n enableTreeStickCell?: boolean;\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManager;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的碎银均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManager;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n _parseColumnWidthConfig: (columnWidthConfig: { dimensions: IDimensionInfo[]; width: string | number }[]) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n /** 隐藏该指标。 但内部聚合逻辑是正常执行的 */\n hide?: boolean;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n","import type { SparklineSpec } from '../ts-types';\n\n// export const DEFAULTFONT = '16px sans-serif'; //默认字体\nexport const DEFAULTFONTSIZE = 16; //默认字号\nexport const DEFAULTFONTFAMILY = 'Arial,sans-serif'; //默认字体\nexport const DEFAULTBGCOLOR = '#FFF'; //默认背景色\nexport const DEFAULTBORDERCOLOR = '#000'; //默认边框颜色\nexport const DEFAULTBORDERLINEWIDTH = 1; //默认边框线宽\nexport const DEFAULTBORDERLINEDASH: [] = []; //默认边框dash\nexport const DEFAULTFONTCOLOR = '#000'; //默认字体颜色\n/**\n * 校验是否为超链接\n */\nexport const regUrl = /^(https?|ftp|file):\\/\\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/;\n/**\n * 调整列宽热区宽度\n */\nexport const ResizeColumnHotSpotSize = 16;\nexport const ResizeRowHotSpotSize = 16;\n\n/** 指标维度 在行列维度分析中占位标识 */\nexport const IndicatorDimensionKeyPlaceholder = '$$indicator$$';\n\n// svg path\nexport const DrillDown = ``;\nexport const DrillUp = ``;\n\nexport const DefaultSparklineSpec: SparklineSpec = {\n type: 'line'\n};\n","/*\n * migrate from vchart/src/plugin/components/axis-sync-plugin/zero-align-transform.ts\n */\nimport { isValidNumber } from '@visactor/vutils';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n};\n\nfunction isValidAlignDomain(domain: number[]): boolean {\n return domain.length === 2 && isValidNumber(domain[0]) && isValidNumber(domain[1]) && domain[1] >= domain[0];\n}\n\nfunction getScaleInfo(domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = domain[1] - domain[0];\n const includeZero = domain[1] * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = domain[1] > 0 ? domain[1] - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n return {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: true,\n extendable_max: true\n };\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport function getNewRangeToAlign(\n range1: { min: number; max: number },\n range2: { min: number; max: number }\n): { range1: number[]; range2: number[] } | undefined {\n const domain1 = [range1.min, range1.max];\n const domain2 = [range2.min, range2.max];\n\n if (!isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return undefined;\n }\n // 先分别获取正负比例\n const info1 = getScaleInfo(domain1);\n const info2 = getScaleInfo(domain2);\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return undefined;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return undefined;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return undefined;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return undefined;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return undefined;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return undefined;\n }\n domain1[0] = 0;\n } else {\n return undefined;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return undefined;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return undefined;\n }\n domain1[1] = 0;\n } else {\n return undefined;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return undefined;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return undefined;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return undefined;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return undefined;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return undefined;\n }\n }\n }\n // s1.domain(domain1);\n // s2.domain(domain2);\n\n return { range1: domain1, range2: domain2 };\n}\n","import { parsePadding } from './../../vrender';\nimport { isArray, isNumber, isString } from '@visactor/vutils';\n\nexport function getQuadProps(\n paddingOrigin: number | string | number[] | { left?: number; right?: number; top?: number; bottom?: number }\n): [number, number, number, number] {\n if (isNumber(paddingOrigin) || isString(paddingOrigin) || isArray(paddingOrigin)) {\n let padding = parsePadding(paddingOrigin as number);\n if (typeof padding === 'number' || typeof padding === 'string') {\n padding = [padding, padding, padding, padding];\n } else if (Array.isArray(padding)) {\n padding = padding.slice(0) as any;\n }\n return padding as any;\n } else if (\n paddingOrigin &&\n (isFinite(paddingOrigin.bottom) ||\n isFinite(paddingOrigin.left) ||\n isFinite(paddingOrigin.right) ||\n isFinite(paddingOrigin.top))\n ) {\n return [paddingOrigin.top ?? 0, paddingOrigin.right ?? 0, paddingOrigin.bottom ?? 0, paddingOrigin.left ?? 0];\n }\n return [0, 0, 0, 0];\n}\n","import { isValid } from '@visactor/vutils';\nimport type { StylePropertyFunctionArg } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function getProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n // to do 处理回调函数\n if (typeof prop === 'function') {\n const arg: StylePropertyFunctionArg = {\n col,\n row,\n table: _table,\n value: _table.getCellValue(col, row),\n dataValue: _table.getCellOriginValue(col, row),\n cellHeaderPaths: _table.getCellHeaderPaths(col, row)\n };\n return prop(arg);\n }\n return prop;\n}\n\nexport function getRawProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n if (typeof prop === 'function') {\n return undefined;\n }\n return prop;\n}\n\nexport function getFunctionalProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n if (typeof prop === 'function') {\n const arg: StylePropertyFunctionArg = {\n col,\n row,\n table: _table,\n value: _table.getCellValue(col, row),\n dataValue: _table.getCellOriginValue(col, row),\n cellHeaderPaths: _table.getCellHeaderPaths(col, row)\n };\n return prop(arg);\n }\n return undefined;\n}\n","import { Factory } from '../../core/factory';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport { getAxisOption } from './get-axis-config';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\n\nexport function getZeroAlignTickAlignTicks(\n targetRange: { min: number; max: number },\n col: number,\n row: number,\n index: number,\n position: 'top' | 'bottom' | 'left' | 'right',\n layout: PivotHeaderLayoutMap\n) {\n const getAxisDomainRangeAndLabels = Factory.getFunction('getAxisDomainRangeAndLabels') as GetAxisDomainRangeAndLabels;\n const { axisOption, isZeroAlign } = getAxisOption(col, row, index === 0 ? 'right' : 'left', layout);\n\n const { ticks } = getAxisDomainRangeAndLabels(\n targetRange.min,\n targetRange.max,\n axisOption,\n isZeroAlign,\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight // avoid 0, 0 causes NaN\n );\n\n return ticks;\n}\n\nexport function getTickModeFunction(\n targetTicks: number[],\n targetRange: { min: number; max: number },\n range: { min: number; max: number },\n indicatorIndex: number\n) {\n return indicatorIndex !== 0 && targetTicks\n ? () => {\n const newTicks: number[] = targetTicks.map((value: number) => {\n const percent = (value - targetRange.min) / (targetRange.max - targetRange.min);\n const tick = (range.max - range.min) * percent + range.min;\n // TO BE FIXED: 保留2位有效数字,避免出现过长的数字\n return Math.round(tick * 100) / 100;\n // return tick;\n });\n return newTicks;\n }\n : undefined;\n}\n","import { isArray, isNumber, isValid, merge } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport type { ITableAxisOption } from '../../ts-types/component/axis';\nimport type { PivotChart } from '../../PivotChart';\nimport type { CollectedValue } from '../../ts-types';\nimport { getNewRangeToAlign } from './zero-align';\nimport { Factory } from '../../core/factory';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\nimport { getQuadProps } from '../../scenegraph/utils/padding';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport { getTickModeFunction, getZeroAlignTickAlignTicks } from './tick-align';\n\ntype AxisRange = {\n min: number;\n max: number;\n};\n\nexport type GetAxisConfigInPivotChart = (col: number, row: number, layout: PivotHeaderLayoutMap) => any;\nexport function getAxisConfigInPivotChart(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n if (!layout._table.isPivotChart()) {\n return undefined;\n }\n\n // 是否是指标\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n const axisRange = getRange('top', col, row + 1, col, layout.columnHeaderLevelCount - 1, col, row, 1, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row + 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row + 1, layout._table));\n\n // range for top axis\n const { range, ticks, axisOption, targetTicks, targetRange, index, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for bottom axis\n // const subAxisRange = getRange(\n // 'bottom',\n // col,\n // row + 1,\n // col,\n // layout.columnHeaderLevelCount - 1,\n // col,\n // row,\n // 0,\n // layout\n // );\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 顶部副指标轴\n return merge(\n {\n range: range\n },\n axisOption,\n {\n orient: 'top',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo = null;\n indicatorKeys?.forEach(key => {\n const info = layout.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n\n const axisRange = getRange('bottom', col, row - 1, col, row, col, row, 0, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row - 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row - 1, layout._table));\n\n // range for bottom axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for top axis\n // const subAxisRange = getRange('top', col, row - 1, col, row, col, row, 1, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 底侧指标轴\n return merge(\n {\n title: {\n visible: true,\n text: (indicatorInfo as any)?.title\n // autoRotate: true\n },\n range\n },\n axisOption,\n {\n orient: 'bottom',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n let rowDimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n if (isArray(rowDimensionKey)) {\n rowDimensionKey = rowDimensionKey[0];\n }\n const data = layout.dataset.collectedValues[rowDimensionKey] ?? ([] as string[]);\n\n const rowPath = layout.getRowKeysPath(col, row);\n const domain = ((data as any)[rowPath ?? ''] as Array) ?? [];\n\n const { axisOption, theme, chartType } = getAxisOption(col + 1, row, 'left', layout);\n if (axisOption?.visible === false) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col + 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col + 1, row, layout._table));\n\n const spec = layout.getRawChartSpec(col + 1, row);\n // 左侧维度轴\n return merge(\n {\n // domain: chartType === 'scatter' ? undefined : Array.from(domain),\n domain: axisOption?.type === 'linear' ? undefined : Array.from(domain),\n // range: chartType === 'scatter' ? domain : undefined,\n range: axisOption?.type === 'linear' ? domain : undefined,\n title: {\n autoRotate: true\n }\n },\n axisOption,\n {\n orient: 'left',\n // type: chartType === 'scatter' ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n __vtableChartTheme: theme,\n // 默认左侧维度轴对应的图表direction 为 horizontal\n // 散点图特殊处理\n inverse: transformInverse(\n axisOption,\n (spec?.direction ?? (chartType === 'scatter' ? 'vertical' : 'horizontal')) === Direction.horizontal\n ),\n __vtablePadding: padding\n }\n );\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo = null;\n indicatorKeys?.forEach(key => {\n const info = layout.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n\n const axisRange = getRange('left', col + 1, row, col, row, col, row, 0, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col + 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col + 1, row, layout._table));\n\n // range for left axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for right axis\n // const subAxisRange = getRange('right', col + 1, row, col, row, col, row, 1, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 左侧指标轴\n return merge(\n {\n title: {\n visible: true,\n text: (indicatorInfo as any)?.title,\n autoRotate: true\n },\n range: range\n },\n axisOption,\n {\n orient: 'left',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n const axisRange = getRange('right', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 1, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col - 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col - 1, row, layout._table));\n\n // range for right axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for left axis\n // const subAxisRange = getRange('left', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 0, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 右侧副指标轴\n return merge(\n {\n range: range,\n title: {\n autoRotate: true\n }\n },\n axisOption,\n {\n orient: 'right',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n\n let columnDimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n if (isArray(columnDimensionKey)) {\n columnDimensionKey = columnDimensionKey[0];\n }\n const data = layout.dataset.collectedValues[columnDimensionKey] ?? ([] as string[]);\n\n const colPath = layout.getColKeysPath(col, row);\n const domain = ((data as any)?.[colPath ?? ''] as Array) ?? [];\n\n const { axisOption, isPercent, theme, chartType } = getAxisOption(col, row - 1, 'bottom', layout);\n if (axisOption?.visible === false) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row - 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row - 1, layout._table));\n\n // 底部维度轴\n return merge(\n {\n // domain: chartType === 'scatter' ? undefined : Array.from(domain),\n domain: axisOption?.type === 'linear' ? undefined : Array.from(domain),\n // range: chartType === 'scatter' ? domain : undefined\n range: axisOption?.type === 'linear' ? domain : undefined\n },\n axisOption,\n {\n orient: 'bottom',\n // type: chartType === 'scatter' ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n }\n }\n\n return undefined;\n}\n\nexport function getAxisOption(col: number, row: number, orient: string, layout: PivotHeaderLayoutMap) {\n const spec = layout.getRawChartSpec(col, row);\n const axes = spec.axes ?? [];\n (layout._table as PivotChart).pivotChartAxes.forEach(axis => {\n const index = axes.findIndex((a: any) => {\n return axis.orient === a.orient;\n });\n if (index === -1) {\n axes.push(axis);\n }\n });\n\n if (spec && isArray(axes)) {\n const axisOption = axes.find((axis: any) => {\n return axis.orient === orient;\n });\n if (axisOption) {\n const { seriesIndex, seriesId } = axisOption;\n let seriesIndice;\n let seriesSpec: any;\n if (isValid(seriesId) && isArray(spec.series)) {\n seriesIndice = (isArray(seriesId) ? seriesId : [seriesId]).map(id => {\n const index = spec.series.findIndex((s: any) => s.id === id);\n if (index >= 0) {\n seriesSpec = spec.series[index];\n }\n return index;\n });\n } else if (isValid(seriesIndex) && isArray(spec.series)) {\n seriesIndice = seriesIndex;\n }\n const { isZeroAlign, isTickAlign } = checkZeroAlign(spec, orient, layout);\n return {\n axisOption,\n isPercent: spec.percent,\n isZeroAlign,\n isTickAlign,\n seriesIndice,\n theme: spec.theme,\n chartType: seriesSpec?.type ?? spec.type\n };\n }\n }\n const axisOption = ((layout._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === orient;\n });\n const { isZeroAlign, isTickAlign } = checkZeroAlign(spec, orient, layout);\n return {\n axisOption,\n isPercent: false,\n // isZeroAlign: checkZeroAlign(spec, orient, layout),\n isZeroAlign,\n isTickAlign,\n theme: spec.theme,\n chartType: spec.type\n };\n}\n\nfunction checkZeroAlign(spec: any, orient: string, layout: PivotHeaderLayoutMap) {\n // check condition:\n // 1. two axes and one set sync\n // 2. axisId in sync is another\n const orients: string[] = [];\n if (orient === 'left' || orient === 'right') {\n orients.push('left', 'right');\n } else if (orient === 'top' || orient === 'bottom') {\n orients.push('top', 'bottom');\n }\n // const spec = layout.getRawChartSpec(col, row);\n let axesSpec;\n if (spec && isArray(spec.axes)) {\n axesSpec = spec.axes;\n } else {\n axesSpec = (layout._table as PivotChart).pivotChartAxes as ITableAxisOption[];\n }\n\n let isZeroAlign = false;\n let isTickAlign = false;\n if (isArray(axesSpec)) {\n const axes: any[] = [];\n axesSpec.forEach((axis: any) => {\n if (orients.includes(axis.orient)) {\n axes.push(axis);\n }\n });\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n if (\n axis.sync &&\n // axis.sync.zeroAlign &&\n axis.sync.axisId &&\n axes.find(axisSync => {\n return axisSync.id === axis.sync.axisId;\n })\n ) {\n // return true;\n isZeroAlign = isZeroAlign || axis.sync.zeroAlign;\n isTickAlign = isTickAlign || axis.sync.tickAlign;\n }\n }\n }\n\n // return false;\n return {\n isZeroAlign,\n isTickAlign\n };\n}\n\nexport function getAxisRange(\n collectedValues: Record>,\n indicatorKeys: string[],\n isZeroAlign: boolean,\n colPath: string,\n seriesId: number | number[]\n): AxisRange | null {\n if (isArray(seriesId)) {\n const range = { min: Infinity, max: -Infinity };\n for (let i = 0; i < seriesId.length; i++) {\n const singleRange = getAxisRange(collectedValues, indicatorKeys, isZeroAlign, colPath, seriesId[i]);\n if (singleRange) {\n range.min = Math.min(range.min, singleRange.min);\n range.max = Math.max(range.max, singleRange.max);\n }\n }\n if (isFinite(range.min) && isFinite(range.max)) {\n return range;\n }\n return null;\n }\n let defaultKey = indicatorKeys?.[seriesId];\n if (isArray(defaultKey)) {\n defaultKey = defaultKey[0];\n }\n if (!defaultKey) {\n return null;\n }\n // const data = collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]\n // ? collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]\n // : collectedValues[defaultKey];\n const data = collectedValues[defaultKey];\n const range = merge({}, (data?.[colPath ?? ''] as { min: number; max: number }) ?? { min: 0, max: 1 });\n\n if (range.positiveMax && range.positiveMax > range.max) {\n range.max = range.positiveMax;\n }\n if (range.negativeMin && range.negativeMin < range.min) {\n range.min = range.negativeMin;\n }\n if (range.min === range.max) {\n if (range.min > 0) {\n range.min = 0;\n } else {\n range.max = 0;\n }\n }\n\n return range;\n}\n\nexport function isTopOrBottomAxis(col: number, row: number, layout: PivotHeaderLayoutMap): boolean {\n if (!layout._table.isPivotChart()) {\n return false;\n }\n\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 顶部副指标轴\n return true;\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 底侧指标轴\n return true;\n }\n } else {\n if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 底部维度轴\n return true;\n }\n }\n return false;\n}\n\nexport function isLeftOrRightAxis(col: number, row: number, layout: PivotHeaderLayoutMap): boolean {\n if (!layout._table.isPivotChart()) {\n return false;\n }\n\n if (layout.indicatorsAsCol) {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 左侧维度轴\n return true;\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 左侧指标轴\n return true;\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 右侧副指标轴\n return true;\n }\n }\n return false;\n}\n\nconst enum Direction {\n vertical = 'vertical',\n horizontal = 'horizontal'\n}\n\n// align with vchart (packages/vchart/src/component/axis/cartesian/util/common.ts)\nfunction transformInverse(spec: any, isHorizontal: boolean) {\n // 这里处理下 direction === 'horizontal' 下的 Y 轴\n // 因为 Y 轴绘制的时候默认是从下至上绘制的,但是在 direction === 'horizontal' 场景下,图表应该是按照从上至下阅读的\n // 所以这里在这种场景下坐标轴会默认 inverse 已达到效果\n let inverse = spec?.inverse;\n if (isHorizontal && !isXAxis(spec?.orient)) {\n inverse = isValid(spec?.inverse) ? !spec?.inverse : true;\n }\n return inverse;\n}\n\ntype IOrientType = 'left' | 'top' | 'right' | 'bottom' | 'z';\nfunction isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function hasLinearAxis(spec: any, tableAxesConfig: any, isHorizontal: boolean, isThisXAxis: boolean): boolean {\n if (!isArray(spec.axes) || spec.axes.length === 0) {\n return (isHorizontal && isThisXAxis) || (!isHorizontal && !isThisXAxis);\n }\n\n for (let i = 0; i < spec.axes.length; i++) {\n const axisSpec = spec.axes[i];\n if (!isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type === 'linear') {\n return true;\n }\n\n if (isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (!isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type === 'linear') {\n return true;\n }\n }\n\n if (isArray(tableAxesConfig) && tableAxesConfig.length > 0) {\n for (let i = 0; i < tableAxesConfig.length; i++) {\n const axisSpec = tableAxesConfig[i];\n if (!isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type === 'linear') {\n return true;\n }\n\n if (isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (!isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type === 'linear') {\n return true;\n }\n }\n }\n\n return (isHorizontal && isThisXAxis) || (!isHorizontal && !isThisXAxis);\n}\n\nfunction getRange(\n position: 'left' | 'right' | 'top' | 'bottom',\n colForAxisOption: number,\n rowForAxisOption: number,\n colForIndicatorKey: number,\n rowForIndicatorKey: number,\n col: number,\n row: number,\n defaultSeriesIndice: number,\n layout: PivotHeaderLayoutMap\n) {\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(colForIndicatorKey, rowForIndicatorKey);\n let path;\n if (position === 'top' || position === 'bottom') {\n path = layout.getColKeysPath(col, row);\n } else {\n path = layout.getRowKeysPath(col, row);\n }\n\n const rangeConfig = getChartAxisRange(\n colForAxisOption,\n rowForAxisOption,\n defaultSeriesIndice,\n position,\n indicatorKeys,\n path,\n layout\n );\n\n if (!rangeConfig) {\n return undefined;\n }\n\n const subAxisPosition =\n position === 'bottom' ? 'top' : position === 'top' ? 'bottom' : position === 'left' ? 'right' : 'left';\n\n const { targetRange, targetTicks } = getTargetRangeAndTicks(\n colForAxisOption,\n rowForAxisOption,\n rangeConfig.index,\n rangeConfig.isZeroAlign,\n rangeConfig.isTickAlign,\n rangeConfig.range,\n indicatorKeys,\n subAxisPosition,\n path,\n layout\n );\n\n if (rangeConfig.index !== 0 && targetTicks) {\n // reset range\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(\n rangeConfig.range.min,\n rangeConfig.range.max,\n // merge({}, rangeConfig.axisOption, { nice: true, tick: { forceTickCount: targetTicks.length } }),\n rangeConfig.axisOption,\n rangeConfig.isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight, // avoid 0, 0 causes NaN\n {\n targetTicks,\n targetRange\n }\n );\n rangeConfig.range.min = newRange[0];\n rangeConfig.range.max = newRange[1];\n rangeConfig.ticks = newTicks;\n }\n\n (rangeConfig as any).targetRange = targetRange;\n (rangeConfig as any).targetTicks = targetTicks;\n\n return rangeConfig as typeof rangeConfig & { targetRange: AxisRange; targetTicks: number[] };\n}\n\nfunction getChartAxisRange(\n col: number,\n row: number,\n index: number,\n position: 'bottom' | 'top' | 'left' | 'right',\n indicatorKeys: string[],\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n const { axisOption, isPercent, isZeroAlign, isTickAlign, seriesIndice, theme, chartType } = getAxisOption(\n col,\n row,\n position,\n layout\n );\n\n // if (axisOption?.visible === false) {\n // return undefined;\n // }\n\n const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, path, seriesIndice ?? index);\n\n if (!range) {\n return undefined;\n }\n\n if (isPercent) {\n range.min = range.min < 0 ? -1 : 0;\n range.max = range.max > 0 ? 1 : 0;\n }\n if (axisOption?.zero || range.min === range.max) {\n range.min = Math.min(range.min, 0);\n range.max = Math.max(range.max, 0);\n }\n let ticks;\n if (axisOption?.nice || isTickAlign) {\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: axisRange, ticks: selfTicks } = getAxisDomainRangeAndLabels(\n range.min,\n range.max,\n axisOption,\n isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight // avoid 0, 0 causes NaN\n );\n if (axisOption?.nice) {\n range.min = axisRange[0];\n range.max = axisRange[1];\n }\n // if (isTickAlign) {\n // }\n ticks = selfTicks;\n }\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n }\n\n return {\n index: seriesIndice ?? index,\n range,\n ticks,\n isZeroAlign,\n isTickAlign,\n axisOption,\n theme,\n chartType\n };\n}\n\nexport function getAxisRangeAndTicks(\n col: number,\n row: number,\n index: number,\n position: 'bottom' | 'top' | 'left' | 'right',\n subAxisPosition: 'bottom' | 'top' | 'left' | 'right',\n indicatorKeys: string[],\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n const { range, isZeroAlign, isTickAlign, axisOption } = getChartAxisRange(\n col,\n row,\n index,\n position,\n indicatorKeys,\n path,\n layout\n );\n const { targetRange, targetTicks } = getTargetRangeAndTicks(\n col,\n row,\n index,\n isZeroAlign,\n isTickAlign,\n range,\n indicatorKeys,\n subAxisPosition,\n path,\n layout\n );\n\n if (index !== 0 && targetTicks) {\n // reset range\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(\n range.min,\n range.max,\n merge({}, axisOption, { nice: true, tick: { forceTickCount: targetTicks.length } }),\n isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight, // avoid 0, 0 causes NaN\n {\n targetTicks,\n targetRange\n }\n );\n range.min = newRange[0];\n range.max = newRange[1];\n // axisOption.ticks = newTicks;\n }\n\n return {\n axisOption,\n range,\n targetTicks,\n targetRange\n };\n}\n\nfunction getTargetRangeAndTicks(\n col: number,\n row: number,\n index: number,\n isZeroAlign: boolean,\n isTickAlign: boolean,\n range: AxisRange,\n indicatorKeys: string[],\n subAxisPosition: 'bottom' | 'top' | 'left' | 'right',\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n let targetTicks: number[];\n let targetRange: {\n max: number;\n min: number;\n };\n\n if (!isZeroAlign && !isTickAlign) {\n return {\n targetTicks,\n targetRange\n };\n }\n\n const subAxisRange = getChartAxisRange(\n col,\n row,\n indicatorKeys.length - 1 - index,\n subAxisPosition,\n indicatorKeys,\n path,\n layout\n );\n if (subAxisRange) {\n const { range: subRange, ticks: subTicks } = subAxisRange;\n targetRange = subRange;\n if (isZeroAlign) {\n const align = getNewRangeToAlign(range, subRange);\n if (align) {\n range.min = align.range1[0];\n range.max = align.range1[1];\n targetRange.min = align.range2[0];\n targetRange.max = align.range2[1];\n }\n }\n if (isTickAlign) {\n if (!isZeroAlign) {\n targetTicks = subTicks;\n } else {\n targetTicks = getZeroAlignTickAlignTicks(targetRange, col, row, index, subAxisPosition, layout);\n }\n }\n }\n\n return {\n targetTicks,\n targetRange\n };\n}\n","import { isArray, isBoolean, isDate, isNumber, isString, isValid, isHTMLElement } from '@visactor/vutils';\nimport { isDataView } from '@visactor/vdataset';\n\n/**\n * 深拷贝 spec,为避免循环引用,DataView 维持原有引用\n * @param spec 原spec\n */\nexport function cloneDeepSpec(spec: any, excludeKeys: string[] = ['data']) {\n const value = spec;\n\n let result;\n if (!isValid(value) || typeof value !== 'object') {\n return value;\n }\n\n // 判断是不是不能深拷贝的对象\n if (isDataView(value) || isHTMLElement(value)) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n if (excludeKeys?.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeepSpec(subValue, excludeKeys);\n }\n }\n }\n\n return result;\n}\n","import { degreeToRadian, isEmpty, merge } from '@visactor/vutils';\n\nexport function transformLegendTitleAttributes(title: any) {\n const transformedTitle = {\n ...title\n };\n if (!isEmpty(title.style)) {\n transformedTitle.textStyle = transformToGraphic(title.style);\n }\n if (!isEmpty(title.textStyle)) {\n merge(transformedTitle.textStyle, transformToGraphic(title.textStyle));\n }\n\n if (title.shape?.style) {\n transformToGraphic(transformedTitle.shape.style);\n }\n\n if (title.background?.style) {\n transformToGraphic(transformedTitle.background.style);\n }\n return transformedTitle;\n}\n\nexport function transformToGraphic(style: any) {\n if (isEmpty(style)) {\n return style;\n }\n if (style.angle) {\n style.angle = degreeToRadian(style.angle);\n }\n\n return style;\n}\n\nexport function transformComponentStyle(cfg: any = {}) {\n if (!isEmpty(cfg.style)) {\n cfg.style = transformToGraphic(cfg.style);\n }\n\n if (!isEmpty(cfg.state)) {\n Object.keys(cfg.state).forEach(key => {\n if (!isEmpty(cfg.state[key])) {\n cfg.state[key] = transformToGraphic(cfg.state[key]);\n }\n });\n }\n\n return cfg;\n}\n\nexport function transformStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n Object.keys(stateStyle).forEach(key => {\n if (!isEmpty(stateStyle[key])) {\n stateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return stateStyle;\n}\n\nexport function transformAxisLineStyle(lineCfg: any) {\n transformComponentStyle(lineCfg);\n transformComponentStyle(lineCfg.startSymbol);\n transformComponentStyle(lineCfg.endSymbol);\n\n return lineCfg;\n}\n","import { degreeToRadian, isNil, merge, pickWithout } from '@visactor/vutils';\nimport { transformAxisLineStyle, transformStateStyle, transformToGraphic } from '../util/transform';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\n\nconst DEFAULT_TITLE_STYLE = {\n left: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n right: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n radius: {},\n angle: {}\n};\n\nexport const DEFAULT_TEXT_FONT_FAMILY =\n // eslint-disable-next-line max-len\n 'PingFang SC,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif, apple color emoji,segoe ui emoji,segoe ui symbol';\n\nexport const DEFAULT_TEXT_FONT_SIZE = 14;\n\nexport const THEME_CONSTANTS = {\n FONT_FAMILY: DEFAULT_TEXT_FONT_FAMILY,\n LABEL_FONT_SIZE: DEFAULT_TEXT_FONT_SIZE,\n MAP_LABEL_FONT_SIZE: 10,\n TITLE_FONT_SIZE: 18,\n AXIS_TICK_SIZE: 4\n};\n\nexport const commonAxis = {\n domainLine: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n grid: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#EBEDF2',\n strokeOpacity: 1,\n lineDash: [] as any[]\n }\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: '#EBEDF2',\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n },\n tick: {\n visible: true,\n tickSize: THEME_CONSTANTS.AXIS_TICK_SIZE,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n tickSize: THEME_CONSTANTS.AXIS_TICK_SIZE / 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n label: {\n visible: true,\n space: 1, // hack: VChart中为0,为了方便fs调试暂时改为1\n style: {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE,\n fill: '#89909D',\n fontWeight: 'normal',\n fillOpacity: 1\n },\n autoLimit: true\n },\n title: {\n space: 10,\n style: {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport function getCommonAxis(theme: any) {\n if (!theme?.colorScheme?.default?.palette) {\n return commonAxis;\n }\n return merge({}, commonAxis, {\n tick: {\n style: {\n stroke: theme.colorScheme.default.palette.axisDomainColor || '#D9DDE4'\n }\n },\n subTick: {\n style: {\n stroke: theme.colorScheme.default.palette.axisDomainColor || '#D9DDE4'\n }\n },\n label: {\n style: {\n fill: theme.colorScheme.default.palette.axisLabelFontColor || '#89909D'\n }\n },\n title: {\n style: {\n fill: theme.colorScheme.default.palette.secondaryFontColor || '#333333'\n }\n }\n });\n}\n\nexport function getAxisAttributes(option: ICellAxisOption) {\n const spec = merge({}, option);\n // const spec = option;\n let titleAngle = spec.title?.angle ?? 0;\n let titleTextStyle;\n if (spec.orient === 'left' || spec.orient === 'right') {\n // 处理纵轴的标题样式\n if (spec.title?.autoRotate && isNil(spec.title.angle)) {\n titleAngle = spec.orient === 'left' ? -90 : 90;\n titleTextStyle = DEFAULT_TITLE_STYLE[spec.orient];\n }\n }\n\n const labelSpec = pickWithout(spec.label, ['style', 'formatMethod', 'state']);\n\n return {\n orient: spec.orient,\n select: spec.select,\n hover: spec.hover,\n line: transformAxisLineStyle(spec.domainLine),\n label: {\n style:\n // isFunction(spec.label.style)\n // ? (datum: Datum, index: number) => {\n // const style = this._preprocessSpec(spec.label.style(datum.rawValue, index, datum));\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.label?.style, style)));\n // }\n // :\n transformToGraphic(spec.label.style),\n formatMethod: spec.label.formatMethod\n ? (value: any, datum: any, index: number) => {\n return spec.label.formatMethod(datum.rawValue, datum);\n }\n : null,\n state: transformStateStyle(spec.label.state),\n ...labelSpec\n },\n tick: {\n visible: spec.tick.visible,\n length: spec.tick.tickSize,\n inside: spec.tick.inside,\n alignWithLabel: spec.tick.alignWithLabel,\n style:\n // isFunction(spec.tick.style)\n // ? (datum: Datum, index: number) => {\n // const style = this._preprocessSpec(spec.tick.style(datum.rawValue, index, datum));\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.tick?.style, style)));\n // }\n // :\n transformToGraphic(spec.tick.style),\n state: transformStateStyle(spec.tick.state),\n dataFilter: spec.tick.dataFilter\n },\n subTick: {\n visible: spec.subTick.visible,\n length: spec.subTick.tickSize,\n inside: spec.subTick.inside,\n count: spec.subTick.tickCount,\n style: transformToGraphic(spec.subTick.style),\n state: transformStateStyle(spec.subTick.state)\n },\n grid: {\n type: 'line',\n visible: spec.grid.visible,\n alternateColor: spec.grid.alternateColor,\n alignWithLabel: spec.grid.alignWithLabel,\n style:\n // isFunction(spec.grid.style)\n // ? (datum: Datum, index: number) => {\n // const style = spec.grid.style(datum.datum?.rawValue, index, datum.datum);\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.grid?.style, style)));\n // }\n // :\n transformToGraphic(spec.grid.style)\n },\n subGrid: {\n type: 'line',\n visible: spec.subGrid.visible,\n alternateColor: spec.subGrid.alternateColor,\n style: transformToGraphic(spec.subGrid.style)\n },\n title: {\n visible: spec.title.visible,\n position: spec.title.position,\n space: spec.title.space,\n autoRotate: false, // 默认不对外提供该配置\n angle: titleAngle ? degreeToRadian(titleAngle) : null,\n textStyle: merge({}, titleTextStyle, transformToGraphic(spec.title.style)),\n padding: spec.title.padding,\n shape: {\n visible: spec.title.shape?.visible,\n space: spec.title.shape?.space,\n style: transformToGraphic(spec.title.shape?.style)\n },\n background: {\n visible: spec.title.background?.visible,\n style: transformToGraphic(spec.title.background?.style)\n },\n state: {\n text: transformStateStyle(spec.title.state),\n shape: transformStateStyle(spec.title.shape?.state),\n background: transformStateStyle(spec.title.background?.state)\n }\n },\n panel: {\n visible: spec.background?.visible,\n style: transformToGraphic(spec.background?.style),\n state: transformStateStyle(spec.background?.state)\n }\n };\n}\n","import { cloneDeep, isArray, isNumber, merge } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../simple-header-layout';\nimport { getAxisOption, getAxisRange, getAxisRangeAndTicks } from './get-axis-config';\nimport { getNewRangeToAlign } from './zero-align';\nimport type { IChartIndicator, IIndicator } from '../../ts-types';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { Factory } from '../../core/factory';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\nimport { DEFAULT_TEXT_FONT_SIZE } from '../../components/axis/get-axis-attributes';\nimport { convertDomainToTickData } from '@visactor/vrender-components';\nimport { getTickModeFunction, getZeroAlignTickAlignTicks } from './tick-align';\n\nconst NO_AXISID_FRO_VTABLE = 'NO_AXISID_FRO_VTABLE';\n\nexport function getRawChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const chartSpec = indicatorObj?.chartSpec;\n\n if (typeof chartSpec === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: layout._table.getCellOriginValue(col, row) || '',\n value: layout._table.getCellValue(col, row) || '',\n rect: layout._table.getCellRangeRelativeRect(layout._table.getCellRange(col, row)),\n table: layout._table\n };\n return chartSpec(arg);\n }\n return chartSpec;\n}\nexport function isShareChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const chartSpec = indicatorObj?.chartSpec;\n\n if (typeof chartSpec === 'function') {\n return false;\n }\n return true;\n}\nexport function isNoChartDataRenderNothing(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const noDataRenderNothing = indicatorObj?.noDataRenderNothing;\n\n return noDataRenderNothing;\n}\n/** 检查是否有直角坐标系的图表 */\nexport function checkHasCartesianChart(indicatorsDefine: (IIndicator | IChartIndicator | string)[]) {\n let isHasCartesianChart = false;\n for (let i = 0; i < indicatorsDefine.length; i++) {\n //columnObjects数量和指标数量一样 并不是每个列都有 所有会快一些\n const columnObj = indicatorsDefine[i] as IChartIndicator;\n if (columnObj.chartSpec) {\n if (\n columnObj.chartSpec.type !== 'wordCloud' &&\n columnObj.chartSpec.type !== 'radar' &&\n columnObj.chartSpec.type !== 'gauge' &&\n columnObj.chartSpec.type !== 'pie' &&\n columnObj.chartSpec.type !== 'funnel' &&\n columnObj.chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n break;\n }\n }\n }\n return isHasCartesianChart;\n}\n\n/** 检查是否有直角坐标系的图表 */\nexport function isCartesianChart(col: number, row: number, layout: PivotHeaderLayoutMap) {\n let isHasCartesianChart = true;\n const chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (\n chartSpec.type === 'pie' ||\n chartSpec.type === 'radar' ||\n chartSpec.type === 'gauge' ||\n chartSpec.type === 'wordCloud' ||\n chartSpec.type === 'funnel' ||\n chartSpec.type === 'rose'\n ) {\n isHasCartesianChart = false;\n }\n } else {\n isHasCartesianChart = false;\n }\n return isHasCartesianChart;\n}\n\n/** 检查是否有直角坐标系的图表 整行或者整列去检查 */\nexport function isHasCartesianChartInline(\n col: number,\n row: number,\n checkDirection: 'col' | 'row',\n layout: PivotHeaderLayoutMap\n) {\n let isHasCartesianChart = false;\n if ((layout.indicatorsAsCol && checkDirection === 'row') || (!layout.indicatorsAsCol && checkDirection === 'col')) {\n for (let i = 0; i < layout.indicatorsDefine.length; i++) {\n //columnObjects数量和指标数量一样 并不是每个列都有 所有会快一些\n const columnObj = layout.indicatorsDefine[i] as IChartIndicator;\n if (columnObj.chartSpec) {\n if (\n columnObj.chartSpec.type !== 'pie' &&\n columnObj.chartSpec.type !== 'wordCloud' &&\n columnObj.chartSpec.type !== 'radar' &&\n columnObj.chartSpec.type !== 'gauge' &&\n columnObj.chartSpec.type !== 'funnel' &&\n columnObj.chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n break;\n }\n }\n }\n } else {\n const chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (\n chartSpec.type !== 'pie' &&\n chartSpec.type !== 'radar' &&\n chartSpec.type !== 'gauge' &&\n chartSpec.type !== 'wordCloud' &&\n chartSpec.type !== 'funnel' &&\n chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n }\n } else {\n isHasCartesianChart = false;\n }\n }\n return isHasCartesianChart;\n}\n\nexport function getChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n let chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (layout._table.isPivotChart()) {\n chartSpec = cloneDeepSpec(chartSpec);\n chartSpec.sortDataByAxis = true;\n if (isArray(chartSpec.series)) {\n chartSpec.series.forEach((serie: any) => {\n serie.sortDataByAxis = true;\n });\n }\n if (chartSpec.type !== 'gauge' && chartSpec.type !== 'rose' && chartSpec.type !== 'radar') {\n chartSpec.axes = layout.getChartAxes(col, row);\n }\n chartSpec.padding = 0;\n chartSpec.dataZoom = []; // Do not support datazoom temply\n return chartSpec;\n }\n return chartSpec;\n }\n return null;\n}\n\nexport function getChartAxes(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const axes: any[] = [];\n if (layout.indicatorsAsCol) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n // const colIndex = layout.getRecordIndexByCol(col);\n const colPath = layout.getColKeysPath(col, row);\n indicatorKeys.forEach((key, index) => {\n const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(\n col,\n row,\n index,\n index === 0 ? 'bottom' : 'top',\n index === 0 ? 'top' : 'bottom',\n indicatorKeys,\n colPath,\n layout\n );\n if (isNumber(axisOption?.min)) {\n (range as any).min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n (range as any).max = axisOption.max;\n }\n\n if (hasSameAxis(axisOption, axes)) {\n return;\n }\n\n axes.push(\n merge(\n {\n range,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n type: axisOption?.type || 'linear',\n orient: index === 0 ? 'bottom' : 'top',\n // visible: true,\n label: { visible: false, flush: true },\n // label: { flush: true },\n title: { visible: false },\n domainLine: { visible: false },\n seriesIndex: axisOption?.seriesId ? undefined : index,\n // height: -1,\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n sync: { axisId: NO_AXISID_FRO_VTABLE } // hack for fs\n }\n )\n );\n });\n\n let rowDimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n if (isArray(rowDimensionKey)) {\n rowDimensionKey = rowDimensionKey[0];\n }\n const data =\n layout.dataset.cacheCollectedValues[rowDimensionKey] ||\n layout.dataset.collectedValues[rowDimensionKey] ||\n ([] as string[]);\n const rowPath = layout.getRowKeysPath(col, row);\n const domain = (data as any)[rowPath ?? ''] as Set;\n const { axisOption, isPercent, chartType } = getAxisOption(col, row, 'left', layout);\n axes.push(\n // 左侧维度轴\n merge(\n {\n // domain: chartType === 'scatter' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n domain: axisOption?.type === 'linear' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n // range: chartType === 'scatter' && !Array.isArray(domain) ? domain : undefined,\n range: axisOption?.type === 'linear' && !Array.isArray(domain) ? domain : undefined,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n // type: chartType === 'scatter' && !Array.isArray(domain) ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n orient: 'left',\n // visible: true,\n label: { visible: false },\n domainLine: { visible: false },\n tick: { visible: false },\n subTick: { visible: false },\n title: { visible: false }\n // height: -1,\n // width: -1\n // autoIndent: false,\n }\n )\n );\n } else {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n const rowPath = layout.getRowKeysPath(col, row);\n indicatorKeys.forEach((key, index) => {\n const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(\n col,\n row,\n index,\n index === 0 ? 'left' : 'right',\n index === 0 ? 'right' : 'left',\n indicatorKeys,\n rowPath,\n layout\n );\n if (isNumber(axisOption?.min)) {\n (range as any).min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n (range as any).max = axisOption.max;\n }\n\n if (hasSameAxis(axisOption, axes)) {\n return;\n }\n\n axes.push(\n merge(\n {\n range,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n type: axisOption?.type || 'linear',\n orient: index === 0 ? 'left' : 'right',\n // visible: true,\n label: { visible: false, flush: true },\n // label: { flush: true },\n title: { visible: false },\n domainLine: { visible: false },\n seriesIndex: axisOption?.seriesId ? undefined : index,\n // width: -1,\n // grid: index === 0 ? undefined : { visible: false }\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n sync: { axisId: NO_AXISID_FRO_VTABLE } // hack for fs\n }\n )\n );\n });\n\n let columnDimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n if (isArray(columnDimensionKey)) {\n columnDimensionKey = columnDimensionKey[0];\n }\n const data =\n layout.dataset.cacheCollectedValues[columnDimensionKey] ||\n layout.dataset.collectedValues[columnDimensionKey] ||\n ([] as string[]);\n const colPath = layout.getColKeysPath(col, row);\n const domain: string[] | Set = ((data as any)?.[colPath ?? ''] as Set) ?? [];\n\n const { axisOption, isPercent, chartType } = getAxisOption(col, row, 'bottom', layout);\n axes.push(\n // 底部维度轴\n merge(\n {\n // domain: chartType === 'scatter' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n domain: axisOption?.type === 'linear' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n // range: chartType === 'scatter' && !Array.isArray(domain) ? domain : undefined,\n range: axisOption?.type === 'linear' && !Array.isArray(domain) ? domain : undefined,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n // type: chartType === 'scatter' && !Array.isArray(domain) ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n orient: 'bottom',\n visible: true,\n label: { visible: false },\n domainLine: { visible: false },\n tick: { visible: false },\n subTick: { visible: false },\n title: { visible: false }\n // height: -1\n // autoIndent: false,\n }\n )\n );\n }\n return axes;\n}\n/**\n * 获取单元格对应spec的dataId。\n * 如果是spec外层的dataId,则是string,否则通过series获取到的是Record => \n * @param col\n * @param row\n * @param layout\n * @returns\n */\nexport function getChartDataId(\n col: number,\n row: number,\n layout: PivotHeaderLayoutMap | SimpleHeaderLayoutMap\n): string | Record {\n const chartSpec = layout.getRawChartSpec(col, row);\n // 如果chartSpec配置了组合图 series 则需要考虑 series中存在的多个指标\n if (chartSpec?.series) {\n const dataIdfield: Record = {};\n\n if (chartSpec.data?.id) {\n dataIdfield[chartSpec.data.id] = undefined;\n }\n chartSpec?.series.forEach((seriesSpec: any) => {\n if (!seriesSpec.data?.fromDataId) {\n if (!seriesSpec.data?.transforms) {\n const seriesField = seriesSpec.direction === 'horizontal' ? seriesSpec.xField : seriesSpec.yField;\n dataIdfield[seriesSpec.data?.id ?? chartSpec.data?.id ?? 'data'] = seriesSpec.data?.id\n ? seriesField\n : undefined;\n } else {\n dataIdfield[seriesSpec.data?.id ?? chartSpec.data?.id ?? 'data'] = undefined;\n }\n }\n });\n return dataIdfield;\n }\n return chartSpec.data.id;\n}\n\n/** 检查是否有直角坐标系的图表 */\nexport function checkHasChart(layout: PivotHeaderLayoutMap | SimpleHeaderLayoutMap) {\n let isHasChart = false;\n for (let i = 0; i < layout.columnObjects.length; i++) {\n const columnObj = layout.columnObjects[i];\n if (columnObj.chartSpec) {\n isHasChart = true;\n break;\n }\n }\n return isHasChart;\n}\n\nfunction hasSameAxis(axisOption: any, axes: any[]) {\n if (axisOption && isArray(axisOption.seriesId) && axisOption.seriesId.length > 0) {\n // find same seriesId axes\n const sameSeriesIdAxes = (axes as any[]).filter(axis => {\n // same seriesId\n if (\n axis.orient === axisOption.orient &&\n axis.seriesId &&\n axis.seriesId.length === axisOption.seriesId.length &&\n axis.seriesId.every((id: string, index: number) => id === axisOption.seriesId[index])\n ) {\n return true;\n }\n return false;\n });\n\n if (sameSeriesIdAxes.length > 0) {\n // has same seriesId axes\n return true;\n }\n }\n return false;\n}\n","import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record, arr: Record[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: T extends AggregationType.RECORD ? string[] | string : string;\n aggregationType: T;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule[];\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n};\nexport type CollectedValue = { max?: number; min?: number } | Array;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n","import { isValid } from '@visactor/vutils';\n\nconst indexFirst = (arr: number[], elm: number): number => {\n let low = 0;\n let high = arr.length - 1;\n while (low <= high) {\n const i = Math.floor((low + high) / 2);\n if (arr[i] === elm) {\n return i;\n } else if (arr[i] > elm) {\n high = i - 1;\n } else {\n low = i + 1;\n }\n }\n return high < 0 ? 0 : high;\n};\n\nexport class NumberMap {\n private _keys: number[] = [];\n private _vals: { [key: number]: T } = {};\n private _sorted = false;\n count() {\n return this._keys.length;\n }\n values() {\n return this._vals;\n }\n valueArr() {\n return Object.values(this._vals);\n }\n /**\n * 将sourceIndex位置开始 往后moveCount个值 调整到targetIndex位置处\n * @param sourceIndex\n * @param targetIndex\n * @param moveCount\n */\n adjustOrder(sourceIndex: number, targetIndex: number, moveCount: number) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex + moveCount - 1); i >= 0; i--) {\n const key = keys[i];\n if (key >= sourceIndex) {\n sourceVals.push(this.get(key));\n } else if (targetIndex <= key && key < sourceIndex) {\n this.put(key + moveCount, this.get(key));\n } else if (key < targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[moveCount - 1 - i]);\n }\n }\n const { length } = keys;\n if (sourceIndex < targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < length; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + moveCount) {\n sourceVals.push(this.get(key));\n } else if (sourceIndex + moveCount <= key && key <= targetIndex) {\n this.put(key - moveCount, this.get(key));\n } else if (key > targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[i]);\n }\n }\n }\n exchangeOrder(\n sourceIndex: number,\n sourceCount: number,\n targetIndex: number,\n targetCount: number,\n insertIndex: number\n ) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, targetIndex); i < indexFirst(keys, sourceIndex) + sourceCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(insertIndex + sourceCount + i, targetVals[i]);\n }\n } else {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < indexFirst(keys, targetIndex) + targetCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(sourceIndex + i, targetVals[i]);\n }\n }\n }\n del(key: number): void {\n delete this._vals[key];\n const index = this._keys.indexOf(key);\n if (index !== -1) {\n this._keys.splice(index, 1); // 使用 splice() 方法删除指定索引位置的元素\n }\n }\n put(key: number, value: T): void {\n if (!(key in this._vals)) {\n this._keys.push(key);\n this._sorted = false;\n }\n this._vals[key] = value;\n }\n get(key: number): T | undefined {\n return this._vals[key];\n }\n has(key: number): boolean {\n return isValid(this._vals[key]);\n }\n contain(value: T): boolean {\n return Object.values(this._vals).indexOf(value) >= 0;\n }\n each(keyFrom: number, keyTo: number, fn: (t: T, k: number) => boolean | void): void {\n const { _keys: keys } = this;\n const { length } = keys;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n\n for (let i = indexFirst(keys, keyFrom); i < length; i++) {\n const key = keys[i];\n if (keyFrom <= key && key <= keyTo) {\n const callRes = fn(this.get(key) as T, key);\n if (callRes === false) {\n break;\n }\n } else if (keyTo < key) {\n return;\n }\n }\n }\n clear() {\n this._keys.length = 0;\n this._vals = {};\n this._sorted = false;\n }\n\n getLastIndex() {\n return this._keys[this._keys.length - 1];\n }\n\n delLast() {\n const lastIndex = this.getLastIndex();\n this.del(lastIndex);\n }\n\n delAndReorder(index: number) {\n if (!this.has(index)) {\n return;\n }\n const lastIndex = this.getLastIndex();\n\n this.adjustOrder(index + 1, index, lastIndex - index);\n this.delLast();\n }\n\n addAndReorder(index: number, newValue?: T) {\n const lastIndex = this.getLastIndex();\n this.adjustOrder(index, index + 1, lastIndex - index);\n if (isValid(newValue)) {\n this.put(index, newValue);\n }\n }\n}\n","import { cloneDeep, isValid } from '@visactor/vutils';\nimport { NumberMap } from '../tools/NumberMap';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport type { Either } from '../tools/helper';\nimport type {\n CellInfo,\n ColumnIconOption,\n FieldData,\n HeaderData,\n ICustomRender,\n IDimension,\n IDimensionInfo,\n IHeaderTreeDefine,\n IIndicator,\n IRowDimension,\n LayoutObjectId\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type { PivotHeaderLayoutMap } from './pivot-header-layout';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n// import { sharedVar } from './pivot-header-layout';\n\ninterface ITreeLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: ITreeLayoutHeadNode[] | undefined;\n columns?: any; //兼容ListTable情况 simple-header-layout中增加了columnTree\n level: number;\n /** 节点跨占层数 如汇总节点跨几层维度 */\n levelSpan: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\n\ninterface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {\n dimensionKey: string;\n virtual?: boolean;\n}\ninterface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {\n indicatorKey: string;\n hide?: boolean;\n}\nexport type ITreeLayoutHeadNode = Either;\nexport class DimensionTree {\n sharedVar: { seqId: number };\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n hasHideNode = false;\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: ITreeLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n levelSpan: 1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map = new Map();\n // blockEndIndexMap: Map = new Map();\n dimensionKeys: NumberMap = new NumberMap();\n dimensionKeysIncludeVirtual: NumberMap = new NumberMap();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n cache: Map = new Map();\n constructor(\n tree: ITreeLayoutHeadNode[],\n sharedVar: { seqId: number },\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.sharedVar = sharedVar;\n this.reset(tree);\n }\n\n reset(tree: ITreeLayoutHeadNode[]) {\n this.hasHideNode = false;\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.cache.clear();\n this.dimensionKeys = new NumberMap();\n this.dimensionKeysIncludeVirtual = new NumberMap();\n this.tree.children = tree as ITreeLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n // this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n if (node.hide) {\n this.hasHideNode = true;\n }\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n if (\n !node.virtual &&\n !this.dimensionKeys.contain(\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n )\n ) {\n this.dimensionKeys.put(\n (node as any).level,\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n );\n }\n if (\n !this.dimensionKeysIncludeVirtual.contain(\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n )\n ) {\n this.dimensionKeysIncludeVirtual.put(\n (node as any).level,\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n );\n }\n if (!(node as any).id) {\n (node as any).id = ++this.sharedVar.seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n const children = node.children || node.columns;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (children?.length >= 1) {\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n this.setTreeNode(n, size, node);\n });\n } else if (\n !node.hierarchyState &&\n node.level + 1 < this.rowExpandLevel &&\n (children?.length >= 1 || children === true)\n ) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else if (children?.length >= 1 || children === true) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n getTreePathByCellIds(ids: LayoutObjectId[]): Array {\n const path: any[] = [];\n let nodes = this.tree.children;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const pathNode = this.findNodeById(nodes, id);\n if (pathNode) {\n path.push(pathNode);\n nodes = pathNode.children;\n } else {\n break;\n }\n }\n // path.shift();\n return path;\n }\n findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: ITreeLayoutHeadNode, path: Array, maxDeep: number) {\n if (!node) {\n return;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return;\n }\n path.push(node);\n if (!node.children || node.children.length === 0 || node.level >= maxDeep) {\n return;\n }\n\n // const cIndex = index - node.startIndex;\n // for (let i = 0; i < node.children.length; i++) {\n // const element = node.children[i];\n // if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n // this.searchPath(cIndex, element, path, maxDeep);\n // break;\n // }\n // }\n\n // use dichotomy to optimize search performance\n const cIndex = index - node.startIndex;\n\n if (this.cache.has(node.level + 1)) {\n const cacheNode = this.cache.get(node.level + 1);\n if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) {\n this.searchPath(cIndex, cacheNode, path, maxDeep);\n return;\n }\n }\n\n let left = 0;\n let right = node.children.length - 1;\n\n while (left <= right) {\n const middle = Math.floor((left + right) / 2);\n const element = node.children[middle];\n\n if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n this.cache.set(element.level, element);\n const deleteLevels: number[] = [];\n this.cache.forEach((node, key) => {\n if (key > element.level) {\n deleteLevels.push(key);\n }\n });\n deleteLevels.forEach(key => {\n this.cache.delete(key);\n });\n this.searchPath(cIndex, element, path, maxDeep);\n break;\n } else if (cIndex < element.startIndex) {\n right = middle - 1;\n } else {\n left = middle + 1;\n }\n }\n return;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: ITreeLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: ITreeLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n const children = node.children || node.columns;\n if (children && node.level < level) {\n parNode = node;\n for (let i = 0; i < children.length; i++) {\n if (\n (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size) ||\n (targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size)\n ) {\n findTargetNode(children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const children = parNode.children || parNode.columns;\n const sourceColumns = children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(children, sourceColumns);\n }\n /** 获取纯净树结构 没有level size index这些属性 */\n getCopiedTree() {\n const children = cloneDeep(this.tree.children);\n clearNode(children);\n return children;\n }\n}\n\n//#region 为方法getLayoutRowTree提供的类型和工具方法\nexport type LayouTreeNode = {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children?: LayouTreeNode[];\n};\n\nexport function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]) {\n children?.forEach((node: ITreeLayoutHeadNode) => {\n const diemnsonNode: {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n virtual?: boolean;\n hierarchyState: HierarchyState;\n children: ITreeLayoutHeadNode[];\n levelSpan: number;\n } = {\n dimensionKey: node.dimensionKey,\n indicatorKey: node.indicatorKey,\n value: node.value,\n hierarchyState: node.hierarchyState,\n children: undefined,\n virtual: node.virtual ?? false,\n levelSpan: node.levelSpan ?? 1\n };\n tree.push(diemnsonNode);\n if (node.children) {\n diemnsonNode.children = [];\n generateLayoutTree(diemnsonNode.children, node.children);\n }\n });\n}\n//#endregion\n\n//#region 为方法getLayoutRowTreeCount提的工具方法\nexport function countLayoutTree(children: { children?: any }[], countParentNode: boolean) {\n let count = 0;\n children?.forEach((node: ITreeLayoutHeadNode) => {\n if (countParentNode) {\n count++;\n } else {\n if (!node.children || node.children.length === 0) {\n count++;\n }\n }\n if (node.children) {\n count += countLayoutTree(node.children, countParentNode);\n }\n });\n return count;\n}\n//#endregion\n\nexport function dealHeader(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n layoutMap: PivotHeaderLayoutMap\n // totalLevel: number,\n // indicatorKeys: string[]\n) {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (layoutMap.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (layoutMap.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value && !hd.dimensionKey;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo?.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: hd,\n define: Object.assign({}, hd, indicatorInfo ?? Object.assign({}, dimensionInfo, { sort: undefined })),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n sort: indicatorInfo?.sort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n noDataRenderNothing: 'noDataRenderNothing' in indicatorInfo ? indicatorInfo.noDataRenderNothing : false,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // layoutMap.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // layoutMap.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n layoutMap._headerObjects[id] = cell;\n // //这个if判断处理上层维度和指标之间跨级的情况。即表头可能总共有5层,但是有的节点从跟到指标只有三级,那么合并单元格之前是指标单元格跨了三个单元格,现在处理成最后一个维度单元格跨三个单元格\n // if (\n // ((hd as any).levelSpan ?? 0) <= 1 &&\n // row < totalLevel - 1 &&\n // hd.indicatorKey &&\n // indicatorKeys.includes(hd.indicatorKey) &&\n // (hd.children?.length ?? 0) === 0\n // ) {\n // const newRoots = [...roots];\n // const lastId = newRoots[row - 1] ?? id;\n // for (; row < totalLevel - 1; row++) {\n // if (!_headerCellIds[row]) {\n // _headerCellIds[row] = [];\n // }\n // _headerCellIds[row][layoutMap.colIndex] = lastId;\n // newRoots[row] = lastId;\n // }\n // for (let r = row - 1; r >= 0; r--) {\n // _headerCellIds[r][layoutMap.colIndex] = newRoots[r];\n // }\n // if (!_headerCellIds[row]) {\n // _headerCellIds[row] = [];\n // }\n // } else {\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n // }\n _headerCellIds[row][layoutMap.colIndex] = id;\n\n // 处理汇总小计跨维度层级的情况\n if ((hd as any).levelSpan > 1) {\n for (let i = 1; i < (hd as any).levelSpan; i++) {\n if (!_headerCellIds[row + i]) {\n _headerCellIds[row + i] = [];\n // 当行前几个没有赋值的id 赋值\n for (let col = 0; col < layoutMap.colIndex; col++) {\n _headerCellIds[row + i][col] = _headerCellIds[row][col];\n }\n }\n _headerCellIds[row + i][layoutMap.colIndex] = id;\n }\n }\n\n if ((hd as ITreeLayoutHeadNode).children?.length >= 1) {\n layoutMap._addHeaders(\n _headerCellIds,\n row + ((hd as any).levelSpan ?? 1),\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, ...Array((hd as any).levelSpan ?? 1).fill(id)],\n results\n // totalLevel,\n // indicatorKeys\n );\n // .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n\n // if ((hd as any).levelSpan > 1) {\n // for (let i = 1; i < (hd as any).levelSpan; i++) {\n // _headerCellIds[r + i][layoutMap.colIndex] = id;\n // }\n // }\n }\n layoutMap.colIndex++;\n }\n}\n\nexport function dealHeaderForTreeMode(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n layoutMap: PivotHeaderLayoutMap\n) {\n const id = hd.id;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension;\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo.title,\n field: hd.dimensionKey as FieldData,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle, { textAlign: 'left' }),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n define: Object.assign(hd, {\n linkJump: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.linkJump,\n linkDetect: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.linkDetect,\n templateLink: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: ((indicatorInfo ?? dimensionInfo) as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: ((indicatorInfo ?? dimensionInfo) as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: (indicatorInfo ?? dimensionInfo)?.headerCustomRender,\n headerCustomLayout: (indicatorInfo ?? dimensionInfo)?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader,\n disableHeaderHover: !!(indicatorInfo ?? dimensionInfo)?.disableHeaderHover,\n disableHeaderSelect: !!(indicatorInfo ?? dimensionInfo)?.disableHeaderSelect,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n hide: indicatorInfo?.hide\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey as string,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.hierarchyState, //hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n parentCellId: roots[roots.length - 1]\n };\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n noDataRenderNothing: 'noDataRenderNothing' in indicatorInfo ? indicatorInfo.noDataRenderNothing : false,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, hd)\n });\n }\n }\n results[id] = cell;\n // this._cellIdDiemnsionMap.set(id, {\n // dimensionKey: hd.dimensionKey,\n // value: hd.value\n // });\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as ITreeLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand, //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n dimensions,\n results\n );\n // .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && layoutMap.colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n }\n }\n}\n\nfunction clearNode(children: any) {\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n delete node.level;\n delete node.startIndex;\n delete node.id;\n delete node.levelSpan;\n delete node.size;\n delete node.startInTotal;\n const childrenNew = node.children || node.columns;\n if (childrenNew) {\n clearNode(childrenNew);\n }\n }\n}\n\nexport function deleteTreeHideNode(\n tree_children: LayouTreeNode[],\n dimensionPath: IDimensionInfo[],\n indicators: IIndicator[],\n hasHideNode: boolean,\n table: BaseTableAPI\n) {\n for (let i = tree_children.length - 1; i >= 0; i--) {\n const node = tree_children[i];\n dimensionPath.push(node);\n if (hasHideNode && (node as any).hide) {\n tree_children.splice(i, 1);\n } else if (node.indicatorKey) {\n const hide = indicators?.find(indicator => indicator.indicatorKey === node.indicatorKey)?.hide;\n if (typeof hide === 'function') {\n if (hide({ dimensionPaths: dimensionPath, table })) {\n tree_children.splice(i, 1);\n }\n } else if (hide) {\n tree_children.splice(i, 1);\n }\n } else if (node.children && node.children.length > 0) {\n deleteTreeHideNode(node.children, dimensionPath, indicators, hasHideNode, table);\n }\n dimensionPath.pop();\n }\n}\n","import { isArray, isString } from '@visactor/vutils';\nimport type { PivotTable } from '../PivotTable';\nimport { AggregationType } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type {\n Aggregation,\n IHeaderTreeDefine,\n IIndicator,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from '../ts-types';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\nimport type { IChartColumnIndicator } from '../ts-types/pivot-table/indicator/chart-indicator';\nimport type { SimpleHeaderLayoutMap } from './simple-header-layout';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport type { IImageColumnIndicator, IImageHeaderIndicator } from '../ts-types/pivot-table/indicator/image-indicator';\nimport type { IImageColumnBodyDefine, IImageHeaderDefine } from '../ts-types/list-table/define/image-define';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport { deleteTreeHideNode, DimensionTree } from './tree-helper';\nimport type { ISparklineColumnIndicator } from '../ts-types/pivot-table/indicator/sparkline-indicator';\n\nexport function checkHasAggregation(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkHasAggregationOnTop(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array).filter(item => item.showOnTop).length\n );\n } else if (((column as ColumnData).aggregation as Aggregation).showOnTop) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n\nexport function checkHasAggregationOnBottom(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array).filter(item => !item.showOnTop).length\n );\n } else if (!((column as ColumnData).aggregation as Aggregation).showOnTop) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n\nexport function checkHasTreeDefine(layoutMap: SimpleHeaderLayoutMap) {\n if (layoutMap._table.options.groupBy) {\n return true;\n }\n const { columns } = layoutMap._table.options as ListTableConstructorOptions;\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n if (isString(column)) {\n continue;\n }\n if (column.tree) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasAutoImageColumn(table: BaseTableAPI) {\n const { columns, rows, indicators } = table.options as PivotTableConstructorOptions;\n if (table.isPivotTable()) {\n // pivot table\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n if (isString(column)) {\n continue;\n }\n if (\n (column.headerType === 'image' || column.headerType === 'video' || typeof column.headerType === 'function') &&\n (column as IImageDimension).imageAutoSizing\n ) {\n return true;\n }\n }\n }\n if (isArray(rows) && rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (isString(row)) {\n continue;\n }\n if (\n (row.headerType === 'image' || row.headerType === 'video' || typeof row.headerType === 'function') &&\n (row as IImageDimension).imageAutoSizing\n ) {\n return true;\n }\n }\n }\n if (isArray(indicators) && indicators.length > 0) {\n for (let i = 0; i < indicators.length; i++) {\n const indicator = indicators[i];\n if (isString(indicator)) {\n continue;\n }\n if (\n ((indicator.cellType === 'image' ||\n indicator.cellType === 'video' ||\n typeof indicator.cellType === 'function') &&\n (indicator as IImageColumnIndicator).imageAutoSizing) ||\n ((indicator.headerType === 'image' ||\n indicator.headerType === 'video' ||\n typeof indicator.headerType === 'function') &&\n (indicator as IImageHeaderIndicator).imageAutoSizing)\n ) {\n return true;\n }\n }\n }\n } else {\n // list table\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i] as unknown as ListTableConstructorOptions['columns'][0];\n if (\n ((column.cellType === 'image' || column.cellType === 'video' || typeof column.cellType === 'function') &&\n (column as IImageColumnBodyDefine).imageAutoSizing) ||\n ((column.headerType === 'image' ||\n column.headerType === 'video' ||\n typeof column.headerType === 'function') &&\n (column as IImageHeaderDefine).imageAutoSizing)\n ) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\nexport function parseColKeyRowKeyForPivotTable(table: PivotTable, options: PivotTableConstructorOptions) {\n let columnDimensionTree;\n let rowDimensionTree;\n // let isNeedResetColumnDimensionTree = true;\n // let isNeedResetRowDimensionTree = true;\n if (options.columnTree) {\n if (table.options.indicatorsAsCol !== false && table.options.supplementIndicatorNodes !== false) {\n table.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n table.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (table.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n table.layoutNodeId\n );\n\n // if (\n // table.options.supplementIndicatorNodes !== false &&\n // table.options.indicatorsAsCol !== false &&\n // !columnDimensionTree.dimensionKeys.contain(IndicatorDimensionKeyPlaceholder) &&\n // options.indicators?.length >= 1\n // ) {\n // isNeedResetColumnDimensionTree = true;\n // } else {\n // isNeedResetColumnDimensionTree = false;\n // }\n // } else {\n // if (options.indicatorsAsCol !== false) {\n // table.internalProps.columnTree = supplementIndicatorNodesForCustomTree([], options.indicators);\n // }\n }\n if (options.rowTree) {\n if (table.options.indicatorsAsCol === false && table.options.supplementIndicatorNodes !== false) {\n table.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n table.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (table.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n table.layoutNodeId,\n table.options.rowHierarchyType,\n table.options.rowHierarchyType === 'tree' ? table.options.rowExpandLevel ?? 1 : undefined\n );\n // if (\n // table.options.supplementIndicatorNodes !== false &&\n // table.options.indicatorsAsCol === false &&\n // !rowDimensionTree.dimensionKeys.contain(IndicatorDimensionKeyPlaceholder) &&\n // options.indicators?.length >= 1\n // ) {\n // isNeedResetRowDimensionTree = true;\n // } else {\n // isNeedResetRowDimensionTree = false;\n // }\n // } else {\n // if (options.indicatorsAsCol === false) {\n // table.internalProps.rowTree = supplementIndicatorNodesForCustomTree([], options.indicators);\n // }\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys: string[], rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys: string[], columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys: string[], indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n if (\n (indicatorObj as IChartColumnIndicator).chartSpec ||\n (indicatorObj as ISparklineColumnIndicator).sparklineSpec\n ) {\n if (table.internalProps.dataConfig?.aggregationRules) {\n if (\n !table.internalProps.dataConfig.aggregationRules.find(aggregation => {\n return aggregation.indicatorKey === indicatorObj.indicatorKey;\n })\n ) {\n table.internalProps.dataConfig.aggregationRules.push({\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n });\n }\n } else if (table.internalProps.dataConfig) {\n table.internalProps.dataConfig.aggregationRules = [\n {\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n }\n ];\n } else {\n table.internalProps.dataConfig = {\n aggregationRules: [\n {\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n }\n ]\n };\n }\n }\n }\n return keys;\n }, []) ?? [];\n if (options.rowHierarchyType === 'tree' && (options.extensionRows?.length ?? 0) >= 1) {\n options.extensionRows?.forEach(extensionRow => {\n const extension_rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n extension_rowKeys.push(row);\n } else {\n extension_rowKeys.push(row.dimensionKey);\n }\n });\n rowKeys.push(...extension_rowKeys);\n });\n }\n return {\n rowKeys,\n columnKeys,\n indicatorKeys,\n // isNeedResetColumnDimensionTree,\n // isNeedResetRowDimensionTree,\n columnDimensionTree,\n rowDimensionTree\n };\n}\n\nexport function supplementIndicatorNodesForCustomTree(\n customTree: IHeaderTreeDefine[],\n indicators: (string | IIndicator)[]\n) {\n const checkNode = (nodes: IHeaderTreeDefine[], isHasIndicator: boolean) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if (\n !node.indicatorKey &&\n !isHasIndicator &&\n (!(node.children as IHeaderTreeDefine[])?.length || !node.children)\n ) {\n node.children = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n } else if (node.children && Array.isArray(node.children)) {\n checkNode(node.children, isHasIndicator || !!node.indicatorKey);\n }\n });\n };\n if (customTree?.length) {\n checkNode(customTree, false);\n } else {\n customTree = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n }\n return customTree;\n}\n\nexport function deleteHideIndicatorNode(\n treeNodeChildren: LayouTreeNode[],\n indicators: (string | IIndicator)[],\n hasHideNode: boolean,\n table: PivotTable\n) {\n const hasHideSettingIndicators: IIndicator[] = [];\n for (let i = 0; i < indicators?.length; i++) {\n const indicator = indicators[i];\n if ((indicator as IIndicator)?.hide) {\n hasHideSettingIndicators.push(indicator as IIndicator);\n }\n }\n if (hasHideSettingIndicators.length || hasHideNode) {\n deleteTreeHideNode(treeNodeChildren, [], hasHideSettingIndicators, hasHideNode, table);\n }\n}\n","import type { CellRange, TextColumnDefine } from '../../ts-types';\nimport type { SimpleHeaderLayoutMap } from '../simple-header-layout';\n\nexport function getCellRange(col: number, row: number, layout: SimpleHeaderLayoutMap): CellRange {\n if (col === -1 || row === -1) {\n return {\n start: { col, row },\n end: { col, row }\n };\n }\n if (layout._cellRangeMap.has(`$${col}$${row}`)) {\n return layout._cellRangeMap.get(`$${col}$${row}`);\n }\n let cellRange: CellRange = { start: { col, row }, end: { col, row } };\n if (layout.transpose) {\n cellRange = getCellRangeTranspose(col, row, layout);\n } else {\n // hover相关的单元格位置是-1,-1,getCellRange计算有误,先进行判断\n if (layout.headerLevelCount <= row) {\n //如果是body部分 设置了需要合并单元格 这里判断上下是否内容相同 相同的话 将cellRange范围扩大\n if (\n layout.headerLevelCount <= row &&\n (layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount]?.define as TextColumnDefine)?.mergeCell\n ) {\n const value = layout._table.getCellValue(col, row);\n for (let r = row - 1; r >= layout.headerLevelCount; r--) {\n const last_Value = layout._table.getCellValue(col, r);\n if (typeof layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell === 'boolean') {\n if (value !== last_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell as Function)(\n value,\n last_Value,\n {\n source: {\n col,\n row\n },\n target: {\n col,\n row: r\n },\n table: layout._table\n }\n )\n ) {\n break;\n }\n }\n cellRange.start.row = r;\n }\n for (let r = row + 1; r < layout.rowCount; r++) {\n const next_Value = layout._table.getCellValue(col, r);\n if (typeof layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell === 'boolean') {\n if (value !== next_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell as Function)(\n value,\n next_Value,\n {\n source: {\n col,\n row\n },\n target: {\n col,\n row: r\n },\n table: layout._table\n }\n )\n ) {\n break;\n }\n }\n cellRange.end.row = r;\n }\n }\n getTreeTitleMerge(col, row, cellRange, layout);\n // return cellRange;\n } else {\n //in header\n const id = layout.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n cellRange.start.col = c;\n }\n for (let c = col + 1; c < (layout.colCount ?? 0); c++) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n cellRange.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n cellRange.start.row = r;\n }\n for (let r = row + 1; r < layout.headerLevelCount; r++) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n cellRange.end.row = r;\n }\n // return cellRange;\n }\n }\n layout._cellRangeMap.set(`$${col}$${row}`, cellRange);\n return cellRange;\n}\n\nfunction getTreeTitleMerge(col: number, row: number, cellRange: CellRange, layout: SimpleHeaderLayoutMap) {\n if (layout.rowHierarchyType !== 'tree') {\n return;\n }\n\n const cellRecord = layout._table.getCellRawRecord(col, row);\n if (layout._table.internalProps.rowSeriesNumber?.enableTreeCheckbox) {\n if (cellRecord?.vtableMerge && col >= layout.leftRowSeriesNumberColumnCount) {\n cellRange.start.col = layout.rowHeaderLevelCount + layout.leftRowSeriesNumberColumnCount;\n cellRange.end.col = layout.colCount - 1;\n cellRange.start.row = cellRange.end.row = row;\n }\n } else {\n if (cellRecord?.vtableMerge) {\n cellRange.start.col = layout.rowHeaderLevelCount;\n cellRange.end.col = layout.colCount - 1;\n cellRange.start.row = cellRange.end.row = row;\n }\n }\n}\n\nexport function getCellRangeTranspose(col: number, row: number, layout: SimpleHeaderLayoutMap): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n // hover相关的单元格位置是-1,-1,getCellRange计算有误,先进行判断\n if (layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount <= col || (col === -1 && row === -1)) {\n //如果是body部分 设置了需要合并单元格 这里判断左右是否内容相同 相同的话 将cellRange范围扩大\n if (\n layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount <= col &&\n layout.columnObjects[row]?.define?.mergeCell\n ) {\n const value = layout._table.getCellValue(col, row);\n for (let c = col - 1; c >= layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount; c--) {\n const last_Value = layout._table.getCellValue(c, row);\n if (typeof layout.columnObjects[row].define.mergeCell === 'boolean') {\n if (value !== last_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[row].define.mergeCell as Function)(value, last_Value, {\n source: {\n col,\n row\n },\n target: {\n col: c,\n row\n },\n table: layout._table\n })\n ) {\n break;\n }\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (layout.colCount ?? 0); c++) {\n const next_Value = layout._table.getCellValue(c, row);\n if (typeof layout.columnObjects[row].define.mergeCell === 'boolean') {\n if (value !== next_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[row].define.mergeCell as Function)(value, next_Value, {\n source: {\n col,\n row\n },\n target: {\n col: c,\n row\n },\n table: layout._table\n })\n ) {\n break;\n }\n }\n result.end.col = c;\n }\n }\n return result;\n }\n //in header\n const id = layout.getCellId(col, row);\n for (let r = row - 1; r >= 0; r--) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (layout.rowCount ?? 0); r++) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n result.end.row = r;\n }\n for (let c = col - 1; c >= 0; c--) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount; c++) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n return result;\n}\n","/* eslint-disable sort-imports */\nimport { isValid, merge } from '@visactor/vutils';\nimport type { ListTable } from '../ListTable';\nimport { DefaultSparklineSpec } from '../tools/global';\nimport type {\n CellAddress,\n CellRange,\n CellLocation,\n IListTableCellHeaderPaths,\n LayoutObjectId,\n AggregationType,\n Aggregation,\n IRowSeriesNumber\n} from '../ts-types';\nimport type { ChartColumnDefine, ColumnsDefine } from '../ts-types/list-table/define';\nimport type {\n ColumnData,\n ColumnDefine,\n HeaderData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\nimport { checkHasChart, getChartDataId } from './chart-helper/get-chart-spec';\nimport {\n checkHasAggregation,\n checkHasAggregationOnBottom,\n checkHasAggregationOnTop,\n checkHasTreeDefine\n} from './layout-helper';\nimport type { Aggregator } from '../dataset/statistics-helper';\nimport { DimensionTree } from './tree-helper';\nimport { getCellRange } from './cell-range/simple-cell-range';\n// import { EmptyDataCache } from './utils';\n\n// let seqId = 0;\nexport class SimpleHeaderLayoutMap implements LayoutMapAPI {\n private seqId: number = 0;\n private _headerObjects: HeaderData[];\n private _headerObjectMap: { [key in LayoutObjectId]: HeaderData };\n private _headerObjectsIncludeHided: HeaderData[];\n // private _headerObjectMapIncludeHided: { [key in LayoutObjectId]: HeaderData };\n // private _headerObjectFieldKey: { [key in string]: HeaderData };\n private _headerCellIds: number[][];\n private _columns: ColumnData[];\n private _columnsIncludeHided: ColumnData[];\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumnCount: number = 0;\n /** 后期加的 对应pivot-header-layout 中的columnDimensionTree 为了排序后获取到排序后的columns */\n columnTree: DimensionTree;\n readonly bodyRowSpanCount: number = 1;\n //透视表中树形结构使用 这里为了table逻辑不报错\n // rowHierarchyIndent?: number = 0;\n hierarchyIndent?: number; // 树形展示缩进值\n hierarchyTextStartAlignment?: boolean;\n // private _emptyDataCache = new EmptyDataCache();\n _transpose = false;\n _showHeader = true;\n _recordsCount = 0;\n _table: ListTable;\n _hasAggregation: boolean = false;\n _hasAggregationOnTopCount: number = 0;\n _hasAggregationOnBottomCount: number = 0;\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n _cellRangeMap: Map; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n constructor(table: ListTable, columns: ColumnsDefine, showHeader: boolean, hierarchyIndent: number) {\n this._cellRangeMap = new Map();\n this._showHeader = showHeader;\n this._table = table;\n this._columns = [];\n this._columnsIncludeHided = [];\n this._headerCellIds = [];\n this.hierarchyIndent = hierarchyIndent ?? 20;\n this.hierarchyTextStartAlignment = table.options.hierarchyTextStartAlignment;\n this.columnTree = new DimensionTree(columns as any, { seqId: 0 }); //seqId这里没有利用上 所有顺便传了0\n this._headerObjectsIncludeHided = this._addHeaders(0, columns, []);\n // this._headerObjectMapIncludeHided = this._headerObjectsIncludeHided.reduce((o, e) => {\n // o[e.id as number] = e;\n // return o;\n // }, {} as { [key in LayoutObjectId]: HeaderData });\n\n this._headerObjects = this._headerObjectsIncludeHided.filter(col => {\n return col.define.hide !== true;\n });\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key in LayoutObjectId]: HeaderData });\n this.rowHierarchyType = checkHasTreeDefine(this) ? 'tree' : 'grid';\n this._hasAggregation = checkHasAggregation(this);\n this._hasAggregationOnBottomCount = checkHasAggregationOnBottom(this);\n this._hasAggregationOnTopCount = checkHasAggregationOnTop(this);\n // this._headerObjectFieldKey = this._headerObjects.reduce((o, e) => {\n // o[e.fieldKey] = e;\n // return o;\n // }, {} as { [key in string]: HeaderData });\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map((seriesNumber, index) => {\n return {\n id: this.seqId++,\n title: seriesNumber.title,\n define: merge({ field: '_vtable_rowSeries_number_' + index }, seriesNumber),\n cellType: seriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: seriesNumber.style,\n width: seriesNumber.width,\n format: seriesNumber.format,\n field: seriesNumber.field ?? '_vtable_rowSeries_number_' + index,\n icon: seriesNumber.icon,\n headerIcon: seriesNumber.headerIcon,\n isChildNode: false\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: this.seqId++,\n title: rowSeriesNumber.title,\n define: merge({ field: '_vtable_rowSeries_number' }, rowSeriesNumber),\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '_vtable_rowSeries_number', //rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n headerIcon: rowSeriesNumber.headerIcon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n // get columnWidths(): ColumnData[] {\n // return this._columns;\n // }\n get transpose(): boolean {\n return this._transpose;\n }\n set transpose(_transpose: boolean) {\n this._transpose = _transpose;\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return false;\n } else if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (this.transpose) {\n return false;\n } else if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return true;\n }\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return true;\n }\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return undefined;\n }\n if (row < this.headerLevelCount) {\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: this._table.internalProps.rowSeriesNumber.headerStyle\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (this.transpose) {\n return undefined;\n }\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return this.leftRowSeriesNumberColumn[col];\n }\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n isHeader(col: number, row: number): boolean {\n if (\n this.transpose &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (!this.transpose && row >= 0 && row < this.headerLevelCount) {\n return true;\n }\n return false;\n }\n isAggregation(col: number, row: number): boolean {\n // const column = this.getBody(col, row);\n // const aggregation = column.aggregation;\n if (this.hasAggregation) {\n if (this.hasAggregationOnBottomCount) {\n if (this.transpose) {\n if (col >= this.colCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n } else {\n if (row >= this.rowCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n }\n }\n if (this.hasAggregationOnTopCount) {\n if (this.transpose) {\n if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n } else {\n if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n }\n }\n }\n return false;\n }\n isTopAggregation(col: number, row: number): boolean {\n if (this.hasAggregationOnTopCount) {\n if (this.transpose) {\n if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n } else {\n if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n }\n }\n return false;\n }\n isBottomAggregation(col: number, row: number): boolean {\n if (this.hasAggregationOnBottomCount) {\n if (this.transpose) {\n if (col >= this.colCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n } else {\n if (row >= this.rowCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n }\n }\n return false;\n }\n get hasAggregation() {\n return this._hasAggregation;\n }\n\n get hasAggregationOnTopCount() {\n return this._hasAggregationOnTopCount;\n }\n\n get hasAggregationOnBottomCount() {\n return this._hasAggregationOnBottomCount;\n }\n\n getAggregatorsByCell(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n return aggregators;\n }\n\n getAggregatorsByCellRange(startCol: number, startRow: number, endCol: number, endRow: number) {\n let aggregators: Aggregator[] = [];\n if (this.transpose) {\n for (let i = startRow; i <= endRow; i++) {\n const column = this.getColumnDefine(startCol, i) as any;\n if (column.vtable_aggregator) {\n aggregators = aggregators.concat(\n Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [column.vtable_aggregator]\n );\n }\n }\n } else {\n for (let i = startCol; i <= endCol; i++) {\n const column = this.getColumnDefine(i, startRow) as any;\n if (column.vtable_aggregator) {\n aggregators = aggregators.concat(\n Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [column.vtable_aggregator]\n );\n }\n }\n return aggregators;\n }\n return [];\n }\n getAggregatorOnTop(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n const aggregation = (column as ColumnDefine).aggregation;\n if (Array.isArray(aggregation)) {\n const topAggregationIndexs = aggregation.reduce((indexs, agg, index) => {\n if (agg.showOnTop) {\n indexs.push(index);\n }\n return indexs;\n }, []);\n const topAggregators = topAggregationIndexs.map(index => aggregators[index]);\n if (this.transpose) {\n return (topAggregators as Aggregator[])[col - this.rowHeaderLevelCount];\n }\n return (topAggregators as Aggregator[])[row - this.columnHeaderLevelCount];\n }\n if (this.transpose && col - this.rowHeaderLevelCount === 0) {\n return (aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n } else if (!this.transpose && row - this.columnHeaderLevelCount === 0) {\n return (aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n }\n return null;\n }\n\n getAggregatorOnBottom(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n const aggregation = (column as ColumnDefine).aggregation;\n if (Array.isArray(aggregation)) {\n const bottomAggregationIndexs = aggregation.reduce((indexs, agg, index) => {\n if (!agg.showOnTop) {\n indexs.push(index);\n }\n return indexs;\n }, []);\n const bottomAggregators = bottomAggregationIndexs.map(index => aggregators[index]);\n if (this.transpose) {\n return (bottomAggregators as Aggregator[])[col - (this.colCount - this.hasAggregationOnBottomCount)];\n }\n return (bottomAggregators as Aggregator[])[row - (this.rowCount - this.hasAggregationOnBottomCount)];\n }\n if (this.transpose && col - (this.colCount - this.hasAggregationOnBottomCount) === 0) {\n return !(aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n } else if (!this.transpose && row - (this.rowCount - this.hasAggregationOnBottomCount) === 0) {\n return !(aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n }\n return null;\n }\n /**\n * 获取单元格所在行或者列中的聚合值的单元格地址\n * @param col\n * @param row\n * @returns\n */\n getAggregatorCellAddress(startCol: number, startRow: number, endCol: number, endRow: number) {\n const cellAddrs = [];\n const topCount = this.hasAggregationOnTopCount;\n const bottomCount = this.hasAggregationOnBottomCount;\n if (this.transpose) {\n for (let row = startRow; row <= endRow; row++) {\n const column = this.getColumnDefine(startCol, row) as any;\n if (column.vtable_aggregator) {\n for (let i = 0; i < topCount; i++) {\n cellAddrs.push({ col: this.headerLevelCount + i, row });\n }\n for (let i = 0; i < bottomCount; i++) {\n cellAddrs.push({ col: this.rowCount - bottomCount + i, row });\n }\n }\n }\n } else {\n for (let col = startCol; col <= endCol; col++) {\n const column = this.getColumnDefine(col, startRow) as any;\n if (column.vtable_aggregator) {\n for (let i = 0; i < topCount; i++) {\n cellAddrs.push({ col, row: this.headerLevelCount + i });\n }\n for (let i = 0; i < bottomCount; i++) {\n cellAddrs.push({ col, row: this.rowCount - bottomCount + i });\n }\n }\n }\n }\n return cellAddrs;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isHeader(col, row)) {\n if (this.transpose) {\n return 'rowHeader';\n }\n return 'columnHeader';\n }\n return 'body';\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n this.transpose &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n !this.transpose &&\n row >= 0 &&\n row <= this.headerLevelCount - 1 &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n if (this.transpose) {\n return {\n start: { col: 0, row: 0 },\n end: { col: this._headerCellIds.length - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: this._headerCellIds.length - 1 }\n };\n }\n //目前和getColumnHeaderRange 逻辑一致 因为基本表格只有一侧有表头\n getRowHeaderRange(): CellRange | undefined {\n if (this.transpose) {\n return {\n start: { col: 0, row: 0 },\n end: { col: this._headerCellIds.length - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: this._headerCellIds.length - 1 }\n };\n }\n getCornerHeaderRange(): CellRange | undefined {\n return undefined;\n }\n getBodyRange(): CellRange {\n if (this.transpose) {\n return {\n start: { col: this.headerLevelCount, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: this.headerLevelCount },\n end: { col: (this.colCount ?? 0) - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n /**\n * 是否为最底层表头\n * @param col\n * @param row\n * @returns\n */\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(header.define).columns || (header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n get headerLevelCount(): number {\n return this.showHeader ? this._headerCellIds.length : 0;\n }\n get columnHeaderLevelCount(): number {\n return this.transpose ? 0 : this.headerLevelCount;\n }\n get rowHeaderLevelCount(): number {\n return this.transpose ? this.headerLevelCount : 0;\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n // return this._table.internalProps.frozenRowCount ?? 0;\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get bottomFrozenRowCount(): number {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.frozenColCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return Math.max(0, this.colCount - this.frozenColCount);\n }\n return 0;\n }\n get colCount(): number {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose\n ? this.headerLevelCount +\n this.recordsCount +\n this.leftRowSeriesNumberColumnCount +\n this.rightRowSeriesNumberColumnCount\n : this._columns.length + this.leftRowSeriesNumberColumnCount + this.rightRowSeriesNumberColumnCount;\n }\n get rowCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this._columns.length : this.headerLevelCount + this.recordsCount;\n }\n /** 不包括冻结的行 */\n get bodyRowCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this._columns.length : this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount : this._columns.length;\n }\n get recordsCount() {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this._recordsCount;\n }\n set recordsCount(recordsCount: number) {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n this._recordsCount = recordsCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): ColumnData[] {\n return this._columns;\n }\n get headerObjectsIncludeHided(): HeaderData[] {\n return this._headerObjectsIncludeHided;\n }\n //对比multi-layout 那个里面有columWidths对象,保持结构一致\n get columnWidths(): WidthData[] {\n if (this.leftRowSeriesNumberColumnCount) {\n const widths = this.leftRowSeriesNumberColumn.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n });\n widths.push(\n ...this._columns.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n })\n );\n return widths;\n }\n\n return this._columns.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n });\n }\n\n getColumnWidthDefined(col: number): WidthData {\n if (col >= 0) {\n if (col < this.leftRowSeriesNumberColumnCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n if (this.transpose) {\n let width: string | number = 0;\n let maxWidth: string | number;\n let minWidth: string | number;\n if (col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n let isAuto;\n this.columnObjects.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, minWidth);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.max(obj.maxWidth, maxWidth);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n return { width, minWidth, maxWidth };\n }\n if (this.isRowHeader(col, 0)) {\n const defaultWidth = Array.isArray(this._table.defaultHeaderColWidth)\n ? this._table.defaultHeaderColWidth[col] ?? this._table.defaultColWidth\n : this._table.defaultHeaderColWidth;\n if (defaultWidth === 'auto') {\n return { width: 'auto' };\n }\n return { width: defaultWidth };\n }\n }\n\n return this._columns[col - this.leftRowSeriesNumberColumnCount];\n }\n return undefined;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (this.transpose) {\n if (col >= this.headerLevelCount + this.leftRowSeriesNumberColumnCount) {\n return this._columns[row]?.id;\n }\n if (this.isSeriesNumber(col, row)) {\n return row + '_series_number';\n }\n //in header\n return this._headerCellIds[col - this.leftRowSeriesNumberColumnCount]?.[row];\n }\n if (this.isSeriesNumber(col, row)) {\n return this.rowSeriesNumberColumn[col].id;\n }\n if (this.headerLevelCount <= row) {\n return this._columns[col - this.leftRowSeriesNumberColumnCount]?.id;\n }\n //in header\n return this._headerCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]!;\n }\n getHeaderField(col: number, row: number) {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row)?.field;\n } else if (this.isSeriesNumberInBody(col, row)) {\n return this.getSeriesNumberBody(col, row)?.field;\n }\n const id = this.getCellId(col, row);\n return (\n this._headerObjectMap[id as number]?.field ||\n (this.transpose\n ? this._columns[row] && this._columns[row].field\n : this._columns[col - this.leftRowSeriesNumberColumnCount] &&\n this._columns[col - this.leftRowSeriesNumberColumnCount].field)\n );\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._headerCellIds.length; i++) {\n const row = this._headerCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n if (this.transpose) {\n return { col: i, row: j };\n }\n return { col: j + this.leftRowSeriesNumberColumnCount, row: i };\n }\n }\n }\n return undefined;\n }\n /** 根据field获取表头cell位置 */\n getHeaderCellAddressByField(field: string): CellAddress | undefined {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n getBody(col: number, _row: number): ColumnData | SeriesNumberColumnData {\n if (this.isSeriesNumber(col, _row)) {\n return this.getSeriesNumberBody(col, _row);\n }\n return this.transpose ? this._columns[_row] : this._columns[col - this.leftRowSeriesNumberColumnCount];\n }\n getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n if (this.transpose) {\n for (let row = 0; row < (this.rowCount ?? 0); row++) {\n if (id === this._columns[row].id) {\n return {\n start: { col: 0, row },\n end: { col: 0, row }\n };\n }\n }\n } else {\n for (let col = this.leftRowSeriesNumberColumnCount; col < (this.colCount ?? 0); col++) {\n if (id === this._columns[col - this.leftRowSeriesNumberColumnCount].id) {\n return {\n start: { col, row: 0 },\n end: { col, row: 0 }\n };\n }\n }\n }\n return {\n start: { col: -1, row: -1 },\n end: { col: -1, row: -1 }\n };\n // throw new Error(`can not found body layout @id=${id as number}`);\n }\n getCellRange(col: number, row: number): CellRange {\n return getCellRange(col, row, this);\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n const skipRowCount = this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount;\n if (this.transpose) {\n if (col < skipRowCount) {\n return -1;\n }\n return col - skipRowCount;\n }\n\n if (row < skipRowCount) {\n return -1;\n }\n return row - skipRowCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n const skipRowCount = this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount;\n return skipRowCount + index;\n }\n private _addHeaders(\n row: number,\n column: ColumnsDefine,\n roots: number[],\n hideColumnsSubHeader?: boolean\n ): HeaderData[] {\n const results: HeaderData[] = [];\n const rowCells = this._newRow(row, hideColumnsSubHeader); // !hideColumnsSubHeader ? this._headerCellIds[row] || this._newRow(row) : [];\n column.forEach((hd: ColumnDefine) => {\n const col = this._columns.length;\n const id = this.seqId++;\n const cell: HeaderData = {\n id,\n title: hd.title ?? (hd as any).caption,\n // captionIcon,\n headerIcon: hd.headerIcon,\n field: (hd as ColumnDefine).field,\n // fieldFormat: (hd as ColumnDefine).fieldFormat,\n style: hd.headerStyle,\n headerType: hd.headerType ?? 'text',\n dropDownMenu: hd.dropDownMenu,\n define: hd,\n columnWidthComputeMode: hd.columnWidthComputeMode\n // iconPositionList:[]\n };\n\n results[id] = cell;\n for (let r = row - 1; r >= 0; r--) {\n this._headerCellIds[r] && (this._headerCellIds[r][col] = roots[r]);\n }\n if (!hideColumnsSubHeader) {\n rowCells[col] = id;\n } else if (this._headerCellIds[row - 1]) {\n rowCells[col] = this._headerCellIds[row - 1][col];\n }\n if (hd.columns) {\n this._addHeaders(row + 1, hd.columns, [...roots, id], hd.hideColumnsSubHeader || hideColumnsSubHeader).forEach(\n c => results.push(c)\n );\n } else {\n const colDef = {\n id: this.seqId++,\n field: hd.field,\n // fieldKey: colDef.fieldKey,\n fieldFormat: hd.fieldFormat,\n width: hd.width,\n minWidth: hd.minWidth,\n maxWidth: hd.maxWidth,\n icon: hd.icon,\n cellType: hd.cellType ?? (hd as any).columnType ?? 'text',\n chartModule: 'chartModule' in hd ? hd.chartModule : null, // todo: 放到对应的column对象中\n chartSpec: 'chartSpec' in hd ? hd.chartSpec : null, // todo: 放到对应的column对象中\n sparklineSpec: 'sparklineSpec' in hd ? hd.sparklineSpec : DefaultSparklineSpec, // todo: 放到对应的column对象中\n style: hd.style,\n define: hd,\n columnWidthComputeMode: hd.columnWidthComputeMode,\n disableColumnResize: hd?.disableColumnResize,\n aggregation: hd.aggregation, //getAggregationForColumn(hd, col, this._table),\n isChildNode: row >= 1\n };\n this._columnsIncludeHided.push(colDef);\n if (hd.hide !== true) {\n this._columns.push(colDef);\n\n for (let r = row + 1; r < this._headerCellIds.length; r++) {\n this._headerCellIds[r][col] = id;\n }\n }\n }\n });\n return results;\n }\n\n private _newRow(row: number, hideColumnsSubHeader = false): number[] {\n //如果当前行已经有数组对象 将上一行的id内容补全到当前行上\n if (this._headerCellIds[row]) {\n const prev = this._headerCellIds[row - 1];\n if (prev.length > this._headerCellIds[row].length) {\n for (let col = this._headerCellIds[row].length; col < prev.length; col++) {\n this._headerCellIds[row][col] = prev[col];\n }\n }\n return this._headerCellIds[row];\n }\n // 隐藏子标题的情况 吐出一个新的数组\n if (hideColumnsSubHeader) {\n return [];\n }\n // 其他情况 不隐藏子标题 同步上一行的id\n const newRow: number[] = (this._headerCellIds[row] = []);\n if (!this._columns.length) {\n return newRow;\n }\n const prev = this._headerCellIds[row - 1];\n for (let col = 0; col < prev.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n getCellHeaderPaths(col: number, row: number): IListTableCellHeaderPaths {\n if (this.isSeriesNumber(col, row)) {\n return undefined;\n }\n let colPath: IListTableCellHeaderPaths['colHeaderPaths'] = [];\n let rowPath: IListTableCellHeaderPaths['rowHeaderPaths'] = [];\n if (!this.transpose) {\n colPath = [\n {\n field: this._columns[col - this.leftRowSeriesNumberColumnCount].field\n }\n ];\n } else {\n rowPath = [\n {\n field: this._columns[row].field\n }\n ];\n }\n return {\n colHeaderPaths: colPath,\n rowHeaderPaths: rowPath,\n cellLocation: this.getCellLocation(col, row)\n };\n }\n private getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n if (this.isSeriesNumberInBody(col - 1, row)) {\n return undefined;\n }\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n } else if (\n !this.transpose &&\n this.isSeriesNumberInBody(target.col, target.row) &&\n this.isSeriesNumberInBody(source.col, source.row)\n ) {\n // return true;\n const sourceIndex = this.getRecordShowIndexByCell(0, source.row);\n const targetIndex = this.getRecordShowIndexByCell(0, target.row);\n const canMove = this._table.dataSource.isCanExchangeOrder(sourceIndex, targetIndex);\n return canMove;\n } else if (\n this.transpose &&\n this.isSeriesNumberInBody(target.col, target.row) &&\n this.isSeriesNumberInBody(source.col, source.row)\n ) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n if (\n this.getBody(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n this.getBody(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n } else {\n // 为适应下面的判断逻辑 将col加至表格第一级\n source.col = source.col + this.leftRowSeriesNumberColumnCount;\n target.col = target.col + this.leftRowSeriesNumberColumnCount;\n }\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this._table.internalProps.frozenColDragHeaderMode === 'disabled') {\n if (this._table.isFrozenColumn(target.col)) {\n return false;\n }\n }\n\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: number;\n sourceSize: number;\n targetSize: number;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (this.canMoveHeaderPosition(source, target)) {\n let sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._headerCellIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._headerCellIds[row].splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);\n }\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columns.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columns, sourceColumns);\n\n // 对表头columnTree调整节点位置\n this.columnTree.movePosition(\n sourceCellRange.start.row,\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n targetIndex - this.leftRowSeriesNumberColumnCount\n );\n this.columnTree.reset(this.columnTree.tree.children);\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (\n this.isRowHeader(source.col, source.row) ||\n (this.isSeriesNumberInBody(source.col, source.row) && this.transpose)\n ) {\n if (this.isSeriesNumberInBody(source.col, source.row)) {\n sourceCellRange = this.getCellRange(source.col + this.leftRowSeriesNumberColumnCount, source.row); // 把拖拽转移到拖拽表头节点\n }\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.row - sourceCellRange.start.row + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(sourceCellRange.start.col, target.row);\n if (target.row >= source.row) {\n targetIndex = targetCellRange.end.row - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.row;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.row) {\n return null;\n }\n // 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._headerCellIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._headerCellIds[row].splice(sourceCellRange.start.row, sourceSize);\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);\n }\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columns.splice(sourceCellRange.start.row, sourceSize);\n sourceColumns.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._columns, sourceColumns);\n\n // 对表头columnTree调整节点位置\n this.columnTree.movePosition(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceCellRange.start.row,\n targetIndex + (target.row > source.row ? sourceCellRange.end.row - sourceCellRange.start.row : 0)\n );\n this.columnTree.reset(this.columnTree.tree.children);\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.row - targetCellRange.start.row + 1,\n moveType: 'row'\n };\n } else if (this.isSeriesNumberInBody(source.col, source.row)) {\n return {\n sourceIndex: source.row,\n targetIndex: target.row,\n sourceSize: 1,\n targetSize: 1,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n */\n toggleHierarchyState(diffDataIndices: { add: number[]; remove: number[] }) {\n // const addCellPositions: any[] = [];\n // diffDataIndices.add.forEach(index => {\n // if (\n // this._table.frozenRowCount + index >= this._table.scenegraph.proxy.rowStart &&\n // this._table.frozenRowCount + index <=\n // Math.max(\n // this._table.scenegraph.proxy.rowEnd,\n // this._table.scenegraph.proxy.rowStart + this._table.scenegraph.proxy.rowLimit\n // )\n // ) {\n // addCellPositions.push({ col: 0, row: this._table.frozenRowCount + index });\n // }\n // });\n // const removeCellPositions: any[] = [];\n // diffDataIndices.remove.forEach(index => {\n // if (\n // this._table.frozenRowCount + index >= this._table.scenegraph.proxy.rowStart &&\n // this._table.frozenRowCount + index <= this._table.scenegraph.proxy.rowEnd\n // ) {\n // removeCellPositions.push({ col: 0, row: this._table.frozenRowCount + index });\n // }\n // });\n const addCellPositions = diffDataIndices.add.map(index => {\n return { col: 0, row: this._table.columnHeaderLevelCount + index };\n });\n const removeCellPositions = diffDataIndices.remove.map(index => {\n return { col: 0, row: this._table.columnHeaderLevelCount + index };\n });\n return {\n addCellPositions,\n removeCellPositions\n };\n }\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const columnObj = this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount];\n if (typeof columnObj.chartSpec === 'function') {\n return;\n }\n columnObj.chartInstance = chartInstance;\n }\n\n getChartInstance(_col: number, _row: number) {\n const columnObj = this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount];\n return columnObj.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n return undefined;\n }\n isEmpty(col: number, row: number) {\n return false;\n }\n isAxisCell(col: number, row: number) {\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n return [];\n }\n /** 共享chartSpec 非函数 */\n isShareChartSpec(col: number, row: number): boolean {\n const body = this.getBody(col, row);\n const chartSpec = (body as ColumnData)?.chartSpec;\n if (typeof chartSpec === 'function') {\n return false;\n }\n return true;\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n const body = this.getBody(col, row);\n const noDataRenderNothing = ((body as ColumnData)?.define as ChartColumnDefine).noDataRenderNothing;\n return noDataRenderNothing;\n }\n getChartSpec(col: number, row: number) {\n return this.getRawChartSpec(col, row);\n }\n getRawChartSpec(col: number, row: number): any {\n const body = this.getBody(col, row);\n const chartSpec = (body as ColumnData)?.chartSpec;\n if (typeof chartSpec === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: this._table.getCellOriginValue(col, row) || '',\n value: this._table.getCellValue(col, row) || '',\n rect: this._table.getCellRangeRelativeRect(this._table.getCellRange(col, row)),\n table: this._table\n };\n return chartSpec(arg);\n }\n return chartSpec;\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n release() {\n const activeChartInstance = this._table._getActiveChartInstance();\n activeChartInstance?.release();\n this.columnObjects.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n }\n\n clearCellRangeMap() {\n this._cellRangeMap.clear();\n }\n\n updateColumnTitle(col: number, row: number, title: string) {\n const define = this._table.internalProps.layoutMap.getHeader(col, row);\n define.title = title;\n define.define.title = title;\n }\n\n getColumnByField(field: string | number): {\n col: number;\n columnDefine: ColumnData;\n }[] {\n const result = this.columnObjects?.reduce((pre: { col: number; columnDefine: ColumnData }[], cur, index) => {\n if (cur.field === field) {\n pre.push({ col: index, columnDefine: cur });\n }\n return pre;\n }, []);\n return result;\n }\n\n getColumnDefine(col: number, row: number) {\n if (col >= 0) {\n if (col < this.leftRowSeriesNumberColumnCount) {\n return this.leftRowSeriesNumberColumn[col].define;\n }\n if (this.transpose) {\n return this._columns[row].define;\n }\n\n return this._columns[col - this.leftRowSeriesNumberColumnCount].define;\n }\n return undefined;\n }\n}\n","import type { SortOrder } from '../ts-types';\n\nfunction createArray(get: (i: number) => any, length: number): any[] {\n const array = new Array(length);\n for (let i = 0; i < length; i++) {\n array[i] = get(i);\n }\n return array;\n}\n\nexport function sort(\n get: (i: number) => any,\n set: (i: number, r: any) => void,\n length: number,\n compare: (a: any, b: any, order: SortOrder) => number,\n order: SortOrder,\n getField: (r: any) => any\n) {\n const old = createArray(get, length);\n\n old.sort((r1, r2) => (compare as (a: any, b: any, order: SortOrder) => number)(getField(r1), getField(r2), order));\n for (let i = 0; i < length; i++) {\n set(i, old[i]);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array, arr2: Array) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n","/* Adapted from cheetah-grid by yosuke ota\n *url:https://github.com/future-architect/cheetah-grid/blob/master/packages/cheetah-grid/src/js/core/EventTarget.ts\n *License: https://github.com/future-architect/cheetah-grid/blob/master/LICENSE\n * @license\n */\nimport type {\n TableEventListener,\n EventListenerId,\n TableEventHandlersEventArgumentMap,\n TableEventHandlersReturnMap\n} from '../ts-types';\nimport { isValid } from '@visactor/vutils';\n\nlet idCount = 1;\n\nexport class EventTarget {\n private listenersData: {\n listeners: { [TYPE in keyof TableEventHandlersEventArgumentMap]?: TableEventListener[] };\n listenerData: {\n [id: number]: {\n type: string;\n listener: TableEventListener;\n remove: () => void;\n };\n };\n } = {\n listeners: {},\n listenerData: {}\n };\n\n /**\n * 监听事件\n * @param type 事件类型\n * @param listener 事件监听器\n * @returns 事件监听器id\n */\n on(\n type: TYPE,\n listener: TableEventListener\n ): EventListenerId {\n const list: TableEventListener[] =\n this.listenersData.listeners[type] || (this.listenersData.listeners[type] = []);\n list.push(listener);\n\n const id = idCount++;\n this.listenersData.listenerData[id] = {\n type,\n listener,\n remove: (): void => {\n delete this.listenersData.listenerData[id];\n const index = list.indexOf(listener);\n list.splice(index, 1);\n if (!this.listenersData.listeners[type].length) {\n delete this.listenersData.listeners[type];\n }\n }\n };\n return id;\n }\n\n off(type: string, listener: TableEventListener): void;\n off(id: EventListenerId): void;\n off(\n idOrType: EventListenerId | string,\n listener?: TableEventListener\n ): void {\n if (listener) {\n const type = idOrType as string;\n this.removeEventListener(type, listener);\n } else {\n const id = idOrType as EventListenerId;\n if (!this.listenersData) {\n return;\n }\n this.listenersData.listenerData[id]?.remove();\n }\n }\n\n addEventListener(\n type: TYPE,\n listener: TableEventListener,\n option?: any\n ): void {\n this.on(type, listener);\n }\n\n removeEventListener(type: string, listener: TableEventListener): void {\n if (!this.listenersData) {\n return;\n }\n for (const key in this.listenersData.listenerData) {\n const listenerData = this.listenersData.listenerData[key];\n if (listenerData.type === type && listenerData.listener === listener) {\n this.off(key as unknown as number);\n }\n }\n }\n\n hasListeners(type: string): boolean {\n if (!this.listenersData) {\n return false;\n }\n return !!this.listenersData.listeners[type];\n }\n\n // fireListeners(type: string, ...args: any[]): any {\n // if (!this.listenersData) {\n // return [];\n // }\n // const list = this.listenersData.listeners[type];\n // if (!list) {\n // return [];\n // }\n // return list.map(listener => listener.call(this, ...args)).filter(r => isValid(r));\n // }\n fireListeners(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n if (!this.listenersData) {\n return [];\n }\n const list = this.listenersData.listeners[type];\n if (!list) {\n return [];\n }\n return list.map(listener => listener.call(this, event)).filter(r => isValid(r));\n }\n release(): void {\n delete this.listenersData;\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport interface IAggregator {\n records?: any[];\n value: () => any;\n className: string;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n className = 'Aggregator';\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records?: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n _formatedValue?: any;\n\n constructor(config: { key: string; dimension: string; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.dimension;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records;\n }\n reset() {\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: {\n key: string;\n dimension: string;\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n dimension: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n dimension: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum -= value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum -= value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator') {\n const oldValue = oldRecord.value();\n const newValue = newRecord.value();\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum : undefined;\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator') {\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator') {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n }\n }\n value() {\n return this.count;\n }\n reset() {\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum -= record.sum;\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum -= parseFloat(record[this.field]);\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator' && oldRecord.type === AggregationType.AVG) {\n this.sum += newRecord.sum - oldRecord.sum;\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum += parseFloat(newRecord[this.field]) - parseFloat(oldRecord[this.field]);\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum / this.count : undefined;\n }\n reset() {\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.max : undefined;\n }\n reset() {\n this.records = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.min : undefined;\n }\n reset() {\n this.records = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (a1.replace(rz, '.0') - b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping = {};\n const lowercase_mapping = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n","import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../dataset/statistics-helper';\nimport type { ColumnsDefine } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nfunction getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n if (fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get: (index: number) => any;\n length: number;\n /** 需要异步加载的情况 请不要设置records */\n records?: any;\n added?: (index: number, count: number) => any;\n deleted?: (index: number[]) => any;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any[] | DataSourceParam | DataSource;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n // private lastOrder: SortOrder;\n // private lastOrderFn: (a: any, b: any, order: string) => number;\n // private lastOrderField: FieldDef;\n private lastSortStates: Array;\n\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map = new Map();\n beforeChangedRecordsMap: Record = {}; // TODO过滤后 或者排序后的对应关系\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (config: {\n dimension: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }): Aggregator;\n };\n } = {};\n rowHierarchyType: 'grid' | 'tree';\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n columns: ColumnsDefine;\n lastFilterRules: FilterRules;\n constructor(\n dataSourceObj?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get;\n this.columns = columns;\n this._source = dataSourceObj?.records ? this.processRecords(dataSourceObj?.records) : dataSourceObj;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n updateColumns(columns: ColumnsDefine) {\n this.columns = columns;\n }\n _generateFieldAggragations() {\n const columnObjs = this.columns;\n this.fieldAggregators = [];\n for (let i = 0; i < columnObjs?.length; i++) {\n delete (columnObjs[i] as any).vtable_aggregator; //重置聚合器 如更新了过滤条件都需要重新计算\n const field = columnObjs[i].field;\n const aggragation = columnObjs[i].aggregation;\n if (!aggragation) {\n continue;\n }\n if (Array.isArray(aggragation)) {\n for (let j = 0; j < aggragation.length; j++) {\n const item = aggragation[j];\n const aggregator = new this.registedAggregators[item.aggregationType]({\n dimension: field as string,\n formatFun: item.formatFun,\n isRecord: true,\n aggregationFun: (item as CustomAggregation).aggregationFun\n });\n this.fieldAggregators.push(aggregator);\n if (!(columnObjs[i] as any).vtable_aggregator) {\n (columnObjs[i] as any).vtable_aggregator = [];\n }\n (columnObjs[i] as any).vtable_aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggragation.aggregationType]({\n dimension: field as string,\n formatFun: aggragation.formatFun,\n isRecord: true,\n aggregationFun: (aggragation as CustomAggregation).aggregationFun\n });\n this.fieldAggregators.push(aggregator);\n (columnObjs[i] as any).vtable_aggregator = aggregator;\n }\n }\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1 || this.lastFilterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n isHasAggregation && this.processRecord(record);\n }\n } else if (this.lastFilterRules?.length >= 1) {\n //上次做了过滤 本次做清除过滤规则的情况\n this.clearFilteredChildren(record);\n isHasAggregation && this.processRecord(record);\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n filteredChildren(records: any[]) {\n const filteredRecords = [];\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n }\n }\n return filteredRecords;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.filteredChildren ? nodeData.filteredChildren.length : nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.filteredChildren ? nodeData.filteredChildren[j] : nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (\n childNodeData.filteredChildren ? childNodeData.filteredChildren.length > 0 : childNodeData.children?.length > 0\n ) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n if ((childNodeData as any).children === true) {\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n get records(): any[] {\n return Array.isArray(this._source) ? this._source : [];\n }\n\n get source(): any[] | DataSourceParam | DataSource {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentPagerIndexedData[index]);\n return record?.hierarchyState ?? null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number, bodyStartIndex: number, bodyEndIndex: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n // 记录状态变化影响的子节点行数\n let childrenLength = 0;\n /**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\n const computeChildrenNodeLength = (\n indexKey: number | number[],\n hierarchyState: HierarchyState,\n nodeData: any\n ) => {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n };\n computeChildrenNodeLength(indexed, state, data);\n\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n const add = [];\n const remove = [];\n if (state === HierarchyState.collapse) {\n const addLength = this.currentIndexedData.length - oldIndexedData.length;\n for (let i = 0; i < addLength; i++) {\n add.push(index + i + 1);\n }\n } else if (state === HierarchyState.expand) {\n const removeLength = oldIndexedData.length - this.currentIndexedData.length;\n for (let i = 0; i < removeLength; i++) {\n remove.push(index + i + 1);\n }\n }\n // const newDiff = calculateArrayDiff(\n // oldIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // this.currentIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // bodyStartIndex\n // );\n // // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // // return oldDiff;\n // return newDiff;\n return { add, remove };\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n const subNodeSortedIndexArray: Array = Array.from({ length: children.length }, (_, i) => i);\n this.lastSortStates?.forEach(state => {\n if (state.order !== 'normal') {\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n children.length,\n state.orderFn,\n state.order,\n index =>\n this.getOriginalField(Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index], state.field)\n );\n }\n });\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!childData.hierarchyState && (childData.filteredChildren ?? childData.children)) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n childData.hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n childData.hierarchyState,\n children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index) as number;\n\n if (!this.beforeChangedRecordsMap[dataIndex]) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap[dataIndex] =\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {};\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap[dataIndex][field as any]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (isPromise(record)) {\n record\n .then(record => {\n record[field] = formatValue;\n })\n .catch((err: Error) => {\n console.error('VTable Error:', err);\n });\n } else {\n if (record) {\n record[field] = formatValue;\n } else {\n this.records[dataIndex] = {};\n this.records[dataIndex][field] = formatValue;\n }\n }\n }\n }\n // return getField(record, field);\n }\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n let isAdd = true;\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n } else {\n isAdd = false;\n }\n }\n if (isAdd && Array.isArray(this.records)) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.records.splice(indexed, 1, record);\n } else {\n // const c_node_index = (indexed as Array)[indexed.length - 1];\n // const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n // (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecord(record: any, index: number) {\n if (Array.isArray(this.records)) {\n this.records.splice(index, 0, record);\n this.adjustBeforeChangedRecordsMap(index, 1);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].push(record);\n }\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, 1);\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number) {\n if (Array.isArray(this.records)) {\n if (Array.isArray(recordArr)) {\n this.records.splice(index, 0, ...recordArr);\n this.adjustBeforeChangedRecordsMap(index, recordArr.length);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n for (let j = 0; j < recordArr.length; j++) {\n this.fieldAggregators[i].push(recordArr[j]);\n }\n }\n }\n\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, recordArr.length);\n }\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap = []; // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n this.records.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap = []; // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n if (Array.isArray(recordArr)) {\n this.records.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n adjustBeforeChangedRecordsMap(insertIndex: number, insertCount: number) {\n const length = this.beforeChangedRecordsMap.length;\n for (let key = length - 1; key >= insertIndex; key--) {\n const record = this.beforeChangedRecordsMap[key];\n delete this.beforeChangedRecordsMap[key];\n this.beforeChangedRecordsMap[key + insertCount] = record;\n }\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n realDeletedRecordIndexs.push(recordIndex);\n const deletedRecord = this.records[recordIndex];\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].deleteRecord(deletedRecord);\n }\n this.records.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n if ((this.dataSourceObj as DataSourceParam)?.deleted) {\n (this.dataSourceObj as DataSourceParam).deleted(realDeletedRecordIndexs);\n }\n return realDeletedRecordIndexs;\n }\n return [];\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex] as number;\n delete this.beforeChangedRecordsMap[rawIndex];\n this.records.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: number[] | number[][]) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (Array.isArray(recordIndex)) {\n delete this.beforeChangedRecordsMap[recordIndex.join(',')];\n realDeletedRecordIndexs.push(recordIndex);\n // for (let i = 0; i < this.fieldAggregators.length; i++) {\n // this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n // }\n\n // this.records[recordIndex[0]][recordIndex[1]][recordIndex[2]] = records[index];\n recordIndex.slice(0, -1).reduce((acc, key) => {\n if (acc[key] === undefined) {\n acc[key] = {};\n }\n return acc[key].children;\n }, this.records)[recordIndex[recordIndex.length - 1]] = records[index];\n } else {\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n realDeletedRecordIndexs.push(recordIndex);\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n }\n this.records[recordIndex] = records[index];\n }\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n delete this.beforeChangedRecordsMap[rawIndex];\n realDeletedRecordIndexs.push(recordIndex);\n this.records[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(states: Array): void {\n // Convert states into an array and filter out unnecessary ones\n states = (Array.isArray(states) ? states : [states]).filter(state => {\n const column = this.columns.find(obj => obj.field === state.field);\n return column?.sort !== false && state.order !== 'normal';\n });\n\n // Save the sorting states\n this.lastSortStates = states;\n\n // Get an array of sorting objects for each state\n let filedMapArray: Array = states.map(\n state => this.sortedIndexMap.get(state?.field) || { asc: [], desc: [], normal: [] }\n );\n\n let orderedData: number[] | null = null;\n\n // If there is already sorted data in the caches, take it\n if (filedMapArray.length > 0) {\n orderedData = states.reduce((data, state, index) => {\n const currentData = (filedMapArray[index] as any)?.[state.order];\n return currentData && currentData.length > 0 ? currentData : data;\n }, null);\n\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n\n // If there is no cache, we start sorting\n const sortedIndexArray: number[] = Array.from({ length: this._sourceLength }, (_, i) => i);\n\n // Perform sorting on each state\n sortedIndexArray.sort((indexA, indexB) => {\n return states.reduce((result: number, state: SortState) => {\n if (result !== 0) {\n return result;\n }\n\n const orderFn =\n state.orderFn ||\n (state.order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1));\n\n return orderFn(\n this.getOriginalField(indexA, state.field),\n this.getOriginalField(indexB, state.field),\n state.order\n );\n }, 0);\n });\n\n this.currentIndexedData = sortedIndexArray;\n\n // Process the hierarchy, if any\n if (this.hierarchyExpandLevel) {\n let nodeLength = sortedIndexArray.length;\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i])\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n\n // If there were no caches, initialize them\n if (!filedMapArray.length) {\n filedMapArray = states.map(() => ({ asc: [], desc: [], normal: [] }));\n for (let index = 0; index < states.length; index++) {\n this.sortedIndexMap.set(states[index].field, filedMapArray[index]);\n }\n }\n\n // Save the sorted indexes for each state to the cache\n states.forEach((state, index) => {\n const mapItem = filedMapArray[index] as ISortedMapItem;\n (mapItem as any)[state.order] = sortedIndexArray.slice(); // Save a copy of the array\n });\n\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.sortedIndexMap.set(field, filedMap);\n }\n\n private clearFilteredChildren(record: any) {\n record.filteredChildren = undefined;\n for (let i = 0; i < record.children?.length ?? 0; i++) {\n this.clearFilteredChildren(record.children[i]);\n }\n }\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules?.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n const isFieldInRules = this.lastSortStates.some(state => state.field === key);\n if (!isFieldInRules) {\n this.sortedIndexMap.delete(key);\n } else {\n this.lastSortStates.forEach(state => {\n if (state.order === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (state.order === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.asc = [];\n sortMap.desc = [];\n }\n });\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n this.lastFilterRules = null;\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n // if (this.dataConfig?.filterRules) {\n // return (this.records as Array)[dataIndex as number];\n // }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[dataIndex as number]) {\n return this.beforeChangedRecordsMap[dataIndex as number];\n }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n isCanExchangeOrder(sourceIndex: number, targetIndex: number) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n // 拖拽调整数据位置 目前对排序过的数据不过处理,因为自动排序和手动排序融合问题目前没有找到好的解决方式\n reorderRecord(sourceIndex: number, targetIndex: number) {\n if (this.lastSortStates?.some(state => state.order === 'asc' || state.order === 'desc')) {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.isCanExchangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n const sourceIds = parent.filteredChildren\n ? parent.filteredChildren.splice(sourceI, 1)\n : parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.filteredChildren ?? parent.children, sourceIds);\n } else {\n const sourceIds = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, sourceIds);\n }\n } else {\n sourceI = this.currentPagerIndexedData[sourceIndex] as number;\n targetI = this.currentPagerIndexedData[targetIndex];\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceIndex, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n }\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n const nodeLength = children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n}\n\n/**\n * 从数组array中获取index的值\n * 如:给index=[0,0] 则返回 array[0].children[0];如果给index=[2] 则返回array[2]; 如果给index=[3,0,4] 则返回array[3].children[0].children[4]\n * @param array\n * @param index\n * @returns\n */\nfunction getValueFromDeepArray(array: any, index: number[]) {\n let result = array;\n for (let i = 0; i < index.length; i++) {\n const currentIdx = index[i];\n if (result[currentIdx]) {\n result = result[currentIdx];\n } else {\n return undefined;\n }\n const children = result.filteredChildren ?? result?.children;\n if (children && i + 1 < index.length) {\n result = children;\n }\n }\n return result;\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport {\n AggregationType,\n HierarchyState,\n type FieldData,\n type FieldDef,\n type IListTableDataConfig,\n type IPagination,\n type MaybePromise,\n type MaybePromiseOrUndefined\n} from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type { ColumnData, ColumnsDefine } from '../ts-types/list-table/layout-map/api';\nimport type { DataSourceParam } from './DataSource';\nimport { DataSource } from './DataSource';\n\n/** @private */\nfunction _setFieldCache(\n fCache: { [index: number]: Map },\n index: number,\n field: FieldDef,\n\n value: any\n): void {\n const recCache = fCache[index] || (fCache[index] = new Map());\n recCache.set(field, value);\n}\n/**\n * table data source for caching Promise data\n *\n * @classdesc VTable.data.CachedDataSource\n * @memberof VTable.data\n */\nexport class CachedDataSource extends DataSource {\n /**\n * record cache 当用户定义的CachedDataSource.get为promise的时候 可以用rCache缓存已获取数据条目\n */\n private _recordCache: any[];\n /**\n * field cache 当用户定义field为promise的时候 可以用fCache缓存已获取值\n */\n private _fieldCache: { [index: number]: Map };\n\n groupAggregator: any;\n\n static get EVENT_TYPE(): typeof DataSource.EVENT_TYPE {\n return DataSource.EVENT_TYPE;\n }\n static ofArray(\n array: any[],\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ): CachedDataSource {\n return new CachedDataSource(\n {\n get: (index: number): any => {\n // if (Array.isArray(index)) {\n // return getValueFromDeepArray(array, index);\n // }\n return array[index];\n },\n length: array.length,\n records: array\n },\n dataConfig,\n pagination,\n columns,\n rowHierarchyType,\n hierarchyExpandLevel\n );\n }\n\n // _originalRecords: any[];\n constructor(\n opt?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n if (isArray(dataConfig?.groupByRules)) {\n rowHierarchyType = 'tree';\n }\n super(opt, dataConfig, pagination, columns, rowHierarchyType, hierarchyExpandLevel);\n this._recordCache = [];\n this._fieldCache = {};\n }\n protected getOriginalRecord(index: number): MaybePromiseOrUndefined {\n if (this._recordCache && this._recordCache[index]) {\n return this._recordCache[index];\n }\n return super.getOriginalRecord(index);\n }\n protected getRawRecord(index: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[index as number]) {\n return this.beforeChangedRecordsMap[index as number];\n }\n if (this._recordCache && this._recordCache[index]) {\n return this._recordCache[index];\n }\n return super.getRawRecord(index);\n }\n protected getOriginalField(\n index: number,\n field: F,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n const rowCache = this._fieldCache && this._fieldCache[index];\n if (rowCache) {\n const cache = rowCache.get(field);\n if (cache) {\n return cache;\n }\n }\n return super.getOriginalField(index, field, col, row, table);\n }\n\n clearCache(): void {\n if (this._recordCache) {\n this._recordCache = [];\n }\n if (this._fieldCache) {\n this._fieldCache = {};\n }\n }\n\n protected fieldPromiseCallBack(index: number, field: F, value: MaybePromiseOrUndefined): void {\n _setFieldCache(this._fieldCache, index, field, value);\n }\n protected recordPromiseCallBack(index: number, record: MaybePromiseOrUndefined): void {\n this._recordCache && (this._recordCache[index] = record);\n }\n get records(): any[] {\n return Array.isArray(this._recordCache) && this._recordCache.length > 0 ? this._recordCache : super.records;\n }\n\n release(): void {\n super.release?.();\n this._recordCache = null;\n this._fieldCache = null;\n }\n\n _generateFieldAggragations() {\n super._generateFieldAggragations();\n // groupby aggragations\n if (isArray(this.dataConfig?.groupByRules)) {\n // const groupByKey = this.dataConfig.groupByRules[0];\n const groupByKeys = this.dataConfig.groupByRules;\n this.groupAggregator = new this.registedAggregators[AggregationType.CUSTOM]({\n dimension: '',\n aggregationFun: (values: any, records: any, field: any) => {\n const groupMap = new Map();\n const groupResult = [] as any[];\n for (let i = 0; i < records.length; i++) {\n dealWithGroup(records[i], groupResult, groupMap, groupByKeys, 0);\n records[i].vtableOriginIndex = i;\n }\n return groupResult;\n }\n });\n this.fieldAggregators.push(this.groupAggregator);\n }\n }\n\n processRecords(records: any[]) {\n const result = super.processRecords(records);\n const groupResult = this.groupAggregator?.value();\n if (groupResult) {\n // this._originalRecords = result;\n return groupResult;\n }\n return result;\n }\n\n getGroupLength() {\n return this.dataConfig?.groupByRules?.length ?? 0;\n }\n\n updateGroup() {\n this.clearCache();\n\n const oldSource = this.source;\n (this as any)._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n if (oldSource) {\n syncGroupCollapseState(oldSource, this.source);\n }\n\n // syncGroupCollapseState(this.source, newSource.source);\n this.sourceLength = this.source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this.sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this.sourceLength;\n this.pagination.totalCount = this.sourceLength;\n }\n\n this.initTreeHierarchyState();\n this.updatePagerData();\n }\n\n addRecordsForGroup(recordArr: any[], recordIndex?: number) {\n if (!isArray(recordArr) || recordArr.length === 0) {\n return;\n }\n if (recordIndex === undefined || recordIndex > this.dataSourceObj.records) {\n recordIndex = this.dataSourceObj.records;\n }\n // this.dataSourceObj.records.push(...recordArr);\n this.dataSourceObj.records.splice(recordIndex, 0, ...recordArr);\n\n this.updateGroup();\n }\n\n deleteRecordsForGroup(recordIndexs: number[]) {\n if (!isArray(recordIndexs) || recordIndexs.length === 0) {\n return;\n }\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this.sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n this.dataSourceObj.records.splice(recordIndex, 1);\n this.sourceLength -= 1;\n }\n\n this.updateGroup();\n }\n\n updateRecordsForGroup(records: any[], recordIndexs: number[]) {\n // const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this.sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n // realDeletedRecordIndexs.push(recordIndex);\n this.dataSourceObj.records[recordIndex] = records[index];\n }\n\n this.updateGroup();\n }\n}\n\nfunction dealWithGroup(record: any, children: any[], map: Map, groupByKeys: string[], level: number): any {\n const groupByKey = groupByKeys[level];\n if (!isValid(groupByKey)) {\n children.push(record);\n return;\n }\n const value = record[groupByKey];\n if (value !== undefined) {\n if (map.has(value)) {\n const index = map.get(value);\n // children[index].children.push(record);\n return dealWithGroup(record, children[index].children, children[index].map, groupByKeys, level + 1);\n }\n map.set(value, children.length);\n children.push({\n vtableMerge: true,\n vtableMergeName: value,\n children: [] as any,\n map: new Map()\n });\n return dealWithGroup(\n record,\n children[children.length - 1].children,\n children[children.length - 1].map,\n groupByKeys,\n level + 1\n );\n }\n}\n\nfunction syncGroupCollapseState(\n oldSource: any,\n newSource: any,\n oldGroupMap?: Map,\n newGroupMap?: Map\n) {\n if (!oldGroupMap) {\n oldGroupMap = new Map();\n for (let i = 0; i < oldSource.length; i++) {\n const record = oldSource[i];\n if (record.vtableMerge) {\n oldGroupMap.set(record.vtableMergeName, i);\n }\n }\n }\n\n if (!newGroupMap) {\n newGroupMap = new Map();\n for (let i = 0; i < newSource.length; i++) {\n const record = newSource[i];\n if (record.vtableMerge) {\n newGroupMap.set(record.vtableMergeName, i);\n }\n }\n }\n\n for (let i = 0; i < oldSource.length; i++) {\n const oldRecord = oldSource[i];\n const newRecord = newSource[newGroupMap.get(oldRecord.vtableMergeName)];\n if (isValid(newRecord)) {\n newRecord.hierarchyState = oldSource[i].hierarchyState;\n }\n if (\n isArray(oldRecord.children) &&\n isArray(newRecord.children) &&\n oldRecord.map.size !== 0 &&\n newRecord.map.size !== 0\n ) {\n syncGroupCollapseState(oldRecord.children, newRecord.children, oldRecord.map, newRecord.map);\n }\n }\n}\n","// @ts-nocheck\nimport parse from 'cssfontparser';\n\nexport function parseFont(font: string) {\n return parse(font);\n}\n","import { Bounds } from '@visactor/vutils';\nimport type { RectProps } from '../ts-types';\n\nexport class Rect implements RectProps {\n bounds: Bounds;\n constructor(left: number, top: number, width: number, height: number) {\n this.bounds = new Bounds();\n this.bounds.set(left, top, left + width, top + height);\n }\n\n static bounds(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, Math.round(right - left), Math.round(bottom - top));\n }\n\n get left(): number {\n return this.bounds.x1;\n }\n set left(left: number) {\n this.bounds.x1 = left;\n }\n get top(): number {\n return this.bounds.y1;\n }\n set top(top: number) {\n this.bounds.y1 = top;\n }\n get right(): number {\n return this.bounds.x2;\n }\n set right(right: number) {\n this.bounds.x2 = right;\n }\n get bottom(): number {\n return this.bounds.y2;\n }\n set bottom(bottom: number) {\n this.bounds.y2 = bottom;\n }\n get width(): number {\n return this.bounds.width();\n }\n set width(width: number) {\n this.bounds.x2 = this.bounds.x1 + width;\n }\n get height(): number {\n return this.bounds.height();\n }\n set height(height: number) {\n this.bounds.y2 = this.bounds.y1 + height;\n }\n\n offsetLeft(offset: number): void {\n this.bounds.translate(offset, 0);\n }\n offsetTop(offset: number): void {\n this.bounds.translate(0, offset);\n }\n copy(): Rect {\n return new Rect(this.left, this.top, this.width, this.height);\n }\n contains(another: Rect): boolean {\n return this.bounds.encloses(another.bounds);\n }\n inPoint(x: number, y: number): boolean {\n return this.bounds.contains(x, y);\n }\n}\n","/* Adapted from cheetah-grid by yosuke ota\n *url:https://github.com/future-architect/cheetah-grid/blob/master/packages/cheetah-grid/src/js/internal/calc.ts\n *License: https://github.com/future-architect/cheetah-grid/blob/master/LICENSE\n * @license\n */\n\nimport { isNil, isNumber, isString } from '@visactor/vutils';\nimport { array } from './helper';\n\nconst TYPE_PAREN = 0;\nconst TYPE_UNIT = 1;\nconst TYPE_OPERATOR = 2;\nconst TYPE_NUMBER = 3;\n\nconst NODE_TYPE_UNIT = 10;\nconst NODE_TYPE_BINARY_EXPRESSION = 11;\nconst NODE_TYPE_NUMBER = 12;\n\ntype Ops = '-' | '+' | '*' | '/';\ntype ParenToken = {\n value: '(' | ')';\n type: typeof TYPE_PAREN;\n};\ntype UnitToken = {\n unit: string;\n value: number;\n type: typeof TYPE_UNIT;\n};\ntype OpToken = {\n value: Ops;\n type: typeof TYPE_OPERATOR;\n};\ntype NumToken = {\n value: number;\n type: typeof TYPE_NUMBER;\n};\ntype Token = ParenToken | UnitToken | OpToken | NumToken;\ntype UnitNode = {\n nodeType: typeof NODE_TYPE_UNIT;\n unit: string;\n value: number;\n};\ntype BinaryNode = {\n nodeType: typeof NODE_TYPE_BINARY_EXPRESSION;\n left: Node;\n op: OpToken;\n right: Node;\n};\ntype NumNode = {\n nodeType: typeof NODE_TYPE_NUMBER;\n value: number;\n};\ntype Node = UnitNode | BinaryNode | NumNode;\n\nconst TABULATION = 0x09;\nconst CARRIAGE_RETURN = 0x0d;\nconst LINE_FEED = 0x0a;\nconst FORM_FEED = 0x0c;\nconst SPACE = 0x20;\nconst PERCENT = 0x25;\nconst FULL_STOP = 0x2e;\nconst DIGIT_0 = 0x30;\nconst DIGIT_9 = 0x39;\nconst LATIN_CAPITAL_A = 0x41;\nconst LATIN_CAPITAL_Z = 0x5a;\nconst LATIN_SMALL_A = 0x61;\nconst LATIN_SMALL_Z = 0x7a;\nfunction isUpperLetter(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z;\n}\nfunction isLowerLetter(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z;\n}\nfunction isLetter(cp: number): boolean {\n return isLowerLetter(cp) || isUpperLetter(cp);\n}\nfunction isWhitespace(cp: number): boolean {\n return cp === TABULATION || cp === LINE_FEED || cp === FORM_FEED || cp === CARRIAGE_RETURN || cp === SPACE;\n}\nfunction isDigit(cp: number): boolean {\n return cp >= DIGIT_0 && cp <= DIGIT_9;\n}\nfunction isDot(cp: number): boolean {\n return cp === FULL_STOP;\n}\nfunction isUnit(cp: number): boolean {\n return isLetter(cp) || cp === PERCENT;\n}\n\nfunction createError(calc: string): Error {\n return new Error(`calc parse error: ${calc}`);\n}\n\n/**\n * tokenize\n * @param {string} calc calc expression\n * @returns {Array} tokens\n * @private\n */\nfunction tokenize(calc: string): Token[] {\n const exp = calc.replace(/calc\\(/g, '(').trim();\n\n const tokens: Token[] = [];\n const len = exp.length;\n for (let index = 0; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (c === '(' || c === ')') {\n tokens.push({ value: c, type: TYPE_PAREN });\n } else if (c === '*' || c === '/') {\n tokens.push({ value: c, type: TYPE_OPERATOR });\n } else if (c === '+' || c === '-') {\n index = parseSign(c, index + 1) - 1;\n } else if (isDigit(cp) || isDot(cp)) {\n index = parseNum(c, index + 1) - 1;\n } else if (isWhitespace(cp)) {\n // skip\n } else {\n throw createError(calc);\n }\n }\n\n function parseSign(sign: '+' | '-', start: number): number {\n if (start < len) {\n const c = exp[start];\n const cp = c.charCodeAt(0);\n if (isDigit(cp) || isDot(cp)) {\n return parseNum(sign + c, start + 1);\n }\n }\n tokens.push({ value: sign, type: TYPE_OPERATOR });\n return start;\n }\n function parseNum(num: string, start: number): number {\n let index = start;\n for (; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (isDigit(cp)) {\n num += c;\n } else if (c === '.') {\n if (num.indexOf('.') >= 0) {\n throw createError(calc);\n }\n num += c;\n } else if (isUnit(cp)) {\n return parseUnit(num, c, index + 1);\n } else {\n break;\n }\n }\n if (num === '.') {\n throw createError(calc);\n }\n tokens.push({ value: parseFloat(num), type: TYPE_NUMBER });\n return index;\n }\n function parseUnit(num: string, unit: string, start: number): number {\n let index = start;\n for (; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (isUnit(cp)) {\n unit += c;\n } else {\n break;\n }\n }\n tokens.push({ value: parseFloat(num), unit, type: TYPE_UNIT });\n return index;\n }\n return tokens;\n}\n\nconst PRECEDENCE = {\n '*': 3,\n '/': 3,\n '+': 2,\n '-': 2\n};\n\nfunction lex(tokens: Token[], calc: string): Node {\n function buildBinaryExpNode(stack: (Node | OpToken)[]): BinaryNode {\n const right = stack.pop() as Node;\n const op = stack.pop() as OpToken;\n const left = stack.pop() as Node;\n\n if (!left || !left.nodeType || !op || op.type !== TYPE_OPERATOR || !right || !right.nodeType) {\n throw createError(calc);\n }\n return {\n nodeType: NODE_TYPE_BINARY_EXPRESSION,\n left,\n op,\n right\n };\n }\n\n const stack: (Node | OpToken)[] = [];\n\n while (tokens.length) {\n const token = tokens.shift() as Token;\n if (token.type === TYPE_PAREN && token.value === '(') {\n let deep = 0;\n const closeIndex = array.findIndex(tokens, t => {\n if (t.type === TYPE_PAREN && t.value === '(') {\n deep++;\n } else if (t.type === TYPE_PAREN && t.value === ')') {\n if (!deep) {\n return true;\n }\n deep--;\n }\n return false;\n });\n if (closeIndex === -1) {\n throw createError(calc);\n }\n\n stack.push(lex(tokens.splice(0, closeIndex), calc));\n tokens.shift();\n } else if (token.type === TYPE_OPERATOR) {\n if (stack.length >= 3) {\n const beforeOp = (stack[stack.length - 2] as OpToken).value;\n if (PRECEDENCE[token.value] <= PRECEDENCE[beforeOp]) {\n stack.push(buildBinaryExpNode(stack));\n }\n }\n stack.push(token);\n } else if (token.type === TYPE_UNIT) {\n const { value: num, unit } = token;\n stack.push({\n nodeType: NODE_TYPE_UNIT,\n value: num,\n unit\n });\n } else if (token.type === TYPE_NUMBER) {\n stack.push({\n nodeType: NODE_TYPE_NUMBER,\n value: token.value\n });\n }\n }\n while (stack.length > 1) {\n stack.push(buildBinaryExpNode(stack));\n }\n return stack[0] as Node;\n}\n\nfunction parse(calcStr: string): Node {\n const tokens = tokenize(calcStr);\n return lex(tokens, calcStr);\n}\n\nfunction calcNode(node: Node, context: CalcContext): number {\n if (node.nodeType === NODE_TYPE_BINARY_EXPRESSION) {\n const left = calcNode(node.left, context);\n const right = calcNode(node.right, context);\n\n switch (node.op.value) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`calc error. unknown operator: ${node.op.value}`);\n }\n } else if (node.nodeType === NODE_TYPE_UNIT) {\n switch (node.unit) {\n case '%':\n return (node.value * context.full) / 100;\n // case 'em':\n // return node.value * context.em;\n case 'px':\n return node.value;\n default:\n throw new Error(`calc error. unknown unit: ${node.unit}`);\n }\n } else if (node.nodeType === NODE_TYPE_NUMBER) {\n return node.value;\n }\n throw new Error('calc error.');\n}\n\nfunction toPxInternal(value: string, context: CalcContext): number {\n const ast = parse(value);\n return calcNode(ast, context);\n}\n\ntype CalcContext = {\n full: number;\n // em: number;\n};\n\nexport function toPx(value: string | number, context: CalcContext): number {\n if (typeof value === 'string') {\n return toPxInternal(value.trim(), context);\n }\n return value - 0;\n}\n\nexport type IPercent = `${number}%`;\n\nexport function couldBeValidNumber(v: any) {\n if (isNil(v)) {\n return false;\n }\n if (isNumber(v)) {\n return true;\n }\n // eslint-disable-next-line no-self-compare\n return +v === +v;\n}\n\nexport function isPercent(v: any): v is IPercent {\n if (!isString(v)) {\n return false;\n }\n if (!v.endsWith('%')) {\n return false;\n }\n return couldBeValidNumber(v.substring(0, v.length - 1));\n}\n","import type { IThemeSpec } from './../vrender';\nimport type { BaseTable } from '../core';\nimport { CachedDataSource, DataSource } from '../data';\nimport { parseFont } from '../scenegraph/utils/font';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport { Rect } from '../tools/Rect';\nimport * as calc from '../tools/calc';\nimport type {\n Aggregation,\n ColumnsDefine,\n CustomAggregation,\n FullExtendStyle,\n ListTableAPI,\n ListTableConstructorOptions,\n SortState\n} from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { defaultOrderFn } from '../tools/util';\nimport type { ListTable } from '../ListTable';\nimport { isValid } from '@visactor/vutils';\n\nexport function createRootElement(padding: any, className: string = 'vtable'): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('tabindex', '0');\n element.classList.add(className);\n element.style.outline = 'none';\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n\n return element;\n}\nexport function updateRootElementPadding(element: HTMLElement, padding: any): void {\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n}\nexport function _dealWithUpdateDataSource(table: BaseTableAPI, fn: (table: BaseTableAPI) => void): void {\n const { dataSourceEventIds } = table.internalProps;\n\n if (dataSourceEventIds) {\n dataSourceEventIds.forEach((id: any) => table.internalProps.handler.off(id));\n }\n\n fn(table);\n\n table.internalProps.dataSourceEventIds = [\n table.internalProps.handler.on(table.internalProps.dataSource, DataSource.EVENT_TYPE.CHANGE_ORDER, () => {\n if (table.dataSource.hierarchyExpandLevel) {\n table.refreshRowColCount();\n }\n table.render();\n })\n ];\n}\n/** @private */\nexport function _setRecords(table: ListTableAPI, records: any[] = []): void {\n _dealWithUpdateDataSource(table, () => {\n table.internalProps.records = records;\n const newDataSource = (table.internalProps.dataSource = CachedDataSource.ofArray(\n records,\n table.internalProps.dataConfig,\n table.pagination,\n table.internalProps.columns,\n table.internalProps.layoutMap.rowHierarchyType,\n getHierarchyExpandLevel(table)\n ));\n table.addReleaseObj(newDataSource);\n });\n}\n\nfunction getHierarchyExpandLevel(table: ListTableAPI) {\n if ((table.options as ListTableConstructorOptions).hierarchyExpandLevel) {\n return (table.options as ListTableConstructorOptions).hierarchyExpandLevel;\n } else if (table.options.groupBy) {\n return Infinity;\n }\n return table._hasHierarchyTreeHeader?.() ? 1 : undefined;\n}\n\nexport function _setDataSource(table: BaseTableAPI, dataSource: DataSource): void {\n _dealWithUpdateDataSource(table, () => {\n if (dataSource) {\n if (dataSource instanceof DataSource) {\n table.internalProps.dataSource = dataSource;\n } else {\n const newDataSource = (table.internalProps.dataSource = new CachedDataSource(dataSource));\n table.addReleaseObj(newDataSource);\n }\n } else {\n table.internalProps.dataSource = DataSource.EMPTY;\n }\n table.internalProps.records = null;\n });\n}\nexport function _getTargetFrozenRowAt(\n table: BaseTableAPI,\n absoluteY: number\n): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n} | null {\n if (!table.internalProps.frozenRowCount) {\n return null;\n }\n let { scrollTop } = table;\n const rowCount = table.internalProps.frozenRowCount;\n for (let row = 0; row < rowCount; row++) {\n const height = table.getRowHeight(row);\n const bottom = scrollTop + height;\n if (bottom > absoluteY) {\n return {\n top: scrollTop,\n row,\n bottom,\n height\n };\n }\n scrollTop = bottom;\n }\n return null;\n}\n\nexport function _getTargetFrozenColAt(\n table: BaseTableAPI,\n absoluteX: number\n): {\n left: number;\n col: number;\n right: number;\n width: number;\n} | null {\n if (!table.internalProps.frozenColCount) {\n return null;\n }\n let { scrollLeft } = table;\n const colCount = table.internalProps.frozenColCount;\n for (let col = 0; col < colCount; col++) {\n const width = table.getColWidth(col);\n const right = scrollLeft + width;\n if (right > absoluteX) {\n return {\n left: scrollLeft,\n col,\n right,\n width\n };\n }\n scrollLeft = right;\n }\n return null;\n}\n\nexport function _toPxWidth(table: BaseTable, width: string | number): number {\n return Math.round(calc.toPx(width, table.internalProps.calcWidthContext));\n}\n\nexport function _applyColWidthLimits(limits: { min?: number; max?: number } | void | null, orgWidth: number): number {\n if (!limits) {\n return orgWidth;\n }\n\n if (limits.min) {\n if (limits.min > orgWidth) {\n return limits.min;\n }\n }\n if (limits.max) {\n if (limits.max < orgWidth) {\n return limits.max;\n }\n }\n return orgWidth;\n}\n/**\n * 检查设置的width是否为'auto'\n * @param {string|number} width width definition\n * @returns {boolean}\n */\nexport function isAutoDefine(width: string | number): width is 'auto' {\n return Boolean(width && typeof width === 'string' && width.toLowerCase() === 'auto');\n}\n\nexport function _getScrollableVisibleRect(table: BaseTableAPI): Rect {\n let frozenColsWidth = 0;\n let rightFrozenColsWidth = 0;\n if (table.frozenColCount > 0) {\n //有固定列时绘制固定列\n frozenColsWidth = table.getFrozenColsWidth();\n }\n if (table.rightFrozenColCount > 0) {\n //有固定列时绘制固定列\n rightFrozenColsWidth = table.getRightFrozenColsWidth();\n }\n let frozenRowsHeight = 0;\n let bottomFrozenRowsHeight = 0;\n if (table.frozenRowCount > 0) {\n //有固定列时绘制固定列\n frozenRowsHeight = table.getFrozenRowsHeight();\n }\n if (table.bottomFrozenRowCount > 0) {\n //有固定列时绘制固定列\n bottomFrozenRowsHeight = table.getBottomFrozenRowsHeight();\n }\n return new Rect(\n table.scrollLeft + frozenColsWidth,\n table.scrollTop + frozenRowsHeight,\n table.tableNoFrameWidth - frozenColsWidth - rightFrozenColsWidth,\n table.tableNoFrameHeight - frozenRowsHeight - bottomFrozenRowsHeight\n );\n}\n/**\n * @description: 从style对象里获取theme所需要的属性\n * @param {FullExtendStyle} headerStyle\n * @param {BaseTableAPI} table\n * @param {number} col\n * @param {number} row\n * @param {any} getProp\n * @return {*}\n */\nexport function getStyleTheme(\n headerStyle: FullExtendStyle,\n table: BaseTableAPI,\n col: number,\n row: number,\n getProp: any,\n needGetTheme = true\n) {\n // 属性参考IStyleOption\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, table));\n const bgColor = getProp('bgColor', headerStyle, col, row, table);\n\n const font = getProp('font', headerStyle, col, row, table);\n let fontFamily;\n let fontSize;\n let fontWeight;\n let fontStyle;\n let fontVariant;\n if (font) {\n // 后期会弃用直接设置font,而使用fontFamily fontSize fontWeight 等属性\n const { family, size, weight, style, variant } = parseFont(font);\n fontFamily = family.join(' ');\n fontSize = size;\n fontWeight = weight;\n fontStyle = style;\n fontStyle = variant;\n } else {\n fontFamily = getProp('fontFamily', headerStyle, col, row, table);\n fontSize = getProp('fontSize', headerStyle, col, row, table);\n fontWeight = getProp('fontWeight', headerStyle, col, row, table);\n fontStyle = getProp('fontStyle', headerStyle, col, row, table);\n fontVariant = getProp('fontVariant', headerStyle, col, row, table);\n }\n\n // const fontSize = getFontSize(font);\n // const fontWeight = getFontWeight(font);\n\n const textAlign = getProp('textAlign', headerStyle, col, row, table);\n const textBaseline = getProp('textBaseline', headerStyle, col, row, table);\n const color = getProp('color', headerStyle, col, row, table);\n const strokeColor = getProp('strokeColor', headerStyle, col, row, table);\n\n const lineHeight = getProp('lineHeight', headerStyle, col, row, table);\n const underline = getProp('underline', headerStyle, col, row, table); // boolean\n // const underlineColor = getProp('underlineColor', headerStyle, col, row, table);\n const underlineDash = getProp('underlineDash', headerStyle, col, row, table);\n const underlineOffset = getProp('underlineOffset', headerStyle, col, row, table);\n const lineThrough = getProp('lineThrough', headerStyle, col, row, table); // boolean\n // const lineThroughColor = getProp('lineThroughColor', headerStyle, col, row, table);\n // const lineThroughDash = getProp('lineThroughDash', headerStyle, col, row, table);\n const textDecorationWidth = Math.max(1, Math.floor(fontSize / 10));\n\n const textOverflow = getProp('textOverflow', headerStyle, col, row, table); // 'clip' | 'ellipsis' | string\n const borderColor = getProp('borderColor', headerStyle, col, row, table); // string | string[]\n const borderLineWidth = getProp('borderLineWidth', headerStyle, col, row, table); // number | number[]\n const borderLineDash = getProp('borderLineDash', headerStyle, col, row, table); // number[] | (number[] | null)[]\n\n const marked = getProp('marked', headerStyle, col, row, table); // boolean\n const cursor = getProp('cursor', headerStyle, col, row, table); // boolean\n\n const hasFunctionPros =\n !padding ||\n !bgColor ||\n !font ||\n !textAlign ||\n !textBaseline ||\n !color ||\n !textOverflow ||\n !borderColor ||\n !borderLineWidth ||\n !borderLineDash ||\n typeof underline !== 'boolean' ||\n typeof lineThrough !== 'boolean' ||\n typeof marked !== 'boolean';\n if (!needGetTheme) {\n return { hasFunctionPros };\n }\n const theme: IThemeSpec & { _vtable: any } = {\n text: {\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n fontVariant,\n fill: color,\n stroke: strokeColor ?? false,\n textAlign,\n textBaseline,\n lineHeight: lineHeight ?? fontSize,\n underline: underline ? textDecorationWidth : undefined,\n underlineDash,\n underlineOffset,\n lineThrough: lineThrough ? textDecorationWidth : undefined,\n ellipsis:\n textOverflow === 'clip'\n ? ''\n : textOverflow === 'ellipsis'\n ? '...'\n : isValid(textOverflow)\n ? textOverflow\n : undefined\n },\n group: {\n fill: bgColor,\n lineDash: borderLineDash,\n lineWidth: borderLineWidth,\n stroke: borderColor,\n cursor: cursor === 'auto' || cursor === 'default' ? undefined : cursor\n // cornerRadius: getCellCornerRadius(col, row, table)\n },\n _vtable: {\n padding,\n marked\n }\n };\n\n if (Array.isArray(borderLineWidth)) {\n (theme.group as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n }\n if (Array.isArray(borderColor)) {\n const strokeColors = getQuadProps(borderColor);\n (theme.group as any).stroke = strokeColors.every(color => !color) ? false : strokeColors; // deal width strokeColor: [null, null, null, null]\n (theme.group as any).strokeArrayColor = getQuadProps(borderColor);\n }\n\n return {\n theme,\n hasFunctionPros\n };\n}\n\nexport function getCellCornerRadius(col: number, row: number, table: BaseTableAPI) {\n const tableCornerRadius = table.theme.frameStyle.cornerRadius;\n if (Array.isArray(tableCornerRadius)) {\n if (col === 0 && row === 0) {\n return [tableCornerRadius[0], 0, 0, 0];\n } else if (col === table.colCount - 1 && row === 0) {\n return [0, tableCornerRadius[1], 0, 0];\n } else if (col === 0 && row === table.rowCount - 1) {\n return [0, 0, 0, tableCornerRadius[3]];\n } else if (col === table.colCount - 1 && row === table.rowCount - 1) {\n return [0, 0, tableCornerRadius[2], 0];\n }\n } else if (tableCornerRadius) {\n if (col === 0 && row === 0) {\n return [tableCornerRadius, 0, 0, 0];\n } else if (col === table.colCount - 1 && row === 0) {\n return [0, tableCornerRadius, 0, 0];\n } else if (col === 0 && row === table.rowCount - 1) {\n return [0, 0, 0, tableCornerRadius];\n } else if (col === table.colCount - 1 && row === table.rowCount - 1) {\n return [0, 0, tableCornerRadius, 0];\n }\n }\n return 0;\n}\n\nexport function parseMarkLineGetExtendRange(markLine: any): number | 'sum' | 'max' {\n if (markLine) {\n if (Array.isArray(markLine)) {\n let extendRange: number | 'sum' | 'max';\n for (let i = 0; i < markLine.length; i++) {\n if (markLine[i].autoRange) {\n if (\n markLine[i].y === 'sum' ||\n markLine[i].x === 'sum' ||\n markLine[i].y1 === 'sum' ||\n markLine[i].x1 === 'sum'\n ) {\n return 'sum';\n }\n if (\n markLine[i].y === 'max' ||\n markLine[i].x === 'max' ||\n markLine[i].y1 === 'max' ||\n markLine[i].x1 === 'max'\n ) {\n extendRange = 'max';\n }\n if (typeof markLine[i].y === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].y);\n }\n if (typeof markLine[i].x === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].x);\n }\n if (typeof markLine[i].y1 === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].y1);\n }\n if (typeof markLine[i].x1 === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].x1);\n }\n }\n }\n return extendRange;\n } else if (markLine.autoRange) {\n if (markLine.y === 'sum' || markLine.x === 'sum' || markLine.y1 === 'sum' || markLine.x1 === 'sum') {\n return 'sum';\n }\n if (markLine.y === 'max' || markLine.x === 'max' || markLine.y1 === 'max' || markLine.x1 === 'max') {\n return 'max';\n }\n if (typeof markLine.y === 'number') {\n return markLine.y;\n }\n if (typeof markLine.x === 'number') {\n return markLine.x;\n }\n if (typeof markLine.y1 === 'number') {\n return markLine.y1;\n }\n if (typeof markLine.x1 === 'number') {\n return markLine.x1;\n }\n }\n }\n return undefined;\n}\n\nexport function generateAggregationForColumn(table: ListTable) {\n for (let col = 0; col < table.internalProps.columns.length; col++) {\n const colDef = table.internalProps.columns[col];\n if (colDef.aggregation) {\n } else if (table.options.aggregation) {\n let aggregation;\n if (typeof table.options.aggregation === 'function') {\n aggregation = table.options.aggregation({\n col: col,\n field: colDef.field as string\n });\n } else {\n aggregation = table.options.aggregation;\n }\n\n if (aggregation) {\n if (Array.isArray(aggregation)) {\n const aggregations: (Aggregation | CustomAggregation)[] = [];\n aggregation.forEach(item => {\n aggregations.push(Object.assign({ showOnTop: false }, item));\n });\n colDef.aggregation = aggregations;\n } else {\n colDef.aggregation = Object.assign({ showOnTop: false }, aggregation);\n }\n }\n }\n }\n}\n\nexport function checkHasAggregationOnColumnDefine(colDefs: ColumnsDefine) {\n for (let i = 0; i < colDefs.length; i++) {\n const colDef = colDefs[i];\n if (colDef.aggregation) {\n return true;\n }\n }\n return false;\n}\n","import { isValid } from '@visactor/vutils';\nimport type {\n ColumnStyle,\n ColumnStyleOption,\n FullExtendStyle,\n IImageStyleOption,\n ITextStyleOption,\n IStyleOption,\n StylePropertyFunctionArg\n} from '../ts-types';\n\nimport { ImageStyle } from './style/ImageStyle';\nimport { TextStyle } from './style/MultilineTextStyle';\nimport { NumberStyle } from './style/NumberStyle';\nimport { Style } from './style/Style';\nimport type { TableTheme } from '../themes/theme';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { RadioStyle } from './style/RadioStyle';\n\nconst { EVENT_TYPE } = Style;\nexport {\n EVENT_TYPE,\n Style,\n NumberStyle,\n ImageStyle,\n TextStyle,\n // types\n IStyleOption,\n IImageStyleOption,\n ITextStyleOption\n};\nexport function of(\n columnStyle: ColumnStyleOption,\n bodyStyle: ColumnStyleOption,\n styleArg: StylePropertyFunctionArg,\n StyleClassDef: typeof Style = Style,\n globalAutoWrapText: boolean,\n theme: TableTheme\n): FullExtendStyle {\n if (columnStyle || bodyStyle) {\n if (columnStyle instanceof Style) {\n return columnStyle;\n } else if (typeof columnStyle === 'function') {\n return of(columnStyle(styleArg), bodyStyle, styleArg, StyleClassDef, globalAutoWrapText, theme);\n }\n if (!columnStyle) {\n columnStyle = {};\n }\n if (globalAutoWrapText && !isValid((columnStyle as any).autoWrapText)) {\n (columnStyle as any).autoWrapText = true;\n }\n if (StyleClassDef === CheckboxStyle) {\n return new CheckboxStyle(columnStyle ?? {}, (bodyStyle ?? {}) as any, (theme.checkboxStyle ?? {}) as any);\n } else if (StyleClassDef === RadioStyle) {\n return new RadioStyle(columnStyle ?? {}, (bodyStyle ?? {}) as any, (theme.radioStyle ?? {}) as any);\n }\n return new StyleClassDef((columnStyle ?? {}) as any, (bodyStyle ?? {}) as any);\n }\n return StyleClassDef.DEFAULT;\n}\n","export type EnvMode = 'browser' | 'node' | 'worker' | 'miniApp' | 'desktop-miniApp';\nexport type LooseFunction = (...args: any) => any;\n\nexport class Env {\n static _mode: EnvMode;\n public static get mode() {\n if (!Env._mode) {\n Env._mode = defaultMode();\n }\n return Env._mode;\n }\n public static set mode(mode: EnvMode) {\n Env._mode = mode;\n }\n\n static dpr = 0;\n\n static CreateCanvas?: LooseFunction;\n\n static LoadImage?: LooseFunction;\n\n static RequestAnimationFrame?: LooseFunction;\n\n static CancelAnimationFrame?: LooseFunction;\n\n static RegisterCreateCanvas(func: LooseFunction) {\n Env.CreateCanvas = func;\n }\n\n static RegisterLoadImage(func: LooseFunction) {\n Env.LoadImage = func;\n }\n\n static GetCreateCanvasFunc(): LooseFunction | undefined {\n if (Env.CreateCanvas) {\n return Env.CreateCanvas;\n }\n if (Env.mode === 'worker') {\n return (width = 200, height = 200) => new OffscreenCanvas(width, height);\n }\n return undefined;\n }\n\n static RegisterRequestAnimationFrame(func: LooseFunction) {\n Env.RequestAnimationFrame = func();\n }\n\n static GetRequestAnimationFrame() {\n if (Env.RequestAnimationFrame) {\n return Env.RequestAnimationFrame;\n }\n return undefined;\n }\n\n static RegisterCancelAnimationFrame(func: LooseFunction) {\n Env.CancelAnimationFrame = func();\n }\n\n static GetCancelAnimationFrame() {\n if (Env.CancelAnimationFrame) {\n return Env.CancelAnimationFrame;\n }\n return undefined;\n }\n}\n\n/**\n *\n * 这个默认的判断方法并不能区分出不同的环境,所以这里采用是否判断\n * 满足条件为 'browser',不满足则为 'node'\n */\nfunction defaultMode(): EnvMode {\n let mode: EnvMode = 'browser';\n try {\n if ((window as any).type === 'node') {\n mode = 'node';\n } else if (typeof window !== 'undefined' && !window.performance) {\n mode = 'miniApp';\n } else if (typeof window === 'undefined') {\n mode = 'node';\n }\n } catch (err) {\n mode = 'node';\n }\n return mode;\n}\n","import { Env } from '../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-style-styleSheet';\n styleElement.textContent = `\n.vtable .input-container {\n\tposition: absolute;\n\ttop:0px;\n}\n.vtable .table-scrollable {\n\tposition: absolute;\n\toverflow: scroll;\n}\n.vtable .table-scrollable::-webkit-scrollbar-button{\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-track-piece{\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-corner {\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-thumb {\n\tborder-radius : 4px;\n\tbackground-color : rgba(100, 100, 100, .5);\n}\n\n.vtable .table-scroll-end-point {\n\topacity: 0;\n\tposition: relative;\n}\n.vtable {\n\t/* 设置overflow: auto 应该是为了滚动条的某个问题 但设置了auto之后 dom的下拉菜单只能显示在vtable节点中 超出会截断;现在去掉auto 暂时滚动条的问题没有发现 */\n\t/* overflow: auto; */\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: left;\n -webkit-font-smoothing:auto;\n\n overflow: hidden; // for react-vtable dom custom element\n}\n\n.vtable-gantt {\n\t/* 设置overflow: auto 应该是为了滚动条的某个问题 但设置了auto之后 dom的下拉菜单只能显示在vtable节点中 超出会截断;现在去掉auto 暂时滚动条的问题没有发现 */\n\t/* overflow: auto; */\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: left;\n -webkit-font-smoothing:auto;\n\n overflow: hidden; // for react-vtable dom custom element\n}\n.vtable .table-component-container {\n pointer-events: none;\n overflow: hidden;\n position: absolute;\n top: 0px;\n left: 0px;\n}\n.vtable > canvas {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n}\n.vtable .table-focus-control {\n\tposition: relative !important;\n\twidth: 1px;\n\theight: 1px;\n\topacity: 0;\n\tpadding: 0;\n\tmargin: 0;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\tmax-width: 500px;\n\tmax-height: 500px;\n\tfloat: none !important;\n}\n.vtable input.table-focus-control::-ms-clear {\n\tvisibility: hidden;\n}\n.vtable input.table-focus-control.composition {\n\topacity: 1;\n\tmax-width: none;\n\tmax-height: none;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { ScrollStyle } from '../ts-types';\n\nexport function getHorizontalScrollBarSize(scrollStyle?: ScrollStyle): number {\n if (\n scrollStyle?.hoverOn ||\n (scrollStyle?.horizontalVisible && scrollStyle?.horizontalVisible === 'none') ||\n (!scrollStyle?.horizontalVisible && scrollStyle?.visible === 'none')\n ) {\n return 0;\n }\n return scrollStyle?.width ?? 7;\n}\n\nexport function getVerticalScrollBarSize(scrollStyle?: ScrollStyle): number {\n if (\n scrollStyle?.hoverOn ||\n (scrollStyle?.verticalVisible && scrollStyle?.verticalVisible === 'none') ||\n (!scrollStyle?.verticalVisible && scrollStyle?.visible === 'none')\n ) {\n return 0;\n }\n return scrollStyle?.width ?? 7;\n}\n\nexport function isValidStyle(style: (string | number) | (string | number)[]) {\n if (!isValid(style)) {\n return false;\n }\n if (isArray(style)) {\n return style.some(s => isValid(s));\n }\n\n return true;\n}\n\nexport function isZeroStyle(style: number | number[]) {\n return style === 0 || (isArray(style) && style.every(s => s === 0));\n}\n","import type { Style } from '../body-helper/style';\nimport type { ColumnStyleOption, ColumnTypeOption } from './column';\nimport type { ColumnData } from './list-table/layout-map/api';\nimport type { CellLocation, CellRange, FieldData, FieldDef } from './table-engine';\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI } from './base-table';\n\nexport type MaybePromise = T | Promise;\n\nexport type MaybeCall = T | ((...args: A) => T);\n\nexport type MaybePromiseOrUndefined = any | undefined | Promise;\nexport type MaybePromiseOrCallOrUndefined = any | undefined | Promise | ((...args: any) => any);\nexport type PromiseMaybeUndefOrCall = Promise | ((...args: A) => T);\nexport type AnyFunction = (...args: any[]) => any;\n\nexport interface RectProps {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n}\n\nexport interface CellPosition {\n col: number;\n row: number;\n}\n\nexport type ColorsDef = string | (string | null)[];\nexport type LineWidthsDef = number | (number | null)[];\nexport type LineDashsDef = number[] | (number[] | null)[];\nexport type shadowColorsDef = { from: string; to: string } | ({ from: string; to: string } | null)[];\nexport type PaddingsDef = number | (number | null)[];\nexport type SortOption = boolean | ((v1: any, v2: any, order: SortOrder) => -1 | 0 | 1);\nexport type MergeCellOption =\n | boolean\n | ((\n v1: any,\n v2: any,\n extraArgs: {\n source: CellPosition;\n target: CellPosition;\n table: BaseTableAPI;\n }\n ) => boolean);\nexport type BaseCellInfo = {\n row: number;\n col: number;\n /**format之后的值 */\n value: FieldData;\n /**原始值 */\n dataValue: FieldData;\n};\nexport type MergeCellInfo = {\n colStart: number;\n colEnd: number;\n rowStart: number;\n rowEnd: number;\n};\nexport type CellInfo = {\n col: number;\n row: number;\n title?: string | (() => string) | undefined;\n /**维度名称 */\n field?: FieldDef;\n /**单元格行列表头paths */\n cellHeaderPaths?: ICellHeaderPaths;\n /**单元格的位置 */\n cellRange?: Rect;\n /**整条数据-原始数据 */\n originData?: any;\n /**format之后的值 */\n value?: FieldData;\n /**原始值 */\n dataValue?: FieldData;\n cellLocation?: CellLocation;\n cellType?: ColumnTypeOption;\n};\n\nexport type ICellHeaderPaths = IListTableCellHeaderPaths | IPivotTableCellHeaderPaths;\nexport type IListTableCellHeaderPaths = {\n readonly colHeaderPaths?: {\n field: FieldDef;\n // title: string | (() => string) | undefined;\n }[];\n readonly rowHeaderPaths?: {\n field: FieldDef;\n // title: string | (() => string) | undefined;\n }[];\n cellLocation: CellLocation;\n};\nexport type IPivotTableCellHeaderPaths = {\n /** 列表头各级path表头信息 */\n readonly colHeaderPaths?: IDimensionInfo[];\n /** 行表头各级path表头信息 */\n readonly rowHeaderPaths?: IDimensionInfo[];\n cellLocation: CellLocation;\n};\n\nexport interface IDimensionInfo {\n dimensionKey?: string;\n value?: string;\n indicatorKey?: string;\n isPivotCorner?: boolean;\n virtual?: boolean;\n}\n\n/**\n * 当前表格的交互状态:\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\nexport enum InteractionState {\n 'default' = 'default',\n 'grabing' = 'grabing',\n 'scrolling' = 'scrolling'\n}\n/**\n * 单元格的高亮效果设置\n * single 单个单元格高亮\n * column 整列高亮\n * row 整行高量\n * cross 十字花 行列均高亮\n * none 无高亮\n */\nexport enum HighlightScope {\n 'single' = 'single',\n 'column' = 'column',\n 'row' = 'row',\n 'cross' = 'cross',\n 'none' = 'none'\n}\n\nexport type SortOrder = 'asc' | 'desc' | 'normal' | 'ASC' | 'DESC' | 'NORMAL';\n\nexport type CustomCellStyle = {\n id: string;\n style: ColumnStyleOption;\n};\n\nexport type CustomCellStyleArrangement = {\n cellPosition: {\n col?: number;\n row?: number;\n range?: CellRange;\n };\n customStyleId: string;\n};\n","export interface TableEvents {\n /**\n * 鼠标点击单元格事件\n */\n CLICK_CELL: 'click_cell';\n /**\n * 鼠标双击单元格事件\n */\n DBLCLICK_CELL: 'dblclick_cell';\n /**\n * 单元格上鼠标按下事件\n */\n MOUSEDOWN_CELL: 'mousedown_cell';\n /**\n * 单元格鼠标松开事件\n */\n MOUSEUP_CELL: 'mouseup_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CELL: 'selected_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CLEAR: 'selected_clear';\n /**\n * 键盘按下事件\n */\n KEYDOWN: 'keydown';\n /**\n * 鼠标进入表格事件\n */\n MOUSEENTER_TABLE: 'mouseenter_table';\n /**\n * 鼠标离开表格事件\n */\n MOUSELEAVE_TABLE: 'mouseleave_table';\n /**\n * 鼠标点击表格事件\n */\n MOUSEDOWN_TABLE: 'mousedown_table';\n /**\n * 鼠标在表格上移动事件\n */\n MOUSEMOVE_TABLE: 'mousemove_table';\n /**\n * 鼠标在某个单元格上移动事件\n */\n MOUSEMOVE_CELL: 'mousemove_cell';\n /**\n * 鼠标进入单元格事件\n */\n MOUSEENTER_CELL: 'mouseenter_cell';\n /**\n * 鼠标离开单元格事件\n */\n MOUSELEAVE_CELL: 'mouseleave_cell';\n /**\n * 单元格右键事件\n */\n CONTEXTMENU_CELL: 'contextmenu_cell';\n /**\n * 列宽调整事件\n */\n RESIZE_COLUMN: 'resize_column';\n /**\n * 列宽调整结束事件\n */\n RESIZE_COLUMN_END: 'resize_column_end';\n /**\n * 行高调整事件\n */\n RESIZE_ROW: 'resize_row';\n /**\n * 行高调整结束事件\n */\n RESIZE_ROW_END: 'resize_row_end';\n /**\n * 拖拽表头移动位置的事件\n */\n CHANGE_HEADER_POSITION: 'change_header_position';\n CHANGE_HEADER_POSITION_START: 'change_header_position_start';\n CHANGING_HEADER_POSITION: 'changing_header_position';\n CHANGE_HEADER_POSITION_FAIL: 'change_header_position_fail';\n /**\n * 点击排序图标事件\n */\n SORT_CLICK: 'sort_click';\n /**\n * 执行完排序\n */\n AFTER_SORT: 'after_sort';\n /**\n * 点击固定列图标 冻结或者解冻事件\n */\n FREEZE_CLICK: 'freeze_click';\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n /**\n * 横向滚动条滚动到结束位\n */\n SCROLL_HORIZONTAL_END: 'scroll_horizontal_end';\n /**\n * 竖向滚动条滚动到结束位\n */\n SCROLL_VERTICAL_END: 'scroll_vertical_end';\n /**\n * 点击下拉菜单图标事件\n */\n DROPDOWN_MENU_CLICK: 'dropdown_menu_click';\n /**\n * 鼠标经过迷你图标记事件\n */\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol';\n\n /**\n * 拖拽框选单元格鼠标松开事件\n */\n DRAG_SELECT_END: 'drag_select_end';\n /** 复制完成 */\n COPY_DATA: 'copy_data';\n /**\n * 点击下拉菜单按钮\n */\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click';\n /**\n * 清空下拉菜单事件(菜单显示时点击其他区域)\n */\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear';\n\n /**\n * 树形结构展开收起的点击事件\n */\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change';\n\n SHOW_MENU: 'show_menu';\n HIDE_MENU: 'hide_menu';\n /**\n * icon图标点击事件\n */\n ICON_CLICK: 'icon_click';\n\n // legend component\n LEGEND_ITEM_CLICK: 'legend_item_click';\n LEGEND_ITEM_HOVER: 'legend_item_hover';\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover';\n LEGEND_CHANGE: 'legend_change';\n\n MOUSEENTER_AXIS: 'mouseenter_axis';\n MOUSELEAVE_AXIS: 'mouseleave_axis';\n\n CHECKBOX_STATE_CHANGE: 'checkbox_state_change';\n RADIO_STATE_CHANGE: 'radio_state_change';\n //#region lifecircle\n /** 每次渲染完成触发 */\n AFTER_RENDER: 'after_render';\n /** 表格实例初始化完成 */\n INITIALIZED: 'initialized';\n //#endregion\n\n CHANGE_CELL_VALUE: 'change_cell_value';\n\n /**\n * 鼠标按下填充柄事件\n */\n MOUSEDOWN_FILL_HANDLE: 'mousedown_fill_handle';\n /**\n * 拖拽填充柄结束事件\n */\n DRAG_FILL_HANDLE_END: 'drag_fill_handle_end';\n /**\n * 双击填充柄事件\n */\n DBLCLICK_FILL_HANDLE: 'dblclick_fill_handle';\n}\n/**\n * Table event types\n */\nexport const TABLE_EVENT_TYPE: TableEvents = {\n CLICK_CELL: 'click_cell',\n DBLCLICK_CELL: 'dblclick_cell',\n MOUSEDOWN_CELL: 'mousedown_cell',\n MOUSEUP_CELL: 'mouseup_cell',\n SELECTED_CELL: 'selected_cell',\n SELECTED_CLEAR: 'selected_clear',\n KEYDOWN: 'keydown',\n MOUSEENTER_TABLE: 'mouseenter_table',\n MOUSELEAVE_TABLE: 'mouseleave_table',\n MOUSEDOWN_TABLE: 'mousedown_table',\n MOUSEMOVE_TABLE: 'mousemove_table',\n MOUSEMOVE_CELL: 'mousemove_cell',\n MOUSEENTER_CELL: 'mouseenter_cell',\n MOUSELEAVE_CELL: 'mouseleave_cell',\n CONTEXTMENU_CELL: 'contextmenu_cell',\n RESIZE_COLUMN: 'resize_column',\n RESIZE_COLUMN_END: 'resize_column_end',\n RESIZE_ROW: 'resize_row',\n RESIZE_ROW_END: 'resize_row_end',\n CHANGE_HEADER_POSITION_START: 'change_header_position_start',\n CHANGE_HEADER_POSITION: 'change_header_position',\n CHANGING_HEADER_POSITION: 'changing_header_position',\n CHANGE_HEADER_POSITION_FAIL: 'change_header_position_fail',\n SORT_CLICK: 'sort_click',\n /**\n * 执行完排序\n */\n AFTER_SORT: 'after_sort',\n FREEZE_CLICK: 'freeze_click',\n SCROLL: 'scroll',\n SCROLL_HORIZONTAL_END: 'scroll_horizontal_end',\n SCROLL_VERTICAL_END: 'scroll_vertical_end',\n DROPDOWN_MENU_CLICK: 'dropdown_menu_click',\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol',\n DRAG_SELECT_END: 'drag_select_end',\n COPY_DATA: 'copy_data',\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click', // 点击下拉菜单按钮\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear', // 清空下拉菜单事件(菜单显示时点击其他区域)\n\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change', //树形结构展开收起的点击事件\n\n SHOW_MENU: 'show_menu',\n HIDE_MENU: 'hide_menu',\n\n ICON_CLICK: 'icon_click',\n\n LEGEND_ITEM_CLICK: 'legend_item_click',\n LEGEND_ITEM_HOVER: 'legend_item_hover',\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover',\n LEGEND_CHANGE: 'legend_change',\n\n MOUSEENTER_AXIS: 'mouseenter_axis',\n MOUSELEAVE_AXIS: 'mouseleave_axis',\n\n CHECKBOX_STATE_CHANGE: 'checkbox_state_change',\n RADIO_STATE_CHANGE: 'radio_state_change',\n AFTER_RENDER: 'after_render',\n INITIALIZED: 'initialized',\n CHANGE_CELL_VALUE: 'change_cell_value',\n DRAG_FILL_HANDLE_END: 'drag_fill_handle_end',\n MOUSEDOWN_FILL_HANDLE: 'mousedown_fill_handle',\n DBLCLICK_FILL_HANDLE: 'dblclick_fill_handle'\n} as TableEvents;\n","export const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n","import { isObject } from './isx';\n\nexport function debounce(func: Function, wait?: number, options?: any) {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number; // 最长等待时间\n let result: any; // 存储 func 函数的返回值\n let timerId: number | undefined; // 定时器 id\n let lastCallTime: number; // 最近一次 执行 debounced 函数时的时间\n\n // 最近一次执行 func 时的时间戳\n let lastInvokeTime = 0;\n // options 是否 传入了 maxWait\n let maxing = false;\n // 是否在延迟开始前调用函数\n let leading = false;\n // 是否在延迟结束后调用函数\n let trailing = true;\n\n const useRAF = !wait && wait !== 0 && typeof requestAnimationFrame === 'function';\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n\n wait = +(wait as number) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(+options.maxWait || 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastThis = undefined;\n lastArgs = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n // 开启定时器\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n // 清除定时器\n // function cancelTimer(id: number) {\n // if (useRAF) {\n // return cancelAnimationFrame(id);\n // }\n // clearTimeout(id);\n // }\n\n // 在延迟开始前调用\n function leadingEdge(time: number) {\n // 记录 函数被调用时 的时间戳\n lastInvokeTime = time;\n //@ts-ignore\n timerId = startTimer(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n // 在延迟结束后调用\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // lastArgs 在 debounced 函数执行时赋值\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n // 重置参数和作用域\n lastThis = undefined;\n lastArgs = undefined;\n return result;\n }\n\n function remainingWait(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n // 用 wait 减去已经等待的时间\n const timeWaiting = wait && -timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting as number, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n // 是否可以执行函数\n function shouldInvoke(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n return (\n // 是不是第一次执行 debouned 函数\n lastCallTime === undefined ||\n timeSinceLastCall >= (wait as number) ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n // 封装执行函数,用于 wait 延迟结束后执行\n function timerExpired() {\n const time = Date.now();\n // 根据时间来判断是否可以执行 func 函数\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // 重新计算时间,重新建一个定时器\n // @ts-ignore\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function debounced(this: any, ...args: any) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n // 第一次执行时\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n // 因为 trailingEdge 函数内部会执行 timerId = undefined\n // trailingEdge 函数执行之后,又触发了 debounced\n if (timerId === undefined) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n }\n\n return result;\n }\n\n return debounced;\n}\n","import type { AnyFunction, EventListenerId } from '../ts-types';\nimport type { EventTarget as CustomEventTarget } from './EventTarget';\nimport { debounce } from '../tools/debounce';\nimport { Env } from '../tools/env';\n\nlet idCount = 1;\ntype EventHandlerTarget = EventTarget | CustomEventTarget;\ntype Listener = AnyFunction;\ntype EventListenerObject = {\n target: EventHandlerTarget;\n type: string;\n listener: Listener;\n options: any[];\n};\n\nexport type ResizeObserverCallBack = ({\n width,\n height,\n windowSizeNotChange\n}: {\n width: number;\n height: number;\n windowSizeNotChange: boolean;\n}) => void;\n\nexport class ResizeObserver {\n resizeTime = 100;\n element: HTMLElement;\n cb: ResizeObserverCallBack;\n observer?: MutationObserver;\n lastSize: {\n width: number;\n height: number;\n } = {\n width: 0,\n height: 0\n };\n callBackDebounce: () => void;\n\n constructor(element: HTMLElement, cb: ResizeObserverCallBack, resizeTime?: number) {\n this.element = element;\n this.cb = cb;\n this.lastSize = this.getSize();\n if (resizeTime) {\n this.resizeTime = Math.max(resizeTime, 16);\n }\n\n this.callBackDebounce = debounce(this.callBack, this.resizeTime);\n //TODO: 这个地方的 addEventListener resize 应该更改到下面的else逻辑中,兼容ResizeObserver不存在的情况\n window?.addEventListener('resize', this.onResize);\n // 优先使用 ResizeObserver\n if ('ResizeObserver' in window) {\n // @ts-ignore\n const ResizeObserverWindow: any = window.ResizeObserver;\n this.observer = new ResizeObserverWindow(this.mutationResize);\n this.observer?.observe(this.element);\n } else if ('MutationObserver' in window) {\n this.observer = new MutationObserver(this.mutationResize);\n this.observer.observe(this.element, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n }\n\n mutationResize = () => {\n this.onResize();\n };\n\n disConnect() {\n window.removeEventListener('resize', this.onResize);\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n }\n\n callBack = () => {\n const newSize = this.getSize();\n let windowSizeNotChange = false;\n if (newSize.width === this.lastSize.width && newSize.height === this.lastSize.height) {\n windowSizeNotChange = true;\n }\n this.lastSize = newSize;\n this.cb && this.cb({ ...this.lastSize, windowSizeNotChange });\n };\n\n setSize(size: { width: number; height: number }) {\n this.lastSize = size;\n }\n\n private onResize = () => {\n // if (this.checkSize()) {\n this.callBackDebounce();\n // }\n };\n\n private checkSize() {\n const newSize = this.getSize();\n if (newSize.width === this.lastSize.width && newSize.height === this.lastSize.height) {\n return false;\n }\n return true;\n }\n\n getSize() {\n if (!this.element) {\n return {\n ...this.lastSize\n };\n }\n return {\n width: Math.floor(this.element.clientWidth),\n height: Math.floor(this.element.clientHeight)\n };\n }\n}\n\nexport class EventHandler {\n resizeTime?: number;\n\n private listeners: {\n [key: string]: EventListenerObject;\n } = {};\n\n private reseizeListeners: {\n [key: string]: ResizeObserver;\n } = {};\n\n on(\n target: HTMLElement | Window | EventHandlerTarget,\n type: string,\n listener: Listener,\n ...options: any[]\n ): EventListenerId {\n if (Env.mode === 'node') {\n return -1;\n }\n const id = idCount++;\n if (target?.addEventListener) {\n if (type !== 'resize' || (target as Window) === window) {\n (target as EventTarget)?.addEventListener(type, listener, ...(options as []));\n } else {\n const resizeObserver = new ResizeObserver(target as HTMLElement, listener, this.resizeTime);\n this.reseizeListeners[id] = resizeObserver;\n }\n }\n const obj = { target, type, listener, options };\n this.listeners[id] = obj;\n return id;\n }\n once(\n target: EventHandlerTarget,\n type: string,\n listener: Listener,\n ...options: (boolean | AddEventListenerOptions)[]\n ): EventListenerId {\n if (Env.mode === 'node') {\n return -1;\n }\n const id = this.on(\n target,\n type,\n (...args) => {\n this.off(id);\n listener(...args);\n },\n ...options\n );\n return id;\n }\n off(id: EventListenerId | null | undefined): void {\n if (Env.mode === 'node') {\n return;\n }\n if (id === null) {\n return;\n }\n const obj = this.listeners?.[id];\n if (!obj) {\n return;\n }\n delete this.listeners[id];\n if (obj.target.removeEventListener) {\n obj.target.removeEventListener(obj.type, obj.listener, ...(obj.options as []));\n }\n }\n fire(target: EventTarget, type: string, ...args: any[]): void {\n if (Env.mode === 'node') {\n return;\n }\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target === target && listener.type === type) {\n listener.listener.call(listener.target, ...args);\n }\n }\n }\n hasListener(target: EventTarget, type: string): boolean {\n if (Env.mode === 'node') {\n return false;\n }\n let result = false;\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target === target && listener.type === type) {\n result = true;\n }\n }\n\n return result;\n }\n clear(): void {\n if (Env.mode === 'node') {\n return;\n }\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target.removeEventListener) {\n listener.target.removeEventListener(listener.type, listener.listener, ...(listener.options as []));\n }\n }\n\n for (const key in this.reseizeListeners) {\n const resizeObserver: ResizeObserver = this.reseizeListeners[key];\n resizeObserver?.disConnect();\n }\n\n this.listeners = {};\n }\n release(): void {\n if (Env.mode === 'node') {\n return;\n }\n this.clear();\n (this as any).listeners = {};\n }\n}\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#2d3137';\n }\n return '#282a2e';\n}\n\n/**\n * dark theme\n * @name DARK\n * @memberof VTable.themes.DARK\n */\nexport default {\n name: 'DARK',\n underlayBackgroundColor: 'transparent',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#D3D5DA',\n bgColor: '#373b45',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#2F4774'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n headerStyle: {\n color: '#D3D5DA',\n bgColor: '#373b45',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#2F4774'\n }\n // click: {\n // cellBgColor: '#2F4774',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n rowHeaderStyle: {},\n cornerHeaderStyle: {},\n bodyStyle: {\n color: '#e5e7ea',\n bgColor: getBackgroundColor,\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#29364D'\n }\n // click: {\n // cellBgColor: '#29364D',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n frameStyle: {\n borderColor: '#d1d5da',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 10,\n shadowBlur: 6,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'rgba(00, 24, 47, 0.06)'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 4,\n startColor: 'rgba(00, 24, 47, 0.05)',\n endColor: 'rgba(00, 24, 47, 0)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(255, 255, 255, 0.1)',\n // inlineColumnBgColor: \"#82b2f5\",\n cellBorderColor: '#4284FF',\n cellBorderLineWidth: 2\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n },\n functionalIconsStyle: {\n sort_color: '#FFFFFF',\n sort_color_opacity: '0.75',\n sort_color_2: '#416EFF',\n sort_color_opacity_2: '1',\n frozen_color: '#FFFFFF',\n frozen_color_opacity: '0.75',\n collapse_color: '#FFF',\n collapse_color_opacity: '0.75',\n expand_color: '#FFF',\n expand_color_opacity: '0.75',\n dragReorder_color: '#FFF',\n dragReorder_color_opacity: '0.75'\n }\n} as ITableThemeDefine;\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n // if (row < table.frozenRowCount) {\n // return \"#FFF\";\n // }\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#F4F8FF';\n }\n return '#FFF';\n}\n\n/**\n * basic theme\n * @name BRIGHT\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'BRIGHT',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#FFF',\n bgColor: '#5389FF',\n borderColor: '#5286FA',\n hover: {\n cellBgColor: '#2E67E3'\n }\n // click: {\n // cellBgColor: '#2E67E3',\n // },\n },\n headerStyle: {\n color: '#FFF',\n bgColor: '#5389FF',\n borderColor: '#A1C1FF',\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#2E67E3'\n }\n // click: {\n // cellBgColor: '#2E67E3',\n // },\n },\n\n bodyStyle: {\n color: '#000',\n bgColor: getBackgroundColor,\n borderColor: '#E0EAFE',\n hover: {\n cellBgColor: '#E9EFFD'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // },\n },\n frameStyle: {\n borderColor: '#E1E4E8',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'black'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 3,\n startColor: '#CBDCFE',\n endColor: '#CBDCFE'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#FFF';\n }\n return '#fbfbfc';\n}\n\n/**\n * arco theme\n * @name ARCO\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'ARCO',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 600,\n lineHeight: 14,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12]\n },\n headerStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n // 优先使用 Arial 字体,等宽能够保证数字场景长度一致,英文加粗场景 Arial 没有 500 字重,所以使用 600\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 600,\n lineHeight: 14,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n rowHeaderStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n cornerHeaderStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n bodyStyle: {\n padding: [8, 12, 8, 12],\n color: '#141414',\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 400,\n textAlign: 'left',\n bgColor: getBackgroundColor,\n borderColor: '#e1e4e8',\n lineHeight: 14,\n hover: {\n cellBgColor: '#F7F8FA',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // cellBorderLineWidth: 2,\n // inlineColumnBgColor: '#CCE0FF',\n // inlineRowBgColor: '#00E0FF',\n // cellBorderColor: '#3073f2',\n // },\n },\n frameStyle: {\n borderColor: '#d1d5da',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 4,\n shadowBlur: 6,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'rgba(00, 24, 47, 0.06)'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 4,\n startColor: 'rgba(00, 24, 47, 0.05)',\n endColor: 'rgba(00, 24, 47, 0)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)',\n cellBorderLineWidth: 2,\n cellBorderColor: '#3073f2'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","/*eslint no-bitwise:0*/\n\nimport type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n // if (row < table.frozenRowCount) {\n // return \"#FFF\";\n // }\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#FAF9FB';\n }\n return '#FDFDFD';\n}\n\n/**\n * default theme\n * @name DEFAULT\n * @memberof VTable.themes.DEFAULT\n */\nexport default {\n name: 'DEFAULT',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n borderColor: '#E1E4E8',\n color: '#000',\n bgColor: '#ECF1F5'\n },\n headerStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n bgColor: '#ECF1F5',\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n // click: {\n // cellBgColor: '#82b2f5',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#0000ff',\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n rowHeaderStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n bgColor: '#ECF1F5',\n // click: {\n // cellBgColor: '#82b2f5',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#0000ff',\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n },\n cornerHeaderStyle: {\n fontSize: 16,\n fontWeight: 'bold'\n },\n bodyStyle: {\n fontSize: 14,\n bgColor: getBackgroundColor,\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n // cellBorderLineWidth:2\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // cellBorderLineWidth: 2,\n // inlineColumnBgColor: '#CCE0FF',\n // inlineRowBgColor: '#CCE0FF',\n // cellBorderColor: '#0000ff',\n // },\n },\n frameStyle: {\n borderColor: '#E1E4E8',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'black'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 3,\n startColor: 'rgba(225, 228, 232, 0.6)',\n endColor: 'rgba(225, 228, 232, 0.6)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)',\n cellBorderLineWidth: 2,\n cellBorderColor: '#0000ff'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","/*eslint no-bitwise:0*/\n\nimport type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getFrozenRowsBorderColor(args: StylePropertyFunctionArg): string[] {\n const {\n row,\n table: { frozenRowCount }\n } = args;\n if (frozenRowCount - 1 === row) {\n return ['#f2f2f2', '#f2f2f2', '#ccc7c7', '#f2f2f2'];\n }\n return ['#f2f2f2'];\n}\nfunction getBorderColor(args: StylePropertyFunctionArg): (string | null)[] {\n const { col, table } = args;\n const { colCount, frozenColCount } = table;\n const top: string | null = '#ccc7c7';\n const bottom: string | null = '#ccc7c7';\n // if (recordRowCount > 1) {\n // const startRow = table.getRecordStartRowByRecordIndex(row);\n // const endRow = startRow + recordRowCount - 1;\n // if (startRow !== row) {\n // top = null;\n // }\n // if (endRow !== row) {\n // bottom = null;\n // }\n // }\n if (frozenColCount - 1 === col) {\n return [top, '#f2f2f2', bottom, null];\n }\n if (colCount - 1 === col) {\n return [top, '#f2f2f2', bottom, null];\n }\n\n return [top, null, bottom, null];\n}\n/**\n * material design theme\n * @name SIMPLIFY\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'SIMPLIFY',\n // selectionBgColor: '#CCE0FF',\n underlayBackgroundColor: '#FFF',\n\n defaultStyle: {\n borderColor: getBorderColor,\n // click: { cellBorderColor: '#FD5', cellBgColor: '#6FA8DC' },\n hover: { cellBorderColor: '#0000FF', cellBgColor: '#D0E0E3' },\n bgColor: '#FFF'\n },\n headerStyle: {\n color: 'rgba(0, 0, 0, 0.87)',\n borderColor: getFrozenRowsBorderColor\n },\n bodyStyle: {\n // rowsBgColor:'#FFF',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n frameStyle: {\n borderColor: '#f2f2f2',\n borderLineWidth: 1\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF'\n },\n selectionStyle: { cellBorderColor: '#FD5', cellBgColor: 'rgba(111, 168, 220, 0.1)' },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","import type { TableTheme } from '../themes/theme';\n\nexport const themes: { [key: string]: TableTheme } = {};\n","import type { RequiredTableThemeDefine } from '../ts-types';\n\nexport function getAxisStyle(axisStyle: RequiredTableThemeDefine['axisStyle']) {\n const style = {\n defaultAxisStyle: getSingleAxisStyle(axisStyle.defaultAxisStyle),\n leftAxisStyle: getSingleAxisStyle(axisStyle.leftAxisStyle),\n rightAxisStyle: getSingleAxisStyle(axisStyle.rightAxisStyle),\n topAxisStyle: getSingleAxisStyle(axisStyle.topAxisStyle),\n bottomAxisStyle: getSingleAxisStyle(axisStyle.bottomAxisStyle)\n };\n\n return style;\n}\n\nfunction getSingleAxisStyle(axisStyle?: RequiredTableThemeDefine['axisStyle']['defaultAxisStyle']) {\n if (!axisStyle) {\n return {};\n }\n\n return axisStyle; // to do: turn into get mode\n}\n\nexport const defalutPoptipStyle = {\n visible: true,\n position: 'auto',\n padding: 8,\n titleStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#4E5969'\n },\n contentStyle: {\n fontSize: 12,\n fill: '#4E5969'\n },\n panel: {\n visible: true,\n fill: '#fff',\n stroke: '#ffffff',\n lineWidth: 0,\n cornerRadius: 3,\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n size: 0,\n space: 12\n }\n // maxWidthPercent: 0.8\n};\n","/* eslint-disable no-undef */\n/* eslint-disable sort-imports */\nimport type {\n ColorPropertyDefine,\n ColorsDef,\n ColorsPropertyDefine,\n ColumnIconOption,\n FrameStyle,\n ITableThemeDefine,\n InteractionStyle,\n LineClamp,\n LineDashsDef,\n LineDashsPropertyDefine,\n LineWidthsDef,\n LineWidthsPropertyDefine,\n PartialTableThemeDefine,\n RequiredTableThemeDefine,\n TextOverflow,\n ThemeStyle,\n // menuStyle,\n TableFrameStyle,\n PaddingsPropertyDefine,\n ScrollStyle,\n CursorPropertyDefine,\n TooltipStyle,\n MarkedPropertyDefine,\n UnderlinePropertyDefine,\n LineDashPropertyDefine,\n LineThroughPropertyDefine,\n FontSizePropertyDefine,\n FontFamilyPropertyDefine,\n FontWeightPropertyDefine,\n FontVariantPropertyDefine,\n FontStylePropertyDefine,\n TextAlignType,\n TextBaselineType\n} from '../ts-types';\nimport { getChainSafe } from '../tools/helper';\nimport { changeColor, ingoreNoneValueMerge, merge } from '../tools/util';\nimport {\n DEFAULTBGCOLOR,\n DEFAULTBORDERCOLOR,\n DEFAULTBORDERLINEDASH,\n DEFAULTBORDERLINEWIDTH,\n DEFAULTFONTCOLOR,\n DEFAULTFONTFAMILY,\n DEFAULTFONTSIZE\n} from '../tools/global';\nimport { defalutPoptipStyle, getAxisStyle } from './component';\n//private symbol\n// const _ = getSymbol();\n\nfunction getProp(obj: PartialTableThemeDefine, superObj: ITableThemeDefine, names: string[], defNames?: string[]): any {\n return (\n getChainSafe(obj, ...names) ??\n getChainSafe(superObj, ...names) ??\n (defNames && getChainSafe(obj, ...defNames)) ??\n (defNames && getChainSafe(superObj, ...defNames))\n );\n}\nexport class TableTheme implements ITableThemeDefine {\n private internalTheme: {\n obj: PartialTableThemeDefine;\n superTheme: ITableThemeDefine;\n };\n private _defaultStyle: RequiredTableThemeDefine['defaultStyle'] | null = null;\n private _header: ITableThemeDefine['headerStyle'] | null = null;\n private _cornerHeader: ITableThemeDefine['cornerHeaderStyle'] | null = null;\n private _cornerRightTopCell: ITableThemeDefine['cornerRightTopCellStyle'] | null = null;\n private _cornerLeftBottomCell: ITableThemeDefine['cornerLeftBottomCellStyle'] | null = null;\n private _cornerRightBottomCell: ITableThemeDefine['cornerRightBottomCellStyle'] | null = null;\n private _rightFrozen: ITableThemeDefine['rightFrozenStyle'] | null = null;\n private _bottomFrozen: ITableThemeDefine['bottomFrozenStyle'] | null = null;\n private _rowHeader: ITableThemeDefine['rowHeaderStyle'] | null = null;\n private _body: ITableThemeDefine['bodyStyle'] | null = null;\n private _groupTitle: ITableThemeDefine['groupTitleStyle'] | null = null;\n private _scroll: ITableThemeDefine['scrollStyle'] | null = null;\n private _tooltip: ITableThemeDefine['tooltipStyle'] | null = null;\n private _frameStyle: ITableThemeDefine['frameStyle'] | null = null;\n private _columnResize: RequiredTableThemeDefine['columnResize'] | null = null;\n private _dragHeaderSplitLine: RequiredTableThemeDefine['dragHeaderSplitLine'] | null = null;\n private _frozenColumnLine: RequiredTableThemeDefine['frozenColumnLine'] | null = null;\n private _selectionStyle: RequiredTableThemeDefine['selectionStyle'] | null = null;\n\n private _axisStyle: RequiredTableThemeDefine['axisStyle'] | null = null;\n private _checkboxStyle: RequiredTableThemeDefine['checkboxStyle'] | null = null;\n private _radioStyle: RequiredTableThemeDefine['radioStyle'] | null = null;\n private _textPopTipStyle: RequiredTableThemeDefine['textPopTipStyle'] | null = null;\n private _internalIconsStyle: RequiredTableThemeDefine['functionalIconsStyle'] | null = null;\n isPivot: boolean = false;\n name: string = '';\n constructor(obj: PartialTableThemeDefine | ITableThemeDefine, superTheme: ITableThemeDefine) {\n this.internalTheme = {\n obj,\n superTheme\n };\n this.name = getProp(obj, superTheme, ['name']);\n }\n /** gantt _generateListTableOptions 使用更方法 */\n getExtendTheme(): PartialTableThemeDefine | ITableThemeDefine {\n return this.internalTheme.obj;\n }\n /** gantt _generateListTableOptions 使用更方法 */\n clearBodyStyleCache() {\n this._body = null;\n }\n get font(): string {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['font'], ['bodyStyle', 'font']);\n }\n get underlayBackgroundColor(): string {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['underlayBackgroundColor']);\n }\n\n get cellInnerBorder(): boolean {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['cellInnerBorder']) ?? true;\n }\n\n get cellBorderClipDirection(): 'top-left' | 'bottom-right' {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['cellBorderClipDirection']) ?? 'top-left';\n }\n\n get _contentOffset(): number {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['_contentOffset']) ?? 0;\n }\n\n get defaultStyle(): RequiredTableThemeDefine['defaultStyle'] {\n // const defaultStyle = getProp(obj, superTheme, [\"defaultStyle\"]);\n const that = this;\n if (!this._defaultStyle) {\n const { obj, superTheme } = this.internalTheme;\n const defaultStyle: ThemeStyle = ingoreNoneValueMerge({}, superTheme.defaultStyle, obj.defaultStyle);\n this._defaultStyle = {\n get fontSize(): FontSizePropertyDefine {\n return defaultStyle.fontSize ?? DEFAULTFONTSIZE;\n },\n get fontFamily(): FontFamilyPropertyDefine {\n return defaultStyle.fontFamily ?? DEFAULTFONTFAMILY;\n },\n get fontWeight(): FontWeightPropertyDefine | undefined {\n return defaultStyle.fontWeight;\n },\n get fontVariant(): FontVariantPropertyDefine | undefined {\n return defaultStyle.fontVariant;\n },\n get fontStyle(): FontStylePropertyDefine | undefined {\n return defaultStyle.fontStyle;\n },\n get bgColor(): ColorPropertyDefine {\n return defaultStyle.bgColor ?? DEFAULTBGCOLOR;\n },\n get color(): ColorPropertyDefine {\n return defaultStyle.color ?? DEFAULTFONTCOLOR;\n },\n get borderColor(): ColorsPropertyDefine {\n return defaultStyle.borderColor ?? DEFAULTBORDERCOLOR;\n },\n get borderLineWidth(): LineWidthsPropertyDefine | undefined {\n return defaultStyle.borderLineWidth ?? DEFAULTBORDERLINEWIDTH;\n },\n get borderLineDash(): LineDashsPropertyDefine | undefined {\n return defaultStyle.borderLineDash ?? DEFAULTBORDERLINEDASH;\n },\n get hover(): InteractionStyle | undefined {\n if (defaultStyle.hover) {\n return {\n get cellBgColor(): ColorPropertyDefine | undefined {\n return defaultStyle.hover?.cellBgColor ?? undefined;\n },\n // get cellBorderColor(): ColorsPropertyDefine | undefined {\n // return defaultStyle.hover?.cellBorderColor ?? undefined;\n // },\n // get cellBorderLineWidth(): LineWidthsPropertyDefine | undefined {\n // return defaultStyle.hover?.cellBorderLineWidth ?? undefined;\n // },\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.hover?.inlineColumnBgColor ??\n (defaultStyle.hover?.cellBgColor && typeof defaultStyle.hover?.cellBgColor === 'string'\n ? changeColor(defaultStyle.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.hover?.inlineRowBgColor ??\n (defaultStyle.hover?.cellBgColor && typeof defaultStyle.hover?.cellBgColor === 'string'\n ? changeColor(defaultStyle.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get select(): InteractionStyle | undefined {\n if (defaultStyle.select) {\n return {\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.select?.inlineColumnBgColor ??\n that.selectionStyle?.inlineColumnBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.select?.inlineRowBgColor ??\n that.selectionStyle.inlineRowBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get padding(): PaddingsPropertyDefine {\n return defaultStyle.padding ?? [10, 16, 10, 16];\n },\n get textAlign(): TextAlignType {\n return defaultStyle.textAlign ?? 'left';\n },\n get textBaseline(): TextBaselineType {\n return defaultStyle.textBaseline ?? 'middle';\n },\n get textOverflow(): TextOverflow {\n return defaultStyle.textOverflow ?? 'ellipsis';\n },\n get lineHeight(): number {\n return defaultStyle.lineHeight;\n },\n get autoWrapText(): boolean {\n return defaultStyle.autoWrapText ?? false;\n },\n get lineClamp(): LineClamp {\n return defaultStyle.lineClamp ?? 'auto';\n },\n get linkColor(): ColorPropertyDefine {\n return defaultStyle.linkColor ?? '#3772ff';\n },\n get cursor(): CursorPropertyDefine {\n return defaultStyle.cursor ?? 'auto';\n },\n get marked(): MarkedPropertyDefine {\n return defaultStyle.marked ?? false;\n },\n get underline(): UnderlinePropertyDefine {\n return defaultStyle.underline ?? false;\n },\n get underlineColor(): ColorPropertyDefine | undefined {\n return defaultStyle.underlineColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get underlineDash(): LineDashPropertyDefine | undefined {\n return defaultStyle.underlineDash;\n },\n get underlineOffset(): number | undefined {\n return defaultStyle.underlineOffset;\n },\n get lineThrough(): LineThroughPropertyDefine | undefined {\n return defaultStyle.lineThrough ?? false;\n },\n get lineThroughColor(): ColorPropertyDefine | undefined {\n return defaultStyle.lineThroughColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get lineThroughDash(): LineDashPropertyDefine | undefined {\n return defaultStyle.lineThroughDash;\n }\n };\n }\n return this._defaultStyle;\n }\n\n get cornerHeaderStyle(): ITableThemeDefine['cornerHeaderStyle'] {\n if (!this._cornerHeader) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerHeaderStyle,\n obj.cornerHeaderStyle // ?? obj.headerStyle\n );\n this._cornerHeader = this.getStyle(header);\n }\n return this._cornerHeader;\n }\n get cornerRightTopCellStyle(): ITableThemeDefine['cornerRightTopCellStyle'] {\n if (!this._cornerRightTopCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerRightTopCellStyle && !obj.cornerRightTopCellStyle) {\n return this._cornerRightTopCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerRightTopCellStyle,\n obj.cornerRightTopCellStyle // ?? obj.headerStyle\n );\n this._cornerRightTopCell = this.getStyle(header);\n }\n return this._cornerRightTopCell;\n }\n get cornerLeftBottomCellStyle(): ITableThemeDefine['cornerLeftBottomCellStyle'] {\n if (!this._cornerLeftBottomCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerLeftBottomCellStyle && !obj.cornerLeftBottomCellStyle) {\n return this._cornerLeftBottomCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerLeftBottomCellStyle,\n obj.cornerLeftBottomCellStyle // ?? obj.headerStyle\n );\n this._cornerLeftBottomCell = this.getStyle(header);\n }\n return this._cornerLeftBottomCell;\n }\n get cornerRightBottomCellStyle(): ITableThemeDefine['cornerRightBottomCellStyle'] {\n if (!this._cornerRightBottomCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerRightBottomCellStyle && !obj.cornerRightBottomCellStyle) {\n return this._cornerRightBottomCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerRightBottomCellStyle,\n obj.cornerRightBottomCellStyle // ?? obj.headerStyle\n );\n this._cornerRightBottomCell = this.getStyle(header);\n }\n return this._cornerRightBottomCell;\n }\n get rightFrozenStyle(): ITableThemeDefine['rightFrozenStyle'] {\n if (!this._rightFrozen) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.rightFrozenStyle && !obj.rightFrozenStyle) {\n return this._rightFrozen;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n this.rowHeaderStyle,\n superTheme.rightFrozenStyle,\n obj.rightFrozenStyle // ?? obj.headerStyle\n );\n this._rightFrozen = this.getStyle(header);\n }\n return this._rightFrozen;\n }\n get bottomFrozenStyle(): ITableThemeDefine['bottomFrozenStyle'] {\n if (!this._bottomFrozen) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.bottomFrozenStyle && !obj.bottomFrozenStyle) {\n return this._bottomFrozen;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n this.headerStyle,\n superTheme.bottomFrozenStyle,\n obj.bottomFrozenStyle // ?? obj.headerStyle\n );\n this._bottomFrozen = this.getStyle(header);\n }\n return this._bottomFrozen;\n }\n get rowHeaderStyle(): ITableThemeDefine['rowHeaderStyle'] {\n if (!this._rowHeader) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.rowHeaderStyle,\n obj.rowHeaderStyle ?? (this.isPivot ? null : obj.headerStyle) // not for pivot\n );\n this._rowHeader = this.getStyle(header);\n }\n return this._rowHeader;\n }\n get headerStyle(): ITableThemeDefine['headerStyle'] {\n if (!this._header) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge({}, this.defaultStyle, superTheme.headerStyle, obj.headerStyle);\n this._header = this.getStyle(header);\n }\n return this._header;\n }\n get bodyStyle(): ITableThemeDefine['bodyStyle'] {\n if (!this._body) {\n const { obj, superTheme } = this.internalTheme;\n // const body = getProp(obj, superTheme, [\"body\"]);\n const body: ThemeStyle = ingoreNoneValueMerge({}, this.defaultStyle, superTheme.bodyStyle, obj.bodyStyle);\n this._body = this.getStyle(body);\n }\n\n return this._body;\n }\n\n get groupTitleStyle(): ITableThemeDefine['groupTitleStyle'] {\n if (!this._groupTitle) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.groupTitleStyle && !obj.groupTitleStyle) {\n return this._groupTitle;\n }\n const groupTitle: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.groupTitleStyle,\n obj.groupTitleStyle\n );\n this._groupTitle = this.getStyle(groupTitle);\n }\n\n return this._groupTitle;\n }\n\n get frameStyle(): ITableThemeDefine['frameStyle'] {\n if (!this._frameStyle) {\n const { obj, superTheme } = this.internalTheme;\n const frameStyle: TableFrameStyle = ingoreNoneValueMerge({}, superTheme.frameStyle, obj.frameStyle);\n this._frameStyle = {\n get borderColor(): ColorsDef | undefined {\n return frameStyle.borderColor;\n },\n get borderLineWidth(): LineWidthsDef | undefined {\n return frameStyle.borderLineWidth;\n },\n get borderLineDash(): LineDashsDef | undefined {\n return frameStyle.borderLineDash;\n },\n get innerBorder(): boolean | undefined {\n return frameStyle.innerBorder;\n },\n get shadowBlur(): number {\n return frameStyle.shadowBlur;\n },\n get shadowColor(): string {\n return frameStyle.shadowColor;\n },\n get shadowOffsetX(): number {\n return frameStyle.shadowOffsetX;\n },\n get shadowOffsetY(): number {\n return frameStyle.shadowOffsetY;\n },\n get cornerRadius(): number | [number, number, number, number] {\n return frameStyle.cornerRadius;\n }\n };\n }\n return this._frameStyle;\n }\n get scrollStyle(): ITableThemeDefine['scrollStyle'] {\n if (!this._scroll) {\n const { obj, superTheme } = this.internalTheme;\n const scroll: ScrollStyle = ingoreNoneValueMerge({}, superTheme.scrollStyle, obj.scrollStyle);\n this._scroll = {\n get scrollSliderColor(): string | undefined {\n return scroll.scrollSliderColor ?? '#C0C0C0';\n },\n get scrollSliderCornerRadius(): number | undefined {\n return scroll.scrollSliderCornerRadius;\n },\n get scrollRailColor(): string | undefined {\n return scroll.scrollRailColor;\n },\n get visible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.visible ?? 'scrolling';\n },\n get verticalVisible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.verticalVisible;\n },\n get horizontalVisible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.horizontalVisible;\n },\n get width(): number | undefined {\n return scroll.width ?? 7;\n },\n get hoverOn(): boolean | undefined {\n return scroll.hoverOn ?? true;\n },\n get barToSide(): boolean | undefined {\n return scroll.barToSide ?? false;\n },\n get horizontalPadding(): number | [number, number, number, number] {\n return scroll.horizontalPadding ?? 0;\n },\n get verticalPadding(): number | [number, number, number, number] {\n return scroll.verticalPadding ?? 0;\n }\n };\n }\n\n return this._scroll;\n }\n get tooltipStyle(): ITableThemeDefine['tooltipStyle'] {\n if (!this._tooltip) {\n const { obj, superTheme } = this.internalTheme;\n const tooltip: TooltipStyle = ingoreNoneValueMerge({}, superTheme.tooltipStyle, obj.tooltipStyle);\n this._tooltip = {\n get fontFamily(): string | undefined {\n return tooltip.fontFamily ?? DEFAULTFONTFAMILY;\n },\n get fontSize(): number | undefined {\n return tooltip.fontSize ?? DEFAULTFONTSIZE;\n },\n get bgColor(): string | undefined {\n return tooltip.bgColor ?? '#000';\n },\n get padding(): number[] {\n return tooltip.padding ?? [6, 8];\n },\n get color(): string | undefined {\n return tooltip.color ?? '#FFF';\n },\n get maxWidth(): number | undefined {\n return tooltip.maxWidth;\n },\n get maxHeight(): number | undefined {\n return tooltip.maxHeight;\n }\n };\n }\n\n return this._tooltip;\n }\n\n /**\n * resize 分割线样式\n */\n get columnResize(): RequiredTableThemeDefine['columnResize'] {\n if (!this._columnResize) {\n const { obj, superTheme } = this.internalTheme;\n const columnResize: RequiredTableThemeDefine['columnResize'] = ingoreNoneValueMerge(\n {},\n superTheme.columnResize,\n obj.columnResize\n );\n this._columnResize = {\n get lineColor(): ColorPropertyDefine {\n return columnResize.lineColor ?? '#416EFF';\n },\n get bgColor(): ColorPropertyDefine {\n return columnResize.bgColor ?? '#D9E2FF';\n },\n get lineWidth(): number {\n return columnResize.lineWidth ?? 1;\n },\n get width(): number {\n return columnResize.width ?? columnResize.lineWidth + 2;\n },\n get resizeHotSpotSize(): number {\n return columnResize.resizeHotSpotSize ?? 16;\n },\n get labelColor(): string {\n return columnResize.labelColor ?? '#FFF';\n },\n get labelFontSize(): number {\n return columnResize.labelFontSize ?? 10;\n },\n get labelFontFamily(): string {\n return columnResize.labelFontFamily ?? 'sans-serif';\n },\n get labelBackgroundFill(): string {\n return columnResize.labelBackgroundFill ?? '#3073F2';\n },\n get labelBackgroundCornerRadius(): number {\n return columnResize.labelBackgroundCornerRadius ?? 5;\n },\n get labelVisible(): boolean {\n return columnResize.labelVisible ?? true;\n }\n };\n }\n return this._columnResize;\n }\n /**\n * 移位 分割线样式\n */\n get dragHeaderSplitLine(): RequiredTableThemeDefine['dragHeaderSplitLine'] {\n if (!this._dragHeaderSplitLine) {\n const { obj, superTheme } = this.internalTheme;\n const dragHeaderSplitLine: RequiredTableThemeDefine['dragHeaderSplitLine'] = ingoreNoneValueMerge(\n {},\n superTheme.dragHeaderSplitLine,\n obj.dragHeaderSplitLine\n );\n this._dragHeaderSplitLine = {\n get lineColor(): ColorPropertyDefine {\n return dragHeaderSplitLine.lineColor ?? 'blue';\n },\n // get bgColor(): ColorPropertyDefine {\n // return dragHeaderSplitLine.bgColor ?? dragHeaderSplitLine.lineColor;\n // },\n get lineWidth(): number {\n return dragHeaderSplitLine.lineWidth ?? 2;\n },\n // get width(): number {\n // return dragHeaderSplitLine.width ?? dragHeaderSplitLine.lineWidth;\n // },\n get shadowBlockColor(): string {\n return dragHeaderSplitLine.shadowBlockColor ?? 'rgba(204,204,204,0.3)';\n }\n };\n }\n return this._dragHeaderSplitLine;\n }\n get frozenColumnLine(): RequiredTableThemeDefine['frozenColumnLine'] {\n // const { obj, superTheme } = this.internalTheme;\n // const that = this;\n // const frozenColumnLine = getProp(obj, superTheme, [\n // \"frozenColumnLine\",\n // ]);\n if (!this._frozenColumnLine) {\n const { obj, superTheme } = this.internalTheme;\n const frozenColumnLine: RequiredTableThemeDefine['frozenColumnLine'] = ingoreNoneValueMerge(\n {},\n superTheme.frozenColumnLine,\n obj.frozenColumnLine\n );\n this._frozenColumnLine = {\n get shadow(): { width: number; startColor: string; endColor: string } | undefined {\n if (frozenColumnLine.shadow) {\n return {\n get width(): number {\n return frozenColumnLine.shadow?.width ?? 24;\n },\n get startColor(): string {\n return frozenColumnLine.shadow?.startColor ?? 'rgba(00, 24, 47, 0.06)';\n },\n get endColor(): string {\n return frozenColumnLine.shadow?.endColor ?? 'rgba(00, 24, 47, 0)';\n }\n };\n }\n return undefined;\n },\n get border():\n | {\n lineColor: ColorPropertyDefine;\n bgColor?: ColorPropertyDefine;\n lineWidth: number;\n width?: number;\n }\n | undefined {\n if (frozenColumnLine.border) {\n return {\n get lineColor(): ColorPropertyDefine {\n return frozenColumnLine.border?.lineColor ?? 'rgba(00, 24, 47, 0.06)';\n },\n get bgColor(): ColorPropertyDefine {\n return (\n frozenColumnLine.border?.bgColor ?? frozenColumnLine.border?.lineColor ?? 'rgba(00, 24, 47, 0.06)'\n );\n },\n get lineWidth(): number {\n return frozenColumnLine.border?.lineWidth ?? 4;\n },\n get width(): number {\n return frozenColumnLine.border?.width ?? frozenColumnLine.border?.lineWidth ?? 4;\n }\n };\n }\n return undefined;\n }\n };\n }\n return this._frozenColumnLine;\n }\n get selectionStyle(): RequiredTableThemeDefine['selectionStyle'] {\n if (!this._selectionStyle) {\n const { obj, superTheme } = this.internalTheme;\n const selectionStyle: RequiredTableThemeDefine['selectionStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.selectionStyle,\n obj.selectionStyle\n );\n this._selectionStyle = {\n get cellBgColor(): string | undefined {\n return selectionStyle?.cellBgColor ?? 'rgba(0, 0, 255,0.1)';\n },\n get cellBorderColor(): string | undefined {\n return selectionStyle?.cellBorderColor ?? '#3073f2';\n },\n get cellBorderLineWidth(): number | undefined {\n return selectionStyle?.cellBorderLineWidth ?? 2;\n },\n get inlineColumnBgColor(): string | undefined {\n return selectionStyle?.inlineColumnBgColor;\n },\n get inlineRowBgColor(): string | undefined {\n return selectionStyle?.inlineRowBgColor;\n },\n get selectionFillMode(): 'overlay' | 'replace' {\n return selectionStyle?.selectionFillMode ?? 'overlay';\n }\n };\n }\n return this._selectionStyle;\n }\n\n get axisStyle(): RequiredTableThemeDefine['axisStyle'] {\n if (!this._axisStyle) {\n const { obj, superTheme } = this.internalTheme;\n const axisStyle: RequiredTableThemeDefine['axisStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.axisStyle,\n obj.axisStyle\n );\n this._axisStyle = getAxisStyle(axisStyle);\n }\n return this._axisStyle;\n }\n\n get checkboxStyle(): RequiredTableThemeDefine['checkboxStyle'] {\n if (!this._checkboxStyle) {\n const { obj, superTheme } = this.internalTheme;\n const checkboxStyle: RequiredTableThemeDefine['checkboxStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.checkboxStyle,\n obj.checkboxStyle\n );\n this._checkboxStyle = checkboxStyle;\n }\n return this._checkboxStyle;\n }\n\n get radioStyle(): RequiredTableThemeDefine['radioStyle'] {\n if (!this._radioStyle) {\n const { obj, superTheme } = this.internalTheme;\n const radioStyle: RequiredTableThemeDefine['radioStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.radioStyle,\n obj.radioStyle\n );\n this._radioStyle = radioStyle;\n }\n return this._radioStyle;\n }\n\n get textPopTipStyle(): RequiredTableThemeDefine['textPopTipStyle'] {\n if (!this._textPopTipStyle) {\n const { obj, superTheme } = this.internalTheme;\n const textPopTipStyle: RequiredTableThemeDefine['textPopTipStyle'] = ingoreNoneValueMerge(\n {},\n defalutPoptipStyle,\n superTheme.textPopTipStyle,\n obj.textPopTipStyle\n );\n this._textPopTipStyle = textPopTipStyle;\n }\n return this._textPopTipStyle;\n }\n\n get functionalIconsStyle(): RequiredTableThemeDefine['functionalIconsStyle'] {\n if (!this._internalIconsStyle) {\n const { obj, superTheme } = this.internalTheme;\n const functionalIconsStyle: RequiredTableThemeDefine['functionalIconsStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.functionalIconsStyle,\n obj.functionalIconsStyle\n );\n this._internalIconsStyle = functionalIconsStyle;\n }\n return this._internalIconsStyle;\n }\n\n hasProperty(names: string[]): boolean {\n const { obj, superTheme } = this.internalTheme;\n return hasThemeProperty(obj, names) || hasThemeProperty(superTheme, names);\n }\n extends(obj: PartialTableThemeDefine): TableTheme {\n return new TableTheme(\n ingoreNoneValueMerge({}, obj),\n ingoreNoneValueMerge(this.internalTheme.superTheme, this.internalTheme.obj)\n );\n }\n private getStyle(style: ThemeStyle) {\n const that = this;\n return {\n get fontSize(): FontSizePropertyDefine | undefined {\n return style.fontSize;\n },\n get fontFamily(): FontFamilyPropertyDefine | undefined {\n return style.fontFamily;\n },\n get fontWeight(): FontWeightPropertyDefine | undefined {\n return style.fontWeight;\n },\n get fontVariant(): FontVariantPropertyDefine | undefined {\n return style.fontVariant;\n },\n get fontStyle(): FontStylePropertyDefine | undefined {\n return style.fontStyle;\n },\n get bgColor(): ColorPropertyDefine | undefined {\n return style.bgColor;\n },\n get color(): ColorPropertyDefine | undefined {\n return style.color;\n },\n get strokeColor(): ColorPropertyDefine | undefined {\n return style.strokeColor;\n },\n get borderColor(): ColorsPropertyDefine | undefined {\n return style.borderColor;\n },\n get borderLineWidth(): LineWidthsPropertyDefine | undefined {\n return style.borderLineWidth;\n },\n get borderLineDash(): LineDashsPropertyDefine | undefined {\n return style.borderLineDash;\n },\n get hover(): InteractionStyle | undefined {\n if (style.hover) {\n return {\n get cellBgColor(): ColorPropertyDefine | undefined {\n return style.hover?.cellBgColor ?? undefined;\n },\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n style.hover?.inlineColumnBgColor ??\n (style.hover?.cellBgColor && typeof style.hover?.cellBgColor === 'string'\n ? changeColor(style.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n style.hover?.inlineRowBgColor ??\n (style.hover?.cellBgColor && typeof style.hover?.cellBgColor === 'string'\n ? changeColor(style.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get select(): InteractionStyle | undefined {\n // if (style.select) {\n return {\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n style.select?.inlineColumnBgColor ??\n that.selectionStyle?.inlineColumnBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n style.select?.inlineRowBgColor ??\n that.selectionStyle.inlineRowBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get cellBgColor(): ColorPropertyDefine | undefined {\n if (that.selectionStyle.selectionFillMode === 'replace') {\n return style.select?.cellBgColor ?? that.selectionStyle.cellBgColor ?? undefined;\n }\n return undefined;\n }\n };\n // }\n // return undefined;\n },\n\n get frameStyle(): FrameStyle | undefined {\n if (style.frameStyle) {\n return {\n get borderColor(): ColorsDef | undefined {\n return style.frameStyle?.borderColor ?? undefined;\n },\n get borderLineWidth(): LineWidthsDef | undefined {\n return style.frameStyle?.borderLineWidth ?? undefined;\n },\n get borderLineDash(): LineDashsDef | undefined {\n return style.frameStyle?.borderLineDash ?? undefined;\n }\n };\n }\n return undefined;\n },\n get padding(): PaddingsPropertyDefine | undefined {\n return style.padding;\n },\n get textAlign(): TextAlignType | undefined {\n return style.textAlign;\n },\n get textBaseline(): TextBaselineType | undefined {\n return style.textBaseline;\n },\n get textOverflow(): TextOverflow | undefined {\n return style.textOverflow;\n },\n get lineHeight(): number | undefined {\n return style.lineHeight;\n },\n get autoWrapText(): boolean | undefined {\n return style.autoWrapText;\n },\n get lineClamp(): LineClamp | undefined {\n return style.lineClamp;\n },\n get linkColor(): ColorPropertyDefine | undefined {\n return style.linkColor;\n },\n get cursor(): CursorPropertyDefine | undefined {\n return style.cursor;\n },\n get textStick(): boolean | 'vertical' | 'horizontal' | undefined {\n return style.textStick;\n },\n get marked(): MarkedPropertyDefine | undefined {\n return style.marked;\n },\n get underline(): UnderlinePropertyDefine {\n return style.underline ?? false;\n },\n get underlineColor(): ColorPropertyDefine | undefined {\n return style.underlineColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get underlineDash(): LineDashPropertyDefine | undefined {\n return style.underlineDash;\n },\n get underlineOffset(): number | undefined {\n return style.underlineOffset;\n },\n get lineThrough(): LineThroughPropertyDefine | undefined {\n return style.lineThrough ?? false;\n },\n get lineThroughColor(): ColorPropertyDefine | undefined {\n return style.lineThroughColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get lineThroughDash(): LineDashPropertyDefine | undefined {\n return style.lineThroughDash;\n }\n };\n }\n}\n\nfunction hasThemeProperty(obj: PartialTableThemeDefine, names: string[]): boolean {\n if (obj instanceof TableTheme) {\n return obj.hasProperty(names);\n }\n\n let o: any = obj;\n if (!o) {\n return false;\n }\n for (let index = 0; index < names.length; index++) {\n const name = names[index];\n o = o[name];\n if (!o) {\n return false;\n }\n }\n return !!o;\n}\n","/* eslint-disable sort-imports */\nimport { extend, getIgnoreCase } from './tools/helper';\nimport darkTheme from './themes/DARK';\nimport brightTheme from './themes/BRIGHT';\nimport arcoTheme from './themes/ARCO';\nimport defaultTheme from './themes/DEFAULT';\nimport materialDesignTheme from './themes/SIMPLIFY';\nimport { themes as plugins } from './plugins/themes';\nimport { TableTheme } from './themes/theme';\nimport type { ITableThemeDefine } from './ts-types';\nexport const DARK = new TableTheme(darkTheme, darkTheme);\nexport const BRIGHT = new TableTheme(brightTheme, brightTheme);\nexport const ARCO = new TableTheme(arcoTheme, arcoTheme);\nexport const DEFAULT = new TableTheme(defaultTheme, defaultTheme);\nexport const SIMPLIFY = new TableTheme(materialDesignTheme, materialDesignTheme);\n\nconst builtin: { [key: string]: TableTheme } = {\n DEFAULT,\n SIMPLIFY,\n ARCO,\n DARK,\n BRIGHT\n};\n// let defTheme = DEFAULT;\nexport const theme = { TableTheme };\nexport function of(value: ITableThemeDefine | string | undefined | null): TableTheme | null {\n if (!value) {\n return null;\n }\n if (typeof value === 'string') {\n const t = getIgnoreCase(get(), value);\n if (t) {\n if (t instanceof TableTheme) {\n return t;\n }\n return new TableTheme(t, t);\n }\n return null;\n }\n if (value instanceof TableTheme) {\n return value;\n }\n return new TableTheme(value, value);\n}\n\nexport function get(): { [key: string]: TableTheme } {\n return extend(builtin, plugins);\n}\nexport { ITableThemeDefine, TableTheme };\nexport default {\n DARK,\n BRIGHT,\n ARCO,\n DEFAULT,\n SIMPLIFY,\n theme,\n of,\n get\n};\n","import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.14.4-alpha.0\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n // registerArc3d();\n // registerArea();\n registerCircle();\n // registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n // registerPath();\n // registerPolygon();\n // registerPyramid3d();\n registerRect();\n // registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerFlexLayoutPlugin();\n // registerWrapText();\n loadPoptip();\n\n registerFlexLayoutPlugin();\n}\n\nexport type { Direction, Timeline } from '@visactor/vrender-core';\nexport { GroupFadeIn } from '@visactor/vrender-core';\nexport { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\n","import type { CellRange, ColumnDefine, TextColumnDefine } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\n/**\n * @description: 获取对应坐标单元格的单元格合并信息,没有单元格合并返回false,有合并返回合并信息\n * @param {BaseTableAPI} table\n * @param {number} col\n * @param {number} row\n * @return {false | CellRange}\n */\nexport function getCellMergeInfo(table: BaseTableAPI, col: number, row: number): false | CellRange {\n // 先判断非表头且非cellMerge配置,返回false\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n return customMerge.range;\n }\n }\n if (\n !table.internalProps.enableTreeNodeMerge &&\n !table.isHeader(col, row) &&\n !(table.getBodyColumnDefine(col, row) as ColumnDefine)?.mergeCell\n ) {\n return false;\n }\n const range = table.getCellRange(col, row);\n const isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n if (!isMerge) {\n return false;\n }\n return range;\n}\n","import {\n graphicCreator,\n type IArc3dGraphicAttribute,\n type IArcGraphicAttribute,\n type IAreaGraphicAttribute,\n type ICircleGraphicAttribute,\n type IGlyphGraphicAttribute,\n type IGroupGraphicAttribute,\n type IImageGraphicAttribute,\n type ILineGraphicAttribute,\n type IPathGraphicAttribute,\n type IPolygonGraphicAttribute,\n type IPyramid3dGraphicAttribute,\n type IRect3dGraphicAttribute,\n type IRectGraphicAttribute,\n type IRichTextCharacter,\n type IRichTextGraphicAttribute,\n type IRichTextImageCharacter,\n type ISymbolGraphicAttribute,\n type ITextGraphicAttribute\n} from '@visactor/vrender-core';\n\nexport const REACT_TO_CANOPUS_EVENTS = {\n onPointerDown: 'pointerdown',\n onPointerUp: 'pointerup',\n onPointerUpOutside: 'pointerupoutside',\n onPointerTap: 'pointertap',\n onPointerOver: 'pointerover',\n onPointerMove: 'pointermove',\n onPointerEnter: 'pointerenter',\n onPointerLeave: 'pointerleave',\n onPointerOut: 'pointerout',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onMouseUpOutside: 'mouseupoutside',\n onMouseMove: 'mousemove',\n onMouseOver: 'mouseover',\n onMouseOut: 'mouseout',\n onMouseEnter: 'mouseenter',\n onMouseLeave: 'mouseleave',\n onPinch: 'pinch',\n onPinchStart: 'pinchstart',\n onPinchEnd: 'pinchend',\n onPan: 'pan',\n onPanStart: 'panstart',\n onPanEnd: 'panend',\n onDrag: 'drag',\n onDragStart: 'dragstart',\n onDragEnter: 'dragenter',\n onDragLeave: 'dragleave',\n onDragOver: 'dragover',\n onDragEnd: 'dragend',\n onRightDown: 'rightdown',\n onRightUp: 'rightup',\n onRightUpOutside: 'rightupoutside',\n onTouchStart: 'touchstart',\n onTouchEnd: 'touchend',\n onTouchEndOutside: 'touchendoutside',\n onTouchMove: 'touchmove',\n onTouchCancel: 'touchcancel',\n onPress: 'press',\n onPressUp: 'pressup',\n onPressEnd: 'pressend',\n onSwipe: 'swipe',\n onDrop: 'drop',\n onWeel: 'wheel',\n onClick: 'click',\n onDblClick: 'dblclick'\n};\n\nexport const REACT_TO_CANOPUS_EVENTS_LIST = Object.keys(REACT_TO_CANOPUS_EVENTS);\n\nexport type IEventParamsType = {\n [t in keyof typeof REACT_TO_CANOPUS_EVENTS]?: (d: any) => void;\n};\n\nexport type IDefaultGraphicParamsType = {\n attribute?: T;\n stateProxy?: (stateName: string, targetStates?: string[]) => Partial;\n // react可能类型报错\n children?: any;\n name?: string;\n id?: string;\n} & IEventParamsType;\n\nexport function VArc(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).arc(params ? params.attribute : {});\n}\nexport function VArc3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).arc3d(params ? params.attribute : {});\n}\nexport function VArea(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).area(params ? params.attribute : {});\n}\nexport function VCircle(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).circle(params ? params.attribute : {});\n}\nexport function VGroup(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).group(params ? params.attribute : {});\n}\nexport function VGlyph(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).glyph(params ? params.attribute : {});\n}\nexport function VImage(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).image(params ? params.attribute : {});\n}\nexport function VLine(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).line(params ? params.attribute : {});\n}\nexport function VPath(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).path(params ? params.attribute : {});\n}\nexport function VPolygon(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).polygon(params ? params.attribute : {});\n}\nexport function VPyramid3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).pyramid3d(params ? params.attribute : {});\n}\nexport function VRect(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).rect(params ? params.attribute : {});\n}\nexport function VRect3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).rect3d(params ? params.attribute : {});\n}\nexport function VSymbol(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).symbol(params ? params.attribute : {});\n}\nexport function VText(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).text(params ? params.attribute : {});\n}\nexport function VRichText(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).richtext(params ? params.attribute : {});\n}\n\nVRichText.Text = function (params: IDefaultGraphicParamsType) {\n return {\n type: 'rich/text',\n ...params\n };\n};\n\nVRichText.Image = function (params: IDefaultGraphicParamsType) {\n return {\n type: 'rich/image',\n ...params\n };\n};\n","import type { IImageGraphicAttribute, ISetAttributeContext } from './../../vrender';\nimport { Image, ResourceLoader } from './../../vrender';\nimport type { IIconBase } from '../../ts-types';\nimport type { ParsedFrame } from 'gifuct-js';\nimport { decompressFrames, parseGIF } from 'gifuct-js';\n\nexport interface IIconGraphicAttribute extends IImageGraphicAttribute {\n backgroundWidth?: number;\n backgroundHeight?: number;\n backgroundColor?: string;\n visibleTime?: string;\n funcType?: string;\n hoverImage?: string | HTMLImageElement | HTMLCanvasElement;\n originImage?: string | HTMLImageElement | HTMLCanvasElement;\n // margin?: [number, number, number, number];\n marginLeft?: number;\n marginRight?: number;\n shape?: 'circle' | 'square';\n interactive?: boolean;\n}\n\nexport class Icon extends Image {\n declare attribute: IIconGraphicAttribute;\n role?: string;\n tooltip?: IIconBase['tooltip'];\n frameImageData?: ImageData;\n tempCanvas?: HTMLCanvasElement;\n tempCtx?: CanvasRenderingContext2D;\n gifCanvas?: HTMLCanvasElement;\n gifCtx?: CanvasRenderingContext2D;\n loadedFrames?: ParsedFrame[];\n frameIndex?: number;\n playing?: boolean;\n lastTime?: number;\n\n // eslint-disable-next-line no-useless-constructor\n constructor(params: IIconGraphicAttribute) {\n super(params);\n\n if (this.attribute.visibleTime === 'mouseenter_cell' || this.attribute.visibleTime === 'click_cell') {\n this.attribute.opacity = 0;\n }\n\n if (this.attribute.hoverImage) {\n this.attribute.originImage = this.attribute.image;\n }\n\n if ((this.attribute as any).isGif && (this.attribute as any).gif) {\n this.loadGif();\n }\n\n // if (this.attribute.margin) {\n // this.attribute.boundsPadding = this.attribute.margin;\n // this.attribute.dx = this.attribute.margin[3] ?? 0;\n // }\n }\n\n loadGif() {\n this.playing = false;\n ResourceLoader.GetFile((this.attribute as any).gif + '?role=gif', 'arrayBuffer') // ?role=gif: hack for ResourceLoader cache\n .then((res: ArrayBuffer) => {\n const gif = parseGIF(res);\n const frames = decompressFrames(gif, true);\n this.renderGIF(frames);\n\n // hack for image resource\n (this as any).resources.set((this.attribute as any).image, {\n state: 'success',\n data: this.gifCanvas\n });\n })\n .catch((e: any) => {\n console.error('Gif load error: ', e);\n });\n }\n\n get backgroundWidth(): number {\n return this.attribute.backgroundWidth ?? this.attribute.width ?? 0;\n }\n\n get backgroundHeight(): number {\n return this.attribute.backgroundHeight ?? this.attribute.height ?? 0;\n }\n\n // protected tryUpdateAABBBounds() {\n // super.tryUpdateAABBBounds();\n // // 扩大范围\n // const { width, height } = this.attribute;\n // const { backgroundWidth = width, backgroundHeight = height } = this.attribute;\n // const expandX = (backgroundWidth - width) / 2;\n // const expandY = (backgroundHeight - height) / 2;\n // this._AABBBounds.expand([expandY, expandX, expandY, expandX]);\n\n // return this._AABBBounds;\n // }\n\n renderGIF(frames: ParsedFrame[]) {\n this.loadedFrames = frames;\n this.frameIndex = 0;\n\n if (!this.tempCanvas) {\n this.tempCanvas = document.createElement('canvas');\n this.tempCtx = this.tempCanvas.getContext('2d');\n }\n\n if (!this.gifCanvas) {\n this.gifCanvas = document.createElement('canvas');\n this.gifCtx = this.gifCanvas.getContext('2d');\n }\n\n this.gifCanvas.width = frames[0].dims.width;\n this.gifCanvas.height = frames[0].dims.height;\n\n this.playing = true;\n this.lastTime = new Date().getTime();\n this.animate().to({}, 1000, 'linear').loop(Infinity);\n }\n\n renderFrame(context: CanvasRenderingContext2D, x: number, y: number) {\n // get the frame\n const frame = this.loadedFrames[this.frameIndex || 0];\n\n if (frame.disposalType === 2) {\n this.gifCtx.clearRect(0, 0, this.gifCanvas.width, this.gifCanvas.height);\n }\n\n // draw the patch\n this.drawPatch(frame);\n\n // perform manipulation\n this.manipulate(context, x, y);\n\n // update the frame index\n // this.frameIndex++;\n const diff = new Date().getTime() - this.lastTime;\n if (frame.delay < diff) {\n // return;\n this.frameIndex++;\n this.lastTime = new Date().getTime();\n }\n if (this.frameIndex >= this.loadedFrames.length) {\n this.frameIndex = 0;\n }\n }\n\n drawPatch(frame: ParsedFrame) {\n const dims = frame.dims;\n\n if (\n !this.frameImageData ||\n dims.width !== this.frameImageData.width ||\n dims.height !== this.frameImageData.height\n ) {\n this.tempCanvas.width = dims.width;\n this.tempCanvas.height = dims.height;\n this.frameImageData = this.tempCtx.createImageData(dims.width, dims.height);\n }\n\n // set the patch data as an override\n this.frameImageData.data.set(frame.patch);\n\n // draw the patch back over the canvas\n this.tempCtx.putImageData(this.frameImageData, 0, 0);\n\n // gifCtx.drawImage(tempCanvas, dims.left, dims.top)\n // this.attribute.image = this.tempCanvas;\n\n this.gifCtx.drawImage(this.tempCanvas, dims.left, dims.top);\n }\n\n manipulate(context: CanvasRenderingContext2D, x: number, y: number) {\n context.drawImage(\n this.gifCanvas,\n 0,\n 0,\n this.gifCanvas.width,\n this.gifCanvas.height,\n x,\n y,\n this.attribute.width,\n this.attribute.height\n );\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext): void {\n super.setAttribute(key, value, forceUpdateTag, context);\n if (key === 'gif') {\n this.loadGif();\n }\n }\n\n setAttributes(\n params: Partial,\n forceUpdateTag?: boolean,\n context?: ISetAttributeContext\n ): void {\n super.setAttributes(params, forceUpdateTag, context);\n if ((params as any).gif) {\n this.loadGif();\n }\n }\n}\n","import { Group } from './../../vrender';\nimport type { CustomRenderFunctionArg, ICustomLayoutFuc } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\n\nexport function emptyCustomLayout(args: CustomRenderFunctionArg) {\n const group = new Group({});\n return {\n rootContainer: group,\n renderDefault: true\n };\n}\n\nexport class ReactCustomLayout {\n removeAllContainer: () => void;\n table: BaseTableAPI;\n customLayoutFuncCache: Map;\n reactRemoveGraphicCache: Map void>;\n reactRemoveAllGraphicCache: Map void>;\n headerCustomLayoutFuncCache: Map;\n headerReactRemoveGraphicCache: Map void>;\n headerReactRemoveAllGraphicCache: Map void>;\n // reactContainerCache: Map>;\n constructor(table: BaseTableAPI) {\n // this.removeAllContainer = removeAllContainer;\n this.table = table;\n this.customLayoutFuncCache = new Map();\n // this.reactContainerCache = new Map();\n this.reactRemoveGraphicCache = new Map();\n this.reactRemoveAllGraphicCache = new Map();\n this.headerCustomLayoutFuncCache = new Map();\n // this.headerCeactContainerCache = new Map();\n this.headerReactRemoveGraphicCache = new Map();\n this.headerReactRemoveAllGraphicCache = new Map();\n }\n\n hasReactCreateGraphic(componentId: string, isHeaderCustomLayout?: boolean) {\n if (isHeaderCustomLayout) {\n return this.headerCustomLayoutFuncCache.has(componentId);\n }\n return this.customLayoutFuncCache.has(componentId);\n }\n\n setReactCreateGraphic(\n componentId: string,\n createGraphic: ICustomLayoutFuc,\n // containerCache: Map,\n isHeaderCustomLayout?: boolean\n ) {\n if (isHeaderCustomLayout) {\n this.headerCustomLayoutFuncCache.set(componentId, createGraphic);\n } else {\n this.customLayoutFuncCache.set(componentId, createGraphic);\n }\n // this.reactContainerCache.set(componentId, containerCache);\n }\n\n setReactRemoveGraphic(\n componentId: string,\n removeGraphic: (col: number, row: number) => void,\n isHeaderCustomLayout?: boolean\n ) {\n if (isHeaderCustomLayout) {\n this.headerReactRemoveGraphicCache.set(componentId, removeGraphic);\n } else {\n this.reactRemoveGraphicCache.set(componentId, removeGraphic);\n }\n }\n\n setReactRemoveAllGraphic(componentId: string, removeGraphic: () => void, isHeaderCustomLayout?: boolean) {\n if (isHeaderCustomLayout) {\n this.headerReactRemoveAllGraphicCache.set(componentId, removeGraphic);\n } else {\n this.reactRemoveAllGraphicCache.set(componentId, removeGraphic);\n }\n }\n\n updateCustomCell(componentId: string, isHeaderCustomLayout?: boolean) {\n const table = this.table;\n // const col = componentId;\n // // to do: deal with transpose table\n // if (isHeaderCustomLayout) {\n // for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n // table.scenegraph.updateCellContent(col, row);\n // }\n // } else {\n // for (let row = table.columnHeaderLevelCount; row < table.rowCount; row++) {\n // table.scenegraph.updateCellContent(col, row);\n // }\n // }\n\n if (table.isPivotTable()) {\n const ranges = getUpdateCustomCellRangeInPivotTable(componentId, table, isHeaderCustomLayout);\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n } else {\n const range = getUpdateCustomCellRangeInListTable(componentId, table, isHeaderCustomLayout);\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n if (table.widthMode === 'autoWidth') {\n table.scenegraph.recalculateColWidths();\n }\n if (table.isAutoRowHeight()) {\n table.scenegraph.recalculateRowHeights();\n }\n // table.scenegraph.updateNextFrame();\n table.scenegraph.renderSceneGraph(); // use sync render for faster update\n }\n\n getCustomLayoutFunc(col: number, row: number) {\n const isHeader = this.table.isHeader(col, row);\n if (isHeader) {\n const { componentId } = this.table.getHeaderDefine(col, row) as any;\n return this.headerCustomLayoutFuncCache.get(componentId) ?? emptyCustomLayout;\n }\n const { componentId } = this.table.getBodyColumnDefine(col, row) as any;\n return this.customLayoutFuncCache.get(componentId) || emptyCustomLayout;\n }\n\n removeCustomCell(col: number, row: number) {\n // const { startInTotal } = this.table.getBodyColumnDefine(col, row) as any;\n const isHeader = this.table.isHeader(col, row);\n let removeFun;\n if (isHeader) {\n const define = this.table.getHeaderDefine(col, row);\n const { componentId } = define as any;\n removeFun = this.headerReactRemoveGraphicCache.get(componentId);\n } else {\n const define = this.table.getBodyColumnDefine(col, row);\n const { componentId } = define as any;\n removeFun = this.reactRemoveGraphicCache.get(componentId);\n }\n if (removeFun) {\n removeFun(col, row);\n }\n }\n\n clearCache() {\n this.reactRemoveAllGraphicCache.forEach(removeFun => {\n removeFun();\n });\n this.headerReactRemoveAllGraphicCache.forEach(removeFun => {\n removeFun();\n });\n }\n\n updateAllCustomCell() {\n this.customLayoutFuncCache.forEach((createFun, componentId) => {\n this.updateCustomCell(componentId);\n });\n this.headerCustomLayoutFuncCache.forEach((createFun, componentId) => {\n this.updateCustomCell(componentId, true);\n });\n }\n}\n\nfunction getUpdateCustomCellRangeInListTable(componentId: string, table: BaseTableAPI, isHeaderCustomLayout?: boolean) {\n const rowSeriesNumber = table.internalProps.rowSeriesNumber ? 1 : 0;\n if (isHeaderCustomLayout) {\n const layoutMap = table.internalProps.layoutMap as SimpleHeaderLayoutMap;\n const { headerObjects } = table.internalProps.layoutMap;\n let headerId: number;\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if ((headerObject.define as any).componentId === componentId) {\n headerId = headerObject.id as number;\n break;\n }\n }\n\n const startCell = layoutMap.getHeaderCellAdressById(headerId);\n const range = layoutMap.getCellRange(startCell.col, startCell.row);\n return range;\n\n // let startCol = -1;\n // let endCol = -1;\n // let startRow = -1;\n // let endRow = -1;\n // for (let i = 0; i < _headerCellIds.length; i++) {\n // const row = _headerCellIds[i];\n // let rowHasObject = false;\n // for (let j = 0; j < row.length; j++) {\n // if (row[j] === headerId) {\n // rowHasObject = true;\n // if (transpose) {\n // // return { col: i, row: j };\n // startCol === -1 && (startCol = i);\n // startRow === -1 && (startRow = j);\n // } else {\n // // return { col: j + this.leftRowSeriesNumberColumnCount, row: i };\n // startCol === -1 && (startCol = j);\n // startRow === -1 && (startRow = i);\n // }\n // } else {\n // if (transpose) {\n // // endCol === -1 && startCol !== -1 && (endCol = i);\n // endRow === -1 && startRow !== -1 && (endRow = j - 1);\n // } else {\n // endCol === -1 && startCol !== -1 && (endCol = j - 1);\n // // endRow === -1 && startRow !== -1 && (endRow = i);\n // }\n // }\n\n // if (startCol !== -1 && endCol !== -1 && startRow !== -1 && endRow !== -1) {\n // break;\n // }\n // }\n\n // if (!rowHasObject) {\n // if (transpose) {\n // endCol === -1 && startCol !== -1 && (endCol = i - 1);\n // } else {\n // endRow === -1 && startRow !== -1 && (endRow = i - 1);\n // }\n // }\n\n // if (startCol !== -1 && endCol !== -1 && startRow !== -1 && endRow !== -1) {\n // break;\n // }\n // }\n\n // return {\n // startCol: startCol + rowSeriesNumber,\n // endCol: endCol + rowSeriesNumber,\n // startRow,\n // endRow\n // };\n }\n const { columnObjects } = table.internalProps.layoutMap;\n for (let i = 0; i < columnObjects.length; i++) {\n const columnObject = columnObjects[i];\n if ((columnObject.define as any).componentId === componentId) {\n return {\n start: {\n col: rowSeriesNumber + i,\n row: table.columnHeaderLevelCount\n },\n end: {\n col: rowSeriesNumber + i,\n row: table.rowCount - 1\n }\n };\n }\n }\n\n return {\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: table.colCount - 1,\n row: table.rowCount - 1\n }\n };\n}\n\nfunction getUpdateCustomCellRangeInPivotTable(\n componentId: string,\n table: BaseTableAPI,\n isHeaderCustomLayout?: boolean\n) {\n const rowSeriesNumber = table.internalProps.rowSeriesNumber ? 1 : 0;\n const ranges = [];\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n if (isHeaderCustomLayout) {\n const { headerObjects } = layoutMap;\n const headerIds: number[] = [];\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (!headerObject) {\n continue;\n }\n if ((headerObject.define as any).componentId === componentId) {\n headerIds.push(headerObject.id as number);\n }\n }\n\n for (let i = 0; i < headerIds.length; i++) {\n const headerId = headerIds[i];\n const startCell = layoutMap.getHeaderCellAdressById(headerId);\n const range = layoutMap.getCellRange(startCell.col, startCell.row);\n ranges.push(range);\n }\n } else {\n let columnIndex: number;\n const { columnObjects, indicatorsAsCol } = layoutMap;\n for (let i = 0; i < columnObjects.length; i++) {\n const columnObject = columnObjects[i];\n if ((columnObject.define as any).componentId === componentId) {\n columnIndex = i;\n break;\n }\n }\n\n if (indicatorsAsCol) {\n for (\n let column = layoutMap.rowHeaderLevelCount + columnIndex;\n column < layoutMap.colCount;\n column += columnObjects.length\n ) {\n const range = {\n start: {\n col: column + rowSeriesNumber,\n row: layoutMap.columnHeaderLevelCount\n },\n end: {\n col: column + rowSeriesNumber,\n row: layoutMap.rowCount - 1\n }\n };\n ranges.push(range);\n }\n } else {\n for (\n let row = layoutMap.columnHeaderLevelCount + columnIndex;\n row < layoutMap.rowCount;\n row += columnObjects.length\n ) {\n const range = {\n start: {\n col: layoutMap.rowHeaderLevelCount + rowSeriesNumber,\n row: row\n },\n end: {\n col: layoutMap.colCount - 1,\n row: row\n }\n };\n ranges.push(range);\n }\n }\n }\n\n return ranges;\n\n // return {\n // startCol: 0,\n // endCol: table.colCount - 1,\n // startRow: 0,\n // endRow: table.rowCount - 1\n // };\n}\n","import type { Cursor, ITimeline, Timeline } from './../../vrender';\nimport {\n createArc,\n createCircle,\n createLine,\n createRect,\n REACT_TO_CANOPUS_EVENTS,\n Text,\n Group as VGroup\n} from './../../vrender';\nimport { isArray, isFunction, isObject, isString, isValid } from '@visactor/vutils';\nimport type {\n CellRange,\n ICustomLayout,\n ICustomRender,\n ICustomRenderElement,\n ICustomRenderElements,\n RectElement\n} from '../../ts-types';\nimport { Icon } from '../graphic/icon';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { percentCalcObj } from '../../render/layout';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\nimport { getTargetCell } from '../../event/util';\nimport type { Group } from '../graphic/group';\n\nexport const CUSTOM_MERGE_PRE_NAME = '_custom_';\nexport const CUSTOM_CONTAINER_NAME = 'custom-container';\nexport const CUSTOM_MERGE_CONTAINER_NAME = CUSTOM_MERGE_PRE_NAME + '_0';\n\nexport function dealWithCustom(\n customLayout: ICustomLayout,\n customRender: ICustomRender,\n col: number,\n row: number,\n width: number,\n height: number,\n autoWidth: boolean,\n autoHeight: boolean,\n padding: [number, number, number, number],\n range: CellRange | undefined,\n table: BaseTableAPI\n) {\n let renderDefault = true;\n let enableCellPadding = false;\n let expectedWidth: number;\n let expectedHeight: number;\n let customElements;\n let elementsGroup: VGroup;\n\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (typeof customLayout === 'function') {\n const arg = {\n col: range?.start.col ?? col,\n row: range?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height\n },\n table,\n originCol: col,\n originRow: row\n };\n const customRenderObj = customLayout(arg);\n if (!customRenderObj) {\n return {\n renderDefault: true\n };\n }\n if (customRenderObj.rootContainer) {\n customRenderObj.rootContainer = decodeReactDom(customRenderObj.rootContainer, table.animationManager.timeline);\n }\n // expectedWidth = customRenderObj.expectedWidth;\n // expectedHeight = customRenderObj.expectedHeight;\n if (customRenderObj.rootContainer instanceof VGroup) {\n elementsGroup = customRenderObj.rootContainer;\n elementsGroup.name = CUSTOM_CONTAINER_NAME;\n (elementsGroup as any).col = col;\n (elementsGroup as any).row = row;\n // } else if (customRenderObj.rootContainer) {\n // customElements = customRenderObj.rootContainer.getElements(undefined, false, false);\n }\n renderDefault = customRenderObj.renderDefault;\n enableCellPadding = customRenderObj.enableCellPadding;\n } else if (typeof customRender === 'function') {\n const arg = {\n col,\n row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height\n },\n table\n };\n const customRenderObj = customRender(arg);\n if (customRenderObj) {\n customElements = customRenderObj.elements;\n renderDefault = customRenderObj.renderDefault;\n expectedWidth = customRenderObj.expectedWidth;\n expectedHeight = customRenderObj.expectedHeight;\n }\n } else if (customRender) {\n expectedWidth = customRender.expectedWidth;\n expectedHeight = customRender.expectedHeight;\n customElements = customRender.elements;\n renderDefault = customRender.renderDefault;\n }\n\n if (customElements) {\n const value = table.getCellValue(col, row);\n elementsGroup = adjustElementToGroup(\n customElements,\n autoWidth ? expectedWidth : width,\n autoHeight ? expectedHeight : height,\n value\n );\n }\n\n if (enableCellPadding) {\n elementsGroup.setAttributes({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3],\n height: height - padding[0] - padding[2]\n });\n }\n\n // for percent calc\n dealPercentCalc(elementsGroup, width, height);\n\n // deal with merge cell attribute update\n if (range && (range.start.col !== range.end.col || range.start.row !== range.end.row)) {\n bindAttributeUpdate(elementsGroup, col, row, 0);\n }\n\n return {\n elementsGroup,\n renderDefault\n };\n}\n\nfunction adjustElementToGroup(\n elements: ICustomRenderElements,\n width: number,\n height: number,\n value: any\n): VGroup | undefined {\n const customGroup = new VGroup({\n x: 0,\n y: 0,\n width,\n height,\n fill: false,\n stroke: false,\n pickable: false\n });\n customGroup.name = CUSTOM_CONTAINER_NAME;\n\n const elementsAdjusted = adjustElementsPos(elements, width, height, value);\n elementsAdjusted.forEach(element => {\n if ((element as any).clickable) {\n element.pickable = (element as any).clickable;\n }\n switch (element.type) {\n case 'arc':\n const arc = createArc({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n outerRadius: element.radius as number,\n startAngle: element.startAngle as number,\n endAngle: element.endAngle as number,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n arc.name = element.name;\n customGroup.appendChild(arc);\n break;\n case 'text':\n if (element.background) {\n const expandX = element.background?.expandX ?? 0;\n const expandY = element.background?.expandY ?? 0;\n const textBackRect = createRect({\n x: (element.x as number) - expandX,\n y: (element.y as number) - expandY,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width + expandX * 2,\n height: element.height + expandY * 2,\n cornerRadius: element.background?.cornerRadius ?? 0,\n // fill: true,\n fill: element.background?.fill ?? '#888'\n });\n customGroup.appendChild(textBackRect);\n }\n const text = new Text(\n Object.assign(\n {\n pickable: !!element.pickable,\n fill: element.color ?? element.fill\n },\n element as any\n )\n );\n text.name = element.name;\n customGroup.appendChild(text);\n break;\n case 'rect':\n const rect = createRect({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n cornerRadius: element.radius as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n rect.name = element.name;\n customGroup.appendChild(rect);\n break;\n case 'circle':\n const circle = createCircle({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n radius: element.radius as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n circle.name = element.name;\n customGroup.appendChild(circle);\n break;\n case 'icon':\n const icon = new Icon({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n image: element.svg as string,\n backgroundWidth: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundHeight: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundColor: element.hover ? element.hover.bgColor ?? 'rgba(22,44,66,0.2)' : undefined,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n icon.name = element.name;\n icon.role = 'icon-custom';\n customGroup.appendChild(icon);\n break;\n case 'image':\n const image = new Icon({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n image: element.src as string,\n backgroundWidth: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundHeight: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundColor: element.hover ? element.hover.bgColor ?? 'rgba(22,44,66,0.2)' : undefined,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor,\n shape: element.shape\n });\n image.name = element.name;\n image.role = 'image-custom';\n customGroup.appendChild(image);\n break;\n\n case 'line':\n const line = createLine({\n points: element.points,\n lineWidth: element.lineWidth ?? 1,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n line.name = element.name;\n customGroup.appendChild(line);\n break;\n }\n });\n\n return customGroup;\n}\n\nfunction adjustElementsPos(\n originalElements: ICustomRenderElements,\n // rect: RectProps,\n width: number,\n height: number,\n // borderLineWidths: number[],\n value: any\n): ICustomRenderElements {\n const result: ICustomRenderElements = [];\n // const { left, top, width, height } = rect;\n const left = 0;\n const top = 0;\n const borderLineWidths = [0, 0, 0, 0];\n\n for (let i = 0; i < originalElements.length; i++) {\n const originalElement = originalElements[i];\n const element = Object.assign({}, originalElement);\n // 执行相关函数\n for (const name in element) {\n if (element.hasOwnProperty(name) && isFunction(element[name])) {\n element[name] = (element[name] as Function)(value);\n }\n }\n\n // 转换字符串值(百分比、px)\n const rect = element as RectElement;\n if (isValid(rect.x)) {\n rect.x = isString(rect.x)\n ? transformString((rect as any).x as string, width - borderLineWidths[1])\n : Number(rect.x);\n }\n if (isValid(rect.y)) {\n rect.y = isString(rect.y)\n ? transformString((rect as any).y as string, height - borderLineWidths[2])\n : Number(rect.y);\n }\n if ('width' in element) {\n element.width = isString(element.width)\n ? transformString(element.width as string, width - borderLineWidths[1])\n : Number(element.width);\n }\n if ('height' in element) {\n element.height = isString(element.height)\n ? transformString(element.height as string, height - borderLineWidths[2])\n : Number(element.height);\n }\n if ('radius' in element) {\n element.radius = isString(element.radius)\n ? transformString(element.radius as string, Math.min(width - borderLineWidths[1], height - borderLineWidths[2]))\n : Number(element.radius);\n }\n if ('hover' in element) {\n // 转换字符串值(百分比、px)\n element.hover.x = isString(element.hover.x)\n ? transformString(element.hover.x as string, width - borderLineWidths[1])\n : Number(element.hover.x);\n element.hover.y = isString(element.hover.y)\n ? transformString(element.hover.y as string, height - borderLineWidths[2])\n : Number(element.hover.y);\n element.hover.width = isString(element.hover.width)\n ? transformString(element.hover.width as string, width - borderLineWidths[1])\n : Number(element.hover.width);\n\n element.hover.height = isString(element.hover.height)\n ? transformString(element.hover.height as string, height - borderLineWidths[2])\n : Number(element.hover.height);\n element.hover.x += left;\n element.hover.y += top;\n }\n // 矫正位置\n rect.x = rect.x + left;\n rect.y = rect.y + top;\n\n result.push(element as unknown as ICustomRenderElement);\n }\n\n return result;\n}\n\nfunction transformString(str: string, size?: number): number {\n if (str.endsWith('px')) {\n return parseInt(str, 10);\n } else if (str.endsWith('%') && size) {\n return (parseInt(str, 10) / 100) * size;\n }\n return parseInt(str, 10);\n}\n\nexport function dealPercentCalc(group: VGroup, parentWidth: number, parentHeight: number) {\n if (!group) {\n return;\n }\n group.forEachChildren((child: VGroup) => {\n if (!child) {\n return;\n }\n if (isObject(child.attribute.width) && (child.attribute.width as percentCalcObj).percent) {\n child.setAttribute(\n 'width',\n Math.max(\n 0,\n ((child.attribute.width as percentCalcObj).percent / 100) * parentWidth +\n ((child.attribute.width as percentCalcObj).delta ?? 0)\n )\n );\n }\n\n if (child.attribute.width < 0) {\n child.setAttribute('width', 0);\n }\n\n if (isObject(child.attribute.height) && (child.attribute.height as percentCalcObj).percent) {\n child.setAttribute(\n 'height',\n Math.max(\n 0,\n ((child.attribute.height as percentCalcObj).percent / 100) * parentHeight +\n ((child.attribute.height as percentCalcObj).delta ?? 0)\n )\n );\n }\n\n if (child.attribute.height < 0) {\n child.setAttribute('height', 0);\n }\n\n if (child.type === 'group') {\n dealPercentCalc(child, child.attribute.width, child.attribute.height);\n }\n });\n}\n\n// temp devode for react jsx customLayout\nexport function decodeReactDom(dom: any, timeline?: ITimeline) {\n if (\n !dom ||\n (!isValid(dom.$$typeof) && // for react\n !isValid(dom.vtype)) // for openinula\n ) {\n // not react or openinula\n return dom;\n }\n const type = dom.type;\n const { attribute, children, stateProxy, animation } = dom.props;\n const g = type({ attribute });\n parseToGraphic(g, dom.props);\n if (stateProxy) {\n g.stateProxy = stateProxy;\n }\n\n g.id = attribute.id;\n g.name = attribute.name;\n if (isArray(children)) {\n children.forEach((item: any) => {\n const c = decodeReactDom(item, timeline);\n c && c.type && g.add(c);\n });\n } else if (children) {\n g.add(decodeReactDom(children, timeline));\n }\n\n if (isArray(animation) && timeline) {\n const animate = g.animate();\n animate.setTimeline(timeline);\n animation.forEach((item: any[]) => {\n animate[item[0]](...item.slice(1));\n });\n }\n return g;\n}\n\nfunction parseToGraphic(g: any, props: any) {\n let isGraphic: boolean = false;\n switch (g.type) {\n case 'richtext':\n break;\n // case 'rich/text':\n // out = g.attribute || {};\n // childrenList[0] && (out.text = childrenList[0]);\n // break;\n case 'rich/image':\n break;\n default:\n isGraphic = true;\n }\n\n if (isGraphic) {\n // childrenList.forEach((c: any) => {\n // c && g.add(c);\n // });\n\n Object.keys(props).forEach(k => {\n const en = REACT_TO_CANOPUS_EVENTS[k];\n if (en) {\n g.on(en, props[k]);\n }\n });\n\n // } else {\n // if (g.type === 'richtext') {\n // g.attribute.textConfig = childrenList.map(item => item.attribute).filter(item => item);\n // }\n }\n}\n\nfunction bindAttributeUpdate(group: VGroup, col: number, row: number, index: number, preId?: string) {\n if (!group) {\n return;\n }\n group.name = `${CUSTOM_MERGE_PRE_NAME}${preId ?? ''}_${index}`;\n group.onBeforeAttributeUpdate = onBeforeAttributeUpdate as any;\n // group.on('afterAttributeUpdate', (e) => {console.log('afterAttributeUpdate', e)})\n if (group.type === 'group' && group.childrenCount) {\n group.forEachChildren((child: VGroup, childIndex: number) => {\n bindAttributeUpdate(child, col, row, childIndex, (preId ?? '') + '_' + index);\n });\n }\n}\n\nfunction onBeforeAttributeUpdate(val: Record, attribute: any) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.skipMergeUpdate) {\n return;\n }\n const cellGroup = getTargetCell(graphic) as Group;\n if (!cellGroup || !cellGroup.stage) {\n return;\n }\n const table = ((cellGroup as any).stage as any).table as BaseTableAPI;\n graphic.skipAttributeUpdate = true;\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = cellGroup;\n if (\n isValid(mergeStartCol) &&\n isValid(mergeEndCol) &&\n isValid(mergeStartRow) &&\n isValid(mergeEndRow) &&\n (mergeStartCol !== mergeEndCol || mergeStartRow !== mergeEndRow)\n ) {\n for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n if (col === cellGroup.col && row === cellGroup.row) {\n continue;\n }\n // const cell = table.scenegraph.getCell(col, row);\n const cell = table.scenegraph.highPerformanceGetCell(col, row);\n if (cell.role === 'cell') {\n const target = cell.getChildByName(graphic.name, true);\n if (!target || target.skipAttributeUpdate) {\n continue;\n }\n for (const key in val) {\n // 表格内merge 单元格布局时,会使用dx dy定位,避免重复更新值,属性同步跳过 dx dy\n // console.log(\n // '[onBeforeAttributeUpdate]',\n // target._uid,\n // cellGroup.col,\n // cellGroup.row,\n // col,\n // row,\n // key,\n // val[key]\n // );\n if (val[key] !== target.attribute[key] && key !== 'dx' && key !== 'dy') {\n target.setAttribute(key, val[key]);\n }\n }\n }\n }\n }\n graphic.skipAttributeUpdate = undefined;\n // return attribute;\n }\n}\n","import type { ColumnIconOption } from '../ts-types';\n\nexport const icons: { [key: string]: ColumnIconOption } = {};\n\nexport class IconCache {\n private static cache: Map = new Map();\n\n static setIcon(key: string, icon: ColumnIconOption) {\n this.cache.set(key, icon);\n }\n\n static getIcon(key: string): ColumnIconOption | null {\n if (this.cache.has(key)) {\n return this.cache.get(key) as ColumnIconOption;\n }\n return null;\n }\n\n static hasIcon(key: string): boolean {\n return this.cache.has(key);\n }\n\n static clear(key: string): boolean {\n return this.cache.delete(key);\n }\n\n static clearAll() {\n this.cache = new Map();\n }\n}\n","import type { IGraphic, IColor, IRect, INode, IGroupGraphicAttribute, ISetAttributeContext } from './../../vrender';\nimport { Group as VRenderGroup } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { InteractionState } from '../../ts-types';\nimport { isNumber, type AABBBounds } from '@visactor/vutils';\n\nexport class Group extends VRenderGroup {\n role?: string;\n col?: number;\n row?: number;\n mergeStartCol?: number;\n mergeStartRow?: number;\n mergeEndCol?: number;\n mergeEndRow?: number;\n contentWidth?: number;\n contentHeight?: number;\n rowNumber?: number; // row number of the column group\n colHeight?: number; // current height of the column group\n border?: IRect; // table/header/body的border mark,挂载在这里方便更新\n needUpdate?: boolean;\n\n needUpdateWidth?: boolean;\n needUpdateHeight?: boolean;\n\n // changes for size align for fs\n // constructor(attribute?: IGroupGraphicAttribute) {\n // dealWidthSize(attribute, attribute);\n // super(attribute);\n // }\n\n // setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext): void {\n // if (key === 'x' || key === 'y' || key === 'width' || key === 'height') {\n // this.attribute[`old${key}`];\n // }\n // const values = {\n // [key]: value\n // };\n // this.setAttributes(values, forceUpdateTag, context);\n // }\n\n // setAttributes(\n // params: Partial,\n // forceUpdateTag?: boolean,\n // context?: ISetAttributeContext\n // ): void {\n // dealWidthSize(params, this.attribute);\n // super.setAttributes(params, forceUpdateTag, context);\n // }\n\n /**\n * @description: 清空Group下全部子元素\n * @return {*}\n */\n clear() {\n this.removeAllChild();\n }\n\n getChildByName(name: string, deep?: boolean): any {\n // for (let i = 0, j = this.children.length; i < j; i++) {\n // if (this.children[i].name === name) {\n // return this.children[i] as unknown as T;\n // }\n // }\n let result = null;\n this.forEachChildren((child: IGraphic) => {\n if (child.name === name) {\n result = child;\n return true; // 提前退出循环\n }\n return false;\n });\n\n if (deep) {\n // for (let i = 0, j = this.children.length; i < j; i++) {\n // const child = this.children[i] as Group;\n\n // if (!child.getChildByName) {\n // continue;\n // }\n\n // const target = child.getChildByName(name, true);\n\n // if (target) {\n // return target;\n // }\n // }\n this.forEachChildren((child: IGraphic) => {\n if ((child as Group).getChildByName) {\n const target = (child as Group).getChildByName(name, true);\n if (target) {\n result = target;\n return true;\n }\n }\n return false;\n });\n }\n\n return result;\n }\n\n get width() {\n let width = this.AABBBounds.width();\n if (width === Infinity || width === -Infinity) {\n width = 0;\n }\n return Math.max(width, this.attribute.width ?? 0);\n }\n\n get height() {\n let height = this.AABBBounds.height();\n if (height === Infinity || height === -Infinity) {\n height = 0;\n }\n return Math.max(height, this.attribute.height ?? 0);\n }\n\n setDeltaWidth(deltaX: number) {\n if (deltaX === 0) {\n return;\n }\n this.setAttribute('width', (this.attribute.width ?? 0) + deltaX);\n if (this.border) {\n this.border.setAttribute('width', this.border.attribute.width + deltaX);\n\n if (this.border.type === 'group') {\n (this.border.firstChild as IRect).setAttribute(\n 'width',\n (this.border.firstChild as IRect).attribute.width + deltaX\n );\n }\n }\n }\n\n setDeltaHeight(deltaY: number) {\n if (deltaY === 0) {\n return;\n }\n this.setAttribute('height', (this.attribute.height ?? 0) + deltaY);\n if (this.border) {\n this.border.setAttribute('height', this.border.attribute.height + deltaY);\n if (this.border.type === 'group') {\n (this.border.firstChild as IRect).setAttribute(\n 'width',\n (this.border.firstChild as IRect).attribute.height + deltaY\n );\n }\n }\n }\n\n setDeltaX(deltaX: number) {\n if (deltaX === 0) {\n return;\n }\n this.setAttribute('x', this.attribute.x + deltaX);\n }\n\n setDeltaY(deltaY: number) {\n if (deltaY === 0) {\n return;\n }\n this.setAttribute('y', this.attribute.y + deltaY);\n }\n\n /**\n * @description: 遍历所有子节点,跳过部分节点,默认跳过group的border\n * @return {*}\n */\n forEachChildrenSkipChild(\n cb: (item: T, index: number) => void | boolean,\n skipChildName = 'border-rect',\n reverse = false\n ) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n if (child.name !== skipChildName) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n if (child.name !== skipChildName) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n }\n child = child._next;\n }\n }\n }\n\n getColGroup(col: number) {\n let c = this._firstChild as Group;\n if (!c) {\n return null;\n }\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.col === col) {\n return c;\n }\n c = c._next as Group;\n }\n return null;\n }\n\n getRowGroup(row: number) {\n let c = this._firstChild as Group;\n if (!c) {\n return null;\n }\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.row === row) {\n return c;\n }\n c = c._next as Group;\n }\n return null;\n }\n\n addCellGroup(cellGroup: Group) {\n if (this.childrenCount === 0 || (this.lastChild as Group).row === cellGroup.row - 1) {\n this.addChild(cellGroup);\n } else {\n // for promise cell row order in column\n let c = this._firstChild as Group;\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.row === cellGroup.row - 1) {\n this.insertAfter(cellGroup, c);\n return;\n }\n c = c._next as Group;\n }\n this.addChild(cellGroup);\n }\n }\n\n getChildAt(index: number) {\n const child = super.getChildAt(index);\n if (child && child.name === 'border-rect') {\n return child._next;\n }\n return child;\n }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n if (this.role === 'cell') {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds as AABBBounds;\n }\n // application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n // const selfChange = true;\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n // application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n after(this, selfChange);\n\n return bounds;\n }\n return super.tryUpdateAABBBounds() as AABBBounds;\n }\n\n // 目前优化方案会导致合并单元格无法正常更新列宽(因为合并单元格更新bounds不会触发父节点bounds更新),暂时关闭优化方案\n // shouldUpdateAABBBoundsForRowMerge(): boolean {\n\n // }\n\n // shouldUpdateAABBBounds(): boolean {\n // return this.shouldSelfChangeUpdateAABBBounds();\n // // // 检索自己是否需要更新\n // // if (super.shouldUpdateAABBBounds()) {\n // // return true;\n // // }\n // // // 检索叶子节点是否有更新(如果children是叶子节点的话)\n // // if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n // // return true;\n // // }\n // // // 检索是否子group需要更新\n // // let needUpdate = false;\n // // this.forEachChildren((node: IGraphic) => {\n // // // 只查找group层级\n // // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // // needUpdate = true;\n // // return true;\n // // }\n // // return false;\n // // });\n // // return needUpdate;\n // }\n\n protected doUpdateAABBBounds(): any {\n // const groupTheme = getTheme(this).group;\n // debugger;\n if (this.role === 'cell') {\n const attribute = this.attribute;\n const { x, y, width, height } = attribute;\n this._AABBBounds.setValue(x, y, x + width, y + height);\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this.clearUpdateBoundTag();\n if (this.shadowRoot) {\n // this.shadowRoot.clearUpdateBoundTag();\n this.shadowRoot.tryUpdateAABBBounds();\n }\n return this._AABBBounds;\n } else if (\n this.role === 'body' ||\n this.role === 'row-header' ||\n this.role === 'col-header' ||\n this.role === 'right-frozen' ||\n this.role === 'bottom-frozen' ||\n this.role === 'corner-header' ||\n this.role === 'corner-right-top-header' ||\n this.role === 'corner-right-bottom-header' ||\n this.role === 'corner-left-bottom-header'\n ) {\n // Infinity bounds for manual clip group\n this._AABBBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this.clearUpdateBoundTag();\n\n if (this.shadowRoot) {\n // this.shadowRoot.clearUpdateBoundTag();\n this.shadowRoot.tryUpdateAABBBounds();\n }\n return this._AABBBounds;\n }\n return super.doUpdateAABBBounds();\n // _AABBBounds\n // const bounds = graphicService.updateGroupAABBBounds(\n // attribute,\n // getTheme(this).group,\n // this._AABBBounds,\n // this\n // ) as AABBBounds;\n\n // const { boundsPadding = groupTheme.boundsPadding } = attribute;\n // const paddingArray = parsePadding(boundsPadding);\n // if (paddingArray) {\n // bounds.expand(paddingArray);\n // }\n // // 更新bounds之后需要设置父节点,否则tag丢失\n // this.parent && this.parent.addChildUpdateBoundTag();\n // this.clearUpdateBoundTag();\n\n // this.emit('AAABBBoundsChange');\n }\n\n // update column group row number\n updateColumnRowNumber(row: number) {\n if (!this.rowNumber) {\n this.rowNumber = row;\n } else {\n this.rowNumber = Math.max(this.rowNumber, row);\n }\n }\n\n // update column height\n updateColumnHeight(cellHeight: number) {\n if (!this.colHeight) {\n this.colHeight = cellHeight;\n } else {\n this.colHeight += cellHeight;\n }\n }\n\n // doUpdateLocalMatrix() {\n // const oldX = this.attribute.x;\n // const oldY = this.attribute.y;\n // this.attribute.x = Math.floor(this.attribute.x);\n // this.attribute.y = Math.floor(this.attribute.y);\n // super.doUpdateLocalMatrix();\n // this.attribute.x = oldX;\n // this.attribute.y = oldY;\n // }\n}\n\nfunction after(group: Group, selfChange: boolean) {\n if (!group.stage || !group.stage.dirtyBounds || !group.stage.renderCount) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (group.isContainer && !selfChange) {\n return;\n }\n group.stage.dirty(group.globalAABBBounds);\n}\n\n// function dealWidthSize(values: any, attributes: any) {\n// const x = values.x ?? attributes.oldx ?? attributes.x ?? 0 + values.dx ?? attributes.dx ?? 0;\n// const y = values.y ?? attributes.oldy ?? attributes.y ?? 0 + values.dy ?? attributes.dy ?? 0;\n// const width = values.width ?? attributes.oldwidth ?? attributes.width ?? 0;\n// const height = values.height ?? attributes.oldheight ?? attributes.height ?? 0;\n// isNumber(values.width) && (values.oldwidth = values.width);\n// isNumber(values.height) && (values.oldheight = values.height);\n// isNumber(values.x) && (values.oldx = values.x);\n// isNumber(values.y) && (values.oldy = values.y);\n\n// if (Math.floor(x + width) > Math.floor(width) + Math.floor(x)) {\n// values.width = Math.ceil(width);\n// } else {\n// values.width = Math.floor(width);\n// }\n\n// if (Math.floor(y + height) > Math.floor(height) + Math.floor(y)) {\n// values.height = Math.ceil(height);\n// } else {\n// values.height = Math.floor(height);\n// }\n// isNumber(values.x) && (values.x = Math.floor(values.x));\n// isNumber(values.y) && (values.y = Math.floor(values.y));\n// }\n","export function calcKeepAspectRatioSize(\n width: number, // image width\n height: number, // image height\n maxWidth: number, // cell width\n maxHeight: number // cell height\n): {\n width: number;\n height: number;\n} {\n // let newWidth = width;\n // let newHeight = height;\n // if (newWidth > maxWidth) {\n // newWidth = maxWidth;\n // newHeight = (newWidth * height) / width;\n // }\n // if (newHeight > maxHeight) {\n // newHeight = maxHeight;\n // newWidth = (newHeight * width) / height;\n // }\n // return {\n // width: newWidth,\n // height: newHeight\n // };\n\n const rectWidth = width;\n const rectHeight = height;\n const containerWidth = maxWidth;\n const containerHeight = maxHeight;\n const containerRatio = containerWidth / containerHeight;\n const rectRatio = rectWidth / rectHeight;\n let newWidth;\n let newHeight;\n let offsetX;\n let offsetY;\n\n if (rectRatio > containerRatio) {\n // 矩形的宽高比较大,以容器的宽度为基准进行缩放\n newWidth = containerWidth;\n newHeight = newWidth / rectRatio;\n offsetX = 0;\n offsetY = (containerHeight - newHeight) / 2;\n } else {\n // 矩形的高宽比较大,以容器的高度为基准进行缩放\n newHeight = containerHeight;\n newWidth = newHeight * rectRatio;\n offsetY = 0;\n offsetX = (containerWidth - newWidth) / 2;\n }\n\n return {\n width: newWidth,\n height: newHeight\n };\n}\n","/* eslint-disable no-undef */\nexport function calcStartPosition(\n left: number,\n top: number,\n width: number,\n height: number,\n contentWidth: number,\n contentHeight: number,\n textAlign: CanvasTextAlign = 'left',\n textBaseline: CanvasTextBaseline = 'middle',\n margin = [0, 0, 0, 0],\n paddingLeft = 0,\n paddingRight = 0,\n paddingTop = 0,\n paddingBottom = 0\n): { x: number; y: number } {\n const right = left + width;\n const bottom = top + height;\n let x = left + margin[3] + paddingLeft;\n if (textAlign === 'right' || textAlign === 'end') {\n x = right - contentWidth - margin[1] - paddingRight;\n } else if (textAlign === 'center') {\n x = left + (width - contentWidth + paddingLeft - paddingRight) / 2;\n }\n let y = top + margin[0] + paddingTop;\n if (textBaseline === 'bottom' || textBaseline === 'alphabetic' || textBaseline === 'ideographic') {\n y = bottom - contentHeight - margin[2] - paddingBottom;\n } else if (textBaseline === 'middle') {\n y = top + (height - contentHeight + paddingTop - paddingBottom) / 2;\n }\n return { x, y };\n}\n","import type { IThemeSpec } from '@visactor/vrender-core';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { style as utilStyle } from '../../tools/helper';\nimport { isValid } from '@visactor/vutils';\nimport { isValidStyle, isZeroStyle } from '../../tools/style';\n\nexport function getCellBorderStrokeWidth(col: number, row: number, cellTheme: IThemeSpec, table: BaseTableAPI) {\n // const frameBorderLineWidths = utilStyle.toBoxArray(table.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n let strokeArrayWidth = (cellTheme?.group as any)?.strokeArrayWidth ?? undefined;\n if (\n table.theme.cellInnerBorder ||\n !isValidStyle(table.theme.frameStyle.borderLineWidth) ||\n isZeroStyle(table.theme.frameStyle.borderLineWidth)\n ) {\n return strokeArrayWidth;\n }\n if (col === 0) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[3] = 0;\n }\n if (col === table.colCount - 1) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[1] = 0;\n }\n if (row === 0) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[0] = 0;\n }\n if (row === table.rowCount - 1) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[2] = 0;\n }\n\n return strokeArrayWidth;\n}\n","/* eslint-disable no-undef */\nimport type { IGroupGraphicAttribute } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport { Group } from '../graphic/group';\nimport { Icon } from '../graphic/icon';\n\n/*\n * cell区域规划\n * 左侧占位区 | 中央内容区 | 右侧占位区\n *\n * cell width设置\n * 1. 固定width\n * 2. 自动撑开\n * cell height设置\n * 1. 固定height\n * 2. 无折行,单行自动撑开\n * 2. 折行,多行自动撑开\n *\n * 中央内容区横向对齐方式\n * 纵向对齐方式\n * padding\n */\n\ninterface ICellContentOption {\n autoWidth: boolean;\n autoHeight: boolean;\n cellWidth: number;\n cellHeight: number;\n align: CanvasTextAlign;\n baseline: CanvasTextBaseline;\n}\n\n/**\n * @description: 单元格内容组件,包含content icon & wraptext/richtext\n * @return {*}\n */\nexport class CellContent extends Group {\n _leftGroup: Group;\n _rightGroup: Group;\n _centerGroup: Group;\n\n _autoWidth = false;\n _autoHeight = false;\n _cellWidth: number;\n _originCellWidth: number;\n _cellHeight: number;\n _align: CanvasTextAlign;\n _baseline: CanvasTextBaseline;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n\n this._leftGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._leftGroup.role = 'content-left';\n this._rightGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._rightGroup.role = 'content-right';\n this._centerGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._centerGroup.role = 'content-center';\n\n this.appendChild(this._leftGroup);\n this.appendChild(this._rightGroup);\n this.appendChild(this._centerGroup);\n }\n\n setCellContentOption(option: ICellContentOption) {\n this._autoWidth = option.autoWidth;\n this._autoHeight = option.autoHeight;\n this._cellWidth = option.cellWidth;\n this._originCellWidth = option.cellWidth;\n this._cellHeight = option.cellHeight;\n this._align = option.align;\n this._baseline = option.baseline;\n }\n\n addLeftOccupyingIcon(icon: Icon) {\n icon.setAttribute('x', this._leftGroup.width + (icon.attribute.marginLeft ?? 0));\n this._leftGroup.appendChild(icon);\n this._leftGroup.setDeltaWidth(\n (icon.attribute.marginLeft ?? 0) + (icon.attribute.marginRight ?? 0) + icon.attribute.width\n );\n }\n\n addRightOccupyingIcon(icon: Icon) {\n icon.setAttribute('x', this._rightGroup.width + (icon.attribute.marginLeft ?? 0));\n this._rightGroup.appendChild(icon);\n this._rightGroup.setDeltaWidth(\n (icon.attribute.marginLeft ?? 0) + (icon.attribute.marginRight ?? 0) + icon.attribute.width\n );\n }\n\n addContent(content: Icon | Text | RichText) {\n const lastChild = this._centerGroup.lastChild as Icon | Text | RichText;\n if (lastChild) {\n // 横排content,新加入content更新x坐标\n content.setAttributes({\n x: lastChild.attribute.x + lastChild.AABBBounds.width()\n });\n }\n this._centerGroup.appendChild(content);\n if (content instanceof Text) {\n this._centerGroup.setAttribute('pickable', false);\n content.setAttribute('textAlign', 'left');\n }\n }\n\n layout() {\n // 计算左侧占位区域尺寸\n let leftOccupyingWidth = this._leftGroup.width;\n if (leftOccupyingWidth === Infinity) {\n leftOccupyingWidth = 0;\n }\n // 计算右侧占位区域尺寸\n let rightOccupyingWidth = this._rightGroup.width;\n if (rightOccupyingWidth === -Infinity) {\n rightOccupyingWidth = 0;\n }\n\n // 计算中央内容区域尺寸\n if (this._autoWidth) {\n // 计算内容本身宽度\n const centerWidth = this._centerGroup.width;\n // 更新cell宽度\n this._cellWidth = leftOccupyingWidth + rightOccupyingWidth + centerWidth;\n // this.attribute.width = this._cellWidth;\n this.setAttribute('width', this._cellWidth);\n } else {\n // 计算留给内容的宽度\n const contentWidth = this._cellWidth - leftOccupyingWidth - rightOccupyingWidth;\n // 更新内容宽度\n this.updateCenterLayout(contentWidth);\n const centerWidth = this._centerGroup.width;\n this._cellWidth = leftOccupyingWidth + rightOccupyingWidth + centerWidth;\n // this.attribute.width = this._cellWidth;\n this.setAttribute('width', this._cellWidth);\n }\n // 更新水平位置\n this.updateHorizontalPos();\n\n // if (this._autoHeight) {\n const leftOccupyingHeight = this._leftGroup.height;\n const rightOccupyingHeight = this._rightGroup.height;\n const centerHeight = this._centerGroup.height;\n\n this._cellHeight = Math.max(leftOccupyingHeight, rightOccupyingHeight, centerHeight);\n // this.attribute.height = this._cellHeight;\n this.setAttribute('height', this._cellHeight);\n // }\n\n // 更新纵向位置\n this.updateVerticalPos();\n }\n\n updateCenterLayout(contentWidth: number) {\n // 计算留给文字的空间\n let textWidth = contentWidth;\n this._centerGroup.forEachChildren(child => {\n if (child instanceof Icon) {\n textWidth -= child.AABBBounds.width();\n }\n });\n\n // 更新文字宽度\n const text = this._centerGroup.getChildByName('text');\n if (text instanceof RichText) {\n text.setAttribute('width', textWidth);\n } else if (text instanceof Text) {\n text.setAttribute('maxLineWidth', textWidth);\n }\n\n // 按顺序更新x\n let x = 0;\n this._centerGroup.forEachChildren((child: Icon | Text | RichText) => {\n child.setAttribute('x', x);\n x += child.AABBBounds.width();\n });\n }\n\n updateHorizontalPos() {\n this._leftGroup.setAttribute('x', 0);\n this._rightGroup.setAttribute('x', this._cellWidth - this._rightGroup.width);\n this._centerGroup.setAttribute('x', this._leftGroup.width);\n // 对齐方式由外部处理\n if (this._align === 'left' || this._align === 'start') {\n this.setAttribute('dx', 0);\n } else if (this._align === 'center') {\n this.setAttribute('dx', -this.attribute.width / 2);\n } else if (this._align === 'right' || this._align === 'end') {\n this.setAttribute('dx', -this.attribute.width);\n }\n }\n\n updateVerticalPos() {\n if (this._baseline === 'top') {\n this._leftGroup.setAttribute('y', 0);\n this._rightGroup.setAttribute('y', 0);\n this._centerGroup.setAttribute('y', 0);\n } else if (this._baseline === 'middle') {\n // 处理Group内icon对齐\n this._leftGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', (this._leftGroup.height - icon.AABBBounds.height()) / 2);\n });\n this._rightGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', (this._rightGroup.height - icon.AABBBounds.height()) / 2);\n });\n\n this._leftGroup.setAttribute('y', this._cellHeight / 2 - this._leftGroup.height / 2);\n this._rightGroup.setAttribute('y', this._cellHeight / 2 - this._rightGroup.height / 2);\n this._centerGroup.setAttribute('y', this._cellHeight / 2 - this._centerGroup.height / 2);\n } else if (this._baseline === 'bottom') {\n // 处理Group内icon对齐\n this._leftGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', this._leftGroup.height - icon.AABBBounds.height());\n });\n this._rightGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', this._rightGroup.height - icon.AABBBounds.height());\n });\n\n this._leftGroup.setAttribute('y', this._cellHeight - this._leftGroup.height);\n this._rightGroup.setAttribute('y', this._cellHeight - this._rightGroup.height);\n this._centerGroup.setAttribute('y', this._cellHeight - this._centerGroup.height);\n }\n }\n\n updateWidth(width: number) {\n this._cellWidth = width;\n this._originCellWidth = width;\n this.layout();\n }\n\n updateHeight(height: number) {\n this._cellHeight = height;\n this._cellWidth = this._originCellWidth;\n const textMark = this.getChildByName('text', true);\n if (textMark) {\n textMark.setAttribute('heightLimit', height);\n }\n\n this.layout();\n }\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\nimport { HierarchyState } from '../../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\n\nexport function getHierarchyOffset(col: number, row: number, table: BaseTableAPI): number {\n // 处理树形展开\n let cellHierarchyIndent = 0;\n const layoutMap = table.internalProps.layoutMap;\n //判断是否为表头\n if (layoutMap.isHeader(col, row)) {\n const hd = layoutMap.getHeader(col, row) as HeaderData;\n if (isValid(hd?.hierarchyLevel)) {\n cellHierarchyIndent = (hd.hierarchyLevel ?? 0) * ((layoutMap as PivotHeaderLayoutMap).rowHierarchyIndent ?? 0);\n if (\n (layoutMap as PivotHeaderLayoutMap).rowHierarchyTextStartAlignment &&\n !table.internalProps.headerHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n } else {\n // 基本表格表身body单元格 如果是树形展开 需要考虑缩进值\n // const cellHierarchyState = table.getHierarchyState(col, row);\n if (\n (table.options as ListTableConstructorOptions).groupBy ||\n (table.getBodyColumnDefine(col, row) as ColumnDefine)?.tree\n ) {\n const indexArr = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row));\n const groupLength = table.dataSource.getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = 0;\n }\n cellHierarchyIndent =\n Array.isArray(indexArr) && table.getHierarchyState(col, row) !== HierarchyState.none\n ? indexArrLngth * ((layoutMap as SimpleHeaderLayoutMap).hierarchyIndent ?? 0)\n : 0;\n if (\n (layoutMap as SimpleHeaderLayoutMap).hierarchyTextStartAlignment &&\n !table.internalProps.bodyHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.bodyHelper.getHierarchyIconWidth();\n }\n }\n }\n\n return cellHierarchyIndent;\n}\n","import { isString } from '@visactor/vutils';\nimport { convertInternal } from '../../tools/util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function breakString(textStr: string, table: BaseTableAPI) {\n let moreThanMaxCharacters = false;\n if (isString(textStr) && textStr.length > (table.options.maxCharactersNumber || 200)) {\n textStr = textStr.slice(0, table.options.maxCharactersNumber || 200);\n textStr += '\\u2026';\n moreThanMaxCharacters = true;\n }\n let text;\n if (!table.internalProps.enableLineBreak && !table.options.customConfig?.multilinesForXTable) {\n text = [convertInternal(textStr)];\n } else {\n text = convertInternal(textStr).replace(/\\r?\\n/g, '\\n').replace(/\\r/g, '\\n').split('\\n') || [];\n }\n\n // clear empty string in array end\n while (text.length && text.length > 1 && !text[text.length - 1]) {\n text.pop();\n }\n\n if (table.options.customConfig?.multilinesForXTable && !table.internalProps.autoWrapText) {\n // clear empty string in array start;\n // align width xtable display\n while (text.length && text.length > 1 && !text[0]) {\n text.shift();\n }\n }\n\n return {\n text,\n moreThanMaxCharacters\n };\n}\n","/* eslint-disable no-undef */\nimport type { IThemeSpec } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport { convertInternal } from '../../tools/util';\nimport type { CellRange, ColumnIconOption } from '../../ts-types';\nimport { IconFuncTypeEnum, IconPosition } from '../../ts-types';\nimport { CellContent } from '../component/cell-content';\nimport type { Group } from '../graphic/group';\nimport { Icon } from '../graphic/icon';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from './get-cell-merge';\nimport { getHierarchyOffset } from './get-hierarchy-offset';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isNil, isNumber, isValid, isValidNumber } from '@visactor/vutils';\nimport { isMergeCellGroup } from './is-merge-cell-group';\nimport { breakString } from './break-string';\nimport { CUSTOM_CONTAINER_NAME } from '../component/custom';\nimport { getTargetCell } from '../../event/util';\n\n/**\n * @description: 创建单元格内容\n * cellGroup\n * |-- content\n * |-- leftContentIcons\n * |-- rightContentIcons\n * |-- wrapText / richtext\n * |-- leftIcons\n * |-- rightIcons\n * |-- absoluteIcons\n * @param {ColumnIconOption} icons\n * @param {string} textStr\n * @param {array} padding\n * @param {boolean} autoColWidth\n * @param {boolean} autoRowHeight\n * @param {boolean} autoWrapText\n * @param {number} cellWidth\n * @param {number} cellHeight\n * @param {CanvasTextAlign} textAlign\n * @param {CanvasTextBaseline} textBaseline\n * @return {*}\n */\nexport function createCellContent(\n cellGroup: Group,\n icons: ColumnIconOption[] | null,\n textStr: string,\n padding: [number, number, number, number],\n autoColWidth: boolean,\n autoRowHeight: boolean,\n autoWrapText: boolean,\n lineClamp: number | undefined,\n cellWidth: number,\n cellHeight: number,\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined\n) {\n // const leftIcons: ColumnIconOption[] = [];\n // const rightIcons: ColumnIconOption[] = [];\n // const contentLeftIcons: ColumnIconOption[] = [];\n // const contentRightIcons: ColumnIconOption[] = [];\n // const inlineFrontIcons: ColumnIconOption[] = [];\n // const inlineEndIcons: ColumnIconOption[] = [];\n // const absoluteLeftIcons: ColumnIconOption[] = [];\n // const absoluteRightIcons: ColumnIconOption[] = [];\n\n let contentWidth: number;\n let contentHeight: number;\n let leftIconWidth = 0;\n // let leftIconHeight = 0;\n let rightIconWidth = 0;\n // let rightIconHeight = 0;\n // let absoluteLeftIconWidth = 0;\n let absoluteRightIconWidth = 0;\n\n if (!Array.isArray(icons) || icons.length === 0) {\n if (isValid(textStr)) {\n // 没有icon,cellGroup只添加WrapText\n const { text, moreThanMaxCharacters } = breakString(textStr, table);\n\n const hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(cellGroup.col, cellGroup.row, table);\n\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n if (textAlign === 'left') {\n _contentOffset = table.theme._contentOffset;\n } else if (textAlign === 'right') {\n _contentOffset = -table.theme._contentOffset;\n }\n }\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n moreThanMaxCharacters,\n maxLineWidth: autoColWidth ? Infinity : cellWidth - (padding[1] + padding[3] + hierarchyOffset),\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit:\n table.options.customConfig?.limitContentHeight === false\n ? -1\n : autoRowHeight && !table.options.customConfig?.multilinesForXTable\n ? -1\n : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: (textAlign === 'left' ? hierarchyOffset : 0) + _contentOffset,\n whiteSpace:\n table.options.customConfig?.limitContentHeight === false\n ? 'normal'\n : text.length === 1 && !autoWrapText\n ? 'no-wrap'\n : 'normal',\n keepCenterInLine: true\n };\n const wrapText = new Text(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n wrapText.name = 'text';\n (wrapText as any).textBaseline = textBaseline;\n\n cellGroup.appendChild(wrapText);\n\n contentWidth = wrapText.AABBBounds.width();\n contentHeight = wrapText.AABBBounds.height();\n }\n } else {\n // // icon分类\n // icons.forEach(icon => {\n // switch (icon.positionType) {\n // case IconPosition.left:\n // leftIcons.push(icon);\n // break;\n // case IconPosition.right:\n // rightIcons.push(icon);\n // break;\n // case IconPosition.contentLeft:\n // contentLeftIcons.push(icon);\n // break;\n // case IconPosition.contentRight:\n // contentRightIcons.push(icon);\n // break;\n // // case IconPosition.absoluteLeft:\n // // absoluteLeftIcons.push(icon);\n // // break;\n // case IconPosition.absoluteRight:\n // absoluteRightIcons.push(icon);\n // break;\n // case IconPosition.inlineFront:\n // inlineFrontIcons.push(icon);\n // break;\n // case IconPosition.inlineEnd:\n // inlineEndIcons.push(icon);\n // break;\n // }\n // });\n\n // // 添加非cell icon & absolute icon\n // leftIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-left';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', leftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // leftIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n // cellGroup.appendChild(iconMark);\n // });\n\n // rightIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-right';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', rightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // rightIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n // cellGroup.appendChild(iconMark);\n // });\n\n // absoluteLeftIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-absolute-left';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', absoluteLeftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // absoluteLeftIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // cellGroup.appendChild(iconMark);\n // });\n\n // absoluteRightIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-absolute-right';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', absoluteRightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // absoluteRightIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // cellGroup.appendChild(iconMark);\n // });\n\n const {\n inlineFrontIcons,\n inlineEndIcons,\n contentLeftIcons,\n contentRightIcons,\n leftIconWidth: layoutLeftIconWidth,\n // leftIconHeight: layoutLeftIconHeight,\n rightIconWidth: layoutRightIconWidth,\n // rightIconHeight: layoutRightIconHeight,\n // absoluteLeftIconWidth: layoutAbsoluteLeftIconWidth,\n absoluteRightIconWidth: layoutAbsoluteRightIconWidth\n } = dealWithIconLayout(icons, cellGroup, range, table);\n\n leftIconWidth = layoutLeftIconWidth;\n // leftIconHeight = layoutLeftIconHeight;\n rightIconWidth = layoutRightIconWidth;\n // rightIconHeight = layoutRightIconHeight;\n // absoluteLeftIconWidth = layoutAbsoluteLeftIconWidth;\n absoluteRightIconWidth = layoutAbsoluteRightIconWidth;\n\n // 添加text & content icon & inline icon\n let textMark;\n // 直接添加richtext / wrapText\n if (inlineFrontIcons.length === 0 && inlineEndIcons.length === 0) {\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n if (textAlign === 'left') {\n _contentOffset = table.theme._contentOffset;\n } else if (textAlign === 'right') {\n _contentOffset = -table.theme._contentOffset;\n }\n }\n const hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(cellGroup.col, cellGroup.row, table);\n const { text, moreThanMaxCharacters } = breakString(textStr, table);\n\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n moreThanMaxCharacters,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth - hierarchyOffset,\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit:\n table.options.customConfig?.limitContentHeight === false\n ? -1\n : autoRowHeight && !table.options.customConfig?.multilinesForXTable\n ? -1\n : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n whiteSpace:\n table.options.customConfig?.limitContentHeight === false\n ? 'normal'\n : text.length === 1 && !autoWrapText\n ? 'no-wrap'\n : 'normal',\n dx: (textAlign === 'left' ? (!contentLeftIcons.length ? hierarchyOffset : 0) : 0) + _contentOffset,\n keepCenterInLine: true\n };\n const wrapText = new Text(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n wrapText.name = 'text';\n textMark = wrapText;\n } else {\n const textOption = Object.assign(\n {\n text: textStr?.toString()\n },\n (cellGroup.parent as Group)?.theme?.userTheme?.text || {}\n );\n if (cellTheme.text) {\n Object.assign(textOption, cellTheme.text);\n }\n textOption.textBaseline = 'middle';\n const textConfig = [\n ...inlineFrontIcons.map(icon => dealWithRichTextIcon(icon)),\n textOption,\n ...inlineEndIcons.map(icon => dealWithRichTextIcon(icon))\n ];\n textConfig[0].textAlign = textAlign;\n const text = new RichText({\n width: autoColWidth ? 0 : cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth,\n height: autoRowHeight && autoWrapText ? 0 : Math.ceil(cellHeight - (padding[0] + padding[2])),\n textConfig,\n verticalDirection: autoRowHeight && autoWrapText ? 'top' : (textBaseline as any),\n\n ellipsis: textOption.ellipsis\n // verticalDirection: textBaseline as any\n // textAlign: textAlign as any,\n // textBaseline: textBaseline as any,\n });\n text.name = 'text';\n textMark = text;\n text.bindIconEvent();\n\n if (range && (range.start.col !== range.end.col || range.start.row !== range.end.row)) {\n text.onBeforeAttributeUpdate = onBeforeAttributeUpdate as any;\n }\n }\n\n if (contentLeftIcons.length !== 0 || contentRightIcons.length !== 0) {\n // 创建CellContent处理conten icon;有content icon,cellGroup: CellIcons + cellContent\n\n const cellContent = new CellContent({\n // x: padding[3] + leftIconWidth,\n // y: padding[0],\n x: 0,\n y: 0,\n fill: false,\n stroke: false,\n pickable: false\n });\n cellContent.name = 'content';\n\n cellContent.setCellContentOption({\n autoWidth: autoColWidth,\n autoHeight: autoRowHeight,\n cellWidth: cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth,\n cellHeight: cellHeight - (padding[0] + padding[2]),\n align: textAlign,\n baseline: textBaseline\n });\n const dealWithIconComputeVar = {\n addedHierarchyOffset: 0\n }; //为了只增加一次indent的缩进值,如果有两个icon都dealWithIcon的话\n contentLeftIcons.forEach(icon => {\n const iconMark = dealWithIcon(\n icon,\n undefined,\n cellGroup.col,\n cellGroup.row,\n range,\n table,\n dealWithIconComputeVar\n );\n iconMark.role = 'icon-content-left';\n iconMark.name = icon.name;\n cellContent.addLeftOccupyingIcon(iconMark);\n });\n contentRightIcons.forEach(icon => {\n const iconMark = dealWithIcon(\n icon,\n undefined,\n cellGroup.col,\n cellGroup.row,\n range,\n table,\n dealWithIconComputeVar\n );\n iconMark.role = 'icon-content-right';\n iconMark.name = icon.name;\n cellContent.addRightOccupyingIcon(iconMark);\n });\n cellContent.addContent(textMark);\n\n cellGroup.appendChild(cellContent);\n cellContent.layout();\n\n contentWidth = cellContent.AABBBounds.width();\n contentHeight = cellContent.AABBBounds.height();\n } else {\n // 没有content icon,cellGroup: CellIcons + wrapText/richtext\n // cellGroup.appendChild(textMark);\n if (cellGroup.firstChild) {\n cellGroup.insertBefore(textMark, cellGroup.firstChild);\n } else {\n cellGroup.appendChild(textMark);\n }\n contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n }\n }\n\n // 内容添加后单元格的宽高\n const width = autoColWidth\n ? leftIconWidth + contentWidth + rightIconWidth // + padding[1] + padding[3]\n : cellWidth - (padding[1] + padding[3]);\n // const height = autoRowHeight\n // ? Math.max(leftIconHeight, contentHeight, rightIconHeight) // + padding[0] + padding[2]\n // : cellHeight - (padding[0] + padding[2]);\n const height = cellHeight - (padding[0] + padding[2]);\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth + padding[3]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth + padding[3] + padding[1]);\n } else if (child.name === 'content' || child.name === 'text') {\n if (textAlign === 'center' && child.type !== 'richtext') {\n child.setAttribute('x', padding[3] + leftIconWidth + (width - leftIconWidth - rightIconWidth) / 2);\n } else if (textAlign === 'right' && child.type !== 'richtext') {\n child.setAttribute('x', padding[3] + width - rightIconWidth);\n } else {\n child.setAttribute('x', padding[3] + leftIconWidth);\n }\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + height - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n // 更新cell Group宽高\n cellGroup.setAttributes({\n width: width + padding[1] + padding[3],\n height: height + padding[0] + padding[2]\n } as any);\n}\n\n/**\n * @description: icon option生成icon mark\n * @param {ColumnIconOption} icon\n * @return {*}\n */\nexport function dealWithIcon(\n icon: ColumnIconOption,\n mark?: Icon,\n col?: number,\n row?: number,\n range?: CellRange,\n table?: BaseTableAPI,\n dealWithIconComputeVar?: {\n addedHierarchyOffset: number;\n }\n): Icon {\n // positionType在外部处理\n const iconAttribute = {} as any;\n\n // 图片内容\n if (icon.type === 'image') {\n if (icon.isGif) {\n iconAttribute.gif = icon.src;\n iconAttribute.image = icon.src;\n } else {\n iconAttribute.image = icon.src;\n }\n } else if (icon.type === 'svg' || 'svg' in icon) {\n iconAttribute.image = icon.svg;\n // } else if (icon.type === 'path') {\n // // to do: 暂不支持\n // } else if (icon.type === 'font') {\n // // to do: 暂不支持\n }\n\n // name\n // iconAttribute.name = icon.name;\n iconAttribute.width = icon.width;\n iconAttribute.height = icon.height;\n iconAttribute.visibleTime = icon.visibleTime ?? 'always';\n iconAttribute.funcType = icon.funcType;\n iconAttribute.interactive = icon.interactive;\n iconAttribute.isGif = (icon as any).isGif;\n\n let hierarchyOffset = 0;\n if (\n (!dealWithIconComputeVar || dealWithIconComputeVar?.addedHierarchyOffset === 0) &&\n isNumber(col) &&\n isNumber(row) &&\n table &&\n (icon.funcType === IconFuncTypeEnum.collapse ||\n icon.funcType === IconFuncTypeEnum.expand ||\n icon.positionType === IconPosition.contentLeft ||\n icon.positionType === IconPosition.contentRight)\n ) {\n // compute hierarchy offset\n // hierarchyOffset = getHierarchyOffset(col, row, table);\n hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(col, row, table);\n if (dealWithIconComputeVar) {\n dealWithIconComputeVar.addedHierarchyOffset = 1;\n }\n }\n\n iconAttribute.marginLeft = (icon.marginLeft ?? 0) + hierarchyOffset;\n iconAttribute.marginRight = icon.marginRight ?? 0;\n\n if (icon.interactive === false) {\n iconAttribute.pickable = false;\n }\n\n if (icon.hover) {\n iconAttribute.backgroundWidth = icon.hover.width ?? icon.width;\n iconAttribute.backgroundHeight = icon.hover.width ?? icon.width;\n iconAttribute.backgroundColor = icon.hover.bgColor ?? 'rgba(22,44,66,0.2)';\n iconAttribute.hoverImage = icon.hover.image;\n }\n\n if (icon.cursor) {\n iconAttribute.cursor = icon.cursor;\n }\n\n if ('shape' in icon && icon.shape === 'circle') {\n iconAttribute.shape = icon.shape;\n }\n\n if (mark) {\n mark.setAttributes(iconAttribute);\n mark.loadImage(iconAttribute.image);\n mark.tooltip = icon.tooltip;\n mark.name = icon.name;\n return mark;\n }\n // funcType, cursor, tooltip, hover在事件响应阶段处理\n const iconMark = new Icon(iconAttribute);\n iconMark.tooltip = icon.tooltip;\n iconMark.name = icon.name;\n\n return iconMark;\n}\n\n/**\n * @description: icon option生成richtext icon config\n * @param {ColumnIconOption} icon\n * @return {*}\n */\nexport function dealWithRichTextIcon(icon: ColumnIconOption) {\n // positionType在外部处理\n const config = {} as any;\n\n // 图片内容\n if (icon.type === 'image') {\n config.image = icon.src;\n } else if (icon.type === 'svg' || 'svg' in icon) {\n config.image = icon.svg;\n // } else if (icon.type === 'path') {\n // // to do: 暂不支持\n // } else if (icon.type === 'font') {\n // // to do: 暂不支持\n }\n\n // name\n config.visibleTime = icon.visibleTime ?? 'always';\n config.funcType = icon.funcType;\n config.id = icon.name;\n config.width = icon.width;\n config.height = icon.height;\n\n if (icon.marginRight || icon.marginLeft) {\n config.margin = [0, icon.marginRight ?? 0, 0, icon.marginLeft ?? 0];\n }\n\n if (icon.hover) {\n config.backgroundWidth = icon.hover.width ?? icon.width;\n config.backgroundHeight = icon.hover.height ?? icon.height;\n config.backgroundShowMode = 'hover';\n config.hoverImage = icon.hover.image;\n config.backgroundStroke = false;\n config.backgroundFill = icon.hover.bgColor ?? 'rgba(22,44,66,0.2)';\n }\n\n if (icon.cursor) {\n config.cursor = icon.cursor;\n }\n\n config.tooltip = icon.tooltip;\n\n // funcType, cursor, tooltip在事件响应阶段处理\n return config;\n}\n\n/**\n * @description: 更新单元格内容宽度\n * @param {Group} cellGroup\n * @param {number} distWidth\n * @param {boolean} autoRowHeight\n * @return {*}\n */\nexport function updateCellContentWidth(\n cellGroup: Group,\n distWidth: number,\n cellHeight: number,\n detaX: number,\n autoRowHeight: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n scene: Scenegraph\n): boolean {\n if (isValidNumber(cellGroup.contentWidth)) {\n detaX = distWidth - (cellGroup.contentWidth ?? cellGroup.attribute.width);\n }\n let leftIconWidth = 0;\n let leftIconHeight = 0;\n let rightIconWidth = 0;\n let rightIconHeight = 0;\n // let hasIcon = false;\n cellGroup.forEachChildren((iconMark: Icon) => {\n if (iconMark.role === 'icon-left') {\n leftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n } else if (iconMark.role === 'icon-right') {\n rightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n }\n });\n\n // 记录原始内容高度\n let oldTextHeight;\n const textMark = cellGroup.getChildByName('text');\n const cellContent = cellGroup.getChildByName('content') as CellContent;\n let contentHeight: number;\n if (textMark instanceof Text) {\n oldTextHeight = textMark.AABBBounds.height();\n textMark.setAttribute(\n 'maxLineWidth',\n distWidth -\n leftIconWidth -\n rightIconWidth -\n (padding[1] + padding[3]) -\n (textMark.attribute.dx ?? 0) -\n (scene.table.theme._contentOffset ?? 0)\n );\n // contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n } else if (textMark instanceof RichText) {\n oldTextHeight = textMark.AABBBounds.height();\n textMark.setAttribute('width', distWidth - leftIconWidth - rightIconWidth - (padding[1] + padding[3]));\n // contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n } else if (cellContent) {\n oldTextHeight = cellContent.AABBBounds.height();\n cellContent.updateWidth(distWidth - leftIconWidth - rightIconWidth - (padding[1] + padding[3]));\n // contentWidth = cellContent.AABBBounds.width();\n contentHeight = cellContent.AABBBounds.height();\n }\n\n const oldCellHeight = Math.round(Math.max(leftIconHeight, rightIconHeight, oldTextHeight) + padding[0] + padding[2]);\n\n // 更新x方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n // do nothing\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + detaX);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + detaX);\n } else if (child.name === 'content' || (child.name === 'text' && child.type !== 'richtext')) {\n const childTextAlign = child.attribute.textAlign ?? textAlign;\n if (childTextAlign === 'center') {\n child.setAttribute(\n 'x',\n padding[3] + leftIconWidth + (distWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth) / 2\n );\n } else if (childTextAlign === 'right') {\n child.setAttribute('x', padding[3] + distWidth - (padding[1] + padding[3]) - rightIconWidth);\n } else {\n // left: do nothing\n }\n } else if (child.name === 'mark') {\n child.setAttribute('x', cellGroup.attribute.width);\n }\n });\n\n // 如果autoRowHeight && 高度改变 更新y方向位置\n if (autoRowHeight) {\n let newHeight = Math.max(leftIconHeight, contentHeight, rightIconHeight); // + padding[0] + padding[2]\n\n if (isCellHeightUpdate(scene, cellGroup, Math.round(newHeight + padding[0] + padding[2]), oldCellHeight)) {\n // cellGroup.setAttribute('height', newHeight + padding[0] + padding[2]);\n return true;\n }\n\n newHeight = (cellGroup.contentHeight ?? cellHeight) - (padding[0] + padding[2]);\n\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n } else if (textBaseline === 'middle' || textBaseline === 'bottom') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', (cellHeight - padding[2] + padding[0] - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', cellHeight - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n }\n return false;\n}\n\n/**\n * @description: 更新单元格内容宽度\n */\nexport function updateCellContentHeight(\n cellGroup: Group,\n distHeight: number,\n detaY: number,\n autoRowHeight: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI\n) {\n const newHeight = distHeight - Math.floor(padding[0] + padding[2]);\n\n const textMark = cellGroup.getChildByName('text');\n\n if (textMark instanceof Text && !autoRowHeight) {\n textMark.setAttributes({\n heightLimit: table.options.customConfig?.limitContentHeight === false ? -1 : newHeight\n } as any);\n } else if (textMark instanceof RichText && !autoRowHeight) {\n textMark.setAttributes({\n height: newHeight\n });\n } else if (cellGroup.getChildByName('content')) {\n const cellContent = cellGroup.getChildByName('content') as CellContent;\n cellContent.updateHeight(newHeight);\n }\n\n // 更新y方向位置\n cellGroup.forEachChildren((child: any) => {\n child.setAttribute('dy', 0);\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n // do nothing\n } else if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n}\n\n/**\n * @description: 自适应行高模式下,判断当前单元格是否需要更新行高\n * @param {Scenegraph} scene\n * @param {Group} cellGroup\n * @param {number} newHeight\n * @param {number} oldHeight\n * @return {*}\n */\nfunction isCellHeightUpdate(scene: Scenegraph, cellGroup: Group, newHeight: number, oldHeight: number): boolean {\n const table = scene.table;\n const mergeInfo = getCellMergeInfo(table, cellGroup.col, cellGroup.row);\n\n // let rowHeight: number = 0;\n if (mergeInfo && mergeInfo.end.row - mergeInfo.start.row) {\n oldHeight = oldHeight / (mergeInfo.end.row - mergeInfo.start.row + 1);\n newHeight = newHeight / (mergeInfo.end.row - mergeInfo.start.row + 1);\n for (let rowIndex = mergeInfo.start.row; rowIndex <= mergeInfo.end.row; rowIndex++) {\n const rowHeight = table.getRowHeight(rowIndex);\n\n if (rowHeight === oldHeight && newHeight !== rowHeight) {\n // 当前行的自适应行高,是由本单元格撑起;如果当前单元格高度发生变化,则更新行高\n return true;\n } else if (newHeight > rowHeight) {\n // 如果当前单元格高度超过目前所在行的行高,则更新行高\n return true;\n }\n }\n } else {\n const rowHeight = table.getRowHeight(cellGroup.row);\n\n if (rowHeight === oldHeight && newHeight !== rowHeight) {\n // 当前行的自适应行高,是由本单元格撑起;如果当前单元格高度发生变化,则更新行高\n return true;\n } else if (newHeight > rowHeight) {\n // 如果当前单元格高度超过目前所在行的行高,则更新行高\n return true;\n }\n }\n\n return false;\n}\n\nexport function dealWithIconLayout(\n icons: ColumnIconOption[],\n cellGroup: Group,\n range: CellRange | undefined,\n table: BaseTableAPI\n) {\n const leftIcons: ColumnIconOption[] = [];\n const rightIcons: ColumnIconOption[] = [];\n const contentLeftIcons: ColumnIconOption[] = [];\n const contentRightIcons: ColumnIconOption[] = [];\n const inlineFrontIcons: ColumnIconOption[] = [];\n const inlineEndIcons: ColumnIconOption[] = [];\n const absoluteLeftIcons: ColumnIconOption[] = [];\n const absoluteRightIcons: ColumnIconOption[] = [];\n\n let leftIconWidth = 0;\n let leftIconHeight = 0;\n let rightIconWidth = 0;\n let rightIconHeight = 0;\n let absoluteLeftIconWidth = 0;\n let absoluteRightIconWidth = 0;\n\n // icon分类\n icons.forEach(icon => {\n switch (icon.positionType) {\n case IconPosition.left:\n leftIcons.push(icon);\n break;\n case IconPosition.right:\n rightIcons.push(icon);\n break;\n case IconPosition.contentLeft:\n contentLeftIcons.push(icon);\n break;\n case IconPosition.contentRight:\n contentRightIcons.push(icon);\n break;\n // case IconPosition.absoluteLeft:\n // absoluteLeftIcons.push(icon);\n // break;\n case IconPosition.absoluteRight:\n absoluteRightIcons.push(icon);\n break;\n case IconPosition.inlineFront:\n inlineFrontIcons.push(icon);\n break;\n case IconPosition.inlineEnd:\n inlineEndIcons.push(icon);\n break;\n }\n });\n\n // 添加非cell icon & absolute icon\n leftIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-left';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', leftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n leftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n cellGroup.appendChild(iconMark);\n });\n\n rightIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-right';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', rightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n rightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n cellGroup.appendChild(iconMark);\n });\n\n absoluteLeftIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-absolute-left';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', absoluteLeftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n absoluteLeftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n cellGroup.appendChild(iconMark);\n });\n\n absoluteRightIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-absolute-right';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', absoluteRightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n absoluteRightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n cellGroup.appendChild(iconMark);\n });\n\n return {\n leftIcons,\n rightIcons,\n contentLeftIcons,\n contentRightIcons,\n inlineFrontIcons,\n inlineEndIcons,\n absoluteLeftIcons,\n absoluteRightIcons,\n leftIconWidth,\n leftIconHeight,\n rightIconWidth,\n rightIconHeight,\n absoluteLeftIconWidth,\n absoluteRightIconWidth\n };\n}\n\nfunction onBeforeAttributeUpdate(val: Record, attribute: any) {\n if (val.hasOwnProperty('hoverIconId')) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.skipMergeUpdate) {\n return;\n }\n\n const cellGroup = getTargetCell(graphic) as Group;\n if (!cellGroup || !cellGroup.stage) {\n return;\n }\n const table = ((cellGroup as any).stage as any).table as BaseTableAPI;\n graphic.skipAttributeUpdate = true;\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = cellGroup;\n if (\n isValid(mergeStartCol) &&\n isValid(mergeEndCol) &&\n isValid(mergeStartRow) &&\n isValid(mergeEndRow) &&\n (mergeStartCol !== mergeEndCol || mergeStartRow !== mergeEndRow)\n ) {\n for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n if (col === cellGroup.col && row === cellGroup.row) {\n // update icon state\n if (val.hoverIconId !== graphic.attribute.hoverIconId) {\n const icon = graphic._frameCache.icons.get(val.hoverIconId);\n graphic.updateHoverIconState(icon);\n }\n continue;\n }\n // const cell = table.scenegraph.getCell(col, row);\n const cell = table.scenegraph.highPerformanceGetCell(col, row);\n if (cell.role === 'cell') {\n const target = cell.getChildByName(graphic.name, true);\n if (!target || target.skipAttributeUpdate) {\n continue;\n }\n if (val.hoverIconId !== target.attribute.hoverIconId) {\n target.setAttribute('hoverIconId', val.hoverIconId);\n cell.addUpdateBoundTag();\n }\n }\n }\n }\n graphic.skipAttributeUpdate = undefined;\n }\n }\n}\n","/* eslint-disable no-undef */\nimport type { Cursor, IImage, Image, IThemeSpec } from './../../../vrender';\nimport { createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { Group } from '../../graphic/group';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nimport { calcStartPosition } from '../../utils/cell-pos';\nimport type { Scenegraph } from '../../scenegraph';\nimport { getProp, getFunctionalProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport { getQuadProps } from '../../utils/padding';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { CellRange } from '../../../ts-types';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nexport function createImageCellGroup(\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n keepAspectRatio: boolean,\n imageAutoSizing: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n // const margin = getProp('padding', headerStyle, col, row, table);\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n let cellGroup: Group;\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n\n let cellIcons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n cellIcons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(cellIcons) && cellIcons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n cellIcons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n (cellGroup as any)._cellLeftIconWidth = cellLeftIconWidth;\n (cellGroup as any)._cellRightIconWidth = cellRightIconWidth;\n }\n\n // image\n const value = table.getCellValue(col, row);\n const image: IImage = createImage({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3] - iconWidth,\n height: height - padding[0] - padding[2],\n image: value, //?? (regedIcons.damage_pic as any).svg,\n cursor: 'pointer' as Cursor\n });\n image.name = 'image';\n image.keepAspectRatio = keepAspectRatio;\n image.textAlign = textAlign;\n image.textBaseline = textBaseline;\n if (keepAspectRatio || imageAutoSizing) {\n if (\n image.resources &&\n image.resources.has(image.attribute.image) &&\n image.resources.get(image.attribute.image).state === 'success'\n ) {\n setTimeout(() => {\n updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing,\n keepAspectRatio,\n padding,\n textAlign,\n textBaseline,\n image,\n cellGroup,\n table\n );\n }, 0);\n } else {\n image.successCallback = () => {\n updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing,\n keepAspectRatio,\n padding,\n textAlign,\n textBaseline,\n image,\n cellGroup,\n table\n );\n table.scenegraph.updateNextFrame();\n };\n }\n } else {\n if (\n image.resources &&\n image.resources.has(image.attribute.image) &&\n image.resources.get(image.attribute.image).state === 'success'\n ) {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, table);\n } else {\n image.successCallback = () => {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, table);\n };\n }\n }\n (image as any).failCallback = () => {\n const regedIcons = icons.get();\n // image.setAttribute('image', (regedIcons.damage_pic as any).svg);\n (image as any).image = (regedIcons.damage_pic as any).svg;\n };\n cellGroup.appendChild(image);\n\n return cellGroup;\n}\n\nexport type CreateImageCellGroup = typeof createImageCellGroup;\n\n/**\n * 调整某个图片资源所在行列的行高列宽 之后重绘\n * @param col\n * @param row\n * @param img\n * @param table\n * @returns 行高或者列宽是否进行了调整\n */\nexport function _adjustWidthHeight(\n col: number,\n row: number,\n // img: HTMLImageElement,\n width: number,\n height: number,\n scene: Scenegraph,\n padding: [number, number, number, number],\n cellGroup: Group\n): boolean {\n // const { width, height } = img as any;\n // const currentContext = context.toCurrentContext();\n\n let needInvalidate = false;\n let targetWidth: number = null;\n let targetHeight: number = null;\n // const cellGroup = scene.getCell(col, row, true);\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, scene.table);\n\n if (cellWidth < width + padding[1] + padding[3]) {\n targetWidth = width + padding[1] + padding[3];\n needInvalidate = true;\n }\n if (cellHeight < height + padding[2] + padding[0]) {\n targetHeight = height + padding[2] + padding[0];\n needInvalidate = true;\n }\n if (needInvalidate) {\n if (typeof targetWidth === 'number') {\n // table.setColWidth(col, targetWidth, true);\n if (isMerge) {\n for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {\n scene.setColWidth(col, targetWidth / (cellGroup.mergeEndCol - cellGroup.mergeStartCol + 1));\n }\n } else {\n scene.setColWidth(col, targetWidth);\n }\n }\n if (typeof targetHeight === 'number') {\n // table.setRowHeight(row, targetHeight, true);\n if (isMerge) {\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n scene.setRowHeight(row, targetHeight / (cellGroup.mergeEndRow - cellGroup.mergeStartRow + 1));\n }\n } else {\n scene.setRowHeight(row, targetHeight);\n }\n }\n // table.updateCanvasScroll();\n // // table.throttleInvalidate(); // 这里会造成每一张图加载后就重绘 造成多次绘制问题!节流绘制\n // table.invalidate(); //节流绘制改回及时绘制 节流绘制在图片加载过程中的效果不太好\n\n scene.component.updateScrollBar();\n // scene.updateNextFrame();\n return true;\n }\n return false;\n}\n\nexport function updateImageCellContentWhileResize(\n cellGroup: Group,\n col: number,\n row: number,\n deltaX: number,\n deltaY: number,\n table: BaseTableAPI\n) {\n const image = cellGroup.getChildByName('image') as Image;\n if (!image) {\n return;\n }\n const originImage =\n (typeof image.attribute.image !== 'string' && image.attribute.image) ||\n image.resources?.get(image.attribute.image as string).data;\n\n if (!originImage) {\n return;\n }\n\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const textAlign = getProp('textAlign', headerStyle, col, row, table) ?? 'left';\n const textBaseline = getProp('textBaseline', headerStyle, col, row, table) ?? 'middle';\n let padding: [number, number, number, number];\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else {\n padding = getQuadProps(getProp('padding', headerStyle, col, row, table)) ?? [0, 0, 0, 0];\n }\n\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n const colStart = cellGroup.mergeStartCol ?? cellGroup.col;\n const rowStart = cellGroup.mergeStartRow ?? cellGroup.row;\n const colEnd = cellGroup.mergeEndCol ?? cellGroup.col;\n const rowEnd = cellGroup.mergeEndCol ?? cellGroup.row;\n\n const leftIconWidth = (cellGroup as any)._cellLeftIconWidth ?? 0;\n const rightIconWidth = (cellGroup as any)._cellRightIconWidth ?? 0;\n\n if ((image as any).keepAspectRatio) {\n const { width: imageWidth, height: imageHeight } = calcKeepAspectRatioSize(\n originImage.width || (originImage as any).videoWidth,\n originImage.height || (originImage as any).videoHeight,\n // cellGroup.attribute.width - (padding[1] + padding[3]),\n // cellGroup.attribute.height - (padding[0] + padding[2])\n cellWidth - (padding[1] + padding[3]),\n cellHeight - (padding[0] + padding[2])\n );\n\n const pos = calcStartPosition(\n 0,\n 0,\n // cellGroup.attribute.width,\n // cellGroup.attribute.height,\n cellWidth,\n cellHeight,\n imageWidth,\n imageHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const image = cellGroup.getChildByName('image') as Image;\n image?.setAttributes({\n x: pos.x,\n y: pos.y,\n width: imageWidth,\n height: imageHeight\n });\n }\n }\n } else {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const image = cellGroup.getChildByName('image') as Image;\n image?.setAttributes({\n x: leftIconWidth + padding[3],\n y: padding[0],\n // width: cellGroup.attribute.width - padding[1] - padding[3],\n // height: cellGroup.attribute.height - padding[0] - padding[2]\n width: cellWidth - padding[1] - padding[3] - rightIconWidth - leftIconWidth,\n height: cellHeight - padding[0] - padding[2]\n });\n }\n }\n }\n\n // update video play icon\n const playIcon = cellGroup.getChildByName('play-icon');\n if (playIcon) {\n const left = 0;\n const top = 0;\n // const width = cellGroup.attribute.width;\n // const height = cellGroup.attribute.height;\n const { width, height } = getCellRange(cellGroup, table);\n const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n const anchorX =\n left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n const anchorY =\n top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const playIcon = cellGroup.getChildByName('play-icon') as Image;\n playIcon.setAttributes({\n x: anchorX - iconSize / 2,\n y: anchorY - iconSize / 2,\n width: iconSize,\n height: iconSize\n });\n }\n }\n }\n\n // 更新x方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n // do nothing\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + deltaX);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + deltaX);\n }\n });\n\n // 更新y方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.type !== 'rect' && (!child.role || !child.role.startsWith('icon'))) {\n // do nothing\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (cellHeight - padding[0] - padding[2] - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + cellHeight - padding[0] - padding[2] - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n}\n\nexport function getCellRange(cellGroup: Group, table: BaseTableAPI) {\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n return {\n width: table.getColsWidth(cellGroup.mergeStartCol, cellGroup.mergeEndCol),\n height: table.getRowsHeight(cellGroup.mergeStartRow, cellGroup.mergeEndRow),\n isMerge: true\n };\n }\n return {\n width: cellGroup.attribute.width,\n height: cellGroup.attribute.height,\n isMerge: false\n };\n}\n\nexport function updateImageDxDy(\n startCol: number,\n endCol: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI\n) {\n for (let col = startCol; col <= endCol; col++) {\n for (let row = startRow; row <= endRow; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n if (cellGroup) {\n const image = cellGroup.getChildByName('image');\n if (image) {\n image.setAttributes({\n dx: -table.getColsWidth(cellGroup.mergeStartCol, col - 1),\n dy: -table.getRowsHeight(cellGroup.mergeStartRow, row - 1)\n });\n }\n const playIcon = cellGroup.getChildByName('play-icon');\n if (playIcon) {\n playIcon.setAttributes({\n dx: -table.getColsWidth(cellGroup.mergeStartCol, col - 1),\n dy: -table.getRowsHeight(cellGroup.mergeStartRow, row - 1)\n });\n }\n }\n }\n }\n}\n\nfunction updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing: boolean,\n keepAspectRatio: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n image: IImage,\n cellGroup: Group,\n table: BaseTableAPI\n) {\n const originImage = image.resources.get(image.attribute.image as string).data;\n const { col, row } = cellGroup;\n\n if (imageAutoSizing && !isDamagePic(image)) {\n _adjustWidthHeight(\n col,\n row,\n (originImage as HTMLImageElement).width,\n (originImage as HTMLImageElement).height,\n table.scenegraph,\n padding,\n cellGroup\n );\n }\n if (keepAspectRatio || isDamagePic(image)) {\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n\n const { width: imageWidth, height: imageHeight } = calcKeepAspectRatioSize(\n originImage.width,\n originImage.height,\n // cellGroup.attribute.width - padding[1] - padding[3],\n // cellGroup.attribute.height - padding[0] - padding[2]\n cellWidth - padding[1] - padding[3],\n cellHeight - padding[0] - padding[2]\n );\n\n // const left = 0;\n // const top = 0;\n const pos = calcStartPosition(\n 0,\n 0,\n // cellGroup.attribute.width,\n // cellGroup.attribute.height,\n cellWidth,\n cellHeight,\n imageWidth,\n imageHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n image.setAttributes({\n x: pos.x,\n y: pos.y,\n width: imageWidth,\n height: imageHeight\n // dx: isMerge ? -table.getColsWidth(cellGroup.mergeStartCol, col - 1) : 0,\n // dy: isMerge ? -table.getRowsHeight(cellGroup.mergeStartRow, row - 1) : 0\n });\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n }\n}\n\nfunction isDamagePic(image: IImage) {\n const regedIcons = icons.get();\n return image.attribute.image === (regedIcons.damage_pic as any).svg;\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealPromiseData(dataPromise: Promise, tabel: BaseTableAPI, callback: () => void) {\n dataPromise\n .then(() => {\n callback();\n tabel.scenegraph.updateNextFrame();\n })\n .catch((err: Error) => {\n console.error(err);\n });\n}\n","import type { Group, Rect } from './../vrender';\nimport { isValid } from '@visactor/vutils';\n\nexport function onBeforeAttributeUpdateForInvertHighlight(val: Record, attribute: any) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.shadowRoot && graphic.shadowRoot.childrenCount && (isValid(val.width) || isValid(val.height))) {\n const shadowRect = (graphic.shadowRoot as Group).findChildrenByName('shadow-rect')[0] as Rect;\n if (shadowRect) {\n shadowRect.setAttributes({\n width: val.width ?? shadowRect.attribute.width,\n height: val.height ?? shadowRect.attribute.height\n });\n }\n }\n}\n","import type { Cursor, IGraphic, IThemeSpec, Rect, Group as VGroup } from './../../vrender';\nimport type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport { regUrl } from '../../tools/global';\nimport type {\n CellRange,\n ChartColumnDefine,\n CheckboxColumnDefine,\n ColumnDefine,\n ColumnTypeOption,\n ImageColumnDefine,\n ProgressbarColumnDefine,\n IRowSeriesNumber,\n TextColumnDefine,\n RadioColumnDefine,\n ListTableConstructorOptions\n} from '../../ts-types';\nimport { dealWithCustom } from '../component/custom';\nimport type { Group } from '../graphic/group';\nimport { getProp } from '../utils/get-prop';\nimport type { CreateChartCellGroup } from './cell-type/chart-cell';\nimport type { CreateImageCellGroup } from './cell-type/image-cell';\nimport type { CreateProgressBarCell } from './cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from './cell-type/spark-line-cell';\nimport type { CreateTextCellGroup } from './cell-type/text-cell';\nimport type { CreateVideoCellGroup } from './cell-type/video-cell';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { getCellCornerRadius, getStyleTheme } from '../../core/tableHelper';\nimport { isPromise } from '../../tools/helper';\nimport { dealPromiseData } from '../utils/deal-promise-data';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport type { CreateCheckboxCellGroup } from './cell-type/checkbox-cell';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentHeight, updateCellContentWidth } from '../utils/text-icon-layout';\nimport { isArray, isNumber, isValid } from '@visactor/vutils';\nimport { breakString } from '../utils/break-string';\nimport type { CreateRadioCellGroup } from './cell-type/radio-cell';\nimport { onBeforeAttributeUpdateForInvertHighlight } from '../../plugins/invert-highlight';\nimport { getCellBorderStrokeWidth } from '../utils/cell-border-stroke-width';\n\nexport function createCell(\n type: ColumnTypeOption,\n value: string,\n define: ColumnDefine,\n table: BaseTableAPI,\n col: number,\n row: number,\n colWidth: number,\n cellWidth: number,\n cellHeight: number,\n columnGroup: Group,\n y: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n customResult?: {\n elementsGroup?: VGroup;\n renderDefault: boolean;\n }\n): Group {\n let isAsync = false;\n let cellGroup: Group;\n if (isPromise(value)) {\n if (table.scenegraph.highPerformanceGetCell(col, row).role !== 'cell') {\n // avoid nouse async create cell\n return cellGroup;\n }\n value = table.getCellValue(col, row);\n isAsync = true;\n }\n // let bgColorFunc: Function;\n // // 判断是否有mapping 遍历dataset中mappingRules\n // if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n // (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n // (mappingRule: MappingRule, i: number) => {\n // if (\n // mappingRule.bgColor &&\n // (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n // mappingRule.bgColor.indicatorKey\n // ) {\n // bgColorFunc = mappingRule.bgColor.mapping;\n // }\n // }\n // );\n // }\n\n // customMerge&customLayout cell as text cell\n if (type === 'text' || type === 'link' || customResult) {\n if (type === 'link') {\n //如果是超链接 颜色按照linkColor绘制 TODO:放到方法_getCellStyle中\n // const columnDefine = table.getHeaderDefine(col, row);\n const cellValue = value;\n const headerStyle = table._getCellStyle(col, row);\n\n if (\n type === 'link' &&\n (('templateLink' in define && define.templateLink) ||\n !('linkDetect' in define && define.linkDetect) ||\n regUrl.test(cellValue))\n ) {\n if (cellTheme) {\n cellTheme.text.fill = getProp('linkColor', headerStyle, col, row, table);\n (cellTheme as any).group.cursor = 'pointer';\n } else {\n cellTheme = {\n text: {\n fill: getProp('linkColor', headerStyle, col, row, table)\n },\n group: {\n cursor: 'pointer' as Cursor\n }\n };\n }\n }\n }\n // 判断是否有mapping 遍历dataset中mappingRules 但这里还需要根据fieldName来判断\n // if (bgColorFunc) {\n // const cellValue = table.getCellOriginValue(col, row);\n // const bgColor = bgColorFunc(table, cellValue);\n // if (bgColor) {\n // if (cellTheme) {\n // cellTheme.group.fill = bgColor;\n // } else {\n // cellTheme = {\n // group: {\n // fill: bgColor\n // }\n // };\n // }\n // }\n // }\n\n let customElementsGroup;\n let renderDefault = true;\n if (customResult) {\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n } else {\n let customRender;\n let customLayout;\n const cellLocation = table.getCellLocation(col, row);\n if (cellLocation !== 'body') {\n customRender = define?.headerCustomRender;\n customLayout = define?.headerCustomLayout;\n } else {\n customRender = define?.customRender || table.customRender;\n customLayout = define?.customLayout;\n }\n if (customLayout || customRender) {\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n cellWidth,\n cellHeight,\n false,\n table.isAutoRowHeight(row),\n padding,\n range,\n table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n }\n }\n\n const createTextCellGroup = Factory.getFunction('createTextCellGroup') as CreateTextCellGroup;\n cellGroup = createTextCellGroup(\n table,\n value,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n customElementsGroup,\n renderDefault,\n cellTheme,\n range,\n isAsync\n );\n\n const axisConfig = table.internalProps.layoutMap.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n table\n );\n cellGroup.clear();\n cellGroup.appendChild(axis.component);\n axis.overlap();\n } else if (table.internalProps.layoutMap.isEmpty(col, row)) {\n cellGroup.setAttributes({\n fill: false,\n stroke: false\n });\n cellGroup.clear();\n } else if (table.internalProps.layoutMap.isAxisCell(col, row)) {\n cellGroup.clear();\n }\n } else if (type === 'image') {\n // 创建图片单元格\n const createImageCellGroup = Factory.getFunction('createImageCellGroup') as CreateImageCellGroup;\n cellGroup = createImageCellGroup(\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n (define as ImageColumnDefine).keepAspectRatio,\n (define as ImageColumnDefine).imageAutoSizing,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n range,\n isAsync\n );\n } else if (type === 'video') {\n // 创建视频单元格\n const createVideoCellGroup = Factory.getFunction('createVideoCellGroup') as CreateVideoCellGroup;\n cellGroup = createVideoCellGroup(\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n (define as ImageColumnDefine).keepAspectRatio,\n (define as ImageColumnDefine).imageAutoSizing,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n range,\n isAsync\n );\n } else if (type === 'chart') {\n const chartInstance = table.internalProps.layoutMap.getChartInstance(col, row);\n const createChartCellGroup = Factory.getFunction('createChartCellGroup') as CreateChartCellGroup;\n cellGroup = createChartCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n padding,\n value,\n (define as ChartColumnDefine).chartModule,\n table.internalProps.layoutMap.getChartSpec(col, row),\n chartInstance,\n table.internalProps.layoutMap.getChartDataId(col, row) ?? 'data',\n table,\n cellTheme,\n table.internalProps.layoutMap.isShareChartSpec(col, row),\n isAsync,\n table.internalProps.layoutMap.isNoChartDataRenderNothing(col, row)\n );\n } else if (type === 'progressbar') {\n const style = table._getCellStyle(col, row) as ProgressBarStyle;\n const dataValue = table.getCellOriginValue(col, row);\n // 创建基础文字单元格\n const createTextCellGroup = Factory.getFunction('createTextCellGroup') as CreateTextCellGroup;\n cellGroup = createTextCellGroup(\n table,\n value,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n false,\n null,\n true,\n cellTheme,\n range,\n isAsync\n );\n\n // 创建bar group\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const progressBarGroup = createProgressBarCell(\n define as ProgressbarColumnDefine,\n style,\n colWidth,\n value,\n dataValue,\n col,\n row,\n padding,\n table,\n range\n );\n // 进度图插入到文字前,绘制在文字下\n if (cellGroup.firstChild) {\n cellGroup.insertBefore(progressBarGroup, cellGroup.firstChild);\n } else {\n cellGroup.appendChild(progressBarGroup);\n }\n } else if (type === 'sparkline') {\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n cellGroup = createSparkLineCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n padding,\n table,\n cellTheme,\n isAsync\n );\n } else if (type === 'checkbox') {\n const createCheckboxCellGroup = Factory.getFunction('createCheckboxCellGroup') as CreateCheckboxCellGroup;\n cellGroup = createCheckboxCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n define as CheckboxColumnDefine,\n range,\n isAsync\n );\n } else if (type === 'radio') {\n const createRadioCellGroup = Factory.getFunction('createRadioCellGroup') as CreateRadioCellGroup;\n cellGroup = createRadioCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n table,\n cellTheme,\n define as RadioColumnDefine,\n range\n );\n }\n\n cellGroup.onBeforeAttributeUpdate = onBeforeAttributeUpdateForInvertHighlight as any;\n return cellGroup;\n}\n\nexport function updateCell(\n col: number,\n row: number,\n table: BaseTableAPI,\n addNew?: boolean,\n isShadow?: boolean,\n forceFastUpdate?: boolean\n) {\n // const oldCellGroup = table.scenegraph.getCell(col, row, true);\n const oldCellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n const cellLocation = table.getCellLocation(col, row);\n let value = table.getCellValue(col, row);\n\n let isMerge;\n let range;\n let customStyle;\n let customResult;\n let isCustomMerge = false;\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout,\n customRender\n } = customMerge;\n range = customMergeRange;\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n value = customMergeText;\n customStyle = customMergeStyle;\n // if (customStyle) {\n // cellTheme = getStyleTheme(customStyle, table, range.start.col, range.start.row, getProp).theme;\n // cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n // }\n\n if (customLayout || customRender) {\n customResult = dealWithCustom(\n customLayout,\n customRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n\n isCustomMerge = true;\n }\n }\n\n // const define = cellLocation !== 'body' ? table.getHeaderDefine(col, row) : table.getBodyColumnDefine(col, row);\n let colForDefine = col;\n let rowForDefine = row;\n if (range) {\n colForDefine = range.start.col;\n rowForDefine = range.start.row;\n }\n const define: TextColumnDefine = (\n cellLocation !== 'body'\n ? table.getHeaderDefine(colForDefine, rowForDefine)\n : table.getBodyColumnDefine(colForDefine, rowForDefine)\n ) as any;\n\n let mayHaveIcon =\n cellLocation !== 'body'\n ? true\n : (define as IRowSeriesNumber)?.dragOrder || !!define?.icon || !!(define as ColumnDefine)?.tree;\n\n if (\n !range &&\n (table.internalProps.enableTreeNodeMerge || cellLocation !== 'body' || (define as TextColumnDefine)?.mergeCell)\n ) {\n // 只有表头或者column配置合并单元格后再进行信息获取\n range = table.getCellRange(col, row);\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n }\n let isVtableMerge = false;\n if (table.internalProps.enableTreeNodeMerge && isMerge) {\n const rawRecord = table.getCellRawRecord(range.start.col, range.start.row);\n const { vtableMergeName, vtableMerge } = rawRecord ?? {};\n\n isVtableMerge = vtableMerge;\n if (vtableMerge) {\n mayHaveIcon = true;\n if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customResult = dealWithCustom(\n (table.options as ListTableConstructorOptions).groupTitleCustomLayout,\n undefined,\n range.start.col,\n range.start.row,\n table.getColsWidth(range.start.col, range.end.col),\n table.getRowsHeight(range.start.row, range.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n }\n if (vtableMergeName) {\n value = vtableMergeName;\n }\n }\n\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n isMerge ? range.start.col : col,\n isMerge ? range.start.row : row,\n getProp\n ).theme;\n\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n\n // fast method for text\n if (\n !addNew &&\n !isMerge &&\n !(define?.customLayout || define?.customRender || define?.headerCustomLayout || define?.headerCustomRender) &&\n (forceFastUpdate || canUseFastUpdate(col, row, oldCellGroup, autoWrapText, mayHaveIcon, table))\n ) {\n // update group\n const cellWidth = table.getColWidth(col);\n const cellHeight = table.getRowHeight(row);\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n oldCellGroup.setAttributes({\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n cornerRadius: cellTheme?.group?.cornerRadius ?? 0,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n y: table.scenegraph.getCellGroupY(row)\n } as any);\n\n oldCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n // update text\n const textMark = oldCellGroup.getChildByName('text');\n if (forceFastUpdate && textMark) {\n const attribute = {\n textBaseline: 'top'\n };\n textMark.setAttributes(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n } else if (textMark) {\n const text = table.getCellValue(col, row);\n const { text: textArr, moreThanMaxCharacters } = breakString(text, table);\n\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const lineClamp = cellStyle.lineClamp;\n const padding = getQuadProps(getProp('padding', cellStyle, col, row, table)) ?? [0, 0, 0, 0];\n\n const textAlign = cellTheme.text.textAlign;\n let x = 0;\n if (textAlign === 'center') {\n x = padding[3] + (cellWidth - (padding[1] + padding[3])) / 2;\n } else if (textAlign === 'right') {\n x = padding[3] + cellWidth - (padding[1] + padding[3]);\n } else {\n x = padding[3];\n }\n\n const attribute = {\n text: textArr.length === 1 && !autoWrapText ? textArr[0] : textArr, // 单行(no-autoWrapText)为字符串,多行(autoWrapText)为字符串数组\n moreThanMaxCharacters,\n maxLineWidth: cellWidth - (padding[1] + padding[3] + hierarchyOffset),\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: textAlign === 'left' ? hierarchyOffset : 0,\n x\n };\n // const oldText = textMark.attribute.text;\n textMark.setAttributes(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n if (textMark.attribute.text) {\n const textBaseline = cellTheme.text.textBaseline;\n const height = cellHeight - (padding[0] + padding[2]);\n let y = 0;\n if (textBaseline === 'middle') {\n y = padding[0] + (height - textMark.AABBBounds.height()) / 2;\n } else if (textBaseline === 'bottom') {\n y = padding[0] + height - textMark.AABBBounds.height();\n } else {\n y = padding[0];\n }\n textMark.setAttributes({\n y\n });\n }\n }\n return oldCellGroup;\n }\n\n if (!addNew && oldCellGroup.role === 'empty') {\n return undefined;\n }\n\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : table.getBodyColumnType(col, row) ?? 'text';\n\n const padding = cellTheme._vtable.padding;\n const textAlign = cellTheme.text.textAlign;\n const textBaseline = cellTheme.text.textBaseline;\n\n let newCellGroup;\n // let bgColorFunc: Function;\n // 判断是否有mapping 遍历dataset中mappingRules\n // if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n // (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n // (mappingRule: MappingRule, i: number) => {\n // if (\n // mappingRule.bgColor &&\n // (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n // mappingRule.bgColor.indicatorKey\n // ) {\n // bgColorFunc = mappingRule.bgColor.mapping;\n // }\n // }\n // );\n // }\n\n let cellWidth;\n let cellHeight;\n if (range) {\n cellWidth = table.getColsWidth(range.start.col, range.end.col);\n cellHeight = table.getRowsHeight(range.start.row, range.end.row);\n } else {\n cellWidth = table.getColWidth(col);\n cellHeight = table.getRowHeight(row);\n }\n\n // deal with promise data\n if (isPromise(value)) {\n // clear cell content sync\n oldCellGroup.removeAllChild();\n\n // update cell content async\n dealPromiseData(\n value,\n table,\n callUpdateCellContentForPromiseValue.bind(null, {\n type,\n value,\n define,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n range,\n customResult,\n customStyle\n })\n );\n } else {\n newCellGroup = updateCellContent(\n type,\n value,\n define as ColumnDefine,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n cellTheme,\n range,\n customResult\n );\n }\n\n if (isMerge) {\n // const rangeHeight = table.getRowHeight(row);\n // const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = newCellGroup.attribute;\n const { height: contentHeight } = newCellGroup.attribute;\n newCellGroup.contentWidth = contentWidth;\n newCellGroup.contentHeight = contentHeight;\n\n if (isShadow) {\n dealWithMergeCellSizeForShadow(\n range,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n table,\n newCellGroup\n );\n } else {\n dealWithMergeCellSize(range, cellWidth, cellHeight, padding, textAlign, textBaseline, table);\n }\n }\n\n return newCellGroup;\n}\n\nfunction updateCellContent(\n type: ColumnTypeOption,\n value: string,\n define: ColumnDefine,\n table: BaseTableAPI,\n col: number,\n row: number,\n // bgColorFunc: Function,\n cellWidth: number,\n cellHeight: number,\n oldCellGroup: Group,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n addNew: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n customResult?: {\n elementsGroup?: VGroup;\n renderDefault: boolean;\n }\n) {\n if (isPromise(value)) {\n value = table.getCellValue(col, row);\n }\n //解决报错 getCellByCache递归调用 死循环问题\n if (!addNew && (oldCellGroup.row !== row || oldCellGroup.col !== col)) {\n return null;\n }\n if (!addNew && oldCellGroup.parent) {\n // clear react container\n if (table.reactCustomLayout) {\n const reactGroup = oldCellGroup.getChildByName('custom-container');\n if (reactGroup) {\n const { col, row } = reactGroup;\n if (isNumber(col) && isNumber(row)) {\n table.reactCustomLayout.removeCustomCell(col, row);\n }\n }\n }\n }\n const newCellGroup = createCell(\n type,\n value,\n define,\n table,\n col,\n row,\n table.getColWidth(col),\n cellWidth,\n cellHeight,\n // oldCellGroup.parent,\n addNew ? table.scenegraph.getColGroup(col) : oldCellGroup.parent,\n // oldCellGroup.attribute.y,\n addNew ? 0 : table.scenegraph.getCellGroupY(row), // y\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n if (!addNew && oldCellGroup.parent) {\n // update cell\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n // update cache\n if (table.scenegraph?.proxy.cellCache.get(col)) {\n table.scenegraph?.proxy.cellCache.set(col, newCellGroup);\n }\n }\n return newCellGroup;\n}\n\nfunction canUseFastUpdate(\n col: number,\n row: number,\n oldCellGroup: Group,\n autoWrapText: boolean,\n mayHaveIcon: boolean,\n table: BaseTableAPI\n) {\n // return false;\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n const cellType = table.getBodyColumnType(col, row);\n const autoRowHeight = table.isAutoRowHeight(row);\n const value = table.getCellValue(col, row);\n\n if (\n !table.isHeader(col, row) &&\n oldCellGroup.role === 'cell' &&\n cellType === 'text' &&\n !autoWrapText &&\n !autoRowHeight &&\n !mayHaveIcon &&\n oldCellGroup.firstChild?.type === 'text' && // judgement for none text\n !isPromise(value)\n ) {\n return true;\n }\n return false;\n}\nfunction callUpdateCellContentForPromiseValue(updateCellArgs: any) {\n const {\n type,\n value,\n define,\n table,\n col,\n row,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n range,\n customResult,\n customStyle\n } = updateCellArgs;\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n updateCellContent(\n type,\n value,\n define,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n cellTheme,\n range,\n customResult\n );\n}\nexport function dealWithMergeCellSize(\n range: CellRange,\n cellWidth: number,\n cellHeight: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI\n) {\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n // const cellGroup = table.scenegraph.getCell(col, row, true);\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n\n if (cellGroup.role !== 'cell') {\n continue;\n }\n\n if (range.start.row !== range.end.row && cellGroup.contentHeight !== cellHeight) {\n updateCellContentHeight(\n cellGroup,\n cellHeight,\n cellHeight,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table\n // 'middle'\n );\n }\n if (range.start.col !== range.end.col && cellGroup.contentWidth !== cellWidth) {\n updateCellContentWidth(\n cellGroup,\n cellWidth,\n cellHeight,\n 0,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n }\n\n cellGroup.contentWidth = cellWidth;\n cellGroup.contentHeight = cellHeight;\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n }\n }\n}\n\nexport function dealWithMergeCellSizeForShadow(\n range: CellRange,\n cellWidth: number,\n cellHeight: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellGroup: Group\n) {\n const { col, row } = cellGroup;\n if (range.start.row !== range.end.row && cellGroup.contentHeight !== cellHeight) {\n updateCellContentHeight(\n cellGroup,\n cellHeight,\n cellHeight,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table\n // 'middle'\n );\n }\n if (range.start.col !== range.end.col && cellGroup.contentWidth !== cellWidth) {\n updateCellContentWidth(\n cellGroup,\n cellWidth,\n cellHeight,\n 0,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n }\n\n cellGroup.contentWidth = cellWidth;\n cellGroup.contentHeight = cellHeight;\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n}\n\nexport function resizeCellGroup(\n cellGroup: Group,\n rangeWidth: number,\n rangeHeight: number,\n range: CellRange,\n table: BaseTableAPI\n) {\n const { col, row } = cellGroup;\n const dx = -table.getColsWidth(range.start.col, col - 1);\n let dy = 0;\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n // temply fix for fs merge position; bugserverId: 673af513801d3000b3cd9e8f\n for (let i = range.start.row; i <= row - 1; i++) {\n dy -= table.getRowHeight(i);\n }\n } else {\n dy = -table.getRowsHeight(range.start.row, row - 1);\n }\n\n cellGroup.forEachChildren((child: IGraphic) => {\n // 利用_dx hack解决掉 合并单元格的范围内的格子依次执行该方法 如果挨个调用updateCell的话 执行多次后dx累计问题\n if (typeof child._dx === 'number') {\n child.skipMergeUpdate = true;\n child.setAttributes({\n dx: (child._dx ?? 0) + dx\n });\n child.skipMergeUpdate = false;\n } else {\n child.skipMergeUpdate = true;\n child._dx = child.attribute.dx ?? 0;\n child.setAttributes({\n dx: (child.attribute.dx ?? 0) + dx\n });\n child.skipMergeUpdate = false;\n }\n\n if (typeof child._dy === 'number') {\n child.skipMergeUpdate = true;\n child.setAttributes({\n dy: (child._dy ?? 0) + dy\n });\n child.skipMergeUpdate = false;\n } else {\n child._dy = child.attribute.dy ?? 0;\n child.skipMergeUpdate = true;\n child.setAttributes({\n dy: (child.attribute.dy ?? 0) + dy\n });\n child.skipMergeUpdate = false;\n }\n });\n\n const lineWidth = (cellGroup.attribute as any).strokeArrayWidth ?? cellGroup.attribute.lineWidth;\n const isLineWidthArray = isArray(lineWidth);\n const newLineWidth = [0, 0, 0, 0];\n\n if (col === range.start.col) {\n newLineWidth[3] = isLineWidthArray ? lineWidth[3] : lineWidth;\n }\n if (row === range.start.row) {\n newLineWidth[0] = isLineWidthArray ? lineWidth[0] : lineWidth;\n }\n if (col === range.end.col) {\n newLineWidth[1] = isLineWidthArray ? lineWidth[1] : lineWidth;\n }\n if (row === range.end.row) {\n newLineWidth[2] = isLineWidthArray ? lineWidth[2] : lineWidth;\n }\n\n const widthChange = rangeWidth !== cellGroup.attribute.width;\n const heightChange = rangeHeight !== cellGroup.attribute.height;\n\n (cellGroup as any).skipMergeUpdate = true;\n cellGroup.setAttributes({\n width: rangeWidth,\n height: rangeHeight,\n strokeArrayWidth: newLineWidth\n } as any);\n (cellGroup as any).skipMergeUpdate = false;\n\n cellGroup.mergeStartCol = range.start.col;\n cellGroup.mergeStartRow = range.start.row;\n cellGroup.mergeEndCol = range.end.col;\n cellGroup.mergeEndRow = range.end.row;\n\n return {\n widthChange,\n heightChange\n };\n}\n\nexport function getCustomCellMergeCustom(col: number, row: number, cellGroup: Group, table: BaseTableAPI) {\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout: customMergeLayout,\n customRender: customMergeRender\n } = customMerge;\n\n if (customMergeLayout || customMergeRender) {\n const customResult = dealWithCustom(\n customMergeLayout,\n customMergeRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n customMergeRange,\n table\n );\n\n const customElementsGroup = customResult.elementsGroup;\n\n if (cellGroup.childrenCount > 0 && customElementsGroup) {\n cellGroup.insertBefore(customElementsGroup, cellGroup.firstChild);\n } else if (customElementsGroup) {\n cellGroup.appendChild(customElementsGroup);\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = cellGroup.attribute;\n const { height: contentHeight } = cellGroup.attribute;\n cellGroup.contentWidth = contentWidth;\n cellGroup.contentHeight = contentHeight;\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, customMergeRange, table);\n\n return customMergeRange;\n }\n }\n }\n\n return undefined;\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { Group } from '../graphic/group';\n\nexport function isMergeCellGroup(cellGroup: Group) {\n if (\n cellGroup.role === 'cell' &&\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n return true;\n }\n return false;\n}\n","import { merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { CheckboxAttributes } from './type';\nimport { Image, Rect, Text } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadCheckBoxComponent } from './register';\n\nconst checkSvg =\n '';\n\nconst indeterminateSvg =\n '';\n\nloadCheckBoxComponent();\nexport class CheckBox extends AbstractComponent> {\n static defaultAttributes: Partial = {\n interactive: true,\n disabled: false,\n checked: false,\n indeterminate: false,\n cursor: 'pointer',\n disableCursor: 'not-allowed',\n spaceBetweenTextAndIcon: 8,\n text: {\n text: 'text',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n textBaseline: 'top',\n pickable: false\n },\n icon: {\n checkIconImage: checkSvg,\n indeterminateIconImage: indeterminateSvg,\n width: 10,\n height: 10,\n pickable: false\n },\n box: {\n width: 14,\n height: 14,\n cornerRadius: 2,\n fill: '#fff',\n stroke: 'rgb(229,230,235)',\n disableFill: 'rgb(242,243,245)',\n checkedFill: 'rgb(22, 93, 255)',\n checkedStroke: 'rgb(22, 93, 255)',\n disableCheckedFill: 'rgb(148, 191, 255)',\n disableCheckedStroke: 'rgb(148, 191, 255)',\n pickable: false\n }\n };\n _box: Rect;\n _checkIcon: Image;\n _indeterminateIcon: Image;\n _text: Text;\n\n name: 'checkbox';\n\n constructor(attributes: CheckboxAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CheckBox.defaultAttributes, attributes));\n this.renderGroup();\n\n this.onBeforeAttributeUpdate = (val: any, attributes: any, key: null | string | string[]) => {\n if ('interactive' in val) {\n this.setAttribute('pickable', val.interactive);\n }\n if ('disabled' in val) {\n this.setAttribute('cursor', val.disable ? this.attribute.disableCursor : this.attribute.cursor);\n }\n return undefined;\n };\n\n this.addEventListener('pointerup', this._handlePointerUp);\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderBox();\n this.renderIcon();\n this.renderText();\n this.layout();\n }\n\n renderBox() {\n this._box = new Rect(merge({}, this.attribute.box));\n const isCheckedOrIndeterminate = this.attribute.checked || this.attribute.indeterminate;\n if (isCheckedOrIndeterminate && this.attribute.disabled) {\n this._box.setAttributes({\n fill: this.attribute.box.disableCheckedFill,\n stroke: this.attribute.box.disableCheckedStroke\n });\n } else if (isCheckedOrIndeterminate) {\n this._box.setAttributes({\n fill: this.attribute.box.checkedFill,\n stroke: this.attribute.box.checkedStroke\n });\n } else if (this.attribute.disabled) {\n this._box.setAttributes({\n fill: this.attribute.box.disableFill\n // stroke: this.attribute.box.disableFill\n });\n }\n this.appendChild(this._box);\n }\n\n renderIcon() {\n this._checkIcon = new Image(merge({ image: this.attribute.icon.checkIconImage }, this.attribute.icon));\n this.appendChild(this._checkIcon);\n this._indeterminateIcon = new Image(\n merge(\n {\n image: this.attribute.icon.indeterminateIconImage\n },\n this.attribute.icon\n )\n );\n this.appendChild(this._indeterminateIcon);\n\n if (this.attribute.checked) {\n this._checkIcon.setAttribute('visible', true);\n this._indeterminateIcon.setAttribute('visible', false);\n } else if (this.attribute.indeterminate) {\n this._checkIcon.setAttribute('visible', false);\n this._indeterminateIcon.setAttribute('visible', true);\n } else {\n this._checkIcon.setAttribute('visible', false);\n this._indeterminateIcon.setAttribute('visible', false);\n }\n }\n\n renderText() {\n this._text = new Text(merge({ wrap: true }, this.attribute.text));\n if (this.attribute.disabled) {\n this._text.setAttribute('fill', this.attribute.text.disableFill);\n }\n this.appendChild(this._text);\n }\n\n renderGroup() {\n if (!this.attribute.interactive) {\n this.setAttribute('pickable', false);\n }\n if (this.attribute.disabled) {\n this.setAttribute('cursor', this.attribute.disableCursor);\n }\n }\n\n layout() {\n const boxHeight = this.attribute.box.height;\n const iconHeight = this.attribute.icon.height;\n const textHeight = this._text.AABBBounds.height();\n const maxHeight = Math.max(boxHeight, iconHeight, textHeight);\n const boxY = maxHeight / 2 - boxHeight / 2;\n const iconY = maxHeight / 2 - iconHeight / 2;\n const textY = maxHeight / 2 - textHeight / 2;\n\n const boxWidth = this.attribute.box.width;\n const iconWidth = this.attribute.icon.width;\n const maxWidth = Math.max(boxWidth, iconWidth);\n const boxX = maxWidth / 2 - boxWidth / 2;\n const iconX = maxWidth / 2 - iconWidth / 2;\n const textX = maxWidth + this.attribute.spaceBetweenTextAndIcon;\n\n this._box.setAttributes({\n x: boxX,\n y: boxY\n });\n this._checkIcon.setAttributes({\n x: iconX,\n y: iconY\n });\n this._indeterminateIcon.setAttributes({\n x: iconX,\n y: iconY\n });\n this._text.setAttributes({\n x: textX,\n y: textY\n });\n }\n\n private _handlePointerUp = () => {\n if (this.attribute.disabled) {\n return;\n } else if (this.attribute.checked) {\n this.setAttribute('checked', false);\n this.setAttribute('indeterminate', false);\n } else {\n this.setAttribute('checked', true);\n this.setAttribute('indeterminate', false);\n }\n\n this._dispatchEvent('checkbox_state_change', {\n eventType: 'checkbox_state_change',\n checked: this.attribute.checked\n });\n\n this.stage.renderNextFrame();\n };\n\n initAttributes(params: CheckboxAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, CheckBox.defaultAttributes, params);\n super.initAttributes(params);\n this.renderGroup();\n this.render();\n }\n}\n","import { registerGroup, registerImage, registerRect, registerText } from '@visactor/vrender-kits';\n\nexport function loadCheckBoxComponent() {\n registerGroup();\n registerRect();\n registerText();\n registerImage();\n}\n","import { registerGroup, registerImage, registerRect, registerWrapText } from '@visactor/vrender-kits';\n\nexport function loadRadioComponent() {\n registerGroup();\n registerRect();\n registerWrapText();\n registerImage();\n}\n","import { merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { RadioAttributes } from './type';\nimport { Arc, Text } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadRadioComponent } from './register';\n\nloadRadioComponent();\nexport class Radio extends AbstractComponent> {\n static defaultAttributes: Partial = {\n interactive: true,\n disabled: false,\n checked: false,\n cursor: 'pointer',\n disableCursor: 'not-allowed',\n spaceBetweenTextAndIcon: 8,\n text: {\n text: 'text',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n textBaseline: 'top',\n pickable: false\n },\n circle: {\n outerRadius: 7,\n innerRadius: 3,\n startAngle: 0,\n endAngle: 2 * Math.PI,\n lineWidth: 1,\n fill: '#fff',\n stroke: 'rgb(229,230,235)',\n disableFill: 'rgb(242,243,245)',\n checkedFill: 'rgb(22, 93, 255)',\n checkedStroke: 'rgb(22, 93, 255)',\n disableCheckedFill: 'rgb(148, 191, 255)',\n disableCheckedStroke: 'rgb(148, 191, 255)',\n pickable: false\n }\n };\n _circle: Arc;\n _text: Text;\n\n name: 'radio';\n\n constructor(attributes: RadioAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Radio.defaultAttributes, attributes));\n this.renderGroup();\n\n this.onBeforeAttributeUpdate = (val: any, attributes: any, key: null | string | string[]) => {\n if ('interactive' in val) {\n this.setAttribute('pickable', val.interactive);\n }\n if ('disabled' in val) {\n this.setAttribute('cursor', val.disable ? this.attribute.disableCursor : this.attribute.cursor);\n }\n return undefined;\n };\n\n this.addEventListener('pointerup', this._handlePointerUp);\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderCircle();\n this.renderText();\n this.layout();\n }\n\n renderCircle() {\n this._circle = new Arc(merge({}, this.attribute.circle));\n const isChecked = this.attribute.checked;\n if (isChecked && this.attribute.disabled) {\n this._circle.setAttributes({\n fill: this.attribute.circle.disableCheckedFill,\n stroke: this.attribute.circle.disableCheckedStroke\n });\n } else if (isChecked) {\n this._circle.setAttributes({\n fill: this.attribute.circle.checkedFill,\n stroke: this.attribute.circle.checkedStroke\n });\n } else if (this.attribute.disabled) {\n this._circle.setAttributes({\n fill: this.attribute.circle.disableFill\n // stroke: this.attribute.circle.disableFill\n });\n }\n this.appendChild(this._circle);\n }\n\n renderText() {\n this._text = new Text(merge({}, this.attribute.text));\n if (this.attribute.disabled) {\n this._text.setAttribute('fill', this.attribute.text.disableFill);\n }\n this.appendChild(this._text);\n }\n\n renderGroup() {\n if (!this.attribute.interactive) {\n this.setAttribute('pickable', false);\n }\n if (this.attribute.disabled) {\n this.setAttribute('cursor', this.attribute.disableCursor);\n }\n }\n\n layout() {\n const circleHeight = (this.attribute.circle.outerRadius + this.attribute.circle.lineWidth) * 2;\n const textHeight = this._text.AABBBounds.height();\n const maxHeight = Math.max(circleHeight, textHeight);\n const circleY =\n maxHeight / 2 - circleHeight / 2 + this.attribute.circle.outerRadius + this.attribute.circle.lineWidth;\n const textY = maxHeight / 2 - textHeight / 2;\n\n const circleWidth = (this.attribute.circle.outerRadius + this.attribute.circle.lineWidth) * 2;\n const circleX = this.attribute.circle.outerRadius + this.attribute.circle.lineWidth;\n const textX = circleWidth + this.attribute.spaceBetweenTextAndIcon;\n\n this._circle.setAttributes({\n x: circleX,\n y: circleY\n });\n this._text.setAttributes({\n x: textX,\n y: textY\n });\n }\n\n private _handlePointerUp = () => {\n if (this.attribute.disabled || this.attribute.checked) {\n // checked do nothing\n return;\n }\n this.setAttribute('checked', true);\n\n this._dispatchEvent('radio_checked', {\n eventType: 'radio_checked',\n target: this\n });\n\n this.stage.renderNextFrame();\n };\n\n initAttributes(params: RadioAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Radio.defaultAttributes, params);\n super.initAttributes(params);\n this.renderGroup();\n this.render();\n }\n}\n","import { isArray, isNumber, isObject } from '@visactor/vutils';\nimport { validToString } from '../../tools/util';\nimport { getProp } from '../utils/get-prop';\nimport { CheckBox, Radio } from '@visactor/vrender-components';\nimport type { FullExtendStyle, RadioColumnDefine } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nconst utilCheckBoxMark = new CheckBox({});\nconst utilRadioMark = new Radio({});\n\nexport function computeCheckboxCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n const text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n const lines = validToString(text).split('\\n') || [];\n const cellWidth = table.getColsWidth(col, endCol);\n const size = getProp('size', actStyle, col, row, table);\n let maxHeight = 0;\n if (autoWrapText) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - size - spaceBetweenTextAndIcon;\n utilCheckBoxMark.setAttributes({\n text: {\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n lineClamp\n },\n icon: {\n width: Math.floor(size / 1.4), // icon : box => 10 : 14\n height: Math.floor(size / 1.4)\n },\n box: {\n width: size,\n height: size\n },\n spaceBetweenTextAndIcon\n });\n utilCheckBoxMark.render();\n maxHeight = utilCheckBoxMark.AABBBounds.height();\n } else {\n maxHeight = Math.max(size, lines.length * lineHeight);\n }\n\n return maxHeight;\n}\n\nexport function computeRadioCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n if (isArray(cellValue)) {\n // multi radio\n let maxHeight = 0;\n const define = table.getBodyColumnDefine(col, row);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', actStyle, col, row, table);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n // sum all radio height\n cellValue.forEach((singleValue, index) => {\n const height = computeSingleRadioCellHeight(\n singleValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n maxHeight += height;\n if (index !== cellValue.length - 1) {\n maxHeight += spaceBetweenRadio;\n }\n });\n } else if (radioDirectionInCell === 'horizontal') {\n // get max radio height\n cellValue.forEach(singleValue => {\n const height = computeSingleRadioCellHeight(\n singleValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n maxHeight = Math.max(height, maxHeight);\n });\n }\n return maxHeight;\n }\n // single radio\n return computeSingleRadioCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n}\n\nexport function computeSingleRadioCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n const text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n const lines = validToString(text).split('\\n') || [];\n const cellWidth = table.getColsWidth(col, endCol);\n const size = getProp('size', actStyle, col, row, table);\n let outerRadius = getProp('outerRadius', actStyle, col, row, table);\n const circleSize = isNumber(outerRadius) ? outerRadius * 2 : size;\n let maxHeight = 0;\n if (autoWrapText) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - circleSize - spaceBetweenTextAndIcon;\n if (!isNumber(outerRadius)) {\n outerRadius = Math.round(size / 2);\n }\n utilRadioMark.setAttributes({\n text: {\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n lineClamp\n },\n circle: {\n outerRadius\n },\n spaceBetweenTextAndIcon\n });\n utilRadioMark.render();\n maxHeight = utilRadioMark.AABBBounds.height();\n } else {\n maxHeight = Math.max(size, lines.length * lineHeight);\n }\n\n return maxHeight;\n}\n","import type { ITextGraphicAttribute, TextOptionsType } from './../../vrender';\nimport {\n DefaultTextStyle,\n getTextBounds,\n DefaultTextMeasureContribution,\n TextMeasureContribution,\n ContainerModule,\n container,\n Text\n} from './../../vrender';\n// eslint-disable-next-line max-len\n// import {\n// DefaultTextMeasureContribution,\n// TextMeasureContribution\n// } from '@visactor/vrender/es/core/contributions/textMeasure/textMeasure-contribution';\nimport type { ITextMeasureOption, ITextSize } from '@visactor/vutils';\nimport { TextMeasure } from '@visactor/vutils';\n\nlet customAlphabetCharSet = '';\nlet textMeasureMode: 'quick' | 'canvas' = 'quick';\n\ntype ITextGraphicAttributeFroMeasure = Omit & {\n lineHeight?: number;\n};\n\nconst textMeasureModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (isBound(TextMeasureContribution)) {\n rebind(TextMeasureContribution).to(FastTextMeasureContribution).inSingletonScope();\n } else {\n bind(TextMeasureContribution).to(FastTextMeasureContribution).inSingletonScope();\n }\n});\n\nconst restoreTextMeasureModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (isBound(TextMeasureContribution)) {\n rebind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n } else {\n bind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n }\n});\n\nexport default textMeasureModule;\n\nexport const initTextMeasure = (\n textSpec?: ITextGraphicAttributeFroMeasure,\n option?: Partial,\n useNaiveCanvas?: boolean\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DefaultTextStyle.fontFamily,\n fontSize: DefaultTextStyle.fontSize\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: `{}()//&-/: .,@%'\"~…=——${\n TextMeasure.ALPHABET_CHAR_SET\n }${TextMeasure.ALPHABET_CHAR_SET.toUpperCase()}0123456789${customAlphabetCharSet}`,\n ...(option ?? {})\n },\n textSpec\n );\n};\n\nconst fastTextMeasureCache: Map> = new Map();\n\nfunction getFastTextMeasure(\n fontSize: number,\n fontWeight: string | number,\n fontFamily: string,\n fontStyle: string = 'normal'\n) {\n const key = `${fontSize}-${fontWeight}-${fontFamily}-${fontStyle}`;\n const cache = fastTextMeasureCache.get(key);\n if (cache) {\n return cache;\n }\n const fastTextMeasure = initTextMeasure({\n // 16px sans-serif\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle\n });\n fastTextMeasureCache.set(key, fastTextMeasure);\n return fastTextMeasure;\n}\n\nexport class FastTextMeasureContribution extends DefaultTextMeasureContribution {\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType): number {\n // if (!this.context) {\n // return this.estimate(text, options).width;\n // }\n // this.context.setTextStyleWithoutAlignBaseline(options);\n // const textMeasure = this.context.measureText(text);\n // return textMeasure.width;\n\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure.width;\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n // if (!this.context) {\n // return this.estimate(text, options);\n // }\n // this.context.setTextStyleWithoutAlignBaseline(options);\n // return this.context.measureText(text);\n\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure;\n }\n}\n\nexport class TextMeasureTool {\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureText(text: string, options: ITextGraphicAttribute): ITextSize {\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure;\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: ITextGraphicAttribute): number {\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure.width;\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: ITextGraphicAttribute,\n width: number\n ): {\n str: string;\n width: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n return this._clipText(text, options, width, 0, text.length - 1);\n }\n\n // 二分法找到最佳宽\n private _clipText(\n text: string,\n options: ITextGraphicAttribute,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipText(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipText(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n clipTextWithSuffix(\n text: string,\n options: ITextGraphicAttribute,\n width: number,\n suffix: string\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1);\n data.str += suffix;\n data.width += suffixWidth;\n return data;\n }\n}\n\nexport const textMeasure = new TextMeasureTool();\n\n// add user custom alphabet char set into fast measurement\nexport function setCustomAlphabetCharSet(str: string) {\n customAlphabetCharSet = str;\n fastTextMeasureCache.clear();\n // container.load(textMeasureModule);\n}\n\n// change fast textMeasure into canvas textMeasure\nexport function restoreMeasureText() {\n textMeasureMode = 'canvas';\n container.load(restoreTextMeasureModule);\n}\n\nconst utilTextMark = new Text({\n ignoreBuf: true\n // autoWrapText: true\n});\n\nexport function measureTextBounds(attribute: ITextGraphicAttribute) {\n utilTextMark.initAttributes({\n ...attribute,\n ignoreBuf: true\n });\n return utilTextMark.AABBBounds;\n}\n","import type { Group as VGroup } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { validToString } from '../../tools/util';\nimport type {\n ColumnIconOption,\n ColumnTypeOption,\n IRowSeriesNumber,\n ListTableAPI,\n ListTableConstructorOptions\n} from '../../ts-types';\nimport { IconPosition } from '../../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { ColumnData, ColumnDefine, TextColumnDefine } from '../../ts-types/list-table/layout-map/api';\nimport { getProp } from '../utils/get-prop';\nimport { getQuadProps } from '../utils/padding';\nimport { dealWithRichTextIcon } from '../utils/text-icon-layout';\nimport type { ComputeAxisComponentHeight } from '../../components/axis/get-axis-component-size';\nimport { Factory } from '../../core/factory';\nimport { isArray, isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\nimport { CheckBox } from '@visactor/vrender-components';\nimport { decodeReactDom, dealPercentCalc } from '../component/custom';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { computeCheckboxCellHeight, computeRadioCellHeight } from './height-util';\nimport { measureTextBounds } from '../utils/text-measure';\nimport { breakString } from '../utils/break-string';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\n\nconst utilRichTextMark = new RichText({\n width: 0,\n height: 0,\n textConfig: []\n});\n\nexport function computeRowsHeight(\n table: BaseTableAPI,\n rowStart?: number,\n rowEnd?: number,\n isClearRowRangeHeightsMap: boolean = true,\n update?: boolean\n): void {\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n\n const oldRowHeights: number[] = [];\n const newHeights: number[] = [];\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n // oldRowHeights.push(table.getRowHeight(row));\n oldRowHeights[row] = table.getRowHeight(row);\n }\n }\n\n const layoutMap = table.internalProps.layoutMap;\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).enableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).enableUseHeaderPathCache();\n }\n\n table.defaultHeaderRowHeight;\n table.defaultHeaderColWidth;\n const isDefaultHeaderHasAuto =\n table.defaultHeaderRowHeight === 'auto' ||\n (isArray(table.defaultHeaderRowHeight) && table.defaultHeaderRowHeight.some(item => item === 'auto'));\n const isAllRowsAuto =\n table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false);\n const isDefaultRowHeightIsAuto = table.options.defaultRowHeight === 'auto';\n\n if (isAllRowsAuto || isDefaultHeaderHasAuto || isDefaultRowHeightIsAuto) {\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? table.rowCount - 1;\n\n // clear rowRangeHeightsMap\n if ((rowStart === 0 && rowEnd === table.rowCount - 1) || isClearRowRangeHeightsMap) {\n table._clearRowRangeHeightsMap();\n }\n // else {\n // for (let row = rowStart; row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row);\n // }\n // }\n\n // compute header row in column header row\n for (let row = rowStart; row < table.columnHeaderLevelCount; row++) {\n let startCol = 0;\n let endCol = table.colCount - 1;\n if (\n ((table.isPivotTable() && !table.isPivotChart()) ||\n (table.isPivotChart() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)) && // no top axis\n checkPivotFixedStyleAndNoWrap(table, row) &&\n !getCellMergeInfo(table, table.rowHeaderLevelCount, row)\n ) {\n // 列表头样式一致,只计算第一列行高,作为整行行高\n startCol = 0;\n endCol = table.rowHeaderLevelCount;\n }\n if (isAllRowsAuto || table.getDefaultRowHeight(row) === 'auto') {\n const height = computeRowHeight(row, startCol, endCol, table);\n newHeights[row] = Math.round(height);\n //表头部分需要马上设置到缓存中 因为adaptive不会调整表头的高度 另外后面adaptive处理过程中有取值 table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n if (table.heightAdaptiveMode === 'only-body' || !update) {\n table._setRowHeight(row, height);\n }\n }\n }\n\n // compute bottom frozen row\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= rowEnd; row++) {\n if (isAllRowsAuto || table.getDefaultRowHeight(row) === 'auto') {\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n }\n\n if (rowEnd < table.columnHeaderLevelCount || (!isAllRowsAuto && !isDefaultRowHeightIsAuto)) {\n // do nothing\n } else {\n // compute body row\n if (\n // 以列展示 且符合只需要计算第一行其他行可复用行高的条条件\n !(\n table.internalProps.transpose ||\n (table.isPivotTable() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) &&\n !(table.options as ListTableConstructorOptions).customComputeRowHeight &&\n checkFixedStyleAndNoWrap(table)\n ) {\n // check fixed style and no wrap situation, fill all row width single compute\n // traspose table and row indicator pivot table cannot use single row height\n const height = computeRowHeight(table.columnHeaderLevelCount, 0, table.colCount - 1, table);\n fillRowsHeight(\n height,\n table.columnHeaderLevelCount,\n table.rowCount - 1 - table.bottomFrozenRowCount,\n table,\n update ? newHeights : undefined\n );\n //底部冻结的行行高需要单独计算\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= rowEnd; row++) {\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n } else if (\n // 以行展示\n table.internalProps.transpose ||\n (table.isPivotTable() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n // check fixed style and no wrap situation, just compute 0-table.rowHeaderLevelCount column(the column after row header) in ervey row\n // in traspose table and row indicator pivot table\n for (let row = Math.max(rowStart, table.columnHeaderLevelCount); row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row);//注释掉 注意有无缓存问题\n let height;\n if (checkFixedStyleAndNoWrapForTranspose(table, row)) {\n // 以行展示 只计算到body第一列样式的情况即可\n height = computeRowHeight(row, 0, table.rowHeaderLevelCount, table);\n } else {\n height = computeRowHeight(row, 0, table.colCount - 1, table);\n }\n // table.setRowHeight(row, height);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n } else {\n // 以列展示 需要逐行计算情况\n for (let row = Math.max(rowStart, table.columnHeaderLevelCount); row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row); //注释掉 注意有无缓存问题\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n // table.setRowHeight(row, height);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n }\n }\n } else {\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n // for tree mode\n // getRowHeight() in adaptive will return scaled height\n table.clearRowHeightCache();\n }\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n newHeights[row] = table.getRowHeight(row);\n }\n }\n }\n\n if ((rowStart === 0 && rowEnd === table.rowCount - 1) || isClearRowRangeHeightsMap) {\n table._clearRowRangeHeightsMap();\n }\n\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n let totalDrawHeight = table.tableNoFrameHeight;\n let startRow = 0;\n let endRow = table.rowCount;\n if (table.heightAdaptiveMode === 'only-body') {\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n startRow = table.columnHeaderLevelCount;\n endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n }\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight =\n totalDrawHeight -\n (update\n ? newHeights.reduce((acr, cur, index) => {\n if (index >= startRow && index <= endRow - 2) {\n return acr + cur;\n }\n return acr;\n }, 0)\n : table.getRowsHeight(startRow, endRow - 2));\n } else {\n rowHeight = Math.round(\n (update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row)) * factor\n );\n }\n if (update) {\n newHeights[row] = rowHeight;\n } else {\n table._setRowHeight(row, rowHeight, false);\n }\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (actualHeight < canvasHeight && actualHeight - actualHeaderHeight > 0) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n // if (update) {\n // newHeights[row] = newHeights[row] * factor;\n // } else {\n // table.setRowHeight(row, table.getRowHeight(row) * factor);\n // }\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight =\n canvasHeight -\n actualHeaderHeight -\n (update\n ? newHeights.reduce((acr, cur, index) => {\n if (index >= startRow && index <= endRow - 2) {\n return acr + cur;\n }\n return acr;\n }, 0)\n : table.getRowsHeight(startRow, endRow - 2));\n } else {\n rowHeight = Math.round(\n (update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row)) * factor\n );\n }\n if (update) {\n newHeights[row] = rowHeight;\n } else {\n table._setRowHeight(row, rowHeight, false);\n }\n }\n }\n }\n\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const newRowHeight = newHeights[row] ?? table.getRowHeight(row);\n // if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // table._setRowHeight(row, newRowHeight);\n // }\n if (isValid(newRowHeight)) {\n table._setRowHeight(row, newRowHeight);\n }\n }\n\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n for (let row = 0; row <= table.columnHeaderLevelCount - 1; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= table.rowCount - 1; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n }\n for (let row = table.scenegraph.proxy.rowStart; row <= table.scenegraph.proxy.rowEnd; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n }\n // console.log('computeRowsHeight time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time, rowStart, rowEnd);\n\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).disableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).disableUseHeaderPathCache();\n }\n}\n\nexport function computeRowHeight(row: number, startCol: number, endCol: number, table: BaseTableAPI): number {\n const isAllRowsAuto =\n table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false);\n if (!isAllRowsAuto && table.getDefaultRowHeight(row) !== 'auto') {\n return table.getDefaultRowHeight(row) as number;\n }\n\n let maxHeight;\n if (table.options.customComputeRowHeight) {\n const customRowHeight = table.options.customComputeRowHeight({\n row,\n table\n });\n if (typeof customRowHeight === 'number') {\n return customRowHeight;\n } else if (customRowHeight !== 'auto') {\n return table.getDefaultRowHeight(row) as number;\n }\n }\n // 如果是透视图\n if (\n table.isPivotChart() &&\n row >= table.columnHeaderLevelCount &&\n row < table.rowCount - table.bottomFrozenRowCount\n ) {\n if ((table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol) {\n //并且指标是以列展示 计算行高需要根据y轴的值域范围\n const optimunHeight = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getOptimunHeightForChart(row);\n if (optimunHeight > 0) {\n return optimunHeight;\n }\n } else {\n //直接拿默认行高\n const defaultHeight = table.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n }\n }\n for (let col = startCol; col <= endCol; col++) {\n // CustomRender height calculation\n const customHeight = computeCustomRenderHeight(col, row, table);\n if (customHeight) {\n maxHeight = isValid(maxHeight) ? Math.max(customHeight.height, maxHeight) : customHeight.height;\n if (!customHeight.renderDefault) {\n continue;\n }\n }\n\n // Axis component height calculation\n if (table.isPivotChart()) {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const axisConfig = layout.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const computeAxisComponentHeight: ComputeAxisComponentHeight =\n Factory.getFunction('computeAxisComponentHeight');\n const axisWidth = computeAxisComponentHeight(axisConfig, table);\n if (typeof axisWidth === 'number') {\n maxHeight = isValid(maxHeight) ? Math.max(axisWidth, maxHeight) : axisWidth;\n continue;\n }\n }\n }\n\n if (\n table.isPivotChart() &&\n ((table.isLeftFrozenColumn(col) && table.isBottomFrozenRow(row)) ||\n (table.isRightFrozenColumn(col) && table.isBottomFrozenRow(row)))\n ) {\n continue;\n }\n const cellType = table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData)?.headerType\n : table.getBodyColumnType(col, row);\n // if ( isValid(cellType) && cellType !== 'text' && cellType !== 'link' && cellType !== 'progressbar' && cellType !== 'checkbox') {\n // // text&link&progressbar测量文字宽度\n // // image&video&sparkline使用默认宽度\n // const defaultHeight = table.getDefaultRowHeight(row);\n // maxHeight = Math.max(maxHeight, isNumber(defaultHeight) ? defaultHeight : table.defaultRowHeight);\n // continue;\n // }\n\n // text height calculation\n const textHeight = computeTextHeight(col, row, cellType, table);\n maxHeight = isValid(maxHeight) ? Math.max(textHeight, maxHeight) : textHeight;\n }\n if (isValid(maxHeight)) {\n return maxHeight;\n }\n\n const defaultHeight = table.getDefaultRowHeight(row);\n return isNumber(defaultHeight) ? defaultHeight : table.defaultRowHeight;\n}\n\nfunction checkFixedStyleAndNoWrap(table: BaseTableAPI): boolean {\n const { layoutMap } = table.internalProps;\n const row = table.columnHeaderLevelCount;\n //设置了全局自动换行的话 不能复用高度计算\n if (\n (table.internalProps.autoWrapText || table.internalProps.enableLineBreak || table.isPivotChart()) &&\n (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')\n ) {\n return false;\n }\n for (let col = 0; col < table.colCount; col++) {\n const cellDefine = layoutMap.getBody(col, row);\n if (cellDefine.cellType === 'radio') {\n return false;\n }\n if (\n typeof cellDefine.style === 'function' ||\n typeof (cellDefine as ColumnData).icon === 'function' ||\n (cellDefine.define as ColumnDefine)?.customRender ||\n (cellDefine.define as ColumnDefine)?.customLayout ||\n typeof cellDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const cellStyle = table._getCellStyle(col, row); //获取的style是结合了theme配置的style\n if (\n typeof cellStyle.padding === 'function' ||\n typeof cellStyle.fontSize === 'function' ||\n typeof cellStyle.lineHeight === 'function' ||\n cellStyle.autoWrapText === true\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction checkFixedStyleAndNoWrapForTranspose(table: BaseTableAPI, row: number): boolean {\n const { layoutMap } = table.internalProps;\n //设置了全局自动换行的话 不能复用高度计算\n if (\n (table.internalProps.autoWrapText || table.internalProps.enableLineBreak) &&\n (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')\n ) {\n return false;\n }\n\n const cellDefine = layoutMap.getBody(table.rowHeaderLevelCount, row);\n if (\n typeof cellDefine.style === 'function' ||\n typeof (cellDefine as ColumnData).icon === 'function' ||\n (cellDefine.define as ColumnDefine)?.customRender ||\n (cellDefine.define as ColumnDefine)?.customLayout ||\n typeof cellDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const cellStyle = table._getCellStyle(table.rowHeaderLevelCount, row);\n if (\n typeof cellStyle.padding === 'function' ||\n typeof cellStyle.fontSize === 'function' ||\n typeof cellStyle.lineHeight === 'function' ||\n cellStyle.autoWrapText === true\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction checkPivotFixedStyleAndNoWrap(table: BaseTableAPI, row: number) {\n const { layoutMap } = table.internalProps;\n //设置了全局自动换行的话 不能复用高度计算\n if (table.internalProps.autoWrapText && (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')) {\n return false;\n }\n\n const headerDefine = layoutMap.getHeader(table.rowHeaderLevelCount, row);\n if (\n typeof headerDefine.style === 'function' ||\n typeof (headerDefine as HeaderData).icons === 'function' ||\n (headerDefine.define as ColumnDefine)?.headerCustomRender ||\n (headerDefine.define as ColumnDefine)?.headerCustomLayout ||\n typeof headerDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const headerStyle = table._getCellStyle(table.rowHeaderLevelCount, row);\n if (\n typeof headerStyle.padding === 'function' ||\n typeof headerStyle.fontSize === 'function' ||\n typeof headerStyle.lineHeight === 'function' ||\n headerStyle.autoWrapText === true\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction fillRowsHeight(\n height: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI,\n newHeights: number[] | undefined\n) {\n if (table.internalProps.useOneRowHeightFillAll) {\n return;\n }\n for (let row = startRow; row <= endRow; row++) {\n if (newHeights) {\n newHeights[row] = height;\n } else {\n table._setRowHeight(row, height);\n }\n }\n table.internalProps.useOneRowHeightFillAll = true;\n}\n\n/**\n * @description: compute customRender height\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeCustomRenderHeight(col: number, row: number, table: BaseTableAPI) {\n const customRender = table.getCustomRender(col, row);\n let customLayout = table.getCustomLayout(col, row);\n if (customRender || customLayout) {\n let spanRow = 1;\n let height = 0;\n let renderDefault = false;\n let enableCellPadding = false;\n let cellRange;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n cellRange = table.getCellRange(col, row);\n spanRow = cellRange.end.row - cellRange.start.row + 1;\n }\n const arg = {\n col: cellRange?.start.col ?? col,\n row: cellRange?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: getCellRect(col, row, table),\n table,\n originCol: col,\n originRow: row\n };\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (isFunction(customLayout)) {\n // 处理customLayout\n const customLayoutObj = customLayout(arg);\n if (customLayoutObj.rootContainer) {\n customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n dealPercentCalc(customLayoutObj.rootContainer, table.getColWidth(col), 0);\n customLayoutObj.rootContainer.setStage(table.scenegraph.stage);\n height = (customLayoutObj.rootContainer as VGroup).AABBBounds.height() ?? 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n } else {\n height = 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n }\n } else if (typeof customRender === 'function') {\n // 处理customRender\n const customRenderObj = customRender(arg);\n height = customRenderObj?.expectedHeight ?? 0;\n renderDefault = customRenderObj?.renderDefault;\n } else {\n height = customRender?.expectedHeight ?? 0;\n renderDefault = customRender?.renderDefault;\n }\n if (enableCellPadding) {\n const actStyle = table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n height += padding[0] + padding[2];\n }\n return {\n height: height / spanRow,\n renderDefault\n };\n }\n return undefined;\n}\n\n/**\n * @description: compute text height\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeTextHeight(col: number, row: number, cellType: ColumnTypeOption, table: BaseTableAPI): number {\n let maxHeight = 0;\n const cellValue = table.getCellValue(col, row);\n // const dataValue = table.getCellOriginValue(col, row);\n const actStyle = table._getCellStyle(col, row);\n let iconHeight = 0;\n let iconWidth = 0;\n const iconInlineFront: ColumnIconOption[] = [];\n let iconInlineFrontHeight = 0;\n const iconInlineEnd: ColumnIconOption[] = [];\n let iconInlineEndHeight = 0;\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = table.getCellLocation(col, row) !== 'body' ? true : !!define?.icon || !!define?.tree;\n\n let mayHaveIcon = false;\n if (table.getCellLocation(col, row) !== 'body') {\n mayHaveIcon = true;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n }\n\n if (mayHaveIcon) {\n const icons = table.getCellIcons(col, row);\n icons?.forEach(icon => {\n if (\n icon.positionType !== IconPosition.absoluteRight &&\n icon.positionType !== IconPosition.inlineFront &&\n icon.positionType !== IconPosition.inlineEnd\n ) {\n iconWidth += (icon.width ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0);\n iconHeight = Math.max(iconHeight, icon.height ?? 0);\n } else if (icon.positionType === IconPosition.inlineFront) {\n iconInlineFront.push(icon);\n iconInlineFrontHeight = Math.max(\n iconInlineFrontHeight,\n (icon.height ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0)\n );\n } else if (icon.positionType === IconPosition.inlineEnd) {\n iconInlineEnd.push(icon);\n iconInlineEndHeight = Math.max(\n iconInlineEndHeight,\n (icon.height ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0)\n );\n }\n });\n }\n let spanRow = 1;\n let endCol = col;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n const cellRange = table.getCellRange(col, row);\n spanRow = cellRange.end.row - cellRange.start.row + 1;\n col = cellRange.start.col;\n endCol = cellRange.end.col;\n }\n\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n const fontSize = getProp('fontSize', actStyle, col, row, table);\n const fontStyle = getProp('fontStyle', actStyle, col, row, table);\n const fontWeight = getProp('fontWeight', actStyle, col, row, table);\n const lineHeight = getProp('lineHeight', actStyle, col, row, table) ?? fontSize;\n const fontFamily = getProp('fontFamily', actStyle, col, row, table);\n const autoWrapText = getProp('autoWrapText', actStyle, col, row, table);\n const lineClamp = getProp('lineClamp', actStyle, col, row, table);\n\n // underline\n const underline = getProp('underline', actStyle, col, row, table); // boolean\n const underlineOffset = getProp('underlineOffset', actStyle, col, row, table) ?? 0;\n\n let text;\n if (\n cellType !== 'text' &&\n cellType !== 'link' &&\n cellType !== 'progressbar' &&\n cellType !== 'checkbox' &&\n cellType !== 'radio'\n ) {\n maxHeight = lineHeight;\n } else if (cellType === 'checkbox') {\n maxHeight = computeCheckboxCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n } else if (cellType === 'radio') {\n maxHeight = computeRadioCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n } else {\n // text\n text = cellValue;\n const lines = breakString(text, table).text;\n const cellWidth = table.getColsWidth(col, endCol);\n\n if (iconInlineFront.length || iconInlineEnd.length) {\n if (autoWrapText) {\n const textOption = Object.assign({\n text: cellValue?.toString(),\n fontFamily,\n fontSize,\n fontStyle,\n fontWeight,\n lineHeight\n });\n textOption.textBaseline = 'middle';\n const textConfig = [\n ...iconInlineFront.map(icon => dealWithRichTextIcon(icon)),\n textOption,\n ...iconInlineEnd.map(icon => dealWithRichTextIcon(icon))\n ];\n utilRichTextMark.setAttributes({\n width: cellWidth - (padding[1] + padding[3]) - iconWidth,\n height: 0,\n textConfig\n });\n maxHeight = utilRichTextMark.AABBBounds.height();\n } else {\n maxHeight = 0;\n lines.forEach((line: string, index: number) => {\n if (table.options.customConfig?.multilinesForXTable && index !== 0) {\n return;\n }\n if (index === 0 && iconInlineFront.length) {\n maxHeight += Math.max(lineHeight, iconInlineFrontHeight);\n } else if (index === lines.length - 1 && iconInlineEnd.length) {\n maxHeight += Math.max(lineHeight, iconInlineEndHeight);\n } else {\n maxHeight += lineHeight;\n }\n });\n }\n } else if (autoWrapText) {\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - hierarchyOffset;\n const bounds = measureTextBounds({\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n whiteSpace: lines.length === 1 && !autoWrapText ? 'no-wrap' : 'normal',\n lineClamp\n });\n maxHeight =\n (bounds.height() || (typeof lineHeight === 'number' ? lineHeight : fontSize)) +\n (underline ? underlineOffset : 0);\n } else {\n // autoWrapText = false\n if (table.options.customConfig?.multilinesForXTable) {\n maxHeight = lineHeight;\n } else {\n maxHeight = lines.length * lineHeight;\n }\n }\n }\n return (Math.max(maxHeight, iconHeight) + padding[0] + padding[2]) / spanRow;\n}\n\nfunction getCellRect(col: number, row: number, table: BaseTableAPI) {\n return {\n left: 0,\n top: 0,\n right: table.getColWidth(col),\n bottom: table.getRowHeight(row),\n width: table.getColWidth(col),\n height: 0\n };\n}\n","import type { Group } from '../scenegraph/graphic/group';\nimport type { Scenegraph } from '../scenegraph/scenegraph';\nimport type { CellRange } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function getCellMergeRange(cellGroup: Group, scene: Scenegraph) {\n if (!scene || !scene.proxy) {\n return {\n colStart: 0,\n colEnd: 0,\n rowStart: 0,\n rowEnd: 0\n };\n }\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow, col, row } = cellGroup;\n // const { colStart, colEnd, rowStart, rowEnd, bodyLeftCol, bodyRightCol, bodyTopRow, bodyBottomRow } = scene.proxy;\n\n const cellRangeColStart = mergeStartCol;\n const cellRangeColEnd = mergeEndCol;\n const cellRangeRowStart = mergeStartRow;\n const cellRangeRowEnd = mergeEndRow;\n\n // if (col >= bodyLeftCol && col <= bodyRightCol) {\n // cellRangeColStart = Math.max(cellGroup.mergeStartCol, colStart);\n // cellRangeColEnd = Math.min(cellGroup.mergeEndCol, colEnd);\n // }\n\n // if (row >= bodyTopRow && row <= bodyBottomRow) {\n // cellRangeRowStart = Math.max(cellGroup.mergeStartRow, rowStart);\n // cellRangeRowEnd = Math.min(cellGroup.mergeEndRow, rowEnd);\n // }\n\n return {\n colStart: cellRangeColStart,\n colEnd: cellRangeColEnd,\n rowStart: cellRangeRowStart,\n rowEnd: cellRangeRowEnd\n };\n}\n\nexport function expendCellRange(cellRange: CellRange, table: BaseTableAPI): CellRange {\n const colStart = cellRange.start.col;\n const colEnd = cellRange.end.col;\n const rowStart = cellRange.start.row;\n const rowEnd = cellRange.end.row;\n\n let newColStart = colStart;\n let newColEnd = colEnd;\n let newRowStart = rowStart;\n let newRowEnd = rowEnd;\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const mergeRange = table.getCellRange(col, row);\n if (mergeRange) {\n newColStart = Math.min(newColStart, mergeRange.start.col);\n newColEnd = Math.max(newColEnd, mergeRange.end.col);\n newRowStart = Math.min(newRowStart, mergeRange.start.row);\n newRowEnd = Math.max(newRowEnd, mergeRange.end.row);\n }\n }\n }\n\n cellRange.start.col = newColStart;\n cellRange.end.col = newColEnd;\n cellRange.start.row = newRowStart;\n cellRange.end.row = newRowEnd;\n\n return cellRange;\n}\n","import type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport type { Group } from '../graphic/group';\nimport type { CreateProgressBarCell } from '../group-creater/cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from '../group-creater/cell-type/spark-line-cell';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getProp } from '../utils/get-prop';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentHeight } from '../utils/text-icon-layout';\nimport type { IProgressbarColumnBodyDefine } from '../../ts-types/list-table/define/progressbar-define';\nimport { CUSTOM_CONTAINER_NAME, CUSTOM_MERGE_CONTAINER_NAME, dealWithCustom } from '../component/custom';\nimport { updateImageCellContentWhileResize } from '../group-creater/cell-type/image-cell';\nimport { getStyleTheme } from '../../core/tableHelper';\nimport { isMergeCellGroup } from '../utils/is-merge-cell-group';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { resizeCellGroup, getCustomCellMergeCustom } from '../group-creater/cell-helper';\nimport type { IGraphic } from './../../vrender';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\nimport { Factory } from '../../core/factory';\n\nexport function updateRowHeight(scene: Scenegraph, row: number, detaY: number, skipTableHeightMap?: boolean) {\n // 更新table行高存储\n if (!skipTableHeightMap) {\n scene.table._setRowHeight(row, scene.table.getRowHeight(row) + detaY, true);\n }\n\n for (let col = 0; col < scene.table.colCount; col++) {\n const cell = scene.getCell(col, row);\n if (cell.role === 'empty') {\n continue;\n }\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.col !== col) {\n continue;\n }\n const height = cell.attribute.height;\n // cell.setAttribute('height', height);\n // (cell.firstChild as Rect).setAttribute('height', cell.attribute.height);\n updateCellHeightForRow(scene, cell, col, row, height + detaY, detaY, scene.table.isHeader(col, row));\n\n scene.updateCellContentWhileResize(col, row);\n }\n\n let rowStart = 0;\n let rowEnd = 0;\n // 更新header 高度\n if (row < scene.table.frozenRowCount) {\n // scene.colHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height + detaY);\n // scene.rowHeaderGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y + detaY);\n // scene.bodyGroup.setAttribute('y', scene.bodyGroup.attribute.y + detaY);\n\n rowStart = row + 1;\n rowEnd = scene.table.frozenRowCount - 1;\n } else if (row >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {\n rowStart = row + 1;\n rowEnd = scene.table.rowCount - 1;\n } else {\n rowStart = row + 1;\n // rowEnd = scene.table.rowCount - 1;\n rowEnd = Math.min(scene.proxy.rowEnd, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1); //- scene.table.bottomFrozenRowCount;\n }\n\n // 更新以下行位置\n for (let colIndex = 0; colIndex < scene.table.colCount; colIndex++) {\n for (let rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++) {\n const cellGroup = scene.highPerformanceGetCell(colIndex, rowIndex);\n if (cellGroup.role === 'cell') {\n cellGroup.setAttribute('y', cellGroup.attribute.y + detaY);\n }\n }\n }\n}\n\n/**\n * @description: 更新单个单元格高度\n * @return {*}\n */\nexport function updateCellHeightForRow(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n height: number,\n detaY: number,\n isHeader: boolean\n // autoRowHeight: boolean\n) {\n // cell.setAttribute('height', height);\n const cellGroup = cell;\n const distHeight = height;\n\n if (!cellGroup) {\n // 合并单元格非主单元格,不处理\n return;\n }\n\n updateCellHeight(scene, cellGroup, col, row, distHeight, detaY, isHeader);\n}\n\nexport function updateCellHeightForColumn(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n height: number,\n detaY: number,\n isHeader: boolean\n) {\n // cell.setAttribute('height', height);\n const cellGroup = cell;\n updateCellHeight(scene, cellGroup, col, row, height, 0, isHeader);\n}\n\nexport function updateCellHeight(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n distHeight: number,\n detaY: number,\n isHeader: boolean\n) {\n if (cell.attribute.height === distHeight && !cell.needUpdateHeight) {\n return;\n }\n cell.needUpdateHeight = false;\n\n cell.setAttribute('height', distHeight);\n const isVtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;\n const isCustomMerge = !!scene.table.getCustomMerge(col, row);\n // 更新单元格布局\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : scene.table.isHeader(col, row)\n ? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : scene.table.getBodyColumnType(col, row) ?? 'text';\n if (type === 'progressbar') {\n // 目前先采用重新生成节点的方案\n const columnDefine = scene.table.getBodyColumnDefine(col, row) as IProgressbarColumnBodyDefine;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const value = scene.table.getCellValue(col, row);\n const dataValue = scene.table.getCellOriginValue(col, row);\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n\n // deal with bar\n let range;\n if (columnDefine?.mergeCell) {\n range = scene.table.getCellRange(col, row);\n }\n\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const newBarCell = createProgressBarCell(\n columnDefine,\n style,\n cell.attribute.width,\n // cell.attribute.height,\n value,\n dataValue,\n col,\n row,\n padding,\n scene.table,\n range\n );\n\n const oldBarCell = cell.getChildByName('progress-bar') as Group;\n // cell.replaceChild(newBarCell, oldBarCell);\n cell.insertBefore(newBarCell, oldBarCell);\n cell.removeChild(oldBarCell);\n oldBarCell.removeAllChild();\n oldBarCell.release();\n\n // deal with text\n updateMergeCellContentHeight(cell, distHeight, detaY, scene.table.isAutoRowHeight(row), true, scene.table);\n } else if (type === 'sparkline') {\n // 目前先采用重新生成节点的方案\n cell.removeAllChild();\n const headerStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, scene.table));\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n createSparkLineCellGroup(\n cell,\n cell.parent,\n cell.attribute.x,\n cell.attribute.y,\n col,\n row,\n cell.attribute.width,\n cell.attribute.height,\n padding,\n scene.table,\n getStyleTheme(headerStyle, scene.table, col, row, getProp).theme,\n false\n );\n } else if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cell, col, row, 0, detaY, scene.table);\n } else if (cell.firstChild?.name === 'axis') {\n (cell.firstChild as any)?.originAxis.resize(cell.attribute.width, cell.attribute.height);\n } else {\n let renderDefault = true;\n const customContainer =\n (cell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n if (customContainer) {\n // if (scene.table.reactCustomLayout) {\n // scene.table.reactCustomLayout.removeCustomCell(col, row);\n // }\n // customContainer.removeAllChild();\n let customElementsGroup;\n cell.removeChild(customContainer);\n\n const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);\n if (customMergeRange) {\n for (let mergeRow = customMergeRange.start.row; mergeRow <= customMergeRange.end.row; mergeRow++) {\n if (mergeRow === row) {\n continue;\n }\n const mergedCell = scene.getCell(col, mergeRow);\n const customContainer =\n (mergedCell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (mergedCell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n customContainer.removeAllChild();\n mergedCell.removeChild(customContainer);\n getCustomCellMergeCustom(col, mergeRow, mergedCell, scene.table);\n }\n } else {\n let customRender;\n let customLayout;\n const cellLocation = scene.table.getCellLocation(col, row);\n const { vtableMerge } = scene.table.getCellRawRecord(col, row) || {};\n\n if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;\n } else if (cellLocation !== 'body') {\n const define = scene.table.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = scene.table.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || scene.table.customRender;\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n\n if ((customRender || customLayout) && isMergeCellGroup(cell)) {\n for (let mergeCol = cell.mergeStartCol; mergeCol <= cell.mergeEndCol; mergeCol++) {\n for (let mergeRow = cell.mergeStartRow; mergeRow <= cell.mergeEndRow; mergeRow++) {\n if (mergeRow !== row) {\n scene.updateCellContent(mergeCol, mergeRow);\n }\n }\n }\n }\n\n if (customLayout || customRender) {\n // const { autoRowHeight } = table.internalProps;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (isMergeCellGroup(cell)) {\n width = scene.table.getColsWidth(cell.mergeStartCol, cell.mergeEndCol);\n height = scene.table.getRowsHeight(cell.mergeStartRow, cell.mergeEndRow);\n }\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n width,\n height,\n false,\n scene.table.isAutoRowHeight(row),\n padding,\n isMergeCellGroup(cell)\n ? {\n start: { col: cell.mergeStartCol, row: cell.mergeStartRow },\n end: { col: cell.mergeEndCol, row: cell.mergeEndRow }\n }\n : undefined,\n scene.table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n }\n\n if (cell.childrenCount > 0 && customElementsGroup) {\n cell.insertBefore(customElementsGroup, cell.firstChild);\n } else if (customElementsGroup) {\n cell.appendChild(customElementsGroup);\n }\n }\n }\n // if (renderDefault) {\n // // 处理文字\n // const style = scene.table._getCellStyle(col, row);\n // updateMergeCellContentHeight(\n // cell,\n // distHeight,\n // detaY,\n // // scene.table.internalProps.autoRowHeight,\n // getQuadProps(style.padding as number),\n // style.textAlign,\n // style.textBaseline,\n // scene.table\n // );\n // }\n updateMergeCellContentHeight(cell, distHeight, detaY, scene.table.isAutoRowHeight(row), renderDefault, scene.table);\n }\n}\n\nfunction updateMergeCellContentHeight(\n cellGroup: Group,\n distHeight: number,\n detaY: number,\n autoRowHeight: boolean,\n renderDefault: boolean,\n table: BaseTableAPI\n) {\n if (isMergeCellGroup(cellGroup)) {\n distHeight = 0;\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n distHeight += table.getRowHeight(row);\n }\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n singleCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n if (renderDefault) {\n const style = table._getCellStyle(colStart, rowStart);\n const padding = getQuadProps(getProp('padding', style, col, row, table));\n updateCellContentHeight(\n singleCellGroup,\n distHeight,\n detaY,\n autoRowHeight,\n padding,\n style.textAlign,\n style.textBaseline,\n table\n );\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n // const { height: contentHeight } = cellGroup.attribute;\n singleCellGroup.contentHeight = distHeight;\n\n const { widthChange } = resizeCellGroup(\n singleCellGroup,\n rangeWidth,\n rangeHeight,\n {\n start: {\n col: cellGroup.mergeStartCol,\n row: cellGroup.mergeStartRow\n },\n end: {\n col: cellGroup.mergeEndCol,\n row: cellGroup.mergeEndRow\n }\n },\n table\n );\n\n if (widthChange) {\n singleCellGroup.needUpdateWidth = true;\n }\n }\n }\n } else {\n const style = table._getCellStyle(cellGroup.col, cellGroup.row);\n const padding = getQuadProps(getProp('padding', style, cellGroup.col, cellGroup.row, table));\n updateCellContentHeight(\n cellGroup,\n distHeight,\n detaY,\n autoRowHeight,\n padding,\n style.textAlign,\n style.textBaseline,\n table\n );\n }\n}\n","import type { IGraphic } from './../../vrender';\nimport type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport { getStyleTheme } from '../../core/tableHelper';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { IProgressbarColumnBodyDefine } from '../../ts-types/list-table/define/progressbar-define';\nimport { CUSTOM_CONTAINER_NAME, CUSTOM_MERGE_CONTAINER_NAME, dealWithCustom } from '../component/custom';\nimport type { Group } from '../graphic/group';\nimport { updateImageCellContentWhileResize } from '../group-creater/cell-type/image-cell';\nimport type { CreateProgressBarCell } from '../group-creater/cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from '../group-creater/cell-type/spark-line-cell';\nimport { resizeCellGroup, getCustomCellMergeCustom } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getProp } from '../utils/get-prop';\nimport { isMergeCellGroup } from '../utils/is-merge-cell-group';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentWidth } from '../utils/text-icon-layout';\nimport { computeRowHeight } from './compute-row-height';\nimport { updateCellHeightForRow } from './update-height';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\n// import { updateAutoRowHeight } from './auto-height';\n\n/**\n * @description: 更新指定列列宽,在拖拽调整列宽中使用\n * @param {Scenegraph} scene\n * @param {number} col\n * @param {number} detaX\n * @return {*}\n */\nexport function updateColWidth(scene: Scenegraph, col: number, detaX: number, skipTableWidthMap?: boolean) {\n if (!skipTableWidthMap) {\n scene.table._setColWidth(col, scene.table.getColWidth(col) + detaX, true);\n }\n\n // deal with corner header or column header\n const colOrCornerHeaderColumn = scene.getColGroup(col, true) as Group;\n const rightTopColumn = scene.getColGroupInRightTopCorner(col);\n if (colOrCornerHeaderColumn && !rightTopColumn) {\n updateColunmWidth(colOrCornerHeaderColumn, detaX, 'col-corner', scene);\n }\n // deal with right bottom frozen cells\n if (rightTopColumn) {\n updateColunmWidth(rightTopColumn, detaX, 'right-top', scene);\n }\n\n // deal with row header or body or right frozen cells\n const rowHeaderOrBodyColumn = scene.getColGroup(col) as Group;\n if (rowHeaderOrBodyColumn) {\n updateColunmWidth(rowHeaderOrBodyColumn, detaX, 'row-body', scene);\n }\n\n const leftBottomColumn = scene.getColGroupInLeftBottomCorner(col);\n // deal with left bottom frozen cells\n if (leftBottomColumn) {\n updateColunmWidth(leftBottomColumn, detaX, 'left-bottom', scene);\n }\n // deal with bottom frozen cells\n const bottomColumn = scene.getColGroupInBottom(col);\n if (bottomColumn) {\n updateColunmWidth(bottomColumn, detaX, 'bottom', scene);\n }\n // deal with right bottom frozen cells\n const rightBottomColumn = scene.getColGroupInRightBottomCorner(col);\n if (rightBottomColumn) {\n updateColunmWidth(rightBottomColumn, detaX, 'right-bottom', scene);\n }\n\n // 更新剩余列位置\n if (col < scene.frozenColCount) {\n scene.cornerHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n scene.rowHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n } else {\n scene.colHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n scene.bodyGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n\n if (leftBottomColumn) {\n scene.leftBottomCornerGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n if (bottomColumn) {\n scene.bottomFrozenGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n if (rightBottomColumn) {\n scene.rightBottomCornerGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n\n // scene.table.setColWidth(col, rowHeaderOrBodyColumn.attribute.width, true);\n}\n\nfunction updateColunmWidth(\n columnGroup: Group,\n detaX: number,\n // autoRowHeight: boolean,\n mode: 'col-corner' | 'row-body' | 'bottom' | 'left-bottom' | 'right-top' | 'right-bottom',\n scene: Scenegraph\n) {\n let needRerangeRow = false;\n // const colOrCornerHeaderColumn = scene.getColGroup(col, true) as Group;\n const oldColumnWidth = columnGroup?.attribute.width ?? 0;\n columnGroup?.setAttribute('width', oldColumnWidth + detaX);\n // 更新单元格宽度\n columnGroup?.forEachChildren((cell: Group, index: number) => {\n const isHeightChange = updateCellWidth(\n scene,\n cell,\n cell.col,\n cell.row,\n oldColumnWidth,\n oldColumnWidth + detaX,\n detaX,\n mode === 'row-body' ? cell.col < scene.table.rowHeaderLevelCount : true,\n scene.table.internalProps.autoWrapText\n );\n if (isHeightChange) {\n const mergeInfo = getCellMergeInfo(scene.table, cell.col, cell.row);\n if (mergeInfo && mergeInfo.end.row - mergeInfo.start.row) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n resetRowHeight(scene, row);\n }\n } else {\n resetRowHeight(scene, cell.row);\n }\n needRerangeRow = true;\n }\n });\n\n if (needRerangeRow) {\n let newTotalHeight = 0;\n let colGroup;\n let oldContainerHeight;\n let row;\n for (let col = 0; col < scene.table.colCount; col++) {\n // const colGroup = scene.getColGroup(col, true);\n if (mode === 'col-corner') {\n row = 0;\n colGroup = scene.getColGroup(col, true);\n oldContainerHeight = scene.colHeaderGroup.attribute.height ?? 0;\n } else if (mode === 'row-body') {\n row = scene.table.frozenRowCount;\n colGroup = scene.getColGroup(col, false);\n oldContainerHeight = scene.bodyGroup.attribute.height ?? 0;\n } else if (mode === 'bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInBottom(col);\n oldContainerHeight = scene.bottomFrozenGroup.attribute.height ?? 0;\n } else if (mode === 'left-bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInLeftBottomCorner(col);\n oldContainerHeight = scene.leftBottomCornerGroup.attribute.height ?? 0;\n } else if (mode === 'right-top') {\n row = 0;\n colGroup = scene.getColGroupInRightTopCorner(col);\n oldContainerHeight = scene.rightTopCornerGroup.attribute.height ?? 0;\n } else if (mode === 'right-bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInRightBottomCorner(col);\n oldContainerHeight = scene.rightBottomCornerGroup.attribute.height ?? 0;\n }\n if (!colGroup) {\n continue;\n }\n let y = 0;\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row) ?? 0;\n });\n newTotalHeight = y;\n }\n scene.updateContainerHeight(row, newTotalHeight - oldContainerHeight);\n //#region 修改bug:https://github.com/VisActor/VTable/issues/954 添加底部冻结行的三块区域\n for (let col = 0; col < scene.table.frozenColCount; col++) {\n const leftBottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n // reset cell y\n let y = 0;\n leftBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n for (let col = scene.table.colCount - scene.table.rightFrozenColCount; col < scene.table.colCount; col++) {\n const rightBottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n // reset cell y\n let y = 0;\n rightBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n\n for (let col = scene.table.frozenColCount; col < scene.table.colCount - scene.table.rightFrozenColCount; col++) {\n const rightBottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n // reset cell y\n let y = 0;\n rightBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n //#endregion\n }\n}\n\n/**\n * @description: 更新单个单元格宽度\n * @return {*}\n */\nfunction updateCellWidth(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n oldWidth: number, // old width, not dist\n distWidth: number, // old width, not dist\n detaX: number,\n isHeader: boolean,\n // autoColWidth: boolean,\n autoWrapText: boolean\n): boolean {\n if (cell.attribute.width === distWidth && !cell.needUpdateWidth) {\n return false;\n }\n cell.needUpdateWidth = false;\n\n cell.setAttribute('width', distWidth);\n // const mergeInfo = getCellMergeInfo(scene.table, col, row);\n // if (mergeInfo && mergeInfo.start.row !== row) {\n // return false;\n // }\n const cellGroup = cell;\n // const distWidth = width + detaX;\n\n if (!cellGroup) {\n // 合并单元格非主单元格,不处理\n return false;\n }\n const autoRowHeight = scene.table.isAutoRowHeight(row);\n const isVtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;\n const isCustomMerge = !!scene.table.getCustomMerge(col, row);\n // 更新单元格布局\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : scene.table.isHeader(col, row)\n ? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : scene.table.getBodyColumnType(col, row) ?? 'text';\n let isHeightChange = false;\n if (type === 'progressbar') {\n // 目前先采用重新生成节点的方案\n const columnDefine = scene.table.getBodyColumnDefine(col, row) as IProgressbarColumnBodyDefine;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const value = scene.table.getCellValue(col, row);\n const dataValue = scene.table.getCellOriginValue(col, row);\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n\n // deal with bar\n let range;\n if (columnDefine?.mergeCell) {\n range = scene.table.getCellRange(col, row);\n }\n\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const newBarCell = createProgressBarCell(\n columnDefine,\n style,\n cellGroup.attribute.width,\n // cellGroup.attribute.height,\n value,\n dataValue,\n col,\n row,\n padding,\n scene.table,\n range\n );\n\n const oldBarCell = cellGroup.getChildByName('progress-bar') as Group;\n // cell.replaceChild(newBarCell, oldBarCell);\n cellGroup.insertBefore(newBarCell, oldBarCell);\n cellGroup.removeChild(oldBarCell);\n oldBarCell.removeAllChild();\n oldBarCell.release();\n\n // deal width text\n const cellChange = updateMergeCellContentWidth(cellGroup, distWidth, detaX, autoRowHeight, true, scene.table);\n isHeightChange = isHeightChange || cellChange;\n } else if (type === 'sparkline') {\n // 目前先采用重新生成节点的方案\n cellGroup.removeAllChild();\n const headerStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, scene.table));\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n createSparkLineCellGroup(\n cellGroup,\n cellGroup.parent,\n cellGroup.attribute.x,\n cellGroup.attribute.y,\n col,\n row,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n padding,\n scene.table,\n getStyleTheme(headerStyle, scene.table, col, row, getProp).theme,\n false\n );\n } else if (type === 'image' || type === 'video') {\n // // 只更新背景边框\n // const rect = cell.firstChild as Rect;\n // rect.setAttribute('width', cell.attribute.width);\n updateImageCellContentWhileResize(cellGroup, col, row, detaX, 0, scene.table);\n } else if (cellGroup.firstChild?.name === 'axis') {\n // recreate axis component\n const axisConfig = scene.table.internalProps.layoutMap.getAxisConfigInPivotChart(col, row);\n const cellStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', cellStyle, col, row, scene.table));\n if (axisConfig) {\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n scene.table\n );\n cellGroup.clear();\n cellGroup.appendChild(axis.component);\n axis.overlap();\n }\n } else if (cell.firstChild?.name === 'axis') {\n (cell.firstChild as any)?.originAxis.resize(cell.attribute.width, cell.attribute.height);\n } else {\n let renderDefault = true;\n const customContainer =\n (cell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n if (customContainer) {\n // fix for custom component flash\n // if (scene.table.reactCustomLayout) {\n // scene.table.reactCustomLayout.removeCustomCell(col, row);\n // }\n // customContainer.removeAllChild();\n let customElementsGroup;\n cell.removeChild(customContainer);\n\n const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);\n if (customMergeRange) {\n for (let mergeCol = customMergeRange.start.col; mergeCol <= customMergeRange.end.col; mergeCol++) {\n if (mergeCol === col) {\n continue;\n }\n const mergedCell = scene.getCell(mergeCol, row);\n const customContainer =\n (mergedCell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (mergedCell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n customContainer.removeAllChild();\n mergedCell.removeChild(customContainer);\n getCustomCellMergeCustom(mergeCol, row, mergedCell, scene.table);\n }\n } else {\n let customRender;\n let customLayout;\n const cellType = scene.table.getCellLocation(col, row);\n const { vtableMerge } = scene.table.getCellRawRecord(col, row) || {};\n\n if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;\n } else if (cellType !== 'body') {\n const define = scene.table.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = scene.table.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || scene.table.customRender;\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n\n if ((customRender || customLayout) && isMergeCellGroup(cellGroup)) {\n for (let mergeCol = cellGroup.mergeStartCol; mergeCol <= cellGroup.mergeEndCol; mergeCol++) {\n if (mergeCol !== col) {\n for (let mergeRow = cellGroup.mergeStartRow; mergeRow <= cellGroup.mergeEndRow; mergeRow++) {\n scene.updateCellContent(mergeCol, mergeRow);\n }\n }\n }\n }\n\n if (customLayout || customRender) {\n // const { autoRowHeight } = table.internalProps;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n let width = cellGroup.attribute.width;\n let height = cellGroup.attribute.height;\n if (isMergeCellGroup(cellGroup)) {\n width = scene.table.getColsWidth(cellGroup.mergeStartCol, cellGroup.mergeEndCol);\n height = scene.table.getRowsHeight(cellGroup.mergeStartRow, cellGroup.mergeEndRow);\n }\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n width,\n height,\n false,\n scene.table.isAutoRowHeight(row),\n padding,\n isMergeCellGroup(cellGroup)\n ? {\n start: { col: cellGroup.mergeStartCol, row: cellGroup.mergeStartRow },\n end: { col: cellGroup.mergeEndCol, row: cellGroup.mergeEndRow }\n }\n : undefined,\n scene.table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n isHeightChange = true;\n }\n\n if (cell.childrenCount > 0 && customElementsGroup) {\n cell.insertBefore(customElementsGroup, cell.firstChild);\n } else if (customElementsGroup) {\n cell.appendChild(customElementsGroup);\n }\n }\n }\n const cellChange = updateMergeCellContentWidth(\n cellGroup,\n distWidth,\n detaX,\n autoRowHeight,\n renderDefault,\n scene.table\n );\n isHeightChange = isHeightChange || cellChange;\n }\n if (!autoWrapText) {\n const style = scene.table._getCellStyle(col, row);\n autoWrapText = style.autoWrapText;\n }\n return autoRowHeight && autoWrapText ? isHeightChange : false;\n}\n\nfunction updateMergeCellContentWidth(\n cellGroup: Group,\n distWidth: number,\n detaX: number,\n autoRowHeight: boolean,\n renderDefault: boolean,\n table: BaseTableAPI\n) {\n if (isMergeCellGroup(cellGroup)) {\n distWidth = 0;\n let isHeightChange = false;\n for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {\n distWidth += table.getColWidth(col);\n }\n let cellHeight = 0;\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n cellHeight += table.getRowHeight(row);\n }\n\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n if (col === cellGroup.col && row !== cellGroup.row) {\n continue;\n }\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n singleCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n let changed = false;\n if (renderDefault) {\n // 处理文字\n // const style = table._getCellStyle(col, row);\n const style = table._getCellStyle(colStart, rowStart);\n const padding = getQuadProps(getProp('padding', style, col, row, table));\n\n const textAlign = style.textAlign;\n const textBaseline = style.textBaseline;\n changed = updateCellContentWidth(\n singleCellGroup,\n distWidth,\n cellHeight,\n detaX,\n autoRowHeight,\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n\n // reset hierarchy offset\n const hierarchyOffset = getHierarchyOffset(singleCellGroup.col, singleCellGroup.row, table);\n if (hierarchyOffset) {\n const text = singleCellGroup.getChildByName('text');\n const icon = singleCellGroup.getChildByName('expand') || singleCellGroup.getChildByName('collapse');\n // icon-left deal with hierarchy offset, no need add to text dx\n if (icon?.role !== 'icon-left' && text) {\n text.setAttribute('dx', hierarchyOffset);\n }\n }\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n // const { width: contentWidth } = cellGroup.attribute;\n singleCellGroup.contentWidth = distWidth;\n\n const { heightChange } = resizeCellGroup(\n singleCellGroup,\n rangeWidth,\n rangeHeight,\n {\n start: {\n col: cellGroup.mergeStartCol,\n row: cellGroup.mergeStartRow\n },\n end: {\n col: cellGroup.mergeEndCol,\n row: cellGroup.mergeEndRow\n }\n },\n table\n );\n\n if (heightChange) {\n singleCellGroup.needUpdateHeight = true;\n }\n\n isHeightChange = isHeightChange || changed;\n }\n }\n return isHeightChange;\n }\n\n // 处理文字\n const style = table._getCellStyle(cellGroup.col, cellGroup.row);\n const padding = getQuadProps(getProp('padding', style, cellGroup.col, cellGroup.row, table));\n const textAlign = style.textAlign;\n const textBaseline = style.textBaseline;\n return updateCellContentWidth(\n cellGroup,\n distWidth,\n table.getRowHeight(cellGroup.row),\n detaX,\n autoRowHeight,\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n}\n\n/**\n * @description: 重置指定行行高\n * @param {Scenegraph} scene\n * @param {number} row\n * @return {*}\n */\nfunction resetRowHeight(scene: Scenegraph, row: number) {\n // 获取高度\n const maxHeight = Math.round(computeRowHeight(row, 0, scene.table.colCount - 1, scene.table));\n // 更新table行高存储\n scene.table._setRowHeight(row, maxHeight, true);\n\n // 更新高度\n for (let col = 0; col < scene.table.colCount; col++) {\n const distHeight = maxHeight;\n const cell = scene.highPerformanceGetCell(col, row);\n if (cell.role === 'empty') {\n continue;\n }\n\n updateCellHeightForRow(\n scene,\n cell,\n col,\n row,\n distHeight,\n distHeight - cell.attribute.height,\n scene.table.isHeader(col, row)\n );\n }\n}\n","import type { Cursor } from './../../vrender';\nimport { Icon } from '../graphic/icon';\nimport * as icons from '../../icons';\nimport type { SvgIcon } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\n\nconst regedIcons = icons.get();\n\nexport class DrillIcon {\n icon: Icon;\n\n constructor() {\n const iconOption = regedIcons.drillDown as SvgIcon;\n this.icon = new Icon({\n x: -1000,\n y: -1000,\n image: iconOption.svg,\n width: iconOption.width,\n height: iconOption.height,\n dx: -iconOption.width / 2,\n dy: -iconOption.height / 2,\n visible: false,\n funcType: iconOption.funcType,\n cursor: iconOption.cursor as Cursor\n });\n this.icon.role = 'icon-drill';\n }\n\n appand(parent: Group) {\n parent.appendChild(this.icon);\n }\n\n update(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean, scene: Scenegraph) {\n if (!visible || (drillDown && drillUp)) {\n this.icon.setAttributes({\n x: -1000,\n y: -1000,\n visible: false\n });\n scene.updateNextFrame();\n return;\n }\n\n const drillDownOption = regedIcons.drillDown as SvgIcon;\n const drillUpOption = regedIcons.drillUp as SvgIcon;\n this.icon.setAttributes({\n x,\n y,\n image: drillDown ? drillDownOption.svg : drillUpOption.svg,\n visible: true\n });\n this.icon.loadImage(this.icon.attribute.image);\n scene.updateNextFrame();\n }\n}\n","import type { ILine, IRect, ISymbol } from './../../vrender';\nimport { createLine, createRect, createSymbol } from './../../vrender';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport type { Group } from '../graphic/group';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\n\nexport class CellMover {\n columnMoverLabel: ISymbol;\n columnMoverLine: ILine;\n columnMoverBack: IRect;\n table: BaseTableAPI;\n x?: number;\n\n constructor(table: BaseTableAPI) {\n const columnMoverLineWidth = table.theme.dragHeaderSplitLine.lineWidth;\n const columnMoverLineColor = table.theme.dragHeaderSplitLine.lineColor;\n const columnMoverShadowBlockColor = table.theme.dragHeaderSplitLine.shadowBlockColor;\n\n this.columnMoverLabel = createSymbol({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n symbolType: 'triangle',\n fill: columnMoverLineColor as string\n });\n this.columnMoverLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnMoverLineColor as string,\n lineWidth: columnMoverLineWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n // 列顺序调整阴影块\n this.columnMoverBack = createRect({\n visible: false,\n pickable: false,\n fill: columnMoverShadowBlockColor,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n\n this.table = table;\n }\n\n appand(parent: Group) {\n parent.appendChild(this.columnMoverLabel);\n parent.appendChild(this.columnMoverLine);\n parent.appendChild(this.columnMoverBack);\n }\n\n show(col: number, row: number, delta: number) {\n const cellLocation = this.table.getCellLocation(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n col = mergeInfo.start.col;\n row = mergeInfo.start.row;\n }\n\n let rectX = 0;\n let rectY = 0;\n let rectWidth = 0;\n let rectHeight = 0;\n let rectDx = 0;\n let rectDy = 0;\n let symbolX = 0;\n let symbolY = 0;\n let symbolRotate = Math.PI;\n const linePoints: { x: number; y: number }[] = [];\n if (cellLocation === 'columnHeader') {\n rectX = this.table.getColsWidth(0, col - 1) - this.table.stateManager.scroll.horizontalBarPos;\n rectY = this.table.getRowsHeight(0, this.table.frozenRowCount - 1);\n rectHeight = this.table.tableNoFrameHeight;\n if (mergeInfo) {\n rectWidth = this.table.getColsWidth(mergeInfo.start.col, mergeInfo.end.col);\n } else {\n rectWidth = this.table.getColWidth(col);\n }\n rectDx = rectX - delta;\n\n symbolX = rectX + rectWidth;\n symbolY = 2;\n\n linePoints.push({ x: 0, y: 0 });\n linePoints.push({ x: 0, y: this.table.tableNoFrameHeight });\n } else if (\n cellLocation === 'rowHeader' ||\n (this.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ) {\n rectY = this.table.getRowsHeight(0, row - 1) - this.table.stateManager.scroll.verticalBarPos;\n rectX = this.table.getColsWidth(0, this.table.frozenColCount - 1);\n rectWidth = this.table.tableNoFrameWidth;\n if (mergeInfo) {\n rectHeight = this.table.getRowsHeight(mergeInfo.start.row, mergeInfo.end.row);\n } else {\n rectHeight = this.table.getRowHeight(row);\n }\n rectDy = rectY - delta;\n\n symbolX = 2;\n symbolY = rectY + rectHeight;\n symbolRotate = Math.PI / 2;\n\n linePoints.push({ x: 0, y: 0 });\n linePoints.push({ x: this.table.tableNoFrameWidth, y: 0 });\n }\n\n this.columnMoverBack.setAttributes({\n visible: true,\n x: rectX - rectDx,\n y: rectY - rectDy,\n width: rectWidth,\n height: rectHeight,\n dx: rectDx,\n dy: rectDy\n });\n this.columnMoverLine.setAttributes({\n x: symbolX,\n y: symbolY,\n visible: true,\n points: linePoints\n });\n this.columnMoverLabel.setAttributes({\n visible: true,\n x: symbolX,\n y: symbolY,\n angle: symbolRotate\n });\n return {\n backX: rectX - rectDx,\n lineX: symbolX,\n backY: rectY - rectDy,\n lineY: symbolY\n };\n }\n\n hide() {\n this.columnMoverLabel.setAttribute('visible', false);\n this.columnMoverLine.setAttribute('visible', false);\n this.columnMoverBack.setAttribute('visible', false);\n }\n\n update(backX: number | undefined, lineX: number | undefined, backY: number | undefined, lineY: number | undefined) {\n if (typeof backX === 'number' && typeof lineX === 'number') {\n this.columnMoverLabel.setAttribute('x', lineX);\n this.columnMoverLine.setAttribute('x', lineX);\n this.columnMoverBack.setAttribute('x', backX);\n } else if (typeof backY === 'number' && typeof lineY === 'number') {\n this.columnMoverLabel.setAttribute('y', lineY);\n this.columnMoverLine.setAttribute('y', lineY);\n this.columnMoverBack.setAttribute('y', backY);\n }\n }\n\n updateStyle() {\n const columnMoverLineWidth = this.table.theme.dragHeaderSplitLine.lineWidth;\n const columnMoverLineColor = this.table.theme.dragHeaderSplitLine.lineColor;\n const columnMoverShadowBlockColor = this.table.theme.dragHeaderSplitLine.shadowBlockColor;\n\n this.columnMoverLabel.setAttributes({\n fill: columnMoverLineColor as string\n });\n this.columnMoverLine.setAttributes({\n stroke: columnMoverLineColor as string,\n lineWidth: columnMoverLineWidth as number\n });\n\n // 列顺序调整阴影块\n this.columnMoverBack.setAttributes({\n fill: columnMoverShadowBlockColor\n });\n }\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function getColX(col: number, table: BaseTableAPI, isRightFrozen?: boolean) {\n if (isRightFrozen) {\n return Math.min(table.tableNoFrameWidth, table.getAllColsWidth()) - table.getColsWidth(col, table.colCount - 1);\n }\n let colX = table.getColsWidth(0, col);\n if (col >= table.frozenColCount) {\n colX -= table.scrollLeft;\n }\n return colX;\n}\n\nexport function getRowY(row: number, table: BaseTableAPI, isBottomFrozen?: boolean) {\n if (isBottomFrozen) {\n return Math.min(table.tableNoFrameWidth, table.getAllRowsHeight()) - table.getRowsHeight(row, table.rowCount - 1);\n }\n let rowY = table.getRowsHeight(0, row);\n if (row >= table.frozenRowCount) {\n rowY -= table.scrollTop;\n }\n return rowY;\n}\n","import { theme } from './../../themes';\nimport type { ILine, IRect, IGroup, FederatedPointerEvent, Text, IText } from './../../vrender';\nimport { createRect, createLine, createText, createGroup, createSymbol } from './../../vrender';\nimport { ScrollBar } from '@visactor/vrender-components';\nimport type { Group } from '../graphic/group';\nimport { MenuHandler } from './menu';\nimport { DrillIcon } from './drill-icon';\nimport { CellMover } from './cell-mover';\nimport { getColX, getRowY } from './util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isValid } from '@visactor/vutils';\n\n/**\n * @description: 表格内容外组件\n * @return {*}\n */\nexport class TableComponent {\n table: BaseTableAPI;\n\n border: IRect; // 表格外边框\n // selectBorder: IRect; // 表格选择区域边框\n columnResizeLine: ILine; // 表格列宽调整基准线\n columnResizeBgLine: ILine; // 表格列宽调整基准线背景\n columnResizeLabel: IGroup; // 表格列宽调整标记\n rowResizeLine: ILine; // 表格列宽调整基准线\n rowResizeBgLine: ILine; // 表格列宽调整基准线背景\n rowResizeLabel: IGroup; // 表格列宽调整标记\n menu: MenuHandler; // 表格菜单\n vScrollBar: ScrollBar; // 表格横向滚动条\n hScrollBar: ScrollBar; // 表格纵向滚动条\n frozenShadowLine: IRect; // 表格冻结列右侧阴影块\n rightFrozenShadowLine: IRect; // 表格右侧冻结列左侧阴影块\n drillIcon: DrillIcon; // drill icon\n cellMover: CellMover; // 表格列顺序调整标记\n labelVisible: boolean; // 是否显示label\n constructor(table: BaseTableAPI) {\n this.table = table;\n const theme = this.table.theme;\n\n // 滚动条\n this.createScrollBar();\n\n // 列宽调整基准线\n const columnResizeColor = theme.columnResize?.lineColor;\n const columnResizeWidth = theme.columnResize?.lineWidth;\n const columnResizeBgColor = theme.columnResize?.bgColor;\n const columnResizeBgWidth = theme.columnResize?.width;\n const labelVisible = theme.columnResize?.labelVisible ?? true;\n const labelColor = theme.columnResize?.labelColor;\n const labelFontSize = theme.columnResize?.labelFontSize;\n const labelFontFamily = theme.columnResize?.labelFontFamily;\n const labelBackgroundFill = theme.columnResize?.labelBackgroundFill;\n const labelBackgroundCornerRadius = theme.columnResize?.labelBackgroundCornerRadius;\n\n this.labelVisible = labelVisible;\n\n this.columnResizeLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n this.columnResizeBgLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number,\n x: 0,\n y: 0,\n // dx: -(columnResizeBgWidth - columnResizeWidth) / 2,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n const columnResizeLabelText = createText({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n text: '',\n textBaseline: 'top',\n dx: 12 + 4,\n dy: -labelFontSize / 2\n });\n const columnResizeLabelBack = createRect({\n visible: false,\n pickable: false,\n fill: labelBackgroundFill,\n x: 0,\n y: 0,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dx: 12,\n dy: -labelFontSize / 2 - 4\n });\n this.columnResizeLabel = createGroup({\n visible: false,\n pickable: false,\n x: 0,\n y: 0\n });\n this.columnResizeLabel.appendChild(columnResizeLabelBack);\n this.columnResizeLabel.appendChild(columnResizeLabelText);\n\n this.rowResizeLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n this.rowResizeBgLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number,\n x: 0,\n y: 0,\n // dx: -(columnResizeBgWidth - columnResizeWidth) / 2,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n // 列宽调整文字标签\n const rowResizeLabelText = createText({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n text: '',\n textBaseline: 'top',\n dx: 12 + 4,\n dy: -labelFontSize / 2\n });\n const rowResizeLabelBack = createRect({\n visible: false,\n pickable: false,\n fill: labelBackgroundFill,\n x: 0,\n y: 0,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dx: 12,\n dy: -labelFontSize / 2 - 4\n });\n this.rowResizeLabel = createGroup({\n visible: false,\n pickable: false,\n x: 0,\n y: 0\n });\n this.rowResizeLabel.appendChild(rowResizeLabelBack);\n this.rowResizeLabel.appendChild(rowResizeLabelText);\n // 列顺序调整基准线\n this.cellMover = new CellMover(this.table);\n\n // 冻结列阴影\n const shadowWidth = theme.frozenColumnLine?.shadow?.width;\n const shadowStartColor = theme.frozenColumnLine?.shadow?.startColor;\n const shadowEndColor = theme.frozenColumnLine?.shadow?.endColor;\n this.frozenShadowLine = createRect({\n visible: true,\n pickable: false,\n x: 0,\n y: 0,\n width: shadowWidth,\n height: 0,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowStartColor, offset: 0 },\n { color: shadowEndColor, offset: 1 }\n ]\n }\n });\n this.rightFrozenShadowLine = createRect({\n visible: true,\n pickable: false,\n x: 0,\n y: 0,\n width: shadowWidth,\n height: 0,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowEndColor, offset: 0 },\n { color: shadowStartColor, offset: 1 }\n ]\n }\n });\n\n // TO BE DONE 冻结列border(theme.frozenColumnLine?.border)\n\n // 弹出窗口\n // this.menu = createGroup({\n // visible: false,\n // pickable: false,\n // x: 0,\n // y: 0,\n // });\n this.menu = new MenuHandler(this.table);\n\n this.drillIcon = new DrillIcon();\n }\n\n /**\n * @description: 组件mark加入到容器Group中\n * @param {Group} componentGroup\n * @return {*}\n */\n addToGroup(componentGroup: Group) {\n componentGroup.addChild(this.frozenShadowLine);\n componentGroup.addChild(this.rightFrozenShadowLine);\n // componentGroup.addChild(this.selectBorder);\n componentGroup.addChild(this.columnResizeBgLine);\n componentGroup.addChild(this.columnResizeLine);\n componentGroup.addChild(this.columnResizeLabel);\n componentGroup.addChild(this.rowResizeBgLine);\n componentGroup.addChild(this.rowResizeLine);\n componentGroup.addChild(this.rowResizeLabel);\n\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n if (hoverOn && !this.table.theme.scrollStyle.barToSide) {\n componentGroup.addChild(this.hScrollBar);\n componentGroup.addChild(this.vScrollBar);\n } else {\n componentGroup.stage.defaultLayer.addChild(this.hScrollBar);\n componentGroup.stage.defaultLayer.addChild(this.vScrollBar);\n\n // // add scroll bar before border, avoid scroll hide by border globalCompositeOperation\n // componentGroup.stage.defaultLayer.insertBefore(this.vScrollBar, componentGroup.stage.defaultLayer.firstChild);\n // componentGroup.stage.defaultLayer.insertBefore(this.hScrollBar, componentGroup.stage.defaultLayer.firstChild);\n }\n this.menu.bindTableComponent(componentGroup);\n this.drillIcon.appand(componentGroup);\n this.cellMover.appand(componentGroup);\n }\n\n /**\n * @description: 创建滚动条组件\n * @return {*}\n */\n createScrollBar() {\n const theme = this.table.theme;\n const scrollRailColor = theme.scrollStyle?.scrollRailColor as string;\n const scrollSliderColor = theme.scrollStyle?.scrollSliderColor as string;\n const scrollSliderCornerRadius = theme.scrollStyle?.scrollSliderCornerRadius;\n const width = theme.scrollStyle?.width as number;\n const horizontalPadding = theme.scrollStyle?.horizontalPadding;\n const verticalPadding = theme.scrollStyle?.verticalPadding;\n\n let sliderStyle;\n if (isValid(scrollSliderCornerRadius)) {\n sliderStyle = {\n cornerRadius: scrollSliderCornerRadius,\n fill: scrollSliderColor\n };\n } else {\n sliderStyle = {\n fill: scrollSliderColor\n };\n }\n // const visible = theme.scrollStyle?.visible as string;\n // const hoverOn = theme.scrollStyle?.hoverOn as boolean;\n\n this.hScrollBar = new ScrollBar({\n direction: 'horizontal',\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width: this.table.tableNoFrameWidth,\n height: width,\n padding: horizontalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle,\n range: [0, 0.1],\n // scrollRange: [0.4, 0.8]\n visible: false\n });\n // hack方案实现初始化隐藏滚动条,也可以add到stage之后执行hideAll\n (this.hScrollBar as any).render();\n this.hScrollBar.hideAll();\n\n this.vScrollBar = new ScrollBar({\n direction: 'vertical',\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width,\n height: this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight(),\n padding: verticalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle,\n range: [0, 0.1],\n visible: false\n });\n (this.vScrollBar as any).render();\n this.vScrollBar.hideAll();\n }\n\n /**\n * @description: 更新滚动条尺寸\n * @return {*}\n */\n updateScrollBar() {\n const oldHorizontalBarPos = this.table.stateManager.scroll.horizontalBarPos;\n const oldVerticalBarPos = this.table.stateManager.scroll.verticalBarPos;\n\n const theme = this.table.theme;\n const width = theme.scrollStyle?.width as number;\n const visible1 = theme.scrollStyle?.visible as string;\n const horizontalVisible = theme.scrollStyle?.horizontalVisible ?? visible1;\n const verticalVisible = theme.scrollStyle?.verticalVisible ?? visible1;\n // const hoverOn = theme.scrollStyle?.hoverOn as boolean;\n const tableWidth = Math.ceil(this.table.scenegraph.tableGroup.attribute.width);\n const tableHeight = Math.ceil(this.table.scenegraph.tableGroup.attribute.height);\n\n const totalHeight = this.table.getAllRowsHeight();\n const totalWidth = this.table.getAllColsWidth();\n const frozenRowsHeight = this.table.getFrozenRowsHeight();\n const frozenColsWidth = this.table.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.table.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.table.getRightFrozenColsWidth();\n\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n if (totalWidth > tableWidth + sizeTolerance) {\n const y = Math.min(tableHeight, totalHeight);\n const rangeEnd = Math.max(0.05, (tableWidth - frozenColsWidth) / (totalWidth - frozenColsWidth));\n\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n\n let attrY = 0;\n if (this.table.theme.scrollStyle.barToSide) {\n attrY =\n this.table.tableNoFrameHeight -\n (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y) +\n this.table.tableY;\n } else {\n attrY = y - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y);\n }\n\n this.hScrollBar.setAttributes({\n x: frozenColsWidth + (!hoverOn ? this.table.scenegraph.tableGroup.attribute.x : 0),\n y: attrY,\n width: tableWidth - frozenColsWidth - rightFrozenColsWidth,\n range: [0, rangeEnd],\n visible: horizontalVisible === 'always'\n });\n const bounds = this.hScrollBar.AABBBounds && this.hScrollBar.globalAABBBounds;\n (this.hScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n if (horizontalVisible === 'always') {\n this.hScrollBar.showAll();\n }\n } else {\n this.hScrollBar.setAttributes({\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width: 0,\n visible: false\n });\n }\n\n if (totalHeight > tableHeight + sizeTolerance) {\n const x = Math.min(tableWidth, totalWidth);\n const rangeEnd = Math.max(0.05, (tableHeight - frozenRowsHeight) / (totalHeight - frozenRowsHeight));\n\n let attrX = 0;\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n\n if (this.table.theme.scrollStyle.barToSide) {\n attrX =\n this.table.tableNoFrameWidth -\n (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.x) +\n this.table.tableX;\n } else {\n attrX = x - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.x);\n }\n\n this.vScrollBar.setAttributes({\n x: attrX,\n y: frozenRowsHeight + (!hoverOn ? this.table.scenegraph.tableGroup.attribute.y : 0),\n height: tableHeight - frozenRowsHeight - bottomFrozenRowsHeight,\n range: [0, rangeEnd],\n visible: verticalVisible === 'always'\n });\n const bounds = this.vScrollBar.AABBBounds && this.vScrollBar.globalAABBBounds;\n (this.vScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n\n if (verticalVisible === 'always') {\n this.vScrollBar.showAll();\n }\n } else {\n this.vScrollBar.setAttributes({\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n height: 0,\n visible: false\n });\n }\n\n this.table.stateManager.setScrollLeft(oldHorizontalBarPos);\n this.table.stateManager.setScrollTop(oldVerticalBarPos);\n }\n\n /**\n * @description: 隐藏列宽调整组件\n * @return {*}\n */\n hideResizeCol() {\n // this.columnResizeLine.attribute.visible = false;\n this.columnResizeLine.setAttribute('visible', false);\n this.columnResizeBgLine.setAttribute('visible', false);\n this.columnResizeLabel.setAttribute('visible', false);\n this.columnResizeLabel.hideAll();\n }\n\n /**\n * @description: 显示列宽调整组件\n * @param {number} col\n * @param {number} y\n * @return {*}\n */\n showResizeCol(col: number, y: number, isRightFrozen?: boolean) {\n // this.columnResizeLine.attribute.visible = false;\n // 基准线\n const colX = getColX(col, this.table, isRightFrozen);\n this.columnResizeLine.setAttributes({\n visible: true,\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) }\n ]\n });\n this.columnResizeBgLine.setAttributes({\n visible: true,\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) }\n ]\n });\n\n // 标签\n // this.columnResizeLabel.setAttribute('visible', true);\n if (this.labelVisible) {\n this.columnResizeLabel.showAll();\n this.columnResizeLabel.setAttributes({\n visible: true,\n x: colX,\n y\n });\n (this.columnResizeLabel.lastChild as Text).setAttribute('text', `${this.table.getColWidth(col)}px`);\n }\n }\n\n /**\n * @description: 更新列宽调整组件\n * @param {number} col\n * @param {number} y 标签显示的y坐标\n * @return {*}\n */\n updateResizeCol(col: number, y: number, isRightFrozen?: boolean) {\n // 基准线\n const colX = getColX(col, this.table, isRightFrozen);\n // this.columnResizeLine.setAttribute('x', x);\n this.columnResizeLine.setAttributes({\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) } // todo: 优化points赋值\n ]\n });\n this.columnResizeBgLine.setAttributes({\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) } // todo: 优化points赋值\n ]\n });\n\n // 标签\n if (this.labelVisible) {\n this.columnResizeLabel.setAttributes({\n x: colX,\n y\n });\n (this.columnResizeLabel.lastChild as Text).setAttribute('text', `${Math.floor(this.table.getColWidth(col))}px`);\n }\n }\n\n /**\n * @description: 隐藏列宽调整组件\n * @return {*}\n */\n hideResizeRow() {\n // this.columnResizeLine.attribute.visible = false;\n this.rowResizeLine.setAttribute('visible', false);\n this.rowResizeBgLine.setAttribute('visible', false);\n this.rowResizeLabel.setAttribute('visible', false);\n this.rowResizeLabel.hideAll();\n }\n\n /**\n * @description: 显示列宽调整组件\n * @param {number} col\n * @param {number} y\n * @return {*}\n */\n showResizeRow(row: number, x: number, isRightFrozen?: boolean) {\n // 基准线\n const rowY = getRowY(row, this.table, isRightFrozen);\n this.rowResizeLine.setAttributes({\n visible: true,\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) }\n ]\n });\n this.rowResizeBgLine.setAttributes({\n visible: true,\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) }\n ]\n });\n\n if (this.labelVisible) {\n // 标签\n this.rowResizeLabel.showAll();\n this.rowResizeLabel.setAttributes({\n visible: true,\n y: rowY,\n x\n });\n (this.rowResizeLabel.lastChild as Text).setAttribute('text', `${this.table.getRowHeight(row)}px`);\n }\n }\n\n /**\n * @description: 更新列宽调整组件\n * @param {number} col\n * @param {number} y 标签显示的y坐标\n * @return {*}\n */\n updateResizeRow(row: number, x: number, isBottomFrozen?: boolean) {\n // 基准线\n const rowY = getRowY(row, this.table, isBottomFrozen);\n // this.columnResizeLine.setAttribute('x', x);\n this.rowResizeLine.setAttributes({\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) } // todo: 优化points赋值\n ]\n });\n this.rowResizeBgLine.setAttributes({\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) } // todo: 优化points赋值\n ]\n });\n\n if (this.labelVisible) {\n // 标签\n this.rowResizeLabel.setAttributes({\n y: rowY,\n x\n });\n (this.rowResizeLabel.lastChild as Text).setAttribute('text', `${Math.floor(this.table.getRowHeight(row))}px`);\n }\n }\n\n /**\n * @description: 隐藏列顺序调整组件\n * @return {*}\n */\n hideMoveCol() {\n this.cellMover.hide();\n }\n\n /**\n * @description: 显示列顺序调整组件\n * @param {number} col\n * @param {number} x\n * @return {*}\n */\n showMoveCol(col: number, row: number, delta: number) {\n return this.cellMover.show(col, row, delta);\n }\n\n /**\n * @description: 更新列顺序调整组件\n * @param {number} backX\n * @param {number} lineX\n * @return {*}\n */\n updateMoveCol(backX: number, lineX: number, backY: number, lineY: number) {\n this.cellMover.update(backX, lineX, backY, lineY);\n }\n\n /**\n * @description: 显示冻结列shadow\n * @param {number} col\n * @return {*}\n */\n setFrozenColumnShadow(col: number, isRightFrozen?: boolean) {\n if (col < 0) {\n this.frozenShadowLine.setAttributes({\n visible: false\n });\n } else {\n // const colX = this.table.getColsWidth(0, col);\n const colX = getColX(col, this.table, isRightFrozen);\n this.frozenShadowLine.setAttributes({\n visible: true,\n x: colX,\n height: this.table.getDrawRange().height\n });\n }\n }\n\n /**\n * @description: 显示右侧冻结列shadow\n * @param {number} col\n * @return {*}\n */\n setRightFrozenColumnShadow(col: number) {\n if (col >= this.table.colCount) {\n this.rightFrozenShadowLine.setAttributes({\n visible: false\n });\n } else {\n // const colX = this.table.getColsWidth(0, col);\n const colX = getColX(col, this.table, true);\n this.rightFrozenShadowLine.setAttributes({\n visible: true,\n x: colX - this.rightFrozenShadowLine.attribute.width,\n height: this.table.getDrawRange().height\n });\n }\n }\n\n hideVerticalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const verticalVisible = this.table.theme.scrollStyle.verticalVisible ?? visible1;\n if (verticalVisible !== 'focus' && verticalVisible !== 'scrolling') {\n return;\n }\n this.vScrollBar.setAttribute('visible', false);\n this.vScrollBar.hideAll();\n this.table.scenegraph.updateNextFrame();\n }\n showVerticalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const verticalVisible = this.table.theme.scrollStyle.verticalVisible ?? visible1;\n if (verticalVisible !== 'focus' && verticalVisible !== 'scrolling') {\n return;\n }\n this.vScrollBar.setAttribute('visible', true);\n this.vScrollBar.showAll();\n this.table.scenegraph.updateNextFrame();\n }\n hideHorizontalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const horizontalVisible = this.table.theme.scrollStyle.horizontalVisible ?? visible1;\n if (horizontalVisible !== 'focus' && horizontalVisible !== 'scrolling') {\n return;\n }\n this.hScrollBar.setAttribute('visible', false);\n this.hScrollBar.hideAll();\n this.table.scenegraph.updateNextFrame();\n }\n showHorizontalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const horizontalVisible = this.table.theme.scrollStyle.horizontalVisible ?? visible1;\n if (horizontalVisible !== 'focus' && horizontalVisible !== 'scrolling') {\n return;\n }\n this.hScrollBar.setAttribute('visible', true);\n this.hScrollBar.showAll();\n this.table.scenegraph.updateNextFrame();\n }\n updateVerticalScrollBarPos(topRatio: number) {\n const range = this.vScrollBar.attribute.range;\n const size = range[1] - range[0];\n const range0 = topRatio * (1 - size);\n this.vScrollBar.setAttribute('range', [range0, range0 + size]);\n const bounds = this.vScrollBar.AABBBounds && this.vScrollBar.globalAABBBounds;\n (this.vScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n }\n updateHorizontalScrollBarPos(leftRatio: number) {\n const range = this.hScrollBar.attribute.range;\n const size = range[1] - range[0];\n const range0 = leftRatio * (1 - size);\n this.hScrollBar.setAttribute('range', [range0, range0 + size]);\n const bounds = this.hScrollBar.AABBBounds && this.hScrollBar.globalAABBBounds;\n (this.hScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n }\n\n updateStyle() {\n const theme = this.table.theme;\n\n // scrollbar\n const scrollRailColor = theme.scrollStyle?.scrollRailColor as string;\n const scrollSliderColor = theme.scrollStyle?.scrollSliderColor as string;\n const scrollSliderCornerRadius = theme.scrollStyle?.scrollSliderCornerRadius;\n const width = theme.scrollStyle?.width as number;\n const horizontalPadding = theme.scrollStyle?.horizontalPadding;\n const verticalPadding = theme.scrollStyle?.verticalPadding;\n\n let sliderStyle;\n if (isValid(scrollSliderCornerRadius)) {\n sliderStyle = {\n cornerRadius: scrollSliderCornerRadius,\n fill: scrollSliderColor\n };\n } else {\n sliderStyle = {\n fill: scrollSliderColor\n };\n }\n this.hScrollBar.setAttributes({\n height: width,\n padding: horizontalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle\n });\n\n this.vScrollBar.setAttributes({\n width,\n padding: verticalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle\n });\n\n // columnResizeLine & columnResizeBgLine\n const columnResizeColor = theme.columnResize?.lineColor;\n const columnResizeWidth = theme.columnResize?.lineWidth;\n const columnResizeBgColor = theme.columnResize?.bgColor;\n const columnResizeBgWidth = theme.columnResize?.width;\n\n this.columnResizeLine.setAttributes({\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number\n });\n this.columnResizeBgLine = createLine({\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number\n });\n\n const labelColor = theme.columnResize?.labelColor;\n const labelFontSize = theme.columnResize?.labelFontSize;\n const labelFontFamily = theme.columnResize?.labelFontFamily;\n const labelBackgroundFill = theme.columnResize?.labelBackgroundFill;\n const labelBackgroundCornerRadius = theme.columnResize?.labelBackgroundCornerRadius;\n const labelVisible = theme.columnResize?.labelVisible ?? true;\n this.labelVisible = labelVisible;\n\n // columnResizeLabelBack\n (this.columnResizeLabel.lastChild as IText).setAttributes({\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n dy: -labelFontSize / 2\n });\n // columnResizeLabelText\n (this.columnResizeLabel.firstChild as IRect).setAttributes({\n fill: labelBackgroundFill,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dy: -labelFontSize / 2 - 4\n });\n\n // rowResizeLabelBack\n (this.rowResizeLabel.lastChild as IText).setAttributes({\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n dy: -labelFontSize / 2\n });\n // rowResizeLabelText\n (this.rowResizeLabel.firstChild as IRect).setAttributes({\n fill: labelBackgroundFill,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dy: -labelFontSize / 2 - 4\n });\n\n // frozenShadowLine\n const shadowWidth = theme.frozenColumnLine?.shadow?.width;\n const shadowStartColor = theme.frozenColumnLine?.shadow?.startColor;\n const shadowEndColor = theme.frozenColumnLine?.shadow?.endColor;\n this.frozenShadowLine.setAttributes({\n width: shadowWidth,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowStartColor, offset: 0 },\n { color: shadowEndColor, offset: 1 }\n ]\n }\n });\n this.rightFrozenShadowLine.setAttributes({\n width: shadowWidth,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowEndColor, offset: 0 },\n { color: shadowStartColor, offset: 1 }\n ]\n }\n });\n\n this.cellMover.updateStyle();\n // this.menu.updateStyle();\n // this.drillIcon.updateStyle();\n }\n}\n","import type { IGroupGraphicAttribute, IRect, IRectGraphicAttribute } from './../../vrender';\nimport { createGroup, createRect } from './../../vrender';\nimport type { TableFrameStyle } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport { isArray } from '@visactor/vutils';\nimport { getQuadProps } from '../utils/padding';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { toBoxArray } from '../../tools/helper';\n\n/**\n * @description: create frame border\n * @param {Group} group\n * @param {TableFrameStyle} frameTheme\n * @param {string} role\n * @param {[boolean, boolean, boolean, boolean]} strokeArray\n * @return {*}\n */\nexport function createFrameBorder(\n group: Group,\n frameTheme: TableFrameStyle | undefined,\n role: string,\n strokeArray: [boolean, boolean, boolean, boolean] | undefined, // to do 处理成0b001111形式\n justForXYPosition?: boolean\n) {\n if (!frameTheme) {\n return;\n }\n\n const isTableGroup = role === 'table';\n\n const {\n shadowBlur,\n shadowOffsetX,\n shadowOffsetY,\n shadowColor,\n cornerRadius,\n borderColor,\n borderLineWidth,\n borderLineDash\n } = frameTheme;\n let hasShadow = false;\n const groupAttributes: IGroupGraphicAttribute = {};\n const rectAttributes: IRectGraphicAttribute = {\n pickable: false\n };\n // 处理shadow\n if (shadowBlur && isTableGroup) {\n // 只有table才能配置shadow\n rectAttributes.shadowBlur = shadowBlur;\n rectAttributes.shadowOffsetX = shadowOffsetX;\n rectAttributes.shadowOffsetY = shadowOffsetY;\n rectAttributes.shadowColor = shadowColor;\n rectAttributes.stroke = true;\n rectAttributes.stroke = shadowColor;\n rectAttributes.lineWidth = 1;\n hasShadow = true;\n\n // rectAttributes.fill = true;\n // rectAttributes.fillOpacity = 0.01;\n }\n\n // 处理边框\n if (borderLineWidth) {\n rectAttributes.stroke = true;\n rectAttributes.fill = false;\n rectAttributes.stroke = getStroke(borderColor ?? '#E1E4E8', strokeArray, borderLineWidth);\n rectAttributes.lineWidth = borderLineWidth as number;\n borderLineDash && (rectAttributes.lineDash = borderLineDash as number[]);\n rectAttributes.lineCap = 'butt';\n }\n\n if (Array.isArray(borderColor)) {\n (rectAttributes as any).strokeArrayColor = getQuadProps(borderColor as any);\n }\n\n if (Array.isArray(borderLineWidth)) {\n (rectAttributes as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n (rectAttributes as any).lineWidth = 1;\n }\n\n if (cornerRadius) {\n rectAttributes.cornerRadius = cornerRadius;\n groupAttributes.cornerRadius = cornerRadius;\n }\n\n const borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n\n // // 处理边框引起的宽度高度变化(只对最外层tableGroup生效)\n // if (isTableGroup && (rectAttributes.shadowBlur || rectAttributes.lineWidth)) {\n // const deltaX = (rectAttributes.shadowBlur ?? 0) + (borderLeft + borderRight) / 2;\n // const deltaY = (rectAttributes.shadowBlur ?? 0) + (borderTop + borderBottom) / 2;\n\n // groupAttributes.x = deltaX;\n // groupAttributes.y = deltaY;\n // // 宽度高度在tableNoFrameWidth&tableNoFrameHeight中处理\n // // groupAttributes.width = group.attribute.width - deltaX - deltaX;\n // // groupAttributes.height = group.attribute.height - deltaY - deltaY;\n // }\n group.setAttributes(groupAttributes);\n\n if (justForXYPosition) {\n return;\n }\n\n if (rectAttributes.stroke) {\n rectAttributes.x = borderLeft / 2;\n rectAttributes.y = borderTop / 2;\n rectAttributes.pickable = false;\n if (isTableGroup) {\n if (cornerRadius) {\n if (Array.isArray(cornerRadius)) {\n const cornerRadiusArr = getQuadProps(cornerRadius);\n rectAttributes.cornerRadius = cornerRadiusArr;\n groupAttributes.cornerRadius = cornerRadiusArr;\n cornerRadiusArr[0] && (cornerRadiusArr[0] = cornerRadiusArr[0] + Math.min(borderLeft, borderTop) / 2);\n cornerRadiusArr[1] && (cornerRadiusArr[1] = cornerRadiusArr[1] + Math.min(borderTop, borderRight) / 2);\n cornerRadiusArr[2] && (cornerRadiusArr[2] = cornerRadiusArr[2] + Math.min(borderRight, borderBottom) / 2);\n cornerRadiusArr[3] && (cornerRadiusArr[3] = cornerRadiusArr[3] + Math.min(borderBottom, borderLeft) / 2);\n } else if (isArray(borderLineWidth)) {\n const cornerRadiusArr: number[] = [];\n rectAttributes.cornerRadius = cornerRadiusArr;\n groupAttributes.cornerRadius = cornerRadiusArr;\n cornerRadiusArr[0] = cornerRadius + Math.min(borderLeft, borderTop) / 2;\n cornerRadiusArr[1] = cornerRadius + Math.min(borderTop, borderRight) / 2;\n cornerRadiusArr[2] = cornerRadius + Math.min(borderRight, borderBottom) / 2;\n cornerRadiusArr[3] = cornerRadius + Math.min(borderBottom, borderLeft) / 2;\n } else {\n rectAttributes.cornerRadius = cornerRadius + (rectAttributes.lineWidth ?? 0) / 2;\n groupAttributes.cornerRadius = cornerRadius + (rectAttributes.lineWidth ?? 0) / 2;\n }\n }\n if (frameTheme.innerBorder) {\n rectAttributes.x = group.attribute.x + borderLeft / 2;\n rectAttributes.y = group.attribute.y + borderTop / 2;\n rectAttributes.width = group.attribute.width - borderLeft / 2 - borderRight / 2;\n rectAttributes.height = group.attribute.height - borderTop / 2 - borderBottom / 2;\n } else {\n rectAttributes.x = group.attribute.x - borderLeft / 2;\n rectAttributes.y = group.attribute.y - borderTop / 2;\n rectAttributes.width = group.attribute.width + borderLeft / 2 + borderRight / 2;\n rectAttributes.height = group.attribute.height + borderTop / 2 + borderBottom / 2;\n }\n\n let shadowRect;\n let borderRect;\n if (hasShadow) {\n rectAttributes.fill = 'white';\n (rectAttributes as any).notAdjustPos = true;\n // rectAttributes.globalCompositeOperation = 'source-over';\n\n // first draw group\n borderRect = createGroup(rectAttributes);\n borderRect.name = 'table-border-rect';\n\n // second draw rect\n shadowRect = createRect({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: group.attribute.width,\n height: group.attribute.height,\n fill: 'red',\n cornerRadius: group.attribute.cornerRadius,\n globalCompositeOperation: 'destination-out'\n });\n borderRect.addChild(shadowRect);\n\n // hack for vrender globalCompositeOperation&clip render problem\n const hackRect = createRect({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: group.attribute.width,\n height: group.attribute.height,\n fill: 'transparent',\n pickable: false,\n globalCompositeOperation: 'source-over'\n });\n borderRect.addChild(hackRect);\n } else {\n borderRect = createRect(rectAttributes);\n borderRect.name = 'table-border-rect';\n }\n\n // to be fixed: border index in shadow mode\n if (frameTheme.innerBorder && !hasShadow) {\n group.parent.insertAfter(borderRect, group);\n } else {\n group.parent.insertBefore(borderRect, group);\n }\n (group as any).border = borderRect;\n } else {\n // rectAttributes.x = rectAttributes.lineWidth / 2;\n // rectAttributes.y = rectAttributes.lineWidth / 2;\n rectAttributes.width = group.attribute.width - borderLeft / 2 - borderRight / 2;\n rectAttributes.height = group.attribute.height - borderTop / 2 - borderBottom / 2;\n const borderRect = createRect(rectAttributes);\n borderRect.name = 'border-rect';\n group.addChild(borderRect);\n (group as any).border = borderRect;\n }\n } else {\n const borderRect = createRect({\n fill: false,\n stroke: false,\n pickable: false,\n lineWidth: 0\n });\n borderRect.name = 'border-rect';\n group.addChild(borderRect);\n (group as any).border = borderRect;\n }\n}\n\n/**\n * @description: update frame border stroke atrribute\n * @param {Group} group\n * @param {TableFrameStyle} frameTheme\n * @param {array} strokeArray stroke boolean array\n * @return {*}\n */\nexport function updateFrameBorder(\n group: Group,\n frameTheme: TableFrameStyle | undefined,\n strokeArray?: [boolean, boolean, boolean, boolean] // to do 处理成0b001111形式\n) {\n if (!frameTheme) {\n return;\n }\n const { borderColor } = frameTheme;\n group.border?.setAttribute('stroke', getStroke(borderColor, strokeArray));\n}\n\nexport function getStroke(\n borderColor: string | string[],\n strokeArray: boolean[] | undefined,\n strokeLineWidth?: number | number[]\n) {\n let stroke: boolean | string | (boolean | string)[] = true;\n if ((strokeArray || isArray(strokeLineWidth)) && !isArray(borderColor)) {\n stroke = (strokeArray ?? (strokeLineWidth as number[])).map(stroke => {\n if (stroke) {\n return borderColor;\n }\n return false;\n });\n } else if (strokeArray) {\n stroke = strokeArray;\n } else if (!strokeArray && !isArray(borderColor)) {\n stroke = borderColor;\n } else if (isArray(borderColor)) {\n stroke = true;\n }\n return stroke;\n}\n\n/**\n * @description: update frame border size when group size change\n * @param {Group} group\n * @return {*}\n */\nexport function updateFrameBorderSize(group: Group) {\n if (!group.border) {\n return;\n }\n const borderTop = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[0]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderRight = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[1]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderBottom = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[2]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderLeft = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[3]\n : (group.border.attribute.lineWidth as number) ?? 0;\n\n group.border.setAttributes({\n width: group.attribute.width - borderLeft / 2 - borderRight / 2,\n height: group.attribute.height - borderTop / 2 - borderBottom / 2\n });\n\n if (group.border.type === 'group') {\n (group.border.firstChild as IRect).setAttributes({\n width: group.attribute.width,\n height: group.attribute.height\n });\n }\n}\n\nexport function updateCornerRadius(table: BaseTableAPI) {\n if (!table.theme.frameStyle.cornerRadius) {\n return;\n }\n const cornerRadius = table.theme.frameStyle.cornerRadius;\n const {\n cornerHeaderGroup,\n colHeaderGroup,\n rowHeaderGroup,\n bodyGroup,\n rightTopCornerGroup,\n leftBottomCornerGroup,\n rightBottomCornerGroup,\n rightFrozenGroup,\n bottomFrozenGroup\n } = table.scenegraph;\n\n // reset corner radius\n cornerHeaderGroup.setAttribute('cornerRadius', 0);\n colHeaderGroup.setAttribute('cornerRadius', 0);\n rowHeaderGroup.setAttribute('cornerRadius', 0);\n bodyGroup.setAttribute('cornerRadius', 0);\n rightTopCornerGroup.setAttribute('cornerRadius', 0);\n leftBottomCornerGroup.setAttribute('cornerRadius', 0);\n rightBottomCornerGroup.setAttribute('cornerRadius', 0);\n rightFrozenGroup.setAttribute('cornerRadius', 0);\n bottomFrozenGroup.setAttribute('cornerRadius', 0);\n\n const cornerRadiusArray = toBoxArray(cornerRadius);\n // left top\n if (cornerHeaderGroup.attribute.width > 0 && cornerHeaderGroup.attribute.height > 0) {\n setCornerRadius(cornerHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else if (colHeaderGroup.attribute.height > 0) {\n setCornerRadius(colHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else if (rowHeaderGroup.attribute.width > 0) {\n setCornerRadius(rowHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else {\n setCornerRadius(bodyGroup, [cornerRadiusArray[0], 0, 0, 0]);\n }\n\n // left bottom\n if (leftBottomCornerGroup.attribute.width > 0 && leftBottomCornerGroup.attribute.height > 0) {\n setCornerRadius(leftBottomCornerGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else if (bottomFrozenGroup.attribute.height > 0) {\n setCornerRadius(bottomFrozenGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else if (rowHeaderGroup.attribute.width > 0) {\n setCornerRadius(rowHeaderGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else {\n setCornerRadius(bodyGroup, [0, 0, 0, cornerRadiusArray[3]]);\n }\n\n // right top\n if (rightTopCornerGroup.attribute.width > 0 && rightTopCornerGroup.attribute.height > 0) {\n setCornerRadius(rightTopCornerGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else if (colHeaderGroup.attribute.height > 0) {\n setCornerRadius(colHeaderGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else if (rightFrozenGroup.attribute.width > 0) {\n setCornerRadius(rightFrozenGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else {\n setCornerRadius(bodyGroup, [0, cornerRadiusArray[1], 0, 0]);\n }\n\n // right bottom\n if (rightBottomCornerGroup.attribute.width > 0 && rightBottomCornerGroup.attribute.height > 0) {\n setCornerRadius(rightBottomCornerGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else if (rightFrozenGroup.attribute.width > 0) {\n setCornerRadius(rightFrozenGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else if (bottomFrozenGroup.attribute.height > 0) {\n setCornerRadius(bottomFrozenGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else {\n setCornerRadius(bodyGroup, [0, 0, cornerRadiusArray[2], 0]);\n }\n}\n\nfunction setCornerRadius(group: Group, cornerRadius: number[]) {\n group.setAttribute('cornerRadius', cornerRadius);\n if (group.border) {\n group.border.setAttribute('cornerRadius', cornerRadius);\n }\n}\n","import type { GraphicType, IGroupGraphicAttribute, Stage } from './../../vrender';\nimport { genNumberType, Group } from './../../vrender';\nimport { Bounds, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { PivotChart } from '../../PivotChart';\n\ninterface IChartGraphicAttribute extends IGroupGraphicAttribute {\n canvas: HTMLCanvasElement;\n dataId: string | Record; //如果是spec外层的dataId,则是string,否则通过series获取到的是Record \n data: any;\n spec: any;\n axes: any;\n ClassType: any;\n chartInstance: any;\n cellPadding: number[];\n mode: string;\n modeParams: any;\n dpr: number;\n // viewBox: {\n // x1: number;\n // y1: number;\n // x2: number;\n // y2: number;\n // };\n tableChartOption: any;\n col?: number;\n row?: number;\n}\n\nexport const CHART_NUMBER_TYPE = genNumberType();\n\nexport class Chart extends Group {\n type: GraphicType = 'chart' as any;\n declare attribute: IChartGraphicAttribute;\n chartInstance: any;\n activeChartInstance: any;\n active: boolean;\n cacheCanvas: HTMLCanvasElement | { x: number; y: number; width: number; height: number; canvas: HTMLCanvasElement }[]; // HTMLCanvasElement\n isShareChartSpec: boolean; //针对chartSpec用户配置成函数形式的话 就不需要存储chartInstance了 会太占内存,使用这个变量 当渲染出缓存图表会就删除chartInstance实例\n constructor(isShareChartSpec: boolean, params: IChartGraphicAttribute) {\n super(params);\n this.numberType = CHART_NUMBER_TYPE;\n this.isShareChartSpec = isShareChartSpec;\n // 创建chart\n if (!params.chartInstance) {\n const chartInstance = (this.chartInstance = new params.ClassType(\n params.spec,\n merge({}, this.attribute.tableChartOption, {\n renderCanvas: params.canvas,\n mode: this.attribute.mode === 'node' ? 'node' : 'desktop-browser',\n modeParams: this.attribute.modeParams,\n canvasControled: false,\n viewBox: { x1: 0, x2: 0, y1: 0, y2: 0 },\n dpr: params.dpr,\n // viewBox: params.viewBox,\n // viewBox: this.getViewBox(),\n // viewBox: {\n // x1: params.cellPadding[3],\n // x2: params.width - params.cellPadding[1],\n // y1: params.cellPadding[0],\n // y2: params.height - params.cellPadding[2]\n // },\n interactive: false,\n animation: false,\n autoFit: false\n })\n ));\n chartInstance.renderSync();\n chartInstance.getStage().enableDirtyBounds();\n params.chartInstance = this.chartInstance = chartInstance;\n } else {\n this.chartInstance = params.chartInstance;\n }\n\n // this.chart.load().then((cache) => {\n // this.cacheCanvas = cache;\n // this.deactivate();\n // });\n }\n\n // onBeforeAttributeUpdate() {\n // if (arguments[2] === y) {\n // debugger;\n // }\n // }\n /**\n * 激活该图表元素\n * @param table\n */\n activate(table: BaseTableAPI) {\n this.active = true;\n const { col, row } = this.parent;\n // this.chart = new TestChart(this.attribute.spec);\n // const ctx = this.attribute.canvas.getContext('2d');\n // const { x1, y1, x2, y2 } = this.attribute.viewBox;\n const { x1, y1, x2, y2 } = this.getViewBox();\n //获取渲染区域的bound 考虑被表头遮住部分的情况\n const tableBound = getTableBounds(col, row, table);\n const clipBound = tableBound.intersect({\n x1: x1 - table.scrollLeft,\n x2: x2 - table.scrollLeft,\n y1: y1 - table.scrollTop,\n y2: y2 - table.scrollTop\n });\n this.activeChartInstance = new this.attribute.ClassType(\n this.attribute.spec,\n merge({}, this.attribute.tableChartOption, {\n // disableDirtyBounds: true,\n renderCanvas: this.attribute.canvas,\n mode: 'desktop-browser',\n canvasControled: false,\n // viewBox: {\n // x1: x1 - table.scrollLeft,\n // x2: x2 - table.scrollLeft,\n // y1: y1 - table.scrollTop,\n // y2: y2 - table.scrollTop\n // },\n viewBox: {\n x1: 0,\n x2: x2 - x1,\n y1: 0,\n y2: y2 - y1\n },\n dpr: table.internalProps.pixelRatio,\n animation: false,\n interactive: true,\n autoFit: false, //控制当容器变化大小时vchart实例不应响应事件进行内部处理\n beforeRender: (chartStage: Stage) => {\n const stage = this.stage;\n const ctx = chartStage.window.getContext();\n const stageMatrix = stage.window.getViewBoxTransform();\n const viewBox = stage.window.getViewBox();\n ctx.inuse = true;\n // ctx.save();\n // console.log(ctx.getImageData(0, 0, 100, 100));\n ctx.clearMatrix();\n ctx.setTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f,\n true\n );\n ctx.translate(viewBox.x1, viewBox.y1);\n ctx.setTransformForCurrent(true); // 替代原有的chart viewBox\n ctx.beginPath();\n ctx.rect(clipBound.x1, clipBound.y1, clipBound.x2 - clipBound.x1, clipBound.y2 - clipBound.y1);\n ctx.clip();\n ctx.clearMatrix();\n\n if (table.options.canvas && !(chartStage as any).needRender) {\n // 在使用viewbox局部渲染时,activate单独渲染chart stage,可能导致外部stage场景层级错乱\n // 此时触发整个表格的重绘,外部stage场景可以通过table的beforeRender配置触发更上一级的重绘\n chartStage.pauseRender();\n table.scenegraph.stage.dirtyBounds.union(this.globalAABBBounds);\n table.scenegraph.updateNextFrame();\n }\n },\n afterRender(stage: any) {\n const ctx = stage.window.getContext();\n ctx.inuse = false;\n\n stage.needRender = false;\n chartStage.resumeRender();\n }\n })\n );\n const chartStage = this.activeChartInstance.getStage();\n // chartStage.needRender = true;\n // chartStage.background = 'red';\n const matrix = this.globalTransMatrix.clone();\n const stageMatrix = this.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n chartStage.window.setViewBoxTransform &&\n chartStage.window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n\n // this.activeChartInstance.updateData('data', this.attribute.data);\n this.activeChartInstance.renderSync();\n\n (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(this.activeChartInstance);\n this.activeChartInstance.on('click', (params: any) => {\n if (this.attribute.spec.select?.enable === false) {\n table.scenegraph.updateChartState(null);\n } else if (Chart.temp) {\n table.scenegraph.updateChartState(params?.datum);\n }\n });\n this.activeChartInstance.on('brushEnd', (params: any) => {\n table.scenegraph.updateChartState(params?.value?.inBrushData);\n Chart.temp = 0;\n setTimeout(() => {\n Chart.temp = 1;\n }, 0);\n });\n (table as PivotChart)._bindChartEvent?.(this.activeChartInstance);\n }\n static temp: number = 1;\n /**\n * 图表失去焦点\n * @param table\n */\n deactivate() {\n this.active = false;\n // move active chart view box out of browser view\n // to avoid async render when chart is releasd\n this.activeChartInstance?.updateViewBox(\n {\n x1: -1000,\n x2: -800,\n y1: -1000,\n y2: -800\n },\n false,\n false\n );\n this.activeChartInstance?.release();\n this.activeChartInstance = null;\n }\n /** 更新图表对应数据 */\n updateData(data: any) {\n this.attribute.data = data;\n }\n\n getViewBox(): {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n } {\n const cellGroup = this.parent as Group;\n const padding = this.attribute.cellPadding;\n const table = (this.stage as any).table as BaseTableAPI;\n\n const { x1, y1, x2, y2 } = cellGroup.globalAABBBounds;\n\n return {\n x1: Math.ceil(x1 + padding[3] + table.scrollLeft + (table.options.viewBox?.x1 ?? 0)),\n x2: Math.ceil(x1 + cellGroup.attribute.width - padding[1] + table.scrollLeft + (table.options.viewBox?.x1 ?? 0)),\n y1: Math.ceil(y1 + padding[0] + table.scrollTop + (table.options.viewBox?.y1 ?? 0)),\n y2: Math.ceil(y1 + cellGroup.attribute.height - padding[2] + table.scrollTop + (table.options.viewBox?.y1 ?? 0))\n };\n }\n}\n\nfunction getTableBounds(col: number, row: number, table: BaseTableAPI) {\n const { layoutMap } = table.internalProps;\n const bodyBound = new Bounds();\n const tableBound = table.scenegraph.tableGroup.globalAABBBounds;\n bodyBound.x1 = tableBound.x1;\n bodyBound.x2 = tableBound.x2;\n bodyBound.y1 = tableBound.y1;\n bodyBound.y2 = tableBound.y2;\n if (\n layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightTopCorner(col, row) ||\n layoutMap.isLeftTopCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row)\n ) {\n // frozen cornor\n } else if (layoutMap.isFrozenColumn(col, row)) {\n // left frozen\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n } else if (layoutMap.isFrozenRow(col, row)) {\n // top frozen\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n } else if (layoutMap.isRightFrozenColumn(col, row)) {\n // right frozen\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n } else if (layoutMap.isBottomFrozenRow(col, row)) {\n // bottom frozen\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n } else if (!layoutMap.isFrozenColumn(col, row) && !layoutMap.isRightFrozenColumn(col, row)) {\n // no frozen body\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n }\n\n bodyBound.x1 = bodyBound.x1 + (table.options.viewBox?.x1 ?? 0);\n bodyBound.x2 = bodyBound.x2 + (table.options.viewBox?.x1 ?? 0);\n bodyBound.y1 = bodyBound.y1 + (table.options.viewBox?.y1 ?? 0);\n bodyBound.y2 = bodyBound.y2 + (table.options.viewBox?.y1 ?? 0);\n\n return bodyBound;\n}\n","import { container, VWindow, type IStage, type IWindow } from './../../../vrender';\nimport type { Chart } from '../chart';\nimport type { IAABBBounds } from '@visactor/vutils';\nimport { Bounds, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nexport const cancelRenderChartQueue = false;\nexport const chartRenderKeys: string[] = [];\nexport const chartRenderQueueList: Chart[] = [];\ninterface chartRenderQueueItem {\n chart: Chart;\n}\n//每次消费的图表数量\nlet batchRenderChartCount = 5;\nlet isHandlingChartQueue = false;\nexport function setBatchRenderChartCount(count: number) {\n if (isValid(count)) {\n batchRenderChartCount = count;\n }\n}\nexport function IsHandlingChartQueue() {\n return isHandlingChartQueue;\n}\nexport function renderChart(chart: Chart) {\n const { axes, dataId, data, spec, ClassType, canvas, mode, modeParams, dpr } = chart.attribute;\n let { chartInstance } = chart;\n if (!chartInstance) {\n chartInstance = new ClassType(spec, {\n renderCanvas: canvas,\n mode: mode === 'node' ? 'node' : 'desktop-browser',\n modeParams: modeParams,\n canvasControled: false,\n viewBox: { x1: 0, x2: 0, y1: 0, y2: 0 },\n dpr: dpr,\n interactive: false,\n animation: false,\n autoFit: false\n });\n chartInstance.renderSync();\n chart.chartInstance = chartInstance;\n }\n const viewBox = chart.getViewBox();\n\n // avoid canvas size 0\n if (viewBox.x2 <= viewBox.x1) {\n viewBox.x2 = viewBox.x1 + 1;\n }\n if (viewBox.y2 <= viewBox.y1) {\n viewBox.y2 = viewBox.y1 + 1;\n }\n\n // use vrender trasnform, viewbox starts from 0,0\n chartInstance.updateViewBox(\n // {\n // x1: viewBox.x1 - (chart.getRootNode() as any).table.scrollLeft,\n // x2: viewBox.x2 - (chart.getRootNode() as any).table.scrollLeft,\n // y1: viewBox.y1 - (chart.getRootNode() as any).table.scrollTop,\n // y2: viewBox.y2 - (chart.getRootNode() as any).table.scrollTop\n // },\n {\n x1: 0,\n x2: viewBox.x2 - viewBox.x1,\n y1: 0,\n y2: viewBox.y2 - viewBox.y1\n },\n false,\n false\n );\n\n const chartStage = chartInstance.getStage();\n const matrix = chart.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n chartStage.window.setViewBoxTransform &&\n chartStage.window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n // to be fixed: update state everytimes render, need be fix by vchart\n // 测试的没发现问题 这里应该能去掉吧 留着每次都要调用一次\n // const table = (chart.getRootNode() as any).table as BaseTableAPI;\n // (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(chartInstance);\n\n const { table } = chart.getRootNode() as any;\n\n let updateSpec = false;\n if (table.options.specFormat) {\n const formatResult = table.options.specFormat(chart.attribute.spec, chartInstance, chart);\n if (formatResult.needFormatSpec && formatResult.spec) {\n const spec = formatResult.spec;\n chartInstance.updateSpecSync(spec);\n updateSpec = formatResult.updateSpec ?? true;\n }\n }\n\n if (!updateSpec) {\n axes?.forEach((axis: any, index: number) => {\n if (axis.type === 'band') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._spec.domain = axis.domain.slice(0);\n // chartAxis.updateScaleDomain();\n chartInstance.updateModelSpec({ type: 'axes', index }, { domain: axis.domain.slice(0) }, true);\n } else {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._domain = {\n // min: axis.range?.min ?? 0,\n // max: axis.range?.max ?? 0\n // };\n chartInstance.updateModelSpecSync(\n { type: 'axes', index },\n {\n min: axis.range?.min ?? 0,\n max: axis.range?.max ?? 0,\n tick: {\n tickMode: axis.tick?.tickMode\n }\n },\n true\n );\n }\n });\n\n // to be fixed: update state everytimes render, need be fix by vchart\n (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(chartInstance);\n\n if (typeof dataId === 'string') {\n chartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n // 判断是否有updateFullDataSync 木有的话 还是循环调用updateDataSync\n if (!chartInstance.updateFullDataSync) {\n chartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n chartInstance.updateFullDataSync?.(dataBatch);\n }\n }\n\n const sg = chartInstance.getStage();\n cacheStageCanvas(sg, chart);\n // chart.cacheCanvas = sg.toCanvas();\n\n // debugger;\n // chart.cacheCanvas[] = sg.toCanvas(fullImage, viewBox);\n // chart.cacheCanvas = sg.toCanvas(false, {\n // x1: 0,\n // y1: 0,\n // x2: 500,\n // y2: 300,\n // width: () => 500,\n // height: () => 300\n // });\n // 截图空白问题 因为开启了动画 首屏截图是无数据的TODO\n}\n\nexport function startRenderChartQueue(table: any) {\n isHandlingChartQueue = true;\n\n // 检查是否还有未渲染的图表\n if (chartRenderQueueList.length > 0) {\n // 使用 requestAnimationFrame 或 setTimeout 来调度下一批图表的渲染\n // requestAnimationFrame(() => renderChartQueue(table));\n requestAnimationFrame(() => {\n // 从集合中获取要渲染的图表上下文\n const chartsToRender = chartRenderQueueList.splice(0, batchRenderChartCount);\n chartRenderKeys.splice(0, batchRenderChartCount);\n // 渲染图表\n chartsToRender.forEach(chart => {\n // 在正确的位置渲染图表\n renderChart(chart);\n chart.addUpdateBoundTag();\n });\n table.render();\n startRenderChartQueue(table);\n });\n // setTimeout(() => {\n // // debugger;\n // renderChartQueue(table);\n // }, 0);\n } else {\n isHandlingChartQueue = false;\n }\n}\n\nconst cacheCanvasSizeLimit = 2000;\nfunction cacheStageCanvas(stage: IStage, chart: Chart) {\n const { viewWidth, viewHeight } = stage;\n if (viewWidth < cacheCanvasSizeLimit && viewHeight < cacheCanvasSizeLimit) {\n chart.cacheCanvas = toCanvas(stage);\n if (!chart.isShareChartSpec) {\n // 不能整列共享chart的情况 生成完图片后即将chartInstance清除\n chart.chartInstance?.release();\n chart.chartInstance = null;\n chart.setAttribute('chartInstance', null);\n }\n return;\n }\n\n const rows = Math.ceil(viewHeight / cacheCanvasSizeLimit);\n const columns = Math.ceil(viewWidth / cacheCanvasSizeLimit);\n\n const cacheCanvas = [];\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n const startX = col * cacheCanvasSizeLimit;\n const startY = row * cacheCanvasSizeLimit;\n const endX = startX + cacheCanvasSizeLimit > viewWidth ? viewWidth : startX + cacheCanvasSizeLimit;\n const endY = startY + cacheCanvasSizeLimit > viewHeight ? viewHeight : startY + cacheCanvasSizeLimit;\n const width = endX - startX;\n const height = endY - startY;\n const bounds = new Bounds();\n bounds.setValue(startX, startY, endX, endY);\n\n const canvas = toCanvas(stage, false, bounds);\n cacheCanvas.push({\n canvas,\n x: startX,\n y: startY,\n width,\n height\n });\n }\n }\n\n chart.cacheCanvas = cacheCanvas;\n}\n\nfunction toCanvas(stage: IStage, fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n if ((stage as any).releaseStatus === 'released') {\n return null;\n }\n const matrix = stage.window.getViewBoxTransform();\n const window = renderToNewWindow(stage, fullImage, viewBox);\n window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, 0, 0);\n (stage as any).renderTo(window);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n}\n\nfunction renderToNewWindow(stage: IStage, fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n const matrix = stage.window.getViewBoxTransform();\n const window = container.get(VWindow);\n const x1 = viewBox ? -viewBox.x1 : 0;\n const y1 = viewBox ? -viewBox.y1 : 0;\n const x2 = viewBox ? viewBox.x2 : stage.viewWidth;\n const y2 = viewBox ? viewBox.y2 : stage.viewHeight;\n const width = viewBox ? viewBox.width() : stage.viewWidth;\n const height = viewBox ? viewBox.height() : stage.viewHeight;\n if (fullImage) {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width: width * matrix.a,\n height: height * matrix.d,\n dpr: stage.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width: width * matrix.a,\n height: height * matrix.d,\n dpr: stage.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n (stage as any).renderTo(window);\n return window;\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IDrawContext,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from './../../../vrender';\nimport {\n ContributionProvider,\n getTheme,\n IGroupRenderContribution,\n createImage,\n inject,\n injectable,\n named,\n BaseRender\n} from './../../../vrender';\nimport type { Chart } from '../chart';\nimport { CHART_NUMBER_TYPE } from '../chart';\nimport {\n IsHandlingChartQueue,\n chartRenderKeys,\n chartRenderQueueList,\n renderChart,\n startRenderChartQueue\n} from './chart-render-helper';\nimport { isArray } from '@visactor/vutils';\n\nexport const ChartRender = Symbol.for('ChartRender');\nexport const ChartRenderContribution = Symbol.for('ChartRenderContribution');\n\n@injectable()\nexport class DefaultCanvasChartRender extends BaseRender implements IGraphicRender {\n type: 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n drawShape(\n chart: Chart,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // console.log(chart.parent.col, chart.parent.row);\n // if (chart.parent.col !== 2 || chart.parent.row !== 2) {\n // return;\n // }\n const groupAttribute = getTheme(chart, params?.theme).group;\n\n const { dataId, data, spec } = chart.attribute;\n const viewBox = chart.getViewBox();\n const { width = groupAttribute.width, height = groupAttribute.height } = chart.attribute;\n const { table } = chart.getRootNode() as any;\n\n const { active, cacheCanvas, activeChartInstance } = chart;\n // console.log('render chart', chart.parent.col, chart.parent.row, viewBox, cacheCanvas);\n if (!active && cacheCanvas) {\n if (isArray(cacheCanvas)) {\n cacheCanvas.forEach(singleCacheCanvas => {\n const { x, y, width, height, canvas } = singleCacheCanvas;\n context.drawImage(canvas, x, y, width, height);\n });\n } else {\n context.drawImage(cacheCanvas, x, y, width, height);\n }\n } else if (activeChartInstance) {\n if (table.options.specFormat) {\n const formatResult = table.options.specFormat(chart.attribute.spec, activeChartInstance, chart);\n if (formatResult.needFormatSpec && formatResult.spec) {\n const spec = formatResult.spec;\n activeChartInstance.updateSpecSync(spec);\n // return;\n }\n }\n\n const viewBox = chart.getViewBox();\n activeChartInstance.updateViewBox(\n // {\n // x1: viewBox.x1 - (chart.getRootNode() as any).table.scrollLeft,\n // x2: viewBox.x2 - (chart.getRootNode() as any).table.scrollLeft,\n // y1: viewBox.y1 - (chart.getRootNode() as any).table.scrollTop,\n // y2: viewBox.y2 - (chart.getRootNode() as any).table.scrollTop\n // },\n {\n x1: 0,\n x2: viewBox.x2 - viewBox.x1,\n y1: 0,\n y2: viewBox.y2 - viewBox.y1\n },\n false,\n false\n );\n // console.log(viewBox);\n\n const chartStage = activeChartInstance.getStage();\n chartStage.needRender = true;\n // chartStage.background = 'red';\n const matrix = chart.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform().clone();\n // matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n chartStage.window.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n\n if (typeof dataId === 'string') {\n activeChartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n // 如果是组合图有series系列 需要组个设置数据 这里的data包括的单元格完整数据 需要根据key过滤\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n if (!activeChartInstance.updateFullDataSync) {\n activeChartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n activeChartInstance.updateFullDataSync?.(dataBatch);\n }\n // debugger;\n // console.log(drawContext.context.canvas.toDataURL());\n } else {\n if (table.internalProps.renderChartAsync) {\n if (chartRenderKeys.indexOf(`${chart.parent.col}+${chart.parent.row}`) === -1) {\n chartRenderKeys.push(`${chart.parent.col}+${chart.parent.row}`);\n chartRenderQueueList.push(chart);\n }\n //判断是否已经开启渲染队列\n if (!IsHandlingChartQueue()) {\n startRenderChartQueue(table);\n }\n } else {\n renderChart(chart);\n }\n }\n }\n\n // draw(chart: Chart, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const { context } = drawContext;\n // if (!context) {\n // return;\n // }\n // // debugger;\n // const { clip } = chart.attribute;\n // if (clip) {\n // context.save();\n // } else {\n // context.highPerformanceSave();\n // }\n // // group直接transform\n // context.transformFromMatrix(chart.transMatrix, true);\n\n // context.beginPath();\n // // 如果跳过绘制,那就不绘制\n // if (params.skipDraw) {\n // this.drawShape(\n // chart,\n // context,\n // 0,\n // 0,\n // drawContext,\n // params,\n // () => false,\n // () => false\n // );\n // } else {\n // this.drawShape(chart, context, 0, 0, drawContext);\n // }\n\n // if (clip) {\n // context.restore();\n // } else {\n // context.highPerformanceRestore();\n // }\n // }\n draw(chart: Chart, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const circleAttribute = getTheme(circle, params?.theme).circle;\n this._draw(chart, {} as any, false, drawContext, params);\n }\n}\n","import type {\n IImage,\n IContext2d,\n IImageGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IImageRenderContribution,\n IDrawContext\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable } from './../../../vrender';\n\n/**\n * @description: image支持绘制部分形状\n * @return {*}\n */\n@injectable()\nexport class BeforeImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { shape } = image.attribute as any;\n\n if (shape === 'circle') {\n const { width = imageAttribute.width, height = imageAttribute.height } = image.attribute;\n\n context.beginPath();\n context.arc(x + width / 2, y + height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI);\n context.closePath();\n\n context.save();\n context.clip();\n }\n }\n}\n\n@injectable()\nexport class AfterImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { shape } = image.attribute as any;\n\n if (shape === 'circle') {\n context.restore();\n }\n }\n}\n\n/**\n * @description: image支持gif动态图片\n * @return {*}\n */\n@injectable()\nexport class BeforeGifImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { isGif } = image.attribute as any;\n\n if (isGif && image.playing) {\n image.attribute.opacity = 0; // hack for static image\n }\n }\n}\n\n@injectable()\nexport class AfterGifImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { isGif } = image.attribute as any;\n\n if (isGif && image.playing) {\n image.attribute.opacity = 1; // hack for static image\n context.globalAlpha = image.attribute.opacity;\n image.renderFrame(context, x, y);\n }\n }\n}\n","import type { StateManager } from '../state';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ColumnDefine } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function getCellHoverColor(cellGroup: Group, table: BaseTableAPI): string | undefined {\n let colorKey;\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const key = isCellHover(table.stateManager, col, row, cellGroup);\n if (key && (!colorKey || key === 'cellBgColor')) {\n colorKey = key;\n }\n }\n }\n } else if (cellGroup.role === 'cell') {\n colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);\n }\n\n if (!colorKey) {\n return undefined;\n }\n\n let hoverStyle;\n const layout = table.internalProps.layoutMap;\n if (layout.isCornerHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.cornerHeaderStyle?.hover || table.theme.headerStyle?.hover;\n } else if (layout.isColumnHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.headerStyle?.hover;\n } else if (layout.isRowHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.rowHeaderStyle?.hover;\n } else if (layout.isBottomFrozenRow(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.bottomFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.headerStyle?.hover);\n } else if (layout.isRightFrozenColumn(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.rightFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.rowHeaderStyle?.hover);\n } else if (!table.isHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.bodyStyle?.hover;\n }\n const fillColor = getProp(colorKey, hoverStyle, cellGroup.col, cellGroup.row, table);\n return fillColor;\n}\n\nexport function isCellHover(state: StateManager, col: number, row: number, cellGroup: Group): string | undefined {\n const { highlightScope, disableHeader, cellPos } = state.hover;\n const table = state.table;\n\n const isHeader = table.isHeader(col, row);\n if (isHeader && disableHeader) {\n return undefined;\n }\n\n let hoverMode;\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && cellPos.col === col) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else {\n hoverMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && cellPos.row === row) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else {\n hoverMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (cellPos.col === col) {\n hoverMode = 'inlineColumnBgColor';\n } else if (cellPos.row === row) {\n hoverMode = 'inlineRowBgColor';\n }\n }\n\n if (hoverMode) {\n let cellDisable;\n if (isHeader) {\n const define = table.getHeaderDefine(col, row);\n cellDisable = (define as ColumnDefine)?.disableHeaderHover;\n\n if (cellGroup.firstChild && cellGroup.firstChild.name === 'axis' && table.options.hover?.disableAxisHover) {\n cellDisable = true;\n }\n } else {\n const define = table.getBodyColumnDefine(col, row);\n cellDisable = (define as ColumnDefine)?.disableHover;\n }\n\n if (cellDisable) {\n hoverMode = undefined;\n }\n }\n\n return hoverMode;\n}\n","import type { StateManager } from '../state';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CellRange, ColumnDefine } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { cellInRange } from '../../tools/helper';\n\nexport function getCellSelectColor(cellGroup: Group, table: BaseTableAPI): string | undefined {\n let colorKey;\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const key = isCellSelected(table.stateManager, col, row, cellGroup);\n if (key && (!colorKey || key === 'cellBgColor')) {\n colorKey = key;\n }\n }\n }\n } else if (cellGroup.role === 'cell') {\n colorKey = isCellSelected(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);\n }\n\n if (!colorKey) {\n return undefined;\n }\n\n let selectStyle;\n const layout = table.internalProps.layoutMap;\n if (layout.isCornerHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.cornerHeaderStyle?.select || table.theme.headerStyle?.select;\n } else if (layout.isColumnHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.headerStyle?.select;\n } else if (layout.isRowHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.rowHeaderStyle?.select;\n } else if (layout.isBottomFrozenRow(cellGroup.col, cellGroup.row)) {\n selectStyle =\n table.theme.bottomFrozenStyle?.select ||\n (table.isListTable() ? table.theme.bodyStyle?.select : table.theme.headerStyle?.select);\n } else if (layout.isRightFrozenColumn(cellGroup.col, cellGroup.row)) {\n selectStyle =\n table.theme.rightFrozenStyle?.select ||\n (table.isListTable() ? table.theme.bodyStyle?.select : table.theme.rowHeaderStyle?.select);\n } else if (!table.isHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.bodyStyle?.select;\n }\n const fillColor = getProp(colorKey, selectStyle, cellGroup.col, cellGroup.row, table);\n return fillColor;\n}\n\n// 选中多列\nfunction isSelectMultipleRange(range: CellRange) {\n return range.start.col !== range.end.col || range.start.row !== range.end.row;\n}\n\nfunction getSelectModeRange(state: StateManager, col: number, row: number) {\n let selectMode;\n const { highlightScope, cellPos, ranges } = state.select;\n const range = ranges[0];\n const rangeColStart = Math.min(range.start.col, range.end.col);\n const rangeColEnd = Math.max(range.start.col, range.end.col);\n const rangeRowStart = Math.min(range.start.row, range.end.row);\n const rangeRowEnd = Math.max(range.start.row, range.end.row);\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && col >= rangeColStart && col <= rangeColEnd) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && row >= rangeRowStart && row <= rangeRowEnd) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else if (col >= rangeColStart && col <= rangeColEnd) {\n selectMode = 'inlineColumnBgColor';\n } else if (row >= rangeRowStart && row <= rangeRowEnd) {\n selectMode = 'inlineRowBgColor';\n }\n }\n return selectMode;\n}\n\nfunction getSelectMode(state: StateManager, col: number, row: number) {\n let selectMode;\n const { highlightScope, cellPos } = state.select;\n\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && cellPos.col === col) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && cellPos.row === row) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (cellPos.col === col) {\n selectMode = 'inlineColumnBgColor';\n } else if (cellPos.row === row) {\n selectMode = 'inlineRowBgColor';\n }\n }\n return selectMode;\n}\n\nexport function isCellSelected(state: StateManager, col: number, row: number, cellGroup: Group): string | undefined {\n const { highlightInRange, disableHeader, ranges } = state.select;\n let selectMode;\n const isSelectRange = ranges.length === 1 && isSelectMultipleRange(ranges?.[0]) && highlightInRange;\n if (\n isSelectRange\n ? ranges?.length === 1 && ranges[0].start && ranges[0].end\n : ranges?.length === 1 && ranges[0].end.col === ranges[0].start.col && ranges[0].end.row === ranges[0].start.row\n ) {\n const table = state.table;\n\n const isHeader = table.isHeader(col, row);\n if (isHeader && disableHeader) {\n return undefined;\n }\n\n selectMode = isSelectRange ? getSelectModeRange(state, col, row) : getSelectMode(state, col, row);\n\n if (selectMode) {\n const cellDisable = isCellDisableSelect(state.table, col, row);\n if (cellDisable) {\n selectMode = undefined;\n }\n }\n } else if (state.table.theme.selectionStyle.selectionFillMode === 'replace') {\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n const rangeColStart = Math.min(range.start.col, range.end.col);\n const rangeColEnd = Math.max(range.start.col, range.end.col);\n const rangeRowStart = Math.min(range.start.row, range.end.row);\n const rangeRowEnd = Math.max(range.start.row, range.end.row);\n if (rangeColStart <= col && rangeRowStart <= row && rangeColEnd >= col && rangeRowEnd >= row) {\n selectMode = 'cellBgColor';\n break;\n }\n }\n }\n return selectMode;\n}\n/**\n * 判断单元格是否禁用选择。先判断高优配置select.disableSelect。\n * 然后在根据如果是表头的话依次去判断select.disableHeaderSelect和column.disableHeaderSelect。\n * 不是表头的话去判断column.disableSelect。\n */\nexport function isCellDisableSelect(table: BaseTableAPI, col: number, row: number) {\n const globalDisableSelect = table.options.select?.disableSelect;\n const cellDisable =\n typeof globalDisableSelect === 'function' ? globalDisableSelect(col, row, table) : globalDisableSelect;\n if (cellDisable) {\n return true;\n }\n if (table.isHeader(col, row)) {\n let cellDisable = table.options.select?.disableHeaderSelect;\n if (cellDisable) {\n return true;\n }\n const columnDefine = table.getHeaderDefine(col, row);\n cellDisable = (columnDefine as ColumnDefine)?.disableHeaderSelect;\n if (cellDisable) {\n return true;\n }\n } else {\n const columnDefine = table.getBodyColumnDefine(col, row);\n const disableSelect = (columnDefine as ColumnDefine)?.disableSelect;\n const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n if (cellDisable) {\n return true;\n }\n }\n return false;\n}\n","import type {\n IGroup,\n IContext2d,\n IGroupGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext,\n IRectGraphicAttribute\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable, createRectPath } from './../../../vrender';\nimport type { Group } from '../group';\nimport { getCellHoverColor } from '../../../state/hover/is-cell-hover';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getCellMergeInfo } from '../../utils/get-cell-merge';\nimport { InteractionState } from '../../../ts-types';\nimport { isArray } from '@visactor/vutils';\nimport { getCellSelectColor } from '../../../state/select/is-cell-select-highlight';\nimport { renderStrokeWithCornerRadius } from './rect-contribution-render';\n\n// const highlightDash: number[] = [];\n\n// SplitGroupContribution处理分段渲染stroke\n// stroke/strokeArrayWidth/strokeArrayColor 为数组时调用\n@injectable()\nexport class SplitGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n stroke = groupAttribute.stroke,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n } = group.attribute as any;\n\n if (stroke && (Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n\n // if (highlightStroke) {\n // // 依据highlightStroke信息调整clip范围,以实现在单个单元格显示highlight border\n // let xDist = x;\n // let yDist = y;\n // let widthDist = width;\n // let heightDist = height;\n // if (highlightStroke[0] && highlightStrokeArrayWidth[0]) {\n // // top\n // yDist -= highlightStrokeArrayWidth[0] / 2;\n // heightDist += highlightStrokeArrayWidth[0] / 2;\n // }\n // if (highlightStroke[1] && highlightStrokeArrayWidth[1]) {\n // // right\n // widthDist += highlightStrokeArrayWidth[1] / 2;\n // }\n // if (highlightStroke[2] && highlightStrokeArrayWidth[2]) {\n // // bottom\n // heightDist += highlightStrokeArrayWidth[2] / 2;\n // }\n // if (highlightStroke[3] && highlightStrokeArrayWidth[3]) {\n // // left\n // xDist -= highlightStrokeArrayWidth[3] / 2;\n // widthDist += highlightStrokeArrayWidth[3] / 2;\n // }\n\n // context.beginPath();\n // context.rect(xDist, yDist, widthDist, heightDist);\n // }\n }\n}\n@injectable()\nexport class SplitGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n // 基础border\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n\n lineWidth = groupAttribute.lineWidth,\n strokeColor = groupAttribute.stroke,\n\n cornerRadius = groupAttribute.cornerRadius\n // // select & hover border\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (groupAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (groupAttribute as any).highlightStrokeArrayPart,\n } = group.attribute as any;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n\n // lineWidth === 0 不绘制\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n let widthForStroke: number;\n let heightForStroke: number;\n if (Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n if (\n (typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1))\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n const bottomRight = table?.theme?.cellBorderClipDirection === 'bottom-right';\n // let deltaWidth = 0;\n // let deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n }\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height),\n bottomRight\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n\n // 带不同stroke边框\n if (!(cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0)))) {\n // let lastStrokeI = 0;\n // let lastStroke: any;\n context.beginPath();\n // debugger;\n createRectPath(\n context,\n x,\n y,\n widthForStroke,\n heightForStroke,\n cornerRadius,\n new Array(4).fill(0).map((_, i) => (x1: number, y1: number, x2: number, y2: number) => {\n renderStrokeWithCornerRadius(\n i,\n x1,\n y1,\n x2,\n y2,\n group,\n context,\n x,\n y,\n groupAttribute as any,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n widthForStroke,\n heightForStroke\n );\n })\n );\n\n context.stroke();\n } else {\n renderStroke(\n group,\n context,\n x,\n y,\n groupAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n // Math.ceil(width),\n // Math.ceil(height)\n widthForStroke,\n heightForStroke\n );\n }\n }\n }\n}\n\n/**\n * @description: 判断线宽是否需要分别渲染(线宽不同)\n * @param {number} widthArray\n * @return {*}\n */\nexport function getWidthInfo(widthArray: number[] | number) {\n if (!Array.isArray(widthArray)) {\n return {\n isSplitDraw: false,\n width: widthArray\n };\n }\n\n let temp;\n for (let i = 0; i < widthArray.length; i++) {\n const width = widthArray[i];\n if (width) {\n if (!temp) {\n temp = width;\n } else if (width !== temp) {\n return {\n isSplitDraw: true\n };\n }\n }\n }\n\n return {\n isSplitDraw: false,\n width: temp\n };\n}\n\nexport function renderStroke(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n groupAttribute: Required | Required,\n stroke: boolean | [boolean, boolean, boolean, boolean],\n strokeArrayWidth: [number, number, number, number] | undefined,\n strokeArrayColor: [string, string, string, string] | undefined,\n width: number,\n height: number,\n isHighlight?: boolean,\n part?: ([number, number] | undefined)[]\n) {\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n // 渲染部分线段,part: [[0, 0.5], undifined, undifined, undifined]\n // 同样上右下左,范围0-1,[0, 0.5]即只渲染前一半\n const isPart = Array.isArray(part);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // if (isHighlight) {\n // context.setLineDash(highlightDash);\n // }\n // const oldLineCap = context.lineCap;\n // context.lineCap = 'square';\n\n const { lineDash = groupAttribute.lineDash } = group.attribute as any;\n // const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length && lineDash.some((dash: number[] | null) => Array.isArray(dash))) {\n isDash = true;\n }\n // 单独处理每条边界,目前不考虑圆角\n context.beginPath();\n context.moveTo(x, y);\n\n const strokeTop = (isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0]);\n const strokeRight = (isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1]);\n const strokeBottom = (isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2]);\n const strokeLeft = (isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3]);\n\n // top\n if (strokeTop) {\n // context.lineTo(x + width, y);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n if (isPart && Array.isArray(part[0])) {\n context.moveTo(x - deltaLeft + (width + deltaLeft + deltaRight) * part[0][0], y);\n context.lineTo(x - deltaLeft + (width + deltaLeft + deltaRight) * (part[0][1] - part[0][0]), y);\n context.moveTo(x + width + deltaRight, y);\n } else {\n context.moveTo(x - deltaLeft, y);\n context.lineTo(x + width + deltaRight, y);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[0]) {\n context.strokeStyle = strokeArrayColor[0];\n } else if (strokeArrayColor && !strokeArrayColor[0]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[0] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y);\n }\n } else {\n context.moveTo(x + width, y);\n }\n // right\n if (strokeRight) {\n // context.lineTo(x + width, y + height);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n if (isPart && Array.isArray(part[1])) {\n context.moveTo(x + width, y - deltaTop + height * part[1][0]);\n context.lineTo(x + width, y - deltaTop + (height + deltaTop + deltaBottom) * (part[1][1] - part[1][0]));\n context.moveTo(x + width, y + height + deltaBottom);\n } else {\n context.moveTo(x + width, y - deltaTop);\n context.lineTo(x + width, y + height + deltaBottom);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[1]) {\n context.strokeStyle = strokeArrayColor[1];\n } else if (strokeArrayColor && !strokeArrayColor[1]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[1] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if (strokeBottom) {\n // context.lineTo(x, y + height);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n if (isPart && Array.isArray(part[2])) {\n context.moveTo(x - deltaLeft + (width + deltaLeft + deltaRight) * part[2][0], y + height);\n context.lineTo(x - deltaLeft + (width + deltaLeft + deltaRight) * (part[2][1] - part[2][0]), y + height);\n context.moveTo(x - deltaLeft, y + height);\n } else {\n context.moveTo(x - deltaLeft, y + height);\n context.lineTo(x + width + deltaRight, y + height);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[2]) {\n context.strokeStyle = strokeArrayColor[2];\n } else if (strokeArrayColor && !strokeArrayColor[2]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[2] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else {\n context.moveTo(x, y + height);\n }\n // left\n if (strokeLeft) {\n // context.lineTo(x, y);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n if (isPart && Array.isArray(part[3])) {\n context.moveTo(x, y - deltaTop + (height + deltaTop + deltaBottom) * part[3][0]);\n context.lineTo(x, y - deltaTop + (height + deltaTop + deltaBottom) * (part[3][1] - part[3][0]));\n context.moveTo(x, y - deltaTop);\n } else {\n context.moveTo(x, y - deltaTop);\n context.lineTo(x, y + height + deltaBottom);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[3]) {\n context.strokeStyle = strokeArrayColor[3];\n } else if (strokeArrayColor && !strokeArrayColor[3]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[3] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n context.lineDashOffset = 0;\n // context.lineCap = oldLineCap;\n context.setLineDash([]);\n}\n\n// DashGroupContribution处理虚线边框对齐\n// lineDash 为非空数组时调用\n@injectable()\nexport class DashGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth\n } = group.attribute as any;\n\n if (\n stroke &&\n Array.isArray(lineDash) &&\n lineDash.length &&\n lineDash[0]?.length &&\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth)\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n@injectable()\nexport class DashGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n lineWidth = groupAttribute.lineWidth\n } = group.attribute as any;\n\n if (\n !stroke ||\n !(Array.isArray(lineDash) && lineDash.length && lineDash[0]?.length) ||\n Array.isArray(strokeArrayColor) ||\n Array.isArray(strokeArrayWidth)\n ) {\n return;\n }\n\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n\n // convert lineDash to number[][]\n const splitLineDash = isArray(lineDash[0]) ? getQuadLineDash(lineDash) : [lineDash, lineDash, lineDash, lineDash];\n\n // const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n } else {\n width = Math.ceil(width);\n height = Math.ceil(height);\n }\n\n let widthForStroke;\n let heightForStroke;\n if (lineWidth & 1) {\n const bottomRight = table.theme.cellBorderClipDirection === 'bottom-right';\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight),\n bottomRight\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // 分段设置lineDashOffset,实现虚线边框对齐\n // top\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + widthForStroke, y);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.setLineDash(splitLineDash[0] ?? []);\n context.stroke();\n\n // right\n context.beginPath();\n context.moveTo(x + widthForStroke, y);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.setLineDash(splitLineDash[1] ?? []);\n context.stroke();\n\n // bottom\n context.beginPath();\n context.moveTo(x, y + heightForStroke);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.setLineDash(splitLineDash[2] ?? []);\n context.stroke();\n\n // left\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.setLineDash(splitLineDash[3] ?? []);\n context.stroke();\n\n context.lineDashOffset = 0;\n context.setLineDash([]);\n }\n}\n\n// AdjustPosGroupContribution处理线宽为奇数时stroke位置偏移0.5px\n// lineWidth 为奇数时调用\n@injectable()\nexport class AdjustPosGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos\n } = group.attribute as any;\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class AdjustPosGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos,\n cornerRadius = groupAttribute.cornerRadius\n } = group.attribute as any;\n\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n // width = Math.ceil(width);\n // height = Math.ceil(height);\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n // if (group.role === 'cell') {\n // const table = (group.stage as any).table as BaseTableAPI;\n // let col = (group as any).col as number;\n // let row = (group as any).row as number;\n // const mergeInfo = getCellMergeInfo(table, col, row);\n // if (mergeInfo) {\n // col = mergeInfo.end.col;\n // row = mergeInfo.end.row;\n // }\n\n // if (table && col === table.colCount - 1) {\n // width -= 1;\n // } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n // width -= 1;\n // }\n // if (table && row === table.rowCount - 1) {\n // height -= 1;\n // } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n // height -= 1;\n // }\n // }\n\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n }\n\n context.beginPath();\n\n const bottomRight = table?.theme?.cellBorderClipDirection === 'bottom-right';\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height),\n bottomRight\n );\n\n if (cornerRadius) {\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, widthFroDraw + deltaWidth, heightFroDraw + deltaHeight, cornerRadius);\n } else {\n context.rect(x, y, widthFroDraw, heightFroDraw);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n context.stroke();\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'cell') {\n const table = (group.stage as any).table as BaseTableAPI;\n if (table) {\n const selectColor = getCellSelectColor(group as Group, table);\n if (selectColor) {\n // show select highlight when scrolling\n (group.attribute as any)._vtableHightLightFill = selectColor;\n } else if (table.stateManager.interactionState !== InteractionState.scrolling) {\n const hoverColor = getCellHoverColor(group as Group, table);\n if (hoverColor) {\n (group.attribute as any)._vtableHightLightFill = hoverColor;\n }\n }\n }\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group.attribute as any)._vtableHightLightFill) {\n if (fillCb) {\n // do nothing\n // fillCb(context, group.attribute, groupAttribute);\n } else if (fVisible) {\n const oldColor = group.attribute.fill;\n // draw hover fill\n group.attribute.fill = (group.attribute as any)._vtableHightLightFill as any;\n context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n context.fill();\n group.attribute.fill = oldColor;\n (group.attribute as any)._vtableHightLightFill = undefined;\n }\n }\n }\n}\n\n@injectable()\nexport class ClipBodyGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n xOrigin: number,\n yOrigin: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n\n if ((group as Group).role === 'body') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'row-header') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'col-header') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'right-frozen') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'bottom-frozen') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-right-top-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-right-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-left-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n }\n }\n}\n\nconst precision = Math.pow(2, 24);\n\nfunction drawClipRect(context: IContext2d, x: number, y: number, width: number, height: number) {\n context.beginPath();\n\n const matrix = context.applyedMatrix;\n if (Math.abs(matrix.f) > precision || Math.abs(matrix.g) > precision) {\n // hack for precision problem in CanvasRenderingContext2D\n // if position is too big, disable clip\n context.rect(x - precision, y - precision, width + precision * 2, height + precision * 2);\n } else {\n context.rect(x, y, width, height);\n }\n}\n\n// @injectable()\n// export class ClipBodyGroupAfterRenderContribution implements IGroupRenderContribution {\n// time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n// useStyle = true;\n// order = 0;\n// drawShape(\n// group: IGroup,\n// context: IContext2d,\n// x: number,\n// y: number,\n// doFill: boolean,\n// doStroke: boolean,\n// fVisible: boolean,\n// sVisible: boolean,\n// groupAttribute: Required,\n// drawContext: IDrawContext,\n// fillCb?: (\n// ctx: IContext2d,\n// markAttribute: Partial,\n// themeAttribute: IThemeAttribute\n// ) => boolean,\n// strokeCb?: (\n// ctx: IContext2d,\n// markAttribute: Partial,\n// themeAttribute: IThemeAttribute\n// ) => boolean\n// ) {\n// // 处理hover颜色\n// if ((group as Group).role === 'body') {\n// }\n// }\n// }\n\nfunction getCellSizeForDraw(group: any, width: number, height: number, bottomRight: boolean) {\n const table = group.stage.table as BaseTableAPI;\n if (!table) {\n return { width, height };\n }\n if (group.role === 'cell') {\n let col = group.col as number;\n let row = group.row as number;\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo) {\n col = mergeInfo.end.col;\n row = mergeInfo.end.row;\n }\n\n if (col === table.colCount - 1 && !bottomRight) {\n width -= 1;\n } else if (col === table.frozenColCount - 1 && table.scrollLeft && !bottomRight) {\n width -= 1;\n } else if (col === 0 && bottomRight) {\n width -= 1;\n }\n if (row === table.rowCount - 1 && !bottomRight) {\n height -= 1;\n } else if (row === table.frozenRowCount - 1 && table.scrollTop && !bottomRight) {\n height -= 1;\n } else if (row === 0 && bottomRight) {\n height -= 1;\n }\n } else if (group.role === 'corner-frozen') {\n if (table.scrollLeft && !bottomRight) {\n width -= 1;\n }\n if (table.scrollTop && !bottomRight) {\n height -= 1;\n }\n }\n\n return { width, height };\n}\n\nfunction getQuadLineDash(lineDash: number[][]) {\n if (lineDash.length === 1) {\n return [lineDash[0], lineDash[0], lineDash[0], lineDash[0]];\n } else if (lineDash.length === 2) {\n return [lineDash[0], lineDash[1], lineDash[0], lineDash[1]];\n }\n // 不考虑三个数的情况,三个数是用户传错了\n return lineDash;\n}\n","import type {\n IRect,\n IContext2d,\n IRectGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IRectRenderContribution,\n IGroup,\n IGroupGraphicAttribute,\n IDrawContext,\n ICustomPath2D\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable } from './../../../vrender';\nimport { getWidthInfo, renderStroke } from './group-contribution-render';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { vec2, vec4 } from '@visactor/vutils';\nimport { abs, arrayEqual, halfPi, isArray, isNumber, pi } from '@visactor/vutils';\nimport { createRectPath } from '@visactor/vrender-core';\n\n@injectable()\nexport class SplitRectBeforeRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // const { stroke = rectAttribute.stroke } = group.attribute as any;\n\n // if (Array.isArray(stroke)) {\n // doFillOrStroke.doStroke = false;\n // }\n\n const {\n stroke = rectAttribute.stroke,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor\n } = rect.attribute as any;\n\n if (stroke && (Array.isArray(stroke) || Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class SplitRectAfterRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const {\n // width = rectAttribute.width,\n // height = rectAttribute.height,\n // stroke = rectAttribute.stroke\n // } = group.attribute as any;\n\n // if (!Array.isArray(stroke)) {\n // return;\n // }\n\n // context.setStrokeStyle(group, group.attribute, x, y, rectAttribute);\n // // 单独处理每条边界,目前不考虑圆角\n // context.beginPath();\n // context.moveTo(x, y);\n // // top\n // if (stroke[0]) {\n // context.lineTo(x + width, y);\n // } else {\n // context.moveTo(x + width, y);\n // }\n // // right\n // if (stroke[1]) {\n // context.lineTo(x + width, y + height);\n // } else {\n // context.moveTo(x + width, y + height);\n // }\n // // bottom\n // if (stroke[2]) {\n // context.lineTo(x, y + height);\n // } else {\n // context.moveTo(x, y + height);\n // }\n // // left\n // if (stroke[3]) {\n // // 没有close path是,起点和终点不连续,需要调整y保证不出现缺口\n // const adjustY = stroke[0] ? y - context.lineWidth / 2 : y;\n // context.lineTo(x, adjustY);\n // } else {\n // context.moveTo(x, y);\n // }\n\n // context.stroke();\n\n const {\n width = rectAttribute.width,\n height = rectAttribute.height,\n // 基础border\n stroke = rectAttribute.stroke,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n\n lineWidth = rectAttribute.lineWidth,\n strokeColor = rectAttribute.stroke,\n\n cornerRadius = rectAttribute.cornerRadius\n // // select & hover border\n // highlightStroke = (rectAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (rectAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (rectAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (rectAttribute as any).highlightStrokeArrayPart,\n } = rect.attribute as any;\n\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n if (Array.isArray(stroke) || Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n // let dx = 0;\n // let dy = 0;\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (\n rect.name !== 'border-rect' && // border-rect not need offset\n rect.name !== 'table-border-rect' && // table-border-rect not need offset\n ((typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1)))\n ) {\n // const table = (rect.stage as any).table as BaseTableAPI;\n // const bottomRight = table.theme.cellBorderClipDirection === 'bottom-right';\n // if (bottomRight) {\n // x = Math.floor(x) - 0.5;\n // y = Math.floor(y) - 0.5;\n // deltaWidth = 0.5;\n // deltaHeight = 0.5;\n // } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n // }\n }\n\n // 带不同stroke边框\n if (!(cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0)))) {\n // let lastStrokeI = 0;\n // let lastStroke: any;\n context.beginPath();\n // debugger;\n createRectPath(\n context,\n x,\n y,\n width,\n height,\n cornerRadius,\n new Array(4).fill(0).map((_, i) => (x1: number, y1: number, x2: number, y2: number) => {\n renderStrokeWithCornerRadius(\n i,\n x1,\n y1,\n x2,\n y2,\n rect,\n context,\n x,\n y,\n rectAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight)\n );\n })\n );\n\n context.stroke();\n } else {\n renderStroke(\n rect as IGroup,\n context,\n x,\n y,\n rectAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight)\n );\n }\n }\n }\n}\n\nexport function renderStrokeWithCornerRadius(\n i: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required,\n stroke: any,\n strokeArrayWidth: any,\n strokeArrayColor: any,\n width: number,\n height: number\n) {\n const group = rect;\n const groupAttribute = rectAttribute;\n\n // if (stroke[i]) {\n // if (!(lastStrokeI === i - 1 && stroke[i] === lastStroke)) {\n // context.setStrokeStyle(rect, { ...rect.attribute, stroke: stroke[i] }, x, y, rectAttribute);\n // context.beginPath();\n // context.moveTo(x1, y1);\n // lastStroke = stroke[i];\n // }\n // lastStrokeI = i;\n // context.lineTo(x2, y2);\n // context.stroke();\n // if (i === 3) {\n // context.beginPath();\n // }\n // }\n\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n const { lineDash = groupAttribute.lineDash } = group.attribute as any;\n // const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length && lineDash.some((dash: number[] | null) => Array.isArray(dash))) {\n isDash = true;\n }\n\n // 单独处理每条边界,目前不考虑圆角\n // context.beginPath();\n context.moveTo(x, y);\n\n const strokeTop = (isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0]);\n const strokeRight = (isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1]);\n const strokeBottom = (isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2]);\n const strokeLeft = (isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3]);\n\n // top\n if (strokeTop && i === 0) {\n // context.lineTo(x + width, y);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n\n // context.moveTo(x - deltaLeft, y);\n // context.lineTo(x + width + deltaRight, y);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[0]) {\n context.strokeStyle = strokeArrayColor[0];\n } else if (strokeArrayColor && !strokeArrayColor[0]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[0] ?? []);\n }\n context.stroke();\n context.beginPath();\n // context.moveTo(x + width, y);\n }\n } else if (i === 0) {\n context.moveTo(x + width, y);\n }\n // right\n if (strokeRight && i === 1) {\n // context.lineTo(x + width, y + height);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n\n // context.moveTo(x + width, y - deltaTop);\n // context.lineTo(x + width, y + height + deltaBottom);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[1]) {\n context.strokeStyle = strokeArrayColor[1];\n } else if (strokeArrayColor && !strokeArrayColor[1]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[1] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else if (i === 1) {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if (strokeBottom && i === 2) {\n // context.lineTo(x, y + height);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n\n // context.moveTo(x - deltaLeft, y + height);\n // context.lineTo(x + width + deltaRight, y + height);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[2]) {\n context.strokeStyle = strokeArrayColor[2];\n } else if (strokeArrayColor && !strokeArrayColor[2]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[2] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else if (i === 2) {\n context.moveTo(x, y + height);\n }\n // left\n if (strokeLeft && i === 3) {\n // context.lineTo(x, y);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n\n // context.moveTo(x, y - deltaTop);\n // context.lineTo(x, y + height + deltaBottom);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[3]) {\n context.strokeStyle = strokeArrayColor[3];\n } else if (strokeArrayColor && !strokeArrayColor[3]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[3] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else if (i === 3) {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n context.lineDashOffset = 0;\n // context.lineCap = oldLineCap;\n context.setLineDash([]);\n\n context.closePath();\n}\n\ntype IEdgeCb = (x1: number, y1: number, x2: number, y2: number) => void;\n","import type {\n IDrawItemInterceptorContribution,\n IGraphic,\n IRenderService,\n IDrawContext,\n IDrawContribution,\n IGraphicRenderDrawParams,\n IImage\n} from './../../../vrender';\nimport { injectable, createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nlet loadingImage: IImage;\n\n@injectable()\nexport class VTableDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n interceptors: IDrawItemInterceptorContribution[];\n constructor() {\n this.interceptors = [new ImageDrawItemInterceptorContribution()];\n }\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].afterDrawItem &&\n this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 【性能方案】判定写在外层,减少遍历判断耗时,10000条数据减少1ms\n if (\n (!graphic.in3dMode || drawContext.in3dInterceptor) &&\n !graphic.shadowRoot &&\n !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)\n ) {\n return false;\n }\n\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].beforeDrawItem &&\n this.interceptors[i].beforeDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\nexport class ImageDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.type === 'image') {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IImage,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n const { image: url, gif } = graphic.attribute as any;\n\n if (gif && graphic.playing) {\n return false;\n }\n if (!url || !graphic.resources) {\n return false;\n }\n const res = graphic.resources.get(url);\n if (!res || res.state !== 'loading') {\n return false;\n }\n\n if (!loadingImage) {\n const regedIcons = icons.get();\n const svg = (regedIcons.loading_pic as any).svg;\n const width = (regedIcons.loading_pic as any).width;\n const height = (regedIcons.loading_pic as any).height;\n loadingImage = createImage({\n width,\n height,\n image: svg\n });\n }\n const { image: loadingUrl } = loadingImage.attribute;\n if (!url || !loadingImage.resources) {\n return false;\n }\n const loadingRes = loadingImage.resources.get(loadingUrl);\n if (loadingRes.state !== 'success') {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n graphic.parent && context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n graphic.glyphHost &&\n graphic.glyphHost.parent &&\n context.setTransformFromMatrix(graphic.glyphHost.parent.globalTransMatrix, true);\n\n const b = graphic.AABBBounds;\n\n const { width, height } = calcKeepAspectRatioSize(\n loadingRes.data.width,\n loadingRes.data.height,\n b.width(),\n b.height()\n );\n\n context.drawImage(loadingRes.data, b.x1 + (b.width() - width) / 2, b.y1 + (b.height() - height) / 2, width, height);\n\n context.highPerformanceRestore();\n\n return true;\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IMarkAttribute,\n IText,\n ITextGraphicAttribute,\n ITextRenderContribution,\n IThemeAttribute\n} from './../../../vrender';\nimport {\n BaseRenderContributionTime,\n calculateLineHeight,\n injectable,\n textDrawOffsetX,\n textLayoutOffsetY\n} from './../../../vrender';\nimport { isString } from '@visactor/vutils';\nimport { textMeasure } from '../../utils/text-measure';\n\n@injectable()\nexport class SuffixTextBeforeRenderContribution implements ITextRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n textAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n ellipsis = textAttribute.ellipsis,\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n let isEmpty: boolean = false;\n if (Array.isArray(text)) {\n const layoutData = text.cache?.layoutData;\n if (ellipsis && layoutData && layoutData.lines.every(line => line.str === '')) {\n isEmpty = true;\n }\n } else {\n const { cache } = text;\n if (ellipsis && cache && cache.clipedText === '' && cache.clipedWidth === 0) {\n isEmpty = true;\n }\n }\n\n if (!isEmpty) {\n return;\n }\n\n const textStr = isString(ellipsis) ? ellipsis : '...';\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n let dy = 0;\n if (lineHeight !== fontSize) {\n if (textBaseline === 'top') {\n dy = (lineHeight - fontSize) / 2;\n } else if (textBaseline === 'middle') {\n // middle do nothing\n } else if (textBaseline === 'bottom') {\n dy = -(lineHeight - fontSize) / 2;\n } else {\n // alphabetic do nothing\n // dy = (lineHeight - fontSize) / 2 - fontSize * 0.79;\n }\n }\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(textStr, originX, originY + dy);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(textStr, originX, originY + dy);\n this.drawUnderLine(underline, lineThrough, text, originX, originY + dy, 0, textAttribute, context, textStr);\n }\n }\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n textAttribute: Required,\n context: IContext2d,\n textStr: string\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n fontSize = textAttribute.fontSize,\n fontFamily = textAttribute.fontFamily,\n fontWeight = textAttribute.fontWeight,\n fontStyle = textAttribute.fontStyle,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n\n if (!underline && !lineThrough) {\n return;\n }\n // const w = text.clipedWidth;\n const w = textMeasure.measureTextWidth(textStr, {\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle\n });\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.setLineDash(underlineDash);\n context.beginPath();\n const dy = y + offsetY + fontSize + underlineOffset;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n","import {\n GraphicRender,\n GroupRenderContribution,\n ImageRenderContribution,\n RectRenderContribution,\n SplitRectBeforeRenderContribution,\n SplitRectAfterRenderContribution,\n ContainerModule,\n DrawItemInterceptor,\n TextRenderContribution\n} from './../../../vrender';\nimport { ChartRender, DefaultCanvasChartRender } from './chart-render';\nimport {\n AfterImageRenderContribution,\n BeforeImageRenderContribution,\n BeforeGifImageRenderContribution,\n AfterGifImageRenderContribution\n} from './image-contribution-render';\nimport {\n SplitRectBeforeRenderContribution as VTableSplitRectBeforeRenderContribution,\n SplitRectAfterRenderContribution as VTableSplitRectAfterRenderContribution\n} from './rect-contribution-render';\nimport {\n DashGroupAfterRenderContribution,\n DashGroupBeforeRenderContribution,\n SplitGroupBeforeRenderContribution,\n SplitGroupAfterRenderContribution,\n AdjustPosGroupBeforeRenderContribution,\n AdjustPosGroupAfterRenderContribution,\n AdjustColorGroupBeforeRenderContribution,\n AdjustColorGroupAfterRenderContribution,\n ClipBodyGroupBeforeRenderContribution\n // ClipBodyGroupAfterRenderContribution\n} from './group-contribution-render';\nimport { VTableDrawItemInterceptorContribution } from './draw-interceptor';\nimport { SuffixTextBeforeRenderContribution } from './text-contribution-render';\n\nexport default new ContainerModule((bind, unbind, isBound, rebind) => {\n // rect 渲染器注入contributions\n if (isBound(SplitRectBeforeRenderContribution)) {\n rebind(SplitRectBeforeRenderContribution).to(VTableSplitRectBeforeRenderContribution).inSingletonScope();\n } else {\n bind(VTableSplitRectBeforeRenderContribution).toSelf().inSingletonScope();\n bind(RectRenderContribution).toService(VTableSplitRectBeforeRenderContribution);\n }\n if (isBound(SplitRectAfterRenderContribution)) {\n rebind(SplitRectAfterRenderContribution).to(VTableSplitRectAfterRenderContribution).inSingletonScope();\n } else {\n bind(VTableSplitRectAfterRenderContribution).toSelf().inSingletonScope();\n bind(RectRenderContribution).toService(VTableSplitRectAfterRenderContribution);\n }\n\n // chart渲染器注入\n bind(DefaultCanvasChartRender).toSelf().inSingletonScope();\n bind(ChartRender).to(DefaultCanvasChartRender);\n bind(GraphicRender).to(DefaultCanvasChartRender);\n\n // image 渲染器注入contributions\n bind(BeforeImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(BeforeImageRenderContribution);\n bind(AfterImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(AfterImageRenderContribution);\n\n bind(BeforeGifImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(BeforeGifImageRenderContribution);\n bind(AfterGifImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(AfterGifImageRenderContribution);\n\n // group 渲染器注入contributions\n bind(AdjustColorGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustColorGroupBeforeRenderContribution);\n bind(AdjustColorGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustColorGroupAfterRenderContribution);\n\n bind(SplitGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(SplitGroupAfterRenderContribution);\n bind(SplitGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(SplitGroupBeforeRenderContribution);\n\n bind(DashGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(DashGroupBeforeRenderContribution);\n bind(DashGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(DashGroupAfterRenderContribution);\n\n bind(AdjustPosGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustPosGroupBeforeRenderContribution);\n bind(AdjustPosGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustPosGroupAfterRenderContribution);\n\n bind(ClipBodyGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(ClipBodyGroupBeforeRenderContribution);\n // bind(ClipBodyGroupAfterRenderContribution).toSelf().inSingletonScope();\n // bind(GroupRenderContribution).toService(ClipBodyGroupAfterRenderContribution);\n\n // interceptor\n bind(VTableDrawItemInterceptorContribution).toSelf().inSingletonScope();\n bind(DrawItemInterceptor).toService(VTableDrawItemInterceptorContribution);\n\n // text 渲染器注入contributions\n bind(SuffixTextBeforeRenderContribution).toSelf().inSingletonScope();\n bind(TextRenderContribution).toService(SuffixTextBeforeRenderContribution);\n});\n","import type { SimpleHeaderLayoutMap } from '../../layout';\nimport type {\n ColumnDefine,\n ColumnTypeOption,\n IRowSeriesNumber,\n PivotTableAPI,\n RadioColumnDefine,\n RadioStyleOption,\n TextColumnDefine\n} from '../../ts-types';\nimport { HierarchyState, IconPosition } from '../../ts-types';\nimport * as calc from '../../tools/calc';\nimport { validToString } from '../../tools/util';\nimport { getQuadProps } from '../utils/padding';\nimport { getProp } from '../utils/get-prop';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ComputeAxisComponentWidth } from '../../components/axis/get-axis-component-size';\nimport { Factory } from '../../core/factory';\nimport type { Group as VGroup } from './../../vrender';\nimport { isArray, isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\nimport { decodeReactDom, dealPercentCalc } from '../component/custom';\nimport { breakString } from '../utils/break-string';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\n\nexport function computeColsWidth(table: BaseTableAPI, colStart?: number, colEnd?: number, update?: boolean): void {\n // const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n table.internalProps.columnWidthConfig &&\n (table as PivotTableAPI)._parseColumnWidthConfig(table.internalProps.columnWidthConfig);\n colStart = colStart ?? 0;\n colEnd = colEnd ?? table.colCount - 1;\n // table._clearColRangeWidthsMap();\n // clear colRangeWidthsMap\n if (colStart === 0 && colEnd === table.colCount - 1) {\n table._clearColRangeWidthsMap();\n // } else {\n // for (let col = colStart; col <= colEnd; col++) {\n // table._clearColRangeWidthsMap(col);\n // }\n }\n\n const layoutMap = table.internalProps.layoutMap;\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).enableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).enableUseHeaderPathCache();\n }\n\n const oldColWidths: number[] = [];\n const newWidths: number[] = [];\n if (update) {\n for (let col = 0; col < table.colCount; col++) {\n oldColWidths[col] = table.getColWidth(col);\n }\n }\n for (let col = colStart; col <= colEnd; col++) {\n let maxWidth;\n if (\n !table.internalProps.transpose &&\n (table.internalProps.layoutMap.columnObjects?.[col]?.columnWidthComputeMode === 'only-header' ||\n table.columnWidthComputeMode === 'only-header') &&\n 'showHeader' in table.internalProps.layoutMap\n ) {\n const temp = table.internalProps.layoutMap.showHeader;\n table.internalProps.layoutMap.showHeader = true;\n maxWidth = computeColWidth(col, 0, table.internalProps.layoutMap.headerLevelCount - 1, table);\n table.internalProps.layoutMap.showHeader = temp;\n } else if (\n !table.internalProps.transpose &&\n (table.internalProps.layoutMap.columnObjects?.[col]?.columnWidthComputeMode === 'only-body' ||\n table.columnWidthComputeMode === 'only-body')\n ) {\n maxWidth = computeColWidth(\n col,\n table.internalProps.layoutMap.getBodyRange().start.row,\n table.internalProps.layoutMap.getBodyRange().end.row,\n table\n );\n } else {\n maxWidth = computeColWidth(col, 0, table.rowCount - 1, table);\n }\n\n table._setColContentWidth(col, maxWidth);\n\n const oldWidth = table.getColWidth(col);\n if (oldWidth !== maxWidth) {\n table._clearColRangeWidthsMap(col);\n }\n if (update) {\n newWidths[col] = Math.round(table._adjustColWidth(col, maxWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, maxWidth), false, true);\n }\n }\n\n // 处理adaptive宽度\n if (table.widthMode === 'adaptive') {\n // const rowHeaderWidth = table.getColsWidth(0, table.rowHeaderLevelCount - 1);\n // const rightHeaderWidth = table.isPivotChart() ? table.getRightFrozenColsWidth() : 0;\n // const totalDrawWidth = table.tableNoFrameWidth - rowHeaderWidth - rightHeaderWidth;\n\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n }\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, update, newWidths, table);\n // const canvasWidth = table.internalProps.canvas.width;\n // const rowHeaderWidth = table.getColsWidth(0, table.rowHeaderLevelCount - 1);\n // const rightHeaderWidth = table.isPivotChart() ? table.getRightFrozenColsWidth() : 0;\n // const totalDrawWidth = table.tableNoFrameWidth - rowHeaderWidth - rightHeaderWidth;\n // const startCol = table.rowHeaderLevelCount;\n // const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n // let actualWidth = 0;\n // for (let col = startCol; col < endCol; col++) {\n // actualWidth += update ? newWidths[col] : table.getColWidth(col);\n // }\n // const factor = totalDrawWidth / actualWidth;\n // for (let col = startCol; col < endCol; col++) {\n // let colWidth;\n // if (col === endCol - 1) {\n // colWidth =\n // totalDrawWidth -\n // (update\n // ? newWidths.reduce((acr, cur, index) => {\n // if (index >= startCol && index <= endCol - 2) {\n // return acr + cur;\n // }\n // return acr;\n // }, 0)\n // : table.getColsWidth(startCol, endCol - 2));\n // } else {\n // colWidth = Math.round((update ? newWidths[col] : table.getColWidth(col)) * factor);\n // }\n // if (update) {\n // newWidths[col] = table._adjustColWidth(col, colWidth);\n // } else {\n // table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n // }\n // }\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, update, newWidths, table);\n }\n\n // // 如果内容宽度小于canvas宽度,执行adaptive放大\n // if (actualWidth < canvasWidth && actualWidth - actualHeaderWidth > 0) {\n // const factor = (canvasWidth - actualHeaderWidth) / (actualWidth - actualHeaderWidth);\n // for (let col = table.frozenColCount; col < table.colCount - table.rightFrozenColCount; col++) {\n // let colWidth;\n // if (col === table.colCount - table.rightFrozenColCount - 1) {\n // colWidth =\n // canvasWidth -\n // actualHeaderWidth -\n // (update\n // ? newWidths.reduce((acr, cur, index) => {\n // if (index >= table.frozenColCount && index <= table.colCount - table.rightFrozenColCount - 2) {\n // return acr + cur;\n // }\n // return acr;\n // }, 0)\n // : table.getColsWidth(table.frozenColCount, table.colCount - table.rightFrozenColCount - 2));\n // } else {\n // colWidth = Math.round((update ? newWidths[col] : table.getColWidth(col)) * factor);\n // }\n // if (update) {\n // // newWidths[col] = newWidths[col] * factor;\n // newWidths[col] = table._adjustColWidth(col, colWidth);\n // } else {\n // // table.setColWidth(col, table.getColWidth(col) * factor, false, true);\n // table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n // }\n // }\n // }\n }\n // console.log('computeColsWidth time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n\n if (update) {\n for (let col = 0; col < table.colCount; col++) {\n // newColWidth could not be in column min max range possibly\n // const newColWidth = table._adjustColWidth(col, newWidths[col]) ?? table.getColWidth(col);\n const newColWidth = newWidths[col] ?? table.getColWidth(col) ?? table.getColWidth(col);\n if (newColWidth !== oldColWidths[col]) {\n // update the column width in scenegraph\n table._setColWidth(col, newColWidth, false, true);\n // table.scenegraph.updateColWidth(col, newColWidth - oldColWidths[col], true, true);\n }\n }\n table.stateManager.checkFrozen();\n for (let col = 0; col < table.colCount; col++) {\n // newColWidth could not be in column min max range possibly\n // const newColWidth = table._adjustColWidth(col, newWidths[col]) ?? table.getColWidth(col);\n const newColWidth = table.getColWidth(col);\n if (newColWidth !== oldColWidths[col]) {\n // update the column width in scenegraph\n // table._setColWidth(col, newColWidth);\n table.scenegraph.updateColWidth(col, newColWidth - oldColWidths[col], true, true);\n }\n }\n table.scenegraph.updateContainer(true);\n }\n // console.log('computeColsWidth time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time, colStart, colEnd);\n\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).disableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).disableUseHeaderPathCache();\n }\n}\n\n/**\n * @description: 计算列宽\n * @param {number} col\n * @param {number} startRow\n * @param {number} endRow\n * @param {BaseTableAPI} table\n * @param {boolean} forceCompute\n * @return {*}\n */\nexport function computeColWidth(\n col: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI,\n forceCompute: boolean = false //forceCompute如果设置为true 即便不是自动列宽的列也会按内容计算列宽\n): number {\n let width = getColWidthDefinedWidthResizedWidth(col, table);\n if (\n table.internalProps.transpose &&\n width === 'auto' &&\n ((table.columnWidthComputeMode === 'only-header' && col >= table.rowHeaderLevelCount) ||\n (table.columnWidthComputeMode === 'only-body' && col < table.rowHeaderLevelCount))\n ) {\n width = table.getDefaultColumnWidth(col);\n }\n\n if (forceCompute && !table.internalProps.transpose) {\n return computeAutoColWidth(width, col, startRow, endRow, forceCompute, table);\n } else if (typeof width === 'number') {\n return width;\n } else if (width !== 'auto' && typeof width === 'string') {\n // return calc.toPx(width, table.internalProps.calcWidthContext);\n return table._adjustColWidth(col, table._colWidthDefineToPxWidth(width));\n }\n return computeAutoColWidth(width, col, startRow, endRow, forceCompute, table);\n}\n\n/**\n * @description: 计算width: auto情况下的列宽\n * @param {number} col\n * @param {number} startRow\n * @param {number} endRow\n * @param {boolean} forceCompute\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeAutoColWidth(\n widthDeifne: string | number,\n col: number,\n startRow: number,\n endRow: number,\n forceCompute: boolean,\n table: BaseTableAPI\n): number {\n // 处理 auto width\n let maxWidth = 0;\n let deltaRow = 1;\n let prepareDeltaRow = 1; // 当计算完表头单元格的宽度后再采用采用逻辑,prepareDeltaRow这个值为期body部分做准备\n if (endRow - startRow > 5000) {\n // 超过5000行启动列宽自动计算采样\n prepareDeltaRow = Math.ceil((endRow - startRow) / 5000);\n }\n // 如果是透视图\n if (table.isPivotChart() && col >= table.rowHeaderLevelCount && col < table.colCount - table.rightFrozenColCount) {\n if (!(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol) {\n //并且指标是以行展示 计算列宽需要根据x轴的值域范围\n const optimunWidth = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getOptimunWidthForChart(col);\n if (optimunWidth > 0) {\n return optimunWidth;\n }\n } else {\n //直接拿表头的默认列宽\n return table.defaultColWidth;\n }\n }\n\n for (let row = startRow; row <= endRow; row += deltaRow) {\n // 判断透视图轴组件\n if (table.isPivotChart()) {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const axisConfig = layout.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const computeAxisComponentWidth: ComputeAxisComponentWidth = Factory.getFunction('computeAxisComponentWidth');\n const axisWidth = computeAxisComponentWidth(axisConfig, table);\n if (typeof axisWidth === 'number') {\n maxWidth = Math.max(axisWidth, maxWidth);\n continue;\n }\n } else if (\n layout.isLeftBottomCorner(col, row) ||\n layout.isRightTopCorner(col, row) ||\n layout.isRightBottomCorner(col, row)\n ) {\n // 透视图三角为无效单元格,不参与宽度计算\n continue;\n }\n }\n\n // 判断CustomRender\n const customWidth = computeCustomRenderWidth(col, row, table);\n if (customWidth) {\n maxWidth = Math.max(customWidth.width, maxWidth);\n if (!customWidth.renderDefault) {\n continue;\n }\n }\n\n // 判断透视表如果在指标\n // const indicatorWidth = computeIndicatorWidth(col, row, forceCompute, table);\n // const indicatorWidth = table.internalProps.layoutMap.getColumnWidthDefined(col);\n const indicatorWidth = widthDeifne;\n if (typeof indicatorWidth === 'number' && table.widthMode === 'standard' && !forceCompute) {\n maxWidth = Math.max(indicatorWidth, maxWidth);\n continue;\n }\n\n const cellType = table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData)?.headerType\n : table.getBodyColumnType(col, row);\n if (\n isValid(cellType) &&\n cellType !== 'text' &&\n cellType !== 'link' &&\n cellType !== 'progressbar' &&\n cellType !== 'checkbox' &&\n cellType !== 'radio'\n ) {\n // text&link&progressbar测量文字宽度\n // image&video&sparkline使用默认宽度\n maxWidth = Math.max(maxWidth, table.getColWidthDefinedNumber(col) || 0);\n continue;\n }\n\n // 处理树形展开\n let cellHierarchyIndent = 0;\n const layoutMap = table.internalProps.layoutMap;\n //判断是否为表头\n if (layoutMap.isHeader(col, row)) {\n const hd = layoutMap.getHeader(col, row);\n // 如果某级表头设置了only-body,在计算表头内容宽度时跳过改级表头\n if ((hd as HeaderData)?.define?.columnWidthComputeMode === 'only-body') {\n continue;\n }\n if (isValid((hd as HeaderData)?.hierarchyLevel)) {\n cellHierarchyIndent =\n ((hd as HeaderData).hierarchyLevel ?? 0) * ((layoutMap as PivotHeaderLayoutMap).rowHierarchyIndent ?? 0);\n if (\n (layoutMap as PivotHeaderLayoutMap).rowHierarchyTextStartAlignment &&\n !table.internalProps.headerHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n } else if (table.isListTable()) {\n deltaRow = prepareDeltaRow;\n // 基本表格表身body单元格 如果是树形展开 需要考虑缩进值\n // const cellHierarchyState = table.getHierarchyState(col, row);\n // if (cellHierarchyState === HierarchyState.expand || cellHierarchyState === HierarchyState.collapse) {\n const define = table.getBodyColumnDefine(col, row);\n if ((define as ColumnDefine)?.tree) {\n const indexArr = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row));\n cellHierarchyIndent =\n Array.isArray(indexArr) && table.getHierarchyState(col, row) !== HierarchyState.none\n ? (indexArr.length - 1) * ((layoutMap as SimpleHeaderLayoutMap).hierarchyIndent ?? 0)\n : 0;\n if (\n (layoutMap as SimpleHeaderLayoutMap).hierarchyTextStartAlignment &&\n !table.internalProps.bodyHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n }\n\n // 测量文字宽度\n const textWidth = computeTextWidth(col, row, cellType, table);\n maxWidth = Math.max(textWidth + cellHierarchyIndent, maxWidth);\n //在前面设置了采用规则的情况下,为了确保底部冻结的每一行都测到\n if (\n deltaRow > 1 &&\n table.bottomFrozenRowCount > 0 &&\n row < table.rowCount - table.bottomFrozenRowCount &&\n row + deltaRow >= table.rowCount - table.bottomFrozenRowCount\n ) {\n row = table.rowCount - table.bottomFrozenRowCount - deltaRow;\n deltaRow = 1;\n prepareDeltaRow = 1;\n }\n }\n\n // 处理宽度限制\n const colMinWidth = table.getMinColWidth(col);\n const colMaxWidth = table.getMaxColWidth(col);\n if (maxWidth < colMinWidth) {\n return colMinWidth;\n } else if (maxWidth > colMaxWidth) {\n return colMaxWidth;\n } else if (maxWidth <= 0) {\n // In the case of partially hiding the header, the width calculation may be 0.\n // In this case, the default value is used to prevent it from being unable to be displayed\n maxWidth = table.defaultColWidth;\n }\n return maxWidth;\n}\n\n/**\n * @description: 计算customRender相关列宽\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeCustomRenderWidth(col: number, row: number, table: BaseTableAPI) {\n const customRender = table.getCustomRender(col, row);\n let customLayout = table.getCustomLayout(col, row);\n if (customRender || customLayout) {\n let spanCol = 1;\n let width = 0;\n let renderDefault = false;\n let enableCellPadding = false;\n let cellRange;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n cellRange = table.getCellRange(col, row);\n spanCol = cellRange.end.col - cellRange.start.col + 1;\n }\n const arg = {\n col: cellRange?.start.col ?? col,\n row: cellRange?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: getCellRect(col, row, table),\n table,\n originCol: col,\n originRow: row\n };\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (isFunction(customLayout)) {\n // 处理customLayout\n const customLayoutObj = customLayout(arg);\n if (customLayoutObj.rootContainer) {\n customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n dealPercentCalc(customLayoutObj.rootContainer, 0, table.getRowHeight(row));\n const setedWidth = (customLayoutObj.rootContainer as VGroup).attribute.width;\n customLayoutObj.rootContainer.setStage(table.scenegraph.stage);\n width = setedWidth > 0 ? setedWidth : (customLayoutObj.rootContainer as VGroup).AABBBounds.width() ?? 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n } else {\n width = 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n }\n } else if (typeof customRender === 'function') {\n // 处理customRender\n const customRenderObj = customRender(arg);\n width = customRenderObj?.expectedWidth ?? 0;\n renderDefault = customRenderObj?.renderDefault;\n } else {\n width = customRender?.expectedWidth ?? 0;\n renderDefault = customRender?.renderDefault;\n }\n width = Math.ceil(width);\n if (enableCellPadding) {\n const actStyle = table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n width += padding[1] + padding[3];\n }\n return {\n width: width / spanCol,\n renderDefault\n };\n }\n return undefined;\n}\n\n/**\n * @description: 计算指标相关列宽\n * @param {number} col\n * @param {number} row\n * @param {boolean} forceCompute\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeIndicatorWidth(\n col: number,\n row: number,\n forceCompute: boolean,\n table: BaseTableAPI\n): number | undefined {\n const { layoutMap } = table.internalProps;\n if (table.isPivotTable() && (layoutMap as PivotHeaderLayoutMap).isColumnIndicatorHeader(col, row)) {\n // 透视表如果在指标中配置了宽度,使用该宽度作为指标单元格及下面内容单元格的列宽\n const body = layoutMap.getBody(col, row);\n if (body && body.width && body.width !== 'auto' && !forceCompute) {\n const width = Math.round(calc.toPx(body.width, table.internalProps.calcWidthContext));\n return width;\n }\n }\n return undefined;\n}\n\n/**\n * @description: 计算文字宽度\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeTextWidth(col: number, row: number, cellType: ColumnTypeOption, table: BaseTableAPI): number {\n let maxWidth = 0;\n const cellValue = table.getCellValue(col, row);\n // const dataValue = table.getCellOriginValue(col, row);\n const actStyle = table._getCellStyle(col, row);\n let iconWidth = 0;\n\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = table.getCellLocation(col, row) !== 'body' ? true : !!define?.icon || !!define?.tree;\n\n let mayHaveIcon = false;\n if (table.getCellLocation(col, row) !== 'body') {\n mayHaveIcon = true;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n }\n if (mayHaveIcon) {\n const icons = table.getCellIcons(col, row);\n icons?.forEach(icon => {\n if (icon.positionType !== IconPosition.absoluteRight) {\n iconWidth += (icon.width ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0);\n }\n });\n }\n\n let spanCol = 1;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n const cellRange = table.getCellRange(col, row);\n spanCol = cellRange.end.col - cellRange.start.col + 1;\n }\n\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n const paddingWidth = padding[1] + padding[3]; // + cellHierarchyIndent\n\n const fontSize = getProp('fontSize', actStyle, col, row, table);\n const fontFamily = getProp('fontFamily', actStyle, col, row, table);\n const fontWeight = getProp('fontWeight', actStyle, col, row, table);\n let text: string;\n if (cellType === 'checkbox') {\n text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n } else if (cellType === 'radio') {\n if (isArray(cellValue)) {\n text = '';\n const define = table.getBodyColumnDefine(col, row);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n cellValue.forEach(line => {\n text += (isObject(line) ? (line as any).text : line).toString() + '\\n';\n });\n } else if (radioDirectionInCell === 'horizontal') {\n cellValue.forEach(line => {\n text += (isObject(line) ? (line as any).text : line).toString();\n });\n }\n } else {\n text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n }\n } else {\n text = cellValue;\n }\n const lines = breakString(text, table).text;\n if (lines.length >= 1 && !(lines.length === 1 && lines[0] === '')) {\n // eslint-disable-next-line no-loop-func\n lines.forEach((line: string) => {\n const width = table.measureText(line, {\n fontSize,\n fontFamily,\n fontWeight\n }).width;\n maxWidth = Math.max(\n // 最大字符上限控制测量的字符\n (width + paddingWidth + 4 + iconWidth) / spanCol, // 这里+4为列宽测量结果的buffer\n maxWidth\n );\n });\n } else {\n maxWidth = Math.max(\n // 最大字符上限控制测量的字符\n (paddingWidth + 4 + iconWidth) / spanCol,\n maxWidth\n );\n }\n // 判断是否需要限制最大宽度 之前写死的450 需要使用配置来判断\n if (table.internalProps.limitMaxAutoWidth !== false) {\n maxWidth = Math.min(\n typeof table.internalProps.limitMaxAutoWidth === 'number' ? table.internalProps.limitMaxAutoWidth : 450,\n maxWidth\n );\n }\n\n if (cellType === 'checkbox') {\n const size = getProp('size', actStyle, col, row, table);\n maxWidth += size;\n\n if (text) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n maxWidth += spaceBetweenTextAndIcon;\n }\n } else if (cellType === 'radio') {\n const size = getProp('size', actStyle, col, row, table);\n const outerRadius = getProp('outerRadius', actStyle, col, row, table);\n const circleSize = isNumber(outerRadius) ? outerRadius * 2 : size;\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n\n if (isArray(cellValue)) {\n const define = table.getBodyColumnDefine(col, row);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', actStyle, col, row, table);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n // one icon\n maxWidth += circleSize;\n maxWidth += spaceBetweenTextAndIcon;\n } else if (radioDirectionInCell === 'horizontal') {\n // multi icon\n maxWidth += (circleSize + spaceBetweenTextAndIcon) * cellValue.length;\n maxWidth += spaceBetweenRadio * (cellValue.length - 1);\n }\n } else {\n // one icon\n maxWidth += circleSize;\n if (text) {\n maxWidth += spaceBetweenTextAndIcon;\n }\n }\n }\n\n return maxWidth;\n}\n\nfunction getCellRect(col: number, row: number, table: BaseTableAPI): any {\n return {\n left: 0,\n top: 0,\n right: table.getColWidth(col),\n bottom: table.getRowHeight(row),\n width: null, // vrender 逻辑中通过判断null对flex的元素来自动计算宽高\n height: null\n };\n}\n\nfunction getColWidthDefinedWidthResizedWidth(col: number, table: BaseTableAPI) {\n const widthDefined = table.getColWidthDefined(col);\n if (table.internalProps._widthResizedColMap.has(col)) {\n return table.getColWidth(col);\n }\n return widthDefined;\n}\n\nexport function getAdaptiveWidth(\n totalDrawWidth: number,\n startCol: number,\n endColPlus1: number,\n update: boolean,\n newWidths: number[],\n table: BaseTableAPI,\n fromScenegraph?: boolean\n) {\n let actualWidth = 0;\n const adaptiveColumns: number[] = [];\n const sparklineColumns = [];\n let totalSparklineAbleWidth = 0;\n for (let col = startCol; col < endColPlus1; col++) {\n const width = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n const maxWidth = table.getMaxColWidth(col);\n const minWidth = table.getMinColWidth(col);\n if (width !== maxWidth && width !== minWidth) {\n actualWidth += width;\n adaptiveColumns.push(col);\n } else {\n // fixed width, do not adaptive\n totalDrawWidth -= width;\n }\n\n if (table.options.customConfig?.shrinkSparklineFirst) {\n const bodyCellType = table.getBodyColumnType(col, 0);\n if (bodyCellType === 'sparkline') {\n sparklineColumns.push({ col, width });\n totalSparklineAbleWidth += width - table.defaultColWidth;\n }\n }\n }\n\n const factor = totalDrawWidth / actualWidth;\n\n if (\n table.options.customConfig?.shrinkSparklineFirst &&\n factor < 1 &&\n actualWidth - totalDrawWidth < totalSparklineAbleWidth\n ) {\n // only shrink sparkline column\n for (let i = 0; i < sparklineColumns.length; i++) {\n const { col, width } = sparklineColumns[i];\n const deltaWidth = (actualWidth - totalDrawWidth) / sparklineColumns.length;\n const colWidth = Math.floor(width - deltaWidth);\n\n if (update) {\n newWidths[col] = table._adjustColWidth(col, colWidth);\n } else if (fromScenegraph) {\n table.scenegraph.setColWidth(col, table._adjustColWidth(col, colWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n }\n }\n return;\n }\n\n for (let i = 0; i < adaptiveColumns.length; i++) {\n const col = adaptiveColumns[i];\n let colWidth;\n if (i === adaptiveColumns.length - 1) {\n colWidth =\n totalDrawWidth -\n adaptiveColumns.reduce((acr, cur, index) => {\n if (cur !== col) {\n return acr + (update ? newWidths[cur] ?? table.getColWidth(col) : table.getColWidth(cur));\n }\n return acr;\n }, 0);\n } else {\n colWidth = Math.round((update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col)) * factor);\n }\n if (update) {\n newWidths[col] = table._adjustColWidth(col, colWidth);\n } else if (fromScenegraph) {\n table.scenegraph.setColWidth(col, table._adjustColWidth(col, colWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n }\n }\n}\n","import { Group } from '../graphic/group';\n\nexport const emptyGroup = new Group({});\nemptyGroup.role = 'empty';\n","/* eslint-disable no-undef */\nimport type { IThemeSpec } from './../../vrender';\nimport type {\n CellLocation,\n CellRange,\n ColumnDefine,\n IRowSeriesNumber,\n ListTableConstructorOptions,\n TextColumnDefine\n} from '../../ts-types';\nimport { Group } from '../graphic/group';\nimport { getProp, getRawProp } from '../utils/get-prop';\nimport type { MergeMap } from '../scenegraph';\nimport { createCell, dealWithMergeCellSize, resizeCellGroup } from './cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { getCellCornerRadius, getStyleTheme } from '../../core/tableHelper';\nimport { isPromise } from '../../tools/helper';\nimport { dealPromiseData } from '../utils/deal-promise-data';\nimport { dealWithCustom } from '../component/custom';\n/**\n * 创建复合列 同一列支持创建不同类型单元格\n * @param columnGroup 列Group\n * @param col\n * @param colWidth 配置列宽\n * @param rowStart\n * @param rowEnd\n * @param mergeMap merge单元格信息\n * @param defaultRowHeight\n * @param table\n * @param cellLocation\n * @param rowLimit\n * @param customRender\n * @param customLayout\n * @returns\n */\nexport function createComplexColumn(\n columnGroup: Group,\n col: number,\n colWidth: number,\n rowStart: number,\n rowEnd: number,\n mergeMap: MergeMap,\n defaultRowHeight: number | number[],\n table: BaseTableAPI,\n // cellLocation: CellLocation,\n rowLimit?: number\n) {\n let padding;\n let textAlign;\n let textBaseline;\n /** useColumnTheme 判断是否可以使用columnTheme */\n // insert cell into column group top\n let y = 0;\n // if (columnGroup.colHeight) {\n // // insert cell into column group bottom\n // y = columnGroup.colHeight;\n // }\n if (columnGroup.lastChild && (columnGroup.lastChild as Group).row === rowStart - 1) {\n y = (columnGroup.lastChild as Group).attribute.y + (columnGroup.lastChild as Group).attribute.height;\n } else if (columnGroup.colHeight) {\n y = columnGroup.colHeight;\n }\n\n for (let j = rowStart; j <= rowEnd; j++) {\n const row = j;\n let cellLocation = table.getCellLocation(col, row);\n let value = table.getCellValue(col, row);\n\n // 处理单元格合并\n let cellWidth = colWidth;\n // let cellHeight = table.internalProps.autoRowHeight ? 0 : table.getRowHeight(row);\n let cellHeight = table.getRowHeight(row);\n let range;\n let isMerge;\n let customStyle;\n let customResult;\n let isCustomMerge = false;\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout,\n customRender\n } = customMerge;\n range = customMergeRange;\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n if (isMerge) {\n const needUpdateRange = rowStart > range.start.row;\n const mergeSize = dealMerge(range, mergeMap, table, needUpdateRange);\n cellWidth = mergeSize.cellWidth;\n cellHeight = mergeSize.cellHeight;\n }\n value = customMergeText;\n customStyle = customMergeStyle;\n\n if (customLayout || customRender) {\n customResult = dealWithCustom(\n customLayout,\n customRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n\n isCustomMerge = true;\n }\n }\n\n let colForDefine = col;\n let rowForDefine = row;\n if (range) {\n colForDefine = range.start.col;\n rowForDefine = range.start.row;\n }\n\n // adjust cellLocation for top frozen row\n if (\n !table.isPivotTable() &&\n (cellLocation === 'columnHeader' || cellLocation === 'cornerHeader') &&\n row >= table.columnHeaderLevelCount\n ) {\n cellLocation = 'body';\n }\n let define;\n if (!table.isPivotTable() && table.isSeriesNumberInBody(col, row)) {\n // 序号列 传入的cellLocation是'rowHeader'(不清楚为什么)。这里处理下获取到的define值\n define = table.getBodyColumnDefine(colForDefine, rowForDefine);\n } else {\n define =\n cellLocation !== 'body'\n ? table.getHeaderDefine(colForDefine, rowForDefine)\n : table.getBodyColumnDefine(colForDefine, rowForDefine);\n }\n let mayHaveIcon =\n cellLocation !== 'body'\n ? true\n : (define as IRowSeriesNumber)?.dragOrder || !!define?.icon || !!(define as ColumnDefine)?.tree;\n\n if (\n !range &&\n (table.internalProps.enableTreeNodeMerge || cellLocation !== 'body' || (define as TextColumnDefine)?.mergeCell)\n ) {\n // 只有表头或者column配置合并单元格后再进行信息获取\n range = table.getCellRange(col, row);\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n // 所有Merge单元格,只保留左上角一个真实的单元格,其他使用空Group占位\n if (isMerge) {\n const needUpdateRange = rowStart > range.start.row;\n const mergeSize = dealMerge(range, mergeMap, table, needUpdateRange);\n cellWidth = mergeSize.cellWidth;\n cellHeight = mergeSize.cellHeight;\n }\n }\n let isVtableMerge = false;\n if (table.internalProps.enableTreeNodeMerge && isMerge) {\n const rawRecord = table.getCellRawRecord(range.start.col, range.start.row);\n const { vtableMergeName, vtableMerge } = rawRecord ?? {};\n\n isVtableMerge = vtableMerge;\n if (vtableMerge) {\n mayHaveIcon = true;\n if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customResult = dealWithCustom(\n (table.options as ListTableConstructorOptions).groupTitleCustomLayout,\n undefined,\n range.start.col,\n range.start.row,\n table.getColsWidth(range.start.col, range.end.col),\n table.getRowsHeight(range.start.row, range.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n }\n if (vtableMergeName) {\n value = vtableMergeName;\n }\n }\n\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : (table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : table.getBodyColumnType(col, row)) ?? 'text';\n\n // deal with promise data\n if (isPromise(value)) {\n createEmptyCellGroup(col, row, 0, y, cellWidth, cellHeight, columnGroup);\n dealPromiseData(\n value,\n table,\n callCreateCellForPromiseValue.bind(null, {\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n customStyle,\n mayHaveIcon,\n cellLocation,\n range,\n customResult,\n defaultRowHeight\n })\n );\n columnGroup.updateColumnRowNumber(row);\n const height = table.getRowHeight(row);\n columnGroup.updateColumnHeight(height);\n y += height;\n } else {\n const cellStyle =\n customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n cellTheme.group.width = colWidth;\n cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;\n if (cellTheme._vtable.padding) {\n padding = cellTheme._vtable.padding;\n }\n if (cellTheme.text.textAlign) {\n textAlign = cellTheme.text.textAlign;\n }\n if (cellTheme.text.textBaseline) {\n textBaseline = cellTheme.text.textBaseline;\n }\n\n // enable clip body\n if (cellLocation !== 'body' && !cellTheme.group.fill) {\n cellTheme.group.fill = '#fff';\n }\n const cellGroup = createCell(\n type,\n value,\n define as ColumnDefine,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n columnGroup.updateColumnRowNumber(row);\n if (isMerge) {\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = cellGroup.attribute;\n const { height: contentHeight } = cellGroup.attribute;\n cellGroup.contentWidth = contentWidth;\n cellGroup.contentHeight = contentHeight;\n\n // resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n dealWithMergeCellSize(range, contentWidth, contentHeight, padding, textAlign, textBaseline, table);\n columnGroup.updateColumnHeight(rangeHeight);\n y += rangeHeight;\n } else {\n // columnGroup.updateColumnHeight(cellGroup.attribute.height);\n // y += cellGroup.attribute.height;\n columnGroup.updateColumnHeight(cellHeight);\n y += cellHeight;\n }\n }\n if (rowLimit && row > rowLimit) {\n break;\n }\n }\n\n columnGroup.setAttribute('width', colWidth);\n return {\n width: colWidth,\n height: y\n };\n}\n\n/**\n * 获取列分组主题\n * @param col 列索引\n * @param colWidth 列宽\n * @param table 表格实例\n * @returns 列分组主题\n */\nexport function getColumnGroupTheme(\n col: number,\n colWidth: number,\n table: BaseTableAPI\n): { theme: IThemeSpec & { _vtable: any }; hasFunctionPros: boolean } {\n const style = table._getCellStyle(col, table.columnHeaderLevelCount); // to be fixed\n const { theme: columnTheme, hasFunctionPros } = getStyleTheme(\n style,\n table,\n col,\n table.columnHeaderLevelCount,\n getRawProp\n );\n\n // get column header style\n columnTheme.group.width = colWidth;\n columnTheme.group.height = 0;\n return { theme: columnTheme, hasFunctionPros };\n}\nfunction callCreateCellForPromiseValue(createCellArgs: any) {\n let padding;\n let textAlign;\n let textBaseline;\n const {\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n cellLocation,\n mayHaveIcon,\n customStyle,\n range,\n customResult,\n defaultRowHeight\n } = createCellArgs;\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n cellTheme.group.width = colWidth;\n cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;\n if (cellTheme._vtable.padding) {\n padding = cellTheme._vtable.padding;\n }\n if (cellTheme.text.textAlign) {\n textAlign = cellTheme.text.textAlign;\n }\n if (cellTheme.text.textBaseline) {\n textBaseline = cellTheme.text.textBaseline;\n }\n\n // enable clip body\n if (cellLocation !== 'body' && !cellTheme.group.fill) {\n cellTheme.group.fill = '#fff';\n }\n createCell(\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n}\nfunction dealMerge(range: CellRange, mergeMap: MergeMap, table: BaseTableAPI, forceUpdate: boolean) {\n let cellWidth = 0;\n let cellHeight = 0;\n const mergeResult = mergeMap.get(`${range.start.col},${range.start.row};${range.end.col},${range.end.row}`);\n if (!mergeResult || forceUpdate) {\n for (let col = range.start.col; col <= range.end.col; col++) {\n cellWidth += table.getColWidth(col);\n }\n\n // let cellHeight = 0;\n for (let i = range.start.row; i <= range.end.row; i++) {\n cellHeight += table.getRowHeight(i);\n }\n\n mergeMap.set(`${range.start.col},${range.start.row};${range.end.col},${range.end.row}`, {\n cellWidth,\n cellHeight\n });\n } else {\n cellWidth = mergeResult.cellWidth;\n cellHeight = mergeResult.cellHeight;\n }\n return {\n cellWidth,\n cellHeight\n };\n}\n\nfunction createEmptyCellGroup(\n col: number,\n row: number,\n x: number,\n y: number,\n width: number,\n height: number,\n columnGroup: Group\n) {\n const cellGroup = new Group({\n x,\n y,\n width,\n height\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup.addChild(cellGroup);\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { CellLocation } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { createComplexColumn } from './column-helper';\n\n// /**\n// * @description: 处理全部角表头\n// * @param {Group} colHeaderGroup 列表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createCornerHeaderColGroup(\n// cornerHeaderGroup: Group,\n// xOrigin: number,\n// yOrigin: number,\n// table: BaseTableAPI\n// ) {\n// createColGroup(\n// cornerHeaderGroup,\n// xOrigin,\n// yOrigin,\n// 0, // colStart\n// table.rowHeaderLevelCount - 1, // colEnd\n// 0, // rowStart\n// table.columnHeaderLevelCount - 1, // rowEnd\n// 'cornerHeader', // CellType\n// table\n// );\n// }\n\n// /**\n// * @description: 处理全部列表头\n// * @param {Group} colHeaderGroup 列表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createColHeaderColGroup(colHeaderGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// colHeaderGroup,\n// xOrigin,\n// yOrigin,\n// table.rowHeaderLevelCount, // colStart\n// table.colCount - 1, // colEnd\n// 0, // rowStart\n// table.columnHeaderLevelCount - 1, // rowEnd\n// 'columnHeader', // isHeader\n// table\n// );\n// }\n\n// /**\n// * @description: 处理全部行表头\n// * @param {Group} rowHeaderGroup 行表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createRowHeaderColGroup(rowHeaderGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// rowHeaderGroup,\n// xOrigin,\n// yOrigin,\n// 0, // colStart\n// table.rowHeaderLevelCount - 1, // colEnd\n// table.columnHeaderLevelCount, // rowStart\n// table.rowCount - 1, // rowEnd\n// 'rowHeader', // isHeader\n// table\n// );\n// }\n\n// /**\n// * @description: 处理内容单元格\n// * @param {Group} bodyGroup 内容容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createBodyColGroup(bodyGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// bodyGroup,\n// xOrigin,\n// yOrigin,\n// table.rowHeaderLevelCount, // colStart\n// table.colCount - 1, // colEnd\n// table.columnHeaderLevelCount, // rowStart\n// table.rowCount - 1, // rowEnd\n// 'body', // isHeader\n// table\n// );\n// }\n\n/**\n * @description: 生成一个列的场景节点\n * @param {Group} containerGroup 列容器Group\n * @param {number} xOrigin x起始坐标\n * @param {number} yOrigin y起始坐标\n * @param {number} colStart 起始col\n * @param {number} colEnd 结束col\n * @param {number} rowStart 起始row\n * @param {number} rowEnd 结束row\n * @param {boolean} isHeader 是否是表头\n * @param {BaseTableAPI} table\n * @return {*}\n */\nexport function createColGroup(\n containerGroup: Group,\n xOrigin: number,\n yOrigin: number,\n colStart: number,\n colEnd: number,\n rowStart: number,\n rowEnd: number,\n cellLocation: CellLocation,\n table: BaseTableAPI,\n rowLimit?: number\n) {\n if (colStart > colEnd || rowStart > rowEnd) {\n return;\n }\n const { layoutMap, defaultHeaderRowHeight, defaultColWidth } = table.internalProps;\n const defaultRowHeight = table.defaultRowHeight;\n let x = 0;\n let heightMax = 0;\n for (let i = colStart; i <= colEnd; i++) {\n const col = i;\n const colWidth = table.getColWidth(col);\n\n const columnGroup = new Group({\n x: xOrigin + x,\n y: yOrigin,\n width: colWidth,\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = i;\n containerGroup.addChild(columnGroup);\n const { width: default2Width, height: default2Height } = createComplexColumn(\n columnGroup,\n col,\n colWidth,\n rowStart,\n rowEnd,\n table.scenegraph.mergeMap,\n cellLocation === 'columnHeader' && isNumber(defaultHeaderRowHeight)\n ? (defaultHeaderRowHeight as number)\n : defaultRowHeight,\n table,\n // cellLocation,\n rowLimit\n );\n x += default2Width;\n heightMax = Math.max(heightMax, default2Height);\n }\n // 更新containerGroup尺寸\n containerGroup.setAttribute('width', x);\n containerGroup.setAttribute('height', heightMax);\n}\n","import type { ListTable } from '../../../ListTable';\nimport { ListTableAPI } from '../../../ts-types';\nimport type { Group } from '../../graphic/group';\nimport { computeColsWidth } from '../../layout/compute-col-width';\nimport { computeRowsHeight } from '../../layout/compute-row-height';\nimport { createColGroup } from '../column';\nimport type { SceneProxy } from './proxy';\n\nexport function createGroupForFirstScreen(\n cornerHeaderGroup: Group,\n colHeaderGroup: Group,\n rowHeaderGroup: Group,\n rightFrozenGroup: Group,\n bottomFrozenGroup: Group,\n bodyGroup: Group,\n xOrigin: number,\n yOrigin: number,\n proxy: SceneProxy\n) {\n const { table } = proxy;\n const { leftBottomCornerGroup, rightTopCornerGroup, rightBottomCornerGroup } = table.scenegraph;\n\n // compute parameters\n proxy.setParamsForRow();\n proxy.setParamsForColumn();\n\n let distCol;\n let distRow;\n let distColForCompute;\n let distRowForCompute;\n if (\n table.widthMode === 'adaptive' ||\n (table.options.autoWrapText && (table.heightMode === 'adaptive' || table.isAutoRowHeight()))\n ) {\n // distCol = table.colCount - 1;\n // proxy.colEnd = distCol;\n\n distColForCompute = table.colCount - 1;\n distCol = Math.min(proxy.firstScreenColLimit - 1, table.colCount - 1);\n } else {\n distCol = Math.min(proxy.firstScreenColLimit - 1, table.colCount - 1);\n }\n if (table.heightMode === 'adaptive') {\n // distRow = table.rowCount - 1;\n // proxy.rowEnd = distRow;\n\n distRowForCompute = table.rowCount - 1;\n distRow = Math.min(proxy.firstScreenRowLimit - 1, table.rowCount - 1);\n } else {\n distRow = Math.min(proxy.firstScreenRowLimit - 1, table.rowCount - 1);\n }\n if (table.internalProps._widthResizedColMap.size === 0) {\n // compute colums width in first screen\n computeColsWidth(table, 0, distColForCompute ?? distCol);\n }\n\n if (table.internalProps._heightResizedRowMap.size === 0) {\n // compute rows height in first screen\n computeRowsHeight(table, 0, distRowForCompute ?? distRow);\n }\n\n if (distCol < table.colCount - table.rightFrozenColCount) {\n // compute right frozen row height\n computeColsWidth(table, table.colCount - table.rightFrozenColCount, table.colCount - 1);\n }\n if (distRow < table.rowCount - table.bottomFrozenRowCount) {\n // compute bottom frozen row height\n computeRowsHeight(table, table.rowCount - table.bottomFrozenRowCount, table.rowCount - 1);\n }\n\n // update colHeaderGroup rowHeaderGroup bodyGroup position\n table.scenegraph.colHeaderGroup.setAttribute('x', table.getFrozenColsWidth());\n table.scenegraph.rowHeaderGroup.setAttribute('y', table.getFrozenRowsHeight());\n table.scenegraph.bottomFrozenGroup.setAttribute('x', table.getFrozenColsWidth());\n table.scenegraph.rightFrozenGroup.setAttribute('y', table.getFrozenRowsHeight());\n table.scenegraph.bodyGroup.setAttributes({\n x: table.getFrozenColsWidth(),\n y: table.getFrozenRowsHeight()\n });\n\n // create cornerHeaderGroup\n createColGroup(\n cornerHeaderGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.frozenColCount - 1, // colEnd\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n table.isListTable() ? 'columnHeader' : 'cornerHeader', // CellType\n table\n );\n\n // create colHeaderGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n colHeaderGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n table\n );\n\n // create rowHeaderGroup\n if (table.frozenColCount > 0) {\n if (table.leftRowSeriesNumberCount > 0) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.leftRowSeriesNumberCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.rowHeaderLevelCount > 0) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n table.leftRowSeriesNumberCount, // colStart\n table.leftRowSeriesNumberCount + table.rowHeaderLevelCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.frozenColCount > table.rowHeaderLevelCount + table.leftRowSeriesNumberCount) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, // colStart\n table.frozenColCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'body',\n table\n );\n }\n }\n\n if (table.bottomFrozenRowCount > 0) {\n // if (!table.isPivotChart()) {\n // create left bottom frozen\n // if (table.rowHeaderLevelCount > 0) {\n // createColGroup(\n // leftBottomCornerGroup,\n // xOrigin,\n // yOrigin,\n // 0, // colStart\n // table.rowHeaderLevelCount - 1, // colEnd\n // table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n // table.rowCount - 1, // rowEnd\n // 'rowHeader', // isHeader\n // table\n // );\n // }\n // if (table.frozenColCount > table.rowHeaderLevelCount) {\n // createColGroup(\n // leftBottomCornerGroup,\n // xOrigin,\n // yOrigin,\n // table.rowHeaderLevelCount, // colStart\n // table.frozenColCount - 1, // colEnd\n // table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n // table.rowCount - 1, // rowEnd\n // 'body',\n // table\n // );\n // }\n\n if (table.frozenColCount > 0) {\n if (table.leftRowSeriesNumberCount > 0) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.leftRowSeriesNumberCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.rowHeaderLevelCount > 0) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.leftRowSeriesNumberCount, // colStart\n table.leftRowSeriesNumberCount + table.rowHeaderLevelCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.frozenColCount > table.rowHeaderLevelCount + table.leftRowSeriesNumberCount) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, // colStart\n table.frozenColCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'body',\n table\n );\n }\n }\n // }\n // create bottomFrozenGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n bottomFrozenGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n table.isPivotChart() ? 'rowHeader' : 'body', // isHeader\n table\n );\n }\n\n if (table.rightFrozenColCount > 0) {\n // if (!table.isPivotChart()) {\n // create right top frozen Group\n createColGroup(\n rightTopCornerGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n table\n );\n // }\n // create rightFrozenGroup\n createColGroup(\n rightFrozenGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n table.isPivotChart() ? 'rowHeader' : 'body', // isHeader\n table\n );\n }\n\n if (table.bottomFrozenRowCount > 0 && table.rightFrozenColCount > 0) {\n // create right bottom frozen Group\n createColGroup(\n rightBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n\n // create bodyGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n bodyGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'body', // isHeader\n table\n );\n\n // update progress information\n if (\n !bodyGroup.firstChild &&\n !colHeaderGroup.firstChild &&\n !cornerHeaderGroup.firstChild &&\n !rowHeaderGroup.firstChild\n ) {\n // 无数据\n proxy.currentRow = proxy.totalRow;\n proxy.rowEnd = proxy.currentRow;\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n\n proxy.currentCol = proxy.totalCol;\n proxy.colEnd = proxy.currentCol;\n proxy.colUpdatePos = proxy.colEnd + 1;\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n } else {\n proxy.currentRow =\n (bodyGroup.firstChild as Group)?.rowNumber ?? (rowHeaderGroup.firstChild as Group)?.rowNumber ?? proxy.totalRow;\n proxy.rowEnd = proxy.currentRow;\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n\n proxy.currentCol =\n (bodyGroup.lastChild as Group)?.col ??\n (colHeaderGroup.lastChild as Group)?.col ??\n (rowHeaderGroup.lastChild as Group)?.col ??\n (cornerHeaderGroup.lastChild as Group)?.col ??\n proxy.totalCol;\n proxy.colEnd = proxy.currentCol;\n proxy.colUpdatePos = proxy.colEnd + 1;\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n\n // 开始异步任务\n proxy.progress();\n }\n}\n","import type { Group } from '../../../graphic/group';\nimport { getCellMergeInfo } from '../../../utils/get-cell-merge';\nimport { updateCell } from '../../cell-helper';\nimport type { SceneProxy } from '../proxy';\n\nexport function checkFirstRowMerge(row: number, proxy: SceneProxy) {\n for (let col = 0; col < proxy.table.colCount; col++) {\n if (\n (col >= proxy.table.rowHeaderLevelCount && col < proxy.colStart) ||\n (col > proxy.colEnd && col < proxy.table.colCount - proxy.table.rightFrozenColCount)\n ) {\n continue;\n }\n\n const range = getCellMergeInfo(proxy.table, col, row);\n // 清除之前mock的Merge cell\n range && clearHadMergedRow(range.start.row, range.end.row, col, proxy);\n\n // 重新生成mock的Merge cell\n if (\n range &&\n range.start.row !== row &&\n proxy.highPerformanceGetCell(range.start.col, range.start.row, true).role !== 'cell'\n ) {\n // 在row的位置添加range.start.row单元格\n const oldCellGroup = proxy.highPerformanceGetCell(col, row, true);\n const newCellGroup = updateCell(range.start.col, range.start.row, proxy.table, true);\n\n newCellGroup.col = col;\n newCellGroup.row = row;\n newCellGroup.setAttribute('y', proxy.table.getRowsHeight(proxy.table.frozenRowCount, range.start.row - 1));\n\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n oldCellGroup.needUpdate = false;\n newCellGroup.needUpdate = false;\n\n // update cache\n if (proxy.cellCache.get(col)) {\n proxy.cellCache.set(col, newCellGroup);\n }\n }\n }\n}\n\nexport function checkFirstColMerge(col: number, proxy: SceneProxy) {\n for (let row = 0; row < proxy.table.rowCount; row++) {\n if (\n (row >= proxy.table.frozenRowCount && row < proxy.rowStart) ||\n (row > proxy.rowEnd && row < proxy.table.rowCount - proxy.table.bottomFrozenRowCount)\n ) {\n continue;\n }\n\n const range = getCellMergeInfo(proxy.table, col, row);\n // 清除之前mock的Merge cell\n range && clearHadMergedColumn(range.start.col, range.end.col, row, proxy);\n\n if (\n range &&\n range.start.col !== col &&\n proxy.highPerformanceGetCell(range.start.col, range.start.row, true).role !== 'cell'\n ) {\n // 在col的位置添加range.start.col单元格\n const oldCellGroup = proxy.highPerformanceGetCell(col, row, true);\n const newCellGroup = updateCell(range.start.col, range.start.row, proxy.table, true);\n\n newCellGroup.col = col;\n newCellGroup.row = row;\n newCellGroup.setAttribute(\n 'x',\n proxy.table.getColsWidth(proxy.table.rowHeaderLevelCount, range.start.col - 1) - oldCellGroup.parent.attribute.x\n );\n newCellGroup.setAttributes({\n x:\n proxy.table.getColsWidth(proxy.table.rowHeaderLevelCount, range.start.col - 1) -\n oldCellGroup.parent.attribute.x,\n y: proxy.table.getRowsHeight(0, range.start.row - 1) - oldCellGroup.parent.attribute.y\n });\n\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n oldCellGroup.needUpdate = false;\n newCellGroup.needUpdate = false;\n\n // update cache\n if (proxy.cellCache.get(col)) {\n proxy.cellCache.set(col, newCellGroup);\n }\n }\n }\n}\n\nfunction clearHadMergedRow(rowStart: number, rowEnd: number, col: number, proxy: SceneProxy) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'shadow-cell' && cellGroup.role !== 'empty' && cellGroup.row !== rowStart) {\n cellGroup.role = 'shadow-cell';\n cellGroup.setAttributes({\n width: 0,\n height: proxy.table.getRowHeight(cellGroup.row),\n y: proxy.table.getRowsHeight(proxy.table.frozenRowCount, cellGroup.row - 1),\n x: 0\n });\n cellGroup.clear();\n }\n }\n}\n\nfunction clearHadMergedColumn(colStart: number, colEnd: number, row: number, proxy: SceneProxy) {\n for (let col = colStart; col <= colEnd; col++) {\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'shadow-cell' && cellGroup.role !== 'empty' && cellGroup.col !== colStart) {\n cellGroup.role = 'shadow-cell';\n cellGroup.setAttributes({\n width: 0,\n height: proxy.table.getRowHeight(cellGroup.row),\n y: proxy.table.getRowsHeight(0, cellGroup.row - 1),\n x: 0\n });\n cellGroup.clear();\n }\n }\n}\n\nfunction checkHasColMerge(colStart: number, colEnd: number, row: number, proxy: SceneProxy) {\n for (let col = colStart; col <= colEnd; col++) {\n if (\n proxy.highPerformanceGetCell(col, row, true).role !== 'shadow-cell' &&\n proxy.highPerformanceGetCell(col, row, true).role !== 'empty'\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function getFirstChild(containerGroup: Group): Group {\n let child = containerGroup.firstChild as Group;\n while (child && child.type !== 'group') {\n child = child._next as Group;\n }\n return child;\n}\n\nexport function getLastChild(containerGroup: Group): Group {\n let child = containerGroup.lastChild as Group;\n while (child && child.type !== 'group') {\n child = child._prev as Group;\n }\n return child;\n}\n\nexport function getPrevGroup(group: Group): Group {\n let child = group._prev as Group;\n while (child && child.type !== 'group') {\n child = child._prev as Group;\n }\n return child;\n}\n\nexport function getNextGroup(group: Group): Group {\n let child = group._next as Group;\n while (child && child.type !== 'group') {\n child = child._next as Group;\n }\n return child;\n}\n","import type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\nimport { getNextGroup, getPrevGroup } from './util';\n\nexport function updateAutoColumn(\n colStart: number,\n colEnd: number,\n table: BaseTableAPI,\n direction: 'left' | 'right' = 'left'\n) {\n // 更新y位置\n for (let col = colStart; col <= colEnd; col++) {\n const bodyColGroup = table.scenegraph.getColGroup(col);\n if (bodyColGroup) {\n moveColumnGroup(bodyColGroup, table, direction);\n }\n const columnHeaderColGroup = table.scenegraph.getColGroup(col, true);\n if (columnHeaderColGroup) {\n moveColumnGroup(columnHeaderColGroup, table, direction);\n }\n const bottomColGroup = table.scenegraph.getColGroupInBottom(col);\n if (bottomColGroup) {\n moveColumnGroup(bottomColGroup, table, direction);\n }\n }\n\n // update x limit in proxy\n const totalActualBodyColumnCount = Math.min(\n table.scenegraph.proxy.colLimit,\n table.scenegraph.proxy.bodyRightCol - table.scenegraph.proxy.bodyLeftCol + 1\n );\n // 渐进加载总column数量\n const totalBodyWidth = table.getColsWidth(table.frozenColCount, table.frozenColCount + totalActualBodyColumnCount);\n const totalWidth = table.getColsWidth(table.frozenColCount, table.colCount - 1);\n table.scenegraph.proxy.xLimitLeft = totalBodyWidth / 2;\n table.scenegraph.proxy.xLimitRight = totalWidth - totalBodyWidth / 2;\n}\n\nfunction moveColumnGroup(colGroup: Group, table: BaseTableAPI, direction: 'left' | 'right' = 'left') {\n if (direction === 'left') {\n let x;\n const prevCellGroup = getPrevGroup(colGroup);\n if (prevCellGroup) {\n x = prevCellGroup.attribute.x + table.getColWidth((colGroup._prev as Group).col);\n } else {\n // 估计位置\n x = table.getColsWidth(table.frozenColCount, colGroup.col - 1);\n }\n colGroup.setAttribute('x', x);\n } else {\n let x;\n const nextCellGroup = getNextGroup(colGroup);\n if (nextCellGroup) {\n x = nextCellGroup.attribute.x - table.getColWidth(colGroup.col);\n } else {\n // 估计位置\n x = table.getColsWidth(table.frozenColCount, colGroup.col - 1);\n }\n colGroup.setAttribute('x', x);\n }\n}\n","import type { ColumnInfo } from '../../../../ts-types';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\nimport { computeColsWidth } from '../../../layout/compute-col-width';\nimport type { SceneProxy } from '../proxy';\nimport { updateAutoColumn } from './update-auto-column';\nimport { checkFirstColMerge, getFirstChild, getLastChild } from './util';\n\nexport async function dynamicSetX(x: number, screenLeft: ColumnInfo | null, isEnd: boolean, proxy: SceneProxy) {\n if (!screenLeft) {\n return;\n }\n const screenLeftCol = screenLeft.col;\n const screenLeftX = screenLeft.left;\n\n let deltaCol;\n if (isEnd) {\n deltaCol = proxy.bodyRightCol - proxy.colEnd;\n } else {\n deltaCol = proxy.screenLeftCol - proxy.referenceCol;\n }\n // const deltaCol = proxy.screenLeftCol - proxy.referenceCol;\n move(deltaCol, screenLeftCol, screenLeftX, x, proxy);\n\n if (isEnd) {\n const colGroup = proxy.table.scenegraph.getColGroup(proxy.colEnd);\n if (colGroup) {\n const deltaX =\n colGroup.attribute.x +\n colGroup.attribute.width -\n (proxy.table.tableNoFrameWidth - proxy.table.getFrozenColsWidth() - proxy.table.getRightFrozenColsWidth()) -\n x;\n proxy.deltaX = -deltaX;\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n }\n }\n\n proxy.table.scenegraph.updateNextFrame();\n}\n\nfunction move(deltaCol: number, screenLeftCol: number, screenLeftX: number, x: number, proxy: SceneProxy) {\n if (deltaCol > 0) {\n // 向右滚动,左部column group移到右部\n moveColumn(deltaCol, 'left', proxy.screenLeftCol, screenLeftX, x, proxy);\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n } else if (deltaCol < 0) {\n // 向左滚动,右部cell group移到左部\n moveColumn(-deltaCol, 'right', proxy.screenLeftCol, screenLeftX, x, proxy);\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n } else {\n // 不改变row,更新body group范围\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n }\n}\n\nasync function moveColumn(\n count: number,\n direction: 'left' | 'right',\n screenLeftCol: number,\n screenLeftX: number,\n x: number,\n proxy: SceneProxy\n) {\n // 限制count范围\n if (direction === 'left' && proxy.colEnd + count > proxy.bodyRightCol) {\n count = proxy.bodyRightCol - proxy.colEnd;\n } else if (direction === 'right' && proxy.colStart - count < proxy.bodyLeftCol) {\n count = proxy.colStart - proxy.bodyLeftCol;\n }\n if (count === 0) {\n return;\n }\n if (count < 0) {\n direction = direction === 'left' ? 'right' : 'left';\n count = -count;\n }\n // 两种更新模式\n // 1. count < colEnd - colStart:从顶/底部移动count数量的单元格到底/顶部\n // 2. count >= colEnd - colStart:整体移动到目标位置\n if (count < proxy.colEnd - proxy.colStart) {\n // 计算更新区域\n const startCol = direction === 'left' ? proxy.colStart : proxy.colEnd - count + 1;\n const endCol = direction === 'left' ? proxy.colStart + count - 1 : proxy.colEnd;\n const distStartCol = direction === 'left' ? proxy.colEnd + 1 : proxy.colStart - count;\n const distEndCol = direction === 'left' ? proxy.colEnd + count : proxy.colStart - 1;\n // update column width\n computeColsWidth(proxy.table, distStartCol, distEndCol);\n updatePartColPosition(startCol, endCol, direction, proxy);\n\n const syncLeftCol = distStartCol;\n const syncRightCol = distEndCol;\n\n proxy.colStart = direction === 'left' ? proxy.colStart + count : proxy.colStart - count;\n proxy.colEnd = direction === 'left' ? proxy.colEnd + count : proxy.colEnd - count;\n\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n updateAutoColumn(\n syncLeftCol, // colStart\n syncRightCol, // colEnd\n proxy.table,\n direction\n );\n\n const colGroup =\n proxy.table.scenegraph.getColGroup(screenLeftCol) || proxy.table.scenegraph.getColGroup(screenLeftCol, true);\n const deltaX =\n screenLeftX - (colGroup.attribute.x + proxy.table.getFrozenColsWidth() + proxy.table.scenegraph.proxy.deltaX);\n proxy.table.scenegraph.proxy.deltaX += deltaX;\n\n proxy.currentCol = direction === 'left' ? proxy.currentCol + count : proxy.currentCol - count;\n proxy.totalCol = Math.max(\n 0,\n Math.min(proxy.table.colCount - 1, direction === 'left' ? proxy.totalCol + count : proxy.totalCol - count)\n );\n\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n proxy.colUpdatePos = distStartCol;\n proxy.colUpdateDirection = direction;\n\n proxy.table.scenegraph.updateNextFrame();\n\n // 开始异步任务\n // await proxy.progress();\n } else {\n const distStartCol = direction === 'left' ? proxy.colStart + count : proxy.colStart - count;\n const distEndCol = direction === 'left' ? proxy.colEnd + count : proxy.colEnd - count;\n\n // update column width\n computeColsWidth(proxy.table, distStartCol, distEndCol);\n const distStartColY = proxy.table.getColsWidth(proxy.bodyLeftCol, distStartCol - 1);\n\n // 更新同步范围\n updateAllColPosition(distStartColY, count, direction, proxy);\n const syncLeftCol = distStartCol;\n const syncRightCol = distEndCol;\n\n proxy.colStart = distStartCol;\n proxy.colEnd = distEndCol;\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n updateAutoColumn(\n syncLeftCol, // colStart\n syncRightCol, // colEnd\n proxy.table,\n distEndCol > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left' // 跳转到右侧时,从右向左对齐\n );\n // // update body position when click scroll bar\n // if (syncLeftCol === proxy.bodyLeftCol) {\n // const colGroup = proxy.table.scenegraph.getColGroup(syncLeftCol);\n // const deltaX = colGroup.attribute.x - x;\n // proxy.table.scenegraph.proxy.deltaX = deltaX;\n // } else if (syncRightCol === proxy.bodyRightCol) {\n // const colGroup = proxy.table.scenegraph.getColGroup(syncRightCol);\n // const deltaX =\n // colGroup.attribute.x +\n // colGroup.attribute.width -\n // (proxy.table.tableNoFrameWidth - proxy.table.getFrozenColsWidth()) -\n // x;\n // proxy.table.scenegraph.proxy.deltaX = -deltaX;\n // } else {\n // // proxy.table.scenegraph.proxy.deltaX = 0;\n // const colGroup =\n // proxy.table.scenegraph.getColGroup(screenLeftCol) || proxy.table.scenegraph.getColGroup(screenLeftCol, true);\n // const deltaX =\n // screenLeftX - (colGroup.attribute.x + proxy.table.getFrozenColsWidth() + proxy.table.scenegraph.proxy.deltaX);\n // proxy.table.scenegraph.proxy.deltaX = deltaX;\n // }\n\n proxy.currentCol = direction === 'left' ? proxy.currentCol + count : proxy.currentCol - count;\n proxy.totalCol = Math.max(\n 0,\n Math.min(proxy.table.colCount - 1, direction === 'left' ? proxy.totalCol + count : proxy.totalCol - count)\n );\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n proxy.colUpdatePos = proxy.colStart;\n proxy.colUpdateDirection = distEndCol > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left';\n\n proxy.table.scenegraph.updateNextFrame();\n // await proxy.progress();\n }\n}\n\nfunction updateColGroupPosition(colGroup: Group, newCol: number, x: number) {\n // 更新位置&col\n colGroup.col = newCol;\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.col = newCol;\n cellGroup.needUpdate = true;\n });\n colGroup.setAttribute('x', x);\n colGroup.needUpdate = true;\n}\n\nfunction updateColGroupContent(colGroup: Group, proxy: SceneProxy) {\n if (!colGroup) {\n return;\n }\n let cellGroup = colGroup.firstChild;\n while (cellGroup) {\n const newCellGroup = proxy.updateCellGroupContent(cellGroup as Group);\n cellGroup = newCellGroup._next;\n }\n colGroup.needUpdate = false;\n colGroup.setAttribute('width', proxy.table.getColWidth(colGroup.col));\n}\n\n// update cells async\nfunction updateColGroupContentAsync(colGroup: Group, proxy: SceneProxy) {\n if (!colGroup) {\n return;\n }\n const screenTopRow = proxy.screenTopRow;\n const topRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n const bottomRow = Math.min(proxy.bodyBottomRow, screenTopRow + proxy.screenRowCount * 2, proxy.table.rowCount - 1);\n\n for (let row = topRow; row <= bottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(colGroup.col, row, true);\n proxy.updateCellGroupContent(cellGroup);\n }\n proxy.rowUpdatePos = proxy.rowStart;\n\n colGroup.needUpdate = false;\n colGroup.setAttribute('width', proxy.table.getColWidth(colGroup.col));\n}\n\nfunction updatePartColPosition(startCol: number, endCol: number, direction: 'left' | 'right', proxy: SceneProxy) {\n for (let col = startCol; col <= endCol; col++) {\n if (\n proxy.table.scenegraph.bodyGroup.childrenCount > 0 &&\n proxy.table.scenegraph.bodyGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.bodyGroup, direction, proxy);\n }\n if (\n proxy.table.scenegraph.colHeaderGroup.childrenCount > 0 &&\n proxy.table.scenegraph.colHeaderGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.colHeaderGroup, direction, proxy);\n }\n if (\n proxy.table.scenegraph.bottomFrozenGroup.childrenCount > 0 &&\n proxy.table.scenegraph.bottomFrozenGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.bottomFrozenGroup, direction, proxy);\n }\n }\n}\n\nfunction updateColPosition(containerGroup: Group, direction: 'left' | 'right', proxy: SceneProxy) {\n if (direction === 'left') {\n const colGroup = getFirstChild(containerGroup);\n const lastChild = getLastChild(containerGroup);\n updateColGroupPosition(colGroup, lastChild.col + 1, lastChild.attribute.x + proxy.table.getColWidth(lastChild.col));\n containerGroup.appendChild(colGroup);\n // console.log('after', colGroup.col, colGroup.attribute.x, containerGroup._uid);\n if (containerGroup.border) {\n containerGroup.appendChild(containerGroup.border);\n }\n } else {\n const colGroup = getLastChild(containerGroup);\n const firstChild = getFirstChild(containerGroup);\n updateColGroupPosition(\n colGroup,\n firstChild.col - 1,\n firstChild.attribute.x - proxy.table.getColWidth(firstChild.col - 1)\n );\n containerGroup.insertBefore(colGroup, containerGroup.firstChild);\n }\n}\n\nexport function updateColContent(syncLeftCol: number, syncRightCol: number, proxy: SceneProxy) {\n for (let col = syncLeftCol; col <= syncRightCol; col++) {\n const colHeaderColGroup = proxy.table.scenegraph.getColGroup(col, true);\n colHeaderColGroup && updateColGroupContent(colHeaderColGroup, proxy);\n\n const bottomColGroup = proxy.table.scenegraph.getColGroupInBottom(col);\n bottomColGroup && updateColGroupContent(bottomColGroup, proxy);\n\n const rightTopColGroup = proxy.table.scenegraph.getColGroupInRightTopCorner(col);\n rightTopColGroup && updateColGroupContent(rightTopColGroup, proxy);\n\n const rightBottomColGroup = proxy.table.scenegraph.getColGroupInRightBottomCorner(col);\n rightBottomColGroup && updateColGroupContent(rightBottomColGroup, proxy);\n\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup && updateColGroupContentAsync(colGroup, proxy);\n }\n\n // update column container width\n updateColumnContainerWidth(proxy.table.scenegraph.colHeaderGroup);\n updateColumnContainerWidth(proxy.table.scenegraph.bottomFrozenGroup);\n updateColumnContainerWidth(proxy.table.scenegraph.bodyGroup);\n\n proxy.progress();\n}\n\nfunction updateAllColPosition(distStartColY: number, count: number, direction: 'left' | 'right', proxy: SceneProxy) {\n proxy.table.scenegraph.colHeaderGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n proxy.table.scenegraph.bottomFrozenGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n}\n\nfunction updateColumnContainerWidth(containerGroup: Group) {\n // update column container width\n const lastColGroup = getLastChild(containerGroup);\n if (!lastColGroup) {\n return;\n }\n containerGroup.setAttribute('width', lastColGroup.attribute.x + lastColGroup.attribute.width);\n containerGroup.border?.setAttribute('width', lastColGroup.attribute.x + lastColGroup.attribute.width);\n}\n","import { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\n\nexport function updateAutoRow(\n colStart: number,\n colEnd: number,\n rowStart: number,\n rowEnd: number,\n table: BaseTableAPI,\n direction: 'up' | 'down' = 'up',\n part?: boolean\n) {\n // return;\n // 更新y位置\n if (direction === 'up') {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'cell' || !cellGroup.row) {\n continue;\n }\n let y;\n if (cellGroup._prev) {\n // y = ((cellGroup._prev as Group)?.attribute.y ?? 0) + ((cellGroup._prev as Group)?.attribute.height ?? 0);\n y = (cellGroup._prev as Group)?.attribute.y + table.getRowHeight((cellGroup._prev as Group).row);\n } else if (part) {\n const baseCellGroup = table.scenegraph.highPerformanceGetCell(col, rowEnd + 1, true);\n y = baseCellGroup.attribute.y;\n if (isValid(y)) {\n for (let r = row; r <= rowEnd; r++) {\n y -= table.getRowHeight(r);\n }\n }\n } else {\n // 估计位置\n y = getEstimatePosition(cellGroup.row, table);\n }\n if (isValid(y)) {\n cellGroup.setAttribute('y', y);\n }\n }\n }\n } else {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowEnd; row >= rowStart; row--) {\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'cell' || !cellGroup.row) {\n continue;\n }\n let y;\n if (cellGroup._next) {\n // y = ((cellGroup._next as Group)?.attribute.y ?? 0) - (cellGroup.attribute.height ?? 0);\n y = (cellGroup._next as Group)?.attribute.y - table.getRowHeight(cellGroup.row);\n } else if (part) {\n const baseCellGroup = table.scenegraph.highPerformanceGetCell(col, rowStart - 1, true);\n y = baseCellGroup.attribute.y;\n for (let r = rowStart - 1; r < row; r++) {\n const height = table.getRowHeight(r);\n y += height;\n }\n } else {\n // 估计位置\n y = getEstimatePosition(cellGroup.row, table);\n // console.log('估计位置', table.getRowsHeight(table.frozenRowCount, cellGroup.row));\n }\n if (isValid(y)) {\n cellGroup.setAttribute('y', y);\n }\n }\n }\n }\n\n // update y limit in proxy\n const totalActualBodyRowCount = Math.min(\n table.scenegraph.proxy.rowLimit,\n table.scenegraph.proxy.bodyBottomRow - table.scenegraph.proxy.bodyTopRow + 1\n );\n // 渐进加载总row数量\n const totalBodyHeight = table.getRowsHeight(table.frozenRowCount, table.frozenRowCount + totalActualBodyRowCount);\n const totalHeight = table.getRowsHeight(table.frozenRowCount, table.rowCount - 1);\n table.scenegraph.proxy.yLimitTop = totalBodyHeight / 2;\n table.scenegraph.proxy.yLimitBottom = totalHeight - totalBodyHeight / 2;\n\n // // check\n // const columnGroup = table.scenegraph.bodyGroup.firstChild;\n // let y;\n // columnGroup.forEachChildren(child => {\n // if (!isValid(y)) {\n // y = child.attribute.y + child.attribute.height;\n // } else if (child.attribute.y !== y) {\n // debugger;\n // }\n // y = child.attribute.y + child.attribute.height;\n // });\n}\n\n// 获取预估位置\nfunction getEstimatePosition(row: number, table: BaseTableAPI) {\n let y;\n if (row < table.frozenRowCount) {\n y = table.getRowsHeight(0, row - 1);\n } else if (row >= table.rowCount - table.bottomFrozenRowCount) {\n y = table.getRowsHeight(table.rowCount - table.bottomFrozenRowCount, row - 1);\n } else {\n y = table.getRowsHeight(table.frozenRowCount, row - 1);\n }\n\n return y;\n}\n","import type { RowInfo } from '../../../../ts-types';\nimport type { Group } from '../../../graphic/group';\nimport { computeRowsHeight } from '../../../layout/compute-row-height';\nimport type { SceneProxy } from '../proxy';\nimport { updateAutoRow } from './update-auto-row';\n\nexport async function dynamicSetY(y: number, screenTop: RowInfo | null, isEnd: boolean, proxy: SceneProxy) {\n if (!screenTop) {\n return;\n }\n const screenTopRow = screenTop.row;\n const screenTopY = screenTop.top;\n\n let deltaRow;\n if (isEnd) {\n deltaRow = proxy.bodyBottomRow - proxy.rowEnd;\n } else {\n deltaRow = screenTopRow - proxy.referenceRow;\n }\n move(deltaRow, screenTopRow, screenTopY, y, proxy);\n if (isEnd) {\n const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, proxy.rowEnd, true);\n if (cellGroup.role === 'cell') {\n const deltaY =\n cellGroup.attribute.y +\n cellGroup.attribute.height -\n (proxy.table.tableNoFrameHeight - proxy.table.getFrozenRowsHeight() - proxy.table.getBottomFrozenRowsHeight()) -\n y;\n proxy.deltaY = -deltaY;\n proxy.updateBody(y - proxy.deltaY);\n }\n }\n // proxy.table.scenegraph.updateNextFrame();\n}\n\nfunction move(deltaRow: number, screenTopRow: number, screenTopY: number, y: number, proxy: SceneProxy) {\n if (deltaRow > 0) {\n // 向下滚动,顶部cell group移到底部\n moveCell(deltaRow, 'up', screenTopRow, screenTopY, y, proxy);\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n } else if (deltaRow < 0) {\n // 向上滚动,底部cell group移到顶部\n moveCell(-deltaRow, 'down', screenTopRow, screenTopY, y, proxy);\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n } else {\n // 不改变row,更新body group范围\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n }\n}\n\nasync function moveCell(\n count: number,\n direction: 'up' | 'down',\n screenTopRow: number,\n screenTopY: number,\n y: number,\n proxy: SceneProxy\n) {\n // 限制count范围\n if (direction === 'up' && proxy.rowEnd + count > proxy.bodyBottomRow) {\n count = proxy.bodyBottomRow - proxy.rowEnd;\n } else if (direction === 'down' && proxy.rowStart - count < proxy.bodyTopRow) {\n count = proxy.rowStart - proxy.bodyTopRow;\n }\n if (count === 0) {\n return;\n }\n if (count < 0) {\n direction = direction === 'up' ? 'down' : 'up';\n count = -count;\n }\n\n // 两种更新模式\n // 1. count < rowEnd - rowStart:从顶/底部移动count数量的单元格到底/顶部\n // 2. count >= rowEnd - rowStart:整体移动到目标位置\n if (count < proxy.rowEnd - proxy.rowStart) {\n // 计算更新区域\n const startRow = direction === 'up' ? proxy.rowStart : proxy.rowEnd - count + 1;\n const endRow = direction === 'up' ? proxy.rowStart + count - 1 : proxy.rowEnd;\n const distStartRow = direction === 'up' ? proxy.rowEnd + 1 : proxy.rowStart - count;\n const distEndRow = direction === 'up' ? proxy.rowEnd + count : proxy.rowStart - 1;\n\n // 更新同步范围\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = distStartRow;\n syncBottomRow = distEndRow;\n } else {\n const topRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n const bottomRow = Math.min(\n proxy.bodyBottomRow,\n screenTopRow + proxy.screenRowCount * 2,\n proxy.table.rowCount - 1\n );\n // get coincide of distStartRow&distEndRow and topRow&BottomRow\n // syncTopRow = Math.max(distStartRow, topRow);\n // syncBottomRow = Math.min(distEndRow, bottomRow);\n syncTopRow = topRow;\n syncBottomRow = bottomRow;\n }\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow, false);\n\n updatePartRowPosition(startRow, endRow, direction, proxy);\n\n proxy.rowStart = direction === 'up' ? proxy.rowStart + count : proxy.rowStart - count;\n proxy.rowEnd = direction === 'up' ? proxy.rowEnd + count : proxy.rowEnd - count;\n\n // 本次行更新是否同步完成,列数超过limit时为false\n const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true);\n\n if (proxy.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // row header group\n updateAutoRow(\n 0, // colStart\n proxy.table.frozenColCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // right frozen group\n updateAutoRow(\n proxy.table.colCount - proxy.table.rightFrozenColCount, // colStart\n proxy.table.colCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // const oldCellOffset = screenTopY - y - proxy.table.getFrozenRowsHeight();\n // console.log('cellOffset', screenTopY, screenTopRow);\n // const newScreenTop = (proxy.table as any).getTargetRowAt(\n // y + proxy.table.scenegraph.colHeaderGroup.attribute.height\n // );\n // console.log('newScreenTop', newScreenTop);\n // const cellOffset = newScreenTop.top - screenTopY;\n\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, screenTopRow, true);\n // const deltaY =\n // newScreenTop.top -\n // cellOffset -\n // (cellGroup.attribute.y + proxy.table.getFrozenRowsHeight() + proxy.table.scenegraph.proxy.deltaY);\n // proxy.table.scenegraph.proxy.deltaY += deltaY;\n }\n\n proxy.currentRow = direction === 'up' ? proxy.currentRow + count : proxy.currentRow - count;\n proxy.totalRow = Math.max(\n 0,\n Math.min(\n proxy.bodyBottomRow,\n direction === 'up' ? proxy.totalRow + count : proxy.totalRow - count,\n proxy.table.rowCount - 1\n )\n );\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n // proxy.referenceRow = screenTopRow;\n // proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow);\n if (proxy.table.isAutoRowHeight() && sync) {\n proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, proxy.rowEnd + 1);\n } else {\n proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow);\n }\n proxy.rowUpdateDirection = direction;\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n } else {\n const distStartRow = direction === 'up' ? proxy.rowStart + count : proxy.rowStart - count;\n const distEndRow = Math.min(\n proxy.table.rowCount - 1,\n direction === 'up' ? proxy.rowEnd + count : proxy.rowEnd - count\n );\n const distStartRowY = proxy.table.getRowsHeight(proxy.bodyTopRow, distStartRow - 1);\n\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = distStartRow;\n syncBottomRow = distEndRow;\n } else {\n syncTopRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n syncBottomRow = Math.min(proxy.bodyBottomRow, screenTopRow + proxy.screenRowCount * 2, proxy.table.rowCount - 1);\n }\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow, false);\n\n // 更新同步范围\n updateAllRowPosition(distStartRowY, count, direction, proxy);\n\n proxy.rowStart = distStartRow;\n proxy.rowEnd = distEndRow;\n\n const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true);\n\n if (proxy.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n\n // row header group\n updateAutoRow(\n 0, // colStart\n proxy.table.frozenColCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n\n // right frozen group\n updateAutoRow(\n proxy.table.colCount - proxy.table.rightFrozenColCount, // colStart\n proxy.table.colCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n }\n\n // // update body position when click scroll bar\n // if (syncTopRow === proxy.bodyTopRow) {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, syncTopRow, true);\n // const deltaY = cellGroup.attribute.y - y;\n // proxy.table.scenegraph.proxy.deltaY = deltaY;\n // } else if (syncBottomRow === proxy.bodyBottomRow) {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, syncBottomRow, true);\n // const deltaY =\n // cellGroup.attribute.y +\n // cellGroup.attribute.height -\n // (proxy.table.tableNoFrameHeight - proxy.table.getFrozenRowsHeight()) -\n // y;\n // proxy.table.scenegraph.proxy.deltaY = -deltaY;\n // } else {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, screenTopRow, true);\n // const deltaY =\n // screenTopY - (cellGroup.attribute.y + proxy.table.getFrozenRowsHeight() + proxy.table.scenegraph.proxy.deltaY);\n // proxy.table.scenegraph.proxy.deltaY = deltaY;\n // }\n\n proxy.currentRow = direction === 'up' ? proxy.currentRow + count : proxy.currentRow - count;\n proxy.totalRow = Math.max(\n 0,\n Math.min(\n proxy.bodyBottomRow,\n direction === 'up' ? proxy.totalRow + count : proxy.totalRow - count,\n proxy.table.rowCount - 1\n )\n );\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n // proxy.referenceRow = screenTopRow;\n if (proxy.table.isAutoRowHeight() && sync) {\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n } else {\n proxy.rowUpdatePos = proxy.rowStart;\n }\n proxy.rowUpdateDirection = distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up';\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n }\n}\n\nfunction updatePartRowPosition(startRow: number, endRow: number, direction: 'up' | 'down', proxy: SceneProxy) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n // body group\n for (let col = proxy.bodyLeftCol; col <= proxy.bodyRightCol; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (colGroup) {\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n }\n}\n\nfunction updateCellGroupPosition(colGroup: Group, direction: 'up' | 'down', proxy: SceneProxy) {\n if (colGroup.childrenCount >= 1) {\n if (direction === 'up') {\n const cellGroup = colGroup.firstChild as Group;\n proxy.updateCellGroupPosition(\n cellGroup,\n (colGroup.lastChild as Group).row + 1,\n (colGroup.lastChild as Group).attribute.y + proxy.table.getRowHeight((colGroup.lastChild as Group).row) // (colGroup.lastChild as Group).attribute.height\n );\n colGroup.appendChild(cellGroup);\n } else {\n const cellGroup = colGroup.lastChild as Group;\n proxy.updateCellGroupPosition(\n cellGroup,\n (colGroup.firstChild as Group).row - 1,\n (colGroup.firstChild as Group).attribute.y - proxy.table.getRowHeight((cellGroup as Group).row) // cellGroup.attribute.height\n );\n colGroup.insertBefore(cellGroup, colGroup.firstChild);\n }\n }\n}\n\nfunction updateAllRowPosition(distStartRowY: number, count: number, direction: 'up' | 'down', proxy: SceneProxy) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n // body group\n for (let col = proxy.bodyLeftCol; col <= proxy.bodyRightCol; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n}\n\nexport function updateRowContent(syncTopRow: number, syncBottomRow: number, proxy: SceneProxy, async = false) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n // body group\n let leftCol = proxy.bodyLeftCol;\n let rightCol = proxy.bodyRightCol;\n let sync = true;\n if (async) {\n const screenLeftCol = proxy.screenLeftCol;\n leftCol = Math.max(proxy.bodyLeftCol, screenLeftCol - proxy.screenColCount * 1);\n rightCol = Math.min(proxy.bodyRightCol, screenLeftCol + proxy.screenColCount * 2);\n if (leftCol !== proxy.bodyLeftCol || rightCol !== proxy.bodyRightCol) {\n sync = false;\n }\n }\n for (let col = leftCol; col <= rightCol; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n proxy.table.scenegraph.updateNextFrame();\n\n return sync;\n}\n","import type { Group } from '../../../graphic/group';\nimport { computeRowsHeight } from '../../../layout/compute-row-height';\nimport type { SceneProxy } from '../proxy';\nimport { updateRowContent } from './dynamic-set-y';\nimport { updateAutoRow } from './update-auto-row';\n\nexport async function sortVertical(proxy: SceneProxy) {\n // 更新左 中 右 左下 底部 右下 部分的单元格需更新标记\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n colGroup.needUpdate = true;\n colGroup?.forEachChildren((cellGroup: Group) => {\n (cellGroup as any).needUpdate = true;\n });\n }\n });\n\n // 更新同步范围\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = proxy.rowStart;\n syncBottomRow = proxy.rowEnd;\n } else {\n syncTopRow = Math.max(proxy.bodyTopRow, proxy.screenTopRow - proxy.screenRowCount * 1);\n syncBottomRow = Math.min(\n proxy.bodyBottomRow,\n proxy.screenTopRow + proxy.screenRowCount * 2,\n proxy.table.rowCount - 1\n );\n }\n // console.log('sort更新同步范围', syncTopRow, syncBottomRow);\n\n const oldBodyHeight = proxy.table.getAllRowsHeight();\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow);\n\n const newBodyHeight = proxy.table.getAllRowsHeight();\n\n if (oldBodyHeight !== newBodyHeight) {\n proxy.table.scenegraph.updateContainerHeight(proxy.table.frozenRowCount, newBodyHeight - oldBodyHeight);\n }\n\n for (let col = 0; col < proxy.table.frozenColCount ?? 0; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n\n updateRowContent(syncTopRow, syncBottomRow, proxy);\n\n if (proxy.table.isAutoRowHeight()) {\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n proxy.rowEnd > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n }\n proxy.rowUpdatePos = proxy.rowStart;\n proxy.rowUpdateDirection = proxy.rowEnd > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up';\n\n // if (\n // proxy.rowEnd === proxy.table.scenegraph.proxy.bodyBottomRow &&\n // proxy.rowStart === proxy.table.scenegraph.proxy.bodyTopRow\n // ) {\n // // 全量更新,do nothing\n // } else if (proxy.rowEnd === proxy.table.scenegraph.proxy.bodyBottomRow) {\n // const totalHeight = proxy.table.getAllRowsHeight();\n // const top = totalHeight - proxy.table.scenegraph.height;\n // proxy.updateBody(top);\n // } else if (proxy.rowStart === proxy.table.scenegraph.proxy.bodyTopRow) {\n // proxy.updateBody(0);\n // }\n\n proxy.table.scenegraph.updateNextFrame();\n if (!proxy.table.isAutoRowHeight()) {\n await proxy.progress();\n }\n}\n","import type { Group } from '../../../graphic/group';\nimport { computeColsWidth } from '../../../layout/compute-col-width';\nimport type { SceneProxy } from '../proxy';\nimport { updateColContent } from './dynamic-set-x';\nimport { updateAutoColumn } from './update-auto-column';\n\nexport async function sortHorizontal(proxy: SceneProxy) {\n // 更新左 中 右 左下 底部 右下 部分的单元格需更新标记\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n colGroup.needUpdate = true;\n colGroup?.forEachChildren((cellGroup: Group) => {\n (cellGroup as any).needUpdate = true;\n });\n }\n });\n\n // 更新同步范围\n const syncLeftCol = Math.max(proxy.bodyLeftCol, proxy.screenLeftCol - proxy.screenColCount * 1);\n const syncRightCol = Math.min(proxy.bodyRightCol, proxy.screenLeftCol + proxy.screenColCount * 2);\n\n computeColsWidth(proxy.table, syncLeftCol, syncRightCol);\n\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n // updateAutoColumn(\n // syncLeftCol, // colStart\n // syncRightCol, // colEnd\n // proxy.table,\n // proxy.colEnd > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left' // 跳转到右侧时,从右向左对齐\n // );\n\n proxy.colUpdatePos = proxy.colStart;\n proxy.colUpdateDirection = proxy.colEnd > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left';\n\n // if (\n // proxy.colEnd === proxy.table.scenegraph.proxy.bodyRightCol &&\n // proxy.colStart === proxy.table.scenegraph.proxy.bodyLeftCol\n // ) {\n // // 全量更新,do nothing\n // } else if (proxy.colEnd === proxy.table.scenegraph.proxy.bodyRightCol) {\n // const totalWidth = proxy.table.getAllColsWidth();\n // const left = totalWidth - proxy.table.scenegraph.width;\n // // proxy.updateBody(top);\n // proxy.table.scenegraph.setBodyAndColHeaderX(-left);\n // } else if (proxy.colStart === proxy.table.scenegraph.proxy.bodyLeftCol) {\n // // proxy.updateBody(0);\n // proxy.table.scenegraph.setBodyAndColHeaderX(0);\n // }\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n}\n","import type { IGraphic, Image, Text } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Group } from '../graphic/group';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ITextStyleOption, StickCell } from '../../ts-types';\nimport { isNumber, min } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function handleTextStick(table: BaseTableAPI) {\n // reset\n const { changedCells } = table.internalProps.stick; // changedCells only cache one time\n changedCells.forEach((cellPos: StickCell) => {\n const cellGroup = table.scenegraph.getCell(cellPos.col, cellPos.row);\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: cellPos.dx,\n dy: cellPos.dy\n });\n });\n });\n changedCells.clear();\n\n const { scrollTop, scrollLeft, frozenRowCount, frozenColCount } = table;\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const frozenColsWidth = table.getFrozenColsWidth();\n // 计算非冻结\n const { row: rowTop } = table.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colLeft } = table.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowStart = Math.max(rowTop, table.frozenRowCount);\n const colStart = Math.max(colLeft, table.frozenColCount);\n const rowEnd =\n table.getAllRowsHeight() > table.tableNoFrameHeight\n ? table.getRowAt(scrollTop + table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() - 1).row\n : table.rowCount - table.bottomFrozenRowCount - 1;\n const colEnd =\n table.getAllColsWidth() > table.tableNoFrameWidth\n ? table.getColAt(scrollLeft + table.tableNoFrameWidth - table.getRightFrozenColsWidth() - 1).col\n : table.colCount - table.rightFrozenColCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return;\n }\n\n // column header\n for (let row = 0; row < frozenRowCount; row++) {\n if (colEnd < colStart) {\n break;\n }\n [colStart, colEnd].forEach((col: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'vertical') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(\n cellGroup,\n frozenColsWidth + table.tableX,\n table.tableNoFrameWidth - table.getRightFrozenColsWidth() + table.tableX,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n\n // row header\n for (let col = 0; col < frozenColCount; col++) {\n if (rowEnd < rowStart) {\n break;\n }\n [rowStart, rowEnd].forEach((row: number) => {\n const style = table._getCellStyle(col, row);\n if (\n style?.textStick &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'tree' &&\n style?.textStick !== 'horizontal'\n ) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(\n cellGroup,\n frozenRowsHeight + table.tableY,\n table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() + table.tableY,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n\n // body\n for (let col = colStart; col <= colEnd; col++) {\n if (rowEnd < rowStart) {\n break;\n }\n [rowStart, rowEnd].forEach((row: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'horizontal') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(\n cellGroup,\n frozenRowsHeight + table.tableY,\n table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() + table.tableY,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n for (let row = rowStart; row <= rowEnd; row++) {\n if (colEnd < colStart) {\n break;\n }\n [colStart, colEnd].forEach((col: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'vertical') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(\n cellGroup,\n frozenColsWidth + table.tableX,\n table.tableNoFrameWidth - table.getRightFrozenColsWidth() + table.tableX,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n}\n\n/*\n * adjust cell content vertical layout\n * @param {Group} cellGroup\n * @param {number} scrollTop\n */\nfunction adjustCellContentVerticalLayout(\n cellGroup: Group,\n minTop: number,\n maxTop: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined,\n table: BaseTableAPI\n) {\n if (\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n dealVertical(singleCellGroup, minTop, maxTop, changedCells, textStickBaseOnAlign);\n }\n }\n } else {\n dealVertical(cellGroup, minTop, maxTop, changedCells, textStickBaseOnAlign);\n }\n}\n\nfunction dealVertical(\n cellGroup: Group,\n minTop: number,\n maxTop: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined\n) {\n // get text element\n const graphic =\n (cellGroup.getChildByName('text', true) as Text) || (cellGroup.getChildByName('image', true) as Image);\n if (!graphic) {\n return;\n }\n if (graphic.type === 'image') {\n const { image: url } = graphic.attribute;\n if (!url || !graphic.resources) {\n return;\n }\n const res = graphic.resources.get(url as any);\n if (res.state !== 'success') {\n return;\n }\n }\n\n // const textBaseline = (graphic as any).attribute.textBaseline ?? (graphic as any).textBaseline ?? 'top';\n const textBaseline = (graphic as any).textBaseline ?? 'top';\n\n graphic.AABBBounds.width();\n const textTop = graphic.globalAABBBounds.y1;\n const textBottom = graphic.globalAABBBounds.y2;\n\n if (textBaseline === 'middle' && textStickBaseOnAlign) {\n const cellTop = cellGroup.globalAABBBounds.y1 + ((cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0);\n const cellBottom = cellTop + (cellGroup.contentHeight ?? cellGroup.attribute.height ?? 0);\n if (cellTop < minTop || cellBottom > maxTop) {\n const visibleCellTop = Math.max(cellTop, minTop);\n const visibleCellBottom = Math.min(cellBottom, maxTop);\n const delta =\n graphic.globalTransMatrix.f - (visibleCellBottom + visibleCellTop) / 2 + graphic.AABBBounds.height() / 2;\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - delta + 2); // 2 is the buffer\n });\n }\n } else if (textTop < minTop) {\n const deltaHeight = textTop - minTop;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - deltaHeight + 2); // 2 is the buffer\n });\n } else if (textBottom > maxTop) {\n const deltaHeight = textBottom - maxTop;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - deltaHeight); // 2 is the buffer\n });\n }\n}\n\n/*\n * adjust cell content horizontal layout\n * @param {Group} cellGroup\n * @param {number} scrollLeft\n */\nfunction adjustCellContentHorizontalLayout(\n cellGroup: Group,\n minLeft: number,\n maxLeft: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined,\n table: BaseTableAPI\n) {\n if (\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n dealHorizontal(singleCellGroup, minLeft, maxLeft, changedCells, textStickBaseOnAlign);\n }\n }\n } else {\n dealHorizontal(cellGroup, minLeft, maxLeft, changedCells, textStickBaseOnAlign);\n }\n}\n\nfunction dealHorizontal(\n cellGroup: Group,\n minLeft: number,\n maxLeft: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined\n) {\n // get text element\n // const text = cellGroup.getChildByName('text', true) as Text;\n // if (!text) {\n // return;\n // }\n\n // get text element\n const graphic =\n (cellGroup.getChildByName('text', true) as Text) || (cellGroup.getChildByName('image', true) as Image);\n if (!graphic) {\n return;\n }\n if (graphic.type === 'image') {\n const { image: url } = graphic.attribute;\n if (!url || !graphic.resources) {\n return;\n }\n const res = graphic.resources.get(url as any);\n if (res.state !== 'success') {\n return;\n }\n }\n const textAlign = (graphic as any).attribute.textAlign ?? (graphic as any).textAlign ?? 'left';\n graphic.AABBBounds.width();\n const textLeft = graphic.globalAABBBounds.x1;\n const textRight = graphic.globalAABBBounds.x2;\n if (textAlign === 'center' && textStickBaseOnAlign) {\n const cellLeft = cellGroup.globalAABBBounds.x1 + ((cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0);\n const cellRight = cellLeft + (cellGroup.contentWidth ?? cellGroup.attribute.width ?? 0);\n if (cellLeft < minLeft || cellRight > maxLeft) {\n const visibleCellLeft = Math.max(cellLeft, minLeft);\n const visibleCellRight = Math.min(cellRight, maxLeft);\n const delta = graphic.globalTransMatrix.e - (visibleCellRight + visibleCellLeft) / 2;\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - delta + 2); // 2 is the buffer\n });\n }\n } else if (textLeft < minLeft) {\n const deltaWidth = textLeft - minLeft;\n // text is out of view, move all elements right\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - deltaWidth + 2); // 2 is the buffer\n });\n } else if (textRight > maxLeft) {\n const deltaWidth = textRight - maxLeft;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - deltaWidth); // 2 is the buffer\n });\n }\n}\n\nexport function checkHaveTextStick(table: BaseTableAPI) {\n const headerObjects = table.internalProps.layoutMap.headerObjects;\n const columnObjects = table.internalProps.layoutMap.columnObjects;\n for (let i = 0; i < headerObjects.length; i++) {\n const header = headerObjects[i];\n if (header && (header.style as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if (column && (column.style as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n const themeStick =\n table.theme.headerStyle.textStick || table.theme.rowHeaderStyle.textStick || table.theme.bodyStyle.textStick;\n if (themeStick) {\n return true;\n }\n return false;\n}\n","import { isNumber, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { Group } from '../../graphic/group';\nimport { computeColsWidth } from '../../layout/compute-col-width';\nimport { computeRowsHeight } from '../../layout/compute-row-height';\nimport { emptyGroup } from '../../utils/empty-group';\nimport { createColGroup } from '../column';\nimport { createComplexColumn } from '../column-helper';\nimport { createGroupForFirstScreen } from './create-group-for-first-screen';\nimport { dynamicSetX, updateColContent } from './update-position/dynamic-set-x';\nimport { dynamicSetY, updateRowContent } from './update-position/dynamic-set-y';\nimport { updateAutoRow } from './update-position/update-auto-row';\nimport { sortVertical } from './update-position/sort-vertical';\nimport { sortHorizontal } from './update-position/sort-horizontal';\nimport { updateAutoColumn } from './update-position/update-auto-column';\nimport { getDefaultHeight, getDefaultWidth } from './default-width-height';\nimport { handleTextStick } from '../../stick-text';\nimport type { ColumnInfo, RowInfo } from '../../../ts-types';\n\nexport class SceneProxy {\n table: BaseTableAPI;\n isRelease: boolean = false;\n mode: 'column' | 'row' | 'pivot' = 'column';\n isProgressing: boolean;\n\n rowLimit = 200;\n currentRow = 0; // 目前渐进生成的row number\n totalRow: number; // 渐进完成最后一行的row number\n yLimitTop: number; // y > yLimitTop动态更新,否则直接修改xy\n yLimitBottom: number; // y < yLimitBottom动态更新,否则直接修改xy\n rowStart = 0; // 当前维护的部分第一行的row number\n rowEnd = 0; // 当前维护的部分最后一行的row number\n referenceRow = 0; // 当前维护的部分中间一行的row number,认为referenceRow对应当前屏幕显示范围的第一行\n bodyTopRow: number; // table body部分的第一行row number\n bodyBottomRow: number; // table body部分的最后一行row number\n screenRowCount: number; // 预计屏幕范围内显示的row count\n firstScreenRowLimit: number; // 首屏同步加载部分最后一行的row number\n taskRowCount: number; // 一次任务生成/更新的row count\n rowUpdatePos: number; // 异步任务目前更新到的行的row number\n rowUpdateDirection: 'up' | 'down'; // 当前行更新的方向\n screenTopRow: number = 0; // 当前屏幕范围内显示的第一行的row number\n totalActualBodyRowCount: number; // 实际表格body部分的行数\n deltaY: number = 0;\n deltaHeight: number = 0;\n\n colLimit = 100;\n // bodyLeftCol: number; // table body部分的第一列col number\n bodyRightCol: number; // table body部分的最后一列col number\n totalCol: number; // 渐进完成最后一列的col number\n colStart: number; // 当前维护的部分第一列的col number\n colEnd: number; // 当前维护的部分最后一列的col number\n taskColCount: number; // 一次任务生成/更新的col count\n xLimitLeft: number; // x > xLimitLeft动态更新,否则直接修改xy\n xLimitRight: number; // x < xLimitRight动态更新,否则直接修改xy\n screenColCount: number; // 预计屏幕范围内显示的col count\n firstScreenColLimit: number; // 首屏同步加载部分最后一列的col number\n colUpdatePos: number; // 异步任务目前更新到的列的col number\n currentCol: number; // 目前渐进生成的col number\n referenceCol: number; // 当前维护的部分中间一列的col number,认为referenceCol对应当前屏幕显示范围的第一列\n screenLeftCol: number = 0; // 当前屏幕范围内显示的第一列的col number\n colUpdateDirection: 'left' | 'right'; // 当前列更新方向\n totalActualBodyColCount: number; // 实际表格body部分的列数\n deltaX: number = 0;\n deltaWidth: number = 0;\n\n cellCache: Map = new Map(); // 单元格位置快速查找缓存\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n\n if (this.table.isPivotChart()) {\n // this.rowLimit = 100;\n // this.colLimit = 100;\n this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n } else if (this.table.isAutoRowHeight()) {\n // this.rowLimit = 100;\n this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n } else if (this.table.widthMode === 'autoWidth') {\n // this.colLimit = 100;\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n } else {\n this.rowLimit = Math.max(200, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n }\n\n if (this.table.internalProps.transpose) {\n this.mode = 'row';\n } else if (this.table.isPivotTable()) {\n this.mode = 'pivot';\n }\n if (this.table.options.maintainedDataCount) {\n this.rowLimit = this.table.options.maintainedDataCount;\n }\n }\n\n get bodyLeftCol(): number {\n return this.table.frozenColCount;\n }\n\n setParamsForColumn() {\n // this.bodyLeftCol = this.table.frozenColCount;\n this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n\n // compute the column info about progress creation\n const totalActualBodyColCount = Math.min(this.colLimit, this.bodyRightCol - this.bodyLeftCol + 1);\n this.totalActualBodyColCount = totalActualBodyColCount;\n this.totalCol = this.bodyLeftCol + totalActualBodyColCount - 1; // 目标渐进完成的col\n this.colStart = this.bodyLeftCol;\n this.colEnd = this.totalCol; // temp for first screen, will replace in createGroupForFirstScreen()\n const defaultColWidth = this.table.defaultColWidth;\n // const defaultColWidth = getDefaultHeight(this.table);\n this.taskColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth) * 1;\n\n // 确定动态更新限制\n const totalBodyWidth = defaultColWidth * totalActualBodyColCount;\n const totalWidth = defaultColWidth * (this.bodyRightCol - this.bodyLeftCol + 1);\n this.xLimitLeft = totalBodyWidth / 2;\n this.xLimitRight = totalWidth - totalBodyWidth / 2;\n\n // 确定首屏高度范围\n const widthLimit = this.table.tableNoFrameWidth * 5;\n this.screenColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth);\n this.firstScreenColLimit = Math.max(\n 15, // min firstScreenColLimit\n this.bodyLeftCol + Math.min(this.colLimit, Math.ceil(widthLimit / defaultColWidth))\n );\n // this.firstScreenRowLimit = this.bodyBottomRow;\n\n this.colUpdatePos = this.bodyRightCol;\n }\n\n setParamsForRow() {\n this.bodyTopRow = this.table.frozenRowCount;\n this.bodyBottomRow = this.table.rowCount - 1 - this.table.bottomFrozenRowCount;\n // this.bodyLeftCol = 0;\n // this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n\n // 计算渐进加载数量\n const totalActualBodyRowCount = Math.min(this.rowLimit, this.bodyBottomRow - this.bodyTopRow + 1); // 渐进加载总row数量\n this.totalActualBodyRowCount = totalActualBodyRowCount;\n this.totalRow = this.bodyTopRow + totalActualBodyRowCount - 1; // 目标渐进完成的row\n this.rowStart = this.bodyTopRow;\n this.rowEnd = this.totalRow; // temp for first screen, will replace in createGroupForFirstScreen()\n const defaultRowHeight = this.table.defaultRowHeight;\n // const defaultRowHeight = getDefaultWidth(this.table);\n this.taskRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight) * 1;\n\n // 确定动态更新限制\n const totalBodyHeight = defaultRowHeight * totalActualBodyRowCount;\n const totalHeight = defaultRowHeight * (this.bodyBottomRow - this.bodyTopRow + 1);\n this.yLimitTop = totalBodyHeight / 2;\n this.yLimitBottom = totalHeight - totalBodyHeight / 2;\n // this.bottomOffset = totalHeight - totalBodyHeight / 2;\n\n // 确定首屏高度范围\n const heightLimit = this.table.tableNoFrameHeight * 5;\n this.screenRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight);\n this.firstScreenRowLimit = Math.max(\n 30, // min firstScreenRowLimit\n this.bodyTopRow + Math.min(this.rowLimit, Math.ceil(heightLimit / defaultRowHeight))\n );\n // this.firstScreenRowLimit = this.bodyBottomRow;\n\n this.rowUpdatePos = this.bodyBottomRow;\n }\n\n refreshRowCount() {\n this.bodyTopRow = this.table.frozenRowCount;\n this.bodyBottomRow = this.table.rowCount - 1 - this.table.bottomFrozenRowCount;\n const totalActualBodyRowCount = Math.min(this.rowLimit, this.bodyBottomRow - this.bodyTopRow + 1); // 渐进加载总row数量\n this.totalActualBodyRowCount = totalActualBodyRowCount;\n this.totalRow = this.rowStart + totalActualBodyRowCount - 1; // 目标渐进完成的row\n\n // this.rowStart = this.bodyTopRow;\n // this.rowEnd = this.totalRow; // temp for first screen, will replace in createGroupForFirstScreen()\n }\n\n refreshColCount() {\n this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n const totalActualBodyColCount = Math.min(this.colLimit, this.bodyRightCol - this.bodyLeftCol + 1);\n this.totalActualBodyColCount = totalActualBodyColCount;\n this.totalCol = this.bodyLeftCol + totalActualBodyColCount - 1; // 目标渐进完成的col\n\n this.colStart = this.bodyLeftCol;\n this.colEnd = this.totalCol; // temp for first screen, will replace in createGroupForFirstScreen()\n }\n\n resize() {\n const defaultColWidth = this.table.defaultColWidth;\n this.taskColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth) * 1;\n const widthLimit = this.table.tableNoFrameWidth * 5;\n this.screenColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth);\n this.firstScreenColLimit = this.bodyLeftCol + Math.min(this.colLimit, Math.ceil(widthLimit / defaultColWidth));\n\n const defaultRowHeight = this.table.defaultRowHeight;\n this.taskRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight) * 1;\n const heightLimit = this.table.tableNoFrameHeight * 5;\n this.screenRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight);\n this.firstScreenRowLimit = this.bodyTopRow + Math.min(this.rowLimit, Math.ceil(heightLimit / defaultRowHeight));\n }\n\n createGroupForFirstScreen(\n cornerHeaderGroup: Group,\n colHeaderGroup: Group,\n rowHeaderGroup: Group,\n rightFrozenGroup: Group,\n bottomFrozenGroup: Group,\n bodyGroup: Group,\n xOrigin: number,\n yOrigin: number\n ) {\n createGroupForFirstScreen(\n cornerHeaderGroup,\n colHeaderGroup,\n rowHeaderGroup,\n rightFrozenGroup,\n bottomFrozenGroup,\n bodyGroup,\n xOrigin,\n yOrigin,\n this\n );\n }\n // async progress() {\n // if (this.rowUpdatePos < this.rowEnd) {\n // console.log('progress rowUpdatePos', this.rowUpdatePos);\n // // 先更新\n // await this.updateCellGroupsAsync();\n // await this.progress();\n // } else if (this.currentRow < this.totalRow) {\n // console.log('progress currentRow', this.currentRow);\n // // 先更新没有需要更新的节点,在生成新节点\n // await this.createRow();\n // await this.progress();\n // }\n // }\n async progress() {\n if (this.isProgressing) {\n return;\n }\n this.isProgressing = true;\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n this.isProgressing = false;\n if (this.isRelease) {\n return;\n }\n // console.log('progress col', this.colUpdatePos, this.colEnd, this.currentCol, this.totalCol);\n // console.log('progress row', this.rowUpdatePos, this.rowEnd, this.currentRow, this.totalRow);\n // console.log('before: createRow', table.scenegraph.bodyGroup.lastChild.attribute);\n // if (this.isSkipProgress) {\n // await this.progress();\n // } else\n if (this.colUpdatePos <= this.colEnd) {\n // console.log('progress colUpdatePos', this.colUpdatePos);\n await this.updateColCellGroupsAsync();\n await this.progress();\n } else if (this.rowUpdatePos <= this.rowEnd) {\n // console.log('progress rowUpdatePos', this.rowUpdatePos);\n // 先更新\n await this.updateRowCellGroupsAsync();\n await this.progress();\n } else if (this.currentCol < this.totalCol) {\n await this.createCol();\n await this.progress();\n } else if (this.currentRow < this.totalRow) {\n // console.log('progress currentRow', this.currentRow);\n // 先更新没有需要更新的节点,在生成新节点\n await this.createRow();\n await this.progress();\n }\n handleTextStick(this.table);\n this.table.scenegraph.updateNextFrame();\n resolve();\n }, 16);\n });\n }\n\n async createRow() {\n if (!this.taskRowCount) {\n return;\n }\n // console.log('createRow', this.currentRow, this.currentRow + this.taskRowCount);\n this.createRowCellGroup(this.taskRowCount);\n }\n\n async createCol() {\n if (!this.taskColCount) {\n return;\n }\n // console.log('createCol', this.currentCol, this.currentCol + this.taskColCount);\n this.createColGroup(this.taskRowCount);\n }\n\n createRowCellGroup(onceCount: number) {\n const endRow = Math.min(this.totalRow, this.currentRow + onceCount);\n // compute rows height\n computeRowsHeight(this.table, this.currentRow + 1, endRow, false);\n\n this.rowEnd = endRow;\n\n if (this.table.frozenColCount) {\n // create row header row cellGroup\n let maxHeight = 0;\n for (let col = 0; col < this.table.frozenColCount; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n const cellLocation = this.table.isListTable() ? 'body' : 'rowHeader';\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n this.table.scenegraph.rowHeaderGroup.setAttribute('height', maxHeight);\n }\n }\n\n if (this.table.rightFrozenColCount) {\n // create row header row cellGroup\n let maxHeight = 0;\n for (let col = this.table.colCount - this.table.rightFrozenColCount; col < this.table.colCount; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n const cellLocation = this.table.isPivotChart() ? 'rowHeader' : 'body'; // isHeader\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n this.table.scenegraph.rightFrozenGroup.setAttribute('height', maxHeight);\n }\n }\n\n // create body row cellGroup\n let maxHeight = 0;\n for (let col = this.bodyLeftCol; col <= this.bodyRightCol; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n const cellLocation = col < this.table.rowHeaderLevelCount ? 'rowHeader' : 'body';\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n }\n this.table.scenegraph.bodyGroup.setAttribute('height', maxHeight);\n\n this.currentRow = endRow;\n this.rowUpdatePos = this.rowEnd;\n\n // update container group size and border\n this.table.scenegraph.updateContainer();\n this.table.scenegraph.updateBorderSizeAndPosition();\n }\n\n createColGroup(onceCount: number) {\n // compute rows height\n const endCol = Math.min(this.totalCol, this.currentCol + onceCount);\n computeColsWidth(this.table, this.currentCol + 1, endCol);\n\n this.colEnd = endCol;\n\n // update last merge cell size\n for (let row = 0; row < this.table.rowCount; row++) {\n const cellGroup = this.highPerformanceGetCell(this.currentCol, row);\n if (cellGroup.role === 'cell' && isNumber(cellGroup.mergeStartCol) && cellGroup.mergeStartCol > this.currentCol) {\n this.table.scenegraph.updateCellContent(cellGroup.col, cellGroup.row);\n }\n }\n\n // create column\n if (this.table.frozenRowCount) {\n // create colGroup\n const lastColumnGroup = (\n this.table.scenegraph.colHeaderGroup.lastChild instanceof Group\n ? this.table.scenegraph.colHeaderGroup.lastChild\n : this.table.scenegraph.colHeaderGroup.lastChild._prev\n ) as Group;\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create colHeaderGroup\n createColGroup(\n this.table.scenegraph.colHeaderGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n 0, // rowStart\n this.table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n this.table\n );\n }\n if (this.table.bottomFrozenRowCount) {\n // create colGroup\n const lastColumnGroup = (\n this.table.scenegraph.bottomFrozenGroup.lastChild instanceof Group\n ? this.table.scenegraph.bottomFrozenGroup.lastChild\n : this.table.scenegraph.bottomFrozenGroup.lastChild._prev\n ) as Group;\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create bottomFrozenGroup\n createColGroup(\n this.table.scenegraph.bottomFrozenGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n this.table.rowCount - this.table.bottomFrozenRowCount, // rowStart\n this.table.rowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n this.table\n );\n }\n // create colGroup\n let lastColumnGroup =\n this.table.scenegraph.bodyGroup.lastChild &&\n ((this.table.scenegraph.bodyGroup.lastChild instanceof Group\n ? this.table.scenegraph.bodyGroup.lastChild\n : this.table.scenegraph.bodyGroup.lastChild._prev) as Group);\n if (!lastColumnGroup) {\n lastColumnGroup =\n this.table.scenegraph.colHeaderGroup.lastChild &&\n ((this.table.scenegraph.colHeaderGroup.lastChild instanceof Group\n ? this.table.scenegraph.colHeaderGroup.lastChild\n : this.table.scenegraph.colHeaderGroup.lastChild._prev) as Group);\n }\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create bodyGroup\n createColGroup(\n this.table.scenegraph.bodyGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n this.rowStart, // rowStart\n this.rowEnd, // rowEnd\n 'body', // isHeader\n this.table\n );\n\n this.currentCol = endCol;\n this.colUpdatePos = this.colEnd;\n\n // update container group size and border\n this.table.scenegraph.updateContainer();\n this.table.scenegraph.updateBorderSizeAndPosition();\n }\n\n async setY(y: number, isEnd = false) {\n const yLimitTop =\n this.table.getRowsHeight(this.bodyTopRow, this.bodyTopRow + (this.rowEnd - this.rowStart + 1)) / 2;\n const yLimitBottom = this.table.getAllRowsHeight() - yLimitTop;\n\n const screenTop = this.table.getTargetRowAt(y + this.table.scenegraph.colHeaderGroup.attribute.height);\n if (screenTop) {\n this.screenTopRow = screenTop.row;\n }\n\n if (y < yLimitTop && this.rowStart === this.bodyTopRow) {\n // 执行真实body group坐标修改\n this.updateDeltaY(y);\n this.updateBody(y - this.deltaY);\n } else if (y > yLimitBottom && this.rowEnd === this.bodyBottomRow) {\n // 执行真实body group坐标修改\n this.updateDeltaY(y);\n this.updateBody(y - this.deltaY);\n } else if (\n (!this.table.scenegraph.bodyGroup.firstChild ||\n this.table.scenegraph.bodyGroup.firstChild.type !== 'group' ||\n this.table.scenegraph.bodyGroup.firstChild.childrenCount === 0) &&\n (!this.table.scenegraph.rowHeaderGroup.firstChild ||\n this.table.scenegraph.rowHeaderGroup.firstChild.type !== 'group' ||\n this.table.scenegraph.rowHeaderGroup.firstChild.childrenCount === 0)\n ) {\n this.updateDeltaY(y);\n // 兼容异步加载数据promise的情况 childrenCount=0 如果用户立即调用setScrollTop执行dynamicSetY会出错\n this.updateBody(y - this.deltaY);\n } else {\n // 执行动态更新节点\n this.dynamicSetY(y, screenTop, isEnd);\n }\n }\n\n async setX(x: number, isEnd = false) {\n const xLimitLeft =\n this.table.getColsWidth(this.bodyLeftCol, this.bodyLeftCol + (this.colEnd - this.colStart + 1)) / 2;\n const xLimitRight = this.table.getAllColsWidth() - xLimitLeft;\n\n const screenLeft = this.table.getTargetColAt(x + this.table.scenegraph.rowHeaderGroup.attribute.width);\n if (screenLeft) {\n this.screenLeftCol = screenLeft.col;\n }\n\n if (x < xLimitLeft && this.colStart === this.bodyLeftCol) {\n // 执行真实body group坐标修改\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else if (x > xLimitRight && this.colEnd === this.bodyRightCol) {\n // 执行真实body group坐标修改\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else if (\n // 注意判断关系 这里不是 || 而是 &&\n this.table.scenegraph.bodyGroup.firstChild &&\n this.table.scenegraph.bodyGroup.firstChild.type === 'group' &&\n this.table.scenegraph.bodyGroup.firstChild.childrenCount === 0\n ) {\n // 兼容异步加载数据promise的情况 childrenCount=0 如果用户立即调用setScrollLeft执行dynamicSetX会出错\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else {\n // 执行动态更新节点\n this.dynamicSetX(x, screenLeft, isEnd);\n }\n }\n\n async dynamicSetY(y: number, screenTop: RowInfo | null, isEnd = false) {\n dynamicSetY(y, screenTop, isEnd, this);\n }\n async dynamicSetX(x: number, screenLeft: ColumnInfo | null, isEnd = false) {\n dynamicSetX(x, screenLeft, isEnd, this);\n }\n\n updateBody(y: number) {\n this.table.scenegraph.setBodyAndRowHeaderY(-y);\n }\n\n async updateRowCellGroupsAsync() {\n this.updateCellGroups(this.taskRowCount);\n }\n\n updateCellGroups(count: number) {\n const distRow = Math.min(this.bodyBottomRow, this.rowUpdatePos + count);\n // console.log('updateCellGroups', this.rowUpdatePos, distRow);\n if (this.table.isAutoRowHeight()) {\n computeRowsHeight(this.table, this.rowUpdatePos, distRow, false);\n }\n\n updateRowContent(this.rowUpdatePos, distRow, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n this.bodyLeftCol, // colStart\n this.bodyRightCol, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n // row header group\n updateAutoRow(\n 0, // colStart\n this.table.frozenColCount - 1, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n // right frozen group\n updateAutoRow(\n this.table.colCount - this.table.rightFrozenColCount, // colStart\n this.table.colCount - 1, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n }\n\n this.rowUpdatePos = distRow + 1;\n }\n /** 更新底部冻结行的单元格内容 包括两边的角头 */\n updateBottomFrozenCellGroups() {\n const startRow = this.table.rowCount - this.table.bottomFrozenRowCount;\n const endRow = this.table.rowCount - 1;\n if (this.table.isAutoRowHeight()) {\n computeRowsHeight(this.table, startRow, endRow, false);\n }\n console.log('updateBottomFrozenCellGroups', startRow, endRow);\n updateRowContent(startRow, endRow, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n this.bodyLeftCol, // colStart\n this.bodyRightCol, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n // row header group\n updateAutoRow(\n 0, // colStart\n this.table.frozenColCount - 1, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n // right frozen group\n updateAutoRow(\n this.table.colCount - this.table.rightFrozenColCount, // colStart\n this.table.colCount - 1, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n }\n }\n /** 更新底部冻结行的单元格内容 包括两边的角头 */\n updateRightFrozenCellGroups() {\n const startCol = this.table.colCount - this.table.rightFrozenColCount;\n const endCol = this.table.colCount - 1;\n if (this.table.widthMode === 'autoWidth') {\n computeColsWidth(this.table, startCol, endCol, false);\n }\n console.log('updateRightFrozenCellGroups', startCol, endCol);\n updateColContent(startCol, endCol, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoColumn(startCol, endCol, this.table, this.colUpdateDirection);\n }\n }\n async updateColCellGroupsAsync() {\n this.updateColGroups(this.taskRowCount);\n }\n\n updateColGroups(count: number) {\n const distCol = Math.min(this.bodyRightCol, this.colUpdatePos + count);\n // console.log('updateCellGroups', this.colUpdatePos, distCol);\n // for (let col = this.colUpdatePos; col <= distCol; col++) {\n // const colGroup = this.table.scenegraph.getColGroup(col);\n // if (colGroup) {\n // // colGroup.forEachChildren((cellGroup: Group) => {\n // // this.updateCellGroupContent(cellGroup);\n // // });\n // // for (let row = (colGroup.firstChild as Group).row; row <= (colGroup.lastChild as Group).row; row++) {\n // // const cellGroup = this.highPerformanceGetCell(colGroup.col, row);\n // // this.updateCellGroupContent(cellGroup);\n // // }\n // let cellGroup = colGroup.firstChild;\n // while (cellGroup) {\n // // this.updateCellGroupContent(cellGroup as Group);\n // // cellGroup = cellGroup._next;\n // const newCellGroup = this.updateCellGroupContent(cellGroup as Group);\n // cellGroup = newCellGroup._next;\n // }\n // colGroup.needUpdate = false;\n // }\n // }\n computeColsWidth(this.table, this.colUpdatePos, distCol);\n updateColContent(this.colUpdatePos, distCol, this);\n this.colUpdatePos = distCol + 1;\n }\n\n updateCellGroupPosition(cellGroup: Group, newRow: number, y: number) {\n // 更新位置&row\n cellGroup.row = newRow;\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeEndRow = undefined;\n cellGroup.setAttribute('y', y);\n (cellGroup as any).needUpdate = true;\n (cellGroup as any).needUpdateForAutoRowHeight = true;\n }\n\n updateCellGroupContent(cellGroup: Group) {\n if (!cellGroup.needUpdate || cellGroup.role !== 'cell') {\n return cellGroup;\n }\n\n const newCellGroup = this.table.scenegraph.updateCellContent(cellGroup.col, cellGroup.row);\n cellGroup.needUpdate = false;\n return newCellGroup || cellGroup;\n }\n\n async sortCellVertical() {\n await sortVertical(this);\n }\n\n async sortCellHorizontal() {\n await sortHorizontal(this);\n }\n\n highPerformanceGetCell(\n col: number,\n row: number,\n // rowStart: number = this.rowStart,\n // rowEnd: number = this.rowEnd,\n getShadow?: boolean\n ) {\n // if (row < rowStart || row > rowEnd) {\n // return emptyGroup;\n // }\n // if (row < this.rowStart || row > this.rowEnd || col < this.colStart || col > this.colEnd) {\n // return emptyGroup;\n // }\n\n if (\n row >= this.table.frozenRowCount && // not column header\n row < this.table.rowCount - this.table.bottomFrozenRowCount && // not bottom frozen\n (row < this.rowStart || row > this.rowEnd) // not in proxy row range\n ) {\n return emptyGroup;\n }\n\n if (\n col >= this.table.frozenColCount && // not row header\n col < this.table.colCount - this.table.rightFrozenColCount && // not right frozen\n (col < this.colStart || col > this.colEnd) // not in proxy col range\n ) {\n return emptyGroup;\n }\n\n if (this.cellCache.get(col)) {\n const cacheCellGoup = this.cellCache.get(col);\n if ((cacheCellGoup._next || cacheCellGoup._prev) && Math.abs(cacheCellGoup.row - row) < row) {\n // 由缓存单元格向前后查找要快于从头查找\n let cellGroup = getCellByCache(cacheCellGoup, row);\n if (!cellGroup || (!getShadow && cellGroup.role === 'shadow-cell')) {\n cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n }\n cellGroup.row && this.cellCache.set(col, cellGroup);\n return cellGroup;\n }\n const cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n // cellGroup.row && this.cellCache.set(col, cellGroup);\n if (cellGroup.col === col && cellGroup.row) {\n this.cellCache.set(col, cellGroup);\n }\n return cellGroup;\n }\n const cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n // cellGroup.row && this.cellCache.set(col, cellGroup);\n if (cellGroup.col === col && cellGroup.row) {\n this.cellCache.set(col, cellGroup);\n }\n return cellGroup;\n }\n\n updateDeltaY(y: number, screenTopY?: number, screenTopRow?: number) {\n if (this.rowStart === this.bodyTopRow) {\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, this.rowStart, true);\n if (cellGroup.role === 'cell') {\n const deltaY = cellGroup.attribute.y;\n this.deltaY = -deltaY;\n }\n } else if (this.rowEnd === this.bodyBottomRow) {\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, this.rowEnd, true);\n if (cellGroup.role === 'cell') {\n // const deltaY =\n // cellGroup.attribute.y +\n // cellGroup.attribute.height -\n // (this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()) -\n // y;\n const deltaY =\n cellGroup.attribute.y +\n cellGroup.attribute.height -\n (this.table.getAllRowsHeight() - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight());\n this.deltaY = -deltaY;\n }\n } else if (isValid(screenTopY) && isValid(screenTopRow)) {\n let cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, screenTopRow, true);\n if (cellGroup.role !== 'cell') {\n cellGroup = this.table.scenegraph.highPerformanceGetCell(0, screenTopRow, true);\n }\n const bodyY = y - this.deltaY;\n const distRowYOffset = screenTopY - bodyY; // dist cell 距离表格顶部的位置差\n const currentRowYOffset = cellGroup.attribute.y - bodyY + this.table.getFrozenRowsHeight(); // current cell 距离表格顶部的位置差\n // const deltaY = screenTopY - (cellGroup.attribute.y + );\n this.deltaY = distRowYOffset - currentRowYOffset;\n }\n }\n\n updateDeltaX(x: number, screenLeftX?: number, screenLeftCol?: number) {\n if (this.colStart === this.bodyLeftCol) {\n const colGroup = this.table.scenegraph.getColGroup(this.colStart);\n if (colGroup) {\n const deltaX = colGroup.attribute.x;\n this.deltaX = -deltaX;\n }\n } else if (this.colEnd === this.bodyRightCol) {\n const colGroup = this.table.scenegraph.getColGroup(this.colEnd);\n if (colGroup) {\n const deltaX =\n colGroup.attribute.x +\n colGroup.attribute.width -\n (this.table.getAllColsWidth() - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth());\n this.deltaX = -deltaX;\n }\n } else if (isValid(screenLeftX) && isValid(screenLeftCol)) {\n const colGroup =\n this.table.scenegraph.getColGroup(screenLeftCol) || this.table.scenegraph.getColGroup(screenLeftCol, true);\n // const deltaX = screenLeftX - (colGroup.attribute.x + this.table.getFrozenColsWidth() + this.deltaX);\n // this.deltaX = deltaX + this.deltaX;\n const bodyX = x - this.deltaX;\n const distColXOffset = screenLeftX - bodyX; // dist col 距离表格左侧的位置差\n const currentColXOffset = colGroup.attribute.x - bodyX + this.table.getFrozenColsWidth(); // current col 距离表格左侧的位置差\n this.deltaX = distColXOffset - currentColXOffset;\n }\n }\n\n release() {\n this.isRelease = true;\n }\n}\n\nfunction getCellByCache(cacheCellGroup: Group, row: number): Group | null {\n if (!cacheCellGroup) {\n return null;\n }\n if (cacheCellGroup.row === row) {\n return cacheCellGroup;\n }\n const prev = cacheCellGroup._prev as Group;\n const next = cacheCellGroup._next as Group;\n // cacheCellGroup may have wrong order\n if (cacheCellGroup.row > row && prev && prev.row === cacheCellGroup.row - 1) {\n return getCellByCache(prev, row);\n }\n if (cacheCellGroup.row < row && next && next.row === cacheCellGroup.row + 1) {\n return getCellByCache(next, row);\n }\n return null;\n}\n","import type { Group } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CellRange } from '../../ts-types';\nexport function moveHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row',\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange,\n table: BaseTableAPI\n) {\n const scene = table.scenegraph;\n\n // 更新columnGroup列宽\n for (let col = updateColStart; col <= updateColEnd; col++) {\n const columnWidth = table.getColWidth(col);\n const columnHeaderGroup = table.scenegraph.getColGroup(col, true);\n const columnGroup = table.scenegraph.getColGroup(col);\n const columnBottomGroup = table.scenegraph.getColGroupInBottom(col);\n const columnLeftBottomGroup = table.scenegraph.getColGroupInLeftBottomCorner(col);\n const columnRightBottomGroup = table.scenegraph.getColGroupInRightBottomCorner(col);\n if (columnHeaderGroup) {\n columnHeaderGroup.setAttribute('width', columnWidth);\n columnHeaderGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnGroup) {\n columnGroup.setAttribute('width', columnWidth);\n columnGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnBottomGroup) {\n columnBottomGroup.setAttribute('width', columnWidth);\n columnBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnRightBottomGroup) {\n columnRightBottomGroup.setAttribute('width', columnWidth);\n columnRightBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnLeftBottomGroup) {\n columnLeftBottomGroup.setAttribute('width', columnWidth);\n columnLeftBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n }\n\n // 更新容器尺寸\n // scene.updateContainerAttrWidthAndX();\n scene.updateContainer();\n\n if (moveType === 'column') {\n for (let col = updateColStart; col <= updateColEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n\n // 将上下表头 和中间body部分分别更新\n for (let row = 0; row <= table.frozenRowCount - 1; row++) {\n scene.updateCellContent(col, row);\n }\n for (let row = scene.bodyRowStart; row <= scene.bodyRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= table.rowCount - 1; row++) {\n scene.updateCellContent(col, row);\n }\n }\n } else {\n // 将左侧冻结列or行表头的单元格更新\n for (let col = 0; col <= table.frozenColCount - 1; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n // 将中间body的单元格更新\n for (let col = scene.bodyColStart; col <= scene.bodyColEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n // 将右侧冻结列的单元格更新\n for (let col = table.colCount - table.rightFrozenColCount; col <= table.colCount - 1; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n }\n}\n","import { createRect, type IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.customSelectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n}\n\nfunction updateComponent(\n selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation },\n key: string,\n scene: Scenegraph\n) {\n const table = scene.table;\n const [startColStr, startRowStr, endColStr, endRowStr] = key.split('-');\n const startCol = parseInt(startColStr, 10);\n const startRow = parseInt(startRowStr, 10);\n const endCol = parseInt(endColStr, 10);\n const endRow = parseInt(endRowStr, 10);\n // 下面为计算选中区域使用的行列值\n let computeRectCellRangeStartCol = startCol;\n let computeRectCellRangeStartRow = startRow;\n let computeRectCellRangeEndCol = endCol;\n let computeRectCellRangeEndRow = endRow;\n // 下面逻辑根据选中区域所属表格部分 来判断可视区域内容的选中单元格范围\n let visibleCellRange;\n switch (selectComp.role) {\n case 'rowHeader':\n visibleCellRange = table.getBodyVisibleRowRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'columnHeader':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'cornerHeader':\n break;\n case 'bottomFrozen':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'rightFrozen':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'rightTopCorner':\n break;\n case 'leftBottomCorner':\n break;\n case 'rightBottomCorner':\n break;\n default:\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n }\n // const cellRange = table.getCellRange(startCol, startRow);\n // const colsWidth = table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow);\n const firstCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol,\n computeRectCellRangeStartRow\n ).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n\n selectComp.rect.setAttributes({\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, //坐标xy在下面的逻辑中会做适当调整\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: colsWidth,\n height: rowsHeight,\n visible: true\n });\n if (selectComp.fillhandle) {\n selectComp.fillhandle?.setAttributes({\n x: lastCellBound.x2 - scene.tableGroup.attribute.x - 3, // 调整小方块位置\n y: lastCellBound.y2 - scene.tableGroup.attribute.y - 3, // 调整小方块位置\n width: 6,\n height: 6,\n visible: true\n });\n }\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n let isNearRowHeader = table.frozenColCount ? startCol === table.frozenColCount : false;\n if (!isNearRowHeader && table.frozenColCount && table.scrollLeft > 0 && startCol >= table.frozenColCount) {\n const startColRelativePosition = table.getColsWidth(0, startCol - 1) - table.scrollLeft;\n if (startColRelativePosition < table.getFrozenColsWidth()) {\n isNearRowHeader = true;\n }\n }\n\n let isNearRightRowHeader = table.rightFrozenColCount\n ? table.rightFrozenColCount > 0 && endCol === table.colCount - table.rightFrozenColCount - 1\n : false;\n if (!isNearRightRowHeader && table.rightFrozenColCount && endCol < table.colCount - table.rightFrozenColCount) {\n const endColRelativePosition = table.getColsWidth(0, endCol) - table.scrollLeft;\n if (endColRelativePosition > table.tableNoFrameWidth - table.getRightFrozenColsWidth()) {\n isNearRightRowHeader = true;\n }\n }\n\n let isNearColHeader = table.frozenRowCount ? startRow === table.frozenRowCount : true;\n if (!isNearColHeader && table.frozenRowCount && table.scrollTop > 0 && startRow >= table.frozenRowCount) {\n const startRowRelativePosition = table.getRowsHeight(0, startRow - 1) - table.scrollTop;\n if (startRowRelativePosition < table.getFrozenRowsHeight()) {\n isNearColHeader = true;\n }\n }\n\n let isNearBottomColHeader = table.bottomFrozenRowCount\n ? endRow === table.rowCount - table.bottomFrozenRowCount - 1\n : false;\n if (!isNearBottomColHeader && table.bottomFrozenRowCount && endRow < table.rowCount - table.bottomFrozenRowCount) {\n const endRowRelativePosition = table.getRowsHeight(0, endRow) - table.scrollTop;\n if (endRowRelativePosition > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()) {\n isNearBottomColHeader = true;\n }\n }\n\n if (\n (isNearRowHeader && selectComp.rect.attribute.stroke[3]) ||\n (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) ||\n (isNearColHeader && selectComp.rect.attribute.stroke[0]) ||\n (isNearBottomColHeader && selectComp.rect.attribute.stroke[2])\n ) {\n if (isNearRowHeader && selectComp.rect.attribute.stroke[3]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.leftBottomCornerGroup\n : scene.rowHeaderGroup\n );\n }\n\n if (isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightBottomCornerGroup\n : scene.bottomFrozenGroup\n );\n }\n\n if (isNearColHeader && selectComp.rect.attribute.stroke[0]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightTopCornerGroup\n : scene.colHeaderGroup\n );\n }\n if (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.rightBottomCornerGroup\n : scene.rightFrozenGroup\n );\n }\n\n //#region 调整层级后 滚动情况下会出现绘制范围出界 如body的选中框 渲染在了rowheader上面,所有需要调整选中框rect的 边界\n if (\n selectComp.rect.attribute.x < table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width > 0\n });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n table.getRightFrozenColsWidth() > 0 && // right冻结列存在的情况下\n scene.rightFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x;\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x,\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width - colsWidth > 0\n });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n table.scrollTop > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height =\n selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y);\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),\n height: height > 0 ? height : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: height > 0\n });\n }\n if (\n scene.bottomFrozenGroup.attribute.width > 0 &&\n scene.bottomFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height = scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y;\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y,\n height: height > 0 ? height : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: height - rowsHeight > 0\n });\n }\n //#endregion\n } else {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'body'\n ? scene.bodyGroup\n : selectComp.role === 'columnHeader'\n ? scene.colHeaderGroup\n : selectComp.role === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectComp.role === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectComp.role === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n }\n //#endregion\n\n //#region 处理边缘被截问题\n let diffSize = 0;\n if (typeof selectComp.rect.attribute.lineWidth === 'number') {\n diffSize = Math.ceil(selectComp.rect.attribute.lineWidth / 2);\n }\n if (endCol === table.colCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[1] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (startCol === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[3] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + diffSize,\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // x: selectComp.rect.attribute.x + diffSize,\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (endRow === table.rowCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[2] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n if (startRow === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[0] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + diffSize,\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // y: selectComp.rect.attribute.y + diffSize,\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n //#endregion\n}\n\nexport function updateCellSelectBorder(\n scene: Scenegraph,\n selectRange: CellRange & { skipBodyMerge?: boolean },\n ifExtendSelectRange: boolean = true\n) {\n const table = scene.table;\n const newStartCol = selectRange.start.col;\n const newStartRow = selectRange.start.row;\n const newEndCol = selectRange.end.col;\n const newEndRow = selectRange.end.row;\n const skipBodyMerge = selectRange.skipBodyMerge;\n\n let startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n let startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n let endCol = Math.min(Math.max(newEndCol, newStartCol), table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), table.rowCount - 1);\n //#region region 校验四周的单元格有没有合并的情况,如有则扩大范围\n const extendSelectRange = () => {\n let isExtend = false;\n for (let col = startCol; col <= endCol; col++) {\n if (col === startCol) {\n for (let row = startRow; row <= endRow; row++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && mergeInfo.start.col < startCol) {\n startCol = mergeInfo.start.col;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && col === endCol) {\n for (let row = startRow; row <= endRow; row++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, table.colCount - 1) > endCol) {\n endCol = mergeInfo.end.col;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n if (!isExtend) {\n for (let row = startRow; row <= endRow; row++) {\n if (row === startRow) {\n for (let col = startCol; col <= endCol; col++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && mergeInfo.start.row < startRow) {\n startRow = mergeInfo.start.row;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && row === endRow) {\n for (let col = startCol; col <= endCol; col++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, table.rowCount - 1) > endRow) {\n endRow = mergeInfo.end.row;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n }\n if (isExtend) {\n extendSelectRange();\n }\n };\n ifExtendSelectRange && extendSelectRange();\n //#endregion\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n\n let needRowHeader = false;\n let needRightRowHeader = false; // 右侧冻结\n let needColumnHeader = false;\n let needBottomColumnHeader = false; // 底部冻结\n let needBody = false;\n let needCornerHeader = false;\n let needRightTopCornerHeader = false;\n let needRightBottomCornerHeader = false;\n let needLeftBottomCornerHeader = false;\n if (startCol <= table.frozenColCount - 1 && startRow <= table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= table.frozenColCount - 1 &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= table.colCount - table.rightFrozenColCount &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= table.frozenRowCount - 1 &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= table.rowCount - table.bottomFrozenRowCount &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= table.colCount - table.rightFrozenColCount - 1 &&\n endCol >= table.frozenColCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1 &&\n endRow >= table.frozenRowCount\n ) {\n needBody = true;\n }\n\n // TODO 可以尝试不拆分三个表头和body【前提是theme中合并配置】 用一个SelectBorder 需要结合clip,并动态设置border的范围【依据区域范围 已经是否跨表头及body】\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n scene.createCellSelectBorder(\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n scene.createCellSelectBorder(\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n scene.createCellSelectBorder(\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n}\n\nexport function hideCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n}\n","import { createRect } from './../../vrender';\nimport type { CellSubLocation } from '../../ts-types';\nimport type { Scenegraph } from '../scenegraph';\nimport { table } from 'console';\n\nexport function createCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[]\n // isHasFillHandleRect: boolean\n) {\n let isHasFillHandleRect = !!scene.table.options.excelOptions?.fillHandle;\n if (scene.table.stateManager.select.ranges?.length > 1) {\n isHasFillHandleRect = false;\n scene.removeFillHandleFromSelectComponents();\n } else if (scene.table.stateManager.select.ranges?.length === 1) {\n const maxRow = Math.max(\n scene.table.stateManager.select.ranges[0].start.row,\n scene.table.stateManager.select.ranges[0].end.row\n );\n const maxCol = Math.max(\n scene.table.stateManager.select.ranges[0].start.col,\n scene.table.stateManager.select.ranges[0].end.col\n );\n if (scene.table.isHeader(maxCol, maxRow)) {\n isHasFillHandleRect = false;\n }\n }\n if (Array.isArray(strokes) && (strokes[1] === false || strokes[2] === false)) {\n isHasFillHandleRect = false;\n }\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds;\n const theme = scene.table.theme;\n // 框选外边框\n const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;\n const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;\n const rect = createRect({\n pickable: false,\n fill:\n theme.selectionStyle?.selectionFillMode === 'replace'\n ? false\n : (theme.selectionStyle?.cellBgColor as any) ?? 'rgba(0, 0, 255,0.1)',\n\n lineWidth: bodyClickLineWidth as number,\n // stroke: bodyClickBorderColor as string,\n stroke: strokes.map(stroke => {\n if (stroke) {\n return bodyClickBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, // 坐标xy及宽高width height 不需要这里计算具体值 update-select-border文件中updateComponent方法中有逻辑 且该方法调用时间是render\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: 0,\n height: 0,\n visible: true\n });\n // 创建右下角小方块\n let fillhandle;\n if (isHasFillHandleRect) {\n fillhandle = createRect({\n pickable: false,\n fill: bodyClickBorderColor as string,\n // lineWidth: bodyClickLineWidth as number,\n stroke: bodyClickBorderColor as string, // 右下角小方块边框颜色\n x: lastCellBound.x2 - 3, // 调整小方块位置\n y: lastCellBound.y2 - 3, // 调整小方块位置\n width: 6,\n height: 6,\n\n visible: true\n });\n }\n scene.lastSelectId = selectId;\n scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n fillhandle,\n role: selectRangeType\n });\n scene.tableGroup.insertAfter(\n rect,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n isHasFillHandleRect &&\n scene.tableGroup.insertAfter(\n fillhandle,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n}\n","import type { Scenegraph } from '../scenegraph';\n\nexport function moveSelectingRangeComponentsToSelectedRangeComponents(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((rangeComponent, key) => {\n if (scene.selectedRangeComponents.get(key)) {\n scene.selectingRangeComponents.get(key).rect.delete();\n scene.selectingRangeComponents.get(key).fillhandle?.delete();\n }\n scene.selectedRangeComponents.set(key, rangeComponent);\n });\n scene.selectingRangeComponents = new Map();\n scene.updateNextFrame();\n}\n","import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\n\n/** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\nexport function deleteLastSelectedRangeComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n const lastSelectId = key.split('-')[4];\n if (lastSelectId === scene.lastSelectId) {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n scene.selectedRangeComponents.delete(key);\n }\n }\n );\n}\n\nexport function deleteAllSelectBorder(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectedRangeComponents = new Map();\n}\n\nexport function deleteAllSelectingBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n}\n\nexport function removeFillHandleFromSelectComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.fillhandle?.delete();\n selectComp.fillhandle = undefined;\n }\n );\n}\n","import { isNumber, isValid } from '@visactor/vutils';\nimport type { CellAddress, CellRange } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { updateCell } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { deduplication } from '../../tools/util';\n\n/**\n * add and remove rows in scenegraph\n */\nexport function updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[],\n table: BaseTableAPI,\n skipUpdateProxy?: boolean\n) {\n const scene = table.scenegraph;\n // deduplication\n const removeRows = deduplication(removeCells.map(cell => cell.row)).sort((a, b) => b - a);\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n\n let rowUpdatePos;\n if (updateRows.length) {\n const beforeRow = updateRows[0] - 1;\n const afterRow = updateRows[updateRows.length - 1] + 1;\n rowUpdatePos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n }\n if (addRows.length) {\n const beforeRow = addRows[0] - 1;\n const afterRow = addRows[addRows.length - 1] + 1;\n const pos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n if (removeRows.length) {\n const beforeRow = removeRows[0] - 1;\n const afterRow = removeRows[removeRows.length - 1] + 1;\n const pos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n // remove cells\n removeRows.forEach(row => {\n removeRow(row, scene, skipUpdateProxy);\n });\n\n const rowHeightsMap = table.rowHeightsMap;\n removeRows.forEach(row => {\n rowHeightsMap.delete(row);\n });\n\n if (removeRows.length) {\n resetRowNumber(scene);\n const beforeRow = removeRows[removeRows.length - 1] - 1;\n const afterRow = removeRows[0] - removeRows.length + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n // isNumber(rowUpdatePos) && (scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, rowUpdatePos));\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n scene.table._clearRowRangeHeightsMap();\n\n // add cells\n let updateAfter: number;\n addRows.forEach(row => {\n const needUpdateAfter = addRow(row, scene, skipUpdateProxy);\n updateAfter = updateAfter ?? needUpdateAfter;\n rowHeightsMap.insert(row);\n });\n\n // reset attribute y and row number in CellGroup\n // const newTotalHeight = resetRowNumberAndY(scene);\n resetRowNumberAndY(scene);\n\n if (addRows.length) {\n const beforeRow = addRows[0] - 1;\n const afterRow = addRows[addRows.length - 1] + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n for (let col = 0; col < table.colCount; col++) {\n // add cells\n updateRows.forEach(row => {\n if (row < table.frozenRowCount) {\n // top frozen\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n } else if (\n // row < table.frozenRowCount || // not top frozen\n row > table.rowCount - 1 || // greater than rowCount - 1\n (row < scene.table.rowCount - scene.table.bottomFrozenRowCount && // not bottom frozen\n (row < scene.proxy.rowStart || row > scene.proxy.rowEnd)) // not in row range\n ) {\n removeCellGroup(row, scene);\n } else {\n // updateRowAttr(row, scene);\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n }\n });\n }\n\n if (updateRows.length) {\n const beforeRow = updateRows[0] - 1;\n const afterRow = updateRows[updateRows.length - 1] + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n if (isNumber(updateAfter)) {\n for (let col = 0; col < table.colCount; col++) {\n for (let row = updateAfter; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n rowUpdatePos = isValid(rowUpdatePos)\n ? isValid(updateAfter)\n ? Math.min(rowUpdatePos, updateAfter)\n : rowUpdatePos\n : updateAfter;\n // scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, updateAfter);\n }\n isNumber(rowUpdatePos) && (scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, rowUpdatePos));\n if (addRows.length) {\n if (!isNumber(updateAfter)) {\n const minRow = Math.min(...addRows);\n scene.proxy.rowUpdatePos = Math.min(minRow, scene.proxy.rowUpdatePos);\n }\n scene.proxy.rowUpdateDirection = 'up';\n scene.proxy.updateCellGroups(scene.proxy.screenRowCount * 2);\n updateBottomFrozeCellGroups();\n // scene.proxy.progress();\n } else if (removeRows.length) {\n setRowSeriesNumberCellNeedUpdate(removeRows[removeRows.length - 1], scene);\n scene.proxy.updateCellGroups(scene.proxy.screenRowCount * 2);\n\n updateBottomFrozeCellGroups();\n // scene.proxy.progress();\n }\n scene.proxy.progress();\n\n // update table size\n const newTotalHeight = table.getRowsHeight(table.frozenRowCount, table.rowCount - 1 - table.bottomFrozenRowCount);\n scene.updateContainerHeight(scene.table.frozenRowCount, newTotalHeight - scene.bodyGroup.attribute.height);\n\n function updateBottomFrozeCellGroups() {\n if (\n addRows?.[addRows?.length - 1] >= table.rowCount - table.bottomFrozenRowCount ||\n updateRows?.[updateRows?.length - 1] >= table.rowCount - table.bottomFrozenRowCount ||\n removeRows?.[0] >= table.rowCount - table.bottomFrozenRowCount\n ) {\n for (let col = 0; col < table.colCount; col++) {\n for (let row = table.rowCount - table.bottomFrozenRowCount; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.updateBottomFrozenCellGroups();\n }\n }\n}\nfunction removeRow(row: number, scene: Scenegraph, skipUpdateProxy?: boolean) {\n // const infectCellRange = removeCellGroup(row, scene);\n // for (let i = 0; i < infectCellRange.length; i++) {\n // const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = infectCellRange[i];\n // for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n // for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n // const cellGroup = scene.getCell(col, row, true);\n // if (cellGroup) {\n // cellGroup.needUpdate = true;\n // }\n // }\n // }\n // }\n\n const proxy = scene.proxy;\n\n // TODO 需要整体更新proxy的状态\n if (row >= proxy.rowStart && row <= proxy.rowEnd) {\n removeCellGroup(row, scene);\n proxy.rowEnd--;\n proxy.currentRow--;\n }\n if (!skipUpdateProxy) {\n proxy.bodyBottomRow--;\n // proxy.totalRow--;\n const totalActualBodyRowCount = Math.min(proxy.rowLimit, proxy.bodyBottomRow - proxy.bodyTopRow + 1); // 渐进加载总row数量\n proxy.totalActualBodyRowCount = totalActualBodyRowCount;\n proxy.totalRow = Math.min(proxy.table.rowCount - 1, proxy.rowStart + totalActualBodyRowCount - 1); // 目标渐进完成的row\n }\n}\n\nfunction addRow(row: number, scene: Scenegraph, skipUpdateProxy?: boolean) {\n const proxy = scene.proxy;\n if (!skipUpdateProxy) {\n proxy.bodyBottomRow++;\n // proxy.totalRow++;\n const totalActualBodyRowCount = Math.min(proxy.rowLimit, proxy.bodyBottomRow - proxy.bodyTopRow + 1); // 渐进加载总row数量\n proxy.totalActualBodyRowCount = totalActualBodyRowCount;\n proxy.totalRow = proxy.rowStart + totalActualBodyRowCount - 1; // 目标渐进完成的row\n }\n\n if (row < proxy.rowStart) {\n return undefined;\n } else if (row > proxy.rowEnd) {\n if (proxy.rowEnd - proxy.rowStart + 1 < proxy.rowLimit) {\n // can add row\n proxy.rowEnd++;\n proxy.currentRow++;\n\n addRowCellGroup(row, scene);\n return row;\n }\n return undefined;\n }\n if (proxy.rowEnd - proxy.rowStart + 1 < proxy.rowLimit) {\n // can add row\n proxy.rowEnd++;\n proxy.currentRow++;\n\n addRowCellGroup(row, scene);\n return row;\n }\n\n // update rows after\n return row;\n\n // return undefined;\n\n // // TODO 需要整体更新proxy的状态\n // scene.proxy.bodyBottomRow++;\n // scene.proxy.totalRow++;\n // scene.proxy.rowEnd++;\n // scene.proxy.currentRow++;\n}\nfunction resetRowNumber(scene: Scenegraph) {\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n\n scene.rowHeaderGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.leftBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n function processCell(cellGroup: Group, rowIndex: number) {\n cellGroup.row = rowIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeStartRow = merge.start.row;\n cellGroup.mergeEndRow = merge.end.row;\n } else {\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndRow = undefined;\n }\n }\n}\n\nfunction resetRowNumberAndY(scene: Scenegraph) {\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n\n scene.rowHeaderGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.leftBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n function processCell(cellGroup: Group, rowIndex: number, y: number) {\n cellGroup.row = rowIndex;\n cellGroup.setAttribute('y', y);\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeStartRow = merge.start.row;\n cellGroup.mergeEndRow = merge.end.row;\n } else {\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndRow = undefined;\n }\n }\n}\nfunction addRowCellGroup(row: number, scene: Scenegraph) {\n for (let col = 0; col < scene.table.colCount; col++) {\n // create cellGroup\n // const cellGroup = updateCell(col, row, scene.table, true);\n const cellGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: scene.table.getRowHeight(row)\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n cellGroup.needUpdate = true;\n\n if (!cellGroup) {\n // TODO: deal with data promise situation\n continue;\n }\n\n // insert cellGroup in colGroup\n const colGroup = scene.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n\n if (colGroup.firstChild && row < (colGroup.firstChild as Group).row) {\n colGroup.insertBefore(cellGroup, colGroup.firstChild);\n (colGroup.firstChild as Group).row = (colGroup.firstChild as Group).row + 1;\n // if (\n // isNumber((colGroup.firstChild as Group).mergeStartRow) &&\n // isNumber((colGroup.firstChild as Group).mergeEndRow)\n // ) {\n // (colGroup.firstChild as Group).mergeStartRow = (colGroup.firstChild as Group).mergeStartRow + 1;\n // (colGroup.firstChild as Group).mergeEndRow = (colGroup.firstChild as Group).mergeEndRow + 1;\n // }\n } else if (colGroup.lastChild && row > (colGroup.lastChild as Group).row) {\n colGroup.appendChild(cellGroup);\n } else {\n // let cellBefore: Group;\n // colGroup.forEachChildren((cellGroup: Group) => {\n // if (cellGroup.row === row) {\n // cellBefore = cellGroup;\n // return true;\n // }\n // return false;\n // });\n\n const cellBefore = scene.highPerformanceGetCell(col, row, true);\n if (cellBefore !== cellGroup) {\n colGroup.insertBefore(cellGroup, cellBefore);\n cellBefore && (cellBefore.row = cellBefore.row + 1);\n // if (isNumber(cellBefore.mergeStartRow) && isNumber(cellBefore.mergeEndRow)) {\n // cellBefore.mergeStartRow = cellBefore.mergeStartRow + 1;\n // cellBefore.mergeEndRow = cellBefore.mergeEndRow + 1;\n // }\n if (cellBefore !== colGroup.lastChild) {\n colGroup.lastChild && ((colGroup.lastChild as Group).row = (colGroup.lastChild as Group).row + 1);\n // if (\n // isNumber((colGroup.lastChild as Group).mergeStartRow) &&\n // isNumber((colGroup.lastChild as Group).mergeEndRow)\n // ) {\n // (colGroup.lastChild as Group).mergeStartRow = (colGroup.lastChild as Group).mergeStartRow + 1;\n // (colGroup.lastChild as Group).mergeEndRow = (colGroup.lastChild as Group).mergeEndRow + 1;\n // }\n }\n }\n }\n\n // // reset row number\n // let rowIndex = (colGroup.firstChild as Group)?.row;\n // colGroup.forEachChildren((cellGroup: Group) => {\n // cellGroup.row = rowIndex;\n // rowIndex++;\n // });\n }\n}\n\nfunction removeCellGroup(row: number, scene: Scenegraph) {\n // const infectCellRange = [];\n for (let col = 0; col < scene.table.colCount; col++) {\n // const headerColGroup = scene.getColGroup(col, true);\n const colGroup = scene.getColGroup(col, false);\n if (!colGroup) {\n continue;\n }\n\n // remove cellGroup in colGroup\n let cellGroup: Group;\n colGroup.forEachChildren((cell: Group) => {\n if (cell.row === row) {\n cellGroup = cell;\n return true;\n }\n return false;\n });\n if (cellGroup) {\n colGroup.updateColumnHeight(-(cellGroup as Group).attribute.height);\n colGroup.removeChild(cellGroup);\n // if (\n // isValid(cellGroup.mergeStartCol) &&\n // isValid(cellGroup.mergeEndCol) &&\n // isValid(cellGroup.mergeStartRow) &&\n // isValid(cellGroup.mergeEndRow)\n // ) {\n // infectCellRange.push({\n // col: cellGroup.col,\n // row: cellGroup.row,\n // mergeStartCol: cellGroup.mergeStartCol,\n // mergeEndCol: cellGroup.mergeEndCol,\n // mergeStartRow: cellGroup.mergeStartRow,\n // mergeEndRow: cellGroup.mergeEndRow\n // });\n // }\n }\n }\n // return infectCellRange;\n}\n\nfunction _getUpdateRowIndex(beforeRow: number, afterRow: number, scene: Scenegraph) {\n let updateRow;\n for (let col = 0; col < scene.table.colCount; col++) {\n const rangeBefore = scene.table.getCellRange(col, beforeRow);\n let row;\n if (rangeBefore.start.row <= beforeRow + 1 && rangeBefore.end.row >= beforeRow + 1) {\n addNeedUpdateTag(rangeBefore, scene);\n row = rangeBefore.start.row;\n }\n\n const rangeAfter = scene.table.getCellRange(col, afterRow);\n if (rangeAfter.start.row <= afterRow + 1 && rangeAfter.end.row >= afterRow + 1) {\n addNeedUpdateTag(rangeAfter, scene);\n row = rangeAfter.start.row;\n }\n if (isValid(row)) {\n updateRow = isValid(updateRow) ? Math.min(updateRow, row) : row;\n }\n }\n return updateRow;\n}\nfunction _getUpdateRowIndexUseCellNode(beforeRow: number, afterRow: number, scene: Scenegraph) {\n let updateRow;\n for (let col = 0; col < scene.table.colCount; col++) {\n let row;\n const beforeCell = scene.highPerformanceGetCell(col, beforeRow);\n if (beforeCell.mergeStartRow && beforeCell.mergeEndRow && beforeCell.mergeEndRow > beforeRow) {\n addNeedUpdateTag(\n {\n start: {\n row: beforeCell.mergeStartRow,\n col: scene.table.isAutoRowHeight() ? 0 : beforeCell.mergeStartCol\n },\n end: {\n row: beforeCell.mergeEndRow,\n col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : beforeCell.mergeEndCol\n }\n },\n scene\n );\n row = beforeCell.mergeStartRow;\n }\n\n const afterCell = scene.highPerformanceGetCell(col, afterRow);\n if (afterCell.mergeStartRow && afterCell.mergeEndRow && afterCell.mergeStartRow < afterRow) {\n addNeedUpdateTag(\n {\n start: {\n row: afterCell.mergeStartRow,\n col: scene.table.isAutoRowHeight() ? 0 : afterCell.mergeStartCol\n },\n end: {\n row: afterCell.mergeEndRow,\n col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : afterCell.mergeEndCol\n }\n },\n scene\n );\n row = afterCell.mergeStartRow;\n }\n if (isValid(row)) {\n updateRow = isValid(updateRow) ? Math.min(updateRow, row) : row;\n }\n }\n return updateRow;\n}\n\nfunction addNeedUpdateTag(range: CellRange, scene: Scenegraph) {\n const { start, end } = range;\n for (let col = start.col; col <= end.col; col++) {\n for (let row = start.row; row <= end.row; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n if (!cellGroup) {\n continue;\n }\n cellGroup.needUpdate = true;\n }\n }\n}\n\nfunction setRowSeriesNumberCellNeedUpdate(startUpdateRow: number, scene: Scenegraph) {\n if (scene.table.isHasSeriesNumber()) {\n for (let row = startUpdateRow; row <= scene.table.rowCount - 1; row++) {\n updateCell(0, row, scene.table, false);\n }\n }\n}\n","import type { IGraphic, ReactAttributePlugin } from './../../vrender';\nimport { getTargetCell } from '../../event/util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Scenegraph } from '../scenegraph';\n\nexport function createReactContainer(table: BaseTableAPI) {\n const { internalProps } = table;\n internalProps.bodyDomContainer = document.createElement('div');\n internalProps.bodyDomContainer.id = 'vtable-body-dom-container';\n internalProps.bodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.bodyDomContainer);\n\n internalProps.headerDomContainer = document.createElement('div');\n internalProps.headerDomContainer.id = 'vtable-header-dom-container';\n internalProps.headerDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.headerDomContainer);\n\n internalProps.frozenBodyDomContainer = document.createElement('div');\n internalProps.frozenBodyDomContainer.id = 'vtable-frozen-body-dom-container';\n internalProps.frozenBodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenBodyDomContainer);\n\n internalProps.frozenHeaderDomContainer = document.createElement('div');\n internalProps.frozenHeaderDomContainer.id = 'vtable-frozen-header-dom-container';\n internalProps.frozenHeaderDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenHeaderDomContainer);\n\n internalProps.rightFrozenBodyDomContainer = document.createElement('div');\n internalProps.rightFrozenBodyDomContainer.id = 'vtable-right-frozen-body-dom-container';\n internalProps.rightFrozenBodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenBodyDomContainer);\n\n internalProps.rightFrozenHeaderDomContainer = document.createElement('div');\n internalProps.rightFrozenHeaderDomContainer.id = 'vtable-right-frozen-header-dom-container';\n internalProps.rightFrozenHeaderDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenHeaderDomContainer);\n\n internalProps.frozenBottomDomContainer = document.createElement('div');\n internalProps.frozenBottomDomContainer.id = 'vtable-frozen-bottom-dom-container';\n internalProps.frozenBottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenBottomDomContainer);\n\n internalProps.bottomDomContainer = document.createElement('div');\n internalProps.bottomDomContainer.id = 'vtable-bottom-dom-container';\n internalProps.bottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.bottomDomContainer);\n\n internalProps.rightFrozenBottomDomContainer = document.createElement('div');\n internalProps.rightFrozenBottomDomContainer.id = 'vtable-right-frozen-bottom-dom-container';\n internalProps.rightFrozenBottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenBottomDomContainer);\n}\n\nexport function updateReactContainer(table: BaseTableAPI) {\n const {\n headerDomContainer,\n bodyDomContainer,\n frozenBodyDomContainer,\n frozenHeaderDomContainer,\n rightFrozenBodyDomContainer,\n rightFrozenHeaderDomContainer,\n bottomDomContainer,\n frozenBottomDomContainer,\n rightFrozenBottomDomContainer\n } = table.internalProps;\n if (\n !headerDomContainer &&\n !bodyDomContainer &&\n !frozenBodyDomContainer &&\n !frozenHeaderDomContainer &&\n !rightFrozenBodyDomContainer &&\n !rightFrozenHeaderDomContainer &&\n !bottomDomContainer &&\n !frozenBottomDomContainer &&\n !rightFrozenBottomDomContainer\n ) {\n return;\n }\n const allColsWidth = table.getAllColsWidth();\n const tableNoFrameWidth = Math.min(allColsWidth, table.tableNoFrameWidth);\n const frozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const totalFrozenColsWidth = frozenColsWidth + rightFrozenColsWidth;\n const bodyWidth = Math.min(allColsWidth - totalFrozenColsWidth, tableNoFrameWidth - totalFrozenColsWidth);\n\n const allRowsHeight = table.getAllRowsHeight();\n const tableNoFrameHeight = Math.min(allRowsHeight, table.tableNoFrameHeight);\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = table.getBottomFrozenRowsHeight();\n const totalFrozenRowsHeight = frozenRowsHeight + bottomFrozenRowsHeight;\n const bodyHeight = Math.min(allRowsHeight - totalFrozenRowsHeight, tableNoFrameHeight - totalFrozenRowsHeight);\n\n if (table.frozenColCount > 0) {\n headerDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n bodyDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n bottomDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n } else if (table.frozenColCount === 0) {\n headerDomContainer.style.left = `${table.tableX}px`;\n bodyDomContainer.style.left = `${table.tableX}px`;\n bottomDomContainer.style.left = `${table.tableX}px`;\n }\n frozenBodyDomContainer.style.left = `${table.tableX}px`;\n frozenHeaderDomContainer.style.left = `${table.tableX}px`;\n\n // headerDomContainer.style.width = `${(headerDomContainer.parentElement?.offsetWidth ?? 1) - 1}px`;\n headerDomContainer.style.width = `${bodyWidth}px`;\n headerDomContainer.style.height = `${frozenRowsHeight}px`;\n bodyDomContainer.style.top = `${table.tableY}px`;\n\n // bodyDomContainer.style.width = `${(bodyDomContainer.parentElement?.offsetWidth ?? 1) - 1}px`;\n bodyDomContainer.style.width = `${bodyWidth}px`;\n bodyDomContainer.style.height = `${bodyHeight}px`;\n bodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n\n frozenBodyDomContainer.style.width = `${frozenColsWidth}px`;\n frozenBodyDomContainer.style.height = `${bodyHeight}px`;\n frozenBodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n\n frozenHeaderDomContainer.style.width = `${frozenColsWidth}px`;\n frozenHeaderDomContainer.style.height = `${frozenRowsHeight}px`;\n frozenHeaderDomContainer.style.top = `${table.tableY}px`;\n\n rightFrozenBodyDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenBodyDomContainer.style.height = `${bodyHeight}px`;\n rightFrozenBodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n rightFrozenBodyDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n\n rightFrozenHeaderDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenHeaderDomContainer.style.height = `${frozenRowsHeight}px`;\n rightFrozenHeaderDomContainer.style.top = `${table.tableY}px`;\n rightFrozenHeaderDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n\n bottomDomContainer.style.width = `${bodyWidth}px`;\n bottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n bottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n\n frozenBottomDomContainer.style.width = `${frozenColsWidth}px`;\n frozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n frozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n\n rightFrozenBottomDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n rightFrozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n rightFrozenBottomDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n}\n\nexport function updateReactComponentContainer(scene: Scenegraph) {\n if (!scene.table.reactCustomLayout) {\n return;\n }\n const { table, stage } = scene;\n const plugin = stage.pluginService.findPluginsByName('ReactAttributePlugin')[0] as ReactAttributePlugin;\n const { htmlMap } = plugin;\n\n for (const key in htmlMap) {\n const item = htmlMap[key];\n const { graphic, wrapContainer } = item as typeof item & { graphic: IGraphic };\n let targetContainer: HTMLElement;\n if (scene.frozenColCount > table.frozenColCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n const { col, row } = getTargetCell(graphic);\n if (\n row >= table.rowCount - table.bottomFrozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenBottomDomContainer\n ) {\n targetContainer = table.bottomDomContainer;\n } else if (\n row >= table.frozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenBodyDomContainer\n ) {\n targetContainer = table.bodyDomContainer;\n } else if (\n row < table.frozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenHeaderDomContainer\n ) {\n targetContainer = table.headerDomContainer;\n }\n } else if (scene.frozenColCount < table.frozenColCount) {\n // move columnGroup from bodyGroup into rowHeaderGroup(from colHeaderGroup into cornerHeaderGroup)\n const { col, row } = getTargetCell(graphic);\n if (\n row >= table.rowCount - table.bottomFrozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.bottomDomContainer\n ) {\n targetContainer = table.frozenBottomDomContainer;\n } else if (\n row >= table.frozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.bodyDomContainer\n ) {\n targetContainer = table.frozenBodyDomContainer;\n } else if (\n row < table.frozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.headerDomContainer\n ) {\n targetContainer = table.frozenHeaderDomContainer;\n }\n }\n\n if (targetContainer) {\n targetContainer.appendChild(wrapContainer);\n item.nativeContainer = targetContainer;\n item.container = targetContainer;\n graphic.attribute.react.container = targetContainer;\n plugin.updateStyleOfWrapContainer(graphic, stage, wrapContainer, targetContainer, graphic.attribute.react);\n }\n }\n}\n","import { getStyleTheme } from '../../core/tableHelper';\nimport { getTargetCell } from '../../event/util';\nimport { Group } from '../graphic/group';\nimport { createColGroup } from '../group-creater/column';\nimport type { Scenegraph } from '../scenegraph';\nimport { getProp } from '../utils/get-prop';\nimport { table } from 'console';\nimport { updateReactComponentContainer } from './frozen-react';\n\nexport function dealFrozen(scene: Scenegraph) {\n if (scene.table.frozenColCount > scene.table.rowHeaderLevelCount) {\n // 将对应列移入rowHeaderGroup\n scene.rowHeaderGroup.setAttribute('height', scene.bodyGroup.attribute.height);\n scene.rowHeaderGroup.setAttribute('y', scene.bodyGroup.attribute.y);\n scene.cornerHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.frozenColCount - scene.table.rowHeaderLevelCount; i++) {\n moveColumnFromBodyToRowHeader(scene);\n moveColumnFromColHeaderToCornerHeader(scene);\n moveColumnFromBottomToLeftBottomCorner(scene);\n }\n } else if (scene.table.frozenColCount < scene.table.rowHeaderLevelCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n scene.bodyGroup.setAttribute('height', scene.rowHeaderGroup.attribute.height);\n scene.bodyGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y);\n scene.colHeaderGroup.setAttribute('height', scene.cornerHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.rowHeaderLevelCount - scene.table.frozenColCount; i++) {\n moveColumnFromRowHeaderToBody(scene);\n moveColumnFromCornerHeaderToColHeader(scene);\n moveColumnFromLeftBottomCornerToBottom(scene);\n }\n }\n scene.bodyGroup.setAttribute('x', scene.rowHeaderGroup.attribute.width);\n scene.colHeaderGroup.setAttribute('x', scene.cornerHeaderGroup.attribute.width);\n\n scene.updateContainer();\n scene.updateBorderSizeAndPosition();\n\n if (!scene.isPivot && !(scene.table as any).transpose) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n }\n scene.hasFrozen = true;\n\n // scene.frozenColCount = scene.rowHeaderGroup.childrenCount;\n scene.frozenColCount = scene.table.frozenColCount;\n scene.frozenRowCount = scene.colHeaderGroup.firstChild?.childrenCount ?? 0;\n}\n\nexport function resetFrozen(scene: Scenegraph) {\n if (scene.frozenColCount > scene.table.frozenColCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n scene.bodyGroup.setAttribute('height', scene.rowHeaderGroup.attribute.height);\n scene.bodyGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y);\n scene.colHeaderGroup.setAttribute('height', scene.cornerHeaderGroup.attribute.height);\n for (let i = 0; i < scene.frozenColCount - scene.table.frozenColCount; i++) {\n moveColumnFromRowHeaderToBody(scene);\n moveColumnFromCornerHeaderToColHeader(scene);\n moveColumnFromLeftBottomCornerToBottom(scene);\n }\n } else if (scene.frozenColCount < scene.table.frozenColCount) {\n // move columnGroup from bodyGroup into rowHeaderGroup(from colHeaderGroup into cornerHeaderGroup)\n scene.rowHeaderGroup.setAttribute('height', scene.bodyGroup.attribute.height);\n scene.rowHeaderGroup.setAttribute('y', scene.bodyGroup.attribute.y);\n scene.cornerHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.frozenColCount - scene.frozenColCount; i++) {\n moveColumnFromBodyToRowHeader(scene);\n moveColumnFromColHeaderToCornerHeader(scene);\n moveColumnFromBottomToLeftBottomCorner(scene);\n }\n }\n\n updateReactComponentContainer(scene);\n scene.recreateAllSelectRangeComponents();\n // scene.frozenColCount = scene.rowHeaderGroup.childrenCount;\n scene.frozenColCount = scene.table.frozenColCount;\n scene.frozenRowCount = scene.colHeaderGroup.firstChild?.childrenCount ?? 0;\n // scene.proxy.colStart = scene.table.frozenColCount;\n scene.proxy.colStart = (scene.bodyGroup.firstChild as any)?.col ?? scene.table.frozenColCount;\n\n scene.bodyGroup.setAttribute('x', scene.rowHeaderGroup.attribute.width);\n scene.colHeaderGroup.setAttribute('x', scene.cornerHeaderGroup.attribute.width);\n // scene.updateContainerAttrWidthAndX();\n scene.updateContainer();\n scene.updateBorderSizeAndPosition();\n\n if (!scene.isPivot && !(scene.table as any).transpose) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n } else if (scene.table.options.rightFrozenColCount) {\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n }\n scene.hasFrozen = true;\n}\n\nfunction moveColumnFromBodyToRowHeader(scene: Scenegraph) {\n // deal with bodyGroup\n const column = scene.bodyGroup.firstChild instanceof Group ? scene.bodyGroup.firstChild : null;\n if (column) {\n scene.rowHeaderGroup.appendChild(column);\n // update container width\n scene.rowHeaderGroup.setAttribute('width', scene.rowHeaderGroup.attribute.width + column.attribute.width);\n scene.bodyGroup.setAttribute('width', scene.bodyGroup.attribute.width - column.attribute.width);\n }\n}\n\nfunction moveColumnFromColHeaderToCornerHeader(scene: Scenegraph) {\n // deal width colHeaderGroup\n const headerColumn = scene.colHeaderGroup.firstChild instanceof Group ? scene.colHeaderGroup.firstChild : null;\n if (headerColumn) {\n scene.cornerHeaderGroup.appendChild(headerColumn);\n scene.cornerHeaderGroup.setAttribute(\n 'width',\n scene.cornerHeaderGroup.attribute.width + headerColumn.attribute.width\n );\n scene.colHeaderGroup.setAttribute('width', scene.colHeaderGroup.attribute.width - headerColumn.attribute.width);\n }\n}\n\nfunction moveColumnFromRowHeaderToBody(scene: Scenegraph) {\n const column =\n scene.rowHeaderGroup.lastChild instanceof Group\n ? scene.rowHeaderGroup.lastChild\n : (scene.rowHeaderGroup.lastChild?._prev as Group);\n if (column) {\n insertBefore(scene.bodyGroup, column, scene.bodyGroup.firstChild as Group);\n // 更新容器宽度\n scene.bodyGroup.setAttribute('width', scene.bodyGroup.attribute.width + column.attribute.width);\n scene.rowHeaderGroup.setAttribute('width', scene.rowHeaderGroup.attribute.width - column.attribute.width);\n }\n}\n\nfunction moveColumnFromCornerHeaderToColHeader(scene: Scenegraph) {\n // 处理列表头\n const headerColumn =\n scene.cornerHeaderGroup.lastChild instanceof Group\n ? scene.cornerHeaderGroup.lastChild\n : (scene.cornerHeaderGroup.lastChild?._prev as Group);\n if (headerColumn) {\n insertBefore(scene.colHeaderGroup, headerColumn, scene.colHeaderGroup.firstChild as Group);\n scene.colHeaderGroup.setAttribute('width', scene.colHeaderGroup.attribute.width + headerColumn.attribute.width);\n scene.cornerHeaderGroup.setAttribute(\n 'width',\n scene.cornerHeaderGroup.attribute.width - headerColumn.attribute.width\n );\n }\n}\n\nfunction moveColumnFromBottomToLeftBottomCorner(scene: Scenegraph) {\n // deal with bottomFrozenGroup\n const column = scene.bottomFrozenGroup.firstChild instanceof Group ? scene.bottomFrozenGroup.firstChild : null;\n if (column) {\n scene.leftBottomCornerGroup.appendChild(column);\n // update container width\n scene.leftBottomCornerGroup.setAttribute(\n 'width',\n scene.leftBottomCornerGroup.attribute.width + column.attribute.width\n );\n scene.bottomFrozenGroup.setAttribute('width', scene.bottomFrozenGroup.attribute.width - column.attribute.width);\n\n if (scene.table.isPivotChart()) {\n column.forEachChildren((child: Group) => {\n child.setAttributes({\n stroke: false,\n fill: false\n });\n });\n }\n }\n}\n\nfunction moveColumnFromLeftBottomCornerToBottom(scene: Scenegraph) {\n const column =\n scene.leftBottomCornerGroup.lastChild instanceof Group\n ? scene.leftBottomCornerGroup.lastChild\n : (scene.leftBottomCornerGroup.lastChild?._prev as Group);\n if (column) {\n insertBefore(scene.bottomFrozenGroup, column, scene.bottomFrozenGroup.firstChild as Group);\n // 更新容器宽度\n scene.bottomFrozenGroup.setAttribute('width', scene.bottomFrozenGroup.attribute.width + column.attribute.width);\n scene.leftBottomCornerGroup.setAttribute(\n 'width',\n scene.leftBottomCornerGroup.attribute.width - column.attribute.width\n );\n\n if (scene.table.isPivotChart()) {\n column.forEachChildren((child: Group) => {\n const cellStyle = scene.table._getCellStyle(child.col, child.row);\n const range = scene.table.getCellRange(child.col, child.row);\n const cellTheme = getStyleTheme(\n cellStyle,\n scene.table,\n range ? range.start.col : child.col,\n range ? range.start.row : child.row,\n getProp\n ).theme;\n\n child.setAttributes({\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined\n });\n });\n }\n }\n}\n\nexport function dealRightFrozen(distRightFrozenCol: number, scene: Scenegraph) {\n const {\n table,\n proxy,\n rightTopCornerGroup,\n rightFrozenGroup,\n rightBottomCornerGroup,\n bottomFrozenGroup,\n bodyGroup,\n colHeaderGroup\n } = scene;\n // const distRightFrozenCol = scene.table.rightFrozenColCount;\n const currentRightFrozenCol = scene.table.rightFrozenColCount;\n if (distRightFrozenCol > currentRightFrozenCol) {\n for (let col = table.colCount - currentRightFrozenCol - 1; col >= table.colCount - distRightFrozenCol; col--) {\n const colGroup = scene.getColGroup(col);\n insertBefore(rightFrozenGroup, colGroup, rightFrozenGroup.firstChild as Group);\n const headerColGroup = scene.getColGroup(col, true);\n insertBefore(rightTopCornerGroup, headerColGroup, rightTopCornerGroup.firstChild as Group);\n const bottomColGroup = scene.getColGroupInBottom(col);\n insertBefore(rightBottomCornerGroup, bottomColGroup, rightBottomCornerGroup.firstChild as Group);\n }\n // reset cell y\n let x = 0;\n rightFrozenGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightTopCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightBottomCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n } else if (distRightFrozenCol < currentRightFrozenCol) {\n for (let col = table.colCount - currentRightFrozenCol; col < table.colCount - distRightFrozenCol; col++) {\n const colGroup = scene.getColGroup(col);\n colGroup.setAttribute(\n 'x',\n (bodyGroup.lastChild as Group).attribute.x + table.getColWidth((bodyGroup.lastChild as Group).col)\n );\n bodyGroup.appendChild(colGroup);\n const headerColGroup = scene.getColGroupInRightTopCorner(col);\n headerColGroup.setAttribute(\n 'x',\n (colHeaderGroup.lastChild as Group).attribute.x + table.getColWidth((colHeaderGroup.lastChild as Group).col)\n );\n colHeaderGroup.appendChild(headerColGroup);\n const bottomColGroup = scene.getColGroupInRightBottomCorner(col);\n bottomColGroup.setAttribute(\n 'x',\n (bottomFrozenGroup.lastChild as Group).attribute.x +\n table.getColWidth((bottomFrozenGroup.lastChild as Group).col)\n );\n bottomFrozenGroup.appendChild(bottomColGroup);\n }\n // reset cell y\n let x = 0;\n rightFrozenGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightTopCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightBottomCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n }\n\n // reset right width\n rightFrozenGroup.setAttribute('width', table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1));\n rightTopCornerGroup.setAttribute(\n 'width',\n table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1)\n );\n rightBottomCornerGroup.setAttribute(\n 'width',\n table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1)\n );\n\n table.internalProps.rightFrozenColCount = distRightFrozenCol;\n scene.updateContainer();\n scene.component.updateScrollBar();\n scene.updateNextFrame();\n}\n\nexport function dealBottomFrozen(distBottomFrozenRow: number, scene: Scenegraph) {\n const { table, proxy, bottomFrozenGroup, leftBottomCornerGroup, rightBottomCornerGroup } = scene;\n if (!bottomFrozenGroup.childrenCount) {\n // init bottom\n if (!proxy.table.isPivotChart()) {\n // create left bottom frozen\n createColGroup(\n leftBottomCornerGroup,\n 0,\n 0,\n 0, // colStart\n table.frozenColCount - 1, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n createColGroup(\n rightBottomCornerGroup,\n 0,\n 0,\n table.colCount - table.rightFrozenColCount, // colStart\n table.colCount - 1, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n // create bottomFrozenGroup\n createColGroup(\n bottomFrozenGroup,\n 0,\n 0,\n proxy.colStart, // colStart\n proxy.colEnd, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n const currentBottomFrozenRow = scene.table.bottomFrozenRowCount;\n if (distBottomFrozenRow > currentBottomFrozenRow) {\n // row header -> left bottom\n for (let col = 0; col < table.frozenColCount; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n // move cell\n for (let row = table.rowCount - currentBottomFrozenRow - 1; row >= table.rowCount - distBottomFrozenRow; row--) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n // body -> bottom\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n // move cell\n for (let row = table.rowCount - currentBottomFrozenRow - 1; row >= table.rowCount - distBottomFrozenRow; row--) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n if (table.rightFrozenColCount > 0) {\n // right -> right bottom\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n // move cell\n for (\n let row = table.rowCount - currentBottomFrozenRow - 1;\n row >= table.rowCount - distBottomFrozenRow;\n row--\n ) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n }\n } else if (distBottomFrozenRow < currentBottomFrozenRow) {\n // left bottom -> row header\n for (let col = 0; col < table.rowHeaderLevelCount; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n // bottom -> body\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n if (table.rightFrozenColCount > 0) {\n // right bottom -> right\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n }\n }\n // reset bottom height\n bottomFrozenGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n leftBottomCornerGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n rightBottomCornerGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n\n table.internalProps.bottomFrozenRowCount = distBottomFrozenRow;\n scene.updateContainer();\n scene.component.updateScrollBar();\n scene.updateNextFrame();\n}\n\nfunction insertBefore(container: Group, newNode: Group, targetGroup: Group) {\n if (!newNode || !container) {\n return;\n }\n if (targetGroup) {\n container.insertBefore(newNode, targetGroup);\n } else {\n container.appendChild(newNode);\n }\n}\n","import { isEqual } from '@visactor/vutils';\nimport type { PivotChart } from '../../PivotChart';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Chart } from '../graphic/chart';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { getQuadProps } from '../utils/padding';\nimport { getProp } from '../utils/get-prop';\n\n/** 供调整列宽后更新chart使用 */\nexport function updateChartSizeForResizeColWidth(scenegraph: Scenegraph, col: number) {\n const { table } = scenegraph;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const columnResizeType = col === -1 ? 'all' : table.internalProps.columnResizeType;\n if (columnResizeType === 'column') {\n const columnGroup = scenegraph.getColGroup(col);\n const columnHeaderGroup = scenegraph.getColGroup(col, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(col, true);\n columnGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n if (table.widthMode === 'adaptive' && col < table.colCount - 1) {\n const columnGroup = scenegraph.getColGroup(col + 1);\n const columnHeaderGroup = scenegraph.getColGroup(col + 1, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(col + 1, true);\n columnGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n }\n } else {\n let startCol = table.rowHeaderLevelCount;\n let endCol = table.colCount - 1;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (columnResizeType === 'indicator') {\n if (layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(col, table.columnHeaderLevelCount);\n } else {\n const headerPaths = layout.getCellHeaderPaths(col, table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n resizeDimensionKey = headerPath.dimensionKey;\n resizeDimensionValue = headerPath.value;\n }\n } else if (columnResizeType === 'indicatorGroup') {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(table.stateManager.columnResize.col, table.columnHeaderLevelCount);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n startCol = node.startInTotal + table.frozenColCount;\n endCol = node.startInTotal + table.frozenColCount + node.size - 1;\n }\n\n for (let c = startCol; c <= endCol; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n const columnHeaderGroup = scenegraph.getColGroup(c, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(c, true);\n if (columnGroup) {\n if (columnResizeType === 'indicator') {\n const indicatorKey = layout.getIndicatorKey(c, table.columnHeaderLevelCount);\n if (layout.indicatorsAsCol && indicatorKey !== resizeIndicatorKey) {\n continue;\n } else if (!layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(c, table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths?.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n if (\n !headerPath ||\n resizeDimensionKey !== headerPath.dimensionKey ||\n resizeDimensionValue !== headerPath.value\n ) {\n continue;\n }\n }\n }\n columnGroup.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n }\n }\n }\n\n // // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n // for (let c = col; c <= scenegraph.proxy.colEnd; c++) {\n // const columnGroup = scenegraph.getColGroup(c);\n // // const chartInstance = (columnGroup.attribute as any)?.chartInstance;\n // // if (chartInstance) {\n // columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // node.setAttribute('width', Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1]));\n // node.setAttribute(\n // 'height',\n // Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2])\n // );\n // }\n // });\n // });\n // // }\n // }\n // // 右侧冻结的单元格也需要调整\n // if (!scenegraph.table.isPivotChart() && scenegraph.table.rightFrozenColCount >= 1) {\n // for (\n // let c = scenegraph.table.colCount - scenegraph.table.rightFrozenColCount;\n // c <= scenegraph.table.colCount - 1;\n // c++\n // ) {\n // const columnGroup = scenegraph.getColGroup(c);\n // columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // node.setAttribute(\n // 'width',\n // Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1])\n // );\n // node.setAttribute(\n // 'height',\n // Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2])\n // );\n // }\n // });\n // });\n // }\n // }\n}\n/** 供调整列宽后更新chart使用 */\nexport function updateChartSizeForResizeRowHeight(scenegraph: Scenegraph, row: number) {\n const { table } = scenegraph;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const state = table.stateManager;\n const rowResizeType = row === -1 ? 'all' : table.internalProps.rowResizeType;\n\n let startRow = table.columnHeaderLevelCount;\n let endRow = table.rowCount - 1;\n let resizeIndicatorKey: string;\n let resizeDimensionKey: string;\n let resizeDimensionValue: string;\n if (rowResizeType === 'indicator') {\n if (!layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(table.rowHeaderLevelCount, row);\n } else {\n const headerPaths = layout.getCellHeaderPaths(table.rowHeaderLevelCount - 1, row);\n const headerPath = headerPaths.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n resizeDimensionKey = headerPath?.dimensionKey;\n resizeDimensionValue = headerPath?.value;\n }\n } else if (rowResizeType === 'indicatorGroup') {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(table.rowHeaderLevelCount, row);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n startRow = node.startInTotal + table.frozenRowCount;\n endRow = node.startInTotal + table.frozenRowCount + node.size - 1;\n }\n\n const colsRange = [{ startCol: scenegraph.proxy.colStart, endCol: scenegraph.proxy.colEnd }];\n if (table.frozenColCount) {\n colsRange.push({ startCol: 0, endCol: table.frozenColCount - 1 });\n }\n if (table.rightFrozenColCount) {\n colsRange.push({ startCol: table.colCount - table.rightFrozenColCount, endCol: table.colCount - 1 });\n }\n colsRange.forEach(({ startCol, endCol }) => {\n for (let col = startCol; col <= endCol; col++) {\n if (rowResizeType === 'row') {\n const cellNode = scenegraph.highPerformanceGetCell(col, row);\n if (cellNode.role !== 'cell') {\n continue;\n }\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n\n if (table.heightMode === 'adaptive' && row < table.rowCount - 1) {\n const cellNode = scenegraph.highPerformanceGetCell(col, row + 1);\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n }\n } else {\n for (let r = startRow; r <= endRow; r++) {\n if (rowResizeType === 'indicator') {\n const indicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, r);\n if (!layout.indicatorsAsCol && indicatorKey !== resizeIndicatorKey) {\n continue;\n } else if (layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, r);\n const headerPath = headerPaths?.rowHeaderPaths[headerPaths.rowHeaderPaths.length - 1];\n if (\n !headerPath ||\n resizeDimensionKey !== headerPath.dimensionKey ||\n resizeDimensionValue !== headerPath.value\n ) {\n continue;\n }\n }\n }\n const cellNode = scenegraph.highPerformanceGetCell(col, r);\n if (cellNode.role !== 'cell') {\n continue;\n }\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n }\n }\n }\n });\n\n // const updateCellNode = (c: number, r: number) => {\n // const cellNode = scenegraph.getCell(c, r);\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // console.log('bf', c, r, node.attribute.width, node.attribute.height);\n\n // node.setAttribute('width', Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1]));\n // node.setAttribute('height', Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2]));\n // console.log('af', c, r, node.attribute.width, node.attribute.height);\n // }\n // });\n // };\n // // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n // for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n\n // // 右侧冻结的单元格也需要调整\n // if (scenegraph.table.rightFrozenColCount >= 1) {\n // for (\n // let c = scenegraph.table.colCount - scenegraph.table.rightFrozenColCount;\n // c <= scenegraph.table.colCount - 1;\n // c++\n // ) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n // }\n // // 左侧冻结的单元格\n // if (scenegraph.table.frozenColCount >= 1) {\n // for (let c = 0; c <= scenegraph.table.frozenColCount - 1; c++) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n // }\n}\n/** 清理所有chart节点的 图表缓存图片 */\nexport function clearChartCacheImage(scenegraph: Scenegraph) {\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n cellNode.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.cacheCanvas = null;\n node.addUpdateBoundTag();\n }\n });\n });\n }\n}\n\nexport function clearCellChartCacheImage(col: number, row: number, scenegraph: Scenegraph) {\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n const cellGroup = scenegraph.getCell(col, row);\n cellGroup.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.cacheCanvas = null;\n node.addUpdateBoundTag();\n }\n });\n}\n\n/** 更新所有的图表chart节点上缓存attribute中的data数据 */\nexport function updateChartData(scenegraph: Scenegraph) {\n const table = scenegraph.table;\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n const col = cellNode.col;\n const row = cellNode.row;\n cellNode.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.updateData(table.getCellValue(col, row));\n const chartSpec = node.attribute.spec;\n const chartType = chartSpec.type;\n if (chartType !== 'gauge' && chartType !== 'rose' && chartType !== 'radar') {\n const newAxes = table.internalProps.layoutMap.getChartAxes(col, row);\n node.setAttribute('axes', newAxes);\n chartSpec.axes = newAxes;\n }\n node.setAttribute('spec', chartSpec);\n // node.addUpdateBoundTag();\n }\n });\n });\n }\n\n // update left axes\n updateTableAxes(scenegraph.rowHeaderGroup, scenegraph.table);\n // update top axes\n updateTableAxes(scenegraph.colHeaderGroup, scenegraph.table);\n // update right axes\n updateTableAxes(scenegraph.rightFrozenGroup, scenegraph.table);\n // update bottom axes\n updateTableAxes(scenegraph.bottomFrozenGroup, scenegraph.table);\n}\n/** 组织图表数据状态_selectedDataItemsInChart 更新选中的图表图元状态 */\nexport function updateChartState(scenegraph: Scenegraph, datum: any) {\n const table = scenegraph.table;\n if (table.isPivotChart()) {\n const preSelectItemsCount = (table as PivotChart)._selectedDataItemsInChart.length;\n if ((datum === null || datum?.length === 0 || Object.keys(datum).length === 0) && preSelectItemsCount === 0) {\n //避免无效的更新\n return;\n }\n // (table as PivotChart)._selectedDataItemsInChart = [];\n const newSelectedDataItemsInChart = [];\n if (Array.isArray(datum)) {\n datum.forEach((dataItem: any) => {\n if (dataItem && dataItem.key !== 0 && Object.keys(dataItem).length > 0) {\n //本以为没有点击到图元上 datum为空 发现是{key:0}或者{}\n const selectedState = {} as any;\n for (const itemKey in dataItem) {\n if (!itemKey.startsWith('VGRAMMAR_') && !itemKey.startsWith('__VCHART')) {\n selectedState[itemKey] = dataItem[itemKey];\n }\n }\n newSelectedDataItemsInChart.push(selectedState);\n }\n });\n } else if (datum && datum.key !== 0 && Object.keys(datum).length > 0) {\n //本以为没有点击到图元上 datum为空 发现是{key:0}或者{}\n const selectedState = {} as any;\n for (const itemKey in datum) {\n if (!itemKey.startsWith('VGRAMMAR_') && !itemKey.startsWith('__VCHART')) {\n selectedState[itemKey] = datum[itemKey];\n }\n }\n newSelectedDataItemsInChart.push(selectedState);\n }\n //避免无效的更新\n if (!isEqual((table as PivotChart)._selectedDataItemsInChart, newSelectedDataItemsInChart)) {\n (table as PivotChart)._selectedDataItemsInChart = newSelectedDataItemsInChart;\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).updateDataStateToChartInstance();\n // 清楚chart缓存图片\n clearChartCacheImage(scenegraph);\n table.scenegraph.updateNextFrame();\n }\n }\n}\n\n/**\n * @description: update table axis component\n * @param {Group} containerGroup\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction updateTableAxes(containerGroup: Group, table: BaseTableAPI) {\n containerGroup.forEachChildren((column: Group) => {\n if (column.role === 'column') {\n column.forEachChildren((cell: Group) => {\n if (cell.role === 'cell') {\n let isAxisComponent = false;\n cell.forEachChildren((mark: Group) => {\n if (mark.name === 'axis') {\n isAxisComponent = true;\n return true;\n }\n return false;\n });\n if (isAxisComponent) {\n const axisConfig = table.internalProps.layoutMap.getAxisConfigInPivotChart(cell.col, cell.row);\n const cellStyle = table._getCellStyle(cell.col, cell.row);\n const padding = getQuadProps(getProp('padding', cellStyle, cell.col, cell.row, table));\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cell.attribute.width,\n cell.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n table\n );\n cell.clear();\n cell.appendChild(axis.component);\n axis.overlap();\n }\n }\n });\n }\n });\n}\n\nfunction updateChartGraphicSize(cellNode: Group, width: number, height: number) {\n cellNode.forEachChildren((graphic: Chart) => {\n if ((graphic as any).type === 'chart') {\n graphic.cacheCanvas = null;\n graphic.setAttributes({\n width: Math.ceil(width - graphic.attribute.cellPadding[3] - graphic.attribute.cellPadding[1]),\n height: Math.ceil(height - graphic.attribute.cellPadding[0] - graphic.attribute.cellPadding[2])\n });\n }\n });\n}\n","import type { ListTableConstructorOptions } from '../..';\nimport { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\n\nexport function initSceneGraph(scene: Scenegraph) {\n const width = scene.table.tableNoFrameWidth;\n const height = scene.table.tableNoFrameHeight;\n\n scene.tableGroup = new Group({ x: 0, y: 0, width, height, clip: true, pickable: false });\n scene.tableGroup.role = 'table';\n\n const colHeaderGroup = createContainerGroup(\n 0,\n 0,\n !(scene.table.options as ListTableConstructorOptions).enableTreeStickCell\n );\n colHeaderGroup.role = 'col-header';\n scene.colHeaderGroup = colHeaderGroup;\n\n const cornerHeaderGroup = createContainerGroup(\n 0,\n 0,\n !(scene.table.options as ListTableConstructorOptions).enableTreeStickCell\n );\n cornerHeaderGroup.role = 'corner-header';\n scene.cornerHeaderGroup = cornerHeaderGroup;\n\n const rowHeaderGroup = createContainerGroup(0, 0, true);\n rowHeaderGroup.role = 'row-header';\n scene.rowHeaderGroup = rowHeaderGroup;\n\n const bodyGroup = createContainerGroup(width, 0, true);\n bodyGroup.role = 'body';\n scene.bodyGroup = bodyGroup;\n\n const rightFrozenGroup = createContainerGroup(0, 0, true);\n rightFrozenGroup.role = 'right-frozen';\n scene.rightFrozenGroup = rightFrozenGroup;\n\n const bottomFrozenGroup = createContainerGroup(0, 0, true);\n bottomFrozenGroup.role = 'bottom-frozen';\n scene.bottomFrozenGroup = bottomFrozenGroup;\n\n const componentGroup = createContainerGroup(0, 0);\n componentGroup.role = 'component';\n scene.componentGroup = componentGroup;\n\n const rightTopCornerGroup = createContainerGroup(0, 0, true);\n rightTopCornerGroup.role = 'corner-right-top-header';\n scene.rightTopCornerGroup = rightTopCornerGroup;\n\n const rightBottomCornerGroup = createContainerGroup(0, 0, true);\n rightBottomCornerGroup.role = 'corner-right-bottom-header';\n scene.rightBottomCornerGroup = rightBottomCornerGroup;\n\n const leftBottomCornerGroup = createContainerGroup(0, 0, true);\n leftBottomCornerGroup.role = 'corner-left-bottom-header';\n scene.leftBottomCornerGroup = leftBottomCornerGroup;\n\n scene.tableGroup.addChild(bodyGroup);\n //注意这块添加的顺序 会影响select框选效果 有可能引起框选框覆盖其他部分group的问题 具体问题出在update-select-border文件中的updateComponent方法\n scene.tableGroup.addChild(rowHeaderGroup);\n scene.tableGroup.addChild(bottomFrozenGroup);\n\n scene.tableGroup.addChild(colHeaderGroup);\n scene.tableGroup.addChild(rightFrozenGroup);\n\n scene.tableGroup.addChild(rightBottomCornerGroup);\n scene.tableGroup.addChild(rightTopCornerGroup);\n scene.tableGroup.addChild(leftBottomCornerGroup);\n scene.tableGroup.addChild(cornerHeaderGroup);\n scene.tableGroup.addChild(componentGroup);\n}\n\nfunction createContainerGroup(width: number, height: number, clip?: boolean) {\n return new Group({\n x: 0,\n y: 0,\n width,\n height,\n clip: clip ?? false,\n pickable: false\n });\n}\n","import type { Group } from '../graphic/group';\n\nexport function updateContainerChildrenX(containerGroup: Group, x: number): number {\n // let x = 0;\n containerGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', x);\n x += column.attribute.width;\n });\n return x;\n}\n","import { isValid } from '@visactor/vutils';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\nimport type { ColumnIconOption, SortOrder, SvgIcon } from '../../ts-types';\nimport { IconFuncTypeEnum } from '../../ts-types';\nimport type { Icon } from '../graphic/icon';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport type { IRect } from './../../vrender';\nimport { IContainPointMode, createRect } from './../../vrender';\nimport { dealWithIcon } from '../utils/text-icon-layout';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { traverseObject } from '../../tools/util';\n\nexport function hideHoverIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // hideIcon(scene, cellGroup, 'mouseenter_cell');\n\n // hideIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'mouseenter_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 0);\n\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function showHoverIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // showIcon(scene, cellGroup, 'mouseenter_cell');\n\n // showIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'mouseenter_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function hideClickIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // hideIcon(scene, cellGroup, 'click_cell');\n\n // hideIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'click_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 0);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function showClickIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // showIcon(scene, cellGroup, 'click_cell');\n\n // showIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'click_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\n/**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\nexport function getIconByXY(col: number, row: number, x: number, y: number, scene: Scenegraph): Icon | undefined {\n const cellGroup = scene.getCell(col, row);\n let pickMark;\n cellGroup.forEachChildren((mark: Icon) => {\n if (mark.role && mark.role.startsWith('icon') && mark.containsPoint(x, y, IContainPointMode.GLOBAL)) {\n pickMark = mark;\n }\n });\n return pickMark;\n}\n\n/**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function setIconHoverStyle(baseIcon: Icon, col: number, row: number, cellGroup: Group, scene: Scenegraph) {\n if (baseIcon.attribute.backgroundColor || baseIcon.attribute.hoverImage) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === baseIcon.name,\n (icon: Icon) => {\n // hover展示背景\n if (icon.attribute.backgroundColor) {\n let iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttributes({\n x:\n (icon.attribute.x ?? 0) +\n // (icon.attribute.dx ?? 0) +\n (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n dx: icon.attribute.dx ?? 0,\n dy: icon.attribute.dy ?? 0,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n visible: true\n });\n } else {\n iconBack = createRect({\n x:\n (icon.attribute.x ?? 0) +\n // (icon.attribute.dx ?? 0) +\n (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n dx: icon.attribute.dx ?? 0,\n dy: icon.attribute.dy ?? 0,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n pickable: false,\n visible: true\n }) as IRect;\n iconBack.name = 'icon-back';\n // cellGroup.appendChild(iconBack);\n }\n icon.parent.insertBefore(iconBack, icon);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.hoverImage) {\n icon.image = icon.attribute.hoverImage;\n }\n },\n scene\n );\n }\n // hover展示tooltip\n if (baseIcon.tooltip) {\n const { x1: left, x2: right, y1: top, y2: bottom } = baseIcon.globalAABBBounds;\n const tooltipOptions: TooltipOptions = {\n content: baseIcon.tooltip.title,\n referencePosition: {\n rect: {\n left: left,\n right: right,\n top: top,\n bottom: bottom,\n width: baseIcon.globalAABBBounds.width(),\n height: baseIcon.globalAABBBounds.height()\n },\n placement: baseIcon.tooltip.placement\n },\n disappearDelay: baseIcon.tooltip.disappearDelay,\n style: Object.assign({}, scene.table.internalProps.theme?.tooltipStyle, baseIcon.tooltip?.style)\n };\n if (!scene.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n scene.table.showTooltip(col, row, tooltipOptions);\n }\n }\n}\n\n/**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function setIconNormalStyle(baseIcon: Icon, col: number, row: number, scene: Scenegraph) {\n if (baseIcon.attribute.backgroundColor || baseIcon.attribute.hoverImage) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === baseIcon.name,\n (icon: Icon) => {\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.originImage) {\n icon.image = icon.attribute.originImage;\n }\n },\n scene\n );\n }\n}\n\nexport function updateIcon(baseIcon: Icon, iconConfig: ColumnIconOption, col: number, row: number, scene: Scenegraph) {\n // 直接更新mark attribute\n // dealWithIcon(iconConfig, icon);\n // icon.name = iconConfig.name;\n // scene.updateNextFrame();\n const iconName = baseIcon.name;\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === iconName,\n // dealer\n (icon: Icon) => {\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n\n scene.updateNextFrame();\n}\n\nfunction resetSortIcon(oldSortCol: number, oldSortRow: number, iconConfig: ColumnIconOption, scene: Scenegraph) {\n const oldSortCell = scene.getCell(oldSortCol, oldSortRow);\n\n if (\n isValid(oldSortCell.mergeStartCol) &&\n isValid(oldSortCell.mergeStartRow) &&\n isValid(oldSortCell.mergeEndCol) &&\n isValid(oldSortCell.mergeEndRow)\n ) {\n for (let col = oldSortCell.mergeStartCol; col <= oldSortCell.mergeEndCol; col++) {\n for (let row = oldSortCell.mergeStartRow; row <= oldSortCell.mergeEndRow; row++) {\n let oldIconMark: Icon;\n scene.getCell(col, row).forEachChildren((mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n if (oldIconMark) {\n dealWithIcon(iconConfig, oldIconMark);\n oldIconMark.name = iconConfig.name;\n }\n }\n }\n } else {\n let oldIconMark: Icon;\n\n //oldSortCell.forEachChildren((mark: Icon) => {\n traverseObject(oldSortCell, 'children', (mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n\n if (oldIconMark) {\n // updateIcon(oldIconMark, oldIcon);\n dealWithIcon(iconConfig, oldIconMark);\n oldIconMark.name = iconConfig.name;\n }\n }\n}\n\nfunction checkSameCell(col1: number, row1: number, col2: number, row2: number, table: BaseTableAPI) {\n const range1 = table.getCellRange(col1, row1);\n const range2 = table.getCellRange(col2, row2);\n if (\n range1.start.col === range2.start.col &&\n range1.start.row === range2.start.row &&\n range1.end.col === range2.end.col &&\n range1.end.row === range2.end.row\n ) {\n return true;\n }\n return false;\n}\n\nexport function updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n scene: Scenegraph;\n}) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene } = options;\n // 更新icon\n const icon = scene.table.internalProps.headerHelper.getSortIcon(order, scene.table, col, row);\n if (iconMark) {\n updateIcon(iconMark, icon, col, row, scene);\n }\n\n // 更新旧frozen icon\n if (!checkSameCell(col, row, oldSortCol, oldSortRow, scene.table)) {\n const oldIcon = scene.table.internalProps.headerHelper.getSortIcon('normal', scene.table, oldSortCol, oldSortRow);\n if (oldIconMark) {\n updateIcon(oldIconMark, oldIcon, oldSortCol, oldSortRow, scene);\n } else {\n resetSortIcon(oldSortCol, oldSortRow, oldIcon, scene);\n }\n }\n}\n\nexport function updateFrozenIcon(scene: Scenegraph) {\n // 依据新旧冻结列确定更新范围\n for (let col = 0; col < scene.table.colCount; col++) {\n for (let row = 0; row < scene.table.columnHeaderLevelCount; row++) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === 'frozen',\n // dealer\n (icon: Icon) => {\n const iconConfig = scene.table.internalProps.headerHelper.getFrozenIcon(col, row);\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n }\n }\n}\n\nexport function updateHierarchyIcon(col: number, row: number, scene: Scenegraph) {\n let iconConfig: SvgIcon;\n if (scene.table.isHeader(col, row)) {\n iconConfig = scene.table.internalProps.headerHelper.getHierarchyIcon(col, row);\n } else {\n iconConfig = scene.table.internalProps.bodyHelper.getHierarchyIcon(col, row);\n }\n\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) =>\n icon.attribute.funcType === IconFuncTypeEnum.collapse || icon.attribute.funcType === IconFuncTypeEnum.expand,\n // dealer\n (icon: Icon) => {\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n}\n\nexport function updateCellGroupIcon(cellGroup: Group, filter: (icon: Icon) => boolean, dealer: (icon: Icon) => void) {\n if (!cellGroup || cellGroup.role === 'empty') {\n return;\n }\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n updateCellGroupIcon(child, filter, dealer);\n } else if (filter(child)) {\n dealer(child);\n }\n });\n}\n\nexport function updateCellRangeIcon(\n col: number,\n row: number,\n filter: (icon: Icon) => boolean,\n dealer: (icon: Icon) => void,\n scene: Scenegraph\n) {\n const cellGroup = scene.getCell(col, row);\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, scene);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n updateCellGroupIcon(scene.highPerformanceGetCell(col, row), filter, dealer);\n }\n }\n } else {\n updateCellGroupIcon(cellGroup, filter, dealer);\n }\n}\n\nexport function residentHoverIcon(col: number, row: number, scene: Scenegraph) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === IconFuncTypeEnum.dropDown,\n // dealer\n (icon: Icon) => {\n (icon as any).oldVisibleTime = icon.attribute.visibleTime;\n icon.setAttribute('visibleTime', 'always');\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n}\n\nexport function resetResidentHoverIcon(col: number, row: number, scene: Scenegraph) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === IconFuncTypeEnum.dropDown,\n // dealer\n (icon: Icon) => {\n (icon as any).oldVisibleTime && icon.setAttribute('visibleTime', (icon as any).oldVisibleTime);\n icon.setAttribute('opacity', icon.attribute.visibleTime === 'always' ? 1 : 0);\n },\n scene\n );\n}\n","import type { IRectGraphicAttribute } from './../../vrender';\nimport type { ThemeStyle } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport { getStroke } from './frame-border';\nimport { getQuadProps } from '../utils/padding';\n\nexport function createCornerCell(cellGroup: Group, frameTheme: ThemeStyle) {\n const { bgColor, borderColor, borderLineWidth, borderLineDash } = frameTheme;\n\n const rectAttributes: IRectGraphicAttribute = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false,\n pickable: true,\n fill: bgColor as string\n };\n rectAttributes.stroke = getStroke(borderColor as string, undefined);\n rectAttributes.lineWidth = borderLineWidth as number;\n borderLineDash && (rectAttributes.lineDash = borderLineDash as number[]);\n rectAttributes.lineCap = 'butt';\n if (Array.isArray(borderColor)) {\n (rectAttributes as any).strokeArrayColor = getQuadProps(borderColor as any);\n }\n if (Array.isArray(borderLineWidth)) {\n (rectAttributes as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n (rectAttributes as any).lineWidth = 1;\n }\n\n // const cornerCellGroup = new Group(rectAttributes);\n cellGroup.setAttributes(rectAttributes);\n cellGroup.role = 'corner-frozen';\n return cellGroup;\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { CellAddress } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { updateCell } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport type { IGroup } from './../../vrender';\n\n/**\n * add and remove rows in scenegraph\n */\nexport function updateCol(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[],\n table: BaseTableAPI\n) {\n const scene = table.scenegraph;\n // deduplication\n const removeCols = deduplication(removeCells.map(cell => cell.col)).sort((a, b) => b - a);\n const addCols = deduplication(addCells.map(cell => cell.col)).sort((a, b) => a - b);\n const updateCols = deduplication(updateCells.map(cell => cell.col)).sort((a, b) => a - b);\n\n // remove cells\n removeCols.forEach(col => {\n removeCol(col, scene);\n });\n\n const colWidthsMap = table.colWidthsMap;\n removeCols.forEach(col => {\n colWidthsMap.delAndReorder(col);\n });\n\n if (removeCols.length) {\n resetColNumber(scene);\n }\n\n scene.table._clearColRangeWidthsMap();\n\n // add cells\n let updateAfter: number;\n addCols.forEach(col => {\n const needUpdateAfter = addCol(col, scene);\n resetColNumber(scene);\n updateAfter = updateAfter ?? needUpdateAfter;\n colWidthsMap.addAndReorder(col);\n });\n\n // reset attribute y and col number in CellGroup\n // const newTotalHeight = resetColNumberAndY(scene);\n resetColNumberAndX(scene);\n // add cells\n updateCols.forEach(col => {\n for (let row = 0; row < table.rowCount; row++) {\n // updateColAttr(col, scene);\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n }\n });\n\n if (isNumber(updateAfter)) {\n for (let col = updateAfter; col < table.colCount; col++) {\n for (let row = 0; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.colUpdatePos = updateAfter;\n }\n if (addCols.length) {\n if (!isNumber(updateAfter)) {\n const minCol = Math.min(...addCols);\n scene.proxy.colUpdatePos = minCol;\n }\n scene.proxy.colUpdateDirection = 'left';\n scene.proxy.updateColGroups(scene.proxy.screenColCount * 2);\n updateRightFrozeCellGroups();\n scene.proxy.progress();\n } else if (removeCols.length) {\n scene.proxy.updateColGroups(scene.proxy.screenColCount * 2);\n updateRightFrozeCellGroups();\n scene.proxy.progress();\n }\n\n // update table size\n const newTotalWidth = table.getColsWidth(table.frozenColCount, table.colCount - 1);\n scene.updateContainerWidth(scene.table.frozenColCount, newTotalWidth - scene.bodyGroup.attribute.width);\n\n function updateRightFrozeCellGroups() {\n if (\n addCols?.[addCols?.length - 1] >= table.colCount - table.rightFrozenColCount ||\n updateCols?.[updateCols?.length - 1] >= table.colCount - table.rightFrozenColCount ||\n removeCols?.[0] >= table.colCount - table.rightFrozenColCount\n ) {\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n for (let row = 0; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.updateRightFrozenCellGroups();\n }\n }\n}\n\nfunction removeCol(col: number, scene: Scenegraph) {\n const proxy = scene.proxy;\n // removeCellGroup(col, scene);\n //先考虑非表头部分删除情况\n if (col >= scene.table.rowHeaderLevelCount) {\n if (col >= scene.table.colCount - scene.table.rightFrozenColCount) {\n // 如果是删除的右侧固定列 这里不做真正的删除,只需要后面将相应列做更新\n // scene.bodyGroup.removeChild(scene.bodyGroup.lastChild as any);\n // scene.bottomFrozenGroup.removeChild(scene.bottomFrozenGroup.lastChild as any);\n } else {\n const colGroup = scene.getColGroup(col, false);\n if (colGroup && colGroup.parent === scene.bodyGroup) {\n scene.bodyGroup.removeChild(colGroup);\n }\n const bottomColGroup = scene.getColGroupInBottom(col);\n if (bottomColGroup && bottomColGroup.parent === scene.bottomFrozenGroup) {\n scene.bottomFrozenGroup.removeChild(bottomColGroup);\n }\n }\n }\n\n // TODO 需要整体更新proxy的状态\n if (col >= proxy.colStart && col <= proxy.colEnd) {\n proxy.colEnd--;\n proxy.currentCol--;\n }\n proxy.bodyRightCol--;\n // proxy.totalCol--;\n const totalActualBodyColCount = Math.min(proxy.colLimit, proxy.bodyRightCol - proxy.bodyLeftCol + 1); // 渐进加载总col数量\n proxy.totalActualBodyColCount = totalActualBodyColCount;\n proxy.totalCol = proxy.colStart + totalActualBodyColCount - 1; // 目标渐进完成的col\n}\n\nfunction addCol(col: number, scene: Scenegraph) {\n const proxy = scene.proxy;\n proxy.bodyRightCol++;\n // proxy.totalCol++;\n const totalActualBodyColCount = Math.min(proxy.colLimit, proxy.bodyRightCol - proxy.bodyLeftCol + 1); // 渐进加载总col数量\n proxy.totalActualBodyColCount = totalActualBodyColCount;\n proxy.totalCol = proxy.colStart + totalActualBodyColCount - 1; // 目标渐进完成的col\n\n if (col < proxy.colStart) {\n return undefined;\n } else if (col > proxy.colEnd) {\n if (proxy.colEnd - proxy.colStart + 1 < proxy.colLimit) {\n // can add col\n proxy.colEnd++;\n proxy.currentCol++;\n\n addColGroup(col, scene);\n return col;\n }\n return undefined;\n }\n if (proxy.colEnd - proxy.colStart + 1 < proxy.colLimit) {\n // can add col\n proxy.colEnd++;\n proxy.currentCol++;\n\n addColGroup(col, scene);\n return col;\n }\n return col;\n}\n\n// array deduplication\nfunction deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\nfunction resetColNumber(scene: Scenegraph) {\n let colIndex = scene.bodyColStart;\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n scene.colHeaderGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n function processCell(cellGroup: Group) {\n cellGroup.col = colIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeEndCol = merge.end.col;\n }\n\n if (cellGroup.role !== 'cell') {\n return;\n }\n }\n}\n\nfunction resetColNumberAndX(scene: Scenegraph) {\n let colIndex = scene.bodyColStart;\n let x = scene.getCellGroupX(colIndex);\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n x = scene.getCellGroupX(colIndex);\n scene.colHeaderGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n x = scene.getCellGroupX(colIndex);\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightTopCornerGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n function processCell(cellGroup: Group) {\n cellGroup.col = colIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeEndCol = merge.end.col;\n }\n\n if (cellGroup.role !== 'cell') {\n return;\n }\n }\n}\n\nfunction addColGroup(col: number, scene: Scenegraph) {\n if (scene.colHeaderGroup && scene.table.columnHeaderLevelCount > 0) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroup(col, true);\n if (colAfter) {\n scene.colHeaderGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.colHeaderGroup.appendChild(columnGroup);\n }\n generateCellGroup(columnGroup, col, 0, scene.table.columnHeaderLevelCount - 1);\n }\n\n if (scene.bodyGroup) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroup(col, false);\n if (colAfter) {\n scene.bodyGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.bodyGroup.appendChild(columnGroup);\n }\n generateCellGroup(columnGroup, col, scene.bodyRowStart, scene.bodyRowEnd);\n }\n if (scene.bottomFrozenGroup && scene.table.bottomFrozenRowCount > 0) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroupInBottom(col);\n if (colAfter) {\n scene.bottomFrozenGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.bottomFrozenGroup.appendChild(columnGroup);\n }\n\n generateCellGroup(\n columnGroup,\n col,\n scene.table.rowCount - scene.table.bottomFrozenRowCount,\n scene.table.rowCount - 1\n );\n }\n\n function generateCellGroup(group: IGroup, col: number, rowStart: number, rowEnd: number) {\n for (let row = rowStart; row <= rowEnd; row++) {\n // create cellGroup\n // const cellGroup = updateCell(col, row, scene.table, true);\n const cellGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: scene.table.getRowHeight(row)\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n cellGroup.needUpdate = true;\n group.appendChild(cellGroup);\n }\n }\n}\n","import type { Text } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealWithAnimationAppear(table: BaseTableAPI) {\n if (!table.options.animationAppear) {\n return;\n }\n\n let duration: number;\n let delay: number;\n let type: 'all' | 'one-by-one';\n let direction: 'row' | 'column';\n\n if (table.options.animationAppear === true) {\n duration = 500;\n delay = 0;\n type = 'one-by-one';\n direction = 'column';\n } else {\n duration = table.options.animationAppear.duration ?? 500;\n delay = table.options.animationAppear.delay ?? 0;\n type = table.options.animationAppear.type ?? 'one-by-one';\n direction = table.options.animationAppear.direction ?? 'row';\n }\n\n const { scenegraph: scene, frozenColCount, frozenRowCount } = table;\n\n // header cell\n const { colStart, colEnd, rowStart, rowEnd } = scene.proxy; // to do: right bottom frozen\n\n for (let col = 0; col <= colEnd; col++) {\n for (let row = 0; row <= rowEnd; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.forEachChildren((child: Text) => {\n child.setAttribute('opacity', 0);\n child\n .animate()\n .wait(type === 'one-by-one' ? (direction === 'row' ? row : col) * (duration - delay) : delay)\n .to({ opacity: 1 }, duration, 'linear');\n });\n }\n }\n }\n}\n","import type { IRect, IRectGraphicAttribute } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\n\n// for fs big screen\nexport function temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute, scene: Scenegraph) {\n const { selectedRangeComponents } = scene;\n selectedRangeComponents.forEach((selectComp: { rect: IRect }, key: string) => {\n selectComp.rect.setAttributes(rectAttribute);\n });\n scene.updateNextFrame();\n}\n","import type { IStage, IRect, ITextCache, INode, Text, RichText, Stage, IRectGraphicAttribute } from './../vrender';\nimport { createStage, createRect, IContainPointMode, container, vglobal, registerForVrender } from './../vrender';\nimport type { CellRange, CellSubLocation } from '../ts-types';\nimport {\n type CellAddress,\n type CellLocation,\n type ColumnIconOption,\n type SortOrder,\n IconFuncTypeEnum,\n InternalIconName\n} from '../ts-types';\nimport { isArray, isString, isValid } from '@visactor/vutils';\nimport type { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateCornerRadius, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport splitModule from './graphic/contributions';\nimport { getFunctionalProp, getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth, getAdaptiveWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport {\n deleteAllSelectBorder,\n deleteAllSelectingBorder,\n deleteLastSelectedRangeComponents,\n removeFillHandleFromSelectComponents\n} from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { computeRowHeight, computeRowsHeight } from './layout/compute-row-height';\nimport { emptyGroup } from './utils/empty-group';\nimport { dealBottomFrozen, dealFrozen, dealRightFrozen, resetFrozen } from './layout/frozen';\nimport {\n updateChartSizeForResizeColWidth,\n updateChartSizeForResizeRowHeight,\n updateChartState\n} from './refresh-node/update-chart';\nimport { initSceneGraph } from './group-creater/init-scenegraph';\nimport { updateContainerChildrenX } from './utils/update-container';\nimport type { CheckBox } from '@visactor/vrender-components';\nimport { loadPoptip, setPoptipTheme } from '@visactor/vrender-components';\nimport textMeasureModule from './utils/text-measure';\nimport {\n getIconByXY,\n hideClickIcon,\n hideHoverIcon,\n resetResidentHoverIcon,\n residentHoverIcon,\n setIconHoverStyle,\n setIconNormalStyle,\n showClickIcon,\n showHoverIcon,\n updateFrozenIcon,\n updateHierarchyIcon,\n updateSortIcon\n} from './icon/icon-update';\nimport { Env } from '../tools/env';\nimport { createCornerCell } from './style/corner-cell';\nimport { updateCol } from './layout/update-col';\nimport { deduplication } from '../tools/util';\nimport { getDefaultHeight, getDefaultWidth } from './group-creater/progress/default-width-height';\nimport { dealWithAnimationAppear } from './animation/appear';\nimport { updateReactContainer } from './layout/frozen-react';\n\nimport * as registerIcons from '../icons';\nimport { temporarilyUpdateSelectRectStyle } from './select/update-select-style';\n// import { contextModule } from './context/module';\n\nregisterForVrender();\n\n// VChart poptip theme\n// loadPoptip();\ncontainer.load(splitModule);\ncontainer.load(textMeasureModule);\n// container.load(renderServiceModule);\n// container.load(contextModule);\n// console.log(container);\n\nexport type MergeMap = Map<\n string,\n {\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n rightFrozenGroup: Group; // 右侧冻结列Group\n bottomFrozenGroup: Group; // 下侧冻结行Group\n rightTopCornerGroup: Group; // 右上角占位单元格Group,只在有右侧冻结列时使用\n leftBottomCornerGroup: Group; // 左下角占位单元格Group,只在有下侧冻结行时使用\n rightBottomCornerGroup: Group; // 右下角占位单元格Group,只在有右侧下侧都有冻结行时使用\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map;\n customSelectedRangeComponents: Map;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n // transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number; // 冻结列数\n frozenRowCount: number; // 冻结行数\n clear: boolean;\n\n mergeMap: MergeMap;\n _dealAutoFillHeightOriginRowsHeight: number; // hack 缓存一个值 用于处理autoFillHeight的逻辑判断 在某些情况下是需要更新此值的 如增删数据 但目前没有做这个\n\n _needUpdateContainer: boolean = false;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n setPoptipTheme(this.table.theme.textPopTipStyle);\n let width;\n let height;\n if (table.options.canvas && table.options.viewBox) {\n vglobal.setEnv('browser');\n width = table.options.viewBox.x2 - table.options.viewBox.x1;\n height = table.options.viewBox.y2 - table.options.viewBox.y1;\n } else if (Env.mode === 'node') {\n vglobal.setEnv('node', table.options.modeParams);\n width = table.canvasWidth;\n height = table.canvasHeight;\n } else {\n vglobal.setEnv('browser');\n width = table.canvas.width;\n height = table.canvas.height;\n }\n this.stage = createStage({\n canvas: table.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio,\n enableLayout: true,\n // enableHtmlAttribute: true,\n // pluginList: table.isPivotChart() ? ['poptipForText'] : undefined,\n beforeRender: (stage: Stage) => {\n this.table.options.beforeRender && this.table.options.beforeRender(stage);\n this.table.animationManager.ticker.start();\n },\n afterRender: (stage: Stage) => {\n this.table.options.afterRender && this.table.options.afterRender(stage);\n this.table.fireListeners('after_render', null);\n // console.trace('after_render');\n },\n // event: { clickInterval: 400 }\n // autoRender: true\n\n canvasControled: !table.options.canvas,\n viewBox: table.options.viewBox,\n ...table.options.renderOption\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n return this.proxy.rowEnd ?? this.table.rowCount - 1;\n }\n\n get bodyColStart(): number {\n return this.proxy.colStart ?? 0;\n }\n\n get bodyColEnd(): number {\n return this.proxy.colEnd ?? this.table.colCount - 1;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n // (this.table as any).transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n\n initSceneGraph(this);\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.table.animationManager.clear();\n // unbind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n this.stage.pluginService.findPluginsByName('poptipForText').forEach(plugin => {\n plugin.deactivate(this.stage.pluginService);\n });\n }\n\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n delete this.colHeaderGroup.border;\n this.rowHeaderGroup.clear();\n delete this.rowHeaderGroup.border;\n this.cornerHeaderGroup.clear();\n delete this.cornerHeaderGroup.border;\n this.bodyGroup.clear();\n delete this.bodyGroup.border;\n\n this.bottomFrozenGroup.clear();\n delete this.bottomFrozenGroup.border;\n this.rightFrozenGroup.clear();\n delete this.rightFrozenGroup.border;\n this.rightTopCornerGroup.clear();\n delete this.rightTopCornerGroup.border;\n this.rightBottomCornerGroup.clear();\n delete this.rightBottomCornerGroup.border;\n this.leftBottomCornerGroup.clear();\n delete this.leftBottomCornerGroup.border;\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bottomFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightTopCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.leftBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.rightBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: 0,\n height: 0\n });\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n this.proxy?.release();\n\n this.table.reactCustomLayout?.clearCache();\n }\n\n updateStageBackground() {\n this.stage.background = this.table.theme.underlayBackgroundColor;\n this.stage.renderNextFrame();\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n this.customSelectedRangeComponents = new Map();\n }\n\n updateComponent() {\n this.component.updateStyle();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph(skipRowHeightClear = false) {\n if (!skipRowHeightClear) {\n this.table.rowHeightsMap.clear();\n this.table.internalProps.layoutMap.clearCellRangeMap();\n }\n\n // bind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n (this.stage.pluginService as any).autoEnablePlugins.getContributions().forEach((p: any) => {\n if (p.name === 'poptipForText') {\n this.stage.pluginService.register(p);\n }\n });\n }\n\n this.clear = false;\n // this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenColCount = this.table.frozenColCount;\n this.frozenRowCount = this.table.frozenRowCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n if (this.table.isPivotChart()) {\n createCornerCell(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n }\n\n this.proxy.createGroupForFirstScreen(\n this.cornerHeaderGroup,\n this.colHeaderGroup,\n this.rowHeaderGroup,\n this.rightFrozenGroup,\n this.bottomFrozenGroup,\n this.bodyGroup,\n 0,\n 0\n );\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n // const colGroup = row < this.frozenRowCount ? this.colHeaderGroup : this.cornerHeaderGroup;\n let cell;\n if (\n this.table.rightFrozenColCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row < this.table.frozenRowCount\n ) {\n cell = this.rightTopCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.bottomFrozenRowCount > 0 &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount &&\n col < this.table.frozenColCount\n ) {\n cell = this.leftBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.rightFrozenColCount > 0 &&\n this.table.bottomFrozenRowCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount\n ) {\n cell = this.rightBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.rightFrozenColCount > 0 && col > this.table.colCount - 1 - this.table.rightFrozenColCount) {\n cell = this.rightFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.bottomFrozenRowCount > 0 && row > this.table.rowCount - 1 - this.table.bottomFrozenRowCount) {\n cell = this.bottomFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else {\n cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n }\n\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n if (range.start.col === col && range.start.row === row) {\n // 理论上不会出现这种情况,但是在PivotChart会偶先,这里处理避免进入死循环\n // do nothing\n } else {\n cell = this.getCell(range.start.col, range.start.row);\n }\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number, getShadow?: boolean): Group {\n // if (!this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, getShadow);\n // }\n // return this.getCell(col, row, getShadow);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (\n isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightTopCornerGroup.getColGroup(col) as Group;\n } else if (\n !isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightFrozenGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n getColGroupInBottom(col: number, isCornerOrColHeader = false): Group | undefined {\n if (isCornerOrColHeader) {\n const element = this.getColGroupInLeftBottomCorner(col) ?? this.getColGroupInRightBottomCorner(col);\n if (element) {\n return element;\n }\n }\n if (this.table.bottomFrozenRowCount > 0) {\n return this.bottomFrozenGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInLeftBottomCorner(col: number): Group | undefined {\n if (this.table.bottomFrozenRowCount > 0) {\n return this.leftBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightTopCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0) {\n return this.rightTopCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightBottomCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0 && this.table.bottomFrozenRowCount > 0) {\n return this.rightBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.updateContainerSync();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n if (\n this.table.stateManager.select?.ranges?.length > 0 ||\n this.table.stateManager.select?.customSelectRanges?.length > 0\n ) {\n updateAllSelectComponent(this);\n }\n }\n\n hideHoverIcon(col: number, row: number) {\n hideHoverIcon(col, row, this);\n }\n\n showHoverIcon(col: number, row: number) {\n showHoverIcon(col, row, this);\n }\n\n hideClickIcon(col: number, row: number) {\n hideClickIcon(col, row, this);\n }\n\n showClickIcon(col: number, row: number) {\n showClickIcon(col, row, this);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n return getIconByXY(col, row, x, y, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n setIconHoverStyle(icon, col, row, cellGroup, this);\n }\n\n updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n }) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark } = options;\n updateSortIcon({ col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene: this });\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n updateFrozenIcon(this);\n }\n updateHierarchyIcon(col: number, row: number) {\n updateHierarchyIcon(col, row, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n setIconNormalStyle(icon, col, row, this);\n }\n\n residentHoverIcon(col: number, row: number) {\n residentHoverIcon(col, row, this);\n }\n resetResidentHoverIcon(col: number, row: number) {\n resetResidentHoverIcon(col, row, this);\n }\n\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.deactivate?.();\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n deleteAllSelectingBorder(this);\n }\n\n updateCellSelectBorder(selectRange: CellRange & { skipBodyMerge?: boolean }, extendSelectRange: boolean = true) {\n updateCellSelectBorder(this, selectRange, extendSelectRange);\n }\n\n removeFillHandleFromSelectComponents() {\n removeFillHandleFromSelectComponents(this);\n }\n /** 根据select状态重新创建选中range节点 */\n recreateAllSelectRangeComponents() {\n deleteAllSelectBorder(this);\n this.table.stateManager.select.ranges.forEach((cellRange: CellRange) => {\n updateCellSelectBorder(this, cellRange);\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n });\n }\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number, skipUpdateContainer?: boolean, skipTableWidthMap?: boolean) {\n updateColWidth(this, col, Math.round(detaX), skipTableWidthMap);\n // this.updateContainerWidth(col, detaX);\n if (!skipUpdateContainer) {\n // this.updateContainerAttrWidthAndX();\n this.updateContainer(true);\n }\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeColWidth(col: number) {\n updateChartSizeForResizeColWidth(this, col);\n }\n\n /**\n * @description: 行高调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeRowHeight(row: number) {\n updateChartSizeForResizeRowHeight(this, row);\n }\n /** 更新图表的高亮状态 */\n updateChartState(datum: any) {\n this.table.isPivotChart() && updateChartState(this, datum);\n }\n\n updateCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.bodyGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n ?.getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col);\n columnGroup?.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n }\n }\n updateHeaderCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.rowHeaderGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n .getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col, true);\n columnGroup.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n }\n }\n updateAutoColWidth(col: number) {\n this.table.internalProps._widthResizedColMap.delete(col);\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n const table = this.table;\n\n if (table.widthMode === 'adaptive' || table.autoFillWidth || table.internalProps.transpose) {\n computeColsWidth(this.table, 0, this.table.colCount - 1, true);\n } else {\n table._clearColRangeWidthsMap();\n // left frozen\n if (table.frozenColCount > 0) {\n computeColsWidth(this.table, 0, table.frozenColCount - 1, true);\n }\n // right frozen\n if (table.rightFrozenColCount > 0) {\n computeColsWidth(this.table, table.rightFrozenColCount, table.colCount - 1, true);\n }\n // body\n computeColsWidth(table, this.proxy.colStart, this.proxy.colEnd, true);\n }\n }\n\n recalculateRowHeights() {\n const table = this.table;\n table.internalProps.useOneRowHeightFillAll = false;\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n computeRowsHeight(this.table, 0, this.table.rowCount - 1, true, true);\n } else {\n // top frozen\n if (table.frozenRowCount > 0) {\n computeRowsHeight(this.table, 0, table.frozenRowCount - 1, true, true);\n }\n // bottom frozen\n if (table.bottomFrozenRowCount > 0) {\n computeRowsHeight(this.table, table.bottomFrozenRowCount, table.rowCount - 1, true, true);\n }\n computeRowsHeight(table, this.proxy.rowStart, this.proxy.rowEnd, true, true);\n }\n }\n\n resize() {\n // reset proxy config\n this.proxy.resize();\n\n if (this.table.widthMode === 'adaptive' || this.table.autoFillWidth) {\n if (this.table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.recalculateColWidths();\n } else {\n this.dealWidthMode();\n }\n }\n\n if (this.table.heightMode === 'adaptive') {\n // perf to be optimized:\n // reason to use recalculateRowHeights();\n // 1. error amplification(误差放大) in dealHeightMode when multiple resize\n // 2. width update caused height update dose not have enlarge/reduce number,\n // will cause scale error in dealHeightMode()\n if (this.table.internalProps._heightResizedRowMap.size === 0) {\n this.recalculateRowHeights();\n } else {\n this.dealHeightMode();\n }\n // this.dealHeightMode();\n } else if (this.table.autoFillHeight) {\n this.dealHeightMode();\n }\n\n // this.dealWidthMode();\n // this.dealHeightMode();\n this.resetFrozen();\n // this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n if (\n this.table.widthMode === 'adaptive' ||\n this.table.heightMode === 'adaptive' ||\n this.table.autoFillWidth ||\n this.table.autoFillHeight\n ) {\n this.updateChartSizeForResizeColWidth(-1);\n }\n\n this.proxy.progress();\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: Math.min(\n this.table.tableNoFrameWidth,\n Math.max(\n this.colHeaderGroup.attribute.width,\n this.bodyGroup.attribute.width,\n this.bottomFrozenGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.cornerHeaderGroup.attribute.width,\n this.rowHeaderGroup.attribute.width,\n this.leftBottomCornerGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.rightTopCornerGroup.attribute.width,\n this.rightFrozenGroup.attribute.width,\n this.rightBottomCornerGroup.attribute.width,\n 0\n )\n ),\n height: Math.min(\n this.table.tableNoFrameHeight,\n Math.max(\n this.colHeaderGroup.attribute.height,\n this.cornerHeaderGroup.attribute.height,\n this.rightTopCornerGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.rowHeaderGroup.attribute.height,\n this.bodyGroup.attribute.height,\n this.rightFrozenGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.leftBottomCornerGroup.attribute.height,\n this.bottomFrozenGroup.attribute.height,\n this.rightBottomCornerGroup.attribute.height,\n 0\n )\n )\n } as any);\n\n if (this.tableGroup.border) {\n const rectAttributes = this.tableGroup.border?.attribute;\n let borderTop;\n let borderRight;\n let borderBottom;\n let borderLeft;\n if ((rectAttributes as any)?.strokeArrayWidth) {\n borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n } else {\n borderTop = (rectAttributes?.lineWidth as number) ?? 0;\n borderRight = (rectAttributes?.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes?.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes?.lineWidth as number) ?? 0;\n }\n if (this.tableGroup.border.type === 'rect') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n }\n } else if (this.tableGroup.border.type === 'group') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: 0,\n y: 0,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: this.tableGroup.attribute.width,\n height: this.tableGroup.attribute.height\n });\n }\n }\n }\n\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute(\n 'y',\n this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight()\n );\n this.leftBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight(),\n width: this.table.getFrozenColsWidth()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight()\n });\n }\n\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('x', this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth());\n this.rightTopCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth(),\n height: this.table.getFrozenRowsHeight()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth()\n });\n }\n }\n\n updateRowHeight(row: number, detaY: number, skipTableHeightMap?: boolean) {\n detaY = Math.round(detaY);\n updateRowHeight(this, row, detaY, skipTableHeightMap);\n this.updateContainerHeight(row, detaY);\n }\n updateRowsHeight(rows: number[], detaYs: number[], skipTableHeightMap?: boolean) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) {\n const detaY = detaYs[i];\n updateRowHeight(this, row, Math.round(detaY), skipTableHeightMap);\n this._updateContainerHeight(row, detaY);\n }\n }\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n _updateContainerHeight(row: number, detaY: number) {\n if (row < this.table.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaY(detaY);\n } else if (row >= this.table.rowCount - this.table.bottomFrozenRowCount) {\n this.leftBottomCornerGroup.setDeltaHeight(detaY);\n this.bottomFrozenGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightBottomCornerGroup.setDeltaHeight(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaHeight(detaY);\n }\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n this._updateContainerHeight(row, detaY);\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n this.table._clearColRangeWidthsMap(col);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n if (oldHeight === height) {\n return;\n }\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) || // body\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1) || // bottom\n row < this.table.frozenRowCount\n ) {\n this.updateRowHeight(row, height - oldHeight);\n }\n this.table._clearRowRangeHeightsMap(row);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.table.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n this.table.scenegraph.proxy.setY(-y, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n // correct y, avoid scroll out of range\n const firstBodyCell = this.bodyGroup.firstChild?.firstChild as Group;\n const lastBodyCell = this.bodyGroup.firstChild?.lastChild as Group;\n if (\n y === 0 &&\n firstBodyCell &&\n firstBodyCell.row === this.table.frozenRowCount &&\n firstBodyCell.attribute.y + y < 0\n ) {\n y = -firstBodyCell.attribute.y;\n } else if (\n lastBodyCell &&\n this.table.tableNoFrameHeight < this.table.getAllRowsHeight() &&\n lastBodyCell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n lastBodyCell.attribute.y + lastBodyCell.attribute.height + y <\n this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()\n ) {\n y =\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() -\n lastBodyCell.attribute.y -\n lastBodyCell.attribute.height;\n }\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height + y);\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('y', this.rightTopCornerGroup.attribute.height + y);\n }\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setBodyAndColHeaderX(x: number) {\n // correct x, avoid scroll out of range\n const firstBodyCol = this.bodyGroup.firstChild as Group;\n const lastBodyCol = this.bodyGroup.lastChild as Group;\n if (x === 0 && firstBodyCol && firstBodyCol.col === this.table.frozenColCount && firstBodyCol.attribute.x + x < 0) {\n x = -firstBodyCol.attribute.x;\n } else if (\n lastBodyCol &&\n this.table.tableNoFrameWidth < this.table.getAllColsWidth() &&\n lastBodyCol.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n lastBodyCol.attribute.x + lastBodyCol.attribute.width + x <\n this.table.tableNoFrameWidth - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth()\n ) {\n x =\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() -\n lastBodyCol.attribute.x -\n lastBodyCol.attribute.width;\n }\n if (this.table.getFrozenColsWidth() + x === this.bodyGroup.attribute.x) {\n return;\n }\n this.bodyGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n this.colHeaderGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // this.dealWidthMode();\n // this.dealHeightMode();\n // 处理冻结\n // this.resetFrozen();\n // this.dealFrozen();\n\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else {\n this.component.setFrozenColumnShadow(-1);\n }\n this.table.stateManager.checkFrozen();\n // this.updateContainerAttrWidthAndX();\n this.updateContainer();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n\n // 处理单元格内容需要textStick的情况 入股这里不处理 只依赖异步proxy progress中处理 会有闪烁问题\n\n handleTextStick(this.table);\n\n // // temp add rect\n // const rect = createRect({\n // x: 200,\n // y: 200,\n // width: 100,\n // height: 100,\n // fill: 'red',\n // stroke: 'blue',\n // lineWidth: 1\n // });\n // this.tableGroup.addChild(rect);\n // deal with animation\n\n if (this.table.options.animationAppear) {\n dealWithAnimationAppear(this.table);\n }\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n const colWidth = table.getColWidth(col);\n actualHeaderWidth += colWidth;\n }\n }\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理高度模式\n * @return {*}\n */\n dealHeightMode() {\n const table = this.table;\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n const totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = totalDrawHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n\n this.setRowHeight(row, rowHeight);\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n // table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (\n (this._dealAutoFillHeightOriginRowsHeight ?? actualHeight) < canvasHeight &&\n actualHeight - actualHeaderHeight > 0\n ) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = canvasHeight - actualHeaderHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n this.setRowHeight(row, rowHeight);\n }\n }\n }\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as Text;\n const text = cellGroup.getChildByName('text') as Text;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row'\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange\n ) {\n moveHeaderPosition(updateColStart, updateColEnd, updateRowStart, updateRowEnd, moveType, this.table);\n }\n\n updateContainerAttrWidthAndX() {\n // 更新各列x&col\n const cornerX = updateContainerChildrenX(this.cornerHeaderGroup, 0);\n const rowHeaderX = updateContainerChildrenX(this.rowHeaderGroup, 0);\n const colHeaderX =\n this.colHeaderGroup.hasChildNodes() && this.colHeaderGroup.firstChild\n ? updateContainerChildrenX(\n this.colHeaderGroup,\n (this.colHeaderGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.colHeaderGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const bodyX =\n this.bodyGroup.hasChildNodes() && this.bodyGroup.firstChild\n ? updateContainerChildrenX(\n this.bodyGroup,\n (this.bodyGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bodyGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const rightX = updateContainerChildrenX(\n this.rightFrozenGroup.childrenCount > 0 ? this.rightFrozenGroup : this.rightTopCornerGroup,\n 0\n );\n\n this.bottomFrozenGroup.hasChildNodes() &&\n this.bottomFrozenGroup.firstChild &&\n updateContainerChildrenX(\n this.bottomFrozenGroup,\n (this.bottomFrozenGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bottomFrozenGroup.firstChild as any).col - 1)\n : 0\n );\n updateContainerChildrenX(this.leftBottomCornerGroup, 0);\n updateContainerChildrenX(this.rightTopCornerGroup, 0);\n updateContainerChildrenX(this.rightBottomCornerGroup, 0);\n\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.leftBottomCornerGroup.setDeltaWidth(cornerX - this.leftBottomCornerGroup.attribute.width);\n //TODO 可能有影响\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n // this.rightFrozenGroup.setDeltaWidth(colHeaderX - this.table.getRightFrozenColsWidth());\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setDeltaWidth(colHeaderX - this.bottomFrozenGroup.attribute.width);\n this.rightFrozenGroup.setDeltaWidth(rightX - this.rightFrozenGroup.attribute.width);\n this.rightTopCornerGroup.setDeltaWidth(rightX - this.rightTopCornerGroup.attribute.width);\n this.rightBottomCornerGroup.setDeltaWidth(rightX - this.rightBottomCornerGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth());\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n }\n\n updateContainer(async: boolean = false) {\n if (async) {\n if (!this._needUpdateContainer) {\n this._needUpdateContainer = true;\n setTimeout(() => {\n this.updateContainerSync();\n }, 0);\n }\n } else {\n this._needUpdateContainer = true;\n this.updateContainerSync();\n }\n }\n\n updateContainerSync() {\n if (!this._needUpdateContainer) {\n return;\n }\n this._needUpdateContainer = false;\n this.updateContainerAttrWidthAndX();\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateDomContainer();\n\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const isVtableMerge = this.table.getCellRawRecord(col, row)?.vtableMerge;\n const type = isVtableMerge\n ? 'text'\n : this.table.isHeader(col, row)\n ? (this.table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot && !this.table.internalProps.transpose;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.internalProps.transpose\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group\n ): { col: number; row: number; x?: number; rightFrozen?: boolean } {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n let cell: { col: number; row: number; x?: number; rightFrozen?: boolean };\n if (!cellGroup) {\n const drawRange = this.table.getDrawRange();\n if (abstractY >= drawRange.top && abstractY <= drawRange.bottom) {\n // to do: 处理最后一列外调整列宽\n cell = this.table.getCellAtRelativePosition(abstractX - offset, abstractY);\n if (cell.col === this.table.colCount - 1) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n if (!cellGroup.stage) {\n return { col: -1, row: -1 };\n }\n\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n cell = { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n } else if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n cell = { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n if (\n cell &&\n this.table.rightFrozenColCount > 0 &&\n // cell.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n cell.col >= this.table.colCount - this.table.rightFrozenColCount - 1 &&\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() +\n this.table.scrollLeft <\n this.bodyGroup.attribute.width\n ) {\n // 有右侧冻结列,并且横向没有滚动到最右侧时,右侧冻结列左侧调整对只对右侧冻结列生效\n cell.col = cell.col + 1;\n cell.rightFrozen = true;\n }\n\n if (cell) {\n return cell;\n }\n // }\n return { col: -1, row: -1 };\n }\n\n getResizeRowAt(abstractX: number, abstractY: number, cellGroup?: Group) {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n let cell: { col: number; row: number; y?: number; bottomFrozen?: boolean };\n if (abstractY < cellGroup.globalAABBBounds.y1 + offset) {\n cell = { col: cellGroup.col, row: cellGroup.row - 1, y: cellGroup.globalAABBBounds.y1 };\n } else if (cellGroup.globalAABBBounds.y2 - offset < abstractY) {\n cell = { col: cellGroup.col, row: cellGroup.row, y: cellGroup.globalAABBBounds.y2 };\n }\n if (\n cell &&\n this.table.bottomFrozenRowCount > 0 &&\n // cell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n cell.row >= this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() +\n this.table.scrollTop <\n this.bodyGroup.attribute.height\n ) {\n // 有下侧冻结行,并且纵向没有滚动到最下侧时,下侧冻结行左侧调整对只对下侧冻结行生效\n cell.row = cell.row + 1;\n cell.bottomFrozen = true;\n }\n if (cell) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n dealWidthRightFrozen(rightFrozenColCount: number) {\n if (this.clear) {\n this.table.internalProps.rightFrozenColCount = rightFrozenColCount;\n return;\n }\n dealRightFrozen(rightFrozenColCount, this);\n }\n dealWidthBottomFrozen(bottomFrozenRowCount: number) {\n if (this.clear) {\n this.table.internalProps.bottomFrozenRowCount = bottomFrozenRowCount;\n return;\n }\n dealBottomFrozen(bottomFrozenRowCount, this);\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n\n updateCornerRadius(this.table);\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if ((this.table as any).transpose) {\n this.proxy.sortCellHorizontal();\n } else {\n this.proxy.sortCellVertical();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as Text | RichText;\n\n if (text && text.type === 'text') {\n if ((text.attribute as any).moreThanMaxCharacters) {\n return this.table.getCellValue(col, row);\n }\n const textAttributeStr = isArray(text.attribute.text)\n ? text.attribute.text.join('')\n : (text.attribute.text as string);\n let cacheStr = '';\n if (isString(text.cache.clipedText)) {\n cacheStr = text.cache.clipedText;\n } else {\n (text.cache as ITextCache).layoutData?.lines?.forEach((line: any) => {\n cacheStr += line.str;\n });\n }\n if (cacheStr !== textAttributeStr) {\n // return textAttributeStr;\n return this.table.getCellValue(col, row);\n }\n } else if (text && text.type === 'richtext') {\n const richtext = text;\n if (\n richtext.attribute.ellipsis &&\n richtext._frameCache &&\n richtext.attribute.height < richtext._frameCache.actualHeight\n ) {\n const textConfig = richtext.attribute.textConfig.find((item: any) => item.text);\n // return (textConfig as any).text as string;\n return this.table.getCellValue(col, row);\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number, forceFastUpdate: boolean = false) {\n if (this.clear) {\n return undefined;\n }\n return updateCell(col, row, this.table, undefined, undefined, forceFastUpdate);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[] = [],\n recalculateColWidths: boolean = true,\n skipUpdateProxy?: boolean\n ) {\n this.table.internalProps.layoutMap.clearCellRangeMap();\n this.table.internalProps.useOneRowHeightFillAll = false;\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n //这个值是后续为了autoFillHeight判断逻辑中用到的 判断是否更新前是未填满的情况\n const isNotFillHeight =\n this.table.getAllRowsHeight() -\n [...addRows, ...updateRows].reduce((tolHeight, rowNumber) => {\n return tolHeight + this.table.getRowHeight(rowNumber);\n }, 0) <=\n this.table.tableNoFrameHeight;\n\n // add or move rows\n updateRow(removeCells, addCells, updateCells, this.table, skipUpdateProxy);\n\n // update column width and row height\n\n recalculateColWidths && this.recalculateColWidths();\n\n // this.recalculateRowHeights();\n\n if (\n this.table.heightMode === 'adaptive' ||\n (this.table.autoFillHeight && (this.table.getAllRowsHeight() <= this.table.tableNoFrameHeight || isNotFillHeight))\n ) {\n this.table.scenegraph.recalculateRowHeights();\n } else if (this.table.isAutoRowHeight()) {\n // if (updateCells.length > 0) {\n // this.table.scenegraph.recalculateRowHeights();\n // }\n for (let i = 0; i < updateRows.length; i++) {\n const row = updateRows[i];\n const oldHeight = this.table.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.table.colCount - 1, this.table);\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) ||\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1)\n ) {\n this.table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n }\n }\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n updateCol(removeCells: CellAddress[], addCells: CellAddress[], updateCells: CellAddress[] = []) {\n // add or move rows\n updateCol(removeCells, addCells, updateCells, this.table);\n\n // update column width and row height\n this.recalculateColWidths();\n\n this.recalculateRowHeights();\n\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n getColumnGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // row header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // right frozen\n return this.table.getColsWidth(this.table.colCount - this.table.bottomFrozenRowCount, col - 1);\n }\n return 0;\n }\n\n getCellGroupY(row: number) {\n if (row < this.table.frozenRowCount) {\n // column header\n return this.table.getRowsHeight(0, row - 1);\n } else if (row < this.table.rowCount - this.table.bottomFrozenRowCount) {\n // body\n return this.table.getRowsHeight(this.table.frozenRowCount, row - 1);\n } else if (row < this.table.rowCount) {\n // bottom frozen\n return this.table.getRowsHeight(this.table.rowCount - this.table.bottomFrozenRowCount, row - 1);\n }\n return 0;\n }\n getCellGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // column header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // bottom frozen\n return this.table.getColsWidth(this.table.colCount - this.table.rightFrozenColCount, col - 1);\n }\n return 0;\n }\n // /** 更新场景树某个单元格的值 */\n // updateCellValue(col: number, row: number) {\n // updateCell(col, row, this.table);\n // }\n updateDomContainer() {\n updateReactContainer(this.table);\n }\n\n setLoadingHierarchyState(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n const iconGraphic = cellGroup.getChildByName('collapse', true);\n if (iconGraphic) {\n const regedIcons = registerIcons.get();\n const loadingIcon = regedIcons[InternalIconName.loadingIconName];\n\n dealWithIcon(loadingIcon, iconGraphic, col, row);\n }\n }\n\n temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute) {\n temporarilyUpdateSelectRectStyle(rectAttribute, this);\n }\n\n resetSelectRectStyle() {\n this.recreateAllSelectRangeComponents();\n }\n}\n","import { cellInRange, rangeIntersected } from '../../tools/helper';\nimport type { CellAddress, CellRange, HighlightScope } from '../../ts-types';\n\nexport function checkColInlineInSelect(col: number, cellRanges: CellRange[]): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const currentRangeMinCol = Math.min(cellRanges[i].start.col, cellRanges[i].end.col);\n const currentRangeMaxCol = Math.max(cellRanges[i].start.col, cellRanges[i].end.col);\n if (col >= currentRangeMinCol && col <= currentRangeMaxCol) {\n // 不更新在select范围内的单元格\n return true;\n }\n }\n return false;\n}\n\nexport function checkRowInlineInSelect(row: number, cellRanges: CellRange[]): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const currentRangeMinRow = Math.min(cellRanges[i].start.row, cellRanges[i].end.row);\n const currentRangeMaxRow = Math.max(cellRanges[i].start.row, cellRanges[i].end.row);\n if (row >= currentRangeMinRow && row <= currentRangeMaxRow) {\n // 不更新在select范围内的单元格\n return true;\n }\n }\n return false;\n}\n/**\n * @description: 判断单元格是否在select区域中\n * @param {number} col\n * @param {number} row\n * @param {CellAddress} selectCellPosStart\n * @param {CellAddress} selectCellPosEnd\n * @param {HighlightScope} selectMode\n * @return {*}\n */\nexport function checkCellInSelect(\n col: number,\n row: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const _in = cellInRange(range, col, row);\n if (_in) {\n return true;\n }\n }\n // if (selectMode === HighlightScope.single) {\n // if (cellInRange(cellRange, col, row)) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.column) {\n // if (col >= cellRange.start.col && col <= cellRange.end.col) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.row) {\n // if (row >= cellRange.start.row && row <= cellRange.end.row) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.cross) {\n // if (col >= cellRange.start.col && col <= cellRange.end.col) {\n // return true;\n // } else if (row >= cellRange.start.row && row <= cellRange.end.row) {\n // return true;\n // }\n // }\n\n return false;\n}\n\n/**\n * @description: 判断单元格范围是否与select区域有交集\n * @param {CellAddress} cellPosStart\n * @param {CellAddress} cellPosEnd\n * @param {CellAddress} selectCellPosStart\n * @param {CellAddress} selectCellPosEnd\n * @param {HighlightScope} selectMode\n * @return {*}\n */\nexport function checkMultiCellInSelect(\n cellPosStart: CellAddress,\n cellPosEnd: CellAddress,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n selectRangs: CellRange[],\n selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < selectRangs.length; i++) {\n const range = selectRangs[i];\n const inSelect = rangeIntersected(range, { start: cellPosStart, end: cellPosEnd });\n if (inSelect) {\n return true;\n }\n }\n\n // for (let col = cellPosStart.col; col <= cellPosEnd.col; col++) {\n // for (let row = cellPosStart.row; row <= cellPosEnd.row; row++) {\n // const inSelect = checkCellInSelect(\n // col,\n // row,\n // selectCellPosStart,\n // selectCellPosEnd,\n // selectMode\n // );\n // if (inSelect) {\n // return true;\n // }\n // }\n // }\n\n return false;\n}\n\nexport function checkRowInSelect(\n row: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const _in = row >= minRow && row <= maxRow;\n if (_in) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkColInSelect(\n col: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n const _in = col >= minCol && col <= maxCol;\n if (_in) {\n return true;\n }\n }\n return false;\n}\n","import { isValid } from '@visactor/vutils';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function updateCell(scenegraph: Scenegraph, col: number, row: number) {\n const cellGroup = scenegraph.highPerformanceGetCell(col, row);\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const mergeCell = scenegraph.highPerformanceGetCell(col, row);\n if (mergeCell.role !== 'cell') {\n continue;\n }\n mergeCell.addUpdateBoundTag();\n }\n }\n } else {\n cellGroup.addUpdateBoundTag();\n }\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearColHover(\n scenegraph: Scenegraph,\n col: number,\n rowOrigin: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n updateCell(scenegraph, col, row);\n }\n // 更新body\n const cellGroup = scenegraph.getColGroup(col);\n cellGroup?.addUpdateBoundTag();\n\n return true;\n}\n\nexport function updateColHover(\n scenegraph: Scenegraph,\n col: number,\n rowOrigin: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope,\n singleStyle: boolean\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n updateCell(scenegraph, col, row);\n }\n // 更新body\n const cellGroup = scenegraph.getColGroup(col);\n cellGroup?.addUpdateBoundTag();\n\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearRowHover(\n scenegraph: Scenegraph,\n colOrigin: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let col = 0; col < table.colCount; col++) {\n updateCell(scenegraph, col, row);\n }\n return true;\n}\n\nexport function updateRowHover(\n scenegraph: Scenegraph,\n colOrigin: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope,\n singleStyle: boolean\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let col = 0; col < table.colCount; col++) {\n updateCell(scenegraph, col, row);\n }\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearSingleHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n updateCell(scenegraph, col, row);\n return true;\n}\n\nexport function updateSingleHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n updateCell(scenegraph, col, row);\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { CellPosition } from '../../ts-types';\n// import { HoverMode, SelectMode, StateManager } from '../state';\nimport type { StateManager } from '../state';\nimport { clearColHover, updateColHover } from './col';\nimport { clearRowHover, updateRowHover } from './row';\nimport { clearSingleHover, updateSingleHover } from './single';\n\n/**\n * @description: 更新hover位置\n * @param {StateManager} state\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function updateHoverPosition(state: StateManager, col: number, row: number) {\n const { table } = state;\n const { scenegraph } = table;\n const { highlightScope, singleStyle, disableHeader, cellPos, cellPosContainHeader } = state.hover;\n const prevHoverCellCol = cellPos.col;\n const prevHoverCellRow = cellPos.row;\n\n if (\n highlightScope === HighlightScope.none ||\n (disableHeader && (cellPosContainHeader.col !== col || cellPosContainHeader.row !== row))\n ) {\n // disableHeader状态,更新hover图标状态依赖cellPosContainHeader\n const prevHoverCellCol = cellPosContainHeader.col;\n const prevHoverCellRow = cellPosContainHeader.row;\n scenegraph.hideHoverIcon(prevHoverCellCol, prevHoverCellRow);\n scenegraph.showHoverIcon(col, row);\n cellPosContainHeader.col = col;\n cellPosContainHeader.row = row;\n }\n\n if ((disableHeader && table.isHeader(col, row)) || highlightScope === HighlightScope.none) {\n col = -1;\n row = -1;\n }\n\n if (prevHoverCellCol === col && prevHoverCellRow === row) {\n return;\n }\n // 将hover单元格的图表实例激活 并将上一个失去焦点\n scenegraph.deactivateChart(prevHoverCellCol, prevHoverCellRow);\n scenegraph.activateChart(col, row);\n\n let updateScenegraph = false;\n const {\n // cellPosStart: selectStart,\n // cellPosEnd: selectEnd,\n ranges,\n highlightScope: selectMode\n } = state.select;\n // 移出表格/移入表头清空hover\n if (prevHoverCellCol !== -1 && prevHoverCellRow !== -1) {\n updateScenegraph = clearHover(\n scenegraph,\n prevHoverCellCol,\n prevHoverCellRow,\n // selectStart,\n // selectEnd,\n ranges,\n singleStyle,\n highlightScope,\n selectMode\n );\n\n if (!disableHeader) {\n scenegraph.hideHoverIcon(prevHoverCellCol, prevHoverCellRow);\n }\n }\n\n if (col === -1 || row === -1) {\n cellPos.col = -1;\n cellPos.row = -1;\n if (updateScenegraph && (prevHoverCellCol !== col || prevHoverCellRow !== row)) {\n state.table.scenegraph.updateNextFrame();\n }\n return;\n }\n\n // 更新hover单元格状态\n if (highlightScope === HighlightScope.single) {\n updateScenegraph = updateSingleHover(scenegraph, col, row, ranges, selectMode) ? true : updateScenegraph;\n } else if (highlightScope === HighlightScope.row) {\n updateScenegraph = updateRowHover(\n scenegraph,\n col,\n row,\n // selectStart,\n // selectEnd,\n ranges,\n selectMode,\n singleStyle\n )\n ? true\n : updateScenegraph;\n } else if (highlightScope === HighlightScope.column) {\n updateScenegraph = updateColHover(\n scenegraph,\n col,\n row,\n // selectStart,\n // selectEnd,\n ranges,\n selectMode,\n singleStyle\n )\n ? true\n : updateScenegraph;\n } else if (highlightScope === HighlightScope.cross) {\n updateScenegraph = updateRowHover(scenegraph, col, row, ranges, selectMode, singleStyle) ? true : updateScenegraph;\n updateScenegraph = updateColHover(scenegraph, col, row, ranges, selectMode, singleStyle) ? true : updateScenegraph;\n }\n\n // if (!disableHeader) {\n // scenegraph.showHoverIcon(col, row);\n // }\n if (highlightScope !== HighlightScope.none && !disableHeader) {\n scenegraph.showHoverIcon(col, row);\n }\n\n cellPos.col = col;\n cellPos.row = row;\n if (updateScenegraph) {\n state.table.scenegraph.updateNextFrame();\n }\n}\n\n/**\n * @description: 清空hover状态\n * @param {StateManager} state\n * @return {*}\n */\nfunction clearHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectStart: CellPosition,\n // selectEnd: CellPosition,\n selectRanges: CellRange[],\n singleStyle: boolean,\n mode: HighlightScope,\n selectMode: HighlightScope\n) {\n let updateScenegraph = false;\n if (mode === HighlightScope.single) {\n updateScenegraph = clearSingleHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.row) {\n updateScenegraph = clearRowHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.column) {\n updateScenegraph = clearColHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.cross) {\n updateScenegraph = clearRowHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n updateScenegraph = clearColHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n }\n\n return updateScenegraph;\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealFreeze(col: number, row: number, table: BaseTableAPI) {\n // table.setFrozenColCount(col + 1);\n if (table.frozenColCount > 0) {\n if (col !== table.frozenColCount - 1) {\n table.setFrozenColCount(col + 1);\n } else {\n table.setFrozenColCount(0);\n }\n } else {\n table.setFrozenColCount(col + 1);\n }\n\n // table.stateManager.frozen.col = table.frozenColCount - 1;\n // table.stateManager.frozen.row = row;\n // if (table.stateManager.checkFrozen()) {\n // table.stateManager.setFrozenCol(table.frozenColCount - 1);\n // } else {\n // table.scenegraph.updateFrozenIcon(0, table.colCount - 1);\n // }\n}\n","import { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { defaultOrderFn } from '../../tools/util';\nimport type { ColumnDefine, HeaderData, HeaderDefine, ListTableAPI, SortState } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\n/**\n * @description: 执行sort\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nexport function dealSort(col: number, row: number, table: ListTableAPI, event: Event) {\n //是击中的sort按钮才进行排序\n let range1 = null;\n let tableState: SortState;\n let isTargetCell = false;\n //找出当前表头是否在sortState排序规则中\n if (Array.isArray(table.sortState)) {\n for (let i = 0; i < table.sortState.length; i++) {\n tableState = table.sortState[i];\n if (tableState) {\n range1 = table._getHeaderCellBySortState(tableState);\n }\n range1 && (isTargetCell = isTarget(col, row, range1.col, range1.row, table));\n if (isTargetCell) {\n break;\n }\n }\n } else {\n tableState = table.sortState;\n if (tableState) {\n range1 = table._getHeaderCellBySortState(tableState);\n }\n range1 && (isTargetCell = isTarget(col, row, range1.col, range1.row, table));\n }\n\n const headerC = table.getHeaderDefine(col, row) as ColumnDefine;\n //当前排序规则是该表头field 且 表头设置了sort规则 需要转变sort的状态\n if (tableState && isTargetCell && headerC?.sort) {\n tableState.order = tableState.order === 'asc' ? 'desc' : tableState.order === 'desc' ? 'normal' : 'asc';\n } else if (headerC?.sort) {\n //如果当前表头设置了sort 则 转变sort的状态\n tableState = {\n field: table.getHeaderField(col, row),\n order: 'asc'\n };\n } else if (isTargetCell && headerC?.showSort) {\n //当前排序规则是该表头field 且仅为显示showSort无sort 什么也不做\n } else {\n tableState = {\n field: table.getHeaderField(col, row),\n order: 'normal'\n };\n }\n (tableState as SortState & { event: Event }).event = event;\n // 如果用户监听SORT_CLICK事件的回调函数返回false 则不执行内部排序逻辑\n const sortEventReturns = table.fireListeners(TABLE_EVENT_TYPE.SORT_CLICK, tableState as SortState & { event: Event });\n if (sortEventReturns.includes(false)) {\n return;\n }\n let isArraySortState = false;\n let sortState: SortState | SortState[] = table.internalProps.sortState\n ? Array.isArray(table.internalProps.sortState) && (isArraySortState = true)\n ? (table.internalProps.sortState as SortState[])\n : [table.internalProps.sortState as SortState]\n : [];\n if (Array.isArray(sortState)) {\n const index = (sortState as SortState[]).findIndex(item => item.field === tableState.field);\n if (index >= 0) {\n sortState[index] = tableState;\n } else {\n sortState.push(tableState);\n }\n }\n sortState = (sortState as SortState[]).filter(item => item.order !== 'normal');\n sortState = table.internalProps.multipleSort && (isArraySortState = true) ? sortState : sortState.splice(-1);\n sortState = isArraySortState && sortState.length ? (sortState as SortState[]) : (sortState[0] as SortState);\n table.internalProps.sortState = sortState; // 目前不支持多级排序 所以这里 直接赋值为单个sortState TODO优化(如果支持多级排序的话)\n table.stateManager.setSortState(sortState);\n if (headerC?.sort) {\n executeSort(sortState, table, headerC);\n }\n\n // clear cell range cache\n table.internalProps.useOneRowHeightFillAll = false;\n table.internalProps.layoutMap.clearCellRangeMap();\n\n table.scenegraph.sortCell();\n // 排序后,清除选中效果\n const isHasSelected = !!table.stateManager.select.ranges?.length;\n table.stateManager.updateSelectPos(-1, -1);\n table.stateManager.endSelectCells(true, isHasSelected);\n}\n\nfunction executeSort(newState: SortState | SortState[], table: BaseTableAPI, headerDefine: HeaderDefine): void {\n newState = Array.isArray(newState) || !newState ? newState : [newState];\n table.dataSource.sort(\n ((newState || []) as Array).map(item => {\n const hd = table.internalProps.layoutMap.headerObjects.find((col: HeaderData) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: typeof hd?.define?.sort === 'function' ? hd?.define?.sort : defaultOrderFn\n };\n })\n );\n}\n\nfunction isTarget(col: number, row: number, range1Col: number, range1Row: number, table: BaseTableAPI): boolean {\n return table._getLayoutCellId(col, row) === table._getLayoutCellId(range1Col, range1Row);\n}\n","import type { ListTable } from '../..';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { SelectAllOnCtrlAOption } from '../../ts-types';\nimport { InteractionState } from '../../ts-types';\nimport type { StateManager } from '../state';\n/**\n * @description: 更新select位置\n * @param {StateManager} state\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function updateSelectPosition(\n state: StateManager,\n col: number,\n row: number,\n isShift: boolean,\n isCtrl: boolean,\n isSelectAll: boolean,\n makeSelectCellVisible: boolean = true,\n skipBodyMerge: boolean = false\n // forceSelect: boolean = false\n) {\n const { table, interactionState } = state;\n const { scenegraph } = table;\n const { highlightScope, disableHeader, cellPos, disableCtrlMultiSelect } = state.select;\n // const disableSelect = table.options?.select?.disableSelect;\n // const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n // const { highlightScope, disableHeader, cellPos } = state.select;\n // const disableSelect = table.options?.select?.disableSelect;\n // const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n\n // if (\n // ((disableHeader && table.isHeader(col, row)) || highlightScope === 'none' || cellDisable) &&\n // forceSelect === false\n // ) {\n if (col !== -1 && row !== -1 && makeSelectCellVisible) {\n table._makeVisibleCell(col, row);\n }\n // col = -1;\n // row = -1;\n // }\n\n /** 完整显示选中单元格 自动滚动效果*/\n if (col !== -1 && row !== -1 && makeSelectCellVisible) {\n if (interactionState === InteractionState.grabing && state.select.ranges.length > 0) {\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (col > currentRange.start.col && col > currentRange.end.col) {\n //向右扩展\n table._makeVisibleCell(col + 1, row);\n }\n if (row > currentRange.start.row && row > currentRange.end.row) {\n //向右扩展\n table._makeVisibleCell(col, row + 1);\n }\n if (col < currentRange.start.col && col < currentRange.end.col) {\n //向右扩展\n table._makeVisibleCell(col - 1, row);\n }\n if (row < currentRange.start.row && row < currentRange.end.row) {\n //向右扩展\n table._makeVisibleCell(col, row - 1);\n }\n } else {\n table._makeVisibleCell(col, row);\n }\n }\n if (isSelectAll) {\n state.select.ranges = [];\n scenegraph.deleteAllSelectBorder();\n let _startCol = 0;\n let _startRow = 0;\n const { disableHeaderSelect, disableRowSeriesNumberSelect } =\n (table.options.keyboardOptions?.selectAllOnCtrlA as SelectAllOnCtrlAOption) || {};\n\n // 表头选中\n if (disableHeaderSelect) {\n _startCol = table.rowHeaderLevelCount;\n _startRow = table.columnHeaderLevelCount;\n }\n // 行号列选中\n if (\n (disableRowSeriesNumberSelect || (disableHeaderSelect && (table as ListTable).transpose)) &&\n table.options.rowSeriesNumber\n ) {\n _startCol += 1;\n }\n\n state.select.ranges.push({\n start: { col: _startCol, row: _startRow },\n end: { col: table.colCount - 1, row: table.rowCount - 1 }\n });\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n scenegraph.updateCellSelectBorder(currentRange, false);\n } else if (cellPos.col !== -1 && cellPos.row !== -1 && (col === -1 || row === -1)) {\n // 输入-1清空选中状态\n // clearMultiSelect(scenegraph, ranges, highlightScope, singleStyle);\n cellPos.col = -1;\n cellPos.row = -1;\n state.select.ranges = [];\n // 隐藏select border\n scenegraph.deleteAllSelectBorder();\n } else if (\n interactionState === InteractionState.default &&\n !table.eventManager.isDraging &&\n !table.stateManager.isResizeCol()\n ) {\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (isShift && currentRange) {\n if (!isCtrl || disableCtrlMultiSelect) {\n cellPos.col = col;\n cellPos.row = row;\n }\n if (state.select.headerSelectMode !== 'cell' && table.isColumnHeader(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = Math.max(currentRange.start.col, currentRange.end.col, col);\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = table.rowCount - 1;\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: startCol, row: table.columnHeaderLevelCount };\n currentRange.end = { col: endCol, row: table.rowCount - 1 };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isRowHeader(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = table.colCount - 1;\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = Math.max(currentRange.start.row, currentRange.end.row, row);\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: table.leftRowSeriesNumberCount + table.rowHeaderLevelCount, row: startRow };\n currentRange.end = { col: table.colCount - 1, row: endRow };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isSeriesNumberInBody(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = table.colCount - 1;\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = Math.max(currentRange.start.row, currentRange.end.row, row);\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: table.leftRowSeriesNumberCount, row: startRow };\n currentRange.end = { col: table.colCount - 1, row: endRow };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else {\n currentRange.end = { col, row };\n }\n scenegraph.deleteLastSelectedRangeComponents();\n scenegraph.updateCellSelectBorder(currentRange);\n // } else if (isCtrl) {\n // cellPos.col = col;\n // cellPos.row = row;\n // state.select.ranges.push({\n // start: { col: cellPos.col, row: cellPos.row },\n // end: { col: cellPos.col, row: cellPos.row },\n // });\n // // 单选或多选的开始,只选中第一个单元格\n // // updateCellSelect(scenegraph, col, row, ranges, highlightScope, singleStyle);\n // scenegraph.setCellNormalStyle(col, row);\n // // 更新select border\n // // calculateAndUpdateMultiSelectBorder(scenegraph, col, row, col, row, state.select.ranges);\n // // 更新select border\n // scenegraph.updateCellSelectBorder(cellPos);\n } else {\n let extendSelectRange = true;\n // 单选或多选开始\n if (cellPos.col !== -1 && cellPos.row !== -1 && (!isCtrl || disableCtrlMultiSelect)) {\n state.select.ranges = [];\n scenegraph.deleteAllSelectBorder();\n }\n if (state.select.headerSelectMode !== 'cell' && table.isColumnHeader(col, row)) {\n // 选中行表头\n const cellRange = table.getCellRange(col, row);\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: { col: cellRange.start.col, row: table.columnHeaderLevelCount },\n end: { col: cellRange.end.col, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: cellRange.start.col, row },\n end: { col: cellRange.end.col, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isRowHeader(col, row)) {\n // 选中列表头\n const cellRange = table.getCellRange(col, row);\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: { col: table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, row: cellRange.start.row },\n end: { col: table.colCount - 1, row: cellRange.end.row },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col, row: cellRange.start.row },\n end: { col: table.colCount - 1, row: cellRange.end.row },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)) {\n // 选中表头行号单元格\n extendSelectRange = false;\n\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.leftRowSeriesNumberCount,\n row: table.columnHeaderLevelCount\n },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: 0, row: 0 },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)) {\n // 选中内容行号单元格\n extendSelectRange = false;\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.leftRowSeriesNumberCount,\n row\n },\n end: { col: table.colCount - 1, row: row },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col, row },\n end: { col: table.colCount - 1, row: row },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isCornerHeader(col, row)) {\n // 选中表头行号单元格\n extendSelectRange = false;\n\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.rowHeaderLevelCount + table.leftRowSeriesNumberCount,\n row: table.columnHeaderLevelCount\n },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: table.leftRowSeriesNumberCount, row: 0 },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if (col >= 0 && row >= 0) {\n // 选中普通单元格\n const cellRange = skipBodyMerge ? { start: { col, row }, end: { col, row } } : table.getCellRange(col, row);\n state.select.ranges.push({\n start: { col: cellRange.start.col, row: cellRange.start.row },\n end: { col: cellRange.end.col, row: cellRange.end.row },\n skipBodyMerge: skipBodyMerge || undefined\n });\n }\n cellPos.col = col;\n cellPos.row = row;\n // scenegraph.setCellNormalStyle(col, row);\n const currentRange = state.select.ranges?.[state.select.ranges.length - 1];\n currentRange && scenegraph.updateCellSelectBorder(currentRange, extendSelectRange);\n }\n } else if (\n (interactionState === InteractionState.grabing || table.eventManager.isDraging) &&\n !table.stateManager.isResizeCol()\n ) {\n let extendSelectRange = true;\n // 可能有cellPosStart从-1开始grabing的情况\n if (cellPos.col === -1) {\n cellPos.col = col;\n }\n if (cellPos.row === -1) {\n cellPos.row = row;\n }\n cellPos.col = col;\n cellPos.row = row;\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (currentRange) {\n if (\n (table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(\n currentRange.start.col,\n currentRange.start.row\n )\n ) {\n // 如果选中起始位置是序号 那么选中范围都是整行整行的选中\n extendSelectRange = false;\n currentRange.end = {\n col: table.colCount - 1,\n row\n };\n } else {\n if (state.fillHandle.isFilling) {\n // 修正拖拽填充柄选中范围 和 不拖填充柄是有区别的 解决选中区域缩小问题\n if (state.fillHandle.direction === 'top') {\n if (row === state.fillHandle.beforeFillMinRow && row === state.fillHandle.beforeFillMaxRow) {\n currentRange.start.row = currentRange.end.row = row;\n } else if (row <= state.fillHandle.beforeFillMinRow) {\n if (currentRange.start.row < currentRange.end.row) {\n const temp = currentRange.start.row;\n currentRange.start.row = currentRange.end.row;\n currentRange.end.row = temp;\n }\n currentRange.end.row = row;\n } else if (row === state.fillHandle.beforeFillMaxRow) {\n if (currentRange.start.row > currentRange.end.row) {\n currentRange.start.row = row;\n } else {\n currentRange.end.row = row;\n }\n }\n } else if (state.fillHandle.direction === 'bottom') {\n if (row >= state.fillHandle.beforeFillMaxRow) {\n if (currentRange.start.row > currentRange.end.row) {\n const temp = currentRange.start.row;\n currentRange.start.row = currentRange.end.row;\n currentRange.end.row = temp;\n }\n currentRange.end.row = row;\n }\n } else if (state.fillHandle.direction === 'left') {\n if (col === state.fillHandle.beforeFillMinCol && col === state.fillHandle.beforeFillMaxCol) {\n currentRange.start.col = currentRange.end.col = col;\n } else if (col <= state.fillHandle.beforeFillMinCol) {\n if (currentRange.start.col < currentRange.end.col) {\n const temp = currentRange.start.col;\n currentRange.start.col = currentRange.end.col;\n currentRange.end.col = temp;\n }\n currentRange.end.col = col;\n } else if (col === state.fillHandle.beforeFillMaxCol) {\n if (currentRange.start.col > currentRange.end.col) {\n currentRange.start.col = col;\n } else {\n currentRange.end.col = col;\n }\n }\n } else if (state.fillHandle.direction === 'right') {\n if (col >= state.fillHandle.beforeFillMaxCol) {\n if (currentRange.start.col > currentRange.end.col) {\n const temp = currentRange.start.col;\n currentRange.start.col = currentRange.end.col;\n currentRange.end.col = temp;\n }\n currentRange.end.col = col;\n }\n }\n } else {\n currentRange.end = {\n col,\n row\n };\n const cellRange = skipBodyMerge ? { start: { col, row }, end: { col, row } } : table.getCellRange(col, row);\n if (currentRange.start.col < cellRange.end.col) {\n currentRange.end.col = cellRange.end.col;\n } else if (currentRange.start.col > cellRange.start.col) {\n currentRange.end.col = cellRange.start.col;\n }\n\n if (currentRange.start.row < cellRange.end.row) {\n currentRange.end.row = cellRange.end.row;\n } else if (currentRange.start.row > cellRange.start.row) {\n currentRange.end.row = cellRange.start.row;\n }\n\n if (state.select.headerSelectMode === 'body') {\n if (table.isRowHeader(col, row)) {\n currentRange.start.col = table.rowHeaderLevelCount + table.leftRowSeriesNumberCount;\n currentRange.end.col = table.colCount - 1;\n } else if (table.isColumnHeader(col, row)) {\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.row = table.rowCount - 1;\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)) {\n currentRange.start.col = table.leftRowSeriesNumberCount;\n currentRange.end.col = table.colCount - 1;\n } else if (table.isCornerHeader(col, row)) {\n currentRange.start.col = table.rowHeaderLevelCount + table.leftRowSeriesNumberCount;\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.col = table.colCount - 1;\n currentRange.end.row = table.rowCount - 1;\n } else if (table.isSeriesNumber(col, row)) {\n currentRange.start.col = table.leftRowSeriesNumberCount;\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.col = table.colCount - 1;\n currentRange.end.row = table.rowCount - 1;\n }\n }\n if (skipBodyMerge) {\n currentRange.skipBodyMerge = true;\n }\n }\n }\n scenegraph.updateCellSelectBorder(currentRange, extendSelectRange);\n }\n }\n scenegraph.updateNextFrame();\n}\nexport function selectEnd(scenegraph: Scenegraph) {\n scenegraph.moveSelectingRangeComponentsToSelectedRangeComponents();\n}\n","import type { TableEvents } from '../../core/TABLE_EVENT_TYPE';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { extend } from '../../tools/helper';\n\nexport interface PivotTableEvents extends TableEvents {\n /**\n * 透视表中排序图标点击事件\n */\n PIVOT_SORT_CLICK: 'pivot_sort_click';\n /**\n * 下钻按钮点击事件\n */\n DRILLMENU_CLICK: 'drillmenu_click';\n}\n\nexport interface PivotChartEvents extends TableEvents {\n /**\n * 代理vchart中的事件\n */\n VCHART_EVENT_TYPE: 'vchart_event_type';\n}\nexport const PIVOT_TABLE_EVENT_TYPE: PivotTableEvents = extend(TABLE_EVENT_TYPE, {\n PIVOT_SORT_CLICK: 'pivot_sort_click' as const,\n DRILLMENU_CLICK: 'drillmenu_click' as const\n});\nexport const PIVOT_CHART_EVENT_TYPE: PivotChartEvents = extend(TABLE_EVENT_TYPE, {\n VCHART_EVENT_TYPE: 'vchart_event_type' as const\n});\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function updateDrill(col: number, row: number, drillDown: boolean, drillUp: boolean, table: BaseTableAPI) {\n // 找到当前单元格显示drill icon位置\n const headerType = table.getCellLocation(col, row);\n let x = 0;\n let y = 0;\n let visible = false;\n if (headerType === 'columnHeader') {\n x = table.getColsWidth(0, table.rowHeaderLevelCount - 1) - (table.frozenColCount === 0 ? table.scrollLeft : 0); //还需要考虑 行表头过宽被滚动后的情况\n y = table.getRowsHeight(0, row - 1) + table.getRowHeight(row) / 2;\n visible = true;\n } else if (headerType === 'rowHeader') {\n y = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n x = table.getColsWidth(0, col - 1) + table.getColWidth(col) / 2;\n // 位置按自动吸附到中间位置计算【行表头滚动后有用】\n // const rectObj = table.getVisibleCellRangeRelativeRect(table.hover.state.address);\n // x = rectObj.left + rectObj.width / 2;\n visible = true;\n }\n\n // 更新drill icon 位置\n table.scenegraph.updateDrill(visible, x, y, drillDown, drillUp);\n}\n","import { createLine, createSymbol } from './../../vrender';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { MousePointerSparklineEvent } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function clearChartHover(col: number, row: number, table: BaseTableAPI) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const sparkline = cellGroup.getChildByName('sparkline');\n const highlightLine = sparkline?.getChildByName('highlight-line');\n const highlightSymbol = sparkline?.getChildByName('highlight-symbol');\n if (highlightLine) {\n highlightLine.setAttributes({\n visible: false,\n pickable: false\n });\n }\n if (highlightSymbol) {\n highlightSymbol.setAttributes({\n visible: false,\n pickable: false\n });\n }\n\n table.scenegraph.updateNextFrame();\n}\n\nexport function updateChartHover(col: number, row: number, x: number, y: number, table: BaseTableAPI): boolean {\n const cellGroup = table.scenegraph.getCell(col, row);\n const sparkline = cellGroup.getChildByName('sparkline');\n const line = sparkline?.getChildByName('sparkline-line');\n const symbol = sparkline?.getChildByName('sparkline-symbol-group');\n if (!line) {\n return false;\n }\n const bandwidth = (line as any).bandwidth;\n const min = (line as any).min;\n const max = (line as any).max;\n const points = line.attribute.points;\n x = x - sparkline.globalAABBBounds.x1;\n y = y - sparkline.globalAABBBounds.y1;\n\n let chartPoint;\n for (let i = 0; i < points.length; i++) {\n const { x: pointX, y: pointY, defined, rawData } = points[i];\n\n if (Math.abs(x - pointX) < bandwidth / 2) {\n chartPoint = {\n point: points[i],\n points,\n pointsBandWidth: bandwidth,\n pointData: rawData\n };\n if (defined) {\n // 添加highlight line\n const highlightLine = sparkline.getChildByName('highlight-line');\n if (highlightLine) {\n highlightLine.setAttributes({\n // x: pointX,\n points: [\n { x: pointX, y: max },\n { x: pointX, y: min }\n ],\n visible: true,\n pickable: true\n });\n } else {\n const highlightLine = createLine({\n // x: 0,\n // y: 0,\n points: [\n { x: pointX, y: max },\n { x: pointX, y: min }\n ],\n lineWidth: line.hover?.strokeWidth,\n stroke: line.hover?.stroke\n });\n highlightLine.name = 'highlight-line';\n sparkline.addChild(highlightLine);\n }\n\n // 添加highlight symbol\n const highlightSymbol = sparkline.getChildByName('highlight-symbol');\n if (highlightSymbol) {\n highlightSymbol.setAttributes({\n x: pointX,\n y: pointY,\n visible: true,\n pickable: true\n });\n } else {\n const highlightSymbol = createSymbol({\n x: pointX,\n y: pointY,\n stroke: symbol.hover.stroke,\n lineWidth: symbol.hover.strokeWidth,\n fill: symbol.hover.fill,\n size: symbol.hover.size * 2, // 之前配置的是圆半径\n symbolType: 'circle'\n });\n highlightSymbol.name = 'highlight-symbol';\n sparkline.addChild(highlightSymbol);\n }\n break;\n }\n }\n }\n table.scenegraph.updateNextFrame();\n\n if (chartPoint) {\n const eventInfo: Omit = {\n col,\n row,\n field: table.getHeaderField(col, row),\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: table.getBodyColumnDefine(col, row).title,\n cellRange: table.getCellRelativeRect(col, row),\n sparkline: {\n pointData: chartPoint.pointData\n },\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL, eventInfo as MousePointerSparklineEvent);\n }\n return true;\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { CellAddress } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function adjustMoveHeaderTarget(source: CellAddress, target: CellAddress, table: BaseTableAPI) {\n const sourceCellRange = table.getCellRange(source.col, source.row);\n\n if (table.isColumnHeader(source.col, source.row)) {\n // 处理是目标位置处是合并单元格的情况\n const targetCellRange = table.getCellRange(target.col, sourceCellRange.start.row);\n // 如果是拖拽处是body target.row处理成表头最后一层\n if (target.row >= table.columnHeaderLevelCount) {\n target.row = table.columnHeaderLevelCount - 1;\n }\n //如果拖拽目标的列在原位置的右侧 位置是合并单元格的最右侧\n if (target.col >= source.col) {\n target.col = targetCellRange.end.col;\n } else {\n target.col = targetCellRange.start.col;\n } //左侧 位置是合并单元格的最左侧\n } else if (\n table.isRowHeader(source.col, source.row)\n // ||\n // ((table as ListTable).transpose && table.internalProps.layoutMap.isSeriesNumberInBody(source.col, source.row))\n ) {\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const targetCellRange = table.getCellRange(sourceCellRange.start.col, target.row);\n if (target.col >= table.rowHeaderLevelCount + layoutMap.leftRowSeriesNumberColumnCount) {\n target.col = table.rowHeaderLevelCount + layoutMap.leftRowSeriesNumberColumnCount - 1;\n }\n // tree模式[透视表行表头]\n if (layoutMap.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = layoutMap.getCellHeaderPathsWithTreeNode(source.col, source.row)\n .rowHeaderPaths as any;\n const targetRowHeaderPaths = layoutMap.getCellHeaderPathsWithTreeNode(target.col, target.row)\n .rowHeaderPaths as any;\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n const targetPathNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1]; //找到共同层级节点\n // 根据这个目标节点找到结束的row index\n if (targetPathNode) {\n if (target.row >= source.row) {\n //如果拖拽目标的列在原位置的上面 位置是层级的最上端\n target.row = targetPathNode.startInTotal + targetPathNode.size - 1 + table.columnHeaderLevelCount;\n } else {\n target.row = targetPathNode.startInTotal + table.columnHeaderLevelCount;\n }\n } //如果拖拽目标的列在原位置的下面 位置是层级的最下端\n }\n } else if (target.row >= source.row) {\n //table模式 如果拖拽目标的列在原位置的下面 位置是层级的最下端\n target.row = targetCellRange.end.row;\n } else {\n //table模式 如果拖拽目标的列在原位置的上面 位置是层级的最上端\n target.row = targetCellRange.start.row;\n }\n }\n return target;\n}\n","import type { ListTable } from '../../ListTable';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { getCellMergeInfo } from '../../scenegraph/utils/get-cell-merge';\nimport type { CellRange } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { StateManager } from '../state';\nimport { adjustMoveHeaderTarget } from './adjust-header';\n\nexport function startMoveCol(\n col: number,\n row: number,\n x: number,\n y: number,\n state: StateManager,\n event: MouseEvent | PointerEvent | TouchEvent\n) {\n if (!('canMoveHeaderPosition' in state.table.internalProps.layoutMap)) {\n return;\n }\n state.columnMove.moving = true;\n state.columnMove.colSource = col;\n state.columnMove.rowSource = row;\n state.columnMove.x = x - state.table.tableX;\n state.columnMove.y = y - state.table.tableY;\n\n const cellLocation = state.table.getCellLocation(col, row);\n const delta =\n cellLocation === 'columnHeader'\n ? state.columnMove.x\n : cellLocation === 'rowHeader' ||\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ? state.columnMove.y\n : 0;\n\n const { backX, lineX, backY, lineY } = state.table.scenegraph.component.showMoveCol(col, row, delta);\n\n state.table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, {\n col,\n row,\n x,\n y,\n backX,\n lineX,\n backY,\n lineY,\n event\n });\n // 调整列顺序期间清空选中清空\n const isHasSelected = !!state.select.ranges?.length;\n state.table.stateManager.updateSelectPos(-1, -1);\n state.table.stateManager.endSelectCells(true, isHasSelected);\n state.table.scenegraph.updateNextFrame();\n}\n\nexport function updateMoveCol(\n col: number,\n row: number,\n x: number,\n y: number,\n state: StateManager,\n event: MouseEvent | PointerEvent | TouchEvent\n) {\n if (!('canMoveHeaderPosition' in state.table.internalProps.layoutMap)) {\n return;\n }\n\n const targetCell = adjustMoveHeaderTarget(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col, row },\n state.table\n );\n const canMove = state.table.internalProps.layoutMap.canMoveHeaderPosition(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col: targetCell.col, row: targetCell.row }\n );\n if (!canMove) {\n state.updateCursor('not-allowed');\n state.columnMove.colTarget = state.columnMove.colSource;\n state.columnMove.rowTarget = state.columnMove.rowSource;\n } else {\n state.columnMove.x = x - state.table.tableX;\n state.columnMove.y = y - state.table.tableY;\n state.columnMove.colTarget = targetCell.col;\n state.columnMove.rowTarget = targetCell.row;\n state.updateCursor('grabbing');\n let lineX;\n let backX;\n let lineY;\n let backY;\n const cellLocation = state.table.getCellLocation(state.columnMove.colSource, state.columnMove.rowSource);\n if (cellLocation === 'columnHeader') {\n backX = state.columnMove.x;\n if (state.table.isLeftFrozenColumn(col)) {\n lineX =\n state.columnMove.colTarget >= state.columnMove.colSource\n ? state.table.getColsWidth(0, state.columnMove.colTarget)\n : state.table.getColsWidth(0, state.columnMove.colTarget - 1);\n } else if (state.table.isRightFrozenColumn(col)) {\n lineX = state.table.tableNoFrameWidth - state.table.getColsWidth(targetCell.col + 1, state.table.colCount - 1);\n } else {\n lineX =\n (state.columnMove.colTarget >= state.columnMove.colSource\n ? state.table.getColsWidth(0, state.columnMove.colTarget)\n : state.table.getColsWidth(0, state.columnMove.colTarget - 1)) -\n state.table.stateManager.scroll.horizontalBarPos;\n }\n } else if (\n cellLocation === 'rowHeader' ||\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ) {\n backY = state.columnMove.y;\n if (state.table.isFrozenRow(row)) {\n lineY =\n state.columnMove.rowTarget >= state.columnMove.rowSource\n ? state.table.getRowsHeight(0, state.columnMove.rowTarget)\n : state.table.getRowsHeight(0, state.columnMove.rowTarget - 1);\n } else if (state.table.isBottomFrozenRow(row)) {\n lineY =\n state.table.tableNoFrameHeight - state.table.getRowsHeight(targetCell.row + 1, state.table.rowCount - 1);\n } else {\n lineY =\n (state.columnMove.rowTarget >= state.columnMove.rowSource\n ? state.table.getRowsHeight(0, state.columnMove.rowTarget)\n : state.table.getRowsHeight(0, state.columnMove.rowTarget - 1)) -\n state.table.stateManager.scroll.verticalBarPos;\n }\n }\n state.table.scenegraph.component.updateMoveCol(backX, lineX, backY, lineY);\n state.table.fireListeners(TABLE_EVENT_TYPE.CHANGING_HEADER_POSITION, {\n col,\n row,\n x,\n y,\n backX,\n lineX,\n backY,\n lineY,\n event\n });\n state.table.scenegraph.updateNextFrame();\n }\n}\n\nexport function endMoveCol(state: StateManager): boolean {\n let moveColResult = false;\n if (\n 'canMoveHeaderPosition' in state.table.internalProps.layoutMap &&\n state.columnMove.moving &&\n state.columnMove.colSource >= 0 &&\n state.columnMove.rowSource >= 0 &&\n state.columnMove.colTarget >= 0 &&\n state.columnMove.rowTarget >= 0 &&\n state.table.options.customConfig?.notUpdateInColumnRowMove !== true\n ) {\n //getCellMergeInfo 一定要在moveHeaderPosition之前调用 否则就不是修改前的range了\n const oldSourceMergeInfo = state.table.getCellRange(state.columnMove.colSource, state.columnMove.rowSource);\n const oldTargetMergeInfo = state.table.getCellRange(state.columnMove.colTarget, state.columnMove.rowTarget);\n // 调整列顺序\n const moveContext = state.table._moveHeaderPosition(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col: state.columnMove.colTarget, row: state.columnMove.rowTarget }\n );\n\n // 更新状态\n if (moveContext && moveContext.targetIndex !== moveContext.sourceIndex) {\n state.table.internalProps.useOneRowHeightFillAll = false;\n state.table.internalProps.layoutMap.clearCellRangeMap();\n const sourceMergeInfo = state.table.getCellRange(state.columnMove.colSource, state.columnMove.rowSource);\n const targetMergeInfo = state.table.getCellRange(state.columnMove.colTarget, state.columnMove.rowTarget);\n\n const colMin = Math.min(\n sourceMergeInfo.start.col,\n targetMergeInfo.start.col,\n oldSourceMergeInfo.start.col,\n oldTargetMergeInfo.start.col\n );\n const colMax = Math.max(\n sourceMergeInfo.end.col,\n targetMergeInfo.end.col,\n oldSourceMergeInfo.end.col,\n oldTargetMergeInfo.end.col\n );\n const rowMin = Math.min(\n sourceMergeInfo.start.row,\n targetMergeInfo.start.row,\n oldSourceMergeInfo.start.row,\n oldTargetMergeInfo.start.row\n );\n let rowMax = Math.max(\n sourceMergeInfo.end.row,\n targetMergeInfo.end.row,\n oldSourceMergeInfo.end.row,\n oldTargetMergeInfo.end.row\n );\n if (\n moveContext.moveType === 'row' &&\n (state.table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree'\n ) {\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n rowMax = rowMax + moveContext.targetSize - 1;\n } else {\n rowMax = rowMax + moveContext.sourceSize - 1;\n }\n }\n if (\n !(state.table as ListTable).transpose &&\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(\n state.columnMove.colSource,\n state.columnMove.rowSource\n )\n ) {\n state.table.changeRecordOrder(moveContext.sourceIndex, moveContext.targetIndex);\n state.changeCheckboxAndRadioOrder(moveContext.sourceIndex, moveContext.targetIndex);\n }\n // clear columns width and rows height cache\n if (moveContext.moveType === 'column') {\n clearWidthsAndHeightsCache(colMin, colMax, 0, -1, state.table);\n } else {\n clearWidthsAndHeightsCache(0, -1, rowMin, rowMax, state.table);\n }\n\n // clear cell style cache\n state.table.clearCellStyleCache();\n if (\n state.table.internalProps.layoutMap.isSeriesNumberInBody(state.columnMove.colSource, state.columnMove.rowSource)\n ) {\n // 如果是拖拽序号换位置 考虑到非拖拽单元格合并而是其他地方有合并被拆开或者独立单元格拖拽后变为合并的情况 这里直接刷新这个场景树的节点 才能覆盖所有情况\n state.table.scenegraph.updateHeaderPosition(\n state.table.scenegraph.proxy.colStart,\n state.table.scenegraph.proxy.colEnd,\n state.table.scenegraph.proxy.rowStart,\n state.table.scenegraph.proxy.rowEnd,\n moveContext.moveType\n );\n } else if (moveContext.moveType === 'column') {\n state.table.scenegraph.updateHeaderPosition(colMin, colMax, 0, -1, moveContext.moveType);\n } else {\n state.table.scenegraph.updateHeaderPosition(0, -1, rowMin, rowMax, moveContext.moveType);\n }\n //调整冻结列数量\n if (state.table.internalProps.frozenColDragHeaderMode === 'adjustFrozenCount' && state.table.isListTable()) {\n if (\n state.table.isLeftFrozenColumn(state.columnMove.colTarget) &&\n !state.table.isLeftFrozenColumn(state.columnMove.colSource)\n ) {\n state.table.frozenColCount +=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n } else if (\n state.table.isLeftFrozenColumn(state.columnMove.colSource) &&\n !state.table.isLeftFrozenColumn(state.columnMove.colTarget)\n ) {\n state.table.frozenColCount -=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n }\n if (\n state.table.isRightFrozenColumn(state.columnMove.colTarget) &&\n !state.table.isRightFrozenColumn(state.columnMove.colSource)\n ) {\n state.table.rightFrozenColCount +=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n } else if (\n state.table.isRightFrozenColumn(state.columnMove.colSource) &&\n !state.table.isRightFrozenColumn(state.columnMove.colTarget)\n ) {\n state.table.rightFrozenColCount -=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n }\n }\n moveColResult = true;\n } else {\n state.updateCursor();\n //触发事件 CHANGE_HEADER_POSITION 还需要用到这些值 所以延迟清理\n state.columnMove.moving = false;\n delete state.columnMove.colSource;\n delete state.columnMove.rowSource;\n delete state.columnMove.colTarget;\n delete state.columnMove.rowTarget;\n state.table.scenegraph.component.hideMoveCol();\n state.table.scenegraph.updateNextFrame();\n return false;\n }\n }\n state.columnMove.moving = false;\n setTimeout(() => {\n //触发事件 CHANGE_HEADER_POSITION 还需要用到这些值 所以延迟清理\n delete state.columnMove.colSource;\n delete state.columnMove.rowSource;\n delete state.columnMove.colTarget;\n delete state.columnMove.rowTarget;\n }, 0);\n state.table.scenegraph.component.hideMoveCol();\n // update frozen shadowline component\n if (\n state.columnResize.col < state.table.frozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setFrozenColumnShadow(\n state.table.frozenColCount - 1,\n state.columnResize.isRightFrozen\n );\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (state.table.options.frozenColCount) {\n state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1);\n } else if (state.table.options.rightFrozenColCount) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n }\n state.table.scenegraph.updateNextFrame();\n\n if (state.table.options.customConfig?.notUpdateInColumnRowMove === true) {\n return true;\n }\n return moveColResult;\n}\n\nfunction clearWidthsAndHeightsCache(\n colMin: number,\n colMax: number,\n rowMin: number,\n rowMax: number,\n table: BaseTableAPI\n) {\n for (let col = colMin; col <= colMax; col++) {\n table._clearColRangeWidthsMap(col);\n }\n for (let row = rowMin; row <= rowMax; row++) {\n table._clearRowRangeHeightsMap(row);\n }\n}\n","/**\n * @description: 从事件对象中获取图标和位置信息\n * @param {any} target\n * @return {*}\n */\nexport function getIconAndPositionFromTarget(target: any):\n | {\n icon: any;\n position: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n };\n type: string;\n }\n | undefined {\n if (!target) {\n return undefined;\n }\n const icon = target.role?.startsWith('icon')\n ? target\n : target.type === 'richtext'\n ? target._currentHoverIcon\n : undefined;\n if (!icon) {\n return undefined;\n }\n if (target.type === 'richtext') {\n return {\n icon: icon,\n position: {\n left: target.globalAABBBounds.x1 + icon.globalAABBBounds.x1,\n right: target.globalAABBBounds.x1 + icon.globalAABBBounds.x2,\n top: target.globalAABBBounds.y1 + icon.globalAABBBounds.y1,\n bottom: target.globalAABBBounds.y1 + icon.globalAABBBounds.y2,\n width: icon.globalAABBBounds.x2 - icon.globalAABBBounds.x1,\n height: icon.globalAABBBounds.y2 - icon.globalAABBBounds.y1\n },\n type: 'richtext-icon'\n };\n }\n return {\n icon: icon,\n position: {\n left: icon.globalAABBBounds.x1,\n right: icon.globalAABBBounds.x2,\n top: icon.globalAABBBounds.y1,\n bottom: icon.globalAABBBounds.y2,\n width: icon.globalAABBBounds.x2 - icon.globalAABBBounds.x1,\n height: icon.globalAABBBounds.y2 - icon.globalAABBBounds.y1\n },\n type: 'icon'\n };\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { IndicatorData } from '../../ts-types/list-table/layout-map/api';\nimport type { StateManager } from '../state';\n\n// columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\nexport function updateResizeColumn(xInTable: number, yInTable: number, state: StateManager) {\n xInTable = Math.ceil(xInTable);\n yInTable = Math.ceil(yInTable);\n let detaX = state.columnResize.isRightFrozen ? state.columnResize.x - xInTable : xInTable - state.columnResize.x;\n // table.getColWidth会使用Math.round,因此这里直接跳过小于1px的修改\n if (Math.abs(detaX) < 1) {\n return;\n }\n\n // 检查minWidth/maxWidth\n // getColWidth会进行Math.round,所以先从colWidthsMap获取:\n // 如果是数值,直接使用;如果不是,则通过getColWidth获取像素值\n // let widthCache = (state.table as any).colWidthsMap.get(state.columnResize.col);\n // if (typeof widthCache === 'number') {\n // widthCache = widthCache;\n // } else {\n const widthCache = state.table.getColWidth(state.columnResize.col);\n // }\n let width = widthCache;\n width += detaX;\n const minWidth = state.table.getMinColWidth(state.columnResize.col);\n const maxWidth = state.table.getMaxColWidth(state.columnResize.col);\n if (width < minWidth || width > maxWidth) {\n if (widthCache === minWidth || widthCache === maxWidth) {\n return;\n } else if (widthCache - minWidth > maxWidth - widthCache) {\n detaX = maxWidth - widthCache;\n } else {\n detaX = minWidth - widthCache;\n }\n }\n\n // limitMinWidth限制\n let afterSize = state.table.getColWidth(state.columnResize.col) + detaX;\n if (afterSize < state.table.internalProps.limitMinWidth) {\n afterSize = state.table.internalProps.limitMinWidth;\n detaX = afterSize - state.table.getColWidth(state.columnResize.col);\n }\n if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n const rightColWidthCache = state.table.getColWidth(state.columnResize.col + 1);\n const rightColMinWidth = state.table.getMinColWidth(state.columnResize.col + 1);\n const rightColMaxWidth = state.table.getMaxColWidth(state.columnResize.col + 1);\n let rightColWidth = rightColWidthCache;\n rightColWidth -= detaX;\n if (rightColWidth < rightColMinWidth || rightColWidth > rightColMaxWidth) {\n if (rightColWidthCache === rightColMinWidth || rightColWidthCache === rightColMaxWidth) {\n return;\n } else if (rightColWidthCache - rightColMinWidth > rightColMaxWidth - rightColWidthCache) {\n detaX = rightColMaxWidth - rightColWidthCache;\n } else {\n detaX = rightColMinWidth - rightColWidthCache;\n }\n }\n if (rightColWidth - detaX < state.table.internalProps.limitMinWidth) {\n detaX = rightColWidth - state.table.internalProps.limitMinWidth;\n }\n }\n detaX = Math.ceil(detaX);\n\n if (\n state.columnResize.col < state.table.rowHeaderLevelCount ||\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount\n ) {\n updateResizeColForColumn(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'indicator') {\n updateResizeColForIndicator(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'indicatorGroup') {\n updateResizeColForIndicatorGroup(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'all') {\n updateResizeColForAll(detaX, state);\n } else {\n // state.table.internalProps.columnResizeType === 'column'\n updateResizeColForColumn(detaX, state);\n }\n\n // if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n // // in adaptive mode, the right column width can not be negative\n // const rightColWidth = state.table.getColWidth(state.columnResize.col + 1);\n // if (rightColWidth - detaX < 0) {\n // detaX = rightColWidth;\n // }\n // state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n // state.table.scenegraph.updateColWidth(state.columnResize.col + 1, -detaX);\n // } else {\n // state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n // }\n state.columnResize.x = xInTable;\n\n // update resize column component\n state.table.scenegraph.component.updateResizeCol(state.columnResize.col, yInTable, state.columnResize.isRightFrozen);\n if (\n state.columnResize.col < state.table.frozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setFrozenColumnShadow(\n state.table.frozenColCount - 1,\n state.columnResize.isRightFrozen\n );\n } else if (state.table.options.frozenColCount) {\n state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1);\n }\n if (\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (state.table.options.rightFrozenColCount) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n }\n\n // stage rerender\n state.table.scenegraph.updateNextFrame();\n}\n\nfunction updateResizeColForColumn(detaX: number, state: StateManager) {\n if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n // in adaptive mode, the right column width can not be negative\n // const rightColWidth = state.table.getColWidth(state.columnResize.col + 1);\n // if (rightColWidth - detaX < 0) {\n // detaX = rightColWidth;\n // }\n state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n state.table.scenegraph.updateColWidth(state.columnResize.col + 1, -detaX);\n\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col);\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col + 1);\n } else {\n state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col);\n }\n}\n\nfunction updateResizeColForAll(detaX: number, state: StateManager) {\n // 全列调整\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n for (let col = state.table.frozenColCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) {\n // 是否禁止调整列宽disableColumnResize 对应canResizeColumn的逻辑判断\n if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n continue;\n }\n }\n // state.table.setColWidth(col, afterSize);\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n}\n\nfunction updateResizeColForIndicator(detaX: number, state: StateManager) {\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(state.columnResize.col, state.table.columnHeaderLevelCount);\n } else {\n const headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n resizeDimensionKey = headerPath.dimensionKey;\n resizeDimensionValue = headerPath.value;\n }\n for (let col = state.table.rowHeaderLevelCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) {\n const indicatorKey = layout.getIndicatorKey(col, state.table.columnHeaderLevelCount);\n if (layout.indicatorsAsCol && indicatorKey === resizeIndicatorKey) {\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n } else if (!layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(col, state.table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths?.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n if (headerPath && resizeDimensionKey === headerPath.dimensionKey && resizeDimensionValue === headerPath.value) {\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n }\n }\n}\n\nfunction updateResizeColForIndicatorGroup(detaX: number, state: StateManager) {\n // not support for PivotChart temply\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n const startCol = node.startInTotal + state.table.frozenColCount;\n const endCol = node.startInTotal + state.table.frozenColCount + node.size - 1;\n // 计算当前受影响列的总宽度 后面会利用这个计算比例\n const totalColWidth = state.table.getColsWidth(startCol, endCol);\n const moveX = detaX; // 纠正moveX 用于指标列均分该值\n for (let col = startCol; col <= endCol; col++) {\n // 是否禁止调整列宽disableColumnResize 对应canResizeColumn的逻辑判断\n if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n continue;\n }\n }\n const prevWidth = state.table.getColWidth(col);\n\n // deltaWidth <0.5 & >=-0.5 在updateRowWidth函数中会被Math.round处理为0,导致高度更新失效\n let deltaWidth = (prevWidth / totalColWidth) * moveX;\n if (deltaWidth > 0 && deltaWidth < 0.5) {\n deltaWidth = 0.5;\n } else if (deltaWidth < 0 && deltaWidth >= -0.5) {\n deltaWidth = -0.5;\n }\n state.table.scenegraph.updateColWidth(col, deltaWidth);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n}\n","import { isBoolean, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { StateManager } from '../state';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ColumnDefine } from '../../ts-types';\nimport type { Radio } from '@visactor/vrender-components';\n\nexport function setRadioState(\n col: number,\n row: number,\n field: string | number,\n type: 'column' | 'cell',\n indexInCell: number | undefined,\n state: StateManager\n) {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex) as number;\n if (type === 'column') {\n if (isNumber(indexInCell)) {\n state.radioState[field] = {};\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field] = dataIndex;\n }\n } else {\n if (!state.radioState[field]) {\n state.radioState[field] = {};\n }\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n }\n }\n}\n\nexport function getCellRadioState(col: number, row: number, table: BaseTableAPI): boolean | number {\n const define = table.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = table.getCellType(col, row);\n if (isValid(field) && cellType === 'checkbox') {\n const dataIndex = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row)) as number;\n const columnState = table.stateManager.radioState?.[field as string | number];\n if (isNumber(columnState)) {\n if (columnState === dataIndex) {\n return true;\n }\n } else if (isObject(columnState)) {\n const cellState = (columnState as Record)[dataIndex];\n if (isNumber(cellState)) {\n return cellState;\n }\n }\n }\n return false;\n}\n\nexport function syncRadioState(\n col: number,\n row: number,\n field: string | number,\n type: 'column' | 'cell',\n indexInCell: number | undefined,\n isChecked: boolean,\n state: StateManager\n): boolean {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex) as number;\n\n if (type === 'column') {\n if (!isValid(state.radioState[field]) && isChecked) {\n if (isNumber(indexInCell)) {\n state.radioState[field] = {};\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field] = dataIndex;\n }\n return true;\n } else if (isNumber(state.radioState[field]) && !isNumber(indexInCell)) {\n // column : column\n return state.radioState[field] === dataIndex;\n } else if (isNumber(state.radioState[field]) && isNumber(indexInCell)) {\n // column : cell\n return false;\n } else if (isObject(state.radioState[field]) && !isNumber(indexInCell)) {\n // cell : column\n return false;\n } else if (isObject(state.radioState[field]) && isNumber(indexInCell)) {\n // cell : cell\n return state.radioState[field][dataIndex] === indexInCell;\n }\n } else if (type === 'cell') {\n if (!isValid(state.radioState[field]) && isChecked) {\n state.radioState[field] = {};\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n return true;\n } else if (!isValid(state.radioState[field]?.[dataIndex]) && isChecked) {\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n return true;\n } else if (isBoolean(state.radioState[field]?.[dataIndex]) && !isNumber(indexInCell)) {\n // single : single\n return state.radioState[field][dataIndex];\n } else if (isBoolean(state.radioState[field]?.[dataIndex]) && isNumber(indexInCell)) {\n // single : multiple\n return false;\n } else if (isNumber(state.radioState[field]?.[dataIndex]) && !isNumber(indexInCell)) {\n // multiple : single\n return false;\n } else if (isNumber(state.radioState[field]?.[dataIndex]) && isNumber(indexInCell)) {\n // multiple : multiple\n return state.radioState[field][dataIndex] === indexInCell;\n }\n }\n }\n return isChecked;\n}\n\nexport function setCellRadioState(col: number, row: number, index: number | undefined, table: BaseTableAPI) {\n const cellGoup = table.scenegraph.getCell(col, row);\n if (!cellGoup) {\n return;\n }\n if (isNumber(index)) {\n const radio = cellGoup.getChildAt(index) as any;\n radio?._handlePointerUp();\n } else {\n const radio = cellGoup.getChildByName('radio') as any;\n radio?._handlePointerUp();\n }\n}\n\nexport function changeRadioOrder(sourceIndex: number, targetIndex: number, state: StateManager) {\n const { radioState, table } = state;\n if (table.internalProps.transpose) {\n sourceIndex = table.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = table.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = table.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = table.getRecordShowIndexByCell(0, targetIndex);\n }\n // if (sourceIndex !== targetIndex) {\n // const sourceRecord = radioState[sourceIndex];\n // radioState[sourceIndex] = radioState[targetIndex];\n // radioState[targetIndex] = sourceRecord;\n // }\n if (sourceIndex > targetIndex) {\n const sourceRecord = radioState[sourceIndex];\n for (let i = sourceIndex; i > targetIndex; i--) {\n radioState[i] = radioState[i - 1];\n }\n radioState[targetIndex] = sourceRecord;\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = radioState[sourceIndex];\n for (let i = sourceIndex; i < targetIndex; i++) {\n radioState[i] = radioState[i + 1];\n }\n radioState[targetIndex] = sourceRecord;\n }\n}\n","import { isArray, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { StateManager } from '../state';\nimport type { CheckboxColumnDefine, ListTableAPI } from '../../ts-types';\nimport { getOrApply } from '../../tools/helper';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CachedDataSource } from '../../data';\nimport type { CheckBox } from './../../vrender';\n\nexport function setCheckedState(\n col: number,\n row: number,\n field: string | number,\n checked: boolean | 'indeterminate',\n state: StateManager\n) {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex).toString();\n if (state.checkedState.has(dataIndex)) {\n state.checkedState.get(dataIndex)[field] = checked;\n } else {\n state.checkedState.set(dataIndex, {\n [field]: checked\n });\n }\n }\n}\n\nexport function setHeaderCheckedState(field: string | number, checked: boolean | 'indeterminate', state: StateManager) {\n state.headerCheckedState[field] = checked;\n state.checkedState?.forEach(recordCheckState => {\n recordCheckState[field] = checked;\n });\n}\n\n//#region CheckedState 状态维护\n\n/**\n * 创建cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\nexport function syncCheckedState(\n col: number,\n row: number,\n field: string | number,\n checked: boolean,\n state: StateManager\n): boolean | 'indeterminate' {\n if (state.table.isHeader(col, row)) {\n if (isValid(state.headerCheckedState[field])) {\n return state.headerCheckedState[field];\n } else if (typeof checked === 'function') {\n return undefined;\n } else if (isValid(checked)) {\n state.headerCheckedState[field] = checked;\n } else if (state.checkedState?.size > 0) {\n const isAllChecked = state.updateHeaderCheckedState(field, col, row);\n return isAllChecked;\n }\n return state.headerCheckedState[field];\n }\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex).toString();\n if (isValid(state.checkedState.get(dataIndex)?.[field])) {\n return state.checkedState.get(dataIndex)[field];\n }\n if (state.checkedState.has(dataIndex)) {\n state.checkedState.get(dataIndex)[field] = checked;\n } else {\n state.checkedState.set(dataIndex, {\n [field]: checked\n });\n }\n }\n return checked;\n}\n\n/**\n * 初始化check状态\n * @param records\n */\nexport function initCheckedState(records: any[], state: StateManager) {\n // clear checkbox state\n state.checkedState.clear();\n state.headerCheckedState = {};\n state.radioState = {};\n\n let isNeedInitHeaderCheckedStateFromRecord = false;\n state._checkboxCellTypeFields = [];\n state._headerCheckFuncs = {};\n state.table.internalProps.layoutMap.headerObjects.forEach((hd, index) => {\n if (hd.headerType === 'checkbox') {\n const headerChecked = (hd.define as CheckboxColumnDefine).checked as boolean;\n\n if (headerChecked === undefined || headerChecked === null || typeof headerChecked === 'function') {\n // 如果没有明确指定check的状态 则需要在下面遍历所有数据获取到节点状态 确定这个header的check状态\n isNeedInitHeaderCheckedStateFromRecord = true;\n if (typeof headerChecked === 'function') {\n state._headerCheckFuncs[hd.field as string | number] = headerChecked;\n }\n } else {\n state.headerCheckedState[hd.field as string | number] = headerChecked;\n }\n if (hd.define.cellType === 'checkbox' && !hd.fieldFormat) {\n state._checkboxCellTypeFields.push(hd.field as string | number);\n }\n }\n });\n\n // for row series number\n if (state.table.leftRowSeriesNumberCount === 1) {\n state.headerCheckedState._vtable_rowSeries_number = false;\n state._checkboxCellTypeFields.push('_vtable_rowSeries_number');\n isNeedInitHeaderCheckedStateFromRecord = true;\n } else if (state.table.leftRowSeriesNumberCount > 1) {\n for (let i = 0; i < state.table.leftRowSeriesNumberCount; i++) {\n state.headerCheckedState[`_vtable_rowSeries_number_${i}`] = false;\n state._checkboxCellTypeFields.push(`_vtable_rowSeries_number_${i}`);\n }\n isNeedInitHeaderCheckedStateFromRecord = true;\n }\n\n //如果没有明确指定check的状态 遍历所有数据获取到节点状态 确定这个header的check状态\n if (isNeedInitHeaderCheckedStateFromRecord) {\n initRecordCheckState(records, state);\n }\n}\n\n/**\n * 更新header单元checked的状态,依据当前列每一个数据checked的状态。\n * @param field\n * @returns\n */\nexport function updateHeaderCheckedState(\n field: string | number,\n state: StateManager,\n col: number,\n row: number\n): boolean | 'indeterminate' {\n let allChecked = true;\n let allUnChecked = true;\n let hasChecked = false;\n state.checkedState.forEach((check_state: Record, index: string | number | number[]) => {\n if ((index as string).includes(',')) {\n index = (index as string).split(',').map(item => {\n return Number(item);\n }) as number[];\n } else {\n index = Number(index);\n }\n const tableIndex = state.table.getTableIndexByRecordIndex(index as number);\n const mergeCell = (state.table as ListTableAPI).transpose\n ? state.table.getCustomMerge(tableIndex, row)\n : state.table.getCustomMerge(col, tableIndex);\n\n const data = state.table.dataSource?.get(index as number);\n if (mergeCell || (!state.table.internalProps.rowSeriesNumber?.enableTreeCheckbox && data.vtableMerge)) {\n // 不参与check状态的计算\n return;\n }\n if (check_state?.[field] !== true) {\n allChecked = false;\n } else {\n allUnChecked = false;\n hasChecked = true;\n }\n });\n\n if (allChecked) {\n state.headerCheckedState[field] = true;\n return allChecked;\n }\n\n if (allUnChecked) {\n state.headerCheckedState[field] = false;\n return false;\n }\n\n if (hasChecked) {\n state.headerCheckedState[field] = 'indeterminate';\n return 'indeterminate'; //半选状态\n }\n return false;\n}\n\n/**\n * setRecords的时候虽然调用了initCheckedState 进行了初始化 但当每个表头的checked状态都用配置了的话 初始化不会遍历全部数据\n * @param records\n */\nexport function initLeftRecordsCheckState(records: any[], state: StateManager) {\n for (let index = state.checkedState.size; index < records.length; index++) {\n const record = records[index];\n state._checkboxCellTypeFields.forEach(field => {\n const value = record[field] as string | { text: string; checked: boolean; disable: boolean } | boolean;\n let isChecked;\n if (isObject(value)) {\n isChecked = value.checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n const dataIndex = index.toString();\n if (!state.checkedState.get(dataIndex)) {\n state.checkedState.set(dataIndex, {});\n }\n state.checkedState.get(dataIndex)[field] = isChecked;\n });\n }\n}\n\nexport function setCellCheckboxState(\n col: number,\n row: number,\n checked: boolean | 'indeterminate',\n table: BaseTableAPI\n) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const checkbox = cellGroup?.getChildByName('checkbox') as any;\n if (!checkbox) {\n // update state\n const field = table.getHeaderField(col, row);\n if (table.isHeader(col, row)) {\n //点击的表头部分的checkbox 需要同时处理表头和body单元格的状态\n table.stateManager.setHeaderCheckedState(field, checked);\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n table.scenegraph.updateCheckboxCellState(col, row, checked);\n }\n } else {\n //点击的是body单元格的checkbox 处理本单元格的状态维护 同时需要检查表头是否改变状态\n table.stateManager.setCheckedState(col, row, field, checked);\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n const oldHeaderCheckedState = table.stateManager.headerCheckedState[field];\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState(field, col, row);\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n }\n return;\n }\n const { checked: oldChecked, indeterminate } = checkbox.attribute;\n\n if (indeterminate) {\n if (checked) {\n checkbox._handlePointerUp();\n } else {\n checkbox._handlePointerUp();\n checkbox._handlePointerUp();\n }\n } else if (oldChecked) {\n if (checked) {\n // do nothing\n } else {\n checkbox._handlePointerUp();\n }\n } else {\n if (checked) {\n checkbox._handlePointerUp();\n } else {\n // do nothing\n }\n }\n}\n\nexport function setCellCheckboxStateByAttribute(\n col: number,\n row: number,\n checked: boolean | 'indeterminate',\n table: BaseTableAPI\n) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const checkbox = cellGroup?.getChildByName('checkbox') as any;\n if (checkbox) {\n if (checked === 'indeterminate') {\n (checkbox as CheckBox).setAttribute('indeterminate', true);\n (checkbox as CheckBox).setAttribute('checked', undefined);\n } else {\n (checkbox as CheckBox).setAttribute('indeterminate', undefined);\n (checkbox as CheckBox).setAttribute('checked', checked);\n }\n }\n}\n\nexport function changeCheckboxOrder(sourceIndex: number, targetIndex: number, state: StateManager) {\n const { checkedState, table } = state;\n let source;\n let target;\n if (table.internalProps.transpose) {\n sourceIndex = table.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = table.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n // sourceIndex = table.getRecordShowIndexByCell(0, sourceIndex);\n // targetIndex = table.getRecordShowIndexByCell(0, targetIndex);\n\n source = table.isPivotTable() ? undefined : (table as any).getRecordIndexByCell(0, sourceIndex);\n target = table.isPivotTable() ? undefined : (table as any).getRecordIndexByCell(0, targetIndex);\n }\n\n if (isNumber(source) && isNumber(target)) {\n if (sourceIndex > targetIndex) {\n const sourceRecord = checkedState.get(sourceIndex.toString());\n for (let i = sourceIndex; i > targetIndex; i--) {\n // checkedState[i] = checkedState[i - 1];\n checkedState.set(i.toString(), checkedState.get((i - 1).toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(targetIndex.toString(), sourceRecord);\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = checkedState.get(sourceIndex.toString());\n for (let i = sourceIndex; i < targetIndex; i++) {\n // checkedState[i] = checkedState[i + 1];\n checkedState.set(i.toString(), checkedState.get((i + 1).toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(targetIndex.toString(), sourceRecord);\n }\n } else if (isArray(source) && isArray(target)) {\n sourceIndex = source[source.length - 1];\n targetIndex = target[target.length - 1];\n if (sourceIndex > targetIndex) {\n const sourceRecord = checkedState.get(source.toString());\n for (let i = sourceIndex; i > targetIndex; i--) {\n const now = [...source];\n now[now.length - 1] = i;\n const last = [...source];\n last[last.length - 1] = i - 1;\n checkedState.set(now.toString(), checkedState.get(last.toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(target.toString(), sourceRecord);\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = checkedState.get(source.toString());\n for (let i = sourceIndex; i < targetIndex; i++) {\n const now = [...source];\n now[now.length - 1] = i;\n const next = [...source];\n next[next.length - 1] = i + 1;\n checkedState.set(now.toString(), checkedState.get(next.toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(target.toString(), sourceRecord);\n }\n }\n}\n\nexport function getGroupCheckboxState(table: BaseTableAPI) {\n const result: any[] = [];\n const dataSource = table.dataSource as CachedDataSource;\n const groupKeyLength = dataSource.dataConfig.groupByRules.length + 1;\n dataSource.currentIndexedData.forEach((indexArr: number, index) => {\n if (isArray(indexArr) && indexArr.length === groupKeyLength) {\n // get record by index\n const { vtableOriginIndex } = (dataSource as any).getRawRecord(indexArr);\n result[vtableOriginIndex] = table.stateManager.checkedState.get(indexArr.toString());\n }\n });\n\n return result;\n}\n\nfunction initRecordCheckState(records: any[], state: StateManager) {\n const table = state.table;\n const start = table.isPivotTable()\n ? 0\n : table.internalProps.transpose\n ? table.rowHeaderLevelCount\n : table.columnHeaderLevelCount;\n const end = table.isPivotTable()\n ? isArray(records)\n ? records.length\n : 0\n : table.internalProps.transpose\n ? table.colCount\n : table.rowCount;\n for (let index = 0; index + start < end; index++) {\n const record = table.isPivotTable() ? records[index] : table.dataSource.get(index);\n // eslint-disable-next-line no-loop-func\n state._checkboxCellTypeFields.forEach(field => {\n const value =\n record && (record[field] as string | { text: string; checked: boolean; disable: boolean } | boolean);\n let isChecked;\n if (isObject(value)) {\n isChecked = value.checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n if (isChecked === undefined || isChecked === null) {\n const headerCheckFunc = state._headerCheckFuncs[field];\n if (headerCheckFunc) {\n //如果定义的checked是个函数 则需要每个都去计算这个值\n const cellAddr = state.table.getCellAddrByFieldRecord(field, index);\n const globalChecked = getOrApply(headerCheckFunc as any, {\n col: cellAddr.col,\n row: cellAddr.row,\n table: state.table,\n context: null,\n value\n });\n isChecked = globalChecked;\n }\n }\n const dataIndex = table.isPivotTable() ? index.toString() : state.table.dataSource.getIndexKey(index).toString();\n if (!state.checkedState.get(dataIndex)) {\n state.checkedState.set(dataIndex, {});\n }\n state.checkedState.get(dataIndex)[field] = isChecked;\n });\n }\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { IndicatorData } from '../../ts-types/list-table/layout-map/api';\nimport type { StateManager } from '../state';\n\n// rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\nexport function updateResizeRow(xInTable: number, yInTable: number, state: StateManager) {\n xInTable = Math.ceil(xInTable);\n yInTable = Math.ceil(yInTable);\n let detaY = state.rowResize.isBottomFrozen ? state.rowResize.y - yInTable : yInTable - state.rowResize.y;\n // table.getColWidth会使用Math.round,因此这里直接跳过小于1px的修改\n if (Math.abs(detaY) < 1) {\n return;\n }\n\n const heightCache = state.table.getRowHeight(state.rowResize.row);\n let height = heightCache;\n height += detaY;\n\n // limitMinHeight限制\n let afterSize = state.table.getRowHeight(state.rowResize.row) + detaY;\n if (afterSize < state.table.internalProps.limitMinHeight) {\n afterSize = state.table.internalProps.limitMinHeight;\n detaY = afterSize - state.table.getRowHeight(state.rowResize.row);\n }\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\n const bottomRowHeightCache = state.table.getRowHeight(state.rowResize.row + 1);\n let bottomRowHeight = bottomRowHeightCache;\n bottomRowHeight -= detaY;\n if (bottomRowHeight - detaY < state.table.internalProps.limitMinHeight) {\n detaY = bottomRowHeight - state.table.internalProps.limitMinHeight;\n }\n }\n detaY = Math.ceil(detaY);\n\n if (\n state.rowResize.row < state.table.columnHeaderLevelCount ||\n state.rowResize.row >= state.table.rowCount - state.table.bottomFrozenRowCount\n ) {\n updateResizeColForRow(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'indicator') {\n updateResizeColForIndicator(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'indicatorGroup') {\n updateResizeColForIndicatorGroup(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'all') {\n updateResizeColForAll(detaY, state);\n } else {\n updateResizeColForRow(detaY, state);\n }\n\n state.rowResize.y = yInTable;\n\n // update resize row component\n state.table.scenegraph.component.updateResizeRow(state.rowResize.row, xInTable, state.rowResize.isBottomFrozen);\n\n // stage rerender\n state.table.scenegraph.updateNextFrame();\n}\n\nfunction updateResizeColForRow(detaY: number, state: StateManager) {\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\n state.table.scenegraph.updateRowHeight(state.rowResize.row + 1, -detaY);\n\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row + 1);\n } else {\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\n }\n}\n\nfunction updateResizeColForAll(detaY: number, state: StateManager) {\n // 全列调整\n // const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n for (let row = state.table.frozenRowCount; row < state.table.rowCount - state.table.bottomFrozenRowCount; row++) {\n // // 是否禁止调整列宽disableRowResize 对应canResizeRow的逻辑判断\n // if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n // const cellDefine = layout.getBody(row, state.table.rowHeaderLevelCount);\n // if ((cellDefine as IndicatorData)?.disableRowResize) {\n // continue;\n // }\n // }\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n}\n\nfunction updateResizeColForIndicator(detaY: number, state: StateManager) {\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (!layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, state.rowResize.row);\n } else {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, state.rowResize.row);\n const headerPath = headerPaths.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n resizeDimensionKey = headerPath?.dimensionKey;\n resizeDimensionValue = headerPath?.value;\n }\n for (\n let row = state.table.columnHeaderLevelCount;\n row < state.table.rowCount - state.table.bottomFrozenRowCount;\n row++\n ) {\n const indicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, row);\n if (!layout.indicatorsAsCol && indicatorKey === resizeIndicatorKey) {\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n } else if (layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, row);\n const headerPath = headerPaths?.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n if (headerPath && resizeDimensionKey === headerPath.dimensionKey && resizeDimensionValue === headerPath.value) {\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n }\n }\n}\n\nfunction updateResizeColForIndicatorGroup(detaY: number, state: StateManager) {\n // not support for PivotChart temply\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount, state.rowResize.row);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n const startRow = node.startInTotal + state.table.frozenRowCount;\n const endRow = node.startInTotal + state.table.frozenRowCount + node.size - 1;\n // 计算当前受影响列的总宽度 后面会利用这个计算比例\n const totalRowHeight = state.table.getRowsHeight(startRow, endRow);\n const moveY = detaY; // 纠正moveX 用于指标列均分该值\n for (let row = startRow; row <= endRow; row++) {\n // 是否禁止调整列宽disableRowResize 对应canResizeRow的逻辑判断\n // if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n // const cellDefine = layout.getBody(state.table.columnHeaderLevelCount, row);\n // // if ((cellDefine as IndicatorData)?.disableRowResize) {\n // // continue;\n // // }\n // }\n const prevHeight = state.table.getRowHeight(row);\n\n // deltaHeight <0.5 & >=-0.5 在updateRowHeight函数中会被Math.round处理为0,导致高度更新失效\n let deltaHeight = (prevHeight / totalRowHeight) * moveY;\n if (deltaHeight > 0 && deltaHeight < 0.5) {\n deltaHeight = 0.5;\n } else if (deltaHeight < 0 && deltaHeight >= -0.5) {\n deltaHeight = -0.51;\n }\n state.table.scenegraph.updateRowHeight(row, deltaHeight);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n}\n","import type { CustomSelectionStyle, StateManager } from '../state';\nimport type { CellRange } from '../../ts-types';\nimport type { IRect, IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { createRect } from '@visactor/vrender-core';\nimport { updateAllSelectComponent } from '../../scenegraph/select/update-select-border';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\n\nexport function deletaCustomSelectRanges(state: StateManager) {\n const { customSelectedRangeComponents } = state.table.scenegraph;\n // delete graphic\n customSelectedRangeComponents.forEach((selectComp: { rect: IRect }, key: string) => {\n selectComp.rect.delete();\n });\n customSelectedRangeComponents.clear();\n state.select.customSelectRanges = [];\n}\n\nexport function addCustomSelectRanges(\n customSelectRanges: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[],\n state: StateManager\n) {\n const { customSelectedRangeComponents } = state.table.scenegraph;\n customSelectRanges.forEach((customRange: { range: CellRange; style: CustomSelectionStyle }) => {\n const { range, style } = customRange;\n const rect = createRect({\n fill: style.cellBgColor ?? false,\n stroke: style.cellBorderColor ?? false,\n lineWidth: style.cellBorderLineWidth ?? 0,\n lineDash: style.cellBorderLineDash ?? [],\n pickable: false\n });\n customSelectedRangeComponents.set(`${range.start.col}-${range.start.row}-${range.end.col}-${range.end.row}`, {\n rect,\n role: 'body'\n });\n });\n state.select.customSelectRanges = customSelectRanges;\n updateAllSelectComponent(state.table.scenegraph);\n state.table.scenegraph.updateNextFrame();\n}\n","import { Rect } from '../tools/Rect';\nimport { MenuType } from '../scenegraph/component/menu';\nimport type { Group } from '../scenegraph/graphic/group';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type {\n CellAddress,\n CellPosition,\n CellRange,\n DropDownMenuHighlightInfo,\n IDimensionInfo,\n ListTableAPI,\n MenuListItem,\n PivotTableAPI,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { HighlightScope, InteractionState, SortType } from '../ts-types';\nimport { IconFuncTypeEnum } from '../ts-types';\nimport { checkMultiCellInSelect } from './common/check-in-select';\nimport { updateHoverPosition } from './hover/update-position';\nimport { dealFreeze } from './frozen';\nimport { dealSort } from './sort';\nimport { selectEnd, updateSelectPosition } from './select/update-position';\nimport { cellInRange, getOrApply } from '../tools/helper';\nimport type { ListTable } from '../ListTable';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { Bounds, isObject, isString, isValid } from '@visactor/vutils';\nimport { updateDrill } from './drill';\nimport { clearChartHover, updateChartHover } from './spark-line';\nimport { endMoveCol, startMoveCol, updateMoveCol } from './cell-move';\nimport type { FederatedWheelEvent, IRectGraphicAttribute } from './../vrender';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { getIconAndPositionFromTarget } from '../scenegraph/utils/icon';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { debounce } from '../tools/debounce';\nimport { updateResizeColumn } from './resize/update-resize-column';\nimport { changeRadioOrder, setRadioState, syncRadioState } from './radio/radio';\nimport {\n changeCheckboxOrder,\n initCheckedState,\n initLeftRecordsCheckState,\n setCheckedState,\n setHeaderCheckedState,\n syncCheckedState,\n updateHeaderCheckedState\n} from './checkbox/checkbox';\nimport { updateResizeRow } from './resize/update-resize-row';\nimport { deleteAllSelectingBorder } from '../scenegraph/select/delete-select-border';\nimport type { PivotTable } from '../PivotTable';\nimport { traverseObject } from '../tools/util';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\nimport { addCustomSelectRanges, deletaCustomSelectRanges } from './select/custom-select';\nimport { expendCellRange } from '../tools/merge-range';\n\nexport type CustomSelectionStyle = {\n cellBorderColor?: string; //边框颜色\n cellBorderLineWidth?: number; //边框线宽度\n cellBorderLineDash?: number[]; //边框线虚线\n cellBgColor?: string; //选择框背景颜色\n};\n\nexport class StateManager {\n table: BaseTableAPI;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState;\n interactionStateBeforeScroll?: InteractionState;\n // select记录两个位置,第二个位置只在range模式生效\n select: {\n ranges: (CellRange & { skipBodyMerge?: boolean })[];\n highlightScope: HighlightScope;\n cellPos: CellPosition;\n // cellPosStart: CellPosition;\n // cellPosEnd: CellPosition;\n singleStyle?: boolean; // select当前单元格是否使用单独样式\n disableHeader?: boolean; // 是否禁用表头select\n disableCtrlMultiSelect?: boolean; // 是否禁用ctrl多选框\n /** 点击表头单元格效果\n * 'inline': 点击行表头则整行选中,选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的表头单元格;\n * 'body': 不选择表头,点击行表头则选择该行所有 body 单元格,点击列表头则选择该列所有 body 单元格。\n */\n headerSelectMode?: 'inline' | 'cell' | 'body';\n highlightInRange?: boolean;\n selecting: boolean;\n customSelectRanges?: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[];\n };\n fillHandle: {\n direction?: 'top' | 'bottom' | 'left' | 'right';\n directionRow?: boolean;\n isFilling: boolean;\n startX: number;\n startY: number;\n beforeFillMinCol?: number;\n beforeFillMinRow?: number;\n beforeFillMaxCol?: number;\n beforeFillMaxRow?: number;\n };\n hover: {\n highlightScope: HighlightScope; // hover模式\n singleStyle?: boolean; // hover当前单元格是否使用单独样式\n disableHeader?: boolean; // 是否禁用表头hover\n cellPos: CellPosition; // 记录当前hover的位置\n cellPosContainHeader?: CellPosition; // 记录当前hover的位置(在disableHeader时启用,记录真实位置)\n };\n hoverIcon: {\n col: number;\n row: number;\n icon: Icon | null;\n };\n residentHoverIcon?: {\n col: number;\n row: number;\n icon: Icon | null;\n };\n columnResize: {\n col: number;\n /** x坐标是相对table内坐标 */\n x: number;\n resizing: boolean;\n isRightFrozen?: boolean;\n };\n rowResize: {\n row: number;\n /** x坐标是相对table内坐标 */\n y: number;\n resizing: boolean;\n isBottomFrozen?: boolean;\n };\n columnMove: {\n colSource: number;\n colTarget: number;\n rowSource: number;\n rowTarget: number;\n x: number;\n y: number;\n moving: boolean;\n };\n menu: {\n x: number;\n y: number;\n isShow: boolean;\n itemList: MenuListItem[];\n bounds: Bounds;\n highlightIndex: number;\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n sort: Array<{\n col: number;\n row: number;\n field?: string;\n // fieldKey?: string;\n order: SortOrder;\n icon?: Icon;\n }>;\n frozen: {\n col: number;\n // row: number;\n icon?: Icon;\n };\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n tablePosition: {\n absoluteX: number;\n absoluteY: number;\n };\n drill: {\n dimensionKey?: string;\n title?: string;\n drillDown?: boolean;\n drillUp?: boolean;\n col: number;\n row: number;\n };\n // 当鼠标hover到迷你图上时存储行列值,好在鼠标移动到其他单元格时清理Sparkline的高亮状态\n sparkLine: {\n col: number;\n row: number;\n };\n _clearVerticalScrollBar: any;\n _clearHorizontalScrollBar: any;\n\n fastScrolling: boolean = false;\n\n /**\n * 对应原始数据列表顺序的checked状态\n */\n // checkedState: Record[] = [];\n checkedState: Map> = new Map();\n /**\n * 对应表头checked状态\n */\n headerCheckedState: Record = {};\n\n _checkboxCellTypeFields: (string | number)[] = [];\n\n _headerCheckFuncs: Record = {};\n\n radioState: Record> = {};\n // 供滚动重置为default使用\n resetInteractionState = debounce((state?: InteractionState) => {\n this.updateInteractionState(state ?? InteractionState.default);\n }, 100);\n // _x: number = 0;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.initState();\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n }\n\n initState() {\n this._initState();\n this.setHoverState();\n this.setSelectState();\n this.setFrozenState();\n }\n /** updateOption更新配置的情况下 调用接口*/\n updateOptionSetState() {\n this._updateOptionSetState();\n this.setHoverState();\n this.setSelectState();\n this.setFrozenState();\n }\n _updateOptionSetState() {\n this.interactionState = InteractionState.default;\n // this.select = {\n // highlightScope: HighlightScope.single,\n // ranges: [],\n // cellPos: {\n // col: -1,\n // row: -1\n // },\n // selecting: false\n // };\n // this.hover = {\n // highlightScope: HighlightScope.single,\n // cellPos: {\n // col: -1,\n // row: -1\n // }\n // };\n this.hoverIcon = {\n col: -1,\n row: -1,\n icon: null\n };\n this.columnResize = {\n col: -1,\n x: 0,\n resizing: false\n };\n this.rowResize = {\n row: -1,\n y: 0,\n resizing: false\n };\n this.columnMove = {\n colSource: -1,\n colTarget: -1,\n rowSource: -1,\n rowTarget: -1,\n x: 0,\n y: 0,\n moving: false\n };\n this.menu = {\n x: -1,\n y: -1,\n isShow: false,\n itemList: [],\n bounds: new Bounds(),\n highlightIndex: -1,\n dropDownMenuHighlight: []\n };\n this.sort = [\n {\n col: -1,\n row: -1,\n order: 'normal'\n }\n ];\n this.frozen = {\n col: -1\n // row: -1,\n };\n // this.scroll = {\n // horizontalBarPos: 0,\n // verticalBarPos: 0\n // };\n this.tablePosition = {\n absoluteX: 0,\n absoluteY: 0\n };\n this.drill = {\n col: -1,\n row: -1\n };\n this.sparkLine = {\n col: -1,\n row: -1\n };\n }\n _initState() {\n this.interactionState = InteractionState.default;\n this.select = {\n highlightScope: HighlightScope.single,\n ranges: [],\n cellPos: {\n col: -1,\n row: -1\n },\n selecting: false\n };\n this.fillHandle = {\n isFilling: false,\n startX: undefined,\n startY: undefined\n };\n this.hover = {\n highlightScope: HighlightScope.single,\n cellPos: {\n col: -1,\n row: -1\n }\n };\n this.hoverIcon = {\n col: -1,\n row: -1,\n icon: null\n };\n this.columnResize = {\n col: -1,\n x: 0,\n resizing: false\n };\n this.rowResize = {\n row: -1,\n y: 0,\n resizing: false\n };\n this.columnMove = {\n colSource: -1,\n colTarget: -1,\n rowSource: -1,\n rowTarget: -1,\n x: 0,\n y: 0,\n moving: false\n };\n this.menu = {\n x: -1,\n y: -1,\n isShow: false,\n itemList: [],\n bounds: new Bounds(),\n highlightIndex: -1,\n dropDownMenuHighlight: []\n };\n this.sort = [\n {\n col: -1,\n row: -1,\n order: 'normal'\n }\n ];\n this.frozen = {\n col: -1\n // row: -1,\n };\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.tablePosition = {\n absoluteX: 0,\n absoluteY: 0\n };\n this.drill = {\n col: -1,\n row: -1\n };\n this.sparkLine = {\n col: -1,\n row: -1\n };\n }\n\n setHoverState() {\n const { highlightMode, disableHover, disableHeaderHover } = this.table.options.hover ?? {\n highlightMode: 'cell'\n };\n if (!disableHover) {\n if (highlightMode === 'cross') {\n this.hover.highlightScope = HighlightScope.cross;\n } else if (highlightMode === 'row') {\n this.hover.highlightScope = HighlightScope.row;\n } else if (highlightMode === 'column') {\n this.hover.highlightScope = HighlightScope.column;\n } else if (highlightMode === 'cell') {\n this.hover.highlightScope = HighlightScope.single;\n }\n } else {\n this.hover.highlightScope = HighlightScope.none;\n }\n\n this.hover.singleStyle = !disableHover;\n this.hover.disableHeader = disableHeaderHover;\n if (this.hover.highlightScope === HighlightScope.none || disableHeaderHover) {\n this.hover.cellPosContainHeader = {\n col: -1,\n row: -1\n };\n }\n }\n\n setSelectState() {\n const {\n // enableRowHighlight,\n // enableColumnHighlight,\n /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode,\n disableSelect,\n disableHeaderSelect,\n highlightMode,\n highlightInRange\n } = Object.assign(\n {},\n {\n /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode: 'inline',\n disableSelect: false,\n disableHeaderSelect: false,\n highlightMode: 'cell',\n highlightInRange: false\n },\n this.table.options.select\n );\n\n // if (enableRowHighlight && enableColumnHighlight) {\n // this.select.highlightScope = HighlightScope.cross;\n // } else if (enableRowHighlight) {\n // this.select.highlightScope = HighlightScope.row;\n // } else if (enableColumnHighlight) {\n // this.select.highlightScope = HighlightScope.column;\n // } else\n if (disableSelect === true) {\n this.select.highlightScope = HighlightScope.none;\n } else {\n if (highlightMode === 'cross') {\n this.select.highlightScope = HighlightScope.cross;\n } else if (highlightMode === 'row') {\n this.select.highlightScope = HighlightScope.row;\n } else if (highlightMode === 'column') {\n this.select.highlightScope = HighlightScope.column;\n } else {\n this.select.highlightScope = HighlightScope.single;\n }\n }\n\n this.select.singleStyle = !disableSelect;\n this.select.disableHeader = disableHeaderSelect;\n this.select.headerSelectMode = headerSelectMode;\n this.select.highlightInRange = highlightInRange;\n this.select.disableCtrlMultiSelect = this.table.options.keyboardOptions?.ctrlMultiSelect === false;\n }\n\n isSelected(col: number, row: number): boolean {\n // if (!this.select.selecting) {\n // return false;\n // }\n let seled = false;\n this.select.ranges.forEach((range: CellRange) => {\n if (cellInRange(range, col, row)) {\n seled = true;\n }\n });\n return seled;\n }\n\n setSortState(sortState: SortState | SortState[]) {\n const state = this;\n sortState = !sortState || Array.isArray(sortState) ? sortState : [sortState];\n ////this.sort[this.sort.length - 1].field = sortState[sortState.length - 1]?.field as string;\n // this.sort.fieldKey = sortState?.fieldKey as string;\n ////this.sort[this.sort.length - 1].order = sortState[sortState.length - 1]?.order;\n // // 这里有一个问题,目前sortState中一般只传入了fieldKey,但是getCellRangeByField需要field\n // const range = this.table.getCellRangeByField(this.sort.field, 0);\n // if (range) {\n // this.sort.col = range.start.col;\n // this.sort.row = range.start.row;\n // }\n\n function flattenColumns(columns: any) {\n const result: Array = [];\n\n function flatten(cols: any, parentStartIndex = 0) {\n cols.forEach((col: any) => {\n const startIndex = col.startInTotal\n ? col.startInTotal + state.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0\n : parentStartIndex;\n if (col.columns) {\n flatten(col.columns, startIndex);\n } else {\n result.push({\n ...col,\n startIndex\n });\n }\n });\n }\n\n flatten(columns);\n return result;\n }\n\n const sort =\n sortState &&\n (sortState as SortState[]).reduce((prev, item) => {\n const column = flattenColumns((this.table.internalProps as any).columns)?.find(\n column => column?.field === item?.field\n );\n //let path = (item as any)?.event?.path?.findLast((item:any)=>item.col!=undefined);\n if (this.table.internalProps.transpose) {\n prev.push({\n field: item.field,\n order: item.order,\n row: column?.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n col: column?.level\n } as any);\n } else {\n prev.push({\n field: item.field,\n order: item.order,\n col: column?.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n row: column?.level\n } as any);\n }\n\n return prev;\n }, []);\n\n this.sort = sort || [];\n }\n\n setFrozenState() {\n this.frozen.col = this.table.frozenColCount - 1;\n // this.frozen.row = 0;\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n\n if (mode === InteractionState.scrolling) {\n this.interactionStateBeforeScroll = this.interactionState;\n }\n\n // console.log('updateInteractionState', mode);\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateHoverhighlightScope(mode: HighlightScope) {\n if (this.hover.highlightScope === mode) {\n return;\n }\n this.hover.highlightScope = mode;\n // 处理mode 更新后逻辑\n // ......\n }\n\n updateHoverPos(col: number, row: number) {\n updateHoverPosition(this, col, row);\n }\n\n updateSelectPos(\n col: number,\n row: number,\n isShift: boolean = false,\n isCtrl: boolean = false,\n isSelectAll: boolean = false,\n makeSelectCellVisible: boolean = true,\n skipBodyMerge: boolean = false\n ) {\n if (row !== -1 && row !== -1) {\n this.select.selecting = true;\n }\n updateSelectPosition(this, col, row, isShift, isCtrl, isSelectAll, makeSelectCellVisible, skipBodyMerge);\n }\n\n checkCellRangeInSelect(cellPosStart: CellAddress, cellPosEnd: CellAddress) {\n return checkMultiCellInSelect(\n cellPosStart,\n cellPosEnd,\n this.select.ranges,\n // this.select.cellPosEnd,\n this.select.highlightScope\n );\n }\n\n updateHoverIcon(col: number, row: number, target: any, cellGroup: Group) {\n if (this.residentHoverIcon?.icon && target === this.residentHoverIcon?.icon) {\n return; // 常驻hover icon不更新交互\n }\n const iconInfo = getIconAndPositionFromTarget(target);\n if (!iconInfo) {\n // target非icon\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n\n this.hoverIcon.col = -1;\n this.hoverIcon.col = -1;\n this.hoverIcon.icon = null;\n this.table.scenegraph.updateNextFrame();\n }\n return;\n }\n if (iconInfo.type === 'richtext-icon') {\n // richtext icon 特殊处理\n const inlineIcon = iconInfo.icon;\n // 清除当前hover icon\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n\n this.hoverIcon.col = -1;\n this.hoverIcon.col = -1;\n this.hoverIcon.icon = null;\n this.table.scenegraph.updateNextFrame();\n }\n // hover展示tooltip\n if (inlineIcon.attribute.tooltip) {\n const tooltipOptions: TooltipOptions = {\n content: inlineIcon.attribute.tooltip.title,\n referencePosition: {\n rect: iconInfo.position,\n placement: inlineIcon.attribute.tooltip.placement\n },\n style: Object.assign(\n {},\n this.table.internalProps.theme?.tooltipStyle,\n inlineIcon.tooltip?.style,\n inlineIcon.attribute?.tooltip?.style\n ),\n disappearDelay: inlineIcon.attribute.tooltip.disappearDelay\n };\n if (!this.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n this.table.showTooltip(col, row, tooltipOptions);\n }\n }\n } else {\n // const icon = target as Icon;\n const icon = iconInfo.icon;\n if (icon !== this.hoverIcon.icon) {\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n }\n\n this.hoverIcon.col = col;\n this.hoverIcon.row = row;\n this.hoverIcon.icon = icon;\n\n // 更新icon样式\n this.table.scenegraph.setIconHoverStyle(icon, col, row, cellGroup);\n this.table.scenegraph.updateNextFrame();\n }\n }\n }\n\n isResizeCol(): boolean {\n return this.columnResize.resizing;\n }\n isResizeRow(): boolean {\n return this.rowResize.resizing;\n }\n isFillHandle(): boolean {\n return this.fillHandle.isFilling;\n }\n isSelecting(): boolean {\n return this.select.selecting;\n }\n endSelectCells(fireListener: boolean = true, fireClear: boolean = true) {\n if (this.select.selecting) {\n this.select.selecting = false;\n if (this.select.ranges.length === 0) {\n return;\n }\n\n // this.select.ranges deduplication\n const currentRange = this.select.ranges[this.select.ranges.length - 1];\n\n // deal with merge cell\n expendCellRange(currentRange, this.table);\n\n let isSame = false;\n for (let i = 0; i < this.select.ranges.length - 1; i++) {\n const range = this.select.ranges[i];\n if (\n range &&\n range.start.col === currentRange.start.col &&\n range.start.row === currentRange.start.row &&\n range.end.col === currentRange.end.col &&\n range.end.row === currentRange.end.row\n ) {\n isSame = true;\n break;\n }\n }\n if (isSame) {\n this.select.ranges.pop();\n // remove selecting rect\n deleteAllSelectingBorder(this.table.scenegraph);\n this.table.scenegraph.selectingRangeComponents.clear();\n } else {\n selectEnd(this.table.scenegraph);\n }\n\n // 触发SELECTED_CELL\n const lastCol = this.select.ranges[this.select.ranges.length - 1].end.col;\n const lastRow = this.select.ranges[this.select.ranges.length - 1].end.row;\n fireListener &&\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CELL, {\n ranges: this.select.ranges,\n col: lastCol,\n row: lastRow\n });\n } else if (fireClear) {\n if (this.select.ranges.length === 0) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CLEAR, {});\n }\n }\n }\n\n endResizeCol() {\n setTimeout(() => {\n this.columnResize.resizing = false;\n }, 0);\n this.table.scenegraph.updateChartSizeForResizeColWidth(this.columnResize.col);\n this.checkFrozen();\n this.table.scenegraph.component.hideResizeCol();\n this.table.scenegraph.updateNextFrame();\n }\n startResizeCol(col: number, x: number, y: number, isRightFrozen?: boolean) {\n this.columnResize.resizing = true;\n this.columnResize.col = col;\n this.columnResize.x = x;\n this.columnResize.isRightFrozen = isRightFrozen;\n\n this.table.scenegraph.component.showResizeCol(col, y, isRightFrozen);\n\n // // 调整列宽期间清空选中清空\n // const isHasSelected = !!this.select.ranges?.length;\n // this.updateSelectPos(-1, -1);\n // this.endSelectCells(true, isHasSelected);\n this.table.scenegraph.updateNextFrame();\n }\n updateResizeCol(xInTable: number, yInTable: number) {\n updateResizeColumn(xInTable, yInTable, this);\n }\n\n endResizeRow() {\n setTimeout(() => {\n this.rowResize.resizing = false;\n }, 0);\n this.table.scenegraph.updateChartSizeForResizeRowHeight(this.rowResize.row);\n // this.checkFrozen();\n this.table.scenegraph.component.hideResizeRow();\n this.table.scenegraph.updateNextFrame();\n }\n startResizeRow(row: number, x: number, y: number, isBottomFrozen?: boolean) {\n this.rowResize.resizing = true;\n this.rowResize.row = row;\n this.rowResize.y = y;\n this.rowResize.isBottomFrozen = isBottomFrozen;\n\n this.table.scenegraph.component.showResizeRow(row, x, isBottomFrozen);\n\n // // 调整列宽期间清空选中清空\n // const isHasSelected = !!this.select.ranges?.length;\n // this.updateSelectPos(-1, -1);\n // this.endSelectCells(true, isHasSelected);\n this.table.scenegraph.updateNextFrame();\n }\n updateResizeRow(xInTable: number, yInTable: number) {\n updateResizeRow(xInTable, yInTable, this);\n }\n\n startFillSelect(x: number, y: number) {\n this.fillHandle.isFilling = true;\n this.fillHandle.startX = x;\n this.fillHandle.startY = y;\n const currentRange = this.select.ranges[this.select.ranges.length - 1];\n this.fillHandle.beforeFillMinCol = Math.min(currentRange.start.col, currentRange.end.col);\n this.fillHandle.beforeFillMinRow = Math.min(currentRange.start.row, currentRange.end.row);\n this.fillHandle.beforeFillMaxCol = Math.max(currentRange.start.col, currentRange.end.col);\n this.fillHandle.beforeFillMaxRow = Math.max(currentRange.start.row, currentRange.end.row);\n // this.table.scenegraph.updateNextFrame();\n this.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_FILL_HANDLE, {});\n }\n endFillSelect() {\n this.fillHandle.isFilling = false;\n this.fillHandle.startX = undefined;\n this.fillHandle.startY = undefined;\n this.fillHandle.directionRow = undefined;\n const currentMinCol = Math.min(this.select.ranges[0].start.col, this.select.ranges[0].end.col);\n const currentMinRow = Math.min(this.select.ranges[0].start.row, this.select.ranges[0].end.row);\n const currentMaxCol = Math.max(this.select.ranges[0].start.col, this.select.ranges[0].end.col);\n const currentMaxRow = Math.max(this.select.ranges[0].start.row, this.select.ranges[0].end.row);\n //如果选中区域没有发生变化 不触发事件\n if (\n this.fillHandle.beforeFillMinCol !== currentMinCol ||\n this.fillHandle.beforeFillMinRow !== currentMinRow ||\n this.fillHandle.beforeFillMaxCol !== currentMaxCol ||\n this.fillHandle.beforeFillMaxRow !== currentMaxRow\n ) {\n this.table.eventManager.isDraging &&\n this.table.fireListeners(TABLE_EVENT_TYPE.DRAG_FILL_HANDLE_END, { direction: this.fillHandle.direction });\n }\n this.fillHandle.beforeFillMaxCol = undefined;\n this.fillHandle.beforeFillMaxRow = undefined;\n this.fillHandle.beforeFillMinCol = undefined;\n this.fillHandle.beforeFillMinRow = undefined;\n }\n\n startMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n startMoveCol(col, row, x, y, this, event);\n }\n updateMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n updateMoveCol(col, row, x, y, this, event);\n }\n isMoveCol(): boolean {\n return this.columnMove.moving;\n }\n endMoveCol(): boolean {\n return endMoveCol(this);\n }\n\n checkFrozen(): boolean {\n // 判断固定列的总宽度 是否过大\n let originalFrozenColCount =\n this.table.isListTable() && !this.table.internalProps.transpose\n ? this.table.options.frozenColCount\n : this.table.isPivotChart()\n ? this.table.rowHeaderLevelCount ?? 0\n : Math.max(\n (this.table.rowHeaderLevelCount ?? 0) + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount,\n this.table.options.frozenColCount ?? 0\n );\n if (originalFrozenColCount) {\n if (originalFrozenColCount > this.table.colCount) {\n originalFrozenColCount = this.table.colCount;\n }\n if (this.table.tableNoFrameWidth - this.table.getColsWidth(0, originalFrozenColCount - 1) <= 120) {\n this.table._setFrozenColCount(0);\n this.setFrozenCol(-1);\n return false;\n } else if (this.table.frozenColCount !== originalFrozenColCount) {\n this.table._setFrozenColCount(originalFrozenColCount);\n this.setFrozenCol(originalFrozenColCount);\n return false;\n }\n }\n return true;\n }\n setFrozenCol(col: number) {\n if (col !== this.frozen.col) {\n // const oldFrozenCol = this.frozen.col;\n this.frozen.col = col;\n\n // 更新scenegraph,这里因为dealFreeze更新了table里存储的frozen信息,会影响scenegraph里的getCell\n // 因此先更新scenegraph结构再更新icon\n this.table.scenegraph.updateFrozen();\n\n // 更新icon\n this.table.scenegraph.updateFrozenIcon(0, this.table.colCount - 1);\n } else {\n this.table.scenegraph.updateFrozenIcon(0, this.table.colCount - 1);\n }\n }\n checkVerticalScrollBarEnd() {\n const totalHeight = this.table.getAllRowsHeight();\n const scrollTop = this.scroll.verticalBarPos;\n const viewHeight = this.table.tableNoFrameHeight;\n\n if (scrollTop + viewHeight >= totalHeight) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL_VERTICAL_END, {\n scrollTop,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight,\n viewWidth: this.table.tableNoFrameWidth\n });\n }\n }\n checkHorizontalScrollBarEnd() {\n const totalWidth = this.table.getAllColsWidth();\n const scrollLeft = this.scroll.horizontalBarPos;\n const viewWidth = this.table.tableNoFrameWidth;\n\n if (scrollLeft + viewWidth >= totalWidth) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL_HORIZONTAL_END, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth\n });\n }\n }\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this.table.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this.table.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this.table.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n this.scroll.verticalBarPos -= this.table.scenegraph.proxy.deltaY;\n this.table.scenegraph.proxy.deltaY = 0;\n\n // 滚动期间清空选中清空\n this.updateHoverPos(-1, -1);\n // this.updateSelectPos(-1, -1);\n\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: undefined,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n\n if (oldVerticalBarPos !== this.scroll.verticalBarPos) {\n this.checkVerticalScrollBarEnd();\n }\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this.table.getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this.table.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this.table.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this.scroll.horizontalBarPos -= this.table.scenegraph.proxy.deltaX;\n this.table.scenegraph.proxy.deltaX = 0;\n // console.log(this.table.scenegraph.bodyGroup.lastChild.attribute);\n // this.table.scenegraph.bodyGroup.lastChild.onBeforeAttributeUpdate = attr => {\n // if (attr.x) {\n // debugger;\n // }\n // };\n // 滚动期间清空选中清空\n this.updateHoverPos(-1, -1);\n // this.updateSelectPos(-1, -1);\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: undefined,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n\n if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n this.checkHorizontalScrollBarEnd();\n }\n }\n setScrollTop(top: number, event?: FederatedWheelEvent, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this.table.getAllRowsHeight();\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n top = Math.max(0, Math.min(top, totalHeight - this.table.scenegraph.height - sizeTolerance));\n top = Math.ceil(top);\n // 滚动期间清空选中清空 如果调用接口hover状态需要保留,但是如果不调用updateHoverPos透视图处于hover状态的图就不能及时更新 所以这里单独判断了isPivotChart\n if (top !== this.scroll.verticalBarPos || this.table.isPivotChart()) {\n this.updateHoverPos(-1, -1);\n }\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this.table.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this.table.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this.table.scenegraph.height);\n this.table.scenegraph.component.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n\n this.checkVerticalScrollBarEnd();\n }\n }\n setScrollLeft(left: number, event?: FederatedWheelEvent, triggerEvent: boolean = true) {\n const oldScrollLeft = this.table.scrollLeft;\n // 矫正left值范围\n const totalWidth = this.table.getAllColsWidth();\n const frozenWidth = this.table.getFrozenColsWidth();\n\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n left = Math.max(0, Math.min(left, totalWidth - this.table.scenegraph.width - sizeTolerance));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n if (left !== this.scroll.horizontalBarPos) {\n this.updateHoverPos(-1, -1);\n }\n // this.table.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this.table.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this.table.scenegraph.width);\n this.table.scenegraph.component.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n\n this.checkHorizontalScrollBarEnd();\n }\n }\n hideVerticalScrollBar() {\n this.table.scenegraph.component.hideVerticalScrollBar();\n }\n showVerticalScrollBar(autoHide?: boolean) {\n this.table.scenegraph.component.showVerticalScrollBar();\n if (autoHide) {\n // 滚轮触发滚动条显示后,异步隐藏\n clearTimeout(this._clearVerticalScrollBar);\n this._clearVerticalScrollBar = setTimeout(() => {\n this.table.scenegraph?.component.hideVerticalScrollBar();\n }, 1000);\n }\n }\n hideHorizontalScrollBar() {\n this.table.scenegraph.component.hideHorizontalScrollBar();\n }\n showHorizontalScrollBar(autoHide?: boolean) {\n this.table.scenegraph.component.showHorizontalScrollBar();\n if (autoHide) {\n // 滚轮触发滚动条显示后,异步隐藏\n clearTimeout(this._clearHorizontalScrollBar);\n this._clearHorizontalScrollBar = setTimeout(() => {\n this.table.scenegraph?.component.hideHorizontalScrollBar();\n }, 1000);\n }\n }\n\n triggerContextMenu(col: number, row: number, x: number, y: number) {\n if (this.menu.isShow && this.menu.x === x && this.menu.y === y) {\n this.hideMenu();\n } else {\n this.showContextMenu(col, row, x, y);\n }\n }\n\n showContextMenu(col: number, row: number, x: number, y: number) {\n if (this.table.internalProps.menu?.contextMenuItems) {\n if (this.table.internalProps.menu.renderMode === 'html') {\n // dom菜单通过LG_EVENT_TYPE.DROPDOWN_ICON_CLICK事件触发\n this.menu.isShow = true;\n } else {\n this.menu.isShow = true;\n this.menu.x = x;\n this.menu.y = y;\n this.table.scenegraph.component.menu.attach(x, y, col, row, MenuType.contextmenu);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.SHOW_MENU, { x, y, col, row, type: 'contextmenu' });\n }\n }\n\n triggerDropDownMenu(col: number, row: number, x: number, y: number, event: Event) {\n this.table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_ICON_CLICK, {\n col,\n row,\n event\n });\n if (this.menu.isShow) {\n this.hideMenu();\n } else {\n this.showDropDownMenu(col, row, x, y);\n }\n }\n\n showDropDownMenu(col: number, row: number, x: number, y: number) {\n if (this.table.internalProps.menu.renderMode === 'html') {\n // dom菜单通过LG_EVENT_TYPE.CONTEXTMENU_CELL事件触发\n this.menu.isShow = true;\n } else {\n this.menu.isShow = true;\n this.table.scenegraph.component.menu.attach(x, y, col, row, MenuType.dropDown);\n this.menu.bounds = this.table.scenegraph.component.menu.bounds as Bounds;\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.SHOW_MENU, { x, y, col, row, type: 'dropDown' });\n\n if (this.residentHoverIcon) {\n this.table.scenegraph.setIconNormalStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row\n );\n }\n // 常驻显示下拉菜单hover按钮\n const cellGroup = this.table.scenegraph.getCell(col, row);\n let icon: Icon;\n cellGroup.forEachChildren((child: Icon) => {\n if (child.attribute.funcType === IconFuncTypeEnum.dropDown) {\n icon = child;\n return true;\n }\n return false;\n });\n if (icon) {\n this.residentHoverIcon = {\n col,\n row,\n icon\n };\n this.table.scenegraph.setIconHoverStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row,\n cellGroup\n );\n // (icon as any).oldVisibleTime = icon.attribute.visibleTime;\n // icon.setAttribute('visibleTime', 'always');\n // icon.setAttribute('opacity', 1);\n this.table.scenegraph.residentHoverIcon(col, row);\n }\n }\n\n hideMenu() {\n if (this.menu.isShow) {\n this.table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null);\n this.table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null);\n this.menu.isShow = false;\n this.table.scenegraph.component.menu.detach();\n if (this.residentHoverIcon) {\n this.table.scenegraph.setIconNormalStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row\n );\n // this.residentHoverIcon.icon.setAttribute('visibleTime', (this.residentHoverIcon.icon as any).oldVisibleTime);\n // this.residentHoverIcon.icon.setAttribute(\n // 'opacity',\n // this.residentHoverIcon.icon.attribute.visibleTime === 'always' ? 1 : 0\n // );\n this.table.scenegraph.resetResidentHoverIcon(this.residentHoverIcon.col, this.residentHoverIcon.row);\n this.residentHoverIcon = null;\n }\n }\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.menu.dropDownMenuHighlight = cells;\n for (let i = 0; i < cells.length; i++) {\n const { col, row } = cells[i];\n const range = this.table.getCellRange(col, row);\n if (!range) {\n continue;\n }\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n this.table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n const highlights = this.menu.dropDownMenuHighlight;\n if (Array.isArray(highlights)) {\n for (let i = 0; i < highlights.length; i++) {\n const highlight = highlights[i];\n let { col, row } = highlight;\n const { field, menuKey } = highlight;\n // 这部分比较hack,需要和张宏再确认一下\n // 没有col和row时,通过field或cellHeaderPaths确定col和row\n if (typeof col !== 'number' || typeof row !== 'number') {\n if (this.table.isPivotTable() && typeof Array.isArray(field)) {\n const cellAddress = (this.table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(\n field as IDimensionInfo[]\n );\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n } else {\n const cellAddress = this.table.internalProps.layoutMap.getHeaderCellAddressByField(field as string);\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n }\n }\n\n if (isValid(col) && isValid(row) && this.table.isCellRangeEqual(colNow, rowNow, col, row)) {\n // 手动查询menuKey对应的dropDownIndex\n const headerC = this.table._getHeaderLayoutMap(col ?? colNow, row ?? rowNow);\n\n const dropDownMenu = (headerC as HeaderData).dropDownMenu || this.table.globalDropDownMenu;\n if (dropDownMenu) {\n for (let i = 0; i < dropDownMenu.length; i++) {\n const item: any = dropDownMenu[i];\n if (isObject(item) && ((item as any).menuKey || (item as any).text) === (menuKey || '') && i === index) {\n // return i === index;\n return true;\n } else if (isString(item) && item === menuKey && i === index) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n }\n triggerSort(col: number, row: number, iconMark: Icon, event: Event) {\n if (this.table.isPivotTable()) {\n // 透视表不执行sort操作\n const sortState = (this.table as PivotTableAPI).getPivotSortState(col, row);\n\n const order = sortState ? (sortState.toUpperCase() as SortOrder) : 'NORMAL';\n const new_order = order === 'ASC' ? 'DESC' : order === 'DESC' ? 'NORMAL' : 'ASC';\n // const new_order = order === 'ASC' ? 'DESC' : 'ASC';\n (this.table as PivotTable).sort(col, row, new_order);\n\n // // 触发透视表排序按钮点击\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.PIVOT_SORT_CLICK, {\n col: col,\n row: row,\n order: order || 'normal',\n dimensionInfo: (this.table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row),\n cellLocation: this.table.getCellLocation(col, row),\n event\n });\n return;\n }\n\n const previousSort = [...this.sort];\n const previousSortItem =\n this.table.internalProps.multipleSort || !previousSort.length ? null : this.sort[this.sort.length - 1];\n\n // 执行sort\n dealSort(col, row, this.table as ListTableAPI, event);\n\n const range = this.table.getCellRange(col, row);\n const currentSortItem = this.sort.find(item => item.col === range.start.col && item.row === range.start.row);\n\n const oldSortCol = this.table.internalProps.multipleSort || !previousSortItem ? null : previousSortItem.col;\n const oldSortRow = this.table.internalProps.multipleSort || !previousSortItem ? null : previousSortItem.row;\n //currentSortItem.col = col;\n //currentSortItem.row = row;\n\n const currentSortItemIndex = previousSort.findIndex(item => item.col === col && item.row === row);\n if (currentSortItemIndex >= 0) {\n previousSort.splice(currentSortItemIndex, 1);\n }\n\n // 更新icon\n this.table.scenegraph.updateSortIcon({\n col: col,\n row: row,\n iconMark,\n order: currentSortItem?.order,\n oldSortCol,\n oldSortRow,\n oldIconMark: previousSortItem?.icon\n });\n if (currentSortItem) {\n currentSortItem.icon = iconMark;\n }\n\n if (!this.table.internalProps.multipleSort) {\n previousSort.forEach((sortItem: any) => {\n this.table.scenegraph.updateSortIcon({\n col: null,\n row: null,\n iconMark: null,\n order: 'normal',\n oldSortCol: sortItem.col,\n oldSortRow: sortItem.row,\n oldIconMark: null\n });\n });\n }\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.AFTER_SORT, {\n order: currentSortItem?.order,\n field: this.table.getHeaderField(col, row),\n event\n });\n }\n\n updateSortState(sortState: SortState[]) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n for (let index = 0; index < sortState.length; index++) {\n if (\n sortState[index].field === this.sort[index]?.field &&\n sortState[sortState.length - 1].order === this.sort[index]?.order\n ) {\n return;\n }\n const oldSortCol = this.table.internalProps.multipleSort ? null : this.sort[index]?.col || null;\n const oldSortRow = this.table.internalProps.multipleSort ? null : this.sort[index]?.row || null;\n const name =\n this.sort[index]?.order === 'asc'\n ? 'sort_downward'\n : this.sort[index]?.order === 'desc'\n ? 'sort_upward'\n : 'sort_normal';\n this.setSortState(sortState.slice(0, index + 1));\n // 获取sort对应的行列位置\n const cellAddress = this.table.internalProps.layoutMap.getHeaderCellAddressByField(\n sortState[index].field as string\n );\n this.sort[index].col = cellAddress.col;\n this.sort[index].row = cellAddress.row;\n const cellGroup = this.table.scenegraph.getCell(this.sort[index].col, this.sort[index].row);\n //const iconMark = cellGroup.getChildByName(name, true);\n let iconMark: Icon;\n\n traverseObject(cellGroup, 'children', (mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n iconMark = mark;\n return true;\n }\n return false;\n });\n\n // 更新icon\n this.table.scenegraph.updateSortIcon({\n col: this.sort[index].col,\n row: this.sort[index].row,\n iconMark,\n order: this.sort[index].order,\n oldSortCol,\n oldSortRow,\n oldIconMark: this.sort[index]?.icon\n });\n }\n\n const normalHeaders: Array = [];\n (this.table.internalProps.layoutMap.columnTree as any).tree.children.forEach((item: any) => {\n if (!sortState.some((state: SortState) => state.field === item.field)) {\n normalHeaders.push(item);\n }\n });\n\n for (let index = 0; index < normalHeaders.length; index++) {\n const column = normalHeaders[index];\n this.table.scenegraph.updateSortIcon({\n col: null,\n row: null,\n iconMark: null,\n order: null,\n oldSortCol: column.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n oldSortRow: column.level,\n oldIconMark: null\n });\n }\n }\n\n triggerFreeze(col: number, row: number, iconMark: Icon) {\n if (this.table.isPivotTable() || (this.table as ListTable).transpose) {\n return;\n }\n // let oldFrowzenCol = this.frowzen.col;\n // let oldFrowzenRow = this.frowzen.row;\n\n // 更新frozen\n dealFreeze(col, row, this.table);\n if ((this.table as any).hasListeners(PIVOT_TABLE_EVENT_TYPE.FREEZE_CLICK)) {\n const fields: ColumnData[] = (this.table as ListTable).internalProps.layoutMap.columnObjects.slice(0, col + 1);\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.FREEZE_CLICK, {\n col: col,\n row: row,\n fields: fields.reduce((pre: any, cur: any) => pre.concat(cur.field), []),\n colCount: this.table.frozenColCount\n });\n }\n // // 更新scenegraph,这里因为dealFreeze更新了table里存储的frozen信息,会影响scenegraph里的getCell\n // // 因此先更新scenegraph结构再更新icon\n // this.table.scenegraph.updateFrozen(this.frowzen.col);\n\n // // 更新icon\n // this.table.scenegraph.updateFrozenIcon(oldFrowzenCol, this.frowzen.col);\n\n this.frozen.icon = iconMark;\n }\n\n updateCursor(mode: string = 'default') {\n this.table.getElement().style.cursor = mode;\n }\n\n updateDrillState(\n dimensionKey: string,\n title: string,\n drillDown: boolean,\n drillUp: boolean,\n col: number,\n row: number\n ) {\n this.drill.dimensionKey = dimensionKey;\n this.drill.title = title;\n this.drill.drillDown = drillDown;\n this.drill.drillUp = drillUp;\n this.drill.col = col;\n this.drill.row = row;\n updateDrill(col, row, drillDown, drillUp, this.table);\n }\n\n updateSparklineHoverPose(col: number, row: number, x: number, y: number) {\n if (this.sparkLine.col !== -1 && this.sparkLine.row !== -1) {\n clearChartHover(this.sparkLine.col, this.sparkLine.row, this.table);\n }\n let isUpdated = false;\n if (col !== -1 && row !== -1) {\n isUpdated = updateChartHover(col, row, x, y, this.table);\n }\n if (isUpdated) {\n this.sparkLine.col = col;\n this.sparkLine.row = row;\n } else {\n this.sparkLine.col = -1;\n this.sparkLine.row = -1;\n }\n }\n setCheckedState(col: number, row: number, field: string | number, checked: boolean | 'indeterminate') {\n return setCheckedState(col, row, field, checked, this);\n }\n setHeaderCheckedState(field: string | number, checked: boolean | 'indeterminate') {\n return setHeaderCheckedState(field, checked, this);\n }\n\n //#region CheckedState 状态维护\n\n /**\n * 创建cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\n syncCheckedState(col: number, row: number, field: string | number, checked: boolean): boolean | 'indeterminate' {\n return syncCheckedState(col, row, field, checked, this);\n }\n /**\n * 创建表头cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\n // syncHeaderCheckedState(field: string | number, checked: boolean): boolean | 'indeterminate' {\n // if (isValid(this.headerCheckedState[field])) {\n // return this.headerCheckedState[field];\n // } else if (typeof checked === 'function') {\n // return undefined;\n // } else if (isValid(checked)) {\n // this.headerCheckedState[field] = checked;\n // } else if (this.checkedState?.length > 0) {\n // const isAllChecked = this.updateHeaderCheckedState(field);\n // return isAllChecked;\n // }\n // return this.headerCheckedState[field];\n // }\n /**\n * 初始化check状态\n * @param records\n */\n initCheckedState(records: any[]) {\n return initCheckedState(records, this);\n }\n /**\n * 更新header单元checked的状态,依据当前列每一个数据checked的状态。\n * @param field\n * @returns\n */\n updateHeaderCheckedState(field: string | number, col: number, row: number): boolean | 'indeterminate' {\n return updateHeaderCheckedState(field, this, col, row);\n }\n /**\n * setRecords的时候虽然调用了initCheckedState 进行了初始化 但当每个表头的checked状态都用配置了的话 初始化不会遍历全部数据\n * @param records\n */\n initLeftRecordsCheckState(records: any[]) {\n return initLeftRecordsCheckState(records, this);\n }\n //#endregion\n\n setRadioState(\n col: number,\n row: number,\n field: string | number,\n radioType: 'column' | 'cell',\n indexInCell: number | undefined\n ) {\n setRadioState(col, row, field, radioType, indexInCell, this);\n }\n\n syncRadioState(\n col: number,\n row: number,\n field: string | number,\n radioType: 'column' | 'cell',\n indexInCell: number | undefined,\n isChecked: boolean\n ) {\n return syncRadioState(col, row, field, radioType, indexInCell, isChecked, this);\n }\n\n changeCheckboxAndRadioOrder(sourceIndex: number, targetIndex: number) {\n if (this.checkedState.size) {\n changeCheckboxOrder(sourceIndex, targetIndex, this);\n }\n if (this.radioState.length) {\n changeRadioOrder(sourceIndex, targetIndex, this);\n }\n }\n\n setCustomSelectRanges(\n customSelectRanges: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[]\n ) {\n deletaCustomSelectRanges(this);\n addCustomSelectRanges(customSelectRanges, this);\n }\n}\n","import { isFunction } from '@visactor/vutils';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { Env } from '../tools/env';\nimport { regUrl } from '../tools/global';\nimport type { LinkColumnDefine, MousePointerCellEvent } from '../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport type { IImageColumnBodyDefine } from '../ts-types/list-table/define/image-define';\n\nexport function bindMediaClick(table: BaseTableAPI): void {\n if (Env.mode === 'browser') {\n // table.hasMedia = false;\n\n table.on(TABLE_EVENT_TYPE.CLICK_CELL, (e: MousePointerCellEvent) => {\n //如果目前是在某个icon上,如收起展开按钮 则不进行其他点击逻辑\n const { col, row } = e;\n\n if (e.target.type === 'image' && (e.target as any).role && (e.target as any).role.startsWith('icon')) {\n // click icon\n return;\n }\n let cellType;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n cellType = table.isPivotTable()\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : (table.getHeaderDefine(col, row) as HeaderData).headerType;\n } else {\n cellType = table.getBodyColumnType(col, row);\n }\n const columnDefine = table.isHeader(col, row)\n ? table.getHeaderDefine(col, row)\n : table.getBodyColumnDefine(col, row);\n const cellValue = table.getCellValue(col, row);\n const cellOriginValue = table.getCellOriginValue(col, row);\n if (cellType === 'link') {\n const linkJump = (columnDefine as LinkColumnDefine).linkJump !== false;\n if (!linkJump) {\n return;\n }\n\n // 点击链接,打开相应页面\n const templateLink = (columnDefine as LinkColumnDefine).templateLink;\n const linkDetect = (columnDefine as LinkColumnDefine).linkDetect !== false;\n let url;\n if (templateLink) {\n // 如果有模板链接,使用模板\n const rowData = table.getCellOriginRecord(col, row);\n if (rowData.vtableMerge) {\n // group title\n return;\n }\n const data = Object.assign(\n {\n __value: cellValue,\n __dataValue: cellOriginValue\n },\n rowData\n );\n if (isFunction(templateLink)) {\n url = templateLink(data, col, row, table);\n } else {\n const re = /\\{\\s*(\\S+?)\\s*\\}/g;\n url = templateLink.replace(re, (matchs: string, key: string) => {\n matchs;\n return (data as any)[key];\n });\n }\n } else if (!linkDetect) {\n url = cellValue;\n } else if (regUrl.test(cellValue)) {\n // 没有模板链接,使用单元格内的字符串\n url = cellValue;\n } else {\n return;\n }\n\n if (!url) {\n return;\n }\n\n const linkTarget = (columnDefine as LinkColumnDefine).linkTarget;\n const linkWindowFeatures = (columnDefine as LinkColumnDefine).linkWindowFeatures;\n window.open(url, linkTarget, linkWindowFeatures);\n } else if (cellType === 'image') {\n // 点击图片,打开放大图片\n const { clickToPreview } = columnDefine as IImageColumnBodyDefine;\n if (clickToPreview === false) {\n return;\n }\n\n // 开启蒙版\n const overlay = document.createElement('div');\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.backgroundColor = 'rgba(30, 30, 30, 0.4)';\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n overlay.style.overflow = 'hidden';\n overlay.style.zIndex = '9999';\n\n overlay.addEventListener('click', e => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n // overlay.addEventListener('pointermove', (e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // });\n // overlay.addEventListener('mousemove', (e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // });\n // 创建图片\n const image = new Image();\n image.src = cellValue;\n image.style.maxWidth = '80%';\n image.style.maxHeight = '80%';\n overlay.appendChild(image);\n\n document.body.appendChild(overlay);\n } else if (cellType === 'video') {\n // 点击视频,弹出播放窗口\n const { clickToPreview } = columnDefine as IImageColumnBodyDefine;\n if (clickToPreview === false) {\n return;\n }\n\n // 开启蒙版\n const overlay = document.createElement('div');\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.backgroundColor = 'rgba(30, 30, 30, 0.4)';\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n overlay.style.overflow = 'hidden';\n overlay.style.zIndex = '9999';\n\n overlay.addEventListener('click', e => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n\n // 创建视频\n const video = document.createElement('video');\n video.src = cellValue;\n video.style.maxWidth = '80%';\n video.style.maxHeight = '80%';\n video.setAttribute('preload', 'auto');\n video.setAttribute('controls', 'true');\n overlay.appendChild(video);\n\n document.body.appendChild(overlay);\n }\n });\n }\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { DrillMenuEventInfo, MousePointerCellEvent, PivotTableAPI } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\n\nexport function bindDrillEvent(table: BaseTableAPI) {\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, (e: MousePointerCellEvent) => {\n //是否需要显示出上钻下钻按钮\n // if (!table.isPivotTable()) {\n // return;\n // }\n const { col, row } = e;\n if (col === -1 || row === -1) {\n return;\n }\n const dimension = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getHeaderDimension(col, row);\n if (dimension?.drillDown || dimension?.drillUp) {\n table.stateManager.updateDrillState(\n dimension.dimensionKey,\n dimension.title,\n dimension.drillDown,\n dimension.drillUp,\n col,\n row\n );\n } else {\n table.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, (e: MousePointerCellEvent) => {\n table.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n });\n}\n\nexport function drillClick(table: BaseTableAPI) {\n table.fireListeners(PIVOT_TABLE_EVENT_TYPE.DRILLMENU_CLICK, table.stateManager.drill as DrillMenuEventInfo);\n}\n\nexport function checkHaveDrill(table: PivotTableAPI) {\n const rowsDefine = (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowsDefine;\n const columnsDefine = (table.internalProps.layoutMap as PivotHeaderLayoutMap).columnsDefine;\n for (let i = 0; i < rowsDefine.length; i++) {\n const row = rowsDefine[i];\n if (typeof row !== 'string' && (row.drillDown || row.drillUp)) {\n return true;\n }\n }\n for (let i = 0; i < columnsDefine.length; i++) {\n const column = columnsDefine[i];\n if (typeof column !== 'string' && (column.drillDown || column.drillUp)) {\n return true;\n }\n }\n return false;\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { MousePointerCellEvent } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function bindSparklineHoverEvent(table: BaseTableAPI) {\n if (table.eventManager.bindSparklineHoverEvent) {\n return;\n }\n\n // 判断是否有sparkline 类型\n let hasSparkLine = false;\n if (table.isPivotTable()) {\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n hasSparkLine = layoutMap.indicatorsDefine.some(indicator => {\n return typeof indicator !== 'string' && indicator.cellType === 'sparkline';\n });\n } else {\n const layoutMap = table.internalProps.layoutMap as SimpleHeaderLayoutMap;\n hasSparkLine = layoutMap.columnObjects.some(column => {\n return column.cellType === 'sparkline' || typeof column.cellType === 'function';\n });\n }\n\n if (!hasSparkLine) {\n return;\n }\n\n table.eventManager.bindSparklineHoverEvent = true;\n\n table.on(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, (e: MousePointerCellEvent) => {\n const { col, row, x, y } = e;\n const type = table.getBodyColumnType(col, row);\n if (type !== 'sparkline') {\n table.stateManager.updateSparklineHoverPose(-1, -1, 0, 0);\n }\n table.stateManager.updateSparklineHoverPose(col, row, x, y);\n });\n\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, (e: MousePointerCellEvent) => {\n table.stateManager.updateSparklineHoverPose(-1, -1, 0, 0);\n });\n}\n","import type { StateManager } from '../state/state';\nimport { InteractionState } from '../ts-types';\nimport type { FederatedWheelEvent } from './../vrender';\n\n/**\n *\n * @param event\n * @param state\n * @param isWheelEvent 是否是由鼠标或者触摸板原生滚动事件触发进入?\n */\nexport function handleWhell(event: FederatedWheelEvent, state: StateManager, isWheelEvent: boolean = true) {\n let { deltaX, deltaY } = event;\n // 如果按住了shift 则进行横向滚动 纵向不滚动\n if (event.shiftKey && event.deltaY) {\n //mac电脑按住shift 鼠标滚动deltaX和deltaY是自动互换的,所以此逻辑只针对windows电脑有效及mac触摸板有效\n deltaX = deltaY;\n deltaY = 0;\n }\n const [optimizedDeltaX, optimizedDeltaY] = optimizeScrollXY(deltaX, deltaY, { horizontal: 1, vertical: 1 });\n if (optimizedDeltaX || optimizedDeltaY) {\n if (state.interactionState !== InteractionState.scrolling) {\n state.updateInteractionState(InteractionState.scrolling);\n }\n }\n\n if (optimizedDeltaX) {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(true);\n }\n if (optimizedDeltaY) {\n state.setScrollTop(state.scroll.verticalBarPos + optimizedDeltaY, event);\n state.showVerticalScrollBar(true);\n }\n isWheelEvent && state.resetInteractionState(state.interactionStateBeforeScroll);\n if (\n event.nativeEvent?.cancelable &&\n (state.table.internalProps.overscrollBehavior === 'none' ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, state)))\n ) {\n event.nativeEvent.preventDefault();\n }\n}\n\ninterface ScrollSpeedRatio {\n horizontal?: number;\n vertical?: number;\n}\n\n/**\n * 优化滚动方向,对于小角度的滚动,固定为一个方向\n * @param x\n * @param y\n * @param ratio\n */\nfunction optimizeScrollXY(x: number, y: number, ratio: ScrollSpeedRatio): [number, number] {\n const ANGLE = 2; // 调参 根据斜率来调整xy方向的划分\n const angle = Math.abs(x / y);\n\n // 经过滚动优化之后的 x, y\n const deltaX = angle <= 1 / ANGLE ? 0 : x;\n const deltaY = angle > ANGLE ? 0 : y;\n\n return [Math.ceil(deltaX * (ratio.horizontal ?? 0)), Math.ceil(deltaY * (ratio.vertical ?? 0))];\n}\n\nexport function isVerticalScrollable(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight === 0) {\n return false;\n }\n return !isScrollToTop(deltaY, state) && !isScrollToBottom(deltaY, state);\n}\n\nexport function isHorizontalScrollable(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n if (totalWidth === 0) {\n return false;\n }\n return !isScrollToLeft(deltaX, state) && !isScrollToRight(deltaX, state);\n}\n\nfunction isScrollToTop(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY <= 0 && state.scroll.verticalBarPos < 1;\n}\n\nfunction isScrollToBottom(deltaY: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY >= 0 && Math.abs(state.scroll.verticalBarPos - totalHeight) < 1 + sizeTolerance;\n}\n\nfunction isScrollToLeft(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX <= 0 && state.scroll.horizontalBarPos < 1;\n}\n\nfunction isScrollToRight(deltaX: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX >= 0 && Math.abs(state.scroll.horizontalBarPos - totalWidth) < 1 + sizeTolerance;\n}\n\nexport class InertiaScroll {\n friction: number;\n lastTime: number;\n speedX: number;\n speedY: number;\n stateManager: StateManager;\n runingId: number;\n scrollHandle: (dx: number, dy: number) => void;\n constructor(stateManager: StateManager) {\n this.stateManager = stateManager;\n }\n setScrollHandle(scrollHandle: (dx: number, dy: number) => void) {\n this.scrollHandle = scrollHandle;\n }\n\n startInertia(speedX: number, speedY: number, friction: number) {\n this.lastTime = Date.now();\n this.speedX = speedX;\n this.speedY = speedY;\n this.friction = friction;\n if (!this.runingId) {\n this.runingId = requestAnimationFrame(this.inertia.bind(this));\n }\n }\n inertia() {\n const now = Date.now();\n const dffTime = now - this.lastTime;\n let stopped = true;\n const f = Math.pow(this.friction, dffTime / 16);\n const newSpeedX = f * this.speedX;\n const newSpeedY = f * this.speedY;\n let dx = 0;\n let dy = 0;\n if (Math.abs(newSpeedX) > 0.05) {\n stopped = false;\n dx = ((this.speedX + newSpeedX) / 2) * dffTime;\n }\n if (Math.abs(newSpeedY) > 0.05) {\n stopped = false;\n dy = ((this.speedY + newSpeedY) / 2) * dffTime;\n }\n this.scrollHandle?.(dx, dy);\n if (stopped) {\n this.runingId = null;\n return;\n }\n this.lastTime = now;\n this.speedX = newSpeedX;\n this.speedY = newSpeedY;\n\n this.runingId = requestAnimationFrame(this.inertia.bind(this));\n }\n endInertia() {\n cancelAnimationFrame(this.runingId);\n this.runingId = null;\n }\n isInertiaScrolling() {\n return !!this.runingId;\n }\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { ListTableAPI } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function fireMoveColEventListeners(table: BaseTableAPI, endMoveColSuccess: boolean, e: Event) {\n if (\n endMoveColSuccess &&\n table.stateManager.columnMove?.colSource !== -1 &&\n table.stateManager.columnMove?.rowSource !== -1 &&\n table.stateManager.columnMove?.colTarget !== -1 &&\n table.stateManager.columnMove?.rowTarget !== -1\n ) {\n // 下面触发CHANGE_HEADER_POSITION 区别于pointerup\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION)) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, {\n target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n source: {\n col: table.stateManager.columnMove.colSource,\n row: table.stateManager.columnMove.rowSource\n },\n event: e\n });\n }\n } else if (!endMoveColSuccess) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL)) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, {\n target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n source: {\n col: table.stateManager.columnMove.colSource,\n row: table.stateManager.columnMove.rowSource\n },\n event: e\n });\n }\n }\n}\n","import type { IEventTarget, FederatedPointerEvent, FederatedWheelEvent } from './../../vrender';\nimport { Gesture, vglobal } from './../../vrender';\nimport type {\n ListTableAPI,\n MousePointerCellEvent,\n MousePointerMultiCellEvent,\n MousePointerSparklineEvent,\n RadioColumnDefine\n} from '../../ts-types';\nimport { IconFuncTypeEnum, InteractionState } from '../../ts-types';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet, regIndexReg } from '../util';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { isValid } from '@visactor/vutils';\nimport { getIconAndPositionFromTarget } from '../../scenegraph/utils/icon';\nimport { cellInRanges, getPromiseValue } from '../../tools/helper';\nimport { Rect } from '../../tools/Rect';\nimport type { EventManager } from '../event';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { IIconGraphicAttribute } from '../../scenegraph/graphic/icon';\nimport { getCellMergeInfo } from '../../scenegraph/utils/get-cell-merge';\nimport type { CheckBox, CheckboxAttributes, Radio } from '@visactor/vrender-components';\nimport { handleWhell } from '../scroll';\nimport { fireMoveColEventListeners } from '../helper';\nexport function bindTableGroupListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n\n table.scenegraph.tableGroup.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n const lastX = table.eventManager.LastPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastPointerXY?.y ?? e.y;\n table.eventManager.LastPointerXY = { x: e.x, y: e.y };\n // const eventArgsSet: SceneEvent = (table as any).getCellEventArgsSet(e);\n if (eventManager.touchSetTimeout) {\n // 移动端事件特殊处理\n clearTimeout(eventManager.touchSetTimeout);\n eventManager.touchSetTimeout = undefined;\n }\n const eventArgsSet = getCellEventArgsSet(e);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n\n // 触发MOUSEMOVE_TABLE\n if (eventArgsSet.eventArgs && (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n\n if (\n stateManager.interactionState === InteractionState.grabing &&\n !(table as ListTableAPI).editorManager?.editingEditor\n ) {\n if (Math.abs(lastX - e.x) + Math.abs(lastY - e.y) >= 1) {\n if (stateManager.isResizeCol() || stateManager.isResizeRow()) {\n /* do nothing */\n } else if (stateManager.isMoveCol()) {\n eventManager.dealColumnMover(eventArgsSet);\n } else if (stateManager.isFillHandle()) {\n eventManager.dealFillSelect(eventArgsSet, true);\n } else {\n table.options.select?.disableDragSelect || eventManager.dealTableSelect(eventArgsSet, true);\n }\n }\n return;\n } else if (\n !table.options.select?.disableDragSelect &&\n table.eventManager.isDraging &&\n stateManager.isSelecting() &&\n !(table as ListTableAPI).editorManager?.editingEditor\n ) {\n eventManager.dealTableSelect(eventArgsSet, true);\n }\n // 更新列宽调整pointer\n // if (stateManager.isResizeCol() || eventManager.checkColumnResize(eventArgsSet)) {\n // // 更新填充柄pointer\n // if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n // stateManager.updateCursor('crosshair');\n // } else {\n // stateManager.updateCursor('col-resize');\n // }\n // } else {\n // stateManager.updateCursor();\n // }\n\n const cellGoup: any = e.path.find(node => (node as any).role === 'cell');\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL)) {\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (\n // cellGoup?.role === 'cell' && // 这里去掉这个判断 处理当鼠标移动到滚动条上 也需要触发leave事件\n table.stateManager.hover.cellPos.col !== -1 &&\n table.stateManager.hover.cellPos.row !== -1 &&\n (cellGoup?.col !== table.stateManager.hover.cellPos.col ||\n cellGoup?.row !== table.stateManager.hover.cellPos.row)\n ) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, {\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row,\n cellRange: table.getCellRangeRelativeRect({\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target\n });\n }\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEENTER_CELL)) {\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (\n cellGoup?.role === 'cell' &&\n isValid(cellGoup.col) &&\n isValid(cellGoup.row) &&\n (cellGoup.col !== table.stateManager.hover.cellPos.col ||\n cellGoup.row !== table.stateManager.hover.cellPos.row) &&\n (cellGoup.col !== table.stateManager.hover.cellPosContainHeader?.col ||\n cellGoup.row !== table.stateManager.hover.cellPosContainHeader?.row)\n ) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_CELL, {\n col: cellGoup.col,\n row: cellGoup.row,\n cellRange: table.getCellRangeRelativeRect({\n col: cellGoup.col,\n row: cellGoup.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n }\n\n eventManager.dealIconHover(eventArgsSet);\n eventManager.dealTableHover(eventArgsSet);\n\n // 触发MOUSEMOVE_CELL\n if (eventArgsSet.eventArgs && (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEMOVE_CELL)) {\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n event: e.nativeEvent,\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('pointerout', (e: FederatedPointerEvent) => {\n const eventArgsSet = getCellEventArgsSet(e);\n const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (cellGoup?.role === 'table') {\n eventManager.dealTableHover();\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('pointerover', (e: FederatedPointerEvent) => {\n const eventArgsSet = getCellEventArgsSet(e);\n const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n // console.log('pointerover', cellGoup);\n\n if (\n cellGoup &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL) &&\n cellGoup.type === 'symbol'\n ) {\n const cellGroup = e.composedPath().find(p => (p as any).roll === 'cell');\n if (cellGroup) {\n const { col, row } = cellGroup as unknown as Group;\n const eventInfo: MousePointerSparklineEvent = {\n col,\n row,\n field: table.getHeaderField(col, row),\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: table.getBodyColumnDefine(col, row).title,\n cellRange: table.getCellRelativeRect(col, row),\n event: e.nativeEvent,\n sparkline: {\n pointData: undefined // chartPoint.pointData,\n },\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: eventArgsSet?.eventArgs?.target\n };\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL, eventInfo);\n }\n }\n //MOUSEENTER_CELL 不能在这里触发 引发在单元格内移动会触发多次的问题【迷你图的单元格中】\n // if ((table as any).hasListeners(DG_EVENT_TYPE.MOUSEENTER_CELL)) {\n // const eventArgsSet = getCellEventArgsSet(e);\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n // console.log('hover cell', table.stateManager.hover.cellPos);\n // if (\n // cellGoup?.role === 'cell' &&\n // (cellGoup.col !== table.stateManager.hover.cellPos.col ||\n // cellGoup.row !== table.stateManager.hover.cellPos.row)\n // ) {\n // table.fireListeners(DG_EVENT_TYPE.MOUSEENTER_CELL, {\n // col: cellGoup.col,\n // row: cellGoup.row,\n // cellRange: table.getCellRangeRelativeRect({\n // col: cellGoup.col,\n // row: cellGoup.row,\n // }),\n // scaleRatio:\n // table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // event: e.nativeEvent,\n // });\n // }\n // }\n });\n // table.scenegraph.tableGroup.addEventListener('pointerenter', (e: FederatedPointerEvent) => {\n // console.log('pointerenter', e.target);\n // 触发MOUSEOVER_CELL\n // const eventArgsSet = getCellEventArgsSet(e);\n // if ((eventArgsSet?.eventArgs?.target as unknown as Group)?.role === 'cell') {\n // table.fireListeners(DG_EVENT_TYPE.MOUSEENTER_CELL, {\n // col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n // row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n // cellRange: table.getCellRangeRelativeRect({\n // col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n // row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n // }),\n // scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // event: e.nativeEvent,\n // });\n // }\n // });\n table.scenegraph.tableGroup.addEventListener('pointerenter', (e: FederatedPointerEvent) => {\n if (\n (table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.horizontalVisible === 'focus') ||\n (!table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.showHorizontalScrollBar();\n }\n if (\n (table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.verticalVisible === 'focus') ||\n (!table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.showVerticalScrollBar();\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEENTER_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n table.scenegraph.tableGroup.addEventListener('pointerleave', (e: FederatedPointerEvent) => {\n //resize 列宽 当鼠标离开table也需要继续响应\n if (\n !stateManager.isResizeCol() &&\n !stateManager.isResizeRow() &&\n !stateManager.isMoveCol() &&\n !stateManager.isSelecting()\n ) {\n stateManager.updateInteractionState(InteractionState.default);\n stateManager.updateCursor();\n }\n\n if (\n (table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.horizontalVisible === 'focus') ||\n (!table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.hideHorizontalScrollBar();\n }\n if (\n (table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.verticalVisible === 'focus') ||\n (!table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.hideVerticalScrollBar();\n }\n\n // 移动到table外部 如移动到表格空白区域 移动到表格浏览器外部\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL)) {\n if (table.stateManager.hover.cellPos.col !== -1 && table.stateManager.hover.cellPos.row !== -1) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, {\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row,\n cellRange: table.getCellRangeRelativeRect({\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: undefined\n });\n }\n }\n eventManager.dealTableHover();\n const target = e.target;\n if (target && !target.isDescendantsOf(table.scenegraph.tableGroup)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n // /**\n // * 两种场景会触发这里的pointerupoutside TODO 第二种并不应该触发,待vrender修改后再整理这里的逻辑\n // * 1. 鼠标down和up的场景树节点不一样\n // * 2. 点击到非stage的(非canvas) 其他dom节点\n // */\n // table.scenegraph.tableGroup.addEventListener('pointerupoutside', (e: FederatedPointerEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // if (stateManager.menu.isShow && (eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon) {\n // setTimeout(() => {\n // // conside page scroll\n // if (!table.internalProps.menuHandler.pointInMenuElement(e.client.x, e.client.y)) {\n // stateManager.menu.isShow && stateManager.hideMenu();\n // }\n // }, 0);\n // }\n // // 同pointerup中的逻辑\n // if (stateManager.isResizeCol()) {\n // endResizeCol(table);\n // } else if (stateManager.isResizeRow()) {\n // endResizeRow(table);\n // } else if (stateManager.isMoveCol()) {\n // const endMoveColSuccess = table.stateManager.endMoveCol();\n // if (\n // endMoveColSuccess &&\n // table.stateManager.columnMove?.colSource !== -1 &&\n // table.stateManager.columnMove?.rowSource !== -1 &&\n // table.stateManager.columnMove?.colTarget !== -1 &&\n // table.stateManager.columnMove?.rowTarget !== -1\n // ) {\n // // 下面触发CHANGE_HEADER_POSITION 区别于pointerup\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION)) {\n // table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, {\n // target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n // source: {\n // col: table.stateManager.columnMove.colSource,\n // row: table.stateManager.columnMove.rowSource\n // },\n // event: e.nativeEvent\n // });\n // }\n // }\n // } else if (stateManager.isSelecting()) {\n // if (table.stateManager.select?.ranges?.length) {\n // const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n // const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n // table.stateManager.endSelectCells();\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n // const cellsEvent: MousePointerMultiCellEvent = {\n // event: e.nativeEvent,\n // cells: [],\n // col: lastCol,\n // row: lastRow,\n // scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // target: undefined\n // };\n // cellsEvent.cells = table.getSelectedCellInfos();\n // table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n // }\n // }\n // }\n // });\n\n const globalPointerupCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n });\n }\n };\n const globalPointerdownCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target) && !table.internalProps.menuHandler.containElement(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n //点击到表格外部不需要取消选中状态\n if (table.options.select?.outsideClickDeselect) {\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect();\n stateManager.endSelectCells(true, isHasSelected);\n }\n });\n }\n };\n //释放时最好是通过vglobal.removeEventListener TODO\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'document',\n callback: globalPointerupCallback\n });\n //释放时最好是通过vglobal.removeEventListener TODO\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'document',\n callback: globalPointerdownCallback\n });\n // 整体全局监听事件\n vglobal.addEventListener('pointerup', globalPointerupCallback);\n vglobal.addEventListener('pointerdown', globalPointerdownCallback);\n table.scenegraph.tableGroup.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n // table.eventManager.isPointerDownOnTable = true;\n // setTimeout(() => {\n // table.eventManager.isPointerDownOnTable = false;\n // }, 0);\n table.eventManager.isDown = true;\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n // // 避免在调整列宽等拖拽操作触发外层组件的拖拽逻辑;\n // // 如果鼠标位置在表格内(加调整列宽的热区),将pointerdown事件阻止冒泡(如果阻止mousedown需要结合isPointerDownOnTable来判断)\n // e.stopPropagation();\n\n // e.preventDefault(); //为了阻止mousedown事件的触发,后续:不能这样写,会阻止table聚焦\n table.eventManager.LastPointerXY = { x: e.x, y: e.y };\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n eventManager.downIcon = undefined;\n if (stateManager.interactionState !== InteractionState.default) {\n return;\n }\n //处理当点击到的不是图表上时 更新图表的状态为空\n if (table.isPivotChart() && eventArgsSet?.eventArgs?.target.type !== 'chart') {\n table.scenegraph.updateChartState(null);\n }\n // 处理menu\n if ((eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon) {\n // 点击在menu外,且不是下拉菜单的icon,移除menu\n stateManager.hideMenu();\n }\n // 如果点击到了图表上 后续的逻辑忽略掉 以免重绘了图表 丢失vchart图表的交互\n if (eventArgsSet?.eventArgs?.target.type === 'chart') {\n return;\n }\n\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e.nativeEvent);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n\n const hitIcon = (eventArgsSet?.eventArgs?.target as any)?.role?.startsWith('icon')\n ? eventArgsSet.eventArgs.target\n : (e.target as any).role?.startsWith('icon')\n ? e.target\n : undefined;\n eventManager.downIcon = hitIcon;\n if (!hitIcon || (hitIcon.attribute as IIconGraphicAttribute).interactive === false) {\n if (e.pointerType === 'touch') {\n // 移动端事件特殊处理\n eventManager.touchEnd = false;\n eventManager.touchSetTimeout = setTimeout(() => {\n eventManager.isTouchdown = false;\n eventManager.touchMove = true;\n // 处理列宽调整\n if (\n !eventManager.touchEnd &&\n (eventManager.checkColumnResize(eventArgsSet, true) || eventManager.checkRowResize(eventArgsSet, true))\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理column mover\n if (!eventManager.touchEnd && eventManager.chechColumnMover(eventArgsSet)) {\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理单元格选择\n if (eventManager.dealTableSelect(eventArgsSet) && !eventManager.touchEnd) {\n // 先执行单选逻辑,再更新为grabing模式\n // stateManager.interactionState = 'grabing';\n stateManager.updateInteractionState(InteractionState.grabing);\n // console.log('DRAG_SELECT_START');\n }\n }, 500);\n // 这里处理成hover 这样移动端 当点击到带有下拉菜单dropdown的单元格时 那个icon才能绘制出来。可以测试example的menu示例\n eventManager.dealTableHover(eventArgsSet);\n } else {\n // 处理列宽调整\n if (\n !eventManager.checkCellFillhandle(eventArgsSet) &&\n (eventManager.checkColumnResize(eventArgsSet, true) || eventManager.checkRowResize(eventArgsSet, true))\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n table.scenegraph.updateChartState(null);\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理column mover\n if (eventManager.chechColumnMover(eventArgsSet)) {\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理填充功能\n if (eventManager.checkCellFillhandle(eventArgsSet, true) && eventManager.dealFillSelect(eventArgsSet)) {\n // table.eventManager.LastRange = {\n // start: table.stateManager.select.ranges[0].start,\n // end: {\n // col: (getCellEventArgsSet(e).eventArgs.target as unknown as Group).col,\n // row: (getCellEventArgsSet(e).eventArgs.target as unknown as Group).row\n // }\n // };\n // table.eventManager.SelectData = table.getCopyValue();\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n // 处理单元格选择\n if (eventManager.dealTableSelect(eventArgsSet)) {\n // 先执行单选逻辑,再更新为grabing模式\n // stateManager.interactionState = 'grabing';\n stateManager.updateInteractionState(InteractionState.grabing);\n // console.log('DRAG_SELECT_START');\n }\n }\n } else if ((hitIcon.attribute as any).funcType === IconFuncTypeEnum.dragReorder) {\n stateManager.startMoveCol(\n eventArgsSet.eventArgs.col,\n eventArgsSet.eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgsSet.eventArgs?.event?.nativeEvent\n );\n stateManager.updateInteractionState(InteractionState.grabing);\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_CELL)) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventArgsSet.eventArgs) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs.mergeInfo\n });\n }\n }\n });\n });\n // 注意和pointertap事件的处理 vrender中的事件系统: 是先触发pointerup 如果是点击到的场景树图元节点则会继续触发pointertap 否则不触发pointertap\n table.scenegraph.tableGroup.addEventListener('pointerup', (e: FederatedPointerEvent) => {\n console.log('tableGroup', 'pointerup');\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n if (stateManager.interactionState === 'grabing') {\n // stateManager.interactionState = 'default';\n stateManager.updateInteractionState(InteractionState.default);\n // eventManager._resizing = false;\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e.nativeEvent);\n } else if (stateManager.isSelecting()) {\n table.stateManager.endSelectCells();\n if (table.stateManager.isFillHandle()) {\n table.stateManager.endFillSelect();\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n table.eventManager.isDraging &&\n eventArgsSet.eventArgs &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)\n ) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e.nativeEvent,\n cells: [],\n col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n } else if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n // scroll end\n }\n\n // console.log('DRAG_SELECT_END');\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEUP_CELL)) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventArgsSet.eventArgs) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEUP_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('rightdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // 右键点击\n if (eventArgsSet.eventArgs) {\n stateManager.triggerContextMenu(\n eventArgsSet.eventArgs.col,\n eventArgsSet.eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y\n );\n\n //处理监听的右键事件\n const { col, row } = eventArgsSet.eventArgs;\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CELL)) {\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n if (cellInRanges(table.stateManager.select.ranges, col, row)) {\n // 用户右键点击已经选中的区域\n // const { start, end } = eventManager.selection.range;\n cellsEvent.cells = table.getSelectedCellInfos();\n } else {\n // 用户右键点击新单元格\n cellsEvent.cells = [[cellInfo]];\n }\n\n table.fireListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CELL, cellsEvent);\n }\n }\n });\n // 注意和pointerup事件的处理 vrender中的事件系统: 是先触发pointerup 如果是点击到的场景树图元节点则会继续触发pointertap 否则不触发pointertap\n table.scenegraph.tableGroup.addEventListener('pointertap', (e: FederatedPointerEvent) => {\n console.log('tableGroup', 'pointertap');\n if (table.stateManager.columnResize.resizing) {\n return;\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n !eventManager.touchMove &&\n e.button === 0 &&\n eventArgsSet.eventArgs &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.CLICK_CELL)\n ) {\n const { col, row } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n federatedEvent: e,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n\n table.fireListeners(TABLE_EVENT_TYPE.CLICK_CELL, cellsEvent);\n }\n if (table.stateManager.columnResize.resizing || table.stateManager.columnMove.moving) {\n return;\n }\n // if (table.stateManager.fillHandle.isFilling) {\n // table.stateManager.endFillSelect();\n // return;\n // }\n\n eventManager.dealIconClick(e, eventArgsSet);\n if (!eventArgsSet?.eventArgs) {\n return;\n }\n if (eventManager.touchSetTimeout) {\n // 通过这个变量判断非drag鼠标拖拽状态,就不再增加其他变量isDrag了(touchSetTimeout如果拖拽过会变成undefined pointermove事件有置为undefined)\n if (e.pointerType === 'touch') {\n // 移动端事件特殊处理\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventManager.touchSetTimeout) {\n clearTimeout(eventManager.touchSetTimeout);\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect(eventArgsSet);\n stateManager.endSelectCells(true, isHasSelected);\n eventManager.touchSetTimeout = undefined;\n }\n }\n }\n });\n // stage 的pointerdown监听\n table.scenegraph.stage.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n !eventArgsSet.eventArgs?.target ||\n (eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon\n ) {\n stateManager.hideMenu();\n }\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e.nativeEvent);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n const hitIcon = (e.target as any).role?.startsWith('icon') ? e.target : undefined;\n eventManager.downIcon = hitIcon;\n // 处理列宽调整 这里和tableGroup.addEventListener('pointerdown' 逻辑一样\n if (\n !hitIcon &&\n !eventManager.checkCellFillhandle(eventArgsSet) &&\n !stateManager.columnResize.resizing &&\n eventManager.checkColumnResize(eventArgsSet, true)\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n table.scenegraph.updateChartState(null);\n stateManager.updateInteractionState(InteractionState.grabing);\n\n // 调整列宽最后一列有外扩了8px 需要将其考虑到table中 需要触发下MOUSEDOWN_TABLE事件\n const { eventArgs } = eventArgsSet;\n if (!eventArgs?.targetCell) {\n const cell = table.getCellAt(\n eventArgsSet.abstractPos.x - table.theme.columnResize.resizeHotSpotSize / 2,\n eventArgsSet.abstractPos.y\n );\n if (cell) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n }\n }\n return;\n }\n });\n });\n table.scenegraph.stage.addEventListener('pointerup', (e: FederatedPointerEvent) => {\n // 处理列宽调整 这里和tableGroup.addEventListener('pointerup' 逻辑一样\n if (stateManager.interactionState === 'grabing') {\n // stateManager.interactionState = 'default';\n stateManager.updateInteractionState(InteractionState.default);\n // eventManager._resizing = false;\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n }\n }\n });\n // click outside\n table.scenegraph.stage.addEventListener('pointertap', (e: FederatedPointerEvent) => {\n const target = e.target;\n if (\n // 如果是鼠标点击到canvas空白区域 则取消选中状态\n !table.eventManager.isDraging &&\n target &&\n (target.isDescendantsOf(table.scenegraph.stage) || (target as any).stage === target) && //判断节点未被删除 后面这个是为了判断是stage本身\n !target.isDescendantsOf(table.scenegraph.tableGroup)\n // &&\n // (target as any) !== table.scenegraph.tableGroup &&\n // (target as any) !== table.scenegraph.stage\n ) {\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n const isHasSelected = !!stateManager.select.ranges?.length;\n // 点击空白区域取消选中\n if (table.options.select?.blankAreaClickDeselect ?? true) {\n eventManager.dealTableSelect();\n }\n stateManager.endSelectCells(true, isHasSelected);\n\n stateManager.updateCursor();\n table.scenegraph.updateChartState(null);\n } else if (table.eventManager.isDraging && stateManager.isSelecting()) {\n // 如果鼠标拖拽后是否 则结束选中\n stateManager.endSelectCells();\n }\n });\n table.scenegraph.stage.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // 处理列宽调整 这里和tableGroup.addEventListener('pointermove' 逻辑一样\n if (stateManager.isResizeCol() || eventManager.checkColumnResize(eventArgsSet)) {\n // 更新填充柄pointer\n if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n stateManager.updateCursor('crosshair');\n } else {\n stateManager.updateCursor('col-resize');\n }\n } else if (stateManager.isResizeRow() || eventManager.checkRowResize(eventArgsSet)) {\n // 更新填充柄pointer\n if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n stateManager.updateCursor('crosshair');\n } else {\n stateManager.updateCursor('row-resize');\n }\n } else if (stateManager.isMoveCol()) {\n // 拖拽位置已经在updateMoveCol方法中添加了响应的鼠标样式\n } else {\n stateManager.updateCursor();\n }\n });\n // table.scenegraph.tableGroup.addEventListener('dbltap', (e: FederatedPointerEvent) => {\n // console.log('tableGroup', 'dbltap');\n // dblclickHandler(e);\n // });\n // table.scenegraph.tableGroup.addEventListener('dblclick', (e: FederatedPointerEvent) => {\n // console.log('tableGroup', 'dblclick');\n // dblclickHandler(e);\n // });\n\n table.scenegraph.tableGroup.addEventListener('checkbox_state_change', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n\n const mergeRange = getCellMergeInfo(table, col, row);\n if (mergeRange) {\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((checkbox: CheckBox) => {\n if (checkbox.name === 'checkbox') {\n checkbox.setAttributes({\n checked: (e.target.attribute as CheckboxAttributes).checked,\n indeterminate: (e.target.attribute as CheckboxAttributes).indeterminate\n });\n }\n });\n }\n }\n }\n\n const cellsEvent: MousePointerCellEvent & { checked: boolean } = {\n ...cellInfo,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo,\n checked: (e.detail as unknown as { checked: boolean }).checked\n };\n\n if (table.isHeader(col, row)) {\n //点击的表头部分的checkbox 需要同时处理表头和body单元格的状态\n table.stateManager.setHeaderCheckedState(\n cellInfo.field as string | number,\n (e.detail as unknown as { checked: boolean }).checked\n );\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n table.scenegraph.updateCheckboxCellState(col, row, (e.detail as unknown as { checked: boolean }).checked);\n }\n } else {\n //点击的是body单元格的checkbox 处理本单元格的状态维护 同时需要检查表头是否改变状态\n table.stateManager.setCheckedState(\n col,\n row,\n cellInfo.field as string | number,\n (e.detail as unknown as { checked: boolean }).checked\n );\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n const oldHeaderCheckedState = table.stateManager.headerCheckedState[cellInfo.field as string | number];\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState(\n cellInfo.field as string | number,\n col,\n row\n );\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.CHECKBOX_STATE_CHANGE, cellsEvent);\n\n table.scenegraph.updateNextFrame();\n });\n\n table.scenegraph.tableGroup.addEventListener('radio_checked', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row, target } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n const indexInCell: string | undefined = regIndexReg.exec(target.id as string)?.[1];\n\n const mergeRange = getCellMergeInfo(table, col, row);\n if (mergeRange) {\n // update all radio in merge cells\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id === target.id) {\n radio.setAttributes({\n checked: true\n });\n }\n });\n }\n }\n }\n\n // update other radio\n const define = table.getBodyColumnDefine(col, row) as RadioColumnDefine;\n const radioCheckType = define.radioCheckType || 'column';\n\n if (radioCheckType === 'cell') {\n // update other radio in this cell\n if (mergeRange) {\n // update all radio in merge cells\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n }\n }\n } else {\n // update all radio in single cell\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n }\n } else if (radioCheckType === 'column') {\n // update other radio in this column\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n });\n }\n\n // update state\n const radioIndexInCell = indexInCell ? Number(indexInCell) : undefined;\n table.stateManager.setRadioState(col, row, cellInfo.field as string | number, radioCheckType, radioIndexInCell);\n\n // trigger event\n const cellsEvent: MousePointerCellEvent & { radioIndexInCell: number | undefined } = {\n ...cellInfo,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo,\n radioIndexInCell\n };\n table.fireListeners(TABLE_EVENT_TYPE.RADIO_STATE_CHANGE, cellsEvent);\n\n table.scenegraph.updateNextFrame();\n });\n table.scenegraph.stage.addEventListener('wheel', (e: FederatedWheelEvent) => {\n const legend: any = e.path.find(node => (node as any).name === 'legend');\n if (!legend) {\n table.editorManager?.completeEdit();\n if (table.eventManager._enableTableScroll) {\n handleWhell(e, stateManager);\n }\n }\n });\n}\nexport function bindGesture(eventManager: EventManager) {\n const table = eventManager.table;\n eventManager.gesture = new Gesture(table.scenegraph.tableGroup as unknown as IEventTarget, {\n tap: {\n interval: 300\n }\n });\n eventManager.gesture.on('doubletap', e => {\n console.log('doubletap', e);\n // e.preventDefault();\n dblclickHandler(e, table);\n });\n}\nexport function endResizeCol(table: BaseTableAPI) {\n table.stateManager.endResizeCol();\n // textStick 依赖了这个事件 所以一定要触发RESIZE_COLUMN_END\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN_END)) {\n // RESIZE_COLUMN_END事件触发,返回所有列宽\n const columns = [];\n // 返回所有列宽信息\n for (let col = 0; col < table.colCount; col++) {\n columns.push(table.getColWidth(col));\n }\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, {\n col: table.stateManager.columnResize.col,\n colWidths: columns\n });\n // }\n}\n\nexport function endResizeRow(table: BaseTableAPI) {\n table.stateManager.endResizeRow();\n\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW_END, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n}\n\nfunction dblclickHandler(e: FederatedPointerEvent, table: BaseTableAPI) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n let col = -1;\n let row = -1;\n if (eventArgsSet.eventArgs) {\n col = eventArgsSet.eventArgs.col;\n row = eventArgsSet.eventArgs.row;\n }\n const value = table.getCellValue(col, row);\n\n const bounds = eventArgsSet.eventArgs?.targetCell?.globalAABBBounds;\n bounds &&\n table.internalProps.focusControl.setFocusRect(\n new Rect(bounds.x1 + table.scrollLeft, bounds.y1 + table.scrollTop, bounds.x2 - bounds.x1, bounds.y2 - bounds.y1),\n value\n );\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DBLCLICK_CELL)) {\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n federatedEvent: e,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo\n };\n table.fireListeners(TABLE_EVENT_TYPE.DBLCLICK_CELL, cellsEvent);\n }\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport { throttle } from '../../tools/util';\nimport type { ListTableAPI } from '../../ts-types';\nimport { InteractionState } from '../../ts-types';\nimport type { EventManager } from '../event';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet } from '../util';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\n\nexport function bindScrollBarListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const scenegraph = table.scenegraph;\n\n // 监听滚动条组件pointover事件\n scenegraph.component.vScrollBar.addEventListener('pointerover', (e: any) => {\n stateManager.showVerticalScrollBar();\n });\n scenegraph.component.hScrollBar.addEventListener('pointerover', (e: any) => {\n stateManager.showHorizontalScrollBar();\n });\n scenegraph.component.vScrollBar.addEventListener('pointerout', (e: any) => {\n if (stateManager.interactionState === InteractionState.scrolling) {\n return;\n }\n stateManager.hideVerticalScrollBar();\n });\n scenegraph.component.hScrollBar.addEventListener('pointerout', (e: any) => {\n if (stateManager.interactionState === InteractionState.scrolling) {\n return;\n }\n stateManager.hideHorizontalScrollBar();\n });\n scenegraph.component.vScrollBar.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n scenegraph.table.stateManager.updateCursor('default');\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成可拖拽\n });\n scenegraph.component.vScrollBar.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成拖拽状态\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.vScrollBar.addEventListener('scrollDown', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n scenegraph.table.eventManager.isDown = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n scenegraph.table.stateManager.hideMenu();\n (scenegraph.table as ListTableAPI).editorManager?.completeEdit();\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.vScrollBar.addEventListener('pointerup', () => {\n stateManager.fastScrolling = false;\n scenegraph.table.eventManager.isDraging = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.vScrollBar.addEventListener('pointerupoutside', () => {\n stateManager.fastScrolling = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.vScrollBar.addEventListener('scrollUp', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.isDraging = false;\n });\n\n scenegraph.component.hScrollBar.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n scenegraph.table.stateManager.updateCursor('default');\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成可拖拽\n });\n scenegraph.component.hScrollBar.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成拖拽状态\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.hScrollBar.addEventListener('scrollDown', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n scenegraph.table.eventManager.isDown = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n scenegraph.table.stateManager.hideMenu();\n (scenegraph.table as ListTableAPI).editorManager?.completeEdit();\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.hScrollBar.addEventListener('pointerup', () => {\n stateManager.fastScrolling = false;\n scenegraph.table.eventManager.isDraging = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.hScrollBar.addEventListener('pointerupoutside', () => {\n stateManager.fastScrolling = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.hScrollBar.addEventListener('scrollUp', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.isDraging = false;\n });\n const throttleVerticalWheel = throttle(stateManager.updateVerticalScrollBar, 20);\n const throttleHorizontalWheel = throttle(stateManager.updateHorizontalScrollBar, 20);\n\n // 监听滚动条组件scroll事件\n scenegraph.component.vScrollBar.addEventListener('scrollDrag', (e: any) => {\n if (scenegraph.table.eventManager.isDown) {\n scenegraph.table.eventManager.isDraging = true;\n }\n stateManager.fastScrolling = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n const ratio = e.detail.value[0] / (1 - e.detail.value[1] + e.detail.value[0]);\n throttleVerticalWheel(ratio, e);\n });\n\n scenegraph.component.hScrollBar.addEventListener('scrollDrag', (e: any) => {\n if (scenegraph.table.eventManager.isDown) {\n scenegraph.table.eventManager.isDraging = true;\n }\n stateManager.fastScrolling = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n // stateManager.table.scenegraph.proxy.isSkipProgress = true;\n const ratio = e.detail.value[0] / (1 - e.detail.value[1] + e.detail.value[0]);\n throttleHorizontalWheel(ratio);\n // setTimeout(() => {\n // console.log('isSkipProgress', false);\n // stateManager.table.scenegraph.proxy.isSkipProgress = false;\n // }, 10);\n });\n}\n","import { isNode } from './helper';\n\nexport let defaultPixelRatio = 1;\n/*\n * @Description: 设置像素比\n */\nexport function getPixelRatio(): number {\n if (isNode) {\n defaultPixelRatio = 1;\n } else {\n defaultPixelRatio = Math.ceil(window.devicePixelRatio || 1);\n if (defaultPixelRatio > 1 && defaultPixelRatio % 2 !== 0) {\n // 非整数倍的像素比,向上取整\n defaultPixelRatio += 1;\n }\n }\n return defaultPixelRatio;\n}\ngetPixelRatio();\n","import { isValid } from '@visactor/vutils';\nimport type { EventHandler } from '../EventHandler';\nimport type { ListTableConstructorOptions, MousePointerMultiCellEvent } from '../../ts-types';\nimport { InteractionState, type KeydownEvent, type ListTableAPI } from '../../ts-types';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { handleWhell } from '../scroll';\nimport { browser } from '../../tools/helper';\nimport type { EventManager } from '../event';\nimport { getPixelRatio } from '../../tools/pixel-ratio';\nimport { endResizeCol, endResizeRow } from './table-group';\nimport { isCellDisableSelect } from '../../state/select/is-cell-select-highlight';\nimport { fireMoveColEventListeners } from '../helper';\nexport function bindContainerDomListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const handler: EventHandler = table.internalProps.handler;\n\n // handler.on(table.getElement(), 'mousedown', (e: MouseEvent) => {\n // if (table.eventManager.isPointerDownOnTable) {\n // e.stopPropagation();\n // }\n // });\n\n handler.on(table.getElement(), 'blur', (e: MouseEvent) => {\n eventManager.dealTableHover();\n // eventManager.dealTableSelect();\n });\n\n // 监听键盘事件\n handler.on(table.getElement(), 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'a' && (e.ctrlKey || e.metaKey)) {\n if (table.keyboardOptions?.selectAllOnCtrlA) {\n // 处理全选\n e.preventDefault();\n //全选\n eventManager.deelTableSelectAll();\n }\n } else if (\n stateManager.select.cellPos.col >= 0 &&\n stateManager.select.cellPos.row >= 0 &&\n (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n if (\n (!(table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor) ||\n table.options.keyboardOptions?.moveSelectedCellOnArrowKeys === false\n ) {\n // 编辑单元格状态下 如果没有开启方向键切换cell 则退出 。方向键可以在编辑input内移动光标\n return;\n }\n e.preventDefault();\n // 如果不加这句话 外部监听了键盘事件 会影响表格本身的移动格子功能,例如自定义日历编辑器的日期选择pickday.js\n //可能会引起其他问题 例如自定义实现了日历编辑器 里面切换日期左右键可能失效,这个时候建议监听VTable实例的事件keydown\n e.stopPropagation();\n let targetCol;\n let targetRow;\n\n // 处理向上箭头键\n if (e.key === 'ArrowUp') {\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = 0;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n }\n } else if (e.key === 'ArrowDown') {\n // 处理向下箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = table.rowCount - 1;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n }\n } else if (e.key === 'ArrowLeft') {\n // 处理向左箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = 0;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n }\n } else if (e.key === 'ArrowRight') {\n // 处理向右箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = table.colCount - 1;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n }\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n if (\n (table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n // 开启了方向键切换编辑单元格 并且当前已经在编辑状态下 切换到下一个需先退出再进入下个单元格的编辑\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager.startEditCell(targetCol, targetRow);\n }\n }\n } else if (e.key === 'Escape') {\n (table as ListTableAPI).editorManager?.cancelEdit();\n table.getElement().focus();\n } else if (e.key === 'Enter') {\n // 如果按enter键 可以结束当前的编辑 或开启编辑选中的单元格(仅限单选)\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n // 如果是结束当前编辑,且有主动监听keydown事件,则先触发keydown事件,之后再结束编辑\n handleKeydownListener(e);\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n }\n // 直接返回,不再触发最后的keydown监听事件相关代码\n return;\n }\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n } else if (\n (table.options.keyboardOptions?.editCellOnEnter ?? true) &&\n (table.stateManager.select.ranges?.length ?? 0) === 1\n ) {\n // 如果开启按enter键进入编辑的配置 且当前有选中的单元格 则进入编辑(仅限单选)\n const startCol = table.stateManager.select.ranges[0].start.col;\n const startRow = table.stateManager.select.ranges[0].start.row;\n const endCol = table.stateManager.select.ranges[0].end.col;\n const endRow = table.stateManager.select.ranges[0].end.row;\n if (startCol === endCol && startRow === endRow) {\n if ((table as ListTableAPI).getEditor(startCol, startRow)) {\n (table as ListTableAPI).editorManager.startEditCell(startCol, startRow);\n }\n }\n }\n } else if (e.key === 'Tab') {\n if (table.options.keyboardOptions?.moveFocusCellOnTab ?? true) {\n if (stateManager.select.cellPos.col >= 0 && stateManager.select.cellPos.row >= 0) {\n const isLastCell =\n stateManager.select.cellPos.col === table.colCount - 1 &&\n stateManager.select.cellPos.row === table.rowCount - 1;\n\n if (isLastCell) {\n return;\n }\n\n e.preventDefault();\n\n let targetCol;\n let targetRow;\n if (stateManager.select.cellPos.col === table.colCount - 1) {\n targetRow = Math.min(table.rowCount - 1, stateManager.select.cellPos.row + 1);\n targetCol = table.rowHeaderLevelCount;\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = stateManager.select.cellPos.col + 1;\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow);\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager.startEditCell(targetCol, targetRow);\n }\n }\n }\n }\n } else if (!(e.ctrlKey || e.metaKey || e.shiftKey)) {\n const editCellTrigger = (table.options as ListTableConstructorOptions).editCellTrigger;\n if (\n (editCellTrigger === 'keydown' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('keydown'))) &&\n !table.editorManager?.editingEditor\n ) {\n const allowedKeys = /^[a-zA-Z0-9+\\-*\\/%=.,\\s]$/; // 允许的键值正则表达式\n if (e.key.match(allowedKeys)) {\n table.editorManager.startEditCell(stateManager.select.cellPos.col, stateManager.select.cellPos.row, '');\n }\n }\n }\n handleKeydownListener(e);\n });\n /**\n * 处理主动注册的keydown事件\n * @param e\n */\n function handleKeydownListener(e: KeyboardEvent) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.KEYDOWN)) {\n const cellsEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e,\n // cells: table.getSelectedCellInfos(),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.KEYDOWN, cellsEvent);\n }\n }\n\n handler.on(table.getElement(), 'copy', async (e: KeyboardEvent) => {\n if (table.keyboardOptions?.copySelected) {\n const data = table.getCopyValue();\n if (isValid(data)) {\n e.preventDefault();\n //检查是否有权限\n const permissionState = await navigator.permissions.query({ name: 'clipboard-write' as PermissionName });\n if (navigator.clipboard?.write && permissionState.state === 'granted') {\n // 将复制的数据转为html格式\n const setDataToHTML = (data: string) => {\n const result = [''];\n const META_HEAD = [\n '', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n ''\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&') // replace & with & to prevent XSS attacks\n .replace(/'/g, ''') // replace ' with ' to prevent XSS attacks\n .replace(//g, '>') // replace > with > to prevent XSS attacks\n .replace(/\\n/g, '
') // replace \\n with
to prevent XSS attacks\n .replace(/((\\r\\n|\\n)?|\\r\\n|\\n)/g, '
\\r\\n') // replace
with
\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `${' '.repeat(substring.length - 1)} `;\n }) // replace 2 or more spaces with   to prevent XSS attacks\n .replace(/\\t/gi, ' '); // replace \\t with to prevent XSS attacks\n\n rowValues.push(`
`);\n });\n result.push('', ...rowValues, '');\n\n if (rowIndex === rows.length - 1) {\n result.push('');\n }\n });\n result.push('
${parsedCellData}
');\n return [META_HEAD, result.join('')].join('');\n };\n const dataHTML = setDataToHTML(data);\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([dataHTML], { type: 'text/html' }),\n 'text/plain': new Blob([data], { type: 'text/plain' })\n })\n ]);\n } else {\n if (browser.IE) {\n (window as any).clipboardData.setData('Text', data); // IE\n } else {\n (e as any).clipboardData.setData('text/plain', data); // Chrome, Firefox\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: table.stateManager.select.ranges,\n copyData: data\n });\n }\n }\n });\n handler.on(table.getElement(), 'paste', (e: any) => {\n if (table.keyboardOptions?.pasteValueToCell && (table as ListTableAPI).changeCellValues) {\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n return;\n }\n if (table.stateManager.select.ranges?.length > 0) {\n if (navigator.clipboard?.read) {\n // 读取剪切板数据\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n // 优先处理 html 格式数据\n if (item.types.includes('text/html')) {\n pasteHtmlToTable(item);\n } else if (item.types.length === 1 && item.types[0] === 'text/plain') {\n pasteTextToTable(item);\n } else {\n // 其他情况\n }\n }\n });\n } else {\n const ranges = table.stateManager.select.ranges;\n const col = Math.min(ranges[0].start.col, ranges[0].end.col);\n const row = Math.min(ranges[0].start.row, ranges[0].end.row);\n\n const clipboardData = e.clipboardData || window.Clipboard;\n const pastedData = clipboardData.getData('text');\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n const values: (string | number)[][] = [];\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n });\n (table as ListTableAPI).changeCellValues(col, row, values);\n }\n }\n }\n });\n\n handler.on(table.getElement(), 'contextmenu', (e: any) => {\n if (table.eventOptions?.preventDefaultContextMenu !== false) {\n e.preventDefault();\n }\n });\n\n if (!table.options.canvas) {\n handler.on(table.getContainer(), 'resize', e => {\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (table.autoFillWidth || table.autoFillHeight) {\n table.editorManager?.completeEdit();\n }\n if (!isValid(table.options.pixelRatio)) {\n table.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n table.resize();\n }\n });\n }\n\n // const regex = /]*>(.*?)<\\/tr>/gs; // 匹配标签及其内容\n const regex = /]*>([\\s\\S]*?)<\\/tr>/g; // for webpack3\n // const cellRegex = /]*>(.*?)<\\/td>/gs; // 匹配标签及其内容\n const cellRegex = /]*>([\\s\\S]*?)<\\/td>/g; // for webpack3\n\n function pasteHtmlToTable(item: ClipboardItem) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n item.getType('text/html').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n // 解析html数据\n if (pastedData && /(标签中的内容\n const cellMatches: RegExpMatchArray[] = Array.from(rowContent.matchAll(cellRegex)); // 获取标签中的内容\n const rowValues = cellMatches.map(cellMatch => {\n return (\n cellMatch[1]\n .replace(/(<(?!br)([^>]+)>)/gi, '') // 除了
标签以外的所有 HTML 标签都替换为空字符串\n .replace(/[\\r\\n]?/gim, '\\n') // 将字符串中的
标签以及其后可能存在的空白字符和斜杠都替换为换行符 \\n\n // .replace(/
/g, '\\n') // 替换
标签为换行符\n // .replace(/<(?:.|\\n)*?>/gm, '') // 去除HTML标签\n //将字符串中的 HTML 实体字符转换为原始的字符\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/ /gi, '\\t')\n .replace(/ /g, ' ')\n );\n // .trim(); // 去除首尾空格\n });\n values.push(rowValues);\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n }\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n } else {\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n if (item.types.includes('text/plain')) {\n item.getType('text/plain').then((blob: Blob) => {\n blob.text().then(_pasteValue);\n });\n }\n }\n });\n }\n });\n });\n }\n\n function _pasteValue(pastedData: string) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n }\n function pasteTextToTable(item: ClipboardItem) {\n // 如果只有 'text/plain'\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n // const values: (string | number)[][] = [];\n item.getType('text/plain').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n let values: (string | number)[][] = [];\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n if (cell.includes('\\n')) {\n cell = cell\n .replace(/^\"(.*)\"$/, '$1') // 将字符串开头和结尾的双引号去除,并保留双引号内的内容\n .replace(/[\"]*/g, match => new Array(Math.floor(match.length / 2)).fill('\"').join('')); // 连续出现的双引号替换为一半数量的双引号\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n });\n });\n }\n function handlePasteValues(\n values: (string | number)[][],\n rowCount: number,\n colCount: number,\n selectedRowCount: number,\n selectedColCount: number\n ) {\n if (selectedColCount > colCount || selectedRowCount > rowCount) {\n if (selectedColCount % colCount === 0 && selectedRowCount % rowCount === 0) {\n const toPasteValues: (string | number)[][] = [];\n // 在目标区域中循环遍历,将复制的值逐个粘贴到每个单元格中\n for (let i = 0; i < selectedRowCount; i++) {\n const rowPasteValue: (string | number)[] = [];\n toPasteValues.push(rowPasteValue);\n for (let j = 0; j < selectedColCount; j++) {\n const copiedRow = i % rowCount;\n const copiedCol = j % colCount;\n rowPasteValue.push(values[copiedRow][copiedCol]);\n }\n }\n return toPasteValues;\n }\n return values;\n }\n return values;\n }\n // 有被阻止冒泡的场景 就触发不到这里的事件了 所以这个LastBodyPointerXY变量的赋值在scrollbar的down事件也进行了处理\n const globalPointerdownCallback = (e: MouseEvent) => {\n // console.log('body pointerdown');\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n table.eventManager.isDown = true;\n };\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'body',\n callback: globalPointerdownCallback\n });\n document.body.addEventListener('pointerdown', globalPointerdownCallback);\n\n const globalPointerupOutsideCallback = (e: MouseEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (stateManager.menu.isShow) {\n setTimeout(() => {\n // conside page scroll\n if (!table.internalProps.menuHandler.pointInMenuElement(e.clientX, e.clientY)) {\n stateManager.menu.isShow && stateManager.hideMenu();\n }\n }, 0);\n }\n // 同pointerup中的逻辑\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (stateManager.isSelecting()) {\n if (table.stateManager.select?.ranges?.length) {\n const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n table.stateManager.endSelectCells();\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e,\n cells: [],\n col: lastCol,\n row: lastRow,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: undefined\n };\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n }\n };\n\n const globalPointerupCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target !== table.canvas) {\n globalPointerupOutsideCallback(e);\n }\n table.eventManager.LastBodyPointerXY = null;\n // console.log('body pointerup', table.eventManager.isDown, table.eventManager.isDraging);\n table.eventManager.isDown = false;\n table.eventManager.isDraging = false;\n table.eventManager.inertiaScroll.endInertia();\n if (stateManager.interactionState === 'grabing' && stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.interactionState === 'grabing' && stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'document',\n callback: globalPointerupCallback\n });\n document.addEventListener('pointerup', globalPointerupCallback);\n\n const globalPointermoveCallback = (e: MouseEvent) => {\n if (table.eventManager.isDown && table.eventManager.LastBodyPointerXY) {\n const lastX = table.eventManager.LastBodyPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastBodyPointerXY?.y ?? e.y;\n if (Math.abs(lastX - e.x) > 1 || Math.abs(lastY - e.y) > 1) {\n table.eventManager.isDraging = true;\n }\n }\n // 注释掉。因为: 这里pointermove太敏感了 点击快的时候 可能动了1px这里也会执行到 就影响到下面选中不触发的问题。下面pointermove就有这段逻辑,这里先去掉\n // if (eventManager.touchSetTimeout) {\n // clearTimeout(eventManager.touchSetTimeout);\n // console.log('eventManager.touchSetTimeout', eventManager.touchSetTimeout);\n // eventManager.touchSetTimeout = undefined;\n // }\n // const eventArgsSet = getCellEventArgsSet(e);\n const { x, y } = table._getMouseAbstractPoint(e, false);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n if (stateManager.interactionState === InteractionState.grabing) {\n if (stateManager.isResizeCol()) {\n eventManager.dealColumnResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN, {\n col: table.stateManager.columnResize.col,\n colWidth: table.getColWidth(table.stateManager.columnResize.col)\n });\n }\n } else if (stateManager.isResizeRow()) {\n eventManager.dealRowResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_ROW)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n }\n }\n }\n const isSelecting = table.stateManager.isSelecting();\n\n if (\n eventManager._enableTableScroll &&\n eventManager.isDraging &&\n isSelecting &&\n table.stateManager.select.ranges?.length > 0\n ) {\n // 检测鼠标是否离开了table\n const drawRange = table.getDrawRange();\n // const element = table.getElement();\n // const { x: rootLeft, y: rootTop, width: rootWidth } = element.getBoundingClientRect();\n // const tableLeft = drawRange.left + rootLeft;\n // const tableTop = drawRange.top + rootTop;\n // const tableRight = tableLeft + drawRange.width;\n // const tableBottom = tableTop + drawRange.height;\n // console.log('x, y', x, y);\n const topFrozenRowHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowHeight = table.getBottomFrozenRowsHeight();\n const leftFrozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const startCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].start;\n if (table.isSeriesNumber(startCell.col, startCell.row)) {\n //如果是鼠标落到了序号列 不自动滚动\n return;\n }\n const endCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end;\n const canScrollY =\n (table.isFrozenRow(startCell.row) === false || table.isFrozenRow(endCell.row) === false) &&\n table.getAllRowsHeight() > table.tableNoFrameHeight;\n const canScrollX =\n (table.isFrozenColumn(startCell.col) === false || table.isFrozenColumn(endCell.col) === false) &&\n table.getAllColsWidth() > table.tableNoFrameWidth;\n if (\n ((y > drawRange.bottom - bottomFrozenRowHeight || y < drawRange.top + topFrozenRowHeight) && canScrollY) ||\n ((x > drawRange.right - rightFrozenColsWidth || x < drawRange.left + leftFrozenColsWidth) && canScrollX)\n ) {\n table.eventManager.scrollXSpeed = 0;\n table.eventManager.scrollYSpeed = 0;\n let bottom = false;\n let top = false;\n let right = false;\n let left = false;\n if (\n y > drawRange.bottom - bottomFrozenRowHeight &&\n canScrollY &&\n table.scrollTop + table.tableNoFrameHeight < table.getAllRowsHeight()\n ) {\n bottom = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.bottom + bottomFrozenRowHeight) / 50;\n } else if (y < drawRange.top + topFrozenRowHeight && canScrollY && table.scrollTop > 0) {\n top = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.top - topFrozenRowHeight) / 50;\n }\n\n if (\n x > drawRange.right - rightFrozenColsWidth &&\n canScrollX &&\n table.scrollLeft + table.tableNoFrameWidth < table.getAllColsWidth()\n ) {\n right = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.right + rightFrozenColsWidth) / 50;\n } else if (x < drawRange.left + leftFrozenColsWidth && canScrollX && table.scrollLeft > 0) {\n left = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.left - leftFrozenColsWidth) / 50;\n }\n table.eventManager.inertiaScroll.startInertia(\n table.eventManager.scrollXSpeed,\n table.eventManager.scrollYSpeed,\n 1\n );\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager, false);\n\n let selectX: number;\n let selectY: number;\n\n if (bottom) {\n selectY = table.scrollTop + drawRange.height - bottomFrozenRowHeight - 20;\n } else if (top) {\n selectY = table.scrollTop + topFrozenRowHeight + 20;\n }\n\n if (right) {\n selectX = table.scrollLeft + drawRange.width - rightFrozenColsWidth - 20;\n } else if (left) {\n selectX = table.scrollLeft + leftFrozenColsWidth + 20;\n }\n\n let considerFrozenY = false;\n let considerFrozenX = false;\n if (!right && !left) {\n if (\n (x > table.tableNoFrameWidth - table.getRightFrozenColsWidth() && x < table.tableNoFrameWidth) ||\n (x > 0 && x < table.getFrozenColsWidth())\n ) {\n selectX = x;\n considerFrozenX = true;\n } else {\n selectX = table.scrollLeft + x;\n }\n }\n if (!bottom && !top) {\n if (\n (y > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() && y < table.tableNoFrameHeight) ||\n (y > 0 && y < table.getFrozenRowsHeight())\n ) {\n selectY = y;\n considerFrozenY = true;\n } else {\n selectY = table.scrollTop + y;\n }\n }\n table.stateManager.updateInteractionState(InteractionState.grabing);\n const targetCol = table.getTargetColAtConsiderRightFrozen(selectX, considerFrozenX);\n const targetRow = table.getTargetRowAtConsiderBottomFrozen(selectY, considerFrozenY);\n if (isValid(targetCol) && isValid(targetRow)) {\n table.stateManager.updateSelectPos(targetCol.col, targetRow.row, false, false, false, false);\n }\n });\n } else if (table.eventManager.inertiaScroll.isInertiaScrolling()) {\n table.eventManager.inertiaScroll.endInertia();\n } else {\n table.eventManager.scrollYSpeed = 0;\n }\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointermove',\n env: 'body',\n callback: globalPointermoveCallback\n });\n document.body.addEventListener('pointermove', globalPointermoveCallback);\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport { handleWhell, isHorizontalScrollable, isVerticalScrollable } from '../scroll';\nimport type { EventManager } from '../event';\nimport { IconFuncTypeEnum } from '../../ts-types';\n\nexport function bindTouchListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const scenegraph = table.scenegraph;\n\n // deal width touch scrolling in mobile devices\n eventManager.touchMovePoints = [];\n table.scenegraph.tableGroup.addEventListener('touchstart', (e: FederatedPointerEvent) => {\n if (e.target.isChildOf(scenegraph.component.vScrollBar) || e.target.isChildOf(scenegraph.component.vScrollBar)) {\n return;\n }\n eventManager.isTouchdown = true;\n eventManager.touchMovePoints.push({\n x: e.page.x,\n y: e.page.y,\n timestamp: Date.now()\n });\n });\n\n const globalTouchMoveCallback = (e: TouchEvent) => {\n if (eventManager.touchMove) {\n e.preventDefault();\n }\n if (!eventManager.isTouchdown || !isTouchEvent(e)) {\n return;\n }\n console.log('downIcon', eventManager.downIcon);\n if ((eventManager.downIcon?.attribute as any)?.funcType === IconFuncTypeEnum.dragReorder) {\n // console.log()\n e.preventDefault();\n } else {\n // collect four last touch pisitions\n if (eventManager.touchMovePoints.length > 4) {\n eventManager.touchMovePoints.shift();\n }\n eventManager.touchMovePoints.push({\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n timestamp: Date.now()\n });\n if (eventManager._enableTableScroll) {\n const deltaX =\n -eventManager.touchMovePoints[eventManager.touchMovePoints.length - 1].x +\n eventManager.touchMovePoints[eventManager.touchMovePoints.length - 2].x;\n const deltaY =\n -eventManager.touchMovePoints[eventManager.touchMovePoints.length - 1].y +\n eventManager.touchMovePoints[eventManager.touchMovePoints.length - 2].y;\n handleWhell({ deltaX, deltaY } as any, stateManager);\n\n if (\n e.cancelable &&\n (table.internalProps.overscrollBehavior === 'none' ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, stateManager)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, stateManager)))\n ) {\n e.preventDefault();\n }\n }\n }\n };\n window.addEventListener('touchmove', globalTouchMoveCallback, { passive: false });\n eventManager.globalEventListeners.push({\n name: 'touchmove',\n env: 'window',\n callback: globalTouchMoveCallback\n });\n\n const globalTouchEndCallback = (e: TouchEvent) => {\n eventManager.touchEnd = true;\n eventManager.touchMove = false;\n if (!eventManager.isTouchdown || !isTouchEvent(e)) {\n return;\n }\n if ((eventManager.downIcon?.attribute as any)?.funcType === IconFuncTypeEnum.dragReorder) {\n // console.log()\n e.preventDefault();\n } else {\n if (eventManager.touchMovePoints?.length) {\n if (eventManager.touchMovePoints.length > 4) {\n eventManager.touchMovePoints.shift();\n }\n eventManager.touchMovePoints.push({\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n timestamp: Date.now()\n });\n // compute inertia parameter\n\n if (eventManager._enableTableScroll) {\n const firstPoint = eventManager.touchMovePoints[0];\n const lastPoint = eventManager.touchMovePoints[eventManager.touchMovePoints?.length - 1];\n const vX = (lastPoint.x - firstPoint.x) / (lastPoint.timestamp - firstPoint.timestamp);\n const vY = (lastPoint.y - firstPoint.y) / (lastPoint.timestamp - firstPoint.timestamp);\n //开始惯性滚动\n eventManager.inertiaScroll.startInertia(vX, vY, 0.95);\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager);\n });\n }\n }\n }\n eventManager.isTouchdown = false;\n eventManager.touchMovePoints = [];\n };\n window.addEventListener('touchend', globalTouchEndCallback);\n eventManager.globalEventListeners.push({\n name: 'touchend',\n env: 'window',\n callback: globalTouchEndCallback\n });\n\n const globalTouchCancelCallback = (e: TouchEvent) => {\n eventManager.touchEnd = true;\n eventManager.touchMove = false;\n if (!eventManager.isTouchdown) {\n return;\n }\n eventManager.isTouchdown = false;\n eventManager.touchMovePoints = [];\n };\n window.addEventListener('touchcancel', globalTouchCancelCallback);\n eventManager.globalEventListeners.push({\n name: 'touchcancel',\n env: 'window',\n callback: globalTouchCancelCallback\n });\n}\n\nfunction isTouchEvent(e: TouchEvent | MouseEvent): e is TouchEvent {\n return !!(e as TouchEvent).changedTouches;\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet } from '../util';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { PivotChart } from '../../PivotChart';\nimport { clearChartCacheImage } from '../../scenegraph/refresh-node/update-chart';\n\nexport function bindAxisClickEvent(table: BaseTableAPI) {\n if (!table.isPivotChart()) {\n return;\n }\n\n table.scenegraph.tableGroup.addEventListener('click', (e: FederatedPointerEvent) => {\n if (table.stateManager.columnMove.moving || table.stateManager.columnResize.resizing) {\n return;\n }\n if (e.target.name === 'axis-label') {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row } = eventArgsSet.eventArgs;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let dimensionKey;\n let dimensions: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n }[];\n if (layout.indicatorsAsCol) {\n dimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n dimensions = layout.getCellHeaderPaths(layout.rowHeaderLevelCount - 2, row).rowHeaderPaths;\n } else {\n dimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n dimensions = layout.getCellHeaderPaths(col, layout.columnHeaderLevelCount - 1).colHeaderPaths;\n }\n const filter = dimensions\n .map(dimension => {\n return {\n key: dimension.dimensionKey,\n value: dimension.value\n };\n })\n .filter(dimension => dimension.key);\n filter.push({ key: dimensionKey, value: (e.target.attribute as any).text });\n\n if (\n (table as PivotChart)._selectedDimensionInChart.length &&\n isSameSelectedDimension((table as PivotChart)._selectedDimensionInChart, filter)\n ) {\n return;\n }\n\n (table as PivotChart)._selectedDimensionInChart = filter;\n\n layout.updateDataStateToChartInstance();\n // 清除chart缓存图片\n clearChartCacheImage(table.scenegraph);\n table.scenegraph.updateNextFrame();\n } else if ((table as PivotChart)._selectedDimensionInChart?.length) {\n (table as PivotChart)._selectedDimensionInChart.length = 0;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n layout.updateDataStateToChartInstance();\n // 清除chart缓存图片\n clearChartCacheImage(table.scenegraph);\n table.scenegraph.updateNextFrame();\n }\n });\n}\n\nfunction isSameSelectedDimension(\n dimensions1: { key: string; value: string }[],\n dimensions2: { key: string; value: string }[]\n): boolean {\n if (dimensions1.length !== dimensions2.length) {\n return false;\n }\n for (let i = 0; i < dimensions1.length; i++) {\n if (dimensions1[i].key !== dimensions2[i].key || dimensions1[i].value !== dimensions2[i].value) {\n return false;\n }\n }\n return true;\n}\n","import { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function bindAxisHoverEvent(table: BaseTableAPI) {\n if (!table.isPivotChart()) {\n return;\n }\n\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, e => {\n const cellGroup = table.scenegraph.getCell(e.col, e.row);\n cellGroup.forEachChildren(child => {\n if (child.name === 'axis') {\n const position = getAxisPosition(e.col, e.row, table.internalProps.layoutMap as PivotHeaderLayoutMap);\n (e as any).axisPosition = position;\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_AXIS, e as any);\n }\n });\n });\n\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, e => {\n const cellGroup = table.scenegraph.getCell(e.col, e.row);\n cellGroup.forEachChildren(child => {\n if (child.name === 'axis') {\n const position = getAxisPosition(e.col, e.row, table.internalProps.layoutMap as PivotHeaderLayoutMap);\n (e as any).axisPosition = position;\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_AXIS, e as any);\n }\n });\n });\n}\n\nfunction getAxisPosition(col: number, row: number, layout: PivotHeaderLayoutMap) {\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'top';\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'bottom';\n } else if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.rowHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'left';\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'left';\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'right';\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'bottom';\n }\n }\n return 'bottom';\n}\n","import { isArray, isNumber } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { setCellCheckboxStateByAttribute } from '../../state/checkbox/checkbox';\n\nexport function bindGroupTitleCheckboxChange(table: BaseTableAPI) {\n table.on('checkbox_state_change', args => {\n if (table.internalProps.rowSeriesNumber?.enableTreeCheckbox !== true) {\n return;\n }\n\n const { col, row, checked } = args;\n const record = table.getCellOriginRecord(col, row);\n const indexedData = (table.dataSource as any).currentPagerIndexedData as (number | number[])[];\n const titleShowIndex = table.getRecordShowIndexByCell(col, row);\n let titleIndex = indexedData[titleShowIndex];\n if (isNumber(titleIndex)) {\n titleIndex = [titleIndex];\n }\n\n if (record.vtableMerge) {\n // 1. group title\n if (checked) {\n // 1.1 group title check\n // 1.1.1 check all children\n setAllChildrenCheckboxState(true, titleShowIndex, titleIndex, indexedData, table);\n // 1.1.2 update group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n } else {\n // 1.2 group title uncheck\n // 1.2.1 uncheck all children\n setAllChildrenCheckboxState(false, titleShowIndex, titleIndex, indexedData, table);\n // 1.2.2 update group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n\n // 1.2.3 update header checkbox state\n const oldHeaderCheckedState = table.stateManager.headerCheckedState._vtable_rowSeries_number;\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState('_vtable_rowSeries_number', col, row);\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n } else {\n // 2. group content, reset group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n }\n });\n}\n\nfunction setAllChildrenCheckboxState(\n state: boolean,\n titleShowIndex: number,\n titleIndex: number[],\n indexedData: (number | number[])[],\n table: BaseTableAPI\n) {\n let i = titleShowIndex + 1;\n while (isArray(indexedData[i]) && (indexedData[i] as number[])?.length > titleIndex.length) {\n const row = table.columnHeaderLevelCount + i;\n table.stateManager.setCheckedState(0, row, '_vtable_rowSeries_number', state);\n setCellCheckboxStateByAttribute(0, row, state, table);\n i++;\n }\n}\n\nfunction updateGroupTitleCheckboxState(\n titleShowIndex: number,\n titleIndex: number[],\n indexedData: (number | number[])[],\n table: BaseTableAPI\n) {\n let parentLength = titleIndex.length - 1;\n if (parentLength > 0) {\n let i = titleShowIndex - 1;\n while (parentLength > 0 && i >= 0) {\n if (\n (isArray(indexedData[i]) && (indexedData[i] as number[])?.length === parentLength) ||\n (parentLength === 1 && isNumber(indexedData[i]))\n ) {\n const row = table.columnHeaderLevelCount + i;\n // check all children\n updateParentCheckboxState(0, row, indexedData[i], table);\n // table.stateManager.setCheckedState(0, row, '_vtable_rowSeries_number', 'indeterminate');\n // setCellCheckboxStateByAttribute(0, row, 'indeterminate', table);\n\n parentLength--;\n }\n i--;\n }\n }\n}\n\nfunction updateParentCheckboxState(col: number, row: number, currentIndex: number | number[], table: BaseTableAPI) {\n const { checkedState } = table.stateManager;\n const key = currentIndex.toString();\n const currentIndexLength = isArray(currentIndex) ? currentIndex.length : 1;\n let start = false;\n const result: (boolean | string)[] = [];\n checkedState.forEach((value, index: string) => {\n if (start) {\n const indexData = index.split(',');\n if (indexData.length === currentIndexLength) {\n start = false;\n } else {\n result.push(value._vtable_rowSeries_number);\n }\n }\n if (index === key) {\n start = true;\n }\n });\n\n if (result.length === 0) {\n return;\n }\n\n const allChecked = result.every(item => !!item);\n const allUnChecked = result.every(item => !item);\n\n if (allChecked) {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', true);\n setCellCheckboxStateByAttribute(col, row, true, table);\n } else if (allUnChecked) {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', false);\n setCellCheckboxStateByAttribute(col, row, false, table);\n } else {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', 'indeterminate');\n setCellCheckboxStateByAttribute(col, row, 'indeterminate', table);\n }\n}\n","import type {\n FontIcon,\n ImageIcon,\n // NamedIcon,\n PathIcon,\n SvgIcon\n} from '../ts-types';\n\ntype IconPropKey = keyof FontIcon | keyof SvgIcon | keyof ImageIcon | keyof PathIcon;\n// | keyof NamedIcon;\nconst ICON_PROP_KEYS: IconPropKey[] = [\n //TODO 需要去掉这个逻辑 每次fontIcon新增属性 就会丢失 定位到是这里需要对应加上key\n 'type',\n 'content',\n 'font',\n 'color',\n 'width',\n 'height',\n 'marginRight',\n 'marginLeft',\n 'src',\n 'svg',\n 'name',\n 'path',\n 'positionType',\n 'tooltip',\n 'hover',\n 'cursor',\n 'shape',\n 'interactive',\n 'isGif'\n];\n\nexport const iconPropKeys = ICON_PROP_KEYS;\n","import type { ColumnIconOption, ImageIcon, ListTableAPI, SvgIcon } from '../ts-types';\nimport { HierarchyState, InternalIconName } from '../ts-types';\nimport * as registerIcons from '../icons';\nimport { Style } from './style/Style';\nimport { TextStyle } from './style/MultilineTextStyle';\nimport { ProgressBarStyle } from './style/ProgressBarStyle';\nimport { ImageStyle } from './style/ImageStyle';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport * as icons from '../tools/icons';\nimport { obj } from '../tools/helper';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { RadioStyle } from './style/RadioStyle';\nimport { isValid } from '@visactor/vutils';\nexport class BodyHelper {\n expandIcon: SvgIcon;\n collapseIcon: SvgIcon;\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n //展开折叠按钮\n this.expandIcon = regedIcons[InternalIconName.expandIconName] as SvgIcon;\n this.collapseIcon = regedIcons[InternalIconName.collapseIconName] as SvgIcon;\n }\n getIcons(\n col: number,\n row: number,\n cellValue: any,\n dataValue: any,\n context: CanvasRenderingContext2D\n ): ColumnIconOption[] {\n //加入固定列图标 排序 文本中元素\n const iconArr: ColumnIconOption[] = [];\n\n const hierarchyIcon = this.getHierarchyIcon(col, row);\n if (hierarchyIcon) {\n iconArr.push(hierarchyIcon);\n }\n\n const { icon: iconDefine } = this._table.getBodyColumnDefine(col, row);\n\n if (iconDefine) {\n let iconResults;\n if (typeof iconDefine === 'function') {\n const arg = {\n col,\n row,\n value: cellValue,\n dataValue,\n table: this._table\n };\n iconResults = iconDefine(arg);\n } else {\n iconResults = iconDefine;\n }\n const regedIcons = registerIcons.get();\n const addIcon = (columnIcon: string | ColumnIconOption) => {\n let icon;\n if (typeof columnIcon === 'string') {\n icon = regedIcons[columnIcon];\n } else {\n icon = columnIcon;\n }\n if (icon) {\n iconArr.push(icon);\n }\n };\n if (Array.isArray(iconResults)) {\n iconResults.forEach((columnIcon: string | ColumnIconOption, index: number) => {\n addIcon(columnIcon);\n });\n } else {\n addIcon(iconResults);\n }\n }\n\n context &&\n iconArr.forEach((i, index) => {\n if ((i as any).content || (i).src) {\n iconArr[index] = this.getCellIconFromRecordValue(i, col, row);\n // if ((i).font)\n // helper.testFontLoad((i).font, (i).content, col, row);\n }\n });\n\n return iconArr;\n }\n getStyleClass(\n cellType:\n | 'text'\n | 'link'\n | 'image'\n | 'video'\n | 'chart'\n | 'sparkline'\n | 'progressbar'\n | 'chart'\n | 'checkbox'\n | 'radio'\n ) {\n switch (cellType) {\n case 'text':\n return TextStyle;\n case 'image':\n return ImageStyle;\n case 'video':\n return ImageStyle;\n case 'link':\n return TextStyle;\n case 'chart':\n return Style;\n case 'sparkline':\n return Style;\n case 'progressbar':\n return ProgressBarStyle;\n case 'checkbox':\n return CheckboxStyle;\n case 'radio':\n return RadioStyle;\n }\n return TextStyle;\n }\n getCellIconFromRecordValue(icon: ColumnIconOption, col: number, row: number): ColumnIconOption;\n getCellIconFromRecordValue(icon: ColumnIconOption[], col: number, row: number): ColumnIconOption[];\n getCellIconFromRecordValue(\n icon: ColumnIconOption | ColumnIconOption[],\n col: number,\n row: number\n ): ColumnIconOption | ColumnIconOption[];\n getCellIconFromRecordValue(\n icon: ColumnIconOption | ColumnIconOption[],\n col: number,\n row: number\n ): ColumnIconOption | ColumnIconOption[] {\n if (Array.isArray(icon)) {\n return icon.map(i => this.getCellIconFromRecordValue(i, col, row));\n }\n // icon.positionType = IconPosition.inlineFront;\n if (!obj.isObject(icon) || typeof icon === 'function') {\n return (this._table as ListTableAPI).getFieldData(icon, col, row);\n }\n // 新建对象 挨个属性赋值\n const retIcon: any = {};\n const iconOpt: any = icon;\n icons.iconPropKeys.forEach(k => {\n if (typeof iconOpt[k] !== 'undefined') {\n const f = (this._table as ListTableAPI).getFieldData(iconOpt[k], col, row);\n if (isValid(f)) {\n retIcon[k] = f;\n } else if (!this._table._hasField?.(iconOpt[k], col, row)) {\n retIcon[k] = iconOpt[k];\n }\n }\n });\n return retIcon;\n }\n\n getHierarchyIcon(col: number, row: number) {\n const hierarchyState = this._table.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n //展开状态 应该显示-号\n return this.expandIcon;\n } else if (hierarchyState === HierarchyState.collapse) {\n //折叠状态 应该显示-号\n return this.collapseIcon;\n }\n return undefined;\n }\n getHierarchyIconWidth() {\n return this.expandIcon.width + (this.expandIcon.marginLeft ?? 0) + (this.expandIcon.marginRight ?? 0);\n }\n}\n","export function createElement(tagName: string, classNames?: string[]): HTMLElement {\n const element = document.createElement(tagName);\n if (classNames) {\n element.classList.add(...classNames);\n }\n return element;\n}\n","import { EventHandler } from '../../../../event/EventHandler';\nimport type {\n DropDownMenuHighlightInfo,\n IDimensionInfo,\n MenuInstanceInfo,\n MenuListItem,\n Placement,\n RectProps\n} from '../../../../ts-types';\nimport { createElement } from '../../../../tools/dom';\nimport { importStyle } from './MenuElementStyle';\nimport { TABLE_EVENT_TYPE } from '../../../../core/TABLE_EVENT_TYPE';\nimport { cellInRange } from '../../../../tools/helper';\nimport { isValid } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../../../../layout/pivot-header-layout';\nimport { regUrl } from '../../../../tools/global';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimportStyle();\n\nconst CLASSNAME = 'vtable__menu-element';\nconst ITEM_CLASSNAME = `${CLASSNAME}__item`;\nconst CONTENT_CLASSNAME = `${CLASSNAME}__content`;\nconst HIDDEN_CLASSNAME = `${CLASSNAME}--hidden`;\nconst SHOWN_CLASSNAME = `${CLASSNAME}--shown`;\nconst NORAML_CLASSNAME = `${CLASSNAME}--normal`;\nconst SELECT_CLASSNAME = `${CLASSNAME}--select`;\nconst ICOM_CLASSNAME = `${CLASSNAME}__icon`;\nconst SPLIT_CLASSNAME = `${CLASSNAME}__split`;\nconst TITLE_CLASSNAME = `${CLASSNAME}__title`;\nconst ARROW_CLASSNAME = `${CLASSNAME}__arrow`;\nconst NOEVENT_CLASSNAME = `${CLASSNAME}__no-event`;\nconst ITEMTEXT_CLASSNAME = `${CLASSNAME}__item-text`;\n\nfunction createMenuDomElement(): HTMLElement {\n const rootElement = createElement('div', [CLASSNAME, HIDDEN_CLASSNAME]);\n return rootElement;\n}\n\nexport function isMenuHighlight(\n _table: BaseTableAPI,\n cells: DropDownMenuHighlightInfo[],\n menuKeyCurrent: string,\n colCurrent: number,\n rowCurrent: number,\n index: number\n) {\n const cellRange = _table.getCellRange(colCurrent, rowCurrent);\n for (let i = 0; i < cells.length; i++) {\n const highlight = cells[i];\n let { col, row } = highlight;\n const { field, menuKey } = highlight;\n\n if (typeof col !== 'number' || typeof row !== 'number') {\n if (_table.isPivotTable() && typeof Array.isArray(field)) {\n const cellAddress = (_table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(\n field as IDimensionInfo[]\n );\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n } else {\n const cellAddress = _table.internalProps.layoutMap.getHeaderCellAddressByField(field as string);\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n }\n }\n\n if (isValid(col) && isValid(row) && cellInRange(cellRange, col, row)) {\n // dropDownIndex在多级菜单中判断会有问题\n // if (typeof dropDownIndex === 'number' && dropDownIndex === index) {\n // return true;\n // }\n if (menuKeyCurrent === menuKey) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport class MenuElement {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _secondElement?: HTMLElement;\n private _menuInstanceInfo?: MenuInstanceInfo;\n private _showChildrenIndex: number;\n private _mouseEnterSecondElement: boolean;\n constructor(table: BaseTableAPI) {\n this._handler = new EventHandler();\n this._rootElement = createMenuDomElement();\n this._secondElement = createMenuDomElement();\n (this._secondElement as any).sub = true;\n this._showChildrenIndex = -1;\n\n // 鼠标在菜单上滚动阻止冒泡\n this._rootElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n // 绑定交互事件\n this._rootElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._rootElement?.addEventListener('contextmenu', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n // 在移动端_rootElement的click事件在表格的touchend事件后触发,\n // 表格的touchend事件会引发selecter.start,从而清空菜单\n // 这样就会导致_rootElement的click事件无法触发\n // 因此菜_rootElement监听touchend事件,在表格的touchend事件前触发\n // 执行菜单点击功能\n this._rootElement?.addEventListener('touchend', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n // table.invalidateCell(col, row); // 更新状态图表\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n\n e.stopPropagation();\n\n // 处理二级菜单\n const { hasChildren, dropDownIndex, col, row, sub } = e.target as any;\n if (hasChildren) {\n // 更新二级菜单\n this._showChildrenIndex = dropDownIndex;\n const secondElement = this._secondElement;\n secondElement?.classList.remove(HIDDEN_CLASSNAME);\n secondElement?.classList.add(SHOWN_CLASSNAME);\n secondElement.innerHTML = '';\n\n // 添加item\n const children = (this._menuInstanceInfo.content[dropDownIndex] as any)?.children;\n for (let i = 0; i < children.length; i++) {\n const menuItem = children[i];\n const isHighlight = table.stateManager.menu.dropDownMenuHighlight\n ? isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n col,\n row,\n i\n )\n : false;\n\n const item = createItem(menuItem, isHighlight) as any;\n // dom绑定相关属性\n item.col = col;\n item.row = row;\n item.dropDownIndex = i;\n if (typeof menuItem === 'string') {\n item.text = menuItem;\n item.menuKey = menuItem;\n } else if (typeof menuItem === 'object') {\n item.text = menuItem.text;\n item.menuKey = menuItem.menuKey || menuItem.text;\n }\n item.sub = true;\n item.sub = true;\n secondElement.appendChild(item);\n }\n\n // 对齐菜单位置\n const rect = (e.target as any).getBoundingClientRect();\n this._bindSecondElement(table, col, row, rect.right, rect.top);\n } else if (hasChildren && this._showChildrenIndex === dropDownIndex) {\n const secondElement = this._secondElement;\n secondElement?.classList.remove(HIDDEN_CLASSNAME);\n secondElement?.classList.add(SHOWN_CLASSNAME);\n } else if (!sub && this._secondElement?.classList.contains(SHOWN_CLASSNAME)) {\n setTimeout(() => {\n //因为增加了主菜单和子菜单的间距 鼠标在移入子菜单的过程中 可能引起子菜单消失 这里增加延时处理\n if (this._mouseEnterSecondElement !== true) {\n this._showChildrenIndex = -1;\n const secondElement = this._secondElement;\n secondElement?.classList.remove(SHOWN_CLASSNAME);\n secondElement?.classList.add(HIDDEN_CLASSNAME);\n }\n }, 300);\n }\n });\n\n // 鼠标在菜单上滚动阻止冒泡\n this._secondElement?.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n this._secondElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousemove', e);\n // table.hoverIcon = undefined;\n\n e.stopPropagation();\n });\n this._secondElement?.addEventListener('mouseenter', e => {\n this._mouseEnterSecondElement = true;\n });\n this._secondElement?.addEventListener('mouseleave', e => {\n this._mouseEnterSecondElement = false;\n });\n this._secondElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._secondElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._secondElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n let highlight = false;\n const menus = this._menuInstanceInfo.content;\n menus.forEach((menu, i) => {\n if (typeof menu === 'object' && menu.children && menu.children.length) {\n for (let j = 0; j < menu.children.length; j++) {\n const childItem = menu.children[j];\n if (\n isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey : childItem,\n col,\n row,\n -1\n ) &&\n menuKey === (typeof childItem === 'object' ? childItem?.menuKey : childItem)\n ) {\n highlight = true;\n return;\n }\n }\n }\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n cellHeaderPaths: table.isPivotTable() ? table.getCellHeaderPaths(col, row) : undefined,\n menuKey,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n e.stopPropagation();\n });\n }\n get rootElement() {\n return this._rootElement;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler.release();\n delete this._rootElement;\n }\n bindToCell(table: BaseTableAPI, col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const rootElement = this._rootElement;\n const secondElement = this._secondElement;\n this._menuInstanceInfo = menuInstanceInfo;\n\n rootElement?.classList.remove(SHOWN_CLASSNAME);\n rootElement?.classList.add(HIDDEN_CLASSNAME);\n secondElement?.classList.remove(SHOWN_CLASSNAME);\n secondElement?.classList.add(HIDDEN_CLASSNAME);\n\n if (this._canBindToCell(table, col, row)) {\n // messageElement && (messageElement.textContent = 'aaa');\n // 生成下拉菜单dom\n rootElement.innerHTML = '';\n\n if (Array.isArray(menuInstanceInfo.content)) {\n const menuListItem = menuInstanceInfo.content;\n for (let i = 0; i < menuListItem?.length ?? 0; i++) {\n const menuItem = menuListItem[i];\n let isHighlight = table.stateManager.menu.dropDownMenuHighlight\n ? isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n col,\n row,\n i\n )\n : false;\n\n if (\n table.stateManager.menu.dropDownMenuHighlight &&\n typeof menuItem === 'object' &&\n Array.isArray(menuItem.children) &&\n menuItem.children.length\n ) {\n // 判断子项目是否高亮\n for (let i = 0; i < menuItem.children.length; i++) {\n const childItem = menuItem.children[i];\n // eslint-disable-next-line max-depth\n if (\n isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey || childItem?.text : childItem,\n col,\n row,\n i\n )\n ) {\n isHighlight = true;\n break;\n }\n }\n }\n\n const item = createItem(menuItem, isHighlight) as any;\n // dom绑定相关属性\n item.col = col;\n item.row = row;\n item.dropDownIndex = i;\n if (typeof menuItem === 'string') {\n item.text = menuItem;\n item.menuKey = menuItem;\n } else if (typeof menuItem === 'object') {\n item.text = menuItem.text;\n item.menuKey = menuItem.menuKey || menuItem.text;\n if (menuItem.children?.length) {\n item.hasChildren = true;\n }\n }\n rootElement.appendChild(item);\n }\n }\n const binded = this._bindToCell(table, col, row, menuInstanceInfo.position, menuInstanceInfo.referencePosition);\n\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASSNAME);\n rootElement?.classList.remove(HIDDEN_CLASSNAME);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n unbindFromCell(): void {\n const rootElement = this._rootElement;\n const secondElement = this._secondElement;\n this._menuInstanceInfo = undefined;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASSNAME);\n rootElement.classList.add(HIDDEN_CLASSNAME);\n }\n if (secondElement?.parentElement) {\n secondElement.classList.remove(SHOWN_CLASSNAME);\n secondElement.classList.add(HIDDEN_CLASSNAME);\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { top, bottom, left, right } = rect;\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n const { offsetHeight, offsetWidth } = element;\n if (offsetHeight < top) {\n return false;\n }\n if (offsetWidth < left) {\n return false;\n }\n return true;\n }\n _bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement }\n ): boolean {\n const rootElement = this._rootElement;\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const {\n width: containerWidth,\n height: containerHeight,\n left: containerLeft,\n top: containerTop\n } = element.getBoundingClientRect();\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement); // 之前在做dom边缘躲避的时候放到了table.getParentElement()上,但发现不是相对定位导致位置错位\n }\n rootElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.offsetWidth;\n const rootElementHeight = rootElement.offsetHeight;\n let rootElementLeft;\n let rootElementTop;\n if (position) {\n rootElementLeft = position.x;\n rootElementTop = position.y;\n } else if (referencePosition) {\n rootElementLeft = referencePosition.rect.right - rootElementWidth;\n rootElementTop = referencePosition.rect.bottom;\n }\n\n // 获取元素的边界矩形\n const rect = element.getBoundingClientRect();\n\n // 计算缩放比例\n const scaleX = rect.width / element.offsetWidth;\n const scaleY = rect.height / element.offsetHeight;\n\n // rootElementLeft = position.x - rootElementWidth;\n // let leftStyle = rootElementLeft;\n // 检测下方能否容纳,不能容纳向上偏移\n if (rootElementTop * scaleY + rootElementHeight > containerHeight) {\n rootElementTop = (containerHeight - rootElementHeight) / scaleY;\n // rootElementLeft += rootElementWidth - 2;\n }\n // 偏移后上方超出canvas范围,居中显示\n if (rootElementTop < 0) {\n rootElementTop = rootElementTop / 2;\n }\n\n let deltaTop = 0;\n let deltaLeft = 0;\n if (table.getElement() !== element) {\n const { left, top } = table.getElement().getBoundingClientRect();\n deltaTop = top - containerTop;\n deltaLeft = left - containerLeft;\n }\n rootElement.style.top = `${rootElementTop + deltaTop}px`;\n\n // 判断如果超出左右范围则靠边显示\n if (rootElementLeft < 0) {\n rootElementLeft = 0;\n } else if (rootElementLeft * scaleX + rootElementWidth > containerWidth) {\n rootElementLeft = (containerWidth - rootElementWidth) / scaleX;\n }\n rootElement.style.left = `${rootElementLeft + deltaLeft}px`;\n\n return true;\n }\n return false;\n }\n _bindSecondElement(table: BaseTableAPI, col: number, row: number, x: number, y: number): boolean {\n const secondElement = this._secondElement;\n const rootElement = this._rootElement;\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { width: containerWidth, left: containerLeft, top: containerTop } = element.getBoundingClientRect();\n const { x: rootLeft, y: rootTop, width: rootWidth } = rootElement.getBoundingClientRect();\n\n if (secondElement) {\n // if (secondElement.parentElement !== rootElement) {\n // rootElement.appendChild(secondElement);\n // }\n if (secondElement.parentElement !== element) {\n element.appendChild(secondElement);\n }\n\n secondElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n secondElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const secondElementWidth = secondElement.clientWidth;\n // const secondElementHeight = secondElement.clientHeight;\n\n const secondElementTop = y - 4 - containerTop;\n const secondElementLeft = x - containerLeft;\n\n secondElement.style.top = `${secondElementTop}px`;\n let leftStyle = secondElementLeft;\n\n // 判断如果超出右范围则靠左边显示\n if (leftStyle + secondElementWidth > containerWidth) {\n leftStyle = leftStyle - secondElementWidth - rootWidth;\n } else {\n leftStyle += 4; //位置调整 需要和主菜单之间有4px的间隔\n }\n secondElement.style.left = `${leftStyle}px`;\n\n return true;\n }\n return false;\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const rootElement = this._rootElement;\n\n const { x: rootLeft, y: rootTop, width: rootWidth, height: rootHeight } = rootElement.getBoundingClientRect();\n if (x > rootLeft - 5 && x < rootLeft + rootWidth + 5 && y > rootTop - 5 && y < rootTop + rootHeight + 5) {\n return true;\n }\n const secondElement = this._secondElement;\n if (secondElement) {\n const {\n x: secondLeft,\n y: secondTop,\n width: secondWidth,\n height: secondHeight\n } = rootElement.getBoundingClientRect();\n if (\n x > secondLeft - 5 &&\n x < secondLeft + secondWidth + 5 &&\n y > secondTop - 5 &&\n y < secondTop + secondHeight + 5\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction createItem(info: MenuListItem, isHighlight: boolean): HTMLDivElement {\n const itemContainer = createElement('div', [\n ITEM_CLASSNAME,\n isHighlight ? SELECT_CLASSNAME : NORAML_CLASSNAME\n ]) as HTMLDivElement;\n\n if (typeof info === 'string') {\n const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n item.innerHTML = info;\n itemContainer.appendChild(item);\n } else if (typeof info === 'object') {\n const type = info.type ?? 'item';\n if (type === 'split') {\n itemContainer?.classList.add(SPLIT_CLASSNAME);\n return itemContainer;\n }\n if (info?.icon?.svg) {\n if (regUrl.test(info.icon.svg)) {\n const image = new Image();\n if (info.icon.width) {\n image.style.width = info.icon.width.toString() + 'px';\n } else {\n image.style.width = '16px';\n }\n if (info.icon.height) {\n image.style.height = info.icon.height.toString() + 'px';\n } else {\n image.style.height = '16px';\n }\n image.src = info.icon.svg;\n itemContainer.appendChild(image);\n } else {\n const svg = createElement('span', [ICOM_CLASSNAME, NOEVENT_CLASSNAME]);\n svg.innerHTML =\n isHighlight && info.selectedIcon && info.selectedIcon.svg ? info.selectedIcon.svg : info.icon.svg;\n info.icon.width && (svg.children[0] as SVGElement).setAttribute('width', info.icon.width.toString());\n info.icon.height && (svg.children[0] as SVGElement).setAttribute('height', info.icon.height.toString());\n itemContainer.appendChild(svg);\n }\n }\n const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n item.innerHTML = info.text;\n itemContainer.appendChild(item);\n if (type === 'title') {\n itemContainer?.classList.add(NOEVENT_CLASSNAME, TITLE_CLASSNAME);\n } else if (info?.children?.length) {\n const arrow = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ARROW_CLASSNAME]);\n arrow.innerHTML = isHighlight\n ? ''\n : '';\n itemContainer.appendChild(arrow);\n }\n }\n return itemContainer;\n}\n","import { Env } from '../../../../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-menu-styleSheet';\n styleElement.textContent = `\n@keyframes vtable__menu-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__menu-element {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tborder-radius: 4px;\n\tbackground-color: #fff;\n\tpadding: 6px 0;\n\t/* pointer-events: none; */\n\tuser-select: none;\n\tcolor: #000;\n\tmax-width: 300px;\n\tz-index: 99999;\n\tborder: #CCC 0.5px solid;\n\tcursor: default;\n\twidth: max-content;\n\tbox-shadow: 0px 8px 16px rgba(27, 31, 35, 0.12);\n max-height: 100%;\n overflow-y: auto;\n}\n.vtable__menu-element--hidden {\n\topacity: 0;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n\tz-index: -9999;\n}\n.vtable__menu-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__menu-element--shown-animation 150ms ease-out;\n}\n.vtable__menu-element__content {\n\tfont-family: Roboto;\n\tfont-size: 12px;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\t/* height: 100%; */\n\tline-height: 30px;\n}\n.vtable__menu-element__item {\n\theight: 32px;\n\tpadding: 0px 12px;\n\tcursor: pointer;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n}\n.vtable__menu-element__item:hover {\n\tbackground-color: rgba(27, 31, 35, 0.06);\n}\n.vtable__menu-element__icon{\n\t/* vertical-align: top; */\n\tdisplay: flex;\n\t/* line-height: 30px; */\n\tmargin-right: 6px;\n}\n.vtable__menu-element__no-event {\n\tpointer-events: none;\n}\n.vtable__menu-element--select {\n\tcolor: #2E68CF;\n}.vtable__menu-element--normal {\n\tcolor: rgba(20, 20, 20, 0.9);;\n}\n.vtable__menu-element__split {\n\theight: 0px;\n\tborder: 1px solid rgb(209, 213, 218);\n\tmargin: 5px 0;\n}\n.vtable__menu-element__title {\n\tcolor: rgb(149, 149, 149);\n}\n.vtable__menu-element__arrow {\n\tposition: absolute;\n\tright: 3px;\n\tfont-weight: bold;\n\tmargin-top: 1px;\n}\n.vtable__menu-element__item-text {\n\tmargin-right: 15px;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import type {\n ColumnIconOption,\n ColumnsDefine,\n ListTableAPI,\n PivotTableAPI,\n RectProps,\n SortOrder,\n SvgIcon\n} from '../ts-types';\nimport { HierarchyState, IconFuncTypeEnum, IconPosition, InternalIconName } from '../ts-types';\nimport * as registerIcons from '../icons';\nimport { cellInRange } from '../tools/helper';\nimport { isMenuHighlight } from '../components/menu/dom/logic/MenuElement';\nimport { Style } from './style/Style';\nimport { ImageStyle } from './style/ImageStyle';\nimport { TextHeaderStyle } from './style';\nimport type { ListTable } from '../ListTable';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { isValid } from '@visactor/vutils';\nexport class HeaderHelper {\n normalIcon: SvgIcon;\n upIcon: SvgIcon;\n downIcon: SvgIcon;\n freezeIcon: SvgIcon;\n frozenIcon: SvgIcon;\n frozenCurrentIcon: SvgIcon;\n dropDownAbsoluteIcon: SvgIcon;\n // dropDownHoverIcon: SvgIcon;\n\n expandIcon: SvgIcon;\n collapseIcon: SvgIcon;\n // //存储鼠标hover到的图标类型,后面需要用name判断,应该再拿个inline对象上赋值showFrozenIconIcon,绘制感应区域\n // _showFrozenIconIcon?: SvgIcon;\n // _showSortIcon?: SvgIcon;\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n //pin默认值\n this.freezeIcon = regedIcons[InternalIconName.freezeIconName] as SvgIcon;\n this.frozenIcon = regedIcons[InternalIconName.frozenIconName] as SvgIcon;\n this.frozenCurrentIcon = regedIcons[InternalIconName.frozenCurrentIconName] as SvgIcon;\n\n //sort默认值\n this.normalIcon = regedIcons[InternalIconName.normalIconName] as SvgIcon;\n this.upIcon = regedIcons[InternalIconName.upwardIconName] as SvgIcon;\n this.downIcon = regedIcons[InternalIconName.downwardIconName] as SvgIcon;\n //下拉按钮\n this.dropDownAbsoluteIcon = regedIcons[InternalIconName.dropdownIconName] as SvgIcon;\n // this.dropDownHoverIcon = regedIcons[InternalIconName.dropdownHoverIconName] as SvgIcon;\n //展开折叠按钮\n this.expandIcon = regedIcons[InternalIconName.expandIconName] as SvgIcon;\n this.collapseIcon = regedIcons[InternalIconName.collapseIconName] as SvgIcon;\n }\n\n getIcons(col: number, row: number): ColumnIconOption[] {\n //加入固定列图标 排序 文本中元素\n const icons: ColumnIconOption[] = [];\n if (this._table.isPivotTable()) {\n // 透视表显示排序按钮\n const { showSort, sort } = this._table.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n let _showSort;\n if (typeof showSort === 'function') {\n _showSort = showSort({ col, row, table: this._table });\n } else {\n _showSort = showSort;\n }\n if (_showSort) {\n let order = (this._table as PivotTableAPI).getPivotSortState(col, row) as string;\n if (order) {\n order = order.toUpperCase();\n }\n const sortIcon = order === 'ASC' ? this.upIcon : order === 'DESC' ? this.downIcon : this.normalIcon;\n\n if (sortIcon) {\n icons.push(sortIcon);\n }\n } else if (sort) {\n // 处理配置了sort的情况\n const sortIcon = this.getSortIconForPivotTable(\n (this._table as PivotTableAPI).getPivotSortState(col, row),\n this._table,\n col,\n row\n );\n if (sortIcon) {\n icons.push(sortIcon);\n }\n }\n } else {\n const states = (this._table as ListTableAPI).sortState;\n let order: SortOrder | undefined;\n order = undefined;\n const range = this._table.getCellRange(col, row);\n if (states) {\n if (Array.isArray(states)) {\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n const stateRange = this._table._getHeaderCellBySortState(state);\n if (stateRange && cellInRange(range, stateRange.col, stateRange.row)) {\n ({ order } = state);\n break;\n }\n }\n } else {\n const stateRange = this._table._getHeaderCellBySortState(states);\n if (stateRange && cellInRange(range, stateRange.col, stateRange.row)) {\n ({ order } = states);\n }\n }\n }\n const sortIcon = this.getSortIcon(order, this._table, col, row);\n if (sortIcon) {\n icons.push(sortIcon);\n }\n }\n\n if (this._table.showFrozenIcon && col < this._table.allowFrozenColCount) {\n const pinInline = this.getFrozenIcon(col, row);\n if (pinInline) {\n icons.push(pinInline);\n // context.showIcon = this.showFrozenIconIcon;//todo 暂时去掉 需要想其他方式\n }\n }\n\n if (this.checkDropDownIcon(this._table, col, row)) {\n // const dropDownMenuHoverIcon = this.dropDownHoverIcon;//this.getDropDownHoverIcon(_table, col, row);\n const dropDownMenuIcon = this.dropDownAbsoluteIcon; //this.getDropDownAbsoluteIcon(_table, col, row);\n // dropDownMenuIcon.hover.image = dropDownMenuHoverIcon.svg; // to do 规范化处理\n icons.push(dropDownMenuIcon);\n }\n\n const dropDownStateIcons = this.getDropDownStateIcons(this._table, col, row);\n if (dropDownStateIcons.length) {\n icons.push(...dropDownStateIcons);\n }\n\n const { headerIcon } = this._table._getHeaderLayoutMap(col, row) as HeaderData;\n // captionIcon && icons.push(captionIcon);\n\n const hierarchyIcon = this.getHierarchyIcon(col, row);\n if (hierarchyIcon) {\n icons.push(hierarchyIcon);\n }\n\n if (headerIcon) {\n let headerIconStrs;\n if (typeof headerIcon === 'function') {\n const arg = {\n col,\n row,\n value: this._table.getCellValue(col, row),\n dataValue: this._table.getCellOriginValue(col, row),\n table: this._table\n };\n headerIconStrs = headerIcon(arg);\n } else {\n headerIconStrs = headerIcon;\n }\n const regedIcons = registerIcons.get();\n const addIcon = (headerIcon: string | ColumnIconOption) => {\n let icon;\n if (typeof headerIcon === 'string') {\n icon = regedIcons[headerIcon];\n } else {\n icon = headerIcon;\n }\n if (icon) {\n icons.push(icon);\n }\n };\n if (Array.isArray(headerIconStrs)) {\n headerIconStrs.forEach((columnIcon: string | ColumnIconOption, index: number) => {\n addIcon(columnIcon);\n });\n } else {\n addIcon(headerIconStrs);\n }\n }\n return icons;\n }\n\n getFrozenIcon(col: number, row: number): ColumnIconOption | null {\n // this.showFrozenIconIcon = undefined;\n if (this._table.isPivotTable() || (this._table as ListTable).transpose) {\n // 透视表和转置模式不显示冻结按钮\n return null;\n }\n\n if (this._table.rightFrozenColCount && col >= this._table.colCount - this._table.rightFrozenColCount) {\n return null;\n }\n const headerC = this._table.getHeaderDefine(col, row) as any;\n if (headerC.columns && headerC.columns.length > 0) {\n return null;\n }\n\n let frozen = this.freezeIcon;\n // 使用table.options.frozenColCount原始冻结信息获取按钮\n if (this._table.options.frozenColCount - 1 > col) {\n frozen = this.frozenIcon;\n } else if (this._table.options.frozenColCount - 1 === col) {\n frozen = this.frozenCurrentIcon;\n }\n return frozen;\n }\n\n getSortIcon(order: SortOrder | undefined, _table: BaseTableAPI, col: number, row: number): ColumnIconOption | null {\n // this.showSortIcon = undefined;\n const icon = order === 'asc' ? this.upIcon : order === 'desc' ? this.downIcon : this.normalIcon;\n\n const headerC = _table.getHeaderDefine(col, row) as any;\n let _showSort;\n if (headerC) {\n if (typeof headerC.showSort === 'function') {\n _showSort = headerC.showSort({ col, row, table: this._table });\n } else {\n _showSort = headerC.showSort;\n }\n }\n if (\n !headerC ||\n _showSort === false ||\n (!isValid(_showSort) && !headerC.sort) ||\n (headerC.columns && headerC.columns.length > 0)\n ) {\n return null;\n }\n return icon;\n }\n\n getSortIconForPivotTable(\n order: SortOrder | undefined,\n _table: BaseTableAPI,\n col: number,\n row: number\n ): ColumnIconOption | null {\n const headerC = _table.getHeaderDefine(col, row) as any;\n let _showSort;\n if (headerC) {\n if (typeof headerC.showSort === 'function') {\n _showSort = headerC.showSort({ col, row, table: this._table });\n } else {\n _showSort = headerC.showSort;\n }\n }\n if (\n !headerC ||\n _showSort === false ||\n (!isValid(_showSort) && !headerC.sort) ||\n (headerC.columns && headerC.columns.length > 0)\n ) {\n return null;\n }\n const icon =\n order?.toUpperCase() === 'ASC' ? this.upIcon : order?.toUpperCase() === 'DESC' ? this.downIcon : this.normalIcon;\n // const icon = order === 'ASC' ? this.downIcon : this.upIcon;\n return icon;\n }\n\n private getDropDownStateIcons(_table: BaseTableAPI, col: number, row: number): ColumnIconOption[] {\n const headerC = _table.getHeaderDefine(col, row) as any;\n const headerL = _table._getHeaderLayoutMap(col, row);\n const { dropDownMenu } = headerL as HeaderData;\n const results: ColumnIconOption[] = [];\n if (\n (Array.isArray(dropDownMenu) && dropDownMenu.length) || // header中配置dropDownMenu\n (Array.isArray(_table.globalDropDownMenu) && _table.globalDropDownMenu.length && !headerC?.columns?.length) // 全局配置dropDownMenu,只在最下级表头展示\n ) {\n const menus = dropDownMenu || _table.globalDropDownMenu;\n let highlightIndex = -1;\n let subHighlightIndex = -1;\n for (let i = 0; i < menus.length; i++) {\n const menu = menus[i];\n // 优先判断子元素\n if (typeof menu === 'object' && menu.children && menu.children.length) {\n for (let j = 0; j < menu.children.length; j++) {\n const childItem = menu.children[j];\n if (\n _table.stateManager.menu?.dropDownMenuHighlight &&\n isMenuHighlight(\n _table,\n _table.stateManager.menu?.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey : childItem,\n col,\n row,\n i\n )\n ) {\n highlightIndex = i;\n subHighlightIndex = j;\n break;\n }\n }\n }\n if (_table._dropDownMenuIsHighlight(col, row, i)) {\n highlightIndex = i;\n break;\n }\n }\n // const highlightIndex = _table._dropDownMenuIsHighlight(col, row);\n if (highlightIndex !== -1) {\n let menu;\n if (subHighlightIndex !== -1) {\n menu = ((dropDownMenu || _table.globalDropDownMenu)[highlightIndex] as any).children[\n subHighlightIndex\n ] as any;\n } else {\n menu = (dropDownMenu || _table.globalDropDownMenu)[highlightIndex] as any;\n }\n\n if (menu.stateIcon) {\n if (menu.stateIcon.svg) {\n results.push({\n type: 'svg',\n name: menu.stateIcon.src || menu.stateIcon.svg,\n width: menu.stateIcon.width || 22,\n height: menu.stateIcon.height || 22,\n // dropDownIndex: highlightIndex,\n svg: menu.stateIcon.svg,\n positionType: IconPosition.right,\n marginRight: 0,\n funcType: IconFuncTypeEnum.dropDownState,\n interactive: false\n // hover: {\n // width: menu.stateIcon.width || 22,\n // height: menu.stateIcon.height || 22,\n // bgColor: 'rgba(101, 117, 168, 0.1)',\n // },\n });\n } else if (menu.stateIcon.src) {\n results.push({\n type: 'image',\n name: menu.stateIcon.src || menu.stateIcon.svg,\n width: menu.stateIcon.width || 22,\n height: menu.stateIcon.height || 22,\n // dropDownIndex: highlightIndex,\n src: menu.stateIcon.src,\n positionType: IconPosition.right,\n marginRight: 0,\n funcType: IconFuncTypeEnum.dropDownState,\n interactive: false\n // hover: {\n // width: menu.stateIcon.width || 22,\n // height: menu.stateIcon.height || 22,\n // bgColor: 'rgba(101, 117, 168, 0.1)',\n // },\n });\n }\n }\n }\n }\n return results;\n }\n /**\n * 内置dropDownIcon的位置信息\n * @param cellRect\n * @param marginTop\n * @param baseline\n * @returns\n */\n getDropDownIconRect(cellRect: RectProps, marginTop: number, baseline?: string): RectProps {\n // const left = cellRect.right - (this.downIcon.box?.width || 0) - marginRight;\n // const right = cellRect.right - marginRight;\n const iconW = this.downIcon.hover?.width ?? this.downIcon?.width ?? 0;\n const iconH = this.downIcon.hover?.height ?? this.downIcon?.height ?? 0;\n const left = cellRect.right - 2 - iconW;\n const right = cellRect.right - 2;\n let top;\n if (baseline === 'middle') {\n top = cellRect.top + cellRect.height / 2 - iconW / 2;\n } else if (baseline === 'top') {\n top = cellRect.top + marginTop / 2;\n } else if (baseline === 'bottom') {\n top = cellRect.bottom - marginTop * 2;\n } else {\n top = cellRect.top;\n }\n const bottom = iconH + top;\n\n return {\n left,\n right,\n top,\n bottom,\n width: iconW,\n height: iconH\n };\n }\n\n getHierarchyIcon(col: number, row: number) {\n const { hierarchyState } = this._table._getHeaderLayoutMap(col, row) as HeaderData;\n if (hierarchyState) {\n if (hierarchyState === HierarchyState.expand) {\n //展开状态 应该显示-号\n return this.expandIcon;\n } else if (hierarchyState === HierarchyState.collapse) {\n //折叠状态 应该显示-号\n return this.collapseIcon;\n }\n }\n return undefined;\n }\n getHierarchyIconWidth() {\n return this.expandIcon.width + (this.expandIcon.marginLeft ?? 0) + (this.expandIcon.marginRight ?? 0);\n }\n private checkDropDownIcon(_table: BaseTableAPI, col: number, row: number) {\n /*\n * dropDownMenu有三种状态:\n * 1. header中未配置 =》 使用globalDropDownMenu,icon展示\n * 2. header中配置 =》 使用header中的dropDownMenu,icon展示\n * 3. header中dropDownMenu为空数组 =》 icon不展示\n */\n if (_table.isPivotTable()) {\n const headerC = _table._getHeaderLayoutMap(col, row) as any;\n if (\n Array.isArray(headerC.dropDownMenu) &&\n headerC.dropDownMenu.length // header中配置dropDownMenu\n ) {\n return true;\n }\n } else {\n const headerC = _table.getHeaderDefine(col, row) as any;\n if (\n (Array.isArray(headerC.dropDownMenu) && headerC.dropDownMenu.length) || // header中配置dropDownMenu\n ((!Array.isArray(headerC.dropDownMenu) || headerC.dropDownMenu.length !== 0) && // header中dropDownMenu为空数组,不显示\n Array.isArray(_table.globalDropDownMenu) &&\n _table.globalDropDownMenu.length && // 全局配置dropDownMenu\n !headerC?.columns?.length) // 只在最下级表头展示\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n getStyleClass(headerType: 'text' | 'image' | 'video' | 'link' | 'checkbox') {\n switch (headerType) {\n case 'text':\n return TextHeaderStyle;\n case 'image':\n return ImageStyle;\n case 'video':\n return ImageStyle;\n case 'link':\n return TextHeaderStyle;\n case 'checkbox':\n return CheckboxStyle;\n }\n }\n\n setTableColumnsEditor() {\n const setEditor = (colDefines: ColumnsDefine, setColumns: ColumnsDefine) => {\n colDefines?.forEach((colDefine, index) => {\n if (colDefine.editor) {\n setColumns[index].editor = colDefine.editor;\n }\n if (colDefine.columns) {\n setEditor(colDefine.columns, setColumns[index].columns);\n }\n });\n };\n setEditor((this._table as ListTable).options.columns, (this._table as ListTable).internalProps.columns);\n }\n}\n","import type { BaseTable } from '../core';\nimport type { Rect } from '../tools/Rect';\nimport { Env } from '../tools/env';\n\nexport class FocusInput extends EventTarget {\n private _container: HTMLDivElement;\n private _table: BaseTable;\n private _input: HTMLInputElement;\n constructor(table: BaseTable, parentElement: HTMLElement) {\n super();\n this._table = table;\n if (Env.mode === 'node') {\n return;\n }\n const div = document.createElement('div'); //再加一层 C360插件逻辑中用的window.getSelection()来判断的滚动\n // div.style.position = 'fixed';//定位不能使用fixed 在父级transform非none的时候 都会有问题\n div.style.opacity = '0';\n div.dataset.vtable = 'vtable'; //这里不能变 C360取元素的依据\n div.style.pointerEvents = 'none';\n div.classList.add('input-container');\n const input = (this._input = document.createElement('input'));\n div.appendChild(input);\n input.classList.add('table-focus-control');\n input.dataset.vtable = 'vtable';\n input.readOnly = true;\n parentElement.appendChild(div);\n this._container = div;\n }\n\n focus(): void {\n this._input.focus({ preventScroll: true });\n }\n setFocusRect(rect: Rect, value: string): void {\n const input = this._input;\n input.value = value;\n // input.focus({ preventScroll: true });\n input.select();\n const top = rect.top - this._table.scrollTop;\n const left = rect.left - this._table.scrollLeft;\n input.style.top = `${top.toFixed()}px`;\n input.style.left = `${left.toFixed()}px`;\n input.style.width = `${rect.width.toFixed()}px`;\n input.style.height = `${rect.height.toFixed()}px`;\n }\n get input(): HTMLInputElement {\n return this._input;\n }\n release(): void {\n // document.removeChild(this._input);\n this._container.parentElement?.removeChild(this._container);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport class NumberRangeMap {\n data: Map;\n cumulativeSum: Map;\n difference: Map;\n totalSum: number;\n table: BaseTableAPI;\n isUpdate = false;\n private _keys: number[] = [];\n private _sorted = false;\n\n constructor(table: BaseTableAPI) {\n this.data = new Map();\n this._keys.length = 0;\n this.cumulativeSum = new Map();\n this.difference = new Map();\n this.totalSum = 0;\n this.table = table;\n }\n\n get length() {\n return this.data.size;\n }\n\n clear() {\n this._keys = [];\n this.data.clear();\n this.cumulativeSum.clear();\n this.difference.clear();\n this.totalSum = 0;\n }\n\n clearRange() {\n this.cumulativeSum.clear();\n this.difference.clear();\n }\n\n add(position: number, value: number) {\n if (!isValid(value)) {\n return;\n }\n const defaultValue = this.table.getRowHeight(position);\n if (!this.data.has(position)) {\n this._keys.push(position);\n this._sorted = false;\n }\n this.data.set(position, value);\n this.totalSum += value;\n // this.updateCumulativeSum(position, value);\n this.updateDifference(position, value - defaultValue);\n }\n\n remove(position: number) {\n if (this.data.has(position)) {\n const value = this.data.get(position);\n this.data.delete(position);\n const index = this._keys.indexOf(position);\n if (index !== -1) {\n this._keys.splice(index, 1); // 使用 splice() 方法删除指定索引位置的元素\n }\n this.totalSum -= value;\n const defaultValue = this.table.getRowHeight(position);\n // this.updateCumulativeSum(position, -value);\n this.updateDifference(position, defaultValue - value);\n }\n }\n\n put(position: number, newValue: number) {\n if (!isValid(newValue)) {\n return;\n }\n if (this.data.has(position)) {\n const oldValue = this.data.get(position);\n\n if (oldValue === newValue) {\n return;\n }\n this.data.set(position, newValue);\n const difference = newValue - oldValue;\n this.totalSum += difference;\n // this.updateCumulativeSum(position, difference);\n this.updateDifference(position, difference);\n } else {\n this.add(position, newValue);\n }\n }\n\n get(position: number) {\n return this.data.get(position);\n }\n\n has(position: number) {\n return this.data.has(position);\n }\n\n private _sort() {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n }\n\n updateDifference(position: number, difference: number) {\n const oldDifference = this.difference.get(position) ?? 0;\n this.difference.set(position, oldDifference + difference);\n this.update();\n }\n\n getSumInRange(start: number, end: number) {\n return this.calculatePrefixSum(end) - this.calculatePrefixSum(start - 1);\n }\n\n updateCumulativeSum(position: number, difference: number) {\n // 更新累加和\n for (const [pos, sum] of this.cumulativeSum) {\n if (pos >= position) {\n this.cumulativeSum.set(pos, sum + difference);\n }\n }\n }\n\n calculatePrefixSum(position: number) {\n if (position < 0) {\n return 0;\n }\n if (this.cumulativeSum.has(position)) {\n let cache = this.cumulativeSum.get(position);\n for (const [pos, difference] of this.difference) {\n if (pos <= position) {\n cache += difference;\n }\n }\n return cache;\n }\n\n this.dealDiffenence();\n return this.getCumulativeSum(position);\n }\n\n getCumulativeSum(position: number) {\n let sum = 0;\n for (let i = position; i >= 0; i--) {\n if (this.cumulativeSum.has(i)) {\n sum += this.cumulativeSum.get(i);\n break;\n } else {\n sum += this.data.get(i) ?? this.table.getRowHeight(i);\n }\n // if (i === position && this.cumulativeSum.has(i + 1)) {\n // sum += this.cumulativeSum.get(i + 1) - (this.data.get(i + 1) ?? this.table.getRowHeight(i + 1));\n // break;\n // }\n }\n this.cumulativeSum.set(position, sum);\n return sum;\n }\n\n update() {\n if (this.isUpdate) {\n return;\n }\n this.isUpdate = true;\n setTimeout(() => {\n this.dealDiffenence();\n this.isUpdate = false;\n }, 0);\n }\n\n dealDiffenence() {\n for (const [sumPos] of this.cumulativeSum) {\n for (const [difPos, difference] of this.difference) {\n if (sumPos >= difPos) {\n const oldSum = this.cumulativeSum.get(sumPos);\n this.cumulativeSum.set(sumPos, oldSum + difference);\n }\n }\n }\n\n this.difference.clear();\n }\n\n // add and reorder\n insert(position: number, value?: number) {\n // clear all sum cover position\n for (let i = position; i <= this.getLastIndex(); i++) {\n this.cumulativeSum.delete(i);\n }\n const lastIndex = this.getLastIndex() + 1;\n this.adjustOrder(position, position + 1, lastIndex - position);\n if (isValid(value)) {\n this.put(position, value);\n }\n }\n\n getLastIndex() {\n this._sort();\n return this._keys[this._keys.length - 1];\n }\n\n delLast() {\n const lastIndex = this.getLastIndex();\n this.remove(lastIndex);\n }\n\n // del and reorder\n delete(position: number) {\n if (!this.has(position)) {\n return;\n }\n\n // clear all sum cover position\n for (let i = position; i <= this.getLastIndex(); i++) {\n this.cumulativeSum.delete(i);\n }\n\n const lastIndex = this.getLastIndex();\n\n this.adjustOrder(position + 1, position, lastIndex - position);\n this.delLast();\n }\n\n /**\n * 将sourceIndex位置开始 往后moveCount个值 调整到targetIndex位置处\n * @param sourceIndex\n * @param targetIndex\n * @param moveCount\n */\n adjustOrder(sourceIndex: number, targetIndex: number, moveCount: number) {\n this.clearRange();\n this._sort();\n const { _keys: keys } = this;\n\n if (sourceIndex > targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex + moveCount - 1); i >= 0; i--) {\n const key = keys[i];\n if (key >= sourceIndex) {\n sourceVals.push(this.get(key));\n } else if (targetIndex <= key && key < sourceIndex) {\n this.put(key + moveCount, this.get(key));\n } else if (key < targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[moveCount - 1 - i]);\n }\n }\n const { length } = keys;\n if (sourceIndex < targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < length; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + moveCount) {\n sourceVals.push(this.get(key));\n } else if (sourceIndex + moveCount <= key && key <= targetIndex) {\n this.put(key - moveCount, this.get(key));\n } else if (key > targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[i]);\n }\n }\n }\n\n exchangeOrder(\n sourceIndex: number,\n sourceCount: number,\n targetIndex: number,\n targetCount: number,\n insertIndex: number\n ) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, targetIndex); i < indexFirst(keys, sourceIndex) + sourceCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(insertIndex + sourceCount + i, targetVals[i]);\n }\n } else {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < indexFirst(keys, targetIndex) + targetCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(sourceIndex + i, targetVals[i]);\n }\n }\n }\n}\n\nfunction indexFirst(arr: number[], elm: number): number {\n let low = 0;\n let high = arr.length - 1;\n while (low <= high) {\n const i = Math.floor((low + high) / 2);\n if (arr[i] === elm) {\n return i;\n } else if (arr[i] > elm) {\n high = i - 1;\n } else {\n low = i + 1;\n }\n }\n return high < 0 ? 0 : high;\n}\n","import {\n InternalIconName,\n type ColumnIconOption,\n type ListTableAPI,\n type PivotTableAPI,\n type RectProps,\n type SortOrder,\n type SvgIcon\n} from '../ts-types';\nimport * as registerIcons from '../icons';\n\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nexport class RowSeriesNumberHelper {\n dragReorderIconName: SvgIcon;\n\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n\n this.dragReorderIconName = regedIcons[InternalIconName.dragReorderIconName] as SvgIcon;\n }\n\n getIcons(col: number, row: number): ColumnIconOption[] {\n return [this.dragReorderIconName];\n }\n}\n","import type { CellAddressWithBound, ColumnInfo, RowInfo } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { _getTargetFrozenColAt, _getTargetFrozenRowAt } from '../tableHelper';\n\n/**\n * 根据y值计算所在行\n * @param absoluteY 相对于表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getRowAt(\n absoluteY: number,\n _this: BaseTableAPI\n): { top: number; row: number; bottom: number; height: number } {\n const frozen = _getTargetFrozenRowAt(_this as any, absoluteY);\n if (frozen) {\n return frozen;\n }\n let row = getTargetRowAt(absoluteY, _this);\n if (!row) {\n row = {\n top: -1,\n row: -1,\n bottom: -1,\n height: -1\n };\n }\n return row;\n}\n\n/**\n * 根据x值计算所在列\n * @param absoluteX 相对于表格左上角的x坐标(无滚动)\n * @returns\n */\nexport function getColAt(\n absoluteX: number,\n _this: BaseTableAPI\n): { left: number; col: number; right: number; width: number } {\n const frozen = _getTargetFrozenColAt(_this as any, absoluteX);\n if (frozen) {\n return frozen;\n }\n let col = getTargetColAt(absoluteX, _this);\n if (!col) {\n col = {\n left: -1,\n col: -1,\n right: -1,\n width: 1\n };\n }\n return col;\n}\n/**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX 表格左上角的x坐标(无滚动)\n * @param absoluteY 表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getCellAt(absoluteX: number, absoluteY: number, _this: BaseTableAPI): CellAddressWithBound {\n const rowInfo = getRowAt(absoluteY, _this);\n const { row, top, bottom, height } = rowInfo;\n const colInfo = getColAt(absoluteX, _this);\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n}\n\n/**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX 表格左上角的x坐标(无滚动)\n * @returns\n */\nexport function getTargetColAt(absoluteX: number, _this: BaseTableAPI): ColumnInfo | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n const findBefore = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let right = startRight;\n for (let col = startCol; col >= 0; col--) {\n const width = _this.getColWidth(col);\n const left = right - width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n right = left;\n }\n return null;\n };\n const findAfter = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let left = startRight - _this.getColWidth(startCol);\n const { colCount } = _this.internalProps;\n for (let col = startCol; col < colCount; col++) {\n const width = _this.getColWidth(col);\n const right = left + width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n left = right;\n }\n return null;\n };\n //计算这个位置处是第几行\n const candCol = computeTargetColByX(absoluteX, _this);\n const right = _this.getColsWidth(0, candCol);\n if (absoluteX >= right) {\n return findAfter(candCol, right);\n }\n return findBefore(candCol, right);\n}\n\n/**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX 表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getTargetRowAt(absoluteY: number, _this: BaseTableAPI): RowInfo | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n\n const findBefore = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let bottom = startBottom;\n for (let row = startRow; row >= 0; row--) {\n const height = _this.getRowHeight(row);\n const top = bottom - height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n bottom = top;\n }\n return null;\n };\n const findAfter = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let top = startBottom - _this.getRowHeight(startRow);\n const { rowCount } = _this.internalProps;\n for (let row = startRow; row < rowCount; row++) {\n const height = _this.getRowHeight(row);\n const bottom = top + height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n top = bottom;\n }\n return null;\n };\n // const candRow = Math.min(\n // Math.ceil(absoluteY / this.internalProps.defaultRowHeight),\n // this.rowCount - 1\n // );\n //计算这个位置处是第几行\n const candRow = computeTargetRowByY(absoluteY, _this);\n const bottom = _this.getRowsHeight(0, candRow);\n if (absoluteY >= bottom) {\n return findAfter(candRow, bottom);\n }\n return findBefore(candRow, bottom);\n}\n\n/**\n * 根据x获取右侧冻结中该位置所处列值\n * @param table\n * @param absoluteX 屏幕坐标x值\n * @returns\n */\nexport function getTargetColAtConsiderRightFrozen(\n absoluteX: number,\n isConsider: boolean,\n _this: BaseTableAPI\n): ColumnInfo | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n if (\n isConsider &&\n absoluteX > _this.tableNoFrameWidth - _this.getRightFrozenColsWidth() &&\n absoluteX < _this.tableNoFrameWidth &&\n absoluteX <= _this.getAllColsWidth()\n ) {\n for (let i = 0; i < _this.rightFrozenColCount; i++) {\n if (absoluteX > _this.tableNoFrameWidth - _this.getColsWidth(_this.colCount - i - 1, _this.colCount - 1)) {\n return {\n col: _this.colCount - i - 1,\n left: undefined,\n right: undefined,\n width: undefined\n };\n }\n }\n }\n return getTargetColAt(absoluteX, _this);\n}\n\n/**\n * 根据y获取底部冻结该位置所处行值\n * @param table\n * @param absoluteX 屏幕坐标y值\n * @param isConsider 是否考Y值是否在底部冻结区域内\n * @returns\n */\nexport function getTargetRowAtConsiderBottomFrozen(\n absoluteY: number,\n isConsider: boolean,\n _this: BaseTableAPI\n): RowInfo | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n absoluteY = absoluteY - _this.tableY;\n if (\n isConsider &&\n absoluteY > _this.tableNoFrameHeight - _this.getBottomFrozenRowsHeight() &&\n absoluteY < _this.tableNoFrameHeight\n ) {\n for (let i = 0; i < _this.rightFrozenColCount; i++) {\n if (absoluteY > _this.tableNoFrameHeight - _this.getRowsHeight(_this.rowCount - i - 1, _this.rowCount - 1)) {\n return {\n row: _this.rowCount - i - 1,\n top: undefined,\n bottom: undefined,\n height: undefined\n };\n }\n }\n }\n return getTargetRowAt(absoluteY, _this);\n}\n\n/**\n * 根据y值(包括了scroll的)计算所在行\n * @param this\n * @param absoluteY 左边y值,包含了scroll滚动距离\n * @returns\n */\nexport function computeTargetRowByY(absoluteY: number, _this: BaseTableAPI): number {\n let defaultRowHeight = _this.defaultRowHeight;\n\n //使用二分法计算出row\n if (_this._rowRangeHeightsMap.get(`$0$${_this.rowCount - 1}`)) {\n defaultRowHeight = _this._rowRangeHeightsMap.get(`$0$${_this.rowCount - 1}`) / _this.rowCount;\n // let startRow = 0;\n // let endRow = this.rowCount - 1;\n // while (endRow - startRow > 1) {\n // const midRow = Math.floor((startRow + endRow) / 2);\n // if (absoluteY < this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n // endRow = midRow;\n // } else if (absoluteY > this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n // startRow = midRow;\n // } else {\n // return midRow;\n // }\n // }\n // return endRow;\n }\n //否则使用defaultRowHeight大约计算一个row\n return Math.min(Math.ceil(absoluteY / defaultRowHeight), _this.rowCount - 1);\n}\n\n/**\n * 根据x值(包括了scroll的)计算所在列 主要借助colRangeWidthsMap缓存来提高计算效率\n * @param this\n * @param absoluteX 左边x值,包含了scroll滚动距离\n * @returns\n */\nexport function computeTargetColByX(absoluteX: number, _this: BaseTableAPI): number {\n //使用二分法计算出col\n if (_this._colRangeWidthsMap.get(`$0$${_this.colCount - 1}`)) {\n let startCol = 0;\n let endCol = _this.colCount - 1;\n while (endCol - startCol > 1) {\n const midCol = Math.floor((startCol + endCol) / 2);\n if (absoluteX < _this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n endCol = midCol;\n } else if (absoluteX > _this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n startCol = midCol;\n } else {\n return midCol;\n }\n }\n return endCol;\n }\n //否则使用defaultColWidth大约计算一个col\n return Math.min(Math.ceil(absoluteX / _this.internalProps.defaultColWidth), _this.colCount - 1);\n}\n\n/**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,考虑表格滚动\n * @param relativeY 左边y值,相对于容器左上角,考虑表格滚动\n * @returns\n */\nexport function getCellAtRelativePosition(x: number, y: number, _this: BaseTableAPI): CellAddressWithBound {\n // table border and outer component\n x -= _this.tableX;\n y -= _this.tableY;\n\n // top frozen\n let topFrozen = false;\n if (y > 0 && y < _this.getFrozenRowsHeight()) {\n topFrozen = true;\n }\n\n // left frozen\n let leftFrozen = false;\n if (x > 0 && x < _this.getFrozenColsWidth()) {\n leftFrozen = true;\n }\n\n // bottom frozen\n let bottomFrozen = false;\n if (\n y > _this.tableNoFrameHeight - _this.getBottomFrozenRowsHeight() &&\n y < _this.tableNoFrameHeight &&\n y <= _this.getAllRowsHeight()\n ) {\n bottomFrozen = true;\n }\n // right frozen\n let rightFrozen = false;\n if (\n x > _this.tableNoFrameWidth - _this.getRightFrozenColsWidth() &&\n x < _this.tableNoFrameWidth &&\n x <= _this.getAllColsWidth()\n ) {\n rightFrozen = true;\n }\n\n const colInfo = getTargetColAtConsiderRightFrozen(\n leftFrozen || rightFrozen ? x : x + _this.scrollLeft,\n rightFrozen,\n _this\n );\n const rowInfo = getTargetRowAtConsiderBottomFrozen(\n topFrozen || bottomFrozen ? y : y + _this.scrollTop,\n bottomFrozen,\n _this\n );\n\n if (colInfo && rowInfo) {\n const { row, top, bottom, height } = rowInfo;\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n }\n return { col: -1, row: -1 };\n}\n","import { isValid } from '@visactor/vutils';\nimport type { FullExtendStyle, HeaderStyleOption, StylePropertyFunctionArg } from '../ts-types';\nimport { TextHeaderStyle } from './style/MultilineTextHeaderStyle';\n// import { SortHeaderStyle } from \"./style/SortHeaderStyle\";\nimport { Style } from './style/Style';\nimport type { TableTheme } from '../themes/theme';\nimport { CheckboxStyle } from './style/CheckboxStyle';\n\nexport { Style, TextHeaderStyle };\n\nexport function of(\n headerStyle: HeaderStyleOption,\n defaultHeaderStyle: HeaderStyleOption,\n styleArg: StylePropertyFunctionArg,\n StyleClass: typeof Style,\n globalAutoWrapText: boolean,\n theme: TableTheme\n): FullExtendStyle {\n if (headerStyle || defaultHeaderStyle) {\n if (headerStyle instanceof Style) {\n return headerStyle;\n } else if (typeof headerStyle === 'function') {\n return of(headerStyle(styleArg), defaultHeaderStyle, styleArg, StyleClass, globalAutoWrapText, theme);\n }\n if (!headerStyle) {\n headerStyle = {};\n }\n if (globalAutoWrapText && !isValid((headerStyle as any).autoWrapText)) {\n (headerStyle as any).autoWrapText = true;\n }\n if (StyleClass === CheckboxStyle) {\n return new CheckboxStyle(\n headerStyle ?? {},\n (defaultHeaderStyle ?? {}) as any,\n (theme.checkboxStyle ?? {}) as any\n );\n }\n return new StyleClass(headerStyle ?? {}, (defaultHeaderStyle ?? {}) as any);\n }\n return StyleClass.DEFAULT;\n}\n","import type { LineWidthsPropertyDefine } from '..';\nimport { PaddingPropertyDefine } from '..';\nimport type {\n ColorPropertyDefine,\n ColorsPropertyDefine,\n IconPropertyDefine,\n LineClamp,\n LineDashsPropertyDefine,\n TextOverflow,\n UnderlinePropertyDefine,\n LineDashPropertyDefine,\n LineThroughPropertyDefine,\n TagPropertyDefine,\n PaddingsPropertyDefine,\n StylePropertyFunctionArg,\n CursorPropertyDefine,\n MarkedPropertyDefine,\n FontSizePropertyDefine,\n FontFamilyPropertyDefine,\n FontWeightPropertyDefine,\n FontVariantPropertyDefine,\n FontStylePropertyDefine,\n TextAlignType,\n TextBaselineType\n} from '../style-define';\nimport type { ThemeStyle } from '../theme';\n//这个style是在绘制里面的内容时用到的,用不到borderColor和borderLineWidth,所以和IStyleOption有些不一致\nexport interface ColumnStyle {\n padding?: PaddingsPropertyDefine;\n bgColor?: ColorPropertyDefine;\n // eslint-disable-next-line no-undef\n textAlign?: TextAlignType;\n // eslint-disable-next-line no-undef\n textBaseline?: TextBaselineType;\n color?: ColorPropertyDefine;\n\n fontSize?: FontSizePropertyDefine;\n fontFamily?: FontFamilyPropertyDefine;\n fontWeight?: FontWeightPropertyDefine;\n fontVariant?: FontVariantPropertyDefine;\n fontStyle?: FontStylePropertyDefine;\n\n textOverflow?: TextOverflow;\n // doChangeStyle: () => void;\n clone: () => ColumnStyle;\n linkColor?: ColorPropertyDefine;\n}\n\nexport type IHeaderStyle = ColumnStyle;\n\nexport type ISortheaderSyle = IHeaderStyle;\n\nexport interface IStyleOption {\n bgColor?: ColorPropertyDefine;\n padding?: PaddingsPropertyDefine;\n textAlign?: TextAlignType;\n textBaseline?: TextBaselineType;\n color?: ColorPropertyDefine;\n strokeColor?: ColorPropertyDefine;\n\n fontSize?: FontSizePropertyDefine;\n fontFamily?: FontFamilyPropertyDefine;\n fontWeight?: FontWeightPropertyDefine;\n fontVariant?: FontVariantPropertyDefine;\n fontStyle?: FontStylePropertyDefine;\n\n textOverflow?: TextOverflow;\n borderColor?: ColorsPropertyDefine;\n borderLineWidth?: LineWidthsPropertyDefine;\n\n lineHeight?: number;\n underline?: UnderlinePropertyDefine;\n /** TODO */\n underlineColor?: ColorPropertyDefine;\n underlineDash?: LineDashPropertyDefine;\n underlineOffset?: number;\n lineThrough?: LineThroughPropertyDefine;\n /** TODO */\n lineThroughColor?: ColorPropertyDefine;\n /** TODO */\n lineThroughDash?: LineDashPropertyDefine;\n\n borderLineDash?: LineDashsPropertyDefine;\n linkColor?: ColorPropertyDefine;\n\n // tag?: TagPropertyDefine;\n // tagFont?: FontPropertyDefine;\n // tagColor?: ColorPropertyDefine;\n // tagBgColor?: ColorPropertyDefine;\n // tagMargin?: number | string | (number | string)[];\n\n // dropDownIcon?: IconPropertyDefine;\n // dropDownHoverIcon?: IconPropertyDefine;\n cursor?: CursorPropertyDefine;\n\n textStick?: boolean | 'vertical' | 'horizontal';\n textStickBaseOnAlign?: boolean;\n\n marked?: MarkedPropertyDefine;\n}\n\nexport const cellStyleKeys = ['bgColor', 'color', 'strokeColor', 'borderColor', 'linkColor']; // keys of style not change cell layout\n\nexport interface ITextStyleOption extends IStyleOption {\n // lineHeight?: string | number;//移入IStyleOption中 单行文本类型也可以有\n autoWrapText?: boolean;\n lineClamp?: LineClamp;\n}\n\nexport interface IImageStyleOption extends IStyleOption {\n // imageSizing?: 'keep-aspect-ratio';\n // imageAutoSizing?: boolean;\n margin?: number;\n}\n// export type ISortHeaderStyleOption = IStyleOption;\n\nexport type ColumnStyleOption =\n | IStyleOption\n | ITextStyleOption\n | IImageStyleOption\n | ProgressBarStyleOption\n | CheckboxStyleOption\n | ((styleArg: StylePropertyFunctionArg) => IStyleOption | ITextStyleOption | IImageStyleOption);\n\nexport type HeaderStyleOption =\n | (IStyleOption & { textStick?: boolean | 'vertical' | 'horizontal' }) //表头可以配置吸附\n | ITextStyleOption\n | IImageStyleOption\n // | ISortHeaderStyleOption\n | ((styleArg: StylePropertyFunctionArg) => IStyleOption | ITextStyleOption | IImageStyleOption);\n// | ISortHeaderStyleOption\n\nexport type FullExtendStyle = HeaderStyleOption & ColumnStyleOption & ThemeStyle;\n\n// export interface BaseStyleOption {\n// bgColor?: ColorPropertyDefine;\n// }\n\n// export interface StdBaseStyleOption extends BaseStyleOption {\n// // eslint-disable-next-line no-undef\n// textAlign?: CanvasTextAlign;\n// // eslint-disable-next-line no-undef\n// textBaseline?: CanvasTextBaseline;\n// }\n// export interface StyleOption extends StdBaseStyleOption {\n// color?: ColorPropertyDefine;\n// font?: FontPropertyDefine;\n// padding?: PaddingsPropertyDefine;\n// textOverflow?: TextOverflow;\n// }\nexport interface ProgressBarStyleOption extends IStyleOption {\n // 是否显示进度条\n showBar?: boolean | ((args: StylePropertyFunctionArg) => boolean);\n // 进度条颜色\n barColor?: ColorPropertyDefine;\n // 进度条背景颜色\n barBgColor?: ColorPropertyDefine;\n // 进度条高度\n barHeight?: number | string;\n // 进度条距单元格底部距离\n barBottom?: number | string;\n // 进度条padding\n barPadding?: (number | string)[];\n // 进度条正向颜色\n barPositiveColor?: ColorPropertyDefine;\n // 进度条负向颜色\n barNegativeColor?: ColorPropertyDefine;\n // 进度条坐标轴轴颜色\n barAxisColor?: ColorPropertyDefine;\n // 进度条方向是否从右到左\n barRightToLeft?: boolean;\n\n // 是否显示进度条标记\n showBarMark?: boolean;\n // 进度条标记正向颜色\n barMarkPositiveColor?: ColorPropertyDefine;\n // 进度条标记负向颜色\n barMarkNegativeColor?: ColorPropertyDefine;\n // 进度条标记宽度\n barMarkWidth?: number;\n // 进度条标记位置\n barMarkPosition?: 'right' | 'bottom';\n}\n\nexport type CheckboxStyleOption = {\n size?: number;\n spaceBetweenTextAndIcon?: number;\n checkboxStyle?: CheckboxStyle;\n} & ITextStyleOption;\n\nexport type RadioStyleOption = {\n size?: number;\n spaceBetweenTextAndIcon?: number;\n spaceBetweenRadio?: number;\n radioStyle?: RadioStyle;\n} & ITextStyleOption;\n\nexport type CheckboxStyle = {\n // 选择框尺寸\n size?: number;\n // 选择框与文字间距\n spaceBetweenTextAndIcon?: number;\n\n // 未选中状态填充颜色\n defaultFill?: string;\n // 未选中状态描边颜色\n defaultStroke?: string;\n // disable状态填充颜色\n disableFill?: string;\n // checked状态填充颜色\n checkedFill?: string;\n // checked状态描边颜色\n checkedStroke?: string;\n // checked状态填充颜色\n disableCheckedFill?: string;\n // checked状态描边颜色\n disableCheckedStroke?: string;\n\n // checked状态图标url\n checkIconImage?: string;\n // indeterminate状态图标url\n indeterminateIconImage?: string;\n};\n\nexport type RadioStyle = {\n // 选择框尺寸\n size?: number;\n // 选择框与文字间距\n spaceBetweenTextAndIcon?: number;\n // 单元格内多个单选框,单选框直接的间距\n spaceBetweenRadio?: number;\n\n // 单选框环形图标外半径(会覆盖size)\n outerRadius?: number;\n // 单选框环形图标内半径\n innerRadius?: number;\n\n // 未选中状态填充颜色\n defaultFill?: string;\n // 未选中状态描边颜色\n defaultStroke?: string;\n // disable状态填充颜色\n disableFill?: string;\n // checked状态填充颜色\n checkedFill?: string;\n // checked状态描边颜色\n checkedStroke?: string;\n // checked状态填充颜色\n disableCheckedFill?: string;\n // checked状态描边颜色\n disableCheckedStroke?: string;\n};\n","import { isValid, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n cellStyleKeys,\n type CellRange,\n type ColumnStyleOption,\n type CustomCellStyle,\n type CustomCellStyleArrangement\n} from '../ts-types';\nimport type { Style } from '../body-helper/style';\nimport { Factory } from '../core/factory';\n\nexport interface ICustomCellStylePlugin {\n new (\n table: BaseTableAPI,\n customCellStyle: CustomCellStyle[],\n customCellStyleArrangement: CustomCellStyleArrangement[]\n ): CustomCellStylePlugin;\n}\n\nexport class CustomCellStylePlugin {\n table: BaseTableAPI;\n customCellStyle: CustomCellStyle[];\n customCellStyleArrangement: CustomCellStyleArrangement[];\n\n constructor(\n table: BaseTableAPI,\n customCellStyle: CustomCellStyle[],\n customCellStyleArrangement: CustomCellStyleArrangement[]\n ) {\n this.table = table;\n this.customCellStyle = customCellStyle;\n this.customCellStyleArrangement = customCellStyleArrangement;\n }\n\n getCustomCellStyle(col: number, row: number) {\n const customStyleIds = this.getCustomCellStyleIds(col, row);\n if (customStyleIds.length) {\n const styles: ColumnStyleOption[] = [];\n\n customStyleIds.forEach(customStyleId => {\n const styleOption = this.getCustomCellStyleOption(customStyleId);\n if (styleOption?.style) {\n styles.push(styleOption.style);\n }\n });\n\n return merge({}, ...styles);\n // const styleOption = this.getCustomCellStyleOption(customStyleId);\n // return styleOption?.style;\n }\n return undefined;\n }\n\n getCustomCellStyleIds(col: number, row: number) {\n // let customStyleId;\n const customStyleIds: string[] = [];\n\n const range = this.table.getCellRange(col, row);\n for (let c = range.start.col; c <= range.end.col; c++) {\n for (let r = range.start.row; r <= range.end.row; r++) {\n // eslint-disable-next-line no-loop-func\n this.customCellStyleArrangement.forEach(style => {\n if (style.cellPosition.range) {\n if (\n style.cellPosition.range.start.col <= c &&\n style.cellPosition.range.end.col >= c &&\n style.cellPosition.range.start.row <= r &&\n style.cellPosition.range.end.row >= r\n ) {\n // customStyleId = style.customStyleId;\n customStyleIds.push(style.customStyleId);\n }\n } else if (style.cellPosition.col === c && style.cellPosition.row === r) {\n // customStyleId = style.customStyleId;\n customStyleIds.push(style.customStyleId);\n }\n });\n }\n }\n\n return customStyleIds;\n }\n\n getCustomCellStyleOption(customStyleId: string) {\n return this.customCellStyle.find(style => style.id === customStyleId);\n }\n\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n const index = this.customCellStyle.findIndex(style => style.id === customStyleId);\n if (index === -1) {\n this.customCellStyle.push({\n id: customStyleId,\n style: customStyle\n });\n } else {\n this.customCellStyle[index] = {\n id: customStyleId,\n style: customStyle\n };\n }\n\n this.customCellStyleArrangement.forEach(cellStyle => {\n const cellPos = cellStyle.cellPosition;\n if (cellStyle.customStyleId === customStyleId) {\n if (cellPos.range) {\n for (\n let col = Math.max(0, cellPos.range.start.col);\n col <= Math.min(this.table.colCount - 1, cellPos.range.end.col);\n col++\n ) {\n for (\n let row = Math.max(0, cellPos.range.start.row);\n row <= Math.min(this.table.rowCount - 1, cellPos.range.end.row);\n row++\n ) {\n this.table.scenegraph.updateCellContent(col, row);\n }\n }\n } else {\n this.table.scenegraph.updateCellContent(cellPos.col, cellPos.row);\n }\n }\n });\n this.table.scenegraph.updateNextFrame();\n }\n\n arrangeCustomCellStyle(\n cellPos: {\n col?: number;\n row?: number;\n range?: CellRange;\n },\n customStyleId: string | undefined | null,\n forceFastUpdate?: boolean\n ) {\n const index = this.customCellStyleArrangement.findIndex(style => {\n if (style.cellPosition.range && cellPos.range) {\n return (\n style.cellPosition.range.start.col === cellPos.range.start.col &&\n style.cellPosition.range.start.row === cellPos.range.start.row &&\n style.cellPosition.range.end.col === cellPos.range.end.col &&\n style.cellPosition.range.end.row === cellPos.range.end.row\n );\n }\n return style.cellPosition.col === cellPos.col && style.cellPosition.row === cellPos.row;\n });\n\n if (index === -1 && !customStyleId) {\n // do nothing\n return;\n } else if (index === -1 && customStyleId) {\n // add new style\n this.customCellStyleArrangement.push({\n cellPosition: {\n col: cellPos.col,\n row: cellPos.row,\n range: cellPos.range\n },\n customStyleId: customStyleId\n });\n } else if (this.customCellStyleArrangement[index].customStyleId === customStyleId) {\n // same style\n return;\n } else if (customStyleId) {\n // update style\n this.customCellStyleArrangement[index].customStyleId = customStyleId;\n } else {\n // delete useless style\n this.customCellStyleArrangement.splice(index, 1);\n }\n\n const style = this.getCustomCellStyleOption(customStyleId)?.style;\n // let forceFastUpdate;\n if (style) {\n forceFastUpdate = true;\n for (const key in style) {\n if (cellStyleKeys.indexOf(key) === -1) {\n forceFastUpdate = false;\n break;\n }\n }\n }\n\n // update cell group\n if (cellPos.range) {\n for (\n let col = Math.max(0, cellPos.range.start.col);\n col <= Math.min(this.table.colCount - 1, cellPos.range.end.col);\n col++\n ) {\n for (\n let row = Math.max(0, cellPos.range.start.row);\n row <= Math.min(this.table.rowCount - 1, cellPos.range.end.row);\n row++\n ) {\n const range = this.table.getCellRange(col, row);\n for (let c = range.start.col; c <= range.end.col; c++) {\n for (let r = range.start.row; r <= range.end.row; r++) {\n this.table.scenegraph.updateCellContent(c, r, forceFastUpdate);\n }\n }\n // this.table.scenegraph.updateCellContent(col, row);\n }\n }\n } else {\n this.table.scenegraph.updateCellContent(cellPos.col, cellPos.row, forceFastUpdate);\n }\n\n this.table.scenegraph.updateNextFrame();\n }\n\n updateCustomCell(customCellStyle: CustomCellStyle[], customCellStyleArrangement: CustomCellStyleArrangement[]) {\n this.customCellStyle.length = 0;\n this.customCellStyleArrangement.length = 0;\n customCellStyle.forEach((cellStyle: CustomCellStyle) => {\n this.registerCustomCellStyle(cellStyle.id, cellStyle.style);\n });\n customCellStyleArrangement.forEach((cellStyle: CustomCellStyleArrangement) => {\n this.arrangeCustomCellStyle(cellStyle.cellPosition, cellStyle.customStyleId);\n });\n }\n\n hasCustomCellStyle(customStyleId: string) {\n return this.customCellStyle.some(style => style.id === customStyleId);\n }\n}\n\nexport function mergeStyle(cacheStyle: Style, customCellStyle: ColumnStyleOption): Style {\n cacheStyle = cacheStyle.clone();\n\n for (const key in customCellStyle) {\n const value = (customCellStyle as any)[key];\n if (isValid(value)) {\n (cacheStyle as any)[`_${key}`] = value;\n }\n }\n\n return cacheStyle;\n}\n\nexport const registerCustomCellStylePlugin = () => {\n Factory.registerComponent('customCellStylePlugin', CustomCellStylePlugin);\n};\n\n// export type ICustomCellStylePlugin = typeof CustomCellStylePlugin;\n","import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { isFunction } from '@visactor/vutils';\nimport * as headerStyleContents from '../header-helper/style';\nimport * as columnStyleContents from '../body-helper/style';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from '../ts-types/base-table';\nimport type { ColorPropertyDefine, FullExtendStyle, MappingRule } from '../ts-types';\nimport { mergeStyle } from '../plugins/custom-cell-style';\n\nconst EMPTY_STYLE = {};\n\n/**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\nexport function getCellStyle(col: number, row: number, table: BaseTableAPI): FullExtendStyle {\n const customCellStyle = table.customCellStylePlugin?.getCustomCellStyle(col, row);\n const { layoutMap } = table.internalProps;\n const isHeader = layoutMap.isHeader(col, row);\n if (isHeader) {\n // const cacheKey = `${col}-${row}`;\n let cacheKey;\n if (table.isPivotTable() && !table.isBottomFrozenRow(row) && !table.isRightFrozenColumn(col)) {\n // use dimensionKey&indicatorKey to cache style object in pivot table\n const define = table.getHeaderDefine(col, row) as any;\n const isCorner = table.isCornerHeader(col, row);\n cacheKey = define?.dimensionKey\n ? isCorner\n ? `dim-cor-${define.dimensionKey}`\n : `dim-${define.dimensionKey}`\n : define?.indicatorKey\n ? `ind-${define.indicatorKey}`\n : `${col}-${row}`;\n } else {\n cacheKey = `${col}-${row}`;\n }\n let cacheStyle = table.headerStyleCache.get(cacheKey);\n if (cacheStyle) {\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n const hd = layoutMap.getHeader(col, row);\n\n let paddingForAxis;\n if (\n table.isPivotChart() &&\n isTopOrBottomAxis(col, row, layoutMap as PivotHeaderLayoutMap) &&\n layoutMap.isAxisCell(col, row)\n ) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(col, table.rowHeaderLevelCount);\n const padding = (chartColumn.style as any)?.padding ?? table.theme.bodyStyle.padding;\n paddingForAxis = padding;\n } else if (\n table.isPivotChart() &&\n isLeftOrRightAxis(col, row, layoutMap as PivotHeaderLayoutMap) &&\n layoutMap.isAxisCell(col, row)\n ) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(table.columnHeaderLevelCount, row);\n const padding = (chartColumn.style as any)?.padding ?? table.theme.bodyStyle.padding;\n paddingForAxis = padding;\n }\n\n if (\n (!hd || (hd as HeaderData).isEmpty) &&\n (layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row) ||\n layoutMap.isCornerHeader(col, row) ||\n layoutMap.isRightTopCorner(col, row))\n ) {\n return EMPTY_STYLE;\n }\n\n const styleClass = table.internalProps.headerHelper.getStyleClass((hd as HeaderData)?.headerType || 'text');\n if (layoutMap.isBottomFrozenRow(col, row) && table.theme.bottomFrozenStyle) {\n cacheStyle = headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n table.theme.bottomFrozenStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n } else if (layoutMap.isRightFrozenColumn(col, row) && table.theme.rightFrozenStyle) {\n cacheStyle = headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n table.theme.rightFrozenStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n } else {\n // let defaultStyle;\n // if (layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)) {\n // defaultStyle = table.theme.headerStyle;\n // } else if (table.internalProps.transpose && layoutMap.isRowHeader(col, row)) {\n // defaultStyle = table.theme.headerStyle;\n // } else if (layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)) {\n // defaultStyle = table.theme.rowHeaderStyle;\n // } else {\n // defaultStyle = table.theme.cornerHeaderStyle;\n // }\n // const styleClass = hd.headerType.StyleClass; //BaseHeader文件\n // const { style } = hd;\n const style = hd?.style || {};\n if (paddingForAxis) {\n (style as any).padding = paddingForAxis;\n }\n cacheStyle = headerStyleContents.of(\n style,\n // defaultStyle,\n layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)\n ? table.theme.headerStyle\n : layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)\n ? table.theme.rowHeaderStyle\n : table.theme.cornerHeaderStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n }\n table.headerStyleCache.set(cacheKey, cacheStyle);\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n\n let bgColorFunc: ColorPropertyDefine;\n // 判断是否有mapping 遍历dataset中mappingRules\n if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n (mappingRule: MappingRule, i: number) => {\n if (\n mappingRule.bgColor &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n mappingRule.bgColor.indicatorKey\n ) {\n bgColorFunc = mappingRule.bgColor.mapping;\n }\n }\n );\n // // 判断是否有mapping 遍历dataset中mappingRules 但这里还需要根据fieldName来判断\n // if (bgColorFunc && typeof bgColorFunc === 'function') {\n // const cellValue = table.getCellOriginValue(col, row);\n // bgColor = bgColorFunc(this, cellValue);\n // }\n }\n\n let cacheKey;\n const cellType = table.getCellType(col, row);\n const rawRecord = table.getCellOriginRecord(col, row);\n\n //如果是主体部分,获取相应的style\n if (rawRecord?.vtableMerge) {\n cacheKey = 'merge-title';\n } else if (table.isSeriesNumberInBody(col, row)) {\n // 如果是行序号\n cacheKey = `${col}-series-` + cellType;\n } else if (\n (table.isListTable() && !(table as any).transpose) ||\n (table.isPivotTable() && (table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n cacheKey = col + cellType;\n } else {\n cacheKey = row + cellType;\n }\n let cacheStyle;\n\n if (rawRecord?.vtableMerge) {\n cacheStyle = table.bodyMergeTitleCache.get(cacheKey);\n } else if (layoutMap.isBottomFrozenRow(row)) {\n cacheStyle = table.bodyBottomStyleCache.get(cacheKey);\n } else {\n cacheStyle = table.bodyStyleCache.get(cacheKey);\n }\n if (cacheStyle) {\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n const column = layoutMap.getBody(col, row);\n // const styleClass = column?.cellType?.StyleClass; //BaseColumn文件\n const styleClass = table.internalProps.bodyHelper.getStyleClass(table.getCellType(col, row));\n const style = column?.style;\n cacheStyle = columnStyleContents.of(\n style,\n rawRecord?.vtableMerge && table.theme.groupTitleStyle\n ? table.theme.groupTitleStyle\n : layoutMap.isBottomFrozenRow(row) && table.theme.bottomFrozenStyle\n ? table.theme.bottomFrozenStyle\n : layoutMap.isRightFrozenColumn(col) && table.theme.rightFrozenStyle\n ? table.theme.rightFrozenStyle\n : table.theme.bodyStyle,\n {\n col,\n row,\n table: table,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n if (bgColorFunc) {\n cacheStyle = mergeStyle(cacheStyle as any, { bgColor: bgColorFunc });\n }\n if (!isFunction(style)) {\n if (layoutMap.isBottomFrozenRow(row)) {\n table.bodyBottomStyleCache.set(cacheKey, cacheStyle);\n } else {\n table.bodyStyleCache.set(cacheKey, cacheStyle);\n }\n }\n if (customCellStyle) {\n return mergeStyle(cacheStyle as any, customCellStyle);\n }\n return cacheStyle;\n}\n","import type { EasingType, IRect } from './../vrender';\nimport { DefaultTimeline, DefaultTicker, Animate, ACustomAnimate, createRect, Generator } from './../vrender';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { isBoolean, isNumber } from '@visactor/vutils';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\n\nclass Animateaaa extends ACustomAnimate {\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.from.x !== this.to.x) {\n const x = end ? this.to.x : this.from.x + Math.floor((this.to.x - this.from.x) * ratio);\n this.params.table.scrollLeft = x;\n }\n if (this.from.y !== this.to.y) {\n const y = end ? this.to.y : this.from.y + Math.floor((this.to.y - this.from.y) * ratio);\n this.params.table.scrollTop = y;\n }\n }\n}\n\nexport class TableAnimationManager {\n table: BaseTableAPI;\n timeline: DefaultTimeline;\n ticker: DefaultTicker;\n animation: Animate;\n tempGraphic: IRect;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.timeline = new DefaultTimeline();\n // this.ticker = new DefaultTicker([this.timeline]);\n this.ticker = new DefaultTicker();\n this.ticker.addTimeline(this.timeline);\n const TICKER_FPS = 60;\n this.ticker.setFPS(TICKER_FPS);\n // no use, for avoid error in vrender animation\n this.tempGraphic = createRect({});\n }\n\n scrollTo(position: { col?: number; row?: number }, animationOption?: ITableAnimationOption | true) {\n const from = {\n x: this.table.scrollLeft,\n y: this.table.scrollTop\n };\n const cellRect = this.table.getCellRect(position.col ?? 0, position.row ?? 0);\n const to = {\n x: isNumber(position.col) ? cellRect.left - this.table.getFrozenColsWidth() : this.table.scrollLeft,\n y: isNumber(position.row) ? cellRect.top - this.table.getFrozenRowsHeight() : this.table.scrollTop\n };\n const duration = !isBoolean(animationOption) ? animationOption?.duration ?? 3000 : animationOption ? 3000 : 0;\n const easing = !isBoolean(animationOption) ? animationOption?.easing ?? 'linear' : animationOption ? 'linear' : '';\n\n const animation = new Animate(Generator.GenAutoIncrementId(), this.timeline).bind(this.tempGraphic).play(\n new Animateaaa(from, to, duration, easing, {\n graphic: this.tempGraphic,\n table: this.table\n })\n );\n // this.timeline.addAnimate(animation);\n this.ticker.start();\n }\n\n clear() {\n this.timeline.clear();\n this.ticker.stop();\n }\n}\n","import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n InteractionState,\n Placement\n} from '../ts-types';\nimport type {\n AnyFunction,\n CellAddressWithBound,\n ColorPropertyDefine,\n ColumnIconOption,\n ColumnSeriesNumber,\n IRowSeriesNumber,\n ColumnStyleOption,\n MappingRule,\n TableEventOptions,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ListTableAPI,\n ColumnInfo,\n RowInfo,\n ListTableConstructorOptions\n} from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { ITooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport {\n AABBBounds,\n isNumber,\n isBoolean,\n isFunction,\n type ITextSize,\n isValid,\n merge,\n cloneDeep\n} from '@visactor/vutils';\nimport { measureTextBounds, textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData,\n SeriesNumberColumnData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { IconCache } from '../plugins/icons';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport type { IMenuHandler } from '../components/menu/dom/MenuHandler';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n IBaseTableProtected,\n PivotTableProtected\n} from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport type { CreateLegend } from '../components/legend/create-legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport { setBatchRenderChartCount } from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { NumberRangeMap } from '../layout/row-height-map';\nimport { ListTable } from '../ListTable';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { RowSeriesNumberHelper } from './row-series-number-helper';\nimport { hideCellSelectBorder, restoreCellSelectBorder } from '../scenegraph/select/update-select-border';\nimport type { ITextGraphicAttribute } from './../vrender';\nimport { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport { hasAutoImageColumn } from '../layout/layout-helper';\nimport { Factory } from './factory';\nimport {\n getCellAt,\n getCellAtRelativePosition,\n getColAt,\n getRowAt,\n getTargetColAt,\n getTargetColAtConsiderRightFrozen,\n getTargetRowAt,\n getTargetRowAtConsiderBottomFrozen\n} from './utils/get-cell-position';\nimport { getCellStyle } from './style-helper';\nimport type { EditManager } from '../edit/edit-manager';\nimport { createReactContainer } from '../scenegraph/layout/frozen-react';\nimport { setIconColor } from '../icons';\nimport { TableAnimationManager } from './animation';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport type { CustomCellStylePlugin, ICustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\n\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[];\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n _widthAdaptiveMode: WidthAdaptiveModeDef;\n _heightAdaptiveMode: HeightAdaptiveModeDef;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n _vDataSet?: DataSet;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n editorManager: EditManager;\n animationManager: TableAnimationManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n /** 是否设置了canvas的宽高 */\n canvasSizeSeted?: boolean;\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"1.14.4-alpha.0\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: Map;\n bodyStyleCache: Map;\n bodyMergeTitleCache: Map;\n bodyBottomStyleCache: Map;\n container: HTMLElement;\n isReleased: boolean = false;\n _chartEventMap: Record = {};\n\n customCellStylePlugin?: CustomCellStylePlugin;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n reactCustomLayout?: ReactCustomLayout;\n _hasAutoImageColumn?: boolean;\n\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n if (!container && options.mode !== 'node' && !options.canvas) {\n throw new Error(\"vtable's container is undefined\");\n }\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n frozenRowCount,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n widthAdaptiveMode = 'only-body',\n heightAdaptiveMode = 'only-body',\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n dragHeaderMode,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight,\n clearDOM = true\n } = options;\n this.container = container;\n this.options = options;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._widthAdaptiveMode = widthAdaptiveMode;\n this._heightAdaptiveMode = heightAdaptiveMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n if (isValid(canvasHeight) && isValid(canvasWidth)) {\n this.canvasSizeSeted = true;\n }\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (this.options.canvas) {\n internalProps.element = this.options.canvas.parentElement;\n internalProps.element.style.position = 'relative';\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = this.options.canvas;\n internalProps.context = internalProps.canvas.getContext('2d')!;\n } else if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n\n if (options.customConfig?.createReactContainer) {\n createReactContainer(this);\n }\n }\n\n internalProps.handler = new EventHandler();\n if (isNumber(this.options.resizeTime)) {\n internalProps.handler.resizeTime = this.options.resizeTime;\n }\n\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n internalProps.frozenRowCount = frozenRowCount;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.rowResizeMode = rowResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n if (container) {\n // 先清空\n if (clearDOM) {\n container.innerHTML = '';\n }\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n // this.options = options;\n // internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n // internalProps.theme.isPivot = this.isPivotTable();\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n internalProps.rowSeriesNumberHelper = new RowSeriesNumberHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n this.animationManager = new TableAnimationManager(this);\n\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n TooltipHandler && (internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine));\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyMergeTitleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n\n internalProps.stick = { changedCells: new Map() };\n\n internalProps.customMergeCell = options.customMergeCell;\n\n const CustomCellStylePlugin = Factory.getComponent('customCellStylePlugin') as ICustomCellStylePlugin;\n if (CustomCellStylePlugin) {\n this.customCellStylePlugin = new CustomCellStylePlugin(\n this,\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n setCanvasSize(canvasWidth: number, canvasHeight: number) {\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n this.options.canvasHeight = canvasHeight;\n this.options.canvasWidth = canvasWidth;\n this.resize();\n }\n resize() {\n this._updateSize();\n this.internalProps.legends?.forEach(legend => {\n legend?.resize();\n });\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps?.layoutMap?.frozenColCount ?? this.internalProps?.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n // 纠正frozenColCount的值;\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps?.layoutMap?.frozenRowCount ?? this.internalProps?.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n // this.options.frozenRowCount = frozenRowCount;\n }\n\n get rightFrozenColCount(): number {\n return this.internalProps?.layoutMap?.rightFrozenColCount ?? this.internalProps?.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps?.layoutMap?.bottomFrozenRowCount ?? this.internalProps?.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n if (isNumber(this.internalProps.defaultRowHeight)) {\n return this.internalProps.defaultRowHeight as number;\n }\n return 40;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number | 'auto') {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberRangeMap {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberRangeMap) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n get eventOptions(): TableEventOptions | null {\n return this.internalProps.eventOptions ?? null;\n }\n set eventOptions(eventOptions: TableEventOptions | null) {\n this.internalProps.eventOptions = eventOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n get widthAdaptiveMode(): WidthAdaptiveModeDef {\n return this._widthAdaptiveMode;\n }\n set widthAdaptiveMode(widthAdaptiveMode: WidthAdaptiveModeDef) {\n if (widthAdaptiveMode !== this._widthAdaptiveMode) {\n this._widthAdaptiveMode = widthAdaptiveMode;\n }\n }\n get heightAdaptiveMode(): HeightAdaptiveModeDef {\n return this._heightAdaptiveMode;\n }\n set heightAdaptiveMode(heightAdaptiveMode: HeightAdaptiveModeDef) {\n if (heightAdaptiveMode !== this._heightAdaptiveMode) {\n this._heightAdaptiveMode = heightAdaptiveMode;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n if (pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n const canvasWidth = this.options.canvasWidth;\n this.internalProps.calcWidthContext = {\n _: this.internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n };\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n this.tableX = 0;\n this.tableY = 0;\n\n if (this.options.canvas && this.options.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n // this.tableX = this.options.viewBox.x1;\n // this.tableY = this.options.viewBox.y1;\n if (this?.scenegraph?.stage) {\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n if (this.canvasSizeSeted) {\n widthWithoutPadding = this.canvasWidth;\n heightWithoutPadding = this.canvasHeight;\n } else {\n if (element.parentElement) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n parseInt(computedStyle.paddingLeft || '0px', 10) -\n parseInt(computedStyle.paddingRight || '0px', 10);\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n widthWithoutPadding = (widthWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightWithoutPadding = (heightWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n }\n }\n\n element.style.width = (widthWithoutPadding && `${widthWithoutPadding - padding.left - padding.right}px`) || '0px';\n element.style.height =\n (heightWithoutPadding && `${heightWithoutPadding - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = (canvas.parentElement?.offsetWidth ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightP = (canvas.parentElement?.offsetHeight ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const width = Math.floor(widthP - style.getVerticalScrollBarSize(this.getTheme().scrollStyle));\n const height = Math.floor(heightP - style.getHorizontalScrollBarSize(this.getTheme().scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n if (this.theme.frameStyle?.innerBorder) {\n this.tableX = 0;\n this.tableY = 0;\n this.tableNoFrameWidth = width - (shadowWidths[1] ?? 0);\n this.tableNoFrameHeight = height - (shadowWidths[2] ?? 0);\n } else {\n this.tableX = (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY = (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n this.tableNoFrameWidth =\n width - ((lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0)) - ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n this.tableNoFrameHeight =\n height - ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) - ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n }\n }\n\n updateViewBox(newViewBox: IBoundsLike) {\n const oldWidth = this.options?.viewBox.x2 ?? 0 - this.options?.viewBox.x1 ?? 0;\n const oldHeight = this.options?.viewBox.y2 ?? 0 - this.options?.viewBox.y1 ?? 0;\n const newWidth = newViewBox.x2 - newViewBox.x1;\n const newHeight = newViewBox.y2 - newViewBox.y1;\n this.options.viewBox = newViewBox;\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.resize();\n } else {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, true);\n }\n }\n\n setViewBoxTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.internalProps.modifiedViewBoxTransform = true;\n this.scenegraph.stage.window.setViewBoxTransform(a, b, c, d, e, f);\n }\n\n get rowHierarchyType(): 'grid' | 'tree' {\n return 'grid';\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n if (startCol > endCol) {\n return 0;\n }\n startCol = Math.max(startCol, 0);\n endCol = Math.min(endCol, (this.colCount ?? Infinity) - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n const addWidth = cachedLowerColWidth + adjustW;\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (isValid(this.rowHeightsMap.get(row))) {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n const height = this.rowHeightsMap.get(row);\n let heightRange;\n if (row < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, row);\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(row, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, row);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(height);\n }\n return Math.floor(height);\n }\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultColumnWidth(col: number) {\n // return col < this.rowHeaderLevelCount\n // ? Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth\n // : this.defaultColWidth;\n if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row) || this.isSeriesNumberInHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(row)) {\n //底部冻结行默认取用了表头的行高 但针对非表头数据冻结的情况这里可能不妥\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n // this.rowHeightsMap.put(row, Math.round(height));\n this.rowHeightsMap.put(row, this.options.customConfig?._disableColumnAndRowSizeRound ? height : Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n\n setRowHeight(row: number, height: number) {\n this.scenegraph.setRowHeight(row, height);\n this.scenegraph.updateChartSizeForResizeRowHeight(row);\n this.internalProps._heightResizedRowMap.add(row); // add resize tag\n }\n\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n if (startRow > endRow || this.rowCount === 0) {\n return 0;\n }\n startRow = Math.max(startRow, 0);\n endRow = Math.min(endRow, (this.rowCount ?? Infinity) - 1);\n\n let h = 0;\n const isDefaultRowHeightIsAuto = this.options.defaultRowHeight === 'auto';\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.options.customComputeRowHeight &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n // endRow >= this.columnHeaderLevelCount &&\n // !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn() &&\n !isDefaultRowHeightIsAuto &&\n this.internalProps._heightResizedRowMap.size === 0\n ) {\n // part in header\n for (let i = startRow; i < Math.min(endRow + 1, this.columnHeaderLevelCount); i++) {\n h += this.getRowHeight(i);\n }\n // part in body\n if (endRow >= this.columnHeaderLevelCount) {\n h +=\n this.defaultRowHeight *\n (Math.min(endRow, this.rowCount - this.bottomFrozenRowCount - 1) -\n Math.max(this.columnHeaderLevelCount, startRow) +\n 1);\n }\n // part in bottom frozen\n // last axis row height is default header row height in pivot chart\n for (let i = this.rowCount - this.bottomFrozenRowCount; i < endRow + 1; i++) {\n h += this.getRowHeight(i);\n }\n } else {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // for (let i = startRow; i <= endRow; i++) {\n // h += this.getRowHeight(i);\n // }\n const tempH = this.rowHeightsMap.getSumInRange(startRow, endRow);\n let heightRange;\n if (endRow < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, endRow);\n } else if (endRow >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(endRow, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, endRow);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(tempH);\n }\n return Math.floor(tempH);\n }\n h = this.rowHeightsMap.getSumInRange(startRow, endRow);\n }\n // if (this.options._disableColumnAndRowSizeRound) {\n // // console.log(startRow, endRow, Number(h.toFixed(2)));\n // // return Number(h.toFixed(2));\n // return h;\n // }\n return Math.round(h);\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n }\n return this.getDefaultColumnWidth(col);\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // if (this.isPivotTable()) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n // return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /** 判断某行是否应该计算行高 */\n isAutoRowHeight(row?: number): boolean {\n if (this.heightMode === 'autoHeight') {\n return true;\n } else if (this.options.customComputeRowHeight) {\n return true;\n } else if (row >= 0 && row < this.columnHeaderLevelCount) {\n return this.getDefaultRowHeight(row) === 'auto';\n }\n return false;\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width = this.colWidthsMap.get(col) ?? this.getDefaultColumnWidth(col);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(\n col,\n // typeof width === 'number' ? (this.options.customConfig?._disableColumnAndRowSizeRound ? width : Math.round(width)) : width\n typeof width === 'number' ? Math.round(width) : width\n );\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n setColWidth(col: number, width: number) {\n this.scenegraph.setColWidth(col, width);\n this.scenegraph.updateChartSizeForResizeColWidth(col);\n this.internalProps._widthResizedColMap.add(col); // add resize tag\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n this.rowHeightsMap.clearRange();\n // if (typeof row !== 'number') {\n // this._rowRangeHeightsMap.clear();\n // } else {\n // const keys = this._rowRangeHeightsMap.keys();\n // for (const key of keys) {\n // const reg = rangeReg.exec(key);\n // if (reg) {\n // const start = Number(reg[1]);\n // const end = Number(reg[2]);\n // if (row >= start && row <= end) {\n // this._rowRangeHeightsMap.delete(key);\n // }\n // }\n // }\n // }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n if (this.getAllColsWidth() <= this.tableNoFrameWidth) {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n } else {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n // absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n if (this.getAllRowsHeight() <= this.tableNoFrameHeight) {\n absoluteTop = this.getRowsHeight(0, row - 1);\n } else {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n // absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n const cellRect = this.getCellRect(col, row);\n return this._toRelativeRect(cellRect, relativeX, relativeY);\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((range).start) {\n const isFrozenCell = this.isFrozenCell((range).start.col, (range).start.row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n ),\n relativeX,\n relativeY\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n const isFrozenCell = this.isFrozenCell((range).col, (range).row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row),\n relativeX,\n relativeY\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((range).start) {\n cellRange = range;\n } else {\n cellRange = this.getCellRange((range).col, (range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n const scrollLeft = this.scrollLeft;\n if (this.isLeftFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n // width =\n // this.tableNoFrameWidth -\n // (this.getColsWidth(0, startCol - 1) ?? 0) -\n // (this.getColsWidth(endCol + 1, this.colCount - 1) ?? 0);\n } else if (this.isLeftFrozenColumn(startCol) && !this.isLeftFrozenColumn(endCol)) {\n width = Math.max(width - scrollLeft, this.getColsWidth(startCol, this.frozenColCount - 1));\n } else if (!this.isRightFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n absoluteLeft = Math.min(absoluteLeft - scrollLeft, this.tableNoFrameWidth - this.getRightFrozenColsWidth());\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n } else if (this.isRightFrozenColumn(startCol)) {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(startCol, this.colCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n const scrollTop = this.scrollTop;\n if (this.isTopFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n // height =\n // this.tableNoFrameHeight -\n // (this.getRowsHeight(0, startRow - 1) ?? 0) -\n // (this.getRowsHeight(endRow + 1, this.rowCount - 1) ?? 0);\n } else if (this.isTopFrozenRow(startRow) && !this.isTopFrozenRow(endRow)) {\n height = Math.max(height - scrollTop, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n } else if (!this.isBottomFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n absoluteTop = Math.min(absoluteTop - scrollTop, this.tableNoFrameHeight - this.getBottomFrozenRowsHeight());\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n } else if (this.isBottomFrozenRow(startRow)) {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(startRow, this.rowCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((range).start) {\n return this.getCellsRect(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((range).start) {\n return this.getCellsRectWidth(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n return getRowAt(absoluteY, this);\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n return getColAt(absoluteX, this);\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddressWithBound {\n return getCellAt(absoluteX, absoluteY, this);\n }\n\n /**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,已考虑格滚动情况\n * @param relativeY 左边y值,相对于容器左上角,已考虑格滚动情况\n * @returns\n */\n getCellAtRelativePosition(relativeX: number, relativeY: number): CellAddressWithBound {\n return getCellAtRelativePosition(relativeX, relativeY, this);\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect, relativeX: boolean = true, relativeY: boolean = true): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - (relativeX ? visibleRect.left : 0));\n rect.offsetTop(this.tableY - (relativeY ? visibleRect.top : 0));\n rect.offsetLeft(this.options.viewBox?.x1 ?? 0);\n rect.offsetTop(this.options.viewBox?.y1 ?? 0);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange() {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange() {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n if (this.isReleased) {\n return;\n }\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n IconCache.clearAll();\n\n super.release?.();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n this.eventManager.release();\n internalProps.focusControl?.release?.();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n internalProps.focusControl.release();\n const { parentElement } = internalProps.element;\n if (parentElement && !this.options.canvas) {\n parentElement.removeChild(internalProps.element);\n }\n (this as any).editorManager?.editingEditor?.onEnd?.();\n this.isReleased = true;\n this.scenegraph = null;\n this.internalProps = null;\n\n this.reactCustomLayout?.clearCache();\n }\n\n fireListeners(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(options: BaseTableConstructorOptions) {\n (this.options as BaseTable['options']) = options;\n this._hasAutoImageColumn = undefined;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n dragHeaderMode,\n\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n widthAdaptiveMode,\n heightAdaptiveMode,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight\n } = options;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this._widthAdaptiveMode = widthAdaptiveMode ?? 'only-body';\n this._heightAdaptiveMode = heightAdaptiveMode ?? 'only-body';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n this.customRender = customRender;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node' && !options.canvas) {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.rowResizeMode = rowResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.stick.changedCells.clear();\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n this.scenegraph.clearCells();\n this.scenegraph.updateComponent();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.clearCellStyleCache();\n this.clearColWidthCache();\n this.clearRowHeightCache();\n\n internalProps.customMergeCell = options.customMergeCell;\n\n this.customCellStylePlugin?.updateCustomCell(\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n // const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);//替换成下面遍历获取高度,鉴于冻结数量有限。否则这里在初始化的时候ClipBodyGroupBeforeRenderContribution.drawShap就先走了这个计算,导致初始化时间加长,而后续计算行高列宽会清除这个计算结果,浪费了性能\n let height = 0;\n for (let row = this.rowCount - this.bottomFrozenRowCount; row <= this.rowCount - 1; row++) {\n height += this.getRowHeight(row);\n }\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n // const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1); // 同getBottomFrozenRowsHeight的原因\n let width = 0;\n for (let col = this.colCount - this.rightFrozenColCount; col <= this.colCount - 1; col++) {\n width += this.getColWidth(col);\n }\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll = true\n ): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n const originWidth = this.canvas.offsetWidth || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n const originHeight = this.canvas.offsetHeight || currentHeight;\n const heightRatio = currentHeight / originHeight;\n\n const x =\n (clientX - rect.left) / widthRatio + (isAddScroll ? table.scrollLeft : 0) - (this.options.viewBox?.x1 ?? 0);\n const y =\n (clientY - rect.top) / heightRatio + (isAddScroll ? table.scrollTop : 0) - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n\n if (this.internalProps.modifiedViewBoxTransform && this.scenegraph.stage.window.getViewBoxTransform()) {\n const transform = this.scenegraph.stage.window.getViewBoxTransform();\n transform.transformPoint(point, point);\n }\n return point;\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): ColumnInfo | null {\n return getTargetColAt(absoluteX, this);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): RowInfo | null {\n const targetRow = getTargetRowAt(absoluteY, this);\n if (targetRow) {\n targetRow.row = Math.min(targetRow.row, this.rowCount - 1);\n }\n return targetRow;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAtConsiderRightFrozen(absoluteX: number, isConsider: boolean): ColumnInfo | null {\n return getTargetColAtConsiderRightFrozen(absoluteX, isConsider, this);\n }\n\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAtConsiderBottomFrozen(absoluteY: number, isConsider: boolean): RowInfo | null {\n return getTargetRowAtConsiderBottomFrozen(absoluteY, isConsider, this);\n }\n\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n * @param isShift 是否按住 shift 键\n * @param isCtrl 是否按住 ctrl 键\n * @param makeSelectCellVisible 是否让选中的单元格可见\n * @param skipBodyMerge 是否忽略合并单元格,默认 false针对合并单元自动扩大选取范围\n */\n selectCell(\n col: number,\n row: number,\n isShift?: boolean,\n isCtrl?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge: boolean = false\n ) {\n const isHasSelected = !!this.stateManager.select.ranges?.length;\n this.stateManager.updateSelectPos(\n col,\n row,\n isShift,\n isCtrl,\n false,\n makeSelectCellVisible ?? this.options.select?.makeSelectCellVisible ?? true,\n skipBodyMerge\n );\n this.stateManager.endSelectCells(true, isHasSelected);\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n if (cellRange.start.col === cellRange.end.col && cellRange.start.row === cellRange.end.row) {\n this.stateManager.updateSelectPos(\n cellRange.start.col,\n cellRange.start.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n } else {\n this.stateManager.updateSelectPos(\n cellRange.start.col,\n cellRange.start.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n cellRange.end.col,\n cellRange.end.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n this.stateManager.endSelectCells(false, false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array, option?: { sortState?: SortState | SortState[] }): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number, recalculateColWidths?: boolean): void;\n abstract _hasHierarchyTreeHeader(): boolean;\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract _moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n\n abstract _hasCustomRenderOrLayout(): boolean;\n\n get recordsCount() {\n return this.records?.length;\n }\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): DataSource | CachedDataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: DataSource | CachedDataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n /**\n * Get the enableLineBreak.\n */\n get enableLineBreak(): boolean {\n return this.internalProps.enableLineBreak;\n }\n /**\n * Set the enableLineBreak\n */\n set enableLineBreak(enableLineBreak: boolean) {\n this.internalProps.enableLineBreak = enableLineBreak;\n this.options.enableLineBreak = enableLineBreak;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n this.options.theme = theme;\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n this.options.theme = theme;\n this.scenegraph.updateComponent();\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row)?.cellType ?? 'text';\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n getCellType(col: number, row: number): ColumnTypeOption {\n let cellType;\n if (this.isSeriesNumberInHeader(col, row)) {\n return (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberHeader(col, row).cellType;\n } else if (this.isHeader(col, row)) {\n cellType = (this.internalProps.layoutMap.getHeader(col, row) as HeaderData).headerType;\n } else {\n cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n }\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): (ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber)[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row) as ColumnDefine;\n if (header && (header.field || (header as ColumnDefine).columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.getCellOriginRecord(col, row);\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n const hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || customMerge.customRender)\n ) {\n return customMerge.range;\n }\n }\n return this.internalProps.layoutMap?.getCellRange(col, row);\n }\n\n hasCustomMerge() {\n return !!this.internalProps.customMergeCell;\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || this.customRender)\n ) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText,\n this.theme\n );\n customMerge.style = fullStyle;\n }\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = (fieldDef as ColumnDefine)?.description ?? (field as HeaderData)?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n /** 判断单元格是否属于序号body部分 */\n isSeriesNumberInBody(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n );\n }\n /** 判断单元格是否属于序号表头部分 */\n isSeriesNumberInHeader(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)\n );\n }\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.isLeftFrozenColumn(col, row) || this.isRightFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.isTopFrozenRow(col, row) || this.isBottomFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit {\n if (col >= 0 && row >= 0) {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: this.getCellType(col, row),\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n return undefined;\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field === null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource?.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n return getCellStyle(col, row, this);\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n this.bodyStyleCache.clear();\n this.bodyMergeTitleCache.clear();\n this.bodyBottomStyleCache.clear();\n\n // this._newRowHeightsMap.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeRow(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col, row + 1)) {\n return false;\n }\n\n if (this.internalProps.rowResizeMode === 'none') {\n return false;\n } else if (this.internalProps.rowResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.rowResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (\n this.isHeader(col, row) &&\n (this.stateManager.isSelected(col, row) ||\n (this.options.select?.headerSelectMode === 'body' &&\n checkCellInSelect(col, row, [\n this.getCellRange(this.stateManager.select.cellPos.col, this.stateManager.select.cellPos.row)\n ])) ||\n isCellDisableSelect(this, col, row))\n ) {\n if (this.internalProps.frozenColDragHeaderMode === 'disabled' && this.isFrozenColumn(col)) {\n return false;\n }\n if (this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if ((define as ColumnDefine).dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return (define as ColumnDefine).dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else if ((this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumber(col, row)) {\n if (!(this.options as ListTableConstructorOptions).groupBy || !this.getCellRawRecord(col, row)?.vtableMerge) {\n const dragOrder = (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberBody(col, row)?.define\n ?.dragOrder;\n if (dragOrder) {\n icons = this.internalProps.rowSeriesNumberHelper.getIcons(col, row);\n }\n }\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n\n const ctx = this.internalProps.context;\n const cellIcon = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n if (icons?.length > 0) {\n icons = icons.concat(cellIcon);\n } else if (cellIcon?.length > 0) {\n icons = cellIcon;\n }\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n strokeColor: isBoolean(theme.text.stroke)\n ? getProp('strokeColor', actStyle, col, row, this)\n : (theme.text.stroke as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n underlineDash: theme.text.underlineDash,\n underlineOffset: theme.text.underlineOffset,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough,\n _strokeArrayWidth: (theme.group as any).strokeArrayWidth,\n _strokeArrayColor: (theme.group as any).strokeArrayColor,\n _linkColor: getProp('linkColor', actStyle, col, row, this)\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = isValid(copyCellValue) ? `${copyCellValue}` : '';\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n if (r < maxRow) {\n copyValue += '\\r\\n';\n }\n }\n }\n\n if (this.options?.formatCopyValue) {\n copyValue = this.options.formatCopyValue(copyValue);\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n getSelectedCellRanges(): CellRange[] {\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n return cloneDeep(ranges);\n }\n\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n measureTextBounds(attribute: ITextGraphicAttribute): AABBBounds {\n return measureTextBounds(attribute) as AABBBounds;\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n if (this._hasAutoImageColumn === undefined) {\n this._hasAutoImageColumn = hasAutoImageColumn(this);\n }\n return this._hasAutoImageColumn;\n }\n\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n let colHeaderRangeRect;\n if (this.frozenRowCount >= 1) {\n colHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n });\n }\n let rowHeaderRangeRect;\n if (this.frozenColCount >= 1) {\n rowHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let bottomFrozenRangeRect;\n if (this.bottomFrozenRowCount >= 1) {\n bottomFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let rightFrozenRangeRect;\n if (this.rightFrozenColCount >= 1) {\n rightFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n // return true;\n if (this.isFrozenCell(col, row)) {\n return true;\n } else if (\n // body cell drawRange do not intersect colHeaderRangeRect&rowHeaderRangeRect\n rect.top >= (colHeaderRangeRect?.bottom ?? rect.top) &&\n rect.left >= (rowHeaderRangeRect?.right ?? rect.left) &&\n rect.bottom <= (bottomFrozenRangeRect?.top ?? rect.bottom) &&\n rect.right <= (rightFrozenRangeRect?.left ?? rect.right)\n ) {\n return true;\n }\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number, options?: { disableBackground?: boolean; disableBorder?: boolean }) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n\n // hide border\n this.scenegraph.tableGroup.border.setAttribute('visible', false);\n\n // deal with options\n let oldFill;\n if (options?.disableBackground) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldFill = cellGroup.attribute.fill;\n cellGroup.setAttribute('fill', 'transparent');\n }\n let oldStroke;\n if (options?.disableBorder) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldStroke = cellGroup.attribute.stroke;\n cellGroup.setAttribute('stroke', false);\n }\n\n this.scenegraph.renderSceneGraph();\n let sizeOffset = 0;\n if (this.theme.cellBorderClipDirection === 'bottom-right') {\n sizeOffset = 1;\n }\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX - sizeOffset,\n cellRect.bottom + this.tableY - sizeOffset\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n\n // restore border\n this.scenegraph.tableGroup.border.setAttribute('visible', true);\n\n // restore options\n if (oldFill) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('fill', oldFill);\n }\n if (oldStroke) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('stroke', oldStroke);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n this.scenegraph.updateNextFrame();\n\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n this.scenegraph.renderSceneGraph();\n\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n const contentWidth = this.tableX + this.getAllColsWidth();\n const contentHeight = this.tableY + this.getAllRowsHeight();\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex(col: number, row: number) {\n return {\n col: col - this.rowHeaderLevelCount,\n row: row - this.columnHeaderLevelCount\n };\n }\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex(col: number, row: number) {\n return {\n col: col + this.rowHeaderLevelCount,\n row: row + this.columnHeaderLevelCount\n };\n }\n\n /**\n * 监听vchart事件\n * @param type vchart事件类型\n * @param listener vchart事件监听器\n * @returns 事件监听器id\n */\n onVChartEvent(type: string, callback: AnyFunction): void;\n onVChartEvent(type: string, query: any, callback: AnyFunction): void;\n onVChartEvent(type: string, query?: any, callback?: AnyFunction): void {\n if (!this._chartEventMap[type]) {\n this._chartEventMap[type] = [];\n }\n if (typeof query === 'function') {\n this._chartEventMap[type].push({ callback: query });\n } else {\n this._chartEventMap[type].push({ callback, query });\n }\n }\n\n offVChartEvent(type: string, callback?: AnyFunction): void {\n // delete this._chartEventMap[type];\n if (!this._chartEventMap[type]) {\n return;\n }\n if (callback) {\n this._chartEventMap[type] = this._chartEventMap[type].filter(e => e.callback !== callback);\n } else {\n this._chartEventMap[type] = [];\n }\n }\n /** 给activeChartInstance逐个绑定chart用户监听事件 */\n _bindChartEvent(activeChartInstance: any) {\n if (activeChartInstance) {\n for (const key in this._chartEventMap) {\n (this._chartEventMap[key] || []).forEach(e => {\n if (e.query) {\n activeChartInstance.on(key, e.query, e.callback);\n } else {\n activeChartInstance.on(key, e.callback);\n }\n });\n }\n }\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n hasCustomCellStyle(customStyleId: string): boolean {\n return this.customCellStylePlugin?.hasCustomCellStyle(customStyleId);\n }\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n this.customCellStylePlugin?.registerCustomCellStyle(customStyleId, customStyle);\n }\n\n arrangeCustomCellStyle(\n cellPos: { col?: number; row?: number; range?: CellRange },\n customStyleId: string,\n forceFastUpdate?: boolean\n ) {\n this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate);\n }\n isSeriesNumber(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isSeriesNumber(col, row);\n }\n isHasSeriesNumber(): boolean {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount > 0;\n }\n get leftRowSeriesNumberCount(): number {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount ?? 0;\n }\n setMinMaxLimitWidth(setWidth: boolean = false) {\n const internalProps = this.internalProps;\n //设置列宽\n for (let col = 0; col < internalProps.layoutMap.columnWidths.length; col++) {\n if (this.internalProps._widthResizedColMap.has(col)) {\n continue;\n }\n const { width, minWidth, maxWidth } = internalProps.layoutMap.columnWidths?.[col] ?? {};\n // width 为 \"auto\" 时先不存储ColWidth\n if (\n setWidth &&\n width &&\n ((typeof width === 'string' && width !== 'auto') || (typeof width === 'number' && width > 0))\n ) {\n this._setColWidth(col, width);\n }\n if (minWidth && ((typeof minWidth === 'number' && minWidth > 0) || typeof minWidth === 'string')) {\n this.setMinColWidth(col, minWidth);\n }\n if (maxWidth && ((typeof maxWidth === 'number' && maxWidth > 0) || typeof maxWidth === 'string')) {\n this.setMaxColWidth(col, maxWidth);\n }\n }\n }\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.dataSource?.setSortedIndexMap(field, filedMap);\n }\n // startInertia() {\n // startInertia(0, -1, 1, this.stateManager);\n // }\n\n checkReactCustomLayout() {\n if (!this.reactCustomLayout) {\n this.reactCustomLayout = new ReactCustomLayout(this);\n }\n }\n\n get bodyDomContainer() {\n return this.internalProps.bodyDomContainer;\n }\n get headerDomContainer() {\n return this.internalProps.headerDomContainer;\n }\n get frozenBodyDomContainer() {\n return this.internalProps.frozenBodyDomContainer;\n }\n get frozenHeaderDomContainer() {\n return this.internalProps.frozenHeaderDomContainer;\n }\n get rightFrozenBodyDomContainer() {\n return this.internalProps.rightFrozenBodyDomContainer;\n }\n get rightFrozenHeaderDomContainer() {\n return this.internalProps.rightFrozenHeaderDomContainer;\n }\n get frozenBottomDomContainer() {\n return this.internalProps.frozenBottomDomContainer;\n }\n get bottomDomContainer() {\n return this.internalProps.bottomDomContainer;\n }\n get rightFrozenBottomDomContainer() {\n return this.internalProps.rightFrozenBottomDomContainer;\n }\n /**\n * 显示移动列或移动行的高亮线 如果(col,row)单元格是列头 则显示高亮列线; 如果(col,row)单元格是行头 则显示高亮行线\n * @param col 在表头哪一列后显示高亮线\n * @param row 在表头哪一行后显示高亮线\n */\n showMoverLine(col: number, row: number) {\n this.scenegraph.component.showMoveCol(col, row, 0);\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 隐藏掉移动列或移动行的高亮线\n * @param col\n * @param row\n */\n hideMoverLine(col: number, row: number) {\n this.scenegraph.component.hideMoveCol();\n this.scenegraph.renderSceneGraph();\n }\n /** 关闭表格的滚动 */\n disableScroll() {\n this.eventManager.disableScroll();\n }\n /** 开启表格的滚动 */\n enableScroll() {\n this.eventManager.enableScroll();\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n return undefined;\n }\n\n // anmiation\n scrollToRow(row: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ row });\n return;\n }\n this.animationManager.scrollTo({ row }, animationOption);\n }\n scrollToCol(col: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ col });\n return;\n }\n this.animationManager.scrollTo({ col }, animationOption);\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n * @param animationOption 动画配置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) {\n if (animationOption) {\n this.animationManager.scrollTo(cellAddr, animationOption);\n return;\n }\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n}\n","import type { IEditor } from '@visactor/vtable-editors';\nexport const editors: { [key: string]: IEditor } = {};\nexport function get(editorName: string): IEditor {\n const editor = editors[editorName];\n if (!editor) {\n console.warn('editor should register before init table!');\n return undefined;\n }\n return editors[editorName];\n}\n","import type { IEditor, ValidateEnum } from '@visactor/vtable-editors';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type { ListTableAPI, ListTableConstructorOptions } from '../ts-types';\nimport { getCellEventArgsSet } from '../event/util';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { isPromise } from '../tools/helper';\nimport { isValid } from '@visactor/vutils';\n\nexport class EditManager {\n table: BaseTableAPI;\n editingEditor: IEditor;\n isValidatingValue: boolean = false;\n editCell: { col: number; row: number };\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.bindEvent();\n }\n\n bindEvent() {\n const handler = this.table.internalProps.handler;\n const editCellTrigger = (this.table.options as ListTableConstructorOptions).editCellTrigger;\n this.table.on(TABLE_EVENT_TYPE.DBLCLICK_CELL, e => {\n if (\n !editCellTrigger || //默认为双击\n editCellTrigger === 'doubleclick' ||\n (Array.isArray(editCellTrigger) && editCellTrigger.includes('doubleclick'))\n ) {\n const { col, row } = e;\n\n //取双击自动列宽逻辑\n const eventArgsSet = getCellEventArgsSet(e.federatedEvent);\n const resizeCol = this.table.scenegraph.getResizeColAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgsSet.eventArgs?.targetCell\n );\n if (this.table._canResizeColumn(resizeCol.col, resizeCol.row) && resizeCol.col >= 0) {\n // 判断同双击自动列宽的时间监听的DBLCLICK_CELL\n // 如果是双击自动列宽 则编辑不开启\n return;\n }\n this.startEditCell(col, row);\n }\n });\n\n this.table.on(TABLE_EVENT_TYPE.CLICK_CELL, e => {\n if (editCellTrigger === 'click' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('click'))) {\n const { col, row } = e;\n this.startEditCell(col, row);\n }\n });\n\n // handler.on(this.table.getElement(), 'wheel', (e: WheelEvent) => {\n // this.completeEdit();\n // });\n // handler.on(this.table.getElement(), 'resize', (e: Event) => {\n // if (this.table.autoFillWidth || this.table.autoFillHeight) {\n // this.completeEdit();\n // }\n // });\n }\n\n startEditCell(col: number, row: number, value?: string | number) {\n if (this.editingEditor) {\n return;\n }\n const editor = (this.table as ListTableAPI).getEditor(col, row);\n if (editor) {\n // //自定义内容单元格不允许编辑\n // if (this.table.getCustomRender(col, row) || this.table.getCustomLayout(col, row)) {\n // console.warn(\"VTable Warn: cell has config custom render or layout, can't be edited\");\n // return;\n // }\n // if (!this.table.isHeader(col, row)) {\n // const range = this.table.getCellRange(col, row);\n // const isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n // if (isMerge) {\n // console.warn(\"VTable Warn: this is merge cell, can't be edited\");\n // return;\n // }\n // }\n if ((this.table.internalProps.layoutMap as SimpleHeaderLayoutMap)?.isAggregation?.(col, row)) {\n console.warn(\"VTable Warn: this is aggregation value, can't be edited\");\n return;\n }\n\n if (!this.editingEditor) {\n this.editCell = { col, row };\n }\n\n this.table._makeVisibleCell(col, row);\n this.editingEditor = editor;\n const dataValue = isValid(value) ? value : this.table.getCellOriginValue(col, row);\n const rect = this.table.getCellRangeRelativeRect(this.table.getCellRange(col, row));\n const referencePosition = { rect: { left: rect.left, top: rect.top, width: rect.width, height: rect.height } };\n\n // adjust last col&row, same as packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw\n if (col === this.table.colCount - 1) {\n referencePosition.rect.width = rect.width - 1;\n }\n if (row === this.table.rowCount - 1) {\n referencePosition.rect.height = rect.height - 1;\n }\n\n editor.beginEditing && console.warn('VTable Warn: `beginEditing` is deprecated, please use `onStart` instead.');\n editor.beginEditing?.(this.table.getElement(), referencePosition, dataValue);\n\n if (editor.bindSuccessCallback) {\n console.warn('VTable Warn: `bindSuccessCallback` is deprecated, please use `onStart` instead.');\n }\n editor.bindSuccessCallback?.(() => {\n this.completeEdit();\n });\n editor.onStart?.({\n value: dataValue,\n endEdit: () => {\n this.completeEdit();\n },\n referencePosition,\n container: this.table.getElement(),\n col,\n row\n });\n }\n }\n\n /** 如果是鼠标事件触发调用该接口 请传入原始事件对象 将判断事件对象是否在编辑器本身上面 来处理是否结束编辑\n * 返回值如果为false说明没有退出编辑状态 validateValue接口返回false 说明校验失败不退出编辑 */\n completeEdit(e?: Event): boolean | Promise {\n if (!this.editingEditor) {\n return true;\n }\n if (this.isValidatingValue) {\n return false;\n }\n const target = e?.target as HTMLElement | undefined;\n const { editingEditor: editor } = this;\n\n if (target) {\n if (editor.targetIsOnEditor) {\n console.warn('VTable Warn: `targetIsOnEditor` is deprecated, please use `isEditorElement` instead.');\n\n if (editor.targetIsOnEditor(target)) {\n return false;\n }\n } else if (!editor.isEditorElement || editor.isEditorElement(target)) {\n return false;\n }\n }\n\n if (!this.editingEditor.getValue) {\n console.warn('VTable Warn: `getValue` is not provided, did you forget to implement it?');\n }\n if (this.editingEditor.validateValue) {\n this.isValidatingValue = true;\n const newValue = this.editingEditor.getValue();\n const oldValue = this.table.getCellOriginValue(this.editCell.col, this.editCell.row);\n\n const maybePromiseOrValue = this.editingEditor.validateValue?.(newValue, oldValue, this.editCell, this.table);\n\n if (isPromise(maybePromiseOrValue)) {\n this.isValidatingValue = true;\n return new Promise((resolve, reject) => {\n maybePromiseOrValue\n .then(result => {\n // if (result) {\n // this.doExit();\n // resolve(true);\n // } else {\n // this.isValidatingValue = false;\n // resolve(false);\n // }\n dealWithValidateValue(result, this, oldValue, resolve);\n })\n .catch((err: Error) => {\n this.isValidatingValue = false;\n console.error('VTable Error:', err);\n reject(err);\n });\n });\n }\n return dealWithValidateValue(maybePromiseOrValue, this, oldValue);\n }\n this.doExit();\n return true;\n }\n\n doExit() {\n const changedValue = this.editingEditor.getValue?.();\n const range = this.table.getCellRange(this.editCell.col, this.editCell.row);\n const changedValues: any[] = [];\n for (let row = range.start.row; row <= range.end.row; row++) {\n const rowChangedValues = [];\n for (let col = range.start.col; col <= range.end.col; col++) {\n rowChangedValues.push(changedValue);\n }\n changedValues.push(rowChangedValues);\n }\n (this.table as ListTableAPI).changeCellValues(range.start.col, range.start.row, changedValues);\n this.editingEditor.exit && console.warn('VTable Warn: `exit` is deprecated, please use `onEnd` instead.');\n this.editingEditor.exit?.();\n this.editingEditor.onEnd?.();\n this.editingEditor = null;\n this.isValidatingValue = false;\n }\n\n cancelEdit() {\n if (this.editingEditor) {\n // TODO: 添加开发时弃用警告\n this.editingEditor.exit?.();\n this.editingEditor.onEnd?.();\n this.editingEditor = null;\n }\n }\n}\n\nfunction dealWithValidateValue(\n validateValue: boolean | ValidateEnum,\n editManager: EditManager,\n oldValue: any,\n resolve?: (value: boolean | PromiseLike) => void\n): boolean {\n editManager.isValidatingValue = false;\n if (validateValue === 'validate-exit') {\n editManager.doExit();\n resolve?.(true);\n return true;\n } else if (validateValue === 'invalidate-exit') {\n (editManager.editingEditor as any).setValue(oldValue);\n editManager.doExit();\n resolve?.(true);\n return true;\n } else if (validateValue === 'validate-not-exit') {\n resolve?.(false);\n return false;\n } else if (validateValue === 'invalidate-not-exit') {\n resolve?.(false);\n return false;\n } else if (validateValue === true) {\n editManager.doExit();\n resolve?.(true);\n return true;\n }\n resolve?.(false);\n return false;\n}\n","import { isArray, isString } from '@visactor/vutils';\nimport type { GroupByOption } from '../ts-types';\n\nexport function getGroupByDataConfig(groupByOption: GroupByOption) {\n // no sort temply\n if (isString(groupByOption)) {\n return { groupByRules: [groupByOption] };\n }\n if (isArray(groupByOption)) {\n const groupByRules = groupByOption.map(item => {\n if (isString(item)) {\n return item;\n }\n return item.key;\n });\n return { groupByRules };\n }\n\n return {};\n}\n","/* eslint-disable max-depth */\nimport type { ListTable } from '../ListTable';\nimport type { CachedDataSource } from '../data';\nimport { computeColWidth } from '../scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from '../scenegraph/layout/compute-row-height';\nimport { isPromise } from '../tools/helper';\nimport { defaultOrderFn } from '../tools/util';\nimport type { SortState } from '../ts-types';\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\n\n/**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n */\nexport function listTableChangeCellValue(\n col: number,\n row: number,\n value: string | number | null,\n workOnEditableCell: boolean,\n table: ListTable\n) {\n if ((workOnEditableCell && table.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n const recordIndex = table.getRecordShowIndexByCell(col, row);\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n const beforeChangeValue = table.getCellRawValue(col, row);\n const oldValue = table.getCellOriginValue(col, row);\n if (table.isHeader(col, row)) {\n table.internalProps.layoutMap.updateColumnTitle(col, row, value as string);\n } else {\n table.dataSource.changeFieldValue(value, recordIndex, field, col, row, table);\n }\n const range = table.getCellRange(col, row);\n //改变单元格的值后 聚合值做重新计算\n const aggregators = table.internalProps.layoutMap.getAggregatorsByCell(col, row);\n if (aggregators) {\n if (Array.isArray(aggregators)) {\n for (let i = 0; i < aggregators?.length; i++) {\n aggregators[i].recalculate();\n }\n } else {\n aggregators.recalculate();\n }\n const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(\n range.start.col,\n range.start.row,\n range.end.col,\n range.end.row\n );\n for (let i = 0; i < aggregatorCells.length; i++) {\n const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n }\n }\n\n // const cell_value = table.getCellValue(col, row);\n\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (table.widthMode === 'adaptive' || (table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth)) {\n if (table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n table.scenegraph.recalculateColWidths();\n }\n } else if (!table.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, table.rowCount - 1, table, false);\n if (newWidth !== oldWidth) {\n table.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n if (table.internalProps._heightResizedRowMap.size === 0) {\n table.scenegraph.recalculateRowHeights();\n }\n } else if (table.isAutoRowHeight() && !table.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = table.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, table.colCount - 1, table);\n table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n const changedValue = table.getCellOriginValue(col, row);\n if (oldValue !== changedValue) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue: beforeChangeValue,\n currentValue: oldValue,\n changedValue\n });\n }\n table.scenegraph.updateNextFrame();\n }\n}\n/**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\nexport function listTableChangeCellValues(\n startCol: number,\n startRow: number,\n values: (string | number)[][],\n workOnEditableCell: boolean,\n table: ListTable\n) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n let cellUpdateType: 'normal' | 'sort' | 'group';\n\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > table.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > table.colCount - 1) {\n break;\n }\n cellUpdateType = getCellUpdateType(startCol + j, startRow + i, table, cellUpdateType);\n const beforeChangeValue = table.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = table.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > table.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > table.colCount - 1) {\n break;\n }\n thisRowPasteColEnd = startCol + j;\n let isCanChange = false;\n if (workOnEditableCell === false) {\n isCanChange = true;\n } else {\n if (table.isHasEditorDefine(startCol + j, startRow + i)) {\n const editor = table.getEditor(startCol + j, startRow + i);\n const oldValue = oldValues[i][j];\n const value = rowValues[j];\n const maybePromiseOrValue = editor?.validateValue?.(value, oldValue) ?? true;\n if (isPromise(maybePromiseOrValue)) {\n //TODO 处理promise的情况\n isCanChange = true;\n } else {\n isCanChange =\n maybePromiseOrValue === true ||\n maybePromiseOrValue === 'validate-exit' ||\n maybePromiseOrValue === 'invalidate-exit';\n }\n }\n }\n // if ((workOnEditableCell && table.isHasEditorDefine(startCol + j, startRow + i)) || workOnEditableCell === false) {\n if (isCanChange) {\n const value = rowValues[j];\n const recordIndex = table.getRecordShowIndexByCell(startCol + j, startRow + i);\n const { field } = table.internalProps.layoutMap.getBody(startCol + j, startRow + i);\n // const beforeChangeValue = table.getCellRawValue(startCol + j, startRow + i);\n // const oldValue = table.getCellOriginValue(startCol + j, startRow + i);\n const beforeChangeValue = beforeChangeValues[i][j];\n const oldValue = oldValues[i][j];\n if (table.isHeader(startCol + j, startRow + i)) {\n table.internalProps.layoutMap.updateColumnTitle(startCol + j, startRow + i, value as string);\n } else {\n table.dataSource.changeFieldValue(value, recordIndex, field, startCol + j, startRow + i, table);\n }\n const changedValue = table.getCellOriginValue(startCol + j, startRow + i);\n if (oldValue !== changedValue) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue: beforeChangeValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = table.getCellValue(col, row);\n const startRange = table.getCellRange(startCol, startRow);\n const range = table.getCellRange(pasteColEnd, pasteRowEnd);\n\n //改变单元格的值后 聚合值做重新计算\n const aggregators = table.internalProps.layoutMap.getAggregatorsByCellRange(\n startRange.start.col,\n startRange.start.row,\n range.end.col,\n range.end.row\n );\n\n if (aggregators) {\n for (let i = 0; i < aggregators?.length; i++) {\n aggregators[i].recalculate();\n }\n\n if (cellUpdateType === 'normal') {\n const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(\n startRange.start.col,\n startRange.start.row,\n range.end.col,\n range.end.row\n );\n for (let i = 0; i < aggregatorCells.length; i++) {\n const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n }\n }\n }\n\n if (cellUpdateType === 'group') {\n (table.dataSource as CachedDataSource).updateRecordsForGroup([], []);\n }\n\n if (cellUpdateType === 'sort' || cellUpdateType === 'group') {\n (table.dataSource as any).sortedIndexMap.clear();\n sortRecords(table);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (table.widthMode === 'adaptive' || (table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth)) {\n if (table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n table.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!table.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = table.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, table.rowCount - 1, table, false);\n if (newWidth !== oldWidth) {\n table.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n table.scenegraph.recalculateRowHeights();\n } else if (table.isAutoRowHeight()) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (table.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = table.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, table.colCount - 1, table);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n table.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n table.scenegraph.updateNextFrame();\n}\n\ntype CellUpdateType = 'normal' | 'sort' | 'group';\nfunction getCellUpdateType(\n col: number,\n row: number,\n table: ListTable,\n oldCellUpdateType: CellUpdateType | undefined\n): CellUpdateType {\n if (oldCellUpdateType === 'group') {\n return oldCellUpdateType;\n }\n if (oldCellUpdateType === 'sort' && !table.options.groupBy) {\n return oldCellUpdateType;\n }\n let cellUpdateType: CellUpdateType = 'normal';\n if (table.options.groupBy) {\n cellUpdateType = 'group';\n } else if (!table.isHeader(col, row) && (table.dataSource as any).lastOrderField) {\n const field = table.getBodyField(col, row);\n if (field === (table.dataSource as any).lastOrderField) {\n cellUpdateType = 'sort';\n }\n }\n return cellUpdateType;\n}\n\nexport function sortRecords(table: ListTable) {\n let sortState = table.sortState;\n sortState = !sortState || Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState) {\n sortState = (sortState as SortState[]).map(item => {\n item.orderFn = table._getSortFuncFromHeaderOption(undefined, item.field) ?? defaultOrderFn;\n //const hd = table.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return item;\n });\n\n table.dataSource.sort(sortState);\n }\n}\n\n/**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\nexport function listTableAddRecord(record: any, recordIndex: number, table: ListTable) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).addRecordsForGroup?.([record], recordIndex);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.addRecordForSorted(record);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n if (recordIndex === undefined || recordIndex > table.dataSource.sourceLength) {\n recordIndex = table.dataSource.sourceLength;\n }\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n table.dataSource.addRecord(record, recordIndex);\n const oldRowCount = table.rowCount;\n table.refreshRowColCount();\n if (table.scenegraph.proxy.totalActualBodyRowCount === 0) {\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (recordIndex < endIndex) {\n //插入当前页或者前面的数据才需要更新 如果是插入的是当前页后面的数据不需要更新场景树\n if (recordIndex < endIndex - perPageCount) {\n // 如果是当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n //如果是插入当前页数据\n const rowNum = recordIndex - (endIndex - perPageCount) + headerCount;\n if (oldRowCount - headerCount === table.pagination.perPageCount) {\n //如果当页数据是满的 则更新插入的部分行\n const updateRows = [];\n for (let row = rowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n } else {\n //如果当页数据不是满的 则插入新数据\n const addRows = [];\n for (let row = rowNum; row < Math.min(newRowCount, rowNum + 1); row++) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n }\n } else {\n const addRows = [];\n for (let row = recordIndex + headerCount; row < recordIndex + headerCount + 1; row++) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n const updateRows = [];\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n}\n\n/**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\nexport function listTableAddRecords(records: any[], recordIndex: number, table: ListTable) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).addRecordsForGroup?.(records, recordIndex);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.addRecordsForSorted(records);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n if (recordIndex === undefined || recordIndex > table.dataSource.sourceLength) {\n recordIndex = table.dataSource.sourceLength;\n } else if (recordIndex < 0) {\n recordIndex = 0;\n }\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n table.dataSource.addRecords(records, recordIndex);\n const oldRowCount = table.transpose ? table.colCount : table.rowCount;\n table.refreshRowColCount();\n if (table.scenegraph.proxy.totalActualBodyRowCount === 0) {\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (recordIndex < endIndex) {\n //插入当前页或者前面的数据才需要更新 如果是插入的是当前页后面的数据不需要更新场景树\n if (recordIndex < endIndex - perPageCount) {\n // 如果是当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n //如果是插入当前页数据\n\n const rowNum = recordIndex - (endIndex - perPageCount) + headerCount;\n if (oldRowCount - headerCount === table.pagination.perPageCount) {\n //如果当页数据是满的 则更新插入的部分行\n const updateRows = [];\n for (let row = rowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n } else {\n //如果当页数据不是满的 则插入新数据\n const addRows = [];\n for (\n let row = rowNum;\n row < Math.min(newRowCount, rowNum + (Array.isArray(records) ? records.length : 1));\n row++\n ) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n }\n } else {\n const addRows = [];\n for (\n let row = recordIndex + headerCount;\n row < recordIndex + headerCount + (Array.isArray(records) ? records.length : 1);\n row++\n ) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n const updateRows = [];\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], addRows, updateRows)\n : table.scenegraph.updateRow([], addRows, updateRows);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n}\n\n/**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\nexport function listTableDeleteRecords(recordIndexs: number[], table: ListTable) {\n if (recordIndexs?.length > 0) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).deleteRecordsForGroup?.(recordIndexs);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.deleteRecordsForSorted(recordIndexs);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const deletedRecordIndexs = table.dataSource.deleteRecords(recordIndexs);\n if (deletedRecordIndexs.length === 0) {\n return;\n }\n const oldRowCount = table.transpose ? table.colCount : table.rowCount;\n table.refreshRowColCount();\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n const recordIndexsMinToMax = deletedRecordIndexs.sort((a, b) => a - b);\n const minRecordIndex = recordIndexsMinToMax[0];\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (minRecordIndex < endIndex) {\n //删除当前页或者前面的数据才需要更新 如果是删除的是当前页后面的数据不需要更新场景树\n if (minRecordIndex < endIndex - perPageCount) {\n // 如果删除包含当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n //如果是仅删除当前页数据\n const minRowNum =\n minRecordIndex -\n (endIndex - perPageCount) +\n (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) +\n topAggregationCount;\n //如果当页数据是满的 则更新影响的部分行\n const updateRows = [];\n const delRows = [];\n\n for (let row = minRowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n if (newRowCount < oldRowCount) {\n //如果如果删除后不满 需要有删除数据\n for (let row = newRowCount; row < oldRowCount; row++) {\n if (table.transpose) {\n delRows.push({ col: row, row: 0 });\n } else {\n delRows.push({ col: 0, row });\n }\n }\n }\n table.reactCustomLayout?.clearCache();\n table.transpose\n ? table.scenegraph.updateCol(delRows, [], updateRows)\n : table.scenegraph.updateRow(delRows, [], updateRows);\n table.reactCustomLayout?.updateAllCustomCell();\n }\n }\n } else {\n const delRows = [];\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n const rowNum = recordIndex + headerCount + topAggregationCount;\n if (table.transpose) {\n delRows.push({ col: rowNum, row: 0 });\n } else {\n delRows.push({ col: 0, row: rowNum });\n }\n }\n const updateRows = [];\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n table.reactCustomLayout?.clearCache();\n table.transpose\n ? table.scenegraph.updateCol(delRows, [], updateRows)\n : table.scenegraph.updateRow(delRows, [], updateRows);\n table.reactCustomLayout?.updateAllCustomCell();\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n }\n}\n\n/**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\nexport function listTableUpdateRecords(records: any[], recordIndexs: number[], table: ListTable) {\n if (recordIndexs?.length > 0) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).updateRecordsForGroup?.(records, recordIndexs);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.updateRecordsForSorted(records, recordIndexs);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const updateRecordIndexs = table.dataSource.updateRecords(records, recordIndexs);\n if (updateRecordIndexs.length === 0) {\n return;\n }\n const bodyRowIndex = updateRecordIndexs.map(index => table.getBodyRowIndexByRecordIndex(index));\n const recordIndexsMinToMax = bodyRowIndex.sort((a, b) => a - b);\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n const updateRows = [];\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n if (recordIndex < endIndex && recordIndex >= endIndex - perPageCount) {\n const rowNum =\n recordIndex -\n (endIndex - perPageCount) +\n (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) +\n topAggregationCount;\n updateRows.push(rowNum);\n }\n }\n if (updateRows.length >= 1) {\n const updateRowCells = [];\n for (let index = 0; index < updateRows.length; index++) {\n const updateRow = updateRows[index];\n if (table.transpose) {\n updateRowCells.push({ col: updateRow, row: 0 });\n } else {\n updateRowCells.push({ col: 0, row: updateRow });\n }\n }\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRowCells.push({ col: row, row: 0 });\n } else {\n updateRowCells.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRowCells)\n : table.scenegraph.updateRow([], [], updateRowCells);\n }\n } else {\n const updateRows = [];\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n const rowNum = recordIndex + headerCount + topAggregationCount;\n if (table.transpose) {\n updateRows.push({ col: rowNum, row: 0 });\n } else {\n updateRows.push({ col: 0, row: rowNum });\n }\n }\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n }\n}\n","import type { CellAddress } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\n/*\n * fix update row range logic:\n *\n * ADD:\n * 1. proxy not full => add\n * 2. proxy full\n * 2.1 row outside of proxy row range => skip\n * 2.2 row inside of proxy row range => update row to proxy rowEnd\n * REM:\n * 1. row before rowStart or after rowEnd => skip\n * 2. row after rowStart and before new rowEnd => update row to rowEnd\n * 3. rows after new rowEnd before old rowEnd => delete\n */\n\nexport function fixUpdateRowRange(\n diffPositions: {\n addCellPositions: CellAddress[];\n removeCellPositions: CellAddress[];\n },\n // updateCells: CellAddress[], // default [{col,row}]\n col: number,\n row: number,\n table: BaseTableAPI\n) {\n const updateCells = [{ col, row }];\n const addCells = [];\n const removeCells = [];\n\n const { addCellPositions, removeCellPositions } = diffPositions;\n const proxy = table.scenegraph.proxy;\n const { rowStart, rowLimit } = proxy;\n let { rowEnd } = proxy;\n let updateRow = Infinity;\n\n for (let i = 0; i < addCellPositions.length; i++) {\n const { row: cellRow } = addCellPositions[i];\n\n if (rowEnd - rowStart + 1 === rowLimit) {\n // current row cell is full\n if (cellRow >= rowStart && cellRow <= rowEnd) {\n updateRow = Math.min(updateRow, cellRow);\n }\n } else {\n // row cell is not full\n addCells.push({\n col,\n row: cellRow\n });\n rowEnd++;\n }\n }\n\n const newRowEnd = Math.min(rowStart + rowLimit, table.rowCount - 1 - table.bottomFrozenRowCount);\n const notFullRow = newRowEnd < rowStart + rowLimit;\n for (let i = 0; i < removeCellPositions.length; i++) {\n const { row: cellRow } = removeCellPositions[removeCellPositions.length - i - 1];\n if (cellRow < rowStart || cellRow > rowEnd) {\n // row before rowStart or after rowEnd => skip\n continue;\n } else if (cellRow > newRowEnd) {\n // rows after new rowEnd before old rowEnd => delete\n removeCells.push({\n col,\n row: cellRow\n });\n updateRow--;\n } else if (notFullRow) {\n // row range is not full\n removeCells.push({\n col,\n row: cellRow\n });\n updateRow--;\n } else {\n // row after rowStart and before new rowEnd => update row to rowEnd\n updateRow = Math.min(updateRow, cellRow);\n }\n }\n\n if (updateRow !== Infinity) {\n for (let i = updateRow; i <= rowEnd; i++) {\n updateCells.push({\n col,\n row: i\n });\n }\n }\n\n table.scenegraph.proxy.refreshRowCount();\n return {\n updateCells,\n addCells,\n removeCells\n };\n}\n","import type {\n AggregationType,\n CellAddress,\n CellRange,\n ColumnsDefine,\n DropDownMenuEventInfo,\n FieldData,\n FieldDef,\n FieldFormat,\n FieldKeyDef,\n FilterRules,\n IPagination,\n ListTableAPI,\n ListTableConstructorOptions,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from './ts-types';\nimport { HierarchyState } from './ts-types';\nimport { SimpleHeaderLayoutMap } from './layout';\nimport { isArray, isValid } from '@visactor/vutils';\nimport {\n _setDataSource,\n _setRecords,\n checkHasAggregationOnColumnDefine,\n generateAggregationForColumn\n} from './core/tableHelper';\nimport { BaseTable } from './core';\nimport type { BaseTableAPI, ListTableProtected } from './ts-types/base-table';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport * as editors from './edit/editors';\nimport { EditManager } from './edit/edit-manager';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { defaultOrderFn } from './tools/util';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ColumnData, ColumnDefine } from './ts-types/list-table/layout-map/api';\nimport { getCellRadioState, setCellRadioState } from './state/radio/radio';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { getGroupCheckboxState, setCellCheckboxState } from './state/checkbox/checkbox';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { getGroupByDataConfig } from './core/group-helper';\nimport type { CachedDataSource } from './data';\nimport {\n listTableAddRecord,\n listTableAddRecords,\n listTableChangeCellValue,\n listTableChangeCellValues,\n listTableDeleteRecords,\n listTableUpdateRecords,\n sortRecords\n} from './core/record-helper';\nimport type { IListTreeStickCellPlugin, ListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport { fixUpdateRowRange } from './tools/update-row';\n// import {\n// registerAxis,\n// registerEmptyTip,\n// registerLegend,\n// registerMenu,\n// registerTitle,\n// registerTooltip\n// } from './components';\n// import {\n// registerChartCell,\n// registerCheckboxCell,\n// registerImageCell,\n// registerProgressBarCell,\n// registerRadioCell,\n// registerSparkLineCell,\n// registerTextCell,\n// registerVideoCell\n// } from './scenegraph/group-creater/cell-type';\n\n// registerAxis();\n// registerEmptyTip();\n// registerLegend();\n// registerMenu();\n// registerTitle();\n// registerTooltip();\n\n// registerChartCell();\n// registerCheckboxCell();\n// registerImageCell();\n// registerProgressBarCell();\n// registerRadioCell();\n// registerSparkLineCell();\n// registerTextCell();\n// registerVideoCell();\n\nexport class ListTable extends BaseTable implements ListTableAPI {\n declare internalProps: ListTableProtected;\n /**\n * 用户配置的options 只读 勿直接修改\n */\n declare options: ListTableConstructorOptions;\n showHeader = true;\n listTreeStickCellPlugin?: ListTreeStickCellPlugin;\n\n // eslint-disable-next-line default-param-last\n constructor(options: ListTableConstructorOptions);\n constructor(container: HTMLElement, options: ListTableConstructorOptions);\n constructor(container?: HTMLElement | ListTableConstructorOptions, options?: ListTableConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as ListTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as ListTableConstructorOptions;\n if ((container as ListTableConstructorOptions).container) {\n container = (container as ListTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n const internalProps = this.internalProps;\n internalProps.frozenColDragHeaderMode = options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n internalProps.multipleSort = !!options.multipleSort;\n internalProps.dataConfig = options.groupBy ? getGroupByDataConfig(options.groupBy) : {}; //cloneDeep(options.dataConfig ?? {});\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children']) // children for react\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns?.forEach((colDefine, index) => {\n // //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n\n internalProps.enableTreeNodeMerge = options.enableTreeNodeMerge ?? isValid(options.groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n this.showHeader = options.showHeader ?? true;\n\n this.transpose = options.transpose ?? false;\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n if (options.dataSource) {\n _setDataSource(this, options.dataSource);\n } else if (options.records) {\n this.setRecords(options.records as any, { sortState: internalProps.sortState });\n } else {\n this.setRecords([]);\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n if (options.enableTreeStickCell) {\n const ListTreeStickCellPlugin = Factory.getComponent('listTreeStickCellPlugin') as IListTreeStickCellPlugin;\n this.listTreeStickCellPlugin = new ListTreeStickCellPlugin(this);\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n isListTable(): true {\n return true;\n }\n isPivotTable(): false {\n return false;\n }\n isPivotChart(): false {\n return false;\n }\n /**\n * Get the sort state.\n */\n get sortState(): SortState | SortState[] {\n return this.internalProps.sortState;\n }\n\n get records() {\n return this.dataSource?.records;\n }\n\n get recordsCount() {\n return this.dataSource.records.length;\n }\n // /**\n // * Gets the define of the header.\n // */\n // get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n // }\n // /**\n // * Sets the define of the column.\n // */\n // set columns(columns: ColumnsDefine) {\n // this.internalProps.columns = columns;\n // this.options.columns = columns;\n // }\n /**\n * Sets the define of the column.\n */\n updateColumns(columns: ColumnsDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.columns = cloneDeepSpec(columns, ['children']);\n generateAggregationForColumn(this);\n // columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // this.internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n this.options.columns = columns;\n this.internalProps.headerHelper.setTableColumnsEditor();\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n this.dataSource.updateColumns?.(this.internalProps.columns);\n if (this.records && checkHasAggregationOnColumnDefine(columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n return this.internalProps.layoutMap.columnTree.getCopiedTree(); //调整顺序后的columns\n }\n /**\n *@deprecated 请使用columns\n */\n get header(): ColumnsDefine {\n return this.internalProps.columns;\n }\n /**\n * @deprecated 请使用columns\n */\n set header(header: ColumnsDefine) {\n this.internalProps.columns = header;\n generateAggregationForColumn(this);\n this.options.header = header;\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n //需要异步等待其他事情都完成后再绘制\n this.renderAsync();\n }\n /**\n * Get the transpose.\n */\n get transpose(): boolean {\n return this.internalProps.transpose ?? false;\n }\n /**\n * Set the transpose from given\n */\n set transpose(transpose: boolean) {\n if (this.internalProps.transpose === transpose) {\n return;\n }\n this.internalProps.transpose = transpose;\n // this.options.transpose = transpose; // cause extr update in react\n if (this.internalProps.layoutMap) {\n //后面如果修改是否转置\n this.internalProps.layoutMap.transpose = transpose;\n this.refreshRowColCount();\n\n // 转置后为行布局,列宽只支持依据该列所有内容自适应宽度\n this._resetFrozenColCount();\n this.renderAsync();\n }\n }\n /** 获取单元格展示值 */\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n let value;\n if ((this.options as ListTableConstructorOptions).groupBy) {\n const record = table.getCellRawRecord(col, row);\n if (record?.vtableMerge) {\n return '';\n }\n const indexs = this.dataSource.currentIndexedData[row - this.columnHeaderLevelCount] as number[];\n value = indexs[indexs.length - 1] + 1;\n } else {\n value = row - this.columnHeaderLevelCount + 1;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this, value) : value;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n }\n }\n const { field, fieldFormat } = table.internalProps.layoutMap.getBody(col, row) as ColumnData;\n return table.getFieldData(fieldFormat || field, col, row);\n }\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.value();\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.value();\n }\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getFieldData(field, col, row);\n }\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getRawFieldData(field, col, row);\n }\n /** 获取当前单元格在body部分的展示索引 即(row / col)-headerLevelCount。注:ListTable特有接口 */\n getRecordShowIndexByCell(col: number, row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getRecordShowIndexByCell(col, row);\n }\n\n /** 获取当前单元格的数据是数据源中的第几条。\n * 如果是树形模式的表格,将返回数组,如[1,2] 数据源中第2条数据中children中的第3条\n * 注:ListTable特有接口 */\n getRecordIndexByCell(col: number, row: number): number | number[] {\n const { layoutMap } = this.internalProps;\n const recordShowIndex = layoutMap.getRecordShowIndexByCell(col, row);\n return this.dataSource.currentPagerIndexedData[recordShowIndex];\n }\n\n getTableIndexByRecordIndex(recordIndex: number | number[]) {\n if (this.transpose) {\n return this.dataSource.getTableIndex(recordIndex) + this.rowHeaderLevelCount;\n }\n return this.dataSource.getTableIndex(recordIndex) + this.columnHeaderLevelCount;\n }\n getTableIndexByField(field: FieldDef) {\n const colObj = this.internalProps.layoutMap.columnObjects.find((col: any) => col.field === field);\n if (!colObj) {\n return -1;\n }\n const layoutRange = this.internalProps.layoutMap.getBodyLayoutRangeById(colObj.id);\n if (this.transpose) {\n return layoutRange.start.row;\n }\n return layoutRange.start.col;\n }\n /**\n * 根据数据源中的index和field获取单元格行列号\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n if (this.transpose) {\n return { col: this.getTableIndexByRecordIndex(recordIndex), row: this.getTableIndexByField(field) };\n }\n return { col: this.getTableIndexByField(field), row: this.getTableIndexByRecordIndex(recordIndex) };\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑单元格的话 对应编辑后format前\n * @param col\n * @param row\n */\n getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.get(index);\n }\n return undefined;\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑的话 对应编辑前\n * @param col\n * @param row\n */\n getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.getRaw(index);\n }\n return undefined;\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.transpose) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if ((cellDefine as ColumnData)?.disableColumnResize) {\n return false;\n } else if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: ListTableConstructorOptions) {\n const internalProps = this.internalProps;\n super.updateOption(options);\n internalProps.frozenColDragHeaderMode = options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n // internalProps.dataConfig = {}; // cloneDeep(options.dataConfig ?? {});\n internalProps.dataConfig = options.groupBy ? getGroupByDataConfig(options.groupBy) : {}; //cloneDeep(options.dataConfig ?? {});\n //更新protectedSpace\n this.showHeader = options.showHeader ?? true;\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children'])\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n internalProps.enableTreeNodeMerge = options.enableTreeNodeMerge ?? isValid(options.groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n // 处理转置\n this.transpose = options.transpose ?? false;\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n if (options.dataSource) {\n _setDataSource(this, options.dataSource);\n } else if (options.records) {\n this.setRecords(options.records as any, {\n sortState: options.sortState\n });\n } else {\n this._resetFrozenColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination: IPagination): void {\n if (this.pagination) {\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n this.dataSource.updatePagination(this.pagination);\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.renderAsync();\n }\n }\n /** @private */\n refreshHeader(): void {\n const table = this;\n const internalProps = table.internalProps;\n const transpose = table.transpose;\n const showHeader = table.showHeader;\n const layoutMap = (internalProps.layoutMap = new SimpleHeaderLayoutMap(\n this,\n internalProps.columns ?? [],\n showHeader,\n table.options.hierarchyIndent\n ));\n\n layoutMap.transpose = transpose;\n\n if (!transpose) {\n //设置列宽 这里需要优化,考虑转置表格的情况 transpose,转置表格不需要设置colWidth TODO\n this.setMinMaxLimitWidth(true);\n }\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n\n const dataCount = table.internalProps.dataSource?.length ?? 0;\n layoutMap.recordsCount =\n dataCount + (dataCount > 0 ? layoutMap.hasAggregationOnTopCount + layoutMap.hasAggregationOnBottomCount : 0);\n\n if (table.transpose) {\n table.rowCount = layoutMap.rowCount ?? 0;\n table.colCount = layoutMap.colCount ?? 0;\n // table.frozenRowCount = 0;\n // table.frozenColCount = layoutMap.headerLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.headerLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n this.internalProps.frozenRowCount = this.options.frozenRowCount ?? 0;\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n } else {\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n // table.frozenColCount = table.options.frozenColCount ?? 0; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = this.options.frozenColCount ?? 0;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n // this.scenegraph.proxy?.refreshRowColCount();\n }\n /**\n * 获取records数据源中 字段对应的value 值是format之后的\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(\n table.transpose ? col - table.internalProps.layoutMap.leftRowSeriesNumberColumnCount : col,\n row\n );\n return table.internalProps.dataSource.getField(index, field, col, row, this);\n }\n /**\n * 获取records数据源中 字段对应的value 值是数据源中原始值\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getRawFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.getRawField(index, field, col, row, this);\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = this.internalProps.layoutMap.moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n if (!this.transpose) {\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.colWidthsLimit = {}; //需要先清空\n this.setMinMaxLimitWidth();\n }\n // // 清空相关缓存\n // const colStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const colEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let col = colStart; col <= colEnd; col++) {\n // this._clearColRangeWidthsMap(col);\n // }\n } else {\n // // 清空相关缓存\n // const rowStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const rowEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let row = rowStart; row <= rowEnd; row++) {\n // this._clearRowRangeHeightsMap(row);\n // }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n changeRecordOrder(sourceIndex: number, targetIndex: number) {\n if (this.transpose) {\n sourceIndex = this.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = this.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = this.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = this.getRecordShowIndexByCell(0, targetIndex);\n }\n this.dataSource.reorderRecord(sourceIndex, targetIndex);\n }\n /**\n * 方法适用于获取body中某条数据的行列号\n * @param findTargetRecord 通过数据对象或者指定函数来计算数据条目index\n * @param field\n * @returns\n */\n getCellAddress(findTargetRecord: any | ((record: any) => boolean), field: FieldDef): CellAddress {\n let targetRecordIndex: number;\n\n for (let i = 0; i < this.internalProps.records.length; i++) {\n const record = this.internalProps.records[i];\n if (typeof findTargetRecord === 'function') {\n if ((findTargetRecord)(record)) {\n targetRecordIndex = i;\n }\n } else {\n let isAllRight = true;\n for (const prop in findTargetRecord) {\n if (record[prop] !== findTargetRecord[prop]) {\n isAllRight = false;\n break;\n }\n }\n if (isAllRight) {\n targetRecordIndex = i;\n }\n }\n if (isValid(targetRecordIndex)) {\n break;\n }\n }\n const cellRange = this.getCellRangeByField(field, targetRecordIndex);\n if (cellRange) {\n return { row: cellRange.start.row, col: cellRange.start.col };\n }\n return undefined;\n }\n /**\n * 获取指定field及指定数据条index的单元格位置\n * @param {*} field\n * @param {number} index 要获取的第几条数据\n * @return {number} 返回单元格的坐标范围 TODO 转置表有问题bug\n */\n getCellRangeByField(field: FieldDef, index: number): CellRange | null {\n const { layoutMap } = this.internalProps;\n const colObj = layoutMap.columnObjects.find((col: any) => col.field === field);\n if (colObj) {\n const layoutRange = layoutMap.getBodyLayoutRangeById(colObj.id);\n let startRow;\n if (isValid(index)) {\n startRow = layoutMap.getRecordStartRowByRecordIndex(index);\n }\n if (this.transpose) {\n return {\n start: {\n row: layoutRange.start.row,\n col: isValid(startRow) ? startRow + layoutRange.start.col : undefined\n },\n end: {\n row: layoutRange.end.row,\n col: isValid(startRow) ? startRow + layoutRange.end.col : undefined\n }\n };\n }\n return {\n start: {\n col: layoutRange.start.col,\n row: isValid(startRow) ? startRow + layoutRange.start.row : undefined // layoutRange.start.row这里是0 所以无意义\n },\n end: {\n col: layoutRange.end.col,\n row: isValid(startRow) ? startRow + layoutRange.end.row : undefined // layoutRange.start.row这里是0 所以无意义\n }\n };\n }\n return null;\n }\n /**\n * 获取层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getHierarchyState(col: number, row: number) {\n if (!this.options.groupBy) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n if (!define.tree) {\n return HierarchyState.none;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n return this.dataSource.getHierarchyState(index);\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n const record = this.getCellOriginRecord(col, row);\n if (Array.isArray(record.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: record\n });\n }\n }\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n /** 刷新当前节点收起展开状态,如手动更改过 */\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n let notFillWidth = false;\n let notFillHeight = false;\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n const diffDataIndices = this.dataSource.toggleHierarchyState(\n index,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount,\n Math.max(\n this.scenegraph.proxy.rowEnd - this.columnHeaderLevelCount,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount + this.scenegraph.proxy.rowLimit - 1\n )\n );\n const diffPositions = this.internalProps.layoutMap.toggleHierarchyState(diffDataIndices);\n //影响行数\n this.refreshRowColCount();\n\n // for bottom frozen row height map\n for (let row = this.rowCount - this.bottomFrozenRowCount; row < this.rowCount; row++) {\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this._setRowHeight(row, newHeight);\n }\n\n this.clearCellStyleCache();\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // this.scenegraph.updateHierarchyIcon(col, row);// 添加了updateCells:[{ col, row }] 就不需要单独更新图标了(只更新图标针对有自定义元素的情况 会有更新不到问题)'\n // const updateCells = [{ col, row }];\n // // 如果需要移出的节点超过了当前加载部分最后一行 则转变成更新对应的行\n // if (\n // diffPositions.removeCellPositions?.length > 0 &&\n // diffPositions.removeCellPositions[diffPositions.removeCellPositions.length - 1].row >=\n // this.scenegraph.proxy.rowEnd\n // ) {\n // for (let i = 0; i <= diffPositions.removeCellPositions.length - 1; i++) {\n // if (diffPositions.removeCellPositions[i].row <= this.scenegraph.proxy.rowEnd) {\n // updateCells.push({\n // col: diffPositions.removeCellPositions[i].col,\n // row: diffPositions.removeCellPositions[i].row\n // });\n // }\n // }\n // diffPositions.removeCellPositions = [];\n\n // // reset proxy row config\n // this.scenegraph.proxy.refreshRowCount();\n // }\n\n const { updateCells, addCells, removeCells } = fixUpdateRowRange(diffPositions, col, row, this);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n // diffPositions.removeCellPositions,\n // diffPositions.addCellPositions,\n removeCells,\n addCells,\n updateCells,\n recalculateColWidths,\n true\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n\n _hasHierarchyTreeHeader() {\n return (this.options.columns ?? this.options.header)?.some((column, i) => column.tree);\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const result: DropDownMenuEventInfo = {\n field: this.getHeaderField(col, row),\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n event: undefined\n };\n return result;\n }\n _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): SortState['orderFn'] | undefined {\n if (!columns) {\n columns = this.internalProps.columns;\n }\n if (field && columns && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const header = columns[i];\n if (\n ((fieldKey && fieldKey === header.fieldKey) || (!fieldKey && header.field === field)) &&\n header.sort &&\n typeof header.sort === 'function'\n ) {\n return header.sort;\n } else if (header.columns) {\n const sort = this._getSortFuncFromHeaderOption(header.columns, field, fieldKey);\n if (sort) {\n return sort;\n }\n }\n }\n }\n return undefined;\n }\n /**\n * 更新排序状态\n * @param sortState 要设置的排序状态\n * @param executeSort 是否执行内部排序逻辑,设置false将只更新图标状态\n */\n updateSortState(sortState: SortState[] | SortState | null, executeSort: boolean = true) {\n if (!sortState) {\n // 解除排序状态\n if (this.internalProps.sortState) {\n if (Array.isArray(this.internalProps.sortState)) {\n for (let i = 0; i < (this.internalProps.sortState).length; i++) {\n sortState = this.internalProps.sortState?.[i];\n sortState && (sortState.order = 'normal');\n }\n } else {\n (this.internalProps.sortState).order = 'normal';\n sortState = this.internalProps.sortState;\n }\n }\n } else {\n this.internalProps.sortState = sortState;\n // 这里的sortState需要有field属性\n // this.stateManager.setSortState(sortState as SortState);\n }\n\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState.some((item: any) => item.field) && executeSort) {\n if (this.internalProps.layoutMap.headerObjects.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(this.internalProps.columns, item.field);\n const hd = this.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order,\n orderFn: sortFunc\n };\n })\n );\n\n // clear cell range cache\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.sortCell();\n }\n }\n if (sortState.length) {\n this.stateManager.updateSortState(sortState);\n }\n }\n updateFilterRules(filterRules: FilterRules) {\n this.scenegraph.clearCells();\n if (this.sortState) {\n this.dataSource.updateFilterRulesForSorted(filterRules);\n sortRecords(this);\n } else {\n this.dataSource.updateFilterRules(filterRules);\n }\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n this.scenegraph.createSceneGraph();\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getCheckboxState(field?: string | number) {\n if (this.stateManager.checkedState.size < this.rowCount - this.columnHeaderLevelCount) {\n this.stateManager.initLeftRecordsCheckState(this.records);\n }\n if (isValid(field)) {\n let stateArr = this.stateManager.checkedState.values() as any;\n if (this.options.groupBy) {\n stateArr = getGroupCheckboxState(this) as any;\n }\n return stateArr.map((state: any) => {\n return state[field];\n });\n }\n return new Array(...this.stateManager.checkedState.values());\n }\n /** 获取某个单元格checkbox的状态 */\n getCellCheckboxState(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = this.getCellType(col, row);\n if (isValid(field) && cellType === 'checkbox') {\n const dataIndex = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row)).toString();\n return this.stateManager.checkedState.get(dataIndex)?.[field as string | number];\n }\n return undefined;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getRadioState(field?: string | number) {\n if (isValid(field)) {\n return this.stateManager.radioState[field];\n }\n return this.stateManager.radioState;\n }\n /** 获取某个单元格checkbox的状态 */\n getCellRadioState(col: number, row: number): boolean | number {\n return getCellRadioState(col, row, this);\n }\n\n setCellCheckboxState(col: number, row: number, checked: boolean | 'indeterminate') {\n setCellCheckboxState(col, row, checked, this);\n }\n\n setCellRadioState(col: number, row: number, index?: number) {\n setCellRadioState(col, row, index, this);\n }\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param option 附近参数,其中的sortState为排序状态,如果设置null 将清除目前的排序状态\n */\n setRecords(records: Array, option?: { sortState?: SortState | SortState[] | null }): void {\n // 释放事件 及 对象\n this.internalProps.dataSource?.release();\n // 过滤掉dataSource的引用\n this.internalProps.releaseList = this.internalProps.releaseList?.filter((item: any) => !item.dataSourceObj);\n this.internalProps.dataSource = null;\n let sort: SortState | SortState[];\n if (Array.isArray(option) || (option as any)?.order) {\n //兼容之前第二个参数为sort的情况\n sort = option;\n } else if (option) {\n sort = option.sortState;\n } else if (option === null) {\n //兼容之前第二个参数为null来清除sort排序状态的逻辑\n sort = null;\n }\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n // 清空单元格内容\n this.scenegraph.clearCells();\n\n //重复逻辑抽取updateWidthHeight\n if (sort !== undefined) {\n if (sort === null || (!Array.isArray(sort) && isValid(sort.field)) || Array.isArray(sort)) {\n this.internalProps.sortState = this.internalProps.multipleSort ? (Array.isArray(sort) ? sort : [sort]) : sort;\n this.stateManager.setSortState((this as any).sortState as SortState);\n }\n }\n if (records) {\n _setRecords(this, records);\n if ((this as any).sortState) {\n const sortState = Array.isArray((this as any).sortState) ? (this as any).sortState : [(this as any).sortState];\n\n // 根据sort规则进行排序\n if (sortState.some((item: any) => item.order && item.field && item.order !== 'normal')) {\n // hd?.define?.sort && //如果这里也判断 那想要利用sortState来排序 但不显示排序图标就实现不了\n if (this.internalProps.layoutMap.headerObjectsIncludeHided.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(undefined, item.field);\n // 如果sort传入的信息不能生成正确的sortFunc,直接更新表格,避免首次加载无法正常显示内容\n const hd = this.internalProps.layoutMap.headerObjectsIncludeHided.find(\n (col: any) => col && col.field === item.field\n );\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n }\n }\n }\n this.refreshRowColCount();\n } else {\n _setRecords(this, records);\n }\n\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n this.render();\n if (isValid(oldHoverState.col) && isValid(oldHoverState.row) && oldHoverState.col >= 0 && oldHoverState.row >= 0) {\n setTimeout(() => {\n this.internalProps?.tooltipHandler.showTooltip(oldHoverState.col, oldHoverState.row);\n }, 0);\n }\n console.log('setRecords cost time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n }\n /**\n * 基本表格树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param records 设置到单元格其子节点的数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n setRecordChildren(records: any[], col: number, row: number, recalculateColWidths: boolean = true) {\n const record = this.getCellOriginRecord(col, row);\n record.children = records;\n const index = this.getRecordShowIndexByCell(col, row);\n this.dataSource.setRecord(record, index);\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n\n /**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n */\n changeCellValue(col: number, row: number, value: string | number | null, workOnEditableCell = false) {\n return listTableChangeCellValue(col, row, value, workOnEditableCell, this);\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: (string | number)[][], workOnEditableCell = false) {\n return listTableChangeCellValues(startCol, startRow, values, workOnEditableCell, this);\n }\n /**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecord(record: any, recordIndex?: number) {\n listTableAddRecord(record, recordIndex, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecords(records: any[], recordIndex?: number) {\n listTableAddRecords(records, recordIndex, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n deleteRecords(recordIndexs: number[]) {\n listTableDeleteRecords(recordIndexs, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n updateRecords(records: any[], recordIndexs: number[]) {\n listTableUpdateRecords(records, recordIndexs, this);\n }\n\n _hasCustomRenderOrLayout() {\n const { headerObjects } = this.internalProps.layoutMap;\n if (this.options.customRender) {\n return true;\n }\n\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (\n headerObject?.define?.customLayout ||\n headerObject?.define?.headerCustomLayout ||\n headerObject?.define?.customRender ||\n headerObject?.define?.headerCustomRender\n ) {\n return true;\n }\n }\n return false;\n }\n /**\n * 根据字段获取聚合值\n * @param field 字段名\n * 返回数组,包括列号和每一列的聚合值数组\n */\n getAggregateValuesByField(field: string | number): {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] {\n const columns = this.internalProps.layoutMap.getColumnByField(field);\n const results: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] = [];\n for (let i = 0; i < columns.length; i++) {\n const aggregator = columns[i].columnDefine.aggregator;\n delete columns[i].columnDefine;\n if (aggregator) {\n const columnAggregateValue: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n } = {\n col: columns[i].col,\n aggregateValue: null\n };\n columnAggregateValue.aggregateValue = [];\n if (Array.isArray(aggregator)) {\n for (let j = 0; j < aggregator.length; j++) {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator[j].type as AggregationType,\n value: aggregator[j].value()\n });\n }\n } else {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator.type as AggregationType,\n value: aggregator.value()\n });\n }\n\n results.push(columnAggregateValue);\n }\n }\n return results;\n }\n /** 是否为聚合值单元格 */\n isAggregation(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isAggregation(col, row);\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n if (!(this.options as ListTableConstructorOptions).groupBy) {\n return undefined;\n }\n const indexArr = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row));\n const groupLength = (this.dataSource as CachedDataSource).getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = undefined;\n }\n return indexArrLngth;\n }\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex(index: number | number[]): number {\n if (Array.isArray(index) && index.length === 1) {\n index = index[0];\n }\n return this.dataSource.getTableIndex(index);\n }\n}\n","import type { IOrientType } from '../../ts-types/component/util';\n\nexport function isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n","import { BandScale } from '@visactor/vscale';\nimport { isArray } from '@visactor/vutils';\n\nexport class BandAxisScale {\n _scale: BandScale;\n _scales: BandScale[];\n bandPadding?: number | number[];\n paddingInner?: number | number[];\n paddingOuter?: number | number[];\n\n constructor() {\n this._scale = new BandScale();\n this._scales = [this._scale];\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n calcScales(defalutBandInnerPadding: number, defalutBandOuterPadding: number) {\n const { bandPadding, paddingInner, paddingOuter } = this;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? defalutBandInnerPadding, true)\n .paddingOuter(_paddingOuter ?? _padding ?? defalutBandOuterPadding);\n }\n }\n\n dataToPosition(values: any[], cfg: any = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n\n return position + bandScale.bandwidth() * (cfg.bandPosition ?? 0.5);\n }\n\n updateScaleDomain(domain: (number | string)[]) {\n for (let i = 0; i < this._scales.length; i++) {\n this._scales[i].domain(domain);\n }\n // this.transformScaleDomain();\n }\n\n updateRange(newRange: [number, number]) {\n const [start, end] = this._scale.range();\n if (newRange[0] !== start || newRange[1] !== end) {\n this._scale.range(newRange);\n }\n }\n}\n","import type { DataSet, Parser, Transform } from '@visactor/vdataset';\n\nexport function registerDataSetInstanceTransform(dataSet: DataSet, name: string, transform: Transform) {\n if (!dataSet.getTransform(name)) {\n dataSet.registerTransform(name, transform);\n }\n}\n\nexport function registerDataSetInstanceParser(dataSet: DataSet, name: string, parse: Parser) {\n if (!dataSet.getParser(name)) {\n dataSet.registerParser(name, parse);\n }\n}\n","import type { BandScale, ContinuousScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport { continuousTicks } from './continuous';\nimport { linearDiscreteTicks } from './discrete/linear';\nimport { polarAngleAxisDiscreteTicks } from './discrete/polar-angle';\nimport type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from '../type';\nimport { convertDomainToTickData } from './util';\n\n// 总入口\nexport const ticks = (scale: IBaseScale, op: ITickDataOpt): ITickData[] => {\n if (isContinuous(scale.type)) {\n return continuousTicks(scale as ContinuousScale, op);\n } else if (isDiscrete(scale.type)) {\n if (op.coordinateType === 'cartesian') {\n return linearDiscreteTicks(scale as BandScale, op as ICartesianTickDataOpt);\n } else if (op.coordinateType === 'polar') {\n if (op.axisOrientType === 'angle') {\n return polarAngleAxisDiscreteTicks(scale as BandScale, op as IPolarTickDataOpt);\n }\n }\n }\n return convertDomainToTickData(scale.domain());\n};\n","import { LinearScale, LogScale, SymlogScale } from '@visactor/vscale';\nimport { isNil, isValid, maxInArray, minInArray } from '@visactor/vutils';\n\nconst e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\n\ntype IRange = { max?: number; min?: number };\nexport class LinearAxisScale {\n protected _extend: { [key: string]: number } = {};\n _scale: LinearScale | LogScale | SymlogScale;\n _scales: (LinearScale | LogScale | SymlogScale)[];\n nice: boolean;\n zero: boolean;\n domain: Required;\n expand?: IRange;\n forceTickCount?: number;\n tickCount?: number;\n niceType?: 'tickCountFirst' | 'accurateFirst';\n type?: 'linear' | 'time' | 'log' | 'symlog';\n\n constructor(type?: 'linear' | 'time' | 'log' | 'symlog') {\n this.type = type ?? 'linear';\n if (type === 'log') {\n this._scale = new LogScale();\n } else if (type === 'symlog') {\n this._scale = new SymlogScale();\n } else {\n this._scale = new LinearScale();\n }\n this._scales = [this._scale];\n }\n\n setExtraAttrFromSpec(\n nice: boolean,\n zero: boolean,\n range: Required,\n expand?: IRange,\n base?: number,\n constant?: number\n ) {\n // this.nice = nice;\n this.nice = false; // nice deal in getAxisDomainRangeAndLabels()\n this.zero = zero;\n // this.domain = range;\n if (this.zero) {\n range.min = Math.min(range.min, 0);\n range.max = Math.max(range.max, 0);\n }\n this.domain = range;\n this.expand = expand;\n\n if (this.type === 'log') {\n (this._scale as LogScale).base(base ?? 10);\n } else if (this.type === 'symlog') {\n (this._scale as SymlogScale).constant(constant ?? 10);\n }\n }\n\n transformScaleDomain() {\n if (this.type === 'symlog' || this.type === 'log') {\n // do nothing\n } else {\n this.setScaleNice();\n }\n }\n\n setScaleNice() {\n if (this.type === 'log') {\n this.setLogScaleNice();\n } else {\n this.setLinearScaleNice();\n }\n }\n\n setLogScaleNice() {\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.nice();\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.niceMax();\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this.nice && this._scale.niceMin();\n }\n }\n\n setLinearScaleNice() {\n let tickCount = this.forceTickCount ?? this.tickCount ?? 10;\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (this.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.nice(tickCount);\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.niceMax(tickCount);\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this.nice && this._scale.niceMin(tickCount);\n } else {\n this.nice && this._scale.nice(tickCount);\n }\n }\n dataToPosition(values: any[]): number {\n return this.valueToPosition(values[0]);\n }\n\n valueToPosition(value: any): number {\n return this._scale.scale(value);\n }\n\n computeLinearDomain(data: { min: number; max: number }[]): number[] {\n const domain: number[] = [];\n data.forEach(d => {\n const { min, max } = d;\n domain[0] = domain[0] === undefined ? min : Math.min(domain[0] as number, min as number);\n domain[1] = domain[1] === undefined ? max : Math.max(domain[1] as number, max as number);\n });\n this.expandDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n return domain;\n }\n\n protected expandDomain(domain: number[]): void {\n if (!this.expand) {\n return;\n }\n const domainMin = domain[0];\n const domainMax = domain[domain.length - 1];\n if (isValid(this.expand.min)) {\n domain[0] = domainMin - (domainMax - domainMin) * this.expand.min;\n }\n if (isValid(this.expand.max)) {\n domain[domain.length - 1] = domainMax + (domainMax - domainMin) * this.expand.max;\n }\n }\n\n protected niceDomain(domain: number[]) {\n if (isValid(domain[0]) || isValid(domain[1]) || this.type !== 'linear') {\n // 如果用户设置了 min 或者 max 则按照用户设置的为准\n // 如果是非 linear 类型也不处理\n return domain;\n }\n if (Math.abs(minInArray(domain) - maxInArray(domain)) <= 1e-12) {\n let num: number = domain[0];\n const flag = num >= 0 ? 1 : -1;\n num = Math.abs(num);\n if (num < 1) {\n domain[0] = 0;\n domain[1] = 1; // 在[0, 1) 区间变成[0, 1]\n } else {\n let step = num / 5; // 默认5个ticks\n const power = Math.floor(Math.log(step) / Math.LN10);\n const err = step / Math.pow(10, power);\n step = (err >= e10 ? 10 : err >= e5 ? 5 : err >= e2 ? 2 : 1) * Math.pow(10, power);\n\n domain[0] = 0;\n domain[1] = step * 10;\n }\n if (flag < 0) {\n domain.reverse();\n domain[0] *= -1;\n domain[1] *= -1;\n }\n }\n return domain;\n }\n\n protected niceMinMax() {\n if (this.nice) {\n let tickCount = this.forceTickCount ?? this.tickCount ?? 10;\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (this.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this._scale.nice(tickCount);\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this._scale.niceMax(tickCount);\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this._scale.niceMin(tickCount);\n } else {\n this._scale.nice(tickCount);\n }\n }\n }\n\n protected includeZero(domain: number[]): void {\n if (this.zero) {\n domain[0] = Math.min(domain[0], 0);\n domain[domain.length - 1] = Math.max(domain[domain.length - 1], 0);\n }\n }\n\n // 用户其他模块扩充轴scale的区间\n setExtendDomain(key: string, value: number | undefined) {\n if (value === undefined) {\n delete this._extend[key];\n return;\n }\n this._extend[key] = value;\n const domain = this._scale.domain();\n this.extendDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n this.niceDomain(domain);\n this._scale.domain(domain, this.nice);\n this.niceMinMax();\n\n // this.event.emit(ChartEvent.scaleUpdate, { model: this as any });\n }\n\n protected extendDomain(domain: number[]) {\n let temp;\n const domainLast = domain.length - 1;\n const reverse = domain[0] - domain[domainLast] > 0;\n const min = reverse ? domainLast : 0;\n const max = reverse ? 0 : domainLast;\n for (const key in this._extend) {\n temp = this._extend[key];\n temp > domain[max] && (domain[max] = temp);\n temp < domain[min] && (domain[min] = temp);\n }\n }\n\n protected setDomainMinMax(domain: number[]): void {\n if (!this.domain) {\n return;\n }\n const { min, max } = this.domain;\n isValid(min) && (domain[0] = min);\n isValid(max) && (domain[1] = max);\n }\n\n setZero(zero: boolean) {\n if (this.zero !== zero) {\n this.zero = zero;\n this.updateScaleDomain();\n }\n }\n /**\n * @override\n * TODO event.emit是否可以考虑用decorator\n */\n updateScaleDomain() {\n const domain: number[] = this.computeDomain([this.domain]) as number[];\n this.updateScaleDomainByModel(domain);\n }\n\n computeDomain(data: { min: number; max: number }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n /**\n * TODO event.emit是否可以考虑用decorator\n * 数据逻辑外,模块的设置更新对scale-domain的修改操作\n */\n protected updateScaleDomainByModel(domain?: number[]) {\n domain = domain ?? this._scale.domain();\n // 其他模块的设置 domain\n this.extendDomain(domain);\n this.includeZero(domain);\n // 用户 spec 的 min-max\n this.setDomainMinMax(domain);\n // nice 优先级最高\n this.niceDomain(domain);\n this._scale.domain(domain, this.nice);\n // 设置scale的nice-min-max\n this.niceMinMax();\n\n // this.event.emit(ChartEvent.scaleUpdate, { model: this as any });\n }\n\n updateRange(newRange: [number, number]) {\n const [start, end] = this._scale.range();\n if (newRange[0] !== start || newRange[1] !== end) {\n this._scale.range(newRange);\n }\n }\n}\n","import type { IGroup, INode, IText } from './../../vrender';\nimport type { LineAxis } from '@visactor/vrender-components';\nimport type { CartesianAxis } from './axis';\nimport { isXAxis } from '../util/orient';\nimport { isEmpty, last as peek } from '@visactor/vutils';\n\nexport function doOverlap(axisComponent: LineAxis, axis: CartesianAxis) {\n const layer0LabelsContainer = axisComponent.find(\n (node: INode) => node.name === 'axis-label-container-layer-0',\n true\n ) as IGroup;\n const layer1LabelsContainer = axisComponent.find(\n (node: INode) => node.name === 'axis-label-container-layer-1',\n true\n ) as IGroup;\n overlap(layer0LabelsContainer ? (layer0LabelsContainer.getChildren() as IText[]) : [], axis);\n overlap(layer1LabelsContainer ? (layer1LabelsContainer.getChildren() as IText[]) : [], axis);\n}\n\nfunction labelFlush(axisLabels: IText[], axis: CartesianAxis) {\n const { width, height } = axis.getLayoutRect();\n const isX = isXAxis(axis.orient);\n const isInverse = (axis.option as any).inverse === true;\n const first = axisLabels[0];\n const last = peek(axisLabels);\n\n if (isX) {\n if (isInverse) {\n const start = width;\n const end = 0;\n const startBound = first.AABBBounds.x2;\n const endBound = last.AABBBounds.x1;\n\n if (startBound > start) {\n first.setAttributes({\n x: start,\n textAlign: 'right'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n x: end,\n textAlign: 'left'\n });\n }\n } else {\n const start = 0;\n const end = width;\n const startBound = first.AABBBounds.x1;\n const endBound = last.AABBBounds.x2;\n if (startBound < start) {\n first.setAttributes({\n x: start,\n textAlign: 'left'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n x: end,\n textAlign: 'right'\n });\n }\n }\n } else {\n if (isInverse) {\n const startBound = first.AABBBounds.y1;\n const endBound = last.AABBBounds.y2;\n const start = 0;\n const end = height;\n\n if (startBound < start) {\n first.setAttributes({\n y: start,\n textBaseline: 'top'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n y: end,\n textBaseline: 'bottom'\n });\n }\n } else {\n const start = height;\n const end = 0;\n const startBound = first.AABBBounds.y2;\n const endBound = last.AABBBounds.y1;\n\n if (startBound > start) {\n first.setAttributes({\n y: start,\n textBaseline: 'bottom'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n y: end,\n textBaseline: 'top'\n });\n }\n }\n }\n}\n\nfunction overlap(axisLabels: IText[], axis: CartesianAxis) {\n const spec = axis.option;\n if (!isEmpty(axisLabels)) {\n // 首尾标签向内偏移\n if (spec?.label?.flush) {\n labelFlush(axisLabels, axis);\n }\n }\n}\n","import { degreeToRadian, isNil, isValidNumber, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\nimport { LineAxis, type LineAxisAttributes } from '@visactor/vrender-components';\nimport { getAxisAttributes, getCommonAxis } from './get-axis-attributes';\nimport { isXAxis, isYAxis } from '../util/orient';\nimport type { IOrientType } from '../../ts-types/component/util';\nimport { BandAxisScale } from './band-scale';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../util/register';\nimport type { Parser } from '@visactor/vdataset';\nimport { DataSet, DataView } from '@visactor/vdataset';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { ticks } from './../../vrender';\nimport { LinearAxisScale } from './linear-scale';\nimport { doOverlap } from './label-overlap';\nimport type { TableTheme } from '../../themes/theme';\n\nconst DEFAULT_BAND_INNER_PADDING = 0.1;\nconst DEFAULT_BAND_OUTER_PADDING = 0.3;\nconst scaleParser: Parser = (scale: IBaseScale) => {\n return scale;\n};\n\nexport interface ICartesianAxis {\n new (\n option: ICellAxisOption,\n width: number,\n height: number,\n padding: [number, number, number, number],\n table: BaseTableAPI\n ): CartesianAxis;\n}\n\nexport class CartesianAxis {\n width: number;\n height: number;\n x: number = 0;\n y: number = 0;\n table: BaseTableAPI;\n option: ICellAxisOption;\n orient: IOrientType;\n visible: boolean;\n type: 'linear' | 'band' | 'point' | 'time' | 'log' | 'symlog';\n inverse: boolean;\n data?: any[];\n tickData: DataView;\n scale: BandAxisScale | LinearAxisScale;\n component: LineAxis;\n padding: [number, number, number, number];\n\n constructor(\n option: ICellAxisOption,\n width: number,\n height: number,\n padding: [number, number, number, number],\n table: BaseTableAPI\n ) {\n this.padding = padding;\n this.table = table;\n this.orient = option.orient ?? 'left';\n this.type = option.type ?? 'band';\n this.option = merge(\n {},\n // commonAxis,\n getCommonAxis(option.__vtableChartTheme),\n getTableAxisTheme(this.orient, table.theme),\n getChartSpecAxisTheme(this.orient, this.type, option.__vtableChartTheme),\n option\n );\n\n if (this.orient === 'left' || this.orient === 'right') {\n // const innerOffsetTop = this.option.innerOffset?.top ?? 0;\n // const innerOffsetBottom = this.option.innerOffset?.bottom ?? 0;\n const innerOffsetTop = 0;\n const innerOffsetBottom = 0;\n this.width = width;\n this.height = height - padding[0] - padding[2] - innerOffsetBottom;\n this.y = padding[0] + innerOffsetTop;\n } else if (this.orient === 'top' || this.orient === 'bottom') {\n // const innerOffsetLeft = this.option.innerOffset?.left ?? 0;\n // const innerOffsetRight = this.option.innerOffset?.right ?? 0;\n const innerOffsetLeft = 0;\n const innerOffsetRight = 0;\n this.width = width - padding[1] - padding[3] - innerOffsetRight;\n this.height = height;\n this.x = padding[3] + innerOffsetLeft;\n }\n\n this.visible = option.visible ?? true;\n this.inverse = 'inverse' in option ? !!option.inverse : false;\n if (option.type === 'band') {\n this.data = option.domain;\n }\n\n this.initScale();\n this.initData();\n this.createComponent();\n this.initEvent();\n }\n\n initScale() {\n const option = this.option as any;\n if (this.type === 'band' || this.type === 'point') {\n this.scale = new BandAxisScale();\n this.scale.bandPadding = option.bandPadding;\n this.scale.paddingInner = option.paddingInner;\n this.scale.paddingOuter = option.paddingOuter;\n this.scale.calcScales(DEFAULT_BAND_INNER_PADDING, DEFAULT_BAND_OUTER_PADDING); // 0.1 0.3\n this.scale.updateScaleDomain(this.data);\n this.updateScaleRange();\n } else if (this.type === 'linear' || this.type === 'time' || this.type === 'log' || this.type === 'symlog') {\n this.scale = new LinearAxisScale(this.type);\n this.scale.setExtraAttrFromSpec(\n option.nice,\n option.zero,\n option.range,\n option.expand,\n option.base,\n option.constant\n );\n this.scale.transformScaleDomain();\n this.scale.updateScaleDomain();\n this.updateScaleRange();\n }\n }\n\n initData() {\n if (!this.table._vDataSet) {\n this.table._vDataSet = new DataSet();\n }\n\n registerDataSetInstanceParser(this.table._vDataSet, 'scale', scaleParser);\n registerDataSetInstanceTransform(this.table._vDataSet, 'ticks', ticks);\n\n const label = this.option.label || {};\n const tick = this.option.tick || {};\n\n const tickData = new DataView(this.table._vDataSet)\n .parse(this.scale._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: 'ticks',\n options: {\n sampling: this.option.sampling !== false, // default do sampling\n tickCount: tick.tickCount,\n forceTickCount: tick.forceTickCount,\n tickStep: tick.tickStep,\n tickMode: tick.tickMode,\n noDecimals: tick.noDecimals,\n\n axisOrientType: this.orient,\n coordinateType: 'cartesian',\n\n labelStyle: label.style,\n labelFormatter: label.formatMethod,\n labelGap: label.minGap,\n\n labelLastVisible: label.lastVisible,\n labelFlush: label.flush\n }\n },\n false\n );\n this.tickData = tickData;\n\n this.computeData();\n }\n\n computeData(): void {\n this.tickData.reRunAllTransform();\n }\n\n initEvent() {\n // to be added\n }\n\n createComponent() {\n const axisStylrAttrs = getAxisAttributes(this.option);\n const attrs = this.getUpdateAttribute();\n attrs.verticalFactor = this.orient === 'top' || this.orient === 'right' ? -1 : 1;\n this.component = new LineAxis(\n merge(\n {\n disableTriggerEvent: this.table.options.disableInteraction\n },\n axisStylrAttrs,\n attrs\n )\n );\n this.component.setAttributes(this.setLayoutStartPosition({ x: this.x, y: this.y }));\n (this.component as any).originAxis = this;\n }\n\n resize(width: number, height: number) {\n this.width = width - (this.orient === 'top' || this.orient === 'bottom' ? this.padding[1] + this.padding[3] : 0);\n this.height = height - (this.orient === 'left' || this.orient === 'right' ? this.padding[2] + this.padding[0] : 0);\n this.updateScaleRange();\n this.computeData();\n const axisStylrAttrs = getAxisAttributes(this.option);\n const attrs = this.getUpdateAttribute();\n attrs.verticalFactor = this.orient === 'top' || this.orient === 'right' ? -1 : 1;\n this.component.setAttributes(merge({}, axisStylrAttrs, attrs));\n this.component.setAttributes(this.setLayoutStartPosition({ x: this.x, y: this.y }));\n this.overlap();\n }\n\n overlap() {\n doOverlap(this.component, this);\n }\n\n getLayoutRect() {\n // const padding = getQuadProps(this.table.theme.bodyStyle.padding as number);\n return {\n // width: this.width - (this.orient === 'top' || this.orient === 'bottom' ? padding[3] + padding[1] : 0),\n // height: this.height - (this.orient === 'left' || this.orient === 'right' ? padding[0] + padding[2] : 0)\n width: this.width,\n height: this.height\n };\n }\n\n getUpdateAttribute() {\n // 获取更新的坐标轴属性\n const regionHeight = this.table.tableNoFrameHeight;\n const regionWidth = this.table.tableNoFrameWidth;\n\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this.orient);\n const isY = isYAxis(this.orient);\n let end = { x: 0, y: 0 };\n let gridLength = 0;\n let axisLength = 0;\n if (isX) {\n end = { x: width, y: 0 };\n gridLength = regionHeight;\n axisLength = width;\n } else if (isY) {\n end = { x: 0, y: height };\n gridLength = regionWidth;\n axisLength = height;\n }\n const size = this.orient === 'top' || this.orient === 'bottom' ? height : width;\n const attrs: LineAxisAttributes = {\n // start: { x: this.x, y: this.y },\n // x: this.x,\n // y: this.y,\n start: { x: 0, y: 0 },\n end,\n // grid: {\n // type: 'line',\n // length: gridLength,\n // visible: this.option.grid.visible\n // },\n title: {\n text: this.option.title.text as string,\n maxWidth: this._getTitleLimit(isX)\n },\n items: this.getLabelItems(axisLength),\n verticalLimitSize: size,\n verticalMinSize: size\n };\n return attrs;\n }\n\n getLabelItems(length: number) {\n return [\n this.tickData.latestData\n .map((obj: any) => {\n return {\n id: obj.value,\n label: obj.value,\n value: length === 0 ? 0 : this.scale.dataToPosition([obj.value]) / length,\n rawValue: obj.value\n };\n })\n .filter((entry: any) => entry.value >= 0 && entry.value <= 1)\n ];\n }\n\n updateScaleRange() {\n const right = this.option.innerOffset?.right ?? 0;\n const left = this.option.innerOffset?.left ?? 0;\n const top = this.option.innerOffset?.top ?? 0;\n const bottom = this.option.innerOffset?.bottom ?? 0;\n\n const { width, height } = this.getLayoutRect();\n const inverse = (this.option as any).inverse || false;\n let newRange: [number, number] = [0, 0];\n if (isXAxis(this.orient)) {\n if (isValidNumber(width)) {\n // newRange = inverse ? [width, 0] : [0, width];\n newRange = inverse ? [width - right, left] : [left, width - right];\n }\n } else {\n if (isValidNumber(height)) {\n // newRange = inverse ? [0, height] : [height, 0];\n newRange = inverse ? [top, height - bottom] : [height - bottom, top];\n }\n }\n\n this.scale.updateRange(newRange);\n }\n\n setLayoutStartPosition(pos: any) {\n let { x, y } = pos;\n\n if (isValidNumber(x)) {\n x += Number(this.orient === 'left') * this.getLayoutRect().width;\n }\n if (isValidNumber(y)) {\n y += Number(this.orient === 'top') * this.getLayoutRect().height;\n }\n\n return { x, y };\n // super.setLayoutStartPosition({ x, y });\n }\n\n private _getTitleLimit(isX: boolean) {\n if (this.option.title.visible && isNil(this.option.title.style?.maxLineWidth)) {\n let angle = this.option.title.style?.angle || 0;\n if (this.option.title?.autoRotate && isNil(this.option.title.angle)) {\n angle = this.option.orient === 'left' ? -90 : 90;\n }\n if (isX) {\n const width = this.getLayoutRect().width;\n const cosValue = Math.abs(Math.cos(degreeToRadian(angle)));\n // VRender 接收到的limit是考虑角度计算后的宽度\n // TODO:还需要考虑angle后,高度是否太高,综合计算一个limit,比如高度不能超过图表整体高度的1/4\n return cosValue < 1e-6 ? Infinity : width / cosValue;\n }\n const height = this.getLayoutRect().height;\n const sinValue = Math.abs(Math.sin(degreeToRadian(angle)));\n\n // TODO:还需要考虑angle后,宽度是否太宽,综合计算一个limit,比如宽度度不能超过图表整体宽度的1/4\n return sinValue < 1e-6 ? Infinity : height / sinValue;\n }\n\n return null;\n }\n\n getScale() {\n return this.scale._scale;\n }\n\n getDomainSpec() {\n return (this.scale as LinearAxisScale).domain;\n }\n}\n\nfunction getTableAxisTheme(orient: IOrientType, theme: TableTheme) {\n let directionStyle;\n if (orient === 'left') {\n directionStyle = theme.axisStyle.leftAxisStyle;\n } else if (orient === 'right') {\n directionStyle = theme.axisStyle.rightAxisStyle;\n } else if (orient === 'top') {\n directionStyle = theme.axisStyle.topAxisStyle;\n } else if (orient === 'bottom') {\n directionStyle = theme.axisStyle.bottomAxisStyle;\n }\n return merge({}, theme.axisStyle.defaultAxisStyle, directionStyle);\n}\n\nfunction getChartSpecAxisTheme(\n orient: IOrientType,\n type: 'linear' | 'band' | 'point' | 'time' | 'log' | 'symlog',\n chartSpecTheme?: any\n) {\n if (!chartSpecTheme) {\n return {};\n }\n const axisTheme = chartSpecTheme.axis;\n let axisTypeTheme;\n if (type === 'linear' || type === 'log' || type === 'symlog') {\n axisTypeTheme = chartSpecTheme.axisLinear;\n } else if (type === 'band') {\n axisTypeTheme = chartSpecTheme.axisBand;\n }\n\n let axisOrientTheme;\n if (orient === 'top' || orient === 'bottom') {\n axisOrientTheme = chartSpecTheme.axisX;\n } else if (orient === 'left' || orient === 'right') {\n axisOrientTheme = chartSpecTheme.axisY;\n }\n return merge({}, axisTheme, axisTypeTheme, axisOrientTheme);\n}\n","import { isArray, isFunction, isString, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE, commonAxis } from './get-axis-attributes';\n\nexport type ComputeAxisComponentWidth = (config: ICellAxisOption, table: BaseTableAPI) => number;\nexport type ComputeAxisComponentHeight = (config: ICellAxisOption, table: BaseTableAPI) => number;\n/**\n * @description: compuational vertical axis width\n * @param {ICellAxisOption} config\n * @return {*}\n */\nexport function computeAxisComponentWidth(config: ICellAxisOption, table: BaseTableAPI) {\n const attribute = merge({}, commonAxis, config);\n // tick\n let tickWidth = 0;\n if (attribute.tick.visible !== false) {\n tickWidth = attribute.tick.width ?? 4;\n }\n\n // text\n let labelWidth = 0;\n if (attribute.label.visible) {\n if (attribute.type === 'band') {\n const domain = attribute.domain;\n domain.forEach((text: string) => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angel =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelWidth = Math.max(labelWidth, getSizeAfterResize(Math.min(width, widthLimit), height, angel).width);\n });\n } else {\n let ticks: string[];\n if (config.sync?.tickAlign && isFunction(config.tick?.tickMode)) {\n ticks = config.tick.tickMode();\n } else if (isArray((config as any).__ticksForVTable)) {\n ticks = (config as any).__ticksForVTable;\n } else {\n const range = attribute.range;\n const minNumber = Math.abs(range.min) > 1 ? Math.round(range.min) : range.min;\n const maxNumber = Math.abs(range.max) > 1 ? Math.round(range.max) : range.max;\n // abs>1取整保留两位有效数字,abs<1保留一位有效数字\n const minString = formatDecimal(minNumber);\n const maxString = formatDecimal(maxNumber);\n // 这里测量的是预估的最大最小range,与实际现实的label可能不同\n ticks = [minString, maxString];\n }\n ticks.forEach(text => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelWidth = Math.max(labelWidth, getSizeAfterResize(Math.min(width, widthLimit), height, angle).width);\n });\n }\n labelWidth += attribute.label.space ?? 4;\n }\n\n // title\n let titleWidth = 0;\n // align with vrender-component, use isString()\n if (attribute.title.visible && isString(attribute.title.text)) {\n const { width, height } = table.measureText(attribute.title.text, {\n fontSize: attribute.title?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.title?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.title?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const size = getSizeAfterResize(Math.min(width, widthLimit), height, attribute.title?.style?.angle);\n if ((config.orient === 'left' || config.orient === 'right') && attribute.title.autoRotate) {\n titleWidth = size.height;\n } else {\n titleWidth = size.width;\n }\n titleWidth += attribute.title.space ?? 4;\n }\n\n return tickWidth + labelWidth + titleWidth + 1; // 2 is buffer\n}\n\n/**\n * @description: compuational horizontal axis height\n * @param {ICellAxisOption} config\n * @return {*}\n */\nexport function computeAxisComponentHeight(config: ICellAxisOption, table: BaseTableAPI) {\n const attribute = merge({}, commonAxis, config);\n // tick\n let tickHeight = 0;\n if (attribute.tick.visible !== false) {\n tickHeight = attribute.tick.width ?? 4;\n }\n\n // text\n let labelHeight = 0;\n if (attribute.label.visible) {\n if (attribute.type === 'band') {\n const domain = attribute.domain;\n domain.forEach((text: string) => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelHeight = Math.max(labelHeight, getSizeAfterResize(Math.min(width, widthLimit), height, angle).height);\n });\n } else {\n let ticks: string[];\n if (config.sync?.tickAlign && isFunction(config.tick?.tickMode)) {\n ticks = config.tick.tickMode();\n } else if (isArray((config as any).__ticksForVTable)) {\n ticks = (config as any).__ticksForVTable;\n } else {\n const range = attribute.range;\n const minNumber = Math.abs(range.min) > 1 ? Math.round(range.min) : range.min;\n const maxNumber = Math.abs(range.max) > 1 ? Math.round(range.max) : range.max;\n // abs>1取整保留两位有效数字,abs<1保留一位有效数字\n const minString = formatDecimal(minNumber);\n const maxString = formatDecimal(maxNumber);\n // 这里测量的是预估的最大最小range,与实际现实的label可能不同\n ticks = [minString, maxString];\n }\n ticks.forEach(text => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelHeight = Math.max(labelHeight, getSizeAfterResize(Math.min(width, widthLimit), height, angle).height);\n });\n }\n labelHeight += attribute.label.space ?? 4;\n }\n\n // title\n let titleHeight = 0;\n if (attribute.title.visible && attribute.title.text) {\n const { width, height } = table.measureText(attribute.title.text, {\n fontSize: attribute.title?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.title?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.title?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const size = getSizeAfterResize(Math.min(width, widthLimit), height, attribute.title?.style?.angle);\n if ((config.orient === 'bottom' || config.orient === 'top') && attribute.title.autoRotate) {\n titleHeight = size.width;\n } else {\n titleHeight = size.height;\n }\n titleHeight += attribute.title.space ?? 4;\n }\n\n return tickHeight + labelHeight + titleHeight + 1; // 2 is buffer\n}\n\n// 保留一位有效数字\nfunction formatDecimal(number: number) {\n if (typeof number !== 'number') {\n number = Number(number);\n }\n\n return Number(number.toPrecision(1)).toString(); // 避免科学计数法\n}\n\n// 计算旋转后的size\nfunction getSizeAfterResize(width: number, height: number, angle = 0) {\n const theta = (angle * Math.PI) / 180; // 角度转为弧度\n const p1 = { x: -width / 2, y: -height / 2 };\n const p2 = { x: width / 2, y: -height / 2 };\n const p3 = { x: width / 2, y: height / 2 };\n const p4 = { x: -width / 2, y: height / 2 };\n\n const p1Rotated = {\n x: p1.x * Math.cos(theta) - p1.y * Math.sin(theta),\n y: p1.x * Math.sin(theta) + p1.y * Math.cos(theta)\n };\n const p2Rotated = {\n x: p2.x * Math.cos(theta) - p2.y * Math.sin(theta),\n y: p2.x * Math.sin(theta) + p2.y * Math.cos(theta)\n };\n const p3Rotated = {\n x: p3.x * Math.cos(theta) - p3.y * Math.sin(theta),\n y: p3.x * Math.sin(theta) + p3.y * Math.cos(theta)\n };\n const p4Rotated = {\n x: p4.x * Math.cos(theta) - p4.y * Math.sin(theta),\n y: p4.x * Math.sin(theta) + p4.y * Math.cos(theta)\n };\n\n const bounds = {\n minX: Math.min(p1Rotated.x, p2Rotated.x, p3Rotated.x, p4Rotated.x),\n maxX: Math.max(p1Rotated.x, p2Rotated.x, p3Rotated.x, p4Rotated.x),\n minY: Math.min(p1Rotated.y, p2Rotated.y, p3Rotated.y, p4Rotated.y),\n maxY: Math.max(p1Rotated.y, p2Rotated.y, p3Rotated.y, p4Rotated.y)\n };\n\n return {\n width: bounds.maxX - bounds.minX,\n height: bounds.maxY - bounds.minY\n };\n}\n","import { isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { EmptyTipAttributes } from './type';\nimport { Image, Rect, Text, graphicCreator } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadEmptyTipComponent } from './register';\n\nconst emptyTipSvg =\n '';\n\nloadEmptyTipComponent();\nexport class EmptyTip extends AbstractComponent> {\n static defaultAttributes: Partial = {\n spaceBetweenTextAndIcon: 20,\n text: {\n text: 'no data',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n pickable: false\n },\n icon: {\n image: emptyTipSvg,\n width: 100,\n height: 100,\n pickable: false\n }\n };\n _text: Text;\n _emptyTipIcon: Image;\n constructor(attributes: EmptyTipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, EmptyTip.defaultAttributes, attributes));\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderIcon();\n this.renderText();\n this.layout();\n }\n\n renderIcon() {\n this._emptyTipIcon = new Image(merge({ image: this.attribute.icon.image }, this.attribute.icon));\n this.appendChild(this._emptyTipIcon);\n }\n\n renderText() {\n this._text = new Text(merge({ wrap: true }, this.attribute.text));\n this.appendChild(this._text);\n }\n\n layout() {\n const iconHeight = this.attribute.icon.height;\n const textHeight = this._text.AABBBounds.height();\n\n const iconWidth = this.attribute.icon.width;\n\n const { width, height, spaceBetweenTextAndIcon } = this.attribute as EmptyTipAttributes;\n\n this._emptyTipIcon.setAttribute('x', width / 2 - iconWidth / 2);\n // this._emptyTipIcon.setAttribute('textAlign', 'center');\n\n this._emptyTipIcon.setAttribute('y', height / 2 - iconHeight / 2 - textHeight / 2 - spaceBetweenTextAndIcon / 2);\n // this._emptyTipIcon.setAttribute('textBaseline', 'middle');\n\n this._text.setAttribute('x', width / 2);\n this._text.setAttribute('textAlign', 'center');\n\n this._text.setAttribute('y', height / 2 + iconHeight / 2 + spaceBetweenTextAndIcon / 2);\n this._text.setAttribute('textBaseline', 'middle');\n }\n}\n","import { registerGroup, registerImage, registerRect, registerText } from '@visactor/vrender-kits';\n\nexport function loadEmptyTipComponent() {\n registerGroup();\n // registerRect();\n registerText();\n registerImage();\n}\n","import { EmptyTip as EmptyTipComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { EmptyTipAttributes } from '@visactor/vrender-components';\nimport type { IEmptyTip } from '../../ts-types/component/empty-tip';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isEqual } from '@visactor/vutils';\nimport type { ListTable } from '../../ListTable';\nimport type { PivotTable } from '../../PivotTable';\nimport type { BaseTable } from '../../core';\nconst emptyTipSvg =\n '';\n\nexport interface IEmptyTipComponent {\n new (emptyTipOption: IEmptyTip | true, table: BaseTableAPI): EmptyTip;\n}\n\nexport class EmptyTip {\n table: BaseTableAPI;\n _emptyTipOption: IEmptyTip = {\n spaceBetweenTextAndIcon: 20,\n text: 'no data',\n textStyle: {\n fontSize: 14,\n color: '#000'\n },\n icon: {\n image: emptyTipSvg,\n width: 100,\n height: 100\n }\n };\n isReleased: boolean = false;\n private _emptyTipComponent: EmptyTipComponents;\n private _cacheAttrs: EmptyTipAttributes;\n constructor(emptyTipOption: IEmptyTip | true, table: BaseTableAPI) {\n this.table = table;\n this._emptyTipOption = Object.assign(this._emptyTipOption, emptyTipOption === true ? {} : emptyTipOption);\n this._emptyTipComponent = this._createOrUpdateEmptyTipComponent(this._getEmptyTipAttrs());\n }\n\n private _createOrUpdateEmptyTipComponent(attrs: EmptyTipAttributes): EmptyTipComponents {\n if (this._emptyTipComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._emptyTipComponent.setAttributes(attrs);\n }\n } else {\n const emptyTip = new EmptyTipComponents(attrs);\n emptyTip.name = 'emptyTip';\n this.table.scenegraph.stage.defaultLayer.appendChild(emptyTip);\n this._emptyTipComponent = emptyTip;\n }\n // update table size\n // this._adjustTableSize(this._emptyTipComponent.attribute);\n return this._emptyTipComponent;\n }\n\n resize() {\n if (!this._emptyTipComponent) {\n return;\n }\n const leftHeaderWidth =\n (this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol === false\n ? this.table.getFrozenColsWidth()\n : 0;\n const topHeaderHeight =\n !(this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol\n ? this.table.getFrozenRowsHeight()\n : 0;\n const width =\n (this.table.columnHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().width\n : this.table.tableNoFrameWidth) -\n leftHeaderWidth -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n\n const height =\n (this.table.rowHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().height\n : this.table.tableNoFrameHeight) -\n topHeaderHeight -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n this._emptyTipComponent.setAttributes({\n spaceBetweenTextAndIcon: this._emptyTipOption.spaceBetweenTextAndIcon,\n x: this.table.tableX + leftHeaderWidth,\n y: this.table.tableY + topHeaderHeight,\n width,\n height,\n text: {\n text: this._emptyTipOption.text,\n ...this._emptyTipOption.textStyle,\n fill: this._emptyTipOption.textStyle?.color\n },\n icon: {\n ...this._emptyTipOption.icon\n }\n });\n }\n\n release(): void {\n this._emptyTipComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this._emptyTipComponent);\n this._emptyTipComponent = null;\n this.isReleased = true;\n }\n resetVisible() {\n if (\n ((!this.table.recordsCount || this.table.recordsCount === 0) &&\n this.table.internalProps.layoutMap.rowCount === this.table.internalProps.layoutMap.columnHeaderLevelCount) ||\n this.table.internalProps.layoutMap.colCount === this.table.internalProps.layoutMap.rowHeaderLevelCount\n ) {\n // this._emptyTipComponent.setAttributes({\n // visible: true\n // });\n // this._emptyTipComponent.showAll();\n if (!this.table.scenegraph.stage.defaultLayer.children.includes(this._emptyTipComponent)) {\n this.table.scenegraph.stage.defaultLayer.appendChild(this._emptyTipComponent);\n }\n } else {\n // this._emptyTipComponent.setAttributes({\n // visible: false\n // });\n // this._emptyTipComponent.hideAll();\n if (this.table.scenegraph.stage.defaultLayer.children.includes(this._emptyTipComponent)) {\n this.table.scenegraph.stage.defaultLayer.removeChild(this._emptyTipComponent);\n }\n }\n }\n\n private _getEmptyTipAttrs() {\n const leftHeaderWidth =\n (this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol === false\n ? this.table.getFrozenColsWidth()\n : 0;\n const topHeaderHeight =\n !(this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol\n ? this.table.getFrozenRowsHeight()\n : 0;\n const width =\n (this.table.columnHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().width\n : this.table.tableNoFrameWidth) -\n leftHeaderWidth -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n const height =\n (this.table.rowHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().height\n : this.table.tableNoFrameHeight) -\n topHeaderHeight -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n\n return {\n spaceBetweenTextAndIcon: this._emptyTipOption.spaceBetweenTextAndIcon,\n x: this.table.tableX + leftHeaderWidth,\n y: this.table.tableY + topHeaderHeight,\n width,\n height,\n text: {\n text: this._emptyTipOption.text,\n ...this._emptyTipOption.textStyle,\n fill: this._emptyTipOption.textStyle?.color\n },\n icon: {\n ...this._emptyTipOption.icon\n }\n // visible:this.table.recordsCount === 0?true:false\n } as EmptyTipAttributes;\n }\n}\n","import { isEmpty, isValid, merge } from '@visactor/vutils';\nimport type { IDiscreteTableLegendOption } from '../../../ts-types/component/legend';\nimport { isPercent } from '../../../tools/calc';\nimport { transformComponentStyle, transformLegendTitleAttributes, transformToGraphic } from '../../util/transform';\n\nconst defaultLegendSpec = {\n orient: 'bottom',\n position: 'middle',\n padding: 30,\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: 14,\n fill: '#000000',\n fontWeight: 'normal'\n },\n space: 12\n },\n item: {\n visible: true,\n spaceCol: 10,\n spaceRow: 10,\n padding: 2,\n background: {\n state: {\n selectedHover: {\n fill: 'gray',\n fillOpacity: 0.7\n },\n unSelectedHover: {\n fill: 'gray',\n fillOpacity: 0.2\n }\n }\n },\n shape: {\n space: 4,\n state: {\n unSelected: {\n fillOpacity: 0.5\n }\n }\n },\n label: {\n space: 4,\n style: {\n fill: '#89909D',\n fontSize: 14\n },\n state: {\n unSelected: {\n fillOpacity: 0.5\n }\n }\n }\n },\n allowAllCanceled: true,\n visible: true\n};\n\nexport function getLegendAttributes(spec: IDiscreteTableLegendOption, rect: { width: number; height: number }) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = merge({}, defaultLegendSpec, spec);\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n transformComponentStyle(item.shape);\n transformComponentStyle(item.label);\n transformComponentStyle(item.value);\n transformComponentStyle(item.background);\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n // transform pager\n if (!isEmpty(pager.textStyle)) {\n transformToGraphic(pager.textStyle);\n }\n transformComponentStyle(pager.handler);\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n merge(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","import { cloneDeep, get, merge } from '@visactor/vutils';\nimport type { IDiscreteTableLegendOption } from '../../../ts-types/component/legend';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { DiscreteLegend, LegendEvent } from '@visactor/vrender-components';\nimport { getLegendAttributes } from './get-discrete-legend-attributes';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport { getQuadProps } from '../../../scenegraph/utils/padding';\nimport type { IOrientType } from '../../../ts-types/component/util';\n\nexport class DiscreteTableLegend {\n table: BaseTableAPI;\n option: IDiscreteTableLegendOption;\n orient: IOrientType;\n visible: boolean;\n position: 'start' | 'middle' | 'end';\n selectedData: (string | number)[];\n legendComponent: DiscreteLegend;\n\n constructor(option: IDiscreteTableLegendOption, table: BaseTableAPI) {\n this.table = table;\n this.option = cloneDeep(option);\n this.orient = option.orient ?? 'left';\n this.visible = option.visible ?? true;\n this.position = option.position ?? 'middle';\n this.selectedData = option.defaultSelected ?? null;\n\n this.createComponent();\n this.initEvent();\n }\n\n createComponent() {\n const attrs = this.getLegendAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n const legend = new DiscreteLegend(\n merge({}, attrs, {\n defaultSelected: this.selectedData,\n disableTriggerEvent: this.table.options.disableInteraction\n })\n );\n legend.name = 'legend';\n this.legendComponent = legend;\n if (this.visible === false) {\n legend.setAttributes({\n visible: false,\n visibleAll: false\n });\n legend.hideAll();\n }\n this.table.scenegraph.stage.defaultLayer.appendChild(legend);\n\n this.adjustTableSize(attrs);\n }\n\n resize() {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n\n this.legendComponent.setAttributes({\n maxWidth: this.table.tableNoFrameWidth,\n maxHeight: this.table.tableNoFrameHeight\n });\n\n this.adjustTableSize(this.legendComponent.attribute);\n }\n\n adjustTableSize(attrs: any) {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n // 调整位置\n let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n if (width <= 0 || height <= 0) {\n return;\n }\n const rectWidth = this.table.tableNoFrameWidth;\n const rectHeight = this.table.tableNoFrameHeight;\n const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);\n\n let x = 0;\n let y = 0;\n if (this.orient === 'left') {\n x = padding[3];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'top') {\n x = 0;\n y = padding[0];\n height += padding[0] + padding[2];\n } else if (this.orient === 'right') {\n x = rectWidth - width - padding[1];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'bottom') {\n x = 0;\n y = rectHeight - height - padding[2];\n height += padding[0] + padding[2];\n }\n\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const position = this.position;\n // const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width - padding[1];\n } else {\n offsetX = padding[3];\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height - padding[2];\n } else {\n offsetY = padding[0];\n }\n }\n\n this.legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY,\n x,\n y\n });\n\n // update table size\n if (this.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n }\n\n getLegendAttributes(rect: any) {\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const legendAttrs = getLegendAttributes(this.option, rect);\n const padding = getQuadProps(legendAttrs.padding ?? this.option.padding ?? 10);\n const attrs = {\n layout,\n items: this.getLegendItems(),\n // zIndex: this.layoutZIndex,\n maxWidth: rect.width - padding[1] - padding[3],\n maxHeight: rect.height - padding[0] - padding[2],\n ...legendAttrs\n };\n return attrs;\n }\n\n getLegendItems() {\n return this.option.data;\n }\n\n initEvent() {\n if (this.legendComponent) {\n this.legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_CLICK, { model: this, value: selectedData, event: e });\n });\n\n this.legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_HOVER, { model: this, value: detail, event: e });\n });\n\n this.legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_UNHOVER, { model: this, value: detail, event: e });\n });\n\n // wait for vrender-vcomponent version update\n this.legendComponent.addEventListener('legendItemAttributeUpdate', (e: any) => {\n this.table.scenegraph.updateNextFrame();\n });\n }\n }\n\n getLegendBounds() {\n const width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n\n return {\n width: width,\n height: height\n };\n }\n release() {\n this.legendComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this.legendComponent);\n this.legendComponent = null;\n }\n}\n","import { isEmpty, isValid, merge } from '@visactor/vutils';\nimport type { IColorTableLegendOption, ISizeTableLegendOption } from '../../../ts-types/component/legend';\nimport { transformComponentStyle, transformLegendTitleAttributes, transformToGraphic } from '../../util/transform';\n\nconst defaultContinueLegendSpec = {\n orient: 'right',\n position: 'middle',\n padding: 30,\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'titleFontColor' }\n },\n space: 12\n },\n handler: {\n visible: true\n },\n startText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n },\n endText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n },\n handlerText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n }\n};\n\nconst defaultColorLegendSpec = {\n horizontal: {\n ...defaultContinueLegendSpec,\n rail: {\n width: 200,\n height: 8,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n }\n },\n vertical: {\n ...defaultContinueLegendSpec,\n rail: {\n width: 8,\n height: 200,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n }\n }\n};\n\nconst defaultSizeLegendSpec = {\n horizontal: {\n sizeBackground: {\n fill: '#cdcdcd'\n },\n track: {\n style: {\n fill: 'rgba(20,20,20,0.1)'\n }\n },\n rail: {\n width: 200,\n height: 4,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n },\n ...defaultContinueLegendSpec\n },\n vertical: {\n sizeBackground: {\n fill: '#cdcdcd'\n },\n track: {\n style: {\n fill: 'rgba(20,20,20,0.1)'\n }\n },\n rail: {\n width: 4,\n height: 200,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n },\n ...defaultContinueLegendSpec\n }\n};\n\nexport function getContinuousLegendAttributes(\n spec: IColorTableLegendOption | ISizeTableLegendOption,\n rect: { width: number; height: number }\n) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = merge(\n {},\n (spec.type === 'color' ? defaultColorLegendSpec : defaultSizeLegendSpec)[\n spec.orient === 'bottom' || spec.orient === 'top' ? 'horizontal' : 'vertical'\n ],\n spec\n );\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n merge(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","import { cloneDeep, get, merge } from '@visactor/vutils';\nimport type { IColorTableLegendOption, ISizeTableLegendOption } from '../../../ts-types/component/legend';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { ColorContinuousLegend, SizeContinuousLegend, LegendEvent } from '@visactor/vrender-components';\nimport { getContinuousLegendAttributes } from './get-continue-legend-attributes';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport { getQuadProps } from '../../../scenegraph/utils/padding';\nimport type { IOrientType } from '../../../ts-types/component/util';\n\nexport class ContinueTableLegend {\n table: BaseTableAPI;\n option: IColorTableLegendOption | ISizeTableLegendOption;\n orient: IOrientType;\n visible: boolean;\n position: 'start' | 'middle' | 'end';\n selectedData: (string | number)[];\n legendComponent: ColorContinuousLegend | SizeContinuousLegend;\n\n constructor(option: IColorTableLegendOption | ISizeTableLegendOption, table: BaseTableAPI) {\n this.table = table;\n this.option = cloneDeep(option);\n this.orient = option.orient ?? 'left';\n this.visible = option.visible ?? true;\n this.position = option.position ?? 'middle';\n this.selectedData = option.defaultSelected ?? null;\n\n this.createComponent();\n this.initEvent();\n }\n\n createComponent() {\n const attrs = this.getLegendAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n\n let legend;\n if (this.option.type === 'color') {\n legend = new ColorContinuousLegend(\n merge({}, attrs, {\n slidable: true\n // defaultSelected: this.selectedData\n })\n );\n } else {\n legend = new SizeContinuousLegend(\n merge({}, attrs, {\n slidable: true\n // defaultSelected: this.selectedData\n })\n );\n }\n legend.name = 'legend';\n this.legendComponent = legend;\n if (this.visible === false) {\n legend.setAttributes({\n visible: false,\n visibleAll: false\n });\n legend.hideAll();\n }\n this.table.scenegraph.stage.defaultLayer.appendChild(legend);\n\n this.adjustTableSize(attrs);\n }\n\n resize() {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n\n this.legendComponent.setAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n\n this.adjustTableSize(this.legendComponent.attribute);\n }\n\n adjustTableSize(attrs: any) {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n // 调整位置\n let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n if (width <= 0 || height <= 0) {\n return;\n }\n const rectWidth = this.table.tableNoFrameWidth;\n const rectHeight = this.table.tableNoFrameHeight;\n const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);\n\n let x = 0;\n let y = 0;\n if (this.orient === 'left') {\n x = padding[3];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'top') {\n x = 0;\n y = padding[0];\n height += padding[0] + padding[2];\n } else if (this.orient === 'right') {\n x = rectWidth - width - padding[1];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'bottom') {\n x = 0;\n y = rectHeight - height - padding[2];\n height += padding[0] + padding[2];\n }\n\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const position = this.position;\n // const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width - padding[1];\n } else {\n offsetX = padding[3];\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height - padding[2];\n } else {\n offsetY = padding[0];\n }\n }\n\n this.legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY,\n x,\n y\n });\n\n // update table size\n if (this.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n }\n\n getLegendAttributes(rect: any) {\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const align = layout === 'horizontal' ? 'bottom' : this.orient;\n\n const attrs = {\n ...getContinuousLegendAttributes(this.option, rect),\n layout,\n align,\n // zIndex: this.layoutZIndex,\n min: this.option.min,\n max: this.option.max,\n value: this.option.value,\n [this.option.type === 'color' ? 'colors' : 'sizeRange']:\n this.option.type === 'color'\n ? (this.option as IColorTableLegendOption).colors\n : (this.option as ISizeTableLegendOption).sizeRange\n };\n return attrs;\n }\n\n initEvent() {\n if (this.legendComponent) {\n this.legendComponent.addEventListener('change', (e: any) => {\n const selectedData = get(e, 'detail.value');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_CHANGE, { model: this, value: selectedData, event: e });\n this.table.scenegraph.updateNextFrame();\n });\n }\n }\n\n getLegendBounds() {\n const width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n\n return {\n width: width,\n height: height\n };\n }\n release() {\n this.legendComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this.legendComponent);\n this.legendComponent = null;\n }\n}\n","import type { ITableLegendOption } from '../../ts-types/component/legend';\nimport { DiscreteTableLegend } from './discrete-legend/discrete-legend';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { ContinueTableLegend } from './continue-legend/continue-legend';\n\nexport type CreateLegend = (\n option: ITableLegendOption,\n table: BaseTableAPI\n) => DiscreteTableLegend | ContinueTableLegend;\nexport function createLegend(option: ITableLegendOption, table: BaseTableAPI) {\n if (option.type === 'color' || option.type === 'size') {\n return new ContinueTableLegend(option, table);\n }\n return new DiscreteTableLegend(option, table);\n}\n","import type { MenuInstanceInfo } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { MenuContainer } from './logic/MenuContainer';\nimport type { MenuElement } from './logic/MenuElement';\n\nexport abstract class BaseMenu {\n protected _table: BaseTableAPI;\n /** 弹出的菜单显示内容 */\n private _menuElement?: MenuElement | MenuContainer;\n constructor(table: BaseTableAPI) {\n this._table = table;\n }\n release(): void {\n this.unbindMenuElement();\n if (this._menuElement) {\n this._menuElement.release();\n }\n this._menuElement = undefined;\n }\n private _getMenuElement(): MenuElement | MenuContainer {\n if (this._menuElement) {\n return this._menuElement;\n }\n this._menuElement = this.createMenuElementInternal();\n\n return this._menuElement;\n }\n /** 继承的具体类来实现 可以返回 MenuElement 或者 MenuContainer */\n abstract createMenuElementInternal(): MenuElement | MenuContainer;\n bindMenuElement(col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const menuElement = this._getMenuElement();\n return menuElement.bindToCell(this._table, col, row, menuInstanceInfo);\n }\n unbindMenuElement(): void {\n const menuElement = this._getMenuElement();\n menuElement.unbindFromCell();\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const menuElement = this._getMenuElement();\n return menuElement.pointInMenuElement(x, y);\n }\n getRootElement(): HTMLElement {\n return this._getMenuElement().rootElement;\n }\n}\n","import { EventHandler } from '../../../../event/EventHandler';\nimport type { MenuInstanceInfo, Placement, RectProps } from '../../../../ts-types';\nimport { createElement } from '../../../../tools/dom';\nimport { TABLE_EVENT_TYPE } from '../../../../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../../../../layout/pivot-header-layout';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\n\nconst CLASSNAME = 'vtable__menu-element';\nconst HIDDEN_CLASSNAME = `${CLASSNAME}--hidden`;\nconst SHOWN_CLASSNAME = `${CLASSNAME}--shown`;\n\nfunction createMenuDomElement(): HTMLElement {\n const rootElement = createElement('div', [CLASSNAME, HIDDEN_CLASSNAME]);\n return rootElement;\n}\n\nexport class MenuContainer {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _menuInstanceInfo?: MenuInstanceInfo;\n constructor(table: BaseTableAPI) {\n this._handler = new EventHandler();\n this._rootElement = createMenuDomElement();\n\n // 鼠标在菜单上滚动阻止冒泡\n this._rootElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n // 绑定交互事件\n this._rootElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._rootElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n // table.invalidateCell(col, row); // 更新状态图表\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousemove', e);\n // table.hoverIcon = undefined;\n\n e.stopPropagation();\n });\n // this._rootElement?.addEventListener('mouseenter', () => {\n // if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) return;\n // if (!table.hoverIcon) return;\n // // console.log('menu mousemove', e);\n // table.showHoverIcon = table.hoverIcon;\n // table.hoverIcon = undefined; // 避免在hover icon后不能交互表格区域\n // table.invalidateCell(table.showHoverIcon.col, table.showHoverIcon.row);\n // // console.log('showHoverIcon', table.showHoverIcon);\n // });\n // this._rootElement?.addEventListener('blur', () => {\n // // table.fireListeners(LG_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n // table.showHoverIcon = undefined;\n // });\n }\n get rootElement() {\n return this._rootElement;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler.release();\n delete this._rootElement;\n // delete this._messageElement;\n }\n bindToCell(table: BaseTableAPI, col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const rootElement = this._rootElement;\n this._menuInstanceInfo = menuInstanceInfo;\n // const messageElement = this._messageElement;\n\n rootElement?.classList.remove(SHOWN_CLASSNAME);\n rootElement?.classList.add(HIDDEN_CLASSNAME);\n\n if (this._canBindToCell(table, col, row)) {\n rootElement.innerHTML = '';\n rootElement.appendChild(menuInstanceInfo.content);\n\n const binded = this._bindCell(table, col, row, menuInstanceInfo.position, menuInstanceInfo.referencePosition);\n\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASSNAME);\n rootElement?.classList.remove(HIDDEN_CLASSNAME);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n unbindFromCell(): void {\n const rootElement = this._rootElement;\n this._menuInstanceInfo = undefined;\n if (rootElement?.parentElement) {\n // rootElement.parentElement.removeChild(rootElement);\n rootElement.classList.remove(SHOWN_CLASSNAME);\n rootElement.classList.add(HIDDEN_CLASSNAME);\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { top, bottom, left, right } = rect;\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n\n const { offsetHeight, offsetWidth } = element;\n if (offsetHeight < top) {\n return false;\n }\n if (offsetWidth < left) {\n return false;\n }\n return true;\n }\n _bindCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position: { x: number; y: number },\n referencePosition: { rect: RectProps; placement?: Placement }\n ): boolean {\n const rootElement = this._rootElement;\n // const element = table.getElement(); // container element\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const {\n width: containerWidth,\n height: containerHeight,\n left: containerLeft,\n top: containerTop\n } = element.getBoundingClientRect();\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement); // 之前在做dom边缘躲避的时候放到了table.getParentElement()上,但发现不是相对定位导致位置错位\n }\n rootElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth;\n const rootElementHeight = rootElement.clientHeight;\n let rootElementLeft;\n let rootElementTop;\n if (position) {\n rootElementLeft = position.x;\n rootElementTop = position.y;\n }\n if (referencePosition) {\n rootElementLeft = referencePosition.rect.right - rootElementWidth;\n rootElementTop = referencePosition.rect.bottom;\n }\n // rootElementLeft = position.x - rootElementWidth;\n // let leftStyle = rootElementLeft;\n // 检测下方能否容纳,不能容纳向上偏移\n if (rootElementTop + rootElementHeight > containerHeight) {\n rootElementTop = containerHeight - rootElementHeight;\n rootElementLeft += rootElementWidth - 2;\n }\n // 偏移后上方超出canvas范围,居中显示\n if (rootElementTop < 0) {\n rootElementTop = rootElementTop / 2;\n }\n\n let deltaTop = 0;\n let deltaLeft = 0;\n if (table.getElement() !== element) {\n const { left, top } = table.getElement().getBoundingClientRect();\n deltaTop = top - containerTop;\n deltaLeft = left - containerLeft;\n }\n\n rootElement.style.top = `${rootElementTop + deltaTop}px`;\n\n // 判断如果超出左右范围则靠边显示\n if (rootElementLeft < 0) {\n rootElementLeft = 0;\n } else if (rootElementLeft + rootElementWidth > containerWidth) {\n rootElementLeft = containerWidth - rootElementWidth;\n }\n rootElement.style.left = `${rootElementLeft + deltaLeft}px`;\n\n return true;\n }\n return false;\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const rootElement = this._rootElement;\n\n const { x: rootLeft, y: rootTop, width: rootWidth, height: rootHeight } = rootElement.getBoundingClientRect();\n if (x > rootLeft - 5 && x < rootLeft + rootWidth + 5 && y > rootTop - 5 && y < rootTop + rootHeight + 5) {\n return true;\n }\n\n return false;\n }\n}\n","import { BaseMenu } from './BaseMenu';\nimport { MenuContainer } from './logic/MenuContainer';\nimport { MenuElement } from './logic/MenuElement';\n\nexport class Menu extends BaseMenu {\n createMenuElementInternal(): MenuElement {\n return new MenuElement(this._table);\n }\n}\nexport class Container extends BaseMenu {\n createMenuElementInternal(): MenuContainer {\n return new MenuContainer(this._table);\n }\n}\n","import type { CellRange, DropDownMenuOptions, MenuInstanceInfo, MenuInstanceType } from '../../../ts-types';\nimport type { BaseMenu } from './BaseMenu';\nimport { Container, Menu } from './Menu';\nimport { cellInRange } from '../../../tools/helper';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI, HeaderData } from '../../../ts-types/base-table';\n// import { DEFAULTFONT } from '../../tools/global';\n// import { getFontSize } from '../../tools/canvases';\n\nconst MENU_INSTANCE_FACTORY = {\n 'dropdown-menu': function (table: BaseTableAPI): BaseMenu {\n return new Menu(table);\n },\n 'context-menu': function (table: BaseTableAPI): BaseMenu {\n return new Menu(table);\n },\n container(table: BaseTableAPI): BaseMenu {\n return new Container(table);\n }\n};\n\n/** 获取下拉菜单展示内容及坐标位置 */\nfunction getMenuInstanceInfo(\n table: BaseTableAPI,\n col: number,\n row: number,\n type: MenuInstanceType,\n dropDownMenuOptions?: DropDownMenuOptions\n): MenuInstanceInfo | null {\n const { lineHeight, textBaseline, textStick } = table._getCellStyle(col, row);\n // table.internalProps.layoutMap.getHeader(col, row).style ?? {};\n // const lineHeight = getFontSize(table.getContext(), font).height;\n let rect = table.getCellRangeRelativeRect(table.getCellRange(col, row));\n if (textStick) {\n rect = table.getVisibleCellRangeRelativeRect({ col, row });\n }\n\n let { left, right, bottom, top, width, height } = rect;\n if (table.isHeader(col, row)) {\n ({ left, right, bottom, top, width, height } = table.internalProps.headerHelper.getDropDownIconRect(\n rect,\n // paddingArray[1]\n lineHeight as number,\n textBaseline || 'middle'\n ));\n }\n if (dropDownMenuOptions?.content) {\n //如果有指定的下拉菜单内容\n return {\n type,\n position: dropDownMenuOptions.position,\n referencePosition: dropDownMenuOptions.referencePosition ?? {\n rect: {\n left,\n right,\n top,\n bottom,\n width,\n height\n }\n },\n content: dropDownMenuOptions.content\n };\n } // 没有指定的下拉菜单 从headerLayout中获取下拉菜单内容\n else if (type === 'dropdown-menu') {\n // 获取下拉菜单信息及位置 注:这里逻辑特指内置的下拉菜单\n const { dropDownMenu = table.globalDropDownMenu, pivotInfo } = table._getHeaderLayoutMap(col, row) as HeaderData;\n\n // const x = (left + right) / 2;\n // const y = bottom;\n\n return {\n type,\n // position: {\n // x,\n // y,\n // },\n referencePosition: {\n rect: {\n left,\n right,\n top,\n bottom,\n width,\n height\n }\n },\n content: dropDownMenu,\n pivotInfo\n };\n }\n // else if (type === 'context-menu') {\n // // 获取右键菜单信息及位置\n // const abstractPos = table._getMouseAbstractPoint(event, false);\n // let menu = null;\n // if (abstractPos && typeof table.options.contextmenu === 'function') {\n // menu = table.options.contextmenu(table.getHeaderField(col, row) as string, row);\n // } else if (abstractPos && Array.isArray(table.options.contextmenu)) {\n // menu = table.options.contextmenu;\n // }\n // return {\n // position: {\n // x: abstractPos.x,\n // y: abstractPos.y,\n // },\n // type,\n // content: menu,\n // };\n // }\n return null;\n}\n\ntype AttachInfo = {\n instance?: BaseMenu;\n range: CellRange;\n};\n\nexport interface IMenuHandler {\n new (table: BaseTableAPI): MenuHandler;\n}\nexport class MenuHandler {\n private _table: BaseTableAPI;\n private _menuInstances?: { [type: string]: BaseMenu };\n private _attachInfo?: AttachInfo | null;\n constructor(table: BaseTableAPI) {\n this._table = table;\n this._menuInstances = {};\n this._bindTableEvent(table);\n }\n release(): void {\n const menuInstances = this._menuInstances;\n for (const k in menuInstances) {\n menuInstances[k].release();\n }\n delete this._menuInstances;\n this._attachInfo = null;\n }\n _bindToCell(col: number, row: number, type: MenuInstanceType, dropDownMenuOptions?: DropDownMenuOptions): void {\n const info = this._attachInfo;\n const instanceInfo = this._getMenuInstanceInfo(col, row, type, dropDownMenuOptions);\n if (info && (!instanceInfo || info.instance !== instanceInfo.instance)) {\n info.instance?.unbindMenuElement();\n this._attachInfo = null;\n }\n if (!instanceInfo) {\n return;\n }\n const { instance, info: menuInstanceInfo } = instanceInfo;\n const attach = instance && instance.bindMenuElement(col, row, menuInstanceInfo);\n if (attach) {\n const range = this._table.getCellRange(col, row);\n this._attachInfo = { range, instance };\n }\n }\n _unbindFromCell(): void {\n const info = this._attachInfo;\n if (!info) {\n return;\n }\n const { instance } = info;\n instance?.unbindMenuElement();\n this._attachInfo = null;\n // this._table.showHoverIcon = undefined;\n }\n _isBindToCell(col: number, row: number): boolean {\n const info = this._attachInfo;\n if (!info) {\n return false;\n }\n return cellInRange(info.range, col, row);\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number) {\n if (!this._attachInfo) {\n return false;\n }\n const info = this._attachInfo;\n const { instance } = info;\n return instance.pointInMenuElement(x, y);\n }\n _bindTableEvent(table: BaseTableAPI): void {\n // 监听按钮点击事件\n // 三种情况:\n // 1. 没有菜单,点击弹出菜单\n // 2. 已显示菜单,点击关闭菜单\n // 3. 已显示菜单,点击其他菜单按钮,关闭当前菜单,显示另一菜单\n table.on(TABLE_EVENT_TYPE.DROPDOWN_ICON_CLICK, e => {\n if (this._attachInfo) {\n if (this._isBindToCell(e.col, e.row)) {\n this._unbindFromCell();\n } else {\n this._bindToCell(e.col, e.row, 'dropdown-menu');\n }\n } else {\n this._bindToCell(e.col, e.row, 'dropdown-menu');\n }\n });\n // 监听菜单清除事件\n table.on(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, e => {\n this._unbindFromCell();\n });\n // 监听右键菜单\n table.on(TABLE_EVENT_TYPE.CONTEXTMENU_CELL, e => {\n if (table.internalProps.menu?.renderMode === 'html') {\n // 获取右键菜单信息及位置\n const abstractPos = table._getMouseAbstractPoint(e.event, false);\n let menu = null;\n if (abstractPos.inTable && typeof table.internalProps.menu?.contextMenuItems === 'function') {\n menu = table.internalProps.menu.contextMenuItems(\n table.getHeaderField(e.col, e.row) as string,\n e.row,\n e.col,\n table\n );\n } else if (abstractPos.inTable && Array.isArray(table.internalProps.menu?.contextMenuItems)) {\n menu = table.internalProps.menu?.contextMenuItems;\n }\n\n this._bindToCell(e.col, e.row, 'context-menu', {\n content: menu,\n position: { x: abstractPos.x, y: abstractPos.y }\n });\n }\n });\n }\n _getMenuInstanceInfo(\n col: number,\n row: number,\n type: MenuInstanceType,\n dropDownMenuOptions?: DropDownMenuOptions\n ): {\n instance?: BaseMenu;\n type: MenuInstanceType;\n info: MenuInstanceInfo;\n } | null {\n const table = this._table;\n const menuInstances = this._menuInstances;\n\n const info = getMenuInstanceInfo(table, col, row, type, dropDownMenuOptions);\n if (!info) {\n return null;\n }\n\n // const { type } = info;\n const instance =\n (menuInstances && menuInstances[type]) ||\n (menuInstances && (menuInstances[type] = MENU_INSTANCE_FACTORY[type](table)));\n\n return {\n instance,\n type,\n info\n };\n }\n\n containElement(el: HTMLElement): boolean {\n for (const k in this._menuInstances) {\n const contain = this._menuInstances[k].getRootElement()?.contains(el);\n if (contain) {\n return true;\n }\n }\n return false;\n }\n}\n","import { Title as TitleComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TitleAttrs } from '@visactor/vrender-components';\nimport type { ITitle } from '../../ts-types/component/title';\nimport { getQuadProps } from '../../scenegraph/utils/padding';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isEqual, merge } from '@visactor/vutils';\n\nexport interface ITitleComponent {\n new (titleOption: ITitle, table: BaseTableAPI): Title;\n}\nexport class Title {\n table: BaseTableAPI;\n _titleOption: ITitle;\n isReleased: boolean = false;\n private _titleComponent: TitleComponents;\n private _cacheAttrs: TitleAttrs;\n constructor(titleOption: ITitle, table: BaseTableAPI) {\n this.table = table;\n this._titleOption = merge({ orient: 'top' }, titleOption);\n if (titleOption.visible !== false) {\n this._titleComponent = this._createOrUpdateTitleComponent(this._getTitleAttrs());\n }\n }\n\n private _createOrUpdateTitleComponent(attrs: TitleAttrs): TitleComponents {\n if (this._titleComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._titleComponent.setAttributes(attrs);\n }\n } else {\n const title = new TitleComponents(attrs);\n title.name = 'title';\n this.table.scenegraph.stage.defaultLayer.appendChild(title);\n this._titleComponent = title;\n // 代理 title 组件上的事件\n // title.on('*', (event: any, type: string) => this._delegateEvent(title as unknown as INode, event, type));\n }\n // update table size\n this._adjustTableSize(this._titleComponent.attribute);\n return this._titleComponent;\n }\n\n resize() {\n if (!this._titleComponent) {\n return;\n }\n const padding = getQuadProps(this._titleOption.padding ?? 10);\n const realWidth =\n this._titleOption.width ??\n (this.table.widthMode === 'adaptive'\n ? this.table.tableNoFrameWidth\n : Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)) -\n padding[1] -\n padding[3];\n const realHeight =\n this._titleOption.height ??\n (this.table.heightMode === 'adaptive'\n ? this.table.tableNoFrameHeight\n : Math.min(this.table.tableNoFrameHeight, this.table.getDrawRange().height)) -\n padding[0] -\n padding[2];\n this._titleComponent.setAttributes({\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY,\n // width: realWidth,\n width:\n this._titleOption.orient === 'top' || this._titleOption.orient === 'bottom'\n ? realWidth\n : this._titleOption.width,\n height:\n this._titleOption.orient === 'left' || this._titleOption.orient === 'right'\n ? realHeight\n : this._titleOption.height,\n textStyle: {\n width: realWidth,\n ...this._titleOption.textStyle\n },\n subtextStyle: {\n width: realWidth,\n ...this._titleOption.subtextStyle\n }\n });\n this._adjustTableSize(this._titleComponent.attribute);\n }\n\n _adjustTableSize(attrs: TitleAttrs) {\n // 调整位置\n const width = isFinite(this._titleComponent?.AABBBounds.width()) ? this._titleComponent.AABBBounds.width() : 0;\n const height = isFinite(this._titleComponent?.AABBBounds.height()) ? this._titleComponent.AABBBounds.height() : 0;\n // const rectWidth = this.table.tableNoFrameWidth;\n // const rectHeight = this.table.tableNoFrameHeight;\n // const padding = getQuadProps((attrs.padding as number | number[]) ?? this._titleOption.padding ?? 10);\n\n // let x = 0;\n // let y = 0;\n // if (this._titleOption.orient === 'left') {\n // x = padding[3];\n // y = 0;\n // // width += padding[1] + padding[3];\n // } else if (this._titleOption.orient === 'top') {\n // x = 0;\n // y = padding[0];\n // // height += padding[0] + padding[2];\n // } else if (this._titleOption.orient === 'right') {\n // x = rectWidth - width - padding[1];\n // y = 0;\n // width += padding[1] + padding[3];\n // } else if (this._titleOption.orient === 'bottom') {\n // x = 0;\n // y = rectHeight - height - padding[2];\n // // height += padding[0] + padding[2];\n // }\n if (this._titleOption.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this._titleOption.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this._titleOption.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this._titleOption.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n this._cacheAttrs = attrs;\n if (this._titleOption.orient === 'right' || this._titleOption.orient === 'bottom') {\n this._titleComponent.setAttributes({\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + this.table.tableNoFrameWidth\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY\n });\n }\n }\n\n release(): void {\n this._titleComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this._titleComponent);\n this._titleComponent = null;\n this.isReleased = true;\n }\n private _getTitleAttrs() {\n const defaultPadding = this._titleOption.text || this._titleOption.subtext ? 10 : 0;\n const padding = getQuadProps(this._titleOption.padding ?? defaultPadding);\n const realWidth =\n this._titleOption.width ??\n Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width) - padding[1] - padding[3];\n const realHeight =\n this._titleOption.height ??\n Math.min(this.table.tableNoFrameHeight, this.table.getDrawRange().height) - padding[0] - padding[2];\n return {\n text: this._titleOption.text ?? '',\n subtext: this._titleOption.subtext ?? '',\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY,\n width:\n this._titleOption.orient === 'top' || this._titleOption.orient === 'bottom'\n ? realWidth\n : this._titleOption.width,\n height:\n this._titleOption.orient === 'left' || this._titleOption.orient === 'right'\n ? realHeight\n : this._titleOption.height,\n minWidth: this._titleOption.minWidth,\n maxWidth: this._titleOption.maxWidth,\n minHeight: this._titleOption.minHeight,\n maxHeight: this._titleOption.maxHeight,\n padding: this._titleOption.padding,\n align: this._titleOption.align ?? 'left',\n verticalAlign: this._titleOption.verticalAlign ?? 'top',\n textStyle: {\n width: realWidth,\n ...this._titleOption.textStyle\n },\n subtextStyle: {\n width: realWidth,\n ...this._titleOption.subtextStyle\n },\n dx: this._titleOption.dx ?? 0,\n dy: this._titleOption.dy ?? 0\n } as TitleAttrs;\n }\n\n getComponentGraphic() {\n return this._titleComponent;\n }\n}\n","import type { Placement, RectProps } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport type { BubbleTooltipElement } from './logic/BubbleTooltipElement';\n\nexport abstract class BaseTooltip {\n private _table: BaseTableAPI;\n private _tooltipElement?: BubbleTooltipElement;\n constructor(table: BaseTableAPI) {\n this._table = table;\n }\n release(): void {\n this.unbindTooltipElement();\n if (this._tooltipElement) {\n this._tooltipElement.release?.();\n }\n this._tooltipElement = undefined;\n }\n private _getTooltipElement(): BubbleTooltipElement {\n if (this._tooltipElement) {\n return this._tooltipElement;\n }\n this._tooltipElement = this.createTooltipElementInternal();\n return this._tooltipElement;\n }\n abstract createTooltipElementInternal(): BubbleTooltipElement;\n bindTooltipElement(col: number, row: number, tooltipInstanceInfo: TooltipOptions, confine?: boolean): boolean {\n const tooltipElement = this._getTooltipElement();\n return tooltipElement.bindToCell(this._table, col, row, tooltipInstanceInfo, confine);\n }\n moveTooltipElement(col: number, row: number, tooltipOptions: TooltipOptions, confine?: boolean): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement.move(this._table, col, row, tooltipOptions, confine);\n }\n unbindTooltipElement(): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement.unbindFromCell();\n }\n locateTooltipElement(\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n },\n confine?: boolean\n ): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement._locate(this._table, col, row, position, referencePosition, confine);\n }\n}\n","import { EventHandler } from '../../../event/EventHandler';\nimport type { RectProps } from '../../../ts-types';\nimport { Placement } from '../../../ts-types';\nimport { createElement } from '../../../tools/dom';\nimport { importStyle } from './BubbleTooltipElementStyle';\nimport { isDivSelected, isMobile } from '../../../tools/util';\nimport type { TooltipOptions } from '../../../ts-types/tooltip';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimportStyle();\nconst TOOLTIP_CLASS = 'vtable__bubble-tooltip-element';\nconst CONTENT_CLASS = `${TOOLTIP_CLASS}__content`;\nconst TRIANGLE_CLASS = `${TOOLTIP_CLASS}__triangle`;\nconst HIDDEN_CLASS = `${TOOLTIP_CLASS}--hidden`;\nconst SHOWN_CLASS = `${TOOLTIP_CLASS}--shown`;\n\nexport class BubbleTooltipElement {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _messageElement?: HTMLElement;\n private _triangleElement?: HTMLElement;\n private _disappearDelay?: number; // 提示框延迟多久消失\n private _disappearDelayId?: any;\n constructor() {\n this._handler = new EventHandler();\n const rootElement = (this._rootElement = createElement('div', [TOOLTIP_CLASS, HIDDEN_CLASS]));\n const messageElement = createElement('div', [CONTENT_CLASS]);\n const triangle = createElement('span', [TRIANGLE_CLASS]);\n rootElement.appendChild(triangle);\n rootElement.appendChild(messageElement);\n this._messageElement = rootElement.querySelector(`.${CONTENT_CLASS}`) || undefined;\n this._triangleElement = rootElement.querySelector(`.${TRIANGLE_CLASS}`) || undefined;\n\n rootElement.addEventListener('mousemove', () => {\n this._disappearDelayId && clearTimeout(this._disappearDelayId);\n });\n rootElement.addEventListener('mouseleave', () => {\n this._disappearDelay = undefined;\n this.unbindFromCell();\n });\n\n messageElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n messageElement.addEventListener('copy', e => {\n const isSelected = isDivSelected(messageElement as HTMLDivElement); // 判断tooltip弹框内容是否有选中\n if (isSelected) {\n e.stopPropagation();\n }\n });\n }\n bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n tooltipInstanceInfo: TooltipOptions,\n confine: boolean\n ): boolean {\n this._disappearDelay = tooltipInstanceInfo?.disappearDelay;\n this._disappearDelayId && clearTimeout(this._disappearDelayId);\n const rootElement = this._rootElement;\n const messageElement = this._messageElement;\n const triangle = this._triangleElement;\n\n rootElement?.classList.remove(SHOWN_CLASS);\n rootElement?.classList.add(HIDDEN_CLASS);\n if (this._canBindToCell(table, col, row)) {\n //设置style及类名\n messageElement.setAttribute('style', '');\n triangle.setAttribute('style', '');\n tooltipInstanceInfo?.className && rootElement.classList.add(tooltipInstanceInfo.className);\n tooltipInstanceInfo?.style?.bgColor &&\n (messageElement.style.backgroundColor = tooltipInstanceInfo?.style?.bgColor);\n tooltipInstanceInfo?.style?.bgColor && (triangle.style.backgroundColor = tooltipInstanceInfo?.style?.bgColor);\n triangle.style.display = tooltipInstanceInfo?.style?.arrowMark === true ? 'block' : 'none';\n tooltipInstanceInfo?.style?.fontSize &&\n (messageElement.style.fontSize = (tooltipInstanceInfo?.style?.fontSize ?? 12) + 'px');\n tooltipInstanceInfo?.style?.fontFamily &&\n (messageElement.style.fontFamily = tooltipInstanceInfo?.style?.fontFamily);\n tooltipInstanceInfo?.style?.color && (messageElement.style.color = tooltipInstanceInfo?.style?.color);\n tooltipInstanceInfo?.style?.padding &&\n (messageElement.style.padding = `${tooltipInstanceInfo?.style?.padding.join('px ')}px`);\n tooltipInstanceInfo?.style?.maxHeight &&\n (messageElement.style.maxHeight = `${tooltipInstanceInfo?.style?.maxHeight}px`);\n tooltipInstanceInfo?.style?.maxWidth &&\n (messageElement.style.maxWidth = `${tooltipInstanceInfo?.style?.maxWidth}px`);\n messageElement && (messageElement.textContent = tooltipInstanceInfo?.content);\n const binded = this._bindToCell(\n table,\n col,\n row,\n tooltipInstanceInfo?.position,\n tooltipInstanceInfo?.referencePosition,\n confine,\n tooltipInstanceInfo?.style?.arrowMark\n );\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASS);\n rootElement?.classList.remove(HIDDEN_CLASS);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler?.release?.();\n delete this._rootElement;\n delete this._messageElement;\n }\n move(table: BaseTableAPI, col: number, row: number, tooltipOptions?: TooltipOptions, confine?: boolean): void {\n const rootElement = this._rootElement;\n if (this._canBindToCell(table, col, row)) {\n this._bindToCell(table, col, row, tooltipOptions?.position, tooltipOptions?.referencePosition, confine);\n rootElement?.classList.add(SHOWN_CLASS);\n rootElement?.classList.remove(HIDDEN_CLASS);\n } else {\n this.unbindFromCell();\n }\n }\n unbindFromCell(): void {\n if (this._disappearDelay) {\n this._disappearDelayId = setTimeout(() => {\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASS);\n rootElement.classList.add(HIDDEN_CLASS);\n }\n }, this._disappearDelay ?? 0);\n } else {\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASS);\n rootElement.classList.add(HIDDEN_CLASS);\n }\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n const element = table.getElement();\n const { bottom, left, right, top } = rect;\n // const { frozenRowCount, frozenColCount } = table;\n // if (row >= frozenRowCount && frozenRowCount > 0) {\n // const frozenRect = table.getCellRangeRelativeRect({ col, row: frozenRowCount - 1 });\n // if (bottom < frozenRect.bottom) {\n // // 范围外\n // return false;\n // }\n // } else if (bottom < 0) {\n // // 范围外\n // return false;\n // }\n // if (col >= frozenColCount && frozenColCount > 0) {\n // const frozenRect = table.getCellRangeRelativeRect({ col: frozenColCount - 1, row });\n // if (right < frozenRect.right) {\n // //整个是被冻结列盖住的 不需要提示toolTip\n // return false;\n // }\n // } else if (left < 0) {\n // return false;\n // }\n\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n const { offsetHeight, offsetWidth } = element;\n if (top > offsetHeight) {\n return false;\n }\n if (left > offsetWidth) {\n return false;\n }\n return true;\n }\n _bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement },\n confine?: boolean,\n arrowMark?: boolean\n ): boolean {\n const rootElement = this._rootElement;\n const rect = table.getCellRangeRelativeRect({ col, row });\n const element = table.internalProps.tooltip.parentElement;\n const containerWidth = table.internalProps.element.offsetWidth;\n const { width } = rect;\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement);\n }\n rootElement.style.left = `0px`;\n // 边界碰撞检测\n let tooltipY: number;\n let tooltipX: number;\n //设置最宽尺寸\n const maxWidth = Math.min(containerWidth * 0.8, width * 4);\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth; //Math.min(Math.max(rootElement.clientWidth, width), maxWidth);\n const rootElementHeight = rootElement.clientHeight;\n if (position || referencePosition) {\n const tooltipPosition = this.getComputedPosition(\n table,\n col,\n row,\n position,\n referencePosition,\n confine,\n arrowMark\n );\n tooltipX = tooltipPosition.x;\n tooltipY = tooltipPosition.y;\n } else {\n return false;\n }\n\n rootElement.style.left = `${tooltipX}px`;\n rootElement.style.top = `${tooltipY}px`;\n // rootElement.style.width=rootElementWidth+'px';\n if (isMobile()) {\n rootElement.style.fontSize = '11px';\n }\n\n // 判断当前tooltip范围是否与tooltip重合\n const { x1: menuLeft, x2: menuRight, y1: menuTop, y2: menuBottom } = table.stateManager.menu.bounds;\n const tooltipLeft = tooltipX;\n const tooltipRight = tooltipLeft + rootElementWidth;\n const tooltipTop = tooltipY;\n const tooltipBottom = tooltipLeft + rootElementHeight;\n if (\n table.stateManager.menu.isShow &&\n menuLeft < tooltipRight &&\n menuRight > tooltipLeft &&\n menuBottom > tooltipTop &&\n menuTop < tooltipBottom\n ) {\n return false;\n }\n return true;\n }\n return false;\n }\n private getComputedPosition(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement },\n confine?: boolean,\n arrowMark?: boolean\n ) {\n const rootElement = this._rootElement;\n const rect = table.getCellRangeRelativeRect({ col, row });\n const { x: parentX, y: parentY } = table.internalProps.tooltip.parentElement.getBoundingClientRect();\n const {\n width: containerWidth,\n height: containerHeight,\n x,\n y\n } = table.internalProps.element.getBoundingClientRect();\n // const { width: containerWidth, height: containerHeight } = document.body.getBoundingClientRect();\n const { width } = rect;\n // 边界碰撞检测\n let tooltipY: number;\n let tooltipX: number;\n //设置最宽尺寸\n const maxWidth = Math.min(containerWidth * 0.8, width * 4);\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth; //Math.min(Math.max(rootElement.clientWidth, width), maxWidth);\n const rootElementHeight = rootElement.clientHeight;\n // this._triangleElement.setAttribute('style', '');\n const triangleHeight = arrowMark ? 6 : 0;\n if (position) {\n tooltipX = position.x;\n tooltipY = position.y + triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.top = '-5px';\n } else if (referencePosition) {\n let placement = referencePosition.placement ?? Placement.bottom;\n const referenceXMiddle = referencePosition.rect.left + referencePosition.rect.width / 2;\n const referenceYMiddle = referencePosition.rect.top + referencePosition.rect.height / 2;\n const referenceTop = referencePosition.rect.top;\n const referenceBottom = referencePosition.rect.bottom;\n const referenceLeft = referencePosition.rect.left;\n const referenceRight = referencePosition.rect.right;\n\n let callCount = 0;\n /** 根据placement计算弹出框的位置 躲避策略[dom的这块先去除 dom可以超出显示]:根据顺时针方向依次检测placement */\n const adjustPosition = () => {\n callCount++;\n if (callCount >= 4) {\n return;\n }\n this.removeStyleFromTriangle();\n if (placement === Placement.top) {\n tooltipX = referenceXMiddle - rootElementWidth / 2;\n tooltipY = referenceTop - rootElementHeight - triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.bottom = '-5px';\n\n // 判断如果超出左右范围则靠边显示\n if (confine && tooltipY < 0) {\n placement = Placement.right;\n adjustPosition();\n }\n } else if (placement === Placement.bottom) {\n tooltipX = referenceXMiddle - rootElementWidth / 2;\n tooltipY = referenceBottom + triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.top = '-5px';\n if (confine && tooltipY + rootElementHeight > containerHeight) {\n placement = Placement.left;\n adjustPosition();\n }\n } else if (placement === Placement.left) {\n tooltipY = referenceYMiddle - rootElementHeight / 2;\n tooltipX = referenceLeft - rootElementWidth - triangleHeight;\n this._triangleElement.style.top = '50%';\n this._triangleElement.style.marginTop = '-5px';\n this._triangleElement.style.right = '-5px';\n if (confine && tooltipX < 0) {\n placement = Placement.top;\n adjustPosition();\n }\n } else if (placement === Placement.right) {\n tooltipY = referenceYMiddle - rootElementHeight / 2;\n tooltipX = referenceRight + triangleHeight;\n this._triangleElement.style.top = '50%';\n this._triangleElement.style.marginTop = '-5px';\n this._triangleElement.style.left = '-5px';\n if (confine && tooltipX + rootElementWidth > containerWidth) {\n placement = Placement.bottom;\n adjustPosition();\n }\n }\n };\n adjustPosition();\n }\n // 判断如果超出左右范围则靠边显示\n if (confine) {\n if (tooltipX < 0) {\n tooltipX = 0;\n } else if (tooltipX + rootElement.offsetWidth > containerWidth) {\n tooltipX = containerWidth - rootElement.offsetWidth;\n }\n }\n return {\n x: tooltipX + x - parentX,\n y: tooltipY + y - parentY\n };\n }\n private removeStyleFromTriangle() {\n this._triangleElement.style.left = '';\n this._triangleElement.style.right = '';\n this._triangleElement.style.top = '';\n this._triangleElement.style.bottom = '';\n this._triangleElement.style.marginLeft = '';\n this._triangleElement.style.marginTop = '';\n }\n _locate(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n },\n confine?: boolean\n ) {\n const tooltipPosition = this.getComputedPosition(table, col, row, position, referencePosition, confine);\n const tooltipX = tooltipPosition.x;\n const tooltipY = tooltipPosition.y;\n this._rootElement.style.left = `${tooltipX}px`;\n this._rootElement.style.top = `${tooltipY}px`;\n }\n}\n","import { Env } from '../../../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-tooltip-styleSheet';\n styleElement.textContent = `\n@keyframes vtable__bubble-tooltip-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__bubble-tooltip-element {\n\tposition: absolute;\n\t\n\t// pointer-events: none;\n\t//user-select: none;\n\tmax-width: 300px;\n\tz-index: 99999;\n\n\tbackground: #FFFFFF;\n border: 1px solid #E6E8ED;\n box-sizing: border-box;\n border-radius: 4px;\n box-shadow: 0px 2px 4px rgb(27 31 35 / 8%);\n color: #141414;\n font-size: 13px;\n}\n.vtable__bubble-tooltip-element--hidden {\n\topacity: 0;\n pointer-events: none;\n\tuser-select: none;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n}\n.vtable__bubble-tooltip-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__bubble-tooltip-element--shown-animation 150ms ease-out;\n}\n.vtable__bubble-tooltip-element__content {\n\t/* font-size: .75rem; */\n\tpadding: 6px 8px;\n\tmin-height: 1em;\n\tline-height: 1.5;\n\twidth: 100%;\n\tdisplay: block;\n\twhite-space: pre-wrap;\n\tmargin: 0;\n\tbox-sizing: border-box;\n\toverflow: auto;\n\tword-wrap: break-word;\n\tposition: relative;\n\tbackground-color: #FFF;\n\tz-index: 2;\n\tborder-radius: 4px;\n}\n/* WebKit Microsoft Edge(新版): */\n.vtable__bubble-tooltip-element__content::-webkit-scrollbar {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n/* Opera Firefox */\n.vtable__bubble-tooltip-element__content > scrollbar-track {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n/* Internet Explorer 11 和 Microsoft Edge(旧版) */\n.vtable__bubble-tooltip-element__content > scrollbar {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n.vtable__bubble-tooltip-element__triangle {\n\t/* font-size: .75rem; */\n\tposition: absolute;\n\twidth: 10px;\n\theight: 10px;\n\tdisplay: block;\n\ttransform: rotate(45deg);\n transform-origin: 50% 50% 0;\n\tz-index: 1;\n\tbackground-color: #FFF;\n\tborder: 1px solid #E6E8ED;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import { BaseTooltip } from './BaseTooltip';\nimport { BubbleTooltipElement } from './logic/BubbleTooltipElement';\n\n// export class Tooltip extends BaseTooltip {\n// createTooltipElementInternal(): TooltipElement {\n// return new TooltipElement();\n// }\n// }\n\nexport class BubbleTooltip extends BaseTooltip {\n createTooltipElementInternal(): BubbleTooltipElement {\n return new BubbleTooltipElement();\n }\n}\n","import type { CellRange, RectProps } from '../../ts-types';\nimport type { Placement } from '../../ts-types';\nimport type { BaseTooltip } from './BaseTooltip';\nimport { BubbleTooltip } from './Tooltip';\nimport { cellInRange } from '../../tools/helper';\nimport { isMobile } from '../../tools/util';\n// import { DG_EVENT_TYPE } from '../core/DG_EVENT_TYPE';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isFunction } from '@visactor/vutils';\nconst TOOLTIP_INSTANCE_FACTORY = {\n // tooltip(table: BaseTableAPI): BaseTooltip {\n // return new Tooltip(table);\n // },\n 'bubble-tooltip': function (table: BaseTableAPI): BaseTooltip {\n return new BubbleTooltip(table);\n }\n};\ntype AttachInfo = {\n instance?: BaseTooltip;\n range: CellRange;\n tooltipOptions: TooltipOptions;\n};\nexport interface ITooltipHandler {\n new (table: BaseTableAPI, confine: boolean): TooltipHandler;\n}\n\nexport class TooltipHandler {\n private _table: BaseTableAPI;\n private _tooltipInstances?: { [type: string]: BaseTooltip };\n private _attachInfo?: AttachInfo | null;\n private confine?: boolean; //弹出框是否需要限定在canvas区域\n constructor(table: BaseTableAPI, confine: boolean) {\n this._table = table;\n this._tooltipInstances = {};\n this._bindTableEvent(table);\n this.confine = confine;\n }\n release(): void {\n const tooltipInstances = this._tooltipInstances;\n for (const k in tooltipInstances) {\n tooltipInstances[k]?.release?.();\n }\n delete this._tooltipInstances;\n this._attachInfo = null;\n }\n _bindToCell(col: number, row: number, tooltipOptions?: TooltipOptions): void {\n const info = this._attachInfo;\n const instance = this._getTooltipInstanceInfo(col, row);\n if (info && (!instance || info.instance !== instance)) {\n info.instance?.unbindTooltipElement();\n this._attachInfo = null;\n }\n if (!instance) {\n return;\n }\n // const { instance, info: tooltipInstanceInfo } = instanceInfo;\n const attach = instance && instance.bindTooltipElement(col, row, tooltipOptions, this.confine);\n if (attach) {\n const range = this._table.getCellRange(col, row);\n this._attachInfo = { range, instance, tooltipOptions };\n }\n }\n _move(col: number, row: number, tooltipOptions: TooltipOptions): void {\n const info = this._attachInfo;\n if (!info || !cellInRange(info.range, col, row)) {\n return;\n }\n const { instance } = info;\n instance?.moveTooltipElement(col, row, tooltipOptions, this.confine);\n }\n moveToPosition(\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n }\n ): void {\n const info = this._attachInfo;\n if (!info || !cellInRange(info.range, col, row)) {\n return;\n }\n const { instance } = info;\n this._attachInfo.tooltipOptions.position = position;\n this._attachInfo.tooltipOptions.referencePosition = referencePosition;\n instance?.locateTooltipElement(col, row, position, referencePosition, this.confine);\n }\n _unbindFromCell(): void {\n const info = this._attachInfo;\n if (!info) {\n return;\n }\n const { instance } = info;\n instance?.unbindTooltipElement();\n this._attachInfo = null;\n }\n _isBindCell(col: number, row: number): boolean {\n const info = this._attachInfo;\n if (!info) {\n return false;\n }\n return cellInRange(info.range, col, row);\n }\n _bindTableEvent(table: BaseTableAPI): void {\n // (table.options.hover?.isShowTooltip || table.options.tooltip?.isShowOverflowTextTooltip) &&\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, e => {\n //移动端不监听mousemove事件 (修改移动端tooltip时加的isMobile判断)\n if (isMobile()) {\n return;\n }\n // dropDownMenu区域不响应\n const { x1: left, x2: right, y1: top, y2: bottom } = table.stateManager.menu.bounds;\n if (\n table.stateManager.menu.isShow &&\n typeof e.x === 'number' &&\n typeof e.y === 'number' &&\n e.x > left &&\n e.x < right &&\n e.y > top &&\n e.y < bottom\n ) {\n return;\n }\n const { col, row } = e;\n this.showTooltip(col, row);\n // if (e.related) {\n // if (this._isBindCell(col, row)) {\n // return;\n // }\n // }\n });\n table.on(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, e => {\n //移动端不监听mousemove事件 (修改移动端tooltip时加的isMobile判断)\n if (isMobile()) {\n return;\n }\n if (this._attachInfo?.tooltipOptions?.referencePosition) {\n const position = this._attachInfo.tooltipOptions.referencePosition;\n const { event } = e;\n const { left, right, top, bottom } = position.rect;\n const abstractPos = table._getMouseAbstractPoint(event, false);\n if (\n !(\n abstractPos.inTable &&\n abstractPos.x >= left - 5 &&\n abstractPos.x <= right + 5 &&\n abstractPos.y >= top - 5 &&\n abstractPos.y <= bottom + 5\n )\n ) {\n // 这里加5px的判断buffer\n this._unbindFromCell();\n }\n }\n // dropDownMenu区域不响应\n if (this._attachInfo && table.stateManager.menu.isShow) {\n this._bindToCell(e.col, e.row);\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, e => {\n // if (e.related) {\n // if (this._isBindCell(e.related.col, e.related.row)) {\n // return;\n // }\n // }\n this._unbindFromCell();\n });\n table.on(TABLE_EVENT_TYPE.SELECTED_CELL, e => {\n if (this._isBindCell(e.col, e.row)) {\n this._unbindFromCell();\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, e => {\n this._unbindFromCell();\n });\n table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n this._unbindFromCell();\n // const info = this._attachInfo;\n // if (info?.tooltipOptions && info?.range?.start) {\n // const { col, row } = info.range.start;\n // const rect = table.getCellRangeRelativeRect({ col, row });\n // info.tooltipOptions.referencePosition.rect = rect;\n // this._move(info.range.start.col, info.range.start.row, info.tooltipOptions);\n // }\n });\n }\n showTooltip(col: number, row: number) {\n let tooltipOption;\n const table = this._table;\n const headerDescription = table.getHeaderDescription(col, row);\n if (headerDescription) {\n const rect = table.getCellRangeRelativeRect({ col, row });\n tooltipOption = {\n content: headerDescription,\n referencePosition: {\n placement: table.internalProps.tooltip.position,\n rect\n },\n disappearDelay: table.internalProps.tooltip.overflowTextTooltipDisappearDelay ?? 0,\n style: table.theme.tooltipStyle\n };\n } else if (\n isFunction(table.internalProps.tooltip?.isShowOverflowTextTooltip)\n ? table.internalProps.tooltip.isShowOverflowTextTooltip(col, row, table)\n : table.internalProps.tooltip.isShowOverflowTextTooltip\n ) {\n const overflowText = table.getCellOverflowText(col, row);\n const rect = table.getCellRangeRelativeRect({ col, row });\n if (overflowText) {\n tooltipOption = {\n content: headerDescription\n ? `${headerDescription}\n ${overflowText}`\n : overflowText,\n referencePosition: {\n placement: table.internalProps.tooltip.position,\n rect\n },\n disappearDelay: table.internalProps.tooltip.overflowTextTooltipDisappearDelay ?? 0,\n style: table.theme.tooltipStyle\n };\n }\n }\n if (tooltipOption) {\n this._bindToCell(col, row, tooltipOption);\n } else {\n this._unbindFromCell();\n }\n }\n _getTooltipInstanceInfo(col: number, row: number): BaseTooltip | null {\n const table = this._table;\n const tooltipInstances = this._tooltipInstances;\n // const info = getTooltipInstanceInfo(table, col, row, tooltipOptions);\n // if (!info) {\n // return null;\n // }\n const tooltipType = 'bubble-tooltip';\n // const { tooltipType } = info;\n const instance =\n (tooltipInstances && tooltipInstances[tooltipType]) ||\n (tooltipInstances && (tooltipInstances[tooltipType] = TOOLTIP_INSTANCE_FACTORY[tooltipType](table)));\n return instance;\n }\n isBinded(tooltipOptions: TooltipOptions) {\n if (JSON.stringify(tooltipOptions) === JSON.stringify(this._attachInfo?.tooltipOptions)) {\n return true;\n }\n return false;\n }\n}\n","import { Factory } from '../core/factory';\nimport { getAxisConfigInPivotChart } from '../layout/chart-helper/get-axis-config';\nimport { CartesianAxis } from './axis/axis';\nimport { computeAxisComponentHeight, computeAxisComponentWidth } from './axis/get-axis-component-size';\nimport { EmptyTip } from './empty-tip/empty-tip';\nimport { createLegend } from './legend/create-legend';\nimport { MenuHandler } from './menu/dom/MenuHandler';\nimport { Title } from './title/title';\nimport { TooltipHandler } from './tooltip/TooltipHandler';\n\nexport const registerAxis = () => {\n Factory.registerComponent('axis', CartesianAxis);\n Factory.registerFunction('computeAxisComponentWidth', computeAxisComponentWidth);\n Factory.registerFunction('computeAxisComponentHeight', computeAxisComponentHeight);\n Factory.registerFunction('getAxisConfigInPivotChart', getAxisConfigInPivotChart);\n};\n\nexport const registerEmptyTip = () => {\n Factory.registerComponent('emptyTip', EmptyTip);\n};\n\nexport const registerLegend = () => {\n Factory.registerFunction('createLegend', createLegend);\n};\n\nexport const registerMenu = () => {\n Factory.registerComponent('menuHandler', MenuHandler);\n};\n\nexport const registerTitle = () => {\n Factory.registerComponent('title', Title);\n};\n\nexport const registerTooltip = () => {\n Factory.registerComponent('tooltipHandler', TooltipHandler);\n};\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { ListTable } from '../ListTable';\nimport { Group } from '../scenegraph/graphic/group';\nimport { updateCell } from '../scenegraph/group-creater/cell-helper';\nimport type { Graphic } from './../vrender';\nimport { createRect } from './../vrender';\nimport { Factory } from '../core/factory';\nimport { getTargetCell } from '../event/util';\n\nexport interface IListTreeStickCellPlugin {\n new (table: ListTable): ListTreeStickCellPlugin;\n}\n\nexport class ListTreeStickCellPlugin {\n table: ListTable;\n titleRows: number[] = [];\n showedTitleRows: number[] = [];\n rowNow: number = -1;\n skipStartRow: number = -1;\n skipEndRow: number = -1;\n\n constructor(table: ListTable) {\n this.table = table;\n\n this.table.on('scroll', e => {\n if (e.scrollDirection !== 'vertical') {\n return;\n }\n this.updateGroupTitle();\n });\n\n this.table.on('tree_hierarchy_state_change', e => {\n this.updateGroupTitle();\n });\n\n this.table.on('resize_column', e => {\n this.updateGroupTitle();\n });\n }\n\n updateGroupTitle() {\n // this.updateGroupTitleInfo();\n if (this.table.scrollTop === 0) {\n // do nothing\n this.titleRows = [];\n this.showedTitleRows = [];\n } else if (\n this.skipStartRow !== -1 &&\n this.skipEndRow !== -1 &&\n this.skipStartRow !== this.table.scenegraph.proxy.bodyTopRow - 1\n ) {\n if (\n this.table.scenegraph.proxy.screenTopRow <= this.skipStartRow ||\n this.table.scenegraph.proxy.screenTopRow >= this.skipEndRow\n ) {\n this.skipStartRow = -1;\n this.skipEndRow = -1;\n this.updateGroupTitleInfo();\n } else {\n // const row = this.table.scenegraph.proxy.screenTopRow + titleRows.length;\n // nowRow = row;\n // renderLast = true;\n // do nothing\n }\n } else {\n this.skipStartRow = -1;\n this.skipEndRow = -1;\n this.updateGroupTitleInfo();\n }\n\n this.updateScenegraph();\n }\n\n updateGroupTitleInfo() {\n this.rowNow = this.table.scenegraph.proxy.screenTopRow + this.titleRows.length;\n const recordIndex = this.table.getRecordIndexByCell(0, this.rowNow); // [0, 0, 6]/0\n const nextRecordIndex = this.table.getRecordIndexByCell(0, this.rowNow + 1);\n this.getTitleRowsByRecordIndex(recordIndex, nextRecordIndex);\n }\n\n getTitleRowsByRecordIndex(recordIndex: number | number[], nextRecordIndex: number | number[]) {\n const titleRecords = [];\n if (!isArray(recordIndex)) {\n recordIndex = [recordIndex];\n }\n if (!isArray(nextRecordIndex)) {\n nextRecordIndex = [nextRecordIndex];\n }\n\n for (let i = 0; i < recordIndex.length; i++) {\n const index = recordIndex.slice(0, i + 1);\n const record = this.table.dataSource.getRaw(index as unknown as number);\n titleRecords.push(record);\n }\n\n const titleRows = [];\n // const isTitle = !(recordIndex.length === (this.table.options.groupBy as any).length + 1);\n const isTitle = nextRecordIndex.length === recordIndex.length + 1;\n let titleIndex = recordIndex.slice(0, !isTitle ? recordIndex.length - 1 : recordIndex.length);\n const currentIndexedData = this.table.dataSource.currentIndexedData;\n const startIndex = this.rowNow - this.table.columnHeaderLevelCount;\n\n for (let i = startIndex; i >= 0; i--) {\n const currentIndex = currentIndexedData[i];\n if (isArray(currentIndex) && titleIndex.length === currentIndex.length) {\n let isMatch = true;\n for (let j = 0; j < currentIndex.length; j++) {\n if (currentIndex[j] !== titleIndex[j]) {\n isMatch = false;\n break;\n }\n }\n if (isMatch) {\n titleRows.push(i + this.table.columnHeaderLevelCount);\n titleIndex = titleIndex.slice(0, titleIndex.length - 1);\n }\n } else if (currentIndex === recordIndex[0]) {\n titleRows.push(i + this.table.columnHeaderLevelCount);\n break;\n }\n }\n\n this.titleRows = titleRows.reverse();\n }\n\n updateScenegraph() {\n const { table } = this;\n const { shadowGroup, shadowGroupFrozen } = prepareShadowRoot(table);\n\n this.showedTitleRows.length = 0;\n let skip = 0;\n for (let col = 0; col < table.colCount; col++) {\n let colGroup;\n if (col < table.frozenColCount) {\n colGroup = new Group({\n x: table.getColsWidth(0, col - 1),\n y: table.getFrozenRowsHeight()\n });\n shadowGroupFrozen.add(colGroup);\n } else {\n colGroup = new Group({\n x: table.getColsWidth(table.frozenColCount, col - 1),\n y: table.getFrozenRowsHeight()\n });\n shadowGroup.add(colGroup);\n }\n colGroup.col = col;\n for (let i = 0; i < this.titleRows.length; i++) {\n const row = this.titleRows[i];\n if (isSkipRow(row, this.rowNow, table.scenegraph.proxy.screenTopRow, this.titleRows)) {\n // skipOne = true;\n col === 0 && skip++;\n continue;\n }\n if (col === 0) {\n this.showedTitleRows.push(row);\n }\n const cell = table.scenegraph.getCell(col, row);\n if (cell.role === 'cell') {\n const newCell = cloneGraphic(cell);\n newCell.setAttributes({\n y: i * 40\n });\n colGroup.add(newCell);\n } else {\n // create a fake cellGroup for title\n const newCell = updateCell(col, row, table, true, true);\n newCell.setAttributes({\n y: i * 40\n });\n colGroup.add(newCell);\n }\n }\n }\n\n if (skip > 0 && this.skipStartRow === -1 && this.skipEndRow === -1) {\n this.skipStartRow = table.scenegraph.proxy.screenTopRow - 1;\n this.skipEndRow = table.scenegraph.proxy.screenTopRow + 1;\n }\n }\n}\n\nfunction isSkipRow(row: number, topRow: number, screenTopRow: number, titleRows: number[]) {\n if (row === topRow && row !== screenTopRow + titleRows.length - 1) {\n return true;\n }\n\n const rowIndex = titleRows.indexOf(row);\n const rowLimit = screenTopRow + rowIndex + 1;\n if (row === rowLimit && row < topRow) {\n return true;\n }\n\n return false;\n}\n\nfunction cloneGraphic(graphic: Graphic) {\n const newGraphic = graphic.clone();\n (newGraphic as any).role = (graphic as any).role;\n (newGraphic as any).col = (graphic as any).col;\n (newGraphic as any).row = (graphic as any).row;\n (newGraphic as any).mergeStartCol = (graphic as any).mergeStartCol;\n (newGraphic as any).mergeStartRow = (graphic as any).mergeStartRow;\n (newGraphic as any).mergeEndCol = (graphic as any).mergeEndCol;\n (newGraphic as any).mergeEndRow = (graphic as any).mergeEndRow;\n (newGraphic as any).contentWidth = (graphic as any).contentWidth;\n (newGraphic as any).contentHeight = (graphic as any).contentHeight;\n\n if ((newGraphic as any).role === 'cell') {\n // hack for vrender not support shadow group pick\n const hackRect = createRect({\n x: 0,\n y: 0,\n width: newGraphic.attribute.width,\n height: newGraphic.attribute.height\n });\n newGraphic.add(hackRect);\n }\n\n if (graphic.type === 'group') {\n const newGroup = newGraphic as Group;\n graphic.forEachChildren(child => {\n const newChild = cloneGraphic(child as any);\n newGroup.add(newChild);\n });\n }\n return newGraphic;\n}\n\nfunction prepareShadowRoot(table: ListTable) {\n const colHeaderGroup = table.scenegraph.colHeaderGroup;\n const cornerHeaderGroup = table.scenegraph.cornerHeaderGroup;\n if (!colHeaderGroup.border) {\n const hackBorder = createRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n cursor: 'pointer'\n });\n colHeaderGroup.add(hackBorder);\n colHeaderGroup.border = hackBorder;\n (hackBorder as any).attachShadow(hackBorder.shadowRoot);\n hackBorder.name = 'border-rect';\n\n hackBorder.addEventListener('click', (e: any) => {\n const titleRows = table.listTreeStickCellPlugin.titleRows;\n const { shadowTarget } = e.pickParams;\n const cellGroup = getTargetCell(shadowTarget);\n const { col, row } = cellGroup;\n const rowIndex = titleRows.indexOf(row);\n // table.scrollToCell({ col, row: row - rowIndex });\n scrollToRow(row - rowIndex, table);\n });\n }\n\n if (!cornerHeaderGroup.border) {\n const hackBorder = createRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n cursor: 'pointer'\n });\n cornerHeaderGroup.add(hackBorder);\n cornerHeaderGroup.border = hackBorder;\n (hackBorder as any).attachShadow(hackBorder.shadowRoot);\n hackBorder.name = 'border-rect';\n\n hackBorder.addEventListener('click', (e: any) => {\n const titleRows = table.listTreeStickCellPlugin.titleRows;\n const { shadowTarget } = e.pickParams;\n const cellGroup = getTargetCell(shadowTarget);\n const { col, row } = cellGroup;\n const rowIndex = titleRows.indexOf(row);\n // table.scrollToCell({ col, row: row - rowIndex });\n scrollToRow(row - rowIndex, table);\n });\n }\n\n const shadowGroup = colHeaderGroup.border.shadowRoot;\n const shadowGroupFrozen = cornerHeaderGroup.border.shadowRoot;\n shadowGroup.removeAllChild();\n shadowGroupFrozen.removeAllChild();\n\n return { shadowGroup, shadowGroupFrozen };\n}\n\nfunction scrollToRow(row: number, table: ListTable) {\n const drawRange = table.getDrawRange();\n\n if (isValid(row) && row >= table.frozenRowCount) {\n const frozenHeight = table.getFrozenRowsHeight();\n const top = table.getRowsHeight(0, row - 1);\n table.scrollTop = Math.min(top - frozenHeight, table.getAllRowsHeight() - drawRange.height) - 1;\n }\n table.scenegraph.updateNextFrame();\n}\n\nexport const registerListTreeStickCellPlugin = () => {\n Factory.registerComponent('listTreeStickCellPlugin', ListTreeStickCellPlugin);\n};\n\n// export type IListTreeStickCellPlugin = typeof ListTreeStickCellPlugin;\n","/* eslint-disable sort-imports */\nimport { extend } from './tools/helper';\nimport { chartTypes as plugins } from './plugins/chartModules';\nconst builtin = {};\nexport function get(): { [key: string]: any } {\n return extend(builtin, plugins);\n}\n","import { Group } from '../../graphic/group';\nimport { Chart } from '../../graphic/chart';\nimport * as registerChartTypes from '../../../chartModule';\nimport { getFunctionalProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { IThemeSpec } from './../../../vrender';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nexport function createChartCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n dataValue: string,\n chartModule: any,\n chartSpec: any,\n chartInstance: any,\n dataId: string | Record,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n isShareChartSpec: true,\n isAsync: boolean,\n isNoChartDataRenderNothing: boolean\n) {\n // 获取注册的chart图表类型\n const registerCharts = registerChartTypes.get();\n const ClassType = registerCharts[chartModule];\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n cellGroup.AABBBounds.width(); // TODO 需要底层VRender修改\n // chart\n if ((isNoChartDataRenderNothing && Array.isArray(table.getCellValue(col, row))) || !isNoChartDataRenderNothing) {\n const chartGroup = new Chart(isShareChartSpec, {\n stroke: false,\n x: padding[3],\n y: padding[0],\n // canvas: table.canvas,\n canvas: table.canvas ?? (table.scenegraph.stage.window.getContext().canvas as unknown as HTMLCanvasElement),\n mode: table.options.mode,\n modeParams: table.options.modeParams,\n spec: table.options.specTransformInCell ? table.options.specTransformInCell(chartSpec, col, row) : chartSpec,\n ClassType,\n width: width - padding[3] - padding[1],\n height: height - padding[2] - padding[0],\n chartInstance,\n dataId,\n data: table.getCellValue(col, row) || [],\n cellPadding: padding,\n dpr: table.internalProps.pixelRatio,\n // viewBox: {\n // x1: Math.ceil(cellGroup.globalAABBBounds.x1 + padding[3] + table.scrollLeft),\n // x2: Math.ceil(cellGroup.globalAABBBounds.x1 + width - padding[1] + table.scrollLeft),\n // y1: Math.ceil(cellGroup.globalAABBBounds.y1 + padding[0] + table.scrollTop),\n // y2: Math.ceil(cellGroup.globalAABBBounds.y1 + height - padding[2] + table.scrollTop)\n // },\n axes: table.isPivotChart() ? table.internalProps.layoutMap.getChartAxes(col, row) : [],\n // clipRect: {\n // left: cellGroup.globalAABBBounds.x1 + (table as any).tableX + padding[3],\n // top: cellGroup.globalAABBBounds.y1 + (table as any).tableY + padding[0],\n // width: width - padding[1] - padding[3], //cellGroup.globalAABBBounds.width() - padding[1] - padding[3],\n // height: height - padding[0] - padding[2],\n // },\n tableChartOption: table.options.chartOption,\n col,\n row\n });\n cellGroup.appendChild(chartGroup);\n // 将生成的实例存到layoutMap中 共享\n table.internalProps.layoutMap.setChartInstance(col, row, chartGroup.chartInstance);\n }\n return cellGroup;\n}\n\nexport type CreateChartCellGroup = typeof createChartCellGroup;\n","import type { IThemeSpec } from './../../../vrender';\nimport { Group } from '../../graphic/group';\nimport type { CellInfo, CellRange, CheckboxColumnDefine, CheckboxStyleOption, SparklineSpec } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { isObject } from '@visactor/vutils';\nimport type { CheckboxAttributes } from '@visactor/vrender-components';\nimport { CheckBox } from '@visactor/vrender-components';\nimport { getHierarchyOffset } from '../../utils/get-hierarchy-offset';\nimport { getOrApply } from '../../../tools/helper';\nimport type { CheckboxStyle } from '../../../body-helper/style/CheckboxStyle';\nimport { getProp } from '../../utils/get-prop';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nexport function createCheckboxCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n colWidth: number,\n width: number,\n height: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n define: CheckboxColumnDefine,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n\n let icons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n icons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(icons) && icons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n icons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n }\n\n // checkbox\n const checkboxComponent = createCheckbox(\n col,\n row,\n colWidth - iconWidth,\n width,\n height,\n padding,\n cellTheme,\n define,\n table\n );\n if (checkboxComponent) {\n cellGroup.appendChild(checkboxComponent);\n }\n\n checkboxComponent.render();\n\n width -= padding[1] + padding[3] + iconWidth;\n height -= padding[0] + padding[2];\n if (textAlign === 'center') {\n checkboxComponent.setAttribute(\n 'x',\n padding[3] + cellLeftIconWidth + (width - checkboxComponent.AABBBounds.width()) / 2\n );\n } else if (textAlign === 'right') {\n checkboxComponent.setAttribute('x', padding[3] + cellLeftIconWidth + width - checkboxComponent.AABBBounds.width());\n } else {\n checkboxComponent.setAttribute('x', padding[3] + cellLeftIconWidth);\n }\n\n if (textBaseline === 'middle') {\n checkboxComponent.setAttribute('y', padding[0] + (height - checkboxComponent.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n checkboxComponent.setAttribute('y', padding[0] + height - checkboxComponent.AABBBounds.height());\n } else {\n checkboxComponent.setAttribute('y', padding[0]);\n }\n\n return cellGroup;\n}\n\nfunction createCheckbox(\n col: number,\n row: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n cellTheme: IThemeSpec,\n define: CheckboxColumnDefine,\n table: BaseTableAPI\n) {\n const style = table._getCellStyle(col, row) as CheckboxStyle;\n const size = getProp('size', style, col, row, table);\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', style, col, row, table);\n const defaultFill = getProp('defaultFill', style, col, row, table);\n const defaultStroke = getProp('defaultStroke', style, col, row, table);\n const disableFill = getProp('disableFill', style, col, row, table);\n const checkedFill = getProp('checkedFill', style, col, row, table);\n const checkedStroke = getProp('checkedStroke', style, col, row, table);\n const disableCheckedFill = getProp('disableCheckedFill', style, col, row, table);\n const disableCheckedStroke = getProp('disableCheckedStroke', style, col, row, table);\n const checkIconImage = getProp('checkIconImage', style, col, row, table);\n const indeterminateIconImage = getProp('indeterminateIconImage', style, col, row, table);\n\n const value = table.getCellValue(col, row) as string | { text: string; checked: boolean; disable: boolean } | boolean;\n const dataValue = table.getCellOriginValue(col, row);\n let isChecked;\n let isDisabled;\n let text = (value as string) ?? '';\n if (isObject(value)) {\n isChecked = value.checked;\n isDisabled = value.disable;\n text = value.text ?? '';\n } else if (typeof value === 'boolean') {\n isChecked = value;\n text = '';\n }\n isChecked = table.stateManager.syncCheckedState(col, row, define.field as string | number, isChecked);\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const cellStyle = table._getCellStyle(col, row) as CheckboxStyleOption; // to be fixed\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const { lineClamp } = cellStyle;\n const { checked, disable } = define;\n if (isChecked === undefined || isChecked === null || typeof isChecked === 'function') {\n //isChecked无效值 取全局设置的值\n const globalChecked = getOrApply(checked as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n isChecked = table.stateManager.syncCheckedState(col, row, define.field as string | number, globalChecked);\n }\n const globalDisable = getOrApply(disable as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n const autoColWidth = colWidth === 'auto';\n const autoRowHeight = table.isAutoRowHeight(row);\n\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3] + hierarchyOffset) - size - spaceBetweenTextAndIcon,\n // fill: true,\n textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: autoRowHeight ? -1 : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: hierarchyOffset,\n whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n };\n const testAttribute = cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute;\n const checkboxAttributes: CheckboxAttributes = {\n x: 0,\n y: 0,\n text: testAttribute,\n icon: {\n width: Math.floor(size / 1.4), // icon : box => 10 : 14\n height: Math.floor(size / 1.4)\n },\n box: {\n width: size,\n height: size\n },\n spaceBetweenTextAndIcon,\n disabled: isDisabled ?? globalDisable ?? false\n };\n\n if (isChecked === 'indeterminate') {\n checkboxAttributes.checked = undefined;\n checkboxAttributes.indeterminate = true;\n } else {\n checkboxAttributes.checked = isChecked;\n checkboxAttributes.indeterminate = undefined;\n }\n defaultFill && (checkboxAttributes.box.fill = defaultFill);\n defaultStroke && (checkboxAttributes.box.stroke = defaultStroke);\n disableFill && (checkboxAttributes.box.disableFill = disableFill);\n checkedFill && (checkboxAttributes.box.checkedFill = checkedFill);\n checkedStroke && (checkboxAttributes.box.checkedStroke = checkedStroke);\n disableCheckedFill && (checkboxAttributes.box.disableCheckedFill = disableCheckedFill);\n disableCheckedStroke && (checkboxAttributes.box.disableCheckedStroke = disableCheckedStroke);\n checkIconImage && (checkboxAttributes.icon.checkIconImage = checkIconImage);\n indeterminateIconImage && (checkboxAttributes.icon.indeterminateIconImage = indeterminateIconImage);\n\n const checkbox = new CheckBox(checkboxAttributes);\n checkbox.name = 'checkbox';\n\n return checkbox;\n}\n\nexport type CreateCheckboxCellGroup = typeof createCheckboxCellGroup;\n","import type { IThemeSpec } from './../../../vrender';\nimport { Group } from '../../graphic/group';\nimport type { CellRange, RadioColumnDefine, RadioStyleOption } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { cos, isArray, isBoolean, isNumber, isObject, isValid, merge } from '@visactor/vutils';\nimport type { RadioAttributes } from '@visactor/vrender-components';\nimport { Radio } from '@visactor/vrender-components';\nimport { getHierarchyOffset } from '../../utils/get-hierarchy-offset';\nimport { getOrApply } from '../../../tools/helper';\nimport type { RadioStyle } from '../../../body-helper/style/RadioStyle';\nimport { getProp } from '../../utils/get-prop';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\nexport function createRadioCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n colWidth: number | 'auto',\n width: number,\n height: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n define: RadioColumnDefine,\n range: CellRange\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n lineCap: 'butt',\n\n clip: true,\n\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n // columnGroup?.addChild(cellGroup);\n columnGroup?.addCellGroup(cellGroup);\n }\n\n // radio\n const { width: radioWidth, height: radioHeight } = createRadio(\n col,\n row,\n colWidth,\n width,\n height,\n padding,\n cellTheme,\n define,\n cellGroup,\n range,\n table\n );\n\n // align in cell\n width -= padding[1] + padding[3];\n height -= padding[0] + padding[2];\n cellGroup.forEachChildren((radioComponent: Radio) => {\n if (textAlign === 'center') {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x + (width - radioWidth) / 2);\n } else if (textAlign === 'right') {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x + width - radioWidth);\n } else {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x);\n }\n\n if (textBaseline === 'middle') {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y + (height - radioHeight) / 2);\n } else if (textBaseline === 'bottom') {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y + height - radioHeight);\n } else {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y);\n }\n });\n\n return cellGroup;\n}\n\nexport type CreateRadioCellGroup = typeof createRadioCellGroup;\n\nfunction createRadio(\n col: number,\n row: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n cellTheme: IThemeSpec,\n define: RadioColumnDefine,\n cellGroup: Group,\n range: CellRange,\n table: BaseTableAPI\n) {\n const style = table._getCellStyle(col, row) as RadioStyle;\n let size = getProp('size', style, col, row, table);\n let innerRadius = getProp('innerRadius', style, col, row, table);\n let outerRadius = getProp('outerRadius', style, col, row, table);\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', style, col, row, table);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', style, col, row, table);\n const defaultFill = getProp('defaultFill', style, col, row, table);\n const defaultStroke = getProp('defaultStroke', style, col, row, table);\n const disableFill = getProp('disableFill', style, col, row, table);\n const checkedFill = getProp('checkedFill', style, col, row, table);\n const checkedStroke = getProp('checkedStroke', style, col, row, table);\n const disableCheckedFill = getProp('disableCheckedFill', style, col, row, table);\n const disableCheckedStroke = getProp('disableCheckedStroke', style, col, row, table);\n\n // deal width actual size\n if (isNumber(outerRadius)) {\n size = outerRadius * 2;\n } else {\n outerRadius = Math.round(size / 2);\n }\n if (!isNumber(innerRadius) || innerRadius < 0) {\n innerRadius = Math.round((outerRadius / 7) * 3);\n }\n\n const value = table.getCellValue(col, row) as\n | string\n | boolean\n | string[]\n | { text: string; checked?: boolean; disable?: boolean }\n | { text: string; checked?: boolean; disable?: boolean }[];\n const dataValue = table.getCellOriginValue(col, row);\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const cellStyle = table._getCellStyle(col, row) as RadioStyleOption; // to be fixed\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const { lineClamp } = cellStyle;\n const autoColWidth = colWidth === 'auto';\n const autoRowHeight = table.isAutoRowHeight();\n\n const attribute = {\n // text: text.length === 1 ? text[0] : text,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3] + hierarchyOffset) - size - spaceBetweenTextAndIcon,\n // fill: true,\n textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: autoRowHeight ? -1 : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: hierarchyOffset\n // whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n };\n const testAttribute = cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute;\n const radioAttributes: RadioAttributes = {\n x: 0,\n y: 0,\n text: testAttribute,\n circle: {\n innerRadius,\n outerRadius\n },\n spaceBetweenTextAndIcon\n };\n\n defaultFill && (radioAttributes.circle.fill = defaultFill);\n defaultStroke && (radioAttributes.circle.stroke = defaultStroke);\n disableFill && (radioAttributes.circle.disableFill = disableFill);\n checkedFill && (radioAttributes.circle.checkedFill = checkedFill);\n checkedStroke && (radioAttributes.circle.checkedStroke = checkedStroke);\n disableCheckedFill && (radioAttributes.circle.disableCheckedFill = disableCheckedFill);\n disableCheckedStroke && (radioAttributes.circle.disableCheckedStroke = disableCheckedStroke);\n\n let width = 0;\n let height = 0;\n const direction = define.radioDirectionInCell ?? 'vertical';\n if (isArray(value)) {\n value.forEach((item, index) => {\n const radioComponent = createSingleRadio(\n item,\n dataValue,\n index,\n col,\n row,\n define,\n autoWrapText,\n radioAttributes,\n table\n );\n if (radioComponent) {\n cellGroup.appendChild(radioComponent);\n }\n radioComponent.id = `radio-${range?.start.col ?? col}-${range?.start.row ?? row}-${index}`;\n\n radioComponent.render();\n const bounds = radioComponent.AABBBounds;\n if (direction === 'vertical') {\n radioComponent.setAttribute('y', height);\n height += bounds.height() + (index !== value.length - 1 ? spaceBetweenRadio : 0);\n width = Math.max(width, bounds.width());\n } else if (direction === 'horizontal') {\n radioComponent.setAttribute('x', width);\n width += bounds.width() + (index !== value.length - 1 ? spaceBetweenRadio : 0);\n height = Math.max(height, bounds.height());\n }\n });\n } else {\n const radioComponent = createSingleRadio(\n value,\n dataValue,\n undefined,\n col,\n row,\n define,\n autoWrapText,\n radioAttributes,\n table\n );\n if (radioComponent) {\n cellGroup.appendChild(radioComponent);\n }\n radioComponent.id = `radio-${range?.start.col ?? col}-${range?.start.row ?? row}`;\n radioComponent.render();\n const bounds = radioComponent.AABBBounds;\n width = bounds.width();\n height = bounds.height();\n }\n\n return { width, height };\n}\n\nfunction createSingleRadio(\n value: any,\n dataValue: any,\n indexInCell: number | undefined,\n col: number,\n row: number,\n define: RadioColumnDefine,\n autoWrapText: boolean,\n cellRadioAttributes: RadioAttributes,\n table: BaseTableAPI\n) {\n const isChecked = getChecked(value, dataValue, indexInCell, col, row, define, table);\n const isDisabled = getDisable(value, dataValue, col, row, define, table);\n const text = isObject(value) ? (value as any).text : isBoolean(value) ? '' : value ?? '';\n\n const radioAttributes = merge({}, cellRadioAttributes, {\n checked: isChecked,\n disabled: isDisabled,\n text: {\n text: text.length === 1 ? text[0] : text,\n whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n },\n boundsPadding: 0\n });\n const radio = new Radio(radioAttributes);\n radio.name = 'radio';\n\n return radio;\n}\n\nfunction getChecked(\n value: any,\n dataValue: any,\n indexInCell: number | undefined,\n col: number,\n row: number,\n define: RadioColumnDefine,\n table: BaseTableAPI\n) {\n const radioType = define.radioCheckType ?? 'column';\n let isChecked;\n let globalChecked;\n if (isObject(value)) {\n isChecked = (value as any).checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n isChecked = table.stateManager.syncRadioState(\n col,\n row,\n define.field as string | number,\n radioType,\n indexInCell,\n isChecked\n );\n if (isChecked === undefined || isChecked === null || typeof isChecked === 'function') {\n //isChecked无效值 取全局设置的值\n globalChecked = getOrApply(define.checked as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n isChecked = table.stateManager.syncRadioState(\n col,\n row,\n define.field as string | number,\n radioType,\n indexInCell,\n globalChecked\n );\n }\n\n return isChecked ?? globalChecked ?? false;\n}\n\nfunction getDisable(\n value: any,\n dataValue: any,\n col: number,\n row: number,\n define: RadioColumnDefine,\n table: BaseTableAPI\n) {\n let isDisabled;\n if (isObject(value)) {\n isDisabled = (value as any).disable;\n }\n const globalDisable = getOrApply(define.disable as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n return isDisabled ?? globalDisable ?? false;\n}\n","import type { ILine, ISymbol, IThemeSpec } from './../../../vrender';\nimport { createLine, createSymbol } from './../../../vrender';\nimport { PointScale, LinearScale } from '@visactor/vscale';\nimport { isNumber, isValid } from '@visactor/vutils';\nimport { Group } from '../../graphic/group';\nimport type { CellInfo, SparklineSpec } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { ColumnData } from '../../../ts-types/list-table/layout-map/api';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\nconst xScale: PointScale = new PointScale();\nconst yScale: LinearScale = new LinearScale();\n\nexport function createSparkLineCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n isAsync: boolean\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n\n // chart\n const chartGroup = createSparkLine(col, row, width, height, padding, table);\n if (chartGroup) {\n cellGroup.appendChild(chartGroup);\n }\n\n return cellGroup;\n}\n\nexport type CreateSparkLineCellGroup = typeof createSparkLineCellGroup;\n\nfunction createSparkLine(\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n table: BaseTableAPI\n): Group | undefined {\n //获取场景树对象,根据当前单元格位置更改其位置\n //待定 TODO group需要设置shape属性吗\n let sparklineSpec: SparklineSpec;\n let chartGroup: Group;\n const chartSpecRaw = (table.internalProps.layoutMap.getBody(col, row) as ColumnData).sparklineSpec;\n const dataValue = table.getCellValue(col, row) as unknown as any[];\n\n if (!Array.isArray(dataValue)) {\n return undefined;\n }\n\n const x = padding[3];\n const y = padding[0];\n width -= padding[1] + padding[3];\n height -= padding[0] + padding[2];\n const left = 0;\n // const top = y;\n // const right = x + width;\n const bottom = height;\n if (typeof chartSpecRaw === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: table.getCellOriginValue(col, row) || '',\n value: table.getCellValue(col, row) || '',\n rect: table.getCellRangeRelativeRect(table.getCellRange(col, row)),\n table\n };\n sparklineSpec = chartSpecRaw(arg);\n chartGroup = createChartGroup(sparklineSpec, x, y, width, height);\n } else {\n sparklineSpec = chartSpecRaw;\n chartGroup = createChartGroup(chartSpecRaw, x, y, width, height);\n }\n\n // #region scale对x y轴映射\n const items: { x: number; y: number; defined?: boolean }[] = [];\n const dataItems: any[] = [];\n\n let xField;\n let yField;\n if (typeof sparklineSpec.xField === 'object') {\n xScale.domain(sparklineSpec.xField.domain);\n xField = sparklineSpec.xField.field;\n } else if (typeof sparklineSpec.xField === 'string') {\n const indexValues = dataValue.map((value: any) => value[sparklineSpec.xField as string]);\n xScale.domain(indexValues);\n xField = sparklineSpec.xField;\n } else {\n // xField未配置 data为数值数组的情况\n if (Array.isArray(dataValue)) {\n xScale.domain(Array.from({ length: dataValue.length }, (_, i) => i));\n xField = sparklineSpec.xField;\n }\n }\n xScale.range([0, width]);\n\n if (typeof sparklineSpec.yField === 'object') {\n yScale.domain(sparklineSpec.yField.domain);\n yField = sparklineSpec.yField.field;\n } else if (typeof sparklineSpec.yField === 'string') {\n // string类型 自动计算出domain\n // const values = dataValue.map((value: any) => value[sparklineSpec.yField as string]);\n const values = getYNumbers(dataValue, sparklineSpec.yField as string);\n yScale.domain([Math.min(...values), Math.max(...values)]);\n yField = sparklineSpec.yField;\n } else {\n // yField未配置 检查data是否为数值数组\n if (Array.isArray(dataValue)) {\n const values = getYNumbers(dataValue);\n yScale.domain([Math.min(...values), Math.max(...values)]);\n yField = sparklineSpec.yField;\n }\n }\n yScale.range([0, height]);\n\n if (typeof sparklineSpec.xField === 'object' && Array.isArray(sparklineSpec.xField.domain)) {\n // 如果xField.domain合法,需要按需补充null值点\n const values = dataValue.map((value: any) => value[(sparklineSpec.xField as any).field]);\n const domain = sparklineSpec.xField.domain;\n for (let i = 0; i < domain.length; i++) {\n let valid = false;\n for (let j = 0; j < values.length; j++) {\n // eslint-disable-next-line eqeqeq\n if (domain[i] === values[j]) {\n const data: any = dataValue[j];\n // 无效数据不进行scale,避免null被解析为0\n if (!isValid(data[xField]) || !isValid(data[yField])) {\n break;\n }\n items.push({\n x: left + xScale.scale(data[xField]),\n y: bottom - yScale.scale(data[yField]),\n defined: isValid(data[yField])\n });\n dataItems.push(data); //收集原始数据\n valid = true;\n break;\n }\n }\n\n if (!valid) {\n // 该domain的index没有在数据中,补充无效点\n items.push({\n x: left + xScale.scale(domain[i]),\n y: 0,\n defined: false\n });\n dataItems.push({ [xField]: domain[i], [yField]: null });\n }\n }\n } else {\n for (let i = 0; i < dataValue.length; i++) {\n const data: any = dataValue[i];\n items.push({\n x: left + xScale.scale(xField ? data[xField] : i),\n y: bottom - yScale.scale(yField ? data[yField] : data),\n defined: isValid(yField ? data[yField] : data),\n rawData: data\n } as any);\n dataItems.push(data);\n }\n }\n // #endregion\n\n // 更新线节点属性\n const line = chartGroup.getChildByName('sparkline-line') as ILine;\n if (line) {\n line.setAttribute('points', items);\n }\n (line as any).bandwidth = xScale.step();\n (line as any).min = yScale.range()[0];\n (line as any).max = yScale.range()[1];\n\n // 更新symbol节点属性\n const symbolGroup = chartGroup.getChildByName('sparkline-symbol-group') as ILine;\n if (symbolGroup) {\n const isShowIsolatedPoint = sparklineSpec.pointShowRule === 'isolatedPoint';\n if (sparklineSpec.pointShowRule === 'all') {\n for (let i = 0; i < items.length; i++) {\n const { x, y, defined } = items[i];\n if (defined) {\n const symbol: ISymbol = createSymbol({ x, y });\n symbolGroup.appendChild(symbol);\n }\n }\n } else if (isShowIsolatedPoint) {\n // 处理孤立点显示\n for (let i = 0; i < items.length; i++) {\n const { x, y, defined } = items[i];\n if (defined && (!items[i - 1] || !items[i - 1].defined) && (!items[i + 1] || !items[i + 1].defined)) {\n // 规范孤立数据显示Symbol的spec api\n const symbol: ISymbol = createSymbol({ x, y });\n symbolGroup.appendChild(symbol);\n }\n }\n }\n }\n return chartGroup;\n}\n\nfunction createChartGroup(\n spec: SparklineSpec | ((arg: CellInfo) => SparklineSpec),\n x: number,\n y: number,\n width: number,\n height: number\n): Group {\n let specObj: SparklineSpec;\n if (typeof spec === 'function') {\n // specObj = spec.apply(null, null);\n specObj = spec(null);\n } else {\n specObj = spec;\n }\n // 生成根节点\n const group = new Group({\n x,\n y,\n width,\n height,\n stroke: false,\n fill: false\n });\n group.name = 'sparkline';\n\n if (specObj.type === 'line') {\n // 生成line\n const line = createLine({\n x: 0,\n y: 0,\n curveType: specObj.smooth ? 'monotoneX' : 'linear',\n stroke: specObj.line?.style?.stroke ?? 'blue',\n lineWidth: specObj.line?.style?.strokeWidth ?? 2\n });\n line.name = 'sparkline-line';\n group.addChild(line);\n if (specObj.crosshair) {\n (line as any).hover = specObj.crosshair?.style ?? {\n stroke: '#000',\n interpolate: 'linear'\n };\n }\n\n // 生成symbol\n const symbolGroup = new Group({\n x: 0,\n y: 0,\n width,\n height,\n stroke: false,\n fill: false\n });\n symbolGroup.name = 'sparkline-symbol-group';\n symbolGroup.setTheme({\n symbol: {\n stroke: specObj.point?.style?.stroke ?? '#000',\n lineWidth: specObj.point?.style?.strokeWidth ?? 1,\n fill: specObj.point?.style?.fill ?? '#000',\n size: (specObj.point?.style?.size ?? 3) * 2, // 之前配置的是圆半径\n symbolType: 'circle'\n }\n });\n group.addChild(symbolGroup);\n (symbolGroup as any).hover = specObj.point?.hover ?? false;\n }\n return group;\n}\n\nfunction getYNumbers(data: any[], field?: string): number[] {\n // return data.map((item) => item[field]).filter((item) => isValid(item));\n const numbers = [];\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (isValid(field) && isValid(item[field])) {\n numbers.push(item[field]);\n } else if (!isValid(field) && isValid(item)) {\n numbers.push(item);\n }\n }\n\n return numbers;\n}\n","/* eslint-disable no-undef */\nimport type { Cursor, IImage, IThemeSpec } from './../../../vrender';\nimport { createRect, createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { Group } from '../../graphic/group';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nimport { Icon } from '../../graphic/icon';\nimport { calcStartPosition } from '../../utils/cell-pos';\nimport { _adjustWidthHeight, getCellRange, updateImageDxDy } from './image-cell';\nimport { getFunctionalProp, getProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport { getQuadProps } from '../../utils/padding';\nimport type { CellRange } from '../../../ts-types';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nconst regedIcons = icons.get();\n\nexport function createVideoCellGroup(\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n keepAspectRatio: boolean,\n imageAutoSizing: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n // const margin = getProp('padding', headerStyle, col, row, table);\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n let cellGroup: Group;\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n\n let cellIcons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n cellIcons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(cellIcons) && cellIcons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n cellIcons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n (cellGroup as any)._cellLeftIconWidth = cellLeftIconWidth;\n (cellGroup as any)._cellRightIconWidth = cellRightIconWidth;\n }\n\n // video\n const value = table.getCellValue(col, row);\n const video = document.createElement('video');\n video.addEventListener('loadeddata', (): void => {\n if (imageAutoSizing) {\n _adjustWidthHeight(col, row, video.videoWidth, video.videoHeight, table.scenegraph, padding, cellGroup);\n }\n // const width = cellGroup.attribute.width;\n // const height = cellGroup.attribute.height;\n // 更新宽高\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n if (keepAspectRatio) {\n const { width: videoWidth, height: videoHeight } = calcKeepAspectRatioSize(\n video.videoWidth,\n video.videoHeight,\n cellWidth - padding[1] - padding[3],\n cellHeight - padding[0] - padding[2]\n );\n const pos = calcStartPosition(\n 0,\n 0,\n cellWidth,\n cellHeight,\n videoWidth,\n videoHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n image.setAttributes({\n width: videoWidth,\n height: videoHeight,\n x: pos.x,\n y: pos.y,\n dx: 0\n });\n } else {\n // const { width: cellWidth, height: cellHeight } = getCellRange(cellGroup, table);\n image.setAttributes({\n x: padding[3],\n y: padding[0],\n width: cellWidth - padding[1] - padding[3],\n height: cellHeight - padding[2] - padding[0],\n dy: 0\n });\n }\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n\n const left = 0;\n const top = 0;\n // 播放按钮\n // const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n // const anchorX =\n // left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n // const anchorY =\n // top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n const { width, height } = getCellRange(cellGroup, table);\n const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n const anchorX =\n left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n const anchorY =\n top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n\n const playIcon: Icon = new Icon({\n x: anchorX - iconSize / 2,\n y: anchorY - iconSize / 2,\n width: iconSize,\n height: iconSize,\n image: (regedIcons.play as any).svg,\n cursor: (regedIcons.play as any).cursor\n });\n playIcon.name = 'play-icon';\n cellGroup.appendChild(playIcon);\n // 触发重绘\n table.scenegraph.updateNextFrame();\n });\n video.onerror = (): void => {\n // image.setAttribute('image', (regedIcons.damage_pic as any).svg);\n (image as any).image = (regedIcons.damage_pic as any).svg;\n };\n video.src = value;\n video.setAttribute('preload', 'auto');\n\n const image: IImage = createImage({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3],\n height: height - padding[2] - padding[0],\n image: video as any,\n cursor: 'pointer' as Cursor\n });\n image.name = 'image';\n image.keepAspectRatio = keepAspectRatio;\n image.textAlign = textAlign;\n image.textBaseline = textBaseline;\n cellGroup.appendChild(image);\n\n return cellGroup;\n}\n\nexport type CreateVideoCellGroup = typeof createVideoCellGroup;\n","/* eslint-disable no-undef */\nimport type { IThemeSpec, Group as VGroup } from './../../../vrender';\nimport { createArc } from './../../../vrender';\nimport { isValid } from '@visactor/vutils';\nimport { Group } from '../../graphic/group';\n// import { parseFont } from '../../utils/font';\nimport { getFunctionalProp } from '../../utils/get-prop';\nimport { createCellContent } from '../../utils/text-icon-layout';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getStyleTheme } from '../../../core/tableHelper';\nimport type { CellRange } from '../../../ts-types';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\n/**\n * @description: 创建单元格场景节点\n * @param {Group} columnGroup 列Group\n * @param {number} xOrigin 起始x坐标\n * @param {number} yOrigin 起始y坐标\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @param {number | 'auto'} colWidth 配置列宽\n * @param {number} padding 单元格padding\n * @param {CanvasTextAlign} textAlign\n * @param {CanvasTextBaseline} textBaseline\n * @param {boolean} noWrap 不进行折行(default column type)\n * @param {IThemeSpec} cellTheme 单元格主题\n * @return {Group}\n */\nexport function createCellGroup(\n table: BaseTableAPI,\n value: string,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n // rowHeight: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n customElementsGroup: VGroup,\n renderDefault: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n): Group {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n const autoRowHeight = table.isAutoRowHeight(row);\n const autoColWidth = colWidth === 'auto';\n const autoWrapText = headerStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const lineClamp = headerStyle.lineClamp;\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n let cellGroup;\n if (isAsync) {\n cellGroup = table.scenegraph.getCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n lineCap: 'butt',\n\n clip: true,\n\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n if (customElementsGroup) {\n cellGroup.appendChild(customElementsGroup);\n }\n if (renderDefault) {\n const textStr: string = value;\n let icons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n icons = table.getCellIcons(iconCol, iconRow);\n }\n\n createCellContent(\n cellGroup,\n icons,\n textStr,\n padding as any,\n autoColWidth,\n autoRowHeight,\n autoWrapText,\n typeof lineClamp === 'number' ? lineClamp : undefined,\n // autoColWidth ? 0 : colWidth,\n // table.getRowHeight(row),\n // cellWidth,\n // cellHeight,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n textAlign,\n textBaseline,\n table,\n cellTheme,\n range\n );\n\n if ((cellTheme as any)?._vtable?.marked) {\n const mark = createArc({\n x: cellGroup.attribute.width,\n y: 0,\n startAngle: Math.PI / 2,\n endAngle: Math.PI,\n outerRadius: 6,\n fill: '#3073F2',\n pickable: false\n });\n mark.name = 'mark';\n\n cellGroup.appendChild(mark);\n }\n }\n if (customElementsGroup) {\n cellGroup.setAttributes({\n width: Math.max(cellGroup.attribute.width, customElementsGroup.attribute.width ?? 0),\n height: Math.max(cellGroup.attribute.height, customElementsGroup.attribute.height ?? 0)\n });\n }\n return cellGroup;\n}\n\nexport type CreateTextCellGroup = typeof createCellGroup;\n\n// /**\n// * @description: 获取函数式赋值的样式,记录在cellTheme中\n// * @param {BaseTableAPI} table\n// * @param {number} col\n// * @param {number} row\n// * @param {IThemeSpec} cellTheme\n// * @return {IThemeSpec | undefined}\n// */\n// export function getCellTheme(\n// table: BaseTableAPI,\n// col: number,\n// row: number,\n// cellTheme?: IThemeSpec\n// ): IThemeSpec | undefined {\n// // get column header style\n// const headerStyle = table._getCellStyle(col, row);\n\n// const theme = getStyleTheme(headerStyle, table, col, row, getFunctionalProp).theme;\n\n// for (const prop in theme.group) {\n// if (isValid(theme.group[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!cellTheme.group) {\n// cellTheme.group = {};\n// }\n\n// cellTheme.group[prop] = theme.group[prop];\n// }\n// }\n\n// for (const prop in theme.text) {\n// if (isValid(theme.text[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!cellTheme.text) {\n// cellTheme.text = {};\n// }\n\n// cellTheme.text[prop] = theme.text[prop];\n// }\n// }\n\n// for (const prop in theme._vtable) {\n// if (isValid(theme._vtable[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!(cellTheme as any)._vtable) {\n// (cellTheme as any)._vtable = {};\n// }\n\n// (cellTheme as any)._vtable[prop] = theme._vtable[prop];\n// }\n// }\n// return cellTheme;\n// }\n","import { createRect, createLine } from './../../../vrender';\nimport type { ProgressBarStyle } from '../../../body-helper/style/ProgressBarStyle';\nimport { str, getOrApply } from '../../../tools/helper';\nimport { Group } from '../../graphic/group';\nimport { getProp } from '../../utils/get-prop';\nimport { getQuadProps } from '../../utils/padding';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { isNumber } from '@visactor/vutils';\nimport type { CellRange, StylePropertyFunctionArg } from '../../../ts-types';\n\nexport function createProgressBarCell(\n progressBarDefine: {\n min?: number | ((args: StylePropertyFunctionArg) => number);\n max?: number | ((args: StylePropertyFunctionArg) => number);\n barType?: 'default' | 'negative' | 'negative_no_axis'; // 进度图类型\n dependField?: string; // 指定其他列数据(风神使用),\n },\n style: ProgressBarStyle,\n width: number,\n // height: number,\n value: string,\n dataValue: string,\n col: number,\n row: number,\n padding: [number, number, number, number],\n table: BaseTableAPI,\n range?: CellRange\n) {\n if (progressBarDefine.dependField) {\n dataValue = (table.getCellOriginRecord(col, row) as any)?.[progressBarDefine.dependField] ?? dataValue;\n }\n\n progressBarDefine.barType = progressBarDefine.barType ?? 'default';\n progressBarDefine.min =\n getOrApply(progressBarDefine.min, {\n col,\n row,\n table,\n value,\n dataValue,\n cellHeaderPaths: undefined\n }) ?? 0;\n progressBarDefine.max =\n getOrApply(progressBarDefine.max, {\n col,\n row,\n table,\n value,\n dataValue,\n cellHeaderPaths: undefined\n }) ?? progressBarDefine.min + 100;\n let height = 0;\n if (range) {\n height = table.getRowsHeight(range.start.row, range.end.row);\n } else {\n height = table.getRowHeight(row);\n }\n let contentWidth = width;\n let contentHeight = height;\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n _contentOffset = table.theme._contentOffset;\n }\n const percentCompleteBarGroup = new Group({\n x: -_contentOffset,\n y: -_contentOffset,\n width: contentWidth,\n height: contentHeight\n });\n percentCompleteBarGroup.name = 'progress-bar';\n\n const {\n showBar,\n barColor,\n barBgColor,\n // bgColor,\n barPositiveColor,\n barNegativeColor,\n barAxisColor,\n barRightToLeft,\n showBarMark,\n barMarkPositiveColor,\n barMarkNegativeColor,\n barMarkWidth,\n barMarkPosition\n } = style;\n let { barHeight, barBottom, barPadding } = style;\n // const { col, row, dataValue: originalValue } = context;\n\n // 完善四元组\n if (barPadding.length === 1) {\n barPadding = [barPadding[0], barPadding[0], barPadding[0], barPadding[0]];\n } else if (barPadding.length === 2) {\n barPadding = [barPadding[0], barPadding[1], barPadding[0], barPadding[1]];\n } else if (barPadding.length === 3) {\n barPadding = [barPadding[0], barPadding[1], barPadding[2], barPadding[1]];\n }\n\n // 将百分比值转换为数值\n barPadding = barPadding.map((v, i) => {\n if (typeof v === 'string' && str.endsWith(v, '%')) {\n const num = Number(v.substr(0, v.length - 1));\n if (i === 0 || i === 2) {\n return (height * num) / 100;\n }\n return (width * num) / 100;\n }\n return Number(v);\n });\n\n const borderWidth = getQuadProps(getProp('borderLineWidth', style, col, row, table));\n const barPaddingTop = Math.max((barPadding as number[])[0], Math.ceil(borderWidth[0] / 2));\n const barPaddingRight = Math.max((barPadding as number[])[1], Math.floor(borderWidth[1] / 2));\n const barPaddingBottom = Math.max((barPadding as number[])[2], Math.floor(borderWidth[2] / 2));\n const barPaddingLeft = Math.max((barPadding as number[])[3], Math.ceil(borderWidth[3] / 2));\n\n contentWidth -= barPaddingRight + barPaddingLeft;\n contentHeight -= barPaddingBottom + barPaddingTop;\n if (row === table.rowCount - 1 && [0, '0'].includes(barBottom)) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n contentHeight -= 1;\n }\n\n // if (barPaddingTop & 1) {\n // // barPaddingTop += 0.5;\n // contentWidth += borderWidth[0];\n // }\n // if (barPaddingLeft & 1) {\n // // barPaddingLeft += 0.5;\n // contentHeight += borderWidth[0];\n // }\n\n const top = barPaddingTop;\n const left = barPaddingLeft;\n const right = contentWidth;\n const bottom = contentHeight;\n\n if (typeof barHeight === 'string' && str.endsWith(barHeight, '%')) {\n barHeight = Number(barHeight.substr(0, barHeight.length - 1));\n barHeight = (contentHeight * barHeight) / 100;\n } else {\n barHeight = Number(barHeight);\n }\n if (typeof barBottom === 'string' && str.endsWith(barBottom, '%')) {\n barBottom = Number(barBottom.substr(0, barBottom.length - 1));\n barBottom = (contentHeight * barBottom) / 100;\n } else {\n barBottom = Number(barBottom);\n }\n\n const show = getOrApply(showBar as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n if (show) {\n let svalue = `${dataValue}`;\n if (str.endsWith(svalue, '%')) {\n svalue = svalue.substr(0, svalue.length - 1);\n }\n const num = Number(svalue);\n if (isNaN(num)) {\n return percentCompleteBarGroup;\n }\n\n if ((progressBarDefine.barType ?? 'default') === 'default') {\n const percentile =\n num < progressBarDefine.min\n ? 0\n : num > progressBarDefine.max\n ? 1\n : (num - progressBarDefine.min) / (progressBarDefine.max - progressBarDefine.min);\n\n const barMaxWidth = contentWidth;\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n // const barLeft = 0 + barPaddingLeft;\n let barSize = Math.min(barMaxWidth * percentile, barMaxWidth);\n const barLeft = barRightToLeft ? left + right - barSize : left;\n if (col === table.colCount - 1 && percentile === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSize -= 1;\n }\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n });\n\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n const fillColor =\n getOrApply(barColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n const barMain = createRect({\n x: barLeft,\n y: barTop,\n width: barSize,\n height: barHeight,\n fill: fillColor\n });\n percentCompleteBarGroup.addChild(barMain);\n } else if (progressBarDefine.barType === 'negative') {\n // negative模式参考风神现有数据条样式,显示坐标轴和正负数据条\n // 计算坐标轴位置\n const negativeRange = progressBarDefine.min < 0 ? -progressBarDefine.min : 0;\n const positiveRange = progressBarDefine.max > 0 ? progressBarDefine.max : 0;\n\n const negativeFactor = negativeRange / (negativeRange + positiveRange);\n const positiveFactor = 1 - negativeFactor;\n\n // 计算rate\n const positiveRate = num > 0 ? num / positiveRange : 0;\n const negativeRate = num < 0 ? -num / negativeRange : 0;\n\n // 绘制\n // 绘制背景\n const barMaxWidth = contentWidth;\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n const barLeft = left;\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n });\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n // 坐标轴距离左侧边界距离\n const positiveLeft = barRightToLeft ? positiveFactor * barMaxWidth : negativeFactor * barMaxWidth;\n\n // 绘制负值区域\n const barSizeNega = Math.min(barMaxWidth * negativeFactor * negativeRate, barMaxWidth);\n const barRectNega = barRightToLeft\n ? {\n left: barLeft + positiveLeft,\n top: barTop,\n width: barSizeNega,\n height: barHeight as number\n }\n : {\n left: barLeft + positiveLeft - barSizeNega,\n top: barTop,\n width: barSizeNega,\n height: barHeight as number\n };\n const barNagiFillColor =\n getOrApply(barNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: negativeRate\n }) || '#20a8d8';\n const barNega = createRect({\n x: barRectNega.left,\n y: barRectNega.top,\n width: barRectNega.width,\n height: barRectNega.height,\n fill: barNagiFillColor\n });\n percentCompleteBarGroup.addChild(barNega);\n\n // 绘制正值区域\n let barSizePosi = Math.min(barMaxWidth * positiveFactor * positiveRate, barMaxWidth);\n if (col === table.colCount - 1 && positiveRate === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSizePosi -= 1;\n }\n const barRectPosi = barRightToLeft\n ? {\n left: barLeft + positiveLeft - barSizePosi,\n top: barTop,\n width: barSizePosi,\n height: barHeight as number\n }\n : {\n left: barLeft + positiveLeft,\n top: barTop,\n width: barSizePosi,\n height: barHeight as number\n };\n const barPosiFillColor =\n getOrApply(barPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n }) || '#20a8d8';\n const barPosi = createRect({\n x: barRectPosi.left,\n y: barRectPosi.top,\n width: barRectPosi.width,\n height: barRectPosi.height,\n fill: barPosiFillColor\n });\n percentCompleteBarGroup.addChild(barPosi);\n\n // 绘制坐标轴\n const lineLeft = barRightToLeft ? barRectNega.left : barRectPosi.left;\n const lineStrokeColor = getOrApply(barAxisColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n });\n const line = createLine({\n x: 0,\n y: 0,\n stroke: lineStrokeColor,\n lineWidth: 1,\n lineDash: [2, 2],\n points: [\n { x: lineLeft, y: 0 },\n { x: lineLeft, y: height }\n ]\n });\n percentCompleteBarGroup.addChild(line);\n\n // 绘制mark\n if (showBarMark && (positiveRate || negativeRate)) {\n const lineWidth = barMarkWidth;\n const points = [];\n let barMarkStrokeColor;\n if (positiveRate > 0) {\n barMarkStrokeColor =\n getOrApply(barMarkPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n }) || '#20a8d8';\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRectPosi.left + barMarkWidth / 2\n : barRectPosi.left + barRectPosi.width - barMarkWidth / 2;\n points.push({ x: markLeft, y: barRectPosi.top });\n points.push({ x: markLeft, y: barRectPosi.top + barRectPosi.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRectPosi.left,\n y: barRectPosi.top + barRectPosi.height - barMarkWidth / 2\n });\n points.push({\n x: barRectPosi.left + barRectPosi.width,\n y: barRectPosi.top + barRectPosi.height - barMarkWidth / 2\n });\n }\n } else if (negativeRate > 0) {\n barMarkStrokeColor =\n getOrApply(barMarkNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: negativeRate\n }) || '#20a8d8';\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRectNega.left + barRectNega.width - barMarkWidth / 2\n : barRectNega.left + barMarkWidth / 2;\n points.push({ x: markLeft, y: barRectNega.top });\n points.push({ x: markLeft, y: barRectNega.top + barRectNega.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRectNega.left,\n y: barRectNega.top + barRectNega.height - barMarkWidth / 2\n });\n points.push({\n x: barRectNega.left + barRectNega.width,\n y: barRectNega.top + barRectNega.height - barMarkWidth / 2\n });\n }\n }\n const barMark = createLine({\n x: 0,\n y: 0,\n stroke: barMarkStrokeColor,\n lineWidth,\n points\n });\n percentCompleteBarGroup.addChild(barMark);\n }\n } else if (progressBarDefine.barType === 'negative_no_axis') {\n // negative_no_axis模式不显示坐标轴,正负数据条同向,区分颜色\n // 计算range\n const _negativeRange = progressBarDefine.min < 0 ? -progressBarDefine.min : 0;\n const _positiveRange = progressBarDefine.max > 0 ? progressBarDefine.max : 0;\n const range = Math.max(_negativeRange, _positiveRange);\n\n // 计算rate\n const percentile = range === 0 ? 0 : Math.abs(num) / range;\n\n // 绘制\n // 绘制背景\n // const barMaxWidth = width - barPaddingLeft - barPaddingRight - 1; /*罫線*/\n const barMaxWidth = contentWidth;\n let barSize = Math.min(barMaxWidth * percentile, barMaxWidth);\n if (col === table.colCount - 1 && percentile === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSize -= 1;\n }\n // const barTop = bottom - barPaddingBottom - (barHeight as number) - (barBottom as number) - 1; /*罫線*/\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n // const barLeft = barRightToLeft ? right - barPaddingRight - barSize : left + barPaddingLeft;\n const barLeft = barRightToLeft ? left + right - barSize : left;\n\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n });\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n // 绘制bar\n const barRect = {\n left: barLeft,\n top: barTop,\n width: barSize,\n height: barHeight as number\n };\n let barRectFillColor;\n if (num >= 0) {\n barRectFillColor =\n getOrApply(barPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n percentile,\n dataValue\n }) || '#20a8d8';\n } else {\n barRectFillColor =\n getOrApply(barNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n }\n const bar = createRect({\n x: barRect.left,\n y: barRect.top,\n width: barRect.width,\n height: barRect.height,\n fill: barRectFillColor\n });\n percentCompleteBarGroup.addChild(bar);\n\n // 绘制mark\n if (showBarMark && num) {\n const lineWidth = barMarkWidth;\n const points = [];\n let barMarkStrokeColor;\n if (num >= 0) {\n barMarkStrokeColor =\n getOrApply(barMarkPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n } else {\n barMarkStrokeColor =\n getOrApply(barMarkNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n }\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRect.left + barMarkWidth / 2\n : barRect.left + barRect.width - barMarkWidth / 2;\n points.push({ x: markLeft, y: barRect.top });\n points.push({ x: markLeft, y: barRect.top + barRect.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRect.left,\n y: barRect.top + barRect.height - barMarkWidth / 2\n });\n points.push({\n x: barRect.left + barRect.width,\n y: barRect.top + barRect.height - barMarkWidth / 2\n });\n }\n const barMark = createLine({\n x: 0,\n y: 0,\n stroke: barMarkStrokeColor,\n lineWidth,\n points\n });\n percentCompleteBarGroup.addChild(barMark);\n }\n }\n }\n return percentCompleteBarGroup;\n}\n\nexport type CreateProgressBarCell = typeof createProgressBarCell;\n","import { LinearScale, LogScale, SymlogScale } from '@visactor/vscale';\nimport { isFunction, isNil, isNumber, isValid } from '@visactor/vutils';\nimport { THEME_CONSTANTS } from '../../components/axis/get-axis-attributes';\n\nconst DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * @description: get axis nice domain and tick label text\n * @param {number} min\n * @param {number} max\n * @param {ITableAxisOption} axisOption\n * @return {*}\n */\nexport function getAxisDomainRangeAndLabels(\n min: number,\n max: number,\n axisOption: any,\n isZeroAlign: boolean,\n axisLength: number,\n // skipTick?: boolean,\n target?: {\n targetTicks: number[];\n targetRange: { min: number; max: number };\n }\n) {\n if (axisOption?.zero) {\n min = Math.min(min, 0);\n max = Math.max(max, 0);\n }\n if (axisOption?.expand) {\n const domainMin = min;\n const domainMax = max;\n if (isValid(axisOption.expand.min)) {\n min = domainMin - (domainMax - domainMin) * axisOption.expand.min;\n }\n if (isValid(axisOption.expand.max)) {\n max = domainMax + (domainMax - domainMin) * axisOption.expand.max;\n }\n }\n if (isNumber(axisOption?.min)) {\n min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n max = axisOption.max;\n }\n\n let scale;\n if (axisOption?.type === 'log') {\n scale = new LogScale();\n scale.base(axisOption?.base ?? 10);\n } else if (axisOption?.type === 'symlog') {\n scale = new SymlogScale();\n scale.constant(axisOption?.constant ?? 10);\n } else {\n scale = new LinearScale();\n }\n scale.domain([min, max], !!axisOption?.nice);\n\n if (target) {\n forceTickCountNice(scale as LinearScale, target);\n } else if (axisOption?.nice) {\n let tickCount = axisOption.tick?.forceTickCount ?? axisOption.tick?.tickCount ?? 10;\n if (isFunction(tickCount)) {\n tickCount = tickCount({\n axisLength,\n labelStyle: axisOption?.label?.style ?? {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE\n }\n });\n }\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (axisOption.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n if (isNil(axisOption.min) && isNil(axisOption.max)) {\n scale.nice(tickCount);\n } else if (isValid(axisOption.min) && isNil(axisOption.max)) {\n scale.niceMax(tickCount);\n } else if (isNil(axisOption.min) && isValid(axisOption.max)) {\n scale.niceMin(tickCount);\n }\n }\n\n delete (scale as any)._niceType; // ensure scaleTicks consistent in `measurement`, `component label` and `chart`\n let scaleTicks;\n\n if (target?.targetTicks?.length ?? axisOption?.tick?.forceTickCount) {\n scaleTicks = scale.forceTicks(target?.targetTicks?.length ?? axisOption?.tick?.forceTickCount);\n } else {\n scaleTicks = scale.ticks(\n isNumber(axisOption?.tick?.tickCount) ? axisOption.tick.tickCount : DEFAULT_CONTINUOUS_TICK_COUNT,\n {\n noDecimals: axisOption?.tick?.noDecimals\n }\n );\n }\n\n return {\n range: scale.domain(),\n ticks: scaleTicks\n };\n}\n\nfunction forceTickCountNice(\n scale: LinearScale,\n target: {\n targetTicks: number[];\n targetRange: { min: number; max: number };\n }\n) {\n scale.niceMax(target.targetTicks.length);\n\n // to do: nice new ticks\n}\n\nexport type GetAxisDomainRangeAndLabels = typeof getAxisDomainRangeAndLabels;\n","import { Factory } from '../../../core/factory';\nimport { createChartCellGroup } from './chart-cell';\nimport { createCheckboxCellGroup } from './checkbox-cell';\nimport { createImageCellGroup } from './image-cell';\nimport { createRadioCellGroup } from './radio-cell';\nimport { createSparkLineCellGroup } from './spark-line-cell';\nimport { createVideoCellGroup } from './video-cell';\nimport { createCellGroup as createTextCellGroup } from './text-cell';\nimport { createProgressBarCell } from './progress-bar-cell';\nimport { getAxisDomainRangeAndLabels } from '../../../layout/chart-helper/get-axis-domain';\n\nexport const registerChartCell = () => {\n Factory.registerFunction('createChartCellGroup', createChartCellGroup);\n Factory.registerFunction('getAxisDomainRangeAndLabels', getAxisDomainRangeAndLabels);\n};\n\nexport const registerCheckboxCell = () => {\n Factory.registerFunction('createCheckboxCellGroup', createCheckboxCellGroup);\n};\n\nexport const registerImageCell = () => {\n Factory.registerFunction('createImageCellGroup', createImageCellGroup);\n};\n\nexport const registerProgressBarCell = () => {\n Factory.registerFunction('createProgressBarCell', createProgressBarCell);\n};\n\nexport const registerRadioCell = () => {\n Factory.registerFunction('createRadioCellGroup', createRadioCellGroup);\n};\n\nexport const registerSparkLineCell = () => {\n Factory.registerFunction('createSparkLineCellGroup', createSparkLineCellGroup);\n};\n\nexport const registerTextCell = () => {\n Factory.registerFunction('createTextCellGroup', createTextCellGroup);\n};\n\nexport const registerVideoCell = () => {\n Factory.registerFunction('createVideoCellGroup', createVideoCellGroup);\n};\n","import { ListTable } from './ListTable';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport { registerCustomCellStylePlugin } from './plugins/custom-cell-style';\nimport { registerListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\nregisterListTreeStickCellPlugin();\nregisterCustomCellStylePlugin();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\nexport class ListTableAll extends ListTable {}\n","import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { CellAddress } from '../ts-types';\nimport type { LayoutObjectId } from '../ts-types/base-table';\n\nexport function diffCellAddress(\n col: number,\n row: number,\n oldCellIds: number[],\n newCellIds: number[],\n oldRowHeaderCellPositons: CellAddress[],\n layout: PivotHeaderLayoutMap\n) {\n const columnHeaderStart = layout.columnHeaderLevelCount;\n // const oldCellIds = oldCellIdsArr.map(oldCellId => oldCellId[0]);\n // const newCellIds = newCellIdsArr.map(oldCellId => oldCellId[0]);\n const addCellPositions = [];\n const removeCellPositions = [];\n // const updateCellIds: Set = new Set();\n // diff two array elements\n for (let i = 0; i < oldCellIds.length; i++) {\n if (!newCellIds.includes(oldCellIds[i])) {\n // updateCellIds.add(layout.getParentCellId(oldRowHeaderCellPositons[i].col, oldRowHeaderCellPositons[i].row));\n removeCellPositions.push(oldRowHeaderCellPositons[i]);\n }\n }\n for (let i = 0; i < newCellIds.length; i++) {\n if (!oldCellIds.includes(newCellIds[i])) {\n const newCellAddr = { col, row: columnHeaderStart + i }; // layout.getHeaderCellAdressById(newCellIds[i]);\n // updateCellIds.add(layout.getParentCellId(newCellAddr.col, newCellAddr.row));\n addCellPositions.push(newCellAddr);\n }\n }\n let parentId = layout.getParentCellId(col, row);\n let parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n const updateCellPositions = [];\n parentCellAddress && updateCellPositions.push(parentCellAddress);\n while (parentId) {\n parentId = layout.getParentCellId(parentCellAddress.col, parentCellAddress.row);\n if (parentId) {\n parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n updateCellPositions.push(parentCellAddress);\n }\n }\n return {\n addCellPositions,\n removeCellPositions,\n updateCellPositions\n };\n}\n\n// find diff between two arrays\nfunction diffCellIndices(oldIndexedData: (number | number[])[], currentIndexedData: (number | number[])[]) {\n const add = [];\n const remove = [];\n // find removed indices\n for (let i = 0; i < oldIndexedData.length; i++) {\n let removed = true;\n for (let j = 0; j < currentIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[i], currentIndexedData[j])) {\n removed = false;\n break;\n }\n }\n if (removed) {\n remove.push(i);\n }\n }\n\n // find added indices\n for (let i = 0; i < currentIndexedData.length; i++) {\n let added = true;\n for (let j = 0; j < oldIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[j], currentIndexedData[i])) {\n added = false;\n break;\n }\n }\n if (added) {\n add.push(i);\n }\n }\n return { add, remove };\n}\n\nfunction checkIndex(oldIndex: number | number[], newIndex: number | number[]): boolean {\n if (typeof oldIndex !== typeof newIndex) {\n return false;\n }\n if (typeof oldIndex === 'number' && typeof newIndex === 'number' && oldIndex !== newIndex) {\n return false;\n }\n if ((oldIndex as number[]).length !== (newIndex as number[]).length) {\n return false;\n }\n for (let i = 0; i < (oldIndex as number[]).length; i++) {\n if (oldIndex[i] !== newIndex[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function calculateArrayDiff(\n originalArray: (number | number[])[],\n targetArray: (number | number[])[],\n startIndex: number\n) {\n const add = [];\n const remove = [];\n\n const originalMap = new Map();\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n const key = JSON.stringify(element);\n if (originalMap.has(key)) {\n originalMap.get(key).push(i);\n } else {\n originalMap.set(key, [i]);\n }\n }\n\n for (let i = 0; i < targetArray.length; i++) {\n const element = targetArray[i];\n const key = JSON.stringify(element);\n if (!originalMap.has(key)) {\n add.push(i + startIndex);\n } else {\n const indices = originalMap.get(key);\n indices.shift(); // Remove the first index\n if (indices.length === 0) {\n originalMap.delete(key);\n }\n }\n }\n\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n if (!targetArray.some(item => isEqual(item, element))) {\n remove.push(i + startIndex);\n }\n }\n\n return { add, remove };\n}\n\nfunction isEqual(arr1: any, arr2: any) {\n if (arr1 === arr2) {\n return true;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable sort-imports */\nimport { transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo,\n IExtensionRowDefine,\n IPagination,\n IColumnDimension,\n IRowDimension,\n IChartIndicator,\n IRowSeriesNumber\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport type { PivotChart } from '../PivotChart';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress } from '../tools/diff-cell';\nimport {\n checkHasCartesianChart,\n checkHasChart,\n getChartAxes,\n getChartDataId,\n getChartSpec,\n getRawChartSpec,\n isCartesianChart,\n isHasCartesianChartInline,\n isNoChartDataRenderNothing,\n isShareChartSpec\n} from './chart-helper/get-chart-spec';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport { DimensionTree, countLayoutTree, dealHeader, dealHeaderForTreeMode, generateLayoutTree } from './tree-helper';\nimport type { Dataset } from '../dataset/dataset';\nimport { cloneDeep, isArray, isValid } from '@visactor/vutils';\nimport type { TextStyle } from '../body-helper/style';\nimport type { ITableAxisOption } from '../ts-types/component/axis';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport type { GetAxisConfigInPivotChart } from './chart-helper/get-axis-config';\nimport { Factory } from '../core/factory';\n\n// export const sharedVar = { seqId: 0 };\n// let colIndex = 0;\n\nconst defaultDimension = { startInTotal: 0, level: 0 };\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\n sharedVar: { seqId: number };\n colIndex = 0;\n _showHeader = true;\n rowDimensionTree: DimensionTree;\n columnDimensionTree: DimensionTree;\n rowTree: IHeaderTreeDefine[];\n columnTree: IHeaderTreeDefine[];\n cornerHeaderObjs: HeaderData[];\n columnHeaderObjs: HeaderData[] = [];\n rowHeaderObjs: HeaderData[] = [];\n\n private _cornerHeaderCellFullPathIds: number[][] = [];\n private _columnHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellFullPathIds\n\n /**下面四份代表实际展示的 如果隐藏了某部分表头 那这里就会相比上面的数组少了隐藏掉的id */\n private _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellIds\n\n private _columnWidths: WidthData[] = [];\n private _columnHeaderLevelCount: number;\n private _rowHeaderLevelCount: number;\n rowsDefine: (IRowDimension | string)[];\n columnsDefine: (IColumnDimension | string)[];\n indicatorsDefine: (IIndicator | IChartIndicator | string)[];\n columnPaths: number[][] = [];\n _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n _indicators: IndicatorData[] = [];\n indicatorTitle: string;\n indicatorsAsCol = true;\n hideIndicatorName = false;\n _showRowHeader = true;\n _showColumnHeader = true;\n _rowHeaderTitle: ITitleDefine;\n _columnHeaderTitle: ITitleDefine;\n cornerSetting: ICornerDefine;\n private _indicatorShowType: ShowColumnRowType = 'column';\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n rowExpandLevel?: number;\n rowHierarchyIndent?: number;\n rowHierarchyTextStartAlignment?: boolean = false;\n /**\n * 行表头对应的维度key集合\n */\n rowDimensionKeys: string[] = [];\n /**\n * 列表头对应的维度key集合\n */\n colDimensionKeys: string[] = [];\n indicatorKeys: string[] = [];\n indicatorDimensionKey: string = IndicatorDimensionKeyPlaceholder;\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n // private _cellRangeMap: Map; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n private _largeCellRangeCache: CellRange[];\n // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map;\n _table: PivotTable | PivotChart;\n extensionRows: IExtensionRowDefine[];\n _rowHeaderExtensionTree: any = {};\n\n /**\n * 扩展行表头对应的维度key集合\n */\n _extensionRowDimensionKeys: string[][] = [];\n fullRowDimensionKeys: string[] = [];\n\n dataset: Dataset;\n /**\n * 分页配置\n */\n pagination: IPagination;\n currentPageStartIndex: number;\n currentPageEndIndex: number;\n // _extensionRowHeaderCellIds\n //#region pivotChart专有\n hasTwoIndicatorAxes: boolean;\n /** 图表spec中barWidth的收集 */\n _chartItemSpanSize: number;\n _chartPaddingInner: number;\n _chartPaddingOuter: number;\n _chartItemBandSize: number;\n _chartPadding?: number | number[];\n\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumnCount: number = 0;\n //#endregion\n\n _useGetBodyCache: boolean = false;\n _getBodyCache: Map = new Map();\n\n _useHeaderPathCache: boolean = false;\n _colHeaderPathCache: Map = new Map();\n _rowHeaderPathCache: Map = new Map();\n constructor(\n table: PivotTable | PivotChart,\n dataset: Dataset,\n columnDimensionTree: DimensionTree,\n rowDimensionTree: DimensionTree\n ) {\n this.sharedVar = table.layoutNodeId;\n this._table = table;\n if ((table as PivotTable).options.rowHierarchyType === 'tree') {\n this.extensionRows = (table as PivotTable).options.extensionRows;\n }\n this.dataset = dataset;\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache = [];\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.internalProps.rowTree;\n this.columnTree = table.internalProps.columnTree;\n this.rowsDefine = table.internalProps.rows ?? [];\n this.columnsDefine = table.internalProps.columns ?? [];\n this.indicatorsDefine = table.internalProps.indicators ?? [];\n this.indicatorTitle = table.options.indicatorTitle;\n this.indicatorsAsCol = table.options.indicatorsAsCol ?? true;\n this.hideIndicatorName = table.options.hideIndicatorName ?? false;\n this.showRowHeader = table.options.showRowHeader ?? true;\n this.showColumnHeader = table.options.showColumnHeader ?? true;\n this.rowHeaderTitle = table.options.rowHeaderTitle;\n this.columnHeaderTitle = table.options.columnHeaderTitle;\n this.rowHierarchyType = (table as PivotTable).options.rowHierarchyType ?? 'grid';\n this.rowExpandLevel = (table as PivotTable).options.rowExpandLevel ?? 1;\n this.rowHierarchyIndent = (table as PivotTable).options.rowHierarchyIndent ?? 20;\n this.rowHierarchyTextStartAlignment = (table as PivotTable).options.rowHierarchyTextStartAlignment;\n this.cornerSetting = Object.assign({ titleOnDimension: 'column', forceShowHeader: false }, table.options.corner);\n\n if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n }\n // 收集指标所有key\n this.indicatorsDefine?.forEach(indicator => {\n // this.indicatorKeys[indicator.indicatorKey] = indicator.value;\n if (typeof indicator === 'string') {\n this.indicatorKeys.push(indicator);\n } else {\n this.indicatorKeys.push(indicator.indicatorKey);\n }\n });\n this.columnDimensionTree = columnDimensionTree; // new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = rowDimensionTree;\n // new DimensionTree(\n // (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n // this.sharedVar,\n // this.rowHierarchyType,\n // this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n // );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n this.resetRowHeaderLevelCount();\n\n if (this._table.isPivotChart()) {\n this.hasTwoIndicatorAxes = this.indicatorsDefine.some((indicatorObject: any) => {\n if (\n indicatorObject.chartSpec &&\n indicatorObject.chartSpec.series &&\n indicatorObject.chartSpec.series.length > 1\n ) {\n const axes = indicatorObject.chartSpec.axes ?? (this._table as PivotChart).pivotChartAxes ?? [];\n if (\n !axes.length ||\n axes.every((axis: any) => {\n if (axis.orient === (this.indicatorsAsCol ? 'top' : 'right') && axis.visible === false) {\n return false;\n }\n return true;\n })\n ) {\n return true;\n }\n }\n return false;\n });\n }\n this.resetColumnHeaderLevelCount();\n\n // this.indicatorsAsCol = !isValid(this.rowDimensionKeys.find(key => key === this.indicatorDimensionKey));\n // this.colAttrs[this.colAttrs.length-1]===this.indicatorDimensionKey&&this.colAttrs.pop();\n // this.rowAttrs[this.rowAttrs.length-1]===this.indicatorDimensionKey&&this.rowAttrs.pop();\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if ((table as PivotTable).options.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n\n this.extensionRows.forEach(extensionRow => {\n const rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n rowKeys.push(row);\n } else {\n rowKeys.push(row.dimensionKey);\n }\n });\n this._extensionRowDimensionKeys.push(rowKeys);\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(rowKeys);\n });\n }\n\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n //#region 生成cornerHeaderObjs及_cornerHeaderCellIds\n // if (this.cornerSetting.titleOnDimension === 'all') {\n let colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree\n // &&\n // !this.dataset.customRowTree\n ) {\n colDimensionKeys = this.columnsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (this.indicatorsAsCol) {\n colDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n\n colDimensionKeys = this.columnHeaderTitle ? [''].concat(colDimensionKeys) : colDimensionKeys;\n\n let rowDimensionKeys: string[];\n let extensionRowDimensions = [];\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n // 如果是有扩展行维度\n const rowTreeFirstKey = [];\n rowTreeFirstKey.push(this.rowDimensionKeys[0]);\n this._extensionRowDimensionKeys.forEach(extensionRowKeys => {\n rowTreeFirstKey.push(extensionRowKeys[0]);\n });\n extensionRowDimensions = this.extensionRows.reduce((dimensions, cur) => {\n return dimensions.concat(cur.rows);\n }, []);\n\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowTreeFirstKey as any) : rowTreeFirstKey;\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree\n ) {\n rowDimensionKeys = this.rowsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (!this.indicatorsAsCol) {\n rowDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowDimensionKeys) : rowDimensionKeys;\n }\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n colDimensionKeys,\n rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine, ...extensionRowDimensions)\n );\n //#endregion\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'column';\n } else if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'row';\n } else {\n this._indicatorShowType = 'none';\n }\n\n this.generateCellIdsConsiderHideHeader();\n this.setPagination((table as PivotTable).options.pagination);\n\n if (this._table.isPivotChart()) {\n this._chartItemSpanSize = 0;\n this._chartItemBandSize = 0;\n // this._chartPadding ;\n this._indicators.find(indicatorObject => {\n if ((indicatorObject?.style as TextStyle)?.padding) {\n this._chartPadding = (indicatorObject.style as TextStyle).padding as number;\n }\n if (indicatorObject.chartSpec?.barWidth && typeof indicatorObject.chartSpec.barWidth === 'number') {\n this._chartItemSpanSize = indicatorObject.chartSpec?.barWidth;\n }\n const bandAxisConfig = indicatorObject.chartSpec?.axes?.find((axis: any) => {\n return axis.type === 'band';\n });\n if (bandAxisConfig?.bandSize) {\n this._chartItemBandSize = bandAxisConfig?.bandSize;\n this._chartPaddingInner =\n (isArray(bandAxisConfig.paddingInner) ? bandAxisConfig.paddingInner[0] : bandAxisConfig.paddingInner) ?? 0;\n this._chartPaddingOuter =\n (isArray(bandAxisConfig.paddingOuter) ? bandAxisConfig.paddingOuter[0] : bandAxisConfig.paddingOuter) ?? 0;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n indicatorObject.chartSpec.series?.find((seriesObject: any) => {\n if (seriesObject.barWidth && typeof seriesObject.barWidth === 'number') {\n this._chartItemSpanSize = seriesObject.barWidth;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n return false;\n });\n // if (this._chartItemSpanSize > 0) {\n // return true;\n // }\n return false;\n });\n }\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n\n this.setColumnWidths();\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map(seriesNumber => {\n return {\n id: '',\n title: seriesNumber.title,\n define: seriesNumber,\n cellType: seriesNumber.cellType ?? 'text',\n headerType: seriesNumber.cellType ?? 'text',\n width: seriesNumber.width,\n style: seriesNumber.style,\n format: seriesNumber.format,\n field: seriesNumber.field,\n icon: seriesNumber.icon\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: '',\n title: rowSeriesNumber.title,\n define: rowSeriesNumber,\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '', // rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n _generateColHeaderIds() {\n if (this.columnDimensionTree.tree.children?.length >= 1) {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n this.indicatorsAsCol &&\n this.columnDimensionTree.totalLevel < this.columnHeaderLevelCount\n ) {\n startRow = this.columnHeaderLevelCount - this.columnDimensionTree.totalLevel;\n for (let i = 0; i < startRow; i++) {\n this._columnHeaderCellFullPathIds.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: {\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _generateRowHeaderIds() {\n if (this.rowDimensionTree.tree.children?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n !this.indicatorsAsCol &&\n this.rowDimensionTree.totalLevel < this.rowHeaderLevelCount\n ) {\n startRow = this.rowHeaderLevelCount - this.rowDimensionTree.totalLevel;\n for (let i = 0; i < startRow; i++) {\n this._rowHeaderCellFullPathIds_FULL.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this._rowHeaderCellFullPathIds_FULL[0]?.length ?? this.rowDimensionTree.tree.size).fill(\n id\n );\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n id,\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n results: HeaderData[]\n // totalLevel: number,\n // indicatorKeys: string[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeader(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n this\n // totalLevel, indicatorKeys\n );\n }\n }\n _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, this);\n }\n }\n private _addCornerHeaders(\n colDimensionKeys: string[] | null,\n rowDimensionKeys: string[] | null,\n dimensions: (string | IDimension)[]\n ) {\n const results: HeaderData[] = [];\n if (this.cornerSetting.titleOnDimension === 'all') {\n if (this.indicatorsAsCol) {\n let indicatorAtIndex = -1;\n if (colDimensionKeys) {\n colDimensionKeys.forEach((dimensionKey: string, key: number) => {\n if (dimensionKey === this.indicatorDimensionKey) {\n indicatorAtIndex = key;\n }\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n });\n }\n if (rowDimensionKeys) {\n rowDimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n }\n this._cornerHeaderCellFullPathIds[indicatorAtIndex][key] = id;\n });\n }\n } else {\n let indicatorAtIndex = -1;\n if (rowDimensionKeys) {\n rowDimensionKeys.forEach((dimensionKey: string, key: number) => {\n if (dimensionKey === this.indicatorDimensionKey) {\n indicatorAtIndex = key;\n }\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n });\n }\n if (colDimensionKeys) {\n colDimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n // if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n // this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n // }\n this._cornerHeaderCellFullPathIds[key][indicatorAtIndex] = id;\n });\n }\n }\n } else if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'column') {\n const dimensionKeys = this.cornerSetting?.titleOnDimension === 'row' ? rowDimensionKeys : colDimensionKeys;\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (this.cornerSetting.titleOnDimension === 'column') {\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n }\n });\n }\n } else {\n const id = ++this.sharedVar.seqId;\n const cell: HeaderData = {\n id,\n title: '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: {\n dimensionKey: '维度名称',\n id,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n }\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n for (let j = 0; j < this.rowHeaderLevelCount; j++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][j] = id;\n }\n }\n }\n\n return results;\n }\n private generateExtensionRowTree() {\n this.extensionRows.forEach((extensionRow, indexP) => {\n const old_rowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL;\n this._rowHeaderCellFullPathIds_FULL = [];\n old_rowHeaderCellIds.forEach((row_ids: number[], index) => {\n const key = row_ids[row_ids.length - 1];\n this.colIndex = 0;\n let tree;\n if (typeof extensionRow.rowTree === 'function') {\n const fullCellIds = this.findFullCellIds(row_ids);\n tree = (extensionRow.rowTree as Function)(\n fullCellIds.map(id => {\n return { dimensionKey: this._headerObjects[id].field, value: this._headerObjects[id].title };\n })\n );\n } else {\n // 需要clone一份 否则跟DimensionTree有引用关系\n tree = cloneDeep(extensionRow.rowTree);\n }\n let rowExtensionDimensionTree;\n if (this._rowHeaderExtensionTree[key]) {\n this._rowHeaderExtensionTree[key].reset(this._rowHeaderExtensionTree[key].tree.children);\n rowExtensionDimensionTree = this._rowHeaderExtensionTree[key];\n } else {\n rowExtensionDimensionTree = new DimensionTree(tree ?? [], this.sharedVar, this.rowHierarchyType, undefined);\n this._rowHeaderExtensionTree[key] = rowExtensionDimensionTree;\n }\n\n const extensionRowTreeHeaderIds: number[][] = [];\n this._addHeadersForTreeMode(\n extensionRowTreeHeaderIds,\n 0,\n rowExtensionDimensionTree.tree.children,\n [],\n rowExtensionDimensionTree.totalLevel,\n true,\n extensionRow.rows,\n this.rowHeaderObjs\n );\n for (let i = 0; i < extensionRowTreeHeaderIds[0].length; i++) {\n this._rowHeaderCellFullPathIds_FULL.push(row_ids.concat(extensionRowTreeHeaderIds[0][i]));\n }\n });\n });\n }\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.leftRowSeriesNumberColumnCount) {\n returnWidths[0] = this.leftRowSeriesNumberColumn[0];\n }\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0 + this.leftRowSeriesNumberColumnCount] = {};\n }\n if (this.rowHierarchyType === 'tree') {\n const mainDimensionFirstRowKey = this.rowDimensionKeys[0];\n if (mainDimensionFirstRowKey) {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === mainDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[0 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n this._extensionRowDimensionKeys?.forEach((extensionRowDimensionKeys, index) => {\n const curDimensionFirstRowKey = extensionRowDimensionKeys[0];\n if (curDimensionFirstRowKey) {\n const dimension = this.extensionRows[index].rows?.find((dimension: string | IRowDimension) =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === curDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + 1 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n });\n // const _headerCellIds = this._rowHeaderCellIds[0];\n // _headerCellIds.forEach((cellId, index) => {\n // const headerDefine = this._headerObjectMap[cellId];\n // headerDefine &&\n // (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n // width: headerDefine.width,\n // minWidth: headerDefine.minWidth,\n // maxWidth: headerDefine.maxWidth\n // });\n // });\n } else {\n const rowDimensionKeys =\n this.rowDimensionTree.totalLevel > 0\n ? this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr()\n : this.rowsDefine.map(dimension => {\n if (typeof dimension === 'string') {\n return dimension;\n }\n return dimension.dimensionKey;\n });\n rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount; i < this.colCount; i++) {\n const cellDefine = this.getBody(i, this.columnHeaderLevelCount);\n returnWidths[i] = {\n width: cellDefine?.width,\n minWidth: cellDefine?.minWidth,\n maxWidth: cellDefine?.maxWidth\n };\n }\n } else {\n let width: string | number | undefined = 0;\n let maxWidth: string | number | undefined;\n let minWidth: string | number | undefined;\n let isAuto;\n this._indicators?.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, minWidth ?? 0);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.min(obj.maxWidth, maxWidth ?? Number.MAX_VALUE);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill(\n { width, minWidth, maxWidth },\n this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount,\n this.colCount - this.rightFrozenColCount\n );\n }\n this._columnWidths = returnWidths;\n }\n\n get columnWidths(): WidthData[] {\n return this._columnWidths;\n }\n getColumnWidthDefined(col: number): WidthData {\n return this._columnWidths[col];\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n get showColumnHeader(): boolean {\n return this._showColumnHeader;\n }\n set showColumnHeader(_showColumnHeader: boolean) {\n this._showColumnHeader = _showColumnHeader;\n }\n get showRowHeader(): boolean {\n return this._showRowHeader;\n }\n set showRowHeader(_showRowHeader: boolean) {\n this._showRowHeader = _showRowHeader;\n }\n get columnHeaderTitle(): ITitleDefine {\n return this._columnHeaderTitle;\n }\n set columnHeaderTitle(_columnHeaderTitle: ITitleDefine) {\n this._columnHeaderTitle = _columnHeaderTitle;\n }\n get rowHeaderTitle(): ITitleDefine {\n return this._rowHeaderTitle;\n }\n set rowHeaderTitle(_rowHeaderTitle: ITitleDefine) {\n this._rowHeaderTitle = _rowHeaderTitle;\n }\n getHeaderFieldKey(col: number, row: number): undefined {\n return undefined;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isCornerHeader(col, row)) {\n return 'cornerHeader';\n } else if (this.isColumnHeader(col, row)) {\n return 'columnHeader';\n } else if (this.isRowHeader(col, row)) {\n return 'rowHeader';\n }\n return 'body';\n }\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(header.define).columns || (header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n\n isHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (row >= 0 && row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightHeaderColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (\n col >= 0 &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n\n isFrozen(col: number, row: number): boolean {\n return (\n this.isFrozenColumn(col) ||\n this.isRightFrozenColumn(col) ||\n this.isBottomFrozenRow(row) ||\n this.isFrozenRow(row) ||\n this.isSeriesNumberInBody(col, row) ||\n this.isSeriesNumberInHeader(col, row)\n );\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: 0 },\n end: { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getRowHeaderRange(): CellRange {\n return {\n start: { col: 0, row: this.columnHeaderLevelCount },\n end: { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 }\n };\n }\n getCornerHeaderRange(): CellRange {\n return {\n start: { col: 0, row: 0 },\n end: { col: this.rowHeaderLevelCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getBodyRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount },\n end: { col: this.colCount - 1, row: this.rowCount - 1 }\n };\n }\n resetCellIds() {\n // for (let row = 0; row < this.columnHeaderLevelCount; row++) {}\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n resetColumnHeaderLevelCount() {\n if (this.showHeader && this.showColumnHeader) {\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.dataset?.colKeys?.length &&\n this.columnDimensionTree?.tree?.level === 0 &&\n !this.hasTwoIndicatorAxes\n ) {\n this.columnHeaderLevelCount = 0;\n return;\n }\n let count = this.indicatorsAsCol\n ? this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n ? this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n ? this.columnDimensionTree.totalLevel - 1\n : this.columnDimensionTree.totalLevel\n : this.columnDimensionTree.totalLevel\n : this.columnDimensionTree.totalLevel;\n\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n !this.dataset.customColTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n // && !this.dataset.customRowTree?.length\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' && this.cornerSetting.forceShowHeader) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.columnsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree // 这里不能改为 !this.dataset.customColTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n // &&\n // !this.dataset.customRowTree\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.columnsDefine.length ?? 0;\n if (!this.hideIndicatorName && this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (this.columnHeaderTitle) {\n count += 1;\n }\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.hasTwoIndicatorAxes &&\n checkHasCartesianChart(this.indicatorsDefine)\n ) {\n count -= 1;\n }\n\n this.columnHeaderLevelCount = count;\n return;\n }\n // this.columnHeaderLevelCount = 0;\n this.columnHeaderLevelCount = !this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n resetRowHeaderLevelCount() {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n const extensionRowCount = this.extensionRows?.length ?? 0;\n if (this.rowHeaderTitle) {\n this.rowHeaderLevelCount = 2 + extensionRowCount;\n return;\n }\n this.rowHeaderLevelCount = 1 + extensionRowCount;\n return;\n }\n const rowLevelCount = this.rowDimensionTree.totalLevel;\n // let count = this.indicatorsAsCol\n // ? rowLevelCount\n // : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n // ? rowLevelCount - 1\n // : rowLevelCount\n // : rowLevelCount;\n\n let count = rowLevelCount;\n\n // if (this._table.isPivotChart()&&this.indicatorsAsCol) {\n // count+=1;\n // }\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n // && !this.dataset.customColTree\n !this.dataset.customRowTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' && this.cornerSetting.forceShowHeader) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.rowsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree // 这里不能改为 !this.dataset.customRowTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.rowsDefine.length;\n if (!this.hideIndicatorName && !this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (\n !this.indicatorsAsCol &&\n this.hideIndicatorName &&\n this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count = rowLevelCount - 1;\n }\n\n if (this.rowHeaderTitle) {\n count += 1;\n }\n\n this.rowHeaderLevelCount = count;\n return;\n }\n // return 0;\n this.rowHeaderLevelCount = this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n get columnHeaderLevelCount(): number {\n return this._columnHeaderLevelCount;\n }\n set columnHeaderLevelCount(count: number) {\n this._columnHeaderLevelCount = count;\n }\n get rowHeaderLevelCount(): number {\n return this._rowHeaderLevelCount;\n }\n set rowHeaderLevelCount(count: number) {\n this._rowHeaderLevelCount = count;\n }\n get colCount(): number {\n return (\n (this.columnDimensionTree.totalLevel > 0 ||\n this._table.isPivotChart() ||\n (this.dataset.records as Array)?.length > 0 ||\n (this.dataset.records && !Array.isArray(this.dataset.records))\n ? this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size\n : 0) +\n this.rowHeaderLevelCount +\n this.rightHeaderColCount +\n this.leftRowSeriesNumberColumnCount\n ); // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出\n }\n get rowCount(): number {\n return (\n ((this._table.records || this.dataset.records\n ? Array.isArray(this._table.records)\n ? this._table.records.length > 0\n : true\n : false) &&\n this._indicators?.length > 0 && // 前两个判断条件来判断 有展示的body值的情况 需要展示body row\n !this._rowHeaderCellIds?.length // 需要展示body值 但 _rowHeaderCellIds的长度维度为0 无rows 行表头为空\n ? 1 //兼容bugserver: https://bugserver.cn.goofy.app/case?product=VTable&fileid=65364a57173c354c242a7c4f\n : this._rowHeaderCellIds?.length ?? 0) + //兼容 bugserver:https://bugserver.cn.goofy.app/case?product=VTable&fileid=6527ac0695c0cdbd788cf17d\n this.columnHeaderLevelCount +\n this.bottomHeaderRowCount // 小心bottomFrozenRowCount和rowCount的循环引用 造成调用栈溢出\n );\n // return (this._rowHeaderCellIds?.length ?? 0) + this.columnHeaderLevelCount + this.bottomFrozenRowCount;\n }\n get bodyRowSpanCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'bottom';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n // 指标在列上,指标及其对应坐标轴显示在底部,下侧冻结行数为1\n return 1;\n }\n return 1; // 指标在行上,维度对应坐标轴显示在底部,下侧冻结行数为1\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n // // return 0;\n // if (this.showHeader && this.showColumnHeader) {\n // if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n // // 查询指标是否有multiIndicator\n // return this.indicatorsDefine.find(indicator => {\n // return (indicator as any)?.multiIndicator;\n // })\n // ? 1\n // : 0;\n // }\n // }\n // return 0;\n //上面是原有逻辑\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.rowHeaderLevelCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return this.colCount - this.rowHeaderLevelCount;\n }\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'right';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n\n if (this.indicatorsAsCol) {\n return 0; // 指标在列上,没有图表需要显示右轴\n } else if (this.hasTwoIndicatorAxes) {\n // 查找指标,判断是否有双轴情况,如果有,则右侧冻结列数为1\n return 1;\n }\n return 0;\n }\n\n /** 不包括冻结的行 还是不确定应不应该包括*/\n get bodyRowCount(): number | undefined {\n return this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number | undefined {\n return this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): IndicatorData[] {\n return this._indicators;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (row >= 0 && col >= 0) {\n if (this.isSeriesNumber(col, row)) {\n return '';\n } else if (this.isCornerHeader(col, row)) {\n return this._cornerHeaderCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isColumnHeader(col, row)) {\n return this._columnHeaderCellIds[row]?.[col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRowHeader(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRightFrozenColumn(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[this.rowHeaderLevelCount - 1];\n } else if (this.isBottomFrozenRow(col, row)) {\n return this._columnHeaderCellIds[this.columnHeaderLevelCount - 1]?.[\n col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n ];\n }\n }\n return undefined;\n }\n // getCellIdOnHeader(col: number, row: number): LayoutObjectId {\n // if (row >= 0 && col >= 0) {\n // if (this.isCornerHeader(col, row)) return this._cornerHeaderCellIds[row][col];\n // else if (this.isColumnHeader(col, row))\n // return this._columnHeaderCellIds[row][col - this.rowHeaderLevelCount];\n // else if (this.isRowHeader(col, row))\n // return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col];\n // return this.getCellIdOnHeader(\n // col >= this.rowHeaderLevelCount ? this.rowHeaderLevelCount - 1 : col,\n // row >= this.columnHeaderLevelCount ? this.columnHeaderLevelCount - 1 : row\n // );\n // }\n // return 0;\n // }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number] ?? { id: undefined, field: '', headerType: 'text', define: undefined };\n }\n getHeaderField(col: number, row: number) {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]?.field || this.getBody(col, row)?.field;\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._columnHeaderCellIds.length; i++) {\n const row = this._columnHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j + this._table.frozenColCount, row: i };\n }\n }\n }\n for (let i = 0; i < this._rowHeaderCellIds.length; i++) {\n const row = this._rowHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i + this._table.frozenRowCount };\n }\n }\n }\n for (let i = 0; i < this._cornerHeaderCellIds.length; i++) {\n const row = this._cornerHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i };\n }\n }\n }\n return undefined;\n }\n /** 透视表中此函数有问题 应该传入paths */\n getHeaderCellAddressByField(field: string) {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData | SeriesNumberColumnData {\n const cache = this.getBodyWidthCache(_col, _row);\n if (cache) {\n return cache;\n }\n if (this.isSeriesNumber(_col, _row)) {\n const body = this.getSeriesNumberBody(_col, _row);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // let indicatorData;\n //正常情况下 通过行号或者列号可以取到Indicator的配置信息 但如果指标在前维度在后的情况下(如风神:列配置【指标名称,地区】) indicators中的数量是和真正指标值一样数量\n // if (this.indicatorsAsCol) indicatorData = this.indicators[_col - this.rowHeaderLevelCount];\n // else indicatorData = this.indicators[_row - this.columnHeaderLevelCount];\n // if (indicatorData) return indicatorData;\n const paths = this.getCellHeaderPaths(_col, _row);\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths?.find(colPath => colPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n const indicatorKey = paths.rowHeaderPaths?.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n // for (let col = 0; col < (this.colCount ?? 0); col++) {\n // if (id === this.columnObjects[col].id) {\n // return {\n // start: { col, row: 0 },\n // end: { col, row: 0 }\n // };\n // }\n // }\n\n // throw new Error(`can not found body layout @id=${id as number}`);\n // }\n getCellRange(col: number, row: number): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n if (!this.isHeader(col, row) || col === -1 || row === -1) {\n // || this.isIndicatorHeader(col, row)// 为什么加想不想来了 但是如果加上指标属于合并单元格的情况就会有问题了\n return result;\n }\n\n if (this.isRightFrozenColumn(col, row) || this.isBottomFrozenRow(col, row)) {\n return result;\n }\n\n if (this._table.isPivotChart()) {\n if (this.isLeftBottomCorner(col, row)) {\n return {\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n };\n } else if (this.isRightTopCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n };\n } else if (this.isRightBottomCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n };\n }\n }\n\n // if (this._cellRangeMap.has(`$${col}$${row}`)) {\n // return this._cellRangeMap.get(`$${col}$${row}`);\n // }\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n return range;\n }\n }\n if (this.isHeader(col, row) && col !== -1 && row !== -1) {\n //in header\n const id = this.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (this.colCount ?? 0); c++) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (\n id !== this.getCellId(col, r)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (\n id !== this.getCellId(col, r) ||\n (this.isSeriesNumberInHeader(col, row) && r >= this.columnHeaderLevelCount)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.end.row = r;\n }\n }\n // this._cellRangeMap.set(`${col}-${row}`, result);\n if (result.end.col - result.start.col > 100 || result.end.row - result.start.row > 100) {\n // only cache large range to avoid long col&row search\n this._largeCellRangeCache.push(result);\n }\n return result;\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n\n getBodyIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n // return this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n }\n get bottomHeaderRowCount() {\n if (this._table.isPivotChart()) {\n return this.bottomFrozenRowCount;\n }\n return 0;\n }\n\n get rightHeaderColCount() {\n if (this._table.isPivotChart()) {\n return this.rightFrozenColCount;\n }\n return 0;\n }\n getBodyIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n return -1;\n } else if (col >= this.colCount - this.rightHeaderColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWithTreeNode(col: number, row: number): IPivotTableCellHeaderPaths {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n // if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n // return this._CellHeaderPathMap.get(`${col}-${row}`);\n // }\n // if (col === this._lastCellCol && row === this._lastCellRow) {\n // return this._lastCellHeaderPath;\n // }\n\n let _largeCellRangeCacheIndex = -1;\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n _largeCellRangeCacheIndex = i;\n break;\n }\n }\n\n let colPath: ITreeLayoutHeadNode[] = this.getColHeaderPathCache(col, row);\n let rowPath: ITreeLayoutHeadNode[] = this.getRowHeaderPathCache(col, row);\n\n // if (_largeCellRangeCacheIndex !== -1) {\n // const range = this._largeCellRangeCache[_largeCellRangeCacheIndex];\n // if (this._CellHeaderPathMap.has(`${range.start.col}-${range.start.row}`)) {\n // return this._CellHeaderPathMap.get(`${range.start.col}-${range.start.row}`);\n // }\n // }\n // console.log(`${col}-${row}`);\n const recordCol = this.getBodyIndexByCol(col);\n const recordRow = this.getBodyIndexByRow(row) + this.currentPageStartIndex;\n\n // column\n if (!colPath && row >= 0 && recordCol >= 0) {\n colPath = this.columnDimensionTree.getTreePath(\n recordCol,\n this.showHeader && this.showColumnHeader\n ? row - (this.columnHeaderTitle ? 1 : 0)\n : this.columnDimensionTree.totalLevel\n );\n // this._colHeaderPathCache.set(col, colPath);\n this.setColHeaderPathCache(col, row, colPath);\n }\n\n // row\n if (!rowPath && col >= 0 && recordRow >= 0) {\n rowPath = [];\n if (this.rowHierarchyType === 'tree') {\n // 注释了原有逻辑\n // if (col >= this.rowHeaderLevelCount) {\n // //body单元格 col代表寻找的深度 这里需要加上行表头的整体深度\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + this.rowDimensionTree.totalLevel);\n // } else {\n // //header单元格 col代表寻找的深度 这里需要加上当前单元格行表头的深度\n // const hd = this.getHeader(col, row);\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + hd.hierarchyLevel);\n // }\n // 考虑多层级的ExtensionRowTree\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n let findTree = this.rowDimensionTree; //第一棵寻找的树是第一列的维度树 主树\n let level = 0; //level和col对应,代表一层层树找的过程\n while (findTree) {\n const pathIds: (number | string)[] = []; // pathIds记录寻找当前树需要匹配的cellId\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n // 组装好pathIds后从树中找出具体路径paths\n const findedRowPath = findTree.getTreePathByCellIds(pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n findTree = this._rowHeaderExtensionTree[row_pathIds[level]];\n level++;\n }\n } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader\n ? col - (this.rowHeaderTitle ? 1 : 0) - this.leftRowSeriesNumberColumnCount\n : this.rowDimensionTree.totalLevel\n );\n }\n // this._rowHeaderPathCache.set(row, rowPath);\n this.setRowHeaderPathCache(col, row, rowPath);\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath, cellLocation: this.getCellLocation(col, row) };\n // this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWithTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: [],\n cellLocation: headerPathsWidthNode.cellLocation\n };\n headerPathsWidthNode.colHeaderPaths?.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n colHeaderPath.virtual = colHeader.virtual;\n headerPaths.colHeaderPaths!.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths?.forEach((rowHeader: any) => {\n if (rowHeader.dimensionKey !== 'axis') {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n rowHeaderPath.value =\n rowHeader.value ?? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? '';\n rowHeaderPath.virtual = rowHeader.virtual;\n headerPaths.rowHeaderPaths!.push(rowHeaderPath);\n }\n });\n return headerPaths;\n }\n private getIndicatorInfoByIndicatorKey(indicatorKey: string) {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /**\n *\n * @param row_pathIds 当前_rowHeaderCellIds 可能只存储了一列id如:\n * [\n * [47],\n * [50]\n * ]\n * 但实际可能是有两三层或更多,所以全路径dimensionPath的话应该对应更多\n * [\n * [47, 48, 49]\n * [50, 51, 52]\n * ]\n * @returns 返回对应每一层维度对应的headerId, [47]为参数的话 返回 [47, 48, 49]\n */\n private findFullCellIds(row_pathIds: LayoutObjectId[]) {\n const pathIds = []; // pathIds记录寻找当前树需要匹配的cellId\n for (let level = 0; level < row_pathIds.length; level++) {\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n }\n return pathIds;\n }\n getHeaderDimension(col: number, row: number): IDimension | undefined {\n if (this.isHeader(col, row)) {\n const header = this.getHeader(col, row);\n const dimension =\n this.rowsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field) ??\n this.columnsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field);\n return dimension as IDimension;\n }\n return undefined;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isColumnIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'column' &&\n row === this.columnHeaderLevelCount - 1 &&\n col >= this.rowHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isRowIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'row' &&\n col === this.rowHeaderLevelCount - 1 &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isIndicatorHeader(col: number, row: number): boolean {\n return this.isColumnIndicatorHeader(col, row) || this.isRowIndicatorHeader(col, row);\n }\n\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n this.colIndex = 0;\n const oldRowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map((id, row) => {\n return { col, row: row + this.columnHeaderLevelCount };\n });\n const hd = this.getHeader(col, row);\n (hd.define).hierarchyState =\n (hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n const diffCell: {\n addCellPositions: CellAddress[];\n removeCellPositions: CellAddress[];\n updateCellPositions?: CellAddress[];\n } = diffCellAddress(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[col - this.leftRowSeriesNumberColumnCount]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[col - this.leftRowSeriesNumberColumnCount]),\n oldRowHeaderCellPositons,\n this\n );\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n return diffCell;\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\n * TODO 这个函数在有extensionRows的时候会有问题 数的startIndex等已经不对应了\n * @param dimensions\n * @returns\n */\n getPivotCellAdress(dimensions: IDimensionInfo[]): CellAddress | undefined {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n let col = 0; //树形展示的情况下 肯定是在第0列\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowDimensionKeys as Array).indexOf(highlightDimension.dimensionKey);\n }\n return col === -1\n ? undefined\n : { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array).indexOf(highlightDimension.dimensionKey);\n return row === -1\n ? undefined\n : { col: 0 + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderTitle ? row + 1 : row };\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr.length; k++) {\n const dimension = rowArr[k];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n let col = 0;\n let row = 0;\n if (rowDimension) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = rowDimension as ITreeLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowHeaderTitle ? level + 1 : level) + this.leftRowSeriesNumberColumnCount;\n } else {\n col = 0 + this.leftRowSeriesNumberColumnCount;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, level } = colDimension as ITreeLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? level + 1 : level;\n return { col, row };\n }\n return undefined;\n }\n getPivotDimensionInfo(col: number, row: number): IDimensionInfo[] {\n const { colHeaderPaths, rowHeaderPaths } = this.getCellHeaderPaths(col, row);\n const pivotInfo: IDimensionInfo[] = [];\n if (colHeaderPaths.length) {\n // 列表头\n colHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === colHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (rowHeaderPaths.length) {\n // 行表头\n rowHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === rowHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (this.isCornerHeader(col, row)) {\n // 角表头\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n // for (let i = 0; i <= col; i++) {\n pivotInfo.push({\n dimensionKey:\n this.rowDimensionKeys[(this.rowHeaderTitle ? col - 1 : col) - this.leftRowSeriesNumberColumnCount],\n isPivotCorner: true\n });\n // }\n } else {\n // for (let i = 0; i <= row; i++) {\n pivotInfo.push({\n dimensionKey: this.colDimensionKeys[this.columnHeaderTitle ? row - 1 : row],\n isPivotCorner: true\n });\n // }\n }\n }\n\n return pivotInfo;\n }\n\n getIndicatorKey(col: number, row: number) {\n // let indicator;\n // if (this._indicators?.length === 1) indicator = this._indicators[0];\n // else if (this.indicatorsAsCol) {\n // const bodyCol = col - this.rowHeaderLevelCount;\n // indicator = this._indicators[bodyCol % this._indicators?.length];\n // } else {\n // const bodyRow = row - this.columnHeaderLevelCount;\n // indicator = this._indicators[bodyRow % this._indicators?.length];\n // }\n\n // return indicator?.indicatorKey;\n return (this.getBody(col, row) as IndicatorData)?.indicatorKey;\n }\n getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n getRowHeaderCellAddressByCellId(cellId: LayoutObjectId) {\n let col;\n let row;\n this._rowHeaderCellIds.find((cellIds, rowIndex) => {\n const finded = cellIds.find((id, colIndex) => {\n if (id === cellId) {\n col = colIndex;\n return true;\n }\n return false;\n });\n if (finded) {\n row = rowIndex;\n return true;\n }\n return false;\n });\n if (isValid(col) && isValid(row)) {\n return { col, row: (row as number) + this.columnHeaderLevelCount };\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n }\n if (this.isCornerHeader(target.col, target.row)) {\n return false;\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row)) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n // if (\n // this.getColumnDefine(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n // this.getColumnDefine(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n // ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n // } else {\n // // 为适应下面的判断逻辑 将col加至表格第一级\n // source.col = source.col + this.leftRowSeriesNumberColumnCount;\n // target.col = target.col + this.leftRowSeriesNumberColumnCount;\n // }\n }\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n if (this.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\n\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n if (sourceRowHeaderPaths.length === targetRowHeaderPaths.length) {\n return !sourceRowHeaderPaths.find(\n (item: any, i: number) =>\n item.dimensionKey !== targetRowHeaderPaths[i].dimensionKey ||\n item.value !== targetRowHeaderPaths[i].value\n );\n }\n\n if (sourceRowHeaderPaths.length > 0) {\n //处理如层级a.b节点移动到c.d.e节点的情况 这个时候要返回false\n for (let i = 0; i < sourceRowHeaderPaths.length; i++) {\n if (sourceRowHeaderPaths[i].startInTotal !== targetRowHeaderPaths[i].startInTotal) {\n return false;\n }\n }\n }\n return true;\n }\n } else {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (\n this.canMoveHeaderPosition(source, target) &&\n !this.isCellRangeEqual(source.col, source.row, target.col, target.row)\n ) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // // _columnHeaderCellIds 逐行将每一行的source id 移动到目标地址targetCol处\n // for (let row = 0; row < this._columnHeaderCellIds.length; row++) {\n // // 从header id的二维数组中取出需要操作的source ids\n // const sourceIds = this._columnHeaderCellIds[row].splice(\n // sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n // sourceSize\n // );\n // // 将source ids插入到目标地址targetCol处\n // // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n // sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n // Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n // }\n // _columnHeaderCellFullPathIds 调整了 _columnHeaderCellIds就不需要调整了 因为他们的第二层数组对象是引用关系\n // _columnHeaderCellFullPathIds 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._columnHeaderCellFullPathIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._columnHeaderCellFullPathIds[row].splice(\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellFullPathIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).colHeaderPaths.length - 1,\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n targetCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths as any;\n const targetRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths as any;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n // const moveSize = sourceRowHeaderNode.size;\n const sourceSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - sourceSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (\n // targetIndex === source.row - this.columnHeaderLevelCount ||\n // targetIndex === sourceCellRange.end.row - this.columnHeaderLevelCount\n targetIndex ===\n sourceCellRange.start.row - this.columnHeaderLevelCount\n ) {\n return null;\n }\n\n // 表头id _rowHeaderCellIds进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._rowHeaderCellIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 表头id _rowHeaderCellFullPathIds\n const sourceIds0 = this._rowHeaderCellFullPathIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds0.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds, sourceIds0);\n // 表头id _rowHeaderCellIds_FULL进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds_FULL = this._rowHeaderCellIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds_FULL, sourceIds_FULL);\n // 表头id _rowHeaderCellFullPathIds_FULL进行调整\n const sourceIds_FULL0 = this._rowHeaderCellFullPathIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL0.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds_FULL, sourceIds_FULL0);\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n sourceRowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n // targetCellRange.start.row - this.columnHeaderLevelCount\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n sourceSize,\n targetSize: targetRowHeaderNode.size,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n\n /**\n * 通过dimensionPath获取到对应的表头地址col row, dimensionPath不要求必须按照表头层级顺序传递\n * @param dimensions\n * @returns\n */\n getCellAdressByHeaderPath(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress | undefined {\n let colHeaderPaths: IDimensionInfo[];\n let rowHeaderPaths: IDimensionInfo[];\n let isCornerCell = false;\n let forceBody = false;\n if (Array.isArray(dimensionPaths)) {\n if (dimensionPaths.length > this.rowDimensionKeys.length + this.colDimensionKeys.length) {\n //如果传入的path长度比行列维度层级多的话 无法匹配\n return undefined;\n }\n // 如果传入的是整体的path 按照行列维度区分开\n colHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.colDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.colDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.rowDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\n if (dimensionPaths?.cellLocation === 'body' && this._table.isPivotTable()) {\n forceBody = true;\n }\n }\n\n if (!Array.isArray(colHeaderPaths) && !Array.isArray(rowHeaderPaths)) {\n return undefined;\n }\n // 行列维度path根据key排序\n colHeaderPaths?.sort((a, b) => {\n return (\n this.colDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.colDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n rowHeaderPaths?.sort((a, b) => {\n return (\n this.fullRowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.fullRowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n\n colHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n rowHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n if (isCornerCell) {\n if (this.cornerSetting.titleOnDimension === 'all' && this.indicatorsAsCol && colHeaderPaths.length === 0) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderLevelCount - 1 };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'all' &&\n !this.indicatorsAsCol &&\n rowHeaderPaths.length === 0\n ) {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: this.rowHeaderLevelCount - 1, row: i };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'row' ||\n (this.cornerSetting.titleOnDimension === 'all' && !this.indicatorsAsCol)\n ) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n }\n } else {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: 0, row: i };\n }\n }\n }\n }\n let needLowestLevel = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowArr = this.rowTree;\n let rowDimensionFinded;\n let colArr = this.columnTree;\n let colDimensionFinded;\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n for (let i = 0; i < colHeaderPaths.length; i++) {\n const colDimension = colHeaderPaths[i];\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (!isValid(colDimension.indicatorKey) &&\n dimension.dimensionKey === colDimension.dimensionKey &&\n dimension.value === colDimension.value) ||\n (isValid(colDimension.indicatorKey) && dimension.indicatorKey === colDimension.indicatorKey)\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n if (needLowestLevel && !colArr) {\n colDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n colDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n // 先根据最后一个path获取到所有匹配该维度的pathCellIds\n const rowDimension = rowHeaderPaths[rowHeaderPaths.length - 1];\n const cellIDs: LayoutObjectId[] = this.headerObjects\n .filter((hd: HeaderData) => {\n return (\n (hd?.field === rowDimension.dimensionKey || hd?.field === rowDimension.indicatorKey) &&\n hd?.title === rowDimension.value\n );\n })\n .map((hd: HeaderData) => {\n return hd.id;\n });\n\n const findedCellIdPaths = this._rowHeaderCellIds.filter(rowHdCellIDs => {\n return cellIDs.indexOf(rowHdCellIDs[rowHdCellIDs.length - 1]) >= 0;\n });\n // 从上述过程中找到的pathCellIds中找到正确匹配完整路径rowHeaderPaths的一个 然后计算row行号\n const findedCellIdPath = findedCellIdPaths.find(pathIds => {\n const fullCellIds = this.findFullCellIds(pathIds);\n return (\n fullCellIds.length === rowHeaderPaths.length &&\n fullCellIds.every(id => {\n const curHd = this._headerObjectMap[id];\n return rowHeaderPaths.find(rowDimensionPath => {\n return rowDimensionPath.dimensionKey === curHd.field && rowDimensionPath.value === curHd.title;\n });\n })\n );\n });\n row = this._rowHeaderCellIds.indexOf(findedCellIdPath) + this.columnHeaderLevelCount;\n } else {\n for (let i = 0; i < rowHeaderPaths.length; i++) {\n const rowDimension = rowHeaderPaths[i];\n // 判断级别,找到distDimension\n // let isCol = false;\n for (let j = 0; j < rowArr.length; j++) {\n const dimension = rowArr[j];\n if (\n (!isValid(rowDimension.indicatorKey) &&\n dimension.dimensionKey === rowDimension.dimensionKey &&\n dimension.value === rowDimension.value) ||\n (isValid(rowDimension.indicatorKey) &&\n dimension.indicatorKey === rowDimension.indicatorKey &&\n (!isValid(rowDimension.value) || dimension.value === rowDimension.value))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n if (needLowestLevel && (!rowArr || rowArr.some(row => row.dimensionKey === 'axis'))) {\n rowDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n rowDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n }\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (!forceBody && needLowestLevel) {\n if ((!rowDimensionFinded && !isValid(row)) || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded || forceBody) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = (rowDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n row += startInTotal ?? 0;\n if (this.rowHierarchyType === 'grid') {\n defaultCol = (this.rowHeaderTitle ? level + 1 : level) + this.leftRowSeriesNumberColumnCount;\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded || forceBody) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, level } = (colDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n col += startInTotal ?? 0;\n defaultRow = this.columnHeaderTitle ? level + 1 : level;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\n }\n return undefined;\n }\n\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n if (typeof indicatorObj?.chartSpec === 'function') {\n return;\n }\n indicatorObj && (indicatorObj.chartInstance = chartInstance);\n }\n\n getChartInstance(_col: number, _row: number) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n return indicatorObj?.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getDimension(dimensionKey: string, type: 'column' | 'row'): any {\n if (type === 'column') {\n return this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n } else if (type === 'row') {\n return this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n }\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n if (\n ((this.isFrozenColumn(col, row) || this.isRightFrozenColumn(col, row)) &&\n isHasCartesianChartInline(col, row, 'row', this)) ||\n ((this.isFrozenRow(col, row) || this.isBottomFrozenRow(col, row)) &&\n isHasCartesianChartInline(col, row, 'col', this))\n ) {\n const getAxisConfigInPivotChart = Factory.getFunction('getAxisConfigInPivotChart') as GetAxisConfigInPivotChart;\n const config = getAxisConfigInPivotChart(col, row, this);\n if (config?.visible === false) {\n return undefined;\n }\n return config;\n }\n return undefined;\n }\n isEmpty(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.isLeftBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightTopCorner(col, row)) {\n return true;\n }\n return false;\n }\n isAxisCell(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n if (\n (this.isBottomFrozenRow(col, row) && isHasCartesianChartInline(col, row, 'col', this)) ||\n (this.isRightFrozenColumn(col, row) && isHasCartesianChartInline(col, row, 'row', this))\n ) {\n return true;\n }\n if (\n this.isRowHeader(col, row) &&\n col === this.rowHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'row', this)\n ) {\n return true;\n }\n if (\n this.hasTwoIndicatorAxes &&\n this.indicatorsAsCol &&\n row === this.columnHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'col', this)\n ) {\n return true;\n }\n }\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n if (isCartesianChart(col, row, this) || this.isAxisCell(col, row)) {\n return getChartAxes(col, row, this);\n }\n return undefined;\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n\n getChartSpec(col: number, row: number): any {\n return getChartSpec(col, row, this);\n }\n isShareChartSpec(col: number, row: number): any {\n return isShareChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n return isNoChartDataRenderNothing(col, row, this);\n }\n setPagination(pagination: IPagination): void {\n this.clearCellRangeMap();\n this._table.internalProps.useOneRowHeightFillAll = false;\n this.pagination = pagination;\n\n if (\n this.rowHierarchyType === 'grid' &&\n isValid(this.pagination?.perPageCount) &&\n isValid(this.pagination?.currentPage)\n ) {\n //调整perPageCount的数量 需要是indicatorKeys.length的整数倍\n if (this.indicatorsAsCol === false) {\n this.pagination.perPageCount =\n Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;\n }\n const { perPageCount, currentPage } = this.pagination;\n // const startIndex = Math.ceil((perPageCount * (currentPage || 0)) / this.indicatorKeys.length);\n // const endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);\n this.currentPageStartIndex = perPageCount * (currentPage || 0);\n this.currentPageEndIndex = this.currentPageStartIndex + perPageCount;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n } else {\n this.currentPageStartIndex = 0;\n this.currentPageEndIndex = this._rowHeaderCellIds_FULL.length;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n }\n this.pagination && (this.pagination.totalCount = this._rowHeaderCellIds_FULL?.length);\n }\n release() {\n const activeChartInstance = (this._table as PivotTable)._getActiveChartInstance();\n activeChartInstance?.release();\n this._indicators?.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n }\n\n getHeadNode(col: number, row: number) {\n let dimensions: IDimensionInfo[];\n const headerPaths = this.getCellHeaderPaths(col, row);\n if (headerPaths.rowHeaderPaths && (headerPaths.rowHeaderPaths?.length ?? 0) > 0) {\n dimensions = headerPaths.rowHeaderPaths?.slice(0, headerPaths.rowHeaderPaths.length);\n } else if (headerPaths.colHeaderPaths && headerPaths.colHeaderPaths.length > 0) {\n dimensions = headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length);\n }\n return this.getHeadNodeByRowOrColDimensions(dimensions, col, row);\n }\n getHeadNodeByRowOrColDimensions(dimensions: IDimensionInfo[], col?: number, row?: number) {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n\n // 处理带有扩展row时 获取node错误问题 rowArr需要变更为有相应扩展后的tree\n if (\n isValid(row) &&\n isValid(col) &&\n this.rowHierarchyType === 'tree' &&\n this.extensionRows &&\n col >= 1 + this.leftRowSeriesNumberColumnCount\n ) {\n const hdId = this.getCellId(col - 1, row);\n rowArr = this._rowHeaderExtensionTree[hdId].tree.children;\n }\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n return undefined;\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr?.length ?? 0; k++) {\n const dimension = rowArr[k];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n if (rowDimension) {\n return rowDimension;\n } else if (colDimension) {\n return colDimension;\n }\n return undefined;\n }\n clearCellRangeMap() {\n // this._cellRangeMap.clear();\n this._largeCellRangeCache.length = 0;\n this._CellHeaderPathMap = new Map();\n }\n\n /**\n * 获取图表对应的维度key非指标\n * */\n getDimensionKeyInChartSpec(_col: number, _row: number) {\n let dimensionKey: string;\n if (this.indicatorsAsCol === false) {\n //考虑pie和bar 同时配置的情况 series?.[0]?.xField;没有的情况\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey = chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n } else {\n //考虑pie和bar 同时配置的情况 series?.[0]?.xField;没有的情况\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey = chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n }\n return null;\n }\n\n /** 将_selectedDataItemsInChart保存的数据状态同步到各个图表实例中 */\n _generateChartState() {\n const state = {\n vtable_selected: {\n filter: (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !!match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !!match;\n }\n return false;\n }\n },\n vtable_selected_reverse: {\n filter: (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !match;\n }\n return false;\n }\n }\n };\n return state;\n }\n updateDataStateToChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n this._indicators.forEach((_indicatorObject: IndicatorData) => {\n const chartInstance = _indicatorObject.chartInstance;\n if (_indicatorObject.chartSpec.select?.enable !== false) {\n chartInstance.updateState(state);\n }\n });\n activeChartInstance?.updateState(state);\n }\n }\n updateDataStateToActiveChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n activeChartInstance?.updateState(state);\n }\n }\n\n /**\n * 获取图表对应的指标值\n * */\n getIndicatorKeyInChartSpec(_col: number, _row: number) {\n // const paths = this.getCellHeaderPaths(_col, _row);\n // let indicatorObj;\n // if (this.indicatorsAsCol) {\n // const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // } else {\n // const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // }\n // const chartSpec = indicatorObj?.chartSpec;\n const chartSpec = this.getRawChartSpec(_col, _row);\n const indicatorKeys: string[] = [];\n if (chartSpec) {\n if (chartSpec.series || chartSpec.xField || chartSpec.yField) {\n if (this.indicatorsAsCol === false) {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const yField = chartSeries.yField;\n indicatorKeys.push(yField);\n });\n } else {\n indicatorKeys.push(chartSpec.yField);\n }\n } else {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const xField = chartSeries.xField;\n indicatorKeys.push(xField);\n });\n } else {\n indicatorKeys.push(chartSpec.xField);\n }\n }\n return indicatorKeys;\n } else if (chartSpec.valueField) {\n indicatorKeys.push(chartSpec.valueField);\n }\n if (indicatorKeys.length >= 1) {\n return indicatorKeys;\n }\n }\n return null;\n }\n /** 获取某一图表列的最优高度,计算逻辑是根据图表的yField的维度值个数 * barWidth */\n getOptimunHeightForChart(row: number) {\n const path = this.getCellHeaderPaths(this.rowHeaderLevelCount, row).rowHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'yField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let height;\n if (this._chartItemBandSize) {\n // height = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n height = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n height = (collectedValues?.length ?? 0) * (barWidth + barWidth / 3);\n }\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return height + padding[0] + padding[2];\n }\n /** 获取某一图表列的最优宽度,计算逻辑是根据图表的xField的维度值个数 * barWidth */\n getOptimunWidthForChart(col: number) {\n const path = this.getCellHeaderPaths(col, this.columnHeaderLevelCount).colHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'xField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let width;\n if (this._chartItemBandSize) {\n // width = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n width = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n width = (collectedValues?.length ?? 0) * (barWidth + barWidth / 3);\n }\n\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return width + padding[1] + padding[3];\n }\n\n get leftAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'left';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n return 1; // 左侧维度轴\n }\n return 1; // 左侧主指标轴\n }\n get topAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'top';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol && this.hasTwoIndicatorAxes) {\n return 1; // 顶部副指标\n }\n return 0; // 顶部无轴\n }\n get rightAxesCount(): number {\n return this.rightFrozenColCount;\n }\n get bottomAxesCount(): number {\n return this.bottomFrozenRowCount;\n }\n getColKeysPath(col: number, row: number) {\n // const index = !this.indicatorsAsCol\n // ? col - this.rowHeaderLevelCount\n // : Math.floor((col - this.rowHeaderLevelCount) / this.indicatorKeys.length);\n // const colKey = this.dataset.colKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const colKey: string[] = [];\n if (path.colHeaderPaths.length) {\n path.colHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n colKey.push(path.value);\n }\n });\n }\n return colKey?.join(this.dataset.stringJoinChar);\n }\n getRowKeysPath(col: number, row: number) {\n // const index = this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n // const rowKey = this.dataset.rowKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const rowKey: string[] = [];\n if (path.rowHeaderPaths.length) {\n path.rowHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n rowKey.push(path.value);\n }\n });\n }\n return rowKey?.join(this.dataset.stringJoinChar);\n }\n\n getIndicatorInfo(indicatorKey: string, indicatorValue = '') {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n if (indicatorValue) {\n return indicator.title === indicatorValue;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /** 获取行头树结构 */\n getLayoutColumnTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.columnDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取行头树结构 */\n getLayoutRowTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.rowDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取列头总共的行数(全部展开情况下) */\n getLayoutColumnTreeCount() {\n const children = this.columnDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n return mainTreeCount;\n }\n /** 获取行头总共的行数(全部展开情况下) */\n getLayoutRowTreeCount() {\n const children = this.rowDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n let totalCount = mainTreeCount;\n this.extensionRows?.forEach(extensionRow => {\n if (typeof extensionRow.rowTree !== 'function') {\n //如果是自定义函数的扩展树结构 忽略这个计算 因为太复杂 需要将每个函数需要的参数都构造好才行\n const thisTreeCount = countLayoutTree(extensionRow.rowTree as { children: any }[], true);\n totalCount *= thisTreeCount;\n }\n });\n return totalCount;\n }\n resetHeaderTree() {\n this.colIndex = 0;\n //和初始化代码逻辑一致 但未考虑透视图类型\n this._rowHeaderCellFullPathIds_FULL = [];\n this._columnHeaderCellFullPathIds = [];\n this._columnHeaderCellIds = [];\n const dataset = this.dataset;\n // if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n\n const beforeRowDimensions = this.rowDimensionTree.tree.children;\n this.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n (this._table as PivotTable)._syncHierarchyState(beforeRowDimension, node);\n }\n });\n\n this.columnDimensionTree = new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.rowHierarchyType,\n this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n );\n\n this.resetColumnHeaderLevelCount();\n\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n // return this.leftRowSeriesNumberColumn[col];\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: this._table.internalProps.rowSeriesNumber.headerStyle\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n\n /** 修改表头值 */\n changeTreeNodeTitle(col: number, row: number, value: string) {\n // const headerPaths = this.getCellHeaderPaths(col, row);\n // if (headerPaths.rowHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));\n // headerTreeNode.value = value;\n // } else if (headerPaths.colHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length));\n // headerTreeNode.value = value;\n // }\n const headerTreeNode = this.getHeadNode(col, row);\n headerTreeNode.value = value;\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n changeCornerTitle(col: number, row: number, value: string) {\n if (this.isCornerHeader(col, row)) {\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n }\n generateCellIdsConsiderHideHeader() {\n // deal with hide header\n // 创建原数组的副本\n this._columnHeaderCellIds = this._columnHeaderCellFullPathIds.slice();\n if (!this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._columnHeaderCellIds.splice(indicatorIndex, 1);\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n this._columnHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n }\n }\n // else if (this.indicatorsAsCol) {\n // const indicatorsIds = this._columnHeaderCellIds[this._columnHeaderCellIds.length - 1];\n // for (let i = indicatorsIds.length - 1; i >= 0; i--) {\n // const id = indicatorsIds[i];\n // const define: IIndicator = this.headerObjects[id]?.define as any as IIndicator;\n // if ((define as any).indicatorKey && define.hide) {\n // let isHide = false;\n // if (typeof define.hide === 'function') {\n // isHide = define.hide({\n // dimensionPaths: this.getCellHeaderPaths(this.rowHeaderLevelCount + i, this.columnHeaderLevelCount - 1)\n // .colHeaderPaths as IDimensionInfo[],\n // table: this._table\n // });\n // } else {\n // isHide = define.hide;\n // }\n // //判断指标是否设置了hide\n // if (isHide) {\n // for (let j = 0; j < this._columnHeaderCellIds.length; j++) {\n // const _cellIds = this._columnHeaderCellIds[j];\n // _cellIds.splice(i, 1);\n // }\n // }\n // }\n // }\n // }\n // 创建原数组的副本\n this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL.slice();\n if (!this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n } else {\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n }\n }\n // else if (!this.indicatorsAsCol) {\n // this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL;\n // const _rowIds = this._rowHeaderCellIds_FULL;\n // for (let i = _rowIds.length - 1; i >= 0; i--) {\n // const id = _rowIds[i][_rowIds[i].length - 1];\n // const define = this.headerObjects[id]?.define;\n // if ((define as any).indicatorKey && define.hide) {\n // this._rowHeaderCellIds_FULL.splice(i, 1);\n // }\n // }\n // }\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n\n // 创建原数组的副本\n this._cornerHeaderCellIds = this._cornerHeaderCellFullPathIds.slice();\n if (this.rowHeaderLevelCount === 0 || this.columnHeaderLevelCount === 0) {\n this._cornerHeaderCellIds = [];\n } else if (this.cornerSetting.titleOnDimension === 'row' && !this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n } else {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n }\n } else if (this.cornerSetting.titleOnDimension === 'column' && !this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._cornerHeaderCellIds.splice(indicatorIndex, 1);\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n this._cornerHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n }\n }\n }\n enableUseGetBodyCache() {\n this._useGetBodyCache = true;\n this._getBodyCache.clear();\n }\n disableUseGetBodyCache() {\n this._useGetBodyCache = false;\n this._getBodyCache.clear();\n }\n enableUseHeaderPathCache() {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n disableUseHeaderPathCache() {\n this._useHeaderPathCache = false;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n getBodyWidthCache(col: number, row: number) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return undefined;\n }\n if (this.indicatorsAsCol && this._getBodyCache.has(col)) {\n return this._getBodyCache.get(col);\n } else if (!this.indicatorsAsCol && this._getBodyCache.has(row)) {\n return this._getBodyCache.get(row);\n }\n return undefined;\n }\n setBodyWidthCache(col: number, row: number, cache: IndicatorData | SeriesNumberColumnData) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return;\n }\n if (this.indicatorsAsCol) {\n this._getBodyCache.set(col, cache);\n } else {\n this._getBodyCache.set(row, cache);\n }\n }\n\n getColHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._colHeaderPathCache.has(col)\n ) {\n return this._colHeaderPathCache.get(col);\n }\n return undefined;\n }\n\n setColHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._colHeaderPathCache.set(col, cache);\n }\n }\n\n getRowHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._rowHeaderPathCache.has(row)\n ) {\n return this._rowHeaderPathCache.get(row);\n }\n return undefined;\n }\n\n setRowHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._rowHeaderPathCache.set(row, cache);\n }\n }\n}\n/** 计算 scale 的实际 range 长度 */\nfunction scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n // FIXME: vscale 同样需要加保护,目前这里加了保护以后,在 paddingInner为 1 的情况还是会崩溃\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = Math.ceil(space * step);\n return wholeSize;\n}\n\nfunction bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n","import { isValid } from '@visactor/vutils';\nimport { Env } from '../tools/env';\n\n// if (Env.mode === 'node') {\n// // eslint-disable-next-line no-global-assign\n// window = {\n// performance: {\n// now: () => -1,\n// },\n// } as any;\n// }\n/**\n * 针对聚合好的flat数据转为便于查询的行列树对象,每一个显示的指标值都能从一条数据记录中获得\n */\nexport class FlatDataToObjects {\n /**\n * 用户配置\n */\n dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n };\n /**\n * 明细数据\n */\n records: any[];\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record>> = {};\n beforeChangedTree: Record> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n // //列表头的每列对应的表头键值\n // colKeys: string[][] = [];\n // //行表头的每行对应的表头键值\n // rowKeys: string[][] = [];\n // /**\n // * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n // */\n // rowKeysPath: string[][];\n // /**\n // * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n // */\n // colKeysPath: string[][];\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n constructor(\n dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n },\n records?: any[]\n ) {\n this.dataConfig = dataConfig;\n // this.allTotal = new SumAggregator(this.dataConfig.indicators[0]);\n\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.setRecords(records);\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n }\n\n // delete this.rowFlatKeys;\n // delete this.colFlatKeys;\n }\n changeDataConfig(dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n }) {\n this.dataConfig = dataConfig;\n }\n setRecords(records: any[]) {\n this.processRecords();\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n processRecords() {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n this.processRecord(record);\n }\n }\n\n /**\n * 处理单条数据\n * @param record\n * @returns\n */\n processRecord(record: any) {\n const colKey: any[] = [];\n const rowKey: any[] = [];\n\n for (let l = 0, len1 = this.dataConfig.rows.length; l < len1; l++) {\n const rowAttr = this.dataConfig.rows[l];\n if (\n // record[rowAttr] !== null &&\n record[rowAttr] !== undefined &&\n rowAttr !== this.dataConfig.indicatorDimensionKey\n ) {\n rowKey.push(record[rowAttr]);\n }\n }\n for (let n = 0, len2 = this.dataConfig.columns.length; n < len2; n++) {\n const colAttr = this.dataConfig.columns[n];\n if (\n // record[colAttr] !== null &&\n record[colAttr] !== undefined &&\n colAttr !== this.dataConfig.indicatorDimensionKey\n ) {\n colKey.push(record[colAttr]);\n }\n }\n\n this.dataConfig.indicators?.forEach((indicatorKey: string | number) => {\n const recordValue: string | number = record[indicatorKey];\n // const indicatorName = this.dataConfig.indicators[indicatorKey];\n if (recordValue !== undefined) {\n if (this.dataConfig.indicatorsAsCol) {\n colKey.push(indicatorKey);\n } else {\n rowKey.push(indicatorKey);\n }\n }\n\n // record[indicatorKey] && (recordValue = record[indicatorKey]);\n\n // this.allTotal.push(record);\n\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowFlatKeys[flatRowKey] = 1;\n }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colFlatKeys[flatColKey] = 1;\n }\n }\n\n if (colKey.length !== 0 || rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (recordValue !== undefined) {\n this.tree[flatRowKey][flatColKey] = { value: recordValue, record };\n if (this.dataConfig.indicatorsAsCol) {\n colKey.pop();\n } else {\n rowKey.pop();\n }\n }\n }\n });\n }\n\n getTreeNode(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n ifChangedValue: boolean = true\n ): Record {\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n rowKey.map((key, i) => {\n if (key === indicator) {\n rowKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && rowKey.push(indicator);\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n colKey.map((key, i) => {\n if (key === indicator) {\n colKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && colKey.push(indicator);\n flatColKey = colKey.join(this.stringJoinChar);\n }\n\n if (ifChangedValue) {\n return this.tree?.[flatRowKey]?.[flatColKey] ?? undefined;\n }\n if (isValid(this.beforeChangedTree[flatRowKey]?.[flatColKey])) {\n return {\n value: this.beforeChangedTree[flatRowKey][flatColKey].value,\n record: this.beforeChangedTree[flatRowKey][flatColKey].record\n };\n }\n return undefined;\n }\n\n changeTreeNodeValue(rowKey: string[] = [], colKey: string[] = [], indicator: string, newValue: any) {\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n rowKey.map((key, i) => {\n if (key === indicator) {\n rowKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && rowKey.push(indicator);\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n colKey.map((key, i) => {\n if (key === indicator) {\n colKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && colKey.push(indicator);\n flatColKey = colKey.join(this.stringJoinChar);\n }\n const oldValue = this.tree[flatRowKey]?.[flatColKey]?.value;\n const oldRecord = Object.assign({}, this.tree[flatRowKey]?.[flatColKey]?.record);\n if (this.tree[flatRowKey]?.[flatColKey]?.record) {\n this.tree[flatRowKey][flatColKey].record[indicator] = newValue;\n this.tree[flatRowKey][flatColKey].value = newValue;\n } else {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n // 没有对应数据需要添加进去\n this.tree[flatRowKey][flatColKey] = {\n record: this._buildRecord(rowKey, colKey, indicator, newValue),\n value: newValue\n };\n }\n if (!this.beforeChangedTree[flatRowKey]?.[flatColKey]) {\n this.beforeChangedTree[flatRowKey] = {};\n this.beforeChangedTree[flatRowKey][flatColKey] = { record: undefined, value: undefined };\n this.beforeChangedTree[flatRowKey][flatColKey].record = oldRecord;\n this.beforeChangedTree[flatRowKey][flatColKey].value = oldValue;\n }\n }\n\n _buildRecord(rowKey: string[] = [], colKey: string[] = [], indicator: string, value: any) {\n const record = {};\n const rowDimensions = this.dataConfig.rows;\n const colDimensions = this.dataConfig.columns;\n rowDimensions.forEach((dimension, index) => {\n if (dimension !== this.dataConfig.indicatorDimensionKey) {\n record[dimension] = rowKey[index];\n }\n });\n colDimensions.forEach((dimension, index) => {\n if (dimension !== this.dataConfig.indicatorDimensionKey) {\n record[dimension] = colKey[index];\n }\n });\n record[indicator] = value;\n this.records.push(record);\n return record;\n }\n addRecords(records: any[]) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n this.processRecord(record);\n }\n this.records.push(records);\n }\n changeRecordFieldValue(fieldName: string, oldValue: string | number, value: string | number) {\n let isIndicatorName = false;\n\n for (let i = 0; i < this.dataConfig.indicators.length; i++) {\n if (this.dataConfig.indicators[i] === fieldName) {\n isIndicatorName = true;\n }\n }\n if (!isIndicatorName) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n this.tree = {};\n this.processRecords();\n }\n }\n}\n","export function join(strArr: string[], joinChar: string) {\n // return strArr.join(joinChar);\n let str = '';\n for (let i = 0; i < strArr.length; i++) {\n str += strArr[i];\n if (i !== strArr.length - 1) {\n str += joinChar;\n }\n }\n\n return str;\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type {\n FilterRules,\n IPivotTableDataConfig,\n SortRule,\n AggregationRules,\n AggregationRule,\n SortRules,\n DerivedFieldRule,\n DerivedFieldRules,\n SortByIndicatorRule,\n SortByRule,\n SortTypeRule,\n SortFuncRule,\n Totals,\n MappingRules,\n SortOrder,\n IHeaderTreeDefine,\n CollectValueBy,\n CollectedValue,\n IIndicator,\n IPivotChartDataConfig,\n CalculateddFieldRules,\n SortType\n} from '../ts-types';\nimport { AggregationType } from '../ts-types';\nimport type { Aggregator, IAggregator } from './statistics-helper';\nimport {\n AvgAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n NoneAggregator,\n RecalculateAggregator,\n RecordAggregator,\n SumAggregator,\n naturalSort,\n sortBy,\n typeSort\n} from './statistics-helper';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { join } from '../tools/join';\n/**\n * 数据处理模块\n */\nexport class Dataset {\n /**\n * 用户配置\n */\n dataConfig?: IPivotTableDataConfig | IPivotChartDataConfig;\n // /**\n // * 分页配置\n // */\n // pagination: IPagination;\n /**\n * 明细数据\n */\n records?: any[] | Record;\n filteredRecords?: any[] | Record;\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record> = {};\n changedTree: Record> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n //列表头的每列对应的表头键值\n colKeys: string[][] = [];\n //行表头的每行对应的表头键值\n rowKeys: string[][] = [];\n\n // 存储下未排序即初始normal下rowKeys和colKeys\n colKeys_normal: string[][] = [];\n rowKeys_normal: string[][] = [];\n // /**\n // * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n // */\n // rowKeysPath: string[][];\n // /**\n // * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n // */\n // colKeysPath: string[][];\n // allTotal: SumAggregator;\n rowOrder = 'key_a_to_z';\n colOrder = 'key_a_to_z';\n //是否已排序\n sorted = false;\n //排序规则\n sortRules?: SortRules;\n //过滤规则\n filterRules?: FilterRules;\n //聚合规则\n aggregationRules?: AggregationRules;\n //派生字段规则\n derivedFieldRules?: DerivedFieldRules;\n mappingRules?: MappingRules;\n calculatedFieldRules?: CalculateddFieldRules;\n /** 计算字段 */\n calculatedFiledKeys?: string[];\n calculatedFieldDependIndicatorKeys?: string[];\n //汇总配置\n totals?: Totals;\n //全局统计各指标的极值\n indicatorStatistics: { max: Aggregator; min: Aggregator; total: Aggregator }[] = [];\n\n aggregators: {\n [key: string]: {\n new (args: {\n key: string;\n dimension: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n } = {};\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n private needSplitPositiveAndNegative?: boolean;\n collectValuesBy?: Record; //收集维度值,field收集维度,by按什么进行分组收集\n collectedValues: Record> = {};\n cacheCollectedValues: Record> = {};\n rows: string[];\n rowsHasValue: boolean[]; //rows中的key是否有在records中体现\n columns: string[];\n columnsHasValue: boolean[]; //columns中的key是否有在records中体现\n indicatorKeys: string[];\n indicatorKeysIncludeCalculatedFieldDependIndicatorKeys: string[];\n customRowTree?: IHeaderTreeDefine[];\n customColTree?: IHeaderTreeDefine[];\n // 存储自定义表头树 对应每一行的 key path\n customRowTreeDimensionPaths: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n childKeys?: (string | number)[];\n }[][];\n // 存储自定义表头树 对应每一行的 key path\n customColTreeDimensionPaths: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[][];\n // // 存储行表头path 这个是全量的 对比于分页截取的rowKeysPath;\n // private rowKeysPath_FULL: string[][];\n colHeaderTree: any[];\n rowHeaderTree: any[];\n rowHierarchyType: 'grid' | 'tree';\n indicators?: (string | IIndicator)[];\n indicatorsAsCol: boolean;\n // 记录用户传入的汇总数据\n totalRecordsTree: Record> = {};\n hasExtensionRowTree?: boolean;\n parseCustomTreeToMatchRecords?: boolean;\n constructor(\n dataConfig: IPivotTableDataConfig | IPivotChartDataConfig | undefined,\n // pagination: IPagination,\n rows: string[],\n columns: string[],\n indicatorKeys: string[],\n indicators: (string | IIndicator)[] | undefined,\n indicatorsAsCol: boolean,\n records: any[] | Record | undefined,\n rowHierarchyType?: 'grid' | 'tree',\n customColTree?: IHeaderTreeDefine[],\n customRowTree?: IHeaderTreeDefine[],\n needSplitPositiveAndNegative?: boolean,\n hasExtensionRowTree?: boolean,\n parseCustomTreeToMatchRecords?: boolean\n ) {\n this.registerAggregators();\n this.dataConfig = dataConfig;\n this.filterRules = this.dataConfig?.filterRules;\n this.rowHierarchyType = rowHierarchyType ?? 'grid';\n // this.allTotal = new SumAggregator(this.indicators[0]);\n this.sortRules = this.dataConfig?.sortRules;\n this.aggregationRules = this.dataConfig?.aggregationRules;\n this.derivedFieldRules = this.dataConfig?.derivedFieldRules;\n this.mappingRules = this.dataConfig?.mappingRules;\n this.calculatedFieldRules = this.dataConfig?.calculatedFieldRules;\n this.calculatedFiledKeys = this.calculatedFieldRules?.map(rule => rule.key) ?? [];\n this.calculatedFieldDependIndicatorKeys =\n this.calculatedFieldRules?.reduce((arr: string[], rule) => {\n for (let i = 0; i < rule.dependIndicatorKeys.length; i++) {\n if (arr.indexOf(rule.dependIndicatorKeys[i]) === -1) {\n arr.push(rule.dependIndicatorKeys[i]);\n }\n }\n return arr;\n }, []) ?? [];\n this.totals = this.dataConfig?.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicatorKeys = indicatorKeys;\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys = [...indicatorKeys];\n\n for (let m = 0; m < this.calculatedFieldDependIndicatorKeys.length; m++) {\n if (\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys.indexOf(\n this.calculatedFieldDependIndicatorKeys[m]\n ) === -1\n ) {\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys.push(this.calculatedFieldDependIndicatorKeys[m]);\n }\n }\n this.indicatorsAsCol = indicatorsAsCol;\n this.indicators = indicators;\n this.customColTree = customColTree;\n this.customRowTree = customRowTree;\n this.hasExtensionRowTree = hasExtensionRowTree;\n this.parseCustomTreeToMatchRecords = parseCustomTreeToMatchRecords;\n if (this.parseCustomTreeToMatchRecords) {\n this.customColTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customColTree, 'col');\n if (!this.hasExtensionRowTree) {\n this.customRowTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customRowTree, 'row');\n }\n }\n this.colGrandTotalLabel = this.totals?.column?.grandTotalLabel ?? '总计';\n this.colSubTotalLabel = this.totals?.column?.subTotalLabel ?? '小计';\n this.rowGrandTotalLabel = this.totals?.row?.grandTotalLabel ?? '总计';\n this.rowSubTotalLabel = this.totals?.row?.subTotalLabel ?? '小计';\n this.collectValuesBy = (this.dataConfig as IPivotChartDataConfig)?.collectValuesBy;\n this.needSplitPositiveAndNegative = needSplitPositiveAndNegative ?? false;\n this.rowsIsTotal = new Array(this.rows?.length ?? 0).fill(false);\n this.colsIsTotal = new Array(this.columns?.length ?? 0).fill(false);\n\n if (this.totals?.row && this.totals.row.showSubTotals !== false && this.totals.row.subTotalsDimensions) {\n for (let i = 0, len = this.totals?.row?.subTotalsDimensions?.length ?? 0; i < len; i++) {\n const dimension = this.totals.row.subTotalsDimensions[i];\n const dimensionIndex = this.rows.indexOf(dimension);\n this.rowsIsTotal[dimensionIndex] = true;\n }\n }\n if (this.totals?.column && this.totals.column.showSubTotals !== false && this.totals.column.subTotalsDimensions) {\n for (let i = 0, len = this.totals?.column?.subTotalsDimensions?.length ?? 0; i < len; i++) {\n const dimension = this.totals.column.subTotalsDimensions[i];\n const dimensionIndex = this.columns.indexOf(dimension);\n this.colsIsTotal[dimensionIndex] = true;\n }\n }\n // this.rowKeysPath = [];\n // this.rowKeysPath_FULL = [];\n // this.colKeysPath = [];\n this.setRecords(records);\n // this.updatePagination(pagination);\n }\n\n setRecords(records: any[] | Record) {\n this.records = records;\n this.collectedValues = {};\n this.cacheCollectedValues = {};\n this.totalRecordsTree = {};\n this.tree = {};\n this.colFlatKeys = {};\n this.rowFlatKeys = {};\n this.colKeys = [];\n this.rowKeys = [];\n this.rowsHasValue = [];\n this.columnsHasValue = [];\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // if (records?.[0]?.constructor !== Array) {\n // 不能加这个判断来提升性能了,\n // PivotChart 会有这种设置情况\n // records: {\n // \"0\": [\n // {\n // \"10001\": \"数量\",\n // \"10002\": \"37534\",\n // \"10003\": \"sum_1700027602758\",\n // \"30001\": \"数量\",\n // \"1700046734980\": \"\",\n // sum_1700027602758: \"37534\",\n // },\n // ],\n // },\n this.processRecords();\n // }\n\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的sumby 处理收集维度值范围\n this.processCollectedValuesWithSumBy();\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理sortby\n this.generateCollectedValuesSortRule();\n this.processCollectedValuesWithSortBy();\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n\n // 处理汇总\n const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.totalStatistics();\n const t5 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('totalStatistics:', t5 - t4);\n\n this.rowKeys_normal = this.rowKeys.slice();\n this.colKeys_normal = this.colKeys.slice();\n //对维度排序\n const t2 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.sortKeys();\n const t3 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('sortKeys:', t3 - t2);\n //转为树形\n // const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // this.madeTree(this.rowKeys);\n // const t41 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // console.log('madeTree:', t41 - t4);\n\n const t7 = typeof window !== 'undefined' ? window.performance.now() : 0;\n if (this.customRowTree) {\n // if (!this.indicatorsAsCol) {\n // this.customRowTree = this._adjustCustomTree(this.customRowTree);\n // }\n\n this.rowHeaderTree = this.customRowTree;\n } else {\n if (this.rowHierarchyType === 'tree') {\n this.rowHeaderTree = this.ArrToTree1(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.totals?.row?.showGrandTotals ||\n (!this.indicatorsAsCol && this.columns.length === 0) ||\n (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel\n );\n } else {\n this.rowHeaderTree = this.ArrToTree(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.rowsIsTotal,\n this.totals?.row?.showGrandTotals || (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel,\n this.totals?.row?.showGrandTotalsOnTop ?? false,\n this.totals?.row?.showSubTotalsOnTop ?? false\n );\n }\n }\n if (this.customColTree) {\n // if (this.indicatorsAsCol) {\n // this.customColTree = this._adjustCustomTree(this.customColTree);\n // }\n this.colHeaderTree = this.customColTree;\n } else {\n this.colHeaderTree = this.ArrToTree(\n this.colKeys,\n this.columns.filter((key, index) => {\n return this.columnsHasValue[index];\n }),\n this.indicatorsAsCol ? this.indicators : undefined,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || (!this.indicatorsAsCol && this.columns.length === 0), // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel,\n this.totals?.column?.showGrandTotalsOnLeft ?? false,\n this.totals?.column?.showSubTotalsOnLeft ?? false\n );\n }\n const t8 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('TreeToArr:', t8 - t7);\n\n if ((this.dataConfig as IPivotChartDataConfig)?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n // this.dealWithZeroAlign();\n\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n }\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.aggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.RECALCULATE, RecalculateAggregator);\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的 处理收集维度值范围 */\n private processCollectedValuesWithSumBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy?.[field]?.sumBy) {\n for (const byKeys in this.collectedValues[field]) {\n let max;\n\n //考虑有markLine设置sum的情况\n if (this.collectValuesBy[field]?.extendRange === 'sum') {\n max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return acc + cur.value();\n }, 0);\n max += Math.round(max / 20);\n } else {\n // 寻找最大值作为轴范围的max\n max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() > acc ? cur.value() : acc;\n }, Number.MIN_SAFE_INTEGER);\n //考虑有markLine设置max的情况\n if (this.collectValuesBy[field]?.extendRange === 'max') {\n max += Math.round(max / 20);\n } else if (typeof this.collectValuesBy[field]?.extendRange === 'number') {\n max = Math.max(max, this.collectValuesBy[field]?.extendRange as number);\n }\n }\n const min = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() < acc ? cur.value() : acc;\n }, Number.MAX_SAFE_INTEGER);\n let positiveMax;\n let negativeMin;\n if (this.needSplitPositiveAndNegative) {\n positiveMax = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.positiveValue() > acc ? cur.positiveValue() : acc;\n }, Number.MIN_SAFE_INTEGER);\n negativeMin = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.negativeValue() < acc ? cur.negativeValue() : acc;\n }, Number.MAX_SAFE_INTEGER);\n }\n\n this.collectedValues[field][byKeys] = {};\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).max = max;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).min = min;\n if (this.needSplitPositiveAndNegative) {\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).positiveMax = positiveMax;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).negativeMin = negativeMin;\n }\n }\n }\n }\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理 */\n private processCollectedValuesWithSortBy() {\n const that = this;\n for (const field in this.collectedValues) {\n if (this.collectValuesBy?.[field]?.sortBy) {\n for (const byKeys in this.collectedValues[field]) {\n this.collectedValues[field][byKeys] = (this.collectedValues[field][byKeys] as Array).sort(\n (a, b) =>\n (that.collectValuesBy![field].sortBy?.indexOf(a) ?? -1) -\n (that.collectValuesBy![field].sortBy?.indexOf(b) ?? -1)\n );\n }\n }\n }\n }\n /**\n * 为了轴顺序的一致 这里将收集到的轴范围进行排序 并写入sortBy。这样不同单元格的轴顺序保持一致 同时过滤数据updateFilterRules后也不影响排序\n */\n private generateCollectedValuesSortRule() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy && this.collectValuesBy[field] && !this.collectValuesBy[field].sortBy) {\n let sortByRule: string[] = [];\n for (const byKeys in this.collectedValues[field]) {\n if (Array.isArray(this.collectedValues[field][byKeys])) {\n // 将数组中的元素合并到数组sortByRule中\n sortByRule.push(...(this.collectedValues[field][byKeys] as Array));\n // 使用Set和Array.from()方法去除重复值\n sortByRule = Array.from(new Set(sortByRule));\n }\n }\n if (sortByRule.length > 0) {\n this.collectValuesBy[field].sortBy = sortByRule;\n }\n }\n }\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n private processRecords() {\n let isNeedFilter = false;\n if ((this.filterRules?.length ?? 0) >= 1) {\n isNeedFilter = true;\n }\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n if (!this.filteredRecords) {\n this.filteredRecords = [];\n }\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (!isNeedFilter || this.filterRecord(record)) {\n (this.filteredRecords as any[]).push(record);\n this.processRecord(record);\n }\n }\n } else {\n if (!this.filteredRecords) {\n this.filteredRecords = {};\n }\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (!isNeedFilter || this.filterRecord(record)) {\n if (!(this.filteredRecords as Record)[key]) {\n (this.filteredRecords as Record)[key] = [];\n }\n (this.filteredRecords as Record)[key].push(record);\n this.processRecord(record, key);\n }\n }\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n }\n private filterRecord(record: any) {\n let isReserved = true;\n if (this.filterRules) {\n for (let i = 0; i < this.filterRules.length; i++) {\n const filterRule = this.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues?.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n }\n return isReserved;\n }\n /**\n * 处理单条数据\n * @param record\n * @param assignedIndicatorKey 指定要计算的指标key 外部用户 用指标做records的key 分别存储不同指标对应的数据时 会传入这个参数\n * @returns\n */\n private processRecord(record: any, assignedIndicatorKey?: string) {\n //这个派生字段的计算位置有待确定,是否应该放到filter之前\n this.derivedFieldRules?.forEach((derivedFieldRule: DerivedFieldRule, i: number) => {\n if (derivedFieldRule.fieldName && derivedFieldRule.derivedFunc) {\n record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);\n }\n });\n //#region 按照collectValuesBy 收集维度值\n for (const field in this.collectValuesBy) {\n if (isValid(record[field])) {\n if (!this.collectedValues[field]) {\n this.collectedValues[field] = {};\n }\n const collectKeys = this.collectValuesBy[field].by.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys]) {\n if (this.collectValuesBy[field].sumBy) {\n this.collectedValues[field][collectKeys] = {};\n } else if (this.collectValuesBy[field].range) {\n this.collectedValues[field][collectKeys] = {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n };\n } else {\n this.collectedValues[field][collectKeys] = [];\n }\n }\n\n if (this.collectValuesBy[field].sumBy) {\n const sumByKeys = this.collectValuesBy[field]\n .sumBy!.map(byField => record[byField])\n .join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys][sumByKeys]) {\n this.collectedValues[field][collectKeys][sumByKeys] = new this.aggregators[AggregationType.SUM]({\n key: field,\n dimension: field,\n isRecord: undefined,\n needSplitPositiveAndNegative: this.needSplitPositiveAndNegative\n });\n }\n this.collectedValues[field][collectKeys][sumByKeys].push(record);\n } else if (this.collectValuesBy[field].range) {\n const fieldRange = this.collectedValues[field][collectKeys] as {\n max: number;\n min: number;\n };\n const max = Math.max(record[field], fieldRange.max);\n const min = Math.min(record[field], fieldRange.min);\n if (!isNaN(max)) {\n fieldRange.max = max;\n fieldRange.min = min;\n }\n } else {\n const fieldRange = this.collectedValues[field][collectKeys] as Array;\n if (fieldRange.indexOf(record[field]) === -1) {\n fieldRange.push(record[field]);\n }\n }\n }\n }\n //#endregion\n\n let isToTalRecord = false;\n //#region 收集rowKey colKey\n // 原先的逻辑不关心customRowTree 只是根据rows 从record上收集维度path。现在考虑了rowTree和colTree的传入,需要依据colTree的真实定义的path来给数据做对应关系。\n // 一条数据可能对应多个path(多列),所以这里收集rowKeys colKeys 是个path的数组,同时兼容path中有indicatorKey和没有indicatorKey的情况\n const colKeys: { colKey: string[]; indicatorKey: string | number }[] = [];\n const rowKeys: { rowKey: string[]; indicatorKey: string | number }[] = [];\n\n if (\n this.parseCustomTreeToMatchRecords &&\n !(this.dataConfig as IPivotChartDataConfig)?.isPivotChart &&\n this.customRowTree?.length &&\n !assignedIndicatorKey && // 目前应该透视图才有可能传入assignedIndicatorKey 所以前面判断了isPivotChart 这个应该也没用了\n !this.hasExtensionRowTree // 有扩展树的情况不走新处理逻辑 走旧的即可\n ) {\n const rowTreePath = this.getFieldMatchRowDimensionPaths(record);\n if (rowTreePath.length > 0) {\n for (let i = 0, len = rowTreePath.length; i < len; i++) {\n const rowPath = rowTreePath[i];\n const rowKey: string[] = [];\n let indicatorKey;\n for (let j = 0, len1 = rowPath.length; j < len1; j++) {\n if (isValid(rowPath[j].indicatorKey)) {\n indicatorKey = rowPath[j].indicatorKey;\n } else {\n rowKey.push(rowPath[j].value);\n }\n }\n rowKeys.push({ rowKey, indicatorKey });\n }\n }\n } else {\n const rowKey: string[] = [];\n rowKeys.push({ rowKey, indicatorKey: assignedIndicatorKey });\n for (let l = 0, len1 = this.rows.length; l < len1; l++) {\n const rowAttr = this.rows[l];\n if (rowAttr in record) {\n this.rowsHasValue[l] = true;\n rowKey.push(record[rowAttr]);\n } else if (rowAttr !== IndicatorDimensionKeyPlaceholder) {\n //如果数据中缺失某个维度的值 可以认为是用户传入的汇总数据\n if (\n this.dataConfig?.totals?.row?.showGrandTotals &&\n l === 0 &&\n !this.rows.find((rk: string) => {\n // 判断没有其他字段在record中 例如rows中维度有省份和城市,当前在判断省份 数据中确实省份自动 可以认为是行总计的前提是城市也不应该存在\n return rk in record;\n })\n ) {\n rowKey.push(this.rowGrandTotalLabel);\n isToTalRecord = true;\n break;\n } else if (\n // this.dataConfig?.totals?.row?.showSubTotals &&\n this.dataConfig?.totals?.row?.subTotalsDimensions &&\n this.dataConfig?.totals?.row?.subTotalsDimensions.indexOf(this.rows[l - 1]) >= 0\n ) {\n if (this.rowHierarchyType === 'grid') {\n //如果是tree的话 不附加标签'小计'\n rowKey.push(this.rowSubTotalLabel);\n }\n isToTalRecord = true;\n break;\n }\n }\n }\n }\n\n if (\n this.parseCustomTreeToMatchRecords &&\n !(this.dataConfig as IPivotChartDataConfig)?.isPivotChart &&\n this.customColTree?.length &&\n !assignedIndicatorKey &&\n !this.hasExtensionRowTree\n ) {\n const colTreePath = this.getFieldMatchColDimensionPaths(record);\n if (colTreePath.length > 0) {\n for (let i = 0, len = colTreePath.length; i < len; i++) {\n const colPath = colTreePath[i];\n const colKey: string[] = [];\n let indicatorKey;\n for (let j = 0, len1 = colPath.length; j < len1; j++) {\n if (isValid(colPath[j].indicatorKey)) {\n indicatorKey = colPath[j].indicatorKey;\n } else {\n colKey.push(colPath[j].value);\n }\n }\n colKeys.push({ colKey: colKey, indicatorKey });\n }\n }\n } else {\n const colKey: string[] = [];\n colKeys.push({ colKey, indicatorKey: assignedIndicatorKey });\n for (let n = 0, len2 = this.columns.length; n < len2; n++) {\n const colAttr = this.columns[n];\n if (colAttr in record) {\n this.columnsHasValue[n] = true;\n colKey.push(record[colAttr]);\n } else if (colAttr !== IndicatorDimensionKeyPlaceholder) {\n //如果数据中缺失某个维度的值 可以认为是用户传入的汇总数据\n if (\n this.dataConfig?.totals?.column?.showGrandTotals &&\n n === 0 &&\n !this.columns.find((ck: string) => {\n // 判断没有其他字段在record中\n return ck in record;\n })\n ) {\n colKey.push(this.colGrandTotalLabel);\n isToTalRecord = true;\n break;\n } else if (\n // this.dataConfig?.totals?.column?.showSubTotals &&\n this.dataConfig?.totals?.column?.subTotalsDimensions &&\n this.dataConfig?.totals?.column?.subTotalsDimensions.indexOf(this.columns[n - 1]) >= 0\n ) {\n colKey.push(this.colSubTotalLabel);\n isToTalRecord = true;\n break;\n }\n }\n }\n }\n //#endregion\n //#region 对path的数组 rowKeys和colKeys 做双重循环\n for (let row_i = 0; row_i < rowKeys.length; row_i++) {\n const rowKey = rowKeys[row_i].rowKey;\n let assignedIndicatorKey_value;\n if (!this.indicatorsAsCol) {\n assignedIndicatorKey_value = rowKeys[row_i].indicatorKey;\n }\n for (let col_j = 0; col_j < colKeys.length; col_j++) {\n const colKey = colKeys[col_j].colKey;\n if (this.indicatorsAsCol) {\n assignedIndicatorKey_value = colKeys[col_j].indicatorKey;\n }\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n //#region 收集用户传入的汇总数据到totalRecordsTree\n //该条数据为汇总数据\n if (isToTalRecord) {\n if (!this.totalRecordsTree[flatRowKey]) {\n this.totalRecordsTree[flatRowKey] = {};\n }\n if (!this.totalRecordsTree[flatRowKey][flatColKey]) {\n this.totalRecordsTree[flatRowKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n if (!this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i]) {\n this.totalRecordsTree[flatRowKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n // single: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.totalRecordsTree[flatRowKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n toComputeIndicatorKeys[i] in record && this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n if (!this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i]) {\n this.totalRecordsTree[flatRowKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n // single: true,\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n\n //push融合了计算过程\n toComputeIndicatorKeys[i] in record && this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n return;\n }\n //#endregion\n\n // 此方法判断效率很低\n // if (this.rowKeys.indexOf(rowKey) === -1) this.rowKeys.push(rowKey);\n // if (this.colKeys.indexOf(colKey) === -1) this.colKeys.push(colKey);\n\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowFlatKeys[flatRowKey] = 1;\n }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colKeys.push(colKey);\n this.colFlatKeys[flatColKey] = 1;\n }\n }\n\n //组织树结构: 行-列-单元格 行key为flatRowKey如’山东青岛‘ 列key为flatColKey如’家具椅子‘\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n //这里改成数组 因为可能是多个指标值 遍历indicators 生成对应类型的聚合对象\n if (!this.tree[flatRowKey]?.[flatColKey]) {\n this.tree[flatRowKey][flatColKey] = [];\n }\n\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(rule => rule.key === toComputeIndicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n let needAddToAggregator = false;\n if (assignedIndicatorKey_value) {\n if (assignedIndicatorKey === assignedIndicatorKey_value) {\n // 参数传入的assignedIndicatorKey 表示records是指标已经分好组的 组里一定要加入指标聚合对象中\n toComputeIndicatorKeys[i] === assignedIndicatorKey_value && (needAddToAggregator = true);\n } else {\n toComputeIndicatorKeys[i] === assignedIndicatorKey_value &&\n toComputeIndicatorKeys[i] in record &&\n (needAddToAggregator = true);\n }\n }\n //加入聚合结果 考虑field为数组的情况\n else if (aggRule?.field) {\n if (typeof aggRule?.field === 'string') {\n aggRule?.field in record && (needAddToAggregator = true);\n } else {\n const isPush = aggRule?.field.find((field: string) => {\n return field in record;\n });\n isPush && (needAddToAggregator = true);\n }\n } else {\n //push融合了计算过程\n toComputeIndicatorKeys[i] in record && (needAddToAggregator = true);\n }\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i] && needAddToAggregator) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n\n if (needAddToAggregator) {\n this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n }\n //统计整体的最大最小值和总计值 共mapping使用\n if (this.mappingRules) {\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.indicatorStatistics[i] = {\n max: new this.aggregators[AggregationType.MAX]({\n key: this.indicatorKeys[i],\n dimension: this.indicatorKeys[i]\n }),\n min: new this.aggregators[AggregationType.MIN]({\n key: this.indicatorKeys[i],\n dimension: this.indicatorKeys[i]\n }),\n total: new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM]({\n key: this.indicatorKeys[i],\n dimension: aggRule?.field ?? this.indicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === this.indicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n })\n };\n }\n //push融合了计算过程\n this.indicatorStatistics[i].max.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].min.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].total.push(record);\n }\n }\n }\n }\n //#endregion\n }\n /**\n * TODO 需要完善TreeToArr这里的逻辑\n * 全量更新排序规则 对数据重新排序 生成行列paths\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules) {\n this.sorted = false;\n this.sortRules = sortRules;\n this.sortKeys();\n //和初始化代码逻辑一致 但未考虑透视图类型\n if (!this.customRowTree) {\n if (this.rowHierarchyType === 'tree') {\n this.rowHeaderTree = this.ArrToTree1(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.totals?.row?.showGrandTotals ||\n (!this.indicatorsAsCol && this.columns.length === 0) ||\n (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel\n );\n } else {\n this.rowHeaderTree = this.ArrToTree(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.rowsIsTotal,\n this.totals?.row?.showGrandTotals || (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel,\n this.totals?.row?.showGrandTotalsOnTop ?? false,\n this.totals?.row?.showSubTotalsOnTop ?? false\n );\n }\n }\n\n if (!this.customColTree) {\n this.colHeaderTree = this.ArrToTree(\n this.colKeys,\n this.columns.filter((key, index) => {\n return this.columnsHasValue[index];\n }),\n this.indicatorsAsCol ? this.indicators : undefined,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || (!this.indicatorsAsCol && this.columns.length === 0), // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel,\n this.totals?.column?.showGrandTotalsOnLeft ?? false,\n this.totals?.column?.showSubTotalsOnLeft ?? false\n );\n }\n // this.rowKeysPath_FULL = this.TreeToArr(\n // this.ArrToTree(\n // this.rowKeys,\n // this.rows,\n // this.indicatorsAsCol ? undefined : this.indicators,\n // this.rowsIsTotal,\n // this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n // this.rowGrandTotalLabel,\n // this.rowSubTotalLabel\n // )\n // );\n // this.colKeysPath = this.TreeToArr(\n // this.ArrToTree(\n // this.colKeys,\n // this.columns,\n // this.indicatorsAsCol ? this.indicators : undefined,\n // this.colsIsTotal,\n // this.totals?.column?.showGrandTotals || this.rows.length === 0,\n // this.colGrandTotalLabel,\n // this.colSubTotalLabel\n // )\n // );\n }\n /** 更新过滤规则 修改tree数据及收集的value */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.filterRules = filterRules;\n this.filteredRecords = undefined;\n if (isResetTree) {\n this.tree = {};\n } else {\n for (const treeRowKey in this.tree) {\n for (const treeColKey in this.tree[treeRowKey]) {\n for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {\n this.tree[treeRowKey][treeColKey][i]?.reset();\n }\n }\n }\n }\n this.collectedValues = {};\n this.processRecords();\n this.processCollectedValuesWithSumBy();\n this.processCollectedValuesWithSortBy();\n this.totalStatistics();\n if ((this.dataConfig as IPivotChartDataConfig)?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n // this.dealWithZeroAlign();\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n private getAggregatorRule(indicatorKey: string): AggregationRule | undefined {\n return this.aggregationRules?.find((value: AggregationRule, index: number) => {\n return indicatorKey === value.indicatorKey;\n });\n }\n /**\n * 根据行列的维度key 获取聚合对象\n * @param rowKey\n * @param colKey\n * @param indicator\n * @returns\n */\n getAggregator(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n considerChangedValue: boolean = true,\n indicatorPosition?: { position: 'col' | 'row'; index?: number }\n ): IAggregator {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n // let agg;\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n if (!indicatorPosition || indicatorPosition.position === 'row') {\n rowKey.map((key, i) => {\n if (key === indicator && (!isValid(indicatorPosition?.index) || i === indicatorPosition.index)) {\n rowKey.splice(i, 1);\n }\n });\n }\n // flatRowKey = rowKey.join(this.stringJoinChar);\n flatRowKey = join(rowKey, this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n if (!indicatorPosition || indicatorPosition.position === 'col') {\n colKey.map((key, i) => {\n if (key === indicator && (!isValid(indicatorPosition?.index) || i === indicatorPosition.index)) {\n colKey.splice(i, 1);\n }\n });\n }\n // flatColKey = colKey.join(this.stringJoinChar);\n flatColKey = join(colKey, this.stringJoinChar);\n }\n //TODO 原有逻辑 但这里先强制跳过\n // if ( rowKey.length === 0 && colKey.length === 0) {\n // agg = this.allTotal;\n // } else if (rowKey.length === 0) {\n // // agg = this.tree.total[flatColKey]?.[sortByIndicatorIndex];\n // agg = this.colTotals[flatColKey]?.[sortByIndicatorIndex];\n // } else if (colKey.length === 0) {\n // // agg = this.tree[flatRowKey].total?.[sortByIndicatorIndex];\n // agg = this.rowTotals[flatRowKey]?.[sortByIndicatorIndex];\n // } else {\n const agg = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n if (considerChangedValue && isValid(this.changedTree[flatRowKey]?.[flatColKey]?.[indicatorIndex])) {\n const changeValue = this.changedTree[flatRowKey][flatColKey][indicatorIndex];\n if (agg) {\n return {\n value: () => {\n return changeValue;\n },\n formatValue: agg.formatValue,\n formatFun: agg.formatFun,\n records: agg.records,\n className: '',\n recalculate() {\n // do nothing\n },\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n // agg.clearCacheValue();\n // agg.value = () => { // 你们直接在原来的agg上赋值 会影响获取原始值的获取\n // return changeValue;\n // };\n }\n return {\n value() {\n return changeValue;\n },\n className: '',\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n recalculate() {\n // do nothing\n },\n formatValue() {\n return changeValue;\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n }\n\n // }\n return agg\n ? agg\n : {\n className: '',\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n recalculate() {\n // do nothing\n },\n value(): any {\n return null;\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n }\n /**\n * 根据排序规则 对维度keys排序\n */\n sortKeys() {\n this.colKeys = this.colKeys_normal.slice();\n this.rowKeys = this.rowKeys_normal.slice();\n const that = this;\n if (!this.sorted) {\n this.sorted = true;\n // const getValue = function (rowKey: any, colKey: any) {\n // return that.getAggregator(rowKey, colKey, '').value();\n // };\n\n // switch (this.rowOrder) {\n // case 'value_a_to_z':\n // this.rowKeys.sort(function (a, b) {\n // return naturalSort(getValue(a, []), getValue(b, []));\n // });\n // break;\n // case 'value_z_to_a':\n // this.rowKeys.sort(function (a, b) {\n // return -naturalSort(getValue(a, []), getValue(b, []));\n // });\n // break;\n // default:\n this.rowKeys.sort(this.arrSort(this.rows, true));\n // }\n // switch (this.colOrder) {\n // case 'value_a_to_z':\n // this.colKeys.sort(function (a, b) {\n // return naturalSort(getValue([], a), getValue([], b));\n // });\n // break;\n // case 'value_z_to_a':\n // this.colKeys.sort(function (a, b) {\n // return -naturalSort(getValue([], a), getValue([], b));\n // });\n // break;\n // default:\n const sortfun = this.arrSort(this.columns, false);\n this.colKeys.sort(sortfun);\n // }\n }\n }\n /**\n * 生成排序函数 综合配置的多条排序规则\n * @param fieldArr 排序维度名称 如行rows 列columns\n * @returns\n */\n arrSort(fieldArr: string[], isRow: boolean) {\n let field;\n const that = this;\n const sortersArr: any[] = function (_this: any) {\n const results: any = [];\n for (let l = 0, len1 = fieldArr.length; l < len1; l++) {\n field = fieldArr[l];\n let isHasSortRule = false;\n if (that.sortRules) {\n for (let m = 0, len2 = that.sortRules.length; m < len2; m++) {\n if (that.sortRules[m].sortField === field) {\n isHasSortRule = true;\n results.push({\n field,\n fieldIndex: l,\n sortRule: that.sortRules[m],\n func: that.getSort(that.sortRules[m], isRow)\n });\n\n // if (that.sortRules[m].sortByIndicator) {\n // isHasSortRule = true;\n // results.push({\n // field,\n // fieldIndex: l,\n // sortRule: that.sortRules[m],\n // func: that.getSort(that.sortRules[m], field),\n // });\n // }\n }\n }\n }\n // 去掉内部默认排序\n // if (!isHasSortRule) {\n // results.push({ field, fieldIndex: l, func: naturalSort });\n // }\n }\n return results;\n }.call(this);\n return function (a: string[], b: string[]) {\n let comparison;\n let sorter;\n for (let i = 0; i < sortersArr.length; i++) {\n sorter = sortersArr[i];\n // if (!(sorter.sortRule?.sortType === SortType.NORMAL || sorter.sortRule?.sortType === SortType.normal)) {\n if (sorter.sortRule?.sortByIndicator) {\n let aChanged = a;\n let bChanged = b;\n if (sorter.fieldIndex < fieldArr.length - 1) {\n aChanged = a.slice(0, sorter.fieldIndex + 1);\n if (that.rowHierarchyType === 'grid' && isRow) {\n aChanged.push(that.rowSubTotalLabel);\n } else if (!isRow) {\n aChanged.push(that.colSubTotalLabel);\n }\n bChanged = b.slice(0, sorter.fieldIndex + 1);\n if (that.rowHierarchyType === 'grid' && isRow) {\n bChanged.push(that.rowSubTotalLabel);\n } else if (!isRow) {\n bChanged.push(that.colSubTotalLabel);\n }\n }\n comparison = sorter.func(aChanged, bChanged, sorter.sortRule?.sortType);\n } else {\n comparison = sorter.func?.(a[sorter.fieldIndex], b[sorter.fieldIndex], sorter.sortRule?.sortType);\n }\n if (comparison !== 0) {\n return comparison;\n // return (\n // comparison *\n // (sorter.sortRule?.sortType === SortType.DESC || sorter.sortRule?.sortType === SortType.desc ? -1 : 1)\n // );\n }\n }\n return 0;\n };\n }\n /**\n * 根据具体排序 获取不同的排序函数\n * @param sortRule\n * @returns\n */\n getSort(sortRule: SortRule, isSortRow: boolean) {\n const that = this;\n\n if ((sortRule).sortByIndicator) {\n return (a: string[], b: string[], sortType?: SortType) => {\n /**\n * 根据rowKey和colKey获取tree上对应的聚合值\n * @param rowKey\n * @param colKey\n * @returns\n */\n const getValue = function (rowKey: any, colKey: any) {\n //如果rowKey提供的不全 如 [地区,省,城市] 只提供了如[华东,山东] 会补全为[华东,山东,小计]\n if (\n that.rowHierarchyType === 'grid' &&\n rowKey.length < that.rows.length &&\n rowKey[rowKey.length - 1] !== that.rowSubTotalLabel &&\n rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel\n ) {\n rowKey.push(that.rowSubTotalLabel);\n }\n if (\n colKey.length < that.columns.length &&\n colKey[colKey.length - 1] !== that.colSubTotalLabel &&\n colKey[colKey.length - 1] !== that.colGrandTotalLabel\n ) {\n colKey.push(that.colSubTotalLabel);\n }\n return that.getAggregator(rowKey, colKey, (sortRule).sortByIndicator!).value();\n };\n if (isSortRow) {\n return naturalSort(\n getValue(a, (sortRule).query),\n getValue(b, (sortRule).query),\n sortType\n );\n }\n return naturalSort(\n getValue((sortRule).query, a),\n getValue((sortRule).query, b),\n sortType\n );\n };\n } else if ((sortRule).sortBy) {\n return sortBy((sortRule).sortBy);\n }\n\n if ((sortRule).sortFunc) {\n return (sortRule).sortFunc;\n }\n if ((sortRule).sortType) {\n return typeSort;\n }\n return naturalSort;\n }\n /**\n * 汇总小计\n */\n totalStatistics() {\n const that = this;\n /**\n * 计算每一行的所有列的汇总值\n * @param flatRowKey\n * @param flatColKey\n */\n const colCompute = (flatRowKey: string, flatColKey: string) => {\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColKey]) {\n // 利用汇总数据替换\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n this.tree[flatRowKey][flatColKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColKey];\n return;\n }\n const colKey = flatColKey.split(this.stringJoinChar);\n if (\n that.totals?.column?.subTotalsDimensions &&\n that.totals?.column?.subTotalsDimensions?.length > 0 &&\n that.totals.column.showSubTotals !== false\n ) {\n for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.column.subTotalsDimensions[i];\n const dimensionIndex = that.columns.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n // if (this.rowHierarchyType === 'grid') {\n colTotalKey.push(that.colSubTotalLabel);\n // }\n const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey]) {\n // 利用汇总数据替换\n this.tree[flatRowKey][flatColTotalKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey];\n return;\n }\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n if (!this.tree[flatRowKey]?.[flatColTotalKey]?.[i]) {\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColTotalKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n } else {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n }\n }\n if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n const flatColTotalKey = that.colGrandTotalLabel;\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey]) {\n // 利用汇总数据替换\n this.tree[flatRowKey][flatColTotalKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey];\n return;\n }\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(rule => rule.key === toComputeIndicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColTotalKey]?.[i]) {\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColTotalKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n } else {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n };\n\n if (\n (that?.totals?.column?.subTotalsDimensions && that?.totals?.column?.subTotalsDimensions?.length >= 1) ||\n (that?.totals?.row?.subTotalsDimensions && that?.totals?.row?.subTotalsDimensions?.length >= 1) ||\n that?.totals?.column?.showGrandTotals ||\n that?.totals?.row?.showGrandTotals\n // ||\n // that.rows.length === 0 || //todo 这里原有逻辑暂时注释掉\n // that.columns.length === 0\n ) {\n const rowTotalKeys: string[] = [];\n\n Object.keys(that.tree).forEach(flatRowKey => {\n const rowKey = flatRowKey.split(this.stringJoinChar);\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n if (\n that.totals?.row?.subTotalsDimensions &&\n that.totals?.row?.subTotalsDimensions?.length > 0 &&\n that.totals.row.showSubTotals !== false\n ) {\n for (let i = 0, len = that.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.row.subTotalsDimensions[i];\n const dimensionIndex = that.rows.indexOf(dimension);\n if (dimensionIndex >= 0 && dimensionIndex < that.rows.length - 1) {\n const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);\n if (this.rowHierarchyType === 'grid') {\n // 如果是tree的情况则不追加小计单元格值\n rowTotalKey.push(that.rowSubTotalLabel);\n }\n const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowTotalKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n }\n if (flatRowTotalKey !== flatRowKey) {\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n }\n\n if (that.totals?.row?.showGrandTotals || this.columns.length === 0) {\n const flatRowTotalKey = that.rowGrandTotalLabel;\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowTotalKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n }\n if (flatRowTotalKey !== flatRowKey) {\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n colCompute(flatRowKey, flatColKey);\n });\n });\n //增加出来的rowTotalKeys 再遍历一次 汇总小计的小计 如 东北小计(row)-办公用品小计(col)所指单元格的值\n rowTotalKeys.forEach(flatRowKey => {\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n colCompute(flatRowKey, flatColKey);\n\n // //处理 row-sub-total 中没有col-sub-total的情况\n // if (\n // that.totals?.column?.subTotalsDimensions &&\n // that.totals?.column?.subTotalsDimensions?.length > 0 &&\n // that.totals.column.showSubTotals !== false\n // ) {\n // const colKey = flatColKey.split(this.stringJoinChar);\n // for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n // const dimension = that.totals.column.subTotalsDimensions[i];\n // const dimensionIndex = that.columns.indexOf(dimension);\n // if (dimensionIndex >= 0) {\n // const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n // colTotalKey.push(that.colSubTotalLabel);\n // const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n // if (!this.tree[flatRowKey][flatColTotalKey]) {\n // colCompute(flatRowKey, flatColTotalKey);\n // }\n // }\n // }\n // }\n });\n // //处理 row-total 中没有col-total的情况\n // if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n // const flatColTotalKey = that.colGrandTotalLabel;\n // if (!this.tree[flatRowKey][flatColTotalKey]) {\n // colCompute(flatRowKey, flatColTotalKey);\n // }\n // }\n });\n }\n // else if (that.rowHierarchyType === 'tree') {\n // for (const flatRowKey in that.totalRecordsTree) {\n // for (const flatColKey in that.totalRecordsTree[flatRowKey]) {\n // colCompute(flatRowKey, flatColKey);\n // }\n // }\n // }\n for (const flatRowKey in that.totalRecordsTree) {\n for (const flatColKey in that.totalRecordsTree[flatRowKey]) {\n colCompute(flatRowKey, flatColKey);\n }\n }\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @returns\n */\n private ArrToTree1(\n arr: string[][],\n rows: string[],\n indicators: (string | IIndicator)[] | undefined,\n isGrandTotal: boolean,\n grandTotalLabel: string\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n const result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { value: string; dimensionKey: string; children: any[] | undefined } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n value,\n // id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n dimensionKey: rows[index],\n //树的叶子节点补充指标\n children:\n index === list.length - 1 && (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n node.children.push(item);\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n\n arr.forEach(item => addList(item));\n if (isGrandTotal) {\n addList([grandTotalLabel]);\n }\n return result;\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @param subTotalFlags 标志小计的维度\n * @returns\n */\n private ArrToTree(\n arr: string[][],\n rows: string[],\n indicators: (string | IIndicator)[] | undefined,\n subTotalFlags: boolean[],\n isGrandTotal: boolean,\n grandTotalLabel: string,\n subTotalLabel: string,\n showGrandTotalsOnTop: boolean,\n showSubTotalsOnTop: boolean\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n let result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { value: string; dimensionKey: string; children: any[] | undefined } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n value,\n dimensionKey: rows[index],\n // id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n //树的叶子节点补充指标\n children:\n index === list.length - 1 && (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n if (subTotalFlags[index]) {\n let curChild = item.children ?? [];\n // for (let i = index; i < list.length - 1; i++) {\n const totalChild: { value: string; dimensionKey: string; children: any[] | undefined; levelSpan: number } =\n {\n value: subTotalLabel,\n dimensionKey: rows[index + 1],\n levelSpan: subTotalFlags.length - index - 1,\n // id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n //树的叶子节点补充指标\n children:\n // i + 1 === list.length - 1 &&\n (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n\n curChild.push(totalChild);\n\n curChild = totalChild.children ?? [];\n\n // }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1] && !showSubTotalsOnTop) {\n node.children.splice(node.children.length - 1, 0, item);\n } else {\n node.children.push(item);\n }\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n if (arr?.length) {\n arr.forEach(item => addList(item));\n } else if (indicators) {\n result = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n }\n //最后将总计的节点加上\n if (isGrandTotal && arr?.length) {\n const node: { value: string; dimensionKey: string; children: any[]; levelSpan: number } = {\n value: grandTotalLabel, // getId(item?.id, 1),\n dimensionKey: rows[0],\n levelSpan: subTotalFlags.length,\n children:\n indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n }) ?? []\n };\n if (showGrandTotalsOnTop) {\n result.unshift(node);\n } else {\n result.push(node);\n }\n }\n return result;\n }\n\n private cacheDeminsionCollectedValues() {\n for (const key in this.collectValuesBy) {\n if (this.collectValuesBy[key].type === 'xField' || this.collectValuesBy[key].type === 'yField') {\n if ((this.dataConfig as IPivotChartDataConfig).dimensionSortArray) {\n this.cacheCollectedValues[key] = arraySortByAnotherArray(\n this.collectedValues[key] as unknown as string[],\n (this.dataConfig as IPivotChartDataConfig).dimensionSortArray!\n ) as unknown as Record;\n } else {\n this.cacheCollectedValues[key] = this.collectedValues[key];\n }\n }\n }\n }\n\n changeTreeNodeValue(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n newValue: string | number\n ) {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n flatColKey = colKey.join(this.stringJoinChar);\n }\n\n if (this.changedTree[flatRowKey]?.[flatColKey]) {\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n } else if (this.changedTree[flatRowKey]) {\n this.changedTree[flatRowKey][flatColKey] = [];\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n } else {\n this.changedTree[flatRowKey] = {};\n this.changedTree[flatRowKey][flatColKey] = [];\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n }\n const cellAggregator = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n if (cellAggregator?.records.length === 1) {\n cellAggregator.records[0][this.indicatorKeys[indicatorIndex]] = newValue;\n }\n }\n\n changeRecordFieldValue(fieldName: string, oldValue: string | number, value: string | number) {\n let isIndicatorName = false;\n\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (this.indicatorKeys[i] === fieldName) {\n isIndicatorName = true;\n }\n }\n\n if (!isIndicatorName) {\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n } else {\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n }\n }\n\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n this.tree = {};\n this.processRecords();\n }\n }\n /** 主要是树形结构懒加载使用 */\n _rowTreeHasChanged() {\n if (!this.hasExtensionRowTree) {\n this.customRowTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customRowTree, 'row');\n }\n }\n changeDataConfig(dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n }) {\n this.rows = dataConfig.rows;\n this.columns = dataConfig.columns;\n }\n addRecords(records: any[]) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n this.processRecord(record);\n }\n if (Array.isArray(this.records)) {\n this.records.push(records);\n }\n }\n\n //将树形结构转为二维数组\n private customTreeToDimensionPathArr(tree: IHeaderTreeDefine[], type: 'col' | 'row') {\n const result: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[][] = []; // 结果\n const that = this;\n function getPath(\n node: IHeaderTreeDefine,\n arr: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n virtual?: boolean;\n childKeys?: (string | number)[];\n }[]\n ) {\n if (!node.virtual) {\n if (\n arr[arr.length - 1]?.childKeys &&\n node.dimensionKey &&\n arr[arr.length - 1].childKeys.indexOf(node.dimensionKey) === -1 &&\n node.dimensionKey !== arr[arr.length - 1].dimensionKey\n ) {\n arr[arr.length - 1].childKeys.push(node.dimensionKey);\n }\n arr.push({\n dimensionKey: isValid(node.indicatorKey) ? undefined : node.dimensionKey,\n value: node.value,\n indicatorKey: node.indicatorKey,\n virtual: node.virtual\n });\n }\n if ((node.children as [])?.length > 0) {\n if (that.rowHierarchyType === 'tree' && type === 'row') {\n arr[arr.length - 1].childKeys = [];\n result.push([...arr]);\n }\n // 存在多个节点就递归\n (node.children as [])?.forEach((childItem: IHeaderTreeDefine) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree?.forEach((treeNode: IHeaderTreeDefine) => getPath(treeNode, []));\n return result;\n }\n\n private getFieldMatchColDimensionPaths(record: any) {\n const fieldMatchDimensionPaths = [];\n for (let i = 0; i < this.customColTreeDimensionPaths?.length ?? 0; i++) {\n const dimensionPath: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[] = this.customColTreeDimensionPaths[i];\n let isMatch = true;\n for (let j = 0; j < dimensionPath.length; j++) {\n const dimension = dimensionPath[j];\n if (\n (dimension.dimensionKey && record[dimension.dimensionKey] !== dimension.value) ||\n (dimension.indicatorKey && record[dimension.indicatorKey] === undefined)\n ) {\n isMatch = false;\n break;\n }\n }\n if (isMatch) {\n fieldMatchDimensionPaths.push(dimensionPath);\n }\n }\n return fieldMatchDimensionPaths;\n }\n\n private getFieldMatchRowDimensionPaths(record: any) {\n const fieldMatchDimensionPaths = [];\n for (let i = 0; i < this.customRowTreeDimensionPaths?.length ?? 0; i++) {\n const dimensionPath: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n childKeys?: (string | number)[];\n }[] = this.customRowTreeDimensionPaths[i];\n let isMatch = true;\n for (let j = 0; j < dimensionPath.length; j++) {\n const dimension = dimensionPath[j];\n if (\n (dimension.dimensionKey && record[dimension.dimensionKey] !== dimension.value) ||\n (dimension.indicatorKey && record[dimension.indicatorKey] === undefined)\n ) {\n isMatch = false;\n break;\n }\n if (dimension.childKeys && j === dimensionPath.length - 1) {\n if (dimension.childKeys.length > 0 && dimension.childKeys.find(key => isValid(record[key]))) {\n isMatch = false;\n break;\n }\n }\n }\n //上面条件符合 在进一步判断 如果有是指标在行的情况 且展示为树形结构,除了有指标的节点外 其他节点都不需要统计指标值\n if (isMatch) {\n if (!this.indicatorsAsCol && this.rowHierarchyType === 'tree') {\n if (\n !dimensionPath.find(path => {\n return path.indicatorKey;\n })\n ) {\n isMatch = false;\n }\n }\n }\n if (isMatch) {\n fieldMatchDimensionPaths.push(dimensionPath);\n }\n }\n return fieldMatchDimensionPaths;\n }\n}\n\nfunction arraySortByAnotherArray(array: string[], sortArray: string[]) {\n return array.sort((a, b) => {\n const aIndex = sortArray.indexOf(a);\n const bIndex = sortArray.indexOf(b);\n if (aIndex < bIndex) {\n return -1;\n }\n if (aIndex > bIndex) {\n return 1;\n }\n return 0;\n });\n}\n","import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n PivotTableConstructorOptions,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IPagination,\n CellLocation,\n IIndicator,\n ColumnDefine,\n SortByIndicatorRule,\n SortTypeRule,\n SortRule,\n FilterRules\n} from './ts-types';\nimport { HierarchyState, SortType } from './ts-types';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { FlatDataToObjects } from './dataset/flatDataToObject';\nimport { PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from './ts-types/base-table';\nimport type { ITitleComponent } from './components/title/title';\nimport { cloneDeep, isNumber, isValid } from '@visactor/vutils';\nimport { Env } from './tools/env';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport { EditManager } from './edit/edit-manager';\nimport * as editors from './edit/editors';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { isAllDigits } from './tools/util';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport {\n deleteHideIndicatorNode,\n parseColKeyRowKeyForPivotTable,\n supplementIndicatorNodesForCustomTree\n} from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\n\nexport class PivotTable extends BaseTable implements PivotTableAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotTableProtected;\n declare options: PivotTableConstructorOptions;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n flatDataToObjects?: FlatDataToObjects; //数据处理对象 聚合后的flat数据 转成便于查询的行列二维数组\n // drillMenu: Menu; //上卷下钻的按钮\n // eslint-disable-next-line default-param-last\n constructor(options: PivotTableConstructorOptions);\n constructor(container: HTMLElement, options: PivotTableConstructorOptions);\n constructor(container?: HTMLElement | PivotTableConstructorOptions, options?: PivotTableConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as PivotTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as PivotTableConstructorOptions;\n if ((container as PivotTableConstructorOptions).container) {\n container = (container as PivotTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n if (options) {\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators![index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n //分页配置\n this.pagination = options.pagination;\n this.internalProps.columnResizeType = options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n if (options.customConfig?.enableDataAnalysis === false) {\n // let columnDimensionTree;\n // let rowDimensionTree;\n // if (options.columnTree) {\n const columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n // }\n // if (options.rowTree) {\n const rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n // }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n // options.indicatorsAsCol === false ? rowKeys.concat(IndicatorDimensionKeyPlaceholder) : rowKeys,\n // options.indicatorsAsCol !== false ? columnKeys.concat(IndicatorDimensionKeyPlaceholder) : columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n options.rowHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(\n this,\n this.dataset,\n columnDimensionTree,\n rowDimensionTree\n );\n }\n this._changePivotSortStateBySortRules();\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n // this.render();\n\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n }\n static get EVENT_TYPE(): typeof PIVOT_TABLE_EVENT_TYPE {\n return PIVOT_TABLE_EVENT_TYPE;\n }\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): false {\n return false;\n }\n get recordsCount() {\n return this.records?.length;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n } else if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: PivotTableConstructorOptions) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options);\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators[index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.stateManager.initCheckedState(this.internalProps.records);\n this.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n //分页配置\n this.pagination = options.pagination;\n // 更新protectedSpace\n internalProps.columnResizeType = options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.rowResizeType ?? 'row';\n internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n\n //维护tree树形结构的展开状态\n if (\n options?.rowHierarchyType === 'tree' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowExpandLevel === options?.rowExpandLevel\n ) {\n const beforeRowDimensions = (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowDimensionTree.tree.children;\n this.internalProps.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, node);\n }\n });\n }\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n if (options.customConfig?.enableDataAnalysis === false) {\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n records,\n options.rowHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n }\n this._changePivotSortStateBySortRules();\n\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n\n // if (this.internalProps.title && !this.internalProps.title.isReleased) {\n // this._updateSize();\n // this.internalProps.title.resize();\n // this.scenegraph.resize();\n // }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n // this.render();\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination?: IPagination): void {\n if (pagination) {\n if (!this.pagination) {\n this.pagination = { currentPage: 0, perPageCount: 0 };\n }\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(this.pagination);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n } else if (this.pagination) {\n // 原来有分页 现在更新成不分页\n this.pagination = undefined;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n }\n\n refreshHeader(): void {\n //设置列宽\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n // table.frozenColCount = layoutMap.rowHeaderLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n // table.internalProps.frozenColCount = layoutMap.rowHeaderLevelCount ?? 0;\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n // table.frozenRowCount = layoutMap.headerLevelCount;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * Get rowHierarchyType of pivotTable\n */\n get rowHierarchyType(): 'grid' | 'tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n _syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n const beforeRowDimension = sourceNode.children.find(\n (item: any) => item.dimensionKey === targetChildNode.dimensionKey && item.value === targetChildNode.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, targetChildNode);\n }\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n getFieldData(field: string, col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n return this.records[rowIndex]?.[colIndex];\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (cellDimensionPath) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n if (aggregator.records && aggregator.records.length >= 1) {\n return aggregator.records[0][field];\n }\n // return ''\n }\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n if (treeNode?.record) {\n return treeNode?.record[field];\n }\n }\n }\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (this.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = this.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = this.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount + 1;\n } else if (this.internalProps.layoutMap.isHeader(col, row)) {\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n // const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n // return typeof fieldFormat === 'function'\n // ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n // : valueNode?.value ?? '';\n return aggregator.formatValue\n ? aggregator.formatValue(col, row, this as BaseTableAPI)\n : typeof fieldFormat === 'function'\n ? fieldFormat(aggregator?.value(), col, row, this as BaseTableAPI)\n : aggregator?.value() ?? '';\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const valueNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n return typeof fieldFormat === 'function'\n ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n : valueNode?.value ?? '';\n }\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.value;\n }\n\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.value;\n }\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.record;\n }\n }\n\n getCellRawRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.record;\n }\n }\n /**\n * 全量更新排序规则\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules, col?: number, row?: number) {\n if (this.internalProps.dataConfig) {\n this.internalProps.dataConfig.sortRules = sortRules;\n } else {\n this.internalProps.dataConfig = { sortRules };\n }\n this.dataset.updateSortRules(sortRules);\n this._changePivotSortStateBySortRules();\n const { layoutMap } = this.internalProps;\n layoutMap.resetHeaderTree();\n // 清空单元格内容\n this.scenegraph.clearCells();\n if (isNumber(col) && isNumber(row)) {\n if (this.isRowHeader(col, row)) {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (this.isCornerHeader(col, row)) {\n if (layoutMap.cornerSetting.titleOnDimension === 'column') {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (layoutMap.cornerSetting.titleOnDimension === 'row') {\n this.internalProps._heightResizedRowMap.clear();\n }\n } else if (this.isColumnHeader(col, row)) {\n this.internalProps._heightResizedRowMap.clear();\n }\n this.refreshRowColCount();\n } else {\n this.refreshHeader();\n }\n this.internalProps.useOneRowHeightFillAll = false;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph(true);\n this.render();\n }\n _changePivotSortStateBySortRules() {\n this.pivotSortState = [];\n const sortRules = this.internalProps.dataConfig?.sortRules ?? [];\n for (let i = 0; i < sortRules.length; i++) {\n const sortRule = sortRules[i];\n // if ((sortRule as SortByIndicatorRule).sortType) {\n const dimensions: IDimensionInfo[] = [];\n if (\n (sortRule as SortByIndicatorRule).sortByIndicator &&\n (sortRule as SortByIndicatorRule).sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n for (let j = 0; j < (sortRule as SortByIndicatorRule).query.length; j++) {\n dimensions.push({\n dimensionKey: this.dataset.indicatorsAsCol ? this.dataset.columns[j] : this.dataset.rows[j],\n value: (sortRule as SortByIndicatorRule).query[j]\n });\n }\n dimensions.push({\n indicatorKey: (sortRule as SortByIndicatorRule).sortByIndicator,\n value:\n this.internalProps.layoutMap.getIndicatorInfo((sortRule as SortByIndicatorRule).sortByIndicator)?.title ??\n (sortRule as SortByIndicatorRule).sortByIndicator\n });\n } else {\n dimensions.push({\n dimensionKey: (sortRule as SortTypeRule).sortField,\n isPivotCorner: true,\n value: (sortRule as SortTypeRule).sortField\n });\n }\n const sortType = sortRule.sortType ? (sortRule.sortType.toUpperCase() as 'ASC' | 'DESC' | 'NORMAL') : 'ASC';\n this.pivotSortState.push({\n dimensions,\n order: SortType[sortType]\n });\n // }\n }\n }\n /** 解析配置columnWidthConfig传入的列宽配置 */\n _parseColumnWidthConfig(columnWidthConfig: { dimensions: IDimensionInfo[]; width: number }[]) {\n for (let i = 0; i < columnWidthConfig?.length; i++) {\n const item = columnWidthConfig[i];\n const dimensions = item.dimensions;\n const width = item.width;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n if (cell && cell.col >= this.rowHeaderLevelCount) {\n const cellPath = this.getCellHeaderPaths(cell.col, this.columnHeaderLevelCount); //如单指标隐藏指标情况,从body行去取headerPath才会包括指标维度\n if (cellPath.colHeaderPaths.length === dimensions.length) {\n let match = true;\n for (let i = 0; i < dimensions.length; i++) {\n const dimension = dimensions[i];\n const finded = (cellPath.colHeaderPaths as IDimensionInfo[]).findIndex((colPath: IDimensionInfo, index) => {\n if (colPath.indicatorKey === dimension.indicatorKey) {\n return true;\n }\n if (colPath.dimensionKey === dimension.dimensionKey && colPath.value === dimension.value) {\n return true;\n }\n return false;\n });\n if (finded < 0) {\n match = false;\n break;\n }\n }\n if (match && !this.internalProps._widthResizedColMap.has(cell.col)) {\n this._setColWidth(cell.col, width);\n this.internalProps._widthResizedColMap.add(cell.col); // add resize tag\n }\n }\n }\n }\n }\n /**\n * 更新排序状态\n * @param pivotSortStateConfig.dimensions 排序状态维度对应关系;pivotSortStateConfig.order 排序状态\n */\n updatePivotSortState(\n pivotSortStateConfig: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[]\n ) {\n this.pivotSortState = pivotSortStateConfig;\n }\n // changePivotSortState(pivotSortState: { dimensions: IDimensionInfo[]; order: SortOrder }) {\n // let isExist = false;\n // for (let i = 0; i < this.pivotSortState.length; i++) {\n // const pivotSortStateItem = this.pivotSortState[i];\n // const dimensions = pivotSortStateItem.dimensions;\n // const isEqual = dimensions.every(\n // (item, index) =>\n // (item.dimensionKey === pivotSortState.dimensions[index].dimensionKey ||\n // item.indicatorKey === pivotSortState.dimensions[index].indicatorKey) &&\n // item.value === pivotSortState.dimensions[index].value &&\n // ((isValid(item.isPivotCorner ?? pivotSortState.dimensions[index].isPivotCorner) &&\n // item.isPivotCorner === pivotSortState.dimensions[index].isPivotCorner) ||\n // (!isValid(item.isPivotCorner) && !isValid(pivotSortState.dimensions[index].isPivotCorner)))\n // );\n // if (isEqual) {\n // isExist = true;\n // pivotSortStateItem.order = pivotSortState.order;\n // break;\n // }\n // }\n // if (!isExist) {\n // this.pivotSortState.push(pivotSortState);\n // }\n // }\n /** 如果单元格所在维度或者指标配置了sort自动 可以通过该接口进行排序 */\n sort(col: number, row: number, order: SortOrder) {\n let dimensions: IDimensionInfo[];\n if ((this as PivotTable).isCornerHeader(col, row)) {\n const dimensionInfo = (this as PivotTable).getHeaderDefine(col, row) as any;\n dimensions = [];\n const dimension: IDimensionInfo = {\n isPivotCorner: true,\n dimensionKey: dimensionInfo.value,\n value: dimensionInfo.value\n };\n dimensions.push(dimension);\n } else if ((this as PivotTable).isColumnHeader(col, row)) {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).colHeaderPaths as IDimensionInfo[];\n } else {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).rowHeaderPaths as IDimensionInfo[];\n }\n\n const sortIndicator = dimensions[dimensions.length - 1].indicatorKey;\n\n const headerDefine = this.getHeaderDefine(col, row) as any;\n if (headerDefine.sort) {\n if ((this as PivotTable).dataset.sortRules) {\n const cacheOldDimensionSortRule: Record = {};\n for (let i = (this as PivotTable).dataset.sortRules.length - 1; i >= 0; i--) {\n const sortRule = (this as PivotTable).dataset.sortRules[i];\n if (headerDefine.dimensionKey && sortRule.sortField === headerDefine.dimensionKey) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n } else if (\n sortIndicator &&\n // headerDefine.indicatorKey === sortIndicator &&\n // sortIndicator === (sortRule as SortByIndicatorRule).sortByIndicator &&\n sortRule.sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n }\n }\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules.push({\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n });\n } else {\n (this as PivotTable).dataset.sortRules.push(\n Object.assign(cacheOldDimensionSortRule[headerDefine.dimensionKey] ?? {}, {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n })\n );\n }\n } else {\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order as 'ASC' | 'DESC'],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n }\n ];\n } else {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n }\n ];\n }\n }\n\n (this as PivotTable).updateSortRules((this as PivotTable).dataset.sortRules, col, row);\n }\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const pivotState = this.pivotSortState[i];\n const dimensions = pivotState.dimensions;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n // const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n const order = pivotState.order;\n\n if (cell && cellInRange(cellRange, cell.col, cell.row)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n for (let row = 0; row < this.internalProps.records.length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n if (Array.isArray(headerTreeNode.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: headerTreeNode\n });\n }\n }\n\n // beforeUpdateCell主要用于setTreeNodeChildren方法\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true, beforeUpdateCell?: Function) {\n let notFillWidth = false;\n let notFillHeight = false;\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const result = (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyState(col, row);\n beforeUpdateCell && beforeUpdateCell();\n //影响行数\n this.refreshRowColCount();\n // this.scenegraph.clearCells();\n // this.scenegraph.createSceneGraph();\n // this.invalidate();\n this.clearCellStyleCache();\n this.scenegraph.updateHierarchyIcon(col, row);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n result.removeCellPositions,\n result.addCellPositions,\n result.updateCellPositions,\n recalculateColWidths\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n _hasHierarchyTreeHeader() {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree';\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array): void {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n const options = this.options;\n const internalProps = this.internalProps;\n if (this.options.customConfig?.enableDataAnalysis === false) {\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.pivotSortState = [];\n if (options.pivotSortState) {\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n let editorDefine;\n if (this.isCornerHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else if (this.isHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n }\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n /** 更改单元格数据 会触发change_cell_value事件*/\n changeCellValue(col: number, row: number, value: string | undefined, workOnEditableCell = false) {\n if ((workOnEditableCell && this.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n let newValue: any = value;\n const oldValue = this.getCellOriginValue(col, row);\n const rawValue = this.getCellRawValue(col, row);\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(col, row, oldValue, newValue);\n // this.scenegraph.updateCellContent(col, row);\n const range = this.getCellRange(col, row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else if (!this.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = this.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n this.heightMode === 'adaptive' ||\n (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)\n ) {\n if (this.internalProps._heightResizedRowMap.size === 0) {\n this.scenegraph.recalculateRowHeights();\n }\n } else if (this.isAutoRowHeight() && !this.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = this.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n if (oldValue !== newValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue,\n currentValue: oldValue,\n changedValue: newValue\n });\n }\n this.scenegraph.updateNextFrame();\n }\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: string[][], workOnEditableCell = false) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n const beforeChangeValue = this.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = this.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n\n thisRowPasteColEnd = startCol + j;\n if (\n (workOnEditableCell && this.isHasEditorDefine(startCol + j, startRow + i)) ||\n workOnEditableCell === false\n ) {\n const value = rowValues[j];\n let newValue: string | number = value;\n const oldValue = oldValues[i][j];\n const rawValue = beforeChangeValues[i][j];\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(startCol + j, startRow + i, oldValue, newValue);\n const changedValue = this.getCellOriginValue(startCol + j, startRow + i);\n if (changedValue !== oldValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = this.getCellValue(col, row);\n const startRange = this.getCellRange(startCol, startRow);\n const range = this.getCellRange(pasteColEnd, pasteRowEnd);\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!this.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = this.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n\n if (this.heightMode === 'adaptive' || (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)) {\n this.scenegraph.recalculateRowHeights();\n } else if (this.isAutoRowHeight()) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (this.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = this.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, this.colCount - 1, this);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n this.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n this.scenegraph.updateNextFrame();\n }\n\n private _changeCellValueToDataSet(col: number, row: number, oldValue: string | number, newValue: string | number) {\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n this.records[rowIndex][colIndex] = newValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (this.isCornerHeader(col, row)) {\n this.internalProps.layoutMap.changeCornerTitle(col, row, newValue as string);\n } else if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.dataset.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.dataset.changeTreeNodeValue(\n !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n newValue\n );\n }\n } else if (this.flatDataToObjects) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n\n if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.flatDataToObjects.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.flatDataToObjects.changeTreeNodeValue(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n newValue\n );\n }\n }\n }\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n\n changeRecordOrder(source: number, target: number) {\n //\n }\n\n /**\n * 树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param children 设置到该单元格的子节点\n * @param records 该节点展开后新增数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n */\n setTreeNodeChildren(children: IHeaderTreeDefine[], records: any[], col: number, row: number) {\n if (this.flatDataToObjects) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.flatDataToObjects.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n });\n this.flatDataToObjects.addRecords(records);\n });\n } else {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.dataset._rowTreeHasChanged();\n this.dataset.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys\n });\n this.dataset.addRecords(records);\n });\n }\n }\n\n /** 更新数据过滤规则 对应dataConfig中filterRules配置格式 */\n updateFilterRules(filterRules: FilterRules) {\n this.internalProps.dataConfig.filterRules = filterRules;\n this.dataset.updateFilterRules(filterRules);\n this.renderWithRecreateCells();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataset?.filterRules;\n }\n}\n","import { PivotTable } from './PivotTable';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\n\nexport class PivotTableAll extends PivotTable {}\n","import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IIndicator,\n PivotChartConstructorOptions,\n CollectValueBy,\n AggregationRules,\n AggregationRule,\n AnyFunction,\n FilterRules,\n IPivotTableCellHeaderPaths,\n PivotChartAPI\n} from './ts-types';\nimport { AggregationType } from './ts-types';\nimport type { HierarchyState } from './ts-types';\nimport { getField } from './data/DataSource';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { PIVOT_CHART_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { _setDataSource, parseMarkLineGetExtendRange } from './core/tableHelper';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotChartProtected } from './ts-types/base-table';\nimport type { IChartColumnIndicator } from './ts-types/pivot-table/indicator/chart-indicator';\nimport type { Chart } from './scenegraph/graphic/chart';\nimport {\n clearCellChartCacheImage,\n clearChartCacheImage,\n updateChartData\n} from './scenegraph/refresh-node/update-chart';\nimport type { ITableAxisOption } from './ts-types/component/axis';\nimport { cloneDeep, isArray, isNumber } from '@visactor/vutils';\nimport type { DiscreteLegend } from '@visactor/vrender-components';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { IndicatorDimensionKeyPlaceholder } from './tools/global';\nimport { checkHasCartesianChart } from './layout/chart-helper/get-chart-spec';\nimport { supplementIndicatorNodesForCustomTree } from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\nimport { hasLinearAxis } from './layout/chart-helper/get-axis-config';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\n\nexport class PivotChart extends BaseTable implements PivotChartAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotChartProtected;\n declare options: PivotChartConstructorOptions;\n pivotSortState: PivotSortState[];\n\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n\n _selectedDataItemsInChart: any[] = [];\n _selectedDimensionInChart: { key: string; value: string }[] = [];\n _chartEventMap: Record = {};\n\n _axes: ITableAxisOption[];\n constructor(options: PivotChartConstructorOptions);\n constructor(container: HTMLElement, options: PivotChartConstructorOptions);\n constructor(container?: HTMLElement | PivotChartConstructorOptions, options?: PivotChartConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as PivotChartConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as PivotChartConstructorOptions;\n if ((container as PivotChartConstructorOptions).container) {\n container = (container as PivotChartConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n this.setCustomStateNameToSpec();\n this.internalProps.columnResizeType = options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = { isPivotChart: true };\n this._axes = isArray(options.axes) ? options.axes : [];\n\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys, rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys, columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys, indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n }\n return keys;\n }, []) ?? [];\n this.internalProps.dataConfig.collectValuesBy = this._generateCollectValuesConfig(columnKeys, rowKeys);\n this.internalProps.dataConfig.aggregationRules = this._generateAggregationRules();\n this.internalProps.dataConfig.dimensionSortArray = this._getDimensionSortArray();\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // null,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n undefined,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n true\n );\n if (this.options.indicatorsAsCol && checkHasCartesianChart(this.internalProps.indicators)) {\n const supplyAxisNode = (nodes: IHeaderTreeDefine[]) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if ((node.children as IHeaderTreeDefine[])?.length) {\n supplyAxisNode(node.children as IHeaderTreeDefine[]);\n } else {\n // 在指标在列上的透视图中,主指标轴(离散轴)显示在左侧,因此需要在原先行表头的布局中最右侧加入一列,用来显示坐标轴\n // 加入的这一列dimensionKey配置为'axis',在后续行列计算维度时需要注意,这一列是为了显示坐标轴加入的,不在行列维度信息内\n node.children = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n });\n };\n if (this.dataset.rowHeaderTree?.length) {\n supplyAxisNode(this.dataset.rowHeaderTree);\n } else {\n this.dataset.rowHeaderTree = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n }\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n }\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n static get EVENT_TYPE(): typeof PIVOT_CHART_EVENT_TYPE {\n return PIVOT_CHART_EVENT_TYPE;\n }\n get pivotChartAxes() {\n return this._axes;\n }\n get recordsCount() {\n return this.records?.length;\n }\n\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): true {\n return true;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: PivotChartConstructorOptions) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options);\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.setCustomStateNameToSpec();\n this._selectedDataItemsInChart = [];\n // 更新protectedSpace\n internalProps.columnResizeType = options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.rowResizeType ?? 'row';\n internalProps.dataConfig = { isPivotChart: true };\n\n this._axes = isArray(options.axes) ? options.axes : [];\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n // if (options.rows || options.columns) {\n\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys, rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys, columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys, indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n }\n return keys;\n }, []) ?? [];\n\n this.internalProps.dataConfig.collectValuesBy = this._generateCollectValuesConfig(columnKeys, rowKeys);\n this.internalProps.dataConfig.aggregationRules = this._generateAggregationRules();\n this.internalProps.dataConfig.dimensionSortArray = this._getDimensionSortArray();\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // null,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records ?? this.internalProps.records,\n undefined,\n this.internalProps.columnTree,\n this.internalProps.rowTree,\n true\n );\n if (this.options.indicatorsAsCol && checkHasCartesianChart(this.internalProps.indicators)) {\n const supplyAxisNode = (nodes: IHeaderTreeDefine[]) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if ((node.children as IHeaderTreeDefine[])?.length) {\n supplyAxisNode(node.children as IHeaderTreeDefine[]);\n } else {\n // 在指标在列上的透视图中,主指标轴(离散轴)显示在左侧,因此需要在原先行表头的布局中最右侧加入一列,用来显示坐标轴\n // 加入的这一列dimensionKey配置为'axis',在后续行列计算维度时需要注意,这一列是为了显示坐标轴加入的,不在行列维度信息内\n node.children = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n });\n };\n if (this.dataset.rowHeaderTree?.length) {\n supplyAxisNode(this.dataset.rowHeaderTree);\n } else {\n this.dataset.rowHeaderTree = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n }\n\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n }\n\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n }\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n // else {\n // console.warn('VTable Warn: your option is invalid, please check it!');\n // return this;\n // }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n // if (options.dataSource) {\n // _setDataSource(this, options.dataSource);\n // }else\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n updatePagination() {\n //void\n }\n refreshHeader(): void {\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n // table.frozenColCount = layoutMap.rowHeaderLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n table.internalProps.frozenColCount = layoutMap.rowHeaderLevelCount ?? 0;\n // table.frozenRowCount = layoutMap.headerLevelCount;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n if (table.bottomFrozenRowCount !== (layoutMap?.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = layoutMap?.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (layoutMap?.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = layoutMap?.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n private syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n this.syncHierarchyState(sourceNode.children[index], targetChildNode);\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n // getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n // if (field === null || field === undefined) {\n // return null;\n // }\n // const table = this;\n // if (table.internalProps.layoutMap.isHeader(col, row)) {\n // return null;\n // }\n // const rowIndex = this.getBodyIndexByRow(row);\n // const colIndex = this.getBodyIndexByCol(col);\n // const dataValue = table.dataSource?.getField(rowIndex, colIndex, col, row, this);\n // if (typeof field !== 'string') {\n // //field为函数format\n // const cellHeaderPaths = table.internalProps.layoutMap.getCellHeaderPaths(col, row);\n // return getField({ dataValue, ...cellHeaderPaths }, field, col, row, this, emptyFn as any);\n // }\n // return dataValue;\n // }\n\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n if (\n this.internalProps.layoutMap.isBottomFrozenRow(col, row) ||\n this.internalProps.layoutMap.isRightFrozenColumn(col, row)\n ) {\n //针对底部和右侧冻结的轴单元格的值做处理 如果有轴这里会显示轴 如果没有则显示这里获取到的值\n const indicatorKeys = this.internalProps.layoutMap.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo: IIndicator;\n indicatorKeys?.forEach(key => {\n const info = this.internalProps.layoutMap.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n return indicatorInfo?.title ?? indicatorInfo?.indicatorKey ?? '';\n }\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n }\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n // const { field, fieldFormat } = this.internalProps.layoutMap.getBody(col, row);\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n if (\n this.internalProps.layoutMap.isBottomFrozenRow(col, row) ||\n this.internalProps.layoutMap.isRightFrozenColumn(col, row)\n ) {\n //针对底部和右侧冻结的轴单元格的值做处理 如果有轴这里会显示轴 如果没有则显示这里获取到的值\n const indicatorKeys = this.internalProps.layoutMap.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo: IIndicator;\n indicatorKeys?.forEach(key => {\n const info = this.internalProps.layoutMap.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n return indicatorInfo?.title ?? indicatorInfo?.indicatorKey ?? '';\n }\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n }\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n getCellRawValue(col: number, row: number) {\n return this.getCellOriginValue(col, row);\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n }\n return undefined;\n }\n\n getCellRawRecord(col: number, row: number) {\n return this.getCellOriginRecord(col, row);\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n\n if (cellInRange(cellRange, sortCol, sortRow)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.options.records?.[0]?.constructor === Array) {\n for (let row = 0; row < (this.internalProps.records as Array).length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.options.records?.[0]?.constructor === Array) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n //nothing\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n\n _hasHierarchyTreeHeader() {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree';\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n /**\n * 根据用户配置 生成 收集维度值collectValuesBy 的配置 传给dataset用\n * 这个收集规则的逻辑是按照正常使用方式:\n * 指标显示在行表头indicatorsAsCol=false时,图表yField为指标值,xField为维度值(考虑stack)direction为默认值'vertical';\n * 指标显示在列表头indicatorsAsCol=true时,图表xField为指标值,yField为维度值(考虑stack)direction为'horizontal';\n * @param columnKeys\n * @param rowKeys\n * @returns\n */\n private _generateCollectValuesConfig(columnKeys: string[], rowKeys: string[]): Record {\n columnKeys = columnKeys.filter(key => key !== IndicatorDimensionKeyPlaceholder);\n rowKeys = rowKeys.filter(key => key !== IndicatorDimensionKeyPlaceholder);\n const indicators = this.internalProps.indicators;\n const collectValuesBy: Record = {};\n\n for (let i = 0, len = indicators?.length; i < len; i++) {\n if (typeof indicators[i] !== 'string' && (indicators[i] as IChartColumnIndicator).chartSpec) {\n if (\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'pie' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'rose' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'radar' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'gauge' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'wordCloud'\n ) {\n continue;\n }\n const indicatorDefine = indicators[i] as IIndicator;\n const indicatorSpec = (indicatorDefine as IChartColumnIndicator).chartSpec;\n\n if (this.options.indicatorsAsCol === false) {\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n // 收集指标值的范围\n collectValuesBy[indicatorDefine.indicatorKey] = {\n by: rowKeys,\n range: true,\n // 判断是否需要匹配维度值相同的进行求和计算\n sumBy: indicatorSpec?.stack && columnKeys.concat(indicatorSpec?.xField)\n };\n if (indicatorSpec.series) {\n indicatorSpec.series.forEach((chartSeries: any) => {\n const xField = typeof chartSeries.xField === 'string' ? chartSeries.xField : chartSeries.xField[0];\n collectValuesBy[xField] = {\n by: columnKeys,\n type: chartSeries.direction !== 'horizontal' ? 'xField' : undefined,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction === 'horizontal',\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', true),\n sortBy:\n chartSeries.direction !== 'horizontal'\n ? chartSeries?.data?.fields?.[xField]?.domain ?? indicatorSpec?.data?.fields?.[xField]?.domain\n : undefined\n };\n\n const yField = chartSeries.yField;\n chartSeries.stack !== false &&\n (chartSeries.type === 'bar' || chartSeries.type === 'area') &&\n (chartSeries.stack = true); //明确指定 chartSpec.stack为true\n collectValuesBy[yField] = {\n by: rowKeys,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction !== 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', false),\n sumBy: chartSeries.stack && columnKeys.concat(chartSeries?.xField), // 逻辑严谨的话 这个concat的值也需要结合 chartSeries.direction来判断是xField还是yField\n sortBy:\n chartSeries.direction === 'horizontal'\n ? chartSeries?.data?.fields?.[yField]?.domain ?? indicatorSpec?.data?.fields?.[yField]?.domain\n : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n });\n } else {\n const xField = typeof indicatorSpec.xField === 'string' ? indicatorSpec.xField : indicatorSpec.xField[0];\n collectValuesBy[xField] = {\n by: columnKeys,\n type: indicatorSpec.direction !== 'horizontal' ? 'xField' : undefined,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction === 'horizontal',\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', true),\n sortBy:\n indicatorSpec.direction !== 'horizontal' ? indicatorSpec?.data?.fields?.[xField]?.domain : undefined\n };\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n //下面这个收集的值 应该是和收集的 collectValuesBy[indicatorDefine.indicatorKey] 相同\n const yField = indicatorSpec.yField;\n collectValuesBy[yField] = {\n by: rowKeys,\n range: indicatorSpec.direction !== 'horizontal', // direction默认为'vertical'\n sumBy: indicatorSpec.stack && columnKeys.concat(indicatorSpec?.xField), // 逻辑严谨的话 这个concat的值也需要结合 chartSeries.direction来判断是xField还是yField\n sortBy:\n indicatorSpec.direction === 'horizontal' ? indicatorSpec?.data?.fields?.[yField]?.domain : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n }\n } else {\n const indicatorDefine = indicators[i] as IIndicator;\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n // 收集指标值的范围\n collectValuesBy[indicatorDefine.indicatorKey] = {\n by: columnKeys,\n range: true,\n // 判断是否需要匹配维度值相同的进行求和计算\n sumBy: indicatorSpec?.stack && rowKeys.concat(indicatorSpec?.yField)\n };\n if (indicatorSpec.series) {\n indicatorSpec.series.forEach((chartSeries: any) => {\n const yField = typeof chartSeries.yField === 'string' ? chartSeries.yField : chartSeries.yField[0];\n collectValuesBy[yField] = {\n by: rowKeys,\n type: chartSeries.direction === 'horizontal' ? 'yField' : undefined,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction !== 'horizontal',\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', false),\n sortBy:\n chartSeries.direction === 'horizontal'\n ? chartSeries?.data?.fields?.[yField]?.domain ?? indicatorSpec?.data?.fields?.[yField]?.domain\n : undefined\n };\n\n const xField = chartSeries.xField;\n chartSeries.stack !== false &&\n (chartSeries.type === 'bar' || chartSeries.type === 'area') &&\n (chartSeries.stack = true); //明确指定 chartSpec.stack为true\n collectValuesBy[xField] = {\n by: columnKeys,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction === 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', true),\n sumBy: chartSeries.stack && rowKeys.concat(chartSeries?.yField),\n sortBy:\n chartSeries.direction !== 'horizontal'\n ? chartSeries?.data?.fields?.[xField]?.domain ?? indicatorSpec?.data?.fields?.[xField]?.domain\n : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n });\n } else {\n const yField = typeof indicatorSpec.yField === 'string' ? indicatorSpec.yField : indicatorSpec.yField[0];\n collectValuesBy[yField] = {\n by: rowKeys,\n type: indicatorSpec.direction === 'horizontal' ? 'yField' : undefined,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction !== 'horizontal',\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', false),\n sortBy:\n indicatorSpec.direction === 'horizontal' ? indicatorSpec?.data?.fields?.[yField]?.domain : undefined\n };\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n //下面这个收集的值 应该是和收集的 collectValuesBy[indicatorDefine.indicatorKey] 相同\n const xField = indicatorSpec.xField;\n collectValuesBy[xField] = {\n by: columnKeys,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction === 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', true),\n sumBy: indicatorSpec.stack && rowKeys.concat(indicatorSpec?.yField),\n sortBy:\n indicatorSpec.direction !== 'horizontal' ? indicatorSpec?.data?.fields?.[xField]?.domain : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n }\n }\n }\n }\n\n return collectValuesBy;\n }\n // private _generateAggregationRules(indicatorKeys: string[]): AggregationRules {\n // return indicatorKeys.map((indicatorKey: string) => {\n // return {\n // indicatorKey, //field转为指标key\n // field: indicatorKey, //指标依据字段\n // aggregationType: AggregationType.RECORD //计算类型\n // };\n // });\n // }\n /**\n *\n * @param indicatorFromChartSpec 是否需要考虑chartSpec中的yField或者xField分析作为指标来分组数据\n * @returns\n */\n private _generateAggregationRules() {\n const aggregationRules: AggregationRules = [];\n // indicatorFromChartSpec = true;\n this.internalProps.indicators?.forEach((indicator: IIndicator | string) => {\n if (typeof indicator === 'string') {\n aggregationRules.push({\n indicatorKey: indicator, //field转为指标key\n field: indicator, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n } as AggregationRule);\n } else {\n if ((indicator as IChartColumnIndicator).chartSpec?.series) {\n // 如果chartSpec配置了组合图 series 则需要考虑 series中存在的多个指标\n const fields: string[] = [];\n (indicator as IChartColumnIndicator).chartSpec?.series.forEach((seriesSpec: any) => {\n const seriesField = this.options.indicatorsAsCol === false ? seriesSpec.yField : seriesSpec.xField;\n if (fields.indexOf(seriesField) === -1) {\n fields.push(seriesField);\n }\n });\n aggregationRules.push({\n indicatorKey: indicator.indicatorKey, //field转为指标key\n field: fields, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n });\n } else {\n const field =\n this.options.indicatorsAsCol === false\n ? (indicator as IChartColumnIndicator).chartSpec.yField\n : (indicator as IChartColumnIndicator).chartSpec.xField;\n aggregationRules.push({\n indicatorKey: indicator.indicatorKey, //field转为指标key\n field: field ?? indicator.indicatorKey, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n });\n }\n }\n });\n\n return aggregationRules;\n }\n /** 将spec中的 selected和selected_reverse 更名为vtable_selected和vtable_selected_reverse */\n private setCustomStateNameToSpec() {\n /** 修改设置的selected 和 dselected_reverse的名字加前缀vtable */\n const setCustomStateName = (spec: any) => {\n if (spec.bar?.state?.selected) {\n spec.bar.state.vtable_selected = spec.bar.state.selected;\n spec.bar.state.vtable_selected_reverse = spec.bar.state.selected_reverse;\n delete spec.bar.state.selected;\n delete spec.bar.state.selected_reverse;\n }\n if (spec.point?.state?.selected) {\n spec.point.state.vtable_selected = spec.point.state.selected;\n spec.point.state.vtable_selected_reverse = spec.point.state.selected_reverse;\n delete spec.point.state.selected;\n delete spec.point.state.selected_reverse;\n }\n if (spec.line?.state?.selected) {\n spec.line.state.vtable_selected = spec.line.state.selected;\n spec.line.state.vtable_selected_reverse = spec.line.state.selected_reverse;\n delete spec.line.state.selected;\n delete spec.line.state.selected_reverse;\n }\n if (spec.area?.state?.selected) {\n spec.area.state.vtable_selected = spec.area.state.selected;\n spec.area.state.vtable_selected_reverse = spec.area.state.selected_reverse;\n delete spec.area.state.selected;\n delete spec.area.state.selected_reverse;\n }\n if (spec.pie?.state?.selected) {\n spec.pie.state.vtable_selected = spec.pie.state.selected;\n spec.pie.state.vtable_selected_reverse = spec.pie.state.selected_reverse;\n delete spec.pie.state.selected;\n delete spec.pie.state.selected_reverse;\n }\n };\n this.internalProps.indicators?.forEach((indicator: string | IIndicator) => {\n if ((indicator as IChartColumnIndicator).chartSpec) {\n const spec = (indicator as IChartColumnIndicator).chartSpec;\n if (spec.series) {\n spec.series.forEach((series: any) => {\n setCustomStateName(series);\n });\n } else {\n setCustomStateName(spec);\n }\n }\n });\n }\n\n /** 更新数据过滤规则,适用场景:点击图例项后 更新过滤规则 来更新图表 */\n updateFilterRules(filterRules: FilterRules) {\n this.internalProps.dataConfig.filterRules = filterRules;\n this.dataset.updateFilterRules(filterRules);\n clearChartCacheImage(this.scenegraph);\n updateChartData(this.scenegraph);\n this.render();\n }\n clearChartCacheImage(col?: number, row?: number) {\n if (isNumber(col) && isNumber(row)) {\n clearCellChartCacheImage(col, row, this.scenegraph);\n } else {\n clearChartCacheImage(this.scenegraph);\n }\n }\n /** 获取图例的选择状态 */\n getLegendSelected() {\n const selected: any[] = [];\n this.internalProps.legends?.forEach(legend => {\n const data = (legend.legendComponent as any)._getSelectedLegends().map((d: any) => d.label);\n selected.push(...data);\n });\n return selected;\n }\n setLegendSelected(selectedData: (string | number)[]) {\n this.internalProps.legends?.forEach(legend => {\n (legend.legendComponent as DiscreteLegend).setSelected(selectedData);\n });\n // this.updateFilterRules([{ filterKey: '20001', filteredValues: selectedData }]);\n // this.invalidate();\n }\n /**\n * 获取图表上某一个图元的位置\n * @param datum 图元对应的数据\n * @param cellHeaderPaths 单元格的header路径\n * @returns 图元在整个表格上的坐标位置(相对表格左上角视觉坐标)\n */\n getChartDatumPosition(datum: any, cellHeaderPaths: IPivotTableCellHeaderPaths): { x: number; y: number } {\n const { chartInstance, bounds } = this.getChartInstance(cellHeaderPaths);\n if (chartInstance) {\n const position = chartInstance.convertDatumToPosition(datum);\n return position ? { x: Math.round(position.x + bounds.x1), y: Math.round(position.y + bounds.y1) } : null;\n }\n return null;\n }\n /** 获取某条数据所在的行列位置 */\n getCellAddressByRecord(record: any) {\n const rowHeaderPaths: IDimensionInfo[] = [];\n const colHeaderPaths: IDimensionInfo[] = [];\n const recordKeyMapToIndicatorKeys = {};\n const indicatorRecordKeys: (string | number)[] = [];\n this.dataset.dataConfig.aggregationRules.forEach(aggregationRule => {\n if (typeof aggregationRule.field === 'string') {\n recordKeyMapToIndicatorKeys[aggregationRule.field] = aggregationRule.indicatorKey;\n indicatorRecordKeys.push(aggregationRule.field);\n } else {\n for (let i = 0; i < aggregationRule.field.length; i++) {\n recordKeyMapToIndicatorKeys[aggregationRule.field[i]] = aggregationRule.indicatorKey;\n indicatorRecordKeys.push(aggregationRule.field[i]);\n }\n }\n });\n for (const key in record) {\n if (this.dataset.rows.indexOf(key) >= 0) {\n rowHeaderPaths.push({\n dimensionKey: key,\n value: record[key]\n });\n }\n if (this.dataset.columns.indexOf(key) >= 0) {\n colHeaderPaths.push({\n dimensionKey: key,\n value: record[key]\n });\n }\n if (indicatorRecordKeys.indexOf(key) >= 0) {\n if (this.dataset.indicatorsAsCol) {\n colHeaderPaths.push({\n indicatorKey: recordKeyMapToIndicatorKeys[key]\n });\n } else {\n rowHeaderPaths.push({\n indicatorKey: recordKeyMapToIndicatorKeys[key]\n });\n }\n }\n }\n return this.getCellAddressByHeaderPaths({\n rowHeaderPaths,\n colHeaderPaths,\n cellLocation: 'body'\n });\n }\n\n getChartInstance(cellHeaderPaths: IPivotTableCellHeaderPaths) {\n const cellAddr = this.getCellAddressByHeaderPaths(cellHeaderPaths);\n if (cellAddr) {\n const cellPosition = this.getCellRelativeRect(cellAddr.col, cellAddr.row);\n const cellGroup = this.scenegraph.getCell(cellAddr.col, cellAddr.row);\n // let position;\n let chartInstance: any;\n const chartNode: Chart = cellGroup?.getChildren()?.[0] as Chart;\n if (chartNode.attribute.chartInstance) {\n chartInstance = chartNode.attribute.chartInstance;\n const { dataId, data, axes, spec } = chartNode.attribute;\n const viewBox = chartNode.getViewBox();\n axes?.forEach((axis: any, index: number) => {\n if (axis.type === 'linear') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._domain = {\n // min: axis.range?.min ?? 0,\n // max: axis.range?.max ?? 0\n // };\n chartInstance.updateModelSpecSync(\n { type: 'axes', index },\n {\n min: axis.range?.min ?? 0,\n max: axis.range?.max ?? 0,\n tick: {\n tickMode: axis.tick?.tickMode\n }\n },\n true\n );\n } else if (axis.type === 'band') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._spec.domain = axis.domain.slice(0);\n // chartAxis.updateScaleDomain();\n chartInstance.updateModelSpec({ type: 'axes', index }, { domain: axis.domain.slice(0) }, true);\n }\n });\n\n chartInstance.updateViewBox(\n {\n x1: viewBox.x1 - (chartNode.getRootNode() as any).table.scrollLeft,\n x2: viewBox.x2 - (chartNode.getRootNode() as any).table.scrollLeft,\n y1: viewBox.y1 - (chartNode.getRootNode() as any).table.scrollTop,\n y2: viewBox.y2 - (chartNode.getRootNode() as any).table.scrollTop\n },\n false,\n false\n );\n // chartInstance.updateDataSync(dataId, data);\n if (typeof dataId === 'string') {\n chartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n // 判断是否有updateFullDataSync 木有的话 还是循环调用updateDataSync\n if (!chartInstance.updateFullDataSync) {\n chartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n chartInstance.updateFullDataSync?.(dataBatch);\n }\n // position = chartInstance.convertDatumToPosition(datum);\n // this.render();\n this.renderAsync();\n }\n // cellPosition.offsetLeft(this.tableX);\n // cellPosition.offsetTop(this.tableY);\n return {\n chartInstance,\n bounds: cellPosition.bounds\n };\n // return position\n // ? { x: Math.round(position.x + cellPosition.bounds.x1), y: Math.round(position.y + cellPosition.bounds.y1) }\n // : null;\n }\n return {};\n }\n\n _getDimensionSortArray(): string[] | undefined {\n if (this.options?.axes?.length) {\n const dimensionAxisOrient = this.options.indicatorsAsCol ? 'left' : 'bottom';\n const dimensionAxisOption = this.options.axes.find(axis => {\n if (axis.orient === dimensionAxisOrient) {\n return true;\n }\n return false;\n });\n if (dimensionAxisOption && isArray((dimensionAxisOption as any).domain)) {\n return (dimensionAxisOption as any).domain;\n }\n }\n return undefined;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array): void {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n const options = this.options;\n const internalProps = this.internalProps;\n\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n }\n\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n}\n","import type { GraphicType, IRectGraphicAttribute, ITicker, IStage } from '@visactor/vrender-core';\nimport { genNumberType, parsePadding, Rect } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, Bounds } from '@visactor/vutils';\nimport { pointInAABB, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { isBoundsLikeEqual } from '../../../utils/equal';\nimport * as VTable from '@visactor/vtable';\nimport { VChart, type IInitOption } from '@visactor/vchart';\nimport type { IVTable } from '../interface/character-table';\n\nVTable.register.chartModule('vchart', VChart);\n\nexport const TableClass: { [key: string]: any } = {\n table: VTable.ListTable,\n raw_table: VTable.ListTable,\n\n pivot_table: VTable.PivotTable,\n trend_table: VTable.PivotTable,\n okr_table: VTable.PivotTable,\n\n combination: VTable.PivotChart,\n // 其他都是 PivotChart\n\n ListTable: VTable.ListTable,\n PivotTable: VTable.PivotTable,\n PivotChart: VTable.PivotChart\n};\n\nexport interface ITableConstructor {\n new (option: any): IVTable;\n}\n\nexport interface ITableGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // 表格类型\n tableType: string;\n // ClassType: any;\n TableConstructor?: ITableConstructor;\n dpr: number;\n interactive?: boolean;\n animation?: boolean;\n // 图表的初始化参数\n chartOption?: IInitOption;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n enablePickBounds?: boolean;\n width: number;\n height: number;\n x?: number;\n y?: number;\n angle?: number;\n anchor?: [number, number];\n zIndex?: number;\n panel?: Partial;\n}\n\nexport const TABLE_NUMBER_TYPE = genNumberType();\n\nexport class VTableGraphic extends Rect {\n type: GraphicType = 'table' as any;\n declare attribute: ITableGraphicAttribute;\n protected _vTable: IVTable;\n\n get vTable() {\n return this._vTable;\n }\n get vTableStage(): IStage {\n return this._vTable.scenegraph.stage as IStage;\n }\n // vtable 的实际绘图绘制位置\n // 首先 vtable.stage 会根据 stage.window.viewBoxTransform 变换第一次,这一次变化包括了\n // 1. 全局stage的缩放;2. vtable-graphic 的位置定位;3. auto 模式下的自动偏移(这个等同于位置偏移)\n // 然后 vtable.stage.defaultLayer 会根据偏移量,将图表绘制内容再偏移回来\n // 来回2次偏移的目的是,让 vtable 内容超出原是viewBox的部分,可以正常被viewBox包含并绘制\n protected _vTableAutoTranslate: { x: number; y: number } = { x: 0, y: 0 };\n get vTableAutoTranslate() {\n return this._vTableAutoTranslate;\n }\n\n // 实际渲染图表内容的 bounds\n // 只在 auto 模式下生效\n protected _displayBounds: Bounds;\n\n doUpdateAABBBounds(full?: boolean): IAABBBounds {\n if (!this._displayBounds) {\n return super.doUpdateAABBBounds(full);\n }\n this.updateAABBBoundsStamp++;\n const graphicTheme = this.getGraphicTheme();\n const bounds = this._displayBounds.clone();\n transformBoundsWithMatrix(bounds, bounds, this.transMatrix);\n // @ts-ignore\n const { boundsPadding = graphicTheme.boundsPadding } = this.attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray as number);\n }\n this.clearUpdateBoundTag();\n this._AABBBounds.copy(bounds);\n return bounds;\n }\n\n constructor(params: ITableGraphicAttribute) {\n const { panel, zIndex, TableConstructor } = params;\n super({ ...(panel || {}), zIndex, visible: false });\n this.numberType = TABLE_NUMBER_TYPE;\n // 创建table\n this.attribute.viewBox = params.viewBox;\n const filledOption = this._createOption(params);\n this._vTable = new (TableConstructor ?? TableClass[params.tableType] ?? VTable.PivotChart)(filledOption);\n\n // 背景设置为false后,不会擦除画布内容,可以实现元素正常堆叠绘制\n const stage = this._vTable.scenegraph.stage;\n // TODO stage的pauseRender支持传入count\n (stage as any)._skipRender = -Infinity;\n this._vTable.render();\n if (stage) {\n stage.background = false as any;\n // 关闭交互\n // stage.pauseTriggerEvent();\n }\n stage.resumeRender();\n }\n\n private _createOption(params: ITableGraphicAttribute) {\n const filledOption = { ...params.spec };\n const viewBox = params.viewBox;\n filledOption.viewBox = this._transformViewBoxToZero(viewBox);\n filledOption.beforeRender = () => {\n if (!this._vTable) {\n return;\n }\n const tableStage = this._vTable.scenegraph.stage;\n if (!(tableStage as any)._story_needRender) {\n // @ts-ignore\n tableStage.pauseRender();\n\n this.stage.dirtyBounds?.union(this.globalAABBBounds);\n this.stage.renderNextFrame();\n }\n };\n filledOption.afterRender = () => {\n if (!this._vTable) {\n return;\n }\n // @ts-ignore\n this._vTable.scenegraph.stage._story_needRender = false;\n // @ts-ignore\n this._vTable.scenegraph.stage.resumeRender();\n };\n\n return filledOption;\n }\n\n private _transformViewBoxToZero(_viewBox: IBoundsLike) {\n const viewBox = { ..._viewBox };\n viewBox.x2 -= viewBox.x1;\n viewBox.y2 -= viewBox.y1;\n viewBox.x1 = 0;\n viewBox.y1 = 0;\n return viewBox;\n }\n\n /**\n * 判定点是否在设置 viewBox 内。设置 viewBox 会小于展示 bounds\n * @param canvasX\n * @param canvasY\n */\n pointInViewBox(canvasX: number, canvasY: number): boolean {\n const target = { x: 0, y: 0 };\n this.globalTransMatrix.transformPoint({ x: canvasX, y: canvasY }, target);\n return pointInAABB(target, this._vTable.scenegraph.stage.viewBox);\n }\n\n release() {\n this._vTable && this._vTable.release();\n super.release();\n }\n\n setAttribute(key: string, value: any) {\n if (key === 'viewBox') {\n super.setAttribute('x', value.x1);\n super.setAttribute('y', value.y1);\n this.updateVTableGraphicViewBox(value);\n } else {\n super.setAttribute(key, value);\n }\n }\n setAttributes(attrs: ITableGraphicAttribute) {\n const lastedViewBox = this.attribute.viewBox;\n super.setAttributes(attrs);\n if (attrs.viewBox) {\n this.attribute.viewBox = lastedViewBox;\n this.updateVTableGraphicViewBox(attrs.viewBox);\n }\n }\n\n /**\n * 获取 VTable 图形的实际边界。\n * 该方法通过遍历 VTable stage的默认图层中的所有子组,计算并返回它们的边界框。\n *\n * @returns {Bounds} 返回包含所有子组边界的 Bounds 对象。\n */\n getVTableActualBounds() {\n return this.attribute.viewBox;\n }\n\n updateVTableGraphicViewBox(bounds: IBoundsLike) {\n if (this.attribute.viewBox && isBoundsLikeEqual(this.attribute.viewBox, bounds)) {\n // 没有变化,不需要更新\n return;\n }\n // 先更新 viewBox\n this.attribute.viewBox = bounds;\n // 直接更新viewBox\n // @ts-ignore\n this._vTable.updateViewBox(this._transformViewBoxToZero(bounds));\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasRectRender } from '@visactor/vrender';\nimport type { VTableGraphic } from './vtable-graphic';\nimport { TABLE_NUMBER_TYPE } from './vtable-graphic';\n\nexport const TableRender = Symbol.for('VStoryTableRender');\nexport const TableRenderContribution = Symbol.for('VStoryTableRenderContribution');\n\n@injectable()\nexport class VTableRender extends DefaultCanvasRectRender implements IGraphicRender {\n type: 'table';\n numberType: number = TABLE_NUMBER_TYPE;\n\n drawShape(\n table: any,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { baseOpacity = 1 } = table.attribute;\n if (baseOpacity <= 0) {\n return;\n }\n context.baseGlobalAlpha *= baseOpacity;\n super.drawShape(table, context, x, y, drawContext, params, fillCb, strokeCb);\n // TODO 考虑一个通用的ctx清理逻辑\n if (context._clearFilterStyle && context.nativeContext) {\n context.nativeContext.filter = 'blur(0px)';\n context._clearFilterStyle = false;\n }\n context.baseGlobalAlpha /= baseOpacity;\n const vTable = (table as VTableGraphic).vTable;\n const vTableStage = vTable.scenegraph.stage;\n const vTableCtx = vTableStage.window.getContext();\n vTableCtx.baseGlobalAlpha *= baseOpacity;\n // @ts-ignore\n vTableStage._story_needRender = true;\n const matrix = table.globalTransMatrix.clone();\n // auto 模式下,需要将vTable.stage的viewBoxTransform 设置到包含偏移量的位置\n matrix.translate(table.vTableAutoTranslate.x, table.vTableAutoTranslate.y);\n const stageMatrix = table.stage.window.getViewBoxTransform().clone();\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n // vTableStage.setViewBox();\n // @ts-ignore\n vTable.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n vTableStage.dirtyBounds?.clear();\n vTableStage.render();\n vTableCtx.baseGlobalAlpha /= baseOpacity;\n }\n\n draw(table: any, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const tableAttribute = getTheme(table, params?.theme).circle;\n this._draw(table, {} as any, false, drawContext, params);\n }\n}\n","import { injectable } from '@visactor/vrender';\nimport type { IGraphicPicker, IPickParams } from '@visactor/vrender';\nimport type { VTableGraphic } from './vtable-graphic';\nimport { TABLE_NUMBER_TYPE } from './vtable-graphic';\n\n@injectable()\nexport class VTablePicker implements IGraphicPicker {\n type = 'table';\n numberType: number = TABLE_NUMBER_TYPE;\n\n contains(table: any, point: any, params?: IPickParams): boolean | any {\n // 将当前的point转化到global\n const matrix = table.parent.globalTransMatrix.clone();\n const stageMatrix = table.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n const toGlobalMatrix = matrix.getInverse();\n const nextP = { x: 0, y: 0 };\n toGlobalMatrix.transformPoint(point, nextP);\n\n // 得到 vtable stage\n const vTable = (table as VTableGraphic).vTable;\n const vtableStage = vTable.scenegraph.stage;\n vtableStage.dirtyBounds?.clear();\n const toTableMatrix = vtableStage.window.getViewBoxTransform();\n toTableMatrix.transformPoint(nextP, nextP);\n const pick = vtableStage.pick(nextP.x, nextP.y);\n // @ts-ignore\n if (pick.graphic === null && pick.group.name === 'root') {\n return false;\n }\n return pick;\n }\n}\n","import { container, ContainerModule, GraphicRender, PickServiceInterceptor } from '@visactor/vrender-core';\nimport { ChartRender, VChartRender } from '../character/chart/graphic/vchart-graphic-render';\nimport { VChartPicker } from '../character/chart/graphic/vchart-graphic-picker';\nimport { CanvasPickerContribution } from '@visactor/vrender-kits';\nimport { VChartPickServiceInterceptorContribution } from '../character/chart/graphic/picker-interceptor';\nimport { ComponentGroupRender } from '../character/component/graphic/GroupComponent/component-group-graphic-render';\nimport { TableRender, VTableRender } from '../character/table/graphic/vtable-graphic-render';\nimport { VTablePicker } from '../character/table/graphic/vtable-graphic-picker';\n\nexport function registerGraphics() {\n registerVChartGraphic();\n}\n\nlet _registered = false;\nexport function registerVChartGraphic() {\n if (_registered) {\n return;\n }\n _registered = true;\n const module = new ContainerModule(bind => {\n // vchart渲染器注入\n bind(VChartRender).toSelf().inSingletonScope();\n bind(ChartRender).toService(VChartRender);\n bind(GraphicRender).toService(ChartRender);\n\n bind(VChartPicker).toSelf().inSingletonScope();\n bind(CanvasPickerContribution).toService(VChartPicker);\n bind(VChartPickServiceInterceptorContribution).toSelf().inSingletonScope();\n bind(PickServiceInterceptor).toService(VChartPickServiceInterceptorContribution);\n\n // component渲染器注入\n bind(ComponentGroupRender).toSelf().inSingletonScope();\n bind(GraphicRender).toService(ComponentGroupRender);\n\n // vTable渲染器注入\n bind(VTableRender).toSelf().inSingletonScope();\n bind(TableRender).toService(VTableRender);\n bind(GraphicRender).toService(TableRender);\n\n bind(VTablePicker).toSelf().inSingletonScope();\n bind(CanvasPickerContribution).toService(VTablePicker);\n });\n\n container.load(module);\n}\n","import type { IRankingBarSpec } from './interface';\nimport type { ICartesianAxisSpec, ICommonChartSpec, ILabelSpec } from '@visactor/vchart';\nimport type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { BaseChartSpecTransformer } from '@visactor/vchart';\nimport { isValid, merge } from '@visactor/vutils';\n\nexport class RankingBarChartSpecTransformer extends BaseChartSpecTransformer {\n transformSpec(spec: T): void {\n const { timeData, timeNodes } = processData(spec as unknown as IRankingBarSpec);\n const {\n interval: userInterval,\n xField,\n yField,\n color,\n icon,\n iconPosition,\n iconShape,\n timeLabel,\n label,\n nameLabel,\n xAxis,\n yAxis,\n animationAppear,\n animationDisappear,\n animationEnter,\n animationExit,\n animationNormal,\n animationUpdate,\n player\n } = spec as unknown as IRankingBarSpec;\n\n const interval = userInterval ? userInterval : 1000;\n const exchangeDuration = Math.min(interval, 500);\n\n spec.type = 'common';\n spec.data = [\n {\n id: 'timeData',\n values: timeData.get(timeNodes[0])\n },\n {\n id: 'time',\n values: [{ time: timeNodes[0] }]\n }\n ];\n\n // @ts-ignore FIXME: type definition\n spec.color = {\n specified: {\n ...color\n }\n };\n spec.region = [{ clip: true }];\n spec.series = [\n {\n type: 'bar',\n id: 'ranking-bar',\n dataId: 'timeData',\n direction: 'horizontal',\n yField,\n xField,\n seriesField: yField,\n extensionMark: [],\n label: labelSpec(label, { ...nameLabel, yField }) as any\n }\n ];\n spec.axes = axisSpec(xAxis, yAxis);\n spec.player = merge(\n {\n type: 'continuous',\n auto: true,\n loop: false,\n interval,\n specs: timeNodes.map(time => ({\n data: [\n { id: 'timeData', values: timeData.get(time) },\n { id: 'time', values: [{ time }] }\n ]\n }))\n },\n player || {}\n );\n spec.tooltip = { visible: false };\n spec.customMark = [];\n\n transformAnimationSpec(spec, { interval, exchangeDuration });\n // 支持外部关闭animate\n if (animationAppear === false) {\n (spec as any).animationAppear = animationAppear;\n }\n if (animationDisappear === false) {\n (spec as any).animationDisappear = animationDisappear;\n }\n if (animationEnter === false) {\n (spec as any).animationEnter = animationEnter;\n }\n if (animationExit === false) {\n (spec as any).animationExit = animationExit;\n }\n if (animationNormal === false) {\n (spec as any).animationNormal = animationNormal;\n }\n if (animationUpdate === false) {\n (spec as any).animationUpdate = animationUpdate;\n }\n\n if (!timeLabel || timeLabel.visible !== false) {\n spec.customMark.push(timeLabelSpec(timeLabel.style) as any);\n }\n if (icon) {\n const icon = iconSpec(iconPosition, iconShape, { interval, exchangeDuration });\n spec.series[0].extensionMark.push(icon as any);\n }\n\n super.transformSpec(spec);\n }\n}\n\nexport function processData(spec: IRankingBarSpec) {\n const { xField, yField, timeField, data, topN = 10, icon } = spec;\n\n // 数据处理\n const timeNodes = new Set();\n const timeData = new Map();\n\n data.sort((d1, d2) => Number(d2[xField]) - Number(d1[xField]));\n\n data.forEach(d => {\n const time = d[timeField];\n if (isValid(time)) {\n timeNodes.add(time);\n }\n if (!timeData.has(time)) {\n timeData.set(time, []);\n }\n const currentData = timeData.get(time);\n if (currentData.length < topN) {\n const _d = { ...d };\n if (icon && icon[_d[yField]]) {\n _d['icon'] = icon[_d[yField]];\n }\n currentData.push(_d);\n }\n });\n\n return { timeData, timeNodes: Array.from(timeNodes).sort() };\n}\n\nfunction transformAnimationSpec(\n spec: ICommonChartSpec,\n { interval, exchangeDuration }: { interval: number; exchangeDuration: number }\n) {\n (spec as any).animationAppear = false;\n (spec as any).animationUpdate = {\n bar: [\n {\n type: 'update',\n options: { excludeChannels: ['y'] },\n easing: 'linear',\n duration: interval\n },\n {\n channel: ['y'],\n easing: 'circInOut',\n duration: exchangeDuration\n }\n ],\n axis: {\n duration: interval,\n easing: 'linear'\n }\n };\n (spec as any).animationEnter = {\n bar: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ]\n };\n (spec as any).animationExit = {\n bar: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction labelSpec(label: IRankingBarSpec['label'] = {}, nameLabel: IRankingBarSpec['nameLabel'] & { yField: string }) {\n const spec: ILabelSpec[] = [];\n\n if (label.visible !== false) {\n spec.push({\n visible: true,\n overlap: false,\n style: {\n // @ts-ignore\n fill: `rgb(64, 64, 64)`,\n ...label.style\n },\n smartInvert: {\n fillStrategy: label.style?.fill ? 'null' : undefined,\n strokeStrategy: label.style?.stroke ? 'null' : undefined\n }\n });\n }\n\n if (nameLabel.visible) {\n spec.push({\n visible: true,\n overlap: false,\n // @ts-ignore\n style: {\n ...nameLabel.style\n },\n smartInvert: {\n fillStrategy: nameLabel.style?.fill ? 'null' : undefined,\n strokeStrategy: nameLabel.style?.stroke ? 'null' : undefined\n },\n position: nameLabel.position === 'bar-end' ? 'inside-right' : 'inside-left',\n formatter: `{${nameLabel.yField}}`\n });\n }\n\n return spec;\n}\n\nfunction axisSpec(xAxis: IRankingBarSpec['xAxis'] = {}, yAxis: IRankingBarSpec['yAxis'] = {}) {\n const leftAxis: ICartesianAxisSpec = {\n orient: 'left',\n type: 'band',\n inverse: true,\n label: { style: yAxis.label },\n domainLine: { style: yAxis.domainLine },\n grid: { style: yAxis.grid }\n } as any;\n const bottomAxis: ICartesianAxisSpec = {\n orient: 'bottom',\n type: 'linear',\n nice: false,\n animation: true,\n label: { style: xAxis.label },\n domainLine: { style: xAxis.domainLine },\n grid: { style: xAxis.grid },\n innerOffset: { right: '10%' }\n } as any;\n\n if (xAxis.label) {\n bottomAxis.label = xAxis.label;\n }\n return [leftAxis, bottomAxis];\n}\n\nfunction timeLabelSpec(textStyle: ITextGraphicAttribute = {}) {\n return {\n type: 'text',\n dataId: 'time',\n style: {\n textBaseline: 'alphabetic',\n fontSize: 200,\n textAlign: 'end',\n fontWeight: 600,\n text: (datum: any) => datum.time,\n x: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getLayoutRect()?.width;\n },\n y: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getAllRegions()[0]?.getLayoutRect()?.height;\n },\n fill: 'grey',\n fillOpacity: 0.5,\n ...textStyle\n }\n };\n}\n\nfunction iconSpec(\n iconPosition: IRankingBarSpec['iconPosition'] = 'bar-end',\n iconShape: IRankingBarSpec['iconShape'] = 'circle',\n { interval, exchangeDuration }: any\n) {\n return {\n type: 'symbol',\n dataId: 'timeData',\n style: {\n symbolType: iconShape,\n stroke: 'white',\n lineWidth: 1,\n size: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return Math.max(bandwidth - 4, 0);\n }\n return 10;\n },\n background: (data: any) => data.icon,\n // globalZIndex 有bug,会有动画闪烁和报错\n // globalZIndex: 1, // 否则会被 region 区域 clip\n x: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n if (iconPosition === 'bar-start') {\n return bandwidth / 2;\n } else if (iconPosition === 'axis') {\n return -bandwidth / 2;\n } else {\n return series.dataToPositionX(data) - bandwidth / 2;\n }\n }\n return undefined;\n },\n y: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return series.dataToPositionY(data) + bandwidth / 2;\n }\n return undefined;\n },\n scaleY: iconShape === 'rect' ? 1.2 : 1\n },\n animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration),\n animationEnter: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ],\n animationExit: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction customMarkUpdateAnimation(duration: number, exchangeDuration: number) {\n return [\n {\n duration: exchangeDuration,\n easing: 'cubicInOut',\n channel: ['y']\n },\n {\n options: { excludeChannels: ['y'] },\n channel: ['x', 'x2', 'x1'],\n easing: 'linear',\n duration\n }\n ];\n}\n","import { IRankingBarSpec } from './interface';\nimport VChart, { BaseChart } from '@visactor/vchart';\nimport { RankingBarChartSpecTransformer } from './ranking-bar-transformer';\n\nexport class RankingBar extends BaseChart> {\n type = 'rankingBar';\n static type = 'rankingBar';\n static readonly view: string = 'singleDefault';\n\n declare _spec: IRankingBarSpec;\n\n static readonly transformerConstructor = RankingBarChartSpecTransformer;\n readonly transformerConstructor = RankingBarChartSpecTransformer;\n\n init() {\n if (!this.isValid()) {\n return;\n }\n super.init();\n }\n\n protected isValid() {\n const { xField, yField, timeField, data } = this._spec;\n if (!xField || !yField || !timeField) {\n this._option.onError?.('Missing Required Config: `xField`, `yField`, `timeField` ');\n return false;\n }\n if (!data) {\n this._option.onError?.('Data is required');\n return false;\n }\n return true;\n }\n}\n\nexport const registerRankingBarChart = (option?: { VChart?: typeof VChart }) => {\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([RankingBar]);\n }\n};\n","import { isNumber, isString, isValidNumber } from '@visactor/vutils';\nimport type { ModelSelector } from '../interface/dsl/chart';\n\nexport function isIDSelector(value: ModelSelector): value is `#${string}` {\n return isString(value) && value.startsWith('#');\n}\n\nexport function isSpecIndexSelector(value: ModelSelector): value is number | `${number}` {\n return isValidNumber(+value);\n}\n\nexport function validNumber(value: any) {\n return isValidNumber(value) ? value : null;\n}\n\nexport function foreachAllConstructor(instance: any, fn: (value: any, key: string) => void) {\n let currentProto = Object.getPrototypeOf(instance);\n while (currentProto) {\n const constructor = currentProto.constructor;\n if (constructor) {\n fn(constructor, currentProto);\n }\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\nexport function getAllStaticAttrs(instance: any, key: string): Record {\n const allAttrs: Record = {};\n foreachAllConstructor(instance, (constructor, _currentProto) => {\n if (constructor && constructor[key]) {\n Object.assign(allAttrs, constructor[key]);\n }\n });\n return allAttrs;\n}\n","const repeat = (str: string | number, repeatCount: number = 0) => {\n let s = '';\n let i = repeatCount - 1;\n while (i >= 0) {\n s = `${s}${str}`;\n i -= 1;\n }\n return s;\n};\n\n/**\n * Pads `string` on the left and right, left or right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * pad('abc', 8)\n * // => ' abc '\n *\n * pad('abc', 8, '_-')\n * // => '_-abc_-_'\n *\n * pad('abc', 2)\n * // => 'abc'\n */\nconst pad = (str: string | number, length: number, padChar: string = ' ', align: string = 'right') => {\n const c = padChar;\n const s = str + '';\n const n = length - s.length;\n\n if (n <= 0) {\n return s;\n }\n\n if (align === 'left') {\n return repeat(c, n) + s;\n }\n\n return align === 'center' ? repeat(c, Math.floor(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n};\n\nexport default pad;\n","import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\n // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n","import pad from '../common/pad';\nimport type { DateLikeType } from '../common/toDate';\nimport { toDate } from '../common/toDate';\n\nexport function fullYearGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCFullYear' : 'getFullYear';\n}\n\nexport function monthGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMonth' : 'getMonth';\n}\n\nexport function dateGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCDate' : 'getDate';\n}\n\nexport function hoursGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCHours' : 'getHours';\n}\n\nexport function minutesGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMinutes' : 'getMinutes';\n}\n\nexport function secondsGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCSeconds' : 'getSeconds';\n}\n\nexport function millisecondsGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMilliseconds' : 'getMilliseconds';\n}\n\nexport function fullYearSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCFullYear' : 'setFullYear';\n}\n\nexport function monthSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMonth' : 'setMonth';\n}\n\nexport function dateSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCDate' : 'setDate';\n}\n\nexport function hoursSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCHours' : 'setHours';\n}\n\nexport function minutesSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMinutes' : 'setMinutes';\n}\n\nexport function secondsSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCSeconds' : 'setSeconds';\n}\n\nexport function millisecondsSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMilliseconds' : 'setMilliseconds';\n}\n\n/**\n * 根据时间推断格式化字符串\n * @param value\n * @param isUTC\n * @returns\n */\nexport function getFormatFromValue(value: DateLikeType, isUTC?: boolean) {\n const date = toDate(value);\n const M = (date as any)[monthGetterName(isUTC)]() + 1;\n const d = (date as any)[dateGetterName(isUTC)]();\n const h = (date as any)[hoursGetterName(isUTC)]();\n const m = (date as any)[minutesGetterName(isUTC)]();\n const s = (date as any)[secondsGetterName(isUTC)]();\n const S = (date as any)[millisecondsGetterName(isUTC)]();\n\n const isSecond = S === 0;\n const isMinute = isSecond && s === 0;\n const isHour = isMinute && m === 0;\n const isDay = isHour && h === 0;\n const isMonth = isDay && d === 1;\n const isYear = isMonth && M === 1;\n\n if (isYear) {\n return 'YYYY';\n } else if (isMonth) {\n return 'YYYY-MM';\n } else if (isDay) {\n return 'YYYY-MM-DD';\n } else if (isHour) {\n return 'HH';\n } else if (isMinute) {\n return 'HH:mm';\n } else if (isSecond) {\n return 'HH:mm:ss';\n }\n return 'HH:mm:ss SSS';\n}\n\nexport function getTimeFormatter(template: string, isUTC?: boolean) {\n return (time: DateLikeType) => {\n const date = toDate(time);\n const y = date[fullYearGetterName(isUTC)]();\n const M = date[monthGetterName(isUTC)]() + 1;\n const q = Math.floor((M - 1) / 3) + 1;\n const d = date[dateGetterName(isUTC)]();\n const e = date[('get' + (isUTC ? 'UTC' : '') + 'Day') as 'getDay' | 'getUTCDay']();\n const H = date[hoursGetterName(isUTC)]();\n const h = ((H - 1) % 12) + 1;\n const m = date[minutesGetterName(isUTC)]();\n const s = date[secondsGetterName(isUTC)]();\n const S = date[millisecondsGetterName(isUTC)]();\n\n // 月份,周等需要管理管理locale的时间格式化暂时不支持\n return (\n (template || '')\n .replace(/YYYY/g, pad(y + '', 4, '0', 'left'))\n .replace(/yyyy/g, y + '')\n .replace(/yy/g, (y % 100) + '')\n .replace(/Q/g, q + '')\n // .replace(/{MMMM}/g, month[M - 1])\n // .replace(/{MMM}/g, monthAbbr[M - 1])\n .replace(/MM/g, pad(M, 2, '0', 'left'))\n .replace(/M/g, M + '')\n .replace(/dd/g, pad(d, 2, '0', 'left'))\n .replace(/d/g, d + '')\n // .replace(/{eeee}/g, dayOfWeek[e])\n // .replace(/{ee}/g, dayOfWeekAbbr[e])\n .replace(/e/g, e + '')\n .replace(/HH/g, pad(H, 2, '0', 'left'))\n .replace(/H/g, H + '')\n .replace(/hh/g, pad(h + '', 2, '0', 'left'))\n .replace(/h/g, h + '')\n .replace(/mm/g, pad(m, 2, '0', 'left'))\n .replace(/m/g, m + '')\n .replace(/ss/g, pad(s, 2, '0', 'left'))\n .replace(/s/g, s + '')\n .replace(/SSS/g, pad(S, 3, '0', 'left'))\n .replace(/S/g, S + '')\n );\n };\n}\n","import type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { Unit } from '../../../constants/format';\nimport { DataFormatUnit, unionContentTypeMap } from '../../../constants/format';\nimport { isArray, isNil, isString } from '@visactor/vutils/es/common';\nimport { getTimeFormatter, isValidNumber } from '@visactor/vutils';\n\nexport type FormatValueFunction = (\n content: FormatContentType,\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) => string;\n\n// if (formatConfig.unit === 'CN_K') {\n// unit = { ratio: 1000, symbol: '千' };\n// } else if (formatConfig.unit === 'CN_W') {\n// unit = { ratio: 10000, symbol: '万' };\n// } else if (formatConfig.unit === 'CN_BW') {\n// unit = { ratio: 1000000, symbol: '百万' };\n// } else if (formatConfig.unit === 'CN_QW') {\n// unit = { ratio: 10000000, symbol: '千万' };\n// } else if (formatConfig.unit === 'CN_Y') {\n// unit = { ratio: 1e8, symbol: '亿' };\n// } else if (formatConfig.unit === 'K') {\n// unit = { ratio: 1e3, symbol: 'K' };\n// } else if (formatConfig.unit === 'M') {\n// unit = { ratio: 1e6, symbol: 'M' };\n// } else if (formatConfig.unit === 'B') {\n// unit = { ratio: 1e9, symbol: 'B' };\n// }\nexport const UnitMap: { [key in IFormatConfig['unit']]?: Unit } = {\n CN_K: { ratio: 1000, symbol: '千' },\n CN_W: { ratio: 10000, symbol: '万' },\n CN_BW: { ratio: 1000000, symbol: '百万' },\n CN_QW: { ratio: 10000000, symbol: '千万' },\n CN_Y: { ratio: 1e8, symbol: '亿' },\n K: { ratio: 1e3, symbol: 'K' },\n M: { ratio: 1e6, symbol: 'M' },\n B: { ratio: 1e9, symbol: 'B' }\n};\n\nexport type getContentValueFunction = (opt: any, content: FormatContentType) => string;\n\nexport function textFormatWithFix(text: string, config: { prefix?: string; postfix?: string }) {\n return normalizeFormatResult(`${config.prefix ?? ''}${text}${config.postfix ?? ''}`.split('\\n'));\n}\nexport function normalizeFormatResult(str: string | string[]): string | string[] {\n if (isArray(str)) {\n if (str.length === 0) {\n return '';\n }\n // extract string from array to make sure that the render result of [str] and str is same\n if (str.length === 1) {\n return str[0];\n }\n return str;\n }\n return str;\n}\n\nexport function formatValue(\n content: FormatContentType,\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) {\n if (content === 'date') {\n return formatDate(value, formatConfig, language, percentage);\n }\n if (content === 'text') {\n return value;\n }\n return formatNumber(value, formatConfig, language, percentage);\n}\n\nexport function formatDate(\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) {\n return getTimeFormatter(formatConfig.dateFormat)(`${value}`);\n}\n\nexport function formatNumber(\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n): string | number {\n // 字符串类型的处理\n if (value && isString(value) && !isValidNumber(+value)) {\n return value;\n }\n\n if (Number.isNaN(value) || isNil(value) || value === '') {\n return '';\n }\n\n // 先计算 unit\n let unit: Unit;\n // 优先百分比和千分比\n if (formatConfig.dataType === 'percent') {\n unit = { ratio: 1e-2, symbol: '%' };\n } else if (formatConfig.dataType === 'permil') {\n unit = { ratio: 1e-3, symbol: '‰' };\n } else if (formatConfig.unit === 'auto') {\n unit = getNumFormatAuto(\n value,\n language.includes('zh') ? DataFormatUnit.ZH_CN : DataFormatUnit.EN_US,\n language as 'zh_CN' | 'en_US'\n );\n } else {\n // 使用固定匹配\n unit = UnitMap[formatConfig.unit] ?? { ratio: 0, symbol: '' };\n }\n\n // 处理缩放 考虑超大数值的字符串场景\n if (typeof value === 'string') {\n const [integerPart, decimalPart = ''] = value.split('.');\n const combinedNumber = integerPart + decimalPart;\n const decimalShift = decimalPart.length - unit.ratio;\n\n // 计算缩放后的整数和小数部分\n if (decimalShift > 0) {\n value = combinedNumber.slice(0, decimalShift) + '.' + combinedNumber.slice(decimalShift);\n } else {\n value = combinedNumber + '0'.repeat(-decimalShift);\n }\n } else {\n value *= Math.pow(10, unit.ratio);\n value = value.toString();\n }\n\n // 分割整数部分和小数部分\n const [integerPart, decimalPart = ''] = value.toString().split('.');\n\n // 使用正则表达式添加千位分隔符\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n let formattedDecimalPart = '';\n\n if (formatConfig.fixed !== undefined && formatConfig.fixed !== 'auto') {\n // 如果提供了fixed值,则格式化小数部分\n const roundedNumber = parseFloat(`0.${decimalPart}`).toFixed(formatConfig.fixed);\n formattedDecimalPart = roundedNumber.split('.')[1];\n } else if (decimalPart) {\n // 如果没有提供fixed值,且原始数字有小数部分\n formattedDecimalPart = decimalPart;\n }\n\n // 拼接整数部分和小数部分\n const numberString = formattedDecimalPart ? `${formattedIntegerPart}.${formattedDecimalPart}` : formattedIntegerPart;\n return `${numberString}${unit.symbol}${percentage ? '%' : ''}`;\n}\n\n/**\n * unit = auto 时,获取当前合适的 unit\n * @param value\n * @param dataFormatUnit\n * @param lang\n * @returns\n */\nfunction getNumFormatAuto(\n value: number | string,\n dataFormatUnit?: `${DataFormatUnit}`,\n lang?: 'zh_CN' | 'en_US'\n): { ratio: number; symbol: string } {\n // TODO: i18N\n const locale = isNil(dataFormatUnit) || dataFormatUnit === 'auto' ? lang ?? 'zh_CN' : dataFormatUnit;\n const valueAbs = Math.abs(Number(value));\n switch (locale) {\n case 'zh_CN':\n if (valueAbs >= 1e8) {\n return { ratio: 1e8, symbol: '亿' };\n }\n\n if (valueAbs >= 1e4) {\n return { ratio: 1e4, symbol: '万' };\n }\n break;\n case 'en_US':\n if (valueAbs >= 1e9) {\n return { ratio: 1e9, symbol: 'B' };\n }\n if (valueAbs >= 1e6) {\n return { ratio: 1e6, symbol: 'M' };\n }\n if (valueAbs >= 1e3) {\n return { ratio: 1e3, symbol: 'K' };\n }\n break;\n }\n return { ratio: 1, symbol: '' };\n}\n\n// 得到标签经过 format 处理后的值\nexport function getTextWithFormat(\n formatConfig: IFormatConfig,\n formatContents: FormatContentType[],\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt?: any\n) {\n // 得到每一个 content 的内容\n const contentLabels = (formatContents.length === 0 ? (['value'] as FormatContentType[]) : formatContents).map(\n content => {\n return getLabelContentWithUnion(formatConfig, content, getContentValue, formatValue, opt);\n }\n );\n // 拼接\n const labelText: string = contentLabels.join(!!formatConfig.contentWrap ? '\\n' : ' ');\n\n // 最后添加前后缀\n return textFormatWithFix(labelText, formatConfig);\n}\n\n// 得到标签一个 content 的 format 值,含复合类型\nexport function getLabelContentWithUnion(\n formatConfig: IFormatConfig,\n content: FormatContentType,\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt: any\n) {\n if (unionContentTypeMap[content]) {\n const matchResult = content.match(/(.*)\\((.*)\\)/);\n const firstContent = matchResult[1] as FormatContentType;\n const secondContent = matchResult[2] as FormatContentType;\n return `${getLabelContent(formatConfig, firstContent, getContentValue, formatValue, opt)}(${getLabelContent(\n formatConfig,\n secondContent,\n getContentValue,\n formatValue,\n opt\n )})`;\n }\n return getLabelContent(formatConfig, content, getContentValue, formatValue, opt);\n}\n\n// 得到标签一个 content 的 format 值\nexport function getLabelContent(\n formatConfig: IFormatConfig,\n content: FormatContentType,\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt: any\n): string {\n const datumValue = getContentValue(opt, content);\n // number / date 类型的数值处理\n const labelContent = formatValue(\n content,\n datumValue,\n formatConfig,\n // TODO: i18n\n 'chinese',\n content === 'percentage' || content === 'CAGR' || content === 'percentdiff'\n );\n return labelContent as string;\n}\n","import { formatValue } from '../../character/common/utils/format';\nimport type { ITheme } from '../interface';\n\nexport const DefaultTheme: {\n name: string;\n theme: ITheme;\n} = {\n name: 'default',\n theme: {\n character: {\n Table: {\n runtime: {\n list: [\n 'CommonLayout',\n 'TableType',\n 'TableCommonSpec',\n 'TableTheme',\n 'ShowHeader',\n 'ColWidth',\n 'RowHeight',\n 'ColVisible',\n 'RowVisible',\n 'ColStyle',\n 'RowStyle',\n 'ContentColStyle',\n 'ContentRowStyle',\n 'CellStyle'\n ]\n }\n },\n PivotChart: {\n runtime: {\n list: []\n }\n },\n Chart: {\n runtime: {\n list: ['ChartCommonSpec', 'CommonLayout', 'MarkStyle', 'LabelStyle', 'TotalLabel'],\n functions: {\n formatValue: formatValue\n }\n }\n },\n VTable: {\n runtime: {\n list: []\n }\n },\n VChart: {\n runtime: {\n list: [],\n functions: {\n formatValue: formatValue\n }\n }\n },\n RankingBar: {\n runtime: {\n list: ['RankingBar']\n }\n },\n ScatterBar: {\n runtime: {\n list: []\n }\n },\n WaveScatter: {\n runtime: {\n list: ['WaveScatter']\n }\n },\n Text: {\n runtime: {\n list: ['Text']\n }\n },\n Line: {\n runtime: {\n list: ['BaseGraphic', 'Line']\n }\n },\n Arc: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Polygon: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Timeline: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Unit: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Rect: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Shape: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Image: {\n runtime: {\n list: ['BaseGraphic']\n }\n }\n }\n }\n};\n","import type { Dict } from '@visactor/vutils';\nimport { isString } from '@visactor/vutils';\n\nexport function getThemeAttribute(obj: Dict, path: string | string[]): any {\n if (!obj) {\n return undefined;\n }\n const paths = isString(path) ? (path as string).split('.') : path;\n\n for (let p = 0; p < paths.length; p++) {\n obj = obj ? obj[paths[p]] : undefined;\n if (!obj) {\n return undefined;\n }\n }\n return obj;\n}\n","import { isString } from '@visactor/vutils';\n\nexport default class CommonStore {\n private _store: { [key: string]: T } = {};\n get(key: string) {\n return this._store[key];\n }\n\n register(key: string, v: T): void;\n register(v: T): void;\n register(keyOrValue: string | T, v?: T): void {\n let key: string = keyOrValue as string;\n if (!isString(keyOrValue)) {\n key = keyOrValue.type;\n v = keyOrValue;\n }\n\n if (this._store[key]) {\n console.warn(`${key} already exists in ${this.constructor.name}, will be overwritten`);\n }\n this._store[key] = v;\n }\n\n getList(enableMap: { [key: string]: boolean }, keyList: string[] = []) {\n const result: T[] = [];\n const enableKeyMap: { [key: string]: boolean } = {};\n // 先处理 keyList 中的 key\n keyList.forEach(key => {\n // 如果 keyList 中的 key 在 enableMap 中设置为 false 不添加\n if (enableMap[key] !== false && this._store[key]) {\n result.push(this._store[key]);\n enableKeyMap[key] = true;\n }\n });\n // 再处理 enableMap 中的 key\n Object.keys(enableMap).forEach(key => {\n if (enableMap[key] && this._store[key] && !enableKeyMap[key]) {\n result.push(this._store[key]);\n }\n });\n return result;\n }\n\n getKeyList(enableMap: { [key: string]: boolean }, keyList: string[] = []) {\n const enableKeyMap: { [key: string]: boolean } = {};\n // 先处理 keyList 中的 key\n keyList.forEach(key => {\n // 如果 keyList 中的 key 在 enableMap 中设置为 false 不添加\n if (enableMap[key] !== false && this._store[key]) {\n enableKeyMap[key] = true;\n }\n });\n // 再处理 enableMap 中的 key\n Object.keys(enableMap).forEach(key => {\n if (enableMap[key] && !enableKeyMap[key]) {\n enableKeyMap[key] = true;\n }\n });\n return Object.keys(enableMap);\n }\n}\n","import type { IChartCharacterRuntime } from '../character/chart/interface/runtime';\nimport type { IComponentCharacterRuntime } from '../character/component/interface/runtime';\nimport type { ITableCharacterRuntime } from '../character/table/interface/runtime';\nimport CommonStore from './common-store';\n\nexport class RuntimeStoreClass extends CommonStore<\n IChartCharacterRuntime | ITableCharacterRuntime | IComponentCharacterRuntime\n> {}\n","export const Events = {\n BEFORE_SET_CONFIG: 'beforeSetConfig',\n AFTER_SET_CONFIG: 'afterSetConfig'\n};\n","import type { ICharacterRuntimeConfig, ILayoutLine } from './../interface/character';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { Generator } from '@visactor/vrender-core';\nimport type { ICharacter } from '../interface/character';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../interface/dsl/dsl';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport type { ICharacterPickInfo, IStoryEvent } from '../interface/event';\nimport type { IStory } from '../interface/story';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IConfigProcess } from './config-transform/interface';\nimport { getLayoutLine } from '../utils/layout';\nimport { foreachAllConstructor } from '../utils/type';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { RuntimeStore } from '../store';\nimport { Events } from '../constants/events';\n\nexport abstract class CharacterBase implements ICharacter {\n readonly id: string;\n declare readonly visActorType: 'chart' | 'component' | 'table' | 'common';\n readonly type: string;\n protected declare _config: ICharacterConfig;\n protected declare _graphic: IGraphic;\n protected _story: IStory;\n protected _canvas: IStoryCanvas;\n declare configProcess: IConfigProcess;\n declare _attribute: T;\n protected declare _runtime: { type: string }[];\n // 是否锁定,不可被编辑\n declare locked?: boolean;\n // declare attributeProcess: IAttributeProcess;\n\n get config() {\n return this._config;\n }\n get graphic() {\n return this._graphic;\n }\n\n get story() {\n return this._story;\n }\n\n get canvas() {\n return this._canvas;\n }\n\n get theme() {\n return this._config.theme;\n }\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n this.id = config.id ?? `c_${Generator.GenAutoIncrementId()}`;\n this.type = config.type;\n this._config = config;\n this._story = option.story;\n this._canvas = option.canvas;\n }\n\n setConfig(\n config: Partial,\n params: {\n forceMergeOption?: boolean;\n mode?: number;\n } = {}\n ) {\n const { forceMergeOption = true } = params;\n this.story.emit(Events.BEFORE_SET_CONFIG, { config, character: this, params });\n if (!forceMergeOption) {\n const { options, ...rest } = config;\n this.configProcess.updateConfig(rest, config, this._config);\n this._config.options = options;\n this.applyConfigToAttribute(config, this._config);\n } else {\n const diffConfig = this.diffConfig(config);\n this.configProcess.updateConfig(diffConfig, config, this._config);\n this.applyConfigToAttribute(diffConfig, this._config);\n }\n this._setAttributes(this._attribute);\n this.story.emit(Events.AFTER_SET_CONFIG, { config, character: this, params });\n }\n\n init(): void {\n this._initRuntime();\n this._initGraphic();\n }\n\n abstract tickTo(t: number): void;\n\n toDSL(): ICharacterConfig {\n return cloneDeep(this._config);\n }\n\n getGraphic() {\n return this._graphic;\n }\n\n show(): void {\n this._graphic.setAttribute('visible', true);\n }\n hide(): void {\n this._graphic.setAttribute('visible', false);\n }\n\n abstract checkEvent(event: IStoryEvent): false | ICharacterPickInfo;\n release() {\n this.clearCharacter();\n }\n\n reset() {\n this.clearCharacter();\n this.init();\n }\n\n diffConfig(config: IUpdateConfigParams): IUpdateConfigParams {\n return config;\n }\n\n protected clearCharacter() {\n this._clearRuntime();\n this._clearGraphic();\n }\n\n protected _clearGraphic(): void {\n // 卸载group,卸载graphic和text\n this._graphic.release();\n this.canvas.removeGraphic(this._graphic);\n this._graphic = null;\n }\n\n protected abstract getDefaultAttribute(): Partial;\n getAttribute() {\n return this._attribute;\n }\n getRuntimeConfig() {\n return this as ICharacterRuntimeConfig;\n }\n\n getLayoutGuideLine(): ILayoutLine[] {\n const bounds = this._graphic.AABBBounds;\n return getLayoutLine(bounds, {\n id: this.id\n });\n }\n\n protected _initRuntime(): void {\n const keyMap: Record = {};\n const themeRuntimeKeyList: string[] = [];\n const tempKeyMap: Record = {};\n foreachAllConstructor(this, (constructor, _currentProto) => {\n if (constructor && constructor.RuntimeMap) {\n Object.assign(keyMap, constructor.RuntimeMap);\n }\n const runtimeList = ThemeManager.getAttribute(\n [this.theme, this.story.theme],\n `character.${constructor.type}.runtime.list`\n );\n if (isArray(runtimeList)) {\n const tempList: string[] = [];\n runtimeList.forEach(r => {\n if (!tempKeyMap[r]) {\n tempKeyMap[r] = true;\n tempList.push(r);\n }\n });\n themeRuntimeKeyList.splice(0, 0, ...tempList);\n }\n });\n\n this._runtime = RuntimeStore.getList(keyMap, themeRuntimeKeyList);\n }\n\n protected abstract applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void;\n protected abstract _clearRuntime(): void;\n protected abstract _initGraphic(): void;\n\n protected _setAttributes(attr: T): void {\n this._graphic.setAttributes(attr);\n }\n}\n","import type { IGraphic, IGraphicAttribute } from '@visactor/vrender';\nimport type { IVChart } from '@visactor/vchart';\nimport type { IStoryEvent } from '../../../interface/event';\n\nexport interface IPickModelInfo {\n type: string;\n model: any;\n specKey: string;\n specIndex: number;\n datum?: any;\n mark?: any;\n}\n\nfunction commonModelInfo(model: any) {\n return {\n type: model.type,\n model,\n specKey: model.specKey,\n specIndex: model.getSpecIndex()\n };\n}\n\nexport const seriesMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name?.startsWith('seriesGroup_');\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const nameInfo = graphic.name.split('_');\n const seriesId = +nameInfo[2];\n let markId = null;\n for (let i = index + 1; i < graphicPath.length; i++) {\n const markGraphic = graphicPath[i];\n const tempInfo = markGraphic.name.split('_');\n if (tempInfo[0] === 'group') {\n continue;\n }\n markId = +tempInfo[1];\n break;\n }\n if (markId === null) {\n return null;\n }\n const series = chart.getChart().getSeriesInIds([seriesId])[0];\n const datum = graphicPath[graphicPath.length - 1].__vgrammar_scene_item__.data;\n return {\n type: 'seriesMark',\n model: series,\n mark: series.getMarkInId(markId),\n specKey: series.specKey,\n specIndex: series.getSpecIndex(),\n datum\n };\n }\n};\n\nexport const axisMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name === 'axis' || graphic.name === 'axis-grid';\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const axisModel = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .filter(c => c.specKey === 'axes');\n let axisGraphic = graphicPath.find(g => g.name === 'axis');\n if (axisGraphic) {\n // @ts-ignore\n const axis = axisModel.find(a => a._axisMark && a._axisMark.getProduct().graphicItem === axisGraphic.parent);\n if (axis) {\n return commonModelInfo(axis);\n }\n }\n axisGraphic = graphicPath.find(g => g.name === 'axis-grid');\n if (axisGraphic) {\n // @ts-ignore\n const axis = axisModel.find(a => a._gridMark && a._gridMark.getProduct().graphicItem === axisGraphic.parent);\n if (axis) {\n return commonModelInfo(axis);\n }\n }\n return null;\n }\n};\n\nconst MarkerClassName: { [key: string]: boolean } = {\n MarkLine: true,\n MarkArea: true,\n MarkPoint: true,\n MarkArcLine: true,\n MarkArcArea: true\n};\n\nconst MarkerIdPrefix: { [key: string]: boolean } = {\n markPoint: true,\n markLine: true,\n markArea: true\n};\n\nexport const markerMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return !!MarkerClassName[graphic.constructor.name];\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[]) => {\n const split = (graphic.id).split('-');\n const idPrefix = split[0];\n let model;\n if (MarkerIdPrefix[idPrefix]) {\n const markerId = +(graphic.id).split('-')[1];\n model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.id === markerId);\n } else {\n const markerUserId = graphic.id;\n model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.userId === markerUserId);\n }\n return commonModelInfo(model);\n }\n};\n\nexport const labelMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name === 'data-label';\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const id = +graphicPath[index - 1].name.split('_')[1];\n const model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => {\n if (c.type !== 'label' && c.type !== 'totalLabel') {\n return false;\n }\n return c.getMarks().some(m => m.id === id);\n });\n // @ts-ignore\n return { ...commonModelInfo(model), datum: graphicPath[graphicPath.length - 1].attribute.data };\n }\n};\n\nfunction commonModePick(vrenderGraphicClassName: string, modelName: string) {\n return {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.constructor.name === vrenderGraphicClassName;\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n return commonModelInfo(\n chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.type === modelName)\n );\n }\n };\n}\n\nexport const discreteLegendMarkPick = commonModePick('DiscreteLegend', 'discreteLegend');\nexport const colorLegendMarkPick = commonModePick('ColorContinuousLegend', 'colorLegend');\nexport const sizeLegendMarkPick = commonModePick('SizeContinuousLegend', 'sizeLegend');\nexport const scrollBarMarkPick = commonModePick('ScrollBar', 'scrollBar');\nexport const titleBarMarkPick = commonModePick('Title', 'title');\nexport const continuousPlayerMarkPick = commonModePick('ContinuousPlayer', 'player');\nexport const discretePlayerMarkPick = commonModePick('DiscretePlayer', 'player');\n\nconst modelCheck: {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => boolean;\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => any;\n}[] = [\n seriesMarkPick,\n axisMarkPick,\n discreteLegendMarkPick,\n colorLegendMarkPick,\n sizeLegendMarkPick,\n markerMarkPick,\n scrollBarMarkPick,\n labelMarkPick,\n titleBarMarkPick,\n continuousPlayerMarkPick,\n discretePlayerMarkPick\n];\n\n/**\n * 从event属性上,读取当前pick到的图表模块内容\n * @param event\n */\nexport function getChartModelWithEvent(chart: IVChart, event: IStoryEvent) {\n const graphicPath = event.detailPath[event.detailPath.length - 1] as unknown as IGraphic<\n Partial\n >[];\n if (!graphicPath) {\n return null;\n }\n const pickGraphic = graphicPath?.[graphicPath.length - 1];\n if (!pickGraphic) {\n return null;\n }\n return getGraphicModelMark(chart, pickGraphic, graphicPath, 0);\n}\n\nexport function getGraphicModelMark(\n chart: IVChart,\n graphic: IGraphic,\n graphicPath: IGraphic[],\n index: number\n): IPickModelInfo {\n if (!graphic) {\n return null;\n }\n if (graphic.layer !== chart.getStage().defaultLayer) {\n return null;\n }\n const modelPick = modelCheck.find(mc => mc.check(graphic, graphicPath));\n if (modelPick) {\n return modelPick.modelInfo(chart, graphic, graphicPath, index);\n }\n // @ts-ignore\n if (index >= graphicPath.length - 1) {\n return null;\n }\n\n return getGraphicModelMark(chart, graphicPath[index + 1], graphicPath, index + 1);\n}\n","// 设置属性的时候,如果是DeletedAttr,则表示删除该属性\nexport const DeletedAttr = Symbol('DeletedAttr');\n\nexport const VSTORY_PREFIX = '__VSTORY';\n","import { isArray, isObject } from '@visactor/vutils';\nimport { DeletedAttr } from '../constants/config';\n\n/**\n * 深拷贝对象,如果属性是DeletedAttr,则表示删除该属性\n * 数组的话,会直接替换\n * @param target\n * @param source\n * @returns\n */\nexport function deepMergeWithDeletedAttr(target: T, source: Partial): T {\n // 遍历 source 对象的每一个属性\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n const targetValue = target[key];\n const sourceValue = source[key];\n if (sourceValue === DeletedAttr) {\n delete target[key];\n continue;\n }\n if (isArray(targetValue) && isArray(sourceValue)) {\n // 如果都是数组,也直接赋值\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n // 如果 sourceValue 是对象且 targetValue 也是对象,进行递归合并\n target[key] = deepMergeWithDeletedAttr(targetValue, sourceValue);\n } else {\n // 否则直接赋值\n target[key] = sourceValue;\n }\n }\n }\n return target;\n}\n","import { cloneDeep, isValid, merge } from '@visactor/vutils';\nimport type { ICharacter } from '../../interface/character';\nimport { deepMergeWithDeletedAttr } from '../../utils/merge';\nimport type { IConfigProcess } from './interface';\nimport type { IUpdateConfigParams } from '../../interface/dsl/dsl';\n\nexport class ConfigProcessBase implements IConfigProcess {\n protected _character: ICharacter;\n\n constructor(character: ICharacter) {\n this._character = character;\n }\n\n checkEnable(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams) {\n return true;\n }\n\n updateConfig(\n diffConfig: IUpdateConfigParams,\n config: IUpdateConfigParams,\n targetConfig: IUpdateConfigParams\n ): boolean {\n // 先合并到临时对象\n const nextTargetConfig = cloneDeep(targetConfig);\n this.mergeConfig(diffConfig, config, nextTargetConfig);\n // 判定是否合法,如果合法,就完成合并\n if (this.checkEnable(diffConfig, targetConfig)) {\n merge(targetConfig, nextTargetConfig);\n return true;\n }\n return false;\n }\n\n protected mergeConfig(\n diffConfig: IUpdateConfigParams,\n config: IUpdateConfigParams,\n targetConfig: IUpdateConfigParams\n ) {\n const { position, zIndex, options } = diffConfig;\n if (position) {\n targetConfig.position = position;\n }\n if (isValid(zIndex)) {\n targetConfig.zIndex = zIndex;\n }\n if (options) {\n targetConfig.options = deepMergeWithDeletedAttr(\n targetConfig.options ?? ({} as typeof targetConfig.options),\n options\n );\n }\n return true;\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class ChartConfigProcess extends ConfigProcessBase {}\n","import type { ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTimeline, ManualTicker } from '@visactor/vrender-core';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../interface/event';\nimport { CharacterBase } from '../character-base';\nimport type { IChartGraphicAttribute } from './graphic/vchart-graphic';\nimport { VChartGraphic } from './graphic/vchart-graphic';\nimport { getChartModelWithEvent } from './utils/vchart-pick';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport type { IChartCharacterConfig } from '../../interface/dsl/chart';\nimport { getLayoutFromWidget } from '../../utils/layout';\nimport type { IChartCharacterRuntime } from './interface/runtime';\nimport { ChartConfigProcess } from './chart-config-process';\nimport type { ICharacterChart } from './interface/character-chart';\nimport { mergeChartOption } from '../../utils/chart';\nimport type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { isArray } from '@visactor/vutils';\n\nexport class CharacterChart\n extends CharacterBase\n implements ICharacterChart\n{\n static type = 'Chart';\n visActorType: 'chart' | 'component' | 'table' | 'common' = 'chart';\n protected declare _graphic: VChartGraphic;\n protected declare _config: IChartCharacterConfig;\n\n // 临时记录 vchart 对象。在第一次执行 afterInitializeChart 后赋值, 在 beforeVRenderDraw 中使用\n // 不临时记录的话,第一次 beforeVRenderDraw 时,graphic 对象还未执行完初始化,当前对象的 _graphic 为 null\n protected _vchart: IVChart;\n\n protected _ticker: ITicker;\n protected _timeline: ITimeline;\n protected _runtime: IChartCharacterRuntime[] = [];\n\n static RuntimeMap: { [key: string]: boolean } = {};\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this._timeline = new DefaultTimeline();\n this._ticker = new ManualTicker([this._timeline]);\n this.configProcess = new ChartConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n protected _initRuntime() {\n super._initRuntime();\n }\n\n tickTo(t: number): void {\n const stage = this._graphic.vchart.getStage();\n stage.ticker.start();\n stage.getTimeline().resume();\n stage.ticker.tickAt && stage.ticker.tickAt(t);\n }\n\n getGraphicBySelector(selector: string | string[]) {\n let chart = false;\n let panel = false;\n const seriesList: Set = new Set();\n const componentsList: Set = new Set();\n if (isArray(selector)) {\n selector.forEach(s => {\n const data = this._getGraphicBySelector(s);\n chart = chart || data.chart;\n panel = panel || data.panel;\n data.seriesList.forEach(s => seriesList.add(s));\n data.componentsList.forEach(c => componentsList.add(c));\n });\n return {\n chart,\n panel,\n seriesList: Array.from(seriesList.values()),\n componentsList: Array.from(componentsList.values())\n };\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const vchart = this._graphic.vchart;\n let chart = false;\n let seriesList = vchart.getChart().getAllSeries();\n let componentsList = vchart.getChart().getAllComponents();\n const selectorList = selector.split(' ');\n // 是否包含panel, >0为包含\n let includePanel = 1;\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n chart = true;\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n const data = this.selectByNameOrType(seriesList, componentsList, match, false);\n seriesList = data.seriesList;\n componentsList = data.componentsList;\n if (match === 'panel') {\n includePanel = -Infinity; // 如果被排除,那么一定不包含了\n }\n } else {\n const data = this.selectByNameOrType(seriesList, componentsList, subSelector);\n seriesList = data.seriesList;\n componentsList = data.componentsList;\n if (subSelector === 'panel') {\n includePanel = Infinity; // 如果有正选,那么选中才算\n } else {\n includePanel--;\n }\n }\n });\n\n return {\n chart,\n panel: includePanel > 0,\n seriesList,\n componentsList\n };\n }\n\n protected selectByNameOrType(\n seriesList: ISeries[],\n componentsList: IComponent[],\n select: string,\n match: boolean = true\n ) {\n if (select[0] === '#') {\n return this.selectByNameOrUserId(seriesList, componentsList, select, match);\n }\n return this.selectByType(seriesList, componentsList, select, match);\n }\n\n protected selectByNameOrUserId(\n seriesList: ISeries[],\n componentsList: IComponent[],\n select: string,\n match: boolean = true\n ) {\n const name = select.substring(1);\n return {\n seriesList: seriesList.filter(item => (item.name === name || item.userId === name) === match),\n componentsList: componentsList.filter(item => (item.name === name || item.userId === name) === match)\n };\n }\n\n protected selectByType(seriesList: ISeries[], componentsList: IComponent[], name: string, match: boolean = true) {\n return {\n seriesList: seriesList.filter(item => (item.type === name || item.specKey === name) === match),\n componentsList: componentsList.filter(item => (item.type === name || item.specKey === name) === match)\n };\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n const chartPath = event.detailPath[event.detailPath.length - 1];\n const result = getChartModelWithEvent(this._graphic.vchart, event);\n if (!result) {\n // 点击到图表的空白区域\n if (this._graphic.pointInViewBox((event as any).canvasX, (event as any).canvasY)) {\n return {\n part: 'null',\n graphic: null,\n modelInfo: null,\n graphicType: 'null'\n };\n }\n return false;\n }\n const graphic = chartPath?.[chartPath.length - 1];\n return {\n part: result.type,\n modelInfo: result,\n graphic,\n graphicType: graphic.type\n };\n }\n\n _initGraphic() {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this._graphic = new VChartGraphic(attribute);\n\n this.canvas.addGraphic(this._graphic);\n }\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getViewBoxFromSpec() {\n const layout = getLayoutFromWidget(this._config.position, this);\n const viewBox = {\n x1: layout.x,\n x2: layout.x + layout.width,\n y1: layout.y,\n y2: layout.y + layout.height\n };\n return { layout, viewBox };\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n // 设置locked\n this.locked = !!config.locked;\n }\n\n getDefaultAttribute(): Partial {\n return {\n spec: this._config.options.spec,\n vchart: null,\n dpr: this._canvas.getDpr(),\n disableTriggerEvent: true,\n disableDirtyBounds: true,\n autoRender: false,\n width: 500,\n height: 500,\n mode: 'desktop-browser',\n interactive: false,\n panel: {},\n ticker: this._ticker,\n zIndex: this._config.zIndex ?? 0,\n vchartBoundsMode: this._config.options.initOption?.vchartBoundsMode ?? 'clip',\n chartInitOptions: mergeChartOption(\n {\n performanceHook: {\n afterInitializeChart: (vchart: IVChart) => {\n this._vchart = vchart;\n this._runtime.forEach(r => r.afterInitialize?.(this, vchart));\n },\n // @ts-ignore\n beforeDoRender: () => {\n this._runtime.forEach(r => r.beforeVRenderDraw?.(this, this._graphic?.vchart ?? this._vchart));\n }\n }\n },\n this._config.options.initOption ?? {}\n )\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n this._vchart = null;\n }\n\n getRuntimeConfig() {\n return this;\n }\n}\n","import { registerRankingBarChart } from '@visactor/vchart-extension';\nimport VChart from '@visactor/vchart';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nexport function registerRankingBarTemp() {\n registerRankingBarChart({ VChart });\n}\n\nexport class RankingBarCharacter extends CharacterChart {\n static type = 'RankingBar';\n\n tickTo(t: number): void {\n // console.log(t);\n const vchart = this._graphic.vchart;\n const player = vchart.getComponents().filter((d: any) => d.type === 'player')[0];\n const interval = vchart.getSpec()?.interval ?? 0;\n const count = vchart.getSpec()?.player?.specs?.length ?? 0;\n const totalTime = interval * count;\n const specs = player.getSpec().specs;\n const currSlice = Math.min(Math.floor(t / (totalTime / specs.length) + 1), specs.length - 1);\n if (currSlice !== (player as any)._activeIndex) {\n (player as any)._activeIndex = currSlice;\n specs[currSlice].data.forEach((datum: any) => {\n vchart.updateDataSync(datum.id, datum.values);\n });\n }\n super.tickTo(t);\n }\n}\n","import { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n// import { WaveScatterRuntime } from '../runtime/wave-scatter';\n\n// function waterDrop(ctx: any, size: number, topX: number, topY: number) {\n// ctx.beginPath();\n// const centerX = topX;\n// const centerY = topY - size / 2;\n// ctx.moveTo(centerX, centerY);\n// ctx.quadraticCurveTo(centerX + size / 2, centerY + size, centerX, centerY + size);\n// ctx.quadraticCurveTo(centerX - size / 2, centerY + size, centerX, centerY);\n// }\n\ninterface IWaveScatterChartGraphicAttribute extends IChartGraphicAttribute {\n symbolType: string;\n xField: string;\n yField: string;\n}\n\nexport class ScatterBarCharacter extends CharacterChart {\n static type = CharacterType.SCATTER_BAR;\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'scatter',\n point: {\n style: {\n _layoutHeight: (_: any, ctx: any) => {\n return ctx.getRegion().getLayoutRect().height;\n }\n }\n }\n }\n };\n }\n}\n","import { array } from '@visactor/vutils';\n\nexport const getVennSeriesDataKey = (sets: string | string[]) => {\n return array(sets).join(',');\n};\n","import { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { getVennSeriesDataKey } from './util';\n\nexport class VennTooltipHelper extends BaseSeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n return getVennSeriesDataKey(datum?.[this.series.getDimensionField()[0]]);\n };\n\n markTooltipKeyCallback = (datum: any) => {\n return getVennSeriesDataKey(datum?.[this.series.getDimensionField()[0]]);\n };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nexport const SMALL = 1e-10;\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IPointLike } from '../data-structure';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService } from '../data-structure';\nimport { SMALL } from './constant';\nimport type { ICircleArc, ICircle, IIntersectPoint, IOverlapAreaStats } from './interface';\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) */\nexport function intersectionArea(circles: ICircle[], stats?: IOverlapAreaStats) {\n // get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n\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\n let arcArea = 0;\n let polygonArea = 0;\n const arcs: ICircleArc[] = [];\n\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 (let 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\n // iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (let i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n\n // polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n\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\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]];\n const a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y);\n const a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = PointService.distancePP(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a)\n });\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\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\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\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 (let i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n\n // make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n\n if (disjoint) {\n arcArea = polygonArea = 0;\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\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\n return arcArea + polygonArea;\n}\n\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point: IPointLike, circles: ICircle[]) {\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles: ICircle[]) {\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\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r: number, width: number) {\n return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\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: number, r2: number, d: number) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\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\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d);\n const w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\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: ICircle, p2: ICircle): IIntersectPoint[] {\n const d = PointService.distancePP(p1, p2);\n const r1 = p1.radius;\n const r2 = p2.radius;\n\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\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d);\n const h = Math.sqrt(r1 * r1 - a * a);\n const x0 = p1.x + (a * (p2.x - p1.x)) / d;\n const y0 = p1.y + (a * (p2.y - p1.y)) / d;\n const rx = -(p2.y - p1.y) * (h / d);\n const ry = -(p2.x - p1.x) * (h / d);\n\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry }\n ];\n}\n\n/** Returns the center of a bunch of points */\nexport function getCenter(points: IPointLike[]) {\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","import type { IOverlapAreaStats } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService, SMALL, crossProduct, intersectionArea } from '@visactor/vutils';\nimport type { IVennCircle, IVennOverlapArc } from './interface';\n\nexport const getArcsFromCircles = (circles: IVennCircle[]) => {\n const areaStats: IOverlapAreaStats = {};\n const circleList = Object.values(circles);\n if (!circleList.length) {\n return [];\n }\n intersectionArea(circleList, areaStats);\n const arcs = areaStats.arcs.map(\n ({ p1, p2, circle, width }) =>\n ({\n p1,\n p2,\n radius: circle.radius,\n setId: (circle as IVennCircle).setId,\n largeArcFlag: width > circle.radius\n } as IVennOverlapArc)\n );\n const result: IVennOverlapArc[] = [];\n let i = 0;\n let arc = arcs[0];\n while (i < arcs.length && arc) {\n const { p2 } = arc;\n result.push(arc);\n arc = arcs.find(a => PointService.distancePP(a.p1, p2) < SMALL);\n i++;\n }\n return result;\n};\n\nexport const getPathFromArcs = (arcs: IVennOverlapArc[]) => {\n if (!arcs?.length) {\n return '';\n }\n let i = 0;\n let arc = arcs[0];\n const { p1 } = arc;\n let path = `M${p1.x},${p1.y}`;\n while (arc) {\n const { p2, radius, largeArcFlag } = arc;\n path += `A${radius},${radius} 0 ${largeArcFlag ? 1 : 0},0 ${p2.x},${p2.y}`;\n arc = arcs[++i];\n }\n path += ' Z';\n return path;\n};\n\nexport const getArcsFromPath = (path: string) => {\n const arcs: Partial[] = [];\n const segments = path.split('A');\n const m = segments[0];\n let i = m.indexOf(',');\n arcs.push({\n p1: { x: +m.slice(1, i), y: +m.slice(i + 1) }\n });\n for (i = 1; i < segments.length; i++) {\n const s = segments[i].split(',');\n arcs[i - 1].radius = +s[0];\n const p2x = +s[2].slice(2);\n const p2y = +s[3].split(' ')[0];\n arcs[i - 1].p2 = { x: p2x, y: p2y };\n arcs[i - 1].largeArcFlag = s[1][s[1].length - 1] === '1';\n if (i < segments.length - 1) {\n arcs.push({\n p1: { x: p2x, y: p2y }\n });\n }\n }\n return arcs as IVennOverlapArc[];\n};\n\nexport const getCirclesFromArcs = (arcs: IVennOverlapArc[]) => {\n return (\n arcs?.map(arc => {\n const { p1, p2, radius, largeArcFlag, setId } = arc;\n const { x: x1, y: y1 } = p1;\n const { x: x2, y: y2 } = p2;\n // 两点之间的距离\n const d = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5;\n // 中点坐标\n const mX = (x1 + x2) / 2;\n const mY = (y1 + y2) / 2;\n // 中垂线的长度\n const h = (radius ** 2 - (d / 2) ** 2) ** 0.5;\n // 圆心坐标\n let x = mX + (h * (y2 - y1)) / d;\n let y = mY - (h * (x2 - x1)) / d;\n if (crossProduct([x2 - x1, y2 - y1], [x - x1, y - y1]) > 0 || largeArcFlag) {\n x = mX - (h * (y2 - y1)) / d;\n y = mY + (h * (x2 - x1)) / d;\n }\n return { x, y, radius, setId } as IVennCircle;\n }) ?? []\n );\n};\n","import { ACustomAnimate } from '@visactor/vrender-core';\nimport type { IVennCircle, IVennOverlapArc, VennCircleName } from './utils/interface';\nimport { getArcsFromCircles, getCirclesFromArcs, getPathFromArcs } from './utils/path';\n\nexport class VennOverlapAnimation extends ACustomAnimate<{ path: string; arcs: IVennOverlapArc[] }> {\n protected fromCircles: Record;\n protected toCircles: Record;\n\n onBind(): void {\n this.fromCircles = {};\n getCirclesFromArcs(this.from.arcs).forEach(c => {\n this.fromCircles[c.setId] = c;\n });\n this.toCircles = {};\n getCirclesFromArcs(this.to.arcs).forEach(c => {\n this.toCircles[c.setId] = c;\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const circles: IVennCircle[] = [];\n Object.keys(this.fromCircles).forEach(key => {\n const fromC = this.fromCircles[key];\n const toC = this.toCircles[key];\n if (fromC && toC) {\n circles.push({\n radius: fromC.radius + (toC.radius - fromC.radius) * ratio,\n x: fromC.x + (toC.x - fromC.x) * ratio,\n y: fromC.y + (toC.y - fromC.y) * ratio,\n setId: key\n } as IVennCircle);\n }\n });\n const arcs = getArcsFromCircles(circles);\n out.arcs = arcs;\n out.path = getPathFromArcs(arcs);\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { VennOverlapAnimation } from '@visactor/vgrammar-venn';\nimport type { VennAppearPreset } from './interface';\n\nexport const vennCirclePresetAnimation = (preset: VennAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return {\n type: 'growRadiusIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'fadeIn'\n };\n }\n }\n};\n\nexport const vennOverlapPresetAnimation = (preset: VennAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'fadeIn'\n };\n }\n }\n};\n\nexport const registerVennAnimation = () => {\n Factory.registerAnimation('vennCircle', (params: unknown, preset: VennAppearPreset) => {\n return {\n appear: vennCirclePresetAnimation(preset),\n enter: { type: 'growRadiusIn' },\n exit: { type: 'growRadiusOut' },\n disappear: { type: 'growRadiusOut' }\n };\n });\n Factory.registerAnimation('vennOverlap', (params: unknown, preset: VennAppearPreset) => {\n return {\n appear: vennOverlapPresetAnimation(preset),\n update: { custom: VennOverlapAnimation },\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n };\n });\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IVennSeriesSpec, IVennSeriesTheme } from './interface';\n\nexport class VennSeriesSpecTransformer<\n T extends ISeriesSpec = Omit,\n K extends IVennSeriesTheme = IVennSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.circle);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.overlap, 'overlapLabel' as any, 'initOverlapLabelMarkStyle' as any);\n }\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { PointService, circleOverlap, intersectionArea } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle } from '../interface';\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: Record, overlaps: IVennArea[]): number {\n let output = 0;\n\n function getCircles(indices: VennCircleName[]) {\n return indices.map(function (i) {\n return sets[i];\n });\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 } else if (area.sets.length === 2) {\n const left = sets[area.sets[0]];\n const right = sets[area.sets[1]];\n overlap = circleOverlap(left.radius, right.radius, PointService.distancePP(left, right));\n } else {\n overlap = intersectionArea(getCircles(area.sets));\n }\n\n const weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n output += weight * (overlap - area.size) * (overlap - area.size);\n }\n\n return output;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/blas1.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\n\n// need some basic operations on vectors, rather than adding a dependency,\n// just define here\nexport function zeros(x: number): number[] {\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: number, y: number) {\n return zeros(x).map(function () {\n return zeros(y);\n });\n}\n\nexport function norm2(a: number[]) {\n return Math.sqrt(dotProduct(a, a));\n}\n\nexport function scale(ret: number[], value: number[], c: number) {\n for (let i = 0; i < value.length; ++i) {\n ret[i] = value[i] * c;\n }\n}\n\nexport function weightedSum(ret: number[], w1: number, v1: number[], w2: number, v2: number[]) {\n for (let j = 0; j < ret.length; ++j) {\n ret[j] = w1 * v1[j] + w2 * v2[j];\n }\n}\n\nexport function gemv(output: number[], A: number[][], x: number[]) {\n for (let i = 0; i < output.length; ++i) {\n output[i] = dotProduct(A[i], x);\n }\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { SMALL, circleOverlap, findZeroOfFunction, zerosM } from '@visactor/vutils';\nimport type { IVennArea } from '../interface';\n\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nexport function distanceFromIntersectArea(r1: number, r2: number, overlap: number) {\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\n return findZeroOfFunction(\n function (distance: number) {\n return circleOverlap(r1, r2, distance) - overlap;\n },\n 0,\n r1 + r2\n );\n}\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: IVennArea[], sets: IVennArea[], setIds: Record) {\n // initialize an empty distance matrix between all the points\n const distances = zerosM(sets.length, sets.length);\n const constraints = zerosM(sets.length, sets.length);\n\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]];\n const right = setIds[current.sets[1]];\n const r1 = Math.sqrt(sets[left].size / Math.PI);\n const r2 = Math.sqrt(sets[right].size / Math.PI);\n const distance = distanceFromIntersectArea(r1, r2, current.size);\n\n distances[left][right] = distances[right][left] = distance;\n\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 } else if (current.size <= 1e-10) {\n c = -1;\n }\n constraints[left][right] = constraints[right][left] = c;\n });\n\n return { distances, constraints };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennArea, IVennCircle, IVennSingleArea, IVennParams } from '../interface';\nimport { lossFunction } from './loss';\nimport { distanceFromIntersectArea } from './common';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { SMALL, circleCircleIntersection } from '@visactor/vutils';\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: IVennArea[], params: IVennParams): Record {\n const loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n // define a circle for each set\n const circles: Record = {};\n const setOverlaps: Record = {};\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length === 1) {\n const set = area.sets[0];\n circles[set] = {\n x: 1e10,\n y: 1e10,\n size: area.size,\n radius: Math.sqrt(area.size / Math.PI),\n setId: set\n };\n setOverlaps[set] = [];\n }\n }\n areas = areas.filter(function (a) {\n return a.sets.length === 2;\n });\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 let weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n const left = current.sets[0];\n const right = current.sets[1];\n\n // completely overlapped circles shouldn't be positioned early here\n if (current.size + SMALL >= Math.min(circles[left].size, circles[right].size)) {\n weight = 0;\n }\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\n // get list of most overlapped sets\n const mostOverlapped: IVennSingleArea[] = [];\n for (const set in setOverlaps) {\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\n mostOverlapped.push({ set, size });\n }\n }\n\n // sort by size desc\n function sortOrder(a: IVennSingleArea, b: IVennSingleArea) {\n return b.size - a.size;\n }\n mostOverlapped.sort(sortOrder);\n\n // keep track of what sets have been laid out\n const positioned: Record = {};\n function isPositioned(element: IVennSingleArea) {\n return element.set in positioned;\n }\n\n // adds a point to the output\n function positionSet(point: IPointLike, index: VennCircleName) {\n circles[index].x = point.x;\n circles[index].y = point.y;\n positioned[index] = true;\n }\n\n // add most overlapped set at (0,0)\n positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n\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;\n const overlap = setOverlaps[setIndex].filter(isPositioned);\n const set = circles[setIndex];\n overlap.sort(sortOrder);\n\n if (overlap.length === 0) {\n // this shouldn't happen anymore with addMissingAreas\n throw 'ERROR: missing pairwise overlap information';\n }\n\n const points: IPointLike[] = [];\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];\n const d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n\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\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];\n const d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n\n const extraPoints = circleCircleIntersection(\n { x: p1.x, y: p1.y, radius: d1 },\n { x: p2.x, y: p2.y, radius: d2 }\n );\n\n for (let l = 0; l < extraPoints.length; ++l) {\n points.push(extraPoints[l]);\n }\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;\n let 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\n positionSet(bestPoint, setIndex);\n }\n\n return circles;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/linesearch.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\nimport { weightedSum } from './blas1';\n\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: any, pk: number[], current: any, next: any, a: number, c1?: number, c2?: number) {\n const phi0 = current.fx;\n const phiPrime0 = dotProduct(current.fxprime, pk);\n let phi = phi0;\n let phi_old = phi0;\n let phiPrime = phiPrime0;\n let a0 = 0;\n\n a = a || 1;\n c1 = c1 || 1e-6;\n c2 = c2 || 0.1;\n\n function zoom(a_lo: number, a_high: number, phi_lo: number) {\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 = dotProduct(next.fxprime, pk);\n\n if (phi > phi0 + c1 * a * phiPrime0 || phi >= phi_lo) {\n a_high = a;\n } else {\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime * (a_high - a_lo) >= 0) {\n a_high = a_lo;\n }\n\n a_lo = a;\n phi_lo = phi;\n }\n }\n\n return 0;\n }\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 = dotProduct(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || (iteration && phi >= phi_old)) {\n return zoom(a0, a, phi_old);\n }\n\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime >= 0) {\n return zoom(a, a0, phi);\n }\n\n phi_old = phi;\n a0 = a;\n a *= 2;\n }\n\n return a;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/conjugateGradient.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\nimport { norm2, scale, weightedSum } from './blas1';\nimport { wolfeLineSearch } from './linesearch';\n\nexport function conjugateGradient(f: any, initial: any, params: any) {\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\n params = params || {};\n const maxIterations = params.maxIterations || initial.length * 20;\n\n current.fx = f(current.x, current.fxprime);\n const pk = current.fxprime.slice();\n scale(pk, current.fxprime, -1);\n\n for (let i = 0; i < maxIterations; ++i) {\n a = wolfeLineSearch(f, pk, current, next, a);\n\n // todo: history in wrong spot?\n if (params.history) {\n params.history.push({ x: current.x.slice(), fx: current.fx, fxprime: current.fxprime.slice(), 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 } else {\n // update direction using Polak–Ribiere CG method\n weightedSum(yk, 1, next.fxprime, -1, current.fxprime);\n\n const delta_k = dotProduct(current.fxprime, current.fxprime);\n const beta_k = Math.max(0, dotProduct(yk, next.fxprime) / delta_k);\n\n weightedSum(pk, beta_k, pk, -1, next.fxprime);\n\n temp = current;\n current = next;\n next = temp;\n }\n\n if (norm2(current.fxprime) <= 1e-5) {\n break;\n }\n }\n\n if (params.history) {\n params.history.push({ x: current.x.slice(), fx: current.fx, fxprime: current.fxprime.slice(), alpha: a });\n }\n\n return current;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { conjugateGradient, norm2, scale, zeros, seedRandom } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle, IVennParams } from '../interface';\nimport { getDistanceMatrices } from './common';\n\n/// use the constrained MDS variant to generate an initial layout\nexport function constrainedMDSLayout(areas: IVennArea[], params: IVennParams): Record {\n params = params || {};\n const restarts = params.restarts || 10;\n\n // bidirectionally map sets to a rowid (so we can create a matrix)\n const sets = [];\n const 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\n const matrices = getDistanceMatrices(areas, sets, setIds);\n let distances = matrices.distances;\n const constraints = matrices.constraints;\n\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((row: number[]) => {\n return row.map(value => {\n return value / norm;\n });\n });\n\n const obj = function (x: number[], fxPrime: number[]) {\n return constrainedMDSGradient(x, fxPrime, distances, constraints);\n };\n\n let best;\n let current;\n for (i = 0; i < restarts; ++i) {\n const initial = zeros(distances.length * 2).map((entry: any, i: number) => seedRandom(i));\n\n current = conjugateGradient(obj, initial, params);\n if (!best || current.fx < best.fx) {\n best = current;\n }\n }\n const positions = best.x;\n\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\n if (params.history) {\n for (i = 0; i < params.history.length; ++i) {\n (scale as any)(params.history[i].x, norm);\n }\n }\n return circles;\n}\n\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x: number[], fxPrime: number[], distances: number[][], constraints: number[][]) {\n let loss = 0;\n let i;\n for (i = 0; i < fxPrime.length; ++i) {\n fxPrime[i] = 0;\n }\n\n for (i = 0; i < distances.length; ++i) {\n const xi = x[2 * i];\n const yi = x[2 * i + 1];\n for (let j = i + 1; j < distances.length; ++j) {\n const xj = x[2 * j];\n const yj = x[2 * j + 1];\n const dij = distances[i][j];\n const constraint = constraints[i][j];\n\n const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi);\n const distance = Math.sqrt(squaredDistance);\n const delta = squaredDistance - dij * dij;\n\n if ((constraint > 0 && distance <= dij) || (constraint < 0 && distance >= dij)) {\n continue;\n }\n\n loss += 2 * delta * delta;\n\n fxPrime[2 * i] += 4 * delta * (xi - xj);\n fxPrime[2 * i + 1] += 4 * delta * (yi - yj);\n\n fxPrime[2 * j] += 4 * delta * (xj - xi);\n fxPrime[2 * j + 1] += 4 * delta * (yj - yi);\n }\n }\n return loss;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/nelderMead.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { weightedSum } from './blas1';\n\n/** minimizes a function using the downhill simplex method */\nexport function nelderMead(f: any, x0: any, parameters: any) {\n parameters = parameters || {};\n\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\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\n function updateSimplex(value: any) {\n for (let i = 0; i < value.length; i++) {\n simplex[N][i] = value[i];\n }\n simplex[N].fx = value.fx;\n }\n\n const sortOrder = function (a: any, b: any) {\n return a.fx - b.fx;\n };\n\n const centroid = x0.slice();\n const reflected = x0.slice();\n const contracted = x0.slice();\n const expanded = x0.slice();\n\n for (let iteration = 0; iteration < maxIterations; ++iteration) {\n simplex.sort(sortOrder);\n\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(function (x) {\n const state = x.slice();\n state.fx = x.fx;\n state.id = x.id;\n return state;\n });\n sortedSimplex.sort(function (a, b) {\n return a.id - b.id;\n });\n\n parameters.history.push({ x: simplex[0].slice(), fx: simplex[0].fx, 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\n if (Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta && maxDiff < minTolerance) {\n break;\n }\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\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\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 } else {\n updateSimplex(reflected);\n }\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\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 } else {\n shouldReduce = true;\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 } else {\n shouldReduce = true;\n }\n }\n\n if (shouldReduce) {\n // if we don't contract here, we're done\n if (sigma >= 1) {\n break;\n }\n\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 } else {\n updateSimplex(reflected);\n }\n }\n\n simplex.sort(sortOrder);\n return { fx: simplex[0].fx, x: simplex[0] };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennArea, IVennCircle, IVennParams, VennAreaName } from '../interface';\nimport { greedyLayout } from './greedy-layout';\nimport { lossFunction } from './loss';\nimport { constrainedMDSLayout } from './constrained-mds-layout';\nimport { nelderMead } from '@visactor/vutils';\n\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: IVennArea[], parameters?: IVennParams) {\n parameters = parameters || {};\n parameters.maxIterations = parameters.maxIterations || 500;\n const initialLayout = parameters.initialLayout || bestInitialLayout;\n const loss = parameters.lossFunction || lossFunction;\n\n // add in missing pairwise areas as having 0 size\n areas = addMissingAreas(areas);\n\n // initial layout is done greedily\n const circles = initialLayout(areas, parameters);\n\n // transform x/y coordinates to a vector to optimize\n const initial: number[] = [];\n const setIds: VennCircleName[] = [];\n for (const setId in circles) {\n if (circles.hasOwnProperty(setId)) {\n initial.push(circles[setId].x);\n initial.push(circles[setId].y);\n setIds.push(setId);\n }\n }\n\n // optimize initial layout from our loss function\n const solution = nelderMead(\n function (values: number[]) {\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 // size : circles[setId].size\n };\n }\n return loss(current, areas);\n },\n initial,\n parameters\n );\n\n // transform solution vector back to x/y points\n const positions = solution.x;\n for (let i = 0; i < setIds.length; ++i) {\n const setId = setIds[i];\n circles[setId].x = positions[2 * i];\n circles[setId].y = positions[2 * i + 1];\n }\n\n return circles;\n}\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: IVennArea[]) {\n areas = areas.slice();\n\n // two circle intersections that aren't defined\n const ids: VennCircleName[] = [];\n const pairs: Record = {};\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length === 1) {\n ids.push(area.sets[0]);\n } else if (area.sets.length === 2) {\n const a = area.sets[0];\n const b = area.sets[1];\n pairs[[a, b].toString()] = true;\n pairs[[b, a].toString()] = true;\n }\n }\n ids.sort(function (a, b) {\n return +(a > b);\n });\n\n for (let i = 0; i < ids.length; ++i) {\n const a = ids[i];\n for (let j = i + 1; j < ids.length; ++j) {\n const b = ids[j];\n if (!([a, b].toString() in pairs)) {\n areas.push({ sets: [a, b], size: 0 });\n }\n }\n }\n return areas;\n}\n\n/// takes the best working variant of either constrained MDS or greedy\nexport function bestInitialLayout(areas: IVennArea[], params: IVennParams): Record {\n let initial = greedyLayout(areas, params);\n const loss = params.lossFunction || lossFunction;\n\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);\n const constrainedLoss = loss(constrained, areas);\n const greedyLoss = loss(initial, areas);\n\n if (constrainedLoss + 1e-8 < greedyLoss) {\n initial = constrained;\n }\n }\n return initial;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { PointService } from '@visactor/vutils';\nimport type { VennCircleName, IVennCircle, ICluster } from '../interface';\n\n// orientates a bunch of circles to point in orientation\nexport function orientateCircles(circles: IVennCircle[], orientation: number, orientationOrder: any) {\n if (orientationOrder === null) {\n circles.sort(function (a, b) {\n return b.radius - a.radius;\n });\n } else {\n circles.sort(orientationOrder);\n }\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;\n const largestY = circles[0].y;\n\n for (i = 0; i < circles.length; ++i) {\n circles[i].x -= largestX;\n circles[i].y -= largestY;\n }\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 = PointService.distancePP(circles[0], circles[1]);\n if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n circles[1].x = circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n circles[1].y = circles[0].y;\n }\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 const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n let x;\n let y;\n\n y;\n\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\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}\n\nexport function disjointCluster(circles: IVennCircle[]): ICluster[] {\n // union-find clustering to get disjoint sets\n circles.map(function (circle: IVennCircle) {\n circle.parent = circle;\n });\n\n // path compression step in union find\n function find(circle: IVennCircle) {\n if (circle.parent !== circle) {\n circle.parent = find(circle.parent);\n }\n return circle.parent;\n }\n\n function union(x: IVennCircle, y: IVennCircle) {\n const xRoot = find(x);\n const yRoot = find(y);\n xRoot.parent = yRoot;\n }\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 (PointService.distancePP(circles[i], circles[j]) + 1e-10 < maxDistance) {\n union(circles[j], circles[i]);\n }\n }\n }\n\n // find all the disjoint clusters and group them together\n const disjointClusters: Record = {};\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\n // cleanup bookkeeping\n circles.map(function (circle: IVennCircle) {\n delete circle.parent;\n });\n\n // return in more usable form\n const ret: IVennCircle[][] = [];\n for (setId in disjointClusters) {\n if (disjointClusters.hasOwnProperty(setId)) {\n ret.push(disjointClusters[setId]);\n }\n }\n return ret;\n}\n\nexport function getBoundingBox(circles: IVennCircle[]) {\n const minMax = function (d: string) {\n const hi = Math.max.apply(\n null,\n circles.map(function (c) {\n return c[d] + c.radius;\n })\n );\n const lo = Math.min.apply(\n null,\n circles.map(function (c) {\n return c[d] - c.radius;\n })\n );\n return { max: hi, min: lo };\n };\n\n return { xRange: minMax('x'), yRange: minMax('y') };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennCircle, ICluster } from '../interface';\nimport { disjointCluster, getBoundingBox, orientateCircles } from './common';\n\nexport function normalizeSolution(\n solution: Record,\n orientation: number,\n orientationOrder: any\n): Record {\n if (orientation === null) {\n orientation = Math.PI / 2;\n }\n\n // work with a list instead of a dictionary, and take a copy so we\n // don't mutate input\n let circles: ICluster = [];\n for (const setId in solution) {\n if (solution.hasOwnProperty(setId)) {\n const previous = solution[setId];\n circles.push({ x: previous.x, y: previous.y, radius: previous.radius, setId });\n }\n }\n\n // get all the disjoint clusters\n const clusters = disjointCluster(circles);\n\n // orientate all disjoint sets, get sizes\n for (let i = 0; i < clusters.length; ++i) {\n orientateCircles(clusters[i], orientation, orientationOrder);\n const bounds = getBoundingBox(clusters[i]);\n clusters[i].size = (bounds.xRange.max - bounds.xRange.min) * (bounds.yRange.max - bounds.yRange.min);\n clusters[i].bounds = bounds;\n }\n clusters.sort(function (a: ICluster, b: ICluster) {\n return b.size - a.size;\n });\n\n // orientate the largest at 0,0, and get the bounds\n circles = clusters[0];\n let returnBounds = circles.bounds;\n\n const spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n\n function addCluster(cluster: ICluster, right: boolean, bottom: boolean) {\n if (!cluster) {\n return;\n }\n\n const bounds = cluster.bounds;\n let xOffset;\n let yOffset;\n let centering;\n\n if (right) {\n xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n } else {\n xOffset = returnBounds.xRange.max - bounds.xRange.max;\n centering = (bounds.xRange.max - bounds.xRange.min) / 2 - (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n if (centering < 0) {\n xOffset += centering;\n }\n }\n\n if (bottom) {\n yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n } else {\n yOffset = returnBounds.yRange.max - bounds.yRange.max;\n centering = (bounds.yRange.max - bounds.yRange.min) / 2 - (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n if (centering < 0) {\n yOffset += centering;\n }\n }\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\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\n // have one cluster (in top left). lay out next three relative\n // to it in a grid\n returnBounds = getBoundingBox(circles);\n }\n\n // convert back to solution form\n const ret: Record = {};\n for (let i = 0; i < circles.length; ++i) {\n ret[circles[i].setId] = circles[i];\n }\n return ret;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennCircle } from '../interface';\nimport { getBoundingBox } from './common';\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(\n solution: Record,\n width: number,\n height: number,\n x0: number,\n y0: number\n): Record {\n width = Math.max(width, 1);\n height = Math.max(height, 1);\n\n const circles: IVennCircle[] = [];\n const setIds: VennCircleName[] = [];\n for (const setId in solution) {\n if (solution.hasOwnProperty(setId)) {\n setIds.push(setId);\n circles.push(solution[setId]);\n }\n }\n\n const bounds = getBoundingBox(circles);\n const xRange = bounds.xRange;\n const yRange = bounds.yRange;\n\n if (xRange.max === xRange.min || yRange.max === yRange.min) {\n // eslint-disable-next-line no-console\n console.log('not scaling solution: zero size detected');\n return solution;\n }\n\n const xScaling = width / (xRange.max - xRange.min);\n const yScaling = height / (yRange.max - yRange.min);\n const scaling = Math.min(yScaling, xScaling);\n\n // while we're at it, center the diagram too\n const xOffset = (width - (xRange.max - xRange.min) * scaling) / 2;\n const yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n\n const scaled: Record = {};\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: x0 + xOffset + (circle.x - xRange.min) * scaling,\n y: y0 + yOffset + (circle.y - yRange.min) * scaling,\n setId: circle.setId\n } as IVennCircle;\n }\n\n return scaled;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/diagram.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IOverlapAreaStats, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService, getCenter, intersectionArea, nelderMead, Logger } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle, VennAreaName } from './interface';\n\nexport function computeTextCenters(\n circles: Record,\n areas: IVennArea[]\n): Record {\n const ret: Record = {};\n const overlapped = getOverlappingCircles(circles);\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i].sets;\n const areaIds: Record = {};\n const exclude: Record = {};\n for (let j = 0; j < area.length; ++j) {\n areaIds[area[j]] = true;\n const overlaps = overlapped[area[j]];\n // keep track of any circles that overlap this area,\n // and don't consider for purposes of computing the text\n // centre\n for (let k = 0; k < overlaps.length; ++k) {\n exclude[overlaps[k]] = true;\n }\n }\n\n const interior: IVennCircle[] = [];\n const exterior: IVennCircle[] = [];\n for (const setId in circles) {\n if (setId in areaIds) {\n interior.push(circles[setId]);\n } else if (!(setId in exclude)) {\n exterior.push(circles[setId]);\n }\n }\n const center = computeTextCenter(interior, exterior);\n ret[area.toString()] = center;\n if (center.disjoint && areas[i].size > 0) {\n const logger = Logger.getInstance();\n logger.error('Area ' + area + ' not represented on screen');\n }\n }\n return ret;\n}\n\n// given a dictionary of {setid : circle}, returns\n// a dictionary of setid to list of circles that completely overlap it\nfunction getOverlappingCircles(circles: Record): Record {\n const ret: Record = {};\n const circleIds: VennCircleName[] = [];\n for (const circleId in circles) {\n circleIds.push(circleId);\n ret[circleId] = [];\n }\n for (let i = 0; i < circleIds.length; i++) {\n const a = circles[circleIds[i]];\n for (let j = i + 1; j < circleIds.length; ++j) {\n const b = circles[circleIds[j]];\n const d = PointService.distancePP(a, b);\n\n if (d + b.radius <= a.radius + 1e-10) {\n ret[circleIds[j]].push(circleIds[i]);\n } else if (d + a.radius <= b.radius + 1e-10) {\n ret[circleIds[i]].push(circleIds[j]);\n }\n }\n }\n return ret;\n}\n\n// compute the center of some circles by maximizing the margin of\n// the center point relative to the circles (interior) after subtracting\n// nearby circles (exterior)\nexport function computeTextCenter(interior: IVennCircle[], exterior: IVennCircle[]) {\n // get an initial estimate by sampling around the interior circles\n // and taking the point with the biggest margin\n const points: IPointLike[] = [];\n for (let i = 0; i < interior.length; ++i) {\n const c = interior[i];\n points.push({ x: c.x, y: c.y });\n points.push({ x: c.x + c.radius / 2, y: c.y });\n points.push({ x: c.x - c.radius / 2, y: c.y });\n points.push({ x: c.x, y: c.y + c.radius / 2 });\n points.push({ x: c.x, y: c.y - c.radius / 2 });\n }\n let initial = points[0];\n let margin = circleMargin(points[0], interior, exterior);\n for (let i = 1; i < points.length; ++i) {\n const m = circleMargin(points[i], interior, exterior);\n if (m >= margin) {\n initial = points[i];\n margin = m;\n }\n }\n\n // maximize the margin numerically\n const solution = nelderMead(\n function (p: number[]) {\n return -1 * circleMargin({ x: p[0], y: p[1] }, interior, exterior);\n },\n [initial.x, initial.y],\n { maxIterations: 500, minErrorDelta: 1e-10 }\n ).x;\n let ret: {\n x: number;\n y: number;\n disjoint?: boolean;\n } = { x: solution[0], y: solution[1] };\n\n // check solution, fallback as needed (happens if fully overlapped\n // etc)\n let valid = true;\n for (let i = 0; i < interior.length; ++i) {\n if (PointService.distancePP(ret, interior[i]) > interior[i].radius) {\n valid = false;\n break;\n }\n }\n\n for (let i = 0; i < exterior.length; ++i) {\n if (PointService.distancePP(ret, exterior[i]) < exterior[i].radius) {\n valid = false;\n break;\n }\n }\n\n if (!valid) {\n if (interior.length === 1) {\n ret = { x: interior[0].x, y: interior[0].y };\n } else {\n const areaStats: IOverlapAreaStats = {};\n intersectionArea(interior, areaStats);\n\n if (areaStats.arcs.length === 0) {\n ret = { x: 0, y: -1000, disjoint: true };\n } else if (areaStats.arcs.length === 1) {\n ret = { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y };\n } else if (exterior.length) {\n // try again without other circles\n ret = computeTextCenter(interior, []);\n } else {\n // take average of all the points in the intersection\n // polygon. this should basically never happen\n // and has some issues:\n // https://github.com/benfred/venn.js/issues/48#issuecomment-146069777\n ret = getCenter(\n areaStats.arcs.map(function (a) {\n return a.p1;\n })\n );\n }\n }\n }\n\n return ret;\n}\n\nfunction circleMargin(current: IPointLike, interior: IVennCircle[], exterior: IVennCircle[]) {\n let margin = interior[0].radius - PointService.distancePP(interior[0], current);\n let i;\n let m;\n for (i = 1; i < interior.length; ++i) {\n m = interior[i].radius - PointService.distancePP(interior[i], current);\n if (m <= margin) {\n margin = m;\n }\n }\n\n for (i = 0; i < exterior.length; ++i) {\n m = PointService.distancePP(exterior[i], current) - exterior[i].radius;\n if (m <= margin) {\n margin = m;\n }\n }\n return margin;\n}\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type {\n IVennCircleDatum,\n IVennCommonDatum,\n IVennOverlapDatum,\n IVennTransformMarkOptions,\n IVennTransformOptions\n} from './interface';\nimport { computeTextCenters, normalizeSolution, scaleSolution, venn } from './utils';\nimport type { VennCircleName, IVennArea, IVennCircle, VennAreaName } from './utils/interface';\nimport { getArcsFromCircles, getPathFromArcs } from './utils/path';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array } from '@visactor/vutils';\n\nexport const transform = (\n options: IVennTransformOptions,\n upstreamData: Datum[]\n): Array => {\n const {\n x0,\n x1,\n y0,\n y1,\n setField = 'sets',\n valueField = 'size',\n orientation = Math.PI / 2,\n orientationOrder = null\n } = options;\n\n let circles: Record = {};\n let textCenters: Record = {};\n\n if (upstreamData.length > 0) {\n const vennData = upstreamData.map(\n area =>\n ({\n sets: array(area[setField]),\n size: area[valueField]\n } as IVennArea)\n );\n let solution = venn(vennData, options);\n solution = normalizeSolution(solution, orientation, orientationOrder);\n circles = scaleSolution(solution, x1 - x0, y1 - y0, x0, y0);\n textCenters = computeTextCenters(circles, vennData);\n }\n\n const data = upstreamData.map(area => {\n const sets = array(area[setField]);\n const key = sets.toString();\n const textCenter = textCenters[key];\n const basicDatum = {\n ...area,\n datum: area,\n sets,\n key,\n size: area[valueField],\n labelX: textCenter?.x,\n labelY: textCenter?.y\n } as IVennCommonDatum;\n const circle = circles[key];\n if (circle) {\n return {\n ...basicDatum,\n type: 'circle',\n x: circle.x,\n y: circle.y,\n radius: circle.radius\n } as IVennCircleDatum;\n }\n const arcs = getArcsFromCircles(sets.map(name => circles[name]));\n return {\n ...basicDatum,\n type: 'overlap',\n x: 0,\n y: 0,\n path: getPathFromArcs(arcs),\n arcs\n } as IVennOverlapDatum;\n });\n return data;\n};\n\nexport const transformMark = (\n options: IVennTransformMarkOptions,\n upstreamData: Array\n) => {\n return upstreamData.filter(datum => datum.type === options.datumType);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { IArcMark, ILabelMark, IMark, IPathMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { Datum, IArcMarkSpec, IPathMarkSpec, IPoint, StringOrNumber } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IVennSeriesSpec } from './interface';\nimport { VennTooltipHelper } from './tooltip-helper';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { TransformSpec } from '@visactor/vgrammar-core';\nimport { vennSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerVennAnimation } from './animation';\nimport { VennSeriesSpecTransformer } from './venn-transform';\nimport { BaseSeries } from '../base';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerPathMark } from '../../mark/path';\nimport type { IVennCircleDatum, IVennOverlapDatum } from '@visactor/vgrammar-venn';\nimport { registerVennTransforms } from '@visactor/vgrammar-venn';\nimport type { IBounds } from '@visactor/vutils';\nimport { Bounds, array } from '@visactor/vutils';\nimport { getVennSeriesDataKey } from './util';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { ILegend, IDiscreteLegend } from '../../component/legend/interface';\n\nexport class VennSeries extends BaseSeries {\n static readonly type: string = SeriesTypeEnum.venn;\n type = SeriesTypeEnum.venn;\n\n static readonly mark: SeriesMarkMap = vennSeriesMark;\n\n static readonly transformerConstructor = VennSeriesSpecTransformer;\n readonly transformerConstructor = VennSeriesSpecTransformer;\n\n private _circleMark: IArcMark;\n private _overlapMark: IPathMark;\n private _labelMark: ILabelMark;\n\n protected declare _spec: T;\n\n // range for venn layout, change while zoom and pan\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField ?? 'sets');\n this.setValueField(this._spec.valueField ?? 'size');\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_DATA_KEY);\n }\n\n compile(): void {\n super.compile();\n this._runVennTransform();\n }\n\n protected _runVennTransform(render = false) {\n const viewDataProduct = this._data.getProduct();\n if (viewDataProduct) {\n viewDataProduct.transform([\n {\n type: 'venn',\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2,\n setField: this._categoryField,\n valueField: this._valueField\n }\n ]);\n }\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n initMark() {\n const circleMark = this._createMark(VennSeries.mark.circle, {\n isSeriesMark: true\n });\n if (circleMark) {\n circleMark.setTransform([\n {\n type: 'vennMark',\n datumType: 'circle'\n } as TransformSpec\n ]);\n this._circleMark = circleMark;\n }\n\n const overlapMark = this._createMark(VennSeries.mark.overlap, {\n isSeriesMark: true\n });\n if (overlapMark) {\n overlapMark.setTransform([\n {\n type: 'vennMark',\n datumType: 'overlap'\n } as TransformSpec\n ]);\n this._overlapMark = overlapMark;\n }\n }\n\n initMarkStyle() {\n this._initCircleMarkStyle();\n this._initOverlapMarkStyle();\n }\n\n protected _initCircleMarkStyle() {\n if (!this._circleMark) {\n return;\n }\n\n this.setMarkStyle(\n this._circleMark,\n {\n x: datum => (datum as IVennCircleDatum).x,\n y: datum => (datum as IVennCircleDatum).y,\n innerRadius: 0,\n outerRadius: datum => (datum as IVennCircleDatum).radius,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: this.getColorAttribute(),\n stroke: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initOverlapMarkStyle() {\n if (!this._overlapMark) {\n return;\n }\n this.setMarkStyle(\n this._overlapMark,\n {\n x: datum => (datum as IVennCircleDatum).x,\n y: datum => (datum as IVennCircleDatum).y,\n path: datum => (datum as IVennOverlapDatum).path,\n arcs: (datum: any) => (datum as IVennOverlapDatum).arcs,\n fill: this.getColorAttribute(),\n stroke: this.getColorAttribute(),\n zIndex: datum => {\n // zIndex 按照重叠的深度来分级\n return (datum as IVennOverlapDatum).sets.length * 100;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._overlapMark,\n {\n zIndex: datum => {\n // hover 态的 zIndex 要比同级更高\n return (datum as IVennOverlapDatum).sets.length * 100 + 1;\n }\n },\n STATE_VALUE_ENUM.STATE_HOVER,\n AttributeLevel.Series\n );\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('venn');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum as IVennCircleDatum).labelX,\n y: datum => (datum as IVennCircleDatum).labelY,\n text: datum => getVennSeriesDataKey((datum as IVennCircleDatum).sets),\n maxLineWidth: (datum: any) => {\n const { x, radius, labelX } = datum as IVennCircleDatum;\n const circleX0 = x - radius;\n const circleX1 = x + radius;\n return Math.min(labelX - circleX0, circleX1 - labelX);\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initOverlapLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('venn');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum as IVennOverlapDatum).labelX,\n y: datum => (datum as IVennOverlapDatum).labelY,\n text: datum => getVennSeriesDataKey((datum as IVennOverlapDatum).sets)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new VennTooltipHelper(this);\n this._circleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._circleMark);\n this._overlapMark && this._tooltipHelper.activeTriggerSet.mark.add(this._overlapMark);\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this.getLayoutRect().width, this.getLayoutRect().height);\n this._runVennTransform();\n }\n\n getDefaultShapeType(): string {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._circleMark, this._overlapMark];\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n dataToPosition(data: Datum, checkInViewData?: boolean): IPoint {\n return {\n x: data.x,\n y: data.y\n };\n }\n\n dataToPositionX(data: Datum): number {\n return data.x;\n }\n\n dataToPositionY(data: Datum): number {\n return data.y;\n }\n\n valueToPosition(value1: any, value2?: any): IPoint {\n throw new Error('Method not implemented.');\n }\n\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n return null;\n }\n\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(originalKey => {\n const dataKey = getVennSeriesDataKey(originalKey);\n return {\n key: dataKey,\n originalKey,\n style: this.getSeriesStyle({\n [field]: originalKey\n }),\n shapeType: defaultShapeType\n };\n });\n }\n\n getSeriesFieldValue(datum: Datum, seriesField?: string) {\n const value = super.getSeriesFieldValue(datum, seriesField);\n return getVennSeriesDataKey(value);\n }\n\n legendSelectedFilter(component: ILegend, selectedKeys: StringOrNumber[]) {\n if (component.type === ComponentTypeEnum.discreteLegend) {\n const legend = component;\n\n const originalLegendKeys: any[] = (legend as IDiscreteLegend).getLegendDefaultData(true);\n if (selectedKeys.length === 0 && originalLegendKeys.length) {\n return [];\n }\n\n if (selectedKeys.length === originalLegendKeys.length) {\n return selectedKeys;\n }\n\n // 找到缺失的项\n const selectedFilter = {};\n selectedKeys.forEach(s => {\n selectedFilter[s] = true;\n });\n const disableKeys = originalLegendKeys.filter(key => !selectedFilter[getVennSeriesDataKey(key)]);\n\n // 找到缺失的项的派生项(如 “A&B” 的派生项 “A&B&C”)\n const derivedDisableKeys = originalLegendKeys.filter(key => {\n if (disableKeys.includes(key)) {\n return false;\n }\n return disableKeys.some(disableKey => array(disableKey).every(k => key.includes(k)));\n });\n\n // 将派生项从 selectedKeys 中移除\n selectedKeys = selectedKeys.slice();\n derivedDisableKeys.forEach(key => {\n selectedKeys.splice(selectedKeys.indexOf(getVennSeriesDataKey(key)), 1);\n });\n }\n return selectedKeys;\n }\n\n initAnimation(): void {\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('vennCircle')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n this.getMarksInType(MarkTypeEnum.path).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('vennOverlap')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n}\n\nexport const registerVennSeries = () => {\n registerArcMark();\n registerPathMark();\n registerVennAnimation();\n registerFadeInOutAnimation();\n registerVennTransforms();\n Factory.registerSeries(VennSeries.type, VennSeries);\n};\n","import type { AdaptiveSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IVennChartSpec } from './interface';\n\nexport class VennChartSpecTransformer extends BaseChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'circle',\n 'overlap',\n 'overlapLabel'\n ]);\n\n return series;\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IVennChartSpec } from './interface';\nimport { registerVennSeries } from '../../series/venn/venn';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { VennChartSpecTransformer } from './venn-transformer';\n\nexport class VennChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.venn;\n static readonly seriesType: string = SeriesTypeEnum.venn;\n static readonly transformerConstructor = VennChartSpecTransformer;\n readonly transformerConstructor = VennChartSpecTransformer;\n readonly type: string = ChartTypeEnum.venn;\n readonly seriesType: string = SeriesTypeEnum.venn;\n}\n\nexport const registerVennChart = () => {\n registerVennSeries();\n Factory.registerChart(VennChart.type, VennChart);\n};\n","import { SeriesTypeEnum } from '../../series';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ILiquidChartSpec } from './interface';\n\nexport class LiquidChartSpecTransformer<\n T extends ILiquidChartSpec = ILiquidChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'valueField',\n 'maskShape',\n 'reverse',\n 'outlineMargin',\n 'outlinePadding',\n 'indicatorSmartInvert',\n 'liquidBackground',\n 'liquidOutline'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { ILiquidAnimationParams, LiquidAppearPreset } from './interface';\n\nconst Appear_Wave: IAnimationTypeConfig = {\n duration: 2000,\n loop: true,\n channel: {\n wave: { from: 0, to: 1 }\n }\n};\n\nconst Appear_Grow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n wave: { from: 0, to: 1 },\n height: params.height,\n dy: params.dy\n }\n };\n};\n\nconst Appear_WaveGrow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n wave: { from: 0, to: 1 },\n height: params.height,\n dy: params.dy\n }\n };\n};\n\nconst Appear_Group_Grow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n dy: params.dy\n }\n };\n};\n\nconst Appear_Group_WaveGrow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n dy: params.dy\n }\n };\n};\n\nexport function liquidPresetAnimation(\n params: ILiquidAnimationParams,\n preset: LiquidAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'wave':\n return Appear_Wave;\n case 'grow':\n return Appear_Grow(params);\n case 'waveGrow':\n return Appear_WaveGrow(params);\n default:\n return Appear_Wave;\n }\n}\n\nexport function liquidGroupPresetAnimation(\n params: ILiquidAnimationParams,\n preset: LiquidAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'wave':\n return Appear_Wave;\n case 'grow':\n return Appear_Group_Grow(params);\n case 'waveGrow':\n return Appear_Group_WaveGrow(params);\n default:\n return Appear_Wave;\n }\n}\n\nexport const registerLiquidAnimation = () => {\n Factory.registerAnimation('liquid', (params: ILiquidAnimationParams, preset: LiquidAppearPreset) => {\n return {\n appear: liquidPresetAnimation(params, preset),\n enter: liquidPresetAnimation(params, preset),\n exit: liquidPresetAnimation(params, preset)\n };\n });\n\n Factory.registerAnimation('liquidGroup', (params: ILiquidAnimationParams, preset: LiquidAppearPreset) => {\n return {\n appear: liquidGroupPresetAnimation(params, preset),\n enter: liquidGroupPresetAnimation(params, preset),\n exit: liquidGroupPresetAnimation(params, preset)\n };\n });\n};\n","import type { IPointLike } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { WaveEncoderSpec } from '../types';\nimport { registerAreaGraphic, registerGlyphGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport const registerWaveGlyph = () => {\n Factory.registerGlyph('wave', {\n wave0: 'area',\n wave1: 'area',\n wave2: 'area'\n })\n .registerChannelEncoder('wave', (channel, encodeValue, encodeValues, datum, element) => {\n const originPoints: IPointLike[] = new Array(21).fill(0).map((v, index) => {\n const waveHeight = index % 2 === 0 ? 20 : 0;\n return { x: -500 + 50 * index, y: encodeValues.y + waveHeight, y1: encodeValues.y + encodeValues.height };\n });\n const points0 = originPoints.map(point => {\n return { x: point.x + encodeValue * 100, y: point.y, y1: point.y1 };\n });\n const points1 = originPoints.map(point => {\n return { x: point.x + encodeValue * 200 - 40, y: point.y, y1: point.y1 };\n });\n const points2 = originPoints.map(point => {\n return { x: point.x + encodeValue * 300 - 20, y: point.y, y1: point.y1 };\n });\n return {\n wave0: { points: points0, x: 0, y: 0 },\n wave1: { points: points1, x: 0, y: 0 },\n wave2: { points: points2, x: 0, y: 0 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n wave0: { curveType: 'monotoneX', fillOpacity: 1 },\n wave1: { curveType: 'monotoneX', fillOpacity: 0.66 },\n wave2: { curveType: 'monotoneX', fillOpacity: 0.33 }\n };\n });\n registerGlyphMark();\n registerGlyphGraphic();\n registerAreaGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { registerWaveGlyph } from '@visactor/vgrammar-core';\nimport type { ILiquidMarkSpec } from '../typings';\nimport type { IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseMark } from './base';\nimport type { ILiquidMark } from '../series/liquid/liquid';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nconst WAVE_GLYPH_TYPE = 'wave';\nexport class LiquidMark extends BaseMark implements ILiquidMark {\n static readonly type = MarkTypeEnum.liquid;\n readonly type = LiquidMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n wave: 0\n };\n return defaultStyle;\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view.glyph(WAVE_GLYPH_TYPE, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerLiquidMark = () => {\n Factory.registerMark(LiquidMark.type, LiquidMark);\n registerWaveGlyph();\n};\n","import type { LiquidShapeType } from './interface';\n\nexport const getShapes = (shapesType: LiquidShapeType, size: number) => {\n if (shapesType === 'drop') {\n return pin(0, 0, size);\n }\n return shapesType;\n};\n\n/* Adapted from liquid shapes by ai-qing-hai and hustcc\n * https://github.com/antvis/G2\n * Licensed under the MIT\n\n * url: https://github.com/antvis/G2/blob/v5/src/shape/liquid/shapes.ts\n * License: https://github.com/antvis/G2/blob/v5/LICENSE\n * @license\n */\nfunction pin(x: number, y: number, radius: number) {\n const w = (radius * 4) / 3;\n const h = Math.max(w, radius * 2);\n const r = w / 2;\n\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\n // The start point of the path.\n const x0 = cx - dx;\n const y0 = cy + dy;\n\n // Control point.\n const cpX = x;\n const cpY = cy + r / Math.sin(theta);\n\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}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum } from '../../typings';\nimport type { LiquidSeries } from './liquid';\n\nexport class LiquidSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n markTooltipKeyCallback = (datum: any) => {\n return (this.series as LiquidSeries).getValueField();\n };\n\n markTooltipValueCallback = (datum: any) => {\n const valueField = (this.series as LiquidSeries).getValueField();\n return datum[valueField];\n };\n\n shapeStrokeCallback = (datum: Datum) => {\n return this.series.getMarkInName('liquid').getAttribute('fill', datum) as any;\n };\n}\n","import type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid, max } from '@visactor/vutils';\nimport type { Datum, ILiquidMarkSpec, IPoint } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { ILiquidPadding, ILiquidSeriesSpec, LiquidAppearPreset, LiquidShapeType } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLiquidAnimation } from './animation';\nimport { LiquidSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IGroupMark, IMark, IMarkRaw } from '../../mark/interface';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerLiquidMark } from '../../mark/liquid';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { BaseSeries } from '../base';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerGroupMark } from '../../mark/group';\nimport { getShapes } from './util';\nimport { createRect, createSymbol } from '@visactor/vrender-core';\nimport { labelSmartInvert } from '@visactor/vrender-components';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\nimport { LiquidSeriesTooltipHelper } from './tooltip-helper';\n\nexport type ILiquidMark = IMarkRaw;\nexport class LiquidSeries extends BaseSeries {\n static readonly type: string = SeriesTypeEnum.liquid;\n type = SeriesTypeEnum.liquid;\n\n static readonly mark: SeriesMarkMap = LiquidSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n private _liquidGroupMark?: IGroupMark;\n private _liquidMark?: ILiquidMark;\n private _liquidBackgroundMark?: IGroupMark | null = null;\n private _liquidOutlineMark?: IGroupMark | null = null;\n private _paddingSpec?: ILiquidPadding;\n private _marginSpec?: ILiquidPadding;\n\n private _heightRatio?: number;\n\n private _reverse?: boolean;\n private _maskShape?: LiquidShapeType;\n\n protected _valueField?: string;\n setValueField(field: string) {\n if (isValid(field)) {\n this._valueField = field;\n }\n }\n getValueField() {\n return this._valueField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._marginSpec = normalizeLayoutPaddingSpec(this._spec.outlineMargin) as ILiquidPadding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.outlinePadding) as ILiquidPadding;\n this.setValueField(this._spec.valueField);\n this._reverse = this._spec.reverse ?? false;\n this._maskShape = this._spec.maskShape ?? 'circle';\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._heightRatio = max(...this._data.getLatestData().map((d: Datum) => d[this._valueField]));\n }\n\n initMark(): void {\n this._initLiquidOutlineMark();\n this._initLiquidBackgroundMark();\n this._initLiquidMark();\n }\n\n initMarkStyle(): void {\n this._initLiquidOutlineMarkStyle();\n this._initLiquidBackgroundMarkStyle();\n this._initLiquidMarkStyle();\n }\n\n private _initLiquidOutlineMark() {\n this._liquidOutlineMark = this._createMark(LiquidSeries.mark.liquidOutline, {\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._liquidOutlineMark;\n }\n\n private _initLiquidBackgroundMark() {\n this._liquidBackgroundMark = this._createMark(LiquidSeries.mark.liquidBackground, {\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._liquidBackgroundMark;\n }\n\n private _initLiquidMark() {\n this._liquidGroupMark = this._createMark(LiquidSeries.mark.liquidGroup, {\n parent: this._liquidBackgroundMark,\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n this._liquidMark = this._createMark(LiquidSeries.mark.liquid, {\n parent: this._liquidGroupMark,\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as ILiquidMark;\n return this._liquidMark;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getLiquidBackPosAndSize = this._getLiquidBackPosAndSize;\n this._markAttributeContext.getLiquidPosY = this._getLiquidPosY;\n this._markAttributeContext.getLiquidHeight = this._getLiquidHeight;\n }\n\n private _getLiquidPosY = () => {\n let liquidY = 0;\n const { height: liquidBackHeight, startY } = this._getLiquidBackPosAndSize();\n if (this._reverse) {\n liquidY = liquidBackHeight * this._heightRatio;\n } else {\n liquidY = liquidBackHeight * (1 - this._heightRatio);\n }\n return liquidY + startY;\n };\n\n private _getLiquidHeight = () => {\n const { height: liquidBackHeight } = this._getLiquidBackPosAndSize();\n return liquidBackHeight * this._heightRatio;\n };\n\n private _getLiquidBackPosAndSize = (isOutline: boolean = false) => {\n let {\n top: marginTop = 0,\n bottom: marginBottom = 0,\n // eslint-disable-next-line prefer-const\n left: marginLeft = 0,\n // eslint-disable-next-line prefer-const\n right: marginRight = 0\n } = this._marginSpec;\n let {\n top: paddingTop = 0,\n bottom: paddingBottom = 0,\n // eslint-disable-next-line prefer-const\n left: paddingLeft = 0,\n // eslint-disable-next-line prefer-const\n right: paddingRight = 0\n } = isOutline ? {} : this._paddingSpec;\n\n // 纠偏:对于正三角形而言, 上下留取相同的padidng/margin, 视觉上会看到下面留取的空白大于上面\n // 正确的做法是保持正三角形在60度方向上空白一致,换算到bottom就是/Math.sqrt(3), 换算到top就是 value/Math.sqrt(3)*2\n if (this._maskShape === 'triangle') {\n marginBottom = marginBottom / Math.sqrt(3);\n marginTop = (marginTop / Math.sqrt(3)) * 2;\n paddingBottom = paddingBottom / Math.sqrt(3);\n paddingTop = (paddingTop / Math.sqrt(3)) * 2;\n }\n\n const { width: regionWidth, height: regionHeight } = this._region?.getLayoutRect() ?? { width: 0, height: 0 };\n\n const deltaX = (marginLeft + paddingLeft - (marginRight + paddingRight)) / 2;\n const deltaY = (marginTop + paddingTop - (marginBottom + paddingBottom)) / 2;\n const x = regionWidth / 2 + deltaX;\n const y = regionHeight / 2 + deltaY;\n\n // 用于rect mark style\n let width = regionWidth - (marginLeft + marginRight + paddingLeft + paddingRight);\n let height = regionHeight - (marginTop + marginBottom + paddingTop + paddingBottom);\n // console.log('regionWidth', regionWidth, regionHeight)\n\n // 用于symbol mark style\n const size = Math.min(width, height);\n if (this._maskShape !== 'rect') {\n width = size;\n height = size;\n }\n\n return {\n x,\n y,\n size,\n width,\n height,\n startX: x - width / 2,\n startY: y - height / 2,\n endX: x + width / 2,\n endY: y + height / 2\n };\n };\n\n private _getLiquidBackPath = (isOutline: boolean = false) => {\n let symbolPath;\n if (this._maskShape === 'rect') {\n const { x, y, width, height } = this._getLiquidBackPosAndSize(isOutline);\n symbolPath = createRect({\n x: x - width / 2,\n y: y - height / 2,\n width,\n height,\n fill: true\n });\n } else {\n const { x, y, size } = this._getLiquidBackPosAndSize(isOutline);\n // console.log('size', size)\n symbolPath = createSymbol({\n x,\n y,\n size,\n symbolType: getShapes(this._spec.maskShape ?? 'circle', size),\n fill: true\n });\n }\n return [symbolPath];\n };\n\n private _initLiquidOutlineMarkStyle() {\n const liquidOutlineMark = this._liquidOutlineMark;\n liquidOutlineMark.created();\n this.setMarkStyle(\n liquidOutlineMark,\n {\n stroke: this.getColorAttribute(),\n width: () => this._region.getLayoutRect().width,\n height: () => this._region.getLayoutRect().height,\n path: () => this._getLiquidBackPath(true)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._liquidOutlineMark.setMarkConfig({ interactive: false, zIndex: this.layoutZIndex });\n }\n\n private _initLiquidBackgroundMarkStyle() {\n const liquidBackgroundMark = this._liquidBackgroundMark;\n liquidBackgroundMark.created();\n // symbol mark x, y 指定center\n // rect mark x,y 指定左上角\n this.setMarkStyle(\n liquidBackgroundMark,\n {\n width: () => this._region.getLayoutRect().width,\n height: () => this._region.getLayoutRect().height,\n path: () => this._getLiquidBackPath()\n },\n 'normal',\n AttributeLevel.Series\n );\n this._liquidBackgroundMark.setMarkConfig({ interactive: false, zIndex: this.layoutZIndex, clip: true });\n }\n\n private _initLiquidMarkStyle() {\n const liquidMark = this._liquidMark;\n const liquidGroupMark = this._liquidGroupMark;\n if (liquidGroupMark) {\n this.setMarkStyle(liquidGroupMark, {\n x: () => {\n return this._region.getLayoutStartPoint().x + this._region.getLayoutRect().width / 2;\n },\n angle: this._reverse ? -Math.PI : 0,\n y: 0,\n dy: this._getLiquidPosY\n });\n }\n if (liquidMark) {\n // liquid mark x, y 指定左上角\n this.setMarkStyle(\n liquidMark,\n {\n // wave图元设置y后, 3个子area图元的point发生变化, 但vrender的渐变区域没有变化, 待vrender修复\n // 目前先采用下列方法配置:\n // 1. y强制指定为0, 保证图元不超出vrender的渐变区域\n // 2. 在外面包一层group图元, 使用group dy做偏移, 保证vrender渐变区域随图元位置变化而更新\n y: 0,\n dy: 0,\n height: this._getLiquidHeight,\n fill: this.getColorAttribute(),\n wave: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LiquidSeriesTooltipHelper(this);\n this._liquidMark && this._tooltipHelper.activeTriggerSet.mark.add(this._liquidMark);\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._liquidMark ? [this._liquidMark] : []);\n }\n\n initAnimation() {\n const animationParams = {\n height: {\n from: 0,\n to: () => {\n return this._getLiquidHeight();\n }\n },\n dy: {\n from: () => {\n let liquidY = 0;\n const { height: liquidBackHeight, startY } = this._getLiquidBackPosAndSize();\n if (this._reverse) {\n liquidY = 0;\n } else {\n liquidY = liquidBackHeight;\n }\n return liquidY + startY;\n }\n }\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._liquidMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('liquid')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.liquid, this._spec, this._markAttributeContext)\n )\n );\n this._liquidGroupMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('liquidGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.liquidGroup, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initEvent(): void {\n super.initEvent();\n if (!this._spec.indicatorSmartInvert || !this._option.getChart().getComponentsByKey('indicator')) {\n return;\n }\n this.event.on(ChartEvent.renderFinished, () => {\n this._option\n .getChart()\n .getComponentsByKey('indicator')\n .forEach((indicatorComponent: any) => {\n // wave item比较特殊, 由wave1、wave2、wave3在x方向上偏移叠加而成\n // 由于在水波图中只需要判断y方向上是否重叠, 所以此处取wave1做y方向上对比\n const grammarMark = this._liquidMark.getProduct();\n const waveItem = (grammarMark.elements[0] as any).glyphGraphicItems.wave1;\n let { y1: waveY1, y2: waveY2 } = waveItem.globalAABBBounds;\n waveY1 += this._region.getLayoutStartPoint().y;\n waveY2 += this._region.getLayoutStartPoint().y;\n indicatorComponent\n ?.getIndicatorComponent()\n ?.getChildren()[0]\n ?.getChildren()\n .forEach((text: any) => {\n const { y1: textY1, y2: textY2 } = text.globalAABBBounds;\n if (waveY1 < textY1 && waveY2 > textY2) {\n const foregroundColor = text.attribute.fill;\n const backgroundColor = waveItem.attribute.fill;\n const invertColor = labelSmartInvert(foregroundColor, backgroundColor);\n text.setAttribute('fill', invertColor);\n }\n });\n });\n });\n }\n\n dataToPosition(data: Datum): IPoint {\n return null;\n }\n dataToPositionX(data: Datum): number {\n return null;\n }\n dataToPositionY(data: Datum): number {\n return null;\n }\n valueToPosition(value1: any, value2?: any): IPoint {\n return null;\n }\n\n getStatisticFields(): any[] {\n return [];\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n\n getActiveMarks(): IMark[] {\n return [this._liquidMark];\n }\n}\n\nexport const registerLiquidSeries = () => {\n registerLiquidMark();\n registerGroupMark();\n registerLiquidAnimation();\n Factory.registerSeries(LiquidSeries.type, LiquidSeries);\n};\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ILiquidChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BaseChart } from '../base';\nimport { LiquidChartSpecTransformer } from './liquid-transformer';\nimport { registerLiquidSeries } from '../../series/liquid/liquid';\n\nexport class LiquidChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.liquid;\n static readonly seriesType: string = SeriesTypeEnum.liquid;\n static readonly transformerConstructor = LiquidChartSpecTransformer;\n readonly transformerConstructor = LiquidChartSpecTransformer;\n readonly type: string = ChartTypeEnum.liquid;\n readonly seriesType: string = SeriesTypeEnum.liquid;\n}\n\nexport const registerLiquidChart = () => {\n registerLiquidSeries();\n Factory.registerChart(LiquidChart.type, LiquidChart);\n};\n","import type { ICartesianAxisSpec } from '../../component/axis/cartesian/interface/spec';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IMosaicChartSpec } from './interface';\n\nexport class MosaicChartSpecTransformer<\n T extends IMosaicChartSpec = IMosaicChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barBackground',\n 'barMinHeight',\n 'stackCornerRadius',\n 'bar'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'bottom',\n type: 'linear',\n label: {\n visible: false\n }\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'left',\n type: 'linear'\n } as ICartesianAxisSpec;\n }\n}\n","import { BarSeries } from '../bar/bar';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRectMark } from '../../mark/rect';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { IMosaicSeriesSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { registerCartesianLinearAxis } from '../../component/axis/cartesian';\nimport { Direction } from '../../typings/space';\nimport {\n MOSAIC_CAT_END_PERCENT,\n MOSAIC_CAT_START_PERCENT,\n MOSAIC_VALUE_END_PERCENT,\n MOSAIC_VALUE_START_PERCENT\n} from '../../constant/data';\nimport { isNil } from '@visactor/vutils';\n\nexport class MosaicSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.mosaic;\n type = SeriesTypeEnum.mosaic;\n\n protected declare _spec: T;\n\n static readonly transformerConstructor = BarSeriesSpecTransformer as any;\n readonly transformerConstructor = BarSeriesSpecTransformer as any;\n\n getStack() {\n return true;\n }\n\n getPercent() {\n return !!this.getSeriesField();\n }\n getGroupFields() {\n return this.direction === 'vertical' ? this._specXField : this._specYField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const isPercent = this.getPercent();\n\n if (this.direction === Direction.horizontal) {\n if (isPercent) {\n this.setFieldX(MOSAIC_VALUE_END_PERCENT);\n this.setFieldX2(MOSAIC_VALUE_START_PERCENT);\n }\n\n this.setFieldY(MOSAIC_CAT_END_PERCENT);\n this.setFieldY2(MOSAIC_CAT_START_PERCENT);\n } else {\n if (isPercent) {\n this.setFieldY(MOSAIC_VALUE_END_PERCENT);\n this.setFieldY2(MOSAIC_VALUE_START_PERCENT);\n }\n\n this.setFieldX(MOSAIC_CAT_END_PERCENT);\n this.setFieldX2(MOSAIC_CAT_START_PERCENT);\n }\n }\n\n parseLabelStyle(labelStyle: any, labelSpec: any) {\n if (labelSpec?.filterByGroup && isNil(labelStyle.dataFilter)) {\n const allGroupFields = this.getGroupFields();\n const { field, type: filterType = 'max', filter } = labelSpec.filterByGroup;\n delete labelStyle.filterField;\n const fieldIndex = allGroupFields.indexOf(field);\n\n if (fieldIndex < 0) {\n return;\n }\n const isCatField = !!(fieldIndex % 2);\n const valueField = isCatField\n ? filterType === 'min'\n ? this.direction === Direction.horizontal\n ? this._fieldY2\n : this._fieldX2\n : this.direction === Direction.horizontal\n ? this._fieldY\n : this._fieldX\n : filterType === 'min'\n ? this.direction === Direction.horizontal\n ? this._fieldX2\n : this._fieldY2\n : this.direction === Direction.horizontal\n ? this._fieldX\n : this._fieldY;\n const filterFunc =\n filterType === 'min'\n ? (a: any, b: any) => {\n return a.data?.[valueField as string] < b.data?.[valueField as string];\n }\n : (a: any, b: any) => {\n return a.data?.[valueField as string] > b.data?.[valueField as string];\n };\n\n labelStyle.dataFilter = (data: any) => {\n const filteredData = {};\n\n data.forEach((d: any) => {\n const datum = d.data;\n const fieldValue = datum?.[field];\n\n if (isNil(fieldValue) || (filter && !filter(d))) {\n return;\n }\n\n if (!filteredData[fieldValue] || filterFunc(d, filteredData[fieldValue])) {\n filteredData[fieldValue] = d;\n }\n });\n return data.filter((d: any) => {\n const fieldValue = d.data?.[field];\n return filteredData[fieldValue] && filteredData[fieldValue] === d;\n });\n };\n }\n\n return labelStyle;\n }\n}\n\nexport const registerMosaicSeries = () => {\n registerRectMark();\n registerTextMark();\n registerFadeInOutAnimation();\n registerCartesianLinearAxis();\n Factory.registerSeries(MosaicSeries.type, MosaicSeries);\n};\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IMosaicChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { MosaicChartSpecTransformer } from './mosaic-transformer';\nimport { BaseChart } from '../base';\nimport { registerMosaicSeries } from '../../series/mosaic/mosaic';\nimport { Stack } from '../stack';\nimport type { IRegion } from '../../region';\nimport type { IStackCacheNode, IStackCacheRoot } from '../../util/data';\nimport { stackMosaic, stackMosaicTotal } from '../../util/data';\nimport { stackSplit } from '../../data/transforms/stack-split';\nimport { registerDataSetInstanceTransform } from '../../data/register';\n\nexport class MosaicChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.mosaic;\n static readonly seriesType: string = SeriesTypeEnum.mosaic;\n static readonly transformerConstructor = MosaicChartSpecTransformer;\n readonly transformerConstructor = MosaicChartSpecTransformer;\n readonly type: string = ChartTypeEnum.mosaic;\n readonly seriesType: string = SeriesTypeEnum.mosaic;\n protected _stack: Stack;\n\n protected _beforeInit() {\n if (this._dataSet) {\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n }\n }\n\n protected _initStack() {\n this._stack = new Stack(this, {\n afterStackRegion: this.handleAfterStackRegion\n });\n this._stack.init();\n }\n\n handleAfterStackRegion = (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => {\n region.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n\n if (stackData && stackValueField) {\n stackMosaicTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n stackMosaic(s, stackValueGroup[stackValue] as IStackCacheNode);\n }\n });\n };\n}\n\nexport const registerMosaicChart = () => {\n registerMosaicSeries();\n Factory.registerChart(MosaicChart.type, MosaicChart);\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport type { IPictogramSeriesSpec } from '../../series/pictogram/interface';\nimport type { RegionSpec, ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IPictogramChartSpec } from './interface';\n\nexport class PictogramChartSpecTransformer<\n T extends IPictogramChartSpec = IPictogramChartSpec\n> extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string) {\n return type === SeriesTypeEnum.pictogram;\n }\n\n protected _getDefaultSeriesSpec(spec: IPictogramChartSpec): IPictogramSeriesSpec {\n return super._getDefaultSeriesSpec(spec, [\n 'type',\n 'nameField',\n 'valueField',\n 'svg',\n 'pictogram',\n 'defaultFillColor'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n spec.region.forEach((r: RegionSpec) => {\n r.coordinate = 'geo';\n });\n\n super.transformSeriesSpec(spec);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { svgSourceMap } from './svg-source';\nimport type { SVGParserResult } from '@visactor/vdataset';\n\nexport class PictogramSeriesSpecTransformer extends BaseSeriesSpecTransformer {\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = super._getDefaultSpecFromChart(chartSpec) ?? {};\n const svg = chartSpec.svg;\n const elements = svgSourceMap.get(svg)?.latestData?.elements as SVGParserResult['elements'];\n if (elements && elements.length) {\n const names = elements.map(e => e.name).filter(n => isValid(n));\n names.forEach(name => {\n if (chartSpec[name]) {\n spec[name] = chartSpec[name];\n }\n });\n }\n return spec;\n }\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { PictogramSeries } from './pictogram';\nimport { TooltipHandlerParams } from '../../component';\nimport { Datum } from '../../typings';\n\nexport class PictogramSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n const series = this.series as PictogramSeries;\n return this._getDimensionData(datum) ?? series.getDatumName(datum);\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n const { measureFields } = this._seriesCacheInfo;\n if (measureFields[0] && datum.data) {\n return datum.data[measureFields[0]];\n }\n };\n\n markTooltipKeyCallback = (datum: Datum) => {\n return datum.data?.[this.series.getDimensionField()[0]];\n };\n}\n","import { isValid, merge } from '@visactor/vutils';\nimport type { DataView, SVGParserResult } from '@visactor/vdataset';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { measureText } from '../../util';\n\nfunction isValidStrokeOrFill(attr: any) {\n return isValid(attr) && attr !== 'none' && !attr.includes?.('url');\n}\n\nconst getLineWidth = (attributes: any) => {\n const strokeWidth = parseFloat(attributes['strokeWidth']);\n if (!isNaN(strokeWidth)) return strokeWidth;\n\n const stroke = attributes['stroke'];\n return stroke && isValidStrokeOrFill(stroke) ? 1 : 0;\n};\n\nconst getFill = (attributes: any, defaultFill?: string) => {\n const fill = attributes['fill'] ?? defaultFill;\n return fill && isValidStrokeOrFill(fill) ? fill : undefined;\n};\n\nconst getStroke = (attributes: any, defaultStroke?: string) => {\n const stroke = attributes['stroke'] ?? defaultStroke;\n return stroke && isValidStrokeOrFill(stroke) ? stroke : false;\n};\n\nconst commonAttributes = (attributes: Record) => {\n return {\n ...attributes,\n x: parseFloat(attributes.x) || undefined,\n y: parseFloat(attributes.y) || undefined,\n fillStrokeOrder: false,\n fill: getFill(attributes),\n lineWidth: getLineWidth(attributes),\n stroke: getStroke(attributes)\n };\n};\n\nexport const graphicAttributeTransform = {\n group: (attributes: Record) => {\n const common = commonAttributes(attributes);\n return {\n ...common,\n visibleAll: common['visible'] !== false\n };\n },\n rule: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n x: parseFloat(attributes.x1),\n y: parseFloat(attributes.y1),\n x1: parseFloat(attributes.x2),\n y1: parseFloat(attributes.y2)\n };\n },\n rect: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n // rect 在 chrome 下有默认黑色填充,这里保持效果一致\n fill: getFill(attributes, '#000'),\n width: parseFloat(attributes.width),\n height: parseFloat(attributes.height)\n };\n },\n polygon: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n // rect 在 chrome 下有默认黑色填充,这里保持效果一致\n fill: getFill(attributes, '#000'),\n points: attributes.points\n .trim()\n .split(/\\s+/)\n .map((pair: string) => {\n const [x, y] = pair.split(',').map(Number);\n return { x, y };\n })\n };\n },\n line: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n points: attributes.points\n .trim()\n .split(/\\s+/)\n .map((pair: string) => {\n const [x, y] = pair.split(',').map(Number);\n return { x, y };\n })\n };\n },\n path: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n path: attributes.d,\n fillStrokeOrder: false\n };\n },\n arc: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n outerRadius: attributes.r ?? attributes.ry,\n x: parseFloat(attributes.cx),\n y: parseFloat(attributes.cy),\n startAngle: 0,\n endAngle: Math.PI * 2,\n scaleX: parseFloat(attributes.rx) / parseFloat(attributes.ry) || 1,\n fill: getFill(attributes, '#000')\n };\n },\n text: (attributes: Record, value: string) => {\n return {\n ...commonAttributes(attributes),\n text: value,\n textAlign: attributes.textAlign ?? 'left',\n textBaseLine: attributes.textAnchor ?? 'middle',\n anchor: [0, 0],\n fill: getFill(attributes, '#000')\n };\n }\n};\n\nexport const pictogram = (data: DataView[]) => {\n if (!data || !data[0]) {\n return {};\n }\n const { elements } = data[0].latestData as SVGParserResult;\n\n // 处理最终属性\n if (elements && elements.length) {\n // TODO: type\n // elements.forEach((el: SVGParsedElementExtend, index: number) => {\n elements.forEach((el: any, index: number) => {\n el[DEFAULT_DATA_INDEX] = index;\n el._uniqueId = `${el.id}-${index}`;\n el.data = undefined;\n\n const { graphicType: type, transform } = el;\n\n let finalAttributes = {\n visible: el.attributes.visibility !== 'hidden' && el.attributes.visibility !== 'collapse'\n };\n\n if (el.graphicType === 'text') {\n merge(finalAttributes, el._inheritStyle, el.parent?._textGroupStyle, el.attributes);\n } else if (el.graphicType !== 'group') {\n merge(finalAttributes, el._inheritStyle, el.attributes);\n }\n\n if (graphicAttributeTransform[type]) {\n el._finalAttributes = graphicAttributeTransform[type](finalAttributes, el.value);\n } else {\n el._finalAttributes = finalAttributes;\n }\n\n if (transform) {\n el._finalAttributes.postMatrix = { ...transform };\n }\n });\n\n // 处理文字布局\n const texts = elements.filter(el => el.tagName === 'text');\n for (let i = 0; i < texts.length; i++) {\n const textId = texts[i]._uniqueId;\n const children = elements.filter(el => {\n let result = false;\n let parent = el.parent;\n while (parent) {\n if (parent._uniqueId === textId) {\n result = true;\n break;\n }\n parent = parent.parent;\n }\n return result;\n });\n\n if (children && children.length) {\n let startX = texts[i]._textGroupStyle?.x ?? 0;\n let curX = startX;\n\n for (let j = 0; j < children.length; j++) {\n const currentChild = children[j];\n if (currentChild.graphicType === 'group') {\n curX = startX;\n } else if (currentChild.value) {\n if (currentChild.parent._textGroupStyle.x === undefined) {\n const lastText = children\n .slice(0, j)\n .reverse()\n .find(c => c.graphicType === 'text' && c.value);\n if (lastText) {\n const width = measureText(lastText.value, lastText._finalAttributes).width;\n curX += width;\n }\n currentChild._finalAttributes.x = curX;\n }\n }\n }\n }\n }\n }\n\n return elements;\n};\n","import { DataView } from '@visactor/vdataset';\nimport type { SVGParsedElement, SVGParserResult } from '@visactor/vdataset';\nimport type { PanEventParam, ZoomEventParam } from '../../core';\nimport { Factory } from '../../core';\nimport { GeoSeries } from '../geo/geo';\nimport type { ISeriesSeriesInfo, SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface';\nimport type { IPictogramSeriesSpec } from './interface';\nimport { PictogramSeriesMark } from './constant';\nimport { getSVGSource, registerSVGSource, svgSourceMap, unregisterSVGSource } from './svg-source';\nimport { SeriesData } from '../base/series-data';\nimport { lookup } from '../../data/transforms/lookup';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { GroupMark } from '../../mark';\nimport { shouldMarkDoMorph } from '../../animation/utils';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { PictogramSeriesSpecTransformer } from './pictogram-transformer';\nimport type { IMatrix } from '@visactor/vutils';\nimport { Bounds, Matrix, isValid, merge } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport { createRect } from '@visactor/vrender-core';\nimport type { Group, IGraphic } from '@visactor/vrender-core';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark';\nimport type { EventType } from '@visactor/vgrammar-core';\nimport { registerElementHighlightByGraphicName, registerElementSelectByGraphicName } from '@visactor/vgrammar-core';\nimport type { IGroupMark, IMark, ITextMark } from '../../mark/interface';\nimport { PictogramSeriesTooltipHelper } from './tooltip-helper';\nimport { graphicAttributeTransform, pictogram } from '../../data/transforms/pictogram';\nimport type { IPoint } from '../../typings/coordinate';\n\nexport interface SVGParsedElementExtend extends SVGParsedElement {\n _finalAttributes: Record;\n _uniqueId: string; // 用于处理 svg 中 id 重复的情况\n}\n\nexport class PictogramSeries extends GeoSeries {\n static readonly type: string = SeriesTypeEnum.pictogram;\n type = SeriesTypeEnum.pictogram;\n static readonly mark: SeriesMarkMap = PictogramSeriesMark;\n static readonly transformerConstructor = PictogramSeriesSpecTransformer;\n\n svg!: string;\n\n protected _pictogramMark: GroupMark;\n protected _parsedSvgResult: SVGParserResult;\n private _labelMark: ITextMark;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.svg = this._spec.svg;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n\n if (!this.svg) {\n this._option?.onError(`svg source is not specified !`);\n }\n this._parsedSvgResult = getSVGSource(this.svg)?.latestData;\n\n if (!this._parsedSvgResult) {\n this._option?.onError(`'${this.svg}' is not registered !`);\n }\n }\n\n getDatumCenter(datum: SVGParsedElementExtend): [number, number] {\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: SVGParsedElementExtend): string {\n return datum.name || datum._nameFromParent;\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(\n m => m.name && !m.name.includes('seriesGroup') && !m.name.includes('root') && m !== this._pictogramMark\n );\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getTransformMatrix = this.getRootMatrix.bind(this);\n this._markAttributeContext.coordToPosition = this.coordToPosition.bind(this);\n this._markAttributeContext.dataToPosition = this.dataToPosition.bind(this);\n }\n\n protected _defaultHoverConfig(selector: string[], finalHoverSpec: IHoverSpec) {\n return {\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n type: 'element-highlight-by-graphic-name',\n // trigger: finalHoverSpec.trigger as EventType,\n trigger: finalHoverSpec.trigger as EventType,\n triggerOff: 'pointerout' as EventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(selector: string[], finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty', 'self']\n : ['empty', finalSelectSpec.trigger];\n return {\n type: 'element-select-by-graphic-name',\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n trigger: finalSelectSpec.trigger as EventType,\n triggerOff: triggerOff as EventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n initMark() {\n this._pictogramMark = this._createMark(\n PictogramSeries.mark.pictogram,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId()\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n ) as GroupMark;\n\n if (!this._pictogramMark) {\n return;\n }\n\n this._pictogramMark.setUserId(PictogramSeries.mark.pictogram.name);\n for (const element of this._mapViewData.getDataView().latestData as SVGParserResult['elements']) {\n const { graphicType: type, name, parent, id, _nameFromParent, _uniqueId } = element;\n\n const mark = this._createMark(\n { type, name: name ?? _nameFromParent },\n {\n groupKey: _uniqueId,\n isSeriesMark: false,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId(),\n parent: (this._pictogramMark.getMarkInUserId(parent?._uniqueId) as IGroupMark) ?? this._pictogramMark\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n );\n\n if (mark) {\n mark.setUserId(_uniqueId); // id 必须唯一,但无法控制 svg 中元素有重复 id, 这里做一个保护\n if (mark.type !== 'group') {\n mark.setMarkConfig({ graphicName: mark.name });\n }\n mark.setTransform([\n {\n type: 'filter',\n callback: (datum: SVGParsedElementExtend) => {\n return datum._uniqueId === _uniqueId;\n }\n }\n ]);\n }\n }\n this._initLabelMark();\n }\n\n private _initLabelMark() {\n // @ts-ignore\n if (this._spec.label.visible !== true) {\n return;\n }\n\n const labelMark = this._createMark(PictogramSeries.mark.label, {\n isSeriesMark: false,\n parent: this._pictogramMark,\n groupKey: '_uniqueId',\n skipBeforeLayouted: true,\n depend: this.getMarksWithoutRoot()\n }) as ITextMark;\n\n if (labelMark) {\n this._labelMark = labelMark;\n this._labelMark.setDataView(this._mapViewData.getDataView());\n }\n }\n\n initLabelMarkStyle() {\n if (!this._labelMark) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: d => !!this._validElement(d as SVGParsedElementExtend),\n x: d => this.dataToPosition(d, true)?.x,\n y: d => this.dataToPosition(d, true)?.y,\n text: d => d[this.nameField],\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initMarkStyle() {\n const { root, viewBoxRect } = this._parsedSvgResult;\n const elements = this._mapViewData.getDataView().latestData as SVGParserResult['elements'];\n if (root) {\n this.setMarkStyle(\n this._pictogramMark,\n graphicAttributeTransform.group(root.attributes),\n 'normal',\n AttributeLevel.Built_In\n );\n if (root.transform) {\n this.setMarkStyle(\n this._pictogramMark,\n {\n postMatrix: () => root.transform\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n if (viewBoxRect) {\n // fill should be true or content will be invisible\n this._pictogramMark.setMarkConfig({\n clip: true,\n clipPath: [createRect({ ...viewBoxRect, fill: true }) as any]\n });\n }\n }\n for (const element of elements) {\n const { _uniqueId, _finalAttributes: attributes } = element as SVGParsedElementExtend;\n const mark = this._pictogramMark.getMarkInUserId(_uniqueId);\n const valid = this._validElement(element);\n if (mark) {\n // 描边粗细跟随缩放倍数\n this.setMarkStyle(mark, { keepStrokeScale: true }, 'normal', AttributeLevel.Built_In);\n if (valid) {\n this.initMarkStyleWithSpec(mark, merge({}, this._spec.pictogram, this._spec[mark.name]));\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Series);\n mark.setPostProcess('fill', (result, datum) => {\n return isValid(result) ? result : this._spec.defaultFillColor;\n });\n } else {\n // 对于没有设置 name 的元素,不支持响应事件、改变样式\n mark.setMarkConfig({ interactive: false });\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Built_In);\n }\n }\n }\n\n this.initLabelMarkStyle();\n }\n /** 在 svg 中使用 name attribute 标注了的图元*/\n protected _validElement(element: SVGParsedElement) {\n return element.name || element._nameFromParent;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new PictogramSeriesTooltipHelper(this);\n this.getMarksWithoutRoot().forEach(mark => {\n if (mark && mark.name) {\n this._tooltipHelper.activeTriggerSet.mark.add(mark);\n }\n });\n }\n\n dataToPosition(datum: Datum, global = false): IPoint {\n if (!datum) {\n return null;\n }\n const name = datum[this.nameField];\n if (!name) {\n return null;\n }\n\n const mark = this.getMarksWithoutRoot().filter(mark => mark.name === name);\n if (!mark || mark.length === 0) {\n return null;\n }\n let bounds = new Bounds();\n if (global) {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().getGroupGraphicItem().globalAABBBounds);\n });\n } else {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().getBounds());\n });\n }\n\n const point = { x: (bounds.x1 + bounds.x2) / 2, y: (bounds.y1 + bounds.y2) / 2 };\n\n if (global) {\n const { x, y } = this.getLayoutStartPoint();\n point.x -= x;\n point.y -= y;\n }\n return point;\n }\n\n coordToPosition(point: IPoint): IPoint | undefined {\n if (!point) {\n return null;\n }\n const { x, y } = point;\n const matrix = this.getRootMatrix();\n if (!matrix) {\n return null;\n }\n const position = {};\n matrix.getInverse().transformPoint({ x, y }, position as IPoint);\n return position as IPoint;\n }\n\n getRootMatrix() {\n return this.getPictogramRootGraphic()?.transMatrix as IMatrix;\n }\n\n getPictogramRootGraphic(): Group {\n return this._pictogramMark.getProduct()?.getGroupGraphicItem();\n }\n\n initData() {\n super.initData();\n const parsedSvg = svgSourceMap.get(this.svg);\n if (!parsedSvg) {\n this._option?.onError('no valid svg found!');\n }\n const svgData = new DataView(this._dataSet, { name: `pictogram_${this.id}_data` });\n registerDataSetInstanceTransform(this._dataSet, 'pictogram', pictogram);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n svgData\n .parse([parsedSvg], {\n type: 'dataview'\n })\n .transform({ type: 'pictogram' })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: 'name',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: '_nameFromParent',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', svgData.reRunAllTransform);\n this._mapViewData = new SeriesData(this._option, svgData);\n }\n\n mapViewDataUpdate() {\n this._mapViewData.updateData();\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._mapViewData?.getDataView().reRunAllTransform();\n }\n\n updateSVGSize() {\n const { width: regionWidth, height: regionHeight } = this.getLayoutRect();\n const regionCenterX = regionWidth / 2;\n const regionCenterY = regionHeight / 2;\n const root = this.getPictogramRootGraphic();\n if (root) {\n const bounds = root.AABBBounds;\n const { x1, x2, y1, y2 } = root.AABBBounds;\n const width = bounds.width();\n const height = bounds.height();\n\n const rootCenterX = (x1 + x2) / 2;\n const rootCenterY = (y1 + y2) / 2;\n\n const scaleX = regionWidth / width;\n const scaleY = regionHeight / height;\n const scale = Math.min(scaleX, scaleY);\n\n root.scale(scale, scale, { x: rootCenterX, y: rootCenterY });\n root.translate(regionCenterX - rootCenterX, regionCenterY - rootCenterY);\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n this._mapViewData.getDataView()?.target.addListener('change', this.mapViewDataUpdate.bind(this));\n // 必须在有 vrender mark 的时机后更新\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_LAYOUT_END, this.updateSVGSize.bind(this));\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.scale(scale, scale, scaleCenter);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.translate(delta[0], delta[1]);\n }\n }\n\n getMarkData(datum: Datum) {\n return datum.data ?? {};\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n data: {\n [field]: key\n }\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n}\n\nexport const registerPictogramSeries = () => {\n // 注册语法元素\n Factory.registerSeries(PictogramSeries.type, PictogramSeries);\n Factory.registerImplement('registerSVG', registerSVGSource);\n Factory.registerImplement('unregisterSVG', unregisterSVGSource);\n registerElementHighlightByGraphicName();\n registerElementSelectByGraphicName();\n};\n","import { BaseChart } from '../base/base-chart';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IPictogramChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { PictogramChartSpecTransformer } from './pictogram-transformer';\nimport { registerPictogramSeries } from '../../series/pictogram/pictogram';\n\nexport class PictogramChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.pictogram;\n static readonly seriesType: string = SeriesTypeEnum.pictogram;\n static readonly transformerConstructor = PictogramChartSpecTransformer;\n readonly transformerConstructor = PictogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pictogram;\n readonly seriesType: string = SeriesTypeEnum.pictogram;\n}\n\nexport const registerPictogramChart = () => {\n registerPictogramSeries();\n Factory.registerChart(PictogramChart.type, PictogramChart);\n};\n","import { registerLiquidChart, registerMosaicChart, registerVennChart, registerPictogramChart } from '@visactor/vchart';\nexport { registerLiquidChart, registerMosaicChart, registerVennChart, registerPictogramChart } from '@visactor/vchart';\n\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nexport class VChartCharacter extends CharacterChart {\n static type = CharacterType.VCHART;\n}\n\nexport const registerAllVChart = () => {\n registerVennChart();\n registerLiquidChart();\n registerMosaicChart();\n registerPictogramChart();\n};\n","import { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nfunction waterDrop(ctx: any, size: number, topX: number, topY: number) {\n ctx.beginPath();\n const centerX = topX;\n const centerY = topY - size / 2;\n ctx.moveTo(centerX, centerY);\n ctx.quadraticCurveTo(centerX + size / 2, centerY + size, centerX, centerY + size);\n ctx.quadraticCurveTo(centerX - size / 2, centerY + size, centerX, centerY);\n}\n\ninterface IWaveScatterChartGraphicAttribute extends IChartGraphicAttribute {\n waveDuration: number;\n waveRatio: number;\n waveColor: string;\n background: string;\n amplitude: number;\n frequency: number;\n categoryField: string;\n valueField: string;\n}\n\nexport class WaveScatterCharacter extends CharacterChart {\n static type = CharacterType.WAVE_SCATTER;\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'circlePacking',\n drill: true,\n layoutPadding: 5,\n circlePacking: {\n customShape: (data: any, attrs: any, path: any) => {\n waterDrop(path, attrs.outerRadius * 2, 0, 0);\n return path;\n },\n style: {\n // fill: 'linear-gradient(180deg, #0099ff11 100%, #0099ff33 0%)',\n // fillOpacity: (datum: any, _: any) => {\n // return datum.temperature / 40;\n // },\n // texture: 'wave',\n // textureColor: '#0099ff',\n // textureOptions: (datum: any) => {\n // return {\n // amplitude: 6,\n // frequency: 2,\n // percent: datum.temperature / 80,\n // }\n // },\n }\n }\n }\n };\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class ComponentConfigProcess extends ConfigProcessBase {}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport { CharacterBase } from '../character-base';\nimport type { IComponentCharacterConfig } from '../../interface/dsl/component';\nimport type { IComponentCharacterRuntime } from './interface/runtime';\nimport type { ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport { ComponentConfigProcess } from './component-config-process';\nimport type { ICharacterComponent } from './interface/character-component';\nimport type { IStoryEvent, ICharacterPickInfo } from '../../interface/event';\nimport { isArray } from '@visactor/vutils';\n\nexport abstract class CharacterComponent\n extends CharacterBase\n implements ICharacterComponent\n{\n visActorType: 'chart' | 'component' | 'table' | 'common' = 'component';\n protected declare _graphic: T;\n protected declare _config: IComponentCharacterConfig;\n\n protected _runtime: IComponentCharacterRuntime[] = [];\n\n constructor(config: IComponentCharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this.configProcess = new ComponentConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n tickTo(t: number): void {\n return;\n }\n\n getGraphicBySelector(selector: string | string[]) {\n if (isArray(selector)) {\n const graphics: Set = new Set();\n selector.forEach(s => {\n this._getGraphicBySelector(s).forEach(g => {\n graphics.add(g);\n });\n });\n return Array.from(graphics.values());\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const g = this._graphic;\n if (!selector) {\n return [g];\n }\n const selectorList = selector.split(' ');\n let graphics: IGraphic[] = [];\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n graphics.push(g);\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n graphics = graphics.filter(g => `#${g.name}` !== match && g.type !== match);\n } else {\n let g1: IGraphic[] = [];\n if (subSelector[0] === '#') {\n const name = subSelector.substring(1);\n g1 = g.getElementsByName(name) as IGraphic[];\n } else {\n g1 = g.getElementsByType(subSelector) as IGraphic[];\n }\n graphics = graphics.concat(g1);\n }\n });\n return graphics;\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n return {\n part: event.path[event.path.length - 1] === this._graphic.mainGraphic ? 'graphic' : 'text',\n graphicType: this._graphic.type\n };\n }\n\n protected _initGraphic(): void {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this.createAndAddGraphic(attribute);\n }\n\n protected abstract createAndAddGraphic(attribute: T1): void;\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n zIndex: this._config.zIndex ?? 0,\n visibleAll: true,\n x: 0,\n y: 0,\n textStyle: {}\n } as any;\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { merge } from '@visactor/vutils';\nimport type { GraphicType, IRichText } from '@visactor/vrender-core';\nimport { COMPONENT_NUMBER_TYPE } from './GroupComponent/component-group-graphic';\n\nexport class BaseComponentWithText extends AbstractComponent {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ITextComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseComponentWithText.defaultAttributes, attributes));\n this._skipRenderAttributes.push('visible', 'visibleAll');\n }\n\n protected render(): void {\n // text在group中进行布局,如果给定了宽高的话\n // 如果没有给定宽高的话,就按照文本的宽高进行布局,同时要加上padding\n const { textStyle, padding, width, height } = this.attribute as ITextComponentAttributes;\n\n const { textAlign, textBaseline } = textStyle;\n\n const richtextTextAlign = textAlign === 'start' ? 'left' : textAlign === 'end' ? 'right' : textAlign;\n const richtextBaseline = textBaseline === 'alphabetic' ? 'middle' : textBaseline;\n let textConfig = this.transformTextAttrsToRichTextConfig(textStyle, 'left');\n\n // 先设置一个初始richtext,用于计算bounds\n const richtext = this.createOrUpdateChild(\n 'text',\n {\n ...(textStyle as any),\n width: 0,\n height: 0,\n textAlign: 'left',\n textBaseline: 'top',\n verticalDirection: 'top',\n textConfig,\n zIndex: 9999 // 保持文字在最上层\n },\n 'richtext'\n ) as IRichText;\n\n // 测量宽高\n let boxWidth = width;\n let boxHeight = height;\n if (!isFinite(boxWidth)) {\n boxWidth = richtext.AABBBounds.width() + (padding?.left ?? 0) + (padding?.right ?? 0);\n }\n if (!isFinite(boxHeight)) {\n boxHeight = richtext.AABBBounds.height() + (padding?.top ?? 0) + (padding?.bottom ?? 0);\n }\n\n // 重新设置richtext的位置,align设置在textConfig中,baseline设置到verticalDirection\n textConfig = this.transformTextAttrsToRichTextConfig(textStyle, richtextTextAlign);\n richtext.setAttributes({\n textConfig,\n verticalDirection: richtextBaseline,\n width: boxWidth,\n height: boxHeight,\n x: padding.left,\n y: padding.top\n });\n\n this.attribute.width = boxWidth;\n this.attribute.height = boxHeight;\n }\n\n protected transformTextAttrsToRichTextConfig(\n textStyle: ITextComponentAttributes['textStyle'],\n align: 'left' | 'center' | 'right'\n ) {\n let textConfig = textStyle.textConfig;\n\n // 如果是纯文本定义方式\n if (!(textConfig && textConfig.length) && textStyle.text) {\n const textList = Array.isArray(textStyle.text) ? textStyle.text : [textStyle.text];\n textConfig = textList.map((item, i) => {\n return {\n textAlign: align,\n lineHeight: textStyle.lineHeight,\n text: item + (i < textList.length - 1 ? '\\n' : '')\n };\n });\n } else if (textConfig && textConfig.length) {\n // 设置align\n textConfig.forEach(item => {\n item.textAlign = align;\n item.lineHeight = item.lineHeight ?? textStyle.lineHeight;\n });\n }\n\n return textConfig;\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IArc, IArcGraphicAttribute } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\nimport type { IArcComponentAttributes } from '../interface/character-arc';\n\nexport class ArcComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IArcComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ArcComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n this.renderPolygon();\n }\n protected renderPolygon() {\n const { graphic, padding, width, height } = this.attribute as IArcComponentAttributes;\n const attrs = { ...graphic };\n\n if (!attrs.x) {\n attrs.x = width / 2;\n }\n if (!attrs.y) {\n attrs.y = height / 2;\n }\n\n if (!(attrs as IArcGraphicAttribute).outerRadius) {\n attrs.outerRadius = Math.min(width - padding.left - padding.right, height - padding.top - padding.bottom) / 2;\n }\n\n this.createOrUpdateChild(\n 'arc',\n {\n ...attrs,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'arc'\n ) as IArc;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ArcComponent } from '../graphic/ArcComponent';\nimport type { IArcComponentAttributes } from '../interface/character-arc';\n\nexport class ArcCharacter extends CharacterComponent {\n static type = CharacterType.ARC;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IArcComponentAttributes): void {\n this._graphic = new ArcComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IImage } from '@visactor/vrender-core';\nimport type { IImageComponentAttributes } from '../interface/character-image';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class ImageComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n graphic: {\n image:\n ''\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n mainGraphic: IImage;\n\n constructor(attributes: IImageComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ImageComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderImage();\n }\n protected renderImage() {\n const { graphic, padding, width, height } = this.attribute as IImageComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n this.mainGraphic = this.createOrUpdateChild(\n 'image',\n { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null },\n 'image'\n ) as IImage;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ImageComponent } from '../graphic/ImageComponent';\nimport type { IImageComponentAttributes } from '../interface/character-image';\n\nexport class ImageCharacter extends CharacterComponent {\n static type = CharacterType.IMAGE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IImageComponentAttributes): void {\n this._graphic = new ImageComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IImage, ILine } from '@visactor/vrender-core';\nimport type { ILineComponentAttributes } from '../interface/character-line';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class LineComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ILineComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderLine();\n }\n protected renderLine() {\n const { graphic, padding } = this.attribute as ILineComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n this.createOrUpdateChild('line', { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null }, 'line') as ILine;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport type { ILineComponentAttributes } from '../interface/character-line';\nimport { LineComponent } from '../graphic/LineComponent';\nimport { LineRuntimeInstance } from '../runtime/line';\n\nexport class LineCharacter extends CharacterComponent {\n static type = CharacterType.LINE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILineComponentAttributes): void {\n this._graphic = new LineComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IPolygon } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\nimport type { IPolygonComponentAttributes } from '../interface/character-polygon';\n\nexport class PolygonComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IPolygonComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PolygonComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n this.renderPolygon();\n }\n protected renderPolygon() {\n const { graphic, padding } = this.attribute as IPolygonComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n\n this.createOrUpdateChild(\n 'polygon',\n {\n ...attrs,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'polygon' as any\n ) as IPolygon;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { PolygonComponent } from '../graphic/PolygonComponent';\nimport type { IPolygonComponentAttributes } from '../interface/character-polygon';\n\nexport class PolygonCharacter extends CharacterComponent {\n static type = CharacterType.POLYGON;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IPolygonComponentAttributes): void {\n this._graphic = new PolygonComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IRectComponentAttributes } from '../interface/character-rect';\nimport type { IRect } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class RectComponent extends BaseComponentWithText {\n type: string = 'RectComponent';\n mainGraphic: IRect;\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IRectComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderRect();\n }\n protected renderRect() {\n const { graphic, padding, width, height } = this.attribute as IRectComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n this.mainGraphic = this.createOrUpdateChild(\n 'rect',\n { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null },\n 'rect'\n ) as IRect;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { RectComponent } from '../graphic/RectComponent';\nimport type { IRectComponentAttributes } from '../interface/character-rect';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../../interface/event';\n\nexport class RectCharacter extends CharacterComponent {\n static type = CharacterType.RECT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IRectComponentAttributes): void {\n this._graphic = new RectComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n const info = super.checkEvent(event);\n if (info && event.path[event.path.length - 1] === this._group) {\n return false;\n }\n return info;\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { isArray, merge } from '@visactor/vutils';\nimport type { IShapeComponentAttributes } from '../interface/character-shape';\nimport type { ISymbol } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nconst shapeMap: any = {\n star: 'M0 -1L0.22451398828979266 -0.3090169943749474L0.9510565162951535 -0.30901699437494745L0.3632712640026804 0.1180339887498948L0.5877852522924732 0.8090169943749473L8.326672684688674e-17 0.3819660112501051L-0.587785252292473 0.8090169943749476L-0.3632712640026804 0.11803398874989487L-0.9510565162951536 -0.30901699437494723L-0.22451398828979274 -0.30901699437494734Z'\n};\n\nexport class ShapeComponent extends BaseComponentWithText {\n type: string = 'ShapeComponent';\n mainGraphic: ISymbol;\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IShapeComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ShapeComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderShape();\n }\n protected renderShape() {\n const { graphic, padding, width, height } = this.attribute as IShapeComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n let dx = 0;\n let dy = 0;\n if (!attrs.size) {\n const w = width - padding.left - padding.right;\n const h = height - padding.top - padding.bottom;\n attrs.size = [w, h];\n dx = w / 2;\n dy = h / 2;\n } else if (isArray(attrs.size)) {\n dx = attrs.size[0] / 2;\n dy = attrs.size[1] / 2;\n } else {\n dx = attrs.size / 2;\n dy = attrs.size / 2;\n }\n\n this.mainGraphic = this.createOrUpdateChild(\n 'symbol',\n {\n ...attrs,\n symbolType: shapeMap[attrs.symbolType] ?? attrs.symbolType,\n dx,\n dy,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'symbol'\n ) as ISymbol;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ShapeComponent } from '../graphic/ShapeComponent';\nimport type { IShapeComponentAttributes } from '../interface/character-shape';\n\nexport class ShapeCharacter extends CharacterComponent {\n static type = CharacterType.SHAPE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IShapeComponentAttributes): void {\n this._graphic = new ShapeComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { merge } from '@visactor/vutils';\nimport type { GraphicType, IRichText } from '@visactor/vrender-core';\nimport { COMPONENT_NUMBER_TYPE } from './GroupComponent/component-group-graphic';\n\n// 文字组件可以根据锚点进行定位\nexport class TextComponent extends AbstractComponent {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ITextComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, TextComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n // text在group中进行布局,如果给定了宽高的话\n // 如果没有给定宽高的话,就按照文本的宽高进行布局,同时要加上padding\n const { textStyle, padding, width, height } = this.attribute as ITextComponentAttributes;\n\n const { textAlign, textBaseline } = textStyle;\n const { align = textAlign, baseline = textBaseline } = textStyle;\n\n const boxAlign = align === 'start' ? 'left' : align === 'end' ? 'right' : align;\n const boxBaseline = baseline;\n let textConfig = this.transformTextAttrsToRichTextConfig(textStyle, 'left');\n\n // 先设置一个初始richtext,用于计算bounds\n const richtext = this.createOrUpdateChild(\n 'text',\n {\n ...(textStyle as any),\n width: 0,\n height: 0,\n textAlign: 'left',\n textBaseline: 'top',\n verticalDirection: 'top',\n textConfig\n },\n 'richtext'\n ) as IRichText;\n\n // 测量宽高\n let boxWidth = width;\n let boxHeight = height;\n if (!isFinite(boxWidth)) {\n boxWidth = richtext.AABBBounds.width() + (padding?.left ?? 0) + (padding?.right ?? 0);\n }\n if (!isFinite(boxHeight)) {\n boxHeight = richtext.AABBBounds.height() + (padding?.top ?? 0) + (padding?.bottom ?? 0);\n }\n\n // 重新设置richtext的位置,align设置在textConfig中,baseline设置到verticalDirection\n textConfig = this.transformTextAttrsToRichTextConfig(\n textStyle,\n textAlign === 'start' ? 'left' : textAlign === 'end' ? 'right' : textAlign\n );\n richtext.setAttributes({\n textConfig,\n verticalDirection: textBaseline === 'alphabetic' ? 'middle' : textBaseline,\n width: boxWidth,\n height: boxHeight\n // x: boxWidth / 2,\n // y: boxHeight / 2\n });\n\n this.attribute.width = boxWidth;\n this.attribute.height = boxHeight;\n\n if (boxAlign === 'left') {\n this.attribute.dx = 0;\n } else if (boxAlign === 'right') {\n this.attribute.dx = -boxWidth;\n } else {\n this.attribute.dx = -boxWidth / 2;\n }\n\n if (boxBaseline === 'top') {\n this.attribute.dy = 0;\n } else if (boxBaseline === 'bottom') {\n this.attribute.dy = -boxHeight;\n } else {\n this.attribute.dy = -boxHeight / 2;\n }\n }\n\n protected transformTextAttrsToRichTextConfig(\n textStyle: ITextComponentAttributes['textStyle'],\n align: 'left' | 'center' | 'right'\n ) {\n let textConfig = textStyle.textConfig;\n\n // 如果是纯文本定义方式\n if (!(textConfig && textConfig.length) && textStyle.text) {\n const textList = Array.isArray(textStyle.text) ? textStyle.text : [textStyle.text];\n textConfig = textList.map((item, i) => {\n return {\n textAlign: align,\n lineHeight: textStyle.lineHeight,\n text: item + (i < textList.length - 1 ? '\\n' : '')\n };\n });\n } else if (textConfig && textConfig.length) {\n // 设置align\n textConfig.forEach(item => {\n item.textAlign = align;\n item.lineHeight = item.lineHeight ?? textStyle.lineHeight;\n });\n }\n\n return textConfig;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { TextComponent } from '../graphic/TextComponent';\nimport { TextRuntimeInstance } from '../runtime/text';\n\nexport class TextCharacter extends CharacterComponent {\n static type = CharacterType.TEXT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ITextComponentAttributes): void {\n this._graphic = new TextComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n textStyle: {\n textAlign: 'center',\n textBaseline: 'top',\n text: 'input your text',\n fontSize: 16,\n ignoreBuf: true\n }\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { registerGroup, registerSymbol, registerLine, registerText } from '@visactor/vrender-kits';\n\nexport function loadTimelineComponent() {\n registerGroup();\n registerText();\n registerSymbol();\n registerLine();\n}\n","import { isArray, merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { loadTimelineComponent } from './register';\nimport type { TimelineAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { getTheme, type IGraphicAttribute, type IGroup, type ILine, type IText } from '@visactor/vrender-core';\nimport type { ISymbol } from '@visactor/vrender-core';\n\nloadTimelineComponent();\n\nexport class Timeline extends AbstractComponent> {\n name = 'timeline';\n\n private _line?: ILine;\n private _activeLine?: ILine;\n private _symbolGroup?: IGroup;\n private _labelGroup?: IGroup;\n private _timesPercent?: number[];\n\n static defaultAttributes: Partial = {\n labelSpace: 10,\n pointLayoutMode: 'space-around',\n animation: true,\n symbolStyle: {\n fill: 'black',\n size: 12,\n symbolType: 'circle'\n },\n activeSymbolStyle: {\n fill: 'orange',\n size: 16\n },\n lineStyle: {\n lineDash: [2, 2],\n lineCap: 'butt',\n stroke: 'black',\n lineWidth: 2\n },\n activeLineStyle: {\n stroke: 'orange',\n lineWidth: 4\n },\n labelStyle: {\n fontSize: 12,\n fill: 'black',\n textAlign: 'center',\n textBaseline: 'top'\n },\n activeLabelStyle: {\n fontSize: 14,\n fill: 'orange'\n },\n clipRange: 0\n };\n\n constructor(attributes: TimelineAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Timeline.defaultAttributes, attributes));\n }\n\n protected render(): void {\n const {\n width,\n lineStyle,\n activeLineStyle,\n symbolStyle,\n activeSymbolStyle,\n labelStyle,\n activeLabelStyle,\n times,\n pointLayoutMode,\n labelSpace,\n clipRange,\n animation\n } = this.attribute;\n\n if (!(times && times.length)) {\n return;\n }\n\n // 计算线段中心的y位置,考虑线宽和symbol宽度\n const symbolHeight = (isArray(symbolStyle.size) ? symbolStyle.size[1] : symbolStyle.size) || 0;\n const activeSymbolHeight =\n (isArray(activeSymbolStyle.size) ? activeSymbolStyle.size[1] : activeSymbolStyle.size) || 0;\n const lineSymbolHeight = Math.max(\n lineStyle.lineWidth || 0,\n activeLineStyle.lineWidth || 0,\n symbolHeight,\n activeSymbolHeight\n );\n const lineY = lineSymbolHeight / 2;\n const lineAttr = {\n y: lineY,\n points: [\n { x: 0, y: 0 },\n { x: width, y: 0 }\n ]\n };\n this._line = this.createOrUpdateChild(\n 'line-axes',\n {\n ...lineStyle,\n ...lineAttr\n },\n 'line'\n ) as ILine;\n this._activeLine = this.createOrUpdateChild(\n 'active-line-axes',\n {\n ...activeLineStyle,\n ...lineAttr,\n clipRange\n },\n 'line'\n ) as ILine;\n\n const activeWidth = width * clipRange;\n\n const symbolGroup = this.createOrUpdateChild(\n 'symbol-group',\n {\n y: lineY\n },\n 'group'\n ) as IGroup;\n const symbolSpace =\n times.length === 1\n ? width\n : pointLayoutMode === 'space-between'\n ? width / (times.length - 1)\n : width / times.length;\n const symbolStartX = pointLayoutMode === 'space-between' ? 0 : symbolSpace / 2;\n this._timesPercent = times.map((_, i) => (symbolStartX + symbolSpace * i) / width);\n\n times.forEach((item, i) => {\n const x = this._timesPercent[i] * width;\n symbolGroup.createOrUpdateChild(\n item.label,\n {\n ...symbolStyle,\n x\n },\n 'symbol'\n );\n });\n this._symbolGroup = symbolGroup;\n\n const labelY = lineSymbolHeight + labelSpace;\n const labelGroup = this.createOrUpdateChild(\n 'label-group',\n {\n y: labelY\n },\n 'group'\n ) as IGroup;\n\n times.forEach((item, i) => {\n const x = this._timesPercent[i] * width;\n labelGroup.createOrUpdateChild(\n item.label,\n {\n ...labelStyle,\n x,\n text: item.label\n },\n 'text'\n );\n });\n this._labelGroup = labelGroup;\n\n const setActive = (group: IGroup, activeStyle: Partial) => {\n group.forEachChildren((label: IText) => {\n if (label.currentStates) {\n const currentStates = label.currentStates;\n label.clearStates();\n label.useStates(currentStates, false);\n }\n label.states = {\n active: activeStyle\n };\n if (label.attribute.x <= activeWidth) {\n label.useStates(['active'], animation);\n }\n });\n };\n\n setActive(labelGroup, activeLabelStyle);\n setActive(symbolGroup, activeSymbolStyle);\n }\n\n appearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n const { activeLabelStyle, activeSymbolStyle } = this.attribute;\n const percent = duration / 1000;\n const lineDuration = percent * 500;\n const activeLineDuration = percent * 200;\n const perSymbolDuration = percent * 100;\n const perSymbolNormalDuration = percent * 90;\n const symbolDelay = percent * 100;\n const symbolNormalDelay = percent * 600;\n if (this._line) {\n this._line.setAttributes({ clipRange: 0 });\n this._line.animate().to({ clipRange: 1 }, lineDuration, easing as any);\n }\n if (this._activeLine) {\n this._activeLine.setAttributes({ opacity: 0 });\n this._activeLine\n .animate()\n .wait(500)\n .to({ opacity: 1 }, activeLineDuration, easing as any);\n }\n if (this._symbolGroup) {\n const size = this._symbolGroup.count - 1;\n const delay = percent * (size === 1 ? 0 : (500 - 100) / (size - 1));\n const delayNormal = percent * (size === 1 ? 0 : (400 - 160) / (size - 1));\n this._symbolGroup.forEachChildren((symbol: ISymbol, i) => {\n const originAttrs: Record = {};\n Object.keys(activeSymbolStyle).forEach(k => {\n originAttrs[k] = (symbol.attribute as any)[k];\n });\n\n symbol.setAttributes({ opacity: 0 });\n symbol\n .animate()\n .wait(symbolDelay + delay * i)\n .to({ opacity: 1 }, perSymbolDuration, easing as any);\n symbol\n .animate()\n .wait(symbolNormalDelay + delayNormal * i)\n .to({ ...activeSymbolStyle }, perSymbolNormalDuration, easing as any)\n .to({ ...originAttrs }, perSymbolNormalDuration, easing as any);\n });\n }\n if (this._labelGroup) {\n const size = this._labelGroup.count - 1;\n const delay = percent * (size === 1 ? 0 : (500 - 100) / (size - 1));\n const delayNormal = percent * (size === 1 ? 0 : (400 - 160) / (size - 1));\n this._labelGroup.forEachChildren((label: IText, i) => {\n const originAttrs: Record = {};\n Object.keys(activeLabelStyle).forEach(k => {\n originAttrs[k] = (label.attribute as any)[k];\n });\n label.setAttributes({ opacity: 0 });\n label\n .animate()\n .wait(symbolDelay + delay * i)\n .to({ opacity: 1 }, perSymbolDuration, easing as any);\n label\n .animate()\n .wait(symbolNormalDelay + delayNormal * i)\n .to({ dy: 10, ...activeLabelStyle }, perSymbolNormalDuration, easing as any)\n .to({ dy: 0, ...originAttrs }, perSymbolNormalDuration, easing as any);\n });\n }\n }\n\n goto(flag: 1 | -1, animateConfig: { duration?: number; easing?: string }) {\n let { clipRange } = this.attribute;\n const { animation } = this.attribute;\n\n // 合法性判断\n if (flag > 0) {\n if (clipRange >= 1) {\n return;\n } else if (clipRange < 0) {\n clipRange = 0;\n }\n } else {\n if (clipRange <= 0) {\n return;\n } else if (clipRange > 1) {\n clipRange = 1;\n }\n }\n\n if (clipRange !== this.attribute.clipRange) {\n this.setAttributes({ clipRange });\n }\n\n // 判断区间\n let i = 0;\n for (; i < this._timesPercent.length; i++) {\n if (clipRange < this._timesPercent[i]) {\n break;\n }\n }\n\n const nextClipRange = flag > 0 ? this._timesPercent[i] || 1 : this._timesPercent[i - 1] || 0;\n if (animation) {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n // const actDuration =\n // (Math.abs(nextClipRange - clipRange) / ((this._timesPercent[i] ?? 1) - (this._timesPercent[i - 1] ?? 0))) *\n // duration;\n this.animate().to({ clipRange: nextClipRange }, duration, easing as any);\n } else {\n this.setAttributes({ clipRange: nextClipRange });\n }\n }\n\n forward(animateConfig: { duration?: number; easing?: string }) {\n this.goto(1, animateConfig);\n }\n\n backward(animateConfig: { duration?: number; easing?: string }) {\n this.goto(-1, animateConfig);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { Timeline } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { ITimelineComponentAttributes } from '../interface/character-timeline';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class TimelineComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n timeline: Timeline;\n\n constructor(attributes: ITimelineComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, TimelineComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderTimeline();\n }\n protected renderTimeline() {\n const { graphic, padding, width, height } = this.attribute as ITimelineComponentAttributes;\n const attrs: any = { ...graphic, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n if (!this.timeline) {\n this.timeline = new Timeline(attrs);\n this.add(this.timeline);\n } else {\n this.timeline.setAttributes(attrs);\n }\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { TimelineComponent } from '../graphic/TimelineComponent';\nimport type { ITimelineComponentAttributes } from '../interface/character-timeline';\n\nexport class TimelineCharacter extends CharacterComponent {\n static type = CharacterType.TIMELINE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ITimelineComponentAttributes): void {\n this._graphic = new TimelineComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n graphic: {\n activeSymbolStyle: {\n size: 26\n },\n activeLineStyle: {\n lineWidth: 1.5\n }\n } as any\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { IUnitGraphicAttributes, IUnitItemAttributes } from './interface';\nimport { merge } from '@visactor/vutils';\nimport { createSymbol, type ISymbol } from '@visactor/vrender-core';\nimport { allParamsEqualTo, getDiffedParams } from '../../../../utils/equal';\n\ninterface IGridConfig {\n rows: number;\n cols: number;\n unitWidth: number;\n unitHeight: number;\n offsetX: number;\n offsetY: number;\n}\n\nexport class Unit extends AbstractComponent> {\n name = 'unit';\n\n static defaultAttributes: Partial = {\n width: 100,\n height: 100,\n gap: [0.5, 0.5],\n aspect: 1,\n direction: 'horizontal',\n padding: {\n top: 0,\n bottom: 0,\n right: 0,\n left: 0\n },\n count: 250,\n countPerSymbol: 1,\n units: []\n };\n\n _duration: number;\n _stagger: number;\n\n constructor(attributes: IUnitGraphicAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Unit.defaultAttributes, attributes));\n this._skipRenderAttributes.push('visible', 'visibleAll');\n }\n\n protected render(): void {\n const gridConfig = this._calculateGrid(this.attribute as IUnitGraphicAttributes);\n\n const { rows, cols, unitWidth, unitHeight, offsetX, offsetY } = gridConfig;\n const { count, countPerSymbol, units, padding, gap, direction } = this.attribute;\n const startX = padding.left + unitWidth / 2;\n const startY = padding.top + unitHeight / 2;\n const isHorizontal = direction === 'horizontal';\n\n const symbolCount = Math.ceil(count / countPerSymbol);\n\n // 判断子元素数量\n const currChildCount = this.count - 1;\n const expectChildCount = symbolCount;\n if (currChildCount > expectChildCount) {\n // 要删子元素\n for (let i = currChildCount; i > expectChildCount; i--) {\n this.removeChild(this._lastChild as ISymbol);\n }\n } else if (currChildCount < expectChildCount) {\n // 要增加子元素\n for (let i = currChildCount; i < expectChildCount; i++) {\n const symbol = createSymbol({});\n // 设置新元素标记\n symbol._new = true;\n this.add(symbol);\n }\n }\n\n this.forEachChildren((graphic: ISymbol, i: number) => {\n const col = isHorizontal ? Math.floor(i / rows) : i % cols;\n const row = isHorizontal ? i % rows : Math.floor(i / cols);\n const dx =\n startX +\n col * (unitWidth + gap[0] * unitWidth + offsetX) +\n (isHorizontal && cols <= 1 ? offsetX : 0) +\n (!isHorizontal && rows <= 1 ? offsetX : 0);\n const dy =\n startY +\n row * (unitHeight + gap[1] * unitHeight + offsetY) +\n (!isHorizontal && rows <= 1 ? offsetY : 0) +\n (isHorizontal && cols <= 1 ? offsetY : 0);\n\n // 执行update动画\n if (this._duration) {\n if (!graphic._new) {\n // 属性有diff,走动画去更新\n const nextAttrs = {\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n };\n if (!allParamsEqualTo(nextAttrs, graphic.attribute)) {\n const diffedAttrs = getDiffedParams(graphic.attribute, nextAttrs);\n if (this._stagger) {\n const delay = Math.random() * this._duration * (1 - this._stagger);\n graphic\n .animate()\n .wait(delay)\n .to(diffedAttrs, this._stagger * this._duration, 'linear');\n } else {\n graphic.animate().to(diffedAttrs, this._duration, 'linear');\n }\n }\n } else {\n // 入场执行另外的入场动画\n graphic.setAttributes({\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n });\n }\n } else {\n // 不执行动画\n graphic.setAttributes({\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n });\n }\n\n graphic._new = false;\n });\n }\n\n protected getUnitStyle(\n index: number,\n units: IUnitItemAttributes[],\n count: number,\n symbolCount: number\n ): IUnitItemAttributes['style'] | void {\n const unit =\n units.find(item => {\n const range = [...item.range];\n if (range[0] == null) {\n range[0] = 0;\n }\n if (range[1] == null) {\n range[1] = count - 1;\n }\n const actualIdx = (count / symbolCount) * index;\n return range[0] <= actualIdx && range[1] >= actualIdx;\n }) || units[0];\n\n return unit && unit.style;\n }\n\n /**\n * 入场动画\n * @param animateConfig\n */\n appearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // TODO 后续支持特殊入场效果\n const { duration = 1000, easing = 'linear' } = animateConfig;\n this.forEachChildren((g: ISymbol) => {\n g.setAttributes({ opacity: 0 });\n g.animate().to({ opacity: 1 }, duration, easing as any);\n });\n return;\n }\n\n styleAnimate(\n attrs: any,\n animation: { duration?: number; easing?: string; stagger?: { enable?: boolean; ratio?: number } }\n ) {\n const { duration, easing, stagger = {} } = animation;\n this._duration = duration || 0;\n if (stagger?.enable) {\n this._stagger = stagger?.ratio ?? 0.7;\n }\n this.setAttributes(attrs);\n this._stagger = 0;\n this._duration = 0;\n }\n\n protected _calculateMinPrimaryCount(\n primaryLength: number,\n secondaryLength: number,\n aspect: number,\n gap: [number, number],\n count: number\n ): number {\n const a = Math.pow(secondaryLength * (1 + gap[1]), 2);\n const b = gap[0] * aspect * primaryLength - secondaryLength * gap[1];\n const c = -count * primaryLength * aspect * (1 + gap[0]) * (1 + gap[1]);\n const delta = Math.sqrt(b * b - 4 * a * c);\n return Math.ceil((-b + delta) / (2 * a));\n }\n\n protected _convergeGrid(\n minPrimaryCount: number,\n count: number,\n primaryLength: number,\n secondaryLength: number,\n aspect: number,\n gap: [number, number]\n ) {\n let primaryCount = minPrimaryCount;\n let unitPrimarySize;\n let unitSecondarySize;\n let secondaryCount;\n let totalWidth;\n\n do {\n unitPrimarySize = primaryLength / (primaryCount * (1 + gap[1]) - gap[1]);\n unitSecondarySize = aspect * unitPrimarySize;\n secondaryCount = Math.ceil(count / primaryCount);\n totalWidth = secondaryCount * unitSecondarySize + (secondaryCount - 1) * gap[0] * unitSecondarySize;\n } while (totalWidth > secondaryLength && primaryCount++);\n\n return { primaryCount, secondaryCount, unitPrimarySize, unitSecondarySize };\n }\n\n protected _calculateGrid(attributes: IUnitGraphicAttributes): IGridConfig {\n const { width, height, padding, count, gap, aspect, direction, countPerSymbol } = attributes;\n const symbolCount = Math.ceil(count / countPerSymbol);\n const innerWidth = width - padding.left - padding.right;\n const innerHeight = height - padding.top - padding.bottom;\n\n const isHorizontal = direction === 'horizontal';\n const primaryLength = isHorizontal ? innerHeight : innerWidth;\n const secondaryLength = isHorizontal ? innerWidth : innerHeight;\n const adjustedAspect = isHorizontal ? aspect : 1 / aspect;\n const adjustedGap: [number, number] = isHorizontal ? gap : [gap[1], gap[0]];\n\n const minPrimaryCount = this._calculateMinPrimaryCount(\n primaryLength,\n secondaryLength,\n adjustedAspect,\n adjustedGap,\n symbolCount\n );\n const { primaryCount, secondaryCount, unitPrimarySize, unitSecondarySize } = this._convergeGrid(\n minPrimaryCount,\n symbolCount,\n primaryLength,\n secondaryLength,\n adjustedAspect,\n adjustedGap\n );\n\n const offset =\n (secondaryLength -\n secondaryCount * unitSecondarySize -\n (secondaryCount - 1) * adjustedGap[0] * unitSecondarySize) /\n (secondaryCount - 1);\n\n let primaryOffset;\n if (secondaryCount <= 1) {\n if (symbolCount <= 1) {\n primaryOffset = (primaryLength - unitPrimarySize) / 2;\n } else {\n primaryOffset =\n (primaryLength - symbolCount * unitPrimarySize - (symbolCount - 1) * unitPrimarySize * adjustedGap[1]) /\n (symbolCount - 1);\n }\n } else {\n primaryOffset = 0;\n }\n const secondaryOffset = secondaryCount <= 1 ? (secondaryLength - unitSecondarySize) / 2 : offset;\n\n return isHorizontal\n ? {\n rows: primaryCount,\n cols: secondaryCount,\n unitWidth: unitSecondarySize,\n unitHeight: unitPrimarySize,\n offsetX: secondaryOffset,\n offsetY: primaryOffset\n }\n : {\n rows: secondaryCount,\n cols: primaryCount,\n unitWidth: unitPrimarySize,\n unitHeight: unitSecondarySize,\n offsetX: primaryOffset,\n offsetY: secondaryOffset\n };\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '../BaseComponentWithText';\nimport type { IUnitComponentAttributes } from './interface';\nimport { Unit } from './Unit';\n\nexport class UnitComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n unit: Unit;\n\n constructor(attributes: IUnitComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, UnitComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderUnit();\n }\n protected renderUnit() {\n const { graphic, padding, width, height } = this.attribute as IUnitComponentAttributes;\n const attrs: any = { ...graphic, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n if (!this.unit) {\n this.unit = new Unit(attrs);\n this.add(this.unit);\n } else {\n this.unit.setAttributes(attrs);\n }\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { UnitComponent } from '../graphic/UnitComponent.ts/UnitComponent';\nimport type { IUnitComponentAttributes } from '../graphic/UnitComponent.ts/interface';\n\nexport class UnitCharacter extends CharacterComponent {\n static type = CharacterType.UNIT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IUnitComponentAttributes): void {\n this._graphic = new UnitComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n graphic: {\n activeSymbolStyle: {\n size: 26\n },\n activeLineStyle: {\n lineWidth: 1.5\n }\n } as any\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class TableConfigProcess extends ConfigProcessBase {}\n","import type { IGroup, ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTimeline, ManualTicker } from '@visactor/vrender-core';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../interface/event';\nimport { CharacterBase } from '../character-base';\nimport type { ITableGraphicAttribute } from './graphic/vtable-graphic';\nimport { VTableGraphic } from './graphic/vtable-graphic';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport type { ITableCharacterConfig } from '../../interface/dsl/table';\nimport { getLayoutFromWidget } from '../../utils/layout';\nimport type { ITableCharacterRuntime } from './interface/runtime';\nimport { TableConfigProcess } from './table-config-process';\nimport type { ICharacterTable, IVTable } from './interface/character-table';\nimport { isArray } from '@visactor/vutils';\n\nexport class CharacterTable\n extends CharacterBase\n implements ICharacterTable\n{\n static type = 'Table';\n\n visActorType: 'table' | 'component' | 'table' | 'common' = 'table';\n protected declare _graphic: VTableGraphic;\n protected declare _config: ITableCharacterConfig;\n\n // 临时记录 vtable 对象。在第一次执行 afterInitializeTable 后赋值, 在 beforeVRenderDraw 中使用\n // 不临时记录的话,第一次 beforeVRenderDraw 时,graphic 对象还未执行完初始化,当前对象的 _graphic 为 null\n protected _vtable: IVTable;\n\n protected _ticker: ITicker;\n protected _timeline: ITimeline;\n protected _runtime: ITableCharacterRuntime[] = [];\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this._timeline = new DefaultTimeline();\n this._ticker = new ManualTicker([this._timeline]);\n this.configProcess = new TableConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n tickTo(t: number): void {\n this._graphic.vTableStage.ticker.tickAt && this._graphic.vTableStage.ticker.tickAt(t);\n }\n\n getGraphicBySelector(selector: string | string[]) {\n let table = false;\n let panel = false;\n if (isArray(selector)) {\n selector.forEach(s => {\n const data = this._getGraphicBySelector(s);\n table = table || data.table;\n panel = panel || data.panel;\n });\n return {\n table,\n panel\n };\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const vtable = this._graphic.vTable;\n let table = false;\n // 是否包含panel, >0为包含\n let includePanel = 1;\n const rowHeader = vtable.scenegraph.rowHeaderGroup;\n const colHeader = vtable.scenegraph.colHeaderGroup;\n const bodyGroup = vtable.scenegraph.bodyGroup;\n\n let out: any = {\n rowHeader,\n colHeader,\n bodyGroup\n };\n\n const selectorList = selector.split(' ');\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n table = true;\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n out = this.selectByType(out, match, false);\n if (match === 'panel') {\n includePanel = -Infinity; // 如果被排除,那么一定不包含了\n }\n } else {\n out = this.selectByType(out, subSelector);\n if (subSelector === 'panel') {\n includePanel = Infinity; // 如果有正选,那么选中才算\n } else {\n includePanel--;\n }\n }\n });\n\n return {\n table,\n panel: includePanel > 0,\n ...out\n };\n }\n\n protected selectByType(\n data: { rowHeader: IGroup; colHeader: IGroup; bodyGroup: IGroup },\n name: string,\n match: boolean = true\n ) {\n return {\n rowHeader: (name === 'rowHeader') === match ? data.rowHeader : null,\n colHeader: (name === 'colHeader') === match ? data.colHeader : null,\n bodyGroup: (name === 'body') === match ? data.bodyGroup : null\n };\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n // 点击到图表的空白区域\n if (this._graphic.pointInViewBox((event as any).canvasX, (event as any).canvasY)) {\n return {\n part: 'null',\n graphic: null,\n modelInfo: null,\n graphicType: 'null'\n };\n }\n return false;\n }\n\n _initGraphic() {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this._graphic = new VTableGraphic(attribute);\n\n this.canvas.addGraphic(this._graphic);\n // 完成spec设置\n this._runtime.forEach(r => r.afterInitialize?.(this, this._graphic.vTable));\n }\n\n protected _setAttributes(attr: T): void {\n super._setAttributes(attr);\n // 完成spec更新也需要调用 afterInitialize\n this._runtime.forEach(r => r.afterInitialize?.(this, this._graphic.vTable));\n }\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getViewBoxFromSpec() {\n const layout = getLayoutFromWidget(this._config.position, this);\n const viewBox = {\n x1: layout.x,\n x2: layout.x + layout.width,\n y1: layout.y,\n y2: layout.y + layout.height\n };\n return { layout, viewBox };\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n }\n\n getDefaultAttribute(): Partial {\n return {\n spec: this._config.options.spec,\n dpr: this._canvas.getDpr(),\n autoRender: false,\n width: 500,\n height: 500,\n interactive: false,\n panel: {},\n ticker: this._ticker,\n zIndex: this._config.zIndex ?? 0,\n chartOption: {\n disableTriggerEvent: true,\n disableDirtyBounds: true,\n mode: 'desktop-browser'\n }\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n this._vtable = null;\n }\n\n getRuntimeConfig() {\n return this;\n }\n}\n","import { cloneDeep } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from './../../chart/interface/runtime';\nimport type { IVChart } from '@visactor/vchart';\nimport { CharacterType } from '../../../constants/character';\nimport type { IPivotChartCharacterConfig } from '../../../interface/dsl/table';\nimport type { ITableGraphicAttribute } from '../graphic/vtable-graphic';\nimport type { ICharacterChart } from '../../chart/interface/character-chart';\nimport { ThemeManager } from '../../../theme/theme-manager';\nimport { RuntimeStore } from '../../../store';\nimport { CharacterTable } from '../character-table';\n\nexport class PivotChartCharacter extends CharacterTable {\n static type = CharacterType.PIVOT_CHART;\n\n static ChartRuntimeMap: Record = {\n CommonLayout: false\n };\n\n protected declare _config: IPivotChartCharacterConfig;\n\n protected _chartRuntime: IChartCharacterRuntime[] = [];\n\n protected _currentDrawVChart: IVChart;\n get currentDrawVChart() {\n return this._currentDrawVChart;\n }\n\n // table 的图表相关生命周期\n // spec 生成钩子\n // 交互模式\n // option.specFormat => applyConfigToAttribute\n // 绘图模式\n // option.beforeChartDraw => applyConfigToAttribute\n // 通用的 vchart 生命周期钩子透传\n // option.chartOption {\n // performanceHook: {\n // chart\n // afterInitialize => afterInitialize\n // beforeVRenderDraw => beforeVRenderDraw\n // }\n // }\n\n getDefaultAttribute(): Partial {\n const result = super.getDefaultAttribute();\n const option = result.spec;\n // 这个函数功能的意义,当 vchart 在 vrender 渲染图表时,如果指标不变,仅单元格进行切换,是不会触发 updateSpec 的\n // 我们但是不同的单元格支持独立配置chart属性后,需要 updateSpec。所以在这里补充判定。\n // 1. 当存在独立配置时,key 为 col_row,否则为 no\n // 2. 当前图表实例上增加一个 _story_render_key 字段,用于记录当前的 key\n // 3. 当 key 变化时,需要 updateSpec。key 变化可能是从 no => col_row,或者从 col_row => no\n option.specFormat = (spec: any, chartInstance: any, chart: any) => {\n const { col, row } = chart.attribute;\n const hasOption = !!this._getVChartOption(col, row);\n const key = hasOption ? `${col}_${row}` : 'no';\n const needFormatSpec =\n key !== 'no'\n ? chartInstance._story_render_key !== key\n : chartInstance._story_render_key !== key && chartInstance._story_render_key !== undefined;\n chartInstance._story_render_key = key;\n return {\n needFormatSpec,\n spec: spec,\n updateSpec: false\n };\n };\n // 每一个单元格生成独立spec时,会调用这个函数,对应图表元素的 spec处理阶段\n // 注意:此时 spec 中没有数据\n option.specTransformInCell = (spec: any, col: number, row: number) => {\n spec._stroy_pivot_chart_info = {\n col,\n row\n };\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return spec;\n }\n // 先生成当前 chart 的临时 runtimeConfig\n const options = { ...(this._getVChartOption(col, row) ?? {}), spec };\n const attribute = { spec: cloneDeep(spec) };\n const runTimeConfig = {\n config: {\n options\n },\n canvas: this.canvas,\n getAttribute: () => {\n return attribute;\n }\n };\n // 复用 chart 元素的 runtime 对 spec 进行处理\n this._chartRuntime.forEach(r => {\n r.applyConfigToAttribute?.({\n story: this.story,\n getRuntimeConfig: () => {\n return runTimeConfig;\n }\n } as ICharacterChart);\n });\n // 返回处理后的 spec\n return attribute.spec;\n };\n option.chartOption = option.chartOption || {};\n option.chartOption.performanceHook = option.chartOption.performanceHook || {};\n option.chartOption.performanceHook.afterInitializeChart = (vchart: IVChart) => {\n const col = vchart.getSpec()._stroy_pivot_chart_info.col;\n const row = vchart.getSpec()._stroy_pivot_chart_info.row;\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return;\n }\n this._chartRuntime.forEach(r => {\n r.afterInitialize?.(\n {\n story: this.story,\n getRuntimeConfig: () => {\n return {\n config: {\n options: chartOption\n }\n };\n }\n } as ICharacterChart,\n vchart\n );\n });\n };\n option.chartOption.performanceHook.beforeDoRender = (vchart: IVChart) => {\n const col = vchart.getSpec()._stroy_pivot_chart_info.col;\n const row = vchart.getSpec()._stroy_pivot_chart_info.row;\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return;\n }\n this._chartRuntime.forEach(r => {\n r.beforeVRenderDraw?.(\n {\n story: this.story,\n getRuntimeConfig: () => {\n return {\n config: {\n options: chartOption\n }\n };\n }\n } as ICharacterChart,\n vchart\n );\n });\n };\n return result;\n }\n\n protected _getVChartOption(col: number, row: number) {\n return this._config.options.chartOptions?.[`${col}_${row}`]?.options;\n }\n\n protected _initRuntime(): void {\n super._initRuntime();\n const runtimeList = ThemeManager.getAttribute([this.theme, this.story.theme], `character.Chart.runtime.list`);\n this._chartRuntime.push(\n ...(RuntimeStore.getList(PivotChartCharacter.ChartRuntimeMap, runtimeList) as IChartCharacterRuntime[])\n );\n }\n}\n","import { merge, array, isArray } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { IChartCharacterConfig, ModelSelector } from '../../../interface/dsl/chart';\nimport { isIDSelector, isSpecIndexSelector } from '../../../utils/type';\n\nexport class CommonSpecRuntime implements IChartCharacterRuntime {\n type = 'ChartCommonSpec';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const config = character.getRuntimeConfig().config;\n const { spec } = rawAttribute;\n const options = config.options;\n const { data, color, rootConfig = {}, padding } = options;\n\n this._mergeComponentSpec(spec, options, 'title');\n this._mergeComponentSpec(spec, options, 'legends');\n this._mergeComponentSpec(spec, options, 'axes');\n this._mergeSeriesSpec(spec, options);\n if (data) {\n merge(spec, {\n data\n });\n }\n if (color) {\n merge(spec, { color });\n }\n if (padding) {\n merge(spec, { padding });\n }\n spec.animation = true;\n // 关闭默认的入场动画\n spec.animationAppear = false;\n // TODO 这个先不关闭,ADD的时候会调用\n // spec.animationEnter = false;\n merge(spec, { ...rootConfig });\n // 保证 data 的 values 有内容,避免 vchart 处理过程中报错\n this._fillDataValues(spec);\n }\n\n protected _mergeComponentSpec(\n rawSpec: any,\n options: IChartCharacterConfig['options'],\n key: 'title' | 'legends' | 'axes' | 'series'\n ) {\n if (!options[key]) {\n return;\n }\n if (!rawSpec[key]) {\n rawSpec[key] = [];\n }\n // 转化为数组\n rawSpec[key] = array(rawSpec[key]);\n (Object.keys(options[key]) as ModelSelector[]).forEach((selector: ModelSelector) => {\n if (selector === '*') {\n // 全部\n rawSpec[key].forEach((s: any) => {\n merge(s, options[key][selector]);\n });\n } else if (isSpecIndexSelector(selector)) {\n // 匹配索引\n const s = rawSpec[key][+selector];\n if (s) {\n merge(s, options[key][selector]);\n }\n } else if (isIDSelector(selector)) {\n // 匹配id\n const userId = selector.substring(1);\n const s = rawSpec[key].find((a: any) => {\n return a.id === userId;\n });\n if (s) {\n merge(s, options[key][selector]);\n } else {\n const s = options[key][selector];\n (s as any).id = userId;\n rawSpec[key].push(s);\n }\n }\n });\n }\n\n protected _mergeSeriesSpec(rawSpec: any, options: IChartCharacterConfig['options']) {\n if (!options.series) {\n return;\n }\n // 如果原始spec没有series,并且seriesSpec只有一项\n const optionSeries = options.series;\n if (!rawSpec.series && (options.series[0] || options.series['0'])) {\n merge(rawSpec, optionSeries[0] ?? optionSeries['0']);\n return;\n }\n // 其他情况同普通组件\n this._mergeComponentSpec(rawSpec, options, 'series');\n }\n\n private _fillSpecData(spec: any) {\n if (!spec.data) {\n return;\n }\n if (isArray(spec.data)) {\n spec.data.forEach((d: any) => {\n if (!d.values) {\n d.values = [];\n }\n });\n } else {\n if (!spec.data.values) {\n spec.data.values = [];\n }\n }\n }\n\n protected _fillDataValues(spec: any) {\n this._fillSpecData(spec);\n if (spec.series) {\n spec.series.forEach((s: any) => this._fillSpecData(s));\n }\n }\n}\n\nexport const CommonSpecRuntimeInstance = new CommonSpecRuntime();\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\n\nexport class RankingBarRuntime implements IChartCharacterRuntime {\n type = 'RankingBar';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n // 关掉player显示\n spec.player = {\n visible: false\n };\n spec.animation = true;\n spec.animationAppear = false;\n spec.animationEnter = false;\n }\n}\n\nexport const RankingBarRuntimeInstance = new RankingBarRuntime();\n","import { merge } from '@visactor/vutils';\nimport { ACustomAnimate } from '@visactor/vrender-core';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\n\nexport class WaveAnimate extends ACustomAnimate {\n static label: string = 'WaveAnimate';\n\n declare valid: boolean;\n\n constructor(from: any, to: any, duration: number, easing: any, params: any) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n out.textureRatio = ratio;\n }\n}\n\nexport class WaveScatterRuntime implements IChartCharacterRuntime {\n type = 'WaveScatter';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n const config = character.getRuntimeConfig().config as any;\n const {\n waveDuration = 1000,\n categoryField,\n valueField,\n waveRatio = 0.0125,\n waveColor = '#0099ff',\n background = 'linear-gradient(180deg, #0099ff11 100%, #0099ff33 0%)',\n amplitude = 6,\n frequency = 2\n } = config.options;\n const { viewBox } = rawAttribute;\n const width = viewBox.x2 - viewBox.x1;\n const height = viewBox.y2 - viewBox.y1;\n rawAttribute.waveAnimate = {\n duration: waveDuration,\n customParameters: () => ({\n width,\n height\n }),\n custom: WaveAnimate,\n easing: 'linear',\n loop: true\n };\n merge(spec, {\n categoryField,\n valueField,\n circlePacking: {\n style: {\n fill: background,\n texture: 'wave',\n textureColor: waveColor,\n textureOptions: (datum: any) => {\n return {\n amplitude,\n frequency,\n percent: datum[valueField] * waveRatio\n };\n }\n }\n }\n });\n }\n}\n\nexport const WaveScatterRuntimeInstance = new WaveScatterRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterComponent } from '../interface/character-component';\n\nexport class TextRuntime implements IComponentCharacterRuntime {\n type = 'Text';\n\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { options, position } = character.config;\n const layout = getLayoutFromWidget(position, character);\n\n const { graphic = {}, panel = {}, padding } = options;\n\n merge(rawAttribute, panel);\n merge(rawAttribute, layout);\n rawAttribute.padding = padding;\n if (!rawAttribute.textStyle) {\n rawAttribute.textStyle = {};\n }\n merge(rawAttribute.textStyle, graphic);\n }\n}\n\nexport const TextRuntimeInstance = new TextRuntime();\n","import type { ICharacterComponent } from '../interface/character-component';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\n\nexport class LineRuntime implements IComponentCharacterRuntime {\n type = 'Line';\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { width = 1, height = 1 } = rawAttribute;\n rawAttribute.graphic.points = rawAttribute.graphic.points ?? [\n { x: 0, y: 0 },\n { x: width, y: height }\n ];\n }\n}\n\nexport const LineRuntimeInstance = new LineRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterComponent } from '../interface/character-component';\n\nexport class BaseGraphicRuntime implements IComponentCharacterRuntime {\n type = 'BaseGraphic';\n\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { options, position, locked } = character.config;\n const layout = getLayoutFromWidget(position, character);\n\n const { graphic = {}, text = {}, panel = {}, padding } = options;\n\n merge(rawAttribute, panel);\n rawAttribute.padding = padding;\n merge(rawAttribute, layout);\n if (!rawAttribute.textStyle) {\n rawAttribute.textStyle = {};\n }\n merge(rawAttribute.textStyle, text);\n if (!rawAttribute.graphic) {\n rawAttribute.graphic = {};\n }\n if (locked) {\n rawAttribute.pickable = false;\n rawAttribute.childrenPickable = false;\n }\n merge(rawAttribute.graphic, graphic);\n }\n}\n\nexport const BaseGraphicRuntimeInstance = new BaseGraphicRuntime();\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nexport class SeriesSpecRuntime implements IChartCharacterRuntime {\n type = 'SeriesSpec';\n}\n\nexport const SeriesSpecRuntimeInstance = new SeriesSpecRuntime();\n","// vchart 内置的数据序号\nexport const VCHART_DATA_INDEX = '__VCHART_DEFAULT_DATA_INDEX';\n\nexport const EDITOR_SERIES_MARK_STYLE_LEVEL = 90;\nexport const EDITOR_SERIES_MARK_SINGLE_LEVEL = 100;\n\nconst CommonMarkAttribute = ['visible', 'stroke', 'strokeOpacity', 'lineWidth', 'lineDash', 'curveType', 'zIndex'];\nexport const fillMarkAttribute = [...CommonMarkAttribute, 'fill', 'fillOpacity'];\nexport const rectMarkAttribute = [...fillMarkAttribute, 'cornerRadius'];\nexport const arcMarkAttribute = [...fillMarkAttribute, 'cornerRadius', 'centerOffset', 'innerRadius', 'outerRadius'];\nexport const pointMarkAttribute = [...CommonMarkAttribute, 'fill', 'fillOpacity', 'size', 'shape', 'symbolType'];\nexport const UseDefaultSeriesStyle = '_story_series_style_default';\nexport const CommonLabelStyleMap = {\n style: [...fillMarkAttribute, 'font', 'fontSize', 'fontStyle', 'fontWeight', 'underline', 'background'],\n attribute: ['position', 'offset', 'overlap', 'smartInvert']\n};\n\nexport const CommonMarkAttributeMap: { [key: string]: string[] } = {\n arc: arcMarkAttribute,\n rect: rectMarkAttribute,\n symbol: pointMarkAttribute,\n text: CommonLabelStyleMap.style\n};\n\nexport const SeriesMarkStyleMap: {\n // 系列 类型\n [key: string]: {\n // 系列内的 mark name | 或者某种系列层属性\n [key: string]: {\n style: string[]; // mark 的可编辑样式 key 的数组\n attribute: string[]; // mark 的可编辑属性 key 的数组\n };\n };\n} = {\n bar: {\n bar: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n line: {\n line: {\n style: [...CommonMarkAttribute],\n attribute: []\n },\n point: {\n style: pointMarkAttribute,\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n area: {\n line: {\n style: [...CommonMarkAttribute],\n attribute: []\n },\n area: {\n style: [...fillMarkAttribute],\n attribute: []\n },\n point: {\n style: pointMarkAttribute,\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n waterfall: {\n bar: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n pie: {\n pie: {\n style: [...arcMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n funnel: {\n funnel: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n }\n};\n\nexport const FieldLink = '_filedLink_';\nexport const ValueLink = '_valueLink_';\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { IChart } from '@visactor/vchart/esm/chart/interface';\nimport type { ICartesianSeries, ISeries } from '@visactor/vchart';\nimport { isContinuous } from '@visactor/vscale';\nimport { VCHART_DATA_INDEX, ValueLink, FieldLink } from './const';\nimport type { IComponentMatch, IMarkStyle } from '../../../interface/dsl/chart';\n\nexport function GetVChartSeriesWithMatch(vchart: IChart, seriesMatch: IComponentMatch & { type: string }) {\n if (!isValid(seriesMatch.specIndex) && seriesMatch.type) {\n return vchart.getAllSeries().filter(s => s.type === seriesMatch.type)[0];\n }\n if (!isValid(seriesMatch.specIndex)) {\n return null;\n }\n return vchart\n .getAllSeries()\n .find(s =>\n isValid(seriesMatch.usrId) ? s.userId === seriesMatch.usrId : s.getSpecIndex() === seriesMatch.specIndex\n );\n}\n\nexport function isSeriesMatch(seriesMatch: IComponentMatch & { type: string }, series: ISeries) {\n if (isValid(seriesMatch.type) && series.type !== seriesMatch.type) {\n return false;\n }\n if (isValid(seriesMatch.usrId) && series.userId !== seriesMatch.usrId) {\n return false;\n }\n if (isValid(seriesMatch.specIndex) && series.getSpecIndex() !== seriesMatch.specIndex) {\n return false;\n }\n return true;\n}\n\nexport function getSeriesKeyScalesMap(series: ISeries) {\n let axisHelper: any;\n let fields: string[];\n const map: { [key: string]: any } = {};\n if ((series).direction) {\n if ((series).direction === 'vertical') {\n axisHelper = (series).getXAxisHelper();\n fields = (series).fieldX;\n } else {\n axisHelper = (series).getYAxisHelper();\n fields = (series).fieldY;\n }\n if (axisHelper?.getScale) {\n fields.forEach((f, i) => {\n map[f] = axisHelper.getScale(i);\n });\n }\n }\n\n const seriesField = series.getSeriesField();\n if (!map[seriesField]) {\n if (seriesField) {\n if (series.getOption().globalScale.getScale('color')) {\n map[seriesField] = series.getOption().globalScale.getScale('color');\n }\n }\n }\n\n return map;\n}\n\nexport function matchDatumWithScaleMap(\n keys: string[],\n keyValueMap: { [key: string]: number },\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n if (isArray(datum)) {\n datum = datum[0];\n }\n return keys.every(key => {\n const scale = scaleMap[key];\n if (!scale) {\n return keyValueMap[key] === datum[key];\n }\n if (isContinuous(scale.type)) {\n return keyValueMap[VCHART_DATA_INDEX] === datum[VCHART_DATA_INDEX];\n }\n return keyValueMap[key] === scale._index.get(`${datum[key]}`);\n });\n}\n\nexport function isSingleMarkMatch(\n config: IMarkStyle,\n series: ISeries,\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n return (\n isSeriesMatch(config.seriesMatch, series) &&\n matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, scaleMap, datum)\n );\n}\n\nexport function findSingleConfig(\n config: { [key: string]: IMarkStyle },\n series: ISeries,\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n if (!config) {\n return null;\n }\n return Object.values(config).find(v => {\n return isSingleMarkMatch(v, series, scaleMap, datum);\n });\n}\n\nexport function getMarkStyleId(markName: string, itemKeys: string[], itemKeyMap: { [key: string]: any }) {\n return itemKeys.reduce((pre, cur) => {\n return pre + `${FieldLink}${cur}${ValueLink}${itemKeyMap[cur]}`;\n }, markName);\n}\n","import type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport type { IInitOption, ISpec } from '@visactor/vchart';\nimport type { ICharacterConfigBase } from './dsl';\nimport type { IFormatConfig } from './common';\n\nexport const StroyAllDataGroup = '_STORY_ALL_DATA_GROUP';\n\nexport interface IComponentMatch {\n usrId?: string;\n specIndex?: number | 'all'; // all 表示所有\n [key: string]: any;\n}\n\nexport type ITextAttribute = ITextGraphicAttribute;\n\nexport interface IMarkStyle {\n seriesMatch: { type: string } & IComponentMatch;\n markName: string;\n itemKeys: string[]; // 数据匹配维度\n itemKeyMap: { [key: string]: number }; // 匹配维度值\n style: T; // 样式\n}\n\nexport interface IDataGroupStyle {\n // markName , label 也在这里,需要 label runtime 处理\n label?: {\n style?: IMarkStyle['style'];\n formatConfig?: IFormatConfig;\n visible?: boolean; // 是否可见\n [key: string]: any; // 其他可能存在的逻辑配置\n };\n [key: string]: {\n style?: IMarkStyle['style']; // markStyle\n visible?: boolean; // 是否可见\n [key: string]: any; // 其他可能存在的逻辑配置\n };\n}\n\nexport interface IChartCharacterInitOption {\n vchartBoundsMode?: 'clip' | 'auto';\n}\n\n// 模块选择器\n// number => model.getSpecIndex(); 模块的 specIndex\n// * => chart.getAllModelInType(); 所有模块\n// #id => model.userId; 模块的 userId\nexport type ModelSelector = number | `${number}` | '*' | `#${string}`;\n\n// 定义一个类型辅助工具来提取非数组类型\ntype ElementType = T extends (infer U)[] ? U : T;\n\nexport interface ITotalLabelConfig {\n visible?: boolean;\n style?: ITextAttribute;\n formatConfig?: IFormatConfig;\n single?: {\n // 使用 维度key_维度值_&_维度key_维度值 这样的格式构建key,保证唯一性\n [key: string]: {\n itemKeys: string[]; // 数据匹配维度\n itemKeyMap: { [key: string]: number }; // 匹配维度值\n formatConfig?: IFormatConfig;\n style?: ITextAttribute;\n };\n };\n}\n\nexport interface IChartCharacterConfig extends ICharacterConfigBase {\n options: {\n /**\n * 图表spec\n */\n spec?: any;\n /**\n * 初始化参数\n */\n initOption?: IInitOption & IChartCharacterInitOption;\n /**\n * 边距\n */\n padding?: { left: number; top: number; right: number; bottom: number };\n /**\n * 图表容器\n */\n panel?: any;\n /**\n * 数据源\n */\n data?: any;\n /**\n * 标题\n */\n title?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * 图例\n */\n legends?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * axes\n */\n axes?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * series\n */\n series?: {\n [key in ModelSelector]?: Partial>;\n };\n /**\n * 色板\n */\n color?: any;\n /**\n * mark 单元素样式\n */\n markStyle?: {\n [key: string]: IMarkStyle;\n };\n /**\n * label 单元素样式 与 mark 区分开,runtime逻辑完全不同\n */\n labelStyle?: {\n [key: string]: IMarkStyle & {\n formatConfig?: IFormatConfig;\n };\n };\n /**\n * 总计标签\n */\n totalLabel?: {\n // 以 `组` 为单位配置。组的 key 对应 vchart.series.stackValue\n // 默认情况下 vchart 中 stackValue = `${PREFIX}_series_${series.type}`\n // 直角坐标系下的系列 stackValue = `${PREFIX}_series_${this.type}_${axisId}`\n [key: string]: ITotalLabelConfig;\n };\n /**\n * 组样式配置\n */\n dataGroupStyle?: {\n [StroyAllDataGroup]?: IDataGroupStyle; // 全部分组的样式\n [key: string]: IDataGroupStyle; // 某一组\n };\n /**\n * 直接合并的配置\n */\n rootConfig?: Record;\n };\n}\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { ISeries, IVChart } from '@visactor/vchart';\nimport { getSeriesKeyScalesMap, GetVChartSeriesWithMatch, matchDatumWithScaleMap } from './utils';\nimport type { IChartCharacterConfig } from '../../../interface/dsl/chart';\nimport { StroyAllDataGroup } from '../../../interface/dsl/chart';\nimport type { IMark } from '@visactor/vchart/esm/mark/interface';\nimport {\n CommonMarkAttributeMap,\n EDITOR_SERIES_MARK_SINGLE_LEVEL,\n EDITOR_SERIES_MARK_STYLE_LEVEL,\n fillMarkAttribute,\n SeriesMarkStyleMap,\n UseDefaultSeriesStyle\n} from './const';\nimport { isArray, merge, isValid } from '@visactor/vutils';\n\nexport class MarkStyleRuntime implements IChartCharacterRuntime {\n type = 'MarkStyle';\n\n static getMarkStyle(\n mark: IMark,\n dataGroupStyle: IChartCharacterConfig['options']['dataGroupStyle'],\n key: string,\n datum: any,\n seriesField: string,\n markName?: string\n ) {\n if (!dataGroupStyle) {\n return null;\n }\n const value =\n dataGroupStyle[datum[seriesField]]?.[markName ?? mark.name]?.style?.[key] ??\n dataGroupStyle[StroyAllDataGroup]?.[markName ?? mark.name]?.style?.[key];\n\n if (value === UseDefaultSeriesStyle) {\n return null;\n }\n return value;\n }\n\n applyConfigToAttribute(character: ICharacterChart) {\n // visible\n // 如果 dataGroupStyle 中有 visible 配置,在这里添加上 visible = true\n // 具体 visible 的逻辑在下方 afterInitialize 中设置到 mark 上\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n // 没有的话,忽略\n if (!dataGroupStyle) {\n return;\n }\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n const visibleMarkNames: string[] = [];\n // 得到全部被设置过 visible 的 markName\n Object.values(dataGroupStyle).forEach(groupConfig => {\n Object.keys(groupConfig).forEach(markName => {\n if (isValid(groupConfig[markName]?.visible)) {\n visibleMarkNames.push(markName);\n }\n });\n });\n // 设置到 spec 上\n if (spec.series) {\n spec.series.forEach((s: any) => {\n visibleMarkNames.forEach(name => {\n s[name] = s[name] || { visible: true };\n s[name].visible = true;\n });\n });\n } else {\n visibleMarkNames.forEach(name => {\n spec[name] = spec[name] || { visible: true };\n spec[name].visible = true;\n });\n }\n\n return;\n }\n\n afterInitialize(character: ICharacterChart, vchart: IVChart) {\n this._setDataGroupStyle(character, vchart);\n this._setMarkStyle(character, vchart);\n return;\n }\n\n private _setDataGroupStyle(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n\n // seriesStyle\n const seriesList = vchart.getChart().getAllSeries();\n if (!seriesList?.length) {\n return;\n }\n seriesList.forEach(s => {\n // 一个 series 对应一组数据\n // 系列分组key\n const seriesField = s.getSeriesField();\n const groupValueList = s.getRawDataStatisticsByField(seriesField)?.values;\n const groupValue = groupValueList?.[0];\n s.getMarks().forEach(m => {\n // set visible first\n const visible =\n dataGroupStyle[groupValue]?.[m.name]?.visible ?? dataGroupStyle[StroyAllDataGroup]?.[m.name]?.visible;\n if (isValid(visible)) {\n m.setVisible(visible);\n }\n // 系列分组key\n if (groupValueList && groupValueList.length === 1) {\n // 一个 series 对应一组数据 简化处理,优化性能\n if (!dataGroupStyle[groupValue]?.[m.name]?.style && !dataGroupStyle[StroyAllDataGroup]?.[m.name]?.style) {\n return;\n }\n const markStyle = merge(\n {},\n dataGroupStyle[StroyAllDataGroup]?.[m.name]?.style ?? {},\n dataGroupStyle[groupValue]?.[m.name]?.style ?? {}\n );\n if (Object.keys(markStyle).length === 0) {\n return;\n }\n m.setStyle(\n {\n ...markStyle\n },\n 'normal',\n EDITOR_SERIES_MARK_STYLE_LEVEL\n );\n } else {\n // 如果有 style map 的话, 只有这些属性可以被设置\n const styleKeys =\n SeriesMarkStyleMap[s.type]?.[m.name]?.style ?? CommonMarkAttributeMap[m.type] ?? fillMarkAttribute;\n\n // 多组数据在同一个系列,使用后处理\n styleKeys.forEach(key => {\n if (!m.stateStyle.normal?.[key]) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n m.setAttribute(key, (): any => undefined);\n }\n\n m.setPostProcess(key, (result, datum) => {\n const temp = MarkStyleRuntime.getMarkStyle(m, dataGroupStyle, key, datum, seriesField) ?? result;\n if (s.type === 'area' && key === 'stroke' && m.name === 'area') {\n if (!isArray(temp)) {\n return [temp, false, false, false];\n }\n }\n return temp;\n });\n });\n }\n });\n });\n }\n\n private _setMarkStyle(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const markStyle = config.options?.markStyle;\n if (!markStyle) {\n return;\n }\n const chart = vchart.getChart();\n Object.keys(markStyle).forEach(key => {\n const config = markStyle[key];\n const series = GetVChartSeriesWithMatch(chart, config.seriesMatch) as ISeries;\n if (!series) {\n return;\n }\n const mark = series.getMarkInName(config.markName);\n if (!mark) {\n return;\n }\n const keyScaleMap = getSeriesKeyScalesMap(series);\n const stateKey = key;\n mark.setStyle(\n {\n ...config.style\n },\n stateKey,\n EDITOR_SERIES_MARK_SINGLE_LEVEL\n );\n chart.updateState({\n [stateKey]: {\n filter: (datum: any) => {\n return matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, keyScaleMap, datum);\n },\n level: 10\n }\n });\n });\n }\n}\n\nexport const MarkStyleRuntimeInstance = new MarkStyleRuntime();\n","import { ThemeManager } from './../../../theme/theme-manager';\nimport { array, isNil, isValid, merge } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_TOTAL,\n type ISeries,\n type IVChart,\n type IRegion\n} from '@visactor/vchart';\nimport type { Label as VChartLabelComponent } from '@visactor/vchart/esm/component/label/label';\nimport type { ILabelInfo } from '@visactor/vchart/esm/component/label';\nimport { MarkStyleRuntime } from './mark-style';\nimport { findSingleConfig, getSeriesKeyScalesMap, isSeriesMatch, matchDatumWithScaleMap } from './utils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { IChartCharacterConfig, ITextAttribute } from '../../../interface/dsl/chart';\nimport { StroyAllDataGroup } from '../../../interface/dsl/chart';\nimport type { IMark } from '@visactor/vchart/esm/mark/interface';\nimport { CommonMarkAttributeMap, fillMarkAttribute, SeriesMarkStyleMap } from './const';\nimport { formatConfigKey } from '../../../constants/format';\nimport type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { FormatValueFunction } from '../../common/utils/format';\nimport { getTextWithFormat } from '../../common/utils/format';\nimport { validNumber } from '../../../utils/type';\nimport { getRegionStackGroup } from '@visactor/vchart/esm/util';\nimport { stack } from '@visactor/vchart/esm/util';\nexport class LabelStyleRuntime implements IChartCharacterRuntime {\n type = 'LabelStyle';\n\n applyConfigToAttribute(character: ICharacterChart) {\n // 设置 visible 为 true 关闭标签能力放到分组上\n // 当前 dataGroupStyle 中有 label.visible 配置,在这里添加上 visible = true\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n let hasLabelVisible = false;\n Object.keys(dataGroupStyle).forEach(key => {\n if (hasLabelVisible) {\n return;\n }\n if (isValid(dataGroupStyle[key]?.label?.visible)) {\n hasLabelVisible = true;\n }\n });\n // 如果没有设置 visible,不处理\n if (!hasLabelVisible) {\n return;\n }\n // 否则全部设置为 true\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n if (!spec.label) {\n spec.label = { visible: true };\n } else {\n spec.label.visible = true;\n }\n spec.series?.forEach((s: any) => {\n if (!s.label) {\n s.label = { visible: true };\n } else {\n s.label.visible = true;\n }\n });\n }\n\n /**\n * 处理 fill stroke 之外的样式\n * format 在这里处理,否则防重叠会无法正确使用format之后的值进行计算\n * @param character\n * @param vchart\n * @returns\n */\n afterInitialize(character: ICharacterChart, vchart: IVChart) {\n const labelComponent = vchart.getChart().getComponentsByKey('label')[0] as VChartLabelComponent;\n if (!labelComponent) {\n return;\n }\n this._setDataGroupStyle(character, vchart, labelComponent);\n }\n\n private _setDataGroupStyle(character: ICharacterChart, vchart: IVChart, labelComponent: VChartLabelComponent) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n\n const formatValue = ThemeManager.getAttribute(\n [character.theme, character.story.theme],\n 'character.VChart.runtime.functions.formatValue'\n );\n\n const singleLabelStyleKeys: { [key: string]: boolean } = {};\n const hasLabelStyle = !!config.options?.labelStyle;\n if (hasLabelStyle) {\n Object.values(config.options?.labelStyle).forEach(ls => {\n Object.keys(ls.style).forEach(k => (singleLabelStyleKeys[k] = true));\n });\n }\n\n labelComponent.getMarks().forEach(componentMark => {\n // @ts-ignore\n const infos = labelComponent._labelComponentMap.get(componentMark)();\n if (!infos) {\n return;\n }\n array(infos).forEach(info => {\n const { series, labelMark } = info as { series: ISeries; labelMark: IMark };\n const keyScaleMap = getSeriesKeyScalesMap(series);\n // 先看当前系列是否存在单标签样式\n const hasSingleStyle = hasLabelStyle\n ? isValid(\n Object.keys(config.options.labelStyle).find(k =>\n isSeriesMatch(config.options.labelStyle[k].seriesMatch, series)\n )\n )\n : false;\n // 系列分组key\n const seriesField = series.getSeriesField();\n // style Map 是 能设置的样式\n const styleKeys =\n SeriesMarkStyleMap[series.type]?.label?.style ?? CommonMarkAttributeMap.text ?? fillMarkAttribute;\n\n // 多组数据在同一个系列,使用vchart mark后处理。这里只有常规属性,如果发现某些属性设置不上,考虑styleKeys缺少\n styleKeys.forEach((key: keyof ITextAttribute) => {\n // fill 和 stroke 使用vrender后处理\n if (key === 'fill' || key === 'stroke') {\n return;\n }\n if (!labelMark.stateStyle.normal?.[key]) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n labelMark.setAttribute(key, (): any => undefined);\n }\n // 如果当前系列是有单标签样式的\n if (singleLabelStyleKeys[key] && hasSingleStyle) {\n labelMark.setPostProcess(key, (result, datum) => {\n return (\n // 如果匹配到单标签样式\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum)?.style?.[key] ??\n // 否则匹配组样式\n MarkStyleRuntime.getMarkStyle(labelMark, dataGroupStyle, key, datum, seriesField, 'label') ??\n result\n );\n });\n } else {\n // 没有单标签样式的\n // 直接匹配组样式\n labelMark.setPostProcess(key, (result, datum) => {\n return (\n MarkStyleRuntime.getMarkStyle(labelMark, dataGroupStyle, key, datum, seriesField, 'label') ?? result\n );\n });\n }\n });\n\n // format\n // 如果是有单标签样式的\n if (hasSingleStyle) {\n labelMark.setPostProcess('text', (result, datum) => {\n const formatConfig = (\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum) as unknown as {\n [formatConfigKey]: IFormatConfig;\n }\n )?.[formatConfigKey];\n if (isValid(formatConfig)) {\n return (\n getLabelTextWithFormat(datum, seriesField, series, vchart, character, formatConfig, formatValue) ??\n result\n );\n }\n // 否则匹配组样式\n return (\n getTextWithGroupFormat(datum, seriesField, series, vchart, character, dataGroupStyle, formatValue) ??\n result\n );\n });\n } else {\n // 没有单标签样式的\n // 直接匹配组样式\n labelMark.setPostProcess('text', (result, datum) => {\n return (\n getTextWithGroupFormat(datum, seriesField, series, vchart, character, dataGroupStyle, formatValue) ??\n result\n );\n });\n }\n\n // format结束\n\n // visible 单独设置\n if (!labelMark.stateStyle.normal?.visible) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n labelMark.setAttribute('visible', (): any => undefined);\n }\n const spec = config.options.spec;\n labelMark.setPostProcess('visible', (result, datum) => {\n return (\n // 如果匹配到单标签样式\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum)?.style?.visible ??\n // 否则匹配组样式\n dataGroupStyle[datum[seriesField]]?.label?.visible ?? // 单组 visible\n dataGroupStyle[StroyAllDataGroup]?.label?.visible ?? // 全部组visible\n spec?.series?.[series.getSpecIndex()]?.label?.visible ?? // 单系列 visible\n spec?.label?.visible ?? // 全局 visible\n result\n );\n });\n // visible 结束\n });\n });\n }\n\n /**\n * 只处理 fill stroke 值,\n * 因为智能反色逻辑会修改它们,在 afterInitialize 中设置无效。\n * @param character\n * @param vchart\n * @returns\n */\n beforeVRenderDraw(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n const labelStyle = config.options?.labelStyle;\n if (!labelStyle && !dataGroupStyle) {\n return;\n }\n\n const labelComponent = vchart.getChart().getComponentsByKey('label')[0] as VChartLabelComponent;\n if (!labelComponent) {\n return;\n }\n // 遍历mark\n labelComponent.getMarks().forEach(componentMark => {\n // @ts-ignore\n const infos = labelComponent._labelComponentMap.get(componentMark)();\n array(infos).forEach(info => {\n const { series: series } = info as { series: ISeries; labelMark: IMark };\n const keyScaleMap = getSeriesKeyScalesMap(series);\n const labelGraphics: IGraphic[] = [];\n findLabelGraphicWithInfo(componentMark.getProduct().graphicItem, info, labelGraphics);\n\n // 先设置分组样式\n if (dataGroupStyle) {\n const seriesField = series.getSeriesField();\n const groupValueList = series.getRawDataStatisticsByField(seriesField)?.values as string[];\n groupValueList.forEach(groupValue => {\n // 是否存在分组样式\n if (!dataGroupStyle[groupValue]?.label?.style && !dataGroupStyle[StroyAllDataGroup]?.label?.style) {\n return;\n }\n const style = merge(\n {},\n dataGroupStyle[StroyAllDataGroup]?.label?.style ?? {},\n dataGroupStyle[groupValue]?.label?.style ?? {}\n );\n // 只设置 fill 和 stroke 颜色\n if (!isValid(style.fill) && !isValid(style.stroke)) {\n return;\n }\n const labels = labelGraphics.filter(l => (l.attribute as any).data[seriesField] === groupValue);\n labels.forEach(l => {\n isValid(style.fill) && l.setAttribute('fill', style.fill);\n isValid(style.stroke) && l.setAttribute('stroke', style.stroke);\n });\n });\n }\n\n // 再设置单标签样式\n if (labelStyle) {\n const findKeys = !!labelStyle\n ? Object.keys(labelStyle).filter(k => isSeriesMatch(labelStyle[k].seriesMatch, series))\n : null;\n findKeys.forEach(findKey => {\n const item = labelStyle[findKey];\n // 只设置 fill 和 stroke 颜色\n if (!isValid(item.style.fill) && !isValid(item.style.stroke)) {\n return;\n }\n // 找到对应的标签\n const label = labelGraphics.find(l =>\n matchDatumWithScaleMap(item.itemKeys, item.itemKeyMap, keyScaleMap, (l.attribute as any).data as any)\n );\n if (!label) {\n return;\n }\n isValid(item.style.fill) && label.setAttribute('fill', item.style.fill);\n isValid(item.style.stroke) && label.setAttribute('stroke', item.style.stroke);\n });\n }\n });\n });\n return;\n }\n}\n\n/**\n * 将标签graphic放入数组\n * @param g graphic 父节点\n * @param list 将graphic放入数组\n * @returns\n */\nfunction _collectAllLabelGraphic(g: IGraphic, list: IGraphic[]) {\n if (g.type === 'text' || g.type === 'richtext') {\n list.push(g);\n return;\n }\n if (g.children) {\n g.children.forEach((child: IGraphic) => _collectAllLabelGraphic(child, list));\n }\n}\n\n/**\n * 找到对应的全部标签绘图节点\n * @param g\n * @param info\n * @param list\n * @returns\n */\nfunction findLabelGraphicWithInfo(g: IGraphic, info: ILabelInfo, list: IGraphic[]) {\n const matchLabel = g.children[0].children.find(\n // @ts-ignore\n (c: IGraphic) => c.attribute.baseMarkGroupName === info.baseMark.getProduct().graphicItem.name\n );\n if (!matchLabel) {\n return;\n }\n _collectAllLabelGraphic(matchLabel, list);\n}\n\n// 得到标签经过分组配置中的 format 处理后的值\nfunction getTextWithGroupFormat(\n datum: any,\n seriesField: string,\n series: ISeries,\n vchart: IVChart,\n character: ICharacterChart,\n dataGroupStyle: IChartCharacterConfig['options']['dataGroupStyle'],\n formatValue: FormatValueFunction\n) {\n if (!dataGroupStyle) {\n return null;\n }\n const formatConfig =\n dataGroupStyle[datum[seriesField]]?.label?.formatConfig ?? dataGroupStyle[StroyAllDataGroup]?.label?.formatConfig;\n\n if (!formatConfig) {\n return null;\n }\n\n return getLabelTextWithFormat(datum, seriesField, series, vchart, character, formatConfig, formatValue);\n}\n\n// 得到标签经过 format 处理后的值\nfunction getLabelTextWithFormat(\n datum: any,\n seriesField: string,\n series: ISeries,\n vchart: IVChart,\n character: ICharacterChart,\n formatConfig: IFormatConfig,\n formatValue: FormatValueFunction\n) {\n // 去掉非百分百情况下的 percentdiff 内容\n const formatContents = array(formatConfig.content).filter(content =>\n series.getPercent() ? true : content !== 'percentdiff'\n );\n const opt = {\n datum,\n seriesField,\n series,\n vchart,\n character\n };\n return getTextWithFormat(formatConfig, formatContents, getSeriesContentValue, formatValue, opt);\n}\n\nfunction getSeriesContentValue(\n {\n datum,\n seriesField,\n series,\n vchart\n }: {\n datum: any;\n seriesField: string;\n series: ISeries;\n vchart: IVChart;\n },\n content: FormatContentType\n) {\n const dimensionField = series.getDimensionField()[0];\n const measureField = series.getMeasureField()[0];\n switch (content) {\n case 'dimension':\n return datum[dimensionField];\n case 'abs':\n return Math.abs(datum[measureField]);\n case 'percentage':\n // TODO: i18n\n return validNumber(computeSeriesPercentage(vchart, datum, series)) ?? '百分比';\n case 'series':\n return datum[seriesField];\n case 'value':\n default:\n return Number.parseFloat(datum[measureField]);\n }\n}\n\n// 计算系列百分比\nfunction computeSeriesPercentage(vchart: IVChart, datum: any, series: ISeries) {\n // TODO: calculate stack & percentage before format method\n // calculate percentage for specified series\n if (\n series.type === 'pie' ||\n series.type === 'rose' ||\n series.type === 'scatter' ||\n series.type === 'map' ||\n series.type === 'funnel'\n ) {\n const data: any[] = series.getViewData().latestData;\n const measureField = series.getMeasureField()[0];\n const totalValue = data.reduce((sum: number, d: any) => {\n return sum + Number.parseFloat(d[measureField]);\n }, 0);\n const percentage = Number.parseFloat(datum[measureField]) / totalValue;\n return percentage * 100;\n }\n // TODO: unite the percentage calculation for different series\n // for now, line & waterfall & group bar series cannot get correct stack data\n if (\n series.type === 'line' ||\n series.type === 'waterfall' ||\n // group bar chart\n (series.type === 'bar' && series.getDimensionField().length > 1)\n ) {\n const seriesAxisOrient = series.getSpec()._editor_axis_orient;\n const allSeries = vchart\n .getChart()\n .getAllSeries()\n .filter((s: ISeries) => s.getSpec()._editor_axis_orient === seriesAxisOrient);\n const data = allSeries.reduce((data, series) => {\n return data.concat(series.getViewData().latestData);\n }, []);\n const dimensionField = series.getDimensionField()[0];\n const measureField = series.getMeasureField()[0];\n const totalValue = data.reduce((sum: number, d: any) => {\n if (d[dimensionField] === datum[dimensionField]) {\n const parsedValue = Number.parseFloat(d[measureField]);\n return sum + (Number.isNaN(parsedValue) ? 0 : parsedValue);\n }\n return sum;\n }, 0);\n const currentValue = Number.parseFloat(datum[measureField]);\n const percentage = Number.isNaN(currentValue) ? 0 : currentValue / totalValue;\n return percentage * 100;\n }\n // calculate stack\n const chart = vchart.getChart();\n chart.getAllRegions().forEach((region: IRegion) => {\n const stackValueGroup = getRegionStackGroup(region, true);\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), true);\n }\n }\n });\n\n if (!isNil(datum[STACK_FIELD_TOTAL])) {\n return ((datum[STACK_FIELD_END] - datum[STACK_FIELD_START]) / datum[STACK_FIELD_TOTAL]) * 100;\n }\n if (!isNil(datum[STACK_FIELD_END_PERCENT]) && !isNil(datum[STACK_FIELD_START_PERCENT])) {\n return (datum[STACK_FIELD_END_PERCENT] - datum[STACK_FIELD_START_PERCENT]) * 100;\n }\n return NaN;\n}\n\nexport const LabelStyleRuntimeInstance = new LabelStyleRuntime();\n","import { ThemeManager } from './../../../theme/theme-manager';\nimport { array, isValid, merge, isValidNumber } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { IVChart } from '@visactor/vchart';\nimport { type ISeries, PREFIX } from '@visactor/vchart';\nimport type { ITotalLabelConfig } from '../../../interface/dsl/chart';\nimport type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { FormatValueFunction } from '../../common/utils/format';\nimport { getTextWithFormat } from '../../common/utils/format';\nimport { VSTORY_PREFIX } from '../../../constants/config';\nimport { getSeriesKeyScalesMap, matchDatumWithScaleMap } from './utils';\nimport type { IText } from '@visactor/vrender-core';\nimport { SeriesAxisOrientKey } from '../../../constants/character';\n\nconst totalLabelTempValueKey = `${VSTORY_PREFIX}_totalLabel`;\n\n// 这里的到的 stackValue 与 vchart 中并不一致\n// 直角坐标系下 vchart series 的默认 stackValue 使用了对应的轴 Id 这个轴Id在spec生成阶段无法获取搭配\n// vchart 直角坐标系下默认 stackValue = `${PREFIX}_series_${this.type}_${axisId}`\nexport function getStackValueFromSeriesSpec(seriesSpec: any) {\n if (seriesSpec.stackValue) {\n return seriesSpec.stackValue;\n }\n return `${PREFIX}_series_${seriesSpec.type}_${seriesSpec[SeriesAxisOrientKey]}`;\n}\n\nexport class TotalLabelRuntime implements IChartCharacterRuntime {\n type = 'TotalLabel';\n\n applyConfigToAttribute(character: ICharacterChart) {\n // 将总计标签的 visible 配置和组样式设置到 spec 上\n // 设置 visible 为 true 关闭标签能力放到分组上\n // 当前 dataGroupStyle 中有 label.visible 配置,在这里添加上 visible = true\n const config = character.getRuntimeConfig().config;\n const totalLabel = config.options?.totalLabel;\n if (!totalLabel) {\n return;\n }\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n\n const formatValue = ThemeManager.getAttribute(\n [character.theme, character.story.theme],\n 'character.VChart.runtime.functions.formatValue'\n );\n\n if (spec.series) {\n // 符合配置的系列都要设置 totalLabel ,因为一组 totalLabel 可能是多个不同系列的 totalLabel 组成的\n spec.series?.forEach((s: any) => {\n const stackValue = getStackValueFromSeriesSpec(s);\n if (!totalLabel[stackValue]) {\n return;\n }\n this._mergeTotalLabelConfigToSpec(s, totalLabel[stackValue], formatValue);\n });\n } else {\n // 如果 spec 中没有 series\n // 如果 spec 上有stackValue\n if (spec.stackValue) {\n if (!totalLabel[spec.stackValue]) {\n return;\n }\n this._mergeTotalLabelConfigToSpec(spec, totalLabel[spec.stackValue], formatValue);\n } else {\n // 如果 spec 上没有, 那么将 totalLabel 中的第一个key作为stackValue 设置到 spec 上\n const stackValue = Object.keys(totalLabel)[0];\n if (!isValid(stackValue)) {\n return;\n }\n spec.stackValue = stackValue;\n this._mergeTotalLabelConfigToSpec(spec, totalLabel[stackValue], formatValue);\n }\n }\n }\n\n private _mergeTotalLabelConfigToSpec(\n spec: any,\n totalLabelConfig: ITotalLabelConfig,\n formatValue: FormatValueFunction\n ) {\n spec.totalLabel = spec.totalLabel ?? {};\n if (totalLabelConfig.visible) {\n spec.totalLabel.visible = totalLabelConfig.visible;\n }\n if (totalLabelConfig.style) {\n spec.totalLabel.style = spec.totalLabel.style ?? {};\n merge(spec.totalLabel.style, totalLabelConfig.style);\n }\n this._doFormat(totalLabelConfig, spec, formatValue);\n }\n\n private _doFormat(totalLabelConfig: ITotalLabelConfig, spec: any, formatValue: FormatValueFunction) {\n if (!totalLabelConfig.formatConfig && !totalLabelConfig.single) {\n return;\n }\n spec.totalLabel.formatMethod = (value: number, datum: any, ctx: { series: ISeries }) => {\n const keyScaleMap = getSeriesKeyScalesMap(ctx.series);\n let result: number | string | string[] = value;\n // 先进行单个匹配\n // 在这里处理可以避免放重叠开启后无法正常躲避\n if (\n Object.keys(totalLabelConfig.single).some(k => {\n const config = totalLabelConfig.single[k];\n config.itemKeys;\n if (matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, keyScaleMap, datum)) {\n // 匹配成功 设置结果\n result = getLabelTextWithFormat(value, datum, ctx.series, config.formatConfig, formatValue);\n return true;\n }\n return false;\n })\n ) {\n // 返回单个匹配结果\n return result;\n }\n // 整组匹配\n return getLabelTextWithFormat(value, datum, ctx.series, totalLabelConfig.formatConfig, formatValue);\n };\n }\n\n /**\n * 处理单个总计标签样式\n * @param character\n * @param vchart\n * @returns\n */\n beforeVRenderDraw(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const totalLabel = config.options?.totalLabel;\n if (!totalLabel) {\n return;\n }\n if (Object.values(totalLabel).every(v => !v.single)) {\n return;\n }\n\n const components = vchart.getChart().getComponentsByKey('totalLabel');\n components.forEach(component => {\n // @ts-ignore\n const series = component._getSeries();\n const totalLabelConfig = totalLabel[getStackValueFromSeriesSpec(series.getSpec())];\n if (!totalLabelConfig?.single) {\n return;\n }\n const keyScaleMap = getSeriesKeyScalesMap(series);\n component.getVRenderComponents().forEach(dataLabel => {\n dataLabel.getElementsByName('label').forEach(label => {\n (label.getElementsByType('text') as IText[]).forEach(text => {\n Object.values(totalLabelConfig.single).forEach(singleConfig => {\n if (\n matchDatumWithScaleMap(\n singleConfig.itemKeys,\n singleConfig.itemKeyMap,\n keyScaleMap,\n (text.attribute as any).data\n )\n ) {\n text.setAttributes(singleConfig.style);\n }\n });\n });\n });\n });\n });\n return;\n }\n}\n\n// 得到标签经过 format 处理后的值\nfunction getLabelTextWithFormat(\n value: number,\n datum: any,\n series: ISeries,\n formatConfig: IFormatConfig,\n formatValue: FormatValueFunction\n) {\n const opt = {\n value,\n datum,\n series\n };\n return getTextWithFormat(formatConfig, array(formatConfig.content), getTotalContentValue, formatValue, opt);\n}\n\nfunction getTotalContentValue(\n {\n value,\n datum,\n series\n }: {\n value: number;\n datum: any;\n series: ISeries;\n },\n content: FormatContentType\n) {\n const dimensionField = series.getDimensionField()[0];\n switch (content) {\n case 'dimension':\n return datum[dimensionField];\n case 'percentage':\n return computeTotalPercentage(value, series);\n case 'value':\n default:\n return value;\n }\n}\n\n// 计算系列百分比\nfunction computeTotalPercentage(value: any, series: ISeries) {\n const chart = series.getChart();\n // 先获取全部值总合\n let totalValue = 1;\n if (isValidNumber(chart.getSpec()[totalLabelTempValueKey])) {\n totalValue = chart.getSpec()[totalLabelTempValueKey];\n } else {\n totalValue = series\n .getChart()\n .getAllSeries()\n .reduce((totalValue, series) => {\n const data: any[] = series.getViewData().latestData;\n const measureField = series.getMeasureField()[0];\n const seriesTotalValue = data.reduce((sum: number, d: any) => {\n return sum + Number.parseFloat(d[measureField]);\n }, 0);\n return totalValue + seriesTotalValue;\n }, 0);\n chart.getSpec()[totalLabelTempValueKey] = totalValue;\n }\n if (totalValue === 0) {\n return 0;\n }\n return (value / totalValue) * 100;\n}\n\nexport const TotalLabelRuntimeInstance = new TotalLabelRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../../chart/interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterChart } from '../../chart/interface/character-chart';\nexport class CommonLayoutRuntime implements IChartCharacterRuntime {\n type = 'CommonLayout';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const config = character.getRuntimeConfig().config;\n const layoutData = getLayoutFromWidget(config.position, character);\n const viewBox = {\n x1: 0,\n x2: layoutData.width,\n y1: 0,\n y2: layoutData.height\n };\n rawAttribute.viewBox = viewBox;\n rawAttribute.renderCanvas = character.canvas.getNativeCanvas();\n\n merge(rawAttribute, layoutData);\n\n // panel 样式\n const { panel } = config.options;\n merge(rawAttribute.panel, panel, layoutData);\n }\n}\n\nexport const CommonLayoutRuntimeInstance = new CommonLayoutRuntime();\n","import { array } from '@visactor/vutils';\nimport type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class CommonSpecRuntime implements ITableCharacterRuntime {\n type = 'TableCommonSpec';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n spec.canvas = character.canvas.getNativeCanvas();\n spec.animation = false;\n // 编辑模式关闭\n // if (isEditor) {\n // disable select cell visible for editor mode\n spec.select = Object.assign({}, spec.select ?? {}, {\n makeSelectCellVisible: false\n });\n // spec.hover = spec.hover ?? {};\n // // spec.select.disableSelect = true;\n // // spec.hover.disableHover = true;\n // spec.columnResizeMode = 'none';\n // spec.rowResizeMode = 'none';\n /** 控制拖拽表头移动位置顺序开关 */\n // spec.dragHeaderMode = 'none';\n\n if (spec.legends) {\n array(spec.legends).forEach(l => {\n l.interactive = false;\n });\n }\n // }\n // 风神的特殊位置设置去掉,避免布局小数\n delete spec.theme?.cellInnerBorder;\n delete spec.theme?.cellBorderClipDirection;\n delete spec.theme?._contentOffset;\n delete spec.customConfig;\n\n spec.disableDirtyBounds = false;\n spec.mode = 'desktop-browser';\n spec.dpr = window.devicePixelRatio;\n spec.interactive = true;\n }\n}\n\nexport const CommonSpecRuntimeInstance = new CommonSpecRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class CellStyleRuntime implements ITableCharacterRuntime {\n type = 'CellStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const config = character.getRuntimeConfig().config;\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n if (!config.options.cellStyle) {\n return;\n }\n\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n\n spec.customCellStyle = spec.customCellStyle ?? [];\n spec.customCellStyleArrangement = spec.customCellStyleArrangement ?? [];\n Object.values(config.options.cellStyle).forEach(({ col, row, style }) => {\n if (!style) {\n return;\n }\n const customStyleId = `__story_cell_Style_${col}_${row}`;\n vTable.registerCustomCellStyle(customStyleId, style);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: vTable.getCellRange(col + rowHeaderCount, row + colHeaderCount)\n },\n customStyleId\n );\n });\n }\n}\n\nexport const CellStyleRuntimeInstance = new CellStyleRuntime();\n","import { isValidNumber } from '@visactor/vutils';\nimport type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class ColWidthRuntime implements ITableCharacterRuntime {\n type = 'ColWidth';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.colWidth && Object.keys(options.colWidth).length > 0) {\n // record visible indexes\n const lastColVisible = Object.values(options.colVisible ?? {}) ?? [];\n const visibleIndexes: number[] = [];\n for (let i = 0; i <= lastColVisible.length + spec.columns.length; i += 1) {\n const colVisible = lastColVisible[i];\n if (colVisible === false) {\n continue;\n }\n visibleIndexes.push(i);\n }\n spec.columns = spec.columns.map((column: any, index: number) => {\n const colWidth = options.colWidth[visibleIndexes[index]];\n if (!isValidNumber(colWidth)) {\n return column;\n }\n return Object.assign({}, column, { width: colWidth });\n });\n }\n }\n}\n\nexport const ColWidthRuntimeInstance = new ColWidthRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class RowHeightRuntime implements ITableCharacterRuntime {\n type = 'RowHeight';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.rowHeight && Object.keys(options.rowHeight).length > 0) {\n spec.customComputeRowHeight = (args: { row: number }) => {\n return options.rowHeight[args.row] ?? undefined;\n };\n }\n }\n}\n\nexport const RowHeightRuntimeInstance = new RowHeightRuntime();\n","export function getTableTypeFromSpec(spec: any): 'ListTable' | 'PivotTable' | 'PivotChart' {\n if (!spec.indicators) {\n return 'ListTable';\n }\n // 如果有图表\n if (spec.indicators.some((i: { chartSpec: object }) => !!i.chartSpec)) {\n return 'PivotChart';\n }\n return 'PivotTable';\n}\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { getTableTypeFromSpec } from '../../../utils/table';\n\nexport class TableTypeRuntime implements ITableCharacterRuntime {\n type = 'TableType';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n rawAttribute.tableType = getTableTypeFromSpec(rawAttribute.spec);\n }\n}\n\nexport const TableTypeRuntimeInstance = new TableTypeRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { isValid, merge } from '@visactor/vutils';\n\nexport class TableThemeRuntime implements ITableCharacterRuntime {\n type = 'TableTheme';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n\n if (!spec.theme) {\n spec.theme = {};\n }\n if (isValid(options.theme)) {\n spec.theme = merge(spec.theme, options.theme);\n }\n // 设置明细表的表头 & body 样式\n if (tableType === 'ListTable') {\n if (options.theme?.headerStyle && spec.columns) {\n spec.columns.forEach((col: any) => {\n if (!col.headerStyle) {\n return;\n }\n col.headerStyle = merge(col.headerStyle, options.theme.headerStyle);\n });\n }\n if (options.theme?.bodyStyle && spec.columns) {\n spec.columns.forEach((col: any) => {\n if (!col.style) {\n return;\n }\n col.style = merge(col.style, options.theme.bodyStyle);\n });\n }\n }\n }\n}\n\nexport const TableThemeRuntimeInstance = new TableThemeRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { isValid } from '@visactor/vutils';\n\nexport class ShowHeaderRuntime implements ITableCharacterRuntime {\n type = 'ShowHeader';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (isValid(options.showHeader)) {\n spec.showHeader = options.showHeader !== false;\n }\n }\n}\n\nexport const ShowHeaderRuntimeInstance = new ShowHeaderRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class ColVisibleRuntime implements ITableCharacterRuntime {\n type = 'ColVisible';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.colVisible && Object.keys(options.colVisible).length > 0) {\n spec.columns = spec.columns.map((column: any, index: number) => {\n const colVisible = options.colVisible[index];\n const hide = colVisible === false;\n return Object.assign({}, column, { hide });\n });\n }\n }\n}\n\nexport const ColVisibleRuntimeInstance = new ColVisibleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class RowVisibleRuntime implements ITableCharacterRuntime {\n type = 'RowVisible';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.rowVisible && Object.keys(options.rowVisible).length > 0) {\n const records: any[] = [];\n const headerRowVisible = options.rowVisible[-1];\n spec.showHeader = headerRowVisible !== false && options.showHeader !== false;\n spec.records.forEach((record: any, index: number) => {\n const rowVisible = options.rowVisible[index];\n if (rowVisible === false) {\n return;\n }\n records.push(record);\n });\n spec.records = records;\n }\n }\n}\n\nexport const RowVisibleRuntimeInstance = new RowVisibleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ColStyleRuntime implements ITableCharacterRuntime {\n type = 'ColStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const rowCount = vTable.rowCount;\n\n if (options.colStyle && Object.keys(options.colStyle).length > 0) {\n Object.keys(options.colStyle).forEach(key => {\n const col = parseInt(key, 10);\n const styleKey = `colStyle-${col}`;\n const colStyle = options.colStyle[col];\n if (!colStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, colStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n col: col + rowHeaderCount,\n row: 0\n },\n end: {\n col: col + rowHeaderCount,\n row: rowCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ColStyleRuntimeInstance = new ColStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class RowStyleRuntime implements ITableCharacterRuntime {\n type = 'RowStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const colCount = vTable.colCount;\n\n if (options.rowStyle && Object.keys(options.rowStyle).length > 0) {\n Object.keys(options.rowStyle).forEach(key => {\n const row = parseInt(key, 10);\n const styleKey = `rowStyle-${row}`;\n const rowStyle = options.rowStyle[row];\n if (!rowStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, rowStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n row: row + colHeaderCount,\n col: 0\n },\n end: {\n row: row + colHeaderCount,\n col: colCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const RowStyleRuntimeInstance = new RowStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ContentColStyleRuntime implements ITableCharacterRuntime {\n type = 'ContentColStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const rowCount = vTable.rowCount;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n\n if (options.contentColStyle && Object.keys(options.contentColStyle).length > 0) {\n Object.keys(options.contentColStyle).forEach(key => {\n const col = parseInt(key, 10);\n const styleKey = `contentColStyle-${col}`;\n const colStyle = options.contentColStyle[col];\n if (!colStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, colStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n col: col + rowHeaderCount,\n row: colHeaderCount\n },\n end: {\n col: col + rowHeaderCount,\n row: rowCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ContentColStyleRuntimeInstance = new ContentColStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ContentRowStyleRuntime implements ITableCharacterRuntime {\n type = 'ContentRowStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const colCount = vTable.colCount;\n\n if (options.contentRowStyle && Object.keys(options.contentRowStyle).length > 0) {\n Object.keys(options.contentRowStyle).forEach(key => {\n const row = parseInt(key, 10);\n const styleKey = `contentRowStyle-${row}`;\n const rowStyle = options.contentRowStyle[row];\n if (!rowStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, rowStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n row: row + colHeaderCount,\n col: rowHeaderCount\n },\n end: {\n row: row + colHeaderCount,\n col: colCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ContentRowStyleRuntimeInstance = new ContentRowStyleRuntime();\n","import { RankingBarCharacter, registerRankingBarTemp } from '../character/chart/character/rankingBar';\nimport { ScatterBarCharacter } from '../character/chart/character/scatter-bar';\nimport { VChartCharacter, registerAllVChart } from '../character/chart/character/vchart';\nimport { WaveScatterCharacter } from '../character/chart/character/wave-scatter';\nimport { ArcCharacter } from '../character/component/character/arc';\nimport { ImageCharacter } from '../character/component/character/image';\nimport { LineCharacter } from '../character/component/character/line';\nimport { PolygonCharacter } from '../character/component/character/polygon';\nimport { RectCharacter } from '../character/component/character/rect';\nimport { ShapeCharacter } from '../character/component/character/shape';\nimport { TextCharacter } from '../character/component/character/text';\nimport { TimelineCharacter } from '../character/component/character/timeline';\nimport { UnitCharacter } from '../character/component/character/unit';\nimport { StoryFactory } from '../utils/factory';\nimport { VTableCharacter } from '../character/table/character/vtable';\nimport { PivotChartCharacter } from '../character/table/character/pivot-chart';\nimport { RuntimeStore } from '../store';\nimport { CommonSpecRuntimeInstance as ChartCommonSpecRuntimeInstance } from '../character/chart/runtime/common-spec';\nimport { RankingBarRuntimeInstance } from '../character/chart/runtime/ranking-bar';\nimport { WaveScatterRuntimeInstance } from '../character/chart/runtime/wave-scatter';\nimport { TextRuntimeInstance } from '../character/component/runtime/text';\nimport { LineRuntimeInstance } from '../character/component/runtime/line';\nimport { BaseGraphicRuntimeInstance } from '../character/component/runtime/base';\nimport { SeriesSpecRuntimeInstance } from '../character/chart/runtime/series-spec';\nimport { MarkStyleRuntimeInstance } from '../character/chart/runtime/mark-style';\nimport { LabelStyleRuntimeInstance } from '../character/chart/runtime/label-style';\nimport { TotalLabelRuntimeInstance } from '../character/chart/runtime/total-label';\nimport { CommonLayoutRuntimeInstance } from '../character/common/runtime/common-layout';\n\nimport { CommonSpecRuntimeInstance as TableCommonSpecRuntimeInstance } from '../character/table/runtime/common-spec';\nimport { CellStyleRuntimeInstance } from '../character/table/runtime/cell-style';\nimport { ColWidthRuntimeInstance } from '../character/table/runtime/col-width';\nimport { RowHeightRuntimeInstance } from '../character/table/runtime/row-height';\nimport { TableTypeRuntimeInstance } from '../character/table/runtime/table-type';\nimport { TableThemeRuntimeInstance } from '../character/table/runtime/table-theme';\nimport { ShowHeaderRuntimeInstance } from '../character/table/runtime/show-header';\nimport { ColVisibleRuntimeInstance } from '../character/table/runtime/col-visible';\nimport { RowVisibleRuntimeInstance } from '../character/table/runtime/row-visible';\nimport { ColStyleRuntimeInstance } from '../character/table/runtime/col-style';\nimport { RowStyleRuntimeInstance } from '../character/table/runtime/row-style';\nimport { ContentColStyleRuntimeInstance } from '../character/table/runtime/content-col-style';\nimport { ContentRowStyleRuntimeInstance } from '../character/table/runtime/content-row-style';\n\nlet _register = false;\nexport function registerCharacters() {\n if (_register) {\n return;\n }\n _register = true;\n // chart\n StoryFactory.registerCharacter(VChartCharacter.type, VChartCharacter);\n registerRankingBarTemp();\n registerAllVChart();\n StoryFactory.registerCharacter(RankingBarCharacter.type, RankingBarCharacter);\n StoryFactory.registerCharacter(WaveScatterCharacter.type, WaveScatterCharacter);\n StoryFactory.registerCharacter(ScatterBarCharacter.type, ScatterBarCharacter);\n // component\n StoryFactory.registerCharacter(TextCharacter.type, TextCharacter);\n StoryFactory.registerCharacter(RectCharacter.type, RectCharacter);\n StoryFactory.registerCharacter(ImageCharacter.type, ImageCharacter);\n StoryFactory.registerCharacter(LineCharacter.type, LineCharacter);\n StoryFactory.registerCharacter(ShapeCharacter.type, ShapeCharacter);\n StoryFactory.registerCharacter(PolygonCharacter.type, PolygonCharacter);\n StoryFactory.registerCharacter(ArcCharacter.type, ArcCharacter);\n\n StoryFactory.registerCharacter(TimelineCharacter.type, TimelineCharacter);\n StoryFactory.registerCharacter(UnitCharacter.type, UnitCharacter);\n // table\n StoryFactory.registerCharacter(VTableCharacter.type, VTableCharacter);\n // table\n StoryFactory.registerCharacter(PivotChartCharacter.type, PivotChartCharacter);\n\n registerRuntime();\n}\n\nexport function registerRuntime() {\n // 基础运行时\n RuntimeStore.register(CommonLayoutRuntimeInstance);\n\n // 基础图表运行时\n RuntimeStore.register(ChartCommonSpecRuntimeInstance);\n RuntimeStore.register(SeriesSpecRuntimeInstance);\n RuntimeStore.register(MarkStyleRuntimeInstance);\n RuntimeStore.register(LabelStyleRuntimeInstance);\n RuntimeStore.register(TotalLabelRuntimeInstance);\n\n // 图表相关运行时\n RuntimeStore.register(RankingBarRuntimeInstance);\n RuntimeStore.register(WaveScatterRuntimeInstance);\n\n // 组件相关运行时\n RuntimeStore.register(BaseGraphicRuntimeInstance);\n RuntimeStore.register(TextRuntimeInstance);\n RuntimeStore.register(LineRuntimeInstance);\n\n // 表格相关运行时\n RuntimeStore.register(TableCommonSpecRuntimeInstance);\n RuntimeStore.register(TableTypeRuntimeInstance);\n RuntimeStore.register(TableThemeRuntimeInstance);\n RuntimeStore.register(ShowHeaderRuntimeInstance);\n RuntimeStore.register(ColWidthRuntimeInstance);\n RuntimeStore.register(RowHeightRuntimeInstance);\n RuntimeStore.register(ColVisibleRuntimeInstance);\n RuntimeStore.register(RowVisibleRuntimeInstance);\n RuntimeStore.register(ColStyleRuntimeInstance);\n RuntimeStore.register(RowStyleRuntimeInstance);\n RuntimeStore.register(ContentColStyleRuntimeInstance);\n RuntimeStore.register(ContentRowStyleRuntimeInstance);\n RuntimeStore.register(CellStyleRuntimeInstance);\n}\n","import type { IActionSpec } from '@visactor/vstory-core';\n\nexport function getPayload(action: IActionSpec) {\n return (Array.isArray(action.payload) ? action.payload[0] : action.payload) ?? {};\n}\n","import type { IActionProcessorItem } from '@visactor/vstory-core';\nimport type { IActionSpec } from '@visactor/vstory-core';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { getPayload } from './component/common/utils';\n\nexport class ActionProcessorItem implements IActionProcessorItem {\n getStartTime(action: IActionSpec): number {\n return this.getStartTimeAndDuration(action).startTime;\n }\n getDuration(action: IActionSpec): number {\n return this.getStartTimeAndDuration(action).duration;\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n protected preRun(character: ICharacter, actionSpec: IActionSpec) {\n // 首先展示出来\n character.show();\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n return;\n }\n}\n","import type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { ActionProcessorItem } from '../processor-item';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { array } from '@visactor/vutils';\n\nexport class VChartBaseActionProcessor extends ActionProcessorItem {\n /**\n * 筛选器,payload中可以配置筛选器来设置这个\n * @param selector\n * @param vchart\n */\n selectBySelector(\n selector: string | string[],\n character: ICharacter\n ): {\n chart: boolean;\n panel: boolean;\n seriesList: ISeries[];\n componentsList: IComponent[];\n } {\n return character.getGraphicBySelector(selector);\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n let totalStartTime = Infinity;\n let totalEndTime = -Infinity;\n array(action.payload).forEach(payload => {\n const { startTime = 0, duration = 0 } = payload?.animation ?? ({} as any);\n totalStartTime = Math.min(startTime ?? 0, totalStartTime);\n totalEndTime = Math.max(startTime + duration, totalEndTime);\n });\n\n let st = globalStartTime + totalStartTime;\n let d = totalEndTime - totalStartTime;\n // 避免数据不合法,算出来时长有问题\n if (!isFinite(st)) {\n st = 0;\n }\n if (!isFinite(d)) {\n d = 0;\n }\n return {\n startTime: st,\n duration: d\n };\n }\n}\n","export const ACTION_TYPE = {\n APPEAR: 'appear',\n DISAPPEAR: 'disappear',\n STYLE: 'style',\n MOVETO: 'moveTo',\n SCALETO: 'scaleTo',\n STATE: 'state',\n BOUNCE: 'bounce',\n PLAY: 'play',\n UPDATE: 'update',\n ADD: 'add',\n HIGHLIGHT: 'highlight'\n};\n","import { globalProcessorRegistry, type ICharacter, CharacterType } from '@visactor/vstory-core';\nimport type { IVChart } from '@visactor/vchart';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport type { IChartAddAction, IChartAddPayload } from './interface';\nimport { VChartBaseActionProcessor } from './base';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartAddActionProcessor extends VChartBaseActionProcessor {\n name: 'add';\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartAddAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec as IChartAddAction;\n // add action暂时不支持数组\n const { id: dataId, values } = payload as IChartAddPayload;\n const rowData = cloneDeep((instance as any)._dataSet.getDataView(dataId).rawData);\n\n const data = isArray(values) ? values : [values];\n rowData.push(...data);\n\n instance.updateDataSync(dataId, rowData);\n }\n}\n\nexport function registerVChartAddAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.ADD]: new VChartAddActionProcessor()\n });\n}\n","export const isMatch = (obj: any, source: any) => {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n if (!obj.hasOwnProperty(key) || obj[key] !== source[key]) {\n return false;\n }\n }\n }\n return true;\n};\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VChartBaseActionProcessor } from './base';\nimport type { IChartUpdateAction, IChartUpdatePayload } from './interface';\nimport type { IVChart } from '@visactor/vchart';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport { isMatch } from '../../utils/isMatch';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartUpdateActionProcessor extends VChartBaseActionProcessor {\n name: 'update';\n\n run(character: ICharacter, actionSpec: IChartUpdateAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec;\n // update action暂时不支持数组\n const { id: dataId, data, values } = payload as IChartUpdatePayload;\n\n if (values) {\n instance.updateDataSync(dataId, values);\n } else {\n const rowData = cloneDeep((instance as any)._dataSet.getDataView(dataId).rawData);\n\n const items = isArray(data) ? data : [data];\n\n items.forEach(item => {\n const { sourceValue, targetValue } = item;\n const dataIndex = rowData.findIndex((v: any) => isMatch(v, sourceValue));\n if (dataIndex !== -1) {\n rowData.splice(dataIndex, 1, targetValue);\n }\n });\n\n instance.updateDataSync(dataId, rowData);\n }\n }\n}\n\nexport function registerVChartUpdateAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.UPDATE]: new VChartUpdateActionProcessor()\n });\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const commonFade = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean },\n key: string = 'baseOpacity'\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currOpacity = (instance.attribute as any)[key] ?? 1;\n const opacityMap = disappear ? { from: currOpacity, to: 0 } : { from: 0, to: currOpacity };\n\n instance.setAttributes({ [key]: opacityMap.from });\n instance.animate().to({ [key]: opacityMap.to }, duration, easing);\n};\nexport const commonGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currScaleX = instance.attribute.scaleX;\n const currScaleY = instance.attribute.scaleY;\n const opacityMap = disappear\n ? { fromX: currScaleX ?? 1, fromY: currScaleY ?? 1, toX: 0, toY: 0 }\n : { fromX: 0, fromY: 0, toX: currScaleX ?? 1, toY: currScaleY ?? 1 };\n\n instance.setAttributes({ scaleX: opacityMap.fromX, scaleY: opacityMap.fromY });\n instance.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade } from '../common/commonAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const commonGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height' }\n) => {\n const { duration, easing } = animation;\n const { disappear, orient = 'width' } = option;\n\n instance = instance.getChildAt(0) as IGroup;\n const width = instance.AABBBounds.width();\n const height = instance.AABBBounds.height();\n if (orient === 'width') {\n const opacityMap = disappear ? { from: width, to: 0 } : { from: 0, to: width };\n instance.setAttributes({\n width: opacityMap.from,\n height,\n clip: true\n });\n instance.animate().to({ width: opacityMap.to }, duration, easing);\n } else {\n const opacityMap = disappear ? { from: height, to: 0 } : { from: 0, to: height };\n // TODO: 轴 bounds 不准确\n instance.setAttributes({\n width: width * 2,\n height: opacityMap.from,\n clip: true\n });\n instance.animate().to({ height: opacityMap.to }, duration, easing);\n }\n};\n\nexport const runAppearOrDisAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type { IChartVisibilityPayload } from '../../interface';\nimport { commonFade } from '../common/commonAppear';\nimport { commonGrow } from './commonAppear';\nimport type { IGroup, ILine, IText } from '@visactor/vrender-core';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runAxisAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return axisGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nfunction axisGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n const isGrid = instance.name?.includes('grid');\n if (isGrid) {\n gridGrow(instance, animation, option);\n } else {\n mainAxisGrow(instance, animation, option);\n }\n}\n\nfunction mainAxisGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n const { duration, easing } = animation;\n const { disappear, direction = 'positive', orient } = option;\n const axisLine = instance.getElementsByName('axis-line')[0] as unknown as IGroup;\n const axisTicks = instance.getElementsByName('axis-tick-container')[0] as unknown as IGroup;\n const axisLabel = instance.getElementsByName('axis-label-container')[0] as unknown as IGroup;\n\n if (axisLine && axisLine.childrenCount > 0) {\n const shouldReverse =\n orient === 'height'\n ? direction === 'positive' || disappear //\n : false;\n\n const line = axisLine.getElementsByType('line')[0] as unknown as ILine;\n if (line) {\n if (shouldReverse) {\n line.setAttributes({ points: line.attribute.points.reverse() });\n }\n const attributeMap = disappear\n ? { from: { clipRange: 1 }, to: { clipRange: 0 } }\n : { from: { clipRange: 0 }, to: { clipRange: 1 } };\n\n line.setAttributes(attributeMap.from);\n line\n .animate()\n .to(attributeMap.to, duration, easing)\n .onEnd(() => {\n if (shouldReverse) {\n line.setAttributes({ points: line.attribute.points.reverse() });\n }\n });\n }\n }\n\n const opacityMap = disappear\n ? { from: { opacity: 1 }, to: { opacity: 0 } }\n : { from: { opacity: 0 }, to: { opacity: 1 } };\n\n if (axisTicks && axisTicks.childrenCount > 0) {\n const shouldReverse = disappear;\n const ticks = axisTicks.getElementsByType('line');\n if (shouldReverse) {\n ticks.reverse();\n }\n ticks.forEach((tick: IText, i: number) => {\n tick.setAttributes(opacityMap.from);\n tick\n .animate()\n .wait((duration / ticks.length) * i)\n .to(opacityMap.to, duration / ticks.length, easing)\n .onEnd(() => {\n if (shouldReverse) {\n ticks.reverse();\n }\n });\n });\n }\n\n if (axisLabel && axisLabel.childrenCount > 0) {\n const shouldReverse = disappear;\n const text = axisLabel.getElementsByType('text');\n if (shouldReverse) {\n text.reverse();\n }\n text.forEach((t: IText, i: number) => {\n t.setAttributes(opacityMap.from);\n t.animate()\n .wait((duration / text.length) * i)\n .to(opacityMap.to, duration / text.length, easing)\n .onEnd(() => {\n if (shouldReverse) {\n text.reverse();\n }\n });\n });\n }\n}\n\nfunction gridGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n if (instance) {\n commonGrow(instance, animation, option);\n }\n}\n","import type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const runLabelAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return labelGrow(instance, animation, option);\n }\n case 'followGraphic': {\n return labelFollowGraphic(instance, animation, option);\n }\n case 'fade': {\n return labelFade(instance, animation, option);\n }\n default: {\n return labelFade(instance, animation, option);\n }\n }\n};\n\nconst labelGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const sizeMap = disappear ? { from: 1, to: 0 } : { from: 0, to: 1 };\n\n instance.getElementsByType('text').forEach((text: IGraphic) => {\n text.setAttributes({ scaleX: sizeMap.from, scaleY: sizeMap.from });\n text.animate().to({ scaleX: sizeMap.to, scaleY: sizeMap.to }, duration, easing);\n });\n\n instance.getElementsByType('richtext').forEach((text: IGraphic) => {\n text.setAttributes({ scaleX: sizeMap.from, scaleY: sizeMap.from });\n text.animate().to({ scaleX: sizeMap.to, scaleY: sizeMap.to }, duration, easing);\n });\n};\n\nconst labelFade = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const opacityMap = disappear ? { from: 1, to: 0 } : { from: 0, to: 1 };\n instance.getElementsByType('text').forEach((text: IGraphic) => {\n text.setAttributes({ opacity: opacityMap.from });\n text.animate().to({ opacity: opacityMap.to }, duration, easing);\n });\n\n instance.getElementsByType('richtext').forEach((text: IGraphic) => {\n text.setAttributes({ opacity: opacityMap.from });\n text.animate().to({ opacity: opacityMap.to }, duration, easing);\n });\n};\n\nconst labelFollowGraphic = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const opacityMap = disappear ? { from: 1, to: 0 } : { from: 1, to: 1 };\n instance.setAttributes({ baseOpacity: opacityMap.from });\n instance.animate().to({ baseOpacity: opacityMap.to }, duration, easing);\n};\n","import type { IChartVisibilityPayload } from '../../interface';\n\nexport const getCustomParams = (\n animation: IChartVisibilityPayload['animation'],\n delayPerTime: number,\n enterPerTime: number\n) => {\n const { duration: totalTime, loop, oneByOne, easing, dimensionCount = 1 } = animation;\n\n // 柱子+label,不要卡时间,加一些buffer\n const buffer = Math.min(delayPerTime, enterPerTime) / 3;\n const standTime = delayPerTime * (dimensionCount - 1) + enterPerTime + buffer;\n const ratio = totalTime / standTime;\n\n const duration = oneByOne ? enterPerTime * ratio : totalTime;\n\n return {\n duration,\n loop,\n oneByOne: oneByOne ? duration + (delayPerTime - enterPerTime) * ratio : oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\nimport { PieLeap } from '@visactor/vstory-animate';\n\n// 将payload转换为chart内置的动画type\nexport const transformArcVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n payload: any;\n }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return arcGrowRadius(instance, animation, option);\n }\n case 'growRadius': {\n return arcGrowRadius(instance, animation, option);\n }\n case 'growAngle': {\n return arcGrowAngle(instance, animation, option);\n }\n case 'fade': {\n return arcFade(instance, animation, option);\n }\n case 'pieLeap': {\n return pieLeap(instance, animation);\n }\n default: {\n return arcFade(instance, animation, option);\n }\n }\n};\n\nconst arcGrowRadius = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n\n const { disappear } = option;\n const type = disappear ? 'growRadiusOut' : 'growRadiusIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst arcGrowAngle = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { disappear } = option;\n const type = disappear ? 'growAngleOut' : 'growAngleIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing,\n options: {\n overall: true\n }\n };\n};\n\nconst arcFade = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { disappear } = option;\n const type = disappear ? 'fadeOut' : 'fadeIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst pieLeap = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? PieLeap.delayPerTime ?? 50,\n animation.enterPerTime ?? PieLeap.enterPerTime ?? 300\n );\n return {\n channel: ['x', 'y', 'innerRadius', 'outerRadius'],\n custom: PieLeap,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\n\nexport const commonGrow = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n typeList: string[],\n option: { markIndex: number; disappear: boolean }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n // const { duration, loop, oneByOne, easing } = animation;\n const { disappear } = option;\n\n const type = disappear ? typeList[1] : typeList[0];\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nexport const commonFade = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n const { disappear } = option;\n const type = disappear ? 'fadeOut' : 'fadeIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { getCustomParams } from './utils';\n\nexport const growPoints = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 30,\n animation.enterPerTime ?? 200\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n return {\n type: params.direction === 'horizontal' ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === 'horizontal' ? 'positive' : 'negative'\n },\n duration,\n oneByOne,\n easing\n };\n};\n\nexport const transformLineVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['clipIn', 'clipOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n case 'growPoints': {\n return growPoints(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type VChart from '@visactor/vchart';\nimport type { IOrientType } from '@visactor/vrender-components';\nimport { BarBounce, BarLeap } from '@visactor/vstory-animate';\nimport { commonFade } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\nimport type { ICharacter } from '@visactor/vstory-core';\n\n// 将payload转换为chart内置的动画type\nexport const transformRectVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; payload: any; character?: ICharacter }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return rectGrow(instance, animation, {\n ...option,\n center: false\n });\n }\n case 'centerGrow': {\n return rectGrow(instance, animation, {\n ...option,\n center: true\n });\n }\n case 'barBounce': {\n return barBounce(instance, animation);\n }\n case 'barLeap': {\n return barLeap(instance, animation);\n }\n case 'fade':\n default: {\n return commonFade(instance, animation, {\n ...option\n });\n }\n }\n};\n\nconst rectGrow = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option = { center: false, disappear: false }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { center, disappear } = option;\n const direction = instance.getChart().getSpec().direction ?? 'vertical';\n const xField = instance.getChart().getSpec().xField;\n const yField = instance.getChart().getSpec().yField;\n const [xAxis, yAxis] = getXYAxis(instance);\n\n const type = disappear ? (center ? 'growCenterOut' : 'growHeightOut') : center ? 'growCenterIn' : 'growHeightIn';\n\n return {\n type: type,\n duration,\n loop,\n oneByOne,\n easing,\n options: (datum: any, element: any, params: any) => {\n const field = direction === 'vertical' ? yField : xField;\n const data = datum?.[field];\n\n if (direction === 'vertical') {\n return {\n overall: yAxis?.getScale(0).scale(0),\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n return {\n overall: xAxis?.getScale(0).scale(0),\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n };\n};\n\nfunction isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nfunction isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n\nconst getXYAxis = (instance: VChart) => {\n const axes = instance.getChart().getComponentsByKey('axes');\n const xAxis = axes.find(axis => {\n const orient = (axis as any).getOrient();\n if (isXAxis(orient)) {\n return true;\n }\n }) as any;\n const yAxis = axes.find(axis => {\n const orient = (axis as any).getOrient();\n if (isYAxis(orient)) {\n return true;\n }\n }) as any;\n\n return [xAxis, yAxis];\n};\n\nconst barBounce = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? BarBounce.delayPerTime ?? 50,\n animation.enterPerTime ?? BarBounce.enterPerTime ?? 300\n );\n\n return {\n channel: ['x', 'y', 'x1', 'y1', 'width', 'height'],\n custom: BarBounce,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst barLeap = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? BarBounce.delayPerTime ?? 50,\n animation.enterPerTime ?? BarBounce.enterPerTime ?? 300\n );\n\n return {\n channel: ['x', 'y', 'x1', 'y1', 'width', 'height', 'cornerRadius'],\n custom: BarLeap,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { SymbolSwing, SymbolThrow } from '@visactor/vstory-animate';\nimport { getCustomParams } from './utils';\n\nexport const throwBounce = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n const { width, height } = character.getAttribute();\n\n return {\n channel: ['x', 'y'],\n custom: SymbolThrow,\n easing,\n duration,\n oneByOne,\n customParameters: {\n width,\n height,\n ...params\n },\n reverse: true,\n reversed: true\n };\n};\nexport const swing = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 30,\n animation.enterPerTime ?? 200\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n const { width, height } = character.getAttribute();\n\n return {\n channel: ['x', 'y'],\n custom: SymbolSwing,\n easing,\n duration,\n oneByOne: oneByOne,\n customParameters: {\n width,\n height,\n delta: 30,\n ...params\n },\n reverse: true,\n reversed: true\n };\n};\n\nexport const transformSymbolVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['scaleIn', 'scaleOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n case 'throwBounce': {\n return throwBounce(instance, animation, option);\n }\n case 'swing': {\n return swing(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import { runChartAppear, runPanelAppear } from './common/chartAppear';\nimport { runAxisAppear } from './component/axisAppear';\nimport { runLabelAppear } from './component/labelAppear';\nimport { runLegendsAppear } from './component/legendsAppear';\nimport { runTitleAppear } from './component/titleAppear';\nimport { transformArcVisibility } from './seriesmark/transformArcVisibility';\nimport { transformLineVisibility } from './seriesmark/transformLineVisibility';\nimport { transformRectVisibility } from './seriesmark/transformRectVisibility';\nimport { transformSymbolVisibility } from './seriesmark/transformSymbolVisibility';\nimport { transformTextVisibility } from './seriesmark/transformTextVisibility';\n\nexport const transformMap = {\n appear: {\n // series & mark\n rect: transformRectVisibility,\n line: transformLineVisibility,\n symbol: transformSymbolVisibility,\n text: transformTextVisibility,\n arc: transformArcVisibility,\n // component\n legends: runLegendsAppear,\n label: runLabelAppear,\n axis: runAxisAppear,\n title: runTitleAppear,\n // chart:\n chart: runChartAppear,\n // panel\n panel: runPanelAppear\n }\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\n// 将payload转换为chart内置的动画type\nexport const transformTextVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['scaleIn', 'scaleOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade, commonGrow } from './commonAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runChartAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nexport const runPanelAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option, 'opacity');\n }\n default: {\n return commonFade(instance, animation, option, 'opacity');\n }\n }\n};\n","export function checkArrayOrder(arr: any[], field: string) {\n if (!arr) {\n return 1;\n }\n let isAscending = true;\n let isDescending = true;\n\n for (let i = 0; i < arr.length - 1; i++) {\n if (arr[i][field] > arr[i + 1][field]) {\n isAscending = false;\n }\n if (arr[i][field] < arr[i + 1][field]) {\n isDescending = false;\n }\n }\n\n if (isAscending) {\n return 1;\n }\n if (isDescending) {\n return -1;\n }\n}\n","import { Bounce } from '@visactor/vstory-animate';\nimport type { IAction, IActionPayload, ICharacter } from '@visactor/vstory-core';\nimport { getCharacterParentGraphic } from './common';\nimport type { IGraphic } from '@visactor/vrender-core';\n\nexport interface IComponentBouncePayLoad extends IActionPayload {\n /**\n * 自定义弹跳 easing path string\n */\n customEase?: string;\n\n type?: 'bounce1' | 'bounce2';\n flipY?: boolean;\n\n /**\n * 跳跃高度\n */\n dy?: number;\n}\n\nexport interface IComponentBounceAction extends IAction {\n action: 'bounce';\n}\n\nconst bounce2Str =\n 'M 0 -0.545 C 0.024 -0.045 0.068 0.414 0.21 0.429 C 0.36 0.436 0.396 -0.258 0.521 -0.237 C 0.626 -0.232 0.634 0.131 0.717 0.128 C 0.827 0.133 0.827 -0.073 0.91 -0.083 C 0.962 -0.086 1 0 1 0';\nconst bounce3Str =\n 'M 0 -0.545 C 0.024 -0.045 0.052 0.358 0.216 0.381 C 0.321 0.368 0.37 -0.122 0.506 -0.114 C 0.615 -0.12 0.668 0.094 0.837 0.092 C 0.923 0.087 0.973 0.034 1.004 -0.005';\nconst bounce4Str =\n 'M 0 -0.545 C 0.024 -0.045 0.075 0.389 0.216 0.381 C 0.36 0.376 0.425 -0.133 0.756 -0.127 C 0.918 -0.109 0.973 -0.057 1.007 0.003';\nconst bounceMap: any = {\n bounce2: bounce2Str,\n bounce3: bounce3Str,\n bounce4: bounce4Str\n};\n\nexport function bounce(\n graphic: IGraphic,\n animation: IComponentBouncePayLoad['animation'],\n params: IComponentBouncePayLoad\n) {\n if (graphic) {\n const { duration, easing } = animation;\n const { dy } = params;\n const visible = graphic.attribute.visible;\n if (visible === false) {\n graphic.attribute.visible = true;\n }\n const height = graphic.AABBBounds.height();\n if (visible === false) {\n graphic.setAttribute('visible', false);\n }\n graphic.animate().play(\n new Bounce({}, {}, duration, easing, {\n dy: (params.flipY ? -1 : 1) * (dy ?? height * 0.2),\n customEase: params.customEase || bounceMap[params.type]\n })\n );\n }\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { ICharacter } from '@visactor/vstory-core';\n\nexport function getCharacterParentGraphic(character: ICharacter) {\n return character.graphic;\n}\n\nexport function getCharacterGraphic(character: ICharacter) {\n return character.graphic.getChildren() as IGraphic[];\n}\n\nexport function getCharacterByEffect(character: ICharacter, effect: 'move' | string) {\n // move效果, 一定是对parent的操作\n return getCharacterGraphic(character);\n}\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport type { IComponentBounceAction } from '../../common/bounce-processor';\nimport { bounce } from '../../common/bounce-processor';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { getCharacterParentGraphic } from '../../common/common';\n\nexport class CommonBounceActionProcessor extends ActionProcessorItem {\n name: 'bounce';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentBounceAction): void {\n super.preRun(character, actionSpec);\n const payload = getPayload(actionSpec);\n const { animation = {} } = payload;\n bounce(getCharacterParentGraphic(character), animation as any, payload);\n }\n}\n\nexport function registerCommonBounceAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.COMMON, {\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getCharacterGraphic, getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType } from '@visactor/vrender-core';\nimport { getPayload } from './utils';\n\nexport interface IComponentStylePayLoad extends IActionPayload {\n graphic?: Record;\n text?: Record;\n panel?: Record;\n}\n\nexport interface IComponentStyleAction extends IAction {\n action: 'style';\n}\n\nexport class CommonStyleActionProcessor extends ActionProcessorItem {\n name: 'style';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentStyleAction): void {\n super.preRun(character, actionSpec);\n const {\n animation = {},\n graphic: graphicStyle = {},\n text: textStyle,\n panel: panelStyle\n } = getPayload(actionSpec) as IComponentStylePayLoad;\n const { duration, easing } = animation as any;\n const characters = getCharacterGraphic(character);\n const component = getCharacterParentGraphic(character);\n const text = characters[0];\n const graphic = characters[characters.length - 1];\n\n // 这些属性都设置给component,由component下发给graphic\n const componentStyle: any = { ...panelStyle };\n ['x', 'y', 'dx', 'dy', 'scaleX', 'scaleY', 'width', 'height'].forEach(key => {\n if (key in graphicStyle) {\n componentStyle[key] = graphicStyle[key];\n delete graphicStyle[key];\n }\n });\n if (component) {\n // 获取到x,y,width,height,scaleX,scaleY,将这些属性应用到component上\n // TODO component动画优化\n if (component.styleAnimate) {\n component.styleAnimate(componentStyle, animation);\n } else {\n component.animate().to(componentStyle, duration, easing as EasingType);\n }\n }\n if (graphic && graphicStyle) {\n if (graphic.styleAnimate) {\n graphic.styleAnimate(graphicStyle, animation);\n } else {\n graphic.animate().to(graphicStyle, duration, easing as EasingType);\n }\n }\n if (text && textStyle) {\n // TODO 鲁棒性,考虑更兼容的方式\n // 特殊处理textConfig\n if (textStyle.text && (text.attribute as any).textConfig) {\n textStyle.textConfig = [{ ...((text.attribute as any).textConfig || [])[0], text: textStyle.text }];\n }\n text.animate().to(textStyle, duration, easing as EasingType);\n }\n }\n}\n","import type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { array, cloneDeep, isArray, isFunction, merge } from '@visactor/vutils';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VChartBaseActionProcessor } from './base';\nimport type { IChartVisibilityAction, IChartVisibilityPayload } from './interface';\nimport { transformMap } from './transformFunc/transformMap';\nimport type { AxisBaseAttributes } from '@visactor/vrender-components';\nimport { checkArrayOrder } from '../../utils/checkArrayOrder';\nimport type { IGroup } from '@visactor/vrender-core';\nimport { ACTION_TYPE } from '../constants/action';\nimport { CommonBounceActionProcessor } from '../component/common/bounce';\nimport { VChartUpdateActionProcessor } from './update';\nimport { VChartAddActionProcessor } from './add';\nimport { CommonStyleActionProcessor } from '../component/common/style';\n\nexport class VChartVisibilityActionProcessor extends VChartBaseActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n protected character: ICharacter | null;\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n super.preRun(character, actionSpec);\n this.runOrApplyAttrs(character, actionSpec, { isRun: true });\n }\n\n applyAttrsForVisibility(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n this.runOrApplyAttrs(character, actionSpec, { isRun: false });\n }\n\n protected runOrApplyAttrs(character: ICharacter, actionSpec: IChartVisibilityAction, params: { isRun?: boolean }) {\n const { isRun = true } = params;\n this.character = character;\n const vchart = character.graphic._vchart as IVChart;\n // 基于选择器做筛选\n // 同一个Action的payload数组中,项与项之间是覆盖关系,后项覆盖前项\n const runnedSeriesSet = new Set();\n const runnedComponentsSet = new Set();\n let runnedChart = false;\n array(actionSpec.payload)\n .reverse()\n .forEach(payload => {\n const { chart, seriesList, componentsList, panel } = this.selectBySelector(payload.selector ?? '*', character);\n if (!runnedChart && chart) {\n // chart & panel\n this.chartVisibility(character.graphic as any, actionSpec.action, payload, isRun);\n } else if (!runnedChart && panel) {\n // panel\n this.panelVisibility(character.graphic as any, actionSpec.action, payload, isRun);\n }\n // 过滤seriesList\n const shouldRunSeriesList = seriesList.filter(item => !runnedSeriesSet.has(item));\n shouldRunSeriesList.forEach(series => {\n this.commonSeriesAppear(vchart, series, actionSpec.action, payload, isRun);\n });\n // 过滤componentsList\n const shouldRunComponentsList = componentsList.filter(item => !runnedComponentsSet.has(item));\n shouldRunComponentsList.forEach(component => {\n this.componentAppear(vchart, component, actionSpec.action, payload, isRun);\n });\n runnedChart = runnedChart || chart;\n seriesList.forEach(item => runnedSeriesSet.add(item));\n componentsList.forEach(item => runnedComponentsSet.add(item));\n });\n this.character = null;\n }\n\n protected chartVisibility(\n chartGraphic: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (!isRun) {\n return;\n }\n const appearTransformFunc = transformMap.appear.chart;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(chartGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected panelVisibility(\n chartGraphic: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (!isRun) {\n return;\n }\n const appearTransformFunc = transformMap.appear.panel;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(chartGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected componentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (component.specKey === 'label') {\n this.labelComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'legends') {\n this.legendsComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'axes') {\n this.axisComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'title') {\n this.titleComponentAppear(vchart, component, action, payload, isRun);\n }\n }\n\n protected labelComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const appearTransformFunc = transformMap.appear.label;\n const defaultPayload = VChartVisibilityActionProcessor.defaultPayload;\n vrenderComponents.forEach(group => {\n if (isRun) {\n (group.attribute as any).visibleAll = true;\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n } else {\n (group.attribute as any).visibleAll = false;\n }\n });\n }\n\n protected legendsComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents().filter((item: any) => !!item);\n const appearTransformFunc = transformMap.appear.legends;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n vrenderComponents.forEach(group => {\n if (isRun) {\n (group.attribute as any).visibleAll = true;\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n } else {\n (group.attribute as any).visibleAll = false;\n }\n });\n }\n\n protected axisComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const axis = vrenderComponents[0];\n if (!axis) {\n return;\n }\n vrenderComponents.forEach(c => {\n if (isRun) {\n (c.attribute as any).visibleAll = true;\n } else {\n (c.attribute as any).visibleAll = false;\n }\n });\n if (!isRun) {\n return;\n }\n const axisGrid = vrenderComponents[1];\n const axisOrient = (axis.attribute as AxisBaseAttributes)?.orient;\n if (axisOrient === 'angle' || axisOrient === 'radius') {\n this.polarAxisAppear(axis, axisGrid, action, payload, isRun);\n } else {\n this.cartesianAxisAppear(axis, axisGrid, action, payload, isRun);\n }\n }\n\n protected cartesianAxisAppear(\n axis: any,\n axisGrid: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const axisOrient = (axis.attribute as AxisBaseAttributes)?.orient;\n const axisItems = (axis.attribute as AxisBaseAttributes)?.items ?? [[]];\n const orient = axisOrient === 'left' || axisOrient === 'right' ? 'height' : 'width';\n const gridOrient = axisOrient === 'left' || axisOrient === 'right' ? 'width' : 'height';\n // 有点 hack。从 vrender component 拿不到轴 inverse 配置。\n const direction = checkArrayOrder(axisItems[0], 'value') < 0 ? 'positive' : 'negative';\n const appearTransformFunc = transformMap.appear.axis;\n const defaultPayload = VChartVisibilityActionProcessor.defaultPayload;\n if (axis) {\n this.runTransformFunc(axis as any, appearTransformFunc, action, payload, defaultPayload, { orient, direction });\n }\n if (axisGrid) {\n this.runTransformFunc(axisGrid as any, appearTransformFunc, action, payload, defaultPayload, {\n orient: gridOrient,\n direction\n });\n }\n }\n\n protected polarAxisAppear(\n axis: any,\n axisGrid: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const axisItems = (axis.attribute as AxisBaseAttributes)?.items ?? [[]];\n const appearTransformFunc = transformMap.appear.axis;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n if (axis) {\n this.runTransformFunc(axis as any, appearTransformFunc, action, payload, defaultPayload);\n }\n if (axisGrid) {\n this.runTransformFunc(axisGrid as any, appearTransformFunc, action, payload, defaultPayload, {});\n }\n }\n\n protected titleComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const appearTransformFunc = transformMap.appear.title;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n vrenderComponents.forEach(group => {\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n });\n }\n\n private runTransformFunc(\n instance: IGroup,\n appearTransformFunc: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n defaultPayload: IActionSpec['payload'] = {} as any,\n actionOption: Record = {}\n ) {\n if (instance && appearTransformFunc) {\n const mergePayload = merge({}, defaultPayload, payload) as IChartVisibilityPayload;\n appearTransformFunc(instance, mergePayload.animation, {\n disappear: action === 'disappear',\n ...actionOption,\n payload: mergePayload\n });\n }\n }\n\n protected commonSeriesAppear(\n vchart: IVChart,\n series: ISeries,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const marks = series.getMarksWithoutRoot();\n if (!marks.length) {\n return;\n }\n marks.forEach((mark, markIndex) => {\n const config = this.getMarkAnimateConfig(vchart, mark, markIndex, action, series, payload);\n const product = mark.getProduct();\n if (isRun) {\n // @ts-ignore\n product?.graphicItem?.setAttribute('visibleAll', true);\n product?.animate?.run(config || {});\n } else {\n product?.graphicItem?.setAttribute('visibleAll', false);\n }\n });\n }\n\n getMarkPayload(mark: any, series: ISeries, payload: IChartVisibilityPayload) {\n const defaultMarkPayload = (VChartVisibilityActionProcessor as any)[`${mark.type}Payload`];\n const mergePayload = merge(\n {},\n isFunction(defaultMarkPayload) ? defaultMarkPayload(series.type) : defaultMarkPayload || {},\n payload\n ) as IChartVisibilityPayload;\n\n return mergePayload;\n }\n getMarkAnimateConfig(\n vchart: IVChart,\n mark: any,\n markIndex: number,\n action: 'appear' | 'disappear',\n series: ISeries,\n payload: IChartVisibilityPayload\n ) {\n const mergePayload = this.getMarkPayload(mark, series, payload);\n const appearTransform = (transformMap.appear as any)[mark.type];\n return (\n appearTransform &&\n appearTransform(vchart as any, mergePayload.animation, {\n index: markIndex,\n disappear: action === 'disappear',\n payload: mergePayload,\n character: this.character\n })\n );\n }\n\n static rectPayload = (seriesType: string) => {\n return {\n animation: {\n effect: seriesType === 'treemap' ? 'centerGrow' : 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n };\n\n static defaultPayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static fadePayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'fade',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static arcPayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'growAngle',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static linePayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n static symbolPayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n static textPayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n}\n\nexport function registerVChartVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.APPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n}\n","import { globalProcessorRegistry, type ICharacter, CharacterType } from '@visactor/vstory-core';\nimport type { IVChart } from '@visactor/vchart';\nimport type { IChartHighlightPayload, IChartHighlightAction } from './interface';\nimport { VChartBaseActionProcessor } from './base';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartHighlightActionProcessor extends VChartBaseActionProcessor {\n name: 'highlight';\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartHighlightAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec as IChartHighlightAction;\n const { value, inverse, animation, style = {} } = payload as IChartHighlightPayload;\n const isDatumEqual = (inputValue: any, elementDatum: any) =>\n Object.keys(inputValue).every(key => inputValue[key] === elementDatum[key]);\n const channel = {};\n\n Object.keys(style).forEach(key => {\n channel[key] = {\n to: style[key]\n };\n });\n instance\n .getChart()\n .getAllMarks()\n .forEach(mark => {\n if (mark.getAnimationConfig()) {\n mark.getProduct().animate?.run({\n timeSlices: {\n effects: {\n channel,\n easing: animation.easing\n },\n duration: animation?.duration ?? 0\n },\n partitioner: datum => (inverse ? !isDatumEqual(value, datum) : isDatumEqual(value, datum))\n });\n }\n });\n }\n}\n\nexport function registerVChartHighlightAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.HIGHLIGHT]: new VChartHighlightActionProcessor()\n });\n}\n","import type { IVChart, Player } from '@visactor/vchart';\nimport type { BasePlayer } from '@visactor/vrender-components';\nimport { vglobal } from '@visactor/vrender';\nimport { isValid } from '@visactor/vutils';\nimport {\n CharacterType,\n globalProcessorRegistry,\n type IAction,\n type IActionPayload,\n type IActionSpec,\n type ICharacter\n} from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\n\n// TODO: move to interface folder\n// export type IRankingBarPlayPayload = Omit;\nexport type IRankingBarPlayPayload = IActionPayload;\n\nexport interface IRankingBarPlayAction extends IAction {\n action: 'play';\n}\n\nfunction _forward(\n vchartPlayer: Player,\n vrenderPlayer: BasePlayer,\n params: {\n progress: number;\n index?: number;\n }\n): boolean {\n if (!vrenderPlayer) {\n return false;\n }\n const { index } = params;\n if (isValid(index) && index !== vrenderPlayer.getMaxIndex()) {\n vchartPlayer.changePlayerIndex(vrenderPlayer.getDataIndex());\n return true;\n }\n return false;\n}\n\nexport class RankingBarPlayActionProcessor extends ActionProcessorItem {\n name: 'rankingBar-play';\n rafId: any;\n\n duration = 0;\n interval = 0;\n count = 0;\n\n start: number;\n prevIndex: number;\n done = false;\n\n vchartPlayer: Player;\n vrenderPlayer: BasePlayer;\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec, character?: ICharacter): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n // @ts-ignore\n const { startTime = 0 } = action.payload?.animation ?? ({} as any);\n const instance = (character.graphic as any)._vchart as IVChart;\n const interval = instance?.getSpec()?.interval ?? 0;\n const count = instance?.getSpec()?.player?.specs?.length ?? 0;\n const duration = interval * count;\n const st = globalStartTime + startTime;\n this.duration = duration;\n this.interval = interval;\n this.count = count;\n return {\n startTime: st,\n duration\n };\n }\n\n run(character: ICharacter, actionSpec: any): void {\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n const vchartPlayer = instance.getComponents().find(cmp => cmp.type === 'player') as Player;\n if (!vchartPlayer) {\n return;\n }\n const vrenderPlayer = vchartPlayer.getVRenderComponents()[0] as BasePlayer;\n if (!vrenderPlayer) {\n return;\n }\n this.vchartPlayer = vchartPlayer;\n this.vrenderPlayer = vrenderPlayer;\n this.rafId = vglobal.getRequestAnimationFrame()(this.forward.bind(this));\n }\n\n forward = (timestamp: number) => {\n if (!isValid(this.start)) {\n this.start = timestamp;\n this.vrenderPlayer.play();\n }\n const elapsed = timestamp - this.start;\n const progress = elapsed / this.duration;\n const curIndex = Math.floor(Math.min(progress * this.count, this.count));\n\n if (curIndex < this.count - 1) {\n if (this.prevIndex !== curIndex) {\n const result = _forward(this.vchartPlayer, this.vrenderPlayer, { index: curIndex, progress });\n if (result) {\n this.prevIndex = curIndex;\n }\n } else {\n _forward(this.vchartPlayer, this.vrenderPlayer, { progress });\n }\n\n // this.rafId = vglobal.getRequestAnimationFrame()(this.forward.bind(this));\n } else {\n this.start = undefined;\n this.prevIndex = undefined;\n // vglobal.getCancelAnimationFrame()(this.rafId);\n return;\n }\n };\n}\n\nexport function registerRankingBarPlayAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RANKINGBAR, {\n [ACTION_TYPE.PLAY]: new RankingBarPlayActionProcessor()\n });\n}\nexport function registerRankingBarVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RANKINGBAR, {\n [ACTION_TYPE.APPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VChartVisibilityActionProcessor()\n });\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry, globalTickerStore } from '@visactor/vstory-core';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\nimport type { IChartVisibilityAction } from '../interface';\nimport { IChartVisibilityPayload } from '../interface';\nimport type { ISeries, IVChart } from '@visactor/vchart';\n\nexport class ScatterBarVisibilityActionProcessor extends VChartVisibilityActionProcessor {\n // getMarkAnimateConfig(vchart: IVChart, mark: any, markIndex: number, action: 'appear' | 'disappear', series: ISeries, payload: IChartVisibilityPayload) {\n // }\n}\n\nexport function registerScatterBarVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.SCATTER_BAR, {\n [ACTION_TYPE.APPEAR]: new ScatterBarVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ScatterBarVisibilityActionProcessor()\n });\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry, globalTickerStore } from '@visactor/vstory-core';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\nimport type { IChartVisibilityAction } from '../interface';\nimport type { IVChart } from '@visactor/vchart';\n\nexport class WaveScatterVisibilityActionProcessor extends VChartVisibilityActionProcessor {\n run(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n super.run(character, actionSpec);\n // 执行背景动画\n const vchart = character.graphic._vchart as IVChart;\n const series = vchart\n .getChart()\n .getAllSeries()\n .filter(series => series.type === 'circlePacking')[0];\n if (!series) {\n return;\n }\n const mark = series.getMarksWithoutRoot().filter(item => item.type === 'arc')[0];\n if (!mark) {\n return;\n }\n const { waveAnimate } = character.getAttribute();\n if (!(waveAnimate && waveAnimate.custom && waveAnimate.customParameters)) {\n return;\n }\n const { duration, easing, loop, custom } = waveAnimate;\n const product = mark.getProduct();\n const graphics = product.getAllElements().map(item => item.getGraphicItem());\n if (!graphics.length) {\n return;\n }\n graphics.forEach(g => {\n g.animate({ timeline: globalTickerStore.getTimeline('background_animate') })\n .play(new custom({}, {}, duration, easing, {}))\n .loop(loop ? Infinity : 1);\n });\n }\n}\n\nexport function registerWaveScatterVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.WAVE_SCATTER, {\n [ACTION_TYPE.APPEAR]: new WaveScatterVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new WaveScatterVisibilityActionProcessor()\n });\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IAnimationParams } from '@visactor/vstory-core';\n\nexport const canDoGraphicAnimation = (graphic: IGraphic, animationParams: IAnimationParams) => {\n return graphic && animationParams.duration && animationParams.duration > 0;\n};\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IScaleInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class ScaleVisibility {\n setInitAttributes(graphic: IGraphic, animation: IScaleInParams, appear: boolean) {\n if (!appear) {\n return;\n }\n const { ratio = 0 } = animation;\n graphic._vstory_lastScaleX = graphic.attribute.scaleX ?? 1;\n graphic._vstory_lastScaleY = graphic.attribute.scaleY ?? 1;\n\n graphic.setAttributes({ scaleX: ratio, scaleY: ratio });\n }\n run(graphic: IGraphic, animation: IScaleInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, animation)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, animation, appear);\n\n const duration = animation.duration;\n const easing = animation.easing;\n\n const currScaleX = graphic._vstory_lastScaleX ?? graphic.attribute.scaleX;\n const currScaleY = graphic._vstory_lastScaleY ?? graphic.attribute.scaleY;\n const opacityMap = appear ? { toX: currScaleX ?? 1, toY: currScaleY ?? 1 } : { toX: 0, toY: 0 };\n delete graphic._vstory_lastScaleX;\n delete graphic._vstory_lastScaleY;\n\n graphic.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n\n return true;\n }\n}\n\nexport const scaleInstance = new ScaleVisibility();\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IFadeInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class FadeVisibility {\n setInitAttributes(graphic: IGraphic, params: IFadeInParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n if (graphic.isContainer) {\n const opacity = 0;\n graphic.setAttributes({\n baseOpacity: opacity\n } as any);\n } else {\n const opacity = params.opacity ?? 0;\n graphic._vstory_lastOpacity = graphic.attribute.opacity ?? 1;\n graphic.setAttributes({\n opacity\n } as any);\n }\n }\n run(graphic: IGraphic, params: IFadeInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n const duration = params.duration;\n const easing = params.easing;\n\n if (graphic.isContainer) {\n graphic.animate().to({ baseOpacity: appear ? 1 : 0 }, duration, easing as EasingType);\n } else {\n const opacity = graphic._vstory_lastOpacity ?? 1;\n graphic.animate().to({ opacity: appear ? opacity : 0 }, duration, easing as EasingType);\n delete graphic._vstory_lastOpacity;\n }\n\n return true;\n }\n}\n\nexport const fadeInstance = new FadeVisibility();\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IMoveParams, IMoveToParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class MoveVisibility {\n setInitAttributes(graphic: IGraphic, params: IMoveParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const { fromX, fromY } = this.getMoveStartPos(graphic, params);\n graphic._vstory_lastX = graphic.attribute.x ?? 0;\n graphic._vstory_lastY = graphic.attribute.y ?? 0;\n graphic.setAttributes({\n x: fromX,\n y: fromY\n });\n }\n run(graphic: IGraphic, params: IMoveParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n return appear ? this._moveIn(graphic, params) : this._moveOut(graphic, params);\n }\n\n getMoveStartPos(graphic: IGraphic, params: IMoveParams) {\n const from = params.pos ?? 1;\n const isVariableSpeed = params.isVariableSpeed ?? true;\n\n // 图形宽高\n const width = Math.abs(graphic.AABBBounds.x2 - graphic.AABBBounds.x1);\n const height = Math.abs(graphic.AABBBounds.y2 - graphic.AABBBounds.y1);\n\n let fromX = graphic.attribute.x;\n let fromY = graphic.attribute.y;\n if (isVariableSpeed) {\n // 同时从边缘进入, 速度不同, 同时抵达目标.\n switch (from) {\n case 'right':\n // 图形左边缘为起点\n fromX = graphic.parent.width;\n break;\n case 'left':\n // 图形右边缘为起点\n fromX = -width;\n break;\n case 'bottom':\n // 从下往上进入\n fromY = graphic.parent.height + height;\n break;\n case 'top':\n // 从上往下进入\n fromY = -height;\n break;\n case 'top-right':\n // 从右上进入 ↗️\n fromY = -height;\n fromX = graphic.parent.width;\n break;\n case 'top-left':\n // 从左上进入 ↖️\n fromY = -height;\n fromX = -width;\n break;\n case 'bottom-left':\n // 从左下进入 ↙️\n fromY = graphic.parent.height + height;\n fromX = -width;\n break;\n case 'bottom-right':\n // 从右下进入 ↘️\n fromY = graphic.parent.height + height;\n fromX = graphic.parent.width;\n break;\n }\n } else {\n // 速度相同, 相对位置不变, 但不同时出现.\n const distance = Math.max(graphic.parent.width, graphic.parent.height);\n switch (from) {\n case 'right':\n // 从右往左进入\n fromX += distance;\n break;\n case 'left':\n // 从左往右进入\n fromX += -distance;\n break;\n case 'bottom':\n // 从下往上进入\n fromY += distance;\n break;\n case 'top':\n // 从上往下进入\n fromY += -distance;\n break;\n case 'top-right':\n // 从右上进入 ↗️\n fromX += distance;\n fromY += -distance;\n break;\n case 'top-left':\n // 从左上进入 ↖️\n fromX += -distance;\n fromY += -distance;\n break;\n case 'bottom-left':\n // 从左下进入 ↙️\n fromY += distance;\n fromX += -distance;\n break;\n case 'bottom-right':\n // 从右下进入 ↘️\n fromX += distance;\n fromY += distance;\n break;\n }\n }\n\n return { fromX, fromY };\n }\n\n _moveIn(graphic: IGraphic, params: IMoveParams) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currX = graphic._vstory_lastX ?? graphic.attribute.x;\n const currY = graphic._vstory_lastY ?? graphic.attribute.y;\n\n graphic.animate().to({ x: currX, y: currY }, duration, easing as EasingType);\n return true;\n }\n\n _moveOut(graphic: IGraphic, params: IMoveParams) {\n const { move = {} } = params;\n const to = move.pos ?? params.pos;\n const duration = move.duration ?? params.duration;\n const easing = move.easing ?? params.easing;\n const isVariableSpeed = move.isVariableSpeed ?? true;\n\n let toX = graphic.attribute.x;\n let toY = graphic.attribute.y;\n\n // 图形宽高\n const width = Math.abs(graphic.AABBBounds.x2 - graphic.AABBBounds.x1);\n const height = Math.abs(graphic.AABBBounds.y2 - graphic.AABBBounds.y1);\n\n if (isVariableSpeed) {\n // 同时抵达边缘, 速度不同.\n switch (to) {\n case 'right':\n // 画布容器宽度\n toX = graphic.parent.width;\n break;\n case 'left':\n // 负的图形宽度\n toX = -width;\n break;\n case 'bottom':\n // 容器高度 + 图形高度\n toY = graphic.parent.height + height;\n break;\n case 'top':\n // 负的图形高度\n toY = -height;\n break;\n }\n } else {\n // 速度相同, 相对位置不变.\n const distance = Math.max(graphic.parent.width, graphic.parent.height);\n switch (to) {\n case 'right':\n toX += distance;\n break;\n case 'left':\n toX += -distance;\n break;\n case 'bottom':\n toY += distance;\n break;\n case 'top':\n toY += -distance;\n break;\n }\n }\n graphic\n .animate()\n .to({ x: toX, y: toY }, duration, easing as EasingType)\n // 最终不显示\n .onEnd(() => {\n graphic.setAttributes({ visible: false, visibleAll: false } as any);\n });\n return true;\n }\n}\n\nexport const moveInstance = new MoveVisibility();\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IWipeInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nconst Direction: any = {\n right: 'l2r',\n left: 'r2l',\n top: 't2b',\n bottom: 'b2t'\n};\n\nexport class WipeVisibility {\n setInitAttributes(graphic: IGraphic, params: IWipeInParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const { fromRatio = 0 } = params;\n const from = params.from ?? 'right';\n graphic.setAttributes({\n wipeDirection: Direction[from],\n wipeRatio: fromRatio\n } as any);\n }\n run(graphic: IGraphic, params: IWipeInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n\n const duration = params.duration;\n const easing = params.easing;\n\n let fromRatio = 0;\n let toRatio = 1;\n if (!appear) {\n [fromRatio, toRatio] = [toRatio, fromRatio];\n }\n\n graphic\n .animate()\n .to({ wipeRatio: toRatio }, duration, easing)\n .onEnd(() => {\n graphic.setAttributes({ wipeRatio: toRatio } as any);\n });\n return true;\n }\n}\n\nexport const wipeInstance = new WipeVisibility();\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { array } from '@visactor/vutils';\nimport { scaleInstance } from '../../common/scale-processor';\nimport { fadeInstance } from '../../common/fade-processor';\nimport { moveInstance } from '../../common/move-processor';\nimport { wipeInstance } from '../../common/wipe-processor';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { IGraphic } from '@visactor/vrender-core';\n\nexport class CommonVisibilityActionProcessor extends ActionProcessorItem {\n name: string = 'appearOrDisAppear';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n super.preRun(character, actionSpec);\n const { animation = {}, selector } = getPayload(actionSpec);\n const { effect = 'default' } = animation as any;\n array(effect).forEach(_effect => {\n const graphics = this.selectBySelector(selector, character);\n const appear = actionSpec.action === 'appear';\n const effectInstance = this.getEffectInstance(_effect, appear);\n if (effectInstance) {\n graphics.forEach(graphic => {\n effectInstance.run(graphic, animation as any, appear);\n });\n }\n });\n }\n\n applyAttrsForVisibility(character: ICharacter, actionSpec: IActionSpec): void {\n const { animation = {}, selector } = getPayload(actionSpec);\n const { effect = 'default' } = animation as any;\n array(effect).forEach(_effect => {\n const graphics = this.selectBySelector(selector, character);\n const appear = actionSpec.action === 'appear';\n const effectInstance = this.getEffectInstance(_effect, appear);\n if (effectInstance) {\n graphics.forEach(graphic => {\n effectInstance.setInitAttributes(graphic, animation as any, appear);\n });\n }\n });\n }\n\n selectBySelector(selector: string | string[], character: ICharacter): IGraphic[] {\n if (character.getGraphicBySelector) {\n return character.getGraphicBySelector(selector);\n }\n return [getCharacterParentGraphic(character)];\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'scale':\n return scaleInstance;\n case 'wipe':\n return wipeInstance;\n case 'fade':\n return fadeInstance;\n case 'move':\n return moveInstance;\n }\n return fadeInstance;\n }\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IMoveToParams } from '../../common/interface';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport interface IComponentMoveToPayLoad extends IActionPayload {\n destination: { x: number; y: number };\n}\nexport interface IComponentMoveToAction extends IAction {\n action: 'moveTo';\n}\n\nexport function moveTo(graphic: IGraphic, animation: IMoveToParams, destination: IPointLike) {\n if (graphic) {\n const { duration, easing } = animation;\n if (destination) {\n graphic.animate().to(destination, duration, easing as EasingType);\n }\n }\n}\n\nexport class CommonMoveToActionProcessor extends ActionProcessorItem {\n name: 'moveTo';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentMoveToAction): void {\n super.preRun(character, actionSpec);\n const { animation = {}, destination } = getPayload(actionSpec) as IComponentMoveToPayLoad;\n\n moveTo(getCharacterParentGraphic(character), animation as any, destination);\n }\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IScaleToParams } from '../../common/interface';\n\nexport interface IComponentScaleToPayLoad extends IActionPayload {\n scale: { scaleX: number; scaleY: number };\n}\nexport interface IComponentScaleToAction extends IAction {\n action: 'scaleTo';\n}\n\nexport function scaleTo(graphic: IGraphic, animation: IScaleToParams, scaleTo: { scaleX: number; scaleY: number }) {\n if (graphic) {\n const { duration, easing } = animation;\n if (scaleTo) {\n graphic.animate().to(scaleTo, duration, easing as EasingType);\n }\n }\n}\n\nexport class CommonScaleToActionProcessor extends ActionProcessorItem {\n name: 'scaleTo';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentScaleToAction): void {\n super.preRun(character, actionSpec);\n const { animation = {}, scale } = getPayload(actionSpec) as IComponentScaleToPayLoad;\n scaleTo(getCharacterParentGraphic(character), animation as any, scale);\n }\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\n\nexport class ImageVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n}\n\nexport function registerImageVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.IMAGE, {\n [ACTION_TYPE.APPEAR]: new ImageVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ImageVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerImageVisibilityAction } from './image-visibility';\n\nexport function registerImageAction() {\n registerImageVisibilityAction();\n}\n","import type { IGraphic } from '@visactor/vrender-core';\n\nexport abstract class BaseVisibility {\n protected getGraphics(graphic: IGraphic, cb: (graphic: IGraphic) => void) {\n if (graphic.isContainer) {\n graphic.forEachChildren((g: any) => {\n cb(g);\n });\n } else {\n cb(graphic);\n }\n }\n\n run(graphic: IGraphic, params: any, appear: boolean) {\n this.getGraphics(graphic, (g: IGraphic) => {\n this._run(g, params, appear);\n });\n return true;\n }\n\n setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n this.getGraphics(graphic, (g: IGraphic) => {\n this._setInitAttributes(g, params, appear);\n });\n }\n\n protected abstract _setInitAttributes(graphic: IGraphic, params: any, appear: boolean): void;\n protected abstract _run(graphic: IGraphic, params: any, appear: boolean): void;\n}\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IClipRangeParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\nimport { BaseVisibility } from './base-visibility-processor';\n\nexport class ClipRangeVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: IClipRangeParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const fromClipRange = params.clipRange ?? 0;\n graphic._vstory_lastScaleClipRange = (graphic.attribute as any).clipRange ?? 1;\n graphic.setAttributes({\n clipRange: fromClipRange\n } as any);\n }\n protected _run(graphic: IGraphic, params: IClipRangeParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n const { fade = {} } = params;\n const duration = fade.duration ?? params.duration;\n const easing = fade.easing ?? params.easing;\n const currClipRange = graphic._vstory_lastScaleClipRange ?? 1;\n\n const toRange = appear ? currClipRange : 0;\n\n graphic.animate().to({ clipRange: toRange }, duration, easing as EasingType);\n\n return true;\n }\n}\n\nexport const clipRangeInstance = new ClipRangeVisibility();\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\nexport class LineVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerLineVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.LINE, {\n [ACTION_TYPE.APPEAR]: new LineVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LineVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerLineVisibilityAction } from './line-visibility';\n\nexport function registerLineAction() {\n registerLineVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\n\nexport class RectVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n}\n\nexport function registerRectVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RECT, {\n [ACTION_TYPE.APPEAR]: new RectVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new RectVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerRectVisibilityAction } from './rect-visibility';\n\nexport function registerRectAction() {\n registerRectVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\n\nexport class ShapeVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerShapeVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.SHAPE, {\n [ACTION_TYPE.APPEAR]: new ShapeVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ShapeVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerShapeVisibilityAction } from './shape-visibility';\n\nexport function registerShapeAction() {\n registerShapeVisibilityAction();\n}\n","import type { EasingType, IGraphic, IText } from '@visactor/vrender-core';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { TypeWriter } from '@visactor/vstory-animate';\nimport { isString } from '@visactor/vutils';\nimport type { ITypeWriterParams } from './interface';\nimport { getCharacterByEffect } from '../../common/common';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport class TypeWriterVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: ITypeWriterParams, appear: boolean) {\n if (!appear) {\n return;\n }\n const fromClipRange = params.clipRange ?? 0;\n graphic._vstory_lastScaleClipRange = (graphic.attribute as any).clipRange;\n graphic.setAttributes({\n clipRange: fromClipRange\n } as any);\n }\n protected _run(graphic: IGraphic, params: ITypeWriterParams, appear: boolean) {\n if (graphic && (graphic.type === 'text' || graphic.type === 'richtext')) {\n const { duration, easing, params: typewriterParams } = params;\n const { text } = graphic.attribute as any;\n if (isString(text)) {\n let from = '';\n let to = text;\n if (!appear) {\n [from, to] = [to, from];\n }\n const a = graphic\n .animate()\n .play(new TypeWriter({ text: from }, { text: to }, duration, easing as EasingType, typewriterParams as any));\n if (!appear) {\n a.reversed(true);\n }\n }\n }\n return true;\n }\n}\n\nconst typewriterIn = new TypeWriterVisibility();\n\nexport class TextVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'typewriter':\n return typewriterIn;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerTextVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.TEXT, {\n [ACTION_TYPE.APPEAR]: new TextVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new TextVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerTextVisibilityAction } from './text-visibility';\n\nexport function registerTextAction() {\n registerTextVisibilityAction();\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport type { ITypeWriterParams } from '../text/interface';\nimport { getCharacterByEffect } from '../../common/common';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { Timeline } from '@visactor/vrender-components';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n return;\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n graphic.appearAnimate({ duration: duration, easing });\n }\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class TimelineVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n\n getEffectInstance(effect: string = 'default', appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport class ForwardVisibility extends BaseVisibility {\n forward: boolean;\n constructor(forward: boolean) {\n super();\n this.forward = forward;\n }\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n return;\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n this.forward ? graphic.forward({ duration: duration, easing }) : graphic.backward({ duration: duration, easing });\n }\n return true;\n }\n}\nconst forward = new ForwardVisibility(true);\nconst backward = new ForwardVisibility(false);\nexport class TimelineStateActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'state';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string = 'forward', appear: boolean) {\n switch (effect) {\n case 'forward':\n return forward;\n case 'backward':\n return backward;\n }\n return forward;\n }\n}\n\nexport function registerTimelineVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.TIMELINE, {\n [ACTION_TYPE.APPEAR]: new TimelineVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new TimelineVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.STATE]: new TimelineStateActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerTimelineVisibilityAction } from './timeline-visibility';\n\nexport function registerTimelineAction() {\n registerTimelineVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\nimport { canDoGraphicAnimation } from '../../common/utils';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n graphic.appearAnimate({ duration: duration, easing });\n }\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class UnitVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n\n getEffectInstance(effect: string = 'default', appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerUnitVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.UNIT, {\n [ACTION_TYPE.APPEAR]: new UnitVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new UnitVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerUnitVisibilityAction } from './unit-visibility';\n\nexport function registerUnitAction() {\n registerUnitVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\nexport class PolygonVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerPolygonVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.POLYGON, {\n [ACTION_TYPE.APPEAR]: new PolygonVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new PolygonVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerPolygonVisibilityAction } from './polygon-visibility';\n\nexport function registerPolygonAction() {\n registerPolygonVisibilityAction();\n}\n","import type { IArc } from '@visactor/vrender-core';\nimport type { IAnimationParams } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport interface IAngleParams extends IAnimationParams {\n from?: {\n startAngle?: number;\n endAngle?: number;\n };\n}\n\nexport class ArcGrowAngle extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: IAngleParams, appear: boolean) {\n if (!appear) {\n return;\n }\n graphic._vstory_lastEndAngle = graphic.attribute.endAngle;\n graphic._vstory_lastStartAngle = graphic.attribute.startAngle;\n\n const { from = {} } = params;\n graphic.setAttributes({\n startAngle: graphic.attribute.startAngle,\n endAngle: from.endAngle ?? from.startAngle ?? graphic.attribute.startAngle\n });\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currStartAngle = graphic._vstory_lastStartAngle ?? graphic.attribute.startAngle;\n const currEndAngle = graphic._vstory_lastEndAngle ?? graphic.attribute.endAngle;\n const attrMap = appear ? { startAngle: currStartAngle, endAngle: currEndAngle } : { startAngle: 0, endAngle: 0 };\n delete graphic._vstory_lastEndAngle;\n delete graphic._vstory_lastStartAngle;\n graphic.animate().to(attrMap, duration, easing);\n\n return true;\n }\n}\n\nconst arcGrowAngleInstance = new ArcGrowAngle();\n\nexport interface IRadiusParams extends IAnimationParams {\n from?: {\n innerRadius?: number;\n outerRadius?: number;\n };\n}\n\nexport class ArcGrowRadius extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: IRadiusParams, appear: boolean) {\n if (!appear) {\n return;\n }\n graphic._vstory_lastInnerRadius = graphic.attribute.innerRadius;\n graphic._vstory_lastOuterRadius = graphic.attribute.outerRadius;\n\n const { from = {} } = params;\n graphic.setAttributes({\n innerRadius: graphic.attribute.innerRadius,\n outerRadius: from.outerRadius ?? from.innerRadius ?? graphic.attribute.innerRadius\n });\n }\n\n protected _run(graphic: IArc, params: IRadiusParams, appear: boolean) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currInnerRadius = graphic._vstory_lastInnerRadius ?? graphic.attribute.innerRadius;\n const currOuterRadius = graphic._vstory_lastOuterRadius ?? graphic.attribute.outerRadius;\n const attrMap = appear\n ? { innerRadius: currInnerRadius, outerRadius: currOuterRadius }\n : { innerRadius: 0, outerRadius: 0 };\n delete graphic._vstory_lastInnerRadius;\n delete graphic._vstory_lastOuterRadius;\n\n graphic.animate().to(attrMap, duration, easing);\n\n return true;\n }\n}\n\nconst arcGrowRadiusInstance = new ArcGrowRadius();\n\nexport class ArcVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'growAngle':\n return arcGrowAngleInstance;\n case 'growRadius':\n return arcGrowRadiusInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerArcVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.ARC, {\n [ACTION_TYPE.APPEAR]: new ArcVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ArcVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerArcVisibilityAction } from './arc-visibility';\nexport { ArcGrowAngle } from './arc-visibility';\nexport type { IAngleParams } from './arc-visibility';\n\nexport function registerArcAction() {\n registerArcVisibilityAction();\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { ActionProcessorItem } from '../processor-item';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { array } from '@visactor/vutils';\n\nexport class VTableBaseActionProcessor extends ActionProcessorItem {\n /**\n * 筛选器,payload中可以配置筛选器来设置这个\n * @param selector\n * @param vtable\n */\n selectBySelector(\n selector: string | string[],\n character: ICharacter\n ): {\n table: boolean;\n panel: boolean;\n rowHeader: IGroup;\n colHeader: IGroup;\n bodyGroup: IGroup;\n } {\n return character.getGraphicBySelector(selector);\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n let totalStartTime = Infinity;\n let totalEndTime = -Infinity;\n array(action.payload).forEach(payload => {\n const { startTime = 0, duration = 0 } = payload?.animation ?? ({} as any);\n totalStartTime = Math.min(startTime ?? 0, totalStartTime);\n totalEndTime = Math.max(startTime + duration, totalEndTime);\n });\n\n let st = globalStartTime + totalStartTime;\n let d = totalEndTime - totalStartTime;\n // 避免数据不合法,算出来时长有问题\n if (!isFinite(st)) {\n st = 0;\n }\n if (!isFinite(d)) {\n d = 0;\n }\n return {\n startTime: st,\n duration: d\n };\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { ITableVisibilityPayload } from '../../interface';\n\nexport const commonFade = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean },\n key: string = 'baseOpacity'\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currOpacity = (instance.attribute as any)[key] ?? 1;\n const opacityMap = disappear ? { from: currOpacity, to: 0 } : { from: 0, to: currOpacity };\n\n instance.setAttributes({ [key]: opacityMap.from });\n instance.animate().to({ [key]: opacityMap.to }, duration, easing);\n};\nexport const commonGrow = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currScaleX = instance.attribute.scaleX;\n const currScaleY = instance.attribute.scaleY;\n const opacityMap = disappear\n ? { fromX: currScaleX ?? 1, fromY: currScaleY ?? 1, toX: 0, toY: 0 }\n : { fromX: 0, fromY: 0, toX: currScaleX ?? 1, toY: currScaleY ?? 1 };\n\n instance.setAttributes({ scaleX: opacityMap.fromX, scaleY: opacityMap.fromY });\n instance.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n};\n","import { runPanelAppear, runTableAppear } from './common/tableAppear';\n\nexport const transformMap = {\n appear: {\n // table:\n table: runTableAppear,\n // panel\n panel: runPanelAppear\n }\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade, commonGrow } from './commonAppear';\nimport type { ITableVisibilityPayload } from '../../interface';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runTableAppear = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nexport const runPanelAppear = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option, 'opacity');\n }\n default: {\n return commonFade(instance, animation, option, 'opacity');\n }\n }\n};\n","import { array, merge } from '@visactor/vutils';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VTableBaseActionProcessor } from './base';\nimport type { ITableVisibilityAction, ITableVisibilityPayload } from './interface';\nimport { transformMap } from './transformFunc/transformMap';\nimport type { IGroup } from '@visactor/vrender-core';\nimport { ACTION_TYPE } from '../constants/action';\nimport { CommonBounceActionProcessor } from '../component/common/bounce';\nimport { CommonStyleActionProcessor } from '../component/common/style';\nimport type { IVTable } from '@visactor/vstory-core/src/character/table/interface/character-table';\nimport { scaleInstance } from '../common/scale-processor';\nimport { wipeInstance } from '../common/wipe-processor';\nimport { fadeInstance } from '../common/fade-processor';\nimport { moveInstance } from '../common/move-processor';\n\nexport class VTableVisibilityActionProcessor extends VTableBaseActionProcessor {\n name: 'appearOrDisAppear';\n protected character: ICharacter | null;\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: ITableVisibilityAction): void {\n super.preRun(character, actionSpec);\n this.character = character;\n // 基于选择器做筛选\n // 同一个Action的payload数组中,项与项之间是覆盖关系,后项覆盖前项\n let runnedTable = false;\n array(actionSpec.payload)\n .reverse()\n .forEach(payload => {\n const { table, panel, rowHeader, colHeader, bodyGroup } = this.selectBySelector(\n payload.selector ?? '*',\n character\n );\n if (!runnedTable && table) {\n // table & panel\n this.tableVisibility(character.graphic as any, actionSpec.action, payload);\n } else if (!runnedTable && panel) {\n // panel\n this.panelVisibility(character.graphic as any, actionSpec.action, payload);\n }\n if (rowHeader) {\n this.headerAppear('row', character.graphic as any, rowHeader, actionSpec.action, payload, true);\n }\n if (colHeader) {\n this.headerAppear('col', character.graphic as any, colHeader, actionSpec.action, payload, true);\n }\n if (bodyGroup) {\n this.bodyGroupAppear(character.graphic as any, bodyGroup, actionSpec.action, payload, true);\n }\n runnedTable = runnedTable || table;\n });\n this.character = null;\n }\n\n protected headerAppear(\n type: 'row' | 'col',\n vtable: IVTable,\n headerGroup: IGroup,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n isRun: boolean\n ) {\n if (isRun) {\n headerGroup.setAttribute('visibleAll', true);\n const appear = action === 'appear';\n const effectInstance = this.getEffectInstance(payload.animation?.effect as string, appear);\n effectInstance.run(headerGroup, { from: type === 'col' ? 'left' : 'top', ...payload.animation }, appear, true);\n } else {\n headerGroup.setAttribute('visibleAll', false);\n }\n }\n\n protected bodyGroupAppear(\n vtable: IVTable,\n bodyGroup: IGroup,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n isRun: boolean\n ) {\n if (isRun) {\n bodyGroup.setAttribute('visibleAll', true);\n // 做默认动画\n const appear = action === 'appear';\n const { duration, oneByOne = true, easing } = payload.animation;\n let delay = 0;\n let actualDuration = duration;\n if (oneByOne) {\n actualDuration = duration * 0.6;\n delay = (duration - actualDuration) / bodyGroup.childrenCount;\n }\n const from = appear ? { baseOpacity: 0 } : { baseOpacity: 1 };\n const to = appear ? { baseOpacity: 1 } : { baseOpacity: 0 };\n bodyGroup.forEachChildren((child, i) => {\n (child as any).setAttributes(from);\n (child as any)\n .animate()\n .wait(delay * i)\n .to(to, actualDuration, easing);\n });\n } else {\n bodyGroup.setAttribute('visibleAll', false);\n }\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'scale':\n return scaleInstance;\n case 'wipe':\n return wipeInstance;\n case 'fade':\n return fadeInstance;\n case 'move':\n return moveInstance;\n }\n return fadeInstance;\n }\n\n // protected rowHeaderAppear(\n // vtable: IVTable,\n // rowHeader: IGroup\n // ) {\n // return this.headerAppear(vtable, rowHeader);\n // }\n\n protected tableVisibility(tableGraphic: any, action: 'appear' | 'disappear', payload: ITableVisibilityPayload) {\n const appearTransformFunc = transformMap.appear.table;\n const defaultPayload = VTableVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(tableGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected panelVisibility(tableGraphic: any, action: 'appear' | 'disappear', payload: ITableVisibilityPayload) {\n const appearTransformFunc = transformMap.appear.panel;\n const defaultPayload = VTableVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(tableGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n private runTransformFunc(\n instance: IGroup,\n appearTransformFunc: any,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n defaultPayload: IActionSpec['payload'] = {} as any,\n actionOption: Record = {}\n ) {\n if (instance && appearTransformFunc) {\n const mergePayload = merge({}, defaultPayload, payload) as ITableVisibilityPayload;\n appearTransformFunc(instance, mergePayload.animation, {\n disappear: action === 'disappear',\n ...actionOption,\n payload: mergePayload\n });\n }\n }\n\n static rectPayload = (seriesType: string) => {\n return {\n animation: {\n effect: seriesType === 'treemap' ? 'centerGrow' : 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n };\n\n static defaultPayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static fadePayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'fade',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static arcPayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'growAngle',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static linePayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n static symbolPayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n static textPayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n}\n\nexport function registerVTableVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VTABLE, {\n [ACTION_TYPE.APPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n\n globalProcessorRegistry.registerProcessor(CharacterType.PIVOT_CHART, {\n [ACTION_TYPE.APPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n}\n","import { registerVTableVisibilityAction } from './visibility';\n\nexport function registerVTableAction() {\n registerVTableVisibilityAction();\n}\n","import type { IActions, ICharacterConfig, IStoryDSL } from '@visactor/vstory-core';\nimport { isEqual, isFunction, isObject, merge } from '@visactor/vutils';\nimport type { IUnitTemplateSpec, QueryNode } from './interface';\nimport { DEFAULT_ANIMATION_DURATION, DEFAULT_SCENE_DURATION, defaultConfig } from './default';\nimport type { ISymbolGraphicAttribute } from '@visactor/vrender-core';\n\nexport function createUnitTemplate(params: IUnitTemplateSpec) {\n const input = initialInput(params);\n const { characters: layoutCharacters, actions: layoutActions } = generateLayoutSpec(input);\n const { characters: titleCharacters, actionsGroup: titleActionsGroup } = generateTitleSpec(input);\n const { character: vizCharacter, actions: vizActions } = generateVizSpec(input);\n\n const spec: IStoryDSL = {\n characters: [...layoutCharacters, ...titleCharacters, vizCharacter],\n acts: [\n {\n id: 'page1',\n scenes: input.scenes.map((_, sceneIndex) => {\n return {\n id: sceneIndex.toString(),\n actions: [...layoutActions, ...titleActionsGroup[sceneIndex], vizActions[sceneIndex]]\n };\n })\n }\n ]\n };\n\n return spec;\n}\n\nfunction initialInput(input: IUnitTemplateSpec): IUnitTemplateSpec {\n const { data, ...restInput } = input;\n const res = merge({}, defaultConfig, restInput);\n res.data = data;\n return res;\n}\n\nfunction generateLayoutSpec(input: IUnitTemplateSpec) {\n const {\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: {\n height: titleHeight = defaultConfig.layout.title.height,\n background: titleBackgroundColor = defaultConfig.layout.title.background\n } = {},\n viz: { background: vizBackgroundColor = defaultConfig.layout.viz.background, ...rest } = {}\n } = {}\n } = input;\n const characters: ICharacterConfig[] = [\n {\n type: 'Rect',\n id: 'background-title',\n zIndex: 2,\n position: {\n top: 0,\n left: 0,\n width: layoutWidth,\n height: titleHeight\n },\n options: {\n graphic: {\n fill: titleBackgroundColor,\n stroke: false\n }\n }\n },\n {\n type: 'Rect',\n id: 'background',\n zIndex: 0,\n position: {\n top: 0,\n left: 0,\n width: layoutWidth,\n height: layoutHeight\n },\n options: {\n graphic: {\n background: vizBackgroundColor,\n ...rest,\n stroke: false\n }\n }\n }\n ];\n const actions: IActions[] = [\n {\n characterId: 'background-title',\n characterActions: [\n {\n action: 'appear',\n startTime: 0,\n payload: {\n animation: {\n effect: 'move',\n duration: 1\n }\n }\n }\n ]\n },\n {\n characterId: 'background',\n characterActions: [\n {\n action: 'appear',\n startTime: 0,\n payload: {\n animation: {\n effect: 'move',\n duration: 1\n }\n }\n }\n ]\n }\n ];\n return { characters, actions };\n}\n\nfunction generateTitleSpec(input: IUnitTemplateSpec) {\n const {\n scenes,\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: {\n height: titleHeight = defaultConfig.layout.title.height,\n padding: {\n left: titlePaddingLeft = defaultConfig.layout.title.padding.left,\n right: titlePaddingRight = defaultConfig.layout.title.padding.right\n } = {},\n style: titleStyle = defaultConfig.layout.title.style\n } = {}\n } = {}\n } = input;\n\n const startTime = 0;\n const characters: ICharacterConfig[] = scenes.map((scene, sceneIndex) => {\n return {\n type: 'Text',\n id: 'title-' + sceneIndex,\n zIndex: 3,\n position: {\n top: titleHeight / 2,\n left: layoutWidth / 2,\n width: layoutWidth - titlePaddingLeft - titlePaddingRight,\n height: layoutHeight\n },\n options: {\n graphic: {\n width: layoutWidth - titlePaddingLeft - titlePaddingRight,\n height: layoutHeight,\n ...titleStyle,\n textConfig: scene.title\n }\n }\n };\n });\n const actionsGroup: IActions[][] = scenes.map((scene, sceneIndex) => {\n const actions: IActions[] = [\n {\n characterId: 'title-' + sceneIndex,\n characterActions: [\n {\n action: 'appear',\n startTime: startTime + (scene.animationDuration ?? DEFAULT_ANIMATION_DURATION) + 1,\n payload: {\n animation: {\n duration: scene.animationDuration ?? DEFAULT_ANIMATION_DURATION,\n easing: 'linear',\n effect: 'fade'\n }\n }\n }\n ]\n }\n ];\n\n // Only add disappear action if it's not the last scene\n if (sceneIndex < scenes.length - 1) {\n actions.push({\n characterId: `title-${sceneIndex}`,\n characterActions: [\n {\n action: 'disappear',\n startTime:\n startTime +\n (scene.sceneDuration ?? DEFAULT_SCENE_DURATION) -\n (scene.animationDuration ?? DEFAULT_ANIMATION_DURATION),\n payload: {\n animation: {\n duration: scene.animationDuration ?? DEFAULT_ANIMATION_DURATION,\n easing: 'linear',\n // @ts-ignore\n effect: 'fade'\n }\n }\n }\n ]\n });\n }\n\n return actions;\n });\n\n return { characters, actionsGroup };\n}\n\nfunction generateVizSpec(input: IUnitTemplateSpec) {\n const { scenes, data, unit: { defaultStyle = defaultConfig.unit.defaultStyle } = {} } = input;\n const initialStyleList: ISymbolGraphicAttribute[] = [];\n for (let i = 0; i < data.length; i++) {\n if (isFunction(defaultStyle)) {\n initialStyleList.push(defaultStyle(i));\n }\n if (isObject(defaultStyle)) {\n initialStyleList.push(defaultStyle);\n }\n }\n const character: ICharacterConfig = getUnitCharacter(initialStyleList, input);\n const actions: IActions[] = [];\n const startTime = 0;\n let prevStyleList = initialStyleList;\n for (let sceneIndex = 0; sceneIndex < scenes.length; sceneIndex++) {\n const sceneSpec = scenes[sceneIndex];\n const { nodes, animationDuration } = sceneSpec;\n const indexList = Array.from({ length: data.length }, (_, i) => i);\n const styleList = prevStyleList.slice();\n updateStyleList(styleList, nodes, data, indexList);\n const action = createUnitViz(styleList, animationDuration ?? DEFAULT_ANIMATION_DURATION, startTime);\n prevStyleList = styleList;\n actions.push(action);\n }\n return { character, actions };\n}\n\nfunction updateStyleList(\n styleList: ISymbolGraphicAttribute[],\n nodes: QueryNode[],\n data: Record[],\n indexList: number[]\n) {\n for (const node of nodes) {\n const query = node.query;\n const filteredIndexList = query ? indexList.filter(index => query(data[index])) : indexList;\n for (const index of filteredIndexList) {\n styleList[index] = { ...styleList[index], ...node.style };\n }\n if (node.children) {\n updateStyleList(styleList, node.children, data, filteredIndexList);\n }\n }\n return styleList;\n}\n\nfunction createUnitViz(styleList: ISymbolGraphicAttribute[], animationDuration: number, startTime: number): IActions {\n const action: IActions = {\n characterId: 'unit',\n characterActions: [\n {\n action: 'style',\n startTime: startTime,\n payload: {\n animation: {\n effect: 'default',\n duration: animationDuration,\n easing: 'linear',\n stagger: {\n enable: true\n }\n },\n graphic: {\n units: generateUnitStyleList(styleList)\n }\n }\n } as any\n ]\n };\n\n return action;\n}\n\nfunction getUnitCharacter(styleList: ISymbolGraphicAttribute[], input: IUnitTemplateSpec): ICharacterConfig {\n const {\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: { height: titleHeight = defaultConfig.layout.title.height } = {},\n viz: {\n padding: {\n left: vizPaddingLeft = defaultConfig.layout.viz.padding.left,\n right: vizPaddingRight = defaultConfig.layout.viz.padding.right,\n top: vizPaddingTop = defaultConfig.layout.viz.padding.top,\n bottom: vizPaddingBottom = defaultConfig.layout.viz.padding.bottom\n } = {},\n direction: vizDirection = defaultConfig.layout.viz.direction\n } = {}\n } = {},\n unit: {\n gap: unitGap = defaultConfig.unit.gap,\n aspect: unitAspect = defaultConfig.unit.aspect,\n countPerSymbol = defaultConfig.unit.countPerSymbol\n } = {}\n } = input;\n\n const character: ICharacterConfig = {\n type: 'Unit',\n id: 'unit',\n zIndex: 2,\n position: {\n top: titleHeight,\n left: 0,\n width: layoutWidth,\n height: layoutHeight - titleHeight\n },\n options: {\n graphic: {\n padding: {\n top: vizPaddingTop,\n bottom: vizPaddingBottom,\n right: vizPaddingRight,\n left: vizPaddingLeft\n },\n count: styleList.length,\n countPerSymbol,\n units: generateUnitStyleList(styleList),\n gap: unitGap,\n aspect: unitAspect,\n direction: vizDirection\n }\n }\n };\n\n return character;\n}\n\nfunction generateUnitStyleList(styleList: ISymbolGraphicAttribute[]) {\n let startIdx = 0;\n let styleObj = styleList[0];\n const list = [];\n for (let i = 1; i < styleList.length; i++) {\n if (isEqual(styleObj, styleList[i])) {\n continue;\n } else {\n list.push({\n range: [startIdx, i - 1],\n style: styleObj\n });\n startIdx = i;\n styleObj = styleList[i];\n }\n }\n list.push({\n range: [startIdx, styleList.length - 1],\n style: styleObj\n });\n return list;\n}\n","export const LOTTIE = 'Lottie';\n","import { min } from '@visactor/vutils';\nimport { LOTTIE_NUMBER_TYPE } from './constants';\nimport type { IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { getTheme, GraphicType, IContext2d, NOWORK_ANIMATE_ATTR, Rect, vglobal } from '@visactor/vrender-core';\nimport type { ILottie, ILottieGraphicAttribute } from './interface/lottie';\nimport type { AnimationItem } from 'lottie-web';\nimport bodymovin from 'lottie-web';\n\nexport class Lottie extends Rect implements ILottie {\n type: any = 'lottie';\n declare attribute: ILottieGraphicAttribute;\n declare lottieInstance?: AnimationItem;\n declare canvas?: any;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: ILottieGraphicAttribute) {\n super(params);\n this.numberType = LOTTIE_NUMBER_TYPE;\n this.initLottieWeb(this.attribute.data);\n }\n\n setAttributes(params: Partial, forceUpdateTag?: boolean, context?: any): void {\n if (params.data) {\n this.initLottieWeb(params.data);\n }\n return super.setAttributes(params, forceUpdateTag, context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: any): void {\n if (key === 'data') {\n this.initLottieWeb(value);\n }\n return super.setAttribute(key, value, forceUpdateTag, context);\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).rect;\n }\n\n initLottieWeb(data: string) {\n // 必须是浏览器环境才行\n if (vglobal.env !== 'browser') {\n return;\n }\n if (this.lottieInstance) {\n this.releaseLottieInstance();\n }\n const theme = this.getGraphicTheme();\n const { width = theme.width, height = theme.height } = this.attribute;\n const canvas = vglobal.createCanvas({ width, height, dpr: vglobal.devicePixelRatio });\n const params: any = {\n // wrapper: svgContainer,\n rendererSettings: {\n context: canvas.getContext('2d')\n },\n animType: 'canvas',\n loop: true\n };\n if (typeof data === 'string') {\n params.path = data;\n } else {\n params.animationData = data;\n }\n this.lottieInstance = bodymovin.loadAnimation(params);\n this.canvas = canvas;\n this.lottieInstance.addEventListener('drawnFrame', this.renderNextFrame);\n }\n\n renderNextFrame = () => {\n this.stage.renderNextFrame();\n };\n\n release(): void {\n super.release();\n this.releaseLottieInstance();\n }\n\n releaseLottieInstance() {\n this.lottieInstance.removeEventListener('drawnFrame', this.renderNextFrame);\n this.lottieInstance.destroy();\n this.lottieInstance = null;\n }\n}\n\nexport function createLottie(attributes: ILottieGraphicAttribute): ILottie {\n return new Lottie(attributes);\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ILottieComponentAttributes } from './lottie-interface';\nimport { Lottie } from '@visactor/vrender-kits';\n\nexport class LottieComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n lottieInstance: Lottie;\n\n constructor(attributes: ILottieComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LottieComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderLottie();\n }\n protected renderLottie() {\n const { graphic, padding, width, height } = this.attribute as ILottieComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.lottieInstance) {\n const lottie = new Lottie(attribute);\n this.lottieInstance = lottie;\n this.addChild(lottie);\n } else {\n this.lottieInstance.setAttributes(attribute);\n }\n }\n}\n","import type { IComponentCharacterRuntime, ICharacterComponent } from '@visactor/vstory-core';\nimport { RuntimeStore } from '@visactor/vstory-core';\n// import loading1 from './lottie-files/loading1'\nimport { loading1 } from './lottie-file/loading1';\nimport { loading2 } from './lottie-file/loading2';\nimport { loading3 } from './lottie-file/loading3';\n\nconst builtinLottieMap: Record = {\n loading1,\n loading2,\n loading3\n};\n\nexport class LottieRuntime implements IComponentCharacterRuntime {\n type = 'Lottie';\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n\n const { data } = rawAttribute.graphic;\n // 放一个默认的lottie\n const builtData = builtinLottieMap[data];\n if (builtData) {\n rawAttribute.graphic.data = builtData;\n }\n // TODO 目前VRender有问题,必须配置fill才能绘制\n rawAttribute.graphic.fill = true;\n }\n}\n\nexport const LottieRuntimeInstance = new LottieRuntime();\nRuntimeStore.register(LottieRuntimeInstance);\n","// @ts-nocheck\nexport const loading1 = {\n v: '4.6.8',\n fr: 60,\n ip: 0,\n op: 106,\n w: 500,\n h: 500,\n nm: 'Comp 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 2,\n ty: 4,\n nm: 'Shape Layer 5',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 20, s: [0], e: [360] },\n { t: 110 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [10, 10] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 20,\n op: 620,\n st: 20,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 3,\n ty: 4,\n nm: 'Shape Layer 4',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 15, s: [0], e: [360] },\n { t: 105 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [20, 20] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 15,\n op: 615,\n st: 15,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 4,\n ty: 4,\n nm: 'Shape Layer 3',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 10, s: [0], e: [360] },\n { t: 100 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [30, 30] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 10,\n op: 610,\n st: 10,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 5,\n ty: 4,\n nm: 'Shape Layer 2',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 5, s: [0], e: [360] },\n { t: 95 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [40, 40] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 5,\n op: 605,\n st: 5,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 6,\n ty: 4,\n nm: 'Shape Layer 1',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 0, s: [0], e: [360] },\n { t: 90 }\n ]\n },\n p: { a: 0, k: [250, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: {\n a: 1,\n k: [\n {\n i: { x: [0.667, 0.667], y: [1, 1] },\n o: { x: [0.333, 0.333], y: [0, 0] },\n n: ['0p667_1_0p333_0', '0p667_1_0p333_0'],\n t: 0,\n s: [50, 50],\n e: [40, 40]\n },\n {\n i: { x: [0.667, 0.667], y: [1, 1] },\n o: { x: [0.333, 0.333], y: [0, 0] },\n n: ['0p667_1_0p333_0', '0p667_1_0p333_0'],\n t: 84,\n s: [40, 40],\n e: [50, 50]\n },\n { t: 100 }\n ]\n },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 0,\n op: 600,\n st: 0,\n bm: 0,\n sr: 1\n }\n ]\n};\n","// @ts-nocheck\nexport const loading2 = {\n v: '5.1.13',\n fr: 30,\n ip: 0,\n op: 26,\n w: 800,\n h: 600,\n nm: '合成 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 1,\n ty: 4,\n nm: '形状图层 2',\n sr: 1,\n ks: {\n o: { a: 0, k: 80, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [153, 300, 0], ix: 2 },\n a: { a: 0, k: [0, 0, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n hasMask: true,\n masksProperties: [\n {\n inv: false,\n mode: 'a',\n pt: {\n a: 0,\n k: {\n i: [\n [0, 0],\n [0, 0],\n [0, 0],\n [0, 0]\n ],\n o: [\n [0, 0],\n [0, 0],\n [0, 0],\n [0, 0]\n ],\n v: [\n [516.953, -16],\n [-23.062, -16.043],\n [-23.062, 16.039],\n [516.953, 16.082]\n ],\n c: true\n },\n ix: 1\n },\n o: { a: 0, k: 100, ix: 3 },\n x: { a: 0, k: 0, ix: 4 },\n nm: '蒙版 1'\n }\n ],\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: {\n a: 1,\n k: [\n {\n i: { x: [0.52, 0.52], y: [0.96, 1] },\n o: { x: [0.167, 0.167], y: [0.167, 0] },\n n: ['0p52_0p96_0p167_0p167', '0p52_1_0p167_0'],\n t: 0,\n s: [72, 10],\n e: [165, 10]\n },\n {\n i: { x: [0.833, 0.833], y: [0.833, 1] },\n o: { x: [0.48, 0.48], y: [0.04, 0] },\n n: ['0p833_0p833_0p48_0p04', '0p833_1_0p48_0'],\n t: 13,\n s: [165, 10],\n e: [72, 10]\n },\n { t: 25 }\n ],\n ix: 2\n },\n p: {\n a: 1,\n k: [\n {\n i: { x: 0.833, y: 0.833 },\n o: { x: 0.167, y: 0.167 },\n n: '0p833_0p833_0p167_0p167',\n t: 0,\n s: [-46, 0],\n e: [540, 0],\n to: [97.6666641235352, 0],\n ti: [-97.6666641235352, 0]\n },\n { t: 25 }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 4 },\n nm: '矩形路径 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.317815572023, 0.317815572023, 0.317815572023, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n nm: '填充 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n }\n ],\n ip: 0,\n op: 150,\n st: 0,\n bm: 0\n },\n {\n ddd: 0,\n ind: 2,\n ty: 4,\n nm: '形状图层 1',\n sr: 1,\n ks: {\n o: { a: 0, k: 100, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [400, 300, 0], ix: 2 },\n a: { a: 0, k: [0, 0, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [540, 10], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: '矩形路径 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.852359056473, 0.852359056473, 0.852359056473, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n nm: '填充 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n }\n ],\n ip: 0,\n op: 150,\n st: 0,\n bm: 0\n }\n ],\n markers: []\n};\n","// @ts-nocheck\nexport const loading3 = {\n v: '5.5.2',\n fr: 60,\n ip: 20,\n op: 90,\n w: 200,\n h: 200,\n nm: 'Comp 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 1,\n ty: 4,\n nm: 'Shape Layer 1',\n sr: 1,\n ks: {\n o: { a: 0, k: 100, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [99.944, 100.007, 0], ix: 2 },\n a: { a: 0, k: [-2.909, 2.363, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 55, s: [0, 0] },\n { t: 70, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 9',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 1,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 50, s: [0, 0] },\n { t: 65, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 8',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 2,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 7',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 3,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 50, s: [0, 0] },\n { t: 65, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 6',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 4,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 5',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 5,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 25, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [0, 0] },\n { t: 55, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 4',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 6,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 3',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 7,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 25, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [0, 0] },\n { t: 55, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 2',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 8,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 20, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [0, 0] },\n { t: 50, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 1',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 9,\n mn: 'ADBE Vector Group',\n hd: false\n }\n ],\n ip: 0,\n op: 141,\n st: 0,\n bm: 0\n }\n ],\n markers: []\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { LOTTIE } from './constant';\nimport { LottieComponent } from './LottieComponent';\nimport type { ILottieComponentAttributes } from './lottie-interface';\nimport './lottie-runtime';\n\nexport class LottieCharacter extends CharacterComponent {\n static type = LOTTIE;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true,\n Lottie: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILottieComponentAttributes): void {\n this._graphic = new LottieComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor,\n getCharacterByEffect\n} from '@visactor/vstory-player';\nimport { LOTTIE } from '../../character/lottie/constant';\n\nfunction runLottieAnimate(character: ICharacter, effect: string) {\n const graphics = getCharacterByEffect(character, effect) as IGraphic[];\n graphics.forEach((graphic: any) => _runLottieAnimate(graphic));\n}\n\nfunction _runLottieAnimate(graphic: IGraphic) {\n if (graphic && graphic.type !== 'text' && graphic.type !== 'richtext') {\n if (graphic.lottieInstance) {\n graphic.lottieInstance.stop();\n graphic.lottieInstance.play();\n }\n }\n}\n\nexport class LottieVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n super.run(character, actionSpec);\n runLottieAnimate(character, actionSpec.action);\n }\n}\n\nexport function registerLottieVisibilityAction() {\n globalProcessorRegistry.registerProcessor(LOTTIE, {\n [ACTION_TYPE.APPEAR]: new LottieVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LottieVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { AbstractComponent, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ISinglePieComponentAttributes, ISinglePieGraphicAttribute } from './single-pie-interface';\nimport type { IArc } from '@visactor/vrender-core';\n\nclass VRenderSinglePieComponent extends AbstractComponent {\n protected render(): void {\n const { template } = this.attribute as ISinglePieGraphicAttribute;\n if (template === 'montage') {\n return this.renderMontageTemp();\n } else if (template === 'contain') {\n return this.renderContainTemp();\n }\n\n return this.renderDefaultTemp();\n }\n\n renderDefaultTemp() {\n const { trackPie, pie, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const { startAngle = 0, endAngle = Math.PI * 2 } = pie;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: endAngle,\n endAngle: startAngle + Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...pie\n },\n 'arc'\n ) as IArc;\n }\n\n renderMontageTemp() {\n const { trackPie, pie, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...pie\n },\n 'arc'\n ) as IArc;\n }\n\n renderContainTemp() {\n const { trackPie, pie = {}, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const { startAngle = 0, endAngle = Math.PI * 2 } = pie;\n let deltaAngle = Math.abs(endAngle - startAngle);\n while (deltaAngle > Math.PI * 2) {\n deltaAngle -= Math.PI * 2;\n }\n const r = (radius * deltaAngle) / Math.PI / 2;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n x: width / 2,\n y: height - r,\n outerRadius: r,\n innerRadius: 0,\n ...pie,\n startAngle: 0,\n endAngle: Math.PI * 2\n },\n 'arc'\n ) as IArc;\n }\n}\n\nexport class SinglePieComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n vrComponent: VRenderSinglePieComponent;\n\n constructor(attributes: ISinglePieComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SinglePieComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPie();\n }\n protected renderPie() {\n const { graphic, padding, width, height } = this.attribute as ISinglePieComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const lottie = new VRenderSinglePieComponent(attribute);\n this.vrComponent = lottie;\n this.addChild(lottie);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const SINGLE_PIE = 'SinglePie';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { SinglePieComponent } from './SinglePieComponent';\nimport type { ISinglePieComponentAttributes } from './single-pie-interface';\nimport { SINGLE_PIE } from './constant';\n\nexport class SinglePieCharacter extends CharacterComponent {\n static type = SINGLE_PIE;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ISinglePieComponentAttributes): void {\n this._graphic = new SinglePieComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport {\n ACTION_TYPE,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor,\n ArcGrowAngle\n} from '@visactor/vstory-player';\nimport { SINGLE_PIE } from '../../character/single-pie/constant';\n\nconst defaultInstance = new ArcGrowAngle();\nexport class SinglePieVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'angle':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerSinglePieVisibilityAction() {\n globalProcessorRegistry.registerProcessor(SINGLE_PIE, {\n [ACTION_TYPE.APPEAR]: new SinglePieVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new SinglePieVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","export const DYNAMIC_LINE = 'DynamicLine';\n","import { DYNAMIC_LINE } from './constant';\nimport type { IDynamicLineChartGraphicAttribute } from './dynamic-line-interface';\nimport type { IChartCharacterRuntime } from '@visactor/vstory-core/es/character/chart/interface/runtime';\nimport type { ICharacterChart } from '@visactor/vstory-core/es/character/chart/interface/character-chart';\nimport { RuntimeStore } from '@visactor/vstory-core';\n\nexport class DynamicLineRuntime implements IChartCharacterRuntime {\n type = DYNAMIC_LINE;\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute() as IDynamicLineChartGraphicAttribute;\n const config = character.getRuntimeConfig().config;\n const { bottomRange } = config.options as any;\n const { spec } = rawAttribute;\n\n const bottom = spec.scrollBar.find((item: any) => item.orient === 'bottom');\n if (bottom) {\n bottom.start = bottomRange[0];\n bottom.end = bottomRange[1];\n }\n spec.animation = true;\n spec.animationAppear = false;\n spec.animationEnter = false;\n\n // 不允许采样,否则轴动画很奇怪\n if (!spec.axes) {\n spec.axes = [];\n }\n let bottomAxis = spec.axes.find((item: any) => item.orient === 'bottom');\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom'\n };\n spec.axes.push(bottomAxis);\n }\n bottomAxis.sampling = false;\n\n if (!bottomAxis.label) {\n bottomAxis.label = {};\n }\n bottomAxis.label.autoHide = false;\n }\n}\n\nexport const DynamicLineRuntimeInstance = new DynamicLineRuntime();\nRuntimeStore.register(DynamicLineRuntimeInstance);\n","import { CharacterChart } from '@visactor/vstory-core';\nimport { DYNAMIC_LINE } from './constant';\nimport type { IDynamicLineChartGraphicAttribute } from './dynamic-line-interface';\nimport './dynamic-line-runtime';\nexport class DynamicLineCharacter extends CharacterChart {\n static type = DYNAMIC_LINE;\n\n static RuntimeMap: { [key: string]: any } = {\n [DYNAMIC_LINE]: true\n };\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'line',\n scrollBar: [\n {\n visible: false,\n orient: 'bottom',\n start: 0,\n end: 0.5,\n roam: true,\n filterMode: 'axis'\n }\n ]\n },\n bottomRange: [0, 0.5]\n };\n }\n}\n","import { AbstractComponent, PopTip, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { IPopTipComponentAttributes } from './poptip-interface';\n\nexport class PopTipComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n },\n graphic: {\n panel: {\n visible: true\n }\n }\n };\n\n vrComponent: PopTip;\n\n constructor(attributes: IPopTipComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTipComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPopTip();\n }\n protected renderPopTip() {\n const { graphic, padding, width, height } = this.attribute as IPopTipComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const poptip = new PopTip(attribute);\n this.vrComponent = poptip;\n this.addChild(poptip);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const POPTIP = 'PopTip';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { PopTipComponent } from './PopTipComponent';\nimport type { IPopTipComponentAttributes } from './poptip-interface';\nimport { POPTIP } from './constant';\n\nexport class PopTipCharacter extends CharacterComponent {\n static type = POPTIP;\n\n protected _group: IGroup;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected createAndAddGraphic(attribute: IPopTipComponentAttributes): void {\n this._graphic = new PopTipComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IArc } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n BaseVisibility,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor\n} from '@visactor/vstory-player';\nimport { POPTIP } from '../../character/poptip/constant';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: any, appear: boolean) {\n if (!appear) {\n return;\n }\n // todo 添加appear属性的初始化逻辑\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n if (appear && graphic && graphic.appearAnimate) {\n graphic.appearAnimate(params);\n } else if (!appear && graphic && graphic.disappearAnimate) {\n graphic.disappearAnimate(params);\n }\n\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class PoptipVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerPopTipVisibilityAction() {\n globalProcessorRegistry.registerProcessor(POPTIP, {\n [ACTION_TYPE.APPEAR]: new PoptipVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new PoptipVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type {\n IGroup,\n ILine,\n ILineGraphicAttribute,\n IRect,\n ISymbol,\n ISymbolGraphicAttribute,\n IText\n} from '@visactor/vrender-core';\nimport { ILineAttribute, InputText, ISymbolAttribute } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { IStoryLabelItemAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { max, merge } from '@visactor/vutils';\n\nexport class StoryLabelItem extends AbstractComponent> {\n name: 'labelItem';\n private _line?: ILine;\n private _symbolStart: ISymbol;\n private _symbolEnd: ISymbol;\n private _symbolStartOuter: ISymbol;\n private _titleTop: IText;\n private _titleBottom: IText;\n private _titleTopPanel: IRect;\n private _titleBottomPanel: IRect;\n\n static defaultAttributes: Partial = {\n // 内容在X上的偏移量\n contentOffsetX: 100,\n // 内容在Y上的偏移量\n contentOffsetY: -60,\n titleTopStyle: {\n fontSize: 12,\n fill: 'white'\n },\n titleBottomStyle: {\n fontSize: 12,\n fill: 'white'\n },\n lineStyle: {\n stroke: 'white',\n lineWidth: 1\n } as ILineGraphicAttribute,\n // 线段开始端点的样式\n symbolStartStyle: {\n symbolType: 'circle',\n size: 3,\n fill: 'white'\n } as Partial,\n // 线段结束端点的样式\n symbolEndStyle: {\n symbolType: 'circle',\n size: 3,\n fill: 'white'\n } as Partial,\n // 线段开始端点外面包裹symbol的样式\n symbolStartOuterStyle: {\n symbolType: 'M0.5,0A0.5,0.5,0,1,1,-0.5,0A0.5,0.5,0,1,1,0.5,0',\n size: 8,\n stroke: 'white'\n } as Partial,\n titleSpace: [2, 2],\n titleTopPanelStyle: {\n visible: false,\n padding: { left: 0, right: 0, bottom: 2, top: 2 },\n cornerRadius: 3\n },\n titleBottomPanelStyle: {\n visible: false,\n padding: { left: 0, right: 0, bottom: 2, top: 2 },\n cornerRadius: 3\n },\n // 默认和简约两套主题\n theme: 'default'\n };\n\n constructor(attributes: IStoryLabelItemAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, StoryLabelItem.defaultAttributes, attributes));\n }\n\n protected render(): void {\n const {\n contentOffsetX,\n contentOffsetY,\n lineStyle,\n symbolStartStyle,\n symbolEndStyle,\n symbolStartOuterStyle,\n titleTop: titleTopText,\n titleBottom: titleBottomText,\n titleTopStyle,\n titleBottomStyle,\n titleSpace,\n titleTopPanelStyle,\n titleBottomPanelStyle,\n theme\n } = this.attribute;\n\n const group = this.createOrUpdateChild('label-item-container', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n const symbolStart = group.createOrUpdateChild(\n 'label-item-symbol-start',\n { x: 0, y: 0, ...symbolStartStyle },\n 'symbol'\n ) as ISymbol;\n const symbolEnd = group.createOrUpdateChild(\n 'label-item-symbol-end',\n { x: contentOffsetX, y: contentOffsetY, ...symbolEndStyle },\n 'symbol'\n ) as ISymbol;\n const symbolStartOut = group.createOrUpdateChild(\n 'label-item-symbol-start-out',\n { x: 0, y: 0, ...symbolStartOuterStyle },\n 'symbol'\n ) as ISymbol;\n\n const spaceW = titleSpace[0];\n const spaceH = titleSpace[1];\n // 逻辑:group占满,title在group内做偏移\n const titleTopGroup = group.createOrUpdateChild(\n 'label-item-title-top-group',\n { x: contentOffsetX, y: contentOffsetY, clip: true },\n 'group'\n ) as IGroup;\n const titleTop = titleTopGroup.createOrUpdateChild(\n 'label-item-title-top',\n {\n x: spaceW,\n y: -spaceH,\n text: titleTopText,\n ...titleTopStyle,\n textBaseline: 'bottom',\n textAlign: 'left',\n zIndex: 10\n },\n 'text'\n ) as IText;\n const titleTopBounds = titleTop.AABBBounds;\n if (contentOffsetX > 0) {\n titleTopGroup.setAttributes({ x: contentOffsetX - titleTopBounds.width() - spaceW * 2 });\n }\n titleTopGroup.setAttributes({\n width: titleTopBounds.width() + spaceW * 2,\n height: -titleTopBounds.height() - spaceH * 2\n });\n // 添加panel\n const titleTopPanel = titleTopGroup.createOrUpdateChild(\n 'label-item-title-top-panel',\n {\n ...titleTopPanelStyle,\n x: titleTopPanelStyle.padding.left,\n y: (titleTopGroup.attribute.height > 0 ? 0 : titleTopGroup.attribute.height) + titleTopPanelStyle.padding.top,\n width: titleTopGroup.attribute.width - titleTopPanelStyle.padding.left - titleTopPanelStyle.padding.right,\n height:\n (titleTopGroup.attribute.height > 0 ? 1 : -1) * titleTopGroup.attribute.height -\n titleTopPanelStyle.padding.bottom -\n titleTopPanelStyle.padding.top,\n scaleCenter: [titleTopGroup.attribute.width / 2, titleTopGroup.attribute.height / 2]\n },\n 'rect'\n ) as IRect;\n this._titleTopPanel = titleTopPanel;\n\n const titleBottomGroup = group.createOrUpdateChild(\n 'label-item-title-bottom-group',\n { x: contentOffsetX, y: contentOffsetY, clip: true },\n 'group'\n ) as IGroup;\n const titleBottom = titleBottomGroup.createOrUpdateChild(\n 'label-item-title-bottom',\n {\n x: spaceW,\n y: spaceH,\n text: titleBottomText,\n ...titleBottomStyle,\n textBaseline: 'top',\n textAlign: 'left',\n zIndex: 10\n },\n 'text'\n ) as IText;\n const titleBottomBounds = titleBottom.AABBBounds;\n if (contentOffsetX > 0) {\n titleBottomGroup.setAttributes({ x: contentOffsetX - titleBottomBounds.width() - spaceW * 2 });\n }\n titleBottomGroup.setAttributes({\n width: titleBottomBounds.width() + spaceW * 2,\n height: titleTopBounds.height() + spaceH * 2\n });\n // 添加panel\n const titleBottomPanel = titleBottomGroup.createOrUpdateChild(\n 'label-item-title-bottom-panel',\n {\n ...titleBottomPanelStyle,\n x: titleBottomPanelStyle.padding.left,\n y:\n (titleBottomGroup.attribute.height > 0 ? 0 : titleBottomGroup.attribute.height) +\n titleBottomPanelStyle.padding.top,\n width:\n titleBottomGroup.attribute.width - titleBottomPanelStyle.padding.left - titleBottomPanelStyle.padding.right,\n height:\n (titleBottomGroup.attribute.height > 0 ? 1 : -1) * titleBottomGroup.attribute.height -\n titleBottomPanelStyle.padding.bottom -\n titleBottomPanelStyle.padding.top,\n scaleCenter: [titleBottomGroup.attribute.width / 2, titleBottomGroup.attribute.height / 2]\n },\n 'rect'\n ) as IRect;\n this._titleBottomPanel = titleBottomPanel;\n\n const maxTextWidth = Math.max(titleTop.AABBBounds.width(), titleBottom.AABBBounds.width()) + spaceW * 2;\n const points = [\n { x: 0, y: 0 },\n contentOffsetX > 0\n ? { x: contentOffsetX - maxTextWidth, y: contentOffsetY }\n : { x: contentOffsetX + maxTextWidth, y: contentOffsetY },\n { x: contentOffsetX, y: contentOffsetY }\n ];\n // simple风格,不绘制终点,同时文字也要居中\n if (theme === 'simple') {\n points.pop();\n const p = points[1];\n symbolEnd.setAttributes(p);\n }\n const line = group.createOrUpdateChild('label-item-line', { x: 0, y: 0, ...lineStyle, points }, 'line') as ILine;\n\n this._symbolEnd = symbolEnd;\n this._symbolStart = symbolStart;\n this._symbolStartOuter = symbolStartOut;\n this._titleTop = titleTop;\n this._titleBottom = titleBottom;\n this._line = line;\n }\n\n appearAnimate(animateConfig: {\n duration?: number;\n easing?: string;\n symbolStartOuterType?: 'scale' | 'clipRange';\n titleType?: 'typewriter' | 'move';\n titlePanelType?: 'scale' | 'stroke';\n }) {\n const {\n duration = 1000,\n easing = 'quadOut',\n symbolStartOuterType = 'scale',\n titleType = 'typewriter',\n titlePanelType = 'scale'\n } = animateConfig;\n const symbolTime = duration / 10;\n this._symbolStart.setAttributes({ scaleX: 0, scaleY: 0 });\n this._symbolStart.animate().to({ scaleX: 1, scaleY: 1 }, symbolTime * 5, easing as any);\n\n let symbolStartOuterFrom: ISymbolGraphicAttribute;\n let symbolStartOuterTo: ISymbolGraphicAttribute;\n if (symbolStartOuterType === 'scale') {\n symbolStartOuterFrom = { scaleX: 0, scaleY: 0 };\n symbolStartOuterTo = { scaleX: 1, scaleY: 1 };\n } else {\n symbolStartOuterFrom = { clipRange: 0 };\n symbolStartOuterTo = { clipRange: 1 };\n }\n this._symbolStartOuter.setAttributes(symbolStartOuterFrom);\n this._symbolStartOuter.animate().to(symbolStartOuterTo, symbolTime * 5, easing as any);\n\n this._symbolEnd.setAttributes({ scaleX: 0, scaleY: 0 });\n this._symbolEnd\n .animate()\n .wait(symbolTime * 8)\n .to({ scaleX: 1, scaleY: 1 }, symbolTime * 2, easing as any);\n\n this._line.setAttributes({ clipRange: 0 });\n this._line.animate().to({ clipRange: 1 }, symbolTime * 9, easing as any);\n\n if (titleType === 'typewriter') {\n const titleTopText = this._titleTop.attribute.text as string;\n this._titleTop.setAttributes({ text: '' });\n this._titleTop\n .animate()\n .wait(symbolTime * 5)\n .play(new InputText({ text: '' }, { text: titleTopText }, symbolTime * 4, 'linear'));\n\n const titleBottomText = this._titleBottom.attribute.text as string;\n this._titleBottom.setAttributes({ text: '' });\n this._titleBottom\n .animate()\n .wait(symbolTime * 5)\n .play(new InputText({ text: '' }, { text: titleBottomText }, symbolTime * 4, 'linear'));\n } else {\n this._titleTop.setAttributes({ dy: this._titleTop.AABBBounds.height() + 10 });\n this._titleTop\n .animate()\n .wait(symbolTime * 5)\n .to({ dy: 0 }, symbolTime * 4, 'linear');\n\n this._titleBottom.setAttributes({ dy: -(10 + this._titleBottom.AABBBounds.height()) });\n this._titleBottom\n .animate()\n .wait(symbolTime * 5)\n .to({ dy: 0 }, symbolTime * 4, 'linear');\n }\n\n if (titlePanelType === 'scale') {\n [this._titleTopPanel, this._titleBottomPanel].forEach(panel => {\n const scaleX = panel.attribute.scaleX;\n panel.setAttributes({ scaleX: 0 });\n panel.animate().to({ scaleX }, duration, 'circInOut');\n });\n } else if (titlePanelType === 'stroke') {\n [this._titleTopPanel, this._titleBottomPanel].forEach(panel => {\n const b = panel.AABBBounds;\n const totalLen = (b.width() + b.height()) * 2;\n panel.setAttributes({ lineDash: [0, totalLen * 10] });\n panel.animate().to({ lineDash: [totalLen, totalLen * 10] }, duration, 'quadOut');\n });\n }\n }\n\n disappearAnimate(animateConfig: { duration?: number; easing?: string; mode?: 'scale' | 'default' }) {\n if (animateConfig.mode === 'scale') {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n } else {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this._line.animate().to({ clipRange: 0 }, duration, easing as any);\n this._symbolStart\n .animate()\n .wait(duration / 2)\n .to({ scaleX: 0, scaleY: 0 }, duration / 2, easing as any);\n this._symbolEnd.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n this._titleTop.animate().to({ dy: this._titleTop.AABBBounds.height() + 10 }, duration / 2, easing as any);\n this._titleBottom\n .animate()\n .to({ dy: -(10 + this._titleBottom.AABBBounds.height()) }, duration / 2, easing as any);\n this._symbolStartOuter\n .animate()\n .wait(duration / 2)\n .to({ clipRange: 0 }, duration / 2, easing as any);\n this._titleTopPanel.animate().to({ scaleX: 0 }, duration, 'circInOut');\n this._titleBottomPanel.animate().to({ scaleX: 0 }, duration, 'circInOut');\n }\n }\n}\n","import { StoryLabelItem, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ILabelItemComponentAttributes } from './label-item-interface';\n\nexport class PopTipComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n vrComponent: StoryLabelItem;\n\n constructor(attributes: ILabelItemComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTipComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPopTip();\n }\n protected renderPopTip() {\n const { graphic, padding, width, height } = this.attribute as ILabelItemComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const labelItem = new StoryLabelItem(attribute);\n this.vrComponent = labelItem;\n this.addChild(labelItem);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const LABEL_ITEM = 'LabelItem';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { PopTipComponent } from './LabelItemComponent';\nimport type { ILabelItemComponentAttributes } from './label-item-interface';\nimport { LABEL_ITEM } from './constant';\n\nexport class LabelItemCharacter extends CharacterComponent {\n static type = LABEL_ITEM;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILabelItemComponentAttributes): void {\n this._graphic = new PopTipComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IArc } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n BaseVisibility,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor\n} from '@visactor/vstory-player';\nimport { LABEL_ITEM } from '../../character/label-item/constant';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: any, appear: boolean) {\n if (!appear) {\n return;\n }\n // todo 添加appear属性的初始化逻辑\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n if (appear && graphic && graphic.appearAnimate) {\n graphic.appearAnimate(params);\n } else if (!appear && graphic && graphic.disappearAnimate) {\n graphic.disappearAnimate(params);\n }\n\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class LabelItemVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerLabelItemVisibilityAction() {\n globalProcessorRegistry.registerProcessor(LABEL_ITEM, {\n [ACTION_TYPE.APPEAR]: new LabelItemVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LabelItemVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type { RichTextEditPlugin } from '@visactor/vrender';\nimport type { IGraphic } from '@visactor/vrender';\nimport { EventEmitter, isArray } from '@visactor/vutils';\nimport { PickEventType, EditActionEnum } from './const';\nimport type { ContinuousActionType, IEditActionInfo, IEditOverActionInfo } from './interface';\nimport type { ICharacter, ICharacterPickInfo, IStoryEvent, Story } from '@visactor/vstory-core';\n\nconst IgnoreEvent: { [key: string]: boolean } = {\n mousemove: true,\n mouseout: true,\n mouseover: true\n};\n\nconst PointerOverEvent: { [key: string]: boolean } = {\n pointerover: true,\n pointerout: true,\n pointermove: true\n};\n\nconst IgnoreEnds = 'capture';\n\nexport class EditAction extends EventEmitter {\n protected _actionInProgress: ContinuousActionType = null;\n get actionInProgress() {\n return this._actionInProgress;\n }\n\n constructor(public story: Story) {\n super();\n this.richTextPluginEvent();\n }\n\n lastOverGraphic: {\n characterInfo: ICharacterPickInfo;\n character: ICharacter;\n detailTarget: IGraphic;\n } = null;\n\n richTextPluginEvent() {\n const plugin = this.story.canvas\n .getStage()\n .pluginService.findPluginsByName('RichTextEditPlugin')[0] as RichTextEditPlugin;\n if (!plugin) {\n return;\n }\n plugin.registerUpdateListener((type, p) => {\n this.emit(EditActionEnum.richTextPluginEdit, { type, p });\n });\n }\n\n onStoryEvent(event: IStoryEvent, type: string) {\n if ((IgnoreEvent as any)[type]) {\n return;\n }\n if (type.endsWith(IgnoreEnds)) {\n return;\n }\n\n this.processOverEvent(event, type);\n\n // TODO: hack detailPath会被正常删除后,删除这个hack代码\n if (event.detailPath) {\n if (event.path[event.path.length - 1] !== event.detailPath[event.path.length - 1]) {\n delete event.detailPath;\n }\n }\n\n // 非选中逻辑\n if (!(PickEventType as any)[type]) {\n return this.dispatchAction({\n type: type,\n event\n });\n }\n\n // 选中逻辑才添加交互元素信息。得到交互元素\n const { characterInfo, character } = this.story.canvas.getEventDetail(event);\n // 单选\n if (type === 'click' && character) {\n type = EditActionEnum.singleSelection;\n } else if (type === 'pointerdown' && !character) {\n // 取消选中\n type = EditActionEnum.unSelection;\n }\n\n this.dispatchAction({\n type: type,\n characterId: character?.id,\n character: character,\n event,\n detail: characterInfo\n });\n }\n\n // graphic over out\n processOverEvent(event: IStoryEvent, type: string) {\n if (!PointerOverEvent[type]) {\n return;\n }\n const { characterInfo, character } = this.story.canvas.getEventDetail(event);\n let detailTarget = event.path[event.path.length - 1];\n const detailPath = event.detailPath;\n // 如果存在详细path\n if (detailPath) {\n const detailTargetList = detailPath[detailPath.length - 1];\n if (isArray(detailTargetList)) {\n detailTarget = detailTargetList[detailTargetList.length - 1];\n }\n }\n let actionType = null;\n // 外层 over 必然触发 over\n if (type === 'pointerover') {\n if (character) {\n actionType = EditActionEnum.pointerOverCharacter;\n }\n } else if (type === 'pointerout') {\n // 外层 out 必然触发out\n if (\n this.lastOverGraphic &&\n character &&\n character === this.lastOverGraphic.character &&\n detailTarget &&\n detailTarget === this.lastOverGraphic.detailTarget\n ) {\n actionType = EditActionEnum.pointerOutCharacter;\n }\n } else {\n // 外层move,同时没有lastOver,不需要继续判定\n if (!this.lastOverGraphic) {\n return;\n }\n // 如果不是同一个 character out\n if (character !== this.lastOverGraphic.character) {\n actionType = EditActionEnum.pointerOutCharacter;\n // 如果是同一个元素,但是不是同一个target\n } else if (detailTarget !== this.lastOverGraphic.detailTarget) {\n // 先抛出离开\n this.dispatchAction({\n type: EditActionEnum.pointerOutCharacter,\n characterId: this.lastOverGraphic.character?.id,\n character: this.lastOverGraphic.character,\n event,\n detail: this.lastOverGraphic.characterInfo\n // nextAction: {\n // actionType: EditActionEnum.pointerOverCharacter,\n // characterId: character?.id,\n // character: character,\n // event,\n // detail: characterInfo\n // }\n } as IEditOverActionInfo);\n actionType = EditActionEnum.pointerOverCharacter;\n } else {\n // 是同一个元素,并且是同一个target\n return;\n }\n }\n if (!actionType) {\n return;\n }\n this.dispatchAction({\n type: actionType,\n characterId: character?.id,\n character: character,\n event,\n detail: characterInfo\n });\n if (actionType === EditActionEnum.pointerOverCharacter) {\n this.lastOverGraphic = { characterInfo, character, detailTarget };\n } else if (actionType === EditActionEnum.pointerOutCharacter) {\n this.lastOverGraphic = null;\n }\n }\n\n dispatchAction(action: IEditActionInfo) {\n this.emit('dispatchAction', action);\n }\n\n release() {\n this.removeAllListeners();\n this.story = null;\n }\n}\n","import { EditAction } from './edit-action';\nimport { EventEmitter } from '@visactor/vutils';\nimport {\n type IEditActionInfo,\n type IEditSelection,\n type IEditSelectionConstructor,\n type IEditMessage\n} from './interface';\nimport type { IGroup, IGraphic } from '@visactor/vrender';\nimport { createGroup } from '@visactor/vrender';\nimport { EditActionEnum, SeriesMarkMode } from './const';\nimport type { ICharacter, ILayoutLine, IStoryEvent, Story } from '@visactor/vstory-core';\n\nexport class Edit extends EventEmitter {\n readonly editAction: EditAction;\n\n protected static selectionConstructorMap: { [key: string]: IEditSelectionConstructor } = {};\n\n static registerEditSelection(key: string, cpt: IEditSelectionConstructor) {\n Edit.selectionConstructorMap[key] = cpt;\n }\n\n protected _selectionMap: { [key: string]: IEditSelection } = {};\n protected _selectionList: IEditSelection[];\n\n protected _currentSelection: IEditSelection;\n protected _overGraphicGroup: IGroup;\n\n protected _editGroup: IGroup;\n\n // 提供给组件一个编辑的全局状态,组件可以读取/设置。\n // 比如当前的chart元素选中层级,全部/数据组/单个 这个状态在标签,系列mark 中共同使用\n private _editGlobalState: { [key: string]: any } = {\n seriesMarkMode: SeriesMarkMode.all\n };\n get editGlobalState(): { [key: string]: any } {\n return this._editGlobalState;\n }\n\n setEditGlobalState(key: string, value: any) {\n this._editGlobalState[key] = value;\n }\n\n constructor(public readonly story: Story) {\n super();\n this.editAction = new EditAction(story);\n this.editAction.on('dispatchAction', this.onAction);\n this.story.canvas.getStage().addEventListener('*', this.onStoryEvent);\n this._initEditGroup();\n this._initComponent();\n }\n\n _initEditGroup() {\n this._editGroup = createGroup({});\n this._editGroup.name = 'edit_group';\n const editLayer = this.story.canvas.getStage().createLayer();\n const defaultLayerAttr = this.story.canvas.getStage().defaultLayer.attribute;\n editLayer.setAttributes({\n width: defaultLayerAttr.width,\n height: defaultLayerAttr.height,\n x: defaultLayerAttr.x,\n y: defaultLayerAttr.y,\n scaleX: defaultLayerAttr.scaleX,\n scaleY: defaultLayerAttr.scaleY,\n clip: false\n });\n editLayer.clipInViewBox = false;\n editLayer.add(this._editGroup);\n\n this._overGraphicGroup = createGroup({ pickable: false });\n this._overGraphicGroup.name = 'over_group';\n editLayer.add(this._overGraphicGroup);\n }\n\n getEditGroup() {\n return this._editGroup;\n }\n\n getStage() {\n return this._editGroup.stage;\n }\n\n protected _initComponent() {\n this._selectionMap = {};\n Object.keys(Edit.selectionConstructorMap).forEach(key => {\n this._selectionMap[key] = new Edit.selectionConstructorMap[key](this);\n });\n this._selectionList = Object.values(this._selectionMap)\n .sort((a, b) => a.level - b.level)\n .reverse();\n }\n\n onStoryEvent = (event: IStoryEvent, type: string) => {\n // 如果交互到编辑元素忽略\n if (event.path.find((g: any) => g === this._editGroup || g === this._overGraphicGroup)) {\n // 具体判断是否编辑到交互元素,如果pick到group,就不算\n const pathTarget = event.path[event.path.length - 1];\n if (!pathTarget.isContainer || pathTarget.attribute?.pickable === true) {\n return;\n }\n }\n this.editAction.onStoryEvent(event, type);\n };\n\n // TODO: over不能正确的分发到全部selection\n onAction = (actionInfo: IEditActionInfo) => {\n // over\n if (\n actionInfo.type === EditActionEnum.pointerOverCharacter ||\n actionInfo.type === EditActionEnum.pointerOutCharacter\n ) {\n this._selectionList.forEach(c => c.checkOver?.(actionInfo));\n return;\n }\n\n // 选中\n if (this._currentSelection) {\n // 优先上一次的编辑组件\n if (this._currentSelection.checkAction(actionInfo)) {\n return;\n }\n }\n for (let i = 0; i < this._selectionList.length; i++) {\n const cpt = this._selectionList[i];\n if (cpt.checkAction(actionInfo)) {\n // this.stopEdit();\n // cpt.startEdit(actionInfo);\n this._currentSelection = cpt;\n return;\n }\n }\n };\n\n selectCharacter(id: string) {\n this.editAction.dispatchAction({\n type: EditActionEnum.singleSelection,\n characterId: id,\n character: this.story.getCharacterById(id),\n event: null,\n detail: null\n });\n }\n\n emitStartEdit(msg: IEditMessage) {\n this.dispatchEditAction('startEdit', msg);\n }\n emitEndEdit(msg: IEditMessage) {\n this.dispatchEditAction('endEdit', msg);\n }\n\n dispatchEditAction(type: string, msg: IEditMessage) {\n this.emit(type, msg);\n }\n\n triggerEditWithEvent(event: IStoryEvent) {\n return;\n }\n\n triggerEditWithComponent(type: string, actionInfo: IEditActionInfo) {\n return;\n }\n\n stopEdit() {\n this._currentSelection?.endEdit();\n this._currentSelection = null;\n }\n\n release() {\n this.story.canvas?.getStage?.().removeEventListener('*', this.onStoryEvent as any);\n this.editAction.release();\n }\n\n showOverGraphic(graphic: IGraphic, clearOther: boolean = true) {\n if (clearOther) {\n this._overGraphicGroup.removeAllChild();\n }\n this._overGraphicGroup.add(graphic);\n }\n\n clearOverGraphic() {\n this._overGraphicGroup.removeAllChild();\n }\n\n getLayoutLineInLayer(ignoreIdList: string[]): ILayoutLine[] {\n const result: ILayoutLine[] = [];\n const characterList = this.story.getCharacterList();\n result.push(...this.story.canvas.getLayoutGuideLine());\n characterList.forEach(c => {\n if (ignoreIdList.includes(c.id)) {\n return;\n }\n result.push(...c.getLayoutGuideLine());\n });\n return result;\n }\n}\n","export const BOUNDS_HOVER_COLOR = '#B2B7C2'; // 包围盒式 hover 的颜色\nexport const BOUNDS_SELECT_COLOR = '#3073F2'; // 包围盒式选中的颜色\nexport const SHAPE_HOVER_COLOR = '#3073F2'; // 使用图元自己形状的 hover 颜色\nexport const SHAPE_SELECT_COLOR = '#3073F2'; // 使用图元自己形状选中的颜色\nexport const DRAG_ANCHOR_COLOR = '#fea53e'; // 锚点拖拽颜色\n\nexport const LINE_CONNECT_COLOR = '#3073F2'; // 连接点颜色\nexport const PREVIEW_LINE_CONNECT_COLOR = '#95b5ff'; // 预览连接点颜色\nexport const LINE_CONTROL_COLOR = '#3073F2'; // 控制点颜色\nexport const PREVIEW_LINE_CONTROL_COLOR = '#95b5ff'; // 预览控制点颜色\n\nexport const MinFontSize = 8;\nexport const MinSize = 20;\n","import type { IStage } from '@visactor/vrender';\n\nexport class DragComponent {\n private _state: 'startDrag' | 'dragging' | 'stopDrag' | 'none' = 'none';\n private _pausing = false;\n get state() {\n return this._state;\n }\n set state(state: 'startDrag' | 'dragging' | 'stopDrag' | 'none') {\n this._state = state;\n }\n\n private _lastPosX: number;\n private _lastPosY: number;\n private _stage: IStage;\n // protected _container: HTMLElement;\n\n constructor(stage: IStage) {\n this._stage = stage;\n stage.addEventListener('pointermove', this.pointerMove, true);\n stage.addEventListener('pointerup', this.stopDrag, true);\n }\n\n protected _dragHandler: (moveX: number, moveY: number) => void;\n protected _dragEndHandler: () => void;\n protected _unDragEndHandler: () => void;\n\n pointerMove = (event: any) => {\n if (this._pausing) {\n return;\n }\n if (!(this._state === 'startDrag' || this._state === 'dragging')) {\n return;\n }\n if (this._state !== 'dragging') {\n this._state = 'dragging';\n }\n this._dragHandler?.(event.clientX - this._lastPosX, event.clientY - this._lastPosY);\n this._lastPosX = event.clientX;\n this._lastPosY = event.clientY;\n };\n\n dragHandler(handler: (moveX: number, moveY: number) => void) {\n this._dragHandler = handler;\n }\n dragEndHandler(handler: () => void) {\n this._dragEndHandler = handler;\n }\n unDragEndHandler(handler: () => void) {\n this._unDragEndHandler = handler;\n }\n\n pauseDrag() {\n this._pausing = true;\n }\n resumeDrag() {\n this._pausing = false;\n }\n\n startDrag(event: any) {\n this._state = 'startDrag';\n this._lastPosX = event.clientX;\n this._lastPosY = event.clientY;\n }\n\n stopDrag = (event: PointerEvent) => {\n if (this._state !== 'dragging' && this._state !== 'startDrag') {\n this._unDragEndHandler?.();\n return;\n }\n // const lastState = this._state;\n this._state = 'stopDrag';\n // if (lastState !== 'dragging') {\n // return;\n // }\n this._state = 'stopDrag';\n this._dragEndHandler?.();\n };\n\n release() {\n if (this._stage) {\n this._stage.removeEventListener('pointermove', this.pointerMove, true);\n this._stage.removeEventListener('pointerup', this.stopDrag, true);\n this._stage = null;\n }\n this._dragHandler = null;\n this._dragEndHandler = null;\n }\n}\n","import type { IStage } from '@visactor/vrender-core';\nimport type { IMatrix, IPointLike } from '@visactor/vutils';\n\nexport function transformDeltaWithStage(\n stage: IStage,\n point: IPointLike,\n subMatrix?: IMatrix\n): { x: number; y: number } {\n const stageMatrix = stage.window.getViewBoxTransform();\n const matrix = stageMatrix\n .clone()\n .multiply(\n subMatrix?.a ?? 1,\n subMatrix?.b ?? 0,\n subMatrix?.c ?? 0,\n subMatrix?.d ?? 1,\n subMatrix?.e ?? 0,\n subMatrix?.f ?? 0\n );\n const p0 = { x: 0, y: 0 };\n const p1 = point;\n\n const out1 = { x: 0, y: 0 };\n const out2 = { x: 0, y: 0 };\n\n matrix.transformPoint(p0, out1);\n matrix.transformPoint(p1, out2);\n return {\n x: out2.x - out1.x,\n y: out2.y - out1.y\n };\n}\n\nexport function transformPointWithStage(\n stage: IStage,\n point: IPointLike,\n subMatrix?: IMatrix\n): { x: number; y: number } {\n const stageMatrix = stage.window.getViewBoxTransform();\n const matrix = stageMatrix\n .clone()\n .multiply(\n subMatrix?.a ?? 1,\n subMatrix?.b ?? 0,\n subMatrix?.c ?? 0,\n subMatrix?.d ?? 1,\n subMatrix?.e ?? 0,\n subMatrix?.f ?? 0\n );\n\n const out = { x: 0, y: 0 };\n matrix.transformPoint(point, out);\n return out;\n}\n","/**\n * @description PopTip组件\n */\nimport type {\n ICircleGraphicAttribute,\n IPathGraphicAttribute,\n IGraphic,\n IGroupGraphicAttribute,\n IRect,\n IRectGraphicAttribute,\n ILineGraphicAttribute,\n IGroup,\n ILine\n} from '@visactor/vrender';\nimport { createLine, createRect } from '@visactor/vrender';\nimport type { IAABBBounds, IAABBBoundsLike, IPointLike } from '@visactor/vutils';\nimport { AABBBounds, abs, Matrix, merge, normalizeAngle, normalizePadding, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport { DRAG_ANCHOR_COLOR, SHAPE_SELECT_COLOR, MinSize } from './constants';\nimport { DragComponent } from './transform-drag';\nimport { transformDeltaWithStage, transformPointWithStage } from '../../utils/transform';\nimport type { IEditSelection, VRenderPointerEvent } from '../../interface';\nimport { min } from '@visactor/vchart/esm/util';\nimport type { ILayoutLine } from '@visactor/vstory-core';\n\nconst i = 0;\n\nconst tempRect = createRect({});\n\ntype AnchorDirection = 'top' | 'bottom' | 'left-top' | 'left-bottom' | 'right' | 'left' | 'right-top' | 'right-bottom';\n\nconst fixedAngles = [0, Math.PI / 2, Math.PI, (Math.PI * 3) / 2, Math.PI * 2];\nconst maxAngleDifference = (3 / 180) * Math.PI; // 10 degrees\n\nexport type ControllerAttributes = {\n padding?: number | [number, number, number, number];\n resizeBorder?: Partial;\n cornerRect?: Partial;\n rotateCircle?: Partial;\n rotatePath?: Partial & { size: number };\n handlerLine?: Partial & { size: number };\n shapeCircle?: Partial;\n move?: boolean;\n rotate?: boolean;\n resize?: boolean;\n reshape?: boolean;\n setCursor?: (c: string) => void;\n shapePoints?: IPointLike[];\n isShapePointAbsolute?: boolean;\n /**\n * 支持的锚点\n */\n enabledAnchors?: AnchorDirection[];\n // minSize\n minWidth?: number;\n minHeight?: number;\n proportionalScaling?: boolean;\n} & IGroupGraphicAttribute;\n\ntype IXYWH = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type IUpdateParams = {\n x: number;\n y: number;\n width: number;\n height: number;\n angle: number;\n anchor: [number | string, number | string];\n // relative position of shape point\n shapePoints: IPointLike[];\n // text\n text?: string | string[];\n};\n\nconst borderAnchors = ['top', 'bottom', 'left', 'right'];\nconst cornerAnchors = ['left-top', 'right-top', 'left-bottom', 'right-bottom'];\n\nconst anchorPositionMap: any = {\n top: [0, 0, 1, 0],\n bottom: [0, 1, 1, 1],\n left: [0, 0, 0, 1],\n right: [1, 0, 1, 1],\n\n 'left-top': [0, 0],\n 'right-top': [1, 0],\n 'left-bottom': [0, 1],\n 'right-bottom': [1, 1]\n};\n\nconst anchorCursorMap: any = {\n 'left-top': 'nwse-resize',\n top: 'ns-resize',\n 'right-top': 'nesw-resize',\n left: 'ew-resize',\n right: 'ew-resize',\n 'left-bottom': 'nesw-resize',\n bottom: 'ns-resize',\n 'right-bottom': 'nwse-resize'\n};\n\nexport interface ITransformController extends IGroup {\n updateBoundsAndAngle: (b: IAABBBoundsLike, angle: number) => void;\n onActive: () => void;\n onUpdate: (cb: (data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false) => void;\n onEditorEnd: (cb: (event?: VRenderPointerEvent) => void) => void;\n onEditorStart: (cb: (event?: VRenderPointerEvent) => void) => void;\n onUnTransStart: (cb: (event: PointerEvent) => void) => void;\n}\n\n// @ts-ignore\nexport class TransformController extends AbstractComponent> implements IGroup {\n type: string = 'transformController';\n name = 'transformController';\n rectB: IAABBBounds;\n isDragging: boolean = false;\n dragOffsetX: number;\n dragOffsetY: number;\n dragStartAngle: number = 0;\n activeGraphic: IGraphic | null;\n horizontalResizble: number;\n verticalResizble: number;\n rotatable: number;\n reshapeState: number;\n rect: IRect;\n editBorder: IRect;\n\n private _snapLineX1: ILine;\n private _snapLineX2: ILine;\n private _snapLineX3: ILine;\n private _snapLineY1: ILine;\n private _snapLineY2: ILine;\n private _snapLineY3: ILine;\n protected _snapThreshold: number = 6;\n\n // snap的时候会修改rect,导致rect不跟手,所以需要一个最真实的bounds\n protected _actualSnapBounds: IAABBBounds | null = null;\n\n // state: {\n // actionMode: EditorActionMode;\n // };\n // 是否正在执行addChildUpdateBoundTag,避免循环调用\n runningAddChildUpdateBoundTag: boolean;\n\n updateCbs: Array<(data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false>;\n endEditCbs: Array<(event?: VRenderPointerEvent) => void>;\n editStartCbs: Array<(event?: VRenderPointerEvent) => void>;\n unTransStartCbs: Array<(event: PointerEvent) => void>;\n\n // isEditor: boolean = false;\n\n _editorConfig: {\n move: boolean;\n rotate: boolean;\n resize: boolean;\n reshape: boolean;\n };\n\n minSize: { width: number; height: number } = { width: MinSize, height: MinSize };\n\n proportionalScaling: boolean = false;\n // 缩放前的属性\n _rectBeforeScale: IRectGraphicAttribute;\n // 缩放前的点击位置,用来进行等比缩放处理缩放比\n _eventPosBeforeScale: any;\n\n _setCursor: (c: string) => void = null;\n\n editSelection: IEditSelection;\n\n // drag\n _dragger: DragComponent;\n private _lastBoxInDrag: IRect;\n\n static defaultAttributes: Partial = {\n // 去掉padding\n // padding: 2,\n resizeBorder: {\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1\n },\n cornerRect: {\n fill: 'white',\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1,\n width: 8,\n height: 8,\n cornerRadius: 2\n },\n rotateCircle: {\n fill: 'white',\n stroke: SHAPE_SELECT_COLOR,\n radius: 10\n },\n rotatePath: {\n fill: '#000000',\n size: 12,\n angle: Math.PI,\n // eslint-disable-next-line\n path: 'M202.403,95.22c0,46.312-33.237,85.002-77.109,93.484v25.663l-69.76-40l69.76-40v23.494 c27.176-7.87,47.109-32.964,47.109-62.642c0-35.962-29.258-65.22-65.22-65.22s-65.22,29.258-65.22,65.22 c0,9.686,2.068,19.001,6.148,27.688l-27.154,12.754c-5.968-12.707-8.994-26.313-8.994-40.441C11.964,42.716,54.68,0,107.184,0 S202.403,42.716,202.403,95.22z'\n },\n handlerLine: {\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1,\n size: 24\n },\n shapeCircle: {\n fill: 'white',\n lineWidth: 1,\n radius: 4,\n stroke: DRAG_ANCHOR_COLOR,\n startAngle: 0,\n endAngle: Math.PI * 2\n }\n };\n\n constructor(editSelection: IEditSelection, attributes: Partial) {\n super(merge({ shadowRootIdx: 1 }, TransformController.defaultAttributes, attributes));\n this.editSelection = editSelection;\n this._editorConfig = {\n move: attributes.move !== false,\n rotate: attributes.rotate !== false,\n resize: attributes.resize !== false,\n reshape: attributes.reshape !== false\n };\n // this.state = {\n // actionMode: EditorActionMode.addTool\n // };\n this.rectB = new AABBBounds();\n this.dragOffsetX = 0;\n this.dragOffsetY = 0;\n this.activeGraphic = null;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n this.rotatable = 0;\n this.runningAddChildUpdateBoundTag = false;\n this.minSize.width = attributes.minWidth ?? MinSize;\n this.minSize.height = attributes.minHeight ?? MinSize;\n this.proportionalScaling = attributes.proportionalScaling === true;\n this._setCursor = attributes.setCursor;\n this.rect = createRect({\n fill: 'transparent',\n stroke: false,\n pickable: false\n });\n // this.rect.attachShadow();\n this.editBorder = createRect({\n fill: false,\n stroke: false\n });\n this.editBorder.attachShadow();\n this.add(this.rect);\n this.add(this.editBorder);\n this._createSnapLine();\n this.editStartCbs = [];\n this.unTransStartCbs = [];\n this.updateCbs = [];\n this.endEditCbs = [];\n }\n\n protected _createSnapLine() {\n const commonAttribute = {\n stroke: SHAPE_SELECT_COLOR,\n pickable: false,\n lineWidth: 1,\n strokeOpacity: 0.4,\n visible: false\n };\n this._snapLineX1 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX1);\n this._snapLineX2 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX2);\n this._snapLineX3 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX3);\n\n this._snapLineY1 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY1);\n this._snapLineY2 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY2);\n this._snapLineY3 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY3);\n }\n\n addDrag() {\n if (!this.stage) {\n return;\n }\n this._dragger = new DragComponent(this.stage);\n this._dragger.dragHandler(this._dragElement);\n this._dragger.dragEndHandler(this._dragEnd);\n this._dragger.unDragEndHandler(this._unDragEnd);\n this._lastBoxInDrag = createRect({\n pickable: false,\n stroke: SHAPE_SELECT_COLOR,\n strokeOpacity: 0.4,\n visible: false\n });\n }\n\n protected _dragElement = (moveX: number, moveY: number) => {\n const stage = this.stage;\n if (!stage) {\n return;\n }\n this._lastBoxInDrag.setAttribute('visible', true);\n\n const layer = stage.defaultLayer;\n const p = transformDeltaWithStage(stage, { x: moveX, y: moveY }, layer.globalTransMatrix);\n this.moveBy(p.x, p.y);\n };\n private _dragEnd = () => {\n this._editorEnd();\n };\n private _unDragEnd = () => {\n this._editorEnd();\n };\n\n protected _editorEnd = () => {\n this.endEditCbs?.forEach(cb => cb());\n // this._endHandler(this._editorBox.getTransformAttribute());\n // this._editorBox.isEditor = false;\n // this._snapLineX.setAttributes({ visible: false });\n // this._snapLineY.setAttributes({ visible: false });\n\n // this._snapTargetBoxX.setAttributes({ visible: false });\n // this._snapTargetBoxY.setAttributes({ visible: false });\n\n this._lastBoxInDrag.setAttribute('visible', false);\n // this._opt.editorEvent.setCursorSyncToTriggerLayer();\n };\n\n updateBoundsAndAngle(bounds: IAABBBoundsLike, angle: number) {\n // set bounds\n this.rect.setAttributes({\n x: bounds.x1,\n y: bounds.y1,\n width: bounds.x2 - bounds.x1,\n height: bounds.y2 - bounds.y1\n });\n\n // set anchor\n const x = (this.attribute.x ?? 0) + (bounds.x1 + bounds.x2) / 2;\n const y = (this.attribute.y ?? 0) + (bounds.y1 + bounds.y2) / 2;\n this.setAttributes({ anchor: [x, y], angle });\n }\n\n onActive() {\n this.initEvent();\n }\n\n initEvent() {\n // cursor\n this.editBorder.addEventListener('mousemove', this.handleMouseMove);\n this.addEventListener('pointerout', this.handleMouseOut);\n\n // drag\n // TODO 这里不生效\n this.addEventListener('pointerdown', this.handleDragMouseDown);\n this.addDrag();\n\n this.stage.addEventListener('pointermove', this.handleDragMouseMove);\n this.stage.addEventListener('pointerup', this.handleDragMouseUp);\n }\n\n protected handleMouseMove = (e: any) => {\n if (e.pickParams) {\n const { shadowTarget } = e.pickParams;\n this.setCursor(shadowTarget.attribute.cursor);\n } else {\n this.setCursor();\n }\n };\n\n protected handleMouseOut = (e: any) => {\n this.setCursor();\n };\n\n protected handleDragMouseDown = (e: any) => {\n this.editStartCbs.forEach(cb => cb(e));\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n\n this.dragOffsetX = layerPos.x;\n this.dragOffsetY = layerPos.y;\n\n const { shadowTarget } = e.pickParams || {};\n // 开启move\n if (shadowTarget && this.stage) {\n this.setActiveGraphic(shadowTarget);\n this._rectBeforeScale = { ...this.rect.attribute };\n this._eventPosBeforeScale = layerPos;\n this.isDragging = true;\n this.dragStartAngle = this.attribute.angle ?? 0;\n } else {\n this.unTransStartCbs.forEach(cb => cb(e));\n this._dragger.startDrag(e);\n }\n };\n\n protected handleDragMouseMove = (e: any) => {\n if (!this.isDragging) {\n return;\n }\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n\n const dx = layerPos.x - this.dragOffsetX;\n const dy = layerPos.y - this.dragOffsetY;\n\n if (dx === 0 && dy === 0) {\n return;\n }\n\n if (this.rotatable) {\n this.handleRotate(layerPos);\n this.dispatchUpdate(e);\n } else if (this.reshapeState) {\n this._handleReshape(dx, dy);\n this.dispatchUpdate(e);\n } else {\n this._handleScale(dx, dy, e);\n this.dispatchUpdate(e);\n }\n\n this.dragOffsetX = layerPos.x;\n this.dragOffsetY = layerPos.y;\n };\n\n protected handleDragMouseUp = (e: any) => {\n this._actualSnapBounds = null;\n // 清理snapLine\n [\n this._snapLineX1,\n this._snapLineX2,\n this._snapLineY1,\n this._snapLineY2,\n this._snapLineX3,\n this._snapLineY3\n ].forEach(g => {\n g.setAttributes({ visible: false });\n });\n if (!this.isDragging) {\n return;\n }\n // this._editComponent.isEditing = false;\n this.dragOffsetX = 0;\n this.dragOffsetY = 0;\n this.setActiveGraphic(null);\n this.endEditCbs?.forEach(cb => cb(e));\n // this.isEditor = false;\n this.isDragging = false;\n };\n\n protected setCursor(c?: string) {\n if (this.stage) {\n this.stage.setCursor(c);\n this._setCursor?.(c);\n }\n }\n\n protected setActiveGraphic(g: IGraphic | null) {\n this.activeGraphic = g;\n // 设置resize的方向\n let reset = true;\n if (g && g.name) {\n reset = false;\n const name = g.name;\n const dirList = name.split('-');\n const type = dirList.shift();\n if (type === 'scale') {\n if (dirList.length === 2) {\n this.horizontalResizble = dirList[0] === 'left' ? -1 : 1;\n this.verticalResizble = dirList[1] === 'top' ? -1 : 1;\n } else {\n const dir = dirList[0];\n const h = dir === 'left' || dir === 'right';\n this.horizontalResizble = h ? (dirList[0] === 'left' ? -1 : 1) : 0;\n this.verticalResizble = h ? 0 : dirList[0] === 'top' ? -1 : 1;\n }\n this.rotatable = 0;\n } else if (type === 'rotate') {\n this.rotatable = 1;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n } else if (type === 'reshape') {\n this.reshapeState = Number.parseInt(dirList[0], 10) + 1;\n this.rotatable = 0;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n } else {\n reset = true;\n }\n }\n if (reset) {\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n this.rotatable = 0;\n this.reshapeState = 0;\n }\n }\n\n // 非等比缩放\n protected handleScale(dx: number, dy: number) {\n const { anchor, x, y, width, height } = this._getRectWithOffset(dx, dy, this.rect.attribute).attribute;\n if (width < this.minSize.width) {\n return;\n }\n if (height < this.minSize.height) {\n return;\n }\n this._doUpdateRectXYWH(x, y, width, height);\n this.setAttributes({\n anchor: anchor as [number | string, number | string]\n });\n }\n\n // 缩放\n private _handleScale(dx: number, dy: number, e: any) {\n if (this.proportionalScaling) {\n this._handleScaleProportional(dx, dy, e);\n } else {\n this.handleScale(dx, dy);\n }\n }\n\n private transformPoint(point: IPointLike) {\n const stage = this.stage;\n if (!stage) {\n return;\n }\n // this._editComponent.isEditing = true;\n return transformPointWithStage(stage, point, this.layer.globalTransMatrix);\n }\n\n // 等比缩放\n private _handleScaleProportional(dx: number, dy: number, e: any) {\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n const { attribute, temp } = this._getRectWithOffset(\n layerPos.x - this._eventPosBeforeScale.x,\n layerPos.y - this._eventPosBeforeScale.y,\n this._rectBeforeScale\n );\n\n const maxScale = Math.max(\n attribute.width / this._rectBeforeScale.width,\n attribute.height / this._rectBeforeScale.height\n );\n const finalWidth = this._rectBeforeScale.width * maxScale;\n const finalHeight = this._rectBeforeScale.height * maxScale;\n if (finalWidth < this.minSize.width) {\n return;\n }\n if (finalHeight < this.minSize.height) {\n return;\n }\n let nextP2 = temp.nextP2;\n const nextP1 = temp.nextP1;\n\n const angle = this.getAngle();\n // console.log('_handleScaleProportional', nextP1, nextP2, angle, this.verticalResizble, this.horizontalResizble);\n\n // v 1 h 1\n // 拖动的右下角 不需要改变\n if (this.verticalResizble > 0 && this.horizontalResizble > 0) {\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // 1 h -1\n // 拖动的左下角 以右上角为基准\n else if (this.verticalResizble > 0 && this.horizontalResizble < 0) {\n const lockPos = {\n // 锁定角位置\n x: nextP1.x + attribute.width * Math.cos(angle),\n y: nextP1.y + attribute.width * Math.sin(angle)\n };\n // final下的 p1 与 p2\n nextP1.x = lockPos.x - finalWidth * Math.cos(angle);\n nextP1.y = lockPos.y - finalWidth * Math.sin(angle);\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // -1 h 1\n // 拖动的右上角 以左下角为基准\n if (this.verticalResizble < 0 && this.horizontalResizble > 0) {\n const lockPos = {\n // 锁定角位置\n x: nextP1.x - attribute.height * Math.sin(angle),\n y: nextP1.y + attribute.height * Math.cos(angle)\n };\n // final下的 p1 与 p2\n (nextP1.x = lockPos.x + finalHeight * Math.sin(angle)), (nextP1.y = lockPos.y - finalHeight * Math.cos(angle));\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // -1 h 1\n // 拖动的左上角 以右下角为基准\n if (this.verticalResizble < 0 && this.horizontalResizble < 0) {\n // p2 锁定 ,计算 p1\n nextP1.x = nextP2.x - Math.cos(angle) * finalWidth + Math.sin(angle) * finalHeight;\n nextP1.y = nextP2.y - Math.sin(angle) * finalWidth - Math.cos(angle) * finalHeight;\n }\n\n const center = {\n x: (nextP1.x + nextP2.x) / 2,\n y: (nextP1.y + nextP2.y) / 2\n };\n this._doUpdateRectXYWH(center.x - finalWidth / 2, center.y - finalHeight / 2, finalWidth, finalHeight);\n this.setAttributes({\n anchor: [center.x, center.y]\n });\n }\n\n private _handleReshape(dx: number, dy: number) {\n const { width, height } = this.rect.attribute;\n const { shapePoints } = this.attribute;\n const angle = this.getAngle();\n const _dx = dx;\n const _dy = dy;\n dx = Math.cos(angle) * _dx + Math.sin(angle) * _dy;\n dy = Math.cos(angle + pi / 2) * _dx + Math.sin(angle + pi / 2) * _dy;\n if (!this.attribute.isShapePointAbsolute) {\n dx /= width;\n dy /= height;\n }\n const nextShapePoints = shapePoints.map((shapePoint, i) => {\n return i + 1 === this.reshapeState ? { x: shapePoint.x + dx, y: shapePoint.y + dy } : shapePoint;\n });\n this.setAttributes({\n shapePoints: nextShapePoints\n });\n }\n\n private _getRectWithOffset(dx: number, dy: number, lastAttribute: IRectGraphicAttribute) {\n // 投影得到旋转前的dx和dy\n const angle = this.getAngle();\n const _dx = dx;\n const _dy = dy;\n dx = Math.cos(angle) * _dx + Math.sin(angle) * _dy;\n dy = Math.cos(angle + pi / 2) * _dx + Math.sin(angle + pi / 2) * _dy;\n\n dx *= this.horizontalResizble;\n dy *= this.verticalResizble;\n\n const { x, y, width, height } = lastAttribute;\n\n const m = this.transMatrix;\n // 原始的x和y位置\n const nextP1 = {\n x: m.a * x + m.c * y + m.e,\n y: m.b * x + m.d * y + m.f\n };\n const nextP2 = {\n x: m.a * (x + width) + m.c * (y + height) + m.e,\n y: m.b * (x + width) + m.d * (y + height) + m.f\n };\n if (this.horizontalResizble < 0) {\n nextP1.x -= Math.cos(angle) * dx;\n nextP1.y -= Math.sin(angle) * dx;\n } else if (this.horizontalResizble > 0) {\n nextP2.x += Math.cos(angle) * dx;\n nextP2.y += Math.sin(angle) * dx;\n }\n\n if (this.verticalResizble < 0) {\n nextP1.x -= Math.cos(angle + pi / 2) * dy;\n nextP1.y -= Math.sin(angle + pi / 2) * dy;\n } else if (this.verticalResizble > 0) {\n nextP2.x += Math.cos(angle + pi / 2) * dy;\n nextP2.y += Math.sin(angle + pi / 2) * dy;\n }\n\n const center = {\n x: (nextP1.x + nextP2.x) / 2,\n y: (nextP1.y + nextP2.y) / 2\n };\n\n const tw = width + dx;\n const th = height + dy;\n\n // 返回属性计算结果+当前计算过程的重要变量\n return {\n attribute: {\n width: tw,\n height: th,\n x: center.x - tw / 2,\n y: center.y - th / 2,\n anchor: [center.x, center.y]\n },\n temp: {\n nextP1,\n nextP2,\n dx,\n dy\n }\n };\n }\n\n private _getRectP2(p1: { x: number; y: number }, size: { width: number; height: number }, angle: number) {\n return {\n x: p1.x + Math.cos(angle) * size.width - Math.sin(angle) * size.height,\n y: p1.y + Math.sin(angle) * size.width + Math.cos(angle) * size.height\n };\n }\n\n protected handleRotate(currentPoint: { x: number; y: number }) {\n const originB = this.rectB;\n const cx = (originB.x1 + originB.x2) / 2;\n const cy = (originB.y1 + originB.y2) / 2;\n\n const vectorDrag = { x: this._eventPosBeforeScale.x - cx, y: this._eventPosBeforeScale.y - cy };\n const vectorCurrent = { x: currentPoint.x - cx, y: currentPoint.y - cy };\n const dot = vectorDrag.x * vectorCurrent.x + vectorDrag.y * vectorCurrent.y;\n const modDrag = Math.sqrt(vectorDrag.x ** 2 + vectorDrag.y ** 2);\n const modCurrent = Math.sqrt(vectorCurrent.x ** 2 + vectorCurrent.y ** 2);\n const cosAngle = dot / (modDrag * modCurrent);\n const cross = vectorDrag.x * vectorCurrent.y - vectorDrag.y * vectorCurrent.x;\n const delta = cross < 0 ? Math.PI * 2 - Math.acos(cosAngle) : Math.acos(cosAngle);\n\n this.setAttributes({\n angle: this.fixAngle(this.dragStartAngle + delta),\n anchor: [cx, cy]\n });\n }\n\n private fixAngle(angle: number) {\n angle = normalizeAngle(angle);\n for (const fixedAngle of fixedAngles) {\n if (angle >= fixedAngle - maxAngleDifference && angle <= fixedAngle + maxAngleDifference) {\n return normalizeAngle(fixedAngle);\n }\n }\n return angle;\n }\n\n getAngle(): number {\n if (!this.attribute.postMatrix) {\n return this.attribute.angle ?? 0;\n }\n const m = this.transMatrix;\n return Math.atan2(m.b, m.a);\n }\n\n protected render() {\n const {\n resizeBorder,\n padding,\n cornerRect,\n rotateCircle,\n rotatePath,\n handlerLine,\n shapeCircle,\n enabledAnchors = ['top', 'bottom', 'left-top', 'left-bottom', 'right', 'left', 'right-top', 'right-bottom'],\n shapePoints = [],\n isShapePointAbsolute\n } = this.attribute as ControllerAttributes;\n\n const root = this.editBorder.shadowRoot;\n if (!root || this.count === 1) {\n return;\n }\n\n const parsedPadding = normalizePadding(padding as any);\n const { x = 0, y = 0, width: w = 0, height: h = 0 } = this.rect.attribute;\n this.rectB.setValue(x, y, x + w, y + h);\n\n const minX = x - parsedPadding[3];\n const minY = y - parsedPadding[0];\n const width = w + parsedPadding[1] + parsedPadding[3];\n const height = h + parsedPadding[0] + parsedPadding[2];\n\n borderAnchors.forEach((anchor, i) => {\n const enableResize = this._editorConfig.resize && enabledAnchors.includes(anchor as AnchorDirection);\n const item = anchorPositionMap[anchor];\n const cursor = enableResize ? anchorCursorMap[anchor] : 'default';\n root.createOrUpdateChild(\n enableResize ? `scale-${anchor}` : `stroke-line-${anchor}`,\n {\n x: minX,\n y: minY,\n points: [\n { x: item[0] * width, y: item[1] * height },\n { x: item[2] * width, y: item[3] * height }\n ],\n pickStrokeBuffer: 2,\n boundsPadding: 1,\n cursor,\n ...resizeBorder\n },\n 'line'\n );\n });\n\n if (this._editorConfig.rotate) {\n // 添加顶部\n root.createOrUpdateChild(\n 'top-handler-line',\n {\n x: minX + width / 2,\n y: minY,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: -handlerLine.size }\n ],\n ...handlerLine\n },\n 'line'\n );\n root.createOrUpdateChild(\n `rotate-all`,\n {\n x: minX + width / 2,\n y: minY - handlerLine.size - rotateCircle.radius,\n cursor: 'grab',\n ...rotateCircle\n },\n 'circle'\n );\n root.createOrUpdateChild(\n `path-rotate`,\n {\n pickable: false,\n x: minX + width / 2 + rotatePath.size / 2,\n y: minY - handlerLine.size + rotatePath.size / 2 - rotateCircle.radius,\n scaleX: rotatePath.size / 200,\n scaleY: rotatePath.size / 200,\n cursor: 'grab',\n dx: 0.5,\n dy: -0.5,\n ...rotatePath\n },\n 'path'\n );\n }\n\n // 添加锚点\n if (this._editorConfig.resize) {\n enabledAnchors.forEach((anchor: string) => {\n if (!cornerAnchors.includes(anchor)) {\n return;\n }\n const item = anchorPositionMap[anchor];\n const cursor = anchorCursorMap[anchor];\n root.createOrUpdateChild(\n `scale-${anchor}`,\n {\n x: minX + item[0] * width - cornerRect.width! / 2,\n y: minY + item[1] * height - cornerRect.height! / 2,\n cursor,\n ...cornerRect\n },\n 'rect'\n );\n });\n }\n\n if (this._editorConfig.reshape) {\n const shapePointsChildren = root.children.filter((child: any) => child.name.startsWith('reshape'));\n if (shapePointsChildren.length !== shapePoints.length) {\n shapePointsChildren.forEach((child: any) => root.removeChild(child));\n }\n shapePoints.forEach((point, i) => {\n root.createOrUpdateChild(\n `reshape-${i}`,\n {\n x: isShapePointAbsolute ? point.x : point.x * w + x,\n y: isShapePointAbsolute ? point.y : point.y * h + y,\n cursor: 'move',\n ...shapeCircle\n },\n 'circle'\n );\n });\n }\n }\n\n moveBy(dx: number, dy: number): this {\n const { x, y, width, height } = this.rect.attribute;\n this._doUpdateRectXYWH(x + dx, y + dy, width, height);\n this.setAttributes({\n anchor: [x + dx + width / 2, y + dy + height / 2]\n });\n this.dispatchUpdate();\n return this;\n }\n\n // moveBy或者scale,导致形状变化,走这里设置\n protected _doUpdateRectXYWH(x: number, y: number, width: number, height: number) {\n // console.log(x, y, width, height);\n const snappedRect = this._checkSnap(x, y, width, height);\n this.rect.setAttributes({\n ...snappedRect\n });\n }\n\n protected _checkSnap(x: number, y: number, width: number, height: number) {\n const { x: _x, y: _y, width: _width, height: _height } = this.rect.attribute;\n // 计算出这次的diff\n const diff = {\n x: x - _x,\n y: y - _y,\n width: width - _width,\n height: height - _height\n };\n const out = { x, y, width, height };\n if (diff.x === 0 && diff.y === 0 && diff.width === 0 && diff.height === 0) {\n return out;\n }\n const { activeCharacter } = this.editSelection;\n if (!activeCharacter) {\n return out;\n }\n // 如果有旋转的情况下resize宽高,那么不做处理直接返回\n const { angle } = this.attribute;\n if (angle && (diff.width || diff.height)) {\n return out;\n }\n const lines = this.editSelection.edit.getLayoutLineInLayer([activeCharacter.id]);\n // 计算出一个实际的bounds,_actualSnapBounds不受吸附影响,永远记录真实拖动的位置\n if (!this._actualSnapBounds) {\n this._actualSnapBounds = new AABBBounds().setValue(x, y, x + width, y + height);\n } else {\n this._actualSnapBounds.x1 += diff.x;\n this._actualSnapBounds.y1 += diff.y;\n this._actualSnapBounds.x2 += diff.x + diff.width;\n this._actualSnapBounds.y2 += diff.y + diff.height;\n }\n\n let actualSnapBounds = this._actualSnapBounds;\n // 有旋转的话,需要计算出旋转后的bounds\n if (angle) {\n tempRect.setAttributes({\n dx: actualSnapBounds.x1,\n dy: actualSnapBounds.y1,\n width,\n height,\n fill: 'transparent',\n angle: angle,\n anchor: [width / 2, height / 2]\n });\n actualSnapBounds = tempRect.AABBBounds.clone();\n tempRect.setAttributes({\n dx: out.x,\n dy: out.y,\n width: out.width,\n height: out.height,\n fill: 'transparent',\n angle: angle,\n anchor: [width / 2, height / 2]\n });\n out.x = tempRect.AABBBounds.x1;\n out.y = tempRect.AABBBounds.y1;\n out.width = tempRect.AABBBounds.width();\n out.height = tempRect.AABBBounds.height();\n\n const _out_backup = { ...out };\n this._snapLineWithAngle(lines, actualSnapBounds, out);\n\n const dx = _out_backup.x - out.x;\n const dy = _out_backup.y - out.y;\n // console.log(dy);\n out.x = x - dx;\n out.y = y - dy;\n out.width = width;\n out.height = height;\n return out;\n }\n\n let _snappedX = false;\n let _snappedY = false;\n const lineX = lines.filter(item => item.orient === 'x');\n const lineY = lines.filter(item => item.orient === 'y');\n _snappedX = this._snapLine('x', lineX, actualSnapBounds, out, diff.width !== 0);\n _snappedY = this._snapLine('y', lineY, actualSnapBounds, out, diff.height !== 0);\n\n // 从吸附到未吸附,将实际的bounds重置回去\n // TODO x和y都分两边,如果有一边已经吸附,那就不生效\n if (!_snappedX) {\n out.x = actualSnapBounds.x1;\n out.width = actualSnapBounds.width();\n }\n // 从吸附到未吸附,将实际的bounds重置回去\n if (!_snappedY) {\n out.y = actualSnapBounds.y1;\n out.height = actualSnapBounds.height();\n }\n // 如果没有吸附,就重置回去\n if (!(_snappedX || _snappedY)) {\n this._actualSnapBounds = null;\n }\n\n return out;\n }\n\n _snapLineWithAngle(lines: ILayoutLine[], bounds: IAABBBounds, out: IXYWH) {\n const lineX = lines.filter(item => item.orient === 'x');\n const lineY = lines.filter(item => item.orient === 'y');\n this._snapLine('x', lineX, bounds, out, false);\n this._snapLine('y', lineY, bounds, out, false);\n return out;\n }\n\n _snapLine(orient: 'x' | 'y', lines: ILayoutLine[], bounds: IAABBBounds, out: IXYWH, resize: boolean): boolean {\n // 重置snapLine\n [\n `_snapLine${orient.toUpperCase()}1`,\n `_snapLine${orient.toUpperCase()}2`,\n `_snapLine${orient.toUpperCase()}3`\n ].forEach(k => {\n (this as any)[k].setAttributes({ visible: false });\n });\n\n const snapLines = lines.filter(item => {\n const d1 = abs(item.value - bounds[`${orient}1`]);\n const d2 = abs(item.value - bounds[`${orient}2`]);\n // 中间的线\n const d3 = abs(item.value - (bounds[`${orient}1`] + bounds[`${orient}2`]) / 2);\n return d1 < this._snapThreshold || d2 < this._snapThreshold || d3 < this._snapThreshold;\n });\n if (!snapLines.length) {\n return false;\n }\n const outBounds = new AABBBounds().setValue(out.x, out.y, out.x + out.width, out.y + out.height);\n const otherOrient = orient === 'x' ? 'y' : 'x';\n snapLines.forEach(line => {\n const d1 = line.value - bounds[`${orient}1`];\n const d2 = line.value - bounds[`${orient}2`];\n // 中间的线\n const d3 = line.value - (bounds[`${orient}1`] + bounds[`${orient}2`]) / 2;\n const otherOrientMin = Math.min(line.start, line.end, outBounds[`${otherOrient}1`], outBounds[`${otherOrient}2`]);\n const otherOrientMax = Math.max(line.start, line.end, outBounds[`${otherOrient}1`], outBounds[`${otherOrient}2`]);\n const d1Obj = { v: d1, absV: abs(d1), idx: '1', d: line.value - outBounds[`${orient}1`] };\n const d2Obj = { v: d2, absV: abs(d2), idx: '2', d: line.value - outBounds[`${orient}2`] };\n const d3Obj = {\n v: d3,\n absV: abs(d3),\n idx: '3',\n d: line.value - (outBounds[`${orient}1`] + outBounds[`${orient}2`]) / 2\n };\n const min = [d1Obj, d2Obj, d3Obj].sort((a, b) => a.absV - b.absV)[0];\n\n if (!resize) {\n outBounds.translate(orient === 'x' ? min.d : 0, orient === 'y' ? min.d : 0);\n } else {\n (outBounds as any)[`${orient}${min.idx}`] = line.value;\n }\n (this as any)[`_snapLine${orient.toUpperCase()}${min.idx}`].setAttributes({\n visible: true,\n angle: -this.attribute.angle,\n anchor: this.attribute.anchor,\n points: [\n { [orient]: line.value, [otherOrient]: otherOrientMin },\n { [orient]: line.value, [otherOrient]: otherOrientMax }\n ] as any\n });\n });\n out.x = outBounds.x1;\n out.y = outBounds.y1;\n out.width = outBounds.width();\n out.height = outBounds.height();\n return true;\n }\n\n dispatchUpdate(e?: any) {\n const out = this.getTransformAttribute();\n this.updateCbs.forEach(cb => {\n const data = cb(out, e);\n if (data) {\n const { x, y, width, height, anchor, angle, shapePoints } = data;\n Number.isFinite(x) && this.rect.setAttribute('x', x);\n Number.isFinite(y) && this.rect.setAttribute('y', y);\n Number.isFinite(width) && this.rect.setAttribute('width', width);\n Number.isFinite(height) && this.rect.setAttribute('height', height);\n anchor && this.setAttribute('anchor', anchor);\n Number.isFinite(angle) && this.setAttribute('angle', angle);\n shapePoints && this.setAttribute('shapePoints', shapePoints);\n }\n });\n }\n\n onUpdate(cb: (data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false) {\n this.updateCbs.push(cb);\n }\n\n onEditorEnd(cb: (event?: VRenderPointerEvent) => void) {\n this.endEditCbs.push(cb);\n }\n onEditorStart(cb: (event?: VRenderPointerEvent) => void) {\n this.editStartCbs.push(cb);\n }\n onUnTransStart(cb: (event: PointerEvent) => void) {\n this.unTransStartCbs.push(cb);\n }\n\n addChildUpdateBoundTag() {\n super.addChildUpdateBoundTag();\n\n // 如果wrap内的内容bounds变化,那就需要重新调用render\n if (this.runningAddChildUpdateBoundTag) {\n return;\n }\n this.runningAddChildUpdateBoundTag = true;\n\n this.render();\n\n this.runningAddChildUpdateBoundTag = false;\n }\n\n getTransformAttribute() {\n const { x, y, width, height } = this.rect.attribute;\n const { angle, anchor, shapePoints } = this.attribute;\n return {\n x,\n y,\n width,\n height,\n angle,\n anchor,\n shapePoints\n };\n }\n\n releaseEvent() {\n this.editBorder.removeEventListener('mousemove', this.handleMouseMove);\n if (this.stage) {\n this.stage.removeEventListener('pointermove', this.handleDragMouseMove);\n this.stage.removeEventListener('pointerup', this.handleDragMouseUp);\n }\n this.removeEventListener('pointerout', this.handleMouseOut);\n this.removeEventListener('pointerdown', this.handleDragMouseDown);\n }\n\n releaseDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.release();\n }\n\n pauseDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.pauseDrag();\n }\n\n resumeDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.resumeDrag();\n }\n\n protected _isRelease = false;\n release(): void {\n this._isRelease = true;\n // event\n this.releaseEvent();\n\n this.parent.removeChild(this);\n this.removeAllChild();\n this.editBorder = null;\n this.rect = null;\n this._dragger = null;\n this._snapLineX1 = null;\n this._snapLineY1 = null;\n this._snapLineX2 = null;\n this._snapLineY2 = null;\n this._snapLineX2 = null;\n this._snapLineY2 = null;\n this.editStartCbs = [];\n this.updateCbs = [];\n this.endEditCbs = [];\n this.unTransStartCbs = [];\n super.release();\n }\n}\n","import { AbstractComponent } from '@visactor/vrender-components';\nimport type { IGroup, IGroupGraphicAttribute, IRect, IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { createRect, IGraphic } from '@visactor/vrender-core';\nimport { IAABBBoundsLike, merge } from '@visactor/vutils';\nimport { SHAPE_HOVER_COLOR } from './constants';\nimport type { IEditSelection } from '../../interface';\nimport { VRenderPointerEvent } from '../../interface';\n\ninterface HoverControllerAttribute extends IGroupGraphicAttribute {\n hoverBorder: IRectGraphicAttribute;\n}\n\nexport type IHoverController = IGroup;\n\n// @ts-ignore\nexport class HoverController extends AbstractComponent> implements IGroup {\n hoverBorder: IRect;\n editSelection: IEditSelection;\n\n static defaultAttributes: Partial = {\n hoverBorder: {\n stroke: SHAPE_HOVER_COLOR,\n strokeOpacity: 0.7,\n lineWidth: 2,\n lineDash: [8, 8]\n }\n };\n\n constructor(editSelection: IEditSelection, attributes: Partial) {\n super(merge(HoverController.defaultAttributes, attributes));\n this.editSelection = editSelection;\n this.hoverBorder = createRect({\n visible: false\n });\n this.add(this.hoverBorder);\n }\n\n protected render(): void {\n const { width, height, hoverBorder } = this.attribute;\n this.hoverBorder.setAttributes({\n visible: true,\n x: 0,\n y: 0,\n width,\n height,\n ...hoverBorder\n });\n }\n\n release(): void {\n this.parent.removeChild(this);\n this.removeAllChild();\n this.hoverBorder.release();\n this.hoverBorder = null;\n super.release();\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { createGroup, vglobal } from '@visactor/vrender-core';\nimport type { IEditActionInfo, IEditSelection, IEditSelectionInfo } from '../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { EditActionEnum, EditEditingState } from '../const';\nimport type { Edit } from '../edit';\nimport type { ITransformController, ControllerAttributes, IUpdateParams } from './edit-control/transform-control';\nimport { TransformController } from './edit-control/transform-control';\nimport type { IHoverController } from './edit-control/hover-control';\nimport { HoverController } from './edit-control/hover-control';\n\nexport abstract class BaseSelection implements IEditSelection {\n declare readonly level: number;\n declare readonly type: string;\n readonly supportedCharacterType: string[] = [];\n\n protected _overGraphic: IGroup;\n protected _actionInfo: IEditActionInfo | null;\n protected _activeCharacter: ICharacter | null;\n protected _layoutController: ITransformController | null;\n protected _hoverController: IHoverController | null;\n\n isEditing: boolean = false;\n declare clickCount: number;\n protected readonly dblclickTime: number = 300;\n\n get activeCharacter() {\n return this._activeCharacter;\n }\n\n constructor(public readonly edit: Edit) {\n this._activeCharacter = null;\n this._actionInfo = null;\n this._layoutController = null;\n this._hoverController = null;\n this._initOverGraphic();\n }\n\n checkAction(actionInfo: IEditActionInfo): boolean {\n if (this.isEditing) {\n return this.checkActionWhileEditing(actionInfo);\n }\n return this.checkActionWhileNoEditing(actionInfo);\n }\n checkOver(actionInfo: IEditActionInfo | IEditSelectionInfo) {\n if (!this.isActionInfoSupported(actionInfo)) {\n return;\n }\n if (actionInfo.type === EditActionEnum.pointerOverCharacter) {\n this.activeHoverController(actionInfo.character);\n } else if (actionInfo.type === EditActionEnum.pointerOutCharacter) {\n this.inActiveHoverController();\n }\n }\n startEdit(actionInfo: IEditActionInfo, emitEvent: boolean = false) {\n if (this.isEditing) {\n return;\n }\n this.isEditing = true;\n this._actionInfo = actionInfo;\n if (actionInfo && actionInfo.character) {\n this._activeCharacter = actionInfo.character;\n }\n this.activeLayoutController();\n\n emitEvent &&\n this.edit.emitStartEdit({\n type: this.type,\n actionInfo,\n selection: this\n });\n }\n\n endEdit(emitEvent: boolean = false) {\n if (!this.isEditing) {\n return;\n }\n this.isEditing = false;\n const actionInfo = this._actionInfo;\n this._actionInfo = null;\n this._activeCharacter = null;\n this.inActiveLayoutController();\n\n emitEvent &&\n this.edit.emitEndEdit({\n type: this.type,\n actionInfo,\n selection: this\n });\n }\n protected keyDown = (event: any) => {\n if (!(this._layoutController && event)) {\n return;\n }\n if (event.shiftKey || event.key === 'Shift') {\n this._layoutController.defaultProportionalScaling = this._layoutController.proportionalScaling;\n this._layoutController.proportionalScaling = true;\n }\n };\n protected keyUp = (event: any) => {\n if (!(this._layoutController && event)) {\n return;\n }\n if (event.shiftKey || event.key === 'Shift') {\n this._layoutController.proportionalScaling = this._layoutController.defaultProportionalScaling;\n }\n };\n\n protected activeLayoutController() {\n // 关闭hover的控件\n this.inActiveHoverController();\n\n if (!this._layoutController) {\n this._layoutController = this.createLayoutController();\n }\n if (!this._layoutController) {\n return;\n }\n this.attachController(this._layoutController);\n this._layoutController.onActive();\n this.updateController();\n vglobal.addEventListener('keydown', this.keyDown);\n vglobal.addEventListener('keyup', this.keyUp);\n }\n protected inActiveLayoutController() {\n if (!this._layoutController) {\n return;\n }\n\n this.detachController();\n\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, false);\n vglobal.removeEventListener('keydown', this.keyDown);\n vglobal.removeEventListener('keyup', this.keyUp);\n }\n\n protected activeHoverController(character: ICharacter) {\n if (this.isEditing) {\n return;\n }\n if (!this._hoverController) {\n this._hoverController = this.createHoverController(character);\n }\n this.attachController(this._hoverController);\n }\n\n protected inActiveHoverController() {\n if (!this._hoverController) {\n return;\n }\n\n this.detachController();\n }\n\n protected attachController(layoutController: IGroup) {\n const g = this.edit.getEditGroup();\n if (layoutController.parent === g) {\n throw new Error('【attachController】未知错误,不应该走到这里');\n }\n g.appendChild(layoutController);\n }\n protected detachController() {\n if (this._layoutController) {\n this._layoutController.release();\n this._layoutController = null;\n }\n if (this._hoverController) {\n this._hoverController.release();\n this._hoverController = null;\n }\n }\n protected updateController(): void {\n const actionInfo = this._actionInfo as IEditSelectionInfo;\n const activeCharacter = this._activeCharacter;\n if (!(actionInfo && actionInfo.character && activeCharacter)) {\n return;\n }\n const component = actionInfo.character.graphic;\n const graphic = component.mainGraphic;\n const bounds = graphic.AABBBounds.clone();\n const { angle, x, y } = component.attribute;\n bounds.translate(x, y);\n this._layoutController.updateBoundsAndAngle(bounds, angle);\n return;\n }\n\n protected createLayoutController(): ITransformController | undefined {\n const controller = this._createLayoutController({\n angle: 0,\n enabledAnchors: ['top', 'bottom', 'left', 'right', 'left-bottom', 'left-top', 'right-bottom', 'right-top'],\n minHeight: 10,\n minWidth: 10,\n proportionalScaling: false,\n childrenPickable: true,\n pickable: true,\n move: true,\n rotate: true,\n resize: true,\n setCursor: (c: any) => {\n this.edit.story.canvas.getStage().setCursor(c);\n return;\n }\n });\n\n controller.onEditorStart(() => {\n this.edit.clearOverGraphic();\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, true);\n });\n controller.onEditorEnd(() => {\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, false);\n });\n controller.onUpdate(this.handlerControlChange);\n return controller;\n }\n\n protected createHoverController(character: ICharacter): IHoverController | undefined {\n const bounds = character.graphic.AABBBounds;\n const controller = new HoverController(this, {\n x: bounds.x1,\n y: bounds.y1,\n width: bounds.width(),\n height: bounds.height()\n }) as any;\n return controller;\n }\n\n protected _createLayoutController(attributes: Partial): ITransformController {\n return new TransformController(this, attributes) as any;\n }\n\n protected handlerControlChange = (data: IUpdateParams) => {\n if (this._activeCharacter) {\n this.edit.emit('resize', {\n position: data,\n character: this._activeCharacter\n });\n this._activeCharacter.setConfig({\n position: {\n top: data.y,\n left: data.x,\n width: data.width,\n height: data.height,\n anchor: data.anchor as any,\n angle: data.angle\n }\n });\n }\n return false as const;\n };\n\n protected _initOverGraphic() {\n this._overGraphic = createGroup({ pickable: false, visible: false });\n }\n\n protected isCharacterSupported(character: ICharacter): boolean {\n return this.supportedCharacterType.includes(character.type);\n }\n\n protected isActionInfoSupported(actionInfo: IEditActionInfo): boolean {\n return this.isCharacterSupported(actionInfo.character);\n }\n\n // 编辑状态下处理actionInfo\n protected checkActionWhileEditing(actionInfo: IEditActionInfo): boolean {\n // 取消选择,返回false\n if (actionInfo.type === EditActionEnum.unSelection) {\n this.endEdit();\n return false;\n }\n if (actionInfo.type === EditActionEnum.singleSelection) {\n this.checkDblClickAction(actionInfo);\n // 使用到其他的Selection了,return false\n if (!this.isActionInfoSupported(actionInfo)) {\n this.endEdit();\n return false;\n } else if (actionInfo.character !== this._activeCharacter) {\n // 选中同类型其他元素\n // 先停止当前的\n this.endEdit();\n // 再移动到新元素上去\n this.startEdit(actionInfo);\n return true;\n }\n // 还是是当前元素,return true\n return true;\n }\n return false;\n }\n\n protected checkDblClickAction(actionInfo: IEditActionInfo) {\n if (!this.clickCount) {\n this.clickCount = 1;\n } else {\n this.clickCount++;\n }\n if (this.clickCount > 1) {\n this._checkDblClickAction(actionInfo);\n this.clickCount = 0;\n // 暂时不用clearTimeout,猜测不会点的那么快\n }\n setTimeout(() => {\n this.clickCount = 0;\n }, this.dblclickTime);\n }\n protected _checkDblClickAction(actionInfo: IEditActionInfo) {\n return;\n }\n // 非编辑状态下处理actionInfo\n protected checkActionWhileNoEditing(actionInfo: IEditActionInfo): boolean {\n if (actionInfo.type === EditActionEnum.singleSelection && this.isActionInfoSupported(actionInfo)) {\n this.startEdit(actionInfo);\n return true;\n }\n return false;\n }\n}\n","import { EventEmitter, Point } from '@visactor/vutils';\nimport type { IRichText, RichTextEditPlugin } from '@visactor/vrender';\nimport type { Edit } from '../../edit';\nimport { EditActionEnum } from '../../const';\nimport type { ICharacter } from '@visactor/vstory-core';\nexport class RichTextControl {\n protected _character: ICharacter;\n protected _richText: IRichText;\n protected _edit: Edit;\n\n emitter: EventEmitter = new EventEmitter();\n\n constructor(edit: Edit, character: ICharacter, richText: IRichText) {\n this._character = character;\n this._richText = richText;\n this._edit = edit;\n this._initPlugin();\n }\n\n protected _initPlugin() {\n this._edit.editAction.on(EditActionEnum.richTextPluginEdit, this.onRichTextPluginEdit);\n }\n\n onRichTextPluginEdit = (msg: { type: string; p: RichTextEditPlugin }) => {\n this._edit.emit(EditActionEnum.richTextPluginEdit, { data: msg, character: this._character });\n const { type, p } = msg;\n if (p.currRt !== this._richText) {\n console.warn('current edit richtext not match in richtext-control.onRichTextPluginEdit');\n return;\n }\n if (msg.type === 'change' && this._character) {\n this._character.setConfig({\n options: { text: { text: '', textConfig: [...this._richText.attribute.textConfig] } } as any\n });\n }\n // do noting 富文本编辑消息的处理\n // console.log('onRichTextPluginEdit', type, p);\n };\n\n startEdit() {\n this._richText.setAttributes({ editable: true });\n }\n\n // 聚焦到富文本上\n focus(e: PointerEvent) {\n // 找到plugin\n const stage = this._richText.stage;\n if (!stage) {\n return;\n }\n const plugin = (stage.pluginService.findPluginsByName('RichTextEditPlugin') || [])[0];\n if (!plugin) {\n return;\n }\n (plugin as any).forceFocus && (plugin as any).forceFocus(e);\n }\n\n endEdit() {\n this._richText.setAttributes({ editable: false });\n }\n\n release() {\n this._edit.editAction.off(EditActionEnum.richTextPluginEdit, this.onRichTextPluginEdit);\n }\n}\n","import type { Edit } from './../../edit';\nimport type { IRichText } from '@visactor/vrender-core';\nimport type { IEditActionInfo, IEditSelection } from '../../interface';\nimport { RichTextControl } from '../edit-control/richtext-control';\nimport type { ICharacter } from '@visactor/vstory-core';\n\nexport interface RichTextMixin extends IEditSelection {\n edit: Edit;\n _actionInfo: IEditActionInfo;\n _isSelection: boolean;\n isEditing: boolean;\n mode: 'edit-text' | 'normal';\n}\n\nexport class RichTextMixin {\n _richTextControl: RichTextControl;\n _textClickHandlerTemp: any;\n _hasDrag: boolean = false;\n _pointerdownHandlerTemp: any;\n declare _layoutController: any;\n\n _createRichControl(character: ICharacter, text: IRichText, e: PointerEvent) {\n this._richTextControl = new RichTextControl(this.edit, character, text);\n this._tryStartEdit(e);\n this._pointerdownHandlerTemp = this.handlerPointerDown.bind(this, text);\n text.addEventListener('pointerdown', this._pointerdownHandlerTemp);\n // 暂停拖拽控件\n this._layoutController && this._layoutController.pauseDragger && this._layoutController.pauseDragger();\n }\n\n _releaseRichControl(character: ICharacter, text: IRichText) {\n if (!this._richTextControl) {\n return;\n }\n this._richTextControl.endEdit();\n this._richTextControl.release();\n if (text) {\n text.removeEventListener('pointerdown', this._pointerdownHandlerTemp);\n }\n this._richTextControl = null;\n this._textClickHandlerTemp = null;\n this._layoutController && this._layoutController.resumeDragger && this._layoutController.resumeDragger();\n }\n\n _tryStartEdit(e: PointerEvent) {\n // 必须是点击才行,拖动不行\n if (this._hasDrag) {\n return;\n }\n this.mode = 'edit-text';\n this._richTextControl?.startEdit();\n this._richTextControl?.focus(e);\n }\n\n handlerPointerDown(text: IRichText) {\n const uped = false;\n this._hasDrag = false;\n const count = 0;\n // const handlerMove = (e: PointerEvent) => {\n // console.log('aaaaaaaaaaaaaaaa')\n // // 认为鼠标按下,然后拖动事件触发次数大于2次,就算拖动,就不触发富文本编辑\n // if (!uped && count++ > 2) {\n // this._hasDrag = true;\n // }\n // };\n // text.addEventListener('pointermove', handlerMove);\n // text.stage.once('pointerup', () => {\n // uped = true;\n // text.removeEventListener('pointermove', handlerMove);\n // });\n }\n}\n","import type { IEditActionInfo, IEditSelection } from '../interface';\nimport { BaseSelection } from './base-selection';\nimport type { IRichText } from '@visactor/vrender-core';\nimport { mixin } from '@visactor/vutils';\nimport { RichTextMixin } from './mixin/richtext';\n\nexport interface RichTextSelectionCommon\n extends Pick,\n IEditSelection {}\n\nexport class RichTextSelectionCommon extends BaseSelection implements IEditSelection {\n readonly level = 3;\n readonly type: string;\n readonly editCharacterType: string;\n\n protected _getRichText() {\n // @ts-ignore\n const character = this._actionInfo.character;\n const text = character.graphic.getElementsByName('text')[0] as IRichText;\n return { character, text };\n }\n\n protected _checkDblClickAction(actionInfo: IEditActionInfo): void {\n const { character, text } = this._getRichText();\n // if (!text) {\n // return;\n // }\n this._createRichControl(character, text, actionInfo.event);\n }\n\n endEdit() {\n const { character, text } = this._getRichText();\n // if (!text) {\n // return;\n // }\n this._releaseRichControl(character, text);\n super.endEdit();\n }\n\n endRichTextEdit = () => {\n this._richTextControl?.endEdit();\n };\n}\n\nmixin(RichTextSelectionCommon, RichTextMixin);\n","import { application } from '../../application';\nimport type {\n IRichText,\n IRichTextCharacter,\n IRichTextGraphicAttribute,\n IRichTextParagraphCharacter\n} from '../../interface';\n\n// function getMaxConfigIndexIgnoreLinebreak(textConfig: IRichTextCharacter[]) {\n// let idx = 0;\n// for (let i = 0; i < textConfig.length; i++) {\n// const c = textConfig[i] as IRichTextParagraphCharacter;\n// if (c.text !== '\\n') {\n// idx++;\n// }\n// }\n// return Math.max(idx - 1, 0);\n// }\n\nexport function getDefaultCharacterConfig(attribute: IRichTextGraphicAttribute) {\n const { fill = 'black', stroke = false, fontWeight = 'normal', fontFamily = 'Arial' } = attribute;\n let { fontSize = 12 } = attribute;\n if (!isFinite(fontSize)) {\n fontSize = 12;\n }\n return {\n fill,\n stroke,\n fontSize,\n fontWeight,\n fontFamily\n } as any;\n}\n\n/**\n * 找到cursorIndex所在的textConfig的位置,给出的index就是要插入的准确位置\n * @param textConfig\n * @param cursorIndex\n * @returns\n */\nexport function findConfigIndexByCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n if (cursorIndex < 0) {\n return 0;\n }\n\n // 排序找到对应的元素\n const intCursorIndex = Math.round(cursorIndex);\n let tempCursorIndex = intCursorIndex;\n // 跳过连续换行符中的第一个换行符\n let lineBreak = false;\n let configIdx = 0;\n for (configIdx = 0; configIdx < textConfig.length && tempCursorIndex >= 0; configIdx++) {\n const c = textConfig[configIdx] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n tempCursorIndex -= Number(lineBreak);\n lineBreak = true;\n } else {\n tempCursorIndex--;\n lineBreak = false;\n }\n }\n // 说明过限了\n if (tempCursorIndex >= 0) {\n return textConfig.length;\n }\n configIdx -= 1;\n\n // 如果有换行,一定在换行符左边写\n if (cursorIndex > intCursorIndex && !lineBreak) {\n configIdx += 1;\n }\n return configIdx;\n}\n\n/**\n * 根据configIndex找到cursorIndex的位置,忽略单个换行符,连续换行符的时候只忽略第一个\n * @param textConfig\n * @param configIndex\n * @returns\n */\nexport function findCursorIdxByConfigIndex(textConfig: IRichTextCharacter[], configIndex: number): number {\n let cursorIndex = 0;\n if (configIndex < 0) {\n return -0.1;\n }\n // 仅有一个\\n,那不算\n // 如果有连续的\\n,那就少算一个\n let lastLineBreak = false;\n\n for (let i = 0; i <= configIndex && i < textConfig.length; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n cursorIndex += Number(lastLineBreak);\n lastLineBreak = true;\n } else {\n cursorIndex++;\n lastLineBreak = false;\n }\n }\n cursorIndex = Math.max(cursorIndex - 1, 0);\n\n // 超出区间了直接设置到尾部,configIndex超过区间,cursorIndex不会超过\n if (configIndex > textConfig.length - 1) {\n // 如果最后一行是一个换行符,那么就得是xx.9否则就是xx.1\n if ((textConfig[textConfig.length - 1] as any)?.text === '\\n') {\n return cursorIndex + 0.9;\n }\n return cursorIndex + 0.1;\n }\n\n // 如果是这个configIdx对应到的是单个换行的话,那么算到下一个字符上\n const lineBreak = (textConfig[configIndex] as any)?.text === '\\n';\n if (configIndex >= textConfig.length - 1 && lineBreak) {\n return cursorIndex + 1 - 0.1;\n }\n const singleLineBreak = lineBreak && (textConfig[configIndex - 1] as any)?.text !== '\\n';\n\n // 光标往左放\n cursorIndex -= 0.1;\n\n // 如果是单行,那么这一个换行符没有算字符,光标要往右放\n if (singleLineBreak) {\n cursorIndex += 0.2;\n }\n return cursorIndex;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n composingConfigIdx: number;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n onFocusInList: Array<() => void>;\n onFocusOutList: Array<() => void>;\n focusOutTimer: number;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.composingConfigIdx = -1;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n this.onFocusInList = [];\n this.onFocusOutList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onChangeCbList.push(cb);\n }\n\n onFocusIn(cb: () => void) {\n this.onFocusInList.push(cb);\n }\n\n onFocusOut(cb: () => void) {\n this.onFocusOutList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n // 监听焦点\n textAreaDom.addEventListener('focusin', this.handleFocusIn);\n textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleFocusIn = () => {\n // this.focusOutTimer && clearTimeout(this.focusOutTimer);\n // this.focusOutTimer = 0;\n // this.onFocusInList && this.onFocusInList.forEach(cb => cb());\n };\n handleFocusOut = () => {\n // 暂时注释,会导致非期待情况下的误关闭\n // // 延时触发,避免误关闭\n // this.focusOutTimer = setTimeout(() => {\n // this.onFocusOutList && this.onFocusOutList.forEach(cb => cb());\n // }, 100);\n };\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n this.isComposing = true;\n const { textConfig = [] } = this.currRt.attribute;\n this.composingConfigIdx = this.cursorIndex < 0 ? 0 : findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n if (this.cursorIndex < 0) {\n const config = textConfig[0];\n textConfig.unshift({ ...getDefaultCharacterConfig(this.currRt.attribute), ...config, text: '' });\n } else {\n const configIdx = this.composingConfigIdx;\n const lastConfig = textConfig[configIdx] || textConfig[configIdx - 1];\n textConfig.splice(configIdx, 0, { ...lastConfig, text: '' });\n }\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n\n const text = this.parseCompositionStr(this.composingConfigIdx);\n // 拆分上一次的内容\n // const { textConfig = [] } = this.currRt.attribute;\n // const configIdx = this.composingConfigIdx;\n\n // const lastConfig = textConfig[configIdx];\n // textConfig.splice(configIdx, 1);\n // const text = (lastConfig as any).text;\n // const textList: string[] = text ? Array.from(text.toString()) : [];\n // for (let i = 0; i < textList.length; i++) {\n // textConfig.splice(i + configIdx, 0, { ...lastConfig, isComposing: false, text: textList[i] } as any);\n // }\n // this.currRt.setAttributes({ textConfig });\n // const nextConfigIdx = configIdx + textList.length;\n // this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n this.composingConfigIdx = -1;\n\n this.onChangeCbList.forEach(cb => {\n cb(\n text,\n this.isComposing,\n // TODO 当换行后刚开始输入会有问题,后续看这里具体Cursor变换逻辑\n this.cursorIndex,\n this.currRt\n );\n });\n };\n\n /**\n * 复合输入以及粘贴,都会复制出一大段内容,这时候需要重新处理textConfig和cursorIndex\n * 1. 拆分text到textConfig\n * 2. 计算新的cursorIndex\n * @param configIdx\n */\n parseCompositionStr(configIdx: number) {\n const { textConfig = [] } = this.currRt.attribute;\n\n const lastConfig = textConfig[configIdx];\n textConfig.splice(configIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = text ? Array.from(text.toString()) : [];\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + configIdx, 0, {\n fill: 'black',\n ...lastConfig,\n isComposing: false,\n text: textList[i]\n } as any);\n }\n this.currRt.setAttributes({ textConfig });\n const nextConfigIdx = configIdx + textList.length;\n this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n return text;\n }\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n if (ev.inputType === 'historyUndo') {\n return;\n }\n const { textConfig = [], ...rest } = this.currRt.attribute;\n // 删完了,直接返回\n if (ev.type === 'Backspace' && !textConfig.length) {\n return;\n }\n\n let str = (ev as any).data;\n if (!this.isComposing && ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n\n // 处理正反选\n if (this.selectionStartCursorIdx > this.cursorIndex) {\n [this.cursorIndex, this.selectionStartCursorIdx] = [this.selectionStartCursorIdx, this.cursorIndex];\n }\n\n const startIdx = findConfigIndexByCursorIdx(textConfig, this.selectionStartCursorIdx);\n const endIdx = findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n\n // composing的话会插入一个字符,所以往右加一个\n const lastConfigIdx = this.isComposing ? this.composingConfigIdx : Math.max(startIdx - 1, 0);\n // 算一个默认属性\n let lastConfig: any = textConfig[lastConfigIdx];\n if (!lastConfig) {\n lastConfig = getDefaultCharacterConfig(rest);\n }\n let nextConfig = lastConfig;\n\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx, endIdx - startIdx);\n if (this.isComposing) {\n this.composingConfigIdx = startIdx;\n }\n }\n\n let nextConfigIdx = startIdx;\n\n // 删除键\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx === endIdx) {\n if (startIdx <= 0) {\n return;\n }\n // 删除\n textConfig.splice(startIdx - 1, 1);\n nextConfigIdx = Math.max(startIdx - 1, 0);\n } else {\n // 不插入内容\n }\n } else {\n // 插入\n if (!this.isComposing) {\n nextConfig = { fill: 'black', ...lastConfig, text: '' };\n textConfig.splice(startIdx, 0, nextConfig);\n nextConfigIdx++;\n }\n // 插入\n nextConfig.text = str;\n // 标记isComposing,用来判定是否应该拆分成单个字符\n nextConfig.isComposing = this.isComposing;\n }\n\n this.currRt.setAttributes({ textConfig });\n // 重新计算cursorIdx\n // nextConfigIdx = Math.min(nextConfigIdx, textConfig.length - 1);\n\n let cursorIndex = this.cursorIndex;\n if (str && str.length > 1 && !this.isComposing) {\n // 如果字符长度大于1且不是composing,那说明是粘贴\n // 拆分\n this.parseCompositionStr(nextConfigIdx - 1);\n cursorIndex = this.cursorIndex;\n } else {\n // composing的时候不偏移,只有完整输入后才偏移\n cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n if (!this.isComposing) {\n this.cursorIndex = cursorIndex;\n } else {\n this.cursorIndex = this.selectionStartCursorIdx;\n }\n }\n\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n this.textAreaDom.addEventListener('focusin', this.handleFocusOut);\n this.textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n","import type { IAABBBounds, IPointLike } from '@visactor/vutils';\nimport { isObject, isString, max, merge } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport {\n createGroup,\n createLine,\n createRect,\n createRichText,\n createText,\n getRichTextBounds,\n RichText\n} from '../../graphic';\nimport type {\n IGroup,\n ILine,\n IPlugin,\n IPluginService,\n IRect,\n IRichText,\n IRichTextCharacter,\n IRichTextFrame,\n IRichTextIcon,\n IRichTextLine,\n IRichTextParagraph,\n IRichTextParagraphCharacter,\n ITicker,\n ITimeline\n} from '../../interface';\nimport { Animate, DefaultTicker, DefaultTimeline } from '../../animate';\nimport { EditModule, findConfigIndexByCursorIdx, getDefaultCharacterConfig } from './edit-module';\nimport { application } from '../../application';\nimport { getWordStartEndIdx } from '../../graphic/richtext/utils';\n// import { testLetter, testLetter2 } from '../../graphic/richtext/utils';\n\ntype UpdateType = 'input' | 'change' | 'onfocus' | 'defocus' | 'selection' | 'dispatch';\n\nclass Selection {\n selectionStartCursorIdx: number;\n curCursorIdx: number;\n rt: IRichText;\n\n constructor(selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText) {\n this.curCursorIdx = curCursorIdx;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n this.rt = rt;\n }\n\n isEmpty(): boolean {\n return this.selectionStartCursorIdx === this.curCursorIdx;\n }\n\n getSelectionPureText(): string {\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return '';\n }\n const config = this.rt.attribute.textConfig as any;\n const startIdx = findConfigIndexByCursorIdx(config, Math.ceil(minCursorIdx));\n const endIdx = findConfigIndexByCursorIdx(config, Math.floor(maxCursorIdx));\n let str = '';\n for (let i = startIdx; i <= endIdx; i++) {\n str += config[i].text;\n }\n return str;\n }\n\n hasFormat(key: string): boolean {\n return this.getFormat(key) != null;\n }\n\n /**\n * 获取第idx中key的值\n * @param key\n * @param cursorIdx\n */\n _getFormat(key: string, cursorIdx: number) {\n if (!this.rt) {\n return null;\n }\n let idx = Math.round(cursorIdx);\n const config = this.rt.attribute.textConfig as any;\n if (!config.length) {\n return null;\n }\n for (let i = 0; i < config.length; i++) {\n if (config[i].text !== '\\n') {\n idx--;\n if (idx < 0) {\n return config[i][key];\n }\n }\n }\n return config[Math.min(idx, config.length - 1)][key] ?? (this.rt.attribute as any)[key];\n }\n getFormat(key: string): any {\n return this.getAllFormat(key)[0];\n }\n\n getAllFormat(key: string): any {\n const valSet = new Set();\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return [this._getFormat(key, minCursorIdx)];\n }\n for (let i = Math.ceil(minCursorIdx); i <= Math.floor(maxCursorIdx); i++) {\n const val = this._getFormat(key, i);\n val && valSet.add(val);\n }\n return Array.from(valSet.values());\n }\n}\n\nexport const FORMAT_TEXT_COMMAND = 'FORMAT_TEXT_COMMAND';\nexport const FORMAT_ALL_TEXT_COMMAND = 'FORMAT_ALL_TEXT_COMMAND';\nexport const FORMAT_ELEMENT_COMMAND = 'FORMAT_ELEMENT_COMMAND';\nexport class RichTextEditPlugin implements IPlugin {\n name: 'RichTextEditPlugin' = 'RichTextEditPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n // 是否正在编辑\n editing: boolean = false;\n // 是否正在聚焦中\n focusing: boolean = false;\n // 鼠标是否按下,判断是否展示selection\n pointerDown: boolean = false;\n\n // selection组件\n editLine: ILine;\n editBg: IGroup;\n shadowPlaceHolder: IRichText;\n shadowBounds: IRect;\n\n ticker: ITicker;\n timeline: ITimeline;\n\n currRt: IRichText;\n\n // 当前的cursor信息\n // 0.1为第一个字符右侧, -0.1为第一个字符左侧\n // 1.1为第二个字符右侧,0.9为第二个字符左侧\n curCursorIdx: number;\n selectionStartCursorIdx: number;\n startCursorPos?: IPointLike;\n\n editModule: EditModule;\n\n protected commandCbs: Map void>>;\n protected updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;\n\n // 富文本外部有align或者baseline的时候,需要对光标做偏移\n protected declare deltaX: number;\n protected declare deltaY: number;\n\n // static splitText(text: string) {\n // // 😁这种emoji长度算两个,所以得处理一下\n // return Array.from(text);\n // }\n\n static tryUpdateRichtext(richtext: IRichText) {\n const cache = richtext.getFrameCache();\n if (!RichText.AllSingleCharacter(cache)) {\n const tc = RichText.TransformTextConfig2SingleCharacter(richtext.attribute.textConfig);\n // richtext.attribute.textConfig.forEach((item: IRichTextParagraphCharacter) => {\n // const textList = RichTextEditPlugin.splitText(item.text.toString());\n // if (isString(item.text) && textList.length > 1) {\n // // 拆分\n // for (let i = 0; i < textList.length; i++) {\n // const t = textList[i];\n // tc.push({ ...item, text: t });\n // }\n // } else {\n // tc.push(item);\n // }\n // });\n richtext.setAttributes({ textConfig: tc });\n richtext.doUpdateFrameCache(tc);\n }\n }\n\n static CreateSelection(rt: IRichText) {\n if (!rt) {\n return null;\n }\n const { textConfig = [] } = rt.attribute;\n return new Selection(0, textConfig.length - 1, rt);\n }\n\n constructor() {\n this.commandCbs = new Map();\n this.commandCbs.set(FORMAT_TEXT_COMMAND, [this.formatTextCommandCb]);\n this.commandCbs.set(FORMAT_ALL_TEXT_COMMAND, [this.formatAllTextCommandCb]);\n this.updateCbs = [];\n this.timeline = new DefaultTimeline();\n this.ticker = new DefaultTicker([this.timeline]);\n this.deltaX = 0;\n this.deltaY = 0;\n }\n\n formatTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const selectionData = p.getSelection();\n if (!selectionData) {\n return;\n }\n const { selectionStartCursorIdx, curCursorIdx } = selectionData;\n const minCursorIdx = Math.min(selectionStartCursorIdx, curCursorIdx);\n const maxCursorIdx = Math.max(selectionStartCursorIdx, curCursorIdx);\n const minConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, minCursorIdx);\n const maxConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, maxCursorIdx);\n const config = rt.attribute.textConfig.slice(minConfigIdx, maxConfigIdx);\n this._formatTextCommand(payload, config, rt);\n };\n\n formatAllTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const config = rt.attribute.textConfig;\n this._formatTextCommand(payload, config, rt);\n };\n\n _formatTextCommand(payload: string, config: IRichTextCharacter[], rt: IRichText) {\n if (payload === 'bold') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontWeight = 'bold'));\n } else if (payload === 'italic') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontStyle = 'italic'));\n } else if (payload === 'underline') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.underline = true));\n } else if (payload === 'lineThrough') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.lineThrough = true));\n } else if (isObject(payload)) {\n config.forEach((item: IRichTextParagraphCharacter) => merge(item, payload));\n }\n rt.setAttributes(rt.attribute);\n // 重新渲染Selection位置,因为fontSize会影响文字大小\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n this.selectionRangeByCursorIdx(this.selectionStartCursorIdx, this.curCursorIdx, cache);\n // 设置属性的时候,Bounds也要更改\n this.tryShowInputBounds();\n }\n\n dispatchCommand(command: string, payload: any) {\n const cbs = this.commandCbs.get(command);\n cbs && cbs.forEach(cb => cb(payload, this));\n this.updateCbs.forEach(cb => cb('dispatch', this));\n }\n\n registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n cbs.push(cb);\n }\n\n removeCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n cbs.push(cb);\n }\n\n removeUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.editModule = new EditModule();\n // context.stage.on('click', this.handleClick);\n context.stage.on('pointermove', this.handleMove);\n context.stage.on('pointerdown', this.handlePointerDown);\n context.stage.on('pointerup', this.handlePointerUp);\n context.stage.on('pointerleave', this.handlePointerUp);\n context.stage.on('dblclick', this.handleDBLClick);\n application.global.addEventListener('keydown', this.handleKeyDown);\n\n this.editModule.onInput(this.handleInput);\n this.editModule.onChange(this.handleChange);\n this.editModule.onFocusOut(this.handleFocusOut);\n }\n\n copyToClipboard(e: KeyboardEvent): boolean {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'c') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'c')\n ) {\n const selection = this.getSelection();\n const text = selection.getSelectionPureText();\n application.global.copyToClipBoard(text);\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n /**\n * 选中某一个区间,startIdx和endIdx分别是开始结束的光标位置\n * 设置光标为endIdx,设置开始位置为startIdx\n * @param startIdx 开始位置\n * @param endIdx 结束位置\n * @returns\n */\n selectionRange(startIdx: number, endIdx: number) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n // 对startIdx和endIdx约束\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n startIdx = Math.min(Math.max(startIdx, -0.1), totalCursorCount + 0.1);\n endIdx = Math.min(Math.max(endIdx, -0.1), totalCursorCount + 0.1);\n\n this.selectionRangeByCursorIdx(startIdx, endIdx, cache);\n }\n\n selectionRangeByCursorIdx(startCursorIdx: number, endCursorIdx: number, cache: IRichTextFrame) {\n this.curCursorIdx = endCursorIdx;\n this.selectionStartCursorIdx = startCursorIdx;\n const { x, y1, y2 } = this.computedCursorPosByCursorIdx(this.selectionStartCursorIdx, this.currRt);\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this._tryShowSelection(pos, cache);\n }\n\n fullSelection(e: KeyboardEvent) {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'a') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'a')\n ) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n this.selectionRange(-0.1, totalCursorCount + 0.1);\n\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n directKey(e: KeyboardEvent) {\n if (!(e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n return false;\n }\n const cache = this.currRt.getFrameCache();\n if (!cache) {\n return false;\n }\n let x = 0;\n let y = 0;\n if (e.key === 'ArrowUp') {\n y = -1;\n } else if (e.key === 'ArrowDown') {\n y = 1;\n } else if (e.key === 'ArrowLeft') {\n x = -1;\n } else if (e.key === 'ArrowRight') {\n x = 1;\n }\n\n // const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const { lineInfo, columnInfo } = this.getColumnByIndex(cache, Math.round(this.curCursorIdx));\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (x) {\n // 快接近首尾需要特殊处理\n if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 2] &&\n this.curCursorIdx < Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 0.2;\n } else if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 1] &&\n this.curCursorIdx > Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 1 - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx > Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx < Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 1 + 0.2;\n } else {\n this.curCursorIdx += x;\n }\n if (this.curCursorIdx < -0.1) {\n this.curCursorIdx = -0.1;\n } else if (this.curCursorIdx > totalCursorCount + 0.1) {\n this.curCursorIdx = totalCursorCount + 0.1;\n }\n\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this.hideSelection();\n }\n\n if (y) {\n if (y > 0 && lineInfo === cache.lines[cache.lines.length - 1]) {\n return;\n }\n if (y < 0 && lineInfo === cache.lines[0]) {\n return;\n }\n const lineIdx = cache.lines.findIndex(item => item === lineInfo) + y;\n if (lineIdx < 0 || lineIdx >= cache.lines.length) {\n return;\n }\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const posX = pos.x;\n let posY = (pos.y1 + pos.y2) / 2;\n posY += y * lineInfo.height;\n const nextLineInfo = cache.lines[lineIdx];\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(nextLineInfo, { x: posX, y: posY });\n if (!columnInfo) {\n return;\n }\n let cursorIdx = this.getColumnIndex(cache, columnInfo) + delta;\n const data = this.computedCursorPosByCursorIdx(cursorIdx, this.currRt);\n\n if (cursorIdx < -0.1) {\n cursorIdx = -0.1;\n } else if (cursorIdx > totalCursorCount + 0.1) {\n cursorIdx = totalCursorCount + 0.1;\n }\n\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n this.setCursorAndTextArea(data.x, data.y1, data.y2, this.currRt);\n }\n\n return true;\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!(this.currRt && this.editing)) {\n return;\n }\n // 复制到剪贴板\n // cmd/ctl + C\n if (this.copyToClipboard(e)) {\n return;\n }\n // 全选\n // cmd/ctl + A\n if (this.fullSelection(e)) {\n return;\n }\n // 方向键\n // 上、下、左、右\n if (this.directKey(e)) {\n return;\n }\n };\n\n handleInput = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n // 如果文字被删除光了,那么展示一个shadowRoot\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,但并不同步到curIdx,因为这可能是临时的\n // const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n // console.log(this.curCursorIdx, cursorIdx);\n this.hideSelection();\n // this.setCursor(p.x, p.y1, p.y2);\n this.updateCbs.forEach(cb => cb('input', this));\n };\n\n handleChange = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,并同步到editModule\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n const p = this.computedCursorPosByCursorIdx(cursorIdx, rt);\n this.setCursorAndTextArea(p.x, p.y1, p.y2, rt);\n this.hideSelection();\n this.updateCbs.forEach(cb => cb('change', this));\n };\n\n tryShowShadowPlaceholder() {\n if (!this.currRt) {\n return;\n }\n // 删除富文本影子节点\n const shadowRoot = this.currRt.shadowRoot;\n if (shadowRoot) {\n const placeholder = shadowRoot.getElementsByType('richtext')[0];\n placeholder && shadowRoot.removeChild(placeholder);\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const {\n placeholder,\n placeholderColor = 'rgba(0, 0, 0, 0.6)',\n placeholderFontFamily,\n placeholderFontSize\n } = editOptions;\n const shadow = this.currRt.shadowRoot || this.currRt.attachShadow();\n this.shadowPlaceHolder = createRichText({\n ...this.currRt.attribute,\n x: 0,\n y: 0,\n angle: 0,\n _debug_bounds: false,\n textConfig: [\n { text: placeholder, fill: placeholderColor, fontFamily: placeholderFontFamily, fontSize: placeholderFontSize }\n ]\n });\n shadow.add(this.shadowPlaceHolder);\n }\n\n tryShowInputBounds() {\n if (!(this.currRt && this.focusing)) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n const { boundsStrokeWhenInput } = editOptions;\n\n if (!editOptions || !boundsStrokeWhenInput) {\n return;\n }\n const { attribute } = this.currRt;\n const b = this.currRt.AABBBounds;\n let h = b.height();\n if (!attribute.textConfig.length && this.editLine) {\n const { points } = this.editLine.attribute;\n h = points[1].y - points[0].y;\n }\n this.shadowBounds = this.shadowBounds || createRect({});\n this.shadowBounds.setAttributes({\n x: 0,\n y: 0,\n width: b.width(),\n height: h,\n fill: false,\n stroke: boundsStrokeWhenInput,\n lineWidth: 1,\n boundsMode: 'empty',\n zIndex: -1\n });\n const shadow = this.currRt.shadowRoot || this.currRt.attachShadow();\n shadow.add(this.shadowBounds);\n\n this.offsetLineBgAndShadowBounds();\n }\n\n trySyncPlaceholderToTextConfig() {\n if (!this.currRt) {\n return;\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const { placeholder } = editOptions;\n this.currRt.setAttributes({\n textConfig: [\n {\n text: placeholder,\n ...getDefaultCharacterConfig(this.currRt.attribute)\n }\n ]\n });\n }\n\n handleFocusIn = () => {\n throw new Error('不会走到这里 handleFocusIn');\n // this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n\n handleFocusOut = () => {\n throw new Error('不会走到这里 handleFocusOut');\n // console.log('abc')\n // this.editing = false;\n // this.deFocus();\n // this.pointerDown = false;\n // this.triggerRender();\n // this.updateCbs.forEach(cb => cb('defocus', this));\n };\n\n deactivate(context: IPluginService): void {\n // context.stage.off('pointerdown', this.handleClick);\n context.stage.off('pointermove', this.handleMove);\n context.stage.off('pointerdown', this.handlePointerDown);\n context.stage.off('pointerup', this.handlePointerUp);\n context.stage.off('pointerleave', this.handlePointerUp);\n context.stage.off('dblclick', this.handleDBLClick);\n\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleMove = (e: PointerEvent) => {\n if (!this.isRichtext(e)) {\n return;\n }\n this.currRt = e.target as IRichText;\n this.handleEnter(e);\n (e.target as any).once('pointerleave', this.handleLeave);\n\n this.tryShowSelection(e, false);\n };\n\n // 鼠标进入\n handleEnter = (e: PointerEvent) => {\n this.editing = true;\n this.pluginService.stage.setCursor('text');\n };\n\n // 鼠标离开\n handleLeave = (e: PointerEvent) => {\n this.editing = false;\n this.pluginService.stage.setCursor('default');\n };\n\n handlePointerDown = (e: PointerEvent) => {\n if (this.editing) {\n this.onFocus(e);\n } else {\n this.deFocus(true);\n }\n this.triggerRender();\n this.pointerDown = true;\n this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n handlePointerUp = (e: PointerEvent) => {\n this.pointerDown = false;\n };\n handleDBLClick = (e: PointerEvent) => {\n if (!this.editing) {\n return;\n }\n\n this.tryShowSelection(e, true);\n };\n\n onFocus(e: PointerEvent, data?: any) {\n this.deFocus(false);\n this.focusing = true;\n const target = e.target as IRichText;\n if (!(target && target.type === 'richtext')) {\n return;\n }\n this.currRt = target as IRichText;\n\n // 创建shadowGraphic\n\n RichTextEditPlugin.tryUpdateRichtext(target);\n const shadowRoot = target.shadowRoot || target.attachShadow();\n const cache = target.getFrameCache();\n if (!cache) {\n return;\n }\n // 计算全局偏移\n this.computeGlobalDelta(cache);\n\n // 添加cursor节点,shadowRoot在上面\n shadowRoot.setAttributes({ shadowRootIdx: 1, pickable: false, x: this.deltaX, y: this.deltaY });\n if (!this.editLine) {\n const line = createLine({ x: 0, y: 0, lineWidth: 1, stroke: 'black', boundsMode: 'empty' });\n // 不使用stage的Ticker,避免影响其他的动画以及受到其他动画影响\n this.addAnimateToLine(line);\n this.editLine = line;\n this.ticker.start(true);\n\n const g = createGroup({ x: 0, y: 0, width: 0, height: 0, boundsMode: 'empty' });\n this.editBg = g;\n shadowRoot.add(this.editLine);\n shadowRoot.add(this.editBg);\n }\n\n data = data || this.computedCursorPosByEvent(e, cache);\n\n if (data) {\n const { x, y1, y2, cursorIndex } = data;\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = cursorIndex;\n this.selectionStartCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1, y2, target);\n } else {\n const x = 0;\n const y1 = 0;\n const y2 = getRichTextBounds({ ...target.attribute, textConfig: [{ text: 'a' }] }).height();\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = -0.1;\n this.selectionStartCursorIdx = -0.1;\n this.setCursorAndTextArea(x, y1, y2, target);\n }\n\n // 聚焦的时候也判断,这样在最开始就能展示placeholder,否则需要等用户输入\n this.tryShowShadowPlaceholder();\n // 聚焦的时候也判断,这样在最开始就能展示bounds,否则需要等用户输入\n this.tryShowInputBounds();\n // 触发Bounds更新\n this.currRt.addUpdateBoundTag();\n }\n\n // 偏移线和背景,因为文字的baseline可能是middle或者bottom\n protected offsetLineBgAndShadowBounds() {\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n let attr = rt.attribute;\n let b: IAABBBounds;\n if (textBaseline === 'middle' || textBaseline === 'bottom') {\n if (!attr.textConfig.length) {\n attr = { ...attr, textConfig: [{ text: 'a' }] };\n }\n b = getRichTextBounds(attr);\n }\n if (textBaseline === 'middle') {\n dy = -b.height() / 2;\n } else if (textBaseline === 'bottom') {\n dy = -b.height();\n }\n this.editLine && this.editLine.setAttributes({ dy });\n this.editBg && this.editBg.setAttributes({ dy });\n if (this.shadowBounds) {\n this.shadowBounds.setAttributes({ dy });\n }\n }\n\n protected deFocus(trulyDeFocus = false) {\n const target = this.currRt as IRichText;\n if (!target) {\n return;\n }\n if (trulyDeFocus) {\n this.trySyncPlaceholderToTextConfig();\n target.detachShadow();\n }\n const currRt = this.currRt;\n this.currRt = null;\n if (this.editLine) {\n this.editLine.parent && this.editLine.parent.removeChild(this.editLine);\n this.editLine.release();\n this.editLine = null;\n\n this.editBg.parent && this.editBg.parent.removeChild(this.editBg);\n this.editBg.release();\n this.editBg = null;\n }\n\n if (trulyDeFocus) {\n if (this.shadowBounds) {\n this.shadowBounds.parent && this.shadowBounds.parent.removeChild(this.shadowBounds);\n this.shadowBounds.release();\n this.shadowBounds = null;\n }\n if (this.shadowPlaceHolder) {\n this.shadowPlaceHolder.parent && this.shadowPlaceHolder.parent.removeChild(this.shadowPlaceHolder);\n this.shadowPlaceHolder.release();\n this.shadowPlaceHolder = null;\n }\n }\n this.focusing = false;\n\n // 清理textConfig,不让最后有换行符\n const textConfig = currRt.attribute.textConfig;\n let lastConfig = textConfig[textConfig.length - 1];\n let cleared = false;\n while (lastConfig && (lastConfig as any).text === '\\n') {\n textConfig.pop();\n lastConfig = textConfig[textConfig.length - 1];\n cleared = true;\n }\n cleared && currRt.setAttributes({ textConfig });\n }\n\n protected addAnimateToLine(line: ILine) {\n line.animates &&\n line.animates.forEach(animate => {\n animate.stop();\n animate.release();\n });\n const animate = line.animate({\n timeline: this.timeline\n });\n animate.to({ opacity: 1 }, 10, 'linear').wait(700).to({ opacity: 0 }, 10, 'linear').wait(700).loop(Infinity);\n }\n\n // 显示selection\n tryShowSelection(e: PointerEvent, dblclick: boolean) {\n const cache = (e.target as IRichText).getFrameCache();\n if (!(cache && this.editBg && this.startCursorPos)) {\n return;\n }\n\n if (!dblclick) {\n if (this.pointerDown) {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n this.curCursorIdx = currCursorData.cursorIndex;\n this._tryShowSelection(currCursorData, cache);\n }\n } else {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n // const curCursorIdx = currCursorData.cursorIndex;\n const lineInfo = currCursorData.lineInfo;\n const columnIndex = lineInfo.paragraphs.findIndex(item => item === currCursorData.columnInfo);\n if (columnIndex < 0) {\n return;\n }\n const str = lineInfo.paragraphs.reduce((str, item) => {\n return str + item.text;\n }, '');\n\n let idx = 0;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n if (line === lineInfo) {\n break;\n }\n idx += line.paragraphs.length;\n }\n\n const { startIdx, endIdx } = getWordStartEndIdx(str, columnIndex);\n\n this.selectionRange(idx + startIdx - 0.1, idx + endIdx - 0.1);\n }\n }\n\n _tryShowSelection(\n currCursorData: {\n x: any;\n y1: number;\n y2: number;\n },\n cache: IRichTextFrame\n ) {\n let startCursorPos = this.startCursorPos;\n let endCursorPos = {\n x: currCursorData.x,\n y: (currCursorData.y1 + currCursorData.y2) / 2\n };\n let line0Info = this.getLineByPoint(cache, startCursorPos);\n let line1Info = this.getLineByPoint(cache, endCursorPos);\n\n if (\n startCursorPos.y > endCursorPos.y ||\n (startCursorPos.y === endCursorPos.y && startCursorPos.x > endCursorPos.x)\n ) {\n [startCursorPos, endCursorPos] = [endCursorPos, startCursorPos];\n [line1Info, line0Info] = [line0Info, line1Info];\n }\n\n this.hideSelection();\n if (line0Info === line1Info) {\n // 同行\n this.editBg.setAttributes({\n x: startCursorPos.x,\n y: line0Info.top,\n width: endCursorPos.x - startCursorPos.x,\n height: line0Info.height,\n fill: '#336df4',\n fillOpacity: 0.2\n });\n } else {\n this.editBg.setAttributes({ x: 0, y: line0Info.top, width: 0, height: 0 });\n const startIdx = cache.lines.findIndex(item => item === line0Info);\n const endIdx = cache.lines.findIndex(item => item === line1Info);\n let y = 0;\n for (let i = startIdx; i <= endIdx; i++) {\n const line = cache.lines[i];\n if (i === startIdx) {\n const p = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: startCursorPos.x,\n y,\n width: p.left + p.width - startCursorPos.x,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else if (i === endIdx) {\n const p = line.paragraphs[0];\n this.editBg.add(\n createRect({\n x: p.left,\n y,\n width: endCursorPos.x - p.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else {\n const p0 = line.paragraphs[0];\n const p1 = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.left,\n y,\n width: p1.left + p1.width - p0.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n }\n y += line.height;\n }\n }\n\n this.setCursorAndTextArea(currCursorData.x, currCursorData.y1, currCursorData.y2, this.currRt as IRichText);\n\n this.triggerRender();\n this.updateCbs.forEach(cb => cb('selection', this));\n }\n\n hideSelection() {\n if (this.editBg) {\n this.editBg.removeAllChild();\n this.editBg.setAttributes({ fill: 'transparent' });\n }\n }\n\n protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine {\n let lineInfo = cache.lines[0];\n for (let i = 0; i < cache.lines.length; i++) {\n if (lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y) {\n break;\n }\n lineInfo = cache.lines[i + 1];\n }\n\n return lineInfo;\n }\n protected getColumnAndIndexByLinePoint(\n lineInfo: IRichTextLine,\n p1: IPointLike\n ): {\n columnInfo: IRichTextParagraph | IRichTextIcon;\n delta: number;\n } {\n let columnInfo = lineInfo.paragraphs[0];\n let delta = 0;\n if (lineInfo.paragraphs.length) {\n const start = lineInfo.paragraphs[0];\n const end = lineInfo.paragraphs[lineInfo.paragraphs.length - 1];\n if (p1.x <= start.left) {\n delta = -0.1;\n columnInfo = start;\n } else if (p1.x >= end.left + end.width) {\n delta = 0.1;\n columnInfo = end;\n }\n }\n\n if (!delta) {\n for (let i = 0; i < lineInfo.paragraphs.length; i++) {\n columnInfo = lineInfo.paragraphs[i];\n if (columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x) {\n if (p1.x > columnInfo.left + columnInfo.width / 2) {\n delta = 0.1;\n } else {\n delta = -0.1;\n }\n break;\n }\n }\n }\n\n return {\n columnInfo,\n delta\n };\n }\n /* 工具函数 */\n /**\n * 根据给定的ParagraphInfo得到对应的index\n * @param cache 富文本缓存\n * @param cInfo ParagraphInfo\n * @returns\n */\n protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon) {\n // TODO 【注意】认为cache都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n for (let j = 0; j < line.paragraphs.length; j++) {\n inputIndex++;\n if (cInfo === line.paragraphs[j]) {\n return inputIndex;\n }\n }\n }\n return -1;\n }\n\n protected isRichtext(e: PointerEvent) {\n return !!(e.target && (e.target as any).type === 'richtext' && (e.target as any).attribute.editable);\n }\n\n // 如果没有开自动渲染,得触发重绘\n protected triggerRender() {\n this.pluginService.stage.renderNextFrame();\n }\n\n protected computeGlobalDelta(cache: IRichTextFrame) {\n this.deltaX = 0;\n this.deltaY = 0;\n const height = cache.height;\n const actualHeight = cache.actualHeight;\n const width = cache.lines.reduce((w, item) => Math.max(w, item.actualWidth), 0);\n if (cache.globalAlign === 'center') {\n this.deltaX = -width / 2;\n } else if (cache.globalAlign === 'right') {\n this.deltaX = -width;\n }\n if (cache.verticalDirection === 'middle') {\n this.deltaY = height / 2 - actualHeight / 2;\n } else if (cache.verticalDirection === 'bottom') {\n this.deltaY = height - actualHeight;\n }\n }\n\n protected getEventPosition(e: PointerEvent): IPointLike {\n const p = this.pluginService.stage.eventPointTransform(e);\n\n const p1 = { x: 0, y: 0 };\n (e.target as IRichText).globalTransMatrix.transformPoint(p, p1);\n p1.x -= this.deltaX;\n p1.y -= this.deltaY;\n\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n if (textBaseline === 'middle') {\n const b = getRichTextBounds(rt.attribute);\n dy = b.height() / 2;\n } else if (textBaseline === 'bottom') {\n const b = getRichTextBounds(rt.attribute);\n dy = b.height();\n }\n p1.y += dy;\n return p1;\n }\n\n protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n this.addAnimateToLine(this.editLine);\n const out = { x: 0, y: 0 };\n rt.globalTransMatrix.getInverse().transformPoint({ x, y: y1 }, out);\n // TODO 考虑stage变换\n const { left, top } = this.pluginService.stage.window.getBoundingClientRect();\n out.x += left;\n out.y += top;\n\n this.offsetLineBgAndShadowBounds();\n\n this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);\n }\n\n /**\n * 根据Event算出光标位置等信息\n * @param e Event\n * @param cache 富文本缓存\n * @returns\n */\n protected computedCursorPosByEvent(e: PointerEvent, cache: IRichTextFrame) {\n const p1 = this.getEventPosition(e);\n const lineInfo = this.getLineByPoint(cache, p1);\n if (!lineInfo) {\n return;\n }\n\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(lineInfo, p1);\n if (!columnInfo) {\n return;\n }\n\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n\n let cursorIndex = this.getColumnIndex(cache, columnInfo);\n cursorIndex += delta;\n const x = columnInfo.left + (delta > 0 ? columnInfo.width : 0);\n\n return {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n };\n }\n\n /**\n * 根据cursorIdx计算出点的位置\n * @param cursorIdx index\n * @param rt 富文本\n * @returns\n */\n protected computedCursorPosByCursorIdx(cursorIdx: number, rt: IRichText) {\n const idx = Math.round(cursorIdx);\n const leftRight = cursorIdx - idx; // >0 向右,<0 向左\n const cache = rt.getFrameCache();\n const column = this.getColumnByIndex(cache, idx);\n const height = rt.attribute.fontSize ?? (rt.attribute.textConfig?.[0] as any)?.fontSize;\n if (!column) {\n // 检查是不是空文本\n if (!cache.lines.length) {\n const b = getRichTextBounds({ ...rt.attribute, textConfig: [{ text: 'a' }] });\n return {\n x: 0,\n y1: 0,\n y2: b.height()\n };\n }\n return {\n x: 0,\n y1: 0,\n y2: height\n };\n }\n const { lineInfo, columnInfo } = column;\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n const x = columnInfo.left + (leftRight < 0 ? 0 : columnInfo.width);\n\n return { x, y1, y2, lineInfo, columnInfo };\n }\n\n /**\n * 根据index获取columnInfo\n * @param cache 缓存\n * @param index index\n * @returns\n */\n protected getColumnByIndex(\n cache: IRichTextFrame,\n index: number\n ): {\n lineInfo: IRichTextLine;\n columnInfo: IRichTextParagraph | IRichTextIcon;\n } | null {\n // TODO 认为都是单个字符拆分的\n for (let i = 0, inputIndex = 0; i < cache.lines.length; i++) {\n const lineInfo = cache.lines[i];\n for (let j = 0; j < lineInfo.paragraphs.length; j++) {\n const columnInfo = lineInfo.paragraphs[j];\n if (inputIndex === index) {\n return {\n lineInfo,\n columnInfo\n };\n }\n inputIndex++;\n }\n }\n return null;\n }\n\n release() {\n this.deactivate(this.pluginService);\n this.editModule.release();\n }\n\n /**\n * 获取当前选择的区间范围\n * @param defaultAll 如果force为true,又没有选择,则认为选择了所有然后进行匹配,如果为false,则认为什么都没有选择,返回null\n * @returns\n */\n getSelection(defaultAll: boolean = false) {\n if (!this.currRt) {\n return null;\n }\n if (\n this.selectionStartCursorIdx != null &&\n this.curCursorIdx != null\n // this.selectionStartCursorIdx !== this.curCursorIdx &&\n ) {\n return new Selection(this.selectionStartCursorIdx, this.curCursorIdx, this.currRt);\n } else if (defaultAll) {\n return RichTextEditPlugin.CreateSelection(this.currRt);\n }\n return null;\n }\n\n forceFocus(params: { e?: PointerEvent; target: IRichText | null; cursorIndex?: number }) {\n const { target, e, cursorIndex } = params;\n if (!target) {\n return;\n }\n this.currRt = target;\n if (e) {\n this._forceFocusByEvent(e);\n } else {\n this._forceFocusByCursorIndex(cursorIndex ?? -0.1);\n }\n }\n\n protected _forceFocusByEvent(e: PointerEvent) {\n this.handleEnter(e);\n this.handlePointerDown(e);\n this.handlePointerUp(e);\n }\n\n protected _forceFocusByCursorIndex(cursorIndex: number) {\n const richtext = this.currRt;\n if (!richtext) {\n return;\n }\n\n let x = 0;\n let y1 = 0;\n let y2 = 2;\n let lineInfo = null;\n let columnInfo = null;\n const data = this.computedCursorPosByCursorIdx(cursorIndex, richtext);\n x = data.x;\n y1 = data.y1;\n y2 = data.y2;\n lineInfo = data.lineInfo;\n columnInfo = data.columnInfo;\n\n this.onFocus({ target: this.currRt } as any, {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n });\n }\n}\n","import isType from './isType';\n\nconst isRegExp = (value: any): value is RegExp => {\n return isType(value, 'RegExp');\n};\n\nexport default isRegExp;\n","import isArray from './isArray';\nimport isDate from './isDate';\nimport isRegExp from './isRegExp';\n\nfunction getRegExpFlags(re: any) {\n let flags = '';\n re.global && (flags += 'g');\n re.ignoreCase && (flags += 'i');\n re.multiline && (flags += 'm');\n return flags;\n}\n\n// Adapted from https://github.com/pvorb/clone by Paul Vorbach\n// License: https://github.com/pvorb/clone/blob/master/LICENSE\nexport default function clone(parent: any, circular = false, depth = 0, prototype: any = undefined) {\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n const allParents: Array = [];\n const allChildren: Array = [];\n\n if (typeof circular === 'undefined') {\n circular = true;\n }\n\n if (typeof depth === 'undefined') {\n depth = Infinity;\n }\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent: any, depth: number) {\n // cloning null always returns null\n if (parent === null) {\n return null;\n }\n\n if (depth === 0) {\n return parent;\n }\n\n let child;\n if (typeof parent !== 'object') {\n return parent;\n }\n\n if (isArray(parent)) {\n child = [];\n } else if (isRegExp(parent)) {\n child = new RegExp(parent.source, getRegExpFlags(parent));\n if (parent.lastIndex) {\n child.lastIndex = parent.lastIndex;\n }\n } else if (isDate(parent)) {\n child = new Date(parent.getTime());\n } else {\n if (typeof prototype === 'undefined') {\n child = Object.create(Object.getPrototypeOf(parent));\n } else {\n child = Object.create(prototype);\n }\n }\n\n if (circular) {\n const index = allParents.indexOf(parent);\n\n if (index !== -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n for (const i in parent) {\n child[i] = _clone(parent[i], depth - 1);\n }\n\n return child;\n }\n return _clone(parent, depth);\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n () => selector(api.getState()),\n () => selector(api.getInitialState())\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create, useStore };\n","import { StateCreator } from 'zustand';\nimport { SchemaSlice, StoreState } from './types';\n\nexport const createSchemaSlice: StateCreator<\n StoreState,\n [],\n [],\n SchemaSlice\n> = (set) => ({\n schema: {\n structures: [],\n actions: [],\n },\n setSchema: (schema) => set({ schema }),\n});\n","import { StateCreator } from 'zustand';\nimport { CodeSlice, StoreState } from './types';\n\nexport const createCodeSlice: StateCreator = (\n set,\n) => ({\n code: '',\n setCode: (code) => set({ code }),\n});\n","import { create } from 'zustand';\nimport { StoreState } from './types';\nimport { createSchemaSlice } from './createSchema';\nimport { createCodeSlice } from './createCode';\n\nconst useDsv = create()((...a) => {\n return {\n ...createSchemaSlice(...a),\n ...createCodeSlice(...a),\n };\n});\n\nexport { useDsv };\n","import * as VStory from '@visactor/vstory';\nimport { useEffect, useState } from 'react';\nimport { useRef } from 'react';\nimport { FC } from 'react';\nimport { ArrayBar } from 'data-structure';\nimport { Schema } from 'schema';\nimport { useDsv } from './model';\nVStory.registerAll();\n\nexport const Chart: FC = () => {\n const schema = useDsv((state) => state.schema);\n\n const ref = useRef(null);\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n if (schema.actions.length === 0 || schema.structures.length === 0) {\n return;\n }\n const arrayBar = new ArrayBar([...schema.structures[0].array], {\n id: schema.structures[0].id,\n interval: 1000,\n structure: {},\n });\n schema.actions.forEach((action) => {\n if (action.structureId === arrayBar.id) {\n if (action.type === 'set') {\n arrayBar.set(action.args[0], action.args[1]);\n }\n if (action.type === 'swap') {\n arrayBar.swap(action.args[0], action.args[1]);\n }\n if (action.type === 'appear') {\n arrayBar.appear();\n }\n if (action.type === 'reverse') {\n arrayBar.reverse();\n }\n }\n });\n\n // 生成一个DSL,该DSL只包含一个VChart元素\n const dsl = {\n characters: [arrayBar.structure],\n // 图表的具体动画编排\n acts: [\n // 幕数组,一个故事可以包含多个幕,幕与幕之间是有先后顺序的串联结构\n {\n id: 'default-chapter',\n scenes: [\n {\n id: 'scene',\n actions: arrayBar.actions,\n },\n ],\n },\n ],\n };\n\n console.log('debug dsl', dsl);\n\n const story = new VStory.Story(dsl, {\n dom: ref.current,\n background: 'pink',\n });\n const player = new VStory.Player(story);\n story.init(player);\n\n player.play(0);\n\n return () => {\n story?.release();\n };\n }, [schema]);\n\n return (\n <>\n
\n \n );\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { run } from 'parser';\nimport { useDsv } from '../model';\n\nexport const CodeEditor = () => {\n const setSchema = useDsv((state) => state.setSchema);\n\n const [code, setCode] = useState(`Array.prototype.swap = function(i, j){\n const temp = this[i]\n this[i] = this[j]\n this[j] = temp\n}\n\nconst bubbleSort = (arr) => {\n for (let i = 0; i < arr.length; i++) {\n for (let j = 0; j < arr.length - i - 1; j++) {\n if (arr[j] > arr[j + 1]) {\n arr.swap(j, j+1)\n }\n }\n }\n console.log(\"res\", arr)\n return arr;\n}\n\nconst arr1 = [5, 3, 8, 4, 2, 1, 2, 4];\n\nbubbleSort(arr1)\n`);\n\n const handleExec = useCallback(() => {\n const result = run(code);\n setSchema(result.schema);\n }, [code]);\n\n return (\n <>\n setCode(e.target.value)}\n />\n \n \n );\n};\n","import { Chart } from './Chart';\nimport { StructureType } from 'schema';\nimport { CodeEditor } from './CodeEditor/CodeEditor';\n\nfunction App() {\n return (\n \n \n \n \n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App.tsx';\n\nReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(\n \n \n ,\n);\n"],"names":["SOURCELESS_MAPPING","SegmentObject","EMPTY_SOURCES","source","line","column","name","content","ignore","Source","map","sources","MapSource","OriginalSource","traceMappings","tree","gen","GenMapping","rootSources","rootNames","rootMappings","decodedMappings","i","segments","j","segment","genCol","traced","originalPositionFor","maybeAddSegment","setSourceContent","setIgnore","traceSegment","asArray","value","Array","buildSourceMapTree","input","loader","maps","m","TraceMap","Error","build","importer","importerDepth","resolvedSources","sourcesContent","ignoreList","depth","sourceFile","ctx","undefined","sourceMap","SourceMap","JSON","options","out","toDecodedMap","toEncodedMap","opts","COLUMN","SOURCES_INDEX","SOURCE_LINE","SOURCE_COLUMN","NAMES_INDEX","NO_NAME","file","sourceRoot","SetArray","cast","addSegment","genLine","genColumn","sourceLine","sourceColumn","addSegmentInternal","addMapping","mapping","addMappingInternal","maybeAddMapping","put","index","remove","mappings","names","removeEmptyFinalLines","decoded","encode","fromMap","putAll","allMappings","original","seg","generated","skipable","getLine","getColumnIndex","skipSourceless","insert","sourcesIndex","namesIndex","skipSource","current","array","length","len","setarr","prev","schemeRegex","urlRegex","fileRegex","isAbsoluteUrl","isSchemeRelativeUrl","isAbsolutePath","isFileUrl","isRelative","parseAbsoluteUrl","match","makeUrl","parseFileUrl","path","scheme","user","host","port","query","hash","parseUrl","url","stripPathFilename","mergePaths","base","normalizePath","type","rel","pieces","pointer","positive","addTrailingSlash","piece","inputType","baseUrl","baseType","queryHash","set","get","key","indexes","pop","k","comma","semicolon","chars","intToChar","Uint8Array","charToInt","c","decodeInteger","reader","relative","shift","integer","shouldNegate","encodeInteger","builder","num","delta","clamped","hasMoreVlq","max","bufLength","td","TextDecoder","Buffer","buf","String","StringWriter","v","buffer","pos","StringReader","char","idx","EMPTY","decodeOriginalScopes","scopes","stack","last","kind","scope","hasName","fields","vars","varsIndex","encodeOriginalScopes","writer","_encodeOriginalScopes","state","startLine","startColumn","endLine","endColumn","l","decodeGeneratedRanges","ranges","definitionSourcesIndex","definitionScopeIndex","callsiteSourcesIndex","callsiteLine","callsiteColumn","bindingLine","bindingColumn","semi","range","hasDefinition","hasCallsite","hasScope","callsite","bindings","defSourcesIndex","prevLine","sameSource","prevCsi","expressionRanges","expressionsCount","prevBl","expression","encodeGeneratedRanges","_encodeGeneratedRanges","isScope","catchupLine","scopesIndex","callLine","callColumn","binding","bindingStartLine","bindingStartColumn","expRange","lastLine","decode","sorted","lastCol","sort","sortComparator","a","b","resolve","resolveUri","stripFilename","maybeSort","owned","unsortedIndex","nextUnsortedSegmentLine","sortSegments","start","isSorted","found","binarySearch","haystack","needle","low","high","mid","cmp","upperBound","lowerBound","memoizedState","memoizedBinarySearch","lastKey","lastNeedle","lastIndex","buildBySources","memos","buildNullArray","sourceIndex","originalSource","originalLine","memo","AnyMap","mapUrl","parsed","parse","recurse","Infinity","presortedDecodedMap","lineOffset","columnOffset","stopLine","stopColumn","sections","offset","sl","sc","nextOffset","Math","addSection","arguments","sourcesOffset","namesOffset","contents","ignores","append","lineI","cOffset","arr","other","LINE_GTR_ZERO","COL_GTR_EQ_ZERO","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","isString","version","from","s","encodedMappings","traceSegmentInternal","bias","OMapping","generatedPositionFor","generatedPosition","allGeneratedPositionsFor","eachMapping","cb","generatedLine","generatedColumn","originalColumn","sourceContentFor","isIgnored","tracer","clone","decodedMap","encodedMap","GMapping","bsFound","sliceGeneratedPositions","min","matchedColumn","result","REV_GENERATED_LINE","REV_GENERATED_COLUMN","all","isDeepEqual","isDeepStrictEqual","_typeof","o","Symbol","_defineProperties","target","props","descriptor","Object","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","arg","_toPrimitive","hint","prim","res","TypeError","Number","_classCallCheck","instance","_require$codes","_require","require","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","inspect","_require2","_require$types","isPromise","isRegExp","objectAssign","objectIs","RegExpPrototypeTest","lazyLoadComparison","comparison","warned","assert","module","ok","NO_EXCEPTION_SENTINEL","innerFail","obj","fail","actual","expected","message","operator","stackStartFn","internalMessage","argsLen","warn","process","console","errArgs","err","innerOk","fn","argLen","generatedMessage","_len","args","_key","notDeepStrictEqual","equal","notEqual","deepEqual","notDeepEqual","deepStrictEqual","strictEqual","notStrictEqual","Comparison","keys","_this","compareExceptionKey","expectedException","msg","getActual","e","checkIsPromise","waitForActual","promiseFn","Promise","resultPromise","expectsError","error","details","fnType","expectsNoError","internalMatch","string","regexp","fnName","strict","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","doesNotMatch","ownKeys","r","t","_objectSpread","_defineProperty","_inherits","subClass","superClass","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","Reflect","_possibleConstructorReturn","self","call","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","_cache","Map","_isNativeFunction","Wrapper","_construct","Parent","Function","Proxy","Boolean","p","endsWith","str","search","this_len","repeat","count","maxCount","blue","green","red","white","kReadableOperator","kMaxShortLength","copyError","inspectValue","val","createErrDiff","lastPos","end","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","maxLines","_actualLines","printedLines","skippedMsg","cur","expectedLine","actualLine","divergingLines","_Error","_inspect$custom","_super","limit","_res","knownOperators","recurseTimes","util","codes","createErrorType","code","Base","getMessage","arg1","arg2","arg3","NodeError","_Base","oneOf","thing","startsWith","includes","determiner","reason","inspected","RangeError","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","n","arr2","u","f","regexFlagsSupported","arrayFromSet","arrayFromMap","objectGetOwnPropertySymbols","numberIsNaN","uncurryThis","hasOwnProperty","propertyIsEnumerable","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isSet","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","compare","x","y","ONLY_ENUMERABLE","kStrict","kLoose","kNoIterator","kIsArray","kIsSet","kIsMap","areSimilarRegExps","RegExp","areSimilarFloatArrays","areSimilarTypedArrays","areEqualArrayBuffers","buf1","buf2","isEqualBoxedPrimitive","val1","val2","BigInt","innerDeepEqual","val1Tag","keys1","keys2","keyCheck","Date","_keys","_keys2","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","objEquiv","setHasEqualElement","setValues","findLooseMatchingPrimitives","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","item","curB","setEquiv","aValues","Set","bValues","_i","_val","mapHasEqualEntry","key1","item1","key2","mapEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","keysA","exports","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","output","extraBytes","parts","maxChunkLength","len2","BrowserslistError","noop","context","jsReleases","agents","e2c","jsEOL","env","parseWithoutCache","YEAR","ANDROID_EVERGREEN_FIRST","OP_MOB_BLINK_FIRST","isVersionsMatch","versionA","versionB","isEolReleased","browserslist","normalize","versions","normalizeElectron","versionToUse","nameMapper","getMajor","parseInt","getMajorVersions","released","number","majorVersions","uniq","minimum","selected","filtered","fillUsage","data","generateFilter","sign","parseFloat","parseLatestFloat","generateSemverFilter","parseSimpleInt","compareSemver","semverFilterLoose","compareSemverLoose","resolveVersion","normalizeVersion","resolved","filterByYear","since","byName","date","cloneData","desktop","normalizeAndroidData","cloned","normalizeAndroidVersions","androidVersions","chromeVersions","iFirstEvergreen","copyObject","copy","android","chrome","checkName","unknownQuery","filterJumps","list","nVersions","jump","isSupported","flags","withPartial","queries","parseQueries","node","QUERIES","filter","prepareOpts","prepareQueries","config","checkQueries","cache","parseCache","needsPath","stats","browser","cacheKey","name1","name2","version1","version2","nodeQuery","matched","sinceQuery","coverQuery","place","coverage","usage","coveraged","browsers","customStats","validVersions","popularity","percentage","features","iMax","checkDesktop","fromToUse","toToUse","to","alias","now","full","interval","release","AND_REGEXP","OR_REGEXP","flatten","find","predicate","matchQuery","matchBlock","qs","block","base64","ieee754","customInspectSymbol","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","encodingOrOffset","allocUnsafe","fromString","ArrayBuffer","fromArrayView","isInstance","SharedArrayBuffer","fromArrayBuffer","valueOf","fromObject","assertSize","size","alloc","fill","encoding","checked","fromArrayLike","arrayView","byteOffset","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","thisStart","thisEnd","thisCopy","targetCopy","isFinite","MAX_ARGUMENTS_LENGTH","codePoints","ret","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","lo","hi","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","mul","defineBigIntMethod","validateNumber","first","boundsError","maxBytes","sub","targetStart","errors","E","sym","addNumericalSeparator","checkBounds","received","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","BufferBigIntNotDefined","bind","$apply","$call","$reflectApply","actualApply","$TypeError","$actualApply","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","setFunctionLength","$defineProperty","callBindBasic","applyBind","originalFunction","func","adjustedLength","agentsData","unpackBrowserVersions","versionsData","entry","map2","decodeBase64","decodeBase64WithBufferFrom","decodeBase64WithNewBuffer","decodeBase64WithAtob","decodeURIComponent","escape","atob","stripComment","sm","readFromFileMap","filename","throwError","Converter","encodeBase64WithBufferFrom","json","encodeBase64WithNewBuffer","encodeBase64WithBtoa","btoa","unescape","encodeURIComponent","makeConverter","space","value1","uri","comment","fontRegex","unitMatch","numeric","parent","dpi","matches","op","generics","existing","collected","existingVal","family","useColors","window","navigator","document","formatArgs","lastC","save","namespaces","load","localstorage","localStorage","formatters","setup","selectColor","namespace","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","debug","curr","ms","format","formatter","logFn","extend","delimiter","newDebug","enable","ns","matchesTemplate","template","searchIndex","templateIndex","starIndex","matchIndex","disable","enabled","skip","coerce","destroy","$SyntaxError","gopd","property","nonEnumerable","nonWritable","nonConfigurable","loose","desc","hasSymbols","toStr","concat","defineDataProperty","isFunction","supportsDescriptors","defineProperty","object","defineProperties","predicates","hasProtoAccessor","gOPD","$Object","$getPrototypeOf","EvalError","SyntaxError","URIError","has","prefix","Events","EE","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","events","handlers","ee","listeners","a1","a2","a3","a4","a5","isCallable","forEachArray","iterator","receiver","forEachString","forEachObject","forEach","thisArg","ERROR_MESSAGE","funcType","concatty","slicy","arrLike","joiny","joiner","that","bound","binder","boundLength","boundArgs","Empty","implementation","GENSYNC_START","GENSYNC_SUSPEND","GENSYNC_EXPECTED_START","GENSYNC_EXPECTED_SUSPEND","GENSYNC_OPTIONS_ERROR","GENSYNC_RACE_NONEMPTY","GENSYNC_ERRBACK_NO_CALLBACK","makeFunctionAPI","genFn","evaluateSync","reject","evaluateAsync","makeError","assertTypeof","allowUndefined","newGenerator","param","arity","sync","async","errback","buildOperation","wrapGenerator","setFunctionMetadata","resume","assertStart","step","didSyncResume","assertSuspend","done","nameDesc","lengthDesc","optsOrFn","items","results","$Error","$EvalError","$RangeError","$ReferenceError","$URIError","abs","floor","pow","round","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","$ObjectGPO","$ReflectGPO","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","BigInt64Array","BigUint64Array","DataView","decodeURI","encodeURI","eval","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isNaN","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","quote","subString","getBaseIntrinsic","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","reflectGetProto","originalGetProto","getDunderProto","O","deinterlace","pixels","width","newPixels","rows","cpRow","toRow","fromRow","fromPixels","offsets","steps","pass","_gif","_interopRequireDefault","_jsBinarySchemaParser","_uint","_deinterlace","_lzw","parseGIF","arrayBuffer","byteData","generatePatch","image","totalPixels","patchData","colorIndex","color","decompressFrame","frame","gct","buildImagePatch","resultImage","decompressFrames","parsedGif","buildImagePatches","lzw","minCodeSize","pixelCount","available","clear","code_mask","code_size","end_of_information","in_code","old_code","data_size","datum","bits","top","pi","bi","MAX_STACK_SIZE","nullCode","npix","dstPixels","suffix","pixelStack","hasPropertyDescriptors","origSymbol","hasSymbolSham","symObj","symVal","_","syms","$hasOwn","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","NaN","rt","ctor","superCtor","TempCtor","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","objectClass","fnClass","genClass","ddaClass","ddaClass2","ddaClass3","isIE68","isDDA","strClass","GeneratorFunction","isFnRegex","safeRegexTest","getGeneratorFunc","generatorFunc","define","getPolyfill","shim","polyfill","isRegexMarker","throwRegexMarker","badStringifier","regexClass","whichTypedArray","stream","schema","partSchema","conditional","conditionFunc","loop","continueFunc","lastStreamPos","newParent","buildStream","uint8Data","readByte","peekByte","readBytes","peekBytes","readString","readUnsigned","readArray","byteSize","totalOrFunc","total","parser","subBitsTotal","startIndex","readBits","_byte","def","subBlocksSchema","terminator","chunks","streamSize","availableSize","gceSchema","imageSchema","textSchema","applicationSchema","commentSchema","_default","nextCode","token","forOwn","callback","destination","fourHexEscape","hex","hexadecimal","lowercase","toString","isArray","isBuffer","isObject","isNumber","isBigInt","singleEscapes","regexSingleEscape","regexDigit","regexWhitespace","escapeEverythingRegex","escapeNonAsciiRegex","jsesc","argument","increaseIndentation","oldIndent","indent","defaults","compact","lowercaseHex","inline1","inline2","newLine","isEmpty","useBinNumbers","useOctNumbers","useDecNumbers","useHexNumbers","regex","pair","lone","quoteChar","second","global","factory","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sourcePrototype","attr","getDescriptor","prop","createProxyFunction","prototype","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audio","rateValue","assetPath","createTypedArray","createRegularArray","createTypedArrayFactory","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","_shouldRoundValues","bmPow","bmSqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","tOfVal","absArr","defaultCurveSegments","degToRads","roundCorner","roundValues","bmRnd","styleDiv","element","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","g","q","RGBtoHSV","addSaturationToRGB","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","_workerSelf","createWorker","blob","Blob","Worker","URL","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","jLen","kLen","maskProps","convertPathsToAbsoluteValues","findCompLayers","completeShapes","completeText","completeChars","assets","findComp","id","comp","checkVersion","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","checkPathProperties","pathData","checkColors","iterateShapes","shapes","checkShapes","completeClosingShapes","completeData","moduleOb","formatResponse","xhr","contentTypeHeader","fullPath","errorCallback","response","XMLHttpRequest","animation","createProcess","onComplete","onError","processId","anim","ImagePreloader","proxyImage","canvas","imageLoaded","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","setInterval","box","clearInterval","createImageData","ob","createImgData","createFootageData","footageData","loadAssets","setPath","setAssetsPath","getAsset","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","eventName","callbacks","markerParser","parsePayloadLines","payload","lines","keysCount","_markers","markers","_marker","markerData","__","ProjectInterface","registerComposition","_thisProjectFunction","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","params","animType","RendererClass","wrapper","wrapperAttributes","autoplay","newLayers","segmentPath","animData","setTimeout","height","_width","_height","markerName","marker","isFrame","numValue","nextValue","_isComplete","init","pendingFrame","forceFlag","isLooping","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","setupAnimation","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","loadAnimation","setSpeed","setDirection","play","nowTime","elapsedTime","pause","goToAndStop","stop","togglePause","searchAnimations","standalone","renderer","animElements","body","div","resize","freeze","unfreeze","setVolume","mute","unmute","BezierFactory","getBezierEasing","beziers","nm","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","mY1","mY2","mSampleValues","intervalStart","currentSample","lastSample","guessForT","dist","initialSlope","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","bezierLengthPool","segmentsLengthPool","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","closed","pathV","pathO","pathI","lengths","totalLength","BezierData","PointData","partial","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","percents","initPos","lengthPos","lPerc","getPointInSegment","percent","t1","u1","bezierSegmentPoints","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","outX","outY","inX","inY","keyValue","offsetTime","newValue","iterationIndex","keyData","nextKeyData","keyframeMetadata","nextKeyTime","keyTime","ind","fnc","endValue","segmentPerc","distanceInLine","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","ax","ay","az","aw","bx","by","bz","bw","quat","qx","qy","qz","qw","heading","attitude","bank","values","c1","c2","c3","s1","s2","s3","w","getValueAtCurrentTime","endTime","renderResult","setVValue","multipliedValue","processEffectsSequence","finalValue","addEffect","effectFunction","ValueProperty","elem","mult","container","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","ti","arrLen","PropertyFactory","DynamicPropertyContainer","pointPool","ShapePath","replace","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePool","shape","shapePath","ShapeCollection","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","kf","keyPropS","isHold","keyPropE","vertexValue","interpolateShapeCurrentTime","lastFrame","resetShape","shapesEqual","shape1","shape2","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","v0","v1","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","_rnd","reset","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","sy","skew","skewFromAxis","scale","sz","setTransform","translate","tx","ty","tz","transform","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","queryString","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","shapeLength","totalModifierLength","segmentOb","shapeS","shapeSegments","pathsData","_isFirstFrame","_s","shapePaths","totalShapeLength","localShapeCollection","edges","shapeE","newShapesData","lastShapeInCollection","lastShape","newPaths","newShape","shapeSegment","currentLengthData","segmentCount","segmentLength","amount","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","_mdf","processKeys","forceRender","frameRate","v2","px","py","precalculateMatrix","autoOrient","addDynamicProperty","TransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","splitData","split","boxIntersect","intersectsImpl","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","ZigZagModifier","setPoint","outputBezier","direction","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","radius","tan","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","left","right","flex","OffsetPathModifier","getFontProperties","fontData","styles","fWeight","fStyle","pMatrix","rMatrix","sMatrix","inv","scaleX","scaleY","elemsData","elements","newElements","renderFlag","hasReloaded","itemsTransform","cont","copies","group","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","currentV","currentI","currentO","closerV","distance","newPosPerc","rd","denom","tcusp","square","root","p10","p11","p20","p21","bounds","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","maxWaitingTime","emptyChar","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","parentNode","checkLoadedFonts","loadedCount","createHelper","helper","engine","fontProps","tHelper","tCanvasHelper","OffscreenCanvas","text","addFonts","defs","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","addChars","getCharData","_char","style","measureText","_char2","fontName","doubleSize","singleSize","getFontByName","getCodePoint","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","fontPrototype","SlotManager","slotFactory","RenderableElement","component","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","effects","GroupEffect","BaseElement","FrameElement","FootageElement","globalData","AudioElement","BaseRenderer","eff","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","effectsInterface","blendModeValue","isVisible","FootageInterface","timeRemapped","totalVolume","volumeValue","layer","pInterface","parentName","hierarchy","pathValue","fontsContainer","effectTypes","TransformElement","MaskElement","properties","currentMasks","layerId","maskType","maskRef","rect","filterID","expansor","feMorph","mask","finalMat","localMat","lmat","localOp","transformEffects","ptNew","transforms","isFirstFrame","pathNodes","viewData","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","registeredEffects$1","idPrefix","SVGEffects","filterManager","registerEffect$1","effect","countsAsEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","ProcessedElement","position","IShapeElement","layerElementParent","gg","cp","clipId","cpGroup","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","SVGStyleData","DashProperty","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","SVGGradientFillStyleData","SVGGradientStrokeStyleData","ShapeGroupData","SVGTransformData","mProps","diff","pathElement","gradientId","gfill","stops","maskElement","opacityId","maskId","opFill","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","paths","iterations","lLen","lvl","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","LetterProps","sw","fc","TextProperty","tempShapes","areAnimated","elementData","transformProperty","ownTransformers","itemsData","prevViewData","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","animatedContent","updated","_finalValue","currentValue","currentIndex","textKeys","charactersArray","shouldCombine","shouldCombineNext","currentChars","fontManager","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidths","lineWidth","maxLineWidth","trackingOffset","newLineFlag","currentHeight","finalText","boxWidth","boxHeight","lastSpaceIndex","uncollapsedSpaces","currentChar","animators","animatorData","based","letterData","newInd","currentInd","newData","dData","_canResize","_fontValue","TextSelectorProp","TextSelectorPropFactory","easer","tot","smoothness","threshold","newCharsFlag","divisor","TextAnimatorDataProperty","animatorProps","defaultData","getProp","textAnimatorAnimatables","TextAnimatorProperty","textData","renderType","ITextElement","lettersChangedFlag","animatorSelector","letterValue","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","alignment","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","partialLength","yOff","firstLine","initPathPos","initSegmentInd","initPointInd","letterM","letterP","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","shapeStr","_fontSize","lineNumber","colorData","emptyShapeData","SVGTextLottieElement","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","SVGRenderer","animationItem","ariaLabel","titleElement","titleId","descElement","descId","ShapeTransformManager","textArray","textContents","currentTextContent","shapeItem","usesGlyphs","singleShape","cachedSpansLength","tSpan","childSpan","glyphElement","glyph","tElement","justify","textContent","textBox","renderedLetter","textSpan","renderedLetters","elementIndex","matteMask","matteElement","nextElement","newElement","sequence","lumaLoader","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","createCanvas","assetLoader","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","operationsMap","CVShapeData","transformsManager","styledShape","CVShapeElement","CVTextElement","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","CVContextData","canvasContext","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","HTextElement","HCameraElement","HImageElement","HybridRendererBase","HCompElement","HybridRenderer","bufferCanvas","bufferCanvas2","bufferCtx","forceRealStack","shouldRender","ownTransforms","parentTransform","groupTransform","nodes","currentStyle","isMain","shapeNodes","groupTransformMat","grd","opacity","commands","pathArr","hasFill","hasStroke","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","rule","actionFlag","containerStyle","origin","elementWidth","elementHeight","elementRel","animationRel","fillType","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","trProps","currentOpacity","transformedElementStyle","matrixValue","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","b2ac","widthProperty","kfw","tempBoundingBox","changed","shapeStyle","shapeTransform","innerElemStyle","textColor","tCont","tParent","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","textPath","translation","margin","svgTransform","perspectiveStyle","perspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","newDOMElement","nextDOMElement","nextLayer","tmpDOMElement","perspectiveElem","threeDContainerData","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_thisLayerFunction","_typeof$2","seedRandom","nodecrypto","digits","rngname","startdenom","significance","overflow","seedrandom","seed","shortseed","mixkey","tostring","autoseed","arc4","ARC4","prng","is_math_call","keylen","me","typ","smear","stringseed","plugins","initialize$2","propTypes","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","resetFrame","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","add","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value2","_tMin","random","rnd","rndm","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","noOp","_value","$bm_transform","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","valueAtTime","velocityAtTime","scoped_bm_rt","time","velocity","textIndex","textTotal","selectorValue","needsVelocity","_needsRandom","elemType","thisProperty","inPoint","outPoint","expression_function","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","duration","loopOutDuration","lookAt","elem1","elem2","fVec","pitch","easeOut","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fr","fps","timeToFrames","randSeed","sourceRectAtTime","substring","substr","posterizeTime","framesPerSecond","hasParent","executeExpression","Expressions","initExpressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","MaskManagerInterface","MaskInterface","maskManager","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_px","_py","_pz","_transformFactory","_thisFunction","getMatrix","toWorldMat","propMatrix","transformMat","toWorldVec","fromWorldVec","applyPoint","invertPoint","sampleImage","_registerMaskInterface","_registerEffectsInterface","transformInterface","anchorPointDescriptor","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","propertyGroup","createGroupInterface","groupInterface","effectElements","_propertyGroup","createValueInterface","expressionProperty","effectsData","ShapePathInterface","view","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","_dashPropertyGroup","dashOb","addPropertyToDashOb","_interfaceFunction","parentGroupWrapper","_sourceText","stringValue","outlineInterfaceFactory","currentPropertyName","currentProperty","searchProperty","propertyNameIndex","dataInterfaceFactory","getInterface","expressionHelpers","speed","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","currentFrame","keyframes","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","endFrame","sampleFrequency","getTransformValueAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","getTransformProperty","propertyGetProp","getShapeValueAtTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","accumulatedLength","initIndex","endIndex","vectorType","xLength","yLength","magnitude","propertyGetShapeProp","trims","initialize$1","addDecorator","searchExpressions","isKeyframed","hasExpressions","initialize","SVGComposableEffect","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","SVGFillFilter","SVGStrokeEffect","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","SVGDropShadowEffect","globalFilterSize","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","dasharrayValue","lineLength","color1","color2","color3","tableR","tableG","tableB","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","effectsManager","symbolId","nextChild","children","useElem","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","mL","trim","allowStale","mA","lC","hit","thisp","walker","forEachStep","next","isStale","maxAge","del","Entry","expiresAt","lc","doUse","$isNaN","fmtShort","msAbs","fmtLong","plural","isPlural","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","isArguments","theKeys","skipProto","skipConstructor","slice","origKeys","originalKeys","objectKeys","$push","$propIsEnumerable","originalGetSymbols","source1","getSymbols","nextKey","propValue","lacksProperEnumerationOrder","assignHasPendingExceptions","thrower","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","_format","sep","pathObject","posix","cwd","resolvedPath","resolvedAbsolute","isAbsolute","trailingSeparator","joined","fromStart","fromEnd","fromLen","toStart","toLen","toEnd","lastCommonSep","fromCode","hasRoot","matchedSlash","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","create","cachedSetTimeout","cachedClearTimeout","currentQueue","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","clearTimeout","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","Item","xe","zj","Aj","Bj","Cj","Vk","aa","ca","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","MSApp","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","gc","hc","ic","jc","kc","mc","oc","nc","pc","qc","rc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","jd","kd","ld","md","nd","od","pd","qd","wd","xd","yd","sd","ud","vd","Ad","zd","Bd","Dd","Fd","Hd","Jd","Ld","Md","Nd","Od","Pd","Rd","Td","Vd","Xd","Zd","$d","ae","be","ce","de","fe","ge","he","ie","je","ke","le","ne","oe","pe","qe","re","se","te","ue","ve","we","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","D","of","pf","qf","rf","sf","J","F","tf","uf","vf","wf","$a","na","xa","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","queueMicrotask","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","G","Vf","H","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","K","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","L","Ch","Dh","Eh","Fh","Gh","Hh","M","N","Ih","Jh","Kh","Lh","P","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","ci","Q","di","ei","fi","gi","ii","ji","ki","li","mi","ni","oi","qi","ri","si","ui","vi","wi","xi","yi","zi","Ai","R","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","Dj","S","Ej","Fj","T","Gj","Hj","Ij","Jj","U","Kj","V","Lj","W","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","X","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Wk","Xk","Yk","$k","Zk","al","bl","cl","dl","el","fl","gl","hl","il","jl","kl","reportError","ll","ml","nl","ol","pl","ql","rl","tl","ul","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","checkDCE","isRegex","performance","setImmediate","MessageChannel","SemVer","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","safeRe","tok","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRe","tildeTrimReplace","caretTrimReplace","comparatorTrimReplace","er","valid","clean","inc","identifier","eq","defaultResult","compareIdentifiers","anum","bnum","rcompareIdentifiers","major","minor","patch","compareLoose","compareBuild","rcompare","rsort","gt","lt","neq","gte","lte","Comparator","ANY","Range","isSatisfiable","comparators","remainingComparators","testComparator","otherComparator","toComparators","parseComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","xp","anyX","hyphenReplace","$0","fM","fm","fp","fpr","tM","tm","tp","tpr","testSet","allowed","satisfies","maxSatisfying","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","comparator","compver","validRange","ltr","outside","gtr","hilo","gtfn","ltefn","ltfn","ecomp","prerelease","intersects","r1","r2","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","hr","compRe","thisComparators","rangeComparators","thisComparator","rangeComparator","hasDescriptors","$floor","functionLengthIsConfigurable","functionLengthIsWritable","simplify","simplifyFeature","feat","geom","simplifyFeatureCollection","geojson","dontClone","coordinates","Line","simplifyGeometry","dmax","results_one","results_two","slope","y_intercept","isArgumentsObject","isGeneratorFunction","isTypedArray","BigIntSupported","SymbolSupported","ObjectToString","numberValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isDataView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isMapToString","isSetToString","isWeakMapToString","isWeakMap","isWeakSetToString","isWeakSet","isArrayBufferToString","isArrayBuffer","isDataViewToString","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","method","getOwnPropertyDescriptors","descriptors","formatRegExp","objects","isNull","debugs","debugEnvRegex","debugEnv","stylizeNoColor","isBoolean","isUndefined","stylizeWithColor","formatValue","styleType","arrayToHash","primitive","formatPrimitive","visibleKeys","isError","formatError","braces","formatArray","formatProperty","reduceToSingleString","simple","numLinesEst","ar","isNullOrUndefined","isSymbol","isPrimitive","pad","pid","months","timestamp","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","callbackify","callbackified","maybeCb","rej","promiseResolve","promiseReject","promise","availableTypedArrays","globalThis","typedArrays","$slice","getPrototypeOf","typedArray","tryTypedArrays","getter","trySlices","tag","inserted","Node","push","unshift","head","tail","initial","acc","deleteCount","tokenize","isColorSupported","FORCE_COLOR","picocolors","compose","buildDefs","colors","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","magenta","gray","invalid","bgRed","bold","gutter","defsOn","createColors","defsOff","getDefs","sometimesKeywords","NEWLINE","BRACKET","JSX_TAG","getTokenType","isKeyword","isStrictReservedWord","test","toLowerCase","jsTokens","default","exec","matchToToken","highlight","highlighted","join","deprecationWarningShown","getMarkerLines","loc","startLoc","assign","endLoc","linesAbove","linesBelow","lineDiff","markerLines","sourceLength","codeFrameColumns","rawLines","shouldHighlight","forceColor","highlightCode","hasColumns","numberMaxWidth","highlightedLines","paddedNumber","hasMarker","lastMarkerLine","markerLine","markerSpacing","numberOfMarkers","colNumber","emitWarning","deprecationError","_gensync","_async","_util","synchronize","gensync","genTrue","makeWeakCache","handler","makeCachedFunction","makeWeakCacheSync","makeStrongCache","makeStrongCacheSync","CallCache","callCacheSync","callCacheAsync","futureCache","finishLock","asyncContext","isAsync","callCache","cached","getCachedValueOrWait","CacheConfigurator","handlerResult","isIterableIterator","onFirstPause","setupAsyncLocks","updateFunctionCache","delete","getCachedValue","cachedValue","waitFor","Lock","configured","forever","deactivate","validator","makeSimpleConfigurator","_never","_forever","_invalidate","_active","_configured","never","using","_data","maybeAsync","isThenable","then","_pairs","invalidate","pairs","constructor","cacheFn","assertSimpleType","_resolve","_path","_debug","_options","_patternToRegex","_printer","_rewriteStackTrace","_configError","_index","_caching","_configDescriptors","buildDebug","buildPresetChain","chain","buildPresetChainWalker","dedupDescriptors","presets","normalizeOptions","files","makeChainWalker","preset","loadPresetDescriptors","envName","loadPresetEnvDescriptors","overrides","loadPresetOverridesDescriptors","overridesEnv","loadPresetOverridesEnvDescriptors","createLogger","buildRootDescriptors","createUncachedDescriptors","buildEnvDescriptors","buildOverrideDescriptors","buildOverrideEnvDescriptors","buildRootChain","configReport","babelRcReport","configFile","ignoreFile","babelrcFile","programmaticLogger","ConfigPrinter","programmaticChain","loadProgrammaticChain","dirname","programmaticReport","loadConfig","caller","findRootConfig","babelrc","babelrcRoots","babelrcRootsDirectory","configFileChain","emptyChain","configFileLogger","validatedFile","validateConfigFile","loadFileChain","mergeChain","fileChain","pkgData","findPackageData","babelrcLoadEnabled","findRelativeConfig","filepath","shouldIgnore","validateBabelrcFile","babelrcLogger","showConfig","log","fileHandling","absoluteRoot","directories","babelrcPatterns","pat","some","pathPatternToRegex","directory","matchPattern","validate","validateExtendFile","createCachedDescriptors","baseLogger","buildProgrammaticLogger","loadFileChainWalker","loadFileDescriptors","loadFileEnvDescriptors","loadFileOverridesDescriptors","loadFileOverridesEnvDescriptors","buildFileLogger","configure","ChainFormatter","Config","_context$caller","Programmatic","callerName","_options$env","_options$overrides","_options$overrides2","_override$env","override","flattenedConfigs","rootOpts","configIsApplicable","envOpts","overrideOps","overrideEnvOpts","only","logger","mergeExtendsChain","mergeChainOpts","extends","passPerPreset","include","exclude","sourceMaps","fnKey","nameMap","ownPass","reduce","configName","configFieldIsApplicable","matchesPatterns","ignoreListReplacer","_context$filename","_context$filename2","stringify","patterns","pattern","pathToTest","endHiddenCallStack","ConfigError","_functional","_item","_resolveTargets","isEqualDescriptor","_a$file","_b$file","_a$file2","_b$file2","request","handlerOf","optionsWithResolvedBrowserslistConfigFile","browserslistConfigFile","resolveBrowserslistConfigFile","createCachedPluginDescriptors","createCachedPresetDescriptors","createPluginDescriptors","createPresetDescriptors","PRESET_DESCRIPTOR_CACHE","loadCachedDescriptor","PLUGIN_DESCRIPTOR_CACHE","DEFAULT_OPTIONS","cacheByOptions","possibilities","possibility","createDescriptors","createDescriptor","assertNoDuplicates","getItemDescriptor","resolver","loadPlugin","loadPreset","__esModule","conflicts","findConfigUpwards","rootDir","pkg","isPackage","resolveShowConfigPath","resolvePlugin","resolvePreset","_plugin","_configChain","_deepArray","_traverse","_plugins","_configApi","_partial","enhanceError","inputOpts","_opts$assumptions","loadPrivatePartialConfig","optionDefaults","presetContext","targets","toDescriptor","presetsDescriptors","initialPluginsDescriptors","pluginDescriptorsByPass","passes","externalDependencies","recursePresetDescriptors","rawPresets","pluginDescriptorsPass","loadPresetDescriptor","checkNoUnwrappedItemOptionPairs","splice","mergeOptions","pluginContext","assumptions","descs","loadPluginDescriptor","freezeDeepArray","makeDescriptorLoader","apiFactory","api","pluginDescriptorLoader","makePluginAPI","presetDescriptorLoader","makePresetAPI","instantiatePlugin","validatePluginObject","visitor","traverse","explode","inherits","inheritsDescriptor","forwardAsync","run","pre","chainMaybeAsync","post","manipulateOptions","visitors","merge","Plugin","needsFilename","validateIfOptionNeedsFilename","formattedPresetName","validatePreset","overrideOptions","instantiatePreset","apply","_semver","makeConfigAPI","coreVersion","assertVersion","addExternalDependency","ref","assumption","isInteger","semver","stackTraceLimit","finalize","deepArr","flattenToSet","getEnv","defaultValue","BABEL_ENV","_full","loadPartialConfigRunner","loadPartialConfigImpl","loadPartialConfigAsync","beginHiddenCallStack","loadPartialConfigSync","loadPartialConfig","loadOptionsImpl","_config$options","loadFullConfig","loadOptionsRunner","loadOptionsAsync","loadOptionsSync","loadOptions","createConfigItemRunner","createConfigItemImpl","createConfigItemAsync","createConfigItemSync","createConfigItem","createItemFromDescriptor","ConfigItem","CONFIG_ITEM_BRAND","for","_descriptor","enumerable","_environment","_excluded","_objectWithoutPropertiesLoose","resolveRootMode","rootMode","upwardRootDir","ROOT_CONFIG_FILENAMES","cloneInputAst","absoluteCwd","absoluteRootDir","showConfigPath","configChain","merged","resolveTargets","showIgnoredFiles","_opts","PartialConfig","hasFilesystemConfig","babelignore","endSep","substitution","starPat","starPatLast","starStarPat","starStarPatLast","escapeRegExp","pathToPattern","indexOf","parserOverride","generatorOverride","Formatter","title","optionsAndDescriptors","opt","pluginDescriptors","descriptorToConfig","presetDescriptors","_d$file","_stack","configs","_helperCompilationTargets","configFilePath","optTargets","esmodules","getTargets","ignoreBrowserslistConfig","browserslistEnv","parserOpts","mergeDefaultFields","access","assertRootMode","assertSourceMaps","assertCompact","assertSourceType","assertCallerMetadata","assertObject","propLoc","assertInputSourceMap","assertString","assertFunction","assertBoolean","assertArray","assertIgnoreList","assertIgnoreItem","assertConfigApplicableTest","checkValidTest","assertConfigFileSearch","assertBabelrcSearch","assertPluginList","assertPluginItem","assertPluginTarget","assertTargets","isBrowsersQueryValid","browsersLoc","esmodulesLoc","assertBrowsersList","subLoc","TargetNames","assertBrowserVersion","validTargets","assertAssumptions","inPreset","assumptionsNames","_removed","_optionAssertions","ROOT_VALIDATORS","filenameRelative","ast","BABELRC_VALIDATORS","NONPRESET_VALIDATORS","COMMON_VALIDATORS","inputSourceMap","assertEnvSet","assertOverridesList","retainLines","comments","shouldPrintComment","minified","auxiliaryCommentBefore","auxiliaryCommentAfter","sourceType","wrapPluginVisitorMethod","sourceFileName","generatorOpts","getModuleId","moduleRoot","moduleIds","moduleId","knownAssumptions","getSource","validateNested","configError","assertNoDuplicateSourcemap","optLoc","throwUnknownError","removed","unknownOptErr","entries","objLoc","lastItem","thisItem","VALIDATORS","assertVisitorMap","assertVisitorHandler","enter","exit","rootPath","invalidPluginPropertyError","auxiliaryComment","blacklist","breakConfig","experimental","externalHelpers","extra","jsxPragma","metadataUsedHelpers","modules","nonStandard","optional","sourceMapName","stage","whitelist","resolveModuleSource","metadata","sourceMapTarget","expectedError","injectVirtualStackFrame","ErrorToString","SUPPORTED","captureStackTrace","_Object$getOwnPropert","getOwnPropertyDescriptor","writable","START_HIDING","STOP_HIDING","expectedErrors","virtualFrames","CallSite","isNative","isConstructor","isToplevel","getFileName","getLineNumber","getColumnNumber","getFunctionName","getMethodName","getTypeName","setupPrepareStackTrace","prepareStackTrace","defaultPrepareStackTrace","MIN_STACK_TRACE_LIMIT","trace","newTrace","status","isExpected","asyncGeneratorStep","_asyncToGenerator","_next","_throw","runGenerator","withKind","_ref","_x","action","firstPause","completed","_ref2","_x2","resultP","promiseReferenced","_file","_buildExternalHelpers","resolvers","_types","_parser","_template","_index2","_transform","_transformFile","_transformAst","_parse","_normalizeOpts","parseRunner","parseSync","parseAsync","_codeFrame","_missingPluginHelper","pluginPasses","missingPlugin","codeFrame","generateMissingPluginMessage","pluginNameMap","asyncDoExpressions","syntax","decimal","decorators","doExpressions","exportDefaultFrom","flow","functionBind","functionSent","jsx","pipelineOperator","recordAndTuple","throwExpressions","typescript","asyncGenerators","classProperties","classPrivateProperties","classPrivateMethods","classStaticBlock","dynamicImport","exportNamespaceFrom","importAssertions","importAttributes","importMeta","logicalAssignment","moduleStringNames","numericSeparator","nullishCoalescingOperator","objectRestSpread","optionalCatchBinding","optionalChaining","privateIn","regexpUnicodeSets","getNameURLCombination","missingPluginName","helpMessage","pluginInfo","syntaxPlugin","transformPlugin","syntaxPluginInfo","transformPluginInfo","sectionType","msgFilename","helpers","_generator","_t","arrayExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","cloneNode","conditionalExpression","exportNamedDeclaration","exportSpecifier","expressionStatement","functionExpression","memberExpression","objectExpression","program","stringLiteral","unaryExpression","variableDeclaration","variableDeclarator","buildUmdWrapper","replacements","statement","buildGlobal","allowlist","buildHelpers","buildModule","refs","buildUmd","FACTORY_PARAMETERS","BROWSER_ARGUMENTS","COMMON_ARGUMENTS","AMD_ARGUMENTS","FACTORY_BODY","UMD_ROOT","buildVar","getHelperReference","exportName","mapExportBindingAssignments","outputType","umd","var","generator","transformFromAstRunner","transformFromAstSync","transformFromAstAsync","optsOrCallback","maybeCallback","transformFileSync","transformFileAsync","transformRunner","transformSync","transformAsync","LOADED_PLUGIN","blockHoistPlugin","Block","performHoisting","SwitchCase","consequent","hasChange","priority","stableSort","loadBlockHoistPlugin","bodyNode","_blockHoist","buckets","bucket","babel7","_interopRequireWildcard","_getRequireWildcardCache","__proto__","interpreterDirective","errorVisitor","File","shebang","interpreter","replaceWith","_map","availableHelper","versionRange","addHelper","declar","declarations","uid","generateUidIdentifier","dependencies","dep","getDependencies","globals","getAllBindings","hasBinding","rename","_compact","unshiftContainer","isVariableDeclaration","registerDeclaration","buildCodeFrameError","txt","inputMap","hub","getCode","getScope","buildError","NodePath","parentPath","setContext","addImport","addTemplateObject","getModuleName","_convertSourceMap","_mergeMap","generateCode","toObject","generate","outputCode","outputMap","__mergedMap","mergeSourceMap","convertSourceMap","toComment","_remapping","remapping","rootless","_pluginPass","_blockHoistPlugin","_normalizeFile","_generate","_opts$filename","_opts$filename2","normalizeFile","transformFile","pluginPairs","passPairs","PluginPass","_fs","_cloneDeep","traverseFast","INLINE_SOURCEMAP_REGEX","EXTERNAL_SOURCEMAP_REGEX","cloneDeep","lastComment","extractComments","fromComment","inputMapContent","fs","readFileSync","fromJSON","extractCommentsFromList","leadingComments","innerComments","trailingComments","basename","extname","deepClone","_allocQueue","_queue","identifierName","identifierNamePos","_pushQueue","cursor","_queueCursor","_popQueue","_flush","_buf","_str","trimRight","getDecoded","resultMap","rawMappings","getRawMappings","maybeNewline","_append","_sourcePosition","appendChar","_appendChar","sourcePosition","queueIndentation","queueCursor","sourcePos","_last","fastIndentation","_fastIndentations","_indentChar","fromCharCode","_mark","_position","_canMarkIdName","charCodeAt","_appendCount","_this$_map","mark","removeTrailingNewline","removeLastSemicolon","getLastChar","getNewlineCount","endsWithCharAndNewline","lastCp","hasContent","exactSource","_normalizePosition","sourceWithOffset","getCurrentColumn","getCurrentLine","indentChar","print","Program","_node$directives","_node$directives$trai","noIndentInnerCommentsHere","printInnerComments","directivesLen","directives","newline","printSequence","BlockStatement","_node$directives2","_node$directives$trai2","enterDelimited","rightBrace","Directive","unescapedSingleQuoteRE","unescapedDoubleQuoteRE","DirectiveLiteral","raw","getPossibleRaw","InterpreterDirective","Placeholder","expectedNode","isExportDefaultDeclaration","isExportNamedDeclaration","ClassDeclaration","_shouldPrintDecoratorsBeforeExport","printJoin","declare","word","abstract","typeParameters","superTypeParameters","implements","printList","ClassBody","separator","classBodyEmptySemicolonsPrinter","printer","tokenMap","getIndexes","occurrenceCount","nextLocIndex","advanceNextLocIndex","matchesOriginal","_tokens","ClassProperty","static","preserveFormat","_node$key$loc","catchUp","tsPrintClassMemberModifiers","computed","_variance","definite","typeAnnotation","ClassAccessorProperty","_node$key$loc2","ClassPrivateProperty","ClassMethod","_classMethodHead","ClassPrivateMethod","_node$key$loc3","_methodHead","StaticBlock","addDeprecatedGenerators","PrinterClass","deprecatedBabel7Generators","Noop","TSExpressionWithTypeArguments","DecimalLiteral","isCallExpression","isLiteral","isMemberExpression","isNewExpression","isPattern","UnaryExpression","DoExpression","ParenthesizedExpression","rightParens","UpdateExpression","ConditionalExpression","alternate","NewExpression","callee","typeArguments","endMatches","shouldPrintTrailingComma","SequenceExpression","expressions","ThisExpression","decoratorsBeforeExport","declaration","Decorator","OptionalMemberExpression","OptionalCallExpression","CallExpression","Import","AwaitExpression","printTerminatorless","YieldExpression","delegate","EmptyStatement","ExpressionStatement","tokenContext","TokenContext","AssignmentPattern","AssignmentExpression","_endsWithDiv","BindExpression","MemberExpression","MetaProperty","meta","PrivateName","V8IntrinsicIdentifier","ModuleExpression","dedent","_modules","_types2","isDeclareExportDeclaration","isStatement","AnyTypeAnnotation","ArrayTypeAnnotation","elementType","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","NullLiteralTypeAnnotation","DeclareClass","_interfaceish","DeclareFunction","InferredPredicate","DeclaredPredicate","DeclareInterface","InterfaceDeclaration","DeclareModule","DeclareModuleExports","DeclareTypeAlias","TypeAlias","DeclareOpaqueType","OpaqueType","DeclareVariable","DeclareExportDeclaration","FlowExportDeclaration","DeclareExportAllDeclaration","ExportAllDeclaration","EnumDeclaration","enumExplicitType","hasExplicitType","enumBody","members","member","hasUnknownMembers","EnumBooleanBody","explicitType","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumDefaultedMember","enumInitializedMember","EnumBooleanMember","EnumNumberMember","EnumStringMember","specifiers","ExistsTypeAnnotation","FunctionTypeAnnotation","this","rest","returnType","FunctionTypeParam","InterfaceExtends","_node$extends","_node$mixins","_node$implements","mixins","_node$variance","variance","andSeparator","InterfaceTypeAnnotation","_node$extends2","IntersectionTypeAnnotation","types","MixedTypeAnnotation","EmptyTypeAnnotation","NullableTypeAnnotation","NumberTypeAnnotation","StringTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","TypeAnnotation","arrowFlowReturnType","TypeParameterInstantiation","TypeParameter","supertype","impltype","ObjectTypeAnnotation","exact","callProperties","indexers","internalSlots","leading","inexact","ObjectTypeInternalSlot","ObjectTypeCallProperty","ObjectTypeIndexer","ObjectTypeProperty","ObjectTypeSpreadProperty","QualifiedTypeIdentifier","qualification","SymbolTypeAnnotation","orSeparator","UnionTypeAnnotation","TypeCastExpression","Variance","VoidTypeAnnotation","IndexedAccessType","objectType","indexType","OptionalIndexedAccessType","_templateLiterals","_expressions","_statements","_classes","_methods","_flow","_base","_jsx","_typescript","JSXAttribute","JSXIdentifier","JSXNamespacedName","JSXMemberExpression","JSXSpreadAttribute","JSXExpressionContainer","JSXSpreadChild","JSXText","JSXElement","open","openingElement","selfClosing","child","closingElement","spaceSeparator","JSXOpeningElement","attributes","JSXClosingElement","JSXEmptyExpression","JSXFragment","openingFragment","closingFragment","JSXOpeningFragment","JSXClosingFragment","isIdentifier","_params","idNode","nameInfo","_getFuncIdName","sourceIdentifierName","_parameters","noLineTerminator","_noLineTerminator","parameters","endToken","trailingComma","paramLength","_param","parameter","_predicate","noLineTerminatorAfter","_functionHead","_endsWithInnerRaw","FunctionExpression","ArrowFunctionExpression","_shouldPrintArrowParamsParens","arrowBody","_firstParam$leadingCo","_firstParam$trailingC","firstParam","findMatching","arrowToken","_id$loc","_id$loc2","_id$loc3","_id$loc4","parentType","isClassDeclaration","isExportDefaultSpecifier","isExportNamespaceSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","ImportSpecifier","importKind","imported","local","ImportDefaultSpecifier","ExportDefaultSpecifier","exported","ExportSpecifier","exportKind","ExportNamespaceSpecifier","warningShown","_printAttributes","hasPreviousBrace","importAttributesKeyword","assertions","useAssertKeyword","_node$attributes","_node$assertions","maybePrintDecoratorsBeforeExport","ExportNamedDeclaration","hasSpecial","hasBrace","_node$attributes2","_node$assertions2","ExportDefaultDeclaration","exportDefault","ImportDeclaration","_node$attributes3","_node$assertions3","isTypeKind","phase","hasSpecifiers","ImportAttribute","ImportNamespaceSpecifier","ImportExpression","isFor","isForStatement","isIfStatement","WithStatement","printBlock","IfStatement","needsBlock","getLastStatement","printAndIndentOnComments","ForStatement","enterForStatementInit","forHead","update","WhileStatement","ForXStatement","isForOf","await","forOfHead","forInHead","DoWhileStatement","printStatementAfterKeyword","BreakStatement","label","ContinueStatement","ReturnStatement","ThrowStatement","LabeledStatement","TryStatement","finalizer","CatchClause","SwitchStatement","discriminant","cases","cas","DebuggerStatement","VariableDeclaration","hasInits","VariableDeclarator","TaggedTemplateExpression","quasi","TemplateElement","TemplateLiteral","quasis","partRaw","_catchUpTo","_jsesc","isAssignmentPattern","lastRawIdentNode","lastRawIdentResult","_getRawIdentifier","_originalCode","Identifier","_node$loc","ArgumentPlaceholder","RestElement","ObjectExpression","ObjectMethod","ObjectProperty","shorthand","ArrayExpression","RecordExpression","startToken","recordAndTupleSyntaxType","TupleExpression","RegExpLiteral","BooleanLiteral","NullLiteral","NumericLiteral","jsescOption","numbers","StringLiteral","BigIntLiteral","validTopicTokenSet","TopicReference","topicToken","givenTopicTokenJSON","validTopics","PipelineTopicExpression","PipelineBareFunction","PipelinePrimaryTopicReference","TSTypeAnnotation","TSTypeParameterInstantiation","printTrailingSeparator","TSTypeParameter","in","constraint","TSParameterProperty","accessibility","readonly","TSDeclareFunction","TSDeclareMethod","TSQualifiedName","TSCallSignatureDeclaration","tsPrintSignatureDeclarationBase","maybePrintTrailingCommaOrSemicolon","TSConstructSignatureDeclaration","TSPropertySignature","tsPrintPropertyOrMethodName","TSMethodSignature","TSIndexSignature","isStatic","TSAnyKeyword","TSBigIntKeyword","TSUnknownKeyword","TSNumberKeyword","TSObjectKeyword","TSBooleanKeyword","TSStringKeyword","TSSymbolKeyword","TSVoidKeyword","TSUndefinedKeyword","TSNullKeyword","TSNeverKeyword","TSIntrinsicKeyword","TSThisType","TSFunctionType","tsPrintFunctionOrConstructorType","TSConstructorType","TSTypeReference","typeName","TSTypePredicate","asserts","parameterName","TSTypeQuery","exprName","TSTypeLiteral","printBraced","TSArrayType","TSTupleType","elementTypes","TSOptionalType","TSRestType","TSNamedTupleMember","TSUnionType","tsPrintUnionOrIntersectionType","TSIntersectionType","_printer$tokenMap","hasLeadingToken","startMatches","TSConditionalType","checkType","extendsType","trueType","falseType","TSInferType","typeParameter","TSParenthesizedType","TSTypeOperator","TSIndexedAccessType","TSMappedType","nameType","tokenIfPlusMinus","TSLiteralType","literal","TSClassImplements","TSInterfaceDeclaration","extendz","TSInterfaceBody","TSTypeAliasDeclaration","TSTypeExpression","TSTypeAssertion","TSInstantiationExpression","TSEnumDeclaration","const","isConst","TSEnumBody","_this$shouldPrintTrai","TSEnumMember","initializer","TSModuleDeclaration","TSModuleBlock","TSImportType","qualifier","TSImportEqualsDeclaration","isExport","moduleReference","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","isField","printModifiersList","_printer$tokenMap2","modifiersSet","_sourceMap","_opts$recordAndTupleS","experimental_preserveFormat","tokens","retainFunctionParens","concise","adjustMultilineComment","quotes","wrap","minimal","jsonCompatibleStrings","Printer","_ast","whitespace","parens","FLIPPED_ALIAS_KEYS","VISITOR_KEYS","isDecorator","isExpressionStatement","isParenthesizedExpression","expandAliases","inForInit","getRawIdentifier","_fn","aliases","expandedParens","expandedWhitespaceNodes","isOrHasCallExpression","needsWhitespace","_expandedWhitespaceNo","needsWhitespaceBefore","needsWhitespaceAfter","needsParens","_expandedParens$get","isDecoratorMemberExpression","isLastChild","visitorKeys","isArrayTypeAnnotation","isBinaryExpression","isForOfStatement","isIndexedAccessType","isObjectPattern","isOptionalMemberExpression","isYieldExpression","PRECEDENCE","getBinaryPrecedence","nodeType","isTSTypeExpression","isClassExtendsClause","hasPostfixPart","needsParenBeforeExpressionBrace","Binary","parentPos","nodePos","TSAsExpression","BinaryExpression","inForStatementInit","ClassExpression","UnaryLike","LogicalExpression","_inForInit","_node$extra","parenthesized","rightType","isArrayExpression","isAssignmentExpression","isBinary","isBlockStatement","isObjectExpression","isOptionalCallExpression","isStringLiteral","crawlInternal","hasCall","hasFunction","hasHelper","isHelper","crawl","isType","Literal","_parent$properties","_parent$properties2","_parent$callPropertie","_parent$properties3","_parent$callPropertie2","_parent$indexers","amounts","_buffer","_tokenMap","generatorFunctions","_deprecated","isExpression","isClassBody","isTSInterfaceBody","isTSEnumMember","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","commentIsNewline","oldInForStatementInit","oldNoLineTerminatorAfterNode","_noLineTerminatorAfterNode","TokenMap","_maybeAddAuxComment","_indent","force","_currentNode","_printSemicolonBeforeNextNode","_space","_maybePrintInnerComments","_catchUpToCurrentToken","_endsWithWord","isNonDecimalLiteral","secondChar","_endsWithInteger","lastChar","strFirst","tokenChar","_newline","_catchUp","_printSemicolonBeforeNextToken","_maybeIndent","firstChar","_getIndent","_shouldIndent","spacesCount","spaces","_indentRepeat","trailingCommentsLineOffset","_node$leadingComments","_node$leadingComments2","_node$trailingComment","oldInForStatementInitWasTrue","oldConcise","printMethod","oldInAux","_insideAux","shouldPrintParens","_boundGetRawIdentifier","indentParenthesized","_lastCommentLine","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","_printAuxAfterOnNextUserNode","_printComment","rawValue","addNewlines","_nodes$0$loc","_node$trailingComment2","_nextNode$loc","newlineOpts","nextNodeStartLine","boundSeparator","_printNewline","nextNode","_printComments","nextTokenStr","nextTokenOccurrenceCount","_this$tokenMap","_indentInnerComments","nextToken","hasSpace","printedCommentsCount","_printedComments","commaSeparator","listEnd","listEndIndex","findLastIndex","lastCommentLine","_shouldPrintComment","commentTok","skipNewLines","isBlockComment","printNewLines","lastCharCode","_comment$loc","newlineRegex","indentSize","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","singleLine","shouldSkipNewline","originalCode","_inputMap","_genMapping","_traceMapping","_rawMappings","_originalMapping","originalMapping","originalIdentifierMapping","_sourceFileName","_opts$sourceFileName","_this$_inputMap$sourc","_lastGenLine","_lastSourceLine","_lastSourceColumn","_nodesToTokenIndexes","condition","_nodesOccurrencesCountCache","_source","_getTokensIndexesOfNode","_findTokensOfNode","childrenIterator","childTok","_tokensCache","_findFirstTokenOfNode","_findLastTokenOfNode","_pretty","_utils","getInclusionReasons","targetVersions","minVersions","getLowestImplementedVersion","targetVersion","minIsUnreleased","isUnreleasedVersion","semverify","prettifyVersion","targetsSupported","support","targetEnvironments","unsupportedEnvironments","environment","lowestImplementedVersion","lowestTargetedVersion","isRequired","compatData","pluginsCompatData","excludes","filterItems","defaultIncludes","defaultExcludes","pluginSyntaxMap","shippedProposalsSyntax","_browserslist","_helperValidatorOption","_nativeModules","_lruCache","_targets","_filterItems","ESM_SUPPORT","browserModulesData","OptionValidator","validateTargetNames","formatMessage","findSuggestion","every","validateBrowsers","invariant","getLowestVersions","browserName","browserVersion","browserNameMap","splitVersion","isSplitUnreleased","isUnreleased","getLowestUnreleased","parsedBrowserVersion","semverMin","outputDecimalWarning","decimalTargets","semverifyTarget","nodeTargetParser","defaultTargetParser","generateTargets","inputTargets","mobileToDesktop","targetsCache","LruCache","resolveTargetsCached","_browsers","_browsers2","configPath","onBrowserslistConfigFound","hasTargets","shouldParseBrowsers","shouldSearchForConfig","BROWSERSLIST","BROWSERSLIST_CONFIG","findConfigFile","queryBrowsers","esmSupportVersion","getHighestUnreleased","decimalWarnings","parsedTarget","parsedValue","deno","opera","edge","firefox","safari","ios","electron","samsung","rhino","opera_mobile","prettifyTargets","unreleasedLabel","unreleasedLabels","and_chr","and_ff","ie_mob","ios_saf","op_mob","versionRegExp","_assert","importDeclaration","importDefaultSpecifier","importNamespaceSpecifier","importSpecifier","ImportBuilder","statements","resultName","_resultName","import","_importedSource","_scope","named","importName","defaultInterop","_interop","_hub","wildcardInterop","importedSource","_importBuilder","_isModule","numericLiteral","sequenceExpression","isImportDeclaration","ImportInjector","addDefault","importedSourceIn","addNamed","_generateImport","_applyDefaults","addNamespace","addSideEffect","newOpts","isInit","_defaultOpts","nameHint","blockHoist","isDefault","isNamed","isNamespace","importedType","importedInterop","importingInterop","ensureLiveReference","ensureNoContext","importPosition","isMod","isModule","_programPath","isModuleForNode","isModuleForBabel","_programScope","es6Default","_insertStatements","_insertStatementsAfter","_insertStatementsBefore","isValueImport","firstImportDecl","maybeAppendImportSpecifiers","targetPath","insertBefore","statementsSet","importDeclarations","lastImportPath","bodyStmt","newImports","decl","insertAfter","programPath","isProgram","hasNamespaceImport","hasDefaultImport","_importInjector","_core","buildDynamicImport","deferToThen","wrapWithPromise","specifier","isTemplateLiteral","specifierToString","templateLiteral","templateElement","originalGetModuleName","pluginOpts","_pluginOpts$moduleId","_pluginOpts$moduleIds","_pluginOpts$getModule","_pluginOpts$moduleRoo","moduleName","sourceRootReplacer","_helperModuleImports","_rewriteThis","_rewriteLiveReferences","_normalizeAndLoadMetadata","Lazy","_dynamicImport","_getModuleName","rewriteModuleStatementsAndPrepareHeader","allowTopLevelThis","strictMode","noInterop","importInterop","lazy","getWrapperPayload","toGetWrapperPayload","wrapReference","esNamespaceOnly","constantReexports","enumerableModuleMeta","noIncompleteNsImportDetection","validateImportInteropOption","normalizeModuleAndLoadMetadata","initializeReexports","rewriteThis","rewriteLiveReferences","directive","directiveLiteral","headers","hasExports","buildESModuleHeader","nameList","buildExportNameListDeclaration","exportNameListName","buildExportInitializationStatements","ensureStatementsHoisted","header","wrapInterop","expr","booleanLiteral","buildNamespaceInitStatements","sourceMetadata","_wrapReference","srcNamespaceId","localName","importsNamespace","NAME","SOURCE","srcNamespace","buildReexportsFromMeta","reexportNamespace","EXPORTS","NAMESPACE","reexportAll","buildNamespaceReexport","ReexportTemplate","constant","namespaceImport","constantComputed","spec","_wrapReference2","stringSpecifiers","reexports","interop","astNodes","VERIFY_NAME_LIST","EXPORTS_LIST","exportedVars","hasReexport","valueToNode","initStatements","buildInitStatement","reexportsStatements","initStatement","chunkSize","uninitializedExportNames","buildUndefinedNode","InitTemplate","exportNames","initExpr","isSideEffectImport","_helperValidatorIdentifier","imports","resolveImportInterop","nameAnonymousExports","getModuleMetadata","removeImportExportDeclarations","nameOfnamespace","resolvedInterop","getExportSpecifierName","isIdentifierName","assertExportSpecifier","isExportSpecifier","localData","getLocalExportMetadata","importNodes","sourceData","getData","sourceNode","referenced","reexport","isImportSpecifier","isExportAllDeclaration","needsDefault","needsNamed","bindingKindLookup","isFunctionDeclaration","getOuterBindingIdentifiers","localMetadata","getLocalMetadata","idPath","ids","getOuterBindingIdentifierPaths","_child$splitExportDec","splitExportDeclaration","isInType","requeueInParent","requeue","exportMeta","rewriteBindingInitVisitorState","rewriteBindingInitVisitor","rewriteReferencesVisitorState","seen","buildImportReference","identNode","rewriteReferencesVisitor","Scope","buildBindingExportAssignmentExpression","isVar","isArrowFunctionExpression","isFunctionExpression","isClassExpression","localExpr","exportsObjectName","currentScope","hasOwnBinding","buildImportThrow","ReferencedIdentifier","importData","localBinding","getBinding","rootBinding","isTaggedTemplateExpression","isJSXIdentifier","jsxMemberExpression","exportedNames","generateDeclaredUidIdentifier","newExpr","assignment","logicalExpression","programScopeIds","programScope","didTransformExport","importConstViolationName","loopBodyScope","ensureBlock","bodyPath","newLoopId","generateUidIdentifierBasedOnNode","rewriteThisVisitor","environmentVisitor","noScope","forbiddenNumericSeparatorSiblings","decBinOct","isAllowedNumericSeparatorSibling","bin","oct","dec","readStringContents","lineStart","curLine","initialPos","initialLineStart","initialCurLine","firstInvalidLoc","chunkStart","unterminated","isStringEnd","readEscapedChar","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","fromCodePoint","strictNumericEscape","startPos","octalStr","octal","forceLen","readInt","invalidEscapeSequence","radix","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","unexpectedNumericSeparator","numericSeparatorInEscapeSequence","_isDigit","invalidDigit","invalidCodePoint","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","isIdentifierStart","isIdentifierChar","isFirst","trail","_identifier","_keyword","keywords","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","inModule","isStrictBindOnlyReservedWord","isStrictBindReservedWord","levenshtein","distances","_validator","_findSuggestion","validateTopLevelOptions","TopLevelOptionShape","validOptionNames","option","validateBooleanOption","validateStringOption","preserveComments","OverloadYield","locals","_OverloadYield","exportBindingAssignments","applyDecoratedDescriptor","_applyDecoratedDescriptor","applyDecs2311","checkInRHS","setFunctionName","toPropertyKey","arrayLikeToArray","arrayWithHoles","arrayWithoutHoles","_arrayWithoutHoles","assertClassBrand","_assertClassBrand","assertThisInitialized","asyncGeneratorDelegate","_asyncGeneratorDelegate","asyncIterator","_asyncIterator","AsyncFromSyncIterator","asyncToGenerator","awaitAsyncGenerator","_awaitAsyncGenerator","callSuper","_callSuper","isNativeReflectConstruct","possibleConstructorReturn","_checkInRHS","checkPrivateRedeclaration","_checkPrivateRedeclaration","classCallCheck","classNameTDZError","_classNameTDZError","classPrivateFieldGet2","_classPrivateFieldGet2","classPrivateFieldInitSpec","_classPrivateFieldInitSpec","classPrivateFieldLooseBase","_classPrivateFieldBase","classPrivateFieldLooseKey","_classPrivateFieldKey","classPrivateFieldSet2","_classPrivateFieldSet2","classPrivateGetter","_classPrivateGetter","classPrivateMethodInitSpec","_classPrivateMethodInitSpec","classPrivateSetter","_classPrivateSetter","classStaticPrivateMethodGet","_classStaticPrivateMethodGet","construct","setPrototypeOf","createClass","createForOfIteratorHelper","_createForOfIteratorHelper","unsupportedIterableToArray","createForOfIteratorHelperLoose","_createForOfIteratorHelperLoose","createSuper","decorate","_decorate","_getDecoratorsApi","_createElementDescriptor","_coalesceGetterSetter","_coalesceClassElements","_hasDecorators","_isDataDescriptor","_optionalCallableProperty","toArray","_defaults","defineAccessor","_defineAccessor","_extends","_get","superPropBase","identity","_identity","importDeferProxy","_importDeferProxy","inheritsLoose","_inheritsLoose","initializerDefineProperty","_initializerDefineProperty","initializerWarningHelper","_initializerWarningHelper","instanceof","_instanceof","interopRequireDefault","interopRequireWildcard","isNativeFunction","iterableToArray","_iterableToArray","iterableToArrayLimit","REACT_ELEMENT_TYPE","_createRawReactElement","maybeArrayLike","_maybeArrayLike","newArrowCheck","_newArrowCheck","nonIterableRest","nonIterableSpread","_nonIterableSpread","nullishReceiverError","_nullishReceiverError","objectDestructuringEmpty","_objectDestructuringEmpty","objectSpread2","_objectSpread2","objectWithoutProperties","_objectWithoutProperties","objectWithoutPropertiesLoose","readOnlyError","_readOnlyError","regeneratorRuntime","_regeneratorRuntime","_set","skipFirstGeneratorNext","_skipFirstGeneratorNext","slicedToArray","_superPropBase","superPropGet","_superPropGet","superPropSet","_superPropSet","taggedTemplateLiteral","_taggedTemplateLiteral","taggedTemplateLiteralLoose","_taggedTemplateLiteralLoose","tdz","_tdzError","temporalRef","_temporalRef","temporalUndefined","_temporalUndefined","_toArray","toConsumableArray","_toConsumableArray","toPrimitive","toSetter","_toSetter","typeof","usingCtx","_usingCtx","wrapAsyncGenerator","_wrapAsyncGenerator","AsyncGenerator","wrapNativeSuper","wrapRegExp","_wrapRegExp","writeOnlyError","_writeOnlyError","AwaitValue","_AwaitValue","applyDecs","old_createMetadataMethodsForProperty","old_convertMetadataMapToFinal","old_createAddInitializerMethod","old_memberDec","old_assertNotFinished","old_assertMetadataKey","old_assertCallable","old_assertValidReturnValue","old_getInit","old_applyMemberDec","old_applyMemberDecs","old_pushInitializers","old_applyClassDecs","applyDecs2203","applyDecs2203Factory","applyDecs2203Impl","applyDecs2203R","applyDecs2203RFactory","applyDecs2301","applyDecs2301Factory","applyDecs2305","classApplyDescriptorDestructureSet","_classApplyDescriptorDestructureSet","classApplyDescriptorGet","_classApplyDescriptorGet","classApplyDescriptorSet","_classApplyDescriptorSet","classCheckPrivateStaticAccess","_classCheckPrivateStaticAccess","classCheckPrivateStaticFieldDescriptor","_classCheckPrivateStaticFieldDescriptor","classExtractFieldDescriptor","_classExtractFieldDescriptor","classPrivateFieldDestructureSet","_classPrivateFieldDestructureSet","classPrivateFieldGet","_classPrivateFieldGet","classPrivateFieldSet","_classPrivateFieldSet","classPrivateMethodGet","_classPrivateMethodGet","classPrivateMethodSet","_classPrivateMethodSet","classStaticPrivateFieldDestructureSet","_classStaticPrivateFieldDestructureSet","classStaticPrivateFieldSpecGet","_classStaticPrivateFieldSpecGet","classStaticPrivateFieldSpecSet","_classStaticPrivateFieldSpecSet","classStaticPrivateMethodSet","_classStaticPrivateMethodSet","defineEnumerableProperties","_defineEnumerableProperties","dispose","dispose_SuppressedError","_dispose","objectSpread","_using","_helpersGenerated","deep","permuteHelperAST","bindingName","localBindings","getDependency","adjustAst","newName","helperData","loadHelper","Position","SourceLocation","createPositionWithColumnOffset","ModuleErrors","ImportMetaOutsideModule","ImportOutsideModule","NodeDescriptions","ArrayPattern","ForOfStatement","ForInStatement","FormalParameters","ObjectPattern","true","false","toNodeDescription","StandardErrors","AccessorIsGenerator","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitUsingNotInAsyncContext","AwaitNotInAsyncContext","AwaitNotInAsyncFunction","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorsBeforeAfterExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeferImportRequiresNamespace","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","DuplicateProto","DuplicateRegExpFlags","DynamicImportPhaseRequiresImportExpressions","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportAttributesUseAssert","ImportBindingIsString","ImportCallArity","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidLhsOptionalChaining","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","ModuleExportNameHasLoneSurrogate","surrogateCharCode","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","SloppyFunctionAnnexB","SourcePhaseImportRequiresDefault","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationExport","UsingDeclarationHasBindingPattern","VarRedeclaration","YieldBindingIdentifier","YieldInParameter","ZeroDigitNumericSeparator","StrictModeErrors","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","UnparenthesizedPipeBodyDescriptions","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","defineHidden","configurable","toParseErrorConstructor","toMessage","reasonCode","hasMissingPlugin","oldReasonCodes","AccessorCannotDeclareThisParameter","AccessorCannotHaveTypeParameters","ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference","SetAccessorCannotHaveOptionalParameter","SetAccessorCannotHaveRestParameter","SetAccessorCannotHaveReturnType","_overrides$loc","ParseErrorEnum","parseErrorTemplates","ParseErrorConstructors","Errors","PipelineOperatorErrors","createDefaultOptions","sourceFilename","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","createImportExpressions","createParenthesizedExpressions","errorRecovery","attachComment","annexB","getOptions","toUnenumerable","toESTreeLocation","estree","ESTreeParserMixin","optionFlags","parseRegExpLiteral","estreeParseLiteral","parseBigIntLiteral","bigInt","_unused","bigint","parseDecimalLiteral","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","directiveToStmt","stmt","initFunction","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","isValidDirective","_stmt$expression$extr","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","isPrivateName","parseFunctionBody","allowExpression","isMethod","parseMethod","isGenerator","allowDirectSuper","inClassScope","funcNode","startNode","resetStartLocationFromNode","finishNode","nameIsConstructor","parseClassProperty","propertyNode","parseClassPrivateProperty","parseObjectMethod","isAccessor","parseObjectProperty","refExpressionErrors","isValidLVal","isUnparenthesizedInAssign","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","finishCallExpression","unfinished","toReferencedArguments","parseExport","exportStartLoc","lastTokStartLoc","_declaration$decorato","resetStartLocation","parseSubscript","noCalls","optionalChainMember","startNodeAtNode","hasPropertyAsPrivateName","isObjectMethod","finishNodeAt","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","conf","rightAssociative","binop","updateContext","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","_options$binop","_options$beforeExpr","_options$startsExpr","_options$prefix","createKeywordLike","_options$binop2","_options$beforeExpr2","_options$startsExpr2","_options$prefix2","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","at","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_break","_case","_catch","_continue","_debugger","_else","_finally","_function","_if","_return","_switch","_try","_var","_const","_with","_new","_class","_export","_import","_null","_true","_false","_void","_delete","_do","_for","_while","_as","_await","_defer","_from","_let","_meta","_of","_sent","_static","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","placeholder","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","isIteratorStart","next2","reservedWordLikeSet","canBeReservedWord","firstLexicalName","ScopeHandler","inTopLevel","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","scopeStack","ScopeFlag","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","declareName","bindingType","checkRedeclarationInScope","maybeExportDefined","undefinedExports","isRedeclaredInScope","checkLocalExport","topLevelScope","FlowScope","declareFunctions","FlowScopeHandler","BaseParser","sourceToOffsetPos","offsetToSourcePos","offsetPos","hasPlugin","pluginConfig","pluginName","pluginOptions","actualOptions","_this$plugins$get","sawUnambiguousESM","ambiguousScriptDifferentAst","setTrailingComments","setLeadingComments","setInnerComments","adjustInnerComments","commentWS","lastElement","CommentsParser","addComment","commentsLen","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","nodeStart","commentEnd","containingNode","finalizeComment","trailingNode","commentStart","finalizeRemainingComments","resetPreviousNodeTrailingComments","resetPreviousIdentifierLeadingComments","takeSurroundingComments","lineBreakG","lineBreak","hasNewLine","skipWhiteSpace","skipWhiteSpaceInLine","isWhitespace","State","maybeInArrowParameters","inType","noAnonFunctionType","hasFlowComment","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","soloAwait","inFSharpPipelineDirectBody","canStartJSXElement","containsEsc","hasTopLevelAwait","curPosition","potentialArrowAt","noArrowAt","noArrowParamsConversionAt","topicContext","labels","firstInvalidTemplateEscapePos","strictErrors","tokensLength","maxNumOfResolvableTopics","maxTopicIndex","ct","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","pushToken","checkKeywordEscapes","eat","createLookaheadState","curContext","lookahead","old","isLookahead","nextTokenStart","nextTokenStartSince","lookaheadCharCode","nextTokenInLineStart","nextTokenInLineStartSince","lookaheadInLineCharCode","codePointAtPos","setStrict","toParseError","skipSpace","finishToken","getTokenFromCode","skipBlockComment","skipLineComment","startSkip","spaceStart","commentWhitespace","prevType","replaceToken","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readWord1","finishOp","readToken_dot","readNumber","readToken_slash","readToken_mult_modulo","readToken_pipe_amp","readToken_caret","proposal","codePointAt","readToken_atSign","readToken_plus_min","readToken_lt","readToken_gt","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readWord","readRegexp","escaped","mods","errorHandlers_readInt","startsWithDot","isFloat","hasExponent","isOctal","hasLeadingZero","recordStrictModeErrors","underscorePos","isDecimal","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","readTemplateContinuation","opening","errorHandlers_readStringContents_template","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseOverwrite","expectOnePlugin","pluginNames","errorBuilder","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","oldClassScope","declarePrivateName","redefined","accessor","oldStatic","newStatic","oldKind","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","recordDeclarationError","ParsingErrorClass","declarationErrors","clearDeclarationError","iterateErrors","ExpressionScopeHandler","recordParameterInitializerError","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","UtilParser","addExtra","isContextual","isUnparsedContextual","nameStart","nameEnd","nextCh","isLookaheadContextual","eatContextual","expectContextual","canInsertSemicolon","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","allowAsi","expect","tryParse","oldState","abortSignal","failState","thrown","aborted","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","hasErrors","isLiteralPropertyName","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","getScopeHandler","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","checkDestructuringPrivate","ExpressionErrors","NodePrototype","clonePlaceholder","cloneIdentifier","cloneStringLiteral","__clone","newNode","NodeUtils","startNodeAt","locationNode","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitialized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","exportSuggestions","let","interface","partition","list1","list2","FLOW_PRAGMA_REGEX","FlowParserMixin","shouldParseTypes","flowPragma","flowParseTypeInitialiser","oldInType","flowParseType","flowParsePredicate","moduloLoc","parseExpression","flowParseTypeAndPredicateInitialiser","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","flowParseFunctionTypeParams","flowParseDeclare","insideModule","flowParseDeclareVariable","flowParseDeclareModuleExports","flowParseDeclareModule","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","parseImport","hasModuleExport","isLet","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","flowParseInterfaceExtends","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","flowParseTypeParameter","requireDefault","nodeStartLoc","flowParseVariance","ident","defaultRequired","flowInTopLevelContext","oldContext","flowParseTypeParameterInstantiationInExpression","reScan_lt","oldNoAnonFunctionType","reScan_lt_gt","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","endDelim","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","flowCheckGetterSetterParams","paramCount","_startLoc","node2","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","flowParsePrefixType","flowParseAnonFunctionWithoutParens","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","shouldParseExportDeclaration","parseExportDefaultExpression","parseConditional","setOptionalParametersError","originalNoArrowAt","failed","tryParseConditionalConsequent","getArrowLikeExpressions","parseMaybeAssign","parseMaybeAssignAllowIn","disallowInvalid","arrows","finishArrowValidation","toAssignableList","trailingCommaLoc","checkParams","parseParenItem","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","optionalId","parseClassMember","classBody","parseClassMemberFromModifier","isIterator","readIterator","fullWord","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassMethod","allowsDirectSuper","isThisParam","pushClassPrivateMethod","parseClassSuper","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","parseFunctionParamType","parseMaybeDefault","checkImportReflection","parseImportSpecifierLocal","finishImportSpecifier","isPotentialImportPhase","applyImportPhase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","specifierTypeKind","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","parseAsyncArrowFromCallExpression","shouldParseAsyncArrow","afterLeftParse","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","maybeUnwrapTypeCastExpression","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","subscriptState","isLookaheadToken_lt","parseNewCallee","targs","parseArrowExpression","parseTopLevel","fileNode","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitialized","flowEnumMemberInit","endOfInit","flowEnumMemberRaw","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","booleanMembers","numberMembers","stringMembers","defaultedMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","jsxParseOpeningElementAfterName","afterNext","entities","quot","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Omicron","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","omicron","rho","sigmaf","tau","upsilon","phi","chi","psi","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","exist","nabla","isin","notin","prod","minus","lowast","radic","infin","and","or","cap","cup","int","there4","sim","cong","asymp","equiv","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","JSXParserMixin","jsxReadToken","jsxReadEntity","jsxReadNewLine","normalizeCRLF","jsxReadString","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","jsxParseClosingElementAt","jsxParseElementAt","jsxParseElement","newContext","TypeScriptScope","tsNames","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","unwrapParenthesizedExpression","LValParser","_node$extra3","_node$extra2","checkToRestConversion","elt","toReferencedListDeep","parseSpread","parseRestBinding","parseBindingList","ParseBindingListFlags","parseObjectLike","closeCharCode","allowEmpty","elts","checkCommaAfterRest","parseDecorator","parseAssignableListItem","parseBindingRestProperty","parseBindingProperty","parsePropertyName","_left","checkLVal","_expression$extra","checkClashes","hasParenthesizedAncestor","checkIdentifier","validity","ParseErrorClass","nextAncestor","declareNameFromIdentifier","allowPattern","nonNull","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifer","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TupleOptionalAfterType","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","TypeScriptParserMixin","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenOnSameLineAndCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","allowedModifiers","stopOnStartOfClassStaticBlock","tsIsStartOfStaticBlocks","tsTryParse","tsParseModifiers","modified","disallowedModifiers","errorTemplate","enforceOrder","before","after","incompatible","mod1","mod2","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","tsParseEntityName","tsParseEntityNameFlags","tsParseTypeArguments","tsParseTypeReference","tsParseThisTypePredicate","lhs","tsParseTypeAnnotation","tsParseThisTypeNode","tsParseTypeQuery","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseConstModifier","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","nodeAny","firstParameter","tsParseTypeMember","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedType","tsExpectThenParseType","tsParseType","tsTryParseType","tsParseTupleType","tsParseTupleElementType","seenOptionalElement","elementNode","labeled","chAfterWord","isWord","wordName","typeOrLabel","tsParseNonArrayType","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","parseMaybeUnary","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","isTypeOperator","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","_unused2","tsInType","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","tsParseInOutConstModifiers","tsParseTypeAliasDeclaration","tsParseInOutModifiers","tsInTopLevelContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsParseEnumMember","tsParseEnumDeclaration","tsParseEnumBody","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","tsParseImportEqualsDeclaration","maybeDefaultIdentifier","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","tsTryParseAndCatch","tsTryParseDeclare","nany","startType","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","tsIsDeclarationStart","pp","isSimpleParameter","tsDisallowOptionalPattern","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","_callee$extra","parseExprOp","leftStartLoc","minPrec","isSatisfies","checkKeywords","checkDuplicateExports","importNode","parseMaybeImportPhase","parseImportSpecifiersAndAfter","nodeImportEquals","isAbstractClass","cls","allowMissingInitializer","isValidAmbientConstInitializer","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","parseClassPropertyAnnotation","parseClassAccessorProperty","declareClassPrivateMethodInScope","_typeCast","_typeCast2","typeCast","_typeParameters","reportReservedArrowTypeParam","sawUnary","toAssignableParenthesizedExpression","parseMaybeDecoratorArguments","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","hasContextParam","parseCatchClauseParam","oldIsAmbientContext","oldStrict","oldInAbstractClass","maybeTakeDecorators","methodFn","hasEstreePlugin","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","rightOfAs","leftOfAsKey","rightOfAsKey","leftOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","isPossiblyLiteralEnum","isUncomputedMemberExpressionChain","isNegativeNumber","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","PIPELINE_PROPOSALS","TOPIC_TOKENS","validatePlugins","pluginsMap","allowCallParenthesized","_pluginsMap$get","proposalList","tupleSyntaxIsHash","syntaxType","tokenList","moduleAttributesVersionPluginOption","deprecatedAssertSyntax","RECORD_AND_TUPLE_SYNTAX_TYPES","missingPlugins","mixinPlugins","v8intrinsic","V8IntrinsicMixin","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","placeholders","PlaceholdersParserMixin","parsePlaceholder","assertNoSpace","finishPlaceholder","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrSloppyAnnexBFunctionDeclaration","stmtPlaceholder","parseBlock","createNewLexicalScope","parseFunctionId","requireId","parseClassBody","maybeParseExportDefaultSpecifier","_specifiers","checkExport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","mixinPluginNames","ExpressionParser","checkProto","isRecord","protoRef","used","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","resultError","_resultError$loc","ownExpressionErrors","parseYield","parseMaybeConditional","parseExprOps","parseMaybeUnaryOrPrivate","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","withSoloAwaitPermittingContext","parseFSharpPipelineBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","_body$extra","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","recordAwaitIfAllowed","parseAwait","isDelete","parseUpdate","isAmbiguousAwait","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseMember","parseNoCallExpr","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","_call$extra","parseSuper","parseImportMetaProperty","parseImportCall","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","lookaheadCh","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","parseMetaProperty","parseFunction","isSource","spreadStartLoc","optionalCommaStartLoc","innerStartLoc","spreadNodeStartLoc","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","isTail","endOffset","elemEnd","cooked","curElt","substitutions","propHash","parsePropertyDefinition","maybeAsyncOrAccessorProp","keyName","finishedProp","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","reservedTest","isAwaitAllowed","delegating","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","ParamKind","revertScopes","parseProgram","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","templateValue","templateElementEnd","templateElementEndLoc","backquoteEnd","backquoteEndLoc","StatementParser","finishedProgram","parseInterpreterDirective","stmtToDirective","hasFollowingBindingAtom","endCh","chStartsBindingPattern","hasInLineFollowingBindingIdentifierOrBrace","startsUsingForOf","startsAwaitUsing","parseModuleItem","ParseStatementFlag","parseStatementListItem","allowLabeledFunction","parseStatement","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","_classNode$decorators","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithAwaitUsing","starsWithUsingDeclaration","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isHangingDeclaration","ParseFunctionFlag","sawDefault","isCase","clause","statementStart","parsedNonDirective","hangingDeclaration","isDeclaration","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","maybeContextualKw","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","_member$decorators","parseInitializer","hasDeclaration","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","maybeParseExportNamedSpecifiers","maybeParseExportDeclaration","_node2$declaration","_ref$specifiers","isTypeExport","nextType","hasFrom","nextAfterFrom","maybeParseImportAttributes","checkJSONModuleImport","checkNames","isFrom","_node$specifiers","_declaration$extra","surrogate","isJSONModuleImport","singleBindingType","nonDefaultNamedSpecifier","phaseIdentifier","isPrecedingIdImportPhase","parseImportSourceAndAttributes","parseNext","maybeParseDefaultImportSpecifier","_node$specifiers2","parseImportAttributes","attrs","attrNames","parseModuleAttributes","useWith","Parser","getParser","moduleError","tokTypes","generateExportedTokenTypes","internalTokenTypes","getParserClass","parserClassCache","pluginList","_string","_literal","NO_PLACEHOLDER","placeholderPattern","createTemplateBuilder","defaultOpts","templateFnCache","templateAstCache","cachedOpts","tpl","extendedTrace","stringTemplate","literalTemplate","rootStack","assertExpressionStatement","makeStatementFormatter","unwrap","_builder","smart","_populate","buildLiteralData","defaultReplacements","replacement","normalizeReplacements","populatePlaceholders","buildTemplateCode","parseAndBuildMetadata","placeholderWhitelist","syntacticPlaceholders","isPlaceholder","removePropertiesDeep","PATTERN","parseWithCodeFrame","syntactic","placeholderNames","legacy","placeholderVisitorHandler","ancestors","_state$placeholderWhi","hasSyntacticPlaceholders","resolveAncestors","isDuplicate","emptyStatement","placeholderName","reverse","applyReplacement","pathsCache","clearPath","clearScope","nullHub","getCachedPaths","_pathsCache$get","getOrCreateCachedPaths","_hub2","_hub3","parents","_context","TraversalContext","shouldVisit","listKey","maybeQueue","notPriority","priorityQueue","visitMultiple","visitQueue","visitSingle","visited","visitIndex","resync","contexts","pushContext","visit","popContext","Hub","_traverseNode","removeProperties","visitSelf","traverseNode","hasDenylistedType","verify","cheap","skipKeys","clearNode","hasType","denylistTypes","denylist","findParent","getFunctionParent","getStatementParent","isFile","getEarliestCommonAncestorFrom","getDeepestCommonAncestorFrom","deepest","ancestries","earliest","ancestry","parentKey","lastCommonIndex","lastCommon","minDepth","depthLoop","shouldMatch","getAncestry","isAncestor","maybeDescendant","isDescendant","maybeAncestor","candidateTypes","_addComment","addComments","_addComments","shareCommentsWithSiblings","trailing","getSibling","hasPrev","hasNext","removeIfExisting","toRemove","_removal","_call","_opts$this$node$type","fns","_traverseFlags","isDenylisted","_this$opts$denylist","restoreContext","_this$opts$shouldSkip","_this$opts","shouldSkip","shouldStop","skipKey","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","_path$opts","isSwitchStatement","_resyncParent","_resyncList","_resyncKey","setKey","inList","newContainer","_resyncRemoved","_markRemoved","_this$node","pathToQueue","requeueComputedKeyAndDecorators","decorator","_getQueueContexts","_visitors","arrowFunctionExpression","LOGICAL_OPERATORS","metaProperty","restElement","returnStatement","spreadElement","super","thisExpression","toExpression","toBindingIdentifierName","isRestElement","toComputedKey","isProperty","stringPath","unwrapFunctionEnvironment","hoistFunctionEnvironment","setType","arrowFunctionToExpression","_arguments$","allowInsertArrow","allowInsertArrowWithRest","noNewArrows","specCompliant","_self$ensureFunctionN","ensureFunctionName","thisBinding","fnPath","checkBinding","getSuperCallsVisitor","allSuperCalls","isSuper","arrowParent","thisEnvFn","_arrowParent","isClassPrivateProperty","inConstructor","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","superBinding","getSuperBinding","superCall","argumentsBinding","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","superProp","standardizeSuperProperty","superParentPath","isAssignment","isCall","isTaggedTemplate","getSuperPropBinding","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","assignmentPath","isLogicalAssignment","rightExpression","isUpdateExpression","updateExpr","computedKey","assignSuperThisVisitor","supers","replaceWithMultiple","argsBinding","propName","fnBody","argsList","valueIdent","setData","getScopeInformationVisitor","isJSXMemberExpression","isJSXOpeningElement","isReferencedIdentifier","isExportDeclaration","standaloneDeclaration","exportExpr","needBindingRegistration","updatedDeclaration","updatedExportDeclaration","aliasDeclar","refersOuterBindingVisitor","needsRename","supportUnicodeId","originalNode","getOwnBinding","hasGlobal","getProgramParent","references","getFunctionArity","findIndex","VALID_OBJECT_CALLEES","VALID_IDENTIFIER_CALLEES","INVALID_METHODS","isValidObjectCallee","isValidIdentifierCallee","isInvalidMethod","evaluateTruthy","evaluate","confident","deopt","deoptPath","Globals","evaluateCached","_evaluate","isSequenceExpression","exprs","isNumericLiteral","isBooleanLiteral","isNullLiteral","evaluateQuasis","isConditionalExpression","testResult","isExpressionWrapper","constantViolations","hasValue","isUnaryExpression","elemValue","isSpreadElement","keyPath","valuePath","isLogicalExpression","wasConfident","leftConfident","rightConfident","getAssignmentIdentifiers","_getAssignmentIdentifiers","getBindingIdentifiers","_getBindingIdentifiers","_getOuterBindingIdentifiers","NORMAL_COMPLETION","BREAK_COMPLETION","NormalCompletion","BreakCompletion","getOpposite","addCompletionRecords","records","_getCompletionRecords","completionRecordForSwitch","lastNormalCompletions","caseCompletions","normalCompletions","breakCompletions","normalCompletionToBreak","completions","replaceBreakStatementInBreakCompletion","reachable","isBreakStatement","getStatementListCompletion","canHaveBreak","inCaseClause","shouldPopulateBreak","statementCompletions","pathCompletions","isDoExpression","isWhile","isLabeledStatement","isTryStatement","isCatchClause","isSwitchCase","getCompletionRecords","getPrevSibling","getNextSibling","getAllNextSiblings","sibling","siblings","getAllPrevSiblings","_getKey","_getPattern","duplicates","getBindingIdentifierPaths","outerOnly","_ids","virtualTypes","NodePath_ancestry","NodePath_inference","NodePath_replacement","NodePath_evaluation","NodePath_conversion","NodePath_introspection","NodePath_context","NodePath_removal","NodePath_modification","NodePath_family","NodePath_comments","NodePath_virtual_types_validator","NodePath_Final","targetNode","hasNode","getPathLocation","methods","getTypeAnnotation","isBaseType","couldBeBaseType","baseTypeStrictlyMatches","isGenericType","replaceWithSourceString","replaceExpressionWithStatements","replaceInline","matchesPattern","isNodeType","canHaveVariableDeclarationOrExpression","canSwapBetweenExpressionAndStatement","isCompletionRecord","isStatementOrBlock","referencesImport","willIMaybeExecuteBefore","_guessExecutionStatusRelativeTo","isConstantExpression","isInStrictMode","pushContainer","arrowFunctionToShadowed","is","isnt","hoist","updateSiblingKeys","isBlacklisted","_guessExecutionStatusRelativeToDifferentFunctions","_getTypeAnnotation","_replaceWith","_removeFromScope","_callRemovalHooks","_remove","_assertUnremoved","_containerInsert","_containerInsertBefore","_containerInsertAfter","_verifyNodeList","TYPES","typeKey","inferers","anyTypeAnnotation","isAnyTypeAnnotation","isBooleanTypeAnnotation","isEmptyTypeAnnotation","isFlowBaseAnnotation","isGenericTypeAnnotation","isMixedTypeAnnotation","isNumberTypeAnnotation","isStringTypeAnnotation","isTSArrayType","isTSTypeAnnotation","isTSTypeReference","isTupleTypeAnnotation","isTypeAnnotation","isUnionTypeAnnotation","isVoidTypeAnnotation","stringTypeAnnotation","voidTypeAnnotation","typeAnnotationInferringNodes","isVariableDeclarator","declarParent","isForInStatement","_inferer","inferer","validParent","baseName","soft","_isBaseType","type2","rightArg","genericName","BOOLEAN_NUMBER_BINARY_OPERATORS","createTypeAnnotationBasedOnTypeof","numberTypeAnnotation","isReferenced","getTypeAnnotationBindingConstantViolations","functionConstantViolations","getConstantViolationsBefore","testType","getConditionalAnnotation","testConstantViolations","ifStatement","violation","createUnionType","functions","violations","inferAnnotationFromBinaryExpression","typeofPath","typePath","typeValue","getParentConditionalPath","_infererReference","BOOLEAN_BINARY_OPERATORS","BOOLEAN_UNARY_OPERATORS","NUMBER_BINARY_OPERATORS","NUMBER_UNARY_OPERATORS","STRING_UNARY_OPERATORS","arrayTypeAnnotation","booleanTypeAnnotation","buildMatchMemberExpression","genericTypeAnnotation","nullLiteralTypeAnnotation","tupleTypeAnnotation","unionTypeAnnotation","argumentTypes","Func","isArrayFrom","isObjectKeys","isObjectValues","isObjectEntries","resolveCall","createFlowUnionType","createTSUnionType","createUnionTypeAnnotation","isFlowType","isTSType","STATEMENT_OR_BLOCK_KEYS","_matchesPattern","allowPartial","allowInsideFunction","moduleSource","getOuterFunction","isExecutionUncertain","isExecutionUncertainInList","maxIndex","SYMBOL_CHECKING","_guessExecutionStatusRelativeToCached","commonPath","funcParent","_guessExecutionStatusRelativeToDifferentFunctionsCached","commonIndex","divergence","keyPosition","_guessExecutionStatusRelativeToDifferentFunctionsInternal","allStatus","referencePaths","nodeMap","dangerous","_resolved","isTypeCastExpression","targetKey","targetName","isRegExpLiteral","noGlobals","_t2","react","jsxExpressionContainer","referenceVisitor","isCompatTag","breakOnScopePaths","mutableBinding","PathHoister","isCompatibleScope","bindingIdentifierEquals","getCompatibleScopes","getAttachmentPath","_getAttachmentPath","targetScope","bindingParentPath","getAttachmentParentForPath","violationPath","attachAfter","hasOwnParamBindings","getNextScopeAttachmentParent","bodies","attachTo","declarator","attached","isJSXElement","isBlockScoped","nodeIsBlockScoped","nodeIsExpression","isFlow","nodeIsFlow","isForXStatement","nodeIsRestElement","nodeIsReferenced","nodeIsScope","nodeIsStatement","nodeIsVar","isReferencedMemberExpression","isBindingIdentifier","grandparent","isUser","isGenerated","isPure","constantsOnly","isRestProperty","_this$parentPath","isSpreadProperty","_this$parentPath2","isForAwaitStatement","_hoister","assertExpression","nodes_","shouldInsertCurrentNode","_this$context","isHiddenInSequenceExpression","isAlmostConstantAssignment","blockScope","getBlockParent","temp","fromIndex","incrementBy","verifiedNodes","hoister","_removalHooks","_replacement","_modification","removeBinding","hooks","REMOVED","FUNCTION_TYPES","awaitExpression","inheritLeadingComments","inheritTrailingComments","inheritsComments","isEmptyStatement","removeComments","yieldExpression","_getCachedPaths","expressionAST","replacementPath","nodePath","oldNode","_getCachedPaths2","declars","nodesAsSingleExpression","gatherSequenceExpressions","functionParent","isParentAsync","isParentGenerator","hoistVariables","newCallee","needToAwaitFunction","needToYieldFunction","ensureLastUndefined","Binding","deoptValue","clearValue","hasDeoptedValue","setValue","reassign","reference","dereference","isDeclaredInLoop","isFunctionParent","_renamer","_binding","_globals","NOT_LOCAL_BINDING","isModuleSpecifier","isPureish","isThisExpression","toIdentifier","isRecordExpression","isTupleExpression","isTopicReference","isMetaProperty","gatherNodeParts","collectorVisitor","parentScope","registerBinding","Declaration","isTSQualifiedName","isTSImportEqualsDeclaration","ExportDeclaration","assignments","BlockScoped","_parent","generateUid","hasLabel","hasReference","uids","generateUidBasedOnNode","defaultName","maybeGenerateMemoised","dontPush","checkBlockScopedCollisions","oldName","renamer","Renamer","dump","getLabel","registerLabel","isTypeDeclaration","isTypeSpecifier","registerConstantViolation","_this$getBinding","bindingPath","addGlobal","hasUid","_node$decorators","_node$decorators2","_node$decorators3","removeData","inited","crawling","programParent","isExplodedVisitor","typeVisitors","getPatternParent","unique","dataKey","declarPath","isBlockParent","getBindingIdentifier","previousPath","_previousPath","_this$getBinding2","getOwnBindingIdentifier","noUids","contextVariables","parentHasBinding","_this$parent","moveBindingTo","info","removeOwnBinding","_this$getBinding3","emit","firstId","_firstId","scopeCache","builtin","_renameFromMap","_generateUid","arrayLikeIsIterable","helperName","getAllBindingsOfKind","kinds","parentBlock","renameVisitor","maybeConvertFromExportDeclaration","parentDeclar","maybeExportDeclar","maybeConvertFromClassFunctionDeclaration","maybeConvertFromClassFunctionExpression","bindingIds","blockToTraverse","virtualTypesValidators","DEPRECATED_KEYS","DEPRECATED_ALIASES","__internal__deprecationWarning","deprecationWarning","isVirtualType","_exploded","explode$1","shouldIgnoreKey","verify$1","ensureEntranceObjects","ensureCallbackArrays","wrapCheck","mergePair","deprecatedKey","deprecatedAlias","_verified","validateVisitorMethods","visitorKey","states","mergedVisitor","topVisitor","wrapWithStateOrWrapper","typeVisitor","oldVisitor","newVisitor","newFn","dest","_environmentVisitor","FunctionParent","Property","_isNode","assertNode","isNode","_node$type","_deprecationWarning","assertArrayExpression","assertAssignmentExpression","assertBinaryExpression","assertInterpreterDirective","assertDirective","assertDirectiveLiteral","assertBlockStatement","assertBreakStatement","assertCallExpression","assertCatchClause","assertConditionalExpression","assertContinueStatement","assertDebuggerStatement","assertDoWhileStatement","assertEmptyStatement","assertFile","assertForInStatement","assertForStatement","assertFunctionDeclaration","assertFunctionExpression","assertIdentifier","assertIfStatement","assertLabeledStatement","assertStringLiteral","assertNumericLiteral","assertNullLiteral","assertBooleanLiteral","assertRegExpLiteral","assertLogicalExpression","assertMemberExpression","assertNewExpression","assertProgram","assertObjectExpression","assertObjectMethod","assertObjectProperty","assertRestElement","assertReturnStatement","assertSequenceExpression","assertParenthesizedExpression","assertSwitchCase","assertSwitchStatement","assertThisExpression","assertThrowStatement","assertTryStatement","assertUnaryExpression","assertUpdateExpression","assertVariableDeclaration","assertVariableDeclarator","assertWhileStatement","assertWithStatement","assertAssignmentPattern","assertArrayPattern","assertArrowFunctionExpression","assertClassBody","assertClassExpression","assertClassDeclaration","assertExportAllDeclaration","assertExportDefaultDeclaration","assertExportNamedDeclaration","assertForOfStatement","assertImportDeclaration","assertImportDefaultSpecifier","assertImportNamespaceSpecifier","assertImportSpecifier","assertImportExpression","assertMetaProperty","assertClassMethod","assertObjectPattern","assertSpreadElement","assertSuper","assertTaggedTemplateExpression","assertTemplateElement","assertTemplateLiteral","assertYieldExpression","assertAwaitExpression","assertImport","assertBigIntLiteral","assertExportNamespaceSpecifier","assertOptionalMemberExpression","assertOptionalCallExpression","assertClassProperty","assertClassAccessorProperty","assertClassPrivateProperty","assertClassPrivateMethod","assertPrivateName","assertStaticBlock","assertAnyTypeAnnotation","assertArrayTypeAnnotation","assertBooleanTypeAnnotation","assertBooleanLiteralTypeAnnotation","assertNullLiteralTypeAnnotation","assertClassImplements","assertDeclareClass","assertDeclareFunction","assertDeclareInterface","assertDeclareModule","assertDeclareModuleExports","assertDeclareTypeAlias","assertDeclareOpaqueType","assertDeclareVariable","assertDeclareExportDeclaration","assertDeclareExportAllDeclaration","assertDeclaredPredicate","assertExistsTypeAnnotation","assertFunctionTypeAnnotation","assertFunctionTypeParam","assertGenericTypeAnnotation","assertInferredPredicate","assertInterfaceExtends","assertInterfaceDeclaration","assertInterfaceTypeAnnotation","assertIntersectionTypeAnnotation","assertMixedTypeAnnotation","assertEmptyTypeAnnotation","assertNullableTypeAnnotation","assertNumberLiteralTypeAnnotation","assertNumberTypeAnnotation","assertObjectTypeAnnotation","assertObjectTypeInternalSlot","assertObjectTypeCallProperty","assertObjectTypeIndexer","assertObjectTypeProperty","assertObjectTypeSpreadProperty","assertOpaqueType","assertQualifiedTypeIdentifier","assertStringLiteralTypeAnnotation","assertStringTypeAnnotation","assertSymbolTypeAnnotation","assertThisTypeAnnotation","assertTupleTypeAnnotation","assertTypeofTypeAnnotation","assertTypeAlias","assertTypeAnnotation","assertTypeCastExpression","assertTypeParameter","assertTypeParameterDeclaration","assertTypeParameterInstantiation","assertUnionTypeAnnotation","assertVariance","assertVoidTypeAnnotation","assertEnumDeclaration","assertEnumBooleanBody","assertEnumNumberBody","assertEnumStringBody","assertEnumSymbolBody","assertEnumBooleanMember","assertEnumNumberMember","assertEnumStringMember","assertEnumDefaultedMember","assertIndexedAccessType","assertOptionalIndexedAccessType","assertJSXAttribute","assertJSXClosingElement","assertJSXElement","assertJSXEmptyExpression","assertJSXExpressionContainer","assertJSXSpreadChild","assertJSXIdentifier","assertJSXMemberExpression","assertJSXNamespacedName","assertJSXOpeningElement","assertJSXSpreadAttribute","assertJSXText","assertJSXFragment","assertJSXOpeningFragment","assertJSXClosingFragment","assertNoop","assertPlaceholder","assertV8IntrinsicIdentifier","assertArgumentPlaceholder","assertBindExpression","assertImportAttribute","assertDecorator","assertDoExpression","assertExportDefaultSpecifier","assertRecordExpression","assertTupleExpression","assertDecimalLiteral","assertModuleExpression","assertTopicReference","assertPipelineTopicExpression","assertPipelineBareFunction","assertPipelinePrimaryTopicReference","assertTSParameterProperty","assertTSDeclareFunction","assertTSDeclareMethod","assertTSQualifiedName","assertTSCallSignatureDeclaration","assertTSConstructSignatureDeclaration","assertTSPropertySignature","assertTSMethodSignature","assertTSIndexSignature","assertTSAnyKeyword","assertTSBooleanKeyword","assertTSBigIntKeyword","assertTSIntrinsicKeyword","assertTSNeverKeyword","assertTSNullKeyword","assertTSNumberKeyword","assertTSObjectKeyword","assertTSStringKeyword","assertTSSymbolKeyword","assertTSUndefinedKeyword","assertTSUnknownKeyword","assertTSVoidKeyword","assertTSThisType","assertTSFunctionType","assertTSConstructorType","assertTSTypeReference","assertTSTypePredicate","assertTSTypeQuery","assertTSTypeLiteral","assertTSArrayType","assertTSTupleType","assertTSOptionalType","assertTSRestType","assertTSNamedTupleMember","assertTSUnionType","assertTSIntersectionType","assertTSConditionalType","assertTSInferType","assertTSParenthesizedType","assertTSTypeOperator","assertTSIndexedAccessType","assertTSMappedType","assertTSLiteralType","assertTSExpressionWithTypeArguments","assertTSInterfaceDeclaration","assertTSInterfaceBody","assertTSTypeAliasDeclaration","assertTSInstantiationExpression","assertTSAsExpression","assertTSSatisfiesExpression","assertTSTypeAssertion","assertTSEnumBody","assertTSEnumDeclaration","assertTSEnumMember","assertTSModuleDeclaration","assertTSModuleBlock","assertTSImportType","assertTSImportEqualsDeclaration","assertTSExternalModuleReference","assertTSNonNullExpression","assertTSExportAssignment","assertTSNamespaceExportDeclaration","assertTSTypeAnnotation","assertTSTypeParameterInstantiation","assertTSTypeParameterDeclaration","assertTSTypeParameter","assertStandardized","assertBinary","assertScopable","assertBlockParent","assertBlock","assertStatement","assertTerminatorless","assertCompletionStatement","assertConditional","assertLoop","assertWhile","assertExpressionWrapper","assertFor","assertForXStatement","assertFunctionParent","assertPureish","assertDeclaration","assertPatternLike","assertLVal","assertTSEntityName","assertLiteral","assertImmutable","assertUserWhitespacable","assertMethod","assertObjectMember","assertProperty","assertUnaryLike","assertPattern","assertClass","assertImportOrExportDeclaration","assertExportDeclaration","assertModuleSpecifier","assertAccessor","assertPrivate","assertFlow","assertFlowType","assertFlowBaseAnnotation","assertFlowDeclaration","assertFlowPredicate","assertEnumBody","assertEnumMember","assertJSX","assertMiscellaneous","assertTypeScript","assertTSTypeElement","assertTSType","assertTSBaseType","assertNumberLiteral","assertRegexLiteral","assertRestProperty","assertSpreadProperty","assertModuleDeclaration","_removeTypeDuplicates","flattened","removeTypeDuplicates","_validate","utils","validateInternal","NODE_FIELDS","breakStatement","_arguments","catchClause","continueStatement","debuggerStatement","doWhileStatement","forInStatement","forStatement","functionDeclaration","FunctionDeclaration","labeledStatement","nullLiteral","regExpLiteral","newExpression","objectMethod","objectProperty","parenthesizedExpression","switchCase","switchStatement","throwStatement","tryStatement","updateExpression","whileStatement","withStatement","assignmentPattern","arrayPattern","classExpression","classDeclaration","exportAllDeclaration","exportDefaultDeclaration","forOfStatement","importExpression","classMethod","objectPattern","SpreadElement","taggedTemplateExpression","bigIntLiteral","exportNamespaceSpecifier","optionalMemberExpression","optionalCallExpression","classProperty","classAccessorProperty","classPrivateProperty","classPrivateMethod","staticBlock","booleanLiteralTypeAnnotation","classImplements","ClassImplements","declareClass","declareFunction","declareInterface","declareModule","declareModuleExports","declareTypeAlias","declareOpaqueType","declareVariable","declareExportDeclaration","declareExportAllDeclaration","declaredPredicate","existsTypeAnnotation","functionTypeAnnotation","functionTypeParam","GenericTypeAnnotation","inferredPredicate","interfaceExtends","interfaceDeclaration","interfaceTypeAnnotation","intersectionTypeAnnotation","mixedTypeAnnotation","emptyTypeAnnotation","nullableTypeAnnotation","numberLiteralTypeAnnotation","NumberLiteralTypeAnnotation","objectTypeAnnotation","objectTypeInternalSlot","objectTypeCallProperty","objectTypeIndexer","objectTypeProperty","objectTypeSpreadProperty","opaqueType","qualifiedTypeIdentifier","stringLiteralTypeAnnotation","StringLiteralTypeAnnotation","symbolTypeAnnotation","thisTypeAnnotation","typeofTypeAnnotation","typeAlias","typeCastExpression","typeParameterDeclaration","TypeParameterDeclaration","typeParameterInstantiation","enumDeclaration","enumBooleanBody","enumNumberBody","enumStringBody","enumSymbolBody","enumBooleanMember","enumNumberMember","enumStringMember","enumDefaultedMember","indexedAccessType","optionalIndexedAccessType","jsxAttribute","jsxClosingElement","jsxElement","jsxEmptyExpression","jsxSpreadChild","jsxNamespacedName","jsxOpeningElement","jsxSpreadAttribute","jsxFragment","jsxOpeningFragment","jsxClosingFragment","v8IntrinsicIdentifier","argumentPlaceholder","bindExpression","importAttribute","doExpression","exportDefaultSpecifier","recordExpression","tupleExpression","decimalLiteral","moduleExpression","topicReference","pipelineTopicExpression","pipelineBareFunction","pipelinePrimaryTopicReference","tsParameterProperty","tsDeclareFunction","tsDeclareMethod","tsQualifiedName","tsCallSignatureDeclaration","tsConstructSignatureDeclaration","tsPropertySignature","tsMethodSignature","tsIndexSignature","tsAnyKeyword","tsBooleanKeyword","tsBigIntKeyword","tsIntrinsicKeyword","tsNeverKeyword","tsNullKeyword","tsNumberKeyword","tsObjectKeyword","tsStringKeyword","tsSymbolKeyword","tsUndefinedKeyword","tsUnknownKeyword","tsVoidKeyword","tsThisType","tsFunctionType","tsConstructorType","tsTypeReference","tsTypePredicate","tsTypeQuery","tsTypeLiteral","tsArrayType","tsTupleType","tsOptionalType","tsRestType","tsNamedTupleMember","tsUnionType","tsIntersectionType","tsConditionalType","tsInferType","tsParenthesizedType","tsTypeOperator","tsIndexedAccessType","tsMappedType","tsLiteralType","tsExpressionWithTypeArguments","tsInterfaceDeclaration","tsInterfaceBody","tsTypeAliasDeclaration","tsInstantiationExpression","tsAsExpression","tsSatisfiesExpression","TSSatisfiesExpression","tsTypeAssertion","tsEnumBody","tsEnumDeclaration","tsEnumMember","tsModuleDeclaration","tsModuleBlock","tsImportType","tsImportEqualsDeclaration","tsExternalModuleReference","tsNonNullExpression","tsExportAssignment","tsNamespaceExportDeclaration","tsTypeAnnotation","tsTypeParameterInstantiation","tsTypeParameterDeclaration","TSTypeParameterDeclaration","tsTypeParameter","NumberLiteral","RegexLiteral","RestProperty","SpreadProperty","_cleanJSXElementLiteralChild","buildChildren","isJSXText","cleanJSXElementLiteralChild","isJSXExpressionContainer","isJSXEmptyExpression","typeAnnotations","_cloneNode","cloneDeepWithoutLoc","cloneIfNode","withoutLoc","commentsCache","cloneNodeInternal","cloneIfNodeOrArray","field","maybeCloneComments","cloneWithoutLoc","_inherit","inheritInnerComments","inherit","_inheritTrailingComments","_inheritLeadingComments","_inheritInnerComments","COMMENT_KEYS","IMPORTOREXPORTDECLARATION_TYPES","EQUALITY_BINARY_OPERATORS","COMPARISON_BINARY_OPERATORS","_toBlock","toBlock","_productions","_toIdentifier","blockNodes","_isValidIdentifier","isValidIdentifier","_removePropertiesDeep","toKeyAlias","increment","_gatherSequenceExpressions","toSequenceExpression","toStatement","newType","mustHaveId","isPlainObject","numerator","nodeKey","_helperStringParser","defineType","defineAliasedType","arrayOf","assertNodeOrValueType","BABEL_TYPES_8_BREAKING","assertOneOf","ASSIGNMENT_OPERATORS","assertValueType","assertNodeType","BINARY_OPERATORS","inOp","oneOfNodeTypes","arrayOfType","validateArrayOfType","assertEach","each","functionCommon","functionTypeAnnotationCommon","functionDeclarationCommon","patternLikeCommon","nonComp","normal","UNARY_OPERATORS","UPDATE_OPERATORS","withoutInit","deprecated","validateOptional","validateType","sourced","sourceless","lval","classMethodOrPropertyCommon","classMethodOrDeclareMethodCommon","assertShape","unterminatedCalled","assertOptionalChainStart","ModuleDeclaration","defineInterfaceishType","isDeclareClass","validateOptionalType","_placeholders","_deprecatedAliases","PLACEHOLDERS","PLACEHOLDERS_ALIAS","Pattern","ALIAS_KEYS","PLACEHOLDERS_FLIPPED_ALIAS","bool","tSFunctionTypeAnnotationCommon","signatureDeclarationCommon","callConstructSignatureDeclaration","namedTypeElementCommon","fnOrCtrBase","unionOrIntersection","unaryOperator","BUILDER_KEYS","NODE_PARENT_VALIDATIONS","getType","typeNames","childValidator","validateChild","subkey","oneOfNodeOrValueTypes","validateField","shapeOf","_current","chainOf","validTypeOpts","validFieldKeys","store","defined","_store$opts$inherits$","_defined","additional","getOwnPropertyNames","_isReactComponent","_isCompatTag","_buildChildren","_assertNode","_exportNames","_createTypeAnnotationBasedOnTypeof","_createFlowUnionType","_createTSUnionType","_uppercase","_clone","_cloneDeepWithoutLoc","_cloneWithoutLoc","_inheritsComments","_removeComments","_index3","_index4","_ensureBlock","_toBindingIdentifierName","_toComputedKey","_toExpression","_toKeyAlias","_toStatement","_valueToNode","_index5","_appendToMemberExpression","_prependToMemberExpression","_removeProperties","_getFunctionName","_traverseFast","_shallowEqual","_isBinding","_isBlockScoped","_isImmutable","_isLet","_isNodesEquivalent","_isPlaceholderType","_isReferenced","_isScope","_isSpecifierDefault","_isType","_isValidES3Identifier","_isVar","_buildMatchMemberExpression","_index6","isReactComponent","appendToMemberExpression","getQualifiedName","nodesIn","bases","typeGroups","INHERIT_KEYS","prependToMemberExpression","prepend","CLEAR_KEYS","CLEAR_KEYS_PLUS_COMMENTS","getOwnPropertySymbols","isTSAnyKeyword","isTSBaseType","isTSUnionType","typeArgumentsKey","existingTypeArguments","newBindingsOnly","getNameFromLiteralId","getObjectMemberKey","traverseSimpleImpl","subNode","warnings","internal","captureShortStackTrace","stackTrace","shortStackTrace","lastNonEmptyLine","isFirstLine","isLastLine","isLastNonEmptyLine","trimmedLine","shallowEqual","isInterpreterDirective","isDirective","isDirectiveLiteral","isContinueStatement","isDebuggerStatement","isDoWhileStatement","isReturnStatement","isThrowStatement","isWhileStatement","isWithStatement","isArrayPattern","isImportExpression","isTemplateElement","isAwaitExpression","isBigIntLiteral","isClassAccessorProperty","isClassPrivateMethod","isStaticBlock","isBooleanLiteralTypeAnnotation","isNullLiteralTypeAnnotation","isClassImplements","isDeclareFunction","isDeclareInterface","isDeclareModule","isDeclareModuleExports","isDeclareTypeAlias","isDeclareOpaqueType","isDeclareVariable","isDeclareExportAllDeclaration","isDeclaredPredicate","isExistsTypeAnnotation","isFunctionTypeAnnotation","isFunctionTypeParam","isInferredPredicate","isInterfaceExtends","isInterfaceDeclaration","isInterfaceTypeAnnotation","isIntersectionTypeAnnotation","isNullableTypeAnnotation","isNumberLiteralTypeAnnotation","isObjectTypeAnnotation","isObjectTypeInternalSlot","isObjectTypeCallProperty","isObjectTypeIndexer","isObjectTypeProperty","isObjectTypeSpreadProperty","isOpaqueType","isQualifiedTypeIdentifier","isStringLiteralTypeAnnotation","isSymbolTypeAnnotation","isThisTypeAnnotation","isTypeofTypeAnnotation","isTypeAlias","isTypeParameter","isTypeParameterDeclaration","isTypeParameterInstantiation","isVariance","isEnumDeclaration","isEnumBooleanBody","isEnumNumberBody","isEnumStringBody","isEnumSymbolBody","isEnumBooleanMember","isEnumNumberMember","isEnumStringMember","isEnumDefaultedMember","isOptionalIndexedAccessType","isJSXAttribute","isJSXClosingElement","isJSXSpreadChild","isJSXNamespacedName","isJSXSpreadAttribute","isJSXFragment","isJSXOpeningFragment","isJSXClosingFragment","isNoop","isV8IntrinsicIdentifier","isArgumentPlaceholder","isBindExpression","isImportAttribute","isDecimalLiteral","isModuleExpression","isPipelineTopicExpression","isPipelineBareFunction","isPipelinePrimaryTopicReference","isTSParameterProperty","isTSDeclareFunction","isTSDeclareMethod","isTSCallSignatureDeclaration","isTSConstructSignatureDeclaration","isTSPropertySignature","isTSMethodSignature","isTSIndexSignature","isTSBooleanKeyword","isTSBigIntKeyword","isTSIntrinsicKeyword","isTSNeverKeyword","isTSNullKeyword","isTSNumberKeyword","isTSObjectKeyword","isTSStringKeyword","isTSSymbolKeyword","isTSUndefinedKeyword","isTSUnknownKeyword","isTSVoidKeyword","isTSThisType","isTSFunctionType","isTSConstructorType","isTSTypePredicate","isTSTypeQuery","isTSTypeLiteral","isTSTupleType","isTSOptionalType","isTSRestType","isTSNamedTupleMember","isTSIntersectionType","isTSConditionalType","isTSInferType","isTSParenthesizedType","isTSTypeOperator","isTSIndexedAccessType","isTSMappedType","isTSLiteralType","isTSExpressionWithTypeArguments","isTSInterfaceDeclaration","isTSTypeAliasDeclaration","isTSInstantiationExpression","isTSAsExpression","isTSSatisfiesExpression","isTSTypeAssertion","isTSEnumBody","isTSEnumDeclaration","isTSModuleDeclaration","isTSModuleBlock","isTSImportType","isTSExternalModuleReference","isTSNonNullExpression","isTSExportAssignment","isTSNamespaceExportDeclaration","isTSTypeParameterInstantiation","isTSTypeParameterDeclaration","isTSTypeParameter","isStandardized","isScopable","isBlock","isTerminatorless","isCompletionStatement","isConditional","isPatternLike","isLVal","isTSEntityName","isImmutable","isUserWhitespacable","isObjectMember","isUnaryLike","isImportOrExportDeclaration","isFlowDeclaration","isFlowPredicate","isEnumBody","isEnumMember","isMiscellaneous","isTypeScript","isTSTypeElement","isNumberLiteral","isRegexLiteral","isModuleDeclaration","isPlaceholderType","BLOCK_SCOPED_SYMBOL","isNodesEquivalent","val_a","val_b","placeholderType","targetType","isSpecifierDefault","RESERVED_WORDS_ES3_ONLY","isValidES3Identifier","reserved","tagName","maybeNode","_NODE_PARENT_VALIDATI","_NODE_PARENT_VALIDATI2","possibleNames","freeSelf","freeGlobal","objectProto","nativeObjectToString","symToStringTag","unmasked","nullTag","undefinedTag","getRawTag","symbolTag","isObjectLike","baseGetTag","NAN","iteratee","INFINITY","symbolProto","symbolToString","baseToString","arrayMap","baseToNumber","createMathOperation","augend","addend","reWhitespace","reTrimStart","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","baseTrim","MAX_INTEGER","toNumber","toFinite","remainder","FUNC_ERROR_TEXT","toInteger","asyncTag","funcTag","genTag","proxyTag","maskSrcKey","coreJsData","funcToString","funcProto","reRegExpChar","reIsHostCtor","reIsNative","isMasked","toSource","getValue","baseIsNative","getNative","metaMap","objectCreate","Ctor","baseCreate","WRAP_BIND_FLAG","bitmask","isBind","createCtor","nativeMax","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","MAX_ARRAY_LENGTH","LazyWrapper","baseLodash","realNames","otherFunc","LodashWrapper","chainAll","copyArray","lodash","wrapperClone","funcName","getFuncName","HOT_COUNT","HOT_SPAN","nativeNow","lastCalled","stamp","shortOut","baseSetData","reWrapDetails","reSplitDetails","reWrapComment","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseIndexOf","wrapFlags","arrayEach","arrayIncludes","setToString","insertWrapDetails","updateWrapDetails","getWrapDetails","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","wrapFunc","argPos","ary","isCurry","newHolders","newHoldersRight","newPartials","newPartialsRight","isLaziable","setWrapToString","reIsUint","nativeMin","oldArray","isIndex","PLACEHOLDER","resIndex","WRAP_CURRY_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_FLIP_FLAG","createHybrid","partialsRight","holdersRight","isAry","isBindKey","isFlip","getHolder","holdersCount","countHolders","composeArgs","composeArgsRight","replaceHolders","createRecurry","reorder","WRAP_REARG_FLAG","srcBitmask","newBitmask","isCommon","isCombo","mergeData","createCurry","createPartial","createBind","setter","guard","createWrap","objValue","baseAssignValue","customizer","isNew","assignValue","otherArgs","overRest","isLength","isArrayLike","assigner","baseRest","isIterateeCall","argsTag","baseIsArguments","freeExports","freeModule","moduleExports","nativeIsBuffer","stubFalse","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","freeProcess","nodeIsTypedArray","nodeUtil","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isBuff","skipIndexes","baseTimes","overArg","isPrototype","nativeKeys","arrayLikeKeys","baseKeys","createAssigner","nativeKeysIn","isProto","baseKeysIn","keysIn","srcIndex","reIsDeepProp","reIsPlainProp","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","arrayProto","assocIndexOf","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","isKey","castPath","toKey","baseGet","spreadableSymbol","baseFlatten","isStrict","isFlattenable","arrayPush","flatRest","baseAt","objectCtorString","getPrototype","domExcTag","methodNames","bindKey","baseSlice","reHasUnicode","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsOptJoin","rsSeq","reUnicode","hasUnicode","unicodeToArray","asciiToArray","strSymbols","stringToArray","chr","castSlice","createCaseFirst","upperFirst","accumulator","initAccum","basePropertyOf","reLatin","reComboMark","deburrLetter","reAsciiWord","reHasUnicodeWord","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsOrdLower","rsOrdUpper","rsEmoji","reUnicodeWord","hasUnicodeWord","unicodeWords","asciiWords","reApos","arrayReduce","words","deburr","createCompounder","capitalize","nativeIsFinite","precision","createRound","nativeCeil","lower","upper","baseClamp","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","isDeep","nativeGetSymbols","arrayFilter","stubArray","getSymbolsIn","keysFunc","symbolsFunc","baseGetAllKeys","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","dataView","cloneArrayBuffer","reFlags","symbolValueOf","float32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","nodeIsMap","baseIsMap","nodeIsSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","SetCache","setCacheAdd","setCacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalFunc","isPartial","othLength","arrStacked","othStacked","othValue","compared","arraySome","othIndex","cacheHas","convert","mapToArray","setToArray","equalArrays","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","baseProperty","basePropertyDeep","baseMatchesProperty","baseMatches","toIteratee","baseIteratee","baseConformsTo","baseConforms","iterable","createBaseFor","baseFor","eachFunc","collection","createBaseEach","baseForOwn","baseEach","arrayAggregator","baseAggregator","createAggregator","curry","curryRight","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","propsIndex","propsLength","mergeFunc","safeGet","assignMergeValue","isTyped","isArrayLikeObject","toPlainObject","baseMerge","baseMergeDeep","customDefaultsMerge","mergeWith","baseDelay","valuesLength","arrayIncludesWith","outer","valuesIndex","baseDifference","dividend","isDrop","baseWhile","castFunction","baseForRight","baseForOwnRight","arrayEachRight","baseEachRight","setToPairs","baseToPairs","createToPairs","reUnescapedHtml","reHasUnescapedHtml","escapeHtmlChar","reHasRegExpChar","arrayEvery","baseEvery","toLength","baseFill","baseFilter","findIndexFunc","createFind","baseFindKey","baseMap","funcs","prereq","createFlow","baseFunctions","createRelationalOperation","baseGt","baseHas","baseInRange","baseValues","arrays","caches","maxLength","mapped","castArrayLikeObject","baseIntersection","baseInverter","createInverter","baseInvoke","nodeIsArrayBuffer","baseIsArrayBuffer","nodeIsDate","baseIsDate","CORE_ERROR_TEXT","isMaskable","nodeIsRegExp","baseIsRegExp","weakSetTag","nativeJoin","strictLastIndexOf","baseLt","baseExtremum","baseSum","baseMean","actions","multiplier","multiplicand","symIterator","iteratorToArray","baseNth","customOmitClone","baseUnset","baseSet","basePickBy","pickBy","negate","comparer","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","orders","objCriteria","othCriteria","ordersLength","compareAscending","order","iteratees","baseSortBy","compareMultiple","baseOrderBy","arrayFunc","createOver","castRest","funcsLength","nativeFloor","unicodeSize","asciiSize","charsLength","baseRepeat","stringSize","strLength","createPadding","nativeParseInt","partialRight","basePick","previous","baseIndexOfWith","basePullAll","pullAll","basePullAt","nativeRandom","freeParseFloat","floating","rand","baseRandom","baseRange","createRange","baseReduce","arrayReduceRight","nativeReverse","arraySample","baseSample","shuffleSelf","arraySampleSize","baseSampleSize","arrayShuffle","baseShuffle","baseSome","MAX_ARRAY_INDEX","retHighest","valIsNaN","valIsUndefined","setLow","HALF_MAX_ARRAY_LENGTH","baseSortedIndexBy","baseSortedIndex","baseSortedUniq","minuend","subtrahend","interceptor","stringEscapes","reInterpolate","INVALID_TEMPL_VAR_ERROR_TEXT","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reForbiddenIdentifierChars","reEsTemplate","reNoMatch","reUnescapedString","settings","templateSettings","assignInWith","customDefaultsAssignIn","isEscaping","isEvaluating","importsKeys","importsValues","interpolate","reDelimiters","sourceURL","escapeValue","esTemplateValue","evaluateValue","escapeStringChar","attempt","debounce","baseWrapperValue","isArrLike","chrSymbols","charsStartIndex","charsEndIndex","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","omission","newEnd","reEscapedHtml","reHasEscapedHtml","unescapeHtmlChar","createSet","seenIndex","baseUniq","idCounter","unzip","updater","baseUpdate","thru","wrapped","baseXor","assignFunc","valsLength","baseZipObject","unzipWith","chunk","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","flattenDeep","flattenDepth","fromPairs","intersectionBy","intersectionWith","lastIndexOf","nth","pull","pullAllBy","pullAllWith","pullAt","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniqBy","uniqWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","countBy","findLast","flatMap","flatMapDeep","flatMapDepth","forEachRight","groupBy","invokeMap","keyBy","orderBy","reduceRight","sample","sampleSize","shuffle","sortBy","defer","delay","flip","overArgs","rearg","spread","throttle","unary","castArray","cloneDeepWith","cloneWith","conformsTo","isElement","isEqual","isEqualWith","isMatch","isMatchWith","isNil","isSafeInteger","toSafeInteger","ceil","maxBy","mean","meanBy","minBy","subtract","sumBy","inRange","assignIn","assignWith","defaultsDeep","findKey","findLastKey","forIn","forInRight","forOwnRight","functionsIn","invert","invertBy","invoke","mapKeys","mapValues","omit","omitBy","pick","setWith","toPairs","toPairsIn","unset","updateWith","valuesIn","commit","plant","tap","toIterator","toJSON","wrapperChain","camelCase","kebabCase","lowerCase","lowerFirst","padEnd","padStart","snakeCase","startCase","toLower","toUpper","trimEnd","trimStart","truncate","upperCase","bindAll","cond","conforms","defaultTo","flowRight","matchesProperty","methodOf","nthArg","over","overEvery","overSome","propertyOf","rangeRight","stubObject","stubString","stubTrue","toPath","uniqueId","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","isRight","getView","iterLength","takeCount","iterIndex","VERSION","LAZY_WHILE_FLAG","mixin","isObj","_mixin","seq","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","lazyClone","lazyReverse","lazyValue","mapDataSet","AttributeUpdateType","animate","ratio","curve","rePathCommand","enumCommandMap","commandFuncs","Curve","cubicCalc","one","Point","curveType","startPoint","curveClass","slope2","genLinearClosedTypeSegments","aCP1x","aCP1y","aCP2x","aCP2y","aY","cmd","customPath","easing","dy","generatorPathEasingFunc","NAMED_TAG","exporter","metadataKey","annotationTarget","paramOrPropertyMetadata","indexOrPropertyDescriptor","injectBase","ContributionProvider","serviceIdentifier","Hook","EnvContribution","Application","getAST","fillStyle","tempWidth","compatible","metrics","ascent","textMeasure","getContextFont","fontSizeScale","BindingScopeEnum","constructorFunc","constructorArgsMetadata","namedConstraint","bindingToSyntax","setModuleId","CanvasFactory","disc","_v1","quadraticAt","x0","DEFAULT_ABSOLUTE_TOLERATE","isNumberClose","DEFAULT_RELATIVE_TOLERATE","absTol","relTol","windowWH","defaultThemeObj","breakTag","DefaultStateAnimateConfig","ColorType","ResourceLoader","_strokeVec4","isFullStroke","noRotateCharList","genNumberType","visible","TransformUtil","layerMode","IncrementalDrawContribution","updateBounds","graphic","pickerService","ShadowRootPickItemInterceptorContribution","bindContributionProvider","getContainerSize","defaultHeight","getComputedStyle","computedWidth","computedHeight","anchor3d","_anchor","AutoEnablePlugins","dpr","zIdxArray","childMap","defaultZIndex","dirtyBounds","background","strokeVisible","strokeOpacity","y32","innerRadius","ArcRenderContribution","disableStroke","defined0","drawConnect","lastCurve","attribute","defaultAttribute","lastDefined","bottomList","stroke","areaAttribute","preLoadAllModule","pluginKey","pluginClass","cross","lastIdx","calculateAnchorOfBounds","anchorType","nativeContainer","wrapContainer","unmount","lightDir","DefaultConfig","LRU","ConicalCanvas","conicalCanvas","ColorInterpolate","ConicalPatternStore","clockwise","MathPickerContribution","contributions","pickServiceInterceptorContributions","DefaultCanvasPickerService","baseWindow","BaseEnvContribution","clientX","nativeEvent","loadBrowserEnv","NodeCanvas","loadNodeEnv","updateBoundsOfCommonOuterBorder","theme","aabbBounds","shadowBlur","outerBorder","defaultOuterBorder","arcTheme","arcAttribute","arc","cornerRadiusEnd","limitedOcr","maxOuterCornerRadius","cornerRadiusStart","cy","canvasRenderer","DefaultCanvasArcPicker","CanvasPickerContribution","CanvasArcPicker","DefaultMathArcPicker","MathArcPicker","startAngle","GraphicRender","Arc3dRender","pickPoint","globalMatrix","pickContext","DefaultCanvasArc3dPicker","CanvasArc3dPicker","DefaultCanvasAreaPicker","CanvasAreaPicker","DefaultMathAreaPicker","MathAreaPicker","innerBorder","doInnerBorder","borderStyle","circleAttribute","circle","DefaultCanvasCirclePicker","CanvasCirclePicker","DefaultMathCirclePicker","MathCirclePicker","drawContext","GlyphRender","CanvasGlyphPicker","DefaultMathGlyphPicker","MathGlyphPicker","renderBorder","doStroke","ImageRender","CanvasImagePicker","DefaultMathImagePicker","MathImagePicker","LineRender","DefaultCanvasLinePicker","CanvasLinePicker","DefaultMathLinePicker","MathLinePicker","pathAttribute","DefaultCanvasPathPicker","CanvasPathPicker","DefaultMathPathPicker","MathPathPicker","polygonTheme","POLYGON_UPDATE_TAG_KEY","drawPolygon","PolygonRender","DefaultCanvasPolygonPicker","CanvasPolygonPicker","DefaultMathPolygonPicker","MathPolygonPicker","faces","pyramid3d","pyramidAttribute","Pyramid3dRender","DefaultCanvasPyramid3dPicker","CanvasPyramid3dPicker","tb2","RectRenderContribution","DefaultBaseInteractiveRenderContribution","rectAttribute","picked","CanvasRectPicker","MathRectPicker","Rect3DRender","DefaultCanvasRect3dPicker","CanvasRect3dPicker","leftInt","topInt","rightInt","bottom","bottomInt","paragraph","baseline","descent","fillVisible","fVisible","richtext","RichTextRender","CanvasRichTextPicker","halfS","transX","transY","triangleH","rectW","StrokeSymbol","BaseSymbol","Arrow2LeftSymbol","arrow2Left","Arrow2RightSymbol","arrow2Right","Arrow2UpSymbol","arrow2Up","Arrow2DownSymbol","arrow2Down","LineVSymbol","lineV","LineHSymbol","lineH","lastP","builtinSymbolsMap","getAllMatches","allmatches","tagname","childNode","prettify","compress","compressedObj","tagObj","newJpath","xml","boundStroke","symbolType","parsedPath","CanvasSymbolPicker","DefaultMathSymbolPicker","MathSymbolPicker","bbox","fontFamily","textTheme","doFill","sVisible","textAttribute","fillCb","strokeCb","transform3dMatrixToContextMatrix","drawText","offsetX","offsetY","_y","TextRender","CanvasTextPicker","MathTextPicker","clip","linesLayout","swingEase","deltaX","WILDCARD","clock","trackingData","normalizedEvents","TimeOutTickHandler","_e","ManualTickHandler","getLayoutFromWidget","character","classC","cId","st","actInfo","act","ProcessorRegistry","characterType","processor","characterId","actionName","actionSpec","globalTicker","defaultGlobalTimeline","arrayParser","idIndex","fieldInfo","sortInfo","VChartId","detail","newTokenToLegacyToken","palette","fold","EOL","EOF","QUOTE","RETURN","objectConverter","columns","customConverter","row","inferColumns","columnSet","formatYear","year","formatDate","hours","minutes","seconds","milliseconds","reFormat","DELIMITER","parseRows","eol","preformatBody","formatRow","csv","dsv","csvParse","tsv","tsvParse","series","ChartConstructor","regionType","colorScheme","seriesType","seriesMarkInfoMap","bar3d","circularProgress","getFunnelTheme","PREFIX","circlePath","axisBand","commonAxis","axisLinear","axisRadius","DataZoomHandlerSymbolType","getTextStyle","fontSizeKey","fillKey","discreteLegend","getCommonLabelTheme","markPoint","queryToken","tokenKey","ThemeManager","visitPoints","orient","targetDimensionInfo","ComposedEventMapper","eType","composedEvent","hasRaf","encoder","bubble","chart","listenerParams","streamGeometry","geometry","streamGeometryType","streamObjectType","streamLine","streamPolygon","geometries","coordinate","Adder","adder","bv","av","epsilon2","halfPi","quarterPi","degrees","radians","atan","atan2","cos","exp","sin","sqrt","acos","asin","x00","y00","y0","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","area","areaPointFirst","areaPoint","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","dx","centroidPointFirstRing","centroidPointRing","PathContext","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","projection","projectionStream","contextStream","pointRadius","pathArea","pathMeasure","pathBounds","pathCentroid","cloneFeature","cloneProperties","cloneGeometry","cloneFeatureCollection","feature","deepSlice","coords","coord","getCoords","booleanClockwise","ring","factors","earthRadius","featureCollection","lengthToRadians","factor","coordEach","excludeWrapCoord","stopG","geometryMaybeCollection","isGeometryCollection","wrapShrink","coordIndex","isFeatureCollection","isFeature","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","featureEach","geomEach","featureProperties","featureBBox","featureId","flattenEach","rewindFeature","rewindLineString","rewindPolygon","lineCoords","mutate","geoPathInstance","kx","ky","topology","transformPoint","arcs","polygon","registerDataSetInstanceTransform","dataSet","unregisterMapSource","geoSourceMap","_deep","existDataView","dependency","parseFunctionType","signal","datumOrGrammarInstance","grammar","grammarInstance","transformSpecValue","moveToHead","Heap","eventConfig","touchKey","touch","defineSrPosition","client","EVENT_SOURCE_WINDOW","SIGNAL_WIDTH","padding","commonAttributes","nextAttrs","storedAttrs","graphicAttributes","graphicItem","groupedData","currentData","prevData","fieldStr","fieldSingle","prevLength","initAttrs","groupKey","DEFAULT_PADDING","defaultMarkTheme","newGraphicItem","DefaultKey","prevChild","regionCombindInteractions","region","stateValue","USER_LAYOUT_RECT_LEVEL","DEFAULT_LAYOUT_RECT_LEVEL","LayoutLevel","CompilableBase","updateFunc","noRender","chartSpec","startItems","layout","singleLineItems","chartLayoutRect","relativeRegion","calculateTicksOfSingleValue","tickCount","noDecimals","hexToRgb","interpolateNumber","interpolateDate","aVal","clamper","untransformer","GradientType","MultiDatumMark","is3DMark","stateInfo","styleConverter","stateStyle","foregroundColorOrigin","foregroundColor","backgroundColor","alternativeColor","StateValue","indexEnd","animationConfig","quadrant","xGroupTexts","baseMarkGroup","labelComponentMap","vx","xDistance","cachedEvent","cachedEvents","_a","channel","toKeys","computePoints","animationParameters","custom","animationOptions","typeConfig","arranger","ExpressionFunction","actionSource","chartSpecInfo","globalInstance","DEFAULT_SHAPE_SIZE","itemKey","ElementSelectByGraphicName","ToggleStateMixin","newStatedElements","prevStatedElements","reverseState","initSVGDataSet","svgDataSet","unregisterSVGSource","svgSourceMap","morphConfig","_c","poptip","addVChartProperty","TimeUtil","_g","_seriesField","maxInArray","dataFieldInKey","invalidType","Appear_ClipIn","clipIn","clipDimension","scaleIn","attributeAngle","finalAngle","oneByOne","hasAnimation","DEFAULT_SMOOTH_INTERPOLATE","DEFAULT_CLOSE_STROKE_JOIN","lineLikeSeriesMark","isSeriesMark","userCurveType","areaCurveType","symbolMark","newIndices","lastY","regions","domain","domain1","s1Extendable_max","targetAxis","service","axis","labelOffset","getComponentThemeFromOption","chartTheme","componentSpec","itKey","oldEl","GroupFadeOut","ACustomAnimate","scaleParser","gridMark","autoRotate","vector1","DEFAULT_AXIS_THEME","parsedPadding","symbolPlaceWidth","richTextAttrs","richTextAttributeTransform","genNormalBounds","getCircleVerticalVector","inside","lastHover","getElMap","axisContainer","labelRotateAngle","overflowLimitLength","limitLength","alignAxisLabels","containerSize","align","axisVector","tickValue","axisBreakGroup","heightLimit","tickLength","labelHeight","textBaseline","lastScaleGrammar","axisTheme","axisPoints","alternateColor","gridType","gridAttribute","tickSegment","targetElement","setDomain","breaks","bins","scopeType","rangeSize","tick","newRange","_b","regionId","regionIdList","currentChartSpecInfo","pickKeys","DEFAULT_CHART_WIDTH","DEFAULT_CHART_HEIGHT","stackValue","isOverall","barBackgroundData","dimensionItems","valueInScaleRange","seriesSpec","visualSpec","sizeSpec","ScatterChart","Intersection","compareIntersection","startInside","subject","link","isSubject","spherical","cartesian","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","cartesianNormalizeInPlace","longitude","sinPhi","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","phiArc","ascendingComparator","ascending","ascendingBisect","bisector","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","lineEnd","pointRing","ringStart","ringEnd","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","circleStream","cosRadius","sinRadius","circleRadius","cr","smallRadius","notHemisphere","c0","v00","point2","two","n2n2","n1n2","n1xn2","uu","polar","meridian","q1","clipMax","clipMin","clipRectangle","corner","comparePoint","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","polygonStart","polygonEnd","polygonInside","a0","b0","cleanInside","linePoint","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","forward","transformer","TransformStream","fit","fitBounds","geoStream","boundsStream","fitExtent","extent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","project","delta2","resample","resampleNone","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","scaleTranslateRotate","cosAlpha","sinAlpha","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","clipCircle","conicProjection","cylindricalEqualAreaRaw","conicEqualAreaRaw","sy0","r0","r0y","conicEqualArea","multiplex","streams","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","azimuthalRaw","cx","azimuthalInvert","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","clipExtent","reclip","tany","conicConformalRaw","cy0","fy","equirectangularRaw","conicEquidistantRaw","gy","nx","A1","A2","A3","A4","equalEarthRaw","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","projectionType","projectionOptions","projectionProperties","lonValue","longitudeField","lon","DeskTopTrigger","MobileTrigger","eventObj","regionOrSeries","delayType","delayTime","specInfos","t_x","pathGroup","originalConfig","newSpec","startAngleFromSpec","endAngleFromSpec","getLayoutRect","getCenter","layoutRadius","registerPie3dSeries","registerPie3dAnimation","isArraySpec","componentName","textX","labelStyle","roseMark","animationType","RadarChart","relatedAxis","barMaxWidth","CommonChart","activeType","linkDotInfo","LinkSeries","dataToPosition","objFlat","dataCollect","DEFAULT_GRID_BACKGROUND","DotSeries","SCROLL_BAR_DEFAULT_SIZE","rowNum","BaseHistogramChartSpecTransformer","subTickData","angleAxis","pointerSpec","backgroundSeries","DEFAULT_ROTATE_ANGLES","wordCount","WordCloudScaleInAnimation","triangleForward","spirals","archimedeanSpiral","rectangularSpiral","imageData","cacheCanvas","prevWidth","fontWeight","fontSize","segmentationInput","layoutConfig","segmentationOutput","regionWords","placedFillingWords","fillingTimes","registerWordCloudSeries","register3DPlugin","viewDataTransform","funnelTransformMark","outerLabelMark","labelMark","progress","realCornerRadius","rangeColumnPresetAnimation","labelSpec","RangeColumn3dSeries","sunburstPresetAnimation","flattenNodes","hasMaxDepth","SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD","hierarchyData","DrillEnum","outerRadius","gap","viewBox","nodeValue","minValue","sumValue","upstreamData","indexData","dimensionTree","groupData","waterfallAnimationParams","outlierValues","outliersField","markName","animateAttributes","encodeValue","sankeyNodePresetAnimation","linkDatum","lowValue","highValue","relativeX","viewX","scrollContainer","loadScrollbar","scrollbarModule","userEncodeRes","sizeX","registerHeatmapAnimation","valueGetter","ripple","layerTickData","niceDomain","CartesianLogAxis","slience","CartesianSymlogAxis","isHorizontal","loadBaseLegend","disableTriggerEvent","legendItem","seriesField","eachSeries","seriesData","scaleSpec","statisticData","datumField","seriesMin","handlerText","getSizeHandlerPath","centerX","railWidth","continuousLegendFilter","continuousLegendDataMake","legendData","finalSpec","cacheData","tooltipData","LayoutType","triggerConfig","trigger","xCrossHairInfo","xAxisMap","relativeY","yAxisMap","vertical","updateAttrs","radiusCrossHairInfo","enableRemain","angleCrossHairInfo","cacheAngleCrossHairInfo","formatMethod","angleAxisMap","radiusAxisMap","axisMap","currValue","discrete","crosshairInfo","getNewDomain","newDomain","axisScale","simplifyRadialDist","sqTolerance","DEFAULT_HANDLER_PATH","yScale","DEFAULT_INDICATOR_THEME","titleStyle","AGGR_TYPE","domainNum","regionStartLayoutStartPoint","relativeSeries","registerImage","computeOffsetForlimit","forceUpdateTag","dispatchClickState","graphicFadeIn","markLabel","getInsertPoints","xField","markerFilter","transformState","markLineAttrs","tangAng","subTitleAlign","subTitleVerticalAlign","DEFAULT_STATES","doAngleProcess","iconPlay","defaultControllerAttributes","transformToGraphic","markSpec","dataLabels","hover","registerLabelMark","LabelMark","labelInfo","STACK_FIELD_TOTAL","deltaXYToAngle","itemPosition","newItemPosition","targetSymbol","DEFAULT_BRUSH_ATTRIBUTES","brush","componentIndex","operateMask","curPair","extraWH","relativeOverlapItems","overlapItems","xAxis","popTipWidth","poptipHeight","backgroundStyle","maxWH","deltaH","contentShape","interactiveLayer","TOOLTIP_PREFIX","registerComponentPlugin","createSymbol","shapeType","tooltipSpec","chilren","setStyleToDom","getRichTextAttribute","itemAttr","textLines","textConfig","shadow","commonSpaceRow","itemAttrs","itemHeight","layerCanvas","panel","formatDecimal","formatGroup","grouping","thousands","coefficient","formatTrim","registerChartPlugin","mergeChartOption","performanceHook","pushHookToTemp","chartStage","stageMatrix","vchartStage","nextP","pointInChart","chartTypes","chartModule","DEFAULTFONTSIZE","paddingOrigin","_table","axisRange","getRange","axisOption","titleAngle","titleTextStyle","indicatorKey","indicatorObj","checkHasCartesianChart","indicatorsDefine","isHasCartesianChart","columnObj","elm","getCellRange","cellRange","createArray","ingoreNoneValueMerge","timer","record","maybePromiseOrValue","fieldGet","isFieldAssessor","dataSourceObj","dataConfig","another","dataSourceEventIds","bodyStyle","headerStyle","checkboxThemeStyle","radioThemeStyle","columnStyle","Env","scrollStyle","TABLE_EVENT_TYPE","useRAF","newSize","windowSizeNotChange","frozenRowCount","getAxisStyle","axisStyle","getSingleAxisStyle","superTheme","defaultStyle","TableTheme","fillOpacity","dom","needRestore","customMerge","componentId","isHeaderCustomLayout","customRenderObj","themeIconsColor","calcKeepAspectRatioSize","maxWidth","maxHeight","calcStartPosition","contentWidth","contentHeight","paddingLeft","paddingRight","paddingTop","paddingBottom","moreThanMaxCharacters","icon","cellGroup","cellTheme","strokeArrayWidth","getCellBorderStrokeWidth","dealPromiseData","dataPromise","tabel","shadowRect","customElementsGroup","cellWidth","cellHeight","utilCheckBoxMark","suffixWidth","utilTextMark","rowStart","startCol","newHeights","getCellMergeRange","scene","mergeStartCol","cell","updateColunmWidth","rightBottomColumn","tableMenuInfo","highlightIndex","menuStyle","iconOption","columnMoverLineColor","getColX","isRightFrozen","componentGroup","labelFontSize","columnResizeLabelBack","rectAttributes","cornerRadius","chartInstance","formatResult","colStart","colEnd","groupAttribute","strokeArrayColor","isWidthNumber","widthInfo","distCol","bodyColGroup","moveColumnGroup","proxy","screenLeftX","distEndCol","colGroup","screenTopRow","syncBottomRow","columnGroup","cellPos","changedCells","defaultColWidth","totalBodyWidth","totalActualBodyColCount","totalActualBodyRowCount","moveHeaderPosition","updateColStart","updateColEnd","updateRowStart","updateRowEnd","moveType","columnWidth","columnHeaderGroup","selectComp","visibleCellRange","bodyClickBorderColor","moveSelectingRangeComponentsToSelectedRangeComponents","rangeComponent","deleteLastSelectedRangeComponents","rowUpdatePos","_getUpdateRowIndexUseCellNode","addRows","removeRows","_getUpdateRowIndex","internalProps","frozenBodyDomContainer","updateChartGraphicSize","cellNode","createContainerGroup","rightFrozenGroup","bottomFrozenGroup","updateContainerChildrenX","containerGroup","baseIcon","dealWithIcon","iconConfig","borderLineDash","dealWithAnimationAppear","temporarilyUpdateSelectRectStyle","selectedRangeComponents","updateRowHover","scenegraph","colOrigin","selectRanges","selectMode","singleStyle","highlightScope","cellPosContainHeader","dealFreeze","sortState","currentRange","extendSelectRange","updateDrill","drillDown","drillUp","headerType","adjustMoveHeaderTarget","sourceCellRange","targetCellRange","targetCell","getIconAndPositionFromTarget","updateResizeColumn","xInTable","yInTable","recordIndex","dataIndex","updateResizeRow","detaY","customSelectedRangeComponents","dimension","deltaY","cellGoup","eventManager","eventArgsSet","stateManager","targetCol","targetRow","cells","dimensionKey","titleShowIndex","iconResults","iconDefine","createElement","classNames","CLASSNAME","_showSort","sortIcon","headerC","frozen","absoluteX","startRow","startBottom","cellStyleKeys","customStyleIds","styleOption","customCellStyle","EventHandler","editCellTrigger","changedValue","fixUpdateRowRange","diffPositions","updateCells","rowEnd","generateAggregationForColumn","innerOffsetTop","tickWidth","labelWidth","iconHeight","spaceBetweenTextAndIcon","legend","BaseMenu","rootElement","Menu","dropDownMenuOptions","BaseTooltip","tooltipInstanceInfo","tooltipOptions","barHeight","barRectPosi","barRect","forceTickCountNice","registerListTreeStickCellPlugin","diffCellAddress","oldCellIds","newCellIds","oldRowHeaderCellPositons","columnHeaderStart","updateCellPositions","rowDimensionKeys","indicatorObject","flatRowKey","rowKey","strArr","joinChar","colKey","toComputeIndicatorKeys","cellDimensionPath","rowPath","layoutMap","vTable","vtableStage","animationAppear","SpecialValueType","repeatCount","isUTC","formattedDecimalPart","valueAbs","getContentValue","getLabelContent","formatConfig","enableMap","diffConfig","themeRuntimeKeyList","commonModelInfo","model","seriesId","markId","graphicPath","DeletedAttr","targetConfig","selector","seriesList","SMALL","innerPoints","polygonArea","midPoint","angleDiff","circleList","fromC","overlap","zerosM","zeros","areas","setOverlaps","weight","circles","a_high","maxIterations","solution","clusters","xOffset","setId","getOverlappingCircles","overlapMark","VennSeries","getShapes","shapesType","regionWidth","marginLeft","marginRight","common","centerY","WaveScatterCharacter","CharacterChart","subSelector","textStyle","textAlign","lineY","vchart","RankingBarRuntime","LineRuntime","rawAttribute","SeriesSpecRuntime","VCHART_DATA_INDEX","CommonLabelStyleMap","CommonMarkAttribute","seriesMatch","StroyAllDataGroup","dataGroupStyle","totalLabel","CellStyleRuntime","RowHeightRuntime","getTableTypeFromSpec","ColVisibleRuntime","RowVisibleRuntime","ColStyleRuntime","RowStyleRuntime","ContentColStyleRuntime","ContentRowStyleRuntime","getPayload","globalStartTime","totalStartTime","commonFade","opacityMap","shouldReverse","getCustomParams","delayPerTime","enterPerTime","disappear","checkArrayOrder","getCharacterParentGraphic","graphicStyle","isRun","appearTransformFunc","defaultPayload","vchartPlayer","canDoGraphicAnimation","animationParams","setInitAttributes","appear","toY","BaseVisibility","styleList","LOTTIE_NUMBER_TYPE","LottieRuntime","actionType","pathTarget","DragComponent","transformDeltaWithStage","subMatrix","out2","out1","TransformController","AbstractComponent","editSelection","actionInfo","getDefaultCharacterConfig","lineInfo","createStoreImpl","createState","setState","nextState","previousState","getState","getInitialState","initialState","subscribe","createStore","useStore","createImpl","useBoundStore","createSchemaSlice","createCodeSlice","useDsv","VStory","Chart","useRef","useEffect","arrayBar","ArrayBar","dsl","story","player","CodeEditor","setSchema","setCode","useState","handleExec","useCallback","ReactDOM","React","App"],"mappings":"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AAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,OAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,EAAE,QAAS,GAAG,QAAQ,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,K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AAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,QAAS,KAAK,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,QAAS,KAAK,QAAS,KAAK,QAAS,KAAK,QAAS,GAAG,QAAS,GAAG,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,OAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,OAAQ,GAAG,QAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAQ,EAAE,QAAS,GAAG,QAAS,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,I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AAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,K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AAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,WAAW,KAAK,UAAW,GAAG,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW,EAAE,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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AAK,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,SAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,Y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GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAE3jDC,EAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,IAAI,CAK/0B,SAASC,EAAc31K,CAAY,CAAE1Y,CAAsB,EACzD,IAAImC,EAAM,MACV,IAAK,IAAI9J,EAAI,EAAGmF,EAASwC,EAAIxC,MAAM,CAEjC,AAFmCnF,EAAImF,IAEnC2E,CAAAA,AADJA,CAAAA,GAAOnC,CAAG,CAAC3H,EAAE,AAAD,EACFqgB,CAAG,EAFkCrgB,GAAK,EAKpD,GAAI8J,AADJA,CAAAA,GAAOnC,CAAG,CAAC3H,EAAI,EAAE,AAAD,GACLqgB,EAAM,MAAO,GAE1B,MAAO,EACT,CAIO,SAAS41K,EAAkB51K,CAAY,SAC5C,AAAIA,EAAO,GAA6BA,AAAS,KAATA,EACpCA,GAAQ,KACRA,EAAO,GAA6BA,AAAS,KAATA,EACpCA,GAAQ,MACRA,GAAQ,MAERA,GAAQ,KAAQu1K,EAAwBx5D,IAAI,CAAC1yH,OAAOglJ,YAAY,CAACruI,IAG9D21K,EAAc31K,EAAMy1K,IAC7B,CAIO,SAASI,EAAiB71K,CAAY,SAC3C,AAAIA,EAAO,GAAyBA,AAAS,KAATA,EAChCA,EAAO,KACPA,CAAAA,EAAO,EAAH,IACJA,GAAQ,KACRA,EAAO,GAA6BA,AAAS,KAATA,EACpCA,GAAQ,MACRA,GAAQ,MACHA,GAAQ,KAAQw1K,EAAmBz5D,IAAI,CAAC1yH,OAAOglJ,YAAY,CAACruI,IAGnE21K,EAAc31K,EAAMy1K,IACpBE,EAAc31K,EAAM01K,KAExB,CAIO,SAASrH,EAAiB1vL,CAAY,EAC3C,IAAIm3L,EAAU,GACd,IAAK,IAAIn2L,EAAI,EAAGA,EAAIhB,EAAKmG,MAAM,CAAEnF,IAAK,CAKpC,IAAImzE,EAAKn0E,EAAK8vJ,UAAU,CAAC9uJ,GACzB,GAAI,AAACmzE,CAAAA,AAAK,MAALA,CAAU,GAAO,OAAUnzE,EAAI,EAAIhB,EAAKmG,MAAM,CAAE,CACnD,IAAMixL,EAAQp3L,EAAK8vJ,UAAU,CAAC,EAAE9uJ,GAC3Bo2L,CAAAA,AAAQ,MAARA,CAAa,GAAO,OACvBjjH,CAAAA,EAAK,MAAW,CAACA,CAAAA,AAAK,KAALA,CAAS,GAAM,EAAC,EAAMijH,CAAAA,AAAQ,KAARA,CAAY,CAAC,CAExD,CACA,GAAID,EAEF,IADAA,EAAU,GACN,CAACF,EAAkB9iH,GACrB,MAAO,EACT,MACK,GAAI,CAAC+iH,EAAiB/iH,GAC3B,MAAO,EAEX,CACA,MAAO,CAACgjH,CACV,C,q6BzF9GA,IAAAE,EAAA3gL,EAAA,MAKA4gL,EAAA5gL,EAAA,K,2M0FLA,MAsCU,CACN,aACA,YACA,MACA,UACA,UACA,YACA,SACA,SACA,QACD,GACW,CAAC,OAAQ,YAAW,CAE5B6gL,EAAW,IAAI5vK,IAlDV,CACP,QACA,OACA,QACA,WACA,WACA,UACA,KACA,OACA,UACA,MACA,WACA,KACA,SACA,SACA,QACA,MACA,MACA,QACA,QACA,OACA,MACA,OACA,QACA,QACA,UACA,SACA,SACA,OACA,OACA,QACA,KACA,aACA,SACA,OACA,SACD,EAeG6vK,EAAyB,IAAI7vK,OAC7B8vK,EAA6B,IAAI9vK,OAKhC,SAAS+vK,EAAe7kC,CAAY,CAAE8kC,CAAiB,EAC5D,OAAQA,GAAY9kC,AAAS,UAATA,GAAqBA,AAAS,SAATA,CAC3C,CAOO,SAAS11B,EAAqB01B,CAAY,CAAE8kC,CAAiB,EAClE,OAAOD,EAAe7kC,EAAM8kC,IAAaH,EAAuBz2J,GAAG,CAAC8xH,EACtE,CAMO,SAAS+kC,EAA6B/kC,CAAY,EACvD,OAAO4kC,EAA2B12J,GAAG,CAAC8xH,EACxC,CAOO,SAASglC,EACdhlC,CAAY,CACZ8kC,CAAiB,EAEjB,OACEx6D,EAAqB01B,EAAM8kC,IAAaC,EAA6B/kC,EAEzE,CAEO,SAAS31B,EAAU21B,CAAY,EACpC,OAAO0kC,EAASx2J,GAAG,CAAC8xH,EACtB,C,sGC/FA,GAAM,CAAEn+I,IAAAA,CAAAA,CAAK,CAAGzC,KAShB,SAAS6lL,EAAY/oL,CAAS,CAAEC,CAAS,EACvC,IAAI2N,EAAI,EAAE,CACRmG,EAAc,EAAE,CAChB9hB,EACAE,EACIgB,EAAI6M,EAAE5I,MAAM,CAChByc,EAAI5T,EAAE7I,MAAM,CACd,GAAI,CAACjE,EACH,OAAO0gB,EAET,GAAI,CAACA,EACH,OAAO1gB,EAET,IAAKhB,EAAI,EAAGA,GAAK0hB,EAAG1hB,IAClByb,CAAC,CAACzb,EAAE,CAAGA,EAET,IAAKF,EAAI,EAAGA,GAAKkB,EAAGlB,IAAK,CACvB,IAAK8hB,EAAI,CAAC9hB,EAAE,CAAEE,EAAI,EAAGA,GAAK0hB,EAAG1hB,IAC3B4hB,CAAC,CAAC5hB,EAAE,CACF6N,CAAC,CAAC/N,EAAI,EAAE,GAAKgO,CAAC,CAAC9N,EAAI,EAAE,CAAGyb,CAAC,CAACzb,EAAI,EAAE,CAAGwT,EAAIiI,CAAC,CAACzb,EAAI,EAAE,CAAEyb,CAAC,CAACzb,EAAE,CAAE4hB,CAAC,CAAC5hB,EAAI,EAAE,EAAI,EAEvEyb,EAAImG,CACN,CACA,OAAOA,CAAC,CAACF,EAAE,AACb,CAWO,SAAS+9J,EAAehiK,CAAW,CAAEhM,CAAsB,EAChE,IAAMolL,EAAYplL,EAAIvS,GAAG,CAASorH,GAAMssE,EAAYtsE,EAAI7sG,IACxD,OAAOhM,CAAG,CAAColL,EAAUjiD,OAAO,CAACphI,KAAOqjL,IAAY,AAClD,C,2R3F/CA,IAAAC,EAAAthL,EAAA,MACAuhL,EAAAvhL,EAAA,K,8G4FDA,IAAAuhL,EAAAvhL,EAAA,KAEO,OAAM8pK,EAeX0X,wBAAwBh1L,CAAe,CAAEi1L,CAA2B,CAAQ,CAC1E,IAAMC,EAAmB3iL,OAAOsE,IAAI,CAACo+K,GACrC,IAAK,IAAME,KAAU5iL,OAAOsE,IAAI,CAAC7W,GAC/B,GAAI,CAACk1L,EAAiBp2K,QAAQ,CAACq2K,GAC7B,MAAM,AAAIj2L,MACR,IAAI,CAACs+K,aAAa,CAAC,CAAC,CAAC,EAAE2X,EAAO;gBACxC,EAAkB,GAAA1X,EAAAA,cAAc,AAAD,EAAE0X,EAAQD,GAAkB,EAAE,CAAC,EAI5D,CAIAE,sBACEt4L,CAAY,CACZ4B,CAAe,CACf4wI,CAAgB,CACH,QACb,AAAI5wI,AAAUkB,KAAAA,IAAVlB,EACK4wI,GAEP,IAAI,CAACsuC,SAAS,CACZ,AAAiB,WAAjB,OAAOl/K,EACP,CAAC,CAAC,EAAE5B,EAAK,2BAA2B,CACtC,EAEK4B,EACT,CAEA22L,qBACEv4L,CAAY,CACZ4B,CAAc,CACd4wI,CAAgB,CACJ,QACZ,AAAI5wI,AAAUkB,KAAAA,IAAVlB,EACK4wI,GAEP,IAAI,CAACsuC,SAAS,CACZ,AAAiB,UAAjB,OAAOl/K,EACP,CAAC,CAAC,EAAE5B,EAAK,0BAA0B,CACrC,EAEK4B,EACT,CASAk/K,UAAUnD,CAAkB,CAAEtlK,CAAe,CAAQ,CACnD,GAAI,CAACslK,EACH,MAAM,AAAIv7K,MAAM,IAAI,CAACs+K,aAAa,CAACroK,GAEvC,CAEAqoK,cAAcroK,CAAe,CAAU,CACrC,MAAO,CAAC,EAAE,IAAI,CAAC7C,UAAU,CAAC,EAAE,EAAE6C,EAAQ,CAAC,AACzC,CA1EAwqH,YAAYrtH,CAAkB,CAAE,CAC9B,IAAI,CAACA,UAAU,CAAGA,CACpB,CAyEF,CAACmT,EAAAA,eAAA,CAAA63J,C,sGC1ED,IAAAlgC,EAAA5pI,EAAA,MAiBA,SAASq1D,EACP+lD,CAAkB,CAClBjyH,CAAc,CACdq9I,CAAwB,EAExB,OAAOznI,OAAOwxC,MAAM,CAAC,CACnB6qE,WAAAA,EACA4nB,IAAKA,IAAM96G,EAAAA,OAAQ,CAACsmH,OAAO,CAACxL,GAAG,CAAC75I,EAAQ,CAAE24L,iBAAkB,EAAK,GACjEt7C,SAAAA,CACF,EACF,CA84CEznI,OAAOwoH,MAAM,CA34CsBt1G,EAAAA,OAAA,CAAG,CACtC8/H,UAAW,KAEXgwC,cAAe1sH,EACb,UACA,kDACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEC,eAAgB,CAAC,YAAW,AAAE,EACxCC,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CAAC,CACjB,GAGFqvC,yBAA0B9sH,EACxB,eACA,kcACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEI,0BAA2B,CAAC,YAAW,AAAE,EACnDF,yBAA0B,EAAE,CAC5BpyC,WAAY,4BACZgD,aAAc,CAAC,CACjB,GAGFuvC,cAAehtH,EACb,SACA,2xFACA,CACE49E,QAAS,CAAC,SAAU,SAAU,YAAa,QAAQ,CACnD+uC,OAAQ,CAAEK,cAAe,CAAC,YAAW,AAAE,EACvCH,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CACZwvC,WAAY,CACV,gKACD,CACDC,gBAAiB,CACf,0IACA,4GACD,CACDC,cAAe,CACb,oIAAmI,AAEvI,CACF,GAGFC,iBAAkBptH,EAChB,QACA,yHACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAE/1K,kBAAmB,CAAC,YAAW,AAAE,EAC3Ci2K,yBAA0B,EAAE,CAC5BpyC,WAAY,oBACZgD,aAAc,CAAC,CACjB,GAGF4vC,eAAgBrtH,EACd,eACA,4DACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAEp2K,gBAAiB,CAAC,YAAW,AAAE,EACzCs2K,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGF6vC,kBAAmBttH,EACjB,eACA,iFACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAEY,mBAAoB,CAAC,YAAW,AAAE,EAC5CV,yBAA0B,EAAE,CAC5BpyC,WAAY,qBACZgD,aAAc,CACZ2vC,iBAAkB,CAAC,gDAA+C,AACpE,CACF,GAGFI,iBAAkBxtH,EAChB,SACA,+KACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEc,kBAAmB,CAAC,YAAW,AAAE,EAC3CZ,yBAA0B,EAAE,CAC5BpyC,WAAY,oBACZgD,aAAc,CAAC,CACjB,GAGFiwC,sBAAuB1tH,EACrB,eACA,qJACA,CACE49E,QAAS,CAAC,iBAAiB,CAC3B+uC,OAAQ,CAAE96K,uBAAwB,CAAC,YAAW,AAAE,EAChDg7K,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CAAC,CACjB,GAGFkwC,uBAAwB3tH,EACtB,eACA,2eACA,CACE49E,QAAS,CAAC,UAAW,SAAS,CAC9B+uC,OAAQ,CAAEiB,wBAAyB,CAAC,YAAW,AAAE,EACjDf,yBAA0B,EAAE,CAC5BpyC,WAAY,0BACZgD,aAAc,CACZivC,cAAe,CACb,kFAAiF,AAErF,CACF,GAGFmB,cAAe7tH,EACb,SACA,4jCACA,CACE49E,QAAS,CAAC,SAAU,YAAa,SAAU,UAAU,CACrD+uC,OAAQ,CACNmB,eAAgB,CAAC,YAAY,CAC7BC,sBAAuB,CACrB,YACA,4DACA,wDACA,mDACA,iDAAgD,AAEpD,EACAlB,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CAAC,CACjB,GAGFuwC,iBAAkBhuH,EAChB,eACA,iaACA,CACE49E,QAAS,CAAC,UAAU,CACpB+uC,OAAQ,CACNx5C,mBAAoB,CAClB,YACA,yGACA,yGACD,CACDC,kBAAmB,CAAC,YAAW,AACjC,EACAy5C,yBAA0B,EAAE,CAC5BpyC,WAAY,oBACZgD,aAAc,CAAC,CACjB,GAGFwwC,oBAAqBjuH,EACnB,eACA,kEACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEuB,qBAAsB,CAAC,YAAW,AAAE,EAC9CrB,yBAA0B,EAAE,CAC5BpyC,WAAY,uBACZgD,aAAc,CAAEivC,cAAe,CAAC,qCAAoC,AAAE,CACxE,GAGFyB,UAAWnuH,EACT,SACA,uLACA,CACE49E,QAAS,CAAC,UAAU,CACpB+uC,OAAQ,CAAEyB,WAAY,CAAC,YAAW,AAAE,EACpCvB,yBAA0B,EAAE,CAC5BpyC,WAAY,aACZgD,aAAc,CACZjvB,eAAgB,CACd,yDACA,6FACD,CACD6/D,yBAA0B,CACxB,oEACD,CACDC,0BAA2B,CACzB,mDAAkD,AAEtD,CACF,GAGFrB,WAAYjtH,EACV,SACA,uJACA,CACE49E,QAAS,CAAC,SAAU,YAAY,CAChC+uC,OAAQ,CAAE4B,YAAa,CAAC,YAAW,AAAE,EACrC1B,yBAA0B,EAAE,CAC5BpyC,WAAY,cACZgD,aAAc,CAAC,CACjB,GAGF+wC,0BAA2BxuH,EACzB,SACA,8IACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAE8B,2BAA4B,CAAC,YAAW,AAAE,EACpD5B,yBAA0B,EAAE,CAC5BpyC,WAAY,6BACZgD,aAAc,CAAC,CACjB,GAGFixC,eAAgB1uH,EACd,eACA,+GACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEpiL,gBAAiB,CAAC,YAAW,AAAE,EACzCsiL,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGFkxC,kBAAmB3uH,EACjB,eACA,8HACA,CACE49E,QAAS,CAAC,iBAAiB,CAC3B+uC,OAAQ,CAAEiC,mBAAoB,CAAC,YAAW,AAAE,EAC5C/B,yBAA0B,EAAE,CAC5BpyC,WAAY,qBACZgD,aAAc,CAAC,CACjB,GAGFoxC,sBAAuB7uH,EACrB,SACA,4EACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEmC,uBAAwB,CAAC,YAAW,AAAE,EAChDjC,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CACZ+vC,iBAAkB,CAAC,iDAAgD,AACrE,CACF,GAGFuB,0BAA2B/uH,EACzB,SACA,wFACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEqC,2BAA4B,CAAC,YAAW,AAAE,EACpDnC,yBAA0B,EAAE,CAC5BpyC,WAAY,6BACZgD,aAAc,CACZ+wC,0BAA2B,CACzB,qDAAoD,AAExD,CACF,GAGFS,2BAA4BjvH,EAC1B,eACA,uJACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEuC,uBAAwB,CAAC,YAAW,AAAE,EAChDrC,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CAAC,CACjB,GAGF0xC,0BAA2BnvH,EACzB,eACA,4EACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CACN16I,GAAI,CACF,2BACA,uDACA,uDACD,CACDm9I,sBAAuB,CAAC,YAAW,AACrC,EACAvC,yBAA0B,EAAE,CAC5BpyC,WAAY,wBACZgD,aAAc,CAAC,CACjB,GAGF4xC,sBAAuBrvH,EACrB,SACA,kFACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE2C,uBAAwB,CAAC,YAAW,AAAE,EAChDzC,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CACZ+vC,iBAAkB,CAChB,+DAA8D,AAElE,CACF,GAGF+B,mBAAoBvvH,EAClB,SACA,uEACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE6C,oBAAqB,CAAC,YAAW,AAAE,EAC7C3C,yBAA0B,EAAE,CAC5BpyC,WAAY,sBACZgD,aAAc,CACZ+vC,iBAAkB,CAAC,iDAAgD,AACrE,CACF,GAGFiC,2BAA4BzvH,EAC1B,SACA,qFACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE+C,4BAA6B,CAAC,YAAW,AAAE,EACrD7C,yBAA0B,EAAE,CAC5BpyC,WAAY,8BACZgD,aAAc,CACZ+wC,0BAA2B,CACzB,qDAAoD,AAExD,CACF,GAGFmB,mBAAoB3vH,EAClB,SACA,6EACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEiD,oBAAqB,CAAC,YAAW,AAAE,EAC7C/C,yBAA0B,EAAE,CAC5BpyC,WAAY,sBACZgD,aAAc,CACZ+vC,iBAAkB,CAChB,+DAA8D,AAElE,CACF,GAGFqC,4BAA6B7vH,EAC3B,QACA,+EACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEmD,6BAA8B,CAAC,YAAW,AAAE,EACtDjD,yBAA0B,EAAE,CAC5BpyC,WAAY,+BACZgD,aAAc,CACZ+vC,iBAAkB,CAAC,mDAAkD,AACvE,CACF,GAGFuC,UAAW/vH,EACT,eACA,iNACA,CACE49E,QAAS,CAAC,UAAU,CACpB+uC,OAAQ,CAAEt6K,WAAY,CAAC,YAAW,AAAE,EACpCw6K,yBAA0B,EAAE,CAC5BpyC,WAAY,aACZgD,aAAc,CACZ4wC,yBAA0B,CAAC,iCAAiC,CAC5D2B,eAAgB,CACd,yDAAwD,AAE5D,CACF,GAGFC,YAAajwH,EACX,eACA,+VACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACNrjL,kBAAmB,CACjB,YACA,yDACA,yDACD,CACDM,aAAc,CAAC,YAAW,AAC5B,EACAijL,yBAA0B,EAAE,CAC5BpyC,WAAY,eACZgD,aAAc,CACZ0vC,cAAe,CACb,6EAA4E,AAEhF,CACF,GAGF+C,0BAA2BlwH,EACzB,QACA,wrBACA,CACE49E,QAAS,CAAC,SAAU,QAAS,YAAY,CACzC+uC,OAAQ,CAAEwD,2BAA4B,CAAC,YAAW,AAAE,EACpDtD,yBAA0B,EAAE,CAC5BpyC,WAAY,6BACZgD,aAAc,CACZ2yC,2BAA4B,CAC1B,oEAAmE,AAEvE,CACF,GAGFC,+BAAgCrwH,EAC9B,QACA,4eACA,CACE49E,QAAS,CAAC,SAAU,QAAS,YAAY,CACzC+uC,OAAQ,CAAE2D,gCAAiC,CAAC,YAAW,AAAE,EACzDzD,yBAA0B,EAAE,CAC5BpyC,WAAY,kCACZgD,aAAc,CACZ2yC,2BAA4B,CAC1B,kDAAiD,AAErD,CACF,GAGFG,YAAavwH,EACX,QACA,kQACA,CACE49E,QAAS,CAAC,UAAU,CACpB+uC,OAAQ,CAAEx7K,aAAc,CAAC,YAAW,AAAE,EACtC07K,yBAA0B,EAAE,CAC5BpyC,WAAY,eACZgD,aAAc,CACZjvB,eAAgB,CACd,qEACA,8FACD,CACD6/D,yBAA0B,CACxB,gDACD,CACDC,0BAA2B,CACzB,0DAAyD,AAE7D,CACF,GAGFkC,SAAUxwH,EACR,QACA,+4NACA,CACE49E,QAAS,CAAC,SAAU,YAAa,SAAU,iBAAiB,CAC5D+uC,OAAQ,CACN8D,UAAW,CAAC,YAAY,CACxBC,kBAAmB,CACjB,YACA,gDACA,qCACD,CACDC,yBAA0B,CACxB,YACA,6EACD,CACDC,sBAAuB,CACrB,YACA,+EACD,CACDC,uBAAwB,CACtB,YACA,4DACD,CACDC,eAAgB,CACd,YACA,wIACA,+EACA,gFACA,yEACA,2FACD,CACDC,kBAAmB,CACjB,YACA,6DACA,8DACD,CACDC,0BAA2B,CACzB,YACA,4GACA,oGAAmG,AAEvG,EACAnE,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CACZwzC,QAAS,CACP,iHACD,CACD9D,cAAe,CACb,oGACA,gDAA+C,AAEnD,CACF,GAGF7jJ,SAAU02B,EACR,eACA,iNACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEuE,UAAW,CAAC,YAAW,AAAE,EACnCrE,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CAAC,CACjB,GAGF0zC,eAAgBnxH,EACd,SACA,sHACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEyE,gBAAiB,CAAC,YAAW,AAAE,EACzCvE,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGFppH,eAAgB2rC,EACd,eACA,0JACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAE77K,gBAAiB,CAAC,YAAW,AAAE,EACzC+7K,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CACZ0vC,cAAe,CACb,mEAAkE,AAEtE,CACF,GAGFnvD,QAASh+D,EACP,eACA,gPACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACN0E,SAAU,CACR,YACA,0DACA,iDAAgD,AAEpD,EACAxE,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,WACZgD,aAAc,CAAC,CACjB,GAGF5gJ,IAAKmjE,EACH,eACA,0QACA,CACE49E,QAAS,CAAC,UAAW,SAAS,CAC9B+uC,OAAQ,CACN2E,KAAM,CACJ,YACA,0DACA,iDAAgD,AAEpD,EACAzE,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,OACZgD,aAAc,CACZ8zC,cAAe,CACb,mGAAkG,AAEtG,CACF,GAGF/iE,eAAgBxuD,EACd,eACA,sLACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACNn7K,gBAAiB,CACf,YACA,mDACA,iDAAgD,AAEpD,EACAq7K,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGF+zC,SAAUxxH,EAAO,SAAU,kCAAmC,CAC5D49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE8E,UAAW,CAAC,YAAW,AAAE,EACnC5E,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CAAC,CACjB,GAEAi0C,iBAAkB1xH,EAChB,SACA,4hBACA,CACE49E,QAAS,CAAC,QAAS,UAAU,CAC7B+uC,OAAQ,CAAEgF,kBAAmB,CAAC,YAAW,AAAE,EAC3C9E,yBAA0B,EAAE,CAC5BpyC,WAAY,oBACZgD,aAAc,CAAC,CACjB,GAGFhZ,SAAUzkE,EACR,eACA,+SACA,CACE49E,QAAS,CAAC,YAAa,SAAS,CAChC+uC,OAAQ,CAAE57K,UAAW,CAAC,YAAW,AAAE,EACnC87K,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CACZuyC,eAAgB,CACd,2DAA0D,AAE9D,CACF,GAGF4B,cAAe5xH,EACb,eACA,qHACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEkF,eAAgB,CAAC,YAAW,AAAE,EACxChF,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CACZuyC,eAAgB,CAAC,qDAAoD,AACvE,CACF,GAGF8B,0BAA2B9xH,EACzB,eACA,yMACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEoF,2BAA4B,CAAC,YAAW,AAAE,EACpDlF,yBAA0B,EAAE,CAC5BpyC,WAAY,6BACZgD,aAAc,CAAC,CACjB,GAGFu0C,yBAA0BhyH,EACxB,eACA,8LACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAEsF,0BAA2B,CAAC,YAAW,AAAE,EACnDpF,yBAA0B,EAAE,CAC5BpyC,WAAY,4BACZgD,aAAc,CAAC,CACjB,GAGFy0C,WAAYlyH,EACV,eACA,yIACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEwF,YAAa,CAAC,YAAW,AAAE,EACrCtF,yBAA0B,EAAE,CAC5BpyC,WAAY,cACZgD,aAAc,CAAC,CACjB,GAGF20C,sBAAuBpyH,EACrB,eACA,2EACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE3tJ,uBAAwB,CAAC,YAAW,AAAE,EAChD6tJ,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CAAC,CACjB,GAGF40C,uBAAwBryH,EACtB,SACA,2pBACA,CACE49E,QAAS,CAAC,UAAW,SAAS,CAC9B+uC,OAAQ,CACNlwC,yBAA0B,CACxB,YACA,gDACA,0CACD,CACDD,wBAAyB,CAAC,YAAW,AACvC,EACAqwC,yBAA0B,EAAE,CAC5BpyC,WAAY,0BACZgD,aAAc,CAAC,CACjB,GAGF60C,iBAAkBtyH,EAChB,eACA,wIACA,CACE49E,QAAS,CAAC,WAAW,CACrB+uC,OAAQ,CAAEx6K,kBAAmB,CAAC,YAAW,AAAE,EAC3C06K,yBAA0B,EAAE,CAC5BpyC,WAAY,oBACZgD,aAAc,CAAC,CACjB,GAGF4wC,yBAA0BruH,EACxB,QACA,oMACA,CACE49E,QAAS,CAAC,UAAW,UAAU,CAC/B+uC,OAAQ,CACNr7K,0BAA2B,CACzB,YACA,0CAAyC,AAE7C,EACAu7K,yBAA0B,CAAC,qCAAqC,CAChEpyC,WAAY,4BACZgD,aAAc,CAAC,CACjB,GAGF80C,gBAAiBvyH,EACf,eACA,oIACA,CACE49E,QAAS,CAAC,SAAU,QAAQ,CAC5B+uC,OAAQ,CAAE6F,iBAAkB,CAAC,YAAW,AAAE,EAC1C3F,yBAA0B,EAAE,CAC5BpyC,WAAY,mBACZgD,aAAc,CAAC,CACjB,GAGFg1C,qBAAsBzyH,EACpB,eACA,maACA,CACE49E,QAAS,CAAC,SAAU,SAAS,CAC7B+uC,OAAQ,CAAEn2K,sBAAuB,CAAC,YAAW,AAAE,EAC/Cq2K,yBAA0B,EAAE,CAC5BpyC,WAAY,wBACZgD,aAAc,CAAC,CACjB,GAGFxH,IAAKj2E,EACH,eACA,2gBACA,CACE49E,QAAS,CAAC,SAAU,QAAQ,CAC5B+uC,OAAQ,CACN+F,mBAAoB,CAClB,2BACA,qCACA,iDACA,2CACD,CACDC,uBAAwB,CAAC,YAAW,AACtC,EACA9F,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CAAC,CACjB,GAGFm1C,eAAgB5yH,EACd,QACA,mKACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAEkG,gBAAiB,CAAC,YAAW,AAAE,EACzChG,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CACZ2vC,iBAAkB,CAChB,uDAAsD,AAE1D,CACF,GAGF0F,cAAe9yH,EACb,eACA,qGACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEoG,eAAgB,CAAC,YAAW,AAAE,EACxClG,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CAAC,CACjB,GAGFu1C,gBAAiBhzH,EACf,eACA,iMACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEj2K,iBAAkB,CAAC,YAAW,AAAE,EAC1Cm2K,yBAA0B,EAAE,CAC5BpyC,WAAY,mBACZgD,aAAc,CAAC,CACjB,GAGFw1C,kBAAmBjzH,EACjB,eACA,8LACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEuG,mBAAoB,CAAC,YAAW,AAAE,EAC5CrG,yBAA0B,EAAE,CAC5BpyC,WAAY,qBACZgD,aAAc,CAAC,CACjB,GAGF01C,qBAAsBnzH,EACpB,SACA,sGACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEyG,sBAAuB,CAAC,YAAW,AAAE,EAC/CvG,yBAA0B,EAAE,CAC5BpyC,WAAY,wBACZgD,aAAc,CAAC,CACjB,GAGF41C,yBAA0BrzH,EACxB,eACA,iGACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAE2G,0BAA2B,CAAC,YAAW,AAAE,EACnDzG,yBAA0B,EAAE,CAC5BpyC,WAAY,4BACZgD,aAAc,CAAC,CACjB,GAGF81C,cAAevzH,EACb,QACA,8mBACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACNj8K,QAAS,CACP,YACA,4EACA,qFACD,CACD8iL,eAAgB,CAAC,YAAW,AAC9B,EACA3G,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CACZppH,eAAgB,CACd,iGAAgG,AAEpG,CACF,GAGFo/J,wBAAyBzzH,EACvB,eACA,0RACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAE+G,yBAA0B,CAAC,YAAW,AAAE,EAClD7G,yBAA0B,EAAE,CAC5BpyC,WAAY,2BACZgD,aAAc,CACZk2C,6BAA8B,CAC5B,gDAA+C,AAEnD,CACF,GAGFA,6BAA8B3zH,EAC5B,eACA,4KACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAErkD,8BAA+B,CAAC,YAAW,AAAE,EACvDukD,yBAA0B,EAAE,CAC5BpyC,WAAY,gCACZgD,aAAc,CAAC,CACjB,GAGF6wC,0BAA2BtuH,EACzB,eACA,oOACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEj7K,2BAA4B,CAAC,YAAW,AAAE,EACpDm7K,yBAA0B,EAAE,CAC5BpyC,WAAY,6BACZgD,aAAc,CACZiwC,sBAAuB,CAAC,qCAAoC,AAC9D,CACF,GAGFkG,cAAe5zH,EACb,eACA,4EACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEkH,eAAgB,CAAC,YAAW,AAAE,EACxChH,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CAAC,CACjB,GAGFq2C,mBAAoB9zH,EAClB,SACA,s8OACA,CACE49E,QAAS,CAAC,SAAU,SAAU,QAAS,YAAa,QAAS,UAAU,CACvE+uC,OAAQ,CACNoH,oBAAqB,CACnB,YACA,qCAAoC,AAExC,EACAlH,yBAA0B,CAAC,gCAAgC,CAC3DpyC,WAAY,sBACZgD,aAAc,CAAC,CACjB,GAGF7gJ,IAAKojE,EACH,eACA,ifACA,CACE49E,QAAS,CAAC,UAAW,SAAU,YAAY,CAC3C+uC,OAAQ,CACN/vL,IAAK,CACH,YACA,mDACA,+CACA,iDACD,CACDo3L,KAAM,CAAC,YAAW,AACpB,EACAnH,yBAA0B,EAAE,CAC5BpyC,WAAY,OACZgD,aAAc,CACZ8zC,cAAe,CACb,mGACD,CACDl9J,eAAgB,CACd,oGAAmG,AAEvG,CACF,GAGF64J,gBAAiBltH,EACf,SACA,qLACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAEO,gBAAiB,CAAC,YAAW,AAAE,EACzCL,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGFuyC,eAAgBhwH,EACd,eACA,sKACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACNz7K,gBAAiB,CACf,YACA,mDACA,iDAAgD,AAEpD,EACA27K,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,GAGFw2C,uBAAwBj0H,EACtB,eACA,0GACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEuH,wBAAyB,CAAC,YAAW,AAAE,EACjDrH,yBAA0B,EAAE,CAC5BpyC,WAAY,0BACZgD,aAAc,CAAC,CACjB,GAGF02C,cAAen0H,EACb,eACA,wIACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEr2K,eAAgB,CAAC,YAAW,AAAE,EACxCu2K,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CACZ4vC,eAAgB,CAAC,oDAAoD,CACrEoF,qBAAsB,CACpB,qDACD,CACDrC,2BAA4B,CAC1B,gDACD,CACD4C,gBAAiB,CAAC,2CAA0C,AAC9D,CACF,GAGFzB,cAAevxH,EACb,eACA,2GACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEyH,eAAgB,CAAC,YAAW,AAAE,EACxCvH,yBAA0B,EAAE,CAC5BpyC,WAAY,iBACZgD,aAAc,CACZjvB,eAAgB,CAAC,mDAAkD,AACrE,CACF,GAGF6lE,aAAcr0H,EACZ,SACA,wJACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE2H,cAAe,CAAC,YAAW,AAAE,EACvCzH,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CACZ5gJ,IAAK,CAAC,gDAAgD,CACtD2xH,eAAgB,CACd,4DAA2D,AAE/D,CACF,GAGF+lE,aAAcv0H,EACZ,SACA,2FACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE6H,cAAe,CAAC,YAAW,AAAE,EACvC3H,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CACZ7gJ,IAAK,CAAC,qCAAqC,CAC3C4xH,eAAgB,CAAC,iDAAgD,AACnE,CACF,GAGFimE,sBAAuBz0H,EACrB,eACA,0IACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAE+H,uBAAwB,CAAC,YAAW,AAAE,EAChD7H,yBAA0B,EAAE,CAC5BpyC,WAAY,yBACZgD,aAAc,CAAC,CACjB,GAGFk3C,2BAA4B30H,EAC1B,eACA,gFACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEiI,4BAA6B,CAAC,YAAW,AAAE,EACrD/H,yBAA0B,EAAE,CAC5BpyC,WAAY,8BACZgD,aAAc,CAAC,CACjB,GAGFo3C,IAAK70H,EACH,QACA,4FACA,CACE49E,QAAS,CAAC,iBAAiB,CAC3B+uC,OAAQ,CAAEmI,UAAW,CAAC,YAAW,AAAE,EACnCjI,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CAAC,CACjB,GAGFs3C,YAAa/0H,EACX,eACA,wDACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEqI,aAAc,CAAC,YAAW,AAAE,EACtCnI,yBAA0B,EAAE,CAC5BpyC,WAAY,eACZgD,aAAc,CACZw3C,kBAAmB,CAAC,yCAAyC,CAC7DJ,IAAK,CAAC,gDAA+C,AACvD,CACF,GAGFI,kBAAmBj1H,EAAO,eAAgB,kCAAmC,CAC3E49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEuI,mBAAoB,CAAC,YAAW,AAAE,EAC5CrI,yBAA0B,EAAE,CAC5BpyC,WAAY,qBACZgD,aAAc,CAAC,CACjB,GAEAwzC,QAASjxH,EACP,eACA,uHACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEwI,SAAU,CAAC,YAAW,AAAE,EAClCtI,yBAA0B,EAAE,CAC5BpyC,WAAY,WACZgD,aAAc,CACZ4vC,eAAgB,CAAC,oDAAoD,CACrEkF,gBAAiB,CAAC,qDAAqD,CACvEnC,2BAA4B,CAC1B,gDACD,CACD4C,gBAAiB,CAAC,2CAA0C,AAC9D,CACF,GAGFoC,kBAAmBp1H,EACjB,eACA,sIACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE0I,mBAAoB,CAAC,YAAW,AAAE,EAC5CxI,yBAA0B,EAAE,CAC5BpyC,WAAY,qBACZgD,aAAc,CACZ6vC,kBAAmB,CACjB,oDACD,CACDiF,gBAAiB,CAAC,qDAAqD,CACvEnC,2BAA4B,CAC1B,gDACD,CACD6C,kBAAmB,CAAC,2CAA0C,AAChE,CACF,GAGFqC,YAAat1H,EACX,QACA,iRACA,CACE49E,QAAS,CAAC,SAAU,YAAa,SAAU,SAAS,CACpD+uC,OAAQ,CAAE2I,YAAa,CAAC,YAAW,AAAE,EACrCzI,yBAA0B,EAAE,CAC5BpyC,WAAY,cACZgD,aAAc,CAAC,CACjB,GAGF0vC,cAAentH,EACb,QACA,2FACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAEQ,cAAe,CAAC,YAAW,AAAE,EACvCN,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CACZ63C,YAAa,CAAC,gDAA+C,AAC/D,CACF,GAGFC,SAAUv1H,EACR,SACA,oIACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CAAE6I,UAAW,CAAC,YAAW,AAAE,EACnC3I,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CAAC,CACjB,GAGFg4C,OAAQz1H,EACN,eACA,qRACA,CACE49E,QAAS,CAAC,SAAS,CACnB+uC,OAAQ,CACNxjL,QAAS,CACP,YACA,mDACA,iDAAgD,AAEpD,EACA0jL,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,UACZgD,aAAc,CAAC,CACjB,GAGF2yC,2BAA4BpwH,EAC1B,QACA,2UACA,CACE49E,QAAS,CAAC,QAAQ,CAClB+uC,OAAQ,CAAEl2K,4BAA6B,CAAC,YAAW,AAAE,EACrDo2K,yBAA0B,EAAE,CAC5BpyC,WAAY,8BACZgD,aAAc,CACZ2vC,iBAAkB,CAChB,kEACA,0FAAyF,AAE7F,CACF,GAGFsI,SAAU11H,EACR,SACA,gmCACA,CACE49E,QAAS,CACP,kBACA,QACA,SACA,YACA,SACA,UACD,CACD+uC,OAAQ,CAAEgJ,UAAW,CAAC,YAAW,AAAE,EACnC9I,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CAAC,CACjB,GAGFm4C,mBAAoB51H,EAClB,eACA,upCACA,CACE49E,QAAS,CAAC,UAAW,SAAS,CAC9B+uC,OAAQ,CACNkJ,oBAAqB,CAAC,YAAY,CAClCC,eAAgB,CACd,YACA,0DACA,qDACA,qDACA,qDACA,qDAAoD,AAExD,EACAjJ,yBAA0B,EAAE,CAC5BpyC,WAAY,sBACZgD,aAAc,CACZivC,cAAe,CACb,wEAAuE,AAE3E,CACF,GAGFqJ,gBAAiB/1H,EACf,eACA,sjBACA,CACE49E,QAAS,CAAC,MAAO,YAAa,SAAS,CACvC+uC,OAAQ,CACN56K,iBAAkB,CAChB,YACA,mDACA,iDAAgD,AAEpD,EACA86K,yBAA0B,CAAC,4CAA4C,CACvEpyC,WAAY,mBACZgD,aAAc,CACZjvB,eAAgB,CACd,6GACD,CACDwhE,eAAgB,CACd,4FACD,CACDsC,iBAAkB,CAChB,yFACD,CACDvC,UAAW,CACT,0FAAyF,AAE7F,CACF,GAGFiG,WAAYh2H,EACV,SACA,+oCACA,CACE49E,QAAS,CAAC,SAAU,UAAW,SAAU,SAAU,QAAQ,CAC3D+uC,OAAQ,CACNsJ,YAAa,CACX,YACA,0DACA,qCAAoC,AAExC,EACApJ,yBAA0B,CAAC,gCAAgC,CAC3DpyC,WAAY,cACZgD,aAAc,CACZuyC,eAAgB,CACd,+DACD,CACDvrD,SAAU,CAAC,mDAAkD,AAC/D,CACF,GAGFyxD,eAAgBl2H,EACd,UACA,8EACA,CACE49E,QAAS,CAAC,YAAY,CACtB+uC,OAAQ,CAAEwJ,gBAAiB,CAAC,YAAW,AAAE,EACzCtJ,yBAA0B,EAAE,CAC5BpyC,WAAY,kBACZgD,aAAc,CAAC,CACjB,EAEJ,EAGyB,CAErB24C,WAAYp2H,EACV,eACA,0CACA,CACE49E,QAAS,EAAE,CACX+uC,OAAQ,CAAE0J,YAAa,CAAC,YAAW,AAAE,EACrCxJ,yBAA0B,EAAE,CAC5BpyC,WAAY,cACZgD,aAAc,CAAC,CACjB,GAGF64C,UAAWt2H,EACT,SACA,0oLACA,CACE49E,QAAS,CACP,SACA,MACA,SACA,QACA,QACA,YACA,UACD,CACD+uC,OAAQ,CACN4J,qCAAsC,CACpC,YACA,0EACA,wGACD,CACDC,8BAA+B,CAC7B,YACA,oDACA,oDACD,CACDC,+BAAgC,CAC9B,YACA,2DACA,2HACD,CACDC,cAAe,CACb,YACA,mEACA,8EACD,CACDC,sBAAuB,CACrB,YACA,6FACA,6FACA,0EACD,CACDC,sBAAuB,CACrB,YACA,6FACA,6FACD,CACDC,mBAAoB,CAClB,YACA,0EACA,6EACA,6EACA,6EACA,6EACD,CACDC,2BAA4B,CAC1B,YACA,sEACA,iFACA,0FACD,CACDC,YAAa,CACX,YACA,+GACA,0HACD,CACDC,mBAAoB,CAClB,YACA,sEACD,CACDC,oBAAqB,CACnB,aACA,oDACD,CACDC,qBAAsB,CACpB,aACA,sDACA,sDACD,CACDC,mBAAoB,CAClB,aACA,oDACD,CACDb,UAAW,CAAC,aAAY,AAC1B,EACAzJ,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CACZyvC,gBAAiB,CACf,kGACA,4FACD,CACDC,cAAe,CACb,6EAA4E,AAEhF,CACF,GAGFiK,cAAep3H,EACb,SACA,wwHACA,CACE49E,QAAS,CAAC,QAAS,YAAa,SAAU,MAAO,QAAQ,CACzD+uC,OAAQ,CACN0K,qBAAsB,CACpB,YACA,wDACD,CACDC,kBAAmB,CACjB,2BACA,gDACA,0CACD,CACDF,cAAe,CAAC,YAAW,AAC7B,EACAvK,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CAAC,CACjB,GAGF85C,eAAgBv3H,EACd,SACA,i5HACA,CACE49E,QAAS,CAAC,QAAS,YAAa,SAAU,MAAO,QAAQ,CACzD+uC,OAAQ,CACN6K,sBAAuB,CACrB,YACA,kDACD,CACDD,eAAgB,CACd,YACA,0CAAyC,AAE7C,EACA1K,yBAA0B,CAAC,qCAAqC,CAChEpyC,WAAY,iBACZgD,aAAc,CACZyvC,gBAAiB,CACf,8GACA,wGACD,CACDC,cAAe,CACb,yFAAwF,AAE5F,CACF,GAGFsK,cAAez3H,EACb,SACA,i7IACA,CACE49E,QAAS,CAAC,QAAS,YAAa,SAAU,MAAO,QAAQ,CACzD+uC,OAAQ,CA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AC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAE3jDC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAA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C,SACK,2DACL,MAAK,CAAK,OAAK,eACf,KAAK,EACN,SAED,OAII,WAAO,SACL,UAAU,EACV,YAAY,CACZ,UAAa,EACX,SAAS,GACT,OAAQ,S,aAET,GACD,cAAc,EACd,cAAe,EACf,YAAa,CACb,eACD,iBAEH,CACF,CAEK,CACL,E,yCCxCWC,GAAuC,CAClD,OAAQ,SACR,SAAU,SACV,QAAS,CAAC,GAAI,GAAG,CACjB,MAAO,CACL,QAAS,GACT,QAAS,EACT,UAAW,CACT,SAAU,CACV,KAAU,QAEN,IAAI,YACR,EACD,YACM,KAAE,QACV,kBACM,EACL,KAAS,CACH,KAAI,UACT,sBACD,EACE,WAAO,Q,QAEN,E,yBAIE,CACF,eACF,kCACF,CACG,EACF,QAAS,CACT,MAAU,CACF,KAAG,CACD,eACE,qCACV,C,iBAGG,CACD,MACM,KAAI,UACT,4CACF,CACF,CACD,C,iBAII,G,SACA,G,SACD,E,QACI,E,WACH,C,qBAEa,CACZ,MACF,eACF,0BACM,CACL,EACA,gBAAO,CACD,KAAI,CACA,KAAI,UACZ,IAAY,sBAEZ,CACD,CACD,C,uBAIG,CACF,YACF,cACF,SACD,EACA,O,mUC5EA,GAA4C,I,IAC1C,EAAO,C,MACL,CACD,MACD,eACE,IAAY,iBACV,CACJ,C,SACK,2DACL,MAAK,QAAY,MAAC,SAClB,eAAe,CAChB,MAED,eAGQ,IAAI,oBAEV,C,eAGG,CAEC,KACJ,CACS,eACL,uBACA,IACA,C,kBAIC,C,MACD,CAOD,oBAEH,YACF,aAEW,UAA+B,EAC9B,YACF,QACV,e,mHChCQ,GAAE,CACV,QAAQ,CAAE,EACV,OAAO,GACP,SAAS,MACT,SACA,UAAU,CACR,QAAS,GACT,MAAO,CACP,aAAO,SACL,iBACA,aACA,SAAM,CACN,KAAQ,QACT,gBACF,CACD,C,aAES,C,QACL,G,MACA,CACD,sBACF,iBACD,a,+NCxCWC,GAAsB,IAAuB,EACxD,MAAO,CACL,SAAO,CACL,aACA,gB,aAEQ,S,UACT,SACD,MACE,e,IACE,kB,mBAGI,C,QACL,CACD,IAAK,E,OACH,E,MACA,E,KACD,C,EAEH,OACF,e,yDCnBM,I,KACJ,C,MACE,CACD,MACF,eACM,sBACP,K,gBCLA,GAAO,K,QACL9S,E,WACA,W,KACA,G,MACA,C,KACE,CACA,KAAM,UACN,yB,EAEF,YACF,WAEF,C,GACA,GAAe,I,IAGP,O,IAEF,GAAY,C,YAEb,CACF,eACD,OAAa,CACF,eACJ,IAAU,qBACjB,C,iDC5BW+S,GAA6B,CACxC,SAAU,CACR,eAAgB,CACd,QAAS,E,EAEX,YAAa,CACX,KAAM,EACN,QAAS,GACT,MAAO,CACL,KAAM,CACN,KAAQ,UACR,IAAS,qBACV,EACF,YACD,UAAW,CACT,C,YAEE,C,MACA,CACD,MACF,eACK,yBACJ,EACE,OAAQ,KACT,WACF,CACF,EACD,MACE,MAAU,CACX,QACD,e,yDC7BW,GAAyB,CACpC,WAEE,iKACF,SAAU,GAEV,WAAY,GACZ,aAAc,OAEd,WAAY,GACZ,aAAc,OAEd,WAAY,GACZ,aAAc,OAEd,WAAY,GACZ,aAAc,OAEd,WAAY,GACZ,aAAc,OAEd,WAAY,GACZ,aAAc,M,ECNd,GAAW,CACX,KAAK,QACL,WAAM,CACN,KAAU,UACV,IAAM,iBACN,EACA,WACA,Y,iGCoBM,CACN,eAAK,GACL,YAAS,GACT,WAAK,GACL,QACA,SAAM,GACN,WAAU,GACV,SACA,S,qJC/BY,C,OACR,C,OAED,E,QAED,C,QACO,CACL,IAAK,GACL,KAAM,GACP,SACD,OAAQ,E,kBAEF,CACJ,KAAM,UACN,0B,SAED,CACF,OACU,eACC,0BACL,EACD,MAAG,EACP,OAAU,CACX,EACD,OAAU,CACR,IACA,IAEA,KAAS,GACT,OAAY,EACZ,MAAW,CACZ,eACW,iBACZ,C,4oBC1BiB,CACjB,QAAS,G,SACF,Q,QACL,CACD,OACD,OAAQ,E,SAEN,C,MACE,G,WACA,CACD,MACD,KAAW,UACL,IAAI,kBACT,EACD,YAAc,E,YAEN,CACN,MACI,KAAI,UACT,qBACF,CACD,EACE,aAAO,CACP,KAAO,GACP,OAAU,CACH,KAAE,UACV,qBACD,E,2lBCvDgC,CAChC,QAAS,CACP,IAAK,EACL,OAAQ,E,EAEV,UAAW,CACT,SAAU,CACV,KAAU,QACN,IAAI,YACT,EACD,WAAc,CACZ,KAAU,QACV,kBACA,EACD,MACD,e,gMCfkC,CAClC,QAAS,GACT,SAAU,OACV,QAAS,EACT,WAAY,CACV,SAAU,CACV,KAAU,QACN,IAAI,YACT,EACD,WAAc,OACZ,MACI,KAAI,UACT,sBACD,C,eAEU,CACR,UACA,KAAS,QACT,gBACA,EACA,MACA,eACI,IAAG,kBACP,C,EAEF,O,iNCzB0C,CAC1C,QAAS,GACT,OAAQ,EACR,QAAS,CACP,WAAY,GACZ,SAAU,EAAE,A,EAEd,YAAa,GACb,UAAW,GACX,MAAO,CACL,SAAU,CACN,KAAI,QACT,gBACD,E,yDCHY,C,WACF,CACT,UACD,OAAU,CACR,MAAS,CACD,MACT,eACD,0B,qHCdK,SAASC,GAAcnhM,CAAkB,CAAEohM,CAAsB,EACtE,OAAIphM,GAAYohM,EAAY,OAAIphM,EAAU,kB,CAG1C,SAAO,GAAgB,CAAC,EACzB,mCAED,C,OCMe,sDAEb,SAAK,GAAa,S,GAChB,UAAW,C,IACZ,iCACD,IAAK,EAAU,CAAC,E,OACd,OAAQ,IAAkB,CAAC,GAAK,OAAC,KAClC,UACD,IAAe,QAAG,gFAClB,I,CCAK,IAAM,GAAc,CAK3B,QAAa,I,EAGV,WAGM,GAAU,eAAa,4BAE9B,GAAmB,IAAM,IAAK,OAAC,gCAQpB,GAAY,IAAe,eAAgB,CAAE,IAAuB,IAAK,GAAI,aAGtF,GAAoB,GAAO,K,GAC5B,UAED,IAAI,EAAa,K,IACf,IAAO,KAAkB,GAAU,gBACpC,S,EAMU,GAAW,W,IAAA,EAAI,uDAAY,GAAa,0D,OAAA,yCAC5C,GAAmB,GAAK,CAAD,MAAiB,GAAC,G,EAIrC,GAAa,AAACvzJ,GAAa,yCAEpC,GAAa,sBAER,GAAiB,IACxB,M,aAG+D,GAApD,OAAwC,GAAa,EAAD,wB,GClE/D,OAAO,G,OACL,iBAAgBuW,CAAU,CAAI,CAC/B,wBAED,C,OACE,mBAAgBA,CAAU,CAAM,CACjC,yBAMD,C,OACE,YAAO,GACR,0BAMD,C,OACE,cAAO,GACR,0BAED,C,OAKE,QAAM,CAAa,CAAoB,C,IAAjB,YAAM,+CAAS,CAAE,yCACvC,EAAsB,GAAC,G,OACrB,GAAkB,SAAS,CAAE,OAAG,W,EACvB,qB,iCCvBX,GACF,OAAC,mBAOD,GAAgBvW,EAAc,E,CAE9B,OAAC,Y,IAAA,0DAOD,OAAO,GAAYA,EAAY,E,CAE/B,OAAC,eAOD,OAAO,GAAoB,E,CAE3B,OAAC,cAGD,OAAO,GAAe,E,CAEtB,OAAC,kBAGD,OAAO,GAAgB,MAAY,Q,wBAExB,G,GACR,0F,QAED,iBAA8C,C,IAA9B,YAAS,8CAC1B,0CAGD,C,OACE,qBAAoB,CACrB,2BAGD,C,UC7DM,GAAa8lV,CAAW,EAAQ,E,UAC3B,GAAA8O,GAAA,UAA6B,IAAa,8B,+CCFrD,GACA,oCAAiC,+BACnC,EAAC,IAH6B,S,S/eH5B,GAGA,sBAAiB,8BAEjB,cAAW,4CACX,sBAAW,8CACX,oBAAa,6B,MACb,S,IASA,MAnBU,SAAS,MA8BrB,OAAM,GACA,KAAC,GAAO,MAAW,CACvB,QAAiB,GAAG,CACnB,YAEG,QAAU,KACd,QAAc,O,KACZ,GAAK,IAAU,CACf,MAAK,E,SAGL,MAAK,E,WAIH,GAAa,G,MAChB,OACH,CAGE,SAAS,GAAc,CAAC,EACzB,UAEK,QAAU,OAAW,CACzB,QAAc,M,KACZ,GAAK,IAAU,CACf,MAAK,E,SAGL,Q,SAtCF,uBAGA,Q,OgfPA,GAAM,GAAa,EAAM,SAAgB,EAAK,CAAC,EAAI,EAAC,GAAO,UAAmB,EAAE,YAE9E,GAAoB,KAAgB,K,IACpC,EAAM,EAAa,eAAO,MAAsB,4B,OAChD,MAAO,EAEH,KAAG,IAAiB,SAGvB,kDACH,aAEK,EAAM,I,KACP,EAAC,CACH,EAAO,EAAK,UACb,cACG,E,IAIF,GAAa,Q,IACd,IACD,OAAI7lV,IAAE,GAAI,4BAAE,KAAE,EAAK,QAAE,GAAI,6BAAE,EAAE,AAAF,IAAI,2C,EAG/B,GAAY,QACZ,qDAEI,OACJ,KACA,OAAM,GAAa,GAAY,CAAK,GAAa,EAAa,CAAG,C,EAGjE,eAGF,IAAO,E,qCAML,QAAW,K,yEAAmB,qBAC9B,IAAM,EAAiB,GAAU,EAAa,iEAE9C,GAAM,GAA4B,SAC5B,MAAiB,EAAC,GAAY,EAC/B,GAAY,OAAI,IAAY,KAC3B,IAAO,CACT,SAAM,GAAc,CAAG,EAAM,OAAkB,KAAO,IAAE,mEACxD,EAAc,IAAG,IACjB,GAAI,QACF,OAAI,E,MACF,E,IACA,GAA8B,EAAG,E,2BAE/B,EAAI,GAAM,E,UACR,EAAAi+B,EAAO,K,eAER,6IACA,Q,KACH,IAAK,E,OACHomT,E,eAEK,EAAoB,E,YAEtB,oB,EAED,KAAQ,G,KAEV,EAAM,OAAqB,S,MAC3B,CAAM,EAA2B,O,IACjC,EAAS,EAAO,CAA2B,M,2DAIrC,EAAc,E,aACR,K,OACN,EAAc,O,MAEV,KAAK,GAAC,CAAApmT,CAAO,gC,GACnB,EAAY,GAAQ,8CACrB,Q,iCAOJ,O,kBAQG,GAAS,IAAqB,CAAW,EAAE,EAAE,oB,QAEzC,K,wBACa,SAAS,CAAC,AAAC,GAAI,SAAS,SAAW,EAAE,iB,kBACpC,I,EC3G9B,SAAY,GAAgB,SAC5B,IAAM,EAAQ,EAAK,EAAI,EAAM,EAAQ,AAAgB,MAAhB,KAAK,GAAG,IAAiB,EAAK,AAAC,UACpE,MAAM,KAAc,EAAG6nF,EAAU,A,CAO5B,SAASggO,GACd1oU,CAAW,CACXzH,CAAyB,CACzBC,CAAyB,CACzBmvB,CAAuD,EAEvD,IAAI,EAAC,EAAK,EAAC,GACX,EAAK,OAAC,KACF,EAAE,4DAEN,E,UAGO,GAAY,CAAE,CAAI,CAAC,CAAE,CAAD,CAAI,CAAC,EAAU,E,MACtC,IAAU,E,OACX,iBACA,kBACJ,cAID,GAAM,IAAU,C,CAUd,SAAY,GAAiB,CAAI,E,MAAE,8HACjC,IAAM,EAAG,EAAK,EAAG,IAAU,EAAE,I,GACvB,EAAQ,EAAG,EAAG,QAEpB,IAAG,GAAO,GAAG,GAAI,sC,GAEnB,IAAG,+BAEH,MAAO,CACR,OAIK,QAAU,EAKV,SAAM,aACV,C,CCtEK,SAAS,GAAU/kC,CAAS,CAAEC,CAAS,EAC5C,OAAOD,EAAIC,EAAI,GAAKD,EAAIC,EAAI,EAAID,GAAKC,EAAI,EAAI2/B,GAC/C,CCFO,SAAS85Q,GAAS15S,CAAM,EAC7B,OAAOsH,OAAOtH,EAChB,CCKE,SAAU,GAAc,K,IAAA,4DAClB,EAAE,S,GACN,U,GACD,6BACD,GAAIg/C,GAAW,EAAC,OAAS,EAAE,c,IACzB,EAAO,MAAQ,EAAS,EAAK,KAAM,KAAE,kB,OACtC,2B,CCRD,IAAI,GAAa,GAAM,K,IACrBp/C,EAAS4jD,E,MACV,+B,ECwBG,GAAuB,G,SAIzB,GAAe,K,IACf,EAAW,EAAK,EAAO,UACxB,gB,IAAM,GAAe,EAAE,SACO,wBAC7B,EAAY,EAAmBtgD,KAAK,EAAE,AAAD,EAAM,qC,KAC5C,uC,KAAM,EAAK,GAAY,GAAE,uB,MACxB,CACA,WAAW,EACZ,U,EAGA,mBAED,OAAO,IAAQ,CAAI,KAAY,oB,CAG/B,SAAO,IAAa,EAAO,E,IACzB,EAAc,G,OACd,EAAQ,OAAI,CAAI,AAAC,IAClB,WACD,IAAkB,IAAG,S,GACnB,MAAc,MAAO,CAAK,U,CAG5B,SAAS,IAAU,CAAE,GACtB,SAED,OAAM,EAAU,YACd,IAAO,EAAS,CAAG,CAAC,GAAI,AACzB,iBAED,GAAM,MAAyB,MAAgB,W,UAGrC,GAAK,CAAK,CAAC09R,CAAM,E,OACvB,EAAI,QAAa,EAAC,K,IAChB,IAAe,EAAM,CAAC,M,OACvB,eACH,EAAG,E,CAGF,iBACD,MAAO,IAAW,E,OACnB,cAEK,MAAU,EAAiB,GAAAA,EAAc,GAC7C,IAAyB,IAAG,UAC5B,GACE,EAAM,C,UAGL,QACH,IAAG,iBACH,AAAIxjR,EAAA,MAAU,IAAc,EAE3B,AADQ,EAAK,qCACb,Y,CAII,SAAS,GAA+B,KAC7C,OAAO,KAAK,QAAa,EAAM,G,UAGvB,GAAO,K,OACZ,kB,CAGJ,mBAED,GAAM,SAAU,CAAQ,CAAW,CAAE,GAAc,qDACjD,MAAO,EACH,GAAQ,CAAE,EACV,CAAC,EAAO,CAAE,C,GAEZ,GAAI,G,GACC,E,GAKP,SAAM,GAAsB,GAC5B,MAAO,SAAQ,WAChB,OAKK,MALL,iGAMG,SAJJ,EAAM,GAAkB,AAAc,EAAc,EAA5B,KAAY,EAAE,EAAc,qE,EASlD,SAAY,GAAC,KACd,0FAED,OAAM,EAAU,M,CAGf,e,IAAA,0DAED,EAAO,EACL,G,EAED,yBAED,CAOE,SAAW,GAAiB,CAAC,E,IAAA,2DACvB,EAAK,EAAU,MAAO,CAAC,2BAE7B,OAAM,EAAS,OAAE,EACjB,IAAM,EAAS,KAAE,IAAO,GAAI,GAAC,qEAC7B,EAAO,uBACL,uB,OACY,GAAE,C,IACZ,EAAC,OAAS,iBAAQ,Q,IACnB,uCACD,I,IACG,GAAS,CAAE,U,QAEb,a,CASE,SAAS,MACd,OAAI,GAA4B,a,KC7JhC,GAAiB,Q,IACf,EAAS,EAAI,KAAK,EAAE,CAAAzX,EAAM,GAAa,GAAQ,EAAC,M,OACjD,4D,EAGM,GAAM,QACb,kBAEF,IAAO,EAAM,GAAqB,EAAI,GAA4C,UAA6B,uDAC7G,GAAI,CAAC,IAAO,mC,IACV,EAAY,6C,OACb,iBAED,IAAM,EACN,IAAM,EAAiB,UAAa,GAEhC,GAAE,GAAa,GAAK,EAAoB,IAAC,EAAM,CACjD,IAAO,EAAK,0CACb,kCAEK,MAAmC,mBAAG,QAEtC,EACM,EAAQ,GAAC,CAEjB,IACF,G,KACE,EAAM,GAAkB,EAAQ,GAEhC,IAAI,EAAW,GAAG,GAAW,EAAkB,2E,GAC7C,GAAM,OAAY,EAAa,OAAS,iG,IACxC,EAAM,QAAa,CAAA4iD,G,GACnB,GAAM,GAAM,O,IACZ,EAAM,EAAS,0D,GACb,GAAI,GAAQ,Q,MACP,GAAO,IAAuB,QAAS,G,EAC5C,MAGF,MAAI,EACJ,MAAK,EAGL,SAAM,EAAS,KAAS,IACxB,KAAM,EACN,KAAM,C,SAOG,c,YAGG,EAAE,QAAW,GAAC,EAAO,yB,MACvB,GAAQ,S,MACT,iB,EACR,gCACD,IAAI,EAA4B,mBAAY,GAAU,CAAC,CAAQ,EAAI,C,IAEjE,GAAQ,C,EACT,EAED,G,OAED,4BACA,yFACJ,uHACG,MAAgB,YAClB,MAAc,GAAQ,O,2EACpB,GAAM,MAAc,KAAK,GACzB,IAAM,KAAc,EAAW,UAAX,GAGpB,EAAe,IAAI,EACjB,MAAM,EACN,MAAM,E,SACA,EAAQ,S,KACX,E,KACD,C,QAKA,MAAQ,CAAK,EAAe,I,ECvF/B,SAAS,GAAQw9R,CAAmB,EACzC,MAAO,WAAW,GAAU,QAAW,CACzC,CAGE,SAAO,GAAW,CAAI,EACvB,6BAID,C,SAEW,GAAQA,CAAO,E,MACvB,O,CAII,SAAS,GAAU,CAAgC,EAAoB,EAC5E,OAAO,EAAc,GAAKA,GAAY,SAAa,OAAS,GAAC,GAAc,OAAW,QACxF,CAGE,SAAO,GAAW,CAAK,CAAI,CAAM,EAClC,4DAED,CAEC,eAED,MAAM,QAAU,cAAiD,EAAqB,uB,CAW/E,SAAS,IAAqB,EAAgC,E,gBACnE,OAAM,GAAW,IAAS,kBAAI,SAAa,GAAK,GAAM,OAAE,EACxD,C,6ICzCqE,2C,IACrE,E,MACA,CAAA1B,EAAM,MAAC,GAAO,uBAAI,KAAO,IAAM,EAAG,c,KACnC,IAAC,MACF,MAAM,oBAAoC,GAAAA,EAA4B,mC,8BACpE,GAAgB,U,IAChB,I,GACD,eAAC,qIAEF,GAAM,WAAqB,CAAG,EAAmB,cAAuB,KAEpE,IAAE,EAAc,4B,GACZ,cAA8B,cAChC,GAAE,mBAAgC,kBAClC,GAAc,yC,QAEd,OAAiC,IAEhC,IAAM,UAAyB,EAEpC,EACA,EACyB,E,oBACpB,GAAO,SACH,IAAK,UACb,yCAEa,IAAO,SACf,MACS,CAEV,IAAU,EAAqB,EAAQ,OACnC,GAAK,gBACb,qBAGK,IAAsC,EAAM,OAE5C,CAEA,CAEL,E,QAGG,eAAoB,oCACN,MAAI,EAAM,oBACtB,EAAD,+B,EAEA,a,IACD,EAAI,EAAS,cAAgB,CAAC,EAAE,I,UAC9B,GAAa,KAAQ,GAAE,M,EAKvB,GAAsC,UAE5C,IAAM,YAAoB,G,GACxB,GAAM,GAAQ,OAAE,K,IAChB,EAAM,EAAQ,MAAG,YAAe,CAAC,gD,GACjC,GAAM,GAAW,Q,IACjB,EAAS,GAAe,mD,kCAQd,KAAI,I,YAEV,C,ECtDN,OAAiB,G,WAGd,CACD,MAAO,EACR,4HAED,IAAQ,CAAqB,MAAU,A,UACpC,GAAK,EACP,QACD,QAAU,+G,aACP,CACF,QAES,kBAA2C,qG,wBAChC,EAAG,GACtB,MAAM,EAEN,IAQ6D,YAR3C,OAAO,MAA0B,YAC/C,IACF,G,KACD,yCAED,EAAO,EACR,GAED,KAAmB,KAA4C,Y,oCAG3D,EAAI,CAAE,E,UAEL,uJAEC,GAAW,AADN,aACsB,IAAC,GAC7B,0BACD,MAAY,cACA,yBAEd,KAAqB,G,OACnB,EAAW,OAAgB,CAAC,IAC5B,MAAO,GAAuB,IAC7B,aACH,OAAM,UAAU,WAAa,CAC3B,OAAE,QACF,cAAc,C,sBA3ChB,IAAI,CAAC,gBAAa,e,EC7BpB,OAAa,whB,WAIb,CAAa,EACb,aAAa,uEACb,mBAAc,+EACd,eAAc,mDACd,eAAY,iDACZ,EAAW,0EACX,EAAS,0FACT,qBAAgB,+DAChB,EAAW,4DACX,EAAS,kEACT,kBAAgB,8CAChB,EAAO,gFACP,EAAU,gEACV,EAAW,4DACX,EAAW,0EACX,EAAU,kFACV,iBAAY,uDACZ,mBAAY,iDACZ,EAAO,4DACP,aAAY,2CACZ,EAAU,yB,MACV,IAAiB,K,SAIjB,CAAW,EACX,EAAM,iD,MACK,S,SAIL,GAEN,EAAK,gDACL,EAAU,W,MACF,Q,OCKA,WAA0C,G,SAsC1C,GAAc,E,IACpB,UAAK,CAAQ,yD,MACX,OAAO,kCACR,eAED,GAKA,SAAK,gBAAmB,AAC1B,GAAE,6CACH,+CAvFiC,OAAY,SAAiD,AACvF,GAEA,SAAC,eAAiB,A,GACpB,GAAK,kCAAoB,SAAE,CAAM,cAAE,CACnC,aAAc,MAAC,QAAW,oBACzB,eAEC,GACF,SAAK,gB,eAIH,C,IAEF,iBAAK,WAAiB,eAAqC,C,MACzD,K,SACA,IAAU,YAAK,A,MACd,6DACJ,WACF,yBAED,E,cAgBO,C,SACH,WAAO,mD,GACR,UACD,IAAM1uU,EAAK8+B,EAAO,KAAa,CAAC,KAAK,CAAC,kDACtC,QAAO,GAA+B,6FACtC,OAAM,QACF,kBAAmB,oBAAkB,Q,IAEvC,IAAK,oBAAmB,WACnB,GACK,QACR,wBAAoB,IACnB,6FAEE,KACL,qBAAwB,OAAI,4BAC5B,OAAM,Q,cACJuxS,EAA+B,KAAK,E,QACpC,oBAAoB,CAAI,CAAe,EANtC,sEACH,OAAK,OACN,uB,UAOC,UAAK,K,GAKA,oBAAmB,CAAG,kBAAmB,CAAC,qBAChD,e,cAAU,wBAA8B,oC,IAEvC,IAAK,oBAAmB,M,gCC9C1B,CAAK,EAAU,EAKjB,IAAE,mEACH,+CAhCiC,OAAY,QAAiD,AACvF,GAEA,SAAC,YAAiB,A,eAGnB,CACJ,+CAED,MAAU,KACJ,SAAC,YAAiB,A,gBAMhB,C,KACN,IAAK,WAAQ,iB,GACX,GAAO,O,IACR,kEACD,IAAgC,KAAK,SAAC,8CACtC,OAAW,QACX,cAAMA,EAA2B,OACjC,G,GCtBD,OAAmB,CACpB,uB,uBCgBA,U,qBACc,CACb,6BAED,CAGA,GAAC,OAKC,IACA,EACA,YAAoD,UAEpD,MAAM,KAEF,SAAS,C,EACT,C,MACIvtV,E,SACAssC,C,EAGR,GAAIkhT,EAAmB,CAACC,EAAgB,CAAE,CACxC,IAAMC,EAAgB,IAAIF,EAAmB,CAACC,EAAgB,CAC5D,IAAI,CAAC,gBAAgB,CACrB,IAAI,CAAC,KAAK,CAEZC,CAAAA,EAAc,QAAQ,CAACD,EAAOj1N,GAAS,8BACnC,UAAC,EACH,O,QAEC,oC,OACJ,I,MACC,EAAK,I,IACN,IAED,MAAY,YACb,0FAKC,KAAU,iBAEoC,2M,MAE9C,IAAM,EAAc,CAChB,WACE,WACF,QACI,SAAC,KACN,OAAM,WACL,OAAW,EAAK,MAAQ,CACtB,SAAU,K,OACR,K,OACI,I,OAGT,iC,MACI,IAAN,gC,OAAM,I,QAEH,CAAM,EAAO,E,YACX,gBAAQ,qB,YAGR,CAAM,C,4BACM,QAAI,U,sCAGL,CAAoB,KAAC,IAAM,I,gCAGpC,CAAM,KAAE,GAAI,8B,aA5Ed,CAAiB,CACvB,CAAI,EAMJ,IAAI,CAAC,iBAAgB,CAAG,aAAe,gBAAC,e,EChB1C,S,WAIO,EAAW,CAAK,EACtB,MAED,IAAU,EAAC,C,QACT,QAAyB,CACzB,EACA,OAAK,OAAS,GAAQ,gBAAgB,gCACtC,SAAO,IAAK,mBACd,CAEA,cAAcA,CAAkC,EAC9C,IAAMrxG,EAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAACqxG,EAAQ,QAAQ,EAC3C,GAAI,CAACrxG,EAAM,Y,IACT,YAAY,a,IACb,iGACD,OAAK,KAAK,IAAO,GAAQ,GAAU,4BACnC,I,gBAGU,EAAU,CACpB,OAAO,GAAK,qBACd,CAEA,cAAe,CAAkC,CAC/C,OAAIqxG,GAAS,qB,aAEZ,GACD,MACD,qFAED,C,gBACe,C,OACX,MAAQ,SAAS,KAAG,OAAM,yB,WAErB,CACR,qBAED,C,UACE,SAAO,SAAK,gBAAgB,MAAM,EACpC,C,aA9CY,CACJ,cAAW,IAAwC,IAAI,CAAG,WAAG,4CAGnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAmB,CAAM,EAAE,EAAI,kCACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAmB,CAAK,EAAE,C,ECFnD,OARQ,GAAQ,OAEd,IAAK,EAAS,GAAM74H,GAAM,EAAS,KAAI,Q,IACrC,IAAG,EAAM,EAAG,EAAImwE,EAAM,MAAM,OAAU,iB,OACvC,c,ECSD69Q,GAAS,GACT,IACAA,GAAS,YAAM,qE,CAChB,SACDA,GAAS,CAAK,CAEd,C,SAMM,GAAc,OAClB,IAAI,EAAgB,6BAChB,EAAY,cAEhB,GAAI,YAA6C,gDACjD,SAAI,EAAiC,GAEjC,QAAmB,IACnB,OAAO,EAAS,2BAEpB,CAGA,SAAM,EAAc,CAAQ,CAAK,CAAC,EAE9B,OAAO,EAAS,sBAAY,4C,UAE/B,KACG,IAAI,EAAU,IACd,YAAS,IAAQ,GAAE,oB,UAErB,IACA,IAAI,EAAQ,W,GACV,EAAU,GAAS,SAAqB,G,EACzC,gBAED,IAAQ,EAAwB,EAAK,EAAkB,EAAU,QAClE,0BAED,K,UAEE,EAAgB,GAEhB,SAAW,KAAW,KAAU,mBAChC,E,UAEA,IAAc,oEACf,wBAED,KAAmB,EAAC,EAAkB,IAAY,QAC5C,QAAQ,yBACV,SAAsC,EAAE,iBACxC,KACD,yBACD,CACD,+BAED,C,OACE,EAAU,IAAE,2CACV,GAAO,YAAyB,6BACjC,mDACD,YAAiB,YAClB,oCAED,aAAqB,EAEnB,KAAApxB,EAAsB,gB,IAEf,KAAG,YAEV,OAAO,SAAU,EAAW,EAAQ,EAAO,WAC7C,EAAC,qBAED,OAAS,SAAa,C,OAKpB,G,OAGO,G,YCxFG,CAAG,CAAK,KAEpB,IAAI,EAAO,CAAI,IAAK,CAAU,E,GAC5B,YAAU,OAAU,kBAAuB,uB,OAC5C,sCACD,EAAI,aAAmB,0BACrB,QAAO,EACP,SAAQ,EACT,SACD,E,YCfA,GACA,kBAAiB,8BACjB,gBAAa,6B,MACb,IAAe,KAOjB,UAAY,EACV,kBAAe,8BACf,qB,MACA,SAMF,UAAY,EAEV,cAAW,4BACX,kBAAe,0BACf,gBAAa,8BACb,kBAAe,8BACf,sBAAa,4CACb,kBAAa,oCACb,gBAAa,wCACb,0BAAiB,6B,MACjB,IAAa,K,SAIb,GACA,gBAAmB,8BACnB,oBAAuB,oCACvB,oBAAiB,qC,MAGjB,IAAa,K,SAUb,GAGA,cAAyB,gCACzB,6BAA6B,uBAlCnB,CAAe,GAAf,QAAe,GAmC1B,mCAKD,CAAY,GAUX,8CAVD,CAAY,GAAa,kB,MACvB,IAAa,K,SAIb,GACA,wBAAqB,uB,MACrB,SAKF,UAAY,EAAZ,EAAY,YAAc,iD,MACxB,S,SAIA,GACA,oCAAU,0BACV,yB,MACA,SAIF,UAAoB,EAClB,gCAAqB,gCACrB,oCAAyB,oCAFf,kBAGX,mDAED,MAGC,kBAHW,GAKZ,EAAY,WAIX,+DAJD,EAAY,SAAU,Y,MACpB,SAKF,UAAY,EAAZ,EAAY,gBAAa,qD,MACvB,S,SAIA,GACA,6BAA+B,uCANrB,EAAa,KAAb,QASZ,MAAY,IAKX,K,SAFC,GACA,4CAAuB,0CAJb,EAAS,qBAKpB,mEAED,EAAY,iBAGX,uDAHD,EAAY,gBAAU,sDACpB,yDAAqC,uDACrC,yDAAiC,uDAFvB,EAAU,oBAGrB,4DAGD,EAAY,mBAKX,6DALD,EAAY,gBAAW,oDACrB,qBAAiB,yDACjB,sCAAuB,oCACvB,wCAAyB,sCACzB,mBAAe,mDAJL,EAAW,uBAKtB,mEAED,EAAY,gBAuEX,oDAvED,EAAY,sBAAU,oEACpB,uDAA2C,qDAC3C,iDAAyC,+CAEzC,qDAA6C,uDAC7C,qDAA2C,4CAE3C,0CAAqC,8CACrC,4CAAmC,mCAEnC,iCAAoC,gDACpC,8CAAkC,0CAElC,qC,MACA,S,SAMA,GAEA,wBAAyC,wBACzC,4BAAuC,W,MAEvC,S,SAIA,GACA,oBAAmC,oBACnC,0BAAuC,W,MACvC,QC1JA,U,UASG,CACD,OAAI,U,wBAEH,KACD,OAAI,GAAK,OAAqB,8DAC5B,A,CAEJ,wBAAC,GAED,OAAQ,2B,CAER,uBAAC,GAMD,0BACuG,CACrGqxB,EAAqE,I,6BAG/C,CAAQ,E,OAC7B,mC,oBACQ,C,OACR,mB,CAEH,oBAAC,CACD,2BAAsE,A,oBAExD,CACb,0BAED,C,wBACqB,CACnB,OAAO,IAAI,CAAC,mBACd,C,YAlDQ,GAAqG,CAAG,KAW9G,IAAI,CAAC,cAAc,mDACnB,GAAc,4F,E5FoBhB,MAAO,G,OACL,kBAAqB,CAAG,CAAE,CAAI,CAAE,CACjC,kBAED,C,OACE,eAAa,EAAW,EAAI,Q,AAC1B,GAAO,UAAK,IACb,wBADa,I,QAGd,aAAW,IAAgB,CAC5B,cAED,C,OACE,WAAc,CAAI,CAAC,CAAG,CAAI,CAAC,SAC5B,aAEM,IAAW,GAAc,MAAa,GAAkB,QAF9D,I,gBAIU,CAAI,CAAE,C,MACd,c,QAEE,QAAQ,CAAI,CAAE,CAClB,mBAED,C,OACE,kBAAiB,CAAO,EAAM,EAC/B,mBAED,C,OACE,gBAAe,CAAa,QAC7B,wBAED,OAAO,QAAkB,EAAgB,EAA8B,GAAQ,I,CAE/E,OAAO,aAAN,GAED,MAAW,CAAC,CAAC,GAAwB,WAAL,CAAC,EAA6B,A,QAE5D,yBAAW,K,GACR,kBAAqB,CAAC,EAAI,CAAG,C,QAG7B,uBAAuB,CAAa,CAAE,CAAK,CAAE,CAAO,CAAE,CAC1D,+BAED,OAAW,EAAc,EAAoB,EAAO,GAAW,I,CAE/D,OAAO,kBAAN,OAED,GAAO,eAAyB,OAAe,MAA4D,CAAC,EAAW,CACrH,KAAU,EACX,aAED,E,QAGE,aAAgB,CAAE,E,OAChB,GAAW,WAAC,G,QAGd,6BAAiC,CAClC,wCAEM,cAAkB,GAAc,MAAqC,WAAyB,CAAC,EAAK,CAAC,SAAS,EAAK,IAAwB,WAAW,CAAC,EAAK,CAAG,IAAG,CACvK,EACF,CAEA,OAAO,gBAAgB,CAAY,CAAE,CAAY,CAAE,CAAO,CAAE,CAC1D,GAAQ,SAAS,CAAC,EAAK,CAAG,CAC3B,aAAc,EAER,gBAA2B,GAChC,C,sBAEY,GAAW,CAAC,CAAY,CAAC,C,MAErC,IAAM,EAAO,OAAU,GAAK,GAAwB,SAAS,CAAC,EAAK,AAAD,GAAM,KAAK,IAAM,EAAK,KAAK,EAAI,EAAG,YAAY,CACjH,OAAO,EAAO,IAAI,EAAK,EAAM,GAAe,IAE7C,C,OACE,aAAiB,C,OACf,cAAc,A,QAEd,YACH,oBAED,C,gCACE,IAAM,EAAO,GAAO,aAAC,GAAe,CAEpC,OAAO,EAAO,IAAI,EAAK,EAAM,GAAW,I,QAEvC,kBAED,MAAO,CAAC,CAAC,GAAQ,aAAa,CAAC,EAAgB,AACjD,C,IAIC,yEAkBD,WAAe,CAAC,MAAiB,gDAC/B,aAAO,CAAQ,MAAQ,SAAc,CAAG,CAAC,EAAG,GAAwB,kBAAkB,CAAG,CAAC,EAAG,GAC9F,6DAiBD,OAAO,KAAkB,wBAA4C,CAAS,CAAC,EAAe,K,GAC5F,WAAa,GAAQ,E,KACpB,gBAAkB,CAAG,AAAC,GAAgB,GAAwB,WAAW,CAAC,EAAc,CAAE,GAAwB,mBAClG,CAAG,CAAC,EAAiB,K,GACrC,kB,KAEA,eAAiB,CAAG,CAAC,EAAa,KACrC,GAAE,SAAS,CAAC,EAAY,CAAG,C,KAEpB,cAAc,CAAC,GAAwB,GAAwB,SAAS,CAAC,EAAY,CAAE,GAAwB,aAAa,CAAG,CAAC,EAAa,K,IAChJ,EAAU,GAAM,SAAS,CAAG,EAAY,CAC5C,OAAO,EAAU,EAAQ,GAAc,I,+BA/JxB,gBAAuD,CAAG,CAC1D,qBAA8C,0DAC9C,qBAAwD,KACxD,wBAA4F,CAAG,AAAC,GAAO,GAAwB,kBAAkB,CAAC,EAAK,C,I6FAtK,GAAoB,CACpB,cAAW,OACX,qBAAkB,OAClB,uBAAoB,OACpB,qBAAgB,OAChB,iBACA,iBAAa,OACb,mBAAoB,OAUpB,wBAEF,iBAAa,SAuBX,YAAY,S,WAnBJ,Q,QAIA,G,SAkRN,CAAM,EAAQ,E,IACd,EAAI,IAAoB,EAAI,E,IAE5B,YAAmB,I,MACR,KAAa,cAAU,oJ,GAElC,A,EADC,wBACD,EAAM,IAAM,GAA0B,+EAC7B,KAAc,CAAC,EAAK,Q,IAC3B,EAAK,2B,KACL,UAAK,yEACC,GACJ,GAAK,E,aACL,oBAAiB,gB,MACf,IAAO,4BAAgB,W,eACvB,yEACJ,Q,CAEJ,OAAE,I,YAlRK,EAAS,CAAG,EAClB,YAED,IAAQ,EAAoC,G,uMAE1C,GAAI,EAAC,CAEL,IAAMC,EAAU,EAAK,MACrB,OAAM,GAAgB,EAAC,aAAkB,CAAAr1N,GAAA,IAAQ,OAAM,wBAAE,OAAU,KAAkB,OAAO,GAExF,EAAQ,MAAM,CAADi1N,GAAQ,2G,KACvB,CACD,cAGD,OAAY,GAAU,EAAK,OAAiB,mBAC5C,CACA,GAAI,GAAK,kBAAoB,IAAK,CAChC,IAAMnhT,EAAW,EAAK,MACtB,KAAI,CAAC,SAAS,CAAC,mBAAiB,SAAQ,SAAM,oBAAE,KAA2B,IAAK,EAAE,KAAS,EAAC,yBAC5FhS,EAAU,MAAI,CAAAmzT,E,QACT,IAAI,A,UAET,CAAK,EAAS,CAAC,G,IACf,EAAU,IAAI,eAAgB,CAAC,2B,GAChC,eACD,MAAY,GACb,MAED,IAAkC,EAA8D,iB,qBAC9F,KAAI,CAEJ,IAAM,EAAU,CAAK,OAAe,SAAO,SAAP,UAAe,EAC7C,IAEF,KAAC,IAAS,oDACZ,G,QAEA,IAAO,A,SAER,K,MAAM,wCACL,IAAMI,EAAS,mBAAmB,UAClCA,CAAAA,GAAM,+BACF,GAAM,gCAAE,G,SAEV,A,QAED,E,MAED,CAAI,SAAC,QAAO,SAAP,QAAO,K,IAET,EAAQ,mBAA8B,CAAC,GAAE,M,IAC3C,gD,GACF,I,QAGC,C,SACe,UAAoB,CAAO,uBAC1C,IAAAvzT,EAAiB,IAAK,CAAC,iBAAC,IACzB,yEACD,EAAY,OACb,2EAEO,IAAwB,IAAY,KAA4D,uBAEtG,EAAY,KAAG,EAIf,E,UAEC,CAGD,IAAI,SAAU,IAAY,eAAM,yB,SAI9B,CAAM,IAAW,E,IACjB,M,GACD,4B,EAAM,0CACL,EAAM,QAAS,4EADhB,S,MAEG,OAAkB,GAAK,mC,SACvB,GAAwB,gBACxB,UAAmB,EAAK,qM,gBAExB,K,GACF,EAAK,QAAK,qBAGV,MAAQ,EAAc,IAAI,aAAa,GAAE,iD,OACvC,OAAU,MAAG,CAAI,OAAC,MAAQ,EAAM,EAAC,GAAW,CAC5C,KAAI,EACL,OACF,EAED,CACD,0BAED,C,QACE,CAAM,EAAU,CAAI,EAAQ,CAC5B,SAAW,GAAQ,KACjB,MAAM,EAAM,EACZ,IAAI,EAAQ,S,GACV,GAAO,WAAgB,EAAC,EAAQ,OAAQ,IAAE,kB,IACxC,EAAe,AAAAk+F,CAAAA,EAAQ,eAAa,EAAM,EAAE,0G,UACnC,QAAe,GAAS,iDAChC,gD,QAEJ,W,gBAEQ,CAAC,EACb,8DAED,C,YACQ,EAAW,CACjB,M,IACE,EAAM,EAAS,KAAK,A,QAChB,EAAQ,0I,MACV,IAAO,eAAgB,CAAC,GAAQ,EAAO,KAAI,EAAO,QAAuB,sB,MAC1E,4CACH,AAAC,OAAE,sGACH,OAAO,EAAK,+EACb,sBAEI,QACH,SAAc,EAEd,KAAM,EACJ,OAAM,EACN,SAAK,E,OACC,E,OACL,qD,mBAIG,EAAY,C,OAChB,G,aACmB,C,OAClB,iBAED,MAAC,UACJ,0BAGC,MAAK,SAAQ,CACT,OAAC,mBAAsB,AAE5B,SAKsC,OAAmB,IAAU,aAAoC,A,oBAE7F,CAAM,E,OACd,GAGD,KAAI,QAAuB,CACzB,OAAO,KAAK,cAAC,AAGf,MAAI,SAAoB,CAEtB,OAAO,KAAK,gBAAC,AAGf,MAAI,SAAmB,CACnB,4BAA2B,AAE9B,SACG,OAAO,IAAI,eAAa,A,gBAKlB,CAAC,CAAM,C,OACf,WAAa,kC,qBAIC,CAAK,E,IACnB,E,OACD,4C,aArMK,GAA8E,EAI9E,sBAA8E,IAAI,IAGvF,CAAC,mDAwNI,mBAAc,CAAC,YAA0C,CAAE,gBAAE,4DACnE,MAAM,EACN,IAAM,EAAQ,IAAC,eAAQ,SAAe,GAAQ,EAAI,GAAK,mBAALs1N,EAAO,OAAY,EAAC,YAAe,GAAa,OAAU,oFAC5G,EAAc,OAAQ,GAAAC,EAAsB,IAAI,GAAK,SAAL,EAAK,cAIrD,OAAgB,GAAuB,0DACnC,MAAU,EAAQ,IAClB,QAAc,GAAQ,QAAa,EAAK,8B,KAE3C,uBACD,EAAO,EAAU,KAAV,A,IACL,cAAqB,EAAM,wD,IAE3B,EAAW,C,MACT,EAAgB,M,KACjB,OACD,SAAuB,MAAM,CAC9B,QAED,QAAa,EAET,MAAK,EACL,MAAK,EACP,KAAM,MAAG,EAAqB,EAAQ,KAAK,EAC5C,yBAED,E,IACE,SAAO,CAAAA,EAAe,IAAK,G,OAC3B,2BAAyB,K,IACzB,EAAQ,mBAAqB,sBAC7B,EAAK,I,GACL,QAAO,iB,IACP,EAAK,CACL,MAAK,QACL,MAAM,EACN,MAAM,EACN,gCACF,EACA,uBAKM,wBAA4B,IAAG,WAA0C,C,ECxUpE,YAAS7wU,CAAC,EACvB,OAAOA,CACT,CCFA,SAAS8wU,GAAeC,CAAQ,CAAEpkT,CAAM,EAClCokT,GAAYC,GAAmB,cAAc,CAACD,EAAS,IAAI,GAC7DC,EAAkB,CAACD,EAAS,IAAI,CAAC,CAACA,EAAUpkT,EAEhD,CAEA,IAAIskT,GAAmB,CACrB,QAAS,SAASt1T,CAAM,CAAEgR,CAAM,EAC9BmkT,GAAen1T,EAAO,QAAQ,CAAEgR,EAClC,EACA,kBAAmB,SAAShR,CAAM,CAAEgR,CAAM,EAExC,IADA,IAAI5gB,EAAW4P,EAAO,QAAQ,CAAEr/B,EAAI,GAAI4hB,EAAI6N,EAAS,MAAM,CACpD,EAAEzvB,EAAI4hB,GAAG4yU,GAAe/kU,CAAQ,CAACzvB,EAAE,CAAC,QAAQ,CAAEqwC,EACvD,CACF,EAEIqkT,GAAqB,CACvB,OAAQ,SAASr1T,CAAM,CAAEgR,CAAM,EAC7BA,EAAO,MAAM,EACf,EACA,MAAO,SAAShR,CAAM,CAAEgR,CAAM,EAC5BhR,EAASA,EAAO,WAAW,CAC3BgR,EAAO,KAAK,CAAChR,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CAC9C,EACA,WAAY,SAASA,CAAM,CAAEgR,CAAM,EAEjC,IADA,IAAIkjF,EAAcl0F,EAAO,WAAW,CAAEr/B,EAAI,GAAI4hB,EAAI2xG,EAAY,MAAM,CAC7D,EAAEvzH,EAAI4hB,GAAGyd,EAASk0F,CAAW,CAACvzH,EAAE,CAAEqwC,EAAO,KAAK,CAAChR,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CAAEA,CAAM,CAAC,EAAE,CACvF,EACA,WAAY,SAASA,CAAM,CAAEgR,CAAM,EACjCukT,GAAWv1T,EAAO,WAAW,CAAEgR,EAAQ,EACzC,EACA,gBAAiB,SAAShR,CAAM,CAAEgR,CAAM,EAEtC,IADA,IAAIkjF,EAAcl0F,EAAO,WAAW,CAAEr/B,EAAI,GAAI4hB,EAAI2xG,EAAY,MAAM,CAC7D,EAAEvzH,EAAI4hB,GAAGgzU,GAAWrhO,CAAW,CAACvzH,EAAE,CAAEqwC,EAAQ,EACrD,EACA,QAAS,SAAShR,CAAM,CAAEgR,CAAM,EAC9BwkT,GAAcx1T,EAAO,WAAW,CAAEgR,EACpC,EACA,aAAc,SAAShR,CAAM,CAAEgR,CAAM,EAEnC,IADA,IAAIkjF,EAAcl0F,EAAO,WAAW,CAAEr/B,EAAI,GAAI4hB,EAAI2xG,EAAY,MAAM,CAC7D,EAAEvzH,EAAI4hB,GAAGizU,GAActhO,CAAW,CAACvzH,EAAE,CAAEqwC,EAChD,EACA,mBAAoB,SAAShR,CAAM,CAAEgR,CAAM,EAEzC,IADA,IAAIykT,EAAaz1T,EAAO,UAAU,CAAEr/B,EAAI,GAAI4hB,EAAIkzU,EAAW,MAAM,CAC1D,EAAE90V,EAAI4hB,GAAG4yU,GAAeM,CAAU,CAAC90V,EAAE,CAAEqwC,EAChD,CACF,EAEA,SAASukT,GAAWrhO,CAAW,CAAEljF,CAAM,CAAEub,CAAM,EAC7C,IAA6CmpS,EAAzC/0V,EAAI,GAAI4hB,EAAI2xG,EAAY,MAAM,CAAG3nE,EAErC,IADAvb,EAAO,SAAS,GACT,EAAErwC,EAAI4hB,GAAGmzU,EAAaxhO,CAAW,CAACvzH,EAAE,CAAEqwC,EAAO,KAAK,CAAC0kT,CAAU,CAAC,EAAE,CAAEA,CAAU,CAAC,EAAE,CAAEA,CAAU,CAAC,EAAE,EACrG1kT,EAAO,OAAO,EAChB,CAEA,SAASwkT,GAActhO,CAAW,CAAEljF,CAAM,EACxC,IAAIrwC,EAAI,GAAI4hB,EAAI2xG,EAAY,MAAM,CAElC,IADAljF,EAAO,YAAY,GACZ,EAAErwC,EAAI4hB,GAAGgzU,GAAWrhO,CAAW,CAACvzH,EAAE,CAAEqwC,EAAQ,GACnDA,EAAO,UAAU,EACnB,CAEe,YAAShR,CAAM,CAAEgR,CAAM,EAChChR,GAAUs1T,GAAiB,cAAc,CAACt1T,EAAO,IAAI,EACvDs1T,EAAgB,CAACt1T,EAAO,IAAI,CAAC,CAACA,EAAQgR,GAEtCmkT,GAAen1T,EAAQgR,EAE3B,CC7De,cACb,OAAO,IAAI2kT,EACb,CAEA,SAASA,KACP,IAAI,CAAC,KAAK,EACZ,CAEAA,GAAM,SAAS,CAAG,CAChB,YAAaA,GACb,MAAO,WACL,IAAI,CAAC,CAAC,CACN,IAAI,CAAC,CAAC,CAAG,CACX,EACA,IAAK,SAASrxU,CAAC,EACbuoE,GAAIk3L,GAAMz/P,EAAG,IAAI,CAAC,CAAC,EACnBuoE,GAAI,IAAI,CAAEk3L,GAAK,CAAC,CAAE,IAAI,CAAC,CAAC,EACpB,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,EAAIA,GAAK,CAAC,CACvB,IAAI,CAAC,CAAC,CAAGA,GAAK,CAAC,AACtB,EACA,QAAS,WACP,OAAO,IAAI,CAAC,CAAC,AACf,CACF,EAEA,IAAIA,GAAO,IAAI4xE,GAEf,SAAS9oQ,GAAI+oQ,CAAK,CAAElnV,CAAC,CAAEC,CAAC,EACtB,IAAI0V,EAAIuxU,EAAM,CAAC,CAAGlnV,EAAIC,EAClBknV,EAAKxxU,EAAI3V,EACTonV,EAAKzxU,EAAIwxU,CACbD,CAAAA,EAAM,CAAC,CAAIlnV,EAAIonV,EAAOnnV,CAAAA,EAAIknV,CAAC,CAC7B,CCvCO,IAAI/kH,GAAU,KACVilH,GAAW,MACXjpT,GAAKl7B,KAAK,EAAE,CACZokV,GAASlpT,GAAK,EACdmpT,GAAYnpT,GAAK,EACjB4kM,GAAM5kM,AAAK,EAALA,GAENopT,GAAU,IAAMppT,GAChBqpT,GAAUrpT,GAAK,IAEfjH,GAAMj0B,KAAK,GAAG,CACdwkV,GAAOxkV,KAAK,IAAI,CAChBykV,GAAQzkV,KAAK,KAAK,CAClB0kV,GAAM1kV,KAAK,GAAG,CAEd2kV,GAAM3kV,KAAK,GAAG,CAEdo1H,GAAMp1H,KAAK,GAAG,CACdm0B,GAAMn0B,KAAK,GAAG,CACd4kV,GAAM5kV,KAAK,GAAG,CACdoa,GAAOpa,KAAK,IAAI,EAAI,SAASyS,CAAC,EAAI,OAAOA,EAAI,EAAI,EAAIA,EAAI,EAAI,GAAK,CAAG,EACrEoyU,GAAO7kV,KAAK,IAAI,CAChB20D,GAAM30D,KAAK,GAAG,CAElB,SAAS8kV,GAAKryU,CAAC,EACpB,OAAOA,EAAI,EAAI,EAAIA,EAAI,GAAKyoB,GAAKl7B,KAAK,IAAI,CAACyS,EAC7C,CAEO,SAASsyU,GAAKtyU,CAAC,EACpB,OAAOA,EAAI,EAAI2xU,GAAS3xU,EAAI,GAAK,CAAC2xU,GAASpkV,KAAK,IAAI,CAACyS,EACvD,CC9Be,SAASyF,KAAQ,CCIhC,IjhBFY,GkZgIA,GChIA,GgBAA,GAkBV,GzWpBU,G0bKA,G/eLA,G2fKV,GAyBA,GAMA,GS/BU,MAWA,GAqBV,GAYA,GAmBA,GAMA,GAMA,GAHU,GAkBV,GAOA,GAMA,GAOA,GAoCA,GAUA,GQ3JE8sU,GACAC,GACAxW,GACAyW,GALAC,GAAUnB,KACVoB,GAAcpB,KAMdqB,GAAa,CACf,MAAOntU,GACP,UAAWA,GACX,QAASA,GACT,aAAc,WACZmtU,GAAW,SAAS,CAAGC,GACvBD,GAAW,OAAO,CAAGE,EACvB,EACA,WAAY,WACVF,GAAW,SAAS,CAAGA,GAAW,OAAO,CAAGA,GAAW,KAAK,CAAGntU,GAC/DitU,GAAQ,GAAG,CAAClxT,GAAImxT,KAChBA,GAAY,KAAK,EACnB,EACA,OAAQ,WACN,IAAII,EAAOL,GAAU,EAErB,OADAA,GAAQ,KAAK,GACNK,CACT,CACF,EAEA,SAASF,KACPD,GAAW,KAAK,CAAGI,EACrB,CAEA,SAASA,GAAehzU,CAAC,CAAEC,CAAC,EAC1B2yU,GAAW,KAAK,CAAGK,GACnBV,GAAMvW,GAAKh8T,EAAGwyU,GAAMC,GAAKxyU,CAC3B,CAEA,SAASgzU,GAAUjzU,CAAC,CAAEC,CAAC,EACrB0yU,GAAY,GAAG,CAACF,GAAKzyU,EAAIg8T,GAAK/7T,GAC9B+7T,GAAKh8T,EAAGyyU,GAAKxyU,CACf,CAEA,SAAS6yU,KACPG,GAAUV,GAAKC,GACjB,CAEA,OAAeI,GC/Cf,IAAI5W,GAAKpvU,IACL6lV,GADK7lV,IAELu5C,GAAK,CAFAv5C,IAGLw5C,GAAKD,GAsBT,OApBmB,CACjB,MAYF,SAAqBnmC,CAAC,CAAEC,CAAC,EACnBD,EAAIg8T,IAAIA,CAAAA,GAAKh8T,CAAAA,EACbA,EAAImmC,IAAIA,CAAAA,GAAKnmC,CAAAA,EACbC,EAAIwyU,IAAIA,CAAAA,GAAKxyU,CAAAA,EACbA,EAAImmC,IAAIA,CAAAA,GAAKnmC,CAAAA,CACnB,EAhBE,UAAWwF,GACX,QAASA,GACT,aAAcA,GACd,WAAYA,GACZ,OAAQ,WACN,IAAIigD,EAAS,CAAC,CAACs2Q,GAAIyW,GAAG,CAAE,CAACtsS,GAAIC,GAAG,CAAC,CAEjC,OADAD,GAAKC,GAAK,CAAEqsS,CAAAA,GAAKzW,GAAKpvU,GAAO,EACtB84D,CACT,CACF,ECdA,IASI6sR,GACAC,GACAxW,GACAyW,GAZAS,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EAMLC,GAAiB,CACnB,MAAOC,GACP,UAAWC,GACX,QAASC,GACT,aAAc,WACZH,GAAe,SAAS,CAAGI,GAC3BJ,GAAe,OAAO,CAAGK,EAC3B,EACA,WAAY,WACVL,GAAe,KAAK,CAAGC,GACvBD,GAAe,SAAS,CAAGE,GAC3BF,GAAe,OAAO,CAAGG,EAC3B,EACA,OAAQ,WACN,IAAIG,EAAWP,GAAK,CAACF,GAAKE,GAAID,GAAKC,GAAG,CAChCH,GAAK,CAACF,GAAKE,GAAID,GAAKC,GAAG,CACvBH,GAAK,CAACF,GAAKE,GAAID,GAAKC,GAAG,CACvB,CAACnpT,IAAKA,IAAI,CAIhB,OAHAipT,GAAKC,GAAKC,GACVC,GAAKC,GAAKC,GACVC,GAAKC,GAAKC,GAAK,EACRO,CACT,CACF,EAEA,SAASL,GAAc5zU,CAAC,CAAEC,CAAC,EACzBizU,IAAMlzU,EACNmzU,IAAMlzU,EACN,EAAEmzU,EACJ,CAEA,SAASS,KACPF,GAAe,KAAK,CAAGO,EACzB,CAEA,SAASA,GAAuBl0U,CAAC,CAAEC,CAAC,EAClC0zU,GAAe,KAAK,CAAGQ,GACvBP,GAAc5X,GAAKh8T,EAAGyyU,GAAKxyU,EAC7B,CAEA,SAASk0U,GAAkBn0U,CAAC,CAAEC,CAAC,EAC7B,IAAIm0U,EAAKp0U,EAAIg8T,GAAIjC,EAAK95T,EAAIwyU,GAAI76R,EAAIw6R,GAAKgC,EAAKA,EAAKra,EAAKA,GACtDsZ,IAAMz7R,EAAKokR,CAAAA,GAAKh8T,CAAAA,EAAK,EACrBszU,IAAM17R,EAAK66R,CAAAA,GAAKxyU,CAAAA,EAAK,EACrBszU,IAAM37R,EACNg8R,GAAc5X,GAAKh8T,EAAGyyU,GAAKxyU,EAC7B,CAEA,SAAS6zU,KACPH,GAAe,KAAK,CAAGC,EACzB,CAEA,SAASG,KACPJ,GAAe,KAAK,CAAGU,EACzB,CAEA,SAASL,KACPM,GAAkB/B,GAAKC,GACzB,CAEA,SAAS6B,GAAuBr0U,CAAC,CAAEC,CAAC,EAClC0zU,GAAe,KAAK,CAAGW,GACvBV,GAAcrB,GAAMvW,GAAKh8T,EAAGwyU,GAAMC,GAAKxyU,EACzC,CAEA,SAASq0U,GAAkBt0U,CAAC,CAAEC,CAAC,EAC7B,IAAIm0U,EAAKp0U,EAAIg8T,GACTjC,EAAK95T,EAAIwyU,GACT76R,EAAIw6R,GAAKgC,EAAKA,EAAKra,EAAKA,GAE5BsZ,IAAMz7R,EAAKokR,CAAAA,GAAKh8T,CAAAA,EAAK,EACrBszU,IAAM17R,EAAK66R,CAAAA,GAAKxyU,CAAAA,EAAK,EACrBszU,IAAM37R,EAGN47R,IAAM57R,AADNA,CAAAA,EAAI66R,GAAKzyU,EAAIg8T,GAAK/7T,CAAAA,EACP+7T,CAAAA,GAAKh8T,CAAAA,EAChByzU,IAAM77R,EAAK66R,CAAAA,GAAKxyU,CAAAA,EAChByzU,IAAM97R,AAAI,EAAJA,EACNg8R,GAAc5X,GAAKh8T,EAAGyyU,GAAKxyU,EAC7B,CAEA,OAAe0zU,GChGA,SAASY,GAAY7uU,CAAO,EACzC,IAAI,CAAC,QAAQ,CAAGA,CAClB,CAEA6uU,GAAY,SAAS,CAAG,CACtB,QAAS,IACT,YAAa,SAASjrT,CAAC,EACrB,OAAO,IAAI,CAAC,OAAO,CAAGA,EAAG,IAAI,AAC/B,EACA,aAAc,WACZ,IAAI,CAAC,KAAK,CAAG,CACf,EACA,WAAY,WACV,IAAI,CAAC,KAAK,CAAGW,GACf,EACA,UAAW,WACT,IAAI,CAAC,MAAM,CAAG,CAChB,EACA,QAAS,WACY,IAAf,IAAI,CAAC,KAAK,EAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,GAC7C,IAAI,CAAC,MAAM,CAAGA,GAChB,EACA,MAAO,SAASjqB,CAAC,CAAEC,CAAC,EAClB,OAAQ,IAAI,CAAC,MAAM,EACjB,KAAK,EACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACD,EAAGC,GACxB,IAAI,CAAC,MAAM,CAAG,EACd,KAEF,MAAK,EACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACD,EAAGC,GACxB,KAEF,SACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACD,EAAI,IAAI,CAAC,OAAO,CAAEC,GACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACD,EAAGC,EAAG,IAAI,CAAC,OAAO,CAAE,EAAGotN,GAG7C,CACF,EACA,OAAQ5nN,EACV,ECxCA,IACI+uU,GACAjC,GACAC,GACAxW,GACAyW,GALAgC,GAAYlD,KAOZmD,GAAe,CACjB,MAAOjvU,GACP,UAAW,WACTivU,GAAa,KAAK,CAAGC,EACvB,EACA,QAAS,WACHH,IAAYI,GAAYrC,GAAKC,IACjCkC,GAAa,KAAK,CAAGjvU,EACvB,EACA,aAAc,WACZ+uU,GAAa,EACf,EACA,WAAY,WACVA,GAAa,IACf,EACA,OAAQ,WACN,IAAI/yV,EAAS,CAACgzV,GAEd,OADAA,GAAU,KAAK,GACRhzV,CACT,CACF,EAEA,SAASkzV,GAAiB30U,CAAC,CAAEC,CAAC,EAC5By0U,GAAa,KAAK,CAAGE,GACrBrC,GAAMvW,GAAKh8T,EAAGwyU,GAAMC,GAAKxyU,CAC3B,CAEA,SAAS20U,GAAY50U,CAAC,CAAEC,CAAC,EACvB+7T,IAAMh8T,EAAGyyU,IAAMxyU,EACfw0U,GAAU,GAAG,CAACrC,GAAKpW,GAAKA,GAAKyW,GAAKA,KAClCzW,GAAKh8T,EAAGyyU,GAAKxyU,CACf,CAEA,OAAey0U,GC5CA,SAASG,KACtB,IAAI,CAAC,OAAO,CAAG,EAAE,AACnB,CAmDA,SAAStR,GAAOthR,CAAM,EACpB,MAAO,MAAQA,EACT,IAAMA,EAAS,IAAMA,EAAS,YAAc,GAAKA,EACjD,IAAMA,EAAS,IAAMA,EAAS,YAAc,EAAIA,EAChD,GACR,CCjDe,YAAS6yR,CAAU,CAAEpvU,CAAO,EACzC,IACIqvU,EACAC,EAFAC,EAAc,IAIlB,SAASxyV,EAAKk5B,CAAM,EAKlB,OAJIA,IACyB,YAAvB,OAAOs5T,GAA4BD,EAAc,WAAW,CAAC,CAACC,EAAY,KAAK,CAAC,IAAI,CAAExnV,YAC1Fk/B,GAAOhR,EAAQo5T,EAAiBC,KAE3BA,EAAc,MAAM,EAC7B,CAuCA,OArCAvyV,EAAK,IAAI,CAAG,SAASk5B,CAAM,EAEzB,OADAgR,GAAOhR,EAAQo5T,EAAiBG,KACzBA,GAAAA,MAAe,EACxB,EAEAzyV,EAAK,OAAO,CAAG,SAASk5B,CAAM,EAE5B,OADAgR,GAAOhR,EAAQo5T,EAAiBI,KACzBA,GAAAA,MAAkB,EAC3B,EAEA1yV,EAAK,MAAM,CAAG,SAASk5B,CAAM,EAE3B,OADAgR,GAAOhR,EAAQo5T,EAAiBK,KACzBA,GAAAA,MAAiB,EAC1B,EAEA3yV,EAAK,QAAQ,CAAG,SAASk5B,CAAM,EAE7B,OADAgR,GAAOhR,EAAQo5T,EAAiBM,KACzBA,GAAAA,MAAmB,EAC5B,EAEA5yV,EAAK,UAAU,CAAG,SAAS6mC,CAAC,EAC1B,OAAO77B,UAAU,MAAM,CAAIsnV,CAAAA,EAAmBzrT,AAAK,MAALA,EAAawrT,CAAAA,EAAa,KAAMj8J,EAAAA,EAAai8J,AAAAA,CAAAA,EAAaxrT,CAAAA,EAAG,MAAM,CAAE7mC,CAAG,EAAKqyV,CAC7H,EAEAryV,EAAK,OAAO,CAAG,SAAS6mC,CAAC,SACvB,AAAK77B,UAAU,MAAM,EACrBunV,EAAgB1rT,AAAK,MAALA,EAAa5jB,CAAAA,EAAU,KAAM,IAAImvU,EAAS,EAAK,IAAIN,GAAY7uU,EAAU4jB,GAC9D,YAAvB,OAAO2rT,GAA4BD,EAAc,WAAW,CAACC,GAC1DxyV,GAHuBijB,CAIhC,EAEAjjB,EAAK,WAAW,CAAG,SAAS6mC,CAAC,SAC3B,AAAK77B,UAAU,MAAM,EACrBwnV,EAAc,AAAa,YAAb,OAAO3rT,EAAmBA,EAAK0rT,CAAAA,EAAc,WAAW,CAAC,CAAC1rT,GAAI,CAACA,CAAAA,EACtE7mC,GAFuBwyV,CAGhC,EAEOxyV,EAAK,UAAU,CAACqyV,GAAY,OAAO,CAACpvU,EAC7C,CCpBA,SAAS4vU,GAAa3lO,CAAO,EACzB,IAAI9mG,EAAS,CAAE,KAAM,SAAU,EAe/B,OAbA9X,OAAO,IAAI,CAAC4+G,GAAS,OAAO,CAAC,SAAUxrH,CAAG,EACtC,OAAQA,GACJ,IAAK,OACL,IAAK,aACL,IAAK,WACD,MACJ,SACI0kB,CAAM,CAAC1kB,EAAI,CAAGwrH,CAAO,CAACxrH,EAAI,AAClC,CACJ,GAEA0kB,EAAO,UAAU,CAAG0sU,GAAgB5lO,EAAQ,UAAU,EACtD9mG,EAAO,QAAQ,CAAG2sU,GAAc7lO,EAAQ,QAAQ,EACzC9mG,CACX,CAQA,SAAS0sU,GAAgB5oR,CAAU,EAC/B,IAAI9jD,EAAS,CAAC,SACT8jD,GAGL57D,OAAO,IAAI,CAAC47D,GAAY,OAAO,CAAC,SAAUxoE,CAAG,EACzC,IAAIjH,EAAQyvE,CAAU,CAACxoE,EAAI,AACvB,AAAiB,WAAjB,OAAOjH,EACHA,AAAU,OAAVA,EAEA2rB,CAAM,CAAC1kB,EAAI,CAAG,KAEThH,MAAM,OAAO,CAACD,GAEnB2rB,CAAM,CAAC1kB,EAAI,CAAGjH,EAAM,GAAG,CAAC,SAAU2lB,CAAI,EAClC,OAAOA,CACX,GAIAgG,CAAM,CAAC1kB,EAAI,CAAGoxV,GAAgBr4V,GAIlC2rB,CAAM,CAAC1kB,EAAI,CAAGjH,CAEtB,GAvBW2rB,CAyBf,CAQA,SAAS4sU,GAAuB9lO,CAAO,EACnC,IAAI9mG,EAAS,CAAE,KAAM,mBAAoB,EAezC,OAbA9X,OAAO,IAAI,CAAC4+G,GAAS,OAAO,CAAC,SAAUxrH,CAAG,EACtC,OAAQA,GACJ,IAAK,OACL,IAAK,WACD,MACJ,SACI0kB,CAAM,CAAC1kB,EAAI,CAAGwrH,CAAO,CAACxrH,EAAI,AAClC,CACJ,GAEA0kB,EAAO,QAAQ,CAAG8mG,EAAQ,QAAQ,CAAC,GAAG,CAAC,SAAU+lO,CAAO,EACpD,OAAOJ,GAAaI,EACxB,GACO7sU,CACX,CAQA,SAAS2sU,GAAczE,CAAQ,EAC3B,IAAIthO,EAAO,CAAE,KAAMshO,EAAS,IAAI,AAAC,SAC7BA,EAAS,IAAI,EACbthO,CAAAA,EAAK,IAAI,CAAGshO,EAAS,IAAI,AAAD,EAExBA,AAAkB,uBAAlBA,EAAS,IAAI,EACbthO,EAAK,UAAU,CAAGshO,EAAS,UAAU,CAAC,GAAG,CAAC,SAAU16S,CAAC,EACjD,OAAOm/S,GAAcn/S,EACzB,GAGJo5E,EAAK,WAAW,CAAGkmO,GAAU5E,EAAS,WAAW,EAC1CthO,CACX,CAQA,SAASkmO,GAAUC,CAAM,EACrB,IAAI/sU,EAAS+sU,QACb,AAAI,AAAqB,UAArB,OAAO/sU,CAAM,CAAC,EAAE,CACTA,EAAO,KAAK,GAEhBA,EAAO,GAAG,CAAC,SAAUgtU,CAAK,EAC7B,OAAOF,GAAUE,EACrB,EACJ,CFvJAhB,GAAW,SAAS,CAAG,CACrB,QAAS,IACT,QAAStR,GAAO,KAChB,YAAa,SAASj6S,CAAC,EAErB,MADKA,CAAAA,EAAI,CAACA,CAAAA,IAAO,IAAI,CAAC,OAAO,EAAE,KAAI,CAAC,OAAO,CAAGA,EAAG,IAAI,CAAC,OAAO,CAAG,IAAG,EAC5D,IAAI,AACb,EACA,aAAc,WACZ,IAAI,CAAC,KAAK,CAAG,CACf,EACA,WAAY,WACV,IAAI,CAAC,KAAK,CAAGW,GACf,EACA,UAAW,WACT,IAAI,CAAC,MAAM,CAAG,CAChB,EACA,QAAS,WACY,IAAf,IAAI,CAAC,KAAK,EAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KACxC,IAAI,CAAC,MAAM,CAAGA,GAChB,EACA,MAAO,SAASjqB,CAAC,CAAEC,CAAC,EAClB,OAAQ,IAAI,CAAC,MAAM,EACjB,KAAK,EACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAKD,EAAG,IAAKC,GAC/B,IAAI,CAAC,MAAM,CAAG,EACd,KAEF,MAAK,EACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAKD,EAAG,IAAKC,GAC/B,KAEF,SACsB,MAAhB,IAAI,CAAC,OAAO,EAAU,KAAI,CAAC,OAAO,CAAGsjU,GAAO,IAAI,CAAC,OAAO,GAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAKvjU,EAAG,IAAKC,EAAG,IAAI,CAAC,OAAO,CAGlD,CACF,EACA,OAAQ,WACN,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAKrB,OAAO,KAJP,IAAI/P,EAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAE/B,OADA,IAAI,CAAC,OAAO,CAAG,EAAE,CACVA,CAIX,CACF,EEyGA,OAhJA,SAAey/G,CAAO,EAClB,GAAI,CAACA,EACD,MAAM,AAAIjyH,MAAM,uBAEpB,OAAQiyH,EAAQ,IAAI,EAChB,IAAK,UACD,OAAO2lO,GAAa3lO,EACxB,KAAK,oBACD,OAAO8lO,GAAuB9lO,EAClC,KAAK,QACL,IAAK,aACL,IAAK,UACL,IAAK,aACL,IAAK,kBACL,IAAK,eACL,IAAK,qBACD,OAAO6lO,GAAc7lO,EACzB,SACI,MAAM,AAAIjyH,MAAM,uBACxB,CACJ,ECeO,SAASo4V,GAAUF,CAAM,EAC5B,GAAIz4V,MAAM,OAAO,CAACy4V,GACd,OAAOA,EAGX,GAAIA,AAAgB,YAAhBA,EAAO,IAAI,CACX,IAAIA,AAAoB,OAApBA,EAAO,QAAQ,CACf,OAAOA,EAAO,QAAQ,CAAC,WAAW,AACtC,MAIA,GAAIA,EAAO,WAAW,CAClB,OAAOA,EAAO,WAAW,AAGjC,OAAM,AAAIl4V,MAAM,8DACpB,CChDe,SAASq4V,GAAiB36V,CAAI,EAMzC,IALA,IAGIwG,EACAia,EAJAm6U,EAAOF,GAAU16V,GACjB4tE,EAAM,EACN1sE,EAAI,EAGDA,EAAI05V,EAAK,MAAM,EAClBp0V,EAAOia,GAAOm6U,CAAI,CAAC,EAAE,CAErBhtR,GAAQntD,AAAAA,CAAAA,AADRA,CAAAA,EAAMm6U,CAAI,CAAC15V,EAAE,AAAD,CACD,CAAC,EAAE,CAAGsF,CAAI,CAAC,EAAC,EAAMia,CAAAA,CAAG,CAAC,EAAE,CAAGja,CAAI,CAAC,EAAC,EAC5CtF,IAEJ,OAAO0sE,EAAM,CACjB,CCpBO,IAOIitR,GAAU,CACjB,YAAaC,WACb,YAAaA,WACb,QAASA,AAVY,UAUE,OACvB,KAAMA,gBACN,OAAQA,mBACR,WAAYA,UACZ,WAAYA,UACZ,OAfqB,UAgBrB,OAhBqB,UAiBrB,MAAOA,kBACP,YAAaA,YACb,YAAaA,YACb,cAAeA,AApBM,UAoBQ,KAC7B,QAAS,EACT,MAAOA,iBACX,EAkEO,SAASR,GAAQjmO,CAAI,CAAE9iD,CAAU,CAAEnuE,CAAO,EAC7B,KAAK,IAAjBA,GAAsBA,CAAAA,EAAU,CAAC,GACrC,IAAIgxH,EAAO,CAAE,KAAM,SAAU,EAS7B,MARIhxH,CAAAA,AAAe,IAAfA,EAAQ,EAAE,EAAUA,EAAQ,EAAE,AAAD,GAC7BgxH,CAAAA,EAAK,EAAE,CAAGhxH,EAAQ,EAAE,AAAD,EAEnBA,EAAQ,IAAI,EACZgxH,CAAAA,EAAK,IAAI,CAAGhxH,EAAQ,IAAI,AAAD,EAE3BgxH,EAAK,UAAU,CAAG7iD,GAAc,CAAC,EACjC6iD,EAAK,QAAQ,CAAGC,EACTD,CACX,CAsOO,SAAS2mO,GAAkBpqU,CAAQ,CAAEvtB,CAAO,EAC/B,KAAK,IAAjBA,GAAsBA,CAAAA,EAAU,CAAC,GACrC,IAAIs1E,EAAK,CAAE,KAAM,mBAAoB,EAQrC,OAPIt1E,EAAQ,EAAE,EACVs1E,CAAAA,EAAG,EAAE,CAAGt1E,EAAQ,EAAE,AAAD,EAEjBA,EAAQ,IAAI,EACZs1E,CAAAA,EAAG,IAAI,CAAGt1E,EAAQ,IAAI,AAAD,EAEzBs1E,EAAG,QAAQ,CAAG/nD,EACP+nD,CACX,CAwJO,SAASsiR,GAAgBrxR,CAAQ,CAAEnxC,CAAK,EAC7B,KAAK,IAAfA,GAAoBA,CAAAA,EAAQ,YAAW,EAC3C,IAAIyiU,EAASJ,EAAO,CAACriU,EAAM,CAC3B,GAAI,CAACyiU,EACD,MAAM,AAAI34V,MAAMk2B,EAAQ,qBAE5B,OAAOmxC,EAAWsxR,CACtB,CAuGO,SAASvmT,GAASxqC,CAAG,EACxB,MAAO,CAACk+B,MAAMl+B,IAAQA,AAAQ,OAARA,GAAgB,CAACnI,MAAM,OAAO,CAACmI,EACzD,CAYO,SAASuqC,GAASxyC,CAAK,EAC1B,MAAO,CAAC,CAACA,GAASA,EAAM,WAAW,GAAK0T,MAC5C,CCllBA,SAASulV,GAAU3mO,CAAO,CAAEvgF,CAAQ,CAAEmnT,CAAgB,EAEpD,GAAI5mO,AAAY,OAAZA,EA4BJ,IAAK,IA3BDnzH,EACF8H,EACAqD,EACAopV,EACAyF,EACAZ,EACAa,EAGAC,EAFAC,EAAa,EACbC,EAAa,EAEbtzV,EAAOqsH,EAAQ,IAAI,CACnBknO,EAAsBvzV,AAAS,sBAATA,EACtBwzV,EAAYxzV,AAAS,YAATA,EACZw+C,EAAO+0S,EAAsBlnO,EAAQ,QAAQ,CAAC,MAAM,CAAG,EAchDonO,EAAe,EAAGA,EAAej1S,EAAMi1S,IAAgB,CAS9DP,EAAQE,AAHRA,CAAAA,EAAuBD,EALvBA,CAAAA,EAA0BI,EACtBlnO,EAAQ,QAAQ,CAAConO,EAAa,CAAC,QAAQ,CACvCD,EACAnnO,EAAQ,QAAQ,CAChBA,CAAM,GAEN8mO,AAAiC,uBAAjCA,EAAwB,IAAI,AACxB,EAEJA,EAAwB,UAAU,CAAC,MAAM,CACzC,EAEJ,IAAK,IAAIO,EAAY,EAAGA,EAAYR,EAAOQ,IAAa,CACtD,IAAIC,EAAoB,EACpBC,EAAgB,EAMpB,GAAInG,AAAa,OALjBA,CAAAA,EAAW2F,EACPD,EAAwB,UAAU,CAACO,EAAU,CAC7CP,CAAsB,GAI1Bb,EAAS7E,EAAS,WAAW,CAC7B,IAAIoG,EAAWpG,EAAS,IAAI,CAQ5B,OANA4F,EACEJ,GACCY,CAAAA,AAAa,YAAbA,GAA0BA,AAAa,iBAAbA,CAA0B,EACjD,EACA,EAEEA,GACN,KAAK,KACH,KACF,KAAK,QACH,GACE/nT,AAMM,KANNA,EACEwmT,EACAgB,EACAG,EACAE,EACAC,GAGF,MAAO,EACTN,CAAAA,IACAK,IACA,KACF,KAAK,aACL,IAAK,aACH,IAAKz6V,EAAI,EAAGA,EAAIo5V,EAAO,MAAM,CAAEp5V,IAAK,CAClC,GACE4yC,AAMM,KANNA,EACEwmT,CAAM,CAACp5V,EAAE,CACTo6V,EACAG,EACAE,EACAC,GAGF,MAAO,EACTN,CAAAA,IACiB,eAAbO,GAA2BF,GACjC,CACiB,eAAbE,GAA2BF,IAC/B,KACF,KAAK,UACL,IAAK,kBACH,IAAKz6V,EAAI,EAAGA,EAAIo5V,EAAO,MAAM,CAAEp5V,IAAK,CAClC,IAAK8H,EAAI,EAAGA,EAAIsxV,CAAM,CAACp5V,EAAE,CAAC,MAAM,CAAGm6V,EAAYryV,IAAK,CAClD,GACE8qC,AAMM,KANNA,EACEwmT,CAAM,CAACp5V,EAAE,CAAC8H,EAAE,CACZsyV,EACAG,EACAE,EACAC,GAGF,MAAO,EACTN,CAAAA,GACF,CACiB,oBAAbO,GAAgCF,IACnB,YAAbE,GAAwBD,GAC9B,CACiB,YAAbC,GAAwBF,IAC5B,KACF,KAAK,eACH,IAAKz6V,EAAI,EAAGA,EAAIo5V,EAAO,MAAM,CAAEp5V,IAAK,CAElC,IAAK8H,EAAI,EADT4yV,EAAgB,EACJ5yV,EAAIsxV,CAAM,CAACp5V,EAAE,CAAC,MAAM,CAAE8H,IAAK,CACrC,IAAKqD,EAAI,EAAGA,EAAIiuV,CAAM,CAACp5V,EAAE,CAAC8H,EAAE,CAAC,MAAM,CAAGqyV,EAAYhvV,IAAK,CACrD,GACEynC,AAMM,KANNA,EACEwmT,CAAM,CAACp5V,EAAE,CAAC8H,EAAE,CAACqD,EAAE,CACfivV,EACAG,EACAE,EACAC,GAGF,MAAO,EACTN,CAAAA,GACF,CACAM,GACF,CACAD,GACF,CACA,KACF,KAAK,qBACH,IAAKz6V,EAAI,EAAGA,EAAIu0V,EAAS,UAAU,CAAC,MAAM,CAAEv0V,IAC1C,GACE85V,AACA,KADAA,GAAUvF,EAAS,UAAU,CAACv0V,EAAE,CAAE4yC,EAAUmnT,GAG5C,MAAO,GACX,KACF,SACE,MAAM,AAAI74V,MAAM,wBACpB,EACF,CACF,CACF,CA0MA,SAAS05V,GAAYznO,CAAO,CAAEvgF,CAAQ,EACpC,GAAIugF,AAAiB,YAAjBA,EAAQ,IAAI,CACdvgF,EAASugF,EAAS,QACb,GAAIA,AAAiB,sBAAjBA,EAAQ,IAAI,CACrB,IAAK,IAAIrzH,EAAI,EACX,AADcA,EAAIqzH,EAAQ,QAAQ,CAAC,MAAM,EACrCvgF,AAAqC,KAArCA,EAASugF,EAAQ,QAAQ,CAACrzH,EAAE,CAAEA,GADSA,KAIjD,CA6GA,SAAS+6V,GAAS1nO,CAAO,CAAEvgF,CAAQ,EACjC,IAAI9yC,EACFE,EACA65C,EACA06S,EACAyF,EACAC,EACAC,EACAY,EACAC,EACAC,EACAT,EAAe,EACfF,EAAsBlnO,AAAiB,sBAAjBA,EAAQ,IAAI,CAClCmnO,EAAYnnO,AAAiB,YAAjBA,EAAQ,IAAI,CACxB7tE,EAAO+0S,EAAsBlnO,EAAQ,QAAQ,CAAC,MAAM,CAAG,EAczD,IAAKrzH,EAAI,EAAGA,EAAIwlD,EAAMxlD,IAAK,CA4BzB,IAAK+5C,EAAI,EA3BTogT,EAA0BI,EACtBlnO,EAAQ,QAAQ,CAACrzH,EAAE,CAAC,QAAQ,CAC5Bw6V,EACAnnO,EAAQ,QAAQ,CAChBA,EACJ2nO,EAAoBT,EAChBlnO,EAAQ,QAAQ,CAACrzH,EAAE,CAAC,UAAU,CAC9Bw6V,EACAnnO,EAAQ,UAAU,CAClB,CAAC,EACL4nO,EAAcV,EACVlnO,EAAQ,QAAQ,CAACrzH,EAAE,CAAC,IAAI,CACxBw6V,EACAnnO,EAAQ,IAAI,CACZvxH,KAAAA,EACJo5V,EAAYX,EACRlnO,EAAQ,QAAQ,CAACrzH,EAAE,CAAC,EAAE,CACtBw6V,EACAnnO,EAAQ,EAAE,CACVvxH,KAAAA,EAIJo4V,EAAQE,AAHRA,CAAAA,EAAuBD,EAAAA,GACnBA,AAAiC,uBAAjCA,EAAwB,IAAI,AACxB,EAEJA,EAAwB,UAAU,CAAC,MAAM,CACzC,EAEQpgT,EAAImgT,EAAOngT,IAAK,CAM1B,GAAI06S,AAAa,OALjBA,CAAAA,EAAW2F,EACPD,EAAwB,UAAU,CAACpgT,EAAE,CACrCogT,CAAsB,EAGH,CACrB,GACErnT,AAMM,KANNA,EACE,KACA2nT,EACAO,EACAC,EACAC,GAGF,MAAO,GACT,QACF,CACA,OAAQzG,EAAS,IAAI,EACnB,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH,GACE3hT,AAMM,KANNA,EACE2hT,EACAgG,EACAO,EACAC,EACAC,GAGF,MAAO,GACT,KAEF,KAAK,qBACH,IAAKh7V,EAAI,EAAGA,EAAIu0V,EAAS,UAAU,CAAC,MAAM,CAAEv0V,IAC1C,GACE4yC,AAMM,KANNA,EACE2hT,EAAS,UAAU,CAACv0V,EAAE,CACtBu6V,EACAO,EACAC,EACAC,GAGF,MAAO,GAEX,KAEF,SACE,MAAM,AAAI95V,MAAM,wBACpB,CACF,CAEAq5V,GACF,CACF,CAyGA,SAASU,GAAY9nO,CAAO,CAAEvgF,CAAQ,EACpCioT,GAAS1nO,EAAS,SAAUohO,CAAQ,CAAEgG,CAAY,CAAEpqR,CAAU,CAAEg9Q,CAAI,CAAErwS,CAAE,EAEtE,IAiBI69S,EAjBA7zV,EAAOytV,AAAa,OAAbA,EAAoB,KAAOA,EAAS,IAAI,CACnD,OAAQztV,GACN,KAAK,KACL,IAAK,QACL,IAAK,aACL,IAAK,UACH,GACE8rC,AAIM,KAJNA,EACEsmT,GAAQ3E,EAAUpkR,EAAY,CAAE,KAAMg9Q,EAAM,GAAIrwS,CAAG,GACnDy9S,EACA,GAGF,MAAO,GACT,MACJ,CAKA,OAAQzzV,GACN,IAAK,aACH6zV,EAAW,QACX,KACF,KAAK,kBACHA,EAAW,aACX,KACF,KAAK,eACHA,EAAW,SAEf,CAEA,IACE,IAAIF,EAAoB,EACxBA,EAAoBlG,EAAS,WAAW,CAAC,MAAM,CAC/CkG,IAOA,GACE7nT,AACA,KADAA,EAASsmT,GALA,CACT,KAAMyB,EACN,YAHepG,EAAS,WAAW,CAACkG,EAAkB,AAIxD,EAEyBtqR,GAAaoqR,EAAcE,GAGlD,MAAO,EAEb,EACF,CCvsBA,SAASS,GAAc/nO,CAAO,CAAEiwI,CAAO,EAIrC,OAHWjwI,AAAiB,YAAjBA,EAAQ,IAAI,CAAiBA,EAAQ,QAAQ,CAAC,IAAI,CAAGA,EAAQ,IAAI,EAI1E,IAAK,qBAIH,OAHA0nO,GAAS1nO,EAAS,SAAUohO,CAAQ,EAClC2G,GAAc3G,EAAUnxF,EAC1B,GACOjwI,CACT,KAAK,aAEH,OADAgoO,GAAiB7B,GAAUnmO,GAAUiwI,GAC9BjwI,CACT,KAAK,UAEH,OADAioO,GAAc9B,GAAUnmO,GAAUiwI,GAC3BjwI,CACT,KAAK,kBAIH,OAHAmmO,GAAUnmO,GAAS,OAAO,CAAC,SAAUkoO,CAAU,EAC7CF,GAAiBE,EAAYj4F,EAC/B,GACOjwI,CACT,KAAK,eAIH,OAHAmmO,GAAUnmO,GAAS,OAAO,CAAC,SAAUkoO,CAAU,EAC7CD,GAAcC,EAAYj4F,EAC5B,GACOjwI,CACT,KAAK,QACL,IAAK,aACH,OAAOA,CACX,CACF,CAUA,SAASgoO,GAAiB/B,CAAM,CAAEh2F,CAAO,EACnCm2F,GAAiBH,KAAYh2F,GAASg2F,EAAO,OAAO,EAC1D,CAUA,SAASgC,GAAchC,CAAM,CAAEh2F,CAAO,EAEhCm2F,GAAiBH,CAAM,CAAC,EAAE,IAAMh2F,GAClCg2F,CAAM,CAAC,EAAE,CAAC,OAAO,GAGnB,IAAK,IAAIt5V,EAAI,EAAGA,EAAIs5V,EAAO,MAAM,CAAEt5V,IAC7By5V,GAAiBH,CAAM,CAACt5V,EAAE,IAAMsjQ,GAClCg2F,CAAM,CAACt5V,EAAE,CAAC,OAAO,EAGvB,CAEA,OA9GA,SAAgBqzH,CAAO,CAAEnxH,CAAO,EAG9B,GAAI,CAACqxC,GADLrxC,EAAUA,GAAW,CAAC,GACE,MAAM,AAAId,MAAM,sBACxC,IAAIkiQ,EAAUphQ,EAAQ,OAAO,EAAI,GAC7Bs5V,EAASt5V,EAAQ,MAAM,EAAI,GAG/B,GAAI,CAACmxH,EAAS,MAAM,AAAIjyH,MAAM,yBAC9B,GAAI,AAAmB,WAAnB,OAAOkiQ,EACT,MAAM,AAAIliQ,MAAM,+BAClB,GAAI,AAAkB,WAAlB,OAAOo6V,EACT,MAAM,AAAIp6V,MAAM,6BAGH,MAAXo6V,GAAkBnoO,CAAAA,EAAUjgH,GAAMigH,EAAO,EAG7C,IAAIzuF,EAAU,EAAE,CAChB,OAAQyuF,EAAQ,IAAI,EAClB,IAAK,qBAIH,OAHA0nO,GAAS1nO,EAAS,SAAUohO,CAAQ,EAClC2G,GAAc3G,EAAUnxF,EAC1B,GACOjwI,CACT,KAAK,oBAMH,OALAynO,GAAYznO,EAAS,SAAU+lO,CAAO,EACpC0B,GAAYM,GAAchC,EAAS91F,GAAU,SAAU1vP,CAAM,EAC3DgxB,EAAQ,IAAI,CAAChxB,EACf,EACF,GACOimV,GAAkBj1T,EAC7B,CAEA,OAAOw2T,GAAc/nO,EAASiwI,EAChC,EC3BA,GAVA,SAAiBjwI,CAAO,EACtB,GAAI,CAACA,EAAS,MAAM,AAAIjyH,MAAM,uBAE9B,IAAIwjC,EAAU,EAAE,CAIhB,OAHAu2T,GAAY9nO,EAAS,SAAU+lO,CAAO,EACpCx0T,EAAQ,IAAI,CAACw0T,EACf,GACOS,GAAkBj1T,EAC3B,ECHE,QAEI,GAAsB,C,SAClB,CAAC,E,KACP,G,KACD,GACD,SACF,EAEQ,GAAwB,IAC9B,GAAI,EAAQ,QAAa,KAAE,sBACzB,IAAI,EAAK,GAAS,cAAmB,C,OAEnC,OAAK,MAAS,QAAS,MAAY,EAAE,EAAG,GAAD,a,eAEpC,wC,EAGH,GAAiB,I,IAClB,KACH,OAAG,cACH,sBAAmB,8BACnB,aASK,GAAM,EAAa,IAAY,IAAW,GAC/C,I,EAKS,GAAgB,Y,IAAA,oG,GACvB,IAAO,OAAqB,C,GAC7B,6CACD,GAAI,aAAkB,CAAAzZ,GAAK,OAAS,MACpC,IAAI,EAAQ,W,OACV,GAAW,GAAW,GAAQ,EAAS,CACxC,yBACD,WAAS,IAAQ,OAAU,KACzB,GAAIwsU,EAAU,CACZ,IAAMA,EAAW8D,GAAgB,QAAQ,CAACrC,EAC1CA,CAAAA,EAAQ,SAAS,CAAGzB,CAAQ,CAAC,EAAE,CAAC,gB,IAEjC,iCAEG,IAAM,cACRyB,CAAAA,EAAQ,IAAI,CAAG,C,IAGjB,EAAI,QAAM,I,ECjFC,YAASl0V,CAAK,CAAE0c,CAAC,EAE9B,IADA,IAAIjG,EAAGzb,EAAIgF,EAAM,MAAM,CAAElF,EAAIE,EAAI0hB,EAC1B5hB,EAAI,EAAEE,GAAGyb,EAAIzW,CAAK,CAAClF,EAAE,CAAEkF,CAAK,CAAClF,IAAI,CAAGkF,CAAK,CAAChF,EAAE,CAAEgF,CAAK,CAAChF,EAAE,CAAGyb,CAClE,CCHe,YAAS+H,CAAC,EACvB,OAAOA,CACT,CCAe,YAASu1C,CAAS,EAC/B,GAAIA,AAAa,MAAbA,EAAmB,OAAOsjI,GAC9B,IAAImjJ,EACAyW,EACAuF,EAAKziS,EAAU,KAAK,CAAC,EAAE,CACvB0iS,EAAK1iS,EAAU,KAAK,CAAC,EAAE,CACvB6+R,EAAK7+R,EAAU,SAAS,CAAC,EAAE,CAC3BwkR,EAAKxkR,EAAU,SAAS,CAAC,EAAE,CAC/B,OAAO,SAASl4D,CAAK,CAAEf,CAAC,EACjBA,GAAG0/U,CAAAA,EAAKyW,EAAK,GAClB,IAAIj2V,EAAI,EAAG0hB,EAAI7gB,EAAM,MAAM,CAAE8nB,EAAS,AAAIhoB,MAAM+gB,GAGhD,IAFAiH,CAAM,CAAC,EAAE,CAAI62T,AAAAA,CAAAA,GAAM3+U,CAAK,CAAC,EAAC,EAAK26V,EAAK5D,EACpCjvU,CAAM,CAAC,EAAE,CAAIstU,AAAAA,CAAAA,GAAMp1V,CAAK,CAAC,EAAC,EAAK46V,EAAKle,EAC7Bv9U,EAAI0hB,GAAGiH,CAAM,CAAC3oB,EAAE,CAAGa,CAAK,CAACb,EAAE,CAAE,EAAEA,EACtC,OAAO2oB,CACT,CACF,CCfe,YAAS+yU,CAAQ,CAAEznV,CAAC,EAEjC,MADiB,UAAb,OAAOA,GAAgBA,CAAAA,EAAIynV,EAAS,OAAO,CAACznV,EAAE,AAAD,EAC1CA,AAAW,uBAAXA,EAAE,IAAI,CACP,CAAC,KAAM,oBAAqB,SAAUA,EAAE,UAAU,CAAC,GAAG,CAAC,SAASA,CAAC,EAAI,OAAOilV,GAAQwC,EAAUznV,EAAI,EAAE,EACpGilV,GAAQwC,EAAUznV,EAC1B,CAEA,SAASilV,GAAQwC,CAAQ,CAAEznV,CAAC,EAC1B,IAAI6oC,EAAK7oC,EAAE,EAAE,CACTk5U,EAAOl5U,EAAE,IAAI,CACbk8D,EAAal8D,AAAgB,MAAhBA,EAAE,UAAU,CAAW,CAAC,EAAIA,EAAE,UAAU,CACrDsgV,EAAWp1T,GAAOu8T,EAAUznV,GAChC,OAAO6oC,AAAM,MAANA,GAAcqwS,AAAQ,MAARA,EAAe,CAAC,KAAM,UAAW,WAAYh9Q,EAAY,SAAUokR,CAAQ,EAC1FpH,AAAQ,MAARA,EAAe,CAAC,KAAM,UAAW,GAAIrwS,EAAI,WAAYqzB,EAAY,SAAUokR,CAAQ,EACnF,CAAC,KAAM,UAAW,GAAIz3S,EAAI,KAAMqwS,EAAM,WAAYh9Q,EAAY,SAAUokR,CAAQ,CACxF,CAEO,SAASp1T,GAAOu8T,CAAQ,CAAEznV,CAAC,EAChC,IAAI0nV,EAAiB5iS,GAAU2iS,EAAS,SAAS,EAC7CE,EAAOF,EAAS,IAAI,CAExB,SAASvW,EAAIrlV,CAAC,CAAEsoD,CAAM,EAChBA,EAAO,MAAM,EAAEA,EAAO,GAAG,GAC7B,IAAK,IAAIv6C,EAAI+tV,CAAI,CAAC97V,EAAI,EAAI,CAACA,EAAIA,EAAE,CAAEgI,EAAI,EAAG4Z,EAAI7T,EAAE,MAAM,CAAE/F,EAAI4Z,EAAG,EAAE5Z,EAC/DsgD,EAAO,IAAI,CAACuzS,EAAe9tV,CAAC,CAAC/F,EAAE,CAAEA,IAE/BhI,EAAI,GAAGsjQ,GAAQh7M,EAAQ1mC,EAC7B,CAEA,SAAS0pC,EAAM7tC,CAAC,EACd,OAAOo+U,EAAep+U,EACxB,CAEA,SAAS3e,EAAKg9V,CAAI,EAEhB,IAAK,IADDxzS,EAAS,EAAE,CACNtoD,EAAI,EAAG4hB,EAAIk6U,EAAK,MAAM,CAAE97V,EAAI4hB,EAAG,EAAE5hB,EAAGqlV,EAAIyW,CAAI,CAAC97V,EAAE,CAAEsoD,GAE1D,OADIA,EAAO,MAAM,CAAG,GAAGA,EAAO,IAAI,CAACA,CAAM,CAAC,EAAE,EACrCA,CACT,CAEA,SAASoxS,EAAKoC,CAAI,EAEhB,IADA,IAAIxzS,EAASxpD,EAAKg9V,GACXxzS,EAAO,MAAM,CAAG,GAAGA,EAAO,IAAI,CAACA,CAAM,CAAC,EAAE,EAC/C,OAAOA,CACT,CAEA,SAASyzS,EAAQD,CAAI,EACnB,OAAOA,EAAK,GAAG,CAACpC,EAClB,CAEA,SAASjF,EAAStgV,CAAC,EACjB,IAAmBo/G,EAAfvsH,EAAOmN,EAAE,IAAI,CACjB,OAAQnN,GACN,IAAK,qBAAsB,MAAO,CAAC,KAAMA,EAAM,WAAYmN,EAAE,UAAU,CAAC,GAAG,CAACsgV,EAAS,CACrF,KAAK,QAASlhO,EAAcjoE,EAAMn3C,EAAE,WAAW,EAAG,KAClD,KAAK,aAAco/G,EAAcp/G,EAAE,WAAW,CAAC,GAAG,CAACm3C,GAAQ,KAC3D,KAAK,aAAcioE,EAAcz0H,EAAKqV,EAAE,IAAI,EAAG,KAC/C,KAAK,kBAAmBo/G,EAAcp/G,EAAE,IAAI,CAAC,GAAG,CAACrV,GAAO,KACxD,KAAK,UAAWy0H,EAAcwoO,EAAQ5nV,EAAE,IAAI,EAAG,KAC/C,KAAK,eAAgBo/G,EAAcp/G,EAAE,IAAI,CAAC,GAAG,CAAC4nV,GAAU,KACxD,SAAS,OAAO,IAClB,CACA,MAAO,CAAC,KAAM/0V,EAAM,YAAausH,CAAW,CAC9C,CAEA,OAAOkhO,EAAStgV,EAClB,C,IC3CE,GAAuB,GAEtB,aACD,EAAM,IAAO,CAAG,MAAc,CAC9B,MAAqB,GAAS,GAAwB,mBACtD,+D,qGCpBA,IAOF,UAAa,G,EAGJ,GAAY,CAAAgX,EAAM,KACzB,0B,kBCpBK,SAAS6wU,GAAiCC,CAAgB,CAAEj9V,CAAY,CAAEi6D,CAAoB,EACnG,EAAK,YAAQ,KAAiB,EAAG,sB,CAGlC,mBAED,EAAM,SAAU,qBAA8C,GAAc,E,KrjBwCxE,GAAO,Q,SAIT,KACA,IAAiC,GAAjC,MAAgC,GAAmC,cACpE,wCAMD,C,SAMS,GAAmB,K,IAAA,0D,KACzB,UACD,W,CAEA,IAAa,GAAoB,KAAQ,GAAI,cAAgB,0CAA2B,GACxF,K,IACE+iQ,EAAS,IAAM,GAAQ,Y,SACf,G,SACN,CAAO,C,kBAEV,kB,KAAM,WACL,QAAS,C,KACD,QAAS,C,KACf,U,QACC,C,GAGL,GAAM,CAAE,SAAS,CAAI,EAAO,CAC5B,MAAIhpM,EAAa,EAAM,WACrB,e,GACD,oB,KAAU,WACT,QAAS,C,GACV,W,CAKI,SAASkpO,GAAoBr0V,CAAW,EAC7C,GAAK,IAAY,GAAK,GAAM,mD,CAG3B,eACD,OAAAs0V,GAAoB,GAAG,CAAC,EAC1B,C,SsjB9FO,GAAW,G,IAAA,YAAY,8CAC1BC,EAAQ,E,OACT,wF,CAGA,gH,SCqBO,GAAU,O,AACf,G,EAAA,+CACH,IAAA5qR,EAAS,IAAU,Q,OACjB,EAAM,OAAc,IACpB,KAAK,U,GACJ,aACH,KAAO,eACR,qBAQD,GAAM,C,UAEK,GAAK,SACb,E,IAOGwqP,EARU,4DAGd,gBAAkB,GAAO,SACzB,GAAM,KAAM,CAAG,OAAM,EAAS,iBAAqB,CAAa,YAA0B,8CAC1F,MAAM,CAAM,CAEZ,IAAY,GAAK,EAAO,MAAK,CAE7B,GAAM,WAAgB,QACtB,IAAIqgC,EAAe,sB,GACjB,EAAW,EAAc,OAC1B,OAAM,MACL,EAEA,GAAI3xV,GAAQ,qCACV,OAAW,EAA2B,CACvC,4BACD,GAAQ,GAAe,OAAC,GAAS,4BAAY,WACzC,GAAO,OAAU,EAAa,CAAE,CAElC,KAAM,UACN,GAAI,EAAC,SAAc,EACjB,KAAK,c,QAEN,uBAED,MAAgB,CAAe,I,GAC7B,GAAM,OAAU,6CAElBsxT,CAAAA,EAAS,SAAU,EACjB,KAAM,U,GACL,aACJ,mB,QAEC,MAAM,WAAe,EAAe,KAAC,GAAa,GAAE,kDACjC,sC,KACjB,K,GAFkD,gBACpD,yBAAmB,C,IAGlB,wBAED,EAAQ,YAAQ,GAAe,qB,qBAMhC,U,GAAU,GAAK,MAAC,EAAQ,EAAS,wD,CC/EpC,SAAM,GAAyCsgC,CAAU,CAAE,GAC3D,OAAO,MAAa,MAAQ,CAAoB,CAAE,EAA4B,KAC5E,IAAMvrN,EAAM,GAAS,GAAO,EAAK,cAAC,CAAc,GAAiB,EAEjE,OAAO,GAAE,W,eAIN,GAAE,GACR,yCAED,CAEA,SAAC,MAED,MAAS,QACP,EAAW,2B,CAKN,SAASwrN,GACd5vK,CAA4C,CAC5C32F,CAAW,EAEX,GAAI,GAAM22F,GAAO,S,GACf,GAAU,IACX,eACG,SAAsB,OAAO,wBAC/B,cAAe,OAAW,EAAC,+B,MAC3B,GAAI,GAAkB,6B,QACpB,A,UAEA,GAAgC,G,OACjC,+D,UAEM,GAAqD,GAAgB,CAAE,K,GAC/E,eACD,MAAU,gDACX,aAEK,MAAU,QACd,CAEA,OAAO,GAAW,GAAS,MAAI,aAAE,CAAA6vK,EAAU,MAAG,EAC/C,CAED,OAAM,EAAU,WACd7vK,EACA,SAAe,IACf,MAAA8vK,EACwB,gC,CAIvB,iBAED,GAAI,MAAW,OAAO,E,GACpB,GAAW,GAAE,sB,KACX,MAAQ,E,IACT,WACD,OAAQ,GAAsB,GAAO,QAAwB,OAAAp8L,CAAY,c,QACpE,EAAK,QAA+B,CAAE,yB,UAGzC,GAAiB,EAAVA,CAAU,E,OAClB,qB,UAES,GAAqC,CAAU,E,OACzD,GAAW,GAAE,mB,WDeZ,G,CAAM,2EAEL,GAAmB,qEACd,cAA0B,wDAChC,0E,MAEG,IAAyB,K,SEtG/B,GACA,oBAAuB,sBACvB,kBAAe,gCACf,gBAAiB,6B,MACjB,IAAe,K,IDgFb,GAA6C,GAAS,GAAK,CAAI,GAAE,eAE5D,GAAU,mBEpFf,GAAsB,8FACb,GAAS,GAAoB,IAAE,sC,IACxC,EAAI,CAAW,GAAM,C,QACnB,GAAO,CAAC,GAAc,M,QACpB,IAAO,GAAM,GAAgB,EAAQ,M,GCMrB,E,OAQtB,WAA6B,KAS7B,MAAMssB,CAAS,EACb,OAAO,IAAC,CAAI,EAAC,CAAE,EAAE,oD,QAEjB,CAAW,CAAC,CACZ,MACD,yDAEM,MAA2D,qE,cAChE,C,IACE,MAAM,WAAa,E,MACD,MAAgB,IAAI,AAAC,MAAe+vK,GAAW,IAAQ,2B,OACtE,iC,kBAEJ,OACD,IAAI,EAAM,EACV,OAAM,QAAkB,EAAM,MAAU,CAAc,AAAd,GAAY,CAAE,YAC7C,EAAQ,MAAC,EAAU,GAAM,MAAK,GAAe,QAAS,IAAE,MAAQ,GACzE,IAAG,A,qBAGW,KACd,OAAO,EAAK,8BACd,CAEA,OAA6B,CAA7B,QACM,IADN,mDAAiB,CAAjB,iBAAiB,CAEf,OAAM,OAAW,UAAY,GAAK,IAAM,CAAE,oEACxC,WAAW,E,kBAEZ,iFACD,OAAI,KAAO,MAAI,KAAQ,E,mBAEtB,OACD,GAAI,CAAC,GAAS,GAAU,gBACxB,MAAY,MACb,WAED,UAAmB,CACb,MAAS,IACX,KAAI,CAAC,IAAI,oBAAe,+EACzB,wC,QACC,C,KAEF,EAAO,CACR,QAED,C,MAIE,iBAAK,MAAI,wCAAE,CAAI,sCACf,MAAO,IAAK,CADW,GACV,AACf,CAEA,QAIE,OAAO,UAAU,MAAM,CAAE,KAAG,CAAI,KAAE,mBACpC,CAKA,SAA4C,C,MAA1B,yDAChB,OAAK,MAAe,MAAU,CAAC,GAAQ,oBACrC,KACD,qIACD,GAAI,I,QAEJ,CAAU,CAAW,C,IAAX,YAAW,+CAErB,OAAO,GAAK,GAAE,8BACZ,IAAM,EAAO,eAAc,SAE3B,GAAU,OAAU,UAAC,OAAkB,EAAW,8BAClD,kBAAmB,KAAG,GAAK,UACpB,UAAc,CAAC,MAAK,IAAU,IAAa,IAAK,G,GAKtD,IAAG,A,YAEL,CAED,eAAO,UAAmB,EAAC,KAC5B,gBAEG,E,CAGJ,KAAC,GAIE,IAAW,gB,WAGV,E,IACA,EAAU,OAAS,GAAO,IAAM,kE,OAChC,IAAO,SAAK,K,SAEd,CACD,sBAID,C,YACM,C,IACF,EAAW,CAAD,E,OACV,IAAO,WAAK,iBACb,kCACD,IACF,CAEA,SAAO,CACL,OAAM,SAAU,A,QAEb,E,yBAGE,wB,gBAGA,O,iBAEA,KACL,OAAO,GAAK,uDACb,0DAED,IAAO,A,aA3IP,GAIE,KAAK,GAAI,IAAG,KAAK,+DACjB,IAAI,CAAC,IAAG,CAAG,EAAE,QAAa,CAAC,IAC7B,C,QCxBS,U,sBAEE,gB,WACL,G,gBAED,EACD,aACH,CAED,E,GAEE,IAAM,EAAkB,IAAK,GAC7B,MAAO,sB,MACL,CACA,WAAO,CAAAC,EAAe,CACtB,OACH,CAED,C,GAEE,IAAM,EAAkB,UAAK,GAC7B,MAAO,kC,MACL,CACA,WAAO,CAAAA,EAAe,CACtB,OACH,CAED,C,GAEE,IAAM,EAAkB,KAAK,GAC7B,MAAO,wB,MACL,CACA,WAAO,CAAAA,EAAe,CACtB,OACH,CAED,C,GACE,GAAM,GAAa,CAEnB,MAAO,Q,MACL,CACA,WAAO,E,MACH,Y,MACE,EAAO,QAAmB,C,WAC1B,C,SACD,uC,QAGR,CAED,MAAS,CACT,CAEF,KAA0B,GAAI,EAAa,KACzC,GAAI,GAAMC,GAAqB,OAC7B,MAAO,C,EAGT,GAAI,GAAQA,GAAqB,CAC/B,IAAMrrS,EAASqrS,EAAmB,GAAG,CAAC,AAAChzV,GAAU,GAAuB,EAAI,EAAG,IAE/E,MAAO,CACL,WAAY2nD,EAAO,MAAM,CAAE,CAAAp8C,EAAYsJ,IAAY,yCACjD,EAAI,E,QACE,IAAM,AAAC,GAAI,EAAW,KAAC,C,YAIzB,M,KACC,GAAsB,K,IAC7B,0B,GACH,UAED,MAAO,GACP,KAEF,OAAM,WAAc,CAAG,GAA6B,OAAe,CAAE,IACnE,IAAM,EAEF,GAAC,SAAc,SACjB,MAAO,KACR,kFAED,IAAM,EAAU,GAAG,MACf,aAAgC,0EAEpC,CAAW,CAAC,KAAe,M,IAEzB,UAAW,EAAa,U,UACf,Y,eACR,iBAED,KAAM,EAAY,KAClB,QAAI,E,WACE,C,GAIL,W,GACD,MAAM,EAAM,eAAqB,EAEjC,IAAI,EAAK,GACP,EAAI,G,SACF,OAAU,CAAG,I,IACd,EAED,MAAgB,GAAa,IAC9B,uFACA,UAEH,GAAO,CACL,WAAW,EACX,KAAS,CACT,C,QAEA,I,KC5GD,CACD,OAEF,IAAM,GACJ,IAAK,GACL,KAXS,SAAK,CAAC,E,GAAM,yFACpB,oBACD,GAAI,CACF,OAAO,GAAMxc,KAAK,KAAK,CAACkpB,G,CACxB,MAAO9R,EAAG,CAAV,MAAU,E,IAUZ,WAEF,GAAO,IAAM,GAAc,CAAC,EAAW,KAAuB,CAAW,OAAE,MACzE,IAAK,EAAW,QAAQ8jB,EAAO,IAAK,CAAE,CACpC,UAAO,EAAW,SAAC,A,EACpB,GACD,OAAM,EAAO,GAAS,IAAC,CAAI,GAAK,EAAU,OAAW,IAAO,I,QCMpD,WAA6B,G,OAoGlC,EACH,OAAE,mEAEM,WAAS,MAAgB,MAAE,2CACjC,UAAO,GAAS,SAAE,sC,iBAnGb,CAAU,CAAG,CAElB,IAAK,EAAM,GAAM,EAAG,6C,GAClB,GAAY,EAAM,IAAE,IAAQ,UAE7B,+BACF,sBAEmB,cACZ,UAAY,YACb,aAAiB,CAAC,EAElB,QAAY,CACR,OAAUwvJ,EAAK,MAAM,CAClB,OAAK,EAAQ,MAAK,AACzB,CAED,EAEJ,MAAK,GAAM,EAAG,KACd,IAAO,EAAK,sBACb,sBAEO,KAAgB,OAChB,UAA0B,UAC1B,QAAU,CAEV,IAAS,MAAQ,EAAS,OAAkB,CAC9C,OAAW,kBACT,CACL,EAED,MAAI,GAAK,EAAM,MAAE,EACf,IAAM,EAAY,EAElB,IAAI,QAAW,cACb,IAAK,EAAc,GAAE,6BACtB,yBAED,KAAgB,iBACd,KAAM,QACN,UAAW,IAAI,CAAC,MAChB,S,GACA,kBAAS,M,mBAGR,E,KACA,C,WAEH,CAAM,EAAS,E,IACf,KAAI,KAAM,wBAAE,E,MACL,IAAK,UAAQ,wD,MACnB,+B,IAED,EAAW,IAAI,CAAC,+D,WACd,CAAI,SAAQ,iE,sBAIV,OAAM,A,eAEP,C,OACJ,e,SACC,CAAM,EAA2B,C,IAA3B,cAAwB,+CAE9B,EAAM,OAAK,MAAQ,IAAQ,SAAS,CAAE,C,OACpC,E,OAEI,C,aAEF,IAAa,GAAK,SAAoB,EAAC,yC,OAE1C,CAAE,E,IAAA,6DAEH,EAAI,OAAY,MAAC,CAAM,GAAE,W,IACvB,E,OACE,C,aAEA,IAAS,SAAY,iD,SAEvB,EAAK,CAAgB,C,IAAhB,6DACN,8BACF,SACD,OAAS,CACV,GAkBD,OAAS,GAAa,IAAiB,uD,WAE/B,EAAM,CACZ,IAAI,OAAK,qBAAe,8B,IACtB,EAAc,IAAS,4B,OACxB,iDAED,cAAY,CAAG,GAAK,kBAAkB,A,WAEjC,GAEL,IAAI,CAAC,QAAU,GAAM,GAAC,YAClB,IAAM,EAAK,IAAW,YAAqB,CAExC,KAAK,CACb,EAEK,6BACJ,EACF,CAEA,QAAY,CACV,OAAO,IAAI,CAAC,WAAW,SACzB,CAEA,UAAO,CAAmB,CAA8C,CACtE,IAAM,EAAc,GAAsB,IAAE,KAAM,CAAE,SAAS,CAAC,UAC9D,IAAkB,KAAE,0D,IAClB,EAAW,GAAU,+B,OACrB,GAAc,KAAU,kDACzB,c,CAEH,UAAC,CAEG,OAA0C,IAA8C,QAAE,A,WAEvF,C,OACH,IAAK,OAAS,A,eAEf,GACD,OAAO,IAAI,CAAC,YAAO,KAAU,aAAa,8CAC3C,QAGC,MACA,QACA,GAAgB,EAAI,0DAEpB,OAAM,A,kBAEC,CAAS,E,IACd,EAAW,M,OACZ,8DACD,IACF,CAEQ,gBAAwB,KAC9B,OAAK,IAAM,CAAC,YAAK,QAAgB,GAAS,IAAQ,gB,OAIlD,CAAM,EACN,OAAK,EAAO,cAAiB,IAAM,0DACnC,IAAI,A,QAGA,CACJ,cAAY,kCACd,C,YA9KQ,GAA8B,CAAE,CAAC,EA0FjC,SAAM,IAAI,YAA6E,4EAC7F,WAAM,CAAM,EAAG,sBAA2B,IAAC,OAAQ,KACnD,IAAK,EAAS,GAA4B,EAAQ,0BAClD,OAAO,IAAI,CAAC,MAAM,CAAC,0BACrB,EAAE,cAEM,KAAQ,MAA0E,CAAE,qB,MAC1F,CAAK,MAA2E,AAAC,GAAQ,+C,ECzH7F,SAASkwK,GAAW33V,CAAY,CAAE+E,CAAW,CAAEwE,CAAa,CAAES,CAAgB,MACxEisB,EAAO,EACX,IAAI,EAAK,KAET,KAAM,EAAI,GAAY,CAAE,IAAF,EAAE,6CAExB,I,OACE,CAAO,GAAK,E,aAGJ,CAAO,GAAO,K,MACd,EAAK,4B,EACX,EAAS,M,KACV,wCACD,GAAM,kB,OACP,kB,CAYH,MAAS,GAIP,MAAI,CACA,OAAK,iBAGT,C,MACE,CACA,OAAI,IAAO,MAAM,G,WAEhB,CACD,IAAK,IAAI,EAAI,KAAK,KAAK,CAAC,MAAC,aACtB,IAAO,EAAC,oBACP,GAAG,IAAG,CAAG,OAAM,wCACpB,CACD,MAAW,CAAD,CACV,CACD,QAEK,OAAO,CAAI,mBAKf,IAAY,EAAoB,sBAC1B,OAAC,GAAiB,IAAC,2DACvB,CACD,2EAED,C,OACE,CAAO,EACR,2BAEG,2BACF,KAAO,MAAK,CAAK,IAAI,gFACtB,kCAED,C,iBAGI,EAAS,UAAQ,IAAK,G,OAErB,4F,CAGL,OAAC,CAEG,IAAC,CAAS,Q,CAhDd,YAAW,CAAO,EAClB,IAAM,QAAU,CAAG,EAAD,IAAH,MAAG,GAClB,C,CChCK,IAAM,GAAW,GAAS,E,OCA/B,UAEA,IAAC,GAEG,MAAU,eACZ,OAAM,IAAK,IAAI,CAAC6hB,EAAA,EAAO,SAAS,6B,SAGzB,CAAG,C,IACR,EAAK,IAAK,OAAK,CAAAtE,G,OAChB,kEACD,IACF,CAEA,QAAO,CAAU,IACf,EAAQ,IAAG,CAAI,IAAC,MAAO,UAAS,kC,SAGzB,CAAI,C,OACT,IAAK,KAAO,OAAK,G,KAEnB,QAAO,CACR,uBAED,C,kBACe,G,OACX,IAAK,KAAK,GAAQ,A,aA9Bd,CAAc,CAAC,CAEf,SAAG,CAA2B,EAAG,8B,ECkBlC,MAAM,G,IASX,CAAK,EACL,GAAI,EAAC,WAAkB,kBAAS,sEACjC,GAED,C,OACE,CAAK,CAAO,C,GACH,6F,mBAEJ,EAAkB,CACvB,GAAYgkT,CAAAA,EAAQ,IAAC,iB,SAEnB,CAAK,E,IAEL,EAAO,CAAK,G,KACb,WAED,IAAO,EAAM,QACd,0BAEM,IAAqB,WACtB,IAAO,EAAE,YACP,EAAC,KAAU,GAAQ,IAAS,yDAChC,E,EAGJ,SAAC,GAEO,MAAkB,KAAsB,2B,oBAErC,G,GACR,2BACD,IAAQ,EAAa,CAAC,CACvB,SAEe,MAAsB,MACpC,EAAM,CAEC,IAAM,OACX,MAAS,EAAS,IAAK,EACvB,GAAI,MAAC,MAAkB,IAAK,0DAC5B,WAAU,MAAO,kBAAQ,I,6BAKrB,WAAS,OAAK,A,sBAGb,uB,kBAEN,CACF,0BAEe,EAAsB,iFACpC,GAAK,eAAS,8D,iBAEb,GAEAA,EAAgB,OAAK,EAAGA,EAAQ,OAAK,wE,CAGxC,UAAC,CAEO,qBAAwC,mHAC9C,E,KACE,eAAM,EAAa,E,MACZ,EAAE,EAAM,E,QACb,CAAE,MAAK,WAAQ,IAAO,GAAQ,KAAM,GAAE,kFACvC,eAAC,6EACF,mBAAiB,IAAW,IAAM,CAAC,eAAa,IAAS,wB,WACvD,CAAI,MAAM,CAAC,UAAM,IAAQ,uFACvB,EAAO,IAAM,aAAW,KAAO,EAAG,IAAG,mBAAoB,IAAO,CAAC,C,YAGnE,CAAO,C,IACT,CAAC,aAAM,E,UAGR,GACF,mBAED,C,SACE,CACD,sFAGD,C,aA7FO,CAEL,IAAI,CAAC,SAAW,EAAE,KAAI,QAAW,cAAmB,GAAI,IAAC,6CAEzD,IAAI,CAAC,KAAK,CAAG,IAAII,GAAM,CAAC,EAAG,IAAI,AAAC,OAAC,yBAAE,EAAM,KAAG,YAC5C,IAAI,CAAC,aAAa,CAAG,KAAK,IAD0B,CAAC,YAC3B,sD,ECtB5B,IAAM,GAA2B,c,IAC/B,EAAK,I,GACH,GAAa,CAAC,GAAM,GAAW,GAAQ,0C,IACrC,EAAW,CAAM,GAAM,A,IACxB,cACF,IAEG,E,IAGE,GAAU,0B,cCkQV,GAxPR,WAAW1zT,CAAa,CAAE8Z,CAAc,CAAEhhD,CAAqB,CAAE66V,CAA6B,CAAE,CAC9F,OAAK,IAAM,OAAG,CAAM,qCACpB,IAAI,CAAC,YAAU,GAAO,qB,QAElB,CAEJ,IAAI,EAGJ,OAAO,OAAK,kCACd,CAEA,mBAAK,C,MACH,OAAO,OAAI,GAAC,IAAM,+BAAI,EAAK,MAC7B,CAEA,S,2EAEA,SAAC,CAED,OAAM,8D,2BAEiB,C,OACpB,uCACD,IAAO,OAAK,4CACb,OAED,C,WACM,CAAK,E,GACP,WAAW,CAAC,OAAO,KAAM,MAAC,WAAa,GAAa,IAAC,A,QAEvD,CAAY,IACb,QAED,iBAAwB,6EACtB,GAAS,KAAM,eAAE,O,cAGb,CAAM,CAAE,CAAC,CAAM,C,WACR,WAAO,MAAa,YAAkB,A,SAE5C,I,OACJ,+EACD,YAAY,gFACb,IAED,C,WACM,CAAK,CAAQ,C,IAAF,cAAE,+C,OACf,IAAK,OAAO,OAAkB,IAAC,oIAC/B,OAAO,WAAK,oCACb,IACH,CAEA,QAA0C,C,IAAnC,EAAoB,wD,iGACzB,IAAI,CAAC,MAAM,CAAX,eAAW,gCAAQ,sBACnB,IAAI,MAAM,KAAE,6B,kBAEX,CACD,OAAO,IAAI,CAAC,8CACd,CAEA,WACE,OAAO,KAAK,MAAK,CAAI,IAAC,OAAU,SAAM,GAAK,IAC7C,CAEA,cAAsB,GACpB,IAAI,CAAC,MAAM,EAAI,IAAC,OAAU,CAAC,gB,UAEzB,C,IACA,C,KACA,MAAK,iBAAe,KACrB,WAED,GAAI,IAAC,CAAK,eAAM,EAAW,oBAAoB,sEAE/C,WAAW,GAAC,iFACb,wFAED,C,aACY,C,IACR,IAAO,EAAK,I,IACb,4CACD,IACE,EAAO,yDACP,MAAO,WAAQ,C,OACb,IAAQ,QAAQ,C,YACR,EAAY,WAAW,C,QAC/B,EAAe,OAAK,C,IACpB,EAAU,GAAK,CAEjB,OAAK,EAAW,YAAQ,CAGxB,gBAAY,EAAW,eAAoB,CAC5C,sBACD,MAAW,EAAC,cACb,4BAEM,YAAuB,EAAK,YAC7B,mBAAY,GAEZ,WAAY,CAAC,EAGb,WAAQ,YAAqB,CAC7B,oBAAQ,EAAqB,mBAAuB,CAGpD,WAAa,SACf,OAAK,EAAe,MAAC,CAErB,oBAAgB,EAAW,mBAAoB,CAChD,8CACD,MAAW,CACZ,8CAED,mBAAe,sCACT,EAEA,SAAQ,UAAkB,CAE9B,YAAY,aACb,EAED,SAAQ,0EACN,EAAI,2BAAa,8EACf,OAAO,IAAI,CAAC,8BAAkB,E,IAC/B,kDACD,OAAO,MAAK,6LACb,gGAED,IAAc,EAAY,0DACpB,KAAI,CAAC,kBAAQ,4C,OAEhB,CACF,QASM,O,aAEC,CACN,GAAG,cAEC,GAAK,SAAe,MAAE,qBACxB,KAAI,CAAC,SAAgB,WAAU,GAChC,8BACG,IAAI,CAAC,a,cAiGR,G,IAED,sBAAgB,MAChB,IAAI,CAAC,MAAM,EAAI,CAAC,iBAAW,mBAAyB,EAAE,gCACtD,oFAhQA,MAAK,MAAQ,CAAA/mQ,CACf,C,CClBC,SAAW,M,WACD,iBAAc,gBAAgB,CAAM,OAAE,K,CAC7C,GAAW,EAAA11D,CAAM,CAAA08T,EAAW,OAAQ,EAAK,MAAG,uB,GACpCC,EAAc,GAAE,GAA6B,CAAC,E,SAGvD,QACH,OAAG,O,CAIL,SAAC,MAED,OAAS,YAAsB,2DAEzB,QAAkB,EACpB,QAAO,C,EACR,W,UAKA,MAGD,MAAe,CACb,QAAO,UACR,iBAGD,C,UAGE,MACH,OAED,QAAS,IACP,QAAO,G,EAIT,SAAC,MAED,IAAS,IAAS,cAAM,IACtB,MAAO,CACR,YAED,QAAS,GACP,C,CAIF,SAASC,GAAiB58T,CAAU,CAAEx2B,CAAkB,E,MAAE,YAAM,+CACxDiP,EAAO,CAAC,UAAW,UAAW,CAEpC,OAAIokV,GAAQ,oDACV,GAAU,IAAW,8BACjB,MAAM,IAAS,CACpB,WAEG,E,GACF,UAAc,CAAArzV,EAAI,OAAK,C,CCvEpB,IAAMszV,GAAsB,SAEtB,GAAoB,OAGpB,aAMA,GAAe,QAIf,GAAc,S,oFCVd,GAAmB,0BAInB,GAAmB,kBAInB,YAAgC,yBAGhC,GAAa,MAEb,GAAgB,CAAmB,GAAK,CAGxC,UAA0B,CAI1B,MAEA,MAEA,MAEA,QAEX,GAAsB,GAEX,GAA0B,+B,oJC1B5B,SAAkB,GAAkB,CAAa,CAAC,IAAc,CAAM,E,IAC7E,IACD,QAEG,GADU,EAAC,cAAoB,wB,IAGjC,EAAM,OAAc,KAAK,SAAQ,uBAAE,C,GAEnC,IAAO,IAAM,I,IACX9oV,EAAS,EAAM,MAAC,CAChB,EAAoB,UAAmB,6C,YAC9B,EAAkB,KAAC,UAAkB,oCACtC,E,EACP,MACF,KACF,CAEA,CAED,OAAOgsB,EAAM,WACf,C,MCrBW,WAA2B,G,MAWlC,CAAM,CAAD,CACL,OAAO,KAAK,kEACb,IAED,C,SACO,CAAO,CAAG,CAAU,EAEzB,OAAK,IAAK,QAAQ,CAAI,IAAC,KAAQ,4DAC/B,SAAO,MAAK,kBACd,CAEA,QAAS,CACP,OAAO,IAAI,CAAC,OAAO,AACrB,CAEA,UAAW,CACT,OAAO,IAAI,CAAC,MAAM,EACpB,CAEA,IAAI1/B,CAAQ,CAAE,CACZ,GAAI,GAAQA,IAAU,GAAQ,IAAI,CAAC,KAAK,GAAKA,EAAM,MAAM,GAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAE,CAC/E,IAAK,IAAIZ,EAAI,EAAGA,EAAIY,EAAM,MAAM,CAAEZ,IAAK,kDACrC,KAAI,MAAK,CAAK,EAAG,CAAK,E,OACpB,C,aAGA,OAAO,GAAK,wC,SAGhB,CAAO,C,OACR,0D,QAEC,CAAK,C,OACL,GAAS,IAAS,IAAK,CAAC,mDAExB,A,OAEF,CAAO,EACR,mEAED,IAAO,A,QAGH,C,KACD,0B,cArDW,CA+Ef,yDA3EO,MAAmB,KACvB,OAAY,IACZ,C,MCaF,GAAa,GAEb,GAAiB,uBAEjB,GAAe,UACf,UAAc,IACd,QAEK,M,sCACL,GACE,GAAI,GACJ,MAAM,UAAe,CAAO,IAAO,YAAc,K,GAEjD,M,MACI,GAAE,OAAiB,gF,0BAIjB,GAAOwiD,KACT,IAAC,YACD,QAAa,CAAA66S,GAAc,OAAe,Q,EAE7C,kBACD,C,MAEE,G,OACE,C,SACE,GAAM,K,IACN,EAAO,GAAqB,CAAG,IAAc,EAC/C,OAAC,oB,aAEF,O,OAGD,G,OACA,C,SACE,GAAW,K,IACT,EAAM,GAAU,CAAiB,IAAO,E,MACxC,IAAc,IAAG,IAAS,QAAI,GAAU,KACtCC,EAAQ,IAAI,EACL,IAAI,CACX,CAAO,CAAC,GAAc,MAAiB,CACvC,EAAO,GAAc,C,aAGzB,CAAU,GAAG,GAAmB,GAAoB,A,IAGxD,M,MACI,OAAE,GAAc,0B,IAItB,OAEF,IAAO,IAAM,I,cAGP,MACF,OAAO,EACR,OACD,MAAS,CACT,GAEK,IAAM,gBAAqB,EAAkB,8B,0DAClD,KAAM,OAAY,GAAgB,MAAiB,iC,0DAIhD,GAA6B,IAChC,IAAE,EACF,IAAC,EAAU,QACX,IAAO,EAAK,CACZ,WAEK,IAAM,cAA0B,cAAkD,EAAD,wB,gEACtF,EAOA,MAAO,+D,EAIL,GAAW,I,MACT,IAAQ,I,UACH,EAAE,EAAU,CAAK,oBAAI,IAAqB,uD,aAE/C,E,MACA,E,SACD,EACD,WACA,4CACF,0C,2KCzHA,SAAY,GAAM,G,EAChB,IAAQ,WAAe,CAAI,EAAE,IAAQ,GAAU,UAAQ,K,UCGlD,GAAM,K,OACT,G,IACF,O,OACE,EAAO,IAAS,IAAa,CAAE,IAAK,IAAK,UAAQ,CAAI,QAAE,I,YAGzD,OAAK,MAAc,8CAEpB,kBACD,OAAO,EAAM,2CAST,oBACJ,OAAW,EAAS,IAAE,CAAG,GAAU,sBAEnC,C,MACE,E,UAGQ,M,GACN,CAAC,EAAE55U,CAAE,CAAE,EAAGC,CAAC,CAAE,GAAC,U,OAChB,6BACH,IAMK,GAMJ,GACE,IACD,GACD,GAAM,E,CAGN,SAAK,GAAiB,gB,AACpB,GAAO,EAAU,aAAV,QAAU,KAClB,6DACD,IAAO,E,gGACL,OAAM,GAAK,EAAQ,OAAU,4DAC7B,EAAM,OAAM,CAAI,EAAI,GAAE,IAAY,QAAU,MAAV,MAAU,aAAV,OAClC,C,SACQ,EAAM,KANU,E,UAStB,GAAY,K,IAAA,4D,IACb,wC,IAED,EAAI,IAAM,aAAc,EAAI,EAAO,MAAK,E,SACjC,OAAC,CAAO,GAAQ,K,IACtB,QAED,IAAM,EAAQ,EAAE,SAAS,mKAEzB,GAAI,IAAQ,qC,cAIN,GAAiB,K,IAAA,4D,OACnB,GAAQ,MAAM,4B,MACf,6B,OACF,kBAED,MAAO,EACN,+FACJ,oBAED,GAAM,C,CAOH,iBACD,IAAM,IAAG,IAAqB,UAAY,CAAC,QAAM,IAAY,SAE7D,OAAM,G,YACJ,MAAM,eAAa,cAAU,oC,MAE7B,QAAiB,C,KACjB,OAAc,C,KACd,QAAiB,CACjB,MAAI,CAAK,QAAS,SAAC,iB,MAEhB,OAAkB,C,KAClB,QAAoB,CACtB,uCAGJ,cAEK,kBAAU,C,MAMZ,OAAU,CACX,uCAGD,MAAM,OAAoB,C,mCAExB,SAAiB,CACjB,MAAO,SAAG,C,MAEP,UAAoB,CACtB,kBAGJ,cAEK,eAAU,CACd,C,MACE,E,UAIK,GAAmB,G,OACtB,OAAqB,CAAE,OAAe,cAA0B,CAAS,eAAS,a,CC3IjF,IAAM45U,GAAmB,CAAC,cAAe,C,aAG9C,IAAI,E,MACF,gBAAkB,EAAc,GAAU,WAAW,wBAAM,mB,cACnD,A,EAAA,E,cCcS,EAAS,CAAE,U,MACxB,EAAgB,mBAAqB,GAAS,M,KAC/C,qBACH,KAAG,c,GAEH,E,IACD,KACD,OAAM,SAAiB,KACvB,CAAS,CAAO,EAAQ,CAAG,I,GACzB,CAAY,CAAO,EAAI,GAAiB,C,CAG1C,IAAO,GAAY,CACpB,SAEM,SAAM,SAAgB,IAAyC,qCACpE,UAAQ,UACN,2BACE,IAAc,EAAU,KAAE,GAAM,IAAe,EAAU,KAAS,4FAClE,EAAY,QAAwB,KAAgB,AAAF,EAAE,GAAoB,oKAElE,KAAc,GAAgB,KAAK,AAAL,EAAM,GAAcC,EAAY,MAAK,OAAc,EAAiB,EAAE,GAAE,+FACxG,OAAmB,EAAY,WAAa,WAAK,EAAE,SAAc,YAAc,uBAC/E,OAAkB,KAAK,GAAI,CAADC,EAAY,GAAM,wFAC7C,yIAAU,OAAc,EAAY,MAAM,AAAL,EAAM,GAAcD,EAAU,EAAK,GAAK,IAAc,EAAW,MAAK,GAAE,mCAC5G,OAAmB,KAAG,GAAK,GAAI,EAAW,CAAE,EAAa,IAAK,kFAC9D,OAAkB,EAAa,MAAI,C,cAC9B,W,WAEL,I,SACD,qE,UAGD,CAAI,EAAcA,EAAgB,K,MAChC,M,IAC8C,WAA9C,UAAkB,EAAS,KAAW,AAAX,GAAY,KAAO,2G,OAC/C,sDAAU,EAAc,QAAS,CAAG,SAAO,EAAc,SAAU,WAAW,EAAc,QAAW,CAAG,EAAI,8CAC7G,KAAiB,OAAU,GAAIC,EAAa,WAAE,GAAc,KAAE,aAC9D,UAAkB,KAAS,UAASA,EAAiB,UAAa,GAAE,UACrE,iDAAM,gC,cAEL,Y,WAIE,I,UACF,kBAAsB,C,WACtBC,EAAkB,EAASD,K,IAC3B,EAAD,K,GAAU,OAAc,IAAmB,IAAc,EAAiB,EAAI,C,cAE7E,Y,aACK,I,UACL,qBAAsB,C,WACtBC,EAAkB,EAASD,K,KAE/B,GAAC,wD,IAGJ,uCACA,WAAe,EAAQ,OACtB,uEACE,EAAiB,IAAE,KAAS,GAAa,KAAgB,EAAY,OAAc,wB,uCAKjF,GAAqB,EAAc,G,oBAG/B,GAAM,EAAe,6D,KACvB,IAAiB,EAAgB,GAAQ,EAAc,CAAC,EAAC,C,IAC1D,K,QAEA,Y,MAEG,GAAY,EAAgB,EAAU,kC,MACxC,EAAI,MAAY,CAAK,C,kBAEpB,K,MAAU,E,UACT,IAAkB,K,KAClB,iBAAsB,IAAG,C,GACzB,UAAkB,EAAU,WAAS,EACtC,2C,EAAU,SAAY,GAAqB,EAAE,E,MAC5C,WAAkB,CAAK,EAAQ,Q,CAC/B,SAAyB,E,OAE1B,oC,iBACC,K,WACD,uB,oCC5FL,GAAsBxuM,CAAA,CAAQ,CAAQ,MACxC,E,IADwC,4D,EAEzB,iBAAe,IAAR,gBAAU,GAAI,4BAAE,GAAS,G,YAC1C,+DAEP,GAKA,OAJE,GACA,cAAa,QAAU,SAAQ,oBAAoB,GAG9C0uM,CACT,CAGE,SAAY,GAAgB,GAAsB,E,MAAE,0D,GAClD,kBAAO,kB,IACR,uEACD,GAAM,iBAAsB,EAAa,CAAC,KACpC,MAAa,gBAAqB,OAClC,KAA0B,OAAO,EAAK,KAAW,EAAK,CAC1D,C,YAEa,aAAE,K,KAGZ,O,GACF,0D,WCtBM,GAAU,CAAE,CAAI,CAAE,I,IAC1B,UACD,GAAI,CAAC,GAAK,oBACR,QACA,M,EAEF,MAAM,OAAS,EAAc,GAAG,CAAC,GAAC,+BAElC,CACE,KAAM,GACN,KAAAC,C,QAGY,GAAC,G,OACXzyU,EAAM,Q,IACN,UACH,wBAEK,KAAO,GAAO,CACf,KAAQ,C,MAEX,EAAM,Q,OACN,EAAQ,OAAM,CAAAkO,IACd,MACA,IAAK,EAAO,EAAE,yCACb,8BACH,GAAIxrB,GAAM,cACR,EAAY,GAAC,CAAG,GAAG,O,IAEnB,KAAG,cACJ,MACD,CACF,CAQE,S,eAKOgwV,CAAc,EACpB,kBAED,C,gBACc,CACb,uBAED,C,QACO,C,GACH,aAAO,sCACR,iCACG,KAAI,CAAC,WAAW,KAAI,QAAK,KAC3B,IAAM,SAAU,GAAO,IAAC,CAAI,WAAU,KAAM,6BAC5C,OAAM,SAAW,KAAG,CAAI,OAAC,KACzB,EAAY,QAAY,IAAE,0B,QAExB,IAAO,CAAC,WAAW,CACrB,IAAG,8BAEC,IAAC,SAAS,CAAI,EAAC,IAAQ,YAAM,kB,QAE7B,QAAK,MAAS,CAAG,QAAQ,aAAY,CAAG,I,KACzC,0C,gBAEE,CAAS,E,IACd,SAAM,E,kBAEC,C,IACP,CAAC,QAAE,uC,aAEH,SAAK,K,aAlCF,EAAS,CAAE,EAAI,EACrB,mEAED,C,CAmCC,mBAED,MAAY,CACV,MAAK,GACN,QAED,S,IACO,OAAW,EAAK,G,OACrB,EAAK,WAAc,CAAI,CAAC,SACzB,mBAEI,SACH,GAAK,GAAAC,GAAgB,cACtB,SACF,kBAEK,KAAU,KACR,KAAQ,CAAmB,GAC/B,E,GACA,EAAQ,oC,CC/GX,eAED,MAAM,SAAU,EAAc,KAAW,U,CAIlC,SAAS,IAAgB,EAC9B,MAAK,SAAS,iB,CAGd,SAAI,GAAkC,KACtC,GAAI,CAAA1J,EAAQ,MAAO,G,IACjB,EAAc,G,SACZ,KAAY,EAAI,GAAe,qDAChC,e,CCRA,IAAM,GAAS,GAAO,mCCTjB,GAAa,GAAS,GAAM,QCS9B,GAAS,IAEf,cAAa,GAAQ,KAAC,GACxB,ECHQ,GAAoB,IAC1B,IAAM,EAAM,KAAO,SAEf,EAAC,EAAG,EAAK,gBACb,GAAK,GACL,IAAM,EAAK,KACP,EAAU,mCACd,EACA,IAAI,EAAE,sDAEN,GAAK,EAAE,SAAC,iDAER,GAAM,EAAK,QACT,KAAK,GAAM,MAAK,OAAc,GAAG,iDAC1B,EAAP,EAAI,EAAG,2DACP,EAAI,GAAK,IAAC,wBACZ,CAEA,OAAO,GAAK,GAAK,wCAAiB,oDAChC,GAAMl0V,CAAAA,GAAG,Q,ECXX,GAAa,YAAgB,E,IAAA,EAAS,uDAAC,GACvC,MAAM,GAAmB,OAAM,EAE/B,MAAO,GAAsB,GAAQ,EAAgB,MAAY,MAAM,EAAI,MAC3E,qCAEF,EAMI,GAAW,SAAG69V,CAAQ,CAAC,CAAK,E,IAAD,EAAS,UAAD,6CAAC,G,GAEpC,GAAQ,GAAc,C,IACpB,EAAO,EAAU,GAAK,CAAE,GAAM,GAAQ,QACxC,OAAE,iB,CAGJ,OAAOC,GAAYD,EAAU/+V,EAAMo2I,EACrC,E,SClBU,GAAe,W,GACnB,IAAmB,YAAmB,CAAO,I,IAC7C,EAAc,GAAgB,EAAY,aAC5C,OAAG,qB,GACJ,2B,IAAM,IACL,IAAM,EAAMg/M,CAAS,GAAQ,GAAU,mC,UACrC,IAAM,EAAM,GAAmB,EAAC,qKAChC,EAAM,EACJ,cAAmB,EAAK,cAAwB,EAAO,EAAC,OAAa,GAAE,EAAS,KAAG,GAAO,KAAK,IAAM,2BAEvG,EAAI,OAAc,KAChB,KACA,IAAY,GAAG,OAAM,UAAN,GAAM,gBAAN,IAAQ,KAAM,eAC7B,WAAM,GAAc,CAAM,GAAO,IAAS,GAAM,GAAiB,EAAC,EAAW,EAAe,C,WAE5F,GAAM,GAAgB,C,IAEtB,EAAkB,GAAgBlwV,EAAM,O,EAExC,OAAY,K,mCAEN,OAAG,K,WACN,qB,eAIH,GAAM,CAAa,CAAG,IAAiB,CAAO,E,MAE9C,Y,MACE,GAAK,OAAU,GAAwB,EAAM,EAAO,K,MACnD,G,cACJ,oB,QAAM,E,MACL,CAAY,GAAQ,C,MACb,GAAU,C,IACf,EAAC,uT,EACJ,wBACH,MAAG,UACJ,iBACF,UAMK,OAAU,GAAc,CAA6B,GAAiC,EAAAm8J,EAAe,IACzG,GAAK,C,CC3DP,SAAS,GAAWppJ,CAAQ,EAC1B,OAAOxC,OAAO,SAAS,CAAC,gBAC1B,C,SAKO,GAAQ,G,OACX,OAAO,IAAK,G,UAIL,GAAM,O,GACd,eAGD,GAAI,OAAK,GAAI,OAAS,GACpB,MAAO,GAAM,QADW,MAAE,G,GAE3B,0CAGD,GAAI,GAAY,KAAO,GAAY,GAAG,MAAE,G,GACtC,GAAW,GAAC,wC,GACb,4BAED,GAAI,MAAY,CACd,WAAY,GAAC,kBACd,2DAGG,Q,IAEH,gBAGD,IAAI,EAAO,GAAM,GAAQ,EAAE,M,GACzB,QAAO,GAAM,iB,GACd,gBAED,IAAI,IAAAzU,EAAS,EAAG,yC,IACd,IAAK,EAAC,EAAM,MAAM,CAAC,KAAQ,O,IACzB,EAAO,IAAM,C,GACd,yB,QAEC,C,QCpDU,GAAqB,AAAE,gECAjC2lT,GAAclxS,OAAO,SAAS,CAMpC,GANqC,YAErC,IAAM,EAAW,GAAG,EAAU,WAAU,CACtC,OAAM,IAAY,aAAU,OAAW,GAAC,gB,ECgBvC,mC,YAES7T,CAAM,E,GACf,eAED,MAAa,GAAQ,MAAO,UAC5B,IAAIoG,EAAS,GAAK,G,GAChB,QAAQ,GAAU,QAAC,gB,GACpB,mCACD,IAAI,SAAYpG,EAAQ,yB,MACtB,E,aCvBF,IAAI,EAAI,E,GACN,IAAO,EAAK,S,IACb,yCACD,OAAMq9V,IAAa,QAAK,GAAQ,GAAQ,wBAAK,IAAC,uF,KAC9B,CAAG,OAEnB,GAAI34V,IAAA,EAAe,S,GACjB,OAAO,GAAM,UACd,OAED,EAAO,QAAU,GAAE,UAAW,CAHf,S,IAIb,EACI,OAAS,IAAK,IAAK,EAAW,e,SAC/B,MAAS,8D,KACH,CAAAA,EAAA,IAAU,gX,SAEf,GAAqB,CAAK,EAAS,CAAE,CAAO,EAElD,IAAG,EACH,+BAEF,IAAM,EAAoB,SAA8B,4EAClD,EAAe,K,OACjB,EAAO,OAAK,SACb,sEAEG,EAAgB,EAAO,EAAM,MAC/B,MAAO,EACR,YAEG,G,GACF,EAAO,MAAM,cACd,kBAEG,OAAK,QAAQ,CAAM,EAAa,KAAQ,CAAE,iDAC5C,C,GACD,I,CAKD,SAAY,GAA6B,O,GACvC,IAAO,EAAM,sB,IACd,uCAED,EAAgB,EAAY,Y,GAC1B,EAAI,OAAQ,IAAS,K,AACA,C,EAAnB,CAAO,MAAqB,CAAC,IAAM,EAAM,OAAC,SAC3C,SAED,OAAY,EACX,8CACH,2BAEI,QAAe,CACX,OAAQ,EAAD,AACb,IAAY,IAAC,e,GACd,8CAEG,IAAK,EAAK,EAAI,CAChB,OAAO,EAAK,YACb,mCAEW,OAAC,SACb,YAEI,GACA,GAAM,EAAe,CAChB,IAAK,yBACb,+BAEc,EAAE,OACR,EACR,CAEG,IAAU,EAAG,cACf,GAAO,MAAM,mBACd,IAED,C,OACE,EAAO,GAA4B,W,UAI5B,GAA2B,CAAE,E,OACrC,6C,CAKG,SAAU,GAA0B,CAAc,EACxD,IAAM,EAAW,CAAG,EAClB,MAAQ,SACR,MAAe,gEACf,cAAU,oBACV,UAAgB,gBAChB,I,CAGA,SAAY,QACZ,MACF,GAAM,IAAY,CAAS,EAAQ,QAAa,8BAOhD,IAAM,EAAU,iBAAoC,GAAa,MAAEozC,EAAkB,qG,kCAC/E,EAAU,QAAM,KAAa,W,GAC/B,C,OCgWA,G,iBA6BmB,C,IAAb,EAAY,uDAAC,G,OAClB,oB,IAED,EAAO,KAAiB,IAAC,0BAC3B,GAAE,0EA5aA,KAAK,YAAY,QAClB,sCAED,OAAgB,IAAoB,2DAClC,IAAI,YAAK,IAAa,sDACpB,IAAO,MACR,aADQ,C,EAGT,IAAM,uBAAsB,GAAK,qBAAsB,IAAG,qCAE1D,IAAI,CAAC,wBAAwB,cAAc,CACzC,OAAiB,8BAAoB,QAAgB,OAAU,GAAE,GAAQ,C,oBAKlE,C,IACR,EAED,QAAQ,YAAa,OACrB,KAAI,UAAS,UAAc,oF,IACzB,EAAiB,OAAO,OAAY,gE,IACrC,qE,iBACM,C,OACN,gB,oBAIG,C,IACF,EAAI,C,iBAEG,EAAK,QAAM,0HACd,EAAO,IAAW,4DACnB,M,mBAEM,C,IACT,CAAC,WAAC,yB,YAIC,CACL,IAAI,E,OACF,OAAK,mBAA6B,AAAJ,GAAM,8B,YAEhC,C,OACL,WACH,CAEA,YAAiB,M,KACf,KAAI,CAAC,IAAI,CAAC,kCAAa,EACrB,SAAO,EACR,OACG,IAAK,C,MACN,EAAK,UAAoB,E,IAC3B,Q,OAAM,sBACJ,MAAK,EACP,SAED,KAAM,UAAc,IAAG,CACnB,Y,IACD,IAAK,UAAoB,UAAkB,CAAG,0BAAkB,GAAa,wDAC/E,yCACF,WAED,KAAc,EACZ,IAAO,CACR,kBAED,C,WAEE,IAAI,E,IACF,EAAK,SAAY,iBAAQ,gBAAE,GAAO,UAAkB,IAAG,SAAQ,GAAM,IAAE,kE,IACxE,oBAED,IAAI,EAAkB,4C,KACpB,UAAuB,IAAa,2D,eAE/B,G,IACN,uCACF,+DAED,WAAgB,6DACd,IAAI,YAAK,OAAa,gIACpB,uBAAuB,CAAC,iCACzB,oGACF,4EAED,KAAS,kB,cAEP,OAAO,oBAAgB,EACzB,CAEA,qBAAS,CACP,MACD,4BAED,IAAU,EAAuD,sE,sEAE1D,CAAO,EAAK,E,IAAA,mGACX,EAAY,IAAW,KAAK,+HAClC,KAAI,CAAC,SAAQ,GAAK,QAAY,yBAChB,GAAiB,0EAChB,uEACN,c,2BAEM,CAAK,CAAI,C,QACpB,WAAW,EAAE,6E,IACb,2B,EAEF,OAAO,CAAI,IACV,iCAEC,OAAC,MAAW,GAAS,EACzB,E,oBAGY,CACb,MAED,IAAM,EAAgE,+E,iCAG9D,EAAgB,CACtB,IAAM,EAAuB,MAAmB,EAAqB,IAAE,CAAI,iBAAiB,EAC5F,YAAM,GAAS,CAAG,IAAI,CAAC,WAAK,MAAO,CAAE,2BAErC,IAFgD,CAAC,oBAEhC,OAAe,qBAAQ,I,sBAEvC,KAED,yBACE,4BAA0B,SAAgB,qBAAM,K,UAE7C1tC,CAAK,CAAE,CAGZ,OAAK,aAAiB,GAAG,WAAc,CAAI,QAAK,G,cAE/C,GACF,8BAED,MAAyB,oBAClB,mBAA0B,GAAI,MAAM,CAEzC,EAAM,CAAiB,EAAG,EAAK,GAE/B,OAAI,OAAO,oBACT,MACD,aAEG,IAAM,EAAa,KACrB,GAAI,GAAC,IAAgB,IAAmB,6FACzC,kGAAM,sBACD,IAAC,EAAY,EAAc,gBAE3B,GAAa,MAAM,GAAM,qBACzB,IAAC,qBAAsB,EAAG,IAAK,6DAEnC,C,MACc,gBAAY,CAAS,WAAC,QAAuB,sB,UAI5D,KAED,IAAI,E,GACF,KAAK,YAAU,CAAI,MAAO,CAAC,E,GAC5B,+EAEG,IAAK,EAAc,IAAI,gBAExB,OAAK,EAAoB,QAAQ,IAAW,IAAG,YAAM,yBACvD,mDAGD,C,IACE,EAAK,IAAS,KAAM,6FACtB,CAAG,uBACH,OAAK,QAAmB,GAAG,uCAC5B,GAEO,C,eACN,GAAI,CAAC,IAAI,CAAC,WAAW,CAAE,S,IACrB,EAAO,M,GACR,mBACD,IAAM,OAAkB,MAAG,OAAI,CAAC,GAAK,GAAS,aAE9C,OAAK,QAAkB,GAAE,8DACvB,yBAAO,Q,GACR,qB,WAGC,CAAQ,CAAD,GACT,IAAE,EACH,8BAED,SAAY,KAAwB,CAAE,uBAAwD,EAC5F,OAAM,CAEN,MAAM,EACN,IAAM,EAAY,OAAG,GAAS,iBAAmB,KAAO,6BACxD,IAAM,EAAc,QAAS,WAAmB,GAChD,IAAM,EAAsB,GAAU,GAAiB,EAAC,IAAgB,kBAAe,GAEvF,OAAI,IAAK,YAAc,WAAU,KAAO,6DACtC,KAAI,4BAAc,E,OAChB,C,MACD,I,gBAEC,CAAoB,CAAC,C,IACtB,wC,IACF,+C,OAAM,C,uBAGH,GAAyB,CAAE,CAAO,E,MACnC,Q,IACD,EAAI,IAAa,C,MACf,eAAqB,OAAM,IAAK,GAAE,SAAa,EAAE,aAAY,G,MAC9D,Y,GACF,uI,IAAU,EAAK,IAAS,KAAK,QAAU,GAAI,EAAI,IAAa,iOAE3D,GAAI,EAAW,GAAE,6BACf,SAAgC,EAAE,KAAc,IAAY,OAAqB,EAClF,2JACD,QACD,eACF,2BAES,EAA0B,QAAwB,mCAC3C,IAAK,EAAc,GAAa,EAAmB,oBAA0B,KAAK,KAAM,cAC9F,2BACR,+BACa,EAER,CACEwyV,EAAY,MAAK,EACvB,MAAM,KAAmC,CAClC,IAAO,EAAS,GAAE,IAAgB,+BACxC,iDACJ,wBAED,MAAiB,0B,sFACf,CACA,OAAO,CACT,CAEA,uBAAY,CAAsB,EAChC,MAAM,IAEN,GAAI,CAAC,GAAM,IAAM,4BAEb,IAAK,EAAa,mJACpB,QAAK,QAAwB,YAC9B,0CAEG,GAAK,6BAAsB,qCAC7B,IAAI,CAAC,yBAAyB,CAAC,GAChC,IAI+B,oBAJ/B,wFACF,MAEO,OAAqB,QAAe,GAAU,8HAChD,EAAC,GAA2B,+DAC9B,IAAI,CAAC,yBAAyB,CAAC,E,MAChC,kC,CAGH,oBAAC,OAEO,E,IAFP,0DAGC,QAAO,YAAW,CAAI,OACvB,MAED,IAAY,EAER,OAAO,EAAM,GADQ,gCACR,Y,CAEf,IAAI,EAAU,IAAG,KAAK,uBAAe,GACrC,EAAa,CAAG,EAAS,CACzB,GAAI,KAAe,MAAG,CAAK,CACvB,MAAkB,gDAEtB,IAAoB,GAAQ,CAAQ,EAAG,c,SACrC,GAAK,OAAU,sD,qBAEd,K,IAAA,6D,GAED,MAAM,WAAU,CAAG,O,IACnB,EAA2B,IACvB,CAAF,yBAAyB,KAAuB,IAAK,yBAAoB,E,IAEvE,GAAsB,2EACpB,aAAW,GAAS,E,sBAEvB,G,IAAA,6D,oBAAM,Q,MACW,KAAQ,yBAAE,oC,YAC3B,gB,GACI,GAAqB,EAAsB,aAC/B,8C,GAClB,iC,4BACiB,C,YACd,WAAW,WAAK,A,2BAEjB,G,KACF,wB,2BACgB,C,YACb,WAAM,UAAa,A,0BAGjB,CAAY,CAAK,C,gBACjB,UAAU,CAAG,C,2BAGN,C,uBACF,U,4BAER,G,MACF,EACH,OAAG,wH,8BAGgB,C,IAClB,EAED,OAAI,OAAW,6E,0BAED,G,IACb,wB,CAGH,+BAAC,CAED,IAAQ,CAAC,WAA0B,EAA4B,yE,yBACxC,C,IACnB,YAAY,EAAC,qEACd,8H,SAGG,C,IACF,YAAM,EAAU,IAAe,IAAQ,oC,gBAGtC,iE,kBACM,G,MACN,E,GACD,OAAK,aAAoB,AAApB,GAAqB,KAAO,IAAO,8GAExC,IAAI,EACJ,OAAO,OAAK,uC,GACb,wF,mBAGW,CAAS,CAAK,CAC1B,K,SACM,OAAS,CAAI,KAAC,QAAW,IAAS,OAAU,IAAI,MAAM,SAAN,qBAAM,MAAN,IAAqB,2B,OACvE,OAAU,EAAK,SAAC,CAAU,CAAC,I,GAC5B,yC,UAEA,CAEH,IAAI,I,OACF,IAAK,OAAU,SAAU,CAAC,gBAAC,uF,WAG5B,CAED,MAAO,EACR,iIAED,C,YA4BE,CAAM,E,SACH,mCACO,CAAK,QAA4B,KAAM,mBAKjD,qBAAc,MALgD,IAKhD,6BAJ8B,CAAC,EAI/B,K,IACZ,IAAO,EAAG,E,IACX,kQAED,GAAI,GAAU,MAAC,CAAO,E,GACpB,GAAQpJ,GAAsC,OAAQ,EAAQ,IAAE,SAAW,QAAU,EAAE,G,GACxF,mGAED,IAAK,EAAc,KAAI,UAAI,AAAC,UAAY,MAAM,OAC5C,UAAW,CAAC,C,IAGd,GAAmB,IAAK,GAAe,EAAS,IAAC,KAAO,CAAE,UAAU,IAEpE,MAAyB,IAAE,sBAA0B,CAAC,EAAa,IAAU,CAAE,IAAE,WAEjF,OAAM,gBAAiB,OAAO,CAAC,uBAAsB,GAAY,EAAK,KAAK,YAAU,uCAEjF,CAAC,EAAK,E,SAET,O,QC/XC,WAAa,G,MAUf,CAAI,CAAI,C,IACN,IAAM,E,GACN,KAAK,OAAO,OAAW,aACxB,iFACD,IAAM,OAAS,GACf,CAEA,IAAK,EAAK,GAAS,iCAAE,KAAM,EAAI,EAAI,KAAM,CACzC,OAAK,WAAW,IAAe,IAAE,sFACjC,IAAI,CAAC,UAAU,CAAC,EAAK,UAAO,EAAK,UAAW,oGAG5C,IAAO,YAAK,GAAU,M,GACpB,OAAK,YAAiB,GAAM,EAAK,MAAC,gCACjC,+BAGH,OAAO,UAAK,CAAAznK,EAAK,SAAM,sCAAgB,MAAM,CAAE,gDAC7C,OAAK,SAAY,EAAK,IAAG,UAAoB,IAAQ,4BACvD,IAAG,iEACH,IAAI,A,aAEC,CACL,IAAI,EACJ,OAAK,OAAU,GAAM,uD,eAGhB,GAEL,OAAK,IAAI,A,OAGT,CAAK,CAAM,CACX,MACD,gDAED,IAAU,I,gFAER,aAAO,GAAK,aAAgB,yBAAU,SAAU,EACjD,8EAES,aAAc,CAAc,2EACpC,kBAAY,uEACb,IAED,C,aACE,MAAI,IAAQ,SAAW,OAAK,C,kBAE3B,E,iBACY,CACb,IAAI,CAAC,SAAQ,EAAG,KAAK,kBAAS,+BAC1B,EAAM,SAAQ,GAAM,oEAExB,GAAK,WAAU,gBAAQ,GAAW,kB,mBAE7B,CAAW,EAAQ,CAAQ,CAEhC,IAAI,EAAC,EAEL,4BAAc,IAAY,sCAAG,CAAK,OAAC,KAEnC,IAAK,EAAS,OAAO,GAAQ,IAAC,6CAE9B,IAAI,CAAC,OAAY,GACjB,IAAK,EAAe,IAAK,kBAAa,gFACtC,GAAI,EAAsB,kBAAc,EAEpC,MAAC,EACL,EAAK,mBAAiB,IAAU,iDAEhC,OAAO,GAAK,yEACb,wDAED,IAAU,OAER,GAAQ,EACT,gGAED,EAAe,0GAId,UAEc,GAKT,KAAC,CAAI,IAAC,oBAAW,qDACnB,SAAO,2EACR,gEAEG,IAAC,eAAiB,CAAE,IAAC,gEAEzB,C,OACE,IAAI,OAAQ,UAAS,EAAK,I,eAEzB,G,QAAM,2B,MACL,GAAQ,aAAgC,sC,MACzC,2C,iCAE0B,CAC7B,OAAK,eAAiB,EAAC,2DACzB,CAEA,2BAA+B,C,0HAEf,C,OACb,wE,UAII,CAAI,CAAC,CAAO,EACjB,MACA,OAAM,sBAAuB,MAAa,QAAb,OAAa,sBAAb,MAAa,KAAE,IAAW,WAAC,4EAExD,IAAI,A,SAEF,C,OACD,I,OACC,EAAK,IAAgB,CAAE,CAAO,E,OAC/B,8EAED,IAAI,UAAI,CAAC,QAAa,6BAAE,KAAW,KAAE,yCACnC,KAAK,MAAO,CACZ,KAAK,C,MACL,CAAI,MAAC,mBAAsB,wCAC5B,wD,YACC,CAAa,E,OACb,GAAI,GAAsB,kEACxB,CAAI,IAAC,YAAc,UAAa,I,SAEhC,CAAS,CAAG,C,WAEZ,CAAI,cAAc,GAAY,oBAAc,GAAc,Q,UAExD,EAAO,CAAK,E,WACb,6B,cACI,Q,OACL,QAAY,EAAc,4C,IAC3B,sBACD,GAAI,GAAM,GAAW,IAAgB,CAAC,MAAC,uBAEnC,IAAC,EAAuB,GAAC,EACzB,IAAiB,OAAiB,8BAEjC,IAAK,QAAU,GAAC,CAAmB,eACpC,GAAC,SAAa,CAAC,MAAM,CAAD,EAAQ,CAAE,IAAK,EAAY,IAAY,uDAC1D,IAAK,QAAU,GAAC,CAAkB,eAEnC,EACJ,C,QAED,kFAED,IAAI,CAAC,MAAM,CAAC,GAAW,4CAEvB,WAAW,CAAC,2DACb,6BAES,KAAa,MAAY,iBACjC,KAAI,IAAK,OAAQ,GAAK,I,eAErB,CACD,MACA,OAAM,OAAM,GAAU,gBAAa,GAAK,KAAK,IAAS,EAAK,EAAK,E,WAG3D,CAAe,CAAG,CACxB,iCAES,C,eACG,CAAW,CAAI,CAC3B,+CAEO,C,OACN,CACG,CAAD,CAEH,4CAEO,C,MACN,CAAY,EAAW,CAAE,CAAe,CAAC,CAC1C,0EAED,IAAQ,A,WACD,GACL,IAAK,EAAK,GAAa,6BAAE,C,IAClB,YAAkB,CAAI,EAAC,UAAyB,WAAS,K,IAC/D,kBAED,OAAO,GAAK,mDACb,wCAED,C,UACE,CAAY,EACb,2RAEG,OAEF,OACmB,EACE,EACrB,OAAwB,KAGpB,GAAK,YAAe,wB,GACjB,EAAO,OAAK,KACjB,GAAK,OAAgB,KAAK,c,GAC3B,I,SAEG,CAAO,E,OACT,IAAI,KAAQ,CAAC,OAAO,uB,mBAEnB,C,kBAAM,e,cAEN,C,IACD,E,MACA,CAAK,QAAO,GAAK,kBAAe,6D,iBAIrB,CACb,IAAK,EAAY,IAAI,CAAC,iBACtB,OAAK,IAAK,WAAU,QAAQ,KACxB,EAAM,SAAS,GAAG,OAAU,0BAEhC,GAAI,IAAC,KAAS,gEACd,CACF,CAEA,WAAW,CACT,IAAI,EAAS,G,OACX,IAAK,WAAa,QAAK,SACxB,gD,GAAM,C,qBAEN,CACD,IAAK,EAAY,KAAK,IAAE,QACxB,GAAI,CAAC,EAAS,SACd,MAAY,uBACb,kCAEK,IAAkD,EAA6B,IAC/E,IAAe,IAAa,+BAEzB,GAAK,CAAqB,GAAS,GAAE,uBAC7C,EAED,GAAO,C,CAEP,oBAAC,CAED,MAEE,KAAsC,IACtC,OACA,CAEA,GAAI,GAAU,OAAS,E,IACrB,EAAK,G,OACN,2BAEI,IAAK,EAAoB,CAAQ,GACpC,IAAM,IAAyB,OAAe,IAAK,CAAC,GAAC,YAEjD,GAAc,CAAC,CAAW,EAAG,oB,KAEhC,C,QACC,CAAM,E,MACN,IAAM,I,OAEN,eAAc,+B,MACA,GAAa,IAAS,CAAC,IAAE,oB,UACvB,SAAgB,IAAY,AAAZ,IAAgB,IAAK,EAAK,IAAE,wB,gBACvD,gFAEF,C,IACD,EAAD,qB,WAAM,CAAI,KAAe,EAAE,iB,OAE3B,0L,gBAAM,a,QACL,YAAY,E,MACE,GAAgB,aAA4B,EAC1D,SAAG,GACJ,mDACF,2BACF,EAEG,MAAS,8DACP,EAAY,KAAe,OAAQ,yC,KAEtC,gI,MAGD,IAAI,cAAiB,CAAE,oC,SACf,IAAK,MAAc,QAAQ,A,QAElC,c,UACE,C,aAEF,2EAAU,IAAO,IAAE,mGAClB,GAAO,QAAiC,E,GACxC,GAAM,EAAC,MAAO,GAAQ,IAAC,YAAQ,aAAiB,yBAC9C,IAAK,GAAO,gBAAgB,cAAc,OAAO,EAAM,IAAC,mBAC1D,IAAG,qDACJ,qFACF,OAEU,KAAG,EACP,EACR,CAES,GAAa,EAAD,4FACb,mBAAgB,EACxB,EAED,MAAU,eAAwC,aAC5C,EAAM,iBAAY,EACtB,GACD,+BAED,C,eACc,CACb,mBAED,C,aACW,CAAC,EACV,IAAI,EAAC,EAAM,EAAG,CACd,eAAY,IACb,sTAED,IAAM,mBAAuC,CAAE,cACxC,MAEA,EADD,IAAM,EAAW,EAErB,GAAO,GAAK,oEACb,GAES,CAFT,sEAE0C,qBACnC,EAAc,SAAG,SAAwB,CAC3C,IAAc,EAAE,2EACb,IAAO,EAAmB,OAAE,oBAC7B,CACL,qBAEK,MAAiB,EAAmB,IAAuB,KAC7D,aAAgB,iCACd,EAAQ,OACZ,MAAK,KAAa,eAAe,QAAW,CAC7C,sBAEI,IAAK,EAAY,EAAW,SAC5B,GAAS,2BACd,CACD,WAED,GACE,IAAM,EAAO,Y,GACL,gHACN,cAAU,iBACV,eAAQ,+CACR,QAAa,c,GACb,aAAS,sF,eAET,CAAO,M,GACP,EAAgB,YAChB,UAAiB,E,uBAGV,O,GACP,kBAAU,Y,IACV,K,OACA,kBAAqB,iBACrB,MAAW,yBACX,UAAgB,gD,GAChB,uBAAW,I,uBAED,G,IACV,YACF,OAAI,GAAM,EAAK,WAAM,QACnB,SAAK,EAAQ,WAAM,A,iBAGhB,S,IACD,EAAC,6B,GACH,EAAO,CACR,oCAEI,SAAY,EACX,WAAQ,C,MACT,E,IACF,kDACA,eAEI,IAAK,kEACb,4EAEO,GAAY,6EACR,EAAO,SAAG,CAAQ,0CACvB,GAAQ,GAAW,oBACZ,wCACb,gDAED,IAAgB,qGACN,WAAgC,QAAQ,CAAC,CAAe,oBACjE,gCAED,GAAW,qGACD,eAAK,KAAa,4BAAE,KAAW,EAAK,CAAgB,GAAS,QAAE,OACxE,sCAED,SAAc,EACN,WAAW,CACb,EAAC,K,MAGH,EAAY,QAAS,I,EACnB,eAAc,G,kBAGT,CAAK,CAAI,CAAE,I,IAClB,E,MACc,MAAK,EAAc,EAAqB,GAAY,sB,GAClE,EAAG,CACJ,mEACM,MACR,sBAEQ,uCACK,IAAM,uCAEb,MAAU,EAAQ,IAAE,cAAc,MACjC,KAAI,iBAAgB,MAAgB,WAAO,gD,MAC5C,IAAe,cAAsB,CAAG,WAAU,I,OACpD,CACH,C,CAGF,mBAAC,KAED,MAAkB,oOAChB,KAAsB,CAElB,IAAC,EAAU,kBACb,OAAO,GAAG,6EACX,QAEK,WAAqC,EACrC,YAAc,CAER,OACJ,SAAW,KAAI,gBAAwB,CAEzC,aAAgB,EAClB,UAAY,EAAa,KAAO,MAAC,CAAO,CAAC,EAAE,6EACzC,YAAI,EAAc,IAAW,A,IAG/B,MAAG,C,CAEP,CAEA,MAAO,CACR,OAED,C,gBAGO,C,OACH,IAAO,cAAG,qF,6BAG2B,CACvC,OAAO,IAAI,CAAC,aAAU,EAAO,IAAE,cAAiB,uF,qBAGzC,C,WACH,cAAY,OAAa,cAAe,CAAC,WAAE,kM,sCAGxC,4F,EACD,qBAAC,E,GACJ,gKACH,IAAG,mB,CAGL,oBAAC,CAEa,IAAC,cAA2B,iF,0BAC9B,C,IACR,EAAI,EAAC,E,MACG,IAAW,cAAG,YAAuB,aAAa,GAAM,GAAmB,+I,OACjF,iBAAM,GAAa,OAAS,iBAAoB,sB,IAChD,EAAI,kBAAa,YAAb,YAAa,UAAb,kBAAyB,CAAD,WAAM,6B,OAChC,EAAK,C,IACN,sBACD,0CACE,EAAC,IAAY,GAClB,MAED,IAAC,EAAa,KAAW,WAEpB,GAAU,UAAE,iBAEf,C,GACA,E,IACA,EAAW,G,WACT,aAAM,CAAW,IAAC,CAAI,OAAE,K,IACzB,qHACF,eAEK,MAAgB,IAAG,CAAI,aAAa,EACpC,GAAS,SAAG,SAAK,GAAK,oBACpB,EAAC,IAAQ,IAAK,EAAgB,KAAK,EACzC,GAAK,CAAK,GAAa,E,kBAEnB,E,SACA,C,4BAGY,EAAU,CAAI,EAAwB,CAAQ,C,MAC9C,kBAAc,0B,OAC3B,E,IACD,mBAAmB,GAAU,EAAW,GAAW,oFACnD,IAAK,EAAc,EAAW,EAAC,+CAChC,qDACI,WAAa,CAAG,kBAAiB,YAClC,E,OAEH,6B,sBACI,C,IACL,EAAI,EAAC,E,GAEL,OAAK,OAAc,cAAa,AAAb,GAAc,gD,IAC/B,EAAc,IAAC,CAAI,aAAS,4B,EAC3B,iBACJ,iBACG,GAAC,EAAY,UAAG,CAAU,CAC/B,yBAE8B,qB,CACzB,OAAM,SAAU,CAAC,mBAAoB,qDACrC,IAAC,KAAQ,qBAAqB,kFAC9B,IAAC,MAAS,mBAAQ,mCAElB,IAAC,CAAI,cAAc,CAAC,aAAa,oDACnC,cAAC,qBAA0B,C,CAG7B,GAAI,SAAK,GAAQ,IAAK,cAAgB,AAAD,GAAM,KAAE,mC,IAC3C,EAAe,IAAC,cAAS,Y,SACtB,CAAD,mBAA6B,E,IAC9B,iE,GACD,IAAI,CAAC,KAAK,kBAAa,wGAChB,aAAY,K,IAClB,oBACG,SAAO,CAAI,EACb,OAAM,IAAK,KAAG,OAAQ,A,KAGhB,WAAC,CAAY,kBAAmB,YAAS,uC,OAC9C,iFAAM,uEACY,MAAc,8CACvB,IAAK,yD,MACL,EAAK,c,WACV,gB,IACJ,sD,YAIA,CAAD,oBAA8B,E,IAC/B,mG,QAGI,EAAmB,KAAU,yEACxB,yBAAoB,G,cAE/B,C,OAAM,4C,oBAGK,C,IACV,CAAC,UAAE,iBACJ,gEACG,EAAM,SAAW,YACtB,EAED,C,qBACoB,CACnB,4GAES,C,YACR,IAAI,EACJ,OAAM,gBAAY,KAAW,uBAAU,CAAG,kCAAK,KAAK,SAAuB,qB,iBAE9D,CACb,MAEA,MAAM,CACN,MAAM,OAA0B,mCAC5B,SAAQ,SAAW,CAAC,QAAM,C,mEAGX,C,oBAGX,GAAS,8D,aAEZ,C,OACF,a,uBAEW,C,MACV,E,QAEE,QAAQ,OAAS,CAAG,WAAU,AAAD,GAAO,iD,MACpC,UAAM,C,QACN,C,IACD,qF,EAED,EAAQ,K,QAER,C,YAEA,C,OACD,iB,IAAM,4B,IAEL,EAAU,GAAI,IAAC,mBAAe,C,uCAIpB,E,MACR,IAAS,KAAK,SAAS,Q,IACxB,8B,SAGF,CAEH,KAEA,KAAI,CAAC,eAAgB,IAAE,6DACrB,YAAY,WAAc,OACxB,CAAS,KACP,OACC,GAAU,IAAI,mDACb,MAAU,a,iBAKjB,C,UACC,OAAK,eAAO,OAAe,OAAK,GAAa,IAAC,oCAC/C,mF,UAID,C,IACE,aAAK,GAAW,KAAM,QAAC,SAAgB,AAAC,GAAU,EAAS,OAAK,IAAQ,WAAQ,CAAI,KAAQ,IAC5F,SAAQ,GAAM,CAAE,IAAC,wFACjB,YAAQ,EAAO,GAAG,kD,aA1pBd,CAAC,EAAa,CAAC,G,KACnB,IAAM,gBAAkB,qDACzB,0EACF,mCAEK,OAAc,E,0ECjGnB,oBAKD,oBAAC,CACD,MAAW,CACL,MAAC,EACL,CACF,CAEA,aAAc,CAAW,CACvB,OAAI,IAAK,SAAS,MAAQ,GAAM,IAAE,A,aAEjC,GACD,OAAK,aAAY,oC,eAEhB,G,IAAA,6DACD,MAAO,MAAK,SAAS,SAAU,CAAC,IAAE,wE,uBAEtB,C,OACT,yEACD,eAAa,8C,CAEjB,wBAAC,CAED,cAAoB,A,cAEhB,CAAO,CAAI,C,GACZ,uBACG,IAAM,oBAAgB,EACxB,aAAK,IAAoB,6BAC1B,yBAED,C,CAGF,sBAAC,GAED,WAAsB,UACpB,MAAO,SAAiB,GAAK,+CAC9B,iBAES,IAAa,EAAW,yCAC5B,IAAM,EAAS,MAAM,CAAE,gC,QAGtB,KAAW,WAAU,GAAE,GAAe,QAAQ,CAAG,EAAC,c,qBAEhD,CAAe,EAAa,CAAE,CAAC,E,IACrC,EACF,4FAES,WACR,IAEA,OAAM,GAAoB,mCAE1B,C,gBAEC,SAED,IAAK,EAAW,IAAM,CAAC,qBAAE,G,GACvB,EAAU,CACX,oCAEI,SAAW,EACd,WAAc,CAEd,MAAI,E,IACF,EAAiB,EAAM,8C,GACxB,Y,EAAM,kBACL,EAAS,SAAQ,CAAI,OAAC,uBACtB,KAAU,WAAa,+B,GACxB,uFACF,cAEI,EAAW,aAAY,EAC1B,OAAS,CAAC,4BAA4B,EACvC,WAEM,WAAU,CAClB,OAES,QAAoB,QAAoB,I,oBAChD,E,gBAEW,CAAI,EAAO,CAAM,CAAQ,EACpC,MAAoB,MAAK,EAAoB,EAAY,yBAEzD,GAAI,EAAC,OAAmB,IAAE,gCAAU,EACpC,YAAiB,CAClB,kGAES,UAAc,yBAAuD,EAC7E,YAAe,CAEf,GAAI,C,CA/FN,YAAY,CAAW,IACrB,KAAK,WAAoB,oB,QCNnB,GAyBR,OAAC,GAED,IAAO,I,sCACL,OAAM,gBAAc,GAAQ,CAAY,2BACxC,GAAM9kL,IAAM,KAAK,YAAQ,CAAO,EAAE,yHAClC,GAAI,IAAK,MAAW,WAAC,CAAW,UAAG,kGACjC,MAAK,QAAU,A,WAGT,E,MACF,EAAK,WAAQ,mB,WACd,6EAAM,wIACL,IAAK,YAAY,WAAY,CAACA,EAAI,GAAG60V,GAAQ,iDAC9C,Q,OAEJ,C,OAAM,U,WAEL,CAAK,E,oBAGD,GAAI,IAAC,YAAQ,8B,gCAGd,+C,UAEJ,GACD,IAAI,EACJ,OAAO,OAAK,gDACd,CAEA,cAAS,CAAqB,EAC5B,MACA,OAAM,OAAW,OAAQ,YAAS,kC,SAEhC,EAAK,C,IAGL,E,cACS,GAAK,gBAAY,KAAW,CAAC,EAAI,AAAH,GAAK,iB,eAE7C,G,aACC,OAAK,GAAU,gBAAkB,WAAU,MAAW,KAAM,IACzD,IAA2B,I,aAG5B,E,OACD,8U,gBAEO,CACV,OAAO,IAAI,CAAC,gBACd,CAEA,YAAI,CACF,OAAO,IAAI,CAAC,SAAM,KACpB,CAEA,cAAwB,C,4BAExB,mBAAC,CACD,OAAmB,yB,cACV,CACR,0BACD,C,mBACE,OAAO,cAAM,WAAY,AAC3B,CACA,UAAa,CAAC,C,MACZ,OAAO,MAAC,QAAK,GAAW,IAAC,UAAW,GAAoB,wBAAI,IAAK,2BAClE,cACD,G,MACE,EAAO,CACR,WACD,WAAc,SAAW,oC,CAEzB,OAAC,GACD,IAAU,EAAY,GACpB,OAAI,IAAK,SAAW,CAAC,IACnB,KAAO,EAAK,UAAW,IAAW,S,GACnC,C,QACC,C,IACD,yB,OAAU,EAAK,CACd,OAAO,CACR,S,WAAe,GACd,OAAO,CACR,a,MAAM,YAAS,EACd,OAAO,GACR,Q,MAAU,GACT,WAAY,GACb,QACD,WAAY,EACb,CAED,C,SACE,CACD,sDACD,C,YAtHE,CAAU,I,IACV,UAAQ,EACR,OAAO,EAAE,CACT,QACA,MAAM,EAAE,CACR,WAAY,EAAE,CACd,QAEM,WAAW,E,MACjB,YAAU,EACV,OAAQ,GACR,KAAK,CAAE,EACP,SACA,WAAQ,GACR,QACA,aACM,YAAgB,CAAE,+BAMxB,IAAI,CAAC,QAAO,CAAG,C,EAmGjB,iBAAY,G,OAIV,CAAO,CAAK,CACb,2CACD,IAAW,OACF,KAAK,EACb,YACD,SAAgB,EACd,CACD,6BAEQ,IAA+C,Q,kEAC/C,EAAO,MAAK,IAAS,qBAAQ,EAAO,EAAC,aACzC,GAAQ,KAAR,GAAQ,QAAR,MAAQ,GAEH,EAAK,MAAK,CAAI,CAAS,C,GACzB,eAAO,Q,CAEX,OACA,IACJ,CAEA,SAA6C,GAC3C,GAAI,eAAa,GAAsB,wBACnC,IAAC,EAASA,EAAU,qCACtB,KAAI,WAAU,QAAM,KAClB,eAAgB,GAAO,QAAC,iEACxB,EAAY,oGACb,cACD,OAAO,WAAM,iCACf,CACA,OAAO,IACT,CAEA,iBAA+C,CAC7C,OAAM,eAAc,A,QAElB,C,cACE,eAAoB,GAAO,A,UAE5B,CACH,gBAAO,IAAc,CAAC,eACxB,C,aA3CS,CACR,sCACD,C,OCnIE,WACE,G,eACC,CAAc,EAAQ,CAAK,CAE9B,IAAM,EAAc,KAElB,UAAS,CAET,UAFS,GAA2B,UAAe,EACnD,QACA,uDAEF,OAAO,KAAK,CAAC,eAAewB,EAAWC,EAAUR,EACnD,CAEA,SAAO,CACL,KAAK,CAAC,SACR,C,qBCmiBA,IAAQ,IAER,KAliBiD,CACjD,MAAO,CACL,QAAS,GACT,OAAQ,GACR,MAAO,EACP,MAAO,CACL,SAAU,GACV,KAAM,UACN,WAAY,SACZ,YAAa,C,GAGjB,KAAM,CACJ,QAAS,GACT,OAAQ,GACR,eAAgB,GAChB,OAAQ,EACR,MAAO,CACL,UAAW,EACX,OAAQ,UACR,cAAe,C,GAGnB,QAAS,CACP,QAAS,GACT,OAAQ,GACR,MAAO,EACP,OAAQ,EACR,MAAO,CACL,UAAW,EACX,OAAQ,UACR,cAAe,C,GAGnB,KAAM,CACJ,QAAS,GACT,MAAO,CACL,UAAW,EACX,OAAQ,UACR,cAAe,C,GAGnB,MAAO,EAAE,CACT,MAAO,CACJ,EAAI,EACH,GACJ,EACA,KAEI,MACJ,EAAO,C,WAifP,WA7eI,C,aAEA,E,QACA,KAAa,EAAC,G,UACf,CACG,SAAS,GACd,eACM,oBACL,YAAa,CACb,EACA,KAAK,O,iBAGC,CAAE,E,OACN,G,MACA,E,MACD,CACF,YACK,eACJ,WAAa,SACb,YAAa,CACb,C,OAEA,C,QACE,G,OACA,G,eACA,CAAa,E,OACd,EACF,OACM,UAAE,EACP,OAAS,UACT,cAAa,CACb,C,UAEK,C,QACH,G,OACA,G,MACA,E,OACD,EACF,OACK,YACJ,OAAS,UACT,cAAO,C,iBAIN,GACF,OACM,UAAE,EACT,OAAa,UACL,cAAa,CACrB,CACA,EACA,MAAM,EAAE,CACR,WAAI,EACJ,SAAI,UACJ,WAEF,YAAuD,EACrD,OAAO,CACL,IACD,GACD,EAEF,EAAM,EACJ,G,EA8aA,KA7aE,C,MACD,CACD,gBAEF,C,EA2aE,WA1aQ,CACR,MAAO,CACL,OAAO,S,GA0aT,eAxaa,C,OACT,W,aAEA,Q,MACD,GACF,WACK,YACJ,WAAY,OACZ,KAAU,SACV,C,iBAGI,G,SACA,G,MACD,CACD,MAAO,E,MACL,C,KACE,G,OACD,S,uBAGS,CACR,W,EAEH,YACF,eACM,iBACG,cACR,C,gBAIC,EACD,MAAO,CACL,Y,KACE,Q,OACD,S,uBAGY,CACZ,WACF,EACF,YACM,eACL,YAAiB,EACjB,C,qBAIC,GACD,MAAO,CACL,Y,KACE,O,OACD,S,uBAGA,CACF,WACF,EACD,WAAY,CACH,cACL,C,cAGA,C,cAEM,S,QAEN,C,cACa,CACX,YAAY,GACb,WACF,EACF,iBACW,eACZ,KAAgB,MACV,CACJ,C,QAED,GACD,eAAa,CACb,KAAS,GACP,KAAM,OACN,OAAQ,S,UAEH,G,QACN,CACF,MACO,OAAM,EACP,OACL,MAAS,CACT,C,2BAIE,G,QACD,CACF,OACU,OACH,EACR,MAAY,CACZ,CACA,E,MACE,G,OACE,G,WACI,W,iBACK,G,OACT,C,6BAIC,CACF,eACF,iBACD,mBAEI,CACJ,E,EAoTA,YAnTW,C,MACT,CACD,WACD,KAAU,EACV,EACA,SAAS,CACT,oBACA,UAAW,I,WACT,E,UACD,CACD,cAEF,C,aACS,C,MACL,CACA,QAAQ,GACT,OACD,E,WACQ,CACP,WACD,EACA,OAAO,aACP,eACA,UAAU,IACV,WAAM,EACN,IAAK,EACL,IAAK,EACL,WAEF,E,cAAmB,CACjB,MAAO,CACJ,EAAI,EACP,GAEF,EACE,IAAK,CACF,EAAI,EACP,G,iBAEY,C,MACX,CACD,IAEI,GACJ,EACA,KACA,IACA,GACA,EAEF,UAAM,CACJ,MAAW,GACX,OAAW,EACX,C,kBACiB,CACjB,QAEI,IACJ,EAAM,CACN,EACA,WACA,WAAU,EACV,SAAQ,S,kBACR,CAEF,OAAY,CACV,EAAM,EACN,GACA,EACA,W,WACE,E,SA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"} \ No newline at end of file +{"version":3,"file":"main.js","sources":["webpack://dsv/../src/source-map-tree.ts","webpack://dsv/../src/build-source-map-tree.ts","webpack://dsv/../src/source-map.ts","webpack://dsv/../src/remapping.ts","webpack://dsv/../src/sourcemap-segment.ts","webpack://dsv/../src/gen-mapping.ts","webpack://dsv/../src/resolve-uri.ts","webpack://dsv/../src/set-array.ts","webpack://dsv/../src/vlq.ts","webpack://dsv/../src/strings.ts","webpack://dsv/../src/scopes.ts","webpack://dsv/../src/sourcemap-codec.ts","webpack://dsv/../src/resolve.ts","webpack://dsv/../src/strip-filename.ts","webpack://dsv/../src/sort.ts","webpack://dsv/../src/binary-search.ts","webpack://dsv/../src/by-source.ts","webpack://dsv/../src/any-map.ts","webpack://dsv/../src/trace-mapping.ts","webpack://dsv/../../node_modules/.pnpm/assert@2.1.0/node_modules/assert/build/assert.js","webpack://dsv/../../node_modules/.pnpm/assert@2.1.0/node_modules/assert/build/internal/assert/assertion_error.js","webpack://dsv/../../node_modules/.pnpm/assert@2.1.0/node_modules/assert/build/internal/errors.js","webpack://dsv/../../node_modules/.pnpm/assert@2.1.0/node_modules/assert/build/internal/util/comparisons.js","webpack://dsv/../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","webpack://dsv/../../node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/browser.js","webpack://dsv/../../node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/error.js","webpack://dsv/../../node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/index.js","webpack://dsv/../../node_modules/.pnpm/browserslist@4.24.4/node_modules/browserslist/parse.js","webpack://dsv/../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/actualApply.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/applyBind.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/functionApply.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/functionCall.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/index.js","webpack://dsv/../../node_modules/.pnpm/call-bind-apply-helpers@1.0.1/node_modules/call-bind-apply-helpers/reflectApply.js","webpack://dsv/../../node_modules/.pnpm/call-bind@1.0.8/node_modules/call-bind/callBound.js","webpack://dsv/../../node_modules/.pnpm/call-bind@1.0.8/node_modules/call-bind/index.js","webpack://dsv/../../node_modules/.pnpm/call-bound@1.0.3/node_modules/call-bound/index.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/data/agents.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/data/browserVersions.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/data/browsers.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/dist/unpacker/agents.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/dist/unpacker/browserVersions.js","webpack://dsv/../../node_modules/.pnpm/caniuse-lite@1.0.30001697/node_modules/caniuse-lite/dist/unpacker/browsers.js","webpack://dsv/../../node_modules/.pnpm/convert-source-map@2.0.0/node_modules/convert-source-map/index.js","webpack://dsv/../../node_modules/.pnpm/cssfontparser@1.2.1/node_modules/cssfontparser/index.js","webpack://dsv/../../node_modules/.pnpm/debug@4.4.0/node_modules/debug/src/browser.js","webpack://dsv/../../node_modules/.pnpm/debug@4.4.0/node_modules/debug/src/common.js","webpack://dsv/../../node_modules/.pnpm/define-data-property@1.1.4/node_modules/define-data-property/index.js","webpack://dsv/../../node_modules/.pnpm/define-properties@1.2.1/node_modules/define-properties/index.js","webpack://dsv/../../node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto/get.js","webpack://dsv/../../node_modules/.pnpm/electron-to-chromium@1.5.92/node_modules/electron-to-chromium/versions.js","webpack://dsv/../../node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property/index.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js","webpack://dsv/../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js","webpack://dsv/../../node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms/index.js","webpack://dsv/../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js","webpack://dsv/../../node_modules/.pnpm/for-each@0.3.4/node_modules/for-each/index.js","webpack://dsv/../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js","webpack://dsv/../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js","webpack://dsv/../../node_modules/.pnpm/gensync@1.0.0-beta.2/node_modules/gensync/index.js","webpack://dsv/../../node_modules/.pnpm/get-intrinsic@1.2.7/node_modules/get-intrinsic/index.js","webpack://dsv/../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Object.getPrototypeOf.js","webpack://dsv/../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Reflect.getPrototypeOf.js","webpack://dsv/../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/index.js","webpack://dsv/../../node_modules/.pnpm/gifuct-js@2.1.2/node_modules/gifuct-js/lib/deinterlace.js","webpack://dsv/../../node_modules/.pnpm/gifuct-js@2.1.2/node_modules/gifuct-js/lib/index.js","webpack://dsv/../../node_modules/.pnpm/gifuct-js@2.1.2/node_modules/gifuct-js/lib/lzw.js","webpack://dsv/../../node_modules/.pnpm/globals@11.12.0/node_modules/globals/index.js","webpack://dsv/../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/gOPD.js","webpack://dsv/../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/index.js","webpack://dsv/../../node_modules/.pnpm/has-property-descriptors@1.0.2/node_modules/has-property-descriptors/index.js","webpack://dsv/../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/index.js","webpack://dsv/../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/shams.js","webpack://dsv/../../node_modules/.pnpm/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js","webpack://dsv/../../node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/index.js","webpack://dsv/../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","webpack://dsv/../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js","webpack://dsv/../../node_modules/.pnpm/is-arguments@1.2.0/node_modules/is-arguments/index.js","webpack://dsv/../../node_modules/.pnpm/is-callable@1.2.7/node_modules/is-callable/index.js","webpack://dsv/../../node_modules/.pnpm/is-generator-function@1.1.0/node_modules/is-generator-function/index.js","webpack://dsv/../../node_modules/.pnpm/is-nan@1.3.2/node_modules/is-nan/implementation.js","webpack://dsv/../../node_modules/.pnpm/is-nan@1.3.2/node_modules/is-nan/index.js","webpack://dsv/../../node_modules/.pnpm/is-nan@1.3.2/node_modules/is-nan/polyfill.js","webpack://dsv/../../node_modules/.pnpm/is-nan@1.3.2/node_modules/is-nan/shim.js","webpack://dsv/../../node_modules/.pnpm/is-regex@1.2.1/node_modules/is-regex/index.js","webpack://dsv/../../node_modules/.pnpm/is-typed-array@1.1.15/node_modules/is-typed-array/index.js","webpack://dsv/../../node_modules/.pnpm/js-binary-schema-parser@2.0.3/node_modules/js-binary-schema-parser/lib/index.js","webpack://dsv/../../node_modules/.pnpm/js-binary-schema-parser@2.0.3/node_modules/js-binary-schema-parser/lib/parsers/uint8.js","webpack://dsv/../../node_modules/.pnpm/js-binary-schema-parser@2.0.3/node_modules/js-binary-schema-parser/lib/schemas/gif.js","webpack://dsv/../../node_modules/.pnpm/js-tokens@4.0.0/node_modules/js-tokens/index.js","webpack://dsv/../../node_modules/.pnpm/jsesc@3.1.0/node_modules/jsesc/jsesc.js","webpack://dsv/../../node_modules/.pnpm/lottie-web@5.12.2/node_modules/lottie-web/build/player/lottie.js","webpack://dsv/../../node_modules/.pnpm/lru-cache@5.1.1/node_modules/lru-cache/index.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/abs.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/floor.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/isNaN.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/max.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/min.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/pow.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/round.js","webpack://dsv/../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/sign.js","webpack://dsv/../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","webpack://dsv/../../node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/implementation.js","webpack://dsv/../../node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/index.js","webpack://dsv/../../node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/polyfill.js","webpack://dsv/../../node_modules/.pnpm/object-is@1.1.6/node_modules/object-is/shim.js","webpack://dsv/../../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js","webpack://dsv/../../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js","webpack://dsv/../../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js","webpack://dsv/../../node_modules/.pnpm/object.assign@4.1.7/node_modules/object.assign/implementation.js","webpack://dsv/../../node_modules/.pnpm/object.assign@4.1.7/node_modules/object.assign/polyfill.js","webpack://dsv/../../node_modules/.pnpm/path-browserify@1.0.1/node_modules/path-browserify/index.js","webpack://dsv/../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.browser.js","webpack://dsv/../../node_modules/.pnpm/possible-typed-array-names@1.0.0/node_modules/possible-typed-array-names/index.js","webpack://dsv/../../node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js","webpack://dsv/../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js","webpack://dsv/../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js","webpack://dsv/../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/index.js","webpack://dsv/../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://dsv/../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js","webpack://dsv/../../node_modules/.pnpm/react@18.3.1/node_modules/react/index.js","webpack://dsv/../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","webpack://dsv/../../node_modules/.pnpm/safe-regex-test@1.1.0/node_modules/safe-regex-test/index.js","webpack://dsv/../../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js","webpack://dsv/../../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js","webpack://dsv/../../node_modules/.pnpm/semver@6.3.1/node_modules/semver/semver.js","webpack://dsv/../../node_modules/.pnpm/set-function-length@1.2.2/node_modules/set-function-length/index.js","webpack://dsv/../../node_modules/.pnpm/simplify-geojson@1.0.5/node_modules/simplify-geojson/index.js","webpack://dsv/../../node_modules/.pnpm/simplify-geometry@0.0.2/node_modules/simplify-geometry/lib/index.js","webpack://dsv/../../node_modules/.pnpm/simplify-geometry@0.0.2/node_modules/simplify-geometry/lib/line.js","webpack://dsv/../../node_modules/.pnpm/util@0.12.5/node_modules/util/support/isBufferBrowser.js","webpack://dsv/../../node_modules/.pnpm/util@0.12.5/node_modules/util/support/types.js","webpack://dsv/../../node_modules/.pnpm/util@0.12.5/node_modules/util/util.js","webpack://dsv/../../node_modules/.pnpm/which-typed-array@1.1.18/node_modules/which-typed-array/index.js","webpack://dsv/../../node_modules/.pnpm/yallist@3.1.1/node_modules/yallist/iterator.js","webpack://dsv/../../node_modules/.pnpm/yallist@3.1.1/node_modules/yallist/yallist.js","webpack://dsv/../../src/algorithm/algorithm.ts","webpack://dsv/../../src/algorithm/index.ts","webpack://dsv/../../../src/data-structures/array-bar/array-bar.ts","webpack://dsv/../../../src/data-structures/array-bar/index.ts","webpack://dsv/../../src/data-structures/index.ts","webpack://dsv/../src/index.ts","webpack://dsv/../../../src/data-structures/array/array-proxy.ts","webpack://dsv/../../../src/data-structures/array/array-visitor.ts","webpack://dsv/../../src/execute/executeCode.ts","webpack://dsv/../../src/transform/transformCode.ts","webpack://dsv/../../src/utils/uuid.ts","webpack://dsv/../../src/builder/index.ts","webpack://dsv/../../src/types/index.ts","webpack://dsv/../../src/types/schema.ts","webpack://dsv/../src/withLog.ts","webpack://dsv/../../node_modules/.pnpm/@babel+core@7.26.7/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs","webpack://dsv/../src/highlight.ts","webpack://dsv/../src/defs.ts","webpack://dsv/../../node_modules/.pnpm/@babel+compat-data@7.26.5/node_modules/@babel/compat-data/native-modules.js","webpack://dsv/../../node_modules/.pnpm/@babel+compat-data@7.26.5/node_modules/@babel/compat-data/plugins.js","webpack://dsv/../../src/config/caching.ts","webpack://dsv/../../src/config/config-chain.ts","webpack://dsv/../../src/config/config-descriptors.ts","webpack://dsv/../../../src/config/files/index-browser.ts","webpack://dsv/../../src/config/full.ts","webpack://dsv/../../../src/config/helpers/config-api.ts","webpack://dsv/../../../src/config/helpers/deep-array.ts","webpack://dsv/../../../src/config/helpers/environment.ts","webpack://dsv/../../src/config/index.ts","webpack://dsv/../../src/config/item.ts","webpack://dsv/../../src/config/partial.ts","webpack://dsv/../../src/config/pattern-to-regex.ts","webpack://dsv/../../src/config/plugin.ts","webpack://dsv/../../src/config/printer.ts","webpack://dsv/../../src/config/resolve-targets-browser.ts","webpack://dsv/../../src/config/util.ts","webpack://dsv/../../../src/config/validation/option-assertions.ts","webpack://dsv/../../../src/config/validation/options.ts","webpack://dsv/../../../src/config/validation/plugins.ts","webpack://dsv/../../../src/config/validation/removed.ts","webpack://dsv/../../src/errors/config-error.ts","webpack://dsv/../../src/errors/rewrite-stack-trace.ts","webpack://dsv/../../src/gensync-utils/async.ts","webpack://dsv/../../src/gensync-utils/functional.ts","webpack://dsv/../src/parse.ts","webpack://dsv/../../src/parser/index.ts","webpack://dsv/../../../src/parser/util/missing-plugin-helper.ts","webpack://dsv/../../src/tools/build-external-helpers.ts","webpack://dsv/../src/transform-ast.ts","webpack://dsv/../src/transform-file-browser.ts","webpack://dsv/../src/transform.ts","webpack://dsv/../../src/transformation/block-hoist-plugin.ts","webpack://dsv/../../../src/transformation/file/file.ts","webpack://dsv/../../../src/transformation/file/generate.ts","webpack://dsv/../../../src/transformation/file/merge-map.ts","webpack://dsv/../../src/transformation/index.ts","webpack://dsv/../../src/transformation/normalize-file.ts","webpack://dsv/../../src/transformation/normalize-opts.ts","webpack://dsv/../../src/transformation/plugin-pass.ts","webpack://dsv/../../../src/transformation/util/clone-deep.ts","webpack://dsv/../src/buffer.ts","webpack://dsv/../../src/generators/base.ts","webpack://dsv/../../src/generators/classes.ts","webpack://dsv/../../src/generators/deprecated.ts","webpack://dsv/../../src/generators/expressions.ts","webpack://dsv/../../src/generators/flow.ts","webpack://dsv/../../src/generators/index.ts","webpack://dsv/../../src/generators/jsx.ts","webpack://dsv/../../src/generators/methods.ts","webpack://dsv/../../src/generators/modules.ts","webpack://dsv/../../src/generators/statements.ts","webpack://dsv/../../src/generators/template-literals.ts","webpack://dsv/../../src/generators/types.ts","webpack://dsv/../../src/generators/typescript.ts","webpack://dsv/../../src/node/index.ts","webpack://dsv/../../src/node/parentheses.ts","webpack://dsv/../../src/node/whitespace.ts","webpack://dsv/../src/printer.ts","webpack://dsv/../src/token-map.ts","webpack://dsv/../src/debug.ts","webpack://dsv/../src/filter-items.ts","webpack://dsv/../src/options.ts","webpack://dsv/../src/pretty.ts","webpack://dsv/../src/targets.ts","webpack://dsv/../src/utils.ts","webpack://dsv/../src/import-builder.ts","webpack://dsv/../src/import-injector.ts","webpack://dsv/../src/is-module.ts","webpack://dsv/../src/dynamic-import.ts","webpack://dsv/../src/get-module-name.ts","webpack://dsv/../src/lazy-modules.ts","webpack://dsv/../src/normalize-and-load-metadata.ts","webpack://dsv/../src/rewrite-live-references.ts","webpack://dsv/../src/rewrite-this.ts","webpack://dsv/../src/identifier.ts","webpack://dsv/../src/keyword.ts","webpack://dsv/../src/find-suggestion.ts","webpack://dsv/../src/validator.ts","webpack://dsv/../src/helpers-generated.ts","webpack://dsv/../src/util/location.ts","webpack://dsv/../src/parse-error/module-errors.ts","webpack://dsv/../src/parse-error/to-node-description.ts","webpack://dsv/../src/parse-error/standard-errors.ts","webpack://dsv/../src/parse-error/strict-mode-errors.ts","webpack://dsv/../src/parse-error/pipeline-operator-errors.ts","webpack://dsv/../src/parse-error.ts","webpack://dsv/../src/plugins/estree.ts","webpack://dsv/../src/tokenizer/context.ts","webpack://dsv/../src/tokenizer/types.ts","webpack://dsv/../../babel-helper-validator-identifier/src/identifier.ts","webpack://dsv/../../babel-helper-validator-identifier/src/keyword.ts","webpack://dsv/../src/util/identifier.ts","webpack://dsv/../src/util/scope.ts","webpack://dsv/../src/plugins/flow/scope.ts","webpack://dsv/../src/parser/base.ts","webpack://dsv/../src/parser/comments.ts","webpack://dsv/../src/util/whitespace.ts","webpack://dsv/../src/tokenizer/state.ts","webpack://dsv/../../babel-helper-string-parser/src/index.ts","webpack://dsv/../src/tokenizer/index.ts","webpack://dsv/../src/util/class-scope.ts","webpack://dsv/../src/util/expression-scope.ts","webpack://dsv/../src/util/production-parameter.ts","webpack://dsv/../src/parser/util.ts","webpack://dsv/../src/parser/node.ts","webpack://dsv/../src/plugins/flow/index.ts","webpack://dsv/../src/plugins/jsx/xhtml.ts","webpack://dsv/../src/plugins/jsx/index.ts","webpack://dsv/../src/plugins/typescript/scope.ts","webpack://dsv/../src/parser/lval.ts","webpack://dsv/../src/plugins/typescript/index.ts","webpack://dsv/../src/plugins/placeholders.ts","webpack://dsv/../src/plugin-utils.ts","webpack://dsv/../src/plugins/v8intrinsic.ts","webpack://dsv/../src/parser/expression.ts","webpack://dsv/../src/parser/statement.ts","webpack://dsv/../src/parser/index.ts","webpack://dsv/../src/builder.ts","webpack://dsv/../src/formatters.ts","webpack://dsv/../src/literal.ts","webpack://dsv/../src/populate.ts","webpack://dsv/../src/string.ts","webpack://dsv/../src/cache.ts","webpack://dsv/../src/context.ts","webpack://dsv/../src/hub.ts","webpack://dsv/../../src/path/ancestry.ts","webpack://dsv/../../src/path/comments.ts","webpack://dsv/../../src/path/context.ts","webpack://dsv/../../src/path/conversion.ts","webpack://dsv/../../src/path/evaluation.ts","webpack://dsv/../../src/path/family.ts","webpack://dsv/../../src/path/index.ts","webpack://dsv/../../../src/path/inference/index.ts","webpack://dsv/../../../src/path/inference/inferer-reference.ts","webpack://dsv/../../../src/path/inference/inferers.ts","webpack://dsv/../../../src/path/inference/util.ts","webpack://dsv/../../src/path/introspection.ts","webpack://dsv/../../../src/path/lib/hoister.ts","webpack://dsv/../../../src/path/lib/removal-hooks.ts","webpack://dsv/../../../src/path/lib/virtual-types-validator.ts","webpack://dsv/../../../src/path/lib/virtual-types.ts","webpack://dsv/../../src/path/modification.ts","webpack://dsv/../../src/path/removal.ts","webpack://dsv/../../src/path/replacement.ts","webpack://dsv/../../src/scope/binding.ts","webpack://dsv/../../src/scope/index.ts","webpack://dsv/../../../src/scope/lib/renamer.ts","webpack://dsv/../src/traverse-node.ts","webpack://dsv/../src/visitors.ts","webpack://dsv/../../src/asserts/assertNode.ts","webpack://dsv/../../../src/asserts/generated/index.ts","webpack://dsv/../../../src/builders/flow/createFlowUnionType.ts","webpack://dsv/../../../src/builders/flow/createTypeAnnotationBasedOnTypeof.ts","webpack://dsv/../../../src/builders/generated/index.ts","webpack://dsv/../../../src/builders/generated/uppercase.js","webpack://dsv/../../src/builders/productions.ts","webpack://dsv/../../../src/builders/react/buildChildren.ts","webpack://dsv/../../../src/builders/typescript/createTSUnionType.ts","webpack://dsv/../../src/clone/clone.ts","webpack://dsv/../../src/clone/cloneDeep.ts","webpack://dsv/../../src/clone/cloneDeepWithoutLoc.ts","webpack://dsv/../../src/clone/cloneNode.ts","webpack://dsv/../../src/clone/cloneWithoutLoc.ts","webpack://dsv/../../src/comments/addComment.ts","webpack://dsv/../../src/comments/addComments.ts","webpack://dsv/../../src/comments/inheritInnerComments.ts","webpack://dsv/../../src/comments/inheritLeadingComments.ts","webpack://dsv/../../src/comments/inheritTrailingComments.ts","webpack://dsv/../../src/comments/inheritsComments.ts","webpack://dsv/../../src/comments/removeComments.ts","webpack://dsv/../../../src/constants/generated/index.ts","webpack://dsv/../../src/constants/index.ts","webpack://dsv/../../src/converters/ensureBlock.ts","webpack://dsv/../../src/converters/gatherSequenceExpressions.ts","webpack://dsv/../../src/converters/toBindingIdentifierName.ts","webpack://dsv/../../src/converters/toBlock.ts","webpack://dsv/../../src/converters/toComputedKey.ts","webpack://dsv/../../src/converters/toExpression.ts","webpack://dsv/../../src/converters/toIdentifier.ts","webpack://dsv/../../src/converters/toKeyAlias.ts","webpack://dsv/../../src/converters/toSequenceExpression.ts","webpack://dsv/../../src/converters/toStatement.ts","webpack://dsv/../../src/converters/valueToNode.ts","webpack://dsv/../../src/definitions/core.ts","webpack://dsv/../../src/definitions/deprecated-aliases.ts","webpack://dsv/../../src/definitions/experimental.ts","webpack://dsv/../../src/definitions/flow.ts","webpack://dsv/../../src/definitions/index.ts","webpack://dsv/../../src/definitions/jsx.ts","webpack://dsv/../../src/definitions/misc.ts","webpack://dsv/../../src/definitions/placeholders.ts","webpack://dsv/../../src/definitions/typescript.ts","webpack://dsv/../../src/definitions/utils.ts","webpack://dsv/../../src/modifications/appendToMemberExpression.ts","webpack://dsv/../../../src/modifications/flow/removeTypeDuplicates.ts","webpack://dsv/../../src/modifications/inherits.ts","webpack://dsv/../../src/modifications/prependToMemberExpression.ts","webpack://dsv/../../src/modifications/removeProperties.ts","webpack://dsv/../../src/modifications/removePropertiesDeep.ts","webpack://dsv/../../../src/modifications/typescript/removeTypeDuplicates.ts","webpack://dsv/../../src/retrievers/getAssignmentIdentifiers.ts","webpack://dsv/../../src/retrievers/getBindingIdentifiers.ts","webpack://dsv/../../src/retrievers/getFunctionName.ts","webpack://dsv/../../src/retrievers/getOuterBindingIdentifiers.ts","webpack://dsv/../../src/traverse/traverse.ts","webpack://dsv/../../src/traverse/traverseFast.ts","webpack://dsv/../../src/utils/deprecationWarning.ts","webpack://dsv/../../src/utils/inherit.ts","webpack://dsv/../../../src/utils/react/cleanJSXElementLiteralChild.ts","webpack://dsv/../../src/utils/shallowEqual.ts","webpack://dsv/../../src/validators/buildMatchMemberExpression.ts","webpack://dsv/../../../src/validators/generated/index.ts","webpack://dsv/../../src/validators/is.ts","webpack://dsv/../../src/validators/isBinding.ts","webpack://dsv/../../src/validators/isBlockScoped.ts","webpack://dsv/../../src/validators/isImmutable.ts","webpack://dsv/../../src/validators/isLet.ts","webpack://dsv/../../src/validators/isNode.ts","webpack://dsv/../../src/validators/isNodesEquivalent.ts","webpack://dsv/../../src/validators/isPlaceholderType.ts","webpack://dsv/../../src/validators/isReferenced.ts","webpack://dsv/../../src/validators/isScope.ts","webpack://dsv/../../src/validators/isSpecifierDefault.ts","webpack://dsv/../../src/validators/isType.ts","webpack://dsv/../../src/validators/isValidES3Identifier.ts","webpack://dsv/../../src/validators/isValidIdentifier.ts","webpack://dsv/../../src/validators/isVar.ts","webpack://dsv/../../src/validators/matchesPattern.ts","webpack://dsv/../../../src/validators/react/isCompatTag.ts","webpack://dsv/../../../src/validators/react/isReactComponent.ts","webpack://dsv/../../src/validators/validate.ts","webpack://dsv/../../node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToNumber.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createMathOperation.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/add.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toFinite.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toInteger.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/after.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_metaMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createCtor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBind.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_composeArgs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_composeArgsRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_countHolders.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLodash.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_LazyWrapper.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_realNames.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getFuncName.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_LodashWrapper.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_wrapperClone.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrapperLodash.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isLaziable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getWrapDetails.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_insertWrapDetails.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_updateWrapDetails.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setWrapToString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRecurry.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getHolder.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_reorder.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_replaceHolders.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createHybrid.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createCurry.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createPartial.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mergeData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createWrap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/ary.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assign.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assignIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assignInWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assignWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/get.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/at.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isError.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/attempt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/before.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/bind.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/bindAll.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/bindKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castSlice.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasUnicode.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_asciiToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unicodeToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createCaseFirst.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/upperFirst.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/capitalize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayReduce.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_deburrLetter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/deburr.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_asciiWords.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasUnicodeWord.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unicodeWords.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/words.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createCompounder.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/camelCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/castArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRound.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/ceil.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/chain.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/chunk.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClamp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/clamp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/clone.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeepWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/commit.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/compact.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/concat.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMatch.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isStrictComparable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMatchData.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_matchesStrictComparable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatches.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHasIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasPath.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/hasIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatchesProperty.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/property.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cond.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseConformsTo.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseConforms.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/conforms.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/conformsTo.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayAggregator.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseEach.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEach.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAggregator.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAggregator.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/countBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/create.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/curry.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/curryRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/debounce.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaultTo.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaults.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignMergeValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_safeGet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPlainObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMergeDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMerge.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customDefaultsMerge.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mergeWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaultsDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseDelay.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/delay.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseDifference.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/difference.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/differenceBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/differenceWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/divide.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/drop.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/dropRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseWhile.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/dropRightWhile.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/dropWhile.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEachRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwnRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEachRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEachRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/endsWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToPairs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToPairs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createToPairs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPairs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPairsIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_escapeHtmlChar.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/escape.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/escapeRegExp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEvery.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEvery.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/every.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toLength.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFill.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/fill.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFilter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFind.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/find.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findLastIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findLast.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findLastKey.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/head.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/map.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatMapDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatMapDepth.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flattenDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flattenDepth.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flip.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/floor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFlow.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flow.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flowRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forInRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forOwn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forOwnRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/fromPairs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFunctions.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/functions.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/functionsIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/groupBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRelationalOperation.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/gt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/gte.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHas.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseInRange.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/inRange.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseValues.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/includes.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/indexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/initial.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIntersection.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castArrayLikeObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/intersection.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/intersectionBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/intersectionWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseInverter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createInverter.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/invert.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/invertBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_parent.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseInvoke.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/invoke.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/invokeMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArrayBuffer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayBuffer.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBoolean.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsDate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isDate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isElement.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEmpty.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqual.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqualWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFinite.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isInteger.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMatch.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMatchWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNumber.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNaN.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMaskable.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNative.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNil.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isNull.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsRegExp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isRegExp.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSafeInteger.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isWeakMap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isWeakSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/iteratee.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/join.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/kebabCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keyBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictLastIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lastIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lowerCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lowerFirst.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lte.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mapKeys.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mapValues.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/matches.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/matchesProperty.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseExtremum.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/max.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/maxBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSum.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMean.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mean.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/meanBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/method.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/methodOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/min.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/minBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mixin.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/multiply.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/negate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_iteratorToArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toArray.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/next.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseNth.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/nth.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/nthArg.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnset.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customOmitClone.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePickBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pickBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omitBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/once.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareAscending.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareMultiple.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseOrderBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/orderBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createOver.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/over.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/overArgs.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castRest.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/overEvery.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/overSome.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRepeat.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_asciiSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unicodeSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createPadding.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pad.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/padEnd.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/padStart.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/parseInt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/partial.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/partialRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/partition.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePick.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pick.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/plant.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/propertyOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOfWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePullAll.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pullAll.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pull.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pullAllBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pullAllWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePullAt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pullAt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRandom.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/random.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRange.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRange.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/range.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/rangeRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/rearg.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseReduce.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayReduceRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduceRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/remove.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/repeat.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/replace.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/rest.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/result.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reverse.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/round.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySample.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSample.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sample.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shuffleSelf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySampleSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSampleSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sampleSize.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/set.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/setWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayShuffle.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseShuffle.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/shuffle.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/size.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/slice.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/snakeCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSome.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/some.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortedIndexBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortedIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedIndexBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedLastIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedLastIndexBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedLastIndexOf.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortedUniq.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedUniq.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortedUniqBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/split.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/spread.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/startCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/startsWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubString.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubTrue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/subtract.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sum.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sumBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/tail.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/take.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/takeRight.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/takeRightWhile.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/takeWhile.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/tap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customDefaultsAssignIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_escapeStringChar.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_reInterpolate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/templateSettings.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_reEscape.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_reEvaluate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/template.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/throttle.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/thru.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/times.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toIterator.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseWrapperValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrapperValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toLower.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPath.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toSafeInteger.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toUpper.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/transform.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_charsEndIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_charsStartIndex.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/trim.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/trimEnd.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/trimStart.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/truncate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unary.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unescapeHtmlChar.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unescape.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/union.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unionBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unionWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniq.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unset.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unzip.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/unzipWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUpdate.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/update.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/updateWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/upperCase.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/valuesIn.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/without.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrap.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrapperAt.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrapperChain.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/wrapperReverse.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseXor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/xor.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/xorBy.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/xorWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zip.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseZipObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipObject.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipObjectDeep.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipWith.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/array.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/collection.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/date.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/function.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lang.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/math.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/number.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/object.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/seq.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/string.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/util.default.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_lazyClone.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_lazyReverse.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getView.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_lazyValue.js","webpack://dsv/../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lodash.default.js","webpack://dsv/../src/common/path-svg.ts","webpack://dsv/../src/env-check.ts","webpack://dsv/../src/graphic/bounds.ts","webpack://dsv/../src/series/map/geo-source.ts","webpack://dsv/../src/graphics/algorithm/aabb.ts","webpack://dsv/../src/format/number/formatPrefixAuto.ts","webpack://dsv/../src/tools/helper.ts","webpack://dsv/../src/body-helper/style/Style.ts","webpack://dsv/../src/body-helper/style/CheckboxStyle.ts","webpack://dsv/../src/body-helper/style/RadioStyle.ts","webpack://dsv/../src/icons.ts","webpack://dsv/../src/body-helper/style/MultilineTextStyle.ts","webpack://dsv/../src/body-helper/style/ProgressBarStyle.ts","webpack://dsv/../src/body-helper/style/ImageStyle.ts","webpack://dsv/../src/header-helper/style/Style.ts","webpack://dsv/../src/header-helper/style/ImageStyle.ts","webpack://dsv/../src/header-helper/style/MultilineTextHeaderStyle.ts","webpack://dsv/../src/header-helper/style/CheckboxStyle.ts","webpack://dsv/../src/animate/Ticker/type.ts","webpack://dsv/../src/ts-types/icon.ts","webpack://dsv/../src/constant.ts","webpack://dsv/../src/scenegraph/component/menu.ts","webpack://dsv/../src/axis/constant.ts","webpack://dsv/../src/type.ts","webpack://dsv/../src/logger.ts","webpack://dsv/../src/legend/constant.ts","webpack://dsv/../src/slider/constant.ts","webpack://dsv/../src/constants/format.ts","webpack://dsv/../src/constants/character.ts","webpack://dsv/../src/interface/character.ts","webpack://dsv/../src/const.ts","webpack://dsv/../src/common/enums.ts","webpack://dsv/../src/math.ts","webpack://dsv/../src/animate/easing.ts","webpack://dsv/../src/common/isType.ts","webpack://dsv/../src/common/isNumber.ts","webpack://dsv/../src/common/generator.ts","webpack://dsv/../src/animate/timeline.ts","webpack://dsv/../src/animate/animate.ts","webpack://dsv/../src/common/bounds-context.ts","webpack://dsv/../src/common/isArray.ts","webpack://dsv/../src/angle.ts","webpack://dsv/../src/graphics/algorithm/intersect.ts","webpack://dsv/../src/data-structure/bounds.ts","webpack://dsv/../src/common/segment/curve/path.ts","webpack://dsv/../src/common/shape/arc.ts","webpack://dsv/../src/common/render-command-list.ts","webpack://dsv/../src/data-structure/point.ts","webpack://dsv/../src/common/segment/curve/base.ts","webpack://dsv/../src/common/segment/curve/line.ts","webpack://dsv/../src/common/bezier-utils.ts","webpack://dsv/../src/common/segment/curve/quadratic-bezier.ts","webpack://dsv/../src/common/segment/curve/cubic-bezier.ts","webpack://dsv/../src/common/segment/curve/curve-context.ts","webpack://dsv/../src/common/seg-context.ts","webpack://dsv/../src/common/segment/common.ts","webpack://dsv/../src/common/segment/linear.ts","webpack://dsv/../src/common/segment/basis.ts","webpack://dsv/../src/common/segment/monotone.ts","webpack://dsv/../src/common/segment/step.ts","webpack://dsv/../src/common/segment/linear-closed.ts","webpack://dsv/../src/common/segment/catmull-rom.ts","webpack://dsv/../src/common/segment/catmull-rom-close.ts","webpack://dsv/../src/common/segment/index.ts","webpack://dsv/../src/common/custom-path2d.ts","webpack://dsv/../src/animate/easing-func.ts","webpack://dsv/../src/customAnimates/bounce.ts","webpack://dsv/../src/common/inversify/cotainer-module.ts","webpack://dsv/../src/common/inversify/metadata_keys.ts","webpack://dsv/../src/common/Reflect-metadata.ts","webpack://dsv/../src/common/inversify/annotation/injectable.ts","webpack://dsv/../src/common/inversify/meta-data.ts","webpack://dsv/../src/common/inversify/annotation/inject_base.ts","webpack://dsv/../src/common/contribution-provider.ts","webpack://dsv/../src/tapable/Hook.ts","webpack://dsv/../src/tapable/SyncHook.ts","webpack://dsv/../src/constants.ts","webpack://dsv/../src/core/global.ts","webpack://dsv/../src/interface/graphic/text.ts","webpack://dsv/../src/data-structure/matrix.ts","webpack://dsv/../src/graphic/config.ts","webpack://dsv/../src/application.ts","webpack://dsv/../src/common/color-utils.ts","webpack://dsv/../src/common/canvas-utils.ts","webpack://dsv/../src/graphic/richtext/utils.ts","webpack://dsv/../src/core/contributions/textMeasure/AtextMeasure.ts","webpack://dsv/../src/core/contributions/textMeasure/textMeasure-contribution.ts","webpack://dsv/../src/common/isNil.ts","webpack://dsv/../src/common/isValid.ts","webpack://dsv/../src/common/isString.ts","webpack://dsv/../src/graphics/text/stringWidth.ts","webpack://dsv/../src/graphics/text/measure/util.ts","webpack://dsv/../src/graphics/text/measure/textMeasure.ts","webpack://dsv/../src/common/inversify/literal_types.ts","webpack://dsv/../src/common/inversify/binding.ts","webpack://dsv/../src/common/inversify/metadata_reader.ts","webpack://dsv/../src/common/inversify/syntax/constraint_helpers.ts","webpack://dsv/../src/common/inversify/syntax/binding_in_syntax.ts","webpack://dsv/../src/common/inversify/syntax/binding_to_syntax.ts","webpack://dsv/../src/common/inversify/container.ts","webpack://dsv/../src/canvas/constants.ts","webpack://dsv/../src/canvas/util.ts","webpack://dsv/../src/allocator/canvas-allocate.ts","webpack://dsv/../src/common/number.ts","webpack://dsv/../src/core/window.ts","webpack://dsv/../src/core/graphic-utils.ts","webpack://dsv/../src/graphic/theme.ts","webpack://dsv/../src/common/has.ts","webpack://dsv/../src/common/isValidUrl.ts","webpack://dsv/../src/common/isBase64.ts","webpack://dsv/../src/common/isObject.ts","webpack://dsv/../src/common/isBoolean.ts","webpack://dsv/../src/common/isFunction.ts","webpack://dsv/../src/graphic/node-tree.ts","webpack://dsv/../src/event/federated-event/base-event.ts","webpack://dsv/../src/event/federated-event/custom-event.ts","webpack://dsv/../src/event/event-target.ts","webpack://dsv/../src/animate/config.ts","webpack://dsv/../src/common/clamp.ts","webpack://dsv/../src/color/hslToRgb.ts","webpack://dsv/../src/color/rgbToHsl.ts","webpack://dsv/../src/color/Color.ts","webpack://dsv/../src/color-string/store.ts","webpack://dsv/../src/color-string/interpolate.ts","webpack://dsv/../src/resource-loader/loader.ts","webpack://dsv/../src/common/utils.ts","webpack://dsv/../src/graphic/graphic.ts","webpack://dsv/../src/graphic/tools.ts","webpack://dsv/../src/graphic/constants.ts","webpack://dsv/../src/graphic/group.ts","webpack://dsv/../src/core/layer.ts","webpack://dsv/../src/core/constants.ts","webpack://dsv/../src/core/layer-service.ts","webpack://dsv/../src/render/contributions/render/symbol.ts","webpack://dsv/../src/render/render-service.ts","webpack://dsv/../src/render/render-modules.ts","webpack://dsv/../src/picker/constants.ts","webpack://dsv/../src/common/matrix.ts","webpack://dsv/../src/allocator/matrix-allocate.ts","webpack://dsv/../src/common/3d-interceptor.ts","webpack://dsv/../src/picker/pick-interceptor.ts","webpack://dsv/../src/picker/pick-modules.ts","webpack://dsv/../src/dom.ts","webpack://dsv/../src/common/text.ts","webpack://dsv/../src/graphic/graphic-service/graphic-service.ts","webpack://dsv/../src/graphic/graphic-creator.ts","webpack://dsv/../src/plugins/constants.ts","webpack://dsv/../src/plugins/plugin-service.ts","webpack://dsv/../src/core/contributions/textMeasure/modules.ts","webpack://dsv/../src/core/contributions/layerHandler/canvas2d-contribution.ts","webpack://dsv/../src/core/contributions/layerHandler/modules.ts","webpack://dsv/../src/core/contributions/modules.ts","webpack://dsv/../src/common/sort.ts","webpack://dsv/../src/render/contributions/render/draw-interceptor.ts","webpack://dsv/../src/allocator/bounds-allocate.ts","webpack://dsv/../src/render/contributions/render/draw-contribution.ts","webpack://dsv/../src/common/isArrayLike.ts","webpack://dsv/../src/common/array.ts","webpack://dsv/../src/common/shape/rect.ts","webpack://dsv/../src/render/contributions/render/utils.ts","webpack://dsv/../src/render/contributions/render/contributions/constants.ts","webpack://dsv/../src/render/contributions/render/contributions/base-contribution-render.ts","webpack://dsv/../src/render/contributions/render/contributions/group-contribution-render.ts","webpack://dsv/../src/render/contributions/render/group-render.ts","webpack://dsv/../src/render/contributions/render/base-render.ts","webpack://dsv/../src/common/render-utils.ts","webpack://dsv/../src/common/render-curve.ts","webpack://dsv/../src/render/contributions/render/line-render.ts","webpack://dsv/../src/render/contributions/render/incremental-line-render.ts","webpack://dsv/../src/common/render-area.ts","webpack://dsv/../src/render/contributions/render/contributions/base-texture-contribution-render.ts","webpack://dsv/../src/render/contributions/render/contributions/area-texture-contribution-render.ts","webpack://dsv/../src/render/contributions/render/area-render.ts","webpack://dsv/../src/render/contributions/render/incremental-area-render.ts","webpack://dsv/../src/render/contributions/render/incremental-draw-contribution.ts","webpack://dsv/../src/render/contributions/render/module.ts","webpack://dsv/../src/render/contributions/modules.ts","webpack://dsv/../src/modules.ts","webpack://dsv/../src/factory.ts","webpack://dsv/../src/plugins/builtin-plugin/flex-layout-plugin.ts","webpack://dsv/../src/plugins/builtin-plugin/3dview-transform-plugin.ts","webpack://dsv/../src/graphics/bounds-util.ts","webpack://dsv/../src/plugins/builtin-plugin/html-attribute-plugin.ts","webpack://dsv/../src/plugins/builtin-plugin/react-attribute-plugin.ts","webpack://dsv/../src/core/light.ts","webpack://dsv/../src/core/camera.ts","webpack://dsv/../src/canvas/contributions/base-canvas.ts","webpack://dsv/../src/lru.ts","webpack://dsv/../src/canvas/conical-gradient.ts","webpack://dsv/../src/canvas/contributions/browser/context.ts","webpack://dsv/../src/canvas/contributions/browser/canvas.ts","webpack://dsv/../src/canvas/contributions/create-canvas-module.ts","webpack://dsv/../src/picker/picker-service.ts","webpack://dsv/../src/picker/contributions/constants.ts","webpack://dsv/../src/picker/canvas-picker-service.ts","webpack://dsv/../src/picker/contributions/canvas-picker/group-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/module.ts","webpack://dsv/../src/picker/canvas-module.ts","webpack://dsv/../src/core/contributions/window/base-contribution.ts","webpack://dsv/../src/window/contributions/browser-contribution.ts","webpack://dsv/../src/core/contributions/env/base-contribution.ts","webpack://dsv/../src/common/isValidNumber.ts","webpack://dsv/../src/env/contributions/browser-contribution.ts","webpack://dsv/../src/env/browser.ts","webpack://dsv/../src/canvas/contributions/node/context.ts","webpack://dsv/../src/canvas/contributions/node/canvas.ts","webpack://dsv/../src/window/contributions/node-contribution.ts","webpack://dsv/../src/env/contributions/node-contribution.ts","webpack://dsv/../src/env/node.ts","webpack://dsv/../src/graphic/graphic-service/common-outer-boder-bounds.ts","webpack://dsv/../src/graphic/arc.ts","webpack://dsv/../src/register/register-arc.ts","webpack://dsv/../src/render/contributions/render/contributions/arc-contribution-render.ts","webpack://dsv/../src/render/contributions/render/arc-render.ts","webpack://dsv/../src/render/contributions/render/arc-module.ts","webpack://dsv/../src/picker/contributions/common/base.ts","webpack://dsv/../src/picker/contributions/canvas-picker/arc-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/arc-module.ts","webpack://dsv/../src/picker/contributions/math-picker/arc-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/arc-module.ts","webpack://dsv/../src/graphic/arc3d.ts","webpack://dsv/../src/register/register-arc3d.ts","webpack://dsv/../src/render/contributions/render/arc3d-render.ts","webpack://dsv/../src/render/contributions/render/arc3d-module.ts","webpack://dsv/../src/picker/contributions/common/base-3d-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/arc3d-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/arc3d-module.ts","webpack://dsv/../src/graphic/area.ts","webpack://dsv/../src/register/register-area.ts","webpack://dsv/../src/render/contributions/render/area-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/area-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/area-module.ts","webpack://dsv/../src/picker/contributions/math-picker/area-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/area-module.ts","webpack://dsv/../src/graphic/circle.ts","webpack://dsv/../src/register/register-circle.ts","webpack://dsv/../src/render/contributions/render/contributions/circle-contribution-render.ts","webpack://dsv/../src/render/contributions/render/circle-render.ts","webpack://dsv/../src/render/contributions/render/circle-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/circle-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/circle-module.ts","webpack://dsv/../src/picker/contributions/math-picker/circle-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/circle-module.ts","webpack://dsv/../src/graphic/glyph.ts","webpack://dsv/../src/register/register-glyph.ts","webpack://dsv/../src/render/contributions/render/glyph-render.ts","webpack://dsv/../src/render/contributions/render/glyph-module.ts","webpack://dsv/../src/picker/contributions/common/glyph-picker-base.ts","webpack://dsv/../src/picker/contributions/canvas-picker/glyph-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/glyph-module.ts","webpack://dsv/../src/picker/contributions/math-picker/glyph-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/glyph-module.ts","webpack://dsv/../src/register/register-group.ts","webpack://dsv/../src/graphic/image.ts","webpack://dsv/../src/register/register-image.ts","webpack://dsv/../src/render/contributions/render/contributions/rect-contribution-render.ts","webpack://dsv/../src/render/contributions/render/contributions/image-contribution-render.ts","webpack://dsv/../src/render/contributions/render/image-render.ts","webpack://dsv/../src/render/contributions/render/image-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/image-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/image-module.ts","webpack://dsv/../src/picker/contributions/math-picker/image-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/image-module.ts","webpack://dsv/../src/graphic/line.ts","webpack://dsv/../src/register/register-line.ts","webpack://dsv/../src/render/contributions/render/line-module.ts","webpack://dsv/../src/picker/contributions/common/base-line-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/line-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/line-module.ts","webpack://dsv/../src/picker/contributions/math-picker/line-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/line-module.ts","webpack://dsv/../src/graphic/path.ts","webpack://dsv/../src/register/register-path.ts","webpack://dsv/../src/render/contributions/render/path-render.ts","webpack://dsv/../src/render/contributions/render/path-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/path-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/path-module.ts","webpack://dsv/../src/picker/contributions/math-picker/path-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/path-module.ts","webpack://dsv/../src/graphic/polygon.ts","webpack://dsv/../src/register/register-polygon.ts","webpack://dsv/../src/common/polygon.ts","webpack://dsv/../src/render/contributions/render/polygon-render.ts","webpack://dsv/../src/render/contributions/render/polygon-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/polygon-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/polygon-module.ts","webpack://dsv/../src/picker/contributions/math-picker/polygon-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/polygon-module.ts","webpack://dsv/../src/graphic/pyramid3d.ts","webpack://dsv/../src/register/register-pyramid3d.ts","webpack://dsv/../src/render/contributions/render/base-3d-render.ts","webpack://dsv/../src/render/contributions/render/pyramid3d-render.ts","webpack://dsv/../src/render/contributions/render/pyramid3d-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/pyramid3d-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/pyramid3d-module.ts","webpack://dsv/../src/common/rect-utils.ts","webpack://dsv/../src/graphic/rect.ts","webpack://dsv/../src/register/register-rect.ts","webpack://dsv/../src/render/contributions/render/rect-render.ts","webpack://dsv/../src/render/contributions/render/rect-module.ts","webpack://dsv/../src/picker/contributions/common/rect-picker-base.ts","webpack://dsv/../src/picker/contributions/canvas-picker/rect-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/rect-module.ts","webpack://dsv/../src/picker/contributions/math-picker/rect-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/rect-module.ts","webpack://dsv/../src/graphic/rect3d.ts","webpack://dsv/../src/register/register-rect3d.ts","webpack://dsv/../src/render/contributions/render/rect3d-render.ts","webpack://dsv/../src/render/contributions/render/rect3d-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/rect3d-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/rect3d-module.ts","webpack://dsv/../src/graphic/richtext/frame.ts","webpack://dsv/../src/graphic/richtext/paragraph.ts","webpack://dsv/../src/graphic/richtext/icon.ts","webpack://dsv/../src/graphic/richtext/line.ts","webpack://dsv/../src/graphic/richtext/wrapper.ts","webpack://dsv/../src/graphic/richtext.ts","webpack://dsv/../src/register/register-richtext.ts","webpack://dsv/../src/render/contributions/render/contributions/text-contribution-render.ts","webpack://dsv/../src/render/contributions/render/richtext-render.ts","webpack://dsv/../src/render/contributions/render/richtext-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/richtext-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/richtext-module.ts","webpack://dsv/../src/picker/contributions/math-picker/richtext-module.ts","webpack://dsv/../src/graphic/shadow-root.ts","webpack://dsv/../src/register/register-shadowRoot.ts","webpack://dsv/../src/graphic/builtin-symbol/base.ts","webpack://dsv/../src/graphic/builtin-symbol/circle.ts","webpack://dsv/../src/graphic/builtin-symbol/cross.ts","webpack://dsv/../src/graphic/builtin-symbol/diamond.ts","webpack://dsv/../src/graphic/builtin-symbol/square.ts","webpack://dsv/../src/graphic/builtin-symbol/triangle-up.ts","webpack://dsv/../src/graphic/builtin-symbol/triangle.ts","webpack://dsv/../src/graphic/builtin-symbol/star.ts","webpack://dsv/../src/graphic/builtin-symbol/arrow.ts","webpack://dsv/../src/graphic/builtin-symbol/wedge.ts","webpack://dsv/../src/graphic/builtin-symbol/stroke.ts","webpack://dsv/../src/graphic/builtin-symbol/wye.ts","webpack://dsv/../src/graphic/builtin-symbol/triangle-left.ts","webpack://dsv/../src/graphic/builtin-symbol/triangle-right.ts","webpack://dsv/../src/graphic/builtin-symbol/triangle-down.ts","webpack://dsv/../src/graphic/builtin-symbol/thin-triangle.ts","webpack://dsv/../src/graphic/builtin-symbol/arrow2-left.ts","webpack://dsv/../src/graphic/builtin-symbol/arrow2-right.ts","webpack://dsv/../src/graphic/builtin-symbol/arrow2-up.ts","webpack://dsv/../src/graphic/builtin-symbol/arrow2-down.ts","webpack://dsv/../src/graphic/builtin-symbol/line-v.ts","webpack://dsv/../src/graphic/builtin-symbol/line-h.ts","webpack://dsv/../src/graphic/builtin-symbol/close.ts","webpack://dsv/../src/graphic/builtin-symbol/rect.ts","webpack://dsv/../src/graphic/builtin-symbol/index.ts","webpack://dsv/../src/graphic/builtin-symbol/utils.ts","webpack://dsv/../src/common/xml/utils.ts","webpack://dsv/../src/common/xml/OrderedObjParser.ts","webpack://dsv/../src/common/xml/node2json.ts","webpack://dsv/../src/common/xml/parser.ts","webpack://dsv/../src/graphic/graphic-service/symbol-outer-border-bounds.ts","webpack://dsv/../src/graphic/symbol.ts","webpack://dsv/../src/register/register-symbol.ts","webpack://dsv/../src/render/contributions/render/contributions/symbol-contribution-render.ts","webpack://dsv/../src/render/contributions/render/symbol-render.ts","webpack://dsv/../src/render/contributions/render/symbol-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/symbol-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/symbol-module.ts","webpack://dsv/../src/picker/contributions/math-picker/symbol-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/symbol-module.ts","webpack://dsv/../src/core/contributions/textMeasure/layout.ts","webpack://dsv/../src/graphic/text.ts","webpack://dsv/../src/register/register-text.ts","webpack://dsv/../src/render/contributions/render/text-render.ts","webpack://dsv/../src/render/contributions/render/text-module.ts","webpack://dsv/../src/picker/contributions/canvas-picker/text-picker.ts","webpack://dsv/../src/picker/contributions/canvas-picker/text-module.ts","webpack://dsv/../src/picker/contributions/math-picker/text-picker.ts","webpack://dsv/../src/picker/contributions/math-picker/text-module.ts","webpack://dsv/../src/graphic/wrap-text.ts","webpack://dsv/../src/register/register-wraptext.ts","webpack://dsv/../src/common/isDate.ts","webpack://dsv/../src/common/cloneDeep.ts","webpack://dsv/../src/customAnimates/typewirter.ts","webpack://dsv/../src/customAnimates/bar-bounce.ts","webpack://dsv/../src/customAnimates/bar-leap.ts","webpack://dsv/../src/customAnimates/pie-leap.ts","webpack://dsv/../src/customAnimates/symbol-throw.ts","webpack://dsv/../src/customAnimates/symbol-swing.ts","webpack://dsv/../src/easing/flicker.ts","webpack://dsv/../src/easing/registerEasing.ts","webpack://dsv/../src/common/isUndefined.ts","webpack://dsv/../src/event/federated-event/mouse-event.ts","webpack://dsv/../src/event/federated-event/pointer-event.ts","webpack://dsv/../src/event/federated-event/wheel-event.ts","webpack://dsv/../src/event/constant.ts","webpack://dsv/../src/event/util.ts","webpack://dsv/../src/event/event-manager.ts","webpack://dsv/../src/event/event-system.ts","webpack://dsv/../src/plugins/builtin-plugin/auto-render-plugin.ts","webpack://dsv/../src/plugins/builtin-plugin/auto-refresh-plugin.ts","webpack://dsv/../src/plugins/builtin-plugin/incremental-auto-render-plugin.ts","webpack://dsv/../src/plugins/builtin-plugin/dirty-bounds-plugin.ts","webpack://dsv/../src/animate/Ticker/raf-tick-handler.ts","webpack://dsv/../src/animate/Ticker/timeout-tick-handler.ts","webpack://dsv/../src/animate/Ticker/default-ticker.ts","webpack://dsv/../src/animate/default-ticker.ts","webpack://dsv/../src/core/stage.ts","webpack://dsv/../src/create.ts","webpack://dsv/../src/animate/Ticker/manual-ticker-handler.ts","webpack://dsv/../src/animate/Ticker/manual-ticker.ts","webpack://dsv/../src/utils/layout.ts","webpack://dsv/../src/core/canvas.ts","webpack://dsv/../src/utils/factory.ts","webpack://dsv/../src/core/character-tree.ts","webpack://dsv/../src/core/plugin-service.ts","webpack://dsv/../src/core/story.ts","webpack://dsv/../src/core/scheduler.ts","webpack://dsv/../src/core/processorRegistry.ts","webpack://dsv/../src/core/action-processor.ts","webpack://dsv/../src/tools/global-ticker.ts","webpack://dsv/../src/core/player.ts","webpack://dsv/../src/module/vrender.ts","webpack://dsv/../src/data/parser/array.ts","webpack://dsv/../src/typings/spec/common.ts","webpack://dsv/../src/component/interface/type.ts","webpack://dsv/../src/utils/uuid.ts","webpack://dsv/../src/data-set.ts","webpack://dsv/../src/parser/data-view.ts","webpack://dsv/../src/common/isObjectLike.ts","webpack://dsv/../src/common/isPlainObject.ts","webpack://dsv/../src/common/merge.ts","webpack://dsv/../src/transform/fields.ts","webpack://dsv/../src/data-view.ts","webpack://dsv/../src/util/spec/transform.ts","webpack://dsv/../src/util/id.ts","webpack://dsv/../src/util/type.ts","webpack://dsv/../src/util/space.ts","webpack://dsv/../src/util/env.ts","webpack://dsv/../src/util/debug.ts","webpack://dsv/../src/series/util/spec.ts","webpack://dsv/../src/series/interface/type.ts","webpack://dsv/../src/theme/color-scheme/legacy.ts","webpack://dsv/../src/theme/color-scheme/util.ts","webpack://dsv/../src/spec/merge-spec.ts","webpack://dsv/../src/transform/filter.ts","webpack://dsv/../src/transform/fold.ts","webpack://dsv/../../node_modules/.pnpm/d3-dsv@2.0.0/node_modules/d3-dsv/src/dsv.js","webpack://dsv/../../node_modules/.pnpm/d3-dsv@2.0.0/node_modules/d3-dsv/src/csv.js","webpack://dsv/../../node_modules/.pnpm/d3-dsv@2.0.0/node_modules/d3-dsv/src/tsv.js","webpack://dsv/../src/utils/js.ts","webpack://dsv/../src/parser/dsv.ts","webpack://dsv/../src/core/factory.ts","webpack://dsv/../src/util/theme/merge-theme.ts","webpack://dsv/../src/theme/color-scheme/builtin/default.ts","webpack://dsv/../src/theme/builtin/light/color-scheme.ts","webpack://dsv/../src/theme/builtin/common/series/area.ts","webpack://dsv/../src/theme/builtin/common/series/bar.ts","webpack://dsv/../src/theme/builtin/common/series/bar3d.ts","webpack://dsv/../src/theme/builtin/common/series/circular-progress.ts","webpack://dsv/../src/theme/builtin/common/series/dot.ts","webpack://dsv/../src/theme/builtin/common/series/funnel.ts","webpack://dsv/../src/theme/builtin/common/series/gauge-pointer.ts","webpack://dsv/../src/constant/base.ts","webpack://dsv/../src/constant/polar.ts","webpack://dsv/../src/theme/builtin/common/series/index.ts","webpack://dsv/../src/theme/builtin/common/series/scatter.ts","webpack://dsv/../src/theme/builtin/common/series/line.ts","webpack://dsv/../src/theme/builtin/common/series/pie.ts","webpack://dsv/../src/theme/builtin/common/series/pie3d.ts","webpack://dsv/../src/theme/builtin/common/series/map.ts","webpack://dsv/../src/theme/builtin/common/series/radar.ts","webpack://dsv/../src/theme/builtin/common/series/link.ts","webpack://dsv/../src/theme/builtin/common/series/word-cloud.ts","webpack://dsv/../src/theme/builtin/common/series/linear-progress.ts","webpack://dsv/../src/theme/builtin/common/series/waterfall.ts","webpack://dsv/../src/theme/builtin/common/series/gauge.ts","webpack://dsv/../src/theme/builtin/common/series/treemap.ts","webpack://dsv/../src/theme/builtin/common/series/sunburst.ts","webpack://dsv/../src/theme/builtin/common/series/rangeColumn.ts","webpack://dsv/../src/theme/builtin/common/series/circle-packing.ts","webpack://dsv/../src/theme/builtin/common/series/heatmap.ts","webpack://dsv/../src/theme/builtin/common/series/sankey.ts","webpack://dsv/../src/theme/builtin/common/series/rose.ts","webpack://dsv/../src/theme/builtin/common/series/box-plot.ts","webpack://dsv/../src/theme/builtin/common/series/correlation.ts","webpack://dsv/../src/theme/builtin/common/series/liquid.ts","webpack://dsv/../src/theme/builtin/common/series/venn.ts","webpack://dsv/../src/theme/builtin/common/series/mosaic.ts","webpack://dsv/../src/theme/builtin/common/mark.ts","webpack://dsv/../src/theme/builtin/common/component/axis/band-axis.ts","webpack://dsv/../src/theme/builtin/common/component/axis/cartesian-axis.ts","webpack://dsv/../src/theme/builtin/common/component/axis/common-axis.ts","webpack://dsv/../src/theme/builtin/common/component/axis/linear-axis.ts","webpack://dsv/../src/theme/builtin/common/component/axis/polar-axis.ts","webpack://dsv/../src/theme/builtin/common/component/brush.ts","webpack://dsv/../src/theme/builtin/common/component/data-zoom.ts","webpack://dsv/../src/theme/builtin/common/component/indicator.ts","webpack://dsv/../src/theme/builtin/common/component/legend/continuous.ts","webpack://dsv/../src/theme/builtin/common/component/legend/color-legend.ts","webpack://dsv/../src/theme/builtin/common/component/legend/discrete-legend.ts","webpack://dsv/../src/theme/builtin/common/component/legend/size-legend.ts","webpack://dsv/../src/theme/builtin/common/component/map-label.ts","webpack://dsv/../src/theme/builtin/common/component/mark.ts","webpack://dsv/../src/theme/builtin/common/component/mark-area.ts","webpack://dsv/../src/theme/builtin/common/component/mark-line.ts","webpack://dsv/../src/theme/builtin/common/component/mark-point.ts","webpack://dsv/../src/theme/token/builtin/default.ts","webpack://dsv/../src/theme/builtin/light/index.ts","webpack://dsv/../src/theme/builtin/common/component/index.ts","webpack://dsv/../src/theme/builtin/common/component/tooltip.ts","webpack://dsv/../src/theme/builtin/common/component/player.ts","webpack://dsv/../src/theme/builtin/common/component/title.ts","webpack://dsv/../src/theme/builtin/common/component/poptip.ts","webpack://dsv/../src/theme/builtin/common/component/total-label.ts","webpack://dsv/../src/theme/builtin/common/component/scroll-bar.ts","webpack://dsv/../src/theme/token/util.ts","webpack://dsv/../src/util/theme/preprocess.ts","webpack://dsv/../src/theme/builtin/index.ts","webpack://dsv/../src/core/instance-manager.ts","webpack://dsv/../src/theme/theme-manager.ts","webpack://dsv/../src/util/theme/common.ts","webpack://dsv/../src/event/events/dimension/interface.ts","webpack://dsv/../src/event/events/dimension/util/common.ts","webpack://dsv/../src/regression-linear.ts","webpack://dsv/../src/common/ascending.ts","webpack://dsv/../src/common/toNumber.ts","webpack://dsv/../src/common/quantileSorted.ts","webpack://dsv/../src/common/median.ts","webpack://dsv/../src/util/math.ts","webpack://dsv/../src/event/events/dimension/util/polar.ts","webpack://dsv/../src/component/axis/cartesian/util/common.ts","webpack://dsv/../src/event/events/dimension/util/cartesian.ts","webpack://dsv/../src/event/events/dimension/base.ts","webpack://dsv/../src/constant/event.ts","webpack://dsv/../src/event/events/dimension/dimension-hover.ts","webpack://dsv/../src/event/events/dimension/dimension-click.ts","webpack://dsv/../src/event/events/index.ts","webpack://dsv/../src/event/event.ts","webpack://dsv/../src/event/bubble.ts","webpack://dsv/../src/common/get.ts","webpack://dsv/../src/common/debounce.ts","webpack://dsv/../src/common/throttle.ts","webpack://dsv/../src/graph/enums.ts","webpack://dsv/../src/view/glyph-meta.ts","webpack://dsv/../src/event/event-dispatcher.ts","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/identity.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/stream.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/adder.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/math.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/noop.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/area.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/bounds.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/centroid.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/context.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/measure.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/string.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/path/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+clone@6.5.0/node_modules/@turf/clone/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+invariant@6.5.0/node_modules/@turf/invariant/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+boolean-clockwise@6.5.0/node_modules/@turf/boolean-clockwise/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+helpers@6.5.0/node_modules/@turf/helpers/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+meta@6.5.0/node_modules/@turf/meta/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+rewind@6.5.0/node_modules/@turf/rewind/dist/es/index.js","webpack://dsv/../../node_modules/.pnpm/@turf+flatten@6.5.0/node_modules/@turf/flatten/dist/es/index.js","webpack://dsv/../src/parser/geo/geojson.ts","webpack://dsv/../../node_modules/.pnpm/topojson-client@3.1.0/node_modules/topojson-client/src/reverse.js","webpack://dsv/../../node_modules/.pnpm/topojson-client@3.1.0/node_modules/topojson-client/src/identity.js","webpack://dsv/../../node_modules/.pnpm/topojson-client@3.1.0/node_modules/topojson-client/src/transform.js","webpack://dsv/../../node_modules/.pnpm/topojson-client@3.1.0/node_modules/topojson-client/src/feature.js","webpack://dsv/../src/parser/geo/topojson.ts","webpack://dsv/../src/transform/geo/simplify.ts","webpack://dsv/../src/data/register.ts","webpack://dsv/../src/data/transforms/copy-data-view.ts","webpack://dsv/../src/data/initialize.ts","webpack://dsv/../src/parse/util.ts","webpack://dsv/../src/animation/interface.ts","webpack://dsv/../src/parse/option.ts","webpack://dsv/../src/view/grammar-base.ts","webpack://dsv/../src/parse/transform.ts","webpack://dsv/../src/util/data.ts","webpack://dsv/../src/view/data.ts","webpack://dsv/../src/util/grammar-heap.ts","webpack://dsv/../src/accessors.ts","webpack://dsv/../src/util/unique-list.ts","webpack://dsv/../src/view/dataflow.ts","webpack://dsv/../src/graph/mark-tree.ts","webpack://dsv/../src/graph/canvas-renderer.ts","webpack://dsv/../src/graph/util/point.ts","webpack://dsv/../src/view/constants.ts","webpack://dsv/../src/graph/constants.ts","webpack://dsv/../src/graph/util/events-extend.ts","webpack://dsv/../src/view/signal.ts","webpack://dsv/../src/parse/view.ts","webpack://dsv/../src/graph/util/env.ts","webpack://dsv/../src/graph/attributes/helpers.ts","webpack://dsv/../src/graph/attributes/common.ts","webpack://dsv/../src/graph/attributes/transform.ts","webpack://dsv/../src/graph/util/graphic.ts","webpack://dsv/../src/graph/mark/differ.ts","webpack://dsv/../src/parse/mark.ts","webpack://dsv/../src/accessor.ts","webpack://dsv/../src/getter.ts","webpack://dsv/../src/error.ts","webpack://dsv/../src/splitAccessPath.ts","webpack://dsv/../src/field.ts","webpack://dsv/../src/graph/mark/encode.ts","webpack://dsv/../src/common/isEqual.ts","webpack://dsv/../src/common/getType.ts","webpack://dsv/../src/common/isPrototype.ts","webpack://dsv/../src/common/isEmpty.ts","webpack://dsv/../src/graph/attributes/line.ts","webpack://dsv/../src/graph/element.ts","webpack://dsv/../src/view/mark.ts","webpack://dsv/../src/view/group.ts","webpack://dsv/../src/view/grammar-record.ts","webpack://dsv/../src/semantic-marks/text.ts","webpack://dsv/../src/theme/common/component.ts","webpack://dsv/../src/theme/common/constants.ts","webpack://dsv/../src/theme/common/mark.ts","webpack://dsv/../src/theme/dark.ts","webpack://dsv/../src/theme/default.ts","webpack://dsv/../src/view/component.ts","webpack://dsv/../src/graph/view-diff.ts","webpack://dsv/../src/view/View.ts","webpack://dsv/../src/compile/util.ts","webpack://dsv/../src/compile/interface/compilable-item.ts","webpack://dsv/../src/compile/compiler.ts","webpack://dsv/../src/util/image.ts","webpack://dsv/../src/poptip/theme.ts","webpack://dsv/../src/poptip/register.ts","webpack://dsv/../src/chart/util.ts","webpack://dsv/../src/compile/mark/interface.ts","webpack://dsv/../src/mark/mark-set/index.ts","webpack://dsv/../src/interaction/dimension-trigger.ts","webpack://dsv/../src/compile/mark/util.ts","webpack://dsv/../src/interaction/interaction.ts","webpack://dsv/../src/constant/layout.ts","webpack://dsv/../src/constant/attribute.ts","webpack://dsv/../src/compile/compilable-base.ts","webpack://dsv/../src/compile/grammar-item.ts","webpack://dsv/../src/compile/signal/compilable-signal.ts","webpack://dsv/../src/compile/signal/signal-manager.ts","webpack://dsv/../src/compile/signal/state-manager.ts","webpack://dsv/../src/animation/animate-manager.ts","webpack://dsv/../src/model/base-model-transformer.ts","webpack://dsv/../src/utils/object.ts","webpack://dsv/../src/model/base-model.ts","webpack://dsv/../src/layout/layout-item.ts","webpack://dsv/../src/model/layout-model.ts","webpack://dsv/../src/region/region-transformer.ts","webpack://dsv/../src/region/region.ts","webpack://dsv/../src/layout/util.ts","webpack://dsv/../src/layout/base-layout.ts","webpack://dsv/../src/common/range.ts","webpack://dsv/../src/common/memoize.ts","webpack://dsv/../src/common/bisect.ts","webpack://dsv/../src/utils/utils.ts","webpack://dsv/../src/utils/tick-sample.ts","webpack://dsv/../src/base-scale.ts","webpack://dsv/../src/color/hexToRgb.ts","webpack://dsv/../src/color/rgbToHex.ts","webpack://dsv/../src/color/interpolate.ts","webpack://dsv/../src/common/interpolate.ts","webpack://dsv/../src/utils/interpolate.ts","webpack://dsv/../src/common/clamper.ts","webpack://dsv/../src/continuous-scale.ts","webpack://dsv/../src/linear-scale.ts","webpack://dsv/../src/ordinal-scale.ts","webpack://dsv/../src/utils/tick-sample-int.ts","webpack://dsv/../src/band-scale.ts","webpack://dsv/../src/point-scale.ts","webpack://dsv/../src/threshold-scale.ts","webpack://dsv/../src/scale/color-ordinal-scale.ts","webpack://dsv/../src/util/scale.ts","webpack://dsv/../src/constant/gradient.ts","webpack://dsv/../src/mark/utils/common.ts","webpack://dsv/../src/compile/mark/mark-state-manager.ts","webpack://dsv/../src/compile/data/compilable-data.ts","webpack://dsv/../src/compile/mark/mark-data.ts","webpack://dsv/../src/compile/mark/compilable-mark.ts","webpack://dsv/../src/mark/base/base-mark.ts","webpack://dsv/../src/core/base.ts","webpack://dsv/../src/util/label-smartInvert.ts","webpack://dsv/../src/util/text.ts","webpack://dsv/../src/util/common.ts","webpack://dsv/../src/label/overlap/bitmap.ts","webpack://dsv/../src/label/overlap/scaler.ts","webpack://dsv/../src/label/overlap/place.ts","webpack://dsv/../src/animate/custom-animate.ts","webpack://dsv/../src/label/animate/animate.ts","webpack://dsv/../src/label/util.ts","webpack://dsv/../src/label/overlap/shiftY.ts","webpack://dsv/../src/label/register.ts","webpack://dsv/../src/label/base.ts","webpack://dsv/../src/label/data-label-register.ts","webpack://dsv/../src/label/arc.ts","webpack://dsv/../src/label/line.ts","webpack://dsv/../src/label/symbol.ts","webpack://dsv/../src/label/rect.ts","webpack://dsv/../src/graph/mark/graphic.ts","webpack://dsv/../src/mark/group.ts","webpack://dsv/../src/event/extension/gesture.ts","webpack://dsv/../src/common/mixin.ts","webpack://dsv/../src/view/animate.ts","webpack://dsv/../src/view/view-animate-mixin.ts","webpack://dsv/../src/graph/animation/attribute.ts","webpack://dsv/../src/graph/animation/animator.ts","webpack://dsv/../src/graph/animation/config.ts","webpack://dsv/../src/graph/animation/arranger.ts","webpack://dsv/../src/graph/animation/animate.ts","webpack://dsv/../src/view/mark-animate-mixin.ts","webpack://dsv/../src/core/util.ts","webpack://dsv/../src/core/expression-function.ts","webpack://dsv/../src/env/env.ts","webpack://dsv/../src/theme/builtin/dark/index.ts","webpack://dsv/../src/theme/builtin/dark/color-scheme.ts","webpack://dsv/../src/plugin/base/base-plugin-service.ts","webpack://dsv/../src/plugin/chart/plugin-service.ts","webpack://dsv/../src/interactions/base.ts","webpack://dsv/../src/interactions/element-active.ts","webpack://dsv/../src/interactions/utils.ts","webpack://dsv/../src/interactions/element-select.ts","webpack://dsv/../src/interactions/element-highlight.ts","webpack://dsv/../src/interactions/element-highlight-by-key.ts","webpack://dsv/../src/interactions/element-highlight-by-group.ts","webpack://dsv/../src/interactions/element-active-by-legend.ts","webpack://dsv/../src/interactions/element-highlight-by-legend.ts","webpack://dsv/../src/interactions/element-highlight-by-name.ts","webpack://dsv/../src/interactions/element-highlight-by-graphic-name.ts","webpack://dsv/../src/interactions/element-select-by-graphic-name.ts","webpack://dsv/../src/interactions/toggle-state-mixin.ts","webpack://dsv/../src/interactions/index.ts","webpack://dsv/../src/parser/svg.ts","webpack://dsv/../src/series/pictogram/svg-source.ts","webpack://dsv/../src/core/vchart.ts","webpack://dsv/../src/constant/data.ts","webpack://dsv/../src/data/transforms/add-property.ts","webpack://dsv/../src/format/time.ts","webpack://dsv/../src/component/util.ts","webpack://dsv/../src/component/tooltip/utils/get-value.ts","webpack://dsv/../src/component/tooltip/utils/common.ts","webpack://dsv/../src/series/base/tooltip-helper.ts","webpack://dsv/../src/data/transforms/dimension-statistics.ts","webpack://dsv/../src/data/transforms/invalid-travel.ts","webpack://dsv/../src/series/base/series-data.ts","webpack://dsv/../src/constant/hierarchy.ts","webpack://dsv/../src/data/transforms/data-key.ts","webpack://dsv/../src/series/base/constant.ts","webpack://dsv/../src/series/line/animation.ts","webpack://dsv/../src/graph/animation/animation/clip.ts","webpack://dsv/../src/graph/animation/animation/fade.ts","webpack://dsv/../src/graph/animation/animation/grow-cartesian.ts","webpack://dsv/../src/graph/animation/animation/grow-polar.ts","webpack://dsv/../src/graph/animation/animation/grow-points.ts","webpack://dsv/../src/graph/animation/animation/move.ts","webpack://dsv/../src/graph/animation/animation/scale.ts","webpack://dsv/../src/graph/animation/animation/update.ts","webpack://dsv/../src/graph/animation/animation/rotate.ts","webpack://dsv/../src/graph/animation/animation/index.ts","webpack://dsv/../src/animation/config.ts","webpack://dsv/../src/animation/utils.ts","webpack://dsv/../src/series/base/base-series-transformer.ts","webpack://dsv/../src/interaction/config.ts","webpack://dsv/../src/series/base/base-series.ts","webpack://dsv/../src/series/util/utils.ts","webpack://dsv/../src/series/cartesian/cartesian.ts","webpack://dsv/../src/typings/interpolate.ts","webpack://dsv/../src/typings/line-stroke.ts","webpack://dsv/../src/series/mixin/constant.ts","webpack://dsv/../src/series/mixin/line-mixin.ts","webpack://dsv/../src/mark/base/base-line.ts","webpack://dsv/../src/mark/line.ts","webpack://dsv/../src/mark/symbol.ts","webpack://dsv/../src/transforms/data/filter.ts","webpack://dsv/../src/transforms/data/map.ts","webpack://dsv/../src/transforms/util/util.ts","webpack://dsv/../src/transforms/data/sampling.ts","webpack://dsv/../src/transforms/mark/mark-overlap.ts","webpack://dsv/../src/transforms/index.ts","webpack://dsv/../src/series/mixin/line-mixin-transformer.ts","webpack://dsv/../src/util/model.ts","webpack://dsv/../src/plugin/components/axis-sync/zero-align-transform.ts","webpack://dsv/../src/axis/tick-data/util.ts","webpack://dsv/../src/plugin/components/axis-sync/tick-align-transform.ts","webpack://dsv/../src/plugin/base/base-plugin.ts","webpack://dsv/../src/plugin/components/axis-sync/axis-sync.ts","webpack://dsv/../src/util/style.ts","webpack://dsv/../src/component/axis/util.ts","webpack://dsv/../src/plugin/components/plugin-service.ts","webpack://dsv/../src/component/crosshair/utils/common.ts","webpack://dsv/../src/component/base/util.ts","webpack://dsv/../src/component/base/base-component-transformer.ts","webpack://dsv/../src/component/base/base-component.ts","webpack://dsv/../src/common/pickWithout.ts","webpack://dsv/../src/mark/component.ts","webpack://dsv/../src/axis/animate/group-transition.ts","webpack://dsv/../src/animate/group-fade.ts","webpack://dsv/../src/data/parser/scale.ts","webpack://dsv/../src/component/axis/base-axis.ts","webpack://dsv/../src/component/axis/cartesian/axis.ts","webpack://dsv/../src/component/axis/mixin/band-axis-mixin.ts","webpack://dsv/../src/padding.ts","webpack://dsv/../src/segment/register.ts","webpack://dsv/../src/segment/segment.ts","webpack://dsv/../src/util/matrix.ts","webpack://dsv/../src/axis/config.ts","webpack://dsv/../src/tag/register.ts","webpack://dsv/../src/tag/tag.ts","webpack://dsv/../src/axis/overlap/util.ts","webpack://dsv/../src/axis/util.ts","webpack://dsv/../src/util/interaction.ts","webpack://dsv/../src/axis/base.ts","webpack://dsv/../src/axis/overlap/auto-hide.ts","webpack://dsv/../src/axis/overlap/auto-rotate.ts","webpack://dsv/../src/axis/overlap/auto-limit.ts","webpack://dsv/../src/axis/overlap/auto-wrap.ts","webpack://dsv/../src/util/align.ts","webpack://dsv/../src/axis/mixin/line.ts","webpack://dsv/../src/axis/register.ts","webpack://dsv/../src/axis/line.ts","webpack://dsv/../src/axis/mixin/circle.ts","webpack://dsv/../src/axis/overlap/circle-auto-limit.ts","webpack://dsv/../src/axis/circle.ts","webpack://dsv/../src/component/scale.ts","webpack://dsv/../src/component/axis.ts","webpack://dsv/../src/axis/grid/base.ts","webpack://dsv/../src/axis/grid/line.ts","webpack://dsv/../src/axis/grid/circle.ts","webpack://dsv/../src/component/grid.ts","webpack://dsv/../src/axis/tick-data/discrete/linear.ts","webpack://dsv/../src/component/axis/cartesian/band-axis.ts","webpack://dsv/../src/util/array.ts","webpack://dsv/../src/component/axis/mixin/util/break-data.ts","webpack://dsv/../src/component/axis/mixin/linear-axis-mixin.ts","webpack://dsv/../src/axis/tick-data/continuous.ts","webpack://dsv/../src/component/axis/cartesian/linear-axis.ts","webpack://dsv/../src/series/line/line.ts","webpack://dsv/../src/chart/base/util.ts","webpack://dsv/../src/chart/base/base-chart-transformer.ts","webpack://dsv/../src/chart/cartesian/cartesian-transformer.ts","webpack://dsv/../src/chart/line/line-transformer.ts","webpack://dsv/../src/chart/chart-meta/data.ts","webpack://dsv/../src/scale/global-scale.ts","webpack://dsv/../src/chart/base/base-chart.ts","webpack://dsv/../src/data/transforms/stack-split.ts","webpack://dsv/../src/chart/stack.ts","webpack://dsv/../src/chart/line/line.ts","webpack://dsv/../src/mark/area.ts","webpack://dsv/../src/series/area/tooltip-helpter.ts","webpack://dsv/../src/series/area/animation.ts","webpack://dsv/../src/series/area/area-transformer.ts","webpack://dsv/../src/series/area/area.ts","webpack://dsv/../src/chart/area/area-transformer.ts","webpack://dsv/../src/chart/area/area.ts","webpack://dsv/../src/series/bar/animation.ts","webpack://dsv/../src/mark/rect.ts","webpack://dsv/../src/series/bar/constant.ts","webpack://dsv/../src/series/util/stack.ts","webpack://dsv/../src/series/bar/bar-transformer.ts","webpack://dsv/../src/series/bar/bar.ts","webpack://dsv/../src/chart/bar/bar-transformer.ts","webpack://dsv/../src/chart/bar/bar.ts","webpack://dsv/../src/mark/rect-3d.ts","webpack://dsv/../src/series/bar/bar-3d-transformer.ts","webpack://dsv/../src/series/bar/bar-3d.ts","webpack://dsv/../src/chart/bar/3d/bar-3d-transformer.ts","webpack://dsv/../src/plugin/other.ts","webpack://dsv/../src/chart/bar/3d/bar-3d.ts","webpack://dsv/../src/common/isNumeric.ts","webpack://dsv/../src/constant/scatter.ts","webpack://dsv/../src/series/scatter/animation.ts","webpack://dsv/../src/series/scatter/scatter-transformer.ts","webpack://dsv/../src/series/scatter/scatter.ts","webpack://dsv/../src/chart/scatter/scatter-transformer.ts","webpack://dsv/../src/chart/scatter/scatter.ts","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/buffer.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/pointEqual.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/rejoin.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/cartesian.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/polygonContains.js","webpack://dsv/../../node_modules/.pnpm/d3-array@1.2.4/node_modules/d3-array/src/ascending.js","webpack://dsv/../../node_modules/.pnpm/d3-array@1.2.4/node_modules/d3-array/src/bisector.js","webpack://dsv/../../node_modules/.pnpm/d3-array@1.2.4/node_modules/d3-array/src/bisect.js","webpack://dsv/../../node_modules/.pnpm/d3-array@1.2.4/node_modules/d3-array/src/array.js","webpack://dsv/../../node_modules/.pnpm/d3-array@1.2.4/node_modules/d3-array/src/merge.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/index.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/antimeridian.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/circle.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/circle.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/line.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/clip/rectangle.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/compose.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/rotation.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/transform.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/fit.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/resample.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/index.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/conic.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/conicEqualArea.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/albers.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/albersUsa.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/azimuthal.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/mercator.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/conicConformal.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/equirectangular.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/conicEquidistant.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/equalEarth.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/gnomonic.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/identity.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/naturalEarth1.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/orthographic.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/stereographic.js","webpack://dsv/../../node_modules/.pnpm/d3-geo@1.12.1/node_modules/d3-geo/src/projection/transverseMercator.js","webpack://dsv/../src/projections.ts","webpack://dsv/../src/projection.ts","webpack://dsv/../src/data/transforms/lookup.ts","webpack://dsv/../src/series/geo/geo.ts","webpack://dsv/../src/data/transforms/map.ts","webpack://dsv/../src/series/map/tooltip-helper.ts","webpack://dsv/../src/mark/path.ts","webpack://dsv/../src/component/geo/projection.ts","webpack://dsv/../src/component/common/trigger/desktop.ts","webpack://dsv/../src/component/common/trigger/mobile.ts","webpack://dsv/../src/component/common/trigger/config.ts","webpack://dsv/../src/interaction/zoom/zoomable.ts","webpack://dsv/../src/component/geo/geo-coordinate.ts","webpack://dsv/../src/series/map/map-transformer.ts","webpack://dsv/../src/series/map/map.ts","webpack://dsv/../src/chart/map/map-transformer.ts","webpack://dsv/../src/chart/map/map.ts","webpack://dsv/../src/util/object.ts","webpack://dsv/../src/series/polar/polar.ts","webpack://dsv/../src/data/transforms/pie.ts","webpack://dsv/../src/series/pie/animation/animation.ts","webpack://dsv/../src/series/pie/animation/centerOffset.ts","webpack://dsv/../src/mark/arc.ts","webpack://dsv/../src/series/pie/constant.ts","webpack://dsv/../src/series/pie/pie-transformer.ts","webpack://dsv/../src/component/axis/polar/util/common.ts","webpack://dsv/../src/series/pie/pie.ts","webpack://dsv/../src/chart/polar/polar-transformer.ts","webpack://dsv/../src/chart/pie/base/pie-transformer.ts","webpack://dsv/../src/chart/pie/base/base.ts","webpack://dsv/../src/chart/pie/pie.ts","webpack://dsv/../src/mark/arc-3d.ts","webpack://dsv/../src/series/pie/3d/pie-3d-transformer.ts","webpack://dsv/../src/series/pie/3d/pie-3d.ts","webpack://dsv/../src/chart/pie/3d/pie-3d.ts","webpack://dsv/../src/series/rose/animation.ts","webpack://dsv/../src/series/polar/rose-like/rose-like.ts","webpack://dsv/../src/series/rose/rose-transformer.ts","webpack://dsv/../src/component/axis/polar/axis.ts","webpack://dsv/../src/axis/tick-data/discrete/polar-angle.ts","webpack://dsv/../src/component/axis/polar/band-axis.ts","webpack://dsv/../src/component/axis/polar/linear-axis.ts","webpack://dsv/../src/series/rose/rose.ts","webpack://dsv/../src/chart/polar/rose-like/rose-like-transformer.ts","webpack://dsv/../src/chart/rose/rose-transformer.ts","webpack://dsv/../src/chart/rose/rose.ts","webpack://dsv/../src/series/polar/animation.ts","webpack://dsv/../src/series/radar/animation.ts","webpack://dsv/../src/series/radar/radar.ts","webpack://dsv/../src/chart/radar/radar-transformer.ts","webpack://dsv/../src/chart/radar/radar.ts","webpack://dsv/../src/chart/common/common-transformer.ts","webpack://dsv/../src/chart/common/common.ts","webpack://dsv/../src/series/link/tooltip-helper.ts","webpack://dsv/../src/mark/rule.ts","webpack://dsv/../src/data/transforms/link-dot-info.ts","webpack://dsv/../src/series/link/link.ts","webpack://dsv/../src/series/dot/tooltip-helper.ts","webpack://dsv/../src/data/transforms/obj-flat.ts","webpack://dsv/../src/series/dot/config.ts","webpack://dsv/../src/mark/text.ts","webpack://dsv/../src/series/dot/dot.ts","webpack://dsv/../src/constant/scroll-bar.ts","webpack://dsv/../src/chart/sequence/sequence-transformer.ts","webpack://dsv/../src/chart/sequence/sequence.ts","webpack://dsv/../src/chart/histogram/base/histogram-base-transformer.ts","webpack://dsv/../src/chart/histogram/base/base.ts","webpack://dsv/../src/chart/histogram/histogram-transformer.ts","webpack://dsv/../src/chart/histogram/histogram.ts","webpack://dsv/../src/chart/histogram/3d/histogram-3d.ts","webpack://dsv/../src/series/polar/progress-like/progress-like.ts","webpack://dsv/../src/series/polar/progress-like/animation.ts","webpack://dsv/../src/series/progress/circular/circular-transformer.ts","webpack://dsv/../src/series/progress/circular/circular.ts","webpack://dsv/../src/chart/polar/progress-like/progress-like-transformer.ts","webpack://dsv/../src/chart/progress/circular/circular-progress-transformer.ts","webpack://dsv/../src/chart/progress/circular/circular.ts","webpack://dsv/../src/series/gauge/animation.ts","webpack://dsv/../src/series/gauge/gauge-pointer-transformer.ts","webpack://dsv/../src/series/gauge/pointer-tooltip-helper.ts","webpack://dsv/../src/series/gauge/gauge-pointer.ts","webpack://dsv/../src/series/gauge/gauge-transformer.ts","webpack://dsv/../src/series/gauge/gauge.ts","webpack://dsv/../src/chart/gauge/gauge-transformer.ts","webpack://dsv/../src/chart/gauge/gauge.ts","webpack://dsv/../src/chart/word-cloud/base/word-cloud-base-transformer.ts","webpack://dsv/../src/chart/word-cloud/base/base.ts","webpack://dsv/../src/series/word-cloud/config.ts","webpack://dsv/../src/series/word-cloud/base.ts","webpack://dsv/../src/series/word-cloud/animation.ts","webpack://dsv/../src/shapes.ts","webpack://dsv/../src/common/random.ts","webpack://dsv/../src/util.ts","webpack://dsv/../src/base.ts","webpack://dsv/../src/spirals.ts","webpack://dsv/../src/cloud-layout.ts","webpack://dsv/../src/image.ts","webpack://dsv/../src/grid-layout.ts","webpack://dsv/../src/fast-layout.ts","webpack://dsv/../src/wordcloud.ts","webpack://dsv/../src/segmentation.ts","webpack://dsv/../src/sqrt-scale.ts","webpack://dsv/../src/wordle.ts","webpack://dsv/../src/filling.ts","webpack://dsv/../src/cloud-shape-layout.ts","webpack://dsv/../src/layout.ts","webpack://dsv/../src/wordcloud-shape.ts","webpack://dsv/../src/series/word-cloud/word-cloud.ts","webpack://dsv/../src/chart/word-cloud/word-cloud.ts","webpack://dsv/../src/series/word-cloud/word-cloud-3d.ts","webpack://dsv/../src/chart/word-cloud/3d/word-cloud-3d-transformer.ts","webpack://dsv/../src/chart/word-cloud/3d/word-cloud-3d.ts","webpack://dsv/../src/data/transforms/funnel.ts","webpack://dsv/../src/constant/funnel.ts","webpack://dsv/../src/series/funnel/tooltip-helper.ts","webpack://dsv/../src/mark/polygon/base-polygon.ts","webpack://dsv/../src/mark/polygon/polygon.ts","webpack://dsv/../src/series/funnel/constant.ts","webpack://dsv/../src/series/funnel/funnel-transformer.ts","webpack://dsv/../src/series/funnel/funnel.ts","webpack://dsv/../src/chart/funnel/funnel-transformer.ts","webpack://dsv/../src/chart/funnel/funnel.ts","webpack://dsv/../src/mark/polygon/pyramid-3d.ts","webpack://dsv/../src/series/funnel/3d/funnel-3d-transformer.ts","webpack://dsv/../src/series/funnel/3d/funnel-3d.ts","webpack://dsv/../src/chart/funnel/3d/funnel-3d.ts","webpack://dsv/../src/series/progress/linear/animation.ts","webpack://dsv/../src/series/progress/linear/tooltip-helper.ts","webpack://dsv/../src/series/progress/linear/linear.ts","webpack://dsv/../src/chart/progress/linear/linear-progress-transformer.ts","webpack://dsv/../src/chart/progress/linear/linear.ts","webpack://dsv/../src/series/util/label-mark.ts","webpack://dsv/../src/series/range-column/tooltip-helper.ts","webpack://dsv/../src/series/range-column/animation.ts","webpack://dsv/../src/series/range-column/constant.ts","webpack://dsv/../src/series/range-column/range-column-transformer.ts","webpack://dsv/../src/series/range-column/range-column.ts","webpack://dsv/../src/chart/range-column/range-column-transformer.ts","webpack://dsv/../src/chart/range-column/range-column.ts","webpack://dsv/../src/series/range-column/3d/range-column-3d.ts","webpack://dsv/../src/chart/range-column/3d/range-column-3d-transformer.ts","webpack://dsv/../src/chart/range-column/3d/range-column-3d.ts","webpack://dsv/../src/series/sunburst/animation/utils.ts","webpack://dsv/../src/series/sunburst/animation/enter.ts","webpack://dsv/../src/series/sunburst/animation/exit.ts","webpack://dsv/../src/series/sunburst/animation/preset.ts","webpack://dsv/../src/format.ts","webpack://dsv/../src/data/transforms/flatten.ts","webpack://dsv/../src/treemap/dice.ts","webpack://dsv/../src/toPercent.ts","webpack://dsv/../src/common/toValidNumber.ts","webpack://dsv/../src/sunburst/layout.ts","webpack://dsv/../src/data/transforms/sunburst.ts","webpack://dsv/../src/constant/sunburst.ts","webpack://dsv/../src/series/sunburst/tooltip-helper.ts","webpack://dsv/../src/util/hierarchy.ts","webpack://dsv/../src/data/transforms/drill.ts","webpack://dsv/../src/interaction/drill/drillable.ts","webpack://dsv/../src/series/util/hierarchy.ts","webpack://dsv/../src/series/sunburst/sunburst.ts","webpack://dsv/../src/chart/sunburst/sunburst-transformer.ts","webpack://dsv/../src/chart/sunburst/sunburst.ts","webpack://dsv/../src/lcg.ts","webpack://dsv/../src/circle-packing/enclose.ts","webpack://dsv/../src/circle-packing/siblings.ts","webpack://dsv/../src/circle-packing/layout.ts","webpack://dsv/../src/data/transforms/circle-packing.ts","webpack://dsv/../src/series/circle-packing/tooltip-helper.ts","webpack://dsv/../src/series/circle-packing/animation.ts","webpack://dsv/../src/series/circle-packing/circle-packing.ts","webpack://dsv/../src/chart/circle-packing/circle-packing-transformer.ts","webpack://dsv/../src/chart/circle-packing/circle-packing.ts","webpack://dsv/../src/treemap/slice.ts","webpack://dsv/../src/treemap/sliceDice.ts","webpack://dsv/../src/treemap/squarify.ts","webpack://dsv/../src/treemap/layout.ts","webpack://dsv/../src/treemap/binary.ts","webpack://dsv/../src/treemap/transform.ts","webpack://dsv/../src/data/transforms/hierarchy-dimension-statistics.ts","webpack://dsv/../src/series/treemap/tooltip-helper.ts","webpack://dsv/../src/series/treemap/animation.ts","webpack://dsv/../src/series/treemap/treemap-transform.ts","webpack://dsv/../src/series/treemap/treemap.ts","webpack://dsv/../src/chart/treemap/treemap-transformer.ts","webpack://dsv/../src/chart/treemap/treemap.ts","webpack://dsv/../src/data/transforms/waterfall.ts","webpack://dsv/../src/series/waterfall/animation.ts","webpack://dsv/../src/data/transforms/dimension-data.ts","webpack://dsv/../src/series/base/group.ts","webpack://dsv/../src/series/waterfall/waterfall-transformer.ts","webpack://dsv/../src/component/label/util.ts","webpack://dsv/../src/series/waterfall/waterfall.ts","webpack://dsv/../src/chart/waterfall/waterfall-transformer.ts","webpack://dsv/../src/chart/waterfall/waterfall.ts","webpack://dsv/../src/constant/box-plot.ts","webpack://dsv/../src/data/transforms/box-plot.ts","webpack://dsv/../src/series/box-plot/tooltip-helper.ts","webpack://dsv/../src/direction.ts","webpack://dsv/../src/graph/glyph-element.ts","webpack://dsv/../src/view/glyph.ts","webpack://dsv/../src/glyph/boxplot.ts","webpack://dsv/../src/mark/box-plot.ts","webpack://dsv/../src/series/box-plot/box-plot.ts","webpack://dsv/../src/chart/box-plot/box-plot-transformer.ts","webpack://dsv/../src/chart/box-plot/box-plot.ts","webpack://dsv/../src/hierarchy.ts","webpack://dsv/../src/data/transforms/sankey.ts","webpack://dsv/../src/data/transforms/sankey-nodes.ts","webpack://dsv/../src/data/transforms/sankey-links.ts","webpack://dsv/../src/series/sankey/tooltip-helper.ts","webpack://dsv/../src/series/sankey/animation.ts","webpack://dsv/../src/glyph/link-path.ts","webpack://dsv/../src/mark/link-path.ts","webpack://dsv/../src/series/sankey/sankey-transformer.ts","webpack://dsv/../src/series/sankey/sankey.ts","webpack://dsv/../src/chart/sankey/sankey-transformer.ts","webpack://dsv/../src/common/clampRange.ts","webpack://dsv/../src/scrollbar/register.ts","webpack://dsv/../src/scrollbar/scrollbar.ts","webpack://dsv/../src/scrollbar/scrollbar-plugin.ts","webpack://dsv/../src/scrollbar/module.ts","webpack://dsv/../src/chart/sankey/sankey.ts","webpack://dsv/../src/series/range-area/tooltip-helper.ts","webpack://dsv/../src/series/range-area/range-area.ts","webpack://dsv/../src/chart/range-area/range-area-transformer.ts","webpack://dsv/../src/chart/range-area/range-area.ts","webpack://dsv/../src/semantic-marks/cell.ts","webpack://dsv/../src/mark/cell.ts","webpack://dsv/../src/series/heatmap/animation.ts","webpack://dsv/../src/series/heatmap/tooltip-helper.ts","webpack://dsv/../src/series/heatmap/heatmap-transformer.ts","webpack://dsv/../src/series/heatmap/heatmap.ts","webpack://dsv/../src/chart/heatmap/heatmap-transformer.ts","webpack://dsv/../src/chart/heatmap/heatmap.ts","webpack://dsv/../src/extent.ts","webpack://dsv/../src/constant/correlation.ts","webpack://dsv/../src/data/transforms/correlation.ts","webpack://dsv/../src/data/transforms/correlation-center.ts","webpack://dsv/../src/glyph/ripple.ts","webpack://dsv/../src/mark/ripple.ts","webpack://dsv/../src/series/correlation/animation.ts","webpack://dsv/../src/series/correlation/correlation-transformer.ts","webpack://dsv/../src/series/correlation/correlation.ts","webpack://dsv/../src/chart/correlation/correlation-transformer.ts","webpack://dsv/../src/chart/correlation/correlation.ts","webpack://dsv/../src/component/axis/cartesian/time-axis.ts","webpack://dsv/../src/log-nice-mixin.ts","webpack://dsv/../src/log-scale.ts","webpack://dsv/../src/component/axis/cartesian/log-axis.ts","webpack://dsv/../src/symlog-scale.ts","webpack://dsv/../src/component/axis/cartesian/symlog-axis.ts","webpack://dsv/../src/component/legend/util.ts","webpack://dsv/../src/component/legend/discrete/util.ts","webpack://dsv/../src/legend/base.ts","webpack://dsv/../src/pager/register.ts","webpack://dsv/../src/pager/pager.ts","webpack://dsv/../src/slider/register.ts","webpack://dsv/../src/legend/register.ts","webpack://dsv/../src/legend/discrete/discrete.ts","webpack://dsv/../src/data/transforms/legend-data/discrete/discrete.ts","webpack://dsv/../src/component/legend/base-legend.ts","webpack://dsv/../src/component/legend/discrete/legend.ts","webpack://dsv/../src/data/transforms/legend-data/continuous/continuous.ts","webpack://dsv/../src/slider/slider.ts","webpack://dsv/../src/legend/color/color.ts","webpack://dsv/../src/legend/util.ts","webpack://dsv/../src/legend/size/size.ts","webpack://dsv/../src/component/legend/continuous/util.ts","webpack://dsv/../src/component/legend/continuous/legend.ts","webpack://dsv/../src/component/tooltip/utils/show-tooltip.ts","webpack://dsv/../src/component/tooltip/utils/get-spec.ts","webpack://dsv/../src/component/tooltip/constant.ts","webpack://dsv/../src/component/tooltip/processor/base.ts","webpack://dsv/../src/component/tooltip/processor/dimension-tooltip.ts","webpack://dsv/../src/component/tooltip/processor/group-tooltip.ts","webpack://dsv/../src/component/tooltip/processor/mark-tooltip.ts","webpack://dsv/../src/component/tooltip/processor/util.ts","webpack://dsv/../src/component/tooltip/tooltip-transformer.ts","webpack://dsv/../src/component/tooltip/tooltip.ts","webpack://dsv/../src/crosshair/base.ts","webpack://dsv/../src/crosshair/register.ts","webpack://dsv/../src/crosshair/line.ts","webpack://dsv/../src/crosshair/rect.ts","webpack://dsv/../src/component/crosshair/config.ts","webpack://dsv/../src/component/crosshair/base.ts","webpack://dsv/../src/component/crosshair/utils/cartesian.ts","webpack://dsv/../src/component/crosshair/cartesian.ts","webpack://dsv/../src/crosshair/sector.ts","webpack://dsv/../src/crosshair/polygon.ts","webpack://dsv/../src/crosshair/circle.ts","webpack://dsv/../src/component/crosshair/utils/polar.ts","webpack://dsv/../src/component/crosshair/polar.ts","webpack://dsv/../src/component/data-zoom/util.ts","webpack://dsv/../src/component/data-zoom/data-filter-base-component.ts","webpack://dsv/../src/common/simplify.ts","webpack://dsv/../src/data-zoom/config.ts","webpack://dsv/../src/data-zoom/type.ts","webpack://dsv/../src/data-zoom/data-zoom.ts","webpack://dsv/../src/data-zoom/register.ts","webpack://dsv/../src/component/data-zoom/data-zoom/data-zoom-transformer.ts","webpack://dsv/../src/component/data-zoom/data-zoom/data-zoom.ts","webpack://dsv/../src/component/data-zoom/scroll-bar/scroll-bar.ts","webpack://dsv/../src/component/indicator/util.ts","webpack://dsv/../src/indicator/config.ts","webpack://dsv/../src/indicator/register.ts","webpack://dsv/../src/indicator/indicator.ts","webpack://dsv/../src/component/indicator/indicator.ts","webpack://dsv/../src/constant/marker.ts","webpack://dsv/../src/component/marker/utils.ts","webpack://dsv/../src/marker/register.ts","webpack://dsv/../src/util/limit-shape.ts","webpack://dsv/../src/marker/base.ts","webpack://dsv/../src/marker/animate/common.ts","webpack://dsv/../src/marker/animate/clip-in.ts","webpack://dsv/../src/marker/animate/fade-in.ts","webpack://dsv/../src/marker/animate/fade-out.ts","webpack://dsv/../src/marker/animate/call-in.ts","webpack://dsv/../src/marker/animate/animate.ts","webpack://dsv/../src/marker/common-line.ts","webpack://dsv/../src/marker/type.ts","webpack://dsv/../src/marker/config.ts","webpack://dsv/../src/marker/line.ts","webpack://dsv/../src/component/marker/mark-line/util.ts","webpack://dsv/../src/data/transforms/aggregation.ts","webpack://dsv/../src/data/transforms/marker-filter.ts","webpack://dsv/../src/component/marker/base-marker.ts","webpack://dsv/../src/data/transforms/regression.ts","webpack://dsv/../src/component/marker/mark-line/base-mark-line.ts","webpack://dsv/../src/component/marker/mark-line/cartesian-mark-line.ts","webpack://dsv/../src/segment/arc-segment.ts","webpack://dsv/../src/marker/arc-line.ts","webpack://dsv/../src/component/marker/mark-line/polar-mark-line.ts","webpack://dsv/../src/title/register.ts","webpack://dsv/../src/title/title.ts","webpack://dsv/../src/component/title/title.ts","webpack://dsv/../src/marker/area.ts","webpack://dsv/../src/component/marker/mark-area/base-mark-area.ts","webpack://dsv/../src/component/marker/mark-area/cartesian-mark-area.ts","webpack://dsv/../src/marker/arc-area.ts","webpack://dsv/../src/component/marker/mark-area/polar-mark-area.ts","webpack://dsv/../src/player/controller/assets/index.ts","webpack://dsv/../src/player/controller/icon/icon.ts","webpack://dsv/../src/player/controller/constant.ts","webpack://dsv/../src/player/controller/controller.ts","webpack://dsv/../src/player/constant.ts","webpack://dsv/../src/player/type/direction.ts","webpack://dsv/../src/player/utils.ts","webpack://dsv/../src/player/base-player.ts","webpack://dsv/../src/player/register.ts","webpack://dsv/../src/player/type/event.ts","webpack://dsv/../src/player/discrete-player.ts","webpack://dsv/../src/player/continuous-player.ts","webpack://dsv/../src/component/player/utils/transform.ts","webpack://dsv/../src/component/player/utils/orient.ts","webpack://dsv/../src/component/player/player.ts","webpack://dsv/../src/label/dataLabel.ts","webpack://dsv/../src/component/label.ts","webpack://dsv/../src/component/label/base-label.ts","webpack://dsv/../src/mark/label.ts","webpack://dsv/../src/component/label/label-transformer.ts","webpack://dsv/../src/component/label/label.ts","webpack://dsv/../src/component/label/total-label.ts","webpack://dsv/../src/util/polar.ts","webpack://dsv/../src/marker/point.ts","webpack://dsv/../src/component/marker/mark-point/base-mark-point.ts","webpack://dsv/../src/component/marker/mark-point/cartesian-mark-point.ts","webpack://dsv/../src/component/marker/mark-point/polar-mark-point.ts","webpack://dsv/../src/component/marker/mark-point/geo-mark-point.ts","webpack://dsv/../src/graphics/polygon.ts","webpack://dsv/../src/brush/type.ts","webpack://dsv/../src/brush/config.ts","webpack://dsv/../src/brush/brush.ts","webpack://dsv/../src/brush/register.ts","webpack://dsv/../src/component/brush/brush.ts","webpack://dsv/../src/component/custom-mark/custom-mark.ts","webpack://dsv/../src/geo/invariant.ts","webpack://dsv/../src/component/map-label/layout.ts","webpack://dsv/../src/component/map-label/component.ts","webpack://dsv/../src/layout/grid-layout/grid-layout.ts","webpack://dsv/../src/layout/layout3d/index.ts","webpack://dsv/../src/poptip/poptip.ts","webpack://dsv/../src/poptip/contribution.ts","webpack://dsv/../src/poptip/poptip-plugin.ts","webpack://dsv/../src/poptip/module.ts","webpack://dsv/../src/component/poptip/index.ts","webpack://dsv/../src/plugin/components/tooltip-handler/constants.ts","webpack://dsv/../src/plugin/components/tooltip-handler/utils/common.ts","webpack://dsv/../src/plugin/components/tooltip-handler/utils/position.ts","webpack://dsv/../src/plugin/components/tooltip-handler/base.ts","webpack://dsv/../src/plugin/components/tooltip-handler/utils/style.ts","webpack://dsv/../src/plugin/components/register.ts","webpack://dsv/../src/plugin/components/tooltip-handler/utils/svg.ts","webpack://dsv/../src/plugin/components/tooltip-handler/dom-tooltip-handler.ts","webpack://dsv/../src/tooltip/util.ts","webpack://dsv/../src/tooltip/config.ts","webpack://dsv/../src/tooltip/register.ts","webpack://dsv/../src/tooltip/tooltip.ts","webpack://dsv/../src/plugin/components/tooltip-handler/utils/attribute.ts","webpack://dsv/../src/plugin/components/tooltip-handler/canvas-tooltip-handler.ts","webpack://dsv/../src/format/number/specifier.ts","webpack://dsv/../src/format/number/formatDecimal.ts","webpack://dsv/../src/format/number/formatGroup.ts","webpack://dsv/../src/format/number/formatRounded.ts","webpack://dsv/../src/format/number/formatTrim.ts","webpack://dsv/../src/format/number/number.ts","webpack://dsv/../src/plugin/chart/register.ts","webpack://dsv/../src/plugin/chart/formatter/formatter.ts","webpack://dsv/../src/mark/image.ts","webpack://dsv/../src/vchart-all.ts","webpack://dsv/../src/utils/chart.ts","webpack://dsv/../src/utils/equal.ts","webpack://dsv/../src/character/chart/graphic/vchart-graphic.ts","webpack://dsv/../src/character/chart/graphic/vchart-graphic-render.ts","webpack://dsv/../src/character/chart/graphic/vchart-graphic-picker.ts","webpack://dsv/../src/character/chart/graphic/picker-interceptor.ts","webpack://dsv/../src/character/component/graphic/GroupComponent/component-group-graphic.ts","webpack://dsv/../src/character/component/graphic/GroupComponent/component-group-graphic-render.ts","webpack://dsv/../src/plugins/chartModules.ts","webpack://dsv/../src/register.ts","webpack://dsv/../src/ts-types/table-engine.ts","webpack://dsv/../src/tools/global.ts","webpack://dsv/../src/layout/chart-helper/zero-align.ts","webpack://dsv/../src/scenegraph/utils/padding.ts","webpack://dsv/../src/scenegraph/utils/get-prop.ts","webpack://dsv/../src/layout/chart-helper/tick-align.ts","webpack://dsv/../src/layout/chart-helper/get-axis-config.ts","webpack://dsv/../src/spec/clone-deep.ts","webpack://dsv/../src/components/util/transform.ts","webpack://dsv/../src/components/axis/get-axis-attributes.ts","webpack://dsv/../src/layout/chart-helper/get-chart-spec.ts","webpack://dsv/../src/ts-types/new-data-set.ts","webpack://dsv/../src/tools/NumberMap.ts","webpack://dsv/../src/layout/tree-helper.ts","webpack://dsv/../src/layout/layout-helper.ts","webpack://dsv/../src/layout/cell-range/simple-cell-range.ts","webpack://dsv/../src/layout/simple-header-layout.ts","webpack://dsv/../src/tools/sort.ts","webpack://dsv/../src/tools/util.ts","webpack://dsv/../src/event/EventTarget.ts","webpack://dsv/../src/dataset/statistics-helper.ts","webpack://dsv/../src/data/DataSource.ts","webpack://dsv/../src/data/CachedDataSource.ts","webpack://dsv/../src/scenegraph/utils/font.ts","webpack://dsv/../src/tools/Rect.ts","webpack://dsv/../src/tools/calc.ts","webpack://dsv/../src/core/tableHelper.ts","webpack://dsv/../src/body-helper/style.ts","webpack://dsv/../src/tools/env.ts","webpack://dsv/../src/core/style.ts","webpack://dsv/../src/tools/style.ts","webpack://dsv/../src/ts-types/common.ts","webpack://dsv/../src/core/TABLE_EVENT_TYPE.ts","webpack://dsv/../src/tools/isx.ts","webpack://dsv/../src/tools/debounce.ts","webpack://dsv/../src/event/EventHandler.ts","webpack://dsv/../src/themes/DARK.ts","webpack://dsv/../src/themes/BRIGHT.ts","webpack://dsv/../src/themes/ARCO.ts","webpack://dsv/../src/themes/DEFAULT.ts","webpack://dsv/../src/themes/SIMPLIFY.ts","webpack://dsv/../src/plugins/themes.ts","webpack://dsv/../src/themes/component.ts","webpack://dsv/../src/themes/theme.ts","webpack://dsv/../src/themes.ts","webpack://dsv/../src/vrender.ts","webpack://dsv/../src/scenegraph/utils/get-cell-merge.ts","webpack://dsv/../src/jsx/graphicType.ts","webpack://dsv/../src/scenegraph/graphic/icon.ts","webpack://dsv/../src/components/react/react-custom-layout.ts","webpack://dsv/../src/scenegraph/component/custom.ts","webpack://dsv/../src/plugins/icons.ts","webpack://dsv/../src/scenegraph/graphic/group.ts","webpack://dsv/../src/scenegraph/utils/keep-aspect-ratio.ts","webpack://dsv/../src/scenegraph/utils/cell-pos.ts","webpack://dsv/../src/scenegraph/utils/cell-border-stroke-width.ts","webpack://dsv/../src/scenegraph/component/cell-content.ts","webpack://dsv/../src/scenegraph/utils/get-hierarchy-offset.ts","webpack://dsv/../src/scenegraph/utils/break-string.ts","webpack://dsv/../src/scenegraph/utils/text-icon-layout.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/image-cell.ts","webpack://dsv/../src/scenegraph/utils/deal-promise-data.ts","webpack://dsv/../src/plugins/invert-highlight.ts","webpack://dsv/../src/scenegraph/group-creater/cell-helper.ts","webpack://dsv/../src/scenegraph/utils/is-merge-cell-group.ts","webpack://dsv/../src/checkbox/checkbox.ts","webpack://dsv/../src/checkbox/register.ts","webpack://dsv/../src/radio/register.ts","webpack://dsv/../src/radio/radio.ts","webpack://dsv/../src/scenegraph/layout/height-util.ts","webpack://dsv/../src/scenegraph/utils/text-measure.ts","webpack://dsv/../src/scenegraph/layout/compute-row-height.ts","webpack://dsv/../src/tools/merge-range.ts","webpack://dsv/../src/scenegraph/layout/update-height.ts","webpack://dsv/../src/scenegraph/layout/update-width.ts","webpack://dsv/../src/scenegraph/component/drill-icon.ts","webpack://dsv/../src/scenegraph/component/cell-mover.ts","webpack://dsv/../src/scenegraph/component/util.ts","webpack://dsv/../src/scenegraph/component/table-component.ts","webpack://dsv/../src/scenegraph/style/frame-border.ts","webpack://dsv/../src/scenegraph/graphic/chart.ts","webpack://dsv/../src/scenegraph/graphic/contributions/chart-render-helper.ts","webpack://dsv/../src/scenegraph/graphic/contributions/chart-render.ts","webpack://dsv/../src/scenegraph/graphic/contributions/image-contribution-render.ts","webpack://dsv/../src/state/hover/is-cell-hover.ts","webpack://dsv/../src/state/select/is-cell-select-highlight.ts","webpack://dsv/../src/scenegraph/graphic/contributions/group-contribution-render.ts","webpack://dsv/../src/scenegraph/graphic/contributions/rect-contribution-render.ts","webpack://dsv/../src/scenegraph/graphic/contributions/draw-interceptor.ts","webpack://dsv/../src/scenegraph/graphic/contributions/text-contribution-render.ts","webpack://dsv/../src/scenegraph/graphic/contributions/index.ts","webpack://dsv/../src/scenegraph/layout/compute-col-width.ts","webpack://dsv/../src/scenegraph/utils/empty-group.ts","webpack://dsv/../src/scenegraph/group-creater/column-helper.ts","webpack://dsv/../src/scenegraph/group-creater/column.ts","webpack://dsv/../src/scenegraph/group-creater/progress/create-group-for-first-screen.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/util.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/update-auto-column.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/dynamic-set-x.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/update-auto-row.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/dynamic-set-y.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/sort-vertical.ts","webpack://dsv/../src/scenegraph/group-creater/progress/update-position/sort-horizontal.ts","webpack://dsv/../src/scenegraph/stick-text/index.ts","webpack://dsv/../src/scenegraph/group-creater/progress/proxy.ts","webpack://dsv/../src/scenegraph/layout/move-cell.ts","webpack://dsv/../src/scenegraph/select/update-select-border.ts","webpack://dsv/../src/scenegraph/select/create-select-border.ts","webpack://dsv/../src/scenegraph/select/move-select-border.ts","webpack://dsv/../src/scenegraph/select/delete-select-border.ts","webpack://dsv/../src/scenegraph/layout/update-row.ts","webpack://dsv/../src/scenegraph/layout/frozen-react.ts","webpack://dsv/../src/scenegraph/layout/frozen.ts","webpack://dsv/../src/scenegraph/refresh-node/update-chart.ts","webpack://dsv/../src/scenegraph/group-creater/init-scenegraph.ts","webpack://dsv/../src/scenegraph/utils/update-container.ts","webpack://dsv/../src/scenegraph/icon/icon-update.ts","webpack://dsv/../src/scenegraph/style/corner-cell.ts","webpack://dsv/../src/scenegraph/layout/update-col.ts","webpack://dsv/../src/scenegraph/animation/appear.ts","webpack://dsv/../src/scenegraph/select/update-select-style.ts","webpack://dsv/../src/scenegraph/scenegraph.ts","webpack://dsv/../src/state/common/check-in-select.ts","webpack://dsv/../src/state/hover/update-cell.ts","webpack://dsv/../src/state/hover/col.ts","webpack://dsv/../src/state/hover/row.ts","webpack://dsv/../src/state/hover/single.ts","webpack://dsv/../src/state/hover/update-position.ts","webpack://dsv/../src/state/frozen/index.ts","webpack://dsv/../src/state/sort/index.ts","webpack://dsv/../src/state/select/update-position.ts","webpack://dsv/../src/ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE.ts","webpack://dsv/../src/state/drill/index.ts","webpack://dsv/../src/state/spark-line/index.ts","webpack://dsv/../src/state/cell-move/adjust-header.ts","webpack://dsv/../src/state/cell-move/index.ts","webpack://dsv/../src/scenegraph/utils/icon.ts","webpack://dsv/../src/state/resize/update-resize-column.ts","webpack://dsv/../src/state/radio/radio.ts","webpack://dsv/../src/state/checkbox/checkbox.ts","webpack://dsv/../src/state/resize/update-resize-row.ts","webpack://dsv/../src/state/select/custom-select.ts","webpack://dsv/../src/state/state.ts","webpack://dsv/../src/event/media-click.ts","webpack://dsv/../src/event/drill.ts","webpack://dsv/../src/event/sparkline-event.ts","webpack://dsv/../src/event/scroll.ts","webpack://dsv/../src/event/helper.ts","webpack://dsv/../src/event/listener/table-group.ts","webpack://dsv/../src/event/listener/scroll-bar.ts","webpack://dsv/../src/tools/pixel-ratio.ts","webpack://dsv/../src/event/listener/container-dom.ts","webpack://dsv/../src/event/listener/touch.ts","webpack://dsv/../src/event/pivot-chart/axis-click.ts","webpack://dsv/../src/event/pivot-chart/axis-hover.ts","webpack://dsv/../src/event/list-table/checkbox.ts","webpack://dsv/../src/tools/icons.ts","webpack://dsv/../src/body-helper/body-helper.ts","webpack://dsv/../src/tools/dom.ts","webpack://dsv/../src/components/menu/dom/logic/MenuElement.ts","webpack://dsv/../src/components/menu/dom/logic/MenuElementStyle.ts","webpack://dsv/../src/header-helper/header-helper.ts","webpack://dsv/../src/core/FouseInput.ts","webpack://dsv/../src/layout/row-height-map.ts","webpack://dsv/../src/core/row-series-number-helper.ts","webpack://dsv/../src/core/utils/get-cell-position.ts","webpack://dsv/../src/header-helper/style.ts","webpack://dsv/../src/ts-types/column/style.ts","webpack://dsv/../src/plugins/custom-cell-style.ts","webpack://dsv/../src/core/style-helper.ts","webpack://dsv/../src/core/animation.ts","webpack://dsv/../src/core/BaseTable.ts","webpack://dsv/../src/edit/editors.ts","webpack://dsv/../src/edit/edit-manager.ts","webpack://dsv/../src/core/group-helper.ts","webpack://dsv/../src/core/record-helper.ts","webpack://dsv/../src/tools/update-row.ts","webpack://dsv/../src/ListTable.ts","webpack://dsv/../src/components/util/orient.ts","webpack://dsv/../src/components/axis/band-scale.ts","webpack://dsv/../src/components/util/register.ts","webpack://dsv/../src/axis/tick-data/ticks.ts","webpack://dsv/../src/components/axis/linear-scale.ts","webpack://dsv/../src/components/axis/label-overlap.ts","webpack://dsv/../src/components/axis/axis.ts","webpack://dsv/../src/components/axis/get-axis-component-size.ts","webpack://dsv/../src/empty-tip/empty-tip.ts","webpack://dsv/../src/empty-tip/register.ts","webpack://dsv/../src/components/empty-tip/empty-tip.ts","webpack://dsv/../src/components/legend/discrete-legend/get-discrete-legend-attributes.ts","webpack://dsv/../src/components/legend/discrete-legend/discrete-legend.ts","webpack://dsv/../src/components/legend/continue-legend/get-continue-legend-attributes.ts","webpack://dsv/../src/components/legend/continue-legend/continue-legend.ts","webpack://dsv/../src/components/legend/create-legend.ts","webpack://dsv/../src/components/menu/dom/BaseMenu.ts","webpack://dsv/../src/components/menu/dom/logic/MenuContainer.ts","webpack://dsv/../src/components/menu/dom/Menu.ts","webpack://dsv/../src/components/menu/dom/MenuHandler.ts","webpack://dsv/../src/components/title/title.ts","webpack://dsv/../src/components/tooltip/BaseTooltip.ts","webpack://dsv/../src/components/tooltip/logic/BubbleTooltipElement.ts","webpack://dsv/../src/components/tooltip/logic/BubbleTooltipElementStyle.ts","webpack://dsv/../src/components/tooltip/Tooltip.ts","webpack://dsv/../src/components/tooltip/TooltipHandler.ts","webpack://dsv/../src/components/index.ts","webpack://dsv/../src/plugins/list-tree-stick-cell.ts","webpack://dsv/../src/chartModule.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/chart-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/checkbox-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/radio-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/spark-line-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/video-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/text-cell.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/progress-bar-cell.ts","webpack://dsv/../src/layout/chart-helper/get-axis-domain.ts","webpack://dsv/../src/scenegraph/group-creater/cell-type/index.ts","webpack://dsv/../src/ListTable-all.ts","webpack://dsv/../src/tools/diff-cell.ts","webpack://dsv/../src/layout/pivot-header-layout.ts","webpack://dsv/../src/dataset/flatDataToObject.ts","webpack://dsv/../src/tools/join.ts","webpack://dsv/../src/dataset/dataset.ts","webpack://dsv/../src/PivotTable.ts","webpack://dsv/../src/PivotTable-all.ts","webpack://dsv/../src/PivotChart.ts","webpack://dsv/../src/character/table/graphic/vtable-graphic.ts","webpack://dsv/../src/character/table/graphic/vtable-graphic-render.ts","webpack://dsv/../src/character/table/graphic/vtable-graphic-picker.ts","webpack://dsv/../src/module/graphic.ts","webpack://dsv/ranking-bar/ranking-bar-transformer.ts","webpack://dsv/ranking-bar/ranking-bar.ts","webpack://dsv/../src/utils/type.ts","webpack://dsv/../src/common/pad.ts","webpack://dsv/../src/common/toDate.ts","webpack://dsv/../src/time/formatUtils.ts","webpack://dsv/../src/character/common/utils/format.ts","webpack://dsv/../src/theme/builtin/default.ts","webpack://dsv/../src/utils/theme.ts","webpack://dsv/../src/store/common-store.ts","webpack://dsv/../src/store/runtime-store.ts","webpack://dsv/../src/constants/events.ts","webpack://dsv/../src/character/character-base.ts","webpack://dsv/../src/character/chart/utils/vchart-pick.ts","webpack://dsv/../src/constants/config.ts","webpack://dsv/../src/utils/merge.ts","webpack://dsv/../src/character/config-transform/config-process.ts","webpack://dsv/../src/character/chart/chart-config-process.ts","webpack://dsv/../src/character/chart/character-chart.ts","webpack://dsv/../src/character/chart/character/rankingBar.ts","webpack://dsv/../src/character/chart/character/scatter-bar.ts","webpack://dsv/../src/series/venn/util.ts","webpack://dsv/../src/series/venn/tooltip-helper.ts","webpack://dsv/../src/geo/constant.ts","webpack://dsv/../src/geo/circle-intersection.ts","webpack://dsv/../src/utils/path.ts","webpack://dsv/../src/animation.ts","webpack://dsv/../src/series/venn/animation.ts","webpack://dsv/../src/series/venn/venn-transform.ts","webpack://dsv/../src/utils/layout/loss.ts","webpack://dsv/../src/fmin/blas1.ts","webpack://dsv/../src/utils/layout/common.ts","webpack://dsv/../src/utils/layout/greedy-layout.ts","webpack://dsv/../src/fmin/linesearch.ts","webpack://dsv/../src/fmin/conjugate-gradient.ts","webpack://dsv/../src/utils/layout/constrained-mds-layout.ts","webpack://dsv/../src/fmin/nelder-mead.ts","webpack://dsv/../src/utils/layout/layout.ts","webpack://dsv/../src/utils/solution/common.ts","webpack://dsv/../src/utils/solution/normalize-solution.ts","webpack://dsv/../src/utils/solution/scale-solution.ts","webpack://dsv/../src/utils/label.ts","webpack://dsv/../src/venn.ts","webpack://dsv/../src/series/venn/venn.ts","webpack://dsv/../src/chart/venn/venn-transformer.ts","webpack://dsv/../src/chart/venn/venn.ts","webpack://dsv/../src/chart/liquid/liquid-transformer.ts","webpack://dsv/../src/series/liquid/animation.ts","webpack://dsv/../src/glyph/wave.ts","webpack://dsv/../src/mark/liquid.ts","webpack://dsv/../src/series/liquid/util.ts","webpack://dsv/../src/series/liquid/tooltip-helper.ts","webpack://dsv/../src/series/liquid/liquid.ts","webpack://dsv/../src/chart/liquid/liquid.ts","webpack://dsv/../src/chart/mosaic/mosaic-transformer.ts","webpack://dsv/../src/series/mosaic/mosaic.ts","webpack://dsv/../src/chart/mosaic/mosaic.ts","webpack://dsv/../src/chart/pictogram/pictogram-transformer.ts","webpack://dsv/../src/series/pictogram/pictogram-transformer.ts","webpack://dsv/../src/series/pictogram/tooltip-helper.ts","webpack://dsv/../src/data/transforms/pictogram.ts","webpack://dsv/../src/series/pictogram/pictogram.ts","webpack://dsv/../src/chart/pictogram/pictogram.ts","webpack://dsv/../src/character/chart/character/vchart.ts","webpack://dsv/../src/character/chart/character/wave-scatter.ts","webpack://dsv/../src/character/component/component-config-process.ts","webpack://dsv/../src/character/component/character-component.ts","webpack://dsv/../src/character/component/graphic/BaseComponentWithText.ts","webpack://dsv/../src/character/component/graphic/ArcComponent.ts","webpack://dsv/../src/character/component/character/arc.ts","webpack://dsv/../src/character/component/graphic/ImageComponent.ts","webpack://dsv/../src/character/component/character/image.ts","webpack://dsv/../src/character/component/graphic/LineComponent.ts","webpack://dsv/../src/character/component/character/line.ts","webpack://dsv/../src/character/component/graphic/PolygonComponent.ts","webpack://dsv/../src/character/component/character/polygon.ts","webpack://dsv/../src/character/component/graphic/RectComponent.ts","webpack://dsv/../src/character/component/character/rect.ts","webpack://dsv/../src/character/component/graphic/ShapeComponent.ts","webpack://dsv/../src/character/component/character/shape.ts","webpack://dsv/../src/character/component/graphic/TextComponent.ts","webpack://dsv/../src/character/component/character/text.ts","webpack://dsv/../src/timeline/register.ts","webpack://dsv/../src/timeline/timeline.ts","webpack://dsv/../src/character/component/graphic/TimelineComponent.ts","webpack://dsv/../src/character/component/character/timeline.ts","webpack://dsv/../src/character/component/graphic/UnitComponent.ts/Unit.ts","webpack://dsv/../src/character/component/graphic/UnitComponent.ts/UnitComponent.ts","webpack://dsv/../src/character/component/character/unit.ts","webpack://dsv/../src/character/table/table-config-process.ts","webpack://dsv/../src/character/table/character-table.ts","webpack://dsv/../src/character/table/character/pivot-chart.ts","webpack://dsv/../src/character/chart/runtime/common-spec.ts","webpack://dsv/../src/character/chart/runtime/ranking-bar.ts","webpack://dsv/../src/character/chart/runtime/wave-scatter.ts","webpack://dsv/../src/character/component/runtime/text.ts","webpack://dsv/../src/character/component/runtime/line.ts","webpack://dsv/../src/character/component/runtime/base.ts","webpack://dsv/../src/character/chart/runtime/series-spec.ts","webpack://dsv/../src/character/chart/runtime/const.ts","webpack://dsv/../src/character/chart/runtime/utils.ts","webpack://dsv/../src/interface/dsl/chart.ts","webpack://dsv/../src/character/chart/runtime/mark-style.ts","webpack://dsv/../src/character/chart/runtime/label-style.ts","webpack://dsv/../src/character/chart/runtime/total-label.ts","webpack://dsv/../src/character/common/runtime/common-layout.ts","webpack://dsv/../src/character/table/runtime/common-spec.ts","webpack://dsv/../src/character/table/runtime/cell-style.ts","webpack://dsv/../src/character/table/runtime/col-width.ts","webpack://dsv/../src/character/table/runtime/row-height.ts","webpack://dsv/../src/utils/table.ts","webpack://dsv/../src/character/table/runtime/table-type.ts","webpack://dsv/../src/character/table/runtime/table-theme.ts","webpack://dsv/../src/character/table/runtime/show-header.ts","webpack://dsv/../src/character/table/runtime/col-visible.ts","webpack://dsv/../src/character/table/runtime/row-visible.ts","webpack://dsv/../src/character/table/runtime/col-style.ts","webpack://dsv/../src/character/table/runtime/row-style.ts","webpack://dsv/../src/character/table/runtime/content-col-style.ts","webpack://dsv/../src/character/table/runtime/content-row-style.ts","webpack://dsv/../src/module/character.ts","webpack://dsv/../src/processor/component/common/utils.ts","webpack://dsv/../src/processor/processor-item.ts","webpack://dsv/../src/processor/chart/base.ts","webpack://dsv/../src/processor/constants/action.ts","webpack://dsv/../src/processor/chart/add.ts","webpack://dsv/../src/utils/isMatch.ts","webpack://dsv/../src/processor/chart/update.ts","webpack://dsv/../src/processor/chart/transformFunc/common/commonAppear.ts","webpack://dsv/../src/processor/chart/transformFunc/component/commonAppear.ts","webpack://dsv/../src/processor/chart/transformFunc/component/axisAppear.ts","webpack://dsv/../src/processor/chart/transformFunc/component/labelAppear.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/utils.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/transformArcVisibility.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/commonTransformMarkAppear.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/transformLineVisibility.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/transformRectVisibility.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/transformSymbolVisibility.ts","webpack://dsv/../src/processor/chart/transformFunc/transformMap.ts","webpack://dsv/../src/processor/chart/transformFunc/seriesmark/transformTextVisibility.ts","webpack://dsv/../src/processor/chart/transformFunc/common/chartAppear.ts","webpack://dsv/../src/utils/checkArrayOrder.ts","webpack://dsv/../src/processor/common/bounce-processor.ts","webpack://dsv/../src/processor/common/common.ts","webpack://dsv/../src/processor/component/common/bounce.ts","webpack://dsv/../src/processor/component/common/style.ts","webpack://dsv/../src/processor/chart/visibility.ts","webpack://dsv/../src/processor/chart/highlight.ts","webpack://dsv/../src/processor/chart/rankingBar/rankingBar.ts","webpack://dsv/../src/processor/chart/scatterBar/visibility.ts","webpack://dsv/../src/processor/chart/waveScatter/visibility.ts","webpack://dsv/../src/processor/common/utils.ts","webpack://dsv/../src/processor/common/scale-processor.ts","webpack://dsv/../src/processor/common/fade-processor.ts","webpack://dsv/../src/processor/common/move-processor.ts","webpack://dsv/../src/processor/common/wipe-processor.ts","webpack://dsv/../src/processor/component/common/visibility.ts","webpack://dsv/../src/processor/component/common/move.ts","webpack://dsv/../src/processor/component/common/scale.ts","webpack://dsv/../src/processor/component/image/image-visibility.ts","webpack://dsv/../src/processor/component/image/index.ts","webpack://dsv/../src/processor/common/base-visibility-processor.ts","webpack://dsv/../src/processor/common/clipRange-processor.ts","webpack://dsv/../src/processor/component/line/line-visibility.ts","webpack://dsv/../src/processor/component/line/index.ts","webpack://dsv/../src/processor/component/rect/rect-visibility.ts","webpack://dsv/../src/processor/component/rect/index.ts","webpack://dsv/../src/processor/component/shape/shape-visibility.ts","webpack://dsv/../src/processor/component/shape/index.ts","webpack://dsv/../src/processor/component/text/text-visibility.ts","webpack://dsv/../src/processor/component/text/index.ts","webpack://dsv/../src/processor/component/timeline/timeline-visibility.ts","webpack://dsv/../src/processor/component/timeline/index.ts","webpack://dsv/../src/processor/component/unit/unit-visibility.ts","webpack://dsv/../src/processor/component/unit/index.ts","webpack://dsv/../src/processor/component/polygon/polygon-visibility.ts","webpack://dsv/../src/processor/component/polygon/index.ts","webpack://dsv/../src/processor/component/arc/arc-visibility.ts","webpack://dsv/../src/processor/component/arc/index.ts","webpack://dsv/../src/processor/table/base.ts","webpack://dsv/../src/processor/table/transformFunc/common/commonAppear.ts","webpack://dsv/../src/processor/table/transformFunc/transformMap.ts","webpack://dsv/../src/processor/table/transformFunc/common/tableAppear.ts","webpack://dsv/../src/processor/table/visibility.ts","webpack://dsv/../src/processor/table/index.ts","webpack://dsv/../src/unit-template/unit-template.ts","webpack://dsv/../src/character/lottie/constant.ts","webpack://dsv/../src/graphic/Lottie.ts","webpack://dsv/../src/character/lottie/LottieComponent.ts","webpack://dsv/../src/character/lottie/lottie-runtime.ts","webpack://dsv/../src/character/lottie/lottie-file/loading1.ts","webpack://dsv/../src/character/lottie/lottie-file/loading2.ts","webpack://dsv/../src/character/lottie/lottie-file/loading3.ts","webpack://dsv/../src/character/lottie/lottie-character.ts","webpack://dsv/../src/processor/lottie/lottie-visibility.ts","webpack://dsv/../src/character/single-pie/SinglePieComponent.ts","webpack://dsv/../src/character/single-pie/constant.ts","webpack://dsv/../src/character/single-pie/single-pie-character.ts","webpack://dsv/../src/processor/single-pie/single-pie-visibility.ts","webpack://dsv/../src/character/dynamic-line/constant.ts","webpack://dsv/../src/character/dynamic-line/dynamic-line-runtime.ts","webpack://dsv/../src/character/dynamic-line/dynamic-line-character.ts","webpack://dsv/../src/character/poptip/PopTipComponent.ts","webpack://dsv/../src/character/poptip/constant.ts","webpack://dsv/../src/character/poptip/poptip-character.ts","webpack://dsv/../src/processor/poptip/poptip-visibility.ts","webpack://dsv/../src/label-item/label-item.ts","webpack://dsv/../src/character/label-item/LabelItemComponent.ts","webpack://dsv/../src/character/label-item/constant.ts","webpack://dsv/../src/character/label-item/label-item-character.ts","webpack://dsv/../src/processor/label-item/label-item-visibility.ts","webpack://dsv/../src/edit-action.ts","webpack://dsv/../src/edit.ts","webpack://dsv/../src/selection/edit-control/constants.ts","webpack://dsv/../src/selection/edit-control/transform-drag.ts","webpack://dsv/../src/utils/transform.ts","webpack://dsv/../src/selection/edit-control/transform-control.ts","webpack://dsv/../src/selection/edit-control/hover-control.ts","webpack://dsv/../src/selection/base-selection.ts","webpack://dsv/../src/selection/edit-control/richtext-control.ts","webpack://dsv/../src/selection/mixin/richtext.ts","webpack://dsv/../src/selection/richtext-selection-common.ts","webpack://dsv/../src/plugins/builtin-plugin/edit-module.ts","webpack://dsv/../src/plugins/builtin-plugin/richtext-edit-plugin.ts","webpack://dsv/../src/common/isRegExp.ts","webpack://dsv/../src/common/clone.ts","webpack://dsv/../../node_modules/.pnpm/zustand@5.0.3_@types+react@18.3.18_react@18.3.1/node_modules/zustand/esm/vanilla.mjs","webpack://dsv/../../node_modules/.pnpm/zustand@5.0.3_@types+react@18.3.18_react@18.3.1/node_modules/zustand/esm/react.mjs","webpack://dsv/./src/model/createSchema.ts","webpack://dsv/./src/model/createCode.ts","webpack://dsv/./src/model/index.ts","webpack://dsv/./src/Chart.tsx","webpack://dsv/./src/CodeEditor/CodeEditor.tsx","webpack://dsv/./src/App.tsx","webpack://dsv/./src/main.tsx"],"sourcesContent":["import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from '@jridgewell/gen-mapping';\nimport { traceSegment, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport type { TraceMap } from '@jridgewell/trace-mapping';\n\nexport type SourceMapSegmentObject = {\n column: number;\n line: number;\n name: string;\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type OriginalSource = {\n map: null;\n sources: Sources[];\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type MapSource = {\n map: TraceMap;\n sources: Sources[];\n source: string;\n content: null;\n ignore: false;\n};\n\nexport type Sources = OriginalSource | MapSource;\n\nconst SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false);\nconst EMPTY_SOURCES: Sources[] = [];\n\nfunction SegmentObject(\n source: string,\n line: number,\n column: number,\n name: string,\n content: string | null,\n ignore: boolean\n): SourceMapSegmentObject {\n return { source, line, column, name, content, ignore };\n}\n\nfunction Source(\n map: TraceMap,\n sources: Sources[],\n source: '',\n content: null,\n ignore: false\n): MapSource;\nfunction Source(\n map: null,\n sources: Sources[],\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource;\nfunction Source(\n map: TraceMap | null,\n sources: Sources[],\n source: string | '',\n content: string | null,\n ignore: boolean\n): Sources {\n return {\n map,\n sources,\n source,\n content,\n ignore,\n } as any;\n}\n\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport function MapSource(map: TraceMap, sources: Sources[]): MapSource {\n return Source(map, sources, '', null, false);\n}\n\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport function OriginalSource(\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource {\n return Source(null, EMPTY_SOURCES, source, content, ignore);\n}\n\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport function traceMappings(tree: MapSource): GenMapping {\n // TODO: Eventually support sourceRoot, which has to be removed because the sources are already\n // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.\n const gen = new GenMapping({ file: tree.map.file });\n const { sources: rootSources, map } = tree;\n const rootNames = map.names;\n const rootMappings = decodedMappings(map);\n\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n const genCol = segment[0];\n let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING;\n\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length !== 1) {\n const source = rootSources[segment[1]];\n traced = originalPositionFor(\n source,\n segment[2],\n segment[3],\n segment.length === 5 ? rootNames[segment[4]] : ''\n );\n\n // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n // respective segment into an original source.\n if (traced == null) continue;\n }\n\n const { column, line, name, content, source, ignore } = traced;\n\n maybeAddSegment(gen, i, genCol, source, line, column, name);\n if (source && content != null) setSourceContent(gen, source, content);\n if (ignore) setIgnore(gen, source, true);\n }\n }\n\n return gen;\n}\n\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport function originalPositionFor(\n source: Sources,\n line: number,\n column: number,\n name: string\n): SourceMapSegmentObject | null {\n if (!source.map) {\n return SegmentObject(source.source, line, column, name, source.content, source.ignore);\n }\n\n const segment = traceSegment(source.map, line, column);\n\n // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n if (segment == null) return null;\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length === 1) return SOURCELESS_MAPPING;\n\n return originalPositionFor(\n source.sources[segment[1]],\n segment[2],\n segment[3],\n segment.length === 5 ? source.map.names[segment[4]] : name\n );\n}\n","import { TraceMap } from '@jridgewell/trace-mapping';\n\nimport { OriginalSource, MapSource } from './source-map-tree';\n\nimport type { Sources, MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader, LoaderContext } from './types';\n\nfunction asArray(value: T | T[]): T[] {\n if (Array.isArray(value)) return value;\n return [value];\n}\n\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader\n): MapSourceType {\n const maps = asArray(input).map((m) => new TraceMap(m, ''));\n const map = maps.pop()!;\n\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length > 1) {\n throw new Error(\n `Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?'\n );\n }\n }\n\n let tree = build(map, loader, '', 0);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = MapSource(maps[i], [tree]);\n }\n return tree;\n}\n\nfunction build(\n map: TraceMap,\n loader: SourceMapLoader,\n importer: string,\n importerDepth: number\n): MapSourceType {\n const { resolvedSources, sourcesContent, ignoreList } = map;\n\n const depth = importerDepth + 1;\n const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => {\n // The loading context gives the loader more information about why this file is being loaded\n // (eg, from which importer). It also allows the loader to override the location of the loaded\n // sourcemap/original source, or to override the content in the sourcesContent field if it's\n // an unmodified source file.\n const ctx: LoaderContext = {\n importer,\n depth,\n source: sourceFile || '',\n content: undefined,\n ignore: undefined,\n };\n\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(ctx.source, ctx);\n\n const { source, content, ignore } = ctx;\n\n // If there is a sourcemap, then we need to recurse into it to load its source files.\n if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);\n\n // Else, it's an unmodified source file.\n // The contents of this unmodified source file can be overridden via the loader context,\n // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n // the importing sourcemap's `sourcesContent` field.\n const sourceContent =\n content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false;\n return OriginalSource(source, sourceContent, ignored);\n });\n\n return MapSource(map, children);\n}\n","import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';\n\nimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n declare file?: string | null;\n declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n declare sourceRoot?: string;\n declare names: string[];\n declare sources: (string | null)[];\n declare sourcesContent?: (string | null)[];\n declare version: 3;\n declare ignoreList: number[] | undefined;\n\n constructor(map: GenMapping, options: Options) {\n const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);\n this.version = out.version; // SourceMap spec says this should be first.\n this.file = out.file;\n this.mappings = out.mappings as SourceMap['mappings'];\n this.names = out.names as SourceMap['names'];\n this.ignoreList = out.ignoreList as SourceMap['ignoreList'];\n this.sourceRoot = out.sourceRoot;\n\n this.sources = out.sources as SourceMap['sources'];\n if (!options.excludeContent) {\n this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent'];\n }\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","import buildSourceMapTree from './build-source-map-tree';\nimport { traceMappings } from './source-map-tree';\nimport SourceMap from './source-map';\n\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type {\n SourceMapSegment,\n EncodedSourceMap,\n EncodedSourceMap as RawSourceMap,\n DecodedSourceMap,\n SourceMapInput,\n SourceMapLoader,\n LoaderContext,\n Options,\n} from './types';\nexport type { SourceMap };\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader,\n options?: boolean | Options\n): SourceMap {\n const opts =\n typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const tree = buildSourceMapTree(input, loader);\n return new SourceMap(traceMappings(tree), opts);\n}\n","type GeneratedColumn = number;\ntype SourcesIndex = number;\ntype SourceLine = number;\ntype SourceColumn = number;\ntype NamesIndex = number;\n\nexport type SourceMapSegment =\n | [GeneratedColumn]\n | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn]\n | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];\n\nexport const COLUMN = 0;\nexport const SOURCES_INDEX = 1;\nexport const SOURCE_LINE = 2;\nexport const SOURCE_COLUMN = 3;\nexport const NAMES_INDEX = 4;\n","import { SetArray, put, remove } from '@jridgewell/set-array';\nimport { encode } from '@jridgewell/sourcemap-codec';\nimport { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport {\n COLUMN,\n SOURCES_INDEX,\n SOURCE_LINE,\n SOURCE_COLUMN,\n NAMES_INDEX,\n} from './sourcemap-segment';\n\nimport type { SourceMapInput } from '@jridgewell/trace-mapping';\nimport type { SourceMapSegment } from './sourcemap-segment';\nimport type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';\n\nexport type { DecodedSourceMap, EncodedSourceMap, Mapping };\n\nexport type Options = {\n file?: string | null;\n sourceRoot?: string | null;\n};\n\nconst NO_NAME = -1;\n\n/**\n * Provides the state to generate a sourcemap.\n */\nexport class GenMapping {\n private declare _names: SetArray;\n private declare _sources: SetArray;\n private declare _sourcesContent: (string | null)[];\n private declare _mappings: SourceMapSegment[][];\n private declare _ignoreList: SetArray;\n declare file: string | null | undefined;\n declare sourceRoot: string | null | undefined;\n\n constructor({ file, sourceRoot }: Options = {}) {\n this._names = new SetArray();\n this._sources = new SetArray();\n this._sourcesContent = [];\n this._mappings = [];\n this.file = file;\n this.sourceRoot = sourceRoot;\n this._ignoreList = new SetArray();\n }\n}\n\ninterface PublicMap {\n _names: GenMapping['_names'];\n _sources: GenMapping['_sources'];\n _sourcesContent: GenMapping['_sourcesContent'];\n _mappings: GenMapping['_mappings'];\n _ignoreList: GenMapping['_ignoreList'];\n}\n\n/**\n * Typescript doesn't allow friend access to private fields, so this just casts the map into a type\n * with public access modifiers.\n */\nfunction cast(map: unknown): PublicMap {\n return map as any;\n}\n\n/**\n * A low-level API to associate a generated position with an original source position. Line and\n * column here are 0-based, unlike `addMapping`.\n */\nexport function addSegment(\n map: GenMapping,\n genLine: number,\n genColumn: number,\n source?: null,\n sourceLine?: null,\n sourceColumn?: null,\n name?: null,\n content?: null,\n): void;\nexport function addSegment(\n map: GenMapping,\n genLine: number,\n genColumn: number,\n source: string,\n sourceLine: number,\n sourceColumn: number,\n name?: null,\n content?: string | null,\n): void;\nexport function addSegment(\n map: GenMapping,\n genLine: number,\n genColumn: number,\n source: string,\n sourceLine: number,\n sourceColumn: number,\n name: string,\n content?: string | null,\n): void;\nexport function addSegment(\n map: GenMapping,\n genLine: number,\n genColumn: number,\n source?: string | null,\n sourceLine?: number | null,\n sourceColumn?: number | null,\n name?: string | null,\n content?: string | null,\n): void {\n return addSegmentInternal(\n false,\n map,\n genLine,\n genColumn,\n source,\n sourceLine,\n sourceColumn,\n name,\n content,\n );\n}\n\n/**\n * A high-level API to associate a generated position with an original source position. Line is\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\n */\nexport function addMapping(\n map: GenMapping,\n mapping: {\n generated: Pos;\n source?: null;\n original?: null;\n name?: null;\n content?: null;\n },\n): void;\nexport function addMapping(\n map: GenMapping,\n mapping: {\n generated: Pos;\n source: string;\n original: Pos;\n name?: null;\n content?: string | null;\n },\n): void;\nexport function addMapping(\n map: GenMapping,\n mapping: {\n generated: Pos;\n source: string;\n original: Pos;\n name: string;\n content?: string | null;\n },\n): void;\nexport function addMapping(\n map: GenMapping,\n mapping: {\n generated: Pos;\n source?: string | null;\n original?: Pos | null;\n name?: string | null;\n content?: string | null;\n },\n): void {\n return addMappingInternal(false, map, mapping as Parameters[2]);\n}\n\n/**\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\n * not add a segment with a lower generated line/column than one that came before.\n */\nexport const maybeAddSegment: typeof addSegment = (\n map,\n genLine,\n genColumn,\n source,\n sourceLine,\n sourceColumn,\n name,\n content,\n) => {\n return addSegmentInternal(\n true,\n map,\n genLine,\n genColumn,\n source,\n sourceLine,\n sourceColumn,\n name,\n content,\n );\n};\n\n/**\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\n * not add a mapping with a lower generated line/column than one that came before.\n */\nexport const maybeAddMapping: typeof addMapping = (map, mapping) => {\n return addMappingInternal(true, map, mapping as Parameters[2]);\n};\n\n/**\n * Adds/removes the content of the source file to the source map.\n */\nexport function setSourceContent(map: GenMapping, source: string, content: string | null): void {\n const { _sources: sources, _sourcesContent: sourcesContent } = cast(map);\n const index = put(sources, source);\n sourcesContent[index] = content;\n}\n\nexport function setIgnore(map: GenMapping, source: string, ignore = true) {\n const { _sources: sources, _sourcesContent: sourcesContent, _ignoreList: ignoreList } = cast(map);\n const index = put(sources, source);\n if (index === sourcesContent.length) sourcesContent[index] = null;\n if (ignore) put(ignoreList, index);\n else remove(ignoreList, index);\n}\n\n/**\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport function toDecodedMap(map: GenMapping): DecodedSourceMap {\n const {\n _mappings: mappings,\n _sources: sources,\n _sourcesContent: sourcesContent,\n _names: names,\n _ignoreList: ignoreList,\n } = cast(map);\n removeEmptyFinalLines(mappings);\n\n return {\n version: 3,\n file: map.file || undefined,\n names: names.array,\n sourceRoot: map.sourceRoot || undefined,\n sources: sources.array,\n sourcesContent,\n mappings,\n ignoreList: ignoreList.array,\n };\n}\n\n/**\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport function toEncodedMap(map: GenMapping): EncodedSourceMap {\n const decoded = toDecodedMap(map);\n return {\n ...decoded,\n mappings: encode(decoded.mappings as SourceMapSegment[][]),\n };\n}\n\n/**\n * Constructs a new GenMapping, using the already present mappings of the input.\n */\nexport function fromMap(input: SourceMapInput): GenMapping {\n const map = new TraceMap(input);\n const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\n\n putAll(cast(gen)._names, map.names);\n putAll(cast(gen)._sources, map.sources as string[]);\n cast(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null);\n cast(gen)._mappings = decodedMappings(map) as GenMapping['_mappings'];\n if (map.ignoreList) putAll(cast(gen)._ignoreList, map.ignoreList);\n\n return gen;\n}\n\n/**\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\n * passed to the `source-map` library.\n */\nexport function allMappings(map: GenMapping): Mapping[] {\n const out: Mapping[] = [];\n const { _mappings: mappings, _sources: sources, _names: names } = cast(map);\n\n for (let i = 0; i < mappings.length; i++) {\n const line = mappings[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n\n const generated = { line: i + 1, column: seg[COLUMN] };\n let source: string | undefined = undefined;\n let original: Pos | undefined = undefined;\n let name: string | undefined = undefined;\n\n if (seg.length !== 1) {\n source = sources.array[seg[SOURCES_INDEX]];\n original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\n\n if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];\n }\n\n out.push({ generated, source, original, name } as Mapping);\n }\n }\n\n return out;\n}\n\n// This split declaration is only so that terser can elminiate the static initialization block.\nfunction addSegmentInternal(\n skipable: boolean,\n map: GenMapping,\n genLine: number,\n genColumn: number,\n source: S,\n sourceLine: S extends string ? number : null | undefined,\n sourceColumn: S extends string ? number : null | undefined,\n name: S extends string ? string | null | undefined : null | undefined,\n content: S extends string ? string | null | undefined : null | undefined,\n): void {\n const {\n _mappings: mappings,\n _sources: sources,\n _sourcesContent: sourcesContent,\n _names: names,\n } = cast(map);\n const line = getLine(mappings, genLine);\n const index = getColumnIndex(line, genColumn);\n\n if (!source) {\n if (skipable && skipSourceless(line, index)) return;\n return insert(line, index, [genColumn]);\n }\n\n // Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source\n // isn't nullish.\n assert(sourceLine);\n assert(sourceColumn);\n\n const sourcesIndex = put(sources, source);\n const namesIndex = name ? put(names, name) : NO_NAME;\n if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null;\n\n if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\n return;\n }\n\n return insert(\n line,\n index,\n name\n ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n : [genColumn, sourcesIndex, sourceLine, sourceColumn],\n );\n}\n\nfunction assert(_val: unknown): asserts _val is T {\n // noop.\n}\n\nfunction getLine(mappings: SourceMapSegment[][], index: number): SourceMapSegment[] {\n for (let i = mappings.length; i <= index; i++) {\n mappings[i] = [];\n }\n return mappings[index];\n}\n\nfunction getColumnIndex(line: SourceMapSegment[], genColumn: number): number {\n let index = line.length;\n for (let i = index - 1; i >= 0; index = i--) {\n const current = line[i];\n if (genColumn >= current[COLUMN]) break;\n }\n return index;\n}\n\nfunction insert(array: T[], index: number, value: T) {\n for (let i = array.length; i > index; i--) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n}\n\nfunction removeEmptyFinalLines(mappings: SourceMapSegment[][]) {\n const { length } = mappings;\n let len = length;\n for (let i = len - 1; i >= 0; len = i, i--) {\n if (mappings[i].length > 0) break;\n }\n if (len < length) mappings.length = len;\n}\n\nfunction putAll(setarr: SetArray, array: T[]) {\n for (let i = 0; i < array.length; i++) put(setarr, array[i]);\n}\n\nfunction skipSourceless(line: SourceMapSegment[], index: number): boolean {\n // The start of a line is already sourceless, so adding a sourceless segment to the beginning\n // doesn't generate any useful information.\n if (index === 0) return true;\n\n const prev = line[index - 1];\n // If the previous segment is also sourceless, then adding another sourceless segment doesn't\n // genrate any new information. Else, this segment will end the source/named segment and point to\n // a sourceless position, which is useful.\n return prev.length === 1;\n}\n\nfunction skipSource(\n line: SourceMapSegment[],\n index: number,\n sourcesIndex: number,\n sourceLine: number,\n sourceColumn: number,\n namesIndex: number,\n): boolean {\n // A source/named segment at the start of a line gives position at that genColumn\n if (index === 0) return false;\n\n const prev = line[index - 1];\n\n // If the previous segment is sourceless, then we're transitioning to a source.\n if (prev.length === 1) return false;\n\n // If the previous segment maps to the exact same source position, then this segment doesn't\n // provide any new position information.\n return (\n sourcesIndex === prev[SOURCES_INDEX] &&\n sourceLine === prev[SOURCE_LINE] &&\n sourceColumn === prev[SOURCE_COLUMN] &&\n namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)\n );\n}\n\nfunction addMappingInternal(\n skipable: boolean,\n map: GenMapping,\n mapping: {\n generated: Pos;\n source: S;\n original: S extends string ? Pos : null | undefined;\n name: S extends string ? string | null | undefined : null | undefined;\n content: S extends string ? string | null | undefined : null | undefined;\n },\n) {\n const { generated, source, original, name, content } = mapping;\n if (!source) {\n return addSegmentInternal(\n skipable,\n map,\n generated.line - 1,\n generated.column,\n null,\n null,\n null,\n null,\n null,\n );\n }\n assert(original);\n return addSegmentInternal(\n skipable,\n map,\n generated.line - 1,\n generated.column,\n source as string,\n original.line - 1,\n original.column,\n name,\n content,\n );\n}\n","// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\n\ntype Url = {\n scheme: string;\n user: string;\n host: string;\n port: string;\n path: string;\n query: string;\n hash: string;\n type: UrlType;\n};\n\nconst enum UrlType {\n Empty = 1,\n Hash = 2,\n Query = 3,\n RelativePath = 4,\n AbsolutePath = 5,\n SchemeRelative = 6,\n Absolute = 7,\n}\n\nfunction isAbsoluteUrl(input: string): boolean {\n return schemeRegex.test(input);\n}\n\nfunction isSchemeRelativeUrl(input: string): boolean {\n return input.startsWith('//');\n}\n\nfunction isAbsolutePath(input: string): boolean {\n return input.startsWith('/');\n}\n\nfunction isFileUrl(input: string): boolean {\n return input.startsWith('file:');\n}\n\nfunction isRelative(input: string): boolean {\n return /^[.?#]/.test(input);\n}\n\nfunction parseAbsoluteUrl(input: string): Url {\n const match = urlRegex.exec(input)!;\n return makeUrl(\n match[1],\n match[2] || '',\n match[3],\n match[4] || '',\n match[5] || '/',\n match[6] || '',\n match[7] || '',\n );\n}\n\nfunction parseFileUrl(input: string): Url {\n const match = fileRegex.exec(input)!;\n const path = match[2];\n return makeUrl(\n 'file:',\n '',\n match[1] || '',\n '',\n isAbsolutePath(path) ? path : '/' + path,\n match[3] || '',\n match[4] || '',\n );\n}\n\nfunction makeUrl(\n scheme: string,\n user: string,\n host: string,\n port: string,\n path: string,\n query: string,\n hash: string,\n): Url {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: UrlType.Absolute,\n };\n}\n\nfunction parseUrl(input: string): Url {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = UrlType.SchemeRelative;\n return url;\n }\n\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = UrlType.AbsolutePath;\n return url;\n }\n\n if (isFileUrl(input)) return parseFileUrl(input);\n\n if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input);\n\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? UrlType.Query\n : input.startsWith('#')\n ? UrlType.Hash\n : UrlType.RelativePath\n : UrlType.Empty;\n return url;\n}\n\nfunction stripPathFilename(path: string): string {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..')) return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\nfunction mergePaths(url: Url, base: Url) {\n normalizePath(base, base.type);\n\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n } else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n}\n\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url: Url, type: UrlType) {\n const rel = type <= UrlType.RelativePath;\n const pieces = url.path.split('/');\n\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n\n // A current directory, which we can always drop.\n if (piece === '.') continue;\n\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n } else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n}\n\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nexport default function resolve(input: string, base: string | undefined): string {\n if (!input && !base) return '';\n\n const url = parseUrl(input);\n let inputType = url.type;\n\n if (base && inputType !== UrlType.Absolute) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n\n switch (inputType) {\n case UrlType.Empty:\n url.hash = baseUrl.hash;\n // fall through\n\n case UrlType.Hash:\n url.query = baseUrl.query;\n // fall through\n\n case UrlType.Query:\n case UrlType.RelativePath:\n mergePaths(url, baseUrl);\n // fall through\n\n case UrlType.AbsolutePath:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n\n case UrlType.SchemeRelative:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType) inputType = baseType;\n }\n\n normalizePath(url, inputType);\n\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n\n case UrlType.Hash:\n case UrlType.Query:\n return queryHash;\n\n case UrlType.RelativePath: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n\n if (!path) return queryHash || '.';\n\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n\n return path + queryHash;\n }\n\n case UrlType.AbsolutePath:\n return url.path + queryHash;\n\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n}\n","type Key = string | number | symbol;\n\n/**\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\n * index of the `key` in the backing array.\n *\n * This is designed to allow synchronizing a second array with the contents of the backing array,\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\n * and there are never duplicates.\n */\nexport class SetArray {\n private declare _indexes: Record;\n declare array: readonly T[];\n\n constructor() {\n this._indexes = { __proto__: null } as any;\n this.array = [];\n }\n}\n\ninterface PublicSet {\n array: T[];\n _indexes: SetArray['_indexes'];\n}\n\n/**\n * Typescript doesn't allow friend access to private fields, so this just casts the set into a type\n * with public access modifiers.\n */\nfunction cast(set: SetArray): PublicSet {\n return set as any;\n}\n\n/**\n * Gets the index associated with `key` in the backing array, if it is already present.\n */\nexport function get(setarr: SetArray, key: T): number | undefined {\n return cast(setarr)._indexes[key];\n}\n\n/**\n * Puts `key` into the backing array, if it is not already present. Returns\n * the index of the `key` in the backing array.\n */\nexport function put(setarr: SetArray, key: T): number {\n // The key may or may not be present. If it is present, it's a number.\n const index = get(setarr, key);\n if (index !== undefined) return index;\n\n const { array, _indexes: indexes } = cast(setarr);\n\n const length = array.push(key);\n return (indexes[key] = length - 1);\n}\n\n/**\n * Pops the last added item out of the SetArray.\n */\nexport function pop(setarr: SetArray): void {\n const { array, _indexes: indexes } = cast(setarr);\n if (array.length === 0) return;\n\n const last = array.pop()!;\n indexes[last] = undefined;\n}\n\n/**\n * Removes the key, if it exists in the set.\n */\nexport function remove(setarr: SetArray, key: T): void {\n const index = get(setarr, key);\n if (index === undefined) return;\n\n const { array, _indexes: indexes } = cast(setarr);\n for (let i = index + 1; i < array.length; i++) {\n const k = array[i];\n array[i - 1] = k;\n indexes[k]!--;\n }\n indexes[key] = undefined;\n array.pop();\n}\n","import type { StringReader, StringWriter } from './strings';\n\nexport const comma = ','.charCodeAt(0);\nexport const semicolon = ';'.charCodeAt(0);\n\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\n\nfor (let i = 0; i < chars.length; i++) {\n const c = chars.charCodeAt(i);\n intToChar[i] = c;\n charToInt[c] = i;\n}\n\nexport function decodeInteger(reader: StringReader, relative: number): number {\n let value = 0;\n let shift = 0;\n let integer = 0;\n\n do {\n const c = reader.next();\n integer = charToInt[c];\n value |= (integer & 31) << shift;\n shift += 5;\n } while (integer & 32);\n\n const shouldNegate = value & 1;\n value >>>= 1;\n\n if (shouldNegate) {\n value = -0x80000000 | -value;\n }\n\n return relative + value;\n}\n\nexport function encodeInteger(builder: StringWriter, num: number, relative: number): number {\n let delta = num - relative;\n\n delta = delta < 0 ? (-delta << 1) | 1 : delta << 1;\n do {\n let clamped = delta & 0b011111;\n delta >>>= 5;\n if (delta > 0) clamped |= 0b100000;\n builder.write(intToChar[clamped]);\n } while (delta > 0);\n\n return num;\n}\n\nexport function hasMoreVlq(reader: StringReader, max: number) {\n if (reader.pos >= max) return false;\n return reader.peek() !== comma;\n}\n","const bufLength = 1024 * 16;\n\n// Provide a fallback for older environments.\nconst td =\n typeof TextDecoder !== 'undefined'\n ? /* #__PURE__ */ new TextDecoder()\n : typeof Buffer !== 'undefined'\n ? {\n decode(buf: Uint8Array): string {\n const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n return out.toString();\n },\n }\n : {\n decode(buf: Uint8Array): string {\n let out = '';\n for (let i = 0; i < buf.length; i++) {\n out += String.fromCharCode(buf[i]);\n }\n return out;\n },\n };\n\nexport class StringWriter {\n pos = 0;\n private out = '';\n private buffer = new Uint8Array(bufLength);\n\n write(v: number): void {\n const { buffer } = this;\n buffer[this.pos++] = v;\n if (this.pos === bufLength) {\n this.out += td.decode(buffer);\n this.pos = 0;\n }\n }\n\n flush(): string {\n const { buffer, out, pos } = this;\n return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;\n }\n}\n\nexport class StringReader {\n pos = 0;\n private declare buffer: string;\n\n constructor(buffer: string) {\n this.buffer = buffer;\n }\n\n next(): number {\n return this.buffer.charCodeAt(this.pos++);\n }\n\n peek(): number {\n return this.buffer.charCodeAt(this.pos);\n }\n\n indexOf(char: string): number {\n const { buffer, pos } = this;\n const idx = buffer.indexOf(char, pos);\n return idx === -1 ? buffer.length : idx;\n }\n}\n","import { StringReader, StringWriter } from './strings';\nimport { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq';\n\nconst EMPTY: any[] = [];\n\ntype Line = number;\ntype Column = number;\ntype Kind = number;\ntype Name = number;\ntype Var = number;\ntype SourcesIndex = number;\ntype ScopesIndex = number;\n\ntype Mix = (A & O) | (B & O);\n\nexport type OriginalScope = Mix<\n [Line, Column, Line, Column, Kind],\n [Line, Column, Line, Column, Kind, Name],\n { vars: Var[] }\n>;\n\nexport type GeneratedRange = Mix<\n [Line, Column, Line, Column],\n [Line, Column, Line, Column, SourcesIndex, ScopesIndex],\n {\n callsite: CallSite | null;\n bindings: Binding[];\n isScope: boolean;\n }\n>;\nexport type CallSite = [SourcesIndex, Line, Column];\ntype Binding = BindingExpressionRange[];\nexport type BindingExpressionRange = [Name] | [Name, Line, Column];\n\nexport function decodeOriginalScopes(input: string): OriginalScope[] {\n const { length } = input;\n const reader = new StringReader(input);\n const scopes: OriginalScope[] = [];\n const stack: OriginalScope[] = [];\n let line = 0;\n\n for (; reader.pos < length; reader.pos++) {\n line = decodeInteger(reader, line);\n const column = decodeInteger(reader, 0);\n\n if (!hasMoreVlq(reader, length)) {\n const last = stack.pop()!;\n last[2] = line;\n last[3] = column;\n continue;\n }\n\n const kind = decodeInteger(reader, 0);\n const fields = decodeInteger(reader, 0);\n const hasName = fields & 0b0001;\n\n const scope: OriginalScope = (\n hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind]\n ) as OriginalScope;\n\n let vars: Var[] = EMPTY;\n if (hasMoreVlq(reader, length)) {\n vars = [];\n do {\n const varsIndex = decodeInteger(reader, 0);\n vars.push(varsIndex);\n } while (hasMoreVlq(reader, length));\n }\n scope.vars = vars;\n\n scopes.push(scope);\n stack.push(scope);\n }\n\n return scopes;\n}\n\nexport function encodeOriginalScopes(scopes: OriginalScope[]): string {\n const writer = new StringWriter();\n\n for (let i = 0; i < scopes.length; ) {\n i = _encodeOriginalScopes(scopes, i, writer, [0]);\n }\n\n return writer.flush();\n}\n\nfunction _encodeOriginalScopes(\n scopes: OriginalScope[],\n index: number,\n writer: StringWriter,\n state: [\n number, // GenColumn\n ],\n): number {\n const scope = scopes[index];\n const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;\n\n if (index > 0) writer.write(comma);\n\n state[0] = encodeInteger(writer, startLine, state[0]);\n encodeInteger(writer, startColumn, 0);\n encodeInteger(writer, kind, 0);\n\n const fields = scope.length === 6 ? 0b0001 : 0;\n encodeInteger(writer, fields, 0);\n if (scope.length === 6) encodeInteger(writer, scope[5], 0);\n\n for (const v of vars) {\n encodeInteger(writer, v, 0);\n }\n\n for (index++; index < scopes.length; ) {\n const next = scopes[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || (l === endLine && c >= endColumn)) {\n break;\n }\n index = _encodeOriginalScopes(scopes, index, writer, state);\n }\n\n writer.write(comma);\n state[0] = encodeInteger(writer, endLine, state[0]);\n encodeInteger(writer, endColumn, 0);\n\n return index;\n}\n\nexport function decodeGeneratedRanges(input: string): GeneratedRange[] {\n const { length } = input;\n const reader = new StringReader(input);\n const ranges: GeneratedRange[] = [];\n const stack: GeneratedRange[] = [];\n\n let genLine = 0;\n let definitionSourcesIndex = 0;\n let definitionScopeIndex = 0;\n let callsiteSourcesIndex = 0;\n let callsiteLine = 0;\n let callsiteColumn = 0;\n let bindingLine = 0;\n let bindingColumn = 0;\n\n do {\n const semi = reader.indexOf(';');\n let genColumn = 0;\n\n for (; reader.pos < semi; reader.pos++) {\n genColumn = decodeInteger(reader, genColumn);\n\n if (!hasMoreVlq(reader, semi)) {\n const last = stack.pop()!;\n last[2] = genLine;\n last[3] = genColumn;\n continue;\n }\n\n const fields = decodeInteger(reader, 0);\n const hasDefinition = fields & 0b0001;\n const hasCallsite = fields & 0b0010;\n const hasScope = fields & 0b0100;\n\n let callsite: CallSite | null = null;\n let bindings: Binding[] = EMPTY;\n let range: GeneratedRange;\n if (hasDefinition) {\n const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);\n definitionScopeIndex = decodeInteger(\n reader,\n definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0,\n );\n\n definitionSourcesIndex = defSourcesIndex;\n range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex] as GeneratedRange;\n } else {\n range = [genLine, genColumn, 0, 0] as GeneratedRange;\n }\n\n range.isScope = !!hasScope;\n\n if (hasCallsite) {\n const prevCsi = callsiteSourcesIndex;\n const prevLine = callsiteLine;\n callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);\n const sameSource = prevCsi === callsiteSourcesIndex;\n callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);\n callsiteColumn = decodeInteger(\n reader,\n sameSource && prevLine === callsiteLine ? callsiteColumn : 0,\n );\n\n callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];\n }\n range.callsite = callsite;\n\n if (hasMoreVlq(reader, semi)) {\n bindings = [];\n do {\n bindingLine = genLine;\n bindingColumn = genColumn;\n const expressionsCount = decodeInteger(reader, 0);\n let expressionRanges: BindingExpressionRange[];\n if (expressionsCount < -1) {\n expressionRanges = [[decodeInteger(reader, 0)]];\n for (let i = -1; i > expressionsCount; i--) {\n const prevBl = bindingLine;\n bindingLine = decodeInteger(reader, bindingLine);\n bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);\n const expression = decodeInteger(reader, 0);\n expressionRanges.push([expression, bindingLine, bindingColumn]);\n }\n } else {\n expressionRanges = [[expressionsCount]];\n }\n bindings.push(expressionRanges);\n } while (hasMoreVlq(reader, semi));\n }\n range.bindings = bindings;\n\n ranges.push(range);\n stack.push(range);\n }\n\n genLine++;\n reader.pos = semi + 1;\n } while (reader.pos < length);\n\n return ranges;\n}\n\nexport function encodeGeneratedRanges(ranges: GeneratedRange[]): string {\n if (ranges.length === 0) return '';\n\n const writer = new StringWriter();\n\n for (let i = 0; i < ranges.length; ) {\n i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]);\n }\n\n return writer.flush();\n}\n\nfunction _encodeGeneratedRanges(\n ranges: GeneratedRange[],\n index: number,\n writer: StringWriter,\n state: [\n number, // GenLine\n number, // GenColumn\n number, // DefSourcesIndex\n number, // DefScopesIndex\n number, // CallSourcesIndex\n number, // CallLine\n number, // CallColumn\n ],\n): number {\n const range = ranges[index];\n const {\n 0: startLine,\n 1: startColumn,\n 2: endLine,\n 3: endColumn,\n isScope,\n callsite,\n bindings,\n } = range;\n\n if (state[0] < startLine) {\n catchupLine(writer, state[0], startLine);\n state[0] = startLine;\n state[1] = 0;\n } else if (index > 0) {\n writer.write(comma);\n }\n\n state[1] = encodeInteger(writer, range[1], state[1]);\n\n const fields =\n (range.length === 6 ? 0b0001 : 0) | (callsite ? 0b0010 : 0) | (isScope ? 0b0100 : 0);\n encodeInteger(writer, fields, 0);\n\n if (range.length === 6) {\n const { 4: sourcesIndex, 5: scopesIndex } = range;\n if (sourcesIndex !== state[2]) {\n state[3] = 0;\n }\n state[2] = encodeInteger(writer, sourcesIndex, state[2]);\n state[3] = encodeInteger(writer, scopesIndex, state[3]);\n }\n\n if (callsite) {\n const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite!;\n if (sourcesIndex !== state[4]) {\n state[5] = 0;\n state[6] = 0;\n } else if (callLine !== state[5]) {\n state[6] = 0;\n }\n state[4] = encodeInteger(writer, sourcesIndex, state[4]);\n state[5] = encodeInteger(writer, callLine, state[5]);\n state[6] = encodeInteger(writer, callColumn, state[6]);\n }\n\n if (bindings) {\n for (const binding of bindings) {\n if (binding.length > 1) encodeInteger(writer, -binding.length, 0);\n const expression = binding[0][0];\n encodeInteger(writer, expression, 0);\n let bindingStartLine = startLine;\n let bindingStartColumn = startColumn;\n for (let i = 1; i < binding.length; i++) {\n const expRange = binding[i];\n bindingStartLine = encodeInteger(writer, expRange[1]!, bindingStartLine);\n bindingStartColumn = encodeInteger(writer, expRange[2]!, bindingStartColumn);\n encodeInteger(writer, expRange[0]!, 0);\n }\n }\n }\n\n for (index++; index < ranges.length; ) {\n const next = ranges[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || (l === endLine && c >= endColumn)) {\n break;\n }\n index = _encodeGeneratedRanges(ranges, index, writer, state);\n }\n\n if (state[0] < endLine) {\n catchupLine(writer, state[0], endLine);\n state[0] = endLine;\n state[1] = 0;\n } else {\n writer.write(comma);\n }\n state[1] = encodeInteger(writer, endColumn, state[1]);\n\n return index;\n}\n\nfunction catchupLine(writer: StringWriter, lastLine: number, line: number) {\n do {\n writer.write(semicolon);\n } while (++lastLine < line);\n}\n","import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq';\nimport { StringWriter, StringReader } from './strings';\n\nexport {\n decodeOriginalScopes,\n encodeOriginalScopes,\n decodeGeneratedRanges,\n encodeGeneratedRanges,\n} from './scopes';\nexport type { OriginalScope, GeneratedRange, CallSite, BindingExpressionRange } from './scopes';\n\nexport type SourceMapSegment =\n | [number]\n | [number, number, number, number]\n | [number, number, number, number, number];\nexport type SourceMapLine = SourceMapSegment[];\nexport type SourceMapMappings = SourceMapLine[];\n\nexport function decode(mappings: string): SourceMapMappings {\n const { length } = mappings;\n const reader = new StringReader(mappings);\n const decoded: SourceMapMappings = [];\n let genColumn = 0;\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n\n do {\n const semi = reader.indexOf(';');\n const line: SourceMapLine = [];\n let sorted = true;\n let lastCol = 0;\n genColumn = 0;\n\n while (reader.pos < semi) {\n let seg: SourceMapSegment;\n\n genColumn = decodeInteger(reader, genColumn);\n if (genColumn < lastCol) sorted = false;\n lastCol = genColumn;\n\n if (hasMoreVlq(reader, semi)) {\n sourcesIndex = decodeInteger(reader, sourcesIndex);\n sourceLine = decodeInteger(reader, sourceLine);\n sourceColumn = decodeInteger(reader, sourceColumn);\n\n if (hasMoreVlq(reader, semi)) {\n namesIndex = decodeInteger(reader, namesIndex);\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];\n } else {\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];\n }\n } else {\n seg = [genColumn];\n }\n\n line.push(seg);\n reader.pos++;\n }\n\n if (!sorted) sort(line);\n decoded.push(line);\n reader.pos = semi + 1;\n } while (reader.pos <= length);\n\n return decoded;\n}\n\nfunction sort(line: SourceMapSegment[]) {\n line.sort(sortComparator);\n}\n\nfunction sortComparator(a: SourceMapSegment, b: SourceMapSegment): number {\n return a[0] - b[0];\n}\n\nexport function encode(decoded: SourceMapMappings): string;\nexport function encode(decoded: Readonly): string;\nexport function encode(decoded: Readonly): string {\n const writer = new StringWriter();\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n if (i > 0) writer.write(semicolon);\n if (line.length === 0) continue;\n\n let genColumn = 0;\n\n for (let j = 0; j < line.length; j++) {\n const segment = line[j];\n if (j > 0) writer.write(comma);\n\n genColumn = encodeInteger(writer, segment[0], genColumn);\n\n if (segment.length === 1) continue;\n sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);\n sourceLine = encodeInteger(writer, segment[2], sourceLine);\n sourceColumn = encodeInteger(writer, segment[3], sourceColumn);\n\n if (segment.length === 4) continue;\n namesIndex = encodeInteger(writer, segment[4], namesIndex);\n }\n }\n\n return writer.flush();\n}\n","import resolveUri from '@jridgewell/resolve-uri';\n\nexport default function resolve(input: string, base: string | undefined): string {\n // The base is always treated as a directory, if it's not empty.\n // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327\n // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401\n if (base && !base.endsWith('/')) base += '/';\n\n return resolveUri(input, base);\n}\n","/**\n * Removes everything after the last \"/\", but leaves the slash.\n */\nexport default function stripFilename(path: string | undefined | null): string {\n if (!path) return '';\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n","import { COLUMN } from './sourcemap-segment';\n\nimport type { SourceMapSegment } from './sourcemap-segment';\n\nexport default function maybeSort(\n mappings: SourceMapSegment[][],\n owned: boolean,\n): SourceMapSegment[][] {\n const unsortedIndex = nextUnsortedSegmentLine(mappings, 0);\n if (unsortedIndex === mappings.length) return mappings;\n\n // If we own the array (meaning we parsed it from JSON), then we're free to directly mutate it. If\n // not, we do not want to modify the consumer's input array.\n if (!owned) mappings = mappings.slice();\n\n for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) {\n mappings[i] = sortSegments(mappings[i], owned);\n }\n return mappings;\n}\n\nfunction nextUnsortedSegmentLine(mappings: SourceMapSegment[][], start: number): number {\n for (let i = start; i < mappings.length; i++) {\n if (!isSorted(mappings[i])) return i;\n }\n return mappings.length;\n}\n\nfunction isSorted(line: SourceMapSegment[]): boolean {\n for (let j = 1; j < line.length; j++) {\n if (line[j][COLUMN] < line[j - 1][COLUMN]) {\n return false;\n }\n }\n return true;\n}\n\nfunction sortSegments(line: SourceMapSegment[], owned: boolean): SourceMapSegment[] {\n if (!owned) line = line.slice();\n return line.sort(sortComparator);\n}\n\nfunction sortComparator(a: SourceMapSegment, b: SourceMapSegment): number {\n return a[COLUMN] - b[COLUMN];\n}\n","import type { SourceMapSegment, ReverseSegment } from './sourcemap-segment';\nimport { COLUMN } from './sourcemap-segment';\n\nexport type MemoState = {\n lastKey: number;\n lastNeedle: number;\n lastIndex: number;\n};\n\nexport let found = false;\n\n/**\n * A binary search implementation that returns the index if a match is found.\n * If no match is found, then the left-index (the index associated with the item that comes just\n * before the desired index) is returned. To maintain proper sort order, a splice would happen at\n * the next index:\n *\n * ```js\n * const array = [1, 3];\n * const needle = 2;\n * const index = binarySearch(array, needle, (item, needle) => item - needle);\n *\n * assert.equal(index, 0);\n * array.splice(index + 1, 0, needle);\n * assert.deepEqual(array, [1, 2, 3]);\n * ```\n */\nexport function binarySearch(\n haystack: SourceMapSegment[] | ReverseSegment[],\n needle: number,\n low: number,\n high: number,\n): number {\n while (low <= high) {\n const mid = low + ((high - low) >> 1);\n const cmp = haystack[mid][COLUMN] - needle;\n\n if (cmp === 0) {\n found = true;\n return mid;\n }\n\n if (cmp < 0) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n found = false;\n return low - 1;\n}\n\nexport function upperBound(\n haystack: SourceMapSegment[] | ReverseSegment[],\n needle: number,\n index: number,\n): number {\n for (let i = index + 1; i < haystack.length; index = i++) {\n if (haystack[i][COLUMN] !== needle) break;\n }\n return index;\n}\n\nexport function lowerBound(\n haystack: SourceMapSegment[] | ReverseSegment[],\n needle: number,\n index: number,\n): number {\n for (let i = index - 1; i >= 0; index = i--) {\n if (haystack[i][COLUMN] !== needle) break;\n }\n return index;\n}\n\nexport function memoizedState(): MemoState {\n return {\n lastKey: -1,\n lastNeedle: -1,\n lastIndex: -1,\n };\n}\n\n/**\n * This overly complicated beast is just to record the last tested line/column and the resulting\n * index, allowing us to skip a few tests if mappings are monotonically increasing.\n */\nexport function memoizedBinarySearch(\n haystack: SourceMapSegment[] | ReverseSegment[],\n needle: number,\n state: MemoState,\n key: number,\n): number {\n const { lastKey, lastNeedle, lastIndex } = state;\n\n let low = 0;\n let high = haystack.length - 1;\n if (key === lastKey) {\n if (needle === lastNeedle) {\n found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle;\n return lastIndex;\n }\n\n if (needle >= lastNeedle) {\n // lastIndex may be -1 if the previous needle was not found.\n low = lastIndex === -1 ? 0 : lastIndex;\n } else {\n high = lastIndex;\n }\n }\n state.lastKey = key;\n state.lastNeedle = needle;\n\n return (state.lastIndex = binarySearch(haystack, needle, low, high));\n}\n","import { COLUMN, SOURCES_INDEX, SOURCE_LINE, SOURCE_COLUMN } from './sourcemap-segment';\nimport { memoizedBinarySearch, upperBound } from './binary-search';\n\nimport type { ReverseSegment, SourceMapSegment } from './sourcemap-segment';\nimport type { MemoState } from './binary-search';\n\nexport type Source = {\n __proto__: null;\n [line: number]: Exclude[];\n};\n\n// Rebuilds the original source files, with mappings that are ordered by source line/column instead\n// of generated line/column.\nexport default function buildBySources(\n decoded: readonly SourceMapSegment[][],\n memos: MemoState[],\n): Source[] {\n const sources: Source[] = memos.map(buildNullArray);\n\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n if (seg.length === 1) continue;\n\n const sourceIndex = seg[SOURCES_INDEX];\n const sourceLine = seg[SOURCE_LINE];\n const sourceColumn = seg[SOURCE_COLUMN];\n const originalSource = sources[sourceIndex];\n const originalLine = (originalSource[sourceLine] ||= []);\n const memo = memos[sourceIndex];\n\n // The binary search either found a match, or it found the left-index just before where the\n // segment should go. Either way, we want to insert after that. And there may be multiple\n // generated segments associated with an original location, so there may need to move several\n // indexes before we find where we need to insert.\n let index = upperBound(\n originalLine,\n sourceColumn,\n memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine),\n );\n\n memo.lastIndex = ++index;\n insert(originalLine, index, [sourceColumn, i, seg[COLUMN]]);\n }\n }\n\n return sources;\n}\n\nfunction insert(array: T[], index: number, value: T) {\n for (let i = array.length; i > index; i--) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n}\n\n// Null arrays allow us to use ordered index keys without actually allocating contiguous memory like\n// a real array. We use a null-prototype object to avoid prototype pollution and deoptimizations.\n// Numeric properties on objects are magically sorted in ascending order by the engine regardless of\n// the insertion order. So, by setting any numeric keys, even out of order, we'll get ascending\n// order when iterating with for-in.\nfunction buildNullArray(): T {\n return { __proto__: null } as T;\n}\n","import { TraceMap, presortedDecodedMap, decodedMappings } from './trace-mapping';\nimport {\n COLUMN,\n SOURCES_INDEX,\n SOURCE_LINE,\n SOURCE_COLUMN,\n NAMES_INDEX,\n} from './sourcemap-segment';\n\nimport type {\n DecodedSourceMap,\n DecodedSourceMapXInput,\n EncodedSourceMapXInput,\n SectionedSourceMapXInput,\n SectionedSourceMapInput,\n SectionXInput,\n} from './types';\nimport type { SourceMapSegment } from './sourcemap-segment';\n\ntype AnyMap = {\n new (map: SectionedSourceMapInput, mapUrl?: string | null): TraceMap;\n (map: SectionedSourceMapInput, mapUrl?: string | null): TraceMap;\n};\n\nexport const AnyMap: AnyMap = function (map, mapUrl) {\n const parsed = parse(map);\n\n if (!('sections' in parsed)) {\n return new TraceMap(parsed as DecodedSourceMapXInput | EncodedSourceMapXInput, mapUrl);\n }\n\n const mappings: SourceMapSegment[][] = [];\n const sources: string[] = [];\n const sourcesContent: (string | null)[] = [];\n const names: string[] = [];\n const ignoreList: number[] = [];\n\n recurse(\n parsed,\n mapUrl,\n mappings,\n sources,\n sourcesContent,\n names,\n ignoreList,\n 0,\n 0,\n Infinity,\n Infinity,\n );\n\n const joined: DecodedSourceMap = {\n version: 3,\n file: parsed.file,\n names,\n sources,\n sourcesContent,\n mappings,\n ignoreList,\n };\n\n return presortedDecodedMap(joined);\n} as AnyMap;\n\nfunction parse(map: T): Exclude {\n return typeof map === 'string' ? JSON.parse(map) : map;\n}\n\nfunction recurse(\n input: SectionedSourceMapXInput,\n mapUrl: string | null | undefined,\n mappings: SourceMapSegment[][],\n sources: string[],\n sourcesContent: (string | null)[],\n names: string[],\n ignoreList: number[],\n lineOffset: number,\n columnOffset: number,\n stopLine: number,\n stopColumn: number,\n) {\n const { sections } = input;\n for (let i = 0; i < sections.length; i++) {\n const { map, offset } = sections[i];\n\n let sl = stopLine;\n let sc = stopColumn;\n if (i + 1 < sections.length) {\n const nextOffset = sections[i + 1].offset;\n sl = Math.min(stopLine, lineOffset + nextOffset.line);\n\n if (sl === stopLine) {\n sc = Math.min(stopColumn, columnOffset + nextOffset.column);\n } else if (sl < stopLine) {\n sc = columnOffset + nextOffset.column;\n }\n }\n\n addSection(\n map,\n mapUrl,\n mappings,\n sources,\n sourcesContent,\n names,\n ignoreList,\n lineOffset + offset.line,\n columnOffset + offset.column,\n sl,\n sc,\n );\n }\n}\n\nfunction addSection(\n input: SectionXInput['map'],\n mapUrl: string | null | undefined,\n mappings: SourceMapSegment[][],\n sources: string[],\n sourcesContent: (string | null)[],\n names: string[],\n ignoreList: number[],\n lineOffset: number,\n columnOffset: number,\n stopLine: number,\n stopColumn: number,\n) {\n const parsed = parse(input);\n if ('sections' in parsed) return recurse(...(arguments as unknown as Parameters));\n\n const map = new TraceMap(parsed, mapUrl);\n const sourcesOffset = sources.length;\n const namesOffset = names.length;\n const decoded = decodedMappings(map);\n const { resolvedSources, sourcesContent: contents, ignoreList: ignores } = map;\n\n append(sources, resolvedSources);\n append(names, map.names);\n\n if (contents) append(sourcesContent, contents);\n else for (let i = 0; i < resolvedSources.length; i++) sourcesContent.push(null);\n\n if (ignores) for (let i = 0; i < ignores.length; i++) ignoreList.push(ignores[i] + sourcesOffset);\n\n for (let i = 0; i < decoded.length; i++) {\n const lineI = lineOffset + i;\n\n // We can only add so many lines before we step into the range that the next section's map\n // controls. When we get to the last line, then we'll start checking the segments to see if\n // they've crossed into the column range. But it may not have any columns that overstep, so we\n // still need to check that we don't overstep lines, too.\n if (lineI > stopLine) return;\n\n // The out line may already exist in mappings (if we're continuing the line started by a\n // previous section). Or, we may have jumped ahead several lines to start this section.\n const out = getLine(mappings, lineI);\n // On the 0th loop, the section's column offset shifts us forward. On all other lines (since the\n // map can be multiple lines), it doesn't.\n const cOffset = i === 0 ? columnOffset : 0;\n\n const line = decoded[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n const column = cOffset + seg[COLUMN];\n\n // If this segment steps into the column range that the next section's map controls, we need\n // to stop early.\n if (lineI === stopLine && column >= stopColumn) return;\n\n if (seg.length === 1) {\n out.push([column]);\n continue;\n }\n\n const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX];\n const sourceLine = seg[SOURCE_LINE];\n const sourceColumn = seg[SOURCE_COLUMN];\n out.push(\n seg.length === 4\n ? [column, sourcesIndex, sourceLine, sourceColumn]\n : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]],\n );\n }\n }\n}\n\nfunction append(arr: T[], other: T[]) {\n for (let i = 0; i < other.length; i++) arr.push(other[i]);\n}\n\nfunction getLine(arr: T[][], index: number): T[] {\n for (let i = arr.length; i <= index; i++) arr[i] = [];\n return arr[index];\n}\n","import { encode, decode } from '@jridgewell/sourcemap-codec';\n\nimport resolve from './resolve';\nimport stripFilename from './strip-filename';\nimport maybeSort from './sort';\nimport buildBySources from './by-source';\nimport {\n memoizedState,\n memoizedBinarySearch,\n upperBound,\n lowerBound,\n found as bsFound,\n} from './binary-search';\nimport {\n COLUMN,\n SOURCES_INDEX,\n SOURCE_LINE,\n SOURCE_COLUMN,\n NAMES_INDEX,\n REV_GENERATED_LINE,\n REV_GENERATED_COLUMN,\n} from './sourcemap-segment';\n\nimport type { SourceMapSegment, ReverseSegment } from './sourcemap-segment';\nimport type {\n SourceMapV3,\n DecodedSourceMap,\n EncodedSourceMap,\n InvalidOriginalMapping,\n OriginalMapping,\n InvalidGeneratedMapping,\n GeneratedMapping,\n SourceMapInput,\n Needle,\n SourceNeedle,\n SourceMap,\n EachMapping,\n Bias,\n XInput,\n} from './types';\nimport type { Source } from './by-source';\nimport type { MemoState } from './binary-search';\n\nexport type { SourceMapSegment } from './sourcemap-segment';\nexport type {\n SourceMap,\n DecodedSourceMap,\n EncodedSourceMap,\n Section,\n SectionedSourceMap,\n SourceMapV3,\n Bias,\n EachMapping,\n GeneratedMapping,\n InvalidGeneratedMapping,\n InvalidOriginalMapping,\n Needle,\n OriginalMapping,\n OriginalMapping as Mapping,\n SectionedSourceMapInput,\n SourceMapInput,\n SourceNeedle,\n XInput,\n EncodedSourceMapXInput,\n DecodedSourceMapXInput,\n SectionedSourceMapXInput,\n SectionXInput,\n} from './types';\n\ninterface PublicMap {\n _encoded: TraceMap['_encoded'];\n _decoded: TraceMap['_decoded'];\n _decodedMemo: TraceMap['_decodedMemo'];\n _bySources: TraceMap['_bySources'];\n _bySourceMemos: TraceMap['_bySourceMemos'];\n}\n\nconst LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)';\nconst COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)';\n\nexport const LEAST_UPPER_BOUND = -1;\nexport const GREATEST_LOWER_BOUND = 1;\n\nexport { AnyMap } from './any-map';\n\nexport class TraceMap implements SourceMap {\n declare version: SourceMapV3['version'];\n declare file: SourceMapV3['file'];\n declare names: SourceMapV3['names'];\n declare sourceRoot: SourceMapV3['sourceRoot'];\n declare sources: SourceMapV3['sources'];\n declare sourcesContent: SourceMapV3['sourcesContent'];\n declare ignoreList: SourceMapV3['ignoreList'];\n\n declare resolvedSources: string[];\n private declare _encoded: string | undefined;\n\n private declare _decoded: SourceMapSegment[][] | undefined;\n private declare _decodedMemo: MemoState;\n\n private declare _bySources: Source[] | undefined;\n private declare _bySourceMemos: MemoState[] | undefined;\n\n constructor(map: SourceMapInput, mapUrl?: string | null) {\n const isString = typeof map === 'string';\n\n if (!isString && (map as unknown as { _decodedMemo: any })._decodedMemo) return map as TraceMap;\n\n const parsed = (isString ? JSON.parse(map) : map) as DecodedSourceMap | EncodedSourceMap;\n\n const { version, file, names, sourceRoot, sources, sourcesContent } = parsed;\n this.version = version;\n this.file = file;\n this.names = names || [];\n this.sourceRoot = sourceRoot;\n this.sources = sources;\n this.sourcesContent = sourcesContent;\n this.ignoreList = parsed.ignoreList || (parsed as XInput).x_google_ignoreList || undefined;\n\n const from = resolve(sourceRoot || '', stripFilename(mapUrl));\n this.resolvedSources = sources.map((s) => resolve(s || '', from));\n\n const { mappings } = parsed;\n if (typeof mappings === 'string') {\n this._encoded = mappings;\n this._decoded = undefined;\n } else {\n this._encoded = undefined;\n this._decoded = maybeSort(mappings, isString);\n }\n\n this._decodedMemo = memoizedState();\n this._bySources = undefined;\n this._bySourceMemos = undefined;\n }\n}\n\n/**\n * Typescript doesn't allow friend access to private fields, so this just casts the map into a type\n * with public access modifiers.\n */\nfunction cast(map: unknown): PublicMap {\n return map as any;\n}\n\n/**\n * Returns the encoded (VLQ string) form of the SourceMap's mappings field.\n */\nexport function encodedMappings(map: TraceMap): EncodedSourceMap['mappings'] {\n return (cast(map)._encoded ??= encode(cast(map)._decoded!));\n}\n\n/**\n * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field.\n */\nexport function decodedMappings(map: TraceMap): Readonly {\n return (cast(map)._decoded ||= decode(cast(map)._encoded!));\n}\n\n/**\n * A low-level API to find the segment associated with a generated line/column (think, from a\n * stack trace). Line and column here are 0-based, unlike `originalPositionFor`.\n */\nexport function traceSegment(\n map: TraceMap,\n line: number,\n column: number,\n): Readonly | null {\n const decoded = decodedMappings(map);\n\n // It's common for parent source maps to have pointers to lines that have no\n // mapping (like a \"//# sourceMappingURL=\") at the end of the child file.\n if (line >= decoded.length) return null;\n\n const segments = decoded[line];\n const index = traceSegmentInternal(\n segments,\n cast(map)._decodedMemo,\n line,\n column,\n GREATEST_LOWER_BOUND,\n );\n\n return index === -1 ? null : segments[index];\n}\n\n/**\n * A higher-level API to find the source/line/column associated with a generated line/column\n * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in\n * `source-map` library.\n */\nexport function originalPositionFor(\n map: TraceMap,\n needle: Needle,\n): OriginalMapping | InvalidOriginalMapping {\n let { line, column, bias } = needle;\n line--;\n if (line < 0) throw new Error(LINE_GTR_ZERO);\n if (column < 0) throw new Error(COL_GTR_EQ_ZERO);\n\n const decoded = decodedMappings(map);\n\n // It's common for parent source maps to have pointers to lines that have no\n // mapping (like a \"//# sourceMappingURL=\") at the end of the child file.\n if (line >= decoded.length) return OMapping(null, null, null, null);\n\n const segments = decoded[line];\n const index = traceSegmentInternal(\n segments,\n cast(map)._decodedMemo,\n line,\n column,\n bias || GREATEST_LOWER_BOUND,\n );\n\n if (index === -1) return OMapping(null, null, null, null);\n\n const segment = segments[index];\n if (segment.length === 1) return OMapping(null, null, null, null);\n\n const { names, resolvedSources } = map;\n return OMapping(\n resolvedSources[segment[SOURCES_INDEX]],\n segment[SOURCE_LINE] + 1,\n segment[SOURCE_COLUMN],\n segment.length === 5 ? names[segment[NAMES_INDEX]] : null,\n );\n}\n\n/**\n * Finds the generated line/column position of the provided source/line/column source position.\n */\nexport function generatedPositionFor(\n map: TraceMap,\n needle: SourceNeedle,\n): GeneratedMapping | InvalidGeneratedMapping {\n const { source, line, column, bias } = needle;\n return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false);\n}\n\n/**\n * Finds all generated line/column positions of the provided source/line/column source position.\n */\nexport function allGeneratedPositionsFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping[] {\n const { source, line, column, bias } = needle;\n // SourceMapConsumer uses LEAST_UPPER_BOUND for some reason, so we follow suit.\n return generatedPosition(map, source, line, column, bias || LEAST_UPPER_BOUND, true);\n}\n\n/**\n * Iterates each mapping in generated position order.\n */\nexport function eachMapping(map: TraceMap, cb: (mapping: EachMapping) => void): void {\n const decoded = decodedMappings(map);\n const { names, resolvedSources } = map;\n\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n\n const generatedLine = i + 1;\n const generatedColumn = seg[0];\n let source = null;\n let originalLine = null;\n let originalColumn = null;\n let name = null;\n if (seg.length !== 1) {\n source = resolvedSources[seg[1]];\n originalLine = seg[2] + 1;\n originalColumn = seg[3];\n }\n if (seg.length === 5) name = names[seg[4]];\n\n cb({\n generatedLine,\n generatedColumn,\n source,\n originalLine,\n originalColumn,\n name,\n } as EachMapping);\n }\n }\n}\n\nfunction sourceIndex(map: TraceMap, source: string): number {\n const { sources, resolvedSources } = map;\n let index = sources.indexOf(source);\n if (index === -1) index = resolvedSources.indexOf(source);\n return index;\n}\n\n/**\n * Retrieves the source content for a particular source, if its found. Returns null if not.\n */\nexport function sourceContentFor(map: TraceMap, source: string): string | null {\n const { sourcesContent } = map;\n if (sourcesContent == null) return null;\n const index = sourceIndex(map, source);\n return index === -1 ? null : sourcesContent[index];\n}\n\n/**\n * Determines if the source is marked to ignore by the source map.\n */\nexport function isIgnored(map: TraceMap, source: string): boolean {\n const { ignoreList } = map;\n if (ignoreList == null) return false;\n const index = sourceIndex(map, source);\n return index === -1 ? false : ignoreList.includes(index);\n}\n\n/**\n * A helper that skips sorting of the input map's mappings array, which can be expensive for larger\n * maps.\n */\nexport function presortedDecodedMap(map: DecodedSourceMap, mapUrl?: string): TraceMap {\n const tracer = new TraceMap(clone(map, []), mapUrl);\n cast(tracer)._decoded = map.mappings;\n return tracer;\n}\n\n/**\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport function decodedMap(\n map: TraceMap,\n): Omit & { mappings: readonly SourceMapSegment[][] } {\n return clone(map, decodedMappings(map));\n}\n\n/**\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport function encodedMap(map: TraceMap): EncodedSourceMap {\n return clone(map, encodedMappings(map));\n}\n\nfunction clone(\n map: TraceMap | DecodedSourceMap,\n mappings: T,\n): T extends string ? EncodedSourceMap : DecodedSourceMap {\n return {\n version: map.version,\n file: map.file,\n names: map.names,\n sourceRoot: map.sourceRoot,\n sources: map.sources,\n sourcesContent: map.sourcesContent,\n mappings,\n ignoreList: map.ignoreList || (map as XInput).x_google_ignoreList,\n } as any;\n}\n\nfunction OMapping(source: null, line: null, column: null, name: null): InvalidOriginalMapping;\nfunction OMapping(\n source: string,\n line: number,\n column: number,\n name: string | null,\n): OriginalMapping;\nfunction OMapping(\n source: string | null,\n line: number | null,\n column: number | null,\n name: string | null,\n): OriginalMapping | InvalidOriginalMapping {\n return { source, line, column, name } as any;\n}\n\nfunction GMapping(line: null, column: null): InvalidGeneratedMapping;\nfunction GMapping(line: number, column: number): GeneratedMapping;\nfunction GMapping(\n line: number | null,\n column: number | null,\n): GeneratedMapping | InvalidGeneratedMapping {\n return { line, column } as any;\n}\n\nfunction traceSegmentInternal(\n segments: SourceMapSegment[],\n memo: MemoState,\n line: number,\n column: number,\n bias: Bias,\n): number;\nfunction traceSegmentInternal(\n segments: ReverseSegment[],\n memo: MemoState,\n line: number,\n column: number,\n bias: Bias,\n): number;\nfunction traceSegmentInternal(\n segments: SourceMapSegment[] | ReverseSegment[],\n memo: MemoState,\n line: number,\n column: number,\n bias: Bias,\n): number {\n let index = memoizedBinarySearch(segments, column, memo, line);\n if (bsFound) {\n index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);\n } else if (bias === LEAST_UPPER_BOUND) index++;\n\n if (index === -1 || index === segments.length) return -1;\n return index;\n}\n\nfunction sliceGeneratedPositions(\n segments: ReverseSegment[],\n memo: MemoState,\n line: number,\n column: number,\n bias: Bias,\n): GeneratedMapping[] {\n let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND);\n\n // We ignored the bias when tracing the segment so that we're guarnateed to find the first (in\n // insertion order) segment that matched. Even if we did respect the bias when tracing, we would\n // still need to call `lowerBound()` to find the first segment, which is slower than just looking\n // for the GREATEST_LOWER_BOUND to begin with. The only difference that matters for us is when the\n // binary search didn't match, in which case GREATEST_LOWER_BOUND just needs to increment to\n // match LEAST_UPPER_BOUND.\n if (!bsFound && bias === LEAST_UPPER_BOUND) min++;\n\n if (min === -1 || min === segments.length) return [];\n\n // We may have found the segment that started at an earlier column. If this is the case, then we\n // need to slice all generated segments that match _that_ column, because all such segments span\n // to our desired column.\n const matchedColumn = bsFound ? column : segments[min][COLUMN];\n\n // The binary search is not guaranteed to find the lower bound when a match wasn't found.\n if (!bsFound) min = lowerBound(segments, matchedColumn, min);\n const max = upperBound(segments, matchedColumn, min);\n\n const result = [];\n for (; min <= max; min++) {\n const segment = segments[min];\n result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]));\n }\n return result;\n}\n\nfunction generatedPosition(\n map: TraceMap,\n source: string,\n line: number,\n column: number,\n bias: Bias,\n all: false,\n): GeneratedMapping | InvalidGeneratedMapping;\nfunction generatedPosition(\n map: TraceMap,\n source: string,\n line: number,\n column: number,\n bias: Bias,\n all: true,\n): GeneratedMapping[];\nfunction generatedPosition(\n map: TraceMap,\n source: string,\n line: number,\n column: number,\n bias: Bias,\n all: boolean,\n): GeneratedMapping | InvalidGeneratedMapping | GeneratedMapping[] {\n line--;\n if (line < 0) throw new Error(LINE_GTR_ZERO);\n if (column < 0) throw new Error(COL_GTR_EQ_ZERO);\n\n const { sources, resolvedSources } = map;\n let sourceIndex = sources.indexOf(source);\n if (sourceIndex === -1) sourceIndex = resolvedSources.indexOf(source);\n if (sourceIndex === -1) return all ? [] : GMapping(null, null);\n\n const generated = (cast(map)._bySources ||= buildBySources(\n decodedMappings(map),\n (cast(map)._bySourceMemos = sources.map(memoizedState)),\n ));\n\n const segments = generated[sourceIndex][line];\n if (segments == null) return all ? [] : GMapping(null, null);\n\n const memo = cast(map)._bySourceMemos![sourceIndex];\n\n if (all) return sliceGeneratedPositions(segments, memo, line, column, bias);\n\n const index = traceSegmentInternal(segments, memo, line, column, bias);\n if (index === -1) return GMapping(null, null);\n\n const segment = segments[index];\n return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]);\n}\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\nvar AssertionError = require('./internal/assert/assertion_error');\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\nvar objectAssign = require('object.assign/polyfill')();\nvar objectIs = require('object-is/polyfill')();\nvar RegExpPrototypeTest = require('call-bind/callBound')('RegExp.prototype.test');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n}\n\n// Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\nvar warned = false;\n\n// The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {};\n\n// All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n if (argsLen === 2) operator = '!=';\n }\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n if (message !== undefined) {\n errArgs.message = message;\n }\n var err = new AssertionError(errArgs);\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n throw err;\n}\nassert.fail = fail;\n\n// The AssertionError is defined in internal/error.\nassert.AssertionError = AssertionError;\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n}\n\n// Pure assertion tests whether a value is truthy, as determined\n// by !!value.\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\nassert.ok = ok;\n\n// The equality assertion tests shallow, coercive equality with ==.\n/* eslint-disable no-restricted-properties */\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n // eslint-disable-next-line eqeqeq\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n};\n\n// The non-equality assertion tests for whether two objects are not\n// equal with !=.\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n // eslint-disable-next-line eqeqeq\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n};\n\n// The equivalence assertion tests a deep equality relation.\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n};\n\n// The non-equivalence assertion tests for any deep inequality.\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\nvar Comparison = /*#__PURE__*/_createClass(function Comparison(obj, keys, actual) {\n var _this = this;\n _classCallCheck(this, Comparison);\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && RegExpPrototypeTest(obj[key], actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n});\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return RegExpPrototypeTest(expected, actual);\n // assert.doesNotThrow does not accept objects.\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n }\n\n // Handle primitives properly.\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n var keys = Object.keys(expected);\n // Special handle errors to make sure the name and the message are compared\n // as well.\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && RegExpPrototypeTest(expected[key], actual[key])) {\n return;\n }\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n }\n // Guard instanceof against arrow functions as they don't have a prototype.\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n return expected.call({}, actual) === true;\n}\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n try {\n fn();\n } catch (e) {\n return e;\n }\n return NO_EXCEPTION_SENTINEL;\n}\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn();\n // Fail in case no promise is returned.\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n throw actual;\n}\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n });\n\n // Make sure we actually have a stack trace!\n var origStack = err.stack;\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift();\n // Filter all frames existing in err.stack.\n var tmp1 = newErr.stack.split('\\n');\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n throw newErr;\n }\n};\n\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a871df3dfb8ea663ef5e1f8f62701ec51384ecb\nfunction internalMatch(string, regexp, message, fn, fnName) {\n if (!isRegExp(regexp)) {\n throw new ERR_INVALID_ARG_TYPE('regexp', 'RegExp', regexp);\n }\n var match = fnName === 'match';\n if (typeof string !== 'string' || RegExpPrototypeTest(regexp, string) !== match) {\n if (message instanceof Error) {\n throw message;\n }\n var generatedMessage = !message;\n\n // 'The input was expected to not match the regular expression ' +\n message = message || (typeof string !== 'string' ? 'The \"string\" argument must be of type string. Received type ' + \"\".concat(_typeof(string), \" (\").concat(inspect(string), \")\") : (match ? 'The input did not match the regular expression ' : 'The input was expected to not match the regular expression ') + \"\".concat(inspect(regexp), \". Input:\\n\\n\").concat(inspect(string), \"\\n\"));\n var err = new AssertionError({\n actual: string,\n expected: regexp,\n message: message,\n operator: fnName,\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n}\nassert.match = function match(string, regexp, message) {\n internalMatch(string, regexp, message, match, 'match');\n};\nassert.doesNotMatch = function doesNotMatch(string, regexp, message) {\n internalMatch(string, regexp, message, doesNotMatch, 'doesNotMatch');\n};\n\n// Expose a strict only variant of assert\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n'use strict';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _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 _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 _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\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 _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = require('util/'),\n inspect = _require.inspect;\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n while (count) {\n str += str;\n count--;\n }\n str += str.substring(0, maxCount - str.length);\n return str;\n}\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n};\n\n// Comparing short primitives should just show === / !== instead of using the\n// diff.\nvar kMaxShortLength = 10;\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = '';\n\n // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n }\n\n // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length;\n // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n }\n // Ignore the first characters.\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n }\n\n // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n var maxLines = Math.max(actualLines.length, expectedLines.length);\n // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n');\n\n // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the expected line to the cache.\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++;\n // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the actual line to the result.\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++;\n // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i];\n // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine);\n // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2;\n // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = '';\n // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n }\n // Inspected object to big (Show ~20 rows max)\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\nvar AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {\n _inherits(AssertionError, _Error);\n var _super = _createSuper(AssertionError);\n function AssertionError(options) {\n var _this;\n _classCallCheck(this, AssertionError);\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n if (message != null) {\n _this = _super.call(this, String(message));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n }\n // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _super.call(this, createErrDiff(actual, expected, operator));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n');\n\n // In case \"actual\" is an object, it should not be reference equal.\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n }\n\n // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n while (res.length > 27) {\n res.pop();\n }\n }\n\n // Only print a single input.\n if (res.length === 1) {\n _this = _super.call(this, \"\".concat(base, \" \").concat(res[0]));\n } else {\n _this = _super.call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\"));\n }\n } else {\n var _res = inspectValue(actual);\n var other = '';\n var knownOperators = kReadableOperator[operator];\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n _this = _super.call(this, \"\".concat(_res).concat(other));\n }\n }\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n }\n // Create error message including the error code in the name.\n _this.stack;\n // Reset the name.\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: _inspect$custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread(_objectSpread({}, ctx), {}, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n return AssertionError;\n}( /*#__PURE__*/_wrapNativeSuper(Error), inspect.custom);\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n/* eslint node-core/alphabetize-errors: \"error\" */\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n\n'use strict';\n\n// The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\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); }\nvar codes = {};\n\n// Lazy loaded\nvar assert;\nvar util;\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n var NodeError = /*#__PURE__*/function (_Base) {\n _inherits(NodeError, _Base);\n var _super = _createSuper(NodeError);\n function NodeError(arg1, arg2, arg3) {\n var _this;\n _classCallCheck(this, NodeError);\n _this = _super.call(this, getMessage(arg1, arg2, arg3));\n _this.code = code;\n return _this;\n }\n return _createClass(NodeError);\n }(Base);\n codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\");\n\n // determiner: 'must be' or 'must not be'\n var determiner;\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n var msg;\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n // TODO(BridgeAR): Improve the output by showing `null` and similar.\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar regexFlagsSupported = /a/g.flags !== undefined;\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n }\n // The maximum size for an array is 2 ** 32 -1.\n return key.length === 10 && key >= Math.pow(2, 32);\n}\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n}\n\n// Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n var x = a.length;\n var y = b.length;\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3;\n\n// Check if they have the same source and flags\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n return true;\n}\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n}\n\n// Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n }\n\n // Check more closely if val1 and val2 are equal.\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n return false;\n }\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n if (val1Tag !== val2Tag) {\n return false;\n }\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n if (keys1.length !== keys2.length) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n }\n // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n }\n // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n if (_keys.length !== _keys2.length) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2);\n\n // The pair must have the same number of owned properties.\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n }\n\n // Cheap key test\n var i = 0;\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n if (symbolKeysA.length !== 0) {\n var count = 0;\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n }\n\n // Use memos to handle cycles.\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n memos.position++;\n }\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n return false;\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n case 'object':\n // Only pass in null as object!\n return undefined;\n case 'symbol':\n return false;\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n }\n return true;\n}\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n var curB = b.get(altValue);\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i];\n // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n }\n // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false;\n\n // Fast path to detect missing string, symbol, undefined and null values.\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n if (set === null) {\n set = new Set();\n }\n set.add(val);\n }\n }\n if (set !== null) {\n var bValues = arrayFromSet(b);\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i];\n // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n return set.size === 0;\n }\n return true;\n}\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n return false;\n}\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false;\n // Fast path to detect missing string, symbol, undefined and null\n // keys.\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n if (set === null) {\n set = new Set();\n }\n set.add(key);\n }\n }\n }\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n _key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n if (_typeof(_key) === 'object' && _key !== null) {\n if (!mapHasEqualEntry(set, a, _key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(_key) || !innerDeepEqual(a.get(_key), item, false, memo)) && !mapHasEqualEntry(set, a, _key, item, false, memo)) {\n return false;\n }\n }\n return set.size === 0;\n }\n return true;\n}\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n return true;\n }\n }\n }\n\n // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n for (i = 0; i < keys.length; i++) {\n var _key2 = keys[i];\n if (!innerDeepEqual(a[_key2], b[_key2], strict, memos)) {\n return false;\n }\n }\n return true;\n}\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","var BrowserslistError = require('./error')\n\nfunction noop() {}\n\nmodule.exports = {\n loadQueries: function loadQueries() {\n throw new BrowserslistError(\n 'Sharable configs are not supported in client-side build of Browserslist'\n )\n },\n\n getStat: function getStat(opts) {\n return opts.stats\n },\n\n loadConfig: function loadConfig(opts) {\n if (opts.config) {\n throw new BrowserslistError(\n 'Browserslist config are not supported in client-side build'\n )\n }\n },\n\n loadCountry: function loadCountry() {\n throw new BrowserslistError(\n 'Country statistics are not supported ' +\n 'in client-side build of Browserslist'\n )\n },\n\n loadFeature: function loadFeature() {\n throw new BrowserslistError(\n 'Supports queries are not available in client-side build of Browserslist'\n )\n },\n\n currentNode: function currentNode(resolve, context) {\n return resolve(['maintained node versions'], context)[0]\n },\n\n parseConfig: noop,\n\n readConfig: noop,\n\n findConfig: noop,\n\n findConfigFile: noop,\n\n clearCaches: noop,\n\n oldDataWarning: noop,\n\n env: {}\n}\n","function BrowserslistError(message) {\n this.name = 'BrowserslistError'\n this.message = message\n this.browserslist = true\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrowserslistError)\n }\n}\n\nBrowserslistError.prototype = Error.prototype\n\nmodule.exports = BrowserslistError\n","var jsReleases = require('node-releases/data/processed/envs.json')\nvar agents = require('caniuse-lite/dist/unpacker/agents').agents\nvar e2c = require('electron-to-chromium/versions')\nvar jsEOL = require('node-releases/data/release-schedule/release-schedule.json')\nvar path = require('path')\n\nvar BrowserslistError = require('./error')\nvar env = require('./node')\nvar parseWithoutCache = require('./parse') // Will load browser.js in webpack\n\nvar YEAR = 365.259641 * 24 * 60 * 60 * 1000\nvar ANDROID_EVERGREEN_FIRST = '37'\nvar OP_MOB_BLINK_FIRST = 14\n\n// Helpers\n\nfunction isVersionsMatch(versionA, versionB) {\n return (versionA + '.').indexOf(versionB + '.') === 0\n}\n\nfunction isEolReleased(name) {\n var version = name.slice(1)\n return browserslist.nodeVersions.some(function (i) {\n return isVersionsMatch(i, version)\n })\n}\n\nfunction normalize(versions) {\n return versions.filter(function (version) {\n return typeof version === 'string'\n })\n}\n\nfunction normalizeElectron(version) {\n var versionToUse = version\n if (version.split('.').length === 3) {\n versionToUse = version.split('.').slice(0, -1).join('.')\n }\n return versionToUse\n}\n\nfunction nameMapper(name) {\n return function mapName(version) {\n return name + ' ' + version\n }\n}\n\nfunction getMajor(version) {\n return parseInt(version.split('.')[0])\n}\n\nfunction getMajorVersions(released, number) {\n if (released.length === 0) return []\n var majorVersions = uniq(released.map(getMajor))\n var minimum = majorVersions[majorVersions.length - number]\n if (!minimum) {\n return released\n }\n var selected = []\n for (var i = released.length - 1; i >= 0; i--) {\n if (minimum > getMajor(released[i])) break\n selected.unshift(released[i])\n }\n return selected\n}\n\nfunction uniq(array) {\n var filtered = []\n for (var i = 0; i < array.length; i++) {\n if (filtered.indexOf(array[i]) === -1) filtered.push(array[i])\n }\n return filtered\n}\n\nfunction fillUsage(result, name, data) {\n for (var i in data) {\n result[name + ' ' + i] = data[i]\n }\n}\n\nfunction generateFilter(sign, version) {\n version = parseFloat(version)\n if (sign === '>') {\n return function (v) {\n return parseLatestFloat(v) > version\n }\n } else if (sign === '>=') {\n return function (v) {\n return parseLatestFloat(v) >= version\n }\n } else if (sign === '<') {\n return function (v) {\n return parseFloat(v) < version\n }\n } else {\n return function (v) {\n return parseFloat(v) <= version\n }\n }\n\n function parseLatestFloat(v) {\n return parseFloat(v.split('-')[1] || v)\n }\n}\n\nfunction generateSemverFilter(sign, version) {\n version = version.split('.').map(parseSimpleInt)\n version[1] = version[1] || 0\n version[2] = version[2] || 0\n if (sign === '>') {\n return function (v) {\n v = v.split('.').map(parseSimpleInt)\n return compareSemver(v, version) > 0\n }\n } else if (sign === '>=') {\n return function (v) {\n v = v.split('.').map(parseSimpleInt)\n return compareSemver(v, version) >= 0\n }\n } else if (sign === '<') {\n return function (v) {\n v = v.split('.').map(parseSimpleInt)\n return compareSemver(version, v) > 0\n }\n } else {\n return function (v) {\n v = v.split('.').map(parseSimpleInt)\n return compareSemver(version, v) >= 0\n }\n }\n}\n\nfunction parseSimpleInt(x) {\n return parseInt(x)\n}\n\nfunction compare(a, b) {\n if (a < b) return -1\n if (a > b) return +1\n return 0\n}\n\nfunction compareSemver(a, b) {\n return (\n compare(parseInt(a[0]), parseInt(b[0])) ||\n compare(parseInt(a[1] || '0'), parseInt(b[1] || '0')) ||\n compare(parseInt(a[2] || '0'), parseInt(b[2] || '0'))\n )\n}\n\n// this follows the npm-like semver behavior\nfunction semverFilterLoose(operator, range) {\n range = range.split('.').map(parseSimpleInt)\n if (typeof range[1] === 'undefined') {\n range[1] = 'x'\n }\n // ignore any patch version because we only return minor versions\n // range[2] = 'x'\n switch (operator) {\n case '<=':\n return function (version) {\n version = version.split('.').map(parseSimpleInt)\n return compareSemverLoose(version, range) <= 0\n }\n case '>=':\n default:\n return function (version) {\n version = version.split('.').map(parseSimpleInt)\n return compareSemverLoose(version, range) >= 0\n }\n }\n}\n\n// this follows the npm-like semver behavior\nfunction compareSemverLoose(version, range) {\n if (version[0] !== range[0]) {\n return version[0] < range[0] ? -1 : +1\n }\n if (range[1] === 'x') {\n return 0\n }\n if (version[1] !== range[1]) {\n return version[1] < range[1] ? -1 : +1\n }\n return 0\n}\n\nfunction resolveVersion(data, version) {\n if (data.versions.indexOf(version) !== -1) {\n return version\n } else if (browserslist.versionAliases[data.name][version]) {\n return browserslist.versionAliases[data.name][version]\n } else {\n return false\n }\n}\n\nfunction normalizeVersion(data, version) {\n var resolved = resolveVersion(data, version)\n if (resolved) {\n return resolved\n } else if (data.versions.length === 1) {\n return data.versions[0]\n } else {\n return false\n }\n}\n\nfunction filterByYear(since, context) {\n since = since / 1000\n return Object.keys(agents).reduce(function (selected, name) {\n var data = byName(name, context)\n if (!data) return selected\n var versions = Object.keys(data.releaseDate).filter(function (v) {\n var date = data.releaseDate[v]\n return date !== null && date >= since\n })\n return selected.concat(versions.map(nameMapper(data.name)))\n }, [])\n}\n\nfunction cloneData(data) {\n return {\n name: data.name,\n versions: data.versions,\n released: data.released,\n releaseDate: data.releaseDate\n }\n}\n\nfunction byName(name, context) {\n name = name.toLowerCase()\n name = browserslist.aliases[name] || name\n if (context.mobileToDesktop && browserslist.desktopNames[name]) {\n var desktop = browserslist.data[browserslist.desktopNames[name]]\n if (name === 'android') {\n return normalizeAndroidData(cloneData(browserslist.data[name]), desktop)\n } else {\n var cloned = cloneData(desktop)\n cloned.name = name\n return cloned\n }\n }\n return browserslist.data[name]\n}\n\nfunction normalizeAndroidVersions(androidVersions, chromeVersions) {\n var iFirstEvergreen = chromeVersions.indexOf(ANDROID_EVERGREEN_FIRST)\n return androidVersions\n .filter(function (version) {\n return /^(?:[2-4]\\.|[34]$)/.test(version)\n })\n .concat(chromeVersions.slice(iFirstEvergreen))\n}\n\nfunction copyObject(obj) {\n var copy = {}\n for (var key in obj) {\n copy[key] = obj[key]\n }\n return copy\n}\n\nfunction normalizeAndroidData(android, chrome) {\n android.released = normalizeAndroidVersions(android.released, chrome.released)\n android.versions = normalizeAndroidVersions(android.versions, chrome.versions)\n android.releaseDate = copyObject(android.releaseDate)\n android.released.forEach(function (v) {\n if (android.releaseDate[v] === undefined) {\n android.releaseDate[v] = chrome.releaseDate[v]\n }\n })\n return android\n}\n\nfunction checkName(name, context) {\n var data = byName(name, context)\n if (!data) throw new BrowserslistError('Unknown browser ' + name)\n return data\n}\n\nfunction unknownQuery(query) {\n return new BrowserslistError(\n 'Unknown browser query `' +\n query +\n '`. ' +\n 'Maybe you are using old Browserslist or made typo in query.'\n )\n}\n\n// Adjusts last X versions queries for some mobile browsers,\n// where caniuse data jumps from a legacy version to the latest\nfunction filterJumps(list, name, nVersions, context) {\n var jump = 1\n switch (name) {\n case 'android':\n if (context.mobileToDesktop) return list\n var released = browserslist.data.chrome.released\n jump = released.length - released.indexOf(ANDROID_EVERGREEN_FIRST)\n break\n case 'op_mob':\n var latest = browserslist.data.op_mob.released.slice(-1)[0]\n jump = getMajor(latest) - OP_MOB_BLINK_FIRST + 1\n break\n default:\n return list\n }\n if (nVersions <= jump) {\n return list.slice(-1)\n }\n return list.slice(jump - 1 - nVersions)\n}\n\nfunction isSupported(flags, withPartial) {\n return (\n typeof flags === 'string' &&\n (flags.indexOf('y') >= 0 || (withPartial && flags.indexOf('a') >= 0))\n )\n}\n\nfunction resolve(queries, context) {\n return parseQueries(queries).reduce(function (result, node, index) {\n if (node.not && index === 0) {\n throw new BrowserslistError(\n 'Write any browsers query (for instance, `defaults`) ' +\n 'before `' +\n node.query +\n '`'\n )\n }\n var type = QUERIES[node.type]\n var array = type.select.call(browserslist, context, node).map(function (j) {\n var parts = j.split(' ')\n if (parts[1] === '0') {\n return parts[0] + ' ' + byName(parts[0], context).versions[0]\n } else {\n return j\n }\n })\n\n if (node.compose === 'and') {\n if (node.not) {\n return result.filter(function (j) {\n return array.indexOf(j) === -1\n })\n } else {\n return result.filter(function (j) {\n return array.indexOf(j) !== -1\n })\n }\n } else {\n if (node.not) {\n var filter = {}\n array.forEach(function (j) {\n filter[j] = true\n })\n return result.filter(function (j) {\n return !filter[j]\n })\n }\n return result.concat(array)\n }\n }, [])\n}\n\nfunction prepareOpts(opts) {\n if (typeof opts === 'undefined') opts = {}\n\n if (typeof opts.path === 'undefined') {\n opts.path = path.resolve ? path.resolve('.') : '.'\n }\n\n return opts\n}\n\nfunction prepareQueries(queries, opts) {\n if (typeof queries === 'undefined' || queries === null) {\n var config = browserslist.loadConfig(opts)\n if (config) {\n queries = config\n } else {\n queries = browserslist.defaults\n }\n }\n\n return queries\n}\n\nfunction checkQueries(queries) {\n if (!(typeof queries === 'string' || Array.isArray(queries))) {\n throw new BrowserslistError(\n 'Browser queries must be an array or string. Got ' + typeof queries + '.'\n )\n }\n}\n\nvar cache = {}\nvar parseCache = {}\n\nfunction browserslist(queries, opts) {\n opts = prepareOpts(opts)\n queries = prepareQueries(queries, opts)\n checkQueries(queries)\n\n var needsPath = parseQueries(queries).some(function (node) {\n return QUERIES[node.type].needsPath\n })\n var context = {\n ignoreUnknownVersions: opts.ignoreUnknownVersions,\n dangerousExtend: opts.dangerousExtend,\n mobileToDesktop: opts.mobileToDesktop,\n env: opts.env\n }\n // Removing to avoid using context.path without marking query as needsPath\n if (needsPath) {\n context.path = opts.path\n }\n\n env.oldDataWarning(browserslist.data)\n var stats = env.getStat(opts, browserslist.data)\n if (stats) {\n context.customUsage = {}\n for (var browser in stats) {\n fillUsage(context.customUsage, browser, stats[browser])\n }\n }\n\n var cacheKey = JSON.stringify([queries, context])\n if (cache[cacheKey]) return cache[cacheKey]\n\n var result = uniq(resolve(queries, context)).sort(function (name1, name2) {\n name1 = name1.split(' ')\n name2 = name2.split(' ')\n if (name1[0] === name2[0]) {\n // assumptions on caniuse data\n // 1) version ranges never overlaps\n // 2) if version is not a range, it never contains `-`\n var version1 = name1[1].split('-')[0]\n var version2 = name2[1].split('-')[0]\n return compareSemver(version2.split('.'), version1.split('.'))\n } else {\n return compare(name1[0], name2[0])\n }\n })\n if (!env.env.BROWSERSLIST_DISABLE_CACHE) {\n cache[cacheKey] = result\n }\n return result\n}\n\nfunction parseQueries(queries) {\n var cacheKey = JSON.stringify(queries)\n if (cacheKey in parseCache) return parseCache[cacheKey]\n var result = parseWithoutCache(QUERIES, queries)\n if (!env.env.BROWSERSLIST_DISABLE_CACHE) {\n parseCache[cacheKey] = result\n }\n return result\n}\n\nbrowserslist.parse = function (queries, opts) {\n opts = prepareOpts(opts)\n queries = prepareQueries(queries, opts)\n checkQueries(queries)\n return parseQueries(queries)\n}\n\n// Will be filled by Can I Use data below\nbrowserslist.cache = {}\nbrowserslist.data = {}\nbrowserslist.usage = {\n global: {},\n custom: null\n}\n\n// Default browsers query\nbrowserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']\n\n// Browser names aliases\nbrowserslist.aliases = {\n fx: 'firefox',\n ff: 'firefox',\n ios: 'ios_saf',\n explorer: 'ie',\n blackberry: 'bb',\n explorermobile: 'ie_mob',\n operamini: 'op_mini',\n operamobile: 'op_mob',\n chromeandroid: 'and_chr',\n firefoxandroid: 'and_ff',\n ucandroid: 'and_uc',\n qqandroid: 'and_qq'\n}\n\n// Can I Use only provides a few versions for some browsers (e.g. and_chr).\n// Fallback to a similar browser for unknown versions\n// Note op_mob is not included as its chromium versions are not in sync with Opera desktop\nbrowserslist.desktopNames = {\n and_chr: 'chrome',\n and_ff: 'firefox',\n ie_mob: 'ie',\n android: 'chrome' // has extra processing logic\n}\n\n// Aliases to work with joined versions like `ios_saf 7.0-7.1`\nbrowserslist.versionAliases = {}\n\nbrowserslist.clearCaches = env.clearCaches\nbrowserslist.parseConfig = env.parseConfig\nbrowserslist.readConfig = env.readConfig\nbrowserslist.findConfigFile = env.findConfigFile\nbrowserslist.findConfig = env.findConfig\nbrowserslist.loadConfig = env.loadConfig\n\nbrowserslist.coverage = function (browsers, stats) {\n var data\n if (typeof stats === 'undefined') {\n data = browserslist.usage.global\n } else if (stats === 'my stats') {\n var opts = {}\n opts.path = path.resolve ? path.resolve('.') : '.'\n var customStats = env.getStat(opts)\n if (!customStats) {\n throw new BrowserslistError('Custom usage statistics was not provided')\n }\n data = {}\n for (var browser in customStats) {\n fillUsage(data, browser, customStats[browser])\n }\n } else if (typeof stats === 'string') {\n if (stats.length > 2) {\n stats = stats.toLowerCase()\n } else {\n stats = stats.toUpperCase()\n }\n env.loadCountry(browserslist.usage, stats, browserslist.data)\n data = browserslist.usage[stats]\n } else {\n if ('dataByBrowser' in stats) {\n stats = stats.dataByBrowser\n }\n data = {}\n for (var name in stats) {\n for (var version in stats[name]) {\n data[name + ' ' + version] = stats[name][version]\n }\n }\n }\n\n return browsers.reduce(function (all, i) {\n var usage = data[i]\n if (usage === undefined) {\n usage = data[i.replace(/ \\S+$/, ' 0')]\n }\n return all + (usage || 0)\n }, 0)\n}\n\nfunction nodeQuery(context, node) {\n var matched = browserslist.nodeVersions.filter(function (i) {\n return isVersionsMatch(i, node.version)\n })\n if (matched.length === 0) {\n if (context.ignoreUnknownVersions) {\n return []\n } else {\n throw new BrowserslistError(\n 'Unknown version ' + node.version + ' of Node.js'\n )\n }\n }\n return ['node ' + matched[matched.length - 1]]\n}\n\nfunction sinceQuery(context, node) {\n var year = parseInt(node.year)\n var month = parseInt(node.month || '01') - 1\n var day = parseInt(node.day || '01')\n return filterByYear(Date.UTC(year, month, day, 0, 0, 0), context)\n}\n\nfunction coverQuery(context, node) {\n var coverage = parseFloat(node.coverage)\n var usage = browserslist.usage.global\n if (node.place) {\n if (node.place.match(/^my\\s+stats$/i)) {\n if (!context.customUsage) {\n throw new BrowserslistError('Custom usage statistics was not provided')\n }\n usage = context.customUsage\n } else {\n var place\n if (node.place.length === 2) {\n place = node.place.toUpperCase()\n } else {\n place = node.place.toLowerCase()\n }\n env.loadCountry(browserslist.usage, place, browserslist.data)\n usage = browserslist.usage[place]\n }\n }\n var versions = Object.keys(usage).sort(function (a, b) {\n return usage[b] - usage[a]\n })\n var coveraged = 0\n var result = []\n var version\n for (var i = 0; i < versions.length; i++) {\n version = versions[i]\n if (usage[version] === 0) break\n coveraged += usage[version]\n result.push(version)\n if (coveraged >= coverage) break\n }\n return result\n}\n\nvar QUERIES = {\n last_major_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+major\\s+versions?$/i,\n select: function (context, node) {\n return Object.keys(agents).reduce(function (selected, name) {\n var data = byName(name, context)\n if (!data) return selected\n var list = getMajorVersions(data.released, node.versions)\n list = list.map(nameMapper(data.name))\n list = filterJumps(list, data.name, node.versions, context)\n return selected.concat(list)\n }, [])\n }\n },\n last_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+versions?$/i,\n select: function (context, node) {\n return Object.keys(agents).reduce(function (selected, name) {\n var data = byName(name, context)\n if (!data) return selected\n var list = data.released.slice(-node.versions)\n list = list.map(nameMapper(data.name))\n list = filterJumps(list, data.name, node.versions, context)\n return selected.concat(list)\n }, [])\n }\n },\n last_electron_major_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+electron\\s+major\\s+versions?$/i,\n select: function (context, node) {\n var validVersions = getMajorVersions(Object.keys(e2c), node.versions)\n return validVersions.map(function (i) {\n return 'chrome ' + e2c[i]\n })\n }\n },\n last_node_major_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+node\\s+major\\s+versions?$/i,\n select: function (context, node) {\n return getMajorVersions(browserslist.nodeVersions, node.versions).map(\n function (version) {\n return 'node ' + version\n }\n )\n }\n },\n last_browser_major_versions: {\n matches: ['versions', 'browser'],\n regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+major\\s+versions?$/i,\n select: function (context, node) {\n var data = checkName(node.browser, context)\n var validVersions = getMajorVersions(data.released, node.versions)\n var list = validVersions.map(nameMapper(data.name))\n list = filterJumps(list, data.name, node.versions, context)\n return list\n }\n },\n last_electron_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+electron\\s+versions?$/i,\n select: function (context, node) {\n return Object.keys(e2c)\n .slice(-node.versions)\n .map(function (i) {\n return 'chrome ' + e2c[i]\n })\n }\n },\n last_node_versions: {\n matches: ['versions'],\n regexp: /^last\\s+(\\d+)\\s+node\\s+versions?$/i,\n select: function (context, node) {\n return browserslist.nodeVersions\n .slice(-node.versions)\n .map(function (version) {\n return 'node ' + version\n })\n }\n },\n last_browser_versions: {\n matches: ['versions', 'browser'],\n regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+versions?$/i,\n select: function (context, node) {\n var data = checkName(node.browser, context)\n var list = data.released.slice(-node.versions).map(nameMapper(data.name))\n list = filterJumps(list, data.name, node.versions, context)\n return list\n }\n },\n unreleased_versions: {\n matches: [],\n regexp: /^unreleased\\s+versions$/i,\n select: function (context) {\n return Object.keys(agents).reduce(function (selected, name) {\n var data = byName(name, context)\n if (!data) return selected\n var list = data.versions.filter(function (v) {\n return data.released.indexOf(v) === -1\n })\n list = list.map(nameMapper(data.name))\n return selected.concat(list)\n }, [])\n }\n },\n unreleased_electron_versions: {\n matches: [],\n regexp: /^unreleased\\s+electron\\s+versions?$/i,\n select: function () {\n return []\n }\n },\n unreleased_browser_versions: {\n matches: ['browser'],\n regexp: /^unreleased\\s+(\\w+)\\s+versions?$/i,\n select: function (context, node) {\n var data = checkName(node.browser, context)\n return data.versions\n .filter(function (v) {\n return data.released.indexOf(v) === -1\n })\n .map(nameMapper(data.name))\n }\n },\n last_years: {\n matches: ['years'],\n regexp: /^last\\s+(\\d*.?\\d+)\\s+years?$/i,\n select: function (context, node) {\n return filterByYear(Date.now() - YEAR * node.years, context)\n }\n },\n since_y: {\n matches: ['year'],\n regexp: /^since (\\d+)$/i,\n select: sinceQuery\n },\n since_y_m: {\n matches: ['year', 'month'],\n regexp: /^since (\\d+)-(\\d+)$/i,\n select: sinceQuery\n },\n since_y_m_d: {\n matches: ['year', 'month', 'day'],\n regexp: /^since (\\d+)-(\\d+)-(\\d+)$/i,\n select: sinceQuery\n },\n popularity: {\n matches: ['sign', 'popularity'],\n regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%$/,\n select: function (context, node) {\n var popularity = parseFloat(node.popularity)\n var usage = browserslist.usage.global\n return Object.keys(usage).reduce(function (result, version) {\n if (node.sign === '>') {\n if (usage[version] > popularity) {\n result.push(version)\n }\n } else if (node.sign === '<') {\n if (usage[version] < popularity) {\n result.push(version)\n }\n } else if (node.sign === '<=') {\n if (usage[version] <= popularity) {\n result.push(version)\n }\n } else if (usage[version] >= popularity) {\n result.push(version)\n }\n return result\n }, [])\n }\n },\n popularity_in_my_stats: {\n matches: ['sign', 'popularity'],\n regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+my\\s+stats$/,\n select: function (context, node) {\n var popularity = parseFloat(node.popularity)\n if (!context.customUsage) {\n throw new BrowserslistError('Custom usage statistics was not provided')\n }\n var usage = context.customUsage\n return Object.keys(usage).reduce(function (result, version) {\n var percentage = usage[version]\n if (percentage == null) {\n return result\n }\n\n if (node.sign === '>') {\n if (percentage > popularity) {\n result.push(version)\n }\n } else if (node.sign === '<') {\n if (percentage < popularity) {\n result.push(version)\n }\n } else if (node.sign === '<=') {\n if (percentage <= popularity) {\n result.push(version)\n }\n } else if (percentage >= popularity) {\n result.push(version)\n }\n return result\n }, [])\n }\n },\n popularity_in_config_stats: {\n matches: ['sign', 'popularity', 'config'],\n regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(\\S+)\\s+stats$/,\n select: function (context, node) {\n var popularity = parseFloat(node.popularity)\n var stats = env.loadStat(context, node.config, browserslist.data)\n if (stats) {\n context.customUsage = {}\n for (var browser in stats) {\n fillUsage(context.customUsage, browser, stats[browser])\n }\n }\n if (!context.customUsage) {\n throw new BrowserslistError('Custom usage statistics was not provided')\n }\n var usage = context.customUsage\n return Object.keys(usage).reduce(function (result, version) {\n var percentage = usage[version]\n if (percentage == null) {\n return result\n }\n\n if (node.sign === '>') {\n if (percentage > popularity) {\n result.push(version)\n }\n } else if (node.sign === '<') {\n if (percentage < popularity) {\n result.push(version)\n }\n } else if (node.sign === '<=') {\n if (percentage <= popularity) {\n result.push(version)\n }\n } else if (percentage >= popularity) {\n result.push(version)\n }\n return result\n }, [])\n }\n },\n popularity_in_place: {\n matches: ['sign', 'popularity', 'place'],\n regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+((alt-)?\\w\\w)$/,\n select: function (context, node) {\n var popularity = parseFloat(node.popularity)\n var place = node.place\n if (place.length === 2) {\n place = place.toUpperCase()\n } else {\n place = place.toLowerCase()\n }\n env.loadCountry(browserslist.usage, place, browserslist.data)\n var usage = browserslist.usage[place]\n return Object.keys(usage).reduce(function (result, version) {\n var percentage = usage[version]\n if (percentage == null) {\n return result\n }\n\n if (node.sign === '>') {\n if (percentage > popularity) {\n result.push(version)\n }\n } else if (node.sign === '<') {\n if (percentage < popularity) {\n result.push(version)\n }\n } else if (node.sign === '<=') {\n if (percentage <= popularity) {\n result.push(version)\n }\n } else if (percentage >= popularity) {\n result.push(version)\n }\n return result\n }, [])\n }\n },\n cover: {\n matches: ['coverage'],\n regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%$/i,\n select: coverQuery\n },\n cover_in: {\n matches: ['coverage', 'place'],\n regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(my\\s+stats|(alt-)?\\w\\w)$/i,\n select: coverQuery\n },\n supports: {\n matches: ['supportType', 'feature'],\n regexp: /^(?:(fully|partially)\\s+)?supports\\s+([\\w-]+)$/,\n select: function (context, node) {\n env.loadFeature(browserslist.cache, node.feature)\n var withPartial = node.supportType !== 'fully'\n var features = browserslist.cache[node.feature]\n var result = []\n for (var name in features) {\n var data = byName(name, context)\n // Only check desktop when latest released mobile has support\n var iMax = data.released.length - 1\n while (iMax >= 0) {\n if (data.released[iMax] in features[name]) break\n iMax--\n }\n var checkDesktop =\n context.mobileToDesktop &&\n name in browserslist.desktopNames &&\n isSupported(features[name][data.released[iMax]], withPartial)\n data.versions.forEach(function (version) {\n var flags = features[name][version]\n if (flags === undefined && checkDesktop) {\n flags = features[browserslist.desktopNames[name]][version]\n }\n if (isSupported(flags, withPartial)) {\n result.push(name + ' ' + version)\n }\n })\n }\n return result\n }\n },\n electron_range: {\n matches: ['from', 'to'],\n regexp: /^electron\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n select: function (context, node) {\n var fromToUse = normalizeElectron(node.from)\n var toToUse = normalizeElectron(node.to)\n var from = parseFloat(node.from)\n var to = parseFloat(node.to)\n if (!e2c[fromToUse]) {\n throw new BrowserslistError('Unknown version ' + from + ' of electron')\n }\n if (!e2c[toToUse]) {\n throw new BrowserslistError('Unknown version ' + to + ' of electron')\n }\n return Object.keys(e2c)\n .filter(function (i) {\n var parsed = parseFloat(i)\n return parsed >= from && parsed <= to\n })\n .map(function (i) {\n return 'chrome ' + e2c[i]\n })\n }\n },\n node_range: {\n matches: ['from', 'to'],\n regexp: /^node\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n select: function (context, node) {\n return browserslist.nodeVersions\n .filter(semverFilterLoose('>=', node.from))\n .filter(semverFilterLoose('<=', node.to))\n .map(function (v) {\n return 'node ' + v\n })\n }\n },\n browser_range: {\n matches: ['browser', 'from', 'to'],\n regexp: /^(\\w+)\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n select: function (context, node) {\n var data = checkName(node.browser, context)\n var from = parseFloat(normalizeVersion(data, node.from) || node.from)\n var to = parseFloat(normalizeVersion(data, node.to) || node.to)\n function filter(v) {\n var parsed = parseFloat(v)\n return parsed >= from && parsed <= to\n }\n return data.released.filter(filter).map(nameMapper(data.name))\n }\n },\n electron_ray: {\n matches: ['sign', 'version'],\n regexp: /^electron\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n select: function (context, node) {\n var versionToUse = normalizeElectron(node.version)\n return Object.keys(e2c)\n .filter(generateFilter(node.sign, versionToUse))\n .map(function (i) {\n return 'chrome ' + e2c[i]\n })\n }\n },\n node_ray: {\n matches: ['sign', 'version'],\n regexp: /^node\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n select: function (context, node) {\n return browserslist.nodeVersions\n .filter(generateSemverFilter(node.sign, node.version))\n .map(function (v) {\n return 'node ' + v\n })\n }\n },\n browser_ray: {\n matches: ['browser', 'sign', 'version'],\n regexp: /^(\\w+)\\s*(>=?|<=?)\\s*([\\d.]+)$/,\n select: function (context, node) {\n var version = node.version\n var data = checkName(node.browser, context)\n var alias = browserslist.versionAliases[data.name][version]\n if (alias) version = alias\n return data.released\n .filter(generateFilter(node.sign, version))\n .map(function (v) {\n return data.name + ' ' + v\n })\n }\n },\n firefox_esr: {\n matches: [],\n regexp: /^(firefox|ff|fx)\\s+esr$/i,\n select: function () {\n return ['firefox 128']\n }\n },\n opera_mini_all: {\n matches: [],\n regexp: /(operamini|op_mini)\\s+all/i,\n select: function () {\n return ['op_mini all']\n }\n },\n electron_version: {\n matches: ['version'],\n regexp: /^electron\\s+([\\d.]+)$/i,\n select: function (context, node) {\n var versionToUse = normalizeElectron(node.version)\n var chrome = e2c[versionToUse]\n if (!chrome) {\n throw new BrowserslistError(\n 'Unknown version ' + node.version + ' of electron'\n )\n }\n return ['chrome ' + chrome]\n }\n },\n node_major_version: {\n matches: ['version'],\n regexp: /^node\\s+(\\d+)$/i,\n select: nodeQuery\n },\n node_minor_version: {\n matches: ['version'],\n regexp: /^node\\s+(\\d+\\.\\d+)$/i,\n select: nodeQuery\n },\n node_patch_version: {\n matches: ['version'],\n regexp: /^node\\s+(\\d+\\.\\d+\\.\\d+)$/i,\n select: nodeQuery\n },\n current_node: {\n matches: [],\n regexp: /^current\\s+node$/i,\n select: function (context) {\n return [env.currentNode(resolve, context)]\n }\n },\n maintained_node: {\n matches: [],\n regexp: /^maintained\\s+node\\s+versions$/i,\n select: function (context) {\n var now = Date.now()\n var queries = Object.keys(jsEOL)\n .filter(function (key) {\n return (\n now < Date.parse(jsEOL[key].end) &&\n now > Date.parse(jsEOL[key].start) &&\n isEolReleased(key)\n )\n })\n .map(function (key) {\n return 'node ' + key.slice(1)\n })\n return resolve(queries, context)\n }\n },\n phantomjs_1_9: {\n matches: [],\n regexp: /^phantomjs\\s+1.9$/i,\n select: function () {\n return ['safari 5']\n }\n },\n phantomjs_2_1: {\n matches: [],\n regexp: /^phantomjs\\s+2.1$/i,\n select: function () {\n return ['safari 6']\n }\n },\n browser_version: {\n matches: ['browser', 'version'],\n regexp: /^(\\w+)\\s+(tp|[\\d.]+)$/i,\n select: function (context, node) {\n var version = node.version\n if (/^tp$/i.test(version)) version = 'TP'\n var data = checkName(node.browser, context)\n var alias = normalizeVersion(data, version)\n if (alias) {\n version = alias\n } else {\n if (version.indexOf('.') === -1) {\n alias = version + '.0'\n } else {\n alias = version.replace(/\\.0$/, '')\n }\n alias = normalizeVersion(data, alias)\n if (alias) {\n version = alias\n } else if (context.ignoreUnknownVersions) {\n return []\n } else {\n throw new BrowserslistError(\n 'Unknown version ' + version + ' of ' + node.browser\n )\n }\n }\n return [data.name + ' ' + version]\n }\n },\n browserslist_config: {\n matches: [],\n regexp: /^browserslist config$/i,\n needsPath: true,\n select: function (context) {\n return browserslist(undefined, context)\n }\n },\n extends: {\n matches: ['config'],\n regexp: /^extends (.+)$/i,\n needsPath: true,\n select: function (context, node) {\n return resolve(env.loadQueries(context, node.config), context)\n }\n },\n defaults: {\n matches: [],\n regexp: /^defaults$/i,\n select: function (context) {\n return resolve(browserslist.defaults, context)\n }\n },\n dead: {\n matches: [],\n regexp: /^dead$/i,\n select: function (context) {\n var dead = [\n 'Baidu >= 0',\n 'ie <= 11',\n 'ie_mob <= 11',\n 'bb <= 10',\n 'op_mob <= 12.1',\n 'samsung 4'\n ]\n return resolve(dead, context)\n }\n },\n unknown: {\n matches: [],\n regexp: /^(\\w+)$/i,\n select: function (context, node) {\n if (byName(node.query, context)) {\n throw new BrowserslistError(\n 'Specify versions in Browserslist query for browser ' + node.query\n )\n } else {\n throw unknownQuery(node.query)\n }\n }\n }\n}\n\n// Get and convert Can I Use data\n\n;(function () {\n for (var name in agents) {\n var browser = agents[name]\n browserslist.data[name] = {\n name: name,\n versions: normalize(agents[name].versions),\n released: normalize(agents[name].versions.slice(0, -3)),\n releaseDate: agents[name].release_date\n }\n fillUsage(browserslist.usage.global, name, browser.usage_global)\n\n browserslist.versionAliases[name] = {}\n for (var i = 0; i < browser.versions.length; i++) {\n var full = browser.versions[i]\n if (!full) continue\n\n if (full.indexOf('-') !== -1) {\n var interval = full.split('-')\n for (var j = 0; j < interval.length; j++) {\n browserslist.versionAliases[name][interval[j]] = full\n }\n }\n }\n }\n\n browserslist.nodeVersions = jsReleases.map(function (release) {\n return release.version\n })\n})()\n\nmodule.exports = browserslist\n","var AND_REGEXP = /^\\s+and\\s+(.*)/i\nvar OR_REGEXP = /^(?:,\\s*|\\s+or\\s+)(.*)/i\n\nfunction flatten(array) {\n if (!Array.isArray(array)) return [array]\n return array.reduce(function (a, b) {\n return a.concat(flatten(b))\n }, [])\n}\n\nfunction find(string, predicate) {\n for (var max = string.length, n = 1; n <= max; n++) {\n var parsed = string.substr(-n, n)\n if (predicate(parsed, n, max)) {\n return string.slice(0, -n)\n }\n }\n return ''\n}\n\nfunction matchQuery(all, query) {\n var node = { query: query }\n if (query.indexOf('not ') === 0) {\n node.not = true\n query = query.slice(4)\n }\n\n for (var name in all) {\n var type = all[name]\n var match = query.match(type.regexp)\n if (match) {\n node.type = name\n for (var i = 0; i < type.matches.length; i++) {\n node[type.matches[i]] = match[i + 1]\n }\n return node\n }\n }\n\n node.type = 'unknown'\n return node\n}\n\nfunction matchBlock(all, string, qs) {\n var node\n return find(string, function (parsed, n, max) {\n if (AND_REGEXP.test(parsed)) {\n node = matchQuery(all, parsed.match(AND_REGEXP)[1])\n node.compose = 'and'\n qs.unshift(node)\n return true\n } else if (OR_REGEXP.test(parsed)) {\n node = matchQuery(all, parsed.match(OR_REGEXP)[1])\n node.compose = 'or'\n qs.unshift(node)\n return true\n } else if (n === max) {\n node = matchQuery(all, parsed.trim())\n node.compose = 'or'\n qs.unshift(node)\n return true\n }\n return false\n })\n}\n\nmodule.exports = function parse(all, queries) {\n if (!Array.isArray(queries)) queries = [queries]\n return flatten(\n queries.map(function (block) {\n var qs = []\n do {\n block = matchBlock(all, block, qs)\n } while (block)\n return qs\n })\n )\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {import('.')} */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + (adjustedLength > 0 ? adjustedLength : 0),\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t// eslint-disable-next-line no-extra-parens\n\tvar intrinsic = /** @type {Parameters[0][0]} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic([intrinsic]);\n\t}\n\treturn intrinsic;\n};\n","module.exports={A:{A:{K:0,E:0,F:0,G:0.0346884,A:0,B:0.433605,jC:0},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"jC\",\"K\",\"E\",\"F\",\"G\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE\",F:{jC:962323200,K:998870400,E:1161129600,F:1237420800,G:1300060800,A:1346716800,B:1381968000}},B:{A:{\"6\":0.003521,\"7\":0.003521,\"8\":0.003521,\"9\":0.003521,C:0,L:0,M:0,H:0,N:0,O:0.003521,P:0.084504,Q:0,I:0,R:0,S:0,T:0,U:0,V:0,W:0,X:0,Y:0,Z:0,a:0,b:0.014084,c:0,d:0,e:0,f:0,g:0,h:0,i:0,j:0,k:0,l:0,m:0.003521,n:0,o:0,p:0,q:0,r:0.003521,s:0.052815,t:0,u:0.003521,v:0.003521,w:0.007042,x:0.010563,AB:0.007042,BB:0.017605,CB:0.010563,DB:0.014084,EB:0.007042,FB:0.010563,GB:0.010563,HB:0.024647,IB:0.021126,JB:0.024647,KB:0.03521,LB:0.137319,MB:4.16182,D:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"C\",\"L\",\"M\",\"H\",\"N\",\"O\",\"P\",\"Q\",\"I\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"D\",\"\",\"\",\"\"],E:\"Edge\",F:{\"6\":1689897600,\"7\":1692576000,\"8\":1694649600,\"9\":1697155200,C:1438128000,L:1447286400,M:1470096000,H:1491868800,N:1508198400,O:1525046400,P:1542067200,Q:1579046400,I:1581033600,R:1586736000,S:1590019200,T:1594857600,U:1598486400,V:1602201600,W:1605830400,X:1611360000,Y:1614816000,Z:1618358400,a:1622073600,b:1626912000,c:1630627200,d:1632441600,e:1634774400,f:1637539200,g:1641427200,h:1643932800,i:1646265600,j:1649635200,k:1651190400,l:1653955200,m:1655942400,n:1659657600,o:1661990400,p:1664755200,q:1666915200,r:1670198400,s:1673481600,t:1675900800,u:1678665600,v:1680825600,w:1683158400,x:1685664000,AB:1698969600,BB:1701993600,CB:1706227200,DB:1708732800,EB:1711152000,FB:1713398400,GB:1715990400,HB:1718841600,IB:1721865600,JB:1724371200,KB:1726704000,LB:1729123200,MB:1731542400,D:1737417600},D:{C:\"ms\",L:\"ms\",M:\"ms\",H:\"ms\",N:\"ms\",O:\"ms\",P:\"ms\"}},C:{A:{\"0\":0,\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0.253512,\"7\":0,\"8\":0,\"9\":0.088025,kC:0,IC:0,J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:0.014084,C:0,L:0,M:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:0,aB:0,bB:0,cB:0,dB:0,eB:0.007042,fB:0.003521,gB:0,hB:0,iB:0,jB:0,kB:0,lB:0,mB:0,nB:0.028168,oB:0,pB:0,qB:0.007042,rB:0.014084,sB:0,tB:0,JC:0.003521,uB:0,KC:0,vB:0,wB:0,xB:0,yB:0,zB:0,\"0B\":0,\"1B\":0,\"2B\":0,\"3B\":0,\"4B\":0,\"5B\":0,\"6B\":0,\"7B\":0,\"8B\":0,\"9B\":0,AC:0,BC:0.010563,Q:0,I:0,R:0,LC:0,S:0,T:0,U:0,V:0,W:0,X:0.003521,Y:0,Z:0,a:0,b:0,c:0,d:0,e:0,f:0,g:0,h:0,i:0,j:0,k:0,l:0,m:0.007042,n:0,o:0,p:0,q:0,r:0,s:0.003521,t:0,u:0,v:0,w:0.007042,x:0.003521,AB:0,BB:0.003521,CB:0,DB:0,EB:0,FB:0,GB:0.017605,HB:0.003521,IB:0.010563,JB:0.07042,KB:0.007042,LB:0.007042,MB:0.017605,D:0.077462,MC:1.38727,NC:0.007042,OC:0,lC:0,mC:0,nC:0,oC:0},B:\"moz\",C:[\"kC\",\"IC\",\"nC\",\"oC\",\"J\",\"NB\",\"K\",\"E\",\"F\",\"G\",\"A\",\"B\",\"C\",\"L\",\"M\",\"H\",\"N\",\"O\",\"P\",\"OB\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"JC\",\"uB\",\"KC\",\"vB\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"1B\",\"2B\",\"3B\",\"4B\",\"5B\",\"6B\",\"7B\",\"8B\",\"9B\",\"AC\",\"BC\",\"Q\",\"I\",\"R\",\"LC\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"D\",\"MC\",\"NC\",\"OC\",\"lC\",\"mC\"],E:\"Firefox\",F:{\"0\":1368489600,\"1\":1372118400,\"2\":1375747200,\"3\":1379376000,\"4\":1386633600,\"5\":1391472000,\"6\":1688428800,\"7\":1690848000,\"8\":1693267200,\"9\":1695686400,kC:1161648000,IC:1213660800,nC:1246320000,oC:1264032000,J:1300752000,NB:1308614400,K:1313452800,E:1317081600,F:1317081600,G:1320710400,A:1324339200,B:1327968000,C:1331596800,L:1335225600,M:1338854400,H:1342483200,N:1346112000,O:1349740800,P:1353628800,OB:1357603200,y:1361232000,z:1364860800,PB:1395100800,QB:1398729600,RB:1402358400,SB:1405987200,TB:1409616000,UB:1413244800,VB:1417392000,WB:1421107200,XB:1424736000,YB:1428278400,ZB:1431475200,aB:1435881600,bB:1439251200,cB:1442880000,dB:1446508800,eB:1450137600,fB:1453852800,gB:1457395200,hB:1461628800,iB:1465257600,jB:1470096000,kB:1474329600,lB:1479168000,mB:1485216000,nB:1488844800,oB:1492560000,pB:1497312000,qB:1502150400,rB:1506556800,sB:1510617600,tB:1516665600,JC:1520985600,uB:1525824000,KC:1529971200,vB:1536105600,wB:1540252800,xB:1544486400,yB:1548720000,zB:1552953600,\"0B\":1558396800,\"1B\":1562630400,\"2B\":1567468800,\"3B\":1571788800,\"4B\":1575331200,\"5B\":1578355200,\"6B\":1581379200,\"7B\":1583798400,\"8B\":1586304000,\"9B\":1588636800,AC:1591056000,BC:1593475200,Q:1595894400,I:1598313600,R:1600732800,LC:1603152000,S:1605571200,T:1607990400,U:1611619200,V:1614038400,W:1616457600,X:1618790400,Y:1622505600,Z:1626134400,a:1628553600,b:1630972800,c:1633392000,d:1635811200,e:1638835200,f:1641859200,g:1644364800,h:1646697600,i:1649116800,j:1651536000,k:1653955200,l:1656374400,m:1658793600,n:1661212800,o:1663632000,p:1666051200,q:1668470400,r:1670889600,s:1673913600,t:1676332800,u:1678752000,v:1681171200,w:1683590400,x:1686009600,AB:1698105600,BB:1700524800,CB:1702944000,DB:1705968000,EB:1708387200,FB:1710806400,GB:1713225600,HB:1715644800,IB:1718064000,JB:1720483200,KB:1722902400,LB:1725321600,MB:1727740800,D:1730160000,MC:1732579200,NC:1736208000,OC:null,lC:null,mC:null}},D:{A:{\"0\":0,\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0.024647,\"7\":0.130277,\"8\":0.07042,\"9\":0.059857,J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:0,C:0,L:0,M:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:0.007042,aB:0,bB:0,cB:0,dB:0,eB:0,fB:0,gB:0.003521,hB:0,iB:0.003521,jB:0.017605,kB:0.014084,lB:0.014084,mB:0,nB:0.003521,oB:0.003521,pB:0,qB:0,rB:0.007042,sB:0,tB:0.024647,JC:0,uB:0,KC:0.007042,vB:0,wB:0,xB:0,yB:0,zB:0.021126,\"0B\":0,\"1B\":0,\"2B\":0.010563,\"3B\":0.014084,\"4B\":0,\"5B\":0,\"6B\":0.007042,\"7B\":0.007042,\"8B\":0.007042,\"9B\":0.003521,AC:0.017605,BC:0.010563,Q:0.084504,I:0.007042,R:0.03521,S:0.028168,T:0.003521,U:0.014084,V:0.021126,W:0.063378,X:0.007042,Y:0.010563,Z:0.007042,a:0.031689,b:0.014084,c:0.014084,d:0.03521,e:0.038731,f:0.007042,g:0.010563,h:0.042252,i:0.014084,j:0.021126,k:0.014084,l:0.010563,m:0.10563,n:0.021126,o:0.010563,p:0.017605,q:0.021126,r:0.03521,s:1.09503,t:0.017605,u:0.031689,v:0.03521,w:0.109151,x:0.07042,AB:0.042252,BB:0.063378,CB:0.119714,DB:0.077462,EB:0.080983,FB:0.14084,GB:1.28869,HB:0.415478,IB:0.334495,JB:0.179571,KB:0.232386,LB:0.982359,MB:15.0065,D:0.017605,MC:0.014084,NC:0,OC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"J\",\"NB\",\"K\",\"E\",\"F\",\"G\",\"A\",\"B\",\"C\",\"L\",\"M\",\"H\",\"N\",\"O\",\"P\",\"OB\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"JC\",\"uB\",\"KC\",\"vB\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"1B\",\"2B\",\"3B\",\"4B\",\"5B\",\"6B\",\"7B\",\"8B\",\"9B\",\"AC\",\"BC\",\"Q\",\"I\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"D\",\"MC\",\"NC\",\"OC\"],E:\"Chrome\",F:{\"0\":1343692800,\"1\":1348531200,\"2\":1352246400,\"3\":1357862400,\"4\":1361404800,\"5\":1364428800,\"6\":1689724800,\"7\":1692057600,\"8\":1694476800,\"9\":1696896000,J:1264377600,NB:1274745600,K:1283385600,E:1287619200,F:1291248000,G:1296777600,A:1299542400,B:1303862400,C:1307404800,L:1312243200,M:1316131200,H:1316131200,N:1319500800,O:1323734400,P:1328659200,OB:1332892800,y:1337040000,z:1340668800,PB:1369094400,QB:1374105600,RB:1376956800,SB:1384214400,TB:1389657600,UB:1392940800,VB:1397001600,WB:1400544000,XB:1405468800,YB:1409011200,ZB:1412640000,aB:1416268800,bB:1421798400,cB:1425513600,dB:1429401600,eB:1432080000,fB:1437523200,gB:1441152000,hB:1444780800,iB:1449014400,jB:1453248000,kB:1456963200,lB:1460592000,mB:1464134400,nB:1469059200,oB:1472601600,pB:1476230400,qB:1480550400,rB:1485302400,sB:1489017600,tB:1492560000,JC:1496707200,uB:1500940800,KC:1504569600,vB:1508198400,wB:1512518400,xB:1516752000,yB:1520294400,zB:1523923200,\"0B\":1527552000,\"1B\":1532390400,\"2B\":1536019200,\"3B\":1539648000,\"4B\":1543968000,\"5B\":1548720000,\"6B\":1552348800,\"7B\":1555977600,\"8B\":1559606400,\"9B\":1564444800,AC:1568073600,BC:1571702400,Q:1575936000,I:1580860800,R:1586304000,S:1589846400,T:1594684800,U:1598313600,V:1601942400,W:1605571200,X:1611014400,Y:1614556800,Z:1618272000,a:1621987200,b:1626739200,c:1630368000,d:1632268800,e:1634601600,f:1637020800,g:1641340800,h:1643673600,i:1646092800,j:1648512000,k:1650931200,l:1653350400,m:1655769600,n:1659398400,o:1661817600,p:1664236800,q:1666656000,r:1669680000,s:1673308800,t:1675728000,u:1678147200,v:1680566400,w:1682985600,x:1685404800,AB:1698710400,BB:1701993600,CB:1705968000,DB:1708387200,EB:1710806400,FB:1713225600,GB:1715644800,HB:1718064000,IB:1721174400,JB:1724112000,KB:1726531200,LB:1728950400,MB:1731369600,D:1736812800,MC:null,NC:null,OC:null}},E:{A:{J:0,NB:0,K:0,E:0,F:0,G:0,A:0,B:0,C:0,L:0.003521,M:0.017605,H:0.003521,pC:0,PC:0,qC:0,rC:0,sC:0,tC:0,QC:0,CC:0.003521,DC:0.007042,uC:0.038731,vC:0.052815,wC:0.014084,RC:0.007042,SC:0.014084,EC:0.021126,xC:0.169008,FC:0.024647,TC:0.028168,UC:0.021126,VC:0.049294,WC:0.017605,XC:0.031689,yC:0.225344,GC:0.014084,YC:0.024647,ZC:0.024647,aC:0.028168,bC:0.066899,cC:0.130277,zC:0.415478,HC:0.080983,dC:1.05278,eC:0.144361,fC:0.003521,gC:0,\"0C\":0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"pC\",\"PC\",\"J\",\"NB\",\"qC\",\"K\",\"rC\",\"E\",\"sC\",\"F\",\"G\",\"tC\",\"A\",\"QC\",\"B\",\"CC\",\"C\",\"DC\",\"L\",\"uC\",\"M\",\"vC\",\"H\",\"wC\",\"RC\",\"SC\",\"EC\",\"xC\",\"FC\",\"TC\",\"UC\",\"VC\",\"WC\",\"XC\",\"yC\",\"GC\",\"YC\",\"ZC\",\"aC\",\"bC\",\"cC\",\"zC\",\"HC\",\"dC\",\"eC\",\"fC\",\"gC\",\"0C\",\"\"],E:\"Safari\",F:{pC:1205798400,PC:1226534400,J:1244419200,NB:1275868800,qC:1311120000,K:1343174400,rC:1382400000,E:1382400000,sC:1410998400,F:1413417600,G:1443657600,tC:1458518400,A:1474329600,QC:1490572800,B:1505779200,CC:1522281600,C:1537142400,DC:1553472000,L:1568851200,uC:1585008000,M:1600214400,vC:1619395200,H:1632096000,wC:1635292800,RC:1639353600,SC:1647216000,EC:1652745600,xC:1658275200,FC:1662940800,TC:1666569600,UC:1670889600,VC:1674432000,WC:1679875200,XC:1684368000,yC:1690156800,GC:1695686400,YC:1698192000,ZC:1702252800,aC:1705881600,bC:1709596800,cC:1715558400,zC:1722211200,HC:1726444800,dC:1730073600,eC:1733875200,fC:1737936000,gC:null,\"0C\":null}},F:{A:{\"0\":0,\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":0,G:0,B:0,C:0,H:0,N:0,O:0,P:0,OB:0,y:0,z:0,PB:0,QB:0,RB:0,SB:0,TB:0,UB:0,VB:0,WB:0,XB:0,YB:0,ZB:0,aB:0,bB:0.003521,cB:0,dB:0,eB:0,fB:0,gB:0,hB:0.014084,iB:0,jB:0,kB:0,lB:0,mB:0,nB:0,oB:0,pB:0,qB:0,rB:0,sB:0,tB:0,uB:0,vB:0,wB:0,xB:0,yB:0,zB:0,\"0B\":0,\"1B\":0,\"2B\":0,\"3B\":0,\"4B\":0,\"5B\":0,\"6B\":0,\"7B\":0,\"8B\":0,\"9B\":0,AC:0,BC:0,Q:0,I:0,R:0,LC:0,S:0,T:0,U:0.007042,V:0.028168,W:0,X:0,Y:0,Z:0,a:0,b:0,c:0,d:0,e:0.031689,f:0,g:0,h:0,i:0,j:0,k:0,l:0.021126,m:0,n:0,o:0,p:0,q:0,r:0,s:0,t:0,u:0,v:0,w:0.003521,x:0.616175,\"1C\":0,\"2C\":0,\"3C\":0,\"4C\":0,CC:0,hC:0,\"5C\":0,DC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"G\",\"1C\",\"2C\",\"3C\",\"4C\",\"B\",\"CC\",\"hC\",\"5C\",\"C\",\"DC\",\"H\",\"N\",\"O\",\"P\",\"OB\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"rB\",\"sB\",\"tB\",\"uB\",\"vB\",\"wB\",\"xB\",\"yB\",\"zB\",\"0B\",\"1B\",\"2B\",\"3B\",\"4B\",\"5B\",\"6B\",\"7B\",\"8B\",\"9B\",\"AC\",\"BC\",\"Q\",\"I\",\"R\",\"LC\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"\",\"\",\"\"],E:\"Opera\",F:{\"0\":1401753600,\"1\":1405987200,\"2\":1409616000,\"3\":1413331200,\"4\":1417132800,\"5\":1422316800,G:1150761600,\"1C\":1223424000,\"2C\":1251763200,\"3C\":1267488000,\"4C\":1277942400,B:1292457600,CC:1302566400,hC:1309219200,\"5C\":1323129600,C:1323129600,DC:1352073600,H:1372723200,N:1377561600,O:1381104000,P:1386288000,OB:1390867200,y:1393891200,z:1399334400,PB:1425945600,QB:1430179200,RB:1433808000,SB:1438646400,TB:1442448000,UB:1445904000,VB:1449100800,WB:1454371200,XB:1457308800,YB:1462320000,ZB:1465344000,aB:1470096000,bB:1474329600,cB:1477267200,dB:1481587200,eB:1486425600,fB:1490054400,gB:1494374400,hB:1498003200,iB:1502236800,jB:1506470400,kB:1510099200,lB:1515024000,mB:1517961600,nB:1521676800,oB:1525910400,pB:1530144000,qB:1534982400,rB:1537833600,sB:1543363200,tB:1548201600,uB:1554768000,vB:1561593600,wB:1566259200,xB:1570406400,yB:1573689600,zB:1578441600,\"0B\":1583971200,\"1B\":1587513600,\"2B\":1592956800,\"3B\":1595894400,\"4B\":1600128000,\"5B\":1603238400,\"6B\":1613520000,\"7B\":1612224000,\"8B\":1616544000,\"9B\":1619568000,AC:1623715200,BC:1627948800,Q:1631577600,I:1633392000,R:1635984000,LC:1638403200,S:1642550400,T:1644969600,U:1647993600,V:1650412800,W:1652745600,X:1654646400,Y:1657152000,Z:1660780800,a:1663113600,b:1668816000,c:1668643200,d:1671062400,e:1675209600,f:1677024000,g:1679529600,h:1681948800,i:1684195200,j:1687219200,k:1690329600,l:1692748800,m:1696204800,n:1699920000,o:1699920000,p:1702944000,q:1707264000,r:1710115200,s:1711497600,t:1716336000,u:1719273600,v:1721088000,w:1724284800,x:1727222400},D:{G:\"o\",B:\"o\",C:\"o\",\"1C\":\"o\",\"2C\":\"o\",\"3C\":\"o\",\"4C\":\"o\",CC:\"o\",hC:\"o\",\"5C\":\"o\",DC:\"o\"}},G:{A:{F:0,PC:0,\"6C\":0,iC:0.00278986,\"7C\":0.00139493,\"8C\":0.00557971,\"9C\":0.00836957,AD:0,BD:0.00557971,CD:0.0223189,DD:0.00278986,ED:0.0320834,FD:0.234348,GD:0.0111594,HD:0.00697464,ID:0.156232,JD:0.00278986,KD:0.0474276,LD:0.00697464,MD:0.0237138,ND:0.10462,OD:0.0655617,PD:0.0362681,RC:0.0348732,SC:0.0418479,EC:0.0474276,QD:0.542627,FC:0.0906704,TC:0.193895,UC:0.0990399,VC:0.171576,WC:0.0348732,XC:0.0711414,RD:0.683515,GC:0.0474276,YC:0.078116,ZC:0.0641667,aC:0.0920653,bC:0.199475,cC:0.485435,SD:1.82178,HC:0.59424,dC:6.92303,eC:0.813243,fC:0.0306884,gC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"PC\",\"6C\",\"iC\",\"7C\",\"8C\",\"9C\",\"F\",\"AD\",\"BD\",\"CD\",\"DD\",\"ED\",\"FD\",\"GD\",\"HD\",\"ID\",\"JD\",\"KD\",\"LD\",\"MD\",\"ND\",\"OD\",\"PD\",\"RC\",\"SC\",\"EC\",\"QD\",\"FC\",\"TC\",\"UC\",\"VC\",\"WC\",\"XC\",\"RD\",\"GC\",\"YC\",\"ZC\",\"aC\",\"bC\",\"cC\",\"SD\",\"HC\",\"dC\",\"eC\",\"fC\",\"gC\",\"\",\"\"],E:\"Safari on iOS\",F:{PC:1270252800,\"6C\":1283904000,iC:1299628800,\"7C\":1331078400,\"8C\":1359331200,\"9C\":1394409600,F:1410912000,AD:1413763200,BD:1442361600,CD:1458518400,DD:1473724800,ED:1490572800,FD:1505779200,GD:1522281600,HD:1537142400,ID:1553472000,JD:1568851200,KD:1572220800,LD:1580169600,MD:1585008000,ND:1600214400,OD:1619395200,PD:1632096000,RC:1639353600,SC:1647216000,EC:1652659200,QD:1658275200,FC:1662940800,TC:1666569600,UC:1670889600,VC:1674432000,WC:1679875200,XC:1684368000,RD:1690156800,GC:1694995200,YC:1698192000,ZC:1702252800,aC:1705881600,bC:1709596800,cC:1715558400,SD:1722211200,HC:1726444800,dC:1730073600,eC:1733875200,fC:1737936000,gC:null}},H:{A:{TD:0.04},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"TD\",\"\",\"\",\"\"],E:\"Opera Mini\",F:{TD:1426464000}},I:{A:{IC:0,J:0,D:0.24566,UD:0,VD:0,WD:0,XD:0.0000246202,iC:0.0000492404,YD:0,ZD:0.000295442},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"UD\",\"VD\",\"WD\",\"IC\",\"J\",\"XD\",\"iC\",\"YD\",\"ZD\",\"D\",\"\",\"\",\"\"],E:\"Android Browser\",F:{UD:1256515200,VD:1274313600,WD:1291593600,IC:1298332800,J:1318896000,XD:1341792000,iC:1374624000,YD:1386547200,ZD:1401667200,D:1737676800}},J:{A:{E:0,A:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"E\",\"A\",\"\",\"\",\"\"],E:\"Blackberry Browser\",F:{E:1325376000,A:1359504000}},K:{A:{A:0,B:0,C:0,I:1.0096,CC:0,hC:0,DC:0},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"CC\",\"hC\",\"C\",\"DC\",\"I\",\"\",\"\",\"\"],E:\"Opera Mobile\",F:{A:1287100800,B:1300752000,CC:1314835200,hC:1318291200,C:1330300800,DC:1349740800,I:1709769600},D:{I:\"webkit\"}},L:{A:{D:47.0453},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"D\",\"\",\"\",\"\"],E:\"Chrome for Android\",F:{D:1737676800}},M:{A:{D:0.32395},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"D\",\"\",\"\",\"\"],E:\"Firefox for Android\",F:{D:1730160000}},N:{A:{A:0,B:0},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE Mobile\",F:{A:1340150400,B:1353456000}},O:{A:{EC:0.855228},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"EC\",\"\",\"\",\"\"],E:\"UC Browser for Android\",F:{EC:1710115200},D:{EC:\"webkit\"}},P:{A:{\"0\":0.0322125,\"1\":0.04295,\"2\":0.0536875,\"3\":0.04295,\"4\":0.1718,\"5\":1.77169,J:0.0859,y:0,z:0.0322125,aD:0.0107375,bD:0,cD:0.021475,dD:0,eD:0,QC:0,fD:0,gD:0,hD:0,iD:0,jD:0,FC:0,GC:0.0107375,HC:0,kD:0.0107375},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"J\",\"aD\",\"bD\",\"cD\",\"dD\",\"eD\",\"QC\",\"fD\",\"gD\",\"hD\",\"iD\",\"jD\",\"FC\",\"GC\",\"HC\",\"kD\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"\",\"\",\"\"],E:\"Samsung Internet\",F:{\"0\":1689292800,\"1\":1697587200,\"2\":1711497600,\"3\":1715126400,\"4\":1717718400,\"5\":1725667200,J:1461024000,aD:1481846400,bD:1509408000,cD:1528329600,dD:1546128000,eD:1554163200,QC:1567900800,fD:1582588800,gD:1593475200,hD:1605657600,iD:1618531200,jD:1629072000,FC:1640736000,GC:1651708800,HC:1659657600,kD:1667260800,y:1677369600,z:1684454400}},Q:{A:{lD:0.239723},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"lD\",\"\",\"\",\"\"],E:\"QQ Browser\",F:{lD:1710288000}},R:{A:{mD:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"mD\",\"\",\"\",\"\"],E:\"Baidu Browser\",F:{mD:1710201600}},S:{A:{nD:0.019437,oD:0},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"nD\",\"oD\",\"\",\"\",\"\"],E:\"KaiOS Browser\",F:{nD:1527811200,oD:1631664000}}};\n","module.exports={\"0\":\"22\",\"1\":\"23\",\"2\":\"24\",\"3\":\"25\",\"4\":\"26\",\"5\":\"27\",\"6\":\"115\",\"7\":\"116\",\"8\":\"117\",\"9\":\"118\",A:\"10\",B:\"11\",C:\"12\",D:\"132\",E:\"7\",F:\"8\",G:\"9\",H:\"15\",I:\"80\",J:\"4\",K:\"6\",L:\"13\",M:\"14\",N:\"16\",O:\"17\",P:\"18\",Q:\"79\",R:\"81\",S:\"83\",T:\"84\",U:\"85\",V:\"86\",W:\"87\",X:\"88\",Y:\"89\",Z:\"90\",a:\"91\",b:\"92\",c:\"93\",d:\"94\",e:\"95\",f:\"96\",g:\"97\",h:\"98\",i:\"99\",j:\"100\",k:\"101\",l:\"102\",m:\"103\",n:\"104\",o:\"105\",p:\"106\",q:\"107\",r:\"108\",s:\"109\",t:\"110\",u:\"111\",v:\"112\",w:\"113\",x:\"114\",y:\"20\",z:\"21\",AB:\"119\",BB:\"120\",CB:\"121\",DB:\"122\",EB:\"123\",FB:\"124\",GB:\"125\",HB:\"126\",IB:\"127\",JB:\"128\",KB:\"129\",LB:\"130\",MB:\"131\",NB:\"5\",OB:\"19\",PB:\"28\",QB:\"29\",RB:\"30\",SB:\"31\",TB:\"32\",UB:\"33\",VB:\"34\",WB:\"35\",XB:\"36\",YB:\"37\",ZB:\"38\",aB:\"39\",bB:\"40\",cB:\"41\",dB:\"42\",eB:\"43\",fB:\"44\",gB:\"45\",hB:\"46\",iB:\"47\",jB:\"48\",kB:\"49\",lB:\"50\",mB:\"51\",nB:\"52\",oB:\"53\",pB:\"54\",qB:\"55\",rB:\"56\",sB:\"57\",tB:\"58\",uB:\"60\",vB:\"62\",wB:\"63\",xB:\"64\",yB:\"65\",zB:\"66\",\"0B\":\"67\",\"1B\":\"68\",\"2B\":\"69\",\"3B\":\"70\",\"4B\":\"71\",\"5B\":\"72\",\"6B\":\"73\",\"7B\":\"74\",\"8B\":\"75\",\"9B\":\"76\",AC:\"77\",BC:\"78\",CC:\"11.1\",DC:\"12.1\",EC:\"15.5\",FC:\"16.0\",GC:\"17.0\",HC:\"18.0\",IC:\"3\",JC:\"59\",KC:\"61\",LC:\"82\",MC:\"133\",NC:\"134\",OC:\"135\",PC:\"3.2\",QC:\"10.1\",RC:\"15.2-15.3\",SC:\"15.4\",TC:\"16.1\",UC:\"16.2\",VC:\"16.3\",WC:\"16.4\",XC:\"16.5\",YC:\"17.1\",ZC:\"17.2\",aC:\"17.3\",bC:\"17.4\",cC:\"17.5\",dC:\"18.1\",eC:\"18.2\",fC:\"18.3\",gC:\"18.4\",hC:\"11.5\",iC:\"4.2-4.3\",jC:\"5.5\",kC:\"2\",lC:\"136\",mC:\"137\",nC:\"3.5\",oC:\"3.6\",pC:\"3.1\",qC:\"5.1\",rC:\"6.1\",sC:\"7.1\",tC:\"9.1\",uC:\"13.1\",vC:\"14.1\",wC:\"15.1\",xC:\"15.6\",yC:\"16.6\",zC:\"17.6\",\"0C\":\"TP\",\"1C\":\"9.5-9.6\",\"2C\":\"10.0-10.1\",\"3C\":\"10.5\",\"4C\":\"10.6\",\"5C\":\"11.6\",\"6C\":\"4.0-4.1\",\"7C\":\"5.0-5.1\",\"8C\":\"6.0-6.1\",\"9C\":\"7.0-7.1\",AD:\"8.1-8.4\",BD:\"9.0-9.2\",CD:\"9.3\",DD:\"10.0-10.2\",ED:\"10.3\",FD:\"11.0-11.2\",GD:\"11.3-11.4\",HD:\"12.0-12.1\",ID:\"12.2-12.5\",JD:\"13.0-13.1\",KD:\"13.2\",LD:\"13.3\",MD:\"13.4-13.7\",ND:\"14.0-14.4\",OD:\"14.5-14.8\",PD:\"15.0-15.1\",QD:\"15.6-15.8\",RD:\"16.6-16.7\",SD:\"17.6-17.7\",TD:\"all\",UD:\"2.1\",VD:\"2.2\",WD:\"2.3\",XD:\"4.1\",YD:\"4.4\",ZD:\"4.4.3-4.4.4\",aD:\"5.0-5.4\",bD:\"6.2-6.4\",cD:\"7.2-7.4\",dD:\"8.2\",eD:\"9.2\",fD:\"11.1-11.2\",gD:\"12.0\",hD:\"13.0\",iD:\"14.0\",jD:\"15.0\",kD:\"19.0\",lD:\"14.9\",mD:\"13.52\",nD:\"2.5\",oD:\"3.0-3.1\"};\n","module.exports={A:\"ie\",B:\"edge\",C:\"firefox\",D:\"chrome\",E:\"safari\",F:\"opera\",G:\"ios_saf\",H:\"op_mini\",I:\"android\",J:\"bb\",K:\"op_mob\",L:\"and_chr\",M:\"and_ff\",N:\"ie_mob\",O:\"and_uc\",P:\"samsung\",Q:\"and_qq\",R:\"baidu\",S:\"kaios\"};\n","'use strict'\n\nconst browsers = require('./browsers').browsers\nconst versions = require('./browserVersions').browserVersions\nconst agentsData = require('../../data/agents')\n\nfunction unpackBrowserVersions(versionsData) {\n return Object.keys(versionsData).reduce((usage, version) => {\n usage[versions[version]] = versionsData[version]\n return usage\n }, {})\n}\n\nmodule.exports.agents = Object.keys(agentsData).reduce((map, key) => {\n let versionsData = agentsData[key]\n map[browsers[key]] = Object.keys(versionsData).reduce((data, entry) => {\n if (entry === 'A') {\n data.usage_global = unpackBrowserVersions(versionsData[entry])\n } else if (entry === 'C') {\n data.versions = versionsData[entry].reduce((list, version) => {\n if (version === '') {\n list.push(null)\n } else {\n list.push(versions[version])\n }\n return list\n }, [])\n } else if (entry === 'D') {\n data.prefix_exceptions = unpackBrowserVersions(versionsData[entry])\n } else if (entry === 'E') {\n data.browser = versionsData[entry]\n } else if (entry === 'F') {\n data.release_date = Object.keys(versionsData[entry]).reduce(\n (map2, key2) => {\n map2[versions[key2]] = versionsData[entry][key2]\n return map2\n },\n {}\n )\n } else {\n // entry is B\n data.prefix = versionsData[entry]\n }\n return data\n }, {})\n return map\n}, {})\n","module.exports.browserVersions = require('../../data/browserVersions')\n","module.exports.browsers = require('../../data/browsers')\n","'use strict';\n\nObject.defineProperty(exports, 'commentRegex', {\n get: function getCommentRegex () {\n // Groups: 1: media type, 2: MIME type, 3: charset, 4: encoding, 5: data.\n return /^\\s*?\\/[\\/\\*][@#]\\s+?sourceMappingURL=data:(((?:application|text)\\/json)(?:;charset=([^;,]+?)?)?)?(?:;(base64))?,(.*?)$/mg;\n }\n});\n\n\nObject.defineProperty(exports, 'mapFileCommentRegex', {\n get: function getMapFileCommentRegex () {\n // Matches sourceMappingURL in either // or /* comment styles.\n return /(?:\\/\\/[@#][ \\t]+?sourceMappingURL=([^\\s'\"`]+?)[ \\t]*?$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^*]+?)[ \\t]*?(?:\\*\\/){1}[ \\t]*?$)/mg;\n }\n});\n\nvar decodeBase64;\nif (typeof Buffer !== 'undefined') {\n if (typeof Buffer.from === 'function') {\n decodeBase64 = decodeBase64WithBufferFrom;\n } else {\n decodeBase64 = decodeBase64WithNewBuffer;\n }\n} else {\n decodeBase64 = decodeBase64WithAtob;\n}\n\nfunction decodeBase64WithBufferFrom(base64) {\n return Buffer.from(base64, 'base64').toString();\n}\n\nfunction decodeBase64WithNewBuffer(base64) {\n if (typeof value === 'number') {\n throw new TypeError('The value to decode must not be of type number.');\n }\n return new Buffer(base64, 'base64').toString();\n}\n\nfunction decodeBase64WithAtob(base64) {\n return decodeURIComponent(escape(atob(base64)));\n}\n\nfunction stripComment(sm) {\n return sm.split(',').pop();\n}\n\nfunction readFromFileMap(sm, read) {\n var r = exports.mapFileCommentRegex.exec(sm);\n // for some odd reason //# .. captures in 1 and /* .. */ in 2\n var filename = r[1] || r[2];\n\n try {\n var sm = read(filename);\n if (sm != null && typeof sm.catch === 'function') {\n return sm.catch(throwError);\n } else {\n return sm;\n }\n } catch (e) {\n throwError(e);\n }\n\n function throwError(e) {\n throw new Error('An error occurred while trying to read the map file at ' + filename + '\\n' + e.stack);\n }\n}\n\nfunction Converter (sm, opts) {\n opts = opts || {};\n\n if (opts.hasComment) {\n sm = stripComment(sm);\n }\n\n if (opts.encoding === 'base64') {\n sm = decodeBase64(sm);\n } else if (opts.encoding === 'uri') {\n sm = decodeURIComponent(sm);\n }\n\n if (opts.isJSON || opts.encoding) {\n sm = JSON.parse(sm);\n }\n\n this.sourcemap = sm;\n}\n\nConverter.prototype.toJSON = function (space) {\n return JSON.stringify(this.sourcemap, null, space);\n};\n\nif (typeof Buffer !== 'undefined') {\n if (typeof Buffer.from === 'function') {\n Converter.prototype.toBase64 = encodeBase64WithBufferFrom;\n } else {\n Converter.prototype.toBase64 = encodeBase64WithNewBuffer;\n }\n} else {\n Converter.prototype.toBase64 = encodeBase64WithBtoa;\n}\n\nfunction encodeBase64WithBufferFrom() {\n var json = this.toJSON();\n return Buffer.from(json, 'utf8').toString('base64');\n}\n\nfunction encodeBase64WithNewBuffer() {\n var json = this.toJSON();\n if (typeof json === 'number') {\n throw new TypeError('The json to encode must not be of type number.');\n }\n return new Buffer(json, 'utf8').toString('base64');\n}\n\nfunction encodeBase64WithBtoa() {\n var json = this.toJSON();\n return btoa(unescape(encodeURIComponent(json)));\n}\n\nConverter.prototype.toURI = function () {\n var json = this.toJSON();\n return encodeURIComponent(json);\n};\n\nConverter.prototype.toComment = function (options) {\n var encoding, content, data;\n if (options != null && options.encoding === 'uri') {\n encoding = '';\n content = this.toURI();\n } else {\n encoding = ';base64';\n content = this.toBase64();\n }\n data = 'sourceMappingURL=data:application/json;charset=utf-8' + encoding + ',' + content;\n return options != null && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n\n// returns copy instead of original\nConverter.prototype.toObject = function () {\n return JSON.parse(this.toJSON());\n};\n\nConverter.prototype.addProperty = function (key, value) {\n if (this.sourcemap.hasOwnProperty(key)) throw new Error('property \"' + key + '\" already exists on the sourcemap, use set property instead');\n return this.setProperty(key, value);\n};\n\nConverter.prototype.setProperty = function (key, value) {\n this.sourcemap[key] = value;\n return this;\n};\n\nConverter.prototype.getProperty = function (key) {\n return this.sourcemap[key];\n};\n\nexports.fromObject = function (obj) {\n return new Converter(obj);\n};\n\nexports.fromJSON = function (json) {\n return new Converter(json, { isJSON: true });\n};\n\nexports.fromURI = function (uri) {\n return new Converter(uri, { encoding: 'uri' });\n};\n\nexports.fromBase64 = function (base64) {\n return new Converter(base64, { encoding: 'base64' });\n};\n\nexports.fromComment = function (comment) {\n var m, encoding;\n comment = comment\n .replace(/^\\/\\*/g, '//')\n .replace(/\\*\\/$/g, '');\n m = exports.commentRegex.exec(comment);\n encoding = m && m[4] || 'uri';\n return new Converter(comment, { encoding: encoding, hasComment: true });\n};\n\nfunction makeConverter(sm) {\n return new Converter(sm, { isJSON: true });\n}\n\nexports.fromMapFileComment = function (comment, read) {\n if (typeof read === 'string') {\n throw new Error(\n 'String directory paths are no longer supported with `fromMapFileComment`\\n' +\n 'Please review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading'\n )\n }\n\n var sm = readFromFileMap(comment, read);\n if (sm != null && typeof sm.then === 'function') {\n return sm.then(makeConverter);\n } else {\n return makeConverter(sm);\n }\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromSource = function (content) {\n var m = content.match(exports.commentRegex);\n return m ? exports.fromComment(m.pop()) : null;\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromMapFileSource = function (content, read) {\n if (typeof read === 'string') {\n throw new Error(\n 'String directory paths are no longer supported with `fromMapFileSource`\\n' +\n 'Please review the Upgrading documentation at https://github.com/thlorenz/convert-source-map#upgrading'\n )\n }\n var m = content.match(exports.mapFileCommentRegex);\n return m ? exports.fromMapFileComment(m.pop(), read) : null;\n};\n\nexports.removeComments = function (src) {\n return src.replace(exports.commentRegex, '');\n};\n\nexports.removeMapFileComments = function (src) {\n return src.replace(exports.mapFileCommentRegex, '');\n};\n\nexports.generateMapFileComment = function (file, options) {\n var data = 'sourceMappingURL=' + file;\n return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n","// Inspriation from node-canvas (https://github.com/LearnBoost/node-canvas/)\n\nvar cache = {};\n\n// regex hoisted from http://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\nvar fontRegex = new RegExp([\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$'\n].join(''), 'i');\n\n\nvar mapping = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family'\n];\n\nvar unitMatch = /([\\.0-9]+)(.*)/;\n\nvar numeric = function(val, parent, dpi) {\n\n var matches = val.match(unitMatch);\n\n if (!matches) {\n return;\n }\n\n val = parseFloat(matches[1]);\n var units = matches[2].toLowerCase().trim();\n\n var v = Math.round(val);\n if (v === val) {\n val = v;\n }\n\n switch (units) {\n case 'em':\n if (parent === null) {\n return;\n }\n\n return val * parent;\n break;\n\n case 'px':\n return val;\n break;\n\n case 'pt':\n return val / (72/dpi);\n break;\n\n case 'pc':\n return val / (6/dpi);\n break;\n\n case 'mm':\n return val * (dpi/25.4)\n break;\n\n case 'cm':\n return val * (dpi/2.54)\n break;\n\n case 'in':\n return val * dpi;\n break;\n\n case '%':\n if (parent === null) {\n return;\n }\n return parent * (val/100);\n break;\n\n }\n};\n\nvar op = {\n size: numeric,\n lineHeight: numeric\n};\n\nvar generics = {\n serif : 1,\n 'sans-serif': 1,\n cursive: 1,\n fantasy: 1,\n monospace: 1\n};\n\nvar parse = module.exports = function(str, existing, dpi) {\n var cacheKey = str + '-' + (existing || 'null') +'@' + dpi;\n\n dpi = dpi || 96.0;\n\n if (typeof cache[cacheKey] !== 'undefined') {\n return cache[cacheKey];\n }\n\n if (existing) {\n existing = parse(existing, null, dpi);\n }\n\n if (str === 'inherit') {\n return existing;\n }\n\n var matches = fontRegex.exec(str);\n\n if (!matches) {\n cache[cacheKey] = null;\n return;\n }\n\n matches.shift();\n\n var collected = {};\n for (var i=0; i -1) {\n return '\"' + a.replace(/[\"']/g, '') + '\"';\n } else {\n return a;\n }\n }).join(', ');\n } else {\n return val;\n }\n }).join(' ');\n }\n });\n\n return collected;\n};\n\nmodule.exports.generics = generics;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar defineDataProperty = require('define-data-property');\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar supportsDescriptors = require('has-property-descriptors')();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (supportsDescriptors) {\n\t\tdefineDataProperty(object, name, value, true);\n\t} else {\n\t\tdefineDataProperty(object, name, value);\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","module.exports = {\n\t\"0.20\": \"39\",\n\t\"0.21\": \"41\",\n\t\"0.22\": \"41\",\n\t\"0.23\": \"41\",\n\t\"0.24\": \"41\",\n\t\"0.25\": \"42\",\n\t\"0.26\": \"42\",\n\t\"0.27\": \"43\",\n\t\"0.28\": \"43\",\n\t\"0.29\": \"43\",\n\t\"0.30\": \"44\",\n\t\"0.31\": \"45\",\n\t\"0.32\": \"45\",\n\t\"0.33\": \"45\",\n\t\"0.34\": \"45\",\n\t\"0.35\": \"45\",\n\t\"0.36\": \"47\",\n\t\"0.37\": \"49\",\n\t\"1.0\": \"49\",\n\t\"1.1\": \"50\",\n\t\"1.2\": \"51\",\n\t\"1.3\": \"52\",\n\t\"1.4\": \"53\",\n\t\"1.5\": \"54\",\n\t\"1.6\": \"56\",\n\t\"1.7\": \"58\",\n\t\"1.8\": \"59\",\n\t\"2.0\": \"61\",\n\t\"2.1\": \"61\",\n\t\"3.0\": \"66\",\n\t\"3.1\": \"66\",\n\t\"4.0\": \"69\",\n\t\"4.1\": \"69\",\n\t\"4.2\": \"69\",\n\t\"5.0\": \"73\",\n\t\"6.0\": \"76\",\n\t\"6.1\": \"76\",\n\t\"7.0\": \"78\",\n\t\"7.1\": \"78\",\n\t\"7.2\": \"78\",\n\t\"7.3\": \"78\",\n\t\"8.0\": \"80\",\n\t\"8.1\": \"80\",\n\t\"8.2\": \"80\",\n\t\"8.3\": \"80\",\n\t\"8.4\": \"80\",\n\t\"8.5\": \"80\",\n\t\"9.0\": \"83\",\n\t\"9.1\": \"83\",\n\t\"9.2\": \"83\",\n\t\"9.3\": \"83\",\n\t\"9.4\": \"83\",\n\t\"10.0\": \"85\",\n\t\"10.1\": \"85\",\n\t\"10.2\": \"85\",\n\t\"10.3\": \"85\",\n\t\"10.4\": \"85\",\n\t\"11.0\": \"87\",\n\t\"11.1\": \"87\",\n\t\"11.2\": \"87\",\n\t\"11.3\": \"87\",\n\t\"11.4\": \"87\",\n\t\"11.5\": \"87\",\n\t\"12.0\": \"89\",\n\t\"12.1\": \"89\",\n\t\"12.2\": \"89\",\n\t\"13.0\": \"91\",\n\t\"13.1\": \"91\",\n\t\"13.2\": \"91\",\n\t\"13.3\": \"91\",\n\t\"13.4\": \"91\",\n\t\"13.5\": \"91\",\n\t\"13.6\": \"91\",\n\t\"14.0\": \"93\",\n\t\"14.1\": \"93\",\n\t\"14.2\": \"93\",\n\t\"15.0\": \"94\",\n\t\"15.1\": \"94\",\n\t\"15.2\": \"94\",\n\t\"15.3\": \"94\",\n\t\"15.4\": \"94\",\n\t\"15.5\": \"94\",\n\t\"16.0\": \"96\",\n\t\"16.1\": \"96\",\n\t\"16.2\": \"96\",\n\t\"17.0\": \"98\",\n\t\"17.1\": \"98\",\n\t\"17.2\": \"98\",\n\t\"17.3\": \"98\",\n\t\"17.4\": \"98\",\n\t\"18.0\": \"100\",\n\t\"18.1\": \"100\",\n\t\"18.2\": \"100\",\n\t\"18.3\": \"100\",\n\t\"19.0\": \"102\",\n\t\"19.1\": \"102\",\n\t\"20.0\": \"104\",\n\t\"20.1\": \"104\",\n\t\"20.2\": \"104\",\n\t\"20.3\": \"104\",\n\t\"21.0\": \"106\",\n\t\"21.1\": \"106\",\n\t\"21.2\": \"106\",\n\t\"21.3\": \"106\",\n\t\"21.4\": \"106\",\n\t\"22.0\": \"108\",\n\t\"22.1\": \"108\",\n\t\"22.2\": \"108\",\n\t\"22.3\": \"108\",\n\t\"23.0\": \"110\",\n\t\"23.1\": \"110\",\n\t\"23.2\": \"110\",\n\t\"23.3\": \"110\",\n\t\"24.0\": \"112\",\n\t\"24.1\": \"112\",\n\t\"24.2\": \"112\",\n\t\"24.3\": \"112\",\n\t\"24.4\": \"112\",\n\t\"24.5\": \"112\",\n\t\"24.6\": \"112\",\n\t\"24.7\": \"112\",\n\t\"24.8\": \"112\",\n\t\"25.0\": \"114\",\n\t\"25.1\": \"114\",\n\t\"25.2\": \"114\",\n\t\"25.3\": \"114\",\n\t\"25.4\": \"114\",\n\t\"25.5\": \"114\",\n\t\"25.6\": \"114\",\n\t\"25.7\": \"114\",\n\t\"25.8\": \"114\",\n\t\"25.9\": \"114\",\n\t\"26.0\": \"116\",\n\t\"26.1\": \"116\",\n\t\"26.2\": \"116\",\n\t\"26.3\": \"116\",\n\t\"26.4\": \"116\",\n\t\"26.5\": \"116\",\n\t\"26.6\": \"116\",\n\t\"27.0\": \"118\",\n\t\"27.1\": \"118\",\n\t\"27.2\": \"118\",\n\t\"27.3\": \"118\",\n\t\"28.0\": \"120\",\n\t\"28.1\": \"120\",\n\t\"28.2\": \"120\",\n\t\"28.3\": \"120\",\n\t\"29.0\": \"122\",\n\t\"29.1\": \"122\",\n\t\"29.2\": \"122\",\n\t\"29.3\": \"122\",\n\t\"29.4\": \"122\",\n\t\"30.0\": \"124\",\n\t\"30.1\": \"124\",\n\t\"30.2\": \"124\",\n\t\"30.3\": \"124\",\n\t\"30.4\": \"124\",\n\t\"30.5\": \"124\",\n\t\"31.0\": \"126\",\n\t\"31.1\": \"126\",\n\t\"31.2\": \"126\",\n\t\"31.3\": \"126\",\n\t\"31.4\": \"126\",\n\t\"31.5\": \"126\",\n\t\"31.6\": \"126\",\n\t\"31.7\": \"126\",\n\t\"32.0\": \"128\",\n\t\"32.1\": \"128\",\n\t\"32.2\": \"128\",\n\t\"32.3\": \"128\",\n\t\"33.0\": \"130\",\n\t\"33.1\": \"130\",\n\t\"33.2\": \"130\",\n\t\"33.3\": \"130\",\n\t\"34.0\": \"132\",\n\t\"35.0\": \"134\"\n};","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\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\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","\"use strict\";\n\n// These use the global symbol registry so that multiple copies of this\n// library can work together in case they are not deduped.\nconst GENSYNC_START = Symbol.for(\"gensync:v1:start\");\nconst GENSYNC_SUSPEND = Symbol.for(\"gensync:v1:suspend\");\n\nconst GENSYNC_EXPECTED_START = \"GENSYNC_EXPECTED_START\";\nconst GENSYNC_EXPECTED_SUSPEND = \"GENSYNC_EXPECTED_SUSPEND\";\nconst GENSYNC_OPTIONS_ERROR = \"GENSYNC_OPTIONS_ERROR\";\nconst GENSYNC_RACE_NONEMPTY = \"GENSYNC_RACE_NONEMPTY\";\nconst GENSYNC_ERRBACK_NO_CALLBACK = \"GENSYNC_ERRBACK_NO_CALLBACK\";\n\nmodule.exports = Object.assign(\n function gensync(optsOrFn) {\n let genFn = optsOrFn;\n if (typeof optsOrFn !== \"function\") {\n genFn = newGenerator(optsOrFn);\n } else {\n genFn = wrapGenerator(optsOrFn);\n }\n\n return Object.assign(genFn, makeFunctionAPI(genFn));\n },\n {\n all: buildOperation({\n name: \"all\",\n arity: 1,\n sync: function(args) {\n const items = Array.from(args[0]);\n return items.map(item => evaluateSync(item));\n },\n async: function(args, resolve, reject) {\n const items = Array.from(args[0]);\n\n if (items.length === 0) {\n Promise.resolve().then(() => resolve([]));\n return;\n }\n\n let count = 0;\n const results = items.map(() => undefined);\n items.forEach((item, i) => {\n evaluateAsync(\n item,\n val => {\n results[i] = val;\n count += 1;\n\n if (count === results.length) resolve(results);\n },\n reject\n );\n });\n },\n }),\n race: buildOperation({\n name: \"race\",\n arity: 1,\n sync: function(args) {\n const items = Array.from(args[0]);\n if (items.length === 0) {\n throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n }\n\n return evaluateSync(items[0]);\n },\n async: function(args, resolve, reject) {\n const items = Array.from(args[0]);\n if (items.length === 0) {\n throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n }\n\n for (const item of items) {\n evaluateAsync(item, resolve, reject);\n }\n },\n }),\n }\n);\n\n/**\n * Given a generator function, return the standard API object that executes\n * the generator and calls the callbacks.\n */\nfunction makeFunctionAPI(genFn) {\n const fns = {\n sync: function(...args) {\n return evaluateSync(genFn.apply(this, args));\n },\n async: function(...args) {\n return new Promise((resolve, reject) => {\n evaluateAsync(genFn.apply(this, args), resolve, reject);\n });\n },\n errback: function(...args) {\n const cb = args.pop();\n if (typeof cb !== \"function\") {\n throw makeError(\n \"Asynchronous function called without callback\",\n GENSYNC_ERRBACK_NO_CALLBACK\n );\n }\n\n let gen;\n try {\n gen = genFn.apply(this, args);\n } catch (err) {\n cb(err);\n return;\n }\n\n evaluateAsync(gen, val => cb(undefined, val), err => cb(err));\n },\n };\n return fns;\n}\n\nfunction assertTypeof(type, name, value, allowUndefined) {\n if (\n typeof value === type ||\n (allowUndefined && typeof value === \"undefined\")\n ) {\n return;\n }\n\n let msg;\n if (allowUndefined) {\n msg = `Expected opts.${name} to be either a ${type}, or undefined.`;\n } else {\n msg = `Expected opts.${name} to be a ${type}.`;\n }\n\n throw makeError(msg, GENSYNC_OPTIONS_ERROR);\n}\nfunction makeError(msg, code) {\n return Object.assign(new Error(msg), { code });\n}\n\n/**\n * Given an options object, return a new generator that dispatches the\n * correct handler based on sync or async execution.\n */\nfunction newGenerator({ name, arity, sync, async, errback }) {\n assertTypeof(\"string\", \"name\", name, true /* allowUndefined */);\n assertTypeof(\"number\", \"arity\", arity, true /* allowUndefined */);\n assertTypeof(\"function\", \"sync\", sync);\n assertTypeof(\"function\", \"async\", async, true /* allowUndefined */);\n assertTypeof(\"function\", \"errback\", errback, true /* allowUndefined */);\n if (async && errback) {\n throw makeError(\n \"Expected one of either opts.async or opts.errback, but got _both_.\",\n GENSYNC_OPTIONS_ERROR\n );\n }\n\n if (typeof name !== \"string\") {\n let fnName;\n if (errback && errback.name && errback.name !== \"errback\") {\n fnName = errback.name;\n }\n if (async && async.name && async.name !== \"async\") {\n fnName = async.name.replace(/Async$/, \"\");\n }\n if (sync && sync.name && sync.name !== \"sync\") {\n fnName = sync.name.replace(/Sync$/, \"\");\n }\n\n if (typeof fnName === \"string\") {\n name = fnName;\n }\n }\n\n if (typeof arity !== \"number\") {\n arity = sync.length;\n }\n\n return buildOperation({\n name,\n arity,\n sync: function(args) {\n return sync.apply(this, args);\n },\n async: function(args, resolve, reject) {\n if (async) {\n async.apply(this, args).then(resolve, reject);\n } else if (errback) {\n errback.call(this, ...args, (err, value) => {\n if (err == null) resolve(value);\n else reject(err);\n });\n } else {\n resolve(sync.apply(this, args));\n }\n },\n });\n}\n\nfunction wrapGenerator(genFn) {\n return setFunctionMetadata(genFn.name, genFn.length, function(...args) {\n return genFn.apply(this, args);\n });\n}\n\nfunction buildOperation({ name, arity, sync, async }) {\n return setFunctionMetadata(name, arity, function*(...args) {\n const resume = yield GENSYNC_START;\n if (!resume) {\n // Break the tail call to avoid a bug in V8 v6.X with --harmony enabled.\n const res = sync.call(this, args);\n return res;\n }\n\n let result;\n try {\n async.call(\n this,\n args,\n value => {\n if (result) return;\n\n result = { value };\n resume();\n },\n err => {\n if (result) return;\n\n result = { err };\n resume();\n }\n );\n } catch (err) {\n result = { err };\n resume();\n }\n\n // Suspend until the callbacks run. Will resume synchronously if the\n // callback was already called.\n yield GENSYNC_SUSPEND;\n\n if (result.hasOwnProperty(\"err\")) {\n throw result.err;\n }\n\n return result.value;\n });\n}\n\nfunction evaluateSync(gen) {\n let value;\n while (!({ value } = gen.next()).done) {\n assertStart(value, gen);\n }\n return value;\n}\n\nfunction evaluateAsync(gen, resolve, reject) {\n (function step() {\n try {\n let value;\n while (!({ value } = gen.next()).done) {\n assertStart(value, gen);\n\n // If this throws, it is considered to have broken the contract\n // established for async handlers. If these handlers are called\n // synchronously, it is also considered bad behavior.\n let sync = true;\n let didSyncResume = false;\n const out = gen.next(() => {\n if (sync) {\n didSyncResume = true;\n } else {\n step();\n }\n });\n sync = false;\n\n assertSuspend(out, gen);\n\n if (!didSyncResume) {\n // Callback wasn't called synchronously, so break out of the loop\n // and let it call 'step' later.\n return;\n }\n }\n\n return resolve(value);\n } catch (err) {\n return reject(err);\n }\n })();\n}\n\nfunction assertStart(value, gen) {\n if (value === GENSYNC_START) return;\n\n throwError(\n gen,\n makeError(\n `Got unexpected yielded value in gensync generator: ${JSON.stringify(\n value\n )}. Did you perhaps mean to use 'yield*' instead of 'yield'?`,\n GENSYNC_EXPECTED_START\n )\n );\n}\nfunction assertSuspend({ value, done }, gen) {\n if (!done && value === GENSYNC_SUSPEND) return;\n\n throwError(\n gen,\n makeError(\n done\n ? \"Unexpected generator completion. If you get this, it is probably a gensync bug.\"\n : `Expected GENSYNC_SUSPEND, got ${JSON.stringify(\n value\n )}. If you get this, it is probably a gensync bug.`,\n GENSYNC_EXPECTED_SUSPEND\n )\n );\n}\n\nfunction throwError(gen, err) {\n // Call `.throw` so that users can step in a debugger to easily see which\n // 'yield' passed an unexpected value. If the `.throw` call didn't throw\n // back to the generator, we explicitly do it to stop the error\n // from being swallowed by user code try/catches.\n if (gen.throw) gen.throw(err);\n throw err;\n}\n\nfunction isIterable(value) {\n return (\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !value[Symbol.iterator]\n );\n}\n\nfunction setFunctionMetadata(name, arity, fn) {\n if (typeof name === \"string\") {\n // This should always work on the supported Node versions, but for the\n // sake of users that are compiling to older versions, we check for\n // configurability so we don't throw.\n const nameDesc = Object.getOwnPropertyDescriptor(fn, \"name\");\n if (!nameDesc || nameDesc.configurable) {\n Object.defineProperty(\n fn,\n \"name\",\n Object.assign(nameDesc || {}, {\n configurable: true,\n value: name,\n })\n );\n }\n }\n\n if (typeof arity === \"number\") {\n const lengthDesc = Object.getOwnPropertyDescriptor(fn, \"length\");\n if (!lengthDesc || lengthDesc.configurable) {\n Object.defineProperty(\n fn,\n \"length\",\n Object.assign(lengthDesc || {}, {\n configurable: true,\n value: arity,\n })\n );\n }\n }\n\n return fn;\n}\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.deinterlace = void 0;\n\n/**\r\n * Deinterlace function from https://github.com/shachaf/jsgif\r\n */\nvar deinterlace = function deinterlace(pixels, width) {\n var newPixels = new Array(pixels.length);\n var rows = pixels.length / width;\n\n var cpRow = function cpRow(toRow, fromRow) {\n var fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width);\n newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels));\n }; // See appendix E.\n\n\n var offsets = [0, 4, 2, 1];\n var steps = [8, 8, 4, 2];\n var fromRow = 0;\n\n for (var pass = 0; pass < 4; pass++) {\n for (var toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) {\n cpRow(toRow, fromRow);\n fromRow++;\n }\n }\n\n return newPixels;\n};\n\nexports.deinterlace = deinterlace;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.decompressFrames = exports.decompressFrame = exports.parseGIF = void 0;\n\nvar _gif = _interopRequireDefault(require(\"js-binary-schema-parser/lib/schemas/gif\"));\n\nvar _jsBinarySchemaParser = require(\"js-binary-schema-parser\");\n\nvar _uint = require(\"js-binary-schema-parser/lib/parsers/uint8\");\n\nvar _deinterlace = require(\"./deinterlace\");\n\nvar _lzw = require(\"./lzw\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar parseGIF = function parseGIF(arrayBuffer) {\n var byteData = new Uint8Array(arrayBuffer);\n return (0, _jsBinarySchemaParser.parse)((0, _uint.buildStream)(byteData), _gif[\"default\"]);\n};\n\nexports.parseGIF = parseGIF;\n\nvar generatePatch = function generatePatch(image) {\n var totalPixels = image.pixels.length;\n var patchData = new Uint8ClampedArray(totalPixels * 4);\n\n for (var i = 0; i < totalPixels; i++) {\n var pos = i * 4;\n var colorIndex = image.pixels[i];\n var color = image.colorTable[colorIndex] || [0, 0, 0];\n patchData[pos] = color[0];\n patchData[pos + 1] = color[1];\n patchData[pos + 2] = color[2];\n patchData[pos + 3] = colorIndex !== image.transparentIndex ? 255 : 0;\n }\n\n return patchData;\n};\n\nvar decompressFrame = function decompressFrame(frame, gct, buildImagePatch) {\n if (!frame.image) {\n console.warn('gif frame does not have associated image.');\n return;\n }\n\n var image = frame.image; // get the number of pixels\n\n var totalPixels = image.descriptor.width * image.descriptor.height; // do lzw decompression\n\n var pixels = (0, _lzw.lzw)(image.data.minCodeSize, image.data.blocks, totalPixels); // deal with interlacing if necessary\n\n if (image.descriptor.lct.interlaced) {\n pixels = (0, _deinterlace.deinterlace)(pixels, image.descriptor.width);\n }\n\n var resultImage = {\n pixels: pixels,\n dims: {\n top: frame.image.descriptor.top,\n left: frame.image.descriptor.left,\n width: frame.image.descriptor.width,\n height: frame.image.descriptor.height\n }\n }; // color table\n\n if (image.descriptor.lct && image.descriptor.lct.exists) {\n resultImage.colorTable = image.lct;\n } else {\n resultImage.colorTable = gct;\n } // add per frame relevant gce information\n\n\n if (frame.gce) {\n resultImage.delay = (frame.gce.delay || 10) * 10; // convert to ms\n\n resultImage.disposalType = frame.gce.extras.disposal; // transparency\n\n if (frame.gce.extras.transparentColorGiven) {\n resultImage.transparentIndex = frame.gce.transparentColorIndex;\n }\n } // create canvas usable imagedata if desired\n\n\n if (buildImagePatch) {\n resultImage.patch = generatePatch(resultImage);\n }\n\n return resultImage;\n};\n\nexports.decompressFrame = decompressFrame;\n\nvar decompressFrames = function decompressFrames(parsedGif, buildImagePatches) {\n return parsedGif.frames.filter(function (f) {\n return f.image;\n }).map(function (f) {\n return decompressFrame(f, parsedGif.gct, buildImagePatches);\n });\n};\n\nexports.decompressFrames = decompressFrames;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.lzw = void 0;\n\n/**\r\n * javascript port of java LZW decompression\r\n * Original java author url: https://gist.github.com/devunwired/4479231\r\n */\nvar lzw = function lzw(minCodeSize, data, pixelCount) {\n var MAX_STACK_SIZE = 4096;\n var nullCode = -1;\n var npix = pixelCount;\n var available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, i, datum, data_size, first, top, bi, pi;\n var dstPixels = new Array(pixelCount);\n var prefix = new Array(MAX_STACK_SIZE);\n var suffix = new Array(MAX_STACK_SIZE);\n var pixelStack = new Array(MAX_STACK_SIZE + 1); // Initialize GIF data stream decoder.\n\n data_size = minCodeSize;\n clear = 1 << data_size;\n end_of_information = clear + 1;\n available = clear + 2;\n old_code = nullCode;\n code_size = data_size + 1;\n code_mask = (1 << code_size) - 1;\n\n for (code = 0; code < clear; code++) {\n prefix[code] = 0;\n suffix[code] = code;\n } // Decode GIF pixel stream.\n\n\n var datum, bits, count, first, top, pi, bi;\n datum = bits = count = first = top = pi = bi = 0;\n\n for (i = 0; i < npix;) {\n if (top === 0) {\n if (bits < code_size) {\n // get the next byte\n datum += data[bi] << bits;\n bits += 8;\n bi++;\n continue;\n } // Get the next code.\n\n\n code = datum & code_mask;\n datum >>= code_size;\n bits -= code_size; // Interpret the code\n\n if (code > available || code == end_of_information) {\n break;\n }\n\n if (code == clear) {\n // Reset decoder.\n code_size = data_size + 1;\n code_mask = (1 << code_size) - 1;\n available = clear + 2;\n old_code = nullCode;\n continue;\n }\n\n if (old_code == nullCode) {\n pixelStack[top++] = suffix[code];\n old_code = code;\n first = code;\n continue;\n }\n\n in_code = code;\n\n if (code == available) {\n pixelStack[top++] = first;\n code = old_code;\n }\n\n while (code > clear) {\n pixelStack[top++] = suffix[code];\n code = prefix[code];\n }\n\n first = suffix[code] & 0xff;\n pixelStack[top++] = first; // add a new string to the table, but only if space is available\n // if not, just continue with current table until a clear code is found\n // (deferred clear code implementation as per GIF spec)\n\n if (available < MAX_STACK_SIZE) {\n prefix[available] = old_code;\n suffix[available] = first;\n available++;\n\n if ((available & code_mask) === 0 && available < MAX_STACK_SIZE) {\n code_size++;\n code_mask += available;\n }\n }\n\n old_code = in_code;\n } // Pop a pixel off the pixel stack.\n\n\n top--;\n dstPixels[pi++] = pixelStack[top];\n i++;\n }\n\n for (i = pi; i < npix; i++) {\n dstPixels[i] = 0; // clear missing pixels\n }\n\n return dstPixels;\n};\n\nexports.lzw = lzw;","'use strict';\nmodule.exports = require('./globals.json');\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bound');\n\nvar $toString = callBound('Object.prototype.toString');\n\n/** @type {import('.')} */\nvar isStandardArguments = function isArguments(value) {\n\tif (\n\t\thasToStringTag\n\t\t&& value\n\t\t&& typeof value === 'object'\n\t\t&& Symbol.toStringTag in value\n\t) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\n/** @type {import('.')} */\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null\n\t\t&& typeof value === 'object'\n\t\t&& 'length' in value\n\t\t&& typeof value.length === 'number'\n\t\t&& value.length >= 0\n\t\t&& $toString(value) !== '[object Array]'\n\t\t&& 'callee' in value\n\t\t&& $toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\n// @ts-expect-error TODO make this not error\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\n/** @type {import('.')} */\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar callBound = require('call-bound');\nvar safeRegexTest = require('safe-regex-test');\nvar isFnRegex = safeRegexTest(/^\\s*(?:function)?\\*/);\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = require('get-proto');\n\nvar toStr = callBound('Object.prototype.toString');\nvar fnToStr = callBound('Function.prototype.toString');\n\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\n/** @type {undefined | false | null | GeneratorFunctionConstructor} */\nvar GeneratorFunction;\n\n/** @type {import('.')} */\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex(fnToStr(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t? /** @type {GeneratorFunctionConstructor} */ (getProto(generatorFunc))\n\t\t\t: false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar callBound = require('call-bound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar gOPD = require('gopd');\n\n/** @type {import('.')} */\nvar fn;\n\nif (hasToStringTag) {\n\t/** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */\n\tvar $exec = callBound('RegExp.prototype.exec');\n\t/** @type {object} */\n\tvar isRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\t/** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */\n\tvar badStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n\n\t/** @type {import('.')} */\n\t// @ts-expect-error TS can't figure out that the $exec call always throws\n\t// eslint-disable-next-line consistent-return\n\tfn = function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {NonNullable} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t$exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier)));\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t};\n} else {\n\t/** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */\n\tvar $toString = callBound('Object.prototype.toString');\n\t/** @const @type {'[object RegExp]'} */\n\tvar regexClass = '[object RegExp]';\n\n\t/** @type {import('.')} */\n\tfn = function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n}\n\nmodule.exports = fn;\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.loop = exports.conditional = exports.parse = void 0;\n\nvar parse = function parse(stream, schema) {\n var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : result;\n\n if (Array.isArray(schema)) {\n schema.forEach(function (partSchema) {\n return parse(stream, partSchema, result, parent);\n });\n } else if (typeof schema === 'function') {\n schema(stream, result, parent, parse);\n } else {\n var key = Object.keys(schema)[0];\n\n if (Array.isArray(schema[key])) {\n parent[key] = {};\n parse(stream, schema[key], result, parent[key]);\n } else {\n parent[key] = schema[key](stream, result, parent, parse);\n }\n }\n\n return result;\n};\n\nexports.parse = parse;\n\nvar conditional = function conditional(schema, conditionFunc) {\n return function (stream, result, parent, parse) {\n if (conditionFunc(stream, result, parent)) {\n parse(stream, schema, result, parent);\n }\n };\n};\n\nexports.conditional = conditional;\n\nvar loop = function loop(schema, continueFunc) {\n return function (stream, result, parent, parse) {\n var arr = [];\n var lastStreamPos = stream.pos;\n\n while (continueFunc(stream, result, parent)) {\n var newParent = {};\n parse(stream, schema, result, newParent); // cases when whole file is parsed but no termination is there and stream position is not getting updated as well\n // it falls into infinite recursion, null check to avoid the same\n\n if (stream.pos === lastStreamPos) {\n break;\n }\n\n lastStreamPos = stream.pos;\n arr.push(newParent);\n }\n\n return arr;\n };\n};\n\nexports.loop = loop;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.readBits = exports.readArray = exports.readUnsigned = exports.readString = exports.peekBytes = exports.readBytes = exports.peekByte = exports.readByte = exports.buildStream = void 0;\n\n// Default stream and parsers for Uint8TypedArray data type\nvar buildStream = function buildStream(uint8Data) {\n return {\n data: uint8Data,\n pos: 0\n };\n};\n\nexports.buildStream = buildStream;\n\nvar readByte = function readByte() {\n return function (stream) {\n return stream.data[stream.pos++];\n };\n};\n\nexports.readByte = readByte;\n\nvar peekByte = function peekByte() {\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return function (stream) {\n return stream.data[stream.pos + offset];\n };\n};\n\nexports.peekByte = peekByte;\n\nvar readBytes = function readBytes(length) {\n return function (stream) {\n return stream.data.subarray(stream.pos, stream.pos += length);\n };\n};\n\nexports.readBytes = readBytes;\n\nvar peekBytes = function peekBytes(length) {\n return function (stream) {\n return stream.data.subarray(stream.pos, stream.pos + length);\n };\n};\n\nexports.peekBytes = peekBytes;\n\nvar readString = function readString(length) {\n return function (stream) {\n return Array.from(readBytes(length)(stream)).map(function (value) {\n return String.fromCharCode(value);\n }).join('');\n };\n};\n\nexports.readString = readString;\n\nvar readUnsigned = function readUnsigned(littleEndian) {\n return function (stream) {\n var bytes = readBytes(2)(stream);\n return littleEndian ? (bytes[1] << 8) + bytes[0] : (bytes[0] << 8) + bytes[1];\n };\n};\n\nexports.readUnsigned = readUnsigned;\n\nvar readArray = function readArray(byteSize, totalOrFunc) {\n return function (stream, result, parent) {\n var total = typeof totalOrFunc === 'function' ? totalOrFunc(stream, result, parent) : totalOrFunc;\n var parser = readBytes(byteSize);\n var arr = new Array(total);\n\n for (var i = 0; i < total; i++) {\n arr[i] = parser(stream);\n }\n\n return arr;\n };\n};\n\nexports.readArray = readArray;\n\nvar subBitsTotal = function subBitsTotal(bits, startIndex, length) {\n var result = 0;\n\n for (var i = 0; i < length; i++) {\n result += bits[startIndex + i] && Math.pow(2, length - i - 1);\n }\n\n return result;\n};\n\nvar readBits = function readBits(schema) {\n return function (stream) {\n var _byte = readByte()(stream); // convert the byte to bit array\n\n\n var bits = new Array(8);\n\n for (var i = 0; i < 8; i++) {\n bits[7 - i] = !!(_byte & 1 << i);\n } // convert the bit array to values based on the schema\n\n\n return Object.keys(schema).reduce(function (res, key) {\n var def = schema[key];\n\n if (def.length) {\n res[key] = subBitsTotal(bits, def.index, def.length);\n } else {\n res[key] = bits[def.index];\n }\n\n return res;\n }, {});\n };\n};\n\nexports.readBits = readBits;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _ = require(\"../\");\n\nvar _uint = require(\"../parsers/uint8\");\n\n// a set of 0x00 terminated subblocks\nvar subBlocksSchema = {\n blocks: function blocks(stream) {\n var terminator = 0x00;\n var chunks = [];\n var streamSize = stream.data.length;\n var total = 0;\n\n for (var size = (0, _uint.readByte)()(stream); size !== terminator; size = (0, _uint.readByte)()(stream)) {\n // size becomes undefined for some case when file is corrupted and terminator is not proper \n // null check to avoid recursion\n if (!size) break; // catch corrupted files with no terminator\n\n if (stream.pos + size >= streamSize) {\n var availableSize = streamSize - stream.pos;\n chunks.push((0, _uint.readBytes)(availableSize)(stream));\n total += availableSize;\n break;\n }\n\n chunks.push((0, _uint.readBytes)(size)(stream));\n total += size;\n }\n\n var result = new Uint8Array(total);\n var offset = 0;\n\n for (var i = 0; i < chunks.length; i++) {\n result.set(chunks[i], offset);\n offset += chunks[i].length;\n }\n\n return result;\n }\n}; // global control extension\n\nvar gceSchema = (0, _.conditional)({\n gce: [{\n codes: (0, _uint.readBytes)(2)\n }, {\n byteSize: (0, _uint.readByte)()\n }, {\n extras: (0, _uint.readBits)({\n future: {\n index: 0,\n length: 3\n },\n disposal: {\n index: 3,\n length: 3\n },\n userInput: {\n index: 6\n },\n transparentColorGiven: {\n index: 7\n }\n })\n }, {\n delay: (0, _uint.readUnsigned)(true)\n }, {\n transparentColorIndex: (0, _uint.readByte)()\n }, {\n terminator: (0, _uint.readByte)()\n }]\n}, function (stream) {\n var codes = (0, _uint.peekBytes)(2)(stream);\n return codes[0] === 0x21 && codes[1] === 0xf9;\n}); // image pipeline block\n\nvar imageSchema = (0, _.conditional)({\n image: [{\n code: (0, _uint.readByte)()\n }, {\n descriptor: [{\n left: (0, _uint.readUnsigned)(true)\n }, {\n top: (0, _uint.readUnsigned)(true)\n }, {\n width: (0, _uint.readUnsigned)(true)\n }, {\n height: (0, _uint.readUnsigned)(true)\n }, {\n lct: (0, _uint.readBits)({\n exists: {\n index: 0\n },\n interlaced: {\n index: 1\n },\n sort: {\n index: 2\n },\n future: {\n index: 3,\n length: 2\n },\n size: {\n index: 5,\n length: 3\n }\n })\n }]\n }, (0, _.conditional)({\n lct: (0, _uint.readArray)(3, function (stream, result, parent) {\n return Math.pow(2, parent.descriptor.lct.size + 1);\n })\n }, function (stream, result, parent) {\n return parent.descriptor.lct.exists;\n }), {\n data: [{\n minCodeSize: (0, _uint.readByte)()\n }, subBlocksSchema]\n }]\n}, function (stream) {\n return (0, _uint.peekByte)()(stream) === 0x2c;\n}); // plain text block\n\nvar textSchema = (0, _.conditional)({\n text: [{\n codes: (0, _uint.readBytes)(2)\n }, {\n blockSize: (0, _uint.readByte)()\n }, {\n preData: function preData(stream, result, parent) {\n return (0, _uint.readBytes)(parent.text.blockSize)(stream);\n }\n }, subBlocksSchema]\n}, function (stream) {\n var codes = (0, _uint.peekBytes)(2)(stream);\n return codes[0] === 0x21 && codes[1] === 0x01;\n}); // application block\n\nvar applicationSchema = (0, _.conditional)({\n application: [{\n codes: (0, _uint.readBytes)(2)\n }, {\n blockSize: (0, _uint.readByte)()\n }, {\n id: function id(stream, result, parent) {\n return (0, _uint.readString)(parent.blockSize)(stream);\n }\n }, subBlocksSchema]\n}, function (stream) {\n var codes = (0, _uint.peekBytes)(2)(stream);\n return codes[0] === 0x21 && codes[1] === 0xff;\n}); // comment block\n\nvar commentSchema = (0, _.conditional)({\n comment: [{\n codes: (0, _uint.readBytes)(2)\n }, subBlocksSchema]\n}, function (stream) {\n var codes = (0, _uint.peekBytes)(2)(stream);\n return codes[0] === 0x21 && codes[1] === 0xfe;\n});\nvar schema = [{\n header: [{\n signature: (0, _uint.readString)(3)\n }, {\n version: (0, _uint.readString)(3)\n }]\n}, {\n lsd: [{\n width: (0, _uint.readUnsigned)(true)\n }, {\n height: (0, _uint.readUnsigned)(true)\n }, {\n gct: (0, _uint.readBits)({\n exists: {\n index: 0\n },\n resolution: {\n index: 1,\n length: 3\n },\n sort: {\n index: 4\n },\n size: {\n index: 5,\n length: 3\n }\n })\n }, {\n backgroundColorIndex: (0, _uint.readByte)()\n }, {\n pixelAspectRatio: (0, _uint.readByte)()\n }]\n}, (0, _.conditional)({\n gct: (0, _uint.readArray)(3, function (stream, result) {\n return Math.pow(2, result.lsd.gct.size + 1);\n })\n}, function (stream, result) {\n return result.lsd.gct.exists;\n}), // content frames\n{\n frames: (0, _.loop)([gceSchema, applicationSchema, commentSchema, imageSchema, textSchema], function (stream) {\n var nextCode = (0, _uint.peekByte)()(stream); // rather than check for a terminator, we should check for the existence\n // of an ext or image block to avoid infinite loops\n //var terminator = 0x3B;\n //return nextCode !== terminator;\n\n return nextCode === 0x21 || nextCode === 0x2c;\n })\n}];\nvar _default = schema;\nexports[\"default\"] = _default;","// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell\n// License: MIT. (See LICENSE.)\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n})\n\n// This regex comes from regex.coffee, and is inserted here by generate-index.js\n// (run `npm run build`).\nexports.default = /((['\"])(?:(?!\\2|\\\\).|\\\\(?:\\r\\n|[\\s\\S]))*(\\2)?|`(?:[^`\\\\$]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{[^}]*\\}?)*\\}?)*(`)?)|(\\/\\/.*)|(\\/\\*(?:[^*]|\\*(?!\\/))*(\\*\\/)?)|(\\/(?!\\*)(?:\\[(?:(?![\\]\\\\]).|\\\\.)*\\]|(?![\\/\\]\\\\]).|\\\\.)+\\/(?:(?!\\s*(?:\\b|[\\u0080-\\uFFFF$\\\\'\"~({]|[+\\-!](?!=)|\\.?\\d))|[gmiyus]{1,6}\\b(?![\\u0080-\\uFFFF$\\\\]|\\s*(?:[+\\-*%&|^<>!=?({]|\\/(?![\\/*])))))|(0[xX][\\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?)|((?!\\d)(?:(?!\\s)[$\\w\\u0080-\\uFFFF]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]+\\})+)|(--|\\+\\+|&&|\\|\\||=>|\\.{3}|(?:[+\\-\\/%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\\](){}])|(\\s+)|(^$|[\\s\\S])/g\n\nexports.matchToToken = function(match) {\n var token = {type: \"invalid\", value: match[0], closed: undefined}\n if (match[ 1]) token.type = \"string\" , token.closed = !!(match[3] || match[4])\n else if (match[ 5]) token.type = \"comment\"\n else if (match[ 6]) token.type = \"comment\", token.closed = !!match[7]\n else if (match[ 8]) token.type = \"regex\"\n else if (match[ 9]) token.type = \"number\"\n else if (match[10]) token.type = \"name\"\n else if (match[11]) token.type = \"punctuator\"\n else if (match[12]) token.type = \"whitespace\"\n return token\n}\n","'use strict';\n\nconst object = {};\nconst hasOwnProperty = object.hasOwnProperty;\nconst forOwn = (object, callback) => {\n\tfor (const key in object) {\n\t\tif (hasOwnProperty.call(object, key)) {\n\t\t\tcallback(key, object[key]);\n\t\t}\n\t}\n};\n\nconst extend = (destination, source) => {\n\tif (!source) {\n\t\treturn destination;\n\t}\n\tforOwn(source, (key, value) => {\n\t\tdestination[key] = value;\n\t});\n\treturn destination;\n};\n\nconst forEach = (array, callback) => {\n\tconst length = array.length;\n\tlet index = -1;\n\twhile (++index < length) {\n\t\tcallback(array[index]);\n\t}\n};\n\nconst fourHexEscape = (hex) => {\n\treturn '\\\\u' + ('0000' + hex).slice(-4);\n}\n\nconst hexadecimal = (code, lowercase) => {\n\tlet hexadecimal = code.toString(16);\n\tif (lowercase) return hexadecimal;\n\treturn hexadecimal.toUpperCase();\n};\n\nconst toString = object.toString;\nconst isArray = Array.isArray;\nconst isBuffer = (value) => {\n\treturn typeof Buffer === 'function' && Buffer.isBuffer(value);\n};\nconst isObject = (value) => {\n\t// This is a very simple check, but it’s good enough for what we need.\n\treturn toString.call(value) == '[object Object]';\n};\nconst isString = (value) => {\n\treturn typeof value == 'string' ||\n\t\ttoString.call(value) == '[object String]';\n};\nconst isNumber = (value) => {\n\treturn typeof value == 'number' ||\n\t\ttoString.call(value) == '[object Number]';\n};\nconst isBigInt = (value) => {\n return typeof value == 'bigint';\n};\nconst isFunction = (value) => {\n\treturn typeof value == 'function';\n};\nconst isMap = (value) => {\n\treturn toString.call(value) == '[object Map]';\n};\nconst isSet = (value) => {\n\treturn toString.call(value) == '[object Set]';\n};\n\n/*--------------------------------------------------------------------------*/\n\n// https://mathiasbynens.be/notes/javascript-escapes#single\nconst singleEscapes = {\n\t'\\\\': '\\\\\\\\',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t'\n\t// `\\v` is omitted intentionally, because in IE < 9, '\\v' == 'v'.\n\t// '\\v': '\\\\x0B'\n};\nconst regexSingleEscape = /[\\\\\\b\\f\\n\\r\\t]/;\n\nconst regexDigit = /[0-9]/;\nconst regexWhitespace = /[\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nconst escapeEverythingRegex = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])|([\\uD800-\\uDFFF])|(['\"`])|[^]/g;\nconst escapeNonAsciiRegex = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])|([\\uD800-\\uDFFF])|(['\"`])|[^ !#-&\\(-\\[\\]-_a-~]/g;\n\nconst jsesc = (argument, options) => {\n\tconst increaseIndentation = () => {\n\t\toldIndent = indent;\n\t\t++options.indentLevel;\n\t\tindent = options.indent.repeat(options.indentLevel)\n\t};\n\t// Handle options\n\tconst defaults = {\n\t\t'escapeEverything': false,\n\t\t'minimal': false,\n\t\t'isScriptContext': false,\n\t\t'quotes': 'single',\n\t\t'wrap': false,\n\t\t'es6': false,\n\t\t'json': false,\n\t\t'compact': true,\n\t\t'lowercaseHex': false,\n\t\t'numbers': 'decimal',\n\t\t'indent': '\\t',\n\t\t'indentLevel': 0,\n\t\t'__inline1__': false,\n\t\t'__inline2__': false\n\t};\n\tconst json = options && options.json;\n\tif (json) {\n\t\tdefaults.quotes = 'double';\n\t\tdefaults.wrap = true;\n\t}\n\toptions = extend(defaults, options);\n\tif (\n\t\toptions.quotes != 'single' &&\n\t\toptions.quotes != 'double' &&\n\t\toptions.quotes != 'backtick'\n\t) {\n\t\toptions.quotes = 'single';\n\t}\n\tconst quote = options.quotes == 'double' ?\n\t\t'\"' :\n\t\t(options.quotes == 'backtick' ?\n\t\t\t'`' :\n\t\t\t'\\''\n\t\t);\n\tconst compact = options.compact;\n\tconst lowercaseHex = options.lowercaseHex;\n\tlet indent = options.indent.repeat(options.indentLevel);\n\tlet oldIndent = '';\n\tconst inline1 = options.__inline1__;\n\tconst inline2 = options.__inline2__;\n\tconst newLine = compact ? '' : '\\n';\n\tlet result;\n\tlet isEmpty = true;\n\tconst useBinNumbers = options.numbers == 'binary';\n\tconst useOctNumbers = options.numbers == 'octal';\n\tconst useDecNumbers = options.numbers == 'decimal';\n\tconst useHexNumbers = options.numbers == 'hexadecimal';\n\n\tif (json && argument && isFunction(argument.toJSON)) {\n\t\targument = argument.toJSON();\n\t}\n\n\tif (!isString(argument)) {\n\t\tif (isMap(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Map()';\n\t\t\t}\n\t\t\tif (!compact) {\n\t\t\t\toptions.__inline1__ = true;\n\t\t\t\toptions.__inline2__ = false;\n\t\t\t}\n\t\t\treturn 'new Map(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isSet(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Set()';\n\t\t\t}\n\t\t\treturn 'new Set(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isBuffer(argument)) {\n\t\t\tif (argument.length == 0) {\n\t\t\t\treturn 'Buffer.from([])';\n\t\t\t}\n\t\t\treturn 'Buffer.from(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isArray(argument)) {\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tif (inline1) {\n\t\t\t\toptions.__inline1__ = false;\n\t\t\t\toptions.__inline2__ = true;\n\t\t\t}\n\t\t\tif (!inline2) {\n\t\t\t\tincreaseIndentation();\n\t\t\t}\n\t\t\tforEach(argument, (value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tif (inline2) {\n\t\t\t\t\toptions.__inline2__ = false;\n\t\t\t\t}\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact || inline2 ? '' : indent) +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '[]';\n\t\t\t}\n\t\t\tif (inline2) {\n\t\t\t\treturn '[' + result.join(', ') + ']';\n\t\t\t}\n\t\t\treturn '[' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + ']';\n\t\t} else if (isNumber(argument) || isBigInt(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// Some number values (e.g. `Infinity`) cannot be represented in JSON.\n\t\t\t\t// `BigInt` values less than `-Number.MAX_VALUE` or greater than\n // `Number.MAX_VALUE` cannot be represented in JSON so they will become\n // `-Infinity` or `Infinity`, respectively, and then become `null` when\n // stringified.\n\t\t\t\treturn JSON.stringify(Number(argument));\n\t\t\t}\n\n let result;\n\t\t\tif (useDecNumbers) {\n\t\t\t\tresult = String(argument);\n\t\t\t} else if (useHexNumbers) {\n\t\t\t\tlet hexadecimal = argument.toString(16);\n\t\t\t\tif (!lowercaseHex) {\n\t\t\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t\t\t}\n\t\t\t\tresult = '0x' + hexadecimal;\n\t\t\t} else if (useBinNumbers) {\n\t\t\t\tresult = '0b' + argument.toString(2);\n\t\t\t} else if (useOctNumbers) {\n\t\t\t\tresult = '0o' + argument.toString(8);\n\t\t\t}\n\n if (isBigInt(argument)) {\n return result + 'n';\n }\n return result;\n\t\t} else if (isBigInt(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// `BigInt` values less than `-Number.MAX_VALUE` or greater than\n // `Number.MAX_VALUE` will become `-Infinity` or `Infinity`,\n // respectively, and cannot be represented in JSON.\n\t\t\t\treturn JSON.stringify(Number(argument));\n\t\t\t}\n return argument + 'n';\n } else if (!isObject(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// For some values (e.g. `undefined`, `function` objects),\n\t\t\t\t// `JSON.stringify(value)` returns `undefined` (which isn’t valid\n\t\t\t\t// JSON) instead of `'null'`.\n\t\t\t\treturn JSON.stringify(argument) || 'null';\n\t\t\t}\n\t\t\treturn String(argument);\n\t\t} else { // it’s an object\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tincreaseIndentation();\n\t\t\tforOwn(argument, (key, value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact ? '' : indent) +\n\t\t\t\t\tjsesc(key, options) + ':' +\n\t\t\t\t\t(compact ? '' : ' ') +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '{}';\n\t\t\t}\n\t\t\treturn '{' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + '}';\n\t\t}\n\t}\n\n\tconst regex = options.escapeEverything ? escapeEverythingRegex : escapeNonAsciiRegex;\n\tresult = argument.replace(regex, (char, pair, lone, quoteChar, index, string) => {\n\t\tif (pair) {\n\t\t\tif (options.minimal) return pair;\n\t\t\tconst first = pair.charCodeAt(0);\n\t\t\tconst second = pair.charCodeAt(1);\n\t\t\tif (options.es6) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tconst codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t\t\t\tconst hex = hexadecimal(codePoint, lowercaseHex);\n\t\t\t\treturn '\\\\u{' + hex + '}';\n\t\t\t}\n\t\t\treturn fourHexEscape(hexadecimal(first, lowercaseHex)) + fourHexEscape(hexadecimal(second, lowercaseHex));\n\t\t}\n\n\t\tif (lone) {\n\t\t\treturn fourHexEscape(hexadecimal(lone.charCodeAt(0), lowercaseHex));\n\t\t}\n\n\t\tif (\n\t\t\tchar == '\\0' &&\n\t\t\t!json &&\n\t\t\t!regexDigit.test(string.charAt(index + 1))\n\t\t) {\n\t\t\treturn '\\\\0';\n\t\t}\n\n\t\tif (quoteChar) {\n\t\t\tif (quoteChar == quote || options.escapeEverything) {\n\t\t\t\treturn '\\\\' + quoteChar;\n\t\t\t}\n\t\t\treturn quoteChar;\n\t\t}\n\n\t\tif (regexSingleEscape.test(char)) {\n\t\t\t// no need for a `hasOwnProperty` check here\n\t\t\treturn singleEscapes[char];\n\t\t}\n\n\t\tif (options.minimal && !regexWhitespace.test(char)) {\n\t\t\treturn char;\n\t\t}\n\n\t\tconst hex = hexadecimal(char.charCodeAt(0), lowercaseHex);\n\t\tif (json || hex.length > 2) {\n\t\t\treturn fourHexEscape(hex);\n\t\t}\n\n\t\treturn '\\\\x' + ('00' + hex).slice(-2);\n\t});\n\n\tif (quote == '`') {\n\t\tresult = result.replace(/\\$\\{/g, '\\\\${');\n\t}\n\tif (options.isScriptContext) {\n\t\t// https://mathiasbynens.be/notes/etago\n\t\tresult = result\n\t\t\t.replace(/<\\/(script|style)/gi, '<\\\\/$1')\n\t\t\t.replace(/ * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? safeRe[t.TILDELOOSE] : safeRe[t.TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? safeRe[t.CARETLOOSE] : safeRe[t.CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? safeRe[t.XRANGELOOSE] : safeRe[t.XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p + pr\n } else if (xm) {\n ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0' + pr +\n ' <' + M + '.' + (+m + 1) + '.0' + pr\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(safeRe[t.STAR], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version, options) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n var match = null\n if (!options.rtl) {\n match = version.match(safeRe[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n var next\n while ((next = safeRe[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n safeRe[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(match[2] +\n '.' + (match[3] || '0') +\n '.' + (match[4] || '0'), options)\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","var simplify = require('simplify-geometry')\n\nmodule.exports = function (geojson, tolerance, dontClone) {\n if (!dontClone) geojson = JSON.parse(JSON.stringify(geojson)) // clone obj\n if (geojson.features) return simplifyFeatureCollection(geojson, tolerance)\n else if (geojson.type && geojson.type === 'Feature') return simplifyFeature(geojson, tolerance)\n else return new Error('FeatureCollection or individual Feature required')\n}\n\nmodule.exports.simplify = function (coordinates, tolerance) {\n return simplify(coordinates, tolerance)\n}\n\n// modifies in-place\nfunction simplifyFeature (feat, tolerance) {\n var geom = feat.geometry\n var type = geom.type\n if (type === 'LineString') {\n geom.coordinates = module.exports.simplify(geom.coordinates, tolerance)\n } else if (type === 'Polygon' || type === 'MultiLineString') {\n for (var j = 0; j < geom.coordinates.length; j++) {\n geom.coordinates[j] = module.exports.simplify(geom.coordinates[j], tolerance)\n }\n } else if (type === 'MultiPolygon') {\n for (var k = 0; k < geom.coordinates.length; k++) {\n for (var l = 0; l < geom.coordinates[k].length; l++) {\n geom.coordinates[k][l] = module.exports.simplify(geom.coordinates[k][l], tolerance)\n }\n }\n }\n return feat\n}\n\n// modifies in-place\nfunction simplifyFeatureCollection (fc, tolerance) {\n // process all LineString features, skip non LineStrings\n for (var i = 0; i < fc.features.length; i++) {\n fc.features[i] = simplifyFeature(fc.features[i], tolerance)\n }\n return fc\n}\n","var Line = require('./line');\n\nvar simplifyGeometry = function(points, tolerance){\n\n var dmax = 0;\n var index = 0;\n\n for (var i = 1; i <= points.length - 2; i++){\n var d = new Line(points[0], points[points.length - 1]).perpendicularDistance(points[i]);\n if (d > dmax){\n index = i;\n dmax = d;\n }\n }\n\n if (dmax > tolerance){\n var results_one = simplifyGeometry(points.slice(0, index), tolerance);\n var results_two = simplifyGeometry(points.slice(index, points.length), tolerance);\n\n var results = results_one.concat(results_two);\n\n }\n\n else if (points.length > 1) {\n\n results = [points[0], points[points.length - 1]];\n\n }\n\n else {\n\n results = [points[0]];\n\n }\n\n return results;\n\n\n}\n\nmodule.exports = simplifyGeometry;\n","var Line = function(p1, p2){\n\n this.p1 = p1;\n this.p2 = p2;\n\n};\n\nLine.prototype.rise = function() {\n\n return this.p2[1] - this.p1[1];\n\n};\n\nLine.prototype.run = function() {\n\n return this.p2[0] - this.p1[0];\n\n};\n\nLine.prototype.slope = function(){\n\n return this.rise() / this.run();\n\n};\n\nLine.prototype.yIntercept = function(){\n\n return this.p1[1] - (this.p1[0] * this.slope(this.p1, this.p2));\n\n};\n\nLine.prototype.isVertical = function() {\n\n return !isFinite(this.slope());\n\n};\n\nLine.prototype.isHorizontal = function() {\n\n return this.p1[1] == this.p2[1];\n\n};\n\nLine.prototype._perpendicularDistanceHorizontal = function(point){\n\n return Math.abs(this.p1[1] - point[1]);\n\n};\n\nLine.prototype._perpendicularDistanceVertical = function(point){\n\n return Math.abs(this.p1[0] - point[0]);\n\n};\n\nLine.prototype._perpendicularDistanceHasSlope = function(point){\n var slope = this.slope();\n var y_intercept = this.yIntercept();\n\n return Math.abs((slope * point[0]) - point[1] + y_intercept) / Math.sqrt((Math.pow(slope, 2)) + 1);\n\n};\n\nLine.prototype.perpendicularDistance = function(point){\n if (this.isVertical()) {\n\n return this._perpendicularDistanceVertical(point);\n\n }\n\n else if (this.isHorizontal()){\n\n return this._perpendicularDistanceHorizontal(point);\n\n }\n\n else {\n\n return this._perpendicularDistanceHasSlope(point);\n\n }\n\n};\n\nmodule.exports = Line;\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\n\n/** @type {(O: object) => string} */\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\n/** @type {(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */\n/** @type {{ [k in `\\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 2; i < arguments.length; i++) {\n walker = insert(this, walker, arguments[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","","","","","","","","","","","","","","","","exports.getModuleName = () => require(\"@babel/helper-module-transforms\").getModuleName;\n0 && 0;\n\n//# sourceMappingURL=babel-7-helpers.cjs.map\n","import type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport { getDefs, type InternalTokenType } from \"./defs.ts\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) === \" defs[type as InternalTokenType](str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n","import picocolors, { createColors } from \"picocolors\";\nimport type { Colors, Formatter } from \"picocolors/types\";\n\nexport function isColorSupported() {\n return (\n // See https://github.com/alexeyraspopov/picocolors/issues/62\n typeof process === \"object\" &&\n (process.env.FORCE_COLOR === \"0\" || process.env.FORCE_COLOR === \"false\")\n ? false\n : picocolors.isColorSupported\n );\n}\n\nexport type InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype UITokens = \"gutter\" | \"marker\" | \"message\";\n\nexport type Defs = {\n [_ in InternalTokenType | UITokens | \"reset\"]: Formatter;\n};\n\nconst compose: (f: (gv: U) => V, g: (v: T) => U) => (v: T) => V =\n (f, g) => v =>\n f(g(v));\n\n/**\n * Styles for token types.\n */\nfunction buildDefs(colors: Colors): Defs {\n return {\n keyword: colors.cyan,\n capitalized: colors.yellow,\n jsxIdentifier: colors.yellow,\n punctuator: colors.yellow,\n number: colors.magenta,\n string: colors.green,\n regex: colors.magenta,\n comment: colors.gray,\n invalid: compose(compose(colors.white, colors.bgRed), colors.bold),\n\n gutter: colors.gray,\n marker: compose(colors.red, colors.bold),\n message: compose(colors.red, colors.bold),\n\n reset: colors.reset,\n };\n}\n\nconst defsOn = buildDefs(createColors(true));\nconst defsOff = buildDefs(createColors(false));\n\nexport function getDefs(enabled: boolean): Defs {\n return enabled ? defsOn : defsOff;\n}\n","module.exports = require(\"./data/native-modules.json\");\n","module.exports = require(\"./data/plugins.json\");\n","import gensync from \"gensync\";\nimport type { Handler } from \"gensync\";\nimport {\n maybeAsync,\n isAsync,\n onFirstPause,\n waitFor,\n isThenable,\n} from \"../gensync-utils/async.ts\";\nimport { isIterableIterator } from \"./util.ts\";\n\nexport type { CacheConfigurator };\n\nexport type SimpleCacheConfigurator = {\n (forever: boolean): void;\n (handler: () => T): T;\n\n forever: () => void;\n never: () => void;\n using: (handler: () => T) => T;\n invalidate: (handler: () => T) => T;\n};\n\nexport type CacheEntry = Array<{\n value: ResultT;\n valid: (channel: SideChannel) => Handler;\n}>;\n\nconst synchronize = (\n gen: (...args: ArgsT) => Handler,\n): ((...args: ArgsT) => ResultT) => {\n return gensync(gen).sync;\n};\n\n// eslint-disable-next-line require-yield\nfunction* genTrue() {\n return true;\n}\n\nexport function makeWeakCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(WeakMap, handler);\n}\n\nexport function makeWeakCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeWeakCache(handler),\n );\n}\n\nexport function makeStrongCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(Map, handler);\n}\n\nexport function makeStrongCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeStrongCache(handler),\n );\n}\n\n/* NOTE: Part of the logic explained in this comment is explained in the\n * getCachedValueOrWait and setupAsyncLocks functions.\n *\n * > There are only two hard things in Computer Science: cache invalidation and naming things.\n * > -- Phil Karlton\n *\n * I don't know if Phil was also thinking about handling a cache whose invalidation function is\n * defined asynchronously is considered, but it is REALLY hard to do correctly.\n *\n * The implemented logic (only when gensync is run asynchronously) is the following:\n * 1. If there is a valid cache associated to the current \"arg\" parameter,\n * a. RETURN the cached value\n * 3. If there is a FinishLock associated to the current \"arg\" parameter representing a valid cache,\n * a. Wait for that lock to be released\n * b. RETURN the value associated with that lock\n * 5. Start executing the function to be cached\n * a. If it pauses on a promise, then\n * i. Let FinishLock be a new lock\n * ii. Store FinishLock as associated to the current \"arg\" parameter\n * iii. Wait for the function to finish executing\n * iv. Release FinishLock\n * v. Send the function result to anyone waiting on FinishLock\n * 6. Store the result in the cache\n * 7. RETURN the result\n */\nfunction makeCachedFunction(\n CallCache: new () => CacheMap,\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n const callCacheSync = new CallCache();\n const callCacheAsync = new CallCache();\n const futureCache = new CallCache>();\n\n return function* cachedFunction(arg: ArgT, data: SideChannel) {\n const asyncContext = yield* isAsync();\n const callCache = asyncContext ? callCacheAsync : callCacheSync;\n\n const cached = yield* getCachedValueOrWait(\n asyncContext,\n callCache,\n futureCache,\n arg,\n data,\n );\n if (cached.valid) return cached.value;\n\n const cache = new CacheConfigurator(data);\n\n const handlerResult: Handler | ResultT = handler(arg, cache);\n\n let finishLock: Lock;\n let value: ResultT;\n\n if (isIterableIterator(handlerResult)) {\n value = yield* onFirstPause(handlerResult, () => {\n finishLock = setupAsyncLocks(cache, futureCache, arg);\n });\n } else {\n value = handlerResult;\n }\n\n updateFunctionCache(callCache, cache, arg, value);\n\n if (finishLock) {\n futureCache.delete(arg);\n finishLock.release(value);\n }\n\n return value;\n };\n}\n\ntype CacheMap =\n | Map>\n // @ts-expect-error todo(flow->ts): add `extends object` constraint to ArgT\n | WeakMap>;\n\nfunction* getCachedValue(\n cache: CacheMap,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cachedValue: CacheEntry | void = cache.get(arg);\n\n if (cachedValue) {\n for (const { value, valid } of cachedValue) {\n if (yield* valid(data)) return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction* getCachedValueOrWait(\n asyncContext: boolean,\n callCache: CacheMap,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cached = yield* getCachedValue(callCache, arg, data);\n if (cached.valid) {\n return cached;\n }\n\n if (asyncContext) {\n const cached = yield* getCachedValue(futureCache, arg, data);\n if (cached.valid) {\n const value = yield* waitFor(cached.value.promise);\n return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction setupAsyncLocks(\n config: CacheConfigurator,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n): Lock {\n const finishLock = new Lock();\n\n updateFunctionCache(futureCache, config, arg, finishLock);\n\n return finishLock;\n}\n\nfunction updateFunctionCache<\n ArgT,\n ResultT,\n SideChannel,\n Cache extends CacheMap,\n>(\n cache: Cache,\n config: CacheConfigurator,\n arg: ArgT,\n value: ResultT,\n) {\n if (!config.configured()) config.forever();\n\n let cachedValue: CacheEntry | void = cache.get(arg);\n\n config.deactivate();\n\n switch (config.mode()) {\n case \"forever\":\n cachedValue = [{ value, valid: genTrue }];\n cache.set(arg, cachedValue);\n break;\n case \"invalidate\":\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n break;\n case \"valid\":\n if (cachedValue) {\n cachedValue.push({ value, valid: config.validator() });\n } else {\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n }\n }\n}\n\nclass CacheConfigurator {\n _active: boolean = true;\n _never: boolean = false;\n _forever: boolean = false;\n _invalidate: boolean = false;\n\n _configured: boolean = false;\n\n _pairs: Array<\n [cachedValue: unknown, handler: (data: SideChannel) => Handler]\n > = [];\n\n _data: SideChannel;\n\n constructor(data: SideChannel) {\n this._data = data;\n }\n\n simple() {\n return makeSimpleConfigurator(this);\n }\n\n mode() {\n if (this._never) return \"never\";\n if (this._forever) return \"forever\";\n if (this._invalidate) return \"invalidate\";\n return \"valid\";\n }\n\n forever() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never) {\n throw new Error(\"Caching has already been configured with .never()\");\n }\n this._forever = true;\n this._configured = true;\n }\n\n never() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._forever) {\n throw new Error(\"Caching has already been configured with .forever()\");\n }\n this._never = true;\n this._configured = true;\n }\n\n using(handler: (data: SideChannel) => T): T {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never || this._forever) {\n throw new Error(\n \"Caching has already been configured with .never or .forever()\",\n );\n }\n this._configured = true;\n\n const key = handler(this._data);\n\n const fn = maybeAsync(\n handler,\n `You appear to be using an async cache handler, but Babel has been called synchronously`,\n );\n\n if (isThenable(key)) {\n // @ts-expect-error todo(flow->ts): improve function return type annotation\n return key.then((key: unknown) => {\n this._pairs.push([key, fn]);\n return key;\n });\n }\n\n this._pairs.push([key, fn]);\n return key;\n }\n\n invalidate(handler: (data: SideChannel) => T): T {\n this._invalidate = true;\n return this.using(handler);\n }\n\n validator(): (data: SideChannel) => Handler {\n const pairs = this._pairs;\n return function* (data: SideChannel) {\n for (const [key, fn] of pairs) {\n if (key !== (yield* fn(data))) return false;\n }\n return true;\n };\n }\n\n deactivate() {\n this._active = false;\n }\n\n configured() {\n return this._configured;\n }\n}\n\nfunction makeSimpleConfigurator(\n cache: CacheConfigurator,\n): SimpleCacheConfigurator {\n function cacheFn(val: any) {\n if (typeof val === \"boolean\") {\n if (val) cache.forever();\n else cache.never();\n return;\n }\n\n return cache.using(() => assertSimpleType(val()));\n }\n cacheFn.forever = () => cache.forever();\n cacheFn.never = () => cache.never();\n cacheFn.using = (cb: () => SimpleType) =>\n cache.using(() => assertSimpleType(cb()));\n cacheFn.invalidate = (cb: () => SimpleType) =>\n cache.invalidate(() => assertSimpleType(cb()));\n\n return cacheFn as any;\n}\n\n// Types are limited here so that in the future these values can be used\n// as part of Babel's caching logic.\nexport type SimpleType =\n | string\n | boolean\n | number\n | null\n | void\n | Promise;\nexport function assertSimpleType(value: unknown): SimpleType {\n if (isThenable(value)) {\n throw new Error(\n `You appear to be using an async cache handler, ` +\n `which your current version of Babel does not support. ` +\n `We may add support for this in the future, ` +\n `but if you're on the most recent version of @babel/core and still ` +\n `seeing this error, then you'll need to synchronously handle your caching logic.`,\n );\n }\n\n if (\n value != null &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n typeof value !== \"number\"\n ) {\n throw new Error(\n \"Cache keys must be either string, boolean, number, null, or undefined.\",\n );\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'SimpleType'. This can be removed\n // when strictNullCheck is enabled\n return value;\n}\n\nclass Lock {\n released: boolean = false;\n promise: Promise;\n _resolve: (value: T) => void;\n\n constructor() {\n this.promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n release(value: T) {\n this.released = true;\n this._resolve(value);\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\n\nimport path from \"path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { validate } from \"./validation/options.ts\";\nimport type {\n ValidatedOptions,\n IgnoreList,\n ConfigApplicableTest,\n BabelrcSearch,\n CallerMetadata,\n IgnoreItem,\n} from \"./validation/options.ts\";\nimport pathPatternToRegex from \"./pattern-to-regex.ts\";\nimport { ConfigPrinter, ChainFormatter } from \"./printer.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\n\nimport { endHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nconst debug = buildDebug(\"babel:config:config-chain\");\n\nimport {\n findPackageData,\n findRelativeConfig,\n findRootConfig,\n loadConfig,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile, FilePackageData } from \"./files/index.ts\";\n\nimport { makeWeakCacheSync, makeStrongCacheSync } from \"./caching.ts\";\n\nimport {\n createCachedDescriptors,\n createUncachedDescriptors,\n} from \"./config-descriptors.ts\";\nimport type {\n UnloadedDescriptor,\n OptionsAndDescriptors,\n ValidatedFile,\n} from \"./config-descriptors.ts\";\n\nexport type ConfigChain = {\n plugins: Array>;\n presets: Array>;\n options: Array;\n files: Set;\n};\n\nexport type PresetInstance = {\n options: ValidatedOptions;\n alias: string;\n dirname: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type ConfigContext = {\n filename: string | undefined;\n cwd: string;\n root: string;\n envName: string;\n caller: CallerMetadata | undefined;\n showConfig: boolean;\n};\n\n/**\n * Build a config chain for a given preset.\n */\nexport function* buildPresetChain(\n arg: PresetInstance,\n context: any,\n): Handler {\n const chain = yield* buildPresetChainWalker(arg, context);\n if (!chain) return null;\n\n return {\n plugins: dedupDescriptors(chain.plugins),\n presets: dedupDescriptors(chain.presets),\n options: chain.options.map(o => normalizeOptions(o)),\n files: new Set(),\n };\n}\n\nexport const buildPresetChainWalker = makeChainWalker({\n root: preset => loadPresetDescriptors(preset),\n env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName),\n overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index),\n overridesEnv: (preset, index, envName) =>\n loadPresetOverridesEnvDescriptors(preset)(index)(envName),\n createLogger: () => () => {}, // Currently we don't support logging how preset is expanded\n});\nconst loadPresetDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n buildRootDescriptors(preset, preset.alias, createUncachedDescriptors),\n);\nconst loadPresetEnvDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadPresetOverridesDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadPresetOverridesEnvDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nexport type FileHandling = \"transpile\" | \"ignored\" | \"unsupported\";\nexport type RootConfigChain = ConfigChain & {\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\n/**\n * Build a config chain for Babel's full root configuration.\n */\nexport function* buildRootChain(\n opts: ValidatedOptions,\n context: ConfigContext,\n): Handler {\n let configReport, babelRcReport;\n const programmaticLogger = new ConfigPrinter();\n const programmaticChain = yield* loadProgrammaticChain(\n {\n options: opts,\n dirname: context.cwd,\n },\n context,\n undefined,\n programmaticLogger,\n );\n if (!programmaticChain) return null;\n const programmaticReport = yield* programmaticLogger.output();\n\n let configFile;\n if (typeof opts.configFile === \"string\") {\n configFile = yield* loadConfig(\n opts.configFile,\n context.cwd,\n context.envName,\n context.caller,\n );\n } else if (opts.configFile !== false) {\n configFile = yield* findRootConfig(\n context.root,\n context.envName,\n context.caller,\n );\n }\n\n let { babelrc, babelrcRoots } = opts;\n let babelrcRootsDirectory = context.cwd;\n\n const configFileChain = emptyChain();\n const configFileLogger = new ConfigPrinter();\n if (configFile) {\n const validatedFile = validateConfigFile(configFile);\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n configFileLogger,\n );\n if (!result) return null;\n configReport = yield* configFileLogger.output();\n\n // Allow config files to toggle `.babelrc` resolution on and off and\n // specify where the roots are.\n if (babelrc === undefined) {\n babelrc = validatedFile.options.babelrc;\n }\n if (babelrcRoots === undefined) {\n babelrcRootsDirectory = validatedFile.dirname;\n babelrcRoots = validatedFile.options.babelrcRoots;\n }\n\n mergeChain(configFileChain, result);\n }\n\n let ignoreFile, babelrcFile;\n let isIgnored = false;\n const fileChain = emptyChain();\n // resolve all .babelrc files\n if (\n (babelrc === true || babelrc === undefined) &&\n typeof context.filename === \"string\"\n ) {\n const pkgData = yield* findPackageData(context.filename);\n\n if (\n pkgData &&\n babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)\n ) {\n ({ ignore: ignoreFile, config: babelrcFile } = yield* findRelativeConfig(\n pkgData,\n context.envName,\n context.caller,\n ));\n\n if (ignoreFile) {\n fileChain.files.add(ignoreFile.filepath);\n }\n\n if (\n ignoreFile &&\n shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)\n ) {\n isIgnored = true;\n }\n\n if (babelrcFile && !isIgnored) {\n const validatedFile = validateBabelrcFile(babelrcFile);\n const babelrcLogger = new ConfigPrinter();\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n babelrcLogger,\n );\n if (!result) {\n isIgnored = true;\n } else {\n babelRcReport = yield* babelrcLogger.output();\n mergeChain(fileChain, result);\n }\n }\n\n if (babelrcFile && isIgnored) {\n fileChain.files.add(babelrcFile.filepath);\n }\n }\n }\n\n if (context.showConfig) {\n console.log(\n `Babel configs on \"${context.filename}\" (ascending priority):\\n` +\n // print config by the order of ascending priority\n [configReport, babelRcReport, programmaticReport]\n .filter(x => !!x)\n .join(\"\\n\\n\") +\n \"\\n-----End Babel configs-----\",\n );\n }\n // Insert file chain in front so programmatic options have priority\n // over configuration file chain items.\n const chain = mergeChain(\n mergeChain(mergeChain(emptyChain(), configFileChain), fileChain),\n programmaticChain,\n );\n\n return {\n plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),\n presets: isIgnored ? [] : dedupDescriptors(chain.presets),\n options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)),\n fileHandling: isIgnored ? \"ignored\" : \"transpile\",\n ignore: ignoreFile || undefined,\n babelrc: babelrcFile || undefined,\n config: configFile || undefined,\n files: chain.files,\n };\n}\n\nfunction babelrcLoadEnabled(\n context: ConfigContext,\n pkgData: FilePackageData,\n babelrcRoots: BabelrcSearch | undefined,\n babelrcRootsDirectory: string,\n): boolean {\n if (typeof babelrcRoots === \"boolean\") return babelrcRoots;\n\n const absoluteRoot = context.root;\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcRoots === undefined) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n let babelrcPatterns = babelrcRoots;\n if (!Array.isArray(babelrcPatterns)) {\n babelrcPatterns = [babelrcPatterns as IgnoreItem];\n }\n babelrcPatterns = babelrcPatterns.map(pat => {\n return typeof pat === \"string\"\n ? path.resolve(babelrcRootsDirectory, pat)\n : pat;\n });\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n return babelrcPatterns.some(pat => {\n if (typeof pat === \"string\") {\n pat = pathPatternToRegex(pat, babelrcRootsDirectory);\n }\n\n return pkgData.directories.some(directory => {\n return matchPattern(pat, babelrcRootsDirectory, directory, context);\n });\n });\n}\n\nconst validateConfigFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"configfile\", file.options, file.filepath),\n }),\n);\n\nconst validateBabelrcFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"babelrcfile\", file.options, file.filepath),\n }),\n);\n\nconst validateExtendFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"extendsfile\", file.options, file.filepath),\n }),\n);\n\n/**\n * Build a config chain for just the programmatic options passed into Babel.\n */\nconst loadProgrammaticChain = makeChainWalker({\n root: input => buildRootDescriptors(input, \"base\", createCachedDescriptors),\n env: (input, envName) =>\n buildEnvDescriptors(input, \"base\", createCachedDescriptors, envName),\n overrides: (input, index) =>\n buildOverrideDescriptors(input, \"base\", createCachedDescriptors, index),\n overridesEnv: (input, index, envName) =>\n buildOverrideEnvDescriptors(\n input,\n \"base\",\n createCachedDescriptors,\n index,\n envName,\n ),\n createLogger: (input, context, baseLogger) =>\n buildProgrammaticLogger(input, context, baseLogger),\n});\n\n/**\n * Build a config chain for a given file.\n */\nconst loadFileChainWalker = makeChainWalker({\n root: file => loadFileDescriptors(file),\n env: (file, envName) => loadFileEnvDescriptors(file)(envName),\n overrides: (file, index) => loadFileOverridesDescriptors(file)(index),\n overridesEnv: (file, index, envName) =>\n loadFileOverridesEnvDescriptors(file)(index)(envName),\n createLogger: (file, context, baseLogger) =>\n buildFileLogger(file.filepath, context, baseLogger),\n});\n\nfunction* loadFileChain(\n input: ValidatedFile,\n context: ConfigContext,\n files: Set,\n baseLogger: ConfigPrinter,\n) {\n const chain = yield* loadFileChainWalker(input, context, files, baseLogger);\n chain?.files.add(input.filepath);\n\n return chain;\n}\n\nconst loadFileDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n buildRootDescriptors(file, file.filepath, createUncachedDescriptors),\n);\nconst loadFileEnvDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadFileOverridesDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadFileOverridesEnvDescriptors = makeWeakCacheSync(\n (file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nfunction buildFileLogger(\n filepath: string,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Config, {\n filepath,\n });\n}\n\nfunction buildRootDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n) {\n return descriptors(dirname, options, alias);\n}\n\nfunction buildProgrammaticLogger(\n _: unknown,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Programmatic, {\n callerName: context.caller?.name,\n });\n}\n\nfunction buildEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n envName: string,\n) {\n const opts = options.env?.[envName];\n return opts ? descriptors(dirname, opts, `${alias}.env[\"${envName}\"]`) : null;\n}\n\nfunction buildOverrideDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n) {\n const opts = options.overrides?.[index];\n if (!opts) throw new Error(\"Assertion failure - missing override\");\n\n return descriptors(dirname, opts, `${alias}.overrides[${index}]`);\n}\n\nfunction buildOverrideEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n envName: string,\n) {\n const override = options.overrides?.[index];\n if (!override) throw new Error(\"Assertion failure - missing override\");\n\n const opts = override.env?.[envName];\n return opts\n ? descriptors(\n dirname,\n opts,\n `${alias}.overrides[${index}].env[\"${envName}\"]`,\n )\n : null;\n}\n\nfunction makeChainWalker<\n ArgT extends {\n options: ValidatedOptions;\n dirname: string;\n filepath?: string;\n },\n>({\n root,\n env,\n overrides,\n overridesEnv,\n createLogger,\n}: {\n root: (configEntry: ArgT) => OptionsAndDescriptors;\n env: (configEntry: ArgT, env: string) => OptionsAndDescriptors | null;\n overrides: (configEntry: ArgT, index: number) => OptionsAndDescriptors;\n overridesEnv: (\n configEntry: ArgT,\n index: number,\n env: string,\n ) => OptionsAndDescriptors | null;\n createLogger: (\n configEntry: ArgT,\n context: ConfigContext,\n printer: ConfigPrinter | void,\n ) => (\n opts: OptionsAndDescriptors,\n index?: number | null,\n env?: string | null,\n ) => void;\n}): (\n configEntry: ArgT,\n context: ConfigContext,\n files?: Set,\n baseLogger?: ConfigPrinter,\n) => Handler {\n return function* chainWalker(input, context, files = new Set(), baseLogger) {\n const { dirname } = input;\n\n const flattenedConfigs: Array<{\n config: OptionsAndDescriptors;\n index: number | undefined | null;\n envName: string | undefined | null;\n }> = [];\n\n const rootOpts = root(input);\n if (configIsApplicable(rootOpts, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: rootOpts,\n envName: undefined,\n index: undefined,\n });\n\n const envOpts = env(input, context.envName);\n if (\n envOpts &&\n configIsApplicable(envOpts, dirname, context, input.filepath)\n ) {\n flattenedConfigs.push({\n config: envOpts,\n envName: context.envName,\n index: undefined,\n });\n }\n\n (rootOpts.options.overrides || []).forEach((_, index) => {\n const overrideOps = overrides(input, index);\n if (configIsApplicable(overrideOps, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: overrideOps,\n index,\n envName: undefined,\n });\n\n const overrideEnvOpts = overridesEnv(input, index, context.envName);\n if (\n overrideEnvOpts &&\n configIsApplicable(\n overrideEnvOpts,\n dirname,\n context,\n input.filepath,\n )\n ) {\n flattenedConfigs.push({\n config: overrideEnvOpts,\n index,\n envName: context.envName,\n });\n }\n }\n });\n }\n\n // Process 'ignore' and 'only' before 'extends' items are processed so\n // that we don't do extra work loading extended configs if a file is\n // ignored.\n if (\n flattenedConfigs.some(\n ({\n config: {\n options: { ignore, only },\n },\n }) => shouldIgnore(context, ignore, only, dirname),\n )\n ) {\n return null;\n }\n\n const chain = emptyChain();\n const logger = createLogger(input, context, baseLogger);\n\n for (const { config, index, envName } of flattenedConfigs) {\n if (\n !(yield* mergeExtendsChain(\n chain,\n config.options,\n dirname,\n context,\n files,\n baseLogger,\n ))\n ) {\n return null;\n }\n\n logger(config, index, envName);\n yield* mergeChainOpts(chain, config);\n }\n return chain;\n };\n}\n\nfunction* mergeExtendsChain(\n chain: ConfigChain,\n opts: ValidatedOptions,\n dirname: string,\n context: ConfigContext,\n files: Set,\n baseLogger?: ConfigPrinter,\n): Handler {\n if (opts.extends === undefined) return true;\n\n const file = yield* loadConfig(\n opts.extends,\n dirname,\n context.envName,\n context.caller,\n );\n\n if (files.has(file)) {\n throw new Error(\n `Configuration cycle detected loading ${file.filepath}.\\n` +\n `File already loaded following the config chain:\\n` +\n Array.from(files, file => ` - ${file.filepath}`).join(\"\\n\"),\n );\n }\n\n files.add(file);\n const fileChain = yield* loadFileChain(\n validateExtendFile(file),\n context,\n files,\n baseLogger,\n );\n files.delete(file);\n\n if (!fileChain) return false;\n\n mergeChain(chain, fileChain);\n\n return true;\n}\n\nfunction mergeChain(target: ConfigChain, source: ConfigChain): ConfigChain {\n target.options.push(...source.options);\n target.plugins.push(...source.plugins);\n target.presets.push(...source.presets);\n for (const file of source.files) {\n target.files.add(file);\n }\n\n return target;\n}\n\nfunction* mergeChainOpts(\n target: ConfigChain,\n { options, plugins, presets }: OptionsAndDescriptors,\n): Handler {\n target.options.push(options);\n target.plugins.push(...(yield* plugins()));\n target.presets.push(...(yield* presets()));\n\n return target;\n}\n\nfunction emptyChain(): ConfigChain {\n return {\n options: [],\n presets: [],\n plugins: [],\n files: new Set(),\n };\n}\n\nfunction normalizeOptions(opts: ValidatedOptions): ValidatedOptions {\n const options = {\n ...opts,\n };\n delete options.extends;\n delete options.env;\n delete options.overrides;\n delete options.plugins;\n delete options.presets;\n delete options.passPerPreset;\n delete options.ignore;\n delete options.only;\n delete options.test;\n delete options.include;\n delete options.exclude;\n\n // \"sourceMap\" is just aliased to sourceMap, so copy it over as\n // we merge the options together.\n if (Object.hasOwn(options, \"sourceMap\")) {\n options.sourceMaps = options.sourceMap;\n delete options.sourceMap;\n }\n return options;\n}\n\nfunction dedupDescriptors(\n items: Array>,\n): Array> {\n const map: Map<\n Function,\n Map }>\n > = new Map();\n\n const descriptors = [];\n\n for (const item of items) {\n if (typeof item.value === \"function\") {\n const fnKey = item.value;\n let nameMap = map.get(fnKey);\n if (!nameMap) {\n nameMap = new Map();\n map.set(fnKey, nameMap);\n }\n let desc = nameMap.get(item.name);\n if (!desc) {\n desc = { value: item };\n descriptors.push(desc);\n\n // Treat passPerPreset presets as unique, skipping them\n // in the merge processing steps.\n if (!item.ownPass) nameMap.set(item.name, desc);\n } else {\n desc.value = item;\n }\n } else {\n descriptors.push({ value: item });\n }\n }\n\n return descriptors.reduce((acc, desc) => {\n acc.push(desc.value);\n return acc;\n }, []);\n}\n\nfunction configIsApplicable(\n { options }: OptionsAndDescriptors,\n dirname: string,\n context: ConfigContext,\n configName: string,\n): boolean {\n return (\n (options.test === undefined ||\n configFieldIsApplicable(context, options.test, dirname, configName)) &&\n (options.include === undefined ||\n configFieldIsApplicable(context, options.include, dirname, configName)) &&\n (options.exclude === undefined ||\n !configFieldIsApplicable(context, options.exclude, dirname, configName))\n );\n}\n\nfunction configFieldIsApplicable(\n context: ConfigContext,\n test: ConfigApplicableTest,\n dirname: string,\n configName: string,\n): boolean {\n const patterns = Array.isArray(test) ? test : [test];\n\n return matchesPatterns(context, patterns, dirname, configName);\n}\n\n/**\n * Print the ignoreList-values in a more helpful way than the default.\n */\nfunction ignoreListReplacer(\n _key: string,\n value: IgnoreList | IgnoreItem,\n): IgnoreList | IgnoreItem | string {\n if (value instanceof RegExp) {\n return String(value);\n }\n\n return value;\n}\n\n/**\n * Tests if a filename should be ignored based on \"ignore\" and \"only\" options.\n */\nfunction shouldIgnore(\n context: ConfigContext,\n ignore: IgnoreList | undefined | null,\n only: IgnoreList | undefined | null,\n dirname: string,\n): boolean {\n if (ignore && matchesPatterns(context, ignore, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it matches one of \\`ignore: ${JSON.stringify(\n ignore,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n if (only && !matchesPatterns(context, only, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it fails to match one of \\`only: ${JSON.stringify(\n only,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns result of calling function with filename if pattern is a function.\n * Otherwise returns result of matching pattern Regex with filename.\n */\nfunction matchesPatterns(\n context: ConfigContext,\n patterns: IgnoreList,\n dirname: string,\n configName?: string,\n): boolean {\n return patterns.some(pattern =>\n matchPattern(pattern, dirname, context.filename, context, configName),\n );\n}\n\nfunction matchPattern(\n pattern: IgnoreItem,\n dirname: string,\n pathToTest: string | undefined,\n context: ConfigContext,\n configName?: string,\n): boolean {\n if (typeof pattern === \"function\") {\n return !!endHiddenCallStack(pattern)(pathToTest, {\n dirname,\n envName: context.envName,\n caller: context.caller,\n });\n }\n\n if (typeof pathToTest !== \"string\") {\n throw new ConfigError(\n `Configuration contains string/RegExp pattern, but no filename was passed to Babel`,\n configName,\n );\n }\n\n if (typeof pattern === \"string\") {\n pattern = pathPatternToRegex(pattern, dirname);\n }\n return pattern.test(pathToTest);\n}\n","import gensync, { type Handler } from \"gensync\";\nimport { once } from \"../gensync-utils/functional.ts\";\n\nimport { loadPlugin, loadPreset } from \"./files/index.ts\";\n\nimport { getItemDescriptor } from \"./item.ts\";\n\nimport {\n makeWeakCacheSync,\n makeStrongCacheSync,\n makeStrongCache,\n} from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\n\nimport type {\n ValidatedOptions,\n PluginList,\n PluginItem,\n} from \"./validation/options.ts\";\n\nimport { resolveBrowserslistConfigFile } from \"./resolve-targets.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\n// Represents a config object and functions to lazily load the descriptors\n// for the plugins and presets so we don't load the plugins/presets unless\n// the options object actually ends up being applicable.\nexport type OptionsAndDescriptors = {\n options: ValidatedOptions;\n plugins: () => Handler>>;\n presets: () => Handler>>;\n};\n\n// Represents a plugin or presets at a given location in a config object.\n// At this point these have been resolved to a specific object or function,\n// but have not yet been executed to call functions with options.\nexport interface UnloadedDescriptor {\n name: string | undefined;\n value: object | ((api: API, options: Options, dirname: string) => unknown);\n options: Options;\n dirname: string;\n alias: string;\n ownPass?: boolean;\n file?: {\n request: string;\n resolved: string;\n };\n}\n\nfunction isEqualDescriptor(\n a: UnloadedDescriptor,\n b: UnloadedDescriptor,\n): boolean {\n return (\n a.name === b.name &&\n a.value === b.value &&\n a.options === b.options &&\n a.dirname === b.dirname &&\n a.alias === b.alias &&\n a.ownPass === b.ownPass &&\n a.file?.request === b.file?.request &&\n a.file?.resolved === b.file?.resolved\n );\n}\n\nexport type ValidatedFile = {\n filepath: string;\n dirname: string;\n options: ValidatedOptions;\n};\n\n// eslint-disable-next-line require-yield\nfunction* handlerOf(value: T): Handler {\n return value;\n}\n\nfunction optionsWithResolvedBrowserslistConfigFile(\n options: ValidatedOptions,\n dirname: string,\n): ValidatedOptions {\n if (typeof options.browserslistConfigFile === \"string\") {\n options.browserslistConfigFile = resolveBrowserslistConfigFile(\n options.browserslistConfigFile,\n dirname,\n );\n }\n return options;\n}\n\n/**\n * Create a set of descriptors from a given options object, preserving\n * descriptor identity based on the identity of the plugin/preset arrays\n * themselves, and potentially on the identity of the plugins/presets + options.\n */\nexport function createCachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n const { plugins, presets, passPerPreset } = options;\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n plugins: plugins\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPluginDescriptors(plugins, dirname)(alias)\n : () => handlerOf([]),\n presets: presets\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPresetDescriptors(presets, dirname)(alias)(\n !!passPerPreset,\n )\n : () => handlerOf([]),\n };\n}\n\n/**\n * Create a set of descriptors from a given options object, with consistent\n * identity for the descriptors, but not caching based on any specific identity.\n */\nexport function createUncachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n // The returned result here is cached to represent a config object in\n // memory, so we build and memoize the descriptors to ensure the same\n // values are returned consistently.\n plugins: once(() =>\n createPluginDescriptors(options.plugins || [], dirname, alias),\n ),\n presets: once(() =>\n createPresetDescriptors(\n options.presets || [],\n dirname,\n alias,\n !!options.passPerPreset,\n ),\n ),\n };\n}\n\nconst PRESET_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPresetDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCacheSync((alias: string) =>\n makeStrongCache(function* (\n passPerPreset: boolean,\n ): Handler>> {\n const descriptors = yield* createPresetDescriptors(\n items,\n dirname,\n alias,\n passPerPreset,\n );\n return descriptors.map(\n // Items are cached using the overall preset array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc),\n );\n }),\n );\n },\n);\n\nconst PLUGIN_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPluginDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCache(function* (\n alias: string,\n ): Handler>> {\n const descriptors = yield* createPluginDescriptors(items, dirname, alias);\n return descriptors.map(\n // Items are cached using the overall plugin array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc),\n );\n });\n },\n);\n\n/**\n * When no options object is given in a descriptor, this object is used\n * as a WeakMap key in order to have consistent identity.\n */\nconst DEFAULT_OPTIONS = {};\n\n/**\n * Given the cache and a descriptor, returns a matching descriptor from the\n * cache, or else returns the input descriptor and adds it to the cache for\n * next time.\n */\nfunction loadCachedDescriptor(\n cache: WeakMap<\n object | Function,\n WeakMap>>\n >,\n desc: UnloadedDescriptor,\n) {\n const { value, options = DEFAULT_OPTIONS } = desc;\n if (options === false) return desc;\n\n let cacheByOptions = cache.get(value);\n if (!cacheByOptions) {\n cacheByOptions = new WeakMap();\n cache.set(value, cacheByOptions);\n }\n\n let possibilities = cacheByOptions.get(options);\n if (!possibilities) {\n possibilities = [];\n cacheByOptions.set(options, possibilities);\n }\n\n if (!possibilities.includes(desc)) {\n const matches = possibilities.filter(possibility =>\n isEqualDescriptor(possibility, desc),\n );\n if (matches.length > 0) {\n return matches[0];\n }\n\n possibilities.push(desc);\n }\n\n return desc;\n}\n\nfunction* createPresetDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n passPerPreset: boolean,\n): Handler>> {\n return yield* createDescriptors(\n \"preset\",\n items,\n dirname,\n alias,\n passPerPreset,\n );\n}\n\nfunction* createPluginDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n): Handler>> {\n return yield* createDescriptors(\"plugin\", items, dirname, alias);\n}\n\nfunction* createDescriptors(\n type: \"plugin\" | \"preset\",\n items: PluginList,\n dirname: string,\n alias: string,\n ownPass?: boolean,\n): Handler>> {\n const descriptors = yield* gensync.all(\n items.map((item, index) =>\n createDescriptor(item, dirname, {\n type,\n alias: `${alias}$${index}`,\n ownPass: !!ownPass,\n }),\n ),\n );\n\n assertNoDuplicates(descriptors);\n\n return descriptors;\n}\n\n/**\n * Given a plugin/preset item, resolve it into a standard format.\n */\nexport function* createDescriptor(\n pair: PluginItem,\n dirname: string,\n {\n type,\n alias,\n ownPass,\n }: {\n type?: \"plugin\" | \"preset\";\n alias: string;\n ownPass?: boolean;\n },\n): Handler> {\n const desc = getItemDescriptor(pair);\n if (desc) {\n return desc;\n }\n\n let name;\n let options;\n // todo(flow->ts) better type annotation\n let value: any = pair;\n if (Array.isArray(value)) {\n if (value.length === 3) {\n [value, options, name] = value;\n } else {\n [value, options] = value;\n }\n }\n\n let file = undefined;\n let filepath = null;\n if (typeof value === \"string\") {\n if (typeof type !== \"string\") {\n throw new Error(\n \"To resolve a string-based item, the type of item must be given\",\n );\n }\n const resolver = type === \"plugin\" ? loadPlugin : loadPreset;\n const request = value;\n\n ({ filepath, value } = yield* resolver(value, dirname));\n\n file = {\n request,\n resolved: filepath,\n };\n }\n\n if (!value) {\n throw new Error(`Unexpected falsy value: ${String(value)}`);\n }\n\n if (typeof value === \"object\" && value.__esModule) {\n if (value.default) {\n value = value.default;\n } else {\n throw new Error(\"Must export a default export when using ES6 modules.\");\n }\n }\n\n if (typeof value !== \"object\" && typeof value !== \"function\") {\n throw new Error(\n `Unsupported format: ${typeof value}. Expected an object or a function.`,\n );\n }\n\n if (filepath !== null && typeof value === \"object\" && value) {\n // We allow object values for plugins/presets nested directly within a\n // config object, because it can be useful to define them in nested\n // configuration contexts.\n throw new Error(\n `Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`,\n );\n }\n\n return {\n name,\n alias: filepath || alias,\n value,\n options,\n dirname,\n ownPass,\n file,\n };\n}\n\nfunction assertNoDuplicates(items: Array>): void {\n const map = new Map();\n\n for (const item of items) {\n if (typeof item.value !== \"function\") continue;\n\n let nameMap = map.get(item.value);\n if (!nameMap) {\n nameMap = new Set();\n map.set(item.value, nameMap);\n }\n\n if (nameMap.has(item.name)) {\n const conflicts = items.filter(i => i.value === item.value);\n throw new Error(\n [\n `Duplicate plugin/preset detected.`,\n `If you'd like to use two separate instances of a plugin,`,\n `they need separate names, e.g.`,\n ``,\n ` plugins: [`,\n ` ['some-plugin', {}],`,\n ` ['some-plugin', {}, 'some unique name'],`,\n ` ]`,\n ``,\n `Duplicates detected are:`,\n `${JSON.stringify(conflicts, null, 2)}`,\n ].join(\"\\n\"),\n );\n }\n\n nameMap.add(item.name);\n }\n}\n","import type { Handler } from \"gensync\";\n\nimport type {\n ConfigFile,\n IgnoreFile,\n RelativeConfig,\n FilePackageData,\n} from \"./types.ts\";\n\nimport type { CallerMetadata } from \"../validation/options.ts\";\n\nexport type { ConfigFile, IgnoreFile, RelativeConfig, FilePackageData };\n\nexport function findConfigUpwards(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rootDir: string,\n): string | null {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* findPackageData(filepath: string): Handler {\n return {\n filepath,\n directories: [],\n pkg: null,\n isPackage: false,\n };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRelativeConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n pkgData: FilePackageData,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return { config: null, ignore: null };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRootConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* loadConfig(\n name: string,\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`);\n}\n\n// eslint-disable-next-line require-yield\nexport function* resolveShowConfigPath(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n): Handler {\n return null;\n}\n\nexport const ROOT_CONFIG_FILENAMES: string[] = [];\n\ntype Resolved =\n | { loader: \"require\"; filepath: string }\n | { loader: \"import\"; filepath: string };\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePlugin(name: string, dirname: string): Resolved | null {\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePreset(name: string, dirname: string): Resolved | null {\n return null;\n}\n\nexport function loadPlugin(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load plugin ${name} relative to ${dirname} in a browser`,\n );\n}\n\nexport function loadPreset(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load preset ${name} relative to ${dirname} in a browser`,\n );\n}\n","import gensync, { type Handler } from \"gensync\";\nimport {\n forwardAsync,\n maybeAsync,\n isThenable,\n} from \"../gensync-utils/async.ts\";\n\nimport { mergeOptions } from \"./util.ts\";\nimport * as context from \"../index.ts\";\nimport Plugin from \"./plugin.ts\";\nimport { getItemDescriptor } from \"./item.ts\";\nimport { buildPresetChain } from \"./config-chain.ts\";\nimport { finalize as freezeDeepArray } from \"./helpers/deep-array.ts\";\nimport type { DeepArray, ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type {\n ConfigContext,\n ConfigChain,\n PresetInstance,\n} from \"./config-chain.ts\";\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\nimport traverse from \"@babel/traverse\";\nimport { makeWeakCache, makeWeakCacheSync } from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\nimport {\n validate,\n checkNoUnwrappedItemOptionPairs,\n} from \"./validation/options.ts\";\nimport type { InputOptions, PluginItem } from \"./validation/options.ts\";\nimport { validatePluginObject } from \"./validation/plugins.ts\";\nimport { makePluginAPI, makePresetAPI } from \"./helpers/config-api.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nimport loadPrivatePartialConfig from \"./partial.ts\";\nimport type { ValidatedOptions } from \"./validation/options.ts\";\n\nimport type * as Context from \"./cache-contexts.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\n\ntype LoadedDescriptor = {\n value: any;\n options: object;\n dirname: string;\n alias: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { InputOptions } from \"./validation/options.ts\";\n\nexport type ResolvedConfig = {\n options: any;\n passes: PluginPasses;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { Plugin };\nexport type PluginPassList = Array;\nexport type PluginPasses = Array;\n\nexport default gensync(function* loadFullConfig(\n inputOpts: InputOptions,\n): Handler {\n const result = yield* loadPrivatePartialConfig(inputOpts);\n if (!result) {\n return null;\n }\n const { options, context, fileHandling } = result;\n\n if (fileHandling === \"ignored\") {\n return null;\n }\n\n const optionDefaults: ValidatedOptions = {};\n\n const { plugins, presets } = options;\n\n if (!plugins || !presets) {\n throw new Error(\"Assertion failure - plugins and presets exist\");\n }\n\n const presetContext: Context.FullPreset = {\n ...context,\n targets: options.targets,\n };\n\n const toDescriptor = (item: PluginItem) => {\n const desc = getItemDescriptor(item);\n if (!desc) {\n throw new Error(\"Assertion failure - must be config item\");\n }\n\n return desc;\n };\n\n const presetsDescriptors = presets.map(toDescriptor);\n const initialPluginsDescriptors = plugins.map(toDescriptor);\n const pluginDescriptorsByPass: Array>> = [\n [],\n ];\n const passes: Array> = [];\n\n const externalDependencies: DeepArray = [];\n\n const ignored = yield* enhanceError(\n context,\n function* recursePresetDescriptors(\n rawPresets: Array>,\n pluginDescriptorsPass: Array>,\n ): Handler {\n const presets: Array<{\n preset: ConfigChain | null;\n pass: Array>;\n }> = [];\n\n for (let i = 0; i < rawPresets.length; i++) {\n const descriptor = rawPresets[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var preset = yield* loadPresetDescriptor(descriptor, presetContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_OPTION\") {\n checkNoUnwrappedItemOptionPairs(rawPresets, i, \"preset\", e);\n }\n throw e;\n }\n\n externalDependencies.push(preset.externalDependencies);\n\n // Presets normally run in reverse order, but if they\n // have their own pass they run after the presets\n // in the previous pass.\n if (descriptor.ownPass) {\n presets.push({ preset: preset.chain, pass: [] });\n } else {\n presets.unshift({\n preset: preset.chain,\n pass: pluginDescriptorsPass,\n });\n }\n }\n }\n\n // resolve presets\n if (presets.length > 0) {\n // The passes are created in the same order as the preset list, but are inserted before any\n // existing additional passes.\n pluginDescriptorsByPass.splice(\n 1,\n 0,\n ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass),\n );\n\n for (const { preset, pass } of presets) {\n if (!preset) return true;\n\n pass.push(...preset.plugins);\n\n const ignored = yield* recursePresetDescriptors(preset.presets, pass);\n if (ignored) return true;\n\n preset.options.forEach(opts => {\n mergeOptions(optionDefaults, opts);\n });\n }\n }\n },\n )(presetsDescriptors, pluginDescriptorsByPass[0]);\n\n if (ignored) return null;\n\n const opts: ValidatedOptions = optionDefaults;\n mergeOptions(opts, options);\n\n const pluginContext: Context.FullPlugin = {\n ...presetContext,\n assumptions: opts.assumptions ?? {},\n };\n\n yield* enhanceError(context, function* loadPluginDescriptors() {\n pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors);\n\n for (const descs of pluginDescriptorsByPass) {\n const pass: Plugin[] = [];\n passes.push(pass);\n\n for (let i = 0; i < descs.length; i++) {\n const descriptor = descs[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var plugin = yield* loadPluginDescriptor(descriptor, pluginContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_PLUGIN_PROPERTY\") {\n // print special message for `plugins: [\"@babel/foo\", { foo: \"option\" }]`\n checkNoUnwrappedItemOptionPairs(descs, i, \"plugin\", e);\n }\n throw e;\n }\n pass.push(plugin);\n\n externalDependencies.push(plugin.externalDependencies);\n }\n }\n }\n })();\n\n opts.plugins = passes[0];\n opts.presets = passes\n .slice(1)\n .filter(plugins => plugins.length > 0)\n .map(plugins => ({ plugins }));\n opts.passPerPreset = opts.presets.length > 0;\n\n return {\n options: opts,\n passes: passes,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n});\n\nfunction enhanceError(context: ConfigContext, fn: T): T {\n return function* (arg1: unknown, arg2: unknown) {\n try {\n return yield* fn(arg1, arg2);\n } catch (e) {\n // There are a few case where thrown errors will try to annotate themselves multiple times, so\n // to keep things simple we just bail out if re-wrapping the message.\n if (!/^\\[BABEL\\]/.test(e.message)) {\n e.message = `[BABEL] ${context.filename ?? \"unknown file\"}: ${\n e.message\n }`;\n }\n\n throw e;\n }\n } as any;\n}\n\n/**\n * Load a generic plugin/preset from the given descriptor loaded from the config object.\n */\nconst makeDescriptorLoader = (\n apiFactory: (\n cache: CacheConfigurator,\n externalDependencies: Array,\n ) => API,\n) =>\n makeWeakCache(function* (\n { value, options, dirname, alias }: UnloadedDescriptor,\n cache: CacheConfigurator,\n ): Handler {\n // Disabled presets should already have been filtered out\n if (options === false) throw new Error(\"Assertion failure\");\n\n options = options || {};\n\n const externalDependencies: Array = [];\n\n let item: unknown = value;\n if (typeof value === \"function\") {\n const factory = maybeAsync(\n value as (api: API, options: object, dirname: string) => unknown,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n const api = {\n ...context,\n ...apiFactory(cache, externalDependencies),\n };\n try {\n item = yield* factory(api, options, dirname);\n } catch (e) {\n if (alias) {\n e.message += ` (While processing: ${JSON.stringify(alias)})`;\n }\n throw e;\n }\n }\n\n if (!item || typeof item !== \"object\") {\n throw new Error(\"Plugin/Preset did not return an object.\");\n }\n\n if (isThenable(item)) {\n // if we want to support async plugins\n yield* [];\n\n throw new Error(\n `You appear to be using a promise as a plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version. ` +\n `As an alternative, you can prefix the promise with \"await\". ` +\n `(While processing: ${JSON.stringify(alias)})`,\n );\n }\n\n if (\n externalDependencies.length > 0 &&\n (!cache.configured() || cache.mode() === \"forever\")\n ) {\n let error =\n `A plugin/preset has external untracked dependencies ` +\n `(${externalDependencies[0]}), but the cache `;\n if (!cache.configured()) {\n error += `has not been configured to be invalidated when the external dependencies change. `;\n } else {\n error += ` has been configured to never be invalidated. `;\n }\n error +=\n `Plugins/presets should configure their cache to be invalidated when the external ` +\n `dependencies change, for example using \\`api.cache.invalidate(() => ` +\n `statSync(filepath).mtimeMs)\\` or \\`api.cache.never()\\`\\n` +\n `(While processing: ${JSON.stringify(alias)})`;\n\n throw new Error(error);\n }\n\n return {\n value: item,\n options,\n dirname,\n alias,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n });\n\nconst pluginDescriptorLoader = makeDescriptorLoader<\n Context.SimplePlugin,\n PluginAPI\n>(makePluginAPI);\nconst presetDescriptorLoader = makeDescriptorLoader<\n Context.SimplePreset,\n PresetAPI\n>(makePresetAPI);\n\nconst instantiatePlugin = makeWeakCache(function* (\n { value, options, dirname, alias, externalDependencies }: LoadedDescriptor,\n cache: CacheConfigurator,\n): Handler {\n const pluginObj = validatePluginObject(value);\n\n const plugin = {\n ...pluginObj,\n };\n if (plugin.visitor) {\n plugin.visitor = traverse.explode({\n ...plugin.visitor,\n });\n }\n\n if (plugin.inherits) {\n const inheritsDescriptor: UnloadedDescriptor = {\n name: undefined,\n alias: `${alias}$inherits`,\n value: plugin.inherits,\n options,\n dirname,\n };\n\n const inherits = yield* forwardAsync(loadPluginDescriptor, run => {\n // If the inherited plugin changes, reinstantiate this plugin.\n return cache.invalidate(data => run(inheritsDescriptor, data));\n });\n\n plugin.pre = chainMaybeAsync(inherits.pre, plugin.pre);\n plugin.post = chainMaybeAsync(inherits.post, plugin.post);\n plugin.manipulateOptions = chainMaybeAsync(\n inherits.manipulateOptions,\n plugin.manipulateOptions,\n );\n plugin.visitor = traverse.visitors.merge([\n inherits.visitor || {},\n plugin.visitor || {},\n ]);\n\n if (inherits.externalDependencies.length > 0) {\n if (externalDependencies.length === 0) {\n externalDependencies = inherits.externalDependencies;\n } else {\n externalDependencies = freezeDeepArray([\n externalDependencies,\n inherits.externalDependencies,\n ]);\n }\n }\n }\n\n return new Plugin(plugin, options, alias, externalDependencies);\n});\n\n/**\n * Instantiate a plugin for the given descriptor, returning the plugin/options pair.\n */\nfunction* loadPluginDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.SimplePlugin,\n): Handler {\n if (descriptor.value instanceof Plugin) {\n if (descriptor.options) {\n throw new Error(\n \"Passed options to an existing Plugin instance will not work.\",\n );\n }\n\n return descriptor.value;\n }\n\n return yield* instantiatePlugin(\n yield* pluginDescriptorLoader(descriptor, context),\n context,\n );\n}\n\nconst needsFilename = (val: unknown) => val && typeof val !== \"function\";\n\nconst validateIfOptionNeedsFilename = (\n options: ValidatedOptions,\n descriptor: UnloadedDescriptor,\n): void => {\n if (\n needsFilename(options.test) ||\n needsFilename(options.include) ||\n needsFilename(options.exclude)\n ) {\n const formattedPresetName = descriptor.name\n ? `\"${descriptor.name}\"`\n : \"/* your preset */\";\n throw new ConfigError(\n [\n `Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`,\n `\\`\\`\\``,\n `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`,\n `\\`\\`\\``,\n `See https://babeljs.io/docs/en/options#filename for more information.`,\n ].join(\"\\n\"),\n );\n }\n};\n\nconst validatePreset = (\n preset: PresetInstance,\n context: ConfigContext,\n descriptor: UnloadedDescriptor,\n): void => {\n if (!context.filename) {\n const { options } = preset;\n validateIfOptionNeedsFilename(options, descriptor);\n options.overrides?.forEach(overrideOptions =>\n validateIfOptionNeedsFilename(overrideOptions, descriptor),\n );\n }\n};\n\nconst instantiatePreset = makeWeakCacheSync(\n ({\n value,\n dirname,\n alias,\n externalDependencies,\n }: LoadedDescriptor): PresetInstance => {\n return {\n options: validate(\"preset\", value),\n alias,\n dirname,\n externalDependencies,\n };\n },\n);\n\n/**\n * Generate a config object that will act as the root of a new nested config.\n */\nfunction* loadPresetDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.FullPreset,\n): Handler<{\n chain: ConfigChain | null;\n externalDependencies: ReadonlyDeepArray;\n}> {\n const preset = instantiatePreset(\n yield* presetDescriptorLoader(descriptor, context),\n );\n validatePreset(preset, context, descriptor);\n return {\n chain: yield* buildPresetChain(preset, context),\n externalDependencies: preset.externalDependencies,\n };\n}\n\nfunction chainMaybeAsync>(\n a: undefined | ((...args: Args) => R),\n b: undefined | ((...args: Args) => R),\n): (...args: Args) => R {\n if (!a) return b;\n if (!b) return a;\n\n return function (this: unknown, ...args: Args) {\n const res = a.apply(this, args);\n if (res && typeof res.then === \"function\") {\n return res.then(() => b.apply(this, args));\n }\n return b.apply(this, args);\n } as (...args: Args) => R;\n}\n","import semver from \"semver\";\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nimport { version as coreVersion } from \"../../index.ts\";\nimport { assertSimpleType } from \"../caching.ts\";\nimport type {\n CacheConfigurator,\n SimpleCacheConfigurator,\n SimpleType,\n} from \"../caching.ts\";\n\nimport type { AssumptionName, CallerMetadata } from \"../validation/options.ts\";\n\nimport type * as Context from \"../cache-contexts\";\n\ntype EnvFunction = {\n (): string;\n (extractor: (babelEnv: string) => T): T;\n (envVar: string): boolean;\n (envVars: Array): boolean;\n};\n\ntype CallerFactory = {\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => T,\n ): T;\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => unknown,\n ): SimpleType;\n};\ntype TargetsFunction = () => Targets;\ntype AssumptionFunction = (name: AssumptionName) => boolean | undefined;\n\nexport type ConfigAPI = {\n version: string;\n cache: SimpleCacheConfigurator;\n env: EnvFunction;\n async: () => boolean;\n assertVersion: typeof assertVersion;\n caller?: CallerFactory;\n};\n\nexport type PresetAPI = {\n targets: TargetsFunction;\n addExternalDependency: (ref: string) => void;\n} & ConfigAPI;\n\nexport type PluginAPI = {\n assumption: AssumptionFunction;\n} & PresetAPI;\n\nexport function makeConfigAPI(\n cache: CacheConfigurator,\n): ConfigAPI {\n // TODO(@nicolo-ribaudo): If we remove the explicit type from `value`\n // and the `as any` type cast, TypeScript crashes in an infinite\n // recursion. After upgrading to TS4.7 and finishing the noImplicitAny\n // PR, we should check if it still crashes and report it to the TS team.\n const env: EnvFunction = ((\n value: string | string[] | ((babelEnv: string) => T),\n ) =>\n cache.using(data => {\n if (value === undefined) return data.envName;\n if (typeof value === \"function\") {\n return assertSimpleType(value(data.envName));\n }\n return (Array.isArray(value) ? value : [value]).some(entry => {\n if (typeof entry !== \"string\") {\n throw new Error(\"Unexpected non-string value\");\n }\n return entry === data.envName;\n });\n })) as any;\n\n const caller = (\n cb: (CallerMetadata: CallerMetadata | undefined) => SimpleType,\n ) => cache.using(data => assertSimpleType(cb(data.caller)));\n\n return {\n version: coreVersion,\n cache: cache.simple(),\n // Expose \".env()\" so people can easily get the same env that we expose using the \"env\" key.\n env,\n async: () => false,\n caller,\n assertVersion,\n };\n}\n\nexport function makePresetAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PresetAPI {\n const targets = () =>\n // We are using JSON.parse/JSON.stringify because it's only possible to cache\n // primitive values. We can safely stringify the targets object because it\n // only contains strings as its properties.\n // Please make the Record and Tuple proposal happen!\n JSON.parse(cache.using(data => JSON.stringify(data.targets)));\n\n const addExternalDependency = (ref: string) => {\n externalDependencies.push(ref);\n };\n\n return { ...makeConfigAPI(cache), targets, addExternalDependency };\n}\n\nexport function makePluginAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PluginAPI {\n const assumption = (name: string) =>\n cache.using(data => data.assumptions[name]);\n\n return { ...makePresetAPI(cache, externalDependencies), assumption };\n}\n\nfunction assertVersion(range: string | number): void {\n if (typeof range === \"number\") {\n if (!Number.isInteger(range)) {\n throw new Error(\"Expected string or integer value.\");\n }\n range = `^${range}.0.0-0`;\n }\n if (typeof range !== \"string\") {\n throw new Error(\"Expected string or integer value.\");\n }\n\n // We want \"*\" to also allow any pre-release, but we do not pass\n // the includePrerelease option to semver.satisfies because we\n // do not want ^7.0.0 to match 8.0.0-alpha.1.\n if (range === \"*\" || semver.satisfies(coreVersion, range)) return;\n\n const limit = Error.stackTraceLimit;\n\n if (typeof limit === \"number\" && limit < 25) {\n // Bump up the limit if needed so that users are more likely\n // to be able to see what is calling Babel.\n Error.stackTraceLimit = 25;\n }\n\n const err = new Error(\n `Requires Babel \"${range}\", but was loaded with \"${coreVersion}\". ` +\n `If you are sure you have a compatible version of @babel/core, ` +\n `it is likely that something in your build process is loading the ` +\n `wrong version. Inspect the stack trace of this error to look for ` +\n `the first entry that doesn't mention \"@babel/core\" or \"babel-core\" ` +\n `to see what is calling Babel.`,\n );\n\n if (typeof limit === \"number\") {\n Error.stackTraceLimit = limit;\n }\n\n throw Object.assign(err, {\n code: \"BABEL_VERSION_UNSUPPORTED\",\n version: coreVersion,\n range,\n });\n}\n","export type DeepArray = Array>;\n\n// Just to make sure that DeepArray is not assignable to ReadonlyDeepArray\ndeclare const __marker: unique symbol;\nexport type ReadonlyDeepArray = ReadonlyArray> & {\n [__marker]: true;\n};\n\nexport function finalize(deepArr: DeepArray): ReadonlyDeepArray {\n return Object.freeze(deepArr) as ReadonlyDeepArray;\n}\n\nexport function flattenToSet(\n arr: ReadonlyDeepArray,\n): Set {\n const result = new Set();\n const stack = [arr];\n while (stack.length > 0) {\n for (const el of stack.pop()) {\n if (Array.isArray(el)) stack.push(el as ReadonlyDeepArray);\n else result.add(el as T);\n }\n }\n return result;\n}\n","export function getEnv(defaultValue: string = \"development\"): string {\n return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue;\n}\n","import gensync, { type Handler } from \"gensync\";\n\nexport type {\n ResolvedConfig,\n InputOptions,\n PluginPasses,\n Plugin,\n} from \"./full.ts\";\n\nimport type { InputOptions, PluginTarget } from \"./validation/options.ts\";\n\nimport type {\n PluginAPI as basePluginAPI,\n PresetAPI as basePresetAPI,\n} from \"./helpers/config-api.ts\";\nexport type { PluginObject } from \"./validation/plugins.ts\";\ntype PluginAPI = basePluginAPI & typeof import(\"..\");\ntype PresetAPI = basePresetAPI & typeof import(\"..\");\nexport type { PluginAPI, PresetAPI };\n// todo: may need to refine PresetObject to be a subset of ValidatedOptions\nexport type {\n CallerMetadata,\n ValidatedOptions as PresetObject,\n} from \"./validation/options.ts\";\n\nimport loadFullConfig, { type ResolvedConfig } from \"./full.ts\";\nimport {\n type PartialConfig,\n loadPartialConfig as loadPartialConfigImpl,\n} from \"./partial.ts\";\n\nexport { loadFullConfig as default };\nexport type { PartialConfig } from \"./partial.ts\";\n\nimport { createConfigItem as createConfigItemImpl } from \"./item.ts\";\nimport type { ConfigItem } from \"./item.ts\";\nexport type { ConfigItem };\n\nimport { beginHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\n\nconst loadPartialConfigRunner = gensync(loadPartialConfigImpl);\nexport function loadPartialConfigAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.async)(...args);\n}\nexport function loadPartialConfigSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.sync)(...args);\n}\nexport function loadPartialConfig(\n opts: Parameters[0],\n callback?: (err: Error, val: PartialConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(\n undefined,\n opts as (err: Error, val: PartialConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadPartialConfig' function expects a callback. If you need to call it synchronously, please use 'loadPartialConfigSync'.\",\n );\n } else {\n return loadPartialConfigSync(opts);\n }\n }\n}\n\nfunction* loadOptionsImpl(opts: InputOptions): Handler {\n const config = yield* loadFullConfig(opts);\n // NOTE: We want to return \"null\" explicitly, while ?. alone returns undefined\n return config?.options ?? null;\n}\nconst loadOptionsRunner = gensync(loadOptionsImpl);\nexport function loadOptionsAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.async)(...args);\n}\nexport function loadOptionsSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.sync)(...args);\n}\nexport function loadOptions(\n opts: Parameters[0],\n callback?: (err: Error, val: ResolvedConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadOptionsRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadOptionsRunner.errback)(\n undefined,\n opts as (err: Error, val: ResolvedConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadOptions' function expects a callback. If you need to call it synchronously, please use 'loadOptionsSync'.\",\n );\n } else {\n return loadOptionsSync(opts);\n }\n }\n}\n\nconst createConfigItemRunner = gensync(createConfigItemImpl);\nexport function createConfigItemAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.async)(...args);\n}\nexport function createConfigItemSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.sync)(...args);\n}\nexport function createConfigItem(\n target: PluginTarget,\n options: Parameters[1],\n callback?: (err: Error, val: ConfigItem | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n options,\n callback,\n );\n } else if (typeof options === \"function\") {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n undefined,\n callback,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'createConfigItem' function expects a callback. If you need to call it synchronously, please use 'createConfigItemSync'.\",\n );\n } else {\n return createConfigItemSync(target, options);\n }\n }\n}\n","import type { Handler } from \"gensync\";\nimport type { PluginTarget, PluginOptions } from \"./validation/options.ts\";\n\nimport path from \"path\";\nimport { createDescriptor } from \"./config-descriptors.ts\";\n\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\n\nexport function createItemFromDescriptor(\n desc: UnloadedDescriptor,\n): ConfigItem {\n return new ConfigItem(desc);\n}\n\n/**\n * Create a config item using the same value format used in Babel's config\n * files. Items returned from this function should be cached by the caller\n * ideally, as recreating the config item will mean re-resolving the item\n * and re-evaluating the plugin/preset function.\n */\nexport function* createConfigItem(\n value:\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void],\n {\n dirname = \".\",\n type,\n }: {\n dirname?: string;\n type?: \"preset\" | \"plugin\";\n } = {},\n): Handler> {\n const descriptor = yield* createDescriptor(value, path.resolve(dirname), {\n type,\n alias: \"programmatic item\",\n });\n\n return createItemFromDescriptor(descriptor);\n}\n\nconst CONFIG_ITEM_BRAND = Symbol.for(\"@babel/core@7 - ConfigItem\");\n\nexport function getItemDescriptor(\n item: unknown,\n): UnloadedDescriptor | void {\n if ((item as any)?.[CONFIG_ITEM_BRAND]) {\n return (item as ConfigItem)._descriptor;\n }\n\n return undefined;\n}\n\nexport type { ConfigItem };\n\n/**\n * A public representation of a plugin/preset that will _eventually_ be load.\n * Users can use this to interact with the results of a loaded Babel\n * configuration.\n *\n * Any changes to public properties of this class should be considered a\n * breaking change to Babel's API.\n */\nclass ConfigItem {\n /**\n * The private underlying descriptor that Babel actually cares about.\n * If you access this, you are a bad person.\n */\n _descriptor: UnloadedDescriptor;\n\n // TODO(Babel 9): Check if this symbol needs to be updated\n /**\n * Used to detect ConfigItem instances from other Babel instances.\n */\n [CONFIG_ITEM_BRAND] = true;\n\n /**\n * The resolved value of the item itself.\n */\n value: object | Function;\n\n /**\n * The options, if any, that were passed to the item.\n * Mutating this will lead to undefined behavior.\n *\n * \"false\" means that this item has been disabled.\n */\n options: object | void | false;\n\n /**\n * The directory that the options for this item are relative to.\n */\n dirname: string;\n\n /**\n * Get the name of the plugin, if the user gave it one.\n */\n name: string | void;\n\n /**\n * Data about the file that the item was loaded from, if Babel knows it.\n */\n file: {\n // The requested path, e.g. \"@babel/env\".\n request: string;\n // The resolved absolute path of the file.\n resolved: string;\n } | void;\n\n constructor(descriptor: UnloadedDescriptor) {\n // Make people less likely to stumble onto this if they are exploring\n // programmatically, and also make sure that if people happen to\n // pass the item through JSON.stringify, it doesn't show up.\n this._descriptor = descriptor;\n Object.defineProperty(this, \"_descriptor\", { enumerable: false });\n\n Object.defineProperty(this, CONFIG_ITEM_BRAND, { enumerable: false });\n\n this.value = this._descriptor.value;\n this.options = this._descriptor.options;\n this.dirname = this._descriptor.dirname;\n this.name = this._descriptor.name;\n this.file = this._descriptor.file\n ? {\n request: this._descriptor.file.request,\n resolved: this._descriptor.file.resolved,\n }\n : undefined;\n\n // Freeze the object to make it clear that people shouldn't expect mutating\n // this object to do anything. A new item should be created if they want\n // to change something.\n Object.freeze(this);\n }\n}\n\nObject.freeze(ConfigItem.prototype);\n","import path from \"path\";\nimport type { Handler } from \"gensync\";\nimport Plugin from \"./plugin.ts\";\nimport { mergeOptions } from \"./util.ts\";\nimport { createItemFromDescriptor } from \"./item.ts\";\nimport { buildRootChain } from \"./config-chain.ts\";\nimport type { ConfigContext, FileHandling } from \"./config-chain.ts\";\nimport { getEnv } from \"./helpers/environment.ts\";\nimport { validate } from \"./validation/options.ts\";\n\nimport type {\n ValidatedOptions,\n NormalizedOptions,\n RootMode,\n InputOptions,\n} from \"./validation/options.ts\";\n\nimport {\n findConfigUpwards,\n resolveShowConfigPath,\n ROOT_CONFIG_FILENAMES,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile } from \"./files/index.ts\";\nimport { resolveTargets } from \"./resolve-targets.ts\";\n\nfunction resolveRootMode(rootDir: string, rootMode: RootMode): string {\n switch (rootMode) {\n case \"root\":\n return rootDir;\n\n case \"upward-optional\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n return upwardRootDir === null ? rootDir : upwardRootDir;\n }\n\n case \"upward\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n if (upwardRootDir !== null) return upwardRootDir;\n\n throw Object.assign(\n new Error(\n `Babel was run with rootMode:\"upward\" but a root could not ` +\n `be found when searching upward from \"${rootDir}\".\\n` +\n `One of the following config files must be in the directory tree: ` +\n `\"${ROOT_CONFIG_FILENAMES.join(\", \")}\".`,\n ) as any,\n {\n code: \"BABEL_ROOT_NOT_FOUND\",\n dirname: rootDir,\n },\n );\n }\n default:\n throw new Error(`Assertion failure - unknown rootMode value.`);\n }\n}\n\nexport type PrivPartialConfig = {\n showIgnoredFiles?: boolean;\n options: NormalizedOptions;\n context: ConfigContext;\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\nexport default function* loadPrivatePartialConfig(\n inputOpts: InputOptions,\n): Handler {\n if (\n inputOpts != null &&\n (typeof inputOpts !== \"object\" || Array.isArray(inputOpts))\n ) {\n throw new Error(\"Babel options must be an object, null, or undefined\");\n }\n\n const args = inputOpts ? validate(\"arguments\", inputOpts) : {};\n\n const {\n envName = getEnv(),\n cwd = \".\",\n root: rootDir = \".\",\n rootMode = \"root\",\n caller,\n cloneInputAst = true,\n } = args;\n const absoluteCwd = path.resolve(cwd);\n const absoluteRootDir = resolveRootMode(\n path.resolve(absoluteCwd, rootDir),\n rootMode,\n );\n\n const filename =\n typeof args.filename === \"string\"\n ? path.resolve(cwd, args.filename)\n : undefined;\n\n const showConfigPath = yield* resolveShowConfigPath(absoluteCwd);\n\n const context: ConfigContext = {\n filename,\n cwd: absoluteCwd,\n root: absoluteRootDir,\n envName,\n caller,\n showConfig: showConfigPath === filename,\n };\n\n const configChain = yield* buildRootChain(args, context);\n if (!configChain) return null;\n\n const merged: ValidatedOptions = {\n assumptions: {},\n };\n configChain.options.forEach(opts => {\n mergeOptions(merged as any, opts);\n });\n\n const options: NormalizedOptions = {\n ...merged,\n targets: resolveTargets(merged, absoluteRootDir),\n\n // Tack the passes onto the object itself so that, if this object is\n // passed back to Babel a second time, it will be in the right structure\n // to not change behavior.\n cloneInputAst,\n babelrc: false,\n configFile: false,\n browserslistConfigFile: false,\n passPerPreset: false,\n envName: context.envName,\n cwd: context.cwd,\n root: context.root,\n rootMode: \"root\",\n filename:\n typeof context.filename === \"string\" ? context.filename : undefined,\n\n plugins: configChain.plugins.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n presets: configChain.presets.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n };\n\n return {\n options,\n context,\n fileHandling: configChain.fileHandling,\n ignore: configChain.ignore,\n babelrc: configChain.babelrc,\n config: configChain.config,\n files: configChain.files,\n };\n}\n\nexport function* loadPartialConfig(\n opts?: InputOptions,\n): Handler {\n let showIgnoredFiles = false;\n // We only extract showIgnoredFiles if opts is an object, so that\n // loadPrivatePartialConfig can throw the appropriate error if it's not.\n if (typeof opts === \"object\" && opts !== null && !Array.isArray(opts)) {\n ({ showIgnoredFiles, ...opts } = opts);\n }\n\n const result: PrivPartialConfig | undefined | null =\n yield* loadPrivatePartialConfig(opts);\n if (!result) return null;\n\n const { options, babelrc, ignore, config, fileHandling, files } = result;\n\n if (fileHandling === \"ignored\" && !showIgnoredFiles) {\n return null;\n }\n\n (options.plugins || []).forEach(item => {\n // @ts-expect-error todo(flow->ts): better type annotation for `item.value`\n if (item.value instanceof Plugin) {\n throw new Error(\n \"Passing cached plugin instances is not supported in \" +\n \"babel.loadPartialConfig()\",\n );\n }\n });\n\n return new PartialConfig(\n options,\n babelrc ? babelrc.filepath : undefined,\n ignore ? ignore.filepath : undefined,\n config ? config.filepath : undefined,\n fileHandling,\n files,\n );\n}\n\nexport type { PartialConfig };\n\nclass PartialConfig {\n /**\n * These properties are public, so any changes to them should be considered\n * a breaking change to Babel's API.\n */\n options: NormalizedOptions;\n babelrc: string | void;\n babelignore: string | void;\n config: string | void;\n fileHandling: FileHandling;\n files: Set;\n\n constructor(\n options: NormalizedOptions,\n babelrc: string | void,\n ignore: string | void,\n config: string | void,\n fileHandling: FileHandling,\n files: Set,\n ) {\n this.options = options;\n this.babelignore = ignore;\n this.babelrc = babelrc;\n this.config = config;\n this.fileHandling = fileHandling;\n this.files = files;\n\n // Freeze since this is a public API and it should be extremely obvious that\n // reassigning properties on here does nothing.\n Object.freeze(this);\n }\n\n /**\n * Returns true if there is a config file in the filesystem for this config.\n */\n hasFilesystemConfig(): boolean {\n return this.babelrc !== undefined || this.config !== undefined;\n }\n}\nObject.freeze(PartialConfig.prototype);\n","import path from \"path\";\n\nconst sep = `\\\\${path.sep}`;\nconst endSep = `(?:${sep}|$)`;\n\nconst substitution = `[^${sep}]+`;\n\nconst starPat = `(?:${substitution}${sep})`;\nconst starPatLast = `(?:${substitution}${endSep})`;\n\nconst starStarPat = `${starPat}*?`;\nconst starStarPatLast = `${starPat}*?${starPatLast}?`;\n\nfunction escapeRegExp(string: string) {\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n}\n\n/**\n * Implement basic pattern matching that will allow users to do the simple\n * tests with * and **. If users want full complex pattern matching, then can\n * always use regex matching, or function validation.\n */\nexport default function pathToPattern(\n pattern: string,\n dirname: string,\n): RegExp {\n const parts = path.resolve(dirname, pattern).split(path.sep);\n\n return new RegExp(\n [\n \"^\",\n ...parts.map((part, i) => {\n const last = i === parts.length - 1;\n\n // ** matches 0 or more path parts.\n if (part === \"**\") return last ? starStarPatLast : starStarPat;\n\n // * matches 1 path part.\n if (part === \"*\") return last ? starPatLast : starPat;\n\n // *.ext matches a wildcard with an extension.\n if (part.indexOf(\"*.\") === 0) {\n return (\n substitution + escapeRegExp(part.slice(1)) + (last ? endSep : sep)\n );\n }\n\n // Otherwise match the pattern text.\n return escapeRegExp(part) + (last ? endSep : sep);\n }),\n ].join(\"\"),\n );\n}\n","import { finalize } from \"./helpers/deep-array.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type { PluginObject } from \"./validation/plugins.ts\";\n\nexport default class Plugin {\n key: string | undefined | null;\n manipulateOptions?: (options: unknown, parserOpts: unknown) => void;\n post?: PluginObject[\"post\"];\n pre?: PluginObject[\"pre\"];\n visitor: PluginObject[\"visitor\"];\n\n parserOverride?: Function;\n generatorOverride?: Function;\n\n options: object;\n\n externalDependencies: ReadonlyDeepArray;\n\n constructor(\n plugin: PluginObject,\n options: object,\n key?: string,\n externalDependencies: ReadonlyDeepArray = finalize([]),\n ) {\n this.key = plugin.name || key;\n\n this.manipulateOptions = plugin.manipulateOptions;\n this.post = plugin.post;\n this.pre = plugin.pre;\n this.visitor = plugin.visitor || {};\n this.parserOverride = plugin.parserOverride;\n this.generatorOverride = plugin.generatorOverride;\n\n this.options = options;\n this.externalDependencies = externalDependencies;\n }\n}\n","import gensync from \"gensync\";\n\nimport type { Handler } from \"gensync\";\n\nimport type {\n OptionsAndDescriptors,\n UnloadedDescriptor,\n} from \"./config-descriptors.ts\";\n\n// todo: Use flow enums when @babel/transform-flow-types supports it\nexport const ChainFormatter = {\n Programmatic: 0,\n Config: 1,\n};\n\ntype PrintableConfig = {\n content: OptionsAndDescriptors;\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter];\n callerName: string | undefined | null;\n filepath: string | undefined | null;\n index: number | undefined | null;\n envName: string | undefined | null;\n};\n\nconst Formatter = {\n title(\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n callerName?: string | null,\n filepath?: string | null,\n ): string {\n let title = \"\";\n if (type === ChainFormatter.Programmatic) {\n title = \"programmatic options\";\n if (callerName) {\n title += \" from \" + callerName;\n }\n } else {\n title = \"config \" + filepath;\n }\n return title;\n },\n loc(index?: number | null, envName?: string | null): string {\n let loc = \"\";\n if (index != null) {\n loc += `.overrides[${index}]`;\n }\n if (envName != null) {\n loc += `.env[\"${envName}\"]`;\n }\n return loc;\n },\n\n *optionsAndDescriptors(opt: OptionsAndDescriptors) {\n const content = { ...opt.options };\n // overrides and env will be printed as separated config items\n delete content.overrides;\n delete content.env;\n // resolve to descriptors\n const pluginDescriptors = [...(yield* opt.plugins())];\n if (pluginDescriptors.length) {\n content.plugins = pluginDescriptors.map(d => descriptorToConfig(d));\n }\n const presetDescriptors = [...(yield* opt.presets())];\n if (presetDescriptors.length) {\n content.presets = [...presetDescriptors].map(d => descriptorToConfig(d));\n }\n return JSON.stringify(content, undefined, 2);\n },\n};\n\nfunction descriptorToConfig(\n d: UnloadedDescriptor,\n): object | string | [string, unknown] | [string, unknown, string] {\n let name: object | string = d.file?.request;\n if (name == null) {\n if (typeof d.value === \"object\") {\n name = d.value;\n } else if (typeof d.value === \"function\") {\n // If the unloaded descriptor is a function, i.e. `plugins: [ require(\"my-plugin\") ]`,\n // we print the first 50 characters of the function source code and hopefully we can see\n // `name: 'my-plugin'` in the source\n name = `[Function: ${d.value.toString().slice(0, 50)} ... ]`;\n }\n }\n if (name == null) {\n name = \"[Unknown]\";\n }\n if (d.options === undefined) {\n return name;\n } else if (d.name == null) {\n return [name, d.options];\n } else {\n return [name, d.options, d.name];\n }\n}\n\nexport class ConfigPrinter {\n _stack: Array = [];\n configure(\n enabled: boolean,\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n {\n callerName,\n filepath,\n }: {\n callerName?: string;\n filepath?: string;\n },\n ) {\n if (!enabled) return () => {};\n return (\n content: OptionsAndDescriptors,\n index?: number | null,\n envName?: string | null,\n ) => {\n this._stack.push({\n type,\n callerName,\n filepath,\n content,\n index,\n envName,\n });\n };\n }\n static *format(config: PrintableConfig): Handler {\n let title = Formatter.title(\n config.type,\n config.callerName,\n config.filepath,\n );\n const loc = Formatter.loc(config.index, config.envName);\n if (loc) title += ` ${loc}`;\n const content = yield* Formatter.optionsAndDescriptors(config.content);\n return `${title}\\n${content}`;\n }\n\n *output(): Handler {\n if (this._stack.length === 0) return \"\";\n const configs = yield* gensync.all(\n this._stack.map(s => ConfigPrinter.format(s)),\n );\n return configs.join(\"\\n\\n\");\n }\n}\n","import type { ValidatedOptions } from \"./validation/options.ts\";\nimport getTargets, {\n type InputTargets,\n} from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nexport function resolveBrowserslistConfigFile(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n browserslistConfigFile: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n configFilePath: string,\n): string | void {\n return undefined;\n}\n\nexport function resolveTargets(\n options: ValidatedOptions,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n root: string,\n): Targets {\n const optTargets = options.targets;\n let targets: InputTargets;\n\n if (typeof optTargets === \"string\" || Array.isArray(optTargets)) {\n targets = { browsers: optTargets };\n } else if (optTargets) {\n if (\"esmodules\" in optTargets) {\n targets = { ...optTargets, esmodules: \"intersect\" };\n } else {\n // https://github.com/microsoft/TypeScript/issues/17002\n targets = optTargets as InputTargets;\n }\n }\n\n return getTargets(targets, {\n ignoreBrowserslistConfig: true,\n browserslistEnv: options.browserslistEnv,\n });\n}\n","import type {\n ValidatedOptions,\n NormalizedOptions,\n} from \"./validation/options.ts\";\n\nexport function mergeOptions(\n target: ValidatedOptions,\n source: ValidatedOptions | NormalizedOptions,\n): void {\n for (const k of Object.keys(source)) {\n if (\n (k === \"parserOpts\" || k === \"generatorOpts\" || k === \"assumptions\") &&\n source[k]\n ) {\n const parserOpts = source[k];\n const targetObj = target[k] || (target[k] = {});\n mergeDefaultFields(targetObj, parserOpts);\n } else {\n //@ts-expect-error k must index source\n const val = source[k];\n //@ts-expect-error assigning source to target\n if (val !== undefined) target[k] = val as any;\n }\n }\n}\n\nfunction mergeDefaultFields(target: T, source: T) {\n for (const k of Object.keys(source) as (keyof T)[]) {\n const val = source[k];\n if (val !== undefined) target[k] = val;\n }\n}\n\nexport function isIterableIterator(value: any): value is IterableIterator {\n return (\n !!value &&\n typeof value.next === \"function\" &&\n typeof value[Symbol.iterator] === \"function\"\n );\n}\n","import {\n isBrowsersQueryValid,\n TargetNames,\n} from \"@babel/helper-compilation-targets\";\n\nimport type {\n ConfigFileSearch,\n BabelrcSearch,\n IgnoreList,\n IgnoreItem,\n PluginList,\n PluginItem,\n PluginTarget,\n ConfigApplicableTest,\n SourceMapsOption,\n SourceTypeOption,\n CompactOption,\n RootInputSourceMapOption,\n NestingPath,\n CallerMetadata,\n RootMode,\n TargetsListOrObject,\n AssumptionName,\n} from \"./options.ts\";\n\nimport { assumptionsNames } from \"./options.ts\";\n\nexport type { RootPath } from \"./options.ts\";\n\nexport type ValidatorSet = {\n [name: string]: Validator;\n};\n\nexport type Validator = (loc: OptionPath, value: unknown) => T;\n\nexport function msg(loc: NestingPath | GeneralPath): string {\n switch (loc.type) {\n case \"root\":\n return ``;\n case \"env\":\n return `${msg(loc.parent)}.env[\"${loc.name}\"]`;\n case \"overrides\":\n return `${msg(loc.parent)}.overrides[${loc.index}]`;\n case \"option\":\n return `${msg(loc.parent)}.${loc.name}`;\n case \"access\":\n return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`;\n default:\n // @ts-expect-error should not happen when code is type checked\n throw new Error(`Assertion failure: Unknown type ${loc.type}`);\n }\n}\n\nexport function access(loc: GeneralPath, name: string | number): AccessPath {\n return {\n type: \"access\",\n name,\n parent: loc,\n };\n}\n\nexport type OptionPath = Readonly<{\n type: \"option\";\n name: string;\n parent: NestingPath;\n}>;\ntype AccessPath = Readonly<{\n type: \"access\";\n name: string | number;\n parent: GeneralPath;\n}>;\ntype GeneralPath = OptionPath | AccessPath;\n\nexport function assertRootMode(\n loc: OptionPath,\n value: unknown,\n): RootMode | void {\n if (\n value !== undefined &&\n value !== \"root\" &&\n value !== \"upward\" &&\n value !== \"upward-optional\"\n ) {\n throw new Error(\n `${msg(loc)} must be a \"root\", \"upward\", \"upward-optional\" or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceMaps(\n loc: OptionPath,\n value: unknown,\n): SourceMapsOption | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n value !== \"inline\" &&\n value !== \"both\"\n ) {\n throw new Error(\n `${msg(loc)} must be a boolean, \"inline\", \"both\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCompact(\n loc: OptionPath,\n value: unknown,\n): CompactOption | void {\n if (value !== undefined && typeof value !== \"boolean\" && value !== \"auto\") {\n throw new Error(`${msg(loc)} must be a boolean, \"auto\", or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceType(\n loc: OptionPath,\n value: unknown,\n): SourceTypeOption | void {\n if (\n value !== undefined &&\n value !== \"module\" &&\n value !== \"script\" &&\n value !== \"unambiguous\"\n ) {\n throw new Error(\n `${msg(loc)} must be \"module\", \"script\", \"unambiguous\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCallerMetadata(\n loc: OptionPath,\n value: unknown,\n): CallerMetadata | undefined {\n const obj = assertObject(loc, value);\n if (obj) {\n if (typeof obj.name !== \"string\") {\n throw new Error(\n `${msg(loc)} set but does not contain \"name\" property string`,\n );\n }\n\n for (const prop of Object.keys(obj)) {\n const propLoc = access(loc, prop);\n const value = obj[prop];\n if (\n value != null &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n typeof value !== \"number\"\n ) {\n // NOTE(logan): I'm limiting the type here so that we can guarantee that\n // the \"caller\" value will serialize to JSON nicely. We can always\n // allow more complex structures later though.\n throw new Error(\n `${msg(\n propLoc,\n )} must be null, undefined, a boolean, a string, or a number.`,\n );\n }\n }\n }\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n\nexport function assertInputSourceMap(\n loc: OptionPath,\n value: unknown,\n): RootInputSourceMapOption {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n (typeof value !== \"object\" || !value)\n ) {\n throw new Error(`${msg(loc)} must be a boolean, object, or undefined`);\n }\n return value as RootInputSourceMapOption;\n}\n\nexport function assertString(loc: GeneralPath, value: unknown): string | void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`${msg(loc)} must be a string, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertFunction(\n loc: GeneralPath,\n value: unknown,\n): Function | void {\n if (value !== undefined && typeof value !== \"function\") {\n throw new Error(`${msg(loc)} must be a function, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBoolean(\n loc: GeneralPath,\n value: unknown,\n): boolean | void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new Error(`${msg(loc)} must be a boolean, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertObject(\n loc: GeneralPath,\n value: unknown,\n): { readonly [key: string]: unknown } | void {\n if (\n value !== undefined &&\n (typeof value !== \"object\" || Array.isArray(value) || !value)\n ) {\n throw new Error(`${msg(loc)} must be an object, or undefined`);\n }\n // @ts-expect-error todo(flow->ts) value is still typed as unknown, also assert function typically should not return a value\n return value;\n}\n\nexport function assertArray(\n loc: GeneralPath,\n value: Array | undefined | null,\n): ReadonlyArray | undefined | null {\n if (value != null && !Array.isArray(value)) {\n throw new Error(`${msg(loc)} must be an array, or undefined`);\n }\n return value;\n}\n\nexport function assertIgnoreList(\n loc: OptionPath,\n value: unknown[] | undefined,\n): IgnoreList | void {\n const arr = assertArray(loc, value);\n arr?.forEach((item, i) => assertIgnoreItem(access(loc, i), item));\n // @ts-expect-error todo(flow->ts)\n return arr;\n}\nfunction assertIgnoreItem(loc: GeneralPath, value: unknown): IgnoreItem {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"function\" &&\n !(value instanceof RegExp)\n ) {\n throw new Error(\n `${msg(\n loc,\n )} must be an array of string/Function/RegExp values, or undefined`,\n );\n }\n return value as IgnoreItem;\n}\n\nexport function assertConfigApplicableTest(\n loc: OptionPath,\n value: unknown,\n): ConfigApplicableTest | void {\n if (value === undefined) {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a string/Function/RegExp, or an array of those`,\n );\n }\n return value as ConfigApplicableTest;\n}\n\nfunction checkValidTest(value: unknown): value is string | Function | RegExp {\n return (\n typeof value === \"string\" ||\n typeof value === \"function\" ||\n value instanceof RegExp\n );\n}\n\nexport function assertConfigFileSearch(\n loc: OptionPath,\n value: unknown,\n): ConfigFileSearch | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\"\n ) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string, ` +\n `got ${JSON.stringify(value)}`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBabelrcSearch(\n loc: OptionPath,\n value: unknown,\n): BabelrcSearch | void {\n if (value === undefined || typeof value === \"boolean\") {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` +\n `or an array of those, got ${JSON.stringify(value as any)}`,\n );\n }\n return value as BabelrcSearch;\n}\n\nexport function assertPluginList(\n loc: OptionPath,\n value: unknown[] | null | undefined,\n): PluginList | void {\n const arr = assertArray(loc, value);\n if (arr) {\n // Loop instead of using `.map` in order to preserve object identity\n // for plugin array for use during config chain processing.\n arr.forEach((item, i) => assertPluginItem(access(loc, i), item));\n }\n return arr as any;\n}\nfunction assertPluginItem(loc: GeneralPath, value: unknown): PluginItem {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n throw new Error(`${msg(loc)} must include an object`);\n }\n\n if (value.length > 3) {\n throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`);\n }\n\n assertPluginTarget(access(loc, 0), value[0]);\n\n if (value.length > 1) {\n const opts = value[1];\n if (\n opts !== undefined &&\n opts !== false &&\n (typeof opts !== \"object\" || Array.isArray(opts) || opts === null)\n ) {\n throw new Error(\n `${msg(access(loc, 1))} must be an object, false, or undefined`,\n );\n }\n }\n if (value.length === 3) {\n const name = value[2];\n if (name !== undefined && typeof name !== \"string\") {\n throw new Error(\n `${msg(access(loc, 2))} must be a string, or undefined`,\n );\n }\n }\n } else {\n assertPluginTarget(loc, value);\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\nfunction assertPluginTarget(loc: GeneralPath, value: unknown): PluginTarget {\n if (\n (typeof value !== \"object\" || !value) &&\n typeof value !== \"string\" &&\n typeof value !== \"function\"\n ) {\n throw new Error(`${msg(loc)} must be a string, object, function`);\n }\n return value;\n}\n\nexport function assertTargets(\n loc: GeneralPath,\n value: any,\n): TargetsListOrObject {\n if (isBrowsersQueryValid(value)) return value;\n\n if (typeof value !== \"object\" || !value || Array.isArray(value)) {\n throw new Error(\n `${msg(loc)} must be a string, an array of strings or an object`,\n );\n }\n\n const browsersLoc = access(loc, \"browsers\");\n const esmodulesLoc = access(loc, \"esmodules\");\n\n assertBrowsersList(browsersLoc, value.browsers);\n assertBoolean(esmodulesLoc, value.esmodules);\n\n for (const key of Object.keys(value)) {\n const val = value[key];\n const subLoc = access(loc, key);\n\n if (key === \"esmodules\") assertBoolean(subLoc, val);\n else if (key === \"browsers\") assertBrowsersList(subLoc, val);\n else if (!Object.hasOwn(TargetNames, key)) {\n const validTargets = Object.keys(TargetNames).join(\", \");\n throw new Error(\n `${msg(\n subLoc,\n )} is not a valid target. Supported targets are ${validTargets}`,\n );\n } else assertBrowserVersion(subLoc, val);\n }\n\n return value;\n}\n\nfunction assertBrowsersList(loc: GeneralPath, value: unknown) {\n if (value !== undefined && !isBrowsersQueryValid(value)) {\n throw new Error(\n `${msg(loc)} must be undefined, a string or an array of strings`,\n );\n }\n}\n\nfunction assertBrowserVersion(loc: GeneralPath, value: unknown) {\n if (typeof value === \"number\" && Math.round(value) === value) return;\n if (typeof value === \"string\") return;\n\n throw new Error(`${msg(loc)} must be a string or an integer number`);\n}\n\nexport function assertAssumptions(\n loc: GeneralPath,\n value: { [key: string]: unknown },\n): { [name: string]: boolean } | void {\n if (value === undefined) return;\n\n if (typeof value !== \"object\" || value === null) {\n throw new Error(`${msg(loc)} must be an object or undefined.`);\n }\n\n // todo(flow->ts): remove any\n let root: any = loc;\n do {\n root = root.parent;\n } while (root.type !== \"root\");\n const inPreset = root.source === \"preset\";\n\n for (const name of Object.keys(value)) {\n const subLoc = access(loc, name);\n if (!assumptionsNames.has(name as AssumptionName)) {\n throw new Error(`${msg(subLoc)} is not a supported assumption.`);\n }\n if (typeof value[name] !== \"boolean\") {\n throw new Error(`${msg(subLoc)} must be a boolean.`);\n }\n if (inPreset && value[name] === false) {\n throw new Error(\n `${msg(subLoc)} cannot be set to 'false' inside presets.`,\n );\n }\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n","import type { InputTargets, Targets } from \"@babel/helper-compilation-targets\";\n\nimport type { ConfigItem } from \"../item.ts\";\nimport type Plugin from \"../plugin.ts\";\n\nimport removed from \"./removed.ts\";\nimport {\n msg,\n access,\n assertString,\n assertBoolean,\n assertObject,\n assertArray,\n assertCallerMetadata,\n assertInputSourceMap,\n assertIgnoreList,\n assertPluginList,\n assertConfigApplicableTest,\n assertConfigFileSearch,\n assertBabelrcSearch,\n assertFunction,\n assertRootMode,\n assertSourceMaps,\n assertCompact,\n assertSourceType,\n assertTargets,\n assertAssumptions,\n} from \"./option-assertions.ts\";\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n} from \"./option-assertions.ts\";\nimport type { UnloadedDescriptor } from \"../config-descriptors.ts\";\nimport type { PluginAPI } from \"../helpers/config-api.ts\";\nimport type { ParserOptions } from \"@babel/parser\";\nimport type { GeneratorOptions } from \"@babel/generator\";\nimport ConfigError from \"../../errors/config-error.ts\";\n\nconst ROOT_VALIDATORS: ValidatorSet = {\n cwd: assertString as Validator,\n root: assertString as Validator,\n rootMode: assertRootMode as Validator,\n configFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"configFile\"]\n >,\n\n caller: assertCallerMetadata as Validator,\n filename: assertString as Validator,\n filenameRelative: assertString as Validator<\n ValidatedOptions[\"filenameRelative\"]\n >,\n code: assertBoolean as Validator,\n ast: assertBoolean as Validator,\n\n cloneInputAst: assertBoolean as Validator,\n\n envName: assertString as Validator,\n};\n\nconst BABELRC_VALIDATORS: ValidatorSet = {\n babelrc: assertBoolean as Validator,\n babelrcRoots: assertBabelrcSearch as Validator<\n ValidatedOptions[\"babelrcRoots\"]\n >,\n};\n\nconst NONPRESET_VALIDATORS: ValidatorSet = {\n extends: assertString as Validator,\n ignore: assertIgnoreList as Validator,\n only: assertIgnoreList as Validator,\n\n targets: assertTargets as Validator,\n browserslistConfigFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"browserslistConfigFile\"]\n >,\n browserslistEnv: assertString as Validator<\n ValidatedOptions[\"browserslistEnv\"]\n >,\n};\n\nconst COMMON_VALIDATORS: ValidatorSet = {\n // TODO: Should 'inputSourceMap' be moved to be a root-only option?\n // We may want a boolean-only version to be a common option, with the\n // object only allowed as a root config argument.\n inputSourceMap: assertInputSourceMap as Validator<\n ValidatedOptions[\"inputSourceMap\"]\n >,\n presets: assertPluginList as Validator,\n plugins: assertPluginList as Validator,\n passPerPreset: assertBoolean as Validator,\n assumptions: assertAssumptions as Validator,\n\n env: assertEnvSet as Validator,\n overrides: assertOverridesList as Validator,\n\n // We could limit these to 'overrides' blocks, but it's not clear why we'd\n // bother, when the ability to limit a config to a specific set of files\n // is a fairly general useful feature.\n test: assertConfigApplicableTest as Validator,\n include: assertConfigApplicableTest as Validator,\n exclude: assertConfigApplicableTest as Validator,\n\n retainLines: assertBoolean as Validator,\n comments: assertBoolean as Validator,\n shouldPrintComment: assertFunction as Validator<\n ValidatedOptions[\"shouldPrintComment\"]\n >,\n compact: assertCompact as Validator,\n minified: assertBoolean as Validator,\n auxiliaryCommentBefore: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentBefore\"]\n >,\n auxiliaryCommentAfter: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentAfter\"]\n >,\n sourceType: assertSourceType as Validator,\n wrapPluginVisitorMethod: assertFunction as Validator<\n ValidatedOptions[\"wrapPluginVisitorMethod\"]\n >,\n highlightCode: assertBoolean as Validator,\n sourceMaps: assertSourceMaps as Validator,\n sourceMap: assertSourceMaps as Validator,\n sourceFileName: assertString as Validator,\n sourceRoot: assertString as Validator,\n parserOpts: assertObject as Validator,\n generatorOpts: assertObject as Validator,\n};\nif (!process.env.BABEL_8_BREAKING) {\n Object.assign(COMMON_VALIDATORS, {\n getModuleId: assertFunction,\n moduleRoot: assertString,\n moduleIds: assertBoolean,\n moduleId: assertString,\n });\n}\n\nexport type InputOptions = ValidatedOptions;\n\nexport type ValidatedOptions = {\n cwd?: string;\n filename?: string;\n filenameRelative?: string;\n babelrc?: boolean;\n babelrcRoots?: BabelrcSearch;\n configFile?: ConfigFileSearch;\n root?: string;\n rootMode?: RootMode;\n code?: boolean;\n ast?: boolean;\n cloneInputAst?: boolean;\n inputSourceMap?: RootInputSourceMapOption;\n envName?: string;\n caller?: CallerMetadata;\n extends?: string;\n env?: EnvSet;\n ignore?: IgnoreList;\n only?: IgnoreList;\n overrides?: OverridesList;\n showIgnoredFiles?: boolean;\n // Generally verify if a given config object should be applied to the given file.\n test?: ConfigApplicableTest;\n include?: ConfigApplicableTest;\n exclude?: ConfigApplicableTest;\n presets?: PluginList;\n plugins?: PluginList;\n passPerPreset?: boolean;\n assumptions?: {\n [name: string]: boolean;\n };\n // browserslists-related options\n targets?: TargetsListOrObject;\n browserslistConfigFile?: ConfigFileSearch;\n browserslistEnv?: string;\n // Options for @babel/generator\n retainLines?: boolean;\n comments?: boolean;\n shouldPrintComment?: Function;\n compact?: CompactOption;\n minified?: boolean;\n auxiliaryCommentBefore?: string;\n auxiliaryCommentAfter?: string;\n // Parser\n sourceType?: SourceTypeOption;\n wrapPluginVisitorMethod?: Function;\n highlightCode?: boolean;\n // Sourcemap generation options.\n sourceMaps?: SourceMapsOption;\n sourceMap?: SourceMapsOption;\n sourceFileName?: string;\n sourceRoot?: string;\n // Deprecate top level parserOpts\n parserOpts?: ParserOptions;\n // Deprecate top level generatorOpts\n generatorOpts?: GeneratorOptions;\n};\n\nexport type NormalizedOptions = {\n readonly targets: Targets;\n} & Omit;\n\nexport type CallerMetadata = {\n // If 'caller' is specified, require that the name is given for debugging\n // messages.\n name: string;\n};\nexport type EnvSet = {\n [x: string]: T;\n};\nexport type IgnoreItem =\n | string\n | RegExp\n | ((\n path: string | undefined,\n context: { dirname: string; caller: CallerMetadata; envName: string },\n ) => unknown);\nexport type IgnoreList = ReadonlyArray;\n\nexport type PluginOptions = object | void | false;\nexport type PluginTarget = string | object | Function;\nexport type PluginItem =\n | ConfigItem\n | Plugin\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void];\nexport type PluginList = ReadonlyArray;\n\nexport type OverridesList = Array;\nexport type ConfigApplicableTest = IgnoreItem | Array;\n\nexport type ConfigFileSearch = string | boolean;\nexport type BabelrcSearch = boolean | IgnoreItem | IgnoreList;\nexport type SourceMapsOption = boolean | \"inline\" | \"both\";\nexport type SourceTypeOption = \"module\" | \"script\" | \"unambiguous\";\nexport type CompactOption = boolean | \"auto\";\nexport type RootInputSourceMapOption = object | boolean;\nexport type RootMode = \"root\" | \"upward\" | \"upward-optional\";\n\nexport type TargetsListOrObject =\n | Targets\n | InputTargets\n | InputTargets[\"browsers\"];\n\nexport type OptionsSource =\n | \"arguments\"\n | \"configfile\"\n | \"babelrcfile\"\n | \"extendsfile\"\n | \"preset\"\n | \"plugin\";\n\nexport type RootPath = Readonly<{\n type: \"root\";\n source: OptionsSource;\n}>;\n\ntype OverridesPath = Readonly<{\n type: \"overrides\";\n index: number;\n parent: RootPath;\n}>;\n\ntype EnvPath = Readonly<{\n type: \"env\";\n name: string;\n parent: RootPath | OverridesPath;\n}>;\n\nexport type NestingPath = RootPath | OverridesPath | EnvPath;\n\nconst knownAssumptions = [\n \"arrayLikeIsIterable\",\n \"constantReexports\",\n \"constantSuper\",\n \"enumerableModuleMeta\",\n \"ignoreFunctionLength\",\n \"ignoreToPrimitiveHint\",\n \"iterableIsArray\",\n \"mutableTemplateObject\",\n \"noClassCalls\",\n \"noDocumentAll\",\n \"noIncompleteNsImportDetection\",\n \"noNewArrows\",\n \"noUninitializedPrivateFieldAccess\",\n \"objectRestNoSymbols\",\n \"privateFieldsAsSymbols\",\n \"privateFieldsAsProperties\",\n \"pureGetters\",\n \"setClassMethods\",\n \"setComputedProperties\",\n \"setPublicClassFields\",\n \"setSpreadProperties\",\n \"skipForOfIteratorClosing\",\n \"superIsCallableConstructor\",\n] as const;\nexport type AssumptionName = (typeof knownAssumptions)[number];\nexport const assumptionsNames = new Set(knownAssumptions);\n\nfunction getSource(loc: NestingPath): OptionsSource {\n return loc.type === \"root\" ? loc.source : getSource(loc.parent);\n}\n\nexport function validate(\n type: OptionsSource,\n opts: any,\n filename?: string,\n): ValidatedOptions {\n try {\n return validateNested(\n {\n type: \"root\",\n source: type,\n },\n opts,\n );\n } catch (error) {\n const configError = new ConfigError(error.message, filename);\n // @ts-expect-error TODO: .code is not defined on ConfigError or Error\n if (error.code) configError.code = error.code;\n throw configError;\n }\n}\n\nfunction validateNested(loc: NestingPath, opts: { [key: string]: unknown }) {\n const type = getSource(loc);\n\n assertNoDuplicateSourcemap(opts);\n\n Object.keys(opts).forEach((key: string) => {\n const optLoc = {\n type: \"option\",\n name: key,\n parent: loc,\n } as const;\n\n if (type === \"preset\" && NONPRESET_VALIDATORS[key]) {\n throw new Error(`${msg(optLoc)} is not allowed in preset options`);\n }\n if (type !== \"arguments\" && ROOT_VALIDATORS[key]) {\n throw new Error(\n `${msg(optLoc)} is only allowed in root programmatic options`,\n );\n }\n if (\n type !== \"arguments\" &&\n type !== \"configfile\" &&\n BABELRC_VALIDATORS[key]\n ) {\n if (type === \"babelrcfile\" || type === \"extendsfile\") {\n throw new Error(\n `${msg(\n optLoc,\n )} is not allowed in .babelrc or \"extends\"ed files, only in root programmatic options, ` +\n `or babel.config.js/config file options`,\n );\n }\n\n throw new Error(\n `${msg(\n optLoc,\n )} is only allowed in root programmatic options, or babel.config.js/config file options`,\n );\n }\n\n const validator =\n COMMON_VALIDATORS[key] ||\n NONPRESET_VALIDATORS[key] ||\n BABELRC_VALIDATORS[key] ||\n ROOT_VALIDATORS[key] ||\n (throwUnknownError as Validator);\n\n validator(optLoc, opts[key]);\n });\n\n return opts;\n}\n\nfunction throwUnknownError(loc: OptionPath) {\n const key = loc.name;\n\n if (removed[key]) {\n const { message, version = 5 } = removed[key];\n\n throw new Error(\n `Using removed Babel ${version} option: ${msg(loc)} - ${message}`,\n );\n } else {\n const unknownOptErr = new Error(\n `Unknown option: ${msg(\n loc,\n )}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`,\n );\n // @ts-expect-error todo(flow->ts): consider creating something like BabelConfigError with code field in it\n unknownOptErr.code = \"BABEL_UNKNOWN_OPTION\";\n\n throw unknownOptErr;\n }\n}\n\nfunction assertNoDuplicateSourcemap(opts: any): void {\n if (Object.hasOwn(opts, \"sourceMap\") && Object.hasOwn(opts, \"sourceMaps\")) {\n throw new Error(\".sourceMap is an alias for .sourceMaps, cannot use both\");\n }\n}\n\nfunction assertEnvSet(\n loc: OptionPath,\n value: unknown,\n): void | EnvSet {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside of another .env block`);\n }\n const parent: RootPath | OverridesPath = loc.parent;\n\n const obj = assertObject(loc, value);\n if (obj) {\n // Validate but don't copy the .env object in order to preserve\n // object identity for use during config chain processing.\n for (const envName of Object.keys(obj)) {\n const env = assertObject(access(loc, envName), obj[envName]);\n if (!env) continue;\n\n const envLoc = {\n type: \"env\",\n name: envName,\n parent,\n } as const;\n validateNested(envLoc, env);\n }\n }\n return obj;\n}\n\nfunction assertOverridesList(\n loc: OptionPath,\n value: unknown[],\n): undefined | OverridesList {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside an .env block`);\n }\n if (loc.parent.type === \"overrides\") {\n throw new Error(`${msg(loc)} is not allowed inside an .overrides block`);\n }\n const parent: RootPath = loc.parent;\n\n const arr = assertArray(loc, value);\n if (arr) {\n for (const [index, item] of arr.entries()) {\n const objLoc = access(loc, index);\n const env = assertObject(objLoc, item);\n if (!env) throw new Error(`${msg(objLoc)} must be an object`);\n\n const overridesLoc = {\n type: \"overrides\",\n index,\n parent,\n } as const;\n validateNested(overridesLoc, env);\n }\n }\n return arr as OverridesList;\n}\n\nexport function checkNoUnwrappedItemOptionPairs(\n items: Array>,\n index: number,\n type: \"plugin\" | \"preset\",\n e: Error,\n): void {\n if (index === 0) return;\n\n const lastItem = items[index - 1];\n const thisItem = items[index];\n\n if (\n lastItem.file &&\n lastItem.options === undefined &&\n typeof thisItem.value === \"object\"\n ) {\n e.message +=\n `\\n- Maybe you meant to use\\n` +\n `\"${type}s\": [\\n [\"${lastItem.file.request}\", ${JSON.stringify(\n thisItem.value,\n undefined,\n 2,\n )}]\\n]\\n` +\n `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`;\n }\n}\n","import {\n assertString,\n assertFunction,\n assertObject,\n msg,\n} from \"./option-assertions.ts\";\n\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n RootPath,\n} from \"./option-assertions.ts\";\nimport type { ParserOptions } from \"@babel/parser\";\nimport type { Visitor } from \"@babel/traverse\";\nimport type { ValidatedOptions } from \"./options.ts\";\nimport type { File, PluginAPI, PluginPass } from \"../../index.ts\";\n\n// Note: The casts here are just meant to be static assertions to make sure\n// that the assertion functions actually assert that the value's type matches\n// the declared types.\nconst VALIDATORS: ValidatorSet = {\n name: assertString as Validator,\n manipulateOptions: assertFunction as Validator<\n PluginObject[\"manipulateOptions\"]\n >,\n pre: assertFunction as Validator,\n post: assertFunction as Validator,\n inherits: assertFunction as Validator,\n visitor: assertVisitorMap as Validator,\n\n parserOverride: assertFunction as Validator,\n generatorOverride: assertFunction as Validator<\n PluginObject[\"generatorOverride\"]\n >,\n};\n\nfunction assertVisitorMap(loc: OptionPath, value: unknown): Visitor {\n const obj = assertObject(loc, value);\n if (obj) {\n Object.keys(obj).forEach(prop => {\n if (prop !== \"_exploded\" && prop !== \"_verified\") {\n assertVisitorHandler(prop, obj[prop]);\n }\n });\n\n if (obj.enter || obj.exit) {\n throw new Error(\n `${msg(\n loc,\n )} cannot contain catch-all \"enter\" or \"exit\" handlers. Please target individual nodes.`,\n );\n }\n }\n return obj as Visitor;\n}\n\nfunction assertVisitorHandler(\n key: string,\n value: unknown,\n): asserts value is VisitorHandler {\n if (value && typeof value === \"object\") {\n Object.keys(value).forEach((handler: string) => {\n if (handler !== \"enter\" && handler !== \"exit\") {\n throw new Error(\n `.visitor[\"${key}\"] may only have .enter and/or .exit handlers.`,\n );\n }\n });\n } else if (typeof value !== \"function\") {\n throw new Error(`.visitor[\"${key}\"] must be a function`);\n }\n}\n\ntype VisitorHandler =\n | Function\n | {\n enter?: Function;\n exit?: Function;\n };\n\nexport type PluginObject = {\n name?: string;\n manipulateOptions?: (\n options: ValidatedOptions,\n parserOpts: ParserOptions,\n ) => void;\n pre?: (this: S, file: File) => void | Promise;\n post?: (this: S, file: File) => void | Promise;\n inherits?: (\n api: PluginAPI,\n options: unknown,\n dirname: string,\n ) => PluginObject;\n visitor?: Visitor;\n parserOverride?: Function;\n generatorOverride?: Function;\n};\n\nexport function validatePluginObject(obj: {\n [key: string]: unknown;\n}): PluginObject {\n const rootPath: RootPath = {\n type: \"root\",\n source: \"plugin\",\n };\n Object.keys(obj).forEach((key: string) => {\n const validator = VALIDATORS[key];\n\n if (validator) {\n const optLoc: OptionPath = {\n type: \"option\",\n name: key,\n parent: rootPath,\n };\n validator(optLoc, obj[key]);\n } else {\n const invalidPluginPropertyError = new Error(\n `.${key} is not a valid Plugin property`,\n );\n // @ts-expect-error todo(flow->ts) consider adding BabelConfigError with code field\n invalidPluginPropertyError.code = \"BABEL_UNKNOWN_PLUGIN_PROPERTY\";\n throw invalidPluginPropertyError;\n }\n });\n\n return obj as any;\n}\n","export default {\n auxiliaryComment: {\n message: \"Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`\",\n },\n blacklist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n breakConfig: {\n message: \"This is not a necessary option in Babel 6\",\n },\n experimental: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n externalHelpers: {\n message:\n \"Use the `external-helpers` plugin instead. \" +\n \"Check out http://babeljs.io/docs/plugins/external-helpers/\",\n },\n extra: {\n message: \"\",\n },\n jsxPragma: {\n message:\n \"use the `pragma` option in the `react-jsx` plugin. \" +\n \"Check out http://babeljs.io/docs/plugins/transform-react-jsx/\",\n },\n loose: {\n message:\n \"Specify the `loose` option for the relevant plugin you are using \" +\n \"or use a preset that sets the option.\",\n },\n metadataUsedHelpers: {\n message: \"Not required anymore as this is enabled by default\",\n },\n modules: {\n message:\n \"Use the corresponding module transform plugin in the `plugins` option. \" +\n \"Check out http://babeljs.io/docs/plugins/#modules\",\n },\n nonStandard: {\n message:\n \"Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. \" +\n \"Also check out the react preset http://babeljs.io/docs/plugins/preset-react/\",\n },\n optional: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n sourceMapName: {\n message:\n \"The `sourceMapName` option has been removed because it makes more sense for the \" +\n \"tooling that calls Babel to assign `map.file` themselves.\",\n },\n stage: {\n message:\n \"Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets\",\n },\n whitelist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n\n resolveModuleSource: {\n version: 6,\n message: \"Use `babel-plugin-module-resolver@3`'s 'resolvePath' options\",\n },\n metadata: {\n version: 6,\n message:\n \"Generated plugin metadata is always included in the output result\",\n },\n sourceMapTarget: {\n version: 6,\n message:\n \"The `sourceMapTarget` option has been removed because it makes more sense for the tooling \" +\n \"that calls Babel to assign `map.file` themselves.\",\n },\n} as { [name: string]: { version?: number; message: string } };\n","import {\n injectVirtualStackFrame,\n expectedError,\n} from \"./rewrite-stack-trace.ts\";\n\nexport default class ConfigError extends Error {\n constructor(message: string, filename?: string) {\n super(message);\n expectedError(this);\n if (filename) injectVirtualStackFrame(this, filename);\n }\n}\n","/**\n * This file uses the internal V8 Stack Trace API (https://v8.dev/docs/stack-trace-api)\n * to provide utilities to rewrite the stack trace.\n * When this API is not present, all the functions in this file become noops.\n *\n * beginHiddenCallStack(fn) and endHiddenCallStack(fn) wrap their parameter to\n * mark an hidden portion of the stack trace. The function passed to\n * beginHiddenCallStack is the first hidden function, while the function passed\n * to endHiddenCallStack is the first shown function.\n *\n * When an error is thrown _outside_ of the hidden zone, everything between\n * beginHiddenCallStack and endHiddenCallStack will not be shown.\n * If an error is thrown _inside_ the hidden zone, then the whole stack trace\n * will be visible: this is to avoid hiding real bugs.\n * However, if an error inside the hidden zone is expected, it can be marked\n * with the expectedError(error) function to keep the hidden frames hidden.\n *\n * Consider this call stack (the outer function is the bottom one):\n *\n * 1. a()\n * 2. endHiddenCallStack(b)()\n * 3. c()\n * 4. beginHiddenCallStack(d)()\n * 5. e()\n * 6. f()\n *\n * - If a() throws an error, then its shown call stack will be \"a, b, e, f\"\n * - If b() throws an error, then its shown call stack will be \"b, e, f\"\n * - If c() throws an expected error, then its shown call stack will be \"e, f\"\n * - If c() throws an unexpected error, then its shown call stack will be \"c, d, e, f\"\n * - If d() throws an expected error, then its shown call stack will be \"e, f\"\n * - If d() throws an unexpected error, then its shown call stack will be \"d, e, f\"\n * - If e() throws an error, then its shown call stack will be \"e, f\"\n *\n * Additionally, an error can inject additional \"virtual\" stack frames using the\n * injectVirtualStackFrame(error, filename) function: those are injected as a\n * replacement of the hidden frames.\n * In the example above, if we called injectVirtualStackFrame(err, \"h\") and\n * injectVirtualStackFrame(err, \"i\") on the expected error thrown by c(), its\n * shown call stack would have been \"h, i, e, f\".\n * This can be useful, for example, to report config validation errors as if they\n * were directly thrown in the config file.\n */\n\nconst ErrorToString = Function.call.bind(Error.prototype.toString);\n\nconst SUPPORTED =\n !!Error.captureStackTrace &&\n Object.getOwnPropertyDescriptor(Error, \"stackTraceLimit\")?.writable === true;\n\nconst START_HIDING = \"startHiding - secret - don't use this - v1\";\nconst STOP_HIDING = \"stopHiding - secret - don't use this - v1\";\n\ntype CallSite = NodeJS.CallSite;\n\nconst expectedErrors = new WeakSet();\nconst virtualFrames = new WeakMap();\n\nfunction CallSite(filename: string): CallSite {\n // We need to use a prototype otherwise it breaks source-map-support's internals\n return Object.create({\n isNative: () => false,\n isConstructor: () => false,\n isToplevel: () => true,\n getFileName: () => filename,\n getLineNumber: () => undefined,\n getColumnNumber: () => undefined,\n getFunctionName: () => undefined,\n getMethodName: () => undefined,\n getTypeName: () => undefined,\n toString: () => filename,\n } as CallSite);\n}\n\nexport function injectVirtualStackFrame(error: Error, filename: string) {\n if (!SUPPORTED) return;\n\n let frames = virtualFrames.get(error);\n if (!frames) virtualFrames.set(error, (frames = []));\n frames.push(CallSite(filename));\n\n return error;\n}\n\nexport function expectedError(error: Error) {\n if (!SUPPORTED) return;\n expectedErrors.add(error);\n return error;\n}\n\nexport function beginHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n setupPrepareStackTrace();\n return fn(...args);\n },\n \"name\",\n { value: STOP_HIDING },\n );\n}\n\nexport function endHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n return fn(...args);\n },\n \"name\",\n { value: START_HIDING },\n );\n}\n\nfunction setupPrepareStackTrace() {\n // @ts-expect-error This function is a singleton\n setupPrepareStackTrace = () => {};\n\n const { prepareStackTrace = defaultPrepareStackTrace } = Error;\n\n // We add some extra frames to Error.stackTraceLimit, so that we can\n // always show some useful frames even after deleting ours.\n // STACK_TRACE_LIMIT_DELTA should be around the maximum expected number\n // of internal frames, and not too big because capturing the stack trace\n // is slow (this is why Error.stackTraceLimit does not default to Infinity!).\n // Increase it if needed.\n // However, we only do it if the user did not explicitly set it to 0.\n const MIN_STACK_TRACE_LIMIT = 50;\n Error.stackTraceLimit &&= Math.max(\n Error.stackTraceLimit,\n MIN_STACK_TRACE_LIMIT,\n );\n\n Error.prepareStackTrace = function stackTraceRewriter(err, trace) {\n let newTrace = [];\n\n const isExpected = expectedErrors.has(err);\n let status: \"showing\" | \"hiding\" | \"unknown\" = isExpected\n ? \"hiding\"\n : \"unknown\";\n for (let i = 0; i < trace.length; i++) {\n const name = trace[i].getFunctionName();\n if (name === START_HIDING) {\n status = \"hiding\";\n } else if (name === STOP_HIDING) {\n if (status === \"hiding\") {\n status = \"showing\";\n if (virtualFrames.has(err)) {\n newTrace.unshift(...virtualFrames.get(err));\n }\n } else if (status === \"unknown\") {\n // Unexpected internal error, show the full stack trace\n newTrace = trace;\n break;\n }\n } else if (status !== \"hiding\") {\n newTrace.push(trace[i]);\n }\n }\n\n return prepareStackTrace(err, newTrace);\n };\n}\n\nfunction defaultPrepareStackTrace(err: Error, trace: CallSite[]) {\n if (trace.length === 0) return ErrorToString(err);\n return `${ErrorToString(err)}\\n at ${trace.join(\"\\n at \")}`;\n}\n","import gensync, { type Gensync, type Handler, type Callback } from \"gensync\";\n\ntype MaybePromise = T | Promise;\n\nconst runGenerator: {\n sync(gen: Handler): Return;\n async(gen: Handler): Promise;\n errback(gen: Handler, cb: Callback): void;\n} = gensync(function* (item: Handler): Handler {\n return yield* item;\n});\n\n// This Gensync returns true if the current execution context is\n// asynchronous, otherwise it returns false.\nexport const isAsync = gensync({\n sync: () => false,\n errback: cb => cb(null, true),\n});\n\n// This function wraps any functions (which could be either synchronous or\n// asynchronous) with a Gensync. If the wrapped function returns a promise\n// but the current execution context is synchronous, it will throw the\n// provided error.\n// This is used to handle user-provided functions which could be asynchronous.\nexport function maybeAsync(\n fn: (...args: Args) => Return,\n message: string,\n): Gensync {\n return gensync({\n sync(...args) {\n const result = fn.apply(this, args);\n if (isThenable(result)) throw new Error(message);\n return result;\n },\n async(...args) {\n return Promise.resolve(fn.apply(this, args));\n },\n });\n}\n\nconst withKind = gensync({\n sync: cb => cb(\"sync\"),\n async: async cb => cb(\"async\"),\n}) as (cb: (kind: \"sync\" | \"async\") => MaybePromise) => Handler;\n\n// This function wraps a generator (or a Gensync) into another function which,\n// when called, will run the provided generator in a sync or async way, depending\n// on the execution context where this forwardAsync function is called.\n// This is useful, for example, when passing a callback to a function which isn't\n// aware of gensync, but it only knows about synchronous and asynchronous functions.\n// An example is cache.using, which being exposed to the user must be as simple as\n// possible:\n// yield* forwardAsync(gensyncFn, wrappedFn =>\n// cache.using(x => {\n// // Here we don't know about gensync. wrappedFn is a\n// // normal sync or async function\n// return wrappedFn(x);\n// })\n// )\nexport function forwardAsync(\n action: (...args: Args) => Handler,\n cb: (\n adapted: (...args: Args) => MaybePromise,\n ) => MaybePromise,\n): Handler {\n const g = gensync(action);\n return withKind(kind => {\n const adapted = g[kind];\n return cb(adapted);\n });\n}\n\n// If the given generator is executed asynchronously, the first time that it\n// is paused (i.e. When it yields a gensync generator which can't be run\n// synchronously), call the \"firstPause\" callback.\nexport const onFirstPause = gensync<\n [gen: Handler, firstPause: () => void],\n unknown\n>({\n name: \"onFirstPause\",\n arity: 2,\n sync: function (item) {\n return runGenerator.sync(item);\n },\n errback: function (item, firstPause, cb) {\n let completed = false;\n\n runGenerator.errback(item, (err, value) => {\n completed = true;\n cb(err, value);\n });\n\n if (!completed) {\n firstPause();\n }\n },\n}) as (gen: Handler, firstPause: () => void) => Handler;\n\n// Wait for the given promise to be resolved\nexport const waitFor = gensync({\n sync: x => x,\n async: async x => x,\n}) as (p: T | Promise) => Handler;\n\nexport function isThenable(val: any): val is PromiseLike {\n return (\n !!val &&\n (typeof val === \"object\" || typeof val === \"function\") &&\n !!val.then &&\n typeof val.then === \"function\"\n );\n}\n","import type { Handler } from \"gensync\";\n\nimport { isAsync, waitFor } from \"./async.ts\";\n\nexport function once(fn: () => Handler): () => Handler {\n let result: { ok: true; value: R } | { ok: false; value: unknown };\n let resultP: Promise;\n let promiseReferenced = false;\n return function* () {\n if (!result) {\n if (resultP) {\n promiseReferenced = true;\n return yield* waitFor(resultP);\n }\n\n if (!(yield* isAsync())) {\n try {\n result = { ok: true, value: yield* fn() };\n } catch (error) {\n result = { ok: false, value: error };\n }\n } else {\n let resolve: (result: R) => void, reject: (error: unknown) => void;\n resultP = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n try {\n result = { ok: true, value: yield* fn() };\n // Avoid keeping the promise around\n // now that we have the result.\n resultP = null;\n // We only resolve/reject the promise if it has been actually\n // referenced. If there are no listeners we can forget about it.\n // In the reject case, this avoid uncatchable unhandledRejection\n // events.\n if (promiseReferenced) resolve(result.value);\n } catch (error) {\n result = { ok: false, value: error };\n resultP = null;\n if (promiseReferenced) reject(error);\n }\n }\n }\n\n if (result.ok) return result.value;\n else throw result.value;\n };\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig, { type InputOptions } from \"./config/index.ts\";\nimport parser, { type ParseResult } from \"./parser/index.ts\";\nimport normalizeOptions from \"./transformation/normalize-opts.ts\";\nimport type { ValidatedOptions } from \"./config/validation/options.ts\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\ntype FileParseCallback = {\n (err: Error, ast: null): void;\n (err: null, ast: ParseResult | null): void;\n};\n\ntype Parse = {\n (code: string, callback: FileParseCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileParseCallback,\n ): void;\n (code: string, opts?: InputOptions | null): ParseResult | null;\n};\n\nconst parseRunner = gensync(function* parse(\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config = yield* loadConfig(opts);\n\n if (config === null) {\n return null;\n }\n\n return yield* parser(config.passes, normalizeOptions(config), code);\n});\n\nexport const parse: Parse = function parse(\n code,\n opts?,\n callback?: FileParseCallback,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n opts = undefined as ValidatedOptions;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'parse' function expects a callback. If you need to call it synchronously, please use 'parseSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'parse' function will expect a callback. If you need to call it synchronously, please use 'parseSync'.\",\n // );\n return beginHiddenCallStack(parseRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(parseRunner.errback)(code, opts, callback);\n};\n\nexport function parseSync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.sync)(...args);\n}\nexport function parseAsync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.async)(...args);\n}\n","import type { Handler } from \"gensync\";\nimport { parse, type File as ParseResult } from \"@babel/parser\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport generateMissingPluginMessage from \"./util/missing-plugin-helper.ts\";\nimport type { PluginPasses } from \"../config/index.ts\";\n\nexport type { ParseResult };\n\nexport default function* parser(\n pluginPasses: PluginPasses,\n { parserOpts, highlightCode = true, filename = \"unknown\" }: any,\n code: string,\n): Handler {\n try {\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { parserOverride } = plugin;\n if (parserOverride) {\n const ast = parserOverride(code, parserOpts, parse);\n\n if (ast !== undefined) results.push(ast);\n }\n }\n }\n\n if (results.length === 0) {\n return parse(code, parserOpts);\n } else if (results.length === 1) {\n // If we want to allow async parsers\n yield* [];\n if (typeof results[0].then === \"function\") {\n throw new Error(\n `You appear to be using an async parser plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n return results[0];\n }\n // TODO: Add an error code\n throw new Error(\"More than one plugin attempted to override parsing.\");\n } catch (err) {\n if (err.code === \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\") {\n err.message +=\n \"\\nConsider renaming the file to '.mjs', or setting sourceType:module \" +\n \"or sourceType:unambiguous in your Babel config for this file.\";\n // err.code will be changed to BABEL_PARSE_ERROR later.\n }\n\n const { loc, missingPlugin } = err;\n if (loc) {\n const codeFrame = codeFrameColumns(\n code,\n {\n start: {\n line: loc.line,\n column: loc.column + 1,\n },\n },\n {\n highlightCode,\n },\n );\n if (missingPlugin) {\n err.message =\n `${filename}: ` +\n generateMissingPluginMessage(\n missingPlugin[0],\n loc,\n codeFrame,\n filename,\n );\n } else {\n err.message = `${filename}: ${err.message}\\n\\n` + codeFrame;\n }\n err.code = \"BABEL_PARSE_ERROR\";\n }\n throw err;\n }\n}\n","const pluginNameMap: Record<\n string,\n Partial>>\n> = {\n asyncDoExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-async-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions\",\n },\n },\n decimal: {\n syntax: {\n name: \"@babel/plugin-syntax-decimal\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decimal\",\n },\n },\n decorators: {\n syntax: {\n name: \"@babel/plugin-syntax-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators\",\n },\n transform: {\n name: \"@babel/plugin-proposal-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators\",\n },\n },\n doExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-do-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions\",\n },\n },\n exportDefaultFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-default-from\",\n },\n transform: {\n name: \"@babel/plugin-proposal-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from\",\n },\n },\n flow: {\n syntax: {\n name: \"@babel/plugin-syntax-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-flow\",\n },\n transform: {\n name: \"@babel/preset-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-flow\",\n },\n },\n functionBind: {\n syntax: {\n name: \"@babel/plugin-syntax-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-bind\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-bind\",\n },\n },\n functionSent: {\n syntax: {\n name: \"@babel/plugin-syntax-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-sent\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent\",\n },\n },\n jsx: {\n syntax: {\n name: \"@babel/plugin-syntax-jsx\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx\",\n },\n transform: {\n name: \"@babel/preset-react\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-react\",\n },\n },\n pipelineOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-pipeline-operator\",\n },\n transform: {\n name: \"@babel/plugin-proposal-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator\",\n },\n },\n recordAndTuple: {\n syntax: {\n name: \"@babel/plugin-syntax-record-and-tuple\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-record-and-tuple\",\n },\n },\n throwExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-throw-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-throw-expressions\",\n },\n },\n typescript: {\n syntax: {\n name: \"@babel/plugin-syntax-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-typescript\",\n },\n transform: {\n name: \"@babel/preset-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-typescript\",\n },\n },\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n // TODO: This plugins are now supported by default by @babel/parser.\n Object.assign(pluginNameMap, {\n asyncGenerators: {\n syntax: {\n name: \"@babel/plugin-syntax-async-generators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-generators\",\n },\n transform: {\n name: \"@babel/plugin-transform-async-generator-functions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-async-generator-functions\",\n },\n },\n classProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateMethods: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-methods\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-methods\",\n },\n },\n classStaticBlock: {\n syntax: {\n name: \"@babel/plugin-syntax-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-static-block\",\n },\n },\n dynamicImport: {\n syntax: {\n name: \"@babel/plugin-syntax-dynamic-import\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import\",\n },\n },\n exportNamespaceFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from\",\n },\n transform: {\n name: \"@babel/plugin-transform-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-export-namespace-from\",\n },\n },\n // Will be removed\n importAssertions: {\n syntax: {\n name: \"@babel/plugin-syntax-import-assertions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions\",\n },\n },\n importAttributes: {\n syntax: {\n name: \"@babel/plugin-syntax-import-attributes\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-attributes\",\n },\n },\n importMeta: {\n syntax: {\n name: \"@babel/plugin-syntax-import-meta\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta\",\n },\n },\n logicalAssignment: {\n syntax: {\n name: \"@babel/plugin-syntax-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-logical-assignment-operators\",\n },\n transform: {\n name: \"@babel/plugin-transform-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-logical-assignment-operators\",\n },\n },\n moduleStringNames: {\n syntax: {\n name: \"@babel/plugin-syntax-module-string-names\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names\",\n },\n },\n numericSeparator: {\n syntax: {\n name: \"@babel/plugin-syntax-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator\",\n },\n transform: {\n name: \"@babel/plugin-transform-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-numeric-separator\",\n },\n },\n nullishCoalescingOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-nullish-coalescing-operator\",\n },\n transform: {\n name: \"@babel/plugin-transform-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-nullish-coalescing-opearator\",\n },\n },\n objectRestSpread: {\n syntax: {\n name: \"@babel/plugin-syntax-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-object-rest-spread\",\n },\n transform: {\n name: \"@babel/plugin-transform-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-object-rest-spread\",\n },\n },\n optionalCatchBinding: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-catch-binding\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-catch-binding\",\n },\n },\n optionalChaining: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-chaining\",\n },\n },\n privateIn: {\n syntax: {\n name: \"@babel/plugin-syntax-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-property-in-object\",\n },\n },\n regexpUnicodeSets: {\n syntax: {\n name: \"@babel/plugin-syntax-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-unicode-sets-regex/README.md\",\n },\n transform: {\n name: \"@babel/plugin-transform-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-proposalunicode-sets-regex/README.md\",\n },\n },\n });\n}\n\nconst getNameURLCombination = ({ name, url }: { name: string; url: string }) =>\n `${name} (${url})`;\n\n/*\nReturns a string of the format:\nSupport for the experimental syntax [@babel/parser plugin name] isn't currently enabled ([loc]):\n\n[code frame]\n\nAdd [npm package name] ([url]) to the 'plugins' section of your Babel config\nto enable [parsing|transformation].\n*/\nexport default function generateMissingPluginMessage(\n missingPluginName: string,\n loc: {\n line: number;\n column: number;\n },\n codeFrame: string,\n filename: string,\n): string {\n let helpMessage =\n `Support for the experimental syntax '${missingPluginName}' isn't currently enabled ` +\n `(${loc.line}:${loc.column + 1}):\\n\\n` +\n codeFrame;\n const pluginInfo = pluginNameMap[missingPluginName];\n if (pluginInfo) {\n const { syntax: syntaxPlugin, transform: transformPlugin } = pluginInfo;\n if (syntaxPlugin) {\n const syntaxPluginInfo = getNameURLCombination(syntaxPlugin);\n if (transformPlugin) {\n const transformPluginInfo = getNameURLCombination(transformPlugin);\n const sectionType = transformPlugin.name.startsWith(\"@babel/plugin\")\n ? \"plugins\"\n : \"presets\";\n helpMessage += `\\n\\nAdd ${transformPluginInfo} to the '${sectionType}' section of your Babel config to enable transformation.\nIf you want to leave it as-is, add ${syntaxPluginInfo} to the 'plugins' section to enable parsing.`;\n } else {\n helpMessage +=\n `\\n\\nAdd ${syntaxPluginInfo} to the 'plugins' section of your Babel config ` +\n `to enable parsing.`;\n }\n }\n }\n\n const msgFilename =\n filename === \"unknown\" ? \"\" : filename;\n helpMessage += `\n\nIf you already added the plugin for this syntax to your config, it's possible that your config \\\nisn't being loaded.\nYou can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded \\\nconfiguration:\n\\tnpx cross-env BABEL_SHOW_CONFIG_FOR=${msgFilename} \nSee https://babeljs.io/docs/configuration#print-effective-configs for more info.\n`;\n return helpMessage;\n}\n","import * as helpers from \"@babel/helpers\";\nimport generator from \"@babel/generator\";\nimport template from \"@babel/template\";\nimport {\n arrayExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n cloneNode,\n conditionalExpression,\n exportNamedDeclaration,\n exportSpecifier,\n expressionStatement,\n functionExpression,\n identifier,\n memberExpression,\n objectExpression,\n program,\n stringLiteral,\n unaryExpression,\n variableDeclaration,\n variableDeclarator,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { Replacements } from \"@babel/template\";\n\n// Wrapped to avoid wasting time parsing this when almost no-one uses\n// build-external-helpers.\nconst buildUmdWrapper = (replacements: Replacements) =>\n template.statement`\n (function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === \"object\") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n `(replacements);\n\nfunction buildGlobal(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n const container = functionExpression(\n null,\n [identifier(\"global\")],\n blockStatement(body),\n );\n const tree = program([\n expressionStatement(\n callExpression(container, [\n // typeof global === \"undefined\" ? self : global\n conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", identifier(\"global\")),\n stringLiteral(\"undefined\"),\n ),\n identifier(\"self\"),\n identifier(\"global\"),\n ),\n ]),\n ),\n ]);\n\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(\n namespace,\n assignmentExpression(\n \"=\",\n memberExpression(identifier(\"global\"), namespace),\n objectExpression([]),\n ),\n ),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return tree;\n}\n\nfunction buildModule(allowlist?: Array) {\n const body: t.Statement[] = [];\n const refs = buildHelpers(body, null, allowlist);\n\n body.unshift(\n exportNamedDeclaration(\n null,\n Object.keys(refs).map(name => {\n return exportSpecifier(cloneNode(refs[name]), identifier(name));\n }),\n ),\n );\n\n return program(body, [], \"module\");\n}\n\nfunction buildUmd(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, identifier(\"global\")),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return program([\n buildUmdWrapper({\n FACTORY_PARAMETERS: identifier(\"global\"),\n BROWSER_ARGUMENTS: assignmentExpression(\n \"=\",\n memberExpression(identifier(\"root\"), namespace),\n objectExpression([]),\n ),\n COMMON_ARGUMENTS: identifier(\"exports\"),\n AMD_ARGUMENTS: arrayExpression([stringLiteral(\"exports\")]),\n FACTORY_BODY: body,\n UMD_ROOT: identifier(\"this\"),\n }),\n ]);\n}\n\nfunction buildVar(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, objectExpression([])),\n ]),\n );\n const tree = program(body);\n buildHelpers(body, namespace, allowlist);\n body.push(expressionStatement(namespace));\n return tree;\n}\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression,\n allowlist?: Array,\n): Record;\nfunction buildHelpers(\n body: t.Statement[],\n namespace: null,\n allowlist?: Array,\n): Record;\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression | null,\n allowlist?: Array,\n) {\n const getHelperReference = (name: string) => {\n return namespace\n ? memberExpression(namespace, identifier(name))\n : identifier(`_${name}`);\n };\n\n const refs: { [key: string]: t.Identifier | t.MemberExpression } = {};\n helpers.list.forEach(function (name) {\n if (allowlist && !allowlist.includes(name)) return;\n\n const ref = (refs[name] = getHelperReference(name));\n\n const { nodes } = helpers.get(\n name,\n getHelperReference,\n namespace ? null : `_${name}`,\n [],\n namespace\n ? (ast, exportName, mapExportBindingAssignments) => {\n mapExportBindingAssignments(node =>\n assignmentExpression(\"=\", ref, node),\n );\n ast.body.push(\n expressionStatement(\n assignmentExpression(\"=\", ref, identifier(exportName)),\n ),\n );\n }\n : null,\n );\n\n body.push(...nodes);\n });\n return refs;\n}\nexport default function (\n allowlist?: Array,\n outputType: \"global\" | \"module\" | \"umd\" | \"var\" = \"global\",\n) {\n let tree: t.Program;\n\n const build = {\n global: buildGlobal,\n module: buildModule,\n umd: buildUmd,\n var: buildVar,\n }[outputType];\n\n if (build) {\n tree = build(allowlist);\n } else {\n throw new Error(`Unsupported output type ${outputType}`);\n }\n\n return generator(tree).code;\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\nimport type * as t from \"@babel/types\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\ntype AstRoot = t.File | t.Program;\n\ntype TransformFromAst = {\n (ast: AstRoot, code: string, callback: FileResultCallback): void;\n (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (ast: AstRoot, code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformFromAstRunner = gensync(function* (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n if (!ast) throw new Error(\"No AST given\");\n\n return yield* run(config, code, ast);\n});\n\nexport const transformFromAst: TransformFromAst = function transformFromAst(\n ast,\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transformFromAst' function expects a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transformFromAst' function will expect a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n // );\n return beginHiddenCallStack(transformFromAstRunner.sync)(ast, code, opts);\n }\n }\n\n beginHiddenCallStack(transformFromAstRunner.errback)(\n ast,\n code,\n opts,\n callback,\n );\n};\n\nexport function transformFromAstSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.sync)(...args);\n}\n\nexport function transformFromAstAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.async)(...args);\n}\n","// duplicated from transform-file so we do not have to import anything here\ntype TransformFile = {\n (filename: string, callback: (error: Error, file: null) => void): void;\n (\n filename: string,\n opts: any,\n callback: (error: Error, file: null) => void,\n ): void;\n};\n\nexport const transformFile: TransformFile = function transformFile(\n filename,\n opts,\n callback?: (error: Error, file: null) => void,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n }\n\n callback(new Error(\"Transforming files is not supported in browsers\"), null);\n};\n\nexport function transformFileSync(): never {\n throw new Error(\"Transforming files is not supported in browsers\");\n}\n\nexport function transformFileAsync() {\n return Promise.reject(\n new Error(\"Transforming files is not supported in browsers\"),\n );\n}\n","import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nexport type { FileResult } from \"./transformation/index.ts\";\n\ntype Transform = {\n (code: string, callback: FileResultCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformRunner = gensync(function* transform(\n code: string,\n opts?: InputOptions,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n return yield* run(config, code);\n});\n\nexport const transform: Transform = function transform(\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transform' function expects a callback. If you need to call it synchronously, please use 'transformSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transform' function will expect a callback. If you need to call it synchronously, please use 'transformSync'.\",\n // );\n return beginHiddenCallStack(transformRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(transformRunner.errback)(code, opts, callback);\n};\n\nexport function transformSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.sync)(...args);\n}\nexport function transformAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.async)(...args);\n}\n","import traverse from \"@babel/traverse\";\nimport type { Statement } from \"@babel/types\";\nimport type { PluginObject } from \"../config/index.ts\";\nimport Plugin from \"../config/plugin.ts\";\n\nlet LOADED_PLUGIN: Plugin | void;\n\nconst blockHoistPlugin: PluginObject = {\n /**\n * [Please add a description.]\n *\n * Priority:\n *\n * - 0 We want this to be at the **very** bottom\n * - 1 Default node position\n * - 2 Priority over normal nodes\n * - 3 We want this to be at the **very** top\n * - 4 Reserved for the helpers used to implement module imports.\n */\n\n name: \"internal.blockHoist\",\n\n visitor: {\n Block: {\n exit({ node }) {\n node.body = performHoisting(node.body);\n },\n },\n SwitchCase: {\n exit({ node }) {\n // In case statements, hoisting is difficult to perform correctly due to\n // functions that are declared and referenced in different blocks.\n // Nevertheless, hoisting the statements *inside* of each case should at\n // least mitigate the failure cases.\n node.consequent = performHoisting(node.consequent);\n },\n },\n },\n};\n\nfunction performHoisting(body: Statement[]): Statement[] {\n // Largest SMI\n let max = 2 ** 30 - 1;\n let hasChange = false;\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n if (p > max) {\n hasChange = true;\n break;\n }\n max = p;\n }\n if (!hasChange) return body;\n\n // My kingdom for a stable sort!\n return stableSort(body.slice());\n}\n\nexport default function loadBlockHoistPlugin(): Plugin {\n if (!LOADED_PLUGIN) {\n // cache the loaded blockHoist plugin plugin\n LOADED_PLUGIN = new Plugin(\n {\n ...blockHoistPlugin,\n visitor: traverse.explode(blockHoistPlugin.visitor),\n },\n {},\n );\n }\n\n return LOADED_PLUGIN;\n}\n\nfunction priority(bodyNode: Statement & { _blockHoist?: number | true }) {\n const priority = bodyNode?._blockHoist;\n if (priority == null) return 1;\n if (priority === true) return 2;\n return priority;\n}\n\nfunction stableSort(body: Statement[]) {\n // By default, we use priorities of 0-4.\n const buckets = Object.create(null);\n\n // By collecting into buckets, we can guarantee a stable sort.\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n\n // In case some plugin is setting an unexpected priority.\n const bucket = buckets[p] || (buckets[p] = []);\n bucket.push(n);\n }\n\n // Sort our keys in descending order. Keys are unique, so we don't have to\n // worry about stability.\n const keys = Object.keys(buckets)\n .map(k => +k)\n .sort((a, b) => b - a);\n\n let index = 0;\n for (const key of keys) {\n const bucket = buckets[key];\n for (const n of bucket) {\n body[index++] = n;\n }\n }\n return body;\n}\n","import * as helpers from \"@babel/helpers\";\nimport { NodePath } from \"@babel/traverse\";\nimport type { HubInterface, Visitor, Scope } from \"@babel/traverse\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport traverse from \"@babel/traverse\";\nimport { cloneNode, interpreterDirective } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport semver from \"semver\";\n\nimport type { NormalizedFile } from \"../normalize-file.ts\";\n\n// @ts-expect-error This file is `any`\nimport * as babel7 from \"./babel-7-helpers.cjs\";\n\nconst errorVisitor: Visitor<{ loc: t.SourceLocation | null }> = {\n enter(path, state) {\n const loc = path.node.loc;\n if (loc) {\n state.loc = loc;\n path.stop();\n }\n },\n};\n\nexport default class File {\n _map: Map = new Map();\n opts: { [key: string]: any };\n declarations: { [key: string]: t.Identifier } = {};\n path: NodePath;\n ast: t.File;\n scope: Scope;\n metadata: { [key: string]: any } = {};\n code: string = \"\";\n inputMap: any;\n\n hub: HubInterface & { file: File } = {\n // keep it for the usage in babel-core, ex: path.hub.file.opts.filename\n file: this,\n getCode: () => this.code,\n getScope: () => this.scope,\n addHelper: this.addHelper.bind(this),\n buildError: this.buildCodeFrameError.bind(this),\n };\n\n constructor(options: any, { code, ast, inputMap }: NormalizedFile) {\n this.opts = options;\n this.code = code;\n this.ast = ast;\n this.inputMap = inputMap;\n\n this.path = NodePath.get({\n hub: this.hub,\n parentPath: null,\n parent: this.ast,\n container: this.ast,\n key: \"program\",\n }).setContext() as NodePath;\n this.scope = this.path.scope;\n }\n\n /**\n * Provide backward-compatible access to the interpreter directive handling\n * in Babel 6.x. If you are writing a plugin for Babel 7.x, it would be\n * best to use 'program.interpreter' directly.\n */\n get shebang(): string {\n const { interpreter } = this.path.node;\n return interpreter ? interpreter.value : \"\";\n }\n set shebang(value: string) {\n if (value) {\n this.path.get(\"interpreter\").replaceWith(interpreterDirective(value));\n } else {\n this.path.get(\"interpreter\").remove();\n }\n }\n\n set(key: unknown, val: unknown) {\n if (!process.env.BABEL_8_BREAKING) {\n if (key === \"helpersNamespace\") {\n throw new Error(\n \"Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility.\" +\n \"If you are using @babel/plugin-external-helpers you will need to use a newer \" +\n \"version than the one you currently have installed. \" +\n \"If you have your own implementation, you'll want to explore using 'helperGenerator' \" +\n \"alongside 'file.availableHelper()'.\",\n );\n }\n }\n\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n has(key: unknown): boolean {\n return this._map.has(key);\n }\n\n /**\n * Check if a given helper is available in @babel/core's helper list.\n *\n * This _also_ allows you to pass a Babel version specifically. If the\n * helper exists, but was not available for the full given range, it will be\n * considered unavailable.\n */\n availableHelper(name: string, versionRange?: string | null): boolean {\n let minVersion;\n try {\n minVersion = helpers.minVersion(name);\n } catch (err) {\n if (err.code !== \"BABEL_HELPER_UNKNOWN\") throw err;\n\n return false;\n }\n\n if (typeof versionRange !== \"string\") return true;\n\n // semver.intersects() has some surprising behavior with comparing ranges\n // with pre-release versions. We add '^' to ensure that we are always\n // comparing ranges with ranges, which sidesteps this logic.\n // For example:\n //\n // semver.intersects(`<7.0.1`, \"7.0.0-beta.0\") // false - surprising\n // semver.intersects(`<7.0.1`, \"^7.0.0-beta.0\") // true - expected\n //\n // This is because the first falls back to\n //\n // semver.satisfies(\"7.0.0-beta.0\", `<7.0.1`) // false - surprising\n //\n // and this fails because a prerelease version can only satisfy a range\n // if it is a prerelease within the same major/minor/patch range.\n //\n // Note: If this is found to have issues, please also revisit the logic in\n // transform-runtime's definitions.js file.\n if (semver.valid(versionRange)) versionRange = `^${versionRange}`;\n\n if (process.env.BABEL_8_BREAKING) {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=9.0.0`, versionRange)\n );\n } else {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=8.0.0`, versionRange)\n );\n }\n }\n\n addHelper(name: string): t.Identifier {\n const declar = this.declarations[name];\n if (declar) return cloneNode(declar);\n\n const generator = this.get(\"helperGenerator\");\n if (generator) {\n const res = generator(name);\n if (res) return res;\n }\n\n // make sure that the helper exists\n helpers.minVersion(name);\n\n const uid = (this.declarations[name] =\n this.scope.generateUidIdentifier(name));\n\n const dependencies: { [key: string]: t.Identifier } = {};\n for (const dep of helpers.getDependencies(name)) {\n dependencies[dep] = this.addHelper(dep);\n }\n\n const { nodes, globals } = helpers.get(\n name,\n dep => dependencies[dep],\n uid.name,\n Object.keys(this.scope.getAllBindings()),\n );\n\n globals.forEach(name => {\n if (this.path.scope.hasBinding(name, true /* noGlobals */)) {\n this.path.scope.rename(name);\n }\n });\n\n nodes.forEach(node => {\n // @ts-expect-error Fixme: document _compact node property\n node._compact = true;\n });\n\n const added = this.path.unshiftContainer(\"body\", nodes);\n // TODO: NodePath#unshiftContainer should automatically register new\n // bindings.\n for (const path of added) {\n if (path.isVariableDeclaration()) this.scope.registerDeclaration(path);\n }\n\n return uid;\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error: typeof Error = SyntaxError,\n ): Error {\n let loc = node?.loc;\n\n if (!loc && node) {\n const state: { loc?: t.SourceLocation | null } = {\n loc: null,\n };\n traverse(node, errorVisitor, this.scope, state);\n loc = state.loc;\n\n let txt =\n \"This is an error on an internal node. Probably an internal error.\";\n if (loc) txt += \" Location has been estimated.\";\n\n msg += ` (${txt})`;\n }\n\n if (loc) {\n const { highlightCode = true } = this.opts;\n\n msg +=\n \"\\n\" +\n codeFrameColumns(\n this.code,\n {\n start: {\n line: loc.start.line,\n column: loc.start.column + 1,\n },\n end:\n loc.end && loc.start.line === loc.end.line\n ? {\n line: loc.end.line,\n column: loc.end.column + 1,\n }\n : undefined,\n },\n { highlightCode },\n );\n }\n\n return new _Error(msg);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error Babel 7\n File.prototype.addImport = function addImport() {\n throw new Error(\n \"This API has been removed. If you're looking for this \" +\n \"functionality in Babel 7, you should import the \" +\n \"'@babel/helper-module-imports' module and use the functions exposed \" +\n \" from that module, such as 'addNamed' or 'addDefault'.\",\n );\n };\n // @ts-expect-error Babel 7\n File.prototype.addTemplateObject = function addTemplateObject() {\n throw new Error(\n \"This function has been moved into the template literal transform itself.\",\n );\n };\n\n if (!USE_ESM || IS_STANDALONE) {\n // @ts-expect-error Babel 7\n File.prototype.getModuleName = function getModuleName() {\n return babel7.getModuleName()(this.opts, this.opts);\n };\n }\n}\n","import type { PluginPasses } from \"../../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { GeneratorResult } from \"@babel/generator\";\nimport generate from \"@babel/generator\";\n\nimport type File from \"./file.ts\";\nimport mergeSourceMap from \"./merge-map.ts\";\n\nexport default function generateCode(\n pluginPasses: PluginPasses,\n file: File,\n): {\n outputCode: string;\n outputMap: GeneratorResult[\"map\"] | null;\n} {\n const { opts, ast, code, inputMap } = file;\n const { generatorOpts } = opts;\n\n generatorOpts.inputSourceMap = inputMap?.toObject();\n\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { generatorOverride } = plugin;\n if (generatorOverride) {\n const result = generatorOverride(ast, generatorOpts, code, generate);\n\n if (result !== undefined) results.push(result);\n }\n }\n }\n\n let result;\n if (results.length === 0) {\n result = generate(ast, generatorOpts, code);\n } else if (results.length === 1) {\n result = results[0];\n\n if (typeof result.then === \"function\") {\n throw new Error(\n `You appear to be using an async codegen plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version.`,\n );\n }\n } else {\n throw new Error(\"More than one plugin attempted to override codegen.\");\n }\n\n // Decoded maps are faster to merge, so we attempt to get use the decodedMap\n // first. But to preserve backwards compat with older Generator, we'll fall\n // back to the encoded map.\n let { code: outputCode, decodedMap: outputMap = result.map } = result;\n\n // For backwards compat.\n if (result.__mergedMap) {\n /**\n * @see mergeSourceMap\n */\n outputMap = { ...result.map };\n } else {\n if (outputMap) {\n if (inputMap) {\n // mergeSourceMap returns an encoded map\n outputMap = mergeSourceMap(\n inputMap.toObject(),\n outputMap,\n generatorOpts.sourceFileName,\n );\n } else {\n // We cannot output a decoded map, so retrieve the encoded form. Because\n // the decoded form is free, it's fine to prioritize decoded first.\n outputMap = result.map;\n }\n }\n }\n\n if (opts.sourceMaps === \"inline\" || opts.sourceMaps === \"both\") {\n outputCode += \"\\n\" + convertSourceMap.fromObject(outputMap).toComment();\n }\n\n if (opts.sourceMaps === \"inline\") {\n outputMap = null;\n }\n\n return { outputCode, outputMap };\n}\n","type SourceMap = any;\nimport remapping from \"@ampproject/remapping\";\n\nexport default function mergeSourceMap(\n inputMap: SourceMap,\n map: SourceMap,\n sourceFileName: string,\n): SourceMap {\n // On win32 machines, the sourceFileName uses backslash paths like\n // `C:\\foo\\bar.js`. But sourcemaps are always posix paths, so we need to\n // normalize to regular slashes before we can merge (else we won't find the\n // source associated with our input map).\n // This mirrors code done while generating the output map at\n // https://github.com/babel/babel/blob/5c2fcadc9ae34fd20dd72b1111d5cf50476d700d/packages/babel-generator/src/source-map.ts#L102\n const source = sourceFileName.replace(/\\\\/g, \"/\");\n\n // Prevent an infinite recursion if one of the input map's sources has the\n // same resolved path as the input map. In the case, it would keep find the\n // input map, then get it's sources which will include a path like the input\n // map, on and on.\n let found = false;\n const result = remapping(rootless(map), (s, ctx) => {\n if (s === source && !found) {\n found = true;\n // We empty the source location, which will prevent the sourcemap from\n // becoming relative to the input's location. Eg, if we're transforming a\n // file 'foo/bar.js', and it is a transformation of a `baz.js` file in the\n // same directory, the expected output is just `baz.js`. Without this step,\n // it would become `foo/baz.js`.\n ctx.source = \"\";\n\n return rootless(inputMap);\n }\n\n return null;\n });\n\n if (typeof inputMap.sourceRoot === \"string\") {\n result.sourceRoot = inputMap.sourceRoot;\n }\n\n // remapping returns a SourceMap class type, but this breaks code downstream in\n // @babel/traverse and @babel/types that relies on data being plain objects.\n // When it encounters the sourcemap type it outputs a \"don't know how to turn\n // this value into a node\" error. As a result, we are converting the merged\n // sourcemap to a plain js object.\n return { ...result };\n}\n\nfunction rootless(map: SourceMap): SourceMap {\n return {\n ...map,\n\n // This is a bit hack. Remapping will create absolute sources in our\n // sourcemap, but we want to maintain sources relative to the sourceRoot.\n // We'll re-add the sourceRoot after remapping.\n sourceRoot: null,\n };\n}\n","import traverse from \"@babel/traverse\";\nimport type * as t from \"@babel/types\";\nimport type { GeneratorResult } from \"@babel/generator\";\n\nimport type { Handler } from \"gensync\";\n\nimport type { ResolvedConfig, Plugin, PluginPasses } from \"../config/index.ts\";\n\nimport PluginPass from \"./plugin-pass.ts\";\nimport loadBlockHoistPlugin from \"./block-hoist-plugin.ts\";\nimport normalizeOptions from \"./normalize-opts.ts\";\nimport normalizeFile from \"./normalize-file.ts\";\n\nimport generateCode from \"./file/generate.ts\";\nimport type File from \"./file/file.ts\";\n\nimport { flattenToSet } from \"../config/helpers/deep-array.ts\";\nimport { isAsync, maybeAsync } from \"../gensync-utils/async.ts\";\n\nexport type FileResultCallback = {\n (err: Error, file: null): void;\n (err: null, file: FileResult | null): void;\n};\n\nexport type FileResult = {\n metadata: { [key: string]: any };\n options: { [key: string]: any };\n ast: t.File | null;\n code: string | null;\n map: GeneratorResult[\"map\"] | null;\n sourceType: \"script\" | \"module\";\n externalDependencies: Set;\n};\n\nexport function* run(\n config: ResolvedConfig,\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n const file = yield* normalizeFile(\n config.passes,\n normalizeOptions(config),\n code,\n ast,\n );\n\n const opts = file.opts;\n try {\n yield* transformFile(file, config.passes);\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_TRANSFORM_ERROR\";\n }\n throw e;\n }\n\n let outputCode, outputMap;\n try {\n if (opts.code !== false) {\n ({ outputCode, outputMap } = generateCode(config.passes, file));\n }\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_GENERATE_ERROR\";\n }\n throw e;\n }\n\n return {\n metadata: file.metadata,\n options: opts,\n ast: opts.ast === true ? file.ast : null,\n code: outputCode === undefined ? null : outputCode,\n map: outputMap === undefined ? null : outputMap,\n sourceType: file.ast.program.sourceType,\n externalDependencies: flattenToSet(config.externalDependencies),\n };\n}\n\nfunction* transformFile(file: File, pluginPasses: PluginPasses): Handler {\n const async = yield* isAsync();\n\n for (const pluginPairs of pluginPasses) {\n const passPairs: [Plugin, PluginPass][] = [];\n const passes = [];\n const visitors = [];\n\n for (const plugin of pluginPairs.concat([loadBlockHoistPlugin()])) {\n const pass = new PluginPass(file, plugin.key, plugin.options, async);\n\n passPairs.push([plugin, pass]);\n passes.push(pass);\n visitors.push(plugin.visitor);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.pre) {\n const fn = maybeAsync(\n plugin.pre,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n\n // merge all plugin visitors into a single visitor\n const visitor = traverse.visitors.merge(\n visitors,\n passes,\n file.opts.wrapPluginVisitorMethod,\n );\n if (process.env.BABEL_8_BREAKING) {\n traverse(file.ast.program, visitor, file.scope, null, file.path, true);\n } else {\n traverse(file.ast, visitor, file.scope);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.post) {\n const fn = maybeAsync(\n plugin.post,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { file, traverseFast } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { PluginPasses } from \"../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { SourceMapConverter as Converter } from \"convert-source-map\";\nimport File from \"./file/file.ts\";\nimport parser from \"../parser/index.ts\";\nimport cloneDeep from \"./util/clone-deep.ts\";\n\nconst debug = buildDebug(\"babel:transform:file\");\n\n// These regexps are copied from the convert-source-map package,\n// but without // or /* at the beginning of the comment.\n\nconst INLINE_SOURCEMAP_REGEX =\n /^[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,.*$/;\nconst EXTERNAL_SOURCEMAP_REGEX =\n /^[@#][ \\t]+sourceMappingURL=([^\\s'\"`]+)[ \\t]*$/;\n\nexport type NormalizedFile = {\n code: string;\n ast: t.File;\n inputMap: Converter | null;\n};\n\nexport default function* normalizeFile(\n pluginPasses: PluginPasses,\n options: { [key: string]: any },\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n code = `${code || \"\"}`;\n\n if (ast) {\n if (ast.type === \"Program\") {\n ast = file(ast, [], []);\n } else if (ast.type !== \"File\") {\n throw new Error(\"AST root must be a Program or File node\");\n }\n\n if (options.cloneInputAst) {\n ast = cloneDeep(ast);\n }\n } else {\n // @ts-expect-error todo: use babel-types ast typings in Babel parser\n ast = yield* parser(pluginPasses, options, code);\n }\n\n let inputMap = null;\n if (options.inputSourceMap !== false) {\n // If an explicit object is passed in, it overrides the processing of\n // source maps that may be in the file itself.\n if (typeof options.inputSourceMap === \"object\") {\n inputMap = convertSourceMap.fromObject(options.inputSourceMap);\n }\n\n if (!inputMap) {\n const lastComment = extractComments(INLINE_SOURCEMAP_REGEX, ast);\n if (lastComment) {\n try {\n inputMap = convertSourceMap.fromComment(\"//\" + lastComment);\n } catch (err) {\n if (process.env.BABEL_8_BREAKING) {\n console.warn(\n \"discarding unknown inline input sourcemap\",\n options.filename,\n err,\n );\n } else {\n debug(\"discarding unknown inline input sourcemap\");\n }\n }\n }\n }\n\n if (!inputMap) {\n const lastComment = extractComments(EXTERNAL_SOURCEMAP_REGEX, ast);\n if (typeof options.filename === \"string\" && lastComment) {\n try {\n // when `lastComment` is non-null, EXTERNAL_SOURCEMAP_REGEX must have matches\n const match: [string, string] = EXTERNAL_SOURCEMAP_REGEX.exec(\n lastComment,\n ) as any;\n const inputMapContent = fs.readFileSync(\n path.resolve(path.dirname(options.filename), match[1]),\n \"utf8\",\n );\n inputMap = convertSourceMap.fromJSON(inputMapContent);\n } catch (err) {\n debug(\"discarding unknown file input sourcemap\", err);\n }\n } else if (lastComment) {\n debug(\"discarding un-loadable file input sourcemap\");\n }\n }\n }\n\n return new File(options, {\n code,\n ast: ast as t.File,\n inputMap,\n });\n}\n\nfunction extractCommentsFromList(\n regex: RegExp,\n comments: t.Comment[],\n lastComment: string | null,\n): [t.Comment[], string | null] {\n if (comments) {\n comments = comments.filter(({ value }) => {\n if (regex.test(value)) {\n lastComment = value;\n return false;\n }\n return true;\n });\n }\n return [comments, lastComment];\n}\n\nfunction extractComments(regex: RegExp, ast: t.Node) {\n let lastComment: string = null;\n traverseFast(ast, node => {\n [node.leadingComments, lastComment] = extractCommentsFromList(\n regex,\n node.leadingComments,\n lastComment,\n );\n [node.innerComments, lastComment] = extractCommentsFromList(\n regex,\n node.innerComments,\n lastComment,\n );\n [node.trailingComments, lastComment] = extractCommentsFromList(\n regex,\n node.trailingComments,\n lastComment,\n );\n });\n return lastComment;\n}\n","import path from \"path\";\nimport type { ResolvedConfig } from \"../config/index.ts\";\n\nexport default function normalizeOptions(config: ResolvedConfig) {\n const {\n filename,\n cwd,\n filenameRelative = typeof filename === \"string\"\n ? path.relative(cwd, filename)\n : \"unknown\",\n sourceType = \"module\",\n inputSourceMap,\n sourceMaps = !!inputSourceMap,\n sourceRoot = process.env.BABEL_8_BREAKING\n ? undefined\n : config.options.moduleRoot,\n\n sourceFileName = path.basename(filenameRelative),\n\n comments = true,\n compact = \"auto\",\n } = config.options;\n\n const opts = config.options;\n\n const options = {\n ...opts,\n\n parserOpts: {\n sourceType:\n path.extname(filenameRelative) === \".mjs\" ? \"module\" : sourceType,\n\n sourceFileName: filename,\n plugins: [],\n ...opts.parserOpts,\n },\n\n generatorOpts: {\n // General generator flags.\n filename,\n\n auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n retainLines: opts.retainLines,\n comments,\n shouldPrintComment: opts.shouldPrintComment,\n compact,\n minified: opts.minified,\n\n // Source-map generation flags.\n sourceMaps,\n\n sourceRoot,\n sourceFileName,\n ...opts.generatorOpts,\n },\n };\n\n for (const plugins of config.passes) {\n for (const plugin of plugins) {\n if (plugin.manipulateOptions) {\n plugin.manipulateOptions(options, options.parserOpts);\n }\n }\n }\n\n return options;\n}\n","import type * as t from \"@babel/types\";\nimport type File from \"./file/file.ts\";\n\nexport default class PluginPass {\n _map: Map = new Map();\n key: string | undefined | null;\n file: File;\n opts: Partial;\n\n /**\n * The working directory that Babel's programmatic options are loaded\n * relative to.\n */\n cwd: string;\n\n /** The absolute path of the file being compiled. */\n filename: string | void;\n\n /**\n * Is Babel executed in async mode or not.\n */\n isAsync: boolean;\n\n constructor(\n file: File,\n key: string | null,\n options: Options | undefined,\n isAsync: boolean,\n ) {\n this.key = key;\n this.file = file;\n this.opts = options || {};\n this.cwd = file.opts.cwd;\n this.filename = file.opts.filename;\n this.isAsync = isAsync;\n }\n\n set(key: unknown, val: unknown) {\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n availableHelper(name: string, versionRange?: string | null) {\n return this.file.availableHelper(name, versionRange);\n }\n\n addHelper(name: string) {\n return this.file.addHelper(name);\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error?: typeof Error,\n ) {\n return this.file.buildCodeFrameError(node, msg, _Error);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n (PluginPass as any).prototype.getModuleName = function getModuleName(\n this: PluginPass,\n ): string | undefined {\n // @ts-expect-error only exists in Babel 7\n return this.file.getModuleName();\n };\n (PluginPass as any).prototype.addImport = function addImport(\n this: PluginPass,\n ): void {\n // @ts-expect-error only exists in Babel 7\n this.file.addImport();\n };\n}\n","//https://github.com/babel/babel/pull/14583#discussion_r882828856\nfunction deepClone(value: any, cache: Map): any {\n if (value !== null) {\n if (cache.has(value)) return cache.get(value);\n let cloned: any;\n if (Array.isArray(value)) {\n cloned = new Array(value.length);\n cache.set(value, cloned);\n for (let i = 0; i < value.length; i++) {\n cloned[i] =\n typeof value[i] !== \"object\" ? value[i] : deepClone(value[i], cache);\n }\n } else {\n cloned = {};\n cache.set(value, cloned);\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] =\n typeof value[key] !== \"object\"\n ? value[key]\n : deepClone(value[key], cache);\n }\n }\n return cloned;\n }\n return value;\n}\n\nexport default function (value: T): T {\n if (typeof value !== \"object\") return value;\n return deepClone(value, new Map());\n}\n","import type SourceMap from \"./source-map.ts\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charcodes from \"charcodes\";\n\nexport type Pos = {\n line: number;\n column: number;\n index: number;\n};\nexport type Loc = {\n start?: Pos;\n end?: Pos;\n filename?: string;\n};\ntype SourcePos = {\n line: number | undefined;\n column: number | undefined;\n identifierName: string | undefined;\n filename: string | undefined;\n};\ntype InternalSourcePos = SourcePos & { identifierNamePos: Pos };\n\ntype QueueItem = {\n char: number;\n repeat: number;\n line: number | undefined;\n column: number | undefined;\n identifierName: undefined; // Not used, it always undefined.\n identifierNamePos: undefined; // Not used, it always undefined.\n filename: string | undefined;\n};\n\nexport default class Buffer {\n constructor(map: SourceMap | null, indentChar: string) {\n this._map = map;\n this._indentChar = indentChar;\n\n for (let i = 0; i < 64; i++) {\n this._fastIndentations.push(indentChar.repeat(i));\n }\n\n this._allocQueue();\n }\n\n _map: SourceMap = null;\n _buf = \"\";\n _str = \"\";\n _appendCount = 0;\n _last = 0;\n _queue: QueueItem[] = [];\n _queueCursor = 0;\n _canMarkIdName = true;\n _indentChar = \"\";\n _fastIndentations: string[] = [];\n\n _position = {\n line: 1,\n column: 0,\n };\n _sourcePosition: InternalSourcePos = {\n identifierName: undefined,\n identifierNamePos: undefined,\n line: undefined,\n column: undefined,\n filename: undefined,\n };\n\n _allocQueue() {\n const queue = this._queue;\n\n for (let i = 0; i < 16; i++) {\n queue.push({\n char: 0,\n repeat: 1,\n line: undefined,\n column: undefined,\n identifierName: undefined,\n identifierNamePos: undefined,\n filename: \"\",\n });\n }\n }\n\n _pushQueue(\n char: number,\n repeat: number,\n line: number | undefined,\n column: number | undefined,\n filename: string | undefined,\n ) {\n const cursor = this._queueCursor;\n if (cursor === this._queue.length) {\n this._allocQueue();\n }\n const item = this._queue[cursor];\n item.char = char;\n item.repeat = repeat;\n item.line = line;\n item.column = column;\n item.filename = filename;\n\n this._queueCursor++;\n }\n\n _popQueue(): QueueItem {\n if (this._queueCursor === 0) {\n throw new Error(\"Cannot pop from empty queue\");\n }\n return this._queue[--this._queueCursor];\n }\n\n /**\n * Get the final string output from the buffer, along with the sourcemap if one exists.\n */\n\n get() {\n this._flush();\n\n const map = this._map;\n const result = {\n // Whatever trim is used here should not execute a regex against the\n // source string since it may be arbitrarily large after all transformations\n code: (this._buf + this._str).trimRight(),\n // Decoded sourcemap is free to generate.\n decodedMap: map?.getDecoded(),\n // Used as a marker for backwards compatibility. We moved input map merging\n // into the generator. We cannot merge the input map a second time, so the\n // presence of this field tells us we've already done the work.\n get __mergedMap() {\n return this.map;\n },\n // Encoding the sourcemap is moderately CPU expensive.\n get map() {\n const resultMap = map ? map.get() : null;\n result.map = resultMap;\n return resultMap;\n },\n set map(value) {\n Object.defineProperty(result, \"map\", { value, writable: true });\n },\n // Retrieving the raw mappings is very memory intensive.\n get rawMappings() {\n const mappings = map?.getRawMappings();\n result.rawMappings = mappings;\n return mappings;\n },\n set rawMappings(value) {\n Object.defineProperty(result, \"rawMappings\", { value, writable: true });\n },\n };\n\n return result;\n }\n\n /**\n * Add a string to the buffer that cannot be reverted.\n */\n\n append(str: string, maybeNewline: boolean): void {\n this._flush();\n\n this._append(str, this._sourcePosition, maybeNewline);\n }\n\n appendChar(char: number): void {\n this._flush();\n this._appendChar(char, 1, this._sourcePosition);\n }\n\n /**\n * Add a string to the buffer than can be reverted.\n */\n queue(char: number): void {\n // Drop trailing spaces when a newline is inserted.\n if (char === charcodes.lineFeed) {\n while (this._queueCursor !== 0) {\n const char = this._queue[this._queueCursor - 1].char;\n if (char !== charcodes.space && char !== charcodes.tab) {\n break;\n }\n\n this._queueCursor--;\n }\n }\n\n const sourcePosition = this._sourcePosition;\n this._pushQueue(\n char,\n 1,\n sourcePosition.line,\n sourcePosition.column,\n sourcePosition.filename,\n );\n }\n\n /**\n * Same as queue, but this indentation will never have a sourcemap marker.\n */\n queueIndentation(repeat: number): void {\n if (repeat === 0) return;\n this._pushQueue(-1, repeat, undefined, undefined, undefined);\n }\n\n _flush(): void {\n const queueCursor = this._queueCursor;\n const queue = this._queue;\n for (let i = 0; i < queueCursor; i++) {\n const item: QueueItem = queue[i];\n this._appendChar(item.char, item.repeat, item);\n }\n this._queueCursor = 0;\n }\n\n _appendChar(\n char: number,\n repeat: number,\n sourcePos: InternalSourcePos,\n ): void {\n this._last = char;\n\n if (char === -1) {\n const fastIndentation = this._fastIndentations[repeat];\n if (fastIndentation !== undefined) {\n this._str += fastIndentation;\n } else {\n this._str +=\n repeat > 1 ? this._indentChar.repeat(repeat) : this._indentChar;\n }\n } else {\n this._str +=\n repeat > 1\n ? String.fromCharCode(char).repeat(repeat)\n : String.fromCharCode(char);\n }\n\n if (char !== charcodes.lineFeed) {\n this._mark(\n sourcePos.line,\n sourcePos.column,\n sourcePos.identifierName,\n sourcePos.identifierNamePos,\n sourcePos.filename,\n );\n this._position.column += repeat;\n } else {\n this._position.line++;\n this._position.column = 0;\n }\n\n if (this._canMarkIdName) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n }\n\n _append(\n str: string,\n sourcePos: InternalSourcePos,\n maybeNewline: boolean,\n ): void {\n const len = str.length;\n const position = this._position;\n\n this._last = str.charCodeAt(len - 1);\n\n if (++this._appendCount > 4096) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n +this._str; // Unexplainable huge performance boost. Ref: https://github.com/davidmarkclements/flatstr License: MIT\n this._buf += this._str;\n this._str = str;\n this._appendCount = 0;\n } else {\n this._str += str;\n }\n\n if (!maybeNewline && !this._map) {\n position.column += len;\n return;\n }\n\n const { column, identifierName, identifierNamePos, filename } = sourcePos;\n let line = sourcePos.line;\n\n if (\n (identifierName != null || identifierNamePos != null) &&\n this._canMarkIdName\n ) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n\n // Search for newline chars. We search only for `\\n`, since both `\\r` and\n // `\\r\\n` are normalized to `\\n` during parse. We exclude `\\u2028` and\n // `\\u2029` for performance reasons, they're so uncommon that it's probably\n // ok. It's also unclear how other sourcemap utilities handle them...\n let i = str.indexOf(\"\\n\");\n let last = 0;\n\n // If the string starts with a newline char, then adding a mark is redundant.\n // This catches both \"no newlines\" and \"newline after several chars\".\n if (i !== 0) {\n this._mark(line, column, identifierName, identifierNamePos, filename);\n }\n\n // Now, find each remaining newline char in the string.\n while (i !== -1) {\n position.line++;\n position.column = 0;\n last = i + 1;\n\n // We mark the start of each line, which happens directly after this newline char\n // unless this is the last char.\n // When manually adding multi-line content (such as a comment), `line` will be `undefined`.\n if (last < len && line !== undefined) {\n this._mark(++line, 0, null, null, filename);\n }\n i = str.indexOf(\"\\n\", last);\n }\n position.column += len - last;\n }\n\n _mark(\n line: number | undefined,\n column: number | undefined,\n identifierName: string | undefined,\n identifierNamePos: Pos | undefined,\n filename: string | undefined,\n ): void {\n this._map?.mark(\n this._position,\n line,\n column,\n identifierName,\n identifierNamePos,\n filename,\n );\n }\n\n removeTrailingNewline(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.lineFeed\n ) {\n this._queueCursor--;\n }\n }\n\n removeLastSemicolon(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.semicolon\n ) {\n this._queueCursor--;\n }\n }\n\n getLastChar(): number {\n const queueCursor = this._queueCursor;\n return queueCursor !== 0 ? this._queue[queueCursor - 1].char : this._last;\n }\n\n /**\n * This will only detect at most 1 newline after a call to `flush()`,\n * but this has not been found so far, and an accurate count can be achieved if needed later.\n */\n getNewlineCount(): number {\n const queueCursor = this._queueCursor;\n let count = 0;\n if (queueCursor === 0) return this._last === charcodes.lineFeed ? 1 : 0;\n for (let i = queueCursor - 1; i >= 0; i--) {\n if (this._queue[i].char !== charcodes.lineFeed) {\n break;\n }\n count++;\n }\n return count === queueCursor && this._last === charcodes.lineFeed\n ? count + 1\n : count;\n }\n\n /**\n * check if current _last + queue ends with newline, return the character before newline\n */\n endsWithCharAndNewline(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n if (queueCursor !== 0) {\n // every element in queue is one-length whitespace string\n const lastCp = queue[queueCursor - 1].char;\n if (lastCp !== charcodes.lineFeed) return;\n if (queueCursor > 1) {\n return queue[queueCursor - 2].char;\n } else {\n return this._last;\n }\n }\n // We assume that everything being matched is at most a single token plus some whitespace,\n // which everything currently is, but otherwise we'd have to expand _last or check _buf.\n }\n\n hasContent(): boolean {\n return this._queueCursor !== 0 || !!this._last;\n }\n\n /**\n * Certain sourcemap usecases expect mappings to be more accurate than\n * Babel's generic sourcemap handling allows. For now, we special-case\n * identifiers to allow for the primary cases to work.\n * The goal of this line is to ensure that the map output from Babel will\n * have an exact range on identifiers in the output code. Without this\n * line, Babel would potentially include some number of trailing tokens\n * that are printed after the identifier, but before another location has\n * been assigned.\n * This allows tooling like Rollup and Webpack to more accurately perform\n * their own transformations. Most importantly, this allows the import/export\n * transformations performed by those tools to loose less information when\n * applying their own transformations on top of the code and map results\n * generated by Babel itself.\n *\n * The primary example of this is the snippet:\n *\n * import mod from \"mod\";\n * mod();\n *\n * With this line, there will be one mapping range over \"mod\" and another\n * over \"();\", where previously it would have been a single mapping.\n */\n exactSource(loc: Loc | undefined, cb: () => void) {\n if (!this._map) {\n cb();\n return;\n }\n\n this.source(\"start\", loc);\n // @ts-expect-error identifierName is not defined\n const identifierName = loc.identifierName;\n const sourcePos = this._sourcePosition;\n if (identifierName) {\n this._canMarkIdName = false;\n sourcePos.identifierName = identifierName;\n }\n cb();\n\n if (identifierName) {\n this._canMarkIdName = true;\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n this.source(\"end\", loc);\n }\n\n /**\n * Sets a given position as the current source location so generated code after this call\n * will be given this position in the sourcemap.\n */\n\n source(prop: \"start\" | \"end\", loc: Loc | undefined): void {\n if (!this._map) return;\n\n // Since this is called extremely often, we reuse the same _sourcePosition\n // object for the whole lifetime of the buffer.\n this._normalizePosition(prop, loc, 0);\n }\n\n sourceWithOffset(\n prop: \"start\" | \"end\",\n loc: Loc | undefined,\n columnOffset: number,\n ): void {\n if (!this._map) return;\n\n this._normalizePosition(prop, loc, columnOffset);\n }\n\n _normalizePosition(prop: \"start\" | \"end\", loc: Loc, columnOffset: number) {\n const pos = loc[prop];\n const target = this._sourcePosition;\n\n if (pos) {\n target.line = pos.line;\n // TODO: Fix https://github.com/babel/babel/issues/15712 in downstream\n target.column = Math.max(pos.column + columnOffset, 0);\n target.filename = loc.filename;\n }\n }\n\n getCurrentColumn(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n\n let lastIndex = -1;\n let len = 0;\n for (let i = 0; i < queueCursor; i++) {\n const item = queue[i];\n if (item.char === charcodes.lineFeed) {\n lastIndex = len;\n }\n len += item.repeat;\n }\n\n return lastIndex === -1 ? this._position.column + len : len - 1 - lastIndex;\n }\n\n getCurrentLine(): number {\n let count = 0;\n\n const queue = this._queue;\n for (let i = 0; i < this._queueCursor; i++) {\n if (queue[i].char === charcodes.lineFeed) {\n count++;\n }\n }\n\n return this._position.line + count;\n }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function File(this: Printer, node: t.File) {\n if (node.program) {\n // Print this here to ensure that Program node 'leadingComments' still\n // get printed after the hashbang.\n this.print(node.program.interpreter);\n }\n\n this.print(node.program);\n}\n\nexport function Program(this: Printer, node: t.Program) {\n // An empty Program doesn't have any inner tokens, so\n // we must explicitly print its inner comments.\n this.noIndentInnerCommentsHere();\n this.printInnerComments();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, undefined, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body);\n}\n\nexport function BlockStatement(this: Printer, node: t.BlockStatement) {\n this.token(\"{\");\n const exit = this.enterDelimited();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, true, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body, true);\n\n exit();\n this.rightBrace(node);\n}\n\nexport function Directive(this: Printer, node: t.Directive) {\n this.print(node.value);\n this.semicolon();\n}\n\n// These regexes match an even number of \\ followed by a quote\nconst unescapedSingleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*'/;\nconst unescapedDoubleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*\"/;\n\nexport function DirectiveLiteral(this: Printer, node: t.DirectiveLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const { value } = node;\n\n // NOTE: In directives we can't change escapings,\n // because they change the behavior.\n // e.g. \"us\\x65 strict\" (\\x65 is e) is not a \"use strict\" directive.\n\n if (!unescapedDoubleQuoteRE.test(value)) {\n this.token(`\"${value}\"`);\n } else if (!unescapedSingleQuoteRE.test(value)) {\n this.token(`'${value}'`);\n } else {\n throw new Error(\n \"Malformed AST: it is not possible to print a directive containing\" +\n \" both unescaped single and double quotes.\",\n );\n }\n}\n\nexport function InterpreterDirective(\n this: Printer,\n node: t.InterpreterDirective,\n) {\n this.token(`#!${node.value}`);\n this.newline(1, true);\n}\n\nexport function Placeholder(this: Printer, node: t.Placeholder) {\n this.token(\"%%\");\n this.print(node.name);\n this.token(\"%%\");\n\n if (node.expectedNode === \"Statement\") {\n this.semicolon();\n }\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nexport function ClassDeclaration(\n this: Printer,\n node: t.ClassDeclaration,\n parent: t.Node,\n) {\n const inExport =\n isExportDefaultDeclaration(parent) || isExportNamedDeclaration(parent);\n\n if (\n !inExport ||\n !this._shouldPrintDecoratorsBeforeExport(\n parent as t.ExportDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n this.printJoin(node.decorators);\n }\n\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n if (node.abstract) {\n // TS\n this.word(\"abstract\");\n this.space();\n }\n\n this.word(\"class\");\n\n if (node.id) {\n this.space();\n this.print(node.id);\n }\n\n this.print(node.typeParameters);\n\n if (node.superClass) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.superClass);\n this.print(\n process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeParameters,\n );\n }\n\n if (node.implements) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n\n this.space();\n this.print(node.body);\n}\n\nexport { ClassDeclaration as ClassExpression };\n\nexport function ClassBody(this: Printer, node: t.ClassBody) {\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n\n const separator = classBodyEmptySemicolonsPrinter(this, node);\n separator?.(-1); // print leading semicolons in preserveFormat mode\n\n const exit = this.enterDelimited();\n this.printJoin(node.body, true, true, separator, true);\n exit();\n\n if (!this.endsWith(charCodes.lineFeed)) this.newline();\n\n this.rightBrace(node);\n }\n}\n\nfunction classBodyEmptySemicolonsPrinter(printer: Printer, node: t.ClassBody) {\n if (!printer.tokenMap || node.start == null || node.end == null) {\n return null;\n }\n\n // \"empty statements\" in class bodies are not represented in the AST.\n // Print them by checking if there are any ; tokens between the current AST\n // member and the next one.\n\n const indexes = printer.tokenMap.getIndexes(node);\n if (!indexes) return null;\n\n let k = 1; // start from 1 to skip '{'\n\n let occurrenceCount = 0;\n\n let nextLocIndex = 0;\n const advanceNextLocIndex = () => {\n while (\n nextLocIndex < node.body.length &&\n node.body[nextLocIndex].start == null\n ) {\n nextLocIndex++;\n }\n };\n advanceNextLocIndex();\n\n return (i: number) => {\n if (nextLocIndex <= i) {\n nextLocIndex = i + 1;\n advanceNextLocIndex();\n }\n\n const end =\n nextLocIndex === node.body.length\n ? node.end\n : node.body[nextLocIndex].start;\n\n let tok;\n while (\n k < indexes.length &&\n printer.tokenMap.matchesOriginal(\n (tok = printer._tokens[indexes[k]]),\n \";\",\n ) &&\n tok.start < end\n ) {\n printer.token(\";\", undefined, occurrenceCount++);\n k++;\n }\n };\n}\n\nexport function ClassProperty(this: Printer, node: t.ClassProperty) {\n this.printJoin(node.decorators);\n\n if (!node.static && !this.format.preserveFormat) {\n // catch up to property key, avoid line break\n // between member TS modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassAccessorProperty(\n this: Printer,\n node: t.ClassAccessorProperty,\n) {\n this.printJoin(node.decorators);\n\n // catch up to property key, avoid line break\n // between member modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n\n // TS does not support class accessor property yet\n this.tsPrintClassMemberModifiers(node);\n\n this.word(\"accessor\", true);\n this.space();\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // Todo: Flow does not support class accessor property yet.\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassPrivateProperty(\n this: Printer,\n node: t.ClassPrivateProperty,\n) {\n this.printJoin(node.decorators);\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.print(node.key);\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassMethod(this: Printer, node: t.ClassMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ClassPrivateMethod(this: Printer, node: t.ClassPrivateMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function _classMethodHead(\n this: Printer,\n node: t.ClassMethod | t.ClassPrivateMethod | t.TSDeclareMethod,\n) {\n this.printJoin(node.decorators);\n\n if (!this.format.preserveFormat) {\n // catch up to method key, avoid line break\n // between member modifiers/method heads and the method key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n this._methodHead(node);\n}\n\nexport function StaticBlock(this: Printer, node: t.StaticBlock) {\n this.word(\"static\");\n this.space();\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n this.printSequence(node.body, true);\n this.rightBrace(node);\n }\n}\n","import type Printer from \"../printer\";\nimport type * as t from \"@babel/types\";\n\nexport type DeprecatedBabel7ASTTypes =\n | \"Noop\"\n | \"TSExpressionWithTypeArguments\"\n | \"DecimalLiteral\";\n\nexport function addDeprecatedGenerators(PrinterClass: typeof Printer) {\n // Add Babel 7 generator methods that is removed in Babel 8\n if (!process.env.BABEL_8_BREAKING) {\n const deprecatedBabel7Generators = {\n Noop(this: Printer) {},\n\n TSExpressionWithTypeArguments(\n this: Printer,\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node: t.TSExpressionWithTypeArguments,\n ) {\n this.print(node.expression);\n this.print(node.typeParameters);\n },\n\n DecimalLiteral(this: Printer, node: any) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"m\");\n },\n } satisfies Record<\n DeprecatedBabel7ASTTypes,\n (this: Printer, node: any) => void\n >;\n Object.assign(PrinterClass.prototype, deprecatedBabel7Generators);\n }\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isCallExpression,\n isLiteral,\n isMemberExpression,\n isNewExpression,\n isPattern,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function UnaryExpression(this: Printer, node: t.UnaryExpression) {\n const { operator } = node;\n if (\n operator === \"void\" ||\n operator === \"delete\" ||\n operator === \"typeof\" ||\n // throwExpressions\n operator === \"throw\"\n ) {\n this.word(operator);\n this.space();\n } else {\n this.token(operator);\n }\n\n this.print(node.argument);\n}\n\nexport function DoExpression(this: Printer, node: t.DoExpression) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n this.word(\"do\");\n this.space();\n this.print(node.body);\n}\n\nexport function ParenthesizedExpression(\n this: Printer,\n node: t.ParenthesizedExpression,\n) {\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.print(node.expression);\n exit();\n this.rightParens(node);\n}\n\nexport function UpdateExpression(this: Printer, node: t.UpdateExpression) {\n if (node.prefix) {\n this.token(node.operator);\n this.print(node.argument);\n } else {\n this.print(node.argument, true);\n this.token(node.operator);\n }\n}\n\nexport function ConditionalExpression(\n this: Printer,\n node: t.ConditionalExpression,\n) {\n this.print(node.test);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.consequent);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.alternate);\n}\n\nexport function NewExpression(\n this: Printer,\n node: t.NewExpression,\n parent: t.Node,\n) {\n this.word(\"new\");\n this.space();\n this.print(node.callee);\n if (\n this.format.minified &&\n node.arguments.length === 0 &&\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n !node.optional &&\n !isCallExpression(parent, { callee: node }) &&\n !isMemberExpression(parent) &&\n !isNewExpression(parent)\n ) {\n return;\n }\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // Legacy TS AST\n }\n\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n if (node.optional) {\n // TODO: This can never happen\n this.token(\"?.\");\n }\n\n if (\n node.arguments.length === 0 &&\n this.tokenMap &&\n !this.tokenMap.endMatches(node, \")\")\n ) {\n return;\n }\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function SequenceExpression(this: Printer, node: t.SequenceExpression) {\n this.printList(node.expressions);\n}\n\nexport function ThisExpression(this: Printer) {\n this.word(\"this\");\n}\n\nexport function Super(this: Printer) {\n this.word(\"super\");\n}\n\nexport function _shouldPrintDecoratorsBeforeExport(\n this: Printer,\n node: t.ExportDeclaration & { declaration: t.ClassDeclaration },\n) {\n if (typeof this.format.decoratorsBeforeExport === \"boolean\") {\n return this.format.decoratorsBeforeExport;\n }\n return (\n typeof node.start === \"number\" && node.start === node.declaration.start\n );\n}\n\nexport function Decorator(this: Printer, node: t.Decorator) {\n this.token(\"@\");\n this.print(node.expression);\n this.newline();\n}\n\nexport function OptionalMemberExpression(\n this: Printer,\n node: t.OptionalMemberExpression,\n) {\n let { computed } = node;\n const { optional, property } = node;\n\n this.print(node.object);\n\n if (!computed && isMemberExpression(property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n // @ts-expect-error todo(flow->ts) maybe instead of typeof check specific literal types?\n if (isLiteral(property) && typeof property.value === \"number\") {\n computed = true;\n }\n if (optional) {\n this.token(\"?.\");\n }\n\n if (computed) {\n this.token(\"[\");\n this.print(property);\n this.token(\"]\");\n } else {\n if (!optional) {\n this.token(\".\");\n }\n this.print(property);\n }\n}\n\nexport function OptionalCallExpression(\n this: Printer,\n node: t.OptionalCallExpression,\n) {\n this.print(node.callee);\n\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n\n if (node.optional) {\n this.token(\"?.\");\n }\n\n this.print(node.typeArguments);\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments);\n exit();\n this.rightParens(node);\n}\n\nexport function CallExpression(this: Printer, node: t.CallExpression) {\n this.print(node.callee);\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function Import(this: Printer) {\n this.word(\"import\");\n}\n\nexport function AwaitExpression(this: Printer, node: t.AwaitExpression) {\n this.word(\"await\");\n\n if (node.argument) {\n this.space();\n this.printTerminatorless(node.argument);\n }\n}\n\nexport function YieldExpression(this: Printer, node: t.YieldExpression) {\n this.word(\"yield\", true);\n\n if (node.delegate) {\n this.token(\"*\");\n if (node.argument) {\n this.space();\n // line terminators are allowed after yield*\n this.print(node.argument);\n }\n } else {\n if (node.argument) {\n this.space();\n this.printTerminatorless(node.argument);\n }\n }\n}\n\nexport function EmptyStatement(this: Printer) {\n this.semicolon(true /* force */);\n}\n\nexport function ExpressionStatement(\n this: Printer,\n node: t.ExpressionStatement,\n) {\n this.tokenContext |= TokenContext.expressionStatement;\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function AssignmentPattern(this: Printer, node: t.AssignmentPattern) {\n this.print(node.left);\n if (node.left.type === \"Identifier\" || isPattern(node.left)) {\n if (node.left.optional) this.token(\"?\");\n this.print(node.left.typeAnnotation);\n }\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n}\n\nexport function AssignmentExpression(\n this: Printer,\n node: t.AssignmentExpression | t.BinaryExpression | t.LogicalExpression,\n) {\n this.print(node.left);\n\n this.space();\n if (node.operator === \"in\" || node.operator === \"instanceof\") {\n this.word(node.operator);\n } else {\n this.token(node.operator);\n this._endsWithDiv = node.operator === \"/\";\n }\n this.space();\n\n this.print(node.right);\n}\n\nexport function BindExpression(this: Printer, node: t.BindExpression) {\n this.print(node.object);\n this.token(\"::\");\n this.print(node.callee);\n}\n\nexport {\n AssignmentExpression as BinaryExpression,\n AssignmentExpression as LogicalExpression,\n};\n\nexport function MemberExpression(this: Printer, node: t.MemberExpression) {\n this.print(node.object);\n\n if (!node.computed && isMemberExpression(node.property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n let computed = node.computed;\n // @ts-expect-error todo(flow->ts) maybe use specific literal types\n if (isLiteral(node.property) && typeof node.property.value === \"number\") {\n computed = true;\n }\n\n if (computed) {\n const exit = this.enterDelimited();\n this.token(\"[\");\n this.print(node.property);\n this.token(\"]\");\n exit();\n } else {\n this.token(\".\");\n this.print(node.property);\n }\n}\n\nexport function MetaProperty(this: Printer, node: t.MetaProperty) {\n this.print(node.meta);\n this.token(\".\");\n this.print(node.property);\n}\n\nexport function PrivateName(this: Printer, node: t.PrivateName) {\n this.token(\"#\");\n this.print(node.id);\n}\n\nexport function V8IntrinsicIdentifier(\n this: Printer,\n node: t.V8IntrinsicIdentifier,\n) {\n this.token(\"%\");\n this.word(node.name);\n}\n\nexport function ModuleExpression(this: Printer, node: t.ModuleExpression) {\n this.word(\"module\", true);\n this.space();\n this.token(\"{\");\n this.indent();\n const { body } = node;\n if (body.body.length || body.directives.length) {\n this.newline();\n }\n this.print(body);\n this.dedent();\n this.rightBrace(node);\n}\n","import type Printer from \"../printer.ts\";\nimport { isDeclareExportDeclaration, isStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { ExportAllDeclaration } from \"./modules.ts\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function AnyTypeAnnotation(this: Printer) {\n this.word(\"any\");\n}\n\nexport function ArrayTypeAnnotation(\n this: Printer,\n node: t.ArrayTypeAnnotation,\n) {\n this.print(node.elementType, true);\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function BooleanTypeAnnotation(this: Printer) {\n this.word(\"boolean\");\n}\n\nexport function BooleanLiteralTypeAnnotation(\n this: Printer,\n node: t.BooleanLiteralTypeAnnotation,\n) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteralTypeAnnotation(this: Printer) {\n this.word(\"null\");\n}\n\nexport function DeclareClass(\n this: Printer,\n node: t.DeclareClass,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"class\");\n this.space();\n this._interfaceish(node);\n}\n\nexport function DeclareFunction(\n this: Printer,\n node: t.DeclareFunction,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"function\");\n this.space();\n this.print(node.id);\n // @ts-ignore(Babel 7 vs Babel 8) TODO(Babel 8) Remove this comment, since we'll remove the Noop node\n this.print(node.id.typeAnnotation.typeAnnotation);\n\n if (node.predicate) {\n this.space();\n this.print(node.predicate);\n }\n\n this.semicolon();\n}\n\nexport function InferredPredicate(this: Printer) {\n this.token(\"%\");\n this.word(\"checks\");\n}\n\nexport function DeclaredPredicate(this: Printer, node: t.DeclaredPredicate) {\n this.token(\"%\");\n this.word(\"checks\");\n this.token(\"(\");\n this.print(node.value);\n this.token(\")\");\n}\n\nexport function DeclareInterface(this: Printer, node: t.DeclareInterface) {\n this.word(\"declare\");\n this.space();\n this.InterfaceDeclaration(node);\n}\n\nexport function DeclareModule(this: Printer, node: t.DeclareModule) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.space();\n this.print(node.id);\n this.space();\n this.print(node.body);\n}\n\nexport function DeclareModuleExports(\n this: Printer,\n node: t.DeclareModuleExports,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.token(\".\");\n this.word(\"exports\");\n this.print(node.typeAnnotation);\n}\n\nexport function DeclareTypeAlias(this: Printer, node: t.DeclareTypeAlias) {\n this.word(\"declare\");\n this.space();\n this.TypeAlias(node);\n}\n\nexport function DeclareOpaqueType(\n this: Printer,\n node: t.DeclareOpaqueType,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.OpaqueType(node);\n}\n\nexport function DeclareVariable(\n this: Printer,\n node: t.DeclareVariable,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"var\");\n this.space();\n this.print(node.id);\n this.print(node.id.typeAnnotation);\n this.semicolon();\n}\n\nexport function DeclareExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"export\");\n this.space();\n if (node.default) {\n this.word(\"default\");\n this.space();\n }\n\n FlowExportDeclaration.call(this, node);\n}\n\nexport function DeclareExportAllDeclaration(\n this: Printer,\n node: t.DeclareExportAllDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n ExportAllDeclaration.call(this, node);\n}\n\nexport function EnumDeclaration(this: Printer, node: t.EnumDeclaration) {\n const { id, body } = node;\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.print(body);\n}\n\nfunction enumExplicitType(\n context: Printer,\n name: string,\n hasExplicitType: boolean,\n) {\n if (hasExplicitType) {\n context.space();\n context.word(\"of\");\n context.space();\n context.word(name);\n }\n context.space();\n}\n\nfunction enumBody(context: Printer, node: t.EnumBody) {\n const { members } = node;\n context.token(\"{\");\n context.indent();\n context.newline();\n for (const member of members) {\n context.print(member);\n context.newline();\n }\n if (node.hasUnknownMembers) {\n context.token(\"...\");\n context.newline();\n }\n context.dedent();\n context.token(\"}\");\n}\n\nexport function EnumBooleanBody(this: Printer, node: t.EnumBooleanBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"boolean\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumNumberBody(this: Printer, node: t.EnumNumberBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"number\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumStringBody(this: Printer, node: t.EnumStringBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"string\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumSymbolBody(this: Printer, node: t.EnumSymbolBody) {\n enumExplicitType(this, \"symbol\", true);\n enumBody(this, node);\n}\n\nexport function EnumDefaultedMember(\n this: Printer,\n node: t.EnumDefaultedMember,\n) {\n const { id } = node;\n this.print(id);\n this.token(\",\");\n}\n\nfunction enumInitializedMember(\n context: Printer,\n node: t.EnumBooleanMember | t.EnumNumberMember | t.EnumStringMember,\n) {\n context.print(node.id);\n context.space();\n context.token(\"=\");\n context.space();\n context.print(node.init);\n context.token(\",\");\n}\n\nexport function EnumBooleanMember(this: Printer, node: t.EnumBooleanMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumNumberMember(this: Printer, node: t.EnumNumberMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumStringMember(this: Printer, node: t.EnumStringMember) {\n enumInitializedMember(this, node);\n}\n\nfunction FlowExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n this.token(\"{\");\n if (node.specifiers.length) {\n this.space();\n this.printList(node.specifiers);\n this.space();\n }\n this.token(\"}\");\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n this.print(node.source);\n }\n\n this.semicolon();\n }\n}\n\nexport function ExistsTypeAnnotation(this: Printer) {\n this.token(\"*\");\n}\n\nexport function FunctionTypeAnnotation(\n this: Printer,\n node: t.FunctionTypeAnnotation,\n parent?: t.Node,\n) {\n this.print(node.typeParameters);\n this.token(\"(\");\n\n if (node.this) {\n this.word(\"this\");\n this.token(\":\");\n this.space();\n this.print(node.this.typeAnnotation);\n if (node.params.length || node.rest) {\n this.token(\",\");\n this.space();\n }\n }\n\n this.printList(node.params);\n\n if (node.rest) {\n if (node.params.length) {\n this.token(\",\");\n this.space();\n }\n this.token(\"...\");\n this.print(node.rest);\n }\n\n this.token(\")\");\n\n // this node type is overloaded, not sure why but it makes it EXTREMELY annoying\n\n const type = parent?.type;\n if (\n type != null &&\n (type === \"ObjectTypeCallProperty\" ||\n type === \"ObjectTypeInternalSlot\" ||\n type === \"DeclareFunction\" ||\n (type === \"ObjectTypeProperty\" && parent.method))\n ) {\n this.token(\":\");\n } else {\n this.space();\n this.token(\"=>\");\n }\n\n this.space();\n this.print(node.returnType);\n}\n\nexport function FunctionTypeParam(this: Printer, node: t.FunctionTypeParam) {\n this.print(node.name);\n if (node.optional) this.token(\"?\");\n if (node.name) {\n this.token(\":\");\n this.space();\n }\n this.print(node.typeAnnotation);\n}\n\nexport function InterfaceExtends(this: Printer, node: t.InterfaceExtends) {\n this.print(node.id);\n this.print(node.typeParameters, true);\n}\n\nexport {\n InterfaceExtends as ClassImplements,\n InterfaceExtends as GenericTypeAnnotation,\n};\n\nexport function _interfaceish(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface | t.DeclareClass,\n) {\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n if (node.type === \"DeclareClass\") {\n if (node.mixins?.length) {\n this.space();\n this.word(\"mixins\");\n this.space();\n this.printList(node.mixins);\n }\n if (node.implements?.length) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n }\n this.space();\n this.print(node.body);\n}\n\nexport function _variance(\n this: Printer,\n node:\n | t.TypeParameter\n | t.ObjectTypeIndexer\n | t.ObjectTypeProperty\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty,\n) {\n const kind = node.variance?.kind;\n if (kind != null) {\n if (kind === \"plus\") {\n this.token(\"+\");\n } else if (kind === \"minus\") {\n this.token(\"-\");\n }\n }\n}\n\nexport function InterfaceDeclaration(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface,\n) {\n this.word(\"interface\");\n this.space();\n this._interfaceish(node);\n}\n\nfunction andSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"&\", false, occurrenceCount);\n this.space();\n}\n\nexport function InterfaceTypeAnnotation(\n this: Printer,\n node: t.InterfaceTypeAnnotation,\n) {\n this.word(\"interface\");\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n this.space();\n this.print(node.body);\n}\n\nexport function IntersectionTypeAnnotation(\n this: Printer,\n node: t.IntersectionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, andSeparator);\n}\n\nexport function MixedTypeAnnotation(this: Printer) {\n this.word(\"mixed\");\n}\n\nexport function EmptyTypeAnnotation(this: Printer) {\n this.word(\"empty\");\n}\n\nexport function NullableTypeAnnotation(\n this: Printer,\n node: t.NullableTypeAnnotation,\n) {\n this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport {\n NumericLiteral as NumberLiteralTypeAnnotation,\n StringLiteral as StringLiteralTypeAnnotation,\n} from \"./types.ts\";\n\nexport function NumberTypeAnnotation(this: Printer) {\n this.word(\"number\");\n}\n\nexport function StringTypeAnnotation(this: Printer) {\n this.word(\"string\");\n}\n\nexport function ThisTypeAnnotation(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TupleTypeAnnotation(\n this: Printer,\n node: t.TupleTypeAnnotation,\n) {\n this.token(\"[\");\n this.printList(node.types);\n this.token(\"]\");\n}\n\nexport function TypeofTypeAnnotation(\n this: Printer,\n node: t.TypeofTypeAnnotation,\n) {\n this.word(\"typeof\");\n this.space();\n this.print(node.argument);\n}\n\nexport function TypeAlias(\n this: Printer,\n node: t.TypeAlias | t.DeclareTypeAlias,\n) {\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n this.semicolon();\n}\n\nexport function TypeAnnotation(\n this: Printer,\n node: t.TypeAnnotation,\n parent: t.Node,\n) {\n this.token(\":\");\n this.space();\n if (parent.type === \"ArrowFunctionExpression\") {\n this.tokenContext |= TokenContext.arrowFlowReturnType;\n } else if (\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n node.optional\n ) {\n this.token(\"?\");\n }\n this.print(node.typeAnnotation);\n}\n\nexport function TypeParameterInstantiation(\n this: Printer,\n node: t.TypeParameterInstantiation,\n): void {\n this.token(\"<\");\n this.printList(node.params);\n this.token(\">\");\n}\n\nexport { TypeParameterInstantiation as TypeParameterDeclaration };\n\nexport function TypeParameter(this: Printer, node: t.TypeParameter) {\n this._variance(node);\n\n this.word(node.name);\n\n if (node.bound) {\n this.print(node.bound);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function OpaqueType(\n this: Printer,\n node: t.OpaqueType | t.DeclareOpaqueType,\n) {\n this.word(\"opaque\");\n this.space();\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.supertype) {\n this.token(\":\");\n this.space();\n this.print(node.supertype);\n }\n\n if (node.impltype) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.impltype);\n }\n this.semicolon();\n}\n\nexport function ObjectTypeAnnotation(\n this: Printer,\n node: t.ObjectTypeAnnotation,\n) {\n if (node.exact) {\n this.token(\"{|\");\n } else {\n this.token(\"{\");\n }\n\n // TODO: remove the array fallbacks and instead enforce the types to require an array\n const props = [\n ...node.properties,\n ...(node.callProperties || []),\n ...(node.indexers || []),\n ...(node.internalSlots || []),\n ];\n\n if (props.length) {\n this.newline();\n\n this.space();\n\n this.printJoin(\n props,\n true,\n true,\n undefined,\n undefined,\n function addNewlines(leading) {\n if (leading && !props[0]) return 1;\n },\n () => {\n if (props.length !== 1 || node.inexact) {\n this.token(\",\");\n this.space();\n }\n },\n );\n\n this.space();\n }\n\n if (node.inexact) {\n this.indent();\n this.token(\"...\");\n if (props.length) {\n this.newline();\n }\n this.dedent();\n }\n\n if (node.exact) {\n this.token(\"|}\");\n } else {\n this.token(\"}\");\n }\n}\n\nexport function ObjectTypeInternalSlot(\n this: Printer,\n node: t.ObjectTypeInternalSlot,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.token(\"[\");\n this.token(\"[\");\n this.print(node.id);\n this.token(\"]\");\n this.token(\"]\");\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeCallProperty(\n this: Printer,\n node: t.ObjectTypeCallProperty,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeIndexer(this: Printer, node: t.ObjectTypeIndexer) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this._variance(node);\n this.token(\"[\");\n if (node.id) {\n this.print(node.id);\n this.token(\":\");\n this.space();\n }\n this.print(node.key);\n this.token(\"]\");\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ObjectTypeProperty(this: Printer, node: t.ObjectTypeProperty) {\n if (node.proto) {\n this.word(\"proto\");\n this.space();\n }\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n if (node.kind === \"get\" || node.kind === \"set\") {\n this.word(node.kind);\n this.space();\n }\n this._variance(node);\n this.print(node.key);\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeSpreadProperty(\n this: Printer,\n node: t.ObjectTypeSpreadProperty,\n) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport function QualifiedTypeIdentifier(\n this: Printer,\n node: t.QualifiedTypeIdentifier,\n) {\n this.print(node.qualification);\n this.token(\".\");\n this.print(node.id);\n}\n\nexport function SymbolTypeAnnotation(this: Printer) {\n this.word(\"symbol\");\n}\n\nfunction orSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"|\", false, occurrenceCount);\n this.space();\n}\n\nexport function UnionTypeAnnotation(\n this: Printer,\n node: t.UnionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, orSeparator);\n}\n\nexport function TypeCastExpression(this: Printer, node: t.TypeCastExpression) {\n this.token(\"(\");\n this.print(node.expression);\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function Variance(this: Printer, node: t.Variance) {\n if (node.kind === \"plus\") {\n this.token(\"+\");\n } else {\n this.token(\"-\");\n }\n}\n\nexport function VoidTypeAnnotation(this: Printer) {\n this.word(\"void\");\n}\n\nexport function IndexedAccessType(this: Printer, node: t.IndexedAccessType) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function OptionalIndexedAccessType(\n this: Printer,\n node: t.OptionalIndexedAccessType,\n) {\n this.print(node.objectType);\n if (node.optional) {\n this.token(\"?.\");\n }\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n","export * from \"./template-literals.ts\";\nexport * from \"./expressions.ts\";\nexport * from \"./statements.ts\";\nexport * from \"./classes.ts\";\nexport * from \"./methods.ts\";\nexport * from \"./modules.ts\";\nexport * from \"./types.ts\";\nexport * from \"./flow.ts\";\nexport * from \"./base.ts\";\nexport * from \"./jsx.ts\";\nexport * from \"./typescript.ts\";\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function JSXAttribute(this: Printer, node: t.JSXAttribute) {\n this.print(node.name);\n if (node.value) {\n this.token(\"=\");\n this.print(node.value);\n }\n}\n\nexport function JSXIdentifier(this: Printer, node: t.JSXIdentifier) {\n this.word(node.name);\n}\n\nexport function JSXNamespacedName(this: Printer, node: t.JSXNamespacedName) {\n this.print(node.namespace);\n this.token(\":\");\n this.print(node.name);\n}\n\nexport function JSXMemberExpression(\n this: Printer,\n node: t.JSXMemberExpression,\n) {\n this.print(node.object);\n this.token(\".\");\n this.print(node.property);\n}\n\nexport function JSXSpreadAttribute(this: Printer, node: t.JSXSpreadAttribute) {\n this.token(\"{\");\n this.token(\"...\");\n this.print(node.argument);\n this.rightBrace(node);\n}\n\nexport function JSXExpressionContainer(\n this: Printer,\n node: t.JSXExpressionContainer,\n) {\n this.token(\"{\");\n this.print(node.expression);\n this.rightBrace(node);\n}\n\nexport function JSXSpreadChild(this: Printer, node: t.JSXSpreadChild) {\n this.token(\"{\");\n this.token(\"...\");\n this.print(node.expression);\n this.rightBrace(node);\n}\n\nexport function JSXText(this: Printer, node: t.JSXText) {\n const raw = this.getPossibleRaw(node);\n\n if (raw !== undefined) {\n this.token(raw, true);\n } else {\n this.token(node.value, true);\n }\n}\n\nexport function JSXElement(this: Printer, node: t.JSXElement) {\n const open = node.openingElement;\n this.print(open);\n if (open.selfClosing) return;\n\n this.indent();\n for (const child of node.children) {\n this.print(child);\n }\n this.dedent();\n\n this.print(node.closingElement);\n}\n\nfunction spaceSeparator(this: Printer) {\n this.space();\n}\n\nexport function JSXOpeningElement(this: Printer, node: t.JSXOpeningElement) {\n this.token(\"<\");\n this.print(node.name);\n if (process.env.BABEL_8_BREAKING) {\n //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n if (node.typeArguments) {\n this.print(node.typeArguments); // Flow AST\n }\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // Legacy TS AST\n }\n\n if (node.attributes.length > 0) {\n this.space();\n this.printJoin(node.attributes, undefined, undefined, spaceSeparator);\n }\n if (node.selfClosing) {\n this.space();\n this.token(\"/\");\n }\n this.token(\">\");\n}\n\nexport function JSXClosingElement(this: Printer, node: t.JSXClosingElement) {\n this.token(\"<\");\n this.token(\"/\");\n this.print(node.name);\n this.token(\">\");\n}\n\nexport function JSXEmptyExpression(this: Printer) {\n // This node is empty, so forcefully print its inner comments.\n this.printInnerComments();\n}\n\nexport function JSXFragment(this: Printer, node: t.JSXFragment) {\n this.print(node.openingFragment);\n\n this.indent();\n for (const child of node.children) {\n this.print(child);\n }\n this.dedent();\n\n this.print(node.closingFragment);\n}\n\nexport function JSXOpeningFragment(this: Printer) {\n this.token(\"<\");\n this.token(\">\");\n}\n\nexport function JSXClosingFragment(this: Printer) {\n this.token(\"\");\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\nimport { isIdentifier, type ParentMaps } from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\ntype ParentsOf = ParentMaps[T[\"type\"]];\n\nexport function _params(\n this: Printer,\n node: t.Function | t.TSDeclareMethod | t.TSDeclareFunction,\n idNode: t.Expression | t.PrivateName,\n parentNode: ParentsOf,\n) {\n this.print(node.typeParameters);\n\n const nameInfo = _getFuncIdName.call(this, idNode, parentNode);\n if (nameInfo) {\n this.sourceIdentifierName(nameInfo.name, nameInfo.pos);\n }\n\n this.token(\"(\");\n this._parameters(node.params, \")\");\n\n const noLineTerminator = node.type === \"ArrowFunctionExpression\";\n this.print(node.returnType, noLineTerminator);\n\n this._noLineTerminator = noLineTerminator;\n}\n\nexport function _parameters(\n this: Printer,\n parameters: t.Function[\"params\"],\n endToken: string,\n) {\n const exit = this.enterDelimited();\n\n const trailingComma = this.shouldPrintTrailingComma(endToken);\n\n const paramLength = parameters.length;\n for (let i = 0; i < paramLength; i++) {\n this._param(parameters[i]);\n\n if (trailingComma || i < paramLength - 1) {\n this.token(\",\", null, i);\n this.space();\n }\n }\n\n this.token(endToken);\n exit();\n}\n\nexport function _param(\n this: Printer,\n parameter: t.Identifier | t.RestElement | t.Pattern | t.TSParameterProperty,\n) {\n this.printJoin(parameter.decorators);\n this.print(parameter);\n if (\n // @ts-expect-error optional is not in TSParameterProperty\n parameter.optional\n ) {\n this.token(\"?\"); // TS / flow\n }\n\n this.print(\n // @ts-expect-error typeAnnotation is not in TSParameterProperty\n parameter.typeAnnotation,\n ); // TS / flow\n}\n\nexport function _methodHead(this: Printer, node: t.Method | t.TSDeclareMethod) {\n const kind = node.kind;\n const key = node.key;\n\n if (kind === \"get\" || kind === \"set\") {\n this.word(kind);\n this.space();\n }\n\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (\n kind === \"method\" ||\n // @ts-expect-error Fixme: kind: \"init\" is not defined\n kind === \"init\"\n ) {\n if (node.generator) {\n this.token(\"*\");\n }\n }\n\n if (node.computed) {\n this.token(\"[\");\n this.print(key);\n this.token(\"]\");\n } else {\n this.print(key);\n }\n\n if (\n // @ts-expect-error optional is not in ObjectMethod\n node.optional\n ) {\n // TS\n this.token(\"?\");\n }\n\n this._params(\n node,\n node.computed && node.key.type !== \"StringLiteral\" ? undefined : node.key,\n undefined,\n );\n}\n\nexport function _predicate(\n this: Printer,\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n noLineTerminatorAfter?: boolean,\n) {\n if (node.predicate) {\n if (!node.returnType) {\n this.token(\":\");\n }\n this.space();\n this.print(node.predicate, noLineTerminatorAfter);\n }\n}\n\nexport function _functionHead(\n this: Printer,\n node: t.FunctionDeclaration | t.FunctionExpression | t.TSDeclareFunction,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\");\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.space();\n }\n this.word(\"function\");\n if (node.generator) {\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.token(\"*\");\n }\n\n this.space();\n if (node.id) {\n this.print(node.id);\n }\n\n this._params(node, node.id, parent);\n if (node.type !== \"TSDeclareFunction\") {\n this._predicate(node);\n }\n}\n\nexport function FunctionExpression(\n this: Printer,\n node: t.FunctionExpression,\n parent: ParentsOf,\n) {\n this._functionHead(node, parent);\n this.space();\n this.print(node.body);\n}\n\nexport { FunctionExpression as FunctionDeclaration };\n\nexport function ArrowFunctionExpression(\n this: Printer,\n node: t.ArrowFunctionExpression,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (this._shouldPrintArrowParamsParens(node)) {\n this._params(node, undefined, parent);\n } else {\n this.print(node.params[0], true);\n }\n\n this._predicate(node, true);\n this.space();\n // When printing (x)/*1*/=>{}, we remove the parentheses\n // and thus there aren't two contiguous inner tokens.\n // We forcefully print inner comments here.\n this.printInnerComments();\n this.token(\"=>\");\n\n this.space();\n\n this.tokenContext |= TokenContext.arrowBody;\n this.print(node.body);\n}\n\n// Try to avoid printing parens in simple cases, but only if we're pretty\n// sure that they aren't needed by type annotations or potential newlines.\nexport function _shouldPrintArrowParamsParens(\n this: Printer,\n node: t.ArrowFunctionExpression,\n): boolean {\n if (node.params.length !== 1) return true;\n\n if (node.typeParameters || node.returnType || node.predicate) {\n return true;\n }\n\n const firstParam = node.params[0];\n if (\n !isIdentifier(firstParam) ||\n firstParam.typeAnnotation ||\n firstParam.optional ||\n // Flow does not support `foo /*: string*/ => {};`\n firstParam.leadingComments?.length ||\n firstParam.trailingComments?.length\n ) {\n return true;\n }\n\n if (this.tokenMap) {\n if (node.loc == null) return true;\n if (this.tokenMap.findMatching(node, \"(\") !== null) return true;\n const arrowToken = this.tokenMap.findMatching(node, \"=>\");\n if (arrowToken?.loc == null) return true;\n return arrowToken.loc.start.line !== node.loc.start.line;\n }\n\n if (this.format.retainLines) return true;\n\n return false;\n}\n\nfunction _getFuncIdName(\n this: Printer,\n idNode: t.Expression | t.PrivateName,\n parent: ParentsOf,\n) {\n let id: t.Expression | t.PrivateName | t.LVal = idNode;\n\n if (!id && parent) {\n const parentType = parent.type;\n\n if (parentType === \"VariableDeclarator\") {\n id = parent.id;\n } else if (\n parentType === \"AssignmentExpression\" ||\n parentType === \"AssignmentPattern\"\n ) {\n id = parent.left;\n } else if (\n parentType === \"ObjectProperty\" ||\n parentType === \"ClassProperty\"\n ) {\n if (!parent.computed || parent.key.type === \"StringLiteral\") {\n id = parent.key;\n }\n } else if (\n parentType === \"ClassPrivateProperty\" ||\n parentType === \"ClassAccessorProperty\"\n ) {\n id = parent.key;\n }\n }\n\n if (!id) return;\n\n let nameInfo;\n\n if (id.type === \"Identifier\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.loc?.identifierName || id.name,\n };\n } else if (id.type === \"PrivateName\") {\n nameInfo = {\n pos: id.loc?.start,\n name: \"#\" + id.id.name,\n };\n } else if (id.type === \"StringLiteral\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.value,\n };\n }\n\n return nameInfo;\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isClassDeclaration,\n isExportDefaultSpecifier,\n isExportNamespaceSpecifier,\n isImportDefaultSpecifier,\n isImportNamespaceSpecifier,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function ImportSpecifier(this: Printer, node: t.ImportSpecifier) {\n if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n this.word(node.importKind);\n this.space();\n }\n\n this.print(node.imported);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.local && node.local.name !== node.imported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n }\n}\n\nexport function ImportDefaultSpecifier(\n this: Printer,\n node: t.ImportDefaultSpecifier,\n) {\n this.print(node.local);\n}\n\nexport function ExportDefaultSpecifier(\n this: Printer,\n node: t.ExportDefaultSpecifier,\n) {\n this.print(node.exported);\n}\n\nexport function ExportSpecifier(this: Printer, node: t.ExportSpecifier) {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n this.print(node.local);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.exported && node.local.name !== node.exported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n }\n}\n\nexport function ExportNamespaceSpecifier(\n this: Printer,\n node: t.ExportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n}\n\nlet warningShown = false;\n\nexport function _printAttributes(\n this: Printer,\n node: Extract,\n hasPreviousBrace: boolean,\n) {\n const { importAttributesKeyword } = this.format;\n const { attributes, assertions } = node;\n\n if (\n !process.env.BABEL_8_BREAKING &&\n attributes &&\n !importAttributesKeyword &&\n // In the production build only show the warning once.\n // We want to show it per-usage locally for tests.\n (!process.env.IS_PUBLISH || !warningShown)\n ) {\n warningShown = true;\n console.warn(`\\\nYou are using import attributes, without specifying the desired output syntax.\nPlease specify the \"importAttributesKeyword\" generator option, whose value can be one of:\n - \"with\" : \\`import { a } from \"b\" with { type: \"json\" };\\`\n - \"assert\" : \\`import { a } from \"b\" assert { type: \"json\" };\\`\n - \"with-legacy\" : \\`import { a } from \"b\" with type: \"json\";\\`\n`);\n }\n\n const useAssertKeyword =\n importAttributesKeyword === \"assert\" ||\n (!importAttributesKeyword && assertions);\n\n this.word(useAssertKeyword ? \"assert\" : \"with\");\n this.space();\n\n if (\n !process.env.BABEL_8_BREAKING &&\n !useAssertKeyword &&\n importAttributesKeyword !== \"with\"\n ) {\n // with-legacy\n this.printList(attributes || assertions);\n return;\n }\n\n const occurrenceCount = hasPreviousBrace ? 1 : 0;\n\n this.token(\"{\", null, occurrenceCount);\n this.space();\n this.printList(attributes || assertions, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\", null, occurrenceCount);\n}\n\nexport function ExportAllDeclaration(\n this: Printer,\n node: t.ExportAllDeclaration | t.DeclareExportAllDeclaration,\n) {\n this.word(\"export\");\n this.space();\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n this.token(\"*\");\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, false);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nfunction maybePrintDecoratorsBeforeExport(\n printer: Printer,\n node: t.ExportNamedDeclaration | t.ExportDefaultDeclaration,\n) {\n if (\n isClassDeclaration(node.declaration) &&\n printer._shouldPrintDecoratorsBeforeExport(\n node as t.ExportNamedDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n printer.printJoin(node.declaration.decorators);\n }\n}\n\nexport function ExportNamedDeclaration(\n this: Printer,\n node: t.ExportNamedDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.space();\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n\n // print \"special\" specifiers first\n let hasSpecial = false;\n for (;;) {\n const first = specifiers[0];\n if (\n isExportDefaultSpecifier(first) ||\n isExportNamespaceSpecifier(first)\n ) {\n hasSpecial = true;\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length || (!specifiers.length && !hasSpecial)) {\n hasBrace = true;\n this.token(\"{\");\n if (specifiers.length) {\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n }\n this.token(\"}\");\n }\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n }\n\n this.semicolon();\n }\n}\n\nexport function ExportDefaultDeclaration(\n this: Printer,\n node: t.ExportDefaultDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.noIndentInnerCommentsHere();\n this.space();\n this.word(\"default\");\n this.space();\n this.tokenContext |= TokenContext.exportDefault;\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n}\n\nexport function ImportDeclaration(this: Printer, node: t.ImportDeclaration) {\n this.word(\"import\");\n this.space();\n\n const isTypeKind = node.importKind === \"type\" || node.importKind === \"typeof\";\n if (isTypeKind) {\n this.noIndentInnerCommentsHere();\n this.word(node.importKind);\n this.space();\n } else if (node.module) {\n this.noIndentInnerCommentsHere();\n this.word(\"module\");\n this.space();\n } else if (node.phase) {\n this.noIndentInnerCommentsHere();\n this.word(node.phase);\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n const hasSpecifiers = !!specifiers.length;\n // print \"special\" specifiers first. The loop condition is constant,\n // but there is a \"break\" in the body.\n while (hasSpecifiers) {\n const first = specifiers[0];\n if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) {\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length) {\n hasBrace = true;\n this.token(\"{\");\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\");\n } else if (isTypeKind && !hasSpecifiers) {\n hasBrace = true;\n this.token(\"{\");\n this.token(\"}\");\n }\n\n if (hasSpecifiers || isTypeKind) {\n this.space();\n this.word(\"from\");\n this.space();\n }\n\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nexport function ImportAttribute(this: Printer, node: t.ImportAttribute) {\n this.print(node.key);\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ImportNamespaceSpecifier(\n this: Printer,\n node: t.ImportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n}\n\nexport function ImportExpression(this: Printer, node: t.ImportExpression) {\n this.word(\"import\");\n if (node.phase) {\n this.token(\".\");\n this.word(node.phase);\n }\n this.token(\"(\");\n this.print(node.source);\n if (node.options != null) {\n this.token(\",\");\n this.space();\n this.print(node.options);\n }\n this.token(\")\");\n}\n","import type Printer from \"../printer.ts\";\nimport {\n isFor,\n isForStatement,\n isIfStatement,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function WithStatement(this: Printer, node: t.WithStatement) {\n this.word(\"with\");\n this.space();\n this.token(\"(\");\n this.print(node.object);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function IfStatement(this: Printer, node: t.IfStatement) {\n this.word(\"if\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.space();\n\n const needsBlock =\n node.alternate && isIfStatement(getLastStatement(node.consequent));\n if (needsBlock) {\n this.token(\"{\");\n this.newline();\n this.indent();\n }\n\n this.printAndIndentOnComments(node.consequent);\n\n if (needsBlock) {\n this.dedent();\n this.newline();\n this.token(\"}\");\n }\n\n if (node.alternate) {\n if (this.endsWith(charCodes.rightCurlyBrace)) this.space();\n this.word(\"else\");\n this.space();\n this.printAndIndentOnComments(node.alternate);\n }\n}\n\n// Recursively get the last statement.\nfunction getLastStatement(statement: t.Statement): t.Statement {\n // @ts-expect-error: If statement.body is empty or not a Node, isStatement will return false\n const { body } = statement;\n if (isStatement(body) === false) {\n return statement;\n }\n\n return getLastStatement(body);\n}\n\nexport function ForStatement(this: Printer, node: t.ForStatement) {\n this.word(\"for\");\n this.space();\n this.token(\"(\");\n\n {\n const exit = this.enterForStatementInit();\n this.tokenContext |= TokenContext.forHead;\n this.print(node.init);\n exit();\n }\n\n this.token(\";\");\n\n if (node.test) {\n this.space();\n this.print(node.test);\n }\n this.token(\";\", false, 1);\n\n if (node.update) {\n this.space();\n this.print(node.update);\n }\n\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function WhileStatement(this: Printer, node: t.WhileStatement) {\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.printBlock(node);\n}\n\nfunction ForXStatement(this: Printer, node: t.ForXStatement) {\n this.word(\"for\");\n this.space();\n const isForOf = node.type === \"ForOfStatement\";\n if (isForOf && node.await) {\n this.word(\"await\");\n this.space();\n }\n this.noIndentInnerCommentsHere();\n this.token(\"(\");\n {\n const exit = isForOf ? null : this.enterForStatementInit();\n this.tokenContext |= isForOf\n ? TokenContext.forOfHead\n : TokenContext.forInHead;\n this.print(node.left);\n exit?.();\n }\n this.space();\n this.word(isForOf ? \"of\" : \"in\");\n this.space();\n this.print(node.right);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport const ForInStatement = ForXStatement;\nexport const ForOfStatement = ForXStatement;\n\nexport function DoWhileStatement(this: Printer, node: t.DoWhileStatement) {\n this.word(\"do\");\n this.space();\n this.print(node.body);\n this.space();\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.semicolon();\n}\n\nfunction printStatementAfterKeyword(printer: Printer, node: t.Node) {\n if (node) {\n printer.space();\n printer.printTerminatorless(node);\n }\n\n printer.semicolon();\n}\n\nexport function BreakStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"break\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ContinueStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"continue\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ReturnStatement(this: Printer, node: t.ReturnStatement) {\n this.word(\"return\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function ThrowStatement(this: Printer, node: t.ThrowStatement) {\n this.word(\"throw\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function LabeledStatement(this: Printer, node: t.LabeledStatement) {\n this.print(node.label);\n this.token(\":\");\n this.space();\n this.print(node.body);\n}\n\nexport function TryStatement(this: Printer, node: t.TryStatement) {\n this.word(\"try\");\n this.space();\n this.print(node.block);\n this.space();\n\n // Esprima bug puts the catch clause in a `handlers` array.\n // see https://code.google.com/p/esprima/issues/detail?id=433\n // We run into this from regenerator generated ast.\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n if (node.handlers) {\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n this.print(node.handlers[0]);\n } else {\n this.print(node.handler);\n }\n\n if (node.finalizer) {\n this.space();\n this.word(\"finally\");\n this.space();\n this.print(node.finalizer);\n }\n}\n\nexport function CatchClause(this: Printer, node: t.CatchClause) {\n this.word(\"catch\");\n this.space();\n if (node.param) {\n this.token(\"(\");\n this.print(node.param);\n this.print(node.param.typeAnnotation);\n this.token(\")\");\n this.space();\n }\n this.print(node.body);\n}\n\nexport function SwitchStatement(this: Printer, node: t.SwitchStatement) {\n this.word(\"switch\");\n this.space();\n this.token(\"(\");\n this.print(node.discriminant);\n this.token(\")\");\n this.space();\n this.token(\"{\");\n\n this.printSequence(\n node.cases,\n true,\n undefined,\n function addNewlines(leading, cas) {\n if (!leading && node.cases[node.cases.length - 1] === cas) return -1;\n },\n );\n\n this.rightBrace(node);\n}\n\nexport function SwitchCase(this: Printer, node: t.SwitchCase) {\n if (node.test) {\n this.word(\"case\");\n this.space();\n this.print(node.test);\n this.token(\":\");\n } else {\n this.word(\"default\");\n this.token(\":\");\n }\n\n if (node.consequent.length) {\n this.newline();\n this.printSequence(node.consequent, true);\n }\n}\n\nexport function DebuggerStatement(this: Printer) {\n this.word(\"debugger\");\n this.semicolon();\n}\n\nexport function VariableDeclaration(\n this: Printer,\n node: t.VariableDeclaration,\n parent: t.Node,\n) {\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n const { kind } = node;\n if (kind === \"await using\") {\n this.word(\"await\");\n this.space();\n this.word(\"using\", true);\n } else {\n this.word(kind, kind === \"using\");\n }\n this.space();\n\n let hasInits = false;\n // don't add whitespace to loop heads\n if (!isFor(parent)) {\n for (const declar of node.declarations) {\n if (declar.init) {\n // has an init so let's split it up over multiple lines\n hasInits = true;\n }\n }\n }\n\n //\n // use a pretty separator when we aren't in compact mode, have initializers and don't have retainLines on\n // this will format declarations like:\n //\n // let foo = \"bar\", bar = \"foo\";\n //\n // into\n //\n // let foo = \"bar\",\n // bar = \"foo\";\n //\n\n this.printList(\n node.declarations,\n undefined,\n undefined,\n node.declarations.length > 1,\n hasInits\n ? function (this: Printer, occurrenceCount: number) {\n this.token(\",\", false, occurrenceCount);\n this.newline();\n }\n : undefined,\n );\n\n if (isFor(parent)) {\n // don't give semicolons to these nodes since they'll be inserted in the parent generator\n if (isForStatement(parent)) {\n if (parent.init === node) return;\n } else {\n if (parent.left === node) return;\n }\n }\n\n this.semicolon();\n}\n\nexport function VariableDeclarator(this: Printer, node: t.VariableDeclarator) {\n this.print(node.id);\n if (node.definite) this.token(\"!\"); // TS\n // @ts-ignore(Babel 7 vs Babel 8) Property 'typeAnnotation' does not exist on type 'MemberExpression'.\n this.print(node.id.typeAnnotation);\n if (node.init) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.init);\n }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TaggedTemplateExpression(\n this: Printer,\n node: t.TaggedTemplateExpression,\n) {\n this.print(node.tag);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n this.print(node.typeParameters);\n }\n this.print(node.quasi);\n}\n\nexport function TemplateElement(this: Printer) {\n throw new Error(\"TemplateElement printing is handled in TemplateLiteral\");\n}\n\nexport function TemplateLiteral(this: Printer, node: t.TemplateLiteral) {\n const quasis = node.quasis;\n\n let partRaw = \"`\";\n\n for (let i = 0; i < quasis.length; i++) {\n partRaw += quasis[i].value.raw;\n\n if (i + 1 < quasis.length) {\n this.token(partRaw + \"${\", true);\n this.print(node.expressions[i]);\n partRaw = \"}\";\n\n // In Babel 7 we have indivirual tokens for ${ and }, so the automatic\n // catchup logic does not work. Manually look for those tokens.\n if (!process.env.BABEL_8_BREAKING && this.tokenMap) {\n const token = this.tokenMap.findMatching(node, \"}\", i);\n if (token) this._catchUpTo(token.loc.start);\n }\n }\n }\n\n this.token(partRaw + \"`\", true);\n}\n","import type Printer from \"../printer.ts\";\nimport { isAssignmentPattern, isIdentifier } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport jsesc from \"jsesc\";\n\nlet lastRawIdentNode: t.Identifier | null = null;\nlet lastRawIdentResult: string = \"\";\nexport function _getRawIdentifier(this: Printer, node: t.Identifier) {\n if (node === lastRawIdentNode) return lastRawIdentResult;\n lastRawIdentNode = node;\n\n const { name } = node;\n const token = this.tokenMap.find(node, tok => tok.value === name);\n if (token) {\n lastRawIdentResult = this._originalCode.slice(token.start, token.end);\n return lastRawIdentResult;\n }\n return (lastRawIdentResult = node.name);\n}\n\nexport function Identifier(this: Printer, node: t.Identifier) {\n this.sourceIdentifierName(node.loc?.identifierName || node.name);\n\n this.word(this.tokenMap ? this._getRawIdentifier(node) : node.name);\n}\n\nexport function ArgumentPlaceholder(this: Printer) {\n this.token(\"?\");\n}\n\nexport function RestElement(this: Printer, node: t.RestElement) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport { RestElement as SpreadElement };\n\nexport function ObjectExpression(this: Printer, node: t.ObjectExpression) {\n const props = node.properties;\n\n this.token(\"{\");\n\n if (props.length) {\n const exit = this.enterDelimited();\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(\"}\"), true, true);\n this.space();\n exit();\n }\n\n this.sourceWithOffset(\"end\", node.loc, -1);\n\n this.token(\"}\");\n}\n\nexport { ObjectExpression as ObjectPattern };\n\nexport function ObjectMethod(this: Printer, node: t.ObjectMethod) {\n this.printJoin(node.decorators);\n this._methodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ObjectProperty(this: Printer, node: t.ObjectProperty) {\n this.printJoin(node.decorators);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // print `({ foo: foo = 5 } = {})` as `({ foo = 5 } = {});`\n if (\n isAssignmentPattern(node.value) &&\n isIdentifier(node.key) &&\n // @ts-expect-error todo(flow->ts) `.name` does not exist on some types in union\n node.key.name === node.value.left.name\n ) {\n this.print(node.value);\n return;\n }\n\n this.print(node.key);\n\n // shorthand!\n if (\n node.shorthand &&\n isIdentifier(node.key) &&\n isIdentifier(node.value) &&\n node.key.name === node.value.name\n ) {\n return;\n }\n }\n\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ArrayExpression(this: Printer, node: t.ArrayExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n this.token(\"[\");\n\n const exit = this.enterDelimited();\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(\"]\")) {\n this.token(\",\", false, i);\n }\n } else {\n // If the array expression ends with a hole, that hole\n // will be ignored by the interpreter, but if it ends with\n // two (or more) holes, we need to write out two (or more)\n // commas so that the resulting code is interpreted with\n // both (all) of the holes.\n this.token(\",\", false, i);\n }\n }\n\n exit();\n\n this.token(\"]\");\n}\n\nexport { ArrayExpression as ArrayPattern };\n\nexport function RecordExpression(this: Printer, node: t.RecordExpression) {\n const props = node.properties;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#{\";\n endToken = \"}\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"{|\";\n endToken = \"|}\";\n } else if (\n this.format.recordAndTupleSyntaxType !== \"hash\" &&\n this.format.recordAndTupleSyntaxType != null\n ) {\n throw new Error(\n `The \"recordAndTupleSyntaxType\" generator option must be \"bar\" or \"hash\" (${JSON.stringify(\n this.format.recordAndTupleSyntaxType,\n )} received).`,\n );\n } else {\n startToken = \"#{\";\n endToken = \"}\";\n }\n }\n\n this.token(startToken);\n\n if (props.length) {\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(endToken), true, true);\n this.space();\n }\n this.token(endToken);\n}\n\nexport function TupleExpression(this: Printer, node: t.TupleExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"[|\";\n endToken = \"|]\";\n } else if (this.format.recordAndTupleSyntaxType === \"hash\") {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n throw new Error(\n `${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`,\n );\n }\n }\n\n this.token(startToken);\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(endToken)) {\n this.token(\",\", false, i);\n }\n }\n }\n\n this.token(endToken);\n}\n\nexport function RegExpLiteral(this: Printer, node: t.RegExpLiteral) {\n this.word(`/${node.pattern}/${node.flags}`);\n}\n\nexport function BooleanLiteral(this: Printer, node: t.BooleanLiteral) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteral(this: Printer) {\n this.word(\"null\");\n}\n\nexport function NumericLiteral(this: Printer, node: t.NumericLiteral) {\n const raw = this.getPossibleRaw(node);\n const opts = this.format.jsescOption;\n const value = node.value;\n const str = value + \"\";\n if (opts.numbers) {\n this.number(jsesc(value, opts), value);\n } else if (raw == null) {\n this.number(str, value); // normalize\n } else if (this.format.minified) {\n this.number(raw.length < str.length ? raw : str, value);\n } else {\n this.number(raw, value);\n }\n}\n\nexport function StringLiteral(this: Printer, node: t.StringLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const val = jsesc(node.value, this.format.jsescOption);\n\n this.token(val);\n}\n\nexport function BigIntLiteral(this: Printer, node: t.BigIntLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"n\");\n}\n\n// Hack pipe operator\nconst validTopicTokenSet = new Set([\"^^\", \"@@\", \"^\", \"%\", \"#\"]);\nexport function TopicReference(this: Printer) {\n const { topicToken } = this.format;\n\n if (validTopicTokenSet.has(topicToken)) {\n this.token(topicToken);\n } else {\n const givenTopicTokenJSON = JSON.stringify(topicToken);\n const validTopics = Array.from(validTopicTokenSet, v => JSON.stringify(v));\n throw new Error(\n `The \"topicToken\" generator option must be one of ` +\n `${validTopics.join(\", \")} (${givenTopicTokenJSON} received instead).`,\n );\n }\n}\n\n// Smart-mix pipe operator\nexport function PipelineTopicExpression(\n this: Printer,\n node: t.PipelineTopicExpression,\n) {\n this.print(node.expression);\n}\n\nexport function PipelineBareFunction(\n this: Printer,\n node: t.PipelineBareFunction,\n) {\n this.print(node.callee);\n}\n\nexport function PipelinePrimaryTopicReference(this: Printer) {\n this.token(\"#\");\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TSTypeAnnotation(\n this: Printer,\n node: t.TSTypeAnnotation,\n parent: t.Node,\n) {\n // TODO(@nicolo-ribaudo): investigate not including => in the range\n // of the return type of an arrow function type\n this.token(\n (parent.type === \"TSFunctionType\" || parent.type === \"TSConstructorType\") &&\n (process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n parent.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n parent.typeAnnotation) === node\n ? \"=>\"\n : \":\",\n );\n this.space();\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n if (node.optional) this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSTypeParameterInstantiation(\n this: Printer,\n node: t.TSTypeParameterInstantiation,\n parent: t.Node,\n): void {\n this.token(\"<\");\n\n let printTrailingSeparator =\n parent.type === \"ArrowFunctionExpression\" && node.params.length === 1;\n if (this.tokenMap && node.start != null && node.end != null) {\n // Only force the trailing comma for pre-existing nodes if they\n // already had a comma (either because they were multi-param, or\n // because they had a trailing comma)\n printTrailingSeparator &&= !!this.tokenMap.find(node, t =>\n this.tokenMap.matchesOriginal(t, \",\"),\n );\n // Preseve the trailing comma if it was there before\n printTrailingSeparator ||= this.shouldPrintTrailingComma(\">\");\n }\n\n this.printList(node.params, printTrailingSeparator);\n this.token(\">\");\n}\n\nexport { TSTypeParameterInstantiation as TSTypeParameterDeclaration };\n\nexport function TSTypeParameter(this: Printer, node: t.TSTypeParameter) {\n if (node.in) {\n this.word(\"in\");\n this.space();\n }\n\n if (node.out) {\n this.word(\"out\");\n this.space();\n }\n\n this.word(\n !process.env.BABEL_8_BREAKING\n ? (node.name as unknown as string)\n : (node.name as unknown as t.Identifier).name,\n );\n\n if (node.constraint) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.constraint);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function TSParameterProperty(\n this: Printer,\n node: t.TSParameterProperty,\n) {\n if (node.accessibility) {\n this.word(node.accessibility);\n this.space();\n }\n\n if (node.readonly) {\n this.word(\"readonly\");\n this.space();\n }\n\n this._param(node.parameter);\n}\n\nexport function TSDeclareFunction(\n this: Printer,\n node: t.TSDeclareFunction,\n parent: t.ParentMaps[\"TSDeclareFunction\"],\n) {\n if (node.declare) {\n this.word(\"declare\");\n this.space();\n }\n this._functionHead(node, parent);\n this.semicolon();\n}\n\nexport function TSDeclareMethod(this: Printer, node: t.TSDeclareMethod) {\n this._classMethodHead(node);\n this.semicolon();\n}\n\nexport function TSQualifiedName(this: Printer, node: t.TSQualifiedName) {\n this.print(node.left);\n this.token(\".\");\n this.print(node.right);\n}\n\nexport function TSCallSignatureDeclaration(\n this: Printer,\n node: t.TSCallSignatureDeclaration,\n) {\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nfunction maybePrintTrailingCommaOrSemicolon(printer: Printer, node: t.Node) {\n if (!printer.tokenMap || !node.start || !node.end) {\n printer.semicolon();\n return;\n }\n\n if (printer.tokenMap.endMatches(node, \",\")) {\n printer.token(\",\");\n } else if (printer.tokenMap.endMatches(node, \";\")) {\n printer.semicolon();\n }\n}\n\nexport function TSConstructSignatureDeclaration(\n this: Printer,\n node: t.TSConstructSignatureDeclaration,\n) {\n this.word(\"new\");\n this.space();\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSPropertySignature(\n this: Printer,\n node: t.TSPropertySignature,\n) {\n const { readonly } = node;\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function tsPrintPropertyOrMethodName(\n this: Printer,\n node: t.TSPropertySignature | t.TSMethodSignature,\n) {\n if (node.computed) {\n this.token(\"[\");\n }\n this.print(node.key);\n if (node.computed) {\n this.token(\"]\");\n }\n if (node.optional) {\n this.token(\"?\");\n }\n}\n\nexport function TSMethodSignature(this: Printer, node: t.TSMethodSignature) {\n const { kind } = node;\n if (kind === \"set\" || kind === \"get\") {\n this.word(kind);\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSIndexSignature(this: Printer, node: t.TSIndexSignature) {\n const { readonly, static: isStatic } = node;\n if (isStatic) {\n this.word(\"static\");\n this.space();\n }\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.token(\"[\");\n this._parameters(node.parameters, \"]\");\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSAnyKeyword(this: Printer) {\n this.word(\"any\");\n}\nexport function TSBigIntKeyword(this: Printer) {\n this.word(\"bigint\");\n}\nexport function TSUnknownKeyword(this: Printer) {\n this.word(\"unknown\");\n}\nexport function TSNumberKeyword(this: Printer) {\n this.word(\"number\");\n}\nexport function TSObjectKeyword(this: Printer) {\n this.word(\"object\");\n}\nexport function TSBooleanKeyword(this: Printer) {\n this.word(\"boolean\");\n}\nexport function TSStringKeyword(this: Printer) {\n this.word(\"string\");\n}\nexport function TSSymbolKeyword(this: Printer) {\n this.word(\"symbol\");\n}\nexport function TSVoidKeyword(this: Printer) {\n this.word(\"void\");\n}\nexport function TSUndefinedKeyword(this: Printer) {\n this.word(\"undefined\");\n}\nexport function TSNullKeyword(this: Printer) {\n this.word(\"null\");\n}\nexport function TSNeverKeyword(this: Printer) {\n this.word(\"never\");\n}\nexport function TSIntrinsicKeyword(this: Printer) {\n this.word(\"intrinsic\");\n}\n\nexport function TSThisType(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TSFunctionType(this: Printer, node: t.TSFunctionType) {\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function TSConstructorType(this: Printer, node: t.TSConstructorType) {\n if (node.abstract) {\n this.word(\"abstract\");\n this.space();\n }\n this.word(\"new\");\n this.space();\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function tsPrintFunctionOrConstructorType(\n this: Printer,\n node: t.TSFunctionType | t.TSConstructorType,\n) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.params\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n this.space();\n const returnType = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function TSTypeReference(this: Printer, node: t.TSTypeReference) {\n const typeArguments = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeParameters;\n this.print(node.typeName, !!typeArguments);\n this.print(typeArguments);\n}\n\nexport function TSTypePredicate(this: Printer, node: t.TSTypePredicate) {\n if (node.asserts) {\n this.word(\"asserts\");\n this.space();\n }\n this.print(node.parameterName);\n if (node.typeAnnotation) {\n this.space();\n this.word(\"is\");\n this.space();\n this.print(node.typeAnnotation.typeAnnotation);\n }\n}\n\nexport function TSTypeQuery(this: Printer, node: t.TSTypeQuery) {\n this.word(\"typeof\");\n this.space();\n this.print(node.exprName);\n\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSTypeLiteral(this: Printer, node: t.TSTypeLiteral) {\n printBraced(this, node, () => this.printJoin(node.members, true, true));\n}\n\nexport function TSArrayType(this: Printer, node: t.TSArrayType) {\n this.print(node.elementType, true);\n\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function TSTupleType(this: Printer, node: t.TSTupleType) {\n this.token(\"[\");\n this.printList(node.elementTypes, this.shouldPrintTrailingComma(\"]\"));\n this.token(\"]\");\n}\n\nexport function TSOptionalType(this: Printer, node: t.TSOptionalType) {\n this.print(node.typeAnnotation);\n this.token(\"?\");\n}\n\nexport function TSRestType(this: Printer, node: t.TSRestType) {\n this.token(\"...\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSNamedTupleMember(this: Printer, node: t.TSNamedTupleMember) {\n this.print(node.label);\n if (node.optional) this.token(\"?\");\n this.token(\":\");\n this.space();\n this.print(node.elementType);\n}\n\nexport function TSUnionType(this: Printer, node: t.TSUnionType) {\n tsPrintUnionOrIntersectionType(this, node, \"|\");\n}\n\nexport function TSIntersectionType(this: Printer, node: t.TSIntersectionType) {\n tsPrintUnionOrIntersectionType(this, node, \"&\");\n}\n\nfunction tsPrintUnionOrIntersectionType(\n printer: Printer,\n node: t.TSUnionType | t.TSIntersectionType,\n sep: \"|\" | \"&\",\n) {\n let hasLeadingToken = 0;\n if (printer.tokenMap?.startMatches(node, sep)) {\n hasLeadingToken = 1;\n printer.token(sep);\n }\n\n printer.printJoin(node.types, undefined, undefined, function (i) {\n this.space();\n this.token(sep, null, i + hasLeadingToken);\n this.space();\n });\n}\n\nexport function TSConditionalType(this: Printer, node: t.TSConditionalType) {\n this.print(node.checkType);\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.extendsType);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.trueType);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.falseType);\n}\n\nexport function TSInferType(this: Printer, node: t.TSInferType) {\n this.word(\"infer\");\n this.print(node.typeParameter);\n}\n\nexport function TSParenthesizedType(\n this: Printer,\n node: t.TSParenthesizedType,\n) {\n this.token(\"(\");\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function TSTypeOperator(this: Printer, node: t.TSTypeOperator) {\n this.word(node.operator);\n this.space();\n this.print(node.typeAnnotation);\n}\n\nexport function TSIndexedAccessType(\n this: Printer,\n node: t.TSIndexedAccessType,\n) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function TSMappedType(this: Printer, node: t.TSMappedType) {\n const { nameType, optional, readonly, typeAnnotation } = node;\n this.token(\"{\");\n const exit = this.enterDelimited();\n this.space();\n if (readonly) {\n tokenIfPlusMinus(this, readonly);\n this.word(\"readonly\");\n this.space();\n }\n\n this.token(\"[\");\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.word(node.key.name);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.word(node.typeParameter.name);\n }\n\n this.space();\n this.word(\"in\");\n this.space();\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.print(node.constraint);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(node.typeParameter.constraint);\n }\n\n if (nameType) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(nameType);\n }\n\n this.token(\"]\");\n\n if (optional) {\n tokenIfPlusMinus(this, optional);\n this.token(\"?\");\n }\n\n if (typeAnnotation) {\n this.token(\":\");\n this.space();\n this.print(typeAnnotation);\n }\n this.space();\n exit();\n this.token(\"}\");\n}\n\nfunction tokenIfPlusMinus(self: Printer, tok: true | \"+\" | \"-\") {\n if (tok !== true) {\n self.token(tok);\n }\n}\n\nexport function TSLiteralType(this: Printer, node: t.TSLiteralType) {\n this.print(node.literal);\n}\n\nexport function TSClassImplements(\n this: Printer,\n // TODO(Babel 8): Just use t.TSClassImplements\n node: t.Node & {\n expression: t.TSEntityName;\n typeArguments?: t.TSTypeParameterInstantiation;\n },\n) {\n this.print(node.expression);\n this.print(node.typeArguments);\n}\n\nexport { TSClassImplements as TSInterfaceHeritage };\n\nexport function TSInterfaceDeclaration(\n this: Printer,\n node: t.TSInterfaceDeclaration,\n) {\n const { declare, id, typeParameters, extends: extendz, body } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"interface\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n if (extendz?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(extendz);\n }\n this.space();\n this.print(body);\n}\n\nexport function TSInterfaceBody(this: Printer, node: t.TSInterfaceBody) {\n printBraced(this, node, () => this.printJoin(node.body, true, true));\n}\n\nexport function TSTypeAliasDeclaration(\n this: Printer,\n node: t.TSTypeAliasDeclaration,\n) {\n const { declare, id, typeParameters, typeAnnotation } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"type\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(typeAnnotation);\n this.semicolon();\n}\n\nfunction TSTypeExpression(\n this: Printer,\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n) {\n const { type, expression, typeAnnotation } = node;\n this.print(expression, true);\n this.space();\n this.word(type === \"TSAsExpression\" ? \"as\" : \"satisfies\");\n this.space();\n this.print(typeAnnotation);\n}\n\nexport {\n TSTypeExpression as TSAsExpression,\n TSTypeExpression as TSSatisfiesExpression,\n};\n\nexport function TSTypeAssertion(this: Printer, node: t.TSTypeAssertion) {\n const { typeAnnotation, expression } = node;\n this.token(\"<\");\n this.print(typeAnnotation);\n this.token(\">\");\n this.space();\n this.print(expression);\n}\n\nexport function TSInstantiationExpression(\n this: Printer,\n node: t.TSInstantiationExpression,\n) {\n this.print(node.expression);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters);\n }\n}\n\nexport function TSEnumDeclaration(this: Printer, node: t.TSEnumDeclaration) {\n const { declare, const: isConst, id } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n if (isConst) {\n this.word(\"const\");\n this.space();\n }\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.space();\n\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.body);\n } else {\n // cast to TSEnumBody for Babel 7 AST\n TSEnumBody.call(this, node as unknown as t.TSEnumBody);\n }\n}\n\nexport function TSEnumBody(this: Printer, node: t.TSEnumBody) {\n printBraced(this, node, () =>\n this.printList(\n node.members,\n this.shouldPrintTrailingComma(\"}\") ??\n (process.env.BABEL_8_BREAKING ? false : true),\n true,\n true,\n ),\n );\n}\n\nexport function TSEnumMember(this: Printer, node: t.TSEnumMember) {\n const { id, initializer } = node;\n this.print(id);\n if (initializer) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(initializer);\n }\n}\n\nexport function TSModuleDeclaration(\n this: Printer,\n node: t.TSModuleDeclaration,\n) {\n const { declare, id, kind } = node;\n\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n\n if (process.env.BABEL_8_BREAKING) {\n if (kind !== \"global\") {\n this.word(kind);\n this.space();\n }\n\n this.print(node.id);\n if (!node.body) {\n this.semicolon();\n return;\n }\n this.space();\n this.print(node.body);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n if (!node.global) {\n this.word(kind ?? (id.type === \"Identifier\" ? \"namespace\" : \"module\"));\n this.space();\n }\n\n this.print(id);\n\n if (!node.body) {\n this.semicolon();\n return;\n }\n\n let body = node.body;\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n while (body.type === \"TSModuleDeclaration\") {\n this.token(\".\");\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(body.id);\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n body = body.body;\n }\n\n this.space();\n this.print(body);\n }\n}\n\nexport function TSModuleBlock(this: Printer, node: t.TSModuleBlock) {\n printBraced(this, node, () => this.printSequence(node.body, true));\n}\n\nexport function TSImportType(this: Printer, node: t.TSImportType) {\n const { argument, qualifier, options } = node;\n this.word(\"import\");\n this.token(\"(\");\n this.print(argument);\n if (options) {\n this.token(\",\");\n this.print(options);\n }\n this.token(\")\");\n if (qualifier) {\n this.token(\".\");\n this.print(qualifier);\n }\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSImportEqualsDeclaration(\n this: Printer,\n node: t.TSImportEqualsDeclaration,\n) {\n const { isExport, id, moduleReference } = node;\n if (isExport) {\n this.word(\"export\");\n this.space();\n }\n this.word(\"import\");\n this.space();\n this.print(id);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(moduleReference);\n this.semicolon();\n}\n\nexport function TSExternalModuleReference(\n this: Printer,\n node: t.TSExternalModuleReference,\n) {\n this.token(\"require(\");\n this.print(node.expression);\n this.token(\")\");\n}\n\nexport function TSNonNullExpression(\n this: Printer,\n node: t.TSNonNullExpression,\n) {\n this.print(node.expression);\n this.token(\"!\");\n}\n\nexport function TSExportAssignment(this: Printer, node: t.TSExportAssignment) {\n this.word(\"export\");\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function TSNamespaceExportDeclaration(\n this: Printer,\n node: t.TSNamespaceExportDeclaration,\n) {\n this.word(\"export\");\n this.space();\n this.word(\"as\");\n this.space();\n this.word(\"namespace\");\n this.space();\n this.print(node.id);\n this.semicolon();\n}\n\nexport function tsPrintSignatureDeclarationBase(this: Printer, node: any) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? node.params\n : node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n const returnType = process.env.BABEL_8_BREAKING\n ? node.returnType\n : node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function tsPrintClassMemberModifiers(\n this: Printer,\n node:\n | t.ClassProperty\n | t.ClassAccessorProperty\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.TSDeclareMethod,\n) {\n const isField =\n node.type === \"ClassAccessorProperty\" || node.type === \"ClassProperty\";\n printModifiersList(this, node, [\n isField && node.declare && \"declare\",\n node.accessibility,\n ]);\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n printModifiersList(this, node, [\n node.override && \"override\",\n node.abstract && \"abstract\",\n isField && node.readonly && \"readonly\",\n ]);\n}\n\nfunction printBraced(printer: Printer, node: t.Node, cb: () => void) {\n printer.token(\"{\");\n const exit = printer.enterDelimited();\n cb();\n exit();\n printer.rightBrace(node);\n}\n\nfunction printModifiersList(\n printer: Printer,\n node: t.Node,\n modifiers: (string | false | null)[],\n) {\n const modifiersSet = new Set();\n for (const modifier of modifiers) {\n if (modifier) modifiersSet.add(modifier);\n }\n\n printer.tokenMap?.find(node, tok => {\n if (modifiersSet.has(tok.value)) {\n printer.token(tok.value);\n printer.space();\n modifiersSet.delete(tok.value);\n return modifiersSet.size === 0;\n }\n });\n\n for (const modifier of modifiersSet) {\n printer.word(modifier);\n printer.space();\n }\n}\n","import * as whitespace from \"./whitespace.ts\";\nimport * as parens from \"./parentheses.ts\";\nimport {\n FLIPPED_ALIAS_KEYS,\n VISITOR_KEYS,\n isCallExpression,\n isDecorator,\n isExpressionStatement,\n isMemberExpression,\n isNewExpression,\n isParenthesizedExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport type { WhitespaceFlag } from \"./whitespace.ts\";\n\nexport const enum TokenContext {\n expressionStatement = 1 << 0,\n arrowBody = 1 << 1,\n exportDefault = 1 << 2,\n forHead = 1 << 3,\n forInHead = 1 << 4,\n forOfHead = 1 << 5,\n arrowFlowReturnType = 1 << 6,\n}\n\ntype NodeHandler = (\n node: t.Node,\n // todo:\n // node: K extends keyof typeof t\n // ? Extract\n // : t.Node,\n parent: t.Node,\n tokenContext?: number,\n inForStatementInit?: boolean,\n getRawIdentifier?: (node: t.Identifier) => string,\n) => R;\n\nexport type NodeHandlers = {\n [K in string]?: NodeHandler;\n};\n\nfunction expandAliases(obj: NodeHandlers) {\n const map = new Map>();\n\n function add(type: string, func: NodeHandler) {\n const fn = map.get(type);\n map.set(\n type,\n fn\n ? function (node, parent, stack, inForInit, getRawIdentifier) {\n return (\n fn(node, parent, stack, inForInit, getRawIdentifier) ??\n func(node, parent, stack, inForInit, getRawIdentifier)\n );\n }\n : func,\n );\n }\n\n for (const type of Object.keys(obj)) {\n const aliases = FLIPPED_ALIAS_KEYS[type];\n if (aliases) {\n for (const alias of aliases) {\n add(alias, obj[type]);\n }\n } else {\n add(type, obj[type]);\n }\n }\n\n return map;\n}\n\n// Rather than using `t.is` on each object property, we pre-expand any type aliases\n// into concrete types so that the 'find' call below can be as fast as possible.\nconst expandedParens = expandAliases(parens);\nconst expandedWhitespaceNodes = expandAliases(whitespace.nodes);\n\nfunction isOrHasCallExpression(node: t.Node): boolean {\n if (isCallExpression(node)) {\n return true;\n }\n\n return isMemberExpression(node) && isOrHasCallExpression(node.object);\n}\n\nexport function needsWhitespace(\n node: t.Node,\n parent: t.Node,\n type: WhitespaceFlag,\n): boolean {\n if (!node) return false;\n\n if (isExpressionStatement(node)) {\n node = node.expression;\n }\n\n const flag = expandedWhitespaceNodes.get(node.type)?.(node, parent);\n\n if (typeof flag === \"number\") {\n return (flag & type) !== 0;\n }\n\n return false;\n}\n\nexport function needsWhitespaceBefore(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 1);\n}\n\nexport function needsWhitespaceAfter(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 2);\n}\n\nexport function needsParens(\n node: t.Node,\n parent: t.Node,\n tokenContext?: number,\n inForInit?: boolean,\n getRawIdentifier?: (node: t.Identifier) => string,\n) {\n if (!parent) return false;\n\n if (isNewExpression(parent) && parent.callee === node) {\n if (isOrHasCallExpression(node)) return true;\n }\n\n if (isDecorator(parent)) {\n return (\n !isDecoratorMemberExpression(node) &&\n !(isCallExpression(node) && isDecoratorMemberExpression(node.callee)) &&\n !isParenthesizedExpression(node)\n );\n }\n\n return expandedParens.get(node.type)?.(\n node,\n parent,\n tokenContext,\n inForInit,\n getRawIdentifier,\n );\n}\n\nfunction isDecoratorMemberExpression(node: t.Node): boolean {\n switch (node.type) {\n case \"Identifier\":\n return true;\n case \"MemberExpression\":\n return (\n !node.computed &&\n node.property.type === \"Identifier\" &&\n isDecoratorMemberExpression(node.object)\n );\n default:\n return false;\n }\n}\n\nexport function isLastChild(parent: t.Node, child: t.Node) {\n const visitorKeys = VISITOR_KEYS[parent.type];\n for (let i = visitorKeys.length - 1; i >= 0; i--) {\n const val = (parent as any)[visitorKeys[i]] as t.Node | t.Node[] | null;\n if (val === child) {\n return true;\n } else if (Array.isArray(val)) {\n let j = val.length - 1;\n while (j >= 0 && val[j] === null) j--;\n return j >= 0 && val[j] === child;\n } else if (val) {\n return false;\n }\n }\n return false;\n}\n","import {\n isArrayTypeAnnotation,\n isBinaryExpression,\n isCallExpression,\n isForOfStatement,\n isIndexedAccessType,\n isMemberExpression,\n isObjectPattern,\n isOptionalMemberExpression,\n isYieldExpression,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport { TokenContext } from \"./index.ts\";\n\nconst PRECEDENCE = new Map([\n [\"||\", 0],\n [\"??\", 0],\n [\"|>\", 0],\n [\"&&\", 1],\n [\"|\", 2],\n [\"^\", 3],\n [\"&\", 4],\n [\"==\", 5],\n [\"===\", 5],\n [\"!=\", 5],\n [\"!==\", 5],\n [\"<\", 6],\n [\">\", 6],\n [\"<=\", 6],\n [\">=\", 6],\n [\"in\", 6],\n [\"instanceof\", 6],\n [\">>\", 7],\n [\"<<\", 7],\n [\">>>\", 7],\n [\"+\", 8],\n [\"-\", 8],\n [\"*\", 9],\n [\"/\", 9],\n [\"%\", 9],\n [\"**\", 10],\n]);\n\nfunction getBinaryPrecedence(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n nodeType: string,\n): number;\nfunction getBinaryPrecedence(\n node: t.Node,\n nodeType: string,\n): number | undefined;\nfunction getBinaryPrecedence(node: t.Node, nodeType: string) {\n if (nodeType === \"BinaryExpression\" || nodeType === \"LogicalExpression\") {\n return PRECEDENCE.get((node as t.Binary).operator);\n }\n if (nodeType === \"TSAsExpression\" || nodeType === \"TSSatisfiesExpression\") {\n return PRECEDENCE.get(\"in\");\n }\n}\n\nfunction isTSTypeExpression(nodeType: string) {\n return (\n nodeType === \"TSAsExpression\" ||\n nodeType === \"TSSatisfiesExpression\" ||\n nodeType === \"TSTypeAssertion\"\n );\n}\n\nconst isClassExtendsClause = (\n node: t.Node,\n parent: t.Node,\n): parent is t.Class => {\n const parentType = parent.type;\n return (\n (parentType === \"ClassDeclaration\" || parentType === \"ClassExpression\") &&\n parent.superClass === node\n );\n};\n\nconst hasPostfixPart = (node: t.Node, parent: t.Node) => {\n const parentType = parent.type;\n return (\n ((parentType === \"MemberExpression\" ||\n parentType === \"OptionalMemberExpression\") &&\n parent.object === node) ||\n ((parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\") &&\n parent.callee === node) ||\n (parentType === \"TaggedTemplateExpression\" && parent.tag === node) ||\n parentType === \"TSNonNullExpression\"\n );\n};\n\nexport function NullableTypeAnnotation(\n node: t.NullableTypeAnnotation,\n parent: t.Node,\n): boolean {\n return isArrayTypeAnnotation(parent);\n}\n\nexport function FunctionTypeAnnotation(\n node: t.FunctionTypeAnnotation,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n const parentType = parent.type;\n return (\n // (() => A) | (() => B)\n parentType === \"UnionTypeAnnotation\" ||\n // (() => A) & (() => B)\n parentType === \"IntersectionTypeAnnotation\" ||\n // (() => A)[]\n parentType === \"ArrayTypeAnnotation\" ||\n Boolean(tokenContext & TokenContext.arrowFlowReturnType)\n );\n}\n\nexport function UpdateExpression(\n node: t.UpdateExpression,\n parent: t.Node,\n): boolean {\n return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);\n}\n\nfunction needsParenBeforeExpressionBrace(tokenContext: number) {\n return Boolean(\n tokenContext & (TokenContext.expressionStatement | TokenContext.arrowBody),\n );\n}\n\nexport function ObjectExpression(\n node: t.ObjectExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return needsParenBeforeExpressionBrace(tokenContext);\n}\n\nexport function DoExpression(\n node: t.DoExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n // `async do` can start an expression statement\n return (\n !node.async && Boolean(tokenContext & TokenContext.expressionStatement)\n );\n}\n\nexport function Binary(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean | undefined {\n const parentType = parent.type;\n if (\n node.type === \"BinaryExpression\" &&\n node.operator === \"**\" &&\n parentType === \"BinaryExpression\" &&\n parent.operator === \"**\"\n ) {\n return parent.left === node;\n }\n\n if (isClassExtendsClause(node, parent)) {\n return true;\n }\n\n if (\n hasPostfixPart(node, parent) ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"AwaitExpression\"\n ) {\n return true;\n }\n\n const parentPos = getBinaryPrecedence(parent, parentType);\n if (parentPos != null) {\n const nodePos = getBinaryPrecedence(node, node.type);\n if (\n // Logical expressions with the same precedence don't need parens.\n (parentPos === nodePos &&\n parentType === \"BinaryExpression\" &&\n parent.right === node) ||\n parentPos > nodePos\n ) {\n return true;\n }\n }\n\n return undefined;\n}\n\nexport function UnionTypeAnnotation(\n node: t.UnionTypeAnnotation,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"ArrayTypeAnnotation\" ||\n parentType === \"NullableTypeAnnotation\" ||\n parentType === \"IntersectionTypeAnnotation\" ||\n parentType === \"UnionTypeAnnotation\"\n );\n}\n\nexport { UnionTypeAnnotation as IntersectionTypeAnnotation };\n\nexport function OptionalIndexedAccessType(\n node: t.OptionalIndexedAccessType,\n parent: t.Node,\n): boolean {\n return isIndexedAccessType(parent) && parent.objectType === node;\n}\n\nexport function TSAsExpression(\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean {\n if (\n (parent.type === \"AssignmentExpression\" ||\n parent.type === \"AssignmentPattern\") &&\n parent.left === node\n ) {\n return true;\n }\n if (\n parent.type === \"BinaryExpression\" &&\n (parent.operator === \"|\" || parent.operator === \"&\") &&\n node === parent.left\n ) {\n return true;\n }\n return Binary(node, parent);\n}\n\nexport { TSAsExpression as TSSatisfiesExpression };\n\nexport { UnaryLike as TSTypeAssertion };\n\nexport function TSUnionType(node: t.TSUnionType, parent: t.Node): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSArrayType\" ||\n parentType === \"TSOptionalType\" ||\n parentType === \"TSIntersectionType\" ||\n parentType === \"TSRestType\"\n );\n}\n\nexport { TSUnionType as TSIntersectionType };\n\nexport function TSInferType(node: t.TSInferType, parent: t.Node): boolean {\n const parentType = parent.type;\n return parentType === \"TSArrayType\" || parentType === \"TSOptionalType\";\n}\n\nexport function TSInstantiationExpression(\n node: t.TSInstantiationExpression,\n parent: t.Node,\n) {\n const parentType = parent.type;\n return (\n (parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\" ||\n parentType === \"TSInstantiationExpression\") &&\n !!(process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n parent.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n parent.typeParameters)\n );\n}\n\nexport function BinaryExpression(\n node: t.BinaryExpression,\n parent: t.Node,\n tokenContext: unknown,\n inForStatementInit: boolean,\n): boolean {\n // for ((1 in []);;);\n // for (var x = (1 in []) in 2);\n return node.operator === \"in\" && inForStatementInit;\n}\n\nexport function SequenceExpression(\n node: t.SequenceExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"SequenceExpression\" ||\n parentType === \"ParenthesizedExpression\" ||\n (parentType === \"MemberExpression\" && parent.property === node) ||\n (parentType === \"OptionalMemberExpression\" && parent.property === node) ||\n parentType === \"TemplateLiteral\"\n ) {\n return false;\n }\n if (parentType === \"ClassDeclaration\") {\n return true;\n }\n if (parentType === \"ForOfStatement\") {\n return parent.right === node;\n }\n if (parentType === \"ExportDefaultDeclaration\") {\n return true;\n }\n\n return !isStatement(parent);\n}\n\nexport function YieldExpression(\n node: t.YieldExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n hasPostfixPart(node, parent) ||\n (parentType === \"AwaitExpression\" && isYieldExpression(node)) ||\n (parentType === \"ConditionalExpression\" && node === parent.test) ||\n isClassExtendsClause(node, parent) ||\n isTSTypeExpression(parentType)\n );\n}\n\nexport { YieldExpression as AwaitExpression };\n\nexport function ClassExpression(\n node: t.ClassExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function UnaryLike(\n node:\n | t.UnaryLike\n | t.TSTypeAssertion\n | t.ArrowFunctionExpression\n | t.ConditionalExpression\n | t.AssignmentExpression,\n parent: t.Node,\n): boolean {\n return (\n hasPostfixPart(node, parent) ||\n (isBinaryExpression(parent) &&\n parent.operator === \"**\" &&\n parent.left === node) ||\n isClassExtendsClause(node, parent)\n );\n}\n\nexport function FunctionExpression(\n node: t.FunctionExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function ConditionalExpression(\n node:\n | t.ConditionalExpression\n | t.ArrowFunctionExpression\n | t.AssignmentExpression,\n parent?: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n (parentType === \"ConditionalExpression\" && parent.test === node) ||\n parentType === \"AwaitExpression\" ||\n isTSTypeExpression(parentType)\n ) {\n return true;\n }\n\n return UnaryLike(node, parent);\n}\n\nexport { ConditionalExpression as ArrowFunctionExpression };\n\nexport function OptionalMemberExpression(\n node: t.OptionalMemberExpression,\n parent: t.Node,\n): boolean {\n return (\n (isCallExpression(parent) && parent.callee === node) ||\n (isMemberExpression(parent) && parent.object === node)\n );\n}\n\nexport { OptionalMemberExpression as OptionalCallExpression };\n\nexport function AssignmentExpression(\n node: t.AssignmentExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n if (\n needsParenBeforeExpressionBrace(tokenContext) &&\n isObjectPattern(node.left)\n ) {\n return true;\n } else {\n return ConditionalExpression(node, parent);\n }\n}\n\nexport function LogicalExpression(\n node: t.LogicalExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (isTSTypeExpression(parentType)) return true;\n if (parentType !== \"LogicalExpression\") return false;\n switch (node.operator) {\n case \"||\":\n return parent.operator === \"??\" || parent.operator === \"&&\";\n case \"&&\":\n return parent.operator === \"??\";\n case \"??\":\n return parent.operator !== \"??\";\n }\n}\n\nexport function Identifier(\n node: t.Identifier,\n parent: t.Node,\n tokenContext: number,\n _inForInit: boolean,\n getRawIdentifier: (node: t.Identifier) => string,\n): boolean {\n const parentType = parent.type;\n // 13.15.2 AssignmentExpression RS: Evaluation\n // (fn) = function () {};\n if (\n node.extra?.parenthesized &&\n parentType === \"AssignmentExpression\" &&\n parent.left === node\n ) {\n const rightType = parent.right.type;\n if (\n (rightType === \"FunctionExpression\" || rightType === \"ClassExpression\") &&\n parent.right.id == null\n ) {\n return true;\n }\n }\n\n if (getRawIdentifier && getRawIdentifier(node) !== node.name) {\n return false;\n }\n\n // Non-strict code allows the identifier `let`, but it cannot occur as-is in\n // certain contexts to avoid ambiguity with contextual keyword `let`.\n if (node.name === \"let\") {\n // Some contexts only forbid `let [`, so check if the next token would\n // be the left bracket of a computed member expression.\n const isFollowedByBracket =\n isMemberExpression(parent, {\n object: node,\n computed: true,\n }) ||\n isOptionalMemberExpression(parent, {\n object: node,\n computed: true,\n optional: false,\n });\n if (\n isFollowedByBracket &&\n tokenContext &\n (TokenContext.expressionStatement |\n TokenContext.forHead |\n TokenContext.forInHead)\n ) {\n return true;\n }\n return Boolean(tokenContext & TokenContext.forOfHead);\n }\n\n // ECMAScript specifically forbids a for-of loop from starting with the\n // token sequence `for (async of`, because it would be ambiguous with\n // `for (async of => {};;)`, so we need to add extra parentheses.\n return (\n node.name === \"async\" &&\n isForOfStatement(parent, { left: node, await: false })\n );\n}\n","import {\n FLIPPED_ALIAS_KEYS,\n isArrayExpression,\n isAssignmentExpression,\n isBinary,\n isBlockStatement,\n isCallExpression,\n isFunction,\n isIdentifier,\n isLiteral,\n isMemberExpression,\n isObjectExpression,\n isOptionalCallExpression,\n isOptionalMemberExpression,\n isStringLiteral,\n} from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nimport type { NodeHandlers } from \"./index.ts\";\n\nimport type * as t from \"@babel/types\";\n\nconst enum WhitespaceFlag {\n before = 1 << 0,\n after = 1 << 1,\n}\n\nexport type { WhitespaceFlag };\n\nfunction crawlInternal(\n node: t.Node,\n state: { hasCall: boolean; hasFunction: boolean; hasHelper: boolean },\n) {\n if (!node) return state;\n\n if (isMemberExpression(node) || isOptionalMemberExpression(node)) {\n crawlInternal(node.object, state);\n if (node.computed) crawlInternal(node.property, state);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n crawlInternal(node.left, state);\n crawlInternal(node.right, state);\n } else if (isCallExpression(node) || isOptionalCallExpression(node)) {\n state.hasCall = true;\n crawlInternal(node.callee, state);\n } else if (isFunction(node)) {\n state.hasFunction = true;\n } else if (isIdentifier(node)) {\n state.hasHelper =\n // @ts-expect-error todo(flow->ts): node.callee is not really expected here…\n state.hasHelper || (node.callee && isHelper(node.callee));\n }\n\n return state;\n}\n\n/**\n * Crawl a node to test if it contains a CallExpression, a Function, or a Helper.\n *\n * @example\n * crawl(node)\n * // { hasCall: false, hasFunction: true, hasHelper: false }\n */\n\nfunction crawl(node: t.Node) {\n return crawlInternal(node, {\n hasCall: false,\n hasFunction: false,\n hasHelper: false,\n });\n}\n\n/**\n * Test if a node is or has a helper.\n */\n\nfunction isHelper(node: t.Node): boolean {\n if (!node) return false;\n\n if (isMemberExpression(node)) {\n return isHelper(node.object) || isHelper(node.property);\n } else if (isIdentifier(node)) {\n return (\n node.name === \"require\" ||\n node.name.charCodeAt(0) === charCodes.underscore\n );\n } else if (isCallExpression(node)) {\n return isHelper(node.callee);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n return (\n (isIdentifier(node.left) && isHelper(node.left)) || isHelper(node.right)\n );\n } else {\n return false;\n }\n}\n\nfunction isType(node: t.Node) {\n return (\n isLiteral(node) ||\n isObjectExpression(node) ||\n isArrayExpression(node) ||\n isIdentifier(node) ||\n isMemberExpression(node)\n );\n}\n\n/**\n * Tests for node types that need whitespace.\n */\n\nexport const nodes: NodeHandlers = {\n /**\n * Test if AssignmentExpression needs whitespace.\n */\n\n AssignmentExpression(node: t.AssignmentExpression): WhitespaceFlag {\n const state = crawl(node.right);\n if ((state.hasCall && state.hasHelper) || state.hasFunction) {\n return state.hasFunction\n ? WhitespaceFlag.before | WhitespaceFlag.after\n : WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if SwitchCase needs whitespace.\n */\n\n SwitchCase(node: t.SwitchCase, parent: t.SwitchStatement): WhitespaceFlag {\n return (\n (!!node.consequent.length || parent.cases[0] === node\n ? WhitespaceFlag.before\n : 0) |\n (!node.consequent.length && parent.cases[parent.cases.length - 1] === node\n ? WhitespaceFlag.after\n : 0)\n );\n },\n\n /**\n * Test if LogicalExpression needs whitespace.\n */\n\n LogicalExpression(node: t.LogicalExpression): WhitespaceFlag {\n if (isFunction(node.left) || isFunction(node.right)) {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if Literal needs whitespace.\n */\n\n Literal(node: t.Literal): WhitespaceFlag {\n if (isStringLiteral(node) && node.value === \"use strict\") {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if CallExpressionish needs whitespace.\n */\n\n CallExpression(node: t.CallExpression): WhitespaceFlag {\n if (isFunction(node.callee) || isHelper(node)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n OptionalCallExpression(node: t.OptionalCallExpression): WhitespaceFlag {\n if (isFunction(node.callee)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if VariableDeclaration needs whitespace.\n */\n\n VariableDeclaration(node: t.VariableDeclaration): WhitespaceFlag {\n for (let i = 0; i < node.declarations.length; i++) {\n const declar = node.declarations[i];\n\n let enabled = isHelper(declar.id) && !isType(declar.init);\n if (!enabled && declar.init) {\n const state = crawl(declar.init);\n enabled = (isHelper(declar.init) && state.hasCall) || state.hasFunction;\n }\n\n if (enabled) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n }\n },\n\n /**\n * Test if IfStatement needs whitespace.\n */\n\n IfStatement(node: t.IfStatement): WhitespaceFlag {\n if (isBlockStatement(node.consequent)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n};\n\n/**\n * Test if Property needs whitespace.\n */\n\nnodes.ObjectProperty =\n nodes.ObjectTypeProperty =\n nodes.ObjectMethod =\n function (\n node: t.ObjectProperty | t.ObjectTypeProperty | t.ObjectMethod,\n parent: t.ObjectExpression,\n ): WhitespaceFlag {\n if (parent.properties[0] === node) {\n return WhitespaceFlag.before;\n }\n };\n\nnodes.ObjectTypeCallProperty = function (\n node: t.ObjectTypeCallProperty,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (parent.callProperties[0] === node && !parent.properties?.length) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeIndexer = function (\n node: t.ObjectTypeIndexer,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.indexers[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeInternalSlot = function (\n node: t.ObjectTypeInternalSlot,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.internalSlots[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length &&\n !parent.indexers?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\n/**\n * Add whitespace tests for nodes and their aliases.\n */\n\n(\n [\n [\"Function\", true],\n [\"Class\", true],\n [\"Loop\", true],\n [\"LabeledStatement\", true],\n [\"SwitchStatement\", true],\n [\"TryStatement\", true],\n ] as const\n).forEach(function ([type, amounts]) {\n [type as string]\n .concat(FLIPPED_ALIAS_KEYS[type] || [])\n .forEach(function (type) {\n const ret = amounts ? WhitespaceFlag.before | WhitespaceFlag.after : 0;\n nodes[type] = () => ret;\n });\n});\n","import Buffer, { type Pos } from \"./buffer.ts\";\nimport type { Loc } from \"./buffer.ts\";\nimport * as n from \"./node/index.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n isExpression,\n isFunction,\n isStatement,\n isClassBody,\n isTSInterfaceBody,\n isTSEnumMember,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport { TokenMap } from \"./token-map.ts\";\nimport type { GeneratorOptions } from \"./index.ts\";\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport {\n addDeprecatedGenerators,\n type DeprecatedBabel7ASTTypes,\n} from \"./generators/deprecated.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\nimport type { Token } from \"@babel/parser\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nconst SCIENTIFIC_NOTATION = /e/i;\nconst ZERO_DECIMAL_INTEGER = /\\.0+$/;\nconst HAS_NEWLINE = /[\\n\\r\\u2028\\u2029]/;\nconst HAS_NEWLINE_OR_BlOCK_COMMENT_END = /[\\n\\r\\u2028\\u2029]|\\*\\//;\n\nfunction commentIsNewline(c: t.Comment) {\n return c.type === \"CommentLine\" || HAS_NEWLINE.test(c.value);\n}\n\nconst { needsParens } = n;\n\nconst enum COMMENT_TYPE {\n LEADING,\n INNER,\n TRAILING,\n}\n\nconst enum COMMENT_SKIP_NEWLINE {\n DEFAULT,\n ALL,\n LEADING,\n TRAILING,\n}\n\nconst enum PRINT_COMMENT_HINT {\n SKIP,\n ALLOW,\n DEFER,\n}\n\nexport type Format = {\n shouldPrintComment: (comment: string) => boolean;\n preserveFormat: boolean;\n retainLines: boolean;\n retainFunctionParens: boolean;\n comments: boolean;\n auxiliaryCommentBefore: string;\n auxiliaryCommentAfter: string;\n compact: boolean | \"auto\";\n minified: boolean;\n concise: boolean;\n indent: {\n adjustMultilineComment: boolean;\n style: string;\n };\n /**\n * @deprecated Removed in Babel 8, syntax type is always 'hash'\n */\n recordAndTupleSyntaxType?: GeneratorOptions[\"recordAndTupleSyntaxType\"];\n jsescOption: jsescOptions;\n /**\n * @deprecated Removed in Babel 8, use `jsescOption` instead\n */\n jsonCompatibleStrings?: boolean;\n /**\n * For use with the Hack-style pipe operator.\n * Changes what token is used for pipe bodies’ topic references.\n */\n topicToken?: GeneratorOptions[\"topicToken\"];\n /**\n * @deprecated Removed in Babel 8\n */\n decoratorsBeforeExport?: boolean;\n /**\n * The import attributes syntax style:\n * - \"with\" : `import { a } from \"b\" with { type: \"json\" };`\n * - \"assert\" : `import { a } from \"b\" assert { type: \"json\" };`\n * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n */\n importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n};\n\ninterface AddNewlinesOptions {\n addNewlines(leading: boolean, node: t.Node): number;\n nextNodeStartLine: number;\n}\n\ninterface PrintSequenceOptions extends Partial {\n statement?: boolean;\n indent?: boolean;\n trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n separator?: (this: Printer, occurrenceCount: number, last: boolean) => void;\n iterator?: (node: t.Node, index: number) => void;\n statement?: boolean;\n indent?: boolean;\n printTrailingSeparator?: boolean;\n}\n\nexport type PrintJoinOptions = PrintListOptions & PrintSequenceOptions;\nclass Printer {\n constructor(\n format: Format,\n map: SourceMap,\n tokens?: Token[],\n originalCode?: string,\n ) {\n this.format = format;\n\n this._tokens = tokens;\n this._originalCode = originalCode;\n\n this._indentRepeat = format.indent.style.length;\n\n this._inputMap = map?._inputMap;\n\n this._buf = new Buffer(map, format.indent.style[0]);\n }\n declare _inputMap: TraceMap;\n\n declare format: Format;\n\n inForStatementInit: boolean = false;\n enterForStatementInit() {\n if (this.inForStatementInit) return () => {};\n this.inForStatementInit = true;\n return () => {\n this.inForStatementInit = false;\n };\n }\n\n enterDelimited() {\n const oldInForStatementInit = this.inForStatementInit;\n const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n if (\n oldInForStatementInit === false &&\n oldNoLineTerminatorAfterNode === null\n ) {\n return () => {};\n }\n this.inForStatementInit = false;\n this._noLineTerminatorAfterNode = null;\n return () => {\n this.inForStatementInit = oldInForStatementInit;\n this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n };\n }\n\n tokenContext: number = 0;\n\n _tokens: Token[] = null;\n _originalCode: string | null = null;\n\n declare _buf: Buffer;\n _currentNode: t.Node = null;\n _indent: number = 0;\n _indentRepeat: number = 0;\n _insideAux: boolean = false;\n _noLineTerminator: boolean = false;\n _noLineTerminatorAfterNode: t.Node | null = null;\n _printAuxAfterOnNextUserNode: boolean = false;\n _printedComments = new Set();\n _endsWithInteger = false;\n _endsWithWord = false;\n _endsWithDiv = false;\n _lastCommentLine = 0;\n _endsWithInnerRaw: boolean = false;\n _indentInnerComments: boolean = true;\n tokenMap: TokenMap = null;\n\n _boundGetRawIdentifier = this._getRawIdentifier.bind(this);\n\n generate(ast: t.Node) {\n if (this.format.preserveFormat) {\n this.tokenMap = new TokenMap(ast, this._tokens, this._originalCode);\n }\n this.print(ast);\n this._maybeAddAuxComment();\n\n return this._buf.get();\n }\n\n /**\n * Increment indent size.\n */\n\n indent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent++;\n }\n\n /**\n * Decrement indent size.\n */\n\n dedent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent--;\n }\n\n /**\n * If the next token is on the same line, we must first print a semicolon.\n * This option is only used in `preserveFormat` node, for semicolons that\n * might have omitted due to them being absent in the original code (thanks\n * to ASI).\n *\n * We need both *NextToken and *NextNode because we only want to insert the\n * semicolon when the next token starts a new node, and not in cases like\n * foo} (where } is not starting a new node). So we first set *NextNode, and\n * then the print() method will move it to *NextToken.\n */\n _printSemicolonBeforeNextNode: number = -1;\n _printSemicolonBeforeNextToken: number = -1;\n\n /**\n * Add a semicolon to the buffer.\n */\n semicolon(force: boolean = false): void {\n this._maybeAddAuxComment();\n if (force) {\n this._appendChar(charCodes.semicolon);\n this._noLineTerminator = false;\n return;\n }\n if (this.tokenMap) {\n const node = this._currentNode;\n if (node.start != null && node.end != null) {\n if (!this.tokenMap.endMatches(node, \";\")) {\n // no semicolon\n this._printSemicolonBeforeNextNode = this._buf.getCurrentLine();\n return;\n }\n const indexes = this.tokenMap.getIndexes(this._currentNode);\n this._catchUpTo(this._tokens[indexes[indexes.length - 1]].loc.start);\n }\n }\n this._queue(charCodes.semicolon);\n this._noLineTerminator = false;\n }\n\n /**\n * Add a right brace to the buffer.\n */\n\n rightBrace(node: t.Node): void {\n if (this.format.minified) {\n this._buf.removeLastSemicolon();\n }\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\"}\");\n }\n\n rightParens(node: t.Node): void {\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\")\");\n }\n\n /**\n * Add a space to the buffer unless it is compact.\n */\n\n space(force: boolean = false): void {\n const { format } = this;\n if (format.compact || format.preserveFormat) return;\n\n if (force) {\n this._space();\n } else if (this._buf.hasContent()) {\n const lastCp = this.getLastChar();\n if (lastCp !== charCodes.space && lastCp !== charCodes.lineFeed) {\n this._space();\n }\n }\n }\n\n /**\n * Writes a token that can't be safely parsed without taking whitespace into account.\n */\n\n word(str: string, noLineTerminatorAfter: boolean = false): void {\n this.tokenContext = 0;\n\n this._maybePrintInnerComments(str);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str);\n\n // prevent concatenating words and creating // comment out of division and regex\n if (\n this._endsWithWord ||\n (this._endsWithDiv && str.charCodeAt(0) === charCodes.slash)\n ) {\n this._space();\n }\n this._append(str, false);\n\n this._endsWithWord = true;\n this._noLineTerminator = noLineTerminatorAfter;\n }\n\n /**\n * Writes a number token so that we can validate if it is an integer.\n */\n\n number(str: string, number?: number): void {\n // const NON_DECIMAL_LITERAL = /^0[box]/;\n function isNonDecimalLiteral(str: string) {\n if (str.length > 2 && str.charCodeAt(0) === charCodes.digit0) {\n const secondChar = str.charCodeAt(1);\n return (\n secondChar === charCodes.lowercaseB ||\n secondChar === charCodes.lowercaseO ||\n secondChar === charCodes.lowercaseX\n );\n }\n return false;\n }\n this.word(str);\n\n // Integer tokens need special handling because they cannot have '.'s inserted\n // immediately after them.\n this._endsWithInteger =\n Number.isInteger(number) &&\n !isNonDecimalLiteral(str) &&\n !SCIENTIFIC_NOTATION.test(str) &&\n !ZERO_DECIMAL_INTEGER.test(str) &&\n str.charCodeAt(str.length - 1) !== charCodes.dot;\n }\n\n /**\n * Writes a simple token.\n *\n * @param {string} str The string to append.\n * @param {boolean} [maybeNewline=false] Wether `str` might potentially\n * contain a line terminator or not.\n * @param {number} [occurrenceCount=0] The occurrence count of this token in\n * the current node. This is used when printing in `preserveFormat` mode,\n * to know which token we should map to (for example, to disambiguate the\n * commas in an array literal).\n */\n token(str: string, maybeNewline = false, occurrenceCount = 0): void {\n this.tokenContext = 0;\n\n this._maybePrintInnerComments(str, occurrenceCount);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str, occurrenceCount);\n\n const lastChar = this.getLastChar();\n const strFirst = str.charCodeAt(0);\n if (\n (lastChar === charCodes.exclamationMark &&\n // space is mandatory to avoid outputting ` line comment\n const comment = this.skipLineComment(3);\n if (comment !== undefined) {\n this.addComment(comment);\n comments?.push(comment);\n }\n } else {\n break loop;\n }\n } else if (\n ch === charCodes.lessThan &&\n !this.inModule &&\n this.optionFlags & OptionFlags.AnnexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n this.input.charCodeAt(pos + 2) === charCodes.dash &&\n this.input.charCodeAt(pos + 3) === charCodes.dash\n ) {\n // `', i + 4, 'Comment is not closed.');\n i = endIndex;\n } else {\n const result = readTagExp(xmlData, i, false);\n let tagName = result.tagName;\n let tagExp = result.tagExp;\n const attrExpPresent = result.attrExpPresent;\n const closeIndex = result.closeIndex;\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? '.' + tagName : tagName;\n }\n if (tagExp.length > 0 && tagExp.lastIndexOf('/') === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === '/') {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n const childNode = new XmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf('.'));\n } else {\n const childNode = new XmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[':@'] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = '';\n i = closeIndex;\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n }\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\n/**\n *\n * @param {array} node\n * @param {any} options\n * @returns\n */\nexport function prettify(node: any, options: any) {\n return compress(node);\n}\n\n/**\n *\n * @param {array} arr\n * @param {object} options\n * @param {string} jPath\n * @returns object\n */\nfunction compress(arr: any, jPath?: any) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = '';\n if (jPath === undefined) {\n newJpath = property;\n } else {\n newJpath = jPath + '.' + property;\n }\n\n if (property === undefined) {\n continue;\n } else if (tagObj[property]) {\n const val = compress(tagObj[property], newJpath);\n const isLeaf = isLeafTag(val);\n\n if (tagObj[':@']) {\n assignAttributes(val, tagObj[':@'], newJpath);\n }\n\n if (compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val);\n } else {\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n compressedObj[property] = val;\n }\n }\n }\n return compressedObj;\n}\n\nfunction propName(obj: any) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== ':@') {\n return key;\n }\n }\n}\n\nfunction assignAttributes(obj: any, attrMap: any, jpath: any) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n obj[atrrName] = attrMap[atrrName];\n }\n }\n}\n\nfunction isLeafTag(obj: any) {\n const propCount = Object.keys(obj).length;\n\n if (propCount === 0) {\n return true;\n }\n\n return false;\n}\n","// 参考fast-xml-parser\n// https://github.com/NaturalIntelligence/fast-xml-parser\n/**\n * MIT License\n\nCopyright (c) 2017 Amit Kumar Gupta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n */\n\nimport { OrderedObjParser } from './OrderedObjParser';\nimport { prettify } from './node2json';\nimport type { X2jOptions } from './type';\n\nexport class XMLParser {\n static defaultOptions: Partial = {};\n options: Partial;\n\n constructor(options?: Partial) {\n this.options = Object.assign({}, XMLParser.defaultOptions, options);\n }\n\n valid(xml: string) {\n return xml.startsWith('<');\n }\n\n parse(xmlData: string): any {\n if (!this.valid) {\n return false;\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n return prettify(orderedResult, this.options);\n }\n}\n\nexport function isSvg(str: string) {\n return str.startsWith(',\n aabbBounds: IAABBBounds\n): IAABBBounds => {\n const {\n outerBorder,\n shadowBlur = symbolTheme.shadowBlur,\n strokeBoundsBuffer = symbolTheme.strokeBoundsBuffer\n } = attribute;\n\n if (outerBorder) {\n const defaultOuterBorder = symbolTheme.outerBorder;\n const { distance = defaultOuterBorder.distance, lineWidth = defaultOuterBorder.lineWidth } = outerBorder;\n\n // Symbol的distance一定是number\n boundStroke(aabbBounds, (distance as number) + (shadowBlur + lineWidth) / 2, true, strokeBoundsBuffer);\n }\n return aabbBounds;\n};\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { isArray, max } from '@visactor/vutils';\nimport type { ISymbol, ISymbolClass, ISymbolGraphicAttribute } from '../interface';\nimport { builtinSymbolsMap, builtInSymbolStrMap, CustomSymbolClass } from './builtin-symbol';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { SVG_PARSE_ATTRIBUTE_MAP, SVG_PARSE_ATTRIBUTE_MAP_KEYS, SYMBOL_NUMBER_TYPE } from './constants';\nimport { XMLParser } from '../common/xml';\nimport { isSvg } from '../common/xml/parser';\nimport { updateBoundsOfSymbolOuterBorder } from './graphic-service/symbol-outer-border-bounds';\n\nconst _tempBounds = new AABBBounds();\n\nconst SYMBOL_UPDATE_TAG_KEY = ['symbolType', 'size', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * symbol\n */\nexport class Symbol extends Graphic implements ISymbol {\n type: 'symbol' = 'symbol';\n\n static userSymbolMap: Record = {};\n\n static NOWORK_ANIMATE_ATTR = {\n symbolType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: ISymbolGraphicAttribute = { symbolType: 'circle' }) {\n super(params);\n this.numberType = SYMBOL_NUMBER_TYPE;\n }\n\n protected _parsedPath?: ISymbolClass;\n\n getParsedPath(): ISymbolClass {\n if (this.shouldUpdateShape()) {\n this.doUpdateParsedPath();\n this.clearUpdateShapeTag();\n }\n return this._parsedPath as ISymbolClass;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { size } = this.attribute;\n return isArray(size) ? size.length === 2 && size.every(this._validNumber) : this._validNumber(size);\n }\n\n protected doUpdateParsedPath(): ISymbolClass {\n const symbolTheme = this.getGraphicTheme();\n // 查找内置symbol\n let { symbolType = symbolTheme.symbolType } = this.attribute;\n let path = builtinSymbolsMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n path = Symbol.userSymbolMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n\n const _symbolType = builtInSymbolStrMap[symbolType];\n symbolType = _symbolType || symbolType;\n // 判断是否是svg\n const valid = isSvg(symbolType);\n if (valid === true) {\n const parser = new XMLParser();\n const { svg } = parser.parse(symbolType);\n if (!svg) {\n return null;\n }\n const path = isArray(svg.path) ? svg.path : [svg.path];\n _tempBounds.clear();\n const cacheList: { path: CustomPath2D; attribute: Record }[] = [];\n path.forEach((item: any) => {\n const cache = new CustomPath2D().fromString(item.d);\n const attribute: any = {};\n SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach(k => {\n if (item[k]) {\n (attribute as any)[(SVG_PARSE_ATTRIBUTE_MAP as any)[k]] = item[k];\n }\n });\n // 查找\n cacheList.push({\n path: cache,\n attribute\n });\n _tempBounds.union(cache.bounds);\n });\n const width = _tempBounds.width();\n const height = _tempBounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cacheList.forEach(cache => cache.path.transform(0, 0, scale, scale));\n\n this._parsedPath = new CustomSymbolClass(symbolType, cacheList, true);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n const cache = new CustomPath2D().fromString(symbolType);\n const width = cache.bounds.width();\n const height = cache.bounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cache.transform(0, 0, scale, scale);\n this._parsedPath = new CustomSymbolClass(symbolType, cache);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).symbol;\n }\n\n protected updateAABBBounds(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds,\n full?: boolean\n ) {\n if (!this.updatePathProxyAABBBounds(aabbBounds)) {\n full\n ? this.updateSymbolAABBBoundsImprecise(attribute, symbolTheme, aabbBounds)\n : this.updateSymbolAABBBoundsAccurate(attribute, symbolTheme, aabbBounds);\n }\n\n const { tb1, tb2 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n updateBoundsOfSymbolOuterBorder(attribute, symbolTheme, tb1);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n\n const { lineJoin = symbolTheme.lineJoin } = attribute;\n application.graphicService.transformAABBBounds(attribute, aabbBounds, symbolTheme, lineJoin === 'miter', this);\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsImprecise(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds\n ): IAABBBounds {\n // 当做正方形计算\n const { size = symbolTheme.size } = attribute;\n\n if (isArray(size)) {\n aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);\n } else {\n const halfWH = size / 2;\n\n aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);\n }\n\n return aabbBounds;\n }\n\n protected updateSymbolAABBBoundsAccurate(\n attribute: ISymbolGraphicAttribute,\n symbolTheme: Required,\n aabbBounds: IAABBBounds\n ): IAABBBounds {\n const { size = symbolTheme.size } = attribute;\n\n const symbolClass = this.getParsedPath();\n symbolClass.bounds(size, aabbBounds);\n\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, SYMBOL_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, SYMBOL_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const symbolInstance = this.getParsedPath();\n const size = this.attribute.size;\n const x = 0;\n const y = 0;\n const formattedSize = isArray(size) ? size : [size, size];\n\n return symbolInstance.path\n ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, x, y, formattedSize[0], formattedSize[1])\n : new CustomPath2D().fromString(symbolInstance.pathStr, x, y, formattedSize[0], formattedSize[1]);\n }\n\n clone() {\n return new Symbol({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Symbol.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createSymbol(attributes: ISymbolGraphicAttribute): ISymbol {\n return new Symbol(attributes);\n}\n\n// addAttributeToPrototype(DefaultSymbolStyle, Symbol, PURE_STYLE_KEY);\n","import { createSymbol } from '../graphic/symbol';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerSymbolGraphic() {\n graphicCreator.RegisterGraphicCreator('symbol', createSymbol);\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext,\n IBorderStyle,\n IBaseRenderContribution,\n ICustomPath2D\n} from '../../../../interface';\nimport { getScaledStroke } from '../../../../common/canvas-utils';\nimport { defaultBaseBackgroundRenderContribution } from './base-contribution-render';\nimport { BaseRenderContributionTime } from '../../../../common/enums';\nimport { defaultBaseTextureRenderContribution } from './base-texture-contribution-render';\n\nexport class DefaultSymbolRenderContribution implements ISymbolRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n symbolAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { outerBorder, innerBorder } = symbol.attribute;\n const doOuterBorder = outerBorder && outerBorder.visible !== false;\n const doInnerBorder = innerBorder && innerBorder.visible !== false;\n if (!(doOuterBorder || doInnerBorder)) {\n return;\n }\n\n const {\n size = symbolAttribute.size,\n opacity = symbolAttribute.opacity,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY,\n keepStrokeScale = symbolAttribute.keepStrokeScale\n } = symbol.attribute;\n\n const renderBorder = (borderStyle: Partial, key: 'outerBorder' | 'innerBorder') => {\n const doStroke = !!(borderStyle && borderStyle.stroke);\n\n const { distance = symbolAttribute[key].distance } = borderStyle;\n const d = keepStrokeScale ? (distance as number) : getScaledStroke(context, distance as number, context.dpr);\n const sign = key === 'outerBorder' ? 1 : -1;\n\n context.beginPath();\n if (parsedPath.drawOffset(context, size, x, y, sign * d) === false) {\n context.closePath();\n }\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n if (strokeCb) {\n strokeCb(context, borderStyle, symbolAttribute[key]);\n } else if (doStroke) {\n // 存在stroke\n const lastOpacity = (symbolAttribute[key] as any).opacity;\n (symbolAttribute[key] as any).opacity = opacity;\n context.setStrokeStyle(\n symbol,\n borderStyle,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute[key] as any\n );\n (symbolAttribute[key] as any).opacity = lastOpacity;\n context.stroke();\n }\n };\n\n doOuterBorder && renderBorder(outerBorder, 'outerBorder');\n doInnerBorder && renderBorder(innerBorder, 'innerBorder');\n }\n}\n\nexport class DefaultSymbolClipRangeStrokeRenderContribution\n implements IBaseRenderContribution\n{\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n\n drawShape(\n graphic: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ) {\n const {\n clipRange = graphicAttribute.clipRange,\n x: originX = graphicAttribute.x,\n y: originY = graphicAttribute.y,\n z = graphicAttribute.z,\n size = graphicAttribute.size,\n scaleX = graphicAttribute.scaleX,\n scaleY = graphicAttribute.scaleY\n } = graphic.attribute;\n const parsedPath = graphic.getParsedPath();\n // todo: 考虑使用path\n if (!(parsedPath && clipRange < 1 && clipRange > 0)) {\n return;\n }\n\n const callback = (p: ICustomPath2D, a: any) => {\n // 如果是svg的话,合并一下fill和stroke\n if (graphic._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? graphic.attribute.fill;\n obj.opacity = a.opacity ?? graphic.attribute.opacity;\n obj.fillOpacity = graphic.attribute.fillOpacity;\n obj.stroke = a.stroke ?? graphic.attribute.stroke;\n obj.lineWidth = a.lineWidth ?? graphic.attribute.lineWidth;\n a = obj;\n }\n\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, graphic.attribute, graphicAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(graphic, a, (originX - x) / scaleX, (originY - y) / scaleY, graphicAttribute);\n context.stroke();\n }\n }\n };\n\n context.beginPath();\n parsedPath.drawWithClipRange && parsedPath.drawWithClipRange(context, size, x, y, clipRange, z, callback);\n\n if (doStroke && !parsedPath.isSvg) {\n if (strokeCb) {\n strokeCb(context, graphic.attribute, graphicAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(\n graphic,\n graphic.attribute,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n graphicAttribute\n );\n context.stroke();\n }\n }\n }\n}\n\nexport const defaultSymbolRenderContribution = new DefaultSymbolRenderContribution();\nexport const defaultSymbolClipRangeStrokeRenderContribution = new DefaultSymbolClipRangeStrokeRenderContribution();\nexport const defaultSymbolTextureRenderContribution = defaultBaseTextureRenderContribution;\nexport const defaultSymbolBackgroundRenderContribution = defaultBaseBackgroundRenderContribution;\n","import { inject, injectable, named } from '../../../common/inversify-lite';\n// eslint-disable-next-line\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { getTheme } from '../../../graphic/theme';\nimport { SYMBOL_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n ISymbolRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n ICustomPath2D\n} from '../../../interface';\nimport type {} from '../../render-service';\nimport { BaseRender } from './base-render';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { isArray } from '@visactor/vutils';\nimport {\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolClipRangeStrokeRenderContribution,\n defaultSymbolRenderContribution,\n defaultSymbolTextureRenderContribution\n} from './contributions';\n\n@injectable()\nexport class DefaultCanvasSymbolRender extends BaseRender implements IGraphicRender {\n type: 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(SymbolRenderContribution)\n protected readonly symbolRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [\n defaultSymbolRenderContribution,\n defaultSymbolBackgroundRenderContribution,\n defaultSymbolTextureRenderContribution,\n defaultSymbolClipRangeStrokeRenderContribution\n ];\n this.init(symbolRenderContribitions);\n }\n\n drawShape(\n symbol: ISymbol,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n\n const {\n size = symbolAttribute.size,\n x: originX = symbolAttribute.x,\n y: originY = symbolAttribute.y,\n scaleX = symbolAttribute.scaleX,\n scaleY = symbolAttribute.scaleY,\n fillStrokeOrder = symbolAttribute.fillStrokeOrder,\n clipRange = symbolAttribute.clipRange\n } = symbol.attribute;\n\n const data = this.valid(symbol, symbolAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n const parsedPath = symbol.getParsedPath();\n // todo: 考虑使用path\n if (!parsedPath) {\n return;\n }\n\n const { keepDirIn3d = symbolAttribute.keepDirIn3d } = symbol.attribute;\n const z = this.z ?? 0;\n context.beginPath();\n\n const callback = (p: ICustomPath2D, a: any) => {\n // 如果是svg的话,合并一下fill和stroke\n if (symbol._parsedPath.svgCache) {\n const obj = Object.assign({}, a);\n obj.fill = a.fill ?? symbol.attribute.fill;\n obj.opacity = a.opacity ?? symbol.attribute.opacity;\n obj.fillOpacity = symbol.attribute.fillOpacity;\n obj.stroke = a.stroke ?? symbol.attribute.stroke;\n obj.lineWidth = a.lineWidth ?? symbol.attribute.lineWidth;\n a = obj;\n }\n const _runFill = () => {\n if (a.fill) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else {\n context.setCommonStyle(symbol, a, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n };\n const _runStroke = () => {\n if (a.stroke) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else if (sVisible && clipRange >= 1) {\n context.setStrokeStyle(symbol, a, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);\n context.stroke();\n }\n }\n };\n if (!fillStrokeOrder) {\n _runFill();\n _runStroke();\n } else {\n _runStroke();\n _runFill();\n }\n };\n let _size = size;\n let _x = x;\n let _y = y;\n let _z = z;\n const camera = context.camera;\n if (keepDirIn3d && camera && context.project) {\n const p = context.project(x, y, z);\n context.camera = null;\n _size = isArray(size) ? [size[0] * scaleX, size[1] * scaleY] : size * scaleX;\n _x = p.x;\n _y = p.y;\n _z = undefined;\n }\n if (parsedPath.draw(context, size, _x, _y, _z, callback) === false) {\n context.closePath();\n }\n context.camera = camera;\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);\n\n this.beforeRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n // if (fill !== false) {\n // context.setCommonStyle(symbol.attribute, symbolAttribute);\n // context.fill();\n // }\n // if (stroke !== false) {\n // context.setStrokeStyle(symbol.attribute, symbolAttribute);\n // context.stroke();\n // }\n\n // svg就不用fill和stroke了\n const _runFill = () => {\n if (doFill && !parsedPath.isSvg) {\n if (fillCb) {\n fillCb(context, symbol.attribute, symbolAttribute);\n } else if (fVisible) {\n context.setCommonStyle(symbol, symbol.attribute, originX - x, originY - y, symbolAttribute);\n context.fill();\n }\n }\n };\n const _runStroke = () => {\n if (doStroke && !parsedPath.isSvg) {\n if (strokeCb) {\n strokeCb(context, symbol.attribute, symbolAttribute);\n } else if (sVisible && clipRange >= 1) {\n // 如果clipRange < 1,就需要靠afterRender进行绘制了\n context.setStrokeStyle(\n symbol,\n symbol.attribute,\n (originX - x) / scaleX,\n (originY - y) / scaleY,\n symbolAttribute\n );\n context.stroke();\n }\n }\n };\n\n if (!fillStrokeOrder) {\n _runFill();\n _runStroke();\n } else {\n _runStroke();\n _runFill();\n }\n\n this.afterRenderStep(\n symbol,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n symbolAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(symbol: ISymbol, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const symbolAttribute = getTheme(symbol, params?.theme).symbol;\n this._draw(symbol, symbolAttribute, false, drawContext, params);\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { SymbolRenderContribution } from './contributions/constants';\nimport { GraphicRender, SymbolRender } from './symbol';\nimport { DefaultCanvasSymbolRender } from './symbol-render';\n\nlet loadSymbolModule = false;\nexport const symbolModule = new ContainerModule(bind => {\n if (loadSymbolModule) {\n return;\n }\n loadSymbolModule = true;\n // symbol渲染器\n bind(DefaultCanvasSymbolRender).toSelf().inSingletonScope();\n bind(SymbolRender).to(DefaultCanvasSymbolRender).inSingletonScope();\n bind(GraphicRender).toService(SymbolRender);\n bind(SymbolRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n // symbol 渲染器注入contributions\n bindContributionProvider(bind, SymbolRenderContribution);\n});\n","import {\n inject,\n injectable,\n SymbolRender,\n mat4Allocate,\n getScaledStroke,\n SYMBOL_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n ISymbol,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { Base3dPicker } from '../common/base-3d-picker';\n\n@injectable()\nexport class DefaultCanvasSymbolPicker extends Base3dPicker implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(symbol: ISymbol, point: IPoint, params?: IPickParams): boolean {\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const parsedPath = symbol.getParsedPath();\n if (!pickContext.camera) {\n if (!symbol.AABBBounds.containsPoint(point)) {\n return false;\n }\n if (parsedPath.isSvg || symbol.attribute.pickMode === 'imprecise') {\n return true;\n }\n }\n\n pickContext.highPerformanceSave();\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n const symbolAttribute = symbol.getGraphicTheme();\n\n const data = this.transform(symbol, symbolAttribute, pickContext);\n const { x, y, z, lastModelMatrix } = data;\n // let { x = symbolAttribute.x, y = symbolAttribute.y } = symbol.attribute;\n\n // pickContext.highPerformanceSave();\n // if (!symbol.transMatrix.onlyTranslate()) {\n // // 性能较差\n // x = 0;\n // y = 0;\n // pickContext.transformFromMatrix(symbol.transMatrix, true);\n // } else {\n // const point = symbol.getOffsetXY(symbolAttribute);\n // x += point.x;\n // y += point.y;\n // // 当前context有rotate/scale,重置matrix\n // pickContext.setTransformForCurrent();\n // }\n\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = symbol.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n this.canvasRenderer.z = z;\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n symbol,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n const pickStrokeBuffer = symbolAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer;\n const keepStrokeScale = symbolAttribute.keepStrokeScale || themeAttribute.keepStrokeScale;\n pickContext.lineWidth = keepStrokeScale\n ? lineWidth + pickStrokeBuffer\n : getScaledStroke(pickContext, lineWidth + pickStrokeBuffer, pickContext.dpr);\n picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasPickerContribution, CanvasSymbolPicker } from '../constants';\nimport { DefaultCanvasSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(CanvasSymbolPicker).to(DefaultCanvasSymbolPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasSymbolPicker);\n});\n","import { inject, injectable, SymbolRender, SYMBOL_NUMBER_TYPE } from '@visactor/vrender-core';\n\nimport type { IGraphicPicker, IGraphicRender } from '@visactor/vrender-core';\nimport { PickerBase } from '../common/base';\n\n@injectable()\nexport class DefaultMathSymbolPicker extends PickerBase implements IGraphicPicker {\n type: string = 'symbol';\n numberType: number = SYMBOL_NUMBER_TYPE;\n\n constructor(@inject(SymbolRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { MathPickerContribution, MathSymbolPicker } from '../constants';\nimport { DefaultMathSymbolPicker } from './symbol-picker';\n\nlet loadSymbolPick = false;\nexport const symbolMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadSymbolPick) {\n return;\n }\n loadSymbolPick = true;\n // symbol picker\n bind(MathSymbolPicker).to(DefaultMathSymbolPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathSymbolPicker);\n});\n","import type { vec2 } from '@visactor/vutils';\nimport type { ITextMeasure, TextOptionsType } from '../../../interface/text';\nimport type { TextLayoutBBox, LayoutItemType, LayoutType, TextAlignType, TextBaselineType } from '../../../interface';\nimport { MeasureModeEnum } from '../../../interface';\n\nexport class CanvasTextLayout {\n private fontFamily: string;\n private textOptions: TextOptionsType;\n private textMeasure: ITextMeasure;\n\n constructor(fontFamily: string, options: TextOptionsType, textMeasure: ITextMeasure) {\n this.fontFamily = fontFamily;\n this.textOptions = options;\n this.textMeasure = textMeasure;\n }\n\n /**\n * 布局外部的盒子,盒子的alphabetic属性模拟文字的效果\n * @param bbox\n * @param textAlign\n * @param textBaseline\n * @returns\n */\n LayoutBBox(\n bbox: TextLayoutBBox,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n linesLayout: LayoutItemType[]\n ): TextLayoutBBox {\n if (textAlign === 'left' || textAlign === 'start') {\n bbox.xOffset = 0;\n } else if (textAlign === 'center') {\n bbox.xOffset = bbox.width / -2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n bbox.xOffset = -bbox.width;\n } else {\n bbox.xOffset = 0;\n }\n\n if (textBaseline === 'top') {\n bbox.yOffset = 0;\n } else if (textBaseline === 'middle') {\n bbox.yOffset = bbox.height / -2;\n } else if (textBaseline === 'alphabetic') {\n // 如果仅有一行,要保证和直接使用canvas绘制的textBaseline一致\n let percent = 0.79;\n if (linesLayout.length === 1) {\n const lineInfo = linesLayout[0];\n percent = lineInfo.ascent / (lineInfo.ascent + lineInfo.descent);\n }\n bbox.yOffset = bbox.height * -percent;\n } else {\n bbox.yOffset = -bbox.height;\n }\n\n return bbox;\n }\n\n /**\n * 给定拆分好的每行字符串进行布局,如果传入lineWidth,那么后面的字符就拆分\n * @param lines\n * @param lineWidth\n */\n GetLayoutByLines(\n lines: (string | number)[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n suffix: string = '',\n wordBreak: boolean,\n params?: {\n lineWidth?: number;\n suffixPosition?: 'start' | 'end' | 'middle';\n measureMode?: MeasureModeEnum;\n keepCenterInLine?: boolean;\n }\n ): LayoutType {\n const {\n lineWidth,\n suffixPosition = 'end',\n measureMode = MeasureModeEnum.actualBounding,\n keepCenterInLine = false\n } = params ?? {};\n lines = lines.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n // bbox高度可能大于totalHeight\n const bboxWH: vec2 = [0, 0];\n if (typeof lineWidth === 'number' && lineWidth !== Infinity) {\n // 直接使用lineWidth,并拆分字符串\n let width: number;\n for (let i = 0, len = lines.length; i < len; i++) {\n const metrics = this.textMeasure.measureTextPixelADscentAndWidth(\n lines[i] as string,\n this.textOptions,\n measureMode\n );\n let str: string = lines[i].toString();\n // 大于最大宽度,需要裁剪\n if (metrics.width > lineWidth) {\n const data = this.textMeasure.clipTextWithSuffix(\n lines[i] as string,\n this.textOptions,\n lineWidth,\n suffix,\n wordBreak,\n suffixPosition\n );\n str = data.str;\n width = data.width;\n } else {\n // 小于最大宽度,不需要裁剪,直接取文字总宽度即可\n width = metrics.width;\n }\n linesLayout.push({\n str,\n width,\n ascent: metrics.ascent,\n descent: metrics.descent,\n keepCenterInLine\n });\n }\n bboxWH[0] = lineWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let _lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n text = lines[i] as string;\n const metrics = this.textMeasure.measureTextPixelADscentAndWidth(\n lines[i] as string,\n this.textOptions,\n measureMode\n );\n width = metrics.width;\n _lineWidth = Math.max(_lineWidth, width);\n linesLayout.push({ str: text, width, ascent: metrics.ascent, descent: metrics.descent, keepCenterInLine });\n }\n bboxWH[0] = _lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n bboxWH[0] = linesLayout.reduce((a, b) => Math.max(a, b.width), 0);\n\n const bbox: TextLayoutBBox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n this.LayoutBBox(bbox, textAlign, textBaseline, linesLayout);\n\n return this.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline, lineHeight);\n }\n\n /**\n * 给定了bbox,使用拆分好的每行字符串进行布局\n * @param bbox\n * @param lines\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @returns\n */\n layoutWithBBox(\n bbox: TextLayoutBBox,\n lines: LayoutItemType[],\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number\n ): LayoutType {\n const origin: vec2 = [0, 0];\n const totalLineHeight = lines.length * lineHeight; // 总高度\n // origin在y方向需要初始化,然后递增即可\n if (textBaseline === 'top') {\n // origin[1] = 0;\n } else if (textBaseline === 'middle') {\n origin[1] = (bbox.height - totalLineHeight) / 2;\n } else if (textBaseline === 'bottom') {\n origin[1] = bbox.height - totalLineHeight;\n }\n\n for (let i = 0; i < lines.length; i++) {\n this.lineOffset(bbox, lines[i], textAlign, textBaseline, lineHeight, origin);\n }\n\n return {\n bbox,\n lines,\n fontFamily: this.fontFamily,\n fontSize: this.textOptions.fontSize,\n fontWeight: this.textOptions.fontWeight,\n lineHeight,\n textAlign,\n textBaseline\n };\n }\n\n /**\n * 计算line在bbox中的位置,需要配合layoutWithBBox使用\n * @param bbox\n * @param line\n * @param textAlign\n * @param textBaseline\n * @param lineHeight\n * @param origin 这个line的左上角位置,会复用并修改\n */\n private lineOffset(\n bbox: TextLayoutBBox,\n line: LayoutItemType,\n textAlign: TextAlignType,\n textBaseline: TextBaselineType,\n lineHeight: number,\n origin: vec2\n ): LayoutItemType {\n if (textAlign === 'left' || textAlign === 'start') {\n line.leftOffset = 0;\n } else if (textAlign === 'center') {\n line.leftOffset = (bbox.width - line.width) / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n line.leftOffset = bbox.width - line.width;\n }\n\n line.topOffset = lineHeight / 2 + (line.ascent - line.descent) / 2 + origin[1];\n\n // 在行内进行偏移\n if (!line.keepCenterInLine) {\n const actualHeight = line.ascent + line.descent;\n const buf = 0;\n const actualHeightWithBuf = actualHeight + buf;\n if (actualHeightWithBuf < lineHeight - buf) {\n if (textBaseline === 'bottom') {\n line.topOffset += (lineHeight - actualHeightWithBuf) / 2;\n } else if (textBaseline === 'top') {\n line.topOffset -= (lineHeight - actualHeightWithBuf) / 2;\n }\n }\n if (textBaseline === 'alphabetic') {\n const fontBoundingHeight = line.ascent + line.descent;\n const ratio = lineHeight / fontBoundingHeight;\n line.topOffset = lineHeight / 2 + ((line.ascent - line.descent) / 2) * ratio + origin[1];\n }\n }\n\n origin[1] += lineHeight;\n\n return line;\n }\n}\n","import type { IAABBBounds, IOBBBounds } from '@visactor/vutils';\nimport { max, isArray, getContextFont, transformBoundsWithMatrix, rotatePoint } from '@visactor/vutils';\nimport { textDrawOffsetX, textLayoutOffsetY } from '../common/text';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport { application } from '../application';\nimport type { IText, ITextCache, ITextGraphicAttribute, LayoutItemType, LayoutType } from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme } from './theme';\nimport { calculateLineHeight } from '../common/utils';\nimport { TEXT_NUMBER_TYPE } from './constants';\nimport { boundStroke, TextDirection, verticalLayout } from './tools';\n\nconst TEXT_UPDATE_TAG_KEY = [\n 'text',\n 'maxLineWidth',\n 'maxWidth',\n // 多行文本要用到\n 'textAlign',\n 'textBaseline',\n 'heightLimit',\n 'lineClamp',\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'ellipsis',\n 'lineHeight',\n 'direction',\n 'wordBreak',\n 'heightLimit',\n 'lineClamp',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class Text extends Graphic implements IText {\n type: 'text' = 'text';\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n direction: 1,\n textAlign: 1,\n textBaseline: 1,\n fontFamily: 1,\n fontWeight: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n cache: ITextCache;\n _font: string;\n\n protected declare obbText?: Text;\n\n /**\n * 获取font字符串\n */\n get font(): string {\n const textTheme = this.getGraphicTheme();\n if (!this._font) {\n this._font = getContextFont(this.attribute, textTheme);\n }\n return this._font as string;\n }\n\n get clipedText(): string | undefined {\n const attribute = this.attribute;\n const textTheme = this.getGraphicTheme();\n const maxWidth = this.getMaxWidth(textTheme);\n if (!Number.isFinite(maxWidth)) {\n return (attribute.text ?? textTheme.text).toString();\n }\n this.tryUpdateAABBBounds();\n return this.cache.clipedText;\n }\n\n get clipedWidth(): number | undefined {\n this.tryUpdateAABBBounds();\n return this.cache.clipedWidth;\n }\n\n /**\n * 支持单行文本,横排纵排均支持\n * TODO 支持多行文本\n */\n get cliped(): boolean | undefined {\n const textTheme = this.getGraphicTheme();\n const attribute = this.attribute;\n const maxWidth = this.getMaxWidth(textTheme);\n if (!Number.isFinite(maxWidth)) {\n return false;\n }\n const { text } = this.attribute;\n this.tryUpdateAABBBounds();\n if (this.cache?.layoutData?.lines) {\n let mergedText = '';\n this.cache.layoutData.lines.forEach(item => {\n mergedText += item.str;\n });\n const originText = Array.isArray(text) ? text.join('') : text;\n\n return originText !== mergedText;\n }\n if (attribute.direction === 'vertical' && this.cache.verticalList && this.cache.verticalList[0]) {\n return this.cache.verticalList[0].map(item => item.text).join('') !== attribute.text.toString();\n }\n if (this.clipedText == null) {\n return false;\n }\n return this.clipedText !== attribute.text.toString();\n }\n\n get multilineLayout(): LayoutType | undefined {\n this.tryUpdateAABBBounds();\n return this.cache.layoutData;\n }\n /**\n * 是否是多行文本\n */\n get isMultiLine(): boolean {\n return Array.isArray(this.attribute.text) || this.attribute.whiteSpace === 'normal';\n }\n\n constructor(params: ITextGraphicAttribute = { text: '', fontSize: 16 }) {\n super(params);\n this.numberType = TEXT_NUMBER_TYPE;\n this.cache = {};\n }\n\n /**\n * 图元属性合法,且文字不为空或者null/undefined\n * @returns\n */\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).text;\n }\n\n protected doUpdateOBBBounds(): IOBBBounds {\n const graphicTheme = this.getGraphicTheme();\n this._OBBBounds.clear();\n const attribute = this.attribute;\n const { angle = graphicTheme.angle } = attribute;\n if (!angle) {\n const b = this.AABBBounds;\n this._OBBBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n return this._OBBBounds;\n }\n if (!this.obbText) {\n this.obbText = new Text({});\n }\n this.obbText.setAttributes({ ...attribute, angle: 0 });\n const bounds1 = this.obbText.AABBBounds;\n const { x, y } = attribute;\n const boundsCenter = { x: (bounds1.x1 + bounds1.x2) / 2, y: (bounds1.y1 + bounds1.y2) / 2 };\n const center = rotatePoint(boundsCenter, angle, { x, y });\n this._OBBBounds.copy(bounds1);\n this._OBBBounds.translate(center.x - boundsCenter.x, center.y - boundsCenter.y);\n this._OBBBounds.angle = angle;\n return this._OBBBounds;\n }\n\n protected updateAABBBounds(\n attribute: ITextGraphicAttribute,\n textTheme: Required,\n aabbBounds: IAABBBounds\n ) {\n const { text = textTheme.text } = this.attribute;\n if (Array.isArray(text)) {\n this.updateMultilineAABBBounds(text as (number | string)[]);\n } else {\n this.updateSingallineAABBBounds(text as number | string);\n }\n\n const { tb1 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n const {\n scaleX = textTheme.scaleX,\n scaleY = textTheme.scaleY,\n shadowBlur = textTheme.shadowBlur,\n strokeBoundsBuffer = textTheme.strokeBoundsBuffer\n } = attribute;\n if (shadowBlur) {\n const shadowBlurHalfWidth = shadowBlur / Math.abs(scaleX + scaleY);\n boundStroke(tb1, shadowBlurHalfWidth, true, strokeBoundsBuffer);\n aabbBounds.union(tb1);\n }\n // 合并shadowRoot的bounds\n application.graphicService.combindShadowAABBBounds(aabbBounds, this);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n application.graphicService.updateHTMLTextAABBBounds(attribute, textTheme, aabbBounds);\n }\n\n transformBoundsWithMatrix(aabbBounds, aabbBounds, this.transMatrix);\n return aabbBounds;\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateSingallineAABBBounds(text: number | string): IAABBBounds {\n this.updateMultilineAABBBounds([text]);\n const layoutData = this.cache.layoutData;\n if (layoutData && layoutData.lines && layoutData.lines.length) {\n const line = layoutData.lines[0];\n this.cache.clipedText = line.str;\n this.cache.clipedWidth = line.width;\n }\n return this._AABBBounds;\n }\n\n /**\n * 计算单行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n protected updateMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n const { direction = textTheme.direction, underlineOffset = textTheme.underlineOffset } = this.attribute;\n\n const b =\n direction === 'horizontal'\n ? this.updateHorizontalMultilineAABBBounds(text)\n : this.updateVerticalMultilineAABBBounds(text);\n\n if (direction === 'horizontal') {\n if (underlineOffset) {\n this._AABBBounds.add(this._AABBBounds.x1, this._AABBBounds.y2 + underlineOffset);\n }\n }\n return b;\n }\n\n guessLineHeightBuf(fontSize: number) {\n return fontSize ? fontSize * 0.1 : 0;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * @param text\n */\n updateHorizontalMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n\n const attribute = this.attribute;\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n wrap = textTheme.wrap,\n measureMode = textTheme.measureMode,\n lineWidth = textTheme.lineWidth,\n whiteSpace = textTheme.whiteSpace,\n suffixPosition = textTheme.suffixPosition,\n ignoreBuf = textTheme.ignoreBuf,\n keepCenterInLine = textTheme.keepCenterInLine\n } = attribute;\n\n const buf = ignoreBuf ? 0 : this.guessLineHeightBuf(fontSize);\n const lineHeight = this.getLineHeight(attribute, textTheme, buf);\n\n if (whiteSpace === 'normal' || wrap) {\n return this.updateWrapAABBBounds(text);\n }\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily, lineHeight }, textMeasure);\n const layoutData = layoutObj.GetLayoutByLines(\n text,\n textAlign,\n textBaseline as any,\n lineHeight,\n ellipsis === true ? (textTheme.ellipsis as string) : ellipsis || undefined,\n false,\n {\n lineWidth: maxLineWidth,\n suffixPosition,\n measureMode,\n keepCenterInLine\n }\n );\n const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateWrapAABBBounds(text: (number | string) | (number | string)[]) {\n const textTheme = this.getGraphicTheme();\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n measureMode = textTheme.measureMode,\n suffixPosition = textTheme.suffixPosition,\n heightLimit = 0,\n lineClamp,\n keepCenterInLine = textTheme.keepCenterInLine\n } = this.attribute;\n\n const buf = ignoreBuf ? 0 : this.guessLineHeightBuf(fontSize);\n const lineHeight = this.getLineHeight(this.attribute, textTheme, buf);\n\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const textOptions = { fontSize, fontWeight, fontFamily, lineHeight };\n const layoutObj = new CanvasTextLayout(fontFamily, textOptions, textMeasure as any);\n\n // layoutObj内逻辑\n const lines = isArray(text) ? (text.map(l => l.toString()) as string[]) : [text.toString()];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行,如果后面还有行,需要显示省略号\n const clip = textMeasure.clipTextWithSuffix(\n str,\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition,\n i !== lines.length - 1\n );\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = textMeasure.clipText(\n str,\n textOptions,\n maxLineWidth,\n wordBreak !== 'break-all',\n wordBreak === 'keep-all'\n );\n if ((str !== '' && clip.str === '') || clip.wordBreaked) {\n if (ellipsis) {\n const clipEllipsis = textMeasure.clipTextWithSuffix(\n str,\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n let cutLength = clip.str.length;\n if (clip.wordBreaked && !(str !== '' && clip.str === '')) {\n needCut = true;\n cutLength = clip.wordBreaked;\n }\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n let newStr = str.substring(cutLength);\n // 截断后,避免开头有空格很尬,去掉\n if (wordBreak === 'keep-all') {\n newStr = newStr.replace(/^\\s+/g, '');\n }\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = textMeasure.clipTextWithSuffix(\n lines[i],\n textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n const matrics = textMeasure.measureTextPixelADscentAndWidth(clip.str, textOptions, measureMode);\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: matrics.ascent,\n descent: matrics.descent,\n keepCenterInLine\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = textMeasure.measureTextWidth(text, textOptions);\n lineWidth = Math.max(lineWidth, width);\n const matrics = textMeasure.measureTextPixelADscentAndWidth(text, textOptions, measureMode);\n linesLayout.push({ str: text, width, ascent: matrics.ascent, descent: matrics.descent, keepCenterInLine });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * lineHeight;\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any, linesLayout);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n /**\n * 计算垂直布局的多行文字的bounds,可以缓存长度以及截取的文字\n * @param text\n */\n updateVerticalMultilineAABBBounds(text: (number | string)[]): IAABBBounds {\n const textTheme = this.getGraphicTheme();\n const textMeasure = application.graphicUtil.textMeasure;\n let width: number;\n const attribute = this.attribute;\n const {\n maxLineWidth = textTheme.maxLineWidth,\n ellipsis = textTheme.ellipsis,\n fontFamily = textTheme.fontFamily,\n fontSize = textTheme.fontSize,\n fontWeight = textTheme.fontWeight,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n // wordBreak = textTheme.wordBreak,\n verticalMode = textTheme.verticalMode,\n suffixPosition = textTheme.suffixPosition\n } = attribute;\n\n const lineHeight = this.getLineHeight(attribute, textTheme, 0);\n\n let { textAlign = textTheme.textAlign, textBaseline = textTheme.textBaseline } = attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = (Text.baselineMapAlign as any)[textBaseline] ?? 'left';\n textBaseline = (Text.alignMapBaseline as any)[t] ?? 'top';\n }\n width = 0;\n if (!this.shouldUpdateShape() && this.cache) {\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const verticalLists: { text: string; width?: number; direction: TextDirection }[][] = text.map(str => {\n return verticalLayout(str.toString());\n });\n verticalLists.forEach((verticalData, i) => {\n if (Number.isFinite(maxLineWidth)) {\n if (ellipsis) {\n const strEllipsis = (ellipsis === true ? textTheme.ellipsis : ellipsis) as string;\n const data = textMeasure.clipTextWithSuffixVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n strEllipsis,\n false,\n suffixPosition\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n } else {\n const data = textMeasure.clipTextVertical(\n verticalData,\n { fontSize, fontWeight, fontFamily },\n maxLineWidth,\n false\n );\n verticalLists[i] = data.verticalList;\n width = data.width;\n }\n // this.cache.clipedWidth = width;\n // todo 计算原本的宽度\n } else {\n width = 0;\n verticalData.forEach(t => {\n const w =\n t.direction === TextDirection.HORIZONTAL\n ? fontSize\n : textMeasure.measureTextWidth(t.text, { fontSize, fontWeight, fontFamily });\n\n width += w;\n t.width = w;\n });\n }\n });\n this.cache.verticalList = verticalLists;\n this.clearUpdateShapeTag();\n\n this.cache.verticalList.forEach(item => {\n const w = item.reduce((a, b) => a + b.width, 0);\n width = max(w, width);\n });\n\n const dx = textDrawOffsetX(textAlign, width);\n const height = this.cache.verticalList.length * lineHeight;\n const dy = textLayoutOffsetY(textBaseline, height, fontSize);\n this._AABBBounds.set(dy, dx, dy + height, dx + width);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n // /**\n // * 是否是简单文字\n // * 单行,横排\n // * @returns\n // */\n // protected isSinglelineAndHorizontal(): boolean {\n // return !this.isMultiLine && this.attribute.direction !== 'vertical';\n // }\n\n protected getMaxWidth(theme: ITextGraphicAttribute): number {\n // 传入了maxLineWidth就优先使用,否则使用maxWidth\n const attribute = this.attribute;\n return attribute.maxLineWidth ?? attribute.maxWidth ?? theme.maxWidth;\n }\n\n protected getLineHeight(attribute: ITextGraphicAttribute, textTheme: ITextGraphicAttribute, buf: number) {\n return (\n calculateLineHeight(attribute.lineHeight, attribute.fontSize || textTheme.fontSize) ??\n (attribute.fontSize || textTheme.fontSize) + buf\n );\n }\n\n protected needUpdateTags(keys: string[], k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTags(keys, k);\n }\n protected needUpdateTag(key: string, k = TEXT_UPDATE_TAG_KEY): boolean {\n return super.needUpdateTag(key, k);\n }\n\n clone(): Text {\n return new Text({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record {\n return Text.NOWORK_ANIMATE_ATTR;\n }\n\n /**\n * 用于垂直布局时align和baseline相互转换\n * @returns\n */\n getBaselineMapAlign(): Record {\n return Text.baselineMapAlign;\n }\n\n /**\n * 用于垂直布局时align和baseline相互转换\n * @returns\n */\n getAlignMapBaseline(): Record {\n return Text.alignMapBaseline;\n }\n\n static baselineMapAlign = {\n top: 'left',\n bottom: 'right',\n middle: 'center'\n };\n\n static alignMapBaseline = {\n left: 'top',\n right: 'bottom',\n center: 'middle'\n };\n}\n\nexport function createText(attributes: ITextGraphicAttribute): IText {\n return new Text(attributes);\n}\n\n// addAttributeToPrototype(DefaultLineStyle, Text, PURE_STYLE_KEY);\n","import { createText } from '../graphic/text';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerTextGraphic() {\n graphicCreator.RegisterGraphicCreator('text', createText);\n}\n","import { inject, injectable, named } from '../../../common/inversify-lite';\nimport { getTheme } from '../../../graphic/theme';\nimport { TEXT_NUMBER_TYPE } from '../../../graphic/constants';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IThemeAttribute,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n ITextRenderContribution,\n IContributionProvider\n} from '../../../interface';\nimport { textDrawOffsetX, textDrawOffsetY, textLayoutOffsetY } from '../../../common/text';\nimport type { IText, ITextGraphicAttribute } from '../../../interface/graphic/text';\nimport { BaseRender } from './base-render';\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport { TextRenderContribution } from './contributions/constants';\nimport { matrixAllocate } from '../../../allocator/matrix-allocate';\nimport { isNil, max } from '@visactor/vutils';\nimport { calculateLineHeight } from '../../../common/utils';\nimport { defaultTextBackgroundRenderContribution } from './contributions/text-contribution-render';\n\n@injectable()\nexport class DefaultCanvasTextRender extends BaseRender implements IGraphicRender {\n type: 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(TextRenderContribution)\n protected readonly textRenderContribitions: IContributionProvider\n ) {\n super();\n this.builtinContributions = [defaultTextBackgroundRenderContribution as any];\n this.init(textRenderContribitions);\n }\n\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const textAttribute = getTheme(text, params?.theme).text;\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n keepDirIn3d = textAttribute.keepDirIn3d,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n // whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n const data = this.valid(text, textAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { fVisible, sVisible, doFill, doStroke } = data;\n\n // 文字如果需要变换,那就需要将3dmatrix转成context的2dmatrix\n const transform3dMatrixToContextMatrix = !keepDirIn3d;\n\n const z = this.z || 0;\n\n context.beginPath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(text, text.attribute, textAttribute);\n\n this.beforeRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n\n transform3dMatrixToContextMatrix && this.transformUseContext2d(text, textAttribute, z, context);\n\n const drawText = (t: string, offsetX: number, offsetY: number, direction: number) => {\n let _x = x + offsetX;\n const _y = y + offsetY;\n if (direction) {\n context.highPerformanceSave();\n _x += fontSize;\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n // matrix.translate(fontSize, 0);\n matrix.rotateByCenter(Math.PI / 2, _x, _y);\n context.transformFromMatrix(matrix, true);\n matrixAllocate.free(matrix);\n }\n\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(t, _x, _y, z);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(t, _x, _y, z);\n // 垂直布局的情况下不支持下划线和中划线\n // this.drawUnderLine(underline, lineThrough, text, _x, _y, 0, 0, z, textAttribute, context);\n }\n }\n\n if (direction) {\n context.highPerformanceRestore();\n context.setTransformForCurrent();\n }\n };\n context.setTextStyleWithoutAlignBaseline(text.attribute, textAttribute, z);\n if (direction === 'horizontal') {\n const { multilineLayout } = text;\n if (!multilineLayout) {\n context.highPerformanceRestore();\n return;\n } // 如果不存在的话,需要render层自行布局\n const { xOffset, yOffset } = multilineLayout.bbox;\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.strokeText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n });\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n multilineLayout.lines.forEach(line => {\n context.fillText(line.str, (line.leftOffset || 0) + xOffset + x, (line.topOffset || 0) + yOffset + y, z);\n this.drawUnderLine(\n underline,\n lineThrough,\n text,\n (line.leftOffset || 0) + xOffset + x,\n (line.topOffset || 0) + yOffset + y,\n line.descent,\n (line.descent - line.ascent) / 2,\n z,\n textAttribute,\n context,\n {\n width: line.width\n }\n );\n });\n }\n }\n } else {\n let { textAlign = textAttribute.textAlign, textBaseline = textAttribute.textBaseline } = text.attribute;\n if (!verticalMode) {\n const t = textAlign;\n textAlign = text.getBaselineMapAlign()[textBaseline] ?? ('left' as any);\n textBaseline = text.getAlignMapBaseline()[t] ?? ('top' as any);\n }\n text.tryUpdateAABBBounds(); // 更新cache\n const cache = text.cache;\n const { verticalList } = cache;\n context.textAlign = 'left';\n context.textBaseline = 'top';\n const totalHeight = lineHeight * verticalList.length;\n let totalW = 0;\n verticalList.forEach(verticalData => {\n const _w = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n totalW = max(_w, totalW);\n });\n let offsetY = 0;\n let offsetX = 0;\n if (textBaseline === 'bottom') {\n offsetX = -totalHeight;\n } else if (textBaseline === 'middle') {\n offsetX = -totalHeight / 2;\n }\n if (textAlign === 'center') {\n offsetY -= totalW / 2;\n } else if (textAlign === 'right') {\n offsetY -= totalW;\n }\n verticalList.forEach((verticalData, i) => {\n const currentW = verticalData.reduce((a, b) => a + (b.width || 0), 0);\n const dw = totalW - currentW;\n let currentOffsetY = offsetY;\n if (textAlign === 'center') {\n currentOffsetY += dw / 2;\n } else if (textAlign === 'right') {\n currentOffsetY += dw;\n }\n verticalData.forEach(item => {\n const { text, width, direction } = item;\n drawText(text, totalHeight - (i + 1) * lineHeight + offsetX, currentOffsetY, direction);\n currentOffsetY += width;\n });\n });\n }\n transform3dMatrixToContextMatrix && this.restoreTransformUseContext2d(text, textAttribute, z, context);\n\n this.afterRenderStep(\n text,\n context,\n x,\n y,\n doFill,\n doStroke,\n fVisible,\n sVisible,\n textAttribute,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n\n draw(text: IText, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const textAttribute = getTheme(text, params?.theme).text;\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n this._draw(text, textAttribute, computed3dMatrix, drawContext, params);\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n anchorX: number,\n anchorY: number,\n offsetUnderLineY: number,\n offsetThroughLineY: number,\n z: number,\n textAttribute: Required,\n context: IContext2d,\n multiOption?: {\n width: number;\n }\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n // textBaseline = textAttribute.textBaseline,\n // fontSize = textAttribute.fontSize,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n const isMulti = !isNil(multiOption);\n const w = isMulti ? multiOption!.width : text.clipedWidth;\n const offsetX = isMulti ? 0 : textDrawOffsetX(textAlign, w);\n // const offsetY = textLayoutOffsetY(isMulti ? 'alphabetic' : textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n // let deltaY = isMulti ? -3 : 0;\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, anchorX, anchorY, textAttribute);\n underlineDash && context.setLineDash(underlineDash);\n context.beginPath();\n // const dy = y + offsetY + fontSize + underlineOffset + deltaY;\n const dy = anchorY + offsetUnderLineY + underlineOffset;\n context.moveTo(anchorX + offsetX, dy, z);\n context.lineTo(anchorX + offsetX + w, dy, z);\n context.stroke();\n }\n // if (isMulti) {\n // deltaY = -1;\n // }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, anchorX, anchorY, textAttribute);\n context.beginPath();\n // const dy = y + offsetY + fontSize / 2 + deltaY;\n const dy = anchorY + offsetThroughLineY;\n context.moveTo(anchorX + offsetX, dy, z);\n context.lineTo(anchorX + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n","import { bindContributionProvider } from '../../../common/contribution-provider';\nimport { ContainerModule } from '../../../common/inversify';\nimport { DefaultCanvasCircleRender } from './circle-render';\nimport { DefaultBaseInteractiveRenderContribution } from './contributions';\nimport { CircleRenderContribution, TextRenderContribution } from './contributions/constants';\nimport { CircleRender, GraphicRender, TextRender } from './symbol';\nimport { DefaultCanvasTextRender } from './text-render';\n\nlet loadTextModule = false;\nexport const textModule = new ContainerModule(bind => {\n if (loadTextModule) {\n return;\n }\n loadTextModule = true;\n // text 渲染器\n bind(TextRender).to(DefaultCanvasTextRender).inSingletonScope();\n bind(GraphicRender).toService(TextRender);\n bind(TextRenderContribution).toService(DefaultBaseInteractiveRenderContribution);\n\n bindContributionProvider(bind, TextRenderContribution);\n});\n","import {\n inject,\n injectable,\n getTheme,\n TextRender,\n textDrawOffsetX,\n textLayoutOffsetY,\n mat4Allocate,\n TEXT_NUMBER_TYPE\n} from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type {\n IGraphicAttribute,\n IContext2d,\n IMarkAttribute,\n IText,\n IThemeAttribute,\n IGraphicPicker,\n IGraphicRender,\n IPickParams\n} from '@visactor/vrender-core';\nimport { Base3dPicker } from '../common/base-3d-picker';\n\n@injectable()\nexport class DefaultCanvasTextPicker extends Base3dPicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n constructor(@inject(TextRender) public readonly canvasRenderer: IGraphicRender) {\n super();\n }\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n // const { textAttribute } = graphicService.themeService.getCurrentTheme();\n // const {\n // x = textAttribute.x,\n // y = textAttribute.y,\n // } = text.attribute;\n const { pickContext } = params ?? {};\n if (!pickContext) {\n return false;\n }\n\n const bounds = text.AABBBounds;\n\n if (!pickContext.camera) {\n if (!bounds.containsPoint(point)) {\n return false;\n }\n return true;\n }\n\n // const symbolAttribute = graphicService.themeService.getCurrentTheme().symbolAttribute;\n pickContext.highPerformanceSave();\n const textAttribute = text.getGraphicTheme();\n\n const { keepDirIn3d = textAttribute.keepDirIn3d } = text.attribute;\n // 文字如果需要变换,那就一定要计算3d矩阵\n const computed3dMatrix = !keepDirIn3d;\n\n const data = this.transform(text, textAttribute, pickContext, computed3dMatrix);\n const { x, y, z, lastModelMatrix } = data;\n\n this.canvasRenderer.z = z;\n let pickPoint = point;\n if (pickContext.camera) {\n pickPoint = point.clone();\n const globalMatrix = text.parent.globalTransMatrix;\n pickPoint.x = globalMatrix.a * point.x + globalMatrix.c * point.y + globalMatrix.e;\n pickPoint.y = globalMatrix.b * point.x + globalMatrix.d * point.y + globalMatrix.f;\n }\n\n // 详细形状判断\n let picked = false;\n this.canvasRenderer.drawShape(\n text,\n pickContext,\n x,\n y,\n {} as any,\n null,\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n if (picked) {\n return true;\n }\n const {\n fontSize = textAttribute.fontSize,\n textBaseline = textAttribute.textBaseline,\n textAlign = textAttribute.textAlign\n } = text.attribute;\n // 拾取基于xy的rect\n const bounds = text.AABBBounds;\n const height = bounds.height();\n const width = bounds.width();\n const offsetY = textLayoutOffsetY(textBaseline, height, fontSize);\n const offsetX = textDrawOffsetX(textAlign, width);\n context.rect(offsetX + x, offsetY + y, width, height, z);\n picked = context.isPointInPath(pickPoint.x, pickPoint.y);\n return picked;\n },\n (\n context: IContext2d,\n symbolAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => {\n // 选中后面就不需要再走逻辑了\n // if (picked) {\n // return true;\n // }\n // const lineWidth = symbolAttribute.lineWidth || themeAttribute.lineWidth;\n // pickContext.lineWidth = getScaledStroke(pickContext, lineWidth, pickContext.dpr);\n // picked = context.isPointInStroke(pickPoint.x, pickPoint.y);\n return picked;\n }\n );\n\n this.canvasRenderer.z = 0;\n if (pickContext.modelMatrix !== lastModelMatrix) {\n mat4Allocate.free(pickContext.modelMatrix);\n }\n pickContext.modelMatrix = lastModelMatrix;\n pickContext.highPerformanceRestore();\n\n return picked;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { CanvasLinePicker, CanvasPickerContribution, CanvasTextPicker } from '../constants';\nimport { DefaultCanvasLinePicker } from './line-picker';\nimport { DefaultCanvasTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textCanvasPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(CanvasTextPicker).to(DefaultCanvasTextPicker).inSingletonScope();\n bind(CanvasPickerContribution).toService(CanvasTextPicker);\n});\n","import { injectable, TEXT_NUMBER_TYPE } from '@visactor/vrender-core';\nimport type { IPoint } from '@visactor/vutils';\nimport type { IGraphicPicker, IPickParams, IText } from '@visactor/vrender-core';\n\n@injectable()\nexport class DefaultMathTextPicker implements IGraphicPicker {\n type: string = 'text';\n numberType: number = TEXT_NUMBER_TYPE;\n\n contains(text: IText, point: IPoint, params?: IPickParams): boolean {\n if (!text.AABBBounds.containsPoint(point)) {\n return false;\n }\n\n // const { pickContext } = params ?? {};\n // if (!pickContext) {\n // return false;\n // }\n\n // TODO: 详细形状判断\n return true;\n }\n}\n","import { ContainerModule } from '@visactor/vrender-core';\nimport { DefaultMathArcPicker } from './arc-picker';\nimport { MathArcPicker, MathPickerContribution, MathTextPicker } from '../constants';\nimport { DefaultMathTextPicker } from './text-picker';\n\nlet loadTextPick = false;\nexport const textMathPickModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (loadTextPick) {\n return;\n }\n loadTextPick = true;\n // text picker\n bind(MathTextPicker).to(DefaultMathTextPicker).inSingletonScope();\n bind(MathPickerContribution).toService(MathTextPicker);\n});\n","import { isArray } from '@visactor/vutils';\nimport { CanvasTextLayout } from '../core/contributions/textMeasure/layout';\nimport type { IText, ITextGraphicAttribute, IWrapTextGraphicAttribute, LayoutItemType } from '../interface';\nimport { application } from '../application';\nimport { Text } from './text';\nimport { getTheme } from './theme';\nimport { calculateLineHeight } from '../common/utils';\n\nconst WRAP_TEXT_UPDATE_TAG_KEY = ['heightLimit', 'lineClamp'];\n\n/* WrapText功能\n * 1. 按照宽度限制自动折行或显示省略号(maxLineWidth)\n * 2. 高度限制控制显示内容及省略号(heightLimit)\n * 3. 按照行数限制显示内容及省略号(lineClamp)\n */\nexport class WrapText extends Text {\n declare attribute: IWrapTextGraphicAttribute;\n\n constructor(params: ITextGraphicAttribute) {\n super({ ...params, wrap: true });\n }\n\n protected _isValid(): boolean {\n const { text } = this.attribute;\n if (isArray(text)) {\n return !(text as any[]).every((t: any) => t == null || t === '');\n }\n return text != null && text !== '';\n }\n\n /**\n * 计算多行文字的bounds,缓存每行文字的布局位置\n * 自动折行params.text是数组,因此只重新updateMultilineAABBBounds\n * @param text\n */\n updateMultilineAABBBounds(text: (number | string)[]) {\n const textTheme = this.getGraphicTheme();\n const {\n fontFamily = textTheme.fontFamily,\n textAlign = textTheme.textAlign,\n textBaseline = textTheme.textBaseline,\n fontSize = textTheme.fontSize,\n ellipsis = textTheme.ellipsis,\n maxLineWidth,\n stroke = textTheme.stroke,\n lineWidth = textTheme.lineWidth,\n wordBreak = textTheme.wordBreak,\n fontWeight = textTheme.fontWeight,\n // widthLimit,\n ignoreBuf = textTheme.ignoreBuf,\n heightLimit = 0,\n suffixPosition = textTheme.suffixPosition,\n lineClamp\n } = this.attribute;\n const lineHeight =\n calculateLineHeight(this.attribute.lineHeight, this.attribute.fontSize || textTheme.fontSize) ??\n (this.attribute.fontSize || textTheme.fontSize);\n const buf = ignoreBuf ? 0 : 2;\n if (!this.shouldUpdateShape() && this.cache?.layoutData) {\n const bbox = this.cache.layoutData.bbox;\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n return this._AABBBounds;\n }\n\n const textMeasure = application.graphicUtil.textMeasure;\n const layoutObj = new CanvasTextLayout(fontFamily, { fontSize, fontWeight, fontFamily }, textMeasure as any) as any;\n\n // layoutObj内逻辑\n const lines = text.map(l => l.toString()) as string[];\n const linesLayout: LayoutItemType[] = [];\n const bboxWH: [number, number] = [0, 0];\n\n let lineCountLimit = Infinity;\n if (heightLimit > 0) {\n lineCountLimit = Math.max(Math.floor(heightLimit / lineHeight), 1);\n }\n if (lineClamp) {\n // 处理行数限制\n lineCountLimit = Math.min(lineCountLimit, lineClamp);\n }\n\n if (typeof maxLineWidth === 'number' && maxLineWidth !== Infinity) {\n // widthLimit > 0\n if (maxLineWidth > 0) {\n for (let i = 0; i < lines.length; i++) {\n const str = lines[i] as string;\n let needCut = true;\n // // 测量当前行宽度\n // width = Math.min(\n // layoutObj.textMeasure.measureTextWidth(str, layoutObj.textOptions),\n // maxLineWidth\n // );\n\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n break; // 不处理后续行\n }\n\n // 测量截断位置\n const clip = layoutObj.textMeasure.clipText(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n wordBreak === 'break-word'\n );\n if (str !== '' && clip.str === '') {\n if (ellipsis) {\n const clipEllipsis = layoutObj.textMeasure.clipTextWithSuffix(\n str,\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n clip.str = clipEllipsis.str ?? '';\n clip.width = clipEllipsis.width ?? 0;\n } else {\n // 宽度限制不足一个字符,不显示\n clip.str = '';\n clip.width = 0;\n }\n needCut = false;\n }\n\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n if (clip.str.length === str.length) {\n // 不需要截断\n } else if (needCut) {\n const newStr = str.substring(clip.str.length);\n lines.splice(i + 1, 0, newStr);\n }\n }\n }\n // bboxWH[0] = maxLineWidth;\n let maxWidth = 0;\n linesLayout.forEach(layout => {\n maxWidth = Math.max(maxWidth, layout.width);\n });\n bboxWH[0] = maxWidth;\n } else {\n // 使用所有行中最长的作为lineWidth\n let lineWidth = 0;\n let width: number;\n let text: string;\n for (let i = 0, len = lines.length; i < len; i++) {\n // 判断是否超过高度限制\n if (i === lineCountLimit - 1) {\n // 当前行为最后一行\n const clip = layoutObj.textMeasure.clipTextWithSuffix(\n lines[i],\n layoutObj.textOptions,\n maxLineWidth,\n ellipsis,\n false,\n suffixPosition\n );\n linesLayout.push({\n str: clip.str,\n width: clip.width,\n ascent: 0,\n descent: 0,\n keepCenterInLine: false\n });\n lineWidth = Math.max(lineWidth, clip.width);\n break; // 不处理后续行\n }\n\n text = lines[i] as string;\n width = layoutObj.textMeasure.measureTextWidth(text, layoutObj.textOptions, wordBreak === 'break-word');\n lineWidth = Math.max(lineWidth, width);\n linesLayout.push({ str: text, width, ascent: 0, descent: 0, keepCenterInLine: false });\n }\n bboxWH[0] = lineWidth;\n }\n bboxWH[1] = linesLayout.length * (lineHeight + buf);\n\n const bbox = {\n xOffset: 0,\n yOffset: 0,\n width: bboxWH[0],\n height: bboxWH[1]\n };\n\n layoutObj.LayoutBBox(bbox, textAlign, textBaseline as any);\n\n const layoutData = layoutObj.layoutWithBBox(bbox, linesLayout, textAlign, textBaseline as any, lineHeight);\n\n // const layoutData = layoutObj.GetLayoutByLines(\n // text,\n // textAlign,\n // textBaseline as any,\n // lineHeight,\n // ellipsis === true ? (DefaultTextAttribute.ellipsis as string) : ellipsis || undefined,\n // maxLineWidth\n // );\n // const { bbox } = layoutData;\n this.cache.layoutData = layoutData;\n this.clearUpdateShapeTag();\n this._AABBBounds.set(bbox.xOffset, bbox.yOffset, bbox.xOffset + bbox.width, bbox.yOffset + bbox.height);\n\n if (stroke) {\n this._AABBBounds.expand(lineWidth / 2);\n }\n\n return this._AABBBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (keys.indexOf(attrKey) !== -1) {\n return true;\n }\n }\n return super.needUpdateTags(keys);\n }\n\n protected needUpdateTag(key: string): boolean {\n for (let i = 0; i < WRAP_TEXT_UPDATE_TAG_KEY.length; i++) {\n const attrKey = WRAP_TEXT_UPDATE_TAG_KEY[i];\n if (key === attrKey) {\n return true;\n }\n }\n return super.needUpdateTag(key);\n }\n\n getNoWorkAnimateAttr(): Record {\n return WrapText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createWrapText(attributes: ITextGraphicAttribute): IText {\n return new WrapText(attributes);\n}\n","import { createWrapText } from '../graphic/wrap-text';\nimport { graphicCreator } from '../graphic/graphic-creator';\n\nexport function registerWrapTextGraphic() {\n graphicCreator.RegisterGraphicCreator('wrapText', createWrapText);\n}\n","import isType from './isType';\n\nconst isDate = (value: any): value is Date => {\n return isType(value, 'Date');\n};\n\nexport default isDate;\n","import isArray from './isArray';\nimport isBoolean from './isBoolean';\nimport isDate from './isDate';\nimport isNumber from './isNumber';\nimport isString from './isString';\nimport isValid from './isValid';\n\nexport default function cloneDeep(value: any, ignoreWhen?: (value: any) => boolean, excludeKeys?: string[]): any {\n let result;\n if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n\n if (excludeKeys && excludeKeys.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);\n }\n }\n }\n return result;\n}\n","import { ACustomAnimate, createLine, getTextBounds, registerShadowRootGraphic } from '@visactor/vrender';\nimport type { EasingType, IGraphic, IRichText, IRichTextCharacter, ITextGraphicAttribute } from '@visactor/vrender';\nimport { clone, cloneDeep, isArray } from '@visactor/vutils';\nimport { Easing } from '@visactor/vrender';\nregisterShadowRootGraphic();\n\ntype ITypeWriterParams = {\n text: string;\n effect: 'default' | 'blur' | 'scale';\n blur: number;\n scale: number;\n delta: number;\n};\n\nexport class TypeWriter extends ACustomAnimate<{ text: string }> {\n declare valid: boolean;\n declare target: IRichText;\n declare targetTextConfig: IRichTextCharacter[];\n declare originTextConfig: IRichTextCharacter[];\n\n constructor(\n from: { text: string },\n to: { text: string },\n duration: number,\n easing: EasingType,\n params: ITypeWriterParams\n ) {\n super(from, to, duration, easing, params || {});\n }\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.targetTextConfig = [];\n (this.target.attribute.textConfig || []).forEach(config => {\n if (!(config as any).text) {\n this.targetTextConfig.push(config);\n } else {\n Array.from((config as any).text).forEach(str => {\n this.targetTextConfig.push({\n ...config,\n text: str,\n _opacity: (config as any).opacity\n } as any);\n });\n }\n });\n this.originTextConfig = cloneDeep(this.target.attribute.textConfig || []);\n }\n\n onEnd(): void {\n this.target.setAttributes({ textConfig: this.originTextConfig });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n const delta = this.params.delta ?? 0.3;\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity;\n } else {\n (config as any).opacity = 0;\n }\n }\n const { effect = 'default' } = this.params;\n if (effect === 'default') {\n this.onUpdateDefault(ratio, delta, this.params.characterEasing);\n } else if (effect === 'blur') {\n this.onUpdateBlur(ratio, delta, this.params.characterEasing);\n } else if (effect === 'scale') {\n this.onUpdateScale(ratio, delta, this.params.characterEasing);\n }\n }\n\n onUpdateDefault(ratio: number, delta: number, easing: string = 'linear') {\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n\n onUpdateBlur(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // TODO 后续使用blur代替,暂时基于opacity实现\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity * easingFunc(Math.min((ratio - delay) / delta, 1));\n } else {\n (config as any).opacity = 0;\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n onUpdateFadeUp(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // TODO 暂不支持\n const deltaY = this.params.dy ?? 20;\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const opacity = (config as any)._opacity ?? 1;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).opacity = opacity * easingFunc(Math.min((ratio - delay) / delta, 1));\n } else {\n (config as any).opacity = 0;\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n onUpdateScale(ratio: number, delta: number, easing: string = 'linear') {\n const totalLength = this.targetTextConfig.length;\n const delayStep = (1 - delta) / (totalLength - 1);\n\n // blur\n const easingFunc = (Easing as any)[easing] ?? Easing.linear;\n for (let i = 0; i < this.targetTextConfig.length; i++) {\n const config = this.targetTextConfig[i];\n const fontSize = (config as any)._fontSize ?? this.target.attribute.fontSize ?? 12;\n (config as any)._fontSize = fontSize;\n const delay = i * delayStep;\n if (ratio > delay) {\n (config as any).fontSize = fontSize * easingFunc(Math.min((ratio - delay) / delta, 1));\n }\n }\n\n const nextTextConfig = [...this.targetTextConfig];\n\n this.target.setAttributes({\n textConfig: nextTextConfig\n });\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, generatorPathEasingFunc } from '@visactor/vrender';\n\nexport const barBounce1Str =\n 'M0,0 C0.126,0.382 0.06,0.254 0.105,0.467 0.159,0.729 0.3,1.173 0.38,1.173 0.476,1.173 0.512,0.909 0.578,0.9 0.632,0.892 0.685,1.084 0.735,1.085 0.784,1.085 0.843,0.966 0.887,0.966 0.94,0.966 0.984,1 1,1';\nexport const barBounce2Str =\n 'M0,0 C0.126,0.382 0.185,0.598 0.262,0.801 0.307,0.919 0.396,1.089 0.476,1.089 0.572,1.089 0.622,0.936 0.688,0.927 0.742,0.919 0.778,1.036 0.828,1.038 0.877,1.038 0.882,0.972 0.926,0.972 0.979,0.972 0.984,1 1,1';\n\nconst barBounce1 = generatorPathEasingFunc(barBounce1Str);\nconst barBounce2 = generatorPathEasingFunc(barBounce2Str);\n\nexport class BarBounce extends ACustomAnimate<{ y?: number; y1?: number; x?: number; x1?: number }> {\n static label: string = 'bar-bounce';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n\n constructor(\n from: { y?: number; y1?: number; x?: number; x1?: number },\n to: { y?: number; y1?: number; x?: number; x1?: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n const f = {\n y: from.y1,\n y1: from.y1,\n x: from.x1,\n x1: from.x1\n };\n super(f, { y: from.y, y1: from.y1, x: from.x, x1: from.x1 }, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes(this.from);\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const from = this.from;\n const to = this.to;\n const r1 = barBounce1!(ratio);\n const r2 = barBounce2!(ratio);\n // const\n if (from.y1) {\n out.y = from.y! + (to.y! - from.y!) * r1;\n const height = to.y1! - to.y!;\n const dh = height * r2;\n out.y1 = Math.min(out.y + dh, this.to.y1!);\n } else {\n out.x = from.x! + (to.x! - from.x!) * r1;\n const width = to.x! - to.x1!;\n const dw = width * r2;\n out.x1 = Math.max(out.x - dw, this.to.x1!);\n }\n\n // out.y1 = from.y1 + (to.y1 - from.y1) * r;\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, CustomPath2D, generatorPathEasingFunc } from '@visactor/vrender';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport const barLeap1Str = 'M0,0 C0.083,0.163 0.179,1 0.6,1 0.814,1 0.898,1 1,1';\nexport const barLeap2Str = 'M0,0 C0.27,0 0.179,0 0.6,0 0.632,0 0.782,-0.132 0.818,-0.132 0.868,-0.132 0.972,0 1,0';\n\nconst barLeap1 = generatorPathEasingFunc(barLeap1Str);\nconst barLeap2 = generatorPathEasingFunc(barLeap2Str);\n\nexport class BarLeap extends ACustomAnimate<{\n y: number;\n y1?: number;\n x: number;\n x1?: number;\n width?: number;\n height?: number;\n cornerRadius?: number;\n}> {\n static label: string = 'bar-leap';\n static delayPerTime: number = 100;\n static enterPerTime: number = 500;\n\n declare valid: boolean;\n\n protected fromCenter: IPointLike;\n protected toCenter: IPointLike;\n\n protected vertical: boolean;\n\n constructor(\n from: { y: number; y1?: number; x: number; x1?: number; width?: number; height?: number },\n to: { y: number; y1?: number; x: number; x1?: number; width?: number; height?: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n super({ ...from, cornerRadius: 0 }, to, duration, easing, params);\n this.vertical = to.y1 != null;\n const centerX = to.x1 != null ? (to.x + to.x1) / 2 : to.x + to.width! / 2;\n const centerY = to.y1 != null ? (to.y + to.y1) / 2 : to.y + to.height! / 2;\n this.toCenter = { x: centerX - to.x, y: centerY - to.y };\n if (this.vertical) {\n this.fromCenter = { x: centerX + 200 - to.x, y: centerY - 600 - to.y };\n } else {\n this.fromCenter = { x: centerX + 600 - to.x, y: centerY - 200 - to.y };\n }\n }\n\n computePath(percent: number, fromCenter: IPointLike, toCenter: IPointLike, pathProxy: CustomPath2D) {\n const center = {\n x: fromCenter.x + (toCenter.x - fromCenter.x) * percent,\n y: fromCenter.y + (toCenter.y - fromCenter.y) * percent\n };\n // console.log(center);\n pathProxy.clear();\n if (this.vertical) {\n const width = this.to.width!;\n const height = this.to.y1! - this.to.y;\n const halfH = height / 2;\n const halfW = width / 2;\n\n // const leftTop = {x: center.x - halfW, y: center.y - halfH};\n // const rightBottom = { x: leftTop.x + width, y: leftTop.y + height };\n // pathProxy.moveTo(leftTop.x, leftTop.y);\n // pathProxy.lineTo(rightBottom.x, leftTop.y);\n // pathProxy.lineTo(rightBottom.x, rightBottom.y);\n // pathProxy.lineTo(leftTop.x, rightBottom.y);\n // pathProxy.lineTo(leftTop.x, leftTop.y);\n\n const angle = ((1 - percent) * Math.PI) / 3;\n const vec1 = { x: Math.sin(angle) * halfH, y: Math.cos(angle) * halfH };\n const ptm = { x: center.x + vec1.x, y: center.y - vec1.y };\n const pbm = { x: center.x - vec1.x, y: center.y + vec1.y };\n const vec2 = { x: Math.cos(angle) * halfW, y: Math.sin(angle) * halfW };\n const plt = { x: ptm.x - vec2.x, y: ptm.y - vec2.y };\n const prt = { x: ptm.x + vec2.x, y: ptm.y + vec2.y };\n const plb = { x: pbm.x - vec2.x, y: pbm.y - vec2.y };\n const prb = { x: pbm.x + vec2.x, y: pbm.y + vec2.y };\n\n const lqp = { x: plb.x + (plt.x - plb.x) / 4, y: (plb.y + plt.y) / 2 };\n const rqp = { x: prb.x + (prt.x - prb.x) / 4, y: (prb.y + prt.y) / 2 };\n\n pathProxy.moveTo(plt.x, plt.y);\n pathProxy.lineTo(prt.x, prt.y);\n pathProxy.quadraticCurveTo(rqp.x, rqp.y, prb.x, prb.y);\n pathProxy.lineTo(plb.x, plb.y);\n pathProxy.quadraticCurveTo(lqp.x, lqp.y, plt.x, plt.y);\n } else {\n const width = this.to.x - this.to.x1!;\n const height = this.to.height!;\n const halfH = height / 2;\n const halfW = width / 2;\n\n const angle = ((1 - percent) * Math.PI) / 3;\n const vec1 = { x: Math.cos(angle) * halfW, y: Math.sin(angle) * halfW };\n const ptm = { x: center.x + vec1.x, y: center.y - vec1.y };\n const pbm = { x: center.x - vec1.x, y: center.y + vec1.y };\n const vec2 = { x: Math.sin(angle) * halfH, y: Math.cos(angle) * halfH };\n const plt = { x: ptm.x - vec2.x, y: ptm.y - vec2.y };\n const prt = { x: ptm.x + vec2.x, y: ptm.y + vec2.y };\n const plb = { x: pbm.x - vec2.x, y: pbm.y - vec2.y };\n const prb = { x: pbm.x + vec2.x, y: pbm.y + vec2.y };\n\n const lqp = { x: (plb.x + plt.x) / 2, y: plb.y - (plb.y - plt.y) / 4 };\n const rqp = { x: (prb.x + prt.x) / 2, y: prb.y - (prb.y - prt.y) / 4 };\n\n pathProxy.moveTo(plt.x, plt.y);\n pathProxy.lineTo(prt.x, prt.y);\n pathProxy.quadraticCurveTo(rqp.x, rqp.y, prb.x, prb.y);\n pathProxy.lineTo(plb.x, plb.y);\n pathProxy.quadraticCurveTo(lqp.x, lqp.y, plt.x, plt.y);\n }\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onEnd(): void {\n this.target.pathProxy = null;\n }\n\n onBind(): void {\n this.target.pathProxy = new CustomPath2D();\n this.target.pathProxy.rect(0, 0, 0, 0);\n this.target && this.target.setAttributes(this.from);\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.computePath(barLeap1!(ratio), this.fromCenter, this.toCenter, this.target.pathProxy);\n if (this.vertical) {\n out.y = this.to.y + barLeap2!(ratio) * 100;\n } else {\n // out.x1 = this.to.x1! + bounce2(ratio) * 100;\n }\n }\n}\n","import type { EasingType } from '@visactor/vrender';\nimport { ACustomAnimate, generatorPathEasingFunc } from '@visactor/vrender';\n\nexport const pieLeap1Str =\n 'M0,0 C0,0.301 0.256,1.032 0.607,1.033 0.763,1.033 0.752,0.983 0.86,0.983 0.978,0.983 0.972,1 1,1';\nexport const pieLeap2Str =\n 'M0,0 C0.331,0 0.047,-0.001 0.4,0 0.554,0 0.623,0.988 0.704,1.05 0.777,1.106 0.826,0.966 0.885,0.966 0.968,0.966 0.986,1 1,1';\n\nconst pieLeap1 = generatorPathEasingFunc(pieLeap1Str);\nconst pieLeap2 = generatorPathEasingFunc(pieLeap2Str);\n\nexport class PieLeap extends ACustomAnimate<{ y: number; x: number; innerRadius: number; outerRadius: number }> {\n static label: string = 'pie-leap';\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n\n constructor(\n from: { y: number; x: number; innerRadius: number; outerRadius: number },\n to: { y: number; x: number; innerRadius: number; outerRadius: number },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n const f = {\n y: from.y - 500,\n x: from.x + 500,\n innerRadius: from.innerRadius,\n outerRadius: (from.innerRadius + from.outerRadius) / 2\n };\n super(f, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target.setAttributes(this.from);\n }\n\n onEnd(): void {\n this.target.pathProxy = null;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // 位置\n out.x = this.from.x + pieLeap1(ratio) * (this.to.x - this.from.x);\n out.y = this.from.y + pieLeap1(ratio) * (this.to.y - this.from.y);\n out.outerRadius = this.from.outerRadius + pieLeap2(ratio) * (this.to.outerRadius - this.from.outerRadius);\n // this.computePath(bounce1(ratio), this.fromCenter, this.toCenter, this.target.pathProxy);\n // if (this.vertical) {\n // out.y = this.to.y + bounce2(ratio) * 100;\n // } else {\n // // out.x1 = this.to.x1! + bounce2(ratio) * 100;\n // }\n // const cornerRadius = this.to.cornerRadius || 0;\n // out.cornerRadius = cornerRadius;\n // const centerX = this.to;\n // out.y = from.y! + (to.y! - from.y!) * r1;\n // const r1 = bounce1(ratio);\n // const r2 = bounce2(ratio);\n // // const\n // if (from.y1) {\n // out.y = from.y! + (to.y! - from.y!) * r1;\n // const height = to.y1! - to.y!;\n // const dh = height * r2;\n // out.y1 = Math.min(out.y + dh, this.to.y1!);\n // } else {\n // out.x = from.x! + (to.x! - from.x!) * r1;\n // const width = to.x! - to.x1!;\n // const dw = width * r2;\n // out.x1 = Math.max(out.x - dw, this.to.x1!);\n // }\n\n // out.y1 = from.y1 + (to.y1 - from.y1) * r;\n }\n}\n","import { ACustomAnimate, createLine } from '@visactor/vrender-core';\n\nexport class SymbolThrow extends ACustomAnimate<{ x?: number; y?: number }> {\n static label: string = 'symbol-throw';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n declare showLine: boolean;\n\n constructor(\n from: { x?: number; y?: number },\n to: { x?: number; y?: number },\n duration: number,\n easing: any,\n params: any\n ) {\n const f = {\n y: 0,\n x: params.width\n };\n\n super(f, to, duration, easing, params);\n this.showLine = params.showLine ?? true;\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes(this.from);\n if (this.showLine) {\n const shadowRoot = this.target.attachShadow();\n shadowRoot.add(createLine({ lineDash: [3, 3] }));\n }\n }\n\n static getPowIn(pow: number) {\n return function (t: number) {\n return Math.pow(t, pow);\n };\n }\n\n static cubicIn = SymbolThrow.getPowIn(3);\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.throw(ratio, out)) {\n this.bounce(ratio, out);\n }\n }\n onEnd(): void {\n this.target.setAttributes(this.to);\n this.bounce(1, {});\n }\n\n throw(ratio: number, out: Record) {\n ratio = Math.min(ratio * 2, 1);\n const { _layoutHeight } = this.target.attribute;\n const ratioY = SymbolThrow.cubicIn(ratio);\n const x = this.from.x! + (this.to.x! - this.from.x!) * ratio;\n const y = this.from.y! + (_layoutHeight! - this.from.y!) * ratioY;\n out.x = x;\n out.y = y;\n return ratio < 1;\n }\n\n bounce(ratio: number, out: Record) {\n ratio = Math.max((ratio - 0.5) * 2, 0);\n const { _layoutHeight, fill } = this.target.attribute;\n out.y = _layoutHeight - (_layoutHeight - this.to.y!) * ratio;\n const shadowRoot = this.target.shadowRoot;\n if (shadowRoot) {\n const line = shadowRoot.children[0];\n const height = _layoutHeight - out.y!;\n line.setAttributes({\n stroke: fill,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: height }\n ]\n });\n }\n }\n}\n","import { ACustomAnimate, createLine, generatorPathEasingFunc } from '@visactor/vrender-core';\n\nconst swingEaseStr =\n 'M 0 0 C 0.078 0.204 0.05 0.291 0.152 0.363 C 0.291 0.295 0.236 -0.224 0.334 -0.24 C 0.486 -0.224 0.48 0.202 0.566 0.217 C 0.696 0.183 0.622 -0.113 0.751 -0.138 C 0.873 -0.09 0.798 0.085 0.903 0.109 C 0.989 0.097 0.983 0.049 1 0';\nconst swingEase = generatorPathEasingFunc(swingEaseStr);\n\nexport class SymbolSwing extends ACustomAnimate<{ x?: number; y?: number }> {\n static label: string = 'symbol-swing';\n\n static delayPerTime: number = 50;\n static enterPerTime: number = 300;\n\n declare valid: boolean;\n declare delta: number;\n declare showLine: boolean;\n\n constructor(\n from: { x?: number; y?: number },\n to: { x?: number; y?: number },\n duration: number,\n easing: any,\n params: any\n ) {\n super(from, to, duration, easing, params);\n this.delta = params.delta ?? 10;\n this.showLine = params.showLine ?? true;\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onBind(): void {\n this.target && this.target.setAttributes({ ...this.from, y: this.target.attribute._layoutHeight });\n if (this.showLine) {\n const shadowRoot = this.target.attachShadow();\n shadowRoot.add(createLine({ lineDash: [3, 3], curveType: 'basis' }));\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if (!this.throw(ratio, out)) {\n // this.bounce(ratio, out);\n // }\n this.grow(ratio, out);\n this.swing(ratio, out);\n }\n onEnd(): void {\n this.target.setAttributes(this.to);\n this.swing(1, this.to);\n }\n\n grow(ratio: number, out: Record) {\n ratio = Math.min(ratio * 1.5, 1);\n const { _layoutHeight } = this.target.attribute;\n out.y = _layoutHeight - (_layoutHeight - this.to.y!) * ratio;\n out.x = this.to.x!;\n }\n\n swing(ratio: number, out: Record) {\n ratio = swingEase(ratio);\n const deltaX = this.delta * ratio;\n out.x += deltaX;\n\n const { _layoutHeight, fill } = this.target.attribute;\n\n const shadowRoot = this.target.shadowRoot;\n if (shadowRoot) {\n const line = shadowRoot.children[0];\n const height = _layoutHeight - out.y!;\n line.setAttributes({\n stroke: fill,\n points: [\n { x: 0, y: 0 },\n { x: -deltaX, y: height / 2 },\n // { x: -deltaX, y: height / 3 * 2 },\n { x: -deltaX, y: height }\n ]\n });\n }\n }\n}\n","export function flicker(t: number, n: number) {\n const step = 1 / n;\n let flag = 1;\n while (t > step) {\n t -= step;\n flag *= -1;\n }\n const v = (flag * t) / step;\n return v > 0 ? v : 1 + v;\n}\n\nexport function flicker1(t: number) {\n return flicker(t, 3);\n}\nexport function flicker2(t: number) {\n return flicker(t, 3);\n}\nexport function flicker3(t: number) {\n return flicker(t, 3);\n}\nexport function flicker4(t: number) {\n return flicker(t, 3);\n}\nexport function flicker5(t: number) {\n return flicker(t, 5);\n}\nexport function flicker6(t: number) {\n return flicker(t, 5);\n}\nexport function flicker7(t: number) {\n return flicker(t, 5);\n}\nexport function flicker8(t: number) {\n return flicker(t, 5);\n}\nexport function flicker9(t: number) {\n return flicker(t, 5);\n}\nexport function flicker10(t: number) {\n return flicker(t, 5);\n}\n","import { Easing } from '@visactor/vrender-core';\nimport { flicker } from './flicker';\n\nexport function registerEasing() {\n // 注册flicker\n for (let i = 0; i < 10; i++) {\n (Easing as any)[`flicker${i}`] = (t: number) => flicker(t, i);\n }\n}\n","const isUndefined = (value: any): value is undefined => {\n return value === undefined;\n};\n\nexport default isUndefined;\n","import { FederatedEvent } from './base-event';\nimport type { EventPoint } from '../../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for mouse events.\n */\nexport class FederatedMouseEvent extends FederatedEvent implements MouseEvent {\n /** Whether the \"alt\" key was pressed when this mouse event occurred. */\n altKey: boolean;\n\n /** The specific button that was pressed in this mouse event. */\n button: number;\n\n /** The button depressed when this event occurred. */\n buttons: number;\n\n /** Whether the \"control\" key was pressed when this mouse event occurred. */\n ctrlKey: boolean;\n\n /** Whether the \"meta\" key was pressed when this mouse event occurred. */\n metaKey: boolean;\n\n /** This is currently not implemented in the Federated Events API. */\n relatedTarget: EventTarget | null;\n\n /** Whether the \"shift\" key was pressed when this mouse event occurred. */\n shiftKey: boolean;\n\n /** The coordinates of the mouse event relative to the canvas. */\n client: EventPoint = {\n x: 0,\n y: 0\n };\n\n public get clientX(): number {\n return this.client.x;\n }\n\n public get clientY(): number {\n return this.client.y;\n }\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n /** The movement in this pointer relative to the last `mousemove` event. */\n movement: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get movementX(): number {\n return this.movement.x;\n }\n\n /** @readonly */\n get movementY(): number {\n return this.movement.y;\n }\n\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 offset: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get offsetX(): number {\n return this.offset.x;\n }\n\n /** @readonly */\n get offsetY(): number {\n return this.offset.y;\n }\n\n /** The pointer coordinates in world space. */\n global: EventPoint = {\n x: 0,\n y: 0\n };\n\n /** @readonly */\n get globalX(): number {\n return this.global.x;\n }\n\n /** @readonly */\n get globalY(): number {\n return this.global.y;\n }\n\n screen: EventPoint = {\n x: 0,\n y: 0\n };\n /** @readonly */\n get screenX(): number {\n return this.screen.x;\n }\n /** @readonly */\n get screenY(): number {\n return this.screen.y;\n }\n\n /**\n * Whether the modifier key was pressed when this event natively occurred.\n * @param key - The modifier key.\n */\n getModifierState(key: string): boolean {\n return 'getModifierState' in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n\n /**\n * Not supported.\n * @param _typeArg\n * @param _canBubbleArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n * @param _screenXArg\n * @param _screenYArg\n * @param _clientXArg\n * @param _clientYArg\n * @param _ctrlKeyArg\n * @param _altKeyArg\n * @param _shiftKeyArg\n * @param _metaKeyArg\n * @param _buttonArg\n * @param _relatedTargetArg\n * @deprecated\n */\n // eslint-disable-next-line max-params\n initMouseEvent(\n _typeArg: string,\n _canBubbleArg: boolean,\n _cancelableArg: boolean,\n _viewArg: Window,\n _detailArg: number,\n _screenXArg: number,\n _screenYArg: number,\n _clientXArg: number,\n _clientYArg: number,\n _ctrlKeyArg: boolean,\n _altKeyArg: boolean,\n _shiftKeyArg: boolean,\n _metaKeyArg: boolean,\n _buttonArg: number,\n _relatedTargetArg: EventTarget\n ): void {\n throw new Error('Method not implemented.');\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * A FederatedEvent for pointer events.\n */\nexport class FederatedPointerEvent extends FederatedMouseEvent implements PointerEvent {\n declare pickParams?: any;\n /**\n * The unique identifier of the pointer.\n */\n pointerId: number;\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n width = 0;\n\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n height = 0;\n\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n isPrimary = false;\n\n /**\n * The type of pointer that triggered the event.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\n */\n pointerType: string;\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 * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pressure\n */\n pressure: number;\n\n /**\n * Barrel pressure on a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n tangentialPressure: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltX\n */\n tiltX: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltY\n */\n tiltY: number;\n\n /**\n * Twist of a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n twist: number;\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n declare detail: number;\n\n getCoalescedEvents(): PointerEvent[] {\n if (this.type === 'pointermove' || this.type === 'mousemove' || this.type === 'touchmove') {\n return [this];\n }\n\n return [];\n }\n\n getPredictedEvents(): PointerEvent[] {\n throw new Error('getPredictedEvents is not supported!');\n }\n\n clone() {\n const event = new FederatedPointerEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyPointerData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n // copy propagation path for perf\n event.target = this.target;\n event.path = this.composedPath().slice();\n const p = this.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = this.type;\n\n return event;\n }\n}\n","import { FederatedMouseEvent } from './mouse-event';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nexport class FederatedWheelEvent extends FederatedMouseEvent implements WheelEvent {\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 deltaMode: number;\n\n /** Horizontal scroll amount */\n deltaX: number;\n\n /** Vertical scroll amount */\n deltaY: number;\n\n /** z-axis scroll amount. */\n deltaZ: number;\n\n static readonly DOM_DELTA_PIXEL = 0;\n\n readonly DOM_DELTA_PIXEL = 0;\n\n static readonly DOM_DELTA_LINE = 1;\n\n readonly DOM_DELTA_LINE = 1;\n\n static readonly DOM_DELTA_PAGE = 2;\n\n readonly DOM_DELTA_PAGE = 2;\n\n clone() {\n const event = new FederatedWheelEvent(this.manager);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n event.nativeEvent = this.nativeEvent;\n event.originalEvent = this.originalEvent;\n\n this.manager?.copyWheelData(this, event);\n this.manager?.copyMouseData(this, event);\n this.manager?.copyData(this, event);\n\n event.target = this.target;\n event.path = this.composedPath().slice();\n const p = this.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = this.type;\n\n return event;\n }\n}\n","export const WILDCARD = '*';\n","export const clock = typeof performance === 'object' && (performance as any).now ? performance : Date;\n","import type { Dict } from '@visactor/vutils';\nimport { EventEmitter, Logger, get } from '@visactor/vutils';\nimport { FederatedMouseEvent, FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { IEventTarget } from '../interface/event';\nimport { WILDCARD } from './constant';\nimport type { FederatedEvent } from './federated-event/base-event';\nimport { clock } from './util';\nimport type { Cursor, IGraphic } from '../interface';\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n// The maximum iterations used in propagation. This prevent infinite loops.\nconst PROPAGATION_LIMIT = 2048;\n\ntype TrackingData = {\n pressTargetsByButton: {\n [id: number]: IEventTarget[];\n };\n clicksByButton: {\n [id: number]: {\n clickCount: number;\n target: IEventTarget;\n timeStamp: number;\n };\n };\n overTargets: IEventTarget[];\n};\n\ntype EventManagerConfig = {\n /**\n * 多次点击之间的最大时间,默认为 200 ms\n * @default 200\n */\n clickInterval?: number;\n supportsTouchEvents?: boolean;\n};\n\ntype EmitterListener = { fn: (...args: any[]) => any; context: any; once: boolean };\ntype EmitterListeners = Record;\n\nfunction isMouseLike(pointerType: string) {\n return pointerType === 'mouse' || pointerType === 'pen';\n}\n\nconst DEFAULT_CLICK_INTERVAL = 200;\n\nexport class EventManager {\n rootTarget: IEventTarget;\n\n dispatch: any = new EventEmitter();\n\n cursor: Cursor | string;\n cursorTarget: IEventTarget | null = null;\n pauseNotify: boolean = false;\n\n protected mappingTable: Record<\n string,\n Array<{\n fn: (e: FederatedEvent, target: IEventTarget) => void;\n priority: number;\n }>\n >;\n\n protected mappingState: Record = {\n trackingData: {}\n };\n\n protected eventPool: Map = new Map();\n\n // 缓存上一个坐标点的拾取结果,用于优化在同一个点连续触发事件的拾取逻辑\n private _prePointTargetCache: Dict & { stageRenderCount: number };\n\n private _config: EventManagerConfig;\n\n constructor(root: IEventTarget, config: EventManagerConfig) {\n this.rootTarget = root;\n this.mappingTable = {};\n this._config = {\n clickInterval: DEFAULT_CLICK_INTERVAL,\n ...config\n };\n this.addEventMapping('pointerdown', this.onPointerDown);\n this.addEventMapping('pointermove', this.onPointerMove);\n this.addEventMapping('pointerout', this.onPointerOut);\n this.addEventMapping('pointerleave', this.onPointerOut);\n this.addEventMapping('pointerover', this.onPointerOver);\n this.addEventMapping('pointerup', this.onPointerUp);\n this.addEventMapping('pointerupoutside', this.onPointerUpOutside);\n this.addEventMapping('wheel', this.onWheel);\n }\n\n addEventMapping(type: string, fn: (e: FederatedEvent, target: IEventTarget) => void): void {\n if (!this.mappingTable[type]) {\n this.mappingTable[type] = [];\n }\n\n this.mappingTable[type].push({\n fn,\n priority: 0\n });\n this.mappingTable[type].sort((a, b) => a.priority - b.priority);\n }\n\n dispatchEvent(e: FederatedEvent, type?: string): void {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n\n this.propagate(e, type);\n this.dispatch.emit(type || e.type, e);\n }\n\n mapEvent(e: FederatedEvent): void {\n if (!this.rootTarget) {\n return;\n }\n const mappers = this.mappingTable[e.type];\n\n let target;\n const cacheKey = `${e.canvasX}-${e.canvasY}`;\n if (\n this._prePointTargetCache?.[cacheKey] &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage &&\n (this._prePointTargetCache?.[cacheKey] as unknown as IGraphic)?.stage.renderCount ===\n (this._prePointTargetCache?.stageRenderCount as number)\n ) {\n target = this._prePointTargetCache[cacheKey];\n } else {\n target = this.pickTarget(e.viewX, e.viewY, e);\n // 缓存上一个坐标点的拾取结果,减少拾取的次数,如 pointermove pointerdown 和 pointerup 在同一个点触发\n // 如果存在params,那么就不缓存\n if (!(e as any).pickParams) {\n this._prePointTargetCache = {\n [cacheKey]: target,\n stageRenderCount: target?.stage.renderCount ?? -1\n };\n }\n }\n\n if (mappers) {\n for (let i = 0, j = mappers.length; i < j; i++) {\n mappers[i].fn(e, target);\n }\n } else {\n Logger.getInstance().warn(`[EventManager]: Event mapping not defined for ${e.type}`);\n }\n }\n\n propagate(e: FederatedEvent, type?: string): void {\n if (!e.target) {\n return;\n }\n\n const composedPath = e.composedPath();\n\n e.eventPhase = e.CAPTURING_PHASE;\n\n for (let i = 0, j = composedPath.length - 1; i < j; i++) {\n e.currentTarget = composedPath[i];\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n\n e.eventPhase = e.BUBBLING_PHASE;\n\n for (let i = composedPath.length - 2; i >= 0; i--) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) {\n return;\n }\n }\n }\n\n propagationPath(target: IEventTarget): IEventTarget[] {\n const propagationPath = [target];\n\n for (let i = 0; i < PROPAGATION_LIMIT && target !== this.rootTarget && target.parent; i++) {\n if (!target.parent) {\n throw new Error('Cannot find propagation path to disconnected target');\n }\n\n propagationPath.push(target.parent);\n\n target = target.parent;\n }\n\n propagationPath.reverse();\n\n return propagationPath;\n }\n\n protected notifyTarget(e: FederatedEvent, type?: string): void {\n if (this.pauseNotify) {\n return;\n }\n type = type ?? e.type;\n const key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? `${type}capture` : type;\n\n this.notifyListeners(e, key);\n\n if (e.eventPhase === e.AT_TARGET) {\n this.notifyListeners(e, type);\n }\n }\n\n protected onPointerDown = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerdown');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchstart');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightdown' : 'mousedown');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerMove = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n const trackingData = this.trackingData(from.pointerId);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n if (trackingData.overTargets && outTarget && outTarget !== this.rootTarget && outTarget !== e.target) {\n const outType = from.type === 'mousemove' ? 'mouseout' : 'pointerout';\n const outEvent = this.createPointerEvent(from, outType, outTarget || undefined);\n\n this.dispatchEvent(outEvent, 'pointerout');\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n if (!e.composedPath().includes(outTarget!)) {\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target)) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n this.freeEvent(leaveEvent);\n }\n\n this.freeEvent(outEvent);\n }\n\n if (outTarget !== e.target) {\n const overType = from.type === 'mousemove' ? 'mouseover' : 'pointerover';\n const overEvent = this.clonePointerEvent(e, overType);\n\n this.dispatchEvent(overEvent, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(overEvent, 'mouseover');\n }\n\n let overTargetAncestor = outTarget?.parent;\n\n while (overTargetAncestor && overTargetAncestor !== this.rootTarget.parent) {\n if (overTargetAncestor === e.target) {\n break;\n }\n\n overTargetAncestor = overTargetAncestor.parent;\n }\n\n const didPointerEnter = !overTargetAncestor || overTargetAncestor === this.rootTarget.parent;\n\n if (didPointerEnter) {\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n let currentTarget = enterEvent.target;\n // 预先计算 outTarget 的所有祖先\n const outTargetAncestors = new Set();\n let ancestor = outTarget;\n while (ancestor && ancestor !== this.rootTarget) {\n outTargetAncestors.add(ancestor);\n ancestor = ancestor.parent;\n }\n\n while (currentTarget && currentTarget !== outTarget && currentTarget !== this.rootTarget.parent) {\n // 检查 currentTarget 是否是 outTarget 的祖先\n if (!outTargetAncestors.has(currentTarget)) {\n enterEvent.currentTarget = currentTarget;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n this.freeEvent(enterEvent);\n }\n\n this.freeEvent(overEvent);\n }\n\n const propagationMethod = 'dispatchEvent';\n\n this[propagationMethod](e, 'pointermove');\n\n if (e.pointerType === 'touch') {\n this[propagationMethod](e, 'touchmove');\n }\n\n if (isMouse) {\n this[propagationMethod](e, 'mousemove');\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n };\n\n protected onPointerOver = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const e = this.createPointerEvent(from, from.type, target);\n const isMouse = isMouseLike(e.pointerType);\n\n this.dispatchEvent(e, 'pointerover');\n if (isMouse) {\n this.dispatchEvent(e, 'mouseover');\n }\n if (e.pointerType === 'mouse') {\n this.cursorTarget = e.target;\n this.cursor = (e.target?.attribute?.cursor as Cursor) || this.rootTarget.getCursor();\n }\n\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) {\n this.notifyTarget(enterEvent, 'mouseenter');\n }\n\n enterEvent.target = enterEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n this.freeEvent(enterEvent);\n };\n\n protected onPointerOut = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n if (trackingData.overTargets) {\n const isMouse = isMouseLike(from.pointerType);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n const outEvent = this.createPointerEvent(from, 'pointerout', outTarget || undefined);\n\n this.dispatchEvent(outEvent);\n if (isMouse) {\n this.dispatchEvent(outEvent, 'mouseout');\n }\n\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && leaveEvent.target !== this.rootTarget.parent) {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) {\n this.notifyTarget(leaveEvent, 'mouseleave');\n }\n\n leaveEvent.target = leaveEvent.target.parent as IEventTarget;\n }\n\n trackingData.overTargets = [];\n\n this.freeEvent(outEvent);\n this.freeEvent(leaveEvent);\n }\n\n this.cursorTarget = null;\n this.cursor = '';\n };\n\n protected onPointerUp = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const now = clock.now();\n const e = this.createPointerEvent(from, from.type, target);\n\n this.dispatchEvent(e, 'pointerup');\n\n if (e.pointerType === 'touch') {\n this.dispatchEvent(e, 'touchend');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightup' : 'mouseup');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n\n let clickTarget = pressTarget;\n\n if (pressTarget && !e.composedPath().includes(pressTarget)) {\n let currentTarget = pressTarget;\n\n while (currentTarget && !e.composedPath().includes(currentTarget)) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n const isRightButton = e.button === 2;\n\n this.notifyTarget(e, isRightButton ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n\n clickTarget = currentTarget;\n }\n\n if (clickTarget) {\n const clickEvent = this.clonePointerEvent(e, 'click');\n\n clickEvent.target = clickTarget;\n clickEvent.path = [];\n clickEvent.detailPath = [];\n\n if (!trackingData.clicksByButton[from.button]) {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now\n };\n }\n\n const clickHistory = trackingData.clicksByButton[from.button];\n if (\n clickHistory.target === clickEvent.target &&\n now - clickHistory.timeStamp < (this._config.clickInterval ?? DEFAULT_CLICK_INTERVAL)\n ) {\n ++clickHistory.clickCount;\n } else {\n clickHistory.clickCount = 1;\n }\n\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n\n clickEvent.detail = clickHistory.clickCount;\n\n if (isMouseLike(clickEvent.pointerType)) {\n this.dispatchEvent(clickEvent, 'click');\n\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dblclick');\n }\n } else if (clickEvent.pointerType === 'touch' && this._config.supportsTouchEvents) {\n this.dispatchEvent(clickEvent, 'tap');\n if (clickHistory.clickCount === 2) {\n // 双击\n this.dispatchEvent(clickEvent, 'dbltap');\n }\n }\n\n this.dispatchEvent(clickEvent, 'pointertap');\n\n this.freeEvent(clickEvent);\n }\n\n this.freeEvent(e);\n };\n\n protected onPointerUpOutside = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedPointerEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n const e = this.createPointerEvent(from, from.type, target);\n\n if (pressTarget) {\n let currentTarget = pressTarget;\n\n while (currentTarget) {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch') {\n this.notifyTarget(e, 'touchendoutside');\n } else if (isMouseLike(e.pointerType)) {\n this.notifyTarget(e, e.button === 2 ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent as IEventTarget;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n }\n\n this.freeEvent(e);\n };\n\n protected onWheel = (from: FederatedEvent, target: IEventTarget) => {\n if (!(from instanceof FederatedWheelEvent)) {\n Logger.getInstance().warn('EventManager cannot map a non-wheel event as a wheel event');\n\n return;\n }\n\n const wheelEvent = this.createWheelEvent(from, target);\n\n this.dispatchEvent(wheelEvent);\n this.freeEvent(wheelEvent);\n };\n\n protected findMountedTarget(propagationPath: IEventTarget[] | null): IEventTarget | null {\n if (!propagationPath) {\n return null;\n }\n\n let currentTarget = propagationPath[0];\n\n for (let i = 1; i < propagationPath.length; i++) {\n if (propagationPath[i].parent === currentTarget) {\n currentTarget = propagationPath[i];\n } else {\n break;\n }\n }\n\n return currentTarget;\n }\n\n protected createPointerEvent(\n from: FederatedPointerEvent,\n type?: string,\n target?: IEventTarget\n ): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n\n if (target) {\n event.target = target;\n } else {\n event.target = this.pickTarget(event.viewX ?? event.global.x, event.viewY ?? event.global.y, event);\n }\n\n if (typeof type === 'string') {\n event.type = type;\n }\n\n return event;\n }\n\n protected createWheelEvent(from: FederatedWheelEvent, target?: IEventTarget): FederatedWheelEvent {\n const event = this.allocateEvent(FederatedWheelEvent);\n\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = target || this.pickTarget(event.viewX ?? event.global.x, event.viewY ?? event.global.y, event);\n\n return event;\n }\n\n protected clonePointerEvent(from: FederatedPointerEvent, type?: string): FederatedPointerEvent {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.target = from.target;\n event.path = from.composedPath().slice();\n const p = from.composedDetailPath();\n event.detailPath = p && p.slice();\n event.type = type ?? event.type;\n\n return event;\n }\n\n copyWheelData(from: FederatedWheelEvent, to: FederatedWheelEvent): void {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n\n copyPointerData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedPointerEvent && to instanceof FederatedPointerEvent)) {\n return;\n }\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 copyMouseData(from: FederatedEvent, to: FederatedEvent): void {\n if (!(from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent)) {\n return;\n }\n\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.ctrlKey = from.ctrlKey;\n to.shiftKey = from.shiftKey;\n to.metaKey = from.metaKey;\n\n ['client', 'movement', 'canvas', 'screen', 'global', 'offset', 'viewport'].forEach(key => {\n to[key].x = from[key].x;\n to[key].y = from[key].y;\n });\n }\n\n copyData(from: FederatedEvent, to: FederatedEvent): void {\n to.isTrusted = from.isTrusted;\n to.srcElement = from.srcElement;\n to.timeStamp = clock.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.which = from.which;\n\n to.layer.x = from.layer.x;\n to.layer.y = from.layer.y;\n\n to.page.x = from.page.x;\n to.page.y = from.page.y;\n\n (to as any).pickParams = (from as any).pickParams;\n }\n\n protected trackingData(id: number): TrackingData {\n if (!this.mappingState.trackingData[id]) {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n\n return this.mappingState.trackingData[id];\n }\n\n protected allocateEvent(constructor: { new (boundary: EventManager): T }): T {\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n const event = (this.eventPool.get(constructor as any)?.pop() as T) || new constructor(this);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.detailPath = [];\n event.target = null;\n\n return event;\n }\n\n protected freeEvent(event: T): void {\n if (event.manager !== this) {\n throw new Error('It is illegal to free an event not managed by this EventManager!');\n }\n\n const constructor = event.constructor;\n\n if (!this.eventPool.has(constructor as any)) {\n this.eventPool.set(constructor as any, []);\n }\n\n this.eventPool.get(constructor as any)?.push(event);\n }\n\n private notifyListeners(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[type];\n\n if (listeners) {\n if ('fn' in listeners) {\n if (listeners.once) {\n e.currentTarget.removeEventListener(type, listeners.fn, { once: true });\n }\n listeners.fn.call(listeners.context, e);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n if (listeners[i].once) {\n e.currentTarget.removeEventListener(type, listeners[i].fn, { once: true });\n }\n listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n // 永远触发WILDCARD事件代理\n this.emitDelegation(e, type);\n }\n\n private emitDelegation(e: FederatedEvent, type: string): void {\n const events = (e.currentTarget as any)._events as EmitterListeners;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n }\n\n private pickTarget(x: number, y: number, e: any) {\n let target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const pickResult = this.rootTarget.pick(x, y);\n if (pickResult && pickResult.graphic) {\n target = pickResult.graphic;\n } else if (pickResult && pickResult.group) {\n target = pickResult.group;\n // } else if (x >= 0 && x <= get(this.rootTarget, 'width') && y >= 0 && y <= get(this.rootTarget, 'height')) {\n } else if ((this.rootTarget as unknown as IGraphic).AABBBounds.contains(x, y)) {\n target = this.rootTarget;\n } else {\n target = null;\n }\n if (e) {\n e.pickParams = pickResult.params;\n }\n return target;\n }\n\n release() {\n this.dispatch.removeAllListeners();\n this.eventPool.clear();\n this.rootTarget = null;\n this.mappingTable = null;\n this.mappingState = null;\n this.cursorTarget = null;\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\nimport { isUndefined, has, isString } from '@visactor/vutils';\nimport type { IGlobal, IWindow } from '../interface';\nimport { EventManager } from './event-manager';\nimport { FederatedPointerEvent, FederatedWheelEvent } from './federated-event';\nimport type { FederatedMouseEvent } from './federated-event/mouse-event';\nimport type { EventPoint, IElementLike, IEventTarget, NativeEvent, RenderConfig } from '../interface/event';\nimport { clock } from './util';\n\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER: Record = {\n touchstart: 'pointerdown',\n touchend: 'pointerup',\n touchendoutside: 'pointerupoutside',\n touchmove: 'pointermove',\n touchcancel: 'pointercancel'\n};\n\n/**\n * 代码参考自 https://github.com/pixijs/pixijs\n * The MIT License\n\n Copyright (c) 2013-2023 Mathew Groves, Chad Engler\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/**\n * The system for handling UI events.\n */\nexport class EventSystem {\n private readonly globalObj: IGlobal;\n readonly manager: EventManager;\n\n /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n // readonly supportsTouchEvents = 'ontouchstart' in this.globalObj;\n readonly supportsTouchEvents: boolean;\n\n /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n // readonly supportsPointerEvents = !!this.globalObj.PointerEvent;\n readonly supportsPointerEvents: boolean;\n\n readonly supportsMouseEvents: boolean;\n\n readonly applyStyles: boolean;\n\n /**\n * Should default browser actions automatically be prevented.\n * Does not apply to pointer events for backwards compatibility\n * preventDefault on pointer events stops mouse events from firing\n * Thus, for every pointer event, there will always be either a mouse of touch event alongside it.\n * @default false\n */\n autoPreventDefault: boolean;\n\n /**\n * Dictionary of how different cursor modes are handled. Strings are handled as CSS cursor\n * values, objects are handled as dictionaries of CSS values for domElement,\n * and functions are called instead of changing the CSS.\n * Default CSS cursor values are provided for 'default' and 'pointer' modes.\n * @member {Object void) | CSSStyleDeclaration>}\n */\n cursorStyles: Record void) | CSSStyleDeclaration>;\n\n /**\n * The DOM element to which the root event listeners are bound. This is automatically set to\n */\n domElement: IElementLike | IWindow | null;\n\n /** The resolution used to convert between the DOM client space into world space. */\n resolution = 1;\n\n private currentCursor: string;\n private rootPointerEvent: FederatedPointerEvent;\n private rootWheelEvent: FederatedWheelEvent;\n private eventsAdded: boolean;\n\n constructor(params: RenderConfig) {\n const {\n targetElement, // 别名,避免和浏览器window重名\n resolution,\n rootNode,\n global,\n autoPreventDefault = false,\n clickInterval,\n supportsTouchEvents = global.supportsTouchEvents,\n supportsPointerEvents = global.supportsPointerEvents\n } = params;\n this.manager = new EventManager(rootNode, {\n clickInterval,\n supportsTouchEvents: supportsTouchEvents\n });\n\n this.globalObj = global;\n this.supportsPointerEvents = supportsPointerEvents;\n this.supportsTouchEvents = supportsTouchEvents;\n this.supportsMouseEvents = global.supportsMouseEvents;\n this.applyStyles = global.applyStyles;\n\n this.autoPreventDefault = autoPreventDefault;\n this.eventsAdded = false;\n\n this.rootPointerEvent = new FederatedPointerEvent();\n this.rootWheelEvent = new FederatedWheelEvent();\n\n this.cursorStyles = {\n default: 'inherit',\n pointer: 'pointer'\n };\n\n this.resolution = resolution;\n this.setTargetElement(targetElement);\n }\n\n release(): void {\n this.removeEvents();\n this.manager && this.manager.release();\n this.domElement = null;\n (this as any).manager = null;\n (this as any).globalObj = null;\n }\n\n setCursor(mode: string, target: IEventTarget | null | 'ignore'): void {\n if (!target && !(this.manager.rootTarget as any).window._handler.canvas.controled) {\n return;\n }\n\n if (!mode) {\n mode = 'default';\n }\n const { applyStyles, domElement } = this;\n\n if (this.currentCursor === mode) {\n return;\n }\n this.currentCursor = mode;\n const style = this.cursorStyles[mode];\n if (style) {\n if (typeof style === 'string' && applyStyles) {\n domElement.style.cursor = style;\n } else if (typeof style === 'function') {\n style(mode);\n } else if (typeof style === 'object' && applyStyles) {\n Object.assign(domElement.style, style);\n }\n } else if (applyStyles && isString(mode) && !has(this.cursorStyles, mode)) {\n domElement.style.cursor = mode;\n }\n }\n\n private onPointerDown = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const events = this.normalizeToPointerData(nativeEvent);\n\n if (this.autoPreventDefault && (events[0] as any).isNormalized) {\n const cancelable = nativeEvent.cancelable || !('cancelable' in nativeEvent);\n\n if (cancelable) {\n nativeEvent.preventDefault();\n }\n }\n\n for (let i = 0, j = events.length; i < j; i++) {\n const nativeEvent = events[i];\n const federatedEvent = this.bootstrapEvent(this.rootPointerEvent, nativeEvent);\n\n this.manager.mapEvent(federatedEvent);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerMove = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n if (this.isEventOutsideOfTargetElement(nativeEvent)) {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerUp = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const outside = this.isEventOutsideOfTargetViewPort(nativeEvent) ? 'outside' : '';\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n event.type += outside;\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n private onPointerOverOut = (nativeEvent: NativeEvent): void => {\n if (this.supportsTouchEvents && (nativeEvent as PointerEvent).pointerType === 'touch') {\n return;\n }\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.manager.mapEvent(event);\n }\n\n this.setCursor(this.manager.cursor, this.manager.cursorTarget);\n // 避免内存泄露\n this.rootPointerEvent.nativeEvent = null;\n };\n\n protected onWheel = (nativeEvent: WheelEvent): void => {\n const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n\n this.manager.mapEvent(wheelEvent);\n };\n\n setTargetElement(element: IElementLike | null): void {\n this.removeEvents();\n this.domElement = element;\n this.addEvents();\n }\n\n private addEvents(): void {\n if (this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('pointermove', this.onPointerMove, true);\n domElement.addEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.addEventListener('pointerdown', this.onPointerDown, true);\n domElement.addEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.addEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().addEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().addEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.addEventListener('mousemove', this.onPointerMove, true);\n domElement.addEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.addEventListener('mousedown', this.onPointerDown, true);\n domElement.addEventListener('mouseout', this.onPointerOverOut, true);\n domElement.addEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.addEventListener('touchstart', this.onPointerDown, true);\n domElement.addEventListener('touchend', this.onPointerUp, true);\n domElement.addEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.addEventListener('wheel', this.onWheel, {\n capture: true\n });\n\n this.eventsAdded = true;\n }\n\n private removeEvents(): void {\n if (!this.eventsAdded || !this.domElement) {\n return;\n }\n const { globalObj, domElement } = this;\n\n if (this.supportsPointerEvents) {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('pointermove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('pointerup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('pointermove', this.onPointerMove, true);\n domElement.removeEventListener('pointerup', this.onPointerUp, true);\n }\n domElement.removeEventListener('pointerdown', this.onPointerDown, true);\n domElement.removeEventListener('pointerleave', this.onPointerOverOut, true);\n domElement.removeEventListener('pointerover', this.onPointerOverOut, true);\n } else {\n if (globalObj.getDocument()) {\n globalObj.getDocument().removeEventListener('mousemove', this.onPointerMove, true);\n globalObj.getDocument().removeEventListener('mouseup', this.onPointerUp, true);\n } else {\n domElement.removeEventListener('mousemove', this.onPointerMove, true);\n domElement.removeEventListener('mouseup', this.onPointerUp, true);\n }\n domElement.removeEventListener('mousedown', this.onPointerDown, true);\n domElement.removeEventListener('mouseout', this.onPointerOverOut, true);\n domElement.removeEventListener('mouseover', this.onPointerOverOut, true);\n }\n\n if (this.supportsTouchEvents) {\n domElement.removeEventListener('touchstart', this.onPointerDown, true);\n domElement.removeEventListener('touchend', this.onPointerUp, true);\n domElement.removeEventListener('touchmove', this.onPointerMove, true);\n }\n\n domElement.removeEventListener('wheel', this.onWheel, true);\n\n this.domElement = null;\n this.eventsAdded = false;\n }\n\n private mapToViewportPoint(event: IPointLike): EventPoint {\n if ((this.domElement as IWindow).pointTransform) {\n return (this.domElement as IWindow).pointTransform(event.x, event.y);\n }\n return event;\n }\n\n private mapToCanvasPoint(nativeEvent: PointerEvent | WheelEvent | TouchEvent): EventPoint {\n const point = this.globalObj?.mapToCanvasPoint(nativeEvent, this.domElement);\n\n if (point) {\n return point;\n }\n\n let x: number = 0;\n let y: number = 0;\n if ((nativeEvent as TouchEvent).changedTouches) {\n const data = (nativeEvent as TouchEvent).changedTouches[0] ?? ({} as any);\n x = data.clientX || 0;\n y = data.clientY || 0;\n } else {\n x = (nativeEvent as PointerEvent | WheelEvent).clientX || 0;\n y = (nativeEvent as PointerEvent | WheelEvent).clientY || 0;\n }\n const rect = this.domElement.getBoundingClientRect();\n return {\n x: x - rect.left,\n y: y - rect.top\n };\n }\n\n private normalizeToPointerData(event: TouchEvent | MouseEvent | PointerEvent): PointerEvent[] {\n const normalizedEvents = [];\n\n if (\n this.supportsTouchEvents &&\n (event as TouchEvent).changedTouches &&\n (event as TouchEvent).changedTouches.length\n ) {\n for (let i = 0, li = (event as TouchEvent).changedTouches.length; i < li; i++) {\n const touch = (event as TouchEvent).changedTouches[i] as VRenderTouch;\n\n if (isUndefined(touch.button)) {\n touch.button = 0;\n }\n if (isUndefined(touch.buttons)) {\n touch.buttons = 1;\n }\n if (isUndefined(touch.isPrimary)) {\n touch.isPrimary = (event as TouchEvent).touches.length === 1 && event.type === 'touchstart';\n }\n if (isUndefined(touch.width)) {\n touch.width = touch.radiusX || 1;\n }\n if (isUndefined(touch.height)) {\n touch.height = touch.radiusY || 1;\n }\n if (isUndefined(touch.tiltX)) {\n touch.tiltX = 0;\n }\n if (isUndefined(touch.tiltY)) {\n touch.tiltY = 0;\n }\n if (isUndefined(touch.pointerType)) {\n touch.pointerType = 'touch';\n }\n if (isUndefined(touch.pointerId)) {\n touch.pointerId = touch.identifier || 0;\n }\n if (isUndefined(touch.pressure)) {\n touch.pressure = touch.force || 0.5;\n }\n if (isUndefined(touch.twist)) {\n touch.twist = 0;\n }\n if (isUndefined(touch.tangentialPressure)) {\n touch.tangentialPressure = 0;\n }\n if (isUndefined(touch.layerX)) {\n touch.layerX = touch.offsetX = touch.clientX;\n }\n if (isUndefined(touch.layerY)) {\n touch.layerY = touch.offsetY = touch.clientY;\n }\n\n touch.isNormalized = true;\n touch.type = event.type;\n\n normalizedEvents.push(touch);\n }\n } else if (\n !this.globalObj.supportsMouseEvents ||\n (event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof PointerEvent)))\n ) {\n const tempEvent = event as VRenderPointerEvent;\n\n if (isUndefined(tempEvent.isPrimary)) {\n tempEvent.isPrimary = true;\n }\n if (isUndefined(tempEvent.width)) {\n tempEvent.width = 1;\n }\n if (isUndefined(tempEvent.height)) {\n tempEvent.height = 1;\n }\n if (isUndefined(tempEvent.tiltX)) {\n tempEvent.tiltX = 0;\n }\n if (isUndefined(tempEvent.tiltY)) {\n tempEvent.tiltY = 0;\n }\n if (isUndefined(tempEvent.pointerType)) {\n tempEvent.pointerType = 'mouse';\n }\n if (isUndefined(tempEvent.pointerId)) {\n tempEvent.pointerId = MOUSE_POINTER_ID;\n }\n if (isUndefined(tempEvent.pressure)) {\n tempEvent.pressure = 0.5;\n }\n if (isUndefined(tempEvent.twist)) {\n tempEvent.twist = 0;\n }\n if (isUndefined(tempEvent.tangentialPressure)) {\n tempEvent.tangentialPressure = 0;\n }\n\n tempEvent.isNormalized = true;\n\n normalizedEvents.push(tempEvent);\n } else {\n normalizedEvents.push(event);\n }\n\n return normalizedEvents as PointerEvent[];\n }\n\n protected normalizeWheelEvent(nativeEvent: WheelEvent): FederatedWheelEvent {\n const event = this.rootWheelEvent;\n\n this.transferMouseData(event, nativeEvent);\n\n event.deltaMode = nativeEvent.deltaMode;\n event.deltaX = nativeEvent.deltaX;\n event.deltaY = nativeEvent.deltaY;\n event.deltaZ = nativeEvent.deltaZ;\n\n // 获取相对画布坐标\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.nativeEvent = nativeEvent;\n event.type = nativeEvent.type;\n\n return event;\n }\n\n /**\n * Normalizes the {@code nativeEvent} into a federateed {@code FederatedPointerEvent}.\n * @param event\n * @param nativeEvent\n */\n private bootstrapEvent(event: FederatedPointerEvent, nativeEvent: PointerEvent): FederatedPointerEvent {\n event.originalEvent = null;\n event.nativeEvent = nativeEvent;\n\n event.pointerId = nativeEvent.pointerId;\n event.width = nativeEvent.width;\n event.height = nativeEvent.height;\n event.isPrimary = nativeEvent.isPrimary;\n event.pointerType = nativeEvent.pointerType;\n event.pressure = nativeEvent.pressure;\n event.tangentialPressure = nativeEvent.tangentialPressure;\n event.tiltX = nativeEvent.tiltX;\n event.tiltY = nativeEvent.tiltY;\n event.twist = nativeEvent.twist;\n this.transferMouseData(event, nativeEvent);\n\n const { x: canvasX, y: canvasY } = this.mapToCanvasPoint(nativeEvent);\n event.canvas.x = canvasX;\n event.canvas.y = canvasY;\n\n event.global.x = canvasX;\n event.global.y = canvasY;\n\n event.offset.x = canvasX;\n event.offset.y = canvasY;\n\n // 获取相对绘图区域(viewport)坐标\n const { x: viewX, y: viewY } = this.mapToViewportPoint(event);\n event.viewport.x = viewX;\n event.viewport.y = viewY;\n\n event.isTrusted = nativeEvent.isTrusted;\n if (event.type === 'pointerleave') {\n event.type = 'pointerout';\n }\n if (event.type.startsWith('mouse')) {\n event.type = event.type.replace('mouse', 'pointer');\n }\n if (event.type.startsWith('touch')) {\n event.type = TOUCH_TO_POINTER[event.type] || event.type;\n }\n\n return event;\n }\n\n /**\n * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n * @param event\n * @param nativeEvent\n */\n private transferMouseData(event: FederatedMouseEvent, nativeEvent: MouseEvent): void {\n event.isTrusted = nativeEvent.isTrusted;\n event.srcElement = nativeEvent.srcElement as IEventTarget;\n event.timeStamp = clock.now();\n event.type = nativeEvent.type;\n\n event.altKey = nativeEvent.altKey;\n event.button = nativeEvent.button;\n event.buttons = nativeEvent.buttons;\n event.client.x = nativeEvent.clientX;\n event.client.y = nativeEvent.clientY;\n event.ctrlKey = nativeEvent.ctrlKey;\n event.shiftKey = nativeEvent.shiftKey;\n event.metaKey = nativeEvent.metaKey;\n event.movement.x = nativeEvent.movementX;\n event.movement.y = nativeEvent.movementY;\n event.page.x = nativeEvent.pageX;\n event.page.y = nativeEvent.pageY;\n event.relatedTarget = null;\n }\n\n private isEventOutsideOfTargetViewPort(nativeEvent: NativeEvent) {\n if (this.isEventOutsideOfTargetElement(nativeEvent)) {\n return true;\n }\n\n // 判断点是否在区间内\n if ((this.domElement as IWindow).getViewBox) {\n const p = this.mapToViewportPoint(this.mapToCanvasPoint(nativeEvent as any));\n const b = (this.domElement as IWindow).getViewBox();\n const w = b.width();\n const h = b.height();\n const contain = p.x < w && p.y < h && p.x > 0 && p.y > 0;\n return !contain;\n }\n return false;\n }\n\n private isEventOutsideOfTargetElement(nativeEvent: NativeEvent) {\n let target = nativeEvent.target;\n\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0) {\n target = nativeEvent.composedPath()[0];\n }\n\n const nativeElement = this.domElement.getNativeHandler\n ? this.domElement.getNativeHandler().nativeCanvas\n : this.domElement;\n\n return target !== nativeElement;\n }\n\n pauseTriggerEvent() {\n this.manager.pauseNotify = true;\n }\n resumeTriggerEvent() {\n this.manager.pauseNotify = false;\n }\n}\n\ninterface VRenderPointerEvent extends PointerEvent {\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n isNormalized: boolean;\n type: string;\n}\n\ninterface VRenderTouch extends Touch {\n button: number;\n buttons: number;\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n layerX: number;\n layerY: number;\n offsetX: number;\n offsetY: number;\n isNormalized: boolean;\n type: string;\n}\n","import { Generator } from '../../common/generator';\nimport { application } from '../../application';\nimport type { FullTap, IGraphic, IPlugin, IPluginService } from '../../interface';\n\nexport class AutoRenderPlugin implements IPlugin {\n name: 'AutoRenderPlugin' = 'AutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n handleChange = (graphic: IGraphic) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === this.pluginService.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n };\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAttributeUpdate.tap(this.key, this.handleChange);\n application.graphicService.hooks.onSetStage.tap(this.key, this.handleChange);\n application.graphicService.hooks.onRemove.tap(this.key, this.handleChange);\n }\n deactivate(context: IPluginService): void {\n const filterByName = (taps: FullTap[]) => {\n return taps.filter(item => {\n return item.name !== this.key;\n });\n };\n\n application.graphicService.hooks.onAttributeUpdate.taps = filterByName(\n application.graphicService.hooks.onAttributeUpdate.taps\n );\n application.graphicService.hooks.onSetStage.taps = filterByName(application.graphicService.hooks.onSetStage.taps);\n application.graphicService.hooks.onRemove.taps = filterByName(application.graphicService.hooks.onRemove.taps);\n }\n}\n","import { Generator } from '../../common/generator';\nimport { application } from '../../application';\nimport type { IGraphic, IPlugin, IPluginService } from '../../interface';\n\nexport class AutoRefreshPlugin implements IPlugin {\n name: 'AutoRefreshPlugin' = 'AutoRefreshPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n dpr: number;\n rafId: number;\n\n handleChange = (graphic: IGraphic) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === this.pluginService.stage && graphic.stage != null) {\n graphic.stage.renderNextFrame();\n }\n };\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.dpr = application.global.devicePixelRatio;\n this.refresh();\n }\n\n refresh() {\n if (!this._refreshByMediaQuery()) {\n this._refreshByRaf();\n }\n }\n protected _refreshByRaf() {\n const raf = application.global.getRequestAnimationFrame();\n this.rafId = raf(() => {\n if (application.global.devicePixelRatio !== this.dpr) {\n this.dpr = application.global.devicePixelRatio;\n this.pluginService.stage.setDpr(this.dpr, true);\n }\n this.refresh();\n });\n }\n protected _refreshByMediaQuery() {\n try {\n const mqString = `(resolution: ${window.devicePixelRatio}dppx)`;\n\n const updatePixelRatio = () => {\n if (window.devicePixelRatio !== this.dpr) {\n this.dpr = window.devicePixelRatio;\n this.pluginService.stage.setDpr(this.dpr, true);\n }\n };\n\n matchMedia(mqString).addEventListener('change', updatePixelRatio);\n } catch (err) {\n return false;\n }\n return true;\n }\n deactivate(context: IPluginService): void {\n const craf = application.global.getCancelAnimationFrame();\n craf && this.rafId && craf(this.rafId);\n }\n}\n","import type { IGroup, IPlugin, IPluginService, IDrawContext } from '../../interface';\nimport { application } from '../../application';\nimport { Generator } from '../../common/generator';\n\nexport class IncrementalAutoRenderPlugin implements IPlugin {\n name: 'IncrementalAutoRenderPlugin' = 'IncrementalAutoRenderPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n protected nextFrameRenderGroupSet: Set = new Set();\n protected willNextFrameRender: boolean = false;\n nextUserParams: Partial = {};\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n application.graphicService.hooks.onAddIncremental.tap(this.key, (graphic, group, stage) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (graphic.stage === context.stage && graphic.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.renderNextFrame(group);\n }\n });\n application.graphicService.hooks.onClearIncremental.tap(this.key, (group, stage) => {\n if (group.stage === context.stage && group.stage != null) {\n this.nextUserParams.startAtId = group._uid;\n this.nextUserParams.restartIncremental = true;\n this.renderNextFrame(group);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.onAddIncremental.taps =\n application.graphicService.hooks.onAddIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onClearIncremental.taps =\n application.graphicService.hooks.onClearIncremental.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n renderNextFrame(group: IGroup): void {\n this.nextFrameRenderGroupSet.add(group);\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n application.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame();\n this.willNextFrameRender = false;\n });\n }\n }\n\n _doRenderInThisFrame() {\n const stage = this.pluginService.stage;\n if (this.nextFrameRenderGroupSet.size) {\n this.nextFrameRenderGroupSet.forEach(group => {\n const layer = group.layer;\n if (!layer || !group.layer.subLayers) {\n return;\n }\n const subLayer = group.layer.subLayers.get(group._uid);\n if (!subLayer || !subLayer.drawContribution) {\n return;\n }\n subLayer.drawContribution.draw(stage.renderService, {\n stage,\n layer,\n viewBox: stage.window.getViewBox(),\n transMatrix: stage.window.getViewBoxTransform(),\n // TODO: 多图层时不应该再用默认background\n clear: 'transparent',\n renderService: stage.renderService,\n updateBounds: false,\n startAtId: group._uid,\n context: subLayer.layer.getNativeHandler().getContext(),\n ...this.nextUserParams\n });\n });\n this.nextUserParams = {};\n this.nextFrameRenderGroupSet.clear();\n }\n }\n}\n","import type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport type { IGraphic, IStage, IPlugin, IPluginService } from '../../interface';\nimport { application } from '../../application';\n\nconst globalBounds = new AABBBounds();\n\nexport class DirtyBoundsPlugin implements IPlugin {\n name: 'DirtyBoundsPlugin' = 'DirtyBoundsPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n stage.dirtyBounds.clear();\n });\n application.graphicService.hooks.beforeUpdateAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, willUpdate: boolean, bounds: IAABBBounds) => {\n if (graphic.glyphHost) {\n graphic = graphic.glyphHost;\n }\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !graphic.shouldSelfChangeUpdateAABBBounds()) {\n return;\n }\n if (willUpdate) {\n globalBounds.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n stage.dirty(globalBounds, graphic.parent && graphic.parent.globalTransMatrix);\n }\n }\n );\n application.graphicService.hooks.afterUpdateAABBBounds.tap(\n this.key,\n (\n graphic: IGraphic,\n stage: IStage,\n bounds: IAABBBounds,\n params: { globalAABBBounds: IAABBBounds },\n selfChange: boolean\n ) => {\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (graphic.isContainer && !selfChange) {\n return;\n }\n stage.dirty(params.globalAABBBounds);\n }\n );\n application.graphicService.hooks.clearAABBBounds.tap(\n this.key,\n (graphic: IGraphic, stage: IStage, bounds: IAABBBounds) => {\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n if (stage) {\n stage.dirty(bounds);\n }\n }\n );\n application.graphicService.hooks.onRemove.tap(this.key, (graphic: IGraphic) => {\n const stage = graphic.stage;\n if (!(stage && stage === this.pluginService.stage && stage.renderCount)) {\n return;\n }\n if (stage) {\n stage.dirty(graphic.globalAABBBounds);\n }\n });\n }\n deactivate(context: IPluginService): void {\n application.graphicService.hooks.beforeUpdateAABBBounds.taps =\n application.graphicService.hooks.beforeUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.afterUpdateAABBBounds.taps =\n application.graphicService.hooks.afterUpdateAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.clearAABBBounds.taps =\n application.graphicService.hooks.clearAABBBounds.taps.filter(item => {\n return item.name !== this.key;\n });\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n application.graphicService.hooks.onRemove.taps = application.graphicService.hooks.onRemove.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n}\n","import { application } from '../../application';\nimport type { ITickHandler } from '../../interface/animate';\n\nexport class RAFTickHandler implements ITickHandler {\n protected released: boolean;\n\n static Avaliable(): boolean {\n return !!application.global.getRequestAnimationFrame();\n }\n avaliable(): boolean {\n return RAFTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n const raf = application.global.getRequestAnimationFrame();\n raf(() => {\n if (this.released) {\n return;\n }\n cb(this);\n });\n }\n\n release() {\n this.released = true;\n }\n getTime() {\n return Date.now();\n }\n}\n","import type { ITickHandler } from '../../interface/animate';\n\nexport class TimeOutTickHandler implements ITickHandler {\n protected timerId: number;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return TimeOutTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler) => void): void {\n this.timerId = setTimeout(() => {\n cb(this);\n }, interval) as unknown as number;\n }\n\n release() {\n if (this.timerId > 0) {\n clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n getTime() {\n return Date.now();\n }\n}\n","import { EventEmitter, Logger } from '@visactor/vutils';\nimport type { ITickHandler, ITickerHandlerStatic, ITimeline, ITicker } from '../../interface';\nimport { application } from '../../application';\nimport type { TickerMode } from './type';\nimport { STATUS } from './type';\nimport { RAFTickHandler } from './raf-tick-handler';\nimport { TimeOutTickHandler } from './timeout-tick-handler';\n\nexport class DefaultTicker extends EventEmitter implements ITicker {\n protected interval: number;\n protected tickerHandler: ITickHandler;\n protected _mode: TickerMode;\n protected status: STATUS;\n protected lastFrameTime: number;\n protected tickCounts: number;\n protected timelines: ITimeline[];\n autoStop: boolean;\n\n set mode(m: TickerMode) {\n if (this._mode === m) {\n return;\n }\n this._mode = m;\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n constructor(timelines: ITimeline[] = []) {\n super();\n this.init();\n this.lastFrameTime = -1;\n this.tickCounts = 0;\n this.timelines = timelines;\n this.autoStop = true;\n }\n\n init() {\n this.interval = NaN;\n this.status = STATUS.INITIAL;\n application.global.hooks.onSetEnv.tap('default-ticker', () => {\n this.initHandler();\n });\n if (application.global.env) {\n this.initHandler();\n }\n }\n\n addTimeline(timeline: ITimeline) {\n this.timelines.push(timeline);\n }\n remTimeline(timeline: ITimeline) {\n this.timelines = this.timelines.filter(t => t !== timeline);\n }\n getTimelines(): ITimeline[] {\n return this.timelines;\n }\n\n protected initHandler(): ITickHandler | null {\n if (this._mode) {\n return null;\n }\n const ticks: { mode: TickerMode; cons: ITickerHandlerStatic }[] = [\n { mode: 'raf', cons: RAFTickHandler },\n { mode: 'timeout', cons: TimeOutTickHandler }\n ];\n for (let i = 0; i < ticks.length; i++) {\n if (ticks[i].cons.Avaliable()) {\n this.mode = ticks[i].mode;\n break;\n }\n }\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n let handler: ITickHandler;\n // 创建下一个tickHandler\n switch (this._mode) {\n case 'raf':\n handler = new RAFTickHandler();\n break;\n case 'timeout':\n handler = new TimeOutTickHandler();\n break;\n // case 'manual':\n // handler = new ManualTickHandler();\n // break;\n default:\n Logger.getInstance().warn('非法的计时器模式');\n handler = new RAFTickHandler();\n break;\n }\n if (!handler.avaliable()) {\n return false;\n }\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n setInterval(interval: number) {\n this.interval = interval;\n }\n getInterval(): number {\n return this.interval;\n }\n\n setFPS(fps: number): void {\n this.setInterval(1000 / fps);\n }\n getFPS(): number {\n return 1000 / this.interval;\n }\n tick(interval: number): void {\n this.tickerHandler.tick(interval, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n tickTo(t: number): void {\n if (!this.tickerHandler.tickTo) {\n return;\n }\n this.tickerHandler.tickTo(t, (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n pause(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.PAUSE;\n return true;\n }\n resume(): boolean {\n if (this.status === STATUS.INITIAL) {\n return false;\n }\n this.status = STATUS.RUNNING;\n return true;\n }\n\n ifCanStop(): boolean {\n if (this.autoStop) {\n if (!this.timelines.length) {\n return true;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return true;\n }\n }\n return false;\n }\n\n start(force: boolean = false): boolean {\n if (this.status === STATUS.RUNNING) {\n return false;\n }\n if (!this.tickerHandler) {\n return false;\n }\n // 如果不需要start,那就不start\n if (!force) {\n // 暂停状态不执行\n if (this.status === STATUS.PAUSE) {\n return false;\n }\n if (!this.timelines.length) {\n return false;\n }\n if (this.timelines.reduce((a, b) => a + b.animateCount, 0) === 0) {\n return false;\n }\n }\n this.status = STATUS.RUNNING;\n this.tickerHandler.tick(0, this.handleTick);\n return true;\n }\n stop(): void {\n // 重新设置tickHandler\n this.status = STATUS.INITIAL;\n this.setupTickHandler();\n this.lastFrameTime = -1;\n }\n\n protected handleTick = (handler: ITickHandler, params?: { once?: boolean }) => {\n const { once = false } = params ?? {};\n // 尝试停止\n if (this.ifCanStop()) {\n this.stop();\n return;\n }\n this._handlerTick();\n if (!once) {\n handler.tick(this.interval, this.handleTick);\n }\n };\n\n protected _handlerTick = () => {\n // 具体执行函数\n const tickerHandler = this.tickerHandler;\n const time = tickerHandler.getTime();\n // 上一帧经过的时间\n let delta = 0;\n if (this.lastFrameTime >= 0) {\n delta = time - this.lastFrameTime;\n }\n this.lastFrameTime = time;\n\n if (this.status !== STATUS.RUNNING) {\n return;\n }\n this.tickCounts++;\n\n this.timelines.forEach(t => {\n t.tick(delta);\n });\n this.emit('tick');\n };\n\n release(): void {\n this.stop();\n this.timelines = [];\n this.tickerHandler.release();\n this.emit('afterTick');\n }\n\n /**\n * 同步tick状态,需要手动触发tick执行,保证属性为走完动画的属性\n * 【注】grammar会设置属性到最终值,然后调用render,这时候需要VRender手动触发tick,保证属性为走完动画的属性,而不是Grammar设置上的属性\n */\n trySyncTickStatus() {\n if (this.status === STATUS.RUNNING) {\n this._handlerTick();\n }\n }\n}\n","import { DefaultTicker } from './Ticker/default-ticker';\nimport { defaultTimeline } from './timeline';\n\nexport const defaultTicker = new DefaultTicker();\ndefaultTicker.addTimeline(defaultTimeline);\nconst TICKER_FPS = 60;\ndefaultTicker.setFPS(TICKER_FPS);\n","import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';\nimport { Bounds, Point, isString } from '@visactor/vutils';\nimport type {\n IGraphic,\n IExportType,\n IStage,\n IStageParams,\n ILayer,\n IColor,\n IGlobal,\n IOption3D,\n ICamera,\n vec3,\n IDirectionLight,\n ITicker,\n IRenderService,\n IPickerService,\n IPluginService,\n ISyncHook,\n IDrawContext,\n IWindow,\n ILayerService,\n ITimeline,\n IOptimizeType,\n LayerMode,\n PickResult,\n IPlugin\n} from '../interface';\nimport { VWindow } from './window';\nimport type { Layer } from './layer';\nimport { EventSystem } from '../event';\nimport { container } from '../container';\nimport { RenderService } from '../render';\nimport { Group } from '../graphic/group';\nimport { Theme } from '../graphic/theme';\nimport { PickerService } from '../picker/constants';\nimport { PluginService } from '../plugins/constants';\nimport { AutoRenderPlugin } from '../plugins/builtin-plugin/auto-render-plugin';\nimport { AutoRefreshPlugin } from '../plugins/builtin-plugin/auto-refresh-plugin';\nimport { IncrementalAutoRenderPlugin } from '../plugins/builtin-plugin/incremental-auto-render-plugin';\nimport { DirtyBoundsPlugin } from '../plugins/builtin-plugin/dirty-bounds-plugin';\nimport { defaultTicker } from '../animate/default-ticker';\nimport { SyncHook } from '../tapable';\nimport { LayerService } from './constants';\nimport { DefaultTimeline } from '../animate';\nimport { application } from '../application';\nimport { isBrowserEnv } from '../env-check';\nimport { Factory } from '../factory';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n X: 0,\n Y: 0,\n BACKGROUND: 'white'\n};\n\ntype IStageState = 'rendering' | 'normal';\n\n/**\n * Stage是一个舞台或一个视口,并不直接对应一个或多个Canvas,逻辑上和Canvas无关\n *\n * 1. Stage对应一个Canvas的整体,Stage的宽高即为Canvas的宽高\n * 2. Stage小于Canvas,Stage作为Canvas某个区域的视口,只管理这个区域\n * 3. 多图层时Stage的多个图层对应多个Canvas\n *\n * 原生环境下Stage可以拥有一个Window或者使用Window的一块区域\n *\n * 【注】如果希望获取完整的Canvas或窗口或者调整窗口信息,请使用Window模块\n */\nexport class Stage extends Group implements IStage {\n declare parent: IStage | null;\n\n declare state: IStageState;\n\n private _background: string | IColor;\n protected nextFrameRenderLayerSet: Set;\n protected willNextFrameRender: boolean;\n protected _cursor: string;\n renderCount: number;\n dirtyBounds: IBounds | null;\n option3d?: IOption3D;\n declare light?: IDirectionLight;\n declare camera?: ICamera;\n declare renderStyle?: string;\n\n declare hooks: {\n beforeRender: ISyncHook<[IStage]>;\n afterRender: ISyncHook<[IStage]>;\n };\n\n set viewBox(b: IBoundsLike) {\n this.window.setViewBox(b);\n }\n get viewBox(): IAABBBounds {\n return this.window.getViewBox();\n }\n\n /**\n * @deprecated 不建议使用\n */\n get x(): number {\n return this.window.getViewBox().x1;\n }\n /**\n * @deprecated 不建议使用\n */\n set x(x: number) {\n const b = this.window.getViewBox();\n b.translate(x - b.x1, 0);\n this.window.setViewBox(b);\n }\n /**\n * @deprecated 不建议使用\n */\n get y(): number {\n return this.window.getViewBox().y1;\n }\n /**\n * @deprecated 不建议使用\n */\n set y(y: number) {\n const b = this.window.getViewBox();\n b.translate(0, y - b.y1);\n this.window.setViewBox(b);\n }\n get width(): number {\n return this.window.width;\n }\n set width(w: number) {\n this.resize(w, this.height);\n }\n get viewWidth(): number {\n return this.window.getViewBox().width();\n }\n set viewWidth(w: number) {\n this.resizeView(w, this.viewHeight);\n }\n get viewHeight(): number {\n return this.window.getViewBox().height();\n }\n set viewHeight(h: number) {\n this.resizeView(this.viewWidth, h);\n }\n get height(): number {\n return this.window.height;\n }\n set height(h: number) {\n this.resize(this.width, h);\n }\n get dpr(): number {\n return this.window.dpr;\n }\n set dpr(r: number) {\n this.setDpr(r);\n }\n get background(): string | IColor {\n return this._background ?? DefaultConfig.BACKGROUND;\n }\n set background(b: string | IColor) {\n this._background = b;\n }\n get defaultLayer(): ILayer {\n return this.at(0) as unknown as ILayer;\n }\n\n ticker: ITicker;\n\n autoRender: boolean;\n autoRefresh: boolean;\n _enableLayout: boolean;\n htmlAttribute: boolean | string | any;\n reactAttribute: boolean | string | any;\n increaseAutoRender: boolean;\n view3dTranform: boolean;\n readonly window: IWindow;\n private readonly global: IGlobal;\n readonly renderService: IRenderService;\n protected pickerService?: IPickerService;\n readonly pluginService: IPluginService;\n readonly layerService: ILayerService;\n private _eventSystem?: EventSystem;\n private get eventSystem(): EventSystem {\n return this._eventSystem;\n }\n\n protected _beforeRender?: (stage: IStage) => void;\n protected _afterRender?: (stage: IStage) => void;\n // 0: 正常渲染, > 0: 跳过隐藏canvas的渲染, < 0: 禁止渲染\n protected _skipRender?: number;\n protected _afterNextRenderCbs?: ((stage: IStage) => void)[];\n protected lastRenderparams?: Partial;\n\n protected interactiveLayer?: ILayer;\n protected supportInteractiveLayer: boolean;\n protected timeline: ITimeline;\n\n declare params: Partial;\n\n // 是否在render之前执行了tick,如果没有执行,尝试执行tick用来应用动画属性,避免动画过程中随意赋值然后又调用同步render导致属性的突变\n // 第一次render不需要强行走动画\n protected tickedBeforeRender: boolean = true;\n\n /**\n * 所有属性都具有默认值。\n * Canvas为字符串或者Canvas元素,那么默认图层就会绑定到这个Canvas上\n * 如果不传入Canvas,那么会新建一个Canvas,用户可以通过Window模块管理这个Canvas\n * 1. 如果没有传入宽高,那么默认为canvas宽高,如果传入了宽高则stage使用传入宽高作为视口宽高\n * @param params\n */\n constructor(params: Partial = {}) {\n super({});\n this.params = params;\n this.theme = new Theme();\n this.hooks = {\n beforeRender: new SyncHook(['stage']),\n afterRender: new SyncHook(['stage'])\n };\n this.global = application.global;\n if (!this.global.env && isBrowserEnv()) {\n // 如果是浏览器环境,默认设置env\n this.global.setEnv('browser');\n }\n this.window = container.get(VWindow);\n this.renderService = container.get(RenderService);\n this.pluginService = container.get(PluginService);\n this.layerService = container.get(LayerService);\n this.pluginService.active(this, params);\n\n this.window.create({\n width: params.width,\n height: params.height,\n viewBox: params.viewBox,\n container: params.container,\n dpr: params.dpr || this.global.devicePixelRatio,\n canvasControled: params.canvasControled !== false,\n title: params.title || '',\n canvas: params.canvas\n });\n\n this.state = 'normal';\n this.renderCount = 0;\n this.tryInitEventSystem();\n // // 没有传入xy就默认为0\n // this._x = params.x ?? DefaultConfig.X;\n // this._y = params.y ?? DefaultConfig.Y;\n // // 没有传入view的宽高则默认为window的宽高\n // this._viewWidth = params.viewWidth ?? this.window.width;\n // this._viewHeight = params.viewHeight ?? this.window.height;\n // this._AABBBounds.set(this._x, this._y, this._viewWidth + this._x, this._viewHeight + this._y);\n // 背景色默认为纯白色\n this._background = params.background ?? DefaultConfig.BACKGROUND;\n\n // 创建一个默认layer图层\n // this.appendChild(new Layer(this, this.global, this.window, { main: true }));\n this.appendChild(this.layerService.createLayer(this, { main: true }));\n\n this.nextFrameRenderLayerSet = new Set();\n this.willNextFrameRender = false;\n this.stage = this;\n this.renderStyle = params.renderStyle;\n\n // this.autoRender = params.autoRender;\n if (params.autoRender) {\n this.enableAutoRender();\n }\n if (params.autoRefresh) {\n this.enableAutoRefresh();\n }\n // 默认不开启dirtyBounds\n if (params.disableDirtyBounds === false) {\n this.enableDirtyBounds();\n }\n\n if (params.enableHtmlAttribute) {\n this.enableHtmlAttribute(params.enableHtmlAttribute);\n }\n if (params.ReactDOM) {\n this.enableReactAttribute(params.ReactDOM);\n }\n\n params.enableLayout && this.enableLayout();\n this.hooks.beforeRender.tap('constructor', this.beforeRender);\n this.hooks.afterRender.tap('constructor', this.afterRender);\n this._beforeRender = params.beforeRender;\n this._afterRender = params.afterRender;\n this.ticker = params.ticker || defaultTicker;\n this.supportInteractiveLayer = params.interactiveLayer !== false;\n this.timeline = new DefaultTimeline();\n this.ticker.addTimeline(this.timeline);\n this.timeline.pause();\n if (!params.optimize) {\n params.optimize = {};\n }\n this.optmize(params.optimize);\n // 如果背景是图片,触发加载图片操作\n if (params.background && isString(this._background) && this._background.includes('/')) {\n this.setAttributes({ background: this._background });\n }\n this.ticker.on('afterTick', this.afterTickCb);\n }\n\n pauseRender(sr: number = -1) {\n this._skipRender = sr;\n }\n\n resumeRender() {\n this._skipRender = 0;\n }\n\n protected tryInitEventSystem() {\n if (this.global.supportEvent && !this._eventSystem) {\n this._eventSystem = new EventSystem({\n targetElement: this.window,\n resolution: this.window.dpr || this.global.devicePixelRatio,\n rootNode: this as any,\n global: this.global,\n supportsPointerEvents: this.params.supportsPointerEvents,\n supportsTouchEvents: this.params.supportsTouchEvents,\n ...this.params.event\n });\n }\n }\n\n preventRender(prevent: boolean) {\n if (prevent) {\n this._skipRender = -Infinity;\n } else {\n // 判断是否需要outRange优化\n if (this.params.optimize.skipRenderWithOutRange !== false) {\n this._skipRender = this.window.isVisible() ? 0 : 1;\n } else {\n this._skipRender = 0;\n }\n }\n }\n\n // 优化策略\n optmize(params: IOptimizeType) {\n this.optmizeRender(params.skipRenderWithOutRange);\n this.params.optimize = params;\n }\n\n // 优化渲染\n protected optmizeRender(skipRenderWithOutRange: boolean = false) {\n if (!skipRenderWithOutRange) {\n return;\n }\n // 不在视口内的时候,跳过渲染\n this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1;\n this.window.onVisibleChange(this._onVisibleChange);\n }\n\n protected _onVisibleChange = (visible: boolean) => {\n if (this._skipRender < 0) {\n return;\n }\n if (visible) {\n if (this.dirtyBounds) {\n const b = this.window.getViewBox();\n this.dirtyBounds.setValue(b.x1, b.y1, b.width(), b.height());\n }\n if (this._skipRender > 1) {\n this.renderNextFrame();\n }\n this._skipRender = 0;\n } else {\n this._skipRender = 1;\n }\n };\n\n getTimeline() {\n return this.timeline;\n }\n\n get3dOptions(options: IOption3D) {\n const {\n center = { x: this.width / 2, y: this.height / 2, z: 0, dx: 0, dy: 0, dz: 0 },\n light = {},\n alpha = 0,\n beta = 0,\n camera,\n fieldRatio = 1,\n fieldDepth\n } = options;\n\n return {\n ...options,\n center,\n light,\n alpha,\n beta,\n camera,\n fieldRatio,\n fieldDepth\n };\n }\n\n set3dOptions(options: IOption3D) {\n this.option3d = options;\n const options3d = this.get3dOptions(options);\n const { light, center, camera, alpha, beta, fieldRatio, fieldDepth } = options3d;\n const { dir = [1, 1, -1], color = 'white', ambient } = light;\n\n const centerX = (center.x ?? this.width / 2) + (center.dx ?? 0);\n const centerY = (center.y ?? this.height / 2) + (center.dy ?? 0);\n const centerZ = (center.z ?? 0) + (center.dz ?? 0);\n const centerVec3: vec3 = [centerX, centerY, centerZ];\n const z = 1;\n let cameraX = 0;\n let cameraY = 0;\n let cameraZ = 0;\n if (!camera) {\n cameraX = Math.sin(alpha) + centerX;\n cameraY = Math.sin(beta) + centerY;\n cameraZ = Math.cos(alpha) * Math.cos(beta) * z;\n }\n\n const DirectionalLight = Factory.getPlugin('DirectionalLight');\n\n if (DirectionalLight) {\n this.light = new DirectionalLight(dir, color, ambient);\n }\n const cameraParams = {\n left: 0,\n right: this.width,\n top: 0,\n bottom: this.height,\n fieldRatio: fieldRatio,\n fieldDepth,\n viewParams: {\n pos: [cameraX, cameraY, cameraZ] as vec3,\n center: centerVec3,\n up: [0, 1, 0] as vec3\n }\n };\n if (this.camera) {\n this.camera.params = cameraParams;\n } else {\n const OrthoCamera = Factory.getPlugin('OrthoCamera');\n if (OrthoCamera) {\n this.camera = new OrthoCamera(cameraParams);\n }\n }\n\n if (options.enableView3dTransform) {\n this.enableView3dTransform();\n }\n }\n\n protected beforeRender = (stage: IStage) => {\n this._beforeRender && this._beforeRender(stage);\n };\n\n protected afterRender = (stage: IStage) => {\n this.renderCount++;\n this._afterRender && this._afterRender(stage);\n this._afterNextRenderCbs && this._afterNextRenderCbs.forEach(cb => cb(stage));\n this._afterNextRenderCbs = null;\n this.tickedBeforeRender = false;\n };\n\n protected afterTickCb = () => {\n this.tickedBeforeRender = true;\n // 性能模式不用立刻渲染\n if (this.params.optimize?.tickRenderMode === 'performance') {\n // do nothing\n } else {\n // 不是rendering的时候,render\n this.state !== 'rendering' && this.render();\n }\n };\n\n setBeforeRender(cb: (stage: IStage) => void) {\n this._beforeRender = cb;\n }\n\n setAfterRender(cb: (stage: IStage) => void) {\n this._afterRender = cb;\n }\n\n afterNextRender(cb: (stage: IStage) => void) {\n if (!this._afterNextRenderCbs) {\n this._afterNextRenderCbs = [];\n }\n this._afterNextRenderCbs.push(cb);\n }\n\n enableView3dTransform() {\n if (this.view3dTranform) {\n return;\n }\n this.view3dTranform = true;\n const ViewTransform3dPlugin = Factory.getPlugin('ViewTransform3dPlugin');\n\n if (ViewTransform3dPlugin) {\n this.pluginService.register(new ViewTransform3dPlugin());\n }\n }\n\n disableView3dTranform() {\n if (!this.view3dTranform) {\n return;\n }\n this.view3dTranform = false;\n this.pluginService.findPluginsByName('ViewTransform3dPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n enableAutoRender() {\n if (this.autoRender) {\n return;\n }\n this.autoRender = true;\n this.pluginService.register(new AutoRenderPlugin());\n }\n disableAutoRender() {\n if (!this.autoRender) {\n return;\n }\n this.autoRender = false;\n this.pluginService.findPluginsByName('AutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableAutoRefresh() {\n if (this.autoRefresh) {\n return;\n }\n this.autoRefresh = true;\n this.pluginService.register(new AutoRefreshPlugin());\n }\n disableAutoRefresh() {\n if (!this.autoRefresh) {\n return;\n }\n this.autoRefresh = false;\n this.pluginService.findPluginsByName('AutoRefreshPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableIncrementalAutoRender() {\n if (this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = true;\n this.pluginService.register(new IncrementalAutoRenderPlugin());\n }\n disableIncrementalAutoRender() {\n if (!this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = false;\n this.pluginService.findPluginsByName('IncrementalAutoRenderPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableDirtyBounds() {\n if (this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = new Bounds();\n let plugin = this.pluginService.findPluginsByName('DirtyBoundsPlugin')[0];\n if (!plugin) {\n plugin = new DirtyBoundsPlugin();\n this.pluginService.register(plugin);\n } else {\n plugin.activate(this.pluginService);\n }\n }\n disableDirtyBounds() {\n if (!this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = null;\n this.pluginService.findPluginsByName('DirtyBoundsPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableLayout() {\n if (this._enableLayout) {\n return;\n }\n this._enableLayout = true;\n\n const FlexLayoutPlugin = Factory.getPlugin('FlexLayoutPlugin');\n\n if (FlexLayoutPlugin) {\n this.pluginService.register(new FlexLayoutPlugin());\n }\n }\n disableLayout() {\n if (!this._enableLayout) {\n return;\n }\n this._enableLayout = false;\n this.pluginService.findPluginsByName('FlexLayoutPlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableHtmlAttribute(container?: any) {\n if (this.htmlAttribute) {\n return;\n }\n const HtmlAttributePlugin = Factory.getPlugin('HtmlAttributePlugin');\n\n if (HtmlAttributePlugin) {\n this.htmlAttribute = container;\n this.pluginService.register(new HtmlAttributePlugin());\n }\n }\n disableHtmlAttribute() {\n if (!this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = false;\n this.pluginService.findPluginsByName('HtmlAttributePlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n enableReactAttribute(container?: any) {\n if (this.reactAttribute) {\n return;\n }\n const ReactAttributePlugin = Factory.getPlugin('ReactAttributePlugin');\n\n if (ReactAttributePlugin) {\n this.reactAttribute = container;\n this.pluginService.register(new ReactAttributePlugin());\n }\n }\n disableReactAttribute() {\n if (!this.reactAttribute) {\n return;\n }\n this.reactAttribute = false;\n this.pluginService.findPluginsByName('ReactAttributePlugin').forEach(plugin => {\n this.pluginService.unRegister(plugin);\n });\n }\n\n getPluginsByName(name: string): IPlugin[] {\n return this.pluginService.findPluginsByName(name);\n }\n\n // /**\n // * stage的appendChild,add\n // * @param node\n // * @returns\n // */\n // appendChild(node: T): T | null {\n // const layer = this.at(0);\n // if (!layer) {\n // return null;\n // }\n // return layer.appendChild(node);\n // }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n const viewBox = this.window.getViewBox();\n this._AABBBounds.setValue(viewBox.x1, viewBox.y1, viewBox.x2, viewBox.y2);\n return this._AABBBounds;\n }\n\n combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer {\n throw new Error('暂不支持');\n }\n // 如果传入CanvasId,如果存在相同Id,说明这两个图层使用相同的Canvas绘制\n // 但需要注意的是依然是两个图层(用于解决Table嵌入ChartSpace不影响Table的绘制)\n createLayer(canvasId?: string, layerMode?: LayerMode): ILayer {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 创建一个默认layer图层\n const layer = this.layerService.createLayer(this, {\n main: false,\n layerMode,\n canvasId\n });\n this.appendChild(layer);\n return layer;\n // const layer = new Layer(this, this.global, this.window, {\n // main: false,\n // canvasId\n // });\n // this.appendChild(layer);\n // return layer;\n }\n sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void {\n const children = this.children;\n children.sort(cb);\n this.removeAllChild();\n children.forEach(c => {\n this.appendChild(c);\n });\n }\n removeLayer(ILayerId: number): ILayer | false {\n return this.removeChild(this.findChildByUid(ILayerId) as IGraphic) as ILayer;\n }\n tryInitInteractiveLayer() {\n if (this.releaseStatus === 'released') {\n return;\n }\n // TODO:顺序可能会存在问题\n // 支持交互层,且没有创建过,那就创建\n if (this.supportInteractiveLayer && !this.interactiveLayer) {\n this.interactiveLayer = this.createLayer();\n this.interactiveLayer.name = '_builtin_interactive';\n this.interactiveLayer.attribute.pickable = false;\n this.nextFrameRenderLayerSet.add(this.interactiveLayer as any); // to be fixed\n }\n // this.interactiveLayer.afterDraw(l => {\n // l.removeAllChild();\n // });\n }\n\n clearViewBox(color?: string) {\n this.window.clearViewBox(color);\n }\n\n render(layers?: ILayer[], params?: Partial): void {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.ticker.start();\n this.timeline.resume();\n const state = this.state;\n this.state = 'rendering';\n // 判断是否需要手动执行tick\n if (!this.tickedBeforeRender) {\n this.ticker.trySyncTickStatus();\n }\n this.layerService.prepareStageLayer(this);\n if (!this._skipRender) {\n this.lastRenderparams = params;\n this.hooks.beforeRender.call(this);\n if (!this._skipRender) {\n this.renderLayerList(this.children as ILayer[]);\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n }\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected combineLayersToWindow() {\n // TODO 后续支持通用的渲染模型\n if (this.global.env === 'harmony') {\n const ctx = this.window.getContext().nativeContext;\n this.forEachChildren((layer, i) => {\n if (i > 0) {\n const image = layer\n .getNativeHandler()\n .getContext()\n .canvas.nativeCanvas.nativeCanvas._c.transferToImageBitmap();\n ctx.transferFromImageBitmap(image);\n }\n });\n }\n return;\n // this.forEach((layer, i) => {\n // layer.combineTo(this.window, {\n // clear: i === 0,\n // x: this.x,\n // y: this.y,\n // width: this.viewWidth,\n // height: this.viewHeight,\n // renderService: this.renderService,\n // background: layer === this.defaultLayer ? this.background : undefined,\n // updateBounds: !!this.dirtyBounds\n // });\n // });\n }\n\n renderNextFrame(layers?: ILayer[], force?: boolean): void {\n // render状态中调用的不会触发nextFrame,避免loop\n // if (this.state === 'rendering' && !force) {\n // console.log('abc');\n // return;\n // }\n // 性能优化,避免重复add\n if (this.nextFrameRenderLayerSet.size !== this.childrenCount) {\n (layers || this).forEach((layer: any) => {\n this.nextFrameRenderLayerSet.add(layer);\n });\n }\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n this.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame(), (this.willNextFrameRender = false);\n });\n }\n }\n\n _doRenderInThisFrame() {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.timeline.resume();\n this.ticker.start();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (this.nextFrameRenderLayerSet.size && !this._skipRender) {\n this.hooks.beforeRender.call(this);\n if (!this._skipRender) {\n this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {});\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n }\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected renderLayerList(layerList: ILayer[], params?: Partial) {\n const list: ILayer[] = [];\n // 只需要render main layer即可\n for (let i = 0; i < layerList.length; i++) {\n let l = layerList[i];\n if (l.layerMode === 'virtual') {\n l = l.getNativeHandler().mainHandler.layer;\n }\n if (!list.includes(l)) {\n list.push(l);\n }\n }\n list.forEach(layer => {\n // 记录当前的stamp,避免重复绘制layer(如果存在virtual layer)\n if (layer.renderCount > this.renderCount) {\n return;\n }\n layer.renderCount = this.renderCount + 1;\n\n if (layer === this.interactiveLayer) {\n // 交互层由于其特殊性,不使用dirtyBounds\n this.dirtyBounds && this.dirtyBounds.clear();\n }\n layer.render(\n {\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty()),\n viewBox: this.window.getViewBox(),\n transMatrix: this.window.getViewBoxTransform()\n },\n { renderStyle: this.renderStyle, ...params }\n );\n });\n\n // 添加交互层渲染\n if (this.interactiveLayer && !layerList.includes(this.interactiveLayer)) {\n // 交互层由于其特殊性,不使用dirtyBounds\n this.dirtyBounds && this.dirtyBounds.clear();\n this.interactiveLayer.render(\n {\n renderService: this.renderService,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty()),\n viewBox: this.window.getViewBox(),\n transMatrix: this.window.getViewBoxTransform()\n },\n { renderStyle: this.renderStyle, ...params }\n );\n }\n }\n\n resizeWindow(w: number, h: number, rerender: boolean = true) {\n this.window.resize(w, h);\n rerender && this.render();\n }\n\n /**\n * 语法糖,如果viewBox和window宽高一样的话,那么会同时缩放window和viewBox\n * @param w\n * @param h\n * @param rerender\n */\n resize(w: number, h: number, rerender: boolean = true): void {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 如果不是子图的stage,那么认为用户也想要resize view\n if (!this.window.hasSubView()) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n }\n this.window.resize(w, h);\n this.forEachChildren(c => {\n c.resize(w, h);\n });\n // 设置camera\n // this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n this.camera && this.option3d && this.set3dOptions(this.option3d);\n rerender && this.render();\n }\n resizeView(w: number, h: number, rerender: boolean = true) {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n this.forEachChildren(c => {\n c.resizeView(w, h);\n });\n // 设置camera\n this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n rerender && this.render();\n }\n setViewBox(viewBox: IBoundsLike, rerender: boolean): void;\n setViewBox(x: number, y: number, w: number, h: number, rerender: boolean): void;\n setViewBox(x: number | IBoundsLike, y: number | boolean, w?: number, h?: number, rerender?: boolean): void {\n let isRerender: boolean = true;\n\n if (typeof x === 'object') {\n this.viewBox.setValue(x.x1, x.y1, x.x2, x.y2);\n if (y === false) {\n isRerender = false;\n }\n } else {\n this.viewBox.setValue(x, y as number, x + w, (y as number) + h);\n\n if (rerender === false) {\n isRerender = false;\n }\n }\n\n this.forEachChildren(c => {\n c.resizeView(this.viewBox.width(), this.viewBox.height());\n });\n isRerender && this.render();\n }\n setDpr(dpr: number, rerender: boolean = true): void {\n // this.window.setDpr(dpr);\n this.forEachChildren(c => {\n c.setDpr(dpr);\n });\n\n rerender && this.render();\n }\n setOrigin(x: number, y: number): void {\n throw new Error('暂不支持');\n }\n export(type: IExportType): HTMLCanvasElement | ImageData {\n throw new Error('暂不支持');\n }\n pick(x: number, y: number): PickResult | false {\n if (this.releaseStatus === 'released') {\n return;\n }\n // 暂时不提供layer的pick\n const result = this.getPickerService().pick(this.children as unknown as IGraphic[], new Point(x, y), {\n bounds: this.AABBBounds\n });\n if (result?.graphic || result?.group) {\n return result;\n }\n return false;\n }\n\n // 动画相关\n startAnimate(t: number): void {\n throw new Error('暂不支持');\n }\n setToFrame(t: number): void {\n throw new Error('暂不支持');\n }\n\n release() {\n super.release();\n\n this.hooks.beforeRender.unTap('constructor', this.beforeRender);\n this.hooks.afterRender.unTap('constructor', this.afterRender);\n\n this.eventSystem && this.eventSystem.release();\n this.layerService.releaseStage(this);\n this.pluginService.release();\n this.forEach(layer => {\n layer.release();\n });\n // 额外删除掉interactiveLayer的节点\n if (this.interactiveLayer) {\n this.interactiveLayer.forEachChildren((item: IGraphic) => {\n item.setStage && item.setStage(null, null);\n this.interactiveLayer.removeChild(item);\n });\n this.interactiveLayer.release();\n }\n this.window.release();\n this.ticker.remTimeline(this.timeline);\n this.ticker.removeListener('afterTick', this.afterTickCb);\n this.renderService.renderTreeRoots = [];\n }\n\n setStage(stage?: IStage) {\n return;\n // this.stage = this;\n // this.forEachChildren(item => {\n // (item as Layer).setStage(this);\n // });\n }\n\n /**\n * 添加dirty区域,会修改参数b\n * @param b\n * @param matrix\n */\n dirty(b: IBounds, matrix?: IMatrix) {\n if (this.releaseStatus === 'released') {\n return;\n }\n if (matrix) {\n b.transformWithMatrix(matrix);\n }\n if (this.dirtyBounds.empty()) {\n this.dirtyBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n this.dirtyBounds.union(b);\n }\n\n getLayer(name: string): undefined | ILayer {\n const layer = this.children.filter(layer => layer.name === name);\n return layer[0] as ILayer;\n }\n\n renderTo(window: IWindow) {\n if (this.releaseStatus === 'released') {\n return;\n }\n this.forEachChildren((layer, i) => {\n layer.drawTo(window, {\n // ...params,\n renderService: this.renderService,\n viewBox: window.getViewBox(),\n transMatrix: window.getViewBoxTransform(),\n background: layer === this.defaultLayer ? this.background : undefined,\n clear: i === 0, // 第一个layer需要clear\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n });\n });\n }\n\n /**\n * 渲染到新的window上去\n * @param fullImage 是否是全量的image,因为可能之前的window有一部分场景树超过window的帧缓冲了\n * @returns\n */\n renderToNewWindow(fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n if (this.releaseStatus === 'released') {\n return;\n }\n const window = container.get(VWindow);\n const x1 = viewBox ? -viewBox.x1 : 0;\n const y1 = viewBox ? -viewBox.y1 : 0;\n const x2 = viewBox ? viewBox.x2 : this.viewWidth;\n const y2 = viewBox ? viewBox.y2 : this.viewHeight;\n const width = viewBox ? viewBox.width() : this.viewWidth;\n const height = viewBox ? viewBox.height() : this.viewHeight;\n if (fullImage) {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n this.renderTo(window);\n return window;\n }\n\n toCanvas(fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n if (this.releaseStatus === 'released') {\n return;\n }\n const window = this.renderToNewWindow(fullImage, viewBox);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n\n setCursor(mode?: string): void {\n this._cursor = mode;\n this.eventSystem.setCursor(mode, 'ignore');\n }\n\n getCursor() {\n return this._cursor;\n }\n\n eventPointTransform(e: PointerEvent | WheelEvent | TouchEvent): { x: number; y: number } {\n const point = this.global.mapToCanvasPoint(e, this.window.getContext().canvas.nativeCanvas);\n\n return this.stage.window.pointTransform(point.x, point.y);\n }\n\n pauseTriggerEvent() {\n this._eventSystem && this._eventSystem.pauseTriggerEvent();\n }\n resumeTriggerEvent() {\n this._eventSystem && this._eventSystem.resumeTriggerEvent();\n }\n\n getPickerService() {\n if (!this.pickerService) {\n this.pickerService = container.get(PickerService);\n }\n return this.pickerService;\n }\n}\n","import { Stage } from './core/stage';\nimport type { IStageParams } from './interface/stage';\n\nexport function createStage(params: Partial) {\n return new Stage(params);\n // return container.get<(params: Partial) => IStage>(StageFactory)(params);\n}\n","import type { ITickHandler } from '../../interface/animate';\n\nexport class ManualTickHandler implements ITickHandler {\n protected timerId: number;\n protected time: number = 0;\n\n static Avaliable(): boolean {\n return true;\n }\n\n avaliable(): boolean {\n return ManualTickHandler.Avaliable();\n }\n\n tick(interval: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, interval + this.time);\n cb(this, { once: true });\n }\n\n tickTo(t: number, cb: (handler: ITickHandler, params?: { once: boolean }) => void): void {\n this.time = Math.max(0, t);\n cb(this, { once: true });\n }\n\n release() {\n if (this.timerId > 0) {\n // clearTimeout(this.timerId);\n this.timerId = -1;\n }\n }\n\n getTime() {\n return this.time;\n }\n}\n","import type { ITicker, ITickHandler, ITimeline } from '../../interface/animate';\nimport { DefaultTicker } from './default-ticker';\nimport { ManualTickHandler } from './manual-ticker-handler';\nimport type { STATUS, TickerMode } from './type';\n\nexport class ManualTicker extends DefaultTicker implements ITicker {\n protected declare interval: number;\n protected declare tickerHandler: ITickHandler;\n protected declare _mode: TickerMode;\n protected declare status: STATUS;\n protected declare lastFrameTime: number;\n protected declare tickCounts: number;\n protected declare timelines: ITimeline[];\n declare autoStop: boolean;\n\n set mode(m: TickerMode) {\n m = 'manual';\n this.setupTickHandler();\n }\n get mode(): TickerMode {\n return this._mode;\n }\n\n protected initHandler(): ITickHandler | null {\n this.mode = 'manual';\n return null;\n }\n\n /**\n * 设置tickHandler\n * @returns 返回true表示设置成功,false表示设置失败\n */\n protected setupTickHandler(): boolean {\n const handler: ITickHandler = new ManualTickHandler();\n this._mode = 'manual';\n\n // 销毁上一个tickerHandler\n if (this.tickerHandler) {\n this.tickerHandler.release();\n }\n this.tickerHandler = handler;\n return true;\n }\n\n tickAt(time: number) {\n this.tickerHandler.tick(time - Math.max(this.lastFrameTime, 0), (handler: ITickHandler) => {\n this.handleTick(handler, { once: true });\n });\n }\n\n ifCanStop(): boolean {\n return false;\n }\n}\n","import type { IRect } from '@visactor/vrender-core';\nimport type { IWidgetData } from '../interface/dsl/dsl';\nimport type { ICharacter, ILayoutLine } from '../interface/character';\nimport type { IAABBBounds } from '@visactor/vutils';\n\nexport interface ILayoutAttribute {\n x: number;\n y: number;\n width: number;\n height: number;\n angle: number;\n anchor?: [number | string, number | string];\n dx?: number;\n dy?: number;\n // shapePoints?: IPointLike[];\n}\n\nexport function getLayoutFromWidget(w: Partial | IRect, character: ICharacter): Partial {\n const x = 'x' in w ? w.x : w.left;\n const y = 'y' in w ? w.y : w.top;\n let width = (w as any).width;\n let height = (w as any).height;\n const stage = character.canvas.getStage();\n if (!isFinite(width) && isFinite((w as any).right)) {\n width = stage.width - x - (w as any).right;\n }\n if (!isFinite(height) && isFinite((w as any).bottom)) {\n height = stage.height - y - (w as any).bottom;\n }\n // const width = 'width' in w ? w.width : (w as any).right - w.left;\n // const height = 'height' in w ? w.height : (w as any).bottom - w.top;\n\n return {\n x,\n y,\n width: isFinite(width) ? width : void 0,\n height: isFinite(height) ? height : void 0,\n angle: (w as any).angle ?? 0,\n anchor: [x + width / 2, y + height / 2].map(item => (isFinite(item) ? item : 0)) as [number, number]\n };\n}\n\nexport function getLayoutLine(b: IAABBBounds, opt: any, orient: 'x' | 'y' | 'xy' = 'xy') {\n const result: ILayoutLine[] = [];\n if (orient === 'y' || orient === 'xy') {\n const commonInY: Omit = {\n orient: 'y',\n start: b.x1,\n end: b.x1 + b.width(),\n bounds: b.clone(),\n ...opt\n };\n // top\n result.push({\n value: b.y1,\n type: 'start',\n ...commonInY\n });\n // bottom\n result.push({\n value: b.y2,\n type: 'end',\n ...commonInY\n });\n // middle\n result.push({\n value: (b.y1 + b.y2) * 0.5,\n type: 'middle',\n ...commonInY\n });\n }\n\n if (orient === 'x' || orient === 'xy') {\n const commonInX: Omit = {\n orient: 'x',\n start: b.y1,\n end: b.y2,\n bounds: b.clone(),\n ...opt\n };\n // left\n result.push({\n value: b.x1,\n type: 'start',\n ...commonInX\n });\n // right\n result.push({\n value: b.x2,\n type: 'end',\n ...commonInX\n });\n // middle\n result.push({\n value: (b.x1 + b.x2) * 0.5,\n type: 'middle',\n ...commonInX\n });\n }\n return result;\n}\n","import type { ICanvasLike, IGraphic, IStage } from '@visactor/vrender-core';\nimport { createStage, ManualTicker, vglobal } from '@visactor/vrender-core';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IStory } from '../interface/story';\nimport type { IStoryEvent } from '../interface/event';\nimport type { ICharacter, ILayoutLine } from '../interface/character';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { isValidNumber } from '@visactor/vutils';\nimport { getLayoutLine } from '../utils/layout';\n\nexport class StoryCanvas implements IStoryCanvas {\n protected _story: IStory;\n protected _stage: IStage;\n protected _canvas: ICanvasLike;\n\n getNativeCanvas() {\n return this._canvas;\n }\n\n getStage() {\n return this._stage;\n }\n\n protected _container: HTMLDivElement | null;\n get container() {\n return this._container;\n }\n\n constructor(\n story: IStory,\n params: {\n container?: HTMLDivElement;\n canvas?: HTMLCanvasElement;\n width?: number;\n height?: number;\n dpr?: number;\n background: string;\n layerBackground: string;\n layerViewBox?: IAABBBoundsLike;\n scaleX?: number | 'auto';\n scaleY?: number | 'auto';\n }\n ) {\n this._story = story;\n this._container = params.container;\n this._canvas = params.canvas as any;\n\n const {\n canvas,\n width: _w,\n height: _h,\n background = 'transparent',\n layerBackground = 'transparent',\n dpr = vglobal.devicePixelRatio,\n layerViewBox,\n scaleX: _sx = 1,\n scaleY: _sy = 1\n } = params;\n const { scaleX, scaleY, width, height } = this.getScale(_w, _h, _sx, _sy);\n\n this._container && this._initCanvasByContainer(width, height, dpr, background);\n params.canvas && this._initCanvasByCanvas(canvas, width ?? 500, height ?? 500, dpr, background);\n\n // this._stage.background = background;\n this._stage.defaultLayer.setAttributes({ background: layerBackground });\n if (layerViewBox) {\n this._stage.defaultLayer.setAttributes({\n x: layerViewBox.x1,\n y: layerViewBox.y1,\n width: layerViewBox.x2 - layerViewBox.x1,\n height: layerViewBox.y2 - layerViewBox.y1,\n clip: true\n });\n }\n this._stage.defaultLayer.scale(scaleX, scaleY);\n }\n\n protected _initCanvasByContainer(width: number, height: number, dpr: number, background: string) {\n const container = this._container;\n if (!container) {\n return;\n }\n const canvas = document.createElement('canvas');\n // canvas.style.position = 'absolute';\n canvas.id = `_visactor_story_canvas_${this._story.id}`;\n this._canvas = canvas as any;\n container.appendChild(canvas);\n const stage = this._initCanvas(\n canvas,\n width ?? container.clientWidth,\n height ?? container.clientHeight,\n dpr,\n background\n );\n // @ts-ignore\n this._stage = stage;\n }\n\n protected _initCanvasByCanvas(\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n background: string\n ) {\n const stage = this._initCanvas(canvas, width, height, dpr, background);\n this._canvas = canvas as any;\n // @ts-ignore\n this._stage = stage;\n }\n\n protected _initCanvas(canvas: HTMLCanvasElement, width: number, height: number, dpr: number, background: string) {\n const stage = createStage({\n canvas: canvas,\n width,\n height,\n dpr,\n canvasControled: true,\n background,\n // 得开启自动渲染,否则编辑场景中无法触发视图更新\n autoRender: false,\n disableDirtyBounds: true,\n ticker: new ManualTicker([]),\n pluginList: ['RichTextEditPlugin'],\n event: {\n clickInterval: 300\n }\n });\n stage.id = `vstory_${this._story.id}`;\n return stage;\n }\n\n protected getScale(\n width: number,\n height: number,\n scaleX: number | 'auto',\n scaleY: number | 'auto'\n ): { scaleX: number; scaleY: number; width: number; height: number } {\n // 仅在传入width和height时有效\n if (scaleX === 'auto' || scaleY === 'auto') {\n if (!Number.isFinite(width) || !Number.isFinite(height)) {\n scaleX = scaleY = 1;\n } else {\n const clipWidth = this._container\n ? this._container.clientWidth\n : this._canvas?.width / vglobal.devicePixelRatio;\n const clipHeight = this._container\n ? this._container.clientHeight\n : this._canvas?.height / vglobal.devicePixelRatio;\n if (!isValidNumber(clipWidth) || !isValidNumber(clipHeight)) {\n scaleX = scaleY = 1;\n return { scaleX, scaleY, width, height };\n }\n\n const clipAspectRatio = clipWidth / clipHeight;\n const contentAspectRatio = width / height;\n const scale = clipAspectRatio > contentAspectRatio ? clipHeight / height : clipWidth / width;\n if (!isValidNumber(scale)) {\n scaleX = scaleY = 1;\n } else {\n if (scaleX === 'auto') {\n scaleX = scale;\n }\n\n if (scaleY === 'auto') {\n scaleY = scale;\n }\n }\n width *= scaleX;\n height *= scaleY;\n }\n }\n return { scaleX, scaleY, width, height };\n // this._stage.defaultLayer.scale(scaleX, scaleY);\n }\n\n resize(w: number, h: number) {\n this._stage.resize(w, h, true);\n }\n\n getEventDetail(event: IStoryEvent) {\n // 得到交互元素的详细信息\n let characterInfo;\n let character: ICharacter;\n this._story.getCharacterList().forEach(c => {\n const info = c.checkEvent(event);\n if (info) {\n characterInfo = info;\n character = c;\n return true;\n }\n return false;\n });\n return {\n character,\n characterInfo\n };\n }\n\n tickTo(t: number, render: boolean = true) {\n // 开启ticker,否则ticker那里不会执行,第一帧就掉了\n this._stage.ticker.start();\n this._stage.getTimeline().resume();\n this._stage.ticker.tickAt(t);\n render && this._stage.render();\n }\n\n getDpr(): number {\n return this._stage.dpr;\n }\n\n addGraphic(g: IGraphic): void {\n this._stage.defaultLayer.add(g);\n }\n\n removeGraphic(g: IGraphic): void {\n this._stage.defaultLayer.removeChild(g);\n }\n\n getLayoutGuideLine(): ILayoutLine[] {\n const layer = this._stage.defaultLayer;\n const bounds = layer.AABBBounds.clone();\n bounds.transformWithMatrix(layer.transMatrix.getInverse());\n\n return getLayoutLine(bounds, {\n id: this._stage.id\n });\n }\n\n release() {\n this._stage.release();\n }\n}\n","import type { ICharacterConfig, ICharacterConstructor, ICharacterInitOption } from '../interface/dsl/dsl';\n\nexport class StoryFactory {\n static characterMap: { [key: string]: ICharacterConstructor } = {};\n static registerCharacter(type: string, c: ICharacterConstructor) {\n StoryFactory.characterMap[type] = c;\n }\n static createCharacter(config: ICharacterConfig, opt: ICharacterInitOption) {\n const classC = StoryFactory.characterMap[config.type];\n if (!classC) {\n console.error('获取模板失败', config);\n return null;\n }\n const el = new classC(config, opt);\n el.init();\n return el;\n }\n}\n","import { StoryFactory } from '../utils/factory';\nimport type { ICharacter } from '../interface/character';\nimport type { ICharacterTree } from '../interface/character-tree';\nimport type { ICharacterConfig } from '../interface/dsl/dsl';\nimport type { IStory } from '../interface/story';\n\nexport class CharacterTree implements ICharacterTree {\n protected _characters: { [key: string]: ICharacter } = {};\n protected _story: IStory;\n\n constructor(story: IStory) {\n this._story = story;\n }\n\n getCharacters(): { [key: string]: ICharacter } {\n return this._characters;\n }\n\n getCharacterList(): ICharacter[] {\n return Array.from(Object.values(this._characters));\n }\n\n getCharactersByType(type: string) {\n return this.getCharacterList().filter(c => c.type === type);\n }\n\n getCharacterById(key: string) {\n return this._characters[key] || null;\n }\n\n removeCharacter(cId: string) {\n const c = this._characters[cId];\n // TODO 先直接release掉,后续如果需要复用再说\n c && c.release();\n delete this._characters[cId];\n }\n\n addCharacter(config: ICharacterConfig) {\n const option = {\n story: this._story,\n canvas: this._story.canvas,\n graphicParent: this._story.canvas.getStage().defaultLayer\n };\n if ((config).id) {\n if (!this._characters[(config).id]) {\n const c = StoryFactory.createCharacter(config, option);\n c.hide();\n this._characters[(config).id] = c;\n }\n return this._characters[(config).id];\n }\n return null;\n }\n\n initCharacters(specs: ICharacterConfig[]): void {\n // 先销毁掉当前的所有characters\n this.releaseCurrentCharacters();\n this._characters = {};\n const option = {\n story: this._story,\n canvas: this._story.canvas,\n graphicParent: this._story.canvas.getStage().defaultLayer\n };\n\n specs.forEach(spec => {\n if ((spec).id) {\n if (!this._characters[(spec).id]) {\n const c = StoryFactory.createCharacter(spec, option);\n c.hide();\n this._characters[(spec).id] = c;\n }\n // return this._characters[(spec).id];\n }\n });\n }\n\n protected releaseCurrentCharacters() {\n Object.keys(this._characters).forEach(k => {\n const c = this._characters[k];\n c.release();\n });\n }\n\n reset() {\n for (const k in this._characters) {\n const character = this._characters[k];\n character.reset();\n }\n }\n\n toDSL() {\n return Object.keys(this._characters).map(k => {\n return this._characters[k].toDSL();\n });\n }\n}\n","import type { IPlugin, IPluginService } from '../interface/plugin-service';\nimport type { IStory } from '../interface/story';\n\nexport class DefaultPluginService implements IPluginService {\n declare onStartupFinishedPlugin: IPlugin[];\n declare onRegisterPlugin: IPlugin[];\n declare story: IStory;\n declare actived: boolean;\n\n constructor() {\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin = [];\n this.actived = false;\n }\n\n active(story: IStory, params: { pluginList?: IPlugin[] }) {\n this.story = story;\n this.actived = true;\n\n // 启动插件\n const { pluginList } = params;\n pluginList &&\n pluginList.forEach(p => {\n this.register(p);\n });\n }\n\n findPluginsByName(name: string): IPlugin[] {\n const arr: IPlugin[] = [];\n this.onStartupFinishedPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n this.onRegisterPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n return arr;\n }\n\n register(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.push(plugin);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.push(plugin);\n plugin.activate(this);\n }\n }\n unRegister(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n }\n plugin.deactivate(this);\n }\n\n release(...params: any): void {\n this.onStartupFinishedPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onRegisterPlugin = [];\n }\n}\n","import { Generator, vglobal } from '@visactor/vrender-core';\nimport type { IActionParams, IStory } from '../interface/story';\nimport type { ICharacterConfig, IStoryDSL } from '../interface/dsl/dsl';\nimport { StoryCanvas } from './canvas';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { EventEmitter, isString } from '@visactor/vutils';\nimport type { ICharacter } from '../interface/character';\nimport type { IPlayer } from '../interface/player';\nimport type { ICharacterTree } from '../interface/character-tree';\nimport { CharacterTree } from './character-tree';\nimport type { IPluginService } from '../interface/plugin-service';\nimport { DefaultPluginService } from './plugin-service';\n\ntype NodeCanvas = any;\n\nexport interface IStoryInitOption {\n dom?: string | HTMLDivElement; // dom id\n canvas?: string | HTMLCanvasElement | NodeCanvas; // canvas id\n width?: number;\n height?: number;\n background?: string;\n layerBackground?: string;\n layerViewBox?: IAABBBoundsLike;\n dpr?: number;\n // 对画面的缩放\n scaleX?: number | 'auto';\n scaleY?: number | 'auto';\n theme?: string;\n}\n\nexport class Story extends EventEmitter implements IStory {\n readonly id: string;\n protected _canvas: IStoryCanvas;\n protected _dsl: IStoryDSL | null;\n protected _player: IPlayer;\n protected _characterTree: ICharacterTree;\n protected _theme: string;\n pluginService: IPluginService;\n\n get canvas(): IStoryCanvas {\n return this._canvas;\n }\n\n get player(): IPlayer {\n return this._player;\n }\n\n get theme(): string {\n return this._theme;\n }\n\n constructor(dsl: IStoryDSL | null, option: IStoryInitOption) {\n super();\n this.id = `test-mvp_${Generator.GenAutoIncrementId()}`;\n const {\n dom,\n canvas,\n width,\n height,\n theme,\n background = 'transparent',\n layerBackground = 'transparent',\n layerViewBox,\n dpr = vglobal.devicePixelRatio,\n scaleX = 1,\n scaleY = 1\n } = option;\n if (!(dom || canvas)) {\n throw new Error('dom or canvas is required');\n }\n this._canvas = new StoryCanvas(this, {\n container: isString(dom) ? (vglobal.getElementById(dom) as HTMLDivElement) : dom,\n canvas: isString(canvas) ? (vglobal.getElementById(canvas) as any) : canvas,\n width,\n height,\n background,\n dpr,\n layerBackground,\n layerViewBox,\n scaleX,\n scaleY\n });\n this._characterTree = new CharacterTree(this);\n this._dsl = dsl;\n this._theme = theme;\n this.pluginService = new DefaultPluginService();\n this.pluginService.active(this, {\n pluginList: []\n });\n }\n\n init(player: IPlayer) {\n this._player = player;\n this.load(this._dsl);\n }\n\n reset() {\n this._characterTree.reset();\n this.player.reset();\n }\n\n load(dsl: IStoryDSL) {\n this._dsl = dsl;\n if (!dsl) {\n return;\n }\n // 初始化characterTree\n this._characterTree.initCharacters(this._dsl.characters);\n // 初始化Actions\n this.player.initActions(this._dsl.acts);\n }\n toDSL(): IStoryDSL {\n return {\n acts: this._player.toDSL(),\n characters: this._characterTree.toDSL()\n };\n }\n getCharacters(): { [key: string]: ICharacter } {\n return this._characterTree.getCharacters();\n }\n getCharacterList(): ICharacter[] {\n return this._characterTree.getCharacterList();\n }\n getCharacterById(id: string): ICharacter | null {\n return this._characterTree.getCharacterById(id);\n }\n getCharactersByType(type: string): ICharacter[] {\n return this._characterTree.getCharactersByType(type);\n }\n addCharacter(config: ICharacterConfig, actionParams?: IActionParams): ICharacter {\n const c = this._characterTree.addCharacter(config);\n actionParams && this.addAction(c.id, actionParams);\n return c;\n }\n addCharacterWithAppear(config: ICharacterConfig): ICharacter {\n const c = this._characterTree.addCharacter(config);\n this.addAction(c.id, { sceneId: '', actions: [{ action: 'appear' }] });\n return c;\n }\n\n removeCharacter(cId: string): void {\n this._characterTree.removeCharacter(cId);\n this._player.removeCharacterActions(cId);\n }\n addAction(cId: string, actionParams: IActionParams): void {\n this._player.addAction(actionParams.sceneId, cId, actionParams.actions);\n }\n\n release(): void {\n this._player.release();\n this._canvas.release();\n }\n}\n","import { cloneDeep, isNumber, isString } from '@visactor/vutils';\nimport type { IActionSpec, IActSpec, ISceneSpec } from '../interface/dsl/dsl';\nimport type { IScheduler } from '../interface/scheduler';\nimport type { IActionProcessor } from '../interface/action-processor';\n\ninterface IActInfo {\n startTime: number;\n duration: number;\n id: string;\n sceneInfoList: ISceneInfo[];\n}\ninterface ISceneInfo {\n startTime: number;\n duration: number;\n id: string;\n actionList: IActionItem[];\n}\n\nexport interface IActionItem {\n startTime: number;\n duration: number;\n actionSpec: IActionSpec;\n characterId: string;\n}\n\nclass ActionItem implements IActionItem {\n startTime: number;\n duration: number;\n actionSpec: IActionSpec;\n characterId: string;\n\n constructor(st: number, d: number, as: IActionSpec, ci: string) {\n this.startTime = st;\n this.duration = d;\n this.actionSpec = as;\n this.characterId = ci;\n }\n}\n\nexport class Scheduler implements IScheduler {\n protected _actionProcessor: IActionProcessor;\n protected _actsInfo: IActInfo[];\n // 保存执行过的act\n protected _runnedAct: Set;\n // 保存应用过初始属性的Appear的act\n protected _applyedAppearAct: Set;\n protected _actSpec: IActSpec[];\n\n constructor(actionProcessor: IActionProcessor) {\n this._actionProcessor = actionProcessor;\n this._runnedAct = new Set();\n this._applyedAppearAct = new Set();\n this._actSpec = [\n {\n id: 'defaultAct',\n scenes: [\n {\n id: 'defaultScene',\n actions: []\n }\n ]\n }\n ];\n }\n\n init(acts: IActSpec[]) {\n // 重新设置所有属性\n this.clearState();\n this._actsInfo = [];\n this.clearState();\n\n this._initActs(acts);\n this._actSpec = cloneDeep(acts);\n }\n\n getUnAppliedAppearAction() {\n if (this._applyedAppearAct.size) {\n return [];\n }\n const actionList: IActionItem[] = [];\n this._actsInfo.forEach(actInfo => {\n actInfo.sceneInfoList.forEach(sceneInfo => {\n sceneInfo.actionList.forEach(action => {\n if (this._applyedAppearAct.has(action) || action.actionSpec.action !== 'appear') {\n return;\n }\n this._applyedAppearAct.add(action);\n actionList.push(action);\n });\n });\n });\n return actionList;\n }\n\n addAction(sceneId: string, characterId: string, actions: IActionSpec[]) {\n const scene = sceneId ? this.findScene(sceneId) : this.getScenes()[0];\n if (!scene) {\n return;\n }\n scene.actions.push({\n characterId,\n characterActions: actions\n });\n this.init(this._actSpec);\n }\n\n removeCharacterActions(characterId: string) {\n for (let i = 0; i < this._actSpec.length; i++) {\n for (let j = 0; j < this._actSpec[i].scenes.length; j++) {\n const scene = this._actSpec[i].scenes[j];\n scene.actions = scene.actions.filter(a => a.characterId !== characterId);\n }\n }\n this.init(this._actSpec);\n }\n\n clearState(): void {\n this._runnedAct.clear();\n this._applyedAppearAct.clear();\n }\n\n getTotalTime(): number {\n if (!this._actsInfo) {\n return 0;\n }\n return this._actsInfo.reduce((t, actInfo) => Math.max(t, actInfo.startTime + actInfo.duration), 0);\n }\n\n findActByTime(t: number) {\n if (!this._actsInfo) {\n return {\n actInfo: null,\n t: 0\n };\n }\n // 规范化t\n const totalTime = this.getTotalTime();\n if (totalTime <= 0) {\n return {\n actInfo: this._actsInfo[0],\n t: 0\n };\n }\n for (let i = 0; i < this._actsInfo.length; i++) {\n const actInfo = this._actsInfo[i];\n if (actInfo.startTime <= t && actInfo.startTime + actInfo.duration > t) {\n return {\n actInfo: actInfo,\n t: t - actInfo.startTime\n };\n }\n }\n return {\n actInfo: this._actsInfo[this._actsInfo.length - 1],\n t: t - this._actsInfo[this._actsInfo.length - 1].startTime\n };\n }\n\n /**\n * 获取某个时间区间的所有Action,toTime实际上是当前时间,fromTime是上一次的时间\n * 避免跳帧\n * @param fromTime 上一次的时间\n * @param toTime 当前时间\n */\n getActionsInRange(fromTime: number, toTime: number) {\n // 先找到目前是在哪个幕中\n const { actInfo: fromAct, t: formatFromTime } = this.findActByTime(fromTime);\n const { actInfo: toAct, t: formatToTime } = this.findActByTime(toTime);\n if (fromAct !== toAct) {\n // TODO 跳帧了\n } else if (!(fromAct && toAct)) {\n return [];\n }\n // const formatFromTime = Scheduler.formatTimeInAction(fromTime, toAct);\n // const formatToTime = Scheduler.formatTimeInAction(toTime, toAct);\n\n const actions: IActionItem[] = [];\n toAct.sceneInfoList.forEach(sceneInfo => {\n const { startTime: sceneStartTime } = sceneInfo;\n sceneInfo.actionList.forEach(actionInfo => {\n const startTime = sceneStartTime + actionInfo.startTime;\n if (startTime <= formatToTime) {\n if (!this._runnedAct.has(actionInfo)) {\n this._runnedAct.add(actionInfo);\n actions.push(actionInfo);\n }\n }\n });\n });\n // actions.length && console.log('找到', fromTime, toTime, actions);\n return actions;\n }\n\n protected _initActs(acts: IActSpec[]) {\n // act与act之间是串联的\n let startTime = 0;\n this._actsInfo = acts.map(act => {\n const actInfo = this._getActInfo(act, startTime);\n startTime += actInfo.duration;\n return actInfo;\n });\n }\n\n protected _getActInfo(act: IActSpec, actStartTime: number): IActInfo {\n let sceneStartTime = 0;\n const sceneInfoList = act.scenes.map(scene => {\n const sceneInfo = this._getSceneInfo(scene, sceneStartTime + (scene.delay ?? 0));\n sceneStartTime = sceneInfo.startTime + sceneInfo.duration;\n return sceneInfo;\n });\n const startTime = sceneInfoList.reduce((st, info) => Math.min(info.startTime, st), 0);\n const endTime = sceneInfoList.reduce((et, info) => Math.max(info.startTime + info.duration, et), 0);\n return {\n startTime: actStartTime,\n duration: startTime + endTime - startTime,\n id: act.id,\n sceneInfoList\n };\n }\n\n protected _getSceneInfo(scene: ISceneSpec, sceneStartTime: number): ISceneInfo {\n let scene_st = 0;\n let scene_et = 0;\n const actionList: IActionItem[] = [];\n scene.actions.forEach((action, actIdx) => {\n let character_st = Infinity;\n let character_et = -Infinity;\n action.characterActions.forEach(ca => {\n const characterIdList = isString(action.characterId) ? [action.characterId] : action.characterId;\n characterIdList.forEach(characterId => {\n const info = this._actionProcessor.getActInfo(characterId, ca);\n if (!info) {\n return;\n }\n const item = new ActionItem(info.startTime, info.duration, ca, characterId);\n\n character_st = Math.max(Math.min(item.startTime, character_st), 0);\n character_et = Math.max(item.startTime + item.duration, character_et);\n actionList.push(item);\n });\n });\n\n scene_st = !actIdx ? character_st : Math.max(Math.min(character_st, scene_st), 0);\n scene_et = !actIdx ? character_et : Math.max(character_et, scene_et);\n });\n\n const sceneInfo: ISceneInfo = {\n startTime: sceneStartTime,\n duration: scene_et,\n id: scene.id,\n actionList\n };\n\n return sceneInfo;\n }\n\n findScene(id: string): ISceneSpec | null {\n for (let i = 0; i < this._actSpec.length; i++) {\n const act = this._actSpec[i];\n for (let j = 0; j < act.scenes.length; j++) {\n const scene = act.scenes[j];\n if (scene.id === id) {\n return scene;\n }\n }\n }\n return null;\n }\n\n getScenes(): ISceneSpec[] {\n if (!this._actSpec) {\n return [];\n }\n const scenes: ISceneSpec[] = [];\n for (let i = 0; i < this._actSpec.length; i++) {\n const act = this._actSpec[i];\n scenes.push(...act.scenes);\n }\n return scenes;\n }\n\n toDSL(): IActSpec[] {\n return this._actSpec;\n }\n\n release(): void {\n this._actsInfo = [];\n this._actSpec = [];\n this.clearState();\n }\n}\n","import type { IActionProcessorItem } from '../interface/action-processor';\n\nexport interface IProcessorRegistry {\n registerProcessor: (characterType: string, processor: Record) => void;\n getProcessor: (characterType: string, action: string) => IActionProcessorItem;\n getProcessors: (characterType: string) => Record;\n}\n\nexport class ProcessorRegistry {\n private _processorMap: Map> = new Map();\n registerProcessor(characterType: string, processor: Record) {\n if (!this._processorMap.has(characterType)) {\n this._processorMap.set(characterType, {});\n }\n const processorMap = this._processorMap.get(characterType);\n for (const key in processor) {\n processorMap[key] = processor[key];\n }\n }\n getProcessor(characterType: string, action: string) {\n if (!this._processorMap.has(characterType)) {\n return null;\n }\n const processorMap = this._processorMap.get(characterType);\n if (!processorMap[action]) {\n return null;\n }\n return processorMap[action];\n }\n getProcessors(characterType: string) {\n if (!this._processorMap.has(characterType)) {\n return null;\n }\n const processorMap = this._processorMap.get(characterType);\n return processorMap;\n }\n}\n\nexport const globalProcessorRegistry = new ProcessorRegistry();\n","import type { IProcessorRegistry } from './processorRegistry';\nimport { globalProcessorRegistry } from './processorRegistry';\nimport type { IActionProcessor, IActionProcessorItem } from '../interface/action-processor';\nimport type { ICharacter } from '../interface/character';\nimport type { IActionSpec } from '../interface/dsl/dsl';\nimport type { IStory } from '../interface/story';\nimport { CharacterType } from '../constants/character';\n\nexport type IProcessorMap = Record>;\n\nexport interface IProcessorReturnType {\n totalTime: number;\n revertActionParams?: {\n action: string;\n payload: Record;\n };\n}\n\nexport class ActionProcessor implements IActionProcessor {\n protected _processorRegistry: IProcessorRegistry;\n\n protected _story: IStory;\n\n constructor(story: IStory, processorRegistry: IProcessorRegistry = globalProcessorRegistry) {\n this._processorRegistry = processorRegistry;\n this._story = story;\n }\n\n /**\n * 添加Action,根据Action中的characterId添加对应的characterActions实例\n * @param action\n */\n getActInfo(\n characterId: string,\n action: IActionSpec\n ): {\n startTime: number;\n duration: number;\n } | null {\n const character = this._story.getCharacterById(characterId);\n if (!character) {\n console.error(`获取character失败,请检查 ${characterId} 是否存在`);\n return null;\n }\n const processor = this.getProcessor(character.config.type, action.action);\n\n if (!processor) {\n console.error(`获取processor失败,请检查 ${character.config.type} 是否支持 ${action.action}`);\n return null;\n }\n return processor.getStartTimeAndDuration(action, character);\n }\n\n getProcessorList(name: string): IActionProcessorItem[] {\n return Object.values(this._processorRegistry.getProcessors(name));\n }\n\n getProcessor(name: string, actionName: string): IActionProcessorItem {\n // 获取processor,找不到就用common的processor\n return (\n this._processorRegistry.getProcessor(name, actionName) ||\n this._processorRegistry.getProcessor(CharacterType.COMMON, actionName)\n );\n }\n\n /**\n * Execute action\n * @param name\n * @param actionName\n * @param actionParams\n * @returns IProcessorReturnType\n */\n doAction(name: string, actionName: string, character: ICharacter, actionSpec: IActionSpec): void {\n const processor = this.getProcessor(name, actionName);\n if (processor) {\n const actionResult = processor.run(character, actionSpec);\n return actionResult;\n }\n // eslint-disable-next-line no-console\n console.error(`Action not found: character => ${name}, action => ${actionName} `);\n return undefined;\n }\n\n applyAppearAttrs(name: string, actionName: string, character: ICharacter, actionSpec: IActionSpec) {\n const processor = this.getProcessor(name, actionName);\n if (processor && processor.applyAttrsForVisibility) {\n return processor.applyAttrsForVisibility(character, actionSpec);\n }\n return undefined;\n }\n\n release() {\n this._processorRegistry = null;\n this._story = null;\n }\n}\n","import type { ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTicker, DefaultTimeline } from '@visactor/vrender-core';\n\n// let globalTimeline: ITimeline;\n\nexport class GlobalTickerStore {\n timelineMap: Map;\n protected globalTicker: ITicker;\n\n init() {\n const defaultGlobalTimeline = new DefaultTimeline();\n const globalTicker = new DefaultTicker([]);\n globalTicker.addTimeline(defaultGlobalTimeline);\n globalTicker.autoStop = false;\n const TICKER_FPS = 60;\n globalTicker.setFPS(TICKER_FPS);\n this.globalTicker = globalTicker;\n this.timelineMap = new Map();\n this.timelineMap.set('default', defaultGlobalTimeline);\n }\n\n getGlobalTicker() {\n if (!this.globalTicker) {\n this.init();\n }\n return this.globalTicker;\n }\n\n releaseGlobalTicker() {\n this.globalTicker.release();\n this.globalTicker = null;\n }\n\n getTimeline(name: string) {\n if (!this.globalTicker) {\n this.init();\n }\n let timeline = this.timelineMap.get(name);\n if (!timeline) {\n timeline = new DefaultTimeline();\n this.timelineMap.set(name, timeline);\n this.globalTicker.addTimeline(timeline);\n }\n return timeline;\n }\n\n release() {\n this.globalTicker.release();\n this.globalTicker = null;\n this.timelineMap.forEach(tl => tl.clear());\n this.timelineMap.clear();\n }\n}\n\nexport const globalTickerStore = new GlobalTickerStore();\n","import type { ITicker } from '@visactor/vrender-core';\nimport type { IPlayer, IViewSizeParams } from '../interface/player';\nimport type { IStory } from '../interface/story';\nimport type { IScheduler } from '../interface/scheduler';\nimport { Scheduler } from './scheduler';\nimport type { IActionProcessor } from '../interface/action-processor';\nimport { ActionProcessor } from './action-processor';\nimport type { IActionSpec, IActSpec } from '../interface/dsl/dsl';\nimport type { ICharacter } from '../interface/character';\nimport { globalTickerStore } from '../tools/global-ticker';\n\ninterface IPlayerParams {\n // ticker?: ITicker;\n actionProcessor?: IActionProcessor;\n}\n\nexport class Player implements IPlayer {\n protected _story: IStory | null;\n protected _ticker: ITicker;\n protected _scheduler: IScheduler;\n protected _currTime: number;\n protected _actionProcessor: IActionProcessor;\n protected _loop: number;\n protected _lastFrameTime: number = -1;\n\n constructor(story: IStory, params: IPlayerParams = {}) {\n const { actionProcessor = new ActionProcessor(story) } = params;\n this._story = story;\n this._ticker = globalTickerStore.getGlobalTicker();\n this._actionProcessor = actionProcessor;\n this._scheduler = new Scheduler(actionProcessor);\n this._currTime = 0;\n this.initTicker();\n }\n\n initTicker() {\n this._ticker.addListener('tick', this.handlerTick);\n }\n\n tickTo(t: number) {\n const lastTime = this._currTime;\n // 如果时间倒退,那就重置,从头开始(需要上层场景树也重置)\n if (lastTime > t) {\n this._story.reset();\n }\n\n // 初始化 appear 的属性\n const appearActionList = this._scheduler.getUnAppliedAppearAction();\n appearActionList.forEach(action => {\n const character = this._story.getCharacterById(action.characterId);\n this._actionProcessor.applyAppearAttrs(\n character.config.type,\n action.actionSpec.action,\n character,\n action.actionSpec\n );\n });\n\n const actions = this._scheduler.getActionsInRange(lastTime, t);\n const characterSet = new Set();\n actions.forEach(action => {\n const character = this._story.getCharacterById(action.characterId);\n characterSet.add(character);\n this._actionProcessor.doAction(character.config.type, action.actionSpec.action, character, action.actionSpec);\n });\n\n this._currTime = t;\n\n this._story.getCharacterList().forEach(c => {\n c.tickTo && c.tickTo(t);\n });\n\n this._story.canvas.tickTo(t);\n }\n\n bindStory(story: IStory) {\n this._story = story;\n }\n\n initActions(acts: IActSpec[]) {\n this._scheduler.init(acts);\n }\n\n reset() {\n this._scheduler.clearState();\n this._ticker.getTimelines().forEach(tl => tl.clear());\n this._currTime = 0;\n }\n\n play(loop: number = 0) {\n const totalTime = this._scheduler.getTotalTime();\n this._loop = loop;\n if (totalTime <= 0 && !this._loop) {\n // 没有动画,且不循环也不持续,直接定位到0s\n this._currTime = 0;\n this.tickTo(0);\n } else {\n // 其他环境都需要走ticker\n this._currTime = 0;\n this._ticker.start(true);\n }\n }\n\n protected handlerTick = (delta?: number) => {\n const time = Date.now();\n if (delta === void 0) {\n if (this._lastFrameTime >= 0) {\n delta = time - this._lastFrameTime;\n } else {\n delta = 0;\n }\n }\n this._lastFrameTime = time;\n\n const totalTime = this._scheduler.getTotalTime();\n let currTime = this._currTime;\n\n // 如果是循环播放,_currTime按周期计算\n if (this._loop > 0) {\n if (totalTime <= 0) {\n currTime = 0;\n } else {\n if (currTime + delta > totalTime) {\n currTime = currTime + delta;\n while (currTime > totalTime) {\n currTime = currTime - totalTime;\n }\n }\n }\n }\n\n if (!this._loop && currTime === totalTime) {\n return;\n }\n\n this.tickTo(this._loop >= 0 ? Math.min(currTime + delta, totalTime) : currTime + delta);\n };\n\n setViewScale(offsetX: number, offsetY: number, scaleX: number, scaleY: number, params: IViewSizeParams) {\n return;\n }\n\n toDSL(): IActSpec[] {\n return this._scheduler.toDSL();\n }\n\n addAction(sceneId: string, characterId: string, actions: IActionSpec[]) {\n this._scheduler.addAction(sceneId, characterId, actions);\n }\n\n removeCharacterActions(characterId: string) {\n this._scheduler.removeCharacterActions(characterId);\n }\n\n release() {\n this._actionProcessor.release();\n this._scheduler.release();\n this._ticker.removeListener('tick', this.handlerTick);\n this._ticker = null;\n // globalTickerStore.releaseGlobalTicker();\n }\n}\n","import '@visactor/vrender-core';\nimport {\n container,\n isBrowserEnv,\n isNodeEnv,\n preLoadAllModule,\n registerFlexLayoutPlugin,\n registerViewTransform3dPlugin,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin,\n registerDirectionalLight,\n registerOrthoCamera\n} from '@visactor/vrender-core';\nimport { loadBrowserEnv, loadNodeEnv } from '@visactor/vrender-kits';\nimport {\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n\nlet _registered = false;\nexport function initVR() {\n if (_registered) {\n return;\n }\n _registered = true;\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n registerArc3d();\n registerArea();\n registerCircle();\n registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n registerPath();\n registerPolygon();\n registerPyramid3d();\n registerRect();\n registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerWrapText();\n\n registerFlexLayoutPlugin();\n registerViewTransform3dPlugin();\n registerHtmlAttributePlugin();\n registerReactAttributePlugin();\n registerDirectionalLight();\n registerOrthoCamera();\n}\n","import type { Parser } from '@visactor/vdataset';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const arrayParser: Parser = (array: []) => {\n return array;\n};\n","import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec = Omit;\n\nexport type AdaptiveSpec = {\n [key in Exclude]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec extends Record | IMarkStateStyleSpec> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec | IMarkStateStyleSpec;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec | IMarkStateStyleSpec;\n}\n\n/** markSpec */\nexport type IMarkSpec = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record) => boolean);\n\nexport interface IMarkStateSpec {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec;\n}\n\nexport type IMarkStateStyleSpec = ConvertToMarkStyleSpec;\n\nexport interface IMarkStateTheme extends Record {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec\n extends IModelSpec,\n IMarkSpec,\n IAnimationSpec {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec {\n children?: ICustomMarkSpec[];\n}\n\nexport interface IExtensionMarkSpec> extends ICustomMarkSpec {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod = (\n ...args: T\n) => ReturnType> | ReturnType>;\n","export type ComponentType = keyof typeof ComponentTypeEnum | string;\n\nexport enum ComponentTypeEnum {\n cartesianAxis = 'cartesianAxis',\n cartesianBandAxis = 'cartesianAxis-band',\n cartesianLinearAxis = 'cartesianAxis-linear',\n cartesianTimeAxis = 'cartesianAxis-time',\n cartesianLogAxis = 'cartesianAxis-log',\n cartesianSymlogAxis = 'cartesianAxis-symlog',\n polarAxis = 'polarAxis',\n polarBandAxis = 'polarAxis-band',\n polarLinearAxis = 'polarAxis-linear',\n crosshair = 'crosshair',\n cartesianCrosshair = 'cartesianCrosshair',\n polarCrosshair = 'polarCrosshair',\n dataZoom = 'dataZoom',\n geoCoordinate = 'geoCoordinate',\n indicator = 'indicator',\n discreteLegend = 'discreteLegend',\n continuousLegend = 'continuousLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend',\n mapLabel = 'mapLabel',\n markLine = 'markLine',\n markArea = 'markArea',\n markPoint = 'markPoint',\n polarMarkLine = 'polarMarkLine',\n polarMarkArea = 'polarMarkArea',\n polarMarkPoint = 'polarMarkPoint',\n geoMarkPoint = 'geoMarkPoint',\n tooltip = 'tooltip',\n title = 'title',\n player = 'player',\n scrollBar = 'scrollBar',\n label = 'label',\n totalLabel = 'totalLabel',\n\n brush = 'brush',\n\n poptip = 'poptip',\n\n customMark = 'customMark'\n}\n","/**\n * 生成唯一ID。 如果提供了 prefix ,会被添加到ID前缀上。\n * @param prefix 默认 dataset\n * @returns\n */\nlet idIndex: number = 0;\nconst maxId = 100000000;\nexport function getUUID(prefix: string = 'dataset'): string {\n if (idIndex > maxId) {\n idIndex = 0;\n }\n return prefix + '_' + idIndex++;\n}\n","import type { ILogger } from '@visactor/vutils';\nimport { EventEmitter, Logger } from '@visactor/vutils';\nimport type { DataView } from './data-view';\nimport { getUUID } from './utils/uuid';\nimport type { Transform } from './transform';\nimport type { IParserOptions, Parser } from './parser';\n\ninterface IDataSetOptions {\n name?: string;\n logger?: Logger;\n}\n\n/**\n * 数据集\n */\nexport class DataSet {\n isDataSet: boolean = true;\n\n /**\n * 已注册的 Transform(key-value 对)\n */\n transformMap: Record = {};\n\n /**\n * 已注册的 Parser(key-value 对)\n */\n parserMap: Record = {};\n\n /**\n * 所有挂在数据集上的数据视图(key-value 对)\n */\n dataViewMap: Record = {};\n\n name: string;\n\n /**\n * 消息的监听与触发\n */\n target: any = new EventEmitter();\n\n /**\n * 多 DataView消息监听工具\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n _callMap: Map void>;\n\n protected _logger: ILogger;\n\n constructor(public options?: IDataSetOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataset');\n }\n this.name = name;\n\n this._logger = options?.logger ?? Logger.getInstance();\n }\n\n setLogger(logger: Logger) {\n this._logger = logger;\n }\n\n /**\n * 根据name 获取 dataView\n * @param name - name\n */\n getDataView(name: string | number): DataView {\n return this.dataViewMap[name];\n }\n\n /**\n * 设置 dataView\n * @param name - 名称\n * @param dataView - data dataView\n */\n setDataView(name: string | number, dataView: DataView): void {\n if (this.dataViewMap[name]) {\n this._logger?.error(`Error: dataView ${name} 之前已存在,请重新命名`);\n }\n this.dataViewMap[name] = dataView;\n }\n\n /**\n * 移除 dataview\n * @param name\n */\n removeDataView(name: string | number) {\n this.dataViewMap[name] = null;\n\n delete this.dataViewMap[name];\n }\n\n /**\n * 注册一个数据解析器\n * @param name - 类型\n * @param parser - 解析逻辑\n */\n registerParser(name: string, parser: Parser): void {\n if (this.parserMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.parserMap[name] = parser;\n }\n\n /**\n * 移除 parser\n * @param name\n */\n removeParser(name: string) {\n this.parserMap[name] = null;\n delete this.parserMap[name];\n }\n\n /**\n * 根据名称获取数据解析器\n * @param name\n * @returns\n */\n getParser(name: string): Parser {\n return this.parserMap[name] || this.parserMap.default;\n }\n\n /**\n * 注册一个数据处理函数\n * @param name\n * @param transform\n */\n registerTransform(name: string, transform: Transform): void {\n if (this.transformMap[name]) {\n this._logger?.warn(`Warn: transform ${name} 之前已注册,执行覆盖逻辑`);\n }\n this.transformMap[name] = transform;\n }\n\n /**\n * 移除 transform\n * @param name\n */\n removeTransform(name: string) {\n this.transformMap[name] = null;\n delete this.transformMap[name];\n }\n\n /**\n * 根据名称获取数据处理函数\n * @param name\n * @returns\n */\n getTransform(name?: string): Transform {\n return this.transformMap[name];\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewAddListener(list: DataView[], event: string, call: Function) {\n if (!this._callMap) {\n this._callMap = new Map();\n }\n\n let callAd = this._callMap.get(call);\n if (!callAd) {\n callAd = () => {\n if (list.some(l => l.isRunning)) {\n return;\n }\n call();\n };\n }\n list.forEach(l => {\n l.target.addListener(event, callAd);\n });\n this._callMap.set(call, callAd);\n }\n\n allDataViewAddListener(event: string, call: () => void) {\n this.multipleDataViewAddListener(Object.values(this.dataViewMap), event, call);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n multipleDataViewRemoveListener(list: DataView[], event: string, call: Function) {\n if (this._callMap) {\n const callAd = this._callMap.get(call);\n if (callAd) {\n list.forEach(l => {\n l.target.removeListener(event, callAd);\n });\n }\n this._callMap.delete(call);\n }\n }\n\n multipleDataViewUpdateInParse(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.parseNewData(d.data, d.options));\n }\n\n multipleDataViewUpdateInRawData(newData: { name: string; data: any; options?: IParserOptions }[]) {\n newData.forEach(d => this.getDataView(d.name)?.markRunning());\n newData.forEach(d => this.getDataView(d.name)?.updateRawData(d.data, d.options));\n }\n\n destroy() {\n this.transformMap = null;\n this.parserMap = null;\n this.dataViewMap = null;\n this._callMap = null;\n this.target.removeAllListeners();\n }\n}\n","import type { DataView } from '../data-view';\nimport type { Parser } from '.';\nimport { isBoolean, isArray } from '@visactor/vutils';\n\nexport interface IDataViewParserOptions {\n dependencyUpdate?: boolean; // 是否依赖更新\n}\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const dataViewParser: Parser = (data: DataView[], options: IDataViewParserOptions, dataView: DataView) => {\n const dependencyUpdate = isBoolean(options?.dependencyUpdate) ? options?.dependencyUpdate : true;\n\n if (!data || !isArray(data)) {\n throw new TypeError('Invalid data: must be DataView array!');\n }\n if (isArray(dataView.rawData)) {\n (dataView.rawData).forEach(rd => {\n if (rd.target) {\n rd.target.removeListener('change', dataView.reRunAllTransform);\n rd.target.removeListener('markRunning', dataView.markRunning);\n }\n });\n }\n\n if (dependencyUpdate) {\n data.forEach(d => {\n d.target.addListener('change', dataView.reRunAllTransform);\n d.target.addListener('markRunning', dataView.markRunning);\n });\n }\n return data;\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 * @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(Function)\n * // => false\n *\n * isObjectLike(null)\n * // => false\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isObjectLike = (value: any): value is object | Function | Array => {\n return typeof value === 'object' && value !== null;\n};\n\nexport default isObjectLike;\n","import isObjectLike from './isObjectLike';\nimport isType from './isType';\n\n/**\n * @see https://github.com/lodash/lodash/blob/master/isPlainObject.js\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 * @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 */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isPlainObject = function (value: any): value is object {\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n\nexport default isPlainObject;\n","import isArray from './isArray';\nimport isArrayLike from './isArrayLike';\nimport isPlainObject from './isPlainObject';\nimport isValid from './isValid';\n\nexport function baseMerge(target: any, source: any, shallowArray: boolean = false, skipTargetArray: boolean = false) {\n if (source) {\n if (target === source) {\n return;\n }\n if (isValid(source) && typeof source === 'object') {\n // baseFor\n const iterable = Object(source);\n const props = [];\n // keysIn\n for (const key in iterable) {\n props.push(key);\n }\n let { length } = props;\n let propIndex = -1;\n while (length--) {\n const key = props[++propIndex];\n // skipArray 这个是vchart spec的特有逻辑\n if (\n isValid(iterable[key]) &&\n typeof iterable[key] === 'object' &&\n (!skipTargetArray || !isArray(target[key]))\n ) {\n baseMergeDeep(target, source, key, shallowArray, skipTargetArray);\n } else {\n assignMergeValue(target, key, iterable[key]);\n }\n }\n }\n }\n}\n\n// 由于目前 ChartSpace 内部对 spec 会先执行一次深拷贝,merge 暂时不考虑 source 中有环的问题\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction baseMergeDeep(\n target: object,\n source: object,\n key: string,\n shallowArray: boolean = false,\n skipTargetArray: boolean = false\n) {\n const objValue = target[key];\n const srcValue = source[key];\n let newValue = source[key];\n let isCommon = true;\n // 不考虑 buffer / typedArray 类型\n if (isArray(srcValue)) {\n if (shallowArray) {\n // 依据参数对数组做浅拷贝\n newValue = [];\n } else if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLike(objValue)) {\n // 如果 source 为数组,则 target 的 arrayLike 对象也视作为数组处理\n newValue = new Array(objValue.length);\n let index = -1;\n const length = objValue.length;\n while (++index < length) {\n newValue[index] = objValue[index];\n }\n }\n }\n // else if (isArray(srcValue) && shallowArray) {\n // newValue = [];\n // }\n // 不考虑 argument 类型\n else if (isPlainObject(srcValue)) {\n newValue = objValue ?? {};\n // 不考虑 prototype 的额外处理\n if (typeof objValue === 'function' || typeof objValue !== 'object') {\n newValue = {};\n }\n } else {\n isCommon = false;\n }\n // 对 class 等复杂对象或者浅拷贝的 array 不做拷贝处理\n if (isCommon) {\n baseMerge(newValue, srcValue, shallowArray, skipTargetArray);\n }\n assignMergeValue(target, key, newValue);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction assignMergeValue(target: object, key: string, value: any) {\n if ((value !== undefined && !eq(target[key], value)) || (value === undefined && !(key in target))) {\n // 不考虑 __proto__ 的赋值处理\n target[key] = value;\n }\n}\n\nfunction eq(value: any, other: any) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\n// 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n// 例如 lineDash 等 spec 的 merge 使用这一操作更合适\nexport default function merge(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true);\n }\n return target;\n}\n","import type { IFields } from '../data-view';\nimport type { IFieldsMeta } from '../data-view';\nimport type { Transform } from '.';\n\ntype SortInfoType = {\n key: string;\n type: 'ordinal' | 'linear';\n index: number;\n sortIndex: { [key: string]: number };\n sortReverse: boolean;\n sortIndexCount: number;\n};\n\nexport interface IFieldsOptions {\n fields: IFields;\n}\n\ninterface IFieldsMetaTemp extends IFieldsMeta {\n _domainCache: { [key: string]: number };\n alias?: string;\n}\ninterface IFieldsTemp extends IFields {\n [key: string]: IFieldsMetaTemp;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const fields: Transform = (data: Array, options: IFieldsOptions) => {\n if (!options?.fields) {\n return data;\n }\n if (data.length === 0) {\n return data;\n }\n const fields = options.fields;\n const dataTemp = data[0];\n const filterFields: IFieldsTemp = {};\n const sortFields: SortInfoType[] = [];\n for (const key in fields) {\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const fieldInfo = fields[key] as IFieldsMetaTemp;\n if (!fieldInfo.type) {\n let dataCheck = dataTemp;\n if (!(key in dataTemp)) {\n dataCheck = data.find(d => key in d) ?? dataTemp;\n }\n fieldInfo.type = typeof dataCheck[key] === 'number' ? 'linear' : 'ordinal';\n }\n let sortInfo: SortInfoType;\n if (typeof fieldInfo.sortIndex === 'number') {\n sortInfo = {\n key,\n type: fieldInfo.type,\n index: fieldInfo.sortIndex,\n sortIndex: {},\n sortIndexCount: 0,\n sortReverse: fieldInfo.sortReverse === true\n };\n sortFields.push(sortInfo);\n }\n // if has domain & type = ordinal, make domain cache\n if (fieldInfo.domain?.length > 0) {\n if (fieldInfo.type === 'ordinal') {\n fieldInfo._domainCache = {};\n filterFields[key] = fieldInfo;\n // for sort\n const _domainCache = {};\n fieldInfo.domain.forEach((d, i) => {\n _domainCache[d] = i;\n fieldInfo._domainCache[d] = i;\n });\n if (sortInfo) {\n sortInfo.sortIndex = _domainCache;\n sortInfo.sortIndexCount = fieldInfo.domain.length;\n }\n } else if (fieldInfo.domain.length >= 2) {\n filterFields[key] = fieldInfo;\n }\n }\n }\n }\n // domain filter and sort\n const filterKeys = Object.keys(filterFields);\n if (filterKeys.length > 0) {\n data = data.filter(d => {\n for (const key in filterFields) {\n const fieldInfo = filterFields[key];\n if (fieldInfo.type === 'ordinal') {\n if (!(d[key] in fieldInfo._domainCache)) {\n return false;\n }\n } else {\n if (fieldInfo.domain[0] > d[key] || fieldInfo.domain[1] < d[key]) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n sortFields.sort((a, b) => a.index - b.index);\n\n data.sort((a, b) => sortData(a, b, sortFields));\n\n return data;\n};\n\nfunction sortData(a: object, b: object, sortFields: SortInfoType[]) {\n for (let i = 0; i < sortFields.length; i++) {\n const sortInfo = sortFields[i];\n let v = 0;\n if (sortInfo.type === 'ordinal') {\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[b[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[b[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n // eslint-disable-next-line no-undefined\n if (sortInfo.sortIndex[a[sortInfo.key]] === undefined) {\n sortInfo.sortIndex[a[sortInfo.key]] = sortInfo.sortIndexCount++;\n }\n v = sortInfo.sortIndex[a[sortInfo.key]] - sortInfo.sortIndex[b[sortInfo.key]];\n } else if (sortInfo.type === 'linear') {\n v = a[sortInfo.key] - b[sortInfo.key];\n }\n if (sortInfo.sortReverse) {\n v = -v;\n }\n if (v === 0) {\n continue;\n }\n return v;\n }\n return 0;\n}\n","import { cloneDeep, EventEmitter, merge, isNil } from '@visactor/vutils';\nimport type { DataSet } from './data-set';\nimport type { ITransformOptions } from './transform';\nimport type { DATAVIEW_TYPE } from './constants';\nimport { getUUID } from './utils/uuid';\nimport type { IParserOptions } from './parser';\nimport { fields } from './transform/fields';\nexport interface IDataViewOptions {\n name?: string | number; // dataview 名称\n history?: boolean; // 是否启用 historyData 字段存储全部历史变化数据,默认false 不存储\n diffKeys?: string[]; // 用于指定该数据视图监听的 `states` 状态量的。默认监听所有状态量(也就是任何状态量变更都会导致数据视图重新计算),如果指定为空数组 [],则不监听任何状态量,如果指定为非空数组,则只监听数组元素对应的状态量变更。\n fields?: IFields;\n}\n\nexport interface IFieldsMeta {\n type?: 'ordinal' | 'linear';\n domain?: any[];\n sortIndex?: number;\n sortReverse?: boolean;\n [key: string]: unknown;\n}\n\nexport interface IFields {\n [key: string]: IFieldsMeta;\n}\n\nexport const DataViewDiffRank = '_data-view-diff-rank';\n\n/**\n * 数据视图\n * @public\n */\nexport class DataView {\n isDataView: boolean = true;\n\n type: DATAVIEW_TYPE;\n\n name: string | number;\n\n target: any = new EventEmitter();\n\n /**\n * 当前parser\n */\n parseOption: IParserOptions = null;\n\n /**\n * 已应用的 transform\n */\n transformsArr: Array = [];\n\n /**\n * 是否正在运行 parse 和 transform\n */\n isRunning: boolean = false;\n\n /**\n * 原始数据\n */\n rawData: any = {};\n\n history: boolean = false;\n /**\n * 中间态数据,默认 history false 不存储\n */\n historyData: any[];\n\n /**\n * parser后的数据\n */\n parserData: any = {};\n\n /**\n * 最终数据\n */\n latestData: any = {};\n\n /**\n * 数据维度信息\n */\n protected _fields: IFields = null;\n\n // diff用数据id\n private _diffData: boolean;\n private _diffKeys: string[];\n _diffMap: Map;\n _diffRank: number;\n\n // tag\n\n latestDataAUD: {\n add: any;\n update: any;\n del: any;\n };\n\n constructor(public dataSet: DataSet, public options?: IDataViewOptions) {\n let name;\n if (options?.name) {\n name = options.name;\n } else {\n name = getUUID('dataview');\n }\n this.name = name;\n\n if (options?.history) {\n this.history = options.history;\n this.historyData = [];\n }\n\n this.dataSet.setDataView(name, this);\n this.setFields(options?.fields);\n }\n\n /**\n * 解析数据\n * todo: parse instanceof DataView\n * todo: parse ['dataview1', 'dataview2']\n * @param data\n * @param options\n * @returns\n */\n parse(data: any, options?: IParserOptions, emit: boolean = false): DataView {\n this.isRunning = true;\n if (emit) {\n this.target.emit('beforeParse', []);\n }\n options && (this.parseOption = options);\n const cloneData = this.cloneParseData(data, options);\n if (options?.type) {\n // 默认bytejson\n const parserFn = this.dataSet.getParser(options.type) ?? this.dataSet.getParser('bytejson');\n\n const parserData = parserFn(cloneData, options.options, this);\n\n this.rawData = cloneData;\n this.parserData = parserData;\n\n if (this.history) {\n this.historyData.push(cloneData, parserData);\n }\n\n this.latestData = parserData;\n } else {\n this.parserData = cloneData;\n this.rawData = cloneData;\n\n if (this.history) {\n this.historyData.push(cloneData);\n }\n this.latestData = cloneData;\n }\n\n this.isRunning = false;\n if (emit) {\n this.target.emit('afterParse', []);\n }\n return this;\n }\n /**\n * 执行数据处理数据\n * @param options\n */\n transform(options: ITransformOptions, execute: boolean = true): DataView {\n this.isRunning = true;\n if (options && options.type) {\n // special transform\n let pushOption = true;\n if (options.type === 'fields') {\n this._fields = options.options.fields;\n // make sure only one fields\n const index = this.transformsArr.findIndex(_op => _op.type === options.type);\n if (index >= 0) {\n pushOption = false;\n this.transformsArr[index].options.fields = this._fields;\n }\n }\n pushOption && this.transformsArr.push(options);\n if (execute) {\n const lastTag = this.isLastTransform(options);\n\n this.executeTransform(options);\n if (lastTag) {\n this.diffLastData();\n }\n }\n }\n // 每次新增transform都要进行一次排序\n this.sortTransform();\n this.isRunning = false;\n return this;\n }\n private isLastTransform(options: ITransformOptions) {\n return this.transformsArr[this.transformsArr.length - 1] === options;\n }\n\n sortTransform() {\n if (this.transformsArr.length >= 2) {\n this.transformsArr.sort((a, b) => (a.level ?? 0) - (b.level ?? 0));\n }\n }\n\n private executeTransform(\n options: ITransformOptions,\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) {\n const { pushHistory, emitMessage } = opt;\n const transformFn = this.dataSet.getTransform(options.type);\n const transformData = transformFn(this.latestData, options.options);\n\n if (this.history && pushHistory !== false) {\n this.historyData.push(transformData);\n }\n\n this.latestData = transformData;\n emitMessage !== false && this.target.emit('change', []);\n }\n\n private resetTransformData() {\n this.latestData = this.parserData;\n if (this.history) {\n this.historyData.length = 0;\n this.historyData.push(this.rawData, this.parserData);\n }\n }\n\n reRunAllTransform = (\n opt: { pushHistory: boolean; emitMessage: boolean } = {\n pushHistory: true,\n emitMessage: true\n }\n ) => {\n this.isRunning = true;\n this.resetTransformData();\n this.transformsArr.forEach(t => {\n this.executeTransform(t, { pushHistory: opt.pushHistory, emitMessage: false });\n if (this.isLastTransform(t)) {\n this.diffLastData();\n }\n });\n this.isRunning = false;\n\n opt.emitMessage !== false && this.target.emit('change', []);\n return this;\n };\n\n enableDiff(keys: string[]) {\n this._diffData = true;\n this._diffKeys = keys;\n\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n disableDiff() {\n this._diffData = false;\n this._diffMap = null;\n this._diffRank = null;\n }\n\n resetDiff() {\n this._diffMap = new Map();\n this._diffRank = 0;\n }\n\n protected diffLastData() {\n if (!this._diffData) {\n return;\n }\n if (!this.latestData.forEach) {\n return;\n }\n if (!this._diffKeys?.length) {\n return;\n }\n const next = this._diffRank + 1;\n if (this._diffRank === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n this._diffMap.set(\n this._diffKeys.reduce((pre, k) => pre + d[k], ''),\n d\n );\n });\n this.latestDataAUD = {\n add: Array.from(this.latestData),\n del: [],\n update: []\n };\n } else {\n this.latestDataAUD = {\n add: [],\n del: [],\n update: []\n };\n let tempKey;\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.latestData.forEach((d: Object) => {\n d[DataViewDiffRank] = next;\n tempKey = this._diffKeys.reduce((pre, k) => pre + d[k], '');\n if (this._diffMap.get(tempKey)) {\n this.latestDataAUD.update.push(d);\n } else {\n this.latestDataAUD.add.push(d);\n }\n this._diffMap.set(tempKey, d);\n });\n this._diffMap.forEach((v, k) => {\n if (v[DataViewDiffRank] < next) {\n this.latestDataAUD.del.push(v);\n this._diffMap.delete(k);\n }\n });\n }\n this._diffRank = next;\n }\n\n private cloneParseData(data: any, options?: IParserOptions) {\n let clone = false;\n if (!(data instanceof DataView) && options?.clone === true) {\n clone = true;\n }\n return clone ? cloneDeep(data) : data;\n }\n\n parseNewData(data: any, options?: IParserOptions) {\n this.parse(data, options || this.parseOption);\n this.reRunAllTransform();\n }\n\n updateRawData(data: any, options?: IParserOptions) {\n const cloneData = this.cloneParseData(data, options);\n this.rawData = cloneData;\n this.parserData = cloneData;\n this.latestData = cloneData;\n this.reRunAllTransform();\n }\n\n // updateParseData(data: any) {\n // // this.parse(data, this.parseOption);\n // this.parserData = data;\n // this.reRunAllTransform();\n // }\n // AddParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n // RemParseData(data: any) {\n // this.parse(data, this.parseOption);\n // this.reRunAllTransform();\n // }\n\n markRunning = () => {\n this.isRunning = true;\n this.target.emit('markRunning', []);\n };\n\n getFields() {\n if (this._fields) {\n return this._fields;\n }\n if (this.parseOption?.type === 'dataview' && this.rawData.length === 1 && this.rawData[0].getFields) {\n return this.rawData[0].getFields();\n }\n return null;\n }\n\n setFields(f: IFields, foreMerge: boolean = false) {\n if (f && foreMerge) {\n this._fields = merge({}, this._fields, f);\n } else {\n this._fields = f;\n }\n\n const fieldsOption = this.transformsArr.find(_op => _op.type === 'fields');\n if (!isNil(this._fields) && isNil(fieldsOption)) {\n // add\n this.dataSet.registerTransform('fields', fields);\n this.transform(\n {\n type: 'fields',\n options: {\n fields: this._fields\n }\n },\n false\n );\n } else if (fieldsOption) {\n // update\n fieldsOption.options.fields = this._fields;\n }\n }\n\n destroy() {\n this.dataSet.removeDataView(this.name);\n this._diffMap = null;\n this._diffRank = null;\n this.latestData = null;\n this.rawData = null;\n this.parserData = null;\n this.transformsArr = null;\n this.target = null;\n }\n}\n\nexport function isDataView(obj: any): obj is DataView {\n return obj instanceof DataView;\n}\n","import { isArray, isPlainObject, isString } from '@visactor/vutils';\nimport type { ISeriesSpec } from '../../typings';\n\n// todo 以目前的场景来看,并没有递归的需要。\n// 考虑到不确定性,还是递归处理spec对象,时间消耗很少\nexport function specTransform(\n spec: unknown,\n special: {\n [key: string]: (v: unknown) => unknown;\n } = {\n data: v => v\n }\n): unknown {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (spec.constructor === Object) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // todo 特殊处理怎样更合理?\n if (special[key]) {\n result[key] = special[key](spec[key]);\n continue;\n }\n result[key] = specTransform(spec[key], special);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return spec.map(s => specTransform(s, special));\n }\n return spec;\n}\n\n/**\n * functionTransform is used to replace the function registered by the instance\n * @param spec\n * @returns\n */\nexport function functionTransform(spec: ISeriesSpec, VChart: any): any {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (isPlainObject(spec)) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // 如果使用了注册函数\n if (isString(spec[key]) && VChart.getFunction(spec[key])) {\n result[key] = VChart.getFunction(spec[key]);\n continue;\n }\n result[key] = functionTransform(spec[key], VChart);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return (spec as ISeriesSpec[]).map((s: ISeriesSpec) => functionTransform(s, VChart));\n }\n return spec;\n}\n","let VChartId = 0;\nconst VChartIdMax = 9999999;\n\nexport function createID(): number {\n VChartId >= VChartIdMax && (VChartId = 0);\n return VChartId++;\n}\n\nexport function resetID() {\n VChartId = 0;\n}\n","import {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n} from '@visactor/vutils';\nimport type { IDataDomainSpec } from '../typings';\n\nexport {\n isObject,\n isFunction,\n isArray,\n isString,\n isNumber,\n isRegExp,\n isBoolean,\n isDate,\n isUndefined,\n isNull,\n isNil,\n isValid,\n isArrayLike,\n isValidNumber,\n isPlainObject\n};\n\nexport function couldBeValidNumber(v: any) {\n if (v === null || v === undefined || v === '') {\n return false;\n }\n if (isNumber(v)) {\n return true;\n }\n // eslint-disable-next-line no-self-compare\n return +v === +v;\n}\n\nexport function toValidNumber(v: any) {\n if (isValidNumber(v)) {\n return v;\n }\n const value = +v;\n return isValidNumber(value) ? value : 0;\n}\n\n/**\n * 检测一段字符串为合法数值\n */\nexport function isNumeric(value: string): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n}\n\nexport function isDataDomainSpec(domain: any): domain is IDataDomainSpec[] {\n if (!domain || domain.length === 0) {\n return false;\n }\n if (isNil(domain[0]) || isNil(domain[0].dataId)) {\n return false;\n }\n return isArray(domain[0].fields);\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray } from '@visactor/vutils';\nimport { isNumber, isNil, isString, isFunction, couldBeValidNumber, isObject } from './type';\nimport type { IPadding } from '../typings/space';\nimport type { IPoint } from '../typings/coordinate';\nimport type {\n ILayoutNumber,\n ILayoutRect,\n IPercent,\n IPercentOffset,\n ILayoutPaddingSpec,\n ILayoutOrientPadding\n} from '../typings/layout';\n\nexport function isValidOrient(orient: string): boolean {\n switch (orient) {\n case 'left':\n case 'right':\n case 'top':\n case 'bottom':\n return true;\n default:\n return false;\n }\n}\n\nexport function isPercent(v: any): v is IPercent {\n if (!isString(v)) {\n return false;\n }\n if (!v.endsWith('%')) {\n return false;\n }\n return couldBeValidNumber(v.substring(0, v.length - 1));\n}\n\nexport function isPercentOffset(v: any): v is IPercentOffset {\n if (!isObject(v)) {\n return false;\n }\n if ('percent' in v || 'offset' in v) {\n return true;\n }\n return false;\n}\n\nexport function calcLayoutNumber(\n v: ILayoutNumber | undefined,\n size: number,\n callOp?: ILayoutRect, //如果是函数类型的话,函数的参数\n defaultValue: number = 0\n) {\n if (isNumber(v)) {\n return v;\n }\n if (isPercent(v)) {\n return (Number(v.substring(0, v.length - 1)) * size) / 100;\n }\n if (isFunction(v)) {\n return v(callOp);\n }\n if (isObject(v)) {\n return size * (v.percent ?? 0) + (v.offset ?? 0);\n }\n return defaultValue;\n}\n\nexport function calcPadding(\n paddingSpec: ILayoutOrientPadding,\n rect: ILayoutRect,\n callOp: ILayoutRect //如果是函数类型的话,函数的参数\n): IPadding {\n const result: IPadding = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n if (Object.values(paddingSpec).every(value => isNumber(value))) {\n result.top = (paddingSpec).top ?? 0;\n result.right = (paddingSpec).right ?? 0;\n result.bottom = (paddingSpec).bottom ?? 0;\n result.left = (paddingSpec).left ?? 0;\n return result;\n }\n const paddings = [\n {\n orients: ['left', 'right'],\n size: rect.width\n },\n {\n orients: ['top', 'bottom'],\n size: rect.height\n }\n ];\n paddings.forEach(p => {\n p.orients.forEach(o => {\n result[o] = calcLayoutNumber(paddingSpec[o], p.size, callOp);\n });\n });\n return result;\n}\n\nexport function boundsInRect(bounds: IBoundsLike, rect: ILayoutRect): ILayoutRect {\n if (!bounds) {\n return { width: 0, height: 0 };\n }\n return {\n width: Math.ceil(Math.min(bounds.x2 - bounds.x1, rect.width)),\n height: Math.ceil(Math.min(bounds.y2 - bounds.y1, rect.height))\n };\n}\n\nexport function normalizeLayoutPaddingSpec(spec: ILayoutPaddingSpec): ILayoutOrientPadding {\n let result: ILayoutOrientPadding = {};\n if (isArray(spec)) {\n if (!isNil(spec[0])) {\n result.top = result.left = result.bottom = result.right = spec[0];\n }\n if (!isNil(spec[1])) {\n result.left = result.right = spec[1];\n }\n if (!isNil(spec[2])) {\n result.bottom = spec[2];\n }\n if (!isNil(spec[3])) {\n result.left = spec[3];\n }\n return result;\n }\n if (isNumber(spec) || isPercent(spec) || isFunction(spec) || isPercentOffset(spec)) {\n result.top = result.left = result.bottom = result.right = spec;\n return result;\n }\n if (isObject(spec)) {\n result = { ...spec };\n return result;\n }\n return result;\n}\n\nexport function convertPoint(point: IPoint, relativePoint: IPoint, convert: boolean) {\n if (convert) {\n return {\n x: point.x + relativePoint.x,\n y: point.y + relativePoint.y\n };\n }\n return point;\n}\n\n/**\n * 将相对数值转换为绝对数值\n * @param originValue 原始值(相对值或绝对值)\n * @param total 总体值\n * @returns 实际绝对数值\n */\nexport const getActualNumValue = (originValue: number | string, total: number): number => {\n const originNumValue = Number(originValue);\n const originStrValue = originValue.toString();\n if (isNaN(originNumValue) && originStrValue[originStrValue.length - 1] === '%') {\n return total * (Number(originStrValue.slice(0, originStrValue.length - 1)) / 100);\n }\n return originNumValue;\n};\n","import { isBrowserEnv } from '@visactor/vrender-core';\nimport type { RenderMode } from '../typings/spec';\n\nexport const isBrowser = isBrowserEnv();\nexport const domDocument = isBrowser && globalThis ? globalThis.document : undefined;\n\n// Taro 会模拟实现 DOM,所以还是加上 mode 的判断\nexport function isTrueBrowser(mode: RenderMode): boolean {\n return (mode === 'desktop-browser' || mode === 'mobile-browser') && isBrowser;\n}\n\nexport function isPcLikeMode(mode: RenderMode) {\n return mode === 'desktop-miniApp' || mode === 'desktop-browser';\n}\n\nexport function isMobileLikeMode(mode: RenderMode) {\n return isMiniAppLikeMode(mode) || mode === 'mobile-browser';\n}\n\nexport function isMiniAppLikeMode(mode: RenderMode) {\n return mode.includes('miniApp') || mode === 'lynx' || mode === 'wx' || mode === 'harmony';\n}\n","import { Logger, isFunction } from '@visactor/vutils';\n\nexport const log = (msg: string, ...args: any[]) => {\n if (!config.silent) {\n return Logger.getInstance().info(msg, ...args);\n }\n return null;\n};\n\nexport const warn = (msg: string, detail?: any) => {\n if (isFunction(config.warnHandler)) {\n config.warnHandler.call(null, msg, detail);\n }\n if (detail) {\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`, detail);\n }\n return Logger.getInstance().warn(`[VChart warn]: ${msg}`);\n};\n\nexport const error = (msg: string, detail?: any, err?: Error) => {\n if (config.silent) {\n return;\n }\n if (isFunction(config.errorHandler)) {\n config.errorHandler.call(null, msg, detail);\n return;\n }\n throw new Error(msg);\n};\n\nexport const config = {\n silent: false,\n warnHandler: false,\n errorHandler: false\n} as unknown as IConfig;\n\nexport interface IConfig {\n /**\n * 是否开启控制台告警\n */\n silent: boolean;\n /**\n * 错误处理\n */\n errorHandler?: (msg: string, detail?: any) => void;\n /**\n * 警告处理\n */\n warnHandler?: (msg: string, detail?: any) => void;\n}\n","import type { DirectionType, ISeriesSpec } from '../../typings';\nimport type { ICartesianSeriesSpec } from '../cartesian';\nimport { SeriesTypeEnum } from '../interface';\nimport type { ISankeySeriesSpec } from '../sankey/interface';\n\nexport function getDirectionFromSeriesSpec(spec: ISeriesSpec): DirectionType {\n const { type } = spec;\n\n if (type === SeriesTypeEnum.sankey) {\n return (spec as ISankeySeriesSpec).direction ?? 'horizontal';\n }\n\n return (spec as ICartesianSeriesSpec).direction ?? 'vertical';\n}\n","export type SeriesType = keyof typeof SeriesTypeEnum | string;\n\nexport enum SeriesTypeEnum {\n area = 'area',\n line = 'line',\n bar = 'bar',\n bar3d = 'bar3d',\n rangeColumn = 'rangeColumn',\n rangeColumn3d = 'rangeColumn3d',\n rangeArea = 'rangeArea',\n dot = 'dot',\n geo = 'geo',\n link = 'link',\n map = 'map',\n pie = 'pie',\n pie3d = 'pie3d',\n radar = 'radar',\n rose = 'rose',\n scatter = 'scatter',\n circularProgress = 'circularProgress',\n wordCloud = 'wordCloud',\n wordCloud3d = 'wordCloud3d',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n linearProgress = 'linearProgress',\n boxPlot = 'boxPlot',\n sankey = 'sankey',\n gaugePointer = 'gaugePointer',\n gauge = 'gauge',\n treemap = 'treemap',\n sunburst = 'sunburst',\n circlePacking = 'circlePacking',\n waterfall = 'waterfall',\n heatmap = 'heatmap',\n correlation = 'correlation',\n liquid = 'liquid',\n venn = 'venn',\n mosaic = 'mosaic',\n pictogram = 'pictogram'\n}\n\nexport const enum SeriesMarkNameEnum {\n label = 'label',\n point = 'point',\n line = 'line',\n area = 'area',\n bar = 'bar',\n bar3d = 'bar3d',\n boxPlot = 'boxPlot',\n outlier = 'outlier',\n circlePacking = 'circlePacking',\n group = 'group',\n gridBackground = 'gridBackground',\n grid = 'grid',\n dot = 'dot',\n title = 'title',\n subTitle = 'subTitle',\n symbol = 'symbol',\n funnel = 'funnel',\n funnel3d = 'funnel3d',\n transform = 'transform',\n transform3d = 'transform3d',\n transformLabel = 'transformLabel',\n outerLabel = 'outerLabel',\n outerLabelLine = 'outerLabelLine',\n pin = 'pin',\n pinBackground = 'pinBackground',\n pointer = 'pointer',\n segment = 'segment',\n track = 'track',\n cell = 'cell',\n cellBackground = 'cellBackground',\n link = 'link',\n arrow = 'arrow',\n pie = 'pie',\n pie3d = 'pie3d',\n labelLine = 'labelLine',\n progress = 'progress',\n minLabel = 'minLabel',\n maxLabel = 'maxLabel',\n rose = 'rose',\n node = 'node',\n sunburst = 'sunburst',\n nonLeaf = 'nonLeaf',\n leaf = 'leaf',\n nonLeafLabel = 'nonLeafLabel',\n leaderLine = 'leaderLine',\n stackLabel = 'stackLabel',\n word = 'word',\n fillingWord = 'fillingWord',\n wordMask = 'wordMask',\n nodePoint = 'nodePoint',\n ripplePoint = 'ripplePoint',\n centerPoint = 'centerPoint',\n centerLabel = 'centerLabel',\n barBackground = 'barBackground',\n lineLabel = 'lineLabel',\n areaLabel = 'areaLabel',\n liquidGroup = 'liquidGroup',\n liquid = 'liquid',\n liquidBackground = 'liquidBackground',\n liquidOutline = 'liquidOutline',\n circle = 'circle',\n overlap = 'overlap',\n overlapLabel = 'overlapLabel',\n pictogram = 'pictogram'\n}\n","// FIXME: token 兼容策略,照目前的设计不应该硬编码。\n// 后续需要二选一:\n// - 主题模块指定唯一一套支持的 token(可以保留这段硬编码)\n// - 在默认主题中做声明式的兼容(需要删除这段硬编码,并在 IColorKey 中支持新属性)\n\nimport type { BuiltinColorPalette } from './builtin';\nimport type { ColorSchemeItem, IColorSchemeStruct } from './interface';\n\nexport const newTokenToLegacyToken: Record = {\n primaryFontColor: 'titleFontColor',\n tertiaryFontColor: 'labelFontColor',\n axisLabelFontColor: 'axisFontColor',\n axisMarkerFontColor: 'labelReverseFontColor',\n dataZoomHandleStrokeColor: 'dataZoomHandlerStrokeColor',\n sliderHandleColor: 'dataZoomHandlerFillColor',\n sliderRailColor: 'dataZoomBackgroundColor',\n sliderTrackColor: 'dataZoomSelectedColor',\n playerControllerColor: 'dataZoomSelectedColor',\n popupBackgroundColor: 'tooltipBackgroundColor',\n hoverBackgroundColor: 'axisGridColor'\n // 以下两个新 token 不做兼容策略,因为其对应的 legacy token 仍在使用\n // axisMarkerBackgroundColor: 'primaryFontColor',\n // markLineStrokeColor: 'primaryFontColor',\n};\n\nexport const legacyTokenToNewToken: Record = {\n titleFontColor: 'primaryFontColor',\n labelFontColor: 'tertiaryFontColor',\n axisFontColor: 'axisLabelFontColor',\n labelReverseFontColor: 'axisMarkerFontColor',\n dataZoomHandlerStrokeColor: 'dataZoomHandleStrokeColor',\n dataZoomHandlerFillColor: 'sliderHandleColor',\n dataZoomBackgroundColor: 'sliderRailColor',\n dataZoomSelectedColor: 'sliderTrackColor',\n tooltipBackgroundColor: 'popupBackgroundColor'\n};\n\nexport function getUpgradedTokenValue(palette: IColorSchemeStruct['palette'], key: string): ColorSchemeItem {\n // 情况一:用户定义了包含旧 token 的新色板\n const legacyKey = newTokenToLegacyToken[key];\n if (legacyKey && palette[legacyKey]) {\n return palette[legacyKey];\n }\n // 情况二:默认情况,用户尝试取色(大部分情况下在此退出)\n if (palette[key]) {\n return palette[key];\n }\n // 情况三:用户没有取到颜色,判断用户是否在尝试用旧 token 取色\n const newKey = legacyTokenToNewToken[key];\n if (newKey) {\n return palette[newKey];\n }\n // 情况四:真的取不到颜色\n return undefined;\n}\n","import { isArray, isFunction, isObject, isString, isValid, Color, isNil, rgbToHsl, hslToRgb } from '@visactor/vutils';\nimport type {\n ColorScheme,\n ColorSchemeItem,\n IColorKey,\n IColorSchemeStruct,\n IProgressiveDataSchemeCase,\n IThemeColorScheme,\n ProgressiveDataScheme\n} from './interface';\nimport type { ISeriesSpec } from '../../typings';\nimport { getDirectionFromSeriesSpec } from '../../series/util/spec';\nimport { getUpgradedTokenValue } from './legacy';\n\n/**\n * 从色板中获取数据色板(在此步骤中替换语义色值)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function getDataScheme(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): Array | ProgressiveDataScheme {\n if (!colorScheme) {\n return [];\n }\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme || isArray(scheme)) {\n // 不带语义色板,直接输出\n return (scheme as Array | ProgressiveDataScheme) ?? [];\n } else if (isObject(scheme)) {\n // 带语义色板,转换颜色后输出\n const { dataScheme } = scheme as IColorSchemeStruct;\n if (!dataScheme) {\n return [];\n }\n // 渐进式色板的情况\n if (isProgressiveDataColorScheme(dataScheme)) {\n return dataScheme.map(item => ({\n ...item,\n scheme: item.scheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid)\n }));\n }\n // 普通色板的情况\n return dataScheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesSpec);\n }\n return color;\n })\n .filter(isValid);\n }\n return [];\n}\n\n/**\n * 计算最终数据色板(在此步骤中获得渐进式色板的最终色板)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function computeActualDataScheme(\n dataScheme: Array | ProgressiveDataScheme,\n colorDomain: any[]\n): Array {\n if (isProgressiveDataColorScheme(dataScheme)) {\n return (\n dataScheme.find(item => {\n if (isValid(item.isAvailable)) {\n if (isFunction(item.isAvailable)) {\n return item.isAvailable(colorDomain);\n }\n return !!item.isAvailable;\n } else if (isValid(item.maxDomainLength)) {\n return colorDomain?.length <= item.maxDomainLength;\n }\n return true;\n })?.scheme ?? dataScheme[dataScheme.length - 1].scheme\n );\n }\n return dataScheme;\n}\n\n/**\n * 根据色板和色值索引生成颜色\n * @param colorScheme\n * @param colorKey\n * @param seriesType\n * @returns\n */\nexport function queryColorFromColorScheme(\n colorScheme: IThemeColorScheme,\n colorKey: IColorKey,\n seriesSpec?: ISeriesSpec\n): ColorSchemeItem | undefined {\n const scheme = getColorSchemeBySeries(colorScheme, seriesSpec);\n if (!scheme) {\n return undefined;\n }\n let color;\n const { palette } = scheme as IColorSchemeStruct;\n if (isObject(palette)) {\n color = getUpgradedTokenValue(palette, colorKey.key) ?? colorKey.default;\n }\n if (!color) {\n return undefined;\n }\n if ((isNil(colorKey.a) && isNil(colorKey.l)) || !isString(color)) {\n return color;\n }\n let c = new Color(color);\n if (isValid(colorKey.l)) {\n const { r, g, b } = c.color;\n const { h, s } = rgbToHsl(r, g, b);\n const rgb = hslToRgb(h, s, colorKey.l);\n const newColor = new Color(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`);\n newColor.setOpacity(c.color.opacity);\n c = newColor;\n }\n if (isValid(colorKey.a)) {\n c.setOpacity(colorKey.a);\n }\n return c.toRGBA();\n}\n\n/** 查询语义化颜色 */\nexport const getActualColor = (value: any, colorScheme?: IThemeColorScheme, seriesSpec?: ISeriesSpec) => {\n if (colorScheme && isColorKey(value)) {\n const color = queryColorFromColorScheme(colorScheme, value, seriesSpec);\n if (color) {\n return color;\n }\n }\n return value;\n};\n\nexport function isColorKey(obj: any): obj is IColorKey {\n return obj && (obj as IColorKey).type === 'palette' && !!(obj as IColorKey).key;\n}\n\nexport function isProgressiveDataColorScheme(obj: any): obj is ProgressiveDataScheme {\n if (!isArray(obj) || obj.length === 0) {\n return false;\n }\n return obj.every(item => {\n return isValid((item as IProgressiveDataSchemeCase).scheme);\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToStandardStruct(colorScheme: ColorScheme): IColorSchemeStruct {\n if (isArray(colorScheme)) {\n return {\n dataScheme: colorScheme\n };\n }\n return colorScheme;\n}\n\nexport function getColorSchemeBySeries(\n colorScheme?: IThemeColorScheme,\n seriesSpec?: ISeriesSpec\n): ColorScheme | undefined {\n const { type: seriesType } = seriesSpec ?? {};\n let scheme: ColorScheme | undefined;\n if (!seriesSpec || isNil(seriesType)) {\n scheme = colorScheme?.default;\n } else {\n const direction = getDirectionFromSeriesSpec(seriesSpec);\n scheme = colorScheme?.[`${seriesType}_${direction}`] ?? colorScheme?.[seriesType] ?? colorScheme?.default;\n }\n return scheme;\n}\n","import { baseMerge, isArray, isObject } from '@visactor/vutils';\n/* 与原生的 lodash merge 差异在于对数组是否应用最后一个 source 的结果\n * 以及对一些特殊情况的处理,比如对数组类型 padding 和对象类型的 padding 的 merge\n */\nexport function mergeSpec(target: any, ...sources: any[]): any {\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n baseMerge(target, source, true, true);\n }\n return target;\n}\n\nexport function mergeSpecWithFilter(\n target: any,\n filter: string | { type: string; index: number },\n spec: any,\n forceMerge: boolean\n) {\n Object.keys(target).forEach(k => {\n if (isObject(filter)) {\n if (filter.type === k) {\n if (isArray(target[k])) {\n if (target[k].length >= filter.index) {\n target[k][filter.index] = forceMerge ? mergeSpec({}, target[k][filter.index], spec) : spec;\n }\n } else {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n } else {\n // filter === user id\n if (isArray(target[k])) {\n const index = target[k].findIndex((_s: { id: string | number }) => _s.id === filter);\n if (index >= 0) {\n target[k][index] = forceMerge ? mergeSpec({}, target[k][index], spec) : spec;\n }\n } else if (target.id === filter) {\n target[k] = forceMerge ? mergeSpec({}, target[k], spec) : spec;\n }\n }\n });\n}\n","import type { Transform } from '.';\n\nexport interface IFilterOptions {\n callback?: (item: any) => boolean;\n}\n\n/**\n * 数据过滤\n * @param data\n * @param options\n * @returns\n */\nexport const filter: Transform = (data: Array, options?: IFilterOptions) => {\n const { callback } = options;\n if (callback) {\n data = data.filter(callback);\n }\n return data;\n};\n","import type { Transform } from '.';\n\nexport interface IFoldOptions {\n fields: string[]; // 展开字段集\n key: string; // key字段\n value: string; // value字段\n retains?: string[]; // 保留字段集,默认为除 fields 以外的所有字段\n}\n\n/**\n *\n * @param data 数据展开\n * @param options\n * @returns\n */\nexport const fold: Transform = (data: Array, options?: IFoldOptions) => {\n const { fields, key, value, retains } = options;\n const results: any[] = [];\n for (let i = 0; i < data.length; i++) {\n fields.forEach(field => {\n const item = {};\n item[key] = field;\n item[value] = data[i][field];\n if (retains) {\n retains.forEach(retain => {\n item[retain] = data[i][retain];\n });\n } else {\n for (const prop in data[i]) {\n if (fields.indexOf(prop) === -1) {\n item[prop] = data[i][prop];\n }\n }\n }\n\n results.push(item);\n });\n }\n return results;\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","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { cloneDeep, isObject } from '@visactor/vutils';\n\n/**\n * 深拷贝\n * @param target 目标对象\n * @param sources 来源对象\n * @returns\n */\nexport const mergeDeepImmer = function (target: Object, ...sources: Array) {\n return mergeOption(cloneDeep(target), ...sources);\n};\n\nfunction _mergeOptionDeep(target: Object, source: Object, key: string) {\n const sourceValue = source[key];\n if (sourceValue === undefined) {\n target[key] = null; // undefined 转为 null 并且也覆盖\n } else if (isObject(sourceValue)) {\n if (!isObject(target[key])) {\n target[key] = {};\n }\n for (const _key in sourceValue) {\n _mergeOptionDeep(target[key], sourceValue, _key);\n }\n } else {\n // 其余类型全部替换\n target[key] = sourceValue;\n }\n}\n\nfunction _mergeOptionBase(target: Object, source: Object) {\n if (!isObject(source)) {\n return;\n }\n if (target === source) {\n return;\n }\n // keysIn\n for (const key in source) {\n _mergeOptionDeep(target, source, key);\n }\n}\n\nfunction mergeOption(target: Object, ...sources: Array): any {\n if (!target) {\n target = {};\n }\n let sourceIndex = -1;\n const length = sources.length;\n while (++sourceIndex < length) {\n const source = sources[sourceIndex];\n _mergeOptionBase(target, source);\n }\n return target;\n}\n","import { dsvFormat, csvParse, tsvParse } from 'd3-dsv';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../constants';\nimport type { DataView } from '../data-view';\nimport { mergeDeepImmer } from '../utils/js';\nimport type { Parser } from '.';\n\nexport interface IDsvParserOptions {\n delimiter?: string; // delimiter 必须是一个单字符\n}\n\nconst DEFAULT_DSV_PARSER_OPTIONS = {\n delimiter: ',' // delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV,当delimiter='\\t'时,被处理文件就是TSV。\n};\n\n/**\n * 根据指定的 delimiter 构造一个新的 DSV(支持范式的分隔符分隔值文件,delimiter-separated values)解析以及格式化。\n * @param data\n * @param options\n * @returns\n */\nexport const dsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n\n const mergeOptions = mergeDeepImmer(DEFAULT_DSV_PARSER_OPTIONS, options) as IDsvParserOptions;\n\n const { delimiter } = mergeOptions;\n if (!isString(delimiter)) {\n throw new TypeError('Invalid delimiter: must be a string!');\n }\n return dsvFormat(delimiter).parse(data);\n};\n\n/**\n * 解析指定的 CSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const csvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return csvParse(data);\n};\n\n/**\n * 解析指定的 TSV 字符串并返回对象数组\n * @param data\n * @returns\n */\nexport const tsvParser: Parser = (data: string, options: IDsvParserOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.DSV;\n return tsvParse(data);\n};\n","import type {\n IChartConstructor,\n IChartOption,\n IChart,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../chart/interface';\nimport type { ISeriesConstructor, ISeriesMarkInfo, ISeriesOption, SeriesMarkNameEnum } from '../series/interface';\nimport type { IComponentConstructor } from '../component/interface';\nimport type { IMarkConstructor, IMarkOption, MarkConstructor } from '../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { IRegion, IRegionConstructor } from '../region/interface';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelOption } from '../model/interface';\nimport type { Transform, Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { fields, filter, fold, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { ILayoutConstructor } from '../layout/interface';\nimport type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { IChartPluginConstructor } from '../plugin/chart/interface';\nimport type { IComponentPluginConstructor } from '../plugin/components/interface';\n\nexport class Factory {\n private static _charts: { [key: string]: IChartConstructor } = {};\n private static _series: { [key: string]: ISeriesConstructor } = {};\n private static _components: { [key: string]: { cmp: IComponentConstructor; alwaysCheck?: boolean } } = {};\n private static _marks: { [key: string]: MarkConstructor } = {};\n private static _regions: { [key: string]: IRegionConstructor } = {};\n private static _animations: { [key: string]: (params?: any, preset?: any) => MarkAnimationSpec } = {};\n private static _implements: { [key: string]: (...args: any) => void } = {};\n private static _chartPlugin: { [key: string]: IChartPluginConstructor } = {};\n private static _componentPlugin: { [key: string]: IComponentPluginConstructor } = {};\n private static _formatter: (\n text: string | number | string[] | number[],\n datum: any,\n formatter: string | string[]\n ) => any;\n\n static transforms: { [key: string]: Transform } = {\n // buildIn transforms\n fields: fields,\n filter: filter,\n fold: fold\n };\n static dataParser: { [key: string]: Parser } = {\n // buildIn parser\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser\n };\n static _layout: { [key: string]: ILayoutConstructor } = {};\n\n static registerChart(key: string, chart: IChartConstructor) {\n Factory._charts[key] = chart;\n }\n static registerSeries(key: string, series: ISeriesConstructor) {\n Factory._series[key] = series;\n }\n static registerComponent(key: string, cmp: IComponentConstructor, alwaysCheck?: boolean) {\n Factory._components[key] = { cmp, alwaysCheck };\n }\n static registerMark(key: string, mark: MarkConstructor) {\n Factory._marks[key] = mark;\n }\n static registerRegion(key: string, region: IRegionConstructor) {\n Factory._regions[key] = region;\n }\n static registerTransform(key: string, transform: Transform) {\n Factory.transforms[key] = transform;\n }\n static registerLayout(key: string, layout: ILayoutConstructor) {\n Factory._layout[key] = layout;\n }\n static registerAnimation(key: string, animation: (params?: any, preset?: any) => MarkAnimationSpec) {\n Factory._animations[key] = animation;\n }\n static registerImplement(key: string, implement: (...args: any) => void) {\n Factory._implements[key] = implement;\n }\n static registerChartPlugin(key: string, plugin: IChartPluginConstructor) {\n Factory._chartPlugin[key] = plugin;\n }\n static registerComponentPlugin(key: string, plugin: IComponentPluginConstructor) {\n Factory._componentPlugin[key] = plugin;\n }\n\n static createChart(chartType: string, spec: any, options: IChartOption): IChart | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n return new ChartConstructor(spec, options);\n }\n\n static createChartSpecTransformer(\n chartType: string,\n option: IChartSpecTransformerOption\n ): IChartSpecTransformer | null {\n if (!Factory._charts[chartType]) {\n return null;\n }\n const ChartConstructor = Factory._charts[chartType];\n const ChartSpecTransformerConstructor = ChartConstructor.transformerConstructor;\n return new ChartSpecTransformerConstructor({\n seriesType: ChartConstructor.seriesType,\n ...option\n });\n }\n\n static createRegion(regionType: string, spec: any, options: IModelOption): IRegion | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n return new RegionConstructor(spec, options);\n }\n\n static createRegionSpecTransformer(\n regionType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._regions[regionType]) {\n return null;\n }\n const RegionConstructor = Factory._regions[regionType];\n const RegionSpecTransformerConstructor = RegionConstructor.transformerConstructor;\n return new RegionSpecTransformerConstructor(options);\n }\n\n static createSeries(seriesType: string, spec: any, options: ISeriesOption) {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n return new SeriesConstructor(spec, options);\n }\n\n static createSeriesSpecTransformer(\n seriesType: string,\n options: IBaseModelSpecTransformerOption\n ): IBaseModelSpecTransformer | null {\n if (!Factory._series[seriesType]) {\n return null;\n }\n const SeriesConstructor = Factory._series[seriesType];\n const SeriesSpecTransformerConstructor = SeriesConstructor.transformerConstructor;\n return new SeriesSpecTransformerConstructor(options);\n }\n\n static createMark(markType: string, name: string, options: IMarkOption) {\n if (!Factory._marks[markType]) {\n return null;\n }\n const MarkConstructor = Factory._marks[markType] as IMarkConstructor;\n const markInstance = new MarkConstructor(name, options);\n if (markInstance.type === MarkTypeEnum.group) {\n // group 目前关闭交互,不参与事件拾取\n markInstance.setMarkConfig({ interactive: false });\n }\n return markInstance;\n }\n\n static getComponents() {\n return Object.values(Factory._components);\n }\n\n static getComponentInKey(name: string) {\n return Factory._components[name].cmp;\n }\n\n static getLayout() {\n return Object.values(Factory._layout);\n }\n\n static getLayoutInKey(name: string) {\n return Factory._layout[name];\n }\n\n static getSeries() {\n return Object.values(Factory._series);\n }\n\n static getSeriesInType(type: string) {\n return Factory._series[type];\n }\n\n static getRegionInType(type: string) {\n return Factory._regions[type];\n }\n\n static getAnimationInKey(key: string) {\n return Factory._animations[key];\n }\n\n static getImplementInKey(key: string) {\n return Factory._implements[key];\n }\n\n static getSeriesMarkMap(seriesType: string): Partial> {\n if (!Factory._series[seriesType]) {\n return {};\n }\n return Factory._series[seriesType].mark;\n }\n\n static getChartPlugins() {\n return Object.values(Factory._chartPlugin);\n }\n\n static getComponentPlugins() {\n return Object.values(Factory._componentPlugin);\n }\n\n static getComponentPluginInType(type: string) {\n return Factory._componentPlugin[type];\n }\n\n static registerFormatter(func: typeof Factory['_formatter']) {\n this._formatter = func;\n }\n\n static getFormatter() {\n return this._formatter;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array } from '@visactor/vutils';\nimport type { IGlobalMarkThemeByName, IGlobalMarkThemeByType, ITheme } from '../../theme';\nimport { transformColorSchemeToStandardStruct } from '../../theme/color-scheme/util';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo } from '../../series/interface/common';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Factory } from '../../core/factory';\n\nexport function mergeTheme(target: Maybe, ...sources: Maybe[]): Maybe {\n return mergeSpec(transformThemeToMerge(target), ...sources.map(transformThemeToMerge));\n}\n\nfunction transformThemeToMerge(theme?: Maybe): Maybe {\n if (!theme) {\n return theme;\n }\n\n // 将色板转化为标准形式\n const colorScheme = transformColorSchemeToMerge(theme.colorScheme);\n\n return Object.assign({}, theme, {\n colorScheme,\n token: theme.token ?? {},\n series: Object.assign({}, theme.series)\n } as Partial);\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToMerge(colorScheme?: Maybe): Maybe {\n if (colorScheme) {\n colorScheme = Object.keys(colorScheme).reduce((scheme, key) => {\n const value = colorScheme[key];\n scheme[key] = transformColorSchemeToStandardStruct(value);\n return scheme;\n }, {} as IThemeColorScheme);\n }\n return colorScheme;\n}\n\n/** 将全局 mark 主题 merge 进系列主题 */\nexport function transformSeriesThemeToMerge(\n seriesTheme: any,\n seriesType: string,\n markByType: IGlobalMarkThemeByType,\n markByName: IGlobalMarkThemeByName\n): any {\n const seriesMarkInfoMap = Factory.getSeriesMarkMap(seriesType);\n\n if (!seriesMarkInfoMap) {\n return seriesTheme;\n }\n const newTheme: any = {};\n Object.values(seriesMarkInfoMap).forEach(({ type, name }) => {\n newTheme[name] = mergeSpec({}, markByType?.[array(type)[0]], markByName?.[name], seriesTheme?.[name]);\n });\n return {\n ...seriesTheme,\n ...newTheme\n };\n}\n","import type { DataSchemeItem, ProgressiveDataScheme } from '../interface';\n\n/** 标准色板 */\nexport const dataScheme: ProgressiveDataScheme = [\n // 第一档颜色(数据项 <= 10)\n {\n maxDomainLength: 10,\n scheme: [\n '#1664FF',\n '#1AC6FF',\n '#FF8A00',\n '#3CC780',\n '#7442D4',\n '#FFC400',\n '#304D77',\n '#B48DEB',\n '#009488',\n '#FF7DDA'\n ]\n },\n // 第二档颜色(数据项 > 10)\n {\n scheme: [\n '#1664FF',\n '#B2CFFF',\n '#1AC6FF',\n '#94EFFF',\n '#FF8A00',\n '#FFCE7A',\n '#3CC780',\n '#B9EDCD',\n '#7442D4',\n '#DDC5FA',\n '#FFC400',\n '#FAE878',\n '#304D77',\n '#8B959E',\n '#B48DEB',\n '#EFE3FF',\n '#009488',\n '#59BAA8',\n '#FF7DDA',\n '#FFCFEE'\n ]\n }\n];\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#ffffff',\n /** 图表边框色 */\n borderColor: '#e3e5e8',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(33,37,44,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#f1f2f5',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#f1f3f4',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#ffffff',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#0040ff',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#ffffff',\n\n /** 主要字色 */\n primaryFontColor: '#21252c',\n /** 次要字色 */\n secondaryFontColor: '#606773',\n /** 第三字色 */\n tertiaryFontColor: '#89909d',\n /** 轴标签字色 */\n axisLabelFontColor: '#89909d',\n /** 禁用字色 */\n disableFontColor: '#bcc1cb',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#ffffff',\n\n /** 轴网格线颜色 */\n axisGridColor: '#f1f2f5',\n /** 轴线颜色 */\n axisDomainColor: '#d9dde4',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#aeb5be',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#c9ced8',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#0040ff',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(0,0,0,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#21252c',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#f1f2f5',\n /** 标注线颜色 */\n markLineStrokeColor: '#606773',\n\n /** 危险色 */\n dangerColor: '#e33232',\n /** 警告色 */\n warningColor: '#ffc528',\n /** 成功色 */\n successColor: '#07a35a',\n /** 信息色 */\n infoColor: '#3073f2',\n\n /** 图例翻页器文字颜色 */\n discreteLegendPagerTextColor: 'rgb(51, 51, 51)',\n /** 图例翻页器按钮颜色 */\n discreteLegendPagerHandlerColor: 'rgb(47, 69, 84)',\n /** 图例翻页器按钮颜色(disable 态) */\n discreteLegendPagerHandlerDisableColor: 'rgb(170, 170, 170)',\n\n /** 占位圆颜色 */\n emptyCircleColor: '#e3e5e8',\n\n /** 线性进度条颜色 */\n linearProgressTrackColor: '#E7EBED'\n } as BuiltinColorPalette\n }\n};\n","import type { IAreaSeriesTheme } from '../../../../series/area/interface';\n\nexport const area: IAreaSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n },\n seriesMark: 'area'\n};\n","import type { IBarSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar: IBarSeriesTheme = {\n label: {\n visible: false,\n position: 'outside',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IBar3dSeriesTheme } from '../../../../series/bar/interface';\n\nexport const bar3d: IBar3dSeriesTheme = {\n bar3d: {\n style: {\n length: 3\n }\n },\n label: {\n visible: false,\n style: {\n offset: 12,\n position: 'outside'\n }\n }\n};\n","import type { ICircularProgressSeriesTheme } from '../../../../series/progress/circular/interface';\n\nexport const circularProgress: ICircularProgressSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fillOpacity: 0.2\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import type { IDotSeriesTheme } from '../../../../series/dot/interface';\n\nexport const dot: IDotSeriesTheme = {\n dot: {\n style: {\n size: 10,\n fillOpacity: 1\n }\n },\n symbol: {\n style: {\n size: 10\n }\n },\n title: {\n style: {\n textAlign: 'left',\n textBaseline: 'middle',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n },\n subTitle: {\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IFunnel3dSeriesTheme, IFunnelSeriesTheme } from '../../../../series/funnel/interface';\n\nconst getFunnelTheme = (is3d?: boolean): IFunnelSeriesTheme | IFunnel3dSeriesTheme => {\n const res: IFunnelSeriesTheme | IFunnel3dSeriesTheme = {\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n lineWidth: 2\n }\n },\n outerLabel: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'secondaryFontColor' }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'axisDomainColor' }\n }\n }\n },\n transformLabel: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'secondaryFontColor' },\n textBaseline: 'middle'\n }\n }\n };\n\n res[is3d ? 'transform3d' : 'transform'] = {\n style: {\n fill: { type: 'palette', key: 'axisGridColor' }\n }\n };\n\n return res;\n};\n\nexport const funnel: IFunnelSeriesTheme = getFunnelTheme();\nexport const funnel3d: IFunnel3dSeriesTheme = getFunnelTheme(true);\n","import type { IGaugePointerSeriesTheme } from '../../../../series/gauge';\n\nconst pointerPath =\n // eslint-disable-next-line max-len\n 'M-0.020059 -0.978425 C-0.018029 -0.9888053 -0.013378 -1 0 -1 C0.01342 -1 0.01812 -0.989146 0.0201 -0.978425 C0.02161 -0.9702819 0.0692 -0.459505 0.09486 -0.184807 C0.10298 -0.097849 0.1089 -0.034548 0.11047 -0.018339 C0.11698 0.04908 0.07373 0.11111 0.00002 0.11111 C-0.07369 0.11111 -0.117184 0.04991 -0.110423 -0.018339 C-0.103662 -0.086591 -0.022089 -0.9680447 -0.020059 -0.978425Z';\nconst circlePath =\n // eslint-disable-next-line max-len\n 'M1 0 C1 0.55228 0.55228 1 0 1 C-0.552285 1 -1 0.55228 -1 0 C-1 -0.552285 -0.552285 -1 0 -1 C0.55228 -1 1 -0.552285 1 0Z';\n\nexport const gaugePointer: IGaugePointerSeriesTheme = {\n pointer: {\n type: 'path',\n width: 0.4,\n height: 0.4,\n style: {\n path: pointerPath\n }\n },\n pin: {\n width: 0.025,\n height: 0.025,\n style: {\n path: circlePath,\n fill: '#888'\n }\n },\n pinBackground: {\n width: 0.06,\n height: 0.06,\n style: {\n path: circlePath,\n fill: '#ddd'\n }\n }\n};\n","export const PREFIX = '__VCHART';\n\nexport const DEFAULT_CHART_WIDTH = 500;\nexport const DEFAULT_CHART_HEIGHT = 500;\n","import { PREFIX } from './base';\n\nexport const ARC_TRANSFORM_VALUE = `${PREFIX}_ARC_TRANSFORM_VALUE`;\nexport const ARC_RATIO = `${PREFIX}_ARC_RATIO`;\nexport const ARC_START_ANGLE = `${PREFIX}_ARC_START_ANGLE`;\nexport const ARC_END_ANGLE = `${PREFIX}_ARC_END_ANGLE`;\nexport const ARC_K = `${PREFIX}_ARC_K`;\nexport const ARC_MIDDLE_ANGLE = `${PREFIX}_ARC_MIDDLE_ANGLE`;\nexport const ARC_QUADRANT = `${PREFIX}_ARC_QUADRANT`;\nexport const ARC_RADIAN = `${PREFIX}_ARC_RADIAN`;\n\nexport const POLAR_START_RADIAN = -Math.PI / 2;\nexport const POLAR_END_RADIAN = (3 * Math.PI) / 2;\n\nexport const POLAR_START_ANGLE = -90;\nexport const POLAR_END_ANGLE = 270;\n\nexport const POLAR_DEFAULT_RADIUS = 0.6;\n","import type { ISeriesTheme } from '../../../../series/interface';\nimport { area } from './area';\nimport { bar } from './bar';\nimport { bar3d } from './bar3d';\nimport { circularProgress } from './circular-progress';\nimport { dot } from './dot';\nimport { funnel, funnel3d } from './funnel';\nimport { gauge } from './gauge';\nimport { gaugePointer } from './gauge-pointer';\nimport { line } from './line';\nimport { linearProgress } from './linear-progress';\nimport { link } from './link';\nimport { map } from './map';\nimport { pie } from './pie';\nimport { pie3d } from './pie3d';\nimport { radar } from './radar';\nimport { scatter } from './scatter';\nimport { waterfall } from './waterfall';\nimport { wordCloud, wordCloud3d } from './word-cloud';\nimport { treemap } from './treemap';\nimport { sunburst } from './sunburst';\nimport { rangeColumn } from './rangeColumn';\nimport { circlePacking } from './circle-packing';\nimport { heatmap } from './heatmap';\nimport { sankey } from './sankey';\nimport { rose } from './rose';\nimport { boxPlot } from './box-plot';\nimport { correlation } from './correlation';\nimport { liquid } from './liquid';\nimport { venn } from './venn';\nimport { mosaic } from './mosaic';\n\nexport const series: ISeriesTheme = {\n scatter,\n line,\n area,\n bar,\n bar3d,\n pie,\n pie3d,\n map,\n radar,\n dot,\n link,\n wordCloud,\n wordCloud3d,\n funnel,\n funnel3d,\n linearProgress,\n circularProgress,\n waterfall,\n gauge,\n gaugePointer,\n treemap,\n sunburst,\n rangeColumn,\n circlePacking,\n heatmap,\n sankey,\n rose,\n boxPlot,\n correlation,\n liquid,\n venn,\n mosaic\n};\n","import type { IScatterSeriesTheme } from '../../../../series/scatter/interface';\n\nexport const scatter: IScatterSeriesTheme = {\n point: {\n style: {\n size: 8,\n symbolType: 'circle',\n lineWidth: 0,\n fillOpacity: 0.8\n }\n },\n label: {\n visible: false,\n offset: 5,\n position: 'top',\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { ILineSeriesTheme } from '../../../../series/line/interface';\n\nexport const line: ILineSeriesTheme = {\n label: {\n visible: false,\n position: 'top',\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { IPieSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie: IPieSeriesTheme = {\n outerRadius: 0.6,\n pie: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n interactive: true,\n position: 'outside',\n style: {\n fontWeight: 'normal',\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1\n }\n },\n innerLabel: {\n style: {\n lineWidth: 2\n }\n },\n emptyCircle: {\n style: {\n fill: { type: 'palette', key: 'emptyCircleColor' },\n fillOpacity: 1\n }\n }\n};\n","import type { IPie3dSeriesTheme } from '../../../../series/pie/interface';\n\nexport const pie3d: IPie3dSeriesTheme = {\n outerRadius: 0.6,\n pie3d: {\n style: {\n height: 10,\n fillOpacity: 1\n }\n },\n label: {\n visible: false,\n interactive: true,\n position: 'outside'\n }\n};\n","import type { IMapSeriesTheme } from '../../../../series/map/interface';\n\nexport const map: IMapSeriesTheme = {\n defaultFillColor: '#f3f3f3',\n area: {\n style: {\n lineWidth: 0.5,\n strokeOpacity: 1,\n stroke: 'black',\n fillOpacity: 1\n }\n },\n label: {\n interactive: false,\n style: {\n fontSize: { type: 'token', key: 'l6FontSize' },\n lineHeight: { type: 'token', key: 'l6LineHeight' },\n textBaseline: 'middle',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IRadarSeriesTheme } from '../../../../series/radar/interface';\n\nexport const radar: IRadarSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n point: {\n style: {\n symbolType: 'circle'\n }\n }\n};\n","import type { ILinkSeriesTheme } from '../../../../series/link/interface';\n\nexport const link: ILinkSeriesTheme = {\n arrow: {\n style: {\n size: 10\n }\n }\n};\n","import type { IWordCloudSeriesTheme, IWordCloud3dSeriesTheme } from '../../../../series/word-cloud/interface';\n\nconst getWordCloudTheme = (): IWordCloudSeriesTheme | IWordCloud3dSeriesTheme => {\n return {\n word: {\n padding: 1,\n style: {\n textAlign: 'center',\n textBaseline: 'alphabetic'\n }\n }\n };\n};\n\nexport const wordCloud: IWordCloudSeriesTheme = getWordCloudTheme();\nexport const wordCloud3d: IWordCloud3dSeriesTheme = getWordCloudTheme();\n","import type { ILinearProgressSeriesTheme } from '../../../../series/progress/linear/interface';\n\nexport const linearProgress: ILinearProgressSeriesTheme = {\n bandWidth: 30,\n progress: {\n style: {\n fillOpacity: 1\n }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'linearProgressTrackColor' },\n fillOpacity: 1\n }\n }\n};\n","import type { IWaterfallSeriesTheme } from '../../../../series/waterfall/interface';\n\nexport const waterfall: IWaterfallSeriesTheme = {\n seriesFieldName: {\n total: 'total',\n increase: 'increase',\n decrease: 'decrease'\n },\n leaderLine: {\n style: {\n stroke: 'black',\n lineWidth: 1,\n lineDash: [4, 4]\n }\n },\n stackLabel: {\n visible: true,\n offset: 12,\n position: 'withChange',\n style: {\n fill: 'black',\n fontSize: { type: 'token', key: 'l4FontSize' }\n }\n },\n label: {\n visible: false,\n offset: 12,\n position: 'inside',\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { IGaugeSeriesTheme } from '../../../../series/gauge';\n\nexport const gauge: IGaugeSeriesTheme = {\n outerRadius: 0.8,\n innerRadius: 0.6,\n padAngle: 1.146,\n segment: {\n style: {\n fillOpacity: 1\n }\n },\n tickMask: {\n visible: false,\n angle: 3,\n offsetAngle: 0,\n forceAlign: true\n }\n};\n","import type { ITreemapSeriesTheme } from '../../../../series/treemap/interface';\n\nexport const treemap: ITreemapSeriesTheme = {\n gapWidth: 1,\n nodePadding: [5],\n nonLeaf: {\n visible: false,\n style: {\n fillOpacity: 0.5\n }\n },\n label: {\n style: {\n fill: 'white',\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n },\n nonLeafLabel: {\n padding: 24,\n style: {\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n textBaseline: 'middle',\n textAlign: 'center'\n }\n }\n};\n","import { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../../../constant/polar';\nimport type { ISunburstSeriesTheme } from '../../../../series/sunburst/interface';\n\nexport const sunburst: ISunburstSeriesTheme = {\n innerRadius: 0,\n outerRadius: 1,\n startAngle: POLAR_START_ANGLE,\n endAngle: POLAR_END_ANGLE,\n gap: 0,\n labelLayout: {\n align: 'center',\n offset: 0,\n rotate: 'radial'\n },\n sunburst: {\n style: {\n stroke: { type: 'palette', key: 'backgroundColor' },\n fillOpacity: 1,\n cursor: 'pointer'\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IRangeColumnSeriesTheme } from '../../../../series/range-column/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { minMaxPositionEnum } from '../../../../series/range-column/interface';\n\nexport const rangeColumn: IRangeColumnSeriesTheme = {\n label: {\n visible: false,\n offset: 5,\n position: 'inside',\n style: {\n lineWidth: 2,\n fill: { type: 'palette', key: 'axisMarkerFontColor' }\n },\n minLabel: {\n position: minMaxPositionEnum.end\n },\n maxLabel: {\n position: minMaxPositionEnum.start\n }\n }\n};\n","import type { ICirclePackingSeriesTheme } from '../../../../series/circle-packing/interface';\n\nexport const circlePacking: ICirclePackingSeriesTheme = {\n layoutPadding: 5,\n circlePacking: {\n visible: true,\n style: {\n cursor: 'pointer',\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n label: {\n visible: true,\n style: {\n cursor: 'pointer',\n fill: 'black',\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IHeatmapSeriesTheme } from '../../../../series/heatmap/interface';\n\nexport const heatmap: IHeatmapSeriesTheme = {\n cell: {\n style: {\n shape: 'square',\n fillOpacity: 1\n }\n },\n cellBackground: {\n visible: false\n }\n};\n","import type { ISankeySeriesTheme } from '../../../../series/sankey/interface';\n\nexport const sankey: ISankeySeriesTheme = {\n link: {\n style: {\n // lineWidth: 0,\n fillOpacity: 0.15,\n round: true\n }\n }\n};\n","import type { IRoseSeriesTheme } from '../../../../series/rose/interface';\n\nexport const rose: IRoseSeriesTheme = {\n rose: {\n style: {\n fillOpacity: 1\n }\n },\n label: {\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' },\n textAlign: 'center',\n textBaseline: 'middle'\n }\n }\n};\n","import type { IBoxPlotSeriesTheme } from '../../../../series/box-plot/interface';\n\nexport const boxPlot: IBoxPlotSeriesTheme = {\n boxPlot: {\n style: {\n lineWidth: 1\n }\n },\n label: {\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { ICorrelationSeriesTheme } from '../../../../series/correlation/interface';\n\nexport const correlation: ICorrelationSeriesTheme = {\n centerLabel: {\n visible: true,\n position: 'center',\n style: {\n fill: '#fff',\n text: ''\n }\n },\n label: {\n visible: true,\n position: 'bottom',\n style: {\n fill: '#000'\n }\n }\n};\n","import type { ILiquidSeriesTheme } from '../../../../series/liquid/interface';\n\nexport const liquid: ILiquidSeriesTheme = {\n outlinePadding: 10,\n liquidBackground: {\n style: {\n lineWidth: 0,\n fillOpacity: 0.2\n }\n },\n liquidOutline: {\n style: {\n lineWidth: 2\n }\n }\n};\n","import type { IVennSeriesTheme } from '../../../../series/venn/interface';\n\nexport const venn: IVennSeriesTheme = {\n circle: {\n style: {\n opacity: 0.8\n },\n state: {\n hover: {\n opacity: 1\n }\n }\n },\n overlap: {\n style: {\n opacity: 0.8\n },\n state: {\n hover: {\n opacity: 1,\n stroke: 'white',\n lineWidth: 2\n }\n }\n },\n label: {\n visible: true,\n style: {\n fill: 'white',\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' }\n }\n },\n overlapLabel: {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'center',\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' }\n }\n }\n};\n","import type { IMosaicSeriesTheme } from '../../../../series/mosaic/interface';\n\nexport const mosaic: IMosaicSeriesTheme = {\n label: {\n visible: false,\n position: 'center',\n style: {\n lineWidth: 2,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n\n bar: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n }\n};\n","import type { IGlobalMarkThemeByName, IGlobalMarkThemeByType } from '../../interface';\n\nexport const markByType: IGlobalMarkThemeByType = {\n text: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport const markByName: IGlobalMarkThemeByName = {\n label: {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fillOpacity: 1,\n lineJoin: 'bevel'\n }\n },\n area: {\n style: {\n fillOpacity: 0.2\n }\n },\n line: {\n style: {\n lineWidth: 2,\n lineCap: 'round',\n lineJoin: 'round'\n }\n },\n point: {\n style: {\n size: 8,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 1,\n fillOpacity: 1\n }\n },\n word: {\n style: {\n fontWeight: null,\n fontSize: null\n }\n },\n fillingWord: {\n style: {\n fontWeight: null,\n fontSize: null\n }\n },\n sunburst: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n circlePacking: {\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'backgroundColor' }\n }\n },\n funnel3d: {\n style: {\n stroke: false\n }\n },\n barBackground: {\n visible: false,\n style: {\n fill: { type: 'palette', key: 'primaryFontColor', a: 0.06 },\n stroke: 'transparent'\n }\n }\n};\n","import type { IBandAxisTheme } from '../../../../../component/axis';\n\nexport const axisBand: IBandAxisTheme = {\n domainLine: {\n visible: true\n },\n grid: {\n visible: false\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: true\n },\n subTick: {\n visible: false\n }\n};\n","import type { ICartesianAxisCommonTheme, ICartesianAxisUnit } from '../../../../../component/axis/cartesian/interface';\n\nconst getUnitTheme = (): ICartesianAxisUnit => {\n return {\n visible: false,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n };\n};\n\nexport const axisX: ICartesianAxisCommonTheme = {\n label: {\n space: 8\n },\n title: {\n space: 8\n },\n maxHeight: '30%',\n unit: getUnitTheme()\n};\n\nexport const axisY: ICartesianAxisCommonTheme = {\n label: {\n space: 12,\n autoLimit: true\n },\n title: {\n space: 12,\n autoRotate: true\n },\n maxWidth: '30%',\n unit: getUnitTheme()\n};\n\nexport const axisZ: ICartesianAxisCommonTheme = {\n ...axisX,\n label: {\n space: 0\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\n\nexport const commonAxis: IAxisCommonTheme = {\n domainLine: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n grid: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: []\n }\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisGridColor' },\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n },\n tick: {\n visible: true,\n inside: false,\n tickSize: 4,\n alignWithLabel: true,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n tickSize: 2,\n style: {\n lineWidth: 1,\n stroke: { type: 'palette', key: 'axisDomainColor' },\n strokeOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 10,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'axisLabelFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n title: {\n space: 10,\n padding: 0,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n fill: { type: 'palette', key: 'secondaryFontColor' },\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n","import type { IAxisCommonTheme } from '../../../../../component/axis';\n\nexport const axisLinear: IAxisCommonTheme = {\n domainLine: {\n visible: false\n },\n grid: {\n visible: true\n },\n subGrid: {\n visible: false\n },\n tick: {\n visible: false\n },\n subTick: {\n visible: false\n }\n};\n","import type { IPolarAxisCommonTheme } from '../../../../../component/axis/polar/interface/theme';\n\nexport const axisRadius: IPolarAxisCommonTheme = {\n grid: {\n smooth: true,\n visible: true\n },\n subGrid: {\n smooth: true,\n visible: false\n }\n};\n\nexport const axisAngle: IPolarAxisCommonTheme = {\n grid: {\n visible: true,\n style: {\n lineDash: [6, 6]\n }\n },\n label: {\n space: 5\n }\n};\n","import type { IBrushTheme } from '../../../../component/brush';\n\nexport const brush: IBrushTheme = {\n style: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n lineWidth: 2\n },\n brushMode: 'single',\n brushType: 'rect',\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 0\n};\n","import type { IDataZoomTheme } from '../../../../component/data-zoom';\n\n// eslint-disable-next-line max-len\nconst DataZoomHandlerSymbolType = `M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\nC-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1v-2.6\nC0.3-1.4,0.3-1.4,0.3-1.4z;`;\n\nconst getHandlerTheme = (): IDataZoomTheme['startHandler'] => {\n return {\n style: {\n symbolType: DataZoomHandlerSymbolType,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n scaleX: 1.2,\n scaleY: 1.2,\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n lineWidth: 1\n }\n };\n};\n\nconst getTextTheme = () => {\n return {\n padding: 8,\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n }\n };\n};\n\nconst getBackgroundChartTheme = (visible: boolean) => {\n return {\n area: {\n style: {\n visible,\n stroke: false,\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n }\n },\n line: {\n style: {\n visible,\n stroke: { type: 'palette', key: 'dataZoomChartColor' },\n lineWidth: 1\n }\n }\n };\n};\n\nexport const dataZoom: IDataZoomTheme = {\n padding: [12, 0],\n showDetail: 'auto',\n brushSelect: false,\n middleHandler: {\n visible: false,\n background: {\n size: 6,\n style: {\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n cornerRadius: 2\n }\n },\n icon: {\n style: {\n size: 4,\n fill: { type: 'palette', key: 'sliderHandleColor' },\n stroke: { type: 'palette', key: 'dataZoomHandleStrokeColor' },\n symbolType:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n lineWidth: 0.5\n }\n }\n },\n background: {\n size: 20,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' },\n lineWidth: 0\n }\n },\n selectedBackground: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.1,\n outerBorder: {\n stroke: { type: 'palette', key: 'sliderTrackColor' },\n strokeOpacity: 0.2,\n distance: -0.5,\n lineWidth: 1\n }\n }\n },\n selectedBackgroundChart: getBackgroundChartTheme(false),\n startHandler: getHandlerTheme(),\n endHandler: getHandlerTheme(),\n startText: getTextTheme(),\n endText: getTextTheme(),\n backgroundChart: getBackgroundChartTheme(true)\n};\n","import type { IIndicatorTheme } from '../../../../component/indicator/interface';\n\nconst getTextStyle = (fontSizeKey: string, fillKey: string) => {\n return {\n fontSize: { type: 'token', key: fontSizeKey },\n fill: { type: 'palette', key: fillKey },\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n };\n};\n\nexport const indicator: IIndicatorTheme = {\n title: {\n visible: true,\n autoLimit: false,\n autoFit: false,\n style: getTextStyle('l1FontSize', 'primaryFontColor')\n },\n content: {\n visible: true,\n style: getTextStyle('l2FontSize', 'tertiaryFontColor')\n }\n};\n","import type { IContinuousLegendTheme, TextAttribute } from '../../../../../component/legend';\n\nconst getTextTheme = (): TextAttribute => {\n return {\n style: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' }\n },\n space: 6\n };\n};\n\nexport const DEFAULT_CONTINUOUS_LEGEND_THEME: IContinuousLegendTheme = {\n orient: 'right',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n space: 12\n },\n handler: {\n visible: true\n },\n startText: getTextTheme(),\n endText: getTextTheme(),\n handlerText: getTextTheme()\n};\n","import type { IColorLegendTheme, IContinuousLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst getColorLegendTheme = (horizontal?: boolean): IContinuousLegendTheme => {\n const rail: IContinuousLegendTheme['rail'] = {\n width: 200,\n height: 8,\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n };\n\n if (horizontal) {\n rail.width = 200;\n rail.height = 8;\n } else {\n rail.width = 8;\n rail.height = 200;\n }\n\n return {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n rail,\n handler: {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: '#ffffff'\n },\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n }\n }\n };\n};\n\nexport const colorLegend: IColorLegendTheme = {\n horizontal: getColorLegendTheme(true),\n vertical: getColorLegendTheme(false)\n};\n","import type { IDiscreteLegendTheme } from '../../../../../component/legend';\n\nexport const discreteLegend: IDiscreteLegendTheme = {\n orient: 'bottom',\n position: 'middle',\n padding: [16, 24],\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n fill: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'normal'\n },\n space: 12\n },\n pager: {\n textStyle: {\n fill: { type: 'palette', key: 'discreteLegendPagerTextColor' }\n },\n handler: {\n style: {\n fill: { type: 'palette', key: 'discreteLegendPagerHandlerColor' }\n },\n state: {\n disable: {\n fill: { type: 'palette', key: 'discreteLegendPagerHandlerDisableColor' }\n }\n }\n }\n },\n item: {\n visible: true,\n spaceCol: 10,\n spaceRow: 6,\n padding: 2,\n background: {\n state: {\n selectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n },\n unSelectedHover: {\n fill: { type: 'palette', key: 'hoverBackgroundColor' }\n }\n }\n },\n shape: {\n space: 6,\n style: {\n lineWidth: 0,\n fillOpacity: 1,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fillOpacity: 0.2,\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n },\n label: {\n space: 6,\n style: {\n fill: { type: 'palette', key: 'secondaryFontColor', default: '#89909d' },\n fontSize: { type: 'token', key: 'l5FontSize' },\n lineHeight: { type: 'token', key: 'l5LineHeight' },\n\n opacity: 1 // 覆盖 vrender-components 里的默认值\n },\n state: {\n unSelected: {\n fill: { type: 'palette', key: 'disableFontColor' },\n opacity: 1 // 覆盖 vrender-components 里的默认值\n }\n }\n }\n },\n allowAllCanceled: false\n};\n","import type { IContinuousLegendSpec, ISizeLegendCommonTheme, ISizeLegendTheme } from '../../../../../component/legend';\nimport { DEFAULT_CONTINUOUS_LEGEND_THEME } from './continuous';\n\nconst getSizeLegendTheme = (horizontal?: boolean): ISizeLegendCommonTheme => {\n const rail: IContinuousLegendSpec['rail'] = {\n style: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n }\n };\n if (horizontal) {\n rail.width = 200;\n rail.height = 4;\n } else {\n rail.height = 200;\n rail.width = 4;\n }\n\n return {\n ...DEFAULT_CONTINUOUS_LEGEND_THEME,\n sizeBackground: {\n fill: { type: 'palette', key: 'dataZoomChartColor' }\n },\n track: {\n style: {\n fill: { type: 'palette', key: 'sliderTrackColor', a: 0.8 }\n }\n },\n rail,\n handler: {\n style: {\n symbolType: 'circle',\n lineWidth: 0,\n outerBorder: {\n lineWidth: 2,\n distance: 0.8,\n stroke: { type: 'palette', key: 'sliderTrackColor' }\n },\n fill: { type: 'palette', key: 'sliderHandleColor' }\n /*\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' }\n */\n }\n }\n };\n};\n\nexport const sizeLegend: ISizeLegendTheme = {\n horizontal: getSizeLegendTheme(true),\n vertical: getSizeLegendTheme(false)\n};\n","import type { IMapLabelTheme } from '../../../../component/map-label';\nimport type { ITextMarkSpec } from '../../../../typings/visual';\n\nconst getLabelTheme = (): {\n visible?: boolean;\n style?: ITextMarkSpec;\n} => {\n return {\n visible: true,\n style: {\n textBaseline: 'middle',\n textAlign: 'left',\n fill: 'black',\n fontSize: { type: 'token', key: 'l6FontSize' }\n }\n };\n};\n\nexport const mapLabel: IMapLabelTheme = {\n visible: true,\n offset: 12,\n position: 'top',\n space: 10,\n nameLabel: getLabelTheme(),\n valueLabel: getLabelTheme(),\n background: {\n visible: true,\n padding: { top: 4, bottom: 4, left: 6, right: 6 },\n style: {\n cornerRadius: 2,\n lineWidth: 1,\n fill: 'white',\n stroke: 'grey'\n }\n },\n leader: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: 'red'\n }\n }\n};\n","import type { IMarkerLabelSpec } from '../../../../component/marker/interface';\n\nexport const getCommonLabelTheme = (): IMarkerLabelSpec => {\n return {\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fontWeight: 'normal',\n fontStyle: 'normal',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n labelBackground: {\n padding: {\n top: 2,\n bottom: 2,\n right: 4,\n left: 4\n },\n style: {\n cornerRadius: 3,\n fill: { type: 'palette', key: 'markLabelBackgroundColor' }\n }\n }\n };\n};\n","import type { IMarkAreaTheme } from '../../../../component/marker/mark-area/interface';\nimport { getCommonLabelTheme } from './mark';\n\nexport const markArea: IMarkAreaTheme = {\n area: {\n style: {\n fill: { type: 'palette', key: 'axisDomainColor', a: 0.25 }\n }\n },\n label: getCommonLabelTheme()\n};\n","import type { IMarkerSymbol } from '../../../../component/marker/interface';\nimport type { IMarkLineTheme } from '../../../../component/marker/mark-line/interface';\nimport { getCommonLabelTheme } from './mark';\n\nconst getSymbolTheme = (visible?: boolean): IMarkerSymbol => {\n return {\n visible,\n symbolType: 'triangle',\n size: 10,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n };\n};\n\nconst labelTheme = getCommonLabelTheme();\nlabelTheme.refY = 5;\n\nexport const markLine: IMarkLineTheme = {\n line: {\n style: {\n lineDash: [3, 3],\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n },\n startSymbol: getSymbolTheme(false),\n endSymbol: getSymbolTheme(true),\n label: labelTheme\n};\n","import type { IMarkPointTheme } from '../../../../component/marker/mark-point/interface';\n\nexport const markPoint: IMarkPointTheme = {\n itemLine: {\n decorativeLine: {\n visible: false\n },\n startSymbol: {\n size: 5,\n visible: true,\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n endSymbol: {\n style: {\n fill: { type: 'palette', key: 'markLineStrokeColor' },\n stroke: null,\n lineWidth: 0\n }\n },\n line: {\n style: {\n stroke: { type: 'palette', key: 'markLineStrokeColor' }\n }\n }\n },\n itemContent: {\n offsetY: -50\n }\n};\n","import type { BuiltinTokenMap } from './interface';\n\n/** 标准色板 */\nexport const token: BuiltinTokenMap = {\n fontFamily:\n // eslint-disable-next-line max-len\n 'PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol',\n fontSize: 14,\n\n l1FontSize: 32,\n l1LineHeight: '150%',\n\n l2FontSize: 20,\n l2LineHeight: '140%',\n\n l3FontSize: 16,\n l3LineHeight: '150%',\n\n l4FontSize: 14,\n l4LineHeight: '150%',\n\n l5FontSize: 12,\n l5LineHeight: '130%',\n\n l6FontSize: 10,\n l6LineHeight: '120%'\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\nimport { series } from '../common/series';\nimport { markByName, markByType } from '../common/mark';\nimport { component } from '../common/component';\nimport { token } from '../../token';\n\nexport const lightTheme: ITheme = {\n name: 'light',\n background: { type: 'palette', key: 'backgroundColor' },\n padding: 20,\n fontFamily: { type: 'token', key: 'fontFamily' },\n colorScheme,\n token,\n mark: markByType,\n markByName,\n series,\n component,\n animationThreshold: 2000\n};\n","import type { IComponentTheme } from '../../../../component/interface';\nimport { axisBand } from './axis/band-axis';\nimport { axisX, axisY, axisZ } from './axis/cartesian-axis';\nimport { commonAxis } from './axis/common-axis';\nimport { axisLinear } from './axis/linear-axis';\nimport { axisAngle, axisRadius } from './axis/polar-axis';\nimport { brush } from './brush';\nimport { crosshair } from './crosshair';\nimport { dataZoom } from './data-zoom';\nimport { indicator } from './indicator';\nimport { colorLegend } from './legend/color-legend';\nimport { discreteLegend } from './legend/discrete-legend';\nimport { sizeLegend } from './legend/size-legend';\nimport { mapLabel } from './map-label';\nimport { markArea } from './mark-area';\nimport { markLine } from './mark-line';\nimport { markPoint } from './mark-point';\nimport { player } from './player';\nimport { title } from './title';\nimport { tooltip } from './tooltip';\nimport { poptip } from './poptip';\nimport { totalLabel } from './total-label';\nimport { scrollBar } from './scroll-bar';\n\nexport const component: IComponentTheme = {\n discreteLegend,\n colorLegend,\n sizeLegend,\n axis: commonAxis,\n axisBand,\n axisLinear,\n axisX,\n axisY,\n axisZ,\n axisAngle,\n axisRadius,\n markLine: markLine,\n markArea: markArea,\n markPoint: markPoint,\n polarMarkLine: markLine,\n polarMarkArea: markArea,\n polarMarkPoint: markPoint,\n geoMarkPoint: markPoint,\n tooltip,\n dataZoom,\n crosshair,\n player,\n brush,\n indicator,\n title,\n mapLabel,\n poptip,\n totalLabel,\n scrollBar\n};\n","import type { ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip/interface';\nimport type { IColorKey } from '../../../color-scheme';\n\nconst getTitleLabelTheme = (): ITooltipTextTheme => {\n return {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n\n fontColor: { type: 'palette', key: 'primaryFontColor' },\n fontWeight: 'bold',\n textBaseline: 'middle',\n spacing: 0\n };\n};\n\nexport const tooltip: ITooltipTheme = {\n offset: {\n x: 10,\n y: 10\n },\n panel: {\n padding: {\n top: 10,\n left: 10,\n right: 10,\n bottom: 10\n },\n backgroundColor: { type: 'palette', key: 'popupBackgroundColor' },\n border: {\n color: { type: 'palette', key: 'popupBackgroundColor' },\n width: 0,\n radius: 3\n },\n shadow: {\n x: 0,\n y: 4,\n blur: 12,\n spread: 0,\n color: { type: 'palette', key: 'shadowColor' }\n }\n },\n spaceRow: 6,\n titleLabel: getTitleLabelTheme(),\n shape: {\n size: 8,\n spacing: 6\n },\n keyLabel: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n\n fontColor: { type: 'palette', key: 'secondaryFontColor' },\n textBaseline: 'middle',\n spacing: 26\n },\n valueLabel: getTitleLabelTheme()\n};\n","import type { IPlayerTheme } from '../../../../component/player';\n\nconst getDirectionTheme = (position: 'start' | 'end'): IPlayerTheme['controller']['forward'] => {\n return {\n order: 0,\n space: 10,\n position: 'start',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n };\n};\n\nconst getPlayTheme = (): IPlayerTheme['controller']['pause'] => {\n return {\n order: 0,\n space: 10,\n position: 'start',\n style: {\n size: 12,\n fill: { type: 'palette', key: 'playerControllerColor' },\n fillOpacity: 0.8\n }\n };\n};\n\nexport const player: IPlayerTheme = {\n visible: true,\n position: 'start',\n padding: {\n top: 20,\n bottom: 20\n },\n slider: {\n space: 10,\n trackStyle: {\n fill: { type: 'palette', key: 'sliderTrackColor' },\n fillOpacity: 0.8\n },\n railStyle: {\n fill: { type: 'palette', key: 'sliderRailColor' }\n },\n handlerStyle: {\n size: 15,\n stroke: { type: 'palette', key: 'backgroundColor' },\n lineWidth: 2,\n fill: { type: 'palette', key: 'playerControllerColor' }\n }\n },\n controller: {\n start: getPlayTheme(),\n pause: getPlayTheme(),\n backward: getDirectionTheme('start'),\n forward: getDirectionTheme('end')\n }\n};\n","import type { ITitleTheme } from '../../../../component/title/interface';\n\nexport const title: ITitleTheme = {\n padding: {\n top: 4,\n bottom: 20\n },\n textStyle: {\n fontSize: { type: 'token', key: 'l3FontSize' },\n lineHeight: { type: 'token', key: 'l3LineHeight' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n subtextStyle: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n lineHeight: { type: 'token', key: 'l4LineHeight' },\n fill: { type: 'palette', key: 'tertiaryFontColor' }\n }\n};\n","import type { IPoptipTheme } from '../../../../component/poptip/interface';\n\nexport const poptip: IPoptipTheme = {\n visible: true,\n position: 'auto',\n padding: 8,\n titleStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fontWeight: 'bold',\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n contentStyle: {\n fontSize: { type: 'token', key: 'l5FontSize' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n },\n panel: {\n visible: true,\n fill: { type: 'palette', key: 'popupBackgroundColor' },\n cornerRadius: 3,\n lineWidth: 0,\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: { type: 'palette', key: 'shadowColor' },\n size: 0,\n space: 12\n }\n};\n","import type { ITotalLabelTheme } from '../../../../component/label';\n\nexport const totalLabel: ITotalLabelTheme = {\n visible: false,\n offset: 5,\n overlap: {\n clampForce: true,\n strategy: []\n },\n smartInvert: false,\n animation: false,\n style: {\n fontSize: { type: 'token', key: 'l4FontSize' },\n fill: { type: 'palette', key: 'primaryFontColor' }\n }\n};\n","import type { IScrollBarTheme } from '../../../../component/data-zoom';\n\nconst getSlider = () => {\n return {\n style: {\n fill: { type: 'palette', key: 'scrollBarSliderColor' }\n }\n };\n};\n\nexport const scrollBar: IScrollBarTheme = {\n horizontal: {\n height: 10,\n slider: getSlider()\n },\n vertical: {\n width: 10,\n slider: getSlider()\n }\n};\n","import type { ITokenKey, TokenMap } from './interface';\n\n/**\n * 根据 tokenMap 和 token 索引查询 token 值\n */\nexport function queryToken(tokenMap: TokenMap, tokenKey: ITokenKey): T | undefined {\n if (tokenMap && tokenKey.key in tokenMap) {\n return tokenMap[tokenKey.key];\n }\n return tokenKey.default;\n}\n\nexport function isTokenKey(obj: any): obj is ITokenKey {\n return obj && (obj as ITokenKey).type === 'token' && !!(obj as ITokenKey).key;\n}\n","import { isPlainObject } from '@visactor/vutils';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport { getActualColor, isColorKey } from '../../theme/color-scheme/util';\nimport type { ISeriesSpec } from '../../typings';\nimport type { TokenMap } from '../../theme/token';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTokenKey, queryToken } from '../../theme/token';\nimport type { ITheme } from '../../theme';\n\nconst IGNORE_KEYS = ['animationThreshold', 'colorScheme', 'name', 'padding'];\n\nexport function preprocessTheme(\n obj: any,\n colorScheme?: IThemeColorScheme,\n tokenMap?: TokenMap,\n seriesSpec?: ISeriesSpec\n): any {\n if (!obj) {\n return obj;\n }\n if (!colorScheme) {\n colorScheme = (obj as ITheme).colorScheme;\n }\n if (!tokenMap) {\n tokenMap = (obj as ITheme).token;\n }\n const newObj = {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n if (IGNORE_KEYS.includes(key)) {\n newObj[key] = value;\n } else if (isPlainObject(value)) {\n if (isColorKey(value)) {\n // 查询、替换语义化颜色\n newObj[key] = getActualColor(value, colorScheme, seriesSpec);\n } else if (isTokenKey(value)) {\n // 查询、替换语义化 token\n newObj[key] = queryToken(tokenMap, value);\n } else {\n newObj[key] = preprocessTheme(value, colorScheme, tokenMap, seriesSpec);\n }\n } else {\n newObj[key] = value;\n }\n });\n\n return newObj;\n}\n","export * from './light';\nexport * from './dark';\n\nimport { isString } from '@visactor/vutils';\nimport { mergeTheme } from '../../util/theme/merge-theme';\nimport type { ITheme } from '../interface';\nimport { lightTheme } from './light';\n// import { darkTheme } from './dark';\nimport { preprocessTheme } from '../../util/theme/preprocess';\n\n/** 声明内置主题(含 token 未转换) */\nexport const builtinThemes: Record = {\n [lightTheme.name]: lightTheme\n // [darkTheme.name]: darkTheme\n};\n/** 默认主题名称 */\nexport const defaultThemeName = lightTheme.name;\n\n/** 全局主题 map (包含用户新注册的主题)(含 token 未转换) */\nexport const themes: Map = new Map(Object.keys(builtinThemes).map(key => [key, builtinThemes[key]]));\n\n/** 全局已将 token 转换的主题 map (包含用户新注册的主题) */\nconst transformedThemes: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, preprocessTheme(builtinThemes[key])] as [string, ITheme])\n);\n\n/** 主题 map 中的元素是否 merge 过默认主题 (非默认主题的其他内置主题没有 merge 过默认主题) */\nexport const hasThemeMerged: Map = new Map(\n Object.keys(builtinThemes).map(key => [key, key === defaultThemeName])\n);\n\n/** 注册主题 */\nexport const registerTheme = (name: string, theme: Partial) => {\n if (!name) {\n return;\n }\n // 所有主题基于默认主题扩展,保证基础值\n const mergedTheme = getMergedTheme(theme);\n themes.set(name, mergedTheme);\n transformedThemes.set(name, preprocessTheme(mergedTheme));\n hasThemeMerged.set(name, true);\n};\n/**\n * 获取注册过的主题\n * @param name 主题名称\n * @param transformed 是否获取 token 转换后的主题\n * @returns 返回主题\n */\nexport const getTheme = (name: string = defaultThemeName, transformed: boolean = false) => {\n if (hasThemeMerged.has(name) && !hasThemeMerged.get(name)) {\n // 重新 merge 默认主题\n registerTheme(name, themes.get(name));\n }\n\n if (transformed) {\n return transformedThemes.get(name);\n }\n\n return themes.get(name);\n};\n\n/** 删除主题 */\nexport const removeTheme = (name: string): boolean => {\n return themes.delete(name) && transformedThemes.delete(name) && hasThemeMerged.delete(name);\n};\n\n/** 主题是否存在 */\nexport const themeExist = (name: any) => {\n if (!isString(name)) {\n return false;\n }\n return themes.has(name);\n};\n\n/** 使新主题基于默认主题扩展,保证基础值 */\nexport const getMergedTheme = (theme: Partial): ITheme => {\n const baseThemeName = theme.type ?? defaultThemeName;\n const baseTheme = getTheme(baseThemeName);\n return mergeTheme({}, baseTheme, theme);\n};\n","import { array } from '@visactor/vutils';\nimport type { MaybeArray } from '../typings';\nimport type { IVChart } from './interface';\n\n/** vchart 全局实例管理类,为了防止与 ThemeManager 循环依赖,单独从 VChart 类抽出 */\nexport class InstanceManager {\n /** 全局实例 map */\n static readonly instances: Map = new Map();\n /** 注册实例 */\n static registerInstance(instance: IVChart) {\n InstanceManager.instances.set(instance.id, instance);\n }\n /** 注销实例 */\n static unregisterInstance(instance: IVChart) {\n InstanceManager.instances.delete(instance.id);\n }\n /**\n * 根据 vChart 实例的 id 获取 vChart 实例\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static getInstance(id: number): IVChart | undefined {\n return InstanceManager.instances.get(id);\n }\n /**\n * 根据图表 id 判断实例是否存在\n * @param id VChart 实例的 id,通过 vChart.id 获取\n * @returns\n */\n static instanceExist(id: number): boolean {\n return InstanceManager.instances.has(id);\n }\n\n static forEach(\n callbackfn: (instance: IVChart, id: number, map: Map) => void,\n excludeId: MaybeArray = [],\n thisArg?: any\n ) {\n const excludeIdList = array(excludeId);\n return InstanceManager.instances.forEach((instance: IVChart, id: number, map: Map) => {\n if (excludeIdList.includes(id)) {\n return;\n }\n callbackfn(instance, id, map);\n }, thisArg);\n }\n}\n","import { defaultThemeName, getTheme, registerTheme, removeTheme, themeExist, themes } from './builtin';\nimport type { ITheme } from './interface';\nimport { InstanceManager } from '../core/instance-manager';\nimport type { IVChart } from '../core/interface';\n\nexport class ThemeManager {\n /** 主题字典 */\n static readonly themes = themes;\n\n private static _currentThemeName: string = defaultThemeName; // 设置缺省为默认主题\n\n /**\n * 注册主题\n * @param name 主题名称\n * @param theme 主题配置\n * @returns\n */\n static registerTheme(name: string, theme: Partial) {\n registerTheme(name, theme);\n }\n\n /**\n * 获取主题\n * @param name 主题名称\n * @returns\n */\n static getTheme(name: string, transformed: boolean = false) {\n return getTheme(name, transformed);\n }\n\n /**\n * 移除主题\n * @param name 主题名称\n * @returns 是否移除成功\n */\n static removeTheme(name: string): boolean {\n return removeTheme(name);\n }\n\n /**\n * 判断主题是否存在\n * @param name 主题名称\n * @returns 是否存在\n */\n static themeExist(name: any) {\n return themeExist(name);\n }\n\n /** 获取图表默认主题(非用户配置) */\n static getDefaultTheme(): ITheme {\n return ThemeManager.themes.get(defaultThemeName);\n }\n\n /** 设置当前主题(所有实例生效) */\n static setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return;\n }\n ThemeManager._currentThemeName = name;\n InstanceManager.forEach((instance: IVChart) => instance?.setCurrentTheme(name));\n }\n\n /** 获取当前主题(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentTheme(transformed: boolean = false): ITheme {\n return ThemeManager.getTheme(ThemeManager._currentThemeName, transformed);\n }\n\n /** 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentThemeName(): string {\n return ThemeManager._currentThemeName;\n }\n}\n","import type { ITheme } from '../../theme';\n// eslint-disable-next-line no-duplicate-imports\nimport { ThemeManager } from '../../theme';\nimport { isObject, isString } from '@visactor/vutils';\n\nexport function getThemeObject(theme?: string | ITheme, transformed?: boolean): ITheme {\n if (isString(theme)) {\n if (ThemeManager.themeExist(theme)) {\n return ThemeManager.getTheme(theme, transformed);\n }\n return {};\n } else if (isObject(theme)) {\n return theme;\n }\n return {};\n}\n","import type { BaseEventParams } from '../../interface';\nimport type { ISeries } from '../../../series/interface';\nimport type { Datum } from '../../../typings';\nimport type { IAxis } from '../../../component/axis/interface';\n\nexport enum DimensionEventEnum {\n dimensionHover = 'dimensionHover',\n dimensionClick = 'dimensionClick'\n}\n\nexport interface IDimensionInfo {\n /** 维度项索引,在连续轴上不存在 */\n index?: number;\n /** 维度项原始值,在离散轴上为维度标签,在连续轴上为数字 */\n value: string | number;\n /** 维度项所在坐标(scale 执行后的值) */\n position?: number;\n /** 维度项所在轴 */\n axis?: IAxis;\n /** 维度项对应数据 */\n data: IDimensionData[];\n /** 维度对应的类型 */\n dimType?: string;\n}\n\nexport interface IDimensionData {\n /** 图元上的原始数据(考虑到有多个图元的情况,实际为数组类型) */\n datum: Datum[];\n /** 图元所在的系列实例 */\n series: ISeries;\n /** 该数据项的 hash 值 */\n key?: string;\n}\n\nexport type DimensionEventParams = BaseEventParams & {\n action: 'enter' | 'leave' | 'move' | 'click';\n dimensionInfo: IDimensionInfo[];\n};\n","/* eslint-disable max-depth */\nimport type { IChart } from '../../../../chart/interface';\nimport type { IDimensionData, IDimensionInfo } from '../interface';\nimport { isNil, array, isValid, isValidNumber } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Maybe } from '@visactor/vutils';\nimport type { AxisComponent } from '../../../../component/axis/base-axis';\nimport type { CoordinateType, Datum, ILayoutPoint } from '../../../../typings';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianLinearAxisSpec } from '../../../../component';\nimport type { ISeries } from '../../../../series';\n\nconst isInBound = (pos: ILayoutPoint, min: ILayoutPoint, max: ILayoutPoint): boolean =>\n pos.x >= min.x && pos.x <= max.x && pos.y >= min.y && pos.y <= max.y;\n\nexport const isInRegionBound = (chart: IChart, axis: AxisComponent, pos: ILayoutPoint) => {\n const regionList = chart.getRegionsInIds(array(axis.layout.layoutBindRegionID));\n return regionList?.some(region => {\n const rect = region.getLayoutRect();\n const startPoint = region.getLayoutStartPoint();\n return isInBound(\n pos,\n { x: startPoint.x, y: startPoint.y },\n { x: rect.width + startPoint.x, y: rect.height + startPoint.y }\n );\n });\n};\n\nexport const isSameDimensionInfo = (a?: IDimensionInfo, b?: IDimensionInfo): boolean => {\n if (a === b) {\n return true;\n }\n if (isNil(a) || isNil(b)) {\n return false;\n }\n if (a.value !== b.value) {\n return false;\n }\n if (a.axis?.id !== b.axis?.id) {\n return false;\n }\n return true;\n};\n\nconst resolveTooltipFilterRange = (spec: ICartesianLinearAxisSpec, scale: IBaseScale) => {\n const range = spec.tooltipFilterRange;\n const rangeValue = typeof range === 'function' ? range({ scale }) : range;\n const rangeArr = (isValidNumber(rangeValue) ? [-rangeValue, rangeValue] : rangeValue) as Maybe<[number, number]>;\n return rangeArr;\n};\n\n/** 给定维度项的值,获取对应维度数据 */\nexport const getDimensionData = (\n value: any,\n axis: AxisComponent,\n coordinate: CoordinateType,\n getDimensionField: (series: any) => string | string[]\n): IDimensionData[] => {\n const scale = axis.getScale();\n const isDiscreteAxis = isDiscrete(scale.type);\n\n const data: IDimensionData[] = [];\n const seriesList = axis.getOption().getChart().getSeriesInIndex(axis.getSpecInfo().seriesIndexes);\n for (const series of seriesList) {\n if (series.coordinate === coordinate) {\n const dimensionField = array(getDimensionField(series));\n const viewData = series.getViewData()?.latestData;\n if (dimensionField && viewData) {\n if (isDiscreteAxis) {\n const datums: Datum[] = [];\n const datumIdList: number[] = [];\n viewData.forEach((datum: any, i: number) => {\n if (datum[dimensionField[0]]?.toString() === value?.toString()) {\n datums.push(datum); // 获取该维度项所对应的数据\n datumIdList.push(i);\n }\n });\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n } else {\n // 连续轴\n if (isValid(dimensionField[1])) {\n // 直方图情况,根据范围取 datum\n const datums: Datum[] = [];\n const datumIdList: number[] = [];\n viewData.forEach((datum: any, i: number) => {\n if (\n datum[dimensionField[0]]?.toString() === value?.toString() ||\n (isValid(datum[dimensionField[0]]) &&\n isValid(datum[dimensionField[1]]) &&\n value >= datum[dimensionField[0]] &&\n value < datum[dimensionField[1]])\n ) {\n datums.push(datum); // 获取该维度项所对应的数据\n datumIdList.push(i);\n }\n });\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n } else {\n // 散点图情况,依据轴上的配置判断\n const spec = axis.getSpec() as ICartesianLinearAxisSpec;\n const rangeArr = resolveTooltipFilterRange(spec, scale);\n let datums: Datum[] = [];\n let datumIdList: number[] = [];\n if (rangeArr) {\n // 根据范围取 datum\n viewData.forEach((datum: Datum, i: number) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = datum[dimensionField[0]] - value;\n if (delta >= rangeArr[0] && delta <= rangeArr[1]) {\n datums.push(datum);\n datumIdList.push(i);\n }\n }\n });\n } else {\n // 根据最近距离取 datum\n let minDelta = Infinity;\n let deltaSign = 0;\n viewData.forEach((datum: any, i: number) => {\n if (isValid(datum[dimensionField[0]])) {\n const delta = Math.abs(datum[dimensionField[0]] - value);\n const sign = Math.sign(datum[dimensionField[0]] - value);\n if (delta < minDelta) {\n minDelta = delta;\n datums = [datum];\n datumIdList = [i];\n deltaSign = sign;\n } else if (delta === minDelta && sign === deltaSign) {\n datums.push(datum);\n datumIdList.push(i);\n }\n }\n });\n }\n data.push({\n series,\n datum: datums,\n key: getDimensionDataKey(series, datumIdList)\n });\n }\n }\n }\n }\n }\n return data;\n};\n\nconst getDimensionDataKey = (series: ISeries, datumIdList: number[]) => `${series.id}_${datumIdList.join('_')}`;\n\nexport const getAxis = (\n chart: IChart,\n filter: (cmp: T) => boolean,\n pos: ILayoutPoint\n): T[] | null => {\n const axesComponents = chart\n .getAllComponents()\n .filter(c => c.specKey === 'axes' && filter(c as T) && isInRegionBound(chart, c as T, pos)) as T[];\n if (!axesComponents.length) {\n return null;\n }\n return axesComponents;\n};\n","import { isNil } from '@visactor/vutils';\n\n/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/regression/ols.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\nexport function ordinaryLeastSquares(uX: number, uY: number, uXY: number, uX2: number) {\n const delta = uX2 - uX * uX;\n const slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta;\n const intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function visitPoints(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n callback: (x: number, y: number, index: number) => void\n) {\n let i = -1;\n let u;\n let v;\n\n data.forEach(d => {\n u = x(d);\n v = y(d);\n if (!isNil(u) && (u = +u) >= u && !isNil(v) && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n });\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function rSquared(\n data: any[],\n x: (datum: any) => number,\n y: (datum: any) => number,\n uY: number,\n predict: (x: number) => number\n) {\n let SSE = 0;\n let SST = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx);\n const sst = dy - uY;\n\n SSE += sse * sse;\n SST += sst * sst;\n });\n\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nexport function regressionLinear(\n data: any[],\n x: (datum: any) => number = datum => datum.x,\n y: (datum: any) => number = datum => datum.y\n) {\n let X = 0;\n let Y = 0;\n let XY = 0;\n let X2 = 0;\n let n = 0;\n\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ordinaryLeastSquares(X, Y, XY, X2);\n const predict = (x: number) => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n","export function ascending(a: number, b: number) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export function toNumber(a: any) {\n return Number(a);\n}\n","import { toNumber } from './toNumber';\n\nexport function quantileSorted(\n values: any[],\n percent: number,\n valueof: (entry: any, index: number, arr: any[]) => number = toNumber\n) {\n const n = values.length;\n if (!n) {\n return;\n }\n if (percent <= 0 || n < 2) {\n return valueof(values[0], 0, values);\n }\n if (percent >= 1) {\n return valueof(values[n - 1], n - 1, values);\n }\n const i = (n - 1) * percent;\n const i0 = Math.floor(i);\n const value0 = valueof(values[i0], i0, values);\n const value1 = valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import { ascending } from './ascending';\nimport { quantileSorted } from './quantileSorted';\n\nexport const median = (values: number[], isSorted?: boolean) => {\n let sorted = values;\n if (isSorted !== true) {\n sorted = values.sort(ascending);\n }\n\n return quantileSorted(sorted, 0.5);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport {\n isNumberClose,\n isGreater,\n isLess,\n isValid,\n PointService,\n median as visMedian,\n maxInArray,\n minInArray,\n normalizeAngle\n} from '@visactor/vutils';\nimport { angleLabelOrientAttribute } from '@visactor/vrender-components';\nexport const isClose = isNumberClose;\nexport { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\n\nexport function min(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return minInArray(dataArray);\n}\n\nexport function max(data: any[], field?: string): number {\n const dataArray: any[] = [];\n data.forEach(d => {\n const value = +d[field];\n if (isValidNumber(value)) {\n dataArray.push(value);\n }\n });\n if (dataArray.length === 0) {\n return null;\n }\n return maxInArray(dataArray);\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n\n/**\n * 最大余额法计算百分比\n **/\nexport function getPercentValue(valueList: number[], precision = 2) {\n const sum = valueList.reduce((a, c) => {\n return (a += isNaN(c) ? 0 : c);\n }, 0);\n if (sum === 0) {\n return 0;\n }\n\n const digits = Math.pow(10, precision);\n const votesPerQuota = valueList.map(val => {\n return ((isNaN(val) ? 0 : val) / sum) * digits * 100;\n });\n\n const targetSeats = digits * 100;\n const seats = votesPerQuota.map(votes => {\n return Math.floor(votes);\n });\n\n let currentSum = seats.reduce((a, c) => {\n return a + c;\n }, 0);\n\n const remainder = votesPerQuota.map((votes, idx) => {\n return votes - seats[idx];\n });\n\n while (currentSum < targetSeats) {\n let max = Number.NEGATIVE_INFINITY;\n let maxId = null;\n for (let i = 0; i < remainder.length; i++) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n }\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return seats.map(entry => entry / digits);\n}\n\nexport function isValidPoint(p: IPoint) {\n return isValidNumber(p.x) && isValidNumber(p.y);\n}\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getAxis, getDimensionData } from './common';\nimport type { IPolarSeries } from '../../../../series/interface';\nimport { isNil, maxInArray, minInArray } from '@visactor/vutils';\nimport { distance, vectorAngle } from '../../../../util/math';\nimport type { ILayoutPoint } from '../../../../typings/layout';\nimport type { PolarAxis } from '../../../../component';\n/** 将角度标准化为 range 范围内的角度 */\nconst angleStandardize = (angle: number, range: [number, number]) => {\n const unit = Math.PI * 2;\n const min = minInArray(range);\n const max = maxInArray(range);\n if (angle < min) {\n angle += Math.ceil((min - angle) / unit) * unit;\n } else if (angle > max) {\n angle -= Math.ceil((angle - max) / unit) * unit;\n }\n return angle;\n};\n\nexport const getPolarDimensionInfo = (chart: IChart | undefined, pos: ILayoutPoint): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n\n const angleAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'angle', pos);\n const radiusAxisList = getAxis(chart, (cmp: PolarAxis) => cmp.getOrient() === 'radius', pos);\n\n if ((!angleAxisList || !angleAxisList.length) && (!radiusAxisList || !radiusAxisList.length)) {\n return null;\n }\n\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const getDimensionField = (series: IPolarSeries) => series.getDimensionField()[0];\n const { x, y } = pos;\n\n if (angleAxisList) {\n angleAxisList.forEach(axis => {\n const angleScale = axis.getScale();\n // 限定为离散轴\n if (angleScale && isDiscrete(angleScale.type)) {\n const angleDomain = angleScale.domain();\n const angleRange = angleScale.range();\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n angle = angleStandardize(angle, angleRange);\n\n // 计算半径\n const radius = distance(vector);\n const radiusScale = radiusAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前角度轴对应的径向轴,而不是取第一个\n const radiusRange = radiusScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = axis.invert(angle);\n if (isNil(value)) {\n return;\n }\n let index: number | undefined = angleDomain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, position: angleScale.scale(value), axis, data });\n }\n });\n }\n if (radiusAxisList) {\n radiusAxisList.forEach(axis => {\n const radiusScale = axis.getScale();\n const radiusRange = radiusScale?.range();\n\n // 限定为离散轴\n if (radiusScale && isDiscrete(radiusScale.type)) {\n const center = axis.getCenter();\n const vector = {\n x: x - axis.getLayoutStartPoint().x - center.x,\n y: y - axis.getLayoutStartPoint().y - center.y\n };\n\n // 计算顺时针角度\n let angle = vectorAngle({ x: 1, y: 0 }, vector);\n if (angle < -Math.PI / 2) {\n angle = Math.PI * 2 + angle;\n }\n\n // 计算半径\n const radius = distance(vector);\n const angleScale = angleAxisList[0]?.getScale(); // FIXME: 想办法获取到和当前径向轴对应的角度轴,而不是取第一个\n const angleRange = angleScale?.range();\n\n // 判断是否在 range 范围内\n if (\n (angle - angleRange?.[0]) * (angle - angleRange?.[1]) > 0 ||\n (radius - radiusRange?.[0]) * (radius - radiusRange?.[1]) > 0\n ) {\n return;\n }\n\n const value = radiusScale.invert(radius);\n if (isNil(value)) {\n return;\n }\n const domain = radiusScale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(value, axis, 'polar', getDimensionField);\n targetAxisInfo.push({ index, value, position: radiusScale.scale(value), axis, data });\n }\n });\n }\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n","import type { IOrientType } from '../../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../../typings/space';\nimport { isValid } from '@visactor/vutils';\nimport { isValidOrient } from '../../../../util/space';\nimport type { ICartesianAxisCommonSpec } from '../interface';\nimport { ComponentTypeEnum } from '../../../interface';\n\nexport function isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n\nexport function isZAxis(orient: IOrientType) {\n return orient === 'z';\n}\n\n// 自动推断轴类型,现在根据orient来判断\n// TODO:后续可以根据数据特征推断\nexport function autoAxisType(orient: IOrientType, isHorizontal: boolean) {\n if (isHorizontal) {\n return isXAxis(orient) ? 'linear' : 'band';\n }\n return isXAxis(orient) ? 'band' : 'linear';\n}\n\nexport function getOrient(spec: ICartesianAxisCommonSpec, whiteList?: string[]): IOrientType {\n return isValidOrient(spec.orient) || (whiteList && whiteList.includes(spec.orient)) ? spec.orient : 'left';\n}\n\nexport function getDirectionByOrient(orient: IOrientType) {\n return orient === 'top' || orient === 'bottom' ? Direction.horizontal : Direction.vertical;\n}\n\nexport function isOrientInSameDirection(orient1: IOrientType, orient2: IOrientType) {\n return getDirectionByOrient(orient1) === getDirectionByOrient(orient2);\n}\n\nexport function transformInverse(spec: ICartesianAxisCommonSpec, isHorizontal: boolean) {\n // 这里处理下 direction === 'horizontal' 下的 Y 轴\n // 因为 Y 轴绘制的时候默认是从下至上绘制的,但是在 direction === 'horizontal' 场景下,图表应该是按照从上至下阅读的\n // 所以这里在这种场景下坐标轴会默认 inverse 已达到效果\n let inverse = spec.inverse;\n if (isHorizontal && !isXAxis(spec.orient)) {\n inverse = isValid(spec.inverse) ? !spec.inverse : true;\n }\n return inverse;\n}\n\nexport function getCartesianAxisInfo(spec: ICartesianAxisCommonSpec, isHorizontal?: boolean) {\n const axisType = spec.type ?? autoAxisType(spec.orient, isHorizontal);\n const componentName = `${ComponentTypeEnum.cartesianAxis}-${axisType}`;\n return { axisType, componentName };\n}\n","import type { IChart } from '../../../../chart/interface';\nimport type { IDimensionInfo } from '../interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { getDimensionData, getAxis } from './common';\nimport type { CartesianAxis } from '../../../../component/axis/cartesian';\nimport type { ICartesianSeries } from '../../../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../../../component/axis/cartesian/util/common';\nimport { Direction } from '../../../../typings/space';\nimport type { ILayoutPoint } from '../../../../typings/layout';\n\nconst discreteXAxisGetDimensionField = (series: ICartesianSeries) => series.fieldX[0];\nconst discreteYAxisGetDimensionField = (series: ICartesianSeries) => series.fieldY[0];\nconst continuousXAxisGetDimensionField = (series: ICartesianSeries) => [\n series.fieldX[0],\n series.fieldX2 ?? series.fieldX[1]\n];\nconst continuousYAxisGetDimensionField = (series: ICartesianSeries) => [\n series.fieldY[0],\n series.fieldY2 ?? series.fieldY[1]\n];\n\nconst getDimensionFieldFunc = (isXAxis: boolean, isDiscreteAxis: boolean) =>\n isXAxis\n ? isDiscreteAxis\n ? discreteXAxisGetDimensionField\n : continuousXAxisGetDimensionField\n : isDiscreteAxis\n ? discreteYAxisGetDimensionField\n : continuousYAxisGetDimensionField;\n\nexport const getCartesianDimensionInfo = (\n chart: IChart | undefined,\n pos: ILayoutPoint,\n isTooltip?: boolean\n): IDimensionInfo[] | null => {\n if (!chart) {\n return null;\n }\n\n const { x, y } = pos;\n const xAxisList = getAxis(chart, (cmp: CartesianAxis) => isXAxis(cmp.getOrient()), pos) ?? [];\n const yAxisList = getAxis(chart, (cmp: CartesianAxis) => isYAxis(cmp.getOrient()), pos) ?? [];\n\n if (!xAxisList.length && !yAxisList.length) {\n return null;\n }\n\n /** 离散轴集合 */\n const bandAxisSet: Set = new Set();\n /** 连续轴集合 */\n const linearAxisSet: Set = new Set();\n /** 必须包含的轴的集合 */\n const forceAxisSet: Set = new Set();\n\n [xAxisList, yAxisList].forEach(axisList =>\n axisList.forEach(axis => {\n const isDiscreteAxis = isDiscrete(axis.getScale().type);\n if (isDiscreteAxis) {\n bandAxisSet.add(axis);\n } else {\n linearAxisSet.add(axis);\n }\n if (isTooltip && axis.getSpec().hasDimensionTooltip) {\n forceAxisSet.add(axis);\n }\n })\n );\n\n const targetAxisInfo: IDimensionInfo[] = [];\n\n const addAxisDimensionInfo = (orient: 'x' | 'y') => {\n const isXAxis = orient === 'x';\n const posValue = isXAxis ? x : y;\n const axisList = isXAxis ? xAxisList : yAxisList;\n axisList.forEach(axis => {\n if (forceAxisSet.size > 0) {\n if (forceAxisSet.has(axis)) {\n const info = getDimensionInfoByPosition(\n axis,\n posValue,\n getDimensionFieldFunc(isXAxis, isDiscrete(axis.getScale().type))\n );\n info && targetAxisInfo.push(info);\n }\n } else {\n const hasDiscreteAxis = bandAxisSet.size > 0;\n if ((hasDiscreteAxis ? bandAxisSet : linearAxisSet).has(axis)) {\n const info = getDimensionInfoByPosition(axis, posValue, getDimensionFieldFunc(isXAxis, hasDiscreteAxis));\n info && targetAxisInfo.push(info);\n }\n }\n });\n };\n\n // 优先筛选 band 轴,其次按照 direction 判断\n if (chart.getSpec().direction === Direction.horizontal) {\n addAxisDimensionInfo('y');\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('x');\n }\n } else {\n addAxisDimensionInfo('x');\n if (targetAxisInfo.length === 0) {\n addAxisDimensionInfo('y');\n }\n }\n\n if (!targetAxisInfo.length) {\n return null;\n }\n return targetAxisInfo;\n};\n\nexport const getDimensionInfoByPosition = (\n axis: CartesianAxis,\n posValue: number,\n getDimensionField: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const value = axis.positionToData(posValue, true);\n return isNil(value) ? null : getDimensionInfoByValue(axis, value, getDimensionField);\n};\n\nexport const getDimensionInfoByValue = (\n axis: CartesianAxis,\n value: any,\n getDimensionField?: (series: ICartesianSeries) => string | string[]\n): IDimensionInfo | null => {\n const scale = axis.getScale();\n\n if (isNil(value)) {\n return null;\n }\n const domain = scale.domain();\n let index: number | undefined = domain.findIndex((v: any) => v?.toString() === value.toString());\n if (index < 0) {\n index = undefined;\n }\n\n const data = getDimensionData(\n value,\n axis,\n 'cartesian',\n getDimensionField ?? (isXAxis(axis.getOrient()) ? discreteXAxisGetDimensionField : discreteYAxisGetDimensionField)\n );\n return { index, value, position: scale.scale(value), axis, data };\n};\n","import { error } from '../../../util/debug';\nimport type { IAxis } from '../../../component/axis/interface';\nimport type { RenderMode } from '../../../typings/spec/common';\nimport type {\n BaseEventParams,\n EventHandler,\n EventParamsDefinition,\n IComposedEvent,\n IEventDispatcher\n} from '../../interface';\nimport type { IChart } from '../../../chart/interface';\nimport type { IDimensionInfo } from './interface';\nimport { getPolarDimensionInfo } from './util/polar';\nimport { getCartesianDimensionInfo, getDimensionInfoByValue } from './util/cartesian';\nimport type { IOrientType, Maybe } from '../../../typings';\nimport { isDiscrete } from '@visactor/vscale';\nimport { isXAxis } from '../../../component/axis/cartesian/util';\n\nexport class DimensionEvent implements IComposedEvent {\n protected _eventDispatcher: IEventDispatcher;\n protected _mode: RenderMode;\n\n protected _callback!: (params: BaseEventParams) => void;\n\n protected _chart: Maybe;\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n private get chart() {\n if (!this._chart) {\n this._chart = this._eventDispatcher.globalInstance.getChart?.();\n }\n return this._chart;\n }\n\n register(eType: Evt, handler: EventHandler): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n unregister(): void {\n (this.chart?.getOption().onError ?? error)('Method not implemented.');\n }\n\n protected getTargetDimensionInfo(x: number, y: number): IDimensionInfo[] | null {\n const cartesianInfo = getCartesianDimensionInfo(this.chart, { x, y }) ?? [];\n const polarInfo = getPolarDimensionInfo(this.chart, { x, y }) ?? [];\n\n const result = [].concat(cartesianInfo, polarInfo);\n if (result.length === 0) {\n return null;\n }\n\n return result;\n }\n\n dispatch(v: unknown, opt: { filter?: (axis: IAxis) => boolean }) {\n // get all enable axis\n const axes = this.chart?.getAllComponents().filter(c => {\n if (c.specKey !== 'axes') {\n return false;\n }\n if (opt?.filter) {\n return opt.filter(c);\n }\n return true;\n }) as IAxis[];\n\n const discreteAxes = axes.filter(axis => {\n const scale = (axis).getScale();\n return isDiscrete(scale.type);\n });\n const dimAxes = discreteAxes.length\n ? discreteAxes\n : axes.filter(axis => {\n const orient = axis.getOrient();\n return isXAxis(orient as IOrientType) || orient === 'angle';\n });\n const dimensionInfo: IDimensionInfo[] = [];\n dimAxes.forEach(a => {\n const info = getDimensionInfoByValue(a as unknown as any, v);\n if (info) {\n dimensionInfo.push(info);\n }\n });\n this._callback.call(null, {\n action: 'enter',\n dimensionInfo\n } as unknown as BaseEventParams);\n return dimensionInfo;\n }\n}\n","export { HOOK_EVENT as VGRAMMAR_HOOK_EVENT } from '@visactor/vgrammar-core';\n\nexport const BASE_EVENTS = [\n 'pointerdown',\n 'pointerup',\n 'pointerupoutside',\n 'pointertap', // pointerEvent 下的 click 事件\n 'pointerover',\n 'pointermove',\n 'pointerenter',\n 'pointerleave',\n 'pointerout',\n 'mousedown',\n 'mouseup',\n 'mouseupoutside',\n 'rightdown',\n 'rightup',\n 'rightupoutside',\n 'click',\n 'dblclick',\n 'mousemove',\n 'mouseover',\n 'mouseout',\n 'mouseenter',\n 'mouseleave',\n 'wheel',\n 'touchstart',\n 'touchend',\n 'touchendoutside',\n 'touchmove',\n 'touchcancel',\n 'tap',\n 'dragstart',\n 'drag',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'dragend',\n 'drop',\n // 手势事件\n 'pan',\n 'panstart',\n 'panend',\n 'press',\n 'pressup',\n 'pressend',\n 'pinch',\n 'pinchstart',\n 'pinchend',\n 'swipe'\n];\n\nexport enum ChartEvent {\n initialized = 'initialized', // 图表实例初始化完成\n rendered = 'rendered', // 图表渲染方法被调用时触发,表明图表已经执行过渲染逻辑,只会触发一次\n renderFinished = 'renderFinished', // 每次画布渲染完成触发的事件,不包含动画结束\n animationFinished = 'animationFinished', // 图表动画结束时触发的事件\n // region\n regionSeriesDataFilterOver = 'regionSeriesDataFilterOver',\n // series start\n // series.liftCircle\n afterInitData = 'afterInitData',\n afterInitEvent = 'afterInitEvent',\n afterInitMark = 'afterInitMark',\n // series.data\n rawDataUpdate = 'rawDataUpdate',\n viewDataFilterOver = 'viewDataFilterOver',\n viewDataUpdate = 'viewDataUpdate',\n viewDataStatisticsUpdate = 'viewDataStatisticsUpdate',\n // dot series\n markDeltaYUpdate = 'markDeltaYUpdate',\n // pie series\n viewDataLabelUpdate = 'viewDataLabelUpdate',\n /** series end */\n // scale\n scaleDomainUpdate = 'scaleDomainUpdate',\n scaleUpdate = 'scaleUpdate',\n // datazoom\n dataZoomChange = 'dataZoomChange',\n // Hierarchy\n drill = 'drill',\n layoutStart = 'layoutStart',\n layoutEnd = 'layoutEnd',\n layoutRectUpdate = 'layoutRectUpdate',\n\n // player\n playerPlay = 'playerPlay',\n playerPause = 'playerPause',\n playerEnd = 'playerEnd',\n playerChange = 'playerChange',\n playerForward = 'playerForward',\n playerBackward = 'playerBackward',\n // scrollBar\n scrollBarChange = 'scrollBarChange',\n // brush\n brushStart = 'brushStart',\n brushChange = 'brushChange',\n brushEnd = 'brushEnd',\n brushClear = 'brushClear',\n // legend\n legendSelectedDataChange = 'legendSelectedDataChange',\n legendFilter = 'legendFilter',\n legendItemClick = 'legendItemClick',\n legendItemHover = 'legendItemHover',\n legendItemUnHover = 'legendItemUnHover',\n // tooltip\n tooltipShow = 'tooltipShow',\n tooltipHide = 'tooltipHide',\n tooltipRelease = 'tooltipRelease',\n // resize\n afterResize = 'afterResize',\n afterRender = 'afterRender',\n // layout\n afterLayout = 'afterLayout'\n}\n\nexport enum Event_Source_Type {\n chart = 'chart',\n window = 'window',\n canvas = 'canvas'\n}\n\nexport enum Event_Bubble_Level {\n vchart = 'vchart',\n chart = 'chart',\n model = 'model',\n mark = 'mark'\n}\n","import { isMobileLikeMode } from '../../../util/env';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\nimport { isSameDimensionInfo } from './util/common';\nimport { Event_Source_Type } from '../../../constant/event';\nimport type { IDimensionInfo } from './interface';\n\nexport class DimensionHoverEvent extends DimensionEvent {\n private _cacheDimensionInfo: IDimensionInfo[] | null = null;\n\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointermove'>('pointermove', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n\n this._eventDispatcher.register<'pointerout'>('pointerout', {\n query: { ...handler.query, source: Event_Source_Type.canvas },\n callback: this.onMouseOut\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也触发 hover\n this._eventDispatcher.register<'pointerdown'>('pointerdown', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onMouseMove\n });\n }\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointermove', {\n query: null,\n callback: this.onMouseMove\n });\n\n if (isMobileLikeMode(this._mode)) {\n // 移动端点按也出发 hover\n this._eventDispatcher.unregister('pointerdown', {\n query: null,\n callback: this.onMouseMove\n });\n }\n }\n\n private onMouseMove = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (targetDimensionInfo === null && this._cacheDimensionInfo !== null) {\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (\n targetDimensionInfo !== null &&\n (this._cacheDimensionInfo === null ||\n targetDimensionInfo.length !== this._cacheDimensionInfo.length ||\n targetDimensionInfo.some((info, i) => !isSameDimensionInfo(info, this._cacheDimensionInfo![i])))\n ) {\n // 鼠标移入某维度\n this._callback.call(null, {\n ...params,\n action: 'enter',\n dimensionInfo: targetDimensionInfo.slice()\n });\n this._cacheDimensionInfo = targetDimensionInfo;\n } else if (targetDimensionInfo !== null) {\n // 鼠标在某维度上滑动\n this._callback.call(null, {\n ...params,\n action: 'move',\n dimensionInfo: targetDimensionInfo.slice()\n });\n }\n };\n\n private onMouseOut = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n // 鼠标移出某维度\n this._callback.call(null, {\n ...params,\n action: 'leave',\n dimensionInfo: this._cacheDimensionInfo ? this._cacheDimensionInfo.slice() : []\n });\n this._cacheDimensionInfo = null;\n };\n}\n","import { Event_Source_Type } from '../../../constant/event';\nimport type { BaseEventParams, EventHandler, EventParamsDefinition, EventType } from '../../interface';\nimport { DimensionEvent } from './base';\n\nexport class DimensionClickEvent extends DimensionEvent {\n register(eType: Evt, handler: EventHandler) {\n this._callback = handler.callback;\n\n this._eventDispatcher.register<'pointertap'>('pointertap', {\n query: { ...handler.query, source: Event_Source_Type.chart },\n callback: this.onClick\n });\n }\n\n unregister() {\n this._eventDispatcher.unregister('pointertap', {\n query: null,\n callback: this.onClick\n });\n }\n\n private onClick = (params: BaseEventParams) => {\n if (!params) {\n return;\n }\n const x = (params.event as any).viewX;\n const y = (params.event as any).viewY;\n const targetDimensionInfo = this.getTargetDimensionInfo(x, y);\n if (!targetDimensionInfo) {\n return;\n }\n this._callback.call(null, {\n ...params,\n action: 'click',\n dimensionInfo: targetDimensionInfo.slice()\n });\n };\n}\n","import { DimensionHoverEvent, DimensionEventEnum, DimensionClickEvent } from './dimension';\n\nexport * from './dimension';\n\nexport const ComposedEventMapper = {\n [DimensionEventEnum.dimensionHover]: DimensionHoverEvent,\n [DimensionEventEnum.dimensionClick]: DimensionClickEvent\n};\n","/*eslint no-dupe-class-members: \"off\"*/\n\nimport type { RenderMode } from '../typings/spec/common';\nimport { ComposedEventMapper } from './events';\nimport type {\n EventType,\n EventQuery,\n EventCallback,\n EventParamsDefinition,\n IEvent,\n IEventDispatcher,\n IComposedEvent,\n EventParams,\n EventHandler,\n EventBubbleLevel\n} from './interface';\n\nexport class Event implements IEvent {\n private _eventDispatcher: IEventDispatcher;\n private _mode: RenderMode;\n\n private _composedEventMap: Map, { eventType: EventType; event: IComposedEvent }> =\n new Map();\n getComposedEventMap() {\n return this._composedEventMap;\n }\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n on(eType: Evt, callback: EventCallback): this;\n on(eType: Evt, query: EventQuery, callback: EventCallback): this;\n on(\n eType: Evt,\n query: EventQuery | EventCallback,\n callback?: EventCallback\n ): this {\n const handler =\n typeof query === 'function'\n ? { query: null, callback: query }\n : {\n query,\n callback: callback as EventCallback\n };\n\n if (ComposedEventMapper[eType as string]) {\n const composedEvent = new ComposedEventMapper[eType as string](\n this._eventDispatcher,\n this._mode\n ) as IComposedEvent;\n composedEvent.register(eType, handler);\n this._composedEventMap.set(callback as EventCallback, {\n eventType: eType,\n event: composedEvent\n });\n } else {\n this._eventDispatcher.register(eType, handler);\n }\n\n return this;\n }\n\n off(eType: Evt, callback?: EventCallback): this;\n off(eType: Evt, query: EventQuery, callback: EventCallback): this;\n off(\n eType: Evt,\n query?: EventQuery | EventCallback,\n cb?: EventCallback\n ): this {\n const callback = (cb ?? query) as EventCallback;\n if (ComposedEventMapper[eType as string]) {\n if (callback) {\n this._composedEventMap.get(callback)?.event.unregister();\n this._composedEventMap.delete(callback);\n } else {\n for (const entry of this._composedEventMap.entries()) {\n if (entry[1].eventType === eType) {\n this._composedEventMap.get(entry[0])?.event.unregister();\n this._composedEventMap.delete(entry[0]);\n }\n }\n }\n } else {\n if (callback) {\n const handler: EventHandler = {\n callback,\n query: null,\n // 卸载事件时无需处理 source 以外的参数\n filter: {\n nodeName: null,\n type: eType,\n level: null,\n source: (query as EventQuery).source,\n markName: null,\n filter: null,\n userId: null\n }\n };\n this._eventDispatcher.unregister(eType, handler);\n } else {\n this._eventDispatcher.unregister(eType);\n }\n }\n return this;\n }\n\n emit(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n this._eventDispatcher.dispatch(eType, params, level);\n return this;\n }\n\n prevent(eType: Evt, except?: EventCallback) {\n this._eventDispatcher.prevent(eType, except);\n return this;\n }\n\n allow(eType: Evt) {\n this._eventDispatcher.allow(eType);\n return this;\n }\n\n release(): void {\n this._eventDispatcher.clear();\n this._composedEventMap.clear();\n }\n}\n","import { Event_Bubble_Level } from '../constant/event';\nimport type { EventCallback, EventHandler, EventParams, EventBubbleLevel } from './interface';\n\nexport type BubbleNode = {\n handler: EventHandler;\n level: EventBubbleLevel;\n};\n\nexport class Bubble {\n private _map: Map, BubbleNode> = new Map();\n private _levelNodes: Map = new Map();\n\n constructor() {\n this._levelNodes.set(Event_Bubble_Level.vchart, []);\n this._levelNodes.set(Event_Bubble_Level.chart, []);\n this._levelNodes.set(Event_Bubble_Level.model, []);\n this._levelNodes.set(Event_Bubble_Level.mark, []);\n }\n\n addHandler(handler: EventHandler, level: EventBubbleLevel): this {\n const node: BubbleNode = { level, handler };\n this._levelNodes.get(level)?.push(node);\n this._map.set(handler.callback, node);\n return this;\n }\n\n removeHandler(handler: EventHandler): this {\n const node = this._map.get(handler.callback);\n if (!node) {\n return this;\n }\n this._map.delete(handler.callback);\n const nodes = this._levelNodes.get(node.level);\n // 由于顶层 API 封装不是 handler 形式,因此通过 callback 唯一判断\n const index = nodes?.findIndex(n => n.handler.callback === handler.callback);\n index !== undefined && index >= 0 && nodes?.splice(index, 1);\n return this;\n }\n\n preventHandler(handler: EventHandler): this {\n if (handler) {\n handler.prevented = true;\n }\n return this;\n }\n\n allowHandler(handler: EventHandler): this {\n if (handler) {\n handler.prevented = false;\n }\n return this;\n }\n\n getHandlers(level: EventBubbleLevel): EventHandler[] {\n return this._levelNodes.get(level)?.map(node => node.handler) || [];\n }\n\n getAllHandlers(): EventHandler[] {\n return Array.from(this._map.values()).map(node => node.handler) || [];\n }\n\n getCount() {\n return this._map.size;\n }\n\n release() {\n this._map.clear();\n this._levelNodes.clear();\n }\n}\n","import type { Dict } from '../type';\nimport isString from './isString';\n\nconst get = (obj: Dict, path: string | string[], defaultValue?: any): any => {\n const paths = isString(path) ? (path as string).split('.') : path;\n\n for (let p = 0; p < paths.length; p++) {\n obj = obj ? obj[paths[p]] : undefined;\n }\n return obj === undefined ? defaultValue : obj;\n};\n\nexport default get;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/debounce.js\n */\nimport isObject from './isObject';\nimport isValidNumber from './isValidNumber';\n\nexport type FunctionControlOptions = {\n // 是否在等待开始时调用\n leading?: boolean;\n // 是否在等待结束后调用\n trailing?: boolean;\n // 最长等待时间\n maxWait?: number;\n};\n\nlet hasRaf: boolean = false;\ntry {\n hasRaf = typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function';\n} catch (err) {\n hasRaf = false;\n}\nhasRaf = false;\n\nfunction debounce(\n func: (...args: T[]) => S,\n wait: number,\n options?: FunctionControlOptions\n): (...args: T[]) => S {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number;\n let result: any;\n // eslint-disable-next-line no-undef\n let timerId: number | NodeJS.Timeout | undefined;\n let lastCallTime: number | undefined;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && hasRaf;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(isValidNumber(options.maxWait) ? options.maxWait : 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n cancelAnimationFrame(timerId as number);\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n function cancelTimer(id: number) {\n if (useRAF) {\n return cancelAnimationFrame(id);\n }\n clearTimeout(id);\n }\n\n function leadingEdge(time: number) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const timeWaiting = wait - timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const 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 (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\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 cancelTimer(timerId as number);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function pending() {\n return timerId !== undefined;\n }\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n // @ts-ignore\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 timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n return debounced;\n}\n\nexport default debounce;\n","/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\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,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n","/**\n * @file\n * Don't import any type, this may lead to CIRCULAR_DEPENDENCY\n */\n\nexport enum BuiltInEncodeNames {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n group = 'group',\n connectNulls = 'connectNulls'\n}\n\n/**\n * state of diff\n */\nexport enum DiffState {\n enter = 'enter',\n update = 'update',\n exit = 'exit',\n unChange = 'unChange'\n}\n/**\n * mark类型\n */\nexport enum GrammarMarkType {\n // basic mark\n arc = 'arc',\n arc3d = 'arc3d',\n area = 'area',\n image = 'image',\n line = 'line',\n path = 'path',\n rect = 'rect',\n rect3d = 'rect3d',\n rule = 'rule',\n shape = 'shape',\n symbol = 'symbol',\n text = 'text',\n richtext = 'richtext',\n polygon = 'polygon',\n pyramid3d = 'pyramid3d',\n circle = 'circle',\n\n // grammer mark\n cell = 'cell',\n interval = 'interval',\n\n // group mark\n group = 'group',\n\n // glyph mark\n glyph = 'glyph',\n\n // component mark\n component = 'component',\n\n // large mark\n largeRects = 'largeRects',\n largeSymbols = 'largeSymbols'\n}\n\n/**\n * built-in component type\n */\nexport enum ComponentEnum {\n axis = 'axis',\n grid = 'grid',\n legend = 'legend',\n slider = 'slider',\n label = 'label',\n datazoom = 'datazoom',\n player = 'player',\n title = 'title',\n scrollbar = 'scrollbar'\n}\n\nexport enum DataFilterRank {\n player = 1,\n rollUp = 2,\n drillDown = 3,\n slider = 4,\n datazoom = 5,\n legend = 6,\n scrollbar = 7,\n brush = 8,\n normal = 9\n}\n\nexport enum AxisEnum {\n lineAxis = 'lineAxis',\n circleAxis = 'circleAxis'\n}\n\nexport enum GridEnum {\n lineAxisGrid = 'lineAxisGrid',\n circleAxisGrid = 'circleAxisGrid'\n}\n\nexport enum LegendEnum {\n discreteLegend = 'discreteLegend',\n colorLegend = 'colorLegend',\n sizeLegend = 'sizeLegend'\n}\n\nexport enum CrosshairEnum {\n lineCrosshair = 'lineCrosshair',\n rectCrosshair = 'rectCrosshair',\n sectorCrosshair = 'sectorCrosshair',\n circleCrosshair = 'circleCrosshair',\n polygonCrosshair = 'polygonCrosshair',\n ringCrosshair = 'ringCrosshair'\n}\n\nexport enum LabelEnum {\n symbolLabel = 'symbolLabel',\n rectLabel = 'rectLabel',\n lineLabel = 'lineLabel',\n dataLabel = 'dataLabel'\n}\n\nexport enum PlayerEnum {\n continuousPlayer = 'continuousPlayer',\n discretePlayer = 'discretePlayer'\n}\n\n/** 布局阶段 */\nexport enum LayoutState {\n before = 'before',\n layouting = 'layouting',\n reevaluate = 'reevaluate',\n after = 'after'\n}\n\nexport enum HOOK_EVENT {\n BEFORE_EVALUATE_DATA = 'beforeEvaluateData',\n AFTER_EVALUATE_DATA = 'afterEvaluateData',\n\n BEFORE_EVALUATE_SCALE = 'beforeEvaluateScale',\n AFTER_EVALUATE_SCALE = 'afterEvaluateScale',\n\n BEFORE_PARSE_VIEW = 'beforeParseView',\n AFTER_PARSE_VIEW = 'afterParseView',\n\n BEFORE_TRANSFORM = 'beforeTransform',\n AFTER_TRANSFORM = 'afterTransform',\n\n BEFORE_CREATE_VRENDER_STAGE = 'beforeCreateVRenderStage',\n AFTER_CREATE_VRENDER_STAGE = 'afterCreateVRenderStage',\n\n BEFORE_CREATE_VRENDER_LAYER = 'beforeCreateVRenderLayer',\n AFTER_CREATE_VRENDER_LAYER = 'afterCreateVRenderLayer',\n\n BEFORE_STAGE_RESIZE = 'beforeStageResize',\n AFTER_STAGE_RESIZE = 'afterStageResize',\n\n BEFORE_VRENDER_DRAW = 'beforeVRenderDraw',\n AFTER_VRENDER_DRAW = 'afterVRenderDraw',\n\n BEFORE_MARK_JOIN = 'beforeMarkJoin',\n AFTER_MARK_JOIN = 'afterMarkJoin',\n BEFORE_MARK_UPDATE = 'beforeMarkUpdate',\n AFTER_MARK_UPDATE = 'afterMarkUpdate',\n BEFORE_MARK_STATE = 'beforeMarkState',\n AFTER_MARK_STATE = 'afterMarkState',\n BEFORE_MARK_ENCODE = 'beforeMarkEncode',\n AFTER_MARK_ENCODE = 'afterMarkEncode',\n\n BEFORE_DO_LAYOUT = 'beforeDoLayout',\n AFTER_DO_LAYOUT = 'afterDoLayout',\n\n BEFORE_MARK_LAYOUT_END = 'beforeMarkLayoutEnd',\n AFTER_MARK_LAYOUT_END = 'afterMarkLayoutEnd',\n\n BEFORE_DO_RENDER = 'beforeDoRender',\n AFTER_DO_RENDER = 'afterDoRender',\n\n BEFORE_MARK_RENDER_END = 'beforeMarkRenderEnd',\n AFTER_MARK_RENDER_END = 'afterMarkRenderEnd',\n\n BEFORE_CREATE_VRENDER_MARK = 'beforeCreateVRenderMark',\n AFTER_CREATE_VRENDER_MARK = 'afterCreateVRenderMark',\n\n BEFORE_ADD_VRENDER_MARK = 'beforeAddVRenderMark',\n AFTER_ADD_VRENDER_MARK = 'afterAddVRenderMark',\n\n AFTER_VRENDER_NEXT_RENDER = 'afterVRenderNextRender',\n\n BEFORE_ELEMENT_UPDATE_DATA = 'beforeElementUpdateData',\n AFTER_ELEMENT_UPDATE_DATA = 'afterElementUpdateData',\n\n BEFORE_ELEMENT_STATE = 'beforeElementState',\n AFTER_ELEMENT_STATE = 'afterElementState',\n\n BEFORE_ELEMENT_ENCODE = 'beforeElementEncode',\n AFTER_ELEMENT_ENCODE = 'afterElementEncode',\n\n ANIMATION_START = 'animationStart',\n ANIMATION_END = 'animationEnd',\n\n ELEMENT_ANIMATION_START = 'elementAnimationStart',\n ELEMENT_ANIMATION_END = 'elementAnimationEnd',\n\n ALL_ANIMATION_START = 'allAnimationStart',\n ALL_ANIMATION_END = 'allAnimationEnd'\n}\n\nexport enum GrammarTypeEnum {\n signal = 'signal',\n data = 'data',\n scale = 'scale',\n coordinate = 'coordinate',\n mark = 'mark'\n}\n\nexport enum InteractionStateEnum {\n active = 'active',\n selected = 'selected',\n highlight = 'highlight',\n blur = 'blur'\n}\n","import { array, isString } from '@visactor/vutils';\nimport type { GlyphDefaultEncoder, IGlyphMeta, GlyphChannelEncoder, MarkType, GlyphFunctionEncoder } from '../types';\nexport class GlyphMeta\n implements IGlyphMeta\n{\n private marks: { [markName: string]: MarkType };\n\n private channelEncoder: { [channel: string]: GlyphChannelEncoder } = {};\n private defaultEncoder: GlyphDefaultEncoder;\n private functionEncoder: GlyphFunctionEncoder;\n private progressiveChannels: string[];\n\n constructor(\n marks: { [markName: string]: MarkType },\n encoders?: { [markName: string]: GlyphChannelEncoder },\n defaultEncoder?: GlyphDefaultEncoder,\n progressiveChannels?: string | string[]\n ) {\n this.marks = marks;\n if (encoders) {\n this.registerChannelEncoder(encoders);\n }\n if (defaultEncoder) {\n this.registerDefaultEncoder(defaultEncoder);\n }\n if (this.progressiveChannels) {\n this.registerProgressiveChannels(progressiveChannels);\n }\n }\n\n getMarks() {\n return this.marks;\n }\n\n registerChannelEncoder(encoders: {\n [markName: string]: GlyphChannelEncoder;\n }): this;\n registerChannelEncoder(channel: string, encoder: GlyphChannelEncoder): this;\n registerChannelEncoder(\n channel: string | { [markName: string]: GlyphChannelEncoder },\n encoder?: GlyphChannelEncoder\n ) {\n if (isString(channel)) {\n this.channelEncoder[channel] = encoder;\n } else {\n Object.assign(this.channelEncoder, channel);\n }\n return this;\n }\n registerFunctionEncoder(encoder: GlyphFunctionEncoder) {\n this.functionEncoder = encoder;\n return this;\n }\n\n registerDefaultEncoder(encoder: GlyphDefaultEncoder) {\n this.defaultEncoder = encoder;\n return this;\n }\n\n registerProgressiveChannels(channels: string | string[]) {\n this.progressiveChannels = array(channels);\n return this;\n }\n\n getChannelEncoder() {\n return this.channelEncoder;\n }\n getFunctionEncoder() {\n return this.functionEncoder;\n }\n\n getDefaultEncoder() {\n return this.defaultEncoder;\n }\n\n getProgressiveChannels() {\n return this.progressiveChannels;\n }\n}\n","import { Bubble } from './bubble';\nimport { isValid, debounce, throttle, get, isFunction } from '@visactor/vutils';\nimport { BASE_EVENTS, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type {\n EventType,\n EventQuery,\n EventHandler,\n EventParamsDefinition,\n IEventDispatcher,\n EventBubbleLevel,\n BaseEventParams,\n EventParams,\n EventFilter,\n EventSourceType,\n InteractionEventParam,\n EventCallback\n} from './interface';\nimport type { VChart } from '../core/vchart';\nimport type { CompilerListenerParameters } from '../compile/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { StringOrNumber } from '../typings';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { IComponent } from '../component/interface';\nimport { Factory as VGrammarFactory } from '@visactor/vgrammar-core';\n\nconst componentTypeMap: Record = {\n cartesianAxis: 'axis',\n 'cartesianAxis-band': 'axis',\n 'cartesianAxis-linear': 'axis',\n 'cartesianAxis-time': 'axis',\n polarAxis: 'axis',\n 'polarAxis-band': 'axis',\n 'polarAxis-linear': 'axis',\n discreteLegend: 'legend',\n continuousLegend: 'legend',\n colorLegend: 'legend',\n sizeLegend: 'legend'\n // 组件的 type 如果没有细化的分类,不需要在这里进行映射\n // label: 'label',\n // markLine: 'markLine',\n // markArea: 'markArea',\n // markPoint: 'markPoint',\n // polarMarkLine: 'polarMarkLine',\n // polarMarkArea: 'polarMarkArea',\n // polarMarkPoint: 'polarMarkPoint',\n // geoMarkPoint: 'geoMarkPoint'\n};\n\nexport class EventDispatcher implements IEventDispatcher {\n globalInstance: VChart;\n\n // view 事件与 window 事件视作为不同类型的事件信息,进行独立的冒泡处理\n private _viewBubbles: Map = new Map();\n private _windowBubbles: Map = new Map();\n private _canvasBubbles: Map = new Map();\n\n private _viewListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _windowListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _canvasListeners: Map void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n\n private _compiler: Compiler;\n\n constructor(vchart: VChart, compiler: Compiler) {\n this.globalInstance = vchart;\n this._compiler = compiler;\n }\n\n register(eType: Evt, handler: EventHandler): this {\n // 解析 query 配置并生成最终 handler 内容\n this._parseQuery(handler);\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler.filter?.source || Event_Source_Type.chart);\n\n if (!bubbles.get(eType)) {\n bubbles.set(eType, new Bubble());\n }\n\n // 挂载事件监听\n const bubble = bubbles.get(eType) as Bubble;\n bubble.addHandler(handler, handler.filter?.level as EventBubbleLevel);\n if (this._isValidEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegate.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n } else if (this._isInteractionEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegateInteractionEvent.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n }\n return this;\n }\n\n unregister(eType: Evt, handler?: EventHandler): this {\n let clean: boolean = false;\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler?.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler?.filter?.source || Event_Source_Type.chart);\n\n if (!handler) {\n const bubble = bubbles.get(eType);\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n } else {\n const bubble = bubbles.get(eType);\n bubble?.removeHandler(handler);\n if (bubble?.getCount() === 0) {\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n }\n\n if ((handler?.wrappedCallback as any)?.cancel) {\n // 取消debounce/throttle事件,释放闭包内部的上下文对象\n (handler.wrappedCallback as any).cancel();\n }\n }\n // 某个事件下所有的监听取消之后删除语法层事件的代理\n if (clean && this._isValidEvent(eType)) {\n const callback = listeners.get(eType) as (params: CompilerListenerParameters) => void;\n this._compiler.removeEventListener(handler?.filter?.source || Event_Source_Type.chart, eType, callback);\n listeners.delete(eType);\n }\n return this;\n }\n\n dispatch(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n // 默认事件类别为 view\n const bubble = this.getEventBubble((params as BaseEventParams).source || Event_Source_Type.chart).get(\n eType\n ) as Bubble;\n // 没有任何监听事件时,bubble 不存在\n if (!bubble) {\n return this;\n }\n\n // 事件冒泡逻辑:Mark -> Model -> Chart -> VChart\n let stopBubble: boolean = false;\n\n if (level) {\n // 如果指定了 level,则直接处理,不进行冒泡\n const handlers = bubble.getHandlers(level);\n stopBubble = this._invoke(handlers, eType, params);\n } else {\n const levels = [\n Event_Bubble_Level.mark,\n Event_Bubble_Level.model,\n Event_Bubble_Level.chart,\n Event_Bubble_Level.vchart\n ];\n let i = 0;\n\n // Mark 级别的事件只包含对语法层代理的基础事件\n while (!stopBubble && i < levels.length) {\n stopBubble = this._invoke(bubble.getHandlers(levels[i]), eType, params);\n i++;\n }\n }\n\n return this;\n }\n\n prevent(eType: Evt, except?: EventCallback): this {\n const eventTypes = ['canvas', 'chart', 'window'] as EventSourceType[];\n eventTypes.forEach(type => {\n const bubble = this.getEventBubble(type).get(eType);\n if (bubble) {\n bubble.getAllHandlers().forEach(handler => {\n if (!except || handler.callback !== except) {\n bubble.preventHandler(handler);\n }\n });\n }\n });\n return this;\n }\n\n allow(eType: Evt): this {\n const eventTypes = ['canvas', 'chart', 'window'] as EventSourceType[];\n eventTypes.forEach(type => {\n const bubble = this.getEventBubble(type).get(eType);\n if (bubble) {\n bubble.getAllHandlers().forEach(handler => bubble.allowHandler(handler));\n }\n });\n return this;\n }\n\n clear(): void {\n const types = [Event_Source_Type.chart, Event_Source_Type.window, Event_Source_Type.canvas];\n\n types.forEach(type => {\n const listeners = this.getEventListeners(type);\n for (const entry of listeners.entries()) {\n this._compiler.removeEventListener(type, entry[0], entry[1]);\n }\n listeners.clear();\n });\n\n [this._viewBubbles, this._windowBubbles, this._canvasBubbles].forEach(bubbles => {\n for (const bubble of bubbles.values()) {\n bubble.release();\n }\n bubbles.clear();\n });\n }\n\n release(): void {\n this.clear();\n this.globalInstance = null;\n this._compiler = null;\n }\n\n /**\n * 基于转换后的事件筛选配置过滤需要调用的 handler\n */\n private _filter(filter: EventFilter, evt: Evt, params: EventParamsDefinition[Evt]): boolean {\n if (isFunction(filter.filter) && !filter.filter(params)) {\n return false;\n }\n\n // 事件 level 不需要筛选,在冒泡流程中已经处理了 level 的逻辑\n if (filter.nodeName && get(params, 'node.name') !== filter.nodeName) {\n return false;\n }\n\n if (filter.markName && (params as BaseEventParams)?.mark?.name !== filter.markName) {\n // 对于 markName 的筛选需要包含所有父级 mark 的 name\n return false;\n }\n\n let modelType = params.model?.type;\n if (componentTypeMap[modelType]) {\n modelType = componentTypeMap[modelType];\n }\n if (filter.type && modelType !== filter.type) {\n return false;\n }\n\n // 如果配置了 level 为 'mark' 并且没有配置 type,则只在事件参数中包含了 mark 时才触发\n if (filter.level === 'mark' && !filter.type && !(params as BaseEventParams)?.mark) {\n return false;\n }\n\n // 如果配置了 level 为 'model' 并且没有配置 type,则只在事件参数中包含了 model 时才触发\n if (filter.level === 'model' && !filter.type && !(params as BaseEventParams)?.model) {\n return false;\n }\n\n if (isValid(filter.userId) && params.model?.userId !== filter.userId) {\n return false;\n }\n\n return true;\n }\n\n private _prepareParams(\n filter: EventFilter,\n params: EventParamsDefinition[Evt]\n ): EventParamsDefinition[Evt] {\n // 如果针对于 mark 做了筛选,则事件参数转为筛选器制定的父级 mark\n if (filter.markName && params.mark && (params as BaseEventParams).itemMap) {\n const markId = params.mark.getProductId();\n const item = (params as BaseEventParams).itemMap.get(markId);\n const datum = item?.getDatum();\n return { ...params, item, datum };\n }\n return { ...params };\n }\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegate = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const model = (isValid(listenerParams.modelId) && chart?.getModelById(listenerParams.modelId)) || undefined;\n const mark = (isValid(listenerParams.markId) && chart?.getMarkById(listenerParams.markId)) || null;\n\n // FIXME: 这里操作的应当是场景树结构,与 vgrammar 结构无关\n // 遍历取到所有父级的 mark 以支持子元素响应父元素事件\n const itemMap = new Map();\n let targetMark: any = listenerParams.item?.mark;\n if (targetMark && isValid(targetMark.id())) {\n itemMap.set(targetMark.id(), listenerParams.item);\n }\n while (targetMark?.elements) {\n const id = targetMark.id();\n // 由于父级的 markName 可能重复,因此只取最近的父级 mark\n if (isValid(id) && !itemMap.has(id)) {\n itemMap.set(id, targetMark.elements[0]);\n }\n targetMark = targetMark.group;\n }\n\n const node = get(listenerParams.event, 'target');\n\n let datum = listenerParams.datum;\n if (model && model.modelType === 'component') {\n datum = (model as IComponent).getDatum(node) ?? datum;\n }\n\n const params: BaseEventParams = {\n event: listenerParams.event,\n item: listenerParams.item,\n source: listenerParams.source,\n datum,\n itemMap,\n chart,\n model,\n mark: mark ?? undefined,\n node: get(listenerParams.event, 'target')\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegateInteractionEvent = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const event = listenerParams.event;\n let items: IElement[] = null;\n\n if ((event as any).elements) {\n items = (event as any).elements;\n }\n const params: InteractionEventParam = {\n event: listenerParams.event,\n chart,\n items,\n datums:\n items &&\n items.map(item => {\n return item.getDatum();\n })\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 调用相应事件监听下的 handlers\n */\n private _invoke(\n handlers: EventHandler[],\n type: EventType,\n params: EventParamsDefinition[Evt]\n ): boolean {\n const result = handlers.map(handler => {\n const filter = handler.filter as EventFilter;\n if (!handler.prevented && (!handler.query || this._filter(filter, type, params))) {\n const callback = handler.wrappedCallback || handler.callback;\n const stopBubble = callback.call(null, this._prepareParams(filter, params));\n const doStopBubble = stopBubble ?? handler.query?.consume;\n if (doStopBubble) {\n (params as BaseEventParams).event?.stopPropagation();\n (params as BaseEventParams).event?.preventDefault();\n }\n return !!doStopBubble;\n }\n return undefined;\n });\n // 如果某个事件回调阻止了冒泡,则阻止更高级别事件的调用过程\n return result.some(r => r === true);\n }\n\n /**\n * 依据事件 query 得到事件冒泡层级\n */\n private _getQueryLevel(query: EventQuery | null): EventBubbleLevel {\n // 事件默认监听在 vchart 层\n if (!query) {\n return Event_Bubble_Level.vchart;\n }\n if (query.level) {\n return query.level;\n }\n if (isValid(query.id)) {\n return Event_Bubble_Level.model;\n }\n\n return Event_Bubble_Level.vchart;\n }\n\n /**\n * 将用户 query 配置转换为最终事件筛选参数\n */\n private _parseQuery(handler: EventHandler): EventHandler {\n const query = handler.query;\n // 处理 query 带来的函数封装\n if (query?.throttle) {\n handler.wrappedCallback = throttle(handler.callback, query.throttle);\n } else if (query?.debounce) {\n handler.wrappedCallback = debounce(handler.callback, query.debounce);\n }\n let level = this._getQueryLevel(query);\n let type: string | null = null;\n let source: EventSourceType = Event_Source_Type.chart;\n let nodeName: string | null = null;\n let markName: string | null = null;\n let userId: StringOrNumber | null = null;\n\n if (query?.nodeName) {\n nodeName = query.nodeName;\n }\n\n if (query?.markName) {\n markName = query.markName;\n }\n\n if (query?.type && (level === Event_Bubble_Level.model || level === Event_Bubble_Level.mark)) {\n type = query.type;\n }\n if (query?.source) {\n source = query.source;\n }\n\n if (isValid(query?.id)) {\n userId = query?.id;\n level = Event_Bubble_Level.model; // 如果用户配置了 id,那么默认 level 为 model\n }\n handler.filter = {\n level,\n markName,\n type,\n source,\n nodeName,\n userId,\n filter: query?.filter ?? null\n };\n return handler;\n }\n\n private getEventBubble(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewBubbles;\n case Event_Source_Type.window:\n return this._windowBubbles;\n case Event_Source_Type.canvas:\n return this._canvasBubbles;\n default:\n return this._viewBubbles;\n }\n }\n\n private getEventListeners(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewListeners;\n case Event_Source_Type.window:\n return this._windowListeners;\n case Event_Source_Type.canvas:\n return this._canvasListeners;\n default:\n return this._viewListeners;\n }\n }\n\n private _isValidEvent(eType: string) {\n return BASE_EVENTS.includes(eType) || (Object.values(VGRAMMAR_HOOK_EVENT) as string[]).includes(eType);\n }\n\n private _isInteractionEvent(eType: string) {\n let interactionType: string;\n\n return (\n eType &&\n ((interactionType = eType.split(':')[0]), interactionType) &&\n VGrammarFactory.hasInteraction(interactionType)\n );\n }\n}\n","export default function(x) {\n return x;\n}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\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 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","export default function noop() {}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n areaRingSum = 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.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\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 noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, 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\nexport default boundsStream;\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 {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 adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = 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.reset();\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","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return 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._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\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 var 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 return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : 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 return path.projection(projection).context(context);\n}\n","/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexport default clone;\n","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 { getCoords } from \"@turf/invariant\";\n/**\n * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.\n *\n * @name booleanClockwise\n * @param {Feature|LineString|Array>} line to be evaluated\n * @returns {boolean} true/false\n * @example\n * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);\n * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);\n *\n * turf.booleanClockwise(clockwiseRing)\n * //=true\n * turf.booleanClockwise(counterClockwiseRing)\n * //=false\n */\nexport default function booleanClockwise(line) {\n var ring = getCoords(line);\n var sum = 0;\n var i = 1;\n var prev;\n var cur;\n while (i < ring.length) {\n prev = cur || ring[0];\n cur = ring[i];\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n i++;\n }\n return sum > 0;\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","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 clone from '@turf/clone';\nimport booleanClockwise from '@turf/boolean-clockwise';\nimport { featureEach, geomEach } from '@turf/meta';\nimport { getCoords } from '@turf/invariant';\nimport { isObject, featureCollection } from '@turf/helpers';\n\n/**\n * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).\n *\n * @name rewind\n * @param {GeoJSON} geojson input GeoJSON Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.reverse=false] enable reverse winding\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} rewind Polygon\n * @example\n * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);\n *\n * var rewind = turf.rewind(polygon);\n *\n * //addToMap\n * var addToMap = [rewind];\n */\nfunction rewind(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var reverse = options.reverse || false;\n var mutate = options.mutate || false;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof reverse !== \"boolean\")\n throw new Error(\" must be a boolean\");\n if (typeof mutate !== \"boolean\")\n throw new Error(\" must be a boolean\");\n\n // prevent input mutation\n if (mutate === false) geojson = clone(geojson);\n\n // Support Feature Collection or Geometry Collection\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"FeatureCollection\":\n featureEach(geojson, function (feature) {\n featureEach(rewindFeature(feature, reverse), function (result) {\n results.push(result);\n });\n });\n return featureCollection(results);\n }\n // Support Feature or Geometry Objects\n return rewindFeature(geojson, reverse);\n}\n\n/**\n * Rewind\n *\n * @private\n * @param {Geometry|Feature} geojson Geometry or Feature\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {Geometry|Feature} rewind Geometry or Feature\n */\nfunction rewindFeature(geojson, reverse) {\n var type = geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n\n // Support all GeoJSON Geometry Objects\n switch (type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"LineString\":\n rewindLineString(getCoords(geojson), reverse);\n return geojson;\n case \"Polygon\":\n rewindPolygon(getCoords(geojson), reverse);\n return geojson;\n case \"MultiLineString\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindLineString(lineCoords, reverse);\n });\n return geojson;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function (lineCoords) {\n rewindPolygon(lineCoords, reverse);\n });\n return geojson;\n case \"Point\":\n case \"MultiPoint\":\n return geojson;\n }\n}\n\n/**\n * Rewind LineString - outer ring clockwise\n *\n * @private\n * @param {Array>} coords GeoJSON LineString geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindLineString(coords, reverse) {\n if (booleanClockwise(coords) === reverse) coords.reverse();\n}\n\n/**\n * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.\n *\n * @private\n * @param {Array>>} coords GeoJSON Polygon geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindPolygon(coords, reverse) {\n // outer ring\n if (booleanClockwise(coords[0]) !== reverse) {\n coords[0].reverse();\n }\n // inner rings\n for (var i = 1; i < coords.length; i++) {\n if (booleanClockwise(coords[i]) === reverse) {\n coords[i].reverse();\n }\n }\n}\n\nexport default rewind;\n","import { flattenEach } from '@turf/meta';\nimport { featureCollection } from '@turf/helpers';\n\n/**\n * Flattens any {@link GeoJSON} to a {@link FeatureCollection} inspired by [geojson-flatten](https://github.com/tmcw/geojson-flatten).\n *\n * @name flatten\n * @param {GeoJSON} geojson any valid GeoJSON Object\n * @returns {FeatureCollection} all Multi-Geometries are flattened into single Features\n * @example\n * var multiGeometry = turf.multiPolygon([\n * [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],\n * [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],\n * [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]\n * ]);\n *\n * var flatten = turf.flatten(multiGeometry);\n *\n * //addToMap\n * var addToMap = [flatten]\n */\nfunction flatten(geojson) {\n if (!geojson) throw new Error(\"geojson is required\");\n\n var results = [];\n flattenEach(geojson, function (feature) {\n results.push(feature);\n });\n return featureCollection(results);\n}\n\nexport default flatten;\n","import { geoPath } from 'd3-geo';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport trufRewind from '@turf/rewind';\nimport flatten from '@turf/flatten';\nimport { isObject } from '@visactor/vutils';\n\nconst geoPathInstance = geoPath();\nexport interface IGeoJSONOptions {\n centroid?: boolean;\n name?: boolean;\n bbox?: boolean;\n rewind?:\n | boolean\n | {\n reverse?: boolean;\n };\n}\n\nexport const DEFAULT_GEOJSON_OPTIONS = {\n centroid: false,\n name: false,\n bbox: false,\n rewind: false\n};\nexport const MultiToSingle = (feature: any) => {\n if (feature.geometry.type.startsWith('Multi')) {\n const f = flatten(feature).features[0];\n return { ...f, ...f.properties };\n }\n return { ...feature, ...feature.properties };\n};\nexport const flattenFeature = (data: any[]) => {\n const featuresArr: any[] = [];\n data.forEach((item: any) => {\n if (item.type === 'FeatureCollection') {\n // featureCollection\n item.features.forEach((feature: any) => {\n featuresArr.push(MultiToSingle(feature));\n });\n } else {\n // feature\n featuresArr.push(MultiToSingle(item));\n }\n });\n return featuresArr;\n};\n\n/**\n * 解析geojson\n * @param data\n * @param _options\n * @param dataView\n * @returns\n */\nexport const geoJSONParser: Parser = (data: any, options: IGeoJSONOptions = {}, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n\n const mergeOptions: IGeoJSONOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, options);\n\n const { centroid, name, bbox, rewind } = mergeOptions;\n if (Array.isArray(data)) {\n return flattenFeature(data);\n }\n let features: any[] = data.features;\n if (rewind) {\n features = trufRewind(data, { reverse: isObject(rewind) ? rewind.reverse : true }).features;\n }\n features.forEach(feature => {\n if (centroid) {\n const centroid = geoPathInstance.centroid(feature);\n feature.centroidX = centroid[0];\n feature.centroidY = centroid[1];\n }\n\n if (name) {\n feature.name = feature.properties.name;\n }\n\n if (bbox) {\n const bbox = geoPathInstance.bounds(feature);\n feature.bbox = bbox;\n }\n });\n\n data.features = features;\n return data;\n};\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import { feature } from 'topojson-client';\nimport type { Topology } from 'topojson-specification';\nimport { isString } from '@visactor/vutils';\nimport { DATAVIEW_TYPE } from '../../constants';\nimport type { DataView } from '../../data-view';\nimport type { Parser } from '..';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { IGeoJSONOptions } from './geojson';\nimport { DEFAULT_GEOJSON_OPTIONS, geoJSONParser } from './geojson';\n\nexport interface ITopoJsonParserOptions extends IGeoJSONOptions {\n object: string; // TopoJSON 相当于多个 GeoJSON 合并起来做了压缩,其中每一个 object 都相当于一份 GeoJSON 数据,指定 object 就是从中提取一份 Geo 数据\n}\n\nconst DEFAULT_TOPOJSON_OPTIONS = {};\n/**s\n * topojson 数据解析\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const topoJSONParser: Parser = (data: Topology, options: ITopoJsonParserOptions, dataView: DataView) => {\n dataView.type = DATAVIEW_TYPE.GEO;\n const mergeOptions = mergeDeepImmer(DEFAULT_GEOJSON_OPTIONS, DEFAULT_TOPOJSON_OPTIONS, options);\n const { object } = mergeOptions;\n if (!isString(object)) {\n throw new TypeError('Invalid object: must be a string!');\n }\n const geoData = feature(data, data.objects[object]);\n return geoJSONParser(geoData, mergeOptions, dataView);\n};\n","import geoSimplify from 'simplify-geojson';\nimport type { FeatureCollection } from '@turf/helpers';\nimport { mergeDeepImmer } from '../../utils/js';\nimport type { Transform } from '..';\n\nexport interface ISimplifyOptions {\n tolerance?: number; // 简化容差,默认0.01\n}\n\nconst DEFAULT_SIMPLIFY_OPTIONS: ISimplifyOptions = {\n tolerance: 0.01\n};\n/**\n * 简化\n * @param data\n * @param options\n * @returns\n */\nexport const simplify: Transform = (data: FeatureCollection, options?: ISimplifyOptions): FeatureCollection => {\n const mergeOptions = mergeDeepImmer(DEFAULT_SIMPLIFY_OPTIONS, options);\n const { tolerance } = mergeOptions;\n return geoSimplify(data, tolerance);\n};\n","import type { DataSet, Parser, Transform } from '@visactor/vdataset';\n\nexport function registerDataSetInstanceTransform(dataSet: DataSet, name: string, transform: Transform) {\n if (!dataSet.getTransform(name)) {\n dataSet.registerTransform(name, transform);\n }\n}\n\nexport function registerDataSetInstanceParser(dataSet: DataSet, name: string, parse: Parser) {\n if (!dataSet.getParser(name)) {\n dataSet.registerParser(name, parse);\n }\n}\n","import { cloneDeep } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n\nfunction copyOneDataView(d: DataView, deep = false) {\n let _deep = deep;\n if (d.latestData instanceof DataView) {\n _deep = false;\n }\n if (_deep) {\n return cloneDeep(d.latestData);\n }\n\n return d.latestData && d.latestData.slice();\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const copyDataView = (data: Array, options?: ICopyDataViewOption) => {\n if (data.length === 0) {\n return [];\n }\n if (data.length === 1) {\n return copyOneDataView(data[0], options?.deep);\n }\n return data.map(d => copyOneDataView(d, options?.deep));\n};\n\nexport interface ICopyDataViewOption {\n deep?: boolean;\n}\n","import { warn } from '../util/debug';\nimport { isString, cloneDeep } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView } from '@visactor/vdataset';\nimport type { IDataViewOptions, IFields, ITransformOptions } from '@visactor/vdataset';\nimport type { IDataValues, SheetParseOptions } from '../typings/spec/common';\nimport { registerDataSetInstanceTransform } from './register';\nimport { copyDataView } from './transforms/copy-data-view';\nimport type { IParserOptions } from '@visactor/vdataset';\n\nexport function initializeData() {\n // todo\n}\n\nexport function initCSVData() {\n // todo\n}\n\nexport function initData() {\n // todo\n}\n\nexport function initFoldData() {\n // todo\n}\n\nexport function dataViewFromDataView(rawData: DataView, dataSet?: DataSet, op?: IDataViewOptions) {\n dataSet = dataSet instanceof DataSet ? dataSet : rawData.dataSet;\n registerDataSetInstanceTransform(dataSet, 'copyDataView', copyDataView);\n const viewData = new DataView(dataSet, op);\n viewData.parse([rawData], {\n type: 'dataview'\n });\n viewData.transform({\n type: 'copyDataView',\n level: TransformLevel.copyDataView\n });\n return viewData;\n}\n\n/**\n * 将数据实例化为 DataView\n * @param data 数据\n * @param dataSet 数据集\n * @returns\n */\nexport function dataToDataView(data: DataView | IDataValues, dataSet: DataSet, sourceDataViews: DataView[] = []) {\n if (data instanceof DataView) {\n return data;\n }\n\n const { id, values = [], fromDataIndex, fromDataId, transforms = [] } = data;\n const parser = (data.parser ? cloneDeep(data.parser) : { clone: true }) as IParserOptions;\n const fields = cloneDeep(data.fields);\n // set parser.clone default value to true\n parser.clone = !(parser.clone === false);\n let dataView: DataView;\n const existDataView = sourceDataViews.find(dv => dv.name === id);\n if (existDataView) {\n dataView = existDataView;\n } else {\n const initOption: IDataViewOptions = { name: id };\n // fields 支持在dataView初始化参数中传入\n if (fields) {\n initOption.fields = fields as IFields;\n }\n dataView = new DataView(dataSet, initOption);\n if (typeof fromDataId === 'string') {\n // 使用id查找上游dataview\n const fromDataView = sourceDataViews.find(dv => dv.name === fromDataId);\n if (!fromDataView) {\n warn(`no data matches fromDataId ${fromDataId}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (typeof fromDataIndex === 'number') {\n // 使用index查找上游dataview\n const fromDataView = sourceDataViews[fromDataIndex];\n if (!fromDataView) {\n warn(`no data matches fromDataIndex ${fromDataIndex}`);\n return null;\n }\n\n dataView.parse([fromDataView], {\n type: 'dataview'\n });\n dataView.transform({\n type: 'copyDataView'\n });\n } else if (Array.isArray(values)) {\n dataView.parse(values, parser);\n } else if (isString(values) && (!parser || ['csv', 'dsv', 'tsv'].includes((parser as SheetParseOptions).type))) {\n // 内置 csv parser\n dataView.parse(values, (parser as SheetParseOptions) ?? { type: 'csv' });\n } else {\n // 如果 values 不符合要求,则默认设置为 [],同时打印错误信息\n dataView.parse([]);\n warn('values should be array');\n }\n // 处理transform\n if (transforms && transforms.length) {\n transforms.forEach((transform: ITransformOptions) => {\n if (dataSet.getTransform(transform.type)) {\n dataView.transform(transform);\n }\n });\n }\n }\n\n return dataView;\n}\n\nexport function updateDataViewInData(dataView: DataView, data: IDataValues, forceMerge: boolean) {\n if (!dataView) {\n return;\n }\n if (data.fields) {\n dataView.setFields(data.fields as any, forceMerge);\n }\n dataView.parseNewData(data.values, data.parser as any);\n}\n\nexport enum TransformLevel {\n copyDataView = -10,\n\n treemapFilter = -8,\n treemapFlatten = -7,\n\n dotObjFlat = -7,\n linkDotInfo = -7,\n sankeyLayout = -7,\n\n dataZoomFilter = -6,\n legendFilter = -5\n}\n","import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType, T>(\n signal: any\n): signal is SignalFunction {\n return !isFunction(signal) && !!(signal as SignalFunction)?.callback;\n}\n\nexport function parseFunctionType, T>(\n spec: GenericFunctionType | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction)?.callback;\n}\n\nexport function invokeFunctionType, T>(\n spec: GenericFunctionType | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction).callback) {\n if (element) {\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType(spec: ParameterFunctionType, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction, T>).callback) {\n return (spec as SignalFunction, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = (field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field as (datum: T) => symbol | string;\n }\n return (datum: T) => datum[field as string | symbol];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n","export type { MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport type { ICompilable } from '../compile/interface';\n\nexport enum AnimationStateEnum {\n appear = 'appear',\n disappear = 'disappear',\n enter = 'enter',\n update = 'update',\n state = 'state',\n exit = 'exit',\n normal = 'normal',\n // for hack\n none = 'none'\n}\n\nexport type IAnimationState = keyof typeof AnimationStateEnum;\n\nexport interface IAnimateState {\n animationState: { callback: (datum: any, element: any) => AnimationStateEnum };\n}\n\nexport interface IAnimate extends ICompilable {\n id: number;\n updateAnimateState: (state: AnimationStateEnum, noRender?: boolean) => void;\n getAnimationStateSignalName: () => string;\n // TODO: animation control\n // pause: () => void;\n // resume: () => void;\n}\n\nexport interface ICartesianGroupAnimationParams {\n direction: () => 'x' | 'y';\n orient: () => 'positive' | 'negative';\n width: () => number;\n height: () => number;\n}\n","import { isFunction, isObject } from '@visactor/vutils';\nimport type { IGrammarBase } from '../types';\nimport { isGrammar } from './util';\n\nexport const parseOptionValue = (value: IGrammarBase | any, params: any) => {\n if (isGrammar(value)) {\n return value.output();\n } else if (value && isObject(value)) {\n if (isFunction(value.callback)) {\n return (datum: any) => {\n return value.callback(datum, params);\n };\n }\n\n if (isFunction(value.value)) {\n return value.value(params);\n }\n\n return value;\n }\n\n return value;\n};\n\nexport const parseOptions = (options: Record | Array, params: any) => {\n if (!options) {\n return options;\n }\n\n if (isObject(options)) {\n return Object.keys(options).reduce((res, key) => {\n const option = options[key];\n\n res[key] = parseOptionValue(option, params);\n\n return res;\n }, {});\n }\n\n return (options as Array).map(option => parseOptionValue(option, params));\n};\n","import { array, EventEmitter, isNil, isString, isValid } from '@visactor/vutils';\nimport type { GrammarType, IGrammarBase, IView, IGrammarTask, BaseEventHandler } from '../types';\nimport { parseOptions } from '../parse/option';\nimport { parseFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\n\nlet grammarBaseId = -1;\n\nexport abstract class GrammarBase extends EventEmitter implements IGrammarBase {\n readonly grammarType: GrammarType;\n\n readonly uid: number;\n protected _id: string;\n protected _name: string;\n\n protected spec: any = {};\n\n view: IView;\n rank: number;\n\n // FIXME: adapt current implementation of dataflow, refactor after dataflow design is finished\n grammarSource: IGrammarBase;\n references: Map = new Map();\n targets: IGrammarBase[] = [];\n transforms: IGrammarTask[] = [];\n\n constructor(view: IView) {\n super();\n this.view = view;\n this.uid = ++grammarBaseId;\n }\n\n parse(spec: any): this {\n this.id(spec.id);\n this.name(spec.name);\n this.depend(spec.dependency);\n return this;\n }\n\n depend(grammars: IGrammarBase[] | IGrammarBase | string[] | string) {\n if (this.spec?.dependency) {\n const lastGrammars = array(this.spec.dependency).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.detach(lastGrammars);\n }\n this.spec.dependency = grammars;\n const currentGrammars = array(grammars).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.attach(currentGrammars);\n\n this.commit();\n return this;\n }\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n emit>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n this.view?.emit?.(event, ...args);\n return super.emit(event, ...args);\n }\n\n emitGrammarEvent>(\n event: T,\n ...args: EventEmitter.EventArgs\n ): boolean {\n return super.emit(event, ...args);\n }\n\n abstract evaluate(upstream: any, parameters: any): this;\n abstract output(): any;\n\n evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n set(value: any): boolean {\n // do nothing\n return false;\n }\n\n id(): string;\n id(id: string): this;\n id(id?: string) {\n if (arguments.length) {\n this.view.grammars.unrecord(this);\n this._id = id;\n this.view.grammars.record(this);\n return this;\n }\n return this._id;\n }\n\n name(): string;\n name(name: string): this;\n name(name?: string) {\n if (arguments.length) {\n this._name = name;\n return this;\n }\n return this._name;\n }\n\n attach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n if (isNil(reference)) {\n return;\n }\n if (!ref.targets.includes(this)) {\n ref.targets.push(this);\n }\n this.references.set(ref, (this.references.get(ref) ?? 0) + count);\n });\n return this;\n }\n\n detach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n const refCount = this.references.get(ref) - count;\n if (refCount > 0) {\n this.references.set(ref, refCount - 1);\n } else {\n this.references.delete(ref);\n if (ref.targets.includes(this)) {\n ref.targets = ref.targets.filter(target => target !== this);\n }\n }\n });\n return this;\n }\n\n detachAll() {\n this.references.forEach((count, ref) => {\n this.detach(ref, count);\n });\n }\n\n link(source: IGrammarBase) {\n this.grammarSource = source;\n }\n\n run() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n return this.evaluate(upstream, parameters);\n }\n\n commit() {\n this.view.commit(this);\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n getSpec() {\n return this.spec;\n }\n\n reuse(grammar: IGrammarBase) {\n return this;\n }\n\n clear() {\n this.spec = null;\n this.view = null;\n }\n\n release() {\n this.clear();\n }\n\n protected setFunctionSpec(spec: T | Nil, specField: string) {\n if (!isNil(this.spec[specField])) {\n this.detach(parseFunctionType(this.spec[specField], this.view));\n }\n this.spec[specField] = spec;\n this.attach(parseFunctionType(spec, this.view));\n this.commit();\n return this;\n }\n}\n","import { isArray, isFunction, isNil } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { IGrammarBase, IGrammarTask, IView, TransformSpec, TransformSpecValue } from '../types';\nimport { isSignal, parseFunctionType, parseReference } from './util';\n\nconst parseSimpleOptionValue = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (key === 'callback' && isFunction(transformSpecValue)) {\n return {\n references: [],\n value: {\n callback: transformSpecValue,\n dependency: []\n }\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).data)) {\n // { data: 'someData' }\n const grammarInstance = view.getDataById((transformSpecValue as TransformSpecValue).data);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).customized)) {\n // { customized: 'proj' }\n const grammarInstance = view.getCustomizedById((transformSpecValue as TransformSpecValue).customized);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (!isNil((transformSpecValue as TransformSpecValue).scale)) {\n // { scale: 'scaleX' }\n const grammarInstance = view.getScaleById((transformSpecValue as TransformSpecValue).scale);\n return {\n references: [grammarInstance],\n value: grammarInstance\n };\n }\n\n if (isSignal(transformSpecValue)) {\n const references = parseFunctionType(transformSpecValue, view);\n\n return {\n references,\n value: transformSpecValue.callback\n ? {\n value: transformSpecValue.callback,\n dependency: references\n }\n : references?.[0] ?? transformSpecValue\n };\n }\n\n return { value: transformSpecValue };\n};\n\nconst parseTransformOption = (key: string, transformSpecValue: TransformSpecValue, view: IView) => {\n if (isNil(transformSpecValue)) {\n return { value: transformSpecValue };\n }\n\n if (isArray(transformSpecValue)) {\n const values = transformSpecValue.map((v: any) => parseSimpleOptionValue(key, v, view));\n\n return {\n references: values.reduce((res: any[], val: any) => {\n if (val.references) {\n res.concat(val.references);\n }\n\n return res;\n }, []),\n value: values.map((entry: any) => entry.value)\n };\n }\n\n return parseSimpleOptionValue(key, transformSpecValue, view);\n};\n\nconst parseTransform = (transformSpec: TransformSpec, view: IView) => {\n const transformDef = Factory.getTransform(transformSpec.type);\n\n if (!transformDef) {\n return;\n }\n\n const options = {};\n let references: IGrammarBase[] = [];\n\n Object.keys(transformSpec).forEach(specKey => {\n // we dont need to parse type\n if (specKey === 'type') {\n return;\n }\n\n const specValue = transformSpec[specKey];\n if (specKey === 'dependency') {\n if (specValue?.length) {\n references = references.concat(parseReference(specValue, view));\n }\n return;\n }\n const res = parseTransformOption(specKey, specValue, view);\n\n if (res) {\n if (res.references?.length) {\n references = references.concat(res.references);\n }\n\n options[specKey] = res.value;\n }\n });\n\n return {\n markPhase: transformDef.markPhase,\n transform: transformDef.transform,\n canProgressive: transformDef.canProgressive,\n type: transformDef.type,\n options,\n references\n };\n};\n\nexport const parseTransformSpec = (spec: TransformSpec[], view: IView) => {\n if (spec?.length) {\n const transforms: IGrammarTask[] = [];\n let refs: IGrammarBase[] = [];\n spec.forEach(transformSpec => {\n const transform = parseTransform(transformSpec, view);\n\n if (transform) {\n if (transform.references?.length) {\n refs = refs.concat(transform.references);\n }\n\n transforms.push(transform);\n }\n });\n return { transforms, refs };\n }\n\n return null;\n};\n","import type { Parser } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, DataView, csvParser, dsvParser, tsvParser } from '@visactor/vdataset';\nimport type { DataFormatSpec, Datum } from '../types';\nimport { array, isString } from '@visactor/vutils';\n\nconst jsonParser: Parser = (data: string, options: any = {}, dataView: DataView) => {\n if (!isString(data)) {\n return array(data);\n }\n try {\n return array(JSON.parse(data));\n } catch (e) {\n return [];\n }\n};\n\nconst parsers: Record = {\n csv: csvParser,\n dsv: dsvParser,\n tsv: tsvParser,\n json: jsonParser\n};\n\nexport const parseFormat = (data: any, format?: DataFormatSpec): Datum[] => {\n if (!format || !parsers[format.type]) {\n return array(data);\n }\n const options = format.type === 'dsv' ? { delimiter: format.delimiter } : {};\n return parsers[format.type](data, options, new DataView(new DataSet()));\n};\n","import { array, isNil } from '@visactor/vutils';\nimport type {\n IGrammarBase,\n DataSpec,\n IData,\n GrammarType,\n DataFormatSpec,\n IView,\n IGrammarTask,\n TransformSpec,\n ParameterFunctionType,\n IDataFilter\n} from '../types';\nimport { GrammarBase } from './grammar-base';\nimport { invokeParameterFunctionType, isGrammar, parseFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\nimport { parseFormat } from '../util/data';\n\nexport class Data extends GrammarBase implements IData {\n readonly grammarType: GrammarType = 'data';\n\n protected spec: DataSpec = {};\n\n private _dataIDKey = `VGRAMMAR_DATA_ID_KEY_${this.uid}`;\n\n /** 原始输入数据 */\n private _input: any[];\n\n /** 计算后的数据 */\n private _values: any[];\n\n private _isLoaded?: boolean;\n private _loadTasks: IGrammarTask[] = [];\n private _postFilters: IDataFilter[] = [];\n\n constructor(view: IView, values?: any, format?: DataFormatSpec) {\n super(view);\n this._loadTasks = [];\n\n if (!isNil(values)) {\n this.values(values, format);\n // this.ingest({ values });\n }\n }\n\n parse(spec: DataSpec) {\n super.parse(spec);\n this._isLoaded = false;\n\n this.source(spec.source, spec.format, false);\n this.url(spec.url, spec.format, false);\n this.values(spec.values, spec.format, false);\n this.transform(spec.transform);\n\n this.parseLoad(spec);\n\n this.commit();\n return this;\n }\n\n private parseDataSource(spec: DataSpec) {\n const refs: IGrammarBase[] = [];\n const transforms: IGrammarTask[] = [];\n\n const formatRef = spec.format ? parseFunctionType(spec.format, this.view)[0] : null;\n if (formatRef) {\n refs.push(formatRef);\n }\n\n if (spec.values) {\n const valuesRef = parseFunctionType(spec.values, this.view)[0];\n\n if (valuesRef) {\n refs.push(valuesRef);\n }\n\n transforms.push({\n type: 'ingest',\n transform: this.ingest,\n isRawOptions: true,\n options: {\n values: spec.values,\n format: spec.format\n }\n });\n } else if (spec.url) {\n const urlRef = parseFunctionType(spec.url, this.view)[0];\n if (urlRef) {\n refs.push(urlRef);\n }\n\n transforms.push({\n type: 'load',\n transform: this.load,\n options: {\n url: urlRef ?? spec.url,\n format: formatRef ?? spec.format\n }\n });\n } else if (spec.source) {\n const upstreamData: IData[] = [];\n\n array(spec.source).forEach(sourceId => {\n const sourceData = isGrammar(sourceId) ? sourceId : this.view.getDataById(sourceId);\n\n if (sourceData) {\n refs.push(sourceData);\n upstreamData.push(sourceData as IData);\n }\n });\n\n if (upstreamData.length) {\n transforms.push({\n type: 'relay',\n transform: this.relay,\n options: upstreamData\n });\n this.grammarSource = upstreamData[0];\n }\n }\n return { transforms, refs };\n }\n\n private ingest = (options: { values?: any; format?: ParameterFunctionType }) => {\n const format = invokeParameterFunctionType(options.format, this.parameters());\n this._input = parseFormat(options.values, format);\n return this._input;\n };\n\n private load = (options: { values: any; format?: ParameterFunctionType }) => {\n if ((options as { values: any; format?: ParameterFunctionType }).values) {\n return this.ingest(options as { values: any; format?: ParameterFunctionType });\n }\n };\n\n private relay = (options: any[]) => {\n return options[0];\n };\n\n evaluate(upstream: any, parameters: any) {\n this.view.emit(HOOK_EVENT.BEFORE_EVALUATE_DATA);\n const tasks = this._isLoaded ? this.transforms : this._loadTasks.concat(this.transforms);\n if (this.grammarSource) {\n this._input = upstream;\n }\n\n const values = this.evaluateTransform(tasks, this._input, parameters);\n const filteredValues = this._evaluateFilter(values, parameters);\n this.setValues(filteredValues);\n\n this._isLoaded = true;\n this.view.emit(HOOK_EVENT.AFTER_EVALUATE_DATA);\n\n return this;\n }\n\n output() {\n return this._values;\n }\n\n getDataIDKey() {\n return this._dataIDKey;\n }\n\n values(values: any | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { values, format });\n if (!isNil(values)) {\n spec.url = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n url(url: ParameterFunctionType | Nil, format?: ParameterFunctionType, load: boolean = true) {\n const spec = Object.assign({}, this.spec, { url, format });\n if (!isNil(url)) {\n spec.values = undefined;\n spec.source = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n source(\n source: string | string[] | IData | IData[] | Nil,\n format?: ParameterFunctionType,\n load: boolean = true\n ) {\n const spec = Object.assign({}, this.spec, { source, format });\n if (!isNil(source)) {\n spec.values = undefined;\n spec.url = undefined;\n }\n return load ? this.parseLoad(spec) : this;\n }\n\n private parseLoad(spec: DataSpec) {\n this.detach(this.parseDataSource(this.spec).refs);\n\n this.spec = spec;\n\n const dataSourceResult = this.parseDataSource(this.spec);\n this.attach(dataSourceResult.refs);\n this._loadTasks = dataSourceResult.transforms;\n this._isLoaded = false;\n\n this.commit();\n return this;\n }\n\n private setValues(data: any[]) {\n this._values = array(data).map((entry, index) => {\n const datum = entry === Object(entry) ? entry : { data: entry };\n datum[this._dataIDKey] = index;\n return datum;\n });\n }\n\n field(field: string): any[] {\n return this._values.map((value: any) => value[field]);\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n this.spec.transform = transforms;\n\n const nextTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.commit();\n return this;\n }\n\n getValue() {\n return this._values;\n }\n\n getInput() {\n return this._input;\n }\n\n addDataFilter(filter: IDataFilter | IDataFilter[]) {\n this._postFilters = this._postFilters.concat(array(filter));\n this._postFilters.sort((filterA, filterB) => (filterA.rank ?? 0) - (filterB.rank ?? 0));\n return this;\n }\n\n removeDataFilter(filter: IDataFilter | IDataFilter[]) {\n const filters = array(filter);\n this._postFilters = this._postFilters.filter(filter => !filters.includes(filter));\n return this;\n }\n\n private _evaluateFilter(value: any, parameters: any) {\n return this._postFilters.reduce((result, filter) => {\n return filter.filter(result, parameters);\n }, value);\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n\n this._isLoaded = false;\n this._values = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._input = null;\n this._values = null;\n }\n}\n","type CompareFunc = (a: any, b: any) => number;\n\n/**\n * moveToHead - Moves an element down the array until the target element is `smallar` than all the elements in head\n *\n * @param {any[]} array - The array to sift through\n * @param {number} start - The start index of the element\n * @param {number} idx - The index of the element to sift down\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToHead(array: any[], idx: number, start: number, cmp: CompareFunc) {\n let parent;\n let pidx;\n\n const item = array[idx];\n // Move the element down the array\n while (idx > start) {\n pidx = Math.floor((idx - 1) / 2);\n parent = array[pidx];\n if (item && parent && cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\n/**\n * moveToTail - Moves an element up the array until the target element is `greater` than all the elements in tail\n *\n * @param {any[]} array - The array to sift through\n * @param {number} idx - The index of the element to sift up\n * @param {CompareFunc} cmp - The function used to compare elements in the array\n * @returns {any[]} - The updated array with the sifted element in the correct position\n */\nfunction moveToTail(array: any[], idx: number, end: number | undefined, cmp: CompareFunc) {\n const start = idx;\n const endIdx = end ?? array.length;\n const item = array[idx];\n let cidx = idx * 2 + 1;\n let ridx;\n\n // Move the element up the array until it is in the correct position\n while (cidx < endIdx) {\n ridx = cidx + 1;\n if (ridx < endIdx && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = idx * 2 + 1;\n }\n array[idx] = item;\n return moveToHead(array, idx, start, cmp);\n}\n\nexport class Heap {\n protected compare: CompareFunc;\n\n protected nodes: any[];\n\n constructor(compare: CompareFunc) {\n this.compare = compare;\n this.nodes = [];\n }\n\n size() {\n return this.nodes.length;\n }\n\n last() {\n return this.nodes[0];\n }\n\n validate() {\n for (let i = this.nodes.length - 1; i > 0; i -= 1) {\n const parentIndex = Math.floor((i - 1) / 2);\n if (this.compare(this.nodes[parentIndex], this.nodes[i]) > 0) {\n return false;\n }\n }\n return true;\n }\n\n push(node: any) {\n if (this.nodes.includes(node)) {\n // node 的排序等级可能变更,需要重新执行 排序\n const index = this.nodes.indexOf(node);\n moveToHead(this.nodes, index, 0, this.compare);\n return moveToTail(this.nodes, index, null, this.compare);\n }\n this.nodes.push(node);\n return moveToHead(this.nodes, this.nodes.length - 1, 0, this.compare);\n }\n\n remove(node: any) {\n if (this.nodes.includes(node)) {\n const index = this.nodes.indexOf(node);\n\n this.nodes = this.nodes.slice(0, index).concat(this.nodes.slice(index + 1));\n\n moveToHead(this.nodes, index, 0, this.compare);\n moveToTail(this.nodes, index, null, this.compare);\n }\n }\n\n pop() {\n const last = this.nodes.pop();\n let item;\n\n if (this.nodes.length) {\n item = this.nodes[0];\n this.nodes[0] = last;\n\n moveToTail(this.nodes, 0, null, this.compare);\n } else {\n item = last;\n }\n return item;\n }\n\n clear() {\n this.nodes = [];\n }\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/accessors.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nexport const identity = (_: any) => _;\n\nexport const zero = (_: any) => 0;\n","import { identity } from '@visactor/vgrammar-util';\n\nexport class UniqueList {\n private idFunc: (val: T) => number;\n\n private list: T[] = [];\n\n private ids: Record = {};\n\n constructor(idFunc: (val: T) => number) {\n this.idFunc = idFunc || identity;\n }\n\n add(element: T) {\n const id = this.idFunc(element);\n\n if (!this.ids[id]) {\n this.ids[id] = 1;\n this.list.push(element);\n }\n return this;\n }\n\n remove(element: T) {\n const id = this.idFunc(element);\n\n if (this.ids[id]) {\n this.ids[id] = 0;\n this.list = this.list.filter(entry => entry !== element);\n }\n return this;\n }\n\n forEach(callback: (entry: T, index?: number, arr?: T[]) => void, reverse?: boolean) {\n if (reverse) {\n this.list.slice().reverse().forEach(callback);\n } else {\n this.list.forEach(callback);\n }\n }\n\n filter(callback: (entry: T, index?: number, arr?: T[]) => boolean) {\n return this.list.filter(callback);\n }\n\n public get length() {\n return this.list.length;\n }\n\n getElementByIndex(index: number) {\n return this.list[index];\n }\n}\n","import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n evaluate() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.run();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n","import type { IGroupMark, IMark } from '../types';\nimport { GrammarMarkType } from './enums';\n\nexport const traverseMarkTree = (\n rootMark: IMark,\n childrenKey: 'children' | 'layoutChildren',\n apply: (mark: IMark) => any,\n filter?: (mark: IMark) => boolean,\n leafFirst?: boolean\n) => {\n const traverse = (mark: IMark) => {\n if (!leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n\n if (mark.markType === GrammarMarkType.group) {\n const children: IMark[] = (mark as IGroupMark)[childrenKey];\n\n if (children) {\n children.forEach(child => {\n traverse(child);\n });\n }\n }\n\n if (leafFirst) {\n if (mark && (!filter || filter(mark))) {\n apply.call(null, mark);\n }\n }\n };\n\n traverse(rootMark);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\nimport type { DragNDrop } from '@visactor/vrender-kits';\nimport type { Gesture } from '@visactor/vrender-kits';\nimport { Factory } from '../core/factory';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n ticker: viewOptions.ticker,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents,\n event:{\n clickInterval: this._eventConfig.clickInterval,\n autoPreventDefault: !!this._eventConfig.autoPreventDefault\n },\n ReactDOM: viewOptions.ReactDOM,\n autoRefresh: viewOptions.autoRefresh\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag && Factory.getStageEventPlugin('drag')) {\n // 允许 drag 事件\n this._dragController = new (Factory.getStageEventPlugin('drag'))(stage as unknown as IEventTarget) as DragNDrop;\n }\n if (this._eventConfig?.gesture && Factory.getStageEventPlugin('gesture')) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new (Factory.getStageEventPlugin('gesture'))(\n stage as unknown as IEventTarget,\n gestureConfig\n ) as Gesture;\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n","import { isValidNumber, isNil } from '@visactor/vutils';\n\ninterface EventPosition {\n canvasX: number;\n canvasY: number;\n clientX?: number;\n clientY?: number;\n}\n\nexport function point(event: Event) {\n ['touches', 'changedTouches', 'targetTouches'].forEach(touchKey => {\n if (event[touchKey] && event[touchKey].length) {\n Array.from(event[touchKey]).forEach(touch => {\n const touchPosition = clientToLocal(touch as Event);\n defineSrPosition(touch, touchPosition, false);\n });\n }\n });\n\n const pos = clientToLocal(event);\n return defineSrPosition(event, pos);\n}\n\nfunction clientToLocal(e: Event): EventPosition {\n // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n if (!isNil((e as any).offsetX)) {\n return getOffsetPos(e);\n }\n\n // for miniApp\n if (!isNil((e as any).x)) {\n return getXYPos(e);\n }\n\n // for miniApp\n if ((e as any).changedTouches && (e as any).changedTouches.length) {\n return getChangedTouchesPos(e);\n }\n\n // For some other device, e.g., IOS safari.\n return {\n canvasX: 0,\n canvasY: 0\n };\n}\n\nfunction getOffsetPos(e: any) {\n return {\n canvasX: e.offsetX,\n canvasY: e.offsetY\n };\n}\n\nfunction getXYPos(e: any) {\n return { canvasX: e.x, canvasY: e.y };\n}\n\nfunction getChangedTouchesPos(e: any) {\n const pos = e.changedTouches[0];\n return { canvasX: pos.x, canvasY: pos.y };\n}\n\nfunction defineSrPosition(event: any, pos: EventPosition, client = true) {\n const keys = ['canvasX', 'canvasY'];\n\n if (client) {\n keys.push('clientX');\n keys.push('clientY');\n }\n\n keys.forEach(key => {\n isValidNumber(pos[key]) &&\n Object.defineProperty(event, key, {\n value: pos[key],\n writable: true\n });\n });\n\n return [pos.canvasX, pos.canvasY];\n}\n","export const EVENT_SOURCE_WINDOW = 'window';\nexport const EVENT_SOURCE_VIEW = 'view';\nexport const BROWSER = 'browser';\nexport const NO_TRAP = { trap: false };\n\nexport const SIGNAL_WIDTH = 'width';\nexport const SIGNAL_HEIGHT = 'height';\nexport const SIGNAL_VIEW_WIDTH = 'viewWidth';\nexport const SIGNAL_VIEW_HEIGHT = 'viewHeight';\nexport const SIGNAL_PADDING = 'padding';\nexport const SIGNAL_VIEW_BOX = 'viewBox';\nexport const SIGNAL_AUTOFIT = 'autoFit';\n\nexport const DEFAULT_HOVER_STATE = 'hover';\n\nexport const NAME_PREFIX = '@';\nexport const ID_PREFIX = '#';\n","import type { IAnimationControlOptions } from '../types/animate';\nimport { GrammarMarkType } from './enums';\n\nexport const BridgeElementKey = '__vgrammar_scene_item__';\n\nexport const CollectionMarkType = [GrammarMarkType.line, GrammarMarkType.area];\n\nexport const Mark3DType = [GrammarMarkType.arc3d, GrammarMarkType.rect3d, GrammarMarkType.pyramid3d];\n\nexport const DefaultKey = 'key';\n\nexport const DefaultMarkData = [{}];\n\nexport const DefaultGroupKeys = [DefaultKey];\n\nexport const DefaultReuse = true;\nexport const DefaultMorph = true;\nexport const DefaultMorphAll = false;\nexport const DefaultSplitPath: null | 'clone' = null;\nexport const DefaultEnableExitAnimation = true;\n\nexport const ImmediateAnimationState = 'VGRAMMAR_IMMEDIATE_ANIMATION';\n\n/** default animation configs */\nexport const DefaultAnimationStartTime = 0;\nexport const DefaultAnimationDuration = 1000;\nexport const DefaultAnimationDelay = 0;\nexport const DefaultAnimationDelayAfter = 0;\nexport const DefaultAnimationLoop = false;\nexport const DefaultAnimationOneByOne = false;\nexport const DefaultAnimationEasing = 'quintInOut';\nexport const DefaultAnimationControlOptions: IAnimationControlOptions = {\n stopWhenStateChange: false,\n immediatelyApply: true\n};\nexport const DefaultAnimationParameters = 'VGRAMMAR_ANIMATION_PARAMETERS';\n\nexport const MARK_OVERLAP_HIDE_KEY = '_mo_hide_';\n","import type { FederatedEvent } from '@visactor/vrender-core';\nimport type { IView } from './../../types/view';\nimport { point } from './point';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW } from '../../view/constants';\nimport type { EventSourceType } from '../../types';\nimport { BridgeElementKey } from '../constants';\n\nexport default function getExtendedEvents(view: IView, event: FederatedEvent, type: string, source: EventSourceType) {\n if (source === EVENT_SOURCE_WINDOW) {\n const e = (event as any).changedTouches ? (event as any).changedTouches[0] : event;\n point(e);\n }\n let element = (event.target as any)?.[BridgeElementKey];\n if (!element && source === EVENT_SOURCE_VIEW) {\n let target = event.target;\n const rootGraphic = view.rootMark?.graphicItem;\n\n while (target?.parent && (target.parent as any) !== rootGraphic) {\n target = target.parent;\n if ((target as any)[BridgeElementKey]) {\n element = (target as any)[BridgeElementKey];\n break;\n }\n }\n }\n\n (event as any).element = element;\n\n return event;\n}\n","import { isArray, isNil } from '@visactor/vutils';\nimport type { SignalFunctionType, SignalSpec } from '../types/signal';\nimport type { GrammarType, IGrammarBase, ISignal } from '../types/grammar';\nimport { GrammarBase } from './grammar-base';\nimport { invokeFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\n\nexport class Signal extends GrammarBase implements ISignal {\n readonly grammarType: GrammarType = 'signal';\n\n protected spec: SignalSpec = { value: null, update: null };\n\n private _signal: T;\n\n parse(spec: SignalSpec) {\n super.parse(spec);\n this.value(spec.value);\n this.update(spec.update);\n\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n this._signal = this.spec.update ? invokeFunctionType(this.spec.update, parameters, this._signal) : this.spec.value;\n\n this.spec.value = this._signal;\n return this;\n }\n\n output() {\n return this._signal;\n }\n\n getValue() {\n return this.output();\n }\n\n set(value: T) {\n if (isArray(value) && isArray(this.value) && value.length === this.value.length) {\n for (let i = 0; i < value.length; i++) {\n if (this.value[i] !== value[i]) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n }\n return false;\n }\n if (this._signal !== value) {\n this._signal = value;\n this.spec.value = value;\n\n return true;\n }\n return false;\n }\n\n update(update: SignalFunctionType | Nil): this {\n // clear value spec if update is valid\n if (!isNil(update)) {\n this.value(undefined);\n }\n return this.setFunctionSpec(update, 'update');\n }\n\n value(value: T | Nil): this {\n // clear update spec if value is valid\n if (!isNil(value)) {\n this.update(undefined);\n }\n this.spec.value = value;\n this.commit();\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n this._signal = grammar.output();\n return this;\n }\n\n clear() {\n super.clear();\n this._signal = null;\n }\n}\n","import type { IBounds } from '@visactor/vutils';\nimport { isNumber, Bounds } from '@visactor/vutils';\nimport {\n DefaultAnimationDelay,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationOneByOne,\n DefaultEnableExitAnimation,\n DefaultMorph,\n DefaultMorphAll,\n DefaultReuse,\n DefaultSplitPath\n} from '../graph/constants';\nimport type { GroupMarkSpec, IRunningConfig, ITheme, MarkSpec, SignalSpec } from '../types';\nimport type { IViewOptions, IViewThemeConfig, ViewSpec } from '../types/view';\nimport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from '../view/constants';\n\nlet markBaseId = -1;\n\nexport const BuiltInSignalID = [\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_BOX,\n SIGNAL_AUTOFIT\n];\n\nexport const builtInSignals = (option: IViewOptions, config: IViewThemeConfig, theme: ITheme): SignalSpec[] => {\n return [\n { id: SIGNAL_WIDTH, value: option[SIGNAL_WIDTH] ?? 0 },\n { id: SIGNAL_HEIGHT, value: option[SIGNAL_HEIGHT] ?? 0 },\n { id: SIGNAL_PADDING, value: normalizePadding(option[SIGNAL_PADDING] ?? config[SIGNAL_PADDING] ?? theme?.padding) },\n {\n id: SIGNAL_VIEW_WIDTH,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_WIDTH] - padding.left - padding.right;\n },\n dependency: [SIGNAL_WIDTH, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_HEIGHT,\n update: {\n callback: (signal: number, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return params[SIGNAL_HEIGHT] - padding.top - padding.bottom;\n },\n dependency: [SIGNAL_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_VIEW_BOX,\n update: {\n callback: (signal: IBounds, params: any) => {\n const padding = normalizePadding(params[SIGNAL_PADDING]);\n return (signal ? signal : new Bounds()).setValue(\n padding.left,\n padding.top,\n padding.left + params[SIGNAL_VIEW_WIDTH],\n padding.top + params[SIGNAL_VIEW_HEIGHT]\n );\n },\n dependency: [SIGNAL_VIEW_WIDTH, SIGNAL_VIEW_HEIGHT, SIGNAL_PADDING]\n }\n },\n {\n id: SIGNAL_AUTOFIT,\n value: option[SIGNAL_AUTOFIT] ?? config[SIGNAL_AUTOFIT]\n }\n ];\n};\n\nexport const normalizePadding = (\n value: number | { top?: number; left?: number; right?: number; bottom?: number }\n): { top: number; left: number; right: number; bottom: number } => {\n if (isNumber(value)) {\n return { top: value, bottom: value, left: value, right: value };\n }\n return { top: value?.top ?? 0, bottom: value?.bottom ?? 0, left: value?.left ?? 0, right: value?.right ?? 0 };\n};\n\nexport const normalizeMarkTree = (spec: ViewSpec) => {\n const traverse = (spec: MarkSpec, group: string) => {\n spec.group = group;\n const id = spec.id ?? `VGRAMMAR_MARK_${++markBaseId}`;\n spec.id = id;\n ((spec as GroupMarkSpec).marks ?? []).forEach(child => traverse(child, id));\n };\n (spec.marks ?? []).forEach(mark => traverse(mark, 'root'));\n return spec;\n};\n\nexport const normalizeRunningConfig = (runningConfig: IRunningConfig): IRunningConfig => {\n const {\n reuse = DefaultReuse,\n morph = DefaultMorph,\n morphAll = DefaultMorphAll,\n animation = {},\n enableExitAnimation = DefaultEnableExitAnimation\n } = runningConfig ?? {};\n return {\n reuse,\n morph,\n morphAll,\n animation: {\n easing: animation.easing ?? DefaultAnimationEasing,\n delay: animation.delay ?? DefaultAnimationDelay,\n duration: animation.duration ?? DefaultAnimationDuration,\n oneByOne: animation.oneByOne ?? DefaultAnimationOneByOne,\n splitPath: animation.splitPath ?? DefaultSplitPath\n },\n enableExitAnimation\n };\n};\n","import { vglobal } from '@visactor/vrender-core';\nimport type { IEnvironmentOptions } from '../../types';\n\nexport function configureEnvironment(options: IEnvironmentOptions) {\n if (options.mode) {\n vglobal.setEnv(options.mode, options.modeParams || {});\n }\n}\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport type { MarkElementItem, MarkType } from '../../types';\nimport { GrammarMarkType } from '../enums';\n\nexport function isValidPointsChannel(channels: string[], markType: MarkType): boolean {\n switch (markType) {\n case 'line':\n return channels.some(channel => ['x', 'y', 'defined'].includes(channel));\n case 'area':\n return channels.some(channel => ['x', 'y', 'x1', 'y1', 'defined'].includes(channel));\n case 'largeRects':\n return channels.some(channel => ['x', 'y', 'width', 'y1'].includes(channel));\n case 'largeSymbols':\n return channels.some(channel => ['x', 'y'].includes(channel));\n }\n return false;\n}\n\n/**\n * 获取rule的points\n * 相对位置\n * @param {*} item\n * @returns\n */\nexport function getRulePoints(nextAttrs: { x: number; y: number; x1: number; y1: number }) {\n const { x, y, x1, y1 } = nextAttrs;\n\n if (!isValidNumber(x) || !isValidNumber(y) || !isValidNumber(x1) || !isValidNumber(y1)) {\n return [];\n }\n return [\n { x, y },\n { x: x1, y: y1 }\n ];\n}\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLinePoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints?: IPointLike[],\n isArea?: boolean\n) {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const hasValidChannel = items.some(item => {\n return isValidPointsChannel(Object.keys(item.nextAttrs), 'line');\n });\n if (!hasValidChannel) {\n return lastPoints ?? [];\n }\n return items.map((item, index) => {\n const attrs = item.nextAttrs;\n const { x, y, x1, y1, defined } = lastPoints?.[index] ?? {};\n if (isNil(attrs.x)) {\n attrs.x = x;\n }\n if (isNil(attrs.y)) {\n attrs.y = y;\n }\n\n if (isNil(attrs.defined) && defined === false) {\n attrs.defined = false;\n }\n\n attrs.context = item.key;\n\n if (isArea) {\n if (isNil(attrs.x1)) {\n attrs.x1 = x1;\n }\n if (isNil(attrs.y1)) {\n attrs.y1 = y1;\n }\n }\n\n return attrs;\n });\n}\n\nexport function getLargeRectsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 4);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 4];\n const y = attrs.y ?? lastPoints[index * 4 + 1];\n const width = attrs.width ?? lastPoints[index * 4 + 2];\n const y1 = attrs.y1 ?? lastPoints[index * 4 + 3];\n arr[index * 4] = x;\n arr[index * 4 + 1] = y;\n arr[index * 4 + 2] = width;\n arr[index * 4 + 3] = y1 - y;\n });\n\n return arr;\n}\n\nexport function getLargeSymbolsPoints(\n items?: MarkElementItem[],\n includeOnePoint?: boolean,\n lastPoints: Float32Array | number[] = []\n): Float32Array | number[] {\n if (!items || !items.length || (items.length === 1 && !includeOnePoint)) {\n return [];\n }\n const arr: Float32Array = new Float32Array(items.length * 2);\n\n items.forEach((item, index) => {\n const attrs = item.nextAttrs;\n const x = attrs.x ?? lastPoints[index * 2];\n const y = attrs.y ?? lastPoints[index * 2 + 1];\n arr[index * 2] = x;\n arr[index * 2 + 1] = y;\n });\n\n return arr;\n}\n\nexport function isPositionOrSizeChannel(type: string, channel: string) {\n if (['x', 'y', 'dx', 'dy'].includes(channel)) {\n return true;\n }\n\n switch (type) {\n case GrammarMarkType.arc:\n return ['innerRadius', 'outerRadius', 'startAngle', 'endAngle'].includes(channel);\n case GrammarMarkType.group:\n case GrammarMarkType.rect:\n case GrammarMarkType.image:\n return ['width', 'height', 'y1'].includes(channel);\n case GrammarMarkType.path:\n case GrammarMarkType.shape:\n return ['path', 'customPath'].includes(channel);\n case GrammarMarkType.line:\n return channel === 'defined';\n case GrammarMarkType.area:\n return ['x1', 'y1', 'defined'].includes(channel);\n case GrammarMarkType.rule:\n return ['x1', 'y1'].includes(channel);\n case GrammarMarkType.symbol:\n return channel === 'size';\n case GrammarMarkType.polygon:\n return channel === 'points';\n case GrammarMarkType.text:\n return channel === 'text';\n }\n\n return false;\n}\n\nexport function isPointsMarkType(markType: MarkType): boolean {\n return (\n [GrammarMarkType.line, GrammarMarkType.area, GrammarMarkType.largeRects, GrammarMarkType.largeSymbols] as MarkType[]\n ).includes(markType);\n}\n","export const commonAttributes = ['fillOpacity'];\n\nexport const transformCommonAttribute = (graphicAttributes: any, changedKey: string, nextAttrs: any) => {\n if (changedKey === 'fillOpacity') {\n graphicAttributes.fillOpacity = nextAttrs.fillOpacity ?? 1;\n return ['fillOpacity'];\n }\n\n return [];\n};\n","import { has, isNil, isPlainObject, isString, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IGlyphElement } from '../../types/element';\nimport type { AttributeTransform, MarkType } from '../../types/mark';\nimport { GrammarMarkType } from '../enums';\nimport { getRulePoints } from './helpers';\nimport { commonAttributes, transformCommonAttribute } from './common';\n\nfunction storeOriginAttributes(\n name: string,\n channels: string[],\n graphicAttributes: any,\n nextAttrs: any,\n element: IElement,\n markName: string\n): Record {\n const prevStoredAttrs = (element as IGlyphElement).getGraphicAttribute(name, false, markName);\n\n if (prevStoredAttrs) {\n channels.forEach(channel => {\n if (channel in nextAttrs) {\n prevStoredAttrs[channel] = nextAttrs[channel];\n }\n });\n\n return prevStoredAttrs;\n }\n const storedAttrs = {};\n channels.forEach(channel => {\n storedAttrs[channel] = nextAttrs[channel];\n });\n graphicAttributes[name] = storedAttrs;\n return storedAttrs;\n}\n\nexport const transformsByType: Record = {\n rect3d: [\n {\n channels: ['x', 'y', 'z', 'x1', 'y1', 'width', 'height', 'length'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n // width\n if (isValidNumber(nextAttrs.width) || (!isValidNumber(nextAttrs.x1) && isValidNumber(storedAttrs.width))) {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n } else if (isValidNumber(nextAttrs.x1) || (!isValidNumber(nextAttrs.width) && isValidNumber(storedAttrs.x1))) {\n graphicAttributes.x = Math.min(storedAttrs.x, storedAttrs.x1);\n graphicAttributes.width = Math.abs(storedAttrs.x1 - storedAttrs.x);\n } else {\n graphicAttributes.x = Math.min(storedAttrs.x ?? 0, storedAttrs.x1 ?? Infinity);\n graphicAttributes.width = storedAttrs.width;\n }\n\n // height\n if (isValidNumber(nextAttrs.height) || (!isValidNumber(nextAttrs.y1) && isValidNumber(storedAttrs.height))) {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n } else if (isValidNumber(nextAttrs.y1) || (!isValidNumber(nextAttrs.height) && isValidNumber(storedAttrs.y1))) {\n graphicAttributes.y = Math.min(storedAttrs.y, storedAttrs.y1);\n graphicAttributes.height = Math.abs(storedAttrs.y1 - storedAttrs.y);\n } else {\n graphicAttributes.y = Math.min(storedAttrs.y ?? 0, storedAttrs.y1 ?? Infinity);\n graphicAttributes.height = storedAttrs.height;\n }\n\n // length\n if (isValidNumber(nextAttrs.length) || (!isValidNumber(nextAttrs.z1) && isValidNumber(storedAttrs.length))) {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n } else if (isValidNumber(nextAttrs.z1) || (!isValidNumber(nextAttrs.length) && isValidNumber(storedAttrs.z1))) {\n graphicAttributes.z = Math.min(storedAttrs.z, storedAttrs.z1);\n graphicAttributes.length = Math.abs(storedAttrs.z1 - storedAttrs.z);\n } else {\n graphicAttributes.z = Math.min(storedAttrs.z ?? 0, storedAttrs.z1 ?? Infinity);\n graphicAttributes.length = storedAttrs.length;\n }\n },\n storedAttrs: 'sizeAttrs'\n }\n ],\n [GrammarMarkType.text]: [\n {\n channels: ['text', 'limit', 'autoLimit', 'maxLineWidth', 'textType', '_originText'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const limit = storedAttrs.limit ?? Infinity;\n const autoLimit = storedAttrs.autoLimit ?? Infinity;\n const maxWidth = Math.min(limit, autoLimit);\n const isTextConfig = isPlainObject(storedAttrs.text) && !isNil(storedAttrs.text.text);\n const text = isTextConfig ? storedAttrs.text.text : storedAttrs.text;\n\n if (Array.isArray(text)) {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n } else {\n graphicAttributes.maxLineWidth = maxWidth === Infinity ? storedAttrs.maxLineWidth : maxWidth;\n }\n\n if (isTextConfig || storedAttrs.textType) {\n if (storedAttrs.text.type === 'rich' || storedAttrs.textType === 'rich') {\n graphicAttributes.textConfig = text;\n } else if (storedAttrs.text.type === 'html') {\n graphicAttributes.html = text;\n graphicAttributes.text = storedAttrs._originText ?? '';\n graphicAttributes.renderable = false;\n } else if (storedAttrs.text.type === 'react') {\n graphicAttributes.react = text;\n graphicAttributes.text = storedAttrs._originText ?? '';\n graphicAttributes.renderable = false;\n } else {\n graphicAttributes.text = text;\n }\n } else {\n graphicAttributes.text = text;\n }\n },\n storedAttrs: 'limitAttrs'\n }\n ],\n [GrammarMarkType.rule]: [\n {\n channels: ['x', 'y', 'x1', 'y1'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n const points = getRulePoints(storedAttrs);\n graphicAttributes.points = points;\n graphicAttributes.x = 0;\n graphicAttributes.y = 0;\n },\n storedAttrs: 'pointAttrs'\n }\n ],\n [GrammarMarkType.symbol]: [\n {\n channels: ['shape', 'symbolType'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n graphicAttributes.symbolType = nextAttrs.shape ?? nextAttrs.symbolType;\n }\n },\n {\n channels: ['image', 'fill', 'background'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (nextAttrs.image) {\n graphicAttributes.background = nextAttrs.image;\n graphicAttributes.fill = false;\n } else if (storedAttrs.image) {\n graphicAttributes.background = storedAttrs.image;\n graphicAttributes.fill = false;\n } else {\n graphicAttributes.fill = storedAttrs.fill;\n graphicAttributes.background = storedAttrs.background;\n }\n },\n storedAttrs: 'imageAttrs'\n }\n ]\n};\n\nexport function cloneTransformAttributes(markType: MarkType, attributes: any) {\n const transforms = transformsByType[markType] ?? [];\n return transforms.reduce((clonedAttributes, transform) => {\n transform.channels.forEach(channel => {\n if (has(attributes, channel)) {\n clonedAttributes[channel] = attributes[channel];\n }\n });\n return clonedAttributes;\n }, {} as any);\n}\n\nexport const transformAttributes = (\n markType: MarkType | AttributeTransform[],\n nextAttrs: any,\n element: IElement,\n markName?: string\n) => {\n const graphicAttributes = {};\n const changedKeys = nextAttrs ? Object.keys(nextAttrs) : [];\n const transforms: AttributeTransform[] = isString(markType)\n ? transformsByType[markType]\n : (markType as AttributeTransform[]);\n\n if (transforms && transforms.length) {\n const tags: boolean[] = [];\n\n changedKeys.forEach(key => {\n let isTransformed = false;\n\n transforms.forEach((transform, index) => {\n if (transform.channels.includes(key)) {\n if (!tags[index]) {\n if (transform.storedAttrs) {\n const storedAttrs = storeOriginAttributes(\n transform.storedAttrs,\n transform.channels,\n graphicAttributes,\n nextAttrs,\n element,\n markName\n );\n transform.transform(graphicAttributes, nextAttrs, storedAttrs);\n } else {\n transform.transform(graphicAttributes, nextAttrs, null);\n }\n }\n // 记录一下,不重复处理\n tags[index] = true;\n isTransformed = true;\n }\n });\n\n if (!isTransformed) {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n }\n });\n } else {\n changedKeys.forEach(key => {\n if (commonAttributes.includes(key)) {\n transformCommonAttribute(graphicAttributes, key, nextAttrs);\n } else {\n graphicAttributes[key] = nextAttrs[key];\n }\n });\n }\n\n return graphicAttributes;\n};\n","import type { IGlyphMeta, IMark } from '../../types';\nimport type { IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\n\nimport { GrammarMarkType } from '../enums';\nimport { BridgeElementKey } from '../constants';\nimport { Factory } from '../../core/factory';\nimport { Logger } from '@visactor/vutils';\n\nexport const isMarkType = (type: string) => {\n return !!GrammarMarkType[type];\n};\n\nexport function createGraphicItem(mark: IMark, markType: string, attrs: any = {}) {\n const graphicItem: IGraphic = Factory.getGraphicType(markType)\n ? Factory.createGraphic(markType, attrs)\n : Factory.createGraphicComponent(markType, attrs, {\n skipDefault: (mark as any)?.spec?.skipTheme\n });\n\n if (!graphicItem) {\n const logger = Logger.getInstance();\n logger.error(`create ${markType} graphic failed!`);\n }\n\n return graphicItem;\n}\n\nexport function createGlyphGraphicItem(mark: IMark, glyphMeta: IGlyphMeta, attrs: any = {}) {\n if (!Factory.getGraphicType(GrammarMarkType.glyph)) {\n return;\n }\n const graphicItem = Factory.createGraphic(GrammarMarkType.glyph, attrs);\n const glyphMarks = glyphMeta.getMarks();\n const subGraphics: IGraphic[] = Object.keys(glyphMarks).map(name => {\n if (Factory.getGraphicType(glyphMarks[name])) {\n const graphic = Factory.createGraphic(glyphMarks[name]);\n if (graphic) {\n graphic.name = name;\n return graphic;\n }\n }\n });\n graphicItem.setSubGraphic(subGraphics);\n return graphicItem;\n}\n\nexport const removeGraphicItem = (graphicItem: IGraphic) => {\n if (graphicItem) {\n graphicItem[BridgeElementKey] = null;\n graphicItem.release();\n if (graphicItem.parent) {\n graphicItem.parent.removeChild(graphicItem);\n }\n }\n};\n\nexport const getMarkTypeOfLarge = (markType: string) => {\n if (markType === GrammarMarkType.rect) {\n return GrammarMarkType.largeRects;\n }\n\n if (markType === GrammarMarkType.symbol) {\n return GrammarMarkType.largeSymbols;\n }\n\n return markType;\n};\n","import { isNil } from '@visactor/vutils';\nimport type { DiffResult } from '../../types/base';\nimport { parseField } from '../../parse/util';\nimport { DefaultKey, DefaultGroupKeys } from '../constants';\n\nexport type GroupedData = {\n // iterating over array is faster than set\n keys: (symbol | string)[];\n // operation on map is faster than object\n data: Map;\n};\n\nexport function groupData(\n data: T[],\n key: ((datum: T) => symbol | string) | string,\n sort?: (a: T, b: T) => number\n): GroupedData {\n const groupedData = new Map();\n if (!data || data.length === 0) {\n return { keys: [], data: groupedData };\n }\n if (!key) {\n groupedData.set(DefaultKey, sort ? data.slice().sort(sort) : data.slice());\n return { keys: DefaultGroupKeys, data: groupedData };\n }\n const keyGetter = parseField(key);\n\n if (data.length === 1) {\n const key = keyGetter(data[0]);\n groupedData.set(key, [data[0]]);\n\n return {\n keys: [key],\n data: groupedData\n };\n }\n\n const keys = new Set();\n data.forEach(entry => {\n const key = keyGetter(entry);\n const lastData = groupedData.get(key) ?? [];\n lastData.push(entry);\n groupedData.set(key, lastData);\n keys.add(key);\n });\n if (sort) {\n keys.forEach(key => {\n groupedData.get(key).sort(sort);\n });\n }\n return { keys: Array.from(keys), data: groupedData };\n}\n\nexport class Differ {\n private prevData: GroupedData;\n private currentData: GroupedData;\n\n private callback: (key: symbol | string, data: T[] | null, prevData: T[] | null) => void;\n\n constructor(data?: T[], key?: ((datum: T) => symbol | string) | string, sort?: (a: T, b: T) => number) {\n this.prevData = data?.length ? groupData(data, key ?? null, sort) : null;\n }\n\n setCurrentData(currentData: GroupedData) {\n this.currentData = currentData;\n }\n\n getCurrentData(): GroupedData {\n return this.currentData;\n }\n\n doDiff() {\n if (!this.callback) {\n return;\n }\n if (this.currentData && this.prevData) {\n const prevMap = new Map(this.prevData.data);\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), prevMap.get(key));\n prevMap.delete(key);\n });\n\n this.prevData.keys.forEach(key => {\n if (prevMap.has(key)) {\n this.callback(key, null, prevMap.get(key));\n }\n });\n } else if (this.currentData) {\n const currentKeys = this.currentData.keys;\n currentKeys.forEach(key => {\n this.callback(key, this.currentData.data.get(key), null);\n });\n } else if (this.prevData) {\n this.prevData.keys.forEach(key => {\n this.callback(key, null, this.prevData.data.get(key));\n });\n }\n }\n\n setCallback(callback: (key: symbol | string, data: T[], prevData: T[]) => void) {\n this.callback = callback;\n }\n\n updateToCurrent() {\n this.prevData = this.currentData;\n this.currentData = null;\n }\n\n reset() {\n this.prevData = null;\n }\n}\n\nexport function diffSingle(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData[0] as U });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data[0] as V });\n } else {\n // update\n result.update.push({ next: data[0] as V, prev: prevData[0] as U });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n\nexport function diffMultiple(prev: U[], next: V[], key: (datum: U | V) => symbol | string): DiffResult {\n const result: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n const differ = new Differ(prev, key);\n differ.setCallback((key, data, prevData) => {\n if (isNil(data)) {\n // exit\n result.exit.push({ prev: prevData as U[] });\n } else if (isNil(prevData)) {\n // enter\n result.enter.push({ next: data as V[] });\n } else {\n // update\n result.update.push({ next: data as V[], prev: prevData as U[] });\n }\n });\n differ.setCurrentData(groupData(next, key));\n differ.doDiff();\n\n return result;\n}\n","import { array } from '@visactor/vutils';\nimport type { IGrammarBase, IView, MarkFunctionType, ScaleEncodeType, FieldEncodeType } from '../types';\nimport { isGrammar, parseFunctionType } from './util';\n\nexport function isScaleEncode(encode: any): encode is ScaleEncodeType {\n return !!encode?.scale;\n}\n\nexport function isFieldEncode(encode: any): encode is FieldEncodeType {\n return !!encode?.field;\n}\n\nexport function parseEncodeType(encoder: MarkFunctionType | ScaleEncodeType, view: IView): IGrammarBase[] {\n if (!encoder) {\n return [];\n }\n let dependencies: IGrammarBase[] = [];\n if (encoder.scale) {\n if (isGrammar(encoder.scale)) {\n dependencies = [encoder.scale];\n } else {\n dependencies = array(view.getScaleById(encoder.scale) as IGrammarBase);\n }\n }\n return dependencies.concat(parseFunctionType(encoder, view));\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/accessor.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil } from '@visactor/vutils';\n\nexport const accessor = (fn: any, fields?: string[], name?: string) => {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n};\n\nexport function accessorName(fn: any) {\n return isNil(fn) ? null : (fn.fname as string);\n}\n\nexport function accessorFields(fn: any) {\n return isNil(fn) ? null : fn.fields;\n}\n","import { get } from '@visactor/vutils';\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/error.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { Logger } from '@visactor/vutils';\n\nexport const error = (message: string) => {\n const logger = Logger.getInstance();\n\n logger.error(message);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/splitAccessPath.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { error } from './error';\n\nexport const splitAccessPath = (p: string) => {\n const path: string[] = [];\n const n = p.length;\n\n let q = null;\n let b = 0;\n let s = '';\n let i: number;\n let j: number;\n let c;\n\n p += '';\n\n const push = () => {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n };\n\n for (i = 0, j = 0; j < n; j += 1) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n // eslint-disable-next-line quotes\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) {\n push();\n }\n i = j + 1;\n b = i;\n } else if (c === ']') {\n if (!b) {\n error('Access path missing open bracket: ' + p);\n }\n if (b > 0) {\n push();\n }\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) {\n error('Access path missing closing bracket: ' + p);\n }\n if (q) {\n error('Access path missing closing quote: ' + p);\n }\n\n if (j > i) {\n j += 1;\n push();\n }\n\n return path;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/field.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isArray, isFunction } from '@visactor/vutils';\nimport { accessor } from './accessor';\nimport { getter } from './getter';\nimport { splitAccessPath } from './splitAccessPath';\nimport type { FieldGetterFunction, FieldGetterGeneratorOptions } from './types';\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, name?: string, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = splitAccessPath(fieldStr);\n const parsedField = path.length === 1 ? path[0] : fieldStr;\n\n return accessor(((opt && opt.get) || getter)(path), [parsedField], name || parsedField);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n name?: string,\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, name, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, name, opt);\n};\n","import { isNil, isNumber, isString } from '@visactor/vutils';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { BaseSingleEncodeSpec, IElement, MarkElementItem } from '../../types';\nimport { isFieldEncode, isScaleEncode } from '../../parse/mark';\nimport { getGrammarOutput, invokeFunctionType, isFunctionType } from '../../parse/util';\nimport { isPositionOrSizeChannel } from '../attributes/helpers';\n\n/**\n * invoke encoder for multiple items\n */\nexport function invokeEncoderToItems(\n element: IElement,\n items: MarkElementItem[],\n encoder: BaseSingleEncodeSpec,\n parameters: any,\n onlyFullEncodeFirst?: boolean\n) {\n if (!encoder) {\n return;\n }\n\n if (isFunctionType(encoder)) {\n items.forEach(item => {\n const attributes = invokeFunctionType(encoder, parameters, item.datum, element);\n Object.assign(item.nextAttrs, attributes);\n });\n } else {\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n const encodeItems =\n onlyFullEncodeFirst && !isPositionOrSizeChannel(element.mark.markType, channel) ? [items[0]] : items;\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n\n let to = hasField ? null : !isNil(encode?.value) ? scale.scale?.(encode.value) : 0;\n\n encodeItems.forEach(item => {\n if (hasField) {\n to = scale.scale?.(fieldAccessor(item.datum));\n }\n item.nextAttrs[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n });\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = fieldAccessor(item.datum);\n });\n } else {\n encodeItems.forEach(item => {\n item.nextAttrs[channel] = invokeFunctionType(encode, parameters, item.datum, element);\n });\n }\n });\n }\n}\n\n/**\n * invoke encoder for single item\n * use invokeEncoderToItems instead if item amount is large\n */\nexport function invokeEncoder(encoder: BaseSingleEncodeSpec, datum: any, element: IElement, parameters: any) {\n if (!encoder) {\n return null;\n }\n if (isFunctionType(encoder)) {\n return invokeFunctionType(encoder, parameters, datum, element);\n }\n const attributes: any = {};\n Object.keys(encoder).forEach(channel => {\n const encode = encoder[channel];\n\n if (isScaleEncode(encode)) {\n const scale = getGrammarOutput(encode.scale, parameters);\n const offset = encode?.offset ?? 0;\n const bandOffset = !isNil(encode.band) && scale.bandwidth ? scale.bandwidth() * encode.band : null;\n const hasField = isString(encode?.field);\n const fieldAccessor = hasField ? getFieldAccessor(encode.field) : null;\n const to = hasField\n ? scale.scale?.(fieldAccessor(datum))\n : !isNil(encode?.value)\n ? scale.scale?.(encode.value)\n : 0;\n\n attributes[channel] = isNumber(to) || isNumber(bandOffset) ? to + offset + bandOffset : to;\n } else if (isFieldEncode(encode)) {\n const fieldAccessor = getFieldAccessor(encode.field);\n attributes[channel] = fieldAccessor(datum);\n } else {\n attributes[channel] = invokeFunctionType(encode, parameters, datum, element);\n }\n });\n return attributes;\n}\n","import isArray from './isArray';\nimport isFunction from './isFunction';\nimport isPlainObject from './isPlainObject';\n\nfunction objToString(obj: any) {\n return Object.prototype.toString.call(obj);\n}\n\nfunction objectKeys(obj: any) {\n return Object.keys(obj);\n}\n\n// Adapted from https://github.com/antvis/F2/blob/master/packages/f2/src/base/equal.ts by zengyue\n// License: https://github.com/antvis/F2/blob/master/packages/f2/LICENSE\nexport function isEqual(a: any, b: any, options?: { skipFunction?: boolean }): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n // null 和 undefined\n if (a == null || b == null) {\n return false;\n }\n\n // 特殊处理NaN\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (objToString(a) !== objToString(b)) {\n return false;\n }\n\n // 如果是function,则不相等\n if (isFunction(a)) {\n return !!options?.skipFunction;\n }\n\n // 值类型,Number String Boolean\n if (typeof a !== 'object') {\n return false;\n }\n\n if (isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = a.length - 1; i >= 0; i--) {\n if (!isEqual(a[i], b[i], options)) {\n return false;\n }\n }\n return true;\n }\n\n if (!isPlainObject(a)) {\n return false;\n }\n\n const ka = objectKeys(a);\n const kb = objectKeys(b);\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) {\n return false;\n }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (let i = ka.length - 1; i >= 0; i--) {\n // eslint-disable-next-line eqeqeq\n if (ka[i] != kb[i]) {\n return false;\n }\n }\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (let i = ka.length - 1; i >= 0; i--) {\n const key = ka[i];\n if (!isEqual(a[key], b[key], options)) {\n return false;\n }\n }\n\n return true;\n}\n","const getType = (value: any): string => {\n return {}.toString\n .call(value)\n .replace(/^\\[object /, '')\n .replace(/]$/, '');\n};\n\nexport default getType;\n","const objectProto = Object.prototype;\n\nconst isPrototype = function (value: any): boolean {\n const Ctor = value && value.constructor;\n const proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n return value === proto;\n};\n\nexport default isPrototype;\n","import isNil from './isNil';\nimport isArrayLike from './isArrayLike';\nimport getType from './getType';\nimport isPrototype from './isPrototype';\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isEmpty(value: any): boolean {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (isNil(value)) {\n return true;\n }\n if (isArrayLike(value)) {\n return !value.length;\n }\n // TODO: 这里需要优化下\n const type = getType(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !Object.keys(value).length;\n }\n for (const key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import type { IColor, IColorStop, ISegment } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isNil, isString } from '@visactor/vutils';\nimport type { IElement } from '../../types';\n\nconst isStopsEqual = (prev: IColorStop[], next: IColorStop[]) => {\n if (prev === next) {\n return true;\n }\n const prevLength = (prev && prev.length) ?? 0;\n const nextLength = (next && next.length) ?? 0;\n\n if (prevLength !== nextLength || prevLength === 0) {\n return false;\n }\n\n return prev.every((prevEntry, prevIndex) => {\n return (\n (!prevEntry && !next[prevIndex]) ||\n (prevEntry &&\n next[prevIndex] &&\n prevEntry.color === next[prevIndex].color &&\n prevEntry.offset === next[prevIndex].offset)\n );\n });\n};\n\nconst isColorAttrEqual = (prev: IColor, next: IColor) => {\n if (prev === next) {\n return true;\n }\n\n if (typeof prev !== typeof next) {\n return false;\n }\n\n if (isString(prev)) {\n return false;\n }\n\n if (prev.gradient !== (next as any).gradient) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return false;\n }\n\n return prevKeys.every(key => {\n if (key === 'stops') {\n return isStopsEqual(prev[key], next[key]);\n }\n\n return prev[key] === next[key];\n });\n};\n\nconst isLineDashEqual = (prev: number[], next: number[]) => {\n if (prev.length !== next.length) {\n return false;\n }\n\n if (prev.join('-') === next.join('-')) {\n return true;\n }\n\n return false;\n};\n\nconst isSegmentAttrEqual = (prev: any, next: any, key: string) => {\n if (isNil(prev) && isNil(next)) {\n return true;\n }\n\n if (isNil(prev)) {\n return false;\n }\n\n if (isNil(next)) {\n return false;\n }\n\n if (key === 'lineDash') {\n return isLineDashEqual(prev, next);\n }\n\n if (key === 'stroke' || key === 'fill') {\n return isColorAttrEqual(prev, next);\n }\n\n return prev === next;\n};\n\nconst fillAttrs = ['fill', 'fillOpacity', 'background', 'texture', 'texturePadding', 'textureSize', 'textureColor'];\nconst strokeAttrs = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\nconst areaAttrs = fillAttrs.concat(strokeAttrs);\n\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLineSegmentConfigs(items: any[], points: any[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n\n const checkAttributes = element?.mark?.markType === 'area' ? areaAttrs : strokeAttrs;\n\n const segments: any[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !checkAttributes.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n const res = parseCollectionMarkAttributes(entry.attrs) as any;\n\n res.points = points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex);\n return res;\n });\n }\n\n return null;\n}\n\n/**\n * get the segments for connectNulls\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getConnectLineSegmentConfigs(items: any[], points: IPointLike[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n const enableSegments = element ? element.mark.getSpec().enableSegments : false;\n let segments: { isConnect?: boolean; points: any[]; items: any[] }[] = [];\n let point: IPointLike = null;\n let isPrevDefined: boolean;\n let curSegment: { isConnect?: boolean; points: any[]; items: any[] };\n\n items.forEach((item, index) => {\n point = points[index];\n\n if (point && point.defined !== false) {\n if (!isPrevDefined) {\n // start a segment\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n curSegment.points.push(point);\n curSegment.items.push(item);\n\n if (isPrevDefined === false) {\n curSegment.isConnect = true;\n\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n isPrevDefined = true;\n } else {\n isPrevDefined = false;\n }\n });\n\n segments = segments.filter(seg => seg.points.length > 0);\n\n if (segments.length >= 2) {\n const res: ISegment[] = [];\n\n segments.forEach(entry => {\n if (entry.isConnect) {\n res.push({\n points: entry.points,\n isConnect: true\n } as ISegment);\n return;\n } else if (enableSegments) {\n const subSegments = getLineSegmentConfigs(entry.items, entry.points, element);\n\n if (subSegments) {\n subSegments.forEach(subSeg => {\n res.push(subSeg);\n });\n\n return;\n }\n }\n\n const seg = parseCollectionMarkAttributes(entry.items[0]) as any;\n seg.points = entry.points;\n\n res.push(seg);\n });\n\n return res;\n } else if (enableSegments) {\n return getLineSegmentConfigs(items, points, element);\n }\n\n return null;\n}\n\nexport function getLinePointsFromSegments(segments: any[]) {\n if (!segments) {\n return null;\n }\n return segments.reduce((points, segment) => {\n return points.concat(segment.points);\n }, []);\n}\n\nexport function parseCollectionMarkAttributes(itemNextAttrs: any) {\n const result = {};\n\n if (!itemNextAttrs) {\n return result;\n }\n\n const skipKeys = ['x', 'y', 'x1', 'y1', 'defined', 'size', 'width', 'height', 'context'];\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (skipKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n\nexport function removeSegmentAttrs(itemNextAttrs: any, element?: IElement) {\n if (!itemNextAttrs || !itemNextAttrs.segments || !itemNextAttrs.segments.length) {\n return itemNextAttrs;\n }\n\n // TODO 现在非常hack\n const segmentKeys = element?.mark?.markType === 'area' ? ['fillOpacity', 'strokeOpacity'] : ['strokeOpacity'];\n const result = {};\n Object.keys(itemNextAttrs).forEach(key => {\n if (segmentKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n","import type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual,\n isObject\n} from '@visactor/vutils';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey, MARK_OVERLAP_HIDE_KEY } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoder, invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport {\n getLineSegmentConfigs,\n getLinePointsFromSegments,\n parseCollectionMarkAttributes,\n getConnectLineSegmentConfigs,\n removeSegmentAttrs\n} from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IElement,\n IMark,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTransforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(\n attrTransforms ? transformAttributes(attrTransforms, attributes, this) : attributes,\n this.groupKey\n );\n\n if (!this.graphicItem) {\n return;\n }\n\n const { graphicName } = this.mark.getSpec();\n if (isString(graphicName)) {\n this.graphicItem.name = graphicName;\n } else if (isFunction(graphicName)) {\n this.graphicItem.name = graphicName(this);\n }\n\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n if (attrTransforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTransforms, attributes, this);\n return graphicAttributes;\n };\n }\n\n // transform initial attributes\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(Object.assign({}, attributes));\n this.setFinalGraphicAttributes(Object.assign({}, attributes));\n }\n }\n\n updateGraphicItem() {\n if (!this.graphicItem) {\n return;\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate?.getAnimationConfigs('state');\n if (stateAnimation && stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.((animate: any) => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds as IBounds;\n }\n\n getStates() {\n return this.states;\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort && newStateValues.length) {\n newStateValues.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n if (MARK_OVERLAP_HIDE_KEY in this.graphicItem.attribute && 'visible' in graphicAttributes) {\n delete this.graphicItem.attribute[MARK_OVERLAP_HIDE_KEY];\n }\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCustomizedShape();\n }\n\n private _setCustomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n hasStateAnimation() {\n const stateAnimation = this.mark.animate?.getAnimationConfigs('state');\n return stateAnimation && stateAnimation.length > 0;\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && state && this.states.includes(state);\n }\n\n updateStates(states: Record) {\n if (!this.graphicItem) {\n return false;\n }\n let nextStates = this.states.slice();\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n let forceClearState = false;\n let hasUpdate = false;\n\n Object.keys(states).forEach(stateKey => {\n if (!stateKey) {\n return;\n }\n\n const stateValue = states[stateKey];\n const isRuntimeStateUpdate =\n isObject(stateValue) && !isObjEqual(stateValue, this.runtimeStatesEncoder?.[stateKey]);\n\n if (isRuntimeStateUpdate) {\n if (nextStates.includes(stateKey)) {\n forceClearState = true;\n } else {\n nextStates.push(stateKey);\n }\n this._updateRuntimeStates(stateKey, stateValue);\n hasUpdate = true;\n } else if (stateValue) {\n if (!nextStates.includes(stateKey) && encode?.[stateKey]) {\n nextStates.push(stateKey);\n hasUpdate = true;\n }\n } else {\n if (nextStates.length) {\n const newNextStates = nextStates.filter(state => state !== stateKey);\n\n if (newNextStates.length !== nextStates.length) {\n hasUpdate = true;\n nextStates = newNextStates;\n }\n\n if (this.runtimeStatesEncoder && this.runtimeStatesEncoder[stateKey]) {\n this.runtimeStatesEncoder[stateKey] = null;\n }\n }\n }\n });\n\n if (forceClearState) {\n this.graphicItem.clearStates();\n }\n\n if (hasUpdate) {\n this.useStates(nextStates);\n return true;\n }\n\n return false;\n }\n\n addState(state: string | string[], attrs?: BaseSingleEncodeSpec) {\n if (!this.graphicItem) {\n return false;\n }\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n const nextStates = this.states.slice();\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n } else {\n this.graphicItem.clearStates();\n }\n this._updateRuntimeStates(state, attrs);\n\n this.useStates(nextStates);\n return true;\n }\n\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], stateName: string) => {\n if (stateName && !nextStates.includes(stateName) && encode?.[stateName]) {\n nextStates.push(stateName);\n }\n return nextStates;\n }, this.states.slice());\n\n if (nextStates.length !== this.states.length) {\n this.useStates(nextStates);\n\n return true;\n }\n\n return false;\n }\n\n removeState(state: string | string[]) {\n if (!this.graphicItem) {\n return false;\n }\n\n const states = array(state);\n\n if (!states.length) {\n return false;\n }\n\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return false;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? {\n ...(this.mark.getSpec() as MarkSpec).encode?.[stateName],\n ...this.runtimeStatesEncoder[stateName]\n }\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n states.sort(stateSort);\n }\n this.states = states;\n\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!has(finalGraphicAttributes, key) || !isObjEqual(finalGraphicAttributes[key], graphicAttributes[key])) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item.nextAttrs;\n\n if (\n isPointsMarkType(markType) &&\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType))\n ) {\n const markSpec = this.mark.getSpec();\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = markSpec.enableSegments;\n const connectNullsEncoder = (this.mark.getSpec() as MarkSpec).encode?.[BuiltInEncodeNames.connectNulls];\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = parseCollectionMarkAttributes(nextAttrs);\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // vchart新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式;也不支持连接线\n if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else if (connectNullsEncoder) {\n nextAttrs.segments = getConnectLineSegmentConfigs(itemNextAttrs, linePoints, this);\n\n if (nextAttrs.segments && nextAttrs.segments.some((seg: any) => seg.isConnect)) {\n const connectStyle = invokeEncoder(connectNullsEncoder, this.getDatum(), this, this.mark.parameters());\n\n connectStyle &&\n nextAttrs.segments.forEach((seg: any) => {\n if (seg.isConnect) {\n Object.assign(seg, connectStyle);\n }\n });\n }\n // when connectNulls, points need to be saved\n nextAttrs.points = linePoints;\n } else if (enableSegments) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n nextAttrs = removeSegmentAttrs(nextAttrs, this);\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes() ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes() ?? {};\n\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n // ignore loop animation final attributes\n const currentAnimators = this.mark.animate?.getElementAnimators(this).filter(animator => {\n if (animator.animationOptions.timeline.controlOptions?.ignoreLoopFinalAttributes) {\n return !animator.animationOptions.timeline.loop;\n }\n return true;\n });\n\n const animateGraphicAttributes = (currentAnimators || []).reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n /**\n * 在动画执行中获取图元最终的视觉通道结果\n * @param channel 视觉通道\n */\n getFinalAnimationAttribute(channel: string) {\n return this.getFinalGraphicAttributes()?.[channel] ?? this.getGraphicAttribute(channel);\n }\n getFinalAnimationAttributes() {\n return this.getFinalGraphicAttributes() ?? this.graphicItem.attribute;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n (this.graphicItem as any).prevAttrs && this.setPrevGraphicAttributes(null);\n (this.graphicItem as any).nextAttrs && this.setNextGraphicAttributes(null);\n (this.graphicItem as any).finalAttrs && this.setFinalGraphicAttributes(null);\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark && this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark && this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { IBounds } from '@visactor/vutils';\nimport { isArray, isNil, isString, isValid } from '@visactor/vutils';\nimport { CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport type { GroupedData } from '../graph/mark/differ';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\nimport { Element } from '../graph/element';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map = new Map();\n\n isUpdated: boolean = true;\n\n protected _groupEncodeResult: Record;\n private _groupedData: GroupedData;\n\n /** whether mark enter encode is updated */\n protected _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate;\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {}, true);\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, (spec.encode as any)[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n\n (this as any).reuseAnimate?.(mark);\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransform(this._getTransformsBeforeJoin(), data ?? DefaultMarkData, parameters);\n const progressiveTransform = transformData?.progressive;\n\n if (!progressiveTransform) {\n this.evaluateGroup(transformData);\n this.renderContext = this.parseRenderContext(transformData, parameters);\n } else {\n this.renderContext = { large: false };\n }\n\n if (this.renderContext?.progressive) {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n } else {\n let inputData: any[] = null;\n if (progressiveTransform) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n\n if (transformData.progressive.canAnimate && transformData.progressive.unfinished()) {\n this.update(this.spec);\n return this;\n }\n } else {\n inputData = transformData;\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n }\n\n this.update(this.spec);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const res = groupData(currentData, this.spec.groupBy, this.spec.groupSort);\n\n this._groupEncodeResult = null;\n this._groupedData = res;\n }\n\n protected _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType | boolean, clear?: boolean): this {\n return this.encodeState(DiffState.update, channel, value, clear);\n }\n\n encodeState(\n state: string,\n channel: string | BaseSingleEncodeSpec,\n value?: MarkFunctionType | boolean,\n clear?: boolean\n ): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if ((this.spec.encode as any)[state]) {\n const lastEncoder = (this.spec.encode as any)[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n const isSingleChannel = isString(channel);\n const clearAll = (isSingleChannel && clear) || (!isSingleChannel && value);\n\n if (clearAll) {\n Object.keys(lastEncoder).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n\n (this.spec.encode as any)[state] = {};\n } else if (isSingleChannel) {\n this.detach(parseEncodeType(lastEncoder[channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n }\n }\n }\n\n if (channel) {\n if (!(this.spec.encode as any)[state]) {\n (this.spec.encode as any)[state] = {};\n }\n\n // update encode & append new dependencies\n if (isString(channel)) {\n (this.spec.encode as any)[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n (this.spec.encode as any)[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else if (channel) {\n Object.assign((this.spec.encode as any)[state], channel);\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'clipPath',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments',\n 'stateSort',\n 'graphicName',\n 'overflow'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil((this.spec as any)[key])) {\n (this.spec as any)[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil((config as any)[key])) {\n (this.spec as any)[key] = (config as any)[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n (scales as any)[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach((state: string) => {\n const useEncoders = (encoders as any)[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record = {};\n Object.keys(encoders).forEach((state: string) => {\n const useEncoders = (encoders as any)[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field as string;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const extendedEvt = getExtendedEvents(this.view, event, type, EVENT_SOURCE_VIEW);\n const activeElement = event.element as IElement;\n if (activeElement?.mark === this) {\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n (this as any).initAnimate?.(this.spec);\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n group.appendChild(this);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0,\n overflow: this.spec.overflow\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n\n this.graphicParent.setAttributes({\n overflow: this.spec.overflow\n });\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n (this as any).updateAnimate?.(spec);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n if (!isNil(spec.clipPath)) {\n const paths = isArray(spec.clipPath) ? spec.clipPath : spec.clipPath(this.elements);\n\n if (paths && paths.length) {\n this.graphicItem.setAttribute('path', paths);\n } else {\n this.graphicItem.setAttributes({\n path: paths,\n clip: false\n });\n }\n }\n\n if (!isNil(spec.overflow)) {\n this.graphicItem.setAttribute('overflow', spec.overflow);\n }\n\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n }\n\n createElement() {\n return new Element(this);\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : this.createElement();\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate?.getElementAnimators(element, DiffState.exit);\n animators && animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n } else {\n this.differ.setCurrentData(this._groupedData);\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (!this._groupedData || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupedData.keys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n (res as any)[key] = invokeEncoder(groupEncode, el.items && el.items[0] && el.items[0].datum, el, parameters);\n });\n\n this._groupEncodeResult = res;\n\n return res;\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n return !isNil(spec.interactive) ? { pickable: spec.interactive } : null;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.glyph && this._groupEncodeResult) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, this._groupEncodeResult[element.groupKey]);\n });\n } else if ((groupEncodeAttrs as any)?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, (groupEncodeAttrs as any)[element.groupKey]);\n });\n } else if (initAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n\n if (\n this.isCollectionMark() &&\n (groupEncodeAttrs as any)?.[element.groupKey] &&\n isValid((groupEncodeAttrs as any)[element.groupKey].defined)\n ) {\n element.items.forEach(item => {\n item.nextAttrs.defined = (groupEncodeAttrs as any)[element.groupKey].defined;\n });\n delete (groupEncodeAttrs as any)[element.groupKey].defined;\n }\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? (groupEncodeAttrs as any)?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupedData) {\n const index = this._groupedData.keys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this._groupedData;\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n canAnimateAfterProgressive() {\n return (\n this.renderContext &&\n this.renderContext.beforeTransformProgressive &&\n this.renderContext.beforeTransformProgressive.canAnimate()\n );\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupedData.keys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = this.createElement();\n element.diffState = DiffState.enter;\n element.updateData(key as string, dataSlice, keyGetter);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key as string, dataSlice, keyGetter);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record = {};\n this._groupedData.keys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = this.createElement();\n element.diffState = DiffState.enter;\n element.updateData(key as string, [entry], keyGetter);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key as string] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this.evaluateEncode(elements, encoders, parameters);\n\n if (\n progressiveIndex === 0 &&\n this._groupEncodeResult &&\n !this.isCollectionMark() &&\n this.markType !== GrammarMarkType.glyph\n ) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n if (this._groupEncodeResult[firstElement.groupKey]) {\n (group as IGroup).setTheme({ common: this._groupEncodeResult[firstElement.groupKey] });\n }\n }\n }\n } else {\n this.evaluateEncode(elements, encoders, parameters, true);\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n const transform = this.renderContext.beforeTransformProgressive;\n transform.progressiveRun();\n const output = transform.output();\n\n if (transform.canAnimate) {\n if (transform.unfinished()) {\n return;\n }\n this.evaluateGroup(output);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupedData.keys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransform(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n if (this.elements && this.elements[0] && this.elements[0].getGraphicItem) {\n return this.elements[0].getGraphicItem();\n }\n }\n\n getBounds() {\n return (this.graphicItem ? this.graphicItem.AABBBounds : this.getGroupGraphicItem()?.AABBBounds) as IBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n this.releaseEvent();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n super.clear();\n }\n\n prepareRelease() {\n // 清除数据,防止数据比对失败\n this.differ.setCurrentData(null);\n this.animate?.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.differ = null;\n this.elements = [];\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n","import type { INode } from '@visactor/vrender-core';\nimport { transformsByType } from '../graph/attributes';\nimport { DefaultKey, DefaultMarkData } from '../graph/constants';\nimport { BuiltInEncodeNames, GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport { createGraphicItem } from '../graph/util/graphic';\nimport type { IElement, IGlyphMark, IGroupMark, IMark, IView } from '../types';\nimport { Mark } from './mark';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { invokeEncoderToItems } from '../graph/mark/encode';\n\nexport class GroupMark extends Mark implements IGroupMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, GrammarMarkType.group, group);\n this.children = [];\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n appendChild(mark: IMark) {\n this.children.push(mark);\n return this;\n }\n removeChild(mark: IMark) {\n this.children = this.children.filter(child => child !== mark);\n return this;\n }\n\n includesChild(mark: IMark, descendant: boolean = true) {\n if (this.children.includes(mark)) {\n return true;\n }\n if (!descendant) {\n return false;\n }\n return this.children.some(child => {\n if (child.markType === GrammarMarkType.group) {\n return (child as IGroupMark).includesChild(mark, true);\n }\n return false;\n });\n }\n\n updateLayoutChildren() {\n if (!this.children.length) {\n return this;\n }\n if (!this.layoutChildren) {\n this.layoutChildren = [];\n }\n\n this.layoutChildren = this.children.filter(child => child.needLayout());\n\n return this;\n }\n\n getAttributeTransforms() {\n return transformsByType.rect;\n }\n\n protected evaluateJoin(data: any[]) {\n if (!this.elements.length) {\n const el = this.createElement();\n\n el.updateData(DefaultKey, DefaultMarkData, () => '');\n this.elements = [el];\n this.elementMap.set(DefaultKey, el);\n }\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n const initAttrs: any = {};\n\n if (!isNil(spec.clip)) {\n initAttrs.clip = spec.clip;\n }\n\n if (!isNil(spec.zIndex)) {\n initAttrs.zIndex = spec.zIndex;\n }\n\n if (!isNil(spec.clipPath)) {\n const paths = isFunction(spec.clipPath) ? spec.clipPath([element]) : spec.clipPath;\n\n if (paths && paths.length) {\n initAttrs.path = paths;\n } else {\n initAttrs.path = null;\n initAttrs.clip = false;\n }\n }\n\n if (!isNil(spec.interactive)) {\n initAttrs.pickable = spec.interactive;\n }\n\n return initAttrs;\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n const el = this.elements[0];\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n\n this._groupEncodeResult = nextAttrs;\n return nextAttrs;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, groupEncodeAttrs);\n });\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic();\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK, { graphicItem });\n\n graphicItem.name = `${this.id() || this.markType}`;\n\n this.graphicParent.insertIntoKeepIdx(graphicItem as unknown as INode, this.graphicIndex);\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK, { graphicItem });\n\n return graphicItem;\n }\n}\n","import { isNil, isString } from '@visactor/vutils';\nimport type {\n BuiltInGrammarType,\n ICoordinate,\n IData,\n IGrammarBase,\n IMark,\n IScale,\n ISignal,\n IRecordedGrammars,\n IGroupMark,\n IMarkTreeNode,\n IRecordedTreeGrammars\n} from '../types';\nimport { GrammarMarkType } from '../graph/enums';\n\nexport class RecordedGrammars implements IRecordedGrammars {\n private _warning: (key: string, grammar: IGrammarBase) => void;\n private _mapKey: (grammar: IGrammarBase) => string;\n private _grammars: Record = {\n signal: [],\n data: [],\n scale: [],\n coordinate: [],\n mark: [],\n customized: []\n };\n // map key might not be unique\n private _grammarMap: Record> = {\n signal: {},\n data: {},\n scale: {},\n coordinate: {},\n mark: {},\n customized: {}\n };\n private _size: number = 0;\n\n constructor(\n mapKey: string | ((grammar: IGrammarBase) => string),\n warningWhenDuplicated?: (key: string, grammar: IGrammarBase) => void\n ) {\n this._mapKey = isString(mapKey) ? grammar => grammar[mapKey] : mapKey;\n this._warning = warningWhenDuplicated;\n }\n\n record(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType].push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap[grammarType][key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap[grammarType][key] = grammar;\n }\n }\n } else {\n this._grammars.customized.push(grammar);\n if (!isNil(key)) {\n // ignore grammar if key is duplicated\n if (this._grammarMap.customized[key]) {\n this._warning?.(key, grammar);\n } else {\n this._grammarMap.customized[key] = grammar;\n }\n }\n }\n this._size += 1;\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n const grammarType = grammar.grammarType;\n const key = this._mapKey(grammar);\n if (this._grammarMap[grammarType]) {\n this._grammars[grammarType] = this._grammars[grammarType].filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap[grammarType][key] === grammar) {\n delete this._grammarMap[grammarType][key];\n }\n } else {\n this._grammars.customized = this._grammars.customized.filter(\n (storedGrammar: IGrammarBase) => storedGrammar !== grammar\n );\n if (!isNil(key) && this._grammarMap.customized[key] === grammar) {\n delete this._grammarMap.customized[key];\n }\n }\n this._size -= 1;\n return this;\n }\n\n size() {\n return this._size;\n }\n\n getSignal(key: string): ISignal | null {\n return (this._grammarMap.signal[key] as ISignal) ?? null;\n }\n getData(key: string): IData | null {\n return (this._grammarMap.data[key] as IData) ?? null;\n }\n getScale(key: string): IScale | null {\n return (this._grammarMap.scale[key] as IScale) ?? null;\n }\n getCoordinate(key: string): ICoordinate | null {\n return (this._grammarMap.coordinate[key] as ICoordinate) ?? null;\n }\n getMark(key: string): IMark | null {\n return (this._grammarMap.mark[key] as IMark) ?? null;\n }\n getCustomized(key: string): IGrammarBase | null {\n return this._grammarMap.customized[key] ?? null;\n }\n getGrammar(key: string): IGrammarBase | null {\n if (this._grammarMap.data[key]) {\n return this._grammarMap.data[key];\n } else if (this._grammarMap.signal[key]) {\n return this._grammarMap.signal[key];\n } else if (this._grammarMap.scale[key]) {\n return this._grammarMap.scale[key];\n } else if (this._grammarMap.coordinate[key]) {\n return this._grammarMap.coordinate[key];\n } else if (this._grammarMap.mark[key]) {\n return this._grammarMap.mark[key];\n } else if (this._grammarMap.customized[key]) {\n return this._grammarMap.customized[key];\n }\n return null;\n }\n\n getAllSignals(): ISignal[] {\n return this._grammars.signal as ISignal[];\n }\n getAllData(): IData[] {\n return this._grammars.data as IData[];\n }\n getAllScales(): IScale[] {\n return this._grammars.scale as IScale[];\n }\n getAllCoordinates(): ICoordinate[] {\n return this._grammars.coordinate as ICoordinate[];\n }\n getAllMarks(): IMark[] {\n return this._grammars.mark as IMark[];\n }\n getAllCustomized(): IGrammarBase[] {\n return this._grammars.customized;\n }\n\n traverse(func: (grammar: IGrammarBase) => boolean | void) {\n Object.values(this._grammars ?? {}).forEach(grammars =>\n (grammars ?? []).forEach(grammar => {\n // stop traversing when func returns true\n if (func.call(null, grammar)) {\n return;\n }\n })\n );\n }\n\n find(func: (grammar: IGrammarBase) => boolean) {\n let targetGrammar: IGrammarBase = null;\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammar = grammar;\n return true;\n }\n return false;\n });\n return targetGrammar;\n }\n\n filter(func: (grammar: IGrammarBase) => boolean) {\n const targetGrammars: IGrammarBase[] = [];\n this.traverse(grammar => {\n if (func.call(null, grammar) === true) {\n targetGrammars.push(grammar);\n }\n });\n return targetGrammars;\n }\n\n clear() {\n this._size = 0;\n this._grammars = { signal: [], data: [], scale: [], coordinate: [], mark: [], customized: [] };\n this._grammarMap = { signal: {}, data: {}, scale: {}, coordinate: {}, mark: {}, customized: {} };\n }\n\n release() {\n this._size = 0;\n this._grammars = null;\n this._grammarMap = null;\n }\n}\n\nexport class RecordedTreeGrammars extends RecordedGrammars implements IRecordedTreeGrammars {\n private _markNodes: IMarkTreeNode[] = [];\n\n record(grammar: IGrammarBase) {\n super.record(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode: IMarkTreeNode = {\n mark: mark,\n parent: null,\n children: []\n };\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && (targetMark as IGroupMark).includesChild(mark, false)) {\n node.children.push(currentNode);\n currentNode.parent = node;\n } else if (mark.markType === GrammarMarkType.group && (mark as IGroupMark).includesChild(targetMark, false)) {\n currentNode.children.push(node);\n node.parent = currentNode;\n }\n });\n this._markNodes.push(currentNode);\n }\n return this;\n }\n\n unrecord(grammar: IGrammarBase) {\n super.unrecord(grammar);\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n const currentNode = this._markNodes.find(node => node.mark === mark);\n this._markNodes.forEach(node => {\n const targetMark = node.mark;\n if (targetMark.markType === GrammarMarkType.group && node.children.includes(currentNode)) {\n node.children = node.children.filter(n => n !== currentNode);\n currentNode.parent = null;\n } else if (mark.markType === GrammarMarkType.group && currentNode.children.includes(node)) {\n currentNode.children = currentNode.children.filter(n => n !== node);\n node.parent = null;\n }\n });\n this._markNodes = this._markNodes.filter(n => n !== currentNode);\n }\n return this;\n }\n\n getAllMarkNodes() {\n return this._markNodes;\n }\n\n clear() {\n super.clear();\n this._markNodes = [];\n }\n\n release() {\n super.release();\n this._markNodes = null;\n }\n}\n\nexport const releaseUpMarkNode = (node: IMarkTreeNode) => {\n // if (node.mark.get)\n};\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IMark, MarkSpec } from '../types';\nimport { Mark } from '../view/mark';\nimport { createGraphicItem } from '../graph/util/graphic';\n\nexport class Text extends Mark {\n static markType = GrammarMarkType.text;\n declare markType: GrammarMarkType.text;\n protected declare spec: MarkSpec;\n\n addGraphicItem(initAttrs: any, groupKey?: string) {\n const originalAttrs = initAttrs && initAttrs.limitAttrs;\n\n const isRich =\n originalAttrs &&\n (originalAttrs.textType === 'rich' || (originalAttrs.text && originalAttrs.text.type === 'rich'));\n\n const graphicItem = createGraphicItem(\n this as IMark,\n isRich ? GrammarMarkType.richtext : GrammarMarkType.text,\n initAttrs\n );\n\n return super.addGraphicItem(initAttrs, groupKey, graphicItem);\n }\n\n release(): void {\n super.release();\n }\n}\n","import type {\n CircleAxisAttributes,\n CircleCrosshairAttrs,\n ColorLegendAttributes,\n ContinuousPlayerAttributes,\n DataLabelAttrs,\n LineDataLabelAttrs,\n DataZoomAttributes,\n DiscreteLegendAttrs,\n DiscretePlayerAttributes,\n LineAxisAttributes,\n LineCrosshairAttrs,\n LineLabelAttrs,\n PolygonCrosshairAttrs,\n RectCrosshairAttrs,\n RectLabelAttrs,\n SectorCrosshairAttrs,\n SizeLegendAttributes,\n SliderAttributes,\n SymbolLabelAttrs,\n ArcLabelAttrs,\n TooltipAttributes,\n BaseLabelAttrs,\n TitleAttrs,\n LineAxisGridAttributes,\n CircleAxisGridAttributes,\n ScrollBarAttributes,\n AreaLabelAttrs\n} from '@visactor/vrender-components';\nimport type { IComponentTheme, RecursivePartial } from '../../types';\n\nconst axis: RecursivePartial = {\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#89909d',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n start: { x: 0, y: 0 },\n end: { x: 100, y: 0 },\n x: 0,\n y: 0\n};\n\nconst circleAxis: RecursivePartial = {\n title: {\n space: 4,\n padding: [0, 0, 0, 0],\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n },\n text: 'theta'\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n style: {\n fontSize: 12,\n fill: '#6F6F6F',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n items: [],\n startAngle: 0,\n endAngle: Math.PI * 2,\n radius: 100,\n innerRadius: 0,\n center: { x: 0, y: 0 },\n x: 0,\n y: 0\n};\n\nconst grid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst circleGrid: RecursivePartial = {\n style: {\n stroke: '#f1f2f5'\n }\n};\n\nconst discreteLegend: RecursivePartial = {\n layout: 'vertical',\n title: {\n align: 'start',\n space: 12,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: 10,\n spaceRow: 10,\n shape: {\n space: 4,\n style: {\n size: 10,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n stroke: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n label: {\n space: 4,\n style: {\n fontSize: 12,\n fill: 'black',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8',\n fillOpacity: 0.5\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n fillOpacity: 0.7,\n fill: 'gray'\n },\n unSelectedHover: {\n fillOpacity: 0.2,\n fill: 'gray'\n }\n }\n },\n focus: false,\n focusIconStyle: {\n size: 10,\n fill: '#333',\n cursor: 'pointer'\n },\n visible: true,\n padding: {\n top: 2,\n bottom: 2,\n left: 2,\n right: 2\n }\n },\n autoPage: true,\n pager: {\n space: 12,\n handler: {\n style: {\n size: 10\n },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: false,\n items: [\n {\n index: 0,\n id: '',\n label: '',\n shape: {\n fill: '#6690F2',\n stroke: '#6690F2',\n symbolType: 'circle'\n }\n }\n ]\n};\n\nconst colorLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n colors: [],\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 8,\n railStyle: {\n cornerRadius: 5\n }\n};\n\nconst sizeLegend: RecursivePartial = {\n title: {\n visible: false,\n text: ''\n },\n trackStyle: {\n fill: '#ccc'\n },\n layout: 'horizontal',\n align: 'bottom',\n railWidth: 200,\n railHeight: 6,\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nconst lineCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n};\n\nconst rectCrosshair: RecursivePartial = {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n rectStyle: {\n width: 10,\n height: 10\n }\n};\n\nconst sectorCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI / 6\n};\n\nconst circleCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nconst polygonCrosshair: RecursivePartial = {\n center: { x: 0, y: 0 },\n radius: 100,\n startAngle: 0,\n endAngle: Math.PI * 2,\n sides: 6\n};\n\nconst slider: RecursivePartial = {\n layout: 'horizontal',\n railWidth: 200,\n railHeight: 10,\n railStyle: {\n cornerRadius: 5\n },\n range: {\n draggableTrack: true\n },\n startText: {\n visible: true,\n text: '',\n space: 8\n },\n endText: {\n visible: true,\n text: '',\n space: 8\n },\n min: 0,\n max: 1,\n value: [0, 1]\n};\n\nexport const dataLabel: RecursivePartial = {\n size: { width: 400, height: 400 },\n dataLabels: []\n};\n\nexport const lineDataLabel: RecursivePartial = {\n type: 'line-data',\n data: [\n {\n text: ''\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: false,\n clampForce: false\n },\n smartInvert: false\n};\n\nexport const lineLabel: RecursivePartial = {\n type: 'line',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'start',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const areaLabel: RecursivePartial = {\n type: 'area',\n data: [\n {\n text: '',\n data: {}\n }\n ],\n position: 'end',\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const rectLabel: RecursivePartial = {\n type: 'rect',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const symbolLabel: RecursivePartial = {\n type: 'symbol',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n position: 'top',\n overlap: {\n avoidBaseMark: true,\n size: {\n width: 1000,\n height: 1000\n },\n strategy: [\n {\n type: 'position'\n }\n ]\n },\n smartInvert: false\n};\n\nexport const arcLabel: RecursivePartial = {\n type: 'arc',\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n width: 800,\n height: 600,\n position: 'outside',\n\n zIndex: 302\n};\n\nexport const pointLabel: RecursivePartial = {\n data: [\n {\n text: '',\n fill: '#606773',\n data: {}\n }\n ],\n overlap: {\n avoidBaseMark: false,\n clampForce: false,\n size: {\n width: 1000,\n height: 1000\n }\n },\n smartInvert: false\n};\n\nexport const datazoom: RecursivePartial = {\n orient: 'bottom',\n showDetail: 'auto',\n brushSelect: true,\n start: 0,\n end: 1,\n position: { x: 0, y: 0 },\n size: { width: 500, height: 40 },\n previewData: []\n};\n\nexport const continuousPlayer: RecursivePartial = {};\n\nexport const discretePlayer: RecursivePartial = {};\n\nexport const tooltip: RecursivePartial = {};\n\nexport const title: RecursivePartial = {\n textStyle: {\n fill: '#21252c'\n },\n subtextStyle: {\n fill: '#606773'\n }\n};\n\nexport const scrollbar: RecursivePartial = {\n width: 12,\n height: 12,\n padding: [2, 2],\n railStyle: {\n fill: 'rgba(0, 0, 0, .1)'\n }\n};\n\nexport const defaultComponentTheme: IComponentTheme = {\n axis,\n circleAxis,\n\n grid,\n circleGrid,\n\n discreteLegend,\n colorLegend,\n sizeLegend,\n\n lineCrosshair,\n rectCrosshair,\n sectorCrosshair,\n circleCrosshair,\n polygonCrosshair,\n\n slider,\n\n dataLabel,\n pointLabel,\n lineLabel,\n areaLabel,\n rectLabel,\n symbolLabel,\n arcLabel,\n lineDataLabel,\n\n datazoom,\n\n continuousPlayer,\n discretePlayer,\n\n tooltip,\n\n title,\n\n scrollbar\n};\n","export const DEFAULT_PADDING = 5;\n","import type { IMarkTheme } from '../../types';\n\nexport const defaultMarkTheme: IMarkTheme = {\n symbol: {\n shape: 'circle',\n size: 8\n },\n text: {\n fontSize: 14,\n fill: '#000000'\n }\n};\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nconst darkComponents = Object.assign({}, defaultComponentTheme);\ndarkComponents.axis = Object.assign({}, darkComponents.axis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.circleAxis = Object.assign({}, darkComponents.circleAxis, {\n label: { style: { fill: '#bbbdc3' } },\n line: { style: { stroke: '#4b4f54' } },\n tick: { style: { stroke: '#4b4f54' } },\n subTick: { style: { stroke: '#4b4f54' } }\n});\ndarkComponents.grid = Object.assign({}, darkComponents.grid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.circleGrid = Object.assign({}, darkComponents.circleGrid, {\n style: { stroke: '#404349' }\n});\ndarkComponents.rectLabel = Object.assign({}, darkComponents.rectLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.lineLabel = Object.assign({}, darkComponents.lineLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\n\ndarkComponents.symbolLabel = Object.assign({}, darkComponents.symbolLabel, {\n data: [\n {\n text: '',\n fill: '#888c93',\n data: {}\n }\n ]\n});\ndarkComponents.title = Object.assign({}, darkComponents.title, {\n textStyle: {\n fill: '#fdfdfd'\n },\n subtextStyle: {\n fill: '#888c93'\n }\n});\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n padding: DEFAULT_PADDING,\n background: '#202226',\n palette: {\n default: [\n '#5383F4',\n '#7BCF8E',\n '#FF9D2C',\n '#FFDB26',\n '#7568D9',\n '#80D8FB',\n '#1857A3',\n '#CAB0E8',\n '#FF8867',\n '#B9E493',\n '#2CB4A8',\n '#B9E4E3'\n ]\n },\n marks: defaultMarkTheme,\n components: darkComponents\n};\n","import type { ITheme } from '../types';\nimport { defaultComponentTheme } from './common/component';\nimport { DEFAULT_PADDING } from './common/constants';\nimport { defaultMarkTheme } from './common/mark';\n\nexport const defaultTheme: ITheme = {\n name: 'default',\n padding: DEFAULT_PADDING,\n palette: {\n default: [\n '#6690F2',\n '#70D6A3',\n '#B4E6E2',\n '#63B5FC',\n '#FF8F62',\n '#FFDC83',\n '#BCC5FD',\n '#A29BFE',\n '#63C4C7',\n '#F68484'\n ]\n },\n marks: defaultMarkTheme,\n components: defaultComponentTheme\n};\n","import { DefaultKey } from '../graph/constants';\nimport { GrammarMarkType, HOOK_EVENT } from '../graph/enums';\nimport type {\n IGroupMark,\n IView,\n IComponent,\n ComponentSpec,\n IData,\n Nil,\n MarkFunctionType,\n StateEncodeSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { Mark } from './mark';\n\nexport class Component extends Mark implements IComponent {\n declare markType: GrammarMarkType.component;\n readonly componentType: string;\n protected declare spec: ComponentSpec;\n\n protected mode?: '2d' | '3d';\n\n protected _componentDatum: any = { [DefaultKey]: 0 };\n protected _encoders: StateEncodeSpec;\n\n constructor(view: IView, componentType: string, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, GrammarMarkType.component, group);\n this.componentType = componentType;\n this.spec.type = 'component';\n this.spec.componentType = componentType;\n this.mode = mode;\n this._updateComponentEncoders();\n }\n\n configureComponent(config: any) {\n this.spec.componentConfig = config;\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem =\n newGraphicItem ??\n Factory.createGraphicComponent(this.componentType, attrs, { mode: this.mode, skipDefault: this.spec.skipTheme });\n\n if (graphicItem) {\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK, { graphicItem });\n (this.graphicParent as any).appendChild(graphicItem);\n\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK, { graphicItem });\n }\n\n return graphicItem;\n }\n\n join(data: IData | string | Nil) {\n return super.join(data, DefaultKey);\n }\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n this._updateComponentEncoders();\n return this;\n }\n\n parseRenderContext() {\n return { large: false };\n }\n\n protected _prepareRejoin() {\n this._componentDatum[DefaultKey] += 1;\n }\n\n protected evaluateJoin(data: any[]) {\n this.spec.key = DefaultKey;\n\n if (data) {\n (data as any)[DefaultKey] = this._componentDatum[DefaultKey];\n\n this._componentDatum = data;\n } else {\n this._componentDatum = { [DefaultKey]: this._componentDatum[DefaultKey] };\n }\n\n // component mark do not support data join\n return super.evaluateJoin([this._componentDatum]);\n }\n\n protected _updateComponentEncoders() {\n this._encoders = this.spec.encode;\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n}\n","import type { IGrammarBase, IMark, IRunningConfig, MarkSpec } from '../types';\nimport type { DiffResult } from '../types/base';\nimport type { IViewDiff } from '../types/morph';\nimport { diffSingle, groupData } from './mark/differ';\nimport { GrammarMarkType } from './enums';\n\nconst EmptyKey = Symbol.for('key');\n\nexport class ViewDiff implements IViewDiff {\n diffGrammar(prevGrammars: U[], nextGrammars: U[]): DiffResult {\n const key = (grammar: U) => grammar.id() ?? Symbol();\n return diffSingle(prevGrammars, nextGrammars, key);\n }\n\n diffMark(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): DiffResult {\n const diffResult: DiffResult = {\n enter: [],\n exit: [],\n update: []\n };\n\n let prevDiffMarks: IMark[] = [];\n let nextDiffMarks: IMark[] = [];\n\n // filter out marks & specs which will not morph\n prevMarks.forEach(mark => {\n if (\n // group mark does not support reusing or morphing\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n prevDiffMarks.push(mark);\n } else {\n diffResult.exit.push({ prev: [mark] });\n }\n });\n nextMarks.forEach(mark => {\n if (\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n nextDiffMarks.push(mark);\n } else {\n diffResult.enter.push({ next: [mark] });\n }\n });\n\n // 1. match by custom key\n const keyDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.getMorphConfig().morphKey,\n mark => mark.getMorphConfig().morphKey\n );\n prevDiffMarks = keyDiffResult.prev;\n nextDiffMarks = keyDiffResult.next;\n diffResult.update = diffResult.update.concat(keyDiffResult.update);\n\n // 2. match by name\n const nameDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.id(),\n mark => mark.id()\n );\n prevDiffMarks = nameDiffResult.prev;\n nextDiffMarks = nameDiffResult.next;\n diffResult.update = diffResult.update.concat(nameDiffResult.update);\n\n // 3. match by index\n\n // FIXME: mark index cannot be get before executing, index is decided by remove/order for now\n const prevParentGroup = groupData(prevDiffMarks, mark => mark.group?.id?.());\n const nextParentGroup = groupData(nextDiffMarks, mark => mark.group?.id?.());\n\n Object.keys(nextParentGroup).forEach(groupName => {\n const prevChildren = prevParentGroup.data.get(groupName);\n const nextChildren = nextParentGroup.data.get(groupName);\n if (prevChildren && nextChildren) {\n for (let i = 0; i < Math.max(prevChildren.length, nextChildren.length); i += 1) {\n const prevChild = prevChildren[i];\n const nextChild = nextChildren[i];\n if (prevChild && nextChild) {\n diffResult.update.push({ prev: [prevChild], next: [nextChild] });\n } else if (prevChild) {\n diffResult.exit.push({ prev: [prevChild] });\n } else if (nextChild) {\n diffResult.enter.push({ next: [nextChild] });\n }\n }\n\n prevDiffMarks = prevDiffMarks.filter(mark => !prevChildren.includes(mark));\n nextDiffMarks = nextDiffMarks.filter(mark => !nextChildren.includes(mark));\n }\n });\n\n // 4. handle unmatched marks\n prevDiffMarks.forEach(mark => diffResult.exit.push({ prev: [mark] }));\n nextDiffMarks.forEach(mark => diffResult.enter.push({ next: [mark] }));\n\n return diffResult;\n }\n\n private diffUpdateByGroup(\n prev: U[],\n next: V[],\n prevKey: (datum: U) => symbol | string,\n nextKey: (datum: V) => symbol | string\n ) {\n const prevGroup = groupData(prev, datum => prevKey(datum) ?? EmptyKey);\n const nextGroup = groupData(next, datum => nextKey(datum) ?? EmptyKey);\n\n let prevAfterDiff = prev;\n let nextAfterDiff = next;\n const update: { prev: U[]; next: V[] }[] = [];\n nextGroup.keys.forEach(key => {\n if (key !== EmptyKey) {\n const prevKeyData = prevGroup.data.get(key);\n const nextKeyData = nextGroup.data.get(key);\n if (prevKeyData && nextKeyData) {\n update.push({ prev: prevKeyData, next: nextKeyData });\n prevAfterDiff = prevAfterDiff.filter(datum => !prevKeyData.includes(datum));\n nextAfterDiff = nextAfterDiff.filter(datum => !nextKeyData.includes(datum));\n }\n }\n });\n return {\n prev: prevAfterDiff,\n next: nextAfterDiff,\n update\n };\n }\n}\n","import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isString, getContainerSize, Logger, array, isNil, isArray } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n GroupMarkSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n SIGNAL_VIEW_BOX,\n ID_PREFIX,\n NAME_PREFIX,\n EVENT_SOURCE_WINDOW\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { isGrammar } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport type { IViewDiff } from '../types/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\nimport { ViewDiff } from '../graph/view-diff';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n\n /** morph animate */\n private _differ: IViewDiff;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: >(\n // event: T,\n // ...args: EventEmitter.EventArgs\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById(id: string): ISignal | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal(signal: string | ISignal, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal(value?: T, update?: SignalFunctionType): ISignal {\n const signal: ISignal = new Signal(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n const GlyphMark = Factory.getMark(GrammarMarkType.glyph);\n\n if (GlyphMark) {\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n }\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n (this as any).event?.(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate?.disable();\n } else {\n this.animate?.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || Factory.getDefaultLayout();\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks && this.animate) {\n this.animate.animate();\n } else {\n // 清理没有动画的离场元素\n this.traverseMarkTree(\n mark => {\n mark.cleanExitElements();\n },\n null,\n true\n );\n }\n // 绘图 =>\n this.renderer.render(immediately);\n //\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n\n // evaluate dataflow\n this._dataflow.evaluate();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n (this as any).morph?.(normalizedRunningConfig);\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._differ.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._differ.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._differ.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if ((this as any).morph && ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll)) {\n (this as any).addMorphMarks?.({ prev: diff.prev, next: diff.next });\n } else if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate?.stop();\n if (runningConfig.enableExitAnimation && this.animate) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || (node.mark.animate && node.mark.animate.getAnimatorCount() !== 0)) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (!mark.animate || mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate && mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n this.evaluate({ morph: false });\n } else {\n this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n interaction(type: string, spec: Partial) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n /**\n * 初始化事件配置,将所有配置转化为 {[key: string]: boolean } 格式。\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n initializeEventConfig(config: any) {\n const eventsConfig = Object.assign({ defaults: {} }, config);\n\n const unpack = (obj: any, keys: string[]) => {\n keys.forEach(k => {\n if (isArray(obj[k])) {\n obj[k] = obj[k].reduce((set: any, key: any) => {\n set[key] = true;\n return set;\n }, {});\n }\n });\n };\n\n unpack(eventsConfig.defaults, ['prevent', 'allow']);\n unpack(eventsConfig, [EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW]);\n\n return eventsConfig;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const extendedEvt = getExtendedEvents(this, event, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, (event as any).element);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = (this as any).initAnimate?.(this);\n\n this._differ = new ViewDiff();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = this.initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n } else if (\n this._progressiveMarks &&\n this.animate &&\n this._progressiveMarks.every(mark => mark.canAnimateAfterProgressive())\n ) {\n this.animate.animate();\n } else if (this._progressiveMarks) {\n this._progressiveMarks = null;\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n Logger.setInstance(null);\n\n this.animate?.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n","import type { RenderMode } from '../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\n\n// TODO: feishu => lark\nexport function toRenderMode(mode: RenderMode): any {\n switch (mode) {\n case RenderModeEnum['desktop-browser']:\n case RenderModeEnum['mobile-browser']:\n return 'browser';\n case RenderModeEnum.node:\n case RenderModeEnum.worker:\n return 'node';\n case RenderModeEnum.miniApp:\n case RenderModeEnum['desktop-miniApp']:\n return 'feishu';\n case RenderModeEnum.lynx:\n return 'lynx';\n case RenderModeEnum.wx:\n return 'wx';\n case RenderModeEnum.tt:\n return 'tt';\n case RenderModeEnum.harmony:\n return 'harmony';\n }\n return 'browser';\n}\n","import type { IGroupMark, IGrammarBase, IView, IRenderer, InteractionSpec } from '@visactor/vgrammar-core';\nimport type { Maybe, IPerformanceHook, StringOrNumber } from '../../typings';\nimport type { IColor, IStage } from '@visactor/vrender-core';\nimport type { IChart } from '../../chart/interface/chart';\nimport type { IVChart } from '../../core/interface';\nimport type { IMorphConfig } from '../../animation/spec';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { EventSourceType, EventType } from '../../event/interface';\n\nexport type CompilerListenerParameters = {\n type: EventType;\n event: Event;\n source: EventSourceType;\n // FIXME: 这里 item 应当为场景树的 Item 类型\n item: any | null;\n datum: any | null;\n markId: number | null;\n modelId: number | null;\n markUserId: StringOrNumber | null;\n modelUserId: StringOrNumber | null;\n};\n\nexport interface IProductMap {\n /** 编译产物 id 和对应的在 vchart 中的 GrammarItem */\n [productId: string]: IGrammarItemMap;\n}\n\nexport interface IGrammarItemMap {\n /** GrammarItem id 和 对应的引用 */\n [id: number]: T;\n}\n\nexport type ICompilerModel = Record>;\n\nexport interface ICompiler {\n isInited?: boolean;\n getVGrammarView: () => IView;\n getModel: () => ICompilerModel;\n getRenderer: () => IRenderer;\n getCanvas: () => HTMLCanvasElement | undefined;\n getStage: () => IStage | undefined;\n compile: (ctx: { chart: IChart; vChart: IVChart }, option: any) => void;\n clear: (ctx: { chart: IChart; vChart: IVChart }, removeGraphicItems?: boolean) => void;\n renderNextTick: (morphConfig?: IMorphConfig) => void;\n render: (morphConfig?: IMorphConfig) => void;\n updateViewBox: (viewBox: IBoundsLike, reRender?: boolean) => void;\n resize: (width: number, height: number, reRender?: boolean) => void;\n setBackground: (color: IColor) => void;\n setSize: (width: number, height: number) => void;\n setViewBox: (viewBox: IBoundsLike, reRender?: boolean) => void;\n addEventListener: (\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ) => void;\n removeEventListener: (\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ) => void;\n release: () => void;\n releaseGrammar: (removeGraphicItems: boolean) => void;\n addGrammarItem: (grammarItem: IGrammarItem) => void;\n removeGrammarItem: (grammarItem: IGrammarItem, reserveVGrammarModel?: boolean) => void;\n addInteraction: (interaction: InteractionSpec & { seriesId?: number; regionId?: number }) => void;\n removeInteraction: (seriesId: number) => void;\n updateDepend: (items?: IGrammarItem[]) => boolean;\n}\n\nexport interface ICompilable {\n /** 获取 compile 对象 */\n getCompiler: () => ICompiler;\n /** 获取 vgrammar view */\n getVGrammarView: () => IView;\n\n /** 编译总入口 */\n compile: () => void;\n /** 编译所有 mark */\n compileMarks?: (group?: string | IGroupMark) => void;\n /** 编译所有 data */\n compileData?: () => void;\n /** 编译所有 signal */\n compileSignal?: () => void;\n\n /** 清除compile 内容入口 */\n clear?: () => void;\n\n /** 全部编译完成 lift circle */\n afterCompile?: () => void;\n\n /** 释放总入口 */\n release: () => void;\n}\n\nexport interface ICompilableInitOption {\n /** 编译对象 应当由外部提供 */\n getCompiler: () => ICompiler;\n /** 性能测试钩子 */\n performanceHook?: IPerformanceHook;\n}\n\nexport enum GrammarType {\n data = 'data',\n signal = 'signal',\n mark = 'mark'\n}\n\nexport interface IGrammarItem extends ICompilable {\n id: number;\n /** 语法元素类型 */\n grammarType: GrammarType;\n /** 获取语法元素 */\n getProduct: () => Maybe;\n /** 生成语法元素名称 */\n generateProductId: () => string;\n /** 获取语法元素名称 */\n getProductId: () => string;\n /** 删除已编译的语法元素 */\n removeProduct: (reserveVGrammarModel?: boolean) => void;\n /** 获取该语法元素依赖的语法元素 */\n getDepend: () => IGrammarItem[];\n /** 设置该语法元素依赖的语法元素 */\n setDepend: (...depend: IGrammarItem[]) => void;\n /** 更新语法元素的依赖,返回是否全部成功更新 */\n updateDepend: () => boolean;\n}\n\nexport type GrammarItemInitOption = ICompilableInitOption;\n\nexport type GrammarItemCompileOption = Record;\n","import { ChartEvent, Event_Source_Type } from './../constant/event';\nimport type { IElement, InteractionSpec, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { View } from '@visactor/vgrammar-core';\nimport type {\n CompilerListenerParameters,\n ICompiler,\n ICompilerModel,\n IGrammarItem,\n IProductMap,\n IRenderContainer,\n IRenderOption\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from './interface/compilable-item';\nimport { toRenderMode } from './util';\nimport { isMobileLikeMode, isTrueBrowser } from '../util/env';\nimport { isString } from '../util/type';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValid, Logger, LoggerLevel } from '@visactor/vutils';\nimport type { EventSourceType } from '../event/interface';\nimport type { IChart } from '../chart/interface';\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IColor, IStage } from '@visactor/vrender-core';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { IVChart } from '../core/interface';\n\ntype EventListener = {\n type: string;\n callback: (...args: any[]) => void;\n};\n\nexport class Compiler implements ICompiler {\n protected _view: IView;\n /**\n * 获取 VGrammar View 实例\n */\n getVGrammarView() {\n return this._view;\n }\n protected _viewListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _windowListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n protected _canvasListeners: Map<(...args: any[]) => any, EventListener> = new Map();\n\n isInited: boolean = false;\n\n private _nextRafId: number;\n\n protected _width: number;\n protected _height: number;\n\n protected _container: IRenderContainer;\n protected _option: IRenderOption;\n // 已释放标记\n private _released: boolean = false;\n\n protected _model: ICompilerModel = {\n [GrammarType.signal]: {},\n [GrammarType.data]: {},\n [GrammarType.mark]: {}\n };\n\n protected _interactions: (InteractionSpec & { seriesId?: number; regionId?: number })[];\n getModel() {\n return this._model;\n }\n\n private _compileChart: IChart = null;\n\n constructor(container: IRenderContainer, option: IRenderOption) {\n this._container = container;\n this._option = option;\n }\n\n getRenderer() {\n return this._view?.renderer;\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._view?.renderer.canvas();\n }\n\n /**\n * 获取 渲染引擎\n */\n getStage(): IStage | undefined {\n return this._view?.renderer.stage() as unknown as IStage;\n }\n\n initView() {\n if (this._released) {\n return;\n }\n this.isInited = true;\n if (this._view) {\n return;\n }\n const logger = new Logger(this._option.logLevel ?? LoggerLevel.Error);\n if (this._option?.onError) {\n logger.addErrorHandler((...args) => {\n this._option?.onError?.(...args);\n });\n }\n const {\n performanceHook,\n autoRefreshDpr,\n dpr,\n mode,\n gestureConfig,\n interactive,\n clickInterval,\n autoPreventDefault,\n ...restOption\n } = this._option;\n this._view = new View({\n width: this._width,\n height: this._height,\n container: this._container.dom ?? null,\n renderCanvas: this._container.canvas ?? null,\n hooks: performanceHook, // vgrammar 事件改造后,性能回调函数放在了hooks中实现\n ...restOption,\n dpr,\n autoRefresh: isValid(autoRefreshDpr) ? autoRefreshDpr : !isValid(dpr),\n mode: toRenderMode(mode),\n autoFit: false,\n eventConfig: {\n gesture: isValid(gestureConfig) ? (gestureConfig as any) : isMobileLikeMode(mode),\n disable: interactive === false,\n clickInterval,\n autoPreventDefault\n },\n doLayout: () => {\n this._compileChart?.onLayout(this._view);\n },\n logger: logger,\n logLevel: logger.level()\n });\n this._setCanvasStyle();\n\n // emit afterRender event\n this.getStage().hooks.afterRender.tap('chart-event', this.handleStageRender);\n\n if (interactive !== false) {\n // 将 view 实例化之前监听的事件挂载到 view 上\n this._viewListeners.forEach(listener => {\n this._view?.addEventListener(listener.type, listener.callback);\n });\n }\n }\n\n protected handleStageRender = () => {\n this._compileChart?.getEvent()?.emit(ChartEvent.afterRender, { chart: this._compileChart });\n };\n\n private _setCanvasStyle() {\n if (!this._view) {\n return;\n }\n if (this._container.dom && !isString(this._container.dom)) {\n this._container.dom.style.display = 'block';\n this._container.dom.style.position = 'relative';\n const canvas = this.getCanvas();\n if (canvas) {\n canvas.style.display = 'block';\n }\n }\n }\n\n protected compileInteractions() {\n this._view.removeAllInteractions();\n if (this._interactions?.length) {\n const regionCombindInteractions = {};\n\n this._interactions.forEach(interaction => {\n if (interaction.regionId) {\n const interactionId = `${interaction.regionId}-${interaction.type}-${interaction.id ?? ''}`;\n const spec = regionCombindInteractions[interactionId];\n if (spec) {\n regionCombindInteractions[interactionId] = {\n ...spec,\n ...interaction,\n selector: [...spec.selector, ...(interaction as any).selector]\n };\n } else {\n regionCombindInteractions[interactionId] = interaction;\n }\n } else {\n this._view.interaction(interaction.type, interaction);\n }\n });\n\n Object.keys(regionCombindInteractions).forEach(key => {\n const interaction = this._view.interaction(regionCombindInteractions[key].type, regionCombindInteractions[key]);\n if (this._compileChart) {\n const region = this._compileChart.getRegionsInIds([regionCombindInteractions[key].regionId])[0];\n if (region) {\n region.interaction.addVgrammarInteraction(interaction.getStartState(), interaction);\n }\n }\n });\n }\n }\n\n compile(ctx: { chart: IChart; vChart: IVChart }, option: any) {\n if (this._released) {\n return;\n }\n const { chart } = ctx;\n this._compileChart = chart;\n this.initView();\n if (!this._view) {\n return;\n }\n\n chart.compile();\n chart.afterCompile();\n this.updateDepend();\n\n this.compileInteractions();\n }\n protected clearNextRender() {\n if (this._nextRafId) {\n vglobal.getCancelAnimationFrame()(this._nextRafId);\n this._nextRafId = null;\n\n return true;\n }\n\n return false;\n }\n\n clear(ctx: { chart: IChart; vChart: IVChart }, removeGraphicItems: boolean = false) {\n const { chart } = ctx;\n\n this.clearNextRender();\n chart.clear();\n this.releaseGrammar(removeGraphicItems);\n }\n\n renderNextTick(morphConfig?: IMorphConfig): void {\n if (this._released) {\n return;\n }\n if (!this._nextRafId) {\n this._nextRafId = vglobal.getRequestAnimationFrame()(() => {\n this._nextRafId = null;\n this.render(morphConfig);\n }) as unknown as number;\n }\n }\n\n render(morphConfig?: IMorphConfig) {\n if (this._released) {\n return;\n }\n\n this.initView();\n if (!this._view) {\n return;\n }\n this._view?.run(morphConfig);\n if (this.clearNextRender()) {\n this._view?.run(morphConfig);\n }\n }\n\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n resize(width: number, height: number, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n this._width = width;\n this._height = height;\n\n this._view.resize(width, height);\n if (reRender) {\n this.render({ morph: false });\n }\n }\n\n setBackground(color: IColor) {\n this._view?.background(color);\n }\n\n setSize(width: number, height: number) {\n this._width = width;\n this._height = height;\n if (!this._view) {\n return;\n }\n\n this._view.width(width);\n this._view.height(height);\n }\n\n setViewBox(viewBox: IBoundsLike, reRender: boolean = true) {\n if (!this._view) {\n return;\n }\n\n this._view.renderer.setViewBox(viewBox, reRender);\n }\n\n addEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n // TODO: 需要明确一下 interactive 的作用范围,同时考虑是否存在非交互行为的事件以及是否需要生效\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = function (event: any, element: IElement | null) {\n const context = element?.mark?.getContext() ?? {};\n const modelId = isValid(context.modelId) ? context.modelId : null;\n const markId = isValid(context.markId) ? context.markId : null;\n const modelUserId = isValid(context.modelUserId) ? context.modelUserId : null;\n const markUserId = isValid(context.markUserId) ? context.markUserId : null;\n\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: element,\n datum: element?.getDatum?.() || null,\n markId,\n modelId,\n markUserId,\n modelUserId\n };\n callback.call(null, params);\n }.bind(this);\n this._viewListeners.set(callback, { type, callback: wrappedCallback });\n // 如果 view 已经初始化则立刻挂载监听\n // FIXME: 目前 vgrammar 类型声明没有对齐,事件相关类型声明并没有使用 SceneItem\n this._view?.addEventListener(type, wrappedCallback as any);\n } else if (source === Event_Source_Type.window) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._windowListeners.set(callback, { type, callback: wrappedCallback });\n const windowObject = this._getGlobalThis();\n windowObject?.addEventListener(type, wrappedCallback);\n } else if (source === Event_Source_Type.canvas) {\n const wrappedCallback = function wrappedCallback(event: any) {\n // TODO: vgrammar 暂未提供基于事件直接筛选相应 mark 的能力,这里无法获取到相应的 item\n const params: CompilerListenerParameters = {\n event,\n type,\n source,\n item: null,\n datum: null,\n markId: null,\n modelId: null,\n markUserId: null,\n modelUserId: null\n };\n callback.call(null, params);\n }.bind(this);\n this._canvasListeners.set(callback, { type, callback: wrappedCallback });\n const canvasObject = this.getStage()?.window;\n canvasObject?.addEventListener(type, wrappedCallback);\n }\n }\n\n removeEventListener(\n source: EventSourceType,\n type: string,\n callback: (params: CompilerListenerParameters) => void\n ): void {\n if (this._option.interactive === false) {\n return;\n }\n if (source === Event_Source_Type.chart) {\n const wrappedCallback = this._viewListeners.get(callback)?.callback;\n wrappedCallback && this._view?.removeEventListener(type, wrappedCallback);\n this._viewListeners.delete(callback);\n } else if (source === Event_Source_Type.window) {\n const windowObject = this._getGlobalThis();\n const wrappedCallback = this._windowListeners.get(callback)?.callback;\n wrappedCallback && windowObject?.removeEventListener(type, wrappedCallback);\n this._windowListeners.delete(callback);\n } else if (source === Event_Source_Type.canvas) {\n const canvasObject = this.getStage()?.window;\n const wrappedCallback = this._canvasListeners.get(callback)?.callback;\n canvasObject && wrappedCallback && canvasObject?.removeEventListener(type, wrappedCallback);\n this._canvasListeners.delete(callback);\n }\n }\n\n protected releaseEvent(): void {\n const stage = this.getStage();\n\n if (stage) {\n stage.hooks.afterRender.unTap('chart-event', this.handleStageRender);\n }\n\n // 相应的事件remove在model中完成\n this._viewListeners.clear();\n this._windowListeners.clear();\n this._canvasListeners.clear();\n }\n\n release(): void {\n this.clearNextRender();\n this.releaseEvent();\n this._option = this._container = null as any;\n // vgrammar release\n this._releaseModel();\n this._view?.release();\n this._view = null;\n this.isInited = false;\n this._compileChart = null;\n this._released = true;\n }\n\n /**\n * 释放VGrammar\n * @param removeGraphicItems 是否删除场景元素,在同步渲染,并且无动画时,必须设置为true,否则有绘图残留\n */\n releaseGrammar(removeGraphicItems: boolean = false) {\n this._releaseModel();\n if (removeGraphicItems) {\n this._view?.removeAllGraphicItems();\n }\n this._view?.removeAllGrammars();\n }\n\n protected _releaseModel() {\n // 释放model\n Object.keys(this._model).forEach(type => {\n Object.values(this._model[type] as IProductMap).forEach(grammarItemMap => {\n Object.values(grammarItemMap).forEach((item: IGrammarItem) => {\n item.removeProduct(true); // 保留 vgrammar 语法元素,下面一起清空\n });\n });\n this._model[type] = {};\n });\n }\n\n /** 添加语法元素 */\n addGrammarItem(grammarItem: IGrammarItem) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n if (isNil(this._model[type][id])) {\n this._model[type][id] = {};\n }\n this._model[type][id][grammarItem.id] = grammarItem;\n }\n\n /** 删除语法元素 */\n removeGrammarItem(grammarItem: IGrammarItem, reserveVGrammarModel?: boolean) {\n const product = grammarItem.getProduct();\n if (isNil(product)) {\n return;\n }\n const id = product.id();\n const type = grammarItem.grammarType;\n const map = this._model[type][id];\n if (isValid(map)) {\n delete map[grammarItem.id];\n if (Object.keys(map).length === 0) {\n delete this._model[type][id];\n }\n }\n if (!reserveVGrammarModel) {\n this._view?.removeGrammar(product);\n }\n }\n\n addInteraction(interaction: InteractionSpec & { seriesId?: number; regionId?: number }) {\n if (!this._interactions) {\n this._interactions = [];\n }\n\n this._interactions.push(interaction);\n }\n\n removeInteraction(seriesId: number) {\n if (!this._interactions) {\n return;\n }\n\n this._interactions = this._interactions.filter(entry => entry.seriesId !== seriesId);\n }\n\n /** 更新语法元素间的依赖关系,返回是否全部成功更新 */\n updateDepend(items?: IGrammarItem[]): boolean {\n if (isValid(items) && items.length > 0) {\n // 局部更新依赖\n return items.every(item => item.updateDepend());\n }\n // 全局更新依赖\n Object.values(this._model).forEach(productMap => {\n Object.values(productMap).forEach(grammarItemMap => {\n const grammarItems = Object.values(grammarItemMap) as IGrammarItem[];\n // 获取编译产物\n const product = grammarItems[0].getProduct();\n\n // 获取编译产物的依赖项\n const dependList = grammarItems\n .reduce((depend, item) => {\n if (item.getDepend().length > 0) {\n return depend.concat(item.getDepend());\n }\n return depend;\n }, [] as IGrammarItem[])\n .filter(grammarItem => !!grammarItem)\n .map(grammarItem => grammarItem.getProduct());\n\n // 更新依赖\n product.depend(dependList);\n });\n });\n return true;\n }\n\n private _getGlobalThis() {\n return isTrueBrowser(this._option.mode) ? globalThis : this.getStage()?.window;\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport { error } from './debug';\n/**\n * @description 图片导出相关接口\n */\n\nexport function URLToImage(name: string = 'vchart', url: string) {\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('target', '_blank');\n link.setAttribute('download', `${name}.png`);\n link.dispatchEvent(new MouseEvent('click'));\n}\n\nexport function OffscreenCanvasToDataURL(c: OffscreenCanvas) {\n // eslint-disable-next-line promise/param-names\n return new Promise((r: (s: string) => void) => {\n c.convertToBlob().then((b: any) => {\n const reader = new FileReader();\n reader.readAsDataURL(b);\n reader.onload = () => {\n r(reader.result as string);\n };\n });\n });\n}\n\nexport async function getCanvasDataURL(c: HTMLCanvasElement | OffscreenCanvas, ctx?: utilFunctionCtx) {\n if (!c) {\n return '';\n }\n try {\n if (OffscreenCanvas !== undefined && c instanceof OffscreenCanvas) {\n return OffscreenCanvasToDataURL(c);\n }\n } catch (_error) {\n (ctx?.onError ?? error)(`getCanvasDataURL error : ${_error.toString()}`);\n }\n return (c).toDataURL();\n}\n","import { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\n\nexport const DEFAULT_THEME: PopTipAttributes = {\n visible: true,\n position: 'auto',\n titleStyle: {\n fontSize: 16,\n fill: '#08979c'\n },\n contentStyle: {\n fontSize: 12,\n fill: 'green'\n },\n panel: {\n visible: true,\n\n fill: '#e6fffb',\n size: 12,\n space: 0,\n stroke: '#87e8de',\n lineWidth: 1,\n cornerRadius: 4\n }\n};\n\nexport const theme: { poptip: PopTipAttributes } = {\n poptip: merge({}, DEFAULT_THEME)\n};\n","import { container } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { PopTipAttributes } from './type';\nimport { DEFAULT_THEME, theme } from './theme';\nimport { registerGroup, registerRect, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadPoptipComponent() {\n registerGroup();\n registerText();\n registerSymbol();\n registerRect();\n}\n\nexport function setPoptipTheme(defaultPoptipTheme: PopTipAttributes) {\n merge(theme.poptip, DEFAULT_THEME, defaultPoptipTheme);\n}\n","import { getContainerSize, isString } from '@visactor/vutils';\nimport type { IChartSpec } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../typings';\nimport { array, isMiniAppLikeMode, isTrueBrowser, isValid } from '../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ICartesianChartSpec } from './cartesian/interface';\nimport type { IChartOption } from './interface/common';\nimport type { IUpdateSpecResult } from '../model/interface';\nimport { vglobal } from '@visactor/vgrammar-core';\n\nexport function setDefaultCrosshairForCartesianChart(spec: ICartesianChartSpec) {\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n [spec.direction === Direction.horizontal ? 'yField' : 'xField']: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n}\n\nexport function calculateChartSize(\n spec: { width?: number; height?: number },\n option: Pick,\n defaultSize: { width: number; height: number }\n) {\n const { width: userWidth, height: userHeight } = spec;\n if (isValid(userWidth) && isValid(userHeight)) {\n return {\n width: userWidth,\n height: userHeight\n };\n }\n let width = defaultSize.width;\n let height = defaultSize.height;\n const container = option.container;\n const canvas = option.canvas;\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n container,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (canvas && isTrueBrowser(option.mode)) {\n let canvasNode;\n if (isString(canvas)) {\n canvasNode = vglobal.getElementById(canvas);\n } else {\n canvasNode = canvas;\n }\n const { width: containerWidth, height: containerHeight } = getContainerSize(\n canvasNode as HTMLCanvasElement,\n defaultSize.width,\n defaultSize.height\n );\n width = containerWidth;\n height = containerHeight;\n } else if (isMiniAppLikeMode(option.mode) && (option.modeParams as any)?.domref) {\n const domRef = (option.modeParams as any).domref;\n width = domRef.width;\n height = domRef.height;\n }\n\n width = userWidth ?? width;\n height = userHeight ?? height;\n\n return {\n width,\n height\n };\n}\n\nexport function mergeUpdateResult(target: IUpdateSpecResult, ...sources: IUpdateSpecResult[]) {\n const merge = (key: keyof IUpdateSpecResult) => sources.reduce((value, cur) => value || cur?.[key], target[key]);\n\n Object.assign(target, {\n change: merge('change'),\n reCompile: merge('reCompile'),\n reMake: merge('reMake'),\n reRender: merge('reRender'),\n reSize: merge('reSize'),\n reTransformSpec: merge('reTransformSpec'),\n changeTheme: merge('changeTheme'),\n changeBackground: merge('changeBackground')\n } as Required);\n return target;\n}\n\nexport function getTrimPaddingConfig(chartType: string, spec: IChartSpec) {\n if (\n chartType === 'line' ||\n chartType === 'area' ||\n (chartType === 'common' && spec.series.every(item => item.type === 'area' || item.type === 'line'))\n ) {\n return {\n paddingInner: 1,\n paddingOuter: 0\n };\n }\n\n return {\n paddingOuter: 0\n };\n}\n","import type { IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { GrammarItemCompileOption, GrammarItemInitOption, IGrammarItem } from '../interface';\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IAnimate,\n IAnimateArranger,\n IElement,\n IGroupMark,\n IMark,\n IMarkConfig,\n MarkAnimationSpec,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport type { IRegion } from '../../region/interface';\nimport type { ICompilableData } from '../data/interface';\n\nexport interface IMarkStateManager {\n getStateInfoList: () => IStateInfo[];\n getStateInfo: (stateValue: StateValue) => IStateInfo;\n addStateInfo: (stateInfo: IStateInfo) => void;\n changeStateInfo: (stateInfo: Partial) => void;\n clearStateInfo: (stateValues: StateValue[]) => void;\n checkOneState: (\n renderNode: IElement,\n datum: Datum | Datum[],\n state: IStateInfo,\n isMultiMark?: boolean\n ) => 'in' | 'out' | 'skip';\n checkState: (renderNode: IElement, datum: Datum | Datum[]) => StateValue[];\n updateLayoutState: (noRender?: boolean) => void;\n}\n\nexport interface IMarkData extends ICompilableData {\n setCompiledProductId: (name: string) => any;\n generateProductId: () => string;\n}\n\nexport interface ICompilableMarkOption extends GrammarItemInitOption {\n key?: string | ((datum: Datum) => string);\n /** 分组字段,更多用于 morphing 动画的 element 匹配 */\n groupKey?: string;\n /** 是否在dataflow的过程中,布局前跳过该mark */\n skipBeforeLayouted?: boolean;\n\n /* VGrammar的组件是否支持3d */\n mode?: '2d' | '3d';\n /** don't separate style of mark */\n noSeparateStyle?: boolean;\n}\n\nexport interface ICompilableMark extends IGrammarItem {\n // 类型\n readonly type: MarkType;\n // id\n readonly id: number;\n // name\n readonly name: string;\n // key field\n readonly key?: string | ((datum: Datum) => string);\n // parent model\n readonly model: IModel;\n\n // 数据 可以没有\n getData: () => IMarkData | undefined;\n setData: (d: IMarkData) => void;\n getDataView: () => DataView | undefined;\n setDataView: (d?: DataView, productId?: string) => void;\n\n // 状态\n state: IMarkStateManager;\n readonly stateStyle: IMarkStateStyle;\n hasState: (state: string) => boolean;\n getState: (state: string) => any;\n updateState: (newState: Record) => void;\n /** 更新group | enter中的静态样式 */\n updateStaticEncode: () => void;\n /** 更新 mark 样式 */\n compileEncode: () => void;\n /** 更新encode中的样式 */\n updateLayoutState: (noRender?: boolean, recursion?: boolean) => void;\n /** 更新某一个状态 */\n updateMarkState: (key: string) => void;\n\n // transform\n setTransform: (transform: TransformSpec[] | Nil) => void;\n\n // 动画配置\n setAnimationConfig: (config: Partial) => void;\n getAnimationConfig: () => Partial;\n\n // 是否显示\n getVisible: () => boolean;\n setVisible: (visible: boolean) => void;\n\n // groupKey 配置\n getGroupKey: () => string | undefined;\n setGroupKey: (groupKey: string) => void;\n\n // 用户 id\n getUserId: () => StringOrNumber | undefined;\n setUserId: (id: StringOrNumber) => void;\n\n compile: (option?: IMarkCompileOption) => void;\n\n getProduct: () => Maybe;\n getProductElements: () => Maybe;\n\n /** 获取子mark */\n getMarks: () => ICompilableMark[];\n\n /** 是否跳过布局阶段 */\n setSkipBeforeLayouted: (skip: boolean) => void;\n getSkipBeforeLayouted: () => boolean;\n\n setStateSortCallback: (stateSort: (stateA: string, stateB: string) => number) => void;\n\n getMarkConfig: () => IMarkConfig;\n setMarkConfig: (config: IMarkConfig) => void;\n\n /** 开始状态动画 */\n runAnimationByState: (animationState?: string) => IAnimateArranger;\n /** 停止状态动画*/\n stopAnimationByState: (animationState?: string) => IAnimate;\n /** 暂停状态动画*/\n pauseAnimationByState: (animationState: string) => IAnimate;\n /** 恢复状态动画*/\n resumeAnimationByState: (animationState: string) => IAnimate;\n}\n\nexport interface IMarkDataInitOption extends ICompilableMarkOption {\n mark: ICompilableMark;\n}\n\nexport interface IMarkCompileOption extends GrammarItemCompileOption {\n group?: string | IGroupMark;\n ignoreChildren?: boolean;\n context?: any;\n}\n\nexport interface IStateInfo {\n /** 状态值 */\n stateValue: StateValue;\n // 对应的数据维度 可以是多维度\n // TODO: fields 是否保留\n fields?: any | null | undefined;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据 */\n datumKeys?: string[] | null | undefined;\n /** 筛选 item */\n items?: any[] | null | undefined;\n /** 筛选函数 */\n filter?: ((datum: any, options: Record) => boolean) | null | undefined;\n cache?: {\n [key: string]: {\n [key: string]: boolean;\n };\n };\n /** 状态优先级 */\n level?: number | undefined;\n}\n// TODO:目前看这个类型没有必要,确认后彻底删除\nexport interface IStateSpec {\n /** 状态值 */\n stateValue: StateValue;\n /** 筛选数据 */\n datums?: any[] | null | undefined;\n /** 筛选数据对应字段 */\n datumKeys?: string[] | null | undefined;\n /** TODO: 暂时不提供 filter 函数形式 */\n // filter?:\n // | ((datum: any, options: Record) => boolean)\n // | null\n // | undefined;\n /** 状态优先级 */\n level?: number | undefined;\n}\n\nexport interface IMarkState {\n readonly id: number;\n // 状态\n getStates: () => IStateInfo[];\n\n // state 相关\n getState: (stateValue: StateValue) => IStateInfo | undefined;\n addState: (stateInfo: IStateInfo) => void;\n changeState: (stateInfo: Partial, update?: boolean) => void;\n checkState: (item: any, datum: any) => string[];\n\n clearState: (stateValues: StateValue[], update?: boolean) => void;\n\n // 更新\n update: () => void;\n}\n\nexport enum STATE_VALUE_ENUM {\n STATE_NORMAL = 'normal',\n\n STATE_HOVER = 'hover',\n STATE_HOVER_REVERSE = 'hover_reverse',\n\n STATE_DIMENSION_HOVER = 'dimension_hover',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n\n STATE_SELECTED = 'selected',\n STATE_SELECTED_REVERSE = 'selected_reverse',\n\n // todo: 2.0考虑优化\n STATE_SANKEY_EMPHASIS = 'selected',\n STATE_SANKEY_EMPHASIS_REVERSE = 'blur'\n}\n\nexport enum STATE_VALUE_ENUM_REVERSE {\n STATE_HOVER_REVERSE = 'hover_reverse',\n STATE_DIMENSION_HOVER_REVERSE = 'dimension_hover_reverse',\n STATE_SELECTED_REVERSE = 'selected_reverse'\n}\n\nexport type STATE_NORMAL = typeof STATE_VALUE_ENUM.STATE_NORMAL;\nexport type STATE_HOVER = typeof STATE_VALUE_ENUM.STATE_HOVER;\nexport type STATE_HOVER_REVERSE = typeof STATE_VALUE_ENUM.STATE_HOVER_REVERSE;\nexport type STATE_CUSTOM = string;\n\n// TODO: 待补充\n\nexport type StateValueNot = STATE_HOVER_REVERSE | STATE_CUSTOM;\nexport type StateValue = STATE_NORMAL | STATE_HOVER | STATE_CUSTOM;\nexport type StateValueType = StateValue | StateValueNot;\n\nexport interface IAttributeOpt {\n element: IElement;\n mark: IElement['mark'];\n parent: IElement['mark']['group'];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelMarkAttributeContext {\n [key: string]: unknown;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesMarkAttributeContext extends IModelMarkAttributeContext {\n // 通用的默认属性值获取,比如color,如果有散点图有sizeScale,则可以获取 size\n globalScale: (scaleKey: string, value: string | number) => unknown;\n // 传入seriesField值,获取对应的颜色。\n // 如果传入 null ,返回的是当前系列对应的第一个颜色值。\n seriesColor: (seriesValue?: string | number) => string;\n /**\n * 获取当前的 region\n * @returns\n */\n getRegion: () => IRegion;\n}\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IMark } from '../interface';\n\n/** 跟随 mark 一起存储的信息 */\nexport interface IMarkInfo {\n /** 样式和 seriesField 有关 */\n styleWithSeriesField?: boolean;\n /** mark name */\n name?: string;\n}\n\nexport class MarkSet {\n protected _children: IMark[] = [];\n protected _markNameMap: Record = {};\n getMarkNameMap() {\n return this._markNameMap;\n }\n\n protected readonly _infoMap = new Map();\n static readonly defaultMarkInfo: IMarkInfo = {};\n\n addMark(mark?: IMark, markInfo?: IMarkInfo) {\n if (isNil(mark)) {\n return;\n }\n this._children.push(mark);\n this._markNameMap[mark.name] = mark;\n this._infoMap.set(mark, merge({}, MarkSet.defaultMarkInfo, markInfo));\n }\n\n removeMark(markName: string): void {\n const index = this._children.findIndex(m => m.name === markName);\n if (index >= 0) {\n this._infoMap.delete(this._children[index]);\n delete this._markNameMap[markName];\n this._children.splice(index, 1);\n }\n }\n clear() {\n this._children = [];\n this._markNameMap = {};\n this._infoMap.clear();\n }\n\n forEach(callbackfn: (value: IMark, index: number, array: IMark[]) => void) {\n this._children.forEach(callbackfn);\n }\n\n includes(mark: IMark, fromIndex?: number) {\n return this._children.includes(mark, fromIndex);\n }\n\n get(key: number | string) {\n if (!isNaN(Number(key))) {\n return this._children[key];\n }\n return this._markNameMap[key];\n }\n\n getMarks() {\n return this._children.slice();\n }\n\n getMarksInType(type: string | string[]): IMark[] {\n const types = array(type);\n return this._children.filter(m => types.includes(m.type));\n }\n\n getMarkInId(markId: number): IMark | undefined {\n return this._children.find(m => m.id === markId);\n }\n\n /**\n * 获取满足某 info 的所有 mark\n * @param info\n * @returns\n */\n getMarkWithInfo(info: Partial) {\n return this._children.find(mark => {\n return Object.keys(info).every(key => info[key] === this._infoMap.get(mark)[key]);\n });\n }\n}\n","import { isEmpty, isArray } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DimensionEventParams } from '../event/events/dimension/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionEventEnum } from '../event/events/dimension/interface';\nimport type { IMark } from '../mark/interface';\nimport type { EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\n\nexport class DimensionTrigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _option: ITriggerOption;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n\n private _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n private _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n constructor(option: ITriggerOption) {\n this._option = option;\n this.event = this._option.model.getOption().getChart().getEvent(); // new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n // do nothing\n }\n\n registerMark(mark: IMark): void {\n // do nothing\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER])) {\n this._marks.addMark(mark);\n }\n if (!isEmpty(mark.stateStyle[STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE])) {\n this._markReverse.addMark(mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n event.on(DimensionEventEnum.dimensionHover, this.onHover as EventCallback);\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n // do nothing\n }\n\n protected getEventElement(params: DimensionEventParams, reverse: boolean = false) {\n // items 修改遍历方法从 mark\n\n const items: IElement[] = [];\n params.dimensionInfo.forEach(df => {\n df.data.forEach(dd => {\n const seriesMark = (reverse ? this._markReverse : this._marks)\n .getMarks()\n .filter(m => m.model === dd.series && m.getVisible());\n\n seriesMark.forEach(m => {\n const markProduct = m.getProduct();\n if (!markProduct || !markProduct.elements) {\n return;\n }\n\n const elements = markProduct.elements.filter(e => {\n const datum = e.getDatum();\n let c;\n if (isArray(datum)) {\n c = datum.every((oneData, i) => oneData === dd.datum[i]);\n } else {\n c = dd.datum.some(dd_d => dd_d === datum);\n }\n return reverse ? !c : c;\n });\n items.push(...elements);\n });\n });\n });\n\n return items;\n }\n\n private onHover = (params: DimensionEventParams) => {\n switch (params.action) {\n case 'enter':\n // clear last hover\n // eslint-disable-next-line no-case-declarations\n const lastHover = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n lastHover.forEach(e => this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE, e));\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, false);\n // add new\n const elements = this.getEventElement(params);\n elements.forEach(el => this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, el));\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER);\n break;\n case 'leave':\n // clear all\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_DIMENSION_HOVER, true);\n params = null;\n break;\n case 'click':\n case 'move':\n default:\n break;\n }\n };\n}\n","import { isFunction } from '@visactor/vutils';\nimport type { IAttrs, IMarkStateStyle } from '../../mark/interface';\nimport { STATE_VALUE_ENUM } from './interface';\n\nexport function isAttrChangeable(key: string, stateStyle: IMarkStateStyle) {\n for (const state in stateStyle) {\n if (state === STATE_VALUE_ENUM.STATE_NORMAL) {\n const style = stateStyle[state][key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n return true;\n }\n continue;\n }\n if (key in stateStyle[state]) {\n return true;\n }\n }\n return false;\n}\n\nexport function isStateAttrChangeable(key: string, stateStyle: Partial>, facetField: string) {\n const style = stateStyle[key]?.style;\n const isGradient = isGradientAttribute(key, style);\n if (isGradient) {\n return true;\n }\n const isFunctionStyle = isFunction(style);\n if (isFunctionStyle) {\n return true;\n }\n const isScale = !!style?.scale;\n if (isScale) {\n if (style.field !== facetField) {\n return true;\n }\n }\n return false;\n}\n\nfunction isGradientAttribute(key: string, style: any) {\n return (key === 'fill' || key === 'stroke') && style?.gradient && style?.stops;\n}\n\nconst DEFAULT_STATE_VALUE_ENUM = {};\nObject.values(STATE_VALUE_ENUM).forEach(v => {\n DEFAULT_STATE_VALUE_ENUM[v] = true;\n});\n\nexport function stateInDefaultEnum(state: string) {\n return !!DEFAULT_STATE_VALUE_ENUM[state];\n}\n\nconst DEFAULT_STATE_VALUE_TO_REVERSE = {\n [STATE_VALUE_ENUM.STATE_HOVER]: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n [STATE_VALUE_ENUM.STATE_SELECTED]: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n [STATE_VALUE_ENUM.STATE_DIMENSION_HOVER]: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER_REVERSE\n};\n\nexport function stateToReverse(state: string) {\n return DEFAULT_STATE_VALUE_TO_REVERSE[state];\n}\n","import { isEmpty } from '@visactor/vutils';\nimport type { StateValue } from '../compile/mark';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BaseEventParams } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { IInteraction } from './interface';\nimport type { IInteraction as IVGrammarInteraction } from '@visactor/vgrammar-core';\n\nimport { stateToReverse } from '../compile/mark/util';\n\nexport class Interaction implements IInteraction {\n // 数据\n private _stateMarks: Map = new Map();\n // active\n private _stateElements: Map = new Map();\n\n private _vgrammarInteractions: Map = new Map();\n addVgrammarInteraction(state: StateValue, i: IVGrammarInteraction) {\n if (!state) {\n return;\n }\n\n if (!this._vgrammarInteractions.get(state)) {\n !this._vgrammarInteractions.set(state, [i]);\n } else {\n this._vgrammarInteractions.get(state).push(i);\n }\n }\n\n static markStateEnable(mark: IMark, state: string) {\n return !isEmpty(mark.stateStyle[state]);\n }\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n registerMark(state: StateValue, mark: IMark): void {\n if (!this._stateMarks.has(state)) {\n this._stateMarks.set(state, []);\n }\n this._stateMarks.get(state)?.push(mark);\n }\n\n getStateMark(state: StateValue): IMark[] | null {\n return this._stateMarks.get(state);\n }\n\n filterEventMark(params: BaseEventParams, state: StateValue): boolean {\n return !!(params.mark && this._stateMarks.get(state)?.includes(params.mark));\n }\n\n getEventElement(stateValue: StateValue) {\n return this._stateElements.get(stateValue) ?? [];\n }\n\n getEventElementData(stateValue: StateValue) {\n return this.getEventElement(stateValue).map(e => e.getDatum());\n }\n\n exchangeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n // reverse\n const reState = stateToReverse(stateValue);\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n if (reState) {\n this.addEventElement(reState, e);\n }\n });\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n if (reState) {\n element.removeState(reState);\n }\n }\n this._stateElements.set(stateValue, [element]);\n }\n\n removeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n element.removeState(stateValue);\n const list = this._stateElements.get(stateValue)?.filter(e => e !== element) ?? [];\n this._stateElements.set(stateValue, list);\n // reverse\n const reState = stateToReverse(stateValue);\n if (reState) {\n if (list.length === 0) {\n // clear reverse\n this.clearEventElement(reState, false);\n } else {\n // add reverse to element\n this.addEventElement(reState, element);\n }\n }\n }\n\n addEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n }\n const list = this._stateElements.get(stateValue) ?? [];\n list.push(element);\n this._stateElements.set(stateValue, list);\n }\n\n clearEventElement(stateValue: StateValue, clearReverse: boolean) {\n if (this._disableTriggerEvent) {\n return;\n }\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n });\n this._stateElements.set(stateValue, []);\n\n if (clearReverse) {\n const reState = stateToReverse(stateValue);\n if (reState) {\n this.clearEventElement(reState, false);\n }\n }\n }\n\n clearAllEventElement() {\n if (this._disableTriggerEvent) {\n return;\n }\n for (const [stateValue, elements] of this._stateElements) {\n elements.forEach(e => {\n e.clearStates();\n });\n this._stateElements.set(stateValue, []);\n }\n }\n\n /**\n * 激活交互元素时 进行反选\n * 需要先将元素添加到已交互状态再使用此方法反选\n * @param stateValue\n * @param activeElement\n * @returns\n */\n reverseEventElement(stateValue: StateValue) {\n if (this._disableTriggerEvent) {\n return;\n }\n // TODO:直接加默认后缀?or再增加一个map?\n const state = stateToReverse(stateValue);\n if (!state) {\n return;\n }\n const marks = this.getStateMark(state);\n if (!marks) {\n return;\n }\n const activeElements = this.getEventElement(stateValue);\n if (!activeElements.length) {\n return;\n }\n const currentReverse = this.getEventElement(state);\n if (!currentReverse.length) {\n // all\n // for performance array.include\n // FIXME: 也许并没有太大必要\n if (activeElements.length === 1) {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => e !== activeElements[0])\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n } else {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => !activeElements.includes(e))\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n }\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n startInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.start(element);\n });\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n resetInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(element);\n });\n }\n }\n\n /**\n * 清空所有通过 vgrammar 代理的交互\n * @returns\n */\n resetAllInteraction() {\n for (const [stateValue, interactions] of this._vgrammarInteractions) {\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(null);\n });\n }\n }\n }\n}\n","export const USER_LAYOUT_RECT_LEVEL = 9;\nexport const DEFAULT_LAYOUT_RECT_LEVEL = 0;\nexport const DEFAULT_LAYOUT_RECT_LEVEL_MIN = -1;\n\nexport enum LayoutZIndex {\n SeriesGroup = 0,\n\n Axis_Grid = 50,\n CrossHair_Grid = 100,\n Region = 450,\n\n Mark = 300,\n\n Node = 400,\n\n Axis = 100,\n\n MarkLine = 500,\n\n MarkArea = 100,\n\n MarkPoint = 500,\n\n DataZoom = 500,\n\n ScrollBar = 500,\n\n Player = 500,\n\n Legend = 500,\n\n CrossHair = 500,\n\n Indicator = 500,\n\n Title = 500,\n\n Label = 500,\n\n Brush = 500,\n\n CustomMark = 500,\n\n Interaction = 700\n}\n/**\n * 数值越大,越先布局\n */\nexport enum LayoutLevel {\n Indicator = 10,\n\n Region = 20,\n\n Axis = 30,\n\n DataZoom = 40,\n\n Player = 40,\n\n ScrollBar = 40,\n\n Legend = 50,\n\n Title = 70,\n\n CustomMark = 70\n}\n","export enum AttributeLevel {\n Default = 0,\n Theme = 1,\n Chart = 2,\n Base_Series = 3, // general operation in base series\n Series = 4, // specified operation in derived series\n Mark = 5,\n User_Chart = 6,\n User_Series = 7,\n User_Mark = 8,\n User_SeriesStyle = 9,\n Built_In = 99\n}\n","import type { ICompilableInitOption, ICompilable, ICompiler } from './interface';\n\n/** 可以编译的类的统一基类 */\nexport abstract class CompilableBase implements ICompilable {\n protected _option: ICompilableInitOption;\n getOption() {\n return this._option;\n }\n\n getCompiler: () => ICompiler;\n\n constructor(option: ICompilableInitOption) {\n this._option = option;\n this.getCompiler = this._option.getCompiler;\n }\n\n getVGrammarView() {\n return this.getCompiler()?.getVGrammarView();\n }\n\n abstract compile(): void;\n\n release() {\n this._option = null;\n this.getCompiler = null;\n }\n}\n","import type { IGrammarBase } from '@visactor/vgrammar-core';\nimport type { Maybe } from '../typings';\nimport { isValid } from '@visactor/vutils';\nimport { createID } from '../util/id';\nimport { CompilableBase } from './compilable-base';\nimport type { GrammarItemCompileOption, GrammarType, IGrammarItem, GrammarItemInitOption } from './interface';\n\n/** 可以直接编译为一个 VGrammar 语法元素的类的统一基类 */\nexport abstract class GrammarItem extends CompilableBase implements IGrammarItem {\n grammarType: GrammarType;\n\n protected declare _option: GrammarItemInitOption;\n\n /** id */\n readonly id: number = createID();\n\n protected _product: Maybe;\n /** 获取编译产物 */\n getProduct() {\n if (isValid(this._product)) {\n return this._product;\n }\n const view = this.getVGrammarView();\n const id = this.getProductId();\n if (isValid(id) && isValid(view)) {\n this._product = this._lookupGrammar(id); // 更新product\n }\n return this._product;\n }\n\n protected abstract _lookupGrammar(id: string): IGrammarBase;\n\n /** 已经编译完成的产物的 name */\n protected _compiledProductId: string = null;\n /** 生成产物 name */\n abstract generateProductId(): string;\n /** 获取产物 name */\n getProductId() {\n return this._compiledProductId ?? this.generateProductId();\n }\n\n /** 该语法元素依赖于哪些语法元素 */\n protected _depend: IGrammarItem[] = [];\n getDepend() {\n return this._depend;\n }\n setDepend(...depend: IGrammarItem[]) {\n this._depend = depend;\n }\n\n /** 编译入口(尽量不重写这个方法) */\n compile(option?: GrammarItemCompileOption): void {\n this._compileProduct(option);\n this._afterCompile(option);\n }\n\n /** 编译主过程 */\n protected abstract _compileProduct(option?: GrammarItemCompileOption): void;\n\n /** 编译后的逻辑 */\n protected _afterCompile(option?: GrammarItemCompileOption) {\n if (isValid(this._product)) {\n this.getCompiler()?.addGrammarItem(this);\n }\n }\n\n /** 更新语法元素的依赖,返回是否全部成功更新 */\n updateDepend(): boolean {\n if (isValid(this._product)) {\n const depend = this.getDepend()\n .map(item => item.getProduct())\n .filter(isValid);\n // 更新依赖\n this._product.depend(depend);\n return depend.length === this.getDepend().length;\n }\n return false;\n }\n\n release() {\n this.removeProduct();\n super.release();\n this._depend = [];\n }\n\n /**\n * 删除编译产物\n * @param reserveVGrammarModel 是否保留 view 中的语法元素\n */\n removeProduct(reserveVGrammarModel?: boolean) {\n const compiler = this.getCompiler();\n compiler.removeGrammarItem(this, reserveVGrammarModel);\n this._product = null;\n this._compiledProductId = null;\n }\n}\n","import type { ISignal, SignalFunctionType } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isValid } from '../../util/type';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\nimport type { ICompilableSignal } from './interface';\n\nexport class CompilableSignal extends GrammarItem implements ICompilableSignal {\n readonly grammarType = GrammarType.signal;\n protected declare _product: Maybe>;\n declare getProduct: () => Maybe>;\n\n readonly name: string;\n\n /** signal 的值 */\n protected _value: Maybe;\n getValue() {\n return this._value;\n }\n /** signal 的值回调 */\n protected _updateFunc: Maybe>;\n getUpdateFunc() {\n return this._updateFunc;\n }\n\n constructor(option: GrammarItemInitOption, name: string, value?: T, updateFunc?: SignalFunctionType) {\n super(option);\n this.name = name;\n this._value = value;\n this._updateFunc = updateFunc;\n }\n\n /** 更新 signal */\n updateSignal(value?: T, updateFunc?: SignalFunctionType) {\n this._value = value;\n this._updateFunc = updateFunc;\n this.compile();\n }\n\n protected _compileProduct() {\n const view = this.getVGrammarView();\n if (!view) {\n return;\n }\n\n const product = this.getProduct();\n if (!product) {\n const id = this.getProductId();\n this._product = view.signal().id(id);\n this._compiledProductId = id;\n }\n if (isValid(this._value)) {\n this._product.value(this._value);\n }\n if (isValid(this._updateFunc)) {\n this._product.update(this._updateFunc);\n }\n }\n\n generateProductId(): string {\n return this.name;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getSignalById(id);\n }\n}\n","import type { SignalFunctionType } from '@visactor/vgrammar-core';\nimport { CompilableSignal } from './compilable-signal';\nimport { CompilableBase } from '../compilable-base';\n\nexport class SignalManager extends CompilableBase {\n /** signal map */\n protected _signalMap: Record> = {};\n getSignalMap() {\n return this._signalMap;\n }\n getSignal(name: string) {\n return this._signalMap[name];\n }\n\n /** 增加或更新 signal */\n updateSignal(name: string, value: any, updateFunc?: SignalFunctionType) {\n if (!this._signalMap[name]) {\n this._signalMap[name] = new CompilableSignal(this._option, name, value, updateFunc);\n this._signalMap[name].compile();\n } else {\n this._signalMap[name].updateSignal(value, updateFunc);\n }\n }\n\n compile() {\n Object.values(this._signalMap).forEach(signal => {\n signal.compile();\n });\n }\n\n release() {\n super.release();\n\n Object.values(this._signalMap).forEach(signal => {\n signal.release();\n });\n this._signalMap = {};\n }\n}\n","import { merge } from '@visactor/vutils';\nimport type { IStateManagerOption, StateValueMap } from './interface';\nimport { SignalManager } from './signal-manager';\n\n/** 状态管理器,由 SignalManager 继承而来,管理所有和状态相关的 signal */\nexport class StateManager extends SignalManager {\n protected _stateMap: StateValueMap;\n getStateMap() {\n return this._stateMap;\n }\n\n /** 默认 state map */\n protected _getDefaultStateMap(): StateValueMap {\n return {};\n }\n\n /** state key 转为 signal name */\n protected stateKeyToSignalName: (key: string) => string;\n\n constructor(option: IStateManagerOption) {\n super(option);\n if (option.stateKeyToSignalName) {\n this.stateKeyToSignalName = option.stateKeyToSignalName;\n } else {\n this.stateKeyToSignalName = () => 'state_signal';\n }\n this.initStateMap();\n }\n\n /** 初始化 state map */\n initStateMap(state?: StateValueMap) {\n this._stateMap = state ?? this._getDefaultStateMap();\n }\n\n compile(stateMap?: StateValueMap) {\n const state = stateMap ?? this._stateMap;\n Object.keys(state).forEach(key => {\n const name = this.stateKeyToSignalName(key);\n const value = state[key];\n this.updateSignal(name, value);\n });\n }\n\n /** 更新 state 并默认触发重渲染 */\n updateState(newState: Partial, noRender?: boolean) {\n if (!newState) {\n return;\n }\n merge(this._stateMap, newState);\n\n this.compile(newState);\n\n if (noRender) {\n return;\n }\n return this.getCompiler().renderNextTick();\n }\n}\n","import type { IElement } from '@visactor/vgrammar-core';\nimport { StateManager } from '../compile/signal/state-manager';\nimport type { StateValueMap } from '../compile/signal/interface';\nimport { PREFIX } from '../constant/base';\nimport { createID } from '../util/id';\nimport type { IAnimate, IAnimateState } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from './interface';\n\nexport class AnimateManager extends StateManager implements IAnimate {\n protected declare _stateMap: IAnimateState & StateValueMap;\n\n readonly id: number = createID();\n\n protected stateKeyToSignalName = (key: string) => {\n return `${PREFIX}_animate_${this.id}_${key}`;\n };\n\n getAnimationStateSignalName() {\n return this.stateKeyToSignalName('animationState');\n }\n\n updateAnimateState(state: AnimationStateEnum, noRender?: boolean) {\n // when animation state is 'update', do animations by element diffState(enter & update & exit)\n if (state === AnimationStateEnum.update) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => element.diffState\n }\n },\n noRender\n );\n }\n // when animation state is 'appear', all valid elements would do appear animation except from exit elements\n else if (state === AnimationStateEnum.appear) {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit' ? AnimationStateEnum.none : AnimationStateEnum.appear;\n }\n }\n },\n noRender\n );\n }\n // when animation state is other types, all elements would do animation by state\n else {\n this.updateState(\n {\n animationState: {\n callback: (datum: any, element: IElement) => state\n }\n },\n noRender\n );\n }\n }\n\n protected _getDefaultStateMap(): IAnimateState & StateValueMap {\n return {\n animationState: {\n callback: (datum: any, element: IElement) => {\n return element.diffState === 'exit'\n ? AnimationStateEnum.exit\n : element.diffState === 'update'\n ? AnimationStateEnum.update\n : AnimationStateEnum.appear;\n }\n }\n };\n }\n}\n","import type { IChartSpecInfo } from '../chart/interface';\nimport { isArray } from '../util';\nimport type { IBaseModelSpecTransformer, IBaseModelSpecTransformerOption, IModelSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class BaseModelSpecTransformer implements IBaseModelSpecTransformer {\n readonly type: string;\n protected _option: IBaseModelSpecTransformerOption;\n\n protected _theme?: K; // 非全局 theme,是对应于具体 model 的 theme 对象\n\n constructor(option: IBaseModelSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n }\n\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n this._theme = this.getTheme(spec, chartSpec);\n return this._mergeThemeToSpec(spec, chartSpec);\n }\n\n getTheme(spec: T, chartSpec: any): K {\n return undefined;\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): { spec: T; theme: K } {\n this._transformSpecBeforeMergingTheme(spec, chartSpec, chartSpecInfo);\n const result = this._initTheme(spec, chartSpec);\n this._transformSpecAfterMergingTheme(result.spec, chartSpec, chartSpecInfo);\n return result;\n }\n\n protected _transformSpecBeforeMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n // do nothing\n // change spec by default logic\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n // this._originalSpec + specFromChart + this._theme = this._spec\n const merge = (originalSpec: any) => mergeSpec({}, theme, specFromChart, originalSpec);\n\n if (isArray(spec)) {\n return {\n spec: spec.map(specItem => merge(specItem)) as unknown as T,\n theme\n };\n }\n return {\n spec: merge(spec),\n theme\n };\n }\n return { spec, theme };\n }\n\n /** 是否在初始化时将 theme 自动 merge 到 spec */\n protected _shouldMergeThemeToSpec(): boolean {\n return true;\n }\n\n /** 从 chart spec 提取配置作为 model 的默认 spec 配置 */\n protected _getDefaultSpecFromChart(chartSpec: any): Partial | undefined {\n return undefined;\n }\n}\n","import { get, isArray, isFunction, isNil, isObject } from '@visactor/vutils';\n\n/**\n * 判断一个 spec 是否包含另一个 spec 片段\n * @param spec 原始 spec\n * @param searchSpec 要匹配的 spec 片段\n */\nexport const includeSpec = (spec: Partial, searchSpec: Partial): boolean => {\n if (spec === searchSpec) {\n return true;\n }\n if (isFunction(spec) || isFunction(searchSpec)) {\n return false;\n }\n if (isArray(spec) && isArray(searchSpec)) {\n return searchSpec.every(searchItem => spec.some(item => includeSpec(item, searchItem)));\n }\n if (isObject(spec) && isObject(searchSpec)) {\n return Object.keys(searchSpec).every(key => includeSpec(spec[key], searchSpec[key]));\n }\n return false;\n};\n\nexport const setProperty = (target: T, path: Array, value: any): T => {\n if (isNil(path)) {\n return target;\n }\n const key = path[0];\n if (isNil(key)) {\n return target;\n }\n if (path.length === 1) {\n target[key] = value;\n return target;\n }\n if (isNil(target[key])) {\n if (typeof path[1] === 'number') {\n target[key] = [];\n } else {\n target[key] = {};\n }\n }\n return setProperty(target[key], path.slice(1), value);\n};\n\nexport const getProperty = (target: any, path: Array, defaultValue?: T): T => {\n if (isNil(path)) {\n return undefined;\n }\n return get(target, path as string[], defaultValue) as T;\n};\n","import { createID } from '../util/id';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n IModelMarkInfo,\n IModelSpecInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { ICompileMarkConfig, IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type {\n Datum,\n StateValueType,\n ConvertToMarkStyleSpec,\n ICommonSpec,\n StringOrNumber,\n IRect,\n ILayoutRect\n} from '../typings';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport { MarkSet } from '../mark/mark-set';\nimport type { ILayoutItem } from '../layout/interface';\nimport { CompilableBase } from '../compile/compilable-base';\nimport { PREFIX } from '../constant/base';\nimport { BaseModelSpecTransformer } from './base-model-transformer';\nimport { getProperty } from '@visactor/vutils-extension';\n\nexport abstract class BaseModel extends CompilableBase implements IModel {\n readonly transformerConstructor = BaseModelSpecTransformer;\n\n protected _spec: T;\n getSpec(): T {\n return this._spec || ({} as T);\n }\n\n /** 获取当前 model 对应在图表 spec 上的路径 */\n getSpecPath() {\n return this._option?.specPath;\n }\n\n /** 获取当前 model 对应在图表 specInfo 上的路径 */\n getSpecInfoPath() {\n return this._option?.specInfoPath ?? this._option?.specPath;\n }\n\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n // 布局\n protected _layout?: ILayoutItem = null;\n get layout() {\n return this._layout;\n }\n\n readonly specKey: string = '';\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n protected get _theme() {\n return this.getSpecInfo()?.theme;\n }\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this.userId = spec.id;\n this._spec = spec;\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this.setAttrFromSpec();\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n getVisible() {\n return (this._spec as unknown as any)?.visible !== false;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n // do nothing\n this._layout?.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n this._layout?.onLayoutEnd(ctx);\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n beforeRelease() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this._data?.release();\n this._data = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: T) {\n const result = this._compareSpec(spec, this._spec);\n this._spec = spec;\n\n return result;\n }\n\n protected _compareSpec(spec: T, prevSpec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(spec?: T) {\n if (spec) {\n this._spec = spec;\n }\n this.setAttrFromSpec();\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n this._layout?.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle(\n mark: IMarkRaw,\n style?: Partial | ConvertToMarkStyleSpec>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n protected _createMark(\n markInfo: IModelMarkInfo,\n option: Partial = {},\n config?: ICompileMarkConfig\n ): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n\n if (m) {\n m.created();\n config && m.setMarkConfig(config);\n }\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n\n getSpecInfo() {\n const specInfo = this._option.getSpecInfo?.() ?? {};\n return getProperty(specInfo, this.getSpecInfoPath());\n }\n\n getSpecIndex() {\n const path = this.getSpecPath();\n if (!path?.length) {\n return 0;\n }\n const index = Number(path[path.length - 1]);\n if (isNaN(index)) {\n return 0;\n }\n return index;\n }\n}\n","import type { ILayoutModel } from './../model/interface';\nimport type { IPadding, IRect, IPoint } from '../typings';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNil, isValidNumber } from '@visactor/vutils';\nimport { calcLayoutNumber, calcPadding, normalizeLayoutPaddingSpec, boundsInRect } from '../util/space';\nimport { LayoutLevel, DEFAULT_LAYOUT_RECT_LEVEL, USER_LAYOUT_RECT_LEVEL } from '../constant/layout';\n\nimport type { ILayoutItem, ILayoutItemInitOption, ILayoutItemSpec } from './interface';\nimport type { IChartLayoutOption } from '../chart/interface/common';\nimport type { ILayoutAlignSelf, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport class LayoutItem implements ILayoutItem {\n protected _spec: ILayoutItemSpec;\n getSpec() {\n return this._spec || {};\n }\n\n layoutClip: boolean = false;\n\n autoIndent: boolean = false;\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._layoutStartPoint;\n }\n\n private _layoutRect: ILayoutRect = { width: 0, height: 0 };\n\n // 处理用户和逻辑的优先级覆盖,让用户也可以设置 rect\n protected _layoutRectLevelMap: ILayoutRect = {\n width: DEFAULT_LAYOUT_RECT_LEVEL,\n height: DEFAULT_LAYOUT_RECT_LEVEL\n };\n get layoutRectLevelMap() {\n return this._layoutRectLevelMap;\n }\n\n protected _minWidth: number = null;\n get minWidth() {\n return this._minWidth;\n }\n set minWidth(v: number) {\n this._minWidth = v;\n }\n protected _maxWidth: number = null;\n get maxWidth() {\n return this._maxWidth;\n }\n set maxWidth(v: number) {\n this._maxWidth = v;\n }\n protected _minHeight: number = null;\n get minHeight() {\n return this._minHeight;\n }\n set minHeight(v: number) {\n this._minHeight = v;\n }\n protected _maxHeight: number = null;\n get maxHeight() {\n return this._maxHeight;\n }\n set maxHeight(v: number) {\n this._maxHeight = v;\n }\n /** for layout diff */\n protected _lastComputeRect: ILayoutRect = null;\n protected _lastComputeOutBounds: IBoundsLike = { x1: 0, x2: 0, y1: 0, y2: 0 };\n getLastComputeOutBounds(): IBoundsLike {\n return this._lastComputeOutBounds;\n }\n\n getLayoutRect: () => ILayoutRect = () => {\n return this._layoutRect;\n };\n\n layoutType: ILayoutItem['layoutType'] = 'normal';\n\n layoutBindRegionID!: ILayoutItem['layoutBindRegionID'];\n\n _layoutOrient: ILayoutItem['layoutOrient'] = 'left';\n get layoutOrient() {\n return this._layoutOrient;\n }\n set layoutOrient(v: ILayoutItem['layoutOrient']) {\n this._layoutOrient = v;\n }\n layoutPaddingLeft: ILayoutItem['layoutPaddingLeft'] = 0;\n layoutPaddingTop: ILayoutItem['layoutPaddingTop'] = 0;\n layoutPaddingRight: ILayoutItem['layoutPaddingRight'] = 0;\n layoutPaddingBottom: ILayoutItem['layoutPaddingBottom'] = 0;\n\n layoutOffsetX: ILayoutItem['layoutOffsetX'] = 0;\n layoutOffsetY: ILayoutItem['layoutOffsetY'] = 0;\n\n layoutLevel: ILayoutItem['layoutLevel'] = LayoutLevel.Region;\n\n chartLayoutRect!: ILayoutRect;\n\n alignSelf: ILayoutAlignSelf;\n\n protected _model: ILayoutModel;\n\n get model() {\n return this._model;\n }\n\n get type() {\n return this._model.type;\n }\n\n protected _option: ILayoutItemInitOption;\n\n constructor(model: ILayoutModel, option: ILayoutItemInitOption) {\n this._model = model;\n this._option = option;\n this.layoutLevel = option.layoutLevel;\n this.layoutType = option.layoutType;\n if (option.layoutOrient) {\n this.layoutOrient = option.layoutOrient;\n }\n this._spec = model?.getSpec?.();\n }\n\n private _setLayoutAttributeFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n if (!this._spec) {\n return;\n }\n if ((this._spec as unknown as any).visible !== false) {\n // 处理 user spec value to px;\n const padding = normalizeLayoutPaddingSpec(spec.padding);\n const paddingValue = calcPadding(padding, chartViewRect, chartViewRect);\n this.layoutPaddingLeft = paddingValue.left;\n this.layoutPaddingRight = paddingValue.right;\n this.layoutPaddingTop = paddingValue.top;\n this.layoutPaddingBottom = paddingValue.bottom;\n\n this._minHeight = isNil(spec.minHeight)\n ? this._minHeight ?? null\n : calcLayoutNumber(spec.minHeight, chartViewRect.height, chartViewRect);\n this._maxHeight = isNil(spec.maxHeight)\n ? this._maxHeight ?? null\n : calcLayoutNumber(spec.maxHeight, chartViewRect.height, chartViewRect);\n this._minWidth = isNil(spec.minWidth)\n ? this._minWidth ?? null\n : calcLayoutNumber(spec.minWidth, chartViewRect.width, chartViewRect);\n this._maxWidth = isNil(spec.maxWidth)\n ? this._maxWidth ?? null\n : calcLayoutNumber(spec.maxWidth, chartViewRect.width, chartViewRect);\n // 处理 user width\n if (spec.width) {\n this.setLayoutRect(\n {\n width: calcLayoutNumber(spec.width, chartViewRect.width, chartViewRect)\n },\n {\n width: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n if (spec.height) {\n this.setLayoutRect(\n {\n height: calcLayoutNumber(spec.height, chartViewRect.height, chartViewRect)\n },\n {\n height: USER_LAYOUT_RECT_LEVEL\n }\n );\n }\n\n // offset\n if (!isNil(spec.offsetX)) {\n this.layoutOffsetX = calcLayoutNumber(spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(spec.offsetY)) {\n this.layoutOffsetY = calcLayoutNumber(spec.offsetY, chartViewRect.height, chartViewRect);\n }\n\n if (spec.alignSelf) {\n this.alignSelf = spec.alignSelf;\n }\n }\n }\n\n setAttrFromSpec(spec: ILayoutItemSpec, chartViewRect: ILayoutRect) {\n this._spec = spec;\n this.layoutType = spec.layoutType ?? this.layoutType;\n this.layoutLevel = spec.layoutLevel ?? this.layoutLevel;\n this.layoutOrient = spec.orient ?? this.layoutOrient;\n\n this._setLayoutAttributeFromSpec(spec, chartViewRect);\n\n this.layoutClip = spec.clip ?? this.layoutClip;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any) {\n // 在 layoutStart 时重新计算 spec 中的布局属性值,确保 resize 后,这些值保持正确的px值。\n this._setLayoutAttributeFromSpec(this._spec, viewRect);\n }\n\n onLayoutEnd(option: IChartLayoutOption) {\n // do nothing\n }\n\n private _getAbsoluteSpecValue(layoutRect: ILayoutRect) {\n const result: IPadding = { top: null, bottom: null, left: null, right: null };\n ['top', 'bottom', 'left', 'right'].forEach(k => {\n if (!isNil(this._spec[k])) {\n result[k] = calcLayoutNumber(\n this._spec[k],\n k === 'top' || k === 'bottom' ? layoutRect.height : layoutRect.width,\n layoutRect\n );\n }\n });\n return result;\n }\n\n absoluteLayoutInRect(layoutRect: IRect) {\n const { top, bottom, left, right } = this._getAbsoluteSpecValue(layoutRect);\n\n // size first\n const layoutSize = {\n width: layoutRect.width - this.layoutPaddingLeft - this.layoutPaddingRight,\n height: layoutRect.height - this.layoutPaddingTop - this.layoutPaddingBottom\n };\n if (!isNil(left)) {\n layoutSize.width -= left;\n }\n if (!isNil(right)) {\n layoutSize.width -= right;\n }\n if (!isNil(top)) {\n layoutSize.height -= top;\n }\n if (!isNil(bottom)) {\n layoutSize.height -= bottom;\n }\n\n this.setLayoutRect(layoutSize);\n const { width, height } = this.computeBoundsInRect(this.getLayoutRect());\n this.setLayoutRect({ width, height });\n const pos = { x: layoutRect.x, y: layoutRect.y };\n if (this._spec.center === true) {\n pos.x = layoutRect.x + layoutRect.width * 0.5 - width * 0.5;\n pos.y = layoutRect.y + layoutRect.height * 0.5 - height * 0.5;\n } else {\n if (!isNil(left)) {\n pos.x = layoutRect.x + left + this.layoutPaddingLeft;\n } else if (!isNil(right)) {\n pos.x = layoutRect.x + layoutRect.width - this.layoutPaddingRight - right - width;\n }\n if (!isNil(top)) {\n pos.y = layoutRect.y + top + this.layoutPaddingTop;\n } else if (!isNil(bottom)) {\n pos.y = layoutRect.y + layoutRect.height - this.layoutPaddingBottom - bottom - height;\n }\n }\n\n this.setLayoutStartPosition(pos);\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (this._option.transformLayoutPosition) {\n pos = this._option.transformLayoutPosition(pos);\n }\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n\n this._model.afterSetLayoutStartPoint?.(this._layoutStartPoint);\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width) && (levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.width) {\n this._layoutRect.width = width;\n this._layoutRectLevelMap.width = levelMap?.width ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n if (isValidNumber(height) && (levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL) >= this._layoutRectLevelMap.height) {\n this._layoutRect.height = height;\n this._layoutRectLevelMap.height = levelMap?.height ?? DEFAULT_LAYOUT_RECT_LEVEL;\n }\n\n this.setRectInSpec(this._layoutRect);\n }\n\n getLayout(): IRect {\n return {\n x: this._layoutStartPoint.x,\n y: this._layoutStartPoint.y,\n width: this._layoutRect.width,\n height: this._layoutRect.height\n };\n }\n\n mergeLayoutRect({ width, height }: ILayoutRect): ILayoutRect {\n const rect = { width, height };\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.width = this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n rect.height = this._layoutRect.height;\n }\n return rect;\n }\n\n getOrientPosAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'x' : 'y';\n }\n getOrientSizeAttribute() {\n return this._layoutOrient === 'bottom' || this._layoutOrient === 'top' ? 'width' : 'height';\n }\n\n protected changeBoundsBySetting(bounds: IBoundsLike): IBoundsLike {\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n if (this._layoutRectLevelMap.width > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.x2 = bounds.x1 + this._layoutRect.width;\n }\n if (this._layoutRectLevelMap.height > DEFAULT_LAYOUT_RECT_LEVEL) {\n bounds.y2 = bounds.y1 + this._layoutRect.height;\n }\n bounds.x1 -= this._layoutStartPoint.x;\n bounds.x2 -= this._layoutStartPoint.x;\n bounds.y1 -= this._layoutStartPoint.y;\n bounds.y2 -= this._layoutStartPoint.y;\n return bounds;\n }\n\n setRectInSpec(rect: ILayoutRect) {\n const result = { ...rect };\n if (this._layoutRectLevelMap.width < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minWidth)) {\n result.width = Math.max(result.width, this._minWidth);\n }\n if (!isNil(this._maxWidth)) {\n result.width = Math.min(result.width, this._maxWidth);\n }\n } else {\n result.width = this._layoutRect.width;\n }\n\n if (this._layoutRectLevelMap.height < USER_LAYOUT_RECT_LEVEL) {\n if (!isNil(this._minHeight)) {\n result.height = Math.max(result.height, this._minHeight);\n }\n if (!isNil(this._maxHeight)) {\n result.height = Math.min(result.height, this._maxHeight);\n }\n } else {\n result.height = this._layoutRect.height;\n }\n return result;\n }\n\n computeBoundsInRect(rect: ILayoutRect): ILayoutRect {\n // 保留布局使用的rect\n this._lastComputeRect = rect;\n\n if (\n (this.layoutType === 'region-relative' || this.layoutType === 'region-relative-overlap') &&\n ((this._layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'left' || this.layoutOrient === 'right')) ||\n (this._layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL &&\n (this.layoutOrient === 'bottom' || this.layoutOrient === 'top')))\n ) {\n return this._layoutRect;\n }\n // 将布局空间限制到 spec 设置内\n // 避免操作到元素本身的 aabbbounds\n const bounds = { ...this._model.getBoundsInRect(this.setRectInSpec(rect), rect) };\n // 用户设置了布局元素宽高的场景下,内部布局结果的 bounds 不能直接作为图表布局bounds\n this.changeBoundsBySetting(bounds);\n // 保留当前模块的布局超出内容,用来处理自动缩进\n // 当前 bounds 需要有实际宽高\n if (this.autoIndent && bounds.x2 - bounds.x1 > 0 && bounds.y2 - bounds.y1 > 0) {\n this._lastComputeOutBounds.x1 = Math.ceil(-bounds.x1);\n this._lastComputeOutBounds.x2 = Math.ceil(bounds.x2 - rect.width);\n this._lastComputeOutBounds.y1 = Math.ceil(-bounds.y1);\n this._lastComputeOutBounds.y2 = Math.ceil(bounds.y2 - rect.height);\n }\n // 返回的布局大小也要限制到 spec 设置内\n let result = this.setRectInSpec(boundsInRect(bounds, rect));\n if (this._option.transformLayoutRect) {\n result = this._option.transformLayoutRect(result);\n }\n\n return result;\n }\n\n getModelId() {\n return this._model.id;\n }\n\n getModelVisible() {\n return this._model.getVisible();\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, merge } from '@visactor/vutils';\nimport type { ILayoutItem } from '../layout/interface';\nimport type { IOrientType, IPolarOrientType, IRect } from '../typings/space';\nimport { BaseModel } from './base-model';\nimport type { IModelSpec } from './interface';\nimport { LayoutItem } from '../layout/layout-item';\nimport type { IPoint } from '../typings/coordinate';\nimport type { ILayoutType, ILayoutPoint, ILayoutRect } from '../typings/layout';\n\nexport abstract class LayoutModel extends BaseModel {\n protected layoutType: ILayoutType | 'none' = 'normal';\n protected layoutLevel?: number = 0;\n protected layoutZIndex: number = 0;\n layoutClip: boolean;\n get layoutOrient() {\n return this._orient as IOrientType;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n this._layout && (this._layout.layoutOrient = v);\n }\n\n protected _forceLayoutTag: boolean = false;\n protected _layout: ILayoutItem = null;\n protected _orient?: IPolarOrientType | IOrientType = null;\n\n protected _layoutRect: ILayoutRect = { width: 0, height: 0 };\n protected _layoutStartPos: IPoint = { x: 0, y: 0 };\n\n // TODO: 有些hack,这个tag是为了避免布局逻辑中,轴的数据变化,又由数据变化触发重新布局\n protected _isLayout: boolean = true;\n\n initLayout() {\n if (this.layoutType === 'none') {\n return;\n }\n this._layout = new LayoutItem(this, {\n layoutType: this.layoutType,\n layoutLevel: this.layoutLevel,\n layoutOrient: this._orient as IOrientType,\n transformLayoutRect: this._transformLayoutRect,\n transformLayoutPosition: this._transformLayoutPosition\n });\n if (this._orient && this._orient !== 'radius' && this._orient !== 'angle' && this._layout) {\n this._layout.layoutOrient = this._orient;\n }\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n this._isLayout = true;\n super.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n // diff layoutRect\n this.updateLayoutAttribute();\n const layoutRect = this.getLayoutRect();\n if (this._forceLayoutTag || !isEqual(this._lastLayoutRect, layoutRect)) {\n this._lastLayoutRect = { ...layoutRect };\n }\n this._forceLayoutTag = false;\n this._isLayout = false;\n }\n\n afterSetLayoutStartPoint(_pos: ILayoutPoint) {\n // do nothing\n }\n\n protected _forceLayout() {\n if (this._isLayout) {\n return;\n }\n this._forceLayoutTag = true;\n this._option.globalInstance.getChart()?.setLayoutTag(true);\n }\n\n // 布局相关\n getLayoutStartPoint() {\n return this._layout ? this._layout.getLayoutStartPoint() : this._layoutStartPos;\n }\n setLayoutStartPosition(pos: Partial) {\n return this._layout\n ? this._layout.setLayoutStartPosition(pos)\n : (this._layoutStartPos = merge(this._layoutStartPos, pos));\n }\n getLayoutRect() {\n return this._layout ? this._layout.getLayoutRect() : this._layoutRect;\n }\n setLayoutRect(rect: Partial, levelMap?: Partial) {\n return this._layout ? this._layout.setLayoutRect(rect) : (this._lastLayoutRect = merge(this._layoutRect, rect));\n }\n\n getLastComputeOutBounds() {\n return this._layout?.getLastComputeOutBounds();\n }\n\n getGraphicBounds = () => {\n if (this._layout) {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n }\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n };\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.layoutClip = this._spec.clip ?? this.layoutClip;\n this.layoutZIndex = this._spec.zIndex ?? this.layoutZIndex;\n this.layoutType = this._spec.layoutType ?? this.layoutType;\n this._orient = this._spec.orient ?? this._orient;\n this.layoutLevel = this._spec.layoutLevel ?? this.layoutLevel;\n }\n\n abstract getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike;\n\n protected _transformLayoutRect: (rect: ILayoutRect) => ILayoutRect = null;\n protected _transformLayoutPosition: (rect: Partial) => Partial = null;\n}\n","import { BaseModelSpecTransformer } from '../model/base-model-transformer';\nimport type { IRegionSpec } from './interface';\n\nexport class RegionSpecTransformer<\n T extends IRegionSpec = IRegionSpec,\n K extends Partial = Partial\n> extends BaseModelSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n // do nothing, region don't need to parse theme\n return {\n spec,\n theme: this._theme\n };\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isEqual, array, isValid } from '@visactor/vutils';\nimport type { IGroupMark as IVGrammarGroupMark, ILayoutOptions, IMark } from '@visactor/vgrammar-core';\nimport { STATE_VALUE_ENUM_REVERSE } from '../compile/mark/interface';\nimport { DimensionTrigger } from '../interaction/dimension-trigger';\nimport { MarkTypeEnum } from '../mark/interface/type';\nimport type { ISeries } from '../series/interface';\nimport type { IModelOption } from '../model/interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IGeoRegionSpec, IRegion, IRegionSpec, IRegionSpecInfo } from './interface';\nimport type { IInteraction, ITrigger } from '../interaction/interface';\nimport { Interaction } from '../interaction/interaction';\nimport { ChartEvent } from '../constant/event';\nimport { LayoutZIndex } from '../constant/layout';\nimport { AttributeLevel } from '../constant/attribute';\nimport { AnimateManager } from '../animation/animate-manager';\nimport type { IAnimate } from '../animation/interface';\nimport type { ILayoutType, StringOrNumber } from '../typings';\nimport { LayoutModel } from '../model/layout-model';\nimport { RegionSpecTransformer } from './region-transformer';\nimport type { IGroupMark, IRectMark } from '../mark/interface/mark';\n\nexport class Region extends LayoutModel implements IRegion {\n static type = 'region';\n static readonly transformerConstructor = RegionSpecTransformer;\n readonly transformerConstructor = RegionSpecTransformer as any;\n readonly modelType: string = 'region';\n static specKey = 'region';\n specKey: string = 'region';\n\n type = Region.type;\n protected _series: ISeries[] = [];\n layoutType: ILayoutType = 'region';\n layoutZIndex: number = LayoutZIndex.Region;\n\n animate?: IAnimate;\n\n interaction: IInteraction = new Interaction();\n\n declare getSpecInfo: () => IRegionSpecInfo;\n\n getMaxWidth() {\n return this._layout.maxWidth;\n }\n setMaxWidth(value: number) {\n this._layout.maxWidth = value;\n }\n\n getMaxHeight() {\n return this._layout.maxHeight;\n }\n setMaxHeight(value: number) {\n this._layout.maxHeight = value;\n }\n\n protected _groupMark!: IGroupMark;\n getGroupMark() {\n return this._groupMark;\n }\n\n protected _interactionMark!: IGroupMark;\n getInteractionMark() {\n return this._interactionMark;\n }\n\n getStackInverse() {\n return this._spec.stackInverse === true;\n }\n\n getStackSort() {\n return this._spec.stackSort === true;\n }\n\n protected _backgroundMark?: IRectMark;\n protected _foregroundMark?: IRectMark;\n\n protected _trigger: ITrigger;\n\n constructor(spec: T, ctx: IModelOption) {\n super(spec, ctx);\n this.userId = spec.id;\n this.coordinate = spec.coordinate ?? 'cartesian';\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: ctx.getCompiler\n });\n }\n this.interaction.setDisableActiveEffect(this._option.disableTriggerEvent);\n }\n\n protected _getClipDefaultValue() {\n const chartSpec = this._option.getChart().getSpec();\n const hasDataZoom = (chartSpec as any).dataZoom?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? 'filter';\n return filterMode === 'axis';\n });\n const hasScrollBar = (chartSpec as any).scrollBar?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? 'axis';\n return filterMode === 'axis';\n });\n\n return hasDataZoom || hasScrollBar ? true : this._layout.layoutClip;\n }\n\n created(): void {\n this.initLayout();\n super.created();\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this._groupMark = this._createGroupMark('regionGroup', this.userId, this.layoutZIndex);\n if ((this._spec as IGeoRegionSpec).roam) {\n this._groupMark.setMarkConfig({ interactive: true });\n }\n\n // 交互层\n this._interactionMark = this._createGroupMark(\n 'regionInteractionGroup',\n (this.userId ?? this.type) + '_interaction',\n LayoutZIndex.Interaction\n );\n\n // hack: region 的样式不能设置在groupMark上,因为groupMark目前没有计算dirtyBound,会导致拖影问题\n if (!isEmpty(this._spec.style)) {\n this._backgroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionBackground' }) as IRectMark;\n if (clip) {\n this._foregroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionForeground' }) as IRectMark;\n }\n [this._backgroundMark, this._foregroundMark].forEach(mark => {\n if (mark) {\n mark.created();\n this.setMarkStyle(\n mark,\n {\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._groupMark.addMark(mark);\n }\n });\n this._backgroundMark && this._backgroundMark.setMarkConfig({ zIndex: LayoutZIndex.SeriesGroup - 1 });\n this._foregroundMark && this._foregroundMark.setMarkConfig({ zIndex: LayoutZIndex.Mark + 1 });\n }\n this.createTrigger();\n }\n\n private _createGroupMark(name: string, userId: StringOrNumber, zIndex: number) {\n const groupMark = this._createMark({ type: MarkTypeEnum.group, name }) as IGroupMark;\n groupMark.setUserId(userId);\n groupMark.setMarkConfig({ zIndex });\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this.setMarkStyle(\n groupMark,\n {\n x: () => this.getLayoutStartPoint().x,\n y: () => this.getLayoutStartPoint().y,\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height,\n clip\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n groupMark,\n {\n cornerRadius: this._spec.style?.cornerRadius\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n\n this._marks.addMark(groupMark);\n return groupMark;\n }\n\n init(option: any) {\n super.init(option);\n this.initMark();\n this.initSeriesDataflow();\n this.initInteraction();\n this.initTrigger();\n }\n initMark() {\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n protected _initBackgroundMarkStyle() {\n if (this._backgroundMark) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n fillOpacity: this._spec.style?.fill ? 1 : 0,\n ...this._spec.style\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n if (this._spec.clip ?? this._getClipDefaultValue()) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n strokeOpacity: 0\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n }\n\n protected _initForegroundMarkStyle() {\n if (this._foregroundMark) {\n this.setMarkStyle(\n this._foregroundMark,\n {\n ...this._spec.style,\n fillOpacity: 0,\n pickable: false\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec?.style, spec?.style)) {\n result.reMake = true;\n }\n return result;\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n addSeries(s: ISeries) {\n if (!s) {\n return;\n }\n if (!this._series.includes(s)) {\n this._series.push(s);\n }\n }\n\n removeSeries(s: ISeries) {\n if (!s) {\n return;\n }\n const index = this._series.findIndex(s_ => s_ === s);\n if (index >= 0) {\n this._series.splice(index, 1);\n }\n }\n\n getSeries(\n opt: {\n name?: string;\n userId?: StringOrNumber | StringOrNumber[];\n specIndex?: number | number[];\n id?: StringOrNumber;\n type?: string;\n coordinateType?: CoordinateType;\n dataName?: string;\n } = {}\n ): ISeries[] {\n return this._series.filter(\n s =>\n (opt.name ? s?.name === opt.name : true) &&\n (opt.userId ? array(opt.userId).includes(s.userId) : true) &&\n (isValid(opt.specIndex) ? array(opt.specIndex).includes(s.getSpecIndex()) : true) &&\n (opt.id ? s.id === opt.id : true) &&\n (opt.type ? s.type === opt.type : true) &&\n (opt.coordinateType ? s.coordinate === opt.coordinateType : true) &&\n (opt.dataName ? s.getRawData?.()?.name === opt.dataName : true)\n );\n }\n\n getSeriesInName(name: string): ISeries {\n return this.getSeries({ name })[0];\n }\n getSeriesInUserId(userId: string): ISeries {\n return this.getSeries({ userId })[0];\n }\n getSeriesInId(id: number): ISeries {\n return this.getSeries({ id })[0];\n }\n getSeriesInType(type: string): ISeries[] {\n return this.getSeries({ type });\n }\n getSeriesInCoordinateType(coordinateType: CoordinateType): ISeries[] {\n return this.getSeries({ coordinateType });\n }\n getSeriesInDataName(dataName: string): ISeries[] {\n return this.getSeries({ dataName });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n initSeriesDataflow() {\n const viewDataFilters = this._series.map(s => s.getViewDataFilter() ?? s.getViewData()).filter(v => !!v);\n this._option.dataSet.multipleDataViewAddListener(viewDataFilters, 'change', this.seriesDataFilterOver);\n }\n\n seriesDataFilterOver = () => {\n this.event.emit(ChartEvent.regionSeriesDataFilterOver, { model: this, chart: this.getChart() });\n this._series.forEach(s => {\n if (s.getViewDataFilter()) {\n s.reTransformViewData();\n }\n });\n };\n\n release() {\n super.release();\n this._series = [];\n }\n /** dimension */\n createTrigger() {\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this.interaction\n };\n this._trigger = new DimensionTrigger(triggerOptions);\n }\n\n initTrigger() {\n // register all mark\n // trigger check mark enable\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n this._trigger.registerMark(m);\n });\n });\n this._trigger.init();\n }\n\n initInteraction() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n // 注册所有支持反选状态mark\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n for (const key in STATE_VALUE_ENUM_REVERSE) {\n if (!isEmpty(m.stateStyle[STATE_VALUE_ENUM_REVERSE[key]])) {\n this.interaction.registerMark(STATE_VALUE_ENUM_REVERSE[key], m);\n }\n }\n });\n });\n }\n\n compileMarks(group?: string | IVGrammarGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group, context: { model: this } });\n m.getProduct()?.layout(\n (group: IVGrammarGroupMark, children: IMark[], parentLayoutBounds: IBoundsLike, options?: ILayoutOptions) => {\n // console.log('region mark layout');\n }\n );\n });\n }\n\n compile() {\n this.animate?.compile();\n this.compileMarks();\n }\n\n getBoundsInRect = () => {\n return {\n x1: this._layout.getLayoutStartPoint().x,\n y1: this._layout.getLayoutStartPoint().y,\n x2: this._layout.getLayoutStartPoint().x + this._layout.getLayoutRect().width,\n y2: this._layout.getLayoutStartPoint().y + this._layout.getLayoutRect().height\n };\n };\n\n onLayoutEnd(ctx: any): void {\n this._series.forEach(s => s.onLayoutEnd(ctx));\n super.onLayoutEnd(ctx);\n }\n}\n","import { isNil, last } from '@visactor/vutils';\nimport type { Layout } from './base-layout';\nimport type { ILayoutItem } from './interface';\n\nfunction getPositionItems(items: ILayoutItem[]) {\n const startItems: ILayoutItem[] = [];\n const middleItems: ILayoutItem[] = [];\n const endItems: ILayoutItem[] = [];\n\n items.forEach(item => {\n if (isNil(item.getSpec().position) || item.getSpec().position === 'start') {\n startItems.push(item);\n } else if (item.getSpec().position === 'middle') {\n middleItems.push(item);\n } else if (item.getSpec().position === 'end') {\n endItems.push(item);\n }\n });\n\n return {\n startItems,\n endItems,\n middleItems\n };\n}\n\nfunction adjustItemsToCenter(allItems: ILayoutItem[][], isVertical: boolean, containerLength: number) {\n if (isVertical) {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().y + lastItem.getLayoutRect().height - items[0].getLayoutStartPoint().y;\n const centerY = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x,\n y: item.getLayoutStartPoint().y + centerY\n });\n });\n });\n } else {\n allItems.forEach(items => {\n const lastItem = last(items);\n const length =\n lastItem.getLayoutStartPoint().x + lastItem.getLayoutRect().width - items[0].getLayoutStartPoint().x;\n const centerX = (containerLength - length) / 2;\n\n items.forEach(item => {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + centerX,\n y: item.getLayoutStartPoint().y\n });\n });\n });\n }\n}\n\nfunction alignSelfOfItems(allItems: ILayoutItem[][], isVertical: boolean, maxSizes: number[], sign: number) {\n let maxSize: number;\n\n allItems.forEach((lineItems: ILayoutItem[], index: number) => {\n if (lineItems.length > 1) {\n maxSize = maxSizes[index];\n\n lineItems.forEach(item => {\n if (!item.alignSelf || item.alignSelf === 'start') {\n return;\n }\n\n const pos = item.getLayoutStartPoint();\n const ratio = item.alignSelf === 'middle' ? 0.5 : 1;\n const delta = isVertical\n ? maxSize - (item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight)\n : maxSize - (item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom);\n\n if (isVertical) {\n item.setLayoutStartPosition({\n x: pos.x + sign * delta * ratio,\n y: pos.y\n });\n } else {\n item.setLayoutStartPosition({\n x: pos.x,\n y: pos.y + sign * delta * ratio\n });\n }\n });\n }\n });\n}\n\nfunction layoutLeftRightStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitHeight: number,\n isMiddle: boolean,\n position: 'left' | 'right'\n) {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preTop = layout.topCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preTop + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n preTop += itemTotalHeight;\n if (preTop > limitHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preTop = layout.topCurrent + itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: layout.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, true, limitHeight);\n }\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutLeftRightEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'left' | 'right') {\n if (items.length) {\n let maxWidth = 0;\n const isRight = position === 'right';\n const xSign = isRight ? -1 : 1;\n let preX = isRight ? layout.rightCurrent : layout.leftCurrent;\n let preBottom = layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxWidths: number[] = [];\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetX = isRight ? -rect.width - item.layoutPaddingRight : item.layoutPaddingLeft;\n\n if (preBottom < itemTotalHeight && singleLineItems.length) {\n maxWidths.push(maxWidth);\n preX += xSign * maxWidth;\n maxWidth = itemTotalWidth;\n preBottom = layout.bottomCurrent;\n\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n item.setLayoutStartPosition({\n x: preX + item.layoutOffsetX + itemOffsetX,\n y: preBottom + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n maxWidth = Math.max(maxWidth, itemTotalWidth);\n preBottom -= itemTotalHeight;\n singleLineItems.push(item);\n }\n });\n maxWidths.push(maxWidth);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, true, maxWidths, xSign);\n\n if (isRight) {\n layout.rightCurrent = preX + xSign * maxWidth;\n } else {\n layout.leftCurrent = preX + xSign * maxWidth;\n }\n }\n}\n\nfunction layoutTopBottomStartOrMiddleItems(\n items: ILayoutItem[],\n layout: Layout,\n limitWidth: number,\n isMiddle: boolean,\n position: 'top' | 'bottom'\n) {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preLeft = layout.leftCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n x: preLeft + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n\n preLeft += itemTotalWidth;\n if (preLeft > limitWidth && singleLineItems.length) {\n maxHeights.push(maxHeight);\n preLeft = layout.leftCurrent + itemTotalWidth;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n item.setLayoutStartPosition({\n x: layout.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n singleLineItems.push(item);\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isMiddle) {\n adjustItemsToCenter(allItems, false, limitWidth);\n }\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nfunction layoutTopBottomEndItems(items: ILayoutItem[], layout: Layout, limitWidth: number, position: 'top' | 'bottom') {\n if (items.length) {\n const isTop = position === 'top';\n const ySign = isTop ? 1 : -1;\n let maxHeight = 0;\n let preRight = layout.rightCurrent;\n let preY = isTop ? layout.topCurrent : layout.bottomCurrent;\n\n const allItems: ILayoutItem[][] = [];\n let singleLineItems: ILayoutItem[] = [];\n const maxHeights: number[] = [];\n\n items.forEach(item => {\n const layoutRect = layout.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n const itemTotalHeight = rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n const itemTotalWidth = rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n const itemOffsetY = isTop ? item.layoutPaddingTop : -rect.height - item.layoutPaddingBottom;\n\n if (preRight < itemTotalWidth && singleLineItems.length) {\n preRight = layout.rightCurrent;\n preY += ySign * maxHeight;\n maxHeight = itemTotalHeight;\n\n item.setLayoutStartPosition({\n x: layout.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n allItems.push(singleLineItems);\n singleLineItems = [item];\n } else {\n singleLineItems.push(item);\n item.setLayoutStartPosition({\n x: preRight + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: preY + item.layoutOffsetY + itemOffsetY\n });\n maxHeight = Math.max(maxHeight, itemTotalHeight);\n preRight -= itemTotalWidth;\n }\n });\n maxHeights.push(maxHeight);\n allItems.push(singleLineItems);\n\n alignSelfOfItems(allItems, false, maxHeights, ySign);\n\n if (isTop) {\n layout.topCurrent = preY + ySign * maxHeight;\n } else {\n layout.bottomCurrent = preY + ySign * maxHeight;\n }\n }\n}\n\nexport function layoutLeftInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'left');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'left');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'left');\n }\n}\n\nexport function layoutRightInlineItems(items: ILayoutItem[], layout: Layout, limitHeight: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutLeftRightStartOrMiddleItems(startItems, layout, limitHeight, false, 'right');\n }\n\n if (middleItems.length) {\n layoutLeftRightStartOrMiddleItems(middleItems, layout, limitHeight, true, 'right');\n }\n\n if (endItems.length) {\n layoutLeftRightEndItems(endItems, layout, limitHeight, 'right');\n }\n}\n\nexport function layoutTopInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'top');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'top');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'top');\n }\n}\n\nexport function layoutBottomInlineItems(items: ILayoutItem[], layout: Layout, limitWidth: number) {\n const { startItems, middleItems, endItems } = getPositionItems(items);\n\n if (startItems.length) {\n layoutTopBottomStartOrMiddleItems(startItems, layout, limitWidth, false, 'bottom');\n }\n\n if (middleItems.length) {\n layoutTopBottomStartOrMiddleItems(middleItems, layout, limitWidth, true, 'bottom');\n }\n\n if (endItems.length) {\n layoutTopBottomEndItems(endItems, layout, limitWidth, 'bottom');\n }\n}\n","import type { utilFunctionCtx } from '../typings/params';\nimport type { IChart } from '../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, ILayoutItem } from './interface';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport { error } from '../util/debug';\nimport { layoutBottomInlineItems, layoutLeftInlineItems, layoutRightInlineItems, layoutTopInlineItems } from './util';\nimport type { ILayoutRect } from '../typings/layout';\n\nexport type LayoutSideType = {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface IOffset {\n offsetLeft: number;\n offsetRight: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\ntype overlapInfo = {\n items: ILayoutItem[];\n rect: ILayoutRect;\n};\n\nexport class Layout implements IBaseLayout {\n static type = 'base';\n\n leftCurrent: number = 0;\n topCurrent: number = 0;\n rightCurrent: number = 0;\n bottomCurrent: number = 0;\n\n _chartLayoutRect!: IRect;\n _chartViewBox!: IBoundsLike;\n\n protected _onError: (msg: string) => void;\n\n constructor(_spec?: unknown, ctx?: utilFunctionCtx) {\n this._onError = ctx?.onError;\n }\n\n protected _layoutInit(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike) {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n this.leftCurrent = chartLayoutRect.x;\n this.topCurrent = chartLayoutRect.y;\n this.rightCurrent = chartLayoutRect.x + chartLayoutRect.width;\n this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y;\n\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n }\n\n protected _layoutNormalItems(items: ILayoutItem[]) {\n this.layoutNormalInlineItems(items.filter(x => x.layoutType === 'normal-inline'));\n this.layoutNormalItems(items.filter(x => x.layoutType === 'normal'));\n }\n\n protected _groupItems(items: ILayoutItem[]) {\n const regionItems = items.filter(x => x.layoutType === 'region');\n const relativeItems = items.filter(x => x.layoutType === 'region-relative');\n const relativeOverlapItems = items.filter(x => x.layoutType === 'region-relative-overlap');\n const allRelatives = relativeItems.concat(relativeOverlapItems);\n // 允许重叠元素 ,目前允许重叠元素认为是紧贴region的。最后布局\n const overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n };\n relativeOverlapItems.forEach(i => {\n overlapItems[i.layoutOrient].items.push(i);\n });\n\n return {\n regionItems,\n relativeItems,\n relativeOverlapItems,\n allRelatives,\n overlapItems\n };\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n }\n\n protected _processAutoIndent(\n regionItems: ILayoutItem[],\n relativeItems: ILayoutItem[],\n relativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n allRelatives: ILayoutItem[],\n layoutTemp: LayoutSideType\n ): void {\n // 如果有缩进\n if (allRelatives.some(i => i.autoIndent)) {\n // check auto indent\n const { top, bottom, left, right } = this._checkAutoIndent(allRelatives, layoutTemp);\n // 如果出现了需要自动缩进的场景 则基于缩进再次布局\n if (top || bottom || left || right) {\n // set outer bounds to padding\n this.topCurrent = layoutTemp.top + top;\n this.bottomCurrent = layoutTemp.bottom - bottom;\n this.leftCurrent = layoutTemp.left + left;\n this.rightCurrent = layoutTemp.right - right;\n // reLayout\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n }\n }\n }\n\n protected layoutNormalItems(normalItems: ILayoutItem[]): void {\n normalItems.forEach(item => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n item.setLayoutRect(rect);\n\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingRight,\n y: this.bottomCurrent + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n }\n });\n }\n\n protected layoutNormalInlineItems(normalItems: ILayoutItem[]): void {\n const leftItems = normalItems.filter(item => item.layoutOrient === 'left');\n const rightItems = normalItems.filter(item => item.layoutOrient === 'right');\n const topItems = normalItems.filter(item => item.layoutOrient === 'top');\n const bottomItems = normalItems.filter(item => item.layoutOrient === 'bottom');\n\n const limitWidth = this._chartLayoutRect.width + this._chartLayoutRect.x;\n const limitHeight = this._chartLayoutRect.height + this._chartLayoutRect.y;\n\n // 同 normal,按照 left、top、right、bottom 的顺序进行布局\n // 各个方向上再按照 position 进行分组布局,顺序为 start middle end\n leftItems.length && layoutLeftInlineItems(leftItems, this, limitHeight);\n topItems.length && layoutTopInlineItems(topItems, this, limitWidth);\n rightItems.length && layoutRightInlineItems(rightItems, this, limitHeight);\n bottomItems.length && layoutBottomInlineItems(bottomItems, this, limitWidth);\n }\n\n protected _layoutRelativeOverlap(orient: IOrientType, info: overlapInfo) {\n // 得到 max rect\n info.items.forEach((item: ILayoutItem) => {\n const layoutRect = this.getItemComputeLayoutRect(item);\n const rect = item.computeBoundsInRect(layoutRect);\n info.rect.width = Math.max(rect.width + item.layoutPaddingLeft + item.layoutPaddingRight, info.rect.width);\n info.rect.height = Math.max(rect.height + item.layoutPaddingTop + item.layoutPaddingBottom, info.rect.height);\n });\n\n // 统一设置rect和pos\n info.items.forEach((item: ILayoutItem) => {\n item.setLayoutRect(info.rect);\n if (orient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX\n });\n } else if (orient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent - info.rect.width + item.layoutOffsetX\n });\n } else if (orient === 'top') {\n item.setLayoutStartPosition({\n x: this.topCurrent + item.layoutOffsetY\n });\n } else {\n item.setLayoutStartPosition({\n x: this.bottomCurrent - info.rect.height + item.layoutOffsetY\n });\n }\n });\n\n if (orient === 'left') {\n this.leftCurrent += info.rect.width;\n } else if (orient === 'right') {\n this.rightCurrent -= info.rect.width;\n } else if (orient === 'top') {\n this.topCurrent += info.rect.height;\n } else {\n this.bottomCurrent -= info.rect.height;\n }\n }\n\n protected _layoutRelativeItem(item: ILayoutItem, layoutRect: ILayoutRect) {\n const rect = item.computeBoundsInRect(layoutRect);\n if (item.layoutOrient === 'left' || item.layoutOrient === 'right') {\n item.setLayoutRect({ width: rect.width });\n } else {\n item.setLayoutRect({ height: rect.height });\n }\n // 减少尺寸\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'right') {\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } // 减少尺寸\n else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'bottom') {\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n y: this.bottomCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n }\n }\n\n protected _layoutRegionItem(\n regionItems: ILayoutItem[],\n regionRelativeTotalWidth: number,\n regionRelativeTotalHeight: number\n ) {\n // region 处理\n const regionWidth = Math.max(\n Math.min(regionRelativeTotalWidth, ...regionItems.map(region => region.maxWidth ?? Number.MAX_VALUE)),\n 0\n );\n const regionHeight = Math.max(\n Math.min(regionRelativeTotalHeight, ...regionItems.map(region => region.maxHeight ?? Number.MAX_VALUE)),\n 0\n );\n regionItems.forEach(region => {\n const width = regionWidth - region.layoutPaddingLeft - region.layoutPaddingRight;\n const height = regionHeight - region.layoutPaddingTop - region.layoutPaddingBottom;\n\n region.setLayoutRect({\n width: width,\n height: height\n });\n\n region.setLayoutStartPosition({\n x: this.leftCurrent + region.layoutOffsetX + region.layoutPaddingLeft,\n y: this.topCurrent + region.layoutOffsetY + region.layoutPaddingTop\n });\n });\n\n return {\n regionHeight,\n regionWidth\n };\n }\n\n /**\n *\n * 1. 补全 region-relative rect 和部分 layoutStartPoint\n * 2. 补全 region rect 和 layoutStartPoint\n *\n */\n protected layoutRegionItems(\n regionItems: ILayoutItem[],\n regionRelativeItems: ILayoutItem[],\n regionRelativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n }\n ): void {\n let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n let regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('left', overlapItems.left);\n this._layoutRelativeOverlap('right', overlapItems.right);\n\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'top' || x.layoutOrient === 'bottom')\n .forEach(item => {\n this._layoutRelativeItem(item, this.getItemComputeLayoutRect(item));\n });\n\n this._layoutRelativeOverlap('top', overlapItems.top);\n this._layoutRelativeOverlap('bottom', overlapItems.bottom);\n\n // 此时得到height\n regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n // region 处理\n const { regionWidth, regionHeight } = this._layoutRegionItem(\n regionItems,\n regionRelativeTotalWidth,\n regionRelativeTotalHeight\n );\n\n // region-relative 特殊处理\n regionRelativeItems.concat(regionRelativeOverlapItems).forEach(item => {\n // 处理特殊元素的宽高\n if (['left', 'right'].includes(item.layoutOrient)) {\n // 用户有配置的话,已经处理过,不需要再次处理\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n height: relativeRegion.getLayoutRect().height\n });\n item.setLayoutStartPosition({\n y: relativeRegion.getLayoutStartPoint().y + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + regionWidth - regionRelativeTotalWidth\n });\n }\n } else if (['top', 'bottom'].includes(item.layoutOrient)) {\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n width: relativeRegion.getLayoutRect().width\n });\n\n item.setLayoutStartPosition({\n x: relativeRegion.getLayoutStartPoint().x + item.layoutOffsetX + item.layoutPaddingLeft\n });\n\n if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n y: item.getLayoutStartPoint().y + regionHeight - regionRelativeTotalHeight\n });\n }\n }\n });\n }\n\n /**\n * 再找出对 absolute 元素,无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n protected layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n // 对普通布局来说,只出一个 region 绑定\n filterRegionsWithID(items: ILayoutItem[], id: number): ILayoutItem {\n const target = items.find(x => x.getModelId() === id);\n if (!target) {\n (this._onError ?? error)('can not find target region item, invalid id');\n }\n return target as ILayoutItem;\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem) {\n const result = {\n width: this.rightCurrent - this.leftCurrent - item.layoutPaddingLeft - item.layoutPaddingRight,\n height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom\n };\n return result;\n }\n\n protected _checkAutoIndent(\n items: ILayoutItem[],\n layoutTemp: {\n top: number;\n left: number;\n bottom: number;\n right: number;\n }\n ): IPadding {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const itemOuter = i.getLastComputeOutBounds();\n const outer = this._getOutInLayout(itemOuter, i, layoutTemp);\n if (vOrH) {\n result.top = Math.max(result.top, outer.top);\n result.bottom = Math.max(result.bottom, outer.bottom);\n } else {\n result.left = Math.max(result.left, outer.left);\n result.right = Math.max(result.right, outer.right);\n }\n });\n return result;\n }\n\n private _getOutInLayout(itemOuter: IBoundsLike, i: ILayoutItem, tempBorder: LayoutSideType): LayoutSideType {\n const { x, y } = i.getLayoutStartPoint();\n const { width, height } = i.getLayoutRect();\n\n const result: LayoutSideType = {\n left: tempBorder.left - (x - itemOuter.x1),\n right: x + width + itemOuter.x2 - tempBorder.right,\n top: tempBorder.top - (y - itemOuter.y1),\n bottom: y + height + itemOuter.y2 - tempBorder.bottom\n };\n return result;\n }\n}\n","import isValid from './isValid';\n\nexport function range(start: number, stop?: number, step?: number): number[] {\n if (!isValid(stop)) {\n stop = start;\n start = 0;\n }\n if (!isValid(step)) {\n step = 1;\n }\n\n let i = -1;\n const n = Math.max(0, Math.ceil((stop - start) / step)) | 0;\n const range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export const memoize = any>(func: T) => {\n let lastArgs: any[] = null;\n let lastResult: any = null;\n\n return ((...args: any[]) => {\n if (lastArgs && args.every((val, i) => val === lastArgs[i])) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = (func as any)(...args);\n\n return lastResult;\n }) as T;\n};\n","import { ascending } from './ascending';\nimport isNil from './isNil';\nimport { Logger } from '../logger';\n\n/**\n * 通过二分法,查找数组a中大于数值x的第一个元素的序号\n * @param a\n * @param x\n * @param lo\n * @param hi\n * @returns\n */\nexport function bisect(a: number[], x: number, lo: number = 0, hi?: number) {\n if (isNil(hi)) {\n hi = a.length;\n }\n while (lo < (hi as number)) {\n const mid: number = (lo + (hi as number)) >>> 1;\n if (ascending(a[mid], x) > 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n\n/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/bisect.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n/** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\nexport function findZeroOfFunction(\n f: (entry: number) => number,\n a: number,\n b: number,\n parameters?: {\n maxIterations?: number;\n tolerance?: number;\n }\n) {\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\n if (fA * fB > 0) {\n const logger = Logger.getInstance();\n logger.error('Initial bisect points must have opposite signs');\n return NaN;\n }\n\n if (fA === 0) {\n return a;\n }\n if (fB === 0) {\n return b;\n }\n\n for (let i = 0; i < maxIterations; ++i) {\n delta /= 2;\n const mid = a + delta;\n const fMid = f(mid);\n\n if (fMid * fA >= 0) {\n a = mid;\n }\n\n if (Math.abs(delta) < tolerance || fMid === 0) {\n return mid;\n }\n }\n return a + delta;\n}\n\n/**\n * 二分靠近框架,返回数组中第一个大于等于目标值的数的索引\n * @param arr 数组\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearch = (arr: T[], compareFn: (value: T) => number) => {\n return binaryFuzzySearchInNumberRange(0, arr.length, value => compareFn(arr[value]));\n};\n\n/**\n * 二分靠近框架,返回数字区间中第一个大于等于目标值的数字\n * @param x1 区间上界\n * @param x2 区间下界(不包含)\n * @param compareFn 比较函数,返回(当前值-目标值)\n */\nexport const binaryFuzzySearchInNumberRange = (x1: number, x2: number, compareFn: (value: number) => number) => {\n let left = x1;\n let right = x2;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n if (compareFn(mid) >= 0) {\n right = mid; // 第一个大于等于目标值的数\n } else {\n left = mid + 1;\n }\n }\n return left;\n};\n","import { bisect, range } from '@visactor/vutils';\nimport type { FloorCeilType, InterpolateType } from '../interface';\n\nexport function identity(x: any) {\n return x;\n}\n\nexport const generatePow = (exponent: number) => {\n return (x: number) => {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n};\n\nexport const sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\nexport const square = (x: number) => {\n return x < 0 ? -x * x : x * x;\n};\n\nexport const log = (x: number) => {\n return Math.log(x);\n};\n\nexport const exp = (x: number) => {\n return Math.exp(x);\n};\n\nexport const logNegative = (x: number) => {\n return -Math.log(-x);\n};\n\nexport const expNegative = (x: number) => {\n return -Math.exp(-x);\n};\n\nexport const pow10 = (x: number) => {\n return isFinite(x) ? Math.pow(10, x) : x < 0 ? 0 : x;\n};\n\nexport const powp = (base: number) => {\n return base === 10 ? pow10 : base === Math.E ? Math.exp : (x: number) => Math.pow(base, x);\n};\n\nexport const logp = (base: number) => {\n return base === Math.E\n ? Math.log\n : base === 10\n ? Math.log10\n : base === 2\n ? Math.log2\n : ((base = Math.log(base)), (x: number) => Math.log(x) / base);\n};\n\nexport const symlog = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n};\n\nexport const symexp = (c: number) => {\n return (x: number) => {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n};\n\nexport function normalize(a: number, b: number): (x: number) => number {\n a = Number(a);\n b = Number(b);\n b -= a;\n if (b) {\n return (x: number) => {\n return (x - a) / b;\n };\n }\n const result = Number.isNaN(b) ? NaN : 0.5;\n return () => {\n return result;\n };\n}\n\n// 基于d3-scale\n// https://github.com/d3/d3-scale/blob/main/src/continuous.js\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nexport function bimap(\n domain: [number, number],\n range: [any, any],\n interpolate: InterpolateType\n): (x: number) => any {\n const d0 = domain[0];\n const d1 = domain[1];\n const r0 = range[0];\n const r1 = range[1];\n let d0Fuc: any;\n let r0Fuc: any;\n if (d1 < d0) {\n d0Fuc = normalize(d1, d0);\n r0Fuc = interpolate(r1, r0);\n } else {\n d0Fuc = normalize(d0, d1);\n r0Fuc = interpolate(r0, r1);\n }\n return (x: number) => {\n return r0Fuc(d0Fuc(x));\n };\n}\n\nexport function bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n\n/** 计算 scale 的实际 range 长度 */\nexport function scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = space * step;\n return wholeSize;\n}\n\n/** 根据 scale 的实际 range 长度计算 bandwidth */\nexport function calculateBandwidthFromWholeRangeSize(\n count: number,\n wholeSize: number,\n paddingInner: number,\n paddingOuter: number,\n round: boolean\n) {\n const space = bandSpace(count, paddingInner, paddingOuter);\n let step = wholeSize / Math.max(1, space || 1);\n if (round) {\n step = Math.floor(step);\n }\n let bandwidth = step * (1 - paddingInner);\n if (round) {\n bandwidth = Math.round(bandwidth);\n }\n return bandwidth;\n}\n\n/** 根据可见 range 和 rangeFactor 计算整体 range */\nexport function calculateWholeRangeFromRangeFactor(range: number[], rangeFactor: number[]): [number, number] {\n const k = (range[1] - range[0]) / (rangeFactor[1] - rangeFactor[0]);\n const b = range[0] - k * rangeFactor[0];\n const r0 = b;\n const r1 = k + b;\n return [r0, r1];\n}\n\nexport function polymap(domain: number[], range: any[], interpolate: InterpolateType): (x: number) => any {\n const j = Math.min(domain.length, range.length) - 1;\n const d = new Array(j);\n const r = new Array(j);\n let i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function (x: number) {\n const i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport const nice = (domain: number[] | Date[], options: FloorCeilType) => {\n const newDomain = domain.slice();\n\n let startIndex = 0;\n let endIndex = newDomain.length - 1;\n let x0 = newDomain[startIndex];\n let x1 = newDomain[endIndex];\n\n if (x1 < x0) {\n [startIndex, endIndex] = [endIndex, startIndex];\n [x0, x1] = [x1, x0];\n }\n\n newDomain[startIndex] = options.floor(x0);\n newDomain[endIndex] = options.ceil(x1);\n\n return newDomain;\n};\n\nexport const niceNumber = (value: number, round: boolean = false) => {\n const exponent = Math.floor(Math.log10(value));\n const fraction = value / Math.pow(10, exponent);\n\n let niceFraction: number;\n\n if (round) {\n if (fraction < 1.5) {\n niceFraction = 1;\n } else if (fraction < 3) {\n niceFraction = 2;\n } else if (fraction < 7) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n } else {\n if (fraction <= 1) {\n niceFraction = 1;\n } else if (fraction <= 2) {\n niceFraction = 2;\n } else if (fraction <= 5) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n }\n\n return niceFraction * Math.pow(10, exponent);\n};\n\nexport const restrictNumber = (value: number, domain: [number, number]) => {\n let min;\n let max;\n if (domain[0] < domain[1]) {\n min = domain[0];\n max = domain[1];\n } else {\n min = domain[1];\n max = domain[0];\n }\n return Math.min(Math.max(value, min), max);\n};\n","import { range, memoize, isNumber } from '@visactor/vutils';\nimport type { TransformType, ContinuousTicksFunc, NiceOptions, NiceType } from '../interface';\nimport { niceNumber, restrictNumber } from './utils';\n\nconst e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\nconst niceNumbers = [1, 2, 5, 10];\n\ntype TicksFunc = (start: number, stop: number, count: number) => number[];\n// eslint-disable-next-line max-len\ntype TicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\n// eslint-disable-next-line max-len\ntype ForceTicksBaseTransformFunc = (\n start: number,\n stop: number,\n count: number,\n transformer: TransformType,\n untransformer: TransformType\n) => number[];\ntype D3TicksForLogTransformFunc = (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: {\n noDecimals?: boolean;\n }\n) => number[];\n\nexport const calculateTicksOfSingleValue = (value: number, tickCount: number, noDecimals?: boolean) => {\n let step = 1;\n let start = value;\n const middleIndex = Math.floor((tickCount - 1) / 2);\n const absVal = Math.abs(value);\n\n if (value >= 0 && value <= Number.MIN_VALUE) {\n start = 0;\n } else if (value < 0 && value >= -Number.MIN_VALUE) {\n start = -(tickCount - 1);\n } else if (!noDecimals && absVal < 1) {\n step = getNickStep(absVal).step;\n // middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (noDecimals || absVal > 1) {\n start = Math.floor(value) - middleIndex * step;\n }\n\n if (step > 0) {\n if (value > 0) {\n start = Math.max(start, 0);\n } else if (value < 0) {\n // < 0;\n start = Math.min(start, -(tickCount - 1) * step);\n }\n\n return range(0, tickCount).map((index: number) => start + index * step);\n }\n\n return value > 0\n ? calculateTicksByStep(0, -(tickCount - 1) / step, step)\n : calculateTicksByStep((tickCount - 1) / step, 0, step);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const d3Ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let i = -1;\n let n;\n let ticks;\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return [start];\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return [start];\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n step = tickIncrement(start, stop, count).step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let r0 = Math.round(start / step);\n let r1 = Math.round(stop / step);\n if (r0 * step < start) {\n ++r0;\n }\n if (r1 * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else if (step < 0 && options?.noDecimals) {\n step = 1;\n const r0 = Math.ceil(start);\n const r1 = Math.floor(stop);\n\n if (r0 <= r1) {\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = r0 + i;\n }\n } else {\n return [];\n }\n } else {\n step = -step;\n let r0 = Math.round(start * step);\n let r1 = Math.round(stop * step);\n if (r0 / step < start) {\n ++r0;\n }\n if (r1 / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst calculateTicksByStep = (start: number, stop: number, step: number) => {\n let i = -1;\n let n;\n let ticks;\n\n if (step > 0) {\n let r0 = Math.floor(start / step);\n let r1 = Math.ceil(stop / step);\n if ((r0 + 1) * step < start) {\n ++r0;\n }\n if ((r1 - 1) * step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else {\n step = -step;\n let r0 = Math.floor(start * step);\n let r1 = Math.ceil(stop * step);\n if ((r0 + 1) / step < start) {\n ++r0;\n }\n if ((r1 - 1) / step > stop) {\n --r1;\n }\n ticks = new Array((n = r1 - r0 + 1));\n while (++i < n) {\n ticks[i] = (r0 + i) / step;\n }\n }\n\n return ticks;\n};\n\nexport const appendTicksToCount = (ticks: number[], count: number, step: number) => {\n let n: number;\n const firstTick = ticks[0];\n const lastTick = ticks[ticks.length - 1];\n const appendCount = count - ticks.length;\n\n if (lastTick <= 0) {\n const headTicks: number[] = [];\n // append to head\n for (n = appendCount; n >= 1; n--) {\n headTicks.push(firstTick - n * step);\n }\n return headTicks.concat(ticks);\n } else if (firstTick >= 0) {\n // append to tail\n for (n = 1; n <= appendCount; n++) {\n ticks.push(lastTick + n * step);\n }\n\n return ticks;\n }\n let headTicks: number[] = [];\n const tailTicks: number[] = [];\n // append to head and tail\n for (n = 1; n <= appendCount; n++) {\n if (n % 2 === 0) {\n headTicks = [firstTick - Math.floor(n / 2) * step].concat(headTicks);\n } else {\n tailTicks.push(lastTick + Math.ceil(n / 2) * step);\n }\n }\n\n return headTicks.concat(ticks).concat(tailTicks);\n};\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport const ticks = memoize(\n (start: number, stop: number, count: number, options?: { noDecimals?: boolean }) => {\n let reverse;\n let ticks;\n let n;\n const maxIterations = 5;\n\n stop = +stop;\n start = +start;\n count = +count;\n\n // add check for start equal stop\n if (start === stop) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n\n if (Math.abs(start - stop) <= Number.MIN_VALUE && count > 0) {\n return calculateTicksOfSingleValue(start, count, options?.noDecimals);\n }\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n const stepRes = tickIncrement(start, stop, count);\n let step = stepRes.step;\n // why return empty array when stop === 0 ?\n // if (stop === 0 || !isFinite(step)) {\n if (!isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n let cur = 1;\n const { power, gap } = stepRes;\n const delatStep = gap === 10 ? 2 * 10 ** power : 1 * 10 ** power;\n while (\n cur <= maxIterations &&\n ((ticks = calculateTicksByStep(start, stop, step)), ticks.length > count + 1) &&\n count > 2\n ) {\n step += delatStep;\n\n cur += 1;\n }\n\n if (count > 2 && ticks.length < count - 1) {\n ticks = appendTicksToCount(ticks, count, step);\n }\n } else {\n if (options?.noDecimals && step < 0) {\n step = 1;\n }\n ticks = calculateTicksByStep(start, stop, step);\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n }\n);\n\nconst getNickStep = (step: number) => {\n const power = Math.floor(Math.log(step) / Math.LN10); // 对数取整\n const error = step / 10 ** power;\n\n let gap = niceNumbers[0];\n if (error >= e10) {\n gap = niceNumbers[3];\n } else if (error >= e5) {\n gap = niceNumbers[2];\n } else if (error >= e2) {\n gap = niceNumbers[1];\n }\n\n if (power >= 0) {\n return { step: gap * 10 ** power, gap, power };\n }\n return { step: -(10 ** -power) / gap, gap, power };\n};\n\nexport function tickIncrement(start: number, stop: number, count: number) {\n const step = (stop - start) / Math.max(0, count);\n return getNickStep(step);\n}\n\n/**\n * 严格根据start、stop、count进行分割,要求start、stop、count完全准确(除了count = 1的情况下stop可能不准确)\n * @param start\n * @param stop\n * @param count\n * @returns\n */\nexport function forceTicks(start: number, stop: number, count: number) {\n let step;\n\n stop = +stop;\n start = +start;\n count = +count;\n if (start === stop && count > 0) {\n return [start];\n }\n if (count <= 0 || (step = forceTickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n return [];\n }\n\n const ticks = new Array(count);\n for (let i = 0; i < count; i++) {\n ticks[i] = start + i * step;\n }\n\n return ticks;\n}\n\nexport function forceTickIncrement(start: number, stop: number, count: number) {\n // 用绝对数值做步进距离\n const step = (stop - start) / Math.max(1, count - 1);\n return step;\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n let i = -1;\n let n;\n let reverse;\n\n stop = +stop;\n start = +start;\n step = +step;\n if ((reverse = stop < start)) {\n n = start;\n start = stop;\n stop = n;\n }\n if (!isFinite(step) || stop - start <= step) {\n return [start];\n }\n const count = Math.floor((stop - start) / step + 1);\n const ticks = new Array(count);\n while (++i < count) {\n ticks[i] = start + i * step;\n }\n if (reverse) {\n ticks.reverse();\n }\n return ticks;\n}\n\nexport function niceLinear(d: number[], count: number = 10) {\n let i0 = 0;\n let i1 = d.length - 1;\n let start = d[i0];\n let stop = d[i1];\n let prestep;\n let step;\n let maxIter = 10;\n\n if (stop < start) {\n step = start;\n start = stop;\n stop = step;\n step = i0;\n i0 = i1;\n i1 = step;\n }\n\n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count).step;\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return d;\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 } else {\n break;\n }\n prestep = step;\n }\n\n return;\n}\n\nexport function parseNiceOptions(originalDomain: number[], option: NiceOptions) {\n const hasForceMin = isNumber(option.forceMin);\n const hasForceMax = isNumber(option.forceMax);\n let niceType: NiceType = null;\n const niceMinMax = [];\n let niceDomain: number[] = null;\n\n const domainValidator =\n hasForceMin && hasForceMax\n ? (x: number) => x >= option.forceMin && x <= option.forceMax\n : hasForceMin\n ? (x: number) => x >= option.forceMin\n : hasForceMax\n ? (x: number) => x <= option.forceMax\n : null;\n\n if (hasForceMin) {\n niceMinMax[0] = option.forceMin;\n } else if (\n isNumber(option.min) &&\n option.min <= Math.min(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[0] = option.min;\n }\n\n if (hasForceMax) {\n niceMinMax[1] = option.forceMax;\n } else if (\n isNumber(option.max) &&\n option.max >= Math.max(originalDomain[0], originalDomain[originalDomain.length - 1])\n ) {\n niceMinMax[1] = option.max;\n }\n\n if (isNumber(niceMinMax[0]) && isNumber(niceMinMax[1])) {\n niceDomain = originalDomain.slice();\n niceDomain[0] = niceMinMax[0];\n niceDomain[niceDomain.length - 1] = niceMinMax[1];\n } else if (!isNumber(niceMinMax[0]) && !isNumber(niceMinMax[1])) {\n niceType = 'all';\n } else if (!isNumber(niceMinMax[0])) {\n niceType = 'min';\n } else {\n niceType = 'max';\n }\n\n return { niceType, niceDomain, niceMinMax, domainValidator };\n}\n\nexport const fixPrecision = (start: number, stop: number, value: number) => {\n return Math.abs(stop - start) < 1 ? +value.toFixed(1) : Math.round(+value);\n};\n\nexport const d3TicksForLog = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType,\n options?: { noDecimals?: boolean }\n ) => {\n let u = start;\n let v = stop;\n const r = v < u;\n\n if (r) {\n [u, v] = [v, u];\n }\n\n let i = transformer(u);\n let j = transformer(v);\n let k;\n let t;\n let z = [];\n\n if (!(base % 1) && j - i < count) {\n // this._base is integer\n (i = Math.floor(i)), (j = Math.ceil(j));\n if (u > 0) {\n for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n } else {\n for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / untransformer(-i) : k * untransformer(i);\n if (t < u) {\n continue;\n }\n if (t > v) {\n break;\n }\n z.push(t);\n }\n }\n }\n if (z.length * 2 < count) {\n z = ticks(u, v, count);\n }\n } else {\n z = ticks(i, j, Math.min(j - i, count)).map(untransformer);\n }\n z = z.filter((t: number) => t !== 0);\n if (options?.noDecimals) {\n z = Array.from(new Set(z.map((t: number) => Math.floor(t))));\n }\n return r ? z.reverse() : z;\n }\n);\n\nexport const ticksBaseTransform = memoize(\n (\n start: number,\n stop: number,\n count: number,\n base: number,\n transformer: TransformType,\n untransformer: TransformType\n ) => {\n const ticksResult: number[] = [];\n const ticksMap = {};\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n let ticksExp = [];\n // get ticks exp\n if (Number.isInteger(base)) {\n ticksExp = ticks(startExp, stopExp, count);\n } else {\n const stepExp = (stopExp - startExp) / (count - 1);\n for (let i = 0; i < count; i++) {\n ticksExp.push(startExp + i * stepExp);\n }\n }\n ticksExp.forEach((tl: number) => {\n // get pow\n const power = untransformer(tl);\n // nice\n const nicePower = Number.isInteger(base)\n ? fixPrecision(start, stop, power)\n : fixPrecision(start, stop, niceNumber(power));\n // scope\n const scopePower = fixPrecision(start, stop, restrictNumber(nicePower, [start, stop]));\n // dedupe\n if (!ticksMap[scopePower] && !isNaN(scopePower) && ticksExp.length > 1) {\n ticksMap[scopePower] = 1;\n ticksResult.push(scopePower);\n }\n });\n return ticksResult;\n }\n);\n\nexport const forceTicksBaseTransform = memoize(\n (start: number, stop: number, count: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = forceTicks(startExp, stopExp, count);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n\nexport const forceStepTicksBaseTransform = memoize(\n (start: number, stop: number, step: number, transformer: TransformType, untransformer: TransformType) => {\n const startExp = transformer(start);\n const stopExp = transformer(stop);\n const ticksExp = stepTicks(startExp, stopExp, step);\n return ticksExp.map((te: number) => niceNumber(untransformer(te)));\n }\n);\n","import { clamp, isNil, isValid } from '@visactor/vutils';\nimport type { IRangeFactor, ScaleFishEyeOptions } from './interface';\nimport { calculateWholeRangeFromRangeFactor } from './utils/utils';\n\nexport abstract class BaseScale implements IRangeFactor {\n protected _wholeRange: any[];\n protected _rangeFactorStart?: number = null;\n protected _rangeFactorEnd?: number = null;\n protected _unknown: any;\n protected _fishEyeOptions?: ScaleFishEyeOptions;\n protected _fishEyeTransform?: (output: number) => number;\n\n abstract range(): any[];\n abstract domain(): any[];\n abstract invert(d: any): any;\n\n protected _calculateWholeRange(range: any[]) {\n if (this._wholeRange) {\n return this._wholeRange;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n this._wholeRange = calculateWholeRangeFromRangeFactor(range, [this._rangeFactorStart, this._rangeFactorEnd]);\n return this._wholeRange;\n }\n return range;\n }\n\n abstract calculateVisibleDomain(range: any[]): any[];\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean, clear?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean, clear?: boolean): this | any[] {\n if (!_) {\n if (clear) {\n this._wholeRange = null;\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n return this;\n }\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n return [this._rangeFactorStart, this._rangeFactorEnd];\n }\n return null;\n }\n if (_.length === 2 && _.every(r => r >= 0 && r <= 1)) {\n this._wholeRange = null;\n if (_[0] === 0 && _[1] === 1) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _[0];\n this._rangeFactorEnd = _[1];\n }\n }\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorStart;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorEnd) || this._rangeFactorEnd === 1)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorStart = _;\n this._rangeFactorEnd = this._rangeFactorEnd ?? 1;\n }\n }\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return this._rangeFactorEnd;\n }\n if (_ >= 0 && _ <= 1) {\n this._wholeRange = null;\n if (_ === 0 && (isNil(this._rangeFactorStart) || this._rangeFactorStart === 0)) {\n this._rangeFactorStart = null;\n this._rangeFactorEnd = null;\n } else {\n this._rangeFactorEnd = _;\n this._rangeFactorStart = this._rangeFactorStart ?? 0;\n }\n }\n\n return this;\n }\n\n protected generateFishEyeTransform() {\n if (!this._fishEyeOptions) {\n this._fishEyeTransform = null;\n\n return;\n }\n const { distortion = 2, radiusRatio = 0.1, radius } = this._fishEyeOptions;\n const range = this.range();\n const first = range[0];\n const last = range[range.length - 1];\n const min = Math.min(first, last);\n const max = Math.max(first, last);\n const focus = clamp(this._fishEyeOptions.focus ?? 0, min, max);\n const rangeRadius = isNil(radius) ? (max - min) * radiusRatio : radius;\n let k0 = Math.exp(distortion);\n k0 = (k0 / (k0 - 1)) * rangeRadius;\n const k1 = distortion / rangeRadius;\n\n this._fishEyeTransform = (output: number) => {\n const delta = Math.abs(output - focus);\n\n if (delta >= rangeRadius) {\n return output;\n }\n\n if (delta <= 1e-6) {\n return focus;\n }\n const k = ((k0 * (1 - Math.exp(-delta * k1))) / delta) * 0.75 + 0.25;\n\n return focus + (output - focus) * k;\n };\n }\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n\n /** 内部变量对外抛出方法 */\n get(key: string, defaultValue?: any) {\n return (this as any)?.[key] ?? defaultValue;\n }\n}\n","/**\n * 将 hex 格式颜色转换为 rgb 格式\n * @param str hex 格式的颜色值\n * @returns rgb 格式\n */\nexport default function hexToRgb(str: string): [number, number, number] {\n let r = '';\n let g = '';\n let b = '';\n const strtIndex = str[0] === '#' ? 1 : 0;\n for (let i = strtIndex; i < str.length; i++) {\n if (str[i] === '#') {\n continue;\n }\n if (i < strtIndex + 2) {\n r += str[i];\n } else if (i < strtIndex + 4) {\n g += str[i];\n } else if (i < strtIndex + 6) {\n b += str[i];\n }\n }\n const ri = parseInt(r, 16);\n const gi = parseInt(g, 16);\n const bi = parseInt(b, 16);\n return [ri, gi, bi];\n}\n","export default function rgbToHex(r: number, g: number, b: number) {\n return Number((1 << 24) + (r << 16) + (g << 8) + b)\n .toString(16)\n .slice(1);\n}\n","import { RGB } from './Color';\n\nexport function interpolateRgb(colorA: RGB, colorB: RGB): (x: number) => RGB {\n const redA = colorA.r;\n const redB = colorB.r;\n const greenA = colorA.g;\n const greenB = colorB.g;\n const blueA = colorA.b;\n const blueB = colorB.b;\n const opacityA = colorA.opacity;\n const opacityB = colorB.opacity;\n\n return (t: number) => {\n const r = Math.round(redA * (1 - t) + redB * t);\n const g = Math.round(greenA * (1 - t) + greenB * t);\n const b = Math.round(blueA * (1 - t) + blueB * t);\n const opacity = opacityA * (1 - t) + opacityB * t;\n\n return new RGB(r, g, b, opacity);\n };\n}\n","export function interpolateNumber(a: number, b: number): (x: number) => number {\n return (t: number) => {\n return a * (1 - t) + b * t;\n };\n}\n\nexport function interpolateNumberRound(a: number, b: number): (x: number) => number {\n return function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n\nexport function interpolateDate(a: Date, b: Date) {\n const aVal = a.valueOf();\n const bVal = b.valueOf();\n\n const d = new Date();\n return (t: number) => {\n d.setTime(aVal * (1 - t) + bVal * t);\n return d;\n };\n}\n\nconst reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\nconst reB = new RegExp(reA.source, 'g');\n\nfunction zero(b: any) {\n return function () {\n return b;\n };\n}\n\nfunction one(b: any) {\n return function (t: any) {\n return b(t) + '';\n };\n}\n\nexport function interpolateString(a: any, b: any) {\n let bi = (reA.lastIndex = reB.lastIndex = 0); // scan index for next number in b\n let am: any; // current match in a\n let bm: any; // current match in b\n let bs; // string preceding current number in b, if any\n let i = -1; // index in s\n const s: any[] = []; // string constants and placeholders\n const q: any[] = []; // 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)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) {\n s[i] += bm;\n } // coalesce with previous string\n else {\n s[++i] = bm;\n }\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({ i: i, x: interpolateNumber(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]) {\n s[i] += bs;\n } // coalesce with previous string\n else {\n s[++i] = bs;\n }\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\n ? q[0]\n ? one(q[0].x)\n : zero(b)\n : ((b = q.length),\n function (t: any) {\n for (let i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }\n return s.join('');\n });\n}\n","import { ColorUtil, isNil, interpolateNumber, interpolateDate } from '@visactor/vutils';\n\nconst { interpolateRgb } = ColorUtil;\n\nexport function interpolate(a: any, b: any) {\n const t = typeof b;\n let c;\n\n if (isNil(b) || t === 'boolean') {\n return () => b;\n }\n\n if (t === 'number') {\n return interpolateNumber(a, b);\n }\n\n if (t === 'string') {\n if ((c = ColorUtil.Color.parseColorString(b))) {\n const rgb = interpolateRgb(ColorUtil.Color.parseColorString(a as string), c);\n\n return (t: number) => {\n // #rrggbbaa 格式在部分浏览器存在兼容性问题,rgba()字符串兼容性更好,所以还是支持rgba()字符串\n return rgb(t).formatRgb();\n };\n }\n\n return interpolateNumber(Number(a), Number(b));\n }\n\n if (b instanceof ColorUtil.RGB) {\n return interpolateRgb(a, b);\n }\n\n if (b instanceof ColorUtil.Color) {\n return interpolateRgb(a.color, b.color);\n }\n\n if (b instanceof Date) {\n return interpolateDate(a, b);\n }\n\n return interpolateNumber(Number(a), Number(b));\n}\n","export function clamper(a: number, b: number): (x: number) => number {\n let t;\n if (a > b) {\n t = a;\n a = b;\n b = t;\n }\n return (x: number) => {\n return Math.max(a, Math.min(b, x));\n };\n}\n","import { BaseScale } from './base-scale';\nimport type {\n BimapType,\n InterpolateType,\n PolymapType,\n TransformType,\n IContinuousScale,\n ContinuousScaleType,\n TickData,\n NiceType,\n ScaleFishEyeOptions\n} from './interface';\nimport { interpolate } from './utils/interpolate';\nimport { bimap, identity, polymap } from './utils/utils';\nimport { clamper, toNumber, interpolateNumberRound, interpolateNumber, isValid, isNil } from '@visactor/vutils';\n\nexport class ContinuousScale extends BaseScale implements IContinuousScale {\n readonly type: ContinuousScaleType;\n protected transformer: TransformType;\n protected untransformer: TransformType;\n\n protected _niceDomain: number[];\n protected _niceType?: NiceType;\n protected _domain: number[];\n protected _range: any[];\n protected _unknown: any = undefined;\n protected _forceAlign: boolean;\n\n protected _output?: (x: number) => number;\n protected _input?: (x: number) => number;\n protected _interpolate?: InterpolateType;\n protected _piecewise: BimapType | PolymapType;\n protected _domainValidator?: (val: number) => boolean;\n\n _clamp?: (x: number) => number;\n _autoClamp?: boolean;\n\n constructor(transformer: TransformType = identity, untransformer: TransformType = identity) {\n super();\n this.transformer = transformer;\n this.untransformer = untransformer;\n\n this._forceAlign = true;\n this._domain = [0, 1];\n this._range = [0, 1];\n this._clamp = identity;\n this._piecewise = bimap;\n this._interpolate = interpolate;\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._niceDomain ?? this._domain;\n }\n\n fishEye(): ScaleFishEyeOptions;\n fishEye(options: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this;\n fishEye(options?: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this | ScaleFishEyeOptions {\n if (options || clear) {\n this._fishEyeOptions = options;\n this._fishEyeTransform = null;\n\n return this.rescale(slience);\n }\n\n return this._fishEyeOptions;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._clamp(x)));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n invert(y: any): any {\n if (!this._input) {\n this._input = (this._piecewise as PolymapType)(\n this._calculateWholeRange(this._range),\n (this._niceDomain ?? this._domain).map(this.transformer),\n interpolateNumber\n );\n }\n return this._clamp(this.untransformer(this._input(y)));\n }\n\n domain(): any[];\n domain(_: any[], slience?: boolean): this;\n domain(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return (this._niceDomain ?? this._domain).slice();\n }\n this._domainValidator = null;\n this._niceType = null;\n this._niceDomain = null;\n const nextDomain = Array.from(_, toNumber) as [number, number];\n\n this._domain = nextDomain;\n return this.rescale(slience);\n }\n\n range(): any[];\n range(_: any[], slience?: boolean): this;\n range(_?: any[], slience?: boolean): this | any[] {\n if (!_) {\n return this._range.slice();\n }\n\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n return this.rescale(slience);\n }\n\n rangeRound(_: any[], slience?: boolean): this {\n const nextRange = Array.from(_) as [number, number];\n this._range = nextRange;\n this._interpolate = interpolateNumberRound;\n return this.rescale(slience);\n }\n\n rescale(slience?: boolean): this {\n if (slience) {\n return this;\n }\n const domain = this._niceDomain ?? this._domain;\n const domainLength = domain.length;\n const rangeLength = this._range.length;\n let n = Math.min(domainLength, rangeLength);\n\n if (domainLength && domainLength < rangeLength && this._forceAlign) {\n // insert steps to domain\n const deltaStep = rangeLength - domainLength + 1;\n const last = domain[domainLength - 1];\n const delta = domainLength >= 2 ? (last - domain[domainLength - 2]) / deltaStep : 0;\n\n for (let i = 1; i <= deltaStep; i++) {\n domain[domainLength - 2 + i] = last - delta * (deltaStep - i);\n }\n n = rangeLength;\n }\n\n if (this._autoClamp) {\n this._clamp = clamper(domain[0], domain[n - 1]);\n }\n this._piecewise = n > 2 ? polymap : bimap;\n this._output = this._input = null;\n this._wholeRange = null;\n\n this.generateFishEyeTransform();\n return this;\n }\n\n clamp(): boolean;\n clamp(_: boolean, f?: (x: number) => number, slience?: boolean): this;\n clamp(_?: boolean, f?: (x: number) => number, slience?: boolean): this | boolean {\n if (!arguments.length) {\n return this._clamp !== identity;\n }\n if (f) {\n this._autoClamp = false;\n this._clamp = f;\n } else {\n this._autoClamp = !!_;\n this._clamp = _ ? undefined : identity;\n }\n\n return this.rescale(slience);\n }\n\n interpolate(): InterpolateType;\n interpolate(_: InterpolateType, slience?: boolean): this;\n interpolate(_?: InterpolateType, slience?: boolean) {\n if (!arguments.length) {\n return this._interpolate;\n }\n this._interpolate = _;\n return this.rescale(slience);\n }\n\n ticks(count: number = 10): any[] {\n return [];\n }\n\n tickData(count: number = 10): TickData[] {\n const ticks = this.ticks(count);\n return (ticks ?? []).map((tick, index) => {\n const scaledValue = this.scale(tick);\n return {\n index,\n tick,\n value: (scaledValue - this._range[0]) / (this._range[1] - this._range[0])\n };\n });\n }\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean): this | any[] {\n if (!_) {\n return super.rangeFactor();\n }\n super.rangeFactor(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorStart();\n }\n super.rangeFactorStart(_);\n this._output = this._input = null;\n\n return this;\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorEnd();\n }\n super.rangeFactorEnd(_);\n this._output = this._input = null;\n\n return this;\n }\n\n forceAlignDomainRange(): boolean;\n forceAlignDomainRange(enable: boolean): this;\n forceAlignDomainRange(forceAlign?: boolean): this | boolean {\n if (!arguments.length) {\n return this._forceAlign;\n }\n this._forceAlign = forceAlign;\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport { d3Ticks, forceTicks, niceLinear, parseNiceOptions, stepTicks, ticks } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport type { ContinuousScaleType, CustomTicksFunc, NiceOptions } from './interface';\nimport { isFunction, isValid } from '@visactor/vutils';\n\n/**\n * TODO:\n * 1. niceMax/niceMin\n * 2. tickFormat\n */\nexport class LinearScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Linear;\n\n clone(): LinearScale {\n return new LinearScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n\n tickFormat() {\n // TODO\n return () => {\n // TODO\n };\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.calculateVisibleDomain(this._range);\n return d3Ticks(d[0], d[d.length - 1], count, options);\n }\n\n /**\n * the kind of algorithms will generate ticks that is smaller than the min or greater than the max\n * if we don't update niceDomain, the ticks will exceed the domain\n */\n ticks(\n count: number = 10,\n options?: { noDecimals?: boolean; customTicks?: CustomTicksFunc }\n ): number[] {\n if (isFunction(options?.customTicks)) {\n return options.customTicks(this, count);\n }\n if (\n (isValid(this._rangeFactorStart) &&\n isValid(this._rangeFactorEnd) &&\n (this._rangeFactorStart > 0 || this._rangeFactorEnd < 1) &&\n this._range.length === 2) ||\n !this._niceType\n ) {\n return this.d3Ticks(count, options);\n }\n const curNiceDomain = this._niceDomain ?? this._domain;\n const originalDomain = this._domain;\n const start = curNiceDomain[0];\n const stop = curNiceDomain[curNiceDomain.length - 1];\n let ticksResult = ticks(originalDomain[0], originalDomain[originalDomain.length - 1], count, options);\n\n if (!ticksResult.length) {\n return ticksResult;\n }\n\n if (this._domainValidator) {\n ticksResult = ticksResult.filter(this._domainValidator);\n } else if ((ticksResult[0] !== start || ticksResult[ticksResult.length - 1] !== stop) && this._niceType) {\n const newNiceDomain = curNiceDomain.slice();\n\n if (this._niceType === 'all') {\n newNiceDomain[0] = ticksResult[0];\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'min' && ticksResult[0] !== start) {\n newNiceDomain[0] = ticksResult[0];\n this._niceDomain = newNiceDomain;\n this.rescale();\n } else if (this._niceType === 'max' && ticksResult[ticksResult.length - 1] !== stop) {\n newNiceDomain[newNiceDomain.length - 1] = ticksResult[ticksResult.length - 1];\n this._niceDomain = newNiceDomain;\n this.rescale();\n }\n\n if (this._niceType !== 'all') {\n const min = Math.min(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n const max = Math.max(newNiceDomain[0], newNiceDomain[newNiceDomain.length - 1]);\n\n ticksResult = ticksResult.filter((entry: number) => entry >= min && entry <= max);\n }\n }\n\n return ticksResult;\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicks(d[0], d[d.length - 1], count);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n\n return stepTicks(d[0], d[d.length - 1], step);\n }\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n this._niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n this.rescale();\n\n return this;\n }\n } else {\n this._niceType = 'all';\n }\n\n if (this._niceType) {\n const niceDomain = niceLinear(originalDomain.slice(), count);\n\n if (this._niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (this._niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain;\n this.rescale();\n }\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n */\n niceMin(count: number = 10): this {\n this._niceType = 'min';\n\n const maxD = this._domain[this._domain.length - 1];\n const niceDomain = niceLinear(this.domain(), count);\n\n if (niceDomain) {\n niceDomain[niceDomain.length - 1] = maxD;\n\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n * @param count\n * @returns\n */\n niceMax(count: number = 10): this {\n this._niceType = 'max';\n const minD = this._domain[0];\n const niceDomain = niceLinear(this._domain.slice(), count);\n\n if (niceDomain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n\n this.rescale();\n }\n\n return this;\n }\n}\n","import { ScaleEnum } from './type';\nimport type { DiscreteScaleType, IOrdinalScale } from './interface';\nimport { BaseScale } from './base-scale';\nimport { isValid } from '@visactor/vutils';\n\nexport const implicit = Symbol('implicit');\n\nexport class OrdinalScale extends BaseScale implements IOrdinalScale {\n readonly type: DiscreteScaleType = ScaleEnum.Ordinal;\n protected _index: Map;\n protected _domain: Array;\n protected _ordinalRange: Array;\n /** specified: support scale to return specific value on special input value */\n protected _specified: Record;\n specified(): Record;\n specified(_: Record): this;\n specified(_?: Record): this | Record {\n if (!_) {\n return Object.assign({}, this._specified);\n }\n this._specified = Object.assign(this._specified ?? {}, _);\n return this;\n }\n\n protected _getSpecifiedValue(input: string): undefined | any {\n if (!this._specified) {\n return undefined;\n }\n return this._specified[input];\n }\n\n constructor() {\n super();\n this._index = new Map();\n this._domain = [];\n this._ordinalRange = [];\n this._unknown = implicit;\n }\n\n // TODO checkPoint\n clone(): IOrdinalScale {\n const s = new OrdinalScale().domain(this._domain).range(this._ordinalRange).unknown(this._unknown);\n // _specified 为空时,不会返回this\n this._specified && s.specified(this._specified);\n return s;\n }\n\n calculateVisibleDomain(range: any[]) {\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const d0 = this.invert(range[0]);\n const d1 = this.invert(range[1]);\n\n return [d0, d1];\n }\n\n return this._domain;\n }\n\n scale(d: any): any {\n const key = `${d}`;\n const special = this._getSpecifiedValue(key);\n if (special !== undefined) {\n return special;\n }\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) {\n return this._unknown;\n }\n // TODO checkPoint\n i = this._domain.push(d);\n this._index.set(key, i);\n }\n const output = this._ordinalRange[(i - 1) % this._ordinalRange.length];\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n // d3-scale里没有对ordinal-scale添加invert能力,这里只做简单的映射\n invert(d: any): any {\n // 找到index\n let i = 0;\n while (i < this._ordinalRange.length && this._ordinalRange[i] !== d) {\n i++;\n }\n return this._domain[(i - 1) % this._domain.length];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = [];\n this._index = new Map();\n for (const value of _) {\n const key = `${value}`;\n if (this._index.has(key)) {\n continue;\n }\n this._index.set(key, this._domain.push(value));\n }\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._ordinalRange.slice();\n }\n const nextRange = Array.from(_);\n\n this._ordinalRange = nextRange;\n return this;\n }\n\n index(x: any): number {\n if (!this._index) {\n return -1;\n }\n return this._index.get(`${x}`) ?? -1;\n }\n}\n","import { clamper } from '@visactor/vutils';\n\nfunction generateTicks(start: number, stop: number, step: number, reverse: boolean) {\n const ticks: number[] = [];\n let ptr = start;\n while (ptr <= stop) {\n ticks.push(ptr);\n ptr += step;\n }\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n}\n\n/**\n * 根据start、stop、count进行分割,不要求count完全准确,但是保证均匀,输出为整数数组\n * @param start\n * @param stop\n * @param count\n * @param allowExcessive 如果为true,实际输出的tick数 >= count,否则实际输出的tick数 <= count\n * @returns\n */\nexport function ticks(start: number, stop: number, count: number, allowExcessive?: boolean) {\n let reverse: boolean;\n let step: number;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n count = Math.floor(+count);\n if (!count) {\n return [];\n }\n if (start === stop) {\n return [start];\n }\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n\n let expectedCount = clamper(1, stop - start + 1)(count);\n step = Math.floor((stop - start + 1) / expectedCount);\n if (!allowExcessive) {\n while (\n Math.ceil((stop - start + 1) / step) > count && // 估算实际的tick数量,根据数量调整step\n expectedCount > 1\n ) {\n expectedCount -= 1;\n step = Math.floor((stop - start) / expectedCount);\n }\n }\n\n return generateTicks(start, stop, step, reverse);\n}\n\n/**\n * 给定step的ticks分割\n * @param start\n * @param stop\n * @param step\n * @returns\n */\nexport function stepTicks(start: number, stop: number, step: number) {\n let reverse: boolean;\n\n stop = Math.floor(+stop);\n start = Math.floor(+start);\n step = clamper(1, stop - start + 1)(Math.floor(+step));\n if ((reverse = stop < start)) {\n const n = start;\n start = stop;\n stop = n;\n }\n return generateTicks(start, stop, step, reverse);\n}\n","import { toNumber, isGreater, isLess, isNumber, isValid, isNil } from '@visactor/vutils';\nimport { OrdinalScale, implicit } from './ordinal-scale';\nimport {\n bandSpace,\n calculateBandwidthFromWholeRangeSize,\n calculateWholeRangeFromRangeFactor,\n scaleWholeRangeSize\n} from './utils/utils';\nimport { ScaleEnum } from './type';\nimport { stepTicks, ticks } from './utils/tick-sample-int';\nimport type { DiscreteScaleType, IBandLikeScale, ScaleFishEyeOptions, TickData } from './interface';\n\n// band scale 各参数参考图示 https://raw.githubusercontent.com/d3/d3-scale/master/img/band.png\nexport class BandScale extends OrdinalScale implements IBandLikeScale {\n readonly type: DiscreteScaleType = ScaleEnum.Band;\n protected _step?: number;\n protected _bandwidth?: number;\n /** 是否固定了 bandwidth */\n protected _isFixed?: boolean;\n /** 用户配置的 bandwidth */\n protected _userBandwidth?: number | 'auto';\n protected _maxBandwidth?: number;\n protected _minBandwidth?: number;\n protected _round: boolean;\n protected _paddingInner: number;\n protected _paddingOuter: number;\n protected _align: number;\n protected _range: Array;\n protected _bandRangeState?: { reverse: boolean; start: number; count: number };\n\n constructor(slience?: boolean) {\n super();\n this._range = [0, 1];\n this._step = undefined;\n this._bandwidth = undefined;\n this._isFixed = false;\n this._round = false;\n this._paddingInner = 0;\n this._paddingOuter = 0;\n this._align = 0.5;\n this._unknown = undefined;\n delete this.unknown;\n\n this.rescale(slience);\n }\n\n rescale(slience?: boolean, changeProperty?: keyof IBandLikeScale): this {\n if (slience) {\n return this;\n }\n this._wholeRange = null;\n const wholeRange = this._calculateWholeRange(this._range, changeProperty);\n const n = super.domain().length;\n const reverse = wholeRange[1] < wholeRange[0];\n let start = wholeRange[Number(reverse) - 0];\n const stop = wholeRange[1 - Number(reverse)];\n const space = bandSpace(n, this._paddingInner, this._paddingOuter);\n\n this._step = (stop - start) / Math.max(1, space || 1);\n if (this._round) {\n this._step = Math.floor(this._step);\n }\n start += (stop - start - this._step * (n - this._paddingInner)) * this._align;\n if (!this.isBandwidthFixed()) {\n this._bandwidth = this._step * (1 - this._paddingInner);\n }\n if (this._round) {\n start = Math.round(start);\n if (!this.isBandwidthFixed()) {\n this._bandwidth = Math.round(this._bandwidth);\n }\n }\n\n this._bandRangeState = {\n reverse,\n start: reverse ? start + this._step * (n - 1) : start,\n count: n\n };\n\n this.generateFishEyeTransform();\n\n return this;\n }\n\n scale(d: any): any {\n if (!this._bandRangeState) {\n return undefined;\n }\n const key = `${d}`;\n const special = this._getSpecifiedValue(key);\n if (special !== undefined) {\n return special;\n }\n let i = this._index.get(key);\n if (!i) {\n if (this._unknown !== implicit) {\n return this._unknown;\n }\n // TODO checkPoint\n i = this._domain.push(d);\n this._index.set(key, i);\n }\n const { count, start, reverse } = this._bandRangeState;\n const stepIndex = (i - 1) % count;\n\n const output = start + (reverse ? -1 : 1) * stepIndex * this._step;\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n /**\n * 根据可见 range 计算 scale 的整体 range\n * @param range 可见 range\n * @returns\n */\n protected _calculateWholeRange(range: any[], changeProperty?: keyof IBandLikeScale) {\n if (this._wholeRange) {\n return this._wholeRange;\n }\n\n if ((this._minBandwidth || this._maxBandwidth) && !this._isBandwidthFixedByUser()) {\n let wholeSize: number;\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && range.length === 2) {\n const wholeRange = calculateWholeRangeFromRangeFactor(range, [this._rangeFactorStart, this._rangeFactorEnd]);\n wholeSize = Math.abs(wholeRange[1] - wholeRange[0]);\n } else {\n wholeSize = Math.abs(range[1] - range[0]);\n }\n const autoBandwidth = calculateBandwidthFromWholeRangeSize(\n super.domain().length,\n wholeSize,\n this._paddingInner,\n this._paddingOuter,\n this._round\n );\n if (autoBandwidth < this._minBandwidth) {\n this._bandwidth = this._minBandwidth;\n this._isFixed = true;\n } else if (autoBandwidth > this._maxBandwidth) {\n this._bandwidth = this._maxBandwidth;\n this._isFixed = true;\n } else {\n this._bandwidth = autoBandwidth;\n this._isFixed = false;\n }\n }\n\n if (this.isBandwidthFixed()) {\n const wholeLength =\n scaleWholeRangeSize(super.domain().length, this._bandwidth, this._paddingInner, this._paddingOuter) *\n Math.sign(range[1] - range[0]);\n const rangeFactorSize = Math.min((range[1] - range[0]) / wholeLength, 1);\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd)) {\n const canAlignStart = this._rangeFactorStart + rangeFactorSize <= 1;\n const canAlignEnd = this._rangeFactorEnd - rangeFactorSize >= 0;\n\n if (changeProperty === 'rangeFactorStart' && canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else if (changeProperty === 'rangeFactorEnd' && canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else {\n // 判断 scale 方向来决定边界检测顺序\n if (range[0] <= range[1]) {\n if (canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else if (canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else {\n this._rangeFactorStart = 0;\n this._rangeFactorEnd = rangeFactorSize;\n }\n } else {\n if (canAlignEnd) {\n this._rangeFactorStart = this._rangeFactorEnd - rangeFactorSize;\n } else if (canAlignStart) {\n this._rangeFactorEnd = this._rangeFactorStart + rangeFactorSize;\n } else {\n this._rangeFactorStart = 1 - rangeFactorSize;\n this._rangeFactorEnd = 1;\n }\n }\n }\n\n if (wholeLength > 0) {\n const r0 = range[0] - wholeLength * this._rangeFactorStart;\n const r1 = r0 + wholeLength;\n this._wholeRange = [r0, r1];\n } else {\n const r1 = range[1] + wholeLength * (1 - this._rangeFactorEnd);\n const r0 = r1 - wholeLength;\n this._wholeRange = [r0, r1];\n }\n } else {\n this._rangeFactorStart = 0;\n this._rangeFactorEnd = rangeFactorSize;\n this._wholeRange = [range[0], range[0] + wholeLength];\n }\n\n return this._wholeRange;\n }\n\n return super._calculateWholeRange(range);\n }\n\n calculateWholeRangeSize() {\n const wholeRange = this._calculateWholeRange(this._range);\n return Math.abs(wholeRange[1] - wholeRange[0]);\n }\n\n calculateVisibleDomain(range: any[]) {\n const domain = this._domain;\n\n if (isValid(this._rangeFactorStart) && isValid(this._rangeFactorEnd) && domain.length) {\n const d0 = this._getInvertIndex(range[0]);\n const d1 = this._getInvertIndex(range[1]);\n\n return domain.slice(Math.min(d0, d1), Math.max(d0, d1) + 1);\n }\n\n return domain;\n }\n\n domain(): any[];\n domain(_: any[], slience?: boolean): this;\n domain(_?: any[], slience?: boolean): this | any[] {\n if (_) {\n super.domain(_);\n\n return this.rescale(slience);\n }\n return super.domain();\n }\n\n range(): any[];\n range(_: any[], slience?: boolean): this;\n range(_?: any[], slience?: boolean): this | any[] {\n if (_) {\n this._range = [toNumber(_[0]), toNumber(_[1])];\n return this.rescale(slience);\n }\n return this._range;\n }\n\n rangeRound(_: any[], slience?: boolean): this {\n this._range = [toNumber(_[0]), toNumber(_[1])];\n this._round = true;\n return this.rescale(slience);\n }\n\n ticks(count: number = 10) {\n const d = this.calculateVisibleDomain(this._range);\n\n if (count === -1) {\n // return domain as ticks when count is -1\n return d;\n }\n\n const tickIndexList = ticks(0, d.length - 1, count, false);\n return tickIndexList.map(i => d[i]);\n }\n\n tickData(count: number = 10): TickData[] {\n const ticks = this.ticks(count);\n return ticks.map((tick, index) => {\n const scaledValue = this.scale(tick);\n return {\n index,\n tick,\n value: (scaledValue - this._range[0] + this._bandwidth / 2) / (this._range[1] - this._range[0])\n };\n });\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n const tickIndexList = ticks(0, d.length - 1, count, true);\n return tickIndexList\n .filter(i => i < d.length) // 截断不存在的index\n .map(i => d[i]);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n const tickIndexList = stepTicks(0, d.length - 1, step);\n return tickIndexList.map(i => d[i]);\n }\n\n protected _getInvertIndex(d: any): any {\n // 找到index\n let i = 0;\n const halfStep = this.step() / 2;\n const halfBandwidth = this.bandwidth() / 2;\n const len = this._domain.length;\n const range = this.range();\n const start = range[0];\n const stop = range[range.length - 1];\n const reverse = start > stop;\n\n for (i = 0; i < len; i++) {\n const r = this.scale(this._domain[i]) + halfBandwidth;\n\n if (i === 0 && ((!reverse && !isGreater(d, r + halfStep)) || (reverse && !isLess(d, r - halfStep)))) {\n break;\n }\n\n if (i === len - 1) {\n break;\n }\n\n if (!isLess(d, r - halfStep) && !isGreater(d, r + halfStep)) {\n break;\n }\n }\n\n if (i >= 0 && i <= len - 1) {\n return i;\n }\n\n return len - 1;\n }\n\n invert(d: any): any {\n return this._domain[this._getInvertIndex(d)];\n }\n\n padding(p: number | number[], slience?: boolean): this;\n padding(): number;\n padding(p?: number | [number, number], slience?: boolean): this | number {\n if (p !== undefined) {\n this._paddingOuter = Math.max(0, Math.min(Array.isArray(p) ? Math.min.apply(null, p) : p));\n this._paddingInner = this._paddingOuter;\n return this.rescale(slience);\n }\n return this._paddingInner;\n }\n\n paddingInner(p: number, slience?: boolean): this;\n paddingInner(): number;\n paddingInner(_?: number, slience?: boolean) {\n if (_ !== undefined) {\n this._paddingInner = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._paddingInner;\n }\n\n paddingOuter(p: number, slience?: boolean): this;\n paddingOuter(): number;\n paddingOuter(_?: number, slience?: boolean) {\n if (_ !== undefined) {\n this._paddingOuter = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._paddingOuter;\n }\n\n step(): number {\n return this._step;\n }\n\n round(_: boolean, slience?: boolean): this;\n round(): boolean;\n round(_?: boolean, slience?: boolean): this | boolean {\n if (_ !== undefined) {\n this._round = _;\n return this.rescale(slience);\n }\n return this._round;\n }\n\n align(_: number, slience?: boolean): this;\n align(): number;\n align(_?: number, slience?: boolean): this | number {\n if (_ !== undefined) {\n this._align = Math.max(0, Math.min(1, _));\n return this.rescale(slience);\n }\n return this._align;\n }\n\n rangeFactor(): [number, number];\n rangeFactor(_: [number, number], slience?: boolean): this;\n rangeFactor(_?: [number, number], slience?: boolean): this | any[] {\n if (!_) {\n return super.rangeFactor();\n }\n super.rangeFactor(_);\n return this.rescale(slience);\n }\n\n rangeFactorStart(): number;\n rangeFactorStart(_: number, slience?: boolean): this;\n rangeFactorStart(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorStart();\n }\n super.rangeFactorStart(_);\n return this.rescale(slience, 'rangeFactorStart');\n }\n\n rangeFactorEnd(): number;\n rangeFactorEnd(_: number, slience?: boolean): this;\n rangeFactorEnd(_?: number, slience?: boolean): this | any {\n if (isNil(_)) {\n return super.rangeFactorEnd();\n }\n super.rangeFactorEnd(_);\n return this.rescale(slience, 'rangeFactorEnd');\n }\n\n bandwidth(): number;\n bandwidth(_: number | 'auto', slience?: boolean): this;\n bandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._bandwidth;\n }\n if (_ === 'auto') {\n this._bandwidth = undefined;\n this._isFixed = false;\n } else {\n this._bandwidth = _;\n this._isFixed = true;\n }\n this._userBandwidth = _;\n return this.rescale(slience);\n }\n\n maxBandwidth(): number;\n maxBandwidth(_: number | 'auto', slience?: boolean): this;\n maxBandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._maxBandwidth;\n }\n if (_ === 'auto') {\n this._maxBandwidth = undefined;\n } else {\n this._maxBandwidth = _;\n }\n return this.rescale(slience);\n }\n\n minBandwidth(): number;\n minBandwidth(_: number | 'auto', slience?: boolean): this;\n minBandwidth(_?: number | 'auto', slience?: boolean): this | number {\n if (!_) {\n return this._minBandwidth;\n }\n if (_ === 'auto') {\n this._minBandwidth = undefined;\n } else {\n this._minBandwidth = _;\n }\n return this.rescale(slience);\n }\n\n fishEye(): ScaleFishEyeOptions;\n fishEye(options: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this;\n fishEye(options?: ScaleFishEyeOptions, slience?: boolean, clear?: boolean): this | ScaleFishEyeOptions {\n if (options || clear) {\n this._fishEyeOptions = options;\n this._fishEyeTransform = null;\n\n return this.rescale(slience);\n }\n\n return this._fishEyeOptions;\n }\n\n isBandwidthFixed() {\n return this._isFixed && !!this._bandwidth;\n }\n\n protected _isBandwidthFixedByUser() {\n return this._isFixed && this._userBandwidth && isNumber(this._userBandwidth);\n }\n\n clone(): IBandLikeScale {\n const bandScale = new BandScale(true)\n .domain(this._domain, true)\n .range(this._range, true)\n .round(this._round, true)\n .paddingInner(this._paddingInner, true)\n .paddingOuter(this._paddingOuter, true)\n .align(this._align, true)\n .bandwidth(this._userBandwidth ?? 'auto', true)\n .maxBandwidth(this._maxBandwidth ?? 'auto', true)\n .minBandwidth(this._maxBandwidth ?? 'auto');\n return bandScale;\n }\n}\n","import { ScaleEnum } from './type';\nimport { BandScale } from './band-scale';\nimport type { DiscreteScaleType, IBandLikeScale } from './interface';\n\nexport class PointScale extends BandScale implements IBandLikeScale {\n readonly type: DiscreteScaleType = ScaleEnum.Point;\n protected _padding = 0;\n\n constructor(slience?: boolean) {\n super(false);\n this.paddingInner(1, slience);\n this.padding = this.paddingOuter;\n this.paddingInner = undefined;\n this.paddingOuter = undefined;\n }\n}\n","import { isNil, isValidNumber, bisect } from '@visactor/vutils';\nimport type { DiscretizingScaleType, IBaseScale } from './interface';\nimport { ScaleEnum } from './type';\n\nexport class ThresholdScale implements IBaseScale {\n readonly type: DiscretizingScaleType = ScaleEnum.Threshold;\n\n protected _range: any[] = [0, 1];\n protected _domain: number[] = [0.5];\n protected n: number = 1;\n\n protected _unknown: any;\n\n unknown(): any[];\n unknown(_: any): this;\n unknown(_?: any): this | any {\n if (!arguments.length) {\n return this._unknown;\n }\n this._unknown = _;\n return this;\n }\n\n scale(x: any) {\n return !isNil(x) && isValidNumber(+x) ? this._range[bisect(this._domain, x, 0, this.n)] : this._unknown;\n }\n\n invertExtent(y: any) {\n const i = this._range.indexOf(y);\n return [this._domain[i - 1], this._domain[i]];\n }\n\n domain(): any[];\n domain(_: any[]): this;\n domain(_?: any[]): this | any {\n if (!_) {\n return this._domain.slice();\n }\n this._domain = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n return this;\n }\n\n range(): any[];\n range(_: any[]): this;\n range(_?: any[]): this | any {\n if (!_) {\n return this._range.slice();\n }\n this._range = Array.from(_);\n this.n = Math.min(this._domain.length, this._range.length - 1);\n\n return this;\n }\n\n clone(): ThresholdScale {\n return new ThresholdScale().domain(this._domain).range(this._range).unknown(this._unknown);\n }\n}\n","import { OrdinalScale } from '@visactor/vscale';\nimport type { ColorSchemeItem, ProgressiveDataScheme } from '../theme/color-scheme/interface';\nimport { computeActualDataScheme, isProgressiveDataColorScheme } from '../theme/color-scheme/util';\n\n/** vchart 色板 ordinal scale 类型 */\nexport class ColorOrdinalScale extends OrdinalScale {\n /** range(可能为渐进式色板) */\n protected _range: Array | ProgressiveDataScheme;\n\n range(value?: Array | ProgressiveDataScheme): this | any {\n if (!value) {\n return super.range();\n }\n this._range = value;\n this._resetRange();\n return this;\n }\n\n /** domain */\n domain(value?: any[]): this | any {\n if (!value) {\n return super.domain();\n }\n super.domain(value);\n this._resetRange();\n return this;\n }\n\n /** 重新计算色板 */\n protected _resetRange() {\n if (!isProgressiveDataColorScheme(this._range)) {\n super.range(this._range);\n return;\n }\n const range = computeActualDataScheme(this._range, this._domain);\n super.range(range);\n }\n}\n","/**\n * @description Scale 相关的工具函数\n */\nimport { isString, isValid } from '@visactor/vutils';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { BandScale, LinearScale, OrdinalScale, PointScale, ThresholdScale } from '@visactor/vscale';\nimport type { IVisual, IVisualSpecBase } from '../typings/visual';\nimport { ColorOrdinalScale } from '../scale/color-ordinal-scale';\n\nconst defaultScaleMap = {\n linear: LinearScale,\n band: BandScale,\n point: PointScale,\n ordinal: OrdinalScale,\n threshold: ThresholdScale,\n colorOrdinal: ColorOrdinalScale\n};\n\nexport function createScale(type: keyof typeof defaultScaleMap): IBaseScale | null {\n const scaleConstructor = defaultScaleMap[type];\n if (scaleConstructor) {\n return new scaleConstructor();\n }\n\n return null;\n}\n\nexport function createScaleWithSpec(\n spec: IVisual,\n context: {\n globalScale: IGlobalScale;\n seriesId: number;\n }\n): IBaseScale | null {\n if ('scale' in spec && spec.scale) {\n if (isString(spec.scale) && context?.globalScale) {\n return context.globalScale.registerMarkAttributeScale(spec, context.seriesId);\n }\n return spec.scale as unknown as IBaseScale;\n }\n const scale = createScale((spec as IVisualSpecBase).type);\n if (scale) {\n initScaleWithSpec(scale, spec as IVisualSpecBase);\n }\n return scale;\n}\n\n// 需要一个通用的从spec初始化scale的方法,避免在scale属性更新后需要维护多组逻辑\nfunction initScaleWithSpec(scale: IBaseScale, spec: IVisualSpecBase) {\n if (!scale || !spec) {\n return;\n }\n\n if (spec.domain) {\n scale.domain(spec.domain);\n }\n\n if (spec.range) {\n scale.range(spec.range);\n }\n\n if (spec.specified && (scale).specified) {\n (scale).specified(spec.specified);\n }\n}\n\n/**\n * value限制在scale range内\n * 对于指标轴: 限制在scale可视范围(scale.range)内, 通常发生在自定义domain的场景中, 防止图元绘制超出画布\n * 对于维度轴: 限制在scale数据范围(scale.wholeRange)内, 通常发生在缩略轴等组件扩大scale区域的场景中, 允许图元超出画布\n * 已知图表范围: 柱状图、条形进度图\n */\nexport function valueInScaleRange(v: number, s?: IBaseScale, useWholeRange?: boolean) {\n if (!s) {\n return v;\n }\n const scaleRange = s.range();\n const range =\n useWholeRange && (s as any)._calculateWholeRange ? (s as any)._calculateWholeRange(scaleRange) : s.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const max = Math.max(range[0], range[range.length - 1]);\n return Math.min(Math.max(min, v), max);\n}\n\nexport function isSpecValueWithScale(specValue: any) {\n return isValid(specValue?.field) && isValid(specValue?.scale);\n}\n","export const GradientType = ['linear', 'radial', 'conical'];\n\nexport const DEFAULT_LINEAR_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1\n};\n\nexport const DEFAULT_RADIAL_GRADIENT_CONFIG = {\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1,\n r0: 0,\n r1: 1\n};\n\nexport const DEFAULT_CONICAL_GRADIENT_CONFIG = {\n x: 0.5,\n y: 0.5,\n startAngle: 0,\n endAngle: Math.PI * 2\n};\n\nexport const DEFAULT_GRADIENT_CONFIG = {\n linear: DEFAULT_LINEAR_GRADIENT_CONFIG,\n radial: DEFAULT_RADIAL_GRADIENT_CONFIG,\n conical: DEFAULT_CONICAL_GRADIENT_CONFIG\n};\n","import { MarkTypeEnum } from '../interface/type';\nimport { Direction } from '../../typings';\n\nexport const MultiDatumMark = [MarkTypeEnum.line, MarkTypeEnum.area, 'trail'];\n\nexport function isMultiDatumMark(type: MarkTypeEnum) {\n return MultiDatumMark.includes(type);\n}\n\nexport function curveTypeTransform(type: string, direction: string) {\n if (type === 'monotone') {\n return direction === Direction.horizontal ? 'monotoneY' : 'monotoneX';\n }\n return type;\n}\n\nexport function is3DMark(type: MarkTypeEnum) {\n return [MarkTypeEnum.arc3d, MarkTypeEnum.rect3d, MarkTypeEnum.pyramid3d].includes(type);\n}\n","import type { IElement, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\nimport { isContinuous } from '@visactor/vscale';\nimport { isArray, isObject, isValid, isBoolean } from '@visactor/vutils';\nimport { PREFIX } from '../../constant/base';\nimport type { MarkTypeEnum } from '../../mark/interface';\nimport { isMultiDatumMark } from '../../mark/utils/common';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport type { IStateManagerOption } from '../signal/interface';\nimport { StateManager } from '../signal/state-manager';\nimport type { CompilableMark } from './compilable-mark';\nimport type { IMarkStateManager, IStateInfo, StateValue } from './interface';\nimport { stateInDefaultEnum } from './util';\n\n/** mark state 管理器 */\nexport class MarkStateManager extends StateManager implements IMarkStateManager {\n /** 相关 mark */\n protected _mark: CompilableMark;\n\n // state info:state 种类信息\n private _stateInfoList: IStateInfo[] = [];\n getStateInfoList() {\n return this._stateInfoList;\n }\n\n constructor(option: IStateManagerOption, mark: CompilableMark) {\n super(option);\n this._mark = mark;\n }\n\n protected _getDefaultStateMap(): Record {\n return {\n markUpdateRank: 1\n };\n }\n\n // /** 触发状态更新 */\n // update() {\n // if (this._mark.hasState('stateUpdateRank')) {\n // const rank = this._mark.getState('stateUpdateRank');\n // this._mark.updateState({ stateUpdateRank: rank + 1 });\n // }\n // }\n\n /** 通过 state value 获取 state 信息 */\n getStateInfo(stateValue: StateValue) {\n return this._stateInfoList.find(s => s.stateValue === stateValue);\n }\n\n /** 添加 state info */\n addStateInfo(stateInfo: IStateInfo) {\n if (this.getStateInfo(stateInfo.stateValue)) {\n return;\n }\n stateInfo.level = stateInfo.level || 0;\n\n let needPush = true;\n // 根据 level 大小进行插入,level 最大的插在最后面\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const level = this._stateInfoList[i].level;\n if (level && level > stateInfo.level) {\n this._stateInfoList.splice(i, 0, stateInfo);\n needPush = false;\n break;\n }\n }\n\n if (needPush) {\n this._stateInfoList.push(stateInfo);\n }\n }\n\n /** 设置新状态时,将旧的筛选清除,避免同时存在2种筛选,第二种筛选会不触发 */\n private _clearStateBeforeSet(state: IStateInfo) {\n state.datums = null;\n state.items = null;\n state.fields = null;\n state.filter = null;\n }\n\n /** 更新 state info */\n changeStateInfo(stateInfo: Partial) {\n const s = this.getStateInfo(stateInfo.stateValue);\n if (!s) {\n this.addStateInfo(stateInfo as IStateInfo);\n } else {\n if (stateInfo.datums !== undefined) {\n this._clearStateBeforeSet(s);\n s.datums = stateInfo.datums;\n s.datumKeys = stateInfo.datumKeys;\n }\n if (stateInfo.items !== undefined) {\n this._clearStateBeforeSet(s);\n s.items = stateInfo.items;\n }\n if (stateInfo.fields !== undefined) {\n this._clearStateBeforeSet(s);\n // null\n if (stateInfo.fields === null) {\n s.fields = stateInfo.fields;\n } else {\n s.fields = s.fields || {};\n for (const key in stateInfo.fields) {\n const new_f = stateInfo.fields[key];\n s.fields[key] = s.fields[key] || ({} as any);\n const old_f = s.fields[key];\n isValid(new_f.domain) && (old_f.domain = new_f.domain);\n isValid(new_f.type) && (old_f.type = new_f.type);\n }\n }\n }\n if (stateInfo.filter) {\n this._clearStateBeforeSet(s);\n s.filter = stateInfo.filter;\n }\n }\n }\n\n /** 清除 state info */\n clearStateInfo(stateValues: StateValue[]) {\n stateValues.forEach(stateValue => {\n const state = this.getStateInfo(stateValue);\n if (state) {\n this.changeStateInfo({\n stateValue,\n datumKeys: null,\n datums: null,\n fields: null,\n items: null,\n filter: null,\n cache: {}\n });\n }\n });\n }\n\n checkOneState(\n renderNode: IElement,\n datum: Datum | Datum[],\n state: IStateInfo,\n isMultiMark?: boolean\n ): 'in' | 'out' | 'skip' {\n isMultiMark = isBoolean(isMultiDatumMark)\n ? isMultiMark\n : !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n let inState = false;\n let stateChecked = false;\n // 如果有 state.datum 那么判断是否与datum的所有值相等\n if (isValid(state.datums) && state.datums.length > 0) {\n inState = this.checkDatumState(state, datum, isMultiMark);\n stateChecked = true;\n }\n // 依靠 scenegraph item 引用判断是否在状态中\n else if (state.items) {\n // TODO:确认这个逻辑里为什么有mark比较\n // if (state.marks && !state.marks.includes(renderNode.mark)) {\n // continue;\n // }\n inState = this.checkItemsState(state, renderNode) ?? false;\n stateChecked = true;\n }\n // 每个状态依靠 fields 来判定数据是否在当前状态中\n else if (state.fields) {\n inState = this.checkFieldsState(state, datum, renderNode, isMultiMark);\n stateChecked = true;\n } else if (!inState && state.filter) {\n const options = {\n mark: this._mark,\n renderNode,\n type: renderNode.mark.markType\n };\n inState = state.filter(datum, options);\n stateChecked = true;\n }\n\n // 如果 state 所有字段都为空,此时不应当进入反状态\n if (!stateChecked) {\n return 'skip';\n }\n return inState ? 'in' : 'out';\n }\n\n // TODO:renderNode\n checkState(renderNode: IElement, datum: Datum | Datum[]): StateValue[] {\n // 由于存在多个 stateManager,需要额外返回 state 的优先级\n // 交互状态不要删除,并且交互状态优先级统一为10\n const result: [StateValue, number][] = renderNode\n .getStates()\n .filter(s => stateInDefaultEnum(s))\n .map(s => {\n return [s, 10];\n });\n const isMultiMark = !renderNode.mark || isMultiDatumMark(renderNode.mark.markType as MarkTypeEnum);\n // 优先级从高到低依次检索状态。\n for (let i = 0; i < this._stateInfoList.length; i++) {\n const state = this._stateInfoList[i];\n const inOut = this.checkOneState(renderNode, datum, state, isMultiMark);\n if (inOut === 'skip') {\n continue;\n }\n if (inOut === 'in') {\n result.push([state.stateValue, state.level]);\n }\n }\n // 这里直接返回字符串数组即可\n return result.map(res => res[0]);\n }\n\n checkDatumState(state: IStateInfo, datum: Datum | Datum[], isMultiMark: boolean): boolean {\n let inState = false;\n const datum_v = isMultiMark ? datum[0] : datum;\n if (isArray(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums[0]).filter(k => !k.startsWith(PREFIX));\n inState = state.datums.some(d => {\n // 如果 多数据图元情况下 datums 设置为 单一数据,状态判定失败\n // 这里要考虑 state.datum 本身是一条数据,不含item的情况能与单数据图元统一\n return isMultiMark && isArray(d?.items)\n ? keys.every(k => d?.items?.[0]?.[k] === datum_v?.[k])\n : keys.every(k => d?.[k] === datum_v?.[k]);\n });\n } else if (isObject(state.datums)) {\n const keys = state.datumKeys || Object.keys(state.datums).filter(k => !k.startsWith(PREFIX));\n inState = keys.every(k => {\n return isMultiMark ? (state.datums as any).items?.[0][k] === datum_v[k] : state.datums?.[k] === datum_v[k];\n });\n } else {\n inState = datum === state.datums;\n }\n return inState;\n }\n\n checkItemsState(state: IStateInfo, item: any): boolean | undefined {\n return state.items?.includes(item);\n }\n\n checkFieldsState(state: IStateInfo, datum: Datum | Datum[], item: any, isMultiMark: boolean): boolean {\n let inState = true;\n // each fields\n for (const key in state.fields) {\n const field = state.fields[key];\n const type = field.type;\n const domain = field.domain;\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n if (isContinuous(type) && domain.length > 1) {\n // 连续\n if (this.checkLinearFieldState(domain, key, datum, item, isMultiMark)) {\n inState = false;\n break;\n } else {\n inState = true;\n }\n } else if (domain.some((d: any) => d === datum_v)) {\n // 离散\n inState = true;\n } else {\n inState = false;\n break;\n }\n }\n return inState;\n }\n\n checkLinearFieldState(domain: StringOrNumber[], key: string, datum: any, item: any, isMultiMark: boolean) {\n const datum_v = isMultiMark ? datum[0]?.[key] : datum[key];\n return datum_v < domain[0] || datum_v > domain[domain.length - 1];\n }\n\n updateLayoutState(noRender?: boolean): void {\n (this._stateMap.markUpdateRank as number)++;\n return this.updateState({ markUpdateRank: this._stateMap.markUpdateRank }, noRender);\n }\n\n compileState(product: IVGrammarMark, stateSort?: (stateA: string, stateB: string) => number) {\n (product as any).state(\n {\n callback: (datum: any, element: any) => {\n return this.checkState(element, datum);\n }\n },\n stateSort\n );\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { IData as IVGrammarData } from '@visactor/vgrammar-core';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe } from '../../typings';\nimport { isNil } from '../../util/type';\nimport type { ICompilableData } from './interface';\nimport type { GrammarItemInitOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarType } from '../interface/compilable-item';\n\nexport class CompilableData extends GrammarItem implements ICompilableData {\n readonly grammarType = GrammarType.data;\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n /** 原始DataView */\n protected _data: Maybe = null;\n getDataView() {\n return this._data;\n }\n setDataView(d?: DataView) {\n this._data = d;\n }\n getLatestData() {\n return this._data?.latestData;\n }\n\n constructor(option: GrammarItemInitOption, dataView?: DataView) {\n super(option);\n this._data = dataView;\n }\n\n release() {\n super.release();\n this._data = null;\n }\n\n /** 更新数据并默认重新渲染 */\n updateData(noRender?: boolean) {\n const product = this.getProduct();\n const data = this.getLatestData();\n if (product && data) {\n product.values(data);\n if (!noRender) {\n // 将实际的 dataflow 推迟到下一次异步操作,以避免同步的数据更新内容被忽略\n return this.getCompiler().renderNextTick();\n }\n }\n return;\n }\n\n protected _compileProduct() {\n const data = this.getLatestData();\n if (isNil(data)) {\n return;\n }\n if (isNil(this.getProduct())) {\n this._initProduct(data);\n } else {\n this._product.values(data);\n }\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(data: any[]) {\n const view = this.getVGrammarView();\n if (!view || !data) {\n return;\n }\n\n const id = this.getProductId();\n this._product = view?.data?.(data)?.id(id);\n this._compiledProductId = id;\n }\n\n generateProductId(): string {\n return `${this.getDataView()?.name}`;\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getDataById?.(id);\n }\n}\n","import { CompilableData } from '../data/compilable-data';\nimport { PREFIX } from '../../constant/base';\nimport { isNil, isValid } from '@visactor/vutils';\nimport type { ICompilableMark, IMarkData, IMarkDataInitOption } from './interface';\n\nexport class MarkData extends CompilableData implements IMarkData {\n protected _mark: ICompilableMark;\n\n constructor(option: IMarkDataInitOption) {\n super(option);\n this._mark = option.mark;\n }\n\n setCompiledProductId(name: string) {\n this._compiledProductId = name;\n }\n\n generateProductId(): string {\n const name = super.generateProductId();\n if (isValid(name)) {\n return name;\n }\n return `${PREFIX}_markData_${this._mark.id}`;\n }\n\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n\n this._initProduct(data);\n }\n}\n","import type {\n IData,\n IElement,\n IGroupMark,\n IMark,\n IMarkConfig,\n MarkAnimationSpec,\n MarkFunctionCallback,\n MarkFunctionType,\n Nil,\n TransformSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport { GrammarItem } from '../grammar-item';\nimport type { Maybe, Datum, StringOrNumber } from '../../typings';\nimport { isNil, isValid } from '@visactor/vutils';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IMarkStateStyle, MarkType } from '../../mark/interface';\nimport type { IModel } from '../../model/interface';\nimport type { ISeries } from '../../series/interface';\nimport { isStateAttrChangeable } from './util';\nimport { MarkStateManager } from './mark-state-manager';\nimport type {\n ICompilableMark,\n IMarkDataInitOption,\n ICompilableMarkOption,\n StateValueType,\n IMarkCompileOption,\n IAttributeOpt,\n IMarkData\n} from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from './interface';\nimport { MarkData } from './mark-data';\nimport { GrammarType } from '../interface/compilable-item';\nimport type { IComponent } from '../../component/interface';\nimport type { IEvent } from '../../event/interface';\nimport { Event } from '../../event/event';\n// eslint-disable-next-line no-duplicate-imports\nimport { AnimationStateEnum } from '../../animation/interface';\n\n/** 可编译的 mark 对象,这个基类只存放编译相关的逻辑 */\nexport abstract class CompilableMark extends GrammarItem implements ICompilableMark {\n readonly grammarType = GrammarType.mark;\n /** 类型 */\n readonly type: MarkType = undefined as unknown as MarkType;\n\n /** name */\n readonly name: string = 'mark';\n\n /** key field */\n readonly key: ICompilableMark['key'];\n\n protected _markConfig: IMarkConfig = {\n zIndex: LayoutZIndex.Mark,\n /** morph动画关联关系配置 */\n morph: false\n };\n\n getMarkConfig(): IMarkConfig {\n return this._markConfig;\n }\n setMarkConfig(config: IMarkConfig) {\n Object.keys(config).forEach(key => {\n (this._markConfig as any)[key] = (config as any)[key];\n });\n }\n\n /** 可见性 */\n protected _visible: boolean = true;\n getVisible() {\n return this._visible;\n }\n setVisible(visible: boolean) {\n this._visible = visible;\n }\n\n /**\n * 用户设置的 id\n */\n protected _userId: StringOrNumber;\n getUserId() {\n return this._userId;\n }\n setUserId(userId: StringOrNumber) {\n if (isValid(userId)) {\n this._userId = userId;\n }\n }\n\n /** parent model */\n readonly model: IModel;\n\n /** 数据(可以没有) */\n protected _data: IMarkData;\n getDataView(): DataView | undefined {\n return this._data?.getDataView();\n }\n setDataView(d?: DataView, productId?: string) {\n if (isNil(this._data)) {\n this.initMarkData({\n ...this._option,\n mark: this\n });\n }\n if (isValid(productId)) {\n this._data.setCompiledProductId(productId);\n }\n this._data.setDataView(d);\n }\n getData() {\n return this._data;\n }\n setData(d?: IMarkData) {\n this._data = d;\n }\n\n /** 默认的stateStyle */\n stateStyle: IMarkStateStyle = {};\n\n /** 状态管理器 */\n state: MarkStateManager;\n\n protected _unCompileChannel: { [key in string]: boolean } = {};\n\n hasState(state: string) {\n return state in this.state.getStateMap();\n }\n getState(state: string) {\n return this.state.getStateMap()[state];\n }\n\n protected _event: IEvent;\n\n protected _animationConfig: Partial;\n getAnimationConfig() {\n return this._animationConfig;\n }\n setAnimationConfig(config: Partial) {\n this._animationConfig = config;\n }\n\n /** 布局标记 */\n private _skipBeforeLayouted = false;\n\n setSkipBeforeLayouted(skip: boolean) {\n this._skipBeforeLayouted = skip;\n }\n getSkipBeforeLayouted(): boolean {\n return this._skipBeforeLayouted;\n }\n\n protected _groupKey?: string;\n getGroupKey() {\n return this._groupKey;\n }\n setGroupKey(groupKey: string) {\n this._groupKey = groupKey;\n }\n\n protected _stateSort?: (stateA: string, stateB: string) => number;\n setStateSortCallback(stateSort: (stateA: string, stateB: string) => number) {\n this._stateSort = stateSort;\n }\n\n protected declare _option: ICompilableMarkOption;\n\n constructor(option: ICompilableMarkOption, name: string, model: IModel) {\n super(option);\n this.name = name;\n this.model = model;\n this.key = option.key;\n this.state = new MarkStateManager(\n {\n ...option,\n stateKeyToSignalName: this.stateKeyToSignalName.bind(this)\n },\n this\n );\n this._event = new Event(model.getOption().eventDispatcher, model.getOption().mode);\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n // transform目前在形状词云中使用,但直接用的 vgrammar 接口 (this._wordMark as ICompilableMark).getProduct().transform(wordCloudTransforms);\n // 暂时没有用到这里的setTransform()\n protected _transform: TransformSpec[] | Nil;\n setTransform(transform: TransformSpec[] | Nil) {\n this._transform = transform;\n }\n\n /** 初始化 mark data */\n protected initMarkData(option: IMarkDataInitOption) {\n this._data = new MarkData(option);\n }\n\n protected stateKeyToSignalName(key: string) {\n return `${PREFIX}_${this.type}_${this.id}_${key}`;\n }\n\n getAttribute(key: any, datum: any, state: StateValueType, opt?: IAttributeOpt) {\n // do nothing\n }\n\n protected _compileProduct(option?: IMarkCompileOption) {\n const product = this.getProduct();\n // 处理 visible 为 false 的情况\n if (!this.getVisible()) {\n if (isValid(product)) {\n this.removeProduct();\n }\n return;\n } else if (isValid(product)) {\n return; // 每个mark只执行一次编译\n }\n\n const compiler = this.getCompiler();\n if (!compiler.isInited) {\n return;\n }\n this._initProduct(option?.group);\n if (isNil(this._product)) {\n return;\n }\n\n this.compileSignal();\n this.compileData();\n this.compileState();\n this.compileEncode();\n this.compileAnimation();\n this.compileContext(option?.context);\n this.compileTransform();\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view.mark(this.type as GrammarMarkType, group ?? view.rootMark).id(id);\n if (this.name && this._product) {\n this._product.name(this.name);\n }\n this._compiledProductId = id;\n }\n\n generateProductId() {\n if (this._userId) {\n return `${this._userId}`;\n }\n return `${this.name}_${this.id}`;\n }\n\n compileData() {\n if (isNil(this._data)) {\n return;\n }\n this._data.compile();\n\n // 绑定数据\n const dataProduct = this._data.getProduct();\n if (isValid(this._product) && isValid(dataProduct)) {\n this._product.join(dataProduct as IData, this.key, undefined, this.getGroupKey());\n }\n }\n\n updateStaticEncode() {\n if (!this._product) {\n return;\n }\n const { enterStyles, updateStyles } = this._separateStyle();\n\n this._product.encodeState('group', enterStyles, true);\n\n this._product.encode(updateStyles, true);\n }\n\n protected _separateStyle() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n\n const enterStyles: Record> = this._option.noSeparateStyle ? null : {};\n const updateStyles: Record> = {};\n Object.keys(normalStyle).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this.getGroupKey())) {\n updateStyles[key] = {\n callback: this.compileCommonAttributeCallback(key, 'normal'),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n } else {\n enterStyles[key] = this.compileCommonAttributeCallback(key, 'normal');\n }\n });\n return { enterStyles, updateStyles };\n }\n\n compileEncode() {\n const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n const { enterStyles, updateStyles } = this._separateStyle();\n this._product.encode(updateStyles, true);\n this._product.encodeState('group', enterStyles, true);\n\n Object.keys(temp).forEach(state => {\n const styles: Record> = {};\n Object.keys(temp[state]).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n styles[key] = {\n callback: this.compileCommonAttributeCallback(key, state),\n dependency: [this.stateKeyToSignalName('markUpdateRank')]\n };\n });\n this._product.encodeState(state, styles, true);\n });\n\n // 在布局完成前不进行encode\n if (this._skipBeforeLayouted) {\n this._product.layout({\n skipBeforeLayouted: this._skipBeforeLayouted\n });\n }\n }\n\n compileState() {\n this.state.compileState(this._product, this._stateSort);\n }\n\n compileAnimation() {\n if (this._animationConfig) {\n let stateSignal: any;\n if (this.type === 'component') {\n // 组件有自己的动画状态\n stateSignal = (this.model as IComponent).animate?.getAnimationStateSignalName();\n } else {\n const region = (this.model as ISeries).getRegion?.();\n stateSignal = region?.animate?.getAnimationStateSignalName();\n }\n this._product.animation(this._animationConfig);\n this._product.animationState({\n callback: (datum: Datum, element: IElement, parameters: Record) => {\n return parameters[stateSignal]?.callback(datum, element);\n },\n dependency: stateSignal\n });\n if (this._animationConfig.normal) {\n if (!this._animationConfig.appear) {\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, () => {\n this.runAnimationByState(AnimationStateEnum.normal);\n });\n } else {\n this._event.on(VGRAMMAR_HOOK_EVENT.ANIMATION_END, ({ event }) => {\n if (event.mark === this.getProduct() && event.animationState === AnimationStateEnum.appear) {\n this.runAnimationByState(AnimationStateEnum.normal);\n }\n });\n }\n }\n }\n }\n\n compileContext(extraContext?: any) {\n const config: IMarkConfig = {\n ...this._markConfig,\n context: {\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId,\n ...extraContext\n }\n };\n this._product.configure(config);\n }\n\n compileSignal() {\n this.state.compile();\n }\n\n protected _computeAttribute(key: string, state: StateValueType) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return undefined as any;\n };\n }\n\n // TODO: 1. opt内容待定,确实需要再来补充(之前是scale.bindScales/bindSignals,从context.params中可以获取到)\n // TODO: 2. stateSourceItem,是否根据attr区分,存在默认写死的情况,例如\"hover\"/\"normal\";\n protected compileCommonAttributeCallback(key: string, state: string): MarkFunctionCallback {\n const attributeFunctor = this._computeAttribute(key, state);\n // remove state in opt\n const opt: IAttributeOpt = { mark: null, parent: null, element: null };\n return (datum: Datum, element: IElement) => {\n opt.mark = element.mark;\n opt.parent = element.mark.group;\n opt.element = element;\n return attributeFunctor(datum, opt);\n };\n }\n\n protected compileTransform() {\n if (this._transform?.length) {\n this.getProduct().transform(this._transform);\n }\n }\n\n protected _lookupGrammar(id: string) {\n return this.getCompiler().getVGrammarView()?.getMarkById(id);\n }\n\n updateState(newState: Record, noRender?: boolean) {\n return this.state.updateState(newState, noRender);\n }\n\n updateLayoutState(noRender?: boolean, recursion?: boolean): void {\n if (recursion && this.getMarks().length > 0) {\n this.getMarks().forEach(m => m.state.updateLayoutState(true));\n }\n return this.state.updateLayoutState(noRender);\n }\n\n updateMarkState(key: string): void {\n if (!this._product) {\n return;\n }\n const stateInfo = this.state.getStateInfo(key);\n this._product.elements.forEach(e => {\n if (this.state.checkOneState(e, e.getDatum(), stateInfo) === 'in') {\n e.addState(key);\n } else {\n e.removeState(key);\n }\n });\n }\n\n getMarks(): ICompilableMark[] {\n return [];\n }\n\n runAnimationByState(state?: string) {\n return this.getProduct()?.animate?.runAnimationByState(state);\n }\n\n stopAnimationByState(state?: string) {\n return this.getProduct()?.animate?.stopAnimationByState(state);\n }\n\n pauseAnimationByState(state?: string) {\n return this.getProduct()?.animate?.pauseAnimationByState(state);\n }\n\n resumeAnimationByState(state?: string) {\n return this.getProduct()?.animate?.resumeAnimationByState(state);\n }\n\n getProductElements() {\n const product = this.getProduct();\n if (product) {\n return product.elements;\n }\n return undefined;\n }\n\n release() {\n super.release();\n this.state.release();\n }\n}\n","import type { IStateInfo, IAttributeOpt, IModelMarkAttributeContext } from '../../compile/mark/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type {\n Datum,\n IMarkSpec,\n ConvertToMarkStyleSpec,\n GradientStop,\n IVisual,\n IVisualScale,\n IVisualSpecStyle,\n ICommonSpec,\n FunctionType,\n ValueType\n} from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Color } from '../../util/color';\nimport { createScaleWithSpec } from '../../util/scale';\nimport type {\n IMarkRaw,\n IMarkStateStyle,\n IMarkStyle,\n IMark,\n IMarkOption,\n StyleConvert,\n VisualScaleType,\n MarkInputStyle\n} from '../interface';\nimport { GradientType, DEFAULT_GRADIENT_CONFIG } from '../../constant/gradient';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { isValidScaleType } from '@visactor/vscale';\nimport { computeActualDataScheme, getDataScheme } from '../../theme/color-scheme/util';\nimport type { ISeries } from '../../series/interface';\nimport { CompilableMark } from '../../compile/mark/compilable-mark';\nimport type { StateValueType } from '../../compile/mark';\nimport { degreeToRadian, isBoolean, isFunction, isNil, isValid } from '@visactor/vutils';\nimport { curveTypeTransform } from '../utils';\n\nexport type ExChannelCall = (\n key: string | number | symbol,\n datum: Datum,\n states: StateValueType,\n opt: unknown,\n baseValue: unknown\n) => unknown;\n\nexport class BaseMark extends CompilableMark implements IMarkRaw {\n declare stateStyle: IMarkStateStyle;\n\n protected declare _option: IMarkOption;\n\n protected _attributeContext: IModelMarkAttributeContext;\n\n /** by _unCompileChannel, some channel need add default channel to make sure update available */\n _extensionChannel: {\n [key: string | number | symbol]: string[];\n } = {};\n /** same as _extensionChannel. when compute channel, add extension channel effect */\n _computeExChannel: {\n [key: string | number | symbol]: ExChannelCall;\n } = {};\n\n constructor(name: string, option: IMarkOption) {\n super(option, name, option.model);\n // 这里的上下文多数情况下与 mark 是什么是没有关系的,与mark的使用者,也就是series,component有的逻辑有关。\n this._attributeContext = option.attributeContext;\n option.map?.set(this.id, this as unknown as IMark);\n }\n\n created(): void {\n this._initStyle();\n }\n\n /**\n * 外部调用,根据 spec 初始化 style(如果由 IModel 派生类调用,请使用 IModel.initMarkStyleWithSpec)\n * @param spec\n * @param key\n * @returns\n */\n initStyleWithSpec(spec: IMarkSpec, key?: string) {\n if (!spec) {\n return;\n }\n\n if (isValid(spec.id)) {\n this._userId = spec.id;\n }\n\n // interactive\n if (isBoolean(spec.interactive)) {\n this._markConfig.interactive = spec.interactive;\n }\n // zIndex\n if (isValid(spec.zIndex)) {\n this._markConfig.zIndex = spec.zIndex;\n }\n // visible\n if (isBoolean(spec.visible)) {\n this.setVisible(spec.visible);\n }\n // style\n this._initSpecStyle(spec, this.stateStyle, key);\n }\n\n protected _transformStyleValue(\n styleConverter: StyleConvert,\n transform: (value: ValueType) => ValueType\n ): StyleConvert {\n if ((styleConverter as VisualScaleType).scale) {\n const scale = (styleConverter as VisualScaleType).scale;\n const range = scale.range();\n scale.range(range.map(transform));\n return styleConverter as StyleConvert;\n } else if (typeof styleConverter === 'function') {\n return ((...args) => {\n return transform((styleConverter as FunctionType)(...args) as ValueType);\n }) as StyleConvert;\n }\n return transform(styleConverter as ValueType);\n }\n\n convertAngleToRadian(styleConverter: StyleConvert) {\n // 用户传入的角度配置,需要做一层转换\n return this._transformStyleValue(styleConverter, degreeToRadian);\n }\n\n isUserLevel(level: number) {\n return [\n AttributeLevel.User_Mark,\n AttributeLevel.User_Series,\n AttributeLevel.User_Chart,\n AttributeLevel.User_SeriesStyle\n ].includes(level);\n }\n\n /**\n * 由外部series调用,设置markStyle的接口(如果由 IModel 派生类调用,请使用 IModel.setMarkStyle)\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach((attr: string) => {\n let attrStyle = style[attr] as MarkInputStyle;\n if (isNil(attrStyle)) {\n return;\n }\n\n attrStyle = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel, stateStyle);\n\n this.setAttribute(attr as any, attrStyle, state, level, stateStyle);\n });\n }\n\n getStyle(key: string, state: StateValueType = 'normal'): any {\n return this.stateStyle[state][key]?.style;\n }\n\n /** 过滤单个 attribute */\n protected _filterAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType,\n level: number,\n isUserLevel: boolean,\n stateStyle = this.stateStyle\n ): StyleConvert {\n let newStyle = this._styleConvert(style);\n if (isUserLevel) {\n switch (attr) {\n case 'angle':\n newStyle = this.convertAngleToRadian(newStyle);\n break;\n case 'innerPadding':\n case 'outerPadding':\n // VRender 的 padding 定义基于 centent-box 盒模型,默认正方向是向外扩,与 VChart 不一致。这里将 padding 符号取反\n newStyle = this._transformStyleValue(newStyle, (value: number) => -value);\n break;\n case 'curveType':\n newStyle = this._transformStyleValue(newStyle, (value: string) =>\n curveTypeTransform(value, (this._option.model as any).direction)\n );\n break;\n }\n }\n return newStyle;\n }\n\n /**\n * TODO: 没有外部调用\n * 设置mark样式所参考的图元\n */\n setReferer(mark: IMarkRaw, styleKey?: U, state?: StateValueType, stateStyle = this.stateStyle) {\n if (!mark) {\n return;\n }\n if (styleKey && state) {\n const style = stateStyle[state] ?? { [styleKey]: {} };\n stateStyle[state][styleKey] = {\n ...(style[styleKey] as unknown as any),\n ...{ referer: mark }\n };\n return;\n }\n\n Object.entries(stateStyle).forEach(([state, style]) => {\n Object.entries(style).forEach(([styleKey, style]) => {\n stateStyle[state][styleKey].referer = mark;\n });\n });\n }\n\n setPostProcess(key: U, postProcessFunc: any, state: StateValueType = 'normal') {\n if (this.stateStyle[state]?.[key]) {\n this.stateStyle[state][key].postProcess = postProcessFunc;\n }\n }\n\n getAttribute(key: U, datum: Datum, state: StateValueType = 'normal', opt?: IAttributeOpt) {\n return this._computeAttribute(key, state)(datum, opt);\n }\n\n setAttribute(\n attr: U,\n style: MarkInputStyle,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ) {\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n if (stateStyle[state][attr] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][attr] = {\n level,\n style,\n referer: undefined\n };\n }\n const attrLevel = stateStyle[state][attr]?.level;\n if (isValid(attrLevel) && attrLevel <= level) {\n mergeSpec(stateStyle[state][attr], { style, level });\n }\n\n // some attr has extension channel in VChart to make some effect\n if (state !== 'normal') {\n if (attr in this._extensionChannel) {\n this._extensionChannel[attr].forEach(key => {\n if (stateStyle[state][key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n stateStyle[state][key as keyof T] = stateStyle.normal[key];\n }\n });\n }\n }\n }\n\n /**\n * 与 vgrammar 默认值一致的样式可以不设置默认值或设置为undefined, 减少encode属性\n */\n protected _getDefaultStyle() {\n return {\n visible: true,\n // mark的层级应该在mark层 不在encode属性层\n // zIndex: LayoutZIndex.Mark,\n x: 0,\n y: 0\n } as IMarkStyle;\n }\n\n // /**\n // * 获取该 mark 不支持的图形属性,由子类覆写\n // * @returns\n // */\n // protected getIgnoreAttributes(): string[] {\n // return [];\n // }\n\n protected _styleConvert(style?: MarkInputStyle): StyleConvert | undefined {\n if (!style) {\n return style as undefined;\n }\n // visual spec 转换为 scale 类型的mark style\n if (isValidScaleType((style as IVisualSpecStyle).type) || (style as IVisualScale).scale) {\n // const _style = style as IVisual;\n const scale = createScaleWithSpec(style as IVisual, {\n globalScale: this._option.globalScale,\n seriesId: this._option.seriesId\n });\n if (scale) {\n return {\n scale,\n field: (style as IVisual).field,\n changeDomain: (style as IVisualScale).changeDomain\n };\n }\n }\n return style as StyleConvert;\n }\n\n protected _computeAttribute(key: U, state: StateValueType) {\n let stateStyle = this.stateStyle[state]?.[key];\n if (!stateStyle) {\n stateStyle = this.stateStyle.normal[key];\n }\n const baseValueFunctor = this._computeStateAttribute(stateStyle, key, state);\n const hasPostProcess = isFunction(stateStyle?.postProcess);\n const hasExCompute = key in this._computeExChannel;\n\n if (hasPostProcess && hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n let baseValue = baseValueFunctor(datum, opt);\n\n baseValue = stateStyle.postProcess(baseValue, datum, this._attributeContext, opt, this.getDataView());\n\n return exCompute(key, datum, state, opt, baseValue);\n };\n } else if (hasPostProcess) {\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.postProcess(\n baseValueFunctor(datum, opt),\n datum,\n this._attributeContext,\n opt,\n this.getDataView()\n );\n };\n } else if (hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum, opt: IAttributeOpt) => {\n return exCompute(key, datum, state, opt, baseValueFunctor(datum, opt));\n };\n }\n return baseValueFunctor;\n }\n\n protected _computeStateAttribute(stateStyle: any, key: U, state: StateValueType) {\n if (!stateStyle) {\n return (datum: Datum, opt: IAttributeOpt) => undefined as any;\n }\n if (stateStyle.referer) {\n return stateStyle.referer._computeAttribute(key, state);\n }\n if (!stateStyle.style) {\n return (datum: Datum, opt: IAttributeOpt) => stateStyle.style;\n }\n\n if (typeof stateStyle.style === 'function') {\n return (datum: Datum, opt: IAttributeOpt) =>\n stateStyle.style(datum, this._attributeContext, opt, this.getDataView());\n }\n\n if (GradientType.includes(stateStyle.style.gradient)) {\n // 渐变色处理,支持各个属性回调\n return this._computeGradientAttr(stateStyle.style);\n }\n\n if (['outerBorder', 'innerBorder'].includes(key as string)) {\n // 内外描边处理,支持各个属性回调\n return this._computeBorderAttr(stateStyle.style);\n }\n\n if (isValidScaleType(stateStyle.style.scale?.type)) {\n return (datum: Datum, opt: IAttributeOpt) => {\n let data = datum;\n if (this.model.modelType === 'series' && (this.model as ISeries).getMarkData) {\n data = (this.model as ISeries).getMarkData(datum);\n }\n\n return stateStyle.style.scale.scale(data[stateStyle.style.field]);\n };\n }\n return (datum: Datum, opt: IAttributeOpt) => {\n return stateStyle.style;\n };\n }\n\n private _initStyle(): void {\n const defaultStyle = this._getDefaultStyle();\n this.setStyle(defaultStyle, 'normal', 0);\n }\n\n private _initSpecStyle(spec: IMarkSpec, stateStyle: IMarkStateStyle, key?: string) {\n // style\n if (spec.style) {\n this.setStyle(spec.style, 'normal', AttributeLevel.User_Mark, stateStyle);\n }\n const state = spec.state;\n if (state) {\n Object.keys(state).forEach(key => {\n const stateTemp = state[key];\n if ('style' in stateTemp) {\n const style = stateTemp.style;\n let stateInfo: IStateInfo = { stateValue: key };\n if ('level' in stateTemp) {\n stateInfo.level = stateTemp.level as number;\n }\n if ('filter' in stateTemp) {\n if (isFunction(stateTemp.filter)) {\n stateInfo = {\n filter: stateTemp.filter as (datum: any, options: Record) => boolean,\n ...stateInfo\n };\n } else {\n stateInfo = { ...stateTemp.filter, ...stateInfo };\n }\n }\n this.state.addStateInfo(stateInfo);\n this.setStyle(style as ConvertToMarkStyleSpec, key, AttributeLevel.User_Mark, stateStyle);\n } else {\n this.setStyle(stateTemp, key, AttributeLevel.User_Mark, stateStyle);\n }\n });\n }\n }\n\n private _computeGradientAttr(gradientStyle: any) {\n const { gradient, scale, field, ...rest } = gradientStyle;\n\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n }\n\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n // 默认配置处理\n const mergedStyle = {\n ...DEFAULT_GRADIENT_CONFIG[gradient],\n ...rest\n };\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n const markData = this.getDataView();\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (key === 'stops') {\n computeStyle.stops = value.map((stop: GradientStop) => {\n const { opacity, color, offset } = stop;\n let computeColor = color ?? colorScale?.scale(data[colorField]);\n if (isFunction(color)) {\n computeColor = color(data, this._attributeContext, opt, markData);\n }\n\n if (isValid(opacity)) {\n computeColor = Color.SetOpacity(computeColor as string, opacity);\n }\n\n return {\n offset: isFunction(offset) ? offset(data, this._attributeContext, opt, markData) : offset,\n color: computeColor || themeColor[0]\n };\n });\n } else if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, markData);\n } else {\n computeStyle[key] = value;\n }\n });\n\n computeStyle.gradient = gradient;\n\n return computeStyle;\n };\n }\n\n private _computeBorderAttr(borderStyle: any) {\n const { scale, field, ...mergedStyle } = borderStyle;\n\n return (data: Datum, opt: IAttributeOpt) => {\n const computeStyle: any = {};\n\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, opt, this.getDataView());\n } else {\n computeStyle[key] = value;\n }\n });\n if (!('stroke' in computeStyle)) {\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as ISeries).getDefaultColorDomain()\n );\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n computeStyle.stroke = colorScale?.scale(data[colorField]) || themeColor[0];\n }\n } else if (GradientType.includes(mergedStyle.stroke?.gradient)) {\n computeStyle.stroke = this._computeGradientAttr(mergedStyle.stroke)(data, opt);\n }\n return computeStyle;\n };\n }\n}\n","/**\n * @description 组件基类\n */\nimport type { IGroupGraphicAttribute, ISetAttributeContext } from '@visactor/vrender-core';\nimport { Group, CustomEvent } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { merge, isFunction, isPlainObject, isNil } from '@visactor/vutils';\nimport type { ComponentOptions } from '../interface';\n\nconst GROUP_ATTRIBUTES = [\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'scaleX',\n 'scaleY',\n 'angle',\n 'anchor',\n 'postMatrix',\n 'visible',\n 'clip',\n 'pickable',\n 'childrenPickable',\n 'zIndex',\n 'cursor'\n];\n\nexport abstract class AbstractComponent extends Group {\n declare attribute: Partial;\n\n protected mode?: '2d' | '3d';\n\n protected skipDefault?: boolean;\n\n protected _skipRenderAttributes: string[] = GROUP_ATTRIBUTES;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(attributes);\n\n if (options?.mode) {\n this.mode = options.mode;\n\n this.setMode(options.mode);\n }\n\n if (options?.skipDefault) {\n this.skipDefault = true;\n }\n // 组件需要精准 bounds,所以将这个 strokeBoundsBuffer 设置为 0,否则会影响包围盒的获取\n this.setTheme({\n common: {\n strokeBoundsBuffer: 0\n }\n });\n this.attribute = attributes;\n // 这里调用渲染和事件绑定逻辑\n this.onSetStage(() => {\n this.render();\n this.bindEvents();\n });\n }\n\n /**\n * @override\n * 更新单个属性值\n * @param key\n * @param value\n * @param forceUpdateTag\n */\n setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined, context?: ISetAttributeContext): void {\n const params =\n this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate({ [key]: value }, this.attribute, key, context);\n if (params) {\n return this._setAttributes(params as Partial, forceUpdateTag);\n }\n\n // overwrite when previous or next attribute is function\n if (\n isPlainObject(this.attribute[key]) &&\n isPlainObject(value) &&\n !isFunction(this.attribute[key]) &&\n !isFunction(value)\n ) {\n merge(this.attribute[key], value);\n } else {\n this.attribute[key] = value;\n }\n\n // HACK: 待优化\n if (!this._skipRenderAttributes.includes(key as string)) {\n this.render();\n }\n\n this.valid = this.isValid();\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTag(key as string))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n setAttributes(params: Partial, forceUpdateTag?: boolean | undefined, context?: ISetAttributeContext): void {\n params =\n (this.onBeforeAttributeUpdate &&\n (this.onBeforeAttributeUpdate(params, this.attribute, null, context) as Partial)) ||\n params;\n return this._setAttributes(params, forceUpdateTag);\n }\n\n // @ts-ignore\n _setAttributes(params: Partial, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof T)[];\n this._mergeAttributes(params, keys);\n\n // HACK: 待优化\n if (!keys.every(key => this._skipRenderAttributes.includes(key as string))) {\n this.render();\n }\n\n this.valid = this.isValid();\n // 没有设置shape&bounds的tag\n if (!this.updateShapeAndBoundsTagSetted() && (forceUpdateTag || this.needUpdateTags(keys as string[]))) {\n this.addUpdateShapeAndBoundsTag();\n } else {\n this.addUpdateBoundTag();\n }\n this.addUpdatePositionTag();\n this.onAttributeUpdate();\n }\n\n protected _mergeAttributes(params: Partial, keys?: (keyof T)[]) {\n if (isNil(keys)) {\n keys = Object.keys(params) as (keyof T)[];\n }\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as keyof Partial;\n // overwrite when previous or next attribute is function\n if (isPlainObject(this.attribute[key]) && !isFunction(this.attribute[key]) && !isFunction(params[key])) {\n merge(this.attribute[key], params[key]);\n } else {\n this.attribute[key] = params[key];\n }\n }\n }\n\n protected bindEvents() {\n // please override\n }\n\n protected abstract render(): void;\n\n // 图形元素 id\n protected _getNodeId(id: string) {\n return `${this.id ?? this._uid}-${this.name}-${id}`;\n }\n\n // 用于 emit 组件自己的事件\n protected _dispatchEvent(eventName: string, details?: Dict) {\n // 封装事件\n const changeEvent = new CustomEvent(eventName, details);\n // FIXME: 需要在 vrender 的事件系统支持\n // @ts-ignore\n changeEvent.manager = this.stage?.eventSystem.manager;\n\n this.dispatchEvent(changeEvent);\n }\n}\n","import type { IColor } from '@visactor/vrender-core';\nimport { Color, hexToRgb } from '@visactor/vutils';\n\nconst defaultAlternativeColors: string[] = ['#ffffff', '#000000'];\n\n/**\n * 标签智能反色\n * @param foregroundColorOrigin\n * @param backgroundColorOrogin\n * @returns\n */\nexport function labelSmartInvert(\n foregroundColorOrigin: IColor | undefined,\n backgroundColorOrogin: IColor | undefined,\n textType?: string | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n): IColor | undefined {\n if (typeof foregroundColorOrigin !== 'string' || typeof backgroundColorOrogin !== 'string') {\n return foregroundColorOrigin;\n }\n const foregroundColor = new Color(foregroundColorOrigin as string).toHex();\n const backgroundColor = new Color(backgroundColorOrogin as string).toHex();\n if (!contrastAccessibilityChecker(foregroundColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return improveContrastReverse(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n }\n return foregroundColor;\n}\n\n/**\n * 提升对比度\n * 对于对比度不足阈值的情况,推荐备选颜色色板中的颜色提升对比\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction improveContrastReverse(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n alternativeColors?: string | string[],\n mode?: string\n) {\n const alternativeColorPalletes: string[] = [];\n if (alternativeColors) {\n if (alternativeColors instanceof Array) {\n alternativeColorPalletes.push(...alternativeColors);\n } else {\n alternativeColorPalletes.push(alternativeColors);\n }\n }\n alternativeColorPalletes.push(...defaultAlternativeColors);\n for (const alternativeColor of alternativeColorPalletes) {\n if (foregroundColor === alternativeColor) {\n continue;\n }\n if (contrastAccessibilityChecker(alternativeColor, backgroundColor, textType, contrastRatiosThreshold, mode)) {\n return alternativeColor;\n }\n }\n return undefined;\n}\n\n/**\n * 颜色对比度可行性检查 https://webaim.org/articles/contrast/\n * - WCAG 2.0 AA 级要求普通文本的对比度至少为 4.5:1,大文本的对比度至少为 3:1。(目前按照此标准)\n * - WCAG 2.1 要求图形和用户界面组件(例如表单输入边框)的对比度至少为 3:1。\n * - WCAG AAA 级要求普通文本的对比度至少为 7:1,大文本的对比度至少为 4.5:1。\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nexport function contrastAccessibilityChecker(\n foregroundColor: IColor | undefined,\n backgroundColor: IColor | undefined,\n textType?: IColor | undefined,\n contrastRatiosThreshold?: number,\n mode?: string\n): boolean {\n if (mode === 'lightness') {\n const backgroundColorLightness = Color.getColorBrightness(new Color(backgroundColor as string));\n const foregroundColorLightness = Color.getColorBrightness(new Color(foregroundColor as string));\n if (foregroundColorLightness < 0.5) {\n // 文字颜色为'#ffffff'\n if (backgroundColorLightness >= 0.5) {\n return true;\n }\n return false;\n }\n // 文字颜色为‘#000000'\n if (backgroundColorLightness < 0.5) {\n return true;\n }\n return false;\n }\n //Contrast ratios can range from 1 to 21\n if (contrastRatiosThreshold) {\n if (contrastRatios(foregroundColor, backgroundColor) > contrastRatiosThreshold) {\n return true;\n }\n return false;\n } else if (textType === 'largeText') {\n if (contrastRatios(foregroundColor, backgroundColor) > 3) {\n return true;\n }\n return false;\n }\n if (contrastRatios(foregroundColor, backgroundColor) > 4.5) {\n return true;\n }\n return false;\n}\n\n/**\n * 计算颜色对比度 https://webaim.org/articles/contrast/\n * Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).\n * (L1 + 0.05) / (L2 + 0.05), whereby:\n * L1 is the relative luminance of the lighter of the colors, and\n * L2 is the relative luminance of the darker of the colors.\n * @param foregroundColor\n * @param backgroundColor\n * @returns\n */\nfunction contrastRatios(foregroundColor: IColor | undefined, backgroundColor: IColor | undefined): number {\n const foregroundColorLuminance = getColorLuminance(foregroundColor as string);\n const backgroundColorLuminance = getColorLuminance(backgroundColor as string);\n const L1 = foregroundColorLuminance > backgroundColorLuminance ? foregroundColorLuminance : backgroundColorLuminance;\n const L2 = foregroundColorLuminance > backgroundColorLuminance ? backgroundColorLuminance : foregroundColorLuminance;\n const contrastRatios = (L1 + 0.05) / (L2 + 0.05);\n return contrastRatios;\n}\n\n/**\n * 计算相对亮度 https://webaim.org/articles/contrast/\n * the relative brightness of any point in a colorspace, normalized to 0 for darkest black and 1 for lightest white\n * Note 1: For the sRGB colorspace, the relative luminance of a color is defined as\n * L = 0.2126 * R + 0.7152 * G + 0.0722 * B where R, G and B are defined as:\n * if RsRGB <= 0.03928 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4\n * if GsRGB <= 0.03928 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4\n * if BsRGB <= 0.03928 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4\n * and RsRGB, GsRGB, and BsRGB are defined as:\n * RsRGB = R8bit/255\n * GsRGB = G8bit/255\n * BsRGB = B8bit/255\n * @param color\n * @returns\n */\nfunction getColorLuminance(color: string): number {\n const rgb8bit = hexToRgb(color);\n const RsRGB = rgb8bit[0] / 255;\n const GsRGB = rgb8bit[1] / 255;\n const BsRGB = rgb8bit[2] / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n}\n\nexport function smartInvertStrategy(\n fillStrategy: string,\n baseColor: IColor,\n invertColor: IColor,\n similarColor: IColor\n) {\n let result;\n switch (fillStrategy) {\n case 'base':\n result = baseColor;\n break;\n case 'invertBase':\n result = invertColor;\n break;\n case 'similarBase':\n result = similarColor;\n default:\n break;\n }\n return result;\n}\n","import type {\n IRichText,\n IRichTextAttribute,\n IText,\n ITextGraphicAttribute,\n TextAlignType\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { getTextBounds, graphicCreator } from '@visactor/vrender-core';\nimport type { ITextMeasureOption } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { TextMeasure, isObject, isValid } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE } from '../constant';\nimport type { HTMLTextContent, ReactTextContent, TextContent } from '../core/type';\n\nexport const initTextMeasure = (\n textSpec?: Partial,\n option?: Partial,\n useNaiveCanvas?: boolean,\n defaultFontParams?: Partial\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: DEFAULT_TEXT_FONT_SIZE,\n ...defaultFontParams\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n};\n\n// FIXME: 和上一个方法统一,使用 TextMeasure 类\nexport function measureTextSize(\n text: string | number | string[] | number[],\n textSpec: Partial,\n defaultTextTheme: Partial = {}\n) {\n if (!text) {\n return { width: 0, height: 0 };\n }\n const bounds = getTextBounds({\n text,\n fontFamily: textSpec.fontFamily || defaultTextTheme.fontFamily || DEFAULT_TEXT_FONT_FAMILY,\n fontSize: textSpec.fontSize || defaultTextTheme.fontSize || 12,\n fontWeight: textSpec.fontWeight || defaultTextTheme.fontWeight,\n textAlign: textSpec.textAlign || 'center',\n textBaseline: textSpec.textBaseline,\n ellipsis: !!textSpec.ellipsis,\n maxLineWidth: textSpec.maxLineWidth || Infinity,\n lineHeight: textSpec.fontSize || defaultTextTheme.fontSize || 12\n });\n\n return { width: bounds.width(), height: bounds.height() };\n}\n\nexport function isRichText(attributes: TextContent, typeKey = 'type') {\n return getTextType(attributes, typeKey) === 'rich';\n}\n\nexport function getTextType(attributes: TextContent, typeKey = 'type') {\n if (isObject(attributes.text) && 'type' in attributes.text) {\n return attributes.text.type ?? 'text';\n }\n\n if (typeKey in attributes) {\n return attributes[typeKey] ?? 'text';\n }\n\n return 'text';\n}\n\nexport function richTextAttributeTransform(attributes: ITextGraphicAttribute & IRichTextAttribute & TextContent) {\n if (isValid(attributes.maxLineWidth)) {\n attributes.maxWidth = attributes.maxLineWidth;\n delete attributes.maxLineWidth;\n }\n\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n attributes.textConfig = (attributes.text as unknown as any).text || attributes.text;\n return attributes;\n}\n\nexport function htmlAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as HTMLTextContent;\n const { text: html } = text;\n\n attributes.html = html;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 html,则不绘制原始文字\n return attributes;\n}\n\nexport function reactAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as ReactTextContent;\n const { text: react } = text;\n\n attributes.react = react;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 react,则不绘制原始文字\n\n return attributes;\n}\n\nexport function createTextGraphicByType(textAttributes: ITextGraphicAttribute, typeKey = 'type') {\n const textType = getTextType(textAttributes, typeKey);\n if (textType === 'rich') {\n return graphicCreator.richtext(richTextAttributeTransform(textAttributes as IRichTextAttribute));\n }\n\n if (textType === 'html') {\n textAttributes = htmlAttributeTransform(textAttributes);\n } else if (textType === 'react') {\n textAttributes = reactAttributeTransform(textAttributes);\n }\n\n return graphicCreator.text(textAttributes as ITextGraphicAttribute);\n}\n\nexport function alignTextInLine(\n layoutAlign: 'left' | 'right',\n graphic: IText | IRichText,\n textAlign: TextAlignType,\n pos: number,\n textWidth: number\n) {\n if (layoutAlign === 'right') {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos - textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos - textWidth);\n }\n } else {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos + textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos + textWidth);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos);\n }\n }\n}\n","/**\n * @description 存放工具函数\n */\nimport type { IGraphicAttribute, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { isNil } from '@visactor/vutils';\nimport type { Point } from '../core/type';\nimport type { IMarkLineLabelPosition, IMarkPointItemPosition } from '../marker';\n\nexport function traverseGroup(group: IGraphic, cb: (node: IGraphic) => boolean | void) {\n group.forEachChildren(node => {\n const stopped = cb(node as IGraphic);\n if ((node as IGroup).isContainer && !stopped) {\n traverseGroup(node as IGraphic, cb);\n }\n });\n}\n\nexport const isVisible = (obj?: Partial): boolean => {\n if (isNil(obj)) {\n return false;\n }\n return obj.visible !== false;\n};\n\nexport function getMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.getChildren() as IGraphic[];\n}\n\nexport function getNoneGroupMarksByName(root: IGroup, name: string) {\n if (!name) {\n return [];\n }\n const group = root.find(node => node.name === name, true) as IGroup;\n if (!group) {\n return [];\n }\n return group.findAll(node => node.type !== 'group', true) as unknown as IGraphic[];\n}\n\nexport function removeRepeatPoint(points: Point[]) {\n const result = [points[0]];\n for (let i = 1; i < points.length; i++) {\n if (points[i].x !== points[i - 1].x || points[i].y !== points[i - 1].y) {\n result.push(points[i]);\n }\n }\n return result;\n}\n\nexport function isPostiveXAxis(angle: number) {\n return (angle >= 0 && angle < Math.PI / 2) || (angle > (Math.PI * 3) / 2 && angle <= Math.PI * 2);\n}\n\nexport function fuzzyEqualNumber(a: number, b: number, delta: number): boolean {\n return Math.abs(a - b) < delta;\n}\n\nexport function getTextAlignAttrOfVerticalDir(\n autoRotate: boolean,\n lineEndAngle: number,\n itemPosition: IMarkLineLabelPosition | keyof typeof IMarkPointItemPosition\n) {\n if (autoRotate) {\n return {\n textAlign: 'right',\n textBaseline: 'middle'\n };\n }\n return {\n textAlign:\n // left: 90度方向, 即笛卡尔坐标系y轴负方向 + top 或 270度方向, 即笛卡尔坐标系y轴正方向 + bottom\n (lineEndAngle < Math.PI && itemPosition.toLocaleLowerCase().includes('top')) ||\n (lineEndAngle > Math.PI && itemPosition.toLocaleLowerCase().includes('bottom'))\n ? 'left'\n : // right: 90度方向, 即笛卡尔坐标系y轴负方向 + bottom 或 270度方向, 即笛卡尔坐标系y轴正方向 + top\n (lineEndAngle < Math.PI && itemPosition.toLocaleLowerCase().includes('bottom')) ||\n (lineEndAngle > Math.PI && itemPosition.toLocaleLowerCase().includes('top'))\n ? 'right'\n : 'center',\n textBaseline:\n // bottom: 90度方向, 即笛卡尔坐标系y轴负方向 + inside 或 270度方向, 即笛卡尔坐标系y轴正方向 + outside\n (lineEndAngle < Math.PI && itemPosition.includes('inside')) ||\n (lineEndAngle > Math.PI && !itemPosition.includes('inside'))\n ? 'bottom'\n : 'top'\n };\n}\n","import type { IBoundsLike } from '@visactor/vutils';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst DIV = 5; // bit shift from x, y index to bit vector array index\nconst MOD = 31; // bit mask for index lookup within a bit vector\nconst SIZE = 32; // individual bit vector size\nconst RIGHT0 = new Uint32Array(SIZE + 1); // left-anchored bit vectors, full -> 0\nconst RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = (RIGHT1[i - 1] << 1) | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nexport function bitmap(w: number, h: number) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index: number, mask: number) {\n array[index] |= mask;\n }\n\n function _clear(index: number, mask: number) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n\n get: (x: number, y: number) => {\n const index = y * w + x;\n return array[index >>> DIV] & (1 << (index & MOD));\n },\n\n set: (x: number, y: number) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n\n clear: (x: number, y: number) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n /**\n * 给定范围内是否发生碰撞\n * @param 范围\n * @returns boolean\n */\n getRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return true;\n }\n let r = y2;\n let start;\n let end;\n let indexStart;\n let indexEnd;\n for (; r >= y1; --r) {\n start = r * w + x1;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) {\n return true;\n }\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) {\n return true;\n }\n }\n }\n }\n return false;\n },\n\n setRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n if (x2 < 0 || y2 < 0 || x1 > w || y1 > h) {\n return;\n }\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _set(i, 0xffffffff);\n }\n }\n }\n },\n\n clearRange: ({ x1, y1, x2, y2 }: IBoundsLike) => {\n let start;\n let end;\n let indexStart;\n let indexEnd;\n let i;\n for (; y1 <= y2; ++y1) {\n start = y1 * w + x1;\n end = y1 * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) {\n _clear(i, 0);\n }\n }\n }\n },\n\n outOfBounds: ({ x1, y1, x2, y2 }: IBoundsLike) => x1 < 0 || y1 < 0 || y2 >= h || x2 >= w,\n toImageData: (ctx: CanvasRenderingContext2D) => {\n const imageData = ctx.createImageData(w, h);\n const data = imageData.data;\n for (let y = 0; y < h; ++y) {\n for (let x = 0; x < w; ++x) {\n const index = y * w + x;\n const offset = 4 * index;\n const occupied = array[index >>> DIV] & (1 << (index & MOD));\n data[offset + 0] = occupied * 0xff;\n data[offset + 1] = occupied * 0xff;\n data[offset + 2] = occupied * 0xff;\n data[offset + 3] = 0x1f; // alpha\n }\n }\n return imageData;\n }\n };\n}\n\nexport type Bitmap = ReturnType;\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { clamp as clampRange } from '@visactor/vutils';\nimport { bitmap } from './bitmap';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function bitmapTool(\n width: number,\n height: number,\n padding: { top?: number; left?: number; right?: number; bottom?: number } = { top: 0, left: 0, right: 0, bottom: 0 }\n) {\n const { top = 0, left = 0, right = 0, bottom = 0 } = padding;\n const ratio = Math.max(1, Math.sqrt((width * height) / 1e6));\n const w = ~~((width + left + right + ratio) / ratio);\n const h = ~~((height + top + bottom + ratio) / ratio);\n const scale = (_: number) => ~~(_ / ratio);\n\n scale.bitmap = () => bitmap(w, h);\n scale.x = (_: number) => ~~((_ + left) / ratio);\n scale.y = (_: number) => ~~((_ + top) / ratio);\n\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n\n return scale;\n}\n\nexport function clampRangeByBitmap($: BitmapTool, range: IBoundsLike) {\n const { x1, x2, y1, y2 } = range;\n const _x1 = clampRange(x1, 0, $.width);\n const _x2 = clampRange(x2, 0, $.width);\n const _y1 = clampRange(y1, 0, $.height);\n const _y2 = clampRange(y2, 0, $.height);\n return {\n x1: $.x(_x1),\n x2: $.x(_x2),\n y1: $.y(_y1),\n y2: $.y(_y2)\n };\n}\n\nexport function boundToRange($: BitmapTool, bound: IBoundsLike, clamp: boolean = false) {\n if (clamp) {\n return clampRangeByBitmap($, bound);\n }\n\n return {\n x1: $.x(bound.x1),\n x2: $.x(bound.x2),\n y1: $.y(bound.y1),\n y2: $.y(bound.y2)\n };\n}\n\nexport type BitmapTool = ReturnType;\n","import type { IText, Text } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValid } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../../core/type';\nimport type { LabelBase } from '../base';\nimport type { BaseLabelAttrs, OverlapAttrs, Strategy } from '../type';\nimport type { Bitmap } from './bitmap';\nimport type { BitmapTool } from './scaler';\nimport { boundToRange, clampRangeByBitmap } from './scaler';\n\n/**\n * 防重叠逻辑参考 https://github.com/vega/vega/\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function canPlace($: BitmapTool, bitmap: Bitmap, bound: IBoundsLike, checkBound = true, pad = 0) {\n let range = bound;\n if (pad > 0) {\n range = {\n x1: bound.x1 - pad,\n x2: bound.x2 + pad,\n y1: bound.y1 - pad,\n y2: bound.y2 + pad\n };\n }\n range = boundToRange($, range);\n\n const outOfBounds = bitmap.outOfBounds(range);\n\n if (checkBound && outOfBounds) {\n return false;\n }\n\n // 超出边界,需要将判断区域调整到可视区域内\n if (outOfBounds) {\n range = clampRangeByBitmap($, range);\n }\n\n return !bitmap.getRange(range);\n}\n\n/**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\nexport function canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n}\n\nexport function placeToCandidates(\n $: BitmapTool,\n bitmap: Bitmap,\n text: Text,\n candidates: PointLocationCfg[] = [],\n clampForce = true,\n pad = 0,\n changePosition = false\n): PointLocationCfg | false {\n const validCandidates = candidates.filter(candidate => isValid(candidate));\n for (let i = 0; i < validCandidates.length; i++) {\n let measureText;\n if (changePosition) {\n measureText = text;\n } else {\n measureText = text.clone();\n }\n measureText.setAttributes(validCandidates[i]);\n\n if (canPlace($, bitmap, measureText.AABBBounds, clampForce, pad)) {\n bitmap.setRange(boundToRange($, measureText.AABBBounds, true));\n return validCandidates[i];\n }\n }\n return false;\n}\n\nexport function place(\n $: BitmapTool,\n bitmap: Bitmap,\n s: Strategy,\n attrs: T,\n text: Text,\n bounds: IBoundsLike,\n labeling?: LabelBase['labeling']\n): PointLocationCfg | false {\n const clampForce = (attrs.overlap as OverlapAttrs)?.clampForce;\n const overlapPadding = (attrs.overlap as OverlapAttrs)?.overlapPadding;\n if (s.type === 'bound' || s.type === 'position') {\n if (isFunction(labeling)) {\n const userPosition = isFunction(s.position) ? s.position(text.attribute) : s.position;\n const positions = (userPosition || defaultLabelPosition(attrs.type)) as string[];\n const candidates = positions.map(p => labeling(text.AABBBounds, bounds, p, attrs.offset) as PointLocationCfg);\n const shouldClone = s.restorePosition === false;\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding, shouldClone);\n }\n return false;\n }\n\n if (s.type === 'moveY') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dy => {\n return { x: text.attribute.x as number, y: (text.attribute.y as number) + dy };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n\n if (s.type === 'moveX') {\n const offset = s.offset ? (isFunction(s.offset) ? s.offset(text.attribute) : s.offset) : [];\n const candidates = offset.map(dx => {\n return { x: (text.attribute.x as number) + dx, y: text.attribute.y as number };\n });\n return placeToCandidates($, bitmap, text, candidates, clampForce, overlapPadding);\n }\n return false;\n}\n\nexport const DefaultPositions = [\n 'top',\n 'bottom',\n 'right',\n 'left',\n 'top-right',\n 'bottom-right',\n 'top-left',\n 'bottom-left'\n];\nexport const DefaultRectPositions = ['top', 'inside-top', 'inside'];\n\nexport function defaultLabelPosition(type?: string) {\n switch (type) {\n case 'rect':\n return DefaultRectPositions;\n default:\n return DefaultPositions;\n }\n}\n\nexport function clampText(\n text: IText,\n width: number,\n height: number,\n padding: { top?: number; left?: number; right?: number; bottom?: number } = {}\n) {\n const { x1, x2, y1, y2 } = text.AABBBounds;\n const { top = 0, left = 0, right = 0, bottom = 0 } = padding;\n\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n\n const minY = Math.min(y1, y2);\n const maxY = Math.max(y1, y2);\n\n const minXWithPadding = 0 - left;\n const maxXWithPadding = width + right;\n\n const minYWithPadding = 0 - top;\n const maxYWithPadding = height + bottom;\n\n let dx = 0;\n let dy = 0;\n\n // x 方向\n if (minX < minXWithPadding) {\n dx = -minX;\n } else if (maxX > maxXWithPadding) {\n dx = maxXWithPadding - maxX;\n }\n\n // y 方向\n if (minY < minYWithPadding) {\n dy = -minY;\n } else if (maxY > maxYWithPadding) {\n dy = maxYWithPadding - maxY;\n }\n\n return { dx, dy };\n}\n","import type { IPoint, IPointLike } from '@visactor/vutils';\nimport {\n clamp,\n getDecimalPlaces,\n isArray,\n isNumber,\n isValidNumber,\n pi,\n pi2,\n Point,\n PointService\n} from '@visactor/vutils';\nimport { application } from '../application';\nimport { AttributeUpdateType } from '../common/enums';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport type {\n EasingType,\n IArcGraphicAttribute,\n IArea,\n IAreaCacheItem,\n ICubicBezierCurve,\n ICurve,\n ICustomPath2D,\n IGraphic,\n IGroup,\n ILine,\n ILineAttribute,\n ILinearGradient,\n IRect,\n IRectAttribute,\n IRectGraphicAttribute,\n ISegment,\n IShadowRoot\n} from '../interface';\nimport { ACustomAnimate } from './animate';\nimport { Easing } from './easing';\nimport { pointInterpolation } from '../common/utils';\nimport { divideCubic } from '../common/segment/curve/cubic-bezier';\n\nexport class IncreaseCount extends ACustomAnimate<{ text: string | number }> {\n declare valid: boolean;\n\n private fromNumber: number;\n private toNumber: number;\n private decimalLength: number;\n\n constructor(\n from: { text: string | number },\n to: { text: string | number },\n duration: number,\n easing: EasingType,\n params?: { fixed?: boolean }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record | void {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromNumber = isNumber(this.from?.text) ? this.from?.text : Number.parseFloat(this.from?.text);\n this.toNumber = isNumber(this.to?.text) ? this.to?.text : Number.parseFloat(this.to?.text);\n if (!Number.isFinite(this.toNumber)) {\n this.fromNumber = 0;\n }\n if (!Number.isFinite(this.toNumber)) {\n this.valid = false;\n }\n if (this.valid !== false) {\n this.decimalLength =\n this.params?.fixed ?? Math.max(getDecimalPlaces(this.fromNumber), getDecimalPlaces(this.toNumber));\n }\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n if (end) {\n out.text = this.toNumber;\n } else {\n out.text = (this.fromNumber + (this.toNumber - this.fromNumber) * ratio).toFixed(this.decimalLength);\n }\n }\n}\n\nenum Direction {\n LEFT_TO_RIGHT = 0,\n RIGHT_TO_LEFT = 1,\n TOP_TO_BOTTOM = 2,\n BOTTOM_TO_TOP = 3,\n STROKE = 4\n}\nexport class FadeInPlus extends ACustomAnimate {\n declare direction: number;\n declare toFill: string;\n declare toStroke: string;\n declare fillGradient: ILinearGradient;\n declare strokeGradient: ILinearGradient;\n declare fill: boolean;\n declare stroke: boolean;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { direction?: number; fill?: boolean; stroke?: boolean }\n ) {\n super(from, to, duration, easing, params);\n const { direction = Direction.LEFT_TO_RIGHT, fill = true, stroke = true } = params || {};\n this.direction = direction;\n this.fill = fill;\n this.stroke = stroke;\n this.fillGradient = {\n gradient: 'linear',\n stops: []\n };\n this.strokeGradient = {\n gradient: 'linear',\n stops: []\n };\n }\n\n getEndProps(): Record {\n return {\n fill: this.toFill,\n stroke: this.toStroke\n };\n }\n\n onBind(): void {\n // this.to = parseFloat(this.target.getAnimatePropByName('text'));\n this.toFill = this.target.getComputedAttribute('fill');\n this.toStroke = this.target.getComputedAttribute('stroke');\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.toFill) {\n return;\n }\n if (!this.toStroke) {\n return;\n }\n switch (this.direction) {\n case Direction.RIGHT_TO_LEFT:\n this.rightToLeft(end, ratio, out);\n break;\n case Direction.TOP_TO_BOTTOM:\n this.topToBottom(end, ratio, out);\n break;\n case Direction.BOTTOM_TO_TOP:\n this.bottomToTop(end, ratio, out);\n break;\n case Direction.STROKE:\n this.strokePath(end, ratio, out);\n break;\n default:\n this.leftToRight(end, ratio, out);\n break;\n }\n }\n\n leftToRight(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const toStrokeColor = this.toStroke;\n this.strokeGradient.x0 = 0;\n this.strokeGradient.y0 = 0;\n this.strokeGradient.x1 = 1;\n this.strokeGradient.y1 = 0;\n this.strokeGradient.stops = [\n { offset: 0, color: toStrokeColor },\n { offset: ratio, color: toStrokeColor },\n { offset: Math.min(1, ratio * 6), color: 'transparent' }\n ];\n out.stroke = this.strokeGradient;\n // const dashLen = 300;\n // const offset = ratio * dashLen;\n // out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n\n strokePath(end: boolean, ratio: number, out: Record) {\n if (this.fill) {\n const toFillColor = this.toFill;\n this.fillGradient.x0 = 0;\n this.fillGradient.y0 = 0;\n this.fillGradient.x1 = 1;\n this.fillGradient.y1 = 0;\n this.fillGradient.stops = [\n { offset: 0, color: toFillColor },\n { offset: ratio, color: toFillColor },\n { offset: Math.min(1, ratio * 2), color: 'transparent' }\n ];\n out.fill = this.fillGradient;\n }\n if (this.stroke) {\n const dashLen = 300;\n const offset = ratio * dashLen;\n out.lineDash = [offset, dashLen - offset];\n }\n return;\n }\n rightToLeft(end: boolean, ratio: number, out: Record) {\n return;\n }\n topToBottom(end: boolean, ratio: number, out: Record) {\n return;\n }\n bottomToTop(end: boolean, ratio: number, out: Record) {\n return;\n }\n}\n\nexport class InputText extends ACustomAnimate<{ text: string }> {\n declare valid: boolean;\n declare target: IGraphic;\n\n private fromText: string = '';\n private toText: string | string[] = '';\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return {\n text: this.to\n };\n }\n\n onBind(): void {\n this.fromText = this.from?.text ?? '';\n this.toText = this.to?.text || '';\n if (!this.toText || (isArray(this.toText) && this.toText.length === 0)) {\n this.valid = false;\n }\n if (isArray(this.toText)) {\n this.toText = this.toText.map(item => (item || '').toString());\n }\n // else {\n // this.toText = this.toText.toString();\n // // const root = this.target.attachShadow();\n // // const line = application.graphicService.creator.line({\n // // x: 0,\n // // y: 0,\n // // points: [\n // // { x: 0, y: 0 },\n // // { x: 0, y: this.target.getComputedAttribute('fontSize') }\n // // ],\n // // stroke: 'black',\n // // lineWidth: 1\n // // });\n // // root.add(line);\n // }\n }\n\n onEnd(): void {\n this.target.detachShadow();\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n return;\n }\n // update text\n const fromCount = this.fromText.length;\n const toTextIsArray = isArray(this.toText);\n const toCount = toTextIsArray\n ? (this.toText as unknown as string[]).reduce((c, t) => c + (t || '').length, 0)\n : this.toText.length;\n const count = Math.ceil(fromCount + (toCount - fromCount) * ratio);\n\n if (toTextIsArray) {\n out.text = [];\n let len = 0;\n (this.toText as unknown as string[]).forEach(t => {\n if (len + t.length > count) {\n out.text.push(t.substr(0, count - len));\n len = count;\n } else {\n out.text.push(t);\n len += t.length;\n }\n });\n } else {\n out.text = (this.toText as string).substr(0, count);\n }\n // console.log(out.text)\n\n // update line position\n // const line = this.target.shadowRoot?.at(0) as IGraphic;\n // const endX = (this.target as any).clipedWidth + 2;\n // line.setAttribute('x', endX);\n }\n}\n\nexport class StreamLight extends ACustomAnimate {\n declare valid: boolean;\n declare target: IGraphic;\n\n declare rect: IRect;\n declare line: ILine;\n declare area: IArea;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { attribute?: Partial; streamLength?: number; isHorizontal?: boolean }\n ) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return {};\n }\n\n onStart(): void {\n if (!this.target) {\n return;\n }\n if (this.target.type === 'rect') {\n this.onStartRect();\n } else if (this.target.type === 'line') {\n this.onStartLineOrArea('line');\n } else if (this.target.type === 'area') {\n this.onStartLineOrArea('area');\n }\n }\n\n onStartLineOrArea(type: 'line' | 'area') {\n const root = this.target.attachShadow();\n const line = application.graphicService.creator[type]({\n ...this.params?.attribute\n });\n this[type] = line;\n line.pathProxy = new CustomPath2D();\n root.add(line);\n }\n\n onStartRect(): void {\n const root = this.target.attachShadow();\n\n const isHorizontal = this.params?.isHorizontal ?? true;\n const sizeAttr = isHorizontal ? 'height' : 'width';\n const otherSizeAttr = isHorizontal ? 'width' : 'height';\n const size = this.target.AABBBounds[sizeAttr]();\n const y = isHorizontal ? 0 : this.target.AABBBounds.y1;\n\n const rect = application.graphicService.creator.rect({\n [sizeAttr]: size,\n fill: '#bcdeff',\n shadowBlur: 30,\n shadowColor: '#bcdeff',\n ...this.params?.attribute,\n x: 0,\n y,\n [otherSizeAttr]: 0\n });\n this.rect = rect;\n root.add(rect);\n }\n\n onBind(): void {\n return;\n }\n\n onEnd(): void {\n this.target.detachShadow();\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.rect) {\n return this.onUpdateRect(end, ratio, out);\n } else if (this.line || this.area) {\n return this.onUpdateLineOrArea(end, ratio, out);\n }\n }\n\n protected onUpdateRect(end: boolean, ratio: number, out: Record): void {\n const isHorizontal = this.params?.isHorizontal ?? true;\n const parentAttr = (this.target as any).attribute;\n if (isHorizontal) {\n const parentWidth = parentAttr.width ?? Math.abs(parentAttr.x1 - parentAttr.x) ?? 250;\n const streamLength = this.params?.streamLength ?? parentWidth;\n const maxLength = this.params?.attribute?.width ?? 60;\n // 起点,rect x右端点 对齐 parent左端点\n // 如果parent.x1 < parent.x, 需要把rect属性移到parent x1的位置上, 因为初始 rect.x = parent.x\n const startX = -maxLength;\n // 插值\n const currentX = startX + (streamLength - startX) * ratio;\n // 位置限定 > 0\n const x = Math.max(currentX, 0);\n // 宽度计算\n const w = Math.min(Math.min(currentX + maxLength, maxLength), streamLength - currentX);\n // 如果 rect右端点 超出 parent右端点, 宽度动态调整\n const width = w + x > parentWidth ? Math.max(parentWidth - x, 0) : w;\n this.rect.setAttributes(\n {\n x,\n width,\n dx: Math.min(parentAttr.x1 - parentAttr.x, 0)\n } as any,\n false,\n {\n type: AttributeUpdateType.ANIMATE_PLAY,\n animationState: {\n ratio,\n end\n }\n }\n );\n } else {\n const parentHeight = parentAttr.height ?? Math.abs(parentAttr.y1 - parentAttr.y) ?? 250;\n const streamLength = this.params?.streamLength ?? parentHeight;\n const maxLength = this.params?.attribute?.height ?? 60;\n // 起点,y上端点 对齐 parent下端点\n const startY = parentHeight;\n // 插值\n const currentY = startY - (streamLength + maxLength) * ratio;\n // 位置限定 < parentHeight\n let y = Math.min(currentY, parentHeight);\n // 高度最小值\n const h = Math.min(parentHeight - currentY, maxLength);\n // 如果 rect上端点=y 超出 parent上端点 = 0, 则高度不断变小\n let height;\n if (y <= 0) {\n // 必须先得到高度再将y置为0, 顺序很重要\n height = Math.max(y + h, 0);\n y = 0;\n } else {\n height = h;\n }\n this.rect.setAttributes(\n {\n y,\n height,\n dy: Math.min(parentAttr.y1 - parentAttr.y, 0)\n } as any,\n false,\n {\n type: AttributeUpdateType.ANIMATE_PLAY,\n animationState: {\n ratio,\n end\n }\n }\n );\n }\n }\n\n protected onUpdateLineOrArea(end: boolean, ratio: number, out: Record) {\n const target = this.line || this.area;\n if (!target) {\n return;\n }\n const customPath = target.pathProxy as ICustomPath2D;\n const targetLine = this.target as ILine | IArea;\n if (targetLine.cache || targetLine.cacheArea) {\n this._onUpdateLineOrAreaWithCache(customPath, targetLine, end, ratio, out);\n } else {\n this._onUpdateLineWithoutCache(customPath, targetLine, end, ratio, out);\n }\n const targetAttrs = targetLine.attribute;\n target.setAttributes({\n stroke: targetAttrs.stroke,\n ...target.attribute\n });\n target.addUpdateBoundTag();\n }\n\n // 针对有cache的linear\n protected _onUpdateLineOrAreaWithCache(\n customPath: ICustomPath2D,\n g: ILine | IArea,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n customPath.clear();\n if (g.type === 'line') {\n let cache = g.cache;\n if (!Array.isArray(cache)) {\n cache = [cache];\n }\n const totalLen = cache.reduce((l: any, c: any) => l + c.getLength(), 0);\n const curves: ICurve[] = [];\n cache.forEach((c: any) => {\n c.curves.forEach((ci: any) => curves.push(ci));\n });\n return this._updateCurves(customPath, curves, totalLen, ratio);\n } else if (g.type === 'area' && g.cacheArea?.top?.curves) {\n const cache = g.cacheArea as IAreaCacheItem;\n const totalLen = cache.top.curves.reduce((a, b) => a + b.getLength(), 0);\n return this._updateCurves(customPath, cache.top.curves, totalLen, ratio);\n }\n }\n\n protected _updateCurves(customPath: ICustomPath2D, curves: ICurve[], totalLen: number, ratio: number) {\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n let lastLen = 0;\n let start = false;\n for (let i = 0; i < curves.length; i++) {\n if (curves[i].defined !== false) {\n const curveItem = curves[i];\n const len = curveItem.getLength();\n const startPercent = 1 - (lastLen + len - startLen) / len;\n let endPercent = 1 - (lastLen + len - endLen) / len;\n let curveForStart: ICubicBezierCurve;\n if (lastLen < startLen && lastLen + len > startLen) {\n start = true;\n if (curveItem.p2 && curveItem.p3) {\n const [_, curve2] = divideCubic(curveItem as ICubicBezierCurve, startPercent);\n customPath.moveTo(curve2.p0.x, curve2.p0.y);\n curveForStart = curve2;\n // console.log(curve2.p0.x, curve2.p0.y);\n } else {\n const p = curveItem.getPointAt(startPercent);\n customPath.moveTo(p.x, p.y);\n }\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n if (curveItem.p2 && curveItem.p3) {\n if (curveForStart) {\n endPercent = (endLen - startLen) / curveForStart.getLength();\n }\n const [curve1] = divideCubic(curveForStart || (curveItem as ICubicBezierCurve), endPercent);\n customPath.bezierCurveTo(curve1.p1.x, curve1.p1.y, curve1.p2.x, curve1.p2.y, curve1.p3.x, curve1.p3.y);\n } else {\n const p = curveItem.getPointAt(endPercent);\n customPath.lineTo(p.x, p.y);\n }\n break;\n } else if (start) {\n if (curveItem.p2 && curveItem.p3) {\n const curve = curveForStart || curveItem;\n customPath.bezierCurveTo(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n } else {\n customPath.lineTo(curveItem.p1.x, curveItem.p1.y);\n }\n }\n lastLen += len;\n }\n }\n }\n\n // 只针对最简单的linear\n protected _onUpdateLineWithoutCache(\n customPath: ICustomPath2D,\n line: ILine,\n end: boolean,\n ratio: number,\n out: Record\n ) {\n const { points, curveType } = line.attribute;\n if (!points || points.length < 2 || curveType !== 'linear') {\n return;\n }\n let totalLen = 0;\n for (let i = 1; i < points.length; i++) {\n totalLen += PointService.distancePP(points[i], points[i - 1]);\n }\n const startLen = totalLen * ratio;\n const endLen = Math.min(startLen + this.params?.streamLength ?? 10, totalLen);\n const nextPoints = [];\n let lastLen = 0;\n for (let i = 1; i < points.length; i++) {\n const len = PointService.distancePP(points[i], points[i - 1]);\n if (lastLen < startLen && lastLen + len > startLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - startLen) / len));\n }\n if (lastLen < endLen && lastLen + len > endLen) {\n nextPoints.push(PointService.pointAtPP(points[i - 1], points[i], 1 - (lastLen + len - endLen) / len));\n break;\n } else if (nextPoints.length) {\n nextPoints.push(points[i]);\n }\n lastLen += len;\n }\n\n if (!nextPoints.length || nextPoints.length < 2) {\n return;\n }\n customPath.clear();\n customPath.moveTo(nextPoints[0].x, nextPoints[0].y);\n for (let i = 1; i < nextPoints.length; i++) {\n customPath.lineTo(nextPoints[i].x, nextPoints[i].y);\n }\n }\n}\n\nexport class Meteor extends ACustomAnimate {\n declare size: number;\n declare target: IGraphic;\n declare root: IShadowRoot;\n declare posList: IPoint[];\n\n get lastPos(): IPoint {\n return this.posList[this.posList.length - 1];\n }\n\n constructor(size: number, duration: number, easing: EasingType, params?: any) {\n super(null, null, duration, easing, params);\n this.size = size;\n this.posList = [];\n }\n\n onBind(): void {\n const root = this.target.attachShadow();\n this.root = root;\n for (let i = 0; i < this.size; i++) {\n const g = this.target.clone();\n const scale = Math.min(((this.size - i) / this.size) * 3, 1);\n const opacity = Math.min(0.2 + 0.7 / this.size);\n g.setAttributes({ x: 0, y: 0, dx: 0, dy: 0, scaleX: scale, scaleY: scale, opacity }, false, {\n type: AttributeUpdateType.ANIMATE_BIND\n });\n root.add(g);\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (end) {\n this.target.detachShadow();\n this.posList.length = 0;\n return;\n }\n\n const x = this.target.getComputedAttribute('x');\n const y = this.target.getComputedAttribute('y');\n\n const nextPos = new Point(x, y);\n if (!this.posList.length) {\n this.posList.push(nextPos);\n return;\n }\n\n this.target.shadowRoot.forEachChildren((g: IGraphic, i) => {\n const pos = this.posList[Math.max(this.posList.length - i - 1, 0)];\n g.setAttributes(\n {\n x: pos.x - x,\n y: pos.y - y\n },\n false\n );\n });\n\n this.posList.push(nextPos);\n }\n}\n\nexport class MotionPath extends ACustomAnimate {\n declare valid: boolean;\n declare pathLength: number;\n declare path: CustomPath2D;\n declare distance: number;\n declare initAngle: number;\n declare changeAngle: boolean;\n declare cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n path: CustomPath2D;\n distance: number;\n cb?: (from: any, to: any, ratio: number, target: IGraphic) => void;\n initAngle?: number;\n changeAngle?: boolean;\n }\n ) {\n super(from, to, duration, easing, params);\n if (params) {\n this.pathLength = params.path.getLength();\n this.path = params.path;\n this.distance = params.distance;\n this.to = params.distance * this.pathLength;\n this.initAngle = params.initAngle ?? 0;\n this.changeAngle = !!params.changeAngle;\n this.cb = params.cb;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // 计算位置\n const at = this.to * ratio;\n const { pos, angle } = this.path.getAttrAt(at);\n out.x = pos.x;\n out.y = pos.y;\n if (this.changeAngle) {\n out.angle = angle + this.initAngle;\n }\n this.cb && this.cb(this.from, this.to, ratio, this.target as IGraphic);\n // out.angle = angle + this.initAngle;\n }\n}\n\nexport class TagPointsUpdate extends ACustomAnimate<{ points?: IPointLike[]; segments?: ISegment[] }> {\n protected fromPoints: IPointLike[];\n protected toPoints: IPointLike[];\n protected points: IPointLike[];\n protected interpolatePoints: [IPointLike, IPointLike][];\n protected newPointAnimateType: 'grow' | 'appear' | 'clip';\n protected clipRange: number;\n protected shrinkClipRange: number;\n protected clipRangeByDimension: 'x' | 'y';\n protected segmentsCache: number[];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: { newPointAnimateType?: 'grow' | 'appear' | 'clip'; clipRangeByDimension?: 'x' | 'y' }\n ) {\n super(from, to, duration, easing, params);\n this.newPointAnimateType = params?.newPointAnimateType ?? 'grow';\n this.clipRangeByDimension = params?.clipRangeByDimension ?? 'x';\n }\n\n private getPoints(attribute: typeof this.from, cache = false): IPointLike[] {\n if (attribute.points) {\n return attribute.points;\n }\n\n if (attribute.segments) {\n const points = [] as IPointLike[];\n if (!this.segmentsCache) {\n this.segmentsCache = [];\n }\n attribute.segments.map(segment => {\n if (segment.points) {\n points.push(...segment.points);\n }\n if (cache) {\n this.segmentsCache.push(segment.points?.length ?? 0);\n }\n });\n return points;\n }\n return [];\n }\n\n onBind(): void {\n const originFromPoints = this.getPoints(this.from);\n const originToPoints = this.getPoints(this.to, true);\n this.fromPoints = !originFromPoints ? [] : !Array.isArray(originFromPoints) ? [originFromPoints] : originFromPoints;\n this.toPoints = !originToPoints ? [] : !Array.isArray(originToPoints) ? [originToPoints] : originToPoints;\n\n const tagMap = new Map();\n this.fromPoints.forEach(point => {\n if (point.context) {\n tagMap.set(point.context, point);\n }\n });\n let firstMatchedIndex = Infinity;\n let lastMatchedIndex = -Infinity;\n let firstMatchedPoint: IPointLike;\n let lastMatchedPoint: IPointLike;\n for (let i = 0; i < this.toPoints.length; i += 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n firstMatchedIndex = i;\n firstMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n for (let i = this.toPoints.length - 1; i >= 0; i -= 1) {\n if (tagMap.has(this.toPoints[i].context)) {\n lastMatchedIndex = i;\n lastMatchedPoint = tagMap.get(this.toPoints[i].context);\n break;\n }\n }\n\n if (this.newPointAnimateType === 'clip') {\n if (this.toPoints.length !== 0) {\n if (Number.isFinite(lastMatchedIndex)) {\n this.clipRange =\n this.toPoints[lastMatchedIndex][this.clipRangeByDimension] /\n this.toPoints[this.toPoints.length - 1][this.clipRangeByDimension];\n if (this.clipRange === 1) {\n this.shrinkClipRange =\n this.toPoints[lastMatchedIndex][this.clipRangeByDimension] /\n this.fromPoints[this.fromPoints.length - 1][this.clipRangeByDimension];\n }\n if (!isValidNumber(this.clipRange)) {\n this.clipRange = 0;\n } else {\n this.clipRange = clamp(this.clipRange, 0, 1);\n }\n } else {\n this.clipRange = 0;\n }\n }\n }\n // TODO: shrink removed points\n // if no point is matched, animation should start from toPoint[0]\n let prevMatchedPoint = this.toPoints[0];\n this.interpolatePoints = this.toPoints.map((point, index) => {\n const matchedPoint = tagMap.get(point.context);\n if (matchedPoint) {\n prevMatchedPoint = matchedPoint;\n return [matchedPoint, point];\n }\n // appear new point\n if (this.newPointAnimateType === 'appear' || this.newPointAnimateType === 'clip') {\n return [point, point];\n }\n // grow new point\n if (index < firstMatchedIndex && firstMatchedPoint) {\n return [firstMatchedPoint, point];\n } else if (index > lastMatchedIndex && lastMatchedPoint) {\n return [lastMatchedPoint, point];\n }\n return [prevMatchedPoint, point];\n });\n this.points = this.interpolatePoints.map(interpolate => {\n const fromPoint = interpolate[0];\n const toPoint = interpolate[1];\n const newPoint = new Point(fromPoint.x, fromPoint.y, fromPoint.x1, fromPoint.y1);\n newPoint.defined = toPoint.defined;\n newPoint.context = toPoint.context;\n return newPoint;\n });\n }\n\n onFirstRun(): void {\n const lastClipRange = this.target.attribute.clipRange;\n if (isValidNumber(lastClipRange * this.clipRange)) {\n this.clipRange *= lastClipRange;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = pointInterpolation(this.interpolatePoints[index][0], this.interpolatePoints[index][1], ratio);\n newPoint.context = point.context;\n return newPoint;\n });\n if (this.clipRange) {\n if (this.shrinkClipRange) {\n // 折线变短\n if (!end) {\n out.points = this.fromPoints;\n out.clipRange = this.clipRange - (this.clipRange - this.shrinkClipRange) * ratio;\n } else {\n out.points = this.toPoints;\n out.clipRange = 1;\n }\n return;\n }\n out.clipRange = this.clipRange + (1 - this.clipRange) * ratio;\n }\n if (this.segmentsCache && this.to.segments) {\n let start = 0;\n out.segments = this.to.segments.map((segment, index) => {\n const end = start + this.segmentsCache[index];\n const points = this.points.slice(start, end);\n start = end;\n return {\n ...segment,\n points\n };\n });\n } else {\n out.points = this.points;\n }\n }\n}\n\nexport class GraphicAnimate extends ACustomAnimate {\n graphic: IGraphic;\n\n constructor(from: any, to: any, duration: number, easing: EasingType, params?: { graphic: IGraphic }) {\n super(from, to, duration, easing, params);\n this.graphic = params?.graphic;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this.graphic) {\n return;\n }\n Object.keys(this.from).forEach(k => {\n out[k] = this.from[k] + (this.to[k] - this.from[k]) * ratio;\n });\n }\n}\n\nexport class ClipGraphicAnimate extends ACustomAnimate {\n private _group?: IGroup;\n private _clipGraphic?: IGraphic;\n protected clipFromAttribute?: any;\n protected clipToAttribute?: any;\n\n private _lastClip?: boolean;\n private _lastPath?: IGraphic[];\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { group: IGroup; clipGraphic: IGraphic }\n ) {\n super(null, null, duration, easing, params);\n this.clipFromAttribute = from;\n this.clipToAttribute = to;\n this._group = params?.group;\n this._clipGraphic = params?.clipGraphic;\n }\n\n onBind() {\n if (this._group && this._clipGraphic) {\n this._lastClip = this._group.attribute.clip;\n this._lastPath = this._group.attribute.path;\n this._group.setAttributes(\n {\n clip: true,\n path: [this._clipGraphic]\n },\n false,\n { type: AttributeUpdateType.ANIMATE_BIND }\n );\n }\n }\n\n onEnd() {\n if (this._group) {\n this._group.setAttributes(\n {\n clip: this._lastClip,\n path: this._lastPath\n },\n false,\n { type: AttributeUpdateType.ANIMATE_END }\n );\n }\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._clipGraphic) {\n return;\n }\n const res: any = {};\n Object.keys(this.clipFromAttribute).forEach(k => {\n res[k] = this.clipFromAttribute[k] + (this.clipToAttribute[k] - this.clipFromAttribute[k]) * ratio;\n });\n this._clipGraphic.setAttributes(res, false, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: { ratio, end }\n });\n }\n}\n\nexport class ClipAngleAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startAngle?: number;\n radius?: number;\n orient?: 'clockwise' | 'anticlockwise';\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startAngle = params?.startAngle ?? 0;\n const orient = params?.orient ?? 'clockwise';\n\n let arcStartAngle = 0;\n let arcEndAngle = 0;\n if (orient === 'anticlockwise') {\n arcEndAngle = animationType === 'in' ? startAngle + Math.PI * 2 : startAngle;\n arcEndAngle = startAngle + Math.PI * 2;\n } else {\n arcStartAngle = startAngle;\n arcEndAngle = animationType === 'out' ? startAngle + Math.PI * 2 : startAngle;\n }\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: params?.radius ?? (width + height) / 2,\n innerRadius: 0,\n startAngle: arcStartAngle,\n endAngle: arcEndAngle,\n fill: true\n });\n let fromAttributes: Partial;\n let toAttributes: Partial;\n if (orient === 'anticlockwise') {\n fromAttributes = { startAngle: startAngle + Math.PI * 2 };\n toAttributes = { startAngle: startAngle };\n } else {\n fromAttributes = { endAngle: startAngle };\n toAttributes = { endAngle: startAngle + Math.PI * 2 };\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipRadiusAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n center?: { x: number; y: number };\n startRadius?: number;\n endRadius?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = groupAttribute.width ?? 0;\n const height = groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const startRadius = params?.startRadius ?? 0;\n const endRadius = params?.endRadius ?? Math.sqrt((width / 2) ** 2 + (height / 2) ** 2);\n\n const arc = application.graphicService.creator.arc({\n x: params?.center?.x ?? width / 2,\n y: params?.center?.y ?? height / 2,\n outerRadius: animationType === 'out' ? endRadius : startRadius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: true\n });\n const fromAttributes: Partial = { outerRadius: startRadius };\n const toAttributes: Partial = { outerRadius: endRadius };\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: arc }\n );\n }\n}\n\nexport class ClipDirectionAnimate extends ClipGraphicAnimate {\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: {\n group: IGroup;\n direction?: 'x' | 'y';\n orient?: 'positive' | 'negative';\n width?: number;\n height?: number;\n animationType?: 'in' | 'out';\n }\n ) {\n const groupAttribute = params?.group?.attribute ?? {};\n const width = params?.width ?? groupAttribute.width ?? 0;\n const height = params?.height ?? groupAttribute.height ?? 0;\n\n const animationType = params?.animationType ?? 'in';\n const direction = params?.direction ?? 'x';\n const orient = params?.orient ?? 'positive';\n\n const rect = application.graphicService.creator.rect({\n x: 0,\n y: 0,\n width: animationType === 'in' && direction === 'x' ? 0 : width,\n height: animationType === 'in' && direction === 'y' ? 0 : height,\n fill: true\n });\n let fromAttributes: Partial = {};\n let toAttributes: Partial = {};\n if (direction === 'y') {\n if (orient === 'negative') {\n fromAttributes = { y: height, height: 0 };\n toAttributes = { y: 0, height: height };\n } else {\n fromAttributes = { height: 0 };\n toAttributes = { height: height };\n }\n } else {\n if (orient === 'negative') {\n fromAttributes = { x: width, width: 0 };\n toAttributes = { x: 0, width: width };\n } else {\n fromAttributes = { width: 0 };\n toAttributes = { width: width };\n }\n }\n super(\n animationType === 'in' ? fromAttributes : toAttributes,\n animationType === 'in' ? toAttributes : fromAttributes,\n duration,\n easing,\n { group: params?.group, clipGraphic: rect }\n );\n }\n}\n\ntype RotateSphereParams =\n | {\n center: { x: number; y: number; z: number };\n r: number;\n cb?: (out: any) => void;\n }\n | (() => any);\n\nexport class RotateBySphereAnimate extends ACustomAnimate {\n declare params: RotateSphereParams;\n declare theta: number;\n declare phi: number;\n\n onStart(): void {\n const { center, r } = typeof this.params === 'function' ? this.params() : this.params;\n const startX = this.target.getComputedAttribute('x');\n const startY = this.target.getComputedAttribute('y');\n const startZ = this.target.getComputedAttribute('z');\n const phi = Math.acos((startY - center.y) / r);\n let theta = Math.acos((startX - center.x) / r / Math.sin(phi));\n if (startZ - center.z < 0) {\n theta = pi2 - theta;\n }\n this.theta = theta;\n this.phi = phi;\n }\n\n onBind() {\n return;\n }\n\n onEnd() {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.phi == null || this.theta == null) {\n return;\n }\n const { center, r, cb } = typeof this.params === 'function' ? this.params() : this.params;\n const deltaAngle = Math.PI * 2 * ratio;\n const theta = this.theta + deltaAngle;\n const phi = this.phi;\n const x = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const y = r * Math.cos(phi) + center.y;\n const z = r * Math.sin(phi) * Math.sin(theta) + center.z;\n out.x = x;\n out.y = y;\n out.z = z;\n // out.beta = phi;\n out.alpha = theta + pi / 2;\n while (out.alpha > pi2) {\n out.alpha -= pi2;\n }\n out.alpha = pi2 - out.alpha;\n\n out.zIndex = out.z * -10000;\n\n cb && cb(out);\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGroup;\n\n constructor(to: Record, duration: number, easing: EasingType) {\n super({}, to, duration, easing);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind(): void {\n Object.keys(this.to).forEach(k => {\n this.from[k] = this.target.getComputedAttribute(k);\n });\n return;\n }\n\n onEnd(): void {\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this.to,\n this.from\n );\n }\n}\n\nexport class AnimateGroup extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onStart(): void {\n this.customAnimates.forEach(a => {\n a.onStart();\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n\nexport class AnimateGroup1 extends ACustomAnimate {\n declare customAnimates: ACustomAnimate[];\n declare updating: boolean;\n\n constructor(duration: number, customAnimates: ACustomAnimate[]) {\n super(null, null, duration, 'linear');\n this.customAnimates = customAnimates;\n }\n\n initAnimates() {\n this.customAnimates.forEach(a => {\n a.step = this.step;\n a.subAnimate = this.subAnimate;\n a.target = this.target;\n });\n }\n\n getEndProps(): Record {\n const props = {};\n this.customAnimates.forEach(a => {\n Object.assign(props, a.getEndProps());\n });\n return props;\n }\n\n onBind(): void {\n this.initAnimates();\n this.customAnimates.forEach(a => {\n a.onBind();\n });\n return;\n }\n\n onEnd(): void {\n this.customAnimates.forEach(a => {\n a.onEnd();\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.updating) {\n return;\n }\n this.updating = true;\n this.customAnimates.forEach(a => {\n const easing = a.easing;\n const easingFunc = typeof easing === 'string' ? Easing[easing] : easing;\n ratio = easingFunc(ratio);\n a.onUpdate(end, ratio, out);\n });\n this.updating = false;\n return;\n }\n}\n","import type { IText, ITextGraphicAttribute, EasingType } from '@visactor/vrender-core';\nimport { IncreaseCount } from '@visactor/vrender-core';\nimport type { ILabelAnimation, ILabelUpdateAnimation, ILabelUpdateChannelAnimation, LabelContent } from '../type';\nimport { array, isArray, isEmpty, isValidNumber } from '@visactor/vutils';\n\nconst fadeIn = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n }\n };\n};\n\nconst fadeOut = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n\nconst animationEffects = { fadeIn, fadeOut };\n\nexport function getAnimationAttributes(\n textAttribute: ITextGraphicAttribute,\n type: 'fadeIn' | 'fadeOut'\n): {\n from: any;\n to: any;\n} {\n return animationEffects[type]?.(textAttribute) ?? { from: {}, to: {} };\n}\n\nexport function updateAnimation(\n prev: LabelContent['text'],\n next: LabelContent['text'],\n animationConfig: ILabelUpdateAnimation | ILabelUpdateChannelAnimation[]\n) {\n if (!isArray(animationConfig)) {\n const { duration, easing, increaseEffect = true } = animationConfig;\n prev.animate().to(next.attribute, duration, easing);\n if (increaseEffect && prev.type === 'text' && next.type === 'text') {\n playIncreaseCount(prev as IText, next as IText, duration, easing);\n }\n return;\n }\n\n animationConfig.forEach(cfg => {\n const { duration, easing, increaseEffect = true, channel } = cfg;\n const { to } = update(prev, next, channel, cfg.options);\n if (!isEmpty(to)) {\n prev.animate().to(to, duration, easing);\n }\n\n if (increaseEffect && prev.type === 'text' && next.type === 'text') {\n playIncreaseCount(prev as IText, next as IText, duration, easing);\n }\n });\n}\n\nexport const update = (\n prev: LabelContent['text'],\n next: LabelContent['text'],\n channel?: string[],\n options?: ILabelUpdateChannelAnimation['options']\n) => {\n const from = Object.assign({}, prev.attribute);\n const to = Object.assign({}, next.attribute);\n array(options?.excludeChannels).forEach(key => {\n delete to[key];\n });\n Object.keys(to).forEach(key => {\n if (channel && !channel.includes(key)) {\n delete to[key];\n }\n });\n return { from, to };\n};\n\nexport function playIncreaseCount(prev: IText, next: IText, duration: number, easing: EasingType) {\n if (\n prev.attribute.text !== next.attribute.text &&\n isValidNumber(Number(prev.attribute.text) * Number(next.attribute.text))\n ) {\n prev\n .animate()\n .play(\n new IncreaseCount(\n { text: prev.attribute.text as string },\n { text: next.attribute.text as string },\n duration,\n easing\n )\n );\n }\n}\n\nexport const DefaultLabelAnimation: ILabelAnimation = {\n mode: 'same-time',\n duration: 300,\n easing: 'linear' as EasingType\n};\n","import type { IArea, ILine } from '@visactor/vrender-core';\nimport type { IPoint, Quadrant } from './type';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { radianToDegree, isValidNumber, isRectIntersect, normalizeAngle, polarToCartesian } from '@visactor/vutils';\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\nexport const labelingPoint = (textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) => {\n if (!textBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n const anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n let offsetX = 0;\n let offsetY = 0;\n if (graphicBounds) {\n offsetX = Math.abs(graphicBounds.x1 - graphicBounds.x2) / 2;\n offsetY = Math.abs(graphicBounds.y1 - graphicBounds.y2) / 2;\n }\n\n const angle = {\n 'top-right': -235,\n 'top-left': 235,\n 'bottom-right': 45,\n 'bottom-left': -45\n };\n\n switch (position) {\n case 'top':\n sy = -1;\n break;\n case 'bottom':\n sy = 1;\n break;\n case 'left':\n sx = -1;\n break;\n case 'right':\n sx = 1;\n break;\n case 'bottom-left':\n case 'bottom-right':\n case 'top-left':\n case 'top-right':\n sx = Math.sin(angle[position] * (Math.PI / 180));\n sy = Math.cos(angle[position] * (Math.PI / 180));\n break;\n case 'center':\n sx = 0;\n sy = 0;\n break;\n }\n\n const x = anchorX + sx * (offset + offsetX) + Math.sign(sx) * (width / 2);\n const y = anchorY + sy * (offset + offsetY) + Math.sign(sy) * (height / 2);\n\n return { x, y };\n};\n\nexport const getPointsOfLineArea = (graphic: ILine | IArea): IPointLike[] => {\n if (!graphic || !graphic.attribute) {\n return [];\n }\n\n const { points, segments } = graphic.attribute;\n\n if (segments && segments.length) {\n const res: IPointLike[] = [];\n\n segments.forEach(seg => {\n const segPoints = seg.points;\n\n segPoints.forEach(point => {\n res.push(point);\n });\n });\n\n return res;\n }\n\n return points;\n};\n\nexport function labelingLineOrArea(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position: string = 'end',\n offset = 0\n) {\n if (!textBounds || !graphicBounds) {\n return { x: Infinity, y: Infinity };\n }\n\n const { x1, x2 } = textBounds;\n const width = Math.abs(x2 - x1);\n\n const anchorX = graphicBounds.x1;\n const anchorY = graphicBounds.y1;\n\n let x = anchorX;\n const y = anchorY;\n\n if (position === 'end') {\n x = anchorX + width / 2 + offset;\n } else if (position === 'start') {\n x = anchorX - width / 2 - offset;\n }\n\n return { x, y };\n}\n\nexport function connectLineBetweenBounds(boundA: IBoundsLike, boundB: IBoundsLike) {\n if (!boundA || !boundB) {\n return;\n }\n\n if (isRectIntersect(boundA, boundB, true)) {\n return;\n }\n // Top left coordinates\n const x1 = Math.min(boundA.x1, boundA.x2);\n const y1 = Math.min(boundA.y1, boundA.y2);\n const x2 = Math.min(boundB.x1, boundB.x2);\n const y2 = Math.min(boundB.y1, boundB.y2);\n\n // Half widths and half heights\n const w1 = Math.abs(boundA.x2 - x1) / 2;\n const h1 = Math.abs(boundA.y2 - y1) / 2;\n const w2 = Math.abs(boundB.x2 - x2) / 2;\n const h2 = Math.abs(boundB.y2 - y2) / 2;\n\n // Center coordinates\n const cx1 = x1 + w1;\n const cy1 = y1 + h1;\n const cx2 = x2 + w2;\n const cy2 = y2 + h2;\n\n // Distance between centers\n const dx = cx2 - cx1;\n const dy = cy2 - cy1;\n\n const p1 = getIntersection(dx, dy, cx1, cy1, w1, h1);\n const p2 = getIntersection(-dx, -dy, cx2, cy2, w2, h2);\n\n return [p1, p2];\n}\n\nfunction getIntersection(dx: number, dy: number, cx: number, cy: number, w: number, h: number) {\n if (Math.abs(dy / dx) < h / w) {\n // Hit vertical edge of box1\n return { x: cx + (dx > 0 ? w : -w), y: cy + (dy * w) / Math.abs(dx) };\n }\n // Hit horizontal edge of box1\n return { x: cx + (dx * h) / Math.abs(dy), y: cy + (dy > 0 ? h : -h) };\n}\n\nexport function getAlignOffset(align: 'left' | 'right' | 'center') {\n if (align === 'left') {\n return 0;\n } else if (align === 'right') {\n return 1;\n }\n\n return 0.5;\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNumberClose } from '@visactor/vutils';\n\nexport interface IShiftYOption {\n labelling: (...args: any[]) => any;\n\n maxY?: number;\n globalShiftY?: {\n /**\n * 是否开启全局调整,开启后,所有文字会整体调整,否则只会按照 x 分组调整 top/bottom\n * @default true\n */\n enable?: boolean;\n /**\n * 最大迭代次数\n * @default 10\n */\n maxIterations?: number;\n /**\n * 最大误差\n * @default 0.1\n */\n maxError?: number;\n /**\n * 调整后 text 之间的 padding\n * @default 1\n */\n padding?: number;\n /**\n * 每个 text 最大被调整的次数\n * @default 1000\n */\n maxAttempts?: number;\n /**\n * 每个 text 调整的 y 坐标差值限制\n */\n deltaYTolerance?: number;\n };\n}\n\nconst isIntersect = (top: number, bottom: number) => {\n return Math.ceil(top) > Math.floor(bottom);\n};\n\nconst isXIntersect = ([a, b]: [number, number], [c, d]: [number, number]) => {\n return d > a && b > c;\n};\n\nfunction getIntersectionLength(range1: number[], range2: number[]) {\n const [start1, end1] = range1;\n const [start2, end2] = range2;\n\n const start = Math.max(start1, start2);\n const end = Math.min(end1, end2);\n\n return Math.max(0, end - start);\n}\n\nexport function shiftY(texts: IText[], option: IShiftYOption) {\n const {\n maxY = Number.MAX_VALUE,\n labelling,\n globalShiftY = { enable: true, maxIterations: 10, maxError: 0.1, padding: 1 }\n } = option;\n\n const n = texts.length;\n if (n <= 1) {\n return texts;\n }\n\n // 根据 x 坐标给 text 分组,存放信息到 map 中\n const xMap = new Map<{ start: number; end: number }, IText[]>();\n const textInformation = new Map<\n IText,\n {\n y1Initial: number;\n y1: number;\n y: number;\n y2: number;\n height: number;\n x1: number;\n x2: number;\n x: number;\n attempts: number;\n }\n >();\n\n const getY1Initial = (text: IText) => textInformation.get(text).y1Initial;\n const getHeight = (text: IText) => textInformation.get(text).height;\n const getY1 = (text: IText) => textInformation.get(text).y1;\n const getY = (text: IText) => textInformation.get(text).y;\n const getX = (text: IText) => textInformation.get(text).x;\n const getX1 = (text: IText) => textInformation.get(text).x1;\n const getX2 = (text: IText) => textInformation.get(text).x2;\n const getAdjustAttempts = (text: IText) => textInformation.get(text).attempts;\n\n const setY1 = (text: IText, y: number) => {\n textInformation.get(text).y1 = y;\n };\n\n const setAdjustAttempts = (text: IText, attempts: number) => {\n textInformation.get(text).attempts = attempts;\n };\n\n function adjustPositionInOneGroup(texts: IText[]) {\n // 从最后一个 text 向前遍历,如果与前一个 text 相交,则尝试放到下方(需要判断和前一个 text 是否相交,若相交则不能放到下方)\n for (let i = texts.length - 1; i >= 0; i--) {\n const curText = texts[i];\n const upperText = texts[i - 1];\n const lowerText = texts[i + 1];\n // 当前 text 和上面一个 text 相交\n if (\n (upperText && isIntersect(getY1(upperText) + getHeight(upperText), getY1(curText))) ||\n // 如果是最顶上被 clamp 进来的 text,也尝试向下摆放\n (getY1(curText) === 0 && curText._isClamped)\n ) {\n const { y } = labelling(curText);\n // 挪动当前 text 后, 和下面一个 text 不相交\n if (!lowerText || !isIntersect(y + getHeight(curText) / 2, getY1(lowerText))) {\n if (y + getHeight(curText) / 2 <= maxY) {\n setY1(curText, getY1(curText) + y - getY(curText));\n }\n }\n }\n }\n }\n\n // 根据 x 坐标进行分组\n texts.sort((a, b) => a.attribute.x - b.attribute.x);\n for (const text of texts) {\n const { y1, y2, x1, x2 } = text.AABBBounds;\n const { x, y } = text.attribute;\n textInformation.set(text, { y1Initial: y1, y1, y2, y, height: y2 - y1, x1, x2, x, attempts: 0 });\n let hasRange = false;\n\n for (const [range, xGroupTexts] of xMap) {\n const { start, end } = range;\n // 1. x1,x2 在 start 和 end 范围内\n if (x1 >= start && x2 <= end) {\n xGroupTexts.push(text);\n hasRange = true;\n }\n // 2. x 坐标接近,相差在 5px 以内\n else if (isNumberClose(x, getX(xGroupTexts[0]), undefined, 5)) {\n // x 坐标相等,也纳入到一个分组中,并且要扩大分组 range\n const newRange = { start: Math.min(start, x1), end: Math.max(end, x2) };\n xGroupTexts.push(text);\n xMap.set(newRange, xGroupTexts);\n xMap.delete(range);\n hasRange = true;\n }\n // 3. 与区间相交范围 > 50%\n else if (getIntersectionLength([start, end], [x1, x2]) / (end - start) > 0.5) {\n const newRange = { start: Math.min(start, x1), end: Math.max(end, x2) };\n xGroupTexts.push(text);\n xMap.set(newRange, xGroupTexts);\n xMap.delete(range);\n hasRange = true;\n }\n\n if (hasRange) {\n break;\n }\n }\n\n if (!hasRange) {\n xMap.set({ start: x1, end: x2 }, [text]);\n }\n }\n\n // 对每个 x 坐标的 text 数组进行排序\n for (const xTexts of xMap.values()) {\n // 从上到下排序\n xTexts.sort((a, b) => getY1Initial(a) - getY1Initial(b));\n adjustPositionInOneGroup(xTexts);\n }\n\n // 整体调整一次 Y 坐标,进行散开\n if (globalShiftY.enable !== false) {\n const {\n maxIterations = 10,\n maxError = 0.1,\n padding = 1,\n maxAttempts = 1000,\n deltaYTolerance = Number.MAX_VALUE\n } = globalShiftY;\n for (let iter = 0; iter < maxIterations; iter++) {\n texts.sort((a, b) => getY1Initial(a) - getY1Initial(b));\n let error = 0;\n for (let i = 0; i < n - 1; i++) {\n const curText = texts[i];\n if (getAdjustAttempts(curText) >= maxAttempts) {\n continue;\n }\n let j = i + 1;\n let nextText;\n while (\n (nextText = texts[j]) &&\n !isXIntersect([getX1(curText), getX2(curText)], [getX1(nextText), getX2(nextText)])\n ) {\n j += 1;\n }\n if (nextText) {\n const y1 = getY1(curText);\n const h0 = getHeight(curText);\n const nextY1 = getY1(nextText);\n const delta = nextY1 - (y1 + h0);\n if (delta < padding) {\n const newDelta = (padding - delta) / 2;\n error = Math.max(error, newDelta);\n if (y1 + newDelta + getHeight(nextText) > maxY) {\n const newY1 = y1 - (padding - delta);\n const curTextDelta = getY1Initial(curText) - newY1;\n if (Math.abs(curTextDelta) <= deltaYTolerance) {\n setY1(curText, newY1);\n setAdjustAttempts(curText, getAdjustAttempts(curText) + 1);\n }\n } else if (y1 - newDelta < 0) {\n const newY1 = nextY1 + (padding - delta);\n const nextTextDelta = getY1Initial(nextText) - newY1;\n if (Math.abs(nextTextDelta) <= deltaYTolerance) {\n setY1(nextText, newY1);\n setAdjustAttempts(nextText, getAdjustAttempts(nextText) + 1);\n }\n } else {\n const newCurY1 = y1 - newDelta;\n const curTextDelta = getY1Initial(curText) - newCurY1;\n const newNextY1 = nextY1 + newDelta;\n const nextTextDelta = getY1Initial(nextText) - newNextY1;\n if (Math.abs(curTextDelta) <= deltaYTolerance && Math.abs(nextTextDelta) <= deltaYTolerance) {\n setY1(curText, newCurY1);\n setY1(nextText, newNextY1);\n setAdjustAttempts(curText, getAdjustAttempts(curText) + 1);\n setAdjustAttempts(nextText, getAdjustAttempts(nextText) + 1);\n }\n }\n }\n }\n }\n if (error < maxError) {\n break;\n }\n }\n }\n\n for (const text of texts) {\n const finalY = text.attribute.y + getY1(text) - getY1Initial(text);\n text.setAttribute('y', finalY);\n }\n\n const result = [];\n // 调整文字顺序,越靠前的越优先占据空间\n // texts 按照 x 进行排序,然后左右交替,保证首尾标签优先展示\n texts.sort((a, b) => a.attribute.x - b.attribute.x);\n let start = 0;\n let end = texts.length - 1;\n\n while (start <= end) {\n if (start === end) {\n result.push(texts[start]);\n } else {\n result.push(texts[start]);\n result.push(texts[end]);\n }\n start++;\n end--;\n }\n return result;\n}\n","import { registerGroup, registerLine, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadLabelComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n registerLine();\n}\n","/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea,\n IRichText,\n ILineGraphicAttribute,\n ILinearGradient\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator, AttributeUpdateType, IContainPointMode, CustomPath2D } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n isFunction,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray,\n isObject\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { createTextGraphicByType, getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap, BitmapTool } from './overlap';\n// eslint-disable-next-line no-duplicate-imports\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type {\n BaseLabelAttrs,\n OverlapAttrs,\n ILabelAnimation,\n LabelItem,\n SmartInvertAttrs,\n ILabelEnterAnimation,\n ILabelExitAnimation,\n ILabelUpdateAnimation,\n LabelContent,\n ShiftYStrategy,\n Strategy\n} from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes, updateAnimation } from './animate/animate';\nimport { connectLineBetweenBounds, getPointsOfLineArea } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { loadLabelComponent } from './register';\nimport { shiftY } from './overlap/shiftY';\n\nloadLabelComponent();\nexport class LabelBase extends AbstractComponent {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n // parsed animation config\n protected _animationConfig?: {\n enter: ILabelEnterAnimation | false;\n exit: ILabelExitAnimation | false;\n update: ILabelUpdateAnimation | false;\n };\n\n static defaultAttributes: Partial = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-2, -1, -2, -1] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType;\n setBitmapTool(bmpTool: ReturnType) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map;\n\n protected _idToGraphic: Map;\n\n protected _idToPoint: Map;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, LabelBase.defaultAttributes, restAttributes) });\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _getLabelLinePoints(text: IText | IRichText, baseMark?: IGraphic) {\n return connectLineBetweenBounds(text.AABBBounds, baseMark?.AABBBounds);\n }\n\n protected _createLabelLine(text: IText | IRichText, baseMark?: IGraphic): ILine | undefined {\n const points = this._getLabelLinePoints(text, baseMark);\n if (points) {\n const lineGraphic = graphicCreator.line({\n points\n });\n\n const { line = {} } = text.attribute as any;\n\n if (line.customShape) {\n const customShape = line.customShape;\n lineGraphic.pathProxy = (attrs: Partial) => {\n return customShape(\n {\n text,\n baseMark: baseMark\n },\n attrs,\n new CustomPath2D()\n );\n };\n }\n\n if (baseMark && baseMark.attribute.fill) {\n lineGraphic.setAttribute('stroke', baseMark.attribute.fill);\n }\n\n if (this.attribute.line && !isEmpty(this.attribute.line.style)) {\n lineGraphic.setAttributes(this.attribute.line.style);\n }\n this._setStatesOfLabelLine(lineGraphic);\n return lineGraphic;\n }\n }\n\n protected render() {\n this._prepare();\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: (IText | IRichText)[] = this._initText(data);\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n labels,\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(labels);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (isFunction(this.attribute.onAfterOverlapping)) {\n this.attribute.onAfterOverlapping(\n labels as Text[],\n this.getRelatedGraphic.bind(this),\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n }\n\n if (labels && labels.length) {\n labels.forEach(label => {\n this._bindEvent(label);\n this._setStatesOfText(label);\n });\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStatesOfText(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n protected _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const textAttrs = {\n ...this.stage?.getTheme()?.text,\n ...attributes\n };\n return createTextGraphicByType(textAttrs, 'textType');\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = this.attribute.type === 'line-data';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points && points.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n if (this.attribute.animation !== false) {\n const { animation, animationEnter, animationExit, animationUpdate } = this.attribute;\n const animationCfg = isObject(animation) ? animation : {};\n this._animationConfig = {\n enter: animationEnter !== false ? merge({}, DefaultLabelAnimation, animationCfg, animationEnter ?? {}) : false,\n exit: animationExit !== false ? merge({}, DefaultLabelAnimation, animationCfg, animationExit ?? {}) : false,\n update:\n animationUpdate !== false\n ? isArray(animationUpdate)\n ? animationUpdate\n : merge({}, DefaultLabelAnimation, animationCfg, animationUpdate ?? {})\n : false\n };\n } else {\n this._animationConfig = {\n enter: false,\n exit: false,\n update: false\n };\n }\n }\n\n protected getRelatedGraphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _initText(data: LabelItem[] = []): (IText | IRichText)[] {\n const { textStyle = {} } = this.attribute;\n const labels = [];\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGraphic(textData);\n if (!baseMark) {\n continue;\n }\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _layout(texts: (IText | IRichText)[]): (IText | IRichText)[] {\n const { position, offset } = this.attribute;\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i];\n if (!text) {\n return;\n }\n const textData = text.attribute as LabelItem;\n const baseMark = this.getRelatedGraphic(textData);\n if (!baseMark) {\n continue;\n }\n\n text.attachedThemeGraphic = this as any;\n const textBounds = this.getGraphicBounds(text);\n text.attachedThemeGraphic = null;\n const actualPosition = isFunction(position) ? position(textData) : (position as string);\n\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id), actualPosition)\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number }, actualPosition);\n\n const textLocation = this.labeling(textBounds, graphicBounds, actualPosition, offset);\n\n if (textLocation) {\n text.setAttributes(textLocation);\n }\n }\n\n return texts;\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = (isObject(this.attribute.overlap) ? this.attribute.overlap : {}) as OverlapAttrs;\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const { strategy, priority } = option;\n\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n\n if (priority) {\n labels = labels.sort((a, b) => priority((b.attribute as any).data) - priority((a.attribute as any).data));\n }\n\n if ((strategy as ShiftYStrategy)?.type === 'shiftY') {\n return this._overlapGlobal(labels, option, bmpTool, bitmap);\n }\n return this._overlapByStrategy(labels, option, bmpTool, bitmap);\n }\n\n protected _overlapGlobal(labels: (IText | IRichText)[], option: OverlapAttrs, bmpTool: BitmapTool, bitmap: Bitmap) {\n let result = labels.filter(label => label.attribute.visible && label.attribute.opacity !== 0);\n const { clampForce = true, hideOnHit = true, overlapPadding, strategy } = option;\n if (clampForce) {\n for (let i = 0; i < result.length; i++) {\n const text = labels[i];\n const { dx = 0, dy = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height, bmpTool.padding);\n if (dx !== 0 || dy !== 0) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n text._isClamped = true;\n }\n }\n }\n result = shiftY(result as any, {\n maxY: bmpTool.height,\n ...(strategy as ShiftYStrategy),\n labelling: (text: IText) => {\n const baseMark = this.getRelatedGraphic(text.attribute);\n const graphicBound = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((text.attribute as any).id))\n : this.getGraphicBounds(baseMark, text);\n return this.labeling(text.AABBBounds, graphicBound, 'bottom', this.attribute.offset);\n }\n });\n\n for (let i = 0; i < result.length; i++) {\n const text = result[i];\n const bounds = text.AABBBounds;\n const range = boundToRange(bmpTool, bounds, true);\n if (canPlace(bmpTool, bitmap, bounds, clampForce, overlapPadding)) {\n bitmap.setRange(range);\n } else {\n if (clampForce) {\n const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding);\n if (placedAfterClampForce) {\n continue;\n }\n }\n if (hideOnHit) {\n text.setAttributes({ visible: false });\n } else {\n bitmap.setRange(range);\n }\n }\n }\n return result;\n }\n\n protected _processClampForce(text: IText, bmpTool: BitmapTool, bitmap: Bitmap, overlapPadding = 0) {\n const { dy = 0, dx = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height, bmpTool.padding);\n if (dx === 0 && dy === 0) {\n // 再次检查,若不考虑边界,仍然可以放得下,代表当前 text 没有与其他 text 重叠\n if (canPlace(bmpTool, bitmap, text.AABBBounds, false, overlapPadding)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n return true;\n }\n } else if (\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n return true;\n }\n return false;\n }\n\n protected _overlapByStrategy(\n labels: (IText | IRichText)[],\n option: OverlapAttrs,\n bmpTool: BitmapTool,\n bitmap: Bitmap\n ) {\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const result: (IText | IRichText)[] = [];\n\n const checkBounds = (strategy as Strategy[]).some(s => s.type === 'bound');\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].attribute.visible === false) {\n continue;\n }\n\n const text = labels[i] as IText | IRichText;\n const baseMark = this.getRelatedGraphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (\n checkBounds &&\n baseMark &&\n baseMark.AABBBounds &&\n this._canPlaceInside(text.AABBBounds, baseMark.AABBBounds)\n ) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < (strategy as Strategy[]).length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n this.attribute,\n text as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding);\n if (placedAfterClampForce) {\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(\n graphic?: IGraphic,\n point: Partial = {},\n position?: string\n ): IBoundsLike {\n if (graphic) {\n if (graphic.attribute.visible !== false) {\n return graphic.AABBBounds;\n }\n const { x, y } = graphic.attribute;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n if (point && position && position === 'inside-middle') {\n const { x, y, x1 = x, y1 = y } = point;\n return {\n x1: (x + x1) / 2,\n x2: (x + x1) / 2,\n y1: (y + y1) / 2,\n y2: (y + y1) / 2\n };\n }\n const { x, y } = point;\n return { x1: x, x2: x, y1: y, y2: y } as IBoundsLike;\n }\n\n protected _renderLabels(labels: (IText | IRichText)[]) {\n const { syncState } = this.attribute;\n const currentTextMap: Map = new Map();\n const prevTextMap: Map = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n const labelLines = [] as ILine[];\n const { visible: showLabelLine } = this.attribute.line ?? {};\n\n labels &&\n labels.forEach((text, index) => {\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n let labelLine;\n if (showLabelLine) {\n labelLine = this._createLabelLine(text as IText, relatedGraphic);\n }\n if (syncState) {\n this.updateStatesOfLabels([labelLine ? { text, labelLine } : { text }], relatedGraphic.currentStates ?? []);\n }\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this._addLabel({ text, labelLine }, texts, labelLines, index);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n this._updateLabel(prevLabel, { text, labelLine });\n }\n });\n\n this._removeLabel(prevTextMap);\n\n this._graphicToText = currentTextMap;\n }\n\n protected _addLabel(\n label: LabelContent,\n texts?: LabelContent['text'][],\n labelLines?: LabelContent['labelLine'][],\n index?: number\n ) {\n const { text, labelLine } = label;\n // TODO: 或许还需要判断关联图元是否有动画?\n const relatedGraphic = this.getRelatedGraphic(text.attribute);\n this._syncStateWithRelatedGraphic(relatedGraphic);\n\n if (this._enableAnimation !== false && this._animationConfig.enter !== false) {\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n if (text) {\n this.add(text);\n }\n\n if (labelLine) {\n labelLines.push(labelLine);\n this.add(labelLine);\n }\n\n // enter的时长如果不是大于0,那么直接跳过动画\n this._animationConfig.enter.duration > 0 &&\n relatedGraphic.once('animate-bind', a => {\n // text和labelLine共用一个from\n text.setAttributes(from);\n labelLine && labelLine.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(\n text,\n texts,\n labelLine,\n labelLines,\n index,\n relatedGraphic,\n to,\n this._animationConfig.enter as ILabelEnterAnimation\n );\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else {\n if (text) {\n this.add(text);\n }\n if (labelLine) {\n this.add(labelLine);\n }\n }\n }\n\n protected _updateLabel(prevLabel: LabelContent, currentLabel: LabelContent) {\n const { text: prevText, labelLine: prevLabelLine } = prevLabel;\n const { text: curText, labelLine: curLabelLine } = currentLabel;\n if (this._enableAnimation !== false && this._animationConfig.update !== false) {\n const { duration, easing } = this._animationConfig.update;\n updateAnimation(prevText, curText, this._animationConfig.update);\n if (prevLabelLine && curLabelLine) {\n prevLabel.labelLine.animate().to(curLabelLine.attribute, duration, easing);\n }\n } else {\n prevLabel.text.setAttributes(curText.attribute as any);\n if (prevLabelLine && curLabelLine) {\n prevLabel.labelLine.setAttributes(curLabelLine.attribute);\n }\n }\n }\n\n protected _removeLabel(textMap: Map) {\n const removeLabelAndLine = (label: LabelContent) => {\n this.removeChild(label.text);\n if (label.labelLine) {\n this.removeChild(label.labelLine);\n }\n };\n\n if (this._enableAnimation !== false && this._animationConfig.exit !== false) {\n const { duration, easing } = this._animationConfig.exit;\n textMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n removeLabelAndLine(label);\n });\n });\n } else {\n textMap.forEach(label => {\n removeLabelAndLine(label);\n });\n }\n }\n\n private updateStatesOfLabels(labels: LabelContent[], currentStates?: string[]) {\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (\n e.detail?.type === AttributeUpdateType.STATE ||\n (e.detail?.type === AttributeUpdateType.ANIMATE_UPDATE && e.detail.animationState?.isFirstFrameOfStep)\n ) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n this.updateStatesOfLabels(labels, currentStates);\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState && relatedGraphic) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n // 默认labelLine和text共用相同动画属性\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText | IRichText,\n texts: (IText | IRichText)[],\n labelLine: ILine,\n labelLines: ILine[],\n index: number,\n relatedGraphic: IGraphic,\n to: any,\n { mode, duration, easing, delay }: ILabelAnimation\n ) {\n // TODO: 跟随动画\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n const step = detail.animationState?.step;\n const isValidAnimateState =\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n step &&\n // 不是第一个wait\n !(step.type === 'wait' && step.prev?.type == null);\n\n if (!isValidAnimateState) {\n return {};\n }\n // const prevStep = step.prev;\n // if (prevStep && prevStep.type === 'wait' && prevStep.prev?.type == null) {\n // delay = delay ?? step.position;\n // }\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n labelLine && labelLine.setAttributes(to);\n return;\n }\n\n const onStart = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onStart }).wait(delay).to(to, duration, easing);\n });\n labelLines.forEach(t => {\n t.animate().wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n relatedGraphic.containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.getPickerService())\n ) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n labelLine && labelLine.animate().wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: (IText | IRichText)[]) {\n const option = (isObject(this.attribute.smartInvert) ? this.attribute.smartInvert : {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors, mode, interactInvertType } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGraphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * base(baseMark色),\n * inverBase(执行智能反色),\n * similarBase(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n let backgroundColor = baseMark.attribute.fill as IColor;\n let foregroundColor = label.attribute.fill as IColor;\n\n if (isObject(backgroundColor) && backgroundColor.gradient) {\n const firstStopColor = (backgroundColor as ILinearGradient).stops?.[0]?.color;\n\n if (firstStopColor) {\n backgroundColor = firstStopColor;\n foregroundColor = firstStopColor; // 渐变色的时候,标签的颜色可能会和背景色不一致,所以需要设置为相同的颜色\n }\n }\n\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark.AABBBounds);\n const isIntersect =\n !isInside && label.AABBBounds && baseMark.AABBBounds && baseMark.AABBBounds.intersects(label.AABBBounds);\n\n if (isInside || outsideEnable || (isIntersect && interactInvertType === 'inside')) {\n // 按照标签展示在柱子内部的情况,执行反色逻辑\n const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else if (isIntersect && interactInvertType !== 'none') {\n // 存在相交的情况\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0 || label.attribute.strokeOpacity === 0) {\n continue;\n }\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n // stroke 作为背景色进行反色计算\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors,\n mode\n )\n });\n continue;\n }\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, backgroundColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, backgroundColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n","const labelComponentMap = {};\n\nexport const registerLabelComponent = (type: string, LabelClass: any) => {\n labelComponentMap[type] = LabelClass;\n};\n\nexport const getLabelComponent = (type: string) => {\n return labelComponentMap[type];\n};\n","import type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport {\n merge,\n isValidNumber,\n isNil,\n isLess,\n isGreater,\n isNumberClose as isClose,\n polarToCartesian,\n computeQuadrant\n} from '@visactor/vutils';\nimport { LabelBase } from './base';\nimport type { ArcLabelAttrs, IPoint, Quadrant, BaseLabelAttrs, LabelItem, IArcLabelLineSpec } from './type';\nimport type { IArc, IRichTextAttribute, ITextAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { type IRichText, type IText, type IArcGraphicAttribute, type IGraphic } from '@visactor/vrender-core';\nimport {\n isQuadrantRight,\n isQuadrantLeft,\n lineCirclePoints,\n connectLineRadian,\n checkBoundsOverlap,\n getAlignOffset\n} from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\nimport { isFunction } from '@visactor/vutils';\n\nexport class ArcInfo {\n key!: string;\n refDatum!: any;\n refArc!: IArc;\n /**\n * 绘图区圆弧中点\n */\n center!: IPoint;\n /**\n * label起始区圆弧中点\n */\n outerCenter!: IPoint;\n labelSize!: { width: number; height: number };\n labelPosition!: IPoint;\n labelLimit: number;\n labelVisible: boolean;\n lastLabelY!: number;\n labelYRange!: [number, number];\n labelText!: string | string[];\n pointA: IPoint;\n pointB: IPoint;\n pointC: IPoint;\n labelLine: IArcLabelLineSpec;\n /**\n * 象限\n */\n quadrant: Quadrant;\n radian: number;\n middleAngle: number;\n innerRadius: number;\n outerRadius: number;\n /** 扇形圆心点坐标 */\n circleCenter: IPoint;\n k: number;\n angle: number;\n\n constructor(\n refDatum: any,\n center: IPoint,\n outerCenter: IPoint,\n quadrant: Quadrant,\n radian: number,\n middleAngle: number,\n innerRadius: number,\n outerRadius: number,\n circleCenter: IPoint\n ) {\n this.refDatum = refDatum;\n this.center = center;\n this.outerCenter = outerCenter;\n this.quadrant = quadrant;\n this.radian = radian;\n this.middleAngle = middleAngle;\n this.innerRadius = innerRadius;\n this.outerRadius = outerRadius;\n this.circleCenter = circleCenter;\n this.labelVisible = true;\n }\n\n getLabelBounds(): IBoundsLike {\n if (!this.labelPosition || !this.labelSize) {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n return {\n x1: this.labelPosition.x - this.labelSize.width / 2,\n y1: this.labelPosition.y - this.labelSize.height / 2,\n x2: this.labelPosition.x + this.labelSize.width / 2,\n y2: this.labelPosition.y + this.labelSize.height / 2\n };\n }\n}\n\ntype PriorityArc = {\n arc: ArcInfo;\n /**\n * 在初始 arc 数组中的索引\n */\n originIndex: number;\n priorityIndex: number;\n};\n\nexport class ArcLabel extends LabelBase {\n name = 'arc-label';\n\n static defaultAttributes: Partial = {\n coverEnable: false,\n spaceWidth: 5,\n layoutArcGap: 6,\n textStyle: {\n visible: true,\n fontSize: 14,\n fontWeight: 'normal',\n fillOpacity: 1,\n // arc boundsPadding 宽度设大会家加剧旋转时,AABBbounds.width 大于无旋转角度的情况,导致 arc 内部标签被缩略的问题\n boundsPadding: [-1, 0, -1, 0],\n ellipsis: true\n },\n position: 'outside',\n line: {\n visible: true,\n line1MinLength: 20,\n line2MinLength: 10\n },\n layout: {\n align: 'arc',\n strategy: 'priority',\n tangentConstraint: true\n }\n };\n\n private _ellipsisWidth: number = 0;\n\n private _arcLeft: Map = new Map();\n private _arcRight: Map = new Map();\n private _line2MinLength: number = 0;\n private _alignOffset: number = 0;\n\n constructor(attributes: ArcLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, ArcLabel.defaultAttributes, restAttributes) });\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (['inside', 'inside-center'].includes(this.attribute.position as string)) {\n return super._overlapping(labels);\n }\n return labels;\n }\n\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position = 'outside',\n offset = 0\n ): { x: number; y: number } | undefined {\n if (!textBounds || !graphicBounds) {\n return;\n }\n return { x: 0, y: 0 };\n }\n\n protected _layout(texts: (IText | IRichText)[]) {\n if (!texts || !texts.length) {\n return;\n }\n\n const labels = super._layout(texts);\n const textBoundsArray = labels.map(label => {\n return this.getGraphicBounds(label as any);\n });\n const ellipsisLabelAttribute = {\n ...this.attribute.textStyle,\n text: '…'\n };\n let ellipsisWidth = Infinity;\n if (ellipsisLabelAttribute.ellipsis !== false) {\n const ellipsisText = this._createLabelText(ellipsisLabelAttribute);\n const ellipsisTextBounds = this.getGraphicBounds(ellipsisText);\n ellipsisWidth = ellipsisTextBounds.x2 - ellipsisTextBounds.x1;\n }\n const data = labels.map(label => label.attribute as LabelItem);\n const currentMarks = Array.from(this._idToGraphic.values());\n this._line2MinLength = isFunction(this.attribute.line.line2MinLength)\n ? (\n this.attribute.line.line2MinLength as (\n texts: IGraphic[],\n arcs: IArc[],\n attrs: Partial\n ) => number\n )(texts, currentMarks as IArc[], this.attribute)\n : (this.attribute.line.line2MinLength as number);\n this._alignOffset =\n (isFunction(this.attribute.layout.alignOffset)\n ? (\n this.attribute.layout.alignOffset as (\n texts: IGraphic[],\n arcs: IArc[],\n attrs: Partial\n ) => number\n )(texts, currentMarks as IArc[], this.attribute)\n : (this.attribute.layout.alignOffset as number)) ?? 0;\n\n const arcs: ArcInfo[] = this.layoutArcLabels(\n this.attribute.position,\n this.attribute,\n currentMarks,\n data,\n textBoundsArray,\n ellipsisWidth\n );\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const basedArc = arcs.find(arc => arc.refDatum?.id === textData.id);\n if (basedArc) {\n const labelAttribute = {\n visible: basedArc.labelVisible,\n x: basedArc.labelPosition.x,\n y: basedArc.labelPosition.y,\n angle: basedArc.angle,\n points:\n basedArc.pointA && basedArc.pointB && basedArc.pointC\n ? [basedArc.pointA, basedArc.pointB, basedArc.pointC]\n : undefined,\n line: basedArc.labelLine\n };\n\n if (labels[i].type === 'richtext') {\n (labelAttribute as unknown as IRichTextAttribute).width =\n basedArc.labelLimit ?? (labels[i].attribute as IRichTextAttribute).width;\n } else {\n (labelAttribute as unknown as ITextAttribute).maxLineWidth =\n basedArc.labelLimit ?? (labels[i].attribute as ITextAttribute).maxLineWidth;\n }\n\n if (basedArc.refArc && basedArc.refArc.type === 'arc3d') {\n (labelAttribute as any).anchor3d = [\n basedArc.circleCenter.x - labelAttribute.x,\n basedArc.circleCenter.y - labelAttribute.y\n ];\n (labelAttribute as any).beta = basedArc.refArc.attribute.beta;\n }\n\n labels[i].setAttributes(labelAttribute);\n }\n }\n return labels;\n }\n\n protected layoutArcLabels(\n position: BaseLabelAttrs['position'],\n attribute: any,\n currentMarks?: IGraphic[],\n data?: LabelItem[],\n textBoundsArray?: any,\n ellipsisWidth?: number\n ) {\n // setArcs : 根据 arc 设置 datum 中对应的标签数据\n this._arcLeft.clear();\n this._arcRight.clear();\n this._ellipsisWidth = ellipsisWidth;\n\n let maxRadius = 0;\n currentMarks.forEach(currentMarks => {\n if ((currentMarks.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMarks.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n data.forEach((d, index) => {\n const currentMark = this._idToGraphic.get(d.id);\n const graphicAttribute = currentMark.attribute as IArcGraphicAttribute;\n const center = { x: graphicAttribute?.x ?? 0, y: graphicAttribute?.y ?? 0 };\n if (!isNil(data[index]) && !isNil(textBoundsArray[index])) {\n const item = data[index] ? data[index] : null;\n const textBounds = textBoundsArray[index] ? textBoundsArray[index] : { x1: 0, x2: 0, y1: 0, y2: 0 };\n\n const arcMiddleAngle = (graphicAttribute.startAngle + graphicAttribute.endAngle) / 2;\n const intervalAngle = graphicAttribute.endAngle - graphicAttribute.startAngle;\n const arcQuadrant = computeQuadrant(graphicAttribute.endAngle - intervalAngle / 2);\n\n const arcMiddle = polarToCartesian(center, graphicAttribute.outerRadius, arcMiddleAngle);\n const outerArcMiddle = polarToCartesian(center, maxRadius + attribute.line.line1MinLength, arcMiddleAngle);\n const arc = new ArcInfo(\n item,\n arcMiddle,\n outerArcMiddle,\n arcQuadrant,\n intervalAngle,\n arcMiddleAngle,\n graphicAttribute.innerRadius,\n graphicAttribute.outerRadius,\n center\n );\n arc.refArc = currentMark as IArc;\n arc.pointA = polarToCartesian(\n center as IPoint,\n this.computeDatumRadius(center.x * 2, center.y * 2, graphicAttribute.outerRadius),\n arc.middleAngle\n );\n\n arc.labelSize = {\n width: textBounds.x2 - textBounds.x1,\n height: textBounds.y2 - textBounds.y1\n };\n\n if (isQuadrantRight(arc.quadrant)) {\n this._arcRight.set(arc.refDatum, arc);\n } else if (isQuadrantLeft(arc.quadrant)) {\n this._arcLeft.set(arc.refDatum, arc);\n }\n }\n });\n\n // layoutLabels : 执行内部/外部标签的布局计算\n const leftArcs = Array.from(this._arcLeft.values());\n const rightArcs = Array.from(this._arcRight.values());\n const arcs: ArcInfo[] = [];\n switch (position) {\n case 'inside':\n case 'inside-inner':\n case 'inside-outer':\n case 'inside-center':\n arcs.push(...this._layoutInsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutInsideLabels(leftArcs, attribute, currentMarks));\n break;\n case 'outside':\n default:\n arcs.push(...this._layoutOutsideLabels(rightArcs, attribute, currentMarks));\n arcs.push(...this._layoutOutsideLabels(leftArcs, attribute, currentMarks));\n break;\n }\n return arcs;\n }\n\n /**\n * 布局内部标签\n */\n private _layoutInsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const labelConfig = attribute;\n const spaceWidth = labelConfig.spaceWidth as number;\n const position = labelConfig.position ?? 'inside';\n const offsetRadius = labelConfig.offsetRadius ?? -spaceWidth;\n\n arcs.forEach((arc: ArcInfo) => {\n const { labelSize, radian } = arc;\n const innerRadius = arc.innerRadius;\n const outerRadius = arc.outerRadius;\n const minRadian = connectLineRadian(outerRadius, labelSize.height);\n let limit;\n if (radian < minRadian) {\n limit = 0;\n } else {\n let minRadius;\n if (radian >= Math.PI) {\n minRadius = innerRadius;\n } else {\n minRadius = Math.max(innerRadius, labelSize.height / 2 / Math.tan(radian / 2));\n }\n limit = outerRadius - minRadius - spaceWidth;\n }\n // TODO: 对于不旋转的内部标签设置 limit 为 outerRadius\n if (labelConfig.rotate !== true) {\n limit = outerRadius - spaceWidth;\n }\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n const labelWidth = Math.min(limit, arc.labelSize.width);\n const align = this._computeAlign(arc, attribute);\n let alignOffset = 0;\n if (position === 'inside') {\n alignOffset = align === 'left' ? labelWidth : align === 'right' ? 0 : labelWidth / 2;\n }\n let labelRadius;\n if (position === 'inside-inner') {\n labelRadius = innerRadius - offsetRadius + alignOffset;\n } else if (position === 'inside-center') {\n labelRadius = innerRadius + (outerRadius - innerRadius) / 2;\n } else {\n labelRadius = outerRadius + offsetRadius - alignOffset;\n }\n arc.labelPosition = polarToCartesian(arc.circleCenter, labelRadius, arc.middleAngle);\n arc.labelLimit = labelWidth;\n if (!isGreater(labelWidth, 0)) {\n arc.labelVisible = false;\n }\n\n if (labelConfig.rotate !== false) {\n arc.angle = attribute.textStyle?.angle ?? arc.middleAngle;\n let offsetAngle = labelConfig.offsetAngle ?? 0;\n if (['inside-inner', 'inside-outer'].includes(position as string)) {\n offsetAngle += Math.PI / 2;\n }\n arc.angle += offsetAngle;\n }\n });\n return arcs;\n }\n\n /**\n * 布局外部标签\n */\n private _layoutOutsideLabels(arcs: ArcInfo[], attribute: ArcLabelAttrs, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const height = center.y * 2;\n const labelLayout = attribute.layout;\n const spaceWidth = attribute.spaceWidth as number;\n\n arcs.forEach(arc => {\n const direction = isQuadrantLeft(arc.quadrant) ? -1 : 1;\n arc.labelPosition = {\n x: arc.outerCenter.x + direction * (arc.labelSize.width / 2 + this._line2MinLength + spaceWidth),\n y: arc.outerCenter.y\n };\n });\n arcs.sort((a, b) => {\n return a.labelPosition.y - b.labelPosition.y;\n });\n\n if (attribute.coverEnable !== false || labelLayout.strategy === 'none') {\n for (const arc of arcs) {\n const { labelPosition, labelSize } = arc;\n arc.labelLimit = labelSize.width;\n arc.pointB = isQuadrantLeft(arc.quadrant)\n ? {\n x: labelPosition.x + labelSize.width / 2 + this._line2MinLength + spaceWidth,\n y: labelPosition.y\n }\n : {\n x: labelPosition.x - labelSize.width / 2 - this._line2MinLength - spaceWidth,\n y: labelPosition.y\n };\n this._computeX(arc, attribute, currentMarks);\n }\n if (attribute.coverEnable === false && labelLayout.strategy === 'none') {\n this._coverLabels(arcs);\n }\n } else {\n // 由于可能存在多行标签,这里仅仅估计一个最大标签数量用于避免冗余计算\n const maxLabels = height / ((attribute.textStyle?.fontSize as number) || 16);\n // 布局圆弧半径\n this._adjustY(arcs, maxLabels, attribute, currentMarks);\n\n const { minY, maxY } = arcs.reduce(\n (yInfo, arc) => {\n const { y1, y2 } = arc.getLabelBounds();\n yInfo.minY = Math.max(0, Math.min(y1, yInfo.minY));\n yInfo.maxY = Math.min(height, Math.max(y2, yInfo.maxY));\n return yInfo;\n },\n { minY: Infinity, maxY: -Infinity }\n );\n const halfY = Math.max(Math.abs(height / 2 - minY), Math.abs(maxY - height / 2));\n // pointB 与 label 的 y 值相同,但是 label 的 x 值依赖于 pointB 的 x 值\n const r = this._computeLayoutRadius(halfY, attribute, currentMarks);\n for (const arc of arcs) {\n this._computePointB(arc, r, attribute, currentMarks);\n this._computeX(arc, attribute, currentMarks);\n }\n }\n const width = center.x * 2;\n arcs.forEach(arc => {\n if (\n arc.labelVisible &&\n (isLess(arc.pointB.x, this._line2MinLength + spaceWidth) ||\n isGreater(arc.pointB.x, width - this._line2MinLength - spaceWidth))\n ) {\n arc.labelVisible = false;\n }\n arc.angle = attribute.textStyle?.angle ?? 0;\n if (attribute.offsetAngle) {\n arc.angle += attribute.offsetAngle;\n }\n\n arc.labelLine = {\n ...attribute.line,\n visible: arc.labelVisible\n };\n });\n\n return arcs;\n }\n\n /**\n * 计算 pointC 以及 label limit 与 position\n */\n private _computeX(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotLayout = {\n x1: 0,\n x2: this.attribute.width,\n y1: 0,\n y2: this.attribute.height\n };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n\n const line1MinLength = attribute.line.line1MinLength as number;\n const labelLayoutAlign = attribute.layout?.align;\n const spaceWidth = attribute.spaceWidth as number;\n\n const { labelPosition, quadrant, pointB } = arc;\n if (!isValidNumber(pointB.x * pointB.y)) {\n arc.pointC = { x: NaN, y: NaN };\n labelPosition.x = NaN;\n arc.labelLimit = 0;\n }\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const flag = isQuadrantLeft(quadrant) ? -1 : 1;\n let cx: number = 0;\n let limit =\n (flag > 0 ? plotLayout.x2 - pointB.x : pointB.x - plotLayout.x1) +\n this._alignOffset -\n this._line2MinLength -\n spaceWidth;\n\n if (labelLayoutAlign === 'labelLine') {\n cx = (radius + line1MinLength + this._line2MinLength) * flag + (center as IPoint).x;\n limit = (flag > 0 ? plotLayout.x2 - cx : cx - plotLayout.x1) - spaceWidth;\n }\n\n const text = this._getFormatLabelText(arc.refDatum, limit);\n arc.labelText = text;\n let labelWidth = Math.min(limit, arc.labelSize.width);\n switch (labelLayoutAlign) {\n case 'labelLine':\n break;\n case 'edge':\n cx = flag > 0 ? plotLayout.x2 - labelWidth - spaceWidth : plotLayout.x1 + labelWidth + spaceWidth;\n break;\n case 'arc':\n default:\n cx = pointB.x + flag * this._line2MinLength;\n break;\n }\n labelWidth = Math.max(this._ellipsisWidth, labelWidth);\n const needAdjustLimit = labelWidth < arc.labelSize.width - 1;\n\n if (needAdjustLimit) {\n arc.labelLimit = labelWidth;\n } else {\n arc.labelLimit = null;\n }\n\n arc.pointC = { x: cx, y: labelPosition.y };\n\n const align = this._computeAlign(arc, attribute);\n const targetCenterOffset = getAlignOffset(align) * (needAdjustLimit ? labelWidth : arc.labelSize.width);\n\n if (labelLayoutAlign === 'edge') {\n // edge 模式下的多行文本对齐方向与其他模式相反\n // 贴近画布边缘的布局结果可能会由于 cx 的小数 pixel 导致被部分裁剪,因此额外做计算\n labelPosition.x =\n (flag > 0 ? plotLayout.x2 : plotLayout.x1) - flag * targetCenterOffset + flag * this._alignOffset;\n\n arc.pointC.x += flag * this._alignOffset;\n } else {\n labelPosition.x = cx + flag * (this._alignOffset + spaceWidth + targetCenterOffset);\n }\n }\n\n private _computeAlign(arc: ArcInfo, attribute: any) {\n const labelConfig = attribute;\n // 暂时兼容两种配置方式\n const textAlign = labelConfig.textStyle?.textAlign ?? labelConfig.textStyle?.align;\n const layoutAlign = labelConfig.layout?.textAlign ?? labelConfig.layout?.align;\n if (labelConfig.position !== 'inside') {\n if (isNil(textAlign) || textAlign === 'auto') {\n // edge 模式下沿着画布对齐,与 labelLine & edge 模式相反\n if (layoutAlign === 'edge') {\n return isQuadrantLeft(arc.quadrant) ? 'left' : 'right';\n }\n return isQuadrantLeft(arc.quadrant) ? 'right' : 'left';\n }\n return textAlign;\n }\n return isNil(textAlign) || textAlign === 'auto' ? 'center' : textAlign;\n }\n\n private _getFormatLabelText(value: any, limit?: number) {\n return value?.text ?? '';\n }\n\n /**\n * 调整标签位置的 Y 值\n */\n private _adjustY(arcs: ArcInfo[], maxLabels: number, attribute: any, currentMarks: any[]) {\n const center = { x: currentMarks[0].attribute.x ?? 0, y: currentMarks[0].attribute.y ?? 0 };\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n const labelLayout = attribute.layout;\n if (labelLayout.strategy === 'vertical') {\n // vertical 策略类似 echarts 方案,没有切线限制策略,没有优先级,执行整体调整没有标签数量限制\n let lastY = 0;\n let delta;\n const len = arcs.length;\n if (len <= 0) {\n return;\n }\n // 偏移 y 值以避免遮挡\n for (let i = 0; i < len; i++) {\n const { y1 } = arcs[i].getLabelBounds();\n delta = y1 - lastY;\n if (isLess(delta, 0)) {\n const index = this._shiftY(arcs, i, len - 1, -delta);\n this._shiftY(arcs, index, 0, delta / 2);\n }\n const { y2 } = arcs[i].getLabelBounds();\n lastY = y2;\n }\n // 将超出上界的标签下移\n const { y1: firstY1 } = arcs[0].getLabelBounds();\n delta = firstY1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, 0, len - 1, -delta);\n }\n for (let i = arcs.length - 1; i >= 0; i--) {\n if (arcs[i].getLabelBounds().y2 > plotRect.height) {\n arcs[i].labelVisible = false;\n } else {\n break;\n }\n }\n } else if (labelLayout.strategy !== 'none') {\n const priorityArcs: PriorityArc[] = arcs.map((arc, i) => {\n return {\n arc,\n originIndex: i,\n priorityIndex: 0\n };\n });\n priorityArcs.sort((a, b) => {\n return b.arc.radian - a.arc.radian;\n });\n priorityArcs.forEach((priorityArc, i) => {\n priorityArc.priorityIndex = i;\n // 首先隐藏所有标签\n priorityArc.arc.labelVisible = false;\n });\n\n let topLabelIndex = Infinity;\n let bottomLabelIndex = -Infinity;\n // 按照优先级依次布局标签\n for (let i = 0; i < maxLabels && i < arcs.length; i++) {\n this._storeY(arcs);\n const arc = priorityArcs[i].arc;\n this._computeYRange(arc, attribute, currentMarks);\n arc.labelVisible = true;\n const curY = arc.labelPosition.y;\n // 寻找标签在布局前垂直方向上的上下邻居,也就是饼图上的邻居关系\n const { lastIndex, nextIndex } = this._findNeighborIndex(arcs, priorityArcs[i]);\n const lastArc = arcs[lastIndex];\n const nextArc = arcs[nextIndex];\n if (lastIndex === -1 && nextIndex !== -1) {\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n } else if (lastIndex !== -1 && nextIndex === -1) {\n const lastY = lastArc.labelPosition.y;\n if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n }\n } else if (lastIndex !== -1 && nextIndex !== -1) {\n const lastY = lastArc.labelPosition.y;\n const nextY = nextArc.labelPosition.y;\n if (curY > nextY) {\n arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2;\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n } else if (curY < lastY) {\n arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2;\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n } else {\n this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);\n this._twoWayShift(arcs, arc, nextArc, nextIndex);\n }\n }\n\n const nextTopIndex = Math.min(topLabelIndex, priorityArcs[i].originIndex);\n const nextBottomIndex = Math.max(bottomLabelIndex, priorityArcs[i].originIndex);\n let delta;\n // 将超出下界的标签上移\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n if (isGreater(delta, 0)) {\n this._shiftY(arcs, nextBottomIndex, 0, -delta);\n }\n // 将超出上界的标签下移\n delta = arcs[nextTopIndex].getLabelBounds().y1 - 0;\n if (isLess(delta, 0)) {\n this._shiftY(arcs, nextTopIndex, arcs.length - 1, -delta);\n }\n delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect.height;\n // 当整体上下移一次之后仍然无法容纳所有标签,则当前标签应当舍去\n if (isGreater(delta, 0)) {\n arc.labelVisible = false;\n this._restoreY(arcs);\n break;\n } else if (labelLayout.tangentConstraint && !this._checkYRange(arcs)) {\n // 当标签由于 Y 方向调节范围过大而舍弃时不应当终止布局过程\n arc.labelVisible = false;\n this._restoreY(arcs);\n } else {\n topLabelIndex = nextTopIndex;\n bottomLabelIndex = nextBottomIndex;\n }\n }\n }\n }\n\n /**\n * 向某一方向调整局部标签的 Y 值\n */\n private _shiftY(arcs: ArcInfo[], start: number, end: number, delta: number) {\n const direction = start < end ? 1 : -1;\n let index = start;\n while (index !== -1) {\n arcs[index].labelPosition.y += delta;\n const nextIndex = this._findNextVisibleIndex(arcs, index, end, direction);\n if (nextIndex >= 0 && nextIndex < arcs.length) {\n const { y1: curY1, y2: curY2 } = arcs[index].getLabelBounds();\n const { y1: nextY1, y2: nextY2 } = arcs[nextIndex].getLabelBounds();\n if ((direction > 0 && curY2 < nextY1) || (direction < 0 && curY1 > nextY2)) {\n return index;\n }\n }\n index = nextIndex;\n }\n return end;\n }\n\n /**\n * 寻找下一个显示标签索引\n */\n private _findNextVisibleIndex(arcs: ArcInfo[], start: number, end: number, direction: number) {\n const diff = (end - start) * direction;\n for (let i = 1; i <= diff; i++) {\n const index = start + i * direction;\n if (arcs[index].labelVisible) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * 计算 pointB,其 y 值在 adjustY 中确定,也即是 label 的 y 值\n */\n private _computePointB(arc: ArcInfo, r: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = labelConfig.line.line1MinLength as number;\n const labelLayout = labelConfig.layout;\n\n if (labelLayout.strategy === 'none') {\n // 不执行躲避策略或者不显示引导线时紧挨着圆弧布局\n arc.pointB = {\n x: arc.outerCenter.x,\n y: arc.outerCenter.y\n };\n } else {\n const center = arc.circleCenter;\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const { labelPosition, quadrant } = arc;\n const outerR = Math.max(radius + line1MinLength, arc.outerRadius);\n const rd = r - outerR;\n // x 为 pointB.x 与圆心的差值\n const x = Math.sqrt(r ** 2 - Math.abs((center as IPoint).y - labelPosition.y) ** 2) - rd;\n if (isValidNumber(x)) {\n arc.pointB = {\n x: (center as IPoint).x + x * (isQuadrantLeft(quadrant) ? -1 : 1),\n y: labelPosition.y\n };\n } else {\n arc.pointB = { x: NaN, y: NaN };\n }\n }\n }\n\n /**\n * 存储当前所有显示标签的 Y 值\n */\n private _storeY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.lastLabelY = arc.labelPosition.y;\n }\n }\n }\n\n /**\n * 计算圆弧切线所限制的标签 Y 值范围\n */\n private _computeYRange(arc: ArcInfo, attribute: any, currentMarks: any[]) {\n const center = arc.circleCenter;\n const plotRect = { width: center.x * 2, height: center.y * 2 };\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const line1MinLength = attribute.line.line1MinLength as number;\n\n const { width, height } = plotRect;\n\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n // 出现 y 方向挤压过度必然是由于画布上下某一端被占满,此时半径是确定的\n const r = this._computeLayoutRadius(height / 2, attribute, currentMarks);\n // 所有坐标转化到以圆心为原点的坐标系计算\n // 在饼图上左右计算对称,可以全都转化到右侧计算\n const cx = Math.abs(arc.center.x - width / 2);\n const cy = arc.center.y - height / 2;\n let a;\n let b;\n let c;\n if (isClose(width / 2, cx)) {\n a = 0;\n b = 1;\n c = -cy;\n } else if (isClose(height / 2, cy)) {\n a = 1;\n b = 0;\n c = -cx;\n } else {\n // 斜截式转为一般式\n const k = -1 / (cy / cx);\n a = k;\n b = -1;\n c = cy - k * cx;\n }\n const points = lineCirclePoints(a, b, c, line1MinLength + radius - r, 0, r);\n // 由于饼图上切点在布局圆内部,交点必然有两个\n if (points.length < 2) {\n return;\n }\n let min;\n let max;\n if (points[0].x > points[1].x) {\n points.reverse();\n }\n if (points[0].x < 0) {\n if (isClose(points[0].y, points[1].y)) {\n if (\n (isGreater(arc.middleAngle, -Math.PI) && isLess(arc.middleAngle, 0)) ||\n (isGreater(arc.middleAngle, Math.PI) && isLess(arc.middleAngle, Math.PI * 2))\n ) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = height;\n }\n } else if (points[0].y < points[1].y) {\n min = 0;\n max = points[1].y + height / 2;\n } else {\n min = points[1].y + height / 2;\n max = plotRect.height;\n }\n } else {\n min = Math.min(points[0].y, points[1].y) + height / 2;\n max = Math.max(points[0].y, points[1].y) + height / 2;\n }\n arc.labelYRange = [min, max];\n }\n\n /**\n * 计算标签布局圆弧半径,即 pointB 所落在的圆弧\n */\n private _computeLayoutRadius(halfYLength: number, attribute: any, currentMarks: any[]) {\n const labelConfig = attribute;\n const layoutArcGap = labelConfig.layoutArcGap as number;\n const line1MinLength = labelConfig.line.line1MinLength as number;\n\n let maxRadius = 0;\n currentMarks.forEach((currentMark: IGraphic) => {\n if ((currentMark.attribute as IArcGraphicAttribute).outerRadius > maxRadius) {\n maxRadius = (currentMark.attribute as IArcGraphicAttribute).outerRadius;\n }\n });\n\n const radiusRatio = this.computeLayoutOuterRadius(maxRadius, attribute.width, attribute.height);\n const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height);\n const outerR = radius + line1MinLength;\n\n const a = outerR - layoutArcGap;\n\n return Math.max((a ** 2 + halfYLength ** 2) / (2 * a), outerR);\n }\n\n /**\n * 依据初始的标签排序,寻找某一标签上下最近的显示标签索引\n */\n private _findNeighborIndex(arcs: ArcInfo[], priorityArc: PriorityArc) {\n const index = priorityArc.originIndex;\n let lastIndex = -1;\n let nextIndex = -1;\n for (let i = index - 1; i >= 0; i--) {\n if (arcs[i].labelVisible) {\n lastIndex = i;\n break;\n }\n }\n for (let i = index + 1; i < arcs.length; i++) {\n if (arcs[i].labelVisible) {\n nextIndex = i;\n break;\n }\n }\n return {\n lastIndex,\n nextIndex\n };\n }\n\n /**\n * 执行给定标签 Y 值的 shiftDown 以及 shiftUp\n */\n private _twoWayShift(arcs: ArcInfo[], lastArc: ArcInfo, nextArc: ArcInfo, nextIndex: number) {\n const delta = nextArc.getLabelBounds().y1 - lastArc.getLabelBounds().y2;\n if (isLess(delta, 0)) {\n const i = this._shiftY(arcs, nextIndex, arcs.length - 1, -delta);\n this._shiftY(arcs, i, 0, delta / 2);\n }\n }\n\n /**\n * 恢复所有显示标签在之前存储的 Y 值\n */\n private _restoreY(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n if (arc.labelVisible) {\n arc.labelPosition.y = arc.lastLabelY;\n }\n }\n }\n\n /**\n * 检查每个显示的标签的 Y 值是否在切线限制范围内\n */\n private _checkYRange(arcs: ArcInfo[]) {\n for (const arc of arcs) {\n const { labelYRange, labelPosition } = arc;\n if (\n arc.labelVisible &&\n labelYRange &&\n (isLess(labelPosition.y, labelYRange[0]) || isGreater(labelPosition.y, labelYRange[1]))\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 自上至下计算被遮盖的标签\n */\n private _coverLabels(arcs: ArcInfo[]) {\n if (arcs.length <= 1) {\n return;\n }\n let lastBounds = arcs[0].getLabelBounds();\n for (let i = 1; i < arcs.length; i++) {\n const bounds = arcs[i].getLabelBounds();\n if (!checkBoundsOverlap(lastBounds, bounds)) {\n lastBounds = bounds;\n } else {\n arcs[i].labelVisible = false;\n }\n }\n }\n\n protected _getLabelLinePoints(text: IText | IRichText, baseMark?: IGraphic) {\n return (text.attribute as ArcLabelAttrs).points;\n }\n\n protected _createLabelLine(text: IText, baseMark?: IGraphic) {\n const { line = {}, visible } = text.attribute as ArcLabelAttrs;\n const lineGraphic = super._createLabelLine(text, baseMark);\n if (lineGraphic) {\n lineGraphic.setAttributes({\n visible: (line.visible && visible) ?? text.attribute?.visible ?? true,\n lineWidth: line.style?.lineWidth ?? 1\n });\n if (line.smooth) {\n lineGraphic.setAttributes({\n curveType: 'basis'\n });\n }\n\n if (baseMark.type === 'arc3d' && baseMark) {\n const { beta, x, y } = baseMark.attribute;\n lineGraphic.setAttributes({\n beta,\n anchor3d: [x, y]\n });\n }\n }\n\n return lineGraphic;\n }\n\n protected computeRadius(r: number, width?: number, height?: number, k?: number): number {\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * r * (isNil(k) ? 1 : k);\n }\n\n protected computeLayoutRadius(width: number, height: number) {\n return Math.min(width / 2, height / 2);\n }\n\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n return this.attribute.position === 'inside' || this.attribute.position === 'inside-center';\n }\n\n private computeLayoutOuterRadius(r: number, width: number, height: number) {\n return r / (Math.min(width, height) / 2);\n }\n\n private computeDatumRadius(width?: number, height?: number, outerRadius?: any): number {\n const outerRadiusRatio = this.computeLayoutOuterRadius(outerRadius, width, height); //this.getRadius(state)\n return this.computeLayoutRadius(width ? width : 0, height ? height : 0) * outerRadiusRatio;\n }\n}\n\nexport const registerArcDataLabel = () => {\n registerLabelComponent('arc', ArcLabel);\n};\n","import type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { ILine } from '@visactor/vrender-core';\nimport type { PointLocationCfg } from '../core/type';\nimport type { LineLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingLineOrArea } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\nimport type { ISegment } from '@visactor/vrender-core';\n\nexport class LineLabel extends LabelBase {\n name = 'line-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'end',\n offset: 6\n };\n\n constructor(attributes: LineLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, LineLabel.defaultAttributes, restAttributes) });\n }\n\n protected getGraphicBounds(graphic: ILine, point: Partial = {}, position = 'end') {\n if (!graphic || (graphic.type !== 'line' && graphic.type !== 'area')) {\n return super.getGraphicBounds(graphic, point);\n }\n\n let points = graphic.attribute.points;\n const segments = graphic.attribute.segments;\n\n if (!points && segments && segments.length) {\n points = segments.reduce((res: IPointLike[], seg: ISegment) => {\n return res.concat(seg.points ?? []);\n }, []);\n }\n\n if (!points || points.length === 0) {\n points = [point as IPointLike];\n }\n\n const index = position === 'start' ? 0 : points.length - 1;\n if (!points[index]) {\n return;\n }\n return {\n x1: points[index].x as number,\n x2: points[index].x as number,\n y1: points[index].y as number,\n y2: points[index].y as number\n };\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string = 'end', offset = 0) {\n return labelingLineOrArea(textBounds, graphicBounds, position, offset);\n }\n}\n\nexport const registerLineDataLabel = () => {\n registerLabelComponent('line', LineLabel);\n registerLabelComponent('area', LineLabel);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { SymbolLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingPoint } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\n\nexport class SymbolLabel extends LabelBase {\n name = 'symbol-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'top',\n offset: 5\n };\n\n constructor(attributes: SymbolLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, SymbolLabel.defaultAttributes, restAttributes) });\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n return labelingPoint(textBounds, graphicBounds, position, offset);\n }\n}\n\nexport const registerSymbolDataLabel = () => {\n registerLabelComponent('symbol', SymbolLabel);\n registerLabelComponent('line-data', SymbolLabel);\n};\n","import type { IBoundsLike } from '@visactor/vutils';\nimport { calculateAnchorOfBounds, merge } from '@visactor/vutils';\nimport type { RectLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport type { ComponentOptions } from '../interface';\nimport { registerLabelComponent } from './data-label-register';\n\nexport class RectLabel extends LabelBase {\n static tag = 'rect-label';\n\n static defaultAttributes: Partial = {\n textStyle: {\n fill: '#000'\n },\n position: 'top',\n offset: 5\n };\n\n constructor(attributes: RectLabelAttrs, options?: ComponentOptions) {\n const { data, ...restAttributes } = attributes;\n super(options?.skipDefault ? attributes : { data, ...merge({}, RectLabel.defaultAttributes, restAttributes) });\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) {\n if (!textBounds || !graphicBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const { x: anchorX, y: anchorY } = calculateAnchorOfBounds(graphicBounds, position);\n\n let vx = 0;\n let vy = 0;\n\n const isInside = position.includes('inside');\n\n if (position.includes('top')) {\n vy = isInside ? 1 : -1;\n } else if (position.includes('bottom')) {\n vy = isInside ? -1 : 1;\n } else if (position.includes('left')) {\n vx = isInside ? 1 : -1;\n } else if (position.includes('right')) {\n vx = isInside ? -1 : 1;\n }\n\n switch (position) {\n case 'top-right':\n case 'bottom-right':\n vx = -1;\n break;\n case 'top-left':\n case 'bottom-left':\n vx = 1;\n break;\n default:\n break;\n }\n\n const x = anchorX + vx * offset + (vx * width) / 2;\n const y = anchorY + vy * offset + (vy * height) / 2;\n\n return { x, y };\n }\n}\n\nexport const registerRectDataLabel = () => {\n registerLabelComponent('rect', RectLabel);\n};\n","import { Factory } from '../../core/factory';\nimport { GrammarMarkType } from '../enums';\nimport { LargeRects } from './large-rects';\nimport { LargeSymbols } from './large-symbols';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport {\n registerCircle,\n registerArc,\n registerArc3d,\n registerPyramid3d,\n registerArea,\n registerGroup,\n registerImage,\n registerRect3d,\n registerLine,\n registerPath,\n registerRect,\n registerSymbol,\n registerText,\n registerPolygon,\n registerRichtext,\n registerGlyph,\n registerShadowRoot\n} from '@visactor/vrender-kits';\nimport {\n createArc,\n createCircle,\n createArc3d,\n createPyramid3d,\n createArea,\n createGroup,\n createImage,\n createRect3d,\n createLine,\n createPath,\n createRect,\n createSymbol,\n createText,\n createPolygon,\n createRichText,\n createGlyph\n} from '@visactor/vrender-core';\nimport {\n registerRectDataLabel,\n registerLineDataLabel,\n registerArcDataLabel,\n registerSymbolDataLabel\n} from '@visactor/vrender-components';\n\nexport const registerCircleGraphic = () => {\n registerShadowRoot();\n registerCircle();\n Factory.registerGraphic(GrammarMarkType.circle, createCircle);\n};\n\nexport const registerArcGraphic = () => {\n registerShadowRoot();\n registerArc();\n Factory.registerGraphic(GrammarMarkType.arc, createArc);\n registerArcDataLabel();\n};\n\nexport const registerArc3dGraphic = () => {\n registerShadowRoot();\n registerArc3d();\n Factory.registerGraphic(GrammarMarkType.arc3d, createArc3d);\n};\n\nexport const registerPyramid3dGraphic = () => {\n registerShadowRoot();\n registerPyramid3d();\n Factory.registerGraphic(GrammarMarkType.pyramid3d, createPyramid3d);\n};\n\nexport const registerAreaGraphic = () => {\n registerShadowRoot();\n registerArea();\n Factory.registerGraphic(GrammarMarkType.area, createArea);\n registerLineDataLabel();\n registerSymbolDataLabel();\n};\n\nexport const registerGroupGraphic = () => {\n registerShadowRoot();\n registerGroup();\n Factory.registerGraphic(GrammarMarkType.group, createGroup);\n};\n\nexport const registerImageGraphic = () => {\n registerShadowRoot();\n registerImage();\n Factory.registerGraphic(GrammarMarkType.image, createImage);\n};\n\nexport const registerLineGraphic = () => {\n registerShadowRoot();\n registerLine();\n registerLineDataLabel();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.line, createLine);\n};\n\nexport const registerPathGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.path, createPath);\n};\n\nexport const registerRectGraphic = () => {\n registerShadowRoot();\n registerRect();\n registerRectDataLabel();\n Factory.registerGraphic(GrammarMarkType.rect, createRect);\n};\n\nexport const registerRect3dGraphic = () => {\n registerShadowRoot();\n registerRect3d();\n Factory.registerGraphic(GrammarMarkType.rect3d, createRect3d);\n};\n\nexport const registerRuleGraphic = () => {\n registerShadowRoot();\n registerLine();\n Factory.registerGraphic(GrammarMarkType.rule, createLine);\n};\n\nexport const registerShapeGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.shape, createPath);\n};\n\nexport const registerSymbolGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.symbol, createSymbol);\n};\n\nexport const registerTextGraphic = () => {\n registerShadowRoot();\n registerText();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.text, createText);\n};\n\nexport const registerPolygonGraphic = () => {\n registerShadowRoot();\n registerPolygon();\n Factory.registerGraphic(GrammarMarkType.polygon, createPolygon);\n};\n\nexport const registerRichTextGraphic = () => {\n registerShadowRoot();\n registerRichtext();\n Factory.registerGraphic(GrammarMarkType.richtext, createRichText);\n};\n\nexport const registerCellGraphic = () => {\n registerShadowRoot();\n registerSymbol();\n registerSymbolDataLabel();\n Factory.registerGraphic(GrammarMarkType.cell, createSymbol);\n};\n\nexport const registerIntervalGraphic = () => {\n registerShadowRoot();\n registerRect();\n registerRectDataLabel();\n registerArc();\n registerArcDataLabel();\n Factory.registerGraphic(GrammarMarkType.interval, createRect);\n};\n\nexport const registerGlyphGraphic = () => {\n registerShadowRoot();\n registerGlyph();\n Factory.registerGraphic(GrammarMarkType.glyph, createGlyph);\n};\n\nexport const registerLargeRectsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeRects, (attrs: any) => {\n return new LargeRects(attrs) as unknown as IGraphic;\n });\n};\n\nexport const registerLargeSymbolsGraphic = () => {\n registerShadowRoot();\n registerPath();\n Factory.registerGraphic(GrammarMarkType.largeSymbols, (attrs: any) => {\n return new LargeSymbols(attrs) as unknown as IGraphic;\n });\n};\n","import { Factory } from './../core/factory';\nimport type { Maybe } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { warn } from '../util/debug';\nimport type { IGroupMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGroupMark, IMark, IMarkStyle, MarkType } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport type { IGroupMark as IVGrammarGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerGroupGraphic } from '@visactor/vgrammar-core';\nimport type { IMarkCompileOption } from '../compile/mark';\n\nexport class GroupMark extends BaseMark implements IGroupMark {\n static readonly type = MarkTypeEnum.group;\n readonly type = GroupMark.type;\n protected _marks: IMark[] = [];\n getMarks(): IMark[] {\n return this._marks;\n }\n\n protected declare _product: Maybe;\n declare getProduct: () => Maybe;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle()\n // clip: false\n };\n return defaultStyle;\n }\n\n protected isMarkExist(mark: IMark): boolean {\n return this._marks.find(m => m.id === mark.id) !== undefined;\n }\n\n addMark(mark: IMark): boolean {\n if (this.isMarkExist(mark)) {\n warn('Mark already exists, add mark failed.');\n return false;\n }\n\n this._marks.push(mark);\n return true;\n }\n\n removeMark(mark: IMark): boolean {\n const index = this._marks.findIndex(m => m.id === mark.id || m.name === mark.name);\n if (index === -1) {\n warn('Mark does not exists, removeMark failed.');\n return false;\n }\n this._marks.splice(index, 1);\n return true;\n }\n\n getMarkInType(type: MarkType) {\n return this._marks.filter(m => m.type === type);\n }\n\n getMarkInId(id: number) {\n return this._marks.find(m => m.id === id);\n }\n\n getMarkInUserId(id: string | number) {\n let result: IMark | undefined;\n this._marks.forEach(m => {\n if (m.getUserId() === id) {\n result = m;\n }\n });\n\n if (!result) {\n for (let i = 0; i < this._marks.length; i++) {\n const mark = this._marks[i];\n if (mark.type === 'group') {\n result = (mark as GroupMark).getMarkInUserId(id);\n }\n if (result) {\n break;\n }\n }\n }\n\n return result;\n }\n\n getMarkInName(name: string) {\n return this._marks.filter(m => m.name === name);\n }\n\n protected _compileProduct(option?: IMarkCompileOption): void {\n // 编译自身\n super._compileProduct(option);\n\n // 设置zIndex\n this._product.configure({\n zIndex: this._markConfig.zIndex\n });\n\n // 编译子元素\n if (!option?.ignoreChildren) {\n this.getMarks().forEach(mark => {\n // TODO: 如果语法元素已创建,先删除再重新指定父结点生成。vgrammar 是否可以动态指定 mark 父结点?\n if (mark.getProduct()) {\n mark.removeProduct();\n }\n mark.compile({ group: this._product });\n });\n }\n }\n}\n\nexport const registerGroupMark = () => {\n registerGroupGraphic();\n Factory.registerMark(GroupMark.type, GroupMark);\n};\n","import { application, clock, WILDCARD } from '@visactor/vrender-core';\nimport type { IEventTarget, IFederatedPointerEvent, FederatedPointerEvent, INode } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { EventEmitter } from '@visactor/vutils';\n\nimport type { DefaultGestureConfig, EmitEventObject, GestureConfig, GestureDirection, GestureEvent } from './interface';\n\n/**\n * 代码参考 https://github.com/hammerjs/hammer.js\n * The MIT License (MIT)\n\n Copyright (C) 2011-2017 by Jorik Tangelder (Eight Media)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\nconst PRESS_TIME = 251;\nconst PRESS_THRESHOLD = 9;\nconst SWIPE_VELOCITY = 0.3;\nconst SWIPE_THRESHOLD = 10;\nconst TAP_INTERVAL = 300;\n\nconst calcDirection = (start: IPointLike, end: IPointLike) => {\n const xDistance = end.x - start.x;\n const yDistance = end.y - start.y;\n if (Math.abs(xDistance) > Math.abs(yDistance)) {\n return xDistance > 0 ? 'right' : 'left';\n }\n return yDistance > 0 ? 'down' : 'up';\n};\n\n// 计算2点之间的距离\nconst calcDistance = (point1: IPointLike, point2: IPointLike) => {\n const xDistance = Math.abs(point2.x - point1.x);\n const yDistance = Math.abs(point2.y - point1.y);\n return Math.sqrt(xDistance * xDistance + yDistance * yDistance);\n};\n\nconst getCenter = (points: IPointLike[]) => {\n const pointersLength = points.length;\n\n if (pointersLength === 1) {\n return {\n x: Math.round(points[0].x),\n y: Math.round(points[0].y)\n };\n }\n\n let x = 0;\n let y = 0;\n let i = 0;\n while (i < pointersLength) {\n x += points[i].x;\n y += points[i].y;\n i++;\n }\n\n return {\n x: Math.round(x / pointersLength),\n y: Math.round(y / pointersLength)\n };\n};\n\nexport class Gesture extends EventEmitter {\n element: INode | null;\n\n private cachedEvents: IFederatedPointerEvent[] = [];\n private startTime: number;\n // @ts-ignore\n // eslint-disable-next-line no-undef\n private pressTimeout: NodeJS.Timeout | null;\n private startPoints: IPointLike[] = [];\n // 用来记录当前触发的事件\n private processEvent: Record = {};\n private startDistance: number;\n private center: IPointLike;\n private eventType: string | null;\n private direction: GestureDirection | null;\n\n private lastMoveTime: number;\n private prevMoveTime: number;\n\n private prevMovePoint: IPointLike | null;\n private lastMovePoint: IPointLike | null;\n\n private throttleTimer: number = 0;\n private emitThrottles: EmitEventObject[] = [];\n\n private config: DefaultGestureConfig;\n\n private tapCount;\n private lastTapTime;\n private lastTapTarget: IEventTarget | null = null;\n\n constructor(element: IEventTarget, config: GestureConfig = {}) {\n super();\n this.element = element;\n this.tapCount = 0;\n this.lastTapTime = 0;\n this.config = {\n press: {\n time: config?.press?.time ?? PRESS_TIME,\n threshold: config?.press?.threshold ?? PRESS_THRESHOLD\n },\n swipe: {\n threshold: config?.swipe?.threshold ?? SWIPE_THRESHOLD,\n velocity: config?.swipe?.velocity ?? SWIPE_VELOCITY\n },\n tap: {\n interval: config?.tap?.interval ?? TAP_INTERVAL\n }\n };\n this.initEvents();\n }\n\n initEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n\n element.addEventListener('pointerdown', this.onStart);\n element.addEventListener('pointermove', this.onMove);\n element.addEventListener('pointerup', this.onEnd);\n element.addEventListener('pointerupoutside', this.onEnd);\n }\n\n removeEvents() {\n const { element } = this;\n if (!element) {\n return;\n }\n element.removeEventListener('pointerdown', this.onStart);\n element.removeEventListener('pointermove', this.onMove);\n element.removeEventListener('pointerup', this.onEnd);\n element.removeEventListener('pointerupoutside', this.onEnd);\n }\n\n release() {\n this.removeEvents();\n this.element = null;\n }\n\n private onStart = (ev?: FederatedPointerEvent) => {\n this.cachedEvents = [];\n this.startPoints = [];\n this.reset();\n\n this.startTime = clock.now();\n\n const { cachedEvents, startPoints } = this;\n\n if (ev) {\n cachedEvents.push(ev.clone());\n }\n // 重置 startPoints\n startPoints.length = cachedEvents.length;\n for (let i = 0; i < cachedEvents.length; i++) {\n const { x, y } = cachedEvents[i];\n const point = { x, y };\n startPoints[i] = point;\n }\n\n if (startPoints.length === 1) {\n const event = cachedEvents[0] as unknown as GestureEvent;\n this.pressTimeout = setTimeout(() => {\n const eventType = 'press';\n const direction = 'none';\n event.direction = direction;\n event.deltaX = 0;\n event.deltaY = 0;\n event.points = startPoints;\n this.triggerStartEvent(eventType, event);\n this.triggerEvent(eventType, event);\n this.eventType = eventType;\n this.direction = direction;\n this.pressTimeout = null;\n }, this.config.press.time);\n return;\n }\n\n this.startDistance = calcDistance(startPoints[0], startPoints[1]);\n this.center = getCenter([startPoints[0], startPoints[1]]);\n };\n\n private onMove = (ev: FederatedPointerEvent) => {\n this.clearPressTimeout();\n const { startPoints, cachedEvents } = this;\n if (!startPoints.length) {\n return;\n }\n\n const moveEvent = ev.clone() as unknown as GestureEvent;\n const { x, y, pointerId } = moveEvent;\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (pointerId === cachedEvents[i].pointerId) {\n cachedEvents[i] = moveEvent;\n break;\n }\n }\n const point = { x, y };\n const points = cachedEvents.map(cachedEvent => ({ x: cachedEvent.x, y: cachedEvent.y }));\n\n const now = clock.now();\n this.prevMoveTime = this.lastMoveTime;\n this.prevMovePoint = this.lastMovePoint;\n this.lastMoveTime = now;\n this.lastMovePoint = point;\n\n if (startPoints.length === 1) {\n const startPoint = startPoints[0];\n const deltaX = x - startPoint.x;\n const deltaY = y - startPoint.y;\n const direction = this.direction || calcDirection(startPoint, point);\n this.direction = direction;\n\n const eventType = this.getEventType(point);\n moveEvent.direction = direction;\n moveEvent.deltaX = deltaX;\n moveEvent.deltaY = deltaY;\n moveEvent.points = points;\n this.triggerStartEvent(eventType, moveEvent);\n this.triggerEvent(eventType, moveEvent);\n return;\n }\n\n const { startDistance } = this;\n const currentDistance = calcDistance(points[0], points[1]);\n\n // 缩放比例\n moveEvent.scale = currentDistance / startDistance;\n moveEvent.center = this.center;\n moveEvent.points = points;\n this.triggerStartEvent('pinch', moveEvent);\n this.triggerEvent('pinch', moveEvent);\n };\n\n private onEnd = (ev: FederatedPointerEvent) => {\n const endEvent = ev.clone() as unknown as GestureEvent;\n const { cachedEvents, startPoints } = this;\n const points = cachedEvents.map(ev => {\n return { x: ev.x, y: ev.y };\n });\n endEvent.points = points;\n this.triggerEndEvent(endEvent);\n\n if (cachedEvents.length === 1) {\n const now = clock.now();\n const lastMoveTime = this.lastMoveTime;\n // 做这个判断是为了最后一次touchmove后到end前,是否还有一个停顿的过程\n // 100 是拍的一个值,理论这个值会很短,一般不卡顿的话在10ms以内\n if (now - lastMoveTime < 100) {\n const prevMoveTime = this.prevMoveTime || this.startTime;\n const intervalTime = lastMoveTime - prevMoveTime;\n // 时间间隔一定要大于0, 否则计算没意义\n if (intervalTime > 0) {\n const prevMovePoint = this.prevMovePoint || startPoints[0];\n const lastMovePoint = this.lastMovePoint || startPoints[0];\n const distance = calcDistance(prevMovePoint, lastMovePoint);\n // move速率\n const velocity = distance / intervalTime;\n // 0.3 是参考hammerjs的设置\n if (velocity > this.config.swipe.velocity && distance > this.config.swipe.threshold) {\n endEvent.velocity = velocity;\n endEvent.direction = calcDirection(prevMovePoint, lastMovePoint);\n this.triggerEvent('swipe', endEvent);\n\n this.cachedEvents = [];\n this.startPoints = [];\n this.reset();\n return;\n }\n }\n }\n\n if (now - this.startTime < this.config.press.time) {\n if (now - this.lastTapTime < this.config.tap.interval && ev.target === this.lastTapTarget) {\n this.tapCount++;\n } else {\n this.tapCount = 1;\n }\n this.lastTapTime = now;\n this.lastTapTarget = ev.target;\n\n if (this.tapCount === 1) {\n this.triggerEvent('tap', endEvent);\n } else if (this.tapCount === 2) {\n this.triggerEvent('doubletap', endEvent);\n this.tapCount = 0; // reset tapCount after doubletap\n }\n }\n }\n\n for (let i = 0, len = cachedEvents.length; i < len; i++) {\n if (cachedEvents[i].pointerId === endEvent.pointerId) {\n cachedEvents.splice(i, 1);\n startPoints.splice(i, 1);\n break;\n }\n }\n\n this.reset();\n\n // 多指离开 1 指后,重新触发一次start\n if (cachedEvents.length > 0) {\n this.onStart();\n }\n };\n\n private getEventType(point: IPointLike) {\n const { eventType, startTime, startPoints } = this;\n if (eventType === 'press') {\n return eventType;\n }\n\n let type;\n const now = clock.now();\n if (now - startTime > this.config.press.time && calcDistance(startPoints[0], point) < this.config.press.threshold) {\n type = 'press';\n } else {\n type = 'pan';\n }\n this.eventType = type;\n return type;\n }\n\n private enable(eventType: string) {\n this.processEvent[eventType] = true;\n }\n\n // 是否进行中的事件\n private isProcess(eventType: string) {\n return this.processEvent[eventType];\n }\n\n private pushEvent(type: string, ev: GestureEvent) {\n const { emitThrottles } = this;\n const newEvent = { type, ev };\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n if (emitThrottles[i].type === type) {\n emitThrottles.splice(i, 1, newEvent);\n return;\n }\n }\n emitThrottles.push(newEvent);\n }\n\n private clearPressTimeout() {\n if (this.pressTimeout) {\n clearTimeout(this.pressTimeout);\n this.pressTimeout = null;\n }\n }\n\n private reset() {\n this.clearPressTimeout();\n this.startTime = 0;\n this.startDistance = 0;\n this.direction = null;\n this.eventType = null;\n this.prevMoveTime = 0;\n this.prevMovePoint = null;\n this.lastMoveTime = 0;\n this.lastMovePoint = null;\n }\n\n private triggerEvent(type: string, ev: GestureEvent) {\n // 主要是节流处理\n this.pushEvent(type, ev);\n const { throttleTimer, emitThrottles } = this;\n if (throttleTimer) {\n return;\n }\n\n this.throttleTimer = application.global.getRequestAnimationFrame()(() => {\n application.global.getCancelAnimationFrame()(this.throttleTimer);\n this.throttleTimer = null;\n\n for (let i = 0, len = emitThrottles.length; i < len; i++) {\n const { type, ev } = emitThrottles[i];\n this.emitEvent(type, ev);\n }\n // 清空\n this.emitThrottles.length = 0;\n });\n }\n\n // 触发start事件\n private triggerStartEvent(type: string, ev: GestureEvent) {\n if (this.isProcess(type)) {\n return;\n }\n this.enable(type);\n this.triggerEvent(`${type}start`, ev);\n }\n\n private triggerEndEvent(ev: GestureEvent) {\n const processEvent = this.processEvent;\n Object.keys(processEvent).forEach(type => {\n this.triggerEvent(`${type}end`, ev);\n if (type === 'press') {\n // pressend 别名,pressup\n this.triggerEvent(`${type}up`, ev);\n }\n delete processEvent[type];\n });\n }\n\n private emitEvent(type: string, e: GestureEvent) {\n if (!this.element) {\n return;\n }\n const events = (this.element as unknown as any)._events;\n const listeners = events[WILDCARD];\n if (listeners) {\n if ('fn' in listeners) {\n listeners.fn.call(listeners.context, e, type);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n listeners[i].fn.call(listeners[i].context, e, type);\n }\n }\n }\n\n this.emit(type, e);\n }\n}\n","import type { Dict } from '../type';\n\nexport type KeyOfDistributive = T extends unknown ? keyof T : never;\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n if (!obj) {\n return [];\n }\n // Return type should be `keyof T` but exclude `number`, becuase\n // `Object.keys` only return string rather than `number | string`.\n type TKeys = KeyOfDistributive & string;\n if (Object.keys) {\n return Object.keys(obj) as TKeys[];\n }\n const keyList: TKeys[] = [];\n for (const key in obj) {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.hasOwnProperty(key)) {\n keyList.push(key as any);\n }\n }\n return keyList;\n}\n\nexport function defaults, S extends Dict>(target: T, source: S, overlay?: boolean): T & S {\n const keysArr = keys(source);\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n if (overlay ? source[key] != null : (target as T & S)[key] == null) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n return target as T & S;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function mixin(target: T | Function, source: S | Function, override: boolean = true) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n target = 'prototype' in target ? target.prototype : target;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n source = 'prototype' in source ? source.prototype : source;\n // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n // TODO: Determine if source is ES6 class?\n if (Object.getOwnPropertyNames) {\n const keyList = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keyList.length; i++) {\n const key = keyList[i];\n if (key !== 'constructor') {\n if (override ? (source as any)[key] != null : (target as any)[key] == null) {\n (target as any)[key] = (source as any)[key];\n }\n }\n }\n } else {\n defaults(target as Dict, source as Dict, override);\n }\n}\n","import { HOOK_EVENT } from '../graph/enums';\nimport type { IView, AnimationEvent, IMark, IAnimationConfig, IViewAnimate } from '../types';\n\nexport class ViewAnimate implements IViewAnimate {\n private _view: IView;\n // animation start/end events are triggered on specific animation configuration\n private _animations: { config: IAnimationConfig; mark: IMark }[] = [];\n private _additionalAnimateMarks: IMark[] = [];\n private isEnabled: boolean = true;\n\n constructor(view: IView) {\n this._view = view;\n\n this._view.addEventListener(HOOK_EVENT.ANIMATION_START, this._onAnimationStart);\n this._view.addEventListener(HOOK_EVENT.ANIMATION_END, this._onAnimationEnd);\n }\n\n stop() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.stop?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n pause() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.pause?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.pause?.();\n }\n });\n return this;\n }\n\n resume() {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.resume?.();\n });\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.resume?.();\n }\n });\n return this;\n }\n\n enable() {\n this.isEnabled = true;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enable?.();\n });\n return this;\n }\n\n disable() {\n this.isEnabled = false;\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disable?.();\n });\n // stop all addition animations when animate is disabled\n this._additionalAnimateMarks.forEach(mark => {\n // if mark is not released\n if (mark.view && mark.animate) {\n mark.animate.stop?.();\n }\n });\n // clear all additional animate marks after animations are stopped\n this._additionalAnimateMarks = [];\n return this;\n }\n\n enableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.enableAnimationState?.(state);\n });\n return this;\n }\n\n disableAnimationState(state: string | string[]) {\n this._view.traverseMarkTree(mark => {\n mark.animate && mark.animate.disableAnimationState?.(state);\n });\n return this;\n }\n\n isAnimating() {\n return (\n this._animations.length !== 0 || this._additionalAnimateMarks.some(mark => mark?.animate?.isAnimating() || false)\n );\n }\n\n animate() {\n if (!this.isEnabled) {\n return this;\n }\n\n this._view.traverseMarkTree(\n mark => {\n if (mark.isUpdated && mark.animate) {\n mark.animate.animate();\n }\n mark.cleanExitElements();\n mark.isUpdated = false;\n },\n null,\n true\n );\n return this;\n }\n\n animateAddition(additionMark: IMark) {\n const animate = additionMark.animate?.animate();\n\n if (animate && animate.isAnimating()) {\n this._additionalAnimateMarks.push(additionMark);\n }\n return this;\n }\n\n private _onAnimationStart = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_START, {});\n }\n this._animations = this._animations.concat({ config: event.animationConfig, mark: event.mark });\n };\n\n private _onAnimationEnd = (event: AnimationEvent) => {\n this._additionalAnimateMarks = this._additionalAnimateMarks.filter(mark => mark?.animate?.isAnimating());\n\n this._animations = this._animations.filter(animation => {\n return animation.config !== event.animationConfig || animation.mark !== event.mark;\n });\n if (this._animations.length === 0 && this._additionalAnimateMarks.length === 0) {\n this._view.emit(HOOK_EVENT.ALL_ANIMATION_END, {});\n }\n };\n\n release() {\n this._additionalAnimateMarks = [];\n this._animations = [];\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_START, this._onAnimationStart);\n this._view.removeEventListener(HOOK_EVENT.ALL_ANIMATION_END, this._onAnimationEnd);\n this._view = null;\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport View from './View';\nimport { ViewAnimate } from './animate';\nimport type { IViewAnimate } from '../types/animate';\nimport type { IView } from '../types';\n\nclass ViewAnimateMixin {\n animate: IViewAnimate;\n\n initAnimate(view: IView) {\n this.animate = new ViewAnimate(view);\n\n return this.animate;\n }\n}\n\nexport const registerViewAnimateAPI = () => {\n mixin(View, ViewAnimateMixin);\n};\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, AttributeUpdateType, NOWORK_ANIMATE_ATTR } from '@visactor/vrender-core';\nimport { isArray, isFunction, isNil, isObject, isValid } from '@visactor/vutils';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationEffect,\n IAnimationParameters,\n IElement,\n IGlyphElement,\n IParsedAnimationAttrs\n} from '../../types';\nimport { isValidPointsChannel } from '../attributes/helpers';\nimport { Factory } from '../../core/factory';\n\nconst transformAnimationAttributes = (attributes: IParsedAnimationAttrs, element: IElement): IParsedAnimationAttrs => {\n if (!attributes) {\n return null;\n }\n\n if (attributes.from) {\n const from = attributes.from;\n const fromKeys = Object.keys(from);\n fromKeys.forEach(channel => {\n if (isNil(from[channel])) {\n delete from[channel];\n }\n });\n const computePoints = isValidPointsChannel(fromKeys, element.mark.markType) && !isValid(from.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, from) }));\n attributes.from = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n if (attributes.to) {\n const to = attributes.to;\n const toKeys = Object.keys(to);\n toKeys.forEach(channel => {\n if (isNil(to[channel])) {\n delete to[channel];\n }\n });\n const computePoints = isValidPointsChannel(toKeys, element.mark.markType) && !isValid(to.segments);\n if (computePoints) {\n const items = element.items.map(item => Object.assign({}, item, { nextAttrs: Object.assign({}, to) }));\n attributes.to = element.transformElementItems(items, element.mark.markType, computePoints);\n }\n }\n\n return attributes;\n};\n\nexport function typeAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n // const parameters =\n const options = isFunction(effect.options)\n ? effect.options.call(null, element.getDatum(), element, parameters)\n : effect.options;\n if (!effect.type || !Factory.getAnimationType(effect.type)) {\n return null;\n }\n const attributes = Factory.getAnimationType(effect.type)(element as IGlyphElement, options, animationParameters);\n\n return transformAnimationAttributes(attributes, element);\n}\n\nconst parseChannelValue = (\n element: IElement,\n channel: string,\n channelValue: any,\n animationParameters: IAnimationParameters,\n parameters: any\n) => {\n return isFunction(channelValue) ? channelValue(element.getDatum(), element, parameters) : channelValue;\n};\n\nexport function channelAnimationAttributes(\n element: IElement,\n effect: IAnimationEffect,\n animationParameters: IAnimationParameters,\n parameters: any\n): IParsedAnimationAttrs {\n const channel = effect.channel;\n let attributes: IParsedAnimationAttrs = null;\n\n if (isArray(channel)) {\n attributes = channel.reduce(\n (res, key) => {\n res.from[key] = element.getGraphicAttribute(key, true);\n res.to[key] = element.getGraphicAttribute(key, false);\n return res;\n },\n { from: {}, to: {} }\n );\n } else if (isObject(channel)) {\n attributes = Object.keys(channel).reduce(\n (res, key) => {\n const hasFrom = !isNil(channel[key]?.from);\n const hasTo = !isNil(channel[key]?.to);\n\n if (hasFrom || hasTo) {\n res.from[key] = hasFrom\n ? parseChannelValue(element, key, channel[key].from, animationParameters, parameters)\n : undefined;\n res.to[key] = hasTo\n ? parseChannelValue(element, key, channel[key].to, animationParameters, parameters)\n : element.getGraphicAttribute(key, false);\n }\n\n return res;\n },\n { from: {}, to: {} }\n );\n }\n\n return transformAnimationAttributes(attributes, element);\n}\n\nexport class CustomInterpolator extends ACustomAnimate {\n private _element: IElement;\n private _interpolator?: IAnimationChannelInterpolator;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params: { interpolator: IAnimationChannelInterpolator; element: IElement; parameters?: any }\n ) {\n super(from, to, duration, easing, params);\n this._interpolator = params?.interpolator;\n this._element = params?.element;\n }\n\n onBind() {\n this.from = this.from ?? {};\n this.to = this.to ?? {};\n }\n\n getEndProps(): void | Record {\n return this.to;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (!this._interpolator || !this._element) {\n return;\n }\n this._interpolator.call(\n this,\n ratio,\n this.from,\n this.to,\n out,\n this._element.getDatum(),\n this._element,\n this.params.parameters\n );\n }\n}\n\nexport class AttributeAnimate extends ACustomAnimate {\n declare target: IGraphic;\n\n private _fromAttribute: any;\n private _toAttribute: any;\n\n getEndProps(): Record {\n return this.to;\n }\n\n onBind() {\n const excludedChannelMap = (this.target.constructor as any).NOWORK_ANIMATE_ATTR ?? NOWORK_ANIMATE_ATTR;\n const excludedChannels = Object.keys(excludedChannelMap).filter(channel => excludedChannelMap[channel] !== 0);\n this.subAnimate.animate.preventAttrs(excludedChannels);\n\n const from = Object.assign({}, this.from);\n const to = Object.assign({}, this.to);\n const animatedChannels: string[] = [];\n Object.keys(to).forEach(k => {\n if (excludedChannels.includes(k)) {\n from[k] = to[k];\n this.from[k] = to[k];\n } else if (isNil(from[k])) {\n from[k] = this.target.getComputedAttribute(k);\n } else {\n animatedChannels.push(k);\n }\n });\n\n // prevent attributes at the animation invoking time\n this.target.animates.forEach(a => {\n if (a !== this.subAnimate.animate) {\n a.preventAttrs(animatedChannels);\n }\n });\n\n this._fromAttribute = from;\n this._toAttribute = to;\n }\n\n onStart(): void {\n if (this._fromAttribute) {\n const from = {};\n\n // apply attribute which has not been prevented\n Object.keys(this._fromAttribute).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n from[key] = this._fromAttribute[key];\n }\n });\n\n this.target.setAttributes(from, !1, {\n type: AttributeUpdateType.ANIMATE_UPDATE,\n animationState: {\n ratio: 0,\n end: !1\n }\n });\n }\n }\n\n onEnd(): void {\n if (this._toAttribute) {\n const out = {};\n\n // apply attribute which has not been prevented\n Object.keys(this._toAttribute).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n out[key] = this._toAttribute[key];\n }\n });\n\n this.target.setAttributes(out, false, {\n type: AttributeUpdateType.ANIMATE_END\n });\n }\n }\n\n update(end: boolean, ratio: number, out: Record): void {\n if (this.updateCount === 0) {\n this.onFirstRun();\n }\n this.updateCount += 1;\n\n // Hack: waiting for canopus to remove invalid key when updating\n const lastProps = this.step.getLastProps();\n Object.keys(lastProps).forEach(key => {\n if (this.subAnimate.animate.validAttr(key)) {\n out[key] = lastProps[key];\n }\n });\n this.onUpdate(end, ratio, out);\n if (end) {\n this.onEnd();\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.stepInterpolate(\n this.subAnimate,\n this.subAnimate.animate,\n out,\n this.step,\n ratio,\n end,\n this._toAttribute,\n this._fromAttribute\n );\n }\n}\n","import { isNil, isValidNumber } from '@visactor/vutils';\nimport type { IAnimate as IGraphicAnimate } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { ACustomAnimate, Animate, AnimateGroup, AnimateMode } from '@visactor/vrender-core';\nimport type {\n IAnimationChannelInterpolator,\n IAnimationCustomConstructor,\n IAnimationTimeline,\n IAnimator,\n IAnimatorOptions,\n IAnimationUnit,\n IAnimationParameters,\n IAnimationTimeSlice,\n IElement,\n IAnimationEffect\n} from '../../types';\nimport { AttributeAnimate, channelAnimationAttributes, CustomInterpolator, typeAnimationAttributes } from './attribute';\n\nAnimate.mode |= AnimateMode.SET_ATTR_IMMEDIATELY;\n\nlet GlobalAnimatorId = 0;\n\nconst isCustomAnimateCtor = (custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor) => {\n if (isNil(custom) || isNil(custom.prototype)) {\n return false;\n }\n const prototype = custom.prototype ?? {};\n return (\n prototype instanceof ACustomAnimate ||\n // similar to ACustomAnimate, apply for different vrender version\n ('onBind' in prototype && 'onStart' in prototype && 'onEnd' in prototype && 'onUpdate' in prototype)\n );\n};\n\nexport class Animator implements IAnimator {\n id: number = GlobalAnimatorId++;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean = false;\n\n private unit: IAnimationUnit;\n private runnings: IGraphicAnimate[] = [];\n private callbackFunction: (...args: any[]) => any;\n\n constructor(\n element: IElement,\n unit: IAnimationUnit,\n animationOptions: {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n }\n ) {\n this.element = element;\n this.animationOptions = animationOptions;\n this.unit = unit;\n }\n\n callback(callbackFunction: (...args: any[]) => void): this {\n this.callbackFunction = callbackFunction;\n return this;\n }\n\n animate(animationParameters: IAnimationParameters, parameters: any): this {\n this.isAnimating = true;\n\n this.animateElement(animationParameters, parameters);\n\n // if no valid running, end animating immediately\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n return this;\n }\n\n stop(stopState?: 'start' | 'end', invokeCallback: boolean = true): this {\n // FIXME: wait for VRender to fix 'end' parameter\n this.runnings.forEach(running => running.stop(stopState));\n this.animationEnd(invokeCallback);\n return this;\n }\n\n pause(): this {\n this.runnings.forEach(running => running.pause());\n return this;\n }\n\n resume(): this {\n this.runnings.forEach(running => running.resume());\n return this;\n }\n\n startAt(startTime: number): this {\n this.runnings.forEach(running => {\n const initialDelay = this.unit.initialDelay;\n running.startAt(initialDelay + startTime);\n });\n return this;\n }\n\n getTotalAnimationTime() {\n const timeLineDuration = this.unit.initialDelay + this.unit.loopDuration * this.unit.loopCount;\n return this.unit.totalTime ?? timeLineDuration;\n }\n\n getEndAttributes() {\n return this.runnings.reduce((attributes, running) => {\n return Object.assign(attributes, running.getEndProps());\n }, {} as Record);\n }\n\n private animationEnd(invokeCallback: boolean = true) {\n this.isAnimating = false;\n this.runnings = null;\n if (invokeCallback) {\n this.callbackFunction?.call(null);\n }\n }\n\n private animateElement(animationParameters: IAnimationParameters, parameters: any) {\n const graphicItem = this.element.getGraphicItem();\n\n if (!graphicItem) {\n return;\n }\n\n const graphicAnimate: IGraphicAnimate = graphicItem.animate();\n this.runnings.push(graphicAnimate);\n // initialDelay is only used at first loop\n graphicAnimate.startAt(this.unit.initialDelay);\n // execute loop animation\n graphicAnimate.wait(this.unit.loopDelay);\n this.unit.timeSlices.forEach(timeSlice => {\n this.animateTimeSlice(graphicAnimate, timeSlice, animationParameters, parameters);\n });\n graphicAnimate.wait(this.unit.loopDelayAfter);\n\n graphicAnimate.loop(this.unit.loopCount - 1);\n\n if (isValidNumber(this.unit.totalTime)) {\n // FIXME: use VRender api instead after VRender refactor is finished\n setTimeout(() => {\n if (graphicAnimate) {\n graphicAnimate.stop('end');\n }\n }, this.unit.totalTime);\n }\n\n graphicAnimate.onEnd(() => {\n this.runnings = this.runnings.filter(running => running !== graphicAnimate);\n if (this.runnings.length === 0) {\n this.animationEnd();\n }\n });\n }\n\n private animateTimeSlice(\n graphicAnimate: IGraphicAnimate,\n timeSlice: IAnimationTimeSlice,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n const delay = timeSlice.delay as number;\n const delayAfter = timeSlice.delayAfter as number;\n const duration = timeSlice.duration as number;\n const effects = timeSlice.effects as IAnimationEffect[];\n\n // wait in loop animation before animation starts\n if (delay > 0) {\n graphicAnimate.wait(delay);\n }\n\n if (effects.length < 0) {\n graphicAnimate.wait(duration);\n } else {\n const customAnimates = effects\n .map((effect, index) => {\n const attributes =\n (effect.type\n ? typeAnimationAttributes(this.element, effect, animationParameters, parameters)\n : effect.channel\n ? channelAnimationAttributes(this.element, effect, animationParameters, parameters)\n : undefined) ?? {};\n\n const customOption = attributes.custom || effect?.custom;\n const customParametersOption = attributes?.customParameters || effect?.customParameters;\n\n if (\n attributes.from &&\n Object.keys(attributes.from).length &&\n this.unit &&\n this.animationOptions.timeline.controlOptions.immediatelyApply &&\n this.element.mark.markType !== 'component'\n ) {\n this.element.getGraphicItem().setAttributes(attributes.from);\n }\n\n const isCustomAnimate = isCustomAnimateCtor(customOption);\n const isCustomInterpolator = !isNil(customOption) && !isCustomAnimateCtor(customOption);\n\n if (isCustomInterpolator) {\n return new CustomInterpolator(attributes.from, attributes.to, duration, effect.easing, {\n interpolator: customOption as IAnimationChannelInterpolator,\n element: this.element,\n parameters: customParametersOption\n });\n } else if (isCustomAnimate) {\n return new (customOption as IAnimationCustomConstructor)(\n attributes.from,\n attributes.to,\n duration,\n effect.easing,\n customParametersOption\n );\n } else if (attributes.to) {\n return new AttributeAnimate(attributes.from, attributes.to, duration, effect.easing);\n }\n })\n .filter(animate => !isNil(animate));\n\n if (customAnimates.length === 1) {\n graphicAnimate.play(customAnimates[0]);\n } else if (customAnimates.length > 1) {\n graphicAnimate.play(new AnimateGroup(duration, customAnimates));\n }\n }\n\n if (delayAfter > 0) {\n graphicAnimate.wait(delayAfter);\n }\n }\n}\n","import { array, isFunction, isNil, merge } from '@visactor/vutils';\nimport type { IElement } from '../../types';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n IParsedAnimationConfig,\n MarkFunctionValueType\n} from '../../types/animate';\nimport {\n DefaultAnimationControlOptions,\n DefaultAnimationDelay,\n DefaultAnimationDelayAfter,\n DefaultAnimationDuration,\n DefaultAnimationEasing,\n DefaultAnimationLoop,\n DefaultAnimationOneByOne,\n DefaultAnimationStartTime\n} from '../constants';\n\nfunction transformToTimelineConfig(animationConfig: IAnimationConfig): IAnimationTimeline {\n if (isNil((animationConfig as IAnimationTimeline).timeSlices)) {\n const typeConfig = animationConfig as IAnimationTypeConfig;\n // transform type animation config into timeline animation config\n return {\n startTime: typeConfig.startTime ?? DefaultAnimationStartTime,\n totalTime: typeConfig.totalTime,\n oneByOne: typeConfig.oneByOne ?? DefaultAnimationOneByOne,\n loop: typeConfig.loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, typeConfig.controlOptions ?? {}),\n timeSlices: [\n {\n duration: typeConfig.duration ?? DefaultAnimationDuration,\n delay: typeConfig.delay ?? DefaultAnimationDelay,\n delayAfter: typeConfig.delayAfter ?? DefaultAnimationDelayAfter,\n effects: [\n {\n type: typeConfig.type,\n channel: typeConfig.channel,\n custom: typeConfig.custom,\n easing: typeConfig.easing ?? DefaultAnimationEasing,\n customParameters: typeConfig.customParameters,\n options: typeConfig.options\n }\n ]\n }\n ]\n };\n }\n\n const timeSlices = array((animationConfig as IAnimationTimeline).timeSlices);\n const formattedTimeSlices = timeSlices.filter(timeSlice => {\n return timeSlice.effects && array(timeSlice.effects).filter(effect => effect.channel || effect.type).length;\n });\n\n if (formattedTimeSlices.length) {\n // fill up default animation config\n return {\n startTime: (animationConfig as IAnimationTimeline).startTime ?? DefaultAnimationStartTime,\n totalTime: (animationConfig as IAnimationTimeline).totalTime,\n oneByOne: (animationConfig as IAnimationTimeline).oneByOne ?? DefaultAnimationOneByOne,\n loop: (animationConfig as IAnimationTimeline).loop ?? DefaultAnimationLoop,\n controlOptions: merge({}, DefaultAnimationControlOptions, animationConfig.controlOptions ?? {}),\n timeSlices: formattedTimeSlices.map(timeSlice => {\n return {\n duration: timeSlice.duration,\n delay: timeSlice.delay ?? DefaultAnimationDelay,\n delayAfter: timeSlice.delayAfter ?? DefaultAnimationDelayAfter,\n effects: array(timeSlice.effects)\n .filter(effect => effect.channel || effect.type)\n .map(effect => {\n return {\n type: effect.type,\n channel: effect.channel,\n custom: effect.custom,\n easing: effect.easing ?? DefaultAnimationEasing,\n customParameters: effect.customParameters,\n options: effect.options\n };\n })\n };\n }),\n partitioner: (animationConfig as IAnimationTimeline).partitioner,\n sort: (animationConfig as IAnimationTimeline).sort\n };\n }\n\n return;\n}\n\nexport function normalizeAnimationConfig(\n config: Record\n): Array {\n let normalizedConfig: Array = [];\n\n Object.keys(config).forEach(state => {\n normalizedConfig = normalizedConfig.concat(normalizeStateAnimationConfig(state, config[state]));\n });\n return normalizedConfig;\n}\n\nexport function normalizeStateAnimationConfig(\n state: string,\n config: IAnimationConfig | IAnimationConfig[],\n initialIndex: number = 0\n): Array {\n const normalizedConfig: Array = [];\n let index = initialIndex;\n array(config).forEach(animationConfig => {\n const timelineConfig = transformToTimelineConfig(animationConfig);\n if (timelineConfig) {\n normalizedConfig.push({\n state,\n id: timelineConfig.id ?? `${state}-${index}`,\n timeline: timelineConfig,\n originConfig: animationConfig\n });\n index += 1;\n }\n });\n return normalizedConfig;\n}\n\nexport function invokeAnimateSpec(spec: MarkFunctionValueType, element: IElement, parameters: any): T {\n if (isFunction(spec)) {\n return spec.call(null, element.getDatum(), element, parameters);\n }\n return spec;\n}\n","import { isNil } from '@visactor/vutils';\nimport type { IAnimateArranger, IAnimator } from '../../types/animate';\n\nexport class Arranger implements IAnimateArranger {\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[] = [this];\n\n animators: IAnimator[];\n totalTime: number = 0;\n startTime: number = 0;\n endTime: number = 0;\n\n constructor(animators: IAnimator[]) {\n this.animators = animators.filter(animator => !isNil(animator));\n this.totalTime = this.animators.reduce((time, animator) => {\n return Math.max(time, animator.getTotalAnimationTime());\n }, 0);\n }\n\n parallel(arranger: IAnimateArranger) {\n const parallelArrangers = Array.from(new Set(this.parallelArrangers.concat(arranger.parallelArrangers)));\n parallelArrangers.forEach(arranger => {\n arranger.parallelArrangers = parallelArrangers;\n });\n this.arrangeTime();\n return this;\n }\n\n after(arranger: IAnimateArranger) {\n this.afterArranger = arranger;\n this.arrangeTime();\n return this;\n }\n\n arrangeTime() {\n const parallelTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.totalTime);\n }, this.totalTime);\n const startTime = this.parallelArrangers.reduce((time, arranger) => {\n return Math.max(time, arranger.afterArranger?.endTime ?? 0);\n }, 0);\n\n this.parallelArrangers.forEach(arranger => {\n arranger.startTime = startTime;\n arranger.endTime = startTime + parallelTime;\n arranger.animators.forEach(animator => {\n animator.startAt(startTime);\n });\n });\n }\n}\n","import { array, isNil, isNumber } from '@visactor/vutils';\nimport type {\n IAnimate,\n IAnimationConfig,\n IAnimationParameters,\n IAnimationTimeline,\n IAnimationTimeSlice,\n IAnimationUnit,\n IAnimator,\n IParsedAnimationConfig\n} from '../../types/animate';\nimport { Animator } from './animator';\nimport { invokeAnimateSpec, normalizeAnimationConfig, normalizeStateAnimationConfig } from './config';\nimport { DefaultAnimationParameters, ImmediateAnimationState } from '../constants';\nimport type { AnimationEvent, IElement, IMark, MarkFunctionType } from '../../types';\nimport { invokeFunctionType } from '../../parse/util';\nimport { Arranger } from './arranger';\nimport { DiffState, HOOK_EVENT } from '../enums';\n\nexport class Animate implements IAnimate {\n mark: IMark;\n state: MarkFunctionType | null = null;\n configs: Array;\n immediateConfigs: Array = [];\n\n private isEnabled: boolean = true;\n private disabledStates: string[] = [];\n // store animator by animation state\n private animators: Map = new Map();\n // count animation for each elements\n private elementRecorder: WeakMap<\n IElement,\n {\n prevState: string;\n count: { [state: string]: number };\n }\n > = new WeakMap();\n private timelineCount: Record = {};\n // record: IAnimationRecord;\n\n constructor(mark: IMark, config: Record) {\n this.mark = mark;\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n getAnimationConfigs(animationState: string) {\n if (!this.isEnabled) {\n return [];\n }\n return (this.configs ?? []).filter(config => config.state === animationState);\n }\n\n updateConfig(config: Record) {\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n updateState(state: MarkFunctionType | null) {\n this.state = state;\n }\n\n animate() {\n if (!this.isEnabled || !this.configs || !this.configs.length) {\n return;\n }\n\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n elements.forEach(element => {\n // TODO: if element is restored, clear isReserved flag\n if (element.isReserved && element.diffState !== DiffState.exit) {\n element.isReserved = false;\n }\n // clear previous animation when animation state changed\n const prevElementState = this.elementRecorder.get(element)?.prevState;\n const needStopAnimation = this.configs.some(config => {\n return (\n prevElementState !== element.diffState &&\n config.state === prevElementState &&\n config.timeline.controlOptions.stopWhenStateChange\n );\n });\n if (needStopAnimation) {\n this.clearElementAnimation(element, false);\n }\n // clear animations for exit elements\n else if (element.diffState === DiffState.exit) {\n this.clearElementAnimation(element, false);\n }\n });\n\n this.configs.forEach(config => {\n this.animateByTimeline(config, elements, parameters);\n });\n\n this.mark.cleanExitElements();\n\n return this;\n }\n\n runAnimationByState(animationState: string) {\n if (!this.isEnabled) {\n return;\n }\n\n // FIXME: maybe do nothing if state animation is already running\n // if (this.animators.get(animationState)?.length > 0) { return; }\n\n const stateConfigs = this.configs.filter(config => config.state === animationState);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = stateConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stopAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.stop());\n }\n return this;\n }\n pauseAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.pause());\n }\n return this;\n }\n resumeAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.resume());\n }\n return this;\n }\n\n run(config: IAnimationConfig | IAnimationConfig[]) {\n if (!this.isEnabled) {\n return;\n }\n\n const parsedConfigs = normalizeStateAnimationConfig(ImmediateAnimationState, config, this.immediateConfigs.length);\n this.immediateConfigs = this.immediateConfigs.concat(parsedConfigs);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = parsedConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stop() {\n // map will be cleared in animator callback\n this.animators.forEach(animators => {\n animators.forEach(animator => animator.stop());\n });\n return this;\n }\n pause() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.pause()));\n return this;\n }\n resume() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.resume()));\n return this;\n }\n reverse() {\n /** Animation scheduler api, resume the recorded animations */\n return this;\n }\n restart() {\n /** Animation scheduler api, resume current animations */\n return this;\n }\n record() {\n /** Animation scheduler api, start to record a timestamp */\n return this;\n }\n recordEnd() {\n /** Animation scheduler api, end to record a timestamp */\n return this;\n }\n\n isAnimating() {\n let isAnimating = false;\n this.animators.forEach(animators => {\n isAnimating = isAnimating || animators.some(animator => animator.isAnimating);\n });\n return isAnimating;\n }\n\n isElementAnimating(element: IElement) {\n const stateAnimationCounts = this.elementRecorder.get(element)?.count;\n return isNil(stateAnimationCounts) || Object.values(stateAnimationCounts).every(count => count === 0);\n }\n\n getAnimatorCount() {\n let count = 0;\n this.animators.forEach(animators => (count += animators.length));\n return count;\n }\n\n getAllAnimators() {\n const allAnimators: IAnimator[] = [];\n this.animators.forEach(animators => {\n allAnimators.push(...animators);\n });\n return allAnimators;\n }\n\n getElementAnimators(element: IElement | IElement[], animationState?: string) {\n const elements = array(element);\n let animators: IAnimator[] = [];\n if (animationState) {\n animators = this.animators.get(animationState) ?? [];\n } else {\n this.animators.forEach(stateAnimators => {\n animators = animators.concat(stateAnimators);\n });\n }\n return animators.filter(animator => elements.includes(animator.element));\n }\n\n enable() {\n this.isEnabled = true;\n return this;\n }\n disable() {\n this.isEnabled = false;\n this.stop();\n this.animators.clear();\n return this;\n }\n enableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.filter(state => !states.includes(state));\n return this;\n }\n disableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.concat(states);\n return this;\n }\n\n release() {\n this.stop();\n // we need to clear map\n this.animators.clear();\n\n this.configs = null;\n this.animators = null;\n this.elementRecorder = null;\n this.timelineCount = null;\n }\n\n private animateByTimeline(\n config: IParsedAnimationConfig,\n elements: IElement[],\n parameters: any,\n forceState: boolean = false\n ) {\n const animators: IAnimator[] = [];\n const animatedElements = elements.filter(element => {\n // do not animate on element which is running exit animation\n // if an element is reserved, it should be set for exit animation and will be removed\n const checkExit = !(element.isReserved && element.diffState === DiffState.exit);\n // do not check animation state if forceState is set\n const state = this.getAnimationState(element);\n const checkDisabled = !this.disabledStates.includes(state);\n const checkState = forceState || state === config.state;\n // filter elements by partitioner config\n const checkPartitioner =\n !config.timeline.partitioner || config.timeline.partitioner(element.getDatum(), element, parameters);\n return checkExit && checkDisabled && checkState && checkPartitioner;\n });\n\n if (animatedElements.length) {\n if (isNil(this.timelineCount[config.id])) {\n this.timelineCount[config.id] = 0;\n }\n\n if (config.timeline.sort) {\n animatedElements.sort((elementA, elementB) => {\n return config.timeline.sort(elementA.getDatum(), elementB.getDatum(), elementA, elementB, parameters);\n });\n }\n const width = this.mark.view.width();\n const height = this.mark.view.height();\n const animationParameters = {\n width,\n height,\n group: this.mark.group ?? null,\n mark: this.mark,\n view: this.mark.view,\n elementCount: animatedElements.length,\n elementIndex: 0\n };\n // clear animator with same state\n animatedElements.forEach(element => {\n (this.animators.get(config.state) ?? [])\n .filter(animator => animator.element === element && animator.animationOptions.id === config.id)\n .forEach(animator => {\n animator.stop(null, false);\n this.handleAnimatorEnd(animator, false);\n });\n });\n // run animator\n animatedElements.forEach((element, index) => {\n animationParameters.elementIndex = index;\n // add animation parameter into parameters\n const mergedParameters = Object.assign({ [DefaultAnimationParameters]: animationParameters }, parameters);\n const animationUnit = this.getAnimationUnit(\n config.timeline,\n element,\n index,\n animatedElements.length,\n mergedParameters\n );\n animators.push(this.animateElement(config, animationUnit, element, animationParameters, mergedParameters));\n });\n }\n return animators;\n }\n\n private animateElement(\n config: IParsedAnimationConfig,\n animationUnit: IAnimationUnit,\n element: IElement,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n // create animator\n const animator = new Animator(element, animationUnit, config);\n\n // start animating\n animator.animate(animationParameters, parameters);\n // return when animator has no valid animation\n if (!animator.isAnimating) {\n return;\n }\n if (element.diffState === DiffState.exit) {\n element.isReserved = true;\n }\n\n const isFirstAnimator = this.timelineCount[config.id] === 0;\n\n this.timelineCount[config.id] += 1;\n const elementRecord = this.elementRecorder.get(element) ?? { prevState: config.state, count: {} };\n elementRecord.prevState = config.state;\n elementRecord.count[config.state] = (elementRecord.count[config.state] ?? 0) + 1;\n this.elementRecorder.set(element, elementRecord);\n const stateData = this.animators.get(config.state);\n if (!stateData) {\n this.animators.set(config.state, [animator]);\n } else {\n stateData.push(animator);\n }\n // this.animators.set(config.state, (this.animators.get(config.state) ?? []).concat(animator));\n // invoke callback when animation finish\n animator.callback(() => {\n this.handleAnimatorEnd(animator);\n });\n\n // FIXME: handle multiple timelines with same animation state\n // emit animation start event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState: config.state,\n animationConfig: config.originConfig\n };\n if (isFirstAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_START, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_START, animationEvent, element);\n\n return animator;\n }\n\n private getAnimationState(element: IElement): string {\n const customState = invokeFunctionType(this.state, this.mark.parameters(), element.getDatum(), element);\n return customState ?? element.diffState;\n }\n\n private getAnimationUnit(\n timeline: IAnimationTimeline,\n element: IElement,\n index: number,\n elementCount: number,\n parameters: any\n ): IAnimationUnit {\n const timeSlices: IAnimationTimeSlice[] = [];\n const startTime = invokeAnimateSpec(timeline.startTime, element, parameters);\n const totalTime = invokeAnimateSpec(timeline.totalTime, element, parameters);\n const oneByOne = invokeAnimateSpec(timeline.oneByOne, element, parameters);\n const loop = invokeAnimateSpec(timeline.loop, element, parameters);\n\n let loopTime = 0;\n (timeline.timeSlices as IAnimationTimeSlice[]).forEach(timeSlice => {\n const delay = invokeAnimateSpec(timeSlice.delay, element, parameters);\n const delayAfter = invokeAnimateSpec(timeSlice.delayAfter, element, parameters);\n const duration = invokeAnimateSpec(timeSlice.duration, element, parameters) ?? totalTime / elementCount;\n const effects = array(timeSlice.effects).map(effect =>\n Object.assign({}, effect, {\n customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)\n })\n );\n timeSlices.push({\n effects,\n duration,\n delay,\n delayAfter\n });\n loopTime += delay + duration + delayAfter;\n });\n\n const oneByOneDelay = isNumber(oneByOne) ? oneByOne : oneByOne === true ? loopTime : 0;\n return {\n initialDelay: startTime,\n loopCount: isNumber(loop) ? loop : loop === true ? Infinity : 1,\n loopDelay: oneByOneDelay * index,\n loopDelayAfter: oneByOneDelay * (elementCount - index - 1),\n loopAnimateDuration: loopTime,\n loopDuration: loopTime + oneByOneDelay * (elementCount - 1),\n totalTime,\n timeSlices\n };\n }\n\n private clearElementAnimation(element: IElement, clearElement: boolean = true) {\n this.animators.forEach(animators => {\n animators.forEach(animator => {\n if (animator.element === element) {\n // if previous animation state is exit, modify graphic item channel to start\n if (animator.animationOptions.state === DiffState.exit) {\n animator.stop('start', false);\n } else {\n animator.stop('end', false);\n }\n this.handleAnimatorEnd(animator, clearElement);\n }\n });\n });\n this.elementRecorder.delete(element);\n }\n\n private clearAllElements() {\n const elements = this.mark.getAllElements();\n if (elements) {\n elements.forEach((element, i) => {\n // only update mark in previous invocation\n this.clearElement(element, i === elements.length - 1);\n });\n }\n }\n\n private clearElement(element: IElement, updateMark: boolean = true) {\n this.clearElementAnimation(element);\n // element might already be released\n if (element.getGraphicItem()) {\n // if element stops animating or needs to be removed, clear all cached attributes\n element.clearGraphicAttributes();\n // remove element from mark if exit animation is finished\n if (element.diffState === DiffState.exit) {\n element.isReserved = false;\n }\n if (updateMark) {\n this.mark.cleanExitElements();\n }\n // TODO: waiting for vRender to optimize bound cache logic, otherwise this line\n // will cause huge performance waste in multiple animation like appear & disappear.\n // if (updateMark) mark.updateBounds();\n }\n }\n\n private handleAnimatorEnd(animator: IAnimator, clearElement: boolean = true) {\n const element = animator.element;\n const animationOptions = animator.animationOptions;\n const animationState = animationOptions.state;\n const isImmediateAnimation = animationState === ImmediateAnimationState;\n\n // sub element animation count\n const stateAnimationCounts = this.elementRecorder.get(element).count;\n stateAnimationCounts[animationState] -= 1;\n // FIXME: maybe delete zero animationState\n // if (stateAnimationCounts[animationState] === 0) {\n // delete stateAnimationCounts[animationState];\n // }\n\n this.animators.set(\n animationState,\n this.animators.get(animationState).filter(ani => ani !== animator)\n );\n if (this.animators.get(animationState).length === 0) {\n this.animators.delete(animationState);\n }\n this.timelineCount[animationOptions.id] -= 1;\n const isLastAnimator = this.timelineCount[animationOptions.id] === 0;\n\n const originAnimationConfig = isImmediateAnimation\n ? this.immediateConfigs.find(config => config.id === animationOptions.id).originConfig\n : this.configs.find(config => config.id === animationOptions.id).originConfig;\n if (isLastAnimator) {\n delete this.timelineCount[animationOptions.id];\n // delete config when immediate executed animation is finished\n if (isImmediateAnimation) {\n this.immediateConfigs = this.immediateConfigs.filter(config => config.id !== animationOptions.id);\n }\n }\n\n if (clearElement) {\n if (Object.keys(this.timelineCount).length === 0) {\n this.clearAllElements();\n } else if (animationState === DiffState.exit && stateAnimationCounts[DiffState.exit] === 0) {\n // if all exit animations are finished\n this.clearElement(element);\n }\n }\n\n // emit animation end event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState,\n animationConfig: originAnimationConfig\n };\n if (isLastAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_END, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_END, animationEvent, element);\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport { Animate } from '../graph/animation/animate';\nimport type { IMark, MarkSpec } from '../types';\nimport type { IAnimate } from '../types/animate';\nimport { Mark } from './mark';\n\nclass MarkAnimateMixin {\n animate: IAnimate = new Animate(this as unknown as IMark, {});\n\n initAnimate(spec: MarkSpec) {\n if (!this.animate) {\n this.animate = new Animate(this as unknown as IMark, spec.animation);\n if ((this as any).needAnimate()) {\n this.animate.updateState(spec.animationState);\n }\n }\n }\n\n reuseAnimate(mark: IMark) {\n this.animate = mark.animate;\n this.animate.mark = this as unknown as IMark;\n }\n\n updateAnimate(spec: MarkSpec) {\n this.animate.updateConfig(spec.animation);\n this.animate.updateState(spec.animationState);\n }\n}\n\nexport const registerMarkAnimateAPI = () => {\n mixin(Mark, MarkAnimateMixin);\n};\n","import { measureText } from '../util';\n\n/** 存放一些业务方可能会在扩展功能里用到的工具方法 */\nexport const VCHART_UTILS = {\n measureText\n};\n","export class ExpressionFunction {\n functions: { [key: string]: Function };\n\n static instance_: ExpressionFunction;\n\n // 单例模式\n static instance(): ExpressionFunction {\n if (!ExpressionFunction.instance_) {\n ExpressionFunction.instance_ = new ExpressionFunction();\n }\n return ExpressionFunction.instance_;\n }\n\n constructor() {\n this.functions = {};\n }\n\n // 注册函数\n registerFunction(name: string, fun: Function) {\n if (!name || !fun) {\n return;\n }\n this.functions[name] = fun;\n }\n\n // 注销函数\n unregisterFunction(name: string) {\n if (!name) {\n return;\n }\n delete this.functions[name];\n }\n\n // 获取函数\n getFunction(name: string): Function | null {\n return this.functions[name] || null;\n }\n\n // 获取函数名列表\n getFunctionNameList(): string[] | null {\n return Object.keys(this.functions);\n }\n}\n","import {\n initAllEnv,\n loadBrowserEnv,\n loadFeishuEnv,\n loadLynxEnv,\n loadNodeEnv,\n loadTaroEnv,\n loadWxEnv,\n loadTTEnv,\n loadHarmonyEnv\n} from '@visactor/vrender-kits';\nimport { container } from '@visactor/vrender-core';\n\n/**\n * 加载所有环境兼容代码\n */\nexport const registerAllEnv = () => {\n initAllEnv();\n};\n\n/**\n * 加载浏览器环境代码\n */\nexport const registerBrowserEnv = () => {\n loadBrowserEnv(container);\n};\n\n/**\n * 加载飞书(飞书小程序/block/tt)环境代码\n */\nexport const registerLarkEnv = () => {\n // TODO: 后续统一为 loadLarkEnv\n loadFeishuEnv(container);\n};\n\n/**\n * 加载 Lynx 环境代码\n */\nexport const registerLynxEnv = () => {\n loadLynxEnv(container);\n};\n\n/**\n * 加载 Node 环境代码\n */\nexport const registerNodeEnv = () => {\n loadNodeEnv(container);\n};\n\n/**\n * 加载 Taro 环境代码\n */\nexport const registerTaroEnv = () => {\n loadTaroEnv(container);\n};\n\n/**\n * 加载微信小程序环境代码\n */\nexport const registerWXEnv = () => {\n loadWxEnv(container);\n};\n/**\n * 加载TT小程序环境代码\n */\nexport const registerTTEnv = () => {\n loadTTEnv(container);\n};\n/**\n * 加载Harmony环境代码\n */\nexport const registerHarmonyEnv = () => {\n loadHarmonyEnv(container);\n};\n","/**\n * 主题的命名,不要使用类似 arco,default 等字段,应该要以主题的特征来,颜色/场景特征(light, dark)\n *\n * 1. 对除了 color 外的一些主题设置,应该要有专门的设计,**不要直接复制**\n * 2. 原则上来讲,默认值尽量都放主题中,但是也可根据情况自行判断\n * 3. 目前主题只到系列,不到系列的 mark,对于这个分界没有太清楚,后续根据需求再做开放\n */\nimport type { ITheme } from '../../interface';\nimport { colorScheme } from './color-scheme';\n\nexport const darkTheme: ITheme = {\n name: 'dark',\n colorScheme,\n component: {\n dataZoom: {\n selectedBackground: {\n style: {\n fillOpacity: 0.4,\n outerBorder: {\n strokeOpacity: 0.4\n }\n }\n }\n }\n }\n};\n","import type { IThemeColorScheme } from '../../color-scheme/interface';\nimport { dataScheme } from '../../color-scheme/builtin/default';\nimport type { BuiltinColorPalette } from '../../color-scheme/builtin/interface';\n\nexport const colorScheme: IThemeColorScheme = {\n default: {\n dataScheme,\n palette: {\n /** 背景色 */\n backgroundColor: '#202226',\n /** 图表边框色 */\n borderColor: '#404349',\n /** 默认阴影颜色 */\n shadowColor: 'rgba(0,0,0,0.1)',\n /** 鼠标 hover 项背景颜色 */\n hoverBackgroundColor: '#404349',\n /** 滑块类组件背景条填充颜色 */\n sliderRailColor: '#404349',\n /** 滑块类组件滑块填充颜色 */\n sliderHandleColor: '#202226',\n /** 滑块类组件已选范围填充颜色 */\n sliderTrackColor: '#4284FF',\n /** 浮层背景区域颜色 */\n popupBackgroundColor: '#404349',\n\n /** 主要字色 */\n primaryFontColor: '#fdfdfd',\n /** 次要字色 */\n secondaryFontColor: '#bbbdc3',\n /** 第三字色 */\n tertiaryFontColor: '#888c93',\n /** 轴标签字色 */\n axisLabelFontColor: '#888c93',\n /** 禁用字色 */\n disableFontColor: '#55595f',\n /** 轴高亮标记字色 */\n axisMarkerFontColor: '#202226',\n\n /** 轴网格线颜色 */\n axisGridColor: '#404349',\n /** 轴线颜色 */\n axisDomainColor: '#4b4f54',\n\n /** 缩略轴滑块描边颜色 */\n dataZoomHandleStrokeColor: '#bbbdc3',\n /** 缩略轴图表区域颜色 */\n dataZoomChartColor: '#55595F',\n\n /** 播放器控制器填充颜色 */\n playerControllerColor: '#4284FF',\n\n /** 滚动条滑块颜色 */\n scrollBarSliderColor: 'rgba(255,255,255,0.3)',\n\n /** 轴高亮标记背景色 */\n axisMarkerBackgroundColor: '#fdfdfd',\n /** 标注标签背景颜色 */\n markLabelBackgroundColor: '#404349',\n /** 标注线颜色 */\n markLineStrokeColor: '#bbbdc3',\n\n /** 危险色 */\n dangerColor: '#eb4b4b',\n /** 警告色 */\n warningColor: '#f0bd30',\n /** 成功色 */\n successColor: '#14b267',\n /** 信息色 */\n infoColor: '#4284ff',\n\n /** 图例翻页器文字颜色 */\n discreteLegendPagerTextColor: '#BBBDC3',\n /** 图例翻页器按钮颜色 */\n discreteLegendPagerHandlerColor: '#BBBDC3',\n /** 图例翻页器按钮颜色(disable 态) */\n discreteLegendPagerHandlerDisableColor: '#55595F',\n\n /** 占位圆颜色 */\n emptyCircleColor: '#bbbdc3',\n\n /** 线性进度条颜色 */\n linearProgressTrackColor: '#404349'\n } as BuiltinColorPalette\n }\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\nimport { warn } from '../../util/debug';\n\nexport class BasePluginService implements IBasePluginService {\n protected _plugins: T[];\n readonly id: number = createID();\n\n constructor() {\n this._plugins = [];\n }\n\n add(plugins: T[]): T[] | null {\n if (!plugins || plugins.length === 0) {\n return null;\n }\n const unloadedPlugins: T[] = [];\n plugins.forEach(plugin => {\n const isExist = this._plugins.find(p => p.id === plugin.id);\n if (isExist) {\n warn('不要重复添加相同的plugin');\n return;\n }\n this._plugins.push(plugin);\n unloadedPlugins.push(plugin);\n plugin.onAdd && plugin.onAdd(this);\n });\n\n return unloadedPlugins;\n }\n\n load(plugins: T[]): void {\n const unloadedPlugins = this.add(plugins);\n if (!unloadedPlugins || !unloadedPlugins.length) {\n return;\n }\n\n this.activate(plugins);\n }\n\n activate(plugins: T[]): void {\n if (!plugins.length) {\n return;\n }\n\n plugins.forEach(plugin => {\n plugin.init && plugin.init();\n });\n }\n\n get(id: number): T | undefined {\n return this._plugins.find(p => p.id === id);\n }\n\n getAll(): T[] {\n return this._plugins.slice();\n }\n\n release(pluginsId: number): void {\n const plugin = this.get(pluginsId);\n if (!plugin) {\n return;\n }\n plugin.release(this);\n this._plugins = this._plugins.filter(entry => entry !== plugin);\n }\n\n releaseAll(): void {\n this._plugins.forEach(plugin => {\n plugin.release(this);\n });\n\n this._plugins = [];\n }\n\n clear(pluginsId: number): void {\n const plugin = this.get(pluginsId);\n if (!plugin) {\n return;\n }\n plugin.clear(this);\n }\n\n clearAll(): void {\n this._plugins.forEach(plugin => {\n plugin.clear?.(this);\n });\n }\n}\n","import type { IChartPlugin, IChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\nimport type { VChartRenderActionSource } from '../../core/interface';\nimport type { IChartSpecInfo } from '../../chart/interface/common';\n\nexport class ChartPluginService\n extends BasePluginService\n implements IChartPluginService\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit(chartSpec: any) {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this, chartSpec);\n });\n }\n\n onBeforeResize(width: number, height: number) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeResize && plugin.onBeforeResize(this, width, height);\n });\n }\n\n onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterChartSpecTransform && plugin.onAfterChartSpecTransform(this, chartSpec, actionSource);\n });\n }\n\n onAfterModelSpecTransform(chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterModelSpecTransform &&\n plugin.onAfterModelSpecTransform(this, chartSpec, chartSpecInfo, actionSource);\n });\n }\n\n onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);\n });\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.globalInstance = null;\n }\n}\n","import { array, isArray, isNil, isString, isValid } from '@visactor/vutils';\nimport type {\n IBaseInteractionOptions,\n IElement,\n IGlyphElement,\n IGrammarBase,\n IView,\n InteractionEventHandler\n} from '../types';\n\nexport abstract class BaseInteraction {\n readonly view: IView;\n\n options: T;\n\n type: string;\n\n constructor(view: IView, options: T) {\n this.view = view;\n this.depend(options?.dependency);\n }\n\n references: Map = new Map();\n\n protected abstract getEvents(): Array<{ type: string | string[]; handler: InteractionEventHandler }>;\n\n getStartState(): string {\n return null;\n }\n\n depend(grammar: IGrammarBase[] | IGrammarBase | string[] | string) {\n this.references.clear();\n array(grammar)\n .map(grammar => (isString(grammar) ? this.view.getGrammarById(grammar) : grammar))\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n this.references.set(ref, (this.references.get(ref) ?? 0) + 1);\n });\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n bind() {\n const events = this.getEvents();\n\n (events ?? []).forEach(evt => {\n if (evt.type && evt.handler) {\n if (isArray(evt.type)) {\n evt.type.forEach(evtType => {\n evtType && evtType !== 'none' && this.view.addEventListener(evtType, evt.handler);\n });\n } else {\n evt.type !== 'none' && this.view.addEventListener(evt.type, evt.handler);\n }\n }\n });\n }\n\n unbind() {\n // unbind events\n const events = this.getEvents();\n\n (events ?? []).forEach(evt => {\n if (evt.type && evt.handler) {\n if (isArray(evt.type)) {\n evt.type.forEach(evtType => {\n evtType && evtType !== 'none' && this.view.removeEventListener(evtType, evt.handler);\n });\n } else {\n evt.type !== 'none' && this.view.removeEventListener(evt.type, evt.handler);\n }\n }\n });\n }\n\n start(element: IElement | IGlyphElement) {\n // do nothing\n }\n\n reset(element?: IElement | IGlyphElement) {\n // do nothing\n }\n\n protected dispatchEvent(type: 'start' | 'reset' | 'update' | 'end', params: any) {\n this.view.emit(`${this.type}:${type}`, params);\n\n if (type === 'start' && this.options.onStart) {\n this.options.onStart(params);\n } else if (type === 'reset' && this.options.onReset) {\n this.options.onReset(params);\n } else if (type === 'update' && this.options.onUpdate) {\n this.options.onUpdate(params);\n } else if (type === 'end' && this.options.onEnd) {\n this.options.onEnd(params);\n }\n }\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementActiveOptions, IElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\n\nexport class ElementActive extends BaseInteraction {\n static type: string = 'element-active';\n type: string = ElementActive.type;\n\n static defaultOptions: ElementActiveOptions = {\n state: InteractionStateEnum.active,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementActiveOptions;\n protected _marks?: IMark[];\n protected _prevActiveElement?: IElement;\n\n constructor(view: IView, options?: ElementActiveOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementActive.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n start(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.addState(this.options.state);\n this._prevActiveElement = element;\n }\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n const el = element ?? this._prevActiveElement;\n\n if (el) {\n if (this._marks && this._marks.includes(el.mark)) {\n el.removeState(this.options.state);\n }\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.reset(e.element);\n };\n}\n","import { array, isNumber, isString } from '@visactor/vutils';\nimport type { ElementFilterOptions, ElementSelectTriggerOff, EventType, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const markSpec = (mark && mark.getSpec()) as MarkSpec;\n const encode = markSpec && markSpec.encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n\nexport const parseTriggerOffOfSelect = (triggerOff: ElementSelectTriggerOff | ElementSelectTriggerOff[]) => {\n const triggerOffArray = array(triggerOff);\n const resetType: ('view' | 'self' | 'timeout')[] = [];\n const eventNames: EventType[] = [];\n\n triggerOffArray.forEach(off => {\n if (off === 'empty') {\n resetType.push('view');\n } else if (isString(off) && off !== 'none') {\n if ((off as string).includes('view:')) {\n eventNames.push((off as string).replace('view:', '') as EventType);\n\n resetType.push('view');\n } else {\n eventNames.push(off as EventType);\n\n resetType.push('self');\n }\n } else if (isNumber(off)) {\n resetType.push('timeout');\n }\n });\n\n return {\n eventNames,\n resetType\n };\n};\n","import { isArray } from '@visactor/vutils';\nimport { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementSelectOptions,\n EventType,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { groupMarksByState, parseTriggerOffOfSelect } from './utils';\nimport { BaseInteraction } from './base';\n\nexport interface ElementSelect extends IToggleStateMixin, BaseInteraction {}\n\nexport class ElementSelect extends BaseInteraction {\n static type: string = 'element-select';\n type: string = ElementSelect.type;\n\n static defaultOptions: ElementSelectOptions = {\n state: InteractionStateEnum.selected,\n trigger: 'click'\n };\n protected _resetType: ('view' | 'self' | 'timeout')[] = [];\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n private _timer?: number;\n protected _statedElements?: (IElement | IGlyphElement)[];\n\n constructor(view: IView, options?: ElementSelectOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementSelect.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.state, this.options.reverseState]);\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n protected getEvents() {\n const triggerOff = this.options.triggerOff;\n const trigger = this.options.trigger;\n\n const events = [\n {\n type: trigger,\n handler: this.handleStart\n }\n ];\n\n const { eventNames, resetType } = parseTriggerOffOfSelect(triggerOff);\n\n eventNames.forEach(evt => {\n if (evt && (isArray(trigger) ? !trigger.includes(evt) : evt !== trigger)) {\n events.push({ type: evt as EventType, handler: this.handleReset });\n }\n });\n\n this._resetType = resetType;\n\n return events;\n }\n\n resetAll = () => {\n const { state, reverseState } = this.options;\n\n if (this._statedElements && this._statedElements.length) {\n this.clearAllStates(state, reverseState);\n this.dispatchEvent('reset', { elements: this._statedElements, options: this.options });\n\n this._statedElements = [];\n }\n };\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n const element = e.element;\n const hasActiveElement = element && this._marks && this._marks.includes(element.mark);\n\n if (this._resetType.includes('view') && !hasActiveElement) {\n this.resetAll();\n } else if (this._resetType.includes('self') && hasActiveElement) {\n this.resetAll();\n }\n };\n\n start(element: InteractionEvent['element']) {\n const { state, reverseState, isMultiple } = this.options;\n if (element && this._marks && this._marks.includes(element.mark)) {\n if (element.hasState(state)) {\n if (this._resetType.includes('self')) {\n const newStatedElements = this._statedElements && this._statedElements.filter(el => el !== element);\n\n if (newStatedElements && newStatedElements.length) {\n this._statedElements = this.updateStates(newStatedElements, this._statedElements, state, reverseState);\n } else {\n this.resetAll();\n }\n }\n } else {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n element.addState(state);\n\n this._statedElements = this.updateStates(\n isMultiple && this._statedElements ? [...this._statedElements, element] : [element],\n this._statedElements,\n state,\n reverseState\n );\n this.dispatchEvent('start', { elements: this._statedElements, options: this.options });\n\n if (this._resetType.includes('timeout')) {\n this._timer = setTimeout(() => {\n this.resetAll();\n }, this.options.triggerOff as number) as unknown as number;\n }\n }\n } else if (this._resetType.includes('view') && this._statedElements && this._statedElements.length) {\n this.resetAll();\n }\n }\n\n reset(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.state, this.options.reverseState]);\n }\n } else {\n this.resetAll();\n }\n }\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementHighlightOptions,\n EventType,\n IElement,\n IGlyphElement,\n IMark,\n IToggleStateMixin,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { groupMarksByState } from './utils';\nimport { isString } from '@visactor/vutils';\n\nexport interface ElementHighlight extends IToggleStateMixin, BaseInteraction {}\n\nexport class ElementHighlight extends BaseInteraction {\n static type: string = 'element-highlight';\n type: string = ElementHighlight.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n protected _lastElement?: IElement;\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _resetType?: 'view' | 'self';\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlight.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n this._stateMarks = groupMarksByState(this._marks, [this.options.highlightState, this.options.blurState]);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n const triggerOff = this.options.triggerOff;\n const trigger = this.options.trigger;\n const events = [\n {\n type: trigger,\n handler: this.handleStart\n }\n ];\n\n let eventName = triggerOff;\n if (isString(triggerOff) && (triggerOff as string).includes('view:')) {\n eventName = (triggerOff as string).replace('view:', '') as EventType;\n this._resetType = 'view';\n } else {\n this._resetType = 'self';\n }\n\n events.push({ type: eventName as EventType, handler: this.handleReset });\n\n return events;\n }\n\n resetAll() {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement) {\n this.clearAllStates(highlightState, blurState);\n\n this.dispatchEvent('reset', { elements: [this._lastElement], options: this.options });\n\n this._lastElement = null;\n\n this._statedElements = null;\n }\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const { highlightState, blurState } = this.options;\n\n if (this._lastElement === element) {\n return;\n }\n\n this._statedElements = this.updateStates([element], this._statedElements, highlightState, blurState);\n\n this._lastElement = element;\n\n this.dispatchEvent('start', { elements: [element], options: this.options });\n } else if (this._lastElement && this._resetType === 'view') {\n this.resetAll();\n }\n }\n\n reset(element: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n const element = e.element;\n\n if (element) {\n const hasActiveElement = this._marks && this._marks.includes(element.mark);\n\n if (this._resetType === 'view' && !hasActiveElement) {\n this.resetAll();\n } else if (this._resetType === 'self' && hasActiveElement) {\n this.resetAll();\n }\n }\n };\n}\n","import { isNil } from '@visactor/vutils';\nimport type { ElementHighlightOptions, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { InteractionStateEnum } from '../graph/enums';\n\nexport class ElementHighlightByKey extends BaseInteraction {\n static type: string = 'element-highlight-by-key';\n type: string = ElementHighlightByKey.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByKey.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const highlightKey = element.key;\n\n if (isNil(highlightKey)) {\n return;\n }\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.key === highlightKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n const hasActiveElement = e.element && this._marks && this._marks.includes(e.element.mark);\n\n if (hasActiveElement) {\n this.resetAll();\n }\n };\n}\n","import { isNil } from '@visactor/vutils';\nimport type { ElementHighlightOptions, IMark, IView, InteractionEvent } from '../types';\nimport { InteractionStateEnum } from '../graph/enums';\nimport { BaseInteraction } from './base';\n\nexport class ElementHighlightByGroup extends BaseInteraction {\n static type: string = 'element-highlight-by-group';\n type: string = ElementHighlightByGroup.type;\n\n static defaultOptions: ElementHighlightOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n trigger: 'pointerover',\n triggerOff: 'pointerout'\n };\n options: ElementHighlightOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByGroup.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n start(element: InteractionEvent['element']) {\n if (element && this._marks && this._marks.includes(element.mark)) {\n const highlightKey = element.groupKey;\n\n if (isNil(highlightKey)) {\n return;\n }\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.groupKey === highlightKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.element);\n };\n\n handleReset = (e: InteractionEvent) => {\n const element = e.element;\n const hasActiveElement = element && this._marks && this._marks.includes(element.mark);\n\n if (hasActiveElement) {\n this.resetAll();\n }\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementActiveByLegendOptions, IElement, IGlyphElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { LegendEvent } from '@visactor/vrender-components';\nimport { isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementActiveByLegend extends BaseInteraction {\n static type: string = 'element-active-by-legend';\n type: string = ElementActiveByLegend.type;\n\n static defaultOptions: ElementActiveByLegendOptions = {\n state: InteractionStateEnum.active,\n filterType: 'groupKey'\n };\n options: ElementActiveByLegendOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementActiveByLegendOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementActiveByLegend.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected getEvents() {\n return [\n {\n type: LegendEvent.legendItemHover,\n handler: this.handleStart\n },\n {\n type: LegendEvent.legendItemUnHover,\n handler: this.handleReset\n }\n ];\n }\n\n getStartState(): string {\n return this.options.state;\n }\n\n start(element: IElement | IGlyphElement | string) {\n const itemKey = element;\n\n if (isNil(itemKey)) {\n return;\n }\n\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isActive = filterValue(el) === itemKey;\n\n if (isActive) {\n el.addState(this.options.state);\n } else {\n el.removeState(this.options.state);\n }\n });\n });\n }\n\n resetAll() {\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(this.options.state);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState(this.options.state);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent) => {\n this.start(e.detail?.data?.id);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.resetAll();\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type {\n ElementHighlightByLegendOptions,\n IElement,\n IGlyphElement,\n IMark,\n IView,\n InteractionEvent\n} from '../types';\nimport { BaseInteraction } from './base';\nimport { LegendEvent } from '@visactor/vrender-components';\nimport { isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementHighlightByLegend extends BaseInteraction {\n static type: string = 'element-highlight-by-legend';\n type: string = ElementHighlightByLegend.type;\n\n static defaultOptions: ElementHighlightByLegendOptions = {\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n filterType: 'groupKey'\n };\n options: ElementHighlightByLegendOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightByLegendOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByLegend.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: LegendEvent.legendItemHover,\n handler: this.handleStart\n },\n { type: LegendEvent.legendItemUnHover, handler: this.handleReset }\n ];\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = filterValue(el) === itemKey;\n\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n resetAll() {\n const states = [this.options.highlightState, this.options.blurState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent, element: IElement | IGlyphElement) => {\n this.start(e.detail?.data?.id);\n };\n\n handleReset = (e: InteractionEvent) => {\n this.resetAll();\n };\n}\n","import { InteractionStateEnum } from '../graph/enums';\nimport type { ElementHighlightByNameOptions, IElement, IGlyphElement, IMark, IView, InteractionEvent } from '../types';\nimport { BaseInteraction } from './base';\nimport { array, isNil } from '@visactor/vutils';\nimport { generateFilterValue } from './utils';\n\nexport class ElementHighlightByName extends BaseInteraction {\n static type: string = 'element-highlight-by-name';\n type: string = ElementHighlightByName.type;\n\n static defaultOptions: ElementHighlightByNameOptions = {\n trigger: 'pointerover',\n triggerOff: 'pointerout',\n highlightState: InteractionStateEnum.highlight,\n blurState: InteractionStateEnum.blur,\n filterType: 'groupKey'\n };\n options: ElementHighlightByNameOptions;\n protected _marks?: IMark[];\n\n constructor(view: IView, options?: ElementHighlightByNameOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByName.defaultOptions, options);\n\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n getStartState(): string {\n return this.options.highlightState;\n }\n\n protected getEvents() {\n return [\n {\n type: this.options.trigger,\n handler: this.handleStart\n },\n { type: this.options.triggerOff, handler: this.handleReset }\n ];\n }\n\n protected _filterByName(e: InteractionEvent) {\n const names = array(this.options.graphicName);\n return e?.target?.name && names.includes(e.target.name);\n }\n\n protected _parseTargetKey(e: InteractionEvent, element: IElement | IGlyphElement) {\n return this.options.parseData\n ? this.options.parseData(e)\n : e.target.type === 'text'\n ? (e.target.attribute as any).text\n : null;\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n\n const filterValue = generateFilterValue(this.options);\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = filterValue(el) === itemKey;\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n resetAll() {\n const states = [this.options.blurState, this.options.highlightState];\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n reset(element?: InteractionEvent['element']) {\n if (element) {\n if (this._marks && this._marks.includes(element.mark)) {\n element.removeState([this.options.highlightState, this.options.blurState]);\n }\n } else {\n this.resetAll();\n }\n }\n\n handleStart = (e: InteractionEvent, element: IElement | IGlyphElement) => {\n const shoudStart = this.options.shouldStart ? this.options.shouldStart(e) : this._filterByName(e);\n if (shoudStart) {\n const itemKey = this._parseTargetKey(e, element);\n this.start(itemKey);\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n const shoudReset = this.options.shouldReset ? this.options.shouldReset(e) : this._filterByName(e);\n\n if (shoudReset) {\n this.resetAll();\n }\n };\n}\n","import type { ElementHighlightByGraphicNameOptions, IElement, IGlyphElement, IView, InteractionEvent } from '../types';\nimport { isNil } from '@visactor/vutils';\nimport { ElementHighlight } from './element-highlight';\n\nexport class ElementHighlightByGraphicName extends ElementHighlight {\n static type: string = 'element-highlight-by-graphic-name';\n type: string = ElementHighlightByGraphicName.type;\n\n options: ElementHighlightByGraphicNameOptions;\n\n constructor(view: IView, options?: ElementHighlightByGraphicNameOptions) {\n super(view, options);\n this.options = Object.assign({}, ElementHighlightByGraphicName.defaultOptions, options);\n this._marks = view.getMarksBySelector(this.options.selector);\n }\n\n protected _filterByName(e: InteractionEvent) {\n const name = e?.target?.name;\n return !!name;\n }\n\n protected _parseTargetKey(e: InteractionEvent, element: IElement | IGlyphElement) {\n return e.target.name;\n }\n\n start(itemKey: IElement | IGlyphElement | string) {\n if (isNil(itemKey)) {\n return;\n }\n\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n const isHighlight = el.getGraphicItem()?.name === itemKey;\n if (isHighlight) {\n el.updateStates({\n [this.options.blurState]: false,\n [this.options.highlightState]: true\n });\n } else {\n el.updateStates({\n [this.options.blurState]: true,\n [this.options.highlightState]: false\n });\n }\n });\n });\n }\n\n reset() {\n const states = [this.options.blurState, this.options.highlightState];\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n el.removeState(states);\n });\n });\n }\n\n handleStart = (e: InteractionEvent) => {\n if (e && e.element && this._marks.includes(e.element.mark)) {\n const shouldStart = this.options.shouldStart ? this.options.shouldStart(e) : this._filterByName(e);\n if (shouldStart) {\n const itemKey = this._parseTargetKey(e, e.element);\n this.start(itemKey);\n }\n }\n };\n\n handleReset = (e: InteractionEvent) => {\n if (e && e.element && this._marks.includes(e.element.mark)) {\n this.reset();\n }\n };\n}\n","import type { InteractionEvent } from '../types';\nimport { ElementSelect } from './element-select';\n\nexport class ElementSelectByGraphicName extends ElementSelect {\n static type: string = 'element-select-by-graphic-name';\n type: string = ElementSelectByGraphicName.type;\n\n start(element: InteractionEvent['element']) {\n const name = element.getGraphicItem()?.name;\n if (name) {\n this._marks.forEach(mark => {\n mark.elements.forEach(el => {\n if (el.getGraphicItem()?.name === name) {\n super.start(el);\n }\n });\n });\n }\n }\n}\n","import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';\n\nexport class ToggleStateMixin implements IToggleStateMixin {\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _marks?: IMark[];\n protected _stateMarks: Record;\n\n updateStates(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) {\n if (!newStatedElements || !newStatedElements.length) {\n return null;\n }\n if (state && reverseState) {\n if (prevStatedElements && prevStatedElements.length) {\n // toggle\n this.toggleReverseStateOfElements(newStatedElements, prevStatedElements, reverseState);\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n // update all the elements\n this.addBothStateOfElements(newStatedElements, state, reverseState);\n }\n } else if (state) {\n if (prevStatedElements && prevStatedElements.length) {\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n this.addStateOfElements(newStatedElements, state);\n }\n }\n\n return newStatedElements;\n }\n\n protected toggleReverseStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n reverseState: string\n ) {\n prevStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.addState(reverseState);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.removeState(reverseState);\n }\n });\n }\n\n protected toggleStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n state: string\n ) {\n prevStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.removeState(state);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.addState(state);\n }\n });\n }\n\n protected addBothStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string, reverseState: string) {\n this._marks.forEach(mark => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark);\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n } else {\n if (hasReverse) {\n el.addState(reverseState);\n }\n }\n });\n });\n }\n\n protected addStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string) {\n this._marks.forEach(mark => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n }\n });\n });\n }\n\n clearAllStates(state?: string, reverseState?: string) {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n this._marks.forEach(mark => {\n if (mark && mark.elements) {\n if (reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(reverseState);\n });\n }\n\n if (state && this._stateMarks[state] && this._stateMarks[state].includes(mark)) {\n mark.elements.forEach(el => {\n if (this._statedElements.includes(el)) {\n el.removeState(state);\n }\n });\n }\n }\n });\n }\n}\n","import { Factory } from '../core/factory';\nimport { ElementActive } from './element-active';\nimport { ElementSelect } from './element-select';\nimport { ElementHighlight } from './element-highlight';\nimport { ElementHighlightByKey } from './element-highlight-by-key';\nimport { ElementHighlightByGroup } from './element-highlight-by-group';\nimport { ElementActiveByLegend } from './element-active-by-legend';\nimport { ElementHighlightByLegend } from './element-highlight-by-legend';\nimport { ElementHighlightByName } from './element-highlight-by-name';\nimport { ElementHighlightByGraphicName } from './element-highlight-by-graphic-name';\nimport { ElementSelectByGraphicName } from './element-select-by-graphic-name';\n\nimport { BrushHighlight } from './brush-highlight';\nimport { BrushActive } from './brush-active';\nimport { BrushFilter } from './brush-filter';\nimport { DrillDown } from './drill-down';\nimport { RollUp } from './roll-up';\nimport { Tooltip } from './tooltip';\nimport { DimensionTooltip } from './dimension-tooltip';\nimport { Crosshair } from './crosshair';\nimport { FilterMixin } from './filter';\nimport { ViewZoom } from './view-zoom';\nimport { ViewScroll } from './view-scroll';\nimport { ViewDrag } from './view-drag';\nimport { mixin } from '@visactor/vutils';\nimport { ViewZoomMixin } from './view-zoom-mixin';\nimport { ViewScrollMixin } from './view-scroll-mixin';\nimport { ViewDragMixin } from './view-drag-mixin';\nimport { ViewRoam } from './view-roam';\nimport { FishEye } from './fish-eye';\nimport { ToggleStateMixin } from './toggle-state-mixin';\n\nexport { BaseTooltip } from './base-tooltip';\nexport { BaseInteraction } from './base';\nexport { BrushBase } from './brush-base';\nexport { ViewNavigationBase } from './view-navigation-base';\nexport {\n ElementActive,\n ElementSelect,\n ElementHighlight,\n ElementHighlightByKey,\n ElementHighlightByGroup,\n ElementActiveByLegend,\n ElementHighlightByLegend,\n ElementHighlightByName,\n BrushHighlight,\n BrushActive,\n DrillDown,\n RollUp,\n Tooltip,\n DimensionTooltip,\n Crosshair,\n FilterMixin,\n ViewZoom,\n ViewScroll,\n ViewDrag,\n ViewRoam,\n ViewScrollMixin,\n ViewZoomMixin,\n ViewDragMixin,\n FishEye\n};\n\nexport const registerElementActive = () => {\n Factory.registerInteraction(ElementActive.type, ElementActive);\n};\n\nexport const registerElementSelect = () => {\n mixin(ElementSelect, ToggleStateMixin);\n Factory.registerInteraction(ElementSelect.type, ElementSelect);\n};\n\nexport const registerElementHighlight = () => {\n mixin(ElementHighlight, ToggleStateMixin);\n Factory.registerInteraction(ElementHighlight.type, ElementHighlight);\n};\n\nexport const registerElementHighlightByKey = () => {\n Factory.registerInteraction(ElementHighlightByKey.type, ElementHighlightByKey);\n};\n\nexport const registerElementHighlightByGroup = () => {\n Factory.registerInteraction(ElementHighlightByGroup.type, ElementHighlightByGroup);\n};\n\nexport const registerElementActiveByLegend = () => {\n Factory.registerInteraction(ElementActiveByLegend.type, ElementActiveByLegend);\n};\n\nexport const registerElementHighlightByLegend = () => {\n Factory.registerInteraction(ElementHighlightByLegend.type, ElementHighlightByLegend);\n};\n\nexport const registerElementHighlightByName = () => {\n Factory.registerInteraction(ElementHighlightByName.type, ElementHighlightByName);\n};\n\nexport const registerElementHighlightByGraphicName = () => {\n Factory.registerInteraction(ElementHighlightByGraphicName.type, ElementHighlightByGraphicName);\n};\n\nexport const registerElementSelectByGraphicName = () => {\n Factory.registerInteraction(ElementSelectByGraphicName.type, ElementSelectByGraphicName);\n};\n\nexport const registerBrushHighlight = () => {\n Factory.registerInteraction(BrushHighlight.type, BrushHighlight);\n};\n\nexport const registerBrushActive = () => {\n Factory.registerInteraction(BrushActive.type, BrushActive);\n};\n\nexport const registerBrushFilter = () => {\n mixin(BrushFilter, FilterMixin);\n Factory.registerInteraction(BrushFilter.type, BrushFilter);\n};\n\nexport const registerDrillDown = () => {\n mixin(DrillDown, FilterMixin);\n Factory.registerInteraction(DrillDown.type, DrillDown);\n};\n\nexport const registerRollUp = () => {\n Factory.registerInteraction(RollUp.type, RollUp);\n};\n\nexport const registerTooltip = () => {\n Factory.registerInteraction(Tooltip.type, Tooltip);\n};\n\nexport const registerDimensionTooltip = () => {\n Factory.registerInteraction(DimensionTooltip.type, DimensionTooltip);\n};\n\nexport const registerCrosshair = () => {\n Factory.registerInteraction(Crosshair.type, Crosshair);\n};\nexport const registerViewZoom = () => {\n mixin(ViewZoom, ViewZoomMixin);\n Factory.registerInteraction(ViewZoom.type, ViewZoom);\n};\n\nexport const registerViewScroll = () => {\n mixin(ViewScroll, ViewScrollMixin);\n Factory.registerInteraction(ViewScroll.type, ViewScroll);\n};\n\nexport const registerViewDrag = () => {\n mixin(ViewDrag, ViewDragMixin);\n Factory.registerInteraction(ViewDrag.type, ViewDrag);\n};\n\nexport const registerViewRoam = () => {\n mixin(ViewRoam, ViewZoomMixin);\n mixin(ViewRoam, ViewDragMixin);\n mixin(ViewRoam, ViewScrollMixin);\n Factory.registerInteraction(ViewRoam.type, ViewRoam);\n};\n\nexport const registerFishEye = () => {\n Factory.registerInteraction(FishEye.type, FishEye);\n};\n","import type { IMatrix } from '@visactor/vutils';\nimport { Matrix, isString, isValid, isValidNumber, merge, toCamelCase } from '@visactor/vutils';\nimport type { DataView } from '../data-view';\nimport type { Parser } from './index';\n\nexport interface ISVGSourceOption {\n type?: 'svg';\n customDOMParser?: (svg: string) => Document;\n}\n\nexport interface SVGParserResult {\n root: SVGParsedElement;\n width: number;\n height: number;\n elements: SVGParsedElement[];\n viewBoxRect?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport interface SVGParsedElement {\n id: string;\n tagName: string;\n graphicType: string;\n attributes: Record;\n name?: string;\n transform?: IMatrix;\n parent?: SVGParsedElement;\n value?: string;\n _inheritStyle?: Record;\n _textGroupStyle?: Record;\n _nameFromParent?: string;\n [key: string]: any;\n}\nconst tagNameToType = {\n svg: 'group',\n rect: 'rect',\n line: 'rule',\n polygon: 'polygon',\n path: 'path',\n polyline: 'line',\n g: 'group',\n circle: 'arc',\n ellipse: 'arc'\n};\nconst validTagName = Object.keys(tagNameToType);\nconst validGroupNode = ['g', 'svg', 'text', 'tspan', 'switch'];\nconst validTextAttributes = ['font-size', 'font-family', 'font-weight', 'font-style', 'text-align', 'text-anchor'];\nconst validCircleAttributes = ['cx', 'cy', 'r'];\nconst validEllipseAttributes = ['cx', 'cy', 'rx', 'ry'];\nconst validLineAttributes = ['x1', 'x2', 'y1', 'y2'];\nconst validAttributes = [\n 'visibility',\n 'x',\n 'y',\n 'width',\n 'height',\n 'd',\n 'points',\n 'stroke',\n 'stroke-width',\n 'fill',\n 'fill-opacity',\n 'stroke-opacity',\n ...validTextAttributes,\n ...validCircleAttributes,\n ...validEllipseAttributes,\n ...validLineAttributes\n];\nconst validInheritAttributes = [\n 'visible',\n 'fill',\n 'stroke',\n 'stroke-width',\n 'fill-opacity',\n 'stroke-opacity',\n ...validTextAttributes\n];\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr: string): string[] {\n return rawStr.match(numberReg) || [];\n}\n/**\n * 将 svg 字符串转换为指定的数据结构 SVGParserResult\n * @param data\n * @param options\n * @returns\n */\nexport const svgParser: Parser = (data: string, option: ISVGSourceOption = {}, dataView: DataView) => {\n let parser = option.customDOMParser;\n if (!parser) {\n if (window?.DOMParser) {\n parser = (svg: string) => new DOMParser().parseFromString(svg, 'text/xml');\n }\n }\n\n if (!parser) {\n throw new Error('No Available DOMParser!');\n }\n\n const svg = parser(data);\n\n let node = svg.nodeType === 9 ? svg.firstChild : svg;\n while (node && (node.nodeName.toLowerCase() !== 'svg' || node.nodeType !== 1)) {\n node = node.nextSibling;\n }\n if (node) {\n const result = parseSvgNode(node as SVGElement);\n return result;\n }\n return null;\n};\n\nlet idx = 0;\n\nfunction parseSvgNode(svg: SVGElement, opt: any = {}) {\n const elements: SVGParsedElement[] = [];\n\n const root: SVGParsedElement = parseNode(svg, null);\n let width = parseFloat(svg.getAttribute('width') || opt.width);\n let height = parseFloat(svg.getAttribute('height') || opt.height);\n !isValidNumber(width) && (width = null);\n !isValidNumber(height) && (height = null);\n\n const viewBox = svg.getAttribute('viewBox');\n let viewBoxRect: SVGParserResult['viewBoxRect'];\n\n if (viewBox) {\n const viewBoxArr = splitNumberSequence(viewBox);\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat((viewBoxArr[0] || 0) as string),\n y: parseFloat((viewBoxArr[1] || 0) as string),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n if (width || height) {\n const boundingRect = { x: 0, y: 0, width, height };\n const scaleX = boundingRect.width / viewBoxRect.width;\n const scaleY = boundingRect.height / viewBoxRect.height;\n const scale = Math.min(scaleX, scaleY);\n const transLateX = -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2);\n const transLateY =\n -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2);\n const viewBoxTransform = new Matrix().translate(transLateX, transLateY).scale(scale, scale);\n root.transform = viewBoxTransform;\n }\n }\n }\n\n traverse(svg as SVGElement, root, elements);\n return {\n root,\n width,\n height,\n elements,\n viewBoxRect\n };\n}\n\nfunction parseInheritAttributes(parsedElement: SVGParsedElement) {\n let inheritedAttrs;\n const { parent, attributes } = parsedElement;\n\n const parse = (parent: any) => {\n if (!parent) {\n return {};\n }\n return validInheritAttributes.reduce((acc, attrName) => {\n const camelAttrName = toCamelCase(attrName);\n if (isValid(parent[camelAttrName])) {\n acc[camelAttrName] = parent[camelAttrName];\n }\n return acc;\n }, {});\n };\n\n if (parent) {\n if (!parent._inheritStyle) {\n parent._inheritStyle = parse(parent.attributes);\n }\n inheritedAttrs = merge({}, parent._inheritStyle, parse(attributes));\n } else {\n inheritedAttrs = parse(attributes);\n }\n return inheritedAttrs;\n}\n\nfunction parseAttributes(el: Element) {\n const attrs = {} as any;\n const attributes = el.attributes ?? {};\n const style = (el as any).style ?? {};\n for (let i = 0; i < validAttributes.length; i++) {\n const attrName = validAttributes[i];\n const attrValue =\n isValid(style[attrName]) && style[attrName] !== '' ? style[attrName] : attributes[attrName]?.value;\n if (isValid(attrValue)) {\n attrs[toCamelCase(attrName)] = isNaN(+attrValue) ? attrValue : parseFloat(attrValue);\n }\n }\n\n if (style.display === 'none') {\n attrs.visible = false;\n }\n\n // 简单兼容处理 \"xxx:12px\" 类型的属性\n ['fontSize', 'strokeWidth', 'width', 'height'].forEach(attr => {\n const attrValue = attrs[attr];\n if (isString(attrs[attr])) {\n attrs[attr] = parseFloat(attrValue);\n }\n });\n\n return attrs;\n}\n\nfunction parseNode(node: SVGElement, parent: SVGParsedElement) {\n const tagName = node.tagName?.toLowerCase();\n if (node.nodeType === 3 || tagName === 'text' || tagName === 'tspan') {\n return parseText(node, parent);\n }\n\n if (!validTagName.includes(tagName)) {\n return null;\n }\n\n const parsed: SVGParsedElement = {\n tagName,\n graphicType: tagNameToType[tagName],\n attributes: parseAttributes(node),\n parent,\n name: node.getAttribute('name') ?? parent?.attributes?.name,\n id: node.getAttribute('id') ?? `${tagName}-${idx++}`,\n transform: parseTransform(node)\n };\n\n parsed._inheritStyle = parseInheritAttributes(parsed);\n\n if (parent && !isValid(parsed.name)) {\n parsed._nameFromParent = parent.name ?? parent._nameFromParent;\n }\n\n return parsed;\n}\n\nfunction parseText(node: SVGElement, parent: SVGParsedElement) {\n if (!parent) {\n return null;\n }\n\n const tagName = node.tagName?.toLowerCase();\n // 孤立 #text 节点不处理\n if (!tagName && parent.graphicType !== 'group') {\n return null;\n }\n\n // text 当作 group 处理\n // #text 都当作 text 处理\n const nodeAsGroup = tagName === 'text' || tagName === 'tspan';\n const elType = nodeAsGroup ? 'group' : 'text';\n const value = nodeAsGroup ? undefined : node.textContent?.replace(/\\n/g, ' ').replace(/\\s+/g, ' ');\n\n if (value === ' ') {\n return null;\n }\n\n let parsed: SVGParsedElement;\n\n if (nodeAsGroup) {\n parsed = {\n tagName,\n graphicType: elType,\n attributes: parseAttributes(node),\n parent,\n name: node.getAttribute('name'),\n id: node.getAttribute('id') ?? `${tagName}-${idx++}`,\n transform: parseTransform(node),\n value\n };\n } else {\n // #text or tspan\n parsed = {\n tagName,\n graphicType: 'text',\n attributes: parseAttributes(node),\n parent,\n name: parent?.name,\n id: node.getAttribute?.('id') ?? `${tagName}-${idx++}`,\n value\n };\n }\n\n parsed._inheritStyle = parseInheritAttributes(parsed);\n\n if (!isValid(parsed.name)) {\n parsed._nameFromParent = parent.name ?? parent._nameFromParent;\n }\n\n if (!nodeAsGroup) {\n parsed.attributes = parsed._inheritStyle;\n } else {\n if (parent._textGroupStyle) {\n parsed._textGroupStyle = merge({}, parent._textGroupStyle, parseAttributes(node));\n } else {\n parsed._textGroupStyle = parseAttributes(node);\n }\n }\n\n return parsed;\n}\n\nfunction parseTransform(node: SVGElement) {\n const transforms = (node as any).transform?.baseVal as SVGTransformList;\n if (!transforms) {\n return null;\n }\n const matrix = transforms.consolidate()?.matrix;\n if (!matrix) {\n return null;\n }\n const { a, b, c, d, e, f } = matrix;\n return new Matrix(a, b, c, d, e, f);\n}\n\nfunction traverse(node: SVGElement, parsedParent: SVGParsedElement, result: SVGParsedElement[] = []) {\n if (!node) {\n return;\n }\n\n let parseResult;\n if (node.nodeName !== 'svg') {\n parseResult = parseNode(node, parsedParent);\n }\n\n if (parseResult) {\n result.push(parseResult);\n }\n\n let child: SVGElement | null = validGroupNode.includes(node.tagName?.toLocaleLowerCase())\n ? (node.firstChild as SVGElement)\n : null;\n\n while (child) {\n traverse(child, parseResult ?? parsedParent, result);\n child = child.nextSibling as SVGElement;\n }\n}\n","import { DataSet, DataView, svgParser } from '@visactor/vdataset';\nimport type { ISVGSourceOption } from '@visactor/vdataset';\nimport { registerDataSetInstanceParser } from '../../data/register';\nimport { warn } from '../../util';\n\nexport const svgSourceMap = new Map();\n\nlet svgDataSet: DataSet | null;\n\nfunction initSVGDataSet() {\n if (svgDataSet) {\n return;\n }\n svgDataSet = new DataSet();\n registerDataSetInstanceParser(svgDataSet, 'svg', svgParser);\n}\n\nexport function registerSVGSource(key: string, source: ISVGSourceOption) {\n if (svgSourceMap.has(key)) {\n warn(`svg source key of '${key}' already exists, will be overwritten.`);\n }\n initSVGDataSet();\n const dataView = new DataView(svgDataSet!);\n dataView.parse(source, {\n type: 'svg'\n });\n\n svgSourceMap.set(key, dataView);\n}\n\nexport function unregisterSVGSource(key: string) {\n if (!svgSourceMap.has(key)) {\n warn(`map type of '${key}' does not exists.`);\n return;\n }\n svgSourceMap.delete(key);\n}\n\nexport function getSVGSource(type: string) {\n return svgSourceMap.get(type);\n}\n\nexport function clearSVGSource() {\n svgSourceMap.clear();\n svgDataSet = null;\n}\n","import type { ISeries } from '../series/interface/series';\nimport { arrayParser } from '../data/parser/array';\nimport type { ILayoutConstructor, LayoutCallBack } from '../layout/interface';\nimport type { IDataValues, IMarkStateSpec, IInitOption, IPerformanceHook } from '../typings/spec/common';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../typings/spec/common';\nimport type { ISeriesConstructor } from '../series/interface';\nimport {\n ChartTypeEnum,\n type DimensionIndexOption,\n type IChart,\n type IChartConstructor,\n type IChartOption,\n type IChartSpecInfo,\n type IChartSpecTransformer\n} from '../chart/interface';\nimport type { IComponentConstructor } from '../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../component/interface/type';\nimport type {\n EventCallback,\n EventParams,\n EventParamsDefinition,\n EventQuery,\n EventType,\n IEvent,\n IEventDispatcher\n} from '../event/interface';\nimport type { IParserOptions, IFields, Transform } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataSet, dataViewParser, DataView } from '@visactor/vdataset';\nimport type { IStage, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport { isString, isValid, isNil, array, specTransform, functionTransform } from '../util';\nimport { createID } from '../util/id';\nimport { convertPoint } from '../util/space';\nimport { isTrueBrowser } from '../util/env';\nimport { warn } from '../util/debug';\nimport { getThemeObject } from '../util/theme/common';\nimport { mergeSpec, mergeSpecWithFilter } from '@visactor/vutils-extension';\nimport { Factory } from './factory';\nimport { Event } from '../event/event';\nimport { EventDispatcher } from '../event/event-dispatcher';\nimport type { GeoSourceType } from '../typings/geo';\nimport type { GeoSourceOption } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport { getMapSource } from '../series/map/geo-source';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IMark, MarkConstructor } from '../mark/interface';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../data/register';\nimport { dataToDataView } from '../data/initialize';\nimport { copyDataView } from '../data/transforms/copy-data-view';\nimport type { ITooltipHandler } from '../typings/tooltip';\nimport type { Tooltip } from '../component/tooltip';\nimport type {\n Datum,\n IPoint,\n IRegionQuerier,\n IShowTooltipOption,\n ISpec,\n Maybe,\n MaybeArray,\n StringOrNumber\n} from '../typings';\nimport { AnimationStateEnum } from '../animation/interface';\nimport type { IBoundsLike, ILogger } from '@visactor/vutils';\nimport { ThemeManager } from '../theme/theme-manager';\nimport type { ITheme } from '../theme';\nimport type { IModel, IUpdateDataResult, IUpdateSpecResult } from '../model/interface';\nimport { Compiler } from '../compile/compiler';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { ILegend } from '../component/legend/interface';\nimport { getCanvasDataURL, URLToImage } from '../util/image';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport { DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH } from '../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n isArray,\n isEmpty,\n Logger,\n merge as mergeOrigin,\n isFunction,\n LoggerLevel,\n isEqual,\n get,\n cloneDeep,\n isObject,\n throttle\n} from '@visactor/vutils';\nimport type {\n DataLinkAxis,\n DataLinkSeries,\n IGlobalConfig,\n IVChart,\n IVChartRenderOption,\n VChartRenderActionSource\n} from './interface';\nimport { InstanceManager } from './instance-manager';\nimport type { IAxis } from '../component/axis';\nimport { setPoptipTheme } from '@visactor/vrender-components';\nimport { calculateChartSize, mergeUpdateResult } from '../chart/util';\nimport { Region } from '../region/region';\nimport { Layout } from '../layout/base-layout';\nimport { registerGroupMark } from '../mark/group';\nimport { View, registerGesturePlugin } from '@visactor/vgrammar-core';\nimport { VCHART_UTILS } from './util';\nimport { ExpressionFunction } from './expression-function';\nimport { registerBrowserEnv, registerNodeEnv } from '../env';\nimport { mergeTheme, preprocessTheme } from '../util/theme';\nimport { darkTheme, registerTheme } from '../theme/builtin';\nimport type { IChartPluginService } from '../plugin/chart/interface';\nimport { ChartPluginService } from '../plugin/chart/plugin-service';\nimport {\n registerElementHighlight as registerHoverInteraction,\n registerElementSelect as registerSelectInteraction\n} from '../interaction';\nimport type { IIndicator } from '../component/indicator';\nimport type { IGeoCoordinate } from '../component/geo';\nimport { getSVGSource } from '../series/pictogram/svg-source';\n\nexport class VChart implements IVChart {\n readonly id = createID();\n\n /**\n * 按需注册图表和组件\n * @param comps\n * @since 1.5.1\n */\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n if (typeof fn === 'function') {\n // 确保元素是函数类型\n fn();\n } else {\n console.error('Invalid function:', fn);\n }\n });\n }\n\n /**\n * 注册自定义图表\n * @param charts 图表类\n * @description 若用于按需加载,1.5.1版本后,请统一使用 `useRegisters` API,例如:`VChart.useRegisters([registerLineChart])`。\n */\n static useChart(charts: IChartConstructor[]) {\n charts.forEach(c => Factory.registerChart(c.type, c));\n }\n /**\n * 注册自定义系列\n * @param series 系列类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerLineSeries])`。\n */\n static useSeries(series: ISeriesConstructor[]) {\n series.forEach(s => Factory.registerSeries(s.type, s));\n }\n /**\n * 注册自定义组件\n * @param components 组件类\n * @description 若用于按需加载,1.5.1版本后,统一使用 `useRegisters` API,例如 `VChart.useRegisters([registerCartesianLinearAxis])`。\n */\n static useComponent(components: IComponentConstructor[]) {\n components.forEach(c => Factory.registerComponent(c.type, c));\n }\n /**\n * 注册自定义 Mark\n * @param marks Mark 图元类\n */\n static useMark(marks: MarkConstructor[]) {\n marks.forEach(m => Factory.registerMark(m.constructorType ?? m.type, m));\n }\n /**\n * 注册自定义布局\n * @param layouts 布局类\n */\n static useLayout(layouts: ILayoutConstructor[]) {\n layouts.forEach(l => Factory.registerLayout(l.type, l));\n }\n /**\n * 注册 DataSet 数据方法\n * @param name 数据 transform 方法名称\n * @param transform 具体的 Transform 执行方法\n */\n static registerDataSetTransform(name: string, transform: Transform) {\n Factory.registerTransform(name, transform);\n }\n\n /**\n * 注册函数(全局注册)\n * @param key 函数名称\n * @param fun 函数内容\n */\n static registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销函数(全局注销)\n * @param key 函数名称\n */\n static unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取函数(全局)\n * @param key\n * @returns\n */\n static getFunction(key: string): Function | null {\n if (!key) {\n return null;\n }\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 获取函数列表(全局获取)\n * @returns\n */\n static getFunctionList(): string[] | null {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /**\n * 注册地图数据\n * @param key 地图名称\n * @param source 地图数据\n * @param option 地图数据配置\n */\n static registerMap(key: string, source: GeoSourceType, option?: GeoSourceOption) {\n const impl = Factory.getImplementInKey('registerMap');\n impl && impl(key, source, option);\n }\n\n /**\n * 注销地图数据\n * @param key 地图名称\n */\n static unregisterMap(key: string) {\n const impl = Factory.getImplementInKey('unregisterMap');\n impl && impl(key);\n }\n\n /**\n * 根据地图名称获取地图数据\n * @param key 地图名称\n * @returns 地图数据\n */\n static getMap(key: string): GeoSourceType {\n return getMapSource(key);\n }\n\n /**\n * 注册地图数据\n * @param key 地图名称\n * @param source 地图数据\n * @param option 地图数据配置\n */\n static registerSVG(key: string, source: GeoSourceType, option?: GeoSourceOption) {\n const impl = Factory.getImplementInKey('registerSVG');\n impl && impl(key, source, option);\n }\n\n /**\n * 注销地图数据\n * @param key 地图名称\n */\n static unregisterSVG(key: string) {\n const impl = Factory.getImplementInKey('unregisterSVG');\n impl && impl(key);\n }\n\n /**\n * 根据地图名称获取地图数据\n * @param key 地图名称\n * @returns 地图数据\n */\n static getSVG(key: string): any {\n return getSVGSource(key);\n }\n\n /**\n * 全局关闭 tooltip\n * @param excludeId 可选,指定不需要关闭 tooltip 的实例 id\n */\n static hideTooltip(excludeId: MaybeArray = []): void {\n InstanceManager.forEach(instance => instance?.hideTooltip?.(), excludeId);\n }\n\n /** 获取 Logger */\n static getLogger(): ILogger {\n return Logger.getInstance();\n }\n\n /** 图表实例管理器 */\n static readonly InstanceManager = InstanceManager;\n /** 主题管理器 */\n static readonly ThemeManager = ThemeManager;\n\n /** 全局配置 */\n static globalConfig: IGlobalConfig = {\n uniqueTooltip: true\n };\n\n /** 工具方法 */\n static readonly Utils = VCHART_UTILS;\n\n static readonly vglobal = vglobal;\n\n protected _originalSpec: any;\n protected _spec: any;\n getSpec() {\n return this._spec;\n }\n\n protected _specInfo: IChartSpecInfo;\n getSpecInfo() {\n return this._specInfo;\n }\n\n private _viewBox: IBoundsLike;\n private _chart!: Maybe;\n private _chartSpecTransformer!: Maybe;\n private _compiler: Compiler;\n private _event: Maybe;\n private _userEvents: {\n eType: EventType;\n query: EventQuery | EventCallback;\n handler?: EventCallback;\n }[] = [];\n private _eventDispatcher: Maybe;\n private _dataSet!: Maybe;\n getDataSet() {\n return this._dataSet;\n }\n\n private _container?: HTMLElement;\n private _canvas?: HTMLCanvasElement | OffscreenCanvas | string;\n private _stage?: Stage;\n\n private _autoSize: boolean = true;\n private _option: IInitOption = {\n mode: RenderModeEnum['desktop-browser'],\n onError: (msg: string) => {\n throw new Error(msg);\n },\n optimize: {\n disableCheckGraphicWidthOutRange: true\n }\n };\n\n private _currentSize: { width: number; height: number };\n private _observer: ResizeObserver = null;\n\n private _currentThemeName: string;\n private _currentTheme: ITheme;\n\n private _onError?: (...args: any[]) => void;\n\n private _context: any = {}; // 存放用户在model初始化前通过实例方法传入的配置等\n private _isReleased: boolean;\n\n private _chartPlugin?: IChartPluginService;\n private _onResize?: () => void;\n\n constructor(spec: ISpec, options: IInitOption) {\n this._option = mergeOrigin(this._option, { animation: (spec as any).animation !== false }, options);\n this._onError = this._option?.onError;\n\n const { dom, renderCanvas, mode, stage, poptip, ...restOptions } = this._option;\n const isTrueBrowseEnv = isTrueBrowser(mode);\n\n // 根据 mode 配置动态加载浏览器或 node 环境代码\n if (isTrueBrowseEnv) {\n registerBrowserEnv();\n } else if (mode === 'node') {\n registerNodeEnv();\n }\n\n if (isTrueBrowseEnv && dom) {\n this._container = isString(dom) ? vglobal.getElementById(dom) : dom;\n }\n if (renderCanvas) {\n this._canvas = renderCanvas;\n }\n if (stage) {\n this._stage = stage as unknown as Stage; // FIXME: 等待 vrender 解决类型和接口不匹配的问题 @zhouxinyu\n }\n\n if (mode !== 'node' && !this._container && !this._canvas && !this._stage) {\n this._option?.onError('please specify container or renderCanvas!');\n return;\n }\n\n this._viewBox = this._option.viewBox;\n this._currentThemeName = ThemeManager.getCurrentThemeName();\n this._setNewSpec(spec);\n this._updateCurrentTheme();\n this._currentSize = this.getCurrentSize();\n const pluginList: string[] = [];\n\n if (!poptip !== false) {\n pluginList.push('poptipForText');\n }\n\n if (spec.type === ChartTypeEnum.sankey) {\n // 桑基图默认记载滚动条组件\n pluginList.push('scrollbar');\n }\n // hook增加图表实例参数\n const performanceHook = { ...(restOptions.performanceHook || {}) };\n (Object.keys(performanceHook) as (keyof IPerformanceHook)[]).forEach(hookKey => {\n // @ts-ignore\n restOptions.performanceHook[hookKey] = (...args) => {\n // @ts-ignore\n performanceHook[hookKey](...args, this as any);\n };\n });\n\n this._compiler = new Compiler(\n {\n dom: this._container ?? 'none',\n canvas: renderCanvas\n },\n {\n mode: this._option.mode,\n stage,\n pluginList,\n ...restOptions,\n background: this._getBackground(),\n onError: this._onError\n }\n );\n this._compiler.setSize(this._currentSize.width, this._currentSize.height);\n this._eventDispatcher = new EventDispatcher(this, this._compiler);\n this._event = new Event(this._eventDispatcher, mode);\n this._compiler.initView();\n // TODO: 如果通过 updateSpec 更新主题字体的验证\n // 设置全局字体\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n this._initDataSet(this._option.dataSet);\n this._autoSize = isTrueBrowseEnv ? spec.autoFit ?? this._option.autoFit ?? true : false;\n this._bindResizeEvent();\n this._bindVGrammarViewEvent();\n this._initChartPlugin();\n\n InstanceManager.registerInstance(this);\n this._option.performanceHook?.afterCreateVChart?.(this);\n }\n\n /** 设置新 spec,返回是否成功 */\n private _setNewSpec(spec: any, forceMerge?: boolean): boolean {\n if (!spec) {\n return false;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n if (forceMerge && this._originalSpec) {\n spec = mergeSpec({}, this._originalSpec, spec);\n }\n this._originalSpec = spec;\n this._spec = this._getSpecFromOriginalSpec();\n return true;\n }\n\n private _getSpecFromOriginalSpec() {\n // 转换在实例上注册的函数 + 深拷贝 spec,保证 _originalSpec 和 _spec 的不同\n const spec = specTransform(this._originalSpec) as any;\n // because of in data-init, data will be set as array;\n spec.data = spec.data ?? [];\n return spec;\n }\n\n private _initChartSpec(spec: any, actionSource: VChartRenderActionSource) {\n // 如果用户注册了函数,在配置中替换相应函数名为函数内容\n if (VChart.getFunctionList() && VChart.getFunctionList().length) {\n spec = functionTransform(spec, VChart);\n }\n this._spec = spec;\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(\n this._spec.type,\n this._getChartOption(this._spec.type)\n );\n }\n\n this._chartSpecTransformer?.transformSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterChartSpecTransform', this._spec, actionSource);\n\n this._specInfo = this._chartSpecTransformer?.transformModelSpec(this._spec);\n\n // 插件生命周期\n this._chartPluginApply('onAfterModelSpecTransform', this._spec, this._specInfo, actionSource);\n }\n\n private _updateSpecInfo() {\n if (!this._chartSpecTransformer) {\n this._chartSpecTransformer = Factory.createChartSpecTransformer(\n this._spec.type,\n this._getChartOption(this._spec.type)\n );\n }\n this._specInfo = this._chartSpecTransformer?.createSpecInfo(this._spec);\n }\n\n private _initChart(spec: any) {\n if (!this._compiler) {\n this._option?.onError('compiler is not initialized');\n return;\n }\n if (this._chart) {\n this._option?.onError('chart is already initialized');\n return;\n }\n\n // 放到这里而不是放到chart内的考虑\n // 用户spec更新,也许会有core上图表实例的内容存在\n // 如果要支持spec的类似Proxy监听,更新逻辑应当从这一层开始。如果在chart上做,就需要在再向上发送spec更新消息,不是很合理。\n // todo: 问题1 存不存在 chart 需要在这个阶段处理的特殊字段?目前没有,但是理论上可以有?\n const chart = Factory.createChart(spec.type, spec, this._getChartOption(spec.type));\n if (!chart) {\n this._option?.onError('init chart fail');\n return;\n }\n this._chart = chart;\n this._chart.setCanvasRect(this._currentSize.width, this._currentSize.height);\n this._chart.created(this._chartSpecTransformer);\n this._chart.init();\n this._event.emit(ChartEvent.initialized, {\n chart,\n vchart: this\n });\n }\n\n private _releaseData() {\n if (this._dataSet) {\n // Object.values(this._dataSet.dataViewMap).forEach(d => {\n // d.target.removeAllListeners();\n // d.destroy();\n // });\n this._dataSet.dataViewMap = {};\n this._dataSet = null;\n }\n }\n\n private _bindVGrammarViewEvent() {\n if (!this._compiler) {\n return;\n }\n const view = this._compiler.getVGrammarView();\n\n view.addEventListener(VGRAMMAR_HOOK_EVENT.ALL_ANIMATION_END, () => {\n this._event.emit(ChartEvent.animationFinished, {\n chart: this._chart,\n vchart: this\n });\n });\n view.addEventListener(VGRAMMAR_HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER, () => {\n this._event.emit(ChartEvent.renderFinished, {\n chart: this._chart,\n vchart: this\n });\n });\n }\n\n private _bindResizeEvent() {\n if (this._autoSize) {\n this._onResize = throttle(this._doResize, this._option.resizeDelay ?? 100);\n\n if (this._container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n\n if (ResizeObserverWindow) {\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(this._container);\n }\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this._autoSize) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n getCurrentSize() {\n return calculateChartSize(\n this._spec,\n {\n container: this._container,\n canvas: this._canvas,\n mode: this._getMode(),\n modeParams: this._option.modeParams\n },\n {\n width: this._currentSize?.width ?? DEFAULT_CHART_WIDTH,\n height: this._currentSize?.height ?? DEFAULT_CHART_HEIGHT\n }\n );\n }\n\n private _doResize = () => {\n const { width, height } = this.getCurrentSize();\n if (this._currentSize.width !== width || this._currentSize.height !== height) {\n this._currentSize = { width, height };\n this.resizeSync(width, height);\n }\n };\n\n private _initDataSet(dataSet?: DataSet) {\n if (dataSet instanceof DataSet) {\n this._dataSet = dataSet;\n } else {\n this._dataSet = new DataSet();\n }\n registerDataSetInstanceParser(this._dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceParser(this._dataSet, 'array', arrayParser);\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n // 注册 dataset transform\n for (const key in Factory.transforms) {\n registerDataSetInstanceTransform(this._dataSet, key, Factory.transforms[key]);\n }\n // 注册 dataview parser\n for (const key in Factory.dataParser) {\n registerDataSetInstanceParser(this._dataSet, key, Factory.dataParser[key]);\n }\n }\n\n /** 在修改图表配置后重新渲染 */\n updateCustomConfigAndRerender(\n updateSpecResult: IUpdateSpecResult | (() => IUpdateSpecResult),\n sync?: boolean,\n option: IVChartRenderOption = {}\n ) {\n if (this._isReleased || !updateSpecResult) {\n return undefined;\n }\n if (isFunction(updateSpecResult)) {\n updateSpecResult = updateSpecResult();\n }\n\n if (updateSpecResult.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n\n this._reCompile(updateSpecResult);\n if (sync) {\n return this._renderSync(option);\n }\n return this._renderAsync(option);\n }\n\n /** 执行自定义的回调修改图表配置,并重新编译(不渲染) */\n protected _updateCustomConfigAndRecompile(updateSpecResult: IUpdateSpecResult, option: IVChartRenderOption = {}) {\n if (!updateSpecResult) {\n return false;\n }\n this._reCompile(updateSpecResult);\n return this._beforeRender(option);\n }\n\n protected _reCompile(updateResult: IUpdateSpecResult, morphConfig?: IMorphConfig) {\n if (updateResult.reMake) {\n this._releaseData();\n this._initDataSet();\n this._chart?.release();\n this._chart = null as unknown as IChart;\n }\n\n if (updateResult.reTransformSpec) {\n // 释放图表等等\n this._chartSpecTransformer = null;\n }\n\n // 卸载了chart之后再设置主题 避免多余的reInit\n if (updateResult.changeTheme) {\n this._setCurrentTheme();\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n } else if (updateResult.changeBackground) {\n this._compiler?.setBackground(this._getBackground());\n }\n\n if (updateResult.reMake) {\n // 如果不需要动画,那么释放item,避免元素残留\n this._compiler?.releaseGrammar(this._option?.animation === false || this._spec?.animation === false);\n // chart 内部事件 模块自己必须删除\n // 内部模块删除事件时,调用了event Dispatcher.release() 导致用户事件被一起删除\n // 外部事件现在需要重新添加\n this._userEvents.forEach(e => this._event?.on(e.eType as any, e.query as any, e.handler as any));\n\n if (updateResult.reSize) {\n this._doResize();\n }\n } else {\n if (updateResult.reCompile) {\n // recompile\n // 清除之前的所有 compile 内容\n this._compiler?.clear(\n { chart: this._chart, vChart: this },\n this._option?.animation === false || this._spec?.animation === false\n );\n // TODO: 释放事件? vgrammar 的 view 应该不需要释放,响应的stage也没有释放,所以事件可以不绑定\n // 重新绑定事件\n // TODO: 释放XX?\n // 重新compile\n this._compiler?.compile({ chart: this._chart, vChart: this }, {});\n }\n if (updateResult.reSize) {\n const { width, height } = this.getCurrentSize();\n this._chart.onResize(width, height, false);\n this._compiler.resize(width, height, false);\n }\n }\n }\n\n /** 渲染之前的步骤,返回是否成功 */\n protected _beforeRender(option: IVChartRenderOption = {}): boolean {\n // 如果 vchart 实例已经卸载,终止渲染\n if (this._isReleased) {\n return false;\n }\n // 如果图表已经实例化,跳过该步骤\n if (this._chart) {\n return true;\n }\n\n const { transformSpec, actionSource } = option;\n\n if (transformSpec) {\n // 初始化图表 spec\n this._initChartSpec(this._spec, 'render');\n // 插件生命周期\n }\n this._chartPluginApply('onBeforeInitChart', this._spec, actionSource);\n\n // 实例化图表\n this._option.performanceHook?.beforeInitializeChart?.(this);\n this._initChart(this._spec);\n this._option.performanceHook?.afterInitializeChart?.(this);\n // 如果实例化失败,终止渲染\n if (!this._chart || !this._compiler) {\n return false;\n }\n\n // compile\n this._option.performanceHook?.beforeCompileToVGrammar?.();\n this._compiler.compile({ chart: this._chart, vChart: this }, { performanceHook: this._option.performanceHook });\n this._option.performanceHook?.afterCompileToVGrammar?.();\n return true;\n }\n\n /** 渲染之后的步骤 */\n protected _afterRender(): boolean {\n if (this._isReleased) {\n return false;\n }\n this._updateAnimateState();\n this._event.emit(ChartEvent.rendered, {\n chart: this._chart,\n vchart: this\n });\n return true;\n }\n\n /**\n * **同步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderSync(morphConfig?: IMorphConfig) {\n return this._renderSync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n /**\n * **异步方法** 渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n async renderAsync(morphConfig?: IMorphConfig) {\n return this._renderAsync({\n morphConfig,\n transformSpec: true,\n actionSource: 'render'\n });\n }\n\n protected _renderSync = (option: IVChartRenderOption = {}) => {\n const self = this as unknown as IVChart;\n if (!this._beforeRender(option)) {\n return self;\n }\n // 填充数据绘图\n this._compiler?.render(option.morphConfig);\n this._afterRender();\n return self;\n };\n\n protected async _renderAsync(option: IVChartRenderOption = {}) {\n return this._renderSync(option);\n }\n\n private _updateAnimateState(initial?: boolean) {\n if (this._option.animation) {\n const animationState = initial ? AnimationStateEnum.appear : AnimationStateEnum.update;\n this._chart?.getAllRegions().forEach(region => {\n region.animate?.updateAnimateState(animationState, true);\n });\n this._chart?.getAllComponents().forEach(component => {\n component.animate?.updateAnimateState(animationState, true);\n });\n }\n }\n\n /**\n * 销毁图表\n */\n release() {\n if ((this._onResize as any)?.cancel) {\n (this._onResize as any).cancel();\n }\n this._chartPluginApply('releaseAll');\n this._chartPlugin = null;\n this._chartSpecTransformer = null;\n this._chart?.release();\n // eventDispatcher 的release 依赖 compiler\n this._eventDispatcher?.release();\n this._compiler?.release();\n this._unBindResizeEvent();\n // resetID(); // 为什么要重置ID呢?\n\n this._releaseData();\n\n this._onError = null;\n this._onResize = null;\n this._container = null;\n this._currentTheme = null;\n this._option = null;\n this._chart = null;\n this._compiler = null;\n this._spec = null;\n this._specInfo = null;\n this._originalSpec = null;\n // this._option = null;\n this._userEvents = null;\n this._event = null;\n this._eventDispatcher = null;\n this._isReleased = true;\n\n InstanceManager.unregisterInstance(this);\n }\n\n /**\n * **异步方法** 更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param parserOptions 数据参数\n * @returns VChart 实例\n */\n async updateData(\n id: StringOrNumber,\n data: DataView | Datum[] | string,\n parserOptions?: IParserOptions,\n userUpdateOptions?: IUpdateDataResult\n ): Promise {\n return this.updateDataSync(id, data, parserOptions, userUpdateOptions);\n }\n\n private _updateDataById(id: StringOrNumber, data: DataView | Datum[] | string, parserOptions?: IParserOptions) {\n const preDV = this._spec.data.find((dv: any) => dv.name === id || dv.id === id);\n if (preDV) {\n if (preDV.id === id) {\n preDV.values = data;\n } else if (preDV.name === id) {\n preDV.parse(data, parserOptions);\n }\n } else {\n if (isArray(data)) {\n this._spec.data.push({\n id,\n values: data\n });\n } else {\n this._spec.data.push(data);\n }\n }\n }\n\n /**\n * **异步方法** 批量更新数据。\n * @param list 待更新的数据列表\n * @returns VChart 实例\n */\n async updateDataInBatches(list: { id: string; data: Datum[]; options?: IParserOptions }[]): Promise {\n if (this._chart) {\n this._chart.updateFullData(\n list.map(({ id, data, options }) => {\n return { id, values: data, parser: options };\n })\n );\n this._chart.updateGlobalScaleDomain();\n this._compiler.render();\n return this as unknown as IVChart;\n }\n\n this._spec.data = array(this._spec.data);\n list.forEach(({ id, data, options }) => {\n this._updateDataById(id, data, options);\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param id 数据 id\n * @param data 数据值\n * @param parserOptions 数据参数\n * @returns VChart 实例\n */\n updateDataSync(\n id: StringOrNumber,\n data: DataView | Datum[] | string,\n parserOptions?: IParserOptions,\n userUpdateOptions?: IUpdateDataResult\n ) {\n if (isNil(this._dataSet)) {\n return this as unknown as IVChart;\n }\n if (this._chart) {\n if (userUpdateOptions?.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n\n this._chart.updateData(id, data, true, parserOptions);\n\n // after layout\n this._compiler.render();\n return this as unknown as IVChart;\n }\n this._spec.data = array(this._spec.data);\n\n this._updateDataById(id, data, parserOptions);\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n updateFullDataSync(\n data: IDataValues | IDataValues[],\n reRender: boolean = true,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n if (this._chart) {\n if (userUpdateOptions?.reAnimate) {\n this.stopAnimation();\n this._updateAnimateState(true);\n }\n this._chart.updateFullData(data);\n if (reRender) {\n this._compiler.render();\n }\n return this as unknown as IVChart;\n }\n\n const prevData = array(this._spec.data) as DataView[];\n const list: IDataValues[] = array(data);\n list.forEach(d => {\n // only support update this attrs\n const { id, values, parser, fields } = d;\n const preDV = prevData.find(dv => dv.name === id);\n if (preDV) {\n if (preDV instanceof DataView) {\n preDV.setFields(cloneDeep(fields) as IFields);\n preDV.parse(values, cloneDeep(parser) as IParserOptions);\n } else {\n (preDV as IDataValues).values = values;\n isValid(parser) && ((preDV as IDataValues).parser = parser);\n isValid(fields) && ((preDV as IDataValues).fields = fields);\n }\n } else {\n // new data\n const dataView = dataToDataView(d, this._dataSet, prevData);\n\n if (isArray(this._spec.data)) {\n this._spec.data.push(dataView);\n }\n }\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **异步方法** 更新数据\n * @param data 图表配置结构中的数据对象\n * @returns VChart 实例\n * @since 1.3.0\n */\n async updateFullData(data: IDataValues | IDataValues[], reRender: boolean = true) {\n return this.updateFullDataSync(data, reRender);\n }\n\n /**\n * **异步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n async updateSpec(\n spec: ISpec,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n const result = this._updateSpec(spec, forceMerge, userUpdateOptions);\n\n if (!result) {\n return this as unknown as IVChart;\n }\n\n await this.updateCustomConfigAndRerender(result, false, {\n morphConfig,\n transformSpec: result.reTransformSpec,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** spec 更新\n * @param spec\n * @param forceMerge\n * @returns\n */\n updateSpecSync(\n spec: ISpec,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig,\n userUpdateOptions?: IUpdateSpecResult\n ) {\n const result = this._updateSpec(spec, forceMerge, userUpdateOptions);\n\n if (!result) {\n return this as unknown as IVChart;\n }\n\n this.updateCustomConfigAndRerender(result, true, {\n morphConfig,\n transformSpec: result.reTransformSpec,\n actionSource: 'updateSpec'\n });\n return this as unknown as IVChart;\n }\n\n /** 更新 spec 并重新编译(不渲染),返回是否成功 */\n updateSpecAndRecompile(spec: ISpec, forceMerge: boolean = false, option: IVChartRenderOption = {}) {\n const result = this._updateSpec(spec, forceMerge);\n return this._updateCustomConfigAndRecompile(result, {\n actionSource: 'updateSpecAndRecompile',\n ...option\n });\n }\n\n private _updateSpec = (\n spec: ISpec,\n forceMerge: boolean = false,\n userUpdateOptions?: IUpdateSpecResult\n ): IUpdateSpecResult | undefined => {\n const lastSpec = this._spec;\n\n const result: IUpdateSpecResult = {\n changeBackground: false,\n reTransformSpec: false,\n change: false,\n reMake: false,\n reCompile: false,\n reSize: false,\n changeTheme: false\n };\n\n // 这里已经将 this._spec 设置为新spec\n if (!this._setNewSpec(spec, forceMerge)) {\n return undefined;\n }\n\n // 这时图表内对象是旧的,对应上一份 spec\n if (!isEqual(lastSpec.theme, this._spec.theme)) {\n result.changeTheme = true;\n // setCurrentTheme 会导致 chart 实例的 reInit。\n // 只要模块从 vchart 实例获取与 spec 相关的信息,都会出现错误,它们已经不匹配了\n // this._setCurrentTheme();\n } else if (!isEqual(this._spec.background, lastSpec.background)) {\n result.reMake = true;\n result.changeBackground = true;\n }\n\n const reSize = this._shouldChartResize(lastSpec);\n result.reSize = reSize;\n\n if (this._spec.type !== lastSpec.type) {\n this._compiler?.getVGrammarView()?.updateLayoutTag();\n result.reMake = true;\n result.reTransformSpec = true;\n result.change = true;\n result.changeTheme = true; // 支持了根据图表类型 merge 当前主题。当 type 变了后,需要更新主题\n return result;\n }\n // 再次处理 spec 并得到 specInfo\n this._initChartSpec(this._spec, 'updateSpec');\n\n const res = mergeUpdateResult(this._chart.updateSpec(this._spec), result);\n\n return userUpdateOptions\n ? {\n ...res,\n ...userUpdateOptions\n }\n : res;\n };\n\n /**\n * **异步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n async updateModelSpec(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n return this.updateModelSpecSync(filter, spec, forceMerge, morphConfig);\n }\n\n /**\n * **同步方法** spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpecSync(\n filter: string | { type: string; index: number } | ((model: IModel) => boolean),\n spec: unknown,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (!spec || !this._spec) {\n return this as unknown as IVChart;\n }\n if (isString(spec)) {\n spec = JSON.parse(spec);\n }\n\n if (!isFunction(filter)) {\n // find spec and update\n mergeSpecWithFilter(this._spec, filter, spec, forceMerge);\n }\n\n if (this._chart) {\n const model = this._chart.getModelInFilter(filter);\n if (model) {\n return this._updateModelSpec(model, spec, true, forceMerge, morphConfig) as IVChart;\n }\n }\n return this as unknown as IVChart;\n }\n\n /**\n * **同步方法** 模块 spec 更新\n * @param model\n * @param spec\n * @param forceMerge\n * @returns\n */\n protected _updateModelSpec(\n model: IModel,\n spec: unknown,\n sync: boolean = false,\n forceMerge: boolean = false,\n morphConfig?: IMorphConfig\n ) {\n if (forceMerge) {\n spec = mergeSpec({}, model.getSpec(), spec);\n }\n\n const result = model.updateSpec(spec);\n model.reInit(spec);\n if (result.change || result.reCompile || result.reMake || result.reSize || result.reRender) {\n this._chart.reDataFlow();\n }\n\n return this.updateCustomConfigAndRerender(result, sync, {\n morphConfig,\n transformSpec: false,\n actionSource: 'updateModelSpec'\n });\n }\n\n /**\n * **异步方法**,图表尺寸更新方法\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n async resize(width: number, height: number) {\n return this.resizeSync(width, height);\n }\n\n /**\n * **同步方法**,图表尺寸更新方法\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n resizeSync(width: number, height: number) {\n if (!this._beforeResize(width, height)) {\n return this as unknown as IVChart;\n }\n this._compiler.resize?.(width, height);\n return this._afterResize();\n }\n\n protected _beforeResize(width: number, height: number): boolean {\n if (!this._chart || !this._compiler) {\n return false;\n }\n // 如果宽高未变化,不需要重新执行 resize,防止当图表初始化时会执行一次多余的 resize\n const chartCanvasRect = this._chart.getCanvasRect();\n if (chartCanvasRect && chartCanvasRect.width === width && chartCanvasRect.height === height) {\n return false;\n }\n\n // 插件生命周期\n this._chartPluginApply('onBeforeResize', width, height);\n\n this._option.performanceHook?.beforeResizeWithUpdate?.();\n this._chart.onResize(width, height, false);\n this._option.performanceHook?.afterResizeWithUpdate?.();\n\n return true;\n }\n\n protected _afterResize() {\n if (!this._isReleased) {\n // emit resize event\n this._event.emit(ChartEvent.afterResize, { chart: this._chart });\n }\n return this as unknown as IVChart;\n }\n\n /**\n * 更新绘制区域\n * @param viewBox 绘制区域\n * @param reRender 是否重新渲染,默认为 true\n * @param reLayout 是否重新布局,默认为 true\n * @returns\n */\n updateViewBox(viewBox: IBoundsLike, reRender: boolean = true, reLayout: boolean = true) {\n if (!this._chart || !this._compiler) {\n return this as unknown as IVChart;\n }\n this._viewBox = viewBox;\n // 更新 layout 参数\n this._chart.updateViewBox(viewBox, reLayout);\n if (reLayout) {\n // 重新布局\n this._compiler.render();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this._chart.onEvaluateEnd();\n }\n // 获取 compiler\n this._compiler.updateViewBox(viewBox, reRender);\n return this as unknown as IVChart;\n }\n\n // 事件相关方法\n on(eType: EventType, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery, handler: EventCallback): void;\n on(eType: EventType, query: EventQuery | EventCallback, handler?: EventCallback): void {\n if (!this._userEvents) {\n // userEvents正常情况下有默认值,如果!userEvents,说明此时chart被release了,就可以终止流程\n return;\n }\n this._userEvents.push({\n eType,\n query: typeof query === 'function' ? null : query,\n handler: typeof query === 'function' ? query : handler\n });\n this._event?.on(eType as any, query as any, handler as any);\n }\n off(eType: EventType, handler?: EventCallback): void {\n if (!this._userEvents || this._userEvents.length === 0) {\n return;\n }\n if (handler) {\n const index = this._userEvents.findIndex(e => e.eType === eType && e.handler === handler);\n if (index >= 0) {\n this._userEvents.splice(index, 1);\n this._event?.off(eType, handler);\n }\n } else {\n this._userEvents.forEach(e => {\n if (e.eType === eType) {\n this._event?.off(eType, e.handler);\n }\n });\n this._userEvents = this._userEvents.filter(e => e.eType !== eType);\n }\n }\n\n // 状态相关方法\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.updateState(state, filter);\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setSelected(datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n if (!this._chart) {\n return;\n }\n this._chart.setHovered(datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n if (!this._chart) {\n return;\n }\n this._chart.clearState(state);\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n if (!this._chart) {\n return;\n }\n this._chart.clearAllStates();\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n if (!this._chart) {\n return;\n }\n this._chart.clearSelected();\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n if (!this._chart) {\n return;\n }\n this._chart.clearHovered();\n }\n\n // 主题相关方法\n /**\n * 当 spec 或者 currentThemeName 有变化时需要调用此方法对 currentTheme 进行更新\n * @param nextThemeName 通过 setCurrentTheme 方法新设的主题\n */\n private _updateCurrentTheme(nextThemeName?: string) {\n const optionTheme: Maybe = this._option.theme;\n const specTheme: Maybe = this._spec?.theme;\n const chartType: string = this._spec?.type;\n if (nextThemeName) {\n this._currentThemeName = nextThemeName;\n }\n\n const processThemeByChartType = (type: string, theme: ITheme) => {\n if (theme.chart?.[type]) {\n theme = mergeTheme({}, theme, theme.chart[type]);\n }\n return theme;\n };\n\n let currentTheme;\n // 处理 specTheme 和 optionTheme, merge -> transform\n // 优先级 currentTheme < optionTheme < specTheme\n if (!isEmpty(optionTheme) || !isEmpty(specTheme)) {\n if (\n (isString(optionTheme) && (!specTheme || isString(specTheme))) ||\n (isString(specTheme) && (!optionTheme || isString(optionTheme)))\n ) {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName, true),\n getThemeObject(optionTheme, true),\n getThemeObject(specTheme, true)\n );\n\n this._currentTheme = processThemeByChartType(chartType, finalTheme);\n } else {\n const finalTheme = mergeTheme(\n {},\n getThemeObject(this._currentThemeName),\n getThemeObject(optionTheme),\n getThemeObject(specTheme)\n );\n this._currentTheme = preprocessTheme(processThemeByChartType(chartType, finalTheme));\n }\n } else {\n currentTheme = getThemeObject(this._currentThemeName, true);\n this._currentTheme = processThemeByChartType(chartType, currentTheme);\n }\n\n // 设置 poptip 的主题\n setPoptipTheme(get(this._currentTheme, 'component.poptip'));\n // 设置背景色\n this._compiler?.setBackground(this._getBackground());\n }\n\n private _shouldChartResize(oldSpec: ISpec): boolean {\n let resize = false;\n\n if (isNil(this._spec.width)) {\n !isNil(oldSpec.width) && (this._spec.width = oldSpec.width);\n } else if (this._spec.width !== oldSpec.width) {\n resize = true;\n }\n\n if (isNil(this._spec.height)) {\n !isNil(oldSpec.height) && (this._spec.height = oldSpec.height);\n } else if (this._spec.height !== oldSpec.height) {\n resize = true;\n }\n\n const lasAutoSize = this._autoSize;\n this._autoSize = isTrueBrowser(this._option.mode) ? this._spec.autoFit ?? this._option.autoFit ?? true : false;\n if (this._autoSize !== lasAutoSize) {\n resize = true;\n }\n return resize;\n }\n\n private _getBackground() {\n const specBackground =\n typeof this._spec.background === 'string' || (isObject(this._spec.background) && this._spec.background.gradient)\n ? this._spec.background\n : null;\n // spec > spec.theme > initOptions.theme\n return specBackground || (this._currentTheme.background as string) || this._option.background;\n }\n\n /**\n * 获取当前主题,会返回完整的主题配置(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n * */\n getCurrentTheme() {\n return getThemeObject(this._currentThemeName);\n }\n\n /**\n * 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n */\n getCurrentThemeName() {\n return this._currentThemeName;\n }\n\n /**\n * **异步方法**, 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n async setCurrentTheme(name: string) {\n return this.setCurrentThemeSync(name);\n }\n\n /**\n * **同步方法** 设置当前主题。\n * **注意,如果在 spec 上配置了 theme,则 spec 上的 theme 优先级更高。**\n * @param name 主题名称\n * @returns\n */\n setCurrentThemeSync(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return this as unknown as IVChart;\n }\n const result = this._setCurrentTheme(name);\n this._setFontFamilyTheme(this._currentTheme?.fontFamily as string);\n this.updateCustomConfigAndRerender(result, true, {\n transformSpec: false,\n actionSource: 'setCurrentTheme'\n });\n return this as unknown as IVChart;\n }\n\n protected _setCurrentTheme(name?: string): IUpdateSpecResult {\n this._updateCurrentTheme(name);\n this._initChartSpec(this._getSpecFromOriginalSpec(), 'setCurrentTheme');\n this._chart?.setCurrentTheme();\n return { change: true, reMake: false };\n }\n\n private _setFontFamilyTheme(fontFamily: string) {\n if (!fontFamily) {\n return;\n }\n // 全局字体的特殊设置逻辑\n // 设置全局字体\n (this.getStage() as any)?.setTheme({ text: { fontFamily } });\n }\n\n // Tooltip 相关方法\n private _getTooltipComponent(): Tooltip | undefined {\n const tooltip = this._chart?.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as Tooltip;\n return tooltip;\n }\n\n /**\n * 自定义 TooltipHandler\n * @param tooltipHandler\n */\n setTooltipHandler(tooltipHandler: ITooltipHandler) {\n this._context.tooltipHandler = tooltipHandler;\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n tooltip.tooltipHandler?.release?.();\n tooltip.tooltipHandler = tooltipHandler;\n }\n }\n\n /**\n * 获取用户定义的 TooltipHandler\n * @returns ITooltipHandler\n */\n getTooltipHandlerByUser(): ITooltipHandler | undefined {\n return this._context?.tooltipHandler;\n }\n\n /**\n * 获取 TooltipHandler\n * @returns\n */\n getTooltipHandler(): ITooltipHandler | undefined {\n const tooltip = this._getTooltipComponent();\n if (tooltip) {\n return tooltip.tooltipHandler;\n }\n return this._context.tooltipHandler;\n }\n\n /**\n * 手动调用展示 tooltip\n * @param datum 原始数据\n * @param options\n * @returns\n */\n showTooltip(datum: Datum, options: IShowTooltipOption): boolean {\n const tooltip = this._getTooltipComponent();\n return (isValid(datum) && tooltip?.showTooltip(datum, options) !== 'none') ?? false;\n }\n\n /**\n * 手动调用,关闭 tooltip\n * @returns\n */\n hideTooltip(): boolean {\n const tooltip = this._getTooltipComponent();\n return tooltip?.hideTooltip() ?? false;\n }\n\n // 图例相关 api\n /**\n * 根据图例组件 id 获取图例数据\n * @param id 组件 id\n * @returns\n */\n getLegendDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getLegendData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取图例数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendDataByIndex(index: number = 0) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n return legends[index].getLegendData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 获取当前图例的选中项\n * @param id 组件 id\n * @returns\n */\n getLegendSelectedDataById(id: string) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n return legendComponent.getSelectedData();\n }\n return [];\n }\n\n /**\n * 根据图例组件索引获取当前图例的选中项\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendSelectedDataByIndex(index: number = 0) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n return legends[index].getSelectedData();\n }\n\n return [];\n }\n\n /**\n * 根据图例组件 id 更新图例选中数据\n * @param id\n * @returns\n */\n setLegendSelectedDataById(id: string, selectedData: StringOrNumber[]) {\n const legendComponent = this._chart?.getComponentByUserId(id) as ILegend;\n if (legendComponent) {\n legendComponent.setSelectedData(selectedData);\n }\n }\n\n /**\n * 根据图例组件索引更新图例选中数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n setLegendSelectedDataByIndex(index: number = 0, selectedData: StringOrNumber[]) {\n const legends = this._chart?.getComponentsByType(ComponentTypeEnum.discreteLegend) as unknown as ILegend[];\n\n if (legends && legends[index]) {\n legends[index].setSelectedData(selectedData);\n }\n }\n\n // 保存图片相关的方法\n /**\n * **异步方法**返回一个包含图片展示的 data URI。\n * @returns data URI\n */\n async getDataURL() {\n const stage = this.getStage();\n if (this._chart && stage) {\n // 因为 vrender 是 autoRender 的,它不能确认第几帧才是完整的图表,所以这里调用一次 render 以保证获取到的是完整的画布\n stage.render();\n const canvas = this._chart.getCanvas();\n const url = await getCanvasDataURL(canvas, {\n onError: this._onError\n });\n return url;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n /**\n * **异步方法** 导出图表图片,只支持浏览器端。\n * @param name 保存的图片名称\n * @returns\n */\n async exportImg(name?: string) {\n if (!isTrueBrowser(this._option.mode)) {\n this._option?.onError(new TypeError(`non-browser environment can not export img`));\n return;\n }\n\n const dataURL = await this.getDataURL();\n if (dataURL) {\n URLToImage(name, dataURL);\n } else {\n this._option?.onError(new ReferenceError(`render is not defined`));\n }\n }\n /**\n * 导出绘制了图表内容的 canvas\n * @returns HTMLCanvasElement\n */\n exportCanvas(): HTMLCanvasElement | undefined {\n const stage = this.getStage();\n if (this._chart && stage) {\n return stage.toCanvas();\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n return undefined;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._option.mode !== 'node') {\n this._option?.onError(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.getStage();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this._option?.onError(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // 布局相关的方法\n /**\n * 设置自定义布局\n */\n setLayout(layout: LayoutCallBack) {\n this._option.layout = layout;\n this._chart?.setLayout(layout);\n }\n /**\n * 强制重新布局\n */\n reLayout() {\n this._chart?.setLayoutTag(true);\n }\n\n /**\n * 获取编译器实例\n * @returns\n */\n getCompiler() {\n return this._compiler;\n }\n\n /**\n * Get the chart instance\n * 获取 Chart 图表实例。\n * @returns Chart 实例\n */\n getChart() {\n return this._chart;\n }\n\n /**\n * Get the renderer instance.\n * 获取渲染引擎实例。\n * @returns the instance of VRender Stage\n */\n getStage(): IStage {\n return this._compiler.getStage();\n }\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas(): HTMLCanvasElement | undefined {\n return this._compiler?.getCanvas();\n }\n\n /**\n * 获取图表的 dom 容器\n * @returns\n */\n getContainer(): Maybe {\n // 用户传入 dom container\n if (isValid(this._container)) {\n return this._container;\n }\n\n // 用户传入 canvas\n let canvasNode: Maybe;\n if (isString(this._canvas)) {\n canvasNode = vglobal.getElementById(this._canvas) as HTMLCanvasElement;\n } else {\n canvasNode = this._canvas as HTMLCanvasElement;\n }\n if (isValid(canvasNode)) {\n return canvasNode.parentElement;\n }\n\n // 用户传入 stage\n return this.getCanvas()?.parentElement;\n }\n\n /**\n * 获取图表所有的组件实例\n * @returns 组件实例\n */\n getComponents() {\n return this._chart.getAllComponents();\n }\n\n /**\n * 获取全局scale\n * @param scaleName 指定scale的id\n * @returns scale实例\n */\n getScale(scaleId: string) {\n const globalScale = this._chart?.getGlobalScale();\n\n return globalScale?.getScale(scaleId);\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption = {}) {\n return this._chart?.setDimensionIndex(value, opt);\n }\n\n /** 停止正在进行的所有动画 */\n stopAnimation() {\n this._compiler?.getVGrammarView()?.animate?.stop();\n }\n\n /** 暂停正在进行的所有动画 */\n pauseAnimation() {\n this._compiler?.getVGrammarView()?.animate?.pause();\n }\n\n /** 恢复暂停时正在进行的所有动画 */\n resumeAnimation() {\n this._compiler?.getVGrammarView()?.animate?.resume();\n }\n\n // TODO: 后续需要考虑滚动场景\n /**\n * Convert the data corresponding to the graph into coordinates\n * 将图形对应的数据转换为坐标,该数据需要从传入图表的数据集中获取,如果数据不存在数据集中,可以使用 `convertValueToPosition` 方法\n * @param datum 要转化的数据 the datum(from data source)to convert\n * @param dataLinkInfo 数据的绑定信息,the data link info, could be seriesId or seriesIndex, default is { seriesIndex: 0 }\n * @param isRelativeToCanvas 是否相对画布坐标 Whether relative to canvas coordinates\n * @param checkInViewData 是否检查数据对应的图元是否在视图中,如果不在视图中,返回 null\n * @returns\n */\n convertDatumToPosition(\n datum: Datum,\n dataLinkInfo: DataLinkSeries = {},\n isRelativeToCanvas: boolean = false,\n checkInViewData?: boolean\n ): IPoint | null {\n if (!this._chart) {\n return null;\n }\n if (isEmpty(datum)) {\n return null;\n }\n const { seriesId, seriesIndex = 0 } = dataLinkInfo;\n\n let series: ISeries;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (series) {\n const keys = Object.keys(datum);\n const handledDatum = series\n .getViewData()\n // eslint-disable-next-line eqeqeq\n .latestData.find((viewDatum: Datum) => keys.every(k => viewDatum[k] == datum[k]));\n const seriesLayoutStartPoint = series.getRegion().getLayoutStartPoint();\n let point: IPoint;\n if (handledDatum) {\n point = series.dataToPosition(handledDatum, checkInViewData);\n } else {\n point = series.dataToPosition(datum, checkInViewData);\n }\n if (!point) {\n return null;\n }\n return convertPoint(point, seriesLayoutStartPoint, isRelativeToCanvas);\n }\n\n return null;\n }\n\n // TODO: 1. 后续需要考虑滚动场景 2. 极坐标场景支持\n convertValueToPosition(\n value: StringOrNumber,\n dataLinkInfo: DataLinkAxis,\n isRelativeToCanvas?: boolean\n ): number | null;\n convertValueToPosition(\n value: [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkSeries,\n isRelativeToCanvas?: boolean\n ): IPoint | null;\n convertValueToPosition(\n value: StringOrNumber | [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkAxis | DataLinkSeries,\n isRelativeToCanvas: boolean = false\n ): number | IPoint | null {\n if (!this._chart || isNil(value) || isEmpty(dataLinkInfo)) {\n return null;\n }\n\n if (!isArray(value)) {\n // 如果单个值,则默认使用 axis 绑定信息\n const { axisId, axisIndex } = dataLinkInfo as DataLinkAxis;\n let axis;\n if (isValid(axisId)) {\n axis = this._chart.getComponentsByKey('axes').find(s => s.userId === axisId);\n } else if (isValid(axisIndex)) {\n axis = this._chart.getComponentsByKey('axes')?.[axisIndex];\n }\n if (!axis) {\n warn('Please check whether the `axisId` or `axisIndex` is set!');\n return null;\n }\n\n const pointValue = (axis as IAxis)?.valueToPosition(value);\n if (isRelativeToCanvas) {\n const axisLayoutStartPoint = axis.getLayoutStartPoint();\n const axisOrient = (axis as IAxis).getOrient();\n return (\n pointValue +\n (axisOrient === 'bottom' || axisOrient === 'top' ? axisLayoutStartPoint.x : axisLayoutStartPoint.y)\n );\n }\n\n return pointValue;\n }\n const { seriesId, seriesIndex } = dataLinkInfo as DataLinkSeries;\n let series;\n if (isValid(seriesId)) {\n series = this._chart.getSeriesInUserId(seriesId);\n } else if (isValid(seriesIndex)) {\n series = this._chart.getSeriesInIndex([seriesIndex])?.[0];\n }\n\n if (!series) {\n warn('Please check whether the `seriesId` or `seriesIndex` is set!');\n return null;\n }\n\n return convertPoint(\n (series as ISeries).valueToPosition(value[0], value[1]),\n series.getRegion().getLayoutStartPoint(),\n isRelativeToCanvas\n );\n }\n\n /**\n * 获取实例函数\n * @param key 函数名称\n * @returns\n */\n getFunction(key: string): Function | null {\n return ExpressionFunction.instance().getFunction(key);\n }\n\n /**\n * 注册实例函数(对内包装一层,区分名字,避免重名问题)\n * @param key 函数名称\n * @param fun 函数内容\n * @returns\n */\n registerFunction(key: string, fun: Function) {\n if (!key || !fun) {\n return;\n }\n ExpressionFunction.instance().registerFunction(key, fun);\n }\n\n /**\n * 注销实例函数\n * @param key 函数名称\n */\n unregisterFunction(key: string) {\n if (!key) {\n return;\n }\n ExpressionFunction.instance().unregisterFunction(key);\n }\n\n /**\n * 获取实例函数列表\n * @returns\n */\n getFunctionList() {\n return ExpressionFunction.instance().getFunctionNameList();\n }\n\n /** 设置运行时 spec */\n setRuntimeSpec(spec: any) {\n this._spec = spec;\n this._updateSpecInfo();\n }\n\n /**\n * 根据 indicator 组件 id 更新 indicator 数据\n * @since 1.11.7\n */\n updateIndicatorDataById(id: string, datum?: Datum) {\n const indicator = this._chart?.getComponentByUserId(id) as unknown as IIndicator;\n if (indicator) {\n indicator.updateDatum(datum);\n }\n }\n\n /**\n * 根据 indicator 组件索引更新 indicator 数据\n * @since 1.11.7\n */\n updateIndicatorDataByIndex(index: number = 0, datum?: Datum) {\n const indicators = this._chart?.getComponentsByType(ComponentTypeEnum.indicator) as unknown as IIndicator[];\n if (indicators && indicators[index]) {\n indicators[index].updateDatum(datum);\n }\n }\n\n /**\n * 地图缩放 API\n * @param [regionIndex=0] 根据索引顺序指定某个 region 区域的地图坐标系进行缩放\n * @param zoom 缩放比例\n * @param center 缩放中心\n * @since 1.11.10\n */\n geoZoomByIndex(regionIndex: number = 0, zoom: number, center?: { x: number; y: number }) {\n this._geoZoomByQuery({ regionIndex }, zoom, center);\n }\n\n /**\n * 地图缩放 API\n * @param [regionId=0] 根据 region id 指定某个 region 区域的地图坐标系进行缩放\n * @param zoom 缩放比例\n * @param center 缩放中心\n * @since 1.11.10\n */\n geoZoomById(regionId: string | number, zoom: number, center?: { x: number; y: number }) {\n this._geoZoomByQuery({ regionId }, zoom, center);\n }\n\n _geoZoomByQuery(query: MaybeArray, zoom: number, center?: { x: number; y: number }) {\n const region = this._chart?.getRegionsInQuerier(query)[0];\n const geoCoordinates = this._chart?.getComponentsByType(\n ComponentTypeEnum.geoCoordinate\n ) as unknown as IGeoCoordinate[];\n const coord = geoCoordinates?.find(coord => coord.getRegions()?.includes(region));\n if (coord) {\n coord.dispatchZoom(zoom, center);\n }\n }\n\n private _initChartPlugin() {\n const pluginList = Factory.getChartPlugins();\n if (pluginList.length > 0) {\n this._chartPlugin = new ChartPluginService(this);\n this._chartPlugin.load(pluginList.map(p => new p()));\n // 插件生命周期\n this._chartPluginApply('onInit', this._spec);\n }\n }\n\n private _chartPluginApply(funcName: keyof IChartPluginService, ...args: any[]) {\n if (!this._chartPlugin || !this._chartPlugin[funcName]) {\n return;\n }\n (this._chartPlugin[funcName] as (...args: any[]) => any).apply(this._chartPlugin, args);\n }\n\n protected _getMode() {\n return this._option.mode || RenderModeEnum['desktop-browser'];\n }\n\n protected _getChartOption(type: string): IChartOption {\n return {\n type,\n globalInstance: this,\n eventDispatcher: this._eventDispatcher!,\n dataSet: this._dataSet!,\n container: this._container,\n canvas: this._canvas,\n map: new Map(),\n mode: this._getMode(),\n modeParams: this._option.modeParams,\n getCompiler: () => this._compiler,\n performanceHook: this._option.performanceHook,\n viewBox: this._viewBox,\n animation: this._option.animation,\n getTheme: () => this._currentTheme ?? {},\n getSpecInfo: () => this._specInfo ?? {},\n\n layout: this._option.layout,\n onError: this._onError,\n disableTriggerEvent: this._option.disableTriggerEvent === true\n };\n }\n}\n\nexport const registerVChartCore = () => {\n // install region module\n Factory.registerRegion('region', Region);\n // install layout module\n Factory.registerLayout('base', Layout);\n // install essential marks\n registerGroupMark();\n // install essential vgrammar transform\n View.useRegisters([registerGesturePlugin]);\n // install default interaction\n registerHoverInteraction();\n registerSelectInteraction();\n // install default theme\n registerTheme(darkTheme.name, darkTheme);\n // set default logger level to Level.error\n Logger.getInstance(LoggerLevel.Error);\n};\n\nregisterVChartCore();\n","import { PREFIX } from './base';\n\nexport const DEFAULT_MEASURE_CANVAS_ID = `${PREFIX}_MEASURE_CANVAS_ID`;\n\nexport const DEFAULT_DATA_INDEX = `${PREFIX}_DEFAULT_DATA_INDEX`;\n\nexport const DEFAULT_DATA_KEY = `${PREFIX}_DEFAULT_DATA_KEY`;\n\nexport const DEFAULT_DATA_SERIES_FIELD = `${PREFIX}_DEFAULT_DATA_SERIES_FIELD`;\n\nexport const DEFAULT_SERIES_STYLE_NAME = `${PREFIX}_DEFAULT_SERIES_STYLE_NAME`;\n\nexport const STACK_FIELD_KEY = `${PREFIX}_STACK_KEY`;\nexport const STACK_FIELD_START = `${PREFIX}_STACK_START`;\nexport const STACK_FIELD_END = `${PREFIX}_STACK_END`;\nexport const STACK_FIELD_START_PERCENT = `${PREFIX}_STACK_START_PERCENT`;\nexport const STACK_FIELD_END_PERCENT = `${PREFIX}_STACK_END_PERCENT`;\nexport const STACK_FIELD_START_OffsetSilhouette = `${PREFIX}_STACK_START_OffsetSilhouette`;\nexport const STACK_FIELD_END_OffsetSilhouette = `${PREFIX}_STACK_END_OffsetSilhouette`;\nexport const STACK_FIELD_TOTAL = `${PREFIX}_STACK_TOTAL`;\nexport const STACK_FIELD_TOTAL_PERCENT = `${PREFIX}_STACK_TOTAL_PERCENT`;\nexport const STACK_FIELD_TOTAL_TOP = `${PREFIX}_STACK_TOTAL_TOP`;\nexport const STACK_FIELD_TOTAL_BOTTOM = `${PREFIX}_STACK_TOTAL_BOTTOM`;\n\nexport const MOSAIC_VALUE_START_PERCENT = `${PREFIX}_MOSAIC_VALUE_START_PERCENT`;\nexport const MOSAIC_VALUE_END_PERCENT = `${PREFIX}_MOSAIC_VALUE_END_PERCENT`;\nexport const MOSAIC_CAT_START_PERCENT = `${PREFIX}_MOSAIC_CAT_START_PERCENT`;\nexport const MOSAIC_CAT_END_PERCENT = `${PREFIX}_MOSAIC_CAT_END_PERCENT`;\n\nexport const SEGMENT_FIELD_START = `${PREFIX}_SEGMENT_START`;\nexport const SEGMENT_FIELD_END = `${PREFIX}_SEGMENT_END`;\n","export type AddVChartPropertyContext = {\n keyMap: Map;\n needDefaultSeriesField: boolean;\n defaultSeriesField?: string;\n getKey?: (d: any, i: number, context: AddVChartPropertyContext) => string;\n categoryField?: string;\n};\nexport interface IAddVChartPropertyOpt {\n beforeCall: () => AddVChartPropertyContext;\n call: (d: any, i: number, context: AddVChartPropertyContext) => void;\n}\n\nexport const addVChartProperty = (data: Array, op: IAddVChartPropertyOpt) => {\n const context = op.beforeCall();\n data && data.forEach((d, i) => op.call(d, i, context));\n\n if (context.keyMap) {\n context.keyMap.clear();\n context.keyMap = null;\n }\n\n return data;\n};\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-time-format\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-time-format/blob/d6feb945baa4b7a45898a9ca926ebca044e20657/src/locale.js\n * License: https://github.com/d3/d3-time-format/blob/main/LICENSE\n * @license\n */\n\ninterface dateInfo {\n y?: number;\n m?: number;\n d?: number;\n w?: number;\n p?: number;\n H?: number;\n M?: number;\n S?: number;\n L?: number;\n}\n\nexport class TimeUtil {\n private locale_shortWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n private locale_periods = ['AM', 'PM'];\n private locale_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n private locale_shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n private numberRe = /^\\s*\\d+/; // note: ignores next directive\n private pads = { '-': '', _: ' ', '0': '0' };\n\n // const percentRe = /^%/;\n private requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n private periodRe: RegExp;\n private periodLookup: Map;\n private weekdayRe: RegExp;\n private weekdayLookup: Map;\n private shortWeekdayRe: RegExp;\n private shortWeekdayLookup: Map;\n private monthRe: RegExp;\n private monthLookup: Map;\n private shortMonthRe: RegExp;\n private shortMonthLookup: Map;\n\n private static instance: TimeUtil;\n static getInstance(): TimeUtil {\n if (!TimeUtil.instance) {\n TimeUtil.instance = new TimeUtil();\n }\n\n return TimeUtil.instance;\n }\n\n private requoteF;\n private constructor() {\n this.requoteF = this.requote.bind(this);\n this.periodRe = this.formatRe(this.locale_periods);\n this.periodLookup = this.formatLookup(this.locale_periods);\n this.weekdayRe = this.formatRe(this.locale_weekdays);\n this.weekdayLookup = this.formatLookup(this.locale_weekdays);\n this.shortWeekdayRe = this.formatRe(this.locale_shortWeekdays);\n this.shortWeekdayLookup = this.formatLookup(this.locale_shortWeekdays);\n this.monthRe = this.formatRe(this.locale_months);\n this.monthLookup = this.formatLookup(this.locale_months);\n this.shortMonthRe = this.formatRe(this.locale_shortMonths);\n this.shortMonthLookup = this.formatLookup(this.locale_shortMonths);\n }\n\n private requote(s: string) {\n return s.replace(this.requoteRe, '\\\\$&');\n }\n\n private localDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n private utcDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n private newDate(y: number, m: number, d: number) {\n return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };\n }\n private formatRe(names: string[]) {\n return new RegExp('^(?:' + names.map(this.requoteF).join('|') + ')', 'i');\n }\n private formatLookup(names: string[]) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n }\n\n private locale_months = [\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 ];\n\n private formatShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getDay()];\n };\n\n private formatWeekday = (d: Date) => {\n return this.locale_weekdays[d.getDay()];\n };\n\n private formatShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getMonth()];\n };\n\n private formatMonth = (d: Date) => {\n return this.locale_months[d.getMonth()];\n };\n\n private pad(value: number, fill: string, width: number) {\n const sign = value < 0 ? '-' : '';\n const string = (sign ? -value : value) + '';\n const length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n private formatDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getDate(), p, 2);\n };\n\n private formatHour24 = (d: Date, p: string) => {\n return this.pad(d.getHours(), p, 2);\n };\n\n private formatHour12 = (d: Date, p: string) => {\n return this.pad(d.getHours() % 12 || 12, p, 2);\n };\n\n private formatMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getMilliseconds(), p, 3);\n };\n\n private formatMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getMonth() + 1, p, 2);\n };\n\n private formatMinutes = (d: Date, p: string) => {\n return this.pad(d.getMinutes(), p, 2);\n };\n\n private formatPeriod = (d: Date) => {\n return this.locale_periods[+(d.getHours() >= 12)];\n };\n\n private formatSeconds = (d: Date, p: string) => {\n return this.pad(d.getSeconds(), p, 2);\n };\n\n private formatFullYear = (d: Date, p: string) => {\n return this.pad(d.getFullYear() % 10000, p, 4);\n };\n\n private formatUTCShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getUTCDay()];\n };\n\n private formatUTCWeekday = (d: Date) => {\n return this.locale_weekdays[d.getUTCDay()];\n };\n\n private formatUTCShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getUTCMonth()];\n };\n\n private formatUTCMonth = (d: Date) => {\n return this.locale_months[d.getUTCMonth()];\n };\n\n private formatUTCDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getUTCDate(), p, 2);\n };\n\n private formatUTCHour24 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours(), p, 2);\n };\n\n private formatUTCHour12 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours() % 12 || 12, p, 2);\n };\n\n private formatUTCMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getUTCMilliseconds(), p, 3);\n };\n\n private formatUTCMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getUTCMonth() + 1, p, 2);\n };\n\n private formatUTCMinutes = (d: Date, p: string) => {\n return this.pad(d.getUTCMinutes(), p, 2);\n };\n\n private formatUTCPeriod = (d: Date) => {\n return this.locale_periods[+(d.getUTCHours() >= 12)];\n };\n\n private formatUTCSeconds = (d: Date, p: string) => {\n return this.pad(d.getUTCSeconds(), p, 2);\n };\n\n private formatUTCFullYear = (d: Date, p: string) => {\n return this.pad(d.getUTCFullYear() % 10000, p, 4);\n };\n\n private formats = {\n a: this.formatShortWeekday,\n A: this.formatWeekday,\n b: this.formatShortMonth,\n B: this.formatMonth,\n d: this.formatDayOfMonth,\n e: this.formatDayOfMonth,\n H: this.formatHour24,\n I: this.formatHour12,\n L: this.formatMilliseconds,\n m: this.formatMonthNumber,\n M: this.formatMinutes,\n p: this.formatPeriod,\n S: this.formatSeconds,\n Y: this.formatFullYear\n };\n\n private utcFormats = {\n a: this.formatUTCShortWeekday,\n A: this.formatUTCWeekday,\n b: this.formatUTCShortMonth,\n B: this.formatUTCMonth,\n d: this.formatUTCDayOfMonth,\n e: this.formatUTCDayOfMonth,\n H: this.formatUTCHour24,\n I: this.formatUTCHour12,\n L: this.formatUTCMilliseconds,\n m: this.formatUTCMonthNumber,\n M: this.formatUTCMinutes,\n p: this.formatUTCPeriod,\n S: this.formatUTCSeconds,\n Y: this.formatUTCFullYear\n };\n\n private parseShortWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.shortWeekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.shortWeekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.weekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.weekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseShortMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.shortMonthRe.exec(string.slice(i));\n return n ? ((d.m = this.shortMonthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.monthRe.exec(string.slice(i));\n return n ? ((d.m = this.monthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseDayOfMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.d = +n[0]), i + n[0].length) : -1;\n };\n\n private parseHour24 = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.H = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMilliseconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 3));\n return n ? ((d.L = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMonthNumber = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.m = (n as any[0]) - 1), i + n[0].length) : -1;\n };\n\n private parseMinutes = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.M = +n[0]), i + n[0].length) : -1;\n };\n\n private parsePeriod = (d: dateInfo, string: string, i: number) => {\n const n = this.periodRe.exec(string.slice(i));\n return n ? ((d.p = this.periodLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseSeconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.S = +n[0]), i + n[0].length) : -1;\n };\n\n private parseFullYear = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 4));\n return n ? ((d.y = +n[0]), i + n[0].length) : -1;\n };\n\n private parses = {\n a: this.parseShortWeekday,\n A: this.parseWeekday,\n b: this.parseShortMonth,\n B: this.parseMonth,\n d: this.parseDayOfMonth,\n e: this.parseDayOfMonth,\n H: this.parseHour24,\n I: this.parseHour24,\n L: this.parseMilliseconds,\n m: this.parseMonthNumber,\n M: this.parseMinutes,\n p: this.parsePeriod,\n S: this.parseSeconds,\n Y: this.parseFullYear\n };\n\n private parseSpecifier(d: dateInfo, specifier: string, string: string, j: number) {\n let i = 0;\n const n = specifier.length;\n const m = string.length;\n let c;\n let parse;\n\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = this.parses[c in this.pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) {\n return -1;\n }\n } else if (c !== string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n private newParse(specifier: string, Z: boolean) {\n const that = this;\n return function (string: string) {\n const d = that.newDate(1900, undefined, 1) as any;\n const i = that.parseSpecifier(d, specifier, (string += ''), 0);\n if (i !== string.length) {\n return null;\n }\n\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n if ('s' in d) {\n return new Date(d.s * 1000 + ('L' in d ? d.L : 0));\n }\n\n // If this is utcParse, never use the local timezone.\n if (Z && !('Z' in d)) {\n d.Z = 0;\n }\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = (d.H % 12) + d.p * 12;\n }\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) {\n d.m = 'q' in d ? d.q : 0;\n }\n if ('Z' in d) {\n d.H += (d.Z / 100) | 0;\n d.M += d.Z % 100;\n return that.utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return that.localDate(d);\n };\n }\n private newFormat(specifier: string, formats: any) {\n const that = this;\n return function (date: Date) {\n const string = [];\n let i = -1;\n let j = 0;\n const n = specifier.length;\n let c;\n let pad;\n let format;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = that.pads[(c = specifier.charAt(++i))])) {\n c = specifier.charAt(++i);\n } else {\n pad = c === 'e' ? ' ' : '0';\n }\n format = formats[c];\n c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n\n private getFullTimeStamp(timeText: string | number) {\n const timeOriStamp = parseInt(timeText + '', 10);\n return String(timeOriStamp).length === 10 ? timeOriStamp * 1000 : timeOriStamp;\n }\n\n timeFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.formats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeUTCFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.utcFormats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeParse = (specifier: string, timeText: string | number) => {\n return this.newParse(specifier, false)(timeText + '');\n };\n}\n","import type { Maybe } from '@visactor/vutils';\nimport { get, isArray, isNil } from '@visactor/vutils';\nimport type { ITheme } from '../theme';\nimport type { Datum } from '../typings';\nimport { Factory } from '../core/factory';\nimport type { IModelSpecInfo } from '../model/interface';\n\nexport function getComponentThemeFromOption(type: string, chartTheme: ITheme) {\n return get(chartTheme, `component.${type}`);\n}\n\nexport function getFormatFunction(\n formatMethod?: any,\n formatter?: string | string[],\n text?: string | number,\n datum?: Datum\n) {\n if (formatMethod) {\n return { formatFunc: formatMethod, args: [text, datum] };\n }\n const formatterImpl = Factory.getFormatter();\n if (formatter && formatterImpl) {\n return { formatFunc: formatterImpl, args: [text, datum, formatter] };\n }\n return {};\n}\n\nexport const getSpecInfo = >(\n chartSpec: any,\n specKey: string,\n compType: string,\n filter?: (spec: T) => boolean\n): Maybe[]> => {\n if (isNil(chartSpec[specKey])) {\n return undefined;\n }\n const isArraySpec = isArray(chartSpec[specKey]);\n const spec = isArraySpec ? chartSpec[specKey] : [chartSpec[specKey]];\n\n const specInfos: IModelSpecInfo[] = [];\n (spec as T[]).forEach((s, i: number) => {\n if (s && (!filter || filter(s))) {\n specInfos.push({\n spec: s,\n specPath: isArraySpec ? [specKey, i] : [specKey],\n specInfoPath: ['component', specKey, i],\n type: compType\n });\n }\n });\n return specInfos;\n};\n","import { get, isFunction, isNil, isPlainObject, isValid } from '@visactor/vutils';\nimport type {\n Datum,\n TooltipContentCallback,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternProperty\n} from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport { getFormatFunction } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../../event';\n\nexport const getTooltipContentValue = (\n field?: TooltipContentProperty,\n datum?: any,\n params?: TooltipHandlerParams,\n formatter?: string\n): T | undefined => {\n let value: T;\n if (isFunction(field)) {\n value = (field as TooltipContentCallback)(datum, params);\n } else if (isPlainObject(field) && isValid(field.field)) {\n value = get(datum, field.field) as T;\n } else {\n value = field as T;\n }\n\n if (formatter) {\n const { formatFunc, args } = getFormatFunction(undefined, formatter, field as string, datum);\n if (formatFunc && args) {\n value = formatFunc(...args);\n }\n }\n\n return value;\n};\n\nexport const getTooltipPatternValue = (\n field?: TooltipPatternProperty,\n data?: TooltipData,\n params?: TooltipHandlerParams\n): T | undefined => {\n if (isNil(field)) {\n return field as undefined;\n }\n if (isFunction(field)) {\n return (field as TooltipContentCallback)(data, params);\n }\n return field as T;\n};\n\nexport function getFirstDatumFromTooltipData(data: TooltipData): Datum {\n // 找到第一个可用的datum\n const dimInfoList: IDimensionInfo[] = (data as IDimensionData[])[0]?.series\n ? [{ data: data as IDimensionData[], value: '' }]\n : (data as IDimensionInfo[]);\n for (const { data: dataList } of dimInfoList) {\n for (const { datum: datumList } of dataList) {\n for (const datumItem of datumList ?? []) {\n if (datumItem) {\n return datumItem;\n }\n }\n }\n }\n return undefined;\n}\n","import { isArray, isFunction, isNil, isValid, TimeUtil, isEmpty } from '@visactor/vutils';\nimport type {\n Datum,\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n MaybeArray,\n TooltipActiveType,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternCallback,\n TooltipPatternProperty\n} from '../../../typings';\nimport type { ISeriesTooltipSpec, ITooltipActiveTypeAsKeys, ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { BaseEventParams } from '../../../event/interface';\nimport { getTooltipContentValue } from './get-value';\n\nexport const getTooltipActualActiveType = (spec?: ITooltipSpec): TooltipActiveType[] => {\n if (spec?.visible === false) {\n return [];\n }\n\n const activeTypeMap: ITooltipActiveTypeAsKeys = {\n mark: spec?.mark?.visible !== false,\n dimension: spec?.dimension?.visible !== false,\n group: spec?.group?.visible !== false\n };\n\n if (isValid(spec?.activeType)) {\n Object.keys(activeTypeMap).forEach(t => {\n activeTypeMap[t as TooltipActiveType] = spec?.activeType?.includes(t as TooltipActiveType);\n });\n }\n\n return Object.keys(activeTypeMap).filter(t => activeTypeMap[t as TooltipActiveType]) as TooltipActiveType[];\n};\n\nexport const isActiveTypeVisible = (type: TooltipActiveType, spec?: ISeriesTooltipSpec) => {\n if (!spec) {\n return true;\n }\n\n if (spec.visible === false) {\n return false;\n }\n\n if (spec[type] && spec[type].visible === false) {\n return false;\n }\n\n if (spec.activeType && (isArray(spec.activeType) ? !spec.activeType.includes(type) : spec.activeType !== type)) {\n return false;\n }\n\n return true;\n};\n\nexport function isEmptyPos(params: BaseEventParams): boolean {\n return isNil(params.mark) && isNil(params.model) && isNil(params.datum);\n}\n\nfunction addContentLine(\n result: ITooltipLineActual[],\n contentSpec: MaybeArray,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n datum: Datum,\n params?: TooltipHandlerParams\n) {\n const addByDatum = (spec: ITooltipLinePattern) => {\n if (spec) {\n const res: ITooltipLineActual = { datum };\n const finalSpec: ITooltipLinePattern =\n isNil(spec.key) && isNil(spec.value) && !isEmpty(spec)\n ? {\n ...shapeAttrs,\n ...defaultContent,\n ...spec\n }\n : { ...shapeAttrs, ...spec };\n const {\n key,\n keyFormatter,\n keyTimeFormat,\n keyTimeFormatMode,\n value,\n valueFormatter,\n valueTimeFormat,\n valueTimeFormatMode,\n ...others\n } = finalSpec;\n\n res.key = getTimeString(\n getTooltipContentValue(key, datum, params, keyFormatter),\n keyTimeFormat,\n keyTimeFormatMode\n );\n res.value = getTimeString(\n getTooltipContentValue(value, datum, params, valueFormatter),\n valueTimeFormat,\n valueTimeFormatMode\n );\n Object.keys(others).forEach(k => {\n (res as any)[k] = getTooltipContentValue((finalSpec as any)[k], datum, params);\n });\n if (res.visible !== false && (isValid(res.key) || isValid(res.value))) {\n result.push(res);\n }\n }\n };\n\n if (isArray(contentSpec)) {\n (contentSpec as ITooltipLinePattern[]).forEach(spec => {\n addByDatum(spec);\n });\n } else {\n addByDatum(contentSpec as ITooltipLinePattern);\n }\n}\n\nfunction parseContentFunction(\n result: ITooltipLineActual[],\n contentSpec: TooltipPatternProperty>,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum,\n params?: TooltipHandlerParams\n) {\n if (isFunction(contentSpec)) {\n const specs = (contentSpec as TooltipPatternCallback>)(data, params);\n\n addContentLine(result, specs, defaultContent, shapeAttrs, datum, params);\n } else if (contentSpec) {\n addContentLine(result, contentSpec as MaybeArray, defaultContent, shapeAttrs, datum, params);\n }\n}\n\nexport function parseContent(\n contentSpec: MaybeArray>>,\n defaultContent: ITooltipLinePattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n): ITooltipLineActual[] {\n if (datum && datum.length) {\n const contents: ITooltipLineActual[] = [];\n\n datum.forEach(d => {\n if (isArray(contentSpec)) {\n (contentSpec as TooltipPatternProperty>[]).forEach(spec => {\n parseContentFunction(contents, spec, defaultContent, shapeAttrs, data, d, params);\n });\n } else if (isFunction(contentSpec)) {\n parseContentFunction(\n contents,\n contentSpec as TooltipPatternCallback>,\n defaultContent,\n shapeAttrs,\n data,\n d,\n params\n );\n } else if (contentSpec) {\n addContentLine(contents, contentSpec as MaybeArray, defaultContent, shapeAttrs, d, params);\n }\n });\n\n return contents;\n }\n\n return null;\n}\n\nexport function combineContents(patternList: ITooltipActual[]) {\n if (!patternList || !patternList.length) {\n return null;\n }\n\n // 拼接默认 tooltip content\n const defaultPatternContent: ITooltipLineActual[] = [];\n patternList.forEach(({ content }) => {\n if (content) {\n (content as ITooltipLineActual[]).forEach(c => {\n defaultPatternContent.push(c);\n });\n }\n });\n\n if (defaultPatternContent.length) {\n return {\n ...patternList[0],\n content: defaultPatternContent\n };\n }\n\n return patternList[0];\n}\n\nexport const getTimeString = (value: any, timeFormat?: string, timeFormatMode?: 'local' | 'utc') => {\n if (!timeFormat && !timeFormatMode) {\n if (typeof value !== 'object') {\n return value?.toString();\n }\n return value;\n }\n\n const timeUtil = TimeUtil.getInstance();\n timeFormat = timeFormat || '%Y%m%d';\n timeFormatMode = timeFormatMode || 'local';\n const timeFormatter = timeFormatMode === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n return timeFormatter(timeFormat, value);\n};\n","import type { ISeriesTooltipSpec, ITooltipSpec, TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type {\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n ITooltipPattern,\n MaybeArray,\n ShapeType,\n TooltipActiveType,\n TooltipContentProperty,\n TooltipData,\n TooltipPatternCallback,\n TooltipPatternProperty\n} from '../../typings';\nimport { array, isFunction, isValid } from '@visactor/vutils';\nimport type { ISeries, ISeriesTooltipHelper } from '../interface';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { IMark } from '../../mark/interface/common';\nimport { getTimeString, isActiveTypeVisible, parseContent } from '../../component/tooltip/utils/common';\nimport { getFirstDatumFromTooltipData, getTooltipContentValue } from '../../component/tooltip/utils/get-value';\nimport { isNil } from '../../util';\n\ninterface ISeriesCacheInfo {\n seriesFields: string[];\n dimensionFields: string[];\n measureFields: string[];\n type: string;\n}\n\nexport class BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n series: ISeries;\n\n spec: ISeriesTooltipSpec | undefined;\n activeType: TooltipActiveType[];\n\n activeTriggerSet = {\n mark: new Set(),\n group: new Set()\n };\n ignoreTriggerSet = {\n mark: new Set()\n };\n protected _seriesCacheInfo: ISeriesCacheInfo;\n\n constructor(series: ISeries) {\n this.series = series;\n this.updateTooltipSpec();\n }\n\n updateTooltipSpec() {\n const seriesTooltipSpec = this.series.getSpec()?.tooltip;\n\n this.spec = seriesTooltipSpec;\n this._seriesCacheInfo = this._getSeriesCacheInfo();\n }\n\n protected _getSeriesCacheInfo = (): ISeriesCacheInfo => {\n const { series } = this;\n const _seriesField = series.getSeriesField();\n const seriesFields = isValid(_seriesField) ? array(_seriesField) : series.getSeriesKeys() ?? [];\n return {\n seriesFields,\n dimensionFields: series.getDimensionField() ?? [],\n measureFields: series.getMeasureField() ?? [],\n type: series.type\n };\n };\n\n protected _getDimensionData = (datum: any) => {\n const { dimensionFields } = this._seriesCacheInfo;\n return dimensionFields[0] && datum?.[dimensionFields[0]];\n };\n\n protected _getMeasureData = (datum: any) => {\n const { measureFields } = this._seriesCacheInfo;\n return measureFields[0] && datum?.[measureFields[0]];\n };\n\n protected _getSeriesFieldData = (datum: any) => {\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n\n if (isValid(seriesFields[0]) && datum?.[seriesFields[0]]) {\n return datum?.[seriesFields[0]];\n }\n\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n if (dimensionFields.length > 1 && (seriesFields.length === 0 || this.series.getSeriesKeys().length <= 1)) {\n return datum?.[subDimensionField];\n }\n\n return datum?.[subDimensionField];\n };\n\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n const value = this.series.getSeriesStyle(datum)?.(key);\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n\n markTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesFieldData(datum);\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getMeasureData(datum);\n };\n\n shapeTypeCallback = (datum: Datum, params?: TooltipHandlerParams): ShapeType | undefined => {\n return (\n this._getSeriesStyle(datum, 'shape', null) ??\n this._getSeriesStyle(datum, 'symbolType', this.series.getDefaultShapeType())\n );\n };\n\n shapeColorCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesStyle(datum, ['fill', 'stroke']);\n };\n\n shapeStrokeCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesStyle(datum, ['stroke', 'fill']);\n };\n\n dimensionTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getDimensionData(datum);\n };\n\n groupTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n return this._getSeriesFieldData(datum);\n };\n\n groupTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams): string | undefined => {\n const { seriesFields } = this._seriesCacheInfo;\n let dimensionFields = this._seriesCacheInfo.dimensionFields;\n if (seriesFields[0]) {\n dimensionFields = dimensionFields.filter(field => field !== seriesFields[0]);\n }\n return dimensionFields.map(field => datum?.[field]).join('-');\n };\n\n getHasShape = (isContent: boolean) => {\n return !!isContent;\n };\n\n protected getShapeAttrs(activeType: TooltipActiveType, isContent: boolean, chartTooltipSpec?: ITooltipSpec) {\n const key = isContent ? 'content' : 'title';\n const shapeAttrs: ITooltipPattern = {\n ...chartTooltipSpec?.style?.shape,\n ...chartTooltipSpec?.[activeType],\n ...(chartTooltipSpec as any)?.[activeType]?.[key],\n ...this.spec?.[activeType],\n ...(this.spec as any)?.[activeType]?.[key]\n };\n\n const res = {\n shapeType: shapeAttrs.shapeType ?? this.shapeTypeCallback,\n shapeFill: shapeAttrs.shapeFill ?? shapeAttrs.shapeColor ?? this.shapeColorCallback,\n shapeStroke: shapeAttrs.shapeStroke ?? this.shapeStrokeCallback,\n shapeHollow: shapeAttrs.shapeHollow ?? false,\n shapeLineWidth: shapeAttrs.shapeLineWidth,\n shapeSize: shapeAttrs.shapeSize ?? (shapeAttrs as any).size,\n hasShape: shapeAttrs.hasShape ?? this.getHasShape(isContent)\n };\n\n return res;\n }\n\n protected enableByType(activeType: TooltipActiveType) {\n return true;\n }\n\n protected getDefaultContentList(\n activeType: TooltipActiveType\n ): MaybeArray>> {\n return [this.getDefaultContentPattern(activeType)];\n }\n\n protected getContentList(\n activeType: TooltipActiveType,\n spec: ITooltipPattern,\n shapeAttrs: Record>,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipLineActual[] {\n return parseContent(\n spec?.content ?? this.getDefaultContentList(activeType),\n this.getDefaultContentPattern(activeType),\n shapeAttrs,\n data,\n datum,\n params\n );\n }\n\n protected getTitleResult(\n activeType: TooltipActiveType,\n titleSpec: TooltipPatternProperty,\n shapeAttrs: Record>,\n data?: TooltipData,\n params?: TooltipHandlerParams\n ) {\n let titlePattern = isFunction(titleSpec)\n ? ((titleSpec as TooltipPatternCallback)(data, params) as ITooltipLinePattern)\n : (titleSpec as ITooltipLinePattern);\n\n if (!titlePattern) {\n titlePattern = this.getDefaultTitlePattern(activeType);\n } else if (isNil(titlePattern.value)) {\n titlePattern = {\n ...this.getDefaultTitlePattern(activeType),\n ...titlePattern\n };\n }\n\n if (titlePattern && titlePattern.visible !== false) {\n const datum = getFirstDatumFromTooltipData(data);\n const res = {\n visible: getTooltipContentValue(titlePattern.visible, datum, params),\n value: getTimeString(\n getTooltipContentValue(titlePattern.value, datum, params, titlePattern.valueFormatter),\n titlePattern.valueTimeFormat,\n titlePattern.valueTimeFormatMode\n ),\n valueStyle: getTooltipContentValue(titlePattern.valueStyle, datum, params),\n hasShape: titlePattern.hasShape\n } as ITooltipActual['title'];\n Object.keys(shapeAttrs).forEach(key => {\n (res as any)[key] = getTooltipContentValue(shapeAttrs[key], datum, params);\n });\n\n return res;\n }\n\n return {\n hasShape: false,\n visible: false\n } as ITooltipActual['title'];\n }\n\n getTooltipData(\n activeType: TooltipActiveType,\n chartTooltipSpec?: ITooltipSpec,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipActual | null {\n if (\n !this.enableByType(activeType) ||\n !isActiveTypeVisible(activeType, this.spec) ||\n (activeType === 'dimension' && (!datum || !datum.length))\n ) {\n return null;\n }\n const patternSpec = this.spec?.[activeType] ?? chartTooltipSpec?.[activeType];\n const contentShapeAttrs = this.getShapeAttrs(activeType, true, chartTooltipSpec);\n const titleShapeAttrs = this.getShapeAttrs(activeType, false, chartTooltipSpec);\n let content: ITooltipLineActual[];\n\n if (activeType === 'dimension') {\n content = [];\n const userContents = this.getContentList(activeType, patternSpec, contentShapeAttrs, data, datum, params);\n\n userContents.forEach(entry => {\n content.push(entry);\n });\n } else {\n content = this.getContentList(activeType, patternSpec, contentShapeAttrs, data, datum, params);\n }\n\n return {\n visible: true,\n activeType,\n data,\n title: this.getTitleResult(activeType, patternSpec?.title, titleShapeAttrs, data, params),\n content\n };\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: undefined,\n value: activeType === 'group' ? this.groupTooltipTitleCallback : this.dimensionTooltipTitleCallback\n };\n }\n\n protected getDefaultContentPattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n seriesId: this.series.id,\n key: activeType === 'group' ? this.groupTooltipKeyCallback : this.markTooltipKeyCallback,\n value: this.markTooltipValueCallback\n };\n }\n}\n","import { isNil, isFunction, minInArray, maxInArray } from '@visactor/vutils';\nimport type { IFieldsMeta } from '../../typings/spec';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeFields } from '../../util/data';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport type { IStatisticsOption, StatisticOperations } from './interface';\n\nconst methods = {\n min: (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n max: (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-min': (arr: any[]) => {\n return arr.length ? minInArray(arr.map(n => n * 1)) : 0;\n },\n 'array-max': (arr: any[]) => {\n return arr.length ? maxInArray(arr.map(n => n * 1)) : 0;\n },\n values: (arr: any[]) => {\n const map = {};\n const res: any[] = [];\n\n for (const entry of arr) {\n if (!map[entry]) {\n res.push(entry);\n map[entry] = 1;\n }\n }\n\n return res;\n }\n};\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatistics = (data: Array, op: IStatisticsOption) => {\n // const operations = op.operations;\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return {};\n }\n\n // merge same key\n fields = mergeFields([], fields);\n\n const dataKey = op.target === 'parser' ? 'parserData' : 'latestData';\n const latestData = data[0][dataKey] ? data[0][dataKey] : data || [];\n const dataFields = data[0].getFields?.() as Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n\n return dimensionStatisticsOfSimpleData(latestData, fields, dataFields);\n};\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatisticsOfSimpleData = (\n latestData: Datum[],\n fields: {\n key: string;\n operations: StatisticOperations;\n filter?: (fv: any) => boolean;\n customize?: { max: number; min: number } | any[];\n }[],\n dataFields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >\n) => {\n const result = {};\n\n let fValues: any[] = [];\n let nextFValues: any[] = [];\n fields.forEach(f => {\n const key = f.key;\n // NOTE: the same key in fields has been merge already\n result[key] = {};\n const dataFieldInKey = dataFields?.[key];\n const operations: StatisticOperations = f.operations;\n const isNumberField = operations.some(op => op === 'min' || op === 'max' || op === 'allValid');\n let allValid = true;\n fValues.length = 0;\n\n latestData &&\n latestData.forEach((d: Datum) => {\n if (d) {\n fValues.push(d[key]);\n }\n });\n const len = fValues.length;\n\n if (isNumberField) {\n nextFValues.length = 0;\n fValues.forEach((item, i) => {\n if (couldBeValidNumber(item)) {\n nextFValues.push(item);\n }\n });\n const t = fValues;\n fValues = nextFValues;\n nextFValues = t;\n // fValues = fValues.filter(couldBeValidNumber);\n allValid = fValues.length === len;\n } else if (operations.some(op => op === 'array-min' || op === 'array-max')) {\n fValues = fValues.reduce((res, entry) => {\n if (entry) {\n entry.forEach((d: any) => {\n if (couldBeValidNumber(d)) {\n res.push(d);\n }\n });\n }\n\n return res;\n }, []);\n } else {\n fValues = fValues.filter((entry: any) => entry !== undefined);\n }\n\n if (f.filter) {\n fValues = fValues.filter(f.filter);\n }\n\n operations.forEach(op => {\n // @chensij 如果指定了计算的domain结果,则忽略计算(目前该逻辑仅在dot series中维护,因为dot series期望在filter data之后x轴改变domain,y轴不改变domain)\n if (f.customize) {\n result[key][op] = f.customize;\n } else {\n if (dataFieldInKey && dataFieldInKey.lockStatisticsByDomain && !isNil(dataFieldInKey.domain)) {\n if (op === 'values') {\n result[key][op] = dataFieldInKey.domain.slice();\n return;\n }\n } else if (op === 'allValid') {\n return;\n }\n\n result[key][op] = methods[op](fValues);\n\n if (op === 'array-max') {\n result[key].max = result[key][op];\n }\n if (op === 'array-min') {\n result[key].min = result[key][op];\n }\n }\n });\n\n if (isNumberField) {\n result[key].allValid = allValid;\n }\n });\n\n return result;\n};\n","import type { Datum, IInvalidType, StringOrNumber } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\n\nexport interface ITravelOpt {\n config: () => {\n invalidType: IInvalidType;\n checkField: StringOrNumber[];\n };\n}\n\nexport const invalidTravel = (data: Array, op: ITravelOpt) => {\n const { config } = op;\n if (!config) {\n return data;\n }\n const { invalidType, checkField } = config();\n if (invalidType !== 'zero') {\n return data;\n }\n\n if (checkField && checkField.length) {\n data.forEach((datum: Datum) => {\n checkField.forEach(field => {\n if (!couldBeValidNumber(datum[field])) {\n datum[field] = 0;\n }\n });\n });\n }\n return data;\n};\n","import { isNil, isValid } from '@visactor/vutils';\nimport { CompilableData } from '../../compile/data/compilable-data';\n\nexport class SeriesData extends CompilableData {\n protected _compileProduct() {\n const data = this._data?.latestData;\n if (isNil(data) || isValid(this.getProduct())) {\n return;\n }\n this._initProduct([]); // 性能优化:初次编译不需要数据\n }\n\n generateProductId(): string {\n return this._data?.name as string;\n }\n}\n","import { PREFIX } from './base';\n\nexport const DEFAULT_HIERARCHY_DEPTH = `${PREFIX}_HIERARCHY_DEPTH`;\nexport const DEFAULT_HIERARCHY_ROOT = `${PREFIX}_HIERARCHY_ROOT`;\nexport const DEFAULT_HIERARCHY_ROOT_INDEX = `${PREFIX}_HIERARCHY_ROOT_INDEX`;\n","import { DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type { TreemapSeries } from '../../series/treemap/treemap';\nimport type { AddVChartPropertyContext } from './add-property';\nimport {\n DEFAULT_HIERARCHY_DEPTH,\n DEFAULT_HIERARCHY_ROOT,\n DEFAULT_HIERARCHY_ROOT_INDEX\n} from '../../constant/hierarchy';\nimport type { SunburstSeries } from '../../series/sunburst/sunburst';\nimport type { CirclePackingSeries } from '../../series/circle-packing/circle-packing';\n\nexport function initKeyMap(this: BaseSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: !this._seriesField,\n defaultSeriesField: !this._seriesField ? this.getSeriesKeys()[0] : null,\n getKey: this.generateDefaultDataKey(this._spec.dataKey)\n };\n}\n\nexport function addDataKey(d: any, i: number, context: AddVChartPropertyContext) {\n if (!d) {\n return;\n }\n if (context.needDefaultSeriesField) {\n d[DEFAULT_DATA_SERIES_FIELD] = context.defaultSeriesField;\n }\n d[DEFAULT_DATA_INDEX] = i;\n d[DEFAULT_DATA_KEY] = context.getKey(d, i, context);\n}\n\nexport function initHierarchyKeyMap(this: TreemapSeries | SunburstSeries | CirclePackingSeries) {\n return {\n keyMap: new Map(),\n needDefaultSeriesField: true,\n defaultSeriesField: this.getSeriesKeys()[0],\n getKey: (this as any).generateDefaultDataKey((this as any)._spec.dataKey),\n categoryField: this.getCategoryField()\n };\n}\n\nexport function addHierarchyDataKey(\n d: any,\n i: number,\n context: AddVChartPropertyContext,\n depth: number = 0,\n root?: string,\n rootIndex?: number\n) {\n if (rootIndex === undefined) {\n rootIndex = i;\n }\n addDataKey(d, i, context);\n d[DEFAULT_HIERARCHY_DEPTH] = depth;\n d[DEFAULT_HIERARCHY_ROOT] = root || d[context.categoryField];\n d[DEFAULT_HIERARCHY_ROOT_INDEX] = rootIndex;\n if (d.children && d.children.length) {\n d.children.forEach((_d: any, _i: number) =>\n addHierarchyDataKey(_d, _i, context, d[DEFAULT_HIERARCHY_DEPTH] + 1, d[DEFAULT_HIERARCHY_ROOT], rootIndex)\n );\n }\n}\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { PREFIX } from '../../constant/base';\n\nexport const baseSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.label]: { name: SeriesMarkNameEnum.label, type: MarkTypeEnum.text }\n};\n\nexport const RECT_X = `${PREFIX}_rect_x`;\nexport const RECT_X1 = `${PREFIX}_rect_x1`;\nexport const RECT_Y = `${PREFIX}_rect_y`;\nexport const RECT_Y1 = `${PREFIX}_rect_y1`;\n\nexport const defaultSeriesIgnoreCheckKeys: { [key: string]: true } = {\n data: true\n};\n\nexport const defaultSeriesCompileCheckKeys: { [key: string]: true } = {\n invalidType: true,\n animation: true,\n animationAppear: true,\n animationEnter: true,\n animationUpdate: true,\n animationExit: true,\n animationNormal: true\n};\n","import { Direction } from '../../typings/space';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { ILineAnimationParams, LineAppearPreset } from './interface';\n\nconst Appear_ClipIn = (params: ILineAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'clipIn',\n options: {\n clipDimension: params.direction === Direction.horizontal ? 'y' : 'x'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_Grow = (params: ILineAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport function linePresetAnimation(params: ILineAnimationParams, preset: LineAppearPreset): IAnimationTypeConfig {\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn(params);\n }\n}\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, IClipAnimationOptions, TypeAnimation } from '../../../types/animate';\n\nexport const clipIn: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', false);\n const clipRange = element.getGraphicAttribute('clipRange', false) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: 0, clipRangeByDimension: options.clipDimension },\n to: { clipRange: clipRange, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: 0 },\n to: { clipRange: clipRange }\n };\n};\n\nexport const clipOut: TypeAnimation = (\n element: IElement,\n options: IClipAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const clipDimension = element.getGraphicAttribute('clipRangeByDimension', true);\n const clipRange = element.getGraphicAttribute('clipRange', true) ?? 1;\n if (options && options.clipDimension) {\n return {\n from: { clipRange: clipRange, clipRangeByDimension: options.clipDimension },\n to: { clipRange: 0, clipRangeByDimension: clipDimension }\n };\n }\n return {\n from: { clipRange: clipRange },\n to: { clipRange: 0 }\n };\n};\n","import type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport const fadeIn: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes() ?? {};\n\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: attrs.opacity ?? 1,\n fillOpacity: attrs.fillOpacity ?? 1,\n strokeOpacity: attrs.strokeOpacity ?? 1\n }\n };\n};\n\nexport const fadeOut: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: {\n opacity: element.getGraphicAttribute('opacity', true) ?? 1,\n fillOpacity: element.getGraphicAttribute('fillOpacity', true) ?? 1,\n strokeOpacity: element.getGraphicAttribute('strokeOpacity', true) ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n","import { isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IGrowCartesianAnimationOptions, IAnimationParameters, IElement, TypeAnimation } from '../../../types';\n\n// grow center\nexport const growCenterIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n return {\n from: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n },\n to: { x, x1, width }\n };\n }\n case 'y': {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n return {\n from: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n },\n to: { y, y1, height }\n };\n }\n case 'xy':\n default: {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n const from: any = {};\n\n if (isValid(width)) {\n from.x = x + width / 2;\n from.width = 0;\n from.x1 = undefined;\n } else {\n from.x = (x + x1) / 2;\n from.x1 = (x + x1) / 2;\n from.width = undefined;\n }\n\n if (isValid(height)) {\n from.y = y + height / 2;\n from.height = 0;\n from.y1 = undefined;\n } else {\n from.y = (y + y1) / 2;\n from.y1 = (y + y1) / 2;\n from.height = undefined;\n }\n\n return {\n from,\n to: { x, y, x1, y1, width, height }\n };\n }\n }\n};\n\nexport const growCenterOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x': {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n return {\n to: isValid(width)\n ? {\n x: x + width / 2,\n x1: undefined,\n width: 0\n }\n : {\n x: (x + x1) / 2,\n x1: (x + x1) / 2,\n width: undefined\n }\n };\n }\n case 'y': {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n return {\n to: isValid(height)\n ? {\n y: y + height / 2,\n y1: undefined,\n height: 0\n }\n : {\n y: (y + y1) / 2,\n y1: (y + y1) / 2,\n height: undefined\n }\n };\n }\n case 'xy':\n default: {\n const x = element.getFinalAnimationAttribute('x');\n const y = element.getFinalAnimationAttribute('y');\n const x1 = element.getFinalAnimationAttribute('x1');\n const y1 = element.getFinalAnimationAttribute('y1');\n const width = element.getFinalAnimationAttribute('width');\n const height = element.getFinalAnimationAttribute('height');\n const to: any = {};\n\n if (isValid(width)) {\n to.x = x + width / 2;\n to.width = 0;\n to.x1 = undefined;\n } else {\n to.x = (x + x1) / 2;\n to.x1 = (x + x1) / 2;\n to.width = undefined;\n }\n\n if (isValid(height)) {\n to.y = y + height / 2;\n to.height = 0;\n to.y1 = undefined;\n } else {\n to.y = (y + y1) / 2;\n to.y1 = (y + y1) / 2;\n to.height = undefined;\n }\n\n return {\n to\n };\n }\n }\n};\n\n// grow width\nfunction growWidthInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n from: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n from: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nfunction growWidthInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n // no need to handle the situation where x > x1\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options?.overall : 0;\n }\n return {\n from: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 },\n to: { x: x, x1: x1, width: width }\n };\n}\n\nexport const growWidthIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthInOverall(element, options, animationParameters)\n : growWidthInIndividual(element, options, animationParameters);\n};\n\nfunction growWidthOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x = element.getFinalAnimationAttribute('x');\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n if (options && options.orient === 'negative') {\n const computedX1 = isValid(width) ? Math.max(x, x + width) : Math.max(x, x1);\n\n return {\n to: { x: computedX1, x1: isNil(x1) ? undefined : computedX1, width: isNil(width) ? undefined : 0 }\n };\n }\n\n const computedX = isValid(width) ? Math.min(x, x + width) : Math.min(x, x1);\n return {\n to: { x: computedX, x1: isNil(x1) ? undefined : computedX, width: isNil(width) ? undefined : 0 }\n };\n}\n\nfunction growWidthOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const x1 = element.getFinalAnimationAttribute('x1');\n const width = element.getFinalAnimationAttribute('width');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = overallValue;\n } else {\n overallValue = animationParameters.width;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { x: overallValue, x1: isNil(x1) ? undefined : overallValue, width: isNil(width) ? undefined : 0 }\n };\n}\n\nexport const growWidthOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growWidthOutOverall(element, options, animationParameters)\n : growWidthOutIndividual(element, options, animationParameters);\n};\n\n// grow height\n\nfunction growHeightInIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n return {\n from: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n from: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nfunction growHeightInOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n from: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 },\n to: { y: y, y1: y1, height: height }\n };\n}\n\nexport const growHeightIn: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightInOverall(element, options, animationParameters)\n : growHeightInIndividual(element, options, animationParameters);\n};\n\nfunction growHeightOutIndividual(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y = element.getFinalAnimationAttribute('y');\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n if (options && options.orient === 'negative') {\n const computedY1 = isValid(height) ? Math.max(y, y + height) : Math.max(y, y1);\n\n return {\n to: { y: computedY1, y1: isNil(y1) ? undefined : computedY1, height: isNil(height) ? undefined : 0 }\n };\n }\n\n const computedY = isValid(height) ? Math.min(y, y + height) : Math.min(y, y1);\n return {\n to: { y: computedY, y1: isNil(y1) ? undefined : computedY, height: isNil(height) ? undefined : 0 }\n };\n}\n\nfunction growHeightOutOverall(\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) {\n const y1 = element.getFinalAnimationAttribute('y1');\n const height = element.getFinalAnimationAttribute('height');\n\n let overallValue: number;\n if (options && options.orient === 'negative') {\n if (isNumber(options.overall)) {\n overallValue = options.overall;\n } else if (animationParameters.group) {\n overallValue = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = overallValue;\n } else {\n overallValue = animationParameters.height;\n }\n } else {\n overallValue = isNumber(options?.overall) ? options.overall : 0;\n }\n return {\n to: { y: overallValue, y1: isNil(y1) ? undefined : overallValue, height: isNil(height) ? undefined : 0 }\n };\n}\n\nexport const growHeightOut: TypeAnimation = (\n element: IElement,\n options: IGrowCartesianAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growHeightOutOverall(element, options, animationParameters)\n : growHeightOutIndividual(element, options, animationParameters);\n};\n","import { isNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowAngleAnimationOptions,\n IAnimationParameters,\n IGrowRadiusAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\n// grow angle\n\nconst growAngleInIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: attrs?.endAngle },\n to: { startAngle: attrs?.startAngle }\n };\n }\n return {\n from: { endAngle: attrs?.startAngle },\n to: { endAngle: attrs?.endAngle }\n };\n};\n\nconst growAngleInOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: attrs?.startAngle,\n endAngle: attrs?.endAngle\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: overallValue,\n endAngle: overallValue\n },\n to: {\n startAngle: attrs?.startAngle,\n endAngle: attrs?.endAngle\n }\n };\n};\n\nexport const growAngleIn: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleInOverall(element, options, animationParameters)\n : growAngleInIndividual(element, options, animationParameters);\n};\n\nconst growAngleOutIndividual = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'anticlockwise') {\n return {\n from: { startAngle: element.getGraphicAttribute('startAngle', true) },\n to: { startAngle: attrs?.endAngle }\n };\n }\n return {\n from: { endAngle: element.getGraphicAttribute('endAngle', true) },\n to: { endAngle: attrs?.startAngle }\n };\n};\n\nconst growAngleOutOverall = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n if (options && options.orient === 'anticlockwise') {\n const overallValue = isNumber(options.overall) ? options.overall : Math.PI * 2;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n }\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n startAngle: element.getGraphicAttribute('startAngle', true),\n endAngle: element.getGraphicAttribute('endAngle', true)\n },\n to: {\n startAngle: overallValue,\n endAngle: overallValue\n }\n };\n};\n\nexport const growAngleOut: TypeAnimation = (\n element: IElement,\n options: IGrowAngleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growAngleOutOverall(element, options, animationParameters)\n : growAngleOutIndividual(element, options, animationParameters);\n};\n\n// grow radius\n\nconst growRadiusInIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: attrs?.outerRadius },\n to: { innerRadius: attrs?.innerRadius }\n };\n }\n return {\n from: { outerRadius: attrs?.innerRadius },\n to: { outerRadius: attrs?.outerRadius }\n };\n};\n\nconst growRadiusInOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: overallValue,\n outerRadius: overallValue\n },\n to: {\n innerRadius: attrs?.innerRadius,\n outerRadius: attrs?.outerRadius\n }\n };\n};\n\nexport const growRadiusIn: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusInOverall(element, options, animationParameters)\n : growRadiusInIndividual(element, options, animationParameters);\n};\n\nconst growRadiusOutIndividual = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n if (options && options.orient === 'inside') {\n return {\n from: { innerRadius: element.getGraphicAttribute('innerRadius', true) },\n to: { innerRadius: attrs?.outerRadius }\n };\n }\n return {\n from: { outerRadius: element.getGraphicAttribute('outerRadius', true) },\n to: { outerRadius: attrs?.innerRadius }\n };\n};\n\nconst growRadiusOutOverall = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const overallValue = isNumber(options?.overall) ? options.overall : 0;\n return {\n from: {\n innerRadius: element.getGraphicAttribute('innerRadius', true),\n outerRadius: element.getGraphicAttribute('outerRadius', true)\n },\n to: {\n innerRadius: overallValue,\n outerRadius: overallValue\n }\n };\n};\n\nexport const growRadiusOut: TypeAnimation = (\n element: IElement,\n options: IGrowRadiusAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return (options?.overall ?? false) !== false\n ? growRadiusOutOverall(element, options, animationParameters)\n : growRadiusOutIndividual(element, options, animationParameters);\n};\n","import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber } from '@visactor/vutils';\nimport type {\n IElement,\n IGrowPointsOverallAnimationOptions,\n IAnimationParameters,\n IGrowPointsAnimationOptions,\n TypeAnimation\n} from '../../../types';\n\nconst getCenterPoints = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points: IPointLike[] = element.getGraphicAttribute('points', false);\n const center: IPointLike = { x: 0, y: 0 };\n points.forEach(point => {\n center.x += point.x;\n center.y += point.y;\n });\n center.x /= points.length;\n center.y /= points.length;\n\n if (options && options.center) {\n if (isValidNumber(options.center.x)) {\n center.x = options.center.x;\n }\n if (isValidNumber(options.center.y)) {\n center.y = options.center.y;\n }\n }\n\n if (element.mark.markType === 'area') {\n center.x1 = center.x;\n center.y1 = center.y;\n }\n\n return points.map(point => Object.assign({}, point, center));\n};\n\nexport const growPointsIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: getCenterPoints(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsOverallAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: getCenterPoints(element, options, animationParameters) }\n };\n};\n\n// grow points x\n\nconst changePointsX = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupRight = animationParameters.width;\n\n if (animationParameters.group) {\n groupRight = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n\n (animationParameters as any).groupWidth = groupRight;\n }\n\n return {\n ...point,\n x: groupRight,\n y: point.y,\n x1: groupRight,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n ...point,\n x: 0,\n y: point.y,\n x1: 0,\n y1: point.y1,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsXIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsX(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsXOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsX(element, options, animationParameters) }\n };\n};\n\n// grow points y\n\nconst changePointsY = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const points = element.getGraphicAttribute('points', false);\n return points.map((point: IPointLike) => {\n if (options && options.orient === 'negative') {\n let groupBottom = animationParameters.height;\n\n if (animationParameters.group) {\n groupBottom = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupHeight = groupBottom;\n }\n\n return {\n ...point,\n x: point.x,\n y: groupBottom,\n x1: point.x1,\n y1: groupBottom,\n defined: point.defined !== false\n } as IPointLike;\n }\n return {\n ...point,\n x: point.x,\n y: 0,\n x1: point.x1,\n y1: 0,\n defined: point.defined !== false\n } as IPointLike;\n });\n};\n\nexport const growPointsYIn: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: changePointsY(element, options, animationParameters) },\n to: { points: element.getGraphicAttribute('points', false) }\n };\n};\n\nexport const growPointsYOut: TypeAnimation = (\n element: IElement,\n options: IGrowPointsAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n return {\n from: { points: element.getGraphicAttribute('points', true) },\n to: { points: changePointsY(element, options, animationParameters) }\n };\n};\n","import { isFunction, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IMoveAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// When user did not provide proper x/y value, move animation will never work properly,\n// due to that, default x/y value won't be set.\n\nexport const moveIn: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt, excludeChannels = [] } = options ?? {};\n let changedX = 0;\n let changedY = 0;\n\n if (orient === 'negative') {\n // consider the offset of group\n if (animationParameters.group) {\n changedX = (animationParameters as any).groupWidth ?? animationParameters.group.getBounds().width();\n changedY = (animationParameters as any).groupHeight ?? animationParameters.group.getBounds().height();\n\n (animationParameters as any).groupWidth = changedX;\n (animationParameters as any).groupHeight = changedY;\n } else {\n changedX = animationParameters.width;\n changedY = animationParameters.height;\n }\n }\n\n changedX += offset;\n changedY += offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n const finalAttrsX = excludeChannels.includes('x')\n ? element.getGraphicAttribute('x')\n : element.getFinalAnimationAttribute('x');\n const finalAttrsY = excludeChannels.includes('y')\n ? element.getGraphicAttribute('y')\n : element.getFinalAnimationAttribute('y');\n\n switch (direction) {\n case 'x':\n return {\n from: { x: fromX },\n to: { x: finalAttrsX }\n };\n case 'y':\n return {\n from: { y: fromY },\n to: { y: finalAttrsY }\n };\n case 'xy':\n default:\n return {\n from: { x: fromX, y: fromY },\n to: {\n x: finalAttrsX,\n y: finalAttrsY\n }\n };\n }\n};\n\nexport const moveOut: TypeAnimation = (\n element: IElement,\n options: IMoveAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const { offset = 0, orient, direction, point: pointOpt } = options ?? {};\n\n // consider the offset of group\n const groupBounds = animationParameters.group ? animationParameters.group.getBounds() : null;\n const groupWidth = groupBounds?.width() ?? animationParameters.width;\n const groupHeight = groupBounds?.height() ?? animationParameters.height;\n const changedX = (orient === 'negative' ? groupWidth : 0) + offset;\n const changedY = (orient === 'negative' ? groupHeight : 0) + offset;\n const point = isFunction(pointOpt) ? pointOpt.call(null, element.getDatum(), element, animationParameters) : pointOpt;\n const fromX = point && isValidNumber(point.x) ? point.x : changedX;\n const fromY = point && isValidNumber(point.y) ? point.y : changedY;\n\n switch (direction) {\n case 'x':\n return {\n from: { x: element.getGraphicAttribute('x', true) },\n to: { x: fromX }\n };\n case 'y':\n return {\n from: { y: element.getGraphicAttribute('y', true) },\n to: { y: fromY }\n };\n case 'xy':\n default:\n return {\n from: {\n x: element.getGraphicAttribute('x', true),\n y: element.getGraphicAttribute('y', true)\n },\n to: { x: fromX, y: fromY }\n };\n }\n};\n","import type { IElement, IScaleAnimationOptions, IAnimationParameters, TypeAnimation } from '../../../types';\n\n// TODO: negative direction, need support from VRender\n\nexport const scaleIn: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attrs = element.getFinalAnimationAttributes();\n\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: 0 },\n to: { scaleX: attrs?.scaleX ?? 1 }\n };\n case 'y':\n return {\n from: { scaleY: 0 },\n to: { scaleY: attrs?.scaleY ?? 1 }\n };\n case 'xy':\n default:\n return {\n from: { scaleX: 0, scaleY: 0 },\n to: {\n scaleX: attrs?.scaleX ?? 1,\n scaleY: attrs?.scaleY ?? 1\n }\n };\n }\n};\n\nexport const scaleOut: TypeAnimation = (\n element: IElement,\n options: IScaleAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n switch (options?.direction) {\n case 'x':\n return {\n from: { scaleX: element.getGraphicAttribute('scaleX', true) ?? 1 },\n to: { scaleX: 0 }\n };\n case 'y':\n return {\n from: { scaleY: element.getGraphicAttribute('scaleY', true) ?? 1 },\n to: { scaleY: 0 }\n };\n case 'xy':\n default:\n return {\n from: {\n scaleX: element.getGraphicAttribute('scaleX', true) ?? 1,\n scaleY: element.getGraphicAttribute('scaleY', true) ?? 1\n },\n to: { scaleX: 0, scaleY: 0 }\n };\n }\n};\n","import { array, isNil, isEqual } from '@visactor/vutils';\nimport type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport interface IUpdateAnimationOptions {\n excludeChannels: string[];\n}\n\nconst BUILT_IN_EXCLUDE_CHANNELS = {\n symbol: ['_mo_hide_', 'visible']\n};\n\nexport const update: TypeAnimation = (\n element: IElement,\n options: IUpdateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const from = Object.assign({}, element.getPrevGraphicAttributes());\n const to = Object.assign({}, element.getNextGraphicAttributes());\n if (options) {\n array(options.excludeChannels).forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n let excludeChannels: string[];\n if (element.mark && element.mark.markType && (excludeChannels = BUILT_IN_EXCLUDE_CHANNELS[element.mark.markType])) {\n excludeChannels.forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n\n Object.keys(to).forEach(key => {\n if (isEqual(from[key], to[key])) {\n delete from[key];\n delete to[key];\n }\n });\n\n const final = element.getFinalGraphicAttributes();\n\n Object.keys(from).forEach(key => {\n if (isNil(to[key])) {\n if (isNil(final[key]) || isEqual(from[key], final[key])) {\n delete from[key];\n } else {\n to[key] = final[key];\n }\n }\n });\n\n return { from, to };\n};\n","import { isNumberClose, isValidNumber } from '@visactor/vutils';\nimport type { IAnimationParameters, IRotateAnimationOptions, TypeAnimation, IElement } from '../../../types';\n\nexport const rotateIn: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const attributeAngle = element.getFinalAnimationAttribute('angle') ?? 0;\n\n let angle = 0;\n if (isNumberClose(attributeAngle / (Math.PI * 2), 0)) {\n angle = Math.round(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(attributeAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle },\n to: { angle: attributeAngle }\n };\n};\n\nexport const rotateOut: TypeAnimation = (\n element: IElement,\n options: IRotateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const finalAngle = element.getGraphicAttribute('angle', true) ?? 0;\n let angle = 0;\n if (isNumberClose(finalAngle / (Math.PI * 2), 0)) {\n angle = Math.round(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else if (isValidNumber(options?.angle)) {\n angle = options.angle;\n } else if (options?.orient === 'anticlockwise') {\n angle = Math.ceil(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n } else {\n angle = Math.floor(finalAngle / (Math.PI * 2)) * Math.PI * 2;\n }\n return {\n from: { angle: finalAngle },\n to: { angle }\n };\n};\n","import { clipIn, clipOut } from './clip';\nimport { fadeIn, fadeOut } from './fade';\nimport { growCenterIn, growCenterOut, growHeightIn, growHeightOut, growWidthIn, growWidthOut } from './grow-cartesian';\nimport { growAngleIn, growAngleOut, growRadiusIn, growRadiusOut } from './grow-polar';\nimport {\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut\n} from './grow-points';\nimport { growIntervalIn, growIntervalOut } from './grow-interval';\nimport { moveIn, moveOut } from './move';\nimport { scaleIn, scaleOut } from './scale';\nimport { update } from './update';\nimport { rotateIn, rotateOut } from './rotate';\nimport { Factory } from '../../../core/factory';\n\nexport {\n clipIn,\n clipOut,\n fadeIn,\n fadeOut,\n moveIn,\n moveOut,\n scaleIn,\n scaleOut,\n rotateIn,\n rotateOut,\n growCenterIn,\n growCenterOut,\n growWidthIn,\n growWidthOut,\n growHeightIn,\n growHeightOut,\n growAngleIn,\n growAngleOut,\n growRadiusIn,\n growRadiusOut,\n growPointsIn,\n growPointsOut,\n growPointsXIn,\n growPointsXOut,\n growPointsYIn,\n growPointsYOut,\n growIntervalIn,\n growIntervalOut,\n update\n};\n\nexport const registerClipInAnimation = () => {\n Factory.registerAnimationType('clipIn', clipIn);\n};\nexport const registerClipOutAnimation = () => {\n Factory.registerAnimationType('clipOut', clipOut);\n};\n\nexport const registerFadeInAnimation = () => {\n Factory.registerAnimationType('fadeIn', fadeIn);\n};\nexport const registerFadeOutAnimation = () => {\n Factory.registerAnimationType('fadeOut', fadeOut);\n};\n\nexport const registerGrowCenterInAnimation = () => {\n Factory.registerAnimationType('growCenterIn', growCenterIn);\n};\nexport const registerGrowCenterOutAnimation = () => {\n Factory.registerAnimationType('growCenterOut', growCenterOut);\n};\nexport const registerGrowHeightInAnimation = () => {\n Factory.registerAnimationType('growHeightIn', growHeightIn);\n};\nexport const registerGrowHeightOutAnimation = () => {\n Factory.registerAnimationType('growHeightOut', growHeightOut);\n};\nexport const registerGrowWidthInAnimation = () => {\n Factory.registerAnimationType('growWidthIn', growWidthIn);\n};\nexport const registerGrowWidthOutAnimation = () => {\n Factory.registerAnimationType('growWidthOut', growWidthOut);\n};\n\nexport const registerGrowIntervalInAnimation = () => {\n Factory.registerAnimationType('growIntervalIn', growIntervalIn);\n};\nexport const registerGrowIntervalOutAnimation = () => {\n Factory.registerAnimationType('growIntervalOut', growIntervalOut);\n};\n\nexport const registerGrowPointsInAnimation = () => {\n Factory.registerAnimationType('growPointsIn', growPointsIn);\n};\nexport const registerGrowPointsOutAnimation = () => {\n Factory.registerAnimationType('growPointsOut', growPointsOut);\n};\nexport const registerGrowPointsXInAnimation = () => {\n Factory.registerAnimationType('growPointsXIn', growPointsXIn);\n};\nexport const registerGrowPointsXOutAnimation = () => {\n Factory.registerAnimationType('growPointsXOut', growPointsXOut);\n};\nexport const registerGrowPointsYInAnimation = () => {\n Factory.registerAnimationType('growPointsYIn', growPointsYIn);\n};\nexport const registerGrowPointsYOutAnimation = () => {\n Factory.registerAnimationType('growPointsYOut', growPointsYOut);\n};\n\nexport const registerGrowAngleInAnimation = () => {\n Factory.registerAnimationType('growAngleIn', growAngleIn);\n};\nexport const registerGrowAngleOutAnimation = () => {\n Factory.registerAnimationType('growAngleOut', growAngleOut);\n};\nexport const registerGrowRadiusInAnimation = () => {\n Factory.registerAnimationType('growRadiusIn', growRadiusIn);\n};\nexport const registerGrowRadiusOutAnimation = () => {\n Factory.registerAnimationType('growRadiusOut', growRadiusOut);\n};\n\nexport const registerMoveInAnimation = () => {\n Factory.registerAnimationType('moveIn', moveIn);\n};\nexport const registerMoveOutAnimation = () => {\n Factory.registerAnimationType('moveOut', moveOut);\n};\n\nexport const registerScaleInAnimation = () => {\n Factory.registerAnimationType('scaleIn', scaleIn);\n};\nexport const registerScaleOutAnimation = () => {\n Factory.registerAnimationType('scaleOut', scaleOut);\n};\n\nexport const registerRotateInAnimation = () => {\n Factory.registerAnimationType('rotateIn', rotateIn);\n};\nexport const registerRotateOutAnimation = () => {\n Factory.registerAnimationType('rotateOut', rotateOut);\n};\n\nexport const registerUpdateAnimation = () => {\n Factory.registerAnimationType('update', update);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { TagPointsUpdate, ClipDirectionAnimate } from '@visactor/vrender-core';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILineAnimationParams, LineAppearPreset } from '../series/line/interface';\nimport { linePresetAnimation } from '../series/line/animation';\nimport type { MarkAnimationSpec, ICartesianGroupAnimationParams } from './interface';\nimport { Factory } from '../core/factory';\nimport {\n View,\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation,\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n} from '@visactor/vgrammar-core';\nimport { Direction } from '../typings/space';\n\nexport const DEFAULT_ANIMATION_CONFIG = {\n appear: {\n duration: 1000,\n easing: 'cubicOut'\n },\n update: {\n type: 'update',\n duration: 300,\n easing: 'linear'\n },\n enter: {\n duration: 300,\n easing: 'linear'\n },\n exit: {\n duration: 300,\n easing: 'linear'\n },\n disappear: {\n duration: 500,\n easing: 'cubicIn'\n },\n state: {\n duration: 300,\n easing: 'linear'\n }\n};\n\nexport const ScaleInOutAnimation = {\n appear: { type: 'scaleIn' },\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: { type: 'scaleOut' }\n};\n\nexport const FadeInOutAnimation = {\n appear: { type: 'fadeIn' },\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n};\n\nexport const registerScaleInOutAnimation = () => {\n Factory.registerAnimation('scaleInOut', () => ScaleInOutAnimation);\n};\n\nexport const registerFadeInOutAnimation = () => {\n Factory.registerAnimation('fadeInOut', () => FadeInOutAnimation);\n};\n\nexport const registerCartesianGroupClipAnimation = () => {\n Factory.registerAnimation('cartesianGroupClip', (params?: ICartesianGroupAnimationParams) => {\n return {\n appear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'in',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n },\n disappear: {\n custom: ClipDirectionAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n animationType: 'out',\n group: element.getGraphicItem(),\n direction: params.direction(),\n width: params.width(),\n height: params.height(),\n orient: params.orient()\n };\n }\n }\n };\n });\n};\n\nconst lineOrAreaAnimation = (params: ILineAnimationParams, preset: LineAppearPreset) => {\n return {\n appear: linePresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n update: [\n {\n type: 'update',\n options: { excludeChannels: ['points', 'defined', 'segments'] }\n },\n {\n channel: ['points', 'segments'],\n custom: TagPointsUpdate,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing,\n customParameters: {\n clipRangeByDimension: params.direction === Direction.horizontal ? 'y' : 'x'\n }\n }\n ],\n disappear: { type: 'clipOut' }\n } as MarkAnimationSpec;\n};\n\nexport const registerLineAnimation = () => {\n Factory.registerAnimation('line', lineOrAreaAnimation);\n};\n\nexport const registerAreaAnimation = () => {\n Factory.registerAnimation('area', lineOrAreaAnimation);\n};\n\nexport const registerVGrammarCommonAnimation = () => {\n View.useRegisters([\n registerScaleInAnimation,\n registerScaleOutAnimation,\n registerFadeInAnimation,\n registerFadeOutAnimation,\n registerMoveInAnimation,\n registerMoveOutAnimation,\n registerRotateInAnimation,\n registerRotateOutAnimation,\n registerUpdateAnimation\n ]);\n};\n\nexport const registerVGrammarRectAnimation = () => {\n View.useRegisters([\n registerGrowHeightInAnimation,\n registerGrowHeightOutAnimation,\n registerGrowWidthInAnimation,\n registerGrowWidthOutAnimation,\n registerGrowCenterInAnimation,\n registerGrowCenterOutAnimation\n ]);\n};\n\nexport const registerVGrammarArcAnimation = () => {\n View.useRegisters([\n registerGrowRadiusInAnimation,\n registerGrowRadiusOutAnimation,\n registerGrowAngleInAnimation,\n registerGrowAngleOutAnimation\n ]);\n};\n\nexport const registerVGrammarLineOrAreaAnimation = () => {\n View.useRegisters([\n registerGrowPointsInAnimation,\n registerGrowPointsOutAnimation,\n registerGrowPointsXInAnimation,\n registerGrowPointsXOutAnimation,\n registerGrowPointsYInAnimation,\n registerGrowPointsYOutAnimation,\n registerClipInAnimation,\n registerClipOutAnimation\n ]);\n};\n\nexport const registerVGrammarPolygonAnimation = () => {\n View.useRegisters([registerGrowPointsInAnimation, registerGrowPointsOutAnimation]);\n};\n","import type { IAnimationConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IElement, IAnimationTypeConfig, IAnimationTimeline } from '@visactor/vgrammar-core';\nimport type { MarkAnimationSpec, IAnimationState } from './interface';\nimport type { IStateAnimateSpec, IAnimationSpec } from './spec';\nimport { isFunction, isValidNumber } from '../util/type';\nimport { DEFAULT_DATA_INDEX } from '../constant/data';\nimport { DEFAULT_ANIMATION_CONFIG } from './config';\nimport { cloneDeep, isArray, isObject, isValid } from '@visactor/vutils';\nimport type { SeriesMarkNameEnum } from '../series/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../series';\nimport type { ISeriesSpec } from '../typings';\nimport type { IModelMarkAttributeContext } from '../compile/mark';\n\nexport const AnimationStates = [...Object.keys(DEFAULT_ANIMATION_CONFIG), 'normal'];\n\nexport function animationConfig(\n defaultConfig: MarkAnimationSpec = {},\n userConfig?: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n >,\n params?: {\n dataIndex: (datum: any, params: any) => number;\n dataCount: () => number;\n }\n) {\n const config = {} as MarkAnimationSpec;\n for (let i = 0; i < AnimationStates.length; i++) {\n const state = AnimationStates[i];\n const userStateConfig = userConfig ? userConfig[state] : undefined;\n\n if (userStateConfig === false) {\n continue;\n }\n\n if (state === 'normal') {\n userStateConfig && (config.normal = userStateConfig as IAnimationTypeConfig);\n continue;\n } else if (state === 'state') {\n if (userStateConfig !== false) {\n config.state = (userStateConfig ?? DEFAULT_ANIMATION_CONFIG.state) as any;\n }\n continue;\n }\n\n if (state !== 'update' && !userStateConfig && !defaultConfig[state]) {\n // no user config and default config\n continue;\n }\n\n // 开始处理默认动画逻辑\n let defaultStateConfig: IAnimationConfig[];\n if (isArray(defaultConfig[state])) {\n defaultStateConfig = defaultConfig[state] as IAnimationConfig[];\n } else {\n defaultStateConfig = [{ ...DEFAULT_ANIMATION_CONFIG[state], ...defaultConfig[state] } as any];\n }\n // FIXME: 用来控制当动画状态发生变更时是否清除正在执行的动画。\n // 现在 vrender 对于同一个视觉通道的 tween 不会做覆盖的处理。若不做动画清空同时 exit 动画比 update 动画时间长的情况下,效果会不正确\n if (state === 'exit') {\n defaultStateConfig.forEach(exitConfig => {\n exitConfig.controlOptions = { stopWhenStateChange: true };\n });\n }\n\n if (!userStateConfig) {\n config[state] = defaultStateConfig;\n continue;\n }\n\n // 开始处理用户配置的动画逻辑\n let stateConfig: IAnimationConfig[];\n if (isArray(userStateConfig)) {\n stateConfig = userStateConfig.map((userConfig, i) => {\n let singleConfig: IAnimationConfig = userConfig;\n // not merge default config when user animation config is array\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n } else {\n stateConfig = defaultStateConfig.map((stateConfig, i) => {\n let singleConfig: IAnimationConfig = mergeSpec({}, defaultStateConfig[i], userStateConfig) as IAnimationConfig;\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as IAnimationTypeConfig).type;\n }\n\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n }\n\n config[state] = stateConfig;\n }\n return config;\n}\n\nexport function userAnimationConfig(\n markName: SeriesMarkNameEnum | string,\n spec: IAnimationSpec,\n ctx: IModelMarkAttributeContext\n) {\n const userConfig: Partial<\n Record | IAnimationConfig | IAnimationConfig[]>\n > = {};\n\n if (isValid(spec.animationAppear)) {\n userConfig.appear = spec.animationAppear[markName] ?? spec.animationAppear;\n }\n if (isValid(spec.animationDisappear)) {\n userConfig.disappear = spec.animationDisappear[markName] ?? spec.animationDisappear;\n }\n if (isValid(spec.animationEnter)) {\n userConfig.enter = spec.animationEnter[markName] ?? spec.animationEnter;\n }\n if (isValid(spec.animationExit)) {\n userConfig.exit = spec.animationExit[markName] ?? spec.animationExit;\n }\n if (isValid(spec.animationUpdate)) {\n userConfig.update = spec.animationUpdate[markName] ?? spec.animationUpdate;\n }\n if (isValid(spec.animationState)) {\n userConfig.state = spec.animationState[markName] ?? spec.animationState;\n }\n if (spec.animationNormal && spec.animationNormal[markName]) {\n userConfig.normal = spec.animationNormal[markName];\n }\n\n return uniformAnimationConfig(userConfig, ctx);\n}\n\n/**\n * oneByOne\n */\nfunction produceOneByOne(\n stateConfig: IAnimationTypeConfig,\n dataIndex: (datum: any, params: any) => number,\n dataCount?: () => number\n) {\n const { oneByOne, duration, delay, delayAfter } = stateConfig;\n stateConfig.delay = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelay = isFunction(delay) ? delay(datum, element, params) : isValidNumber(delay) ? delay : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelay;\n }\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelay + index * (durationTime + oneByOneTime);\n };\n stateConfig.delayAfter = (datum: any, element: IElement, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration)\n ? duration(datum, element, params)\n : isValidNumber(duration)\n ? duration\n : 0;\n const userDelayAfter = isFunction(delayAfter)\n ? delayAfter(datum, element, params)\n : isValidNumber(delayAfter)\n ? delayAfter\n : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, element, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelayAfter;\n }\n const indexCount = dataCount ? dataCount() : element.mark.elements.length;\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelayAfter + (indexCount - index) * (durationTime + oneByOneTime);\n };\n delete stateConfig.oneByOne;\n return stateConfig;\n}\n\nfunction defaultDataIndex(datum: any, params: any) {\n return datum?.[DEFAULT_DATA_INDEX] ?? params?.VGRAMMAR_ANIMATION_PARAMETERS?.elementIndex;\n}\n\nexport function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec, markName: string) {\n if (spec.animation === false) {\n return false;\n }\n\n if (spec.morph?.enable === false) {\n return false;\n }\n\n const appearAnimationEnabled = (spec.animationAppear?.[markName] ?? spec.animationAppear) !== false;\n const updateAnimationEnabled = (spec.animationUpdate?.[markName] ?? spec.animationUpdate) !== false;\n\n if (!appearAnimationEnabled || !updateAnimationEnabled) {\n return false;\n }\n\n return true;\n}\n\nexport function isTimeLineAnimation(animationConfig: IAnimationConfig) {\n return isValid((animationConfig as IAnimationTimeline).timeSlices);\n}\n\nexport function isChannelAnimation(animationConfig: IAnimationConfig) {\n return !isTimeLineAnimation(animationConfig) && isValid((animationConfig as IAnimationTypeConfig).channel);\n}\n\nexport function uniformAnimationConfig(\n config: Partial | IAnimationConfig | IAnimationConfig[]>>,\n ctx: IModelMarkAttributeContext\n) {\n if (!config) {\n return config;\n }\n const excludeKeys = ['custom', 'customParameters'];\n config = cloneDeep(config, null, excludeKeys);\n traverseSpec(\n config,\n (node: any) => {\n // 将函数转换为 vchart 代理的函数\n // 这里可能会传自定义动画的构造函数,不能被代理\n if (isFunction(node) && node.prototype?.constructor !== node) {\n const name = (...args: any) => {\n return node(...args, ctx);\n };\n return name;\n }\n return node;\n },\n excludeKeys\n );\n\n return config;\n}\n\nfunction traverseSpec(spec: any, transform: (node: any, key: string | number) => any, excludeKeys: string[] = []) {\n if (isArray(spec)) {\n spec.forEach((i: any, index: number) => {\n spec[index] = transform(spec[index], index);\n traverseSpec(spec[index], transform, excludeKeys);\n });\n } else if (isObject(spec)) {\n for (const key in spec) {\n if (!excludeKeys.includes(key)) {\n spec[key] = transform(spec[key], key);\n traverseSpec(spec[key], transform, excludeKeys);\n }\n }\n }\n}\n\nexport function isAnimationEnabledForSeries(series: ISeries) {\n const seriesSpec = series.getSpec();\n\n if (seriesSpec.animation === false) {\n return false;\n }\n\n if (!isValid(series.getRegion().animate)) {\n return false;\n }\n\n let animationThreshold = seriesSpec.animationThreshold ?? Number.MAX_SAFE_INTEGER;\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n series.getMarks()?.forEach(m => {\n const config = m.getMarkConfig();\n if (config) {\n if (config.large && config.largeThreshold) {\n animationThreshold = Math.min(animationThreshold, config.largeThreshold);\n }\n if (config.progressiveThreshold) {\n animationThreshold = Math.min(animationThreshold, config.progressiveThreshold);\n }\n }\n });\n // auto close animation\n if (series.getRawData()?.latestData?.length >= animationThreshold) {\n return false;\n }\n\n return true;\n}\n","import { isBoolean, isFunction, isNil, isObject } from '@visactor/vutils';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport type { ILabelSpec, TransformedLabelSpec } from '../../component/label';\nimport { BaseModelSpecTransformer } from '../../model/base-model-transformer';\nimport type { ISeriesSpec } from '../../typings';\nimport { array, get, isArray, isValid, transformSeriesThemeToMerge } from '../../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeriesSpecTransformerResult, SeriesMarkNameEnum } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../interface';\nimport { getDirectionFromSeriesSpec } from '../util/spec';\nimport { Factory } from '../../core/factory';\n\nexport class BaseSeriesSpecTransformer extends BaseModelSpecTransformer {\n markLabelSpec: Partial> = {};\n stack: boolean;\n protected _supportStack: boolean;\n\n getLabelSpec(markName: string) {\n return this.markLabelSpec[markName];\n }\n\n setLabelSpec(markName: string, label: TransformedLabelSpec | TransformedLabelSpec[]) {\n this.markLabelSpec[markName] = array(label);\n }\n\n addLabelSpec(markName: string, label: TransformedLabelSpec, head = false) {\n if (!this.markLabelSpec[markName]) {\n this.markLabelSpec[markName] = [];\n }\n if (head) {\n // 排序靠前的 label 优先布局,尽可能避免碰撞隐藏\n this.markLabelSpec[markName].unshift(label);\n } else {\n this.markLabelSpec[markName].push(label);\n }\n }\n\n getTheme(spec: T, chartSpec: any): K {\n const direction = getDirectionFromSeriesSpec(spec);\n const chartTheme = this._option?.getTheme();\n const { markByName, mark } = chartTheme;\n const type = this._option.type;\n // 基本主题\n const seriesMarkMap = Factory.getSeriesMarkMap(type);\n\n const theme = seriesMarkMap\n ? transformSeriesThemeToMerge(get(chartTheme, `series.${type}`), type, mark, markByName)\n : {};\n // 区分方向的主题\n const themeWithDirection = get(chartTheme, `series.${type}_${direction}`);\n // stack 状态下的主题\n const stack = this.stack ?? themeWithDirection?.stack ?? theme?.stack;\n const themeWithStack = stack ? get(chartTheme, `series.${type}_stack`) : undefined;\n return mergeSpec({}, theme, themeWithDirection, themeWithStack);\n }\n\n /** 不建议重写该方法,最好重写对应子步骤 */\n transformSpec(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo): ISeriesSpecTransformerResult {\n this._transformStack(spec);\n const result = super.transformSpec(spec, chartSpec, chartSpecInfo);\n this._transformLabelSpec(result.spec);\n return {\n ...result,\n markLabelSpec: this.markLabelSpec,\n stack: this.stack\n };\n }\n\n protected _transformLabelSpec(spec: T) {\n // empty\n }\n\n protected _transformStack(spec: T) {\n if (isBoolean(spec.stack)) {\n this.stack = spec.stack;\n }\n if (isBoolean(spec.percent)) {\n this.stack = spec.percent || this.stack; // this.stack is `true` in bar/area series\n }\n\n if (isNil(this.stack) && this._supportStack && spec.seriesField) {\n // only set default value of stack to be `true` when series support stack and seriesField is not null\n this.stack = true;\n }\n }\n\n protected _addMarkLabelSpec(\n spec: T,\n markName: SeriesMarkNameEnum | ((spec: ILabelSpec) => SeriesMarkNameEnum),\n labelSpecKey: keyof T = 'label' as any,\n styleHandlerName: keyof V = 'initLabelMarkStyle',\n hasAnimation: boolean = true,\n head?: boolean\n ): void {\n if (!spec) {\n return;\n }\n const labels = array(spec[labelSpecKey]);\n labels.forEach(labelSpec => {\n if (labelSpec && labelSpec.visible) {\n // animation config priority: option.animation > spec.animation > spec.label.animation\n const {\n animation = true,\n animationUpdate: labelAnimationUpdate = true,\n animationEnter: labelAnimationEnter = true,\n animationExit: labelAnimationExit = true\n } = labelSpec;\n const { animationUpdate = true, animationEnter = true, animationExit = true } = spec as any;\n const animationEnabled = this._option?.animation ?? spec.animation ?? labelSpec.animation;\n const labelAnimationEnabled = !!animationEnabled && !!hasAnimation;\n\n this.addLabelSpec(\n isFunction(markName) ? markName(labelSpec) : markName,\n {\n ...labelSpec,\n animation: labelAnimationEnabled ? animation : false,\n animationUpdate: labelAnimationEnabled && animationUpdate && labelAnimationUpdate ? animationUpdate : false,\n animationEnter: labelAnimationEnabled && animationEnter && labelAnimationEnter ? animationEnter : false,\n animationExit: labelAnimationEnabled && animationEnter && labelAnimationExit ? animationExit : false,\n getStyleHandler: (series: V) => (series[styleHandlerName] as any)?.bind(series)\n } as TransformedLabelSpec,\n head\n );\n }\n });\n }\n\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = (super._getDefaultSpecFromChart(chartSpec) as any) ?? {};\n const { outerRadius, innerRadius, direction } = chartSpec;\n if (isValid(outerRadius)) {\n spec.outerRadius = outerRadius;\n }\n if (isValid(innerRadius)) {\n spec.innerRadius = innerRadius;\n }\n\n if (isValid(direction)) {\n spec.direction = direction;\n }\n\n return Object.keys(spec).length > 0 ? spec : undefined;\n }\n\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n // this._originalSpec + specFromChart + this._theme = spec\n const merge = (originalSpec: any) => {\n const result = mergeSpec({}, theme, specFromChart, originalSpec);\n const labelTheme = (theme as any).label;\n if (labelTheme && isObject(labelTheme) && isArray(result.label)) {\n result.label = result.label.map((label: ILabelSpec) => mergeSpec({}, labelTheme, label));\n }\n return result;\n };\n\n if (isArray(spec)) {\n return {\n spec: spec.map(specItem => merge(specItem)) as unknown as T,\n theme\n };\n }\n\n return {\n spec: merge(spec),\n theme\n };\n }\n return { spec, theme };\n }\n}\n","import type { RenderMode } from '../typings/spec/common';\nimport { RenderModeEnum } from '../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../util';\n\nexport function getDefaultInteractionConfigByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n hover: {\n enable: true,\n trigger: 'pointermove',\n triggerOff: 'view:pointerleave'\n },\n select: {\n enable: true,\n trigger: 'pointertap'\n }\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n hover: {\n enable: true,\n trigger: ['pointerdown', 'pointermove'],\n triggerOff: 'view:pointerleave'\n },\n select: {\n enable: true,\n trigger: 'tap'\n }\n };\n }\n\n return null;\n}\n","import { ChartEvent } from '../../constant/event';\nimport {\n DEFAULT_DATA_KEY,\n DEFAULT_DATA_SERIES_FIELD,\n DEFAULT_SERIES_STYLE_NAME,\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { PREFIX } from '../../constant/base';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet, ITransformOptions } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport type { ICompileMarkConfig, IGroupMark, IMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type {\n CoordinateType,\n IInvalidType,\n IPoint,\n DataKeyType,\n Datum,\n Maybe,\n ISeriesSpec,\n IExtensionMarkSpec,\n IExtensionGroupMarkSpec,\n EnableMarkType,\n IGroup,\n ILayoutType,\n ILayoutPoint,\n ILayoutRect\n} from '../../typings';\nimport { BaseModel } from '../../model/base-model';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ISeriesOption,\n ISeries,\n ISeriesMarkInitOption,\n ISeriesStackData,\n ISeriesTooltipHelper,\n SeriesMarkMap,\n ISeriesMarkInfo,\n ISeriesSpecInfo,\n ISeriesStackDataLeaf,\n ISeriesStackDataNode,\n ISeriesStackDataMeta,\n ISeriesSeriesInfo\n} from '../interface';\nimport { dataToDataView, dataViewFromDataView, updateDataViewInData } from '../../data/initialize';\nimport { mergeFields, getFieldAlias } from '../../util/data';\nimport { couldBeValidNumber } from '../../util/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IModelEvaluateOption, IModelRenderOption, IUpdateSpecResult } from '../../model/interface';\nimport type { AddVChartPropertyContext } from '../../data/transforms/add-property';\n// eslint-disable-next-line no-duplicate-imports\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport type { IBaseInteractionSpec, IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { BaseSeriesTooltipHelper } from './tooltip-helper';\n// eslint-disable-next-line no-duplicate-imports\nimport { dimensionStatistics, dimensionStatisticsOfSimpleData } from '../../data/transforms/dimension-statistics';\nimport { invalidTravel } from '../../data/transforms/invalid-travel';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport { SeriesData } from './series-data';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport type { ISeriesMarkAttributeContext } from '../../compile/mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark';\nimport {\n array,\n isEqual,\n isNil,\n isValid,\n isBoolean,\n isString,\n isFunction,\n isArray,\n isValidNumber,\n isObject,\n minInArray,\n maxInArray,\n merge\n} from '@visactor/vutils';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { baseSeriesMark, defaultSeriesIgnoreCheckKeys, defaultSeriesCompileCheckKeys } from './constant';\nimport { animationConfig, userAnimationConfig, isAnimationEnabledForSeries } from '../../animation/utils';\nimport { BaseSeriesSpecTransformer } from './base-series-transformer';\nimport type { EventType, IMarkConfig } from '@visactor/vgrammar-core';\nimport { getDefaultInteractionConfigByMode } from '../../interaction/config';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { ILabelSpec } from '../../component/label/interface';\nimport type { StatisticOperations } from '../../data/transforms/interface';\nimport { is3DMark } from '../../mark/utils';\n\nexport abstract class BaseSeries extends BaseModel implements ISeries {\n readonly specKey: string = 'series';\n readonly type: string = 'series';\n layoutType: ILayoutType = 'absolute';\n readonly modelType: string = 'series';\n readonly name: string | undefined = undefined;\n\n static readonly mark: SeriesMarkMap = baseSeriesMark;\n static readonly transformerConstructor = BaseSeriesSpecTransformer;\n readonly transformerConstructor = BaseSeriesSpecTransformer as any;\n\n declare getSpecInfo: () => ISeriesSpecInfo;\n\n protected declare _option: ISeriesOption;\n\n // 坐标系信息\n readonly coordinate: CoordinateType = 'none';\n\n // 区域\n protected _region: IRegion = null as unknown as IRegion;\n getRegion(): IRegion {\n return this._region;\n }\n\n private _layoutStartPoint: ILayoutPoint = {\n x: 0,\n y: 0\n };\n\n getLayoutStartPoint(): ILayoutPoint {\n return this._region.getLayoutStartPoint();\n }\n\n private _layoutRect: ILayoutRect = { width: null, height: null };\n\n getLayoutRect: () => ILayoutRect = () => {\n return {\n width: this._layoutRect.width ?? this._region.getLayoutRect().width,\n height: this._layoutRect.height ?? this._region.getLayoutRect().height\n };\n };\n\n /** 系列的根 mark */\n protected _rootMark: IGroupMark = null;\n getRootMark() {\n return this._rootMark;\n }\n\n /** series field 所作用的 mark */\n protected _seriesMark: Maybe = null;\n getSeriesMark() {\n return this._seriesMark;\n }\n\n protected _layoutLevel!: number;\n\n /**\n * data\n * 数据节点\n * rawData 只进行 fields 相关能力,筛选+sort。\n * rawDataStatistics 的统计值是fields筛选后的。是符合预期的。\n * viewDatFilter 节点用来做组件等图表逻辑的数据筛选\n * viewData上不允许挂 filter\n * 数据更新流程一:重新做数据变换\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程二:图表逻辑更新,进行数据筛选\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n * 数据更新流程三:用户更新数据\n * rawData().parse().rawDataStatistics()=>\n * viewDatFilter.reRunAllTransform() => region.waitAllSeriesFilterOver()=>\n * viewData.reRunAllTransform()=>viewDataStatistics();\n *\n * NEED-OPTIMIZATION:\n * 一:额外增加了 filter 节点,流程断开为2部分。只是因为堆积需要,因为 filter 和数据变换可以用排序解决。\n * 二:running tag 没有找到好办法消除。只是增加了一个易用 api 到 dataView 上\n */\n protected _rawData!: DataView;\n getRawData() {\n return this._rawData;\n }\n\n protected _rawDataStatistics?: DataView;\n protected _rawStatisticsCache: Record;\n\n protected _viewDataMap: Map = new Map();\n\n // only add viewDataFilter when this._stack is true\n protected _viewDataFilter: DataView = null;\n\n getViewDataFilter() {\n return this._viewDataFilter;\n }\n\n // view data\n protected _data: SeriesData = null;\n getViewData() {\n return this._data?.getDataView();\n }\n getViewDataProductId() {\n return this._data?.getProductId();\n }\n\n protected _viewDataStatistics!: DataView;\n getViewDataStatistics() {\n return this._viewDataStatistics;\n }\n protected _viewStackData!: DataView;\n getViewStackData() {\n return this._viewStackData;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n }\n }\n\n protected _groups?: IGroup;\n getGroups() {\n return this._groups;\n }\n\n getStack() {\n return this.getSpecInfo()?.stack;\n }\n\n getStackValue() {\n return this._spec.stackValue ?? `${PREFIX}_series_${this.type}`;\n }\n getPercent() {\n return this._spec.percent;\n }\n getStackOffsetSilhouette() {\n return this._spec.stackOffsetSilhouette;\n }\n protected _dataSet: DataSet;\n\n protected declare _tooltipHelper: ISeriesTooltipHelper | undefined;\n get tooltipHelper() {\n if (!this._tooltipHelper) {\n this.initTooltip();\n }\n\n return this._tooltipHelper;\n }\n\n layoutZIndex: number = LayoutZIndex.SeriesGroup;\n\n protected _invalidType: IInvalidType = 'break';\n getInvalidType() {\n return this._invalidType;\n }\n setInvalidType(t: IInvalidType) {\n this._invalidType = t;\n this.getViewData()?.reRunAllTransform();\n }\n\n protected _markAttributeContext: ISeriesMarkAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n constructor(spec: T, options: ISeriesOption) {\n super(spec, options);\n this._region = options.region;\n this._dataSet = options.dataSet;\n this._spec?.name && (this.name = this._spec.name);\n }\n\n created(): void {\n super.created();\n this._buildMarkAttributeContext();\n // data\n this.initData();\n this.initGroups();\n // 调整统计数据的创建时机,需要等待group创建完成\n this.initStatisticalData();\n this.event.emit(ChartEvent.afterInitData, { model: this });\n // mark\n this.initRootMark();\n this.initMark();\n const hasAnimation = isAnimationEnabledForSeries(this);\n\n this._initExtensionMark({ hasAnimation });\n\n this.initMarkStyle();\n this.initMarkState();\n if (hasAnimation) {\n this.initAnimation();\n }\n\n if (!this._option.disableTriggerEvent) {\n this.initInteraction();\n }\n this.afterInitMark();\n\n // event\n this.initEvent();\n this.event.emit(ChartEvent.afterInitEvent, { model: this });\n }\n\n protected _buildMarkAttributeContext() {\n this._markAttributeContext = {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n },\n seriesColor: (seriesValue: string | number) => {\n if (isNil(seriesValue)) {\n seriesValue = this.getSeriesKeys()[0];\n }\n return this._option.globalScale.getScale('color')?.scale(seriesValue);\n },\n getRegion: () => this._region\n };\n }\n\n /** 预处理spec信息 */\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setSeriesField(this._spec.seriesField);\n if (isValid(this._spec.invalidType)) {\n this._invalidType = this._spec.invalidType;\n }\n }\n\n protected getInvalidCheckFields() {\n return [this.getStackValueField()];\n }\n\n protected initInvalidDataTransform(): void {\n // _invalidType 默认为 break/ignore,直接走图形层面的解析,不需要走 transform 数据处理逻辑\n if (this._invalidType === 'zero' && this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'invalidTravel', invalidTravel);\n // make sure each series only transform once\n this._rawData?.transform(\n {\n type: 'invalidTravel',\n options: {\n config: () => {\n return {\n invalidType: this._invalidType,\n checkField: this.getInvalidCheckFields()\n };\n }\n }\n },\n false\n );\n }\n }\n\n /** data */\n protected initData(): void {\n const d = this._spec.data ?? this._option.getSeriesData(this._spec.dataId, this._spec.dataIndex);\n if (d) {\n this._rawData = dataToDataView(d, this._dataSet, this._option.sourceDataList);\n }\n this._rawData?.target?.addListener('change', this.rawDataUpdate.bind(this));\n this._addDataIndexAndKey();\n // 初始化viewData\n if (this._rawData) {\n if (this.getStack()) {\n // 初始化viewDataFilter\n this._viewDataFilter = dataViewFromDataView(this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewDataFilter`\n });\n }\n\n // 初始化viewData\n const viewData = dataViewFromDataView(this.getStack() ? this._viewDataFilter : this._rawData, this._dataSet, {\n name: `${this.type}_${this.id}_viewData`\n });\n this._data = new SeriesData(this._option, viewData);\n\n if (this.getStack()) {\n this._viewDataFilter.target.removeListener('change', viewData.reRunAllTransform);\n }\n }\n\n this.initInvalidDataTransform();\n }\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = { fields: groupFields };\n // this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n protected initStatisticalData(): void {\n if (this._data) {\n this._statisticViewData();\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (\n !this._rawStatisticsCache[field] ||\n // 如果数值类型与当前的计算结果类型不一致的话,也需要把结果更新到cache中\n // 具体场景: field同时在axis中作为离散字段,在图例中作为连续字段,此时min、max、values都应该被计算并更新在cache中\n (isNumeric && (isNil(this._rawStatisticsCache[field].min) || isNil(this._rawStatisticsCache[field].max))) ||\n (!isNumeric && isNil(this._rawStatisticsCache[field].values))\n ) {\n const canUseViewStatistics =\n this._viewDataStatistics &&\n (!this._viewDataFilter || this._viewDataFilter.transformsArr.length <= 1) &&\n this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n // 如果有设置统计信息,应当与设置值保持一致\n const fieldInfo = this._rawData.getFields()?.[field];\n if (fieldInfo && fieldInfo.lockStatisticsByDomain && fieldInfo.domain) {\n this._rawStatisticsCache[field] = {};\n if (isNumeric) {\n this._rawStatisticsCache[field].min = minInArray(fieldInfo.domain);\n this._rawStatisticsCache[field].max = maxInArray(fieldInfo.domain);\n } else {\n this._rawStatisticsCache[field].values = fieldInfo.domain;\n }\n } else {\n const result = (\n dimensionStatisticsOfSimpleData(this._rawData.latestData as Datum[], [\n { key: field, operations: isNumeric ? ['min', 'max'] : ['values'] }\n ]) as any\n )[field];\n this._rawStatisticsCache[field] = merge(this._rawStatisticsCache[field] ?? {}, result);\n }\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n protected _statisticViewData() {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const viewDataStatisticsName = `${this.type}_${this.id}_viewDataStatic`;\n this._viewDataStatistics = new DataView(this._dataSet, { name: viewDataStatisticsName });\n this._viewDataStatistics.parse([this._data.getDataView()], {\n type: 'dataview'\n });\n this._viewDataStatistics.transform(\n {\n type: 'dimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n\n this._data.getDataView().target.removeListener('change', this._viewDataStatistics.reRunAllTransform);\n if (this.getStack()) {\n this.createdStackData();\n }\n }\n\n protected createStatisticalData(\n dataName: string,\n rawData: DataView,\n staticFields?: (dataId: string) => {\n key: string;\n operations: StatisticOperations;\n }[]\n ) {\n registerDataSetInstanceTransform(this._dataSet, 'dimensionStatistics', dimensionStatistics);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse([rawData], {\n type: 'dataview'\n });\n // data.name = dataName;\n data.transform(\n {\n type: 'dimensionStatistics',\n options: {\n operations: ['max', 'min', 'values'],\n fields: () => {\n const fields = mergeFields(this.getStatisticFields(), staticFields?.(rawData.name as string) ?? []);\n if (this._seriesField) {\n mergeFields(fields, [\n {\n key: this._seriesField,\n operations: ['values']\n }\n ]);\n }\n\n return fields;\n },\n target: 'latest'\n }\n },\n false\n );\n return data;\n }\n\n // stack\n private createdStackData(): void {\n const dataName = `${this.type}_${this.id}_viewStackData`;\n this._viewStackData = new DataView(this._dataSet, { name: dataName });\n this._viewStackData.parse([this._viewDataFilter], {\n type: 'dataview'\n });\n this._viewStackData.transform(\n {\n type: 'stackSplit',\n options: {\n fields: this.getStackGroupFields()\n }\n },\n false\n );\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return index;\n }\n\n protected generateDefaultDataKey(dataKey: DataKeyType) {\n if (isNil(dataKey)) {\n return (datum: Datum, index: number, context: AddVChartPropertyContext) => {\n // check if need animation data key\n if (this._spec.animation === false) {\n const v = this._noAnimationDataKey(datum, index);\n if (v !== undefined) {\n return v;\n }\n }\n const { keyMap } = context;\n const seriesDataKey = this._getSeriesDataKey(datum);\n if (keyMap.get(seriesDataKey) === undefined) {\n keyMap.set(seriesDataKey, 0);\n\n return seriesDataKey;\n }\n\n keyMap.set(seriesDataKey, keyMap.get(seriesDataKey) + 1);\n return `${seriesDataKey}_${keyMap.get(seriesDataKey)}`;\n };\n }\n\n if (isString(dataKey)) {\n return (datum: Datum) => datum[dataKey];\n }\n\n if (isArray(dataKey) && dataKey.every(d => isString(d))) {\n return (datum: Datum) => dataKey.map(k => datum[k]).join('-');\n }\n\n if (isFunction(dataKey)) {\n return (datum: Datum, index: number) => dataKey(datum, index);\n }\n\n this._option?.onError(`invalid dataKey: ${dataKey}`);\n return (datum: Datum, index: number) => undefined as string;\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n }\n }\n\n updateRawData(d: any): void {\n if (!this._rawData) {\n return;\n }\n this._rawData.updateRawData(d);\n }\n rawDataUpdate(d: DataView): void {\n this._rawDataStatistics?.reRunAllTransform();\n this._rawStatisticsCache = null;\n this.event.emit(ChartEvent.rawDataUpdate, { model: this });\n }\n viewDataFilterOver(d: DataView): void {\n this.event.emit(ChartEvent.viewDataFilterOver, { model: this });\n }\n viewDataUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataUpdate, { model: this });\n // 依据数据更新设置渲染结果\n // 初始化时会触发 viewDataUpdate,但是此时 srView 还未生成,因此实际上不会产生多余的 updateData 调用\n this._data?.updateData();\n this._viewDataStatistics && this._viewDataStatistics.reRunAllTransform();\n }\n viewDataStatisticsUpdate(d: DataView): void {\n this.event.emit(ChartEvent.viewDataStatisticsUpdate, { model: this });\n }\n\n // 数据到位置值\n getDatumPositionValue(datum: Datum, field: string) {\n if (!datum || isNil(field)) {\n return null;\n }\n return datum[field];\n }\n getDatumPositionValues(datum: Datum, fields: string | string[]) {\n if (!datum || isNil(fields)) {\n return [];\n }\n\n if (isString(fields)) {\n return [datum[fields]];\n }\n return fields.map(f => datum[f]);\n }\n /** mark end */\n\n /** 获取参与统计的字段与统计类型 */\n abstract getStatisticFields(): {\n key: string;\n operations: StatisticOperations;\n }[];\n /** 获取分组字段 */\n abstract getGroupFields(): string[];\n /** 数据到坐标点的映射 */\n abstract dataToPosition(data: Datum, checkInViewData?: boolean): IPoint;\n /** 数据到 x 坐标点的映射 */\n abstract dataToPositionX(data: Datum): number;\n /** 数据到 y 坐标点的映射 */\n abstract dataToPositionY(data: Datum): number;\n /** 数据到坐标点的映射 */\n abstract valueToPosition(value1: any, value2?: any): IPoint;\n abstract initMark(): void;\n abstract initMarkStyle(): void;\n\n /** stack start */\n abstract getStackGroupFields(): string[];\n abstract getStackValueField(): string | undefined;\n setValueFieldToStack() {\n // do nothing\n }\n setValueFieldToPercent() {\n // do nothing;\n }\n setValueFieldToStackOffsetSilhouette() {\n // do nothing\n }\n\n /** 获取系列中可以被操作的mark(brush需要通过在图元spec中内置state的方式实现框选样式,所以需要获取可被框选的mark) */\n abstract getActiveMarks(): IMark[];\n\n initRootMark() {\n this._rootMark = this._createMark(\n { type: MarkTypeEnum.group, name: `seriesGroup_${this.type}_${this.id}` },\n {\n parent: this._region.getGroupMark?.(),\n dataView: false\n }\n ) as IGroupMark;\n this._rootMark.setMarkConfig({ zIndex: this._spec.zIndex ?? this.layoutZIndex });\n }\n\n private _getExtensionMarkNamePrefix() {\n return `${this.type}_${this.id}_extensionMark`;\n }\n\n protected _initExtensionMark(options: { hasAnimation: boolean; depend?: IMark[] }) {\n if (!this._spec.extensionMark) {\n return;\n }\n const mainMarks = this.getMarksWithoutRoot();\n\n options.depend = mainMarks;\n\n this._spec.extensionMark?.forEach((m, i) => {\n this._createExtensionMark(m, null, this._getExtensionMarkNamePrefix(), i, options);\n });\n }\n\n private _createExtensionMark(\n spec: IExtensionMarkSpec> | IExtensionGroupMarkSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number,\n options: { hasAnimation: boolean; depend?: IMark[] }\n ) {\n const mark = this._createMark(\n { type: spec.type, name: isValid(spec.name) ? `${spec.name}` : `${namePrefix}_${index}` },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n markSpec: spec,\n parent: parentMark,\n dataView: false,\n componentType: spec.componentType,\n depend: options.depend,\n key: spec.dataKey\n },\n {\n setCustomizedShape: spec?.customShape\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n\n if (isValid(spec.id)) {\n mark.setUserId(spec.id);\n }\n\n if (options.hasAnimation) {\n // 自定义图元默认不添加动画\n const config = animationConfig({}, userAnimationConfig(spec.type, spec as any, this._markAttributeContext));\n mark.setAnimationConfig(config);\n }\n\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i, options);\n });\n } else if (!parentMark && (!isNil(spec.dataId) || !isNil(spec.dataIndex))) {\n const dataView = this._option.getSeriesData(spec.dataId, spec.dataIndex);\n if (dataView === this._rawData) {\n mark.setDataView(this.getViewData(), this.getViewDataProductId());\n } else {\n mark.setDataView(dataView);\n\n dataView.target.addListener('change', () => {\n mark.getData().updateData();\n });\n }\n }\n }\n\n protected _updateExtensionMarkSpec() {\n this._spec.extensionMark?.forEach((spec, i) => {\n const mark = this._marks.getMarkWithInfo({\n name: isValid(spec.name) ? `${spec.name}` : `${this._getExtensionMarkNamePrefix()}_${i}`\n });\n if (!mark) {\n return;\n }\n this.initMarkStyleWithSpec(mark, spec);\n mark.updateStaticEncode();\n mark.updateLayoutState();\n });\n }\n\n getStackData(): ISeriesStackData {\n return this._viewStackData?.latestData;\n }\n /** stack end */\n\n /** mark */\n\n protected _parseSelectorOfInteraction(interactionSpec: IBaseInteractionSpec, marks: IMark[]) {\n if (!marks || !marks.length) {\n return [];\n }\n const selector: string[] = [];\n\n if (interactionSpec.markIds) {\n marks.filter(mark => {\n if (interactionSpec.markIds.includes(mark.getProductId())) {\n selector.push(`#${mark.getProductId()}`);\n }\n });\n } else if (interactionSpec.markNames) {\n marks.forEach(mark => {\n if (interactionSpec.markNames.includes(mark.name)) {\n selector.push(`#${mark.getProductId()}`);\n }\n });\n } else {\n marks.forEach(mark => {\n selector.push(`#${mark.getProductId()}`);\n });\n }\n\n return selector;\n }\n\n protected _parseDefaultInteractionConfig(mainMarks?: IMark[]) {\n if (!mainMarks?.length) {\n return [];\n }\n\n const defaultConfig = getDefaultInteractionConfigByMode(this._option.mode);\n let finalHoverSpec = { ...defaultConfig?.hover };\n let finalSelectSpec: ISelectSpec = { ...defaultConfig?.select };\n\n const hoverSpec = this._spec.hover;\n if (isBoolean(hoverSpec)) {\n finalHoverSpec.enable = hoverSpec as boolean;\n } else if (isObject(hoverSpec)) {\n finalHoverSpec.enable = true;\n finalHoverSpec = mergeSpec(finalHoverSpec, hoverSpec);\n }\n\n const selectSpec = this._spec.select;\n if (isBoolean(selectSpec)) {\n finalSelectSpec.enable = selectSpec as boolean;\n } else if (isObject(selectSpec)) {\n finalSelectSpec.enable = true;\n finalSelectSpec = mergeSpec(finalSelectSpec, selectSpec);\n }\n const res = [];\n\n if (finalHoverSpec.enable) {\n const selector: string[] = this._parseSelectorOfInteraction(finalHoverSpec as IBaseInteractionSpec, mainMarks);\n\n selector.length && res.push(this._defaultHoverConfig(selector, finalHoverSpec));\n }\n\n if (finalSelectSpec.enable) {\n const selector: string[] = this._parseSelectorOfInteraction(finalSelectSpec as IBaseInteractionSpec, mainMarks);\n selector.length && res.push(this._defaultSelectConfig(selector, finalSelectSpec));\n }\n return res;\n }\n\n protected _defaultHoverConfig(selector: string[], finalHoverSpec: IHoverSpec) {\n return {\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n type: 'element-highlight',\n trigger: finalHoverSpec.trigger as EventType,\n triggerOff: finalHoverSpec.triggerOff as EventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(selector: string[], finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty']\n : ['empty', finalSelectSpec.trigger];\n return {\n type: 'element-select',\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n trigger: finalSelectSpec.trigger as EventType,\n triggerOff: triggerOff as EventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n protected _parseInteractionConfig(mainMarks?: IMark[]) {\n const compiler = this.getCompiler();\n if (!compiler) {\n return;\n }\n\n const { interactions } = this._spec;\n const res = this._parseDefaultInteractionConfig(mainMarks);\n\n if (res && res.length) {\n res.forEach(interaction => {\n compiler.addInteraction(interaction);\n });\n }\n\n if (interactions && interactions.length) {\n interactions.forEach(interaction => {\n const selectors: string[] = this._parseSelectorOfInteraction(interaction, this.getMarks());\n\n if (selectors.length) {\n compiler.addInteraction({\n ...interaction,\n selector: selectors,\n seriesId: this.id,\n regionId: this._region.id\n });\n }\n });\n }\n }\n\n initInteraction() {\n const marks = this.getMarksWithoutRoot();\n this._parseInteractionConfig(marks);\n }\n\n initAnimation() {\n // do nothing\n }\n\n initMarkState() {\n this.initSeriesStyleState();\n }\n\n /**\n * 初始化initSeriesStyleState所对应的state,配置series-style数组会转化到state实现,每一个seriesItem都对应一个state\n * @returns\n */\n initSeriesStyleState() {\n const seriesStyle = this._spec.seriesStyle;\n if (!seriesStyle || !seriesStyle.length) {\n return;\n }\n const groupBy = this._seriesField ?? DEFAULT_DATA_SERIES_FIELD;\n this.getMarksWithoutRoot().forEach(mark => {\n const filterMap: { [key: string]: true } = {};\n const attrMap: { [key: string]: true } = {};\n const markStyle: { [key: string]: { [key: string]: any } } = {};\n seriesStyle.forEach(item => {\n const style = item[mark.name]?.style;\n if (style) {\n filterMap[item.name] = true;\n markStyle[item.name] = markStyle[item.name] || {};\n Object.keys(style).forEach(key => {\n attrMap[key] = true;\n markStyle[item.name][key] = style[key];\n });\n }\n });\n mark.state.addStateInfo({\n stateValue: DEFAULT_SERIES_STYLE_NAME,\n level: -1,\n filter: (datum: Datum) => {\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return false;\n }\n return filterMap[datum[0][groupBy]] === true;\n }\n return filterMap[datum[groupBy]] === true;\n }\n });\n const style: Record any> = {};\n Object.keys(attrMap).forEach(key => {\n style[key] = (datum: Datum) => {\n let style;\n if (Array.isArray(datum)) {\n if (datum.length === 0) {\n return undefined;\n }\n style = markStyle[datum[0][groupBy]]?.[key];\n }\n style = markStyle[datum[groupBy]]?.[key];\n if (isValid(style)) {\n return style;\n }\n return mark.getAttribute(key as any, datum);\n };\n });\n this.setMarkStyle(mark, style, DEFAULT_SERIES_STYLE_NAME, AttributeLevel.User_SeriesStyle);\n });\n }\n\n afterInitMark(): void {\n this.event.emit(ChartEvent.afterInitMark, { model: this });\n this.setSeriesField(this._spec.seriesField);\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n this.getMarks().forEach(m => {\n if (m.stateStyle?.normal?.lineWidth) {\n m.setAttribute('stroke', this.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n });\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(m => !m.name?.includes('seriesGroup'));\n }\n getMarksInType(type: string | string[]): IMark[] {\n return this._marks.getMarksInType(type);\n }\n getMarkInName(name: string): IMark | undefined {\n return this._marks.get(name);\n }\n getMarkInId(markId: number): IMark | undefined {\n return this.getMarks().find(m => m.id === markId);\n }\n /** mark end */\n\n /** event */\n protected initEvent() {\n this._data?.getDataView()?.target.addListener('change', this.viewDataUpdate.bind(this));\n this._viewDataStatistics?.target.addListener('change', this.viewDataStatisticsUpdate.bind(this));\n }\n\n protected _releaseEvent(): void {\n super._releaseEvent();\n this.getCompiler().removeInteraction(this.id);\n }\n\n /** event end */\n\n /** 初始化tooltip helper */\n protected initTooltip() {\n this._tooltipHelper = new BaseSeriesTooltipHelper(this);\n }\n\n _compareExtensionMarksSpec(\n newMarks: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[],\n prevMarks: (IExtensionMarkSpec> | IExtensionGroupMarkSpec)[],\n compareResult: IUpdateSpecResult\n ) {\n if (\n newMarks.length !== prevMarks.length ||\n prevMarks.some((prev, index) => {\n return (\n prev.type !== newMarks[index].type || prev.id !== newMarks[index].id || prev.name !== newMarks[index].name\n );\n })\n ) {\n compareResult.reMake = true;\n } else if (\n prevMarks.some((prev, index) => {\n return prev.visible !== newMarks[index].visible;\n })\n ) {\n compareResult.reCompile = true;\n }\n }\n\n _compareLabelSpec(newLabels: ILabelSpec[], prevLabels: ILabelSpec[], compareResult: IUpdateSpecResult) {\n if (\n newLabels.length !== prevLabels.length ||\n prevLabels.some((prev, index) => {\n return prev.labelLayout !== newLabels[index].labelLayout || prev.visible !== newLabels[index].visible;\n })\n ) {\n compareResult.reMake = true;\n } else if (\n !compareResult.reCompile &&\n prevLabels.some((prev, index) => {\n return !isEqual(prev, newLabels[index]);\n })\n ) {\n compareResult.reCompile = true;\n }\n }\n\n /** updateSpec */\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: Record) {\n const result = super._compareSpec(spec, prevSpec);\n\n const currentKeys = Object.keys(prevSpec || {}).sort();\n const nextKeys = Object.keys(spec || {}).sort();\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n\n const ignores: Record = {\n ...defaultSeriesIgnoreCheckKeys,\n ...defaultSeriesCompileCheckKeys,\n ...ignoreCheckKeys,\n extensionMark: true,\n label: true,\n totalLabel: true\n };\n\n this._compareExtensionMarksSpec(array((spec as any).extensionMark), array((prevSpec as any).extensionMark), result);\n // 比较label\n !result.reMake && this._compareLabelSpec(array((spec as any).label), array((prevSpec as any).label), result);\n // 比较totalLabel\n !result.reMake &&\n this._compareLabelSpec(array((spec as any).totalLabel), array((prevSpec as any).totalLabel), result);\n\n if (result.reMake) {\n return result;\n }\n\n // mark visible logic in compile\n if (\n !result.reCompile &&\n this._marks.getMarks().some(m => {\n (ignores as { [key: string]: true })[m.name] = true;\n return (prevSpec as any)[m.name]?.visible !== (spec as any)[m.name]?.visible;\n })\n ) {\n result.reCompile = true;\n }\n\n // check default compile keys\n if (\n !result.reCompile &&\n currentKeys.some((k: string) => {\n return defaultSeriesCompileCheckKeys[k] && !isEqual((spec as any)[k], (prevSpec as any)[k]);\n })\n ) {\n result.reCompile = true;\n }\n\n if (\n currentKeys.some((k: string) => {\n return !ignores[k] && !isEqual((spec as any)[k], (prevSpec as any)[k]);\n })\n ) {\n result.reMake = true;\n return result;\n }\n\n return result;\n }\n\n _updateSpecData() {\n if (this._rawData && this._spec.data && !(this._spec.data instanceof DataView)) {\n updateDataViewInData(this._rawData, this._spec.data, true);\n }\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n\n const marks = this.getMarksWithoutRoot();\n // FIXME: 合并 mark spec 的时机是否需要统一调整到 this.initMarkStyle() 中?\n marks.forEach(mark => {\n (this._spec as any)[mark.name] && this.initMarkStyleWithSpec(mark, (this._spec as any)[mark.name]);\n });\n this.initMarkStyle();\n marks.forEach(mark => {\n mark.updateStaticEncode();\n mark.updateLayoutState(true);\n });\n this._updateExtensionMarkSpec();\n this._updateSpecData();\n\n if (this._tooltipHelper) {\n this._tooltipHelper.updateTooltipSpec();\n }\n\n // update animation config\n const hasAnimation = isAnimationEnabledForSeries(this);\n if (hasAnimation) {\n this.initAnimation();\n }\n }\n\n // 首次布局完成后填充系列数据\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n this._data.updateData();\n }\n onRender(ctx: IModelRenderOption): void {\n return;\n }\n release(): void {\n super.release();\n this._viewDataMap.clear();\n // TODO: rawData transform clear;\n // this._dataSet=>// _rawData.tag = vchart\n // clear add transforms of rawData\n const transformIndex = this._rawData?.transformsArr?.findIndex(t => t.type === 'addVChartProperty');\n if (transformIndex >= 0) {\n this._rawData.transformsArr.splice(transformIndex, 1);\n }\n this._data?.release();\n this._dataSet =\n this._data =\n this._rawData =\n this._rawDataStatistics =\n this._spec =\n this._region =\n this._viewDataStatistics =\n this._viewStackData =\n null;\n }\n\n setLayoutStartPosition(pos: Partial): void {\n if (isValidNumber(pos.x)) {\n this._layoutStartPoint.x = pos.x;\n }\n if (isValidNumber(pos.y)) {\n this._layoutStartPoint.y = pos.y;\n }\n }\n\n setLayoutRect({ width, height }: Partial, levelMap?: Partial) {\n if (isValidNumber(width)) {\n this._layoutRect.width = width;\n }\n\n if (isValidNumber(height)) {\n this._layoutRect.height = height;\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return this.getRawDataStatisticsByField(this._seriesField)?.values ?? [];\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n }\n\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n [field]: key\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n\n getSeriesInfoInField(field: string) {\n return this._getSeriesInfo(field, this.getRawDataStatisticsByField(field)?.values ?? []);\n }\n\n getSeriesInfoList() {\n return this._getSeriesInfo(this._seriesField ?? DEFAULT_DATA_SERIES_FIELD, this.getSeriesKeys());\n }\n\n /** seriesField end */\n\n // get default color scale\n // 重复代码太多了,整合一下\n protected _getDefaultColorScale() {\n const colorDomain = this.getDefaultColorDomain();\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n protected _getDataScheme() {\n return getDataScheme(this.getColorScheme(), this.type as any);\n }\n\n /** 获取默认 color scale 的 domain */\n getDefaultColorDomain(): any[] {\n return this._seriesField ? this.getViewDataStatistics()?.latestData[this._seriesField]?.values : [];\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [];\n }\n\n // 用于 axisHelper 更新\n protected onMarkPositionUpdate(): void {\n this.onMarkTreePositionUpdate(this.getMarksWithoutRoot());\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n // do nothing\n }\n\n protected _createMark(\n markInfo: ISeriesMarkInfo,\n option: ISeriesMarkInitOption = {},\n config: ICompileMarkConfig = {}\n ) {\n const {\n key,\n groupKey,\n skipBeforeLayouted,\n themeSpec = {},\n markSpec,\n dataView,\n dataProductId,\n parent,\n isSeriesMark,\n depend,\n stateSort,\n noSeparateStyle = false\n } = option;\n const m = super._createMark(markInfo, {\n key: key ?? this._getDataIdKey(),\n seriesId: this.id,\n attributeContext: this._markAttributeContext,\n componentType: option.componentType,\n noSeparateStyle\n });\n\n if (isValid(m)) {\n const spec = this.getSpec() || ({} as T);\n this._marks.addMark(m, { name: markInfo.name });\n\n if (isSeriesMark) {\n this._seriesMark = m;\n }\n\n if (isNil(parent)) {\n this._rootMark?.addMark(m);\n } else if (parent !== false) {\n parent.addMark(m);\n }\n\n if (isNil(dataView)) {\n m.setDataView(this.getViewData(), this.getViewDataProductId());\n m.setSkipBeforeLayouted(true);\n } else if (dataView !== false) {\n m.setDataView(dataView, dataProductId);\n }\n\n if (isBoolean(skipBeforeLayouted)) {\n m.setSkipBeforeLayouted(skipBeforeLayouted);\n }\n\n if (isValid(depend)) {\n m.setDepend(...array(depend));\n }\n\n if (!isNil(groupKey)) {\n m.setGroupKey(groupKey);\n }\n\n if (stateSort) {\n m.setStateSortCallback(stateSort);\n }\n\n const markConfig: IMarkConfig = {\n ...config,\n morph: config.morph ?? false,\n support3d:\n is3DMark(markInfo.type as MarkTypeEnum) || (config.support3d ?? (spec.support3d || !!(spec as any).zField)),\n morphKey: spec.morph?.morphKey || `${this.getSpecIndex()}_${this.getMarks().length}`,\n morphElementKey: spec.morph?.morphElementKey ?? config.morphElementKey\n };\n\n m.setMarkConfig(markConfig);\n\n this.initMarkStyleWithSpec(m, mergeSpec({}, themeSpec, markSpec || spec[m.name]));\n }\n return m;\n }\n\n protected _getDataIdKey() {\n // 系列图元默认使用 rawData 初始生成的唯一数据 id 作为 key\n return super._getDataIdKey() ?? DEFAULT_DATA_KEY;\n }\n\n /**\n * 默认数据 id 生成逻辑。\n * 数据中的 维度A的值_维度B的值_***_维度C的值_seriesField的值_index\n * index作用是为了避免 id 重复\n */\n protected _getSeriesDataKey(datum: Datum) {\n let key = '';\n if (!datum) {\n return key;\n }\n\n const dimensionFields = this.getDimensionField();\n key = dimensionFields.map(field => datum[field]).join('_');\n\n const seriesField = this.getSeriesField();\n\n if (seriesField && !dimensionFields.includes(seriesField)) {\n key += `_${datum[seriesField]}`;\n }\n\n return key;\n }\n\n /**\n * data\n */\n addViewDataFilter(option: ITransformOptions) {\n (this._viewDataFilter ?? this.getViewData())?.transform(option, false);\n }\n\n reFilterViewData() {\n (this._viewDataFilter ?? this.getViewData())?.reRunAllTransform();\n }\n\n reTransformViewData() {\n this._data?.getDataView()?.reRunAllTransform();\n }\n\n fillData() {\n this.getRawData()?.reRunAllTransform();\n }\n\n compile() {\n this.compileData(); // 系列只需要编译数据,mark 将在 region 编译过程中编译\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getFieldAlias(field: string) {\n if (\n field === STACK_FIELD_END ||\n field === STACK_FIELD_END_PERCENT ||\n field === STACK_FIELD_START ||\n field === STACK_FIELD_START_PERCENT\n ) {\n field = this.getStackValueField();\n }\n return getFieldAlias(this.getRawData(), field) ?? field;\n }\n\n protected _getInvalidConnectType() {\n return this._invalidType === 'zero' ? 'zero' : this._invalidType === 'link' ? 'connect' : 'none';\n }\n\n protected _getInvalidDefined(datum: Datum) {\n const checkFields = this.getInvalidCheckFields();\n\n if (!checkFields.length) {\n return true;\n }\n\n return checkFields.every(field => {\n return couldBeValidNumber(datum[field]);\n });\n }\n\n protected _getRelatedComponentSpecInfo(specKey: string) {\n const specIndex = this.getSpecIndex();\n const relatedComponent = this._option\n .getSpecInfo()\n .component[specKey]?.filter(componentInfo => componentInfo.seriesIndexes.includes(specIndex));\n return relatedComponent ?? [];\n }\n\n protected _forEachStackGroup(callback: (node: ISeriesStackDataLeaf) => void, node?: ISeriesStackDataMeta) {\n node = node ?? this._viewStackData?.latestData;\n if (!node) {\n return;\n }\n\n if ((node as ISeriesStackDataLeaf).values?.length) {\n callback(node as ISeriesStackDataLeaf);\n } else if ((node as ISeriesStackDataNode).nodes) {\n Object.values((node as ISeriesStackDataNode).nodes).forEach(n => {\n this._forEachStackGroup(callback, n);\n });\n }\n }\n\n /** 判断 datum 是否在 viewData 中 */\n isDatumInViewData(datum: Datum) {\n if (!datum) {\n return false;\n }\n const viewDataList = this.getViewData().latestData;\n if (!viewDataList) {\n return false;\n }\n if (viewDataList.includes(datum)) {\n return true;\n }\n return viewDataList.some((viewDatum: Datum) => Object.keys(datum).every(key => datum[key] === viewDatum[key]));\n }\n\n getSeriesFieldValue(datum: Datum, seriesField?: string) {\n return datum[seriesField ?? this.getSeriesField() ?? DEFAULT_DATA_SERIES_FIELD];\n }\n}\n","import type { IAxisHelper as CartesianHelper } from '../../component/axis/cartesian/interface/common';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { Datum } from '../../typings';\nimport type { IOrdinalScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IPolarAxisHelper } from '../../component/axis';\nimport type { ICartesianSeries } from '../interface';\n\nexport function isPolarAxisSeries(type: string) {\n return ([SeriesTypeEnum.rose, SeriesTypeEnum.radar, SeriesTypeEnum.circularProgress] as string[]).includes(type);\n}\n\nexport function sortDataInAxisHelper(axisHelper: CartesianHelper | IPolarAxisHelper, field: string, dataList: Datum[]) {\n const scale = axisHelper.getScale(0);\n const isRevert = 'isInverse' in axisHelper ? axisHelper.isInverse() : false;\n if (isContinuous(scale.type)) {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n return (datumA[field] - datumB[field]) * (isRevert ? -1 : 1);\n });\n } else {\n dataList.sort((datumA: Datum, datumB: Datum) => {\n return (\n ((scale as IOrdinalScale).index(datumA[field]) - (scale as IOrdinalScale).index(datumB[field])) *\n (isRevert ? -1 : 1)\n );\n });\n }\n}\n\nexport function getGroupAnimationParams(series: ICartesianSeries) {\n // 分组数据的 dataIndex 应该与轴顺序一致,而非 data[DEFAULT_DATA_INDEX] 顺序\n const dataIndex = (datum: any) => {\n const indexField = series.direction === 'horizontal' ? series.fieldY[0] : series.fieldX[0];\n const indexValue = datum?.[indexField];\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n const index = (scale?.domain?.() ?? []).indexOf(indexValue);\n // 不应该出现xIndex === -1 || undefined的情况\n return index || 0;\n };\n const dataCount = () => {\n const scale = series.direction === 'horizontal' ? series.scaleY : series.scaleX;\n return (scale?.domain?.() ?? []).length ?? 0;\n };\n return { dataIndex, dataCount };\n}\n","import type { ICartesianSeries } from '../interface';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPoint } from '../../typings/coordinate';\nimport type { IBaseScale } from '@visactor/vscale';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_END_OffsetSilhouette,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_START_OffsetSilhouette\n} from '../../constant/data';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { array, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport type { ICartesianSeriesSpec } from './interface';\nimport { sortDataInAxisHelper } from '../util/utils';\nimport type { IAxisLocationCfg } from '../../component/axis';\nimport { ComponentTypeEnum } from '../../component/interface/type';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { StatisticOperations } from '../../data/transforms/interface';\n\nexport abstract class CartesianSeries\n extends BaseSeries\n implements ICartesianSeries\n{\n readonly coordinate: 'cartesian' = 'cartesian';\n protected _bandPosition = 0.5;\n protected _scaleConfig: IAxisLocationCfg = {\n bandPosition: this._bandPosition\n };\n protected _buildScaleConfig() {\n this._scaleConfig = {\n bandPosition: this._bandPosition\n };\n }\n\n protected _fieldX!: string[];\n get fieldX() {\n return this._fieldX;\n }\n setFieldX(f: string | string[]) {\n this._fieldX = array(f);\n }\n\n protected _fieldY!: string[];\n get fieldY() {\n return this._fieldY;\n }\n setFieldY(f: string | string[]) {\n this._fieldY = array(f);\n }\n\n protected _fieldZ?: string[];\n get fieldZ(): string[] | undefined {\n return this._fieldZ;\n }\n setFieldZ(f?: string | string[]) {\n this._fieldZ = f && array(f);\n }\n\n protected _fieldX2!: string;\n get fieldX2() {\n return this._fieldX2;\n }\n setFieldX2(f: string) {\n this._fieldX2 = f;\n }\n\n protected _fieldY2!: string;\n get fieldY2() {\n return this._fieldY2;\n }\n setFieldY2(f: string) {\n this._fieldY2 = f;\n }\n\n protected _specXField: string[];\n protected _specYField: string[];\n\n protected _direction: DirectionType = Direction.vertical;\n get direction() {\n return this._direction;\n }\n\n protected _scaleX!: IBaseScale;\n get scaleX() {\n return this._scaleX;\n }\n setScaleX(s: IBaseScale) {\n this._scaleX = s;\n }\n\n protected _scaleY!: IBaseScale;\n get scaleY() {\n return this._scaleY;\n }\n setScaleY(s: IBaseScale) {\n this._scaleY = s;\n }\n\n protected _scaleZ?: IBaseScale;\n get scaleZ() {\n return this._scaleZ;\n }\n setScaleZ(s: IBaseScale) {\n this._scaleZ = s;\n }\n\n _xAxisHelper!: IAxisHelper;\n getXAxisHelper() {\n return this._xAxisHelper;\n }\n setXAxisHelper(h: IAxisHelper) {\n this._xAxisHelper = h;\n this.onXAxisHelperUpdate();\n }\n\n _yAxisHelper!: IAxisHelper;\n getYAxisHelper() {\n return this._yAxisHelper;\n }\n setYAxisHelper(h: IAxisHelper) {\n this._yAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n _zAxisHelper?: IAxisHelper;\n getZAxisHelper() {\n return this._zAxisHelper;\n }\n setZAxisHelper(h: IAxisHelper) {\n this._zAxisHelper = h;\n this.onYAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: StatisticOperations }[] = [];\n const axes = [\n {\n axisHelper: this.getXAxisHelper(),\n fields: this._fieldX2 ? [...this._fieldX, this._fieldX2] : this._fieldX\n },\n {\n axisHelper: this.getYAxisHelper(),\n fields: this._fieldY2 ? [...this._fieldY, this._fieldY2] : this._fieldY\n },\n {\n axisHelper: this.getZAxisHelper(),\n fields: this._fieldZ\n }\n ];\n\n axes.forEach(axisOption => {\n if (axisOption.axisHelper && axisOption.axisHelper.getScale && axisOption.fields) {\n axisOption.fields.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'>; filter?: (fv: any) => boolean } = {\n key: f,\n operations: []\n };\n const scale = axisOption.axisHelper.getScale(0);\n if (isContinuous(scale.type)) {\n result.operations = ['max', 'min'];\n\n if (scale.type === 'log') {\n result.filter = (fv: any) => fv > 0;\n }\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n });\n\n if (this.getStack()) {\n fields.push({\n key: this.getStackValueField(),\n operations: ['allValid']\n });\n }\n return fields;\n }\n\n getGroupFields() {\n return this.direction === 'vertical' ? this._fieldX : this._fieldY;\n }\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getStackValue() {\n const axisId = (\n this.direction === Direction.horizontal ? this.getXAxisHelper() : this.getYAxisHelper()\n )?.getAxisId();\n return this._spec.stackValue ?? `${PREFIX}_series_${this.type}_${axisId}`;\n }\n\n getStackValueField() {\n // TODO: hack\n if (this.direction === Direction.horizontal) {\n return array(this._spec.xField)[0];\n }\n return array(this._spec.yField)[0];\n }\n\n setValueFieldToStack(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END);\n this.setFieldX2(STACK_FIELD_START);\n } else {\n this.setFieldY(STACK_FIELD_END);\n this.setFieldY2(STACK_FIELD_START);\n }\n }\n\n setValueFieldToPercent(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END_PERCENT);\n this.setFieldX2(STACK_FIELD_START_PERCENT);\n } else {\n this.setFieldY(STACK_FIELD_END_PERCENT);\n this.setFieldY2(STACK_FIELD_START_PERCENT);\n }\n }\n\n setValueFieldToStackOffsetSilhouette(): void {\n if (this.direction === Direction.horizontal) {\n this.setFieldX(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldX2(STACK_FIELD_START_OffsetSilhouette);\n } else {\n this.setFieldY(STACK_FIELD_END_OffsetSilhouette);\n this.setFieldY2(STACK_FIELD_START_OffsetSilhouette);\n }\n }\n\n onXAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onYAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n onZAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldX(this._spec.xField);\n this.setFieldY(this._spec.yField);\n this.setFieldZ(this._spec.zField);\n this._specXField = array(this._spec.xField);\n this._specYField = array(this._spec.yField);\n if (isValid(this._spec.direction)) {\n this._direction = this._spec.direction;\n }\n\n this.setFieldX2(this._spec?.x2Field);\n this.setFieldY2(this._spec?.y2Field);\n\n if (this.getStack()) {\n this.setValueFieldToStack();\n }\n if (this.getPercent()) {\n this.setValueFieldToPercent();\n }\n if (this.getStackOffsetSilhouette()) {\n this.setValueFieldToStackOffsetSilhouette();\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint | null {\n if (!datum) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return {\n x: this.dataToPositionX(datum),\n y: this.dataToPositionY(datum)\n } as IPoint;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToX = this.valueToPositionX.bind(this);\n this._markAttributeContext.valueToY = this.valueToPositionY.bind(this);\n this._markAttributeContext.xBandwidth = (depth: number = 0) => this.getXAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.yBandwidth = (depth: number = 0) => this.getYAxisHelper().getBandwidth?.(depth) ?? 0;\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n }\n\n valueToPosition(xValue: StringOrNumber | StringOrNumber[], yValue: StringOrNumber | StringOrNumber[]) {\n return {\n x: this.valueToPositionX(xValue),\n y: this.valueToPositionY(yValue)\n };\n }\n\n protected _axisPosition(helper: IAxisHelper, value: StringOrNumber | StringOrNumber[], datum?: any) {\n this._scaleConfig.datum = datum;\n if (helper.isContinuous) {\n return helper.valueToPosition(value, this._scaleConfig);\n }\n return helper.dataToPosition(array(value), this._scaleConfig);\n }\n\n valueToPositionX(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._xAxisHelper, value, datum);\n }\n valueToPositionY(value: StringOrNumber | StringOrNumber[], datum?: any) {\n return this._axisPosition(this._yAxisHelper, value, datum);\n }\n\n protected _dataToPosition(\n datum: Datum,\n axisHelper: IAxisHelper,\n field: string[],\n scaleDepth: number | undefined,\n getEncoder: () => (datum: Datum) => number,\n setEncoder: (encoder: (datum: Datum) => number) => void\n ): number {\n const encoder = getEncoder();\n if (encoder) {\n return encoder(datum);\n }\n\n if (!axisHelper) {\n setEncoder((datum: Datum) => Number.NaN);\n return Number.NaN;\n }\n const fields = (axisHelper.getFields ? axisHelper.getFields() : field).slice(0, scaleDepth);\n if (!fields || fields.length === 0) {\n setEncoder((datum: Datum) => null);\n return null;\n }\n\n if (axisHelper.isContinuous) {\n setEncoder((datum: Datum) => {\n this._scaleConfig.datum = datum;\n return axisHelper.valueToPosition(this.getDatumPositionValue(datum, fields[0]), this._scaleConfig);\n });\n } else {\n setEncoder((datum: Datum) => {\n this._scaleConfig.datum = datum;\n return axisHelper.dataToPosition(array(this.getDatumPositionValues(datum, fields)), this._scaleConfig);\n });\n }\n\n return getEncoder()(datum);\n }\n\n protected _positionXEncoder?: (datum: Datum) => number;\n protected _getPositionXEncoder = () => this._positionXEncoder?.bind(this);\n protected _setPositionXEncoder = (encoder: (datum: Datum) => number) => {\n this._positionXEncoder = encoder.bind(this);\n };\n\n dataToPositionX(datum: Datum): number {\n return this._dataToPosition(\n datum,\n this._xAxisHelper,\n this.fieldX,\n undefined,\n this._getPositionXEncoder,\n this._setPositionXEncoder\n );\n }\n\n protected _positionYEncoder?: (datum: Datum) => number;\n protected _getPositionYEncoder = () => this._positionYEncoder?.bind(this);\n protected _setPositionYEncoder = (encoder: (datum: Datum) => number) => {\n this._positionYEncoder = encoder.bind(this);\n };\n\n dataToPositionY(datum: Datum): number {\n return this._dataToPosition(\n datum,\n this._yAxisHelper,\n this.fieldY,\n undefined,\n this._getPositionYEncoder,\n this._setPositionYEncoder\n );\n }\n\n dataToPositionZ(datum: Datum): number {\n if (!this._zAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._zAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fieldZ), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionX1(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n return this._fieldX2 && this._fieldX2 in datum\n ? this.valueToPositionX(this.getDatumPositionValues(datum, this._fieldX2))\n : this.valueToPositionX(0);\n }\n\n dataToPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n return this._fieldY2 && this._fieldY2 in datum\n ? this.valueToPositionY(this.getDatumPositionValues(datum, this._fieldY2))\n : this.valueToPositionY(0);\n }\n\n positionToData(p: IPoint): IPoint | null {\n if (!p) {\n return null;\n }\n return {\n x: this.positionToDataX(p.x),\n y: this.positionToDataY(p.y)\n };\n }\n\n positionToDataX(xPos: number): any | null {\n if (!this._scaleX) {\n return null;\n }\n return this._scaleX.invert(xPos);\n }\n\n positionToDataY(yPos: number): any | null {\n if (!this._scaleY) {\n return null;\n }\n return this._scaleY.invert(yPos);\n }\n\n getRegionRectLeft(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[0];\n }\n\n getRegionRectRight(): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { getScale } = this._xAxisHelper;\n return getScale(0).range()[1];\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n this.setFieldX(this._fieldX);\n this.setFieldY(this._fieldY);\n this._buildScaleConfig();\n }\n\n getDimensionField(): string[] {\n if (this._direction === Direction.horizontal) {\n return this._specYField;\n }\n return this._specXField;\n }\n\n getDimensionContinuousField(): string[] {\n if (this._direction === Direction.horizontal) {\n return [this.fieldY[0], this.fieldY2];\n }\n return [this.fieldX[0], this.fieldX2];\n }\n\n getMeasureField(): string[] {\n if (this._direction === Direction.horizontal) {\n return this._specXField;\n }\n return this._specYField;\n }\n\n protected initEvent() {\n super.initEvent();\n // 通过轴事件来进行排序。轴的domain数据变化在系列的统计数据完成后\n if (this.sortDataByAxis) {\n this.event.on(\n ChartEvent.scaleDomainUpdate,\n {\n filter: param =>\n param.model.id ===\n (this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper)?.getAxisId()\n },\n () => {\n // 只能排序,不能修改数据,此时已经在数据流的统计流程之后\n this._sortDataInAxisDomain();\n }\n );\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(\n this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper,\n this._direction === Direction.horizontal ? this._fieldY[0] : this._fieldX[0],\n this.getViewData().latestData\n );\n this._data?.updateData(true);\n }\n }\n\n protected getInvalidCheckFields() {\n const fields: string[] = [];\n\n if (\n this._xAxisHelper &&\n this._xAxisHelper.isContinuous &&\n this._xAxisHelper.getAxisType() !== ComponentTypeEnum.geoCoordinate\n ) {\n const xFields = this._xAxisHelper.getFields ? this._xAxisHelper.getFields() : this._specXField;\n xFields.forEach(f => {\n fields.push(f);\n });\n }\n\n if (\n this._yAxisHelper &&\n this._yAxisHelper.isContinuous &&\n this._yAxisHelper.getAxisType() !== ComponentTypeEnum.geoCoordinate\n ) {\n const yFields = this._yAxisHelper.getFields ? this._yAxisHelper.getFields() : this._specYField;\n\n yFields.forEach(f => {\n fields.push(f);\n });\n }\n return fields;\n }\n\n reInit(spec: T) {\n if (this._positionXEncoder) {\n this._positionXEncoder = null;\n }\n if (this._positionYEncoder) {\n this._positionYEncoder = null;\n }\n\n super.reInit(spec);\n }\n}\n","export type InterpolateType =\n | 'basis'\n | 'linear'\n | 'monotone'\n | 'monotoneX'\n | 'monotoneY'\n | 'step'\n | 'stepAfter'\n | 'stepBefore'\n | 'linearClosed'\n | 'catmullRom'\n | 'catmullRomClosed';\n\nexport const DEFAULT_SMOOTH_INTERPOLATE = 'monotone';\nexport const DEFAULT_LINEAR_INTERPOLATE = 'linear';\n","// somehow? 使用 vrender 的声明文件会 build 报错\n// import { LineJoinType, LineCapType } from '@visactor/vrender-core';\nexport type ILineStrokeCap = 'butt' | 'round' | 'square';\nexport type ILineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n\nexport const DEFAULT_CLOSE_STROKE_JOIN = 'bevel';\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const lineLikeSeriesMark: SeriesMarkMap = {\n [SeriesMarkNameEnum.point]: { name: SeriesMarkNameEnum.point, type: MarkTypeEnum.symbol },\n [SeriesMarkNameEnum.line]: { name: SeriesMarkNameEnum.line, type: MarkTypeEnum.line }\n};\n","import { PREFIX } from '../../constant/base';\nimport type { ISeriesOption } from '../interface/common';\nimport { DataView } from '@visactor/vdataset';\nimport { ChartEvent } from '../../constant/event';\nimport type { ISeries } from '../interface/series';\nimport { AttributeLevel } from '../../constant/attribute';\n\nimport type {\n ICompileMarkConfig,\n IMark,\n IMarkProgressiveConfig,\n ILabelMark,\n ILineMark,\n ISymbolMark,\n ITextMark\n} from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { DirectionType, IInvalidType, InterpolateType, Maybe, Datum, ILayoutRect } from '../../typings';\nimport { DEFAULT_LINEAR_INTERPOLATE, DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_CLOSE_STROKE_JOIN } from '../../typings/line-stroke';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeriesMarkInfo, ISeriesMarkInitOption, ISeriesTooltipHelper } from '../interface';\nimport { shouldMarkDoMorph } from '../../animation/utils';\nimport type { DimensionEventParams } from '../../event/events/dimension';\n// eslint-disable-next-line no-duplicate-imports\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { EventCallback, EventParams } from '../../event/interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { lineLikeSeriesMark } from './constant';\nimport type { IRegion } from '../../region/interface';\nimport type { SeriesData } from '../base/series-data';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ILineLikeSeriesTheme } from './interface';\n\nexport interface LineLikeSeriesMixin extends ISeries {\n _spec: any;\n _option: ISeriesOption;\n _seriesField: string;\n _theme: Maybe;\n _tooltipHelper: ISeriesTooltipHelper;\n _invalidType: IInvalidType;\n _region: IRegion;\n _direction: DirectionType;\n _data: SeriesData;\n\n _lineMark: ILineMark;\n _symbolMark: ISymbolMark;\n _symbolActiveMark: ISymbolMark;\n _labelMark: ITextMark;\n _fieldX?: string[];\n _fieldY?: string[];\n _fieldZ?: string[];\n\n _createMark: (markInfo: ISeriesMarkInfo, option?: ISeriesMarkInitOption, config?: ICompileMarkConfig) => IMark;\n _getInvalidDefined: (datum: Datum) => boolean;\n _getInvalidConnectType: () => IInvalidType;\n\n getLayoutRect: () => ILayoutRect;\n}\n\nexport class LineLikeSeriesMixin {\n addSamplingCompile(): void {\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.horizontal ? height : width,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.horizontal ? fieldsX[0] : fieldsY[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n addOverlapCompile(): void {\n if (this._spec.markOverlap) {\n const overlapTrans = [];\n overlapTrans.push({\n type: 'markoverlap',\n direction: this._direction === Direction.horizontal && this.coordinate === 'cartesian' ? 2 : 1,\n delta: this._spec.pointDis,\n deltaMul: this._spec.pointDisMul,\n groupBy: this._seriesField\n });\n this._symbolMark?.getProduct().transform(overlapTrans);\n }\n }\n\n reCompileSampling(): void {\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n initLineMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n this._lineMark = this._createMark(\n lineLikeSeriesMark.line,\n {\n groupKey: this._seriesField,\n isSeriesMark: isSeriesMark ?? true,\n stateSort: this._spec.line?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.line?.customShape,\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ILineMark;\n return this._lineMark;\n }\n\n initLineMarkStyle(direction?: DirectionType, areaCurveType?: InterpolateType) {\n const lineMark = this._lineMark;\n if (lineMark) {\n this.setMarkStyle(\n lineMark,\n {\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n lineMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(lineMark, 'defined');\n });\n if (this.coordinate === 'polar') {\n // 极坐标系下需要关闭\n this.setMarkStyle(\n lineMark,\n {\n lineJoin: DEFAULT_CLOSE_STROKE_JOIN,\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const userCurveType = areaCurveType ?? this.getSpec().line?.style?.curveType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? direction === Direction.horizontal\n ? 'monotoneY'\n : 'monotoneX'\n : userCurveType;\n\n this.setMarkStyle(\n lineMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n\n this.setMarkStyle(\n lineMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n return lineMark;\n }\n\n protected _getEventElement(params: DimensionEventParams, reverse: boolean = false): Datum[] {\n // items 修改遍历方法从 mark\n let data: Datum[] = [];\n params.dimensionInfo.some(df => {\n df.data.some(dd => {\n if (dd.series === this) {\n data = dd.datum;\n return true;\n }\n return false;\n });\n return !data.length;\n });\n return data;\n }\n\n protected _dimensionTrigger(params: DimensionEventParams) {\n const elements = this._getEventElement(params);\n\n switch (params.action) {\n case 'enter':\n this._symbolActiveMark.getDataView().parse(elements);\n this._symbolActiveMark.getData().updateData(false);\n break;\n case 'leave':\n this._symbolActiveMark.getDataView().parse([]);\n this._symbolActiveMark.getData().updateData(false);\n case 'click':\n case 'move':\n default:\n break;\n }\n }\n\n initSymbolMark(progressive?: IMarkProgressiveConfig, isSeriesMark?: boolean) {\n const pointSpec = this._spec.point || {};\n\n if (pointSpec.visible !== false) {\n this._symbolMark = this._createMark(\n lineLikeSeriesMark.point,\n {\n groupKey: this._seriesField,\n isSeriesMark: !!isSeriesMark,\n stateSort: pointSpec.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: pointSpec.customShape,\n morph: shouldMarkDoMorph(this._spec, lineLikeSeriesMark.point.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ISymbolMark;\n }\n\n if (this._spec.activePoint === true) {\n const activeData = new DataView(this._option.dataSet, { name: `${PREFIX}_series_${this.id}_active_point` });\n activeData.parse([]);\n this._symbolActiveMark = this._createMark(\n { name: `active_point_${this.id}`, type: MarkTypeEnum.symbol },\n {\n groupKey: this._seriesField,\n isSeriesMark: false,\n dataView: activeData,\n parent: this._region.getInteractionMark(),\n stateSort: pointSpec.stateSort\n },\n {\n setCustomizedShape: pointSpec.customShape,\n morph: false\n }\n ) as ISymbolMark;\n this._symbolActiveMark.setVisible(false);\n }\n\n return this._symbolMark;\n }\n\n initSymbolMarkStyle() {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n this._initSymbolActiveMarkAlone();\n return symbolMark;\n }\n // 设置基础样式\n this._initSymbolMark(symbolMark);\n\n // setStyle to active point\n if (this._symbolActiveMark && this._symbolMark.stateStyle.dimension_hover) {\n // active point will show\n this._symbolActiveMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n for (const state in this._symbolMark.stateStyle) {\n this._symbolActiveMark.stateStyle[state] = {};\n for (const key in this._symbolMark.stateStyle[state]) {\n // symbolActiveMark 的 visible 具有额外逻辑,不要使用原始 symbol 的 visible\n if (key === 'visible') {\n continue;\n }\n this._symbolActiveMark.stateStyle[state][key] = {\n style: null,\n level: AttributeLevel.Series,\n referer: symbolMark\n };\n }\n }\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n\n return symbolMark;\n }\n\n private _initSymbolMark(symbolMark: ISymbolMark) {\n if (!symbolMark) {\n return;\n }\n this.setMarkStyle(\n symbolMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n symbolMark,\n {\n x: (datum: Datum) => {\n // 对于symbol而言,如果undefined 的元素还进行scale机会,Null/undefined 会被当成0,导致交互误显示的问题\n return this._invalidType !== 'zero' && !this._getInvalidDefined(datum)\n ? Number.NaN\n : this.dataToPositionX(datum);\n },\n y: (datum: Datum) => {\n return this._invalidType !== 'zero' && !this._getInvalidDefined(datum)\n ? Number.NaN\n : this.dataToPositionY(datum);\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n private _initSymbolActiveMarkAlone() {\n const symbolMark = this._symbolActiveMark;\n if (!symbolMark) {\n return;\n }\n this._initSymbolMark(symbolMark);\n\n // 这里应该不能讲trigger-mark改为activeMark,activeMark数据会变,并且目前不支持selected等操作改变它的数据\n // this._trigger.registerMark(symbolMark);\n\n // setStyle to active point\n if (symbolMark && this._spec[lineLikeSeriesMark.point.name]?.state?.dimension_hover) {\n // active point will show\n symbolMark.setVisible(true);\n this.event.on(DimensionEventEnum.dimensionHover, this._dimensionTrigger.bind(this) as EventCallback);\n // set style with referer\n this.initMarkStyleWithSpec(\n symbolMark,\n mergeSpec({}, this._spec[lineLikeSeriesMark.point.name], { visible: true })\n );\n // make sure activeMark in state\n this._symbolActiveMark.state.changeStateInfo({\n stateValue: STATE_VALUE_ENUM.STATE_DIMENSION_HOVER,\n filter: () => true\n });\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n if (labelMark.getTarget()?.type !== 'symbol') {\n labelMark.setRule('line-data');\n }\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(labelMark, 'visible');\n });\n }\n\n initLineLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n this.setMarkStyle(labelMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getSeriesField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n encodeDefined(mark: IMark, attr: string) {\n if (!mark) {\n return;\n }\n const allValid = this._isFieldAllValid();\n if (this._invalidType === 'zero' || allValid) {\n if (mark.stateStyle.normal?.[attr]?.style === true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: true }, 'normal', AttributeLevel.Series);\n } else {\n if (mark.stateStyle.normal?.[attr]?.style !== true) {\n // no change\n return;\n }\n this.setMarkStyle(mark, { [attr]: this._getInvalidDefined.bind(this) }, 'normal', AttributeLevel.Series);\n }\n // if has produce, reCompile encode to set attribute to product\n if (mark.getProduct()) {\n mark.compileEncode();\n }\n }\n\n protected _isFieldAllValid() {\n const viewStatistics = this.getViewDataStatistics();\n const field = this.getStackValueField();\n if (viewStatistics && viewStatistics.latestData && field) {\n return viewStatistics.latestData[field] && viewStatistics.latestData[field].allValid;\n }\n return false;\n }\n}\n","import { isValidScaleType } from '@visactor/vscale';\nimport type { StateValueType } from '../../compile/mark';\nimport type { ConvertToMarkStyleSpec, ILineLikeMarkSpec } from '../../typings/visual';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { BaseMark } from './base-mark';\nimport type { IMarkStyle } from '../interface';\n\nexport abstract class BaseLineMark extends BaseMark {\n protected abstract _getIgnoreAttributes(): string[];\n\n /**\n * @override\n * 之所以覆写是因为 vgrammar 侧默认都会处理 lineSegments,非常耗性能,所以需要 VChart 给一个标志位用于是否执行。\n * 由外部series调用,设置markStyle的接口。\n * @param style\n * @param level\n * @param state\n */\n setStyle(\n style: Partial> | Partial>,\n state: StateValueType = 'normal',\n level: number = 0,\n stateStyle = this.stateStyle\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (stateStyle[state] === undefined) {\n stateStyle[state] = {};\n }\n\n const ignoreAttributes = this._getIgnoreAttributes();\n const segmentAttributes = [\n 'strokeWidth',\n 'lineWidth',\n 'lineDash',\n 'strokeDash',\n 'lineJoin',\n 'stroke',\n 'strokeOpacity',\n 'opacity',\n 'fill',\n 'fillOpacity',\n 'texture',\n 'texturePadding',\n 'textureSize',\n 'textureColor'\n ];\n const isUserLevel = this.isUserLevel(level);\n let enableSegments = false;\n Object.keys(style).forEach(attr => {\n const attrStyle = style[attr];\n if (isNil(attrStyle) || ignoreAttributes.includes(attr)) {\n return;\n }\n if (\n isUserLevel &&\n segmentAttributes.includes(attr) &&\n (isValidScaleType(attrStyle?.type) || attrStyle?.scale || isFunction(attrStyle))\n ) {\n enableSegments = true;\n }\n\n const styleConverter = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel, stateStyle);\n\n this.setAttribute(attr as any, styleConverter, state, level, stateStyle);\n });\n if (enableSegments) {\n this.setMarkConfig({\n enableSegments: true\n });\n }\n }\n}\n","import { Factory } from './../core/factory';\nimport { SeriesTypeEnum } from '../series/interface/type';\nimport type { ILineMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { ILineMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLineGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport class LineMark extends BaseLineMark implements ILineMark {\n static readonly type = MarkTypeEnum.line;\n readonly type = LineMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 1\n };\n return defaultStyle;\n }\n\n /**\n * TODO: SeriesTypeEnum 移到最外层\n * @override 线不支持填充\n * @returns\n */\n protected _getIgnoreAttributes(): string[] {\n if (this.model?.type === SeriesTypeEnum.radar && this.model?.coordinate === 'polar') {\n return [];\n }\n return ['fill', 'fillOpacity'];\n }\n}\n\nexport const registerLineMark = () => {\n Factory.registerMark(LineMark.type, LineMark);\n registerLineGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import { Factory } from './../core/factory';\nimport type { ISymbolMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, ISymbolMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerSymbolGraphic } from '@visactor/vgrammar-core';\n\nexport class BaseSymbolMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n size: 1,\n symbolType: 'circle',\n fill: undefined,\n lineWidth: 0\n };\n return defaultStyle as IMarkStyle;\n }\n}\n\nexport class SymbolMark extends BaseSymbolMark implements ISymbolMark {\n static readonly type = MarkTypeEnum.symbol;\n readonly type = SymbolMark.type;\n}\n\nexport const registerSymbolMark = () => {\n Factory.registerMark(SymbolMark.type, SymbolMark);\n registerSymbolGraphic();\n};\n","import type { FilterTransformOption } from '../../types';\n\nexport const transform = (options: FilterTransformOption, data: any[], parameters?: any) => {\n return data.filter(entry => {\n return options.callback(entry, parameters);\n });\n};\n","import { isNil } from '@visactor/vutils';\nimport type { MapTransformOption } from '../../types';\n\nexport const transform = (options: MapTransformOption, upstreamData: any[], params?: any) => {\n const func = options.callback;\n const as = options.as;\n\n if (!options.all) {\n upstreamData.forEach(entry => {\n const data = func(entry, params);\n\n if (!isNil(as)) {\n if (isNil(entry)) {\n return;\n }\n entry[as] = data;\n }\n\n return data;\n });\n\n return upstreamData;\n }\n const data = func(upstreamData, params);\n\n if (isNil(as) || isNil(upstreamData)) {\n return data;\n }\n\n (upstreamData as any)[as] = data;\n\n return upstreamData;\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-transforms/src/util/util.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil, isString } from '@visactor/vutils';\nimport type { FieldGetterFunction } from '@visactor/vgrammar-util';\nimport { accessorName } from '@visactor/vgrammar-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]) {\n if (!fields) {\n return null;\n }\n return fields.map((f, i) => {\n return as[i] ?? (isString(f) ? f : accessorName(f));\n });\n}\n\nexport function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction) {\n // partition data points into groups\n if (isNil(groupBy)) {\n return [data.map(field)];\n }\n\n const groups: any[] = [];\n const map: Record = {};\n data.forEach((entry: any) => {\n const groupKey = groupBy.map((groupFunc: (arg: any) => any) => groupFunc(entry)).toString();\n\n if (!map[groupKey]) {\n const groupItem: any[] = [];\n (groupItem as any).dims = groupKey;\n groups.push(groupItem);\n map[groupKey] = groupItem;\n } else {\n map[groupKey].push(field(entry));\n }\n });\n\n return groups;\n}\n\nexport function sum(arr: any[]) {\n return arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n}\n\nexport function average(arr: any[]) {\n if (arr.length === 0) {\n return 0;\n }\n const total = sum(arr);\n return total / arr.length;\n}\n","import { maxInArray, minInArray } from '@visactor/vutils';\nimport type { SampleTransformOptions } from '../../types';\nimport { average, sum } from '../util/util';\n\nconst samplerMap = {\n min: minInArray,\n max: maxInArray,\n average: average,\n sum: sum\n};\n\nfunction lttb(size: number, array: any[], isGroup: boolean, yfield: string) {\n const frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n\n let currentIndex = 0;\n let sampledIndex = 0;\n let maxArea;\n let area;\n let nextIndex;\n\n // First frame use the first data.\n newIndices[sampledIndex++] = currentIndex;\n\n for (let i = 1; i < len - 1; i += frameSize) {\n const nextFrameStart = Math.min(i + frameSize, len - 1);\n const nextFrameEnd = Math.min(i + frameSize * 2, len);\n\n const avgX = (nextFrameEnd + nextFrameStart) / 2;\n let avgY = 0;\n\n for (let idx = nextFrameStart; idx < nextFrameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(value)) {\n continue;\n }\n avgY += value;\n }\n avgY /= nextFrameEnd - nextFrameStart;\n\n const frameStart = i;\n const frameEnd = Math.min(i + frameSize, len);\n\n const pointAX = i - 1;\n const pointAY = array[currentIndex][yfield];\n\n maxArea = -1;\n\n nextIndex = frameStart;\n // Find a point from current frame that construct a triangel with largest area with previous selected point\n // And the average of next frame.\n for (let idx = frameStart; idx < frameEnd; idx++) {\n const value = array[idx][yfield];\n if (Number.isNaN(yfield)) {\n continue;\n }\n // Calculate triangle area over three buckets\n area = Math.abs((pointAX - avgX) * (value - pointAY) - (pointAX - idx) * (avgY - pointAY));\n if (area > maxArea) {\n maxArea = area;\n nextIndex = idx; // Next a is this b\n }\n }\n\n newIndices[sampledIndex++] = nextIndex;\n\n currentIndex = nextIndex; // This a is the next a (chosen b)\n }\n\n // First frame use the last data.\n if (newIndices[sampledIndex - 1] !== len - 1) {\n newIndices[sampledIndex++] = len - 1;\n }\n\n // output newly added tuples\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sample(size: number, array: any[], isGroup: boolean, mode: 'min' | 'max' | 'average' | 'sum', yfield: string) {\n let frameSize = Math.floor(array.length / size);\n const newIndices = [];\n const len = array.length;\n let sampledIndex = 0;\n let frameValues = [];\n\n newIndices.push(sampledIndex);\n array[sampledIndex][yfield] = array[sampledIndex][yfield];\n\n for (let i = 1; i < len - 1; i += frameSize) {\n if (frameSize > len - i) {\n frameSize = len - i;\n frameValues.length = frameSize;\n }\n frameValues = [];\n for (let k = 0; k < frameSize; k++) {\n frameValues.push(array[i + k][yfield]);\n }\n const value = samplerMap[mode](frameValues);\n sampledIndex = Math.min(Math.round(i + frameValues.length / 2) || 0, len - 1);\n array[sampledIndex][yfield] = value;\n newIndices.push(sampledIndex);\n }\n const newRawIndices = newIndices.map(i => (isGroup ? array[i].i : i));\n return newRawIndices;\n}\n\nfunction sampleMin(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'min', yfield);\n}\n\nfunction sampleMax(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'max', yfield);\n}\n\nfunction sampleAverage(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'average', yfield);\n}\n\nfunction sampleSum(size: number, array: any[], isGroup: boolean, yfield: string) {\n return sample(size, array, isGroup, 'sum', yfield);\n}\n\n/**\n * Samples tuples passing through this operator.\n * mode: 'lttb' - Uses lttb sampling to maintain a trend-maintained sample.\n * mode: 'min' | 'max' | 'average' | 'sum' - Uses aggregation methods to location sample points.\n * @constructor\n * @param {object} options - The parameters for this operator.\n * @param {number} [options.size=1000] - The maximum number of samples.\n * @param {string} [options.yfield] - The yfield string of data.\n * @param {string} [options.groupBy] - The groupBy string of data.\n */\n\nexport const transform = (options: SampleTransformOptions, upstreamData: any[]) => {\n let size = options.size;\n const factor = options.factor || 1;\n\n if (Array.isArray(size)) {\n size = Math.floor(size[1] - size[0]);\n }\n\n size *= factor;\n\n // size<=0的特殊情况不采样,返回空\n if (size <= 0) {\n return [];\n }\n\n // 数据 {\n const group = groups[groupName];\n if (group.length <= size) {\n const indices = group.map((datum: any) => {\n return datum.i;\n });\n rawIndice = rawIndice.concat(indices);\n } else {\n const indices = sampler(size, group, true, yfield);\n rawIndice = rawIndice.concat(indices);\n group.forEach((datum: any) => (upstreamData[datum.i][yfield] = datum[yfield]));\n }\n });\n\n // 采样后,按照原始顺序排序\n rawIndice.sort((a, b) => a - b);\n\n return rawIndice.map((index: number) => upstreamData[index]);\n }\n return sampler(size, upstreamData, false, yfield).map(index => upstreamData[index]);\n }\n\n return [];\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\nimport { MARK_OVERLAP_HIDE_KEY } from '../../graph/constants';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(MARK_OVERLAP_HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n","import { transform as binTransform } from './data/bin';\nimport { transform as contourTransform } from './data/contour';\nimport { transform as sortTransform } from './data/sort';\nimport { transform as filterTransform } from './data/filter';\nimport { transform as mapTransform } from './data/map';\nimport { transform as kdeTransform } from './data/kde';\nimport { transform as joinTransform } from './data/join';\nimport { transform as pickTransform } from './data/pick';\nimport { transform as rangeTransform } from './data/range';\nimport { transform as stackTransform } from './data/stack';\nimport { transform as foldTransform } from './data/fold';\nimport { transform as unfoldTransform } from './data/unfold';\n\nimport { transform as funnelTransform } from './data/funnel';\nimport { transform as pieTransform } from './data/pie';\nimport { transform as circularRelationTransform } from './data/circular-relation';\n\nimport { transform as sampleTransform } from './data/sampling';\nimport { transform as markoverlapTransform } from './mark/mark-overlap';\n\nimport { transform as identifierTransform } from './view/identifier';\n\nimport { transform as dodgeTransform } from './mark/dodge';\nimport { transform as jitterTransform, jitterX as jitterXTransform, jitterY as jitterYTransform } from './mark/jitter';\nimport { symmetry as symmetryTransform } from './mark/symmetry';\nimport { Factory } from '../core/factory';\nimport type { ITransform } from '../types';\n\nexport const registerBinTransform = () => {\n Factory.registerTransform(\n 'bin',\n { transform: binTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerContourTransform = () => {\n Factory.registerTransform(\n 'contour',\n { transform: contourTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSortTransform = () => {\n Factory.registerTransform(\n 'sort',\n { transform: sortTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFilterTransform = () => {\n Factory.registerTransform(\n 'filter',\n { transform: filterTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerJoinTransform = () => {\n Factory.registerTransform(\n 'join',\n { transform: joinTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerKdeTransform = () => {\n Factory.registerTransform(\n 'kde',\n { transform: kdeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerMapTransform = () => {\n Factory.registerTransform(\n 'map',\n { transform: mapTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPickTransform = () => {\n Factory.registerTransform(\n 'pick',\n { transform: pickTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerRangeTransform = () => {\n Factory.registerTransform(\n 'range',\n { transform: rangeTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerStackTransform = () => {\n Factory.registerTransform(\n 'stack',\n { transform: stackTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFunnelTransform = () => {\n Factory.registerTransform(\n 'funnel',\n { transform: funnelTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerPieTransform = () => {\n Factory.registerTransform(\n 'pie',\n { transform: pieTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerCircularRelationTransform = () => {\n Factory.registerTransform(\n 'circularRelation',\n { transform: circularRelationTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerFoldTransform = () => {\n Factory.registerTransform(\n 'fold',\n { transform: foldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerUnfoldTransform = () => {\n Factory.registerTransform(\n 'unfold',\n { transform: unfoldTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerIdentifierTransform = () => {\n Factory.registerTransform(\n 'identifier',\n { transform: identifierTransform, markPhase: 'beforeJoin' } as Omit,\n true\n );\n};\n\nexport const registerSampleTransform = () => {\n Factory.registerTransform(\n 'sampling',\n { transform: sampleTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerMarkOverlapTransform = () => {\n Factory.registerTransform(\n 'markoverlap',\n { transform: markoverlapTransform, markPhase: 'afterEncode' } as Omit,\n true\n );\n};\n\nexport const registerDodgeTransform = () => {\n Factory.registerTransform(\n 'dodge',\n { transform: dodgeTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterTransform = () => {\n Factory.registerTransform(\n 'jitter',\n { transform: jitterTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterXTransform = () => {\n Factory.registerTransform(\n 'jitterX',\n { transform: jitterXTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerJitterYTransform = () => {\n Factory.registerTransform(\n 'jitterY',\n { transform: jitterYTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n\nexport const registerSymmetryTransform = () => {\n Factory.registerTransform(\n 'symmetry',\n { transform: symmetryTransform, markPhase: 'afterEncodeItems' } as Omit,\n true\n );\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\n\nexport class LineLikeSeriesSpecTransformer extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: any): void {\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n if (!isPointVisible) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.line);\n } else {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.line,\n 'lineLabel' as any,\n 'initLineLabelMarkStyle' as any,\n undefined,\n true\n );\n }\n}\n","import type { IRegion, ISeriesFilter } from '../region/interface';\nimport type { ISeries } from '../series/interface';\nimport { isFunction } from './type';\n\nexport function eachSeries(regions: IRegion[], callback: (s: ISeries) => boolean | void, filter?: ISeriesFilter) {\n let flag = false;\n if (callback && isFunction(callback)) {\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n flag = !!callback.call(null, s);\n if (flag) {\n return flag;\n }\n }\n }\n }\n return flag;\n}\n\nexport function getSeries(regions: IRegion[], filter?: ISeriesFilter) {\n const result: ISeries[] = [];\n for (const r of regions) {\n for (const s of r.getSeries(filter)) {\n result.push(s);\n }\n }\n return result;\n}\n\nexport const getFirstSeries = (regions: IRegion[], coordinateType?: 'cartesian' | 'polar') => {\n for (let i = 0; i < regions.length; i++) {\n const r = regions[i];\n const series = r.getSeries();\n for (let j = 0; j < series.length; j++) {\n const s = series[j];\n if (coordinateType && s && s.coordinate === coordinateType) {\n return s;\n }\n if (!coordinateType && s) {\n return s;\n }\n }\n }\n return null;\n};\n","import { isValidNumber, last } from '@visactor/vutils';\nimport type { CartesianAxis } from '../../../component';\nimport type { LinearAxisMixin } from '../../../component/axis/mixin/linear-axis-mixin';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n break?: boolean;\n};\n\nexport function isValidAlignDomain(domain: number[]): boolean {\n return domain.length >= 2 && isValidNumber(domain[0]) && isValidNumber(last(domain)) && last(domain) >= domain[0];\n}\n\nexport function getScaleInfo(axis: LinearAxisMixin, domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = last(domain) - domain[0];\n const includeZero = last(domain) * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = last(domain) > 0 ? last(domain) - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n const domainSpec = axis.getDomainSpec();\n const result: ScaleInfo = {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: !isValidNumber(domainSpec.min),\n extendable_max: !isValidNumber(domainSpec.max)\n };\n if (axis._break?.scope) {\n // 当前轴有截断\n const index = domain.findIndex(value => value >= 0);\n\n let scope;\n let domainTemp;\n // 得到0值位置\n if (index === 0) {\n scope = axis._break.scope[index];\n domainTemp = [domain[0], domain[1]];\n result.positive = 1;\n result.negative = 0;\n } else {\n // 如果最大值小于 0\n if (last(domain) <= 0) {\n result.positive = 0;\n result.negative = 1;\n domainTemp = [domain[domain.length - 2], domain[domain.length - 1]];\n } else {\n // 0值在中间\n scope = axis._break.scope[index - 1];\n domainTemp = [domain[index - 1], domain[index]];\n // 得到0值在range中的实际比例\n result.negative = scope[0] + ((0 - domainTemp[0]) / (domainTemp[1] - domainTemp[0])) * (scope[1] - scope[0]);\n result.positive = 1 - result.negative;\n }\n }\n // 只要有截断,就不做domain修改\n result.break = true;\n result.extendable_max = false;\n result.extendable_min = false;\n result.domain = domainTemp;\n }\n return result;\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport const zeroAlign = (targetAxis: CartesianAxis, currentAxis: CartesianAxis) => {\n const s1 = targetAxis.getScale();\n const s2 = currentAxis.getScale();\n\n if (!s1 || !s2) {\n return;\n }\n\n const domain1 = (targetAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n const domain2 = (currentAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n\n if (!domain1 || !domain2 || !isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return;\n }\n\n // 先分别获取正负比例\n const info1 = getScaleInfo((targetAxis), domain1);\n const info2 = getScaleInfo((currentAxis), domain2);\n if (info1.break === true && info2.break === true) {\n return;\n }\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return;\n }\n domain1[0] = 0;\n } else {\n return;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return;\n }\n domain1[1] = 0;\n } else {\n return;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return;\n }\n }\n }\n s1.domain(domain1);\n s2.domain(domain2);\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport { AABBBounds, degreeToRadian } from '@visactor/vutils';\nimport type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { initTextMeasure } from '../../util/text';\nimport type { ICartesianTickDataOpt, IOrientType, ITickData } from '../type';\n\nexport const convertDomainToTickData = (domain: any[]): ITickData[] => {\n const ticks = domain.map((t: number, index: number) => {\n return {\n index,\n value: t\n };\n });\n return ticks;\n};\n\n/** 判断两个label是否有重叠情况 */\nexport const labelOverlap = (prevLabel: AABBBounds, nextLabel: AABBBounds, gap = 0): boolean => {\n const prevBounds = new AABBBounds(prevLabel).expand(gap / 2);\n const nextBounds = new AABBBounds(nextLabel).expand(gap / 2);\n return prevBounds.intersects(nextBounds);\n};\n\n/** 判断两个不相交的label相隔的距离 */\nexport const labelDistance = (prevLabel: AABBBounds, nextLabel: AABBBounds): [number, number] => {\n let horizontal = 0;\n if (prevLabel.x2 < nextLabel.x1) {\n horizontal = nextLabel.x1 - prevLabel.x2;\n } else if (nextLabel.x2 < prevLabel.x1) {\n horizontal = prevLabel.x1 - nextLabel.x2;\n }\n\n let vertical = 0;\n if (prevLabel.y2 < nextLabel.y1) {\n vertical = nextLabel.y1 - prevLabel.y2;\n } else if (nextLabel.y2 < prevLabel.y1) {\n vertical = prevLabel.y1 - nextLabel.y2;\n }\n\n return [horizontal, vertical];\n};\n\nexport const MIN_TICK_GAP = 12;\n\nconst calculateFlushPos = (basePosition: number, size: number, rangePosition: number, otherEnd: number) => {\n return rangePosition < basePosition\n ? Math.max(basePosition - size / 2, rangePosition)\n : rangePosition > basePosition\n ? Math.min(basePosition - size / 2, rangePosition - size)\n : rangePosition < otherEnd\n ? rangePosition\n : rangePosition - size;\n};\n\nexport const getCartesianLabelBounds = (scale: IBaseScale, domain: any[], op: ICartesianTickDataOpt): AABBBounds[] => {\n const { labelStyle, axisOrientType, labelFlush, labelFormatter, startAngle = 0 } = op;\n let labelAngle = labelStyle.angle ?? 0;\n if (labelStyle.direction === 'vertical') {\n labelAngle += degreeToRadian(90);\n }\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const isVertical = ['left', 'right'].includes(axisOrientType);\n let scaleX = 1;\n let scaleY = 0;\n if (isHorizontal) {\n // nothing to update\n } else if (isVertical) {\n scaleX = 0;\n scaleY = 1;\n } else if (startAngle) {\n scaleX = Math.cos(startAngle);\n scaleY = -Math.sin(startAngle);\n }\n\n const textMeasure = initTextMeasure(labelStyle);\n const range = scale.range();\n const labelBoundsList = domain.map((v: any, i: number) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const pos = scale.scale(v);\n const baseTextX = scaleX * pos;\n const baseTextY = scaleY * pos;\n let textX = baseTextX;\n let textY = baseTextY;\n\n let align: TextAlignType;\n if (labelFlush && isHorizontal && i === 0) {\n textX = calculateFlushPos(baseTextX, textWidth, range[0], range[range.length - 1]);\n } else if (labelFlush && isHorizontal && i === domain.length - 1) {\n textX = calculateFlushPos(baseTextX, textWidth, range[range.length - 1], range[0]);\n } else {\n align = labelStyle.textAlign ?? 'center';\n }\n if (align === 'right') {\n textX -= textWidth;\n } else if (align === 'center') {\n textX -= textWidth / 2;\n }\n\n let baseline: TextBaselineType;\n if (labelFlush && isVertical && i === 0) {\n textY = calculateFlushPos(baseTextY, textHeight, range[0], range[range.length - 1]);\n } else if (labelFlush && isVertical && i === domain.length - 1) {\n textY = calculateFlushPos(baseTextY, textHeight, range[range.length - 1], range[0]);\n } else {\n baseline = labelStyle.textBaseline ?? 'middle';\n }\n if (baseline === 'bottom') {\n textY -= textHeight;\n } else if (baseline === 'middle') {\n textY -= textHeight / 2;\n }\n\n // 计算 label 包围盒\n const bounds = new AABBBounds().set(textX, textY, textX + textWidth, textY + textHeight);\n\n if (labelAngle) {\n bounds.rotate(labelAngle, baseTextX, baseTextY);\n }\n\n return bounds;\n });\n\n return labelBoundsList;\n};\n\nexport const isAxisHorizontal = (axisOrientType: IOrientType) => {\n return (['bottom', 'top', 'z'] as IOrientType[]).includes(axisOrientType);\n};\n","import type { Datum } from '../../../typings';\nimport type { CartesianAxis } from '../../../component';\nimport { convertDomainToTickData } from '@visactor/vrender-components';\nimport { last } from '@visactor/vutils';\n\nexport interface ITickAlignOpt {\n targetAxis: () => CartesianAxis;\n currentAxis: () => CartesianAxis;\n}\n\nexport const tickAlign = (data: Array, op: ITickAlignOpt) => {\n if (!data) {\n return data;\n }\n // check align enable\n const targetAxis = op?.targetAxis?.();\n if (!targetAxis) {\n return data;\n }\n const currentAxis = op?.currentAxis?.();\n if (!currentAxis) {\n return data;\n }\n const currentData = currentAxis.getTickData()?.getDataView();\n if (!currentData) {\n return data;\n }\n // TODO 这种方法有点hack\n const currentTickTransform = currentData.transformsArr.find(t => t.type.includes('ticks'));\n if (!currentTickTransform) {\n return data;\n }\n const currentScale = currentAxis.getScale();\n if (!currentScale) {\n return data;\n }\n const targetData = targetAxis.getTickData()?.getDataView()?.latestData;\n if (!targetData?.length) {\n return data;\n }\n const targetScale = targetAxis.getScale();\n if (!targetScale) {\n return data;\n }\n const targetDomain = targetScale.domain();\n const targetRange = last(targetDomain) - targetDomain[0];\n if (targetRange === 0) {\n return data;\n }\n const currentDomain = currentScale.domain();\n const currentRange = last(currentDomain) - currentDomain[0];\n if (targetRange === 0) {\n return data;\n }\n // make the tickData of the current axis consistent with the tickData of the target axis\n const newTicks: number[] = targetData.map((d: { value: number }) => {\n const percent = (d.value - targetDomain[0]) / targetRange;\n return currentRange * percent + currentDomain[0];\n });\n return convertDomainToTickData(newTicks);\n};\n","import type { IBasePlugin, IBasePluginService } from './interface';\nimport { createID } from '../../util/id';\n\nexport class BasePlugin implements IBasePlugin {\n readonly id: number;\n readonly name: string;\n readonly type: string;\n protected service?: T;\n\n constructor(type: string) {\n this.id = createID();\n this.name = `${type}_${this.id}`;\n }\n\n onAdd(service: T): void {\n this.service = service;\n }\n\n release(): void {\n this.service = null;\n }\n}\n","import { ChartEvent } from '../../../constant/event';\nimport { zeroAlign } from './zero-align-transform';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport type { CartesianAxis, ICartesianLinearAxisSpec, ILinearAxisSync } from '../../../component/axis/cartesian';\nimport { isContinuous } from '@visactor/vscale';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { tickAlign } from './tick-align-transform';\nimport { BasePlugin } from '../../base/base-plugin';\n\nexport class AxisSyncPlugin\n extends BasePlugin\n implements IComponentPlugin\n{\n static readonly pluginType: 'component' = 'component';\n static readonly type: string = 'AxisSyncPlugin';\n readonly type: string = 'AxisSyncPlugin';\n\n constructor() {\n super(AxisSyncPlugin.type);\n }\n\n protected _checkEnableSync(axis: CartesianAxis): ILinearAxisSync | false {\n if (!isContinuous(axis.getScale().type)) {\n return false;\n }\n const sync = (axis.getSpec() as ICartesianLinearAxisSpec).sync as ILinearAxisSync;\n if (!sync?.axisId) {\n return false;\n }\n return sync;\n }\n\n private _getTargetAxis(axis: CartesianAxis, sync: ILinearAxisSync) {\n const targetAxis = axis.getOption().getChart().getComponentByUserId(sync.axisId) as CartesianAxis;\n if (!targetAxis?.type.startsWith('cartesianAxis')) {\n return null;\n }\n return targetAxis;\n }\n\n onInit(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n if (!sync.zeroAlign) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n // because of if the to axes bind in same region, the region will update them both in the data update.\n axis.event.on(\n ChartEvent.scaleDomainUpdate,\n { filter: ({ model }) => model.id === axis.id || model.id === targetAxis.id },\n () => {\n zeroAlign(targetAxis, axis);\n }\n );\n }\n\n onDidCompile(service: IComponentPluginService, axis: CartesianAxis) {\n const sync = this._checkEnableSync(axis);\n if (!sync) {\n return;\n }\n const targetAxis = this._getTargetAxis(axis, sync);\n if (!targetAxis) {\n return;\n }\n if (sync.tickAlign) {\n registerDataSetInstanceTransform(axis.getOption().dataSet, 'tickAlign', tickAlign);\n const opt = {\n targetAxis: () => targetAxis,\n currentAxis: () => axis\n };\n // only make this one follow target\n axis.addTransformToTickData({ type: 'tickAlign', options: opt, level: Number.MAX_SAFE_INTEGER }, false);\n }\n }\n}\n","import { degreeToRadian, isEmpty, isFunction } from '@visactor/vutils';\nimport type { Datum } from '../typings';\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n\n/**\n * 针对一些可以配置状态样式的属性的转换函数,结构如下:\n * { style: {}, state: { hover: {} } }\n * @param cfg\n * @returns\n */\nexport function transformComponentStyle(cfg: any = {}) {\n const newConfig = {\n ...cfg\n };\n\n if (isFunction(cfg.style)) {\n newConfig.style = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.style(item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.style)) {\n newConfig.style = transformToGraphic(cfg.style);\n }\n\n if (!isEmpty(cfg.state)) {\n const newStateStyle = {};\n Object.keys(cfg.state).forEach(key => {\n if (isFunction(cfg.state[key])) {\n newStateStyle[key] = (item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) =>\n transformToGraphic(cfg.state[key](item, isSelected, index, allItems));\n } else if (!isEmpty(cfg.state[key])) {\n newStateStyle[key] = transformToGraphic(cfg.state[key]);\n }\n });\n newConfig.state = newStateStyle;\n }\n\n return newConfig;\n}\n\nexport function transformStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (value: any, index: number, datum: Datum, data: Datum[]) =>\n transformToGraphic(stateStyle[key](value, index, datum, data));\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformAxisLabelStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(stateStyle).forEach(key => {\n if (isFunction(stateStyle[key])) {\n newStateStyle[key] = (datum: Datum, index: number, data: Datum[], layer?: number) => {\n return transformToGraphic(stateStyle[key](datum.rawValue, index, datum, data, layer));\n };\n } else if (!isEmpty(stateStyle[key])) {\n newStateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return newStateStyle;\n}\n\nexport function transformIndicatorStyle(style: any, datum: any) {\n if (isEmpty(style)) {\n return null;\n }\n const newStateStyle = {};\n Object.keys(style).forEach(key => {\n if (isFunction(style[key])) {\n newStateStyle[key] = style[key](datum);\n } else {\n newStateStyle[key] = style[key];\n }\n });\n return transformToGraphic(newStateStyle);\n}\n\nexport function transformToGraphic(style: any) {\n if (style?.angle) {\n style.angle = degreeToRadian(style.angle);\n }\n\n return style;\n}\n","import { get } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IOrientType, IPolarOrientType } from '../../typings';\nimport type { AxisType, ICommonAxisSpec, ILinearAxisSpec } from './interface';\nimport { transformComponentStyle } from '../../util/style';\nimport { isXAxis, isYAxis } from './cartesian/util/common';\nimport { getComponentThemeFromOption } from '../util';\nimport type { ITheme } from '../../theme';\nimport type { IAxisHelper } from './cartesian';\nimport type { IPolarAxisHelper } from './polar';\n\nexport const DEFAULT_TITLE_STYLE = {\n left: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n right: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n radius: {},\n angle: {}\n};\n\nexport function transformAxisLineStyle(lineCfg: any) {\n lineCfg = transformComponentStyle(lineCfg);\n lineCfg.startSymbol = transformComponentStyle(lineCfg.startSymbol);\n lineCfg.endSymbol = transformComponentStyle(lineCfg.endSymbol);\n\n return lineCfg;\n}\n\nexport function getAxisLabelOffset(axisSpec: ICommonAxisSpec) {\n let labelOffset = 0;\n if (get(axisSpec, 'tick.visible')) {\n labelOffset += get(axisSpec, 'tick.tickSize');\n }\n\n if (get(axisSpec, 'label.visible')) {\n labelOffset += get(axisSpec, 'label.space');\n }\n\n return labelOffset;\n}\n\nexport function getLinearAxisSpecDomain(\n axisSpec: ILinearAxisSpec,\n defaultDomain?: {\n min?: number;\n max?: number;\n }\n) {\n // 兼容策略\n return {\n min: axisSpec.min ?? axisSpec.range?.min ?? defaultDomain?.min,\n max: axisSpec.max ?? axisSpec.range?.max ?? defaultDomain?.max\n };\n}\n\nexport function isValidCartesianAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'top' || orient === 'bottom' || orient === 'left' || orient === 'right' || orient === 'z';\n}\n\nexport function isValidPolarAxis(spec: any) {\n const orient = spec?.orient;\n return orient === 'angle' || orient === 'radius';\n}\n\nexport const getCartesianAxisTheme = (orient: IOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : (['linear', 'log', 'symlog'] as AxisType[]).includes(type)\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme = isXAxis(orient)\n ? getComponentThemeFromOption('axisX', chartTheme)\n : isYAxis(orient)\n ? getComponentThemeFromOption('axisY', chartTheme)\n : getComponentThemeFromOption('axisZ', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const getPolarAxisTheme = (orient: IPolarOrientType, type: AxisType, chartTheme: ITheme) => {\n const axisTypeTheme =\n (type === 'band'\n ? getComponentThemeFromOption('axisBand', chartTheme)\n : type === 'linear'\n ? getComponentThemeFromOption('axisLinear', chartTheme)\n : {}) ?? {};\n const axisTheme =\n orient === 'angle'\n ? getComponentThemeFromOption('axisAngle', chartTheme)\n : getComponentThemeFromOption('axisRadius', chartTheme);\n return mergeSpec({}, getComponentThemeFromOption('axis', chartTheme), axisTypeTheme, axisTheme);\n};\n\nexport const isDiscreteAxis = (axisType: AxisType) =>\n axisType === 'band' || axisType === 'ordinal' || axisType === 'point';\n\nexport function getAxisItem(value: any, normalizedValue: number) {\n return {\n id: value,\n label: value,\n value: normalizedValue,\n rawValue: value\n };\n}\n\n// 更新的条件: 指定绑定关系 或 初次绑定 或 更新前后id一致(防止声明多个轴时, 后面的轴覆盖前面的轴)\nexport function shouldUpdateAxis(\n preHelper: IAxisHelper | IPolarAxisHelper,\n curHelper: IAxisHelper | IPolarAxisHelper,\n forceUpdate: boolean\n) {\n return forceUpdate || !preHelper || preHelper.getAxisId() === curHelper.getAxisId();\n}\n","import type { IComponentPlugin, IComponentPluginService } from './interface';\nimport type { IComponent } from '../../component/interface';\nimport { BasePluginService } from '../base/base-plugin-service';\n\nexport class ComponentPluginService\n extends BasePluginService\n implements IComponentPluginService\n{\n component: IComponent;\n\n constructor(component: IComponent) {\n super();\n this.component = component;\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.component = null;\n }\n}\n","import type { Tag } from '@visactor/vrender-components';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { Datum } from '../../../typings';\nimport type { ICrosshairTheme } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../axis/cartesian/util/common';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianAxisCommonSpec, IPolarAxisCommonSpec } from '../../axis';\nimport { getComponentThemeFromOption } from '../../util';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { ITheme } from '../../../theme';\nimport { isDiscreteAxis } from '../../axis/util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport function limitTagInBounds(shape: Tag, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n\n/**\n * 查找系列中的数据\n * @todo 待重构优化,和 `getDimensionData` 中的逻辑存在重合\n * @param data 系列数据\n * @param value 数据值\n * @param startField 开始值对应的字段\n * @param endField 结束值对应的字段\n * @returns 系列数据\n */\nexport function getDatumByValue(data: Datum[], value: number, startField: string, endField?: string): Datum | null {\n for (let i = 0, len = data.length; i < len; i++) {\n const record = data[i];\n\n if (record) {\n const startValue = record[startField];\n const endValue = record[endField || startField];\n\n if (startValue <= value && endValue >= value) {\n return record;\n }\n }\n }\n\n return null;\n}\n\nexport const getCartesianCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: ICartesianAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, xField, yField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const xAxis = axes.find(axis => isXAxis(axis.orient));\n let newXField;\n if (isValid(xAxis)) {\n newXField = mergeSpec({}, isDiscreteAxis(xAxis.type) ? bandField : linearField, xField);\n } else {\n newXField = xField;\n }\n\n const yAxis = axes.find(axis => isYAxis(axis.orient));\n let newYField;\n if (isValid(yAxis)) {\n newYField = mergeSpec({}, isDiscrete(yAxis.type) ? bandField : linearField, yField);\n } else {\n newYField = yField;\n }\n\n return {\n xField: newXField,\n yField: newYField\n };\n};\n\nexport const getPolarCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: IPolarAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, categoryField, valueField } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const angleAxis = axes.find(axis => axis.orient === 'angle');\n let newAngleField;\n if (isValid(angleAxis)) {\n newAngleField = mergeSpec({}, isDiscreteAxis(angleAxis.type) ? bandField : linearField, categoryField);\n } else {\n newAngleField = categoryField;\n }\n\n const radiusAxis = axes.find(axis => axis.orient === 'radius');\n let newRadiusField;\n if (isValid(radiusAxis)) {\n newRadiusField = mergeSpec({}, isDiscrete(radiusAxis.type) ? bandField : linearField, valueField);\n } else {\n newRadiusField = valueField;\n }\n\n return {\n categoryField: newAngleField,\n valueField: newRadiusField\n };\n};\n","import type { ITheme } from '../../theme';\nimport { Direction, type IOrientType } from '../../typings';\nimport { getDirectionByOrient, getOrient } from '../axis/cartesian/util/common';\nimport { getCartesianAxisTheme, getPolarAxisTheme } from '../axis/util';\nimport { getCartesianCrosshairTheme, getPolarCrosshairTheme } from '../crosshair/utils';\nimport type { ComponentThemeWithDirection } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { getComponentThemeFromOption } from '../util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport function getComponentThemeFromGlobalTheme(\n type: ComponentTypeEnum,\n chartTheme: ITheme,\n componentSpec: any,\n chartSpec: any\n) {\n switch (type) {\n case ComponentTypeEnum.cartesianBandAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'band', chartTheme);\n case ComponentTypeEnum.cartesianLinearAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'linear', chartTheme);\n case ComponentTypeEnum.cartesianLogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'log', chartTheme);\n case ComponentTypeEnum.cartesianSymlogAxis:\n return getCartesianAxisTheme(getOrient(componentSpec, ['z']), 'symlog', chartTheme);\n case ComponentTypeEnum.cartesianAxis:\n case ComponentTypeEnum.cartesianTimeAxis:\n return getCartesianAxisTheme(getOrient(componentSpec), undefined, chartTheme);\n case ComponentTypeEnum.polarBandAxis:\n return getPolarAxisTheme(componentSpec.orient, 'band', chartTheme);\n case ComponentTypeEnum.polarLinearAxis:\n return getPolarAxisTheme(componentSpec.orient, 'linear', chartTheme);\n case ComponentTypeEnum.polarAxis:\n return getPolarAxisTheme(componentSpec.orient, undefined, chartTheme);\n case ComponentTypeEnum.cartesianCrosshair:\n return getCartesianCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.polarCrosshair:\n return getPolarCrosshairTheme(chartTheme, chartSpec);\n case ComponentTypeEnum.colorLegend:\n case ComponentTypeEnum.sizeLegend:\n case ComponentTypeEnum.discreteLegend:\n case ComponentTypeEnum.dataZoom:\n case ComponentTypeEnum.scrollBar:\n return getComponentThemeWithDirection(componentSpec, getComponentThemeFromOption(type, chartTheme));\n default:\n return getComponentThemeFromOption(type, chartTheme);\n }\n}\n\nexport const getComponentThemeWithDirection = (\n componentSpec: { orient?: IOrientType },\n originalTheme: ComponentThemeWithDirection\n): T => {\n const orient = componentSpec.orient ?? originalTheme.orient;\n const directionTheme = originalTheme[getDirectionByOrient(orient)];\n const finalTheme = mergeSpec({}, originalTheme, directionTheme);\n\n delete finalTheme[Direction.horizontal];\n delete finalTheme[Direction.vertical];\n return finalTheme;\n};\n","import { BaseModelSpecTransformer } from '../../model';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { ComponentTypeEnum } from '../interface';\nimport type { IComponentSpec } from './interface';\nimport { getComponentThemeFromGlobalTheme } from './util';\n\nexport class BaseComponentSpecTransformer<\n T extends IComponentSpec = IComponentSpec,\n K = any\n> extends BaseModelSpecTransformer {\n getTheme(spec: T, chartSpec: any): K {\n return getComponentThemeFromGlobalTheme(this.type as ComponentTypeEnum, this._option.getTheme(), spec, chartSpec);\n }\n\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const { spec: newSpec, theme } = super._mergeThemeToSpec(spec, chartSpec);\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n\n protected _adjustPadding(spec: T) {\n // 默认忽略外侧 padding\n const { padding, noOuterPadding = true, orient } = spec;\n if (noOuterPadding && padding && orient) {\n spec.padding = {\n ...normalizeLayoutPaddingSpec(padding),\n [orient]: 0\n };\n }\n }\n}\n","import { CustomEvent, type IGraphicAttribute, type IGraphic, type IGroup, type INode } from '@visactor/vrender-core';\nimport type { IRegion } from '../../region/interface';\nimport type { IComponent, IComponentOption } from '../interface';\nimport { ComponentPluginService } from '../../plugin/components/plugin-service';\nimport type { IComponentPluginService, IComponentPlugin } from '../../plugin/components/interface';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { Event_Source_Type } from '../../constant/event';\nimport type { IAnimate } from '../../animation/interface';\nimport { AnimateManager } from '../../animation/animate-manager';\n// import { preprocessSpecOrTheme } from '../../util/spec/preprocess';\nimport type { Datum, ILayoutRect } from '../../typings';\nimport type { IComponentSpec } from './interface';\nimport { LayoutModel } from '../../model/layout-model';\nimport { BaseComponentSpecTransformer } from './base-component-transformer';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\n\nexport class BaseComponent extends LayoutModel implements IComponent {\n static transformerConstructor = BaseComponentSpecTransformer;\n name: string = 'component';\n readonly modelType: string = 'component';\n readonly transformerConstructor = BaseComponentSpecTransformer as any;\n pluginService?: IComponentPluginService;\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption): IComponent {\n const { spec, ...others } = specInfo;\n return new this(spec, {\n ...options,\n ...others\n });\n }\n\n protected declare _option: IComponentOption;\n\n protected _regions: IRegion[];\n getRegions() {\n return this._regions;\n }\n\n protected _container: IGroup;\n\n created() {\n super.created();\n this.initLayout();\n this.pluginService = new ComponentPluginService(this);\n }\n\n animate?: IAnimate;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n // 创建组件自己的动画管理器\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: options.getCompiler\n });\n }\n }\n\n initLayout(): void {\n super.initLayout();\n this._regions = this._regions ?? this._option.getRegionsInIndex();\n this._layout && (this._layout.layoutBindRegionID = this._regions.map(x => x?.id));\n }\n\n changeRegions(regions: IRegion[]): void {\n throw new Error('Method not implemented.');\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n throw new Error('Method not implemented.');\n }\n onRender(ctx: IModelRenderOption): void {\n throw new Error('Method not implemented.');\n }\n\n getVRenderComponents() {\n return this._getNeedClearVRenderComponents();\n }\n\n protected callPlugin(cb: (plugin: IComponentPlugin) => void) {\n if (this.pluginService) {\n this.pluginService.getAll().forEach(plugin => cb(plugin));\n }\n }\n\n protected getContainer() {\n if (!this._container) {\n this._container = this._option?.globalInstance.getStage().find(node => node.name === 'root', true) as IGroup;\n }\n\n return this._container;\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['seriesId', 'seriesIndex', 'regionId', 'regionIndex'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n if ((prevSpec as any)?.visible !== (spec as any).visible) {\n result.reCompile = true;\n }\n return result;\n }\n\n release() {\n super.release();\n this.clear();\n\n this.pluginService?.releaseAll();\n this.pluginService = null;\n }\n\n clear() {\n const components = this._getNeedClearVRenderComponents();\n if (components && components.length) {\n components.forEach(c => {\n if (c) {\n this.getContainer()?.removeChild(c as unknown as INode);\n c = null;\n }\n });\n }\n this._container = null;\n this.pluginService?.clearAll();\n }\n\n compile(): void {\n this.compileMarks();\n this.reAppendComponents();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group, context: { model: this } });\n });\n }\n\n reAppendComponents() {\n const components = this._getNeedClearVRenderComponents();\n if (components && components.length) {\n components.forEach(c => {\n if (c && !c.stage) {\n // component is removed remove stage\n\n this.getContainer()?.appendChild(c as unknown as INode);\n }\n });\n }\n }\n\n // 代理组件本身的事件(非内部图形),如坐标轴整体的点击等\n protected _delegateEvent = (component: IGraphic, event: any, type: string, item: any = null, datum: Datum = null) => {\n // 组件这里只代理基础的事件,自定义事件不需要代理\n if (!(event instanceof CustomEvent)) {\n this.event.emit(\n type,\n {\n model: this,\n node: component,\n event,\n item: item,\n datum: datum,\n source: Event_Source_Type.chart,\n chart: this._option?.globalInstance?.getChart()\n },\n 'model'\n );\n }\n };\n\n getBoundsInRect(rect: ILayoutRect, fullRect: ILayoutRect): IBoundsLike {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n\n getDatum(graphic?: IGraphic>) {\n // override\n return;\n }\n}\n","import isPlainObject from './isPlainObject';\nimport isString from './isString';\n\nexport default function pickWithout>(obj: T, keys: (string | RegExp)[]): Partial {\n if (!obj || !isPlainObject(obj)) {\n return obj;\n }\n const result = {};\n\n Object.keys(obj).forEach((k: string) => {\n const v = obj[k];\n\n let match = false;\n\n keys.forEach(itKey => {\n if (isString(itKey) && itKey === k) {\n match = true;\n } else if (itKey instanceof RegExp && k.match(itKey)) {\n match = true;\n }\n });\n\n if (!match) {\n result[k] = v;\n }\n });\n\n return result as Partial;\n}\n","import { Factory } from './../core/factory';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType } from '@visactor/vgrammar-core';\nimport type { ICommonSpec } from '../typings';\nimport { BaseMark } from './base/base-mark';\nimport type { IComponentMark, IMarkOption } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\n\nexport class ComponentMark extends BaseMark implements IComponentMark {\n static readonly type = MarkTypeEnum.component;\n type: string = 'component';\n\n private _componentType: string;\n private _mode: '2d' | '3d';\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n // 这里需要将 type 指定为具体的组件名称,即调用 vgrammar 的 registerComponent API 注册的组件名称\n this._componentType = option.componentType;\n this._mode = option.mode;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view\n .mark(GrammarMarkType.component, group ?? view.rootMark, { componentType: this._componentType, mode: this._mode })\n .id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerComponentMark = () => {\n Factory.registerMark(ComponentMark.type, ComponentMark);\n};\n","import type { EasingType, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { ACustomAnimate, AnimateMode } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\nimport { cloneDeep, interpolateString, isEqual, isValidNumber } from '@visactor/vutils';\nimport { traverseGroup } from '../../util';\n\nexport class GroupTransition extends ACustomAnimate {\n declare target: IGroup;\n\n private _newElementAttrMap: Dict;\n mode = AnimateMode.NORMAL; // 组件的群组动画不需要设置走 AnimateMode.SET_ATTR_IMMEDIATELY\n\n onBind(): void {\n // @ts-ignore\n const currentInnerView = this.target.getInnerView();\n // @ts-ignore\n const prevInnerView = this.target.getPrevInnerView();\n if (!prevInnerView) {\n return;\n }\n\n this._newElementAttrMap = {};\n\n // 遍历新的场景树,将新节点属性更新为旧节点\n // TODO: 目前只处理更新场景\n traverseGroup(currentInnerView, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n const oldEl = prevInnerView[el.id];\n if (oldEl) {\n if (!isEqual((el as IGraphic).attribute, (oldEl as IGraphic).attribute)) {\n // 更新\n const newProps = cloneDeep((el as IGraphic).attribute);\n this._newElementAttrMap[el.id] = {\n state: 'update',\n node: el,\n attrs: {\n ...newProps,\n opacity: newProps.opacity ?? 1,\n fillOpacity: newProps.fillOpacity ?? 1,\n strokeOpacity: newProps.strokeOpacity ?? 1\n }\n };\n\n (el as IGraphic).setAttributes((oldEl as IGraphic).attribute);\n }\n } else {\n // 新入场元素,进行 fadeIn 动画\n const finalOpacityAttrs = {\n opacity: el.attribute.opacity ?? 1,\n fillOpacity: el.attribute.fillOpacity ?? 1,\n strokeOpacity: el.attribute.strokeOpacity ?? 1\n };\n this._newElementAttrMap[el.id] = {\n state: 'enter',\n node: el,\n attrs: finalOpacityAttrs\n };\n (el as IGraphic).setAttributes({\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n });\n }\n }\n });\n }\n\n onStart(): void {\n let duration = this.duration;\n let easing = this.easing;\n\n // 新的场景树\n this._newElementAttrMap &&\n Object.keys(this._newElementAttrMap).forEach(id => {\n const { node, attrs, state } = this._newElementAttrMap[id];\n if (state === 'enter') {\n const { enter = {} } = this.params ?? {};\n duration = isValidNumber(enter.duration) ? enter.duration : duration;\n easing = enter.easing ? enter.easing : easing;\n }\n if ((node as IGraphic).type === 'path') {\n (node as IGraphic)\n .animate({\n interpolate(key: string, ratio: number, from: any, to: any, nextAttributes: any) {\n if (key === 'path') {\n nextAttributes.path = interpolateString(from, to)(ratio);\n return true;\n }\n\n return false;\n }\n })\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n } else {\n (node as IGraphic)\n .animate()\n // .wait(delay)\n .to(attrs, duration, easing as EasingType);\n }\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // do nothing\n }\n}\n","import type { IGroup } from '../interface/graphic/group';\nimport { ACustomAnimate } from './animate';\n\nexport class GroupFadeIn extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: ratio\n }\n });\n }\n}\n\nexport class GroupFadeOut extends ACustomAnimate {\n declare target: IGroup;\n\n getEndProps(): Record {\n return {};\n }\n\n onBind(): void {\n this.target.setTheme({\n common: {\n opacity: 1\n }\n });\n return;\n }\n\n onEnd(): void {\n this.target.setTheme({\n common: {\n opacity: 0\n }\n });\n return;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n this.target.setTheme({\n common: {\n opacity: 1 - ratio\n }\n });\n }\n}\n","import type { Parser } from '@visactor/vdataset';\nimport type { IBaseScale } from '@visactor/vscale';\n\n/**\n * dataView数据 解析器\n * @param data\n * @param options\n * @param dataView\n * @returns\n */\nexport const scaleParser: Parser = (scale: IBaseScale) => {\n return scale;\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport type { ITickDataOpt } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport type { IGraphic } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n IOrientType,\n IPolarOrientType,\n Datum,\n StringOrNumber,\n IGroup as ISeriesGroup,\n CoordinateType\n} from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport { CompilableData } from '../../compile/data';\nimport type { IAxis, ICommonAxisSpec, ITick } from './interface';\nimport { ComponentTypeEnum, type IComponentOption } from '../interface';\nimport { eachSeries, getSeries } from '../../util/model';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../../series/interface';\nimport { ChartEvent } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { animationConfig } from '../../animation/utils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n degreeToRadian,\n pickWithout,\n isEqual,\n array,\n get,\n isArray,\n isFunction,\n isNil,\n isValid,\n maxInArray\n} from '@visactor/vutils';\nimport { DEFAULT_TITLE_STYLE, transformAxisLineStyle } from './util';\nimport { transformAxisLabelStateStyle, transformStateStyle, transformToGraphic } from '../../util/style';\nimport type { ITransformOptions } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataView } from '@visactor/vdataset';\nimport { GridEnum } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerComponentMark } from '../../mark/component';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { AXIS_ELEMENT_NAME, GroupTransition } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupFadeOut, GroupFadeIn } from '@visactor/vrender-core';\nimport { scaleParser } from '../../data/parser/scale';\nimport { registerDataSetInstanceParser } from '../../data/register';\nimport { getFormatFunction } from '../util';\nimport type { IComponentMark } from '../../mark/interface/mark';\n\nexport abstract class AxisComponent = any> // FIXME: 补充公共类型,去掉 Record\n extends BaseComponent\n implements IAxis\n{\n static specKey = 'axes';\n specKey = 'axes';\n\n protected _orient: IPolarOrientType | IOrientType;\n getOrient() {\n return this._orient;\n }\n\n protected _scale!: IBaseScale;\n getScale() {\n return this._scale;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tickData: CompilableData[] = [];\n getTickData(index = 0) {\n return this._tickData[index];\n }\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionIndex?: number[];\n\n /**\n * if axis will be shown\n */\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n /** 轴是否产生反转的真实值,在横向图表的竖轴上可能和用户在 spec 上配的值相反 */\n protected _inverse: boolean;\n getInverse() {\n return this._inverse;\n }\n\n protected _tick: ITick | undefined = undefined;\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n protected abstract axisHelper(): any;\n protected abstract getSeriesStatisticsField(s: ISeries): string[];\n protected abstract updateSeriesScale(): void;\n protected abstract collectSeriesField(depth: number, series: ISeries): string | string[];\n abstract transformScaleDomain(): void;\n protected abstract updateScaleRange(): boolean;\n protected abstract getDefaultInteractive(): boolean;\n\n protected _dataFieldText: string;\n protected _axisMark: IComponentMark;\n protected _gridMark: IComponentMark;\n\n protected _coordinateType: CoordinateType;\n getCoordinateType() {\n return this._coordinateType;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._visible = spec.visible ?? true;\n this._coordinateType = 'none';\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n getVRenderComponents() {\n return [\n this._axisMark?.getProduct()?.getGroupGraphicItem(),\n this._gridMark?.getProduct()?.getGroupGraphicItem()\n ].filter(isValid);\n }\n\n created() {\n super.created();\n //series and regions\n this.setSeriesAndRegionsFromSpec();\n // event\n this.initEvent();\n // scales\n this.initScales();\n this.updateSeriesScale();\n // data\n this._shouldComputeTickData() && this._initData();\n\n if (this._visible) {\n // 创建语法元素\n const axisMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}` },\n {\n componentType: this.getOrient() === 'angle' ? 'circleAxis' : 'axis',\n mode: this._spec.mode,\n noSeparateStyle: true\n },\n {\n skipTheme: true // skip theme of vgrammar to avoid merge\n }\n );\n this._axisMark = axisMark;\n axisMark.setMarkConfig({ zIndex: this.layoutZIndex });\n if (isValid(this._spec.id)) {\n axisMark.setUserId(this._spec.id);\n }\n axisMark.setMarkConfig({ interactive: this._spec.interactive ?? this.getDefaultInteractive() });\n this._marks.addMark(axisMark);\n\n if (this._spec.grid?.visible) {\n const gridMark = this._createMark(\n { type: 'component', name: `axis-${this.getOrient()}-grid` },\n {\n componentType: this.getOrient() === 'angle' ? GridEnum.circleAxisGrid : GridEnum.lineAxisGrid,\n mode: this._spec.mode,\n noSeparateStyle: true\n },\n {\n skipTheme: true\n }\n );\n gridMark.setMarkConfig({\n zIndex: this._spec.grid?.style?.zIndex ?? this._spec.grid?.zIndex ?? LayoutZIndex.Axis_Grid,\n interactive: false // 轴网格线关闭交互\n });\n this._marks.addMark(gridMark);\n this._gridMark = gridMark;\n }\n\n // Tip: 支持 spec.animationAppear.axis,并且坐标轴默认关闭动画\n if (\n this._option.animation !== false &&\n get(this._option.getChart().getSpec(), 'animation') !== false &&\n this._spec.animation === true\n ) {\n const axisAnimateConfig = animationConfig(Factory.getAnimationInKey('axis')?.(), {\n appear:\n this._spec.animationAppear ??\n get(this._option.getChart().getSpec(), 'animationAppear.axis') ??\n get(this._option.getChart().getSpec(), 'animationAppear'),\n disappear:\n this._spec.animationDisappear ??\n get(this._option.getChart().getSpec(), 'animationDisappear.axis') ??\n get(this._option.getChart().getSpec(), 'animationDisappear'),\n enter:\n this._spec.animationEnter ??\n get(this._option.getChart().getSpec(), 'animationEnter.axis') ??\n get(this._option.getChart().getSpec(), 'animationEnter'),\n exit:\n this._spec.animationExit ??\n get(this._option.getChart().getSpec(), 'animationExit.axis') ??\n get(this._option.getChart().getSpec(), 'animationExit'),\n update:\n this._spec.animationUpdate ??\n get(this._option.getChart().getSpec(), 'animationUpdate.axis') ??\n get(this._option.getChart().getSpec(), 'animationUpdate')\n });\n // 因为坐标轴的更新动画中处理了 enter,所以需要将 enter 的参数传入\n if (axisAnimateConfig.enter) {\n axisAnimateConfig.update[0].customParameters = {\n enter: axisAnimateConfig.enter[0]\n };\n }\n this._marks.forEach(m => m.setAnimationConfig(axisAnimateConfig));\n }\n }\n }\n\n protected _shouldComputeTickData() {\n // 当轴被展示、或者强制要求计算 data 时再计算 data\n return this.getVisible() || this._spec.forceInitTick;\n }\n\n // data\n protected _initData() {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n this._tickData = [new CompilableData(this._option, tickData)];\n }\n\n protected collectData(depth: number, rawData?: boolean) {\n const data: { min: number; max: number; values: any[] }[] = [];\n eachSeries(\n this._regions,\n s => {\n let field = this.collectSeriesField(depth, s);\n field = (isArray(field) ? (isContinuous(this._scale.type) ? field : [field[0]]) : [field]) as string[];\n if (!depth) {\n this._dataFieldText = s.getFieldAlias(field[0]);\n }\n\n if (field) {\n const viewData = s.getViewData();\n if (rawData) {\n field.forEach(f => {\n data.push(s.getRawDataStatisticsByField(f, false) as { min: number; max: number; values: any[] });\n });\n } else if (viewData && viewData.latestData && viewData.latestData.length) {\n const seriesData = s.getViewDataStatistics?.();\n const userSetBreaks =\n this.type === ComponentTypeEnum.cartesianLinearAxis && this._spec.breaks && this._spec.breaks.length;\n\n field.forEach(f => {\n if (seriesData?.latestData?.[f]) {\n if (userSetBreaks) {\n data.push({\n ...seriesData.latestData[f],\n values: viewData.latestData.map((obj: Datum) => obj[f])\n });\n } else {\n data.push(seriesData.latestData[f]);\n }\n }\n });\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return data;\n }\n\n protected isSeriesDataEnable() {\n let enable = true;\n eachSeries(\n this._regions,\n s => {\n if (isArray(s.getViewDataStatistics()?.latestData)) {\n enable = false;\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return enable;\n }\n\n protected setSeriesAndRegionsFromSpec() {\n const { seriesId, seriesIndex, regionId, regionIndex } = this._spec;\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId as string[], this._regionIndex);\n // _regions 被更新了,layoutBindRegionID 也要更新\n this.layout.layoutBindRegionID = this._regions.map(x => x.id);\n }\n\n getBindSeriesFilter() {\n return {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n };\n }\n\n protected initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n const viewStatistics = getSeries(this._regions, {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n })\n .map(s => s.getViewDataStatistics())\n .filter(v => !!v);\n\n if (viewStatistics.length > 1) {\n this._option.dataSet.multipleDataViewAddListener(viewStatistics, 'change', () => {\n this.updateScaleDomain();\n });\n } else if (viewStatistics.length === 1) {\n viewStatistics[0].target.addListener('change', () => {\n this.updateScaleDomain();\n });\n }\n\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n // 只清除,不更新,在需要时,更新一次。避免多系列下多次更新\n this._clearRawDomain();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected updateScaleDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n protected _clearRawDomain() {\n // 留给各个类型的 axis 来 override\n }\n\n onLayoutEnd(ctx: any): void {\n const changed = this.updateScaleRange();\n\n this.event.emit(ChartEvent.scaleUpdate, { model: this, value: 'range' });\n\n super.onLayoutEnd(ctx);\n }\n\n protected computeData(updateType?: 'domain' | 'range' | 'force'): void {\n // 对应问题#3287: 轴隐藏(tickData为[])时, dataZoom/scrollBar无法触发视图更新\n // 解决方式: dataZoom/scrollBar更新时, 使用force, 此时即使没有tickData也要触发视图更新\n // ps:\n // 1. 其他逻辑没有使用force更新, 所以不会带来额外影响\n // 2. force更新时, 如果有tickData仍然走老逻辑, 这里只考虑force && 无tickData的情况\n if (updateType === 'force' && (!this._tickData || !this._tickData.length)) {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.reRunAllTransform();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n } else if (\n this._tickData &&\n this._tickData.length &&\n (updateType === 'force' || !isEqual(this._scale.range(), [0, 1]))\n ) {\n this._tickData.forEach(tickData => {\n tickData.getDataView().reRunAllTransform();\n tickData.updateData();\n });\n }\n }\n\n protected initScales() {\n this._scales = [this._scale];\n const groups: ISeriesGroup[] = [];\n eachSeries(\n this._regions,\n s => {\n const g = s.getGroups();\n g && groups.push(g);\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n if (groups.length !== 0) {\n const depth = maxInArray(groups.map(g => g.fields.length));\n for (let i = 1; i < depth; i++) {\n const scale = this._scale.clone();\n this._scales.push(scale);\n }\n }\n // this.updateScaleDomain();\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (result.reMake) {\n return result;\n }\n\n result.reRender = true;\n /**\n * 存在轴同步相关配置的时候,暂时通过`reMake`触发更新\n */\n if (prevSpec?.type !== spec?.type || prevSpec?.visible !== spec?.visible) {\n result.reMake = true;\n return result;\n }\n\n result.reMake = ['grid', 'subGrid', 'tick', 'subTick', 'label', 'domainLine', 'title'].some(k => {\n return prevSpec?.[k]?.visible !== spec?.[k]?.visible;\n });\n\n return result;\n }\n\n protected _getAxisAttributes() {\n const spec = this._spec;\n\n const axisAttrs: any = {\n orient: this.getOrient(),\n select: this._option.disableTriggerEvent === true ? false : spec.select,\n hover: this._option.disableTriggerEvent === true ? false : spec.hover\n };\n\n // 属性均需要显示开启\n if (spec.domainLine && spec.domainLine.visible) {\n axisAttrs.line = transformAxisLineStyle(spec.domainLine);\n } else {\n axisAttrs.line = { visible: false };\n }\n\n if (spec.label && spec.label.visible) {\n const labelSpec = pickWithout(spec.label, ['style', 'formatMethod', 'state']);\n axisAttrs.label = labelSpec;\n if (spec.label.style) {\n axisAttrs.label.style = isFunction(spec.label.style)\n ? (datum: Datum, index: number, data: Datum[], layer?: number) => {\n const style = spec.label.style(datum.rawValue, index, datum, data, layer);\n return transformToGraphic(mergeSpec({}, this._theme.label?.style, style));\n }\n : transformToGraphic(spec.label.style);\n }\n if (spec.label.formatMethod || spec.label.formatter) {\n axisAttrs.label.formatMethod = this._getLabelFormatMethod();\n }\n if (spec.label.state) {\n axisAttrs.label.state = transformAxisLabelStateStyle(spec.label.state);\n }\n } else {\n axisAttrs.label = {\n visible: false\n };\n }\n\n if (spec.tick && spec.tick.visible) {\n axisAttrs.tick = {\n visible: spec.tick.visible,\n length: spec.tick.tickSize,\n inside: spec.tick.inside,\n alignWithLabel: spec.tick.alignWithLabel,\n dataFilter: spec.tick.dataFilter\n };\n if (spec.tick.style) {\n axisAttrs.tick.style = isFunction(spec.tick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.tick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.tick?.style, style));\n }\n : transformToGraphic(spec.tick.style);\n }\n if (spec.tick.state) {\n axisAttrs.tick.state = transformStateStyle(spec.tick.state);\n }\n } else {\n axisAttrs.tick = {\n visible: false\n };\n }\n\n if (spec.subTick && spec.subTick.visible) {\n axisAttrs.subTick = {\n visible: spec.subTick.visible,\n length: spec.subTick.tickSize,\n inside: spec.subTick.inside,\n count: spec.subTick.tickCount\n };\n if (spec.subTick.style) {\n axisAttrs.subTick.style = isFunction(spec.subTick.style)\n ? (value: number, index: number, datum: Datum, data: Datum[]) => {\n const style = (spec.subTick.style as any)(value, index, datum, data);\n return transformToGraphic(mergeSpec({}, this._theme.subTick?.style, style));\n }\n : transformToGraphic(spec.subTick.style);\n }\n if (spec.subTick.state) {\n axisAttrs.subTick.state = transformStateStyle(spec.subTick.state);\n }\n } else {\n axisAttrs.subTick = {\n visible: false\n };\n }\n\n if (spec.title && spec.title.visible) {\n const {\n autoRotate,\n angle,\n style: titleStyle = {},\n background: titleBackgroundSpec,\n state: titleState,\n shape: titleShapeSpec,\n ...restTitleAttrs\n } = spec.title;\n let titleAngle = angle;\n let titleTextStyle;\n if (spec.orient === 'left' || spec.orient === 'right') {\n // 处理纵轴的标题样式\n if (autoRotate && isNil(titleAngle)) {\n titleAngle = spec.orient === 'left' ? -90 : 90;\n titleTextStyle = (DEFAULT_TITLE_STYLE as any)[spec.orient];\n }\n }\n\n axisAttrs.title = {\n ...restTitleAttrs,\n autoRotate: false, // 默认不对外提供该配置\n angle: titleAngle ? degreeToRadian(titleAngle) : null,\n textStyle: mergeSpec({}, titleTextStyle, transformToGraphic(titleStyle)),\n pickable: titleStyle.pickable !== false,\n childrenPickable: titleStyle.pickable !== false,\n state: {}\n };\n\n if (titleShapeSpec && titleShapeSpec.visible) {\n axisAttrs.title.shape = {\n ...titleShapeSpec,\n style: transformToGraphic(titleShapeSpec.style)\n };\n if (titleShapeSpec.state) {\n axisAttrs.title.state.shape = transformStateStyle(titleShapeSpec.state);\n }\n } else {\n axisAttrs.title.shape = { visible: false };\n }\n\n if (titleBackgroundSpec && titleBackgroundSpec.visible) {\n axisAttrs.title.background = {\n ...titleBackgroundSpec,\n style: transformToGraphic(titleBackgroundSpec.style)\n };\n if (titleBackgroundSpec.state) {\n axisAttrs.title.state.background = transformStateStyle(titleBackgroundSpec.state);\n }\n } else {\n axisAttrs.title.background = { visible: false };\n }\n\n if (titleState) {\n axisAttrs.title.state.text = transformStateStyle(titleState);\n }\n } else {\n axisAttrs.title = {\n visible: false\n };\n }\n\n if (spec.background && spec.background.visible) {\n axisAttrs.panel = {\n visible: true\n };\n if (spec.background.style) {\n axisAttrs.panel.style = transformToGraphic(spec.background.style);\n }\n if (spec.background.state) {\n axisAttrs.panel.state = transformStateStyle(spec.background.state);\n }\n } else {\n axisAttrs.panel = {\n visible: false\n };\n }\n\n return axisAttrs;\n }\n\n protected _getGridAttributes() {\n const spec = this._spec;\n return {\n alternateColor: spec.grid.alternateColor,\n alignWithLabel: spec.grid.alignWithLabel,\n style: isFunction(spec.grid.style)\n ? () => {\n return (datum: Datum, index: number) => {\n const style = spec.grid.style(datum.datum?.rawValue, index, datum.datum);\n return transformToGraphic(mergeSpec({}, this._theme.grid?.style, style));\n };\n }\n : transformToGraphic(spec.grid.style),\n subGrid:\n spec.subGrid.visible === false\n ? { visible: false }\n : {\n type: 'line',\n visible: spec.subGrid.visible,\n alternateColor: spec.subGrid.alternateColor,\n style: transformToGraphic(spec.subGrid.style)\n }\n };\n }\n\n protected _getLabelFormatMethod() {\n const { formatMethod, formatter } = this._spec.label;\n const { formatFunc } = getFormatFunction(formatMethod, formatter);\n return formatFunc ? (value: any, datum: any, index: number) => formatFunc(datum.rawValue, datum, formatter) : null;\n }\n\n protected abstract registerTicksTransform(): string;\n\n protected _initTickDataSet(options: T, index: number = 0) {\n registerDataSetInstanceParser(this._option.dataSet, 'scale', scaleParser);\n const name = this.registerTicksTransform();\n const tickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_ticks_${index}` })\n .parse(this._scales[index], {\n type: 'scale'\n })\n .transform(\n {\n type: name,\n options\n },\n false\n );\n return tickData;\n }\n\n protected _tickTransformOption(): ITickDataOpt {\n const tick = this._tick || {};\n const label = this._spec.label || {};\n const { tickCount, forceTickCount, tickStep, tickMode } = tick;\n const { style: labelStyle, formatMethod: labelFormatter, minGap: labelGap } = label;\n return {\n sampling: this._spec.sampling !== false,\n tickCount,\n forceTickCount,\n tickStep,\n tickMode,\n axisOrientType: this._orient,\n coordinateType: this._coordinateType,\n\n labelStyle,\n labelFormatter,\n labelGap\n };\n }\n\n addTransformToTickData(options: ITransformOptions, execute?: boolean) {\n this._tickData.forEach(tickData => {\n tickData?.getDataView()?.transform(options, execute);\n });\n }\n\n dataToPosition(values: any[]): number {\n return this._scale.scale(values);\n }\n\n getDatum(childGraphic?: IGraphic) {\n if (childGraphic && childGraphic.name === AXIS_ELEMENT_NAME.label) {\n return childGraphic.data;\n }\n\n if (this._axisMark) {\n return this._axisMark.getProduct()?.getGroupGraphicItem()?.attribute.items;\n }\n }\n}\n\nexport const registerAxis = () => {\n registerComponentMark();\n Factory.registerAnimation('axis', () => ({\n appear: {\n custom: GroupFadeIn\n },\n update: {\n custom: GroupTransition\n },\n exit: {\n custom: GroupFadeOut\n }\n }));\n};\n","import type { ICartesianHorizontal } from './interface/spec';\nimport { Bounds, last, type IBounds, type IBoundsLike, type Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IEffect, IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport type { IRegion } from '../../../region/interface';\nimport type { ICartesianAxisCommonSpec, IAxisHelper, ICartesianVertical } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport {\n isArray,\n isValid,\n isValidNumber,\n eachSeries,\n isNil,\n isUndefined,\n calcLayoutNumber,\n maxInArr,\n minInArr,\n clamp\n} from '../../../util';\nimport type { IOrientType, IRect } from '../../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { Factory } from '../../../core/factory';\nimport { isXAxis, getOrient, isZAxis, isYAxis, getCartesianAxisInfo, transformInverse } from './util/common';\nimport { ChartEvent } from '../../../constant/event';\nimport { LayoutLevel, DEFAULT_LAYOUT_RECT_LEVEL, LayoutZIndex, USER_LAYOUT_RECT_LEVEL } from '../../../constant/layout';\nimport { AxisSyncPlugin } from '../../../plugin/components/axis-sync/axis-sync';\nimport type { Datum, StringOrNumber } from '../../../typings/common';\nimport type { IPoint } from '../../../typings/coordinate';\nimport type { ILayoutRect, ILayoutType } from '../../../typings/layout';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\nimport type { AxisItem, LineAxisAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { getAxisItem, isValidCartesianAxis, shouldUpdateAxis } from '../util';\nimport type { IAxis, ITick } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { AxisComponent } from '../base-axis';\nimport type { IGraphic, IText } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createText } from '@visactor/vrender-core';\nimport type { ICartesianChartSpec } from '../../../chart/cartesian/interface';\n\nconst CartesianAxisPlugin = [AxisSyncPlugin];\n\nexport abstract class CartesianAxis\n extends AxisComponent\n implements IAxis\n{\n static type = ComponentTypeEnum.cartesianAxis;\n type = ComponentTypeEnum.cartesianAxis;\n name: string = ComponentTypeEnum.cartesianAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0.5;\n protected readonly _defaultBandInnerPadding = 0.1;\n protected readonly _defaultBandOuterPadding = 0.3;\n\n // 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n declare directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n\n layoutType: ILayoutType = 'region-relative';\n layoutZIndex: number = LayoutZIndex.Axis;\n layoutLevel: number = LayoutLevel.Axis;\n\n protected _dataSet: DataSet;\n\n layout3dBox?: { width: number; height: number; length: number };\n\n protected _orient: IOrientType = 'left';\n getOrient() {\n return this._orient;\n }\n\n protected getDefaultInteractive() {\n return true;\n }\n\n protected _autoIndentOnce: boolean = false;\n protected _hasAutoIndent: boolean = false;\n set autoIndentOnce(v: boolean) {\n this._autoIndentOnce = v;\n }\n\n protected _scales: IBaseScale[] = [];\n getScales() {\n return this._scales;\n }\n\n protected _tick: ITick | undefined = undefined;\n\n private _axisStyle: Partial;\n private _latestBounds: IBounds;\n private _verticalLimitSize: number;\n private _unitText: IText;\n\n protected _layoutCache: {\n width: number;\n height: number;\n _lastComputeOutBounds: IBoundsLike;\n } = { width: 0, height: 0, _lastComputeOutBounds: { x1: 0, x2: 0, y1: 0, y2: 0 } };\n\n // 内padding\n protected _innerOffset: { top: number; bottom: number; left: number; right: number } = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = getOrient(spec, ['z']);\n if (isZAxis(this._orient)) {\n this.layoutType = 'absolute';\n }\n this._dataSet = options.dataSet;\n this._coordinateType = 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n const axesSpec = chartSpec[this.specKey];\n if (!axesSpec) {\n return null;\n }\n\n const isHorizontal = chartSpec.direction === Direction.horizontal;\n\n if (!isArray(axesSpec)) {\n // 如果非法,或者只有一个z轴就不创建\n if (!isValidCartesianAxis(axesSpec)) {\n return null;\n }\n const { axisType, componentName } = getCartesianAxisInfo(axesSpec, isHorizontal);\n axesSpec.type = axisType;\n return [\n {\n spec: axesSpec,\n specPath: [this.specKey],\n specInfoPath: ['component', this.specKey, 0],\n type: componentName\n }\n ];\n }\n // 处理spec\n const zAxis = axesSpec.filter(s => s.orient === 'z')[0];\n let valid = true;\n if (zAxis) {\n const xAxis = axesSpec.filter(s => s.orient === 'bottom')[0];\n const yAxis = axesSpec.filter(s => isYAxis(s.orient))[0];\n // 必须有x和y,且x必须是bottom\n valid = axesSpec.length === 3 && xAxis && yAxis;\n }\n\n let axesSpecList = axesSpec.map((spec, index) => ({ spec, index }));\n if (!valid) {\n axesSpecList = axesSpecList.filter(({ spec }) => spec.orient !== 'z');\n }\n const specInfos: IModelSpecInfo[] = [];\n axesSpecList.forEach(({ spec, index }) => {\n if (!isValidCartesianAxis(spec)) {\n return;\n }\n const { axisType, componentName } = getCartesianAxisInfo(spec, isHorizontal);\n spec.type = axisType;\n specInfos.push({\n spec,\n specPath: [this.specKey, index],\n specInfoPath: ['component', this.specKey, index],\n type: componentName\n });\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout.autoIndent = this._spec.autoIndent !== false;\n this._layout.layoutOrient = this._orient;\n }\n\n setLayout3dBox(box3d: { width: number; height: number; length: number }) {\n this.layout3dBox = box3d;\n }\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n const orient = this.getOrient();\n if (isXAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else if (isYAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n } else if (isZAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getZAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n abstract valueToPosition(value: any): number;\n\n protected getNewScaleRange() {\n const { width, height } = this.getLayoutRect();\n const { left, right, top, bottom } = this._innerOffset;\n let newRange: number[] = [];\n if (isXAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n }\n } else if (isZAxis(this.getOrient())) {\n if (isValidNumber(width)) {\n newRange = this._inverse ? [width - right, left] : [left, width - right];\n this._scale.range(newRange);\n }\n } else {\n if (isValidNumber(height)) {\n newRange = this._inverse ? [top, height - bottom] : [height - bottom, top];\n }\n }\n\n return newRange;\n }\n\n protected updateScaleRange() {\n let isScaleChange = false;\n\n const newRange = this.getNewScaleRange();\n const range = this._scale.range();\n if (newRange.length === range.length && newRange.every((value, index) => value === range[index])) {\n isScaleChange = false; // No change\n } else {\n isScaleChange = true; // Change detected\n this._scale.range(newRange);\n }\n\n return isScaleChange;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.pluginService?.load(CartesianAxisPlugin.map(P => new P()));\n this.callPlugin(plugin => {\n this.pluginService && plugin.onInit && plugin.onInit(this.pluginService, this);\n });\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n const isX = isXAxis(this.getOrient());\n if (isX) {\n if (isUndefined(this._spec.maxHeight)) {\n this._spec.maxHeight = '30%';\n }\n } else if (isUndefined(this._spec.maxWidth)) {\n this._spec.maxWidth = '30%';\n }\n\n const axisStyle: any = this._getAxisAttributes();\n axisStyle.label.formatMethod = this._getLabelFormatMethod();\n axisStyle.verticalFactor = this.getOrient() === 'top' || this.getOrient() === 'right' ? -1 : 1;\n this._axisStyle = axisStyle;\n }\n this._tick = this._spec.tick;\n const chartSpec = this._option.getChart()?.getSpec() as ICartesianChartSpec;\n this._inverse = transformInverse(this._spec, chartSpec?.direction === Direction.horizontal);\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n // 计算innerOffset\n if (!isZAxis(this.getOrient()) && (this._spec as ICartesianVertical | ICartesianHorizontal).innerOffset) {\n const spec = this._spec as ICartesianVertical | ICartesianHorizontal;\n if (isYAxis(this.getOrient())) {\n ['top', 'bottom'].forEach(orient => {\n this._innerOffset[orient as 'top' | 'bottom'] = calcLayoutNumber(\n (spec as ICartesianVertical).innerOffset[orient as 'top' | 'bottom'],\n viewRect.height,\n viewRect\n );\n });\n } else {\n ['left', 'right'].forEach(orient => {\n this._innerOffset[orient as 'left' | 'right'] = calcLayoutNumber(\n (spec as ICartesianHorizontal).innerOffset[orient as 'left' | 'right'],\n viewRect.width,\n viewRect\n );\n });\n }\n }\n }\n\n protected getSeriesStatisticsField(s: ICartesianSeries) {\n let f: string[];\n if (isXAxis(this.getOrient())) {\n f = s.fieldX;\n } else if (isZAxis(this.getOrient())) {\n f = s.fieldZ;\n } else {\n f = s.fieldY;\n }\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n noDecimals: this._tick?.noDecimals,\n labelLastVisible: this._spec.label?.lastVisible,\n labelFirstVisible: this._spec.label?.firstVisible,\n labelFlush: this._spec.label?.flush\n } as ICartesianTickDataOpt;\n }\n\n protected axisHelper(): IAxisHelper {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n return {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse === true,\n getSpec: () => this._spec\n };\n }\n\n /** LifeCycle API**/\n afterCompile() {\n const product = this._axisMark?.getProduct();\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n // 布局结束之后再进行插件的调用\n // 插件在布局后\n if (isXAxis(this.getOrient())) {\n this.callPlugin(plugin => {\n this.pluginService &&\n plugin.onDidLayoutHorizontal &&\n plugin.onDidLayoutHorizontal(this.pluginService, this);\n });\n } else {\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidLayoutVertical && plugin.onDidLayoutVertical(this.pluginService, this);\n });\n }\n\n // 更新单位的显示位置\n if (this._unitText) {\n const { x, y } = this.getLayoutStartPoint();\n const pos = isXAxis(this._orient)\n ? {\n x: maxInArr(this._scale.range()) + x,\n y\n }\n : {\n x,\n y: minInArr(this._scale.range()) + y\n };\n\n this._unitText.setAttributes(pos);\n }\n }\n });\n }\n this.callPlugin(plugin => {\n this.pluginService && plugin.onDidCompile && plugin.onDidCompile(this.pluginService, this);\n });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n protected collectScale() {\n const scales: IBaseScale[] = [];\n eachSeries(\n this._regions,\n s => {\n scales.push(\n this.getOrient() === 'left' || this.getOrient() === 'right'\n ? (s as ICartesianSeries).scaleY\n : (s as ICartesianSeries).scaleX\n );\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return scales;\n }\n\n protected collectSeriesField(depth: number, series: ICartesianSeries) {\n let field: string | string[];\n if (depth > 0) {\n field = series.getGroups()?.fields?.[depth];\n } else {\n if (isXAxis(this.getOrient())) {\n field = series.getSpec().x2Field ? [...series.fieldX, series.fieldX2] : series.fieldX;\n } else if (isZAxis(this.getOrient())) {\n field = series.fieldZ;\n } else {\n field = series.getSpec().y2Field ? [...series.fieldY, series.fieldY2] : series.fieldY;\n }\n }\n return field;\n }\n\n protected updateSeriesScale() {\n const orient = this.getOrient();\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleX(this._scale);\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else if (isYAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleY(this._scale);\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n } else if (isZAxis(orient)) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getZAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setScaleZ(this._scale);\n (s as ICartesianSeries).setZAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n // protected _seriesUpdateAfterScaleChange(updateInfo: { domain?: boolean; range?: boolean; type?: boolean }) {\n // const orient = this.getOrient();\n // eachSeries(\n // this._regions,\n // s => {\n // if (isXAxis(orient)) {\n // (s as ICartesianSeries).xAxisUpdated(updateInfo);\n // } else if (isYAxis(orient)) {\n // (s as ICartesianSeries).yAxisUpdated(updateInfo);\n // } else if (isZAxis(orient)) {\n // (s as ICartesianSeries).zAxisUpdated(updateInfo);\n // }\n // },\n // {\n // userId: this._seriesUserId,\n // specIndex: this._seriesIndex\n // }\n // );\n // }\n\n _transformLayoutPosition = (pos: Partial) => {\n let { x, y } = pos;\n if (isValidNumber(x)) {\n x += Number(this._orient === 'left') * this.getLayoutRect().width;\n }\n if (isValidNumber(y)) {\n y += Number(this._orient === 'top') * this.getLayoutRect().height;\n }\n return { x, y };\n };\n\n _transformLayoutRect = (result: ILayoutRect) => {\n if (!this._visible) {\n return result;\n }\n const bounds = this._latestBounds.clone().translate(-this.getLayoutStartPoint().x, -this.getLayoutStartPoint().y);\n switch (this._layout.layoutOrient) {\n case 'left':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x1 < 0 ? -bounds.x1 : 0;\n }\n break;\n case 'right':\n if (this._layout.layoutRectLevelMap.width === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.width = bounds.x2 > 0 ? bounds.x2 : 0;\n }\n break;\n case 'top':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y1 < 0 ? -bounds.y1 : 0;\n }\n break;\n case 'bottom':\n if (this._layout.layoutRectLevelMap.height === DEFAULT_LAYOUT_RECT_LEVEL) {\n result.height = bounds.y2 > 0 ? bounds.y2 : 0;\n }\n break;\n default:\n break;\n }\n result.width = Math.ceil(result.width);\n result.height = Math.ceil(result.height);\n return this._layout.setRectInSpec(this._layoutCacheProcessing(result));\n };\n /**\n * bounds 预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n let result: IBoundsLike = { x1: 0, y1: 0, x2: 0, y2: 0 };\n if (!this._visible) {\n return result;\n }\n this._verticalLimitSize = isXAxis(this.getOrient()) ? rect.height : rect.width;\n\n this.setLayoutRect(rect);\n const isChanged = this.updateScaleRange();\n // 防止一直没有计算latestData\n if (isChanged || !isArray(this.getTickData()?.getLatestData())) {\n this.computeData('range');\n }\n const context = { skipLayout: false };\n const isX = isXAxis(this.getOrient());\n if (this.pluginService) {\n isX\n ? this.callPlugin(plugin => {\n plugin.onWillLayoutHorizontal && plugin.onWillLayoutHorizontal(this.pluginService, context, this);\n })\n : this.callPlugin(plugin => {\n plugin.onWillLayoutVertical && plugin.onWillLayoutVertical(this.pluginService, context, this);\n });\n }\n const product = this._axisMark.getProduct();\n let hasBounds = false;\n\n if (!context.skipLayout) {\n const attrs = this._getUpdateAttribute(true);\n const axisComponent = product.getGroupGraphicItem();\n\n const spec = mergeSpec({ ...this.getLayoutStartPoint() }, this._axisStyle, attrs, { line: { visible: false } });\n let updateBounds = axisComponent.getBoundsWithoutRender(spec);\n\n if (updateBounds.empty()) {\n // 如果包围盒为空,设置为布局起点,宽高为0的包围盒\n updateBounds = new Bounds().set(spec.x, spec.y, spec.x, spec.y);\n }\n\n hasBounds = true;\n this._latestBounds = updateBounds;\n // 因为轴单位在某些区域显示的时候,是不参与轴某个方向的包围盒计算的,\n // 所以不太合适放在轴组件内支持,所以就在 VChart 层的轴组件上通过添加 text 图元支持\n result = this._appendAxisUnit(updateBounds, isX);\n }\n\n if (!hasBounds) {\n this._latestBounds = product.getBounds();\n }\n return result;\n }\n\n positionToData(pos: number, isViewPos?: boolean) {\n const isX = isXAxis(this.getOrient());\n if (isViewPos) {\n pos -= isX ? this.getLayoutStartPoint().x : this.getLayoutStartPoint().y;\n }\n\n if (this._innerOffset) {\n pos = isX\n ? clamp(pos, this._innerOffset.left, this.getLayoutRect().width - this._innerOffset.right)\n : clamp(pos, this._innerOffset.top, this.getLayoutRect().height - this._innerOffset.bottom);\n }\n const range = this._scale.range();\n\n if ((pos - range[0]) * (pos - last(range)) > 0) {\n return null;\n }\n\n return this._scale.invert(pos);\n }\n\n private _getTitleLimit(isX: boolean) {\n const titleSpec = this._spec.title;\n if (titleSpec.visible && isNil(titleSpec.style?.maxLineWidth)) {\n const angle = this._axisStyle.title?.angle ?? titleSpec.style?.angle ?? 0;\n if (isX) {\n const width = this.getLayoutRect().width;\n const cosValue = Math.abs(Math.cos(angle));\n // VRender 接收到的limit是考虑角度计算后的宽度\n // TODO:还需要考虑angle后,高度是否太高,综合计算一个limit,比如高度不能超过图表整体高度的1/4\n return cosValue < 1e-6 ? Infinity : width / cosValue;\n }\n const height = this.getLayoutRect().height;\n const sinValue = Math.abs(Math.sin(angle));\n\n // TODO:还需要考虑angle后,宽度是否太宽,综合计算一个limit,比如宽度度不能超过图表整体宽度的1/4\n return sinValue < 1e-6 ? Infinity : height / sinValue;\n }\n\n return null;\n }\n\n protected _getUpdateAttribute(ignoreGrid: boolean) {\n // 获取更新的坐标轴属性\n let regionHeight = 0;\n let regionWidth = 0;\n\n if (!ignoreGrid) {\n const regions = this.getRegions();\n let { x: minX, y: minY } = regions[0].getLayoutStartPoint();\n let maxX = minX + regions[0].getLayoutRect().width;\n let maxY = minY + regions[0].getLayoutRect().height;\n\n for (let index = 1; index < regions.length; index++) {\n const region = regions[index];\n const { x, y } = region.getLayoutStartPoint();\n const { width, height } = region.getLayoutRect();\n\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, width + x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, height + y);\n }\n regionHeight = Math.abs(maxY - minY);\n regionWidth = Math.abs(maxX - minX);\n }\n\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this._orient);\n const isY = isYAxis(this._orient);\n const isZ = isZAxis(this._orient);\n const depth = this.layout3dBox ? this.layout3dBox.length : 0;\n let end = { x: 0, y: 0 };\n let gridLength = regionHeight;\n let axisLength = width;\n\n if (isX) {\n end = { x: width, y: 0 };\n } else if (isY) {\n end = { x: 0, y: height };\n gridLength = regionWidth;\n axisLength = height;\n } else if (isZ) {\n end = { x: depth, y: 0 };\n }\n\n const items = this.getLabelItems(axisLength);\n const attrs: any = {\n start: { x: 0, y: 0 },\n end,\n title: {\n text: this._spec.title.text || this._dataFieldText,\n maxWidth: this._getTitleLimit(isX)\n },\n items\n };\n if (!ignoreGrid) {\n attrs.grid = {\n type: 'line',\n start: { x: 0, y: 0 },\n end,\n items: items[0],\n verticalFactor: this._axisStyle.verticalFactor,\n depth,\n length: gridLength\n };\n }\n\n if (isZ) {\n const directionStr = this.directionStr ?? 'r2l';\n const depthZ = this.layout3dBox ? this.layout3dBox.width : 0;\n let anchor3d = [0, 0];\n let alpha = -Math.PI / 2;\n let z = 0;\n if (directionStr === 'l2r') {\n z = this.layout3dBox.length;\n anchor3d = [0, 0, 0];\n alpha = Math.PI / 2;\n }\n attrs.z = z;\n attrs.alpha = alpha;\n attrs.anchor3d = anchor3d;\n\n if (!ignoreGrid) {\n attrs.grid.depth = depthZ;\n }\n } else {\n let verticalMinSize = isX ? this.layout.minHeight : this.layout.minWidth;\n if (\n (isX && this._layout.layoutRectLevelMap.height === USER_LAYOUT_RECT_LEVEL) ||\n (isY && this._layout.layoutRectLevelMap.width === USER_LAYOUT_RECT_LEVEL)\n ) {\n verticalMinSize = this._verticalLimitSize;\n }\n\n attrs.verticalLimitSize = this._verticalLimitSize;\n attrs.verticalMinSize = verticalMinSize;\n attrs.label = {\n overflowLimitLength: this._getLabelOverflowLimit(isX)\n };\n }\n\n return attrs;\n }\n\n protected getLabelItems(length: number) {\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n return [\n tickLatestData\n .map((obj: Datum) => {\n const normalizedValue = this._getNormalizedValue([obj.value], length);\n return getAxisItem(obj.value, normalizedValue);\n })\n .filter((entry: AxisItem) => {\n const { value, rawValue } = entry;\n const domain = this._scale.domain();\n if (this.getSpec().type === 'log') {\n return value >= 0 && value <= 1;\n }\n if (isContinuous(this._scale.type)) {\n return rawValue >= domain[0] && rawValue <= last(domain);\n }\n return domain.includes(rawValue);\n })\n ];\n }\n return [];\n }\n\n protected initEvent() {\n super.initEvent();\n\n if (this.visible) {\n // 过程: dolayout -> getBoundsInRect: update tick attr -> forceLayout -> updateLayoutAttr: update tick attr -> chart layout -> scale update -> mark encode\n // 问题: chart layout之后, scale发生变化, 导致tick 和 mark position 不同步\n // 解决方案: chart layout 之后重新计算tick位置\n this.event.on(ChartEvent.layoutEnd, this._updateAxisLayout);\n // 布局结束之后处理 0 基线问题\n this.event.on(ChartEvent.layoutEnd, this._fixAxisOnZero);\n // 图表resize后,需要正常布局,清除布局缓存\n this.event.on(ChartEvent.layoutRectUpdate, () => {\n this._clearLayoutCache();\n });\n }\n }\n\n protected _updateAxisLayout = () => {\n const startPoint = this.getLayoutStartPoint();\n const { grid: updateGridAttrs, ...updateAxisAttrs } = this._getUpdateAttribute(false);\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素\n const axisAttrs = mergeSpec({ x: startPoint.x, y: startPoint.y }, this._axisStyle, updateAxisAttrs);\n axisProduct.encode(axisAttrs);\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素\n gridProduct.encode(mergeSpec({ x: startPoint.x, y: startPoint.y }, this._getGridAttributes(), updateGridAttrs));\n }\n };\n\n protected _getNormalizedValue(values: any[], length: number) {\n return length === 0 ? 0 : this.dataToPosition(values) / length;\n }\n\n private _fixAxisOnZero = () => {\n // 在布局结束之后调整坐标轴零基线\n const { onZero, visible } = this._spec.domainLine;\n if (this.visible && onZero && visible !== false) {\n const { onZeroAxisId, onZeroAxisIndex } = this._spec.domainLine;\n const axesComponents = this._option.getComponentsByKey('axes') as IAxis[];\n const isX = isXAxis(this.getOrient());\n\n // 判断坐标轴是否可用\n const isValidAxis = (item: any) => {\n return (\n (isX ? !isXAxis(item.getOrient()) : isXAxis(item.getOrient())) &&\n isContinuous(item.getScale().type) &&\n (item.getTickData()\n ? item\n .getTickData()\n .getLatestData()\n ?.find((d: any) => d.value === 0)\n : item.getScale().domain()[0] <= 0 && last(item.getScale().domain()) >= 0)\n );\n };\n const relativeAxes = axesComponents.filter(item => isValidAxis(item));\n if (relativeAxes.length) {\n let bindAxis;\n if (isValid(onZeroAxisId)) {\n bindAxis = relativeAxes.find(axis => axis.id === onZeroAxisId);\n } else if (isValid(onZeroAxisIndex)) {\n const indexAxis = axesComponents[onZeroAxisIndex];\n if (isValidAxis(indexAxis)) {\n bindAxis = indexAxis;\n }\n } else {\n // 默认绑定第一条的相对坐标轴\n bindAxis = relativeAxes[0];\n }\n if (bindAxis) {\n const axisMark = this._axisMark.getProduct();\n // 找到了绑定的 axis,获取基线的位置\n const position = bindAxis.valueToPosition(0);\n // 获取偏移量\n if (isX) {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dy:\n this._orient === 'bottom'\n ? -(\n (bindAxis.getInverse() ? bindAxis.getScale().range()[1] : bindAxis.getScale().range()[0]) -\n position\n )\n : position\n }\n });\n } else {\n axisMark.encode({\n line: {\n ...this._axisStyle.line,\n dx:\n this._orient === 'left'\n ? position\n : -(\n (bindAxis.getInverse() ? bindAxis.getScale().range()[0] : bindAxis.getScale().range()[1]) -\n position\n )\n }\n });\n }\n }\n }\n }\n };\n\n protected _layoutCacheProcessing(rect: ILayoutRect) {\n ['width', 'height'].forEach(key => {\n if (rect[key as 'width' | 'height'] < this._layoutCache[key as 'width' | 'height']) {\n rect[key as 'width' | 'height'] = this._layoutCache[key as 'width' | 'height'];\n } else {\n this._layoutCache[key as 'width' | 'height'] = rect[key as 'width' | 'height'];\n }\n });\n\n // outBounds\n if (this._autoIndentOnce && this._hasAutoIndent) {\n // use cache\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'];\n });\n } else {\n this._hasAutoIndent = true;\n ['x1', 'x2', 'y1', 'y2'].forEach(key => {\n if (\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] <\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2']\n ) {\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'];\n } else {\n this._layoutCache._lastComputeOutBounds[key as 'x1' | 'x2' | 'y1' | 'y2'] =\n this.layout.getLastComputeOutBounds()[key as 'x1' | 'x2' | 'y1' | 'y2'];\n }\n });\n }\n\n return rect;\n }\n\n _clearLayoutCache() {\n this._hasAutoIndent = false;\n this._layoutCache.width = 0;\n this._layoutCache.height = 0;\n this._layoutCache._lastComputeOutBounds = { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n\n onDataUpdate(): void {\n // clear layout cache\n this._clearLayoutCache();\n }\n\n private _appendAxisUnit(bounds: IBounds, isX: boolean) {\n if (this._spec.unit && this._spec.unit.visible) {\n const { text, style } = this._spec.unit;\n let pos;\n let unitTextStyle: any;\n const { x, y } = this.getLayoutStartPoint();\n if (isX) {\n pos = {\n x: maxInArr(this._scale.range()) + x,\n y\n };\n unitTextStyle = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n } else {\n pos = {\n x,\n y: minInArr(this._scale.range()) + y\n };\n unitTextStyle = {\n textAlign: this._orient === 'left' ? 'left' : 'right',\n textBaseline: 'bottom'\n };\n }\n\n unitTextStyle = {\n ...unitTextStyle,\n ...style,\n x: pos.x,\n y: pos.y,\n text\n };\n if (this._unitText) {\n this._unitText.setAttributes(unitTextStyle);\n } else {\n this._unitText = createText(unitTextStyle);\n this._unitText.name = 'axis-unit';\n this.getContainer()?.add(this._unitText);\n }\n\n // 左轴\n const textBounds = this._unitText.AABBBounds;\n if (!isX) {\n bounds.x1 += textBounds.x1 < bounds.x1 ? textBounds.x1 - bounds.x1 : 0;\n bounds.y1 += textBounds.y1 < bounds.y1 ? textBounds.y1 - bounds.y1 : 0;\n } else {\n bounds.x2 += textBounds.x2 > bounds.x2 ? textBounds.x2 - bounds.x2 : 0;\n bounds.y2 += textBounds.y2 > bounds.y2 ? textBounds.y2 - bounds.y2 : 0;\n }\n }\n\n return bounds;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._unitText ? [this._unitText] : [];\n }\n\n private _getLabelOverflowLimit(isX: boolean) {\n if (isX && this._spec.label?.visible !== false && this._spec.label?.autoLimit === true) {\n const axesComponents = this._option.getComponentsByKey('axes') as IAxis[];\n const relativeRegions = this.getRegions();\n const relativeAxes = axesComponents.filter(item => {\n const orient = item.getOrient();\n return (\n (orient === 'left' || orient === 'right') &&\n item.getRegions().some(region => relativeRegions.includes(region))\n );\n });\n\n let leftLimitLength = 0;\n let rightLimitLength = 0;\n const startX = this.getLayoutStartPoint().x;\n const endX = startX + this.getLayoutRect().width;\n relativeAxes.forEach(axis => {\n const relativeStartX = axis.getLayoutStartPoint().x;\n if (axis.getOrient() === 'left' && relativeStartX === startX) {\n const leftAxisWidth = axis.getLayoutRect().width;\n leftLimitLength = Math.max(leftLimitLength, leftAxisWidth);\n } else if (relativeStartX === endX) {\n const rightAxisWidth = axis.getLayoutRect().width;\n rightLimitLength = Math.max(rightLimitLength, rightAxisWidth);\n }\n });\n return { left: leftLimitLength, right: rightLimitLength };\n }\n return undefined;\n }\n}\n","import type { BandScale } from '@visactor/vscale';\nimport type { Dict } from '@visactor/vutils';\nimport { array, isArray } from '@visactor/vutils';\nimport type { Datum, IOrientType, IPolarOrientType, StringOrNumber } from '../../../typings';\nimport type { IEvent } from '../../../event/interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IModel } from '../../../model/interface';\nimport type { IAxisLocationCfg } from '../interface';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { AxisItem } from '@visactor/vrender-components';\nimport { getAxisItem } from '../util';\n\nexport interface BandAxisMixin {\n _orient: IOrientType | IPolarOrientType;\n _option: any;\n _scale: BandScale;\n _scales: BandScale[];\n _spec: any;\n _tick: any;\n _tickData: CompilableData[];\n _defaultBandPosition: number;\n _defaultBandInnerPadding: number;\n _defaultBandOuterPadding: number;\n event: IEvent;\n isSeriesDataEnable: () => boolean;\n collectData: (depth: number, rawData?: boolean) => { min: number; max: number; values: any[] }[];\n computeDomain: (data: { min: number; max: number; values: any[] }[]) => StringOrNumber[];\n transformScaleDomain: () => void;\n _initTickDataSet: (options: any, index?: number) => any;\n _tickTransformOption: () => any;\n _forceLayout: () => void;\n _getNormalizedValue: (values: any[], length: number) => number;\n}\n\nexport class BandAxisMixin {\n private _tickDataMap: Dict;\n protected _initData() {\n if (this._spec.showAllGroupLayers && this._scales.length > 1) {\n // 显示所有分组层级\n for (let layer = 0; layer < this._scales.length; layer++) {\n const layers = this._spec.layers ?? [];\n const layerConfig = layers[this._scales.length - 1 - layer] || {};\n if (layerConfig.visible !== false && layerConfig.tickCount !== 0 && layerConfig.forceTickCount !== 0) {\n const tickData = this._initTickDataSet(\n {\n ...this._tickTransformOption(),\n ...layerConfig\n },\n layer\n );\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData.push(compilableData);\n\n if (!this._tickDataMap) {\n this._tickDataMap = {};\n }\n this._tickDataMap[layer] = compilableData;\n }\n }\n } else {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData = [compilableData];\n this._tickDataMap = {\n 0: compilableData\n };\n }\n }\n protected _rawDomainIndex: { [key: string | number | symbol]: number }[] = [];\n\n dataToPosition(values: any[], cfg: IAxisLocationCfg = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n return (\n position + bandScale.bandwidth() * (cfg.bandPosition ?? this._spec.bandPosition ?? this._defaultBandPosition)\n );\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n updateGroupScaleRange() {\n let parentScale = this._scale;\n this._scales.forEach((scale, i) => {\n if (i > 0) {\n scale.range([0, parentScale.bandwidth()]);\n parentScale = scale;\n }\n });\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n\n calcScales(DEFAULT_BAND_INNER_PADDING: number, DEFAULT_BAND_OUTER_PADDING: number) {\n const { bandPadding, paddingInner, paddingOuter } = this._spec;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? DEFAULT_BAND_INNER_PADDING, true)\n .paddingOuter(_paddingOuter ?? _padding ?? DEFAULT_BAND_OUTER_PADDING, true);\n }\n }\n computeBandDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n if (!data.length) {\n return [];\n }\n\n // 性能优化 9.13\n if (data.length === 1) {\n return data[0].values;\n }\n const tempSet = new Set();\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].values.length; j++) {\n tempSet.add(data[i].values[j]);\n }\n }\n return Array.from(tempSet) as StringOrNumber[];\n }\n\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n if (!this._rawDomainIndex?.length && this._scales.length) {\n this._updateRawDomain();\n }\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i);\n const domain = this.computeBandDomain(data);\n this._scales[i].domain(domain.sort((a, b) => this._rawDomainIndex[i][a] - this._rawDomainIndex[i][b]));\n }\n }\n this.transformScaleDomain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as unknown as IModel });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as unknown as IModel, value: 'domain' });\n }\n\n protected getLabelItems(length: number) {\n const labelItems: Dict[][] = [];\n let preData: any[] = [];\n\n this._scales.forEach((scale, index) => {\n const tickData = this._tickDataMap[index];\n\n // 因为多层级标签会依赖上一层标签的分组值定位,所以如果上一层标签没有内容,那么就直接获取 bandScale 的 domain()\n const isTickDataHaveData = tickData?.getLatestData()?.length;\n const ticks: string[] = isTickDataHaveData\n ? tickData.getLatestData().map((obj: Datum) => obj.value)\n : scale.domain();\n if (ticks && ticks.length) {\n if (preData && preData.length) {\n const currentLabelItems: any[] = [];\n const curData: any[] = [];\n preData.forEach(value => {\n ticks.forEach(tick => {\n const values = array(value).concat(tick);\n curData.push(values);\n\n if (isTickDataHaveData) {\n const axisItem = getAxisItem(tick, this._getNormalizedValue(values, length));\n currentLabelItems.push(axisItem);\n }\n });\n });\n if (isTickDataHaveData) {\n labelItems.push(currentLabelItems.filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1));\n }\n preData = curData;\n } else {\n ticks.forEach(tick => {\n preData.push(tick);\n });\n if (isTickDataHaveData) {\n labelItems.push(\n tickData\n .getLatestData()\n .map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n .filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1)\n );\n }\n }\n }\n });\n\n return labelItems.reverse();\n }\n\n protected _updateRawDomain() {\n // 默认值设置了无效?\n this._rawDomainIndex = [];\n\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i, true);\n const domain = this.computeBandDomain(data);\n this._rawDomainIndex[i] = {};\n domain.forEach((d, _i) => (this._rawDomainIndex[i][d] = _i));\n }\n }\n }\n\n protected _clearRawDomain() {\n this._rawDomainIndex = [];\n }\n}\n","import isValidNumber from './common/isValidNumber';\nimport isArray from './common/isArray';\nimport isObject from './common/isObject';\n\nexport type IPadding = {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n};\n\n/**\n * 将 padding 转换为通用的格式([上,右,下,左])\n * @param padding\n * @return [ top, right, bottom, left ]\n */\nexport function normalizePadding(padding: number | number[] | IPadding) {\n if (isValidNumber(padding)) {\n return [padding, padding, padding, padding];\n }\n\n if (isArray(padding)) {\n const length = padding.length;\n\n if (length === 1) {\n const paddingValue = padding[0];\n return [paddingValue, paddingValue, paddingValue, paddingValue];\n }\n\n if (length === 2) {\n const [vertical, horizontal] = padding;\n return [vertical, horizontal, vertical, horizontal];\n }\n\n if (length === 3) {\n const [top, horizontal, bottom] = padding;\n return [top, horizontal, bottom, horizontal];\n }\n\n if (length === 4) {\n return padding;\n }\n }\n\n if (isObject(padding)) {\n const { top = 0, right = 0, bottom = 0, left = 0 } = padding as IPadding;\n return [top, right, bottom, left];\n }\n\n return [0, 0, 0, 0];\n}\n","import { registerGroup, registerLine, registerPolygon, registerSymbol, registerArc } from '@visactor/vrender-kits';\n\nexport function loadSegmentComponent() {\n registerGroup();\n registerLine();\n registerPolygon();\n registerSymbol();\n}\n\nexport function loadArcSegmentComponent() {\n registerGroup();\n registerLine();\n registerArc();\n registerSymbol();\n}\n","/**\n * @description 标签组件\n */\nimport { array, flattenArray, isArray, isEmpty, isValidNumber, merge } from '@visactor/vutils';\nimport type { ILine, ISymbol } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { ILineGraphicWithCornerRadius, SegmentAttributes, SymbolAttributes } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSegmentComponent } from './register';\nimport { normalizeAngle } from '@visactor/vutils';\n\nloadSegmentComponent();\nexport class Segment extends AbstractComponent> {\n name = 'segment';\n key = 'segment';\n startSymbol?: ISymbol;\n endSymbol?: ISymbol;\n lines?: ILine[] = [];\n // animate?: (startSymbol, endSymbol, lines) => void;\n\n protected _startAngle!: number;\n /**\n * 外部获取segment起点正方向\n */\n getStartAngle() {\n return normalizeAngle(this._startAngle);\n }\n\n protected _endAngle!: number;\n /**\n * 外部获取segment终点正方向\n */\n getEndAngle() {\n return normalizeAngle(this._endAngle);\n }\n\n protected _mainSegmentPoints: Point[]; // 组成主线段的点\n getMainSegmentPoints() {\n return this._mainSegmentPoints;\n }\n\n static defaultAttributes: Partial = {\n visible: true,\n lineStyle: {\n lineWidth: 1,\n stroke: '#000'\n },\n startSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n },\n endSymbol: {\n visible: false,\n autoRotate: true,\n symbolType: 'triangle',\n size: 12,\n refX: 0,\n refY: 0,\n refAngle: 0,\n style: {\n fill: '#000',\n zIndex: 1 // 默认 symbol 绘制在 line 上面\n }\n }\n };\n\n constructor(attributes: SegmentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Segment.defaultAttributes, attributes));\n }\n\n protected render() {\n this.removeAllChild(true);\n this._reset();\n const {\n // points,\n startSymbol,\n endSymbol,\n lineStyle,\n state,\n visible = true,\n multiSegment,\n mainSegmentIndex\n } = this.attribute as SegmentAttributes;\n\n if (!visible) {\n return;\n }\n\n // 计算线的起点和终点角度\n // 计算角度的原因:\n // 1. segment symbol的自动旋转提供参数\n // 2. 使用segment时,需要根据line的角度对附加元素进行自动旋转(比如:markLine的标签, markPoint的装饰线)\n this._computeLineAngle();\n\n // 绘制start和end symbol\n const points = this._getMainSegmentPoints();\n const startSymbolShape = this._renderSymbol(startSymbol as SymbolAttributes, points, 'start');\n const endSymbolShape = this._renderSymbol(endSymbol as SymbolAttributes, points, 'end');\n\n this.startSymbol = startSymbolShape;\n this.endSymbol = endSymbolShape;\n\n if (multiSegment) {\n const points = [...this.attribute.points];\n if (isValidNumber(mainSegmentIndex)) {\n points[mainSegmentIndex] = this._clipPoints(points[mainSegmentIndex] as Point[]);\n } else {\n const clipPoints = this._clipPoints(flattenArray(points) as Point[]);\n points[0][0] = clipPoints[0];\n (points[points.length - 1] as Point[])[(points[points.length - 1] as Point[]).length - 1] =\n clipPoints[clipPoints.length - 1];\n }\n points.forEach((point: Point[], index) => {\n const line = graphicCreator.line({\n points: point,\n ...(isArray(lineStyle) ? lineStyle[index] ?? lineStyle[lineStyle.length - 1] : lineStyle),\n fill: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line' + index);\n if (!isEmpty(state?.line)) {\n line.states = isArray(state.line) ? state.line[index] ?? state.line[state.line.length - 1] : state.line;\n }\n this.add(line);\n this.lines.push(line);\n });\n } else {\n // 如果配置了cornerRadius, 则绘制polygon, 否则绘制line\n let lineCreator = graphicCreator.line;\n if ((array(lineStyle)[0] as ILineGraphicWithCornerRadius).cornerRadius) {\n lineCreator = graphicCreator.polygon;\n }\n const line = lineCreator({\n points: this._clipPoints(this.attribute.points as Point[]),\n ...array(lineStyle)[0],\n fill: false,\n closePath: false\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('line');\n if (!isEmpty(state?.line)) {\n line.states = [].concat(state.line)[0];\n }\n this.add(line);\n this.lines.push(line);\n }\n }\n\n protected _computeStartRotate(angle: number) {\n return angle + Math.PI / 2;\n }\n\n protected _computeEndRotate(angle: number) {\n return angle + Math.PI / 2;\n }\n\n protected _renderSymbol(attribute: SymbolAttributes, points: Point[], dim: string): ISymbol | undefined {\n if (!points.length) {\n return;\n }\n const { autoRotate = true } = attribute;\n let symbol;\n if (attribute && attribute.visible) {\n const startAngle = this.getStartAngle();\n const endAngle = this.getEndAngle();\n const { state } = this.attribute as SegmentAttributes;\n const start = points[0];\n const end = points[points.length - 1];\n const { refX = 0, refY = 0, refAngle = 0, style, symbolType, size = 12 } = attribute;\n let position;\n let rotate;\n if (dim === 'start') {\n position = {\n x:\n start.x +\n (isValidNumber(startAngle) ? refX * Math.cos(startAngle) + refY * Math.cos(startAngle - Math.PI / 2) : 0),\n y:\n start.y +\n (isValidNumber(startAngle) ? refX * Math.sin(startAngle) + refY * Math.sin(startAngle - Math.PI / 2) : 0)\n };\n rotate = this._computeStartRotate(this._startAngle); // @chensiji - 加Math.PI / 2是因为:默认symbol的包围盒垂直于line,所以在做自动旋转时需要在line正方向基础上做90度偏移\n } else {\n position = {\n x:\n end.x + (isValidNumber(endAngle) ? refX * Math.cos(endAngle) + refY * Math.cos(endAngle - Math.PI / 2) : 0),\n y: end.y + (isValidNumber(endAngle) ? refX * Math.sin(endAngle) + refY * Math.sin(endAngle - Math.PI / 2) : 0)\n };\n rotate = this._computeEndRotate(this._endAngle);\n }\n\n symbol = graphicCreator.symbol({\n ...position,\n symbolType: symbolType as string,\n size,\n angle: autoRotate ? rotate + refAngle : 0,\n strokeBoundsBuffer: 0,\n ...style\n });\n symbol.name = `${this.name}-${dim}-symbol`;\n symbol.id = this._getNodeId(`${dim}-symbol`);\n\n // 兼容旧逻辑, state.symbol同时应用到startSymbol和endSymbol\n if (!isEmpty(state?.symbol)) {\n symbol.states = state.symbol;\n }\n\n // 新逻辑, state.startSymbol和state.endSymbol做不同匹配\n if (dim === 'start') {\n if (!isEmpty(state?.startSymbol)) {\n symbol.states = state.startSymbol;\n }\n } else {\n if (!isEmpty(state?.endSymbol)) {\n symbol.states = state.endSymbol;\n }\n }\n\n this.add(symbol);\n }\n return symbol;\n }\n\n private _getMainSegmentPoints(): Point[] {\n if (this._mainSegmentPoints) {\n return this._mainSegmentPoints;\n }\n const { points: originPoints, multiSegment, mainSegmentIndex } = this.attribute as SegmentAttributes;\n\n let points: Point[];\n // 需要做下约束判断\n if (multiSegment) {\n if (isValidNumber(mainSegmentIndex)) {\n points = originPoints[mainSegmentIndex] as Point[];\n } else {\n points = flattenArray(originPoints);\n }\n } else {\n points = originPoints as Point[];\n }\n this._mainSegmentPoints = points;\n // 去除重复的点, 目前发现计算startAngle和endAngle时会有问题\n\n return points;\n }\n\n private _clipPoints(points: Point[]) {\n const { startSymbol = {} as SegmentAttributes['startSymbol'], endSymbol = {} as SegmentAttributes['endSymbol'] } =\n this.attribute as SegmentAttributes;\n // 通过改变line起点和终点的方式达到symbol在fill为false的情况下,也可以遮盖line的效果\n let pointsAfterClip = points;\n if (startSymbol.visible) {\n const startSize = startSymbol.clip ? startSymbol.size || 10 : 0;\n const pointsStart = {\n x: points[0].x - (startSize / 2) * (Math.cos(this._startAngle) || 0),\n y: points[0].y - (startSize / 2) * (Math.sin(this._startAngle) || 0)\n };\n pointsAfterClip = [pointsStart, ...pointsAfterClip.slice(1)];\n }\n if (endSymbol.visible) {\n const endSize = endSymbol.clip ? endSymbol.size || 10 : 0;\n const pointsEnd = {\n x: points[points.length - 1].x - (endSize / 2) * (Math.cos(this._endAngle) || 0),\n y: points[points.length - 1].y - (endSize / 2) * (Math.sin(this._endAngle) || 0)\n };\n pointsAfterClip = [...pointsAfterClip.slice(0, pointsAfterClip.length - 1), pointsEnd];\n }\n\n return pointsAfterClip;\n }\n\n private _computeLineAngle() {\n const points = this._getMainSegmentPoints();\n if (points.length <= 1) {\n return;\n }\n const start = points[0];\n const startInside = points[1];\n const endInside = points[points.length - 2];\n const end = points[points.length - 1];\n const startVector = [start.x - startInside.x, start.y - startInside.y]; // 起点正方向向量\n const startAngle = Math.atan2(startVector[1], startVector[0]); // 起点正方向角度\n const endVector = [end.x - endInside.x, end.y - endInside.y]; // 终点正方向向量\n const endAngle = Math.atan2(endVector[1], endVector[0]); // 终点正方向角度\n\n this._startAngle = startAngle;\n this._endAngle = endAngle;\n }\n\n protected _reset() {\n this.startSymbol = null;\n this.endSymbol = null;\n this._startAngle = null;\n this._endAngle = null;\n this._mainSegmentPoints = null;\n }\n}\n","import { crossProduct } from '@visactor/vutils';\n\nexport type Vector2 = [number, number];\n\n/**\n * Scales a vec2 by a scalar number\n */\nexport function scale(vector: Vector2, scale: number): [number, number] {\n return [vector[0] * scale, vector[1] * scale];\n}\n\n/**\n * Calculates the length of a vec2\n */\nexport function length(vector: Vector2) {\n const [x, y] = vector;\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Normalize a vec2\n */\nexport function normalize(vector: Vector2) {\n let len = length(vector);\n if (len > 0) {\n len = 1 / len;\n }\n return [vector[0] * len, vector[1] * len];\n}\n\n/**\n * Get the angle between two 2D vectors\n */\nexport function angle(vector1: Vector2, vector2: Vector2) {\n const [x1, y1] = vector1;\n const [x2, y2] = vector2;\n const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\nexport function angleTo(v1: [number, number], v2: [number, number], direct: boolean): number {\n const ang = angle(v1, v2);\n const angleLargeThanPI = crossProduct(v1, v2) >= 0;\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - ang;\n }\n return ang;\n }\n\n if (angleLargeThanPI) {\n return ang;\n }\n return Math.PI * 2 - ang;\n}\n","export const DEFAULT_AXIS_THEME = {\n title: {\n space: 4,\n padding: 0,\n textStyle: {\n fontSize: 12,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n label: {\n visible: true,\n inside: false,\n space: 4,\n padding: 0,\n style: {\n fontSize: 12,\n fill: '#333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n },\n tick: {\n visible: true,\n inside: false,\n alignWithLabel: true,\n length: 4,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n inside: false,\n count: 4,\n length: 2,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1\n }\n },\n line: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#000',\n strokeOpacity: 1\n }\n }\n};\n\nexport const DEFAULT_AXIS_BREAK_SYMBOL_STYLE = {\n size: 8,\n stroke: '#000',\n lineWidth: 1,\n zIndex: 1\n};\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTagComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerRichtext();\n registerText();\n}\n","/**\n * @description 标签组件\n */\nimport {\n type IGroup,\n type IRect,\n type ISymbol,\n type IText,\n type ITextAttribute,\n type ITextGraphicAttribute,\n type IRichTextGraphicAttribute,\n type IRichText,\n type IGraphicAttribute,\n CustomPath2D\n} from '@visactor/vrender-core';\nimport { isBoolean, isEmpty, isNil, isNumber, isObject, isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { isRichText, measureTextSize, richTextAttributeTransform } from '../util';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { TagAttributes, TagShapeAttributes } from './type';\nimport { loadTagComponent } from './register';\nimport type { TextContent } from '../core/type';\n\nloadTagComponent();\nexport class Tag extends AbstractComponent> {\n name = 'tag';\n\n private _bgRect!: IRect;\n private _textShape!: IText | IRichText;\n private _symbol!: ISymbol;\n private _tagStates: string[] = [];\n private _rectStates: string[] = [];\n private _symbolStates: string[] = [];\n private _textStates: string[] = [];\n\n getBgRect() {\n return this._bgRect;\n }\n\n getTextShape() {\n return this._textShape;\n }\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n space: 4,\n padding: 4,\n // @ts-ignore\n shape: {\n fill: '#000'\n }\n };\n\n constructor(attributes: TagAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tag.defaultAttributes, attributes));\n }\n\n protected render() {\n this.cacheStates();\n const {\n text = '',\n textStyle = {} as ITextGraphicAttribute | IRichTextGraphicAttribute,\n shape = {} as TagShapeAttributes,\n panel = {} as BackgroundAttributes,\n space = 4,\n minWidth,\n maxWidth,\n padding = 4,\n visible,\n state,\n type,\n textAlwaysCenter,\n containerTextAlign\n } = this.attribute as TagAttributes;\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('tag-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n let symbol;\n let tagX = -parsedPadding[3];\n let tagY = -parsedPadding[0];\n let tagWidth = parsedPadding[1] + parsedPadding[3];\n let tagHeight = parsedPadding[0] + parsedPadding[2];\n let textX = 0;\n let symbolPlaceWidth = 0;\n const { visible: shapeVisible, ...shapeStyle } = shape;\n if (isBoolean(shapeVisible)) {\n const size = shapeStyle?.size || 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n\n symbol = group.createOrUpdateChild(\n 'tag-shape',\n {\n symbolType: 'circle',\n size,\n strokeBoundsBuffer: 0,\n ...shapeStyle,\n visible: shapeVisible,\n x: maxSize / 2,\n y: maxSize / 2\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.shape)) {\n symbol.states = state.shape;\n }\n\n if (shapeVisible) {\n symbolPlaceWidth = maxSize + space;\n }\n }\n\n tagWidth += symbolPlaceWidth;\n textX += symbolPlaceWidth;\n\n let textShape: IRichText | IText;\n const isRich = isRichText({ text } as TextContent) || type === 'rich';\n if (isRich) {\n const richTextAttrs = {\n ...richTextAttributeTransform({ type, text, ...textStyle } as any),\n ...(textStyle as IRichTextGraphicAttribute),\n visible: isValid(text) && visible !== false,\n x: textX,\n y: 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n tagWidth += textShape.AABBBounds.width();\n tagHeight += textShape.AABBBounds.height();\n tagX += textShape.AABBBounds.x1;\n tagY += textShape.AABBBounds.y1;\n } else {\n const textAttrs = {\n text: isObject(text) && 'type' in text && text.type === 'text' ? text.text : text,\n visible: isValid(text) && visible !== false,\n lineHeight: (textStyle as ITextGraphicAttribute)?.fontSize,\n ...(textStyle as ITextGraphicAttribute),\n x: textX,\n y: 0\n };\n if (isNil(textAttrs.lineHeight)) {\n textAttrs.lineHeight = (textStyle as ITextGraphicAttribute).fontSize;\n }\n textShape = group.createOrUpdateChild('tag-text', textAttrs as ITextGraphicAttribute, 'text') as IText;\n if (!isEmpty(state?.text)) {\n textShape.states = state.text;\n }\n\n // 因为文本可能发生旋转,所以需要使用 measureTextSize 方法\n const textBounds = measureTextSize(textAttrs.text as string, textStyle, this.stage?.getTheme()?.text);\n const textWidth = textBounds.width;\n const textHeight = textBounds.height;\n tagWidth += textWidth;\n const size = shape.size ?? 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n tagHeight += Math.max(textHeight, shape.visible ? maxSize : 0);\n\n const { textAlign, textBaseline } = textStyle as ITextAttribute;\n\n if (isValid(minWidth) || isValid(maxWidth)) {\n if (isValid(minWidth) && tagWidth < minWidth) {\n tagWidth = minWidth;\n }\n if (isValid(maxWidth) && tagWidth > maxWidth) {\n tagWidth = maxWidth;\n textShape.setAttribute('maxLineWidth', maxWidth - parsedPadding[1] - parsedPadding[2]);\n }\n }\n\n tagX = 0;\n tagY = 0;\n let flag = 0;\n if (textAlign === 'left' || textAlign === 'start') {\n flag = 1;\n } else if (textAlign === 'right' || textAlign === 'end') {\n flag = -1;\n } else if (textAlign === 'center') {\n flag = 0;\n }\n if (!flag) {\n tagX -= tagWidth / 2;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth / 2);\n }\n\n group.setAttribute('x', -symbolPlaceWidth / 2);\n } else if (flag < 0) {\n tagX -= tagWidth;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth);\n }\n\n group.setAttribute('x', -parsedPadding[1] - symbolPlaceWidth);\n } else if (flag > 0) {\n group.setAttribute('x', parsedPadding[3]);\n }\n\n const shouldCenter = containerTextAlign ? containerTextAlign === 'center' : textAlwaysCenter;\n const shouldRight = containerTextAlign === 'right' || containerTextAlign === 'end';\n const shouldLeft = containerTextAlign === 'left' || containerTextAlign === 'start';\n\n if (shouldCenter && flag) {\n // 文本容器内居中\n // 剔除padding后的内宽度\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const tsWidth = textWidth + symbolPlaceWidth;\n const textX =\n flag === 1\n ? (containerWidth - tsWidth) / 2 + symbolPlaceWidth + textWidth / 2\n : parsedPadding[0] + symbolPlaceWidth - (tagWidth / 2 + tsWidth / 2 - symbolPlaceWidth) + textWidth / 2;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'center'\n });\n if (symbol) {\n const symbolX = textX - textWidth / 2 - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldLeft && flag !== 1) {\n // 文本容器内朝左展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const offset =\n flag === 0\n ? -containerWidth / 2 + symbolPlaceWidth / 2\n : -tagWidth + parsedPadding[3] + parsedPadding[1] + symbolPlaceWidth;\n const textX = offset + symbolPlaceWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'left'\n });\n\n if (symbol) {\n const symbolX = offset + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldRight && flag !== -1) {\n // 文本容器内朝右展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const textX = flag === 0 ? containerWidth / 2 + symbolPlaceWidth / 2 : containerWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'right'\n });\n if (symbol) {\n const symbolX = textX - textWidth - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (textBaseline === 'middle') {\n tagY -= tagHeight / 2;\n if (symbol) {\n symbol.setAttribute('y', 0);\n }\n } else if (textBaseline === 'bottom') {\n tagY -= tagHeight;\n if (symbol) {\n symbol.setAttribute('y', -textHeight / 2);\n }\n\n group.setAttribute('y', -parsedPadding[2]);\n } else if (textBaseline === 'top') {\n group.setAttribute('y', parsedPadding[0]);\n if (symbol) {\n symbol.setAttribute('y', textHeight / 2);\n }\n }\n }\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n width: tagWidth,\n height: tagHeight,\n x: tagX,\n y: tagY\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial) => {\n return customShape(this, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n this._textShape = textShape;\n this._symbol = symbol;\n\n this.resetStates();\n }\n\n initAttributes(params: TagAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Tag.defaultAttributes, params);\n super.initAttributes(params);\n this.render();\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean): void {\n super.addState(stateName, keepCurrentStates, hasAnimation);\n if (this._textShape) {\n this._textShape.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.addState(stateName, keepCurrentStates, hasAnimation);\n }\n }\n\n removeState(stateName: string, hasAnimation?: boolean): void {\n super.removeState(stateName, hasAnimation);\n if (this._textShape) {\n this._textShape.removeState(stateName, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.removeState(stateName, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.removeState(stateName, hasAnimation);\n }\n }\n\n cacheStates() {\n this._tagStates = this.currentStates?.slice() ?? [];\n this._rectStates = this._bgRect?.currentStates?.slice() ?? [];\n this._symbolStates = this._symbol?.currentStates?.slice() ?? [];\n this._textStates = this._textShape?.currentStates?.slice() ?? [];\n this.clearStates();\n this._bgRect?.clearStates();\n this._symbol?.clearStates();\n this._textShape?.clearStates();\n }\n resetStates() {\n this._tagStates.length && this.useStates(this._tagStates);\n this._rectStates.length && this._bgRect?.useStates(this._rectStates);\n this._symbolStates.length && this._symbol?.useStates(this._symbolStates);\n this._textStates.length && this._textShape?.useStates(this._textStates);\n }\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNil, isRectIntersect, isRotateAABBIntersect, rotatePoint } from '@visactor/vutils';\n\n// 计算水平情况下的包围盒\nfunction genNormalBounds(item: IText) {\n const bounds = item.AABBBounds;\n\n return {\n x1: bounds.x1,\n x2: bounds.x2,\n y1: bounds.y1,\n y2: bounds.y2,\n centerX: item.attribute.x,\n centerY: item.attribute.y,\n angle: item.attribute.angle\n };\n}\n\nexport function genRotateBounds(items: IText[]) {\n items.forEach(item => {\n if (item.rotatedBounds || !item.attribute.angle) {\n return;\n }\n // 计算水平情况下的包围盒\n const bounds = genNormalBounds(item);\n const rotatedCenter = rotatePoint({ x: item.attribute.x, y: item.attribute.y }, bounds.angle, {\n x: bounds.centerX,\n y: bounds.centerY\n });\n\n const deltaX = rotatedCenter.x - bounds.centerX;\n const deltaY = rotatedCenter.y - bounds.centerY;\n bounds.x1 += deltaX;\n bounds.x2 += deltaX;\n bounds.y1 += deltaY;\n bounds.y2 += deltaY;\n bounds.centerX += deltaX;\n bounds.centerY += deltaY;\n item.rotatedBounds = bounds;\n });\n}\n\nexport function itemIntersect(item1: IText, item2: IText) {\n if (!item1.OBBBounds?.empty() && !item2.OBBBounds?.empty()) {\n return item1.OBBBounds.intersects(item2.OBBBounds);\n }\n return (\n isRectIntersect(item1.AABBBounds, item2.AABBBounds, false) &&\n (item1.rotatedBounds && item2.rotatedBounds\n ? isRotateAABBIntersect(item1.rotatedBounds, item2.rotatedBounds, true)\n : true)\n );\n}\n\nconst DELTA_ANGLE = Math.sin(Math.PI / 10);\nexport function isAngleVertical(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const cos = hasAngle ? Math.cos(angle) : 1;\n return hasAngle && Math.abs(cos) <= delta;\n}\n\nexport function isAngleHorizontal(angle: number, delta = DELTA_ANGLE) {\n const hasAngle = !isNil(angle) && angle !== 0;\n const sin = hasAngle ? Math.sin(angle) : 0;\n return !hasAngle || Math.abs(sin) <= delta;\n}\n","// eslint-disable-next-line no-duplicate-imports\nimport type { IGraphic, IGroup, IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport type { Dict, IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isGreater, isLess, tau, normalizeAngle, polarToCartesian, merge } from '@visactor/vutils';\nimport { traverseGroup } from '../util/common';\nimport type { Vector2 } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { scale, length } from '../util';\nimport type { BreakSymbol } from './type';\nimport { DEFAULT_AXIS_BREAK_SYMBOL_STYLE } from './config';\nimport type { Point } from '../core/type';\nimport { isAngleHorizontal } from './overlap/util';\n\n// 和 vutils 版本不同\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < 0) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n return angle;\n};\n\n// 判断数值是否在制定范围内,包含误差\nexport function isInRange(a: number, min: number, max: number) {\n return !isLess(a, min, 0, 1e-6) && !isGreater(a, max, 0, 1e-6);\n}\n\nexport function getCircleLabelPosition(tickPosition: Point, tickVector: [number, number]) {\n return {\n x: tickPosition.x + tickVector[0],\n y: tickPosition.y + tickVector[1]\n };\n}\n\nexport function getAxisBreakSymbolAttrs(props: BreakSymbol = {}) {\n const { style = {}, angle = Math.PI * 0.5 } = props;\n const symbolStyle = merge({}, DEFAULT_AXIS_BREAK_SYMBOL_STYLE, style);\n const symbolSize = symbolStyle.size ?? DEFAULT_AXIS_BREAK_SYMBOL_STYLE.size;\n return {\n ...symbolStyle,\n symbolType:\n symbolStyle.symbolType ??\n `M ${-symbolSize / 2} ${symbolSize * Math.sin(angle)} L ${symbolSize / 2} ${-symbolSize * Math.sin(angle)}`,\n symbolSize\n };\n}\nexport function getElMap(g: IGroup) {\n const elMap: Dict = {};\n traverseGroup(g, (el: IGraphic) => {\n if ((el as IGraphic).type !== 'group' && el.id) {\n elMap[el.id] = el;\n }\n });\n return elMap;\n}\n\nexport function getVerticalCoord(point: Point, vector: Vector2): Point {\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n}\n\nexport function getCircleVerticalVector(\n offset: number,\n point: Point,\n center: Point,\n inside = false,\n axisInside = false\n): Vector2 {\n const vector: [number, number] = [point.x - center.x, point.y - center.y];\n return scale(vector, ((inside ? -1 : 1) * (axisInside ? -1 : 1) * offset) / length(vector));\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlignType = 'center';\n let baseline: TextBaselineType = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\nexport function getPolarAngleLabelPosition(\n angle: number,\n center: { x: number; y: number },\n radius: number,\n labelOffset: number,\n inside: boolean\n) {\n const point = polarToCartesian({ x: 0, y: 0 }, radius, angle);\n const labelPoint = getVerticalCoord(point, getCircleVerticalVector(labelOffset, point, center, inside));\n const vector = getCircleVerticalVector(labelOffset || 1, labelPoint, center, inside);\n return getCircleLabelPosition(labelPoint, vector);\n}\n\nexport function getCirclePoints(center: Point, count: number, radius: number, startAngle: number, endAngle: number) {\n const points: Point[] = [];\n const range = endAngle - startAngle;\n for (let i = 0; i < count; i++) {\n const angle = startAngle + (i * range) / count;\n points.push(polarToCartesian(center, radius, angle));\n }\n return points;\n}\n\nexport function getPolygonPath(points: Point[], closed: boolean) {\n let path = '';\n if (points.length === 0) {\n return path;\n }\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n });\n if (closed) {\n path += 'Z';\n }\n\n return path;\n}\n\nexport function textIntersect(textA: IText, textB: IText, sep: number) {\n let a: IBounds;\n let b: IBounds;\n // 注意:默认旋转角度一样\n const angle = textA.attribute?.angle;\n const isHorizontal = isAngleHorizontal(angle, Number.EPSILON);\n const isAABBIntersects = (textA: IText, textB: IText, sep: number) => {\n a = textA.AABBBounds;\n b = textB.AABBBounds;\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n };\n\n // 水平文字可以直接用 AABB 包围盒计算\n if (isHorizontal) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n a = textA.OBBBounds;\n b = textB.OBBBounds;\n\n // 没有 OBB bounds 则用 AABB 包围盒计算\n if (!a || !b || a.empty() || b.empty()) {\n return isAABBIntersects(textA, textB, sep);\n }\n\n // 非水平文字且有 OBB 包围盒\n // TODO: 待支持有旋转角度下的 sep 计算逻辑\n return a.intersects(b);\n // const expandedTextA = textA.clone();\n // const boundsPaddingA = textA.attribute.boundsPadding ?? 0;\n // expandedTextA.setAttributes({\n // boundsPadding: isNumber(boundsPaddingA) ? boundsPaddingA + sep / 2 : boundsPaddingA.map(v => v + sep / 2)\n // });\n // const expandTextB = textB.clone();\n // const boundsPaddingB = textB.attribute.boundsPadding ?? 0;\n\n // expandTextB.setAttributes({\n // boundsPadding: isNumber(boundsPaddingB) ? boundsPaddingB + sep / 2 : boundsPaddingB.map(v => v + sep / 2)\n // });\n\n // return expandedTextA.OBBBounds.intersects(expandTextB.OBBBounds);\n}\n\nexport function hasOverlap(items: IText[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (textIntersect(a, b, pad)) {\n return true;\n }\n }\n return false;\n}\n","import type { FederatedPointerEvent, IGraphic, IGroup } from '@visactor/vrender-core';\nimport { StateValue } from '../constant';\nimport { traverseGroup } from '../util';\nimport { isEmpty } from '@visactor/vutils';\n\nexport const dispatchHoverState = (e: FederatedPointerEvent, container: IGroup, lastHover: IGraphic | null) => {\n const target = e.target as unknown as IGraphic;\n if (target !== lastHover && target.name && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(container, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n return target;\n }\n return lastHover;\n};\n\nexport const dispatchUnHoverState = (e: FederatedPointerEvent, container: IGroup, lastHover: IGraphic | null) => {\n if (lastHover) {\n traverseGroup(container, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n return null;\n }\n return lastHover;\n};\n\nexport const dispatchClickState = (e: FederatedPointerEvent, container: IGroup, lastSelect: IGraphic | null) => {\n const target = e.target as unknown as IGraphic;\n if (lastSelect === target && target.hasState(StateValue.selected)) {\n traverseGroup(container, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n // 取消选中\n return null;\n }\n\n if (target.name && !isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(container, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n return target;\n }\n return lastSelect;\n};\n","/**\n * TODO:\n * 1. trunk 坐标轴截断\n * @description 坐标轴组件基类\n */\nimport type {\n IGroup,\n INode,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType,\n FederatedPointerEvent,\n IGraphic,\n IText\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { abs, cloneDeep, get, isEmpty, isFunction, merge, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { Point } from '../core/type';\nimport type { TagAttributes } from '../tag';\nimport { createTextGraphicByType } from '../util';\nimport { DEFAULT_STATES } from '../constant';\nimport { AXIS_ELEMENT_NAME } from './constant';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport type {\n LabelAttributes,\n AxisBaseAttributes,\n AxisItem,\n TickAttributes,\n TransformedAxisItem,\n SubTickAttributes,\n TickLineItem,\n callbackFunc\n} from './type';\nimport { Tag } from '../tag/tag';\nimport { getElMap, getVerticalCoord } from './util';\nimport { dispatchClickState, dispatchHoverState, dispatchUnHoverState } from '../util/interaction';\n\nexport abstract class AxisBase extends AbstractComponent> {\n name = 'axis';\n\n // TODO: 组件整体统一起来\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n protected tickLineItems: TickLineItem[] = [];\n protected subTickLineItems: TickLineItem[] = [];\n protected axisLabelLayerSize: Dict<{\n width: number;\n height: number;\n textAlign: string;\n textBaseline: string;\n labelPos: number;\n }> = {};\n protected axisLabelsContainer: IGroup | null = null;\n protected axisContainer: IGroup;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract renderLine(container: IGroup): void;\n abstract isInValidValue(value: number): boolean;\n abstract getTickCoord(value: number): Point;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n abstract getRelativeVector(point?: Point): [number, number];\n protected abstract getTitleAttribute(): TagAttributes;\n protected abstract beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType };\n\n /**\n * 坐标轴的一个特殊的方法,用于不更新场景树来获取更新属性后的包围盒\n * TODO:后面看情况再抽象为通用的方法\n */\n getBoundsWithoutRender(attributes: Partial) {\n const currentAttribute = cloneDeep(this.attribute);\n merge(this.attribute, attributes);\n\n const offscreenGroup = graphicCreator.group({\n x: this.attribute.x,\n y: this.attribute.y\n });\n this.add(offscreenGroup);\n\n this._renderInner(offscreenGroup);\n\n this.removeChild(offscreenGroup);\n this.attribute = currentAttribute;\n return offscreenGroup.AABBBounds;\n }\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n this._renderInner(this._innerView);\n\n this._bindEvent();\n }\n\n private _bindEvent() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._innerView.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._innerView.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._innerView.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchHoverState(e, this.axisContainer, this._lastHover);\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchUnHoverState(e, this.axisContainer, this._lastHover);\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n this._lastSelect = dispatchClickState(e, this.axisContainer, this._lastSelect);\n };\n\n protected _renderInner(container: IGroup) {\n const { title, label, tick, line, items } = this.attribute;\n\n const axisContainer = graphicCreator.group({ x: 0, y: 0, zIndex: 1, pickable: false });\n axisContainer.name = AXIS_ELEMENT_NAME.axisContainer;\n axisContainer.id = this._getNodeId('container');\n axisContainer.setMode(this.mode);\n this.axisContainer = axisContainer;\n container.add(axisContainer);\n\n // 渲染轴线\n if (line && line.visible) {\n this.renderLine(axisContainer);\n }\n\n if (items && items.length) {\n this.data = this._transformItems(items[0]);\n\n // 渲染刻度线,包含子刻度线\n if (tick && tick.visible) {\n this.renderTicks(axisContainer);\n }\n // 渲染标签\n if (label && label.visible) {\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = AXIS_ELEMENT_NAME.labelContainer;\n labelGroup.id = this._getNodeId('label-container');\n this.axisLabelsContainer = labelGroup;\n axisContainer.add(labelGroup);\n items.forEach((axisItems: AxisItem[], layer: number) => {\n const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);\n\n const labels = layerLabelGroup.getChildren() as IText[];\n this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n // handle overlap\n this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n\n let maxTextWidth = 0;\n let maxTextHeight = 0;\n let textAlign = 'center';\n let textBaseline = 'middle';\n let labelPos: number = 0;\n labels.forEach((label: IText, index) => {\n const labelStyle = label.attribute;\n\n const angle = labelStyle.angle ?? 0;\n const textBounds = label.AABBBounds;\n let textWidth = textBounds.width();\n let textHeight = textBounds.height();\n if (angle) {\n textWidth = Math.abs(textWidth * Math.cos(angle));\n textHeight = Math.abs(textHeight * Math.sin(angle));\n }\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, textHeight);\n\n textAlign = labelStyle.textAlign as string;\n textBaseline = labelStyle.textBaseline as string;\n if (index === 0) {\n labelPos = labelStyle.x;\n }\n });\n this.axisLabelLayerSize[layer] = {\n width: maxTextWidth,\n height: maxTextHeight,\n\n labelPos,\n textAlign,\n textBaseline\n };\n });\n }\n }\n\n // 渲染标题\n if (title && title.visible) {\n this.renderTitle(axisContainer);\n }\n }\n protected renderTicks(container: IGroup) {\n const tickLineItems = this.getTickLineItems();\n\n const tickLineGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n tickLineGroup.name = AXIS_ELEMENT_NAME.tickContainer;\n tickLineGroup.id = this._getNodeId('tick-container');\n container.add(tickLineGroup);\n\n tickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('tick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.tick;\n line.id = this._getNodeId(item.id);\n\n if (isEmpty(this.attribute.tick?.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const data = this.data[index];\n const tickLineState = merge({}, DEFAULT_STATES, this.attribute.tick.state);\n Object.keys(tickLineState).forEach(key => {\n if (isFunction(tickLineState[key])) {\n tickLineState[key] = tickLineState[key](data.rawValue, index, data, this.data);\n }\n });\n line.states = tickLineState;\n }\n\n tickLineGroup.add(line);\n });\n this.tickLineItems = tickLineItems;\n\n // subTick 处理\n const { subTick } = this.attribute;\n if (subTick && subTick.visible) {\n const subTickLineItems: TickLineItem[] = this.getSubTickLineItems();\n if (subTickLineItems.length) {\n subTickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('subTick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.subTick;\n line.id = this._getNodeId(`${index}`);\n\n if (isEmpty(subTick.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const subTickLineState = merge({}, DEFAULT_STATES, subTick.state);\n Object.keys(subTickLineState).forEach(key => {\n if (isFunction(subTickLineState[key])) {\n subTickLineState[key] = subTickLineState[key](item.value, index, item, tickLineItems);\n }\n });\n line.states = subTickLineState;\n }\n\n tickLineGroup.add(line);\n });\n }\n\n this.subTickLineItems = subTickLineItems;\n }\n }\n\n protected renderLabels(container: IGroup, items: AxisItem[], layer: number) {\n const { dataFilter } = this.attribute.label;\n if (dataFilter && isFunction(dataFilter)) {\n items = dataFilter(items, layer) as TransformedAxisItem[];\n }\n const data = this._transformItems(items);\n\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = `${AXIS_ELEMENT_NAME.labelContainer}-layer-${layer}`;\n labelGroup.id = this._getNodeId(`label-container-layer-${layer}`);\n container.add(labelGroup);\n\n data.forEach((item: TransformedAxisItem, index: number) => {\n const labelStyle: any = this._getLabelAttribute(item, index, data, layer);\n const text = createTextGraphicByType(labelStyle);\n\n text.name = AXIS_ELEMENT_NAME.label;\n text.id = this._getNodeId(`layer${layer}-label-${item.id}`);\n if (isEmpty(this.attribute.label?.state)) {\n text.states = DEFAULT_STATES;\n } else {\n const labelState = merge({}, DEFAULT_STATES, this.attribute.label.state);\n Object.keys(labelState).forEach(key => {\n if (isFunction(labelState[key])) {\n labelState[key] = labelState[key](item, index, data, layer);\n }\n });\n text.states = labelState;\n }\n text.data = { ...item, index, layer };\n labelGroup.add(text);\n });\n\n return labelGroup;\n }\n\n protected renderTitle(container: IGroup) {\n const titleAttributes = this.getTitleAttribute();\n const axisTitle = new Tag({\n ...titleAttributes\n });\n axisTitle.name = AXIS_ELEMENT_NAME.title;\n axisTitle.id = this._getNodeId('title');\n container.add(axisTitle as unknown as INode);\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));\n }\n\n protected getTickLineItems() {\n const { tick } = this.attribute;\n const data = this.data;\n // tick 处理\n const tickLineItems: TickLineItem[] = [];\n const { alignWithLabel, inside = false, length, dataFilter } = tick as TickAttributes;\n let tickSegment = 1;\n const count = data.length;\n if (count >= 2) {\n tickSegment = data[1].value - data[0].value;\n }\n\n (dataFilter && isFunction(dataFilter) ? dataFilter(data) : data).forEach((item: TransformedAxisItem) => {\n let point = item.point;\n let tickValue = item.value;\n if (!alignWithLabel) {\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n tickValue = value;\n }\n const endPoint = this.getVerticalCoord(point, length as number, inside);\n\n if (this.mode === '3d') {\n const vec = this.getVerticalVector(length as number, inside, point);\n let alpha = 0;\n let beta = 0;\n if (abs(vec[0]) > abs(vec[1])) {\n alpha = (pi / 2) * (endPoint.x > point.x ? 1 : -1);\n } else {\n beta = (pi / 2) * (endPoint.y > point.y ? -1 : 1);\n }\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`,\n anchor: [point.x, point.y],\n alpha,\n beta\n });\n } else {\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`\n });\n }\n });\n\n return tickLineItems;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as AxisBaseAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n\n if (tickLineCount >= 2) {\n for (let i = 0; i < tickLineCount - 1; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value,\n id: `sub-tick-${value}`\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n private _getTickLineAttribute(type: string, tickItem: TickLineItem, index: number, tickItems: TickLineItem[]) {\n let style = get(this.attribute, `${type}.style`);\n const data = this.data[index];\n style = isFunction(style)\n ? merge(\n {},\n get(DEFAULT_AXIS_THEME, `${type}.style`),\n type === 'tick'\n ? style(data.rawValue, index, data, this.data)\n : style(tickItem.value, index, tickItem, tickItems)\n )\n : style;\n\n const { start, end, anchor, alpha, beta } = tickItem;\n return {\n points: [start, end],\n anchor,\n alpha,\n beta,\n ...style\n };\n }\n\n private _getLabelAttribute(\n tickDatum: TransformedAxisItem,\n index: number,\n tickData: TransformedAxisItem[],\n layer: number\n ) {\n const { space = 4, inside = false, formatMethod, type = 'text', text } = this.attribute.label as LabelAttributes;\n let offset = space;\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === inside) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === inside) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n offset += tickLength;\n\n // 先测试 line\n const axisVector = this.getRelativeVector(tickDatum.point);\n if (layer > 0) {\n if (axisVector[1] === 0) {\n offset += (this.axisLabelLayerSize[layer - 1].height + get(this.attribute, 'label.space', 4)) * layer;\n } else {\n offset += (this.axisLabelLayerSize[layer - 1].width + get(this.attribute, 'label.space', 4)) * layer;\n }\n }\n\n const point = this.getVerticalCoord(tickDatum.point, offset, inside);\n const vector = this.getVerticalVector(offset || 1, inside, point);\n const textContent = formatMethod\n ? formatMethod(`${tickDatum.label}`, tickDatum, index, tickData, layer)\n : tickDatum.label;\n let { style: textStyle } = this.attribute.label as LabelAttributes;\n textStyle = isFunction(textStyle)\n ? merge(\n {},\n DEFAULT_AXIS_THEME.label.style,\n (textStyle as callbackFunc | undefined>)(tickDatum, index, tickData, layer)\n )\n : textStyle;\n\n const labelAlign = this.getLabelAlign(vector, inside, (textStyle as ITextGraphicAttribute).angle);\n textStyle = merge(labelAlign, textStyle) as Partial;\n // 兼容原先 style.text 回调的方式\n if (isFunction(textStyle.text)) {\n // @ts-ignore\n textStyle.text = textStyle.text({\n label: tickDatum.label,\n value: tickDatum.rawValue,\n index: tickDatum.index,\n layer\n });\n }\n return {\n ...this.getLabelPosition(point, vector, textContent, textStyle),\n text: text ?? textContent,\n _originText: tickDatum.label,\n lineHeight: textStyle?.fontSize,\n type,\n ...textStyle\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return point;\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n","/**\n * @description 自动隐藏\n */\n\nimport { createRect, type IText } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty, isFunction, last } from '@visactor/vutils';\nimport type { CustomMethod } from '../type';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst methods = {\n parity: function (items: IText[]) {\n return items.filter((item, i) => (i % 2 ? item.setAttribute('opacity', 0) : 1));\n },\n greedy: function (items: IText[], sep: number) {\n let a: IText;\n return items.filter((b, i) => {\n if (!i || !intersect(a, b, sep)) {\n a = b;\n return 1;\n }\n return b.setAttribute('opacity', 0);\n });\n }\n};\n\nfunction hasBounds(item: IText) {\n let bounds;\n if (!item.OBBBounds.empty()) {\n bounds = item.OBBBounds;\n } else {\n bounds = item.AABBBounds;\n }\n return bounds.width() > 1 && bounds.height() > 1;\n}\n\n// reset all items to be fully opaque\nfunction reset(items: IText[]) {\n items.forEach(item => item.setAttribute('opacity', 1));\n return items;\n}\n\nfunction forceItemVisible(sourceItem: IText, items: IText[], check: boolean, comparator: any, inverse = false) {\n if (check && !sourceItem.attribute.opacity) {\n const remainLength = items.length;\n if (remainLength > 1) {\n sourceItem.setAttribute('opacity', 1);\n for (let i = 0; i < remainLength; i++) {\n const item = inverse ? items[remainLength - 1 - i] : items[i];\n if (comparator(item)) {\n item.setAttribute('opacity', 0);\n } else {\n break;\n }\n }\n }\n }\n}\n\ntype HideConfig = {\n /**\n * 轴的方向\n */\n orient: string;\n /**\n * 防重叠策略。\n * - 'parity': 奇偶校验,使用删除所有其他标签的策略(这对于标准线性轴非常有效)。\n * - 'greedy': 将执行标签的线性扫描,并删除与最后一个可见标签重叠的所有标签。\n * - 也可以传入函数用于自定义策略\n */\n method?: 'parity' | 'greedy' | CustomMethod;\n /**\n * 设置文本之间的间隔距离,单位 px\n */\n separation?: number;\n /**\n * 保证最后的label展示\n */\n lastVisible?: boolean;\n /**\n * 保证第一个的label展示\n */\n firstVisible?: boolean;\n};\n\nexport function autoHide(labels: IText[], config: HideConfig) {\n if (isEmpty(labels)) {\n return;\n }\n\n const source = labels.filter(hasBounds);\n if (isEmpty(source)) {\n return;\n }\n\n let items: IText[];\n\n items = reset(source);\n\n const { method = 'parity', separation: sep = 0 } = config;\n\n const reduce = isFunction(method) ? method : methods[method] || methods.parity;\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n const shouldCheck = (length: number, visibility: boolean, checkLength: boolean = true) => {\n return checkLength ? length < 3 || visibility : visibility;\n };\n\n const checkFirst = shouldCheck(items.length, config.firstVisible, false);\n /**\n * 0.17.10 之前,当最后 label 个数小于 3 的时候,才做最后的label强制显示的策略\n */\n let checkLast = shouldCheck(items.length, config.lastVisible);\n\n const firstSourceItem = source[0];\n const lastSourceItem = last(source);\n\n if (intersect(firstSourceItem, lastSourceItem, sep) && checkFirst && checkLast) {\n lastSourceItem.setAttribute('opacity', 0); // Or firstSourceItem, depending on preference\n checkLast = false;\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: IText) => intersect(item, firstSourceItem, sep));\n\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: IText) =>\n intersect(item, lastSourceItem, sep) ||\n (checkFirst && item !== firstSourceItem ? intersect(item, firstSourceItem, sep) : false),\n true\n );\n }\n\n source.forEach(item => {\n item.setAttribute('visible', !!item.attribute.opacity);\n });\n}\n","/**\n * @description 坐标轴标签自动旋转\n */\nimport type { IText, TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { degreeToRadian, isEmpty } from '@visactor/vutils';\nimport { genRotateBounds, itemIntersect } from './util';\n\ntype RotateConfig = {\n /**\n * 坐标轴的显示位置\n */\n orient: string;\n /**\n * 自动旋转的可选角度\n */\n labelRotateAngle?: number[];\n};\n\nexport function autoRotate(items: IText[], rotateConfig: RotateConfig) {\n if (isEmpty(items)) {\n return;\n }\n\n const { orient, labelRotateAngle = [0, 45, 90] } = rotateConfig;\n if (labelRotateAngle.length === 0 || items.some(item => !!item.attribute.angle)) {\n return;\n }\n\n let i = 0;\n let n = 0;\n if (labelRotateAngle && labelRotateAngle.length > 0) {\n n = labelRotateAngle.length;\n }\n\n while (i < n) {\n const angle = labelRotateAngle[i++];\n items.forEach(item => {\n // item.angle = angle;\n item.attribute.angle = degreeToRadian(angle);\n });\n tryRotate(orient, items);\n if (!hasIntersect(items)) {\n break;\n }\n }\n}\n\nfunction hasIntersect(items: IText[]): boolean {\n for (let i = 1; i < items.length; i++) {\n if (itemIntersect(items[i - 1], items[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction tryRotate(orient: string, items: IText[]) {\n // 针对 top bottom轴的自动旋转逻辑\n if (orient === 'bottom' || orient === 'top') {\n rotateXAxis(orient, items);\n }\n if (orient === 'left' || orient === 'right') {\n rotateYAxis(orient, items);\n }\n // 先旋转,再计算这个limit,避免算limit后发现不需要旋转,导致莫名的水平limit\n genRotateBounds(items);\n}\n\nfunction clampAngle(angle = 0) {\n if (angle < 0) {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n }\n if (angle > 0) {\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n }\n\n return angle;\n}\n\nexport function rotateYAxis(orient: string, items: IText[]) {\n // 由于左右轴会裁切,所以上下两个label需要额外处理,做tighten处理\n items.forEach((item, i) => {\n item.attribute.angle &&\n item.setAttributes({\n ...getYAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function rotateXAxis(orient: string, items: IText[]) {\n items.forEach(item => {\n item.attribute.angle &&\n item.setAttributes({\n ...getXAxisLabelAlign(orient, item.attribute.angle),\n angle: clampAngle(item.attribute.angle)\n });\n });\n}\n\nexport function getXAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['center', 'left', 'left', 'left', 'center', 'right', 'right', 'right', 'left'];\n let baseline = ['top', 'top', 'middle', 'bottom', 'bottom', 'bottom', 'middle', 'top', 'top'];\n if (orient === 'top') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['center', 'right', 'right', 'right', 'center', 'left', 'left', 'left', 'right'];\n baseline = ['bottom', 'bottom', 'middle', 'top', 'top', 'top', 'middle', 'bottom', 'bottom'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n\nexport function getYAxisLabelAlign(orient: string, angle: number = 0) {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n let align = ['right', 'right', 'center', 'left', 'left', 'left', 'center', 'right', 'right'];\n let baseline = ['middle', 'middle', 'top', 'top', 'middle', 'middle', 'bottom', 'bottom', 'middle'];\n\n if (orient === 'right') {\n // 0, 0-90, 90, 90-180, 180, 180-270, 270, 270-360, 360\n align = ['left', 'left', 'center', 'right', 'right', 'right', 'center', 'left', 'left'];\n baseline = ['middle', 'middle', 'bottom', 'bottom', 'middle', 'middle', 'top', 'middle', 'middle'];\n }\n\n angle = clampAngle(angle);\n const step = angle / (Math.PI * 0.5);\n let index;\n if (step === Math.floor(step)) {\n index = Math.floor(step) * 2;\n } else {\n index = Math.floor(step) * 2 + 1;\n }\n\n return {\n textAlign: align[index] as TextAlignType,\n textBaseline: baseline[index] as TextBaselineType\n };\n}\n","/**\n * 自动省略\n */\nimport type { IText } from '@visactor/vrender-core';\nimport { isAngleHorizontal, isAngleVertical } from './util';\nimport type { AxisLabelOverlap } from '../type';\nimport { isEmpty, isNil, isObject, isValidNumber } from '@visactor/vutils';\n\ntype LimitConfig = {\n orient: string;\n limitLength: number;\n axisLength: number;\n verticalLimitLength?: number;\n ellipsis?: string;\n overflowLimitLength?: AxisLabelOverlap['overflowLimitLength'];\n};\n\nfunction normalizeOverflowLimitLength(overflowLimitLength?: AxisLabelOverlap['overflowLimitLength']) {\n if (isValidNumber(overflowLimitLength)) {\n return {\n left: overflowLimitLength,\n right: overflowLimitLength\n // top: overflowLimitLength,\n // bottom: overflowLimitLength\n };\n } else if (isObject(overflowLimitLength)) {\n return {\n left: overflowLimitLength.left || 0,\n right: overflowLimitLength.right || 0\n // top: overflowLimitLength.top || 0,\n // bottom: overflowLimitLength.bottom || 0\n };\n }\n return { left: 0, right: 0 };\n}\n\nexport function autoLimit(labels: IText[], config: LimitConfig) {\n const { limitLength, verticalLimitLength, ellipsis = '...', orient, axisLength } = config;\n if (isEmpty(labels) || !isValidNumber(limitLength)) {\n return;\n }\n const overflowLimitLength = normalizeOverflowLimitLength(config.overflowLimitLength);\n // 注意:自动隐藏算法暂时只考虑所有标签角度都一致的情况\n const firstLabel = labels[0];\n const angle = firstLabel.attribute.angle;\n const hasAngle = !isNil(angle);\n const cos = hasAngle ? Math.cos(angle) : 1;\n const sin = hasAngle ? Math.sin(angle) : 0;\n const isHorizontal = isAngleHorizontal(angle);\n const isVertical = isAngleVertical(angle);\n const isX = orient === 'top' || orient === 'bottom';\n const direction = firstLabel.attribute.direction;\n // 判断有长度差异的阀值\n const THRESHOLD = 2;\n const checkBox =\n !isHorizontal &&\n !isVertical &&\n isX &&\n (labels.length < 2 ||\n labels.some(label => Math.abs(label.AABBBounds.width() - firstLabel.AABBBounds.width()) >= THRESHOLD)) &&\n firstLabel.AABBBounds.width() > Math.abs(limitLength / sin);\n\n labels.forEach(label => {\n if (isX) {\n if (isVertical && Math.floor(label.AABBBounds.height()) <= limitLength) {\n return;\n }\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= verticalLimitLength) {\n return;\n }\n }\n\n if (!isX) {\n if (direction === 'vertical' && Math.floor(label.AABBBounds.height()) <= verticalLimitLength) {\n return;\n }\n\n if (direction !== 'vertical') {\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= limitLength) {\n return;\n }\n if (isVertical && Math.floor(label.AABBBounds.height()) <= verticalLimitLength) {\n return;\n }\n }\n }\n\n // 如果水平并且文本未发生旋转,则不配置 maxLineWidth\n let limitLabelLength = null;\n\n if (!isHorizontal && !isVertical) {\n if (isX) {\n const { x1, x2 } = label.AABBBounds;\n const tan = sin / cos;\n const verticalSizeLimit = Math.abs(limitLength / sin);\n\n if (\n checkBox &&\n tan > 0 &&\n x1 <= axisLength + overflowLimitLength.right &&\n limitLength / tan + x1 > axisLength + overflowLimitLength.right\n ) {\n // 以 x1 近似为锚点,文字在 x1 右侧\n const lengthLimit = (axisLength - x1 + overflowLimitLength.right) / Math.abs(cos);\n limitLabelLength = Math.min(lengthLimit, verticalSizeLimit);\n } else if (\n checkBox &&\n tan < 0 &&\n x2 >= -overflowLimitLength.left &&\n limitLength / tan + x2 < -overflowLimitLength.left\n ) {\n // 以 x2 近似为锚点,文字在 x2 左侧\n const lengthLimit = (x2 + overflowLimitLength.left) / Math.abs(cos);\n limitLabelLength = Math.min(lengthLimit, verticalSizeLimit);\n } else {\n limitLabelLength = verticalSizeLimit;\n }\n } else {\n // y轴暂时不限制在平行于坐标轴的矩形内,后续可以考虑通过配置开启\n // const { y1, y2 } = label.AABBBounds;\n // const tan = sin / cos;\n // if (tan > 0 && y2 >= 0 && y2 - tan * limitLength < 0) {\n // limitLabelLength = y2 / Math.abs(sin);\n // } else if (tan < 0 && y1 <= axisLength && y1 - tan * limitLength > axisLength) {\n // limitLabelLength = (axisLength - y1) / Math.abs(sin);\n // } else {\n // }\n limitLabelLength = Math.abs(limitLength / cos);\n }\n } else if (isX) {\n limitLabelLength = isHorizontal ? verticalLimitLength : limitLength;\n } else {\n limitLabelLength = direction === 'vertical' || isVertical ? verticalLimitLength : limitLength;\n }\n\n if (isValidNumber(label.attribute.maxLineWidth)) {\n limitLabelLength = isValidNumber(limitLabelLength)\n ? Math.min(label.attribute.maxLineWidth, limitLabelLength)\n : label.attribute.maxLineWidth;\n }\n label.setAttributes({\n maxLineWidth: limitLabelLength,\n ellipsis: label.attribute.ellipsis ?? ellipsis\n });\n });\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isEmpty, isValidNumber, min } from '@visactor/vutils';\nimport { isAngleHorizontal, isAngleVertical } from './util';\n\ntype WrapConfig = {\n orient: string;\n limitLength: number;\n axisLength: number;\n ellipsis?: string;\n};\n\nexport function autoWrap(labels: IText[], config: WrapConfig) {\n const { limitLength, axisLength, ellipsis = '...', orient } = config;\n if (isEmpty(labels) || !isValidNumber(limitLength)) {\n return;\n }\n\n // 注意:自动换行算法暂时只考虑所有标签角度都一致的情况\n const firstLabel = labels[0];\n const angle = firstLabel.attribute.angle;\n const isHorizontal = isAngleHorizontal(angle);\n const isVertical = isAngleVertical(angle);\n const isX = orient === 'top' || orient === 'bottom';\n\n let verticalLimitLength = axisLength / labels.length;\n\n labels.forEach((label, index) => {\n if (isX) {\n if (isVertical && Math.floor(label.AABBBounds.height()) <= limitLength) {\n return;\n }\n if (isHorizontal) {\n const curLabelX = label.attribute.x;\n const nextLabelX = labels[index + 1]?.attribute.x;\n const lastLabelX = labels[index - 1]?.attribute.x;\n const minGap = getLabelMinGap(curLabelX, nextLabelX, lastLabelX);\n if (isValidNumber(minGap)) {\n verticalLimitLength = min(verticalLimitLength, minGap);\n }\n }\n } else {\n if (isVertical) {\n const curLabelY = label.attribute.y;\n const nextLabelY = labels[index + 1]?.attribute.y;\n const lastLabelY = labels[index - 1]?.attribute.y;\n const minGap = getLabelMinGap(curLabelY, nextLabelY, lastLabelY);\n if (isValidNumber(minGap)) {\n verticalLimitLength = min(verticalLimitLength, minGap);\n }\n }\n if (isHorizontal && Math.floor(label.AABBBounds.width()) <= limitLength) {\n return;\n }\n }\n\n let limitLabelLength = null;\n let heightLimit = null;\n\n if (isX) {\n if (isVertical) {\n limitLabelLength = limitLength;\n heightLimit = verticalLimitLength;\n } else {\n limitLabelLength = verticalLimitLength;\n heightLimit = limitLength;\n }\n } else {\n if (isVertical) {\n limitLabelLength = verticalLimitLength;\n heightLimit = limitLength;\n } else {\n limitLabelLength = limitLength;\n heightLimit = verticalLimitLength;\n }\n }\n label.setAttributes({\n maxLineWidth: limitLabelLength,\n ellipsis: label.attribute.ellipsis ?? ellipsis,\n whiteSpace: 'normal',\n heightLimit\n });\n });\n}\n\nfunction getLabelMinGap(current: number, next?: number, prev?: number) {\n let minGap;\n if (isValidNumber(next)) {\n minGap = Math.abs(next - current);\n }\n\n if (isValidNumber(prev)) {\n if (isValidNumber(minGap)) {\n minGap = Math.min(Math.abs(current - prev), minGap);\n } else {\n minGap = Math.abs(current - prev);\n }\n }\n\n return minGap;\n}\n","import type { IText } from '@visactor/vrender-core';\n\nexport function alignAxisLabels(labels: IText[], start: number, containerSize: number, orient: string, align: string) {\n if (orient === 'left' || orient === 'right') {\n if (align === 'left') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start - label.AABBBounds.x1\n });\n });\n } else if (align === 'right') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start + containerSize - label.AABBBounds.x2\n });\n });\n } else if (align === 'center') {\n labels.forEach(label => {\n label.setAttributes({\n dx: (label.attribute.dx ?? 0) + start + containerSize / 2 - (label.AABBBounds.x1 + label.AABBBounds.x2) / 2\n });\n });\n }\n } else if (orient === 'bottom' || orient === 'top') {\n if (align === 'top') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start - label.AABBBounds.y1\n });\n });\n } else if (align === 'bottom') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start + containerSize - label.AABBBounds.y2\n });\n });\n } else if (align === 'middle') {\n labels.forEach(label => {\n label.setAttributes({\n dy: (label.attribute.dy ?? 0) + start + containerSize / 2 - (label.AABBBounds.y1 + label.AABBBounds.y2) / 2\n });\n });\n }\n }\n}\n","import type { Point } from '../../core/type';\nimport { normalize, scale } from '../../util';\n\nexport interface LineAxisMixin {\n attribute: { start: Point; end: Point; verticalFactor?: number };\n}\n\nexport class LineAxisMixin {\n isInValidValue(value: number) {\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const { start } = this.attribute;\n const axisVector = this.getRelativeVector();\n return {\n x: start.x + axisVector[0] * tickValue,\n y: start.y + axisVector[1] * tickValue\n };\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { start, end } = this.attribute;\n return [end.x - start.x, end.y - start.y];\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n const { verticalFactor = 1 } = this.attribute;\n const axisVector = this.getRelativeVector();\n const normalizedAxisVector = normalize(axisVector);\n const verticalVector: [number, number] = [normalizedAxisVector[1], normalizedAxisVector[0] * -1];\n return scale(verticalVector, offset * (inside ? 1 : -1) * verticalFactor);\n }\n}\n","import {\n registerCircle,\n registerGroup,\n registerLine,\n registerPath,\n registerRect,\n registerRichtext,\n registerText\n} from '@visactor/vrender-kits';\n\nfunction loadBasicAxis() {\n registerGroup();\n registerLine();\n registerRichtext();\n registerText();\n}\n\nexport function loadLineAxisComponent() {\n loadBasicAxis();\n registerRect();\n}\n\nexport function loadCircleAxisComponent() {\n loadBasicAxis();\n registerCircle();\n}\n\nexport function loadLineAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadCircleAxisGridComponent() {\n registerGroup();\n registerPath();\n}\n","/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TextAlignType, IGroup, INode, IText, TextBaselineType } from '@visactor/vrender-core';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport type { TagAttributes } from '../tag';\nimport type { LineAttributes, LineAxisAttributes, TitleAttributes, AxisItem, TransformedAxisBreak } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES, TopZIndex } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { autoWrap as autoWrapFunc } from './overlap/auto-wrap';\n\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineAxisComponent } from './register';\nimport { getAxisBreakSymbolAttrs } from './util';\n\nloadLineAxisComponent();\nexport interface LineAxis\n extends Pick,\n AxisBase {}\n\nexport class LineAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: LineAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineAxis.defaultAttributes, attributes), options);\n }\n\n private _breaks: TransformedAxisBreak[];\n\n protected _renderInner(container: IGroup) {\n this._breaks = null; // 置空,防止轴更新时缓存了旧值\n if (this.attribute.breaks && this.attribute.breaks.length) {\n const transformedBreaks = [];\n for (let index = 0; index < this.attribute.breaks.length; index++) {\n const aBreak = this.attribute.breaks[index];\n const { range, breakSymbol, rawRange } = aBreak;\n transformedBreaks.push({\n startPoint: this.getTickCoord(range[0]),\n endPoint: this.getTickCoord(range[1]),\n range,\n breakSymbol,\n rawRange\n });\n }\n this._breaks = transformedBreaks;\n }\n super._renderInner(container);\n\n // 渲染 break symbol\n if (this._breaks && this._breaks.length) {\n this._breaks.forEach((b, index) => {\n const { startPoint, endPoint, breakSymbol, rawRange } = b;\n\n if (breakSymbol?.visible !== false) {\n const axisBreakGroup = graphicCreator.group({\n zIndex: TopZIndex // 层级需要高于轴线\n });\n axisBreakGroup.name = AXIS_ELEMENT_NAME.axisBreak;\n axisBreakGroup.id = this._getNodeId(`${AXIS_ELEMENT_NAME.axisBreak}-${index}`);\n axisBreakGroup.data = rawRange;\n const symbolStyle = getAxisBreakSymbolAttrs(breakSymbol);\n const shape1 = graphicCreator.symbol({\n x: startPoint.x,\n y: startPoint.y,\n ...symbolStyle\n });\n shape1.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n const shape2 = graphicCreator.symbol({\n x: endPoint.x,\n y: endPoint.y,\n ...symbolStyle\n });\n shape2.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n\n axisBreakGroup.add(shape1);\n axisBreakGroup.add(shape2);\n\n container.add(axisBreakGroup);\n }\n });\n }\n\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = graphicCreator.rect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n }\n\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, state, ...restLineAttrs } = line as LineAttributes;\n\n const lineAttrs = {\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (this._breaks && this._breaks.length) {\n // 配置了轴截断\n const linePoints = [];\n let lastStartPoint = start;\n this._breaks.forEach(b => {\n const { startPoint, endPoint } = b;\n linePoints.push([lastStartPoint, startPoint]);\n lastStartPoint = endPoint;\n });\n linePoints.push([lastStartPoint, end]);\n lineAttrs.points = linePoints;\n lineAttrs.multiSegment = true;\n } else {\n lineAttrs.points = [start, end];\n }\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state = {},\n maxWidth,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.height() : 0;\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n if (\n this.axisLabelsContainer &&\n this.axisLabelsContainer.AABBBounds &&\n !this.axisLabelsContainer.AABBBounds.empty()\n ) {\n const baseX = this.axisLabelLayerSize[0].labelPos;\n const bounds = this.axisLabelsContainer.AABBBounds;\n\n labelLength +=\n (factor === 1\n ? bounds.x2 > baseX\n ? Math.min(bounds.x2 - baseX, bounds.width())\n : 0\n : bounds.x1 < baseX\n ? Math.min(baseX - bounds.x1, bounds.width())\n : 0) +\n (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const titlePoint = this.getVerticalCoord(point, offset, false); // 标题的点\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算标题缩略\n let maxTagWidth = maxWidth;\n if (isNil(maxTagWidth)) {\n const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n if (isValidNumber(limitSize)) {\n const isX = orient === 'bottom' || orient === 'top';\n if (isX) {\n if (angle !== Math.PI / 2) {\n const cosValue = Math.abs(Math.cos(angle ?? 0));\n maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n } else {\n maxTagWidth = limitSize - offset;\n }\n } else {\n if (angle && angle !== 0) {\n const sinValue = Math.abs(Math.sin(angle));\n maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n } else {\n maxTagWidth = limitSize - offset;\n }\n }\n }\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n const isCartesian = ['top', 'bottom', 'right', 'left'].includes(orient);\n // 目前的向量方法暂无法返回正确的笛卡尔坐标轴下文本旋转后的问题,所以通过这种方法判断,保证旋转后 textAlign 和 textBaseline 也正确\n if (isCartesian || (vector[0] === 0 && vector[1] === 0)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(inside ? (orient === 'bottom' ? 'top' : 'bottom') : orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(inside ? (orient === 'left' ? 'right' : 'left') : orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start: axisStart, end: axisEnd } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n if (isX) {\n const leftMostLabel = isInverse ? last : first;\n const rightMostLabel = isInverse ? first : last;\n const left = axisStart.x;\n const right = axisEnd.x;\n const leftBound = leftMostLabel.AABBBounds.x1;\n const rightBound = rightMostLabel.AABBBounds.x2;\n\n if (leftBound < left) {\n const angle = leftMostLabel.attribute.angle;\n\n if (angle) {\n leftMostLabel.setAttributes({ dx: (leftMostLabel.attribute.dx ?? 0) + left - leftBound });\n } else {\n leftMostLabel.setAttributes({\n x: left,\n textAlign: 'left'\n });\n }\n }\n\n if (rightBound > right) {\n const angle = rightMostLabel.attribute.angle;\n\n if (angle) {\n rightMostLabel.setAttributes({ dx: (rightMostLabel.attribute.dx ?? 0) + right - rightBound });\n } else {\n rightMostLabel.setAttributes({\n x: right,\n textAlign: 'right'\n });\n }\n }\n } else {\n const bottomMostLabel = isInverse ? last : first;\n const topMostLabel = isInverse ? first : last;\n const bottomBound = bottomMostLabel.AABBBounds.y2;\n const topBound = topMostLabel.AABBBounds.y1;\n const top = axisStart.y;\n const bottom = axisEnd.y;\n\n if (topBound < top) {\n const angle = topMostLabel.attribute.angle;\n\n if (angle) {\n // has rotate\n topMostLabel.setAttributes({\n dy: (topMostLabel.attribute.dy ?? 0) + top - topBound\n });\n } else {\n topMostLabel.setAttributes({\n y: top,\n textBaseline: 'top'\n });\n }\n }\n\n if (bottomBound > bottom) {\n const angle = bottomMostLabel.attribute.angle;\n\n if (angle) {\n bottomMostLabel.setAttributes({\n dy: (bottomMostLabel.attribute.dy ?? 0) + bottom - bottomBound\n });\n } else {\n bottomMostLabel.setAttributes({\n y: bottom,\n textBaseline: 'bottom'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation,\n lastVisible,\n firstVisible,\n autoWrap,\n overflowLimitLength\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate Or autoRotate -> autoLimit -> autoHide\n // priority: autoRotate > autoWrap\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n } else if (autoWrap) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n autoWrapFunc(labelShapes, { orient, limitLength, axisLength, ellipsis: limitEllipsis });\n }\n\n // autoWrap has computed width & height limit\n if (!autoWrap && autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n\n const verticalLimitLength = isVertical\n ? axisLength / labelShapes.length\n : !autoHide && !autoRotate\n ? axisLength / labelShapes.length\n : Infinity;\n\n autoLimitFunc(labelShapes, {\n limitLength,\n verticalLimitLength,\n ellipsis: limitEllipsis,\n orient,\n axisLength,\n overflowLimitLength\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation,\n lastVisible,\n firstVisible\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = graphicCreator.rect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line && line.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick && tick.visible ? tick.length ?? 4 : 0;\n if (title && title.visible && typeof title.text === 'string') {\n titleHeight = measureTextSize(title.text, title.textStyle, this.stage?.getTheme()?.text).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n\n release(): void {\n super.release();\n this._breaks = null;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n","import { polarToCartesian } from '@visactor/vutils';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport type { Point } from '../../core/type';\nimport { getCircleVerticalVector } from '../util';\n\nexport interface CircleAxisMixin {\n attribute: {\n /**\n * 当配置了 innerRadius 时,可以通过设置 inside: true,将坐标轴战士在内圆半径上。\n * @default false\n */\n inside?: boolean;\n /**\n * 圆心坐标\n */\n center: Point;\n /**\n * **弧度值**,起始弧度,默认 -0.5 * Math.PI\n *\n */\n startAngle?: number;\n /**\n * **弧度值**,结束弧度,默认 1.5 * Math.PI\n */\n endAngle?: number;\n /**\n * 半径\n */\n radius: number;\n /** 内半径 */\n innerRadius?: number;\n };\n}\n\nexport class CircleAxisMixin {\n isInValidValue(value: number) {\n const { startAngle = POLAR_START_ANGLE, endAngle = POLAR_END_ANGLE } = this.attribute;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n return value > 1;\n }\n\n return value < 0 || value > 1;\n }\n\n getTickCoord(tickValue: number): Point {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n radius,\n inside = false,\n innerRadius = 0\n } = this.attribute;\n const angle = startAngle + (endAngle - startAngle) * tickValue;\n return polarToCartesian(center, inside && innerRadius > 0 ? innerRadius : radius, angle);\n }\n\n getVerticalVector(offset: number, inside = false, point: Point): [number, number] {\n return getCircleVerticalVector(offset, point, this.attribute.center, inside, this.attribute.inside);\n }\n\n getRelativeVector(point?: Point): [number, number] {\n const { center } = this.attribute;\n return [point.y - center.y, -1 * (point.x - center.x)];\n }\n}\n","import type { IText } from '@visactor/vrender-core';\nimport { isNumberClose } from '@visactor/vutils';\nimport type { Point } from '../../core/type';\n\ntype WrapConfig = {\n center: Point;\n inside?: boolean;\n ellipsis?: string;\n bounds: { x1: number; x2: number; y1: number; y2: number };\n autoWrap?: boolean;\n};\n\nfunction findSiblingLabels(labels: IText[], selfIndex: number) {\n const len = labels.length;\n const prevLabel = selfIndex >= 1 ? labels[selfIndex - 1] : labels[len - 1];\n const nextLabel = selfIndex < len - 1 ? labels[selfIndex + 1] : labels[0];\n\n return { prevLabel, nextLabel };\n}\n\nfunction adjustMaxLineWidth(label: IText, maxLineWidth: number, ellipsis: string) {\n label.setAttributes({\n maxLineWidth,\n ellipsis: label.attribute.ellipsis ?? ellipsis\n });\n}\n\nfunction adjustMaxHeight(\n labels: IText[],\n selfIndex: number,\n bounds: { x1: number; x2: number; y1: number; y2: number }\n) {\n const siblings = [];\n if (labels.length >= 3) {\n const { prevLabel, nextLabel } = findSiblingLabels(labels, selfIndex);\n\n siblings.push(prevLabel, nextLabel);\n } else if (labels.length === 2) {\n siblings.push(labels[selfIndex === 0 ? 1 : 0]);\n }\n const label = labels[selfIndex];\n\n let heightLimit = Math.min(Math.abs(label.attribute.y - bounds.y1), Math.abs(label.attribute.y - bounds.y2));\n\n siblings.forEach(sibling => {\n heightLimit = Math.min(heightLimit, Math.abs(sibling.attribute.y - label.attribute.y));\n });\n\n if (heightLimit > 0) {\n label.setAttributes({ whiteSpace: 'normal', heightLimit });\n }\n}\n/**\n * 基于所有的标签初始化未知已经布局在圆的边缘\n * @param labels\n * @param labelPoints\n * @param config\n */\nexport function circleAutoLimit(labels: IText[], config: WrapConfig) {\n const { ellipsis, inside, bounds, autoWrap, center } = config;\n\n if (!inside) {\n // TODO inside label暂不处理,现在应该没有类似的需求\n labels.forEach((label, index) => {\n const { x, y } = label.attribute;\n const b = label.AABBBounds;\n\n if (isNumberClose(x, center.x)) {\n if (y > bounds.y2 || y < bounds.y1) {\n adjustMaxLineWidth(label, 0, ellipsis);\n return;\n }\n\n const boxWidth = bounds.x2 - bounds.x1;\n // 12点和6点钟方向对应的label\n if (labels.length >= 3) {\n // 这里其实有一个前提:所有的label都是按照顺时针或者逆时针排序好的\n const { prevLabel, nextLabel } = findSiblingLabels(labels, index);\n let leftX = prevLabel.attribute.x;\n let rightX = nextLabel.attribute.x;\n\n if (leftX > rightX) {\n leftX = nextLabel.attribute.x;\n rightX = prevLabel.attribute.x;\n }\n\n const maxWidth =\n leftX === rightX\n ? boxWidth\n : x >= leftX && x <= rightX\n ? rightX - leftX\n : Math.min(Math.abs(leftX - x), Math.abs(rightX - x));\n if (label.AABBBounds.width() > maxWidth) {\n adjustMaxLineWidth(label, maxWidth, ellipsis);\n }\n } else if (label.AABBBounds.width() > boxWidth) {\n adjustMaxLineWidth(label, boxWidth, ellipsis);\n }\n } else if (x > center.x && b.x2 > bounds.x2) {\n adjustMaxLineWidth(label, bounds.x2 - x, ellipsis);\n autoWrap && adjustMaxHeight(labels, index, bounds);\n } else if (x < center.x && b.x1 < bounds.x1) {\n adjustMaxLineWidth(label, x - bounds.x1, ellipsis);\n autoWrap && adjustMaxHeight(labels, index, bounds);\n }\n });\n }\n}\n","/**\n * @description 圆弧型坐标轴\n */\nimport type {\n IGraphic,\n IGroup,\n IText,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Point } from '@visactor/vutils';\nimport { isNil, get, merge, isNumberClose, isEmpty, mixin, isValidNumber, isFunction } from '@visactor/vutils';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport type { CircleAxisAttributes, TitleAttributes, SubTickAttributes, TickLineItem, AxisItem } from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES } from './constant';\nimport { CircleAxisMixin } from './mixin/circle';\nimport { getCirclePoints, getPolygonPath } from './util';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleAxisComponent } from './register';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { circleAutoLimit } from './overlap/circle-auto-limit';\n\nloadCircleAxisComponent();\nexport interface CircleAxis\n extends Pick,\n AxisBase {}\n\nexport class CircleAxis extends AxisBase {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n\n constructor(attributes: CircleAxisAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleAxis.defaultAttributes, attributes));\n }\n\n protected renderLine(container: IGroup): void {\n const {\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n radius,\n center,\n innerRadius = 0,\n line = {},\n inside = false,\n sides\n } = this.attribute as CircleAxisAttributes;\n\n let arcRadius = radius;\n let arcInnerRadius = innerRadius;\n if (inside && innerRadius > 0) {\n arcRadius = innerRadius;\n arcInnerRadius = 0;\n }\n\n let lineGraphic: IGraphic;\n if (isValidNumber(sides) && sides >= 3) {\n const gridPoints = getCirclePoints(center as Point, sides as number, arcRadius, startAngle, endAngle);\n\n lineGraphic = graphicCreator.path({\n ...line.style,\n path: getPolygonPath(gridPoints, true)\n });\n } else {\n const arcAttrs = {\n ...center,\n startAngle,\n endAngle,\n radius: arcRadius,\n innerRadius: arcInnerRadius,\n ...line.style\n };\n lineGraphic = graphicCreator.circle(arcAttrs);\n }\n\n lineGraphic.name = AXIS_ELEMENT_NAME.line;\n lineGraphic.id = this._getNodeId('line');\n\n if (!isEmpty(line.state)) {\n lineGraphic.states = merge({}, DEFAULT_STATES, line.state);\n }\n container.add(lineGraphic);\n }\n\n protected getTitleAttribute() {\n const { center, radius, innerRadius = 0 } = this.attribute as CircleAxisAttributes;\n const {\n space = 4,\n textStyle = {},\n shape,\n background,\n state = {},\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let titlePoint = center;\n let labelHeight = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n // 这里取 label 的最大长度\n labelHeight = get(this.attribute.label, 'style.fontSize', 12) + get(this.attribute.label, 'space', 4);\n }\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n const offset = radius + tickLength + labelHeight + space;\n let textBaseline: TextBaselineType = 'middle';\n let { position } = this.attribute.title as TitleAttributes;\n if (isNil(position)) {\n position = innerRadius === 0 ? 'end' : 'middle';\n }\n if (position === 'start') {\n textBaseline = 'bottom';\n titlePoint = {\n x: center.x,\n y: center.y - offset\n };\n } else if (position === 'end') {\n textBaseline = 'top';\n titlePoint = {\n x: center.x,\n y: center.y + offset\n };\n }\n const attrs: any = {\n ...titlePoint,\n ...restAttrs,\n textStyle: {\n textBaseline,\n textAlign: 'center',\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n\n const { angle } = restAttrs; // 用户设置的是角度\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as CircleAxisAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const tickSegment = this.data[1].value - this.data[0].value;\n const isAlignWithLable = this.attribute?.tick?.alignWithLabel;\n for (let i = 0; i < tickLineCount; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : isAlignWithLable ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { inside, radius, center, size, label, orient } = this.attribute;\n // 宽高为0的异常情况,还是以圆心进行布局\n const bounds = size\n ? {\n x1: 0,\n y1: 0,\n x2: size.width,\n y2: size.height\n }\n : {\n x1: center.x - radius,\n y1: center.y - radius,\n x2: center.x + radius,\n y2: center.y + radius\n };\n const { layoutFunc, autoLimit, limitEllipsis, autoHide, autoHideMethod, autoHideSeparation, autoWrap } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // autoWrap has computed width & height limit\n if (autoLimit || autoWrap) {\n circleAutoLimit(labelShapes, { inside, autoWrap, bounds, ellipsis: limitEllipsis, center });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation\n });\n }\n }\n }\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n return;\n }\n\n protected getTextBaseline(vector: [number, number]) {\n if (Math.abs(vector[1] / vector[0]) < 0.3) {\n return 'middle';\n } else if (vector[1] < 0) {\n return 'bottom';\n } else if (vector[1] > 0) {\n return 'top';\n }\n\n return 'middle';\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n if (isNumberClose(vector[0], 0)) {\n return {\n textAlign: 'center',\n textBaseline: vector[1] > 0 ? 'top' : 'bottom'\n };\n } else if (vector[0] < 0) {\n return {\n textAlign: 'right',\n textBaseline: this.getTextBaseline(vector)\n };\n } else if (vector[0] > 0) {\n return {\n textAlign: 'left',\n textBaseline: this.getTextBaseline(vector)\n };\n }\n\n return {\n textAlign: 'center', //'left',\n textBaseline: 'middle' //'top'\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial\n ) {\n return point;\n }\n}\n\nmixin(CircleAxis, CircleAxisMixin);\n","import { isString } from '@visactor/vutils';\nimport type { IScale, Nil } from '../types';\nimport type { IScaleComponent, ScaleComponentSpec } from '../types/component';\nimport { Component } from '../view/component';\n\nexport abstract class ScaleComponent extends Component implements IScaleComponent {\n protected declare spec: ScaleComponentSpec;\n\n protected parseAddition(spec: ScaleComponentSpec) {\n super.parseAddition(spec);\n this.scale(spec.scale);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n if (this.spec.scale) {\n const lastScaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this.detach(lastScaleGrammar);\n this.spec.scale = undefined;\n }\n const scaleGrammar = isString(scale) ? this.view.getScaleById(scale) : scale;\n this.spec.scale = scaleGrammar;\n this.attach(scaleGrammar);\n\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n getScale() {\n return isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n }\n}\n","import { isNil, isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisAttributes, LineAxisAttributes, ComponentOptions } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxis as CircleAxisComponent, LineAxis as LineAxisComponent } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum } from '../graph/enums';\nimport type { AxisSpec, AxisType, IAxis } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport type { IPolarCoordinate, IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisAttributes => {\n const axisTheme = theme?.components?.axis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisAttributes => {\n const axisTheme = theme?.components?.circleAxis ?? {};\n if (!scale) {\n return merge({}, axisTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = [\n tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }))\n ];\n return merge({}, axisTheme, { items }, addition ?? {});\n};\n\nexport const generateCoordinateAxisAttribute = (\n scale: IScale,\n coordinate: IBaseCoordinate,\n inside: boolean,\n baseValue: number,\n layout: MarkRelativeItemSpec,\n isGrid?: boolean\n) => {\n const axisPosition = scale.getCoordinateAxisPosition();\n if (layout && layout.position === 'auto') {\n // FIXME: too hack\n layout.position = inside ? 'content' : axisPosition;\n }\n\n const axisPoints = scale.getCoordinateAxisPoints(baseValue);\n\n if (axisPoints) {\n const start = axisPoints[0];\n const end = axisPoints[1];\n const res: any = {\n start,\n end,\n verticalFactor:\n (axisPosition === 'top' || axisPosition === 'left' ? -1 : 1) *\n (inside ? -1 : 1) *\n (scale.getSpec().range?.reversed ? -1 : 1)\n };\n\n if (isGrid && coordinate.type === 'polar') {\n const angle = (coordinate as IPolarCoordinate).angle();\n\n res.center = (coordinate as IPolarCoordinate).origin();\n res.startAngle = angle[0];\n res.endAngle = angle[1];\n }\n\n return res;\n }\n\n const radius = (coordinate as IPolarCoordinate).radius();\n const angle = (coordinate as IPolarCoordinate).angle();\n return {\n center: (coordinate as IPolarCoordinate).origin(),\n radius: radius[1],\n innerRadius: radius[0],\n inside: inside,\n startAngle: angle[0],\n endAngle: angle[1]\n };\n};\n\nexport class Axis extends ScaleComponent implements IAxis {\n static readonly componentType: string = ComponentEnum.axis;\n\n protected declare spec: AxisSpec;\n\n private _axisComponentType: keyof typeof AxisEnum;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.axis, group);\n this.spec.componentType = ComponentEnum.axis;\n this.mode = mode;\n }\n\n protected parseAddition(spec: AxisSpec) {\n super.parseAddition(spec);\n\n this.axisType(spec.axisType);\n this.tickCount(spec.tickCount);\n this.inside(spec.inside);\n this.baseValue(spec.baseValue);\n\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._axisComponentType = null;\n return this;\n }\n\n axisType(axisType: AxisType | Nil) {\n this.spec.axisType = axisType;\n this._axisComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getAxisComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n getAxisComponentType() {\n return this._axisComponentType;\n }\n\n protected _updateComponentEncoders() {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec\n ),\n addition\n );\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n\n switch (this._getAxisComponentType()) {\n case AxisEnum.lineAxis:\n return generateLineAxisAttributes(scale, theme, addition, tickCount);\n case AxisEnum.circleAxis:\n return generateCircleAxisAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getAxisComponentType() {\n if (this._axisComponentType) {\n return this._axisComponentType;\n }\n\n let type = this.spec.axisType;\n\n if (isNil(type)) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n type = scaleGrammar?.getCoordinate?.() ? (scaleGrammar.getCoordinateAxisPoints() ? 'line' : 'circle') : 'line';\n }\n\n this._axisComponentType = type === 'circle' ? AxisEnum.circleAxis : AxisEnum.lineAxis;\n\n return this._axisComponentType;\n }\n}\n\nexport const registerAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.lineAxis,\n (attrs: LineAxisAttributes, options?: ComponentOptions) =>\n new LineAxisComponent(attrs, options) as unknown as IGraphic\n );\n Factory.registerGraphicComponent(\n AxisEnum.circleAxis,\n (attrs: CircleAxisAttributes) => new CircleAxisComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n\nexport const registerLineAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.lineAxis,\n (attrs: LineAxisAttributes, options?: ComponentOptions) =>\n new LineAxisComponent(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n\nexport const registerCircleAxis = () => {\n Factory.registerGraphicComponent(\n AxisEnum.circleAxis,\n (attrs: CircleAxisAttributes) => new CircleAxisComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.axis, Axis);\n};\n","/**\n * @description 网格线\n */\nimport { isFunction, isArray, merge, PointService, abs, pi, isNumberClose } from '@visactor/vutils';\nimport type { IGraphic, IGroup, Path } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { Point } from '../../core/type';\nimport type { GridItem, CircleGridAttributes, GridBaseAttributes, GridAttributes, LineGridAttributes } from './type';\nimport type { AxisItem, TransformedAxisItem } from '../type';\nimport { AXIS_ELEMENT_NAME } from '../constant';\nimport { getElMap, getPolygonPath, getVerticalCoord } from '../util';\n\nfunction getArcPath(center: Point, points: Point[], reverse: boolean, closed: boolean) {\n let path = '';\n if (!center || points.length === 0) {\n return path;\n }\n const firstPoint = points[0];\n const radius = PointService.distancePP(center, firstPoint);\n const sweepFlag = reverse ? 0 : 1; // 顺时针还是逆时针\n if (closed) {\n // 封闭时,绘制整个圆\n path += `M${center.x},${center.y - radius}A${radius},${radius},0,0,${sweepFlag},${center.x},${\n center.y + radius\n }A${radius},${radius},0,0,${sweepFlag},${center.x},${center.y - radius}Z`;\n } else {\n points.forEach((point, index) => {\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `A${radius},${radius},0,0,${sweepFlag},${point.x},${point.y}`;\n }\n });\n }\n\n return path;\n}\n\nfunction getRegionPath(from: Point[], to: Point[], attribute: GridAttributes) {\n const { type, closed } = attribute;\n const reversePoints = to.slice(0).reverse();\n\n let regionPath = '';\n let nextPath = '';\n\n if (type === 'line' && (attribute as LineGridAttributes).smoothLink && (attribute as LineGridAttributes).center) {\n const fromStart = from[0];\n const toEnd = reversePoints[0];\n const center = (attribute as LineGridAttributes).center as Point;\n\n regionPath = getPolygonPath(from, !!closed);\n nextPath = getPolygonPath(reversePoints, !!closed);\n const toEndRadius = PointService.distancePP(toEnd, center);\n const fromStartRadius = PointService.distancePP(fromStart, center);\n regionPath += `A${toEndRadius},${toEndRadius},0,0,1,${toEnd.x},${toEnd.y}L${toEnd.x},${toEnd.y}`;\n nextPath += `A${fromStartRadius},${fromStartRadius},0,0,0,${fromStart.x},${fromStart.y}`;\n } else if (type === 'circle') {\n const { center } = attribute as CircleGridAttributes;\n regionPath = getArcPath(center, from, false, !!closed);\n nextPath = getArcPath(center, reversePoints, true, !!closed);\n } else if (type === 'line' || type === 'polygon') {\n regionPath = getPolygonPath(from, !!closed);\n nextPath = getPolygonPath(reversePoints, !!closed);\n }\n\n if (closed) {\n regionPath += nextPath;\n } else {\n nextPath = 'L' + nextPath.substring(1); // 更新第一个节点\n regionPath += nextPath;\n regionPath += 'Z';\n }\n return regionPath;\n}\n\nexport abstract class BaseGrid extends AbstractComponent> {\n name = 'axis-grid';\n\n static defaultAttributes: Partial = {\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: '#999',\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n }\n };\n\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n abstract getTickCoord(value: number): Point;\n abstract isInValidValue(value: number): boolean;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n protected abstract getGridAttribute(isSubGrid: boolean): T;\n protected abstract getGridPointsByValue(value: number): Point[];\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n const { items, visible } = this.attribute;\n if (items && items.length && visible !== false) {\n this.data = this._transformItems(items);\n this._renderGrid(this._innerView);\n }\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n private _renderGrid(container: any) {\n // 渲染 subGrid\n const { visible } = this.attribute.subGrid || {};\n if (visible) {\n this._renderGridByType(true, container);\n }\n\n // 渲染 Grid,Grid 需要在 subGrid 上层渲染\n this._renderGridByType(false, container);\n }\n\n private _renderGridByType(isSubGrid: boolean, container: IGroup) {\n const gridAttrs = merge({}, this.attribute, this.getGridAttribute(isSubGrid));\n\n const { type, items, style, closed, alternateColor, depth = 0 } = gridAttrs;\n const name = isSubGrid ? `${AXIS_ELEMENT_NAME.grid}-sub` : `${AXIS_ELEMENT_NAME.grid}`;\n\n // 绘制网格线\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n let path = '';\n if (type === 'line' || type === 'polygon') {\n path = getPolygonPath(points, !!closed);\n } else if (type === 'circle') {\n const { center } = this.attribute as unknown as CircleGridAttributes;\n path = getArcPath(center, points, false, !!closed);\n }\n const shape = graphicCreator.path({\n path,\n z: depth,\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n\n // 添加额外的3d线段\n if (depth && type === 'line') {\n items.forEach((item: GridItem, index: number) => {\n const { id, points } = item;\n // 重新计算points,使其长度为depth\n const nextPoints = [];\n nextPoints.push(points[0]);\n const dir = { x: points[1].x - points[0].x, y: points[1].y - points[0].y };\n const dirLen = Math.sqrt(dir.x * dir.x + dir.y * dir.y);\n const ratio = depth / dirLen;\n nextPoints.push({ x: points[0].x + dir.x * ratio, y: points[0].y + dir.y * ratio });\n const path = getPolygonPath(nextPoints, !!closed);\n const deltaX = abs(nextPoints[0].x - nextPoints[1].x);\n const deltaY = abs(nextPoints[0].y - nextPoints[1].y);\n const shape = graphicCreator.path({\n path,\n z: 0,\n alpha: deltaX > deltaY ? ((points[1].x - points[0].x > 0 ? -1 : 1) * pi) / 2 : 0,\n beta: deltaX < deltaY ? -pi / 2 : 0,\n anchor3d: deltaX > deltaY ? [nextPoints[0].x, 0] : [0, nextPoints[0].y],\n ...(isFunction(style)\n ? merge({}, this.skipDefault ? null : BaseGrid.defaultAttributes.style, style(item, index))\n : style)\n }) as Path;\n shape.name = `${name}-line`;\n shape.id = this._getNodeId(`${name}-path-${id}`);\n container.add(shape);\n });\n }\n\n // 绘制填充区域\n if (items.length > 1 && alternateColor) {\n const colors: string[] = isArray(alternateColor)\n ? (alternateColor as string[])\n : [alternateColor as string, 'transparent'];\n const getColor = (index: number) => colors[index % colors.length];\n const originalItems = this.attribute.items;\n const firstItem = originalItems[0];\n const lastItem = originalItems[originalItems.length - 1];\n const noZero = !isNumberClose(firstItem.value, 0) && !isNumberClose(lastItem.value, 0);\n const noOne = !isNumberClose(firstItem.value, 1) && !isNumberClose(lastItem.value, 1);\n const allPoints = [];\n const isDesc = firstItem.value > lastItem.value;\n\n if ((isDesc && noOne) || (!isDesc && noZero)) {\n allPoints.push(this.getGridPointsByValue(isDesc ? 1 : 0));\n }\n items.forEach((item: any) => {\n allPoints.push(item.points as Point[]);\n });\n\n if ((isDesc && noZero) || (!isDesc && noOne)) {\n allPoints.push(this.getGridPointsByValue(isDesc ? 0 : 1));\n }\n\n for (let index = 0; index < allPoints.length - 1; index++) {\n const prev = allPoints[index];\n const curr = allPoints[index + 1];\n const path = getRegionPath(prev, curr, gridAttrs);\n const shape = graphicCreator.path({\n path,\n fill: getColor(index)\n }) as Path;\n shape.name = `${name}-region`;\n shape.id = this._getNodeId(`${name}-region-${index}`);\n container.add(shape);\n }\n }\n }\n\n /**\n * @override 覆写\n * @param id\n * @returns\n */\n protected _getNodeId(id: string) {\n return `${this.id}-${id}`;\n }\n\n protected _parseTickSegment() {\n let tickSegment = 1;\n const count = this.data.length;\n if (count >= 2) {\n tickSegment = this.data[1].value - this.data[0].value;\n }\n\n return tickSegment;\n }\n\n protected _getPointsOfSubGrid(tickSegment: number, alignWithLabel: boolean) {\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n const points: { value: number }[] = [];\n if (tickLineCount >= 2) {\n this.data.forEach((item: TransformedAxisItem) => {\n let tickValue = item.value;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n tickValue = value;\n }\n points.push({\n value: tickValue\n });\n });\n }\n\n return points;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n","/**\n * @description 直线型坐标轴的网格线\n * - `type: 'line'` 用于直角坐标系下的坐标轴网格线绘制\n * - `type: 'circle'` 或者 `type: 'polygon'` 用于极坐标半径轴的网格线绘制\n */\nimport type { IPointLike } from '@visactor/vutils';\nimport { PointService, merge, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type {\n GridItem,\n LineAxisGridAttributes,\n LineGridOfLineAxisAttributes,\n PolarGridOfLineAxisAttributes\n} from './type';\nimport type { Point } from '../../core/type';\nimport { POLAR_START_ANGLE, POLAR_END_ANGLE } from '../../constant';\nimport { LineAxisMixin } from '../mixin/line';\nimport type { ComponentOptions } from '../../interface';\nimport { loadLineAxisGridComponent } from '../register';\nimport { getCirclePoints } from '../util';\n\nexport interface LineAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadLineAxisGridComponent();\nexport class LineAxisGrid extends BaseGrid {\n constructor(attributes: LineAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n private _getGridPoint(gridType: string, point: IPointLike): Point[] {\n let gridPoints;\n if (gridType === 'line') {\n const { length } = this.attribute as LineGridOfLineAxisAttributes;\n const endPoint = this.getVerticalCoord(point, length as number, true);\n\n gridPoints = [point, endPoint];\n } else if (gridType === 'circle' || gridType === 'polygon') {\n const {\n center,\n sides = 6,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as PolarGridOfLineAxisAttributes;\n const distance = PointService.distancePP(center as Point, point);\n gridPoints = getCirclePoints(center as Point, sides as number, distance, startAngle, endAngle);\n }\n\n return gridPoints;\n }\n\n protected getGridPointsByValue(value: number) {\n const basePoint = this.getTickCoord(value);\n\n return this._getGridPoint(this.attribute.type, basePoint);\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n const { type: gridType, alignWithLabel = true } = this.attribute;\n\n const tickSegment = this._parseTickSegment();\n\n let gridAttribute;\n let items: GridItem[] = [];\n if (!isSubGrid) {\n gridAttribute = this.attribute;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n this.data.forEach(item => {\n let { point } = item;\n\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n\n gridItems.push({\n id: item.label,\n datum: item,\n points: this._getGridPoint(gridType, point)\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, this.attribute, this.attribute.subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = gridAttribute;\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points = this._getPointsOfSubGrid(tickSegment, alignWithLabel);\n\n for (let i = 0; i < points.length - 1; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-0`,\n points: this.getGridPointsByValue(pre.value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: this.getGridPointsByValue(value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n if (i === points.length - 2) {\n subGridItems.push({\n id: `sub-${i}-${subCount + 1}`,\n points: this.getGridPointsByValue(next.value),\n // TODO: 其实这里也需要,后续需要考虑怎么挂上 data\n datum: {}\n });\n }\n }\n items = subGridItems;\n }\n }\n\n return {\n ...gridAttribute,\n items\n };\n }\n}\n\nmixin(LineAxisGrid, LineAxisMixin);\n","/**\n * @description 圆弧型坐标轴的网格线\n */\n\nimport { merge, mixin } from '@visactor/vutils';\nimport { BaseGrid } from './base';\nimport type { CircleAxisGridAttributes, GridItem } from './type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../constant';\nimport { CircleAxisMixin } from '../mixin/circle';\nimport type { ComponentOptions } from '../../interface';\nimport { loadCircleAxisGridComponent } from '../register';\n\nexport interface CircleAxisGrid\n extends Pick,\n BaseGrid {}\n\nloadCircleAxisGridComponent();\nexport class CircleAxisGrid extends BaseGrid {\n constructor(attributes: CircleAxisGridAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseGrid.defaultAttributes, attributes), options);\n }\n\n protected getGridPointsByValue(value: number) {\n const basePoint = this.getTickCoord(value);\n const { radius, innerRadius = 0 } = this.attribute;\n\n return [basePoint, this.getVerticalCoord(basePoint, radius - innerRadius, true)];\n }\n\n protected getGridAttribute(isSubGrid: boolean) {\n let gridAttribute;\n let items: GridItem[] = [];\n const {\n radius,\n innerRadius = 0,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE,\n center,\n subGrid,\n ...grid\n } = this.attribute;\n const { alignWithLabel = true } = grid || {};\n\n const length = radius - innerRadius;\n const tickSegment = this._parseTickSegment();\n if (!isSubGrid) {\n gridAttribute = grid as CircleAxisGridAttributes;\n // 计算 grid Items\n const gridItems: GridItem[] = [];\n let data;\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n data = [...this.data].concat(this.data[0]);\n } else {\n data = this.data;\n }\n\n data.forEach(item => {\n let { point } = item;\n if (!alignWithLabel) {\n // tickLine 不同 tick 对齐时需要调整 point\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n }\n const endPoint = this.getVerticalCoord(point, length as number, true);\n gridItems.push({\n id: item.id,\n points: [point, endPoint],\n datum: item\n });\n });\n items = gridItems;\n } else {\n // 渲染 subGrid\n gridAttribute = merge({}, grid, subGrid);\n // 计算 grid Items\n const subGridItems: GridItem[] = [];\n const { count: subCount = 4 } = subGrid || {};\n const tickLineCount = this.data.length;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickLineCount >= 2) {\n const points = this._getPointsOfSubGrid(tickSegment, alignWithLabel);\n\n for (let i = 0; i < tickLineCount; i++) {\n const pre = points[i];\n const next = points[i + 1];\n subGridItems.push({\n id: `sub-${i}-${0}`,\n points: [this.getTickCoord(pre.value), this.getVerticalCoord(this.getTickCoord(pre.value), length, true)],\n datum: {}\n });\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, true);\n subGridItems.push({\n id: `sub-${i}-${j + 1}`,\n points: [point, endPoint],\n // TODO: 这里也需要,后续考虑如何加上\n datum: {}\n });\n }\n }\n\n if (Math.abs(endAngle - startAngle) % (Math.PI * 2) === 0) {\n subGridItems.push(subGridItems[0]);\n }\n\n items = subGridItems;\n }\n }\n return {\n ...gridAttribute,\n items,\n center,\n type: 'line'\n };\n }\n}\n\nmixin(CircleAxisGrid, CircleAxisMixin);\n","import { isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { CircleAxisGridAttributes, ComponentOptions, LineAxisGridAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { CircleAxisGrid, LineAxisGrid } from '@visactor/vrender-components';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IScale,\n ITheme,\n IView,\n MarkFunctionType,\n MarkRelativeItemSpec,\n Nil,\n RecursivePartial,\n SimpleSignalType,\n StateEncodeSpec\n} from '../types';\nimport { AxisEnum, ComponentEnum, GridEnum } from '../graph/enums';\nimport type { GridShape, GridSpec, AxisType, IAxis, IGrid } from '../types/component';\nimport { ScaleComponent } from './scale';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { generateCoordinateAxisAttribute } from './axis';\nimport { Factory } from '../core/factory';\n\nexport const generateLineAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): LineAxisGridAttributes => {\n const gridTheme = theme?.components?.grid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport const generateCircleAxisGridAttributes = (\n scale: IBaseScale,\n theme?: ITheme,\n addition?: RecursivePartial,\n tickCount?: number\n): CircleAxisGridAttributes => {\n const gridTheme = theme?.components?.circleGrid ?? {};\n if (!scale) {\n return merge({}, gridTheme, addition ?? {});\n }\n const tickData = scale.tickData?.(tickCount) ?? [];\n const items = tickData.map(tick => ({\n id: tick.index,\n label: tick.tick,\n value: tick.value,\n rawValue: tick.tick\n }));\n return merge({}, gridTheme, { items }, addition ?? {});\n};\n\nexport class Grid extends ScaleComponent implements IGrid {\n static readonly componentType: string = ComponentEnum.grid;\n protected declare spec: GridSpec;\n\n protected mode?: '2d' | '3d';\n\n private _gridComponentType: keyof typeof GridEnum;\n private _targetAxis: IAxis;\n\n constructor(view: IView, group?: IGroupMark, mode?: '2d' | '3d') {\n super(view, ComponentEnum.grid, group);\n this.spec.componentType = ComponentEnum.grid;\n this.mode = mode;\n }\n\n protected parseAddition(spec: GridSpec) {\n super.parseAddition(spec);\n this.target(spec.target);\n this.gridType(spec.gridType);\n this.gridShape(spec.gridShape);\n return this;\n }\n\n scale(scale?: IScale | string | Nil) {\n super.scale(scale);\n this._gridComponentType = null;\n return this;\n }\n\n gridType(gridType: AxisType | Nil) {\n this.spec.gridType = gridType;\n this._gridComponentType = null;\n this._prepareRejoin();\n this.commit();\n return this;\n }\n\n gridShape(gridShape: GridShape | Nil) {\n this.spec.gridShape = gridShape;\n // no need to rejoin when gridShape is updated\n // this._gridComponentType = null;\n // this._prepareRejoin();\n this.commit();\n return this;\n }\n\n target(axis: IAxis | string | Nil) {\n if (this.spec.target) {\n const prevAxis = isString(this.spec.target)\n ? (this.view.getMarkById(this.spec.target) as IAxis)\n : this.spec.target;\n this.detach(prevAxis);\n }\n this.spec.target = axis;\n const nextAxis = isString(axis) ? (this.view.getMarkById(axis) as IAxis) : axis;\n this.attach(nextAxis);\n this._targetAxis = nextAxis;\n\n // clear grid type when target is updated\n this._gridComponentType = null;\n this._updateComponentEncoders();\n\n this.commit();\n return this;\n }\n\n tickCount(tickCount: SimpleSignalType | Nil) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n\n if (scaleGrammar) {\n scaleGrammar.tickCount(tickCount);\n }\n\n return this.setFunctionSpec(tickCount, 'tickCount');\n }\n\n inside(inside: MarkFunctionType | Nil) {\n return this.setFunctionSpec(inside, 'inside');\n }\n\n baseValue(baseValue: MarkFunctionType | Nil) {\n return this.setFunctionSpec(baseValue, 'baseValue');\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const defaultAttributes = { x: 0, y: 0, start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n const initialAttributes = merge(defaultAttributes, attrs);\n const graphicItem = Factory.createGraphicComponent(this._getGridComponentType(), initialAttributes, {\n mode: this.mode,\n skipDefault: this.spec.skipTheme\n });\n return super.addGraphicItem(initialAttributes, groupKey, graphicItem);\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n let addition = invokeEncoder(encoder as BaseSingleEncodeSpec, datum, element, parameters);\n let scaleGrammar: IScale;\n const baseValue = invokeFunctionType(this.spec.baseValue, parameters, datum, element);\n\n // get attributes from target axis\n if (this._targetAxis) {\n const targetScale = this._targetAxis.getSpec()?.scale as IScale | string | Nil;\n scaleGrammar = isString(targetScale) ? this.view.getScaleById(targetScale) : targetScale;\n\n const targetElement = this._targetAxis.elements[0];\n if (targetElement) {\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n start: targetElement.getGraphicAttribute('start'),\n end: targetElement.getGraphicAttribute('end'),\n verticalFactor: targetElement.getGraphicAttribute('verticalFactor') ?? 1\n },\n addition\n );\n break;\n case GridEnum.circleAxisGrid:\n addition = Object.assign(\n {\n x: targetElement.getGraphicAttribute('x'),\n y: targetElement.getGraphicAttribute('y'),\n center: targetElement.getGraphicAttribute('center'),\n radius: targetElement.getGraphicAttribute('radius'),\n innerRadius: targetElement.getGraphicAttribute('innerRadius'),\n inside: targetElement.getGraphicAttribute('inside'),\n startAngle: targetElement.getGraphicAttribute('startAngle'),\n endAngle: targetElement.getGraphicAttribute('endAngle')\n },\n addition\n );\n break;\n }\n }\n }\n // compute attribute by spec\n else {\n scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n const inside = invokeFunctionType(this.spec.inside, parameters, datum, element);\n\n const coordinate = scaleGrammar?.getCoordinate?.();\n if (coordinate) {\n addition = Object.assign(\n generateCoordinateAxisAttribute(\n scaleGrammar,\n coordinate,\n inside,\n baseValue,\n this.spec.layout as MarkRelativeItemSpec,\n true\n ),\n addition\n );\n }\n }\n\n // compute addition shape attributes for line grid\n if (this._getGridComponentType() === GridEnum.lineAxisGrid) {\n if (this.spec.gridShape === 'line' || !this.spec.gridShape) {\n // set axis type\n addition = Object.assign({}, addition, { type: 'line' });\n } else {\n // set addition length & axis type\n addition = Object.assign(\n {\n center: addition.start,\n closed: true\n },\n addition,\n { type: this.spec.gridShape }\n );\n }\n }\n\n const scale = scaleGrammar?.getScale?.();\n const tickCount = invokeFunctionType(this.spec.tickCount, parameters, datum, element);\n switch (this._getGridComponentType()) {\n case GridEnum.lineAxisGrid:\n return generateLineAxisGridAttributes(scale, theme, addition, tickCount);\n case GridEnum.circleAxisGrid:\n return generateCircleAxisGridAttributes(scale, theme, addition, tickCount);\n }\n return addition;\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n\n private _getGridComponentType() {\n if (this._gridComponentType) {\n return this._gridComponentType;\n }\n\n if (this.spec.gridType) {\n switch (this.spec.gridType) {\n case 'circle':\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case 'line':\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this._targetAxis) {\n const axisComponentType = this._targetAxis.getAxisComponentType();\n switch (axisComponentType) {\n case AxisEnum.circleAxis:\n this._gridComponentType = GridEnum.circleAxisGrid;\n break;\n case AxisEnum.lineAxis:\n default:\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n } else if (this.spec.scale) {\n const scaleGrammar = isString(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;\n this._gridComponentType = scaleGrammar?.getCoordinate?.()\n ? scaleGrammar.getCoordinateAxisPoints()\n ? GridEnum.lineAxisGrid\n : GridEnum.circleAxisGrid\n : GridEnum.lineAxisGrid;\n } else {\n this._gridComponentType = GridEnum.lineAxisGrid;\n }\n\n return this._gridComponentType;\n }\n}\n\nexport const registerGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.lineAxisGrid,\n (attrs: LineAxisGridAttributes, options?: ComponentOptions) =>\n new LineAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerGraphicComponent(\n GridEnum.circleAxisGrid,\n (attrs: CircleAxisGridAttributes, options?: ComponentOptions) =>\n new CircleAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n\nexport const registerLineGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.lineAxisGrid,\n (attrs: LineAxisGridAttributes, options?: ComponentOptions) =>\n new LineAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n\nexport const registerCircleGrid = () => {\n Factory.registerGraphicComponent(\n GridEnum.circleAxisGrid,\n (attrs: CircleAxisGridAttributes, options?: ComponentOptions) =>\n new CircleAxisGrid(attrs, options) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.grid, Grid);\n};\n","import type { BandScale, IBaseScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray, binaryFuzzySearchInNumberRange } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ITickData } from '../../type';\nimport { convertDomainToTickData, getCartesianLabelBounds, isAxisHorizontal } from '../util';\n\n/** x1, x2, length */\ntype OneDimensionalBounds = [number, number, number];\n\nconst getOneDimensionalLabelBounds = (\n scale: IBaseScale,\n domain: any[],\n op: ICartesianTickDataOpt,\n isHorizontal: boolean\n): OneDimensionalBounds[] => {\n const labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n return labelBoundsList.map(bounds => {\n if (isHorizontal) {\n return [bounds.x1, bounds.x2, bounds.width()];\n }\n return [bounds.y1, bounds.y2, bounds.height()];\n });\n};\n\n/** 判断两个 bounds 是否有重叠情况 */\nconst boundsOverlap = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds, gap = 0): boolean => {\n return Math.max(prevBounds[0], nextBounds[0]) - gap / 2 <= Math.min(prevBounds[1], nextBounds[1]) + gap / 2;\n};\n\n/** 判断两个不相交的 bounds 相隔的距离 */\nexport const boundsDistance = (prevBounds: OneDimensionalBounds, nextBounds: OneDimensionalBounds): number => {\n if (prevBounds[1] < nextBounds[0]) {\n return nextBounds[0] - prevBounds[1];\n } else if (nextBounds[1] < prevBounds[0]) {\n return prevBounds[0] - nextBounds[1];\n }\n return 0;\n};\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const domain = scale.domain();\n if (!domain.length) {\n return [];\n }\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType, labelStyle } = op;\n const isHorizontal = isAxisHorizontal(axisOrientType);\n const range = scale.range();\n\n // if range is so small\n const rangeSize = scale.calculateWholeRangeSize();\n if (rangeSize < 2) {\n if (op.labelLastVisible) {\n return convertDomainToTickData([domain[domain.length - 1]]);\n }\n return convertDomainToTickData([domain[0]]);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const count = isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const fontSize = (op.labelStyle.fontSize ?? 12) + 2;\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n if (domain.length <= rangeSize / fontSize) {\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const labelBoundsList = getOneDimensionalLabelBounds(scale, domain, op, isHorizontal);\n const minBoundsLength = Math.min(...labelBoundsList.map(bounds => bounds[2]));\n\n const stepResult = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n Math.floor(minBoundsLength / incrementUnit), // 给step赋上合适的初值,有效改善外层循环次数\n false\n );\n\n scaleTicks = (scale as BandScale).stepTicks(stepResult.step);\n if (op.labelLastVisible) {\n if (stepResult.delCount) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - stepResult.delCount);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n // only check first middle last, use the max size to sampling\n const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];\n const tempList = getOneDimensionalLabelBounds(scale, tempDomain, op, isHorizontal);\n let maxBounds: OneDimensionalBounds = null;\n tempList.forEach(current => {\n if (!maxBounds) {\n maxBounds = current;\n return;\n }\n if (maxBounds[2] < current[2]) {\n maxBounds = current;\n }\n });\n\n const step =\n rangeEnd - rangeStart - labelGap > 0\n ? Math.ceil((domain.length * (labelGap + maxBounds[2])) / (rangeEnd - rangeStart - labelGap))\n : domain.length - 1;\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n\n if (\n op.labelLastVisible &&\n (!scaleTicks.length || scaleTicks[scaleTicks.length - 1] !== domain[domain.length - 1])\n ) {\n if (\n scaleTicks.length &&\n Math.abs(scale.scale(scaleTicks[scaleTicks.length - 1]) - scale.scale(domain[domain.length - 1])) <\n maxBounds[2]\n ) {\n scaleTicks = scaleTicks.slice(0, -1);\n }\n scaleTicks.push(domain[domain.length - 1]);\n }\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: OneDimensionalBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n defaultStep: number,\n areAllBoundsSame: boolean\n) => {\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n\n /** 验证在当前 step 下是否会产生重叠 */\n const validateStep = (step: number) => {\n let success = true;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && boundsOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n return success;\n };\n\n // 通过二分来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n const minValidStep = binaryFuzzySearchInNumberRange(defaultStep, domain.length, step =>\n validateStep(step) ? 1 : -1\n );\n\n // 对 step 进行微调\n let step = minValidStep;\n do {\n if (step > minValidStep && !areAllBoundsSame) {\n if (!validateStep(step)) {\n step++;\n continue;\n }\n }\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n let delCount = 0;\n let ptr;\n if (domain.length % step > 0) {\n ptr = domain.length - (domain.length % step) + step;\n } else {\n ptr = domain.length;\n }\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || boundsOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distance1 = boundsDistance(labelBoundsList[ptr], labelBoundsList[lastIndex]); // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0 ? boundsDistance(labelBoundsList[ptr - step], labelBoundsList[ptr]) : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n if (distance1 <= distance2) {\n break;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n step++;\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n","import { BandScale, scaleWholeRangeSize } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport type { ICartesianBandAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface';\nimport { isNil, isString, isValid, mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { linearDiscreteTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n CartesianAxis {}\n\nexport class CartesianBandAxis extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianBandAxis;\n type = ComponentTypeEnum.cartesianBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n const getBandwidth = (depth: number = 0) => {\n return getScale(depth).bandwidth();\n };\n\n return {\n isContinuous: false,\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getBandwidth,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse,\n getSpec: () => this._spec\n };\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, linearDiscreteTicks);\n\n return name;\n }\n transformScaleDomain() {\n this.updateFixedWholeLength();\n }\n\n updateFixedWholeLength() {\n if (this._scale) {\n const { bandSize, maxBandSize, minBandSize } = this._getOuterBandSizeFromSpec();\n if (bandSize) {\n this._scale.bandwidth(bandSize);\n }\n if (maxBandSize) {\n this._scale.maxBandwidth(maxBandSize);\n }\n if (minBandSize) {\n this._scale.minBandwidth(minBandSize);\n }\n // 更改 region 最大大小\n if (this._scale.isBandwidthFixed() && this._spec.autoRegionSize && (bandSize || maxBandSize)) {\n const rangeSize = scaleWholeRangeSize(\n this._scale.domain().length,\n bandSize ?? maxBandSize,\n this._scale.paddingInner(),\n this._scale.paddingOuter()\n );\n if (['bottom', 'top'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxWidth(rangeSize));\n } else if (['left', 'right'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxHeight(rangeSize));\n }\n }\n }\n }\n\n /** 获取最外层 scale 的实际 bandSize 配置 */\n protected _getOuterBandSizeFromSpec() {\n let { bandSize, maxBandSize, minBandSize, bandSizeLevel = 0 } = this._spec;\n const { gap, extend = 0 } = this._spec.bandSizeExtend ?? {};\n bandSizeLevel = Math.min(bandSizeLevel, this._scales.length - 1);\n\n // 由内而外计算最外层 scale 的 bandSize\n for (let i = bandSizeLevel; i > 0; i--) {\n const scale = this._scales[i];\n const domain = scale.domain();\n const paddingInner = scale.paddingInner();\n const paddingOuter = scale.paddingOuter();\n\n const getOuterBandSize = (b: number) => {\n const extendValue = i === bandSizeLevel ? extend : 0;\n if (isNil(gap) || i < bandSizeLevel) {\n return scaleWholeRangeSize(domain.length, b, paddingInner, paddingOuter) + extendValue;\n }\n const gapValue = isString(gap) ? b * (Number(gap.substring(0, gap.length - 1)) / 100) : gap;\n // 这里使组间距恰好等于柱间距\n return ((b + gapValue) * domain.length) / (this._scales[i - 1].paddingInner() + 1) + extendValue;\n };\n\n if (isValid(bandSize)) {\n bandSize = getOuterBandSize(bandSize);\n }\n if (isValid(maxBandSize)) {\n maxBandSize = getOuterBandSize(maxBandSize);\n }\n if (isValid(minBandSize)) {\n minBandSize = getOuterBandSize(minBandSize);\n }\n }\n\n return {\n bandSize,\n maxBandSize,\n minBandSize\n };\n }\n}\n\nmixin(CartesianBandAxis, BandAxisMixin);\n\nexport const registerCartesianBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianBandAxis.type, CartesianBandAxis);\n};\n","import { array, last as peek, maxInArray as maxInArr, minInArray as minInArr } from '@visactor/vutils';\n\nexport function shallowCompare(arrA: T | T[], arrB: U | U[]): boolean {\n const setA = new Set(array(arrA));\n const setB = new Set(array(arrB));\n if (setA.size !== setB.size) {\n return false;\n }\n for (const v of setA.values()) {\n if (!setB.has(v)) {\n return false;\n }\n }\n return true;\n}\n\nexport function combineDomains(domains: number[][]): number[] {\n const result = [];\n for (let index = 0; index < domains.length; index++) {\n const domain = domains[index];\n if (index === 0 || domain[0] !== result[result.length - 1]) {\n result.push(domain[0]);\n }\n\n result.push(domain[1]);\n }\n\n return result;\n}\n\nexport { array, peek, maxInArr, minInArr };\n","import { isEqual } from '@visactor/vutils';\n\nconst setDomain = (min: number, max: number, breaks: number[]): [number, number][] =>\n breaks.reduce(\n (r, b, i) => {\n r.push([b, breaks.length === i + 1 ? max : breaks[i + 1]]);\n return r;\n },\n [[min, breaks[0]]]\n );\n\nfunction breakDomain(data: number[], points: number[]): [number, number][] {\n // 默认数据已经排序\n const min = data[0];\n const max = data[data.length - 1];\n const breaks = points.filter(point => point > min && point < max);\n if (breaks.length === 0) {\n return [[min, max]];\n }\n\n return setDomain(min, max, breaks);\n}\n\nconst sorter = (a: number, b: number) => a - b;\n\nconst fillBins = (data: number[], points: number[]) => {\n const bins: Array<{ count: number; sub: number[]; max: number; min: number }> = [\n { count: 0, sub: [], max: points[0], min: points[0] }\n ];\n let i = 0;\n let j = 0;\n while (i < points.length) {\n if (data[j] <= points[i]) {\n bins[i].count += 1;\n bins[i].sub.push(data[j]);\n j += 1;\n } else {\n i += 1;\n bins[i] = { count: 0, sub: [], max: points[i], min: points[i] };\n }\n }\n bins.forEach(bin => {\n if (bin.count) {\n bin.min = Math.min.apply(null, bin.sub);\n }\n });\n\n const remain = data.slice(j);\n bins[i] = { count: remain.length, sub: remain, min: points[points.length - 1], max: Math.max.apply(null, remain) };\n return bins;\n};\n\nfunction breakScope(data: number[], points: number[], scopeType: 'count' | 'length' = 'count'): [number, number][] {\n // 默认 data 和 points 已经排序\n const bins = fillBins(data, points);\n\n const totalLength =\n scopeType === 'count'\n ? data.length\n : bins.reduce((res, bin, i) => {\n return bin.count > 0 ? res + bin.max - bin.min : res;\n }, 0);\n const res: [number, number][] = [];\n let acc = 0;\n\n let resIndex = 0; // 因为有的结果会被剔除,所以要从 res 的真实索引上拿\n bins.forEach((bin, i) => {\n if (totalLength === 0) {\n res.push([0, i / bins.length - 1]);\n } else {\n const length = scopeType === 'count' ? bin.count : bin.max - bin.min;\n const b0 = res[resIndex - 1] ? res[resIndex - 1][1] : 0;\n const b1 = i === bins.length - 1 ? 1 : Math.min((acc + length) / totalLength, 1);\n\n if (b0 === b1 && (b0 === 0 || b0 === 1)) {\n } else {\n resIndex += 1;\n res.push([b0, b1]);\n acc += length;\n }\n }\n });\n\n return res;\n}\n\nexport function breakData(data: number[], points: number[], scopeType?: 'count' | 'length') {\n // 现将数据和断点排序\n data.sort(sorter);\n points.sort(sorter);\n\n return {\n domain: breakDomain(data, points),\n scope: breakScope(data, points, scopeType)\n };\n}\n","import { isValidNumber, isNil, isValid, isFunction, last } from '@visactor/vutils';\nimport type { LinearScale } from '@visactor/vscale';\nimport { combineDomains, maxInArr, minInArr } from '../../../util/array';\nimport { getLinearAxisSpecDomain } from '../util';\nimport type { IAxisLocationCfg, ILinearAxisBreakSpec, ITick } from '../interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IEvent } from '../../../event/interface';\nimport { isXAxis } from '../cartesian/util/common';\nimport type { IOrientType } from '../../../typings/space';\nimport type { IComponentOption } from '../../interface/common';\nimport type { StringOrNumber } from '../../../typings';\nimport { breakData } from './util/break-data';\n\nexport const e10 = Math.sqrt(50);\nexport const e5 = Math.sqrt(10);\nexport const e2 = Math.sqrt(2);\nconst DEFAULT_TICK_COUNT = 5;\n\nexport interface LinearAxisMixin {\n _scale: LinearScale;\n _scales: LinearScale[];\n _spec: any;\n _nice: boolean;\n _zero: boolean;\n /**\n * spec中申明的min,max\n */\n _domain: { min?: number; max?: number };\n /**\n * 记录一下解析spec后,获取到的domain,\n * 用于在插件(如0值对齐等功能)中使用\n */\n _domainAfterSpec: number[];\n _softMinValue?: number;\n _softMaxValue?: number;\n _expand?: { max?: number; min?: number };\n _tick: ITick | undefined;\n isSeriesDataEnable: any;\n computeDomain: any;\n collectData: (depth?: number) => { min: number; max: number; values: any[] }[];\n /**\n * 这个变量在其他break相关组件和扩展中都有使用\n */\n _break: {\n domain: [number, number][];\n scope: [number, number][];\n breakDomains: [number, number][];\n breaks: ILinearAxisBreakSpec[];\n };\n event: IEvent;\n _orient: IOrientType;\n _option: IComponentOption;\n niceLabelFormatter: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport class LinearAxisMixin {\n protected _extend: { [key: string]: number } = {};\n\n niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n\n setExtraAttrFromSpec() {\n isValid(this._spec.nice) && (this._nice = this._spec.nice);\n isValid(this._spec.zero) && (this._zero = this._spec.zero);\n this._expand = this._spec.expand;\n this._domain = getLinearAxisSpecDomain(this._spec);\n }\n transformScaleDomain() {\n this.setScaleNice();\n }\n\n setLinearScaleNice() {\n if (!this._nice) {\n return false;\n }\n let tickCount: number = DEFAULT_TICK_COUNT;\n const tick = this._spec.tick || {};\n\n if (isValidNumber(tick.forceTickCount)) {\n tickCount = tick.forceTickCount;\n } else if (isFunction(tick.tickCount)) {\n const range = this._scale.range();\n let rangeSize = Math.abs(last(range) - range[0]);\n\n if (rangeSize === 1 && this._option) {\n // TODO: need to be optimized, when the range is not updated, use the size of view\n const isX = isXAxis(this._orient);\n rangeSize = isX ? this._option.getChartViewRect().width : this._option.getChartViewRect().height;\n }\n\n // tickCount需要一致,不然会导致效果不一致, fix #2050\n tickCount = tick.tickCount({\n axisLength: rangeSize,\n labelStyle: this._spec.label && this._spec.label.style\n });\n } else if (isValidNumber(tick.tickCount)) {\n tickCount = tick.tickCount;\n } else {\n tickCount = DEFAULT_TICK_COUNT;\n }\n // 如果配置了精度优先,那么最低是 5\n // 否则就直接使用tickCount即可\n if (this._spec.niceType === 'accurateFirst') {\n tickCount = Math.max(DEFAULT_TICK_COUNT, tickCount);\n }\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max) && isNil(this._softMaxValue) && isNil(this._softMinValue)) {\n return this._scale.nice(tickCount);\n } else if ((isValid(min) || isValid(this._softMinValue)) && isNil(max) && isNil(this._softMaxValue)) {\n return this._scale.niceMax(tickCount);\n } else if (isNil(min) && isNil(this._softMinValue) && (isValid(max) || isValid(this._softMaxValue))) {\n return this._scale.niceMin(tickCount);\n }\n\n return false;\n }\n\n setLogScaleNice() {\n if (!this._nice) {\n return false;\n }\n\n const { min, max } = this._domain ?? {};\n if (isNil(min) && isNil(max) && isNil(this._softMaxValue) && isNil(this._softMinValue)) {\n return this._scale.nice();\n } else if ((isValid(min) || isValid(this._softMinValue)) && isNil(max) && isNil(this._softMaxValue)) {\n return this._scale.niceMax();\n } else if (isNil(min) && isNil(this._softMinValue) && (isValid(max) || isValid(this._softMaxValue))) {\n return this._scale.niceMin();\n }\n\n return false;\n }\n\n setScaleNice() {\n if (this._spec.type === 'log') {\n return this.setLogScaleNice();\n }\n return this.setLinearScaleNice();\n }\n\n dataToPosition(values: any[], cfg?: IAxisLocationCfg): number {\n return this.valueToPosition(values[0]);\n }\n\n valueToPosition(value: any): number {\n return this._scale.scale(value);\n }\n\n computeLinearDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n let domain: number[] = [];\n\n if (data.length) {\n const userSetBreaks = this._spec.breaks && this._spec.breaks.length;\n let values: any[] = [];\n let minDomain: number;\n let maxDomain: number;\n data.forEach(d => {\n const { min, max } = d;\n minDomain = minDomain === undefined ? min : Math.min(minDomain, min as number);\n maxDomain = maxDomain === undefined ? max : Math.max(maxDomain, max as number);\n if (userSetBreaks) {\n values = values.concat(d.values);\n }\n });\n\n if (userSetBreaks) {\n const breakRanges = [];\n const breaks = [];\n // 如果用户手动的手指了max,可以将break的最大值限制在用户设置的最大值范围内\n const breakMaxLimit = isNil(this._domain.max) ? maxDomain : this._domain.max;\n for (let index = 0; index < this._spec.breaks.length; index++) {\n const { range } = this._spec.breaks[index];\n if (range[0] <= range[1] && range[1] <= breakMaxLimit) {\n breakRanges.push(range);\n breaks.push(this._spec.breaks[index]);\n }\n }\n breakRanges.sort((a: [number, number], b: [number, number]) => a[0] - b[0]);\n if (breakRanges.length) {\n const { domain: breakDomains, scope: breakScopes } = breakData(\n values,\n combineDomains(breakRanges),\n this._spec.breaks[0].scopeType\n );\n\n domain = combineDomains(breakDomains);\n this._break = {\n domain: breakDomains,\n scope: breakScopes,\n breakDomains: breakRanges,\n breaks\n };\n } else {\n domain = [minDomain, maxDomain];\n }\n } else {\n domain = [minDomain, maxDomain];\n }\n } else {\n // default value for linear axis\n domain[0] = 0;\n domain[1] = 0;\n }\n this.setSoftDomainMinMax(domain);\n this.expandDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n return domain;\n }\n\n protected expandDomain(domain: number[]): void {\n if (!this._expand) {\n return;\n }\n\n let domainMin = domain[0];\n let domainMax = last(domain);\n\n if (domainMin === domainMax) {\n if (domainMax === 0) {\n domainMax = 1;\n } else if (domainMax > 0) {\n domainMin = 0;\n } else if (domainMax < 0) {\n domainMax = 0;\n }\n }\n\n if (isValid(this._expand.min)) {\n domain[0] = domainMin - (domainMax - domainMin) * this._expand.min;\n }\n if (isValid(this._expand.max)) {\n domain[domain.length - 1] = domainMax + (domainMax - domainMin) * this._expand.max;\n }\n }\n\n protected niceDomain(domain: number[]) {\n const { min: userMin, max: userMax } = getLinearAxisSpecDomain(this._spec);\n if (isValid(userMin) || isValid(userMax) || this._spec.type !== 'linear') {\n // 如果用户设置了 min 或者 max 则按照用户设置的为准\n // 如果是非 linear 类型也不处理\n return domain;\n }\n if (Math.abs(minInArr(domain) - maxInArr(domain)) <= 1e-12) {\n let num = domain[0];\n const flag = num >= 0 ? 1 : -1;\n num = Math.abs(num);\n if (num < 1) {\n domain[0] = 0;\n domain[domain.length - 1] = 1; // 在[0, 1) 区间变成[0, 1]\n } else {\n let step = num / DEFAULT_TICK_COUNT; // 默认5个ticks\n const power = Math.floor(Math.log(step) / Math.LN10);\n const err = step / Math.pow(10, power);\n step = (err >= e10 ? 10 : err >= e5 ? 5 : err >= e2 ? 2 : 1) * Math.pow(10, power);\n\n domain[0] = 0;\n domain[domain.length - 1] = step * 10;\n }\n if (flag < 0) {\n domain.reverse();\n domain[0] *= -1;\n domain[domain.length - 1] *= -1;\n }\n }\n return domain;\n }\n\n protected includeZero(domain: number[]): void {\n if (this._zero) {\n domain[0] = Math.min(domain[0], 0);\n domain[domain.length - 1] = Math.max(last(domain), 0);\n }\n }\n\n // 用户其他模块扩充轴scale的区间\n setExtendDomain(key: string, value: number | undefined) {\n if (value === undefined) {\n delete this._extend[key];\n return;\n }\n this._extend[key] = value;\n const domain = this._scale.domain();\n this.extendDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n\n if (this._nice) {\n const niced = this.setScaleNice();\n\n !niced && this._scale.rescale();\n }\n\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n\n protected extendDomain(domain: number[]) {\n let temp;\n const domainLast = domain.length - 1;\n const reverse = domain[0] - domain[domainLast] > 0;\n const min = reverse ? domainLast : 0;\n const max = reverse ? 0 : domainLast;\n for (const key in this._extend) {\n temp = this._extend[key];\n temp > domain[max] && (domain[max] = temp);\n temp < domain[min] && (domain[min] = temp);\n }\n }\n\n getDomainSpec() {\n return this._domain;\n }\n\n protected setDomainMinMax(domain: number[]): void {\n if (!this._domain) {\n return;\n }\n const { min, max } = this._domain;\n isValid(min) && (domain[0] = min);\n isValid(max) && (domain[domain.length - 1] = max);\n }\n\n protected setSoftDomainMinMax(domain: number[]): void {\n const { softMin, softMax } = this._spec;\n\n if (isValid(softMin)) {\n let softMinValue = isFunction(softMin) ? softMin(domain) : (softMin as number);\n\n if (isNil(softMinValue)) {\n softMinValue = domain[0];\n }\n\n if (softMinValue <= domain[0]) {\n domain[0] = softMinValue;\n this._softMinValue = softMinValue;\n }\n }\n\n if (isValid(softMax)) {\n let softMaxValue = isFunction(softMax) ? softMax(domain) : (softMax as number);\n\n if (isNil(softMaxValue)) {\n softMaxValue = last(domain);\n }\n\n if (softMaxValue >= last(domain)) {\n domain[domain.length - 1] = softMaxValue;\n }\n\n this._softMaxValue = softMaxValue;\n }\n }\n\n setZero(zero: boolean) {\n if (this._zero !== zero) {\n this._zero = zero;\n this.updateScaleDomain();\n }\n }\n /**\n * @override\n * TODO event.emit是否可以考虑用decorator\n */\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n const data = this.collectData();\n const domain: number[] = this.computeLinearDomain(data) as number[];\n this.updateScaleDomainByModel(domain);\n }\n\n /**\n * TODO event.emit是否可以考虑用decorator\n * 数据逻辑外,模块的设置更新对scale-domain的修改操作\n */\n protected updateScaleDomainByModel(domain?: number[]) {\n domain = domain ?? this._scale.domain();\n // 其他模块的设置 domain\n this.extendDomain(domain);\n this.includeZero(domain);\n // 用户 spec 的 min-max\n this.setDomainMinMax(domain);\n // nice 优先级最高\n this.niceDomain(domain);\n this._scale.domain(domain, this._nice);\n // 设置scale的nice-min-max\n if (this._nice) {\n const niced = this.setScaleNice();\n\n !niced && this._scale.rescale();\n }\n this._updateNiceLabelFormatter(domain);\n\n this._domainAfterSpec = this._scale.domain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as any });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as any, value: 'domain' });\n }\n\n getDomainAfterSpec() {\n return this._domainAfterSpec;\n }\n\n protected _updateNiceLabelFormatter(domain: number[]) {\n // 根据轴 domain 范围做动态判断,取最多 n + 2 位小数\n const domainSpan = Math.abs(last(domain) - domain[0]);\n const n = Math.max(-Math.floor(Math.log10(domainSpan)), 0) + 2;\n const unit = Math.pow(10, n);\n this.niceLabelFormatter = (value: StringOrNumber) => {\n if (isValidNumber(+value)) {\n return Math.round((+value as number) * unit) / unit;\n }\n return value;\n };\n }\n}\n","import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isFunction, isValid, last } from '@visactor/vutils';\nimport type { ICartesianTickDataOpt, ILabelItem, ITickData, ITickDataOpt } from '../type';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds } from './util';\nimport { textIntersect as intersect, hasOverlap } from '../util';\n\nconst filterTicksByBreak = (ticks: number[], breakDomains: [number, number][]) => {\n return breakDomains && breakDomains.length\n ? ticks.filter(tick => {\n return breakDomains.every(breakDomain => {\n return tick < breakDomain[0] || tick > breakDomain[1];\n });\n })\n : ticks;\n};\nfunction getScaleTicks(\n op: ITickDataOpt,\n scale: ContinuousScale,\n count: number,\n getTicks: (count: number, domain?: [number, number]) => number[]\n) {\n let scaleTicks: number[];\n const { breakData } = op;\n\n // Todo: @zwx 将截断的逻辑挪到 scale 中\n if (breakData && breakData()) {\n const { breakDomains } = breakData();\n const domain = scale.domain();\n scaleTicks = [];\n for (let i = 0; i < domain.length - 1; i++) {\n const subDomain: [number, number] = [domain[i], domain[i + 1]];\n const ticks = getTicks(count, subDomain); // 暂时不对个数进行分段\n ticks.forEach(tick => {\n if (!breakDomains.some(breakDomain => tick >= breakDomain[0] && tick <= breakDomain[1])) {\n scaleTicks.push(tick);\n }\n });\n }\n // reset\n (scale as LinearScale).domain(domain);\n } else {\n scaleTicks = getTicks(count);\n }\n\n return scaleTicks;\n}\n\nfunction forceItemVisible(\n sourceItem: ILabelItem,\n items: ILabelItem[],\n check: boolean,\n comparator: any,\n inverse = false\n) {\n if (check && !items.includes(sourceItem)) {\n let remainLength = items.length;\n if (remainLength > 1) {\n if (inverse) {\n items.push(sourceItem);\n } else {\n items.unshift(sourceItem);\n }\n for (let i = 0; i < remainLength; i++) {\n const index = inverse ? remainLength - 1 - i : i;\n if (comparator(items[index])) {\n items.splice(index, 1);\n i--;\n remainLength--;\n } else {\n break;\n }\n }\n }\n }\n}\n/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain());\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]]);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false, labelStyle, breakData } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = filterTicksByBreak(\n (scale as LinearScale).stepTicks(tickStep),\n breakData && breakData() ? breakData().breakDomains : null\n );\n } else if (isValid(forceTickCount)) {\n scaleTicks = getScaleTicks(op, scale, forceTickCount, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).forceTicks(count);\n }\n return (scale as LinearScale).forceTicks(count);\n });\n } else if (op.tickMode === 'd3') {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).d3Ticks(count, { noDecimals });\n }\n return (scale as LinearScale).d3Ticks(count, { noDecimals });\n });\n } else {\n const count =\n (isFunction(tickCount) ? tickCount({ axisLength: rangeSize, labelStyle }) : tickCount) ??\n DEFAULT_CONTINUOUS_TICK_COUNT;\n const customTicks = isFunction(op.tickMode) ? op.tickMode : undefined;\n\n scaleTicks = getScaleTicks(op, scale, count, (count: number, subDomain?: [number, number]) => {\n if (subDomain && subDomain.length) {\n return (scale as LinearScale).domain(subDomain, true).ticks(count, { noDecimals, customTicks });\n }\n return (scale as LinearScale).ticks(count, { noDecimals, customTicks });\n });\n }\n\n const domain = scale.domain();\n\n if (op.labelFirstVisible && domain[0] !== scaleTicks[0] && !scaleTicks.includes(domain[0])) {\n scaleTicks.unshift(domain[0]);\n }\n\n if (\n op.labelLastVisible &&\n domain[domain.length - 1] !== scaleTicks[scaleTicks.length - 1] &&\n !scaleTicks.includes(domain[domain.length - 1])\n ) {\n scaleTicks.push(domain[domain.length - 1]);\n }\n if (op.sampling && scaleTicks.length > 1) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n const MIN_FONT_SIZE = 6;\n let items: ILabelItem[];\n // 刻度个数 > 像素个数的情况,先做一层预估,减少计算,避免卡死的情况\n if (scaleTicks.length * MIN_FONT_SIZE > rangeSize) {\n const samplingScaleTicks: number[] = [];\n const step = Math.floor((scaleTicks.length * MIN_FONT_SIZE) / rangeSize);\n scaleTicks.forEach((tick, index) => {\n if (index % step === 0 || index === scaleTicks.length - 1) {\n samplingScaleTicks.push(tick);\n }\n });\n items = getCartesianLabelBounds(scale, samplingScaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: samplingScaleTicks[i]\n } as ILabelItem)\n );\n } else {\n items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem)\n );\n }\n const firstSourceItem = items[0];\n const lastSourceItem = last(items);\n\n const samplingMethod = breakData && breakData() ? methods.greedy : methods.parity; // 由于轴截断后刻度会存在不均匀的情况,所以不能使用 parity 算法\n while (items.length >= 3 && hasOverlap(items as any, labelGap)) {\n items = samplingMethod(items, labelGap);\n }\n\n const checkFirst = op.labelFirstVisible;\n let checkLast = op.labelLastVisible; // 这里和 auto-hide 里的逻辑有差异,不根据 length 自动强制显示最后一个(会引起 vtable 较多 badcase)。\n\n if (intersect(firstSourceItem as any, lastSourceItem as any, labelGap)) {\n if (items.includes(lastSourceItem) && items.length > 1 && checkFirst && checkLast) {\n items.splice(items.indexOf(lastSourceItem), 1);\n checkLast = false;\n }\n }\n\n forceItemVisible(firstSourceItem, items, checkFirst, (item: ILabelItem) =>\n intersect(item as any, firstSourceItem as any, labelGap)\n );\n forceItemVisible(\n lastSourceItem,\n items,\n checkLast,\n (item: ILabelItem) =>\n intersect(item as any, lastSourceItem as any, labelGap) ||\n (checkFirst && item !== firstSourceItem ? intersect(item as any, firstSourceItem as any, labelGap) : false),\n true\n );\n\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (last(ticks) !== last(scaleTicks)) {\n ticks.push(last(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n return convertDomainToTickData(scaleTicks);\n};\n\nconst methods = {\n parity: function (items: ILabelItem[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function (items: ILabelItem[], sep: number) {\n let a: ILabelItem;\n return items.filter((b, i) => {\n if (!i || !intersect(a as any, b as any, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n","import type { LogScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport { isValid, isValidNumber, last, mixin } from '@visactor/vutils';\nimport type { IAxisHelper, ICartesianLinearAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { isXAxis, isZAxis } from './util';\nimport { combineDomains, isPercent } from '../../../util';\n\nexport interface CartesianLinearAxis\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'computeLinearDomain'\n | 'valueToPosition'\n | 'setScaleNice'\n | '_domain'\n | 'transformScaleDomain'\n | 'setExtendDomain'\n | '_break'\n >,\n CartesianAxis {}\n\nexport class CartesianLinearAxis<\n T extends ICartesianLinearAxisSpec = ICartesianLinearAxisSpec\n> extends CartesianAxis {\n static type = ComponentTypeEnum.cartesianLinearAxis;\n type = ComponentTypeEnum.cartesianLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale: LinearScale | LogScale = new LinearScale();\n protected declare _scales: LinearScale[] | LogScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n const tickTransform = this._tickData?.[0]\n ?.getDataView()\n .transformsArr.find(t => t.type === this.registerTicksTransform());\n tickTransform && (tickTransform.options = this._tickTransformOption());\n }\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n const range = [0, 1];\n if (isValid(this._domain?.min)) {\n range[0] = this._domain.min;\n }\n if (isValid(this._domain?.max)) {\n range[1] = this._domain.max;\n }\n this._scale.domain(range);\n // this.setScaleNice();\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n breakData: this._spec.breaks?.length ? () => this._break : null\n } as ICartesianTickDataOpt;\n }\n\n protected _getUpdateAttribute(ignoreGrid: boolean) {\n const attrs = super._getUpdateAttribute(ignoreGrid);\n\n // get axis break configuration\n if (!isZAxis(this._orient) && this._break?.breaks?.length) {\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this._orient);\n const axisLength = isX ? width : height;\n\n attrs.breaks = this._break.breaks.map(obj => {\n const { range, breakSymbol, gap = 6 } = obj;\n const position = this.valueToPosition((range[0] + range[1]) / 2);\n const ratio = position / axisLength;\n\n let gapRatio;\n if (isPercent(gap)) {\n gapRatio = Number(gap.substring(0, gap.length - 1)) / 100;\n } else {\n gapRatio = (gap as number) / axisLength;\n }\n const symbolAngle = isValidNumber(breakSymbol?.angle) ? breakSymbol.angle : isX ? 60 : 15;\n\n return {\n range: [ratio - gapRatio / 2, ratio + gapRatio / 2],\n breakSymbol: {\n visible: true,\n ...breakSymbol,\n angle: (symbolAngle * Math.PI) / 180\n },\n rawRange: range\n };\n });\n }\n\n return attrs;\n }\n\n protected getNewScaleRange() {\n let newRange = super.getNewScaleRange();\n if (this._spec.breaks?.length && this._break?.scope) {\n // get axis breaks\n newRange = combineDomains(this._break.scope).map(val => newRange[0] + (last(newRange) - newRange[0]) * val);\n }\n\n return newRange;\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n helper.valueToPosition = this.valueToPosition.bind(this);\n return helper;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n}\n\nmixin(CartesianLinearAxis, LinearAxisMixin);\n\nexport const registerCartesianLinearAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianLinearAxis.type, CartesianLinearAxis);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport { mixin } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerLineAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport type { ILineSeriesSpec, LineAppearPreset } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { lineSeriesMark } from './constant';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { Factory } from '../../core/factory';\nimport type { IMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport interface LineSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n >,\n CartesianSeries {}\n\nexport class LineSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.line;\n type = SeriesTypeEnum.line;\n\n static readonly mark: SeriesMarkMap = lineSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n protected _sortDataByAxis: boolean = false;\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n const seriesMark = this._spec.seriesMark ?? 'line';\n this.initLineMark(progressive, seriesMark === 'line');\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initMarkStyle(): void {\n this.initLineMarkStyle(this._direction);\n this.initSymbolMarkStyle();\n }\n\n initAnimation() {\n const lineAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(lineAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n const isLineAsSeriesMark = this._spec?.seriesMark !== 'point'; // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n return (attribute: string) => {\n if (isLineAsSeriesMark) {\n // 增加一个标识位,用于是否替换,因为图例获取颜色的时候是不需要替换的\n attribute === 'fill' && (attribute = 'stroke');\n }\n return this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n };\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._lineMark, this._symbolMark];\n }\n}\n\nmixin(LineSeries, LineLikeSeriesMixin);\n\nexport const registerLineSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerSymbolMark();\n registerLineAnimation();\n registerScaleInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(LineSeries.type, LineSeries);\n};\n","import { array, isValid } from '@visactor/vutils';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport type { RegionSpec, IRegionSpecInfo } from '../../region/interface';\nimport type { IChartSpecInfo } from '../interface';\nimport type { ISeriesSpecInfo } from '../../series/interface';\nimport type { ISeriesSpec } from '../../typings';\nimport type { IComponentSpec } from '../../component/base/interface';\n\n/** 寻找和 model 关联的 region info */\nexport const getRelatedRegionInfo = (\n modelInfo: IModelSpecInfo,\n currentChartSpecInfo: IChartSpecInfo\n): Array> | undefined => {\n const spec = modelInfo.spec as IComponentSpec;\n const { regionId, regionIndex } = spec;\n if (isValid(regionId)) {\n const regionIdList = array(regionId);\n return currentChartSpecInfo.region?.filter(({ spec }) => regionIdList.includes(spec.id));\n } else if (isValid(regionIndex)) {\n return array(regionIndex)\n .map((index: number) => currentChartSpecInfo.region?.[index])\n .filter(isValid);\n }\n return undefined;\n};\n\n/** 寻找和 model 关联的 series info */\nexport const getRelatedSeriesInfo = (\n modelInfo: IModelSpecInfo,\n currentChartSpecInfo: IChartSpecInfo\n): Array> | undefined => {\n const spec = modelInfo.spec as IComponentSpec;\n const { seriesId, seriesIndex } = spec;\n if (isValid(seriesId)) {\n const seriesIdList = array(seriesId);\n return currentChartSpecInfo.series?.filter(({ spec }) => seriesIdList.includes(spec.id));\n } else if (isValid(seriesIndex)) {\n return array(seriesIndex)\n .map((index: number) => currentChartSpecInfo.series?.[index])\n .filter(isValid);\n }\n return undefined;\n};\n","import { isArray, isNumber, isValid } from '@visactor/vutils';\nimport type { IChartSpec, ISeriesSpec } from '../../typings';\nimport type { IChartSpecInfo, IChartSpecTransformer, IChartSpecTransformerOption } from '../interface';\nimport type { IModelConstructor, IModelSpecInfo } from '../../model/interface';\nimport type { IRegionConstructor, RegionSpec } from '../../region/interface';\nimport { Factory } from '../../core';\nimport type { ISeriesConstructor } from '../../series';\nimport type { IComponentConstructor } from '../../component/interface/common';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { setProperty } from '@visactor/vutils-extension';\nimport { getRelatedRegionInfo, getRelatedSeriesInfo } from './util';\nimport type { ICartesianBandAxisSpec } from '../..//component/axis/cartesian/interface';\nimport { array } from '../../util';\nimport { getSpecInfo } from '../../component/util';\n\nexport class BaseChartSpecTransformer implements IChartSpecTransformer {\n readonly type: string;\n readonly seriesType: string;\n\n protected _option: IChartSpecTransformerOption;\n\n constructor(option: IChartSpecTransformerOption) {\n this._option = option;\n this.type = option.type;\n this.seriesType = option.seriesType;\n }\n\n /** 此方法不建议重写 */\n initChartSpec(chartSpec: T): IChartSpecInfo {\n this.transformSpec(chartSpec);\n return this.transformModelSpec(chartSpec);\n }\n\n /**\n * 转换 chart spec。包含以下步骤:\n * - 将图表 spec 统一转换为 common 图表 spec\n * - 图表层级的在初始化阶段的 spec 修改\n */\n transformSpec(chartSpec: T): void {\n if (!chartSpec.region || chartSpec.region.length === 0) {\n chartSpec.region = [{}];\n }\n if (chartSpec.tooltip === undefined) {\n chartSpec.tooltip = {};\n }\n // 堆积逆序\n if (isValid(chartSpec.stackInverse)) {\n chartSpec.region.forEach((r: RegionSpec) => {\n !isValid(r.stackInverse) && (r.stackInverse = chartSpec.stackInverse);\n });\n }\n // 堆积排序\n if (isValid(chartSpec.stackSort)) {\n chartSpec.region.forEach((r: RegionSpec) => {\n !isValid(r.stackSort) && (r.stackSort = chartSpec.stackSort);\n });\n }\n }\n\n generateTransform(chartSpec: T, isRuntime?: boolean) {\n return (constructor: IModelConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => {\n const { spec, specPath, specInfoPath, type } = specInfo;\n const transformer = new constructor.transformerConstructor({\n ...this._option,\n type\n });\n // 调用 model 自己的 transformer 进行转换\n const transformResult = transformer.transformSpec(spec, chartSpec, chartSpecInfo);\n const chartSpecInfoValue = {\n ...specInfo,\n ...transformResult\n };\n if (isRuntime) {\n chartSpecInfoValue.theme = transformer.getTheme(spec, chartSpec);\n } else {\n setProperty(chartSpec, specPath, transformResult.spec);\n }\n setProperty(chartSpecInfo, specInfoPath ?? specPath, chartSpecInfoValue);\n };\n }\n\n /**\n * 转换 model spec。包含以下步骤:\n * - model 层级的主题合并\n * - model 层级的在初始化阶段的 spec 修改,如添加 label spec\n */\n transformModelSpec(chartSpec: T): IChartSpecInfo {\n return this.createSpecInfo(chartSpec, this.generateTransform(chartSpec, false));\n }\n\n /** 遍历图表 spec 中包含的所有的 model,进行 spec 转换并生成图表 spec info */\n createSpecInfo(\n chartSpec: T,\n transform?: (\n /** 当前 model 的类 */\n constructor: IModelConstructor,\n /** 当前 model 的 spec info */\n specInfo: IModelSpecInfo,\n /** 图表 spec info */\n chartSpecInfo?: IChartSpecInfo\n ) => void\n ): IChartSpecInfo {\n if (!transform) {\n transform = this.generateTransform(chartSpec, true);\n }\n\n const currentChartSpecInfo: IChartSpecInfo = {};\n\n /* 预处理 region */\n this.forEachRegionInSpec(chartSpec, transform, currentChartSpecInfo);\n\n /* 预处理 series */\n this.forEachSeriesInSpec(chartSpec, transform, currentChartSpecInfo);\n // 记录每个 series 关联的 region\n currentChartSpecInfo.series?.forEach((seriesSpecInfo, i) => {\n const relatedRegion =\n getRelatedRegionInfo(seriesSpecInfo, currentChartSpecInfo) ?? currentChartSpecInfo.region ?? [];\n const region = relatedRegion[0];\n if (region) {\n if (!region.seriesIndexes) {\n region.seriesIndexes = [];\n }\n region.seriesIndexes.push(i);\n seriesSpecInfo.regionIndexes = region.regionIndexes.slice();\n }\n });\n\n /* 预处理 component */\n this.forEachComponentInSpec(chartSpec, transform, currentChartSpecInfo);\n // 记录每个 component 关联的 region、series\n Object.values(currentChartSpecInfo.component ?? {}).forEach(specInfoList =>\n specInfoList.forEach((componentSpecInfo, i) => {\n if (!componentSpecInfo) {\n return;\n }\n if (!componentSpecInfo.regionIndexes) {\n const relatedRegion =\n getRelatedRegionInfo(componentSpecInfo, currentChartSpecInfo) ?? currentChartSpecInfo.region ?? [];\n componentSpecInfo.regionIndexes = relatedRegion.map(region => region.regionIndexes[0]);\n }\n if (!componentSpecInfo.seriesIndexes) {\n const seriesInfo = getRelatedSeriesInfo(componentSpecInfo, currentChartSpecInfo);\n if (!seriesInfo) {\n const seriesIndexSet = new Set();\n (componentSpecInfo.regionIndexes ?? []).forEach(regionIndex => {\n const region = currentChartSpecInfo.region?.[regionIndex];\n region?.seriesIndexes?.forEach(seriesIndex => seriesIndexSet.add(seriesIndex));\n });\n componentSpecInfo.seriesIndexes = Array.from(seriesIndexSet);\n } else {\n componentSpecInfo.seriesIndexes = seriesInfo.map(({ seriesIndexes }) => seriesIndexes[0]);\n }\n }\n })\n );\n return currentChartSpecInfo;\n }\n\n protected _isValidSeries(seriesType: string): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(chartSpec: any, pickKeys?: string[], pickKeys2?: string[]) {\n const series: any = {\n dataKey: chartSpec.dataKey,\n\n hover: chartSpec.hover,\n select: chartSpec.select,\n\n label: chartSpec.label,\n\n seriesStyle: chartSpec.seriesStyle,\n\n animation: chartSpec.animation ?? this._option.animation,\n animationThreshold: chartSpec.animationThreshold ?? this._option.getTheme?.().animationThreshold,\n animationAppear: chartSpec.animationAppear,\n animationDisappear: chartSpec.animationDisappear,\n animationEnter: chartSpec.animationEnter,\n animationUpdate: chartSpec.animationUpdate,\n animationExit: chartSpec.animationExit,\n animationNormal: chartSpec.animationNormal,\n animationState: chartSpec.animationState,\n\n extensionMark: chartSpec.extensionMark,\n\n large: chartSpec.large,\n largeThreshold: chartSpec.largeThreshold,\n progressiveStep: chartSpec.progressiveStep,\n progressiveThreshold: chartSpec.progressiveThreshold,\n background: chartSpec.seriesBackground,\n\n invalidType: chartSpec.invalidType,\n\n seriesField: chartSpec.seriesField,\n\n morph: chartSpec.morph,\n\n interactions: chartSpec.interactions\n };\n\n const seriesType = this.seriesType;\n if (seriesType) {\n series.type = seriesType;\n series[seriesType] = (chartSpec as any)[seriesType];\n }\n\n if (pickKeys && pickKeys.length) {\n pickKeys.forEach(k => {\n series[k] = chartSpec[k];\n });\n }\n if (pickKeys2 && pickKeys2.length) {\n pickKeys2.forEach(k => {\n series[k] = chartSpec[k];\n });\n }\n return series;\n }\n\n /** 遍历 spec 中每个有效的 region */\n forEachRegionInSpec(\n chartSpec: T,\n callbackfn: (constructor: IRegionConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const regionSpec = (chartSpec.region as RegionSpec[]) ?? [];\n return regionSpec.map((spec, index) =>\n callbackfn(\n Factory.getRegionInType('region'),\n {\n spec,\n specPath: ['region', index],\n type: 'region',\n regionIndexes: [index]\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 series */\n forEachSeriesInSpec(\n chartSpec: T,\n callbackfn: (constructor: ISeriesConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const seriesSpec = (chartSpec.series as ISeriesSpec[]) ?? [];\n return seriesSpec.map((spec, index) =>\n callbackfn(\n Factory.getSeriesInType(spec.type),\n {\n spec,\n specPath: ['series', index],\n type: spec.type,\n seriesIndexes: [index]\n },\n chartSpecInfo\n )\n );\n }\n\n /** 遍历 spec 中每个有效的 component */\n forEachComponentInSpec(\n chartSpec: T,\n callbackfn: (constructor: IComponentConstructor, specInfo: IModelSpecInfo, chartSpecInfo?: IChartSpecInfo) => K,\n chartSpecInfo?: IChartSpecInfo\n ): K[] {\n const results: K[] = [];\n const components = Factory.getComponents();\n\n // 坐标轴组件只需要调用一次\n let cartesianAxis: IComponentConstructor;\n let polarAxis: IComponentConstructor;\n let geoCoordinate: IComponentConstructor;\n let tooltip: IComponentConstructor;\n const otherComponents = [];\n\n for (let index = 0; index < components.length; index++) {\n const { cmp, alwaysCheck } = components[index];\n if (cmp.type.startsWith(ComponentTypeEnum.cartesianAxis)) {\n cartesianAxis = cmp;\n } else if (cmp.type.startsWith(ComponentTypeEnum.polarAxis)) {\n polarAxis = cmp;\n } else if (cmp.type === ComponentTypeEnum.geoCoordinate) {\n geoCoordinate = cmp;\n } else if (alwaysCheck || (chartSpec as any)[cmp.specKey ?? cmp.type]) {\n if (cmp.type === ComponentTypeEnum.tooltip) {\n tooltip = cmp;\n } else {\n otherComponents.push(cmp);\n }\n }\n }\n\n // NOTE: 坐标轴组件需要在其他组件之前创建\n let hasInitAxis = false;\n if (cartesianAxis) {\n const infoList = cartesianAxis.getSpecInfo(chartSpec, chartSpecInfo);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (polarAxis && !hasInitAxis) {\n const infoList = polarAxis.getSpecInfo(chartSpec, chartSpecInfo);\n if (infoList?.length > 0) {\n hasInitAxis = true;\n infoList.forEach(info => {\n const cmp = Factory.getComponentInKey(info.type);\n results.push(callbackfn(cmp, info, chartSpecInfo));\n });\n }\n }\n\n if (geoCoordinate && !hasInitAxis) {\n geoCoordinate.getSpecInfo(chartSpec, chartSpecInfo)?.forEach(info => {\n results.push(callbackfn(geoCoordinate, info, chartSpecInfo));\n });\n }\n\n otherComponents.forEach(C => {\n (C.getSpecInfo ? C.getSpecInfo(chartSpec, chartSpecInfo) : getSpecInfo(chartSpec, C.specKey, C.type))?.forEach(\n info => {\n results.push(callbackfn(C, info, chartSpecInfo));\n }\n );\n });\n\n // NOTE: tooltip 组件需要在 crosshair 组件之后创建\n if (tooltip) {\n getSpecInfo(chartSpec, tooltip.specKey, tooltip.type)?.forEach(info => {\n results.push(callbackfn(tooltip, info, chartSpecInfo));\n });\n }\n\n return results;\n }\n\n /** 处理series配置 */\n transformSeriesSpec(spec: T): void {\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n if (!spec.series || spec.series.length === 0) {\n spec.series = [defaultSeriesSpec];\n } else {\n spec.series.forEach(s => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n (s as any)[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n }\n\n protected _findBandAxisBySeries(seriesSpec: ISeriesSpec, seriesIndex: number, axesSpec: any) {\n const isHorizontal = (seriesSpec as any)?.direction === 'horizontal';\n const matchOrient = isHorizontal ? ['left', 'right'] : ['top', 'bottom'];\n const targetBandAxis: any = axesSpec.find((axis: any) => {\n if (!matchOrient.includes(axis.orient)) {\n // orient必须匹配\n return false;\n }\n if (isValid(axis.seriesId)) {\n // 1. 通过seriesId绑定\n if (array(axis.seriesId).includes(seriesSpec?.id)) {\n return true;\n }\n } else if (isValid(axis.seriesIndex)) {\n // 2. 通过seriesIndex绑定\n if (array(axis.seriesIndex).includes(seriesIndex)) {\n return true;\n }\n } else if (axis.type === 'band') {\n // 3. 通过axis type识别\n return true;\n }\n // 4. 剩下的情况满足axis orient要求\n return true;\n });\n\n return targetBandAxis;\n }\n\n /**\n * @description bar chart 和 common chart支持autoBandsize, 此方法用于识别barWidth配置后应用到轴上\n * */\n protected _applyAxisBandSize(\n axis: ICartesianBandAxisSpec,\n extend: number,\n barWidthSpec: {\n barMaxWidth: number | string;\n barMinWidth: number | string;\n barWidth: number | string;\n barGapInGroup: number | string | (number | string)[];\n }\n ) {\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = barWidthSpec;\n let hasBarWidth = false;\n if (isNumber(barMinWidth)) {\n axis.minBandSize = barMinWidth as number;\n hasBarWidth = true;\n } else if (isNumber(barWidth)) {\n axis.minBandSize = barWidth as number;\n hasBarWidth = true;\n } else if (isNumber(barMaxWidth)) {\n axis.minBandSize = barMaxWidth as number;\n hasBarWidth = true;\n }\n if (hasBarWidth) {\n axis.bandSizeLevel = Number.MAX_VALUE; // 影响最底层的 scale\n axis.bandSizeExtend = {\n extend,\n gap: isArray(barGapInGroup) ? barGapInGroup[(barGapInGroup as any[]).length - 1] : barGapInGroup\n };\n }\n }\n}\n","import type { ICartesianAxisSpec } from '../../component';\nimport type { ISeriesSpec } from '../../typings';\nimport { get, isNil } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICartesianChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class CartesianChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected _getDefaultSeriesSpec(spec: any, pickKeys?: string[]): any {\n const series: any = super._getDefaultSeriesSpec(\n spec,\n [\n 'xField',\n 'yField',\n 'zField',\n 'direction',\n 'stack', // 是否堆叠\n 'percent', // 是否百分比堆叠\n 'stackOffsetSilhouette', // 是否围绕中心轴偏移轮廓,\n 'totalLabel',\n 'sortDataByAxis'\n ],\n pickKeys\n );\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n super.transformSeriesSpec(spec);\n\n this._transformAxisSpec(spec);\n }\n\n protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'bottom'\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'left'\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultZAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'z'\n } as ICartesianAxisSpec;\n }\n\n protected _transformAxisSpec(spec: T) {\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { x: false, y: false, z: false };\n spec.axes.forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n let defaultSpec: ICartesianAxisSpec = null;\n if (orient === 'top' || orient === 'bottom') {\n haxAxes.x = true;\n defaultSpec = this._setDefaultXAxisSpec(spec);\n }\n if (orient === 'left' || orient === 'right') {\n haxAxes.y = true;\n\n defaultSpec = this._setDefaultYAxisSpec(spec);\n }\n if (orient === 'z') {\n haxAxes.z = true;\n\n defaultSpec = this._setDefaultZAxisSpec(spec);\n }\n\n if (defaultSpec) {\n Object.keys(defaultSpec).forEach(key => {\n if (isNil(axis[key])) {\n axis[key] = defaultSpec[key];\n }\n });\n }\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n if (!haxAxes.x) {\n spec.axes.push(this._setDefaultXAxisSpec(spec));\n }\n if (!haxAxes.y) {\n spec.axes.push(this._setDefaultYAxisSpec(spec));\n }\n // 如果有zField字段,但是没有配置z轴,那么添加一个z轴\n if ((spec as any).zField && !haxAxes.z) {\n spec.axes.push(this._setDefaultZAxisSpec(spec));\n }\n }\n }\n}\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { ILineChartSpec } from './interface';\n\nexport class LineChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'point',\n 'line',\n 'activePoint',\n 'sampling',\n 'samplingFactor',\n 'pointDis',\n 'pointDisMul',\n 'markOverlap',\n 'lineLabel'\n ]);\n seriesSpec.seriesMark = spec.seriesMark ?? 'line';\n return seriesSpec;\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { array } from '@visactor/vutils';\nimport type { IData } from './../../typings/spec/common';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport type { IDataValues, StringOrNumber } from '../../typings';\nimport { dataToDataView, updateDataViewInData } from '../../data/initialize';\nimport { warn } from '../../util/debug';\nexport class ChartData {\n protected _dataArr: DataView[] = [];\n get dataList() {\n return this._dataArr;\n }\n\n protected _dataSet: DataSet;\n\n constructor(dataSet: DataSet) {\n this._dataSet = dataSet;\n }\n\n parseData(dataSpec: IData) {\n this._dataArr = [];\n const list = array(dataSpec);\n for (let i = 0; i < list.length; i++) {\n this._dataArr.push(dataToDataView(list[i], this._dataSet, this._dataArr));\n }\n }\n\n updateData(dataSpec: IData, fullUp: boolean = false, forceMerge: boolean = true) {\n const list = array(dataSpec);\n if (fullUp && list.length !== this._dataArr.length) {\n return false;\n }\n this._dataValueForEach(list, (_data, dv) => {\n dv.markRunning();\n });\n this._dataValueForEach(list, (data, dv) => {\n updateDataViewInData(dv, data, forceMerge);\n });\n return true;\n }\n\n private _dataValueForEach(\n list: (IDataValues | DataView)[],\n callBack: (data: IDataValues, dv: DataView, index: number) => void\n ) {\n list.forEach((data, i) => {\n if (data instanceof DataView) {\n // ignore DataView, it should be update by use DataView api\n return;\n }\n const dv = this.getSeriesData(data.id, i);\n if (!dv) {\n return;\n }\n\n callBack(data, dv, i);\n });\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n if (!this._dataArr.length) {\n return null;\n }\n\n // dataId 优先\n if (typeof id === 'string') {\n const metchData = this._dataArr.filter((data: any) => {\n return data.name === id;\n });\n\n if (metchData[0]) {\n return metchData[0];\n }\n warn(`no data matches dataId ${id}!`);\n }\n\n // 其次使用dataIndex\n if (typeof index === 'number') {\n if (this._dataArr[index]) {\n return this._dataArr[index];\n }\n\n warn(`no data matches dataIndex ${index}!`);\n }\n\n // 最后返回第一条数据\n return this._dataArr[0];\n }\n}\n","import type { IGlobalScale } from './interface';\nimport { isArray, isEmpty, isEqual, isNil } from '@visactor/vutils';\nimport type { IBaseScale, OrdinalScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport type { IChart } from '../chart/interface';\nimport type { IChartSpec } from '../typings/spec';\nimport { createScale } from '../util/scale';\nimport { isDataDomainSpec } from '../util/type';\nimport { mergeFields } from '../util/data';\nimport type { IVisualScale, IVisualSpecScale } from '../typings';\nimport type { StatisticOperations } from '../data/transforms/interface';\nimport type { ISeries } from '../series';\n\nexport class GlobalScale implements IGlobalScale {\n private _scaleSpecMap: Map> = new Map();\n private _scaleMap: Map = new Map();\n private _modelScaleSpecMap: Map> = new Map();\n private _markAttributeScaleMap: Map =\n new Map();\n private _spec: IChartSpec['scales'] = null;\n private readonly _chart: IChart = null;\n constructor(spec: IChartSpec['scales'], chart: IChart) {\n this._spec = spec;\n this._chart = chart;\n this._setAttrFromSpec();\n }\n\n private _createFromSpec(s: IVisualSpecScale): IBaseScale {\n if (!s.id) {\n return null;\n }\n let scale = this._scaleMap.get(s.id);\n if (!scale) {\n if (s.type === 'ordinal' && s.id === 'color') {\n scale = createScale('colorOrdinal'); // 全局颜色色板的特殊逻辑\n } else {\n scale = createScale(s.type);\n }\n }\n if (!scale) {\n return null;\n }\n if (isArray(s.range)) {\n scale.range(s.range);\n }\n if (isArray(s.domain)) {\n if (!isDataDomainSpec(s.domain)) {\n scale.domain(s.domain);\n }\n }\n if (s.specified && (scale).specified) {\n (scale).specified(s.specified);\n }\n return scale;\n }\n\n private _setAttrFromSpec() {\n if (!this._spec?.length) {\n return;\n }\n const newScaleMap: Map = new Map();\n const newScaleSpecMap: Map> = new Map();\n this._spec.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n this._modelScaleSpecMap.forEach(s => {\n const scale = this._createFromSpec(s);\n if (!scale) {\n return;\n }\n newScaleMap.set(s.id, scale);\n newScaleSpecMap.set(s.id, s);\n });\n\n this._scaleSpecMap = newScaleSpecMap;\n this._scaleMap = newScaleMap;\n }\n\n updateSpec(spec: IChartSpec['scales']) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n if (isEqual(spec, this._spec)) {\n return result;\n }\n result.change = true;\n for (let i = 0; i < spec.length; i++) {\n const s = spec[i];\n const scale = this._scaleMap.get(s.id);\n if (!scale) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n const lastSpec = this._spec.find(_s => _s.id === s.id);\n if (!lastSpec.id) {\n // new global scale need remake chart\n result.reMake = true;\n return result;\n }\n if (lastSpec.type !== s.type) {\n // scale cannot change type, need remake chart\n result.reMake = true;\n return result;\n }\n if (!isEqual(lastSpec.specified, s.specified)) {\n result.reMake = true;\n return result;\n }\n if (s.range && !isEqual(s.range, scale.range())) {\n scale.range(s.range);\n result.reRender = true;\n }\n if (isDataDomainSpec(s.domain)) {\n result.reRender = true;\n } else if (!isEqual(s.domain, scale.domain())) {\n scale.domain(s.domain);\n result.reRender = true;\n }\n // replace specMap, this use for data domain\n this._scaleSpecMap.set(s.id, s);\n }\n this._spec = spec;\n return result;\n }\n\n registerModelScale(spec: IVisualSpecScale) {\n const scale = this._createFromSpec(spec);\n if (!scale) {\n return;\n }\n this._modelScaleSpecMap.set(spec.id, spec);\n this._scaleSpecMap.set(spec.id, spec);\n this._scaleMap.set(spec.id, scale);\n }\n\n removeModelScale(filter: (spec: IVisualSpecScale) => boolean) {\n this._modelScaleSpecMap.forEach(spec => {\n if (filter(spec)) {\n this._modelScaleSpecMap.delete(spec.id);\n this._scaleSpecMap.delete(spec.id);\n this._scaleMap.delete(spec.id);\n }\n });\n }\n\n getScale(user_id: string): IBaseScale | null {\n return this._scaleMap.get(user_id);\n }\n\n getScaleSpec(user_id: string): IVisualSpecScale | null {\n return this._scaleSpecMap.get(user_id);\n }\n\n getStatisticalFields = (\n dataId: string\n ): {\n key: string;\n operations: StatisticOperations;\n }[] => {\n const result: {\n key: string;\n operations: StatisticOperations;\n }[] = [];\n this._scaleSpecMap.forEach((v, k) => {\n if (!isDataDomainSpec(v.domain)) {\n return;\n }\n v.domain.forEach(spec => {\n if (spec.dataId === dataId) {\n spec.fields.forEach(key => {\n mergeFields(result, [\n {\n key,\n operations: isContinuous(v.type) ? ['max', 'min'] : ['values']\n }\n ]);\n });\n }\n });\n });\n this._markAttributeScaleMap.forEach((specList, scaleName) => {\n const scale = this.getScale(scaleName);\n specList.forEach(spec => {\n const series = this._getSeriesBySeriesId(spec.seriesId);\n\n if (series.getRawData().name === dataId && spec.field) {\n mergeFields(result, [\n {\n key: spec.field,\n operations: isContinuous(scale.type) ? ['max', 'min'] : ['values']\n }\n ]);\n }\n });\n });\n return result;\n };\n\n private _getSeriesByRawDataId(id: string): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.getRawData().name === id) {\n return s;\n }\n }\n return null;\n }\n\n private _getSeriesBySeriesId(id: number): ISeries {\n const series = this._chart.getAllSeries();\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n if (s.id === id) {\n return s;\n }\n }\n return null;\n }\n\n updateScaleDomain(defaultDomain: unknown[]) {\n this._scaleSpecMap.forEach((scaleSpec, id) => {\n const scale = this._scaleMap.get(id);\n if (!scale) {\n return;\n }\n if (!isDataDomainSpec(scaleSpec.domain)) {\n if (!scaleSpec.domain || scaleSpec.domain.length === 0) {\n scale.domain(defaultDomain);\n }\n this._updateMarkScale(id, scale, scale.domain().slice());\n return;\n }\n let domain: unknown[] | Set;\n if (isContinuous(scaleSpec.type)) {\n domain = [null, null];\n } else {\n domain = new Set();\n }\n scaleSpec.domain.forEach(spec => {\n const series = this._getSeriesByRawDataId(spec.dataId);\n\n if (!series) {\n return;\n }\n\n const isContinuousField = isContinuous(scaleSpec.type);\n spec.fields.forEach(key => {\n const statistics = series.getRawDataStatisticsByField(key, isContinuousField);\n if (!statistics) {\n return;\n }\n if (isContinuousField) {\n if (isNil(domain[0])) {\n domain[0] = statistics.min;\n } else {\n domain[0] = Math.min(statistics.min, domain[0]);\n }\n if (isNil(domain[1])) {\n domain[1] = statistics.max;\n } else {\n domain[1] = Math.max(statistics.max, domain[1]);\n }\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n }\n });\n });\n\n const scaleDomain = domain;\n if (!isContinuous(scaleSpec.type)) {\n domain = Array.from(domain);\n }\n scale.domain(domain as unknown[]);\n this._updateMarkScale(id, scale, scaleDomain);\n });\n }\n\n private _updateMarkScale(id: string, scale: IBaseScale, domain: unknown[] | Set) {\n const list = this._markAttributeScaleMap.get(id);\n if (!list || list.length === 0) {\n return;\n }\n list.forEach(info => {\n if (!info.field || !info.markScale || info.markScale === scale) {\n return;\n }\n if (isNil(info.changeDomain) || info.changeDomain === 'none' || isNil(info.seriesId)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n const series = this._getSeriesBySeriesId(info.seriesId);\n const isContinuousScale = isContinuous(scale.type);\n const statistics = series.getRawDataStatisticsByField(info.field, isContinuousScale);\n\n if (isEmpty(statistics)) {\n isContinuous(scale.type) ? info.markScale.domain(domain as unknown[]) : scale.domain(Array.from(domain));\n return;\n }\n\n if (info.changeDomain === 'expand') {\n if (isContinuousScale) {\n domain[0] = Math.min(domain[0], statistics.min);\n domain[1] = Math.max(domain[1], statistics.max);\n } else {\n statistics.values.forEach((value: string) => {\n (domain as Set).add(value);\n });\n domain = Array.from(domain);\n }\n info.markScale.domain(domain as any[]);\n return;\n }\n if (info.changeDomain === 'replace') {\n if (isContinuousScale) {\n info.markScale.domain([statistics.min, statistics.max]);\n } else {\n info.markScale.domain(statistics.values);\n }\n return;\n }\n });\n }\n\n registerMarkAttributeScale(spec: IVisualScale, seriesId: number): IBaseScale {\n const scale = this._scaleMap.get(spec.scale);\n let list = this._markAttributeScaleMap.get(spec.scale);\n if (!list) {\n list = [];\n this._markAttributeScaleMap.set(spec.scale, list);\n }\n let markScale = scale;\n if (isNil(spec.field) || (!isNil(spec.changeDomain) && spec.changeDomain !== 'none' && !isNil(seriesId))) {\n markScale = scale.clone();\n }\n list.push({\n ...spec,\n seriesId,\n markScale\n });\n return markScale;\n }\n}\n","import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\n\nexport class BaseChart extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (d.series).fieldY[0] : (d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.clearAxisValue?.();\n crosshair.hide?.();\n } else {\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value } = d;\n crosshair.clearAxisValue();\n crosshair.setAxisValue(value, axis);\n crosshair.layoutByValue();\n });\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n","import type { ISeriesStackData, ISeriesStackDataLeaf, ISeriesStackDataNode } from '../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport interface IStackOption {\n fields: string[];\n}\n\nexport const stackSplit = (data: Array, op: IStackOption) => {\n const result: ISeriesStackData = {\n nodes: {}\n };\n const { fields } = op;\n if (!fields?.length) {\n return result;\n }\n const lastFieldIndex = fields.length - 1;\n let temp: ISeriesStackDataNode = result;\n let nextNode: ISeriesStackDataNode;\n let leaf: ISeriesStackDataLeaf;\n data.forEach(dv => {\n dv.latestData &&\n dv.latestData.forEach((d: Datum) => {\n temp = result;\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i];\n const fV = d[f];\n if (isNil(fV)) {\n break;\n }\n temp.groupField = f;\n if (!temp.nodes[fV]) {\n if (i === lastFieldIndex) {\n temp.nodes[fV] = { values: [] };\n } else {\n nextNode = { nodes: {} };\n temp.nodes[fV] = nextNode;\n }\n }\n if (i === lastFieldIndex) {\n leaf = temp.nodes[fV] as ISeriesStackDataLeaf;\n leaf.values.push(d);\n } else {\n temp = temp.nodes[fV] as ISeriesStackDataNode;\n }\n }\n });\n });\n return result;\n};\n","import { ChartEvent } from '../constant/event';\nimport type { IRegion } from '../region/interface';\nimport type { IChart } from './interface';\nimport type { IStackCacheNode, IStackCacheRoot } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRegionStackGroup, stack, stackOffsetSilhouette, stackTotal } from '../util';\nimport type { EventCallback } from '../event/interface';\nimport type { DataSet } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../data/register';\nimport { stackSplit } from '../data/transforms/stack-split';\n\n// stack\n// 1. 不可以多个region之间的series进行堆积,目前看这种需求没有场景。将堆积改为针对 region\n// 2. 堆积是一个数据层面的逻辑,但是会影响系列当前使用的yField到底是什么。\n// 3. ECharts 线系列参与堆积后,线系列的y不变,但是与它一起堆积的柱图,数据变化了了,是堆积后的值\n// 4. x 方向分组的功能,是属于轴的,与堆积和怎么堆积无关。\n// 现有功能,有支持堆积时的方向可以调整。也就是sort\nexport class Stack {\n protected _chart: IChart;\n protected _options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n };\n\n constructor(\n chart: IChart,\n options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n }\n ) {\n this._chart = chart;\n this._options = options;\n }\n\n init() {\n this._chart.getAllRegions().forEach(r => {\n r.event.on(\n ChartEvent.regionSeriesDataFilterOver,\n { filter: ({ model }) => model?.id === r.id },\n this.stackRegion as EventCallback\n );\n });\n }\n\n stackAll() {\n this._chart.getAllRegions().forEach(r => {\n this.stackRegion({ model: r });\n });\n }\n\n stackRegion = ({ model }: { model: IRegion }) => {\n const series = model.getSeries();\n const hasStack = series.some(s => s.getStack());\n\n if (!hasStack) {\n return;\n }\n // total label need percent\n const hasTotalLabel = series.some(s => {\n return s.getSpec()?.totalLabel?.visible;\n });\n const hasPercent = hasTotalLabel || series.some(s => s.getPercent());\n const hasOffsetSilhouette = series.some(s => s.getStackOffsetSilhouette());\n\n const stackValueGroup = getRegionStackGroup(model, true);\n\n // 计算堆积\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], model.getStackInverse(), hasPercent, hasTotalLabel);\n }\n }\n\n if (hasOffsetSilhouette) {\n // 围绕中心轴偏移轮廓\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackOffsetSilhouette(stackValueGroup[stackValue].nodes[key]);\n }\n }\n }\n\n if (hasTotalLabel) {\n model.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n if (stackData && stackValueField) {\n stackTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n }\n });\n }\n\n if (this._options?.afterStackRegion) {\n this._options.afterStackRegion(model, stackValueGroup);\n }\n };\n}\n\nexport class StackChartMixin {\n protected _stack: Stack;\n protected _dataSet: DataSet;\n\n protected _beforeInit() {\n if (this._dataSet) {\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n }\n }\n\n protected _initStack() {\n this._stack = new Stack(this as unknown as IChart);\n this._stack.init();\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ILineChartSpec } from './interface';\nimport { registerLineSeries } from '../../series/line/line';\nimport { Factory } from '../../core/factory';\nimport { LineChartSpecTransformer } from './line-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class LineChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.line;\n static readonly seriesType: string = SeriesTypeEnum.line;\n static readonly transformerConstructor = LineChartSpecTransformer;\n readonly transformerConstructor = LineChartSpecTransformer;\n readonly type: string = ChartTypeEnum.line;\n readonly seriesType: string = SeriesTypeEnum.line;\n}\n\nmixin(LineChart, StackChartMixin);\n\nexport const registerLineChart = () => {\n registerLineSeries();\n Factory.registerChart(LineChart.type, LineChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IAreaMarkSpec } from '../typings/visual';\nimport { BaseLineMark } from './base/base-line';\nimport type { IAreaMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerAreaGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarLineOrAreaAnimation } from '../animation/config';\n\nexport class AreaMark extends BaseLineMark implements IAreaMark {\n static readonly type = MarkTypeEnum.area;\n readonly type = AreaMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n\n protected _getIgnoreAttributes(): string[] {\n return [];\n }\n}\n\nexport const registerAreaMark = () => {\n Factory.registerMark(AreaMark.type, AreaMark);\n registerAreaGraphic();\n registerVGrammarLineOrAreaAnimation();\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { array, isValid } from '@visactor/vutils';\n\nexport class AreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getSeriesStyle = (datum: any, styleKey: string | string[], defaultValue?: any) => {\n for (const key of array(styleKey)) {\n let value = this.series.getSeriesStyle(datum)?.(key);\n // because of line mark merge into area mark\n // TODO: if tooltip symbol use mark fill & stroke ,remove this code\n if (value === false && (key === 'fill' || key === 'stroke')) {\n if (key === 'fill') {\n value = this.series.getSeriesStyle(datum)?.('stroke')?.[0];\n } else {\n value = this.series.getSeriesStyle(datum)?.('fill');\n }\n }\n if (isValid(value)) {\n return value;\n }\n }\n return defaultValue;\n };\n}\n","import { registerLineAnimation, registerAreaAnimation, registerScaleInOutAnimation } from '../../animation/config';\nimport { Direction } from '../../typings/space';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { AreaAppearPreset, IAreaAnimationParams } from './interface';\n\nconst Appear_ClipIn: IAnimationTypeConfig = {\n type: 'clipIn'\n};\n\nconst Appear_Grow = (params: IAreaAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function areaPresetAnimation(\n params: IAreaAnimationParams,\n preset: AreaAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'grow':\n return Appear_Grow(params);\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_ClipIn;\n }\n}\n\nexport const registerAreaSeriesAnimation = () => {\n registerAreaAnimation();\n registerLineAnimation();\n registerScaleInOutAnimation();\n};\n","import { isValid } from '@visactor/vutils';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport type { AreaSeries } from './area';\nimport type { IAreaSeriesSpec, IAreaSeriesTheme } from './interface';\nimport type { ConvertToMarkStyleSpec, IAreaMarkSpec } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class AreaSeriesSpecTransformer<\n T extends IAreaSeriesSpec = IAreaSeriesSpec,\n K extends IAreaSeriesTheme = IAreaSeriesTheme\n> extends LineLikeSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n const isPointVisible = spec.point?.visible !== false && spec.point?.style?.visible !== false;\n\n this._addMarkLabelSpec(spec, (spec: any) => {\n const isAreaMiddle = spec.position === 'inside-middle';\n return !isPointVisible || isAreaMiddle ? SeriesMarkNameEnum.area : SeriesMarkNameEnum.point;\n });\n\n this._addMarkLabelSpec(\n spec,\n SeriesMarkNameEnum.area,\n 'areaLabel' as any,\n 'initLineLabelMarkStyle',\n undefined,\n true\n );\n }\n\n protected _transformSpecAfterMergingTheme(spec: T, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n super._transformSpecAfterMergingTheme(spec, chartSpec, chartSpecInfo);\n\n const { area = {}, line = {}, seriesMark } = spec;\n const isAreaVisible = area.visible !== false && area.style?.visible !== false;\n const isLineVisible = line.visible !== false && line.style?.visible !== false;\n // merge line to area\n\n area.support3d = !!(area.support3d || line.support3d);\n area.zIndex =\n isValid(area.zIndex) || isValid(line.zIndex) ? Math.max(area.zIndex ?? 0, line.zIndex ?? 0) : undefined;\n\n // remove area stroke\n if (area.style) {\n delete area.style.stroke;\n }\n if (area.state) {\n Object.keys(area.state).forEach(state => {\n if ('style' in area.state[state]) {\n delete area.state[state].style.stroke;\n } else {\n delete (>area.state[state]).stroke;\n }\n });\n }\n // check which one is main\n let mainSpec = area;\n let subSpec = line;\n if (seriesMark === 'line' || (isLineVisible && !isAreaVisible)) {\n mainSpec = line;\n subSpec = area;\n }\n area.style = mergeSpec({}, subSpec.style, mainSpec.style);\n area.state = mergeSpec({}, subSpec.state, mainSpec.state);\n\n if (area.interactive === false) {\n area.style.fillPickable = false;\n }\n if (line.interactive === false) {\n line.style.strokePickable = false;\n }\n\n area.interactive = !!(area.interactive || (line.interactive ?? true));\n\n spec.area = area;\n spec.line = line;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { isArray } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum, InterpolateType } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { mixin } from '@visactor/vutils';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { DEFAULT_SMOOTH_INTERPOLATE } from '../../typings/interpolate';\nimport type { IAreaSeriesSpec } from './interface';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { registerLineMark } from '../../mark/line';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { AreaSeriesTooltipHelper } from './tooltip-helpter';\nimport { areaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerAreaSeriesAnimation } from './animation';\nimport type { IMark, IAreaMark } from '../../mark/interface';\nimport { registerSampleTransform, registerMarkOverlapTransform } from '@visactor/vgrammar-core';\nimport { AreaSeriesSpecTransformer } from './area-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport interface AreaSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addSamplingCompile'\n | 'addOverlapCompile'\n | 'reCompileSampling'\n | 'initLineLabelMarkStyle'\n >,\n CartesianSeries {}\n\nexport class AreaSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.area;\n type = SeriesTypeEnum.area;\n\n static readonly mark: SeriesMarkMap = areaSeriesMark;\n static readonly transformerConstructor = AreaSeriesSpecTransformer as any;\n readonly transformerConstructor = AreaSeriesSpecTransformer;\n\n protected _areaMark!: IAreaMark;\n protected _sortDataByAxis: boolean = false;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const areaSpec = this._spec.area || {};\n\n const seriesMark = this._spec.seriesMark ?? 'area';\n const isAreaMarkVisible = this._isAreaVisible() || this._isLineVisible();\n // area\n this._areaMark = this._createMark(\n AreaSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark: isAreaMarkVisible && seriesMark !== 'point',\n stateSort: areaSpec.stateSort\n },\n {\n ...progressive,\n morphElementKey: this.getDimensionField()[0],\n setCustomizedShape: areaSpec.customShape\n }\n ) as IAreaMark;\n\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initSymbolMarkStyle();\n }\n\n initAreaMarkStyle() {\n // FIXME 是不是应该把curveType提前到上层配置\n // 不允许area和line的curveType不一致\n const userCurveType = (this.getSpec().area?.style?.curveType ??\n this.getSpec().line?.style?.curveType) as InterpolateType;\n const curveType =\n userCurveType === DEFAULT_SMOOTH_INTERPOLATE\n ? this._direction === Direction.horizontal\n ? 'monotoneY'\n : 'monotoneX'\n : userCurveType;\n\n // area\n const areaMark = this._areaMark;\n if (areaMark) {\n const isAreaVisible = this._isAreaVisible();\n const isLineVisible = this._isLineVisible();\n if (isAreaVisible || isLineVisible) {\n areaMark.setVisible(true);\n } else {\n areaMark.setVisible(false);\n }\n\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionX1(datum), this._xAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n y1: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n orient: this._direction\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n x: this.dataToPositionX.bind(this),\n x1: this.dataToPositionX.bind(this),\n y1: (datum: Datum) => {\n return valueInScaleRange(this.dataToPositionY1(datum), this._yAxisHelper?.getScale?.(0));\n },\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n fill: isAreaVisible ? this.getColorAttribute() : false,\n stroke: isLineVisible ? this.getColorAttribute() : false\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.setMarkStyle(\n areaMark,\n {\n curveType\n },\n 'normal',\n AttributeLevel.Built_In\n );\n\n // change stroke to area stoke = [lineStroke,false,false,false]\n Object.keys(areaMark.stateStyle).forEach(state => {\n if (areaMark.stateStyle[state].stroke) {\n areaMark.setPostProcess(\n 'stroke',\n result => {\n return [result, false, false, false];\n },\n state\n );\n }\n });\n }\n }\n\n initAnimation() {\n const areaAnimationParams = { direction: this.direction };\n const appearPreset = (this._spec.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._lineMark) {\n this._lineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('line')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.line, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._areaMark) {\n this._areaMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('area')?.(areaAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n if (this._symbolMark) {\n const animationParams = getGroupAnimationParams(this);\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected _isAreaVisible() {\n const areaSpec = this._spec.area || {};\n return areaSpec.visible !== false && areaSpec.style?.visible !== false;\n }\n\n protected _isLineVisible() {\n const lineSpec = this._spec.line || {};\n return lineSpec.visible !== false && lineSpec.style?.visible !== false;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new AreaSeriesTooltipHelper(this);\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n this.encodeDefined(this._areaMark, 'defined');\n }\n\n compile(): void {\n super.compile();\n this.addSamplingCompile();\n this.addOverlapCompile();\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.reCompileSampling();\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n const seriesMarkType = this._spec.seriesMark ?? 'area';\n\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && (!result || seriesMarkType === 'line')) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(AreaSeries, LineLikeSeriesMixin);\n\nexport const registerAreaSeries = () => {\n registerSampleTransform();\n registerMarkOverlapTransform();\n registerLineMark();\n registerAreaMark();\n registerSymbolMark();\n registerAreaSeriesAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(AreaSeries.type, AreaSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IAreaChartSpec } from './interface';\n\nexport class AreaChartSpecTransformer<\n T extends IAreaChartSpec = IAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'point',\n 'line',\n 'area',\n 'seriesMark',\n 'activePoint',\n 'sampling',\n 'samplingFactor',\n 'pointDis',\n 'pointDisMul',\n 'markOverlap',\n 'areaLabel'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerAreaSeries } from '../../series/area/area';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IAreaChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { AreaChartSpecTransformer } from './area-transformer';\nimport { BaseChart } from '../base';\nimport { mixin } from '@visactor/vutils';\nimport { StackChartMixin } from '../stack';\n\nexport class AreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.area;\n static readonly seriesType: string = SeriesTypeEnum.area;\n static readonly transformerConstructor = AreaChartSpecTransformer;\n readonly transformerConstructor = AreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.area;\n readonly seriesType: string = SeriesTypeEnum.area;\n}\nmixin(AreaChart, StackChartMixin);\n\nexport const registerAreaChart = () => {\n registerAreaSeries();\n Factory.registerChart(AreaChart.type, AreaChart);\n};\n","import { Factory } from '../../core/factory';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport type { Datum } from '../../typings';\nimport type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { BarAppearPreset, IBarAnimationParams } from './interface';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nfunction barGrowOption(barParams: IBarAnimationParams, isOverall = true) {\n return (datum: Datum, element: IElement, params: any) => {\n const field = barParams.direction === 'vertical' ? barParams.yField : barParams.xField;\n const data = datum?.[field];\n if (barParams.direction === 'vertical') {\n return {\n overall: isOverall ? barParams.growFrom() : isOverall,\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n return {\n overall: isOverall ? barParams.growFrom() : false,\n orient: data > 0 ? 'positive' : 'negative'\n };\n };\n}\nexport const barGrowIn = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: barGrowOption(params, isOverall)\n };\n};\n\nexport const barGrowOut = (params: IBarAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: barGrowOption(params, isOverall)\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function barPresetAnimation(\n params: IBarAnimationParams,\n preset: BarAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params);\n }\n}\n\nexport const registerBarAnimation = () => {\n Factory.registerAnimation('bar', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n\nexport const registerBar3dAnimation = () => {\n Factory.registerAnimation('bar3d', (params: IBarAnimationParams, preset: BarAppearPreset) => {\n return {\n appear: barPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params)\n };\n });\n};\n","import { Factory } from './../core/factory';\nimport type { IRectMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRectMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRectGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport class RectMark extends BaseMark implements IRectMark {\n static readonly type = MarkTypeEnum.rect;\n readonly type = RectMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRectMark = () => {\n Factory.registerMark(RectMark.type, RectMark);\n registerRectGraphic();\n registerVGrammarRectAnimation();\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const barSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar]: { name: SeriesMarkNameEnum.bar, type: MarkTypeEnum.rect },\n [SeriesMarkNameEnum.barBackground]: { name: SeriesMarkNameEnum.barBackground, type: MarkTypeEnum.rect }\n};\n\nexport const bar3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.bar3d]: { name: SeriesMarkNameEnum.bar3d, type: MarkTypeEnum.rect3d }\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IStackCacheNode } from '../../util/data';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { ISeries } from '../interface/series';\n\nexport function stackWithMinHeight(\n stackCache: IStackCacheNode,\n stackInverse: boolean,\n context: {\n isVertical: boolean;\n start: string;\n end: string;\n startMethod: string;\n endMethod: string;\n axisHelper: string;\n }\n) {\n if (stackCache.values.length > 0) {\n // temp\n let lastY: number;\n // 如果进行了夸系列的排序\n if (stackCache.sortDatums.length) {\n let sortDatums = stackCache.sortDatums;\n if (stackInverse) {\n sortDatums = stackCache.sortDatums.slice().reverse();\n }\n for (let index = 0; index < sortDatums.length; index++) {\n lastY = computeOneDatumY(\n sortDatums[index].datum,\n lastY,\n sortDatums[index].series,\n context,\n sortDatums[index].series[context.axisHelper].getScale?.(0),\n index === 0\n );\n }\n } else {\n // 使用基于系列数据顺序的排序\n // stack one group\n let seriesInfo = stackCache.series;\n if (stackInverse) {\n seriesInfo = seriesInfo.slice().reverse();\n }\n seriesInfo.forEach(({ s, values }, sIndex) => {\n const seriesScale = s[context.axisHelper].getScale?.(0);\n // stack\n for (let index = 0; index < values.length; index++) {\n const obj = values[stackInverse ? values.length - 1 - index : index];\n lastY = computeOneDatumY(obj, lastY, s, context, seriesScale, index === 0 && sIndex === 0);\n }\n });\n }\n }\n for (const key in stackCache.nodes) {\n stackWithMinHeight(stackCache.nodes[key], stackInverse, context);\n }\n}\n\nfunction computeOneDatumY(\n obj: any,\n lastY: number,\n s: ISeries,\n context: {\n isVertical: boolean;\n start: string;\n end: string;\n startMethod: string;\n endMethod: string;\n axisHelper: string;\n },\n seriesScale: IBaseScale,\n isFirst: boolean\n) {\n // stack info in series\n const barMinHeight = s.getSpec().barMinHeight;\n const inverse = s[context.axisHelper].isInverse();\n\n const y1 = valueInScaleRange(s[context.startMethod](obj), seriesScale);\n let y = valueInScaleRange(s[context.endMethod](obj), seriesScale);\n\n if (isFirst) {\n lastY = y1;\n }\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = context.isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n y = lastY + flag * height;\n obj[context.start] = lastY;\n obj[context.end] = y;\n return y;\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IBarSeriesSpec, IBarSeriesTheme } from './interface';\n\nexport class BarSeriesSpecTransformer<\n T extends IBarSeriesSpec = IBarSeriesSpec,\n K extends IBarSeriesTheme = IBarSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IBaseScale } from '@visactor/vscale';\nimport { isContinuous } from '@visactor/vscale';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport {\n DEFAULT_DATA_KEY,\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum, DirectionType } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { getRegionStackGroup } from '../../util/data';\nimport { getActualNumValue } from '../../util/space';\nimport { registerBarAnimation } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { BarAppearPreset, IBarAnimationParams, IBarSeriesSpec } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { IModelInitOption } from '../../model/interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerRectMark } from '../../mark/rect';\nimport { array, isFunction, isNil, isValid, last } from '@visactor/vutils';\nimport { barSeriesMark } from './constant';\nimport { stackWithMinHeight } from '../util/stack';\nimport { Factory } from '../../core/factory';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { DataView } from '@visactor/vdataset';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { registerSampleTransform } from '@visactor/vgrammar-core';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { BarSeriesSpecTransformer } from './bar-transformer';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { RECT_X, RECT_X1, RECT_Y, RECT_Y1 } from '../base/constant';\nimport { createRect } from '@visactor/vrender-core';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class BarSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.bar;\n type = SeriesTypeEnum.bar;\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n\n static readonly mark: SeriesMarkMap = barSeriesMark;\n static readonly transformerConstructor = BarSeriesSpecTransformer as any;\n readonly transformerConstructor = BarSeriesSpecTransformer;\n\n protected _bandPosition = 0;\n protected _barMark!: IRectMark;\n protected _barBackgroundMark!: IRectMark;\n\n protected _barBackgroundViewData: SeriesData;\n\n initMark(): void {\n this._initBarBackgroundMark();\n\n this._barMark = this._createMark(\n {\n ...BarSeries.mark.bar,\n name: this._barMarkName,\n type: this._barMarkType\n },\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.bar?.stateSort\n },\n {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold,\n morphElementKey: this.getDimensionField()[0],\n morph: shouldMarkDoMorph(this._spec, this._barMarkName),\n setCustomizedShape: this._spec.bar?.customShape\n }\n ) as IRectMark;\n }\n\n protected _initBarBackgroundMark(): void {\n if (this._spec.barBackground && this._spec.barBackground.visible) {\n this._barBackgroundMark = this._createMark(\n BarSeries.mark.barBackground,\n {\n dataView: this._barBackgroundViewData.getDataView(),\n dataProductId: this._barBackgroundViewData.getProductId(),\n stateSort: this._spec.barBackground.stateSort\n },\n {\n setCustomizedShape: this._spec.barBackground.customShape,\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n }\n ) as IRectMark;\n }\n }\n\n initMarkStyle(): void {\n if (this._barMark) {\n this.setMarkStyle(\n this._barMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { mark, group } = this._tooltipHelper.activeTriggerSet;\n if (this._barMark) {\n mark.add(this._barMark);\n group.add(this._barMark);\n }\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n\n const spec = this._spec.barBackground ?? {};\n if (!spec.visible) {\n return;\n }\n\n const hasBandAxis = this._getRelatedComponentSpecInfo('axes').some(\n axisInfo => axisInfo.type === ComponentTypeEnum.cartesianBandAxis\n );\n\n let barBackgroundData: DataView;\n registerDataSetInstanceTransform(this._option.dataSet, 'addVChartProperty', addVChartProperty);\n\n if (hasBandAxis) {\n type DimensionItemsConfig = { scaleDepth?: number };\n\n /**\n * @description 准备 barBackground 数据(离散轴)\n */\n const dimensionItems = ([data]: DataView[], { scaleDepth }: DimensionItemsConfig) => {\n let dataCollect: Datum[] = [{}];\n const fields = this.getDimensionField();\n // 将维度轴的所有层级 field 的对应数据做笛卡尔积\n const depth = isNil(scaleDepth) ? fields.length : Math.min(fields.length, scaleDepth);\n for (let i = 0; i < depth; i++) {\n const field = fields[i];\n const values = data.latestData[field]?.values;\n if (!values?.length) {\n continue;\n }\n const newDataCollect: Datum[] = [];\n const dataKey = (this._spec.dataKey as string) ?? DEFAULT_DATA_KEY;\n for (let j = 0; j < values.length; j++) {\n for (let k = 0; k < dataCollect.length; k++) {\n newDataCollect.push({\n ...dataCollect[k],\n [field]: values[j],\n [dataKey]: values[j]\n });\n }\n }\n dataCollect = newDataCollect;\n }\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'dimensionItems', dimensionItems);\n\n barBackgroundData = new DataView(this._option.dataSet)\n .parse([this._viewDataStatistics], {\n type: 'dataview'\n })\n .transform(\n {\n type: 'dimensionItems',\n options: {\n scaleDepth: isNil(spec.fieldLevel) ? undefined : spec.fieldLevel + 1\n } as DimensionItemsConfig\n },\n false\n )\n .transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._viewDataStatistics?.target.addListener('change', barBackgroundData.reRunAllTransform);\n } else {\n /**\n * @description 准备 barBackground 数据(连续轴)\n */\n const dimensionItems = ([data]: DataView[]) => {\n const dataCollect: Datum[] = [];\n const [field0, field1] = this.getDimensionContinuousField();\n const map: Record = {};\n viewData.latestData.forEach((datum: Datum) => {\n const key = `${datum[field0]}-${datum[field1]}`;\n if (!map[key]) {\n map[key] = {\n [field0]: datum[field0],\n [field1]: datum[field1]\n };\n dataCollect.push(map[key]);\n }\n });\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'dimensionItems', dimensionItems);\n\n const viewData = this.getViewData();\n barBackgroundData = new DataView(this._option.dataSet)\n .parse([viewData], {\n type: 'dataview'\n })\n .transform(\n {\n type: 'dimensionItems'\n },\n false\n )\n .transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n viewData?.target.addListener('change', barBackgroundData.reRunAllTransform);\n }\n this._barBackgroundViewData = new SeriesData(this._option, barBackgroundData);\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n if (this.direction === 'vertical') {\n this._xAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n } else {\n this._yAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n }\n }\n\n private _shouldDoPreCalculate() {\n const region = this.getRegion();\n return this.getStack() && region.getSeries().filter(s => s.type === this.type && s.getSpec().barMinHeight).length;\n }\n\n private _calculateStackRectPosition(isVertical: boolean) {\n const region = this.getRegion();\n\n // @ts-ignore\n if (region._bar_series_position_calculated) {\n return;\n }\n // @ts-ignore\n region._bar_series_position_calculated = true; // 因为是 region 内堆叠矩形的计算,所以加一个 hack 标识位用于避免重复计算\n let start: string;\n let end: string;\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n start = RECT_Y1;\n end = RECT_Y;\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n start = RECT_X1;\n end = RECT_X;\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n // only reCompute bar\n const stackValueGroup = getRegionStackGroup(region, false, s => s.type === this.type);\n // 按照堆积逻辑 重新计算一次图形的堆积位置并设置到数据上\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackWithMinHeight(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), {\n isVertical,\n start,\n end,\n startMethod,\n endMethod,\n axisHelper\n });\n }\n }\n }\n\n private _calculateRectPosition(datum: Datum, isVertical: boolean, useWholeRange?: boolean) {\n let startMethod: string;\n let endMethod: string;\n let axisHelper: string;\n if (isVertical) {\n startMethod = '_dataToPosY1';\n endMethod = '_dataToPosY';\n axisHelper = '_yAxisHelper';\n } else {\n startMethod = '_dataToPosX1';\n endMethod = '_dataToPosX';\n axisHelper = '_xAxisHelper';\n }\n\n const seriesScale = this[axisHelper].getScale?.(0);\n const inverse = this[axisHelper].isInverse();\n const barMinHeight = this._spec.barMinHeight;\n const y1 = valueInScaleRange(this[startMethod](datum), seriesScale, useWholeRange);\n const y = valueInScaleRange(this[endMethod](datum), seriesScale, useWholeRange);\n\n let height = Math.abs(y1 - y);\n if (height < barMinHeight) {\n height = barMinHeight;\n }\n\n let flag = 1;\n if (y < y1) {\n flag = -1;\n } else if (y === y1) {\n flag = isVertical ? (inverse ? 1 : -1) : inverse ? -1 : 1;\n }\n return y1 + flag * height;\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosX(datum: Datum) {\n return this.dataToPositionX(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosX1(datum: Datum) {\n return this.dataToPositionX1(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosY(datum: Datum) {\n return this.dataToPositionY(datum);\n }\n\n // 用于 bar-like 的位置转换,range-column 会重写这个方法\n protected _dataToPosY1(datum: Datum) {\n return this.dataToPositionY1(datum);\n }\n\n protected _getBarXStart = (datum: Datum, scale: IBaseScale, useWholeRange?: boolean) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, false, useWholeRange);\n }\n\n return valueInScaleRange(this._dataToPosX(datum), scale, useWholeRange);\n };\n\n protected _getBarXEnd = (datum: Datum, scale: IBaseScale, useWholeRange?: boolean) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(false);\n return datum[RECT_X1];\n }\n\n return valueInScaleRange(this._dataToPosX1(datum), scale, useWholeRange);\n };\n\n protected _getBarYStart = (datum: Datum, scale: IBaseScale) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y];\n }\n\n if (this._spec.barMinHeight) {\n return this._calculateRectPosition(datum, true);\n }\n\n return valueInScaleRange(this._dataToPosY(datum), scale);\n };\n\n protected _getBarYEnd = (datum: Datum, scale: IBaseScale) => {\n if (this._shouldDoPreCalculate()) {\n this._calculateStackRectPosition(true);\n return datum[RECT_Y1];\n }\n\n return valueInScaleRange(this._dataToPosY1(datum), scale);\n };\n\n initBandRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barMark,\n {\n x: datum => this._getBarXStart(datum, xScale),\n x1: datum => this._getBarXEnd(datum, xScale),\n y: datum => this._getPosition(this.direction, datum),\n height: () => this._getBarWidth(this._yAxisHelper),\n width: () => undefined,\n y1: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barMark,\n {\n y: datum => this._getBarYStart(datum, yScale),\n y1: datum => this._getBarYEnd(datum, yScale),\n x: datum => this._getPosition(this.direction, datum),\n width: () => this._getBarWidth(this._xAxisHelper),\n x1: () => undefined,\n height: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this._initStackBarMarkStyle();\n\n this._initBandBarBackgroundMarkStyle();\n }\n\n protected _initStackBarMarkStyle() {\n if (!this._spec.stackCornerRadius) {\n return;\n }\n\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n this._barMark.setMarkConfig({\n clip: true,\n clipPath: () => {\n const rectPaths: any[] = [];\n this._forEachStackGroup(node => {\n let min = Infinity;\n let max = -Infinity;\n let hasPercent = false;\n let minPercent = Infinity;\n let maxPercent = -Infinity;\n node.values.forEach(datum => {\n const start = datum[STACK_FIELD_START];\n const end = datum[STACK_FIELD_END];\n const startPercent = datum[STACK_FIELD_START_PERCENT];\n const endPercent = datum[STACK_FIELD_END_PERCENT];\n min = Math.min(min, start, end);\n max = Math.max(max, start, end);\n if (isValid(startPercent) && isValid(endPercent)) {\n hasPercent = true;\n minPercent = Math.min(minPercent, startPercent, endPercent);\n maxPercent = Math.max(maxPercent, startPercent, endPercent);\n }\n });\n const mockDatum = {\n ...node.values[0],\n [STACK_FIELD_START]: min,\n [STACK_FIELD_END]: max,\n ...(hasPercent\n ? {\n [STACK_FIELD_START_PERCENT]: minPercent,\n [STACK_FIELD_END_PERCENT]: maxPercent\n }\n : undefined)\n };\n const rectAttr =\n this.direction === Direction.horizontal\n ? {\n x: this._getBarXStart(mockDatum, xScale),\n x1: this._getBarXEnd(mockDatum, xScale),\n y: this._getPosition(this.direction, mockDatum),\n height: this._getBarWidth(this._yAxisHelper)\n }\n : {\n y: this._getBarYStart(mockDatum, yScale),\n y1: this._getBarYEnd(mockDatum, yScale),\n x: this._getPosition(this.direction, mockDatum),\n width: this._getBarWidth(this._xAxisHelper)\n };\n rectPaths.push(\n createRect({\n ...rectAttr,\n cornerRadius: isFunction(this._spec.stackCornerRadius)\n ? this._spec.stackCornerRadius(rectAttr, mockDatum, this._markAttributeContext)\n : this._spec.stackCornerRadius,\n fill: true\n })\n );\n });\n return rectPaths;\n }\n });\n }\n\n initLinearRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n\n if (this.direction === Direction.horizontal) {\n const yChannels = isValid(this._fieldY2)\n ? {\n y: (datum: Datum) => valueInScaleRange(this._dataToPosY(datum), yScale, true),\n y1: (datum: Datum) => valueInScaleRange(this._dataToPosY1(datum), yScale, true)\n }\n : {\n y: (datum: Datum) =>\n valueInScaleRange(this._dataToPosY(datum) - this._getBarWidth(this._yAxisHelper) / 2, yScale, true),\n height: (datum: Datum) => this._getBarWidth(this._yAxisHelper)\n };\n\n this.setMarkStyle(\n this._barMark,\n {\n x: (datum: Datum) => this._getBarXStart(datum, xScale, true),\n x1: (datum: Datum) => this._getBarXEnd(datum, xScale, true),\n ...yChannels\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: () => this._getBarBackgroundXStart(xScale),\n x1: () => this._getBarBackgroundXEnd(xScale),\n ...yChannels\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const xChannels = isValid(this._fieldX2)\n ? {\n x: (datum: Datum) => valueInScaleRange(this._dataToPosX(datum), xScale, true),\n x1: (datum: Datum) => valueInScaleRange(this._dataToPosX1(datum), xScale, true)\n }\n : {\n x: (datum: Datum) =>\n valueInScaleRange(this._dataToPosX(datum) - this._getBarWidth(this._xAxisHelper) / 2, xScale, true),\n width: (datum: Datum) => this._getBarWidth(this._xAxisHelper)\n };\n this.setMarkStyle(\n this._barMark,\n {\n ...xChannels,\n y: datum => this._getBarYStart(datum, yScale),\n y1: datum => this._getBarYEnd(datum, yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n ...xChannels,\n y: () => this._getBarBackgroundYStart(yScale),\n y1: () => this._getBarBackgroundYEnd(yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected _getBarBackgroundXStart = (scale: IBaseScale) => {\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n };\n\n protected _getBarBackgroundXEnd = (scale: IBaseScale) => {\n const range = scale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n };\n\n protected _getBarBackgroundYStart = (scale: IBaseScale) => {\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n return min;\n };\n\n protected _getBarBackgroundYEnd = (scale: IBaseScale) => {\n const range = scale.range();\n const max = Math.max(range[0], range[range.length - 1]);\n return max;\n };\n\n protected _initBandBarBackgroundMarkStyle() {\n if (!this._barBackgroundMark) {\n return;\n }\n\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n const spec = this._spec.barBackground ?? {};\n const scaleDepth = isNil(spec.fieldLevel) ? undefined : spec.fieldLevel + 1;\n\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: () => this._getBarBackgroundXStart(xScale),\n x1: () => this._getBarBackgroundXEnd(xScale),\n y: datum => this._getPosition(this.direction, datum, scaleDepth, SeriesMarkNameEnum.barBackground),\n height: () => this._getBarWidth(this._yAxisHelper, scaleDepth),\n width: () => undefined,\n y1: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._barBackgroundMark,\n {\n x: datum => this._getPosition(this.direction, datum, scaleDepth, SeriesMarkNameEnum.barBackground),\n y: () => this._getBarBackgroundYStart(yScale),\n y1: () => this._getBarBackgroundYEnd(yScale),\n width: () => this._getBarWidth(this._xAxisHelper, scaleDepth),\n x1: () => undefined,\n height: () => undefined\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const barAnimationParams: IBarAnimationParams = {\n yField: this._fieldY[0],\n xField: this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('bar')?.(barAnimationParams, appearPreset),\n userAnimationConfig(this._barMarkName, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected _getBarWidth(axisHelper: IAxisHelper, scaleDepth?: number) {\n const depthFromSpec = this._groups ? this._groups.fields.length : 1;\n const depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth);\n\n const bandWidth = axisHelper.getBandwidth?.(depth - 1) ?? DefaultBandWidth;\n const hasBarWidth = isValid(this._spec.barWidth) && depth === depthFromSpec;\n\n const hasBarMinWidth = isValid(this._spec.barMinWidth);\n const hasBarMaxWidth = isValid(this._spec.barMaxWidth);\n let width = bandWidth;\n if (hasBarWidth) {\n width = getActualNumValue(this._spec.barWidth, bandWidth);\n }\n if (hasBarMinWidth) {\n width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth));\n }\n if (hasBarMaxWidth) {\n width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth));\n }\n return width;\n }\n\n protected _getPosition(direction: DirectionType, datum: Datum, scaleDepth?: number, mark?: SeriesMarkNameEnum) {\n let axisHelper;\n let sizeAttribute;\n let dataToPosition;\n if (direction === Direction.horizontal) {\n axisHelper = this.getYAxisHelper();\n sizeAttribute = 'height';\n dataToPosition =\n mark === SeriesMarkNameEnum.barBackground\n ? this.dataToBarBackgroundPositionY.bind(this)\n : this.dataToPositionY.bind(this);\n } else {\n axisHelper = this.getXAxisHelper();\n sizeAttribute = 'width';\n dataToPosition =\n mark === SeriesMarkNameEnum.barBackground\n ? this.dataToBarBackgroundPositionX.bind(this)\n : this.dataToPositionX.bind(this);\n }\n const scale = axisHelper.getScale(0);\n\n const depthFromSpec = this._groups ? this._groups.fields.length : 1;\n const depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth);\n\n const bandWidth = axisHelper.getBandwidth?.(depth - 1) ?? DefaultBandWidth;\n const size = depth === depthFromSpec ? (this._barMark.getAttribute(sizeAttribute, datum) as number) : bandWidth;\n\n if (depth > 1 && isValid(this._spec.barGapInGroup)) {\n // 自里向外计算,沿着第一层分组的中心点进行位置调整\n const groupFields = this._groups.fields;\n const barInGroup = array(this._spec.barGapInGroup);\n let totalWidth: number = 0;\n let offSet: number = 0;\n\n for (let index = groupFields.length - 1; index >= 1; index--) {\n const groupField = groupFields[index];\n // const groupValues = this.getViewDataStatistics()?.latestData?.[groupField]?.values ?? [];\n const groupValues = axisHelper.getScale(index)?.domain() ?? [];\n const groupCount = groupValues.length;\n const gap = getActualNumValue(barInGroup[index - 1] ?? last(barInGroup), bandWidth);\n const i = groupValues.indexOf(datum[groupField]);\n if (index === groupFields.length - 1) {\n totalWidth += groupCount * size + (groupCount - 1) * gap;\n offSet += i * (size + gap);\n } else {\n offSet += i * (totalWidth + gap);\n totalWidth += totalWidth + (groupCount - 1) * gap;\n }\n }\n\n const center = scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2;\n return center - totalWidth / 2 + offSet;\n }\n\n const continuous = isContinuous(scale.type || 'band');\n const pos = dataToPosition(datum, depth);\n\n return pos + (bandWidth - size) * 0.5 + (continuous ? -bandWidth / 2 : 0);\n }\n\n protected _barBackgroundPositionXEncoder?: (datum: Datum) => number;\n protected _getBarBackgroundPositionXEncoder = () => this._barBackgroundPositionXEncoder?.bind(this);\n protected _setBarBackgroundPositionXEncoder = (encoder: (datum: Datum) => number) => {\n this._barBackgroundPositionXEncoder = encoder.bind(this);\n };\n\n dataToBarBackgroundPositionX(datum: Datum, scaleDepth?: number): number {\n return this._dataToPosition(\n datum,\n this._xAxisHelper,\n this.fieldX,\n scaleDepth,\n this._getBarBackgroundPositionXEncoder,\n this._setBarBackgroundPositionXEncoder\n );\n }\n\n protected _barBackgroundPositionYEncoder?: (datum: Datum) => number;\n protected _getBarBackgroundPositionYEncoder = () => this._barBackgroundPositionYEncoder?.bind(this);\n protected _setBarBackgroundPositionYEncoder = (encoder: (datum: Datum) => number) => {\n this._barBackgroundPositionYEncoder = encoder.bind(this);\n };\n\n dataToBarBackgroundPositionY(datum: Datum, scaleDepth?: number): number {\n return this._dataToPosition(\n datum,\n this._yAxisHelper,\n this.fieldY,\n scaleDepth,\n this._getBarBackgroundPositionYEncoder,\n this._setBarBackgroundPositionYEncoder\n );\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n const region = this.getRegion();\n // @ts-ignore\n region._bar_series_position_calculated = false;\n if (this._spec.sampling) {\n this.compile();\n }\n }\n\n compile(): void {\n super.compile();\n\n if (this._spec.sampling) {\n const { width, height } = this._region.getLayoutRect();\n const samplingTrans = [];\n const fieldsY = this._fieldY;\n const fieldsX = this._fieldX;\n\n samplingTrans.push({\n type: 'sampling',\n size: this._direction === Direction.horizontal ? height : width,\n factor: this._spec.samplingFactor,\n yfield: this._direction === Direction.horizontal ? fieldsX[0] : fieldsY[0],\n groupBy: this._seriesField,\n mode: this._spec.sampling\n });\n this._data.getProduct().transform(samplingTrans);\n }\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._barMark];\n }\n\n compileData() {\n super.compileData();\n this._barBackgroundViewData?.compile();\n }\n\n fillData() {\n super.fillData();\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._barBackgroundViewData?.getDataView()?.reRunAllTransform();\n this._barBackgroundViewData?.updateData();\n }\n\n release() {\n super.release();\n this._barBackgroundViewData?.release();\n this._barBackgroundViewData = null;\n }\n}\n\nexport const registerBarSeries = () => {\n registerSampleTransform();\n registerRectMark();\n registerBarAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(BarSeries.type, BarSeries);\n};\n","import { isObject } from '@visactor/vutils';\nimport type { IBarSeriesSpec } from '../../series';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBarChartSpec } from './interface';\nimport type { ICartesianBandAxisSpec } from '../../component';\n\nexport class BarChartSpecTransformer extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barMinHeight',\n 'sampling',\n 'samplingFactor',\n 'barBackground',\n 'stackCornerRadius'\n ]) as IBarSeriesSpec;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _transformAxisSpec(spec: T) {\n super._transformAxisSpec(spec);\n if (!spec.axes) {\n return;\n }\n const isHorizontal = spec.series.some(series => series.direction === 'horizontal');\n const bandAxis: ICartesianBandAxisSpec =\n spec.axes.find(axis => axis.type === 'band') ??\n spec.axes.find(axis => (isHorizontal ? ['left', 'right'] : ['top', 'bottom']).includes(axis.orient));\n if (bandAxis && !bandAxis.bandSize && !bandAxis.maxBandSize && !bandAxis.minBandSize) {\n // 将 autoBandSize 应用在轴上\n if (!!spec.autoBandSize) {\n const extend = isObject(spec.autoBandSize) ? spec.autoBandSize.extend ?? 0 : 0;\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = spec.series.find(\n series => series.type === 'bar'\n ) as IBarSeriesSpec;\n this._applyAxisBandSize(bandAxis, extend, { barMaxWidth, barMinWidth, barWidth, barGapInGroup });\n }\n }\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBarChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BarChartSpecTransformer } from './bar-transformer';\nimport { BaseChart } from '../base';\nimport { mixin } from '@visactor/vutils';\nimport { StackChartMixin } from '../stack';\n\nexport class BarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.bar;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly transformerConstructor = BarChartSpecTransformer;\n readonly transformerConstructor = BarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar;\n readonly seriesType: string = SeriesTypeEnum.bar;\n}\n\nmixin(BarChart, StackChartMixin);\n\nexport const registerBarChart = () => {\n registerBarSeries();\n Factory.registerChart(BarChart.type, BarChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IRect3dMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRect3dMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRect3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarRectAnimation } from '../animation/config';\n\nexport class Rect3dMark extends BaseMark implements IRect3dMark {\n static readonly type = MarkTypeEnum.rect3d;\n readonly type = Rect3dMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n length: 3\n };\n return defaultStyle;\n }\n}\n\nexport const registerRect3dMark = () => {\n Factory.registerMark(Rect3dMark.type, Rect3dMark);\n registerRect3dGraphic();\n registerVGrammarRectAnimation();\n};\n","import type { IBar3dSeriesSpec, IBar3dSeriesTheme } from './interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { BarSeriesSpecTransformer } from './bar-transformer';\n\nexport class Bar3dSeriesSpecTransformer<\n T extends IBar3dSeriesSpec = IBar3dSeriesSpec,\n K extends IBar3dSeriesTheme = IBar3dSeriesTheme\n // @ts-ignore\n> extends BarSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar3d);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../interface/type';\nimport { BarSeries } from './bar';\nimport { registerRect3dMark } from '../../mark/rect-3d';\nimport type { IBar3dSeriesSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { bar3dSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerBar3dAnimation } from './animation';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { Bar3dSeriesSpecTransformer } from './bar-3d-transformer';\n\nexport class Bar3dSeries extends BarSeries> {\n static readonly type: string = SeriesTypeEnum.bar3d;\n type = SeriesTypeEnum.bar3d;\n\n static readonly mark: SeriesMarkMap = bar3dSeriesMark;\n\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n\n static readonly transformerConstructor = Bar3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Bar3dSeriesSpecTransformer as any;\n}\n\nexport const registerBar3dSeries = () => {\n registerBar3dAnimation();\n registerRect3dMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(Bar3dSeries.type, Bar3dSeries);\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport type { IBar3dChartSpec } from '../interface';\nimport { BarChartSpecTransformer } from '../bar-transformer';\n\nexport class Bar3dChartSpecTransformer extends BarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n seriesSpec.barWidth = spec.barWidth;\n seriesSpec.barMaxWidth = spec.barMaxWidth;\n seriesSpec.barMinWidth = spec.barMinWidth;\n seriesSpec.barGapInGroup = spec.barGapInGroup;\n\n return seriesSpec;\n }\n}\n","import {\n registerDirectionalLight,\n registerOrthoCamera,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin,\n registerViewTransform3dPlugin\n} from '@visactor/vrender-core';\n\nimport {\n registerViewMorphAPI,\n registerAnimate as registerAnimateAPI,\n registerDragPlugin,\n registerGesturePlugin\n} from '@visactor/vgrammar-core';\nimport { registerVGrammarCommonAnimation } from '../animation/config';\n\nexport const register3DPlugin = () => {\n registerDirectionalLight();\n registerOrthoCamera();\n registerViewTransform3dPlugin();\n};\n\nexport const registerAnimate = () => {\n registerAnimateAPI();\n registerVGrammarCommonAnimation();\n};\n\nexport { registerReactAttributePlugin, registerHtmlAttributePlugin, registerDragPlugin, registerGesturePlugin };\nexport const registerMorph = registerViewMorphAPI;\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IBar3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { BarChart } from '../bar';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { Bar3dChartSpecTransformer } from './bar-3d-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Bar3dChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.bar3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly transformerConstructor = Bar3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Bar3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.bar3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\n\nexport const registerBar3dChart = () => {\n register3DPlugin();\n registerBar3dSeries();\n Factory.registerChart(Bar3dChart.type, Bar3dChart);\n};\n","/**\n * Checks if `value` is classified as a legal string number\n *\n * @param {*} value The string value to check.\n * @returns {boolean} Returns `true` if `value` is a legal string number, else `false`.\n * @example\n *\n * isNumeric(1)\n * // => false\n *\n * isNumeric('2.0')\n * // => true\n *\n * isNumeric('3a')\n * // => false\n *\n * isNumeric('4.a')\n * // => false\n *\n * isNumeric(Infinity)\n * // => false\n *\n * isNumeric('01')\n * // => true\n */\nconst isNumeric = (value: string): boolean => {\n if (typeof value !== 'string') {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n};\n\nexport default isNumeric;\n","import { ScaleEnum } from '@visactor/vscale';\n\nexport const SCATTER_DEFAULT_SIZE = 10;\nexport const SCATTER_DEFAULT_RANGE_SIZE = [10, 20];\nexport const SCATTER_DEFAULT_SIZE_SCALE_TYPE = ScaleEnum.Linear;\n\nexport const SCATTER_DEFAULT_SHAPE = 'circle';\nexport const SCATTER_DEFAULT_SHAPE_SCALE_TYPE = ScaleEnum.Ordinal;\nexport const SCATTER_DEFAULT_RANGE_SHAPE = ['circle', 'square', 'triangle', 'diamond', 'star'];\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\nimport type { IScatterAnimationParams, ScatterAppearPreset } from './interface';\n\nexport const scatterPresetAnimation = (\n _params: IScatterAnimationParams, // 此处仅为保持结构统一\n preset: ScatterAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerScatterAnimation = () => {\n Factory.registerAnimation('scatter', (params: IScatterAnimationParams, preset: ScatterAppearPreset) => ({\n appear: scatterPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IScatterSeriesSpec, IScatterSeriesTheme } from './interface';\n\nexport class ScatterSeriesSpecTransformer<\n T extends IScatterSeriesSpec = IScatterSeriesSpec,\n K extends IScatterSeriesTheme = IScatterSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.point);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { PREFIX } from '../../constant/base';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum, ScaleType, VisualType, IScatterInvalidType } from '../../typings';\nimport type { IScatterSeriesSpec, ScatterAppearPreset } from './interface';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { isNil, isValid, isObject, isFunction, isString, isArray, isNumber, isNumeric } from '@visactor/vutils';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport {\n SCATTER_DEFAULT_RANGE_SHAPE,\n SCATTER_DEFAULT_RANGE_SIZE,\n SCATTER_DEFAULT_SHAPE,\n SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n SCATTER_DEFAULT_SIZE,\n SCATTER_DEFAULT_SIZE_SCALE_TYPE\n} from '../../constant/scatter';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerScatterAnimation } from './animation';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { scatterSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { ILabelMark, IMark, ISymbolMark } from '../../mark/interface';\nimport { ScatterSeriesSpecTransformer } from './scatter-transformer';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport class ScatterSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.scatter;\n type = SeriesTypeEnum.scatter;\n\n static readonly mark: SeriesMarkMap = scatterSeriesMark;\n static readonly transformerConstructor = ScatterSeriesSpecTransformer as any;\n readonly transformerConstructor = ScatterSeriesSpecTransformer;\n\n private _symbolMark: ISymbolMark;\n private _labelMark: ILabelMark;\n\n private _size: IScatterSeriesSpec['size'];\n private _sizeField: string;\n private _shape: IScatterSeriesSpec['shape'];\n private _shapeField: string;\n\n protected _invalidType: IScatterInvalidType = 'zero';\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // size\n this._size = this._spec.size;\n this._sizeField = this._spec.sizeField;\n // shape\n this._shape = this._spec.shape;\n this._shapeField = this._spec.shapeField;\n }\n\n private _getSeriesAttribute(\n field: string,\n spec: VisualType,\n {\n defaultScaleType,\n defaultRange\n }: {\n defaultScaleType: ScaleType;\n defaultRange: T[];\n },\n key: string\n ): VisualType {\n // 若sizeSpec是函数\n if (isFunction(spec)) {\n return spec;\n }\n\n if (isArray(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n\n if (defaultScaleType !== 'ordinal' && (spec as any[]).length > 2) {\n this._option?.onError(`${key} length is invalid, specify up to 2 ${key}s.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n this._option.globalScale.registerModelScale({\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: spec\n });\n return {\n scale: scaleName,\n field\n };\n }\n\n // 若sizeSpec是对象\n if (isObject(spec)) {\n if (isNil(field)) {\n this._option?.onError(`${key}Field is required.`);\n return spec;\n }\n const scaleName = `${PREFIX}_series_scatter_${this.id}_scale_${key}`;\n const visualSpec = {\n id: scaleName,\n type: defaultScaleType,\n domain: [\n {\n dataId: this._rawData.name,\n fields: [field]\n }\n ],\n range: defaultRange,\n ...spec\n };\n\n this._option.globalScale.registerModelScale(visualSpec);\n return {\n scale: visualSpec.id,\n field\n };\n }\n\n // 其余情况报错\n this._option?.onError(`${key} attribute is invalid.`);\n return spec;\n }\n\n /**\n * 计算sizeScale\n * @param field 数据对应字段\n * @param sizeSpec size配置\n */\n private getSizeAttribute(field: string, sizeSpec: IScatterSeriesSpec['size']): VisualType {\n // 若sizeSpec不存在\n if (isNil(sizeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SIZE;\n }\n\n // 若sizeSpec是数值\n if (isNumber(sizeSpec)) {\n return sizeSpec;\n }\n\n // 若sizeSpec是字符串中的数值\n if (isString(sizeSpec) && isNumeric(sizeSpec)) {\n return parseFloat(sizeSpec);\n }\n\n return this._getSeriesAttribute(\n field,\n sizeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SIZE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SIZE\n },\n 'size'\n );\n }\n\n /**\n * 计算shapeScale\n * @param field 数据对应字段\n * @param shapeSpec shape配置\n */\n private getShapeAttribute(field: string, shapeSpec: IScatterSeriesSpec['shape']): VisualType {\n // 若shapeSpec不存在\n if (isNil(shapeSpec)) {\n // Tips: spec会被theme配置merge, 所以Spec没配置, 不一定会触发这里.\n return SCATTER_DEFAULT_SHAPE;\n }\n\n // 若shapeSpec是字符串\n if (isString(shapeSpec)) {\n return shapeSpec;\n }\n\n return this._getSeriesAttribute(\n field,\n shapeSpec as VisualType,\n {\n defaultScaleType: SCATTER_DEFAULT_SHAPE_SCALE_TYPE,\n defaultRange: SCATTER_DEFAULT_RANGE_SHAPE\n },\n 'shape'\n );\n }\n\n /**\n * 初始化Mark\n */\n initMark(): void {\n this._symbolMark = this._createMark(\n ScatterSeries.mark.point,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.point?.stateSort\n },\n {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold,\n morph: shouldMarkDoMorph(this._spec, ScatterSeries.mark.point.name),\n morphElementKey: this.getDimensionField()[0],\n setCustomizedShape: this._spec.point?.customShape\n }\n ) as ISymbolMark;\n }\n\n /**\n * 初始化散点图各类Mark的Style\n */\n initMarkStyle(): void {\n this.initSymbolMarkStyle();\n }\n\n /**\n * 初始化动画\n */\n initAnimation(): void {\n const animationParams = getGroupAnimationParams(this);\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._symbolMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scatter')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.point, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n /**\n * 初始化SymbolMark\n */\n private initSymbolMarkStyle(): void {\n const symbolMark = this._symbolMark;\n if (!symbolMark) {\n return;\n }\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(symbolMark, {\n visible: this._getInvalidDefined.bind(this)\n });\n }\n\n this.setMarkStyle(\n symbolMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,\n fill: this.getColorAttribute(),\n size: isNumber(this._size) || isFunction(this._size) ? this._size : SCATTER_DEFAULT_SIZE,\n symbolType: isString(this._shape) || isFunction(this._shape) ? this._shape : SCATTER_DEFAULT_SHAPE\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n if (isValid(this._sizeField) || isValid(this._size)) {\n this.setMarkStyle(\n symbolMark,\n {\n size: this.getSizeAttribute(this._sizeField, this._size) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n if (isValid(this._shapeField) || isValid(this._shape)) {\n this.setMarkStyle(\n symbolMark,\n {\n symbolType: this.getShapeAttribute(this._shapeField, this._shape) as VisualType\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark);\n }\n\n viewDataStatisticsUpdate(d: DataView) {\n super.viewDataStatisticsUpdate(d);\n const fields = [this.getDimensionField()[0], this.getStackValueField()];\n const allValid = fields.every(field => field && this.getViewDataStatistics()?.latestData?.[field]?.allValid);\n if (this._invalidType === 'zero' || allValid) {\n this.setMarkStyle(this._symbolMark, { visible: true }, 'normal', AttributeLevel.Series);\n } else {\n this.setMarkStyle(\n this._symbolMark,\n { visible: this._getInvalidDefined.bind(this) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n // if has produce, reCompile encode to set attribute to product\n if (this._symbolMark.getProduct()) {\n this._symbolMark.compileEncode();\n }\n }\n\n /**\n * 初始化LabelMark\n */\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n labelMark,\n {\n visible: this._getInvalidDefined.bind(this)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n /**\n * 处理缩放\n */\n handleZoom(e: any) {\n this.getMarksWithoutRoot().forEach(mark => {\n const vGrammarMark = mark.getProduct();\n\n if (!vGrammarMark || !vGrammarMark.elements || !vGrammarMark.elements.length) {\n return;\n }\n const elements = vGrammarMark.elements;\n\n elements.forEach((el: IElement, i: number) => {\n const graphicItem = el.getGraphicItem();\n const datum = el.getDatum();\n const newPosition = this.dataToPosition(datum);\n if (newPosition && graphicItem) {\n graphicItem.translateTo(newPosition.x, newPosition.y);\n }\n });\n });\n\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n handlePan(e: any) {\n // TODO 现在处理好像一模一样\n this.handleZoom(e);\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._symbolMark];\n }\n}\n\nexport const registerScatterSeries = () => {\n registerSymbolMark();\n registerScatterAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(ScatterSeries.type, ScatterSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IScatterChartSpec } from './interface';\n\nexport class ScatterChartSpecTransformer<\n T extends IScatterChartSpec = IScatterChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: IScatterChartSpec): any {\n return super._getDefaultSeriesSpec(spec, ['point', 'size', 'shape', 'shapeField', 'sizeField']);\n }\n}\n","import { registerScatterSeries } from '../../series/scatter/scatter';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IScatterChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { ScatterChartSpecTransformer } from './scatter-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class ScatterChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.scatter;\n static readonly seriesType: string = SeriesTypeEnum.scatter;\n static readonly transformerConstructor = ScatterChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = ScatterChartSpecTransformer;\n readonly type: string = ChartTypeEnum.scatter;\n readonly seriesType: string = SeriesTypeEnum.scatter;\n}\n\nmixin(ScatterChart, StackChartMixin);\n\nexport const registerScatterChart = () => {\n registerScatterSeries();\n Factory.registerChart(ScatterChart.type, ScatterChart);\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","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 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 {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","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return 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 sum.reset();\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 < -epsilon) ^ (winding & 1);\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","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\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","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(6),\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 = 6 * 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","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 return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : 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 return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : 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","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","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 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 = (alpha ? scaleTranslateRotate : scaleTranslate)(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 {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 {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 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 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","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-projection/src/projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport {\n geoAlbers,\n geoAlbersUsa,\n geoAzimuthalEqualArea,\n geoAzimuthalEquidistant,\n geoConicConformal,\n geoConicEqualArea,\n geoConicEquidistant,\n geoEqualEarth,\n geoEquirectangular,\n geoGnomonic,\n geoIdentity,\n geoMercator,\n geoNaturalEarth1,\n geoOrthographic,\n geoStereographic,\n geoTransverseMercator,\n geoPath\n} from 'd3-geo';\nimport { error } from '@visactor/vgrammar-util';\nimport { isString } from '@visactor/vutils';\n\nconst defaultPath = geoPath();\n\nexport function getProjectionPath(proj: any) {\n return (proj && proj.path) || defaultPath;\n}\n\nconst projections = {\n // base d3-geo projection types\n};\n\nexport const projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'parallels',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type: string, constructor: any) {\n return function projectionGenerator() {\n const p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy =\n p.copy ||\n function () {\n const c = projectionGenerator();\n projectionProperties.forEach(prop => {\n if (p[prop]) {\n c[prop](p[prop]());\n }\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nexport function projection(type: string, proj?: () => any) {\n if (!type || !isString(type)) {\n error('Projection type must be a name string.');\n }\n const projectionType = type.toLowerCase();\n if (arguments.length > 1) {\n projections[projectionType] = create(projectionType, proj);\n }\n return projections[projectionType] || null;\n}\n\nconst builtInProjections = {\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nObject.keys(builtInProjections).forEach((projectionType: string) => {\n projection(projectionType, builtInProjections[projectionType]);\n});\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-geo/src/Projection.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { array, isFunction, isNil } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport { projection, projectionProperties } from './projections';\nimport type {\n IView,\n IGrammarBase,\n Nil,\n FeatureCollectionData,\n FeatureData,\n IProjection,\n ProjectionSpec\n} from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarBase, parseFunctionType, invokeFunctionType } from '@visactor/vgrammar-core';\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\n\nfunction featurize(f: FeatureCollectionData | FeatureData) {\n return f.type === FeatureCollection\n ? f.features\n : array(f)\n .filter(d => !isNil(d))\n .map(d => (d.type === Feature ? d : { type: Feature, geometry: d }));\n}\n\nexport function collectGeoJSON(data: any) {\n const arrayData = array(data);\n return arrayData.length === 1\n ? arrayData[0]\n : {\n type: FeatureCollection,\n features: arrayData.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction create(type: string) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) {\n error('Unrecognized projection type: ' + type);\n }\n return constructor();\n}\n\nfunction set(proj: any, key: string, value: any) {\n if (isFunction(proj[key])) {\n proj[key](value);\n }\n}\n\nconst projectionOptions = projectionProperties.concat(['pointRadius', 'fit', 'extent', 'size']);\n\nexport function parseProjection(spec: ProjectionSpec, view: IView) {\n let refs: IGrammarBase[] = [];\n\n if (!spec) {\n return refs;\n }\n\n Object.keys(spec).forEach(key => {\n if (projectionOptions.includes(key)) {\n refs = refs.concat(parseFunctionType(spec[key], view));\n }\n });\n\n return refs;\n}\n\nexport class Projection extends GrammarBase implements IProjection {\n readonly grammarType = 'projection';\n\n private projection: any;\n\n constructor(view: IView) {\n super(view);\n }\n\n parse(spec: ProjectionSpec) {\n super.parse(spec);\n this.pointRadius(spec.pointRadius);\n this.size(spec.size);\n this.extent(spec.extent);\n this.fit(spec.fit);\n this.configure(spec);\n\n this.commit();\n\n return this;\n }\n\n pointRadius(pointRadius: ProjectionSpec['pointRadius']) {\n if (!isNil(this.spec.pointRadius)) {\n this.detach(parseFunctionType(this.spec.pointRadius, this.view));\n }\n this.spec.pointRadius = pointRadius;\n this.attach(parseFunctionType(pointRadius, this.view));\n this.commit();\n return this;\n }\n\n size(data: ProjectionSpec['size']) {\n if (!isNil(this.spec.size)) {\n this.detach(parseFunctionType(this.spec.size, this.view));\n }\n this.spec.size = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n extent(data: ProjectionSpec['extent']) {\n if (!isNil(this.spec.extent)) {\n this.detach(parseFunctionType(this.spec.extent, this.view));\n }\n this.spec.extent = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n fit(data: ProjectionSpec['fit']) {\n if (!isNil(this.spec.fit)) {\n this.detach(parseFunctionType(this.spec.fit, this.view));\n }\n this.spec.fit = data;\n this.attach(parseFunctionType(data, this.view));\n this.commit();\n return this;\n }\n\n configure(config: Omit | Nil) {\n this.detach(parseProjection(this.spec, this.view));\n\n if (isNil(config)) {\n this.spec = {\n type: this.spec.type,\n fit: this.spec.fit,\n extent: this.spec.extent,\n size: this.spec.size,\n pointRadius: this.spec.pointRadius\n };\n } else {\n Object.assign(this.spec, config);\n this.attach(parseProjection(this.spec, this.view));\n }\n this.commit();\n return this;\n }\n\n evaluate(upstream: any, parameters: any) {\n if (!this.projection || this.projection.type !== this.spec.type) {\n this.projection = create(this.spec.type);\n this.projection.type = this.spec.type;\n }\n projectionProperties.forEach(prop => {\n if (!isNil(this.spec[prop])) {\n set(this.projection, prop, invokeFunctionType(this.spec[prop], parameters, projection));\n }\n });\n\n if (!isNil(this.spec.pointRadius)) {\n this.projection.path.pointRadius(invokeFunctionType(this.spec.pointRadius, parameters, projection));\n }\n if (!isNil(this.spec.fit) && (!isNil(this.spec.extent) || !isNil(this.spec.size))) {\n const fit = invokeFunctionType(this.spec.fit, parameters, projection);\n const data = collectGeoJSON(fit);\n\n if (this.spec.extent) {\n this.projection.fitExtent(invokeFunctionType(this.spec.extent, parameters, projection), data);\n } else if (this.spec.size) {\n this.projection.fitSize(invokeFunctionType(this.spec.size, parameters, projection), data);\n }\n }\n\n return this.projection;\n }\n\n output() {\n return this.projection;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { isFunction, isNil, isValid } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\n\nexport interface ILookUpOpt {\n from: () => object[];\n key: string;\n // 暂时不支持Multi-field lookup\n fields: string;\n values?: string[];\n as?: string[];\n default?: any;\n set?: (A: Datum, B: Datum) => void;\n}\n\nexport const lookup = (data: Array, opt: ILookUpOpt) => {\n if (!opt.from || !opt.from()) {\n return data;\n }\n\n const fields = opt.fields;\n const key = opt.key;\n const values = opt.values;\n const defaultValue = opt.default;\n const as = opt.as || [fields];\n const index = opt.from().reduce(function (map: Map, obj) {\n if (obj[fields]) {\n map.set(obj[fields], obj);\n }\n return map;\n }, new Map());\n\n let set: (d: any) => void;\n if (isFunction(opt.set)) {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n opt.set(d, v);\n };\n } else if (values) {\n const m = values.length;\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n if (isNil(v)) {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = defaultValue;\n }\n } else {\n for (let i = 0; i < m; ++i) {\n d[as[i]] = v[values[i]];\n }\n }\n };\n } else {\n set = function (d: any) {\n const v = (index as Map).get(d[key]);\n d[as[0]] = isValid(v) ? v : defaultValue;\n };\n }\n\n if (data.length === 0) {\n return [];\n }\n return data.map(d => {\n set(d);\n return d;\n });\n};\n","import type { IGeoCoordinateHelper } from '../../component/geo/interface';\nimport type { IPoint } from '../../typings';\nimport type { IGeoSeries } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { BaseSeries } from '../base/base-series';\nimport { isNil } from '@visactor/vutils';\nimport type { SeriesData } from '../base/series-data';\nimport type { DataView } from '@visactor/vdataset';\nimport { PREFIX } from '../../constant/base';\nimport type { IGeoSeriesSpec } from './interface';\nimport type { IMark } from '../../mark/interface';\n\nexport abstract class GeoSeries extends BaseSeries implements IGeoSeries {\n type = SeriesTypeEnum.geo;\n readonly coordinate = 'geo';\n\n protected _mapViewData: SeriesData;\n getMapViewData() {\n return this._mapViewData?.getDataView();\n }\n\n protected _mapViewDataStatistics!: DataView;\n\n _nameField!: string;\n get nameField() {\n return this._nameField;\n }\n set nameField(f: string) {\n this._nameField = f;\n }\n\n _valueField!: string;\n get valueField() {\n return this._valueField;\n }\n set valueField(f: string) {\n this._valueField = f;\n }\n\n protected _nameProperty: string = 'name';\n getNameProperty() {\n return this._nameProperty;\n }\n\n protected _centroidProperty?: string;\n getCentroidProperty() {\n return this._centroidProperty;\n }\n\n _coordinateHelper!: IGeoCoordinateHelper;\n getCoordinateHelper() {\n return this._coordinateHelper;\n }\n setCoordinateHelper(h: IGeoCoordinateHelper) {\n this._coordinateHelper = h;\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n // position\n dataToPosition(datum: any, checkInViewData?: boolean): IPoint | null {\n let result: IPoint | null = null;\n\n if (!datum) {\n return result;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return result;\n }\n const { dataToPosition, latitudeField, longitudeField } = this._coordinateHelper;\n\n // 从地理数据映射中获取\n result = this.nameToPosition(datum);\n\n // 从用户传入的经纬度获取\n if (result === null) {\n const lonValue = longitudeField ? datum?.[longitudeField] : Number.NaN;\n const latValue = latitudeField ? datum?.[latitudeField] : Number.NaN;\n result = dataToPosition?.([lonValue, latValue]) ?? null;\n }\n\n return result;\n }\n\n protected nameToPosition(datum: any): IPoint | null {\n const name = this.getDatumName(datum);\n if (isNil(name)) {\n return null;\n }\n return this.nameValueToPosition(name);\n }\n\n nameValueToPosition(name: string): IPoint | null {\n const mapData = this.getMapViewData()?.latestData?.filter((data: any) => this.getDatumName(data) === name)[0];\n if (isNil(mapData)) {\n return null;\n }\n\n const { dataToPosition } = this._coordinateHelper;\n const center = this.getDatumCenter(mapData);\n\n const pos = dataToPosition?.(center);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return null;\n }\n return pos;\n }\n\n abstract getDatumCenter(datum: any): [number, number];\n abstract getDatumName(datum: any): string;\n\n dataToLatitude(latValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(latValue);\n }\n\n dataToLongitude(lonValue: number) {\n if (!this._coordinateHelper) {\n return Number.NaN;\n }\n const { dataToLatitude } = this._coordinateHelper;\n return dataToLatitude(lonValue);\n }\n\n valueToPosition(lonValue: number, latValue: number): IPoint {\n return {\n x: this.dataToLongitude(lonValue),\n y: this.dataToLatitude(latValue)\n };\n }\n\n positionToData(p: IPoint) {\n // TODO\n }\n latitudeToData(lat: number) {\n // TODO\n }\n longitudeToData(lon: number) {\n // TODO\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionZ(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n release() {\n super.release();\n this._mapViewData.release();\n this._mapViewData = this._mapViewDataStatistics = null;\n }\n\n // TODO: geo 不支持 stack,这些方法没有意义\n getStackGroupFields() {\n return [this._nameField];\n }\n\n getStackValueField() {\n // TODO: hack\n return this._spec.valueField;\n }\n\n compileData() {\n this._mapViewData?.compile();\n }\n\n protected initStatisticalData(): void {\n super.initStatisticalData();\n if (this._mapViewData) {\n const viewDataName = `${PREFIX}_series_${this.id}_mapViewDataStatic`;\n this._mapViewDataStatistics = this.createStatisticalData(viewDataName, this._mapViewData.getDataView());\n this._mapViewData.getDataView().target.removeListener('change', this._mapViewDataStatistics.reRunAllTransform);\n }\n }\n\n /** seriesField */\n getSeriesKeys(): string[] {\n if (this._seriesField) {\n return (\n this.getRawDataStatisticsByField(this._seriesField)?.values ??\n this._mapViewDataStatistics?.latestData[this._seriesField]?.values ??\n []\n );\n }\n if (this.name) {\n return [this.name];\n }\n if (this.userId) {\n return [`${this.userId}`];\n }\n return [`${this.type}_${this.id}`];\n }\n\n fillData() {\n super.fillData();\n this._mapViewData.getDataView()?.reRunAllTransform();\n this._mapViewDataStatistics?.reRunAllTransform();\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n","import { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { GeoSourceType } from '../../typings/geo';\n\nexport interface IMapOpt {\n nameMap: Record;\n nameProperty: string;\n}\n\nexport const DEFAULT_MAP_LOOK_UP_KEY = `${PREFIX}_MAP_LOOK_UP_KEY`;\n\nexport const map = (data: GeoSourceType, opt: IMapOpt) => {\n if (data.features) {\n data.features.forEach((f: any, index: number) => {\n f[DEFAULT_DATA_INDEX] = index;\n const name = f.properties?.[opt.nameProperty];\n if (opt.nameMap && opt.nameMap[name]) {\n f[DEFAULT_MAP_LOOK_UP_KEY] = opt.nameMap[name];\n } else {\n f[DEFAULT_MAP_LOOK_UP_KEY] = name;\n }\n });\n }\n return data.features;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { MapSeries } from './map';\n\nexport class MapSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n const series = this.series as MapSeries;\n return this._getDimensionData(datum) ?? series.getDatumName(datum);\n };\n}\n","import { Factory } from './../core/factory';\nimport type { IPathMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IPathMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerPathGraphic } from '@visactor/vgrammar-core';\n\nexport class PathMark extends BaseMark implements IPathMark {\n static readonly type = MarkTypeEnum.path;\n readonly type = PathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0,\n path: ''\n };\n return defaultStyle;\n }\n}\n\nexport const registerPathMark = () => {\n Factory.registerMark(PathMark.type, PathMark);\n registerPathGraphic();\n};\n","import { projection } from '@visactor/vgrammar-projection';\nimport type { IProjectionSpec } from './interface';\n\n// TODO: 待 vgrammar 补充上后修改回去\ntype GeoJsonFeatureSpec = any;\nexport class Projection {\n projection: any;\n\n constructor(projectionSpec: IProjectionSpec) {\n // TODO: vgrammar 类型问题\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.projection = projection(projectionSpec.type)();\n }\n\n fit(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const fitData = { type: 'FeatureCollection', features };\n this.projection.fitExtent([start, size], fitData);\n }\n\n center(center: [number, number]) {\n this.projection?.center?.(center);\n }\n\n project(point: [number, number]) {\n return this.projection?.(point);\n }\n\n shape(data: GeoJsonFeatureSpec) {\n return this.projection?.path?.(data);\n }\n\n invert(point: [number, number]) {\n return this.projection?.invert?.(point);\n }\n\n scale(): number;\n scale(scale: number): void;\n scale(scale?: number): number | void {\n if (this.projection?.scale) {\n if (scale !== undefined) {\n this.projection.scale(scale);\n } else {\n return this.projection.scale() as number;\n }\n }\n }\n\n translate(): [number, number];\n translate(point: [number, number]): void;\n translate(point?: [number, number] | void) {\n if (this.projection?.scale) {\n if (point !== undefined) {\n this.projection.translate(point);\n } else {\n return this.projection.translate();\n }\n }\n }\n\n evaluate(start: number[], size: number[], features: GeoJsonFeatureSpec[]) {\n const tmp = this.projection.copy();\n return tmp?.fitExtent([start, size], {\n type: 'FeatureCollection',\n features\n });\n }\n}\n","import type { IZoomTrigger } from './interface';\n\nexport class DeskTopTrigger implements IZoomTrigger {\n pointerId: number;\n\n parserScrollEvent(e: any) {\n if (!e) {\n return e;\n }\n\n // 经过测试ctrlKey这个字段只有在双指方向不一致时,才会为true,根据这个判断是否触发scroll事件\n if (!e.ctrlKey && (e.deltaY !== 0 || e.deltaX !== 0)) {\n e.scrollX = e.deltaX;\n e.scrollY = e.deltaY;\n return e;\n }\n\n return false;\n }\n\n parserZoomEvent(e: any) {\n if (!e) {\n return e;\n }\n // @see https://vega.github.io/vega/examples/zoomable-world-map/\n const zoom = Math.pow(1.0005, -e.deltaY * Math.pow(16, e.deltaMode));\n e.zoomDelta = zoom;\n e.zoomX = e.canvasX;\n e.zoomY = e.canvasY;\n return e;\n }\n clearZoom(): void {\n // do nothing\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n parserDragEvent(): boolean {\n return true;\n }\n}\n","import type { IZoomTrigger } from './interface';\nexport class MobileTrigger implements IZoomTrigger {\n private _lastScale = 0;\n pointerId: number;\n\n clearZoom(): void {\n this._lastScale = 0;\n this.pointerId = null;\n }\n\n parserDragEvent(event: any): boolean {\n // 下面的代码逻辑本意是:单指(pointerId===0) -> 多指(pointerId === 1) 切换后, 终止touch事件\n // 问题:ios系统/部分MIUI系统,单指/多指滑动过程中, pointerId每次都不一样,所以无法做到上述识别\n // 解决方法: 暂时不做流程判断, 如果后续有需求, 单指 -> 多指可以考虑用event.isPrimary判断\n // if (this.pointerId) {\n // return this.pointerId === event.pointerId;\n // }\n // this.pointerId = event.pointerId;\n return true;\n }\n\n parserZoomEvent(event: any) {\n const scale = event.scale;\n if (this._lastScale === 0) {\n this._lastScale = scale;\n return event;\n }\n event.zoomDelta = scale / this._lastScale;\n\n const center = event.center;\n event.zoomX = center.x;\n event.zoomY = center.y;\n this._lastScale = scale;\n\n return event;\n }\n\n parserScrollEvent(event: any) {\n // todo\n return event;\n }\n\n clearScroll(): void {\n // do nothing\n }\n\n clearDrag(): void {\n // do nothing\n }\n}\n","import type { RenderMode } from '../../../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../../../typings/spec/common';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../../util/env';\nimport { DeskTopTrigger } from './desktop';\nimport { MobileTrigger } from './mobile';\n\nexport function getDefaultTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: ['pointerup', 'pointerupoutside'],\n zoom: 'wheel',\n zoomEnd: 'pointerup',\n scroll: 'wheel',\n // scrollEnd: 'pointerup',\n trigger: DeskTopTrigger\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n start: 'pointerdown',\n move: 'pointermove',\n end: ['pointerup', 'pointerupoutside'],\n zoom: 'pinch',\n zoomEnd: 'pinchend',\n scroll: 'pan',\n scrollEnd: 'panend',\n trigger: MobileTrigger\n };\n }\n\n return null;\n}\n","import type { IModelOption } from './../../model/interface';\n/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, pointInRect, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventQuery, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport type { IDelayType } from '../../typings/event';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\nimport type { Gesture } from '@visactor/vrender-kits';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n}\n\nexport type ZoomEventParams = { zoomDelta: number; zoomX: number; zoomY: number };\n\nexport type ZoomCallback = (params: ZoomEventParams, e: BaseEventParams['event']) => Record | void;\n\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (s: ISeries, callback?: ZoomCallback) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _option: IModelOption;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n private _gestureController!: Gesture | null;\n\n private _isGestureListener: boolean = false;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n this._gestureController = (this._option.getChart().getVGrammarView().renderer as any)._gestureController;\n this._isGestureListener = isMobileLikeMode(this._renderMode) || isMiniAppLikeMode(this._renderMode);\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getZoomTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getZoomTriggerEvent(type: string): EventType | EventType[] {\n return getDefaultTriggerEventByMode(this._renderMode)[type];\n }\n\n private _zoomEventDispatch(params: BaseEventParams, regionOrSeries: IRegion | ISeries, callback?: ZoomCallback) {\n if (!this._isGestureListener && !params.event) {\n return;\n }\n const event = this._isGestureListener ? params : params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY, path } = event as any;\n\n // 不响应由组件触发的 zoom 事件(例如滚动分页的离散图例)\n if (!path.some((node: any) => node.name && node.name.includes('region'))) {\n return;\n }\n\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !pointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return;\n }\n let extendParams: ReturnType = {};\n if (callback) {\n extendParams = callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n ...extendParams,\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _getRegionOrSeriesLayout(rs: IRegion | ISeries) {\n if (rs.type !== 'region') {\n rs = (rs).getRegion();\n }\n const { x, y, width, height } = rs.layout.getLayout();\n return {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n };\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const zoomParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoom')]\n : [this._getZoomTriggerEvent('zoom'), { level: Event_Bubble_Level.chart, consume: true }];\n const zoomEndParams: [string] | [string, EventQuery] = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoomEnd') as string]\n : [this._getZoomTriggerEvent('zoomEnd') as string, { level: Event_Bubble_Level.chart, consume: false }];\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...zoomEndParams,\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n (event as any).on(\n ...zoomParams,\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(s: ISeries, callback?: ZoomCallback, option?: ITriggerOption) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any\n ) {\n let stopBubble: boolean | undefined = false;\n if (!this._isGestureListener && (!params.event || this._option.disableTriggerEvent)) {\n return stopBubble;\n }\n const event = this._isGestureListener ? params : params.event;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY, canvasX, canvasY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return stopBubble;\n }\n if (\n !pointInRect(\n {\n x: canvasX,\n y: canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return stopBubble;\n }\n\n if (callback) {\n stopBubble = callback({ scrollX, scrollY }, event as any);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n\n return stopBubble;\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const scrollParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scroll')]\n : [this._getZoomTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }];\n const scrollEndParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scrollEnd')]\n : [this._getZoomTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...scrollEndParams,\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n (event as any).on(\n ...scrollParams,\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n return this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getZoomTriggerEvent('start') as string, { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = pointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n this._clickEnable = false;\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n const mouseup = delayMap[delayType]((params: BaseEventParams) => {\n this._clickEnable = true;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._zoomableTrigger.pointerId = null;\n this._eventObj.off(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n end.forEach(endEventType => {\n this._eventObj.off(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mouseup as any\n );\n this._eventObj.allow(endEventType);\n });\n }, delayTime);\n\n const mousemove = delayMap[delayType]((params: BaseEventParams) => {\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n this._clickEnable = false;\n end.forEach(endEventType => this._eventObj.prevent(endEventType, mouseup as any));\n\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n end.forEach(endEventType => {\n this._eventObj.on(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mouseup as any\n );\n });\n }\n}\n","import { LayoutZIndex } from './../../constant/layout';\n/* eslint-disable no-duplicate-imports */\nimport type { IPoint } from '../../typings/coordinate';\nimport { Projection } from './projection';\nimport type { IEffect, IModelLayoutOption, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IGeoRegionSpec, IRegion, RegionSpec } from '../../region/interface';\nimport { eachSeries } from '../../util/model';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IGeoCoordinate, IGeoCoordinateHelper, IGeoCoordinateSpec, IProjectionSpec } from './interface';\nimport type { BaseEventParams, ExtendEventParam, PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { StringOrNumber } from '../../typings';\nimport type { IZoomable, ZoomEventParams } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport { isValid, mixin, isNil, Matrix, isEqual } from '@visactor/vutils';\nimport type { Maybe } from '@visactor/vutils';\nimport { DEFAULT_MAP_LOOK_UP_KEY } from '../../data/transforms/map';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { MapSeries } from '../../series';\n\nexport function projectionName(key: string, id: number) {\n return `${PREFIX}_${id}_${key}`;\n}\nexport class GeoCoordinate extends BaseComponent implements IGeoCoordinate {\n static type = ComponentTypeEnum.geoCoordinate;\n type = ComponentTypeEnum.geoCoordinate;\n name: string = ComponentTypeEnum.geoCoordinate;\n\n layoutType: 'none' = 'none';\n protected layoutZIndex: number = LayoutZIndex.Mark;\n\n _longitudeField?: string;\n get longitudeField() {\n return this._longitudeField;\n }\n\n _latitudeField?: string;\n get latitudeField() {\n return this._latitudeField;\n }\n\n protected _projectionSpec: IProjectionSpec = {\n name: projectionName(this.type, this.id),\n type: 'mercator'\n };\n get projectionSpec() {\n return this._projectionSpec;\n }\n setProjection(projectionSpec: IGeoCoordinateSpec['projection']) {\n this._projectionSpec = {\n ...projectionSpec,\n name: this._projectionSpec.name\n };\n }\n\n protected _projection!: Projection;\n\n protected _centerCache: Map;\n\n private _actualScale = 1;\n\n getZoom() {\n return this._actualScale;\n }\n\n private _initialScale = 1;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (isNil(chartSpec)) {\n return null;\n }\n const specInfos: IModelSpecInfo[] = [];\n chartSpec.region.forEach((r: RegionSpec, i: number) => {\n if (r.coordinate === 'geo') {\n // 去除 padding 配置,避免重复计算\n const spec = { ...r, padding: 0 };\n specInfos.push({\n spec,\n regionIndex: i,\n type: ComponentTypeEnum.geoCoordinate,\n specInfoPath: ['component', 'geoCoordinate', i]\n } as any);\n }\n });\n return specInfos;\n }\n\n effect: IEffect = {\n scaleUpdate: () => {\n this.coordinateHelper();\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n this._projectionSpec = mergeSpec(this._projectionSpec, this._spec.projection);\n if (this._projectionSpec.zoom > this._spec.zoomLimit?.max) {\n this._projectionSpec.zoom = this._spec.zoomLimit.max;\n }\n if (this._projectionSpec.zoom < this._spec.zoomLimit?.min) {\n this._projectionSpec.zoom = this._spec.zoomLimit.min;\n }\n\n this._actualScale = this._projectionSpec.zoom ?? 1;\n this._initialScale = this._actualScale;\n this._longitudeField = this._spec.longitudeField;\n this._latitudeField = this._spec.latitudeField;\n }\n\n // life cycle\n created() {\n super.created();\n this._regions = this._option.getRegionsInIndex([(this._option as any).regionIndex]);\n this.initProjection();\n this.coordinateHelper();\n this.initEvent();\n this._initCenterCache();\n // FIXME: 这里是在开启缩放时,处理关联的symbol等mark,在地图缩放时应该同步缩放\n // this.rescaleMark();\n }\n\n private _handleChartZoom = (params: ZoomEventParams, event?: BaseEventParams['event']) => {\n let scale = params.zoomDelta;\n // check if the next scale will outrange\n const _lastActualScale = this._actualScale;\n this._actualScale *= scale;\n if (this._actualScale < this._spec.zoomLimit?.min) {\n this._actualScale = this._spec.zoomLimit?.min;\n scale = this._spec.zoomLimit?.min / _lastActualScale;\n } else if (this._actualScale > this._spec.zoomLimit?.max) {\n this._actualScale = this._spec.zoomLimit?.max;\n scale = this._spec.zoomLimit?.max / _lastActualScale;\n }\n this.zoom(scale, [params.zoomX, params.zoomY]);\n return { scale, totalScale: this._actualScale };\n };\n\n dispatchZoom(zoomDelta: number, center?: { x: number; y: number }) {\n const scaleCenter = center || {\n x: this.getLayoutStartPoint().x + this.getLayoutRect().width / 2,\n y: this.getLayoutStartPoint().y + this.getLayoutRect().height / 2\n };\n const { scale, totalScale } = this._handleChartZoom({ zoomDelta, zoomX: scaleCenter.x, zoomY: scaleCenter.y });\n if (scale !== 1) {\n this.event.emit('zoom', {\n scale,\n scaleCenter,\n totalScale,\n model: this\n } as unknown as ExtendEventParam);\n }\n }\n\n initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n\n const { roam } = this._spec;\n if (roam) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom);\n (this as unknown as IZoomable).initDragEventOfRegions(\n this._regions,\n (roam as any).blank ? null : () => true,\n this.pan\n );\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n s.event.on('zoom', e => {\n s.handleZoom(e as ZoomEventParam);\n return true;\n });\n\n s.event.on('panmove', e => {\n s.handlePan(e as PanEventParam);\n return true;\n });\n });\n });\n }\n }\n\n initProjection() {\n this._projection = new Projection(this._projectionSpec);\n if (this._projection.projection === null) {\n this._option?.onError('unsupported projection type!');\n return;\n }\n }\n\n coordinateHelper() {\n const helper: IGeoCoordinateHelper = {\n longitudeField: this._longitudeField,\n latitudeField: this._latitudeField,\n dataToPosition: this.dataToPosition.bind(this),\n dataToLongitude: this.dataToLongitude.bind(this),\n dataToLatitude: this.dataToLatitude.bind(this),\n shape: this.shape.bind(this),\n getCoordinateId: () => this.id\n };\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as IGeoSeries).setCoordinateHelper(helper);\n } else {\n // 散点地图\n (s as ICartesianSeries).setXAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n getFields: () => [this._longitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n (s as unknown as ICartesianSeries).setYAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n getFields: () => [this._latitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n }\n });\n });\n }\n\n onLayoutEnd(ctx: IModelLayoutOption) {\n this.setLayoutRect(this._regions[0].getLayoutRect());\n this.setLayoutStartPosition(this._regions[0].getLayoutStartPoint());\n const { width, height } = this.getLayoutRect();\n const { translate, scale, center } = this.evaluateProjection([0, 0], [width, height]);\n translate && this._projection.translate(translate);\n scale && this._projection.scale(scale);\n center && this._projection.center(center);\n eachSeries(this._regions, s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as MapSeries).areaPath?.clear();\n const pathGroup = s.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n }\n }\n });\n this._actualScale = this._initialScale;\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption) {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n // util\n protected collectFeatures() {\n const features: any[] = [];\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n features.push(...((s as unknown as IGeoSeries).getMapViewData()?.latestData ?? []));\n }\n });\n });\n return features;\n }\n\n // API\n dataToPosition(values: number[] = []): IPoint {\n const point = this._projection?.project([values[0], values[1]]);\n return {\n x: point?.[0],\n y: point?.[1]\n };\n }\n\n dataToLatitude(lat: number): number {\n const point = this._projection?.project([0, lat]);\n return point?.[1];\n }\n\n dataToLongitude(lon: number): number {\n const point = this._projection?.project([lon, 0]);\n return point?.[0];\n }\n\n // interaction\n zoom(p: number, anchor: [number, number] = [0, 0]) {\n let s = this._projection?.scale() ?? 0;\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n s = s * p;\n t_x -= (anchor[0] - t_x) * (p - 1);\n t_y -= (anchor[1] - t_y) * (p - 1);\n\n this._projection?.scale(s);\n this._projection?.translate([t_x, t_y]);\n }\n\n pan = (delta: [number, number] = [0, 0]) => {\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n t_x += delta[0];\n t_y += delta[1];\n this._projection?.translate([t_x, t_y]);\n };\n\n shape(datum?: any) {\n return this._projection.shape(datum);\n }\n\n /**\n * 根据像素坐标获取经纬度位置\n */\n invert(point: [number, number]) {\n return this._projection.invert(point);\n }\n\n private evaluateProjection(start: [number, number], size: [number, number]) {\n const evaluated = this._projection.evaluate(start, size, this.collectFeatures());\n let translate = evaluated.translate();\n const scale = evaluated.scale() * this._initialScale;\n const center = this._projectionSpec.center ?? evaluated.invert([size[0] / 2, size[1] / 2]);\n center && (translate = [size[0] / 2, size[1] / 2]);\n return { translate, scale, center };\n }\n\n protected _initCenterCache() {\n if (!this._centerCache) {\n this._centerCache = new Map();\n }\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === 'map') {\n const mapData = (s as IGeoSeries).getMapViewData()?.latestData ?? [];\n mapData.forEach((feature: any = {}) => {\n const key = feature[s.getDimensionField()[0]] || feature[DEFAULT_MAP_LOOK_UP_KEY];\n const center = (s as IGeoSeries).getDatumCenter(feature);\n if (key && isValid(center)) {\n this._centerCache.set(key, { x: center[0], y: center[1] });\n }\n });\n }\n });\n });\n }\n\n _compareSpec(spec: IGeoRegionSpec, prevSpec: IGeoRegionSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['roam', 'longitudeField', 'latitudeField', 'projection', 'zoomLimit'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n\n return result;\n }\n\n release(): void {\n super.release();\n this._centerCache && this._centerCache.clear();\n this._centerCache = null;\n }\n}\n\nmixin(GeoCoordinate, Zoomable);\n\nexport const registerGeoCoordinate = () => {\n Factory.registerComponent(GeoCoordinate.type, GeoCoordinate);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IMapSeriesSpec, IMapSeriesTheme } from './interface';\n\nexport class MapSeriesSpecTransformer<\n T extends IMapSeriesSpec = IMapSeriesSpec,\n K extends IMapSeriesTheme = IMapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.area, undefined, undefined, false); // 地图交互通过 vrender api,自身不支持动画,所以 label 也不支持动画\n }\n}\n","import { Matrix, isValid, isValidNumber } from '@visactor/vutils';\n/* eslint-disable no-duplicate-imports */\nimport type { FeatureData } from '@visactor/vgrammar-core';\nimport { registerProjection } from '@visactor/vgrammar-projection';\nimport { DataView } from '@visactor/vdataset';\nimport { geoSourceMap, registerMapSource, unregisterMapSource } from './geo-source';\nimport { lookup } from '../../data/transforms/lookup';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { GeoSeries } from '../geo/geo';\nimport { DEFAULT_MAP_LOOK_UP_KEY, map } from '../../data/transforms/map';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { MapSeriesTooltipHelper } from './tooltip-helper';\nimport { DEFAULT_DATA_SERIES_FIELD, DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IMapSeriesSpec } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { registerPathMark } from '../../mark/path';\nimport { mapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerGeoCoordinate } from '../../component/geo';\nimport type { ILabelMark, IMark, IPathMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport { MapSeriesSpecTransformer } from './map-transformer';\n\nexport class MapSeries extends GeoSeries {\n static readonly type: string = SeriesTypeEnum.map;\n type = SeriesTypeEnum.map;\n\n static readonly mark: SeriesMarkMap = mapSeriesMark;\n static readonly transformerConstructor = MapSeriesSpecTransformer as any;\n readonly transformerConstructor = MapSeriesSpecTransformer;\n\n map!: string;\n\n protected _nameMap!: { [key: StringOrNumber]: StringOrNumber };\n getNameMap() {\n return this._nameMap;\n }\n\n private _areaCache: Map = new Map();\n get areaPath() {\n return this._areaCache;\n }\n\n private _pathMark: IPathMark;\n private _labelMark: ILabelMark;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.map = this._spec.map;\n this._nameMap = this._spec.nameMap;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n this._spec.nameProperty && (this._nameProperty = this._spec.nameProperty);\n this._spec.centroidProperty && (this._centroidProperty = this._spec.centroidProperty);\n\n if (!this.map) {\n this._option?.onError(`map type '${this.map}' is not specified !`);\n }\n\n if (!geoSourceMap.get(this.map)) {\n this._option?.onError(`'${this.map}' data is not registered !`);\n }\n }\n\n // data\n initData(): void {\n super.initData();\n\n registerDataSetInstanceTransform(this._dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceTransform(this._dataSet, 'map', map);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n\n // 初始化地图数据\n const features = geoSourceMap.get(this.map);\n if (!features) {\n this._option?.onError('no valid map data found!');\n }\n const mapData = new DataView(this._dataSet, { name: `map_${this.id}_data` });\n\n mapData\n .parse([features], {\n type: 'dataview'\n })\n .transform({ type: 'copyDataView', options: { deep: true }, level: TransformLevel.copyDataView })\n .transform({\n type: 'map',\n options: {\n nameMap: this._nameMap,\n nameProperty: this._nameProperty\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this._data?.getLatestData(),\n key: DEFAULT_MAP_LOOK_UP_KEY,\n fields: this._nameField,\n set: (feature: FeatureData, datum: Datum) => {\n if (datum) {\n Object.keys(datum).forEach(key => {\n if (!(key in feature)) {\n feature[key] = datum[key];\n }\n });\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', mapData.reRunAllTransform);\n this._mapViewData = new SeriesData(this._option, mapData);\n }\n\n compileData() {\n super.compileData();\n this._mapViewData?.compile();\n }\n\n // mark\n initMark() {\n this._pathMark = this._createMark(\n MapSeries.mark.area,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId()\n },\n {\n morph: shouldMarkDoMorph(this._spec, MapSeries.mark.area.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IPathMark;\n }\n\n initMarkStyle() {\n const pathMark = this._pathMark;\n if (pathMark) {\n this.setMarkStyle(\n pathMark,\n {\n fill: (datum: any) => {\n if (isValid(datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD])) {\n return (this._option.globalScale.getScale('color') ?? this._getDefaultColorScale()).scale(\n datum[this._seriesField ?? DEFAULT_DATA_SERIES_FIELD]\n );\n }\n return this._spec?.defaultFillColor;\n },\n path: this.getPath.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n\n pathMark.setPostProcess('fill', result => {\n if (!isValid(result)) {\n return this._spec.defaultFillColor;\n }\n return result;\n });\n\n this.setMarkStyle(\n pathMark,\n {\n smoothScale: true\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n const text = this.getDatumName(datum);\n return text;\n },\n x: (datum: Datum) => this.dataToPosition(datum)?.x,\n y: (datum: Datum) => this.dataToPosition(datum)?.y\n });\n }\n\n initAnimation() {\n this._pathMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.area, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new MapSeriesTooltipHelper(this);\n this._pathMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pathMark);\n }\n\n protected getPath(datum: any) {\n const area = this._areaCache.get(datum[DEFAULT_DATA_INDEX]);\n if (area) {\n return area.shape;\n }\n const shape = this._coordinateHelper?.shape(datum);\n this._areaCache.set(datum[DEFAULT_DATA_INDEX], {\n shape\n });\n return shape;\n }\n\n // life cycle\n onEvaluateEnd() {\n this._mapViewData.updateData();\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n release() {\n super.release();\n this._areaCache.clear();\n this._nameMap = {};\n this._mapViewData = null as any;\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.scale(scale, scale, scaleCenter);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const pathGroup = this.getRootMark().getProduct()?.getGroupGraphicItem();\n if (pathGroup) {\n if (!pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n pathGroup.translate(delta[0], delta[1]);\n }\n const vgrammarLabel = this._labelMark?.getComponent()?.getProduct();\n\n if (vgrammarLabel) {\n (vgrammarLabel as any).evaluate(null, null);\n }\n }\n\n getDatumCenter(datum: any): [number, number] {\n if (this._centroidProperty && datum.properties?.[this._centroidProperty]) {\n return datum.properties?.[this._centroidProperty];\n }\n\n if (isValidNumber(datum.centroidX * datum.centroidY)) {\n return [datum.centroidX, datum.centroidY];\n }\n\n if (datum.properties?.center) {\n return datum.properties.center;\n }\n\n if (datum.properties?.centroid) {\n return datum.properties.centroid;\n }\n\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: any): string {\n if (datum[this.nameField]) {\n return datum[this.nameField];\n }\n const name = datum.properties?.[this._nameProperty];\n if (name) {\n if (this._spec.nameMap) {\n if (this._spec.nameMap[name]) {\n return this._spec.nameMap[name];\n }\n }\n // TODO:\n // 1. showDefaultName 是一个考虑配置兼容的产物,不然会有 break-change\n // 2. 后续大版本升级,这里无需判断条件,直接返回 name 是更合理的\n if (this._spec.showDefaultName || !this._spec.nameMap) {\n return name;\n }\n }\n return '';\n }\n\n dataToPositionX(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n dataToPositionY(data: any): number {\n this._option?.onError('Method not implemented.');\n return 0;\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._mapViewData?.getDataView()?.reRunAllTransform();\n this._mapViewData?.updateData();\n }\n\n protected _getDataIdKey() {\n return DEFAULT_DATA_INDEX;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pathMark];\n }\n}\n\nexport const registerMapSeries = () => {\n // 注册语法元素\n registerProjection();\n registerGeoCoordinate();\n registerPathMark();\n Factory.registerSeries(MapSeries.type, MapSeries);\n Factory.registerImplement('registerMap', registerMapSource);\n Factory.registerImplement('unregisterMap', unregisterMapSource);\n registerFadeInOutAnimation();\n};\n","import type { IMapSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport type { RegionSpec, ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IMapChartSpec } from './interface';\n\nexport class MapChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string) {\n return type === SeriesTypeEnum.map;\n }\n\n protected _getDefaultSeriesSpec(spec: IMapChartSpec): IMapSeriesSpec {\n return super._getDefaultSeriesSpec(spec, [\n 'type',\n 'nameField',\n 'valueField',\n 'map',\n 'nameProperty',\n 'centroidProperty',\n 'nameMap',\n 'area',\n 'defaultFillColor',\n 'showDefaultName'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n spec.region.forEach((r: RegionSpec) => {\n r.coordinate = 'geo';\n });\n\n super.transformSeriesSpec(spec);\n }\n}\n","import { registerMapSeries } from '../../series/map/map';\nimport { BaseChart } from '../base/base-chart';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IMapChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { MapChartSpecTransformer } from './map-transformer';\n\nexport class MapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.map;\n static readonly seriesType: string = SeriesTypeEnum.map;\n static readonly transformerConstructor = MapChartSpecTransformer;\n readonly transformerConstructor = MapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.map;\n readonly seriesType: string = SeriesTypeEnum.map;\n}\n\nexport const registerMapChart = () => {\n registerMapSeries();\n Factory.registerChart(MapChart.type, MapChart);\n};\n","import { get, pick, cloneDeep, isArray } from '@visactor/vutils';\n\nexport { get, pick, cloneDeep };\n\nexport function field(f: string | string[]) {\n return function (datum: any) {\n let value: any;\n if (!isArray(f)) {\n value = datum?.[f];\n } else {\n value = f.reduce((cur, g) => cur?.[g], datum);\n }\n return value;\n };\n}\n","import type { IBaseScale } from '@visactor/vscale';\nimport type { IPoint, IPolarPoint } from '../../typings/coordinate';\nimport type { IPolarSeries } from '../interface';\nimport { array, isValid, isNil } from '@visactor/vutils';\nimport type { IPolarAxisHelper } from '../../component/axis/polar/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant/polar';\nimport { BaseSeries } from '../base/base-series';\nimport type { IPolarSeriesSpec } from './interface';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { sortDataInAxisHelper } from '../util/utils';\nimport { ChartEvent } from '../../constant/event';\nimport type { StatisticOperations } from '../../data/transforms/interface';\n\nexport abstract class PolarSeries\n extends BaseSeries\n implements IPolarSeries\n{\n readonly coordinate: 'polar' = 'polar';\n\n protected _outerRadius: number = POLAR_DEFAULT_RADIUS;\n public get outerRadius() {\n return this._outerRadius;\n }\n\n protected _innerRadius: number = 0;\n public get innerRadius() {\n return this._innerRadius;\n }\n\n protected _angleField: string[] = [];\n getAngleField() {\n return this._angleField;\n }\n setAngleField(f: string | string[]): string[] {\n this._angleField = isValid(f) ? array(f) : [];\n return this._angleField;\n }\n\n protected _radiusField: string[] = [];\n getRadiusField() {\n return this._radiusField;\n }\n setRadiusField(f: string | string[]): string[] {\n this._radiusField = isValid(f) ? array(f) : [];\n return this._radiusField;\n }\n\n protected _specAngleField: string[];\n protected _specRadiusField: string[];\n\n protected _innerRadiusField!: string[];\n public get innerRadiusField() {\n return this._innerRadiusField;\n }\n setInnerRadiusField(f: string | string[]): string[] {\n this._innerRadiusField = array(f);\n return this._innerRadiusField;\n }\n\n protected _radiusScale!: IBaseScale;\n public get radiusScale() {\n return this._radiusScale;\n }\n setRadiusScale(s: IBaseScale) {\n this._radiusScale = s;\n return s;\n }\n\n protected _angleScale!: IBaseScale;\n public get angleScale() {\n return this._angleScale;\n }\n setAngleScale(s: IBaseScale) {\n this._angleScale = s;\n return s;\n }\n\n private _angleAxisHelper!: IPolarAxisHelper;\n public get angleAxisHelper() {\n return this._angleAxisHelper;\n }\n\n public set angleAxisHelper(h: IPolarAxisHelper) {\n this._angleAxisHelper = h;\n this.onAngleAxisHelperUpdate();\n }\n\n private _radiusAxisHelper!: IPolarAxisHelper;\n public get radiusAxisHelper() {\n return this._radiusAxisHelper;\n }\n public set radiusAxisHelper(h: IPolarAxisHelper) {\n this._radiusAxisHelper = h;\n this.onRadiusAxisHelperUpdate();\n }\n\n protected _sortDataByAxis: boolean = false;\n get sortDataByAxis() {\n return this._sortDataByAxis;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // position\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getCenter = () => this.angleAxisHelper.center();\n this._markAttributeContext.getLayoutRadius = () => this._computeLayoutRadius();\n }\n\n valueToPosition(angleValue: StringOrNumber | StringOrNumber[], radiusValue: StringOrNumber | StringOrNumber[]) {\n if (isNil(angleValue) || isNil(radiusValue) || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return { x: Number.NaN, y: Number.NaN };\n }\n const radius = this.radiusAxisHelper.dataToPosition(array(radiusValue));\n if (radius < 0) {\n // 'link' 实现还有问题\n if (this._invalidType === 'break' || this._invalidType === 'link') {\n return { x: Number.NaN, y: Number.NaN };\n } else if (this._invalidType === 'zero') {\n return this.angleAxisHelper.center();\n }\n }\n const angle = this.angleAxisHelper.dataToPosition(array(angleValue));\n\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.angleAxisHelper.coordToPoint({ angle, radius });\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n // FIXME: 由于存在两个轴,这里的 坐标系转换逻辑会有点尬\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getDatumPositionValues(datum, this._radiusField)\n );\n }\n\n dataToPositionX(datum: Datum): number {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: Datum): number {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: Datum): number {\n return 0;\n }\n\n // todo: 待实现\n positionToData(p: IPolarPoint): any {\n /* do nothing */\n }\n radiusToData(r: number): any {\n /* do nothing */\n }\n angleToData(a: number): any {\n /* do nothing */\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: StatisticOperations }[] = [];\n if (this.radiusAxisHelper?.getScale) {\n this._radiusField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.radiusAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n if (this.angleAxisHelper?.getScale) {\n this._angleField.forEach(f => {\n const result: { key: string; operations: Array<'max' | 'min' | 'values'> } = { key: f, operations: [] };\n if (isContinuous(this.angleAxisHelper.getScale(0).type)) {\n result.operations = ['max', 'min'];\n } else {\n result.operations = ['values'];\n }\n fields.push(result);\n });\n }\n return fields;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n if (isValid(this._spec.outerRadius)) {\n this._outerRadius = this._spec.outerRadius;\n }\n if (isValid(this._spec.radius)) {\n // 优先使用outerRadius, 但要兼容spec.radius\n this._outerRadius = this._spec.radius;\n }\n if (isValid(this._spec.innerRadius)) {\n this._innerRadius = this._spec.innerRadius;\n }\n\n if (isValid(this._spec.sortDataByAxis)) {\n this._sortDataByAxis = this._spec.sortDataByAxis === true;\n }\n }\n\n onRadiusAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n onAngleAxisHelperUpdate(): void {\n this.onMarkPositionUpdate();\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n protected _computeLayoutRadius() {\n const axisHelper = this._angleAxisHelper || this._radiusAxisHelper;\n\n if (axisHelper) {\n return axisHelper.layoutRadius();\n }\n\n const { width, height } = this._region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n protected initEvent() {\n super.initEvent();\n // 通过轴事件来进行排序。轴的domain数据变化在系列的统计数据完成后\n if (this.sortDataByAxis) {\n this.event.on(\n ChartEvent.scaleDomainUpdate,\n {\n filter: param => param.model.id === this._angleAxisHelper?.getAxisId()\n },\n () => {\n // 只能排序,不能修改数据,此时已经在数据流的统计流程之后\n this._sortDataInAxisDomain();\n }\n );\n }\n }\n\n _sortDataInAxisDomain() {\n if (this.getViewData()?.latestData?.length) {\n sortDataInAxisHelper(this.angleAxisHelper, this._angleField[0], this.getViewData().latestData);\n }\n }\n\n protected getInvalidCheckFields() {\n const fields: string[] = [];\n\n if (this.angleAxisHelper.isContinuous) {\n this._angleField.forEach(f => {\n fields.push(f);\n });\n }\n\n if (this.radiusAxisHelper.isContinuous) {\n this._radiusField.forEach(f => {\n fields.push(f);\n });\n }\n return fields;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\nimport { getPercentValue } from '../../util/math';\nimport { ARC_TRANSFORM_VALUE } from '../../constant/polar';\nimport { computeQuadrant, isNil } from '@visactor/vutils';\n\nexport interface IPieOpt {\n angleField: () => string;\n startAngle: () => number;\n endAngle: () => number;\n minAngle: () => number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n showAllZero: boolean;\n supportNegative: boolean;\n showEmptyCircle: boolean;\n}\n\nfunction transformInvalidValue(value: any) {\n if (!couldBeValidNumber(value)) {\n return 0;\n }\n return Number.parseFloat(value);\n}\n\nexport const pie = (originData: Array, op: IPieOpt) => {\n const {\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK,\n showAllZero,\n supportNegative,\n showEmptyCircle\n } = op;\n\n const angleField = op.angleField();\n const startAngle = op.startAngle();\n const endAngle = op.endAngle();\n const minAngle = op.minAngle();\n\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n\n if (!showAllZero && showEmptyCircle && isDataEmpty(data, angleField, supportNegative)) {\n return data;\n }\n\n const appendArcInfo = (data: Datum, startAngle: number, angle: number) => {\n data[asStartAngle] = startAngle;\n data[asEndAngle] = startAngle + angle;\n data[asMiddleAngle] = startAngle + angle / 2;\n data[asRadian] = angle;\n data[asQuadrant] = computeQuadrant(startAngle + angle / 2);\n };\n\n let total = 0;\n let max = -Infinity;\n let isAllZero = true;\n for (let index = 0; index < data.length; index++) {\n const angleFieldValue = supportNegative\n ? Math.abs(transformInvalidValue(data[index][angleField]))\n : transformInvalidValue(data[index][angleField]);\n total += angleFieldValue;\n max = Math.max(angleFieldValue, max);\n if (isAllZero && angleFieldValue !== 0) {\n isAllZero = false;\n }\n\n data[index][ARC_TRANSFORM_VALUE] = angleFieldValue;\n }\n\n const valueList = data.map(d => Number(d[angleField]));\n const angleRange = endAngle - startAngle;\n let lastAngle = startAngle;\n let restAngle = angleRange;\n let largeThanMinAngleTotal = 0;\n const percents = getPercentValue(valueList);\n\n data.forEach((d, i) => {\n const angleFieldValue = d[ARC_TRANSFORM_VALUE];\n const ratio = total ? angleFieldValue / total : 0;\n let radian = ratio * angleRange;\n\n if (radian < minAngle) {\n radian = minAngle;\n restAngle -= minAngle;\n } else {\n largeThanMinAngleTotal += angleFieldValue;\n }\n\n const dStartAngle = lastAngle;\n const dEndAngle = lastAngle + radian;\n\n d[asRatio] = ratio;\n d[asK] = max ? angleFieldValue / max : 0;\n d._percent_ = (percents as number[])[i];\n appendArcInfo(d, dStartAngle, radian);\n\n lastAngle = dEndAngle;\n });\n\n if (restAngle < angleRange) {\n if (restAngle <= 1e-3) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n } else {\n const unitRadian = restAngle / largeThanMinAngleTotal;\n lastAngle = startAngle;\n data.forEach(d => {\n const angle = d[asRadian] === minAngle ? minAngle : d[ARC_TRANSFORM_VALUE] * unitRadian;\n appendArcInfo(d, lastAngle, angle);\n\n lastAngle += angle;\n });\n }\n }\n\n if (total !== 0) {\n // 数据都为 0 时,起始角和结束角相同,不应该强制赋值\n // 防止一个扇区的角度会因为浮点数精度问题和传入的 endAngle 不相等\n data[data.length - 1][asEndAngle] = endAngle;\n }\n\n if (isAllZero && showAllZero) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n }\n return data;\n};\n\nexport const isDataEmpty = (data: Datum[], angleField: string, supportNegative: boolean) => {\n if (isNil(data)) {\n return true;\n }\n if (data.length === 0) {\n return true;\n }\n if (data.every(datum => transformInvalidValue(datum[angleField]) === 0)) {\n return true;\n }\n // 未支持负数, 并且和为0, 则也认为是空数据\n if (!supportNegative && data.reduce((sum, datum) => sum + transformInvalidValue(datum[angleField]), 0) === 0) {\n return true;\n }\n\n return false;\n};\n","import type { IElement, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { AnimationStateEnum } from '../../../animation/interface';\nimport type { Datum } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport type { IPieAnimationParams, PieAppearPreset } from '../interface';\n\n/**\n * grow生长option\n * 在appear时,所有柱子一起从同一个位置生长,需要growXXXOverall效果;\n * 在enter时,柱子应该从自身位置生长;\n * @param params\n * @param isOverall\n * @returns\n */\nexport function pieGrowOption(pieParams: IPieAnimationParams, isOverall: boolean, state: AnimationStateEnum) {\n return (datum: Datum, element: IElement, params: AnimationStateEnum) => {\n if (isOverall) {\n if (pieParams.growField === 'radius') {\n return {\n overall: 0\n };\n }\n return {\n overall: pieParams.growFrom(datum, element, state)\n };\n }\n return {\n overall: false\n };\n };\n}\n\nexport const Appear_Grow = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n options: pieGrowOption(params, true, AnimationStateEnum.appear)\n };\n};\n\nexport const Appear_FadeIn = {\n type: 'fadeIn'\n};\n\nexport const pieEnter = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusIn' : 'growAngleIn',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.enter)\n };\n};\n\nexport const pieExit = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n easing: 'linear',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport const pieDisappear = (params: IPieAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'radius' ? 'growRadiusOut' : 'growAngleOut',\n options: pieGrowOption(params, true, AnimationStateEnum.exit)\n };\n};\n\nexport function piePresetAnimation(params: IPieAnimationParams, preset: PieAppearPreset | boolean) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growRadius':\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n }\n}\n\nexport const registerPieAnimation = () => {\n Factory.registerAnimation('pie', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n\nexport const registerEmptyCircleAnimation = () => {\n Factory.registerAnimation('emptyCircle', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset)\n };\n });\n};\n\nexport const registerPie3dAnimation = () => {\n Factory.registerAnimation('pie3d', (params: IPieAnimationParams, preset: PieAppearPreset) => {\n return {\n appear: piePresetAnimation(params, preset),\n enter: pieEnter(params),\n exit: pieExit(params),\n disappear: pieDisappear(params)\n };\n });\n};\n","import type { IAnimationTimeline, IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { ARC_MIDDLE_ANGLE } from '../../../constant/polar';\nimport type { Datum } from '../../../typings';\nimport { isValidNumber, polarToCartesian } from '@visactor/vutils';\nimport type { IArcMark } from '../../../mark/interface';\n\nexport function centerOffsetConfig(mark: IArcMark, originalConfig: IAnimationTypeConfig): IAnimationTimeline {\n const offset = originalConfig.options?.distance ?? 10;\n const duration = isValidNumber(originalConfig.duration) ? originalConfig.duration / 2 : 1000;\n const easing = originalConfig.options.easing ?? 'cubicOut';\n return {\n oneByOne: originalConfig.oneByOne,\n loop: originalConfig.loop ?? false,\n timeSlices: [\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n from: (datum: Datum) => mark.getAttribute('x', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.x;\n }\n },\n y: {\n from: (datum: Datum) => mark.getAttribute('y', datum),\n to: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.y;\n }\n }\n }\n }\n },\n {\n duration,\n effects: {\n easing,\n channel: {\n x: {\n to: (datum: Datum) => mark.getAttribute('x', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('x', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.x;\n }\n },\n y: {\n to: (datum: Datum) => mark.getAttribute('y', datum),\n from: (datum: Datum) => {\n const center = mark.getAttribute('y', datum) as number;\n const point = polarToCartesian(\n {\n x: 0,\n y: 0\n },\n offset,\n datum[ARC_MIDDLE_ANGLE]\n );\n return center + point.y;\n }\n }\n }\n }\n }\n ]\n };\n}\n","import { Factory } from './../core/factory';\nimport { ARC_MIDDLE_ANGLE } from '../constant/polar';\nimport type { IArcMarkSpec, Datum, StateValueType } from '../typings';\nimport type { ExChannelCall } from './base/base-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseMark } from './base/base-mark';\nimport type { IArcMark, IMarkOption, IMarkRaw, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArcGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class BaseArcMark extends BaseMark implements IMarkRaw {\n readonly type: MarkTypeEnum = ArcMark.type;\n\n _unCompileChannel = { centerOffset: true, radiusOffset: true };\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n\n // because of set object.function, this setting should be write after object init\n this._computeExChannel.x = this.computeCenter as ExChannelCall;\n this._computeExChannel.y = this.computeCenter as ExChannelCall;\n this._computeExChannel.outerRadius = this.computeOuterRadius as ExChannelCall;\n\n this._extensionChannel.centerOffset = ['x', 'y'];\n this._extensionChannel.radiusOffset = ['outerRadius'];\n }\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n startAngle: 0,\n endAngle: 0,\n outerRadius: 0,\n innerRadius: 0,\n cornerRadius: 0,\n lineWidth: 0,\n innerPadding: 0,\n outerPadding: 0\n };\n return defaultStyle;\n }\n\n protected computeOuterRadius = (\n key: string,\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n superValue: number\n ): number => {\n const offset = (this.getAttribute('radiusOffset', datum, states, opt) as number) ?? 0;\n return superValue + offset;\n };\n\n protected computeCenter = (\n key: 'x' | 'y',\n datum: Datum,\n states: StateValueType = 'normal',\n opt: any,\n center: number\n ) => {\n return (\n polarToCartesian(\n { x: 0, y: 0 },\n this.getAttribute('centerOffset', datum, states, opt) as number,\n datum[ARC_MIDDLE_ANGLE]\n )[key] + center\n );\n };\n}\n\nexport class ArcMark extends BaseArcMark implements IArcMark {\n static readonly type = MarkTypeEnum.arc;\n readonly type: MarkTypeEnum = ArcMark.type;\n}\n\nexport const registerArcMark = () => {\n registerArcGraphic();\n registerVGrammarArcAnimation();\n Factory.registerMark(ArcMark.type, ArcMark);\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const pieSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie]: { name: SeriesMarkNameEnum.pie, type: MarkTypeEnum.arc },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n\nexport const pie3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.pie3d]: { name: SeriesMarkNameEnum.pie3d, type: MarkTypeEnum.arc3d },\n [SeriesMarkNameEnum.labelLine]: { name: SeriesMarkNameEnum.labelLine, type: MarkTypeEnum.path }\n};\n","import { isArray, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IArcLabelSpec, IBasePieSeriesSpec, IPieSeriesTheme } from './interface';\n\nexport class PieSeriesSpecTransformer<\n T extends IBasePieSeriesSpec = IBasePieSeriesSpec,\n K extends IPieSeriesTheme = IPieSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie);\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(spec: T, chartSpec: any): { spec: T; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(chartSpec);\n\n // this._originalSpec + specFromChart + this._theme = this._spec\n // 动态处理 label 样式,对于展示在内部的 label 默认使用 innerLabel 样式\n newSpec = mergeSpec({}, this._theme, specFromChart, spec) as any;\n\n const getMergedLabelSpec = (position: IArcLabelSpec['position'], label: IArcLabelSpec) => {\n if (position === 'inside' || position === 'inside-center') {\n return mergeSpec({}, this._theme.innerLabel, label);\n }\n return mergeSpec({}, this._theme.outerLabel, label);\n };\n\n if (isArray(newSpec.label)) {\n newSpec.label = newSpec.label.map(label => getMergedLabelSpec(label.position, label));\n } else {\n newSpec.label = getMergedLabelSpec(newSpec.label.position, newSpec.label);\n }\n }\n\n return { spec: newSpec, theme };\n }\n\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = (super._getDefaultSpecFromChart(chartSpec) as any) ?? {};\n const { centerX, centerY } = chartSpec;\n if (isValid(centerX)) {\n spec.centerX = centerX;\n }\n if (isValid(centerY)) {\n spec.centerY = centerY;\n }\n return Object.keys(spec).length > 0 ? spec : undefined;\n }\n}\n","import { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../../../../constant/polar';\nimport { calculateMaxRadius, isFunction, isNumber, isValid } from '@visactor/vutils';\nimport { ComponentTypeEnum } from '../../../interface';\nimport type { IPolarAxisCommonSpec } from '../interface';\nimport type { ILayoutRect } from '../../../../typings/layout';\nimport type { IPoint } from '../../../../typings/coordinate';\n\nexport const getPolarAxisInfo = (spec: IPolarAxisCommonSpec, chartSpec: any) => {\n // TODO: 基于数据处理 axis 类型\n const axisType = spec.type ?? (spec.orient === 'angle' ? 'band' : 'linear');\n const componentName = `${ComponentTypeEnum.polarAxis}-${axisType}`;\n\n const startAngleFromSpec = spec.startAngle ?? chartSpec.startAngle;\n const endAngleFromSpec = spec.endAngle ?? chartSpec.endAngle;\n return {\n axisType,\n componentName,\n startAngle: startAngleFromSpec ?? POLAR_START_ANGLE,\n endAngle: endAngleFromSpec ?? (isValid(startAngleFromSpec) ? startAngleFromSpec + 360 : POLAR_END_ANGLE),\n center: isValid(chartSpec.center)\n ? chartSpec.center\n : isValid(chartSpec?.centerX) || isValid(chartSpec?.centerY)\n ? {\n x: chartSpec?.centerX,\n y: chartSpec?.centerY\n }\n : undefined,\n // 优先使用 outerRadius, 但要兼容 radius\n outerRadius: spec.outerRadius ?? spec.radius ?? chartSpec.outerRadius ?? chartSpec.radius,\n layoutRadius: chartSpec.layoutRadius\n };\n};\n\nexport const computeLayoutRadius = (\n getLayoutRadius: () => 'auto' | number | ((layoutRect: ILayoutRect, center: IPoint) => number),\n getLayoutRect: () => ILayoutRect,\n getCenter: () => IPoint,\n getAngles: () => { startAngle: number; endAngle: number }\n) => {\n const layoutRadius = getLayoutRadius();\n if (isNumber(layoutRadius)) {\n return layoutRadius;\n } else if (isFunction(layoutRadius)) {\n return layoutRadius(getLayoutRect(), getCenter());\n }\n\n const rect = getLayoutRect();\n\n if (layoutRadius === 'auto' && rect.width > 0 && rect.height > 0) {\n const { startAngle = 0, endAngle = 2 * Math.PI } = getAngles();\n return calculateMaxRadius(rect, getCenter(), startAngle, endAngle);\n }\n\n return Math.min(rect.width / 2, rect.height / 2);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { degreeToRadian, isValid } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport {\n ARC_START_ANGLE,\n ARC_END_ANGLE,\n ARC_RATIO,\n ARC_MIDDLE_ANGLE,\n ARC_RADIAN,\n ARC_QUADRANT,\n ARC_K,\n POLAR_START_RADIAN,\n POLAR_END_RADIAN\n} from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY, DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { IPoint, Datum, StateValueType, IArcMarkSpec, ILayoutNumber } from '../../typings';\nimport { normalizeStartEndAngle } from '../../util/math';\nimport { isSpecValueWithScale } from '../../util/scale';\nimport { field } from '../../util/object';\nimport type { IModelLayoutOption } from '../../model/interface';\nimport { PolarSeries } from '../polar/polar';\nimport type { IArcMark, IMark, IMarkStyle, IPathMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IArcSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IPieOpt } from '../../data/transforms/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { isDataEmpty, pie } from '../../data/transforms/pie';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { registerEmptyCircleAnimation, registerPieAnimation } from './animation/animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { AnimationStateEnum } from '../../animation/interface';\nimport type { IBasePieSeriesSpec, IPieAnimationParams, IPieSeriesSpec, PieAppearPreset } from './interface';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { centerOffsetConfig } from './animation/centerOffset';\nimport { registerArcMark } from '../../mark/arc';\nimport { pieSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { isNil, polarToCartesian } from '@visactor/vutils';\nimport { PieSeriesSpecTransformer } from './pie-transformer';\nimport { DEFAULT_LABEL_VISIBLE } from '../../constant/label';\nimport { ChartEvent } from '../../constant/event';\nimport { computeLayoutRadius } from '../../component/axis/polar/util/common';\nimport { calcLayoutNumber } from '../../util/space';\n\nexport class BasePieSeries extends PolarSeries implements IArcSeries {\n static readonly transformerConstructor = PieSeriesSpecTransformer as any;\n readonly transformerConstructor = PieSeriesSpecTransformer;\n\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc;\n\n static readonly mark: SeriesMarkMap = pieSeriesMark;\n\n protected _viewDataLabel!: SeriesData;\n\n // 饼图渲染不依赖于极坐标系轴,因此由 series 自己存储相关配置信息\n getCenter = (): IPoint => {\n const layoutRect = this._region.getLayoutRect();\n\n return {\n x: calcLayoutNumber(this._spec?.centerX as ILayoutNumber, layoutRect.width, layoutRect, layoutRect.width / 2),\n y: calcLayoutNumber(this._spec?.centerY as ILayoutNumber, layoutRect.height, layoutRect, layoutRect.height / 2)\n };\n };\n protected _centerOffset!: number;\n\n protected _cornerRadius!: number;\n\n protected _startAngle: number = POLAR_START_RADIAN;\n protected _endAngle: number = POLAR_END_RADIAN;\n protected _padAngle!: number;\n\n protected _pieMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n protected _labelLineMark: IPathMark | null = null;\n\n protected _showEmptyCircle: boolean;\n protected _emptyArcMark: IArcMark | null = null;\n\n protected _showAllZero: boolean;\n protected _supportNegative: boolean;\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => ({\n x: () => this.getCenter().x,\n y: () => this.getCenter().y\n });\n\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._centerOffset = this._spec.centerOffset ?? 0;\n this._cornerRadius = this._spec.cornerRadius ?? 0;\n\n const normalized = normalizeStartEndAngle(\n isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : this._startAngle,\n isValid(this._spec.endAngle) ? degreeToRadian(this._spec.endAngle) : this._endAngle\n );\n this._startAngle = normalized.startAngle;\n this._endAngle = normalized.endAngle;\n this._padAngle = isValid(this._spec.padAngle) ? degreeToRadian(this._spec.padAngle) : 0;\n\n // 值信息给角度,angleField 是为了兼容小组件用法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n this._radiusField = [];\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = [];\n\n this._showEmptyCircle = this._spec.emptyPlaceholder?.showEmptyCircle ?? false;\n\n this._showAllZero = this._spec.showAllZero ?? false;\n this._supportNegative = this._spec.supportNegative ?? false;\n }\n\n initData() {\n super.initData();\n\n const viewData = this.getViewData();\n if (!viewData) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'pie', pie);\n\n viewData.transform(\n {\n type: 'pie',\n options: {\n angleField: () => this._angleField[0],\n startAngle: () => this._startAngle,\n endAngle: () => this._endAngle,\n minAngle: () => (isValid(this._spec.minAngle) ? degreeToRadian(this._spec.minAngle) : 0),\n asStartAngle: ARC_START_ANGLE,\n asEndAngle: ARC_END_ANGLE,\n asRatio: ARC_RATIO,\n asMiddleAngle: ARC_MIDDLE_ANGLE,\n asRadian: ARC_RADIAN,\n asQuadrant: ARC_QUADRANT,\n asK: ARC_K,\n showAllZero: this._showAllZero,\n supportNegative: this._supportNegative,\n showEmptyCircle: this._showEmptyCircle\n } as IPieOpt\n },\n false\n );\n\n const viewDataLabel = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataLabel` });\n viewDataLabel.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataLabel = new SeriesData(this._option, viewDataLabel);\n }\n\n compileData() {\n super.compileData();\n this._viewDataLabel?.compile();\n }\n\n initMark(): void {\n this._pieMark = this._createMark(\n {\n ...BasePieSeries.mark.pie,\n name: this._pieMarkName,\n type: this._pieMarkType\n },\n {\n key: DEFAULT_DATA_KEY,\n groupKey: this._seriesField,\n skipBeforeLayouted: true,\n isSeriesMark: true,\n stateSort: this._spec.pie?.stateSort\n },\n {\n setCustomizedShape: this._spec.pie?.customShape,\n morph: shouldMarkDoMorph(this._spec, this._pieMarkName),\n morphElementKey: this._seriesField\n }\n ) as IArcMark;\n\n if (this._showEmptyCircle) {\n this._emptyArcMark = this._createMark(\n {\n name: 'emptyCircle',\n type: 'arc'\n },\n {\n dataView: false\n }\n ) as IArcMark;\n }\n }\n\n private startAngleScale(datum: Datum) {\n return field(ARC_START_ANGLE)(datum);\n }\n\n private endAngleScale(datum: Datum) {\n return field(ARC_END_ANGLE)(datum);\n }\n\n protected _computeLayoutRadius() {\n return computeLayoutRadius(\n () => this._spec.layoutRadius,\n this.getLayoutRect,\n this.getCenter,\n () => ({ startAngle: this._startAngle, endAngle: this._endAngle })\n );\n }\n\n initMarkStyle(): void {\n const initialStyle: Partial> = {\n x: () => this.getCenter().x,\n y: () => this.getCenter().y,\n fill: this.getColorAttribute(),\n outerRadius: isSpecValueWithScale(this._outerRadius)\n ? this._outerRadius\n : () => this._computeLayoutRadius() * this._outerRadius,\n innerRadius: isSpecValueWithScale(this._innerRadius)\n ? this._innerRadius\n : () => this._computeLayoutRadius() * this._innerRadius,\n cornerRadius: () => this._computeLayoutRadius() * this._cornerRadius,\n startAngle: datum => this.startAngleScale(datum),\n endAngle: datum => this.endAngleScale(datum),\n padAngle: this._padAngle,\n centerOffset: this._centerOffset\n };\n\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(pieMark, initialStyle, 'normal', AttributeLevel.Series);\n }\n\n /**\n * !important\n * !TODO: isDataEmpty执行了2次, 需要结构上优化, 保存isEmpty的状态, 尝试将2次执行优化为1次\n */\n const emptyPieMark = this._emptyArcMark;\n if (emptyPieMark) {\n this.setMarkStyle(\n emptyPieMark,\n {\n ...initialStyle,\n visible: () => {\n const angleField = this.getAngleField()[0];\n return isDataEmpty(this.getViewData().latestData, angleField, this._supportNegative);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._pieMark ? [this._pieMark] : []);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._pieMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pieMark);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string): void {\n super.initMarkStyleWithSpec(mark, spec, key);\n if (mark.name === this._pieMarkName) {\n // radius 配置需要额外处理比例值\n const pieSpec = this.getSpec()[mark.name as 'pie'];\n if (pieSpec) {\n for (const state in pieSpec.state || {}) {\n this.setMarkStyle(mark, this.generateRadiusStyle(pieSpec.state[state]), state, AttributeLevel.User_Mark);\n }\n }\n }\n if (mark.name === 'emptyCircle') {\n // 使用emptyCircle的radius比例值进行覆盖\n this.setMarkStyle(mark, this.generateRadiusStyle(spec.style), 'normal', AttributeLevel.User_Mark);\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n visible: field(DEFAULT_LABEL_VISIBLE).bind(this),\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: this.dataToPositionZ.bind(this)\n });\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n initEvent(): void {\n super.initEvent();\n this._viewDataLabel.getDataView()?.target.addListener('change', this.viewDataLabelUpdate.bind(this));\n }\n\n // 饼图不支持分组\n initGroups() {\n return;\n }\n\n /**\n * @override\n * @param ctx\n */\n onLayoutEnd(ctx: IModelLayoutOption): void {\n this._viewDataLabel.getDataView().reRunAllTransform();\n this.onMarkPositionUpdate();\n super.onLayoutEnd(ctx);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n private viewDataLabelUpdate() {\n this.event.emit(ChartEvent.viewDataLabelUpdate, { model: this });\n this._viewDataLabel.updateData();\n }\n\n protected generateRadiusStyle(spec: any) {\n if (!spec) {\n return;\n }\n const style: any = {};\n spec.outerRadius && (style.outerRadius = () => this._computeLayoutRadius() * spec.outerRadius);\n spec.innerRadius && (style.innerRadius = () => this._computeLayoutRadius() * spec.innerRadius);\n spec.cornerRadius && (style.cornerRadius = () => this._computeLayoutRadius() * spec.cornerRadius);\n return style;\n }\n\n computeCenter(datum: Datum): IPoint {\n return {\n x: this._pieMark.getAttribute('x', datum, 'normal') as number,\n y: this._pieMark.getAttribute('y', datum, 'normal') as number\n };\n }\n\n getRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.outerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.outerRadius;\n return styleRadius ?? this._outerRadius;\n }\n\n getInnerRadius(state: StateValueType = 'normal'): number {\n const styleRadius =\n state === 'normal'\n ? this.getSpec()[this._pieMark?.name || 'pie']?.style?.innerRadius\n : this.getSpec()[this._pieMark?.name || 'pie']?.state?.[state]?.innerRadius;\n return styleRadius ?? this._innerRadius;\n }\n\n computeRadius(r: number, k?: number): number {\n return this._computeLayoutRadius() * r * (isNil(k) ? 1 : k) + this._centerOffset;\n }\n\n computeDatumRadius(datum: Datum, state?: string): number {\n return this._computeLayoutRadius() * this.getRadius(state) + this._centerOffset;\n }\n\n _compareSpec(spec: T, prevSpec: T, ignoreCheckKeys?: { [key: string]: true }) {\n ignoreCheckKeys = ignoreCheckKeys ?? { data: true };\n const defaultIgnoreKeys: string[] = [\n 'centerX',\n 'centerY',\n 'centerOffset',\n 'radius',\n 'innerRadius',\n 'cornerRadius',\n 'startAngle',\n 'endAngle',\n 'padAngle'\n ];\n defaultIgnoreKeys.forEach(key => {\n ignoreCheckKeys[key] = true;\n });\n\n const result = super._compareSpec(spec, prevSpec, ignoreCheckKeys);\n spec = spec ?? ({} as T);\n if (defaultIgnoreKeys.some(key => (spec as any)[key] !== (prevSpec as any)[key])) {\n result.reRender = true;\n result.change = true;\n }\n return result;\n }\n\n computeDatumInnerRadius(datum: Datum, state?: string): number {\n return this._computeLayoutRadius() * this.getInnerRadius(state) + this._centerOffset;\n }\n\n dataToPosition(datum: Datum, checkInViewData?: boolean): IPoint | null {\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const center = this.computeCenter(datum);\n\n return polarToCartesian(center, radius, angle);\n }\n\n dataToCentralPosition = (datum: Datum): IPoint | null => {\n // 和 PieSeries.dataToPosition 实现不同,这里考虑了美观性,返回的位置是曲边梯形的中心\n const angle = datum[ARC_MIDDLE_ANGLE];\n if (isNil(angle)) {\n return null;\n }\n const radius = this.computeDatumRadius(datum);\n const innerRadius = this.computeDatumInnerRadius(datum);\n const center = this.computeCenter(datum);\n\n return polarToCartesian(center, (radius + innerRadius) / 2, angle);\n };\n\n initAnimation() {\n const animationParams: IPieAnimationParams = {\n growFrom: (datum, element, state) => {\n if (state === AnimationStateEnum.appear) {\n return this._startAngle;\n }\n if (state === AnimationStateEnum.disappear) {\n return this._endAngle;\n }\n\n const outState = [AnimationStateEnum.disappear, AnimationStateEnum.exit];\n const markElements = element.mark.elements;\n\n const data = datum;\n const dataIndex = data?.[DEFAULT_DATA_INDEX];\n\n // 当前 mark 在上个状态是否处于第一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex) === undefined) {\n return this._startAngle;\n }\n // 当前 mark 在上个状态是否处于最后一个\n if (markElements.find(e => e.data[0]?.[DEFAULT_DATA_INDEX] > dataIndex) === undefined) {\n return this._endAngle;\n }\n\n // 扇形不在边缘时,获取扇形生长点:获取相邻状态下相邻扇形的边缘\n const prevMarkElement = [...markElements].reverse().find(e => e.data[0]?.[DEFAULT_DATA_INDEX] < dataIndex);\n\n if (outState.includes(state)) {\n return prevMarkElement?.getNextGraphicAttributes()?.endAngle;\n }\n return prevMarkElement?.getGraphicAttribute('endAngle', true);\n }\n };\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._pieMark) {\n const pieAnimationConfig = animationConfig(\n Factory.getAnimationInKey('pie')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.pie, this._spec, this._markAttributeContext)\n );\n\n if (pieAnimationConfig.normal && (pieAnimationConfig.normal as IAnimationTypeConfig).type) {\n pieAnimationConfig.normal = centerOffsetConfig(\n this._pieMark,\n pieAnimationConfig.normal as IAnimationTypeConfig\n );\n }\n\n this._pieMark.setAnimationConfig(pieAnimationConfig);\n }\n\n if (this._emptyArcMark) {\n const pieAnimationConfig = animationConfig(\n Factory.getAnimationInKey('emptyCircle')?.(animationParams, appearPreset ?? 'fadeIn')\n );\n this._emptyArcMark.setAnimationConfig(pieAnimationConfig);\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number) {\n return index;\n }\n\n getActiveMarks(): IMark[] {\n return [this._pieMark];\n }\n}\n\nexport class PieSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie;\n type = SeriesTypeEnum.pie;\n}\n\nexport const registerPieSeries = () => {\n registerArcMark();\n registerPieAnimation();\n registerEmptyCircleAnimation();\n Factory.registerSeries(PieSeries.type, PieSeries);\n};\n","import { array, isArray, isNil, isValid } from '@visactor/vutils';\nimport type { IDataZoomSpec, IIndicatorSpec } from '../../component';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IPolarChartSpec } from './interface';\n\nexport class PolarChartSpecTransformer extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string): boolean {\n return this.seriesType ? type === this.seriesType : true;\n }\n\n protected getIndicatorSpec(spec: any): IIndicatorSpec[] {\n const indicatorSpec = array(spec.indicator) as IIndicatorSpec[];\n const limitRatio = spec.innerRadius ?? spec.series?.[0]?.innerRadius;\n if (isValid(limitRatio)) {\n indicatorSpec.forEach(indicator => {\n if (isNil(indicator.limitRatio)) {\n indicator.limitRatio = limitRatio;\n }\n });\n }\n return indicatorSpec;\n }\n\n protected _getDefaultSeriesSpec(spec: any, pickKeys?: string[]): any {\n /**\n * 旧的radius写法, 仅做兼容\n * @deprecated use outerRadius instead\n */\n const series: any = super._getDefaultSeriesSpec(\n spec,\n ['radius', 'outerRadius', 'innerRadius', 'startAngle', 'endAngle', 'sortDataByAxis'],\n pickKeys\n );\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n /** 处理极坐标系下的 datazoom */\n if (isArray(spec.dataZoom) && spec.dataZoom.length > 0) {\n spec.dataZoom.forEach((zoom: IDataZoomSpec) => {\n // 极坐标系下 datazoom 目前只支持数据过滤\n // 理想效果:角度轴不支持 axis, 径向轴均支持(通过 group.clip 自定义 clipPath 支持)\n if (zoom.filterMode === 'axis') {\n zoom.filterMode = 'filter';\n }\n });\n }\n\n this.transformSeriesSpec(spec);\n\n /* 处理 indicator 配置 */\n if (isValid((spec as any).indicator)) {\n (spec as any).indicator = this.getIndicatorSpec(spec);\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { PolarChartSpecTransformer } from '../../polar';\nimport type { IPieChartSpec } from '../interface';\n\nexport class BasePieChartSpecTransformer extends PolarChartSpecTransformer<\n AdaptiveSpec\n> {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'center',\n 'centerOffset',\n 'cornerRadius',\n 'padAngle',\n 'minAngle',\n 'emptyPlaceholder',\n 'showAllZero',\n 'supportNegative',\n 'layoutRadius'\n ]);\n // 兼容旧版写法\n seriesSpec.categoryField = spec.categoryField || spec.seriesField;\n seriesSpec.valueField = spec.valueField || spec.angleField;\n seriesSpec.emptyCircle = spec.emptyPlaceholder?.emptyCircle;\n return seriesSpec;\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\nimport type { IPieChartSpec } from '../interface';\nimport { BasePieChartSpecTransformer } from './pie-transformer';\n\nexport class BasePieChart extends BaseChart> {\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = BasePieChartSpecTransformer;\n}\n","import { registerPieSeries } from '../../series/pie/pie';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BasePieChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IPieChartSpec } from './interface';\nimport { BasePieChartSpecTransformer } from './base';\n\nexport class PieChart extends BasePieChart {\n static readonly type: string = ChartTypeEnum.pie;\n static readonly seriesType: string = SeriesTypeEnum.pie;\n static readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly transformerConstructor = BasePieChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie;\n readonly seriesType: string = SeriesTypeEnum.pie;\n}\n\nexport const registerPieChart = () => {\n registerPieSeries();\n Factory.registerChart(PieChart.type, PieChart);\n};\n","import { Factory } from './../core/factory';\nimport type { IArc3dMarkSpec } from '../typings';\nimport { BaseArcMark } from './arc';\nimport type { IArc3dMark } from './interface';\nimport { MarkTypeEnum } from './interface/type';\nimport { registerArc3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarArcAnimation } from '../animation/config';\n\nexport class Arc3dMark extends BaseArcMark implements IArc3dMark {\n static readonly type = MarkTypeEnum.arc3d;\n readonly type: MarkTypeEnum = Arc3dMark.type;\n protected _support3d?: boolean = true;\n}\n\nexport const registerArc3dMark = () => {\n registerVGrammarArcAnimation();\n registerArc3dGraphic();\n Factory.registerMark(Arc3dMark.type, Arc3dMark);\n};\n","import type { IPie3dSeriesSpec, IPie3dSeriesTheme } from '../interface';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport { PieSeriesSpecTransformer } from '../pie-transformer';\n\nexport class Pie3dSeriesSpecTransformer<\n T extends IPie3dSeriesSpec = IPie3dSeriesSpec,\n K extends IPie3dSeriesTheme = IPie3dSeriesTheme\n> extends PieSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.pie3d);\n }\n}\n","import { AttributeLevel } from '../../../constant/attribute';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { IArcSeries, SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPie3dSeriesSpec } from '../interface';\nimport { registerArc3dMark } from '../../../mark/arc-3d';\nimport { BasePieSeries } from '../pie';\nimport { pie3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { registerPie3dAnimation } from '../animation/animation';\nimport { Pie3dSeriesSpecTransformer } from './pie-3d-transformer';\nimport type { ITextMark } from '../../../mark/interface';\n\nexport class Pie3dSeries extends BasePieSeries implements IArcSeries {\n static readonly type: string = SeriesTypeEnum.pie3d;\n type = SeriesTypeEnum.pie3d;\n protected _pieMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.pie3d;\n protected _pieMarkType: MarkTypeEnum = MarkTypeEnum.arc3d;\n\n static readonly mark: SeriesMarkMap = pie3dSeriesMark;\n static readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Pie3dSeriesSpecTransformer as any;\n\n protected _angle3d: number;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._angle3d = this._spec?.angle3d ?? -Math.PI / 3;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n const pieMark = this._pieMark;\n if (pieMark) {\n this.setMarkStyle(\n pieMark,\n {\n beta: () => this._angle3d\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark, spec: any = {}): void {\n if (!textMark) {\n return;\n }\n super.initLabelMarkStyle(textMark);\n this.setMarkStyle(textMark, { support3d: true }, undefined, AttributeLevel.Mark);\n }\n}\n\nexport const registerPie3dSeries = () => {\n registerPie3dAnimation();\n registerArc3dMark();\n Factory.registerSeries(Pie3dSeries.type, Pie3dSeries);\n};\n","import { registerPie3dSeries } from '../../../series/pie/3d/pie-3d';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BasePieChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IPie3dChartSpec } from '../interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../../typings';\nimport { BasePieChartSpecTransformer } from '../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Pie3dChartSpecTransformer extends BasePieChartSpecTransformer<\n AdaptiveSpec\n> {\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type === 'pie3d') {\n (s as any).angle3d = spec.angle3d;\n }\n });\n }\n}\n\nexport class Pie3dChart extends BasePieChart> {\n static readonly type: string = ChartTypeEnum.pie3d;\n static readonly seriesType: string = SeriesTypeEnum.pie3d;\n static readonly transformerConstructor = Pie3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = Pie3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pie3d;\n readonly seriesType: string = SeriesTypeEnum.pie3d;\n}\n\nexport const registerPie3dChart = () => {\n register3DPlugin();\n registerPie3dSeries();\n Factory.registerChart(Pie3dChart.type, Pie3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { Datum } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport type { IRoseAnimationParams, RoseAppearPreset } from './interface';\n\nexport const Appear_Grow = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n const from = params.growField === 'angle' ? 0 : params.innerRadius;\n //TODO: 待 vgrammar 内置后替换\n return params.growField === 'angle'\n ? {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n }\n : {\n channel: {\n innerRadius: { from, to: (datum: Datum, element: any) => element.getFinalGraphicAttributes()?.innerRadius },\n outerRadius: { from, to: (datum: Datum, element: any) => element.getFinalGraphicAttributes()?.outerRadius }\n }\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const roseEnter = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleIn' : 'growRadiusIn'\n };\n};\n\nexport const roseExit = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport const roseDisappear = (params: IRoseAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.growField === 'angle' ? 'growAngleOut' : 'growRadiusOut'\n };\n};\n\nexport function rosePresetAnimation(\n params: IRoseAnimationParams,\n preset: RoseAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'growAngle':\n return Appear_Grow({\n ...params,\n growField: 'angle'\n });\n default:\n return Appear_Grow({\n ...params,\n growField: 'radius'\n });\n }\n}\n\nexport const registerRoseAnimation = () => {\n Factory.registerAnimation('rose', (params: IRoseAnimationParams, preset: RoseAppearPreset) => {\n return {\n appear: rosePresetAnimation(params, preset),\n enter: roseEnter(params),\n exit: roseExit(params),\n disappear: roseDisappear(params)\n };\n });\n};\n","import { array } from '@visactor/vutils';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT\n} from '../../../constant/data';\nimport { PolarSeries } from '../polar';\nimport type { IRoseLikeSeriesSpec } from './interface';\n\nexport abstract class RoseLikeSeries extends PolarSeries {\n getStackGroupFields(): string[] {\n return this._angleField;\n }\n\n getStackValueField() {\n return array(this._spec.valueField)[0] || array(this._spec.radiusField)[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // 兼容小组件写法,因为 spec 改造前已经开放了\n this.setAngleField(this._spec.categoryField || this._spec.angleField);\n this.setRadiusField(this._spec.valueField || this._spec.radiusField);\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n this.setInnerRadiusField(this._spec.valueField || this._spec.radiusField);\n if (this.getStack()) {\n this.setValueFieldToStack();\n }\n if (this.getPercent()) {\n this.setValueFieldToPercent();\n }\n }\n\n setValueFieldToStack(): void {\n this.setRadiusField(STACK_FIELD_END);\n this.setInnerRadiusField(STACK_FIELD_START);\n }\n\n setValueFieldToPercent(): void {\n this.setRadiusField(STACK_FIELD_END_PERCENT);\n this.setInnerRadiusField(STACK_FIELD_START_PERCENT);\n }\n\n getDimensionField(): string[] {\n return this._specAngleField;\n }\n getMeasureField(): string[] {\n return this._specRadiusField;\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IRoseSeriesSpec, IRoseSeriesTheme } from './interface';\n\nexport class RoseSeriesSpecTransformer<\n T extends IRoseSeriesSpec = IRoseSeriesSpec,\n K extends IRoseSeriesTheme = IRoseSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.rose);\n }\n}\n","import { POLAR_DEFAULT_RADIUS, POLAR_END_RADIAN, POLAR_START_RADIAN } from '../../../constant/polar';\nimport type { IBaseScale, BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IPolarAxis, IPolarAxisCommonSpec } from './interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { Factory } from '../../../core/factory';\nimport { eachSeries } from '../../../util/model';\nimport type { IPolarTickDataOpt } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IPolarSeries } from '../../../series/interface';\nimport type {\n IPoint,\n IPolarOrientType,\n IPolarPoint,\n Datum,\n StringOrNumber,\n ILayoutType,\n ILayoutNumber\n} from '../../../typings';\nimport { isPolarAxisSeries } from '../../../series/util/utils';\nimport { getAxisItem, getAxisLabelOffset, isValidPolarAxis, shouldUpdateAxis } from '../util';\nimport type { Dict, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n PointService,\n degreeToRadian,\n isValid,\n isArray,\n isValidNumber,\n polarToCartesian,\n cartesianToPolar\n} from '@visactor/vutils';\nimport type { IEffect, IModelSpecInfo } from '../../../model/interface';\nimport { AxisComponent } from '../base-axis';\nimport type { IBandAxisSpec, ITick } from '../interface';\nimport { computeLayoutRadius, getPolarAxisInfo } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { calcLayoutNumber } from '../../../util/space';\n\nexport abstract class PolarAxis\n extends AxisComponent\n implements IPolarAxis\n{\n static type = ComponentTypeEnum.polarAxis;\n type = ComponentTypeEnum.polarAxis;\n name: string = ComponentTypeEnum.polarAxis;\n\n static specKey = 'axes';\n\n protected readonly _defaultBandPosition = 0;\n protected readonly _defaultBandInnerPadding = 0;\n protected readonly _defaultBandOuterPadding = 0;\n\n layoutType: ILayoutType = 'absolute';\n layoutZIndex: number = LayoutZIndex.Axis;\n protected _tick: ITick | undefined = undefined;\n\n protected _center: { x: string | number; y: string | number } | null = null;\n get center() {\n return this._center;\n }\n\n protected _startAngle: number = POLAR_START_RADIAN;\n get startAngle() {\n return this._startAngle;\n }\n\n protected _endAngle: number = POLAR_END_RADIAN;\n get endAngle() {\n return this._endAngle;\n }\n\n protected _orient: IPolarOrientType = 'radius';\n getOrient() {\n return this._orient;\n }\n\n protected getDefaultInteractive() {\n return this._orient !== 'angle';\n }\n\n protected _groupScales: IBaseScale[] = [];\n getGroupScales() {\n return this._groupScales;\n }\n\n private _axisStyle: any;\n private _gridStyle: any;\n\n static getSpecInfo(chartSpec: any): Maybe {\n if (!chartSpec[this.specKey]) {\n return null;\n }\n const isArraySpec = isArray(chartSpec[this.specKey]);\n const axesSpec = isArraySpec ? chartSpec[this.specKey] : [chartSpec[this.specKey]];\n const specInfos: IModelSpecInfo[] = [];\n let angleAxisIndex: number;\n let radiusAxisIndex: number;\n const radiusAxisSpecInfos: IModelSpecInfo[] = [];\n const angleAxisSpecInfos: IModelSpecInfo[] = [];\n\n axesSpec.forEach((s: any, i: number) => {\n if (!isValidPolarAxis(s)) {\n return;\n }\n const { axisType, componentName, startAngle, endAngle, center, outerRadius, layoutRadius } = getPolarAxisInfo(\n s,\n chartSpec\n );\n s.center = center;\n s.startAngle = startAngle;\n s.endAngle = endAngle;\n s.outerRadius = outerRadius;\n s.type = axisType;\n s.layoutRadius = layoutRadius;\n const info = {\n spec: s,\n specPath: isArraySpec ? [this.specKey, i] : [this.specKey],\n specInfoPath: ['component', this.specKey, i],\n type: componentName\n };\n specInfos.push(info);\n if (s.orient === 'radius') {\n radiusAxisSpecInfos.push(info);\n radiusAxisIndex = i;\n } else {\n angleAxisSpecInfos.push(info);\n angleAxisIndex = i;\n }\n });\n radiusAxisSpecInfos.forEach(info => {\n (info as any).angleAxisIndex = angleAxisIndex;\n });\n\n angleAxisSpecInfos.forEach(info => {\n (info as any).radiusAxisIndex = radiusAxisIndex;\n });\n return specInfos;\n }\n\n static createComponent(specInfo: IModelSpecInfo, options: IComponentOption) {\n const { spec, ...others } = specInfo;\n const C = Factory.getComponentInKey(others.type);\n if (C) {\n return new C(spec, {\n ...options,\n ...others\n }) as IPolarAxis;\n }\n options.onError(`Component ${others.type} not found`);\n return null;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n this._coordinateType = 'polar';\n }\n\n effect: IEffect = {\n scaleUpdate: param => {\n this.computeData(param?.value);\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).radiusAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).angleAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this.visible) {\n this._axisStyle = this._getAxisAttributes();\n this._gridStyle = this._getGridAttributes();\n }\n\n this._tick = this._spec.tick;\n this._orient = this._spec.orient === 'angle' ? 'angle' : 'radius';\n this._center = this._spec.center;\n this._startAngle = degreeToRadian(this._spec.startAngle);\n this._endAngle = degreeToRadian(this._spec.endAngle);\n this._inverse = this._spec.inverse;\n }\n\n _transformLayoutPosition = (pos: Partial) => {\n const region = this.getRegions()?.[0];\n return region ? region.getLayoutStartPoint() : pos;\n };\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n protected _tickTransformOption() {\n return {\n ...super._tickTransformOption(),\n noDecimal: this._tick?.noDecimals,\n startAngle: this.startAngle,\n labelOffset: getAxisLabelOffset(this._spec),\n getRadius: () => this.getOuterRadius(),\n inside: this._spec.inside\n } as IPolarTickDataOpt;\n }\n\n protected updateScaleRange() {\n const prevRange = this._scale.range();\n let newRange: [number, number];\n\n if (this.getOrient() === 'radius') {\n newRange = this._inverse\n ? [this.computeLayoutOuterRadius(), this.computeLayoutInnerRadius()]\n : [this.computeLayoutInnerRadius(), this.computeLayoutOuterRadius()];\n } else {\n newRange = this._inverse ? [this._endAngle, this._startAngle] : [this._startAngle, this._endAngle];\n }\n\n if (prevRange && newRange && prevRange[0] === newRange[0] && prevRange[1] === newRange[1]) {\n return false;\n }\n\n this._scale.range(newRange);\n\n return true;\n }\n\n protected collectSeriesField(depth: number, series: IPolarSeries) {\n let field: string | string[];\n\n if (depth > 0) {\n field = series.getGroups()?.fields?.[depth];\n } else {\n field = this.getOrient() === 'radius' ? series.getRadiusField() : series.getAngleField();\n }\n return field;\n }\n\n protected abstract computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[];\n\n protected updateSeriesScale(): void {\n eachSeries(\n this._regions,\n s => {\n if (this.getOrient() === 'radius') {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).radiusAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).setRadiusScale(this._scale);\n (s as IPolarSeries).radiusAxisHelper = this.axisHelper();\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as IPolarSeries).angleAxisHelper,\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as IPolarSeries).setAngleScale(this._scale);\n (s as IPolarSeries).angleAxisHelper = this.axisHelper();\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected getSeriesStatisticsField(s: IPolarSeries) {\n const f = this.getOrient() === 'radius' ? s.getRadiusField() : s.getAngleField();\n if (isContinuous(this._scale.type)) {\n return f;\n }\n return [f[0]];\n }\n\n protected initGroupScales() {\n // do nothing\n }\n\n // axisHelper\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n\n const helper = {\n isContinuous: isContinuous(this._scale.type),\n dataToPosition: this.dataToPosition.bind(this),\n coordToPoint: this.coordToPoint.bind(this),\n pointToCoord: this.pointToCoord.bind(this),\n center: this.getCenter.bind(this),\n layoutRadius: this._computeLayoutRadius.bind(this),\n getScale,\n getAxisId: () => this.id,\n getSpec: () => this._spec\n };\n return helper;\n }\n\n positionToData(position: IPoint) {\n const coord = this.pointToCoord(position);\n if (this.getOrient() === 'radius') {\n return this.invert(coord.radius);\n }\n return this.invert(coord.angle);\n }\n\n /**\n * 将半径和角度转换为笛卡尔坐标点\n * @param point 角度 & 弧度信息\n * @returns 笛卡尔坐标点 { x, y }\n */\n coordToPoint(point: IPolarPoint): IPoint {\n // center & startAngle 都是坐标系转换的配置,在 scale 中不生效,仅在最终转换时生效\n const center = this.getCenter();\n\n return polarToCartesian(center, point.radius, point.angle);\n }\n\n /**\n * 将笛卡尔坐标转换为对应的半径和弧度\n * @param point 笛卡尔坐标点 { x, y }\n * @returns 角度 & 弧度信息 { radius, angle }\n */\n pointToCoord(point: IPoint): IPolarPoint {\n const center = this.getCenter();\n const startAngle = this._startAngle;\n const endAngle = this._endAngle;\n return cartesianToPolar(point, center, startAngle, endAngle);\n }\n\n /**\n * 获取坐标轴圆心位置\n * @returns 圆心位置\n */\n getCenter = (): IPoint => {\n const layoutRect = this.getRefLayoutRect();\n const { width, height } = layoutRect;\n\n return {\n x: calcLayoutNumber(this._center?.x as ILayoutNumber, width, layoutRect, width / 2),\n y: calcLayoutNumber(this._center?.y as ILayoutNumber, height, layoutRect, height / 2)\n };\n };\n\n /**\n * 获取极坐标半径值\n * @returns 半径数值\n */\n getOuterRadius(): number {\n return this.computeLayoutOuterRadius();\n }\n\n /**\n * 获取极坐标内半径值\n * @returns 内半径数值\n */\n getInnerRadius(): number {\n return this.computeLayoutInnerRadius();\n }\n\n updateLayoutAttribute(): void {\n if (this._visible) {\n if (this.getOrient() === 'radius') {\n this._layoutRadiusAxis();\n } else {\n this._layoutAngleAxis();\n }\n }\n\n super.updateLayoutAttribute();\n }\n\n protected _getNormalizedValue(values: any[], length: number) {\n return length === 0 ? 0 : (this.dataToPosition(values) - this._getStartValue()) / length;\n }\n\n protected getLabelItems(length: number) {\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n return [\n tickLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n ];\n }\n return [];\n }\n protected _getStartValue() {\n if (this.getOrient() === 'radius') {\n return this.computeLayoutInnerRadius();\n }\n\n return this._startAngle;\n }\n\n private _layoutAngleAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const angleRange = this._endAngle - this._startAngle;\n const items = this.getLabelItems(angleRange);\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n inside: this._spec.inside,\n center,\n radius,\n innerRadius,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n sides: this._getRelatedAxis((this._option as any).radiusAxisIndex)?.getSpec()?.grid?.smooth\n ? undefined\n : this.getScale().domain().length\n };\n const attrs: any = {\n ...commonAttrs,\n size: this.getRefLayoutRect(),\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items,\n orient: 'angle'\n };\n if (this._spec.grid.visible) {\n attrs.grid = {\n type: 'line',\n smoothLink: true,\n items: items[0],\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n private _layoutRadiusAxis(): void {\n const center = this.getCenter();\n const radius = this.computeLayoutOuterRadius();\n const innerRadius = this.computeLayoutInnerRadius();\n const endPoint = this.coordToPoint({ angle: this._startAngle, radius });\n const startPoint = this.coordToPoint({ angle: this._startAngle, radius: innerRadius });\n const distance = PointService.distancePP(startPoint, endPoint);\n const items = this.getLabelItems(distance);\n const commonAttrs = {\n ...this.getLayoutStartPoint(),\n start: startPoint,\n end: endPoint,\n verticalFactor: -1\n };\n const attrs: any = {\n ...commonAttrs,\n title: {\n text: this._spec.title.text || this._dataFieldText\n },\n items,\n orient: 'radius'\n };\n if (this._spec.grid?.visible) {\n attrs.grid = {\n items: items[0],\n type: this._spec.grid?.smooth ? 'circle' : 'polygon',\n center,\n closed: true,\n sides: this._getRelatedAxis((this._option as any).angleAxisIndex)\n ?.getScale()\n .domain().length,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n ...commonAttrs\n };\n }\n this._update(attrs);\n }\n\n protected _getRelatedAxis(index: number): IPolarAxis | undefined {\n if (isValid(index)) {\n return this._option.getComponentByIndex(this.specKey, index) as IPolarAxis;\n }\n return undefined;\n }\n\n private _computeLayoutRadius() {\n return computeLayoutRadius(\n () => this._spec.layoutRadius,\n this.getRefLayoutRect,\n this.getCenter,\n () => ({ startAngle: this._startAngle, endAngle: this._endAngle })\n );\n }\n\n private computeLayoutOuterRadius() {\n /**\n * 兼容radius旧配置\n * @deprecated use outerRadius instead\n */\n const radius = this._spec.outerRadius ?? this._spec.radius;\n const outerRadius = radius ?? this.getRefSeriesRadius().outerRadius;\n return this._computeLayoutRadius() * outerRadius;\n }\n\n private computeLayoutInnerRadius() {\n const innerRadius = this._spec.innerRadius ?? this.getRefSeriesRadius().innerRadius;\n return this._computeLayoutRadius() * innerRadius;\n }\n\n private getRefLayoutRect = () => {\n return this.getRegions()[0].getLayoutRect();\n };\n\n private getRefSeriesRadius() {\n let outerRadius: number = POLAR_DEFAULT_RADIUS;\n let innerRadius: number = 0;\n const chartSpec = this.getChart().getSpec() as any;\n // FIXME: 为了保证 common 图表能够应用系列的 radius 配置,当前从相应的 region 中取到 radius 信息\n eachSeries(\n this.getRegions(),\n s => {\n const series = s as IPolarSeries;\n if (isPolarAxisSeries(series.type)) {\n const {\n outerRadius: seriesRadius = chartSpec.outerRadius,\n innerRadius: seriesInnerRadius = chartSpec.innerRadius\n } = series;\n if (isValidNumber(seriesRadius)) {\n outerRadius = seriesRadius;\n }\n if (isValidNumber(seriesInnerRadius)) {\n innerRadius = seriesInnerRadius;\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n return { outerRadius, innerRadius };\n }\n\n private _update(attrs: Dict) {\n const { grid: gridAttrs, ...axisAttrs } = attrs;\n const axisProduct = this._axisMark.getProduct(); // 获取语法元素并更新\n axisProduct.encode(mergeSpec({}, this._axisStyle, axisAttrs));\n\n if (this._gridMark) {\n const gridProduct = this._gridMark.getProduct(); // 获取语法元素并更新\n gridProduct.encode(mergeSpec({}, this._gridStyle, gridAttrs));\n }\n }\n\n invert(value: number): number {\n if (this.getOrient() === 'angle' && this._scale.type === 'band') {\n //极坐标轴需要手动取模,超出range时默认会截断\n const range = this._scale.range();\n const rangeValue = range[range.length - 1] - range[0];\n const bandPosition = (this.getSpec() as IBandAxisSpec).bandPosition ?? this._defaultBandPosition;\n const offset = bandPosition === 0.5 ? 0 : (this._scale as BandScale).bandwidth() / 2;\n if (range[0] < 0) {\n const angle = value + offset;\n const transformedAngle = ((angle + Math.abs(range[0])) % rangeValue) - Math.abs(range[0]);\n return this._scale.invert(transformedAngle);\n }\n return this._scale.invert((value + offset) % rangeValue);\n }\n\n return this._scale.invert(value);\n }\n}\n","import type { BandScale, IBaseScale } from '@visactor/vscale';\nimport { isFunction, isValid, maxInArray, minInArray, isNumberClose } from '@visactor/vutils';\nimport type { IPolarTickDataOpt, ITickCallbackOption, ITickData } from '../../type';\nimport { MIN_TICK_GAP, convertDomainToTickData, labelOverlap } from '../util';\nimport { AABBBounds } from '@visactor/vutils';\nimport { initTextMeasure } from '../../../util/text';\nimport { getPolarAngleLabelPosition } from '../../util';\n\nexport const getPolarAngleLabelBounds = (scale: IBaseScale, domain: any[], op: IPolarTickDataOpt): AABBBounds[] => {\n const { labelStyle, getRadius, labelOffset, labelFormatter, inside } = op;\n const radius = getRadius?.();\n const labelAngle = labelStyle.angle ?? 0;\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const angle = scale.scale(v);\n const center = { x: 0, y: 0 };\n let textX = 0;\n let textY = 0;\n const orient = {\n align: labelStyle.textAlign,\n baseline: labelStyle.textBaseline\n };\n\n const { x, y } = getPolarAngleLabelPosition(angle, center, radius, labelOffset, inside);\n\n if (!orient.align) {\n if (isNumberClose(x, center.x)) {\n if (!orient.baseline) {\n if (y > center.y) {\n orient.baseline = 'top';\n } else {\n orient.baseline = 'bottom';\n }\n }\n } else if (x > center.x) {\n orient.align = 'left';\n } else if (x < center.x) {\n orient.align = 'right';\n }\n }\n\n textX = x + (orient.align === 'right' ? -textWidth : orient.align === 'left' ? 0 : -textWidth / 2);\n textY = y + (orient.baseline === 'bottom' ? -textHeight : orient.baseline === 'top' ? 0 : -textHeight / 2);\n\n // 计算 label 包围盒\n const bounds = new AABBBounds()\n .set(textX, textY, textX + textWidth, textY + textHeight)\n .rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);\n return bounds;\n });\n\n return labelBoundsList;\n};\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽高并存为数组labelBoundsList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到labelBoundsList和scale.range());\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const polarAngleAxisDiscreteTicks = (scale: BandScale, op: IPolarTickDataOpt): ITickData[] => {\n const { tickCount, forceTickCount, tickStep, getRadius, labelOffset, labelGap = 0, labelStyle } = op;\n const radius = getRadius?.();\n if (!radius) {\n return convertDomainToTickData(scale.domain());\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n const count = isFunction(tickCount)\n ? (tickCount as (option: ITickCallbackOption) => number)({ axisLength: rangeSize, labelStyle })\n : tickCount;\n scaleTicks = scale.ticks(count);\n } else if (op.sampling) {\n const domain = scale.domain();\n const range = scale.range();\n\n const labelBoundsList = getPolarAngleLabelBounds(scale, domain, op);\n\n const rangeStart = minInArray(range);\n const rangeEnd = maxInArray(range);\n\n const axisLength = Math.abs(rangeEnd - rangeStart) * (radius + labelOffset);\n const incrementUnit = axisLength / domain.length;\n const { step, delCount } = getStep(\n domain,\n labelBoundsList,\n labelGap,\n Math.floor(\n labelBoundsList.reduce((min, curBounds) => {\n return Math.min(min, curBounds.width(), curBounds.height());\n }, Number.MAX_VALUE) / incrementUnit\n ) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - delCount);\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks);\n};\n\n/** 计算合适的step */\nconst getStep = (domain: any[], labelBoundsList: AABBBounds[], labelGap: number, defaultStep: number) => {\n let step = defaultStep;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n if (success) {\n break;\n }\n } while (step <= domain.length);\n\n let delCount = 0;\n if (domain.length > 2) {\n let ptr = domain.length - (domain.length % step);\n if (ptr >= domain.length) {\n ptr -= step;\n }\n // 判断首尾是否互相覆盖\n while (ptr > 0 && labelOverlap(labelBoundsList[0], labelBoundsList[ptr])) {\n delCount++;\n ptr -= step;\n }\n }\n\n return {\n step,\n delCount\n };\n};\n","import { BandScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport { mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport type { IPolarBandAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid, registerCircleAxis, registerCircleGrid } from '@visactor/vgrammar-core';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { polarAngleAxisDiscreteTicks } from '@visactor/vrender-components';\n\nexport interface PolarBandAxis\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n PolarAxis {}\n\nexport class PolarBandAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarBandAxis;\n type = ComponentTypeEnum.polarBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n // axisHelper\n protected axisHelper() {\n const helper = super.axisHelper();\n const getBandwidth = (depth: number) => {\n return (helper.getScale(depth) as BandScale).bandwidth();\n };\n\n return { ...helper, getBandwidth };\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, polarAngleAxisDiscreteTicks);\n return name;\n }\n transformScaleDomain() {\n // do nothing\n }\n}\nmixin(PolarBandAxis, BandAxisMixin);\n\nexport const registerPolarBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerCircleAxis();\n registerCircleGrid();\n registerAxis();\n Factory.registerComponent(PolarBandAxis.type, PolarBandAxis);\n};\n","import { LinearScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport type { IPolarLinearAxisSpec } from './interface/spec';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { mixin } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport type { IPolarAxisHelper } from './interface';\nimport { registerLineAxis, registerLineGrid, registerCircleAxis, registerCircleGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface PolarLinearAxis\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'transformScaleDomain'\n | 'valueToPosition'\n | 'computeLinearDomain'\n | 'setScaleNice'\n | 'setExtendDomain'\n >,\n PolarAxis {}\n\nexport class PolarLinearAxis extends PolarAxis {\n static type = ComponentTypeEnum.polarLinearAxis;\n type = ComponentTypeEnum.polarLinearAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale = new LinearScale();\n protected declare _groupScales: LinearScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n }\n\n protected initScales() {\n super.initScales();\n this.setScaleNice();\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IPolarAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n return helper as any;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n}\n\nmixin(PolarLinearAxis, LinearAxisMixin);\n\nexport const registerPolarLinearAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerCircleAxis();\n registerCircleGrid();\n registerAxis();\n Factory.registerComponent(PolarLinearAxis.type, PolarLinearAxis);\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { Datum } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerRoseAnimation } from './animation';\nimport type { IRoseAnimationParams, IRoseSeriesSpec, RoseAppearPreset } from './interface';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerArcMark } from '../../mark/arc';\nimport { roseSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IArcMark, ILabelMark, IMark, ITextMark } from '../../mark/interface';\nimport { RoseSeriesSpecTransformer } from './rose-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport const DefaultBandWidth = 0.5;\n\nexport class RoseSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.rose;\n type = SeriesTypeEnum.rose;\n\n static readonly mark: SeriesMarkMap = roseSeriesMark;\n static readonly transformerConstructor = RoseSeriesSpecTransformer as any;\n readonly transformerConstructor = RoseSeriesSpecTransformer;\n\n private _roseMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n\n initMark(): void {\n this.initRoseMark();\n }\n\n initMarkStyle(): void {\n this.initRoseMarkStyle();\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y\n };\n };\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n private initRoseMark() {\n this._roseMark = this._createMark(\n RoseSeries.mark.rose,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.rose?.stateSort\n },\n {\n setCustomizedShape: this._spec.rose?.customShape,\n morph: shouldMarkDoMorph(this._spec, RoseSeries.mark.rose.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IArcMark;\n }\n\n private getRoseAngle() {\n const angleBandWidth =\n this.angleAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n return angleBandWidth;\n }\n\n private startAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private endAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.getRoseAngle() -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private initRoseMarkStyle() {\n const roseMark = this._roseMark;\n if (roseMark) {\n this.setMarkStyle(roseMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: (datum: Datum) => this.startAngleScale(datum),\n endAngle: (datum: Datum) => this.endAngleScale(datum),\n fill: this.getColorAttribute(),\n outerRadius: (datum: Datum) =>\n valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n ),\n innerRadius: (datum: Datum) => {\n if (!this.getStack()) {\n return 0;\n }\n const stackStart = valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._innerRadiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n );\n return stackStart <= Number.MIN_VALUE\n ? this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n : stackStart;\n }\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._roseMark && this._tooltipHelper.activeTriggerSet.mark.add(this._roseMark);\n }\n\n initLabelMarkStyle(textMark: ILabelMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: 0\n });\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n if (this._roseMark) {\n const animationParams: IRoseAnimationParams = {\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n };\n this._roseMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rose')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.rose, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._roseMark];\n }\n}\n\nexport const registerRoseSeries = () => {\n Factory.registerSeries(RoseSeries.type, RoseSeries);\n registerArcMark();\n registerRoseAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import type { IPolarAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\n\nexport class RoseLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return true;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n\n // 兼容旧版写法\n series.categoryField = spec.categoryField || spec.angleField;\n series.valueField = spec.valueField || spec.radiusField;\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // set default config for axis\n if (this.needAxes()) {\n if (!spec.axes) {\n spec.axes = [];\n }\n const haxAxes = { radius: false, angle: false };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n haxAxes.radius = true;\n }\n if (orient === 'angle') {\n haxAxes.angle = true;\n }\n });\n if (!haxAxes.angle) {\n spec.axes.push({\n orient: 'angle'\n });\n }\n if (!haxAxes.radius) {\n spec.axes.push({\n orient: 'radius'\n });\n }\n }\n }\n}\n","import { array, isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec } from '../../component';\nimport { POLAR_DEFAULT_RADIUS } from '../../constant/polar';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class RoseChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.radius = spec.radius ?? POLAR_DEFAULT_RADIUS;\n series.outerRadius = spec.outerRadius ?? POLAR_DEFAULT_RADIUS;\n series.innerRadius = spec.innerRadius ?? 0;\n\n series.stack = spec.stack;\n series.percent = spec.percent;\n return series;\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n ['domainLine', 'grid', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (axis.orient === 'angle' && isNil((axis as IPolarBandAxisSpec).bandPosition)) {\n // 玫瑰图的中心点应该是带宽的中心,保证第一个扇形是从坐标系的 startAngle 开始的\n (axis as IPolarBandAxisSpec).bandPosition = 0.5;\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'rect'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRoseSeries } from '../../series/rose/rose';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from './interface';\nimport { RoseChartSpecTransformer } from './rose-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class RoseChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rose;\n static readonly seriesType: string = SeriesTypeEnum.rose;\n static readonly transformerConstructor = RoseChartSpecTransformer;\n readonly transformerConstructor = RoseChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rose;\n readonly seriesType: string = SeriesTypeEnum.rose;\n}\n\nmixin(RoseChart, StackChartMixin);\n\nexport const registerRoseChart = () => {\n registerRoseSeries();\n Factory.registerChart(RoseChart.type, RoseChart);\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { ACustomAnimate, TagPointsUpdate } from '@visactor/vrender-core';\nimport { Point, isValidNumber, polarToCartesian, cartesianToPolar } from '@visactor/vutils';\nimport { isClose, isValidPoint, normalizeAngle } from '../../util';\nimport type { IPoint } from '../../typings';\n\nexport class PolarPointUpdate extends ACustomAnimate<{ x: number; y: number }> {\n declare valid: boolean;\n\n private _fromAngle: number;\n private _fromRadius: number;\n\n private _toAngle: number;\n private _toRadius: number;\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: { x: number; y: number; center: IPointLike },\n to: { x: number; y: number; center: IPointLike },\n duration: number,\n easing: EasingType,\n params: any\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n if (!this._center || !this._prevCenter) {\n this.valid = false;\n }\n }\n\n getEndProps(): Record {\n if (this.valid === false) {\n return {};\n }\n return polarToCartesian(this._center, this._toRadius, this._toAngle);\n }\n\n onBind(): void {\n const { angle: fromAngle, radius: fromRadius } = cartesianToPolar(this.from, this._prevCenter);\n const { angle: toAngle, radius: toRadius } = cartesianToPolar(this.to, this._center);\n if (!isValidNumber(toAngle * toRadius)) {\n this.valid = false;\n }\n this._fromAngle = isValidNumber(fromAngle) ? fromAngle : toAngle;\n this._fromRadius = isValidNumber(fromRadius) ? fromRadius : toRadius;\n this._toAngle = toAngle;\n this._toRadius = toRadius;\n if (isClose(this._fromAngle, this._toAngle) && isClose(this._fromRadius, this._toRadius)) {\n this.valid = false;\n }\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.valid === false) {\n out.x = this.to.x;\n out.y = this.to.y;\n return;\n }\n if (end) {\n const { x, y } = this.getEndProps();\n out.x = x;\n out.y = y;\n out.center = this._center;\n } else {\n const { x, y } = polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n this._fromRadius + (this._toRadius - this._fromRadius) * ratio,\n this._fromAngle + (this._toAngle - this._fromAngle) * ratio\n );\n out.x = x;\n out.y = y;\n }\n }\n}\n\n// @ts-ignore\n// FIXME: some private attribute should be changed to protected for better inheritance\nexport class PolarTagPointsUpdate extends TagPointsUpdate {\n private declare points: IPointLike[];\n private declare interpolatePoints: [IPointLike, IPointLike][];\n\n private _center: IPointLike;\n private _prevCenter: IPointLike;\n\n constructor(\n from: any,\n to: any,\n duration: number,\n easing: EasingType,\n params?: {\n newPointAnimateType?: 'grow' | 'appear';\n }\n ) {\n super(from, to, duration, easing, params);\n this._center = to.center;\n this._prevCenter = from.center;\n }\n onUpdate(end: boolean, ratio: number, out: Record): void {\n // if not create new points, multi points animation might not work well.\n this.points = this.points.map((point, index) => {\n const newPoint = this.polarPointInterpolation(\n this.interpolatePoints[index][0],\n this.interpolatePoints[index][1],\n ratio\n );\n if (end) {\n out.center = this._center;\n }\n newPoint.context = point.context;\n return newPoint;\n });\n out.points = this.points;\n }\n\n private _interpolationSinglePoint(pointA: IPoint, pointB: IPoint, ratio: number): IPoint {\n if (!isValidPoint(pointA) && !isValidPoint(pointB)) {\n return pointB;\n }\n const polarPointA = cartesianToPolar(pointA, this._prevCenter);\n const polarPointB = cartesianToPolar(pointB, this._center);\n let angleA = normalizeAngle(polarPointA.angle);\n let angleB = normalizeAngle(polarPointB.angle);\n\n // handle center point radius\n if (!isValidNumber(angleA) && isValidNumber(angleB)) {\n angleA = angleB;\n }\n if (isValidNumber(angleA) && !isValidNumber(angleB)) {\n angleB = angleA;\n }\n const angle = angleA + (angleB - angleA) * ratio;\n const radius = polarPointA.radius + (polarPointB.radius - polarPointA.radius) * ratio;\n\n return polarToCartesian(\n {\n x: this._prevCenter.x + (this._center.x - this._prevCenter.x) * ratio,\n y: this._prevCenter.y + (this._center.y - this._prevCenter.y) * ratio\n },\n radius,\n angle\n );\n }\n\n private polarPointInterpolation(pointA: IPointLike, pointB: IPointLike, ratio: number): IPointLike {\n const { x, y } = this._interpolationSinglePoint(pointA, pointB, ratio);\n const { x: x1, y: y1 } = this._interpolationSinglePoint(\n {\n x: pointA.x1,\n y: pointA.y1\n },\n {\n x: pointB.x1,\n y: pointB.y1\n },\n ratio\n );\n\n const point = new Point(x as number, y as number, x1, y1);\n point.defined = pointB.defined;\n return point;\n }\n}\n","import type { Datum, IAnimationTypeConfig, IElement, MarkAnimationSpec } from '@visactor/vgrammar-core';\nimport { ClipAngleAnimate } from '@visactor/vrender-core';\nimport { Factory } from '../../core/factory';\nimport { PolarPointUpdate, PolarTagPointsUpdate } from '../polar/animation';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { registerArc } from '@visactor/vrender-kits';\nimport type { IRadarAnimationParams, RadarAppearPreset } from './interface';\n\nexport const radarFadeAnimation = (animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'fadeIn' : 'fadeOut'\n});\n\nexport const radarGrowAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => ({\n type: animationType === 'in' ? 'growPointsIn' : 'growPointsOut',\n options: () => ({\n center: params.center()\n })\n});\n\nexport function radarPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarGrowAnimation(params, animationType);\n }\n}\n\nexport const radarSymbolMoveAnimation = (params: IRadarAnimationParams, animationType: 'in' | 'out') => {\n const xFrom = () => params.center()?.x;\n const xTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('x');\n const yFrom = () => params.center()?.y;\n const yTo = (datum: Datum, element: IElement) => element.getGraphicAttribute('y');\n if (animationType === 'in') {\n return {\n channel: {\n x: { from: xFrom, to: xTo },\n y: { from: yFrom, to: yTo }\n }\n };\n }\n return {\n channel: {\n x: { from: xTo, to: xFrom },\n y: { from: yTo, to: yFrom }\n }\n };\n};\n\nexport function radarSymbolPresetAnimation(\n params: IRadarAnimationParams,\n preset: RadarAppearPreset,\n animationType: 'in' | 'out'\n) {\n switch (preset) {\n case 'fadeIn':\n return radarFadeAnimation(animationType);\n case 'clipIn':\n case 'grow':\n default:\n return radarSymbolMoveAnimation(params, animationType);\n }\n}\n\nexport const radarGroupClipAnimation = (\n params: IRadarAnimationParams,\n animationType: 'in' | 'out'\n): IAnimationTypeConfig => {\n return {\n custom: ClipAngleAnimate,\n customParameters: (datum: any, element: IElement) => {\n return {\n group: element.getGraphicItem(),\n startAngle: params.startAngle ?? Math.PI / 2,\n orient: 'clockwise',\n center: params.center(),\n radius: params.radius(),\n animationType\n };\n }\n };\n};\n\nexport const registerRadarAnimation = () => {\n Factory.registerAnimation('radar', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'in'),\n enter: radarPresetAnimation(params, preset, 'in'),\n exit: radarPresetAnimation(params, preset, 'out'),\n disappear: preset === 'clipIn' ? undefined : radarPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['points', 'defined', 'center'] }\n },\n {\n channel: ['points', 'center'],\n custom: PolarTagPointsUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec;\n });\n Factory.registerAnimation(\n 'radarSymbol',\n (params: IRadarAnimationParams, preset: RadarAppearPreset) =>\n ({\n appear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'in'),\n enter: { type: 'scaleIn' },\n exit: { type: 'scaleOut' },\n disappear: preset === 'clipIn' ? undefined : radarSymbolPresetAnimation(params, preset, 'out'),\n update: [\n {\n options: { excludeChannels: ['x', 'y', 'center'] }\n },\n {\n channel: ['x', 'y', 'center'],\n custom: PolarPointUpdate,\n customParameters: params,\n duration: DEFAULT_ANIMATION_CONFIG.update.duration,\n easing: DEFAULT_ANIMATION_CONFIG.update.easing\n }\n ]\n } as MarkAnimationSpec)\n );\n Factory.registerAnimation('radarGroup', (params: IRadarAnimationParams, preset: RadarAppearPreset) => {\n return {\n appear: radarGroupClipAnimation(params, 'in'),\n disappear: radarGroupClipAnimation(params, 'out')\n };\n });\n registerArc(); // clipAngle animation will use arc graphic\n};\n","/* eslint-disable no-duplicate-imports */\nimport { LineLikeSeriesMixin } from '../mixin/line-mixin';\nimport type { IAreaMark, ILineMark, IMark, IMarkProgressiveConfig } from '../../mark/interface';\nimport { POLAR_START_RADIAN } from '../../constant/polar';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { DEFAULT_LINEAR_INTERPOLATE } from '../../typings/interpolate';\nimport type { Datum } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { degreeToRadian, isArray, mixin, isValid } from '@visactor/vutils';\nimport type { IRadarAnimationParams, IRadarSeriesSpec, RadarAppearPreset } from './interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerRadarAnimation } from './animation';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerAreaMark } from '../../mark/area';\nimport { registerLineMark } from '../../mark/line';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { radarSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\n\nexport interface RadarSeries\n extends Pick<\n LineLikeSeriesMixin,\n | 'initLineMark'\n | 'initSymbolMark'\n | 'initLabelMarkStyle'\n | 'initLineMarkStyle'\n | 'initSymbolMarkStyle'\n | 'encodeDefined'\n | '_lineMark'\n | '_symbolMark'\n | 'addOverlapCompile'\n >,\n RoseLikeSeries {}\n\nexport class RadarSeries extends RoseLikeSeries {\n static readonly type: string = SeriesTypeEnum.radar;\n type = SeriesTypeEnum.radar;\n\n static readonly mark: SeriesMarkMap = radarSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer as any;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n\n private _areaMark: ILineMark;\n protected _sortDataByAxis: boolean = false;\n\n initGroups() {\n // do nothing\n }\n\n compile(): void {\n super.compile();\n this.addOverlapCompile();\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n const isAreaVisible = this._spec.area?.visible !== false && this._spec.area?.style?.visible !== false;\n const seriesMark = this._spec.seriesMark ?? 'area';\n this.initAreaMark(progressive, isAreaVisible && seriesMark === 'area');\n this.initLineMark(progressive, seriesMark === 'line' || (seriesMark === 'area' && !isAreaVisible));\n this.initSymbolMark(progressive, seriesMark === 'point');\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n this.initLineMarkStyle();\n this.initSymbolMarkStyle();\n [this._lineMark, this._symbolMark, this._areaMark].forEach(mark => {\n if (mark) {\n this.setMarkStyle(mark, {\n center: () => {\n return this.angleAxisHelper?.center();\n }\n });\n }\n });\n }\n\n initAreaMark(progressive: IMarkProgressiveConfig, isSeriesMark: boolean) {\n this._areaMark = this._createMark(\n RadarSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark,\n stateSort: this._spec.area?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.area?.customShape\n }\n ) as IAreaMark;\n }\n\n initAreaMarkStyle() {\n const areaMark = this._areaMark;\n if (areaMark) {\n this.setMarkStyle(\n areaMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n return this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).x;\n },\n y1: (datum: Datum) => {\n if (!datum || !this.angleAxisHelper || !this.radiusAxisHelper) {\n return Number.NaN;\n }\n\n const value = this.valueToPosition(\n this.getDatumPositionValues(datum, this._angleField),\n this.getStack()\n ? this.getDatumPositionValues(datum, this._innerRadiusField)\n : this.radiusScale.domain()[0]\n ).y;\n return value;\n },\n fill: this.getColorAttribute(),\n curveType: DEFAULT_LINEAR_INTERPOLATE,\n closePath: true\n },\n 'normal',\n AttributeLevel.Series\n );\n\n if (this._invalidType !== 'zero') {\n this.setMarkStyle(\n areaMark,\n {\n defined: this._getInvalidDefined.bind(this),\n connectedType: this._getInvalidConnectType()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n this.event.on(ChartEvent.viewDataStatisticsUpdate, { filter: param => param.model === this }, () => {\n this.encodeDefined(areaMark, 'defined');\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n const { group, mark } = this._tooltipHelper.activeTriggerSet;\n if (this._lineMark) {\n group.add(this._lineMark);\n }\n if (this._areaMark) {\n group.add(this._areaMark);\n }\n if (this._symbolMark) {\n mark.add(this._symbolMark);\n group.add(this._symbolMark);\n }\n }\n\n initAnimation() {\n const animationParams: IRadarAnimationParams = {\n center: () => this.angleAxisHelper?.center(),\n radius: () => {\n const rect = this.getLayoutRect();\n return Math.min(rect.width, rect.height);\n },\n startAngle: isValid(this._spec.startAngle) ? degreeToRadian(this._spec.startAngle) : POLAR_START_RADIAN\n };\n const appearPreset = ((this._spec?.animationAppear as IStateAnimateSpec)?.preset ??\n 'clipIn') as RadarAppearPreset;\n\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('radarGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n // TODO: animationType\n const markAnimationMap: [IMark, string][] = [\n [this._areaMark, 'radar'],\n [this._lineMark, 'radar'],\n [this._symbolMark, 'radarSymbol']\n ];\n\n // 为 mark 添加动画\n markAnimationMap.forEach(([mark, animation]) => {\n if (isValid(mark)) {\n const getAnimation = Factory.getAnimationInKey(animation);\n mark.setAnimationConfig(\n animationConfig(\n getAnimation?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n getDefaultShapeType() {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._areaMark, this._symbolMark, this._lineMark];\n }\n\n getSeriesStyle(datum: Datum) {\n return (attribute: string) => {\n let result = this._seriesMark?.getAttribute(attribute as any, datum) ?? undefined;\n if (attribute === 'fill' && !result) {\n attribute = 'stroke';\n result = this._seriesMark?.getAttribute(attribute, datum) ?? undefined;\n }\n if (attribute === 'stroke' && isArray(result)) {\n return result[0];\n }\n return result;\n };\n }\n}\n\nmixin(RadarSeries, LineLikeSeriesMixin);\n\nexport const registerRadarSeries = () => {\n Factory.registerSeries(RadarSeries.type, RadarSeries);\n registerAreaMark();\n registerLineMark();\n registerSymbolMark();\n registerRadarAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { array } from '../../util';\nimport { RoseLikeChartSpecTransformer } from '../polar';\nimport type { IRoseChartSpec } from '../rose';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class RadarChartSpecTransformer<\n T extends IRoseChartSpec = IRoseChartSpec\n> extends RoseLikeChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.line = spec.line;\n series.point = spec.point;\n series.stack = spec.stack;\n series.percent = spec.percent;\n series.area = mergeSpec(\n {\n visible: false\n },\n spec.area\n );\n series.seriesMark = spec.seriesMark ?? 'area';\n series.activePoint = spec.activePoint;\n series.pointDis = spec.pointDis;\n series.pointDisMul = spec.pointDisMul;\n series.markOverlap = spec.markOverlap;\n return series;\n }\n\n transformSpec(spec: T) {\n super.transformSpec(spec);\n //默认不显示轴的domainLine和Tick\n (spec.axes ?? []).forEach((axis: any) => {\n if (axis.orient === 'radius') {\n ['domainLine', 'label', 'tick'].forEach(configName => {\n if (!axis[configName]) {\n axis[configName] = { visible: false };\n }\n });\n if (!axis.grid) {\n axis.grid = { visible: true };\n }\n }\n });\n\n // set default config for crosshair\n spec.crosshair = array(spec.crosshair || {}).map(crosshairCfg => {\n return mergeSpec(\n {\n categoryField: {\n visible: true,\n line: {\n visible: true,\n type: 'line'\n }\n }\n },\n crosshairCfg\n );\n });\n }\n}\n","import { registerRadarSeries } from '../../series/radar/radar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IRoseChartSpec } from '../rose';\nimport { RadarChartSpecTransformer } from './radar-transformer';\nimport { BaseChart } from '../base';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class RadarChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.radar;\n static readonly seriesType: string = SeriesTypeEnum.radar;\n static readonly transformerConstructor = RadarChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RadarChartSpecTransformer;\n readonly type: string = ChartTypeEnum.radar;\n readonly seriesType: string = SeriesTypeEnum.radar;\n}\n\nmixin(RadarChart, StackChartMixin);\n\nexport const registerRadarChart = () => {\n registerRadarSeries();\n Factory.registerChart(RadarChart.type, RadarChart);\n};\n","import type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { get, isObject } from '../../util';\nimport { BaseChartSpecTransformer } from '../base';\nimport { getTrimPaddingConfig } from '../util';\nimport type { ICommonChartSpec } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class CommonChartSpecTransformer extends BaseChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec) {\n const defaultSpec = super._getDefaultSeriesSpec(spec);\n // 组合图系列的默认配置由系列自身配置 data/dataIndex/dataId 决定,无需默认配置\n delete defaultSpec.data;\n return defaultSpec;\n }\n\n // common chart 支持 autoBandSize 配置\n protected _transformAxisSpec(spec: AdaptiveSpec) {\n if (!spec.axes) {\n return;\n }\n if (!!spec.autoBandSize) {\n // 遍历series\n // 1. 找到bar系列\n // 2. 如果bar系列配置了autoBandSize\n // 3. 找到bar系列对应的axis\n // 4. 为该axis配置bandSize\n spec.series.forEach((series: any, seriesIndex: number) => {\n if (series.type === 'bar') {\n const relatedAxis = this._findBandAxisBySeries(series, seriesIndex, spec.axes);\n if (relatedAxis && !relatedAxis.bandSize && !relatedAxis.maxBandSize && !relatedAxis.minBandSize) {\n const extend = isObject(series.autoBandSize) ? series.autoBandSize.extend ?? 0 : 0;\n const { barMaxWidth, barMinWidth, barWidth, barGapInGroup } = series;\n this._applyAxisBandSize(relatedAxis, extend, { barMaxWidth, barMinWidth, barWidth, barGapInGroup });\n }\n }\n });\n }\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.series && spec.series.length) {\n const defaultSeriesSpec = this._getDefaultSeriesSpec(spec);\n spec.series.forEach((s: ISeriesSpec) => {\n if (!this._isValidSeries(s.type)) {\n return;\n }\n Object.keys(defaultSeriesSpec).forEach(k => {\n if (!(k in s)) {\n s[k] = defaultSeriesSpec[k];\n }\n });\n });\n }\n if (spec.axes && spec.axes.length) {\n spec.axes.forEach((axis: any) => {\n if (get(axis, 'trimPadding')) {\n mergeSpec(axis, getTrimPaddingConfig(this.type, spec));\n }\n });\n }\n this._transformAxisSpec(spec);\n }\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { ICommonChartSpec } from './interface';\nimport type { AdaptiveSpec } from '../../typings';\nimport { CommonChartSpecTransformer } from './common-transformer';\nimport { StackChartMixin } from '../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class CommonChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.common;\n static readonly transformerConstructor = CommonChartSpecTransformer;\n readonly transformerConstructor = CommonChartSpecTransformer;\n readonly type: string = ChartTypeEnum.common;\n}\n\nmixin(CommonChart, StackChartMixin);\n\nexport const registerCommonChart = () => {\n Factory.registerChart(CommonChart.type, CommonChart);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { ITooltipLinePattern, TooltipActiveType } from '../../typings';\nimport { TimeUtil } from '@visactor/vutils';\n\nexport class LinkSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType === 'mark';\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: 'link info',\n value: 'link info'\n };\n }\n\n shapeTypeCallback = () => {\n return 'square';\n };\n\n protected getDefaultContentList(): ITooltipLinePattern[] {\n return [\n {\n key: 'time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d %H:%M', datum.from.split('_')[1])\n },\n {\n key: 'type',\n value: (datum: any) => datum.action_type\n },\n {\n key: 'from',\n value: (datum: any) => datum.from\n },\n {\n key: 'to',\n value: (datum: any) => datum.to\n }\n ];\n }\n}\n","import { Factory } from './../core/factory';\nimport type { IRuleMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkStyle, IRuleMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRuleGraphic } from '@visactor/vgrammar-core';\n\nexport class RuleMark extends BaseMark implements IRuleMark {\n static readonly type = MarkTypeEnum.rule;\n readonly type = RuleMark.type;\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x1: 0,\n y1: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerRuleMark = () => {\n Factory.registerMark(RuleMark.type, RuleMark);\n registerRuleGraphic();\n};\n","import type { Datum } from '../../typings';\n\nexport interface ILinkDotInfoOpt {\n infoKey: string;\n fields: () => {\n fromField: string;\n toField: string;\n xField: string | string[];\n yField: string | string[];\n };\n linkData: () => Datum[];\n dotData: () => Datum[];\n}\n\n/**\n * @description 根据link数据以及对应的dot数据生成node name和node data的哈希表,并将node data的信息放进来\n */\nexport const linkDotInfo = (data: Array, op: ILinkDotInfoOpt) => {\n const { infoKey, fields, linkData, dotData } = op;\n const { fromField, toField, xField, yField } = fields();\n const dataLinkObj = linkData();\n const dataDotObj = dotData();\n const dataLinkDotHash = {};\n\n // 遍历dot数据,生成哈希表\n dataDotObj.forEach((datum: any) => {\n const dataCopy: any = {};\n for (const key in datum) {\n if (key !== infoKey) {\n dataCopy[key] = datum[key];\n }\n }\n const dataOp = datum[infoKey];\n dataOp?.forEach((d: any) => {\n dataLinkDotHash[d.node_name] = Object.assign({}, dataCopy, d);\n });\n });\n\n // 将起始点的node data加入进来\n dataLinkObj.forEach((datum: any) => {\n datum[fromField + '_xField'] = dataLinkDotHash?.[datum[fromField]]?.[xField];\n datum[fromField + '_yField'] = dataLinkDotHash?.[datum[fromField]]?.[yField];\n datum[toField + '_xField'] = dataLinkDotHash?.[datum[toField]]?.[xField];\n datum[toField + '_yField'] = dataLinkDotHash?.[datum[toField]]?.[yField];\n });\n return dataLinkObj;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Datum } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport type { IGroupMark, IMark, IRuleMark, ISymbolMark } from '../../mark/interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { IDotSeriesSpec } from '../dot/interface';\nimport { LinkSeriesTooltipHelper } from './tooltip-helper';\nimport type { ILinkSeriesSpec } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { registerRuleMark } from '../../mark/rule';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { linkSeriesMark } from './constant';\nimport { linkDotInfo } from '../../data/transforms/link-dot-info';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class LinkSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.link;\n type = SeriesTypeEnum.link;\n\n static readonly mark: SeriesMarkMap = linkSeriesMark;\n\n protected _fromField?: string;\n getFromField() {\n return this._fromField;\n }\n setFromField(field: string) {\n if (isValid(field)) {\n this._fromField = field;\n }\n }\n\n protected _toField?: string;\n getToField() {\n return this._toField;\n }\n setToField(field: string) {\n if (isValid(field)) {\n this._toField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _dotSeriesSpec?: IDotSeriesSpec;\n getDotSeriesSpec() {\n return this._dotSeriesSpec;\n }\n setDotSeriesSpec(spec: IDotSeriesSpec) {\n if (isValid(spec)) {\n this._dotSeriesSpec = spec;\n }\n }\n\n protected _getDotData() {\n const dotSeries = this._option.getChart().getSeriesInIndex([this._spec.dotSeriesIndex])[0];\n if (!dotSeries) {\n return [];\n }\n return dotSeries.getRawData().latestData;\n }\n\n initData() {\n super.initData();\n\n registerDataSetInstanceTransform(this._option.dataSet, 'linkDotInfo', linkDotInfo);\n this.getViewData()?.transform(\n {\n type: 'linkDotInfo',\n options: {\n infoKey: 'dots',\n fields: () => {\n return {\n fromField: this._fromField,\n toField: this._toField,\n xField: this._dotSeriesSpec.xField,\n yField: this._dotSeriesSpec.yField\n };\n },\n linkData: () => this._rawData.latestData,\n dotData: () => this._getDotData()\n },\n level: TransformLevel.linkDotInfo\n },\n false\n );\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFromField(this._spec.fromField);\n this.setToField(this._spec.toField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setDotSeriesSpec(this._spec.dotSeriesSpec);\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _linkMark: IRuleMark;\n private _arrowMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(LinkSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(LinkSeries.mark.group, {\n parent: this._clipMark\n }) as IGroupMark;\n\n this._linkMark = this._createMark(LinkSeries.mark.link, {\n skipBeforeLayouted: false,\n parent: this._containerMark\n }) as IRuleMark;\n\n this._arrowMark = this._createMark(LinkSeries.mark.arrow, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setMarkConfig({ interactive: false, clip: true });\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding,\n width: this.getLayoutRect().width\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setMarkConfig({ interactive: false });\n }\n\n const linkMark = this._linkMark;\n if (linkMark) {\n this.setMarkStyle(\n linkMark,\n {\n stroke: this.getColorAttribute(),\n strokeOpacity: this.dataToOpacity.bind(this),\n x: this.dataToPositionXFrom.bind(this),\n y: this.dataToPositionYFrom.bind(this),\n x1: this.dataToPositionXTo.bind(this),\n y1: this.dataToPositionYTo.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const arrowMark = this._arrowMark;\n if (arrowMark) {\n const arrowSize = (this._theme?.arrow?.style?.size as number) ?? 10;\n this.setMarkStyle(\n arrowMark,\n {\n x: this.dataToPositionXTo.bind(this),\n y: (datum: Datum) => this.dataToPositionArrowYTo(datum, arrowSize), // csj-to do:箭头的dy不生效,暂时改变y position逻辑\n fill: this.getColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this),\n size: arrowSize,\n symbolType: (datum: Datum) => {\n return this.isPositionYFromHigher(datum) ? 'triangleDown' : 'triangleUp';\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n afterInitMark(): void {\n super.afterInitMark();\n }\n\n /** 以下函数用于定位link和arrow */\n\n dataToPositionXFrom(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYFrom(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._fromField + '_yField'));\n }\n\n dataToPositionXTo(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_xField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionYTo(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n\n return dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n });\n }\n\n dataToPositionArrowYTo(datum: Datum, arrowSize: number): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n const offset = this.isPositionYFromHigher(datum) ? -arrowSize / 2 : arrowSize / 2;\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._toField + '_yField'), {\n bandPosition: this._bandPosition\n }) + offset\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (\n this.isPositionXOuterRange(datum, this._fromField + '_xField') ||\n this.isPositionXOuterRange(datum, this._toField + '_xField') ||\n datum[this._fromField] === datum[this._toField]\n ) {\n return 0;\n }\n return 1;\n }\n\n /**\n * @description 用于判断link的箭头方向\n */\n isPositionYFromHigher(datum: Datum): boolean {\n return this.dataToPositionYFrom(datum) < this.dataToPositionYTo(datum);\n }\n\n /**\n * @description 用于判断link的起点、终点坐标是否超出range范围\n */\n isPositionXOuterRange(datum: Datum, field: string): boolean {\n if (!this._xAxisHelper) {\n return false;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, field), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * @override\n * @description 如果用户设置了dotType,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._dotTypeField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._linkMark) {\n marks.push(this._linkMark);\n }\n\n if (this._arrowMark) {\n marks.push(this._arrowMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinkSeriesTooltipHelper(this);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n this._arrowMark && this._tooltipHelper.activeTriggerSet.mark.add(this._arrowMark);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotInfoData() {\n return (this._linkMark ?? this._arrowMark)?.getData();\n }\n\n getActiveMarks(): IMark[] {\n return [this._linkMark, this._arrowMark];\n }\n}\n\nexport const registerLinkSeries = () => {\n registerRuleMark();\n registerSymbolMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(LinkSeries.type, LinkSeries);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type {\n Datum,\n ITooltipActual,\n ITooltipLineActual,\n ITooltipLinePattern,\n MaybeArray,\n TooltipActiveType,\n TooltipData,\n TooltipPatternProperty\n} from '../../typings';\nimport { TimeUtil } from '@visactor/vutils';\nimport type { ITooltipSpec } from '../../component/tooltip/interface/spec';\nimport type { TooltipHandlerParams } from '../../component/tooltip/interface/common';\n\nexport class DotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType === 'mark';\n }\n\n protected getDefaultTitlePattern(activeType: TooltipActiveType): ITooltipLinePattern {\n return {\n key: 'event info',\n value: 'event info'\n };\n }\n\n shapeTypeCallback = () => {\n return 'square';\n };\n\n protected getDefaultContentList(): MaybeArray>> {\n return [\n {\n key: (datum: any) => datum.type,\n value: (datum: any) => datum.id\n },\n {\n key: 'event_time',\n value: (datum: any) => TimeUtil.getInstance().timeFormat('%Y%m%d', datum.event_time)\n },\n {\n key: 'action_type',\n value: (datum: any) => datum.action_type\n },\n {\n key: 'children',\n value: (datum: any) => {\n return datum.children;\n }\n }\n ];\n }\n\n getTooltipData(\n activeType: TooltipActiveType,\n chartTooltipSpec?: ITooltipSpec,\n data?: TooltipData,\n datum?: Datum[],\n params?: TooltipHandlerParams\n ): ITooltipActual | null {\n const res = super.getTooltipData(activeType, chartTooltipSpec, data, datum, params);\n const userUpdateContent = this.spec?.[activeType]?.updateContent ?? chartTooltipSpec?.[activeType]?.updateContent;\n\n if (res && !userUpdateContent) {\n res.updateContent = (prev: any, datum: any, params: any) => {\n const childrenContent: ITooltipLineActual[] = [];\n const childrenPrev = prev.filter((p: any) => p.key === 'children');\n\n childrenPrev.length > 0 &&\n childrenPrev[0].value.forEach((element: any) => {\n let flag = true;\n for (const key in element) {\n childrenContent.push({\n ...childrenPrev[0],\n shapeType: 'circle',\n hasShape: flag,\n key: key,\n value: element[key] + ''\n } as ITooltipLineActual);\n flag = false;\n }\n });\n return prev.concat(childrenContent);\n };\n }\n\n return res;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\n/**\n * @description 针对某个数组进行数据展开,将数组中的每个元素拆出来加入数据集\n */\nexport const objFlat = (data: Array, op: string) => {\n // 数据处理\n const dataCollect = data[0]?.latestData ? data[0].latestData : data || [];\n const result: any[] = [];\n dataCollect.forEach((datum: any) => {\n const dataKey: any = {};\n for (const key in datum) {\n if (key !== op) {\n dataKey[key] = datum[key];\n }\n }\n const dataOp = datum[op];\n dataOp?.forEach((d: any) => {\n result.push(Object.assign({}, dataKey, d));\n });\n });\n return result;\n};\n","export const DEFAULT_GRID_BACKGROUND = {\n fill: '#bbb',\n fillOpacity: 0.2\n};\n","import { Factory } from './../core/factory';\nimport type { IComposedTextMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMarkOption, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface';\nimport { registerRichTextGraphic, registerTextGraphic } from '@visactor/vgrammar-core';\nimport type { ITextMark, ITextSpec } from './interface/mark';\n\nexport class TextMark extends BaseMark implements ITextMark {\n static readonly type = MarkTypeEnum.text;\n readonly type = TextMark.type;\n\n protected _textType: 'text' | 'rich' = 'text';\n getTextType() {\n return this._textType;\n }\n\n constructor(name: string, option: IMarkOption) {\n super(name, option);\n }\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n // TODO: 删除后会有显示问题,待排查\n angle: 0,\n textAlign: 'center',\n lineWidth: 0,\n textConfig: []\n };\n return defaultStyle;\n }\n\n initStyleWithSpec(spec: ITextSpec, key?: string) {\n super.initStyleWithSpec(spec, key);\n if (spec.textType) {\n this._textType = spec.textType;\n }\n }\n\n compileEncode() {\n super.compileEncode();\n if (this._textType === 'rich') {\n this._product.encodeState('group', { textType: this._textType });\n }\n }\n}\n\nexport const registerTextMark = () => {\n Factory.registerMark(TextMark.type, TextMark);\n registerTextGraphic();\n registerRichTextGraphic();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { Datum } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { isValid } from '@visactor/vutils';\nimport type { IGroupMark, IMark, IRectMark, IRuleMark, ISymbolMark, ITextMark } from '../../mark/interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { dataViewParser } from '@visactor/vdataset';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport { DotSeriesTooltipHelper } from './tooltip-helper';\nimport type { FunctionType, IFillMarkSpec, VisualType } from '../../typings/visual';\nimport type { IDotSeriesSpec } from './interface';\nimport { copyDataView } from '../../data/transforms/copy-data-view';\nimport { objFlat } from '../../data/transforms/obj-flat';\nimport { DEFAULT_GRID_BACKGROUND } from './config';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport type { SeriesMarkMap } from '../interface';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { registerRectMark } from '../../mark/rect';\nimport { dotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class DotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.dot;\n type = SeriesTypeEnum.dot;\n\n static readonly mark: SeriesMarkMap = dotSeriesMark;\n\n private _xDimensionStatisticsDomain: any[];\n\n // csj-Q: 是否需要把这些属性写成接口?\n protected _seriesGroupField?: string;\n getSeriesGroupField() {\n return this._seriesField;\n }\n setSeriesGroupField(field: string) {\n if (isValid(field)) {\n this._seriesGroupField = field;\n }\n }\n\n protected _titleField?: string;\n getTitleField() {\n return this._titleField;\n }\n setTitleField(field: string) {\n if (isValid(field)) {\n this._titleField = field;\n }\n }\n\n protected _subTitleField?: string;\n getSubTitleField() {\n return this._subTitleField;\n }\n setSubTitleField(field: string) {\n if (isValid(field)) {\n this._subTitleField = field;\n }\n }\n\n protected _dotTypeField?: string;\n getDotTypeField() {\n return this._dotTypeField;\n }\n setDotTypeField(field: string) {\n if (isValid(field)) {\n this._dotTypeField = field;\n }\n }\n\n protected _highLightSeriesGroup?: string;\n getHighLightSeriesGroup() {\n return this._highLightSeriesGroup;\n }\n setHighLightSeriesGroup(field: string) {\n if (isValid(field)) {\n this._highLightSeriesGroup = field;\n }\n }\n\n protected _gridBackground?: IFillMarkSpec;\n setGridBackground(gridBackground: IFillMarkSpec) {\n if (isValid(gridBackground)) {\n this._gridBackground = gridBackground;\n }\n }\n\n /**\n * @override\n */\n initData(): void {\n super.initData();\n this._xDimensionStatisticsDomain = this.getRawData().latestData.map((d: Datum) => d[this._fieldY[0]]);\n\n // data to dataview\n registerDataSetInstanceTransform(this._option.dataSet, 'objFlat', objFlat);\n registerDataSetInstanceTransform(this._option.dataSet, 'copyDataView', copyDataView);\n registerDataSetInstanceParser(this._option.dataSet, 'dataview', dataViewParser);\n\n this.getViewData()?.transform(\n {\n type: 'objFlat',\n options: 'dots',\n level: TransformLevel.dotObjFlat\n },\n false\n );\n }\n\n getStatisticFields() {\n return [{ key: this._fieldY[0], operations: ['values'], customize: this._xDimensionStatisticsDomain }] as {\n key: string;\n operations: Array<'max' | 'min' | 'values'>;\n customize: any[];\n }[];\n }\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setSeriesGroupField(this._spec.seriesGroupField);\n this.setTitleField(this._spec.titleField);\n this.setSubTitleField(this._spec.subTitleField);\n this.setDotTypeField(this._spec.dotTypeField);\n this.setHighLightSeriesGroup(this._spec.highLightSeriesGroup);\n this.setGridBackground(mergeSpec(DEFAULT_GRID_BACKGROUND, this._spec.grid?.background || {}));\n }\n\n private _clipMark: IGroupMark;\n private _containerMark: IGroupMark;\n private _gridBackgroundMark: IRectMark;\n private _gridMark: IRuleMark;\n private _dotMark: ISymbolMark;\n private _titleMark: ITextMark;\n private _subTitleMark: ITextMark;\n private _symbolMark: ISymbolMark;\n initMark(): void {\n this._clipMark = this._createMark(DotSeries.mark.group) as IGroupMark;\n\n this._containerMark = this._createMark(DotSeries.mark.group, {\n parent: this._clipMark,\n dataView: this.getRawData()\n }) as IGroupMark;\n\n this._gridBackgroundMark = this._createMark(DotSeries.mark.gridBackground, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRectMark;\n\n this._gridMark = this._createMark(DotSeries.mark.grid, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as IRuleMark;\n\n this._dotMark = this._createMark(DotSeries.mark.dot, {\n skipBeforeLayouted: false,\n isSeriesMark: true,\n parent: this._containerMark\n }) as ISymbolMark;\n\n this._titleMark = this._createMark(DotSeries.mark.title, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._subTitleMark = this._createMark(DotSeries.mark.subTitle, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ITextMark;\n\n this._symbolMark = this._createMark(DotSeries.mark.symbol, {\n parent: this._containerMark,\n dataView: this.getRawData()\n }) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const clipMark = this._clipMark;\n if (clipMark) {\n this.setMarkStyle(\n clipMark,\n {\n x: -this._spec.leftAppendPadding,\n y: 0,\n // 本应使用this.getLayoutRect().width, 但这该返回值为0。考虑到横向不需要裁剪,故先采用一个较大值\n width: 10000,\n height: this._spec.clipHeight\n },\n 'normal',\n AttributeLevel.Series\n );\n clipMark.setMarkConfig({ interactive: false, clip: true });\n }\n\n const containerMark = this._containerMark;\n if (containerMark) {\n this.setMarkStyle(\n containerMark,\n {\n x: this._spec.leftAppendPadding\n },\n 'normal',\n AttributeLevel.Series\n );\n containerMark.setMarkConfig({ interactive: false });\n }\n\n const gridBackgroundMark = this._gridBackgroundMark;\n if (gridBackgroundMark) {\n this.setMarkStyle(\n gridBackgroundMark,\n {\n x: this.getRegionRectLeft.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y: this.dataToGridBackgroundPositionY.bind(this),\n y1: this.dataToGridBackgroundPositionY1.bind(this),\n fill: this._gridBackground.fill,\n fillOpacity: this.dataToGridBackgroundOpacity.bind(this) as FunctionType\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const gridMark = this._gridMark;\n if (gridMark) {\n this.setMarkStyle(\n gridMark,\n {\n stroke: this.getColorAttribute(),\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n x1: this.getRegionRectRight.bind(this),\n y1: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const dotMark = this._dotMark;\n if (dotMark) {\n this.setMarkStyle(\n dotMark,\n {\n x: this.dataToPositionX.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getDotColorAttribute(),\n fillOpacity: this.dataToOpacity.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const titleMark = this._titleMark;\n if (titleMark) {\n this.setMarkStyle(\n titleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const subTitleMark = this._subTitleMark;\n if (subTitleMark) {\n this.setMarkStyle(\n subTitleMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: any) => {\n return datum[this.getSubTitleField()];\n },\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const symbolMark = this._symbolMark;\n if (symbolMark) {\n this.setMarkStyle(\n symbolMark,\n {\n x: this.getRegionRectLeft.bind(this),\n y: this.dataToPositionY.bind(this),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n dataToGridBackgroundPositionY(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) -\n getBandwidth(0) / 2\n );\n }\n\n dataToGridBackgroundPositionY1(datum: Datum): number {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n\n return (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldY), {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) / 2\n );\n }\n\n dataToOpacity(datum: Datum): number {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition, getScale } = this._xAxisHelper;\n\n if (\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) < getScale(0).range()[0] ||\n dataToPosition(this.getDatumPositionValues(datum, this._fieldX), {\n bandPosition: this._bandPosition\n }) > getScale(0).range()[1]\n ) {\n return 0;\n }\n return this._theme?.dot?.style?.fillOpacity ?? 1;\n }\n\n dataToGridBackgroundOpacity(datum: Datum): VisualType {\n if (datum[this._seriesGroupField] === this._highLightSeriesGroup) {\n return this._gridBackground.fillOpacity;\n }\n return 0;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n const layoutOffsetX = this._spec?.leftAppendPadding ?? 0;\n this.setMarkStyle(\n this._clipMark,\n {\n width: this.getLayoutRect().width + layoutOffsetX //clip的数值只能在layoutEnd之后获得\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n /**\n * @override\n * @description 如果用户设置了seriesGroup,则seriesGroup作为颜色映射字段\n */\n getDefaultColorDomain() {\n return this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n /**\n * @override\n * @description 对于dot来说,dotType优先级高于seriesGroup,作为颜色映射字段\n */\n protected getDotColorScale() {\n const colorDomain = this._dotTypeField\n ? this.getViewDataStatistics()?.latestData[this._dotTypeField].values\n : this._seriesGroupField\n ? this.getViewDataStatistics()?.latestData[this._seriesGroupField].values\n : this._seriesField\n ? this.getViewDataStatistics()?.latestData[this._seriesField].values\n : [];\n const colorRange = this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range(colorRange);\n }\n\n /**\n * @override\n */\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getDotColorAttribute() {\n return {\n scale: this._option.globalScale.getScale('color') ?? this.getDotColorScale(),\n field: this._dotTypeField ?? this._seriesGroupField ?? this._seriesField ?? DEFAULT_DATA_SERIES_FIELD\n };\n }\n\n protected initTooltip() {\n this._tooltipHelper = new DotSeriesTooltipHelper(this);\n this._dotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._dotMark);\n }\n\n /**\n * @description onEvaluateEnd之后可以拿到canvas element,将滚动条挂载到canvas element上\n */\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n }\n\n protected onMarkTreePositionUpdate(marks: IMark[]): void {\n marks.forEach(m => {\n if (m.type === 'group') {\n this.onMarkTreePositionUpdate((m as IGroupMark).getMarks());\n } else {\n m.updateLayoutState();\n }\n });\n }\n\n getDotData() {\n return this._dotMark?.getData();\n }\n\n protected _getDataIdKey() {\n // dot 系列没有动画,可以使用默认的 dataKey\n return undefined as any;\n }\n\n getStackValueField(): string {\n return null;\n }\n\n getActiveMarks(): IMark[] {\n return [this._dotMark];\n }\n}\n\nexport const registerDotSeries = () => {\n registerSymbolMark();\n registerRuleMark();\n registerRectMark();\n registerTextMark();\n\n Factory.registerSeries(DotSeries.type, DotSeries);\n};\n","export const SCROLL_BAR_DEFAULT_SIZE = 12;\n","import { array } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISequenceChartSpec, ISequenceSeriesSpec } from './interface';\nimport type { Datum, RegionSpec } from '../../typings';\nimport type { ICartesianAxisSpec, IScrollBarSpec } from '../../component';\nimport { SeriesTypeEnum } from '../../series';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { IGridLayoutSpec } from '../../layout';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../constant/scroll-bar';\n\nexport class SequenceChartSpecTransformer<\n T extends ISequenceChartSpec = ISequenceChartSpec\n> extends BaseChartSpecTransformer {\n private _getSeriesDataLength(spec: T, seriesSpec: any) {\n if (seriesSpec.data) {\n const _d = array(seriesSpec.data)[0];\n if (_d instanceof DataView) {\n return _d.latestData?.length;\n }\n return _d.values?.length;\n }\n const dataTemp = array(spec.data).find((_d, index) => {\n if (seriesSpec.dataId) {\n if (_d instanceof DataView) {\n return _d.name === seriesSpec.dataId;\n }\n return _d.id === seriesSpec.dataId;\n }\n return seriesSpec.dataIndex === index;\n });\n if (!dataTemp) {\n return 0;\n }\n if (dataTemp instanceof DataView) {\n return dataTemp.latestData.length;\n }\n return dataTemp.values.length;\n }\n\n addAttrToComponentSpec(componentSpec: any, attr: string, value: any) {\n if (Array.isArray(componentSpec)) {\n componentSpec[0][attr] = value;\n } else {\n componentSpec[attr] = value;\n }\n return componentSpec;\n }\n\n addPaddingRow(rowHeight: any[], rowNum: number, size: number) {\n rowHeight.push({\n index: rowNum,\n size\n });\n }\n\n addOrientAxes(region: RegionSpec[], elements: any[], rowNum: number, spec: T) {\n // Tips: id should not has duplicate name\n region.push({\n id: `regionAxesRow${rowNum}`\n });\n elements.push({\n modelId: `axesRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n spec.axes[0].id = `axesRow${rowNum}`;\n spec.axes[0].regionIndex = Array.from(Array(spec.series.length), (_, index) =>\n spec.axes[0].orient === 'top' ? index + 1 : index\n );\n }\n\n /**\n * @override\n * @description 主要是处理布局逻辑 & 部分仅针对sequenceChart的特殊属性\n */\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n // 初始化目标属性\n let rowNum = 0;\n const elements: any[] = [];\n const region: RegionSpec[] = [];\n const axes: ICartesianAxisSpec[] = [];\n const scrollBar: IScrollBarSpec[] = [];\n const rowHeight: any[] = [];\n\n // FIXME: 重构之前这里取的是 chart 上的 this._layoutRect,这里有点问题。\n // 重构之前 chart 上的 transformSpec() 本来就在布局之前执行,\n // 原始代码中的 this._layoutRect 中取到的永远是常量 { width: 500, height: 500 }。\n // 重构之后保留这个 mock 值,可以尽快修改下 @skie1997\n const viewLayoutRect = {\n width: this._option.getCompiler().getVGrammarView().width(),\n height: this._option.getCompiler().getVGrammarView().height()\n };\n let componentsHeight = 0;\n const defaultcomponentsHeight = 60;\n const defaultComponentRowHeight = 10;\n if (spec?.legends) {\n elements.push({\n modelId: `legendRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.legends, 'id', `legendRow${rowNum}`);\n // legend offset 和 padding 兼容处理\n const legendSpec = array(spec.legends);\n let legendHeight = (legendSpec[0].height as number) ?? 40;\n if (legendSpec[0].padding) {\n const legendPadding = normalizeLayoutPaddingSpec(legendSpec[0].padding);\n legendHeight += Number(legendPadding?.bottom ?? 0);\n legendHeight += Number(legendPadding?.top ?? 0);\n legendSpec[0].offsetY = Number(legendSpec[0]?.offsetY ?? 0) + Number(legendPadding?.top ?? 0);\n }\n rowHeight.push({\n index: rowNum,\n size: legendHeight\n });\n componentsHeight += legendHeight;\n rowNum++;\n }\n\n if (spec?.dataZoom) {\n elements.push({\n modelId: `dataZoomRow${rowNum}`,\n col: 1,\n row: rowNum\n });\n this.addAttrToComponentSpec(spec.dataZoom, 'id', `dataZoomRow${rowNum}`);\n componentsHeight += defaultcomponentsHeight;\n rowNum++;\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, 10);\n componentsHeight += defaultComponentRowHeight;\n rowNum++;\n }\n\n // 遍历axes\n // 1. 在elements中添加时间轴元素\n // 2. 并统计rowNum\n // 在sequenceChart中,axes有几种情况(本期考虑1/2/3,也就是默认只有1个top/bottom轴):1.不声明axes 2.声明且为仅有一个top axes 3.声明且仅有一个bottom axes 4.多个axes组合\n componentsHeight += defaultcomponentsHeight;\n if (spec.axes === null || spec?.axes?.[0]?.orient === 'top') {\n this.addOrientAxes(region, elements, rowNum, spec);\n rowNum++;\n }\n\n // 计算默认series padding和series高度\n const defaultSeriesPadding = 20;\n const seriesRegionNum = spec.series.filter(d => d.type !== SeriesTypeEnum.link).length;\n const defaultSeriesRowHeight =\n (viewLayoutRect.height - componentsHeight - defaultSeriesPadding * seriesRegionNum) / seriesRegionNum;\n const leftAppendPadding = spec?.appendPadding?.left || 0;\n const rightAppendPadding = spec?.appendPadding?.right || 0;\n\n // 遍历series\n // 1. 在spec.layout => elements、region数组和spec.axes的数组中中添加元素\n // 2. 为series绑定regionIndex\n // 3. 统计rowNum\n // 4. 用空行拟合series padding\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (\n ([SeriesTypeEnum.bar, SeriesTypeEnum.line, SeriesTypeEnum.area, SeriesTypeEnum.dot] as string[]).includes(\n seriesSpec.type\n )\n ) {\n // elements数组\n elements.push({\n modelId: `${seriesSpec.type}Row${rowNum}`,\n col: 1,\n row: rowNum\n });\n elements.push({\n modelId: `axesLeftRow${rowNum}`,\n col: 0,\n row: rowNum\n });\n\n // region数组\n region.push({\n id: `${seriesSpec.type}Row${rowNum}`,\n clip: false\n });\n\n rowHeight.push({\n index: rowNum,\n size: seriesSpec?.height || defaultSeriesRowHeight\n });\n\n // axes数组添加left axes(每个series都需要一个left axes)\n axes.push({\n orient: 'left',\n id: `axesLeftRow${rowNum}`,\n type: seriesSpec.type === SeriesTypeEnum.dot ? 'band' : 'linear',\n visible: seriesSpec.type !== SeriesTypeEnum.dot,\n\n // 对于bar series,axes title模拟bar title\n title: {\n visible: true,\n // 特殊处理时序图的 title 样式,默认的坐标轴左右轴会进行旋转\n autoRotate: false,\n style: {\n text: (seriesSpec as any)?.barTitle,\n dx: -20,\n textBaseline: 'middle',\n textAlign: 'end'\n }\n },\n // 对于bar series,axes grid模拟series分割线\n grid: {\n visible:\n typeof (seriesSpec as any)?.grid?.visible === 'boolean' ? (seriesSpec as any)?.grid?.visible : true, // bar grid默认绘制\n style: (datum: Datum, index: number) => {\n let lineWidth = 0;\n if (index === 0) {\n const style = (seriesSpec as any)?.grid?.style;\n\n // 兼容一下spec中通过strokeWidth申明的方式\n lineWidth = style?.lineWidth ?? style?.strokeWidth ?? 1;\n }\n return {\n lineWidth,\n stroke: (seriesSpec as any)?.grid?.style?.stroke || '#dfdfdf',\n lineDash: [0, 0]\n };\n }\n },\n // 其他轴元素隐藏\n domainLine: {\n visible: false\n },\n tick: {\n visible: false\n },\n label: {\n visible: false\n },\n\n // 绑定regionIndex\n regionIndex: region.length - 1\n });\n\n // scrollBar 内置\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n elements.push({\n modelId: `scrollBarRightRow${rowNum}`,\n col: 2,\n row: rowNum\n });\n const dataLength = this._getSeriesDataLength(spec, seriesSpec);\n let ratio = 0;\n if (dataLength) {\n ratio = (seriesSpec?.height || defaultSeriesRowHeight) / (dataLength * 30);\n }\n // scrollBar数组增加一个right scrollBar\n scrollBar.push({\n orient: 'right',\n visible: seriesSpec.type === SeriesTypeEnum.dot && ratio < 1,\n id: `scrollBarRightRow${rowNum}`,\n start: 0,\n end: Math.min(ratio, 1),\n filterMode: 'axis',\n regionIndex: region.length - 1,\n axisId: `axesLeftRow${rowNum}`,\n ...array(spec?.scrollBar)[0]\n });\n }\n\n // seriesSpec绑定regionIndex\n seriesSpec.regionIndex = region.length - 1;\n rowNum++;\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, seriesSpec?.padding || defaultSeriesPadding);\n rowNum++;\n\n // chart的leftAppendPadding用于具体元素的dx偏移\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n\n // title和subTitle自动定位到画布最左端\n if (seriesSpec.type === SeriesTypeEnum.dot) {\n (seriesSpec as any).title.style.dx = -leftAppendPadding;\n (seriesSpec as any).subTitle.style.dx = -leftAppendPadding;\n }\n }\n });\n\n // 增加空行,拟合series padding效果\n this.addPaddingRow(rowHeight, rowNum, defaultSeriesPadding);\n rowNum++;\n\n // 对于link series,所有属性跟随它绑定的dot series\n spec?.series?.forEach((seriesSpec: ISequenceSeriesSpec) => {\n if (seriesSpec.type === SeriesTypeEnum.link) {\n const dotRowNum = seriesSpec.dotSeriesIndex + 1;\n elements.push({\n modelId: `${seriesSpec.type}Row${dotRowNum}`,\n col: 1,\n row: dotRowNum - 1\n });\n seriesSpec.regionIndex = spec.series[seriesSpec.dotSeriesIndex].regionIndex;\n (seriesSpec as any).leftAppendPadding = leftAppendPadding;\n (seriesSpec as any).height = (spec.series[seriesSpec.dotSeriesIndex] as any).height;\n (seriesSpec as any).clipHeight = (spec.series[seriesSpec.dotSeriesIndex] as any).clipHeight;\n }\n });\n\n // 添加legends和datazoom的regionIndex\n if (spec?.legends) {\n this.addAttrToComponentSpec(spec.legends, 'regionIndex', [region.length - 1]);\n }\n // if ((spec as any)?.dataZoom) {\n // (spec as any).dataZoom[0].regionIndex = Array.from({length: region.length - 1},(item, index)=> index+1);\n // }\n\n if (spec?.axes?.[0]?.orient === 'bottom') {\n this.addOrientAxes(region, elements, rowNum, spec);\n rowNum++;\n }\n\n const layout: IGridLayoutSpec = {\n type: 'grid',\n col: 4,\n row: rowNum,\n colWidth: [\n {\n index: 0,\n size: leftAppendPadding\n },\n {\n index: 2,\n size: SCROLL_BAR_DEFAULT_SIZE\n },\n {\n index: 3,\n size: rightAppendPadding\n }\n ],\n rowHeight: rowHeight,\n elements: elements\n };\n\n spec.layout = layout;\n spec.region = region;\n spec.axes?.push(...axes);\n spec.scrollBar = scrollBar;\n }\n}\n","import { registerLinkSeries } from '../../series/link/link';\nimport { registerDotSeries } from '../../series/dot/dot';\nimport { BaseChart } from '../base/base-chart';\nimport type { ISequenceChartSpec } from './interface';\nimport type { IRegion } from '../../region/interface';\nimport { Factory } from '../../core/factory';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISeriesConstructor, ISeriesOption } from '../../series/interface';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { SequenceChartSpecTransformer } from './sequence-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport class SequenceChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sequence;\n static readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly transformerConstructor = SequenceChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sequence;\n\n /**\n * @override\n * @description 主要是将link series关联的dot data放到link series中\n */\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n if (spec.type === SeriesTypeEnum.link) {\n spec.dotSeriesSpec = this._spec.series[spec.dotSeriesIndex];\n }\n\n let region: IRegion | undefined;\n if (spec.regionId) {\n region = this.getRegionsInUserId(spec.regionId);\n }\n if (!region) {\n region = this.getRegionsInIndex(spec.regionIndex ? [spec.regionIndex] : undefined)[0];\n }\n if (!region) {\n return;\n }\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n region,\n specKey: 'series',\n globalScale: this._globalScale\n } as ISeriesOption);\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n}\n\nexport const registerSequenceChart = () => {\n registerDotSeries();\n registerLinkSeries();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerChart(SequenceChart.type, SequenceChart);\n};\n","import type { ICartesianAxisCommonSpec } from '../../../component/axis';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IHistogramChartSpec } from '../interface';\n\nexport class BaseHistogramChartSpecTransformer extends CartesianChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n spec.axes.forEach((axis: ICartesianAxisCommonSpec) => (axis.type = 'linear'));\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['x2Field', 'y2Field', 'barMinHeight', 'barBackground']);\n }\n}\n","import { mixin } from '@visactor/vutils';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport type { IHistogramChartSpec } from '../interface';\nimport { BaseHistogramChartSpecTransformer } from './histogram-base-transformer';\n\nexport class BaseHistogramChart extends BaseChart {\n static readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n readonly transformerConstructor = BaseHistogramChartSpecTransformer;\n}\n\nmixin(BaseHistogramChart, StackChartMixin);\n","import { setDefaultCrosshairForCartesianChart } from '../util';\nimport { BaseHistogramChartSpecTransformer } from './base';\nimport type { IHistogramChartSpec } from './interface';\n\nexport class HistogramChartSpecTransformer<\n T extends IHistogramChartSpec = IHistogramChartSpec\n> extends BaseHistogramChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { registerBarSeries } from '../../series/bar/bar';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { BaseHistogramChart } from './base/base';\nimport { Factory } from '../../core/factory';\nimport type { IHistogramChartSpec } from './interface';\nimport { HistogramChartSpecTransformer } from './histogram-transformer';\n\nexport class HistogramChart extends BaseHistogramChart {\n static readonly type: string = ChartTypeEnum.histogram;\n static readonly seriesType: string = SeriesTypeEnum.bar;\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram;\n readonly seriesType: string = SeriesTypeEnum.bar;\n}\n\nexport const registerHistogramChart = () => {\n registerBarSeries();\n Factory.registerChart(HistogramChart.type, HistogramChart);\n};\n","import { registerBar3dSeries } from '../../../series/bar/bar-3d';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseHistogramChart } from '../base/base';\nimport { Factory } from '../../../core/factory';\nimport type { IHistogram3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { HistogramChartSpecTransformer } from '../histogram-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Histogram3dChart extends BaseHistogramChart> {\n static readonly type: string = ChartTypeEnum.histogram3d;\n static readonly seriesType: string = SeriesTypeEnum.bar3d;\n static readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly transformerConstructor = HistogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.histogram3d;\n readonly seriesType: string = SeriesTypeEnum.bar3d;\n}\nexport const registerHistogram3dChart = () => {\n register3DPlugin();\n registerBar3dSeries();\n Factory.registerChart(Histogram3dChart.type, Histogram3dChart);\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport { degreeToRadian, isNil, isValid, isValidNumber, binaryFuzzySearch } from '@visactor/vutils';\nimport { SEGMENT_FIELD_START, STACK_FIELD_END, STACK_FIELD_START } from '../../../constant/data';\nimport { POLAR_END_RADIAN, POLAR_START_RADIAN } from '../../../constant/polar';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport type { IGroupMark, IMarkStyle } from '../../../mark/interface';\nimport type { ConvertToMarkStyleSpec, ICommonSpec } from '../../../typings';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { PolarSeries } from '../polar';\nimport type { IContinuousTickData, IProgressLikeSeriesSpec } from './interface';\nimport type { IPolarAxis, IPolarAxisSpec } from '../../../component/axis';\nimport { createArc, createRect } from '@visactor/vrender-core';\nimport type { SeriesMarkMap } from '../../interface';\nimport { progressLikeSeriesMark } from './constant';\n\nexport abstract class ProgressLikeSeries extends PolarSeries {\n static readonly mark: SeriesMarkMap = progressLikeSeriesMark;\n\n protected _startAngle: number;\n protected _endAngle: number;\n\n protected _arcGroupMark: IGroupMark | null = null;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n const chartSpec = this._option.globalInstance.getChart()?.getSpec() as any;\n const startAngle = this._spec.startAngle ?? chartSpec?.startAngle;\n this._startAngle = isValid(startAngle) ? degreeToRadian(startAngle) : POLAR_START_RADIAN;\n const endAngle = this._spec.endAngle ?? chartSpec?.endAngle;\n this._endAngle = isValid(endAngle) ? degreeToRadian(endAngle) : POLAR_END_RADIAN;\n\n // 值信息给角度\n this.setAngleField(this._spec.valueField || this._spec.angleField);\n // 分类信息给半径\n this.setRadiusField(this._spec.categoryField || this._spec.radiusField);\n\n this._specAngleField = this._angleField.slice();\n this._specRadiusField = this._radiusField.slice();\n }\n\n getStackGroupFields(): string[] {\n return this._radiusField;\n }\n\n getStackValueField() {\n return this._angleField?.[0];\n }\n\n getGroupFields() {\n return this._angleField;\n }\n\n /** 重载 mark style 赋值前转换逻辑 */\n protected _convertMarkStyle(\n style: Partial | ConvertToMarkStyleSpec>\n ): Partial | ConvertToMarkStyleSpec> {\n const newStyle = super._convertMarkStyle(style) as unknown as any;\n\n const fillKey = 'fill';\n if (newStyle[fillKey]) {\n const value = style[fillKey] as unknown as any;\n // 为环形渐变色自动加 startAngle 和 endAngle\n if (value?.gradient === 'conical' && !isValid(value?.startAngle) && !isValid(value?.endAngle)) {\n newStyle[fillKey] = {\n ...value,\n startAngle: this._startAngle,\n endAngle: this._endAngle\n };\n }\n }\n\n return newStyle;\n }\n\n protected _getAngleValueStart = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this.getStack() ? STACK_FIELD_START : SEGMENT_FIELD_START;\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n let pos: number | undefined;\n if (isValid(originValue)) {\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n index >= subTickData.length || originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value - step / 2 // 确保占满整个 tick mask\n ]);\n }\n }\n if (isNil(pos)) {\n pos = this.angleAxisHelper.dataToPosition(\n [subTickData[0].value - step / 2] // 确保空出整个 tick mask\n );\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueStartWithoutMask(datum);\n };\n\n protected _getAngleValueEnd = (datum: Datum) => {\n const axis = this._getAngleAxis();\n const { tickMask } = this._spec;\n\n if (tickMask?.forceAlign && this._isTickMaskVisible(axis)) {\n const field = this.getStack() ? STACK_FIELD_END : this._angleField[0];\n const originValue = datum[field];\n const subTickData = this._getAngleAxisSubTickData(axis);\n const step = subTickData[1].value - subTickData[0].value;\n const offsetAngle = degreeToRadian(tickMask.offsetAngle);\n\n // 找到第一个大于等于数据值的 tick\n const index = binaryFuzzySearch(subTickData, tick => tick.value - originValue);\n // 对齐\n const targetIndex =\n index >= subTickData.length || originValue > subTickData[index].value - step / 2\n ? Math.min(index, subTickData.length - 1)\n : index > 0\n ? index - 1\n : undefined;\n let pos: number;\n if (targetIndex !== undefined) {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[targetIndex].value + step / 2 // 确保占满整个 tick mask\n ]);\n } else {\n pos = this.angleAxisHelper.dataToPosition([\n subTickData[0].value - step / 2 // 确保空出整个 tick mask\n ]);\n }\n return pos + offsetAngle;\n }\n return this._getAngleValueEndWithoutMask(datum);\n };\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n if (this.getStack()) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_START]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this._startAngle;\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n if (this.getStack()) {\n const value = valueInScaleRange(\n this.angleAxisHelper.dataToPosition([datum[STACK_FIELD_END]]),\n this.angleAxisHelper.getScale(0)\n );\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]]);\n }\n\n getDimensionField(): string[] {\n return this._specRadiusField;\n }\n\n getMeasureField(): string[] {\n return this._specAngleField;\n }\n\n initMark(): void {\n this._initArcGroupMark();\n }\n\n initMarkStyle(): void {\n this._initArcGroupMarkStyle();\n }\n\n protected _initArcGroupMark() {\n // FIXME: disable group mark layout to prevent reevaluate after layout end\n this._arcGroupMark = this._createMark(ProgressLikeSeries.mark.group, {\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._arcGroupMark;\n }\n\n protected _initArcGroupMarkStyle() {\n const groupMark = this._arcGroupMark;\n groupMark.created();\n this.setMarkStyle(\n groupMark,\n {\n x: 0,\n y: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n this._arcGroupMark.setMarkConfig({\n interactive: false,\n zIndex: this.layoutZIndex,\n clip: true,\n clipPath: () => {\n const axis = this._getAngleAxis();\n if (this._isTickMaskVisible(axis)) {\n const { tickMask } = this._spec;\n const { angle, offsetAngle, style = {} } = tickMask;\n const subTickData = this._getAngleAxisSubTickData(axis);\n const { x, y } = this.angleAxisHelper.center();\n const radius = this._computeLayoutRadius();\n const markStyle = style as any;\n return subTickData.map(({ value }) => {\n const pos = this.angleAxisHelper.dataToPosition([value]) + degreeToRadian(offsetAngle);\n const angleUnit = degreeToRadian(angle) / 2;\n return createArc({\n ...markStyle,\n x,\n y,\n startAngle: pos - angleUnit,\n endAngle: pos + angleUnit,\n innerRadius: radius * this._innerRadius,\n outerRadius: radius * this._outerRadius,\n fill: true\n });\n });\n }\n const { width, height } = this.getLayoutRect();\n return [\n createRect({\n width,\n height,\n fill: true\n })\n ];\n }\n });\n }\n\n protected _getAngleAxis() {\n if (!this.angleAxisHelper) {\n return undefined;\n }\n const angleAxisId = this.angleAxisHelper.getAxisId();\n const angleAxis = this._option\n .getChart()\n .getAllComponents()\n .find(component => component.id === angleAxisId) as IPolarAxis;\n return angleAxis;\n }\n\n protected _getAngleAxisTickData(angleAxis?: IPolarAxis): IContinuousTickData[] {\n const tickData = angleAxis?.getTickData()?.getLatestData();\n return tickData;\n }\n\n protected _isTickMaskVisible(angleAxis?: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n const { tickMask } = this._spec;\n return tickMask && tickMask.visible !== false && tickData?.length > 1;\n }\n\n protected _getAngleAxisSubTickData(angleAxis: IPolarAxis) {\n const tickData = this._getAngleAxisTickData(angleAxis);\n // TODO: 这块照搬了 vrender-components 的计算方法,需要抽出这块的公用逻辑\n const subTickData: IContinuousTickData[] = [];\n const { subTick = {}, tick = {} } = (angleAxis?.getSpec() ?? {}) as IPolarAxisSpec;\n const { tickCount: subTickCount = 4 } = subTick;\n const { alignWithLabel } = tick;\n // 刻度线的数量大于 2 时,才绘制子刻度\n if (tickData?.length >= 2) {\n const tickSegment = tickData[1].value - tickData[0].value;\n for (let i = 0; i < tickData.length - 1; i++) {\n const pre = tickData[i];\n const next = tickData[i + 1];\n subTickData.push(pre);\n for (let j = 0; j < subTickCount; j++) {\n const percent = (j + 1) / (subTickCount + 1);\n const value =\n (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment);\n subTickData.push({\n value\n });\n }\n }\n subTickData.push(tickData[tickData.length - 1]);\n return subTickData;\n }\n return tickData;\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../../core/factory';\nimport type { IProgressLikeAnimationParams, ProgressLikeAppearPreset } from './interface';\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n type: 'growAngleIn',\n options: {\n overall: params.startAngle\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function progressLikePresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerProgressLikeAnimation = () => {\n Factory.registerAnimation(\n 'circularProgress',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => ({\n appear: progressLikePresetAnimation(params, preset),\n enter: { type: 'growAngleIn' },\n disappear: { type: 'growAngleOut' }\n })\n );\n};\n","import { BaseSeriesSpecTransformer } from '../../base';\nimport type { ICircularProgressSeriesSpec, ICircularProgressSeriesTheme } from './interface';\n\nexport class CircularProgressSeriesSpecTransformer<\n T extends ICircularProgressSeriesSpec = ICircularProgressSeriesSpec,\n K extends ICircularProgressSeriesTheme = ICircularProgressSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = true;\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { BandScale } from '@visactor/vscale';\nimport type { Datum } from '../../../typings';\nimport { isValidNumber } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport type { ICircularProgressSeriesSpec } from './interface';\nimport { ProgressLikeSeries } from '../../polar/progress-like/progress-like';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport { registerArcMark } from '../../../mark/arc';\nimport { circularProgressSeriesMark } from './constant';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../../constant/data';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport { Factory } from '../../../core/factory';\nimport { registerProgressLikeAnimation } from '../../polar/progress-like';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IArcMark, IMark } from '../../../mark/interface';\nimport { CircularProgressSeriesSpecTransformer } from './circular-transformer';\nimport { registerPolarLinearAxis, registerPolarBandAxis } from '../../../component/axis/polar';\n\nexport class CircularProgressSeries<\n T extends ICircularProgressSeriesSpec = ICircularProgressSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.circularProgress;\n type = SeriesTypeEnum.circularProgress;\n\n static readonly mark: SeriesMarkMap = circularProgressSeriesMark;\n static readonly transformerConstructor = CircularProgressSeriesSpecTransformer as any;\n readonly transformerConstructor = CircularProgressSeriesSpecTransformer;\n\n private _progressMark: IArcMark | null = null;\n private _trackMark: IArcMark | null = null;\n\n getStackGroupFields(): string[] {\n return this.getGroupFields();\n }\n\n getGroupFields() {\n return this._radiusField;\n }\n\n initMark(): void {\n super.initMark();\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(\n CircularProgressSeries.mark.progress,\n {\n parent: this._arcGroupMark,\n isSeriesMark: true,\n stateSort: this._spec.progress?.stateSort\n },\n {\n setCustomizedShape: this._spec.progress?.customShape\n }\n ) as IArcMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n this.setMarkStyle(\n progressMark,\n {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart,\n endAngle: this._getAngleValueEnd,\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._trackMark) {\n marks.push(this._trackMark);\n }\n\n if (this._progressMark) {\n marks.push(this._progressMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n }\n\n private _initTrackMark() {\n this._trackMark = this._createMark(\n CircularProgressSeries.mark.track,\n {\n parent: this._arcGroupMark,\n stateSort: this._spec.track?.stateSort\n },\n {\n setCustomizedShape: this._spec.track?.customShape\n }\n ) as IArcMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(\n trackMark,\n {\n visible: (datum: Datum) => {\n const scale = this.angleAxisHelper.getScale(0);\n const range = scale.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const startValue = this._getAngleValueStartWithoutMask(datum);\n // 堆叠情况只显示第一组的背景\n return Math.abs(startValue - min) <= 1e-14;\n },\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: () => {\n const fieldName = this.getStack() ? STACK_FIELD_START : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueStart({ [fieldName]: domain[0] });\n },\n endAngle: () => {\n const fieldName = this.getStack() ? STACK_FIELD_END : this._angleField[0];\n const scale = this.angleAxisHelper.getScale(0);\n const domain = scale.domain();\n return this._getAngleValueEnd({ [fieldName]: domain[domain.length - 1] });\n },\n innerRadius: this._getRadiusValueStart,\n outerRadius: this._getRadiusValueEnd,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 100\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected _getRadiusValueStart = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value = this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields()));\n if (isValidNumber(value)) {\n return value;\n }\n }\n return this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]);\n };\n\n protected _getRadiusValueEnd = (datum: Datum) => {\n if (this.getGroupFields().length > 1) {\n const value =\n this.radiusAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.radiusAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0);\n if (isValidNumber(value)) {\n return value;\n }\n }\n return (\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]) +\n (this.radiusAxisHelper.getScale(0) as BandScale).step()\n );\n };\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.({ startAngle: this._startAngle }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerCircularProgressSeries = () => {\n Factory.registerSeries(CircularProgressSeries.type, CircularProgressSeries);\n registerArcMark();\n registerProgressLikeAnimation();\n registerFadeInOutAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { isNil } from '@visactor/vutils';\nimport type { IPolarAxisSpec, IPolarBandAxisSpec, IPolarLinearAxisSpec } from '../../../component';\nimport type { IPolarChartSpec } from '../interface';\nimport { PolarChartSpecTransformer } from '../polar-transformer';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class ProgressLikeChartSpecTransformer extends PolarChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec, ['startAngle', 'endAngle', 'centerX', 'centerY']);\n\n series.categoryField = spec.categoryField || spec.radiusField;\n series.valueField = spec.valueField || spec.angleField;\n\n return series;\n }\n\n protected _transformProgressAxisSpec(\n spec: T,\n angleAxisDefaultSpec: IPolarAxisSpec,\n radiusAxisDefaultSpec: IPolarAxisSpec,\n angleAxisAppendSpec?: Partial,\n radiusAxisAppendSpec?: Partial\n ): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n // 找到用户配的角度轴和半径轴\n let radiusAxis: IPolarBandAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'radius');\n let angleAxis: IPolarLinearAxisSpec = (spec.axes ?? []).find((axis: IPolarAxisSpec) => axis.orient === 'angle');\n // 如果没有找到对应的轴,则自动补充默认配置\n if (!angleAxis) {\n angleAxis = angleAxisDefaultSpec;\n spec.axes.push(angleAxis);\n }\n if (!radiusAxis) {\n radiusAxis = radiusAxisDefaultSpec;\n spec.axes.push(radiusAxis);\n }\n\n // 在以上配置的基础上,对轴 spec 进行统一修改\n\n // 自动补充缺失的配置\n if (isNil(angleAxis.type)) {\n angleAxis.type = 'linear';\n }\n if (isNil(radiusAxis.type)) {\n radiusAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(angleAxis, { min: 0, max: 1 });\n if (isNil(angleAxis.min)) {\n angleAxis.min = domain.min;\n }\n if (isNil(angleAxis.max)) {\n angleAxis.max = domain.max;\n }\n\n // merge 额外的配置\n if (angleAxisAppendSpec) {\n Object.assign(angleAxis, mergeSpec({}, angleAxisAppendSpec, angleAxis));\n }\n if (radiusAxisAppendSpec) {\n Object.assign(radiusAxis, mergeSpec({}, radiusAxisAppendSpec, radiusAxis));\n }\n }\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../../polar';\nimport type { ICircularProgressChartSpec } from './interface';\n\nexport class CircularProgressChartSpecTransformer<\n T extends ICircularProgressChartSpec = ICircularProgressChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n\n series.progress = spec.progress;\n series.track = spec.track;\n series.tickMask = spec.tickMask;\n series.cornerRadius = spec.cornerRadius ?? 0;\n series.roundCap = spec.roundCap ?? false;\n return series;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: false\n },\n {\n orient: 'radius',\n visible: false\n },\n {\n forceInitTick: spec.tickMask && spec.tickMask.visible !== false\n }\n );\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface';\nimport { registerCircularProgressSeries } from '../../../series/progress/circular';\nimport { Factory } from '../../../core/factory';\nimport type { ICircularProgressChartSpec } from './interface';\nimport { CircularProgressChartSpecTransformer } from './circular-progress-transformer';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class CircularProgressChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.circularProgress;\n static readonly seriesType: string = SeriesTypeEnum.circularProgress;\n static readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly transformerConstructor = CircularProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circularProgress;\n readonly seriesType: string = SeriesTypeEnum.circularProgress;\n}\n\nmixin(CircularProgressChart, StackChartMixin);\n\nexport const registerCircularProgressChart = () => {\n registerCircularProgressSeries();\n Factory.registerChart(CircularProgressChart.type, CircularProgressChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core';\n\nexport type ProgressLikeAppearPreset = 'grow' | 'fadeIn';\n\nexport interface IProgressLikeAnimationParams {\n startAngle?: number;\n}\n\nconst Appear_Grow = (params: IProgressLikeAnimationParams): IAnimationTypeConfig => ({\n channel: {\n angle: {\n from: params.startAngle + Math.PI / 2\n }\n }\n});\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function gaugePointerPresetAnimation(params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerGaugePointerAnimation = () => {\n Factory.registerAnimation(\n 'gaugePointer',\n (params: IProgressLikeAnimationParams, preset: ProgressLikeAppearPreset) => {\n const animation = gaugePointerPresetAnimation(params, preset);\n return {\n appear: animation,\n enter: animation,\n disappear: { type: 'fadeOut' }\n };\n }\n );\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport type { IGaugePointerSeriesSpec, IGaugePointerSeriesTheme } from './interface';\n\nexport class GaugePointerSeriesSpecTransformer<\n T extends IGaugePointerSeriesSpec = IGaugePointerSeriesSpec,\n K extends IGaugePointerSeriesTheme = IGaugePointerSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { TooltipActiveType } from '../../typings';\n\nexport class GaugePointerTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IMark, IPathMark, IRectMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { clamp, isValid, maxInArray, minInArray } from '@visactor/vutils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugePointerSeriesSpec, PinMarkSpec, PointerMarkSpec } from './interface';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { ProgressLikeSeries } from '../polar/progress-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPathMark } from '../../mark/path';\nimport { registerRectMark } from '../../mark/rect';\nimport { gaugePointerSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerGaugePointerAnimation } from './animation';\nimport { GaugePointerSeriesSpecTransformer } from './gauge-pointer-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\nimport { GaugePointerTooltipHelper } from './pointer-tooltip-helper';\n\nexport class GaugePointerSeries<\n T extends IGaugePointerSeriesSpec = IGaugePointerSeriesSpec\n> extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gaugePointer;\n type = SeriesTypeEnum.gaugePointer;\n\n static readonly mark: SeriesMarkMap = gaugePointerSeriesMark;\n static readonly transformerConstructor = GaugePointerSeriesSpecTransformer as any;\n readonly transformerConstructor = GaugePointerSeriesSpecTransformer;\n\n private _pinMark: IPathMark | null = null;\n private _pointerMark: IPathMark | IRectMark | null = null;\n private _pinBackgroundMark: IPathMark | null = null;\n\n protected _pointerType: MarkTypeEnum;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n // 半径信息\n this.setRadiusField(this._spec.radiusField);\n\n this._pointerType = this._spec.pointer?.type === 'rect' ? MarkTypeEnum.rect : MarkTypeEnum.path;\n }\n\n initMark(): void {\n this._pinBackgroundMark = this._createMark(GaugePointerSeries.mark.pinBackground) as IPathMark;\n this._pointerMark = this._createMark(\n {\n ...GaugePointerSeries.mark.pointer,\n type: this._pointerType\n },\n {\n isSeriesMark: true\n }\n ) as IPathMark;\n this._pinMark = this._createMark(GaugePointerSeries.mark.pin) as IPathMark;\n }\n\n initMarkStyle(): void {\n this.initPinBackgroundMarkStyle();\n this.initPointerMarkStyle();\n this.initPinMarkStyle();\n }\n\n initGroups() {\n // do nothing\n }\n\n private initPointerMarkStyle() {\n const pointerMark = this._pointerMark;\n const pointerSpec = this._spec.pointer;\n if (pointerMark) {\n this.setMarkStyle(pointerMark, {\n x: (datum: Datum) => {\n const { x } = this._getPointerAnchor(datum, pointerSpec);\n const dx = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n return x - dx;\n },\n y: (datum: Datum) => {\n const { y } = this._getPointerAnchor(datum, pointerSpec);\n const dy = this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n return y - dy;\n },\n anchor: (datum: Datum) => {\n const { x, y } = this._getPointerAnchor(datum, pointerSpec);\n return [x, y];\n },\n fill: this.getColorAttribute(),\n zIndex: 200\n });\n if (this._pointerType === MarkTypeEnum.path) {\n this.setMarkStyle(pointerMark as IPathMark, {\n scaleX: this._getPointerWidth.bind(this),\n scaleY: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) + Math.PI / 2\n });\n } else {\n this.setMarkStyle(pointerMark as IRectMark, {\n width: this._getPointerWidth.bind(this),\n height: this._getPointerHeight.bind(this),\n angle: (datum: Datum) => this._getPointerAngle(datum) - Math.PI / 2\n });\n }\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new GaugePointerTooltipHelper(this);\n\n this._pointerMark && this._tooltipHelper.activeTriggerSet.mark.add(this._pointerMark);\n }\n\n protected _getPointerAnchor(datum: Datum, markSpec: PinMarkSpec | PointerMarkSpec) {\n if (markSpec.isOnCenter ?? true) {\n return this.angleAxisHelper.center();\n }\n return this.radiusAxisHelper.coordToPoint({\n radius: this._innerRadius * this._computeLayoutRadius(),\n angle: this.angleAxisHelper.dataToPosition([datum[this._angleField[0]]])\n });\n }\n\n protected _getPointerWidth() {\n return this._spec.pointer.width * this._computeLayoutRadius();\n }\n\n protected _getPointerHeight(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const radiusField = this._radiusField[0];\n if (isValid(this.radiusAxisHelper) && isValid(radiusField)) {\n return (\n this.radiusAxisHelper.dataToPosition([datum[radiusField]]) -\n (pointerSpec?.innerPadding ?? 0) -\n (pointerSpec?.outerPadding ?? 10)\n );\n }\n return pointerSpec.height * this._computeLayoutRadius();\n }\n\n protected _getPointerAngle(datum: Datum) {\n const scale = this.angleAxisHelper.getScale();\n const domain = scale.domain();\n const max = maxInArray(domain);\n const min = minInArray(domain);\n const angle = clamp(datum[this._angleField[0]], min, max);\n return this.angleAxisHelper.dataToPosition([angle]);\n }\n\n protected _getRotatedPointerCenterOffset(datum: Datum) {\n const pointerSpec = this._spec.pointer;\n const x = this._getPointerWidth() * (pointerSpec?.center?.[0] ?? 0);\n const y = -this._getPointerHeight(datum) * (pointerSpec?.center?.[1] ?? 0);\n const angle = this._getPointerAngle(datum) - Math.PI / 2;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x1 = x * cos + y * sin;\n const y1 = y * cos - x * sin;\n return {\n x: x1,\n y: -y1\n };\n }\n\n private initPinBackgroundMarkStyle() {\n const pinBackgroundMark = this._pinBackgroundMark;\n const pinBackgroundSpec = this._spec.pinBackground;\n if (pinBackgroundMark) {\n this.setMarkStyle(pinBackgroundMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinBackgroundSpec).y,\n scaleX: () => pinBackgroundSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinBackgroundSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 100\n });\n }\n }\n\n private initPinMarkStyle() {\n const pinMark = this._pinMark;\n const pinSpec = this._spec.pin;\n if (pinMark) {\n this.setMarkStyle(pinMark, {\n x: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).x,\n y: (datum: Datum) => this._getPointerAnchor(datum, pinSpec).y,\n scaleX: () => pinSpec.width * this._computeLayoutRadius(),\n scaleY: () => pinSpec.height * this._computeLayoutRadius(),\n fill: this.getColorAttribute(),\n zIndex: 300\n });\n }\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._pointerMark ? [this._pointerMark] : []);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._pointerMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('gaugePointer')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.pointer, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugePointerSeries = () => {\n Factory.registerSeries(GaugePointerSeries.type, GaugePointerSeries);\n registerPathMark();\n registerRectMark();\n registerGaugePointerAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IGaugeSeriesSpec, IGaugeSeriesTheme } from './interface';\n\nexport class GaugeSeriesSpecTransformer<\n T extends IGaugeSeriesSpec = IGaugeSeriesSpec,\n K extends IGaugeSeriesTheme = IGaugeSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.segment);\n }\n}\n","import type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IGaugeSeriesSpec } from './interface';\nimport { ProgressLikeSeries } from '../polar/progress-like/progress-like';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SEGMENT_FIELD_END, SEGMENT_FIELD_START } from '../../constant/data';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { gaugeSeriesMark } from './constant';\nimport { clamper, degreeToRadian, isValid } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport { registerProgressLikeAnimation } from '../polar/progress-like';\nimport type { IArcMark, IMark } from '../../mark/interface';\nimport { GaugeSeriesSpecTransformer } from './gauge-transformer';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerPolarLinearAxis } from '../../component/axis/polar';\nimport { AttributeLevel } from '../../constant/attribute';\n\nexport class GaugeSeries extends ProgressLikeSeries {\n static readonly type: string = SeriesTypeEnum.gauge;\n type = SeriesTypeEnum.gauge;\n\n static readonly mark: SeriesMarkMap = gaugeSeriesMark;\n static readonly transformerConstructor = GaugeSeriesSpecTransformer as any;\n readonly transformerConstructor = GaugeSeriesSpecTransformer;\n\n private _segmentMark: IArcMark | null = null;\n private _trackMark: IArcMark | null = null;\n\n protected _padAngle: number = 0;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this._padAngle = degreeToRadian(this._spec.padAngle ?? 0);\n }\n\n initData(): void {\n super.initData();\n\n /**\n * @description 将数据排序并调整图元的起始点为上一个数据的终点,但是终点维持不变\n */\n const spiltSegment = (data: Datum[], op: string) => {\n // 数据处理\n const dataCollect = data.slice();\n dataCollect.sort((a, b) => a[this._angleField[0]] - b[this._angleField[0]]);\n dataCollect.forEach((datum: any, i) => {\n datum[SEGMENT_FIELD_END] = datum[this._angleField[0]];\n if (i > 0) {\n datum[SEGMENT_FIELD_START] = dataCollect[i - 1][SEGMENT_FIELD_END];\n } else {\n datum[SEGMENT_FIELD_START] = undefined;\n }\n });\n return dataCollect;\n };\n\n registerDataSetInstanceTransform(this._option.dataSet, 'spiltSegment', spiltSegment);\n this.getViewData()?.transform(\n {\n type: 'spiltSegment'\n },\n false\n );\n }\n\n initMark(): void {\n super.initMark();\n this._trackMark = this._createMark(GaugeSeries.mark.track, {\n parent: this._arcGroupMark,\n dataView: false\n }) as IArcMark;\n this._segmentMark = this._createMark(GaugeSeries.mark.segment, {\n parent: this._arcGroupMark,\n isSeriesMark: true\n }) as IArcMark;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this.initTrackMarkStyle();\n this.initSegmentMarkStyle();\n }\n\n private initSegmentMarkStyle() {\n const segmentMark = this._segmentMark;\n if (segmentMark) {\n this.setMarkStyle(segmentMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._getAngleValueStart.bind(this),\n endAngle: this._getAngleValueEnd.bind(this),\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute(),\n zIndex: 200,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // forceShowCap 是内部属性,不在接口中暴露\n forceShowCap: true\n });\n }\n }\n\n protected generateRadiusStyle(spec: any) {\n if (!spec) {\n return;\n }\n const style: any = {};\n spec.outerRadius && (style.outerRadius = () => this._computeLayoutRadius() * spec.outerRadius);\n spec.innerRadius && (style.innerRadius = () => this._computeLayoutRadius() * spec.innerRadius);\n return style;\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string): void {\n super.initMarkStyleWithSpec(mark, spec, key);\n if (mark && mark.name === SeriesMarkNameEnum.segment) {\n // radius 配置需要额外处理比例值\n const segmentSpec = this.getSpec()[SeriesMarkNameEnum.segment];\n if (segmentSpec) {\n for (const state in segmentSpec.state || {}) {\n this.setMarkStyle(mark, this.generateRadiusStyle(segmentSpec.state[state]), state, AttributeLevel.User_Mark);\n }\n }\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._segmentMark && this._tooltipHelper.activeTriggerSet.mark.add(this._segmentMark);\n }\n\n private initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n this.setMarkStyle(trackMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0),\n outerRadius: () => this._computeLayoutRadius() * (this._spec.radius ?? this._spec.outerRadius ?? 1), // 需要优先兼容this._spec.radius\n cap: this._spec.roundCap ?? false,\n boundsMode: 'imprecise',\n cornerRadius: this._spec.cornerRadius,\n zIndex: 100\n });\n }\n }\n\n protected _getAngleValueStartWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return clamper(\n startAngle,\n (startAngle + endAngle) / 2\n )(startAngle + (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));\n }\n\n protected _getAngleValueEndWithoutMask(datum: Datum) {\n const startAngle = this._getAngleValueStartWithoutPadAngle(datum);\n const endAngle = this._getAngleValueEndWithoutPadAngle(datum);\n return clamper(\n endAngle,\n (startAngle + endAngle) / 2\n )(endAngle - (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));\n }\n\n protected _getAngleValueStartWithoutPadAngle(datum: Datum) {\n return isValid(datum[SEGMENT_FIELD_START])\n ? this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_START]])\n : this._startAngle;\n }\n\n protected _getAngleValueEndWithoutPadAngle(datum: Datum) {\n return this.angleAxisHelper.dataToPosition([datum[SEGMENT_FIELD_END]]);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._segmentMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circularProgress')?.(\n {\n startAngle: this._startAngle\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.segment, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [];\n }\n}\n\nexport const registerGaugeSeries = () => {\n Factory.registerSeries(GaugeSeries.type, GaugeSeries);\n registerArcMark();\n registerProgressLikeAnimation();\n // 仪表盘只使用了角度轴\n registerPolarLinearAxis();\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICircularProgressSeriesSpec, IGaugeSeriesSpec } from '../../series';\nimport { SeriesTypeEnum } from '../../series/interface';\nimport type { AdaptiveSpec, ISeriesSpec } from '../../typings';\nimport { ProgressLikeChartSpecTransformer } from '../polar';\nimport type { IGaugeChartSpec } from './interface';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IPolarAxisSpec, IPolarLinearAxisSpec } from '../../component';\n\nexport class GaugeChartSpecTransformer<\n T extends IGaugeChartSpec = IGaugeChartSpec\n> extends ProgressLikeChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec);\n\n series.radiusField = spec.radiusField;\n series.pin = spec.pin;\n series.pinBackground = spec.pinBackground;\n series.pointer = spec.pointer;\n return series;\n }\n\n protected _getDefaultCircularProgressSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n series.type = SeriesTypeEnum.circularProgress;\n return series;\n }\n\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n\n /** 充当仪表图非指针部分的系列 */\n let backgroundSeries = spec.series?.find(\n (series: ISeriesSpec) => series.type === SeriesTypeEnum.gauge || series.type === SeriesTypeEnum.circularProgress\n ) as ICircularProgressSeriesSpec | IGaugeSeriesSpec;\n if (isNil(backgroundSeries)) {\n backgroundSeries = spec.gauge ?? this._getDefaultCircularProgressSeriesSpec(spec as any);\n\n // 补充可能缺失的属性\n if (backgroundSeries.type === 'circularProgress') {\n if (isNil(backgroundSeries.radiusField) && isNil(backgroundSeries.categoryField)) {\n backgroundSeries.radiusField = spec.radiusField ?? (spec.categoryField as string) ?? spec.seriesField;\n }\n if (isNil(backgroundSeries.valueField) && isNil(backgroundSeries.angleField)) {\n backgroundSeries.valueField = spec.valueField ?? spec.angleField;\n }\n }\n\n if (spec.series.length === 1) {\n spec.series.push(backgroundSeries);\n } else {\n spec.series.forEach((s: ISeriesSpec) => {\n if (s.type !== backgroundSeries.type) {\n return;\n }\n Object.keys(backgroundSeries).forEach(k => {\n if (!(k in s)) {\n s[k] = backgroundSeries[k];\n }\n });\n });\n }\n }\n\n if (backgroundSeries.type === SeriesTypeEnum.circularProgress) {\n this._transformProgressAxisSpec(\n spec,\n {\n orient: 'angle',\n visible: true,\n domainLine: {\n visible: false\n },\n grid: {\n visible: false\n }\n },\n {\n orient: 'radius',\n visible: false\n },\n {\n zIndex: LayoutZIndex.Region + 50 // 仪表图特例:轴在 region 上层\n }\n );\n } else {\n this._transformGaugeAxisSpec(spec);\n }\n }\n\n protected _transformGaugeAxisSpec(spec: AdaptiveSpec): void {\n if (!spec.axes) {\n spec.axes = [];\n }\n const axesPtr: {\n radius: IPolarLinearAxisSpec | null;\n angle: IPolarLinearAxisSpec | null;\n } = { radius: null, angle: null };\n (spec.axes ?? []).forEach((axis: IPolarAxisSpec) => {\n const { orient } = axis;\n if (orient === 'radius') {\n axesPtr.radius = axis;\n }\n if (orient === 'angle') {\n axesPtr.angle = axis;\n }\n });\n if (!axesPtr.angle) {\n axesPtr.angle = {\n orient: 'angle',\n visible: true\n };\n spec.axes.push(axesPtr.angle);\n }\n if (!axesPtr.radius) {\n axesPtr.radius = {\n orient: 'radius',\n visible: false\n };\n spec.axes.push(axesPtr.radius);\n }\n\n // 自动补充缺失的配置\n if (isNil(axesPtr.angle.type)) {\n axesPtr.angle.type = 'linear';\n }\n if (isNil(axesPtr.radius.type)) {\n axesPtr.radius.type = 'linear';\n }\n if (isNil(axesPtr.angle.zIndex)) {\n axesPtr.angle.zIndex = LayoutZIndex.Region + 50; // 仪表图特例:轴在 region 上层\n }\n }\n}\n","import { registerGaugePointerSeries, registerGaugeSeries } from '../../series/gauge';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IGaugeChartSpec } from './interface';\nimport { GaugeChartSpecTransformer } from './gauge-transformer';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BaseChart } from '../base';\n\nexport class GaugeChart extends BaseChart> {\n static readonly type: string = ChartTypeEnum.gauge;\n static readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n static readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly transformerConstructor = GaugeChartSpecTransformer;\n readonly type: string = ChartTypeEnum.gauge;\n readonly seriesType: string = SeriesTypeEnum.gaugePointer;\n}\n\nexport const registerGaugeChart = () => {\n registerGaugePointerSeries();\n registerGaugeSeries();\n Factory.registerChart(GaugeChart.type, GaugeChart);\n};\n","import { BaseChartSpecTransformer } from '../../base';\nimport type { IWordCloudChartSpec } from '../interface';\n\nexport class BaseWordCloudChartSpecTransformer extends BaseChartSpecTransformer {\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'nameField',\n 'valueField',\n 'fontFamilyField',\n 'fontWeightField',\n 'fontStyleField',\n 'colorHexField',\n 'colorMode',\n 'colorList',\n 'rotateAngles',\n 'fontWeightRange',\n 'fontSizeRange',\n 'maskShape',\n 'keepAspect',\n 'random',\n 'wordCloudConfig',\n 'wordCloudShapeConfig',\n 'word',\n 'fillingWord',\n 'wordMask'\n ]);\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { BaseChart } from '../../base/base-chart';\nimport type { IWordCloudChartSpec } from '../interface';\nimport { BaseWordCloudChartSpecTransformer } from './word-cloud-base-transformer';\n\nexport class BaseWordCloudChart extends BaseChart {\n static readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n","export const DEFAULT_ROTATE_ANGLES: number[] = [0];\nexport const DEFAULT_DRAW_OUT_OF_BOUND = 'hidden';\nexport const DEFAULT_MIN_FONT_SIZE = 20;\nexport const DEFAULT_FONTSIZE_RANGE: [number, number] = [20, 40];\nexport const DEFAULT_FONT_WEIGHT_RANGE: [number, number] = [200, 500];\nexport const DEFAULT_MASK_SHAPE = 'circle';\nexport const DEFAULT_ZOOM_TO_FIT = {\n shrink: false,\n enlarge: false,\n fontSizeLimitMin: 0\n};\nexport const DEFAULT_RANDOM = true;\nexport const DEFAULT_FONT_PADDING = 1;\nexport const DEFAULT_TEXT_ALIGN = 'center';\nexport const DEFAULT_TEXT_BASE_LINE = 'alphabetic';\nexport const SHAPE_TYPE = [\n 'triangleForward',\n 'triangle',\n 'diamond',\n 'square',\n 'star',\n 'cardioid',\n 'circle',\n 'pentagon',\n 'rect'\n];\n","/* eslint-disable no-duplicate-imports */\nimport type { IPadding } from '@visactor/vutils';\nimport { isNil, isObject, isValidNumber } from '@visactor/vutils';\nimport { isValid } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_KEY, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { isTrueBrowser } from '../../util/env';\nimport {\n DEFAULT_DRAW_OUT_OF_BOUND,\n DEFAULT_FONTSIZE_RANGE,\n DEFAULT_FONT_PADDING,\n DEFAULT_FONT_WEIGHT_RANGE,\n DEFAULT_MASK_SHAPE,\n DEFAULT_MIN_FONT_SIZE,\n DEFAULT_RANDOM,\n DEFAULT_ROTATE_ANGLES,\n DEFAULT_ZOOM_TO_FIT,\n SHAPE_TYPE\n} from './config';\nimport type {\n IWordCloudSeriesSpec,\n WordCloudConfigType,\n WordCloudShapeConfigType,\n WordCloudShapeType\n} from './interface';\nimport type { Datum, IMarkSpec, IPoint, ITextMarkSpec } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { WORD_CLOUD_TEXT } from '../../constant/word-cloud';\nimport type { ICompilableMark } from '../../compile/mark';\nimport { BaseSeries } from '../base/base-series';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { wordCloudSeriesMark } from './constant';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { Factory } from '../../core/factory';\nimport type { IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { LinearScale } from '@visactor/vscale';\nimport type { GeometricMaskShape, TextShapeMask } from '@visactor/vgrammar-util';\n\nexport type IBaseWordCloudSeriesSpec = Omit & { type: string };\n\nexport class BaseWordCloudSeries extends BaseSeries {\n static readonly mark: SeriesMarkMap = wordCloudSeriesMark;\n\n protected _nameField: string;\n protected _valueField?: string;\n setValueField(field: string) {\n if (isValid(field)) {\n this._valueField = field;\n }\n }\n\n protected _colorMode: 'linear' | 'ordinal';\n protected _colorList: string[];\n protected _rotateAngles?: number[];\n protected _fontWeightRange?: [number, number];\n protected _textField?: string;\n protected _maskCanvas?: HTMLCanvasElement;\n protected _maskMark?: IRectMark;\n\n protected _fontSizeRange?: [number, number] | 'auto' = [DEFAULT_MIN_FONT_SIZE, DEFAULT_MIN_FONT_SIZE];\n setFontSizeRange(fontSizeRange: [number, number] | 'auto') {\n if (isValid(fontSizeRange)) {\n this._fontSizeRange = fontSizeRange;\n } else {\n this._fontSizeRange = DEFAULT_FONTSIZE_RANGE;\n }\n }\n\n protected _maskShape?: string | WordCloudShapeType | TextShapeMask | GeometricMaskShape;\n protected _isWordCloudShape: boolean = false;\n\n protected _wordCloudConfig?: WordCloudConfigType;\n protected _wordCloudShapeConfig?: WordCloudShapeConfigType;\n\n protected _padding?: IPadding;\n protected _defaultFontFamily: string;\n\n protected _keyWordColorCallback: (datum: Datum) => string;\n protected _fillingColorCallback: (datum: Datum) => string;\n protected _dataChange: boolean = true;\n\n protected handleMaskCanvasUpdate = (canvas: HTMLCanvasElement, imageUrl?: string) => {\n this._maskCanvas = canvas;\n };\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // series布局相关\n this._padding = this._option.getChart().padding;\n\n // 普通词云 & 形状词云 共有spec相关\n this._nameField = this._spec.nameField;\n this._colorMode = this._spec.colorMode ?? 'ordinal';\n this._colorList = this._spec.colorList;\n this.setValueField(this._spec.valueField);\n this._fontWeightRange = this._spec.fontWeightRange ?? DEFAULT_FONT_WEIGHT_RANGE;\n this._rotateAngles = this._spec.rotateAngles ?? DEFAULT_ROTATE_ANGLES;\n this.setFontSizeRange(this._spec.fontSizeRange);\n this._maskShape = this._spec.maskShape ?? DEFAULT_MASK_SHAPE;\n this._textField = this._spec.word?.formatMethod ? WORD_CLOUD_TEXT : this._nameField;\n const wordCloudConfig = this._spec.wordCloudConfig;\n // 普通词云spec相关\n this._wordCloudConfig = {\n drawOutOfBound: DEFAULT_DRAW_OUT_OF_BOUND,\n layoutMode: 'default',\n zoomToFit: DEFAULT_ZOOM_TO_FIT,\n ...this._spec.wordCloudConfig\n };\n\n if ((!wordCloudConfig || isNil(wordCloudConfig.layoutMode)) && !isTrueBrowser(this._option.mode)) {\n this._wordCloudConfig.layoutMode = 'fast';\n }\n\n // 形状词云spec相关\n this._wordCloudShapeConfig = {\n fillingSeriesField: this.getSeriesField(),\n fillingRotateAngles: DEFAULT_ROTATE_ANGLES,\n layoutMode: 'default',\n ...this._spec.wordCloudShapeConfig\n };\n\n this._isWordCloudShape =\n !SHAPE_TYPE.includes(this._maskShape as string) &&\n !['fast', 'grid', 'cloud'].includes(this._wordCloudConfig.layoutMode);\n this._defaultFontFamily = this._option.getTheme().fontFamily as string;\n }\n\n /**\n * @override\n */\n protected initData(): void {\n super.initData();\n // data改变时, 需要重新编译, 重新布局\n this.getViewData()?.target?.addListener('change', () => {\n this._dataChange = true;\n this.compile();\n });\n }\n\n protected _wordMark: ITextMark;\n\n initMark(): void {\n if (this._spec.wordMask?.visible) {\n this._maskMark = this._createMark(BaseWordCloudSeries.mark.wordMask, { dataView: false }) as IRectMark;\n }\n\n this._wordMark = this._createMark(\n BaseWordCloudSeries.mark.word,\n {\n key: DEFAULT_DATA_KEY,\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n morphElementKey: this._seriesField\n }\n ) as ITextMark;\n }\n\n initMarkStyle() {\n this.initMarkStyleOfWord(this._wordMark, this._spec.word, this._spec.colorHexField, this._seriesField);\n\n if (this._maskMark) {\n this.setMarkStyle(\n this._maskMark,\n {\n width: () => {\n return this._region.getLayoutRect().width;\n },\n height: () => {\n return this._region.getLayoutRect().height;\n },\n background: () => {\n return this._maskCanvas;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initMarkStyleOfWord(\n wordMark: ITextMark,\n wordSpec?: IMarkSpec,\n colorHexField?: string,\n seriesField?: string,\n isFillingWord?: boolean\n ): void {\n if (!wordMark) {\n return;\n }\n this.setMarkStyle(\n wordMark,\n {\n text: (wordSpec as any)?.formatMethod\n ? (datum: Datum) => {\n return (wordSpec as any).formatMethod(datum);\n }\n : (datum: Datum) => datum[this._textField],\n x: (datum: Datum) => datum.x,\n y: (datum: Datum) => datum.y,\n fontSize: (datum: Datum) => datum.fontSize,\n fontStyle: (datum: Datum) => datum.fontStyle,\n\n angle: (datum: Datum) => datum.angle,\n visible: (datum: Datum) => datum.visible\n },\n 'normal',\n AttributeLevel.Series\n );\n this.setMarkStyle(\n wordMark,\n {\n fill: wordSpec?.style?.fill ?? this.getWordColor,\n // style和field相关的配置都已经传给vgrammar, 所以这里直接拿结果就可以\n fontWeight: (datum: Datum) => datum.fontWeight,\n fontFamily: (datum: Datum) => datum.fontFamily\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._wordMark && this._tooltipHelper.activeTriggerSet.mark.add(this._wordMark);\n }\n\n initAnimation() {\n [this._wordMark].forEach(mark => {\n if (mark) {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const params = {\n animationConfig: () => mark.getAnimationConfig()?.appear?.[0]\n };\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud')(params, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n }\n\n protected getWordOrdinalColorScale(field: string, isFillingWord: boolean) {\n const colorList = isFillingWord ? this._wordCloudShapeConfig.fillingColorList : this._colorList;\n const colorDomain = field ? this.getViewData()?.latestData.map((datum: Datum) => datum[field]) : [];\n const colorRange = colorList ?? this._option.globalScale.getScale('color')?.range() ?? this._getDataScheme();\n return new ColorOrdinalScale().domain(colorDomain).range?.(colorRange);\n }\n\n protected initColorCallback(field: string, isFillingWord: boolean) {\n if (this._colorMode === 'ordinal') {\n const scale = this.getWordOrdinalColorScale(field, isFillingWord);\n return (datum: Datum) => {\n return scale.scale(datum[field ?? DEFAULT_DATA_SERIES_FIELD]);\n };\n }\n\n const colorList =\n (isFillingWord ? this._colorList : this._wordCloudShapeConfig.fillingColorList) ??\n this._option.globalScale.getScale('color').range();\n\n if (colorList.length === 1) {\n return (datum: Datum) => colorList[0];\n }\n\n if (this._valueField) {\n const stats = this.getRawDataStatisticsByField(this._valueField, true);\n if (stats.min === stats.max) {\n return colorList[0];\n }\n const scale = new LinearScale().domain([stats.min, stats.max]).range(colorList);\n\n return (datum: Datum) => {\n return scale.scale(datum[this._valueField]);\n };\n }\n\n const scale = new LinearScale().domain([0, this.getViewData()?.latestData?.length ?? 1]).range(colorList);\n\n return (datum: Datum) => {\n return scale.scale(datum[DEFAULT_DATA_INDEX]);\n };\n }\n\n getWordColor = (datum: Datum) => {\n if (datum.isFillingWord) {\n if (!this._fillingColorCallback || this._dataChange) {\n // 如果updateData数据变更了, 颜色映射也需要重新计算\n this._fillingColorCallback = this._wordCloudShapeConfig.fillingColorHexField\n ? (datum: Datum) => datum[this._wordCloudShapeConfig.fillingColorHexField]\n : this.initColorCallback(this._wordCloudShapeConfig.fillingSeriesField, true);\n }\n\n return this._fillingColorCallback(datum);\n }\n\n if (!this._keyWordColorCallback || this._dataChange) {\n // 如果updateData数据变更了, 颜色映射也需要重新计算\n this._keyWordColorCallback = this._spec.colorHexField\n ? datum => datum[this._spec.colorHexField]\n : this.initColorCallback(this._seriesField, false);\n }\n\n return this._keyWordColorCallback(datum);\n };\n\n private _calculateFontWeight = (datum: Datum) => {\n const stats = this.getRawDataStatisticsByField(this._valueField, true);\n\n if (stats.min === stats.max) {\n return this._fontWeightRange[0];\n }\n\n return (\n this._fontWeightRange[0] +\n ((this._fontWeightRange[this._fontWeightRange.length - 1] - this._fontWeightRange[0]) *\n (datum[this._valueField] - stats.min)) /\n (stats.max - stats.min)\n );\n };\n\n compile(): void {\n super.compile();\n const { width, height } = this._region.getLayoutRect();\n // 非正常尺寸下不进行布局\n if (!isValidNumber(width) || !isValidNumber(height) || !(height > 0 && width > 0)) {\n return;\n }\n\n const product = (this._wordMark as ICompilableMark).getProduct();\n\n if (product) {\n const wordCloudTransforms: any[] = [];\n\n // 词云 transform\n if (!this._isWordCloudShape) {\n wordCloudTransforms.push({\n type: 'wordcloud',\n ...this._wordCloudTransformOption()\n });\n }\n // 形状词云 transform\n else {\n wordCloudTransforms.push({\n type: 'wordcloudShape',\n // 形状词云中必须要传入dataIndexKey, 否则填充词无法绘制\n ...this._wordCloudShapeTransformOption()\n });\n }\n\n // 挂到mark的transform上\n product.transform(wordCloudTransforms);\n }\n }\n\n protected _getCommonTransformOptions(): any {\n const { width, height } = this._region.getLayoutRect();\n const wordSpec = this._spec.word ?? {};\n const wordStyleSpec = wordSpec.style ?? {};\n\n return {\n size: [width, height],\n shape:\n isObject(this._maskShape) &&\n (this._maskShape as TextShapeMask).type === 'text' &&\n isNil((this._maskShape as TextShapeMask).fontFamily)\n ? {\n fontFamily: this._option.getTheme()?.fontFamily,\n ...this._maskShape\n }\n : this._maskShape,\n onUpdateMaskCanvas: this.handleMaskCanvasUpdate,\n dataIndexKey: DEFAULT_DATA_KEY,\n text: wordSpec.formatMethod\n ? (datum: Datum) => {\n return wordSpec.formatMethod(datum);\n }\n : { field: this._textField },\n fontSize: this._valueField ? { field: this._valueField } : this._fontSizeRange[0],\n fontSizeRange: this._fontSizeRange === 'auto' ? null : this._fontSizeRange,\n\n padding: this._spec.word?.padding ?? DEFAULT_FONT_PADDING,\n fontFamily: isValid(this._spec.fontFamilyField)\n ? { field: this._spec.fontFamilyField }\n : wordStyleSpec.fontFamily ?? this._defaultFontFamily,\n // 为了保持和旧版逻辑一致,优先级如下: spec field > mark style > default (根据valueField映射)\n fontWeight: isValid(this._spec.fontWeightField)\n ? { field: this._spec.fontWeightField }\n : isValid(wordStyleSpec.fontWeight)\n ? wordStyleSpec.fontWeight\n : isValid(this._valueField)\n ? this._calculateFontWeight\n : 'normal',\n fontStyle: isValid(this._spec.fontStyleField) ? { field: this._spec.fontStyleField } : wordStyleSpec.fontStyle\n };\n }\n\n protected _wordCloudTransformOption(): Object {\n const wordCloudConfig = this._wordCloudConfig ?? {};\n\n return {\n ...wordCloudConfig,\n ...this._getCommonTransformOptions(),\n // TIP: 非浏览器环境下,使用 fast 布局,否则会出现兼容问题\n layoutType: this._wordCloudConfig.layoutMode,\n\n rotate: this._rotateAngles,\n\n randomVisible: this._spec.random ?? DEFAULT_RANDOM,\n clip: this._wordCloudConfig.drawOutOfBound === 'clip',\n shrink: this._wordCloudConfig.zoomToFit.shrink,\n enlarge: this._wordCloudConfig.zoomToFit.enlarge,\n minFontSize: this._wordCloudConfig.zoomToFit.fontSizeLimitMin,\n progressiveTime: this._wordCloudConfig.progressiveTime,\n progressiveStep: this._wordCloudConfig.progressiveStep,\n repeatFill: this._wordCloudConfig.zoomToFit.repeat\n };\n }\n\n protected _wordCloudShapeTransformOption(): Object {\n const fillingWordStyleSpec = this._spec.fillingWord?.style ?? {};\n const wordCloudShapeConfig = this._wordCloudShapeConfig ?? {};\n\n return {\n ...wordCloudShapeConfig,\n ...this._getCommonTransformOptions(),\n\n rotateList: this._rotateAngles,\n fillingRotateList: wordCloudShapeConfig.fillingRotateAngles,\n\n fillingFontFamily: isValid(wordCloudShapeConfig.fillingFontFamilyField)\n ? { field: wordCloudShapeConfig.fillingFontFamilyField }\n : fillingWordStyleSpec.fontFamily ?? this._defaultFontFamily,\n fillingPadding: this._spec.fillingWord?.padding ?? DEFAULT_FONT_PADDING,\n fillingFontStyle: isValid(wordCloudShapeConfig.fillingFontStyleField)\n ? { field: wordCloudShapeConfig.fillingFontStyleField }\n : fillingWordStyleSpec.fontStyle,\n // 如果配置了字段映射,优先按照映射进行展示\n fillingFontWeight: isValid(wordCloudShapeConfig.fillingFontWeightField)\n ? {\n field: wordCloudShapeConfig.fillingFontWeightField\n }\n : fillingWordStyleSpec.fontWeight // 填充词fontWeight默认不跟随valueField\n };\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._nameField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n dataToPosition(data: Datum): IPoint {\n return null;\n }\n dataToPositionX(data: any): number {\n return null;\n }\n dataToPositionY(data: any): number {\n return null;\n }\n dataToPositionZ(data: any): number {\n return null;\n }\n valueToPosition(value1: any, value2?: any): IPoint {\n return null;\n }\n\n getGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackGroupFields(): string[] {\n // do nothing\n return [];\n }\n\n getStackValueField(): string {\n // do nothing\n return '';\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this.compile();\n this._dataChange = false;\n }\n\n getActiveMarks(): IMark[] {\n return [this._wordMark];\n }\n\n reInit() {\n super.reInit();\n if (this._keyWordColorCallback) {\n this._keyWordColorCallback = null;\n }\n\n if (this._fillingColorCallback) {\n this._fillingColorCallback = null;\n }\n }\n}\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport { RotateBySphereAnimate } from '@visactor/vrender-core';\nimport { DEFAULT_ANIMATION_CONFIG } from '../../animation/config';\nimport { Factory } from '../../core/factory';\nimport type { IWordcloud3dAnimationParams, IWordcloudAnimationParams, WordcloudAppearPreset } from './interface';\n\nexport const WordCloud3dAnimation = (params: IWordcloud3dAnimationParams | (() => any)): IAnimationTypeConfig => {\n return {\n custom: RotateBySphereAnimate,\n customParameters: (datum: any, element: IElement) => params,\n easing: 'linear',\n loop: Infinity,\n duration: 6000\n };\n};\n\nfunction computeWordDelay(duration: number, totalTime: number, wordCount: number) {\n if (duration * wordCount < totalTime) {\n return duration + (totalTime - wordCount * duration) / (wordCount - 1);\n }\n return (totalTime - duration) / (wordCount - 1);\n}\n\nexport const WordCloudScaleInAnimation = (params: IWordcloudAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n fontSize: {\n from: 0\n }\n },\n duration: 200,\n delay: (datum, element, vgrammarParams) => {\n const animationConfig = params.animationConfig();\n const duration = animationConfig?.duration || 200;\n const totalTime = animationConfig?.totalTime || DEFAULT_ANIMATION_CONFIG.appear.duration;\n const count = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementCount;\n const index = vgrammarParams.VGRAMMAR_ANIMATION_PARAMETERS.elementIndex;\n return index * computeWordDelay(duration as number, totalTime as number, count);\n }\n };\n};\n\nexport function wordcloudPresetAnimation(\n params: IWordcloudAnimationParams,\n preset: WordcloudAppearPreset | boolean\n): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return { type: 'fadeIn' };\n case 'scaleIn':\n default:\n return WordCloudScaleInAnimation(params);\n }\n}\n\nexport const registerWordCloudAnimation = () => {\n Factory.registerAnimation('wordCloud', (params: IWordcloudAnimationParams, preset: WordcloudAppearPreset) => ({\n appear: wordcloudPresetAnimation(params, preset),\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n }));\n};\n\nexport const registerWordCloud3dAnimation = () => {\n Factory.registerAnimation('wordCloud3d', (params: IWordcloud3dAnimationParams) => ({\n enter: WordCloud3dAnimation(params)\n }));\n};\n","export const shapes = {\n triangleForward: triangleForward,\n triangleUpright: triangle,\n triangle, // 三角形\n diamond, // 菱形\n square, // 方形\n star, // 星形\n cardioid, // 心形\n circle, // 圆形\n pentagon // 五角形\n};\n\nfunction diamond() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 4);\n return 1 / (Math.cos(thetaPrime) + Math.sin(thetaPrime));\n };\n}\nfunction star() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 10);\n if (((theta + 0.955) % ((2 * Math.PI) / 5)) - (2 * Math.PI) / 10 >= 0) {\n return 1 / (Math.cos((2 * Math.PI) / 10 - thetaPrime) + 3.07768 * Math.sin((2 * Math.PI) / 10 - thetaPrime));\n }\n return 1 / (Math.cos(thetaPrime) + 3.07768 * Math.sin(thetaPrime));\n };\n}\nfunction square() {\n return function (theta: number) {\n return Math.min(1 / Math.abs(Math.cos(theta)), 1 / Math.abs(Math.sin(theta)));\n };\n}\n\nfunction triangle() {\n return function (theta: number) {\n const thetaPrime = (theta + (Math.PI * 3) / 2) % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction triangleForward() {\n return function (theta: number) {\n const thetaPrime = theta % ((2 * Math.PI) / 3);\n return 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime));\n };\n}\nfunction cardioid() {\n return function (theta: number) {\n return 1 + Math.sin(theta);\n };\n}\nfunction circle() {\n return function () {\n return 1;\n };\n}\n\nfunction pentagon() {\n return function (theta: number) {\n const thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 5);\n return 1 / (Math.cos(thetaPrime) + 0.726543 * Math.sin(thetaPrime));\n };\n}\n\nexport function getMaxRadiusAndCenter(shape: string, size: [number, number]) {\n const w = size[0];\n const h = size[1];\n let maxRadius = 1;\n const center = [size[0] >> 1, size[1] >> 1];\n\n switch (shape) {\n case 'cardioid':\n center[1] = ~~((h / 2.7) * 0.4);\n maxRadius = Math.floor(Math.min(w / 2.3, h / 2.6));\n break;\n case 'triangleForward':\n maxRadius = h / Math.sqrt(0.75) > w ? Math.floor(w / 2) : Math.floor(h / (2 * Math.sqrt(0.75)));\n break;\n case 'triangle':\n case 'triangleUpright':\n center[1] = ~~(h / 1.5);\n maxRadius = Math.floor(Math.min(h / 1.5, w / 2));\n break;\n case 'circle':\n case 'diamond':\n case 'square':\n case 'star':\n case 'pentagon':\n maxRadius = Math.floor(Math.min(w / 2, h / 2));\n break;\n case 'rect':\n default:\n maxRadius = Math.floor(Math.max(w / 2, h / 2));\n break;\n }\n return { maxRadius, center };\n}\n\nexport const getShapeFunction = (type: string) => {\n if (shapes[type]) {\n return shapes[type]();\n }\n\n return shapes.circle();\n};\n","export function seedRandom(seed: number) {\n return parseFloat('0.' + Math.sin(seed).toString().substring(6));\n}\n","import { isFunction } from '@visactor/vutils';\n\nexport function isSupported() {\n // eslint-disable-next-line no-undef\n const canvas = document.createElement('canvas');\n if (!canvas || !canvas.getContext) {\n return false;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n if (!ctx.getImageData) {\n return false;\n }\n if (!ctx.fillText) {\n return false;\n }\n\n if (!Array.prototype.some) {\n return false;\n }\n if (!Array.prototype.push) {\n return false;\n }\n\n return true;\n}\n\nexport function getMinFontSizeOfEnv() {\n // eslint-disable-next-line no-undef\n const ctx = document.createElement('canvas').getContext('2d');\n\n // start from 20\n let size = 20;\n\n // two sizes to measure\n let hanWidth;\n let mWidth;\n\n while (size) {\n ctx.font = size.toString(10) + 'px sans-serif';\n if (ctx.measureText('\\uFF37').width === hanWidth && ctx.measureText('m').width === mWidth) {\n return size + 1;\n }\n\n hanWidth = ctx.measureText('\\uFF37').width;\n mWidth = ctx.measureText('m').width;\n\n size--;\n }\n\n return 12;\n}\n\nexport const randomHslColor = (min: number, max: number) => {\n return (\n 'hsl(' +\n (Math.random() * 360).toFixed() +\n ',' +\n (Math.random() * 30 + 70).toFixed() +\n '%,' +\n (Math.random() * (max - min) + min).toFixed() +\n '%)'\n );\n};\n\nexport function functor(d: any) {\n return isFunction(d)\n ? d\n : function () {\n return d;\n };\n}\n","import { array, degreeToRadian, isFunction, isNil, merge, seedRandom } from '@visactor/vutils';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport type { IBaseLayoutOptions, TagItemFunction, TagOutputItem } from './interface';\nimport { getShapeFunction } from '@visactor/vgrammar-util';\nimport { functor, randomHslColor } from './util';\n\nexport abstract class BaseLayout implements IProgressiveTransformResult {\n static defaultOptions: Partial = {\n fontFamily: '\"Trebuchet MS\", \"Heiti TC\", \"微軟正黑體\", ' + '\"Arial Unicode MS\", \"Droid Fallback Sans\", sans-serif',\n fontWeight: 'normal',\n color: 'random-dark',\n fontStyle: 'normal',\n minFontSize: 12, // 0 to disable\n drawOutOfBound: false,\n shrink: false,\n\n minRotation: -Math.PI / 2,\n maxRotation: Math.PI / 2,\n rotationSteps: 0,\n rotateRatio: 0.1,\n\n random: false,\n\n shape: 'circle',\n progressiveTime: 0,\n progressiveStep: 0,\n repeatFill: false,\n fillTextFontSize: 12,\n maxFailCount: 20\n };\n\n options: Partial;\n\n shape: (theta: number) => number;\n getTextFontWeight: TagItemFunction;\n getTextFontSize: TagItemFunction;\n getTextFontFamily: TagItemFunction;\n getText: TagItemFunction;\n getTextColor: TagItemFunction;\n getTextFontStyle: TagItemFunction;\n getTextRotate: TagItemFunction;\n outputCallback: (res: any[]) => any[];\n\n /* ================== runtime vars ================== */\n escapeTime?: number;\n result: TagOutputItem[];\n data?: any[];\n originalData?: any[];\n currentStepIndex?: number;\n progressiveIndex?: number;\n progressiveResult?: TagOutputItem[];\n drawnCount?: number;\n isTryRepeatFill?: boolean;\n\n failCount?: number;\n\n constructor(options: Partial) {\n this.options = merge({}, BaseLayout.defaultOptions, options);\n\n if (isFunction(this.options.shape)) {\n this.shape = this.options.shape;\n } else {\n this.shape = getShapeFunction(this.options.shape as string);\n }\n\n /* function for getting the font-weight of the text */\n this.getText = functor(this.options.text) ?? ((d: any) => d);\n this.getTextFontWeight = functor(this.options.fontWeight);\n this.getTextFontSize = functor(this.options.fontSize);\n this.getTextFontStyle = functor(this.options.fontStyle);\n this.getTextFontFamily = functor(this.options.fontFamily);\n this.outputCallback = this.options.outputCallback ?? ((res: any[]) => res);\n\n switch (this.options.color) {\n case 'random-dark':\n this.getTextColor = () => {\n return randomHslColor(10, 50);\n };\n break;\n\n case 'random-light':\n this.getTextColor = () => {\n return randomHslColor(50, 90);\n };\n break;\n\n default:\n this.getTextColor = functor(this.options.color);\n break;\n }\n\n if (!isNil(this.options.rotate)) {\n this.getTextRotate = isFunction(this.options.rotate)\n ? (d: any) => degreeToRadian((this.options.rotate as (d: any) => number)(d) ?? 0)\n : (d: any, i: number) => {\n const rotates = array(this.options.rotate as number | number[]);\n const random = this.options.random ? Math.random() : seedRandom(i); // 如果配置了random, 则从角度列表随机取值,反之使用种子伪随机取值\n return degreeToRadian(rotates[Math.floor(random * rotates.length)]);\n };\n } else if (this.options.useRandomRotate) {\n const rotationRange = Math.abs(this.options.maxRotation - this.options.minRotation);\n const rotationSteps = Math.abs(Math.floor(this.options.rotationSteps));\n const minRotation = Math.min(this.options.maxRotation, this.options.minRotation);\n\n this.getTextRotate = () => {\n if (this.options.rotateRatio === 0) {\n return 0;\n }\n\n if (Math.random() > this.options.rotateRatio) {\n return 0;\n }\n\n if (rotationRange === 0) {\n return minRotation;\n }\n\n if (rotationSteps > 0) {\n // Min rotation + zero or more steps * span of one step\n return minRotation + (Math.floor(Math.random() * rotationSteps) * rotationRange) / (rotationSteps - 1);\n }\n return minRotation + Math.random() * rotationRange;\n };\n } else {\n this.getTextRotate = () => 0;\n }\n }\n\n canRepeat() {\n return false;\n }\n\n /* Return true if we had spent too much time */\n exceedTime() {\n if (this.options.progressiveStep > 0) {\n return this.progressiveIndex >= ((this.currentStepIndex ?? -1) + 1) * this.options.progressiveStep;\n }\n\n return this.options.progressiveTime > 0 && new Date().getTime() - this.escapeTime > this.options.progressiveTime;\n }\n\n progressiveRun() {\n if (this.options.progressiveStep > 0) {\n this.currentStepIndex = (this.currentStepIndex ?? -1) + 1;\n } else if (this.options.progressiveTime > 0) {\n this.escapeTime = Date.now();\n }\n\n if (this.data && this.progressiveIndex < this.data.length) {\n this.progressiveResult = [];\n let i = this.progressiveIndex;\n\n let curWordTryCount = 0;\n const maxSingleWordTryCount = this.options.maxSingleWordTryCount;\n const maxFailCount = Math.min(this.options.maxFailCount, this.originalData.length);\n\n while (i < this.data.length && this.failCount < maxFailCount) {\n const drawn = this.layoutWord(i);\n curWordTryCount++;\n\n if (drawn || curWordTryCount > maxSingleWordTryCount) {\n i++;\n curWordTryCount = 0;\n this.failCount = drawn ? 0 : this.failCount + 1;\n }\n this.progressiveIndex = i;\n if (this.exceedTime()) {\n break;\n } else if (\n i === this.data.length &&\n this.failCount < maxFailCount &&\n this.options.repeatFill &&\n this.canRepeat()\n ) {\n this.data = [\n ...this.data,\n ...this.originalData.map(entry => {\n return {\n ...entry,\n isFill: true\n };\n })\n ];\n this.isTryRepeatFill = true;\n }\n }\n\n return this.progressiveResult;\n }\n\n return this.result;\n }\n\n abstract layoutWord(i: number): boolean;\n abstract layout(\n data: any[],\n config: { width: number; height: number; origin?: [number, number]; canvas?: HTMLCanvasElement }\n ): any[];\n\n initProgressive() {\n this.failCount = 0;\n this.progressiveIndex = 0;\n if (this.options.progressiveStep > 0) {\n this.currentStepIndex = -1;\n } else if (this.options.progressiveTime > 0) {\n this.escapeTime = Date.now();\n }\n\n this.progressiveResult = [];\n }\n\n output() {\n return this.result ? this.outputCallback(this.result) : null;\n }\n\n progressiveOutput() {\n return this.progressiveResult ? this.outputCallback(this.progressiveResult) : null;\n }\n\n unfinished() {\n return this.data && this.data.length && !isNil(this.progressiveIndex) && this.progressiveIndex < this.data.length;\n }\n\n release() {\n this.data = null;\n this.result = null;\n this.progressiveIndex = null;\n this.progressiveResult = null;\n }\n}\n","export const spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nfunction archimedeanSpiral(size: [number, number]) {\n const e = size[0] / size[1];\n return (t: number) => {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)] as [number, number];\n };\n}\n\nfunction rectangularSpiral(size: number) {\n const dy = 4;\n const dx = (dy * size[0]) / size[1];\n let x = 0;\n let y = 0;\n return (t: number) => {\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] as [number, number];\n };\n}\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-wordcloud/src/CloudLayout.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\n/**\n * 小程序canvas相关API,getImageData、draw都是异步的,导致渐进渲染流程处理非常麻烦,实际上小程序并未使用这个算法,所以暂时不考虑支持小程序\n */\nimport { vglobal } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport { isString, merge } from '@visactor/vutils';\nimport type { Bounds, IBaseLayoutOptions, TagItemAttribute, TagItemFunction, TagOutputItem } from './interface';\nimport { getMaxRadiusAndCenter } from '@visactor/vgrammar-util';\nimport { BaseLayout } from './base';\nimport { spirals } from './spirals';\nimport { functor } from './util';\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\n// 一次扩充数组的数量\nconst MAX_ARGUMENTS_LENGTH = 60000;\n\nexport interface TagItem {\n text: number | string;\n /** font-family */\n fontFamily?: string;\n /** font-style */\n fontStyle?: string;\n /** font-weight */\n fontWeight?: string;\n /** 旋转角度 */\n angle?: number;\n /** font-size */\n fontSize?: number;\n padding?: number;\n /** 偏移量,仅内部计算使用 */\n xoff?: number;\n /** 偏移量,仅内部计算使用 */\n yoff?: number;\n /** 中心点坐标 */\n x?: number;\n /** 中心点坐标 */\n y?: number;\n /** 右下角点坐标 */\n x1?: number;\n /** 右下角点坐标 */\n y1?: number;\n /** 左上角点坐标 */\n x0?: number;\n /** 左上角点坐标 */\n y0?: number;\n hasText?: boolean;\n /** 像素是否有填充 */\n sprite?: number[];\n datum: any;\n /** 旋转后,词语所占区域的宽度 */\n width: number;\n /** 旋转后,词语所占区域的高度 */\n height: number;\n}\n\ninterface ICloudLayoutOptions extends IBaseLayoutOptions {\n spiral?: 'archimedean' | 'rectangular' | ((size: [number, number]) => (t: number) => [number, number]);\n\n padding?: TagItemAttribute;\n enlarge?: boolean;\n\n customInsertZerosToArray?: (array: any[], index: number, length: number) => void;\n}\n\nexport class CloudLayout extends BaseLayout implements IProgressiveTransformResult {\n getTextPadding: TagItemFunction;\n spiral: (size: [number, number]) => (t: any) => [number, number];\n random: () => number;\n\n /* ==================== runtime vars ======================== */\n cw: number = (1 << 11) >> 5;\n ch: number = 1 << 11;\n _size: [number, number] = [256, 256];\n _originSize: [number, number];\n _isBoardExpandCompleted = false;\n _placeStatus: number = 0;\n _tTemp?: number = null;\n _dtTemp?: number = null;\n _dy: number = 0;\n\n contextAndRatio?: { context: CanvasRenderingContext2D; ratio: number; canvas: HTMLCanvasElement };\n _board: number[];\n /** 已经绘制文字的最小包围盒 */\n _bounds: Bounds;\n\n /**\n * 最大无法放置字体缓存, key值为rotate + 摆放顺序(顺时针|逆时针)的组合\n */\n cacheMap = new Map();\n\n static defaultOptions: Partial = {\n enlarge: false,\n minFontSize: 2,\n maxSingleWordTryCount: 2\n };\n\n constructor(options: ICloudLayoutOptions) {\n super(merge({}, CloudLayout.defaultOptions, options));\n\n if (this.options.minFontSize <= CloudLayout.defaultOptions.minFontSize) {\n this.options.minFontSize = CloudLayout.defaultOptions.minFontSize;\n }\n\n this.spiral = isString(this.options.spiral)\n ? spirals[this.options.spiral as string] ?? spirals.archimedean\n : (this.options.spiral as (size: [number, number]) => (t: any) => [number, number]);\n this.random = this.options.random ? Math.random : () => 1;\n this.getTextPadding = functor(this.options.padding);\n }\n\n zoomRatio() {\n return this._originSize[0] / this._size[0];\n }\n\n dy() {\n return this._dy;\n }\n\n layoutWord(index: number) {\n const d = this.data[index];\n\n // 当 text 为空时,直接跳过对其的布局,否则会卡死\n if (('' + d.text).trim() === '') {\n return true;\n }\n\n // size可能会更新\n const { maxRadius, center } = getMaxRadiusAndCenter(this.options.shape as string, this._size);\n d.x = center[0];\n d.y = center[1];\n cloudSprite(this.contextAndRatio, d, this.data, index, this.cw, this.ch);\n /* 一次place判断可能发生的情况:\n * 1. 成功找到位置,更新board,返回true ==》 更新词语位置,完成布局\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n *\n * 目标:\n * 1. `超长词`语判断(d.fontSize > size),返回false,size扩大到可以容纳d.fontSize\n * 2. range和shape判断一直无法通过,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * `长词`?记录可以容纳词语的最小fontSize(一次),扩大board范围再次尝试布局;目前测试数据只命中1,3,未发现命中2的情况\n * 3. 在螺旋的过程中collide检测一直无法找到合适位置,直到delta大于max,返回false,等待扩大board范围再次尝试布局\n * 从起点开始不断进行collide检测,第一次未通过range和shape判断时,记录当时的dt,扩大画布以后从该dt开始扫描\n *\n */\n this._placeStatus = 0;\n if (d.hasText && this.place(this._board, d, this._bounds, maxRadius)) {\n this.result.push(d);\n if (this._bounds) {\n cloudBounds(this._bounds, d);\n } else {\n this._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 -= this._size[0] >> 1;\n d.y -= this._size[1] >> 1;\n\n // 清空t, dt缓存\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n\n return true;\n }\n // 扩大画布问题:\n // 每次扩大画布,都是依据当前单词的d.fontSize和minFontSize比较后再扩大,\n // 如果某个词绘制顺序比较靠前,且尺寸较大,就会在绘制时将board拉大,\n // 后续尺寸较小的词语再画在borad后,其实际大小就会远远小于minFontSize,\n // 是不是应该先遍历数据,找到最小的词语尺寸,按照minFontSize算出board能扩大的最大尺寸,\n // 后面再绘制时board扩大不能超过这个尺寸。\n this.updateBoardExpandStatus(d.fontSize);\n if (d.hasText && this.shouldShrinkContinue()) {\n // 不需要为hasText为false时扩大画布\n if (this._placeStatus === 1) {\n // 按照字体要求能扩大的最大尺寸\n const maxSize0 = (d.fontSize * this._originSize[0]) / this.options.minFontSize;\n const distSize0 = Math.max(d.width, d.height);\n if (distSize0 <= maxSize0) {\n // 扩大尺寸满足最小字体要求 =》 按照要求扩大board\n this.expandBoard(this._board, this._bounds, distSize0 / this._size[0]);\n } else if (this.options.clip) {\n // 扩大尺寸不满足最小字体要求,但支持裁剪 =》 按最大尺寸扩大,裁剪词语\n this.expandBoard(this._board, this._bounds, maxSize0 / this._size[0]);\n } else {\n // 扩大尺寸不满足最小字体要求,且不支持裁剪 =》 丢弃词语\n return true;\n }\n } else if (this._placeStatus === 3) {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n } else {\n // 扩大画布\n this.expandBoard(this._board, this._bounds);\n }\n // 更新一次状态,下次大尺寸词语进入裁剪\n this.updateBoardExpandStatus(d.fontSize);\n return false;\n }\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n return true;\n }\n\n layout(words: any[], config: { width: number; height: number }) {\n this.initProgressive();\n this.result = [];\n this._size = [config.width, config.height];\n // console.time('prepare data');\n // 开始新的layout时清除旧的缓存\n this.clearCache();\n this._originSize = [...this._size];\n const contextAndRatio = this.getContext(vglobal.createCanvas({ width: 1, height: 1 }));\n this.contextAndRatio = contextAndRatio;\n this._board = new Array((this._size[0] >> 5) * this._size[1]).fill(0);\n // 已经绘制文字的最小包围盒\n this._bounds = null;\n\n const n = words.length;\n const i = 0;\n\n this.result = [];\n const data = words\n .map((d: any, i: number) => {\n return {\n text: this.getText(d),\n fontFamily: this.getTextFontFamily(d),\n fontStyle: this.getTextFontStyle(d),\n fontWeight: this.getTextFontWeight(d),\n angle: this.getTextRotate(d, i),\n fontSize: ~~this.getTextFontSize(d),\n padding: this.getTextPadding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n })\n .sort(function (a, b) {\n return b.fontSize - a.fontSize;\n });\n this.originalData = data;\n this.data = data;\n\n this.progressiveRun();\n\n if (!this.options.clip && this.options.enlarge && this._bounds) {\n this.shrinkBoard(this._bounds);\n }\n\n // 处理y方向偏移\n if (this._bounds && ['cardioid', 'triangle', 'triangle-upright'].includes(this.options.shape as string)) {\n const currentCenterY = (this._bounds[0].y + this._bounds[1].y) / 2;\n this._dy = -(currentCenterY - this._originSize[1] / 2);\n }\n\n return this.result;\n }\n\n formatTagItem(words: TagOutputItem[]) {\n /** 调整结果 */\n const size = this._size;\n const zoomRatio = this.zoomRatio();\n const globalDy = this.dy();\n const dx = size[0] >> 1;\n const dy = size[1] >> 1;\n\n const n = words.length;\n const result = [];\n let w;\n let t: any;\n\n for (let i = 0; i < n; ++i) {\n w = words[i];\n t = {};\n t.datum = w.datum;\n t.x = (w.x + dx) * zoomRatio;\n t.y = (w.y + dy + globalDy) * zoomRatio;\n t.fontFamily = w.fontFamily;\n t.fontSize = w.fontSize * zoomRatio;\n t.fontStyle = w.fontStyle;\n t.fontWeight = w.fontWeight;\n t.angle = w.angle;\n\n result.push(t);\n }\n\n return result;\n }\n\n output() {\n return this.outputCallback ? this.outputCallback(this.formatTagItem(this.result)) : this.formatTagItem(this.result);\n }\n\n progressiveOutput() {\n return this.outputCallback\n ? this.outputCallback(this.formatTagItem(this.progressiveResult))\n : this.formatTagItem(this.progressiveResult);\n }\n // 词语尺寸是否达小于最小尺寸,true时不能继续扩大画布“\n private updateBoardExpandStatus(fontSize: number) {\n this._isBoardExpandCompleted = fontSize * (this._originSize[0] / this._size[0]) < this.options.minFontSize;\n }\n\n // 是否可以继续扩大画布,true可以继续扩大\n private shouldShrinkContinue() {\n return !this.options.clip && this.options.shrink && !this._isBoardExpandCompleted;\n }\n\n // 根据 bounds 最大比例缩小 size\n private shrinkBoard(bounds: Bounds) {\n const leftTopPoint = bounds[0];\n const rightBottomPoint = bounds[1];\n if (rightBottomPoint.x >= this._size[0] || rightBottomPoint.y >= this._size[1]) {\n return;\n }\n const minXValue = Math.min(leftTopPoint.x, this._size[0] - rightBottomPoint.x);\n const minYValue = Math.min(leftTopPoint.y, this._size[1] - rightBottomPoint.y);\n const minRatio = Math.min(minXValue / this._size[0], minYValue / this._size[1]) * 2;\n this._size = this._size.map(v => v * (1 - minRatio)) as any;\n }\n\n // 扩充 bitmap\n private expandBoard(board: number[], bounds: Bounds, factor?: any) {\n const expandedLeftWidth = (this._size[0] * (factor || 1.1) - this._size[0]) >> 5;\n let diffWidth = expandedLeftWidth * 2 > 2 ? expandedLeftWidth : 2;\n if (diffWidth % 2 !== 0) {\n diffWidth++;\n }\n let diffHeight = Math.ceil((this._size[1] * (diffWidth << 5)) / this._size[0]);\n if (diffHeight % 2 !== 0) {\n diffHeight++;\n }\n const w = this._size[0];\n const h = this._size[1];\n const widthArr = new Array(diffWidth).fill(0);\n\n const heightArr = new Array((diffHeight / 2) * (diffWidth + (w >> 5))).fill(0);\n this.insertZerosToArray(board, h * (w >> 5), heightArr.length + diffWidth / 2);\n for (let i = h - 1; i > 0; i--) {\n this.insertZerosToArray(board, i * (w >> 5), widthArr.length);\n }\n this.insertZerosToArray(board, 0, heightArr.length + diffWidth / 2);\n this._size = [w + (diffWidth << 5), h + diffHeight];\n if (bounds) {\n bounds[0].x += (diffWidth << 5) / 2;\n bounds[0].y += diffHeight / 2;\n bounds[1].x += (diffWidth << 5) / 2;\n bounds[1].y += diffHeight / 2;\n }\n }\n\n // 分组扩充填充数组, 一次填充超过大概126000+会报stack overflow,worker环境下大概6w,这边取个比较小的\n // https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why\n private insertZerosToArray(array: any[], index: number, length: number) {\n if (this.options.customInsertZerosToArray) {\n return this.options.customInsertZerosToArray(array, index, length);\n }\n const len = Math.floor(length / MAX_ARGUMENTS_LENGTH);\n const restLen = length % MAX_ARGUMENTS_LENGTH;\n\n for (let i = 0; i < len; i++) {\n array.splice(index + i * MAX_ARGUMENTS_LENGTH, 0, ...new Array(MAX_ARGUMENTS_LENGTH).fill(0));\n }\n array.splice(index + len * MAX_ARGUMENTS_LENGTH, 0, ...new Array(restLen).fill(0));\n }\n\n private getContext(canvas: any) {\n // 缩放比例\n canvas.width = 1;\n canvas.height = 1;\n const tempContext = canvas.getContext('2d', { willReadFrequently: true });\n const imageData = tempContext.getImageData(0, 0, 1, 1);\n const ratio = Math.sqrt(imageData.data.length >> 2);\n\n canvas.width = (this.cw << 5) / ratio;\n canvas.height = this.ch / ratio;\n const context = canvas.getContext('2d', { willReadFrequently: true });\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n\n return { context: context, ratio: ratio, canvas };\n }\n\n private place(board: number[], tag: TagItem, bounds: Bounds, maxRadius: number) {\n let isCollide = false;\n // 情况1,超长词语\n if (this.shouldShrinkContinue() && (tag.width > this._size[0] || tag.height > this._size[1])) {\n this._placeStatus = 1;\n return false;\n }\n\n const dt: number = this.random() < 0.5 ? 1 : -1;\n // 根据缓存判断是否有放置空间\n if (!this.shouldShrinkContinue() && this.isSizeLargerThanMax(tag, dt)) {\n return null;\n }\n const startX = tag.x;\n const startY = tag.y;\n const maxDelta = Math.sqrt(this._size[0] * this._size[0] + this._size[1] * this._size[1]);\n const s = this.spiral(this._size);\n let t: number = -dt;\n let dxdy;\n let dx;\n let dy;\n let _tag;\n\n this._tTemp = null; // 初始化t缓存\n this._dtTemp = null; // 初始化dt缓存\n while ((dxdy = s((t += dt)))) {\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 半径\n const radius = Math.sqrt(dx ** 2 + dy ** 2);\n // 弧度\n let rad = Math.atan(dy / dx);\n /*\n * 弧度从x轴正方向开始,逆时针方向为正,范围[0, 2PI]\n * atan返回值∈[-1/2PI, 1/2PI],可以正确描述一四象限\n * 第一象限atan为正,弧度正确\n * 第二象限atan为负,等同于第四象限,弧度需要+PI矫正到第二象限\n * 第三象限atan为正,等同于第一象限,弧度需要+PI矫正到第三象限\n * 第四象限atan为负,需要矫正到正值,因此弧度需要+2PI\n */\n if (dx < 0) {\n rad += Math.PI;\n } else if (dy < 0) {\n rad = 2 * Math.PI + rad;\n }\n\n // 半径更改比例[0, 1]\n const rx = this.shape(rad);\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) {\n break;\n } // (dx, dy)距离中心超过maxDelta,跳出螺旋返回false\n\n if (radius >= maxRadius) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue; // 判断是否在指定形状内\n }\n\n tag.x = startX + ~~(radius * rx * Math.cos(-rad));\n tag.y = startY + ~~(radius * rx * Math.sin(-rad));\n\n // 超出画布范围\n _tag = tag;\n if (this.options.clip) {\n // 通过剪裁文字,让文字能够正常渲染\n\n if (!this.shouldShrinkContinue()) {\n // 当文字全部在外面时\n if (isFullOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n } else if (isPartOutside(_tag, this._size)) {\n // 部分在外面\n _tag = clipInnerTag(_tag, this._size);\n }\n } else {\n if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n }\n } else if (isPartOutside(_tag, this._size)) {\n if (isCollide && this._tTemp === null) {\n this._tTemp = t;\n this._dtTemp = dt;\n }\n continue;\n }\n\n // 进入collide检测\n isCollide = true;\n // TODO only check for collisions within current bounds.\n if (!bounds || collideRects(_tag, bounds)) {\n if (!bounds || !cloudCollide(_tag, board, this._size)) {\n // 合并文字占用部分到board\n const sprite = _tag.sprite;\n const w = _tag.width >> 5;\n const sw = this._size[0] >> 5;\n const lx = _tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = _tag.y1 - _tag.y0;\n let x = (_tag.y + _tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n // paint(board, size, originSize)\n x += sw;\n }\n // paint(_tag.sprite, [_tag.width, _tag.height])\n // paint(board, size, originSize)\n tag.sprite = null;\n _tag.sprite = null;\n // if (Date.now() - start > 10) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n return true;\n }\n }\n }\n // if (Date.now() - start > 50) {\n // console.log(_tag.text, Date.now() - start, placeCount)\n // }\n if (this._tTemp !== null) {\n this._placeStatus = 3;\n }\n !this.shouldShrinkContinue() && this.setCache(_tag, dt);\n\n return false;\n }\n\n /**\n * 清除缓存\n */\n private clearCache() {\n this.cacheMap.clear();\n }\n /**\n * 设置缓存\n * @param {*} tag\n * @param {number} dt 旋转方向, 1, -1\n */\n private setCache(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n if (!this.cacheMap.has(cacheKey)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n return;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n if ((w < width && h < height) || (w <= width && h < height)) {\n this.cacheMap.set(cacheKey, {\n width: w,\n height: h\n });\n }\n }\n\n /**\n * 判断当前text是否能放置\n * 如果缓存中有同旋转角度和旋转方向的text,\n * 且当前text的boundingBox大于缓存boundingBox, 则跳过放置尝试\n * @param {*} tag\n * @param {*} dt 旋转方向, 1, -1\n */\n private isSizeLargerThanMax(tag: TagItem, dt: number) {\n const cacheKey = `${tag.angle}-${dt}`;\n if (!this.cacheMap.has(cacheKey)) {\n return false;\n }\n const { width, height } = this.cacheMap.get(cacheKey);\n const w = tag.x1 - tag.x0;\n const h = tag.y1 - tag.y0;\n return w >= width && h >= height;\n }\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n// cloudSprite从索引di开始向后绘制词语sprite,直到可以一次绘制的最大范围;\n// 如果索引di在它自己的轮次都无法绘制(hasText = true),那么它就是超大词语,无法在屏幕出现\n// 此时,不需要为他扩大画布\nfunction cloudSprite(contextAndRatio: any, d: TagItem, data: TagItem[], di: number, cw: number, ch: number) {\n if (d.sprite) {\n return;\n }\n const c = contextAndRatio.context;\n const ratio = contextAndRatio.ratio;\n // 设置transform\n c.setTransform(ratio, 0, 0, ratio, 0, 0);\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n let x = 0;\n let y = 0;\n let maxh = 0;\n const n = data.length;\n let w;\n let w32;\n let h;\n let i;\n let j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.fontStyle + ' ' + d.fontWeight + ' ' + ~~((d.fontSize + 1) / ratio) + 'px ' + d.fontFamily;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.fontSize << 1;\n if (d.angle) {\n const sr = Math.sin(d.angle);\n const cr = Math.cos(d.angle);\n const wcr = w * cr;\n const wsr = w * sr;\n const hcr = h * cr;\n const hsr = h * sr;\n w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = ((w + 31) >> 5) << 5;\n }\n // w, h为旋转后,词语所占区域的宽高\n if (h > maxh) {\n maxh = h;\n } // 记录当前行最大高度\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) {\n break;\n } // 绘制区域的高度为2048px,超过长度下次绘制(TODO: 如果存在超高词语,这里是否可以当做一个退出机制?)\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.angle) {\n c.rotate(d.angle);\n }\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 // 词语绘制完成,记录其在画布上的相对位置和范围\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n // x0, x1, y0, y1是四角相对于中心点的相对坐标\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位置右移,等待下一个词语绘制\n x += w;\n }\n\n const pixelsImageData = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio);\n const pixels = pixelsImageData.data;\n const sprite: any[] = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) {\n continue;\n }\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) {\n sprite[i] = 0;\n }\n x = d.xoff;\n if (x == null) {\n return;\n }\n y = d.yoff;\n let seen = 0;\n let seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n // 在sprite数组中,每一个Uint32的数字记录了32个像素的绘制情况\n // 在pixels中,只取alpha通道的值,因此需要每个像素需要 << 2 得到alpha通道\n const k = w32 * j + (i >> 5);\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n // 如果当前行发现着色,开始记录行号\n if (seen) {\n seenRow = j;\n } else {\n // 如果当前行未发现着色,则在结果中省去改行(高度--,y坐标++,左上角相对坐标++)\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\n// Use mask-based collision detection.\nfunction cloudCollide(tag: TagItem, board: number[], size: [number, number]) {\n const sw = size[0] >> 5;\n const sprite = tag.sprite;\n const w = tag.width >> 5;\n const lx = tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\n let 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)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds: Bounds, d: TagItem) {\n const b0 = bounds[0];\n const b1 = bounds[1];\n if (d.x + d.x0 < b0.x) {\n b0.x = d.x + d.x0;\n }\n if (d.y + d.y0 < b0.y) {\n b0.y = d.y + d.y0;\n }\n if (d.x + d.x1 > b1.x) {\n b1.x = d.x + d.x1;\n }\n if (d.y + d.y1 > b1.y) {\n b1.y = d.y + d.y1;\n }\n}\n\nfunction collideRects(a: TagItem, b: Bounds) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nconst isFullOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 > size[0] || tag.y + tag.y0 > size[0] || tag.x + tag.x1 < 0 || tag.y + tag.y1 < 0;\n};\n\nconst isPartOutside = (tag: TagItem, size: [number, number]) => {\n return tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1];\n};\n\nfunction clipInnerTag(tag: TagItem, size: [number, number]) {\n const sprite = tag.sprite;\n const h = tag.y1 - tag.y0;\n const w = tag.width >> 5;\n let x = 0;\n\n const _sprite: number[] = [];\n const js = Math.max(-(tag.y0 + tag.y), 0);\n const je = Math.min(h + (size[1] - (tag.y1 + tag.y)), h);\n const is = Math.max(-(tag.x0 + tag.x), 0) >> 5;\n const ie = Math.min(w + ((size[0] - (tag.x1 + tag.x)) >> 5) + 1, w);\n\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (j < js || je <= j || i < is || ie <= i) {\n // sprite[x + i] = null\n // if (ie === i) {\n // var value = sprite[x + i]\n // var overflow = (ie << 5) - (tag.x1 + tag.x)\n // _sprite.push((value >> overflow << overflow))\n // }\n } else {\n _sprite.push(sprite[x + i]);\n }\n }\n x += w;\n }\n // paint(sprite, [tag.width, tag.height])\n // var _sprite = sprite.filter(d => d !== null)\n const xl = is << 5;\n const xr = (w - ie) << 5;\n const yb = js;\n const yt = h - je;\n // paint(_sprite, [tag.width - xl - xr, tag.height - yb - yt])\n\n return {\n ...tag,\n width: tag.width - xl - xr,\n height: tag.height - yb - yt,\n x0: tag.x0 + xl,\n x1: tag.x1 - xr,\n y0: tag.y0 + yb,\n y1: tag.y1 - yt,\n x: tag.x + xl / 2 - xr / 2,\n // y: tag.y + yb / 2 - yt / 2,\n sprite: _sprite\n };\n}\n","import { vglobal } from '@visactor/vrender-core';\nimport type { GeometricMaskShape, TextShapeMask } from './types/wordcloud';\nimport { getMaxRadiusAndCenter, getShapeFunction } from './shapes';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isValid, polarToCartesian } from '@visactor/vutils';\n\nexport const generateIsEmptyPixel = (backgroundColor?: string) => {\n if (!backgroundColor || backgroundColor === '#fff') {\n return (imageData: ImageData, y: number, x: number) => {\n const width = imageData.width;\n return (\n imageData.data[y * width * 4 + x * 4 + 3] === 0 ||\n (imageData.data[y * width * 4 + x * 4 + 0] === 255 &&\n imageData.data[y * width * 4 + x * 4 + 1] === 255 &&\n imageData.data[y * width * 4 + x * 4 + 2] === 255)\n );\n };\n }\n\n /* Determine bgPixel by creating\n another canvas and fill the specified background color. */\n // eslint-disable-next-line no-undef\n const bctx = vglobal.createCanvas({ width: 1, height: 1 }).getContext('2d', { willReadFrequently: true });\n\n bctx.fillStyle = backgroundColor;\n bctx.fillRect(0, 0, 1, 1);\n const bgPixel = bctx.getImageData(0, 0, 1, 1).data;\n\n return (imageData: ImageData, y: number, x: number) => {\n const width = imageData.width;\n\n return [0, 1, 2, 3].every(i => {\n return imageData.data[(y * width + x) * 4 + i] === bgPixel[i];\n });\n };\n};\n\nexport const generateMaskCanvas = (\n shape: TextShapeMask | GeometricMaskShape,\n width: number,\n height: number,\n cacheCanvas?: HTMLCanvasElement\n) => {\n const { backgroundColor = '#fff' } = shape;\n\n const maskCanvas =\n cacheCanvas ||\n vglobal.createCanvas({\n width,\n height,\n dpr: 1\n });\n const tempContext = maskCanvas.getContext('2d', { willReadFrequently: true });\n if (cacheCanvas) {\n const prevWidth = cacheCanvas.width;\n const prevHeight = cacheCanvas.height;\n tempContext.clearRect(0, 0, prevWidth, prevHeight);\n cacheCanvas.style.width = `${width}px`;\n cacheCanvas.style.height = `${height}px`;\n cacheCanvas.width = width;\n cacheCanvas.height = height;\n }\n tempContext.fillStyle = backgroundColor;\n tempContext.fillRect(0, 0, maskCanvas.width, maskCanvas.height);\n\n if ((shape as TextShapeMask).type === 'text') {\n drawTextMask(shape as TextShapeMask, maskCanvas.width, maskCanvas.height, tempContext);\n } else if ((shape as GeometricMaskShape).type === 'geometric') {\n drawGeometricMask(shape as GeometricMaskShape, maskCanvas.width, maskCanvas.height, tempContext);\n }\n\n return maskCanvas;\n};\n\nconst drawTextMask = (shape: TextShapeMask, width: number, height: number, ctx: CanvasRenderingContext2D) => {\n const {\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontStyle = 'normal',\n fontVariant = 'normal',\n fill,\n text,\n hollow\n } = shape;\n\n let baseFontSize = 12;\n\n ctx.font = `${fontStyle} ${fontVariant} ${fontWeight} ${baseFontSize}px ${fontFamily}`;\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = fill ?? 'black';\n const textMetrics = ctx.measureText(text);\n /** 斜体计算字体宽度存在不准的情况,暂时通过方法来解决 */\n const scale = fontStyle !== 'normal' ? 1.1 : 1;\n const actualWidth =\n isValid(textMetrics.actualBoundingBoxRight) && isValid(textMetrics.actualBoundingBoxLeft)\n ? Math.ceil(scale * (Math.abs(textMetrics.actualBoundingBoxRight) + Math.abs(textMetrics.actualBoundingBoxLeft)))\n : 0;\n const textWidth = Math.max(Math.ceil(textMetrics.width), actualWidth, baseFontSize);\n\n if (hollow) {\n ctx.globalCompositeOperation = 'xor';\n }\n if (textWidth > width) {\n const scale = Math.min(width / textWidth, height / baseFontSize);\n ctx.fillText(text, width / 2, height / 2);\n ctx.scale(scale, scale);\n } else {\n baseFontSize = Math.floor((baseFontSize * width) / textWidth);\n baseFontSize = Math.min(baseFontSize, height);\n\n ctx.font = `${fontStyle} ${fontVariant} ${fontWeight} ${baseFontSize}px ${fontFamily}`;\n ctx.fillText(text, Math.floor(width / 2), Math.floor(height / 2));\n }\n};\n\nexport const generatePoints = (center: IPointLike, radius: number, startAngle: number = 0, count: number) => {\n const angle = (2 * Math.PI) / count;\n return new Array(count).fill(0).map((entry, index) => {\n return polarToCartesian(center, radius, startAngle + index * angle);\n });\n};\n\nexport const generateCardioidPoints = (center: IPointLike, radius: number, startAngle: number = 0, count: number) => {\n const angle = (2 * Math.PI) / count;\n const func = getShapeFunction('cardioid');\n\n return new Array(count).fill(0).map((entry, index) => {\n const theta = startAngle + index * angle;\n const r = radius * func(theta);\n const res = polarToCartesian(center, r, theta);\n return res;\n });\n};\n\nexport const drawRegularPolygon = (ctx: CanvasRenderingContext2D, points: IPointLike[]) => {\n ctx.beginPath();\n points.forEach((p: IPointLike, index: number) => {\n if (index === 0) {\n ctx.moveTo(p.x, p.y);\n } else {\n ctx.lineTo(p.x, p.y);\n }\n });\n\n ctx.closePath();\n ctx.fill();\n};\n\nexport const drawCardioid = (ctx: CanvasRenderingContext2D, points: IPointLike[]) => {\n ctx.beginPath();\n let prev: IPointLike;\n points.forEach((p: IPointLike, index: number) => {\n if (index === 0) {\n ctx.moveTo(p.x, p.y);\n } else {\n ctx.bezierCurveTo(p.x, p.y, prev.x, prev.y, p.x, p.y);\n }\n prev = p;\n });\n\n ctx.closePath();\n ctx.fill();\n};\n\nconst drawGeometricMask = (shape: GeometricMaskShape, width: number, height: number, ctx: CanvasRenderingContext2D) => {\n const { fill, hollow } = shape;\n const { center, maxRadius } = getMaxRadiusAndCenter(shape.shape, [width, height]);\n\n ctx.fillStyle = fill ?? 'black';\n\n if (hollow) {\n ctx.globalCompositeOperation = 'xor';\n }\n const cx = center[0];\n const cy = center[1];\n\n if (shape.shape === 'cardioid') {\n drawCardioid(ctx, generateCardioidPoints({ x: cx, y: cy }, maxRadius, 0, 100));\n } else if (shape.shape === 'circle') {\n ctx.beginPath();\n ctx.arc(cx, cy, maxRadius, 0, 2 * Math.PI, true);\n ctx.fill();\n } else if (shape.shape === 'diamond') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 4));\n } else if (shape.shape === 'square') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 4, 4));\n } else if (shape.shape === 'pentagon') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, Math.PI / 2, 5));\n } else if (shape.shape === 'triangle' || shape.shape === 'triangleUpright') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 3));\n } else if (shape.shape === 'triangleForward') {\n drawRegularPolygon(ctx, generatePoints({ x: cx, y: cy }, maxRadius, 0, 3));\n } else if (shape.shape === 'star') {\n const outterPoints = generatePoints({ x: cx, y: cy }, maxRadius, -Math.PI / 2, 5);\n const innerPoints = generatePoints(\n { x: cx, y: cy },\n maxRadius / (2 * Math.cos(Math.PI / 5)),\n -Math.PI / 2 + Math.PI / 5,\n 5\n );\n const points = [];\n for (let i = 0; i < 5; i++) {\n points.push(outterPoints[i]);\n points.push(innerPoints[i]);\n }\n drawRegularPolygon(ctx, points);\n } else {\n ctx.fillRect(0, 0, width, height);\n }\n};\n","import { type IProgressiveTransformResult } from '@visactor/vgrammar-core';\n\n/*!\n * wordcloud2.js\n * http://timdream.org/wordcloud2.js/\n *\n * Copyright 2011 - 2019 Tim Guan-tin Chien and contributors.\n * Released under the MIT license\n */\n\nimport type { IBaseLayoutOptions } from './interface';\nimport { isObject, merge, shuffleArray } from '@visactor/vutils';\nimport { BaseLayout } from './base';\nimport type { CanvasMaskShape } from '@visactor/vgrammar-util';\nimport { generateIsEmptyPixel, generateMaskCanvas, getMaxRadiusAndCenter } from '@visactor/vgrammar-util';\n\ninterface IGridLayoutOptions extends IBaseLayoutOptions {\n gridSize?: number;\n\n ellipticity?: number;\n}\n\ninterface TextInfo {\n datum: any;\n /** Read the pixels and save the information to the occupied array */\n occupied: [number, number][];\n bounds: [number, number, number, number];\n gw: number;\n gh: number;\n fillTextOffsetX: number;\n fillTextOffsetY: number;\n fillTextWidth: number;\n fillTextHeight: number;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n text: string;\n distance?: number;\n theta?: number;\n}\n\nexport class GridLayout extends BaseLayout implements IProgressiveTransformResult {\n static defaultOptions: Partial = {\n gridSize: 8,\n ellipticity: 1,\n maxSingleWordTryCount: 1\n };\n\n private gridSize: number;\n\n /* ================== runtime vars ================== */\n private center: [number, number];\n private pointsAtRadius: [number, number, number][][];\n private ngx: number;\n private ngy: number;\n private grid: boolean[][];\n private maxRadius: number;\n\n constructor(options: IGridLayoutOptions) {\n super(merge({}, GridLayout.defaultOptions, options));\n\n this.gridSize = Math.max(Math.floor(this.options.gridSize), 4);\n }\n\n private getPointsAtRadius(radius: number) {\n if (this.pointsAtRadius[radius]) {\n return this.pointsAtRadius[radius];\n }\n\n // Look for these number of points on each radius\n const T = radius * 8;\n\n // Getting all the points at this radius\n let t = T;\n const points: [number, number, number][] = [];\n\n if (radius === 0) {\n points.push([this.center[0], this.center[1], 0]);\n }\n\n while (t--) {\n // distort the radius to put the cloud in shape\n const rx = this.shape((t / T) * 2 * Math.PI); // 0 to 1\n\n // Push [x, y, t] t is used solely for getTextColor()\n points.push([\n this.center[0] + radius * rx * Math.cos((-t / T) * 2 * Math.PI),\n this.center[1] + radius * rx * Math.sin((-t / T) * 2 * Math.PI) * this.options.ellipticity,\n (t / T) * 2 * Math.PI\n ]);\n }\n\n this.pointsAtRadius[radius] = points;\n return points;\n }\n\n private getTextInfo(item: any, shrinkRatio: number = 1, index: number): TextInfo {\n // calculate the acutal font size\n // fontSize === 0 means weightFactor function wants the text skipped,\n // and size < minSize means we cannot draw the text.\n const sizeShrinkRatio = this.options.clip ? 1 : shrinkRatio;\n\n const fontSize = Math.max(\n Math.floor((this.isTryRepeatFill ? this.options.fillTextFontSize : this.getTextFontSize(item)) * sizeShrinkRatio),\n this.options.minFontSize\n );\n let word = this.getText(item) + '';\n\n if (this.options.clip) {\n word = word.slice(0, Math.ceil(word.length * shrinkRatio));\n }\n\n if (!word) {\n return null;\n }\n\n // Get fontWeight that will be used to set fctx.font\n const fontWeight = this.getTextFontWeight(item);\n const fontStyle = this.getTextFontStyle(item);\n const angle = this.getTextRotate ? this.getTextRotate(item, index) ?? 0 : 0;\n const fontFamily = this.getTextFontFamily(item);\n\n // eslint-disable-next-line no-undef\n const fcanvas = document.createElement('canvas');\n const fctx = fcanvas.getContext('2d', { willReadFrequently: true });\n\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Estimate the dimension of the text with measureText().\n const fw = fctx.measureText(word).width;\n const fh = Math.max(fontSize, fctx.measureText('m').width, fctx.measureText('\\uFF37').width);\n\n // Create a boundary box that is larger than our estimates,\n // so text don't get cut of (it sill might)\n let boxWidth = fw + fh * 2;\n let boxHeight = fh * 3;\n const fgw = Math.ceil(boxWidth / this.gridSize);\n const fgh = Math.ceil(boxHeight / this.gridSize);\n boxWidth = fgw * this.gridSize;\n boxHeight = fgh * this.gridSize;\n\n // Calculate the proper offsets to make the text centered at\n // the preferred position.\n\n // This is simply half of the width.\n const fillTextOffsetX = -fw / 2;\n // Instead of moving the box to the exact middle of the preferred\n // position, for Y-offset we move 0.4 instead, so Latin alphabets look\n // vertical centered.\n const fillTextOffsetY = -fh * 0.4;\n\n // Calculate the actual dimension of the canvas, considering the rotation.\n const cgh = Math.ceil(\n (boxWidth * Math.abs(Math.sin(angle)) + boxHeight * Math.abs(Math.cos(angle))) / this.gridSize\n );\n const cgw = Math.ceil(\n (boxWidth * Math.abs(Math.cos(angle)) + boxHeight * Math.abs(Math.sin(angle))) / this.gridSize\n );\n const width = cgw * this.gridSize;\n const height = cgh * this.gridSize;\n\n fcanvas.setAttribute('width', '' + width);\n fcanvas.setAttribute('height', '' + height);\n\n // Scale the canvas with |mu|.\n fctx.scale(1, 1);\n fctx.translate(width / 2, height / 2);\n fctx.rotate(-angle);\n\n // Once the width/height is set, ctx info will be reset.\n // Set it again here.\n fctx.font = fontStyle + ' ' + fontWeight + ' ' + fontSize.toString(10) + 'px ' + fontFamily;\n\n // Fill the text into the fcanvas.\n // XXX: We cannot because textBaseline = 'top' here because\n // Firefox and Chrome uses different default line-height for canvas.\n // Please read https://bugzil.la/737852#c6.\n // Here, we use textBaseline = 'middle' and draw the text at exactly\n // 0.5 * fontSize lower.\n fctx.fillStyle = '#000';\n fctx.textBaseline = 'middle';\n fctx.fillText(word, fillTextOffsetX, fillTextOffsetY);\n\n // Get the pixels of the text\n const imageData = fctx.getImageData(0, 0, width, height).data;\n\n if (this.exceedTime()) {\n return null;\n }\n\n // Read the pixels and save the information to the occupied array\n const occupied: [number, number][] = [];\n let gx = cgw;\n let gy;\n const bounds: [number, number, number, number] = [cgh / 2, cgw / 2, cgh / 2, cgw / 2];\n\n const singleGridLoop = (gx: number, gy: number, out: [number, number][]) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n if (imageData[((gy * this.gridSize + y) * width + (gx * this.gridSize + x)) * 4 + 3]) {\n out.push([gx, gy]);\n\n if (gx < bounds[3]) {\n bounds[3] = gx;\n }\n if (gx > bounds[1]) {\n bounds[1] = gx;\n }\n if (gy < bounds[0]) {\n bounds[0] = gy;\n }\n if (gy > bounds[2]) {\n bounds[2] = gy;\n }\n\n return;\n }\n }\n }\n };\n while (gx--) {\n gy = cgh;\n while (gy--) {\n singleGridLoop(gx, gy, occupied);\n }\n }\n\n // Return information needed to create the text on the real canvas\n return {\n datum: item,\n occupied: occupied,\n bounds: bounds,\n gw: cgw,\n gh: cgh,\n fillTextOffsetX: fillTextOffsetX,\n fillTextOffsetY: fillTextOffsetY,\n fillTextWidth: fw,\n fillTextHeight: fh,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n angle,\n text: word\n };\n }\n\n private calculateEmptyRate() {\n const totalCount = this.ngx * this.ngy;\n let emptyCount = 0;\n\n for (let gx = 0; gx < this.ngx; gx++) {\n for (let gy = 0; gy < this.ngy; gy++) {\n if (this.grid[gx][gy]) {\n emptyCount++;\n }\n }\n }\n return emptyCount / totalCount;\n }\n\n /* Help function to updateGrid */\n private fillGridAt = (x: number, y: number) => {\n if (x >= this.ngx || y >= this.ngy || x < 0 || y < 0) {\n return;\n }\n\n this.grid[x][y] = false;\n };\n\n /* Update the filling information of the given space with occupied points.\n Draw the mask on the canvas if necessary. */\n private updateGrid = (gx: number, gy: number, gw: number, gh: number, info: TextInfo) => {\n const occupied = info.occupied;\n\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n continue;\n }\n\n this.fillGridAt(px, py);\n }\n };\n\n /* Determine if there is room available in the given dimension */\n private canFitText(gx: number, gy: number, gw: number, gh: number, occupied: number[][]) {\n // Go through the occupied points,\n // return false if the space is not available.\n let i = occupied.length;\n while (i--) {\n const px = gx + occupied[i][0];\n const py = gy + occupied[i][1];\n\n if (px >= this.ngx || py >= this.ngy || px < 0 || py < 0) {\n if (!this.options.drawOutOfBound) {\n return false;\n }\n continue;\n }\n\n if (!this.grid[px][py]) {\n return false;\n }\n }\n return true;\n }\n\n /* putWord() processes each item on the list,\n calculate it's size and determine it's position, and actually\n put it on the canvas. */\n layoutWord(index: number, shrinkRatio: number = 1): boolean {\n // get info needed to put the text onto the canvas\n const item = this.data[index];\n const info = this.getTextInfo(item, shrinkRatio, index);\n\n // not getting the info means we shouldn't be drawing this one.\n if (!info) {\n return false;\n }\n\n if (this.exceedTime()) {\n return false;\n }\n\n // If drawOutOfBound is set to false,\n // skip the loop if we have already know the bounding box of\n // word is larger than the canvas.\n if (\n !this.options.drawOutOfBound &&\n (!this.options.shrink || info.fontSize <= this.options.minFontSize) &&\n !this.options.clip\n ) {\n const bounds = info.bounds;\n if (bounds[1] - bounds[3] + 1 > this.ngx || bounds[2] - bounds[0] + 1 > this.ngy) {\n return false;\n }\n }\n\n // Determine the position to put the text by\n // start looking for the nearest points\n let r = this.maxRadius + 1;\n\n const tryToPutWordAtPoint = (gxy: [number, number, number]) => {\n const gx = Math.floor(gxy[0] - info.gw / 2);\n const gy = Math.floor(gxy[1] - info.gh / 2);\n const gw = info.gw;\n const gh = info.gh;\n\n // If we cannot fit the text at this position, return false\n // and go to the next position.\n if (!this.canFitText(gx, gy, gw, gh, info.occupied)) {\n return false;\n }\n\n info.distance = this.maxRadius - r;\n info.theta = gxy[2];\n\n // Actually put the text on the canvas\n this.outputText(gx, gy, info);\n\n // Mark the spaces on the grid as filled\n this.updateGrid(gx, gy, gw, gh, info);\n\n // Return true so some() will stop and also return true.\n return true;\n };\n\n while (r--) {\n let points = this.getPointsAtRadius(this.maxRadius - r);\n\n if (this.options.random) {\n points = [].concat(points);\n shuffleArray(points);\n }\n\n // Try to fit the words by looking at each point.\n // array.some() will stop and return true\n // when putWordAtPoint() returns true.\n // If all the points returns false, array.some() returns false.\n const drawn = points.some(tryToPutWordAtPoint);\n\n if (drawn) {\n // leave putWord() and return true\n return true;\n }\n }\n if (this.options.clip) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n } else if (this.options.shrink && info.fontSize > this.options.minFontSize) {\n return this.layoutWord(index, shrinkRatio * 0.75);\n }\n // we tried all distances but text won't fit, return false\n return false;\n }\n\n private outputText(gx: number, gy: number, info: TextInfo) {\n const color = this.getTextColor(info);\n const output = {\n text: info.text,\n datum: info.datum,\n color,\n fontStyle: info.fontStyle,\n fontWeight: info.fontWeight,\n fontFamily: info.fontFamily,\n angle: info.angle,\n width: info.fillTextWidth,\n height: info.fillTextHeight,\n x: (gx + info.gw / 2) * this.gridSize,\n y: (gy + info.gh / 2) * this.gridSize + info.fillTextOffsetY + info.fontSize * 0.5,\n fontSize: info.fontSize\n };\n\n this.result.push(output);\n\n if (this.progressiveResult) {\n this.progressiveResult.push(output);\n }\n }\n\n private initGrid(config: { width: number; height: number }) {\n /* Clear the canvas only if the clearCanvas is set,\n if not, update the grid to the current canvas state */\n this.grid = [];\n const shape = this.options.shape;\n\n if (isObject(shape)) {\n const canvas = generateMaskCanvas(shape as CanvasMaskShape, config.width, config.height);\n /* Read back the pixels of the canvas we got to tell which part of the\n canvas is empty.\n (no clearCanvas only works with a canvas, not divs) */\n let imageData = canvas.getContext('2d').getImageData(0, 0, this.ngx * this.gridSize, this.ngy * this.gridSize);\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(canvas);\n }\n\n let isEmptyPixel = generateIsEmptyPixel((shape as CanvasMaskShape).backgroundColor);\n let i;\n const singleGridLoop = (gx: number, gy: number) => {\n let y = this.gridSize;\n while (y--) {\n let x = this.gridSize;\n while (x--) {\n i = 4;\n\n if (!isEmptyPixel(imageData, gy * this.gridSize + y, gx * this.gridSize + x)) {\n this.grid[gx][gy] = true;\n return;\n }\n }\n }\n this.grid[gx][gy] = false;\n };\n\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n /* eslint no-labels: [\"error\", { \"allowLoop\": true }] */\n singleGridLoop(gx, gy);\n if (this.grid[gx][gy] !== false) {\n this.grid[gx][gy] = true;\n }\n }\n }\n\n imageData = isEmptyPixel = undefined;\n } else {\n /* fill the grid with empty state */\n let gx = this.ngx;\n while (gx--) {\n this.grid[gx] = [];\n let gy = this.ngy;\n while (gy--) {\n this.grid[gx][gy] = true;\n }\n }\n }\n }\n\n canRepeat() {\n return this.calculateEmptyRate() > 1e-3;\n }\n\n layout(data: any[], config: { width: number; height: number; origin?: [number, number] }) {\n this.initProgressive();\n this.drawnCount = 0;\n this.isTryRepeatFill = false;\n this.originalData = data;\n this.data = data;\n this.pointsAtRadius = [];\n this.ngx = Math.floor(config.width / this.gridSize);\n this.ngy = Math.floor(config.height / this.gridSize);\n const { center, maxRadius } = getMaxRadiusAndCenter(this.options.shape as string, [config.width, config.height]);\n\n // Determine the center of the word cloud\n this.center = config.origin\n ? [config.origin[0] / this.gridSize, config.origin[1] / this.gridSize]\n : [center[0] / this.gridSize, center[1] / this.gridSize];\n\n // Maxium radius to look for space\n this.maxRadius = Math.floor(maxRadius / this.gridSize);\n\n this.initGrid(config);\n this.result = [];\n\n return this.progressiveRun();\n }\n}\n","/**\n * 主要用于小程序环境的快速布局算法\n */\nimport type { ITextAttribute } from '@visactor/vrender-core';\nimport { getTextBounds } from '@visactor/vrender-core';\nimport type { IProgressiveTransformResult } from '@visactor/vgrammar-core';\nimport type { IBaseLayoutOptions, TagItemAttribute } from './interface';\nimport { BaseLayout } from './base';\nimport { merge } from '@visactor/vutils';\nexport interface TagItem {\n datum: any;\n width: number;\n height: number;\n text: string;\n fontSize: number;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n angle: number;\n x: number;\n y: number;\n top: number;\n left: number;\n}\n\ninterface IFastLayoutOptions extends IBaseLayoutOptions {\n padding?: TagItemAttribute;\n enlarge?: boolean;\n}\n\nexport class FastLayout extends BaseLayout implements IProgressiveTransformResult {\n private random: () => number;\n\n /* ==================== runtime vars ======================== */\n private center: [number, number];\n private aspectRatio: number;\n private maxRadius: number;\n private width: number;\n private height: number;\n\n static defaultOptions: Partial = {\n enlarge: false\n };\n\n constructor(options: IFastLayoutOptions) {\n super(merge({}, FastLayout.defaultOptions, options));\n this.random = this.options.random ? Math.random : () => 0;\n this.aspectRatio = 1;\n }\n\n // 新词是否与目前layout结果重叠\n private fit(word: TagItem) {\n for (let i = 0, len = this.result.length; i < len; i++) {\n if (isOverlap(word, this.result[i] as TagItem)) {\n return false;\n }\n }\n return true;\n }\n\n private getTextInfo(datum: any, index: number) {\n const info: Partial = {\n datum,\n fontSize: this.getTextFontSize(datum),\n fontWeight: this.getTextFontWeight(datum),\n fontStyle: this.getTextFontStyle(datum),\n fontFamily: this.getTextFontFamily(datum),\n angle: this.getTextRotate(datum, index),\n text: this.getText(datum) + '',\n x: this.center[0],\n y: this.center[1]\n };\n\n const bounds = getTextBounds(info as ITextAttribute);\n\n info.width = bounds.width();\n info.height = bounds.height();\n info.top = this.center[1] - info.height + info.height * 0.21;\n info.left = this.center[0] - info.width / 2;\n\n return info as TagItem;\n }\n\n layoutWord(index: number) {\n const step = 0.5; // 步长决定布局时间,也决定布局结果\n const info = this.getTextInfo(this.data[index], index);\n\n let angle = 2 * Math.PI;\n let radius = 0;\n let left = info.left;\n let top = info.top;\n const width = info.width;\n const height = info.height;\n let rx = 1;\n let isFit = this.fit(info);\n\n while (!isFit && radius < this.maxRadius) {\n // elliptic shape\n radius += step; // spiral radius\n rx = this.shape((radius / this.maxRadius) * 2 * Math.PI); // 0 to 1\n angle += (this.options.random ? (this.random() > 0.5 ? 1 : -1) : index % 2 === 0 ? 1 : -1) * step;\n\n left = this.center[0] - width / 2 + radius * rx * Math.cos(angle) * this.aspectRatio;\n top = this.center[1] - height / 2 + radius * rx * Math.sin(angle);\n\n info.left = left;\n info.top = top;\n info.x = left + width / 2;\n info.y = top + height / 2;\n\n isFit = this.fit(info);\n }\n\n if (!isFit) {\n return false;\n }\n\n if (\n this.options.clip ||\n (info.left >= 0 && info.left + info.width <= this.width && info.top >= 0 && info.top + info.height <= this.height)\n ) {\n this.result.push(info);\n\n return true;\n }\n\n return false;\n }\n\n layout(data: any[], config: { width: number; height: number }) {\n if (!data?.length) {\n return [];\n }\n\n this.initProgressive();\n this.result = [];\n this.maxRadius = Math.sqrt(config.width * config.width + config.height * config.height) / 2;\n this.center = [config.width / 2, config.height / 2];\n this.width = config.width;\n this.height = config.height;\n this.data = data.sort((a: any, b: any) => {\n return this.getTextFontSize(b) - this.getTextFontSize(a);\n });\n\n // 将words按照fontSize排序,结果更美观\n // words.sort((a, b) => b.fontSize - a.fontSize);\n\n let i = 0;\n\n while (i < data.length) {\n const drawn = this.layoutWord(i);\n\n i++;\n this.progressiveIndex = i;\n\n if (this.exceedTime()) {\n break;\n }\n }\n\n return this.result;\n }\n}\n\n// 判断矩形是否重叠\nfunction isOverlap(a: TagItem, b: TagItem) {\n if (a.left + a.width < b.left || a.top + a.height < b.top || a.left > b.left + b.width || a.top > b.top + b.height) {\n return false;\n }\n return true;\n}\n","import { CloudLayout } from './cloud-layout';\nimport { isFunction, isNumber, isString, toNumber, Logger, isArray } from '@visactor/vutils';\nimport type { TagOutputItem, TagItemAttribute } from './interface';\nimport { GridLayout } from './grid-layout';\nimport { FastLayout } from './fast-layout';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n z: 'z',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle'\n};\n\nexport type FieldOption = { field: string };\nexport type CallbackOption = (datum: any) => any;\nexport type AsType = {\n x: string;\n y: string;\n z: string;\n fontFamily: string;\n fontSize: string;\n fontStyle: string;\n fontWeight: string;\n angle: string;\n};\n\nexport const transform = (\n options: {\n size?: [number, number];\n fontFamily?: FieldOption | TagItemAttribute;\n fontStyle?: FieldOption | TagItemAttribute;\n fontWeight?: FieldOption | TagItemAttribute;\n fontSize?: FieldOption | TagItemAttribute;\n fontSizeRange?: [number, number];\n rotate?: FieldOption | TagItemAttribute;\n text: FieldOption | CallbackOption | string;\n spiral?: string;\n padding?: FieldOption | TagItemAttribute;\n shape?: string;\n shrink?: boolean;\n enlarge?: boolean;\n clip?: boolean;\n minFontSize?: number;\n randomVisible?: boolean;\n as?: AsType;\n layoutType?: string;\n progressiveTime?: number;\n progressiveStep?: number;\n depth_3d?: number;\n postProjection?: string;\n dataIndexKey?: string;\n repeatFill?: boolean;\n },\n upstreamData: any[]\n) => {\n if (options.size && (options.size[0] <= 0 || options.size[1] <= 0)) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n\n /** 输入数据转换 */\n const data = upstreamData;\n const canvasSize = (options.size ?? [500, 500]).slice() as [number, number];\n // canvasSize必须是整数\n canvasSize[0] = Math.floor(canvasSize[0]);\n canvasSize[1] = Math.floor(canvasSize[1]);\n const fontFamily = options.fontFamily ? field(options.fontFamily) : 'sans-serif';\n const fontStyle = options.fontStyle ? field(options.fontStyle) : 'normal';\n const fontWeight = options.fontWeight ? field(options.fontWeight) : 'normal';\n const rotate = options.rotate ? field(options.rotate) : 0;\n const text = field(options.text);\n const spiral = options.spiral ?? 'archimedean';\n const padding = options.padding ? field(options.padding) : 1;\n const shape = options.shape ?? 'square';\n const shrink = options.shrink ?? false;\n const enlarge = options.enlarge ?? false;\n const clip = options.clip ?? false;\n const minFontSize = options.minFontSize;\n const randomVisible = options.randomVisible;\n const as = options.as ? { ...OUTPUT, ...options.as } : OUTPUT;\n const depth_3d = options.depth_3d;\n const postProjection = options.postProjection;\n\n // 根据range转换fontSize\n let fontSize = options.fontSize ? field(options.fontSize) : 14;\n const fontSizeRange = options.fontSizeRange;\n // 只有fontSize不为固定值时,fontSizeRange才生效\n if (fontSizeRange && !isNumber(fontSize)) {\n const fsize: any = fontSize;\n const fontSizeSqrtScale = generateScale(extent(fsize, data), fontSizeRange as number[]);\n\n fontSize = datum => {\n return fontSizeSqrtScale(fsize(datum));\n };\n }\n\n let Layout: any = CloudLayout;\n\n if (options.layoutType === 'fast') {\n Layout = FastLayout;\n } else if (options.layoutType === 'grid') {\n Layout = GridLayout;\n }\n\n /** 执行布局算法 */\n const layout = new Layout({\n ...options,\n text,\n padding,\n spiral,\n shape,\n rotate,\n fontFamily,\n fontStyle,\n fontWeight,\n fontSize,\n shrink,\n clip,\n enlarge,\n minFontSize,\n random: randomVisible,\n outputCallback: (words: any[]) => {\n const res: any[] = [];\n let t: any;\n let w: TagOutputItem;\n\n for (let i = 0, len = words.length; i < len; i++) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = w.angle;\n\n if (postProjection === 'StereographicProjection') {\n stereographicProjection(canvasSize, w, t, as, depth_3d);\n }\n\n if (options.dataIndexKey) {\n t[options.dataIndexKey] = `${i}`;\n }\n\n res.push(t);\n }\n return res;\n }\n });\n\n layout.layout(data, {\n width: canvasSize[0],\n height: canvasSize[1]\n });\n\n if (options.progressiveStep > 0 || options.progressiveTime > 0) {\n return {\n progressive: layout\n };\n }\n return layout.output();\n};\n\n// 取数逻辑\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (isString(option) || isNumber(option) || isFunction(option) || isArray(option)) {\n return option as TagItemAttribute;\n }\n return (datum: any) => datum[(option as FieldOption).field] as T;\n};\n\nconst sqrt = (x: number) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n\n// simulation sqrt scale\nconst generateScale = (domain: number[], range: number[], type?: 'linear' | 'sqrt') => {\n if (domain[0] === domain[1]) {\n return (datum: number) => range[0]; // match smallest fontsize\n }\n const s0 = sqrt(domain[0]);\n const s1 = sqrt(domain[1]);\n const min = Math.min(s0, s1);\n const max = Math.max(s0, s1);\n\n return (datum: number) => ((sqrt(datum) - min) / (max - min)) * (range[1] - range[0]) + range[0];\n};\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\nfunction stereographicProjection(canvasSize: [number, number], w: any, t: any, as: any, depth_3d?: number) {\n const maxSize = Math.max(canvasSize[0], canvasSize[1]);\n const r = maxSize / 2;\n const out = _StereographicProjection(canvasSize[0], canvasSize[1], r, { x: r, y: r, z: depth_3d ?? r }, w);\n t[as.x] = out.x;\n t[as.y] = out.y;\n t[as.z] = out.z;\n}\n\nfunction _StereographicProjection(\n w: number,\n h: number,\n r: number,\n center: { x: number; y: number; z: number },\n word: { x: number; y: number }\n) {\n const { x, y } = word;\n const theta = (x / w) * Math.PI * 2;\n let phi = Math.PI - (y / h) * Math.PI;\n // 由于cos函数的特性,调整phi的分布,向内聚\n phi += ((phi < Math.PI / 2 ? 1 : -1) * Math.pow(Math.min(phi - Math.PI / 2, 1), 2)) / 5;\n const nx = r * Math.sin(phi) * Math.cos(theta) + center.x;\n const ny = r * Math.cos(phi) + center.y;\n const nz = r * Math.sin(phi) * Math.sin(theta) + center.z;\n return {\n x: nx,\n y: ny,\n z: nz\n };\n}\n","import type { CloudWordType, SegmentationInputType, SegmentationOutputType } from './interface';\n\n/**\n * 求图像连通区域的个数、面积、边界、中心点\n * @param {*} shape 图像 base64\n * @param {*} size 画布大小\n */\nexport function segmentation(segmentationInput: SegmentationInputType) {\n const { size, maskCanvas } = segmentationInput;\n const ctx = maskCanvas.getContext('2d', { willReadFrequently: true });\n const imageData = ctx.getImageData(0, 0, maskCanvas.width, maskCanvas.height);\n // 保存分组标签,0 是背景(像素为白色或透明度为 0),>1 的分组\n const labels = new Array(size[0] * size[1]).fill(0);\n // 当前的种子标签\n let curLabel = 1;\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n // 当前连通域中的单位域队列\n let queue = [];\n // 注意此处,i 为行数即 y,j为x,下同\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n // 当前单位域已被标记或者属于背景区域, 则跳过\n if (labels[i * size[0] + j] !== 0 || segmentationInput.isEmptyPixel(imageData, i, j)) {\n continue;\n }\n\n labels[i * size[0] + j] = curLabel;\n // 加入当前域队列\n queue.push([i, j]);\n\n // 遍历当前域队列\n for (let k = 0; k < queue.length; k++) {\n // 四连通范围内检查未标记的前景单位域\n for (let m = 0; m < 4; m++) {\n let row: number = queue[k][0] + offset[m][0];\n let col: number = queue[k][1] + offset[m][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n // 邻近单位域未标记并且属于前景区域, 标记并加入队列\n if (labels[row * size[0] + col] === 0 && !segmentationInput.isEmptyPixel(imageData, row, col)) {\n labels[row * size[0] + col] = curLabel;\n queue.push([row, col]);\n }\n }\n }\n\n // 一个完整连通域查找完毕,标签更新\n curLabel++;\n // 清空队列\n queue = [];\n }\n }\n\n /**\n * 使用一次扫描线算法,识别出连通域的边界、面积、最大的边界点以求的最大半径\n * 边界:二值图像发生突变的地方\n * 面积:连通域中的像素个数\n * ratio: 连通区域的大致宽高比\n */\n const boundaries = {};\n const areas = {};\n const centers = {};\n const maxPoints = {}; // 存储顺序为 iMin, iMax, jMin, jMax\n const maxR = {};\n const ratios = {};\n // 存储形状的范围\n const shapeBounds = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity,\n width: 0,\n height: 0\n };\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n continue;\n }\n\n // 当前像素为边界\n if (isBoundaryPixel(i, j)) {\n boundaries[label] = boundaries[label] || [];\n boundaries[label].push([j, i]);\n\n if (!maxPoints[label]) {\n maxPoints[label] = [Infinity, -Infinity, Infinity, -Infinity];\n }\n if (i < maxPoints[label][0]) {\n maxPoints[label][0] = i;\n }\n if (i > maxPoints[label][1]) {\n maxPoints[label][1] = i;\n }\n if (j < maxPoints[label][2]) {\n maxPoints[label][2] = j;\n }\n if (j > maxPoints[label][3]) {\n maxPoints[label][3] = j;\n }\n\n // 更新 bounds\n if (j < shapeBounds.x1) {\n shapeBounds.x1 = j;\n }\n if (j > shapeBounds.x2) {\n shapeBounds.x2 = j;\n }\n if (i < shapeBounds.y1) {\n shapeBounds.y1 = i;\n }\n if (i > shapeBounds.y2) {\n shapeBounds.y2 = i;\n }\n }\n\n // 计算面积\n areas[label] = areas[label] || 0;\n areas[label]++;\n }\n }\n\n // 用于计算整个 shape 的中心点\n const allBoundaries = [];\n\n // 计算中心点\n for (const label in boundaries) {\n const boundary = boundaries[label];\n // 计算多边形重心\n const x = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[0], 0) / boundary.length);\n const y = ~~(boundary.reduce((acc: any, cur: any) => acc + cur[1], 0) / boundary.length);\n centers[label] = [x, y];\n allBoundaries.push(...boundary);\n\n const [yMin, yMax, xMin, xMax] = maxPoints[label];\n\n maxR[label] = ~~Math.max(\n Math.sqrt((x - xMin) ** 2 + (y - yMin) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMin) ** 2 + (y - yMax) ** 2),\n Math.sqrt((x - xMax) ** 2 + (y - yMin) ** 2)\n );\n\n ratios[label] = (xMax - xMin) / (yMax - yMin);\n }\n\n const regions = Object.keys(centers).map((key: any) => ({\n label: key - 1,\n boundary: boundaries[key],\n area: areas[key],\n center: centers[key],\n maxPoint: maxPoints[key],\n maxR: maxR[key],\n ratio: ratios[key]\n }));\n\n // 计算整个 shape 的一些属性\n shapeBounds.width = shapeBounds.x2 - shapeBounds.x1 + 1;\n shapeBounds.height = shapeBounds.y2 - shapeBounds.y1 + 1;\n\n const x = ~~(allBoundaries.reduce((acc, cur) => acc + cur[0], 0) / allBoundaries.length);\n const y = ~~(allBoundaries.reduce((acc, cur) => acc + cur[1], 0) / allBoundaries.length);\n\n const shapeMaxR = ~~Math.max(\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y1) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x1) ** 2 + (y - shapeBounds.y2) ** 2),\n Math.sqrt((x - shapeBounds.x2) ** 2 + (y - shapeBounds.y1) ** 2)\n );\n const shapeRatio = shapeBounds.width / shapeBounds.height;\n const shapeArea = Object.keys(areas).reduce((acc, key) => (acc += areas[key]), 0);\n // 输出到 config 上\n const segmentation = {\n regions,\n labels,\n labelNumber: curLabel - 1\n };\n return Object.assign(segmentationInput, {\n segmentation,\n shapeBounds,\n shapeMaxR,\n shapeRatio,\n shapeCenter: [x, y],\n shapeArea\n });\n\n /**\n * 用四联通去判断是否是边缘像素\n * @param {*} i\n * @param {*} j\n */\n function isBoundaryPixel(i: number, j: number) {\n // 四连通位置偏移\n const offset = [\n [0, 1],\n [1, 0],\n [-1, 0],\n [0, -1]\n ];\n\n // 当 i,j 非背景,且是画布边缘时,则为 boundary\n if (i === 0 || j === 0 || i === size[1] - 1 || j === size[0] - 1) {\n return true;\n }\n\n // 其他情况用四连通去判断\n for (let k = 0; k < 4; k++) {\n let row = i + offset[k][0];\n let col = j + offset[k][1];\n\n // 防止坐标溢出图像边界\n row = row < 0 ? 0 : row >= size[1] ? size[1] - 1 : row;\n col = col < 0 ? 0 : col >= size[0] ? size[0] - 1 : col;\n\n if (labels[row * size[0] + col] === 0) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * 移除图像中的白边\n */\nexport function removeBorder(\n image: any,\n canvas: HTMLCanvasElement | any,\n isEmptyPixel: (imageData: ImageData, i: number, j: number) => boolean\n) {\n canvas.width = image.width;\n canvas.height = image.height;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(image, 0, 0);\n const width = canvas.width;\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n let top = 0;\n let bottom = imageData.height;\n let left = 0;\n let right = imageData.width;\n\n const rowBlank = (width: number, y: number) => {\n for (let x = 0; x < width; ++x) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n };\n\n const columnBlank = (x: number, y0: number, y1: number) => {\n for (let y = y0; y < y1; ++y) {\n if (!isEmptyPixel(imageData, y, x)) {\n return false;\n }\n }\n return true;\n };\n\n while (top < bottom && rowBlank(width, top)) {\n ++top;\n }\n while (bottom - 1 > top && rowBlank(width, bottom - 1)) {\n --bottom;\n }\n while (left < right && columnBlank(left, top, bottom)) {\n ++left;\n }\n while (right - 1 > left && columnBlank(right - 1, top, bottom)) {\n --right;\n }\n\n const trimmed = ctx.getImageData(left, top, right - left, bottom - top);\n canvas.width = trimmed.width;\n canvas.height = trimmed.height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.putImageData(trimmed, 0, 0);\n\n return canvas;\n}\n\n/**\n * 调整图像大小和位置,将图像按照长边缩放到适应画布大小,并且居中\n * 此处让图片占满画布,padding 不是这个 transform 需要考虑的\n */\nexport function scaleAndMiddleShape(image: any, size: [number, number]) {\n const width = image.width;\n const height = image.height;\n let scale = size[0] / width;\n if (height * scale > size[1]) {\n scale = size[1] / height;\n }\n\n const newWidth = Math.floor(scale * width);\n const newHeight = Math.floor(scale * height);\n // 图片绘制时的坐标\n const x = (size[0] - newWidth) / 2;\n const y = (size[1] - newHeight) / 2;\n\n return {\n x,\n y,\n width: newWidth,\n height: newHeight,\n scale\n };\n}\n/**\n * 将单词分配到不同的区域内\n *\n * 先使用相对简单的分配逻辑,即根据区域面积来决定分配到的单词的 权重大小和数量\n * @param {*} words\n * @param {*} config\n */\nexport function allocateWords(words: CloudWordType[], segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { regions }\n } = segmentationOutput;\n let areaMax = -Infinity;\n let totalArea = 0;\n let areaMaxIndex = 0;\n\n // 查找最大面积的区域,同时计算总的面积\n regions.forEach((region: any, index: number) => {\n const area = region.area;\n if (area > areaMax) {\n areaMax = area;\n areaMaxIndex = index;\n }\n totalArea += area;\n });\n\n // 根据每个区域的面积大小给每个区域分配单词数量和权重限制\n let wordsSum = 0;\n regions.forEach((region: any) => {\n const area = region.area;\n const regionNum = Math.ceil((area / totalArea) * words.length);\n const regionWeight = area / areaMax;\n\n region.words = [];\n region.regionNum = regionNum;\n region.regionWeight = regionWeight;\n wordsSum += regionNum;\n });\n // 如果有未分配的单词, 则分配到面积最大区域\n if (wordsSum < words.length) {\n regions[areaMaxIndex].wordsNum += words.length - wordsSum;\n }\n\n // 对单词进行分配,先分配面积最大的区域\n let currIndex = areaMaxIndex;\n const regionNums = regions.map((region: any) => region.regionNum);\n words.forEach((word: any) => {\n // 记录总的失败次数\n let failCounter = 0;\n // 记录失败次数,超过区域的数量,则更新一下所有区域的权重上限\n let updateCounter = 0;\n word.regionIndex = -1;\n\n do {\n if (regionNums[currIndex] > 0 && word.weight <= regions[currIndex].regionWeight) {\n word.regionIndex = currIndex;\n regions[currIndex].words.push(word);\n regionNums[currIndex]--;\n currIndex = (currIndex + 1) % regions.length;\n break;\n }\n currIndex = (currIndex + 1) % regions.length;\n\n failCounter++;\n updateCounter++;\n // 如果没有找到合适的区域,则更新所有区域的权重\n if (updateCounter > regions.length + 1) {\n regions.forEach((region: any) => {\n // 这里 0.15 是经验值,可以后续根据业务场景调整\n region.regionWeight += 0.15;\n });\n updateCounter = 0;\n }\n } while (word.regionIndex === -1 && failCounter < regions.length * 3);\n\n // 未分配则分配为 area 最大的区域\n if (word.regionIndex === -1) {\n word.regionIndex = areaMaxIndex;\n regions[areaMaxIndex].words.push(word);\n regionNums[areaMaxIndex]--;\n }\n });\n\n // 对每个区域里的单词根据权重进行排序\n regions.forEach((region: any) => {\n region.words.sort((a: CloudWordType, b: CloudWordType) => b.weight - a.weight);\n });\n}\n","import { sqrt, square } from './utils/utils';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport type { ContinuousScaleType } from './interface';\n\nexport class SqrtScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Sqrt;\n\n constructor() {\n super(sqrt, square);\n }\n\n clone(): SqrtScale {\n return new SqrtScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate) as LinearScale;\n }\n}\n","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport function layout(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter((word: CloudWordType) => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfShrink(\n words: CloudWordType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize\n } = segmentationOutput;\n const board = initBoardWithShape(segmentationOutput);\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // 对每个区域开始进行布局\n for (const region of regions) {\n const { words: regionWords, center, maxR, ratio } = region;\n let fontFactor = 1;\n\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else {\n // console.log('失败迭代', word.text);\n fontFactor = fontFactor * layoutConfig.fontSizeShrinkFactor;\n for (let j = i; j < regionWords.length; j++) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * fontFactor), layoutConfig.minFontSize);\n }\n i--;\n }\n }\n }\n\n // // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n // for (let _ = 0; _ < config.textLayoutTimes; _++) {\n // const failedWords = words.filter((word) => {\n // if (!word.hasPlaced) {\n // word.hasText = false\n // word.sprite = null\n // word.fontSize = ~~(word.fontSize * config.fontSizeShrinkFactor)\n // }\n\n // return !word.hasPlaced\n // })\n\n // if (failedWords.length === 0) break\n\n // for (let i = 0; i < failedWords.length; i++) {\n // const word = failedWords[i]\n // measureSprite(canvas, ctx, failedWords, i)\n // word.x = shapeCenter[0]\n // word.y = shapeCenter[1]\n // if (\n // word.hasText &&\n // place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)\n // ) {\n // word.hasPlaced = true\n // }\n // }\n // }\n\n layoutConfig.board = board;\n}\n\nexport function layoutGlobalShrink(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { stepFactor, importantWordCount, globalShinkLimit } = layoutConfig;\n const {\n size,\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeShrinkFactor;\n\n // 同一个词如果降低到globalShinkLimit还没有布局成功,恢复到该词未布局状态\n let id = null;\n let idIntialFactor = 1;\n /* eslint-disable no-loop-func */\n let globalShinkFactor = 1;\n // 找到高优保障词weight,暂定10个\n const importantCount = importantWordCount;\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount].weight;\n }\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (!word.skip && word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n } else if (!word.skip && word.weight > weightStd && globalShinkFactor > globalShinkLimit) {\n const wordId = word.datum[Symbol.for('vGrammar_id')];\n if (wordId !== id) {\n id = wordId;\n idIntialFactor = globalShinkFactor;\n }\n // 缩小字号\n globalShinkFactor = globalShinkFactor * fontFactor;\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalShinkFactor);\n restartTag = true;\n break;\n } else if (!word.skip && word.datum[Symbol.for('vGrammar_id')] === id) {\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / globalShinkFactor;\n });\n\n word.skip = true;\n globalShinkFactor = idIntialFactor;\n id = null;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, idIntialFactor);\n restartTag = true;\n break;\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\nexport function layoutSelfEnlarge(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { size, stepFactor, importantWordCount } = layoutConfig;\n const {\n segmentation: { regions },\n tempCanvas: canvas,\n boardSize,\n shapeCenter,\n shapeMaxR,\n shapeRatio\n } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n const boardOrigin = initBoardWithShape(segmentationOutput);\n let board = boardOrigin.slice(0);\n\n const fontFactor = layoutConfig.fontSizeEnlargeFactor;\n // const fontFactor = 1.5;\n\n // 找到高优保障词weight,暂定10个\n const importantCount = Math.min(importantWordCount, words.length);\n let weightStd = 0;\n if (words.length > importantCount) {\n const wordWeights = words.sort((word0, word1) => {\n return word1.weight - word0.weight;\n });\n weightStd = wordWeights[importantCount - 1].weight;\n }\n\n // 高优词布局成功数量\n let importantWordSuccessedNum = 0;\n // 目前放大系数\n let globalEnlargeFactor = 1;\n // 回退标志\n let layoutFinish = false;\n\n // 对每个区域开始进行布局\n for (let k = 0; k < regions.length; k++) {\n const region = regions[k];\n const { words: regionWords, center, maxR, ratio } = region;\n let restartTag = false;\n for (let i = 0; i < regionWords.length; i++) {\n // 批量测量单词的 bounds\n measureSprite(canvas, ctx, words, i);\n const word = regionWords[i];\n word.x = center[0];\n word.y = center[1];\n\n if (word.hasText && word.sprite && place(board, word, maxR, ratio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n if (word.weight >= weightStd) {\n importantWordSuccessedNum++;\n }\n if (importantWordSuccessedNum >= importantCount && !layoutFinish) {\n // 重点词完全布局,尝试增大字号\n // 增大系数\n globalEnlargeFactor = globalEnlargeFactor * fontFactor;\n\n // 增大字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize * fontFactor; // 这里因为存在字号缩小-还原逻辑,因此不加最小字号限制\n });\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局', word.text, globalEnlargeFactor);\n restartTag = true;\n importantWordSuccessedNum = 0;\n\n break;\n }\n } else if (word.weight >= weightStd && globalEnlargeFactor > 1) {\n // 之前重点词完全布局,此次重点词未完成布局,回退字号\n words.forEach(word => {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = word.fontSize / fontFactor;\n });\n\n // 恢复系数\n globalEnlargeFactor = globalEnlargeFactor / fontFactor;\n layoutFinish = true;\n\n // 清空布局画布\n board = boardOrigin.slice(0);\n // console.log('重启布局0', word.text, globalEnlargeFactor);\n restartTag = true;\n\n break;\n } else if (word.weight >= weightStd) {\n // 初次未完成布局,使用ensureMapping算法\n // console.log('use layoutGlobalShrink')\n return layoutGlobalShrink(words, layoutConfig, segmentationOutput);\n }\n }\n if (restartTag) {\n // 重新布局\n // k--;\n k = -1;\n continue;\n }\n }\n\n // 对于放置失败的单词,缩小文字大小, 以 shapeCenter 为中心进行布局\n // 最多尝试尝试3次,如果还是失败,则认为该单词不能放置\n for (let _ = 0; _ < layoutConfig.textLayoutTimes; _++) {\n const failedWords = words.filter(word => {\n if (!word.hasPlaced) {\n word.hasText = false;\n word.sprite = null;\n word.fontSize = Math.max(~~(word.fontSize * layoutConfig.fontSizeShrinkFactor), layoutConfig.minFontSize);\n }\n\n return !word.hasPlaced;\n });\n\n if (failedWords.length === 0) {\n break;\n }\n\n for (let i = 0; i < failedWords.length; i++) {\n const word = failedWords[i];\n measureSprite(canvas, ctx, failedWords, i);\n word.x = shapeCenter[0];\n word.y = shapeCenter[1];\n if (word.hasText && place(board, word, shapeMaxR, shapeRatio, size, boardSize, stepFactor)) {\n word.hasPlaced = true;\n }\n }\n }\n\n layoutConfig.board = board;\n}\n\n/**\n * 使用螺旋线放置单词,成功返回 true\n */\nfunction place(\n board: number[],\n word: CloudWordType,\n maxR: number,\n ratio: number,\n size: [number, number],\n boardSize: [number, number],\n stepFactor: number\n) {\n const startX = word.x;\n const startY = word.y;\n const spiral = archimedeanSpiral(ratio);\n\n const dt = 1 * stepFactor;\n let dxdy;\n let dx;\n let dy;\n let t = -dt;\n\n while ((dxdy = spiral((t += dt)))) {\n const {\n wordSize,\n bounds: { dTop, dBottom, dLeft, dRight }\n } = word;\n dx = dxdy[0];\n dy = dxdy[1];\n\n // 判断螺旋线是否超出了最大的半径\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxR) {\n break;\n }\n word.x = ~~(startX + dx);\n word.y = ~~(startY + dy);\n\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (!isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n\n return true;\n }\n }\n return false;\n}\n\n/**\n * 在 board 中放置 word\n * 会在 filling 中复用\n */\nexport function placeWordOnBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { wordSize } = word;\n // 放置单词,以 x, y 为中心\n const sprite = word.sprite;\n const w = wordSize[0] >> 5; // 单词占用的 int 的数量\n const sw = boardSize[0] >> 5; // board 的宽度\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // 单词偏移(px), 当前元素右侧移除数量\n const msx = 32 - sx; // 需要从sprite上一个元素中移除的数量\n const h = wordSize[1];\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n let last;\n\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n board[x + i] |= sprite[j * w + i];\n }\n x += sw;\n }\n } else {\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n }\n}\n\n/**\n * 检测 word 是否与 board 中的元素发生碰撞\n *\n * 会在 filling words 中复用\n */\nexport function isCollideWithBoard(word: CloudWordType, board: number[], boardSize: [number, number]) {\n const { sprite, wordSize } = word;\n\n const sw = boardSize[0] >> 5;\n const w = wordSize[0] >> 5;\n const lx = word.x - (w << 4); // 单词的左边界\n const sx = lx % 32; // sprite数组左侧偏移\n const msx = 32 - sx; // 位移遮罩\n const h = wordSize[1];\n let last;\n let x = (word.y - (wordSize[1] >> 1)) * sw + (lx >> 5); // 数组的起始位置\n\n // 逐行遍历单词sprite,判断与已绘制内容重叠\n if (sx === 0) {\n // 恰好对齐,不需要偏移\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n if (board[x + i] & sprite[j * w + i]) {\n return true;\n }\n }\n x += sw;\n }\n } else {\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)) & board[x + i]) {\n return true;\n }\n }\n x += sw;\n }\n }\n\n return false;\n}\n\nfunction archimedeanSpiral(ratio: number) {\n // t 为弧度值\n return function (t: number) {\n return [ratio * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\n/**\n * 测量一批单词的 sprite\n * 会在测量 filling words 时复用,修改时注意兼容性\n */\nexport function measureSprite(\n canvas: HTMLCanvasElement | any,\n ctx: CanvasRenderingContext2D | null,\n words: CloudWordType[] | any,\n wi: number\n) {\n if (words[wi].sprite || words[wi].fontSize === 0) {\n return;\n }\n\n const cw = 2048;\n const ch = 2048;\n const radians = Math.PI / 180;\n const n = words.length;\n\n canvas.width = cw;\n canvas.height = ch;\n ctx.clearRect(0, 0, cw, ch);\n ctx.textAlign = 'center';\n\n let x = 0;\n let y = 0;\n let maxHeight = 0;\n let wordW; // 单词盒子 宽度\n let wordH;\n let yMax = 0; // 记录画布中绘制的 y 最大范围\n\n const wiDist = wi;\n --wi;\n while (++wi < n) {\n const word = words[wi];\n const fontSize = Math.max(word.fontSize, 2); // 最小字号2px\n ctx.save();\n ctx.font = word.fontStyle + ' ' + word.fontWeight + ' ' + fontSize + 'px ' + word.fontFamily;\n\n // 计算单词盒子宽高\n wordW = ctx.measureText(word.text + 'm').width + word.padding * 2;\n wordH = fontSize * 2 + word.padding * 2;\n\n if (word.rotate !== 0) {\n const sr = Math.sin(word.rotate * radians);\n const cr = Math.cos(word.rotate * radians);\n const wcr = wordW * cr;\n const wsr = wordW * sr;\n const hcr = wordH * cr;\n const hsr = wordH * sr;\n wordW = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr));\n wordH = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n wordW = ((wordW + 31) >> 5) << 5; // 宽度必须是 32 的倍数\n wordH = Math.ceil(wordH);\n\n // 记录当前行最大高度\n if (wordH > maxHeight) {\n maxHeight = wordH;\n }\n\n // 如果当前行放不下,就另起一行,y方向向下移动当前行的最大高度\n if (x + wordW >= cw) {\n x = 0;\n y += maxHeight;\n maxHeight = wordH;\n }\n\n // 如果绘制不下,则停止\n if (y + wordH >= ch) {\n if (y === 0) {\n word.hasText = false;\n continue;\n } else {\n break;\n }\n }\n // 更新绘制范围 y 的最大值\n if (y + wordH >= yMax) {\n yMax = y + wordH;\n }\n\n ctx.translate(x + (wordW >> 1), y + (wordH >> 1));\n if (word.rotate !== 0) {\n ctx.rotate(word.rotate * radians);\n }\n ctx.fillText(word.text, 0, 0);\n if (word.padding) {\n ctx.lineWidth = 2 * word.padding;\n ctx.strokeText(word.text, 0, 0);\n }\n ctx.restore();\n\n // 词语绘制完成,记录其在画布上位置信息\n word.LT = [x, y]; // 左上角点\n word.wordSize = [wordW, wordH];\n\n // 指示在临时画布上绘制过了单词\n word.hasText = true;\n\n // x位置右移,等待下一个词语绘制\n x += wordW;\n }\n\n if (yMax === 0) {\n return;\n }\n const pixels = ctx.getImageData(0, 0, cw, yMax).data;\n\n let i;\n let j;\n\n // 提取画布上的 sprite 信息\n while (--wi >= wiDist) {\n const word = words[wi];\n if (!word.hasText) {\n word.bounds = {\n dTop: Infinity,\n dBottom: -Infinity,\n dLeft: Infinity,\n dRight: -Infinity\n };\n break;\n }\n\n const { LT = [0, 0], wordSize } = word;\n [x, y] = LT;\n const w32 = wordSize[0] >> 5;\n // 将数组归0\n const sprite = new Array(w32 * wordSize[1]).fill(0);\n\n // 先记录单词 bounds 的行列号,然后转换成与中心的delta\n let [dTop, dBottom, dLeft, dRight] = [Infinity, -Infinity, Infinity, -Infinity];\n\n for (j = 0; j < wordSize[1]; j++) {\n let seen: any;\n for (i = 0; i < wordSize[0]; i++) {\n // 取 alpha 通道的值,\n if (pixels[((y + j) * cw + (x + i)) * 4 + 3] > 0) {\n const k = w32 * j + (i >> 5);\n const m = 1 << (31 - (i % 32));\n sprite[k] |= m;\n\n if (i < dLeft) {\n dLeft = i;\n }\n if (i > dRight) {\n dRight = i;\n }\n seen |= m;\n }\n }\n if (seen) {\n if (j < dTop) {\n dTop = j;\n }\n if (j > dBottom) {\n dBottom = j;\n }\n }\n }\n\n // 记录单词准确的的 bounds\n word.bounds = {\n dTop: (wordSize[1] >> 1) - dTop,\n dBottom: dBottom - (wordSize[1] >> 1),\n dLeft: (wordSize[0] >> 1) - dLeft,\n dRight: dRight - (wordSize[0] >> 1)\n };\n word.sprite = sprite;\n // 后续操作中 LT 无意义\n delete word.LT;\n }\n\n // debug 代码\n // words.forEach((word) => {\n // const {\n // LT,\n // wordSize,\n // hasText,\n // sprite,\n // bounds: { dTop, dBottom, dLeft, dRight },\n // } = word\n // if (hasText) {\n // paint(sprite, wordSize)\n // // 绘制用于 debug 的\n // ctx.save()\n // ctx.strokeStyle = '#f00'\n // ctx.fillStyle = '#0f0'\n // // 绘制 word 包围盒\n // ctx.strokeRect(...LT, ...wordSize)\n // ctx.translate(LT[0] + wordSize[0] / 2, LT[1] + wordSize[1] / 2)\n // ctx.strokeStyle = '#00f'\n // // 绘制bounds\n // ctx.strokeRect(-dLeft, -dTop, dLeft + dRight, dTop + dBottom)\n // // 绘制中心点\n // ctx.fillRect(0, 0, 3, 3)\n // ctx.restore()\n // }\n // })\n\n // document.body.prepend(canvas)\n}\n\n/**\n * 根据 shape 相关的信息初始化 board\n */\nfunction initBoardWithShape(segmentationOutput: SegmentationOutputType) {\n const {\n segmentation: { labels },\n boardSize,\n size\n } = segmentationOutput;\n // board 每个 int 编码 32 个像素的占用信息,求得 w32 表示一行有几个 int\n const w32 = boardSize[0] >> 5;\n const board = new Array(w32 * size[1]).fill(0);\n\n for (let i = 0; i < size[1]; i++) {\n for (let j = 0; j < size[0]; j++) {\n const label = labels[i * size[0] + j];\n if (label === 0) {\n // 取得 board 中对应 int 的索引\n const k = w32 * i + (j >> 5);\n // 构造代表该像素被占用的 int\n const m = 1 << (31 - (j % 32));\n board[k] |= m;\n }\n }\n }\n\n // 对 boardSize 和 size 进行比较,如果 boardSize 大于 size,则将差距的部分设置为不可放置\n if (boardSize[0] > size[0]) {\n const width = boardSize[0] - size[0];\n const m = (1 << width) - 1;\n for (let y = 0; y < size[1]; y++) {\n const k = w32 * y + w32 - 1;\n board[k] |= m;\n }\n }\n\n return board;\n}\n","import type { CloudWordType, LayoutConfigType, SegmentationOutputType } from './interface';\nimport { measureSprite, isCollideWithBoard, placeWordOnBoard } from './wordle';\n\nexport function filling(\n words: CloudWordType[],\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const {\n size,\n fillingTimes,\n fillingXStep,\n fillingYStep,\n getFillingFontStyle,\n getFillingFontWeight,\n getFillingFontFamily,\n fillingInitialFontSize,\n fillingDeltaFontSize,\n fillingInitialOpacity,\n fillingDeltaOpacity,\n fillingRotateList,\n getFillingPadding,\n random,\n board,\n minFillFontSize\n } = layoutConfig;\n\n const { boardSize, shapeBounds, tempCanvas: canvas, randomGenerator } = segmentationOutput;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n\n // const padding = fillingPadding\n\n let fontSize = fillingInitialFontSize;\n let opacity = fillingInitialOpacity;\n const placedFillingWords: CloudWordType[] = [];\n\n for (let i = 0; i < fillingTimes; i++) {\n filling1Time(fontSize, opacity);\n\n // 完成一次填充,则更新一下填充词的属性,继续下一次填充\n fontSize = Math.max(\n fontSize > fillingDeltaFontSize ? fontSize - fillingDeltaFontSize : fillingDeltaFontSize,\n minFillFontSize\n ); // 填充词最小字号4px\n opacity = opacity > fillingDeltaOpacity ? opacity - fillingDeltaOpacity : fillingDeltaOpacity;\n }\n\n return placedFillingWords;\n\n function filling1Time(fontSize: number, opacity: number) {\n const fillingWords: CloudWordType[] = words.map(word => {\n const { text, color, fillingColor, hasPlaced, datum } = word;\n return {\n x: 0,\n y: 0,\n weight: 0,\n text,\n fontFamily: getFillingFontFamily(datum),\n fontStyle: getFillingFontStyle(datum),\n fontWeight: getFillingFontWeight(datum),\n fontSize,\n rotate: fillingRotateList[~~(randomGenerator() * fillingRotateList.length)],\n padding: getFillingPadding(datum),\n opacity,\n visible: true,\n color,\n fillingColor,\n hasPlaced,\n datum\n };\n });\n randomArray(fillingWords);\n let wi = 0;\n const { x1, y1, x2, y2 } = shapeBounds;\n // 小范围随机一个起点\n const [startX, startY] = [\n x1 + ~~(randomGenerator() * fillingXStep * 2),\n y1 + ~~(randomGenerator() * fillingYStep * 2)\n ];\n\n for (let y = startY; y <= y2; y += fillingYStep) {\n for (let x = startX; x <= x2; x += fillingXStep) {\n // 测量填充词的 bounds\n measureSprite(canvas, ctx, fillingWords, wi);\n const word = fillingWords[wi];\n word.x = x;\n word.y = y;\n const { wordSize, bounds, hasPlaced } = word;\n\n /*\n * 这里有一个问题,如果一个词语一直布局不通过,就会在一次filling1Time中一直尝试布局\n * 导致fill次数达到上限后也无法填满空隙\n * 因此在此处跳过无法布局的核心词(一般为超场词),避免出现问题\n */\n if (!hasPlaced || !bounds) {\n // 跳过未成功布局的核心词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n continue;\n }\n\n const { dTop, dBottom, dLeft, dRight } = bounds;\n // 检测根据单词的 bounds 检测是否超出范围\n if (word.x - dLeft < 0 || word.x + dRight > size[0] || word.y - dTop < 0 || word.y + dBottom > size[1]) {\n continue;\n }\n\n if (word.hasText && word.sprite && !isCollideWithBoard(word, board, boardSize)) {\n placeWordOnBoard(word, board, boardSize);\n placedFillingWords.push(Object.assign({}, word));\n // 所有单词放置完后,随机排序一下填充词\n if (++wi === fillingWords.length) {\n wi = 0;\n if (random) {\n randomArray(fillingWords);\n }\n }\n }\n }\n }\n }\n\n function randomArray(words: CloudWordType[]) {\n return words.sort(() => randomGenerator() - 0.5);\n }\n}\n","import { allocateWords } from './segmentation';\nimport { layout, layoutGlobalShrink, layoutSelfEnlarge } from './wordle';\nimport { filling } from './filling';\nimport type { LayoutConfigType, SegmentationOutputType } from './interface';\n\nexport default function (words: any, layoutConfig: LayoutConfigType, segmentationOutput: SegmentationOutputType) {\n // 将单词分配到各个连通区域中\n allocateWords(words, segmentationOutput);\n if (layoutConfig.layoutMode === 'ensureMapping') {\n layoutGlobalShrink(words, layoutConfig, segmentationOutput);\n } else if (layoutConfig.layoutMode === 'ensureMappingEnlarge') {\n layoutSelfEnlarge(words, layoutConfig, segmentationOutput);\n } else {\n layout(words, layoutConfig, segmentationOutput);\n }\n // const fillingWords = []\n const fillingWords = filling(words, layoutConfig, segmentationOutput);\n\n // 处理布局失败的单词, 设置 visible 为 false\n // const failedWords = words.filter((word) => !word.hasPlaced)\n const failedWords = [];\n const successedWords = [];\n for (let i = 0; i < words.length; i++) {\n if (words[i].hasPlaced) {\n successedWords.push(words[i]);\n } else {\n failedWords.push(words[i]);\n }\n }\n failedWords.forEach(word => (word.visible = false));\n\n // debug 常用代码\n // const { board, boardSize } = layoutConfig\n // paint(board, boardSize)\n // paintLabels(layoutConfig)\n // draw(words, fillingWords, layoutConfig, 1)\n // console.log(`核心词数量:${words.length} 填充词数量:${fillingWords.length}`)\n // console.log('放置失败的单词', failedWords)\n // console.log(layoutConfig, words, fillingWords)\n\n return {\n fillingWords,\n successedWords,\n failedWords\n };\n}\n","import { degreeToRadian, isFunction, isString, maxInArray, toNumber } from '@visactor/vutils';\nimport type {\n CloudWordType,\n FieldOption,\n LayoutConfigType,\n SegmentationInputType,\n SegmentationOutputType,\n TagItemAttribute,\n WordCloudShapeOptions,\n wordsConfigType\n} from './interface';\nimport { removeBorder, scaleAndMiddleShape, segmentation } from './segmentation';\nimport { WORDCLOUD_SHAPE_HOOK_EVENT, calTextLength, colorListEqual, fakeRandom, functor, loadImage } from './util';\nimport { LinearScale, OrdinalScale, SqrtScale } from '@visactor/vscale';\nimport cloud from './cloud-shape-layout';\nimport { type IProgressiveTransformResult, type IView } from '@visactor/vgrammar-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { generateIsEmptyPixel, generateMaskCanvas } from '@visactor/vgrammar-util';\n\nconst OUTPUT = {\n x: 'x',\n y: 'y',\n fontFamily: 'fontFamily',\n fontSize: 'fontSize',\n fontStyle: 'fontStyle',\n fontWeight: 'fontWeight',\n angle: 'angle',\n opacity: 'opacity',\n visible: 'visible',\n isFillingWord: 'isFillingWord',\n color: 'color'\n};\n\nexport class Layout implements IProgressiveTransformResult {\n options: WordCloudShapeOptions;\n\n data: any[];\n view?: IView;\n\n private isImageFinished?: boolean;\n private isLayoutFinished?: boolean;\n private progressiveResult?: any[] = [];\n private segmentationInput?: SegmentationInputType;\n\n constructor(options: WordCloudShapeOptions, view?: IView) {\n this.options = options;\n this.view = view;\n }\n\n layout(data: any[]) {\n this.data = data;\n\n const options = this.options;\n\n /** step1: 根据shapeUrl, 计算segmentation */\n const segmentationInput: SegmentationInputType = {\n shapeUrl: options.shape,\n size: options.size,\n ratio: options.ratio || 0.8,\n tempCanvas: undefined,\n boardSize: [0, 0],\n random: false,\n randomGenerator: undefined\n };\n\n // 全局共用的临时画板,此处需要对小程序的 canvas 进行兼容\n const tempCanvas = vglobal.createCanvas({ width: options.size[0], height: options.size[1] });\n const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true });\n tempCtx.textAlign = 'center';\n tempCtx.textBaseline = 'middle';\n segmentationInput.tempCanvas = tempCanvas;\n\n // board 的宽必须为 32 的倍数\n const boardW = ((options.size[0] + 31) >> 5) << 5;\n segmentationInput.boardSize = [boardW, options.size[1]];\n\n // 用于随机的随机数生成器\n if (segmentationInput.random) {\n segmentationInput.randomGenerator = Math.random;\n } else {\n segmentationInput.randomGenerator = fakeRandom();\n }\n this.segmentationInput = segmentationInput;\n if (isString(segmentationInput.shapeUrl)) {\n segmentationInput.isEmptyPixel = generateIsEmptyPixel();\n const imagePromise = loadImage(segmentationInput.shapeUrl);\n\n if (imagePromise) {\n this.isImageFinished = false;\n this.isLayoutFinished = false;\n imagePromise\n .then(shapeImage => {\n this.isImageFinished = true;\n const maskCanvas = vglobal.createCanvas({ width: options.size[0], height: options.size[1], dpr: 1 });\n segmentationInput.maskCanvas = maskCanvas;\n const ctx = maskCanvas.getContext('2d');\n if (options.removeWhiteBorder) {\n removeBorder(shapeImage, maskCanvas, segmentationInput.isEmptyPixel);\n }\n const shapeConfig = scaleAndMiddleShape(shapeImage, options.size);\n ctx.clearRect(0, 0, options.size[0], options.size[1]);\n ctx.drawImage(shapeImage, shapeConfig.x, shapeConfig.y, shapeConfig.width, shapeConfig.height);\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(segmentationInput.maskCanvas);\n }\n })\n .catch(error => {\n this.isImageFinished = true;\n });\n } else {\n this.isImageFinished = true;\n this.isLayoutFinished = true;\n }\n } else if (\n segmentationInput.shapeUrl &&\n (segmentationInput.shapeUrl.type === 'text' || segmentationInput.shapeUrl.type === 'geometric')\n ) {\n segmentationInput.isEmptyPixel = generateIsEmptyPixel(segmentationInput.shapeUrl.backgroundColor);\n const maskCanvas = generateMaskCanvas(segmentationInput.shapeUrl, options.size[0], options.size[1]);\n segmentationInput.maskCanvas = maskCanvas;\n\n if (this.options.onUpdateMaskCanvas) {\n this.options.onUpdateMaskCanvas(maskCanvas);\n }\n this.doLayout();\n this.isImageFinished = true;\n this.isLayoutFinished = true;\n }\n }\n canAnimate() {\n return true;\n }\n\n unfinished(): boolean {\n return !this.isLayoutFinished;\n }\n\n output(): any[] {\n return this.progressiveResult;\n }\n\n progressiveRun() {\n if (!this.isImageFinished || this.isLayoutFinished) {\n return;\n }\n\n if (this.segmentationInput.maskCanvas) {\n this.doLayout();\n }\n\n this.isLayoutFinished = true;\n }\n\n progressiveOutput(): any[] {\n return this.progressiveResult;\n }\n\n doLayout() {\n const segmentationInput = this.segmentationInput;\n // 对用户输入的图形进行预处理\n const segmentationOutput: SegmentationOutputType = segmentation(segmentationInput);\n\n if (!segmentationOutput.segmentation.regions.length) {\n return;\n }\n\n const options = this.options;\n const data = this.data;\n\n /** step2: 收集 wordsConfig, 并计算fontSizeScale */\n const colorMode = options.colorMode || 'ordinal';\n const wordsConfig: wordsConfigType = {\n getText: field(options.text),\n getFontSize: field(options.fontSize),\n fontSizeRange: options.fontSizeRange,\n\n // color 相关\n colorMode: colorMode,\n getColor: options.colorField ? field(options.colorField) : field(options.text),\n getFillingColor: field(options.fillingColorField),\n // 根据不同的 colorMode 赋值不同的默认值\n colorList:\n options.colorList ||\n (colorMode === 'ordinal' ? ['#2E62F1'] : ['#537EF5', '#2E62F1', '#2358D8', '#184FBF', '#0C45A6', '#013B8E']),\n getColorHex: field(options.colorHexField),\n\n // 字体相关\n getFontFamily: field(options.fontFamily || 'sans-serif'),\n rotateList: options.rotateList || [0],\n getPadding: field(options.padding || 1),\n getFontStyle: field(options.fontStyle || 'normal'),\n getFontWeight: field(options.fontWeight || 'normal'),\n // fontField: options.fontFamily,\n // fontWeightField: options.fontWeight,\n // fontStyleField: options.fontStyle,\n getFontOpacity: options.fontOpacity ? field(options.fontOpacity) : () => 1\n };\n\n initFontSizeScale(data, wordsConfig, segmentationOutput);\n\n /** step3: 收集 layoutConfig, 初始化colorScale */\n const layoutConfig: LayoutConfigType = {\n // font style 相关\n size: options.size,\n ratio: options.ratio || 0.8,\n\n // layout 相关\n shapeUrl: options.shape,\n random: typeof options.random === 'undefined' ? true : options.random,\n textLayoutTimes: options.textLayoutTimes ?? 3,\n removeWhiteBorder: options.removeWhiteBorder,\n layoutMode: options.layoutMode ?? 'default',\n fontSizeShrinkFactor: options.fontSizeShrinkFactor ?? 0.8,\n stepFactor: options.stepFactor ?? 1,\n importantWordCount: options.importantWordCount ?? 10,\n globalShinkLimit: options.globalShinkLimit || 0.2,\n // textLengthLimit: 10,\n fontSizeEnlargeFactor: options.fontSizeEnlargeFactor ?? 1.5,\n\n // fill 相关\n fillingRatio: options.fillingRatio ?? 0.7,\n fillingTimes: options.fillingTimes ?? 4,\n // fillingXRatioStep: options.fillingXRatioStep || 0,\n // fillingYRatioStep: options.fillingYRatioStep || 0,\n // fillingRatioStep: 步长占长宽的比例,优先级高于fillingStep\n fillingXStep: options.fillingXRatioStep\n ? Math.max(Math.floor(options.size[0] * options.fillingXRatioStep), 1)\n : options.fillingXStep ?? 4,\n fillingYStep: options.fillingYRatioStep\n ? Math.max(Math.floor(options.size[1] * options.fillingYRatioStep), 1)\n : options.fillingYStep ?? 4,\n fillingInitialFontSize: options.fillingInitialFontSize,\n fillingDeltaFontSize: options.fillingDeltaFontSize,\n fillingInitialOpacity: options.fillingInitialOpacity ?? 0.8,\n fillingDeltaOpacity: options.fillingDeltaOpacity ?? 0.05,\n\n // fill font style 相关\n getFillingFontFamily: field(options.fillingFontFamily || 'sans-serif'),\n getFillingFontStyle: field(options.fillingFontStyle || 'normal'),\n getFillingFontWeight: field(options.fillingFontWeight || 'normal'),\n getFillingPadding: field(options.fillingPadding ?? 0.4),\n fillingRotateList: options.fillingRotateList ?? [0, 90],\n fillingDeltaFontSizeFactor: options.fillingDeltaFontSizeFactor ?? 0.2,\n\n // fill color 相关\n fillingColorList: options.fillingColorList || ['#537EF5'],\n\n // 经过计算,补充的内容\n sameColorList: false,\n\n minInitFontSize: options.minInitFontSize ?? 10,\n minFontSize: options.minFontSize ?? 4,\n minFillFontSize: options.minFillFontSize ?? 2\n };\n // 核心词与填充词colorList和colorField不一致时,会给填充词设置独立scale\n const sameColorList = colorListEqual(wordsConfig.colorList, layoutConfig.fillingColorList);\n layoutConfig.sameColorList = sameColorList;\n initColorScale(data, wordsConfig, layoutConfig, options);\n\n /** step4: 初始化填充次fontSize */\n initFillingWordsFontSize(data, wordsConfig, layoutConfig, segmentationOutput);\n\n // 过滤掉上游 source 中的填充词,上游数据相关,待去除 @chensiji\n // data = data.filter((d) => !d.isFillingWord || d.isFillingWord !== true)\n\n /** step5: 初始化words信息,并执行layout算法 */\n // 初始化单词信息, 用个代码块避免变量污染外面的变量环境\n const {\n getText,\n getFontFamily,\n getFontStyle,\n getFontWeight,\n getPadding,\n getColor,\n getFillingColor,\n getColorHex,\n fontSizeScale,\n colorScale,\n fillingColorScale,\n getFontOpacity,\n rotateList\n } = wordsConfig;\n\n const words: CloudWordType[] = data.map(datum => {\n return {\n x: 0,\n y: 0,\n weight: 0,\n text: getText(datum),\n // text: addEllipsis(text(word), config.textLengthLimit),\n fontFamily: getFontFamily(datum),\n fontWeight: getFontWeight(datum),\n fontStyle: getFontStyle(datum),\n rotate: rotateList[~~(segmentationInput.randomGenerator() * rotateList.length)],\n fontSize: Math.max(layoutConfig.minInitFontSize, ~~fontSizeScale(datum)),\n opacity: getFontOpacity(datum),\n padding: getPadding(datum),\n color: (getColorHex && getColorHex(datum)) || (colorScale && colorScale(getColor(datum))) || 'black',\n fillingColor:\n getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)\n ? (getColorHex && getColorHex(datum)) ||\n (fillingColorScale && fillingColorScale(getFillingColor(datum))) ||\n 'black'\n : undefined,\n datum: datum,\n visible: true,\n hasPlaced: false\n // 上游数据相关,待去除 @chensiji\n // isInAdd: add.indexOf(word) !== -1,\n };\n });\n\n // 计算所有单词的权重 weight,用于后续的布局\n const wordsMaxFontSize = maxInArray(words.map(word => word.fontSize));\n words.forEach(word => (word.weight = word.fontSize / wordsMaxFontSize));\n words.sort((a, b) => b.weight - a.weight);\n\n // 进行布局\n const { fillingWords, successedWords, failedWords } = cloud(words, layoutConfig, segmentationOutput);\n const textKey = (options.text as FieldOption)?.field ?? 'textKey'; // 记录用户是用什么 key 存储 text 信息\n const dataIndexKey = options.dataIndexKey ?? 'defaultDataIndexKey';\n\n /** step5: 将单词信息转换为输出 */\n const as = options.as ? { ...OUTPUT, ...options.as } : OUTPUT;\n let w;\n let t;\n const modKeywords = [];\n for (let i = 0; i < words.length; ++i) {\n w = words[i];\n t = w.datum;\n t[as.x] = w.x;\n t[as.y] = w.y;\n t[as.fontFamily] = w.fontFamily;\n t[as.fontSize] = w.fontSize;\n t[as.fontStyle] = w.fontStyle;\n t[as.fontWeight] = w.fontWeight;\n t[as.angle] = degreeToRadian(w.rotate);\n t[as.opacity] = w.opacity;\n t[as.visible] = w.visible;\n t[as.isFillingWord] = false;\n t[as.color] = w.color;\n t[dataIndexKey] = `${w.text}_${i}_keyword`;\n\n modKeywords.push(t);\n }\n\n const fillingWordsData: any[] = [];\n fillingWords.forEach((word, index) => {\n const t = { ...word.datum };\n t[as.x] = word.x;\n t[as.y] = word.y;\n t[as.fontFamily] = word.fontFamily;\n t[as.fontSize] = word.fontSize;\n t[as.fontStyle] = word.fontStyle;\n t[as.fontWeight] = word.fontWeight;\n t[as.angle] = degreeToRadian(word.rotate);\n t[as.opacity] = word.opacity;\n t[as.visible] = word.visible;\n t[as.isFillingWord] = true;\n t[as.color] = !getFillingColor\n ? layoutConfig.fillingColorList[~~(segmentationInput.randomGenerator() * layoutConfig.fillingColorList.length)]\n : options.colorField?.field !== options.fillingColorField?.field || !sameColorList\n ? word.fillingColor\n : word.color;\n t[textKey] = word.text;\n\n // 保证绘制时,mark的唯一性\n t[dataIndexKey] = `${word.text}_${index}_fillingWords`;\n\n // updateid(t)\n fillingWordsData.push(t);\n });\n\n // 抛出事件\n if (this.view && this.view.emit) {\n this.view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_LAYOUT, { successedWords, failedWords });\n const stage = this.view.renderer?.stage();\n\n if (stage) {\n stage.hooks.afterRender.tap(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW, () => {\n this.view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW, { successedWords, failedWords });\n stage.hooks.afterRender.unTap(WORDCLOUD_SHAPE_HOOK_EVENT.AFTER_WORDCLOUD_SHAPE_DRAW);\n });\n }\n }\n\n // 最后将核心词和填充词合并返回\n this.progressiveResult = modKeywords.concat(fillingWordsData);\n }\n\n release() {\n this.segmentationInput = null;\n this.data = null;\n this.progressiveResult = null;\n this.options = null;\n }\n}\n\n/**\n * 根据用户输入的参数初始化 colorScale\n */\nconst initColorScale = (data: any[], wordsConfig: wordsConfigType, layoutConfig: LayoutConfigType, options: any) => {\n const { colorMode, getColor, getFillingColor } = wordsConfig;\n const { sameColorList } = layoutConfig;\n let colorScale;\n let colorList = wordsConfig.colorList;\n let fillingColorScale;\n let fillingColorList = layoutConfig.fillingColorList;\n if (colorMode === 'ordinal') {\n // 序数着色模式下\n const uniqueColorField = data.map(word => getColor(word));\n colorScale = (datum: any) => {\n return new OrdinalScale().domain(uniqueColorField).range(colorList).scale(datum);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n const uniquefillingColorField = data.map(datum => getFillingColor(datum));\n fillingColorScale = (datum: any) => {\n return new OrdinalScale().domain(uniquefillingColorField).range(fillingColorList).scale(datum);\n };\n }\n } else {\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (colorList.length === 1) {\n colorList = [colorList[0], colorList[0]];\n }\n // 线性着色模式下\n const valueScale = new LinearScale().domain(extent(getColor, data)).range(colorList);\n\n colorScale = (i: any) => {\n return valueScale.scale(i);\n };\n\n if (getFillingColor && (options.colorField?.field !== options.fillingColorField?.field || !sameColorList)) {\n // 线性着色模式下\n // 如果用户只输入了一个 color,无法构成 colorRange,则进行兜底\n if (fillingColorList.length === 1) {\n fillingColorList = [fillingColorList[0], fillingColorList[0]];\n }\n const fillingValueScale = new LinearScale().domain(extent(getFillingColor, data)).range(fillingColorList);\n\n fillingColorScale = (i: any) => {\n return fillingValueScale.scale(i);\n };\n }\n }\n Object.assign(wordsConfig, { colorScale, fillingColorScale });\n};\n\n/**\n * 根据用户输入参数初始化 fontSizeScale\n */\nconst initFontSizeScale = (data: any[], wordsConfig: wordsConfigType, segmentationOutput: SegmentationOutputType) => {\n let { fontSizeRange: range } = wordsConfig;\n const { getFontSize, getText } = wordsConfig;\n // const { shapeArea, ratio } = segmentationOutput\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n // const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n // 生成 fontSize 的 scale\n let fontSizeScale;\n if (!getFontSize) {\n // 如果用户没有提供 fontSize 映射的 field, 自动计算 一个固定的 fontSize\n /**\n * 单词 字长*(fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const words = data.map(word => ({\n text: getText(word)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // return textLength < shapeSizeLimitTextLength ? acc + textLength : acc\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, false);\n\n // fontSize = x\n // 有了 fontSize 后求解 fontSizeScale\n fontSizeScale = functor(x);\n // console.log('自动计算的 fontSize', fontSize)\n } else if (getFontSize && range) {\n // fontSize 和 range 都提供了\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum));\n };\n } else if (getFontSize && isFunction(getFontSize) && !range) {\n // 提供了 fontSize 的取值的 key,没提供 range,自动计算 range\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n const a = 0.5;\n const [min, max] = extent(getFontSize, data);\n const words = data.map(datum => ({\n text: getText(datum),\n value: getFontSize(datum),\n // weight: (fontSize(word) - min) / (max - min),\n weight: max === min ? 1 : (getFontSize(datum) - min) / (max - min)\n }));\n // const wordArea =\n // b *\n // words.reduce((acc, word) => {\n // const textLength = calTextLength(word.text)\n // if (textLength > shapeSizeLimitTextLength) return acc;\n // return acc + textLength * (a + (1 - a) * word.weight) ** 2\n // }, 0)\n // const x0 = Math.sqrt(ratio * (shapeArea / wordArea))\n\n const x = getInitialFontSize(words, segmentationOutput, true);\n\n range = [~~(a * x), ~~x];\n // 有了 range 后求解 fontSizeScale\n const sizeScale = new SqrtScale().domain(extent(getFontSize, data)).range(range);\n fontSizeScale = (datum: any) => {\n return sizeScale.scale(getFontSize(datum)); // 最小核心词初始字号10px\n };\n // console.log('自动计算的 range', range)\n }\n\n // 将相关配置更新到 wordsConfig 上\n Object.assign(wordsConfig, { getFontSize, fontSizeRange: range, fontSizeScale });\n};\n\nconst getInitialFontSize = (words: any[], segmentationOutput: SegmentationOutputType, weight: boolean) => {\n /**\n * 定义 fontSizeRange 为 [ax, x]\n * 期望单词占图形面积的比例为 ratio\n * 单词 字长*(权重映射后的fontSize)**2 与真实的单词面积的大概比例为 b\n * 目的为 求 x,从而得到最适合的 fontSizeRange\n * 更详细的算法解析看文档\n */\n\n const a = 0.5;\n const b = 1.7;\n const shapeArea = segmentationOutput.shapeArea;\n const ratio = segmentationOutput.ratio;\n const regions = segmentationOutput.segmentation.regions;\n\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 12 > sqrt(shapeArea)\n * (字号为12px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(shapeArea) / 12);\n\n const wordArea =\n // b *\n words.reduce((acc, word) => {\n // 旧版 VGrammar 逻辑\n // const textLength = calTextLength(word.text, segmentationOutput.textLengthLimit)\n const textLength = calTextLength(word.text);\n return textLength < shapeSizeLimitTextLength\n ? acc + textLength * (weight ? (a + (1 - a) * word.weight) ** 2 : 1)\n : acc;\n }, 0);\n if (wordArea === 0) {\n // 只有一个超长词,以12px字号开始初始布局\n return 12;\n }\n\n let x = 20;\n if (regions.length === 1) {\n // 单一区域\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n } else {\n const xArr = [];\n for (let i = 0; i < regions.length; i++) {\n const regionArea = regions[i].area;\n const regionAspect = regions[i].ratio;\n const regionRatio = regionArea / shapeArea;\n if (regionRatio < 0.1) {\n continue;\n }\n // 考虑区域长宽比对文字面积的影响(2.7 - regionAspect),经验参数\n const regionWordArea = regionRatio * (wordArea * (regionAspect < 1 ? 2.7 - regionAspect : b));\n const x = Math.sqrt(ratio * (regionArea / regionWordArea));\n\n xArr.push(x);\n }\n\n if (xArr.length) {\n x = Math.min(...xArr);\n } else {\n // 特殊情况当做单一区域处理\n x = Math.sqrt(ratio * (shapeArea / (wordArea * b)));\n }\n }\n return x;\n};\n\n/**\n * 自动计算 fillingWords 相关的 fontSize\n */\nfunction initFillingWordsFontSize(\n data: any[],\n wordsConfig: wordsConfigType,\n layoutConfig: LayoutConfigType,\n segmentationOutput: SegmentationOutputType\n) {\n const { getText } = wordsConfig;\n let { fillingInitialFontSize, fillingDeltaFontSize } = layoutConfig;\n const { fillingRatio } = layoutConfig;\n /*\n * 为避免考虑超长词将字号范围计算的非常小,并且超长词同时无法正确布局的情况\n * 需要在计算字号范围时排除超长词,超长词确定标准:\n * textLength * 4 > sqrt(shapeArea)\n * (字号为4px时,该词长度大于预期长宽的两倍,经验参数)\n * 超长词不参与字号的自适应计算,但是任然会参与布局\n * 如果用户遇到边界情况需要布局超长词,需要手动指定fontSizeRange\n */\n const shapeSizeLimitTextLength = Math.ceil(Math.sqrt(segmentationOutput.shapeArea) / 4);\n\n // 两个值中有一个每天写则自动计算\n if (!fillingInitialFontSize || !fillingDeltaFontSize) {\n /**\n * 自动计算的依据是 填充面积应该与 单词平均长度 * fontSize**2 成一个固定比例 a\n */\n\n const a = fillingRatio / 100;\n\n const averageLength =\n data.reduce((acc, word) => {\n const length = calTextLength(getText(word));\n if (length > shapeSizeLimitTextLength) {\n return acc;\n }\n return acc + length;\n }, 0) / data.length;\n let fontSize;\n if (averageLength === 0) {\n // 只有一个超长词,以8px字号开始初始布局\n fontSize = 8;\n } else {\n const area = segmentationOutput.shapeArea * 0.2;\n fontSize = Math.sqrt(a * (area / averageLength));\n }\n\n fillingInitialFontSize = ~~fontSize;\n fillingDeltaFontSize = fontSize * layoutConfig.fillingDeltaFontSizeFactor;\n\n Object.assign(layoutConfig, {\n fillingInitialFontSize,\n fillingDeltaFontSize\n });\n // console.log('自动计算的 filling', [\n // fillingInitialFontSize,\n // fillingDeltaFontSize,\n // ])\n }\n}\n\nconst extent = (field: any, data: any[]) => {\n let min = +Infinity;\n let max = -Infinity;\n const n = data.length;\n let v: any;\n\n for (let i = 0; i < n; ++i) {\n // 字符串类型转换\n v = toNumber(field(data[i]));\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n\n // 如果单条数据,匹配最大字号\n if (data.length === 1 && min === max) {\n min -= 10000;\n }\n\n return [min, max];\n};\n\n/**\n * 取数逻辑\n */\nconst field = (option: FieldOption | TagItemAttribute) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n","import { Logger, isNil } from '@visactor/vutils';\nimport { error } from '@visactor/vgrammar-util';\nimport type { WordCloudShapeOptions } from './interface';\nimport { WORDCLOUD_SHAPE_HOOK_EVENT } from './util';\nimport type { IProgressiveTransformResult, IView } from '@visactor/vgrammar-core';\nimport { Layout } from './layout';\n\nexport const transform = (\n options: WordCloudShapeOptions,\n upstreamData: any[],\n parameters?: any,\n view?: IView\n): any[] | IProgressiveTransformResult => {\n /** options 配置错误提示 */\n if (\n !options.size ||\n isNil(options.size[0]) ||\n isNil(options.size[1]) ||\n options.size[0] <= 0 ||\n options.size[1] <= 0\n ) {\n const logger = Logger.getInstance();\n logger.info('Wordcloud size dimensions must be greater than 0');\n // size非法不报错,不进行布局,ChartSpace层会有用户初始化size为0的情况\n return [];\n }\n /** size 处理, 如果是小数, segmentation 计算会有问题导致place陷入死循环 */\n options.size = [Math.ceil(options.size[0]), Math.ceil(options.size[1])];\n\n if (!options.shape) {\n error('WordcloudShape shape must be specified.');\n }\n if (!options.text) {\n error('WordcloudShape text must be specified.');\n }\n\n view?.emit && view.emit(WORDCLOUD_SHAPE_HOOK_EVENT.BEFORE_WORDCLOUD_SHAPE_LAYOUT);\n\n // 第一次数据流到这里data为空,如果不做判断,走到布局算法会报错\n if (!upstreamData || upstreamData.length === 0) {\n return [];\n }\n\n const layout = new Layout(options, view);\n\n layout.layout(upstreamData);\n\n if (layout.unfinished()) {\n return {\n progressive: layout\n } as unknown as IProgressiveTransformResult;\n }\n return layout.output();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloudSeriesSpec } from './interface';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloudAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\nimport { registerTextMark } from '../../mark/text';\n\nexport class WordCloudSeries extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud;\n type = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloudAnimation();\n Factory.registerSeries(WordCloudSeries.type, WordCloudSeries);\n};\n\nexport const registerWordCloudShapeSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloudSeries();\n};\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IWordCloudChartSpec } from './interface';\nimport { BaseWordCloudChart } from './base/base';\nimport { registerWordCloudSeries, registerWordCloudShapeSeries } from '../../series/word-cloud/word-cloud';\nimport { Factory } from '../../core/factory';\nimport { BaseWordCloudChartSpecTransformer } from './base/word-cloud-base-transformer';\n\nexport class WordCloudChart extends BaseWordCloudChart {\n static readonly type: string = ChartTypeEnum.wordCloud;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud;\n static readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly transformerConstructor = BaseWordCloudChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud;\n readonly seriesType: string = SeriesTypeEnum.wordCloud;\n}\n\nexport const registerWordCloudChart = () => {\n registerWordCloudSeries();\n Factory.registerChart(WordCloudChart.type, WordCloudChart);\n};\n\n// Splitting the register logic into two parts is to tree-shake the unused transforms as much as possible.\n// Especially in the cross-terminal environment, word-cloud shape is not compatible.\nexport const registerWordCloudShapeChart = () => {\n registerWordCloudShapeSeries();\n registerWordCloudChart();\n};\n","import { AttributeLevel } from '../../constant/attribute';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IWordCloud3dSeriesSpec } from './interface';\nimport type { Datum } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { BaseWordCloudSeries } from './base';\nimport { Factory } from '../../core/factory';\nimport { registerWordCloud3dAnimation } from './animation';\nimport { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud';\nimport { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape';\nimport type { ITextMark } from '../../mark/interface';\n\nexport class WordCloud3dSeries<\n T extends IWordCloud3dSeriesSpec = IWordCloud3dSeriesSpec\n> extends BaseWordCloudSeries {\n static readonly type: string = SeriesTypeEnum.wordCloud3d;\n type = SeriesTypeEnum.wordCloud3d;\n\n protected _wordCloudTransformOption() {\n return {\n ...super._wordCloudTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n protected _wordCloudShapeTransformOption() {\n return {\n ...super._wordCloudShapeTransformOption(),\n postProjection: this._spec.postProjection ?? 'StereographicProjection',\n depth_3d: this._spec.depth_3d\n };\n }\n\n initMark(): void {\n this._wordMark = this._createMark(\n BaseWordCloudSeries.mark.word,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n support3d: true\n }\n ) as ITextMark;\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const wordMark = this._wordMark;\n if (wordMark) {\n this.setMarkStyle(\n wordMark,\n {\n z: (datum: Datum) => datum.z ?? 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const padding = this._padding ?? {};\n if (this._wordMark) {\n this._wordMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('wordCloud3d')?.(() => {\n const srView = this.getCompiler().getVGrammarView();\n const width = srView.width() - padding.left || 0 - padding.right || 0;\n const height = srView.height() - padding.top || 0 - padding.bottom || 0;\n const r = Math.max(width, height) / 2;\n return {\n center: { x: r, y: r, z: this._spec.depth_3d ?? r },\n r\n };\n }),\n userAnimationConfig(SeriesMarkNameEnum.word, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n}\n\nexport const registerWordCloud3dSeries = () => {\n registerWordCloudTransforms();\n registerTextMark();\n registerWordCloud3dAnimation();\n Factory.registerSeries(WordCloud3dSeries.type, WordCloud3dSeries);\n};\n\nexport const registerWordCloudShape3dSeries = () => {\n registerWordCloudShapeTransforms();\n registerWordCloud3dSeries();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { BaseWordCloudChartSpecTransformer } from '../base/word-cloud-base-transformer';\nimport type { IWordCloud3dChartSpec } from '../interface';\n\nexport class WordCloud3dChartSpecTransformer<\n T extends IWordCloud3dChartSpec = IWordCloud3dChartSpec\n> extends BaseWordCloudChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: IWordCloud3dChartSpec): any {\n const series: any = super._getDefaultSeriesSpec(spec as any);\n series.depth_3d = spec.depth_3d;\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport type { IWordCloud3dChartSpec } from '../interface';\nimport { BaseWordCloudChart } from '../base/base';\nimport { registerWordCloud3dSeries, registerWordCloudShape3dSeries } from '../../../series/word-cloud/word-cloud-3d';\nimport { Factory } from '../../../core/factory';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { WordCloud3dChartSpecTransformer } from './word-cloud-3d-transformer';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class WordCloud3dChart extends BaseWordCloudChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.wordCloud3d;\n static readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n static readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WordCloud3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.wordCloud3d;\n readonly seriesType: string = SeriesTypeEnum.wordCloud3d;\n}\n\nexport const registerWordCloud3dChart = () => {\n register3DPlugin();\n registerWordCloud3dSeries();\n Factory.registerChart(WordCloud3dChart.type, WordCloud3dChart);\n};\n\nexport const registerWordCloudShape3dChart = () => {\n register3DPlugin();\n registerWordCloudShape3dSeries();\n registerWordCloud3dChart();\n};\n","import type { DataView } from '@visactor/vdataset';\nimport { isValidNumber } from '@visactor/vutils';\n\nexport interface IFunnelOpt {\n valueField: string;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: boolean;\n /** 高度是否进行数据映射 **/\n heightVisual?: boolean;\n\n /** 数值范围 */\n range?: { min: number; max: number };\n}\n\nexport const funnel = (originData: Array, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n valueField,\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue,\n heightVisual = false,\n isCone = true,\n range\n } = op;\n\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -Infinity), -Infinity);\n const min = data.reduce((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || Infinity), Infinity);\n const rangeArr = [range?.min ?? min, range?.max ?? max];\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : nextValue / rangeArr[1]);\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : lastValue / rangeArr[1]);\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array, op: IFunnelTransformOpt) => {\n const data = originData[0]?.latestData?.map((datum: any) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach((d: any) => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n","import { PREFIX } from './base';\n\nexport const FUNNEL_TRANSFORM_RATIO = `${PREFIX}_FUNNEL_TRANSFORM_RATIO`;\nexport const FUNNEL_REACH_RATIO = `${PREFIX}_FUNNEL_REACH_RATIO`;\nexport const FUNNEL_HEIGHT_RATIO = `${PREFIX}_FUNNEL_HEIGHT_RATIO`;\nexport const FUNNEL_VALUE_RATIO = `${PREFIX}_FUNNEL_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE_RATIO = `${PREFIX}_FUNNEL_LAST_VALUE_RATIO`;\nexport const FUNNEL_NEXT_VALUE_RATIO = `${PREFIX}_FUNNEL_NEXT_VALUE_RATIO`;\nexport const FUNNEL_LAST_VALUE = `${PREFIX}_FUNNEL_LAST_VALUE`;\nexport const FUNNEL_CURRENT_VALUE = `${PREFIX}_FUNNEL_CURRENT_VALUE`;\nexport const FUNNEL_NEXT_VALUE = `${PREFIX}_FUNNEL_NEXT_VALUE`;\n\nexport const FUNNEL_TRANSFORM_LEVEL = `${PREFIX}_FUNNEL_TRANSFORM_LEVEL`;\n\nexport const FUNNEL_LABEL_LINE_LENGTH = 20;\nexport const FUNNEL_LABEL_SPACE_WIDTH = 5;\nexport const FUNNEL_MAX_SIZE = '80%';\nexport const FUNNEL_MIN_SIZE = 0;\n","import type { IFunnelSeries, ISeriesTooltipHelper } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { FUNNEL_REACH_RATIO } from '../../constant/funnel';\nimport { isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../component/tooltip/interface';\nimport type { Datum } from '@visactor/vgrammar-core';\n\nexport class FunnelSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n const series = this.series as IFunnelSeries;\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n return this._getDimensionData(datum) ?? datum.properties?.[`${series.getCategoryField()}`];\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n const measureData = datum?.[FUNNEL_REACH_RATIO];\n return `${(measureData * 100).toFixed(1)}%`;\n }\n return this._getMeasureData(datum);\n };\n\n markTooltipKeyCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n if (params?.mark?.name === SeriesMarkNameEnum.transform) {\n // TODO: i18n\n return `转化率`;\n }\n const { dimensionFields, seriesFields } = this._seriesCacheInfo;\n const subDimensionField = dimensionFields[dimensionFields.length - 1];\n\n if (isValid(seriesFields[0])) {\n return datum?.[seriesFields[0]];\n }\n return datum?.[subDimensionField];\n };\n}\n","import type { ICommonSpec } from '../../typings/visual';\nimport { BaseMark } from '../base/base-mark';\nimport type { IMarkStyle } from '../interface';\n\nexport class BasePolygonMark extends BaseMark {\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n points: []\n };\n return defaultStyle;\n }\n}\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPolygonMarkSpec } from '../../typings/visual';\nimport { BasePolygonMark } from './base-polygon';\nimport type { IMarkStyle, IPolygonMark } from '../interface';\nimport { MarkTypeEnum } from '../interface/type';\nimport { registerPolygonGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\n\nexport class PolygonMark extends BasePolygonMark implements IPolygonMark {\n static readonly type = MarkTypeEnum.polygon;\n readonly type = PolygonMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerPolygonMark = () => {\n Factory.registerMark(PolygonMark.type, PolygonMark);\n registerPolygonGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { baseSeriesMark } from '../base/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const funnelSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel]: { name: SeriesMarkNameEnum.funnel, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transform]: { name: SeriesMarkNameEnum.transform, type: MarkTypeEnum.polygon },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n\nexport const funnel3dSeriesMark: SeriesMarkMap = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.funnel3d]: { name: SeriesMarkNameEnum.funnel3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transform3d]: { name: SeriesMarkNameEnum.transform3d, type: MarkTypeEnum.pyramid3d },\n [SeriesMarkNameEnum.transformLabel]: { name: SeriesMarkNameEnum.transformLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabel]: { name: SeriesMarkNameEnum.outerLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.outerLabelLine]: { name: SeriesMarkNameEnum.outerLabelLine, type: MarkTypeEnum.rule }\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IFunnelSeriesSpec, IFunnelSeriesTheme } from './interface';\n\nexport class FunnelSeriesSpecTransformer<\n T extends IFunnelSeriesSpec = IFunnelSeriesSpec,\n K extends IFunnelSeriesTheme = IFunnelSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport type { IFunnelSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { IOrientType, IPoint, TextAlign, TextBaseLine, Datum, StringOrNumber } from '../../typings';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { BaseSeries } from '../base/base-series';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport type { ILabelMark, IMark, IPolygonMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IFunnelOpt } from '../../data/transforms/funnel';\nimport { funnel, funnelTransform } from '../../data/transforms/funnel';\nimport {\n FUNNEL_CURRENT_VALUE,\n FUNNEL_HEIGHT_RATIO,\n FUNNEL_LABEL_LINE_LENGTH,\n FUNNEL_LABEL_SPACE_WIDTH,\n FUNNEL_LAST_VALUE,\n FUNNEL_LAST_VALUE_RATIO,\n FUNNEL_MAX_SIZE,\n FUNNEL_MIN_SIZE,\n FUNNEL_NEXT_VALUE,\n FUNNEL_NEXT_VALUE_RATIO,\n FUNNEL_REACH_RATIO,\n FUNNEL_TRANSFORM_LEVEL,\n FUNNEL_TRANSFORM_RATIO,\n FUNNEL_VALUE_RATIO\n} from '../../constant/funnel';\nimport { calcLayoutNumber } from '../../util/space';\nimport { field } from '../../util/object';\nimport type { FunnelAppearPreset, IFunnelSeriesSpec } from './interface';\nimport { FunnelSeriesTooltipHelper } from './tooltip-helper';\nimport { isFunction, isValid, isNumber } from '@visactor/vutils';\nimport {\n FadeInOutAnimation,\n registerCartesianGroupClipAnimation,\n registerFadeInOutAnimation\n} from '../../animation/config';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPolygonMark } from '../../mark/polygon/polygon';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { funnelSeriesMark } from './constant';\nimport type { LabelItem } from '@visactor/vrender-components';\nimport { Factory } from '../../core/factory';\nimport { FunnelSeriesSpecTransformer } from './funnel-transformer';\n\nexport class FunnelSeries\n extends BaseSeries\n implements IFunnelSeries\n{\n static readonly type: string = SeriesTypeEnum.funnel;\n type = SeriesTypeEnum.funnel;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n\n static readonly mark: SeriesMarkMap = funnelSeriesMark;\n static readonly transformerConstructor = FunnelSeriesSpecTransformer as any;\n readonly transformerConstructor = FunnelSeriesSpecTransformer;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _viewDataTransform!: SeriesData;\n\n protected _funnelAlign: 'left' | 'center' | 'right' | 'top' | 'bottom';\n protected _funnelOrient: IOrientType;\n protected _shape: 'rect' | 'trapezoid';\n\n protected _funnelMark: IPolygonMark | null = null;\n protected _funnelTransformMark: IPolygonMark | null = null;\n protected _labelMark: ILabelMark | null = null;\n protected _transformLabelMark: ILabelMark | null = null;\n protected _funnelOuterLabelMark: { label?: ITextMark; line?: IRuleMark } = {};\n\n protected _minLabelLineWidth: number;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this._funnelOrient = this._spec.funnelOrient ?? 'top';\n this._shape = this._spec.shape ?? 'trapezoid';\n this._minLabelLineWidth = this._spec.outerLabel?.line?.minLength ?? FUNNEL_LABEL_LINE_LENGTH;\n\n if (this._isHorizontal()) {\n this._funnelAlign = ['top', 'bottom'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n } else {\n this._funnelAlign = ['left', 'right'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n }\n\n if (!this._seriesField && this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n }\n\n initData() {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'funnel', funnel);\n registerDataSetInstanceTransform(this._dataSet, 'funnelTransform', funnelTransform);\n\n const viewDataTransform = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataTransform` });\n viewDataTransform.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataTransform = new SeriesData(this._option, viewDataTransform);\n }\n\n compileData() {\n super.compileData();\n this._viewDataTransform?.compile();\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'funnel',\n options: {\n valueField: this.getValueField(),\n isCone: this._spec.isCone,\n // heightVisual: true,\n asCurrentValue: FUNNEL_CURRENT_VALUE,\n asTransformRatio: FUNNEL_TRANSFORM_RATIO,\n asReachRatio: FUNNEL_REACH_RATIO,\n asHeightRatio: FUNNEL_HEIGHT_RATIO,\n asValueRatio: FUNNEL_VALUE_RATIO,\n asNextValueRatio: FUNNEL_NEXT_VALUE_RATIO,\n asLastValueRatio: FUNNEL_LAST_VALUE_RATIO,\n asLastValue: FUNNEL_LAST_VALUE,\n asNextValue: FUNNEL_NEXT_VALUE,\n range: {\n min: this._spec.range?.min ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.min,\n max: this._spec.range?.max ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.max\n }\n } as IFunnelOpt\n });\n\n this._viewDataTransform.getDataView()?.transform({\n type: 'funnelTransform',\n options: { asIsTransformLevel: FUNNEL_TRANSFORM_LEVEL }\n });\n }\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...FunnelSeries.mark.funnel,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel,\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.funnel?.stateSort,\n noSeparateStyle: true\n },\n {\n setCustomizedShape: this._spec.funnel?.customShape,\n morph: shouldMarkDoMorph(this._spec, this._funnelMarkName),\n morphElementKey: this._seriesField\n }\n ) as IPolygonMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...FunnelSeries.mark.transform,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId(),\n stateSort: this._spec.transform?.stateSort,\n noSeparateStyle: true\n },\n {\n setCustomizedShape: this._spec.transform?.customShape\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(FunnelSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n markSpec: this._spec.outerLabel,\n skipBeforeLayouted: true,\n noSeparateStyle: true\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(FunnelSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label],\n noSeparateStyle: true\n }) as IRuleMark;\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new FunnelSeriesTooltipHelper(this);\n this._funnelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelMark);\n this._funnelTransformMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelTransformMark);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n initMarkStyle() {\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n points: (datum: Datum) => this.getPoints(datum),\n visible: (datum: Datum) => isValid(datum[this._valueField]),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const funnelTransformMark = this._funnelTransformMark;\n if (funnelTransformMark) {\n this.setMarkStyle(\n funnelTransformMark,\n { points: (datum: Datum) => this.getPoints(datum) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const outerLabelMark = this._funnelOuterLabelMark.label;\n if (outerLabelMark) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]}`,\n x: (datum: Datum) => this._computeOuterLabelPosition(datum).x,\n y: (datum: Datum) => this._computeOuterLabelPosition(datum).y,\n textAlign: (datum: Datum) => this._computeOuterLabelPosition(datum).align,\n textBaseline: (datum: Datum) => this._computeOuterLabelPosition(datum).textBaseline,\n maxLineWidth: (datum: Datum) => this._computeOuterLabelLimit(datum),\n /** 不设置 width/height 会导致 richtext 有默认宽高, case: richtext-bounds */\n /** width 和 height 对 text 标签不影响 */\n width: 0,\n height: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n if (isFunction(this._spec.outerLabel.formatMethod)) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => {\n return this._spec.outerLabel.formatMethod(`${datum[this.getCategoryField()]}`, datum) as any;\n }\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n const outerLabelLineMark = this._funnelOuterLabelMark.line;\n if (outerLabelLineMark && outerLabelMark) {\n this.setMarkStyle(\n outerLabelLineMark,\n {\n x: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x1,\n y: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y1,\n x1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x2,\n y1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y2\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n const target = labelMark.getTarget();\n const component = labelMark.getComponent();\n\n if (target === this._funnelMark) {\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]} ${datum[this.getValueField()]}`,\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.label),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(component);\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n } else if (this._funnelTransformMark && target === this._funnelTransformMark) {\n this._transformLabelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => {\n const ratio = field(FUNNEL_REACH_RATIO).bind(this)(datum) as number;\n return `${(ratio * 100).toFixed(1)}%`;\n },\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.transformLabel)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset ?? 'clipIn';\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('cartesianGroupClip')?.(\n {\n direction: () => (this._isHorizontal() ? 'x' : 'y'),\n width: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { x1, x2 } = rootMark.getBounds();\n return Math.max(x1, x2); // rootMark.x === 0, so need to find largest bound x instead of bounds width\n }\n return this.getLayoutRect().width;\n },\n height: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { y1, y2 } = rootMark.getBounds();\n return Math.max(y1, y2);\n }\n return this.getLayoutRect().height;\n },\n orient: () => (this._isReverse() ? 'negative' : 'positive')\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n [this._funnelOuterLabelMark?.label].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')(),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n [this._funnelMark, this._funnelTransformMark].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('funnel')({}, appearPreset),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.outerLabelLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n // hack group\n initGroups() {\n // do nothing\n }\n\n // handle stack\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n // hack\n return null;\n }\n\n /** event */\n protected initEvent() {\n super.initEvent();\n // 同步更新转化层数据\n this._viewDataTransform.getDataView()?.target.addListener('change', (d: DataView) => {\n this._viewDataTransform.updateData();\n });\n }\n\n /**\n *\n * P0 ----------- P1 P2 ------ P3\n * \\ / / \\\n * P3 ------ P2 P1 ---------- P0\n *\n * P1 P0\n * |\\ P2 P3 /|\n * | | | |\n * |/ P3 P2 \\|\n * P0 P1\n */\n getPoints(datum: Datum) {\n // 对特殊数据层不进行绘制\n const isTransformLevel = this.isTransformLevel(datum);\n\n const heightHalf = this._getMainAxisLength(isTransformLevel) / 2;\n let upperLeft;\n let lowerLeft;\n if (isTransformLevel) {\n upperLeft =\n this._shape === 'rect'\n ? this._getSecondaryAxisLength(datum[FUNNEL_LAST_VALUE_RATIO]) / 2\n : this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n } else {\n upperLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._shape === 'rect' ? upperLeft : this._getSecondaryAxisLength(datum[FUNNEL_NEXT_VALUE_RATIO]) / 2;\n }\n\n const { x, y } = this._getPositionByData(datum);\n\n const points = this._getPolygonPoints([x, y], upperLeft, lowerLeft, upperLeft, lowerLeft, heightHalf);\n\n if (this._funnelAlign !== 'center') {\n this._adjustPoints(points);\n }\n return points;\n }\n\n isTransformLevel(datum: Datum) {\n return !!datum?.[FUNNEL_TRANSFORM_LEVEL];\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getPoints = this.getPoints.bind(this);\n this._markAttributeContext.isTransformLevel = this.isTransformLevel.bind(this);\n }\n\n valueToPosition(category: StringOrNumber) {\n const innerDatum = this.getViewData()?.latestData?.find?.((d: Datum) => d[this._categoryField] === category);\n if (!isValid(innerDatum)) {\n return null;\n }\n return this._getPolygonCenter(this.getPoints(innerDatum));\n }\n\n dataToPosition(datum: any, checkInViewData?: boolean) {\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return this.valueToPosition(datum[this._categoryField]);\n }\n\n dataToPositionX(datum: any) {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: any) {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: any) {\n return 0;\n }\n\n private _getMainAxisLength(isTransform = false) {\n const funnelCount = this.getViewData().latestData.length;\n const viewHeight = this._isHorizontal() ? this.getLayoutRect().width : this.getLayoutRect().height;\n\n const hasTransform = !!this._spec.isTransform;\n const gap = hasTransform ? 0 : this._spec.gap ?? 0;\n const transformCount = hasTransform ? Math.max(0, funnelCount - 1) : 0;\n const heightRatio = this._spec.heightRatio || 0.5;\n const funnelHeight =\n (viewHeight - gap * Math.max(0, funnelCount - 1)) / (funnelCount + heightRatio * transformCount);\n if (isTransform) {\n return hasTransform ? funnelHeight * heightRatio : 0;\n }\n return funnelHeight;\n }\n\n private _getSecondaryAxisLength(ratio: number) {\n const validRatio = Number.isNaN(ratio) || !Number.isFinite(ratio) ? 0 : ratio;\n const maxSize = this._computeMaxSize();\n const minSize = this._computeMinSize();\n return minSize + (maxSize - minSize) * validRatio;\n }\n\n /**\n * 根据数据计算主轴中心点\n * @param datum\n * @returns\n */\n private _getPositionByData(datum: Datum) {\n const index = this.getViewData().latestData?.findIndex(\n (d: Datum) =>\n d[this._categoryField] === datum[this._categoryField] && d[DEFAULT_DATA_KEY] === datum[DEFAULT_DATA_KEY]\n );\n if (!isValid(index) || index < 0) {\n return {};\n }\n const isTransform = this.isTransformLevel(datum);\n const isHorizontal = this._isHorizontal();\n const viewWidth = isHorizontal ? this.getLayoutRect().height : this.getLayoutRect().width;\n const viewHeight = isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n const centerX = viewWidth / 2;\n\n let centerY = 0;\n const funnelHeight = this._getMainAxisLength();\n const transformHeight = this._getMainAxisLength(true);\n const offset = funnelHeight + transformHeight;\n\n centerY += index * offset;\n centerY += isTransform ? -transformHeight / 2 : funnelHeight / 2;\n if (!this._spec.isTransform && this._spec.gap) {\n centerY += this._spec.gap * index;\n }\n\n this._isReverse() && (centerY = viewHeight - centerY);\n\n return this._isHorizontal() ? { x: centerY, y: centerX } : { x: centerX, y: centerY };\n }\n\n private _getPolygonPoints(\n center: [number, number],\n upperLeft: number,\n lowerLeft: number,\n upperRight: number,\n lowerRight: number,\n heightHalf: number\n ) {\n const x = center[0];\n const y = center[1];\n switch (this._funnelOrient) {\n case 'left':\n return [\n { x: x - heightHalf, y: y + upperLeft },\n { x: x - heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y - lowerRight },\n { x: x + heightHalf, y: y + lowerLeft }\n ];\n case 'right':\n return [\n { x: x + heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y + upperRight },\n { x: x - heightHalf, y: y + lowerLeft },\n { x: x - heightHalf, y: y - lowerLeft }\n ];\n case 'bottom':\n return [\n { x: x + upperLeft, y: y + heightHalf },\n { x: x - upperRight, y: y + heightHalf },\n { x: x - lowerRight, y: y - heightHalf },\n { x: x + lowerLeft, y: y - heightHalf }\n ];\n default:\n // top\n return [\n { x: x - upperLeft, y: y - heightHalf },\n { x: x + upperRight, y: y - heightHalf },\n { x: x + lowerRight, y: y + heightHalf },\n { x: x - lowerLeft, y: y + heightHalf }\n ];\n }\n }\n\n /** 计算梯形中位线的中点\n * @param points\n * @returns\n */\n private _getPolygonCenter(points: IPoint[]) {\n if (this._isHorizontal()) {\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n // 梯形中位线坐标\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n /**\n * 调整点的偏移量,满足align效果\n * @param points\n * @returns\n */\n private _adjustPoints(points: IPoint[]) {\n let upperOffset;\n let lowerOffset;\n let dirKey;\n if (this._isHorizontal()) {\n dirKey = 'y';\n if (this._funnelOrient === 'left') {\n upperOffset = this._funnelAlign === 'bottom' ? -points[1].y : points[1].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[2].y : points[2].y;\n } else {\n upperOffset = this._funnelAlign === 'bottom' ? -points[0].y : points[0].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[3].y : points[3].y;\n }\n } else {\n dirKey = 'x';\n if (this._funnelOrient === 'top') {\n upperOffset = this._funnelAlign === 'left' ? points[0].x : -points[0].x;\n lowerOffset = this._funnelAlign === 'left' ? points[3].x : -points[3].x;\n } else {\n upperOffset = this._funnelAlign === 'left' ? points[1].x : -points[1].x;\n lowerOffset = this._funnelAlign === 'left' ? points[2].x : -points[2].x;\n }\n }\n (points[0][dirKey] -= upperOffset), (points[1][dirKey] -= upperOffset);\n (points[2][dirKey] -= lowerOffset), (points[3][dirKey] -= lowerOffset);\n return points;\n }\n\n private _computeLabelPosition(datum: Datum) {\n const points = this.getPoints(datum);\n return this._getPolygonCenter(points);\n }\n\n // label 相关\n private _computeLabelLimit(datum: Datum, labelSpec: IFunnelSeriesSpec['label']) {\n const limit = labelSpec?.limit;\n\n if (isNumber(limit)) {\n return limit;\n }\n\n const points = this.getPoints(datum);\n\n if (limit === 'shapeSize') {\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n return (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n }\n\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n // return this._computeMaxSize();\n // FIXME: 待 vrender 修复 maxLineWidth 在 bound 计算的 bug 后可以恢复注释\n return undefined;\n }\n\n private _computeOuterLabelPosition(datum: Datum) {\n let x;\n let y;\n let position: IOrientType = this._spec.outerLabel?.position;\n let textAlign: TextAlign = 'center';\n let textBaseline: TextBaseLine = 'middle';\n if (this._isHorizontal()) {\n position = ['top', 'bottom'].includes(position) ? position : this._funnelAlign === 'bottom' ? 'top' : 'bottom';\n } else {\n position = ['left', 'right'].includes(position) ? position : this._funnelAlign === 'left' ? 'right' : 'left';\n }\n\n if (this._spec.outerLabel?.alignLabel !== false) {\n ({ x, y } = this._getPositionByData(datum));\n if (position === 'left') {\n (x = 0), (textAlign = 'left');\n } else if (position === 'right') {\n (x = this.getLayoutRect().width), (textAlign = 'right');\n } else if (position === 'top') {\n (y = 0), (textBaseline = 'top');\n } else if (position === 'bottom') {\n (y = this.getLayoutRect().height), (textBaseline = 'bottom');\n }\n } else {\n const { x2, y2 } = this._computeOuterLabelLinePosition(datum);\n (x = x2), (y = y2);\n if (position === 'left') {\n (x -= FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'right');\n } else if (position === 'right') {\n (x += FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'left');\n } else if (position === 'top') {\n (y -= FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'bottom');\n } else if (position === 'bottom') {\n (y += FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'top');\n }\n }\n return { x, y, align: textAlign, textBaseline };\n }\n\n private _computeOuterLabelLimit(datum: Datum) {\n if (this._isHorizontal()) {\n return this._getMainAxisLength(this.isTransformLevel(datum));\n }\n\n // 垂直方向上的limit计算逻辑\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const categoryField = this.getCategoryField();\n\n const funnelLabelBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n ?.getGroupGraphicItem()\n ?.find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n\n const funnelLabelWidth = funnelLabelBounds ? funnelLabelBounds.x2 - funnelLabelBounds.x1 : 0;\n const outerLineSpace = this._funnelOuterLabelMark.line ? this._minLabelLineWidth : 0;\n\n let space = this.getLayoutRect().width - Math.max(shapeMiddleWidth, funnelLabelWidth);\n if (this._funnelAlign === 'center') {\n space /= 2;\n }\n return space - outerLineSpace - (this._spec.outerLabel?.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH);\n }\n\n private _computeOuterLabelLinePosition(datum: Datum) {\n const categoryField = this.getCategoryField();\n const outerLabelMarkBounds = this._funnelOuterLabelMark?.label\n ?.getProduct()\n ?.elements?.find((el: any) => el.data[0]?.[categoryField] === datum[categoryField])\n ?.getBounds();\n\n const labelMarkBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n ?.getGroupGraphicItem()\n ?.find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n const outerLabelSpec = this._spec.outerLabel ?? {};\n let x1;\n let x2;\n let y1;\n let y2;\n if (this._isHorizontal()) {\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n const points = this.getPoints(datum);\n const shapeMiddleHeight = (Math.abs(points[0].y - points[1].y) + Math.abs(points[2].y - points[3].y)) / 2;\n if (this._spec.outerLabel.position === 'top' || this._funnelAlign === 'bottom') {\n y1 = this._getPolygonCenter(points).y - shapeMiddleHeight / 2 - spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y2 + spaceWidth : y1 - spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y1 - y2 < this._minLabelLineWidth && (y2 = y1 - this._minLabelLineWidth);\n x2 = x1;\n } else {\n y1 = this._getPolygonCenter(points).y + shapeMiddleHeight / 2 + spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y1 - spaceWidth : y1 + spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y2 - y1 < this._minLabelLineWidth && (y2 = y1 + this._minLabelLineWidth);\n x2 = x1;\n }\n return { x1, x2, y1, y2 };\n }\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const labelWidth = labelMarkBounds?.x2 - labelMarkBounds?.x1 || 0;\n\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n if (this._spec.outerLabel.position === 'right' || this._funnelAlign === 'left') {\n x1 = this._getPolygonCenter(points).x + Math.max(labelWidth / 2, shapeMiddleWidth / 2) + spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x1 - spaceWidth : x1 + spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x2 - x1 < this._minLabelLineWidth && (x2 = x1 + this._minLabelLineWidth);\n y2 = y1;\n } else {\n x1 = this._getPolygonCenter(points).x - Math.max(labelWidth / 2, shapeMiddleWidth / 2) - spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x2 + spaceWidth : x1 - spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x1 - x2 < this._minLabelLineWidth && (x2 = x1 - this._minLabelLineWidth);\n y2 = y1;\n }\n return { x1, x2, y1, y2 };\n }\n\n protected _computeMaxSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const maxSize = this._spec.maxSize ?? FUNNEL_MAX_SIZE;\n return calcLayoutNumber(maxSize, size);\n }\n\n protected _computeMinSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const minSize = this._spec.minSize ?? FUNNEL_MIN_SIZE;\n return calcLayoutNumber(minSize, size);\n }\n\n protected _isHorizontal() {\n return this._funnelOrient === 'left' || this._funnelOrient === 'right';\n }\n\n private _isReverse() {\n return this._funnelOrient === 'bottom' || this._funnelOrient === 'right';\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._funnelMark];\n }\n}\n\nexport const registerFunnelSeries = () => {\n registerPolygonMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(FunnelSeries.type, FunnelSeries);\n Factory.registerAnimation('funnel', (params: any, preset: FunnelAppearPreset) => ({\n appear: preset === 'clipIn' ? undefined : { type: 'fadeIn' },\n ...FadeInOutAnimation\n }));\n registerCartesianGroupClipAnimation();\n registerFadeInOutAnimation();\n};\n","import type { IFunnelSeriesSpec } from '../../series';\nimport type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IFunnelChartSpec } from './interface';\n\nexport class FunnelChartSpecTransformer extends BaseChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): IFunnelSeriesSpec {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'funnelAlign',\n 'funnelOrient',\n 'heightRatio',\n 'shape',\n 'funnel',\n 'transform',\n 'outerLabel',\n 'transformLabel',\n 'isTransform',\n 'maxSize',\n 'minSize',\n 'gap',\n 'isCone',\n 'range'\n ]);\n\n return series;\n }\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n super.transformSeriesSpec(spec);\n }\n}\n","import { registerFunnelSeries } from './../../series/funnel/funnel';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { Factory } from '../../core/factory';\nimport type { IFunnelChartSpec } from './interface';\nimport { FunnelChartSpecTransformer } from './funnel-transformer';\nimport { BaseChart } from '../base';\n\nexport class FunnelChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.funnel;\n static readonly seriesType: string = SeriesTypeEnum.funnel;\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel;\n readonly seriesType: string = SeriesTypeEnum.funnel;\n}\n\nexport const registerFunnelChart = () => {\n registerFunnelSeries();\n Factory.registerChart(FunnelChart.type, FunnelChart);\n};\n","import { Factory } from './../../core/factory';\n/* eslint-disable no-duplicate-imports */\nimport type { IPyramid3dMarkSpec } from '../../typings/visual';\nimport { MarkTypeEnum } from '../interface/type';\nimport { BasePolygonMark } from './base-polygon';\nimport { registerPyramid3dGraphic } from '@visactor/vgrammar-core';\nimport { registerVGrammarPolygonAnimation } from '../../animation/config';\nimport type { IPyramid3dMark } from '../interface/mark';\n\nexport class Pyramid3dMark extends BasePolygonMark implements IPyramid3dMark {\n static readonly type = MarkTypeEnum.pyramid3d;\n readonly type = Pyramid3dMark.type;\n}\n\nexport const registerPyramid3dMark = () => {\n Factory.registerMark(Pyramid3dMark.type, Pyramid3dMark);\n registerPyramid3dGraphic();\n registerVGrammarPolygonAnimation();\n};\n","import type { AdaptiveSpec } from '../../../typings';\nimport { SeriesMarkNameEnum } from '../../interface';\nimport type { IFunnel3dSeriesSpec, IFunnel3dSeriesTheme } from '../interface';\nimport { FunnelSeriesSpecTransformer } from '../funnel-transformer';\n\nexport class Funnel3dSeriesSpecTransformer<\n T extends IFunnel3dSeriesSpec = IFunnel3dSeriesSpec,\n K extends IFunnel3dSeriesTheme = IFunnel3dSeriesTheme\n> extends FunnelSeriesSpecTransformer, K> {\n protected _transformLabelSpec(spec: AdaptiveSpec): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.funnel3d);\n if (spec.isTransform) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.transform3d, 'transformLabel' as any);\n }\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel } from '../../../constant/attribute';\nimport { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum, SeriesMarkNameEnum } from '../../interface/type';\nimport { FunnelSeries } from '../funnel';\nimport type { IFunnel3dSeriesSpec } from '../interface';\nimport { registerPyramid3dMark } from '../../../mark/polygon/pyramid-3d';\nimport { registerTextMark } from '../../../mark/text';\nimport { registerRuleMark } from '../../../mark/rule';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { funnel3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { Funnel3dSeriesSpecTransformer } from './funnel-3d-transformer';\nimport type { ILabelMark, IPyramid3dMark, IRuleMark, ITextMark } from '../../../mark/interface';\n\nexport class Funnel3dSeries extends FunnelSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.funnel3d;\n type = SeriesTypeEnum.funnel3d;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel3d;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform3d;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.pyramid3d;\n\n static readonly mark: SeriesMarkMap = funnel3dSeriesMark;\n static readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n readonly transformerConstructor = Funnel3dSeriesSpecTransformer as any;\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...Funnel3dSeries.mark.funnel3d,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel3d,\n key: this._seriesField,\n isSeriesMark: true\n },\n {\n support3d: true\n }\n ) as IPyramid3dMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...Funnel3dSeries.mark.transform3d,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform3d,\n key: this._seriesField,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId()\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(Funnel3dSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n key: this._seriesField,\n markSpec: this._spec.outerLabel\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(Funnel3dSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n key: this._seriesField,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label]\n }) as IRuleMark;\n }\n }\n\n initMarkStyle() {\n super.initMarkStyle();\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n super.initLabelMarkStyle(labelMark);\n\n this.setMarkStyle(\n labelMark,\n {\n z: _ => {\n if (this._isHorizontal()) {\n return 0;\n }\n const points = this.getPoints(_);\n const width = Math.max(Math.abs(points[0].x - points[1].x), Math.abs(points[2].x - points[3].x));\n return (this._computeMaxSize() - width) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._labelMark = labelMark;\n\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(labelMark.getComponent());\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n }\n}\n\nexport const registerFunnel3dSeries = () => {\n registerPyramid3dMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(Funnel3dSeries.type, Funnel3dSeries);\n};\n","import { SeriesTypeEnum } from '../../../series/interface/type';\nimport { ChartTypeEnum } from '../../interface/type';\nimport { registerFunnel3dSeries } from '../../../series/funnel/3d/funnel-3d';\nimport { Factory } from '../../../core/factory';\nimport type { IFunnel3dChartSpec } from '../interface';\nimport type { AdaptiveSpec } from '../../../typings';\nimport { FunnelChartSpecTransformer } from '../funnel-transformer';\nimport { BaseChart } from '../../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class Funnel3dChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.funnel3d;\n static readonly seriesType: string = SeriesTypeEnum.funnel3d;\n static readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly transformerConstructor = FunnelChartSpecTransformer;\n readonly type: string = ChartTypeEnum.funnel3d;\n readonly seriesType: string = SeriesTypeEnum.funnel3d;\n}\n\nexport const registerFunnel3dChart = () => {\n register3DPlugin();\n registerFunnel3dSeries();\n Factory.registerChart(Funnel3dChart.type, Funnel3dChart);\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../../typings/space';\nimport { Factory } from '../../../core/factory';\nimport type { ILinearProgressAnimationParams, LinearProgressAppearPreset } from './interface';\n\nfunction LinearProgressGrowOption(params: ILinearProgressAnimationParams) {\n return () => {\n if (params.direction === 'vertical') {\n return {\n orient: 'negative'\n };\n }\n return {\n orient: 'positive'\n };\n };\n}\n\nconst Appear_Grow = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const linearProgressDisappear = (params: ILinearProgressAnimationParams): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: LinearProgressGrowOption(params)\n };\n};\n\nexport const Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport function linearProgressPresetAnimation(\n params: ILinearProgressAnimationParams,\n preset: LinearProgressAppearPreset | boolean\n) {\n if (preset === false) {\n return {};\n }\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n default:\n return Appear_Grow(params);\n }\n}\n\nexport const registerLinearProgressAnimation = () => {\n Factory.registerAnimation(\n 'linearProgress',\n (params: ILinearProgressAnimationParams, preset: LinearProgressAppearPreset) => {\n return {\n appear: linearProgressPresetAnimation(params, preset),\n enter: { type: 'grow' },\n disappear: linearProgressDisappear(params)\n };\n }\n );\n};\n","import { BaseSeriesTooltipHelper } from '../../base/tooltip-helper';\nimport type { ISeriesTooltipHelper } from '../../interface';\nimport type { TooltipActiveType } from '../../../typings';\n\nexport class LinearProgressSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../../interface/type';\nimport { valueInScaleRange } from '../../../util/scale';\nimport { AttributeLevel } from '../../../constant/attribute';\nimport type { Datum } from '../../../typings';\nimport { animationConfig, userAnimationConfig } from '../../../animation/utils';\nimport { registerLinearProgressAnimation } from './animation';\nimport type {\n ILinearProgressAnimationParams,\n ILinearProgressSeriesSpec,\n LinearProgressAppearPreset\n} from './interface';\nimport { LinearProgressSeriesTooltipHelper } from './tooltip-helper';\nimport type { IStateAnimateSpec } from '../../../animation/spec';\nimport { registerRectMark } from '../../../mark/rect';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\nimport { linearProgressSeriesMark } from './constant';\nimport { Factory } from '../../../core/factory';\nimport { registerFadeInOutAnimation } from '../../../animation/config';\nimport type { IMark, IRectMark } from '../../../mark/interface';\nimport { isValid } from '@visactor/vutils';\n\nexport class LinearProgressSeries<\n T extends ILinearProgressSeriesSpec = ILinearProgressSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.linearProgress;\n type = SeriesTypeEnum.linearProgress;\n\n static readonly mark: SeriesMarkMap = linearProgressSeriesMark;\n\n private _progressMark: IRectMark | null = null;\n private _trackMark: IRectMark | null = null;\n\n initMark(): void {\n this._initTrackMark();\n this._initProgressMark();\n }\n\n initMarkStyle(): void {\n this._initTrackMarkStyle();\n this._initProgressMarkStyle();\n }\n\n private _initProgressMark() {\n this._progressMark = this._createMark(\n LinearProgressSeries.mark.progress,\n {\n isSeriesMark: true,\n stateSort: this._spec.progress?.stateSort\n },\n {\n setCustomizedShape: this._spec.progress?.customShape ?? this._defaultProgressCustomShape\n }\n ) as IRectMark;\n return this._progressMark;\n }\n\n private _initProgressMarkStyle() {\n const progressMark = this._progressMark;\n if (progressMark) {\n if (this._spec.direction === 'vertical') {\n const progress = this._spec.progress || {};\n const leftPadding = progress.leftPadding ?? 0;\n const rightPadding = progress.rightPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2 +\n leftPadding\n );\n },\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0)),\n y: () => this._yAxisHelper?.dataToPosition([0], { bandPosition: this._bandPosition }),\n width: this._spec.bandWidth - leftPadding - rightPadding,\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n const progress = this._spec.progress || {};\n const topPadding = progress.topPadding ?? 0;\n const bottomPadding = progress.bottomPadding ?? 0;\n\n this.setMarkStyle(\n progressMark,\n {\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0)),\n y: (datum: Datum) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2 +\n topPadding\n );\n },\n height: this._spec.bandWidth - topPadding - bottomPadding,\n x: () => this._xAxisHelper?.dataToPosition([0], { bandPosition: this._bandPosition }),\n cornerRadius: this._spec.cornerRadius,\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n\n private _defaultProgressCustomShape = (datum: any[], attrs: any, path: ICustomPath2D) => {\n const cornerRadius = this._spec?.cornerRadius;\n const width = isValid(attrs.width) ? attrs.width : attrs.x1 - attrs.x;\n const height = isValid(attrs.height) ? attrs.height : attrs.y1 - attrs.y;\n const x0 = Math.min(0, width);\n const x1 = Math.max(0, width);\n const y0 = Math.min(0, height);\n const y1 = Math.max(0, height);\n\n if (cornerRadius > 0) {\n let realCornerRadius = cornerRadius;\n\n if (this._spec?.direction === 'vertical') {\n realCornerRadius = Math.min(Math.abs(width / 2), cornerRadius);\n\n if (2 * realCornerRadius > Math.abs(height)) {\n const angle = Math.acos((realCornerRadius - Math.abs(height) / 2) / realCornerRadius);\n\n path.moveTo(x0 + realCornerRadius, y0);\n path.arc(\n x0 + realCornerRadius,\n y0 + realCornerRadius,\n realCornerRadius,\n 1.5 * Math.PI,\n 1.5 * Math.PI - angle,\n true\n );\n path.arc(\n x0 + realCornerRadius,\n y1 - realCornerRadius,\n realCornerRadius,\n angle + Math.PI / 2,\n Math.PI / 2,\n true\n );\n\n path.lineTo(x1 - cornerRadius, y1);\n path.arc(\n x1 - realCornerRadius,\n y1 - realCornerRadius,\n realCornerRadius,\n Math.PI / 2,\n Math.PI / 2 - angle,\n true\n );\n path.arc(\n x1 - realCornerRadius,\n y0 + realCornerRadius,\n realCornerRadius,\n -Math.PI / 2 + angle,\n -Math.PI / 2,\n true\n );\n path.lineTo(x0 + realCornerRadius, y0);\n\n path.closePath();\n\n return path;\n }\n } else {\n realCornerRadius = Math.min(Math.abs(height / 2), cornerRadius);\n\n if (2 * realCornerRadius > Math.abs(width)) {\n const angle = Math.acos((realCornerRadius - Math.abs(width) / 2) / realCornerRadius);\n path.moveTo(x0, y0 + realCornerRadius);\n path.arc(x0 + realCornerRadius, y0 + realCornerRadius, realCornerRadius, Math.PI, Math.PI + angle);\n path.arc(x1 - realCornerRadius, y0 + realCornerRadius, realCornerRadius, -angle, 0);\n path.lineTo(x1, y1 - realCornerRadius);\n path.arc(x1 - realCornerRadius, y1 - realCornerRadius, realCornerRadius, 0, angle);\n path.arc(x0 + realCornerRadius, y1 - realCornerRadius, realCornerRadius, Math.PI - angle, Math.PI);\n path.closePath();\n\n return path;\n }\n }\n\n path.moveTo(x0, y0 + realCornerRadius);\n path.arc(x0 + realCornerRadius, y0 + realCornerRadius, realCornerRadius, Math.PI, 1.5 * Math.PI);\n path.lineTo(x1 - realCornerRadius, y0);\n path.arc(x1 - realCornerRadius, y0 + realCornerRadius, realCornerRadius, -Math.PI / 2, 0);\n path.lineTo(x1, y1 - realCornerRadius);\n path.arc(x1 - realCornerRadius, y1 - realCornerRadius, realCornerRadius, 0, Math.PI / 2);\n path.lineTo(x0 + realCornerRadius, y1);\n path.arc(x0 + realCornerRadius, y1 - realCornerRadius, realCornerRadius, Math.PI / 2, Math.PI);\n path.closePath();\n } else {\n path.moveTo(x0, y0);\n path.lineTo(x1, y0);\n path.lineTo(x1, y1);\n path.lineTo(x0, y1);\n path.closePath();\n }\n\n return path;\n };\n\n private _initTrackMark() {\n this._trackMark = this._createMark(\n LinearProgressSeries.mark.track,\n {\n stateSort: this._spec.track?.stateSort\n },\n {\n setCustomizedShape: this._spec.track?.customShape\n }\n ) as IRectMark;\n return this._trackMark;\n }\n\n private _initTrackMarkStyle() {\n const trackMark = this._trackMark;\n if (trackMark) {\n if (this._spec.direction === 'vertical') {\n this.setMarkStyle(\n trackMark,\n {\n x: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionX(datum), this._xAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2\n );\n },\n y: 0,\n width: this._spec.bandWidth,\n height: () => this._scaleY.range()[0],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n trackMark,\n {\n x: 0,\n y: (datum: any) => {\n return (\n valueInScaleRange(this.dataToPositionY(datum), this._yAxisHelper?.getScale?.(0), true) -\n this._spec.bandWidth / 2\n );\n },\n height: this._spec.bandWidth,\n width: () => this._scaleX.range()[1],\n cornerRadius: this._spec.cornerRadius\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n\n initInteraction(): void {\n const marks: IMark[] = [];\n\n if (this._trackMark) {\n marks.push(this._trackMark);\n }\n\n if (this._progressMark) {\n marks.push(this._progressMark);\n }\n this._parseInteractionConfig(marks);\n }\n\n initAnimation() {\n const animationParams: ILinearProgressAnimationParams = {\n direction: this.direction\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this._progressMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('linearProgress')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.progress, this._spec, this._markAttributeContext)\n )\n );\n\n this._trackMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.track, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LinearProgressSeriesTooltipHelper(this);\n this._progressMark && this._tooltipHelper.activeTriggerSet.mark.add(this._progressMark);\n this._trackMark && this._tooltipHelper.activeTriggerSet.mark.add(this._trackMark);\n }\n\n getActiveMarks(): IMark[] {\n return [this._progressMark];\n }\n}\n\nexport const registerLinearProgressSeries = () => {\n registerRectMark();\n registerLinearProgressAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(LinearProgressSeries.type, LinearProgressSeries);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { ICartesianAxisSpec, ICartesianBandAxisSpec, ICartesianLinearAxisSpec } from '../../../component';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { getLinearAxisSpecDomain } from '../../../component/axis/util';\n\nexport class LinearProgressChartSpecTransformer<\n T extends ILinearProgressChartSpec = ILinearProgressChartSpec\n> extends CartesianChartSpecTransformer {\n protected needAxes(): boolean {\n return false;\n }\n\n protected _getDefaultSeriesSpec(spec: T): ILinearProgressChartSpec {\n const series = super._getDefaultSeriesSpec(spec, ['bandWidth', 'progress', 'track']);\n series.direction = spec.direction ?? 'horizontal';\n\n series.cornerRadius = spec.cornerRadius ?? 0;\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n if (!spec.axes) {\n spec.axes = [];\n }\n\n if (spec.direction === 'vertical') {\n let leftAxis: ICartesianLinearAxisSpec = null;\n let bottomAxis: ICartesianBandAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'band';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'linear';\n }\n const domain = getLinearAxisSpecDomain(leftAxis, { min: 0, max: 1 });\n if (isNil(leftAxis.min)) {\n leftAxis.min = domain.min;\n }\n if (isNil(leftAxis.max)) {\n leftAxis.max = domain.max;\n }\n } else {\n let leftAxis: ICartesianBandAxisSpec = null;\n let bottomAxis: ICartesianLinearAxisSpec = null;\n (spec.axes ?? []).forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n if (orient === 'left') {\n leftAxis = axis;\n }\n if (orient === 'bottom') {\n bottomAxis = axis;\n }\n });\n if (!leftAxis) {\n leftAxis = {\n type: 'band',\n orient: 'left',\n visible: false\n };\n spec.axes.push(leftAxis);\n }\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom',\n visible: false\n };\n spec.axes.push(bottomAxis);\n }\n\n // 自动补全轴类型类型和range\n if (isNil(bottomAxis.type)) {\n bottomAxis.type = 'linear';\n }\n if (isNil(leftAxis.type)) {\n leftAxis.type = 'band';\n }\n const domain = getLinearAxisSpecDomain(bottomAxis, { min: 0, max: 1 });\n if (isNil(bottomAxis.min)) {\n bottomAxis.min = domain.min;\n }\n if (isNil(bottomAxis.max)) {\n bottomAxis.max = domain.max;\n }\n }\n }\n}\n","import { ChartTypeEnum } from '../../interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { ILinearProgressChartSpec } from './interface';\nimport { registerLinearProgressSeries } from '../../../series/progress/linear';\nimport { Factory } from '../../../core/factory';\nimport { LinearProgressChartSpecTransformer } from './linear-progress-transformer';\nimport { BaseChart } from '../../base';\nimport { StackChartMixin } from '../../stack';\nimport { mixin } from '@visactor/vutils';\n\nexport class LinearProgressChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.linearProgress;\n static readonly seriesType: string = SeriesTypeEnum.linearProgress;\n static readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly transformerConstructor = LinearProgressChartSpecTransformer;\n readonly type: string = ChartTypeEnum.linearProgress;\n readonly seriesType: string = SeriesTypeEnum.linearProgress;\n}\n\nmixin(LinearProgressChart, StackChartMixin);\n\nexport const registerLinearProgressChart = () => {\n registerLinearProgressSeries();\n Factory.registerChart(LinearProgressChart.type, LinearProgressChart);\n};\n","import type { ITextMark } from '../../mark/interface';\nimport type { DirectionType } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ISeries } from '../interface';\n\n// 直角坐标系下 固定点位的标签\n// only used in rangeColumn\nexport function setRectLabelPos(\n component: ISeries,\n labelMark: ITextMark,\n position: string,\n offset: number,\n x: (datum: any) => number,\n x1: (datum: any) => number,\n y: (datum: any) => number,\n y1: (datum: any) => number,\n direction: () => DirectionType\n) {\n component.setMarkStyle(labelMark, {\n textAlign: (datum: any) => {\n const d = direction();\n if (d === Direction.vertical) {\n return 'center';\n }\n const _x = x(datum);\n const _x1 = x1(datum);\n // d = h\n if (position === 'middle') {\n return 'center';\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return 'left';\n }\n if (position === 'end') {\n return 'right';\n }\n if (position === 'outside') {\n return 'left';\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return 'right';\n }\n if (position === 'end') {\n return 'left';\n }\n if (position === 'outside') {\n return 'right';\n }\n }\n return 'center';\n },\n textBaseline: (datum: any) => {\n const d = direction();\n if (d === Direction.horizontal) {\n return 'middle';\n }\n // d = v\n const _y = y(datum);\n const _y1 = y1(datum);\n if (position === 'middle') {\n return 'middle';\n }\n // 柱子 从下到上\n if (_y1 >= _y) {\n if (position === 'start') {\n return 'bottom';\n }\n if (position === 'end') {\n return 'top';\n }\n if (position === 'outside') {\n return 'bottom';\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return 'top';\n }\n if (position === 'end') {\n return 'bottom';\n }\n if (position === 'outside') {\n return 'top';\n }\n }\n return 'middle';\n }\n });\n component.setMarkStyle(\n labelMark,\n {\n x: (datum: any) => {\n const d = direction();\n const _x = x(datum);\n const _x1 = x1(datum);\n if (d === Direction.vertical) {\n return (_x + _x1) / 2;\n }\n // d = h\n if (position === 'middle') {\n return (_x + _x1) / 2;\n }\n // 柱子 从左到右\n if (_x >= _x1) {\n if (position === 'start') {\n return _x1 + offset;\n }\n if (position === 'end') {\n return _x - offset;\n }\n if (position === 'outside') {\n return _x + offset;\n }\n }\n // 柱子 从右到左\n else {\n if (position === 'start') {\n return _x1 - offset;\n }\n if (position === 'end') {\n return _x + offset;\n }\n if (position === 'outside') {\n return _x - offset;\n }\n }\n return (_x + _x1) / 2;\n },\n y: (datum: any) => {\n const d = direction();\n const _y = y(datum);\n const _y1 = y1(datum);\n if (d === Direction.horizontal) {\n return (_y + _y1) / 2;\n }\n // d = v\n if (position === 'middle') {\n return (_y + _y1) / 2;\n }\n // 柱子 从下到上\n if (_y >= _y1) {\n if (position === 'start') {\n return _y1 + offset;\n }\n if (position === 'end') {\n return _y - offset;\n }\n if (position === 'outside') {\n return _y + offset;\n }\n }\n // 柱子 从上到下\n else {\n if (position === 'start') {\n return _y1 - offset;\n }\n if (position === 'end') {\n return _y + offset;\n }\n if (position === 'outside') {\n return _y - offset;\n }\n }\n return (_y + _y1) / 2;\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { Direction } from '../../typings/space';\n\nexport class RangeColumnSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getMeasureData = (datum: any) => {\n return this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]];\n };\n}\n","import { Factory } from '../../core/factory';\nimport type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { IRangeColumnAnimationParams, RangeColumnAppearPreset } from './interface';\n\nexport const rangeColumnGrowIn = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterIn',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nexport const rangeColumnGrowOut = (params: IRangeColumnAnimationParams): IAnimationTypeConfig => {\n return {\n type: 'growCenterOut',\n options: {\n direction: params.direction === 'horizontal' ? 'x' : 'y'\n }\n };\n};\n\nexport function rangeColumnPresetAnimation(\n params: IRangeColumnAnimationParams,\n preset: RangeColumnAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'grow':\n default:\n return rangeColumnGrowIn(params);\n }\n}\n\nexport const registerRangeColumnAnimation = () => {\n Factory.registerAnimation('rangeColumn', (params: IRangeColumnAnimationParams, preset: RangeColumnAppearPreset) => ({\n appear: rangeColumnPresetAnimation(params, preset),\n enter: rangeColumnGrowIn(params),\n exit: rangeColumnGrowOut(params),\n disappear: rangeColumnGrowOut(params)\n }));\n};\n","import { MarkTypeEnum } from '../../mark/interface/type';\nimport { bar3dSeriesMark, barSeriesMark } from '../bar/constant';\nimport type { SeriesMarkMap } from '../interface/common';\nimport { SeriesMarkNameEnum } from '../interface/type';\n\nexport const rangeColumnSeriesMark: SeriesMarkMap = {\n ...barSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n\nexport const rangeColumn3dSeriesMark: SeriesMarkMap = {\n ...bar3dSeriesMark,\n [SeriesMarkNameEnum.minLabel]: { name: SeriesMarkNameEnum.minLabel, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.maxLabel]: { name: SeriesMarkNameEnum.maxLabel, type: MarkTypeEnum.text }\n};\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IRangeColumnSeriesSpec, IRangeColumnSeriesTheme } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { PositionEnum } from './interface';\n\nexport class RangeColumnSeriesSpecTransformer<\n T extends IRangeColumnSeriesSpec = IRangeColumnSeriesSpec,\n K extends IRangeColumnSeriesTheme = IRangeColumnSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n const labelPosition = spec.label?.position;\n if (labelPosition !== PositionEnum.bothEnd) {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n }\n }\n}\n","import { BarSeries } from '../bar/bar';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { SeriesMarkMap } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { Direction } from '../../typings/space';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRectMark } from '../../mark/rect';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { setRectLabelPos } from '../util/label-mark';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { RangeColumnSeriesTooltipHelper } from './tooltip-helper';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { Datum } from '../../typings';\nimport type { IRangeColumnSeriesSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { PositionEnum } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { RangeColumnAppearPreset } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRangeColumnAnimation } from './animation';\nimport { rangeColumnSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { RangeColumnSeriesSpecTransformer } from './range-column-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport type { IRectMark, ITextMark } from '../../mark/interface';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumnSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.rangeColumn;\n type = SeriesTypeEnum.rangeColumn;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n protected _barName: string = SeriesTypeEnum.bar;\n\n protected declare _spec: T;\n\n static readonly mark: SeriesMarkMap = rangeColumnSeriesMark;\n static readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n readonly transformerConstructor = RangeColumnSeriesSpecTransformer as any;\n\n private _minLabelMark?: ITextMark;\n private _maxLabelMark?: ITextMark;\n private _labelMark?: ITextMark;\n\n initMark(): void {\n this._initBarBackgroundMark();\n\n const labelPosition = this._spec.label?.position;\n this._barMark = this._createMark(\n RangeColumnSeries.mark.bar,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort: this._spec.bar?.stateSort\n },\n {\n setCustomizedShape: this._spec.bar?.customShape,\n morph: shouldMarkDoMorph(this._spec, RangeColumnSeries.mark.bar.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IRectMark;\n\n if (this._spec.label?.visible !== false && labelPosition === PositionEnum.bothEnd) {\n if (this._spec.label?.minLabel?.visible !== false) {\n this._minLabelMark = this._createMark(RangeColumnSeries.mark.minLabel, {\n markSpec: this._spec.label?.minLabel\n }) as ITextMark;\n }\n if (this._spec.label?.maxLabel?.visible !== false) {\n this._maxLabelMark = this._createMark(RangeColumnSeries.mark.maxLabel, {\n markSpec: this._spec.label?.maxLabel\n }) as ITextMark;\n }\n }\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n this._initLabelMarkPos(this._minLabelMark, this._spec.label?.minLabel, 0, 'end');\n this._initLabelMarkPos(this._maxLabelMark, this._spec.label?.maxLabel, 1, 'start');\n }\n\n _initLabelMarkPos(\n labelMark: ITextMark,\n labelSpec: IRangeColumnSeriesSpec['label']['minLabel'],\n fieldIndex: number,\n defaultPosition: string\n ): void {\n if (labelMark) {\n this.setMarkStyle(labelMark, {\n fill: labelSpec?.style?.fill ?? this.getColorAttribute(),\n text: (datum: Datum) => {\n const val =\n this._spec.direction === Direction.horizontal\n ? datum[this._spec.xField[fieldIndex]]\n : datum[this._spec.yField[fieldIndex]];\n if (labelSpec?.formatMethod) {\n return labelSpec.formatMethod(val, datum);\n }\n return val;\n }\n });\n const position = labelSpec?.position ?? defaultPosition;\n const offset = labelSpec?.offset ?? (this._direction === 'vertical' ? -20 : -25);\n setRectLabelPos(\n this,\n labelMark,\n position,\n offset,\n (datum: Datum) => this._barMark.getAttribute('x', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('x', datum) as number) +\n (this._barMark.getAttribute('width', datum) as number)\n : (this._barMark.getAttribute('x1', datum) as number);\n },\n (datum: Datum) => this._barMark.getAttribute('y', datum) as number,\n (datum: Datum) => {\n return this._direction === 'vertical'\n ? (this._barMark.getAttribute('y1', datum) as number)\n : (this._barMark.getAttribute('y', datum) as number) +\n (this._barMark.getAttribute('height', datum) as number);\n },\n () => this._direction\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ITextMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n let min;\n let max;\n if (this._spec.direction === Direction.horizontal) {\n min = datum[this._spec.xField[0]];\n max = datum[this._spec.xField[1]];\n } else {\n min = datum[this._spec.yField[0]];\n max = datum[this._spec.yField[1]];\n }\n return min + '-' + max;\n },\n z: this._fieldZ ? this.dataToPositionZ.bind(this) : null\n });\n this._labelMark = labelMark;\n }\n\n protected _dataToPosX(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosX1(datum: Datum) {\n return this._xAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[0]), {\n bandPosition: this._bandPosition\n });\n }\n\n protected _dataToPosY1(datum: Datum) {\n return this._yAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rangeColumn')?.({ direction: this.direction }, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._minLabelMark) {\n this._minLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n if (this._maxLabelMark) {\n this._maxLabelMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.label, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeColumnSeriesTooltipHelper(this);\n this._barMark && this._tooltipHelper.activeTriggerSet.mark.add(this._barMark);\n\n this._minLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._minLabelMark);\n this._maxLabelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._maxLabelMark);\n this._labelMark && this._tooltipHelper.ignoreTriggerSet.mark.add(this._labelMark);\n }\n}\n\nexport const registerRangeColumnSeries = () => {\n registerRectMark();\n registerTextMark();\n registerRangeColumnAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeColumnSeries.type, RangeColumnSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeColumnChartSpec } from './interface';\n\nexport class RangeColumnChartSpecTransformer<\n T extends IRangeColumnChartSpec = IRangeColumnChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barBackground',\n 'barMinHeight',\n 'stackCornerRadius',\n 'bar'\n ]);\n\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IRangeColumnChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { registerRangeColumnSeries } from '../../series/range-column/range-column';\nimport { RangeColumnChartSpecTransformer } from './range-column-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeColumnChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n static readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly transformerConstructor = RangeColumnChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn;\n}\n\nexport const registerRangeColumnChart = () => {\n registerRangeColumnSeries();\n Factory.registerChart(RangeColumnChart.type, RangeColumnChart);\n};\n","import { MarkTypeEnum } from '../../../mark/interface/type';\nimport type { SeriesMarkMap } from '../../interface';\nimport { SeriesTypeEnum } from '../../interface/type';\nimport { RangeColumnSeries } from '../range-column';\nimport { registerRect3dMark } from '../../../mark/rect-3d';\nimport type { AdaptiveSpec } from '../../../typings';\nimport type { IRangeColumn3dSeriesSpec } from '../interface';\nimport { rangeColumn3dSeriesMark } from '../constant';\nimport { Factory } from '../../../core/factory';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class RangeColumn3dSeries<\n T extends IRangeColumn3dSeriesSpec = IRangeColumn3dSeriesSpec\n> extends RangeColumnSeries> {\n static readonly type: string = SeriesTypeEnum.rangeColumn3d;\n type = SeriesTypeEnum.rangeColumn3d;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect3d;\n protected _barName: string = SeriesTypeEnum.bar3d;\n static readonly mark: SeriesMarkMap = rangeColumn3dSeriesMark;\n}\n\nexport const registerRangeColumn3dSeries = () => {\n registerRect3dMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeColumn3dSeries.type, RangeColumn3dSeries);\n};\n","import { Direction } from '../../../typings';\nimport { CartesianChartSpecTransformer } from '../../cartesian';\nimport type { IRangeColumn3dChartSpec } from '../interface';\n\nexport class RangeColumn3dChartSpecTransformer<\n T extends IRangeColumn3dChartSpec = IRangeColumn3dChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: any): any {\n const series: any = super._getDefaultSeriesSpec(spec, ['bar3d', 'barGapInGroup']);\n\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n return series;\n }\n}\n","import { ChartTypeEnum } from '../../interface/type';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { IRangeColumn3dChartSpec } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { registerRangeColumn3dSeries } from '../../../series/range-column/3d/range-column-3d';\nimport { RangeColumn3dChartSpecTransformer } from './range-column-3d-transformer';\nimport { BaseChart } from '../../base';\nimport { register3DPlugin } from '../../../plugin/other';\n\nexport class RangeColumn3dChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeColumn3d;\n static readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n static readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = RangeColumn3dChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeColumn3d;\n readonly seriesType: string = SeriesTypeEnum.rangeColumn3d;\n}\n\nexport const registerRangeColumn3dChart = () => {\n register3DPlugin();\n registerRangeColumn3dSeries();\n Factory.registerChart(RangeColumn3dChart.type, RangeColumn3dChart);\n};\n","import type { IElement } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiffState } from '@visactor/vgrammar-core';\nimport { minInArray } from '@visactor/vutils';\n\n/**\n * 计算角度对于起点的比例\n */\nexport const computeRatio = (angle: number, range: [number, number]) => {\n /**\n * 计算当前处理的角度, 与range的距离\n * 若ratio为负, 则代表需要向起点靠拢\n * 若ratio为正, 则代表需要向终点靠拢\n */\n const ratio = (angle - range[0]) / (range[1] - range[0] || 1);\n\n /**\n * ratio若为负值, 则取0, 代表起点.\n * ratio若为正值, 则取1, 代表终点.\n * Tips: 仅代表一个比例, 具体的值是多少, 需要在外部计算.\n */\n return Math.max(0, Math.min(1, ratio));\n};\n\n/**\n * 得到最内层的Elements\n */\nexport const getInnerMostElements = (element: IElement) => {\n // 所有待更新的marks\n const updateElements = element.mark.elements.filter(e => e.diffState === DiffState.update);\n // 得到最内层级\n const minDepth = minInArray(updateElements.map(e => e?.data?.[0].depth));\n // 内层的Marks\n return updateElements.filter(e => e?.data?.[0].depth === minDepth);\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { isEmpty, maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[], startAngle: number, endAngle: number): [number, number] => {\n // 处理enter时从无到有的case, 例如图例.\n if (isEmpty(elements)) {\n return [startAngle, endAngle];\n }\n\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstEnter = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.startAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.startAngle\n },\n endAngle: {\n from: (d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算间距\n const angleRange = computeInnerAngleRange(innerElements, startAngle, endAngle);\n // 计算比例\n const ratio = computeRatio(d.endAngle, angleRange);\n return ratio * (endAngle - startAngle) + startAngle;\n },\n to: (d: Datum) => d.endAngle\n },\n outerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.outerRadius\n },\n innerRadius: {\n from: (d: Datum) => d.innerRadius,\n to: (d: Datum) => d.innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig, IElement } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams } from './interface';\nimport type { Datum } from '../../../typings';\nimport { computeRatio, getInnerMostElements } from './utils';\nimport { maxInArray, minInArray } from '@visactor/vutils';\n\nconst computeInnerAngleRange = (elements: IElement[]): [number, number] => {\n const minStartAngle = minInArray(elements.map(m => m.getGraphicAttribute('startAngle', false) * 1));\n const maxEndAngle = maxInArray(elements.map(m => m.getGraphicAttribute('endAngle', false) * 1));\n return [minStartAngle, maxEndAngle];\n};\n\nexport const sunburstExit = (params: ISunburstAnimationParams): IAnimationTypeConfig => {\n return {\n channel: {\n startAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('startAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('startAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n endAngle: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('endAngle', false),\n to: (_d: Datum, element: IElement) => {\n const { startAngle, endAngle } = params.animationInfo();\n // 得到最内层的elements.\n const innerElements = getInnerMostElements(element);\n // 计算range\n const range = computeInnerAngleRange(innerElements);\n // 计算比例\n const ratio = computeRatio(element.getGraphicAttribute('endAngle', false), range);\n return ratio * (endAngle - startAngle) + startAngle;\n }\n },\n outerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('outerRadius', false),\n to: () => params.animationInfo().innerRadius\n },\n innerRadius: {\n from: (_d: Datum, element: IElement) => element.getGraphicAttribute('innerRadius', false),\n to: () => params.animationInfo().innerRadius\n }\n }\n };\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { ISunburstAnimationParams, SunburstAppearPreset } from './interface';\n\n/**\n * 预设\n */\nexport const sunburstPresetAnimation = (\n _params: ISunburstAnimationParams, // 此处仅为保持结构统一\n preset: SunburstAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growAngle': {\n return {\n type: 'growAngleIn'\n };\n }\n case 'growRadius': {\n return {\n type: 'growRadiusIn'\n };\n }\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n","import type { TreeLinkElement, TreemapNodeElement, TreeNodeElement } from './interface';\n\nexport const flattenNodes = (\n nodes: TreemapNodeElement[],\n output: T[] = [],\n options?: {\n maxDepth?: number;\n callback?: (node: TreemapNodeElement) => T;\n }\n) => {\n const hasMaxDepth = options?.maxDepth >= 0;\n\n nodes.forEach(node => {\n if (!hasMaxDepth || node.depth <= options.maxDepth) {\n output.push(options?.callback ? options.callback(node) : (node as unknown as T));\n if (node.children) {\n if (hasMaxDepth && node.depth === options.maxDepth) {\n node.children = null;\n node.isLeaf = true;\n } else {\n flattenNodes(node.children, output, options);\n }\n }\n }\n });\n\n return output;\n};\n\nexport const flattenTreeLinks = (\n nodes: TreeNodeElement[],\n output: T[] = [],\n options?: {\n maxDepth?: number;\n callback?: (link: TreeLinkElement) => T;\n }\n): T[] => {\n const hasMaxDepth = options?.maxDepth >= 0;\n\n nodes.forEach(node => {\n if (!hasMaxDepth || node.depth <= options.maxDepth - 1) {\n if (node.children) {\n node.children.forEach(child => {\n const link = {\n source: node,\n target: child,\n x0: node.x,\n y0: node.y,\n x1: child.x,\n y1: child.y,\n key: `${node.key}~${child.key}`\n };\n\n output.push(options?.callback ? options.callback(link) : (link as unknown as T));\n\n if (child.children?.length) {\n flattenTreeLinks([child], output, options);\n }\n });\n }\n }\n });\n\n return output;\n};\n","import { flattenNodes } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TreemapNodeElement, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\n\nexport type FlattenNodeElement = TreemapNodeElement | SunburstNodeElement;\n\nexport interface IFlattenOpt {\n output?: Datum[];\n maxDepth?: number;\n callback?: (node: FlattenNodeElement) => T;\n}\n\nexport const flatten = (data: Array, op: IFlattenOpt = {}) => {\n if (!data) {\n return [];\n }\n\n const result = [] as FlattenNodeElement[];\n flattenNodes(data as unknown as FlattenNodeElement[], result, op);\n return result;\n};\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/dice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { HierarchicalDatum } from '../interface';\n\n/**\n * split rect in horizontal direction\n */\nexport default function (\n parent: T,\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n keyMap: Record = { x0: 'x0', x1: 'x1', y0: 'y0', y1: 'y1' }\n) {\n const nodes = parent.children;\n let node;\n let i = -1;\n const n = nodes.length;\n const k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i];\n node[keyMap.y0] = y0;\n node[keyMap.y1] = y1;\n node[keyMap.x0] = x0;\n node[keyMap.x1] = x0 += node.value * k;\n }\n}\n","import { isNil, isString } from '@visactor/vutils';\n\nexport const toPercent = (percent: string | number, total: number) => {\n if (isNil(percent)) {\n return total;\n }\n\n return isString(percent) ? (total * parseFloat(percent as string)) / 100 : percent;\n};\n","import isValidNumber from './isValidNumber';\n\nexport function toValidNumber(v: any) {\n if (isValidNumber(v)) {\n return v;\n }\n const value = +v;\n return isValidNumber(value) ? value : 0;\n}\n","import type {\n SunburstOptions,\n HierarchicalDatum,\n SunburstNodeElement,\n HierarchicalData,\n SunburstLabelConfig\n} from '../interface';\nimport { isNil, isArray, isFunction, range, isBoolean, polarToCartesian } from '@visactor/vutils';\nimport dice from '../treemap/dice';\nimport { field, toPercent } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\nconst keyMap = {\n x0: 'startAngle',\n x1: 'endAngle',\n y0: 'innerRadius',\n y1: 'outerRadius'\n};\n\nexport class SunburstLayout {\n private options: SunburstOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _maxDepth: number;\n\n private _parsedCenter: [number, number];\n\n private _parsedInnerRadius: number | number[];\n\n private _parsedOutterRadius: number | number[];\n\n private _maxRadius: number;\n\n static defaultOpionts: Partial = {\n startAngle: Math.PI / 2,\n endAngle: (-3 * Math.PI) / 2,\n center: ['50%', '50%'],\n gapRadius: 0,\n innerRadius: 0,\n outerRadius: '70%'\n };\n\n constructor(options?: SunburstOptions) {\n this.options = options\n ? Object.assign({}, SunburstLayout.defaultOpionts, options)\n : Object.assign({}, SunburstLayout.defaultOpionts);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._maxDepth = -1;\n }\n\n private _parseRadius(\n viewBox: { x0: number; x1: number; y0: number; y1: number; width: number; height: number },\n maxDepth: number\n ) {\n const cx = viewBox.x0 + toPercent(this.options.center[0], viewBox.width);\n const cy = viewBox.y0 + toPercent(this.options.center[1], viewBox.height);\n const maxRadius = Math.min(viewBox.width / 2, viewBox.height / 2);\n const innerRadius = this.options.innerRadius;\n const outerRadius = this.options.outerRadius;\n const isInnerArray = isArray(innerRadius);\n const parsedInnerRadius = isInnerArray\n ? innerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(innerRadius, maxRadius);\n const isOuterArray = isArray(outerRadius);\n const gapRadius = this.options.gapRadius;\n const parsedOuterRadius = isOuterArray\n ? outerRadius.map(entry => toPercent(entry, maxRadius))\n : toPercent(outerRadius, maxRadius);\n const rangeArr = range(0, maxDepth + 1);\n\n if (isInnerArray) {\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n const ir = parsedInnerRadius[index];\n return isNil(ir) ? maxRadius : ir;\n });\n\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isOuterArray\n ? parsedOuterRadius[index] ?? maxRadius\n : index < maxDepth\n ? this._parsedInnerRadius[index + 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius)\n : (parsedOuterRadius as number);\n });\n } else if (isOuterArray) {\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return isNil(parsedOuterRadius[index]) ? maxRadius : parsedOuterRadius[index];\n });\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return index === 0\n ? (parsedInnerRadius as number)\n : this._parsedOutterRadius[index - 1] - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n } else {\n const ir = toPercent(innerRadius, maxRadius);\n const or = parsedOuterRadius as number;\n const step = (or - ir) / (maxDepth + 1);\n\n this._parsedInnerRadius = rangeArr.map((entry, index) => {\n return ir + index * step;\n });\n this._parsedOutterRadius = rangeArr.map((entry, index) => {\n return this._parsedInnerRadius[index] + step - (isArray(gapRadius) ? gapRadius[index] ?? 0 : gapRadius);\n });\n }\n\n this._parsedCenter = [cx, cy];\n this._maxRadius = maxRadius;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: SunburstNodeElement[] = [];\n const res = calculateNodeValue(data, nodes, 0, -1, null, this._getNodeKey);\n\n this._parseRadius(viewBox, res.maxDepth);\n this._maxDepth = res.maxDepth;\n\n this._layout(nodes, {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n startAngle: this.options.startAngle,\n endAngle: this.options.endAngle\n });\n\n return nodes;\n }\n\n private _layout(nodes: SunburstNodeElement[], parent: SunburstNodeElement) {\n this._layoutNode(parent);\n\n nodes.forEach(node => {\n if (node?.children?.length) {\n this._layout(node.children, node);\n } else {\n this._layoutNode(node);\n }\n });\n }\n\n private _layoutLabel(child: SunburstNodeElement, labelOption: SunburstLabelConfig) {\n const angle = (child.startAngle + child.endAngle) / 2;\n const r =\n (labelOption.align === 'start'\n ? (child.innerRadius as number)\n : labelOption.align === 'end'\n ? child.outerRadius\n : (child.innerRadius + child.outerRadius) / 2) + (labelOption.offset ?? 0);\n const pos = polarToCartesian({ x: this._parsedCenter[0], y: this._parsedCenter[1] }, r, angle);\n\n child.label = {\n x: pos.x,\n y: pos.y,\n textBaseline: 'middle'\n };\n\n if (labelOption.rotate === 'tangential') {\n child.label.angle = angle - Math.PI / 2;\n child.label.textAlign = 'center';\n child.label.maxLineWidth = Math.abs(child.endAngle - child.startAngle) * r;\n } else {\n const uniformAngle = angle % (Math.PI * 2);\n const formatAngle = uniformAngle < 0 ? uniformAngle + Math.PI * 2 : uniformAngle;\n\n if (formatAngle > Math.PI / 2 && formatAngle < Math.PI * 1.5) {\n child.label.angle = formatAngle + Math.PI;\n child.label.textAlign =\n labelOption.align === 'start' ? 'end' : labelOption.align === 'end' ? 'start' : 'center';\n } else {\n child.label.angle = formatAngle;\n child.label.textAlign = labelOption.align;\n }\n\n child.label.maxLineWidth = child.isLeaf ? undefined : Math.abs(child.outerRadius - child.innerRadius);\n }\n }\n\n private _layoutNode = (parent: SunburstNodeElement) => {\n parent.maxDepth = this._maxDepth;\n\n if (parent.children) {\n const ir = this._parsedInnerRadius[parent.depth + 1];\n const or = this._parsedOutterRadius[parent.depth + 1];\n\n dice(parent, parent.startAngle, Math.min(ir, or), parent.endAngle, Math.max(ir, or), keyMap);\n\n const labelOption = isArray(this.options.label) ? this.options.label[parent.depth + 1] : this.options.label;\n\n parent.children.forEach(child => {\n child.x = this._parsedCenter[0];\n child.y = this._parsedCenter[1];\n\n if (labelOption) {\n return this._layoutLabel(child, isBoolean(labelOption) ? { align: 'center', rotate: 'radial' } : labelOption);\n }\n });\n }\n };\n}\n","import type { SunburstOptions } from '@visactor/vgrammar-hierarchy';\n// eslint-disable-next-line no-duplicate-imports\nimport { SunburstLayout } from '@visactor/vgrammar-hierarchy';\nimport type { Datum } from '../../typings';\n\nexport interface ISunburstOpt extends SunburstOptions {\n width: number;\n height: number;\n}\n\n/**\n * 旭日图布局算法,VGrammar 提供.\n */\nexport const sunburstLayout = (data: Array, op: () => ISunburstOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n const layout = new SunburstLayout(options);\n return layout.layout(data, { width, height });\n};\n","export const SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD = 10;\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class SunburstTooltipHelper extends BaseSeriesTooltipHelper {\n markTooltipKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import { isObject } from '@visactor/vutils';\n\n/**\n * 根据Key, 找到对应节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNode = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[keyField] === key) {\n return node;\n }\n if (node[childrenField]) {\n const result = findHierarchyNode(node[childrenField], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\n/**\n * 根据key, 找到对应节点的父节点\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyNodeParent = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): T | null => {\n for (let i = 0; i < hierarchyData.length; i++) {\n const node = hierarchyData[i];\n if (node[childrenField]) {\n for (let j = 0; j < node[childrenField].length; j++) {\n const childNode = node[childrenField][j];\n if (childNode[keyField] === key) {\n return node;\n }\n const result = findHierarchyNodeParent([childNode], key, keyField, childrenField);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n};\n\n/**\n * 回溯遍历多叉树, 找到给定key的路径.\n * @param hierarchyData\n * @param key\n * @param keyField\n * @param childrenField\n * @returns\n */\nexport const findHierarchyPath = (\n hierarchyData: T[],\n key: string,\n keyField = 'key',\n childrenField = 'children'\n): string[] => {\n const result: string[] = [];\n const dfs = (data: T[], path: string[]): boolean => {\n for (const item of data) {\n if (item[keyField] === key) {\n result.push(...path, item[keyField].toString());\n return true;\n }\n\n if (item[childrenField]) {\n const res = dfs(item[childrenField], [...path, item[keyField]]);\n if (res === true) {\n return res;\n }\n }\n }\n return false;\n };\n dfs(hierarchyData, []);\n return result;\n};\n\nexport function isHierarchyItem(item: Object, valueField = 'value', childrenField = 'children') {\n // 检查 item 是否为对象且不为 null\n if (!isObject(item)) {\n return false;\n }\n\n // 检查 item 是否包含 childrenKey 属性且其值为数组\n if (item.hasOwnProperty(childrenField)) {\n return Array.isArray(item[childrenField]);\n }\n\n return false;\n}\n\nexport function filterHierarchyDataByRange(\n data: any[],\n minValue: number,\n maxValue: number,\n valueField = 'value',\n childrenField = 'children'\n) {\n if (!Array.isArray(data)) {\n return data;\n }\n\n return data\n .map(item => {\n const newItem = { ...item };\n if (Array.isArray(newItem[childrenField])) {\n newItem[childrenField] = filterHierarchyDataByRange(\n newItem[childrenField],\n minValue,\n maxValue,\n valueField,\n childrenField\n );\n }\n return newItem;\n })\n .filter(\n item =>\n (+item[valueField] >= minValue && +item[valueField] <= maxValue) ||\n (item[childrenField] && item[childrenField].length > 0)\n );\n}\n","import type { Datum } from '../../typings';\nimport { findHierarchyNode, findHierarchyNodeParent } from '../../util/hierarchy';\nimport { array, isNil } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\n\nexport enum DrillEnum {\n DrillDown = 'drillDown',\n DrillUp = 'drillUp'\n}\n\nexport type DrillInfo = {\n key: string;\n type: DrillEnum;\n path: string[];\n};\n\n/**\n * 通用的上卷下钻的数据过滤方法.\n */\nexport const drillFilter = (\n data: Array,\n op: {\n info: () => DrillInfo;\n keyField: () => string;\n }\n) => {\n // 根据key找到节点\n const info = op.info();\n const keyField = op.keyField();\n const dataKey = info?.key;\n\n if (isNil(dataKey)) {\n return data;\n }\n\n // 下钻, 找到当前选中节点\n if (info.type === DrillEnum.DrillDown) {\n const targetNode = findHierarchyNode(data, dataKey, keyField, 'children');\n return array(targetNode);\n }\n\n // 上卷, 找到当前选中节点的父节点\n if (info.type === DrillEnum.DrillUp) {\n const targetNode = findHierarchyNodeParent(data, dataKey, keyField, 'children');\n if (targetNode) {\n return array(targetNode);\n }\n }\n return data;\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isArray, isEmpty, isNil } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\n\nimport type { DrillInfo } from '../../data/transforms/drill';\nimport { drillFilter, DrillEnum } from '../../data/transforms/drill';\nimport type { EventType, IEvent } from '../../event/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport { findHierarchyPath } from '../../util/hierarchy';\nimport { ChartEvent } from '../../constant/event';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { IModel } from '../../model/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport { ComponentTypeEnum } from '../../component/interface/type';\nimport type { Tooltip } from '../../component/tooltip';\n\ninterface DrillParams {\n event: IEvent;\n mode: RenderMode;\n drillField: () => string;\n getRawData: () => DataView;\n}\n\nexport interface IDrillable {\n /**\n * 初始化钻取设置\n */\n initDrillable: (params: DrillParams) => void;\n\n /**\n * 初始化钻取数据\n */\n initDrillableData: (dataSet: DataSet) => void;\n\n /**\n * 绑定钻取事件\n */\n bindDrillEvent: () => void;\n\n /**\n * 上卷\n */\n drillUp: () => void;\n\n /**\n * 下钻\n * @param drillPath 钻取路径\n */\n drillDown: (drillPath: string[]) => string[];\n}\n\nexport class Drillable implements IDrillable {\n private _drillParams: DrillParams;\n private _drillInfo: DrillInfo;\n\n private _getDrillTriggerEvent(type: string): EventType {\n const { mode } = this._drillParams;\n\n return getDefaultTriggerEventByMode(mode)?.[type];\n }\n\n private _hideTooltip() {\n const tooltip = (this as unknown as BaseSeries)\n .getChart()\n .getComponentsByType(ComponentTypeEnum.tooltip)[0] as Tooltip;\n tooltip && tooltip.hideTooltip();\n }\n\n initDrillable(params: DrillParams) {\n this._drillParams = params;\n }\n\n initDrillableData(dataSet: DataSet) {\n const { getRawData } = this._drillParams;\n // 注册筛选方法\n registerDataSetInstanceTransform(dataSet, 'drillFilter', drillFilter);\n\n // 调用筛选数据, 用于上卷下钻\n getRawData().transform({\n type: 'drillFilter',\n options: {\n info: () => this._drillInfo,\n keyField: () => this._drillParams.drillField()\n }\n });\n }\n\n bindDrillEvent() {\n const { event, getRawData, drillField } = this._drillParams;\n const keyField = drillField();\n if (this._getDrillTriggerEvent('start')) {\n event.on(this._getDrillTriggerEvent('start'), e => {\n if (isNil(e.datum) || isNil(e.datum?.[keyField])) {\n this.drillUp();\n return;\n }\n\n // Drill交互后, 隐藏Tooltip\n this._hideTooltip();\n // 获取数据key\n const dataKey = e.datum[keyField];\n // 已钻取的路径\n const selectPath = this._drillInfo?.path ?? [];\n // 用户点击的路径\n const clickedPath = findHierarchyPath(getRawData().rawData, dataKey, keyField, 'children');\n // 已钻取过, 则一定上卷\n if (selectPath[selectPath.length - 1] === clickedPath[clickedPath.length - 1]) {\n this.drillUp();\n } else {\n this.drillDown(clickedPath);\n }\n });\n }\n }\n\n /**\n * 下钻接口\n * @param drillPath 下钻后的路径\n * @returns 当然路径\n * @description 根据传入的path, 向指定层级下钻.\n */\n drillDown(drillPath: string[] = []): string[] {\n const { getRawData, event } = this._drillParams;\n if (!isArray(drillPath) || isEmpty(drillPath)) {\n return drillPath;\n }\n\n // 根据钻取路径, 获得当前需要展示的层级\n const dataKey = drillPath[drillPath.length - 1];\n\n this._drillInfo = {\n key: dataKey,\n path: drillPath,\n type: DrillEnum.DrillDown\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path: drillPath, type: DrillEnum.DrillDown },\n model: this as unknown as IModel\n });\n return drillPath;\n }\n\n /**\n * 上卷接口\n * @returns 上卷后的路径\n * @description 根据path信息, 向父层级上卷.\n */\n drillUp() {\n const { getRawData, event } = this._drillParams;\n\n const path = this._drillInfo?.path ?? [];\n if (!isArray(path) || isEmpty(path)) {\n return path;\n }\n\n const dataKey = path.pop();\n\n this._drillInfo = {\n key: dataKey,\n path: path,\n type: DrillEnum.DrillUp\n };\n\n getRawData().reRunAllTransform();\n event.emit(ChartEvent.drill, {\n value: { path, type: DrillEnum.DrillUp },\n model: this as unknown as IModel\n });\n return path;\n }\n}\n","import type { StatisticOperations } from '../../data/transforms/interface';\nimport { DEFAULT_HIERARCHY_DEPTH, DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\n\nexport const appendHierarchyFields = (\n fields: { key: string; operations: StatisticOperations }[],\n catField: string,\n valueField: string\n) => {\n fields.push({\n key: catField,\n operations: ['values']\n });\n fields.push({\n key: valueField,\n operations: ['max', 'min']\n });\n\n fields.push({\n key: DEFAULT_HIERARCHY_DEPTH,\n operations: ['max', 'min', 'values']\n });\n\n fields.push({\n key: DEFAULT_HIERARCHY_ROOT,\n operations: ['values']\n });\n\n return fields;\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { SunburstLabelConfig, SunburstNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { array, isArray, isNil, isValid, isObject, degreeToRadian, mixin } from '@visactor/vutils';\n\nimport type { IMarkSpec } from '../../typings/spec';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark, IArcMark } from '../../mark/interface';\nimport type { Datum, IArcMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport type { ISunburstAnimationParams, SunburstAppearPreset } from './animation';\nimport { registerSunburstAnimation } from './animation';\nimport type { ISunburstSeriesSpec, LabelAutoVisibleType } from './interface';\nimport type { ISunburstOpt } from '../../data/transforms/sunburst';\n\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { flatten } from '../../data/transforms/flatten';\nimport { sunburstLayout } from '../../data/transforms/sunburst';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { PolarSeries } from '../polar/polar';\nimport { SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD } from '../../constant/sunburst';\nimport { SunburstTooltipHelper } from './tooltip-helper';\nimport type { animationInfo } from './animation/interface';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerTextMark } from '../../mark/text';\nimport { sunburstSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class SunburstSeries extends PolarSeries {\n protected declare _spec: ISunburstSeriesSpec;\n\n static readonly type: string = SeriesTypeEnum.sunburst;\n type = SeriesTypeEnum.sunburst;\n\n static readonly mark: SeriesMarkMap = sunburstSeriesMark;\n\n private _sunburstMark: IArcMark;\n private _labelMark: ITextMark;\n\n protected _categoryField!: string;\n protected _valueField!: string;\n\n private _centerX: number;\n private _centerY: number;\n private _offsetX: number;\n private _offsetY: number;\n private _startAngle: number;\n private _endAngle: number;\n\n private __innerRadius: number | number[];\n private __outerRadius: number | number[];\n private _gap: number | number[];\n private _labelLayout: SunburstLabelConfig | SunburstLabelConfig[];\n\n private _labelAutoVisible?: LabelAutoVisibleType;\n\n private _label: IMarkSpec;\n private _sunburst: IMarkSpec;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n /**\n * 角度区间\n */\n this._startAngle = degreeToRadian(this._spec.startAngle);\n this._endAngle = degreeToRadian(this._spec.endAngle);\n\n /**\n * 中心点\n */\n this._centerX = this._spec.centerX;\n this._centerY = this._spec.centerY;\n this._offsetX = this._spec.offsetX;\n this._offsetY = this._spec.offsetY;\n\n /**\n * 对所有层生效的布局配置\n */\n this.__innerRadius = this._spec.innerRadius;\n this.__outerRadius = this._spec.outerRadius;\n this._gap = this._spec.gap;\n this._labelLayout = this._spec.labelLayout;\n\n /**\n * 图元配置\n */\n this._sunburst = this._spec.sunburst;\n this._label = this._spec.label;\n\n /**\n * 功能配置\n */\n this._labelAutoVisible = this._spec.labelAutoVisible;\n }\n\n protected initData() {\n super.initData();\n const rawData = this.getRawData();\n if (!rawData) {\n return;\n }\n\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'sunburstLayout', sunburstLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 对筛选后的数据, 调用sunburst布局算法\n rawData.transform({\n type: 'sunburstLayout',\n options: (): ISunburstOpt => {\n const { innerRadius, outerRadius, gap, label } = this._computeLevel();\n return {\n nodeKey: this._categoryField,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n center: [\n isValid(this._centerX) ? this._centerX : this.getLayoutRect().width / 2,\n isValid(this._centerY) ? this._centerY : this.getLayoutRect().height / 2\n ],\n startAngle: this._startAngle,\n endAngle: this._endAngle,\n\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n gapRadius: gap,\n label: label\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: SunburstNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initArcMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initArcMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initArcMark() {\n if (this._sunburst.visible === false) {\n return;\n }\n // SunburstMark\n const sunburstMark = this._createMark(\n SunburstSeries.mark.sunburst,\n {\n isSeriesMark: true,\n stateSort: this._spec.sunburst?.stateSort\n },\n {\n setCustomizedShape: this._spec.sunburst?.customShape\n }\n ) as IArcMark;\n this._sunburstMark = sunburstMark;\n }\n\n private _initArcMarkStyle() {\n if (isNil(this._sunburstMark)) {\n return;\n }\n this.setMarkStyle(\n this._sunburstMark,\n {\n x: d => d.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.y + (isValid(this._offsetY) ? this._offsetY : 0),\n outerRadius: d => d.outerRadius,\n innerRadius: d => d.innerRadius,\n startAngle: d => d.startAngle,\n endAngle: d => d.endAngle,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label.visible !== true) {\n return;\n }\n // Label\n const labelMark = this._createMark(SunburstSeries.mark.label, {\n isSeriesMark: false\n }) as ITextMark;\n this._labelMark = labelMark;\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: d => {\n // 自动隐藏密集标签逻辑.\n const labelAutoVisible = this._labelAutoVisible;\n\n if (isObject(labelAutoVisible) && labelAutoVisible.enable === true) {\n return (\n (d.endAngle - d.startAngle) * (d.outerRadius - d.innerRadius) >\n (labelAutoVisible?.circumference ?? SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD)\n );\n }\n return this._spec.label.visible;\n },\n x: d => d.label?.x + (isValid(this._offsetX) ? this._offsetX : 0),\n y: d => d.label?.y + (isValid(this._offsetY) ? this._offsetY : 0),\n textBaseline: d => d.label?.textBaseline,\n textAlign: d => d.label?.textAlign,\n angle: d => d.label?.angle ?? 0,\n fontSize: 10,\n text: (d: Datum) => d.name\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new SunburstTooltipHelper(this);\n this._sunburstMark && this._tooltipHelper.activeTriggerSet.mark.add(this._sunburstMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation() {\n const animationParams: ISunburstAnimationParams = {\n animationInfo: (): animationInfo => {\n // 返回用户的交互元素信息\n return {\n innerRadius: this._computeRadius(array(this.__innerRadius))[0],\n outerRadius: this._computeRadius(array(this.__outerRadius))[0],\n startAngle: array(this._startAngle)[0],\n endAngle: array(this._endAngle)[0]\n };\n }\n };\n\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sunburst')?.(animationParams, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n /**\n * 计算radius, 转换为布局属性\n * @radius radius是一个比例值, 取值范围为[0,1]\n */\n private _computeRadius(radius: number | number[]) {\n if (isArray(radius)) {\n return radius.map(r => {\n return this._computeLayoutRadius() * r;\n });\n }\n return this._computeLayoutRadius() * radius;\n }\n\n private _computeLevel(): {\n innerRadius: number | number[];\n outerRadius: number | number[];\n gap: number | number[];\n label: SunburstLabelConfig | SunburstLabelConfig[];\n } {\n return {\n innerRadius: this._computeRadius(this.__innerRadius),\n outerRadius: this._computeRadius(this.__outerRadius),\n gap: this._gap,\n label: this._labelLayout\n };\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._sunburstMark];\n }\n\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(SunburstSeries, Drillable);\n\nexport const registerSunBurstSeries = () => {\n Factory.registerSeries(SunburstSeries.type, SunburstSeries);\n registerArcMark();\n registerTextMark();\n registerFadeInOutAnimation();\n registerSunburstAnimation();\n};\n","import { isValid, radianToDegree } from '@visactor/vutils';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISunburstChartSpec } from './interface';\nimport { POLAR_START_ANGLE } from '../../constant/polar';\nimport type { ISunburstSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\n\nexport class SunburstChartSpecTransformer<\n T extends ISunburstChartSpec = ISunburstChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T) {\n // 开始角度默认使用用户配置\n const startAngle = isValid(spec.startAngle) ? spec.startAngle : POLAR_START_ANGLE;\n // 结束角度默认使用用户的配置, 若用户没配置, 默认补成整圆.\n const endAngle = isValid(spec.endAngle) ? spec.endAngle : startAngle + radianToDegree(Math.PI * 2);\n\n const series: ISunburstSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'centerX',\n 'centerY',\n 'offsetX',\n 'offsetY',\n 'innerRadius',\n 'outerRadius',\n 'gap',\n 'labelLayout',\n 'label',\n 'labelAutoVisible',\n 'drill',\n 'drillField'\n ]);\n\n series.startAngle = startAngle;\n series.endAngle = endAngle;\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { registerSunBurstSeries } from './../../series/sunburst/sunburst';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ISunburstChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { SunburstChartSpecTransformer } from './sunburst-transformer';\n\nexport class SunburstChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sunburst;\n static readonly seriesType: string = SeriesTypeEnum.sunburst;\n static readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly transformerConstructor = SunburstChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sunburst;\n readonly seriesType: string = SeriesTypeEnum.sunburst;\n}\n\nexport const registerSunburstChart = () => {\n registerSunBurstSeries();\n Factory.registerChart(SunburstChart.type, SunburstChart);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-statistics/src/lcg.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\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 function randomLCG(initS: number = 1) {\n let s = initS;\n return () => (s = (a * s + c) % m) / m;\n}\n","import { shuffleArray, Logger } from '@visactor/vutils';\nimport type { ICircle } from '../interface';\nimport { randomLCG } from '../lcg';\n\nexport default function (circles: ICircle[]) {\n return packEncloseRandom(circles, randomLCG());\n}\n\nexport function packEncloseRandom(circles: ICircle[], random: () => number) {\n let i = 0;\n const sCircles = shuffleArray(Array.from(circles), random);\n const n = sCircles.length;\n let B: ICircle[] = [];\n let p: ICircle;\n let e: ICircle;\n\n while (i < n) {\n p = sCircles[i];\n if (e && enclosesWeak(e, p)) {\n ++i;\n } else {\n B = extendBasis(B, p);\n e = encloseBasis(B);\n i = 0;\n }\n }\n\n return e;\n}\n\nfunction extendBasis(B: ICircle[], p: ICircle) {\n let i;\n let j;\n\n if (enclosesWeakAll(p, B)) {\n return [p];\n }\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]) && 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 (\n 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 ) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n Logger.getInstance().error('error when packEncloseRandom');\n}\n\nfunction enclosesNot(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a: ICircle, b: ICircle) {\n const dr = a.radius - b.radius + Math.max(a.radius, b.radius, 1) * 1e-9;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a: ICircle, B: ICircle[]) {\n for (let 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: ICircle[]) {\n switch (B.length) {\n case 1:\n return encloseBasis1(B[0]);\n case 2:\n return encloseBasis2(B[0], B[1]);\n case 3:\n return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a: ICircle) {\n return {\n x: a.x,\n y: a.y,\n radius: a.radius\n };\n}\n\nfunction encloseBasis2(a: ICircle, b: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x21 = x2 - x1;\n const y21 = y2 - y1;\n const r21 = r2 - r1;\n const 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 radius: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a: ICircle, b: ICircle, c: ICircle) {\n const x1 = a.x;\n const y1 = a.y;\n const r1 = a.radius;\n const x2 = b.x;\n const y2 = b.y;\n const r2 = b.radius;\n const x3 = c.x;\n const y3 = c.y;\n const r3 = c.radius;\n const a2 = x1 - x2;\n const a3 = x1 - x3;\n const b2 = y1 - y2;\n const b3 = y1 - y3;\n const c2 = r2 - r1;\n const c3 = r3 - r1;\n const d1 = x1 * x1 + y1 * y1 - r1 * r1;\n const d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2;\n const d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3;\n const ab = a3 * b2 - a2 * b3;\n const xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1;\n const xb = (b3 * c2 - b2 * c3) / ab;\n const ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1;\n const yb = (a2 * c3 - a3 * c2) / ab;\n const A = xb * xb + yb * yb - 1;\n const B = 2 * (r1 + xa * xb + ya * yb);\n const C = xa * xa + ya * ya - r1 * r1;\n const r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n radius: r\n };\n}\n","import { array } from '@visactor/vutils';\nimport { randomLCG } from '../lcg';\nimport { packEncloseRandom } from './enclose';\nimport type { ICircle } from '../interface';\n\ninterface CircleNode {\n _: ICircle;\n next?: CircleNode;\n prev?: CircleNode;\n}\n\nfunction place(b: ICircle, a: ICircle, c: ICircle) {\n const dx = b.x - a.x;\n let x;\n let a2;\n const dy = b.y - a.y;\n let y;\n let b2;\n const d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.radius + c.radius;\n a2 *= a2;\n b2 = b.radius + c.radius;\n 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.radius;\n c.y = a.y;\n }\n}\n\nfunction intersects(a: ICircle, b: ICircle) {\n const dr = a.radius + b.radius - 1e-6;\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node: CircleNode) {\n const a = node._;\n const b = node.next._;\n const ab = a.radius + b.radius;\n const dx = (a.x * b.radius + b.x * a.radius) / ab;\n const dy = (a.y * b.radius + b.y * a.radius) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction getCicleNode(circle: ICircle): CircleNode {\n return {\n _: circle,\n next: null as CircleNode,\n prev: null as CircleNode\n };\n}\n\nexport function packSiblingsRandom(circles: ICircle[], random: () => number) {\n circles = array(circles);\n\n const n = circles.length;\n if (!n) {\n return 0;\n }\n\n // Place the first circle.\n let a = circles[0];\n a.x = 0;\n a.y = 0;\n if (n === 1) {\n return a.radius;\n }\n\n // Place the second circle.\n const b = circles[1];\n a.x = -b.radius;\n b.x = a.radius;\n b.y = 0;\n if (n === 2) {\n return a.radius + b.radius;\n }\n\n let c = circles[2];\n // Place the third circle.\n place(b, a, c);\n\n // Initialize the front-chain using the first three circles a, b and c.\n let aNode = getCicleNode(a);\n let bNode = getCicleNode(b);\n let cNode = getCicleNode(c);\n aNode.next = bNode;\n cNode.prev = bNode;\n\n bNode.next = cNode;\n aNode.prev = cNode;\n\n cNode.next = aNode;\n bNode.prev = aNode;\n\n let j: CircleNode;\n let k: CircleNode;\n let sj: number;\n let sk: number;\n let aa: number;\n let ca: number;\n let isContinue: boolean;\n\n // Attempt to place each remaining circle…\n for (let i = 3; i < n; ++i) {\n isContinue = false;\n c = circles[i];\n place(aNode._, bNode._, c);\n cNode = getCicleNode(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 = bNode.next;\n k = aNode.prev;\n sj = bNode._.radius;\n sk = aNode._.radius;\n\n do {\n if (sj <= sk) {\n if (intersects(j._, cNode._)) {\n bNode = j;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n isContinue = true;\n break;\n }\n sj += j._.radius;\n j = j.next;\n } else {\n if (intersects(k._, cNode._)) {\n aNode = k;\n aNode.next = bNode;\n bNode.prev = aNode;\n --i;\n\n isContinue = true;\n break;\n }\n sk += k._.radius;\n k = k.prev;\n }\n } while (j !== k.next);\n\n if (isContinue) {\n continue;\n }\n\n // Success! Insert the new circle c between a and b.\n cNode.prev = aNode;\n cNode.next = bNode;\n aNode.next = bNode.prev = bNode = cNode;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(aNode);\n cNode = cNode.next;\n while (cNode !== bNode) {\n ca = score(cNode);\n if (ca < aa) {\n aNode = cNode;\n aa = ca;\n }\n cNode = cNode.next;\n }\n bNode = aNode.next;\n }\n\n // Compute the enclosing circle of the front chain.\n const aCircles = [bNode._];\n cNode = bNode.next;\n while (cNode !== bNode) {\n aCircles.push(cNode._);\n cNode = cNode.next;\n }\n c = packEncloseRandom(aCircles, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (let i = 0; i < n; ++i) {\n a = circles[i];\n a.x -= c.x;\n a.y -= c.y;\n }\n\n return c.radius;\n}\n\nexport default function (circles: ICircle[]) {\n packSiblingsRandom(circles, randomLCG());\n return circles;\n}\n","import { eachBefore, eachAfter, calculateNodeValue } from '../utils';\nimport type { CirclePackingOptions, HierarchicalDatum, CirclePackingNodeElement, HierarchicalData } from '../interface';\nimport { isFunction, isNumber, isArray } from '@visactor/vutils';\nimport { field, zero } from '@visactor/vgrammar-util';\nimport { randomLCG } from '../lcg';\nimport { packSiblingsRandom } from './siblings';\n\nfunction radiusLeaf(radius: (node: CirclePackingNodeElement) => number) {\n return function (node: CirclePackingNodeElement) {\n if (!node.children) {\n node.radius = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding: (node: CirclePackingNodeElement) => number, k: number, random: () => number) {\n return function (node: CirclePackingNodeElement) {\n const children = node?.children;\n if (children) {\n let i;\n const n = children.length;\n const r = padding(node) * k || 0;\n\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius += r;\n }\n }\n const e = packSiblingsRandom(children, random);\n if (r) {\n for (i = 0; i < n; ++i) {\n children[i].radius -= r;\n }\n }\n node.radius = e + r;\n }\n };\n}\n\nfunction translateChild(k: number, maxDepth: number) {\n return function (node: CirclePackingNodeElement, index: number, parent: CirclePackingNodeElement) {\n node.radius *= k;\n node.maxDepth = maxDepth;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\nexport class CirclePackingLayout {\n private options: CirclePackingOptions;\n\n private _getNodeKey?: (datum: HierarchicalDatum) => string;\n\n private _getPadding?: (node: CirclePackingNodeElement) => number;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n setRadius: (node: CirclePackingNodeElement) => {\n return Math.sqrt(node.value);\n },\n padding: 0,\n nodeSort: (a, b) => b.value - a.value\n };\n\n constructor(options?: CirclePackingOptions) {\n this.options = options;\n\n const keyOption = options?.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._getPadding = isNumber(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding as number\n : isArray(options?.padding)\n ? (node: CirclePackingNodeElement) => options.padding[node.depth + 1] ?? 0\n : () => 0;\n this._maxDepth = -1;\n }\n\n layout(\n data: HierarchicalData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n if (!data || !data.length) {\n return [];\n }\n\n const nodes: CirclePackingNodeElement[] = [];\n const res = calculateNodeValue(\n data,\n nodes,\n 0,\n -1,\n null,\n this._getNodeKey\n );\n this._maxDepth = res.maxDepth;\n\n const random = randomLCG();\n const root: CirclePackingNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: 'root',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n children: nodes,\n x: viewBox.x0 + viewBox.width / 2,\n y: viewBox.y0 + viewBox.height / 2\n };\n const { nodeSort, setRadius, padding, includeRoot } = this.options ?? {};\n if (nodeSort !== false) {\n const sort = (isFunction(nodeSort) ? this.options.nodeKey : CirclePackingLayout.defaultOpionts.nodeSort) as (\n a: CirclePackingNodeElement,\n b: CirclePackingNodeElement\n ) => number;\n // 默认排序,布局效果更好\n eachBefore([root], (node: CirclePackingNodeElement) => {\n if (node.children && node.children.length) {\n node.children.sort(sort);\n }\n });\n }\n if (setRadius) {\n eachBefore([root], radiusLeaf(setRadius));\n eachAfter([root], packChildrenRandom(this._getPadding, 0.5, random));\n eachBefore([root], translateChild(1, this._maxDepth));\n } else {\n const size = Math.min(viewBox.width, viewBox.height);\n\n eachBefore([root], radiusLeaf(CirclePackingLayout.defaultOpionts.setRadius));\n // layout by value\n eachAfter([root], packChildrenRandom(zero, 1, random));\n if (padding) {\n eachAfter([root], packChildrenRandom(this._getPadding, root.radius / size, random));\n }\n eachBefore([root], translateChild(size / (2 * root.radius), this._maxDepth));\n }\n\n return includeRoot ? [root] : nodes;\n }\n}\n","import type { Datum } from '../../typings';\nimport type { CirclePackingOptions } from '@visactor/vgrammar-hierarchy';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { CirclePackingLayout } from '@visactor/vgrammar-hierarchy';\n\nexport interface ICirclePackingOpt extends CirclePackingOptions {\n width: number;\n height: number;\n}\n\n/**\n * CirclePacking布局算法,VGrammar 提供.\n */\nexport const circlePackingLayout = (data: Array, op: () => ICirclePackingOpt) => {\n if (!data) {\n return data;\n }\n const options = op();\n const { width, height } = options;\n if (width === 0 || height === 0) {\n return data;\n }\n const layout = new CirclePackingLayout(options);\n return layout.layout(data, { width, height });\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class CirclePackingTooltipHelper extends BaseSeriesTooltipHelper {\n markTooltipKeyCallback = (datum: Datum) => {\n return datum?.[this.series.getDimensionField()[0]];\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { CirclePackingAppearPreset } from './interface';\n\nexport const circlePackingPresetAnimation = (preset: CirclePackingAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n\n default: {\n return {\n type: 'growRadiusIn'\n };\n }\n }\n};\n\nexport const registerCirclePackingAnimation = () => {\n Factory.registerAnimation('circlePacking', (parmas: unknown, preset: CirclePackingAppearPreset) => ({\n appear: circlePackingPresetAnimation(preset),\n enter: { type: 'growRadiusIn' },\n exit: { type: 'growRadiusOut' },\n disappear: { type: 'growRadiusOut' }\n }));\n};\n","/* eslint-disable no-duplicate-imports */\nimport { isNil, mixin } from '@visactor/vutils';\n\nimport type { ICirclePackingOpt } from '../../data/transforms/circle-packing';\nimport type { CirclePackingAppearPreset, ICirclePackingSeriesSpec } from './interface';\n\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport { Factory } from '../../core/factory';\nimport type { Datum, IArcMarkSpec, IComposedTextMarkSpec, ITextMarkSpec } from '../../typings';\n\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\n\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { circlePackingLayout } from '../../data/transforms/circle-packing';\nimport type { IMark, IArcMark, ITextMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport type { CirclePackingNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { flatten } from '../../data/transforms/flatten';\nimport { CirclePackingTooltipHelper } from './tooltip-helper';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerCirclePackingAnimation } from './animation';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerTextMark } from '../../mark/text';\nimport { circlePackingSeriesMark } from './constant';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class CirclePackingSeries<\n T extends ICirclePackingSeriesSpec = ICirclePackingSeriesSpec\n> extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.circlePacking;\n type = SeriesTypeEnum.circlePacking;\n\n static readonly mark: SeriesMarkMap = circlePackingSeriesMark;\n\n // 映射字段\n protected _categoryField!: string;\n protected _valueField!: string;\n // 配置\n private _layoutPadding: number | number[];\n private _circlePacking: IMarkSpec;\n private _label: IMarkSpec;\n // Mark\n private _circlePackingMark: IArcMark;\n private _labelMark: ITextMark;\n\n // 钻取功能开启\n private _drill?: boolean;\n\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n getCategoryField() {\n return this._categoryField;\n }\n\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n getValueField() {\n return this._valueField;\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n this._circlePacking = this._spec.circlePacking;\n this._label = this._spec.label;\n this._layoutPadding = this._spec.layoutPadding;\n }\n\n protected initData(): void {\n super.initData();\n\n const rawData = this.getRawData();\n\n if (isNil(rawData)) {\n return;\n }\n\n if (this._spec.drill) {\n // 对原始数据进行上卷下钻筛选\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n\n // 注册布局算法\n registerDataSetInstanceTransform(this._dataSet, 'circlePackingLayout', circlePackingLayout);\n // 注册扁平化算法\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n\n // 布局算法\n rawData.transform({\n type: 'circlePackingLayout',\n options: (): ICirclePackingOpt => {\n return {\n nodeKey: this._categoryField,\n padding: this._layoutPadding,\n includeRoot: false,\n width: this.getLayoutRect().width || 1,\n height: this.getLayoutRect().height || 1\n };\n }\n });\n\n // 布局结果进行扁平化处理\n rawData.transform({\n type: 'flatten',\n options: {\n callback: (node: CirclePackingNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n });\n }\n\n protected _addDataIndexAndKey() {\n const rawData = this.getRawData();\n if (isNil(rawData?.dataSet)) {\n return;\n }\n // 为原始数据, 添加层级属性\n registerDataSetInstanceTransform(rawData.dataSet, 'addVChartProperty', addVChartProperty);\n rawData.transform({\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n });\n }\n\n initMark(): void {\n this._initCirclePackingMark();\n this._initLabelMark();\n }\n\n initMarkStyle(): void {\n this._initCirclePackingMarkStyle();\n this._initLabelMarkStyle();\n }\n\n private _initCirclePackingMark() {\n if (this._circlePacking?.visible === false) {\n return;\n }\n\n const circlePacking = this._createMark(\n CirclePackingSeries.mark.circlePacking,\n {\n isSeriesMark: true\n },\n {\n setCustomizedShape: this._spec.circlePacking?.customShape\n }\n ) as IArcMark;\n\n this._circlePackingMark = circlePacking;\n }\n\n private _initCirclePackingMarkStyle() {\n if (isNil(this._circlePackingMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._circlePackingMark,\n {\n x: d => d.x,\n y: d => d.y,\n outerRadius: d => d.radius,\n innerRadius: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: this.getColorAttribute(),\n zIndex: d => d.depth\n // Todo 内置根节点和叶节点透明度\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n private _initLabelMark() {\n if (this._label?.visible === false) {\n return;\n }\n const labelMark = this._createMark(CirclePackingSeries.mark.label, {\n isSeriesMark: false\n }) as ITextMark;\n\n this._labelMark = labelMark;\n }\n\n private _initLabelMarkStyle() {\n if (isNil(this._labelMark)) {\n return;\n }\n\n this.setMarkStyle(\n this._labelMark,\n {\n x: d => d.x,\n y: d => d.y,\n text: d => {\n return d.key;\n },\n cursor: 'pointer'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n protected initTooltip() {\n this._tooltipHelper = new CirclePackingTooltipHelper(this);\n this._circlePackingMark && this._tooltipHelper.activeTriggerSet.mark.add(this._circlePackingMark);\n this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark);\n }\n\n initAnimation(): void {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('circlePacking')?.(undefined, appearPreset),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n\n this.getMarksInType(MarkTypeEnum.text).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('scaleInOut')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n initEvent() {\n super.initEvent();\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._rawData.reRunAllTransform();\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._circlePackingMark];\n }\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(CirclePackingSeries, Drillable);\n\nexport const registerCirclePackingSeries = () => {\n Factory.registerSeries(CirclePackingSeries.type, CirclePackingSeries);\n registerArcMark();\n registerTextMark();\n registerScaleInOutAnimation();\n registerCirclePackingAnimation();\n};\n","import type { ICirclePackingSeriesSpec } from '../../series/circle-packing/interface';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICirclePackingChartSpec } from './interface';\n\nexport class CirclePackingChartSpecTransformer<\n T extends ICirclePackingChartSpec = ICirclePackingChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: ICirclePackingChartSpec) {\n const series: ICirclePackingSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'layoutPadding',\n 'circlePacking',\n 'drill',\n 'drillField'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ICirclePackingChartSpec } from './interface';\nimport { registerCirclePackingSeries } from '../../series/circle-packing/circle-packing';\nimport { Factory } from '../../core/factory';\nimport { CirclePackingChartSpecTransformer } from './circle-packing-transformer';\n\nexport class CirclePackingChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.circlePacking;\n static readonly seriesType: string = SeriesTypeEnum.circlePacking;\n static readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly transformerConstructor = CirclePackingChartSpecTransformer;\n readonly type: string = ChartTypeEnum.circlePacking;\n readonly seriesType: string = SeriesTypeEnum.circlePacking;\n}\n\nexport const registerCirclePackingChart = () => {\n registerCirclePackingSeries();\n Factory.registerChart(CirclePackingChart.type, CirclePackingChart);\n};\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/slice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\n/**\n * split rect in vertical direction\n */\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n let node;\n let i = -1;\n const n = nodes.length;\n const k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i];\n node.x0 = x0;\n node.x1 = x1;\n node.y0 = y0;\n y0 += node.value * k;\n node.y1 = y0;\n }\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/sliceDice.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\n/**\n * split rect in vertical, horizontal direction alternatively\n */\nimport dice from './dice';\nimport type { TreemapNodeElement } from '../interface';\nimport slice from './slice';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n (parent.depth % 2 === 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/squarify.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\nimport treemapDice from './dice';\nimport treemapSlice from './slice';\n\nexport function squarifyRatio(\n ratio: number,\n parent: TreemapNodeElement,\n x0: number,\n y0: number,\n x1: number,\n y1: number\n) {\n const rows = [];\n const nodes = parent.children;\n let row;\n let nodeValue;\n let i0 = 0;\n let i1 = 0;\n const n = nodes.length;\n let dx;\n let dy;\n let value = parent.value;\n let sumValue;\n let minValue;\n let maxValue;\n let newRatio;\n let minRatio;\n let alpha;\n let beta;\n\n while (i0 < n) {\n dx = x1 - x0;\n dy = y1 - y0;\n\n // Find the next non-empty node.\n do {\n sumValue = nodes[i1++].value;\n } while (!sumValue && i1 < n);\n\n minValue = sumValue;\n 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 nodeValue = nodes[i1].value;\n sumValue += nodeValue;\n\n if (nodeValue < minValue) {\n minValue = nodeValue;\n }\n if (nodeValue > maxValue) {\n maxValue = nodeValue;\n }\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) {\n sumValue -= nodeValue;\n break;\n }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n row = Object.assign({}, parent, { value: sumValue, children: nodes.slice(i0, i1) });\n rows.push(row);\n if (dx < dy) {\n treemapDice(row, x0, y0, x1, value ? (y0 += (dy * sumValue) / value) : y1);\n } else {\n treemapSlice(row, x0, y0, value ? (x0 += (dx * sumValue) / value) : x1, y1);\n }\n value -= sumValue;\n i0 = i1;\n }\n\n return rows;\n}\n\nexport const generateSquarify = (ratio: number) => {\n return (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n };\n};\n","import type { TreemapOptions, TreemapDatum, TreemapNodeElement, TreemapData } from '../interface';\n// eslint-disable-next-line\nimport { isArray, isFunction, isNumber } from '@visactor/vutils';\nimport binary from './binary';\nimport dice from './dice';\nimport slice from './slice';\nimport sliceDice from './sliceDice';\nimport { generateSquarify } from './squarify';\nimport { field } from '@visactor/vgrammar-util';\nimport { calculateNodeValue } from '../utils';\n\nconst algorithms = { binary, dice, slice, sliceDice };\n\nexport class TreemapLayout {\n private options: TreemapOptions;\n\n private _splitNode: (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) => void;\n\n private _getNodeKey?: (datum: TreemapDatum) => string;\n\n private _maxDepth: number;\n\n static defaultOpionts: Partial = {\n aspectRatio: (1 + Math.sqrt(5)) / 2,\n gapWidth: 0,\n labelPadding: 0,\n labelPosition: 'top',\n splitType: 'binary',\n minVisibleArea: 10\n };\n constructor(options?: TreemapOptions) {\n this.options = Object.assign({}, TreemapLayout.defaultOpionts, options);\n\n const keyOption = this.options.nodeKey;\n const keyFunc = isFunction(keyOption) ? keyOption : keyOption ? field(keyOption as string) : null;\n\n this._getNodeKey = keyFunc;\n this._splitNode =\n this.options.splitType === 'squarify'\n ? generateSquarify(this.options.aspectRatio)\n : algorithms[this.options.splitType] ?? algorithms.binary;\n this._maxDepth = -1;\n }\n\n private _filterByArea = (node: TreemapNodeElement, ratio: number) => {\n const minArea = this._getMinAreaByDepth(node.depth);\n\n if (minArea > 0 && node.value * ratio < minArea) {\n return false;\n } else if (node.children?.length) {\n const newChildren = node.children.filter(child => {\n return this._filterByArea(child, ratio);\n });\n\n if (!newChildren.length) {\n node.isLeaf = true;\n node.children = null;\n } else if (newChildren.length !== node.children.length) {\n node.children = newChildren;\n }\n }\n\n return true;\n };\n\n layout(\n data: TreemapData,\n config: { x0: number; x1: number; y0: number; y1: number } | { width: number; height: number }\n ) {\n if (!data || !data.length) {\n return [];\n }\n const viewBox =\n 'width' in config\n ? { x0: 0, x1: config.width, y0: 0, y1: config.height, width: config.width, height: config.height }\n : {\n x0: Math.min(config.x0, config.x1),\n x1: Math.max(config.x0, config.x1),\n y0: Math.min(config.y0, config.y1),\n y1: Math.max(config.y0, config.y1),\n width: Math.abs(config.x1 - config.x0),\n height: Math.abs(config.y1 - config.y0)\n };\n\n const nodes: TreemapNodeElement[] = [];\n const res = calculateNodeValue(\n data,\n nodes,\n 0,\n -1,\n null,\n this._getNodeKey,\n this.options.valueField\n );\n this._maxDepth = res.maxDepth;\n\n if (res.sum <= 0) {\n return [];\n }\n\n const root: TreemapNodeElement = {\n flattenIndex: -1,\n maxDepth: -1,\n key: '-1',\n depth: -1,\n index: -1,\n value: res.sum,\n datum: null,\n x0: viewBox.x0,\n x1: viewBox.x1,\n y0: viewBox.y0,\n y1: viewBox.y1,\n children: nodes\n };\n const areaRatio = (viewBox.width * viewBox.height) / res.sum;\n this._filterByArea(root, areaRatio);\n\n this._layout(root);\n\n return root.children ?? [];\n }\n\n private _getMinAreaByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (\n (isArray(this.options.minVisibleArea) ? this.options.minVisibleArea[depth] : this.options.minVisibleArea) ?? 0\n );\n };\n\n private _getGapWidthByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.gapWidth) ? this.options.gapWidth[depth] : this.options.gapWidth) ?? 0;\n };\n\n private _getPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.padding) ? this.options.padding[depth] : this.options.padding) ?? 0;\n };\n\n private _getLabelPaddingByDepth = (depth: number) => {\n if (depth < 0) {\n return 0;\n }\n\n return (isArray(this.options.labelPadding) ? this.options.labelPadding[depth] : this.options.labelPadding) ?? 0;\n };\n\n private _filterChildren(node: TreemapNodeElement) {\n const maxDepth = this.options.maxDepth;\n if (isNumber(maxDepth) && maxDepth >= 0 && node.depth >= maxDepth) {\n return false;\n }\n\n const minChildrenVisibleArea = this.options.minChildrenVisibleArea;\n if (\n isNumber(minChildrenVisibleArea) &&\n Math.abs((node.x1 - node.x0) * (node.y1 - node.y0)) < minChildrenVisibleArea\n ) {\n return false;\n }\n\n const minChildrenVisibleSize = this.options.minChildrenVisibleSize;\n if (\n isNumber(minChildrenVisibleSize) &&\n (Math.abs(node.x1 - node.x0) < minChildrenVisibleSize || Math.abs(node.y1 - node.y0) < minChildrenVisibleSize)\n ) {\n return false;\n }\n\n return true;\n }\n\n private _layout(parent: TreemapNodeElement) {\n if (!this._filterChildren(parent)) {\n parent.children = null;\n parent.isLeaf = true;\n }\n\n this._layoutNode(parent);\n\n if (parent.children?.length) {\n parent.children.forEach(child => {\n if (child?.children?.length) {\n this._layout(child);\n } else {\n this._layoutNode(child);\n }\n });\n }\n }\n\n private _layoutNode = (parent: TreemapNodeElement) => {\n const gapWidth = this._getGapWidthByDepth(parent.depth);\n let x0 = parent.x0;\n let y0 = parent.y0;\n let x1 = parent.x1;\n let y1 = parent.y1;\n\n parent.maxDepth = this._maxDepth;\n\n if (gapWidth > 0) {\n x0 += gapWidth / 2;\n x1 -= gapWidth / 2;\n y0 += gapWidth / 2;\n y1 -= gapWidth / 2;\n\n if (x0 > x1) {\n x0 = (x0 + x1) / 2;\n x1 = x0;\n }\n\n if (y0 > y1) {\n y0 = (y0 + y1) / 2;\n y1 = y0;\n }\n\n parent.x0 = x0;\n parent.x1 = x1;\n parent.y0 = y0;\n parent.y1 = y1;\n }\n\n if (parent.children) {\n const labelPadding = this._getLabelPaddingByDepth(parent.depth);\n const padding = this._getPaddingByDepth(parent.depth);\n\n if (padding > 0) {\n if (padding < Math.min(x1 - x0, y1 - y0) / 2) {\n // has enough space for padding\n y0 += padding;\n y1 -= padding;\n x0 += padding;\n x1 -= padding;\n }\n }\n\n if (labelPadding > 0) {\n if (this.options.labelPosition === 'top' && y0 + labelPadding < y1) {\n parent.labelRect = { x0: x0, y0: y0, x1, y1: y0 + labelPadding };\n y0 += labelPadding;\n } else if (this.options.labelPosition === 'bottom' && y1 - labelPadding > y0) {\n parent.labelRect = { x0: x0, y0: y1 - labelPadding, x1, y1: y1 };\n y1 -= labelPadding;\n } else if (this.options.labelPosition === 'left' && x0 + labelPadding < x1) {\n parent.labelRect = { x0: x0, y0: y0, x1: x0 + labelPadding, y1 };\n x0 += labelPadding;\n } else if (this.options.labelPosition === 'right' && x1 - labelPadding > x0) {\n parent.labelRect = { x0: x1 - labelPadding, y0: y0, x1: x1, y1 };\n x1 -= labelPadding;\n }\n }\n\n const childGapWidth = this._getGapWidthByDepth(parent.depth + 1);\n\n if (childGapWidth > 0) {\n x0 -= childGapWidth / 2;\n x1 += childGapWidth / 2;\n y0 -= childGapWidth / 2;\n y1 += childGapWidth / 2;\n }\n\n this._splitNode(parent, x0, y0, x1, y1);\n }\n };\n}\n","/* Adapted from d3-hierarchy by Mike Bostock\n * https://observablehq.com/collection/@d3/d3-hierarchy\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-hierarchy/blob/main/src/treemap/binary.js\n * License: https://github.com/d3/d3-hierarchy/blob/main/LICENSE\n * @license\n */\n\nimport type { TreemapNodeElement } from '../interface';\n\nexport default function (parent: TreemapNodeElement, x0: number, y0: number, x1: number, y1: number) {\n const nodes = parent.children;\n const n = nodes.length;\n let sum = 0;\n const sums = new Array(n + 1);\n sums[0] = 0;\n\n for (let i = 0; i < n; ++i) {\n sum += nodes[i].value;\n sums[i + 1] = sum;\n }\n\n const partition = (i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) => {\n if (i >= j - 1) {\n const node = nodes[i];\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n return;\n }\n\n const valueOffset = sums[i];\n const valueTarget = value / 2 + valueOffset;\n let k = i + 1;\n let hi = j - 1;\n\n while (k < hi) {\n const mid = (k + hi) >>> 1;\n if (sums[mid] < valueTarget) {\n k = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n if (valueTarget - sums[k - 1] < sums[k] - valueTarget && i + 1 < k) {\n --k;\n }\n\n const valueLeft = sums[k] - valueOffset;\n const valueRight = value - valueLeft;\n\n if (x1 - x0 > y1 - y0) {\n const 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 const 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 partition(0, n, parent.value, x0, y0, x1, y1);\n}\n","import { flattenNodes } from '../format';\nimport type { TreemapData, TreemapNodeElement, TreemapTramsformOptions } from '../interface';\nimport { TreemapLayout } from './layout';\n\nexport const transform = (options: TreemapTramsformOptions, upstreamData: TreemapData) => {\n const layout = new TreemapLayout(options);\n\n const res = layout.layout(\n upstreamData,\n 'width' in options\n ? {\n width: options.width,\n height: options.height\n }\n : {\n x0: options.x0,\n x1: options.x1,\n y0: options.y0,\n y1: options.y1\n }\n );\n\n if (options.flatten) {\n const nodes: TreemapNodeElement[] = [];\n flattenNodes(res, nodes, { maxDepth: options?.maxDepth });\n\n return nodes;\n }\n return res;\n};\n","import { isFunction } from '@visactor/vutils';\nimport { dimensionStatistics } from './dimension-statistics';\nimport type { DataView } from '@visactor/vdataset';\nimport { flatten } from './flatten';\nimport type { Datum } from '../../typings';\nimport type { IStatisticsOption } from './interface';\n\n/**\n * 层次聚合统计主要用于处理层次数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const hierarchyDimensionStatistics = (data: Array, op: IStatisticsOption) => {\n let result = {};\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return result;\n }\n\n if (!data[0].latestData) {\n return result;\n }\n\n const hierarchyData = data[0].latestData as Datum[];\n const flatData = flatten(hierarchyData);\n result = dimensionStatistics([{ latestData: flatData } as any], op);\n return result;\n};\n","import type { Datum } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { TreemapSeries } from './treemap';\n\nexport class TreemapTooltipHelper extends BaseSeriesTooltipHelper {\n declare series: TreemapSeries;\n get defaultShapeType(): string {\n return 'square';\n }\n\n markTooltipKeyCallback = (datum: Datum) => {\n return this.series?.getMarkData(datum)?.[this.series.getDimensionField()[0]];\n };\n\n markTooltipValueCallback = (datum: Datum): string | undefined => {\n const { measureFields } = this._seriesCacheInfo;\n const data = this.series?.getMarkData(datum);\n if (measureFields[0] && data) {\n return data[measureFields[0]] ?? datum.value;\n }\n return undefined;\n };\n\n dimensionTooltipTitleCallback = (datum: Datum): string | undefined => {\n const { dimensionFields } = this._seriesCacheInfo;\n const data = this.series?.getMarkData(datum);\n if (dimensionFields[0] && data) {\n return data[dimensionFields[0]];\n }\n return undefined;\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { TreemapAppearPreset } from './interface';\n\nexport const treemapPresetAnimation = (preset: TreemapAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return {\n type: 'growCenterIn'\n };\n }\n default: {\n return {\n type: 'growCenterIn'\n };\n }\n }\n};\nexport const registerTreemapAnimation = () => {\n Factory.registerAnimation('treemap', (params: unknown, preset: TreemapAppearPreset) => {\n return {\n appear: treemapPresetAnimation(preset),\n enter: { type: 'growCenterIn' },\n exit: { type: 'growCenterOut' },\n disappear: { type: 'growCenterOut' }\n };\n });\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ITreemapSeriesSpec, ITreemapSeriesTheme } from './interface';\n\nexport class TreemapSeriesSpecTransformer<\n T extends ISeriesSpec = Omit,\n K extends ITreemapSeriesTheme = ITreemapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nonLeaf, 'nonLeafLabel' as any, 'initNonLeafLabelMarkStyle' as any);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.leaf);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport type { IMark, IRectMark, ILabelMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { Datum, IComposedTextMarkSpec, IRectMarkSpec } from '../../typings';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { ITreemapSeriesSpec } from './interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { IBounds } from '@visactor/vutils';\nimport { isValidNumber, Bounds, Matrix, mixin, merge } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport { registerTreemapTransforms } from '@visactor/vgrammar-hierarchy';\nimport type { TreemapNodeElement } from '@visactor/vgrammar-hierarchy';\nimport { DataView } from '@visactor/vdataset';\nimport { hierarchyDimensionStatistics } from '../../data/transforms/hierarchy-dimension-statistics';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addHierarchyDataKey, initHierarchyKeyMap } from '../../data/transforms/data-key';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\nimport { TreemapTooltipHelper } from './tooltip-helper';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { TransformSpec } from '@visactor/vgrammar-core';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { IDrillable } from '../../interaction/drill/drillable';\nimport { Drillable } from '../../interaction/drill/drillable';\nimport { registerRectMark } from '../../mark/rect';\nimport { registerTextMark } from '../../mark/text';\nimport { treemapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerTreemapAnimation } from './animation';\nimport { TreemapSeriesSpecTransformer } from './treemap-transform';\nimport { registerFilterTransform, registerMapTransform } from '@visactor/vgrammar-core';\nimport { appendHierarchyFields } from '../util/hierarchy';\n\nexport class TreemapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.treemap;\n type = SeriesTypeEnum.treemap;\n\n static readonly mark: SeriesMarkMap = treemapSeriesMark;\n\n static readonly transformerConstructor = TreemapSeriesSpecTransformer;\n readonly transformerConstructor = TreemapSeriesSpecTransformer;\n\n private _leafMark: IRectMark;\n private _nonLeafMark: IRectMark;\n private _labelMark: ILabelMark;\n private _nonLeafLabelMark: ILabelMark;\n\n protected declare _spec: ITreemapSeriesSpec;\n\n protected _categoryField: string = 'name';\n\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField: string = 'value';\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n private _maxDepth: number;\n\n // global scale and translate matrix\n private _matrix: Matrix;\n\n // range for treemap layout, change while zoom and pan\n private _viewBox: IBounds = new Bounds();\n\n private _enableAnimationHook = this.enableMarkAnimation.bind(this);\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_HIERARCHY_ROOT);\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n this._matrix = new Matrix();\n }\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillable({\n event: this.event,\n mode: this._option.mode,\n drillField: () => this._spec.drillField ?? this._categoryField ?? DEFAULT_DATA_KEY,\n getRawData: () => this.getRawData()\n });\n }\n\n if (isValidNumber(this._spec.maxDepth)) {\n this._maxDepth = this._spec.maxDepth - 1;\n }\n }\n\n initData() {\n super.initData();\n // 矩形树图中原始数据为层次结果,图元数据为平坦化后的结构,具体逻辑如下:\n if (this.getViewData()) {\n // 对原始数据进行上卷下钻筛选\n if (this._spec.drill) {\n (this as unknown as IDrillable).initDrillableData(this._dataSet);\n }\n }\n }\n\n compile(): void {\n super.compile();\n this._runTreemapTransform();\n }\n\n protected _runTreemapTransform(render = false) {\n const viewDataProduct = this._data.getProduct();\n if (viewDataProduct) {\n viewDataProduct.transform([\n {\n type: 'treemap',\n nameField: this._categoryField,\n valueField: this._valueField,\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2,\n maxDepth: this._maxDepth,\n gapWidth: this._spec.gapWidth,\n padding: this._spec.nodePadding,\n splitType: this._spec.splitType,\n aspectRatio: this._spec.aspectRatio,\n labelPadding: this._spec.nonLeafLabel?.visible ? this._spec.nonLeafLabel?.padding : 0,\n labelPosition: this._spec.nonLeafLabel?.position,\n minVisibleArea: this._spec.minVisibleArea ?? 10,\n minChildrenVisibleArea: this._spec.minChildrenVisibleArea,\n minChildrenVisibleSize: this._spec.minChildrenVisibleSize,\n flatten: true\n },\n {\n type: 'map',\n callback: (datum: TreemapNodeElement) => {\n if (datum) {\n [DEFAULT_HIERARCHY_ROOT, 'name'].forEach(key => {\n datum[key] = datum.datum[datum.depth][this._categoryField];\n });\n }\n return datum;\n }\n }\n ]);\n }\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n protected _addDataIndexAndKey() {\n if (this._rawData?.dataSet) {\n registerDataSetInstanceTransform(this._rawData.dataSet, 'addVChartProperty', addVChartProperty);\n this._rawData.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initHierarchyKeyMap.bind(this),\n call: addHierarchyDataKey\n }\n }\n // rawDataStatistic 需要统计 addHierarchyDataKey 的一些字段,所以必须要运行一下\n // false\n );\n }\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n // overwrite the getRawDataStatisticsByField of base-series\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n if (this._rawData) {\n const result = hierarchyDimensionStatistics([this._rawData], {\n fields: [{ key: field, operations: isNumeric ? ['min', 'max'] : ['values'] }]\n })[field];\n this._rawStatisticsCache[field] = merge(this._rawStatisticsCache[field] ?? {}, result);\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n protected _createHierarchyDataStatistics(dataName: string, rawData: DataView[]) {\n registerDataSetInstanceTransform(this._dataSet, 'hierarchyDimensionStatistics', hierarchyDimensionStatistics);\n registerDataSetInstanceTransform(this._dataSet, 'flatten', flatten);\n const data = new DataView(this._dataSet, { name: dataName });\n data.parse(rawData, {\n type: 'dataview'\n });\n data.transform(\n {\n type: 'hierarchyDimensionStatistics',\n options: {\n fields: () => {\n const fields = this.getStatisticFields();\n if (this._seriesField && this._seriesField !== this._categoryField) {\n fields.push({\n key: this._seriesField,\n operations: ['values']\n });\n }\n return fields;\n }\n }\n },\n false\n );\n return data;\n }\n\n getStatisticFields() {\n return appendHierarchyFields(super.getStatisticFields(), this._categoryField, this._valueField);\n }\n\n initMark() {\n const nonLeafMark = this._createMark(\n TreemapSeries.mark.nonLeaf,\n {\n isSeriesMark: true,\n stateSort: this._spec.nonLeaf?.stateSort\n },\n {\n setCustomizedShape: this._spec.nonLeaf?.customShape\n }\n );\n if (nonLeafMark) {\n nonLeafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'nonLeaf');\n }\n } as TransformSpec\n ]);\n this._nonLeafMark = nonLeafMark;\n }\n\n const leafMark = this._createMark(\n TreemapSeries.mark.leaf,\n {\n isSeriesMark: true,\n stateSort: this._spec.leaf?.stateSort\n },\n {\n setCustomizedShape: this._spec.leaf?.customShape\n }\n );\n if (leafMark) {\n leafMark.setTransform([\n {\n type: 'filter',\n callback: (datum: TreemapNodeElement) => {\n return !this._shouldFilterElement(datum, 'leaf');\n }\n } as TransformSpec\n ]);\n this._leafMark = leafMark;\n }\n }\n\n initMarkStyle() {\n this._initLeafMarkStyle();\n this._initNonLeafMarkStyle();\n }\n\n protected _initLeafMarkStyle() {\n if (!this._leafMark) {\n return;\n }\n\n this.setMarkStyle(\n this._leafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initNonLeafMarkStyle() {\n if (!this._nonLeafMark) {\n return;\n }\n this.setMarkStyle(\n this._nonLeafMark,\n {\n x: datum => datum.x0,\n y: datum => datum.y0,\n x1: datum => datum.x1,\n y1: datum => datum.y1,\n fill: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n _initRichStyleOfLabelMark(labelMark: ILabelMark) {\n if (labelMark.getTextType() === 'rich') {\n this.setMarkStyle(\n labelMark,\n {\n maxWidth: datum => Math.abs(datum.x0 - datum.x1),\n maxHeight: datum => Math.abs(datum.y0 - datum.y1),\n ellipsis: true\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum.x0 + datum.x1) / 2,\n y: datum => (datum.y0 + datum.y1) / 2,\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: Datum) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this._initRichStyleOfLabelMark(labelMark);\n }\n\n protected initNonLeafLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._nonLeafLabelMark = labelMark;\n labelMark.setRule('treemap');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.x0 + datum.labelRect.x1) / 2;\n }\n return (datum.x0 + datum.x1) / 2;\n },\n y: datum => {\n if (datum.labelRect) {\n return (datum.labelRect.y0 + datum.labelRect.y1) / 2;\n }\n return (datum.y0 + datum.y1) / 2;\n },\n text: datum => {\n return datum.datum[datum.depth]?.[this.getDimensionField()[0]];\n },\n maxLineWidth: (datum: any) => {\n return datum.x1 === datum.x0 ? Number.MIN_VALUE : datum.x1 - datum.x0;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this._initRichStyleOfLabelMark(labelMark);\n }\n\n initAnimation(): void {\n this.getMarksInType(MarkTypeEnum.rect).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('treemap')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n\n protected initEvent(): void {\n super.initEvent();\n // Roam\n if (this._spec.roam) {\n // 拖拽事件\n (this as unknown as IZoomable).initDragEventOfSeries(this);\n this.event.on('panmove', e => {\n this.handlePan(e as PanEventParam);\n });\n // 缩放事件\n (this as unknown as IZoomable).initZoomEventOfSeries(this);\n this.event.on('zoom', e => {\n this.handleZoom(e as ZoomEventParam);\n });\n }\n // Drill\n if (this._spec.drill) {\n (this as unknown as IDrillable).bindDrillEvent();\n }\n }\n\n protected _getDataIdKey() {\n return 'key';\n }\n\n protected initTooltip() {\n this._tooltipHelper = new TreemapTooltipHelper(this);\n this._leafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._leafMark);\n this._nonLeafMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nonLeafMark);\n }\n\n private _shouldFilterElement(datum: TreemapNodeElement, nodeType: 'leaf' | 'nonLeaf') {\n const isLeaf = datum.isLeaf;\n // 过滤掉非需要的节点\n return nodeType === 'leaf' ? !isLeaf : isLeaf;\n }\n\n handlePan(event: PanEventParam) {\n const { delta } = event;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n this._matrix.reset();\n this._matrix.translate(delta[0], delta[1]);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n\n this._viewBox.transformWithMatrix(this._matrix);\n\n this._runTreemapTransform(true);\n }\n\n handleZoom(event: ZoomEventParam) {\n const { scale, scaleCenter } = event;\n if (scale === 1) {\n return;\n }\n\n this._matrix.reset();\n const { x, y } = scaleCenter;\n this._matrix.translate(x, y);\n this._matrix.scale(scale, scale);\n this._matrix.translate(-x, -y);\n const { a, b, c, d, e, f } = this._matrix;\n this._matrix.multiply(a, b, c, d, e, f);\n // 缩放过程中会有新增/减少的element,对应执行enter/exit动画,会使得缩放交互效果体验很差\n // 这里在缩放过程中先关闭所有动画\n this.disableMarkAnimation();\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n this._viewBox.transformWithMatrix(this._matrix);\n this._runTreemapTransform(true);\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this.getLayoutRect().width, this.getLayoutRect().height);\n this._runTreemapTransform();\n }\n\n protected enableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.enable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().enableAnimation();\n }\n });\n // 在所有动画执行之后关闭动画\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, this._enableAnimationHook);\n }\n\n protected disableMarkAnimation() {\n this.getMarks().forEach(mark => {\n mark.getProduct().animate?.disable();\n });\n [this._labelMark, this._nonLeafLabelMark].forEach(m => {\n if (m && m.getComponent()) {\n m.getComponent().getProduct().getGroupGraphicItem().disableAnimation();\n }\n });\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._nonLeafMark, this._leafMark];\n }\n\n isHierarchyData = () => {\n return true;\n };\n\n getMarkData(datum: Datum) {\n return datum?.datum ? datum.datum[datum.datum.length - 1] : datum;\n }\n}\n\nmixin(TreemapSeries, Drillable);\nmixin(TreemapSeries, Zoomable);\n\nexport const registerTreemapSeries = () => {\n registerFilterTransform();\n registerMapTransform();\n registerRectMark();\n registerTextMark();\n registerTreemapAnimation();\n registerFadeInOutAnimation();\n registerTreemapTransforms();\n Factory.registerSeries(TreemapSeries.type, TreemapSeries);\n};\n","import type { AdaptiveSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ITreemapChartSpec } from './interface';\n\nexport class TreemapChartSpecTransformer<\n T extends ITreemapChartSpec = ITreemapChartSpec\n> extends BaseChartSpecTransformer> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'aspectRatio',\n 'splitType',\n 'maxDepth',\n 'gapWidth',\n 'nodePadding',\n 'minVisibleArea',\n 'minChildrenVisibleArea',\n 'minChildrenVisibleSize',\n 'roam',\n 'drill',\n 'drillField',\n 'leaf',\n 'nonLeaf',\n 'nonLeafLabel'\n ]);\n return series;\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ITreemapChartSpec } from './interface';\nimport { registerTreemapSeries } from '../../series/treemap/treemap';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { TreemapChartSpecTransformer } from './treemap-transformer';\n\nexport class TreemapChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.treemap;\n static readonly seriesType: string = SeriesTypeEnum.treemap;\n static readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly transformerConstructor = TreemapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.treemap;\n readonly seriesType: string = SeriesTypeEnum.treemap;\n}\n\nexport const registerTreemapChart = () => {\n registerTreemapSeries();\n Factory.registerChart(TreemapChart.type, TreemapChart);\n};\n","import { isNil, precisionAdd, precisionSub } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IWaterfallSeriesSpec,\n IWaterfallTotalCustom,\n IWaterfallTotalField\n} from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { warn } from '../../util/debug';\nimport { STACK_FIELD_TOTAL_TOP } from '../../constant/data';\n\ntype TotalInfo = {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n};\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, total: totalSpec, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n // 上一次的计算结果\n let temp: { start: number; end: number; lastIndex: string; positive: number; negative: number } = {\n start: 0,\n end: 0,\n positive: 0,\n negative: 0,\n lastIndex: null\n };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false,\n positive: temp.end,\n negative: temp.end\n };\n\n const indexData = dimensionData[key];\n indexData?.forEach((d, i) => {\n if (i === indexData.length - 1) {\n d[STACK_FIELD_TOTAL_TOP] = true;\n } else {\n delete d[STACK_FIELD_TOTAL_TOP];\n }\n });\n // 1.9.5 新增能力\n // 当前 key 对应的数据中有一个总计数据,并且还有其他的分组数据时。总计的计算逻辑需要将总计值拆分\n if (indexData.length > 1) {\n const isTotalCheck = (d: Datum) => {\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n return true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n return !!tag;\n }\n return false;\n };\n const isTotalTag = indexData.some(d => isTotalCheck(d));\n if (isTotalTag) {\n temp = computeTotalWithMultipleData(\n indexData,\n key,\n total,\n totalData,\n temp,\n indexValues,\n index,\n op,\n isTotalCheck\n );\n totalData.push(total);\n return;\n }\n }\n temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op);\n totalData.push(total);\n });\n return totalData;\n};\n\nfunction computeTotalWithMultipleData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt,\n isTotalCheck: (d: Datum) => boolean\n) {\n total.isTotal = true;\n const { valueField, startAs, endAs, total: totalSpec } = op;\n // 先将数据分为总计数据与常规数据\n const _normalTemp: Datum[] = [];\n const _totalTemp: Datum[] = [];\n indexData.forEach(d => {\n if (isTotalCheck(d)) {\n _totalTemp.push(d);\n } else {\n _normalTemp.push(d);\n }\n });\n // 1. 不可能全都不是总计数据\n // 2. 如果全都是总计数据,让它们都是同一个值\n if (_totalTemp.length === indexData.length) {\n const result = computeNormalData([indexData[0]], key, total, totalData, temp, indexValues, index, op);\n _totalTemp.forEach(d => {\n d[startAs] = indexData[0][startAs];\n d[endAs] = indexData[0][endAs];\n d[valueField] = indexData[0][valueField];\n });\n return result;\n }\n\n // 3. 其他常规情况\n // 先获取当前的起始值/结束值应当是多少\n // 按照第一个总计数据的配置来决定\n const totalConfigData = _totalTemp[0];\n // eslint-disable-next-line prefer-const\n let { start, end } = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);\n total.start = start;\n total.end = end;\n let positive = start;\n let navigate = start;\n // 当前剩余的总计值\n let valueTemp = end - start;\n // 将非总计数据进行堆叠\n _normalTemp.forEach(d => {\n const value = +d[valueField];\n if (value >= 0) {\n d[startAs] = +positive;\n positive = precisionAdd(positive, value);\n } else {\n d[startAs] = +navigate;\n navigate = precisionAdd(navigate, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n start = precisionAdd(start, value);\n valueTemp = precisionSub(valueTemp, value);\n });\n // 现在的start end 就是 total 的\n _totalTemp.forEach(d => {\n d[startAs] = +start;\n d[endAs] = precisionAdd(d[startAs], valueTemp);\n d[valueField] = valueTemp;\n });\n return { ...total, lastIndex: key };\n}\n\nfunction computeNormalData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt\n) {\n const { valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName } = op;\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n const { start, end } = getTotalStartEnd(d, total, totalData, temp, totalSpec);\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n if (!isTotalTag) {\n const value = +d[valueField];\n // 区分正负值\n if (value >= 0) {\n d[startAs] = +total.positive;\n total.positive = precisionAdd(total.positive, value);\n } else {\n d[startAs] = +total.negative;\n total.negative = precisionAdd(total.negative, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n total.end = precisionAdd(total.end, value);\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n return { ...total, lastIndex: key };\n}\n\nfunction getTotalStartEnd(\n d: Datum,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n if (!totalSpec || totalSpec.type === 'end') {\n return getTotalInEndType(total);\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n if (totalSpec.type === 'custom') {\n return getTotalInCustomType(d, temp, totalSpec);\n }\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n return getTotalInCollectField(d, totalData, total, totalSpec);\n }\n return getTotalInField(d, total, totalSpec);\n }\n return { start: 0, end: 0 };\n}\n\nfunction getTotalInEndType(total: TotalInfo) {\n return { start: 0, end: total.end };\n}\n\nfunction getTotalInCustomType(\n d: Datum,\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n return (totalSpec).product(d, temp);\n}\n\nfunction getTotalInCollectField(d: Datum, totalData: TotalInfo[], total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n return { start, end };\n}\n\nfunction getTotalInField(d: Datum, total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n return { start, end };\n}\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport type { IBarAnimationParams, BarAppearPreset } from '../bar/interface';\nimport { barGrowIn, barGrowOut } from '../bar/animation';\nimport { Factory } from '../../core/factory';\nimport type { WaterfallAppearPreset } from './interface';\n\nconst Appear_FadeIn: IAnimationTypeConfig = {\n type: 'fadeIn'\n};\n\nconst Appear_ScaleIn: IAnimationTypeConfig = {\n type: 'growCenterIn'\n};\n\nexport function waterfallPresetAnimation(\n params: IBarAnimationParams,\n preset: WaterfallAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'fadeIn':\n return Appear_FadeIn;\n case 'scaleIn':\n return Appear_ScaleIn;\n default:\n return barGrowIn(params, false);\n }\n}\n\nexport const registerWaterfallAnimation = () => {\n Factory.registerAnimation('waterfall', (params: IBarAnimationParams, preset: WaterfallAppearPreset) => {\n return {\n appear: waterfallPresetAnimation(params, preset),\n enter: barGrowIn(params, false),\n exit: barGrowOut(params, false),\n disappear: barGrowOut(params, false)\n };\n });\n};\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type { DataView } from '@visactor/vdataset';\n\nexport interface IDimensionTreeOpt {\n fields: string[];\n}\n\nexport const dimensionTree = (data: Array, op: IDimensionTreeOpt) => {\n if (!op.fields) {\n return data;\n }\n const dataCollect = data\n .map(d => {\n return d.latestData;\n })\n .flat();\n const dimensionValues = {};\n return {\n dimensionValues,\n dimensionData: groups(dataCollect, op.fields, dimensionValues)\n };\n};\n\nfunction groups(data: Datum[], fields: string[], dimensionValues: object): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n dimensionValues[first] = new Set();\n\n const grouped = groupBy(data, first, dimensionValues[first]);\n if (_rest.length) {\n return mapValues(grouped, (value, key) => {\n return groups(value, _rest, dimensionValues);\n });\n }\n\n return grouped;\n}\n\nfunction groupBy(data: Datum[], field: string, set: Set) {\n const groups = {};\n\n data.forEach(d => {\n const key = d[field];\n if (!groups[key]) {\n groups[key] = [];\n set.add(key);\n }\n groups[key].push(d);\n });\n return groups;\n}\n\nexport function mapValues(target: object, fn: (value: any, key: string) => any) {\n return Object.keys(target).reduce((result, key) => {\n result[key] = fn(target[key], key);\n return result;\n }, {});\n}\n\nexport function findDataInFields(data: any, fields: string[]): any {\n if (fields.length === 0) {\n return data;\n }\n const first = fields[0];\n const _rest = fields.slice(1);\n if (data[first] === undefined) {\n return undefined;\n }\n return findDataInFields(data[first], _rest);\n}\n\n/**\n *\n const data = [\n { type: \"circle\", color: \"red\", x: 10, y:100 },\n { type: \"circle\", color: \"blue\", x: 10, y:100 },\n { type: \"rect\", color: \"red\", x: 10, y:100 },\n { type: \"rect\", color: \"blue\", x: 10, y:100 },\n ]\n\n groups(data, [\"circle\", \"color\"])\n\n =====>\n {\n circle: {\n red:[{ type: \"circle\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"circle\", color: \"blue\", x: 10, y:100 }]\n },\n rect:{\n red:[{ type: \"rect\", color: \"red\", x: 10, y:100 }],\n blue:[{ type: \"rect\", color: \"blue\", x: 10, y:100 }]\n }\n }\n */\n","import { DataSet, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { dimensionTree } from '../../data/transforms/dimension-data';\nimport type { IGroup } from '../../typings';\n\nexport class Group implements IGroup {\n protected _fields: string[] = [];\n get fields() {\n return this._fields;\n }\n\n protected _groupData?: DataView;\n get groupData() {\n return this._groupData;\n }\n\n constructor(fields: string[]) {\n this._fields = fields;\n }\n\n initData(viewData: DataView, dataSet: DataSet) {\n const dataName = viewData.name;\n const groupData = new DataView(dataSet instanceof DataSet ? dataSet : viewData.dataSet);\n groupData.name = dataName;\n groupData.parse([viewData], {\n type: 'dataview'\n });\n registerDataSetInstanceTransform(dataSet, 'dimensionTree', dimensionTree);\n groupData.transform(\n {\n type: 'dimensionTree',\n options: {\n fields: this._fields\n }\n },\n false\n );\n groupData.target.addListener('change', this.groupDataUpdate.bind(this));\n this._groupData = groupData;\n }\n\n groupDataUpdate() {\n // do nothing\n }\n\n getGroupValueInField(field: string) {\n const values = this.groupData?.latestData?.dimensionValues?.[field];\n return values ? Array.from(values) : [];\n }\n}\n","import { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IWaterfallSeriesSpec, IWaterfallSeriesTheme } from './interface';\n\nexport class WaterfallSeriesSpecTransformer<\n T extends IWaterfallSeriesSpec = IWaterfallSeriesSpec,\n K extends IWaterfallSeriesTheme = IWaterfallSeriesTheme\n> extends BarSeriesSpecTransformer {\n protected _supportStack: boolean = false;\n\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.bar, 'stackLabel', 'initStackLabelMarkStyle' as any);\n }\n}\n","import type { WaterfallSeries } from './../../series/waterfall/waterfall';\nimport type { Datum } from '../../typings/common';\nimport { Direction } from '../../typings/space';\nimport type { BaseLabelAttrs, LabelItem, OverlapAttrs, Strategy } from '@visactor/vrender-components';\nimport { SeriesTypeEnum, type ICartesianSeries } from '../../series/interface';\nimport { isBoolean, isFunction, isObject, isString } from '@visactor/vutils';\nimport { createText } from '@visactor/vrender-core';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { ILabelInfo, ILabelSpec } from './interface';\nimport { getFormatFunction } from '../util';\n\nexport const labelRuleMap = {\n rect: barLabel,\n symbol: symbolLabel,\n arc: pieLabel,\n point: pointLabel,\n 'line-data': lineDataLabel,\n stackLabel: stackLabel,\n line: LineLabel,\n area: LineLabel,\n rect3d: barLabel,\n arc3d: pieLabel,\n treemap: treemapLabel,\n venn: vennLabel\n};\n\nexport function defaultLabelConfig(rule: string, labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n if (labelSpec.overlap && !isObject(labelSpec.overlap)) {\n labelSpec.overlap = {};\n }\n const processor = labelRuleMap[rule] ?? labelRuleMap.point;\n\n if (labelInfo.series.type === SeriesTypeEnum.sankey) {\n return sankeyLabel(labelInfo);\n }\n return processor(labelInfo);\n}\n\nexport function textAttribute(\n labelInfo: ILabelInfo,\n datum: Datum,\n formatMethod?: ILabelSpec['formatMethod'],\n formatter?: ILabelSpec['formatter']\n) {\n const { labelMark, series } = labelInfo;\n const field = series.getMeasureField()[0];\n const textAttribute = { text: datum[field], data: datum, textType: labelInfo.labelSpec.textType ?? 'text' } as any;\n\n const attributes = Object.keys(labelMark.stateStyle.normal);\n\n for (const key of attributes) {\n const attr = labelMark.getAttribute(key as any, datum);\n textAttribute[key] = attr;\n }\n\n if (series.type !== SeriesTypeEnum.sankey) {\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, textAttribute.text, datum);\n if (formatFunc) {\n textAttribute._originText = textAttribute.text;\n textAttribute.text = formatFunc(...args, { series });\n }\n }\n\n return textAttribute;\n}\n\nfunction uniformLabelPosition(position?: ILabelSpec['position']) {\n if (isFunction(position)) {\n return (datum: Datum) => {\n return position(datum.data);\n };\n }\n return position;\n}\n\n/**\n * symbol 图元标签规则。\n */\nexport function symbolLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec } = labelInfo;\n\n // encode position config\n const defaultPosition = (series as ICartesianSeries).direction === 'horizontal' ? 'right' : 'top';\n const position = uniformLabelPosition(labelSpec.position) ?? defaultPosition;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? symbolLabelOverlapStrategy(),\n avoidBaseMark: position !== 'center'\n };\n }\n\n return { position, overlap };\n}\n\nexport function lineDataLabel(labelInfo: ILabelInfo) {\n const result = symbolLabel(labelInfo);\n if (!isBoolean(result.overlap)) {\n result.overlap.avoidBaseMark = false;\n }\n return result;\n}\n\nfunction symbolLabelOverlapStrategy() {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: ['top', 'bottom', 'right', 'left', 'top-right', 'top-left', 'bottom-left', 'bottom-right']\n }\n ];\n\n return strategy;\n}\n\n/**\n *\n */\nexport function barLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec = {} as ILabelSpec } = labelInfo;\n\n // encode position config\n const originPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const direction = (series as ICartesianSeries).direction ?? 'vertical';\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n\n let position = originPosition as BaseLabelAttrs['position'];\n\n position = (datum: Datum) => {\n const { data } = datum;\n\n const labelPosition =\n (typeof labelSpec.position === 'function'\n ? (labelSpec.position as (a: Datum) => string)(data)\n : labelSpec.position) ?? 'outside';\n\n if (labelPosition === 'outside') {\n const dataField = series.getMeasureField()[0];\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = (data?.[dataField] >= 0 && isInverse) || (data?.[dataField] < 0 && !isInverse) ? 1 : 0;\n return positionMap[direction][index];\n }\n\n return labelPosition;\n };\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: (labelSpec.overlap as OverlapAttrs)?.strategy ?? barLabelOverlapStrategy(series as ICartesianSeries)\n };\n }\n\n // encode smartInvert\n let smartInvert = false;\n if (isString(originPosition) && originPosition.includes('inside')) {\n smartInvert = true;\n }\n\n return { position, overlap, smartInvert };\n}\n\nfunction barLabelOverlapStrategy(series: ICartesianSeries) {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: (data: any) => {\n const { data: datum } = data;\n const dataField = series.getMeasureField()[0];\n const isInverse =\n (series as ICartesianSeries).direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n if (isInverse) {\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n if (datum?.[dataField] >= 0) {\n return series.direction === 'horizontal' ? ['right', 'inside-right'] : ['top', 'inside-top'];\n }\n return series.direction === 'horizontal' ? ['left', 'inside-left'] : ['bottom', 'inside-bottom'];\n }\n }\n ];\n\n return strategy;\n}\n\n/**\n * 无关图元,指定x/y坐标的标签配置规则\n */\nexport function pointLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n avoidBaseMark: false\n };\n }\n\n return { position: 'center', overlap };\n}\n\n/**\n * pie 图元标签配置规则\n */\n\nexport function pieLabel(labelInfo: ILabelInfo) {\n const { labelSpec } = labelInfo;\n // encode position config\n const labelPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const position = labelPosition as BaseLabelAttrs['position'];\n\n // encode smartInvert\n let smartInvert;\n if (labelSpec.smartInvert) {\n smartInvert = labelSpec.smartInvert;\n } else {\n smartInvert = isString(labelPosition) && labelPosition.includes('inside');\n }\n\n return { position, smartInvert };\n}\n\n/**\n * 瀑布图堆积标签配置规则\n */\n\nexport function stackLabelX(datum2: Datum, series: WaterfallSeries, pos: string, offset: number) {\n if (series.direction === Direction.horizontal) {\n if (pos === 'middle') {\n return (series.totalPositionX(datum2, 'end') + series.totalPositionY(datum2, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionX(datum2, datum2.end >= datum2.start ? 'end' : 'start') + offset;\n } else if (pos === 'min') {\n return series.totalPositionX(datum2, datum2.end >= datum2.start ? 'start' : 'end') - offset;\n }\n return series.totalPositionX(datum2, 'end') + (datum2.end >= datum2.start ? offset : -offset);\n }\n return series.totalPositionX(datum2, 'index', 0.5);\n}\nexport function stackLabelY(datum2: Datum, series: WaterfallSeries, pos: string, offset: number) {\n if (series.direction === Direction.horizontal) {\n return series.totalPositionY(datum2, 'index', 0.5);\n }\n if (pos === 'middle') {\n return (series.totalPositionY(datum2, 'end') + series.totalPositionY(datum2, 'start')) * 0.5;\n } else if (pos === 'max') {\n return series.totalPositionY(datum2, datum2.end >= datum2.start ? 'end' : 'start') - offset;\n } else if (pos === 'min') {\n return series.totalPositionY(datum2, datum2.end >= datum2.start ? 'start' : 'end') + offset;\n }\n return series.totalPositionY(datum2, 'end') + (datum2.end >= datum2.start ? -offset : offset);\n}\n\nexport function stackLabel(\n labelInfo: ILabelInfo,\n datumTransform?: (data: any) => any,\n attributeTransform?: (label: LabelItem, datum: Datum, att: any) => any\n) {\n const series = labelInfo.series as WaterfallSeries;\n const labelSpec = labelInfo.labelSpec || ({} as IWaterfallSeriesSpec['stackLabel']);\n const totalData = series.getTotalData();\n return {\n customLayoutFunc: (labels: LabelItem[]) => {\n return labels.map(label => {\n const pos = labelSpec.position || 'withChange';\n const offset = labelSpec.offset || 0;\n\n const datum = datumTransform ? datumTransform(label.data) : label.data;\n const attribute = textAttribute(labelInfo, datum, labelSpec.formatMethod);\n\n attribute.x = stackLabelX(datum, series, pos, offset);\n attribute.y = stackLabelY(datum, series, pos, offset);\n if (series.direction === Direction.horizontal) {\n attribute.textAlign =\n pos === 'middle'\n ? 'center'\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'left'\n : 'right';\n } else {\n attribute.textBaseline =\n pos === 'middle'\n ? pos\n : (pos === 'withChange' && datum.end - datum.start >= 0) || pos === 'max'\n ? 'bottom'\n : 'top';\n }\n attributeTransform?.(label, datum, attribute);\n return createText({ ...attribute, id: label.id });\n });\n },\n dataFilter: (labels: LabelItem[]) => {\n const result: LabelItem[] = [];\n totalData.forEach((total: any) => {\n const label = labels.find(labelItem => {\n return total.index === labelItem.data?.[series.getDimensionField()[0]];\n });\n if (label) {\n label.data = total;\n result.push(label);\n }\n });\n return result;\n },\n overlap: {\n strategy: [] as any\n }\n };\n}\n\n/**\n * treemap 非叶子节点标签配置规则\n */\nexport function treemapLabel(labelInfo: ILabelInfo) {\n return {\n customLayoutFunc: (labels: LabelItem[], text: any) => text,\n overlap: false\n };\n}\n\n/**\n * venn 标签配置规则\n */\nexport function vennLabel(labelInfo: ILabelInfo) {\n return {\n customLayoutFunc: (labels: LabelItem[], text: any) => text,\n smartInvert: true\n };\n}\n\n/**\n * line 图元标签\n */\n\nexport function LineLabel(labelInfo: ILabelInfo) {\n const { labelSpec, series } = labelInfo;\n\n const seriesData = series.getViewDataStatistics?.().latestData?.[series.getSeriesField()]?.values;\n const data = seriesData ? seriesData.map((d: Datum, index: number) => ({ [series.getSeriesField()]: d, index })) : [];\n return { position: labelSpec.position ?? 'end', data };\n}\n\nexport function sankeyLabel(labelInfo: ILabelInfo) {\n const { series, labelSpec = {} as ILabelSpec } = labelInfo;\n // encode position config\n const originPosition = uniformLabelPosition(labelSpec.position) ?? 'outside';\n const direction = (series as ICartesianSeries).direction;\n let position = originPosition as BaseLabelAttrs['position'];\n\n if (isString(originPosition)) {\n if (direction === 'vertical') {\n if (originPosition === 'inside-start') {\n position = (datum: Datum) => {\n return 'inside-left';\n };\n } else if (originPosition === 'inside-middle') {\n position = (datum: Datum) => {\n return 'center';\n };\n } else if (originPosition === 'inside-end') {\n position = (datum: Datum) => {\n return 'inside-right';\n };\n } else {\n position = (datum: Datum) => {\n return 'bottom';\n };\n }\n } else {\n if (originPosition === 'inside-start') {\n position = (datum: Datum) => {\n return 'inside-left';\n };\n } else if (originPosition === 'inside-middle') {\n position = (datum: Datum) => {\n return 'center';\n };\n } else if (originPosition === 'inside-end') {\n position = (datum: Datum) => {\n return 'inside-right';\n };\n } else if (originPosition === 'outside') {\n position = (datum: Datum) => {\n return 'right';\n };\n }\n }\n }\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap =\n isString(originPosition) && originPosition.includes('inside')\n ? false\n : {\n strategy:\n (labelSpec.overlap as OverlapAttrs)?.strategy ?? sankeyLabelOverlapStrategy(series as ICartesianSeries)\n };\n }\n\n return {\n position,\n overlap,\n smartInvert: false,\n offset: 0,\n syncState: true\n };\n}\n\nfunction sankeyLabelOverlapStrategy(series: ICartesianSeries) {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: (data: any) => {\n return series.direction === 'horizontal' ? ['right', 'left'] : ['bottom', 'top'];\n }\n }\n ];\n\n return strategy;\n}\n","/* eslint-disable no-duplicate-imports */\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../constant/data';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { valueInScaleRange } from '../../util/scale';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec, WaterfallAppearPreset } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { ITransformOptions, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { stackLabel } from '../../component/label/util';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { PREFIX } from '../../constant/base';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport type { IBarAnimationParams } from '../bar/interface';\nimport type { ILabelInfo } from '../../component/label/interface';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class WaterfallSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.waterfall;\n type = SeriesTypeEnum.waterfall;\n\n static readonly mark: SeriesMarkMap = waterfallSeriesMark;\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: SeriesData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n protected declare _spec: T;\n\n protected _leaderLineMark: IRuleMark = null;\n protected _stackLabelMark: ITextMark = null;\n protected _labelMark: ITextMark = null;\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = new Group(groupFields);\n this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // waterfall data stack data\n this.setValueFieldToStack();\n // 不支持多维度;\n this._fieldX = [this._fieldX[0]];\n this._fieldY = [this._fieldY[0]];\n if (isNil(this._seriesField)) {\n this._seriesField = WaterfallDefaultSeriesField;\n }\n }\n\n getSeriesKeys(): string[] {\n if (this._seriesField === WaterfallDefaultSeriesField) {\n return [\n this._theme.seriesFieldName.increase,\n this._theme.seriesFieldName.decrease,\n this._theme.seriesFieldName.total\n ];\n }\n return super.getSeriesKeys();\n }\n\n protected initData(): void {\n super.initData();\n registerDataSetInstanceTransform(this._dataSet, 'waterfallFillTotal', waterfallFillTotal);\n registerDataSetInstanceTransform(this._dataSet, 'waterfall', waterfall);\n // 如果要在最后添加总计\n if (isNil(this._spec.total) || this._spec.total.type === 'end') {\n this._rawData?.transform(\n {\n type: 'waterfallFillTotal',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n total: this._spec.total\n }\n },\n false\n );\n }\n // 总计数据\n const totalData = dataViewFromDataView(this.getViewData(), this._dataSet, {\n name: `${PREFIX}_series_${this.id}_totalData`\n });\n this.getViewData().target.removeListener('change', totalData.reRunAllTransform);\n this._totalData = new SeriesData(this._option, totalData);\n totalData.transform(\n {\n type: 'waterfall',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n startAs: STACK_FIELD_START,\n endAs: STACK_FIELD_END,\n total: this._spec.total,\n groupData: () => this.getGroups().groupData\n }\n },\n false\n );\n }\n\n compileData() {\n super.compileData();\n this._totalData?.compile();\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const waterfallAnimationParams: IBarAnimationParams = {\n yField: this.direction === 'horizontal' ? this._fieldY[0] : this.getStackValueField(),\n xField: this.direction === 'horizontal' ? this.getStackValueField() : this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('waterfall')?.(waterfallAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._leaderLineMark) {\n this._leaderLineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.leaderLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n viewDataUpdate(d: DataView): void {\n this._totalData.getDataView().reRunAllTransform();\n this._totalData.updateData();\n super.viewDataUpdate(d);\n }\n /**\n * data\n */\n // waterfall 不支持任何的 data filter\n addViewDataFilter(_option: ITransformOptions) {\n // do nothing\n }\n reFilterViewData() {\n // do nothing\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n this._totalData.updateData();\n }\n\n initMark(): void {\n super.initMark();\n const leaderLine = this._createMark(\n WaterfallSeries.mark.leaderLine,\n {\n key: 'index',\n stateSort: this._spec.leaderLine?.stateSort\n },\n {\n setCustomizedShape: this._spec.leaderLine?.customShape\n }\n ) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n\n if (!this._labelMark && this._spec.label?.visible) {\n super.initLabelMarkStyle(labelMark);\n this._labelMark = labelMark;\n return;\n }\n }\n\n initStackLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n return this._spec.stackLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n // 样式设置在这里的原因是执行顺序的问题\n // 首先执行这里的 mark.style\n // 然后执行用户的 formatMethod\n // 最后执行下方的 getTotalLabelComponentStyle 。如果在下方实现值函数,就会导致用户format无法生效\n initTotalLabelMarkStyle(labelMark: ILabelMark) {\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n if (!('end' in datum)) {\n return this.direction === Direction.horizontal ? datum[this._fieldX[0]] : datum[this._fieldY[0]];\n }\n return this._spec.totalLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n getTotalLabelComponentStyle(info: Pick) {\n return stackLabel(\n {\n ...info,\n series: this,\n // @ts-ignore\n labelSpec: this._spec.totalLabel\n },\n d => {\n const index = this.direction === Direction.vertical ? d[this._fieldX[0]] : d[this._fieldY[0]];\n return this._totalData.getLatestData().find((_d: Datum) => _d.index === index);\n }\n );\n }\n\n totalPositionX(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._xAxisHelper;\n if (this._direction === Direction.horizontal) {\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('width', datum) as number) * (0.5 - pos)\n );\n }\n\n totalPositionY(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n if (this._direction === Direction.horizontal) {\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('height', datum) as number) * (0.5 - pos)\n );\n }\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => this.totalPositionX(datum, 'lastEnd', 0),\n x1: (datum: Datum) => this.totalPositionX(datum, datum.isTotal ? 'end' : 'start', 0),\n y: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionY(datum, 'lastIndex', 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', 0),\n y: (datum: Datum) => this.totalPositionY(datum, 'lastEnd', 0),\n y1: (datum: Datum) => this.totalPositionY(datum, datum.isTotal ? 'end' : 'start', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n","import { array } from '@visactor/vutils';\nimport type { AdaptiveSpec } from '../../typings';\nimport { BarChartSpecTransformer } from '../bar';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IWaterfallChartSpec } from './interface';\n\nexport class WaterfallChartSpecTransformer<\n T extends IWaterfallChartSpec = IWaterfallChartSpec\n> extends BarChartSpecTransformer> {\n transformSpec(spec: AdaptiveSpec): void {\n super.transformSpec(spec);\n if (spec.legends) {\n array(spec.legends).forEach((l: any) => {\n l.select = false;\n l.hover = false;\n l.filter = false;\n });\n }\n\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _getDefaultSeriesSpec(spec: AdaptiveSpec): any {\n const series = super._getDefaultSeriesSpec(spec);\n series.bar = spec.bar;\n series.stackLabel = spec.stackLabel;\n series.leaderLine = spec.leaderLine;\n series.total = spec.total;\n\n return series;\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BarChart } from '../bar';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IWaterfallChartSpec } from './interface';\nimport { registerWaterfallSeries } from '../../series/waterfall/waterfall';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { WaterfallChartSpecTransformer } from './waterfall-transformer';\n\nexport class WaterfallChart extends BarChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.waterfall;\n static readonly seriesType: string = SeriesTypeEnum.waterfall;\n static readonly transformerConstructor = WaterfallChartSpecTransformer;\n // @ts-ignore\n readonly transformerConstructor = WaterfallChartSpecTransformer;\n readonly type: string = ChartTypeEnum.waterfall;\n readonly seriesType: string = SeriesTypeEnum.waterfall;\n}\n\nexport const registerWaterfallChart = () => {\n registerWaterfallSeries();\n Factory.registerChart(WaterfallChart.type, WaterfallChart);\n};\n","import { PREFIX } from './base';\n\nexport const BOX_PLOT_OUTLIER_VALUE_FIELD = `${PREFIX}_BOX_PLOT_OUTLIER_VALUE`;\n\nexport enum BOX_PLOT_TOOLTIP_KEYS {\n OUTLIER = 'outlier',\n MAX = 'max',\n MIN = 'min',\n MEDIAN = 'median',\n Q1 = 'q1',\n Q3 = 'q3',\n SERIES_FIELD = 'seriesField'\n}\n","import { isArray } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport type { Datum } from '../../typings';\n\nexport interface IBoxPlotOutlierOpt {\n dimensionField: string[];\n outliersField: string;\n}\n/**\n * 将箱型图outlier数组展平\n * @param data\n * @param options\n * @returns\n */\nexport const foldOutlierData = (data: Array, op: IBoxPlotOutlierOpt) => {\n const result: any = [];\n const { outliersField, dimensionField } = op;\n const latestData = (data[0] as any).latestData || [];\n latestData.forEach((d: Datum) => {\n let outlierValues = d[outliersField];\n if (!isArray(outlierValues)) {\n outlierValues = [outlierValues];\n }\n result.push(\n ...outlierValues.map((v: any) => {\n const resData = {\n [BOX_PLOT_OUTLIER_VALUE_FIELD]: v\n };\n dimensionField.forEach(field => {\n resData[field] = d[field];\n });\n return resData;\n })\n );\n });\n return result;\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum, ITooltipLinePattern, TooltipActiveType } from '../../typings';\nimport { isValid } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD, BOX_PLOT_TOOLTIP_KEYS } from '../../constant/box-plot';\nimport type { BoxPlotSeries } from './box-plot';\n\nexport class BoxPlotSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n /** 获取默认的tooltip pattern */\n protected getDefaultContentList(activeType: TooltipActiveType): ITooltipLinePattern[] {\n return [\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.OUTLIER),\n shapeType: this.shapeTypeCallback,\n shapeColor: this.getOutlierFillColor,\n shapeStroke: this.getOutlierFillColor\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MAX),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MAX)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q3),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q3)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MEDIAN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MEDIAN)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.Q1),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.Q1)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.MIN),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.MIN)\n },\n {\n key: this.getContentKey(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD),\n value: this.getContentValue(BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD)\n }\n ];\n }\n getContentKey = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return (this.series as BoxPlotSeries).getOutliersField();\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return minField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return maxField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return medianField;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return q1Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return q3Field;\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return seriesField;\n }\n }\n\n return null;\n };\n\n getContentValue = (contentType: BOX_PLOT_TOOLTIP_KEYS) => (datum: any) => {\n if (this.isOutlierMark(datum)) {\n if (contentType === BOX_PLOT_TOOLTIP_KEYS.OUTLIER) {\n //异常值mark\n return datum[BOX_PLOT_OUTLIER_VALUE_FIELD];\n } else if (contentType === BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD) {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n return null;\n }\n\n switch (contentType) {\n case BOX_PLOT_TOOLTIP_KEYS.MIN: {\n const minField = (this.series as BoxPlotSeries).getMinField();\n return datum[minField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MAX: {\n const maxField = (this.series as BoxPlotSeries).getMaxField();\n return datum[maxField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.MEDIAN: {\n const medianField = (this.series as BoxPlotSeries).getMedianField();\n return datum[medianField];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q1: {\n const q1Field = (this.series as BoxPlotSeries).getQ1Field();\n return datum[q1Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.Q3: {\n const q3Field = (this.series as BoxPlotSeries).getQ3Field();\n return datum[q3Field];\n }\n case BOX_PLOT_TOOLTIP_KEYS.SERIES_FIELD: {\n const seriesField = (this.series as BoxPlotSeries).getSeriesField();\n return datum[seriesField];\n }\n }\n\n return null;\n };\n shapeColorCallback = (datum: Datum) => {\n const shaftShape = (this.series as BoxPlotSeries).getShaftShape();\n return shaftShape === 'line'\n ? (this.series.getMarkInName('boxPlot').getAttribute('stroke' as any, datum) as any)\n : (this.series.getMarkInName('boxPlot').getAttribute('fill' as any, datum) as any);\n };\n\n getOutlierFillColor = (datum: Datum) => {\n const outliersStyle = (this.series as BoxPlotSeries).getOutliersStyle();\n return outliersStyle?.fill ?? (this.series.getMarkInName('outlier').getAttribute('fill' as any, datum) as any);\n };\n isOutlierMark = (datum: Datum) => {\n return isValid(datum[BOX_PLOT_OUTLIER_VALUE_FIELD]);\n };\n}\n","export function isHorizontal(direction: string) {\n return direction === 'horizontal';\n}\n\nexport function isVertical(direction: string) {\n return direction === 'vertical';\n}\n\nexport function isValidDirection(direction: string) {\n return direction === 'vertical' || direction === 'horizontal';\n}\n\nexport function isValidPosition(position: string) {\n return position === 'top' || position === 'bottom' || position === 'left' || position === 'right';\n}\n\nexport function isHorizontalPosition(position: string) {\n return position === 'top' || position === 'bottom';\n}\n","import { has, isNil, isBoolean, isFunction, isEqual } from '@visactor/vutils';\nimport type {\n IGlyphElement,\n IGlyphMark,\n MarkElementItem,\n MarkSpec,\n IGlyphMeta,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport { cloneTransformAttributes, transformAttributes } from './attributes/transform';\nimport { BridgeElementKey, CollectionMarkType } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType } from './enums';\nimport { Element } from './element';\nimport { invokeEncoderToItems } from './mark/encode';\nimport type { IGraphicAttribute, IGlyph } from '@visactor/vrender-core';\n\nexport class GlyphElement extends Element implements IGlyphElement {\n declare graphicItem: IGlyph;\n\n declare mark: IGlyphMark;\n protected glyphGraphicItems: { [markName: string]: any };\n\n private glyphMeta: IGlyphMeta;\n\n constructor(mark: IGlyphMark) {\n super(mark);\n this.glyphMeta = this.mark.getGlyphMeta();\n }\n\n getGlyphGraphicItems() {\n return this.glyphGraphicItems;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n\n this.graphicItem = this.mark.addGraphicItem(attributes, this.groupKey) as IGlyph;\n this.graphicItem[BridgeElementKey] = this;\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n\n const glyphMarks = this.glyphMeta.getMarks();\n this.glyphGraphicItems = {};\n this.graphicItem.getSubGraphic().forEach((graphic: any) => {\n const markType = glyphMarks[graphic.name];\n this.glyphGraphicItems[graphic.name] = graphic;\n graphic.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(markType, attributes, this, graphic.name);\n return graphicAttributes;\n };\n });\n\n this.clearGraphicAttributes();\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n\n const stateAnimationEnable = isBoolean(hasAnimation) ? hasAnimation : this.hasStateAnimation();\n\n this.graphicItem.glyphStateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n\n const encoder = isRuntimeState\n ? {\n ...(this.mark.getSpec() as MarkSpec).encode?.[stateName],\n ...this.runtimeStatesEncoder[stateName]\n }\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n const glyphStateAttributes = {} as {\n attributes: Partial;\n subAttributes: Partial[];\n };\n\n if (!encoder) {\n return glyphStateAttributes;\n }\n\n if (isFunction(encoder)) {\n glyphStateAttributes.attributes = (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n return glyphStateAttributes;\n }\n\n if (!isRuntimeState && this.graphicItem.glyphStates?.[stateName]) {\n return this.graphicItem.glyphStates[stateName];\n }\n\n if (encoder) {\n const item = this.items[0];\n const targetItems = [Object.assign({}, item, { nextAttrs: {} })];\n\n invokeEncoderToItems(this, targetItems, encoder, (this.mark as any).parameters());\n this.coordinateTransformEncode(targetItems);\n\n glyphStateAttributes.attributes = targetItems[0].nextAttrs;\n\n if (!this.graphicItem.glyphStates) {\n this.graphicItem.glyphStates = { [stateName]: glyphStateAttributes };\n } else if (!this.graphicItem.glyphStates[stateName]) {\n this.graphicItem.glyphStates[stateName] = glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n };\n\n encodeGraphic() {\n this.coordinateTransformEncode(this.items);\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n const isGraphicInit = !this.graphicItem;\n if (!this.graphicItem) {\n this.initGraphicItem();\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n }\n\n if (this.diffState === DiffState.enter || isGraphicInit) {\n // apply default encoder when enter or graphic item is created\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(true);\n this.applyGraphicAttributes(graphicAttributes);\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n } else {\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n // 更新数据流后,states计算不缓存\n graphicItem.states = {};\n });\n this.useStates(this.states);\n }\n\n // clear item attributes\n this.items.map(item => {\n item.nextAttrs = {};\n });\n }\n\n encodeCustom(nextAttrs?: any): { [markName: string]: any } {\n let customEncodeValues: { [markName: string]: any } = {};\n const channelEncoder = this.glyphMeta.getChannelEncoder();\n const functionEncoder = this.glyphMeta.getFunctionEncoder();\n\n if (functionEncoder) {\n customEncodeValues = functionEncoder.call(\n null,\n Object.assign({}, this.graphicItem?.attribute, nextAttrs),\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n }\n if (channelEncoder) {\n // TODO: maybe delete origin encode value?\n let allAttrs: any;\n Object.keys(channelEncoder).forEach(channel => {\n if (!isNil(nextAttrs[channel])) {\n if (!allAttrs) {\n allAttrs = Object.assign({}, this.graphicItem?.attribute, nextAttrs);\n }\n const encodeResult = channelEncoder[channel].call(\n null,\n channel,\n nextAttrs[channel],\n allAttrs,\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n Object.keys(encodeResult ?? {}).forEach(markName => {\n customEncodeValues[markName] = Object.assign(customEncodeValues[markName] ?? {}, encodeResult[markName]);\n });\n }\n });\n }\n return customEncodeValues;\n }\n\n private encodeDefault() {\n const defaultEncodeValues: { [markName: string]: any } = {};\n // apply default encode\n if (this.glyphMeta.getDefaultEncoder()) {\n const defaultEncodeResult = this.glyphMeta\n .getDefaultEncoder()\n .call(null, this.getDatum(), this, this.mark.getGlyphConfig());\n Object.assign(defaultEncodeValues, defaultEncodeResult);\n }\n return defaultEncodeValues;\n }\n\n private _onGlyphAttributeUpdate(first: boolean = false) {\n return (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const glyphMarks = this.glyphMeta.getMarks();\n\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n\n // apply default encode\n const defaultEncodeValues = first ? this.encodeDefault() : null;\n // apply custom encode\n const customEncodeValues = this.encodeCustom(attributes);\n\n Object.keys(glyphMarks).forEach(markName => {\n const markType = glyphMarks[markName];\n const graphicItem = this.glyphGraphicItems[markName];\n const customAttributes = customEncodeValues?.[markName];\n const additionalAttributes = Object.assign({}, customAttributes);\n if (first) {\n // apply default attributes when visual channel is not set\n const defaultAttributes = defaultEncodeValues?.[markName];\n Object.keys(defaultAttributes ?? {}).forEach(key => {\n if (!has(this.items[0].nextAttrs, key) && !has(additionalAttributes, key)) {\n additionalAttributes[key] = defaultAttributes[key];\n }\n });\n }\n const glyphAttributes = Object.assign({}, cloneTransformAttributes(markType, attributes), additionalAttributes);\n const glyphItems = this._generateGlyphItems(markType, this.items, glyphAttributes);\n this.coordinateTransformEncode(glyphItems);\n const graphicAttributes = this.transformElementItems(glyphItems, markType);\n\n this.applyGlyphGraphicAttributes(graphicAttributes, markName, graphicItem);\n\n if (markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n graphicItem.datum = glyphItems[0].datum;\n }\n });\n\n return graphicAttributes;\n };\n }\n\n private _generateGlyphItems(markType: MarkType, items: MarkElementItem[], additionalAttributes: any) {\n const glyphItems = items.map(item => Object.assign({}, item, { nextAttrs: additionalAttributes }));\n\n if ((CollectionMarkType as string[]).includes(markType) && this.mark.getSpec().enableSegments) {\n // segment mark require all items to apply additional attributes\n glyphItems.forEach((glyphItem, index) => {\n glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);\n });\n }\n\n return glyphItems;\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false, markName?: any) {\n if (!this.graphicItem) {\n return undefined;\n }\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n if (prev && has(prevGraphicAttributes, channel)) {\n return prevGraphicAttributes[channel];\n }\n\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.attribute[channel];\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n if (final) {\n finalGraphicAttributes[channel] = value;\n }\n if (!has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n }\n\n graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n Object.keys(attributes).forEach(key => {\n if (final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (!has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = graphicItem.attribute[key];\n }\n });\n\n graphicItem.setAttributes(attributes);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }, markName?: string) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n for (const key in graphicAttributes) {\n if (!has(finalGraphicAttributes, key) || !isEqual(finalGraphicAttributes[key], graphicAttributes[key])) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n protected applyGlyphGraphicAttributes(graphicAttributes: any, markName: string, graphicItem: any): void {\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes, markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName) ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName) ?? {};\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes, markName);\n this.setPrevGraphicAttributes(prevGraphicAttributes, markName);\n this.setFinalGraphicAttributes(finalGraphicAttributes, markName);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n graphicItem.setAttributes(nextGraphicAttributes);\n } else {\n graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getFinalGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.finalAttrs = attributes;\n }\n\n getPrevGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.prevAttrs = attributes;\n }\n\n getNextGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n });\n }\n\n clearGraphicAttributes() {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n this.setFinalGraphicAttributes(null);\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes(null, markName);\n this.setNextGraphicAttributes(null, markName);\n this.setFinalGraphicAttributes(null, markName);\n });\n }\n\n remove() {\n this.glyphGraphicItems = null;\n super.remove();\n }\n\n release() {\n if (this.glyphGraphicItems) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n graphicItem[BridgeElementKey] = null;\n });\n this.glyphGraphicItems = null;\n }\n super.release();\n }\n}\n","import { GrammarMarkType } from '../graph/enums';\nimport type { IGlyphMark, IGroupMark, IView, GlyphMarkSpec, IGlyphMeta } from '../types';\nimport { createGlyphGraphicItem } from '../graph/util/graphic';\nimport { Mark } from './mark';\nimport { Factory } from '../core/factory';\nimport { GlyphElement } from '../graph/glyph-element';\n\nexport class GlyphMark extends Mark implements IGlyphMark {\n static markType = GrammarMarkType.glyph;\n protected declare spec: GlyphMarkSpec;\n declare markType: GrammarMarkType.glyph;\n readonly glyphType: string;\n\n private glyphMeta: IGlyphMeta;\n\n constructor(view: IView, glyphType: string, group?: IGroupMark) {\n super(view, GrammarMarkType.glyph, group);\n this.glyphType = glyphType;\n this.glyphMeta = Factory.getGlyph(glyphType);\n }\n\n configureGlyph(config: any) {\n this.spec.glyphConfig = config;\n this.commit();\n return this;\n }\n\n getGlyphMeta() {\n return this.glyphMeta;\n }\n\n getGlyphConfig() {\n return this.spec.glyphConfig;\n }\n\n addGraphicItem(attrs: any, groupKey?: string) {\n const graphicItem = createGlyphGraphicItem(this, this.glyphMeta, attrs);\n return super.addGraphicItem(attrs, groupKey, graphicItem);\n }\n\n createElement() {\n return new GlyphElement(this);\n }\n}\nexport const registerGlyphMark = () => {\n Factory.registerMark(GrammarMarkType.glyph, GlyphMark);\n};\n","import { isValidNumber } from '@visactor/vutils';\nimport type {\n BarBoxPlotEncoderSpec,\n BoxPlotEncoderSpec,\n IAnimationParameters,\n IGlyphElement,\n TypeAnimation\n} from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerRectGraphic, registerRuleGraphic } from '../graph/mark/graphic';\nimport { isHorizontal } from '@visactor/vgrammar-util';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport interface IBoxplotScaleAnimationOptions {\n center?: number;\n}\n\nconst scaleIn = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', false);\n const y = element.getGraphicAttribute('y', false);\n const min = element.getGraphicAttribute('min', false);\n const max = element.getGraphicAttribute('max', false);\n const q1 = element.getGraphicAttribute('q1', false);\n const q3 = element.getGraphicAttribute('q3', false);\n const median = element.getGraphicAttribute('median', false);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.from.min = center;\n animateAttributes.to.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.from.max = center;\n animateAttributes.to.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.from.q1 = center;\n animateAttributes.to.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.from.q3 = center;\n animateAttributes.to.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.from.median = center;\n animateAttributes.to.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst scaleOut = (\n computeCenter: (\n element: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n ) => number\n): TypeAnimation => {\n return (\n element: IGlyphElement,\n options: IBoxplotScaleAnimationOptions,\n animationParameters: IAnimationParameters\n ) => {\n const direction =\n element.getGraphicAttribute('direction', false) ?? element.mark.getGlyphConfig()?.direction ?? 'vertical';\n const center = computeCenter(element, direction, options);\n if (!isValidNumber(center)) {\n return {};\n }\n const x = element.getGraphicAttribute('x', true);\n const y = element.getGraphicAttribute('y', true);\n const min = element.getGraphicAttribute('min', true);\n const max = element.getGraphicAttribute('max', true);\n const q1 = element.getGraphicAttribute('q1', true);\n const q3 = element.getGraphicAttribute('q3', true);\n const median = element.getGraphicAttribute('median', true);\n const animateAttributes: any = { from: { x, y }, to: { x, y } };\n if (isValidNumber(min)) {\n animateAttributes.to.min = center;\n animateAttributes.from.min = min;\n }\n if (isValidNumber(max)) {\n animateAttributes.to.max = center;\n animateAttributes.from.max = max;\n }\n if (isValidNumber(q1)) {\n animateAttributes.to.q1 = center;\n animateAttributes.from.q1 = q1;\n }\n if (isValidNumber(q3)) {\n animateAttributes.to.q3 = center;\n animateAttributes.from.q3 = q3;\n }\n if (isValidNumber(median)) {\n animateAttributes.to.median = center;\n animateAttributes.from.median = median;\n }\n return animateAttributes;\n };\n};\n\nconst computeBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (options && isValidNumber(options.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.x;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.x;\n\n const boxWidth = glyphElement.getGraphicAttribute('width', false, 'box');\n const boxX = glyphElement.getGraphicAttribute('x', false, 'box');\n q1 = boxX;\n q3 = boxX + boxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n max = glyphElement.getGraphicAttribute('points', false, 'max')?.[0]?.y;\n min = glyphElement.getGraphicAttribute('points', false, 'min')?.[0]?.y;\n\n const boxHeight = glyphElement.getGraphicAttribute('height', false, 'box');\n const boxY = glyphElement.getGraphicAttribute('y', false, 'box');\n q1 = boxY;\n q3 = boxY + boxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n shaft: {},\n box: {},\n max: {},\n min: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const boxWidth = encodeValues.boxWidth ?? element.getGraphicAttribute('boxWidth', false);\n const boxHeight = encodeValues.boxHeight ?? element.getGraphicAttribute('boxHeight', false);\n const ruleWidth = encodeValues.ruleWidth ?? element.getGraphicAttribute('ruleWidth', false);\n const ruleHeight = encodeValues.ruleHeight ?? element.getGraphicAttribute('ruleHeight', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(boxHeight)) {\n Object.assign(attributes.box, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n Object.assign(attributes.median, { y: y - boxHeight / 2, y1: y + boxHeight / 2 });\n } else {\n // median rule always has the same length with box rect\n Object.assign(attributes.box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(ruleHeight)) {\n Object.assign(attributes.max, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n Object.assign(attributes.min, { y: y - ruleHeight / 2, y1: y + ruleHeight / 2 });\n } else {\n Object.assign(attributes.max, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.min, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(boxWidth)) {\n Object.assign(attributes.box, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n Object.assign(attributes.median, { x: x - boxWidth / 2, x1: x + boxWidth / 2 });\n } else {\n Object.assign(attributes.box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(ruleWidth)) {\n Object.assign(attributes.max, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n Object.assign(attributes.min, { x: x - ruleWidth / 2, x1: x + ruleWidth / 2 });\n } else {\n Object.assign(attributes.max, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.min, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const boxplotScaleIn = scaleIn(computeBoxplotCenter);\nexport const boxplotScaleOut = scaleOut(computeBoxplotCenter);\n\nexport function registerBoxplotGlyph() {\n Factory.registerGlyph('boxplot', {\n shaft: 'rule',\n box: 'rect',\n max: 'rule',\n min: 'rule',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'boxWidth',\n 'boxHeight',\n 'ruleWidth',\n 'ruleHeight'\n ])\n .registerFunctionEncoder(encodeBoxplotSize)\n .registerChannelEncoder('x', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (config && isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { x: encodeValue, x1: encodeValue }\n };\n })\n .registerChannelEncoder('y', (channel, encodeValue, encodeValues, datum, element, config) => {\n if (!config || !isHorizontal(config.direction)) {\n return null;\n }\n return {\n shaft: { y: encodeValue, y1: encodeValue }\n };\n })\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x: encodeValue } } : { box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction) ? { box: { x1: encodeValue } } : { box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x: encodeValue },\n min: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y: encodeValue },\n min: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n shaft: { x1: encodeValue },\n max: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n shaft: { y1: encodeValue },\n max: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? {\n median: { x: encodeValue, x1: encodeValue, visible: true }\n }\n : {\n median: { y: encodeValue, y1: encodeValue, visible: true }\n };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const defaultAnchor =\n config && isHorizontal(config.direction)\n ? [(encodeValues.min + encodeValues.max) / 2, encodeValues.y]\n : [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n const anchor = encodeValues.anchor ?? defaultAnchor;\n return {\n shaft: { angle: encodeValue, anchor },\n box: { angle: encodeValue, anchor },\n max: { angle: encodeValue, anchor },\n min: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n max: { visible: false },\n min: { visible: false },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('boxplotScaleIn', boxplotScaleIn);\n Factory.registerAnimationType('boxplotScaleOut', boxplotScaleOut);\n registerGlyphMark();\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n\nconst computeBarBoxplotCenter = (\n glyphElement: IGlyphElement,\n direction: 'vertical' | 'horizontal',\n options: IBoxplotScaleAnimationOptions\n) => {\n if (isValidNumber(options?.center)) {\n return options.center;\n }\n let median: number;\n let max: number;\n let min: number;\n let q1: number;\n let q3: number;\n if (isHorizontal(direction)) {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.x;\n\n const minMaxBoxWidth = glyphElement.getGraphicAttribute('width', false, 'minMaxBox');\n const minMaxBoxBoxX = glyphElement.getGraphicAttribute('x', false, 'minMaxBox');\n min = minMaxBoxBoxX;\n max = minMaxBoxBoxX + minMaxBoxWidth;\n\n const q1q3BoxWidth = glyphElement.getGraphicAttribute('width', false, 'q1q3Box');\n const q1q3BoxX = glyphElement.getGraphicAttribute('x', false, 'q1q3Box');\n q1 = q1q3BoxX;\n q3 = q1q3BoxX + q1q3BoxWidth;\n } else {\n median = glyphElement.getGraphicAttribute('points', false, 'median')?.[0]?.y;\n\n const minMaxBoxHeight = glyphElement.getGraphicAttribute('height', false, 'minMaxBox');\n const minMaxBoxBoxY = glyphElement.getGraphicAttribute('y', false, 'minMaxBox');\n min = minMaxBoxBoxY;\n max = minMaxBoxBoxY + minMaxBoxHeight;\n\n const q1q3BoxHeight = glyphElement.getGraphicAttribute('height', false, 'q1q3Box');\n const q1q3BoxY = glyphElement.getGraphicAttribute('y', false, 'q1q3Box');\n q1 = q1q3BoxY;\n q3 = q1q3BoxY + q1q3BoxHeight;\n }\n\n if (isValidNumber(median)) {\n return median;\n }\n if (isValidNumber(q1) && isValidNumber(q3)) {\n return (q1 + q3) / 2;\n }\n if (isValidNumber(max) && isValidNumber(min)) {\n return (max + min) / 2;\n }\n if (isValidNumber(min)) {\n return min;\n }\n if (isValidNumber(max)) {\n return max;\n }\n return NaN;\n};\n\nconst encodeBarBoxplotSize = (encodeValues: any, datum: any, element: IGlyphElement, config: any) => {\n const attributes = {\n minMaxBox: {},\n q1q3Box: {},\n median: {}\n };\n\n const x = encodeValues.x ?? element.getGraphicAttribute('x', false);\n const y = encodeValues.y ?? element.getGraphicAttribute('y', false);\n const width = encodeValues.width ?? element.getGraphicAttribute('width', false);\n const minMaxWidth = encodeValues.minMaxWidth ?? element.getGraphicAttribute('minMaxWidth', false);\n const q1q3Width = encodeValues.q1q3Width ?? element.getGraphicAttribute('q1q3Width', false);\n const height = encodeValues.height ?? element.getGraphicAttribute('height', false);\n const minMaxHeight = encodeValues.minMaxHeight ?? element.getGraphicAttribute('minMaxHeight', false);\n const q1q3Height = encodeValues.q1q3Height ?? element.getGraphicAttribute('q1q3Height', false);\n\n if (config && isHorizontal(config.direction)) {\n if (isValidNumber(minMaxHeight)) {\n Object.assign(attributes.minMaxBox, { y: y - minMaxHeight / 2, y1: y + minMaxHeight / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { y: y - height / 2, y1: y + height / 2 });\n }\n if (isValidNumber(q1q3Height)) {\n Object.assign(attributes.q1q3Box, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n Object.assign(attributes.median, { y: y - q1q3Height / 2, y1: y + q1q3Height / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { y: y - height / 2, y1: y + height / 2 });\n Object.assign(attributes.median, { y: y - height / 2, y1: y + height / 2 });\n }\n } else {\n if (isValidNumber(minMaxWidth)) {\n Object.assign(attributes.minMaxBox, { x: x - minMaxWidth / 2, x1: x + minMaxWidth / 2 });\n } else {\n Object.assign(attributes.minMaxBox, { x: x - width / 2, x1: x + width / 2 });\n }\n if (isValidNumber(q1q3Width)) {\n Object.assign(attributes.q1q3Box, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n Object.assign(attributes.median, { x: x - q1q3Width / 2, x1: x + q1q3Width / 2 });\n } else {\n // median rule always has the same length with q1q3box rect\n Object.assign(attributes.q1q3Box, { x: x - width / 2, x1: x + width / 2 });\n Object.assign(attributes.median, { x: x - width / 2, x1: x + width / 2 });\n }\n }\n return attributes;\n};\n\nexport const barBoxplotScaleIn = scaleIn(computeBarBoxplotCenter);\nexport const barBoxplotScaleOut = scaleOut(computeBarBoxplotCenter);\n\nexport function registerBarBoxplotGlyph() {\n Factory.registerGlyph('barBoxplot', {\n minMaxBox: 'rect',\n q1q3Box: 'rect',\n median: 'rule'\n })\n .registerProgressiveChannels([\n 'x',\n 'y',\n 'q1',\n 'q3',\n 'min',\n 'max',\n 'median',\n 'angle',\n 'width',\n 'height',\n 'minMaxWidth',\n 'q1q3Width',\n 'minMaxHeight',\n 'q1q3Height'\n ])\n .registerFunctionEncoder(encodeBarBoxplotSize)\n .registerChannelEncoder('q1', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x: encodeValue } }\n : { q1q3Box: { y: encodeValue } };\n })\n .registerChannelEncoder('q3', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { q1q3Box: { x1: encodeValue } }\n : { q1q3Box: { y1: encodeValue } };\n })\n .registerChannelEncoder('min', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x: encodeValue } }\n : { minMaxBox: { y: encodeValue } };\n })\n .registerChannelEncoder('max', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { minMaxBox: { x1: encodeValue } }\n : { minMaxBox: { y1: encodeValue } };\n })\n .registerChannelEncoder('median', (channel, encodeValue, encodeValues, datum, element, config) => {\n return config && isHorizontal(config.direction)\n ? { median: { x: encodeValue, x1: encodeValue, visible: true } }\n : { median: { y: encodeValue, y1: encodeValue, visible: true } };\n })\n .registerChannelEncoder('angle', (channel, encodeValue, encodeValues, datum, element, config) => {\n const anchor = encodeValues.anchor ?? [encodeValues.x, (encodeValues.min + encodeValues.max) / 2];\n return {\n minMaxBox: { angle: encodeValue, anchor },\n q1q3Box: { angle: encodeValue, anchor },\n median: { angle: encodeValue, anchor }\n };\n })\n .registerChannelEncoder('lineWidth', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 }\n };\n })\n .registerChannelEncoder('minMaxFillOpacity', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { fillOpacity: encodeValue }\n };\n })\n .registerChannelEncoder('stroke', (channel, encodeValue, encodeValues, datum, element, config) => {\n return {\n minMaxBox: { stroke: false },\n q1q3Box: { stroke: false }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n minMaxBox: { lineWidth: 0 },\n q1q3Box: { lineWidth: 0 },\n median: { visible: false }\n };\n });\n\n Factory.registerAnimationType('barBoxplotScaleIn', barBoxplotScaleIn);\n Factory.registerAnimationType('barBoxplotScaleOut', barBoxplotScaleOut);\n registerGlyphMark();\n registerGlyphGraphic();\n registerRectGraphic();\n registerRuleGraphic();\n}\n","import { Factory } from './../core/factory';\nimport type { IBoxPlotMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerBarBoxplotGlyph, registerBoxplotGlyph } from '@visactor/vgrammar-core';\nimport type { IBoxPlotMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\n\nconst BOX_PLOT_GLYPH_TYPE = 'boxplot';\nconst BAR_BOX_PLOT_GLYPH_TYPE = 'barBoxplot';\n\nexport class BoxPlotMark extends BaseMark implements IBoxPlotMark {\n static readonly type = MarkTypeEnum.boxPlot;\n readonly type = BoxPlotMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n lineWidth: 2,\n boxWidth: 30,\n shaftWidth: 20,\n shaftShape: 'line'\n };\n return defaultStyle;\n }\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const shaftShape = this.getStyle('shaftShape');\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = shaftShape === 'bar' ? BAR_BOX_PLOT_GLYPH_TYPE : BOX_PLOT_GLYPH_TYPE;\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerBoxPlotMark = () => {\n Factory.registerMark(BoxPlotMark.type, BoxPlotMark);\n registerBoxplotGlyph();\n registerBarBoxplotGlyph();\n};\n","/* eslint-disable no-duplicate-imports */\nimport { AttributeLevel } from '../../constant/attribute';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { PREFIX } from '../../constant/base';\nimport type { IModelEvaluateOption, IModelInitOption } from '../../model/interface';\nimport type { BoxPlotShaftShape, IOutlierMarkSpec, Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { valueInScaleRange } from '../../util/scale';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IBoxPlotSeriesSpec } from './interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport { SeriesData } from '../base/series-data';\nimport { foldOutlierData } from '../../data/transforms/box-plot';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\nimport { BoxPlotSeriesTooltipHelper } from './tooltip-helper';\nimport { addVChartProperty } from '../../data/transforms/add-property';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerScaleInOutAnimation } from '../../animation/config';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { registerBoxPlotMark } from '../../mark/box-plot';\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { boxPlotSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IBoxPlotMark, IMark, ISymbolMark } from '../../mark/interface';\nimport { merge, isNumber } from '@visactor/vutils';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nconst DEFAULT_STROKE_WIDTH = 2;\nconst DEFAULT_SHAFT_FILL_OPACITY = 0.5;\nconst DEFAULT_SHAFT_SHAPE = 'line';\nexport const DEFAULT_FILL_COLOR = '#FFF';\nexport const DEFAULT_STROKE_COLOR = '#000';\n\nconst DEFAULT_OUTLIER_SIZE = 10;\n\nexport class BoxPlotSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.boxPlot;\n type = SeriesTypeEnum.boxPlot;\n\n static readonly mark: SeriesMarkMap = boxPlotSeriesMark;\n\n protected _minField: string;\n getMinField() {\n return this._minField;\n }\n protected _maxField: string;\n getMaxField() {\n return this._maxField;\n }\n protected _q1Field: string;\n getQ1Field() {\n return this._q1Field;\n }\n protected _medianField: string;\n getMedianField() {\n return this._medianField;\n }\n protected _q3Field: string;\n getQ3Field() {\n return this._q3Field;\n }\n protected _outliersField: string;\n getOutliersField() {\n return this._outliersField;\n }\n protected _lineWidth: number;\n protected _boxWidth: number;\n protected _shaftShape: BoxPlotShaftShape;\n getShaftShape() {\n return this._shaftShape;\n }\n protected _shaftWidth: number;\n protected _boxFillColor: string;\n getBoxFillColor() {\n return this._boxFillColor;\n }\n protected _strokeColor: string;\n getStrokeColor() {\n return this._strokeColor;\n }\n protected _shaftFillOpacity: number;\n protected _outliersStyle: IOutlierMarkSpec;\n getOutliersStyle() {\n return this._outliersStyle;\n }\n protected _outlierDataView: SeriesData;\n\n private _autoBoxWidth: number;\n\n /**\n * @override\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const boxPlotStyle: any = this._spec.boxPlot?.style ?? {};\n this._minField = this._spec.minField;\n this._maxField = this._spec.maxField;\n this._q1Field = this._spec.q1Field;\n this._medianField = this._spec.medianField;\n this._q3Field = this._spec.q3Field;\n this._outliersField = this._spec.outliersField;\n this._lineWidth = boxPlotStyle.lineWidth ?? DEFAULT_STROKE_WIDTH;\n this._boxWidth = boxPlotStyle.boxWidth;\n this._shaftShape = boxPlotStyle.shaftShape ?? DEFAULT_SHAFT_SHAPE;\n this._shaftWidth = boxPlotStyle.shaftWidth;\n this._boxFillColor = boxPlotStyle.boxFill;\n this._strokeColor = boxPlotStyle.stroke;\n\n this._shaftFillOpacity =\n this._shaftShape === 'bar' ? boxPlotStyle.shaftFillOpacity ?? DEFAULT_SHAFT_FILL_OPACITY : undefined;\n\n this._outliersStyle = this._spec.outliersStyle;\n }\n\n private _boxPlotMark?: IBoxPlotMark;\n private _outlierMark?: ISymbolMark;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._boxPlotMark = this._createMark(\n BoxPlotSeries.mark.boxPlot,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n progressive\n ) as IBoxPlotMark;\n this._outlierMark = this._createMark(\n BoxPlotSeries.mark.outlier,\n {\n key: DEFAULT_DATA_INDEX,\n groupKey: this._seriesField,\n dataView: this._outlierDataView.getDataView(),\n dataProductId: this._outlierDataView.getProductId()\n },\n progressive\n ) as ISymbolMark;\n }\n\n initMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n if (boxPlotMark) {\n const commonBoxplotStyles = {\n direction: this._direction,\n lineWidth: this._lineWidth,\n shaftShape: this._shaftShape,\n fill: this._boxFillColor ?? (this._shaftShape === 'line' ? DEFAULT_FILL_COLOR : this.getColorAttribute()),\n minMaxFillOpacity: this._shaftFillOpacity,\n stroke: this._strokeColor ?? (this._shaftShape === 'line' ? this.getColorAttribute() : DEFAULT_STROKE_COLOR)\n };\n\n const boxPlotMarkStyles =\n this._direction === Direction.horizontal\n ? {\n y: this.dataToPositionY.bind(this),\n ...commonBoxplotStyles,\n boxHeight: () => this._boxWidth ?? this._getMarkWidth(),\n ruleHeight: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Height: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxHeight: () => this._shaftWidth ?? this._getMarkWidth()\n }\n : {\n x: this.dataToPositionX.bind(this),\n ...commonBoxplotStyles,\n boxWidth: () => this._boxWidth ?? this._getMarkWidth(),\n ruleWidth: () => this._shaftWidth ?? this._getMarkWidth(),\n q1q3Width: () => this._boxWidth ?? this._getMarkWidth(),\n minMaxWidth: () => this._shaftWidth ?? this._getMarkWidth()\n };\n this.setMarkStyle(boxPlotMark, boxPlotMarkStyles, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n }\n\n const outlierMark = this._outlierMark;\n if (outlierMark) {\n this.setMarkStyle(\n outlierMark,\n {\n fill: this._outliersStyle?.fill ?? this.getColorAttribute(),\n size: isNumber(this._outliersStyle?.size) ? this._outliersStyle.size : DEFAULT_OUTLIER_SIZE,\n symbolType: 'circle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n initBoxPlotMarkStyle(): void {\n const boxPlotMark = this._boxPlotMark;\n const axisHelper = this._direction === Direction.horizontal ? this._xAxisHelper : this._yAxisHelper;\n if (boxPlotMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n this.setMarkStyle(\n boxPlotMark,\n {\n min: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._minField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q1: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q1Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n median: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._medianField), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n q3: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._q3Field), {\n bandPosition: this._bandPosition\n }),\n scale\n ),\n max: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, this._maxField), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n const outlierMark = this._outlierMark;\n if (outlierMark && axisHelper) {\n const { dataToPosition } = axisHelper;\n const scale = axisHelper?.getScale?.(0);\n const outlierMarkPositionChannel =\n this._direction === Direction.horizontal\n ? {\n y: this.dataToPositionY.bind(this),\n x: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n }\n : {\n x: this.dataToPositionX.bind(this),\n y: (datum: Datum) =>\n valueInScaleRange(\n dataToPosition(this.getDatumPositionValues(datum, BOX_PLOT_OUTLIER_VALUE_FIELD), {\n bandPosition: this._bandPosition\n }),\n scale\n )\n };\n this.setMarkStyle(outlierMark, outlierMarkPositionChannel, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);\n }\n }\n\n initData(): void {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'foldOutlierData', foldOutlierData);\n registerDataSetInstanceTransform(this._dataSet, 'addVChartProperty', addVChartProperty);\n\n const outlierDataView = new DataView(this._dataSet, { name: `${this.type}_outlier_${this.id}_data` });\n outlierDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n outlierDataView.name = `${PREFIX}_series_${this.id}_outlierData`;\n outlierDataView.transform({\n type: 'foldOutlierData',\n options: {\n dimensionField: this._direction === Direction.horizontal ? this._fieldY : this._fieldX,\n outliersField: this._outliersField\n }\n });\n\n outlierDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._outlierDataView = new SeriesData(this._option, outlierDataView);\n }\n\n compileData() {\n super.compileData();\n this._outlierDataView?.compile();\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n //init在axis初始化之后才被执行,此时axisHelper不为空\n this.initBoxPlotMarkStyle();\n }\n\n private _getMarkWidth() {\n if (this._autoBoxWidth) {\n return this._autoBoxWidth;\n }\n //获取自适应的图元宽度\n const bandAxisHelper = this._direction === Direction.horizontal ? this._yAxisHelper : this._xAxisHelper;\n const xField = this._direction === Direction.horizontal ? this._fieldY : this._fieldX;\n\n const innerBandWidth = bandAxisHelper.getBandwidth(xField.length - 1);\n const autoBoxWidth = innerBandWidth / xField.length;\n this._autoBoxWidth = autoBoxWidth;\n\n return this._autoBoxWidth;\n }\n\n onLayoutEnd(ctx: any) {\n super.onLayoutEnd(ctx);\n //每次布局结束,清除自适应宽度缓存\n this._autoBoxWidth = null;\n }\n\n private _initAnimationSpec(config: any = {}) {\n //将spec中的animation的type替换为箱型图的type\n const newConfig = merge({}, config);\n ['appear', 'enter', 'update', 'exit', 'disappear'].forEach(state => {\n if (newConfig[state] && newConfig[state].type === 'scaleIn') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleIn' : 'barBoxplotScaleIn';\n } else if (newConfig[state] && newConfig[state].type === 'scaleOut') {\n newConfig[state].type = this._shaftShape === 'line' ? 'boxplotScaleOut' : 'barBoxplotScaleOut';\n }\n });\n return newConfig;\n }\n\n initAnimation() {\n const animationParams = getGroupAnimationParams(this);\n\n if (this._boxPlotMark) {\n const newDefaultConfig = this._initAnimationSpec(Factory.getAnimationInKey('scaleInOut')?.());\n const newConfig = this._initAnimationSpec(\n userAnimationConfig(SeriesMarkNameEnum.boxPlot, this._spec, this._markAttributeContext)\n );\n this._boxPlotMark.setAnimationConfig(animationConfig(newDefaultConfig, newConfig, animationParams));\n }\n\n if (this._outlierMark) {\n const outlierMarkUserAnimation = {\n appear: (this._spec.animationAppear as IMarkAnimateSpec)?.symbol,\n disappear: (this._spec.animationDisappear as IMarkAnimateSpec)?.symbol,\n enter: (this._spec.animationEnter as IMarkAnimateSpec)?.symbol,\n exit: (this._spec.animationExit as IMarkAnimateSpec)?.symbol,\n update: (this._spec.animationUpdate as IMarkAnimateSpec)?.symbol\n };\n this._outlierMark.setAnimationConfig(\n animationConfig(Factory.getAnimationInKey('scaleInOut')?.(), outlierMarkUserAnimation, animationParams)\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new BoxPlotSeriesTooltipHelper(this);\n this._boxPlotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._boxPlotMark);\n this._outlierMark && this._tooltipHelper.activeTriggerSet.mark.add(this._outlierMark);\n }\n\n getStatisticFields() {\n const fields = super.getStatisticFields();\n const outliersField = fields.find(f => f.key === this._outliersField);\n if (outliersField) {\n outliersField.operations = ['array-min', 'array-max'];\n }\n return fields;\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n //初次编译时,会传入空数据;待所有计算完成后,需要重新执行updateData更新数据\n super.onEvaluateEnd(ctx);\n this._outlierDataView.updateData();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._boxPlotMark];\n }\n}\n\nexport const registerBoxplotSeries = () => {\n registerBoxPlotMark();\n registerSymbolMark();\n registerScaleInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(BoxPlotSeries.type, BoxPlotSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IBoxPlotChartSpec } from './interface';\n\nexport class BoxPlotChartSpecTransformer<\n T extends IBoxPlotChartSpec = IBoxPlotChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const dataFields = [spec.maxField, spec.medianField, spec.q1Field, spec.q3Field, spec.minField, spec.outliersField];\n const seriesSpec = super._getDefaultSeriesSpec(spec, [\n 'boxPlot',\n 'minField',\n 'maxField',\n 'q1Field',\n 'medianField',\n 'q3Field',\n 'outliersField',\n 'outliersStyle'\n ]);\n seriesSpec.direction = spec.direction ?? Direction.vertical;\n seriesSpec[seriesSpec.direction === Direction.horizontal ? 'xField' : 'yField'] = dataFields;\n\n return seriesSpec;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n if (!spec.axes) {\n spec.axes = [\n {\n orient: 'bottom'\n },\n {\n orient: 'left'\n }\n ];\n }\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IBoxPlotChartSpec } from './interface';\nimport { registerBoxplotSeries } from '../../series/box-plot/box-plot';\nimport { Factory } from '../../core/factory';\nimport { BoxPlotChartSpecTransformer } from './box-plot-transformer';\nimport { BaseChart } from '../base';\n\nexport class BoxPlotChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.boxPlot;\n static readonly seriesType: string = SeriesTypeEnum.boxPlot;\n static readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly transformerConstructor = BoxPlotChartSpecTransformer;\n readonly type: string = ChartTypeEnum.boxPlot;\n readonly seriesType: string = SeriesTypeEnum.boxPlot;\n}\n\nexport const registerBoxplotChart = () => {\n registerBoxplotSeries();\n Factory.registerChart(BoxPlotChart.type, BoxPlotChart);\n};\n","import { isNil } from '@visactor/vutils';\nimport type { HierarchyNodeDatum } from './interface';\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach((node, index) => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n","import type { SankeyOptions, SankeyData } from '@visactor/vgrammar-sankey';\nimport { SankeyLayout } from '@visactor/vgrammar-sankey';\nimport { isArray, isNil } from '@visactor/vutils';\n\nexport interface ISankeyOpt extends SankeyOptions {\n targetField: string;\n sourceField: string;\n valueField: string;\n view: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\nexport const collectHierarchyField = (set: Set, data: any[], field: string) => {\n data.forEach((obj: any) => {\n if (!isNil(obj[field])) {\n set.add(obj[field]);\n }\n\n if (obj.children && obj.children.length > 0) {\n collectHierarchyField(set, obj.children, field); // 递归处理子节点\n }\n });\n};\n\nexport const sankeyFormat = (data: any[]): SankeyData[] => {\n if (!data || !isArray(data)) {\n return [] as SankeyData[];\n }\n\n if (data.length > 1) {\n /**\n * data structure for Fengshen:\n * [{id:’nodes’, values:[xxx]},{id:’links’, values:[xxx]}]\n */\n const updateData: SankeyData = {\n links: [],\n nodes: []\n };\n data.forEach((datum: any) => {\n if (datum.id === 'links' || datum.id === 'nodes') {\n updateData[datum.id] = datum.values;\n }\n });\n return [updateData];\n }\n /**\n * data structure:\n * [{nodes: [xxx], links: [xxx]}]\n */\n if (data[0]?.latestData) {\n return data[0].latestData;\n }\n return data;\n};\n\nexport const sankeyLayout = (data: SankeyData[], op: ISankeyOpt) => {\n if (!data || !op?.view || !data.length) {\n return [];\n }\n\n const view = op.view();\n\n if (\n view.x1 - view.x0 === 0 ||\n view.y1 - view.y0 === 0 ||\n view.x1 - view.x0 === -Infinity ||\n view.x1 - view.x0 === Infinity ||\n view.y1 - view.y0 === -Infinity ||\n view.y1 - view.y0 === Infinity\n ) {\n return [];\n }\n\n const originalData = data[0];\n\n if (op.sourceField !== 'source' || op.targetField !== 'target' || op.valueField !== 'value') {\n if ((originalData as any).links) {\n const updatedData: {}[] = [];\n\n (originalData as any).links.forEach((datum: any) => {\n const updatedDatum: any = {};\n for (const key in datum) {\n if (key === op.sourceField) {\n updatedDatum.source = datum[op.sourceField];\n } else if (key === op.targetField) {\n updatedDatum.target = datum[op.targetField];\n } else if (key === op.valueField) {\n updatedDatum.value = datum[op.valueField];\n } else {\n updatedDatum[key] = datum[key];\n }\n }\n updatedData.push(updatedDatum);\n });\n (originalData as any).links = updatedData;\n }\n }\n\n const layout = new SankeyLayout(op);\n\n const result = [];\n\n result.push(layout.layout(originalData, view));\n\n return result;\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyNodes = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].nodes ?? [];\n }\n\n return [];\n};\n","import type { SankeyData } from '@visactor/vgrammar-sankey';\nimport { isArray } from '@visactor/vutils';\n\nexport const sankeyLinks = (data: SankeyData) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n if (data[0]?.latestData && data[0].latestData.length && data[0].latestData[0]) {\n return data[0].latestData[0].links ?? [];\n }\n\n return [];\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isNumber } from '@visactor/vutils';\n\nexport class SankeySeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getDimensionData = (datum: any) => {\n if (datum.source) {\n if (isNumber(datum.source)) {\n const seriesKeys = this.series.getSeriesKeys();\n return seriesKeys[datum.source] + ' => ' + seriesKeys[datum.target];\n }\n return datum.source + ' => ' + datum.target;\n }\n return datum.datum ? datum.datum[this.series.getSpec().categoryField] : datum.key;\n };\n\n markTooltipValueCallback = (datum: Datum): string | undefined => {\n return datum.value;\n };\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\nimport type { ISankeyAnimationParams, SankeyAppearPreset } from './interface';\n\nexport const sankeyGrowIn = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthIn' : 'growHeightIn',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyGrowOut = (params: ISankeyAnimationParams, isOverall: boolean = true): IAnimationTypeConfig => {\n return {\n type: params.direction === Direction.horizontal ? 'growWidthOut' : 'growHeightOut',\n options: {\n overall: isOverall ? params.growFrom() : isOverall,\n orient: Direction.horizontal ? 'positive' : 'negative'\n }\n };\n};\n\nexport const sankeyNodePresetAnimation = (\n params: ISankeyAnimationParams,\n preset: SankeyAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return sankeyGrowIn(params);\n }\n default: {\n return sankeyGrowIn(params);\n }\n }\n};\n\nexport const sankeyLinkPresetAnimation = (preset: SankeyAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return { type: 'linkPathGrowIn' };\n }\n default: {\n return { type: 'linkPathGrowIn' };\n }\n }\n};\n\nexport const registerSankeyAnimation = () => {\n Factory.registerAnimation('sankeyNode', (params: ISankeyAnimationParams, preset: SankeyAppearPreset) => ({\n appear: sankeyNodePresetAnimation(params, preset),\n ...FadeInOutAnimation\n }));\n Factory.registerAnimation('sankeyLinkPath', (params: unknown, preset: SankeyAppearPreset) => ({\n appear: sankeyLinkPresetAnimation(preset),\n enter: { type: 'linkPathGrowIn' },\n exit: { type: 'linkPathGrowOut' },\n disappear: { type: 'linkPathGrowOut' }\n }));\n};\n","import type { IAnimationParameters, LinkPathEncoderSpec, TypeAnimation } from '../types';\nimport type { IElement } from '../types/element';\nimport { Factory } from '../core/factory';\nimport { isNil } from '@visactor/vutils';\nimport { registerGlyphGraphic, registerPathGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport interface LinkPathConfig {\n direction?: 'horizontal' | 'vertical' | 'LR' | 'RL' | 'TB' | 'BL' | 'radial';\n}\n\n// const isValidThickness = (thickness: number) => isValidNumber(thickness) && thickness > 1;\n// const hasValidThickness = (options: LinkPathEncodeValues) => isValidThickness(options.thickness);\n\nexport const getHorizontalPath = (options: LinkPathEncoderSpec, ratio?: number) => {\n const curvature = options.curvature ?? 0.5;\n const hasThickness = true;\n const thickness = typeof ratio === 'number' ? options.thickness * ratio : options.thickness;\n\n let x0 = options.x0;\n let x1 = options.x1;\n let y00 = options.y0;\n let y10 = options.y1;\n let cpx0 = x0 + curvature * (x1 - x0);\n let cpx1 = x1 + curvature * (x0 - x1);\n let formatter = (v: number) => v;\n\n if (options.round !== false) {\n x0 = Math.round(x0);\n x1 = Math.round(x1);\n y00 = Math.round(y00);\n y10 = Math.round(y10);\n cpx0 = Math.round(cpx0);\n cpx1 = Math.round(cpx1);\n formatter = Math.round;\n }\n const topPath =\n options.pathType === 'line'\n ? `M${x0},${y00}L${x1},${y10}`\n : options.pathType === 'polyline'\n ? `M${x0},${y00}L${cpx0},${y00}L${cpx0},${y10}L${x1},${y10}`\n : `M${x0},${y00}C${cpx0},${y00},${cpx1},${y10},${x1},${y10}`;\n\n if (!hasThickness) {\n // simplified to a single path\n return topPath;\n }\n\n if (options.align === 'center') {\n y00 = formatter(options.y0 - thickness / 2);\n y10 = formatter(options.y1 - thickness / 2);\n } else if (options.align === 'end') {\n y00 = formatter(options.y0 + options.thickness / 2 - thickness);\n y10 = formatter(options.y1 + options.thickness / 2 - thickness);\n } else {\n y00 = formatter(options.y0 - options.thickness / 2);\n y10 = formatter(options.y1 - options.thickness / 2);\n }\n\n const y01 = formatter(y00 + thickness);\n const y11 = formatter(y10 + thickness);\n\n const hasLength = Math.abs(x1 - x0) > 1e-6;\n const endArrowPath =\n options.endArrow && hasLength\n ? `L${x1},${formatter(y10 - thickness / 2)}L${formatter(x1 + thickness)},${formatter(\n (y10 + y11) / 2\n )}L${x1},${formatter(y11 + thickness / 2)}`\n : '';\n const startArrowPath =\n options.startArrow && hasLength\n ? `L${x0},${formatter(y01 + thickness / 2)}L${formatter(x0 - thickness)},${formatter(\n (y00 + y01) / 2\n )}L${x0},${formatter(y00 - thickness / 2)}`\n : '';\n\n if (options.pathType === 'line') {\n return `M${x0},${y00}L${x1},${y10}${endArrowPath}L${x1},${y11}L${x0},${y01}${startArrowPath}Z`;\n } else if (options.pathType === 'polyline') {\n return `M${x0},${y00}L${cpx0},${y00}L${cpx0},${y10}L${x1},${y10}\n ${endArrowPath}L${x1},${y11}L${cpx0},${y11}L${cpx0},${y01}L${x0},${y01}${startArrowPath}Z`;\n }\n\n return `M${x0},${y00}C${cpx0},${y00},${cpx1},${y10},${x1},${y10}\n ${endArrowPath}L${x1},${y11}C${cpx1},${y11},${cpx0},${y01},${x0},${y01}${startArrowPath}Z`;\n};\n\nexport const getVerticalPath = (options: LinkPathEncoderSpec, ratio?: number) => {\n const curvature = options.curvature ?? 0.5;\n const hasThickness = true;\n const thickness = typeof ratio === 'number' ? options.thickness * ratio : options.thickness;\n let y0 = options.y0;\n let y1 = options.y1;\n let x00 = options.x0;\n let x10 = options.x1;\n let cpy0 = y0 + curvature * (y1 - y0);\n let cpy1 = y1 + curvature * (y0 - y1);\n let formatter = (v: number) => v;\n\n if (options.round !== false) {\n formatter = Math.round;\n y0 = Math.round(y0);\n y1 = Math.round(y1);\n x00 = Math.round(x00);\n x10 = Math.round(x10);\n cpy0 = Math.round(cpy0);\n cpy1 = Math.round(cpy1);\n }\n const leftpath =\n options.pathType === 'line'\n ? `M${x00},${y0}L${x10},${y1}`\n : options.pathType === 'polyline'\n ? `M${x00},${y0}L${x00},${cpy0}L${x10},${cpy0}L${x10},${y1}`\n : `M${x00},${y0}C${x00},${cpy0},${x10},${cpy1},${x10},${y1}`;\n if (!hasThickness) {\n // simplified to a single path\n return leftpath;\n }\n\n if (options.align === 'center') {\n x00 = formatter(options.x0 - thickness / 2);\n x10 = formatter(options.x1 - thickness / 2);\n } else if (options.align === 'end') {\n x00 = formatter(options.x0 + options.thickness / 2 - thickness);\n x10 = formatter(options.x1 + options.thickness / 2 - thickness);\n } else {\n x00 = formatter(options.x0 - options.thickness / 2);\n x10 = formatter(options.x1 - options.thickness / 2);\n }\n\n const x01 = formatter(x00 + thickness);\n const x11 = formatter(x10 + thickness);\n\n const hasLength = Math.abs(y1 - y0) > 1e-6;\n const endArrowPath =\n options.endArrow && hasLength\n ? `L${formatter(x10 - thickness / 2)},${y1}L${formatter((x10 + x11) / 2)},${formatter(\n y1 + thickness\n )}L${formatter(x11 + thickness / 2)},${y1}`\n : '';\n const startArrowPath =\n options.startArrow && hasLength\n ? `L${formatter(x01 + thickness / 2)},${y0}L${formatter((x01 + x00) / 2)},${formatter(\n y0 - thickness\n )}L${formatter(x00 - thickness / 2)},${y0}`\n : '';\n\n if (options.pathType === 'line') {\n return `M${x00},${y0}L${x10},${y1}${endArrowPath}L${x11},${y1}L${x01},${y0}${startArrowPath}Z`;\n } else if (options.pathType === 'polyline') {\n return `M${x00},${y0}L${x00},${cpy0}L${x10},${cpy0}L${x10},${y1}\n ${endArrowPath}L${x11},${y1}L${x11},${cpy0}L${x01},${cpy0}L${x01},${y0}${startArrowPath}Z`;\n }\n\n return `M${x00},${y0}C${x00},${cpy0},${x10},${cpy1},${x10},${y1}\n ${endArrowPath}L${x11},${y1}C${x11},${cpy1},${x01},${cpy0},${x01},${y0}${startArrowPath}Z`;\n};\n\nconst encoder = (encodeValues: LinkPathEncoderSpec, datum: any, element: IElement, config: LinkPathConfig) => {\n const direction = encodeValues.direction ?? config?.direction;\n const parsePath = ['vertical', 'TB', 'BT'].includes(direction) ? getVerticalPath : getHorizontalPath;\n const isRatioShow = typeof encodeValues.ratio === 'number' && encodeValues.ratio >= 0 && encodeValues.ratio <= 1;\n\n const encodeChannels = Object.keys(encodeValues);\n // parse path when all required channels are included\n if (['x0', 'y0', 'x1', 'y1'].every(channel => encodeChannels.includes(channel))) {\n return {\n back: {\n path: isRatioShow ? parsePath(encodeValues, 1) : ''\n },\n front: {\n path: parsePath(encodeValues, isRatioShow ? encodeValues.ratio : 1)\n }\n };\n }\n\n return {};\n};\n\nconst linkPathGrowIn: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const linkValues: LinkPathEncoderSpec = {\n x0: element.getGraphicAttribute('x0', false),\n x1: element.getGraphicAttribute('x1', false),\n y0: element.getGraphicAttribute('y0', false),\n y1: element.getGraphicAttribute('y1', false),\n thickness: element.getGraphicAttribute('thickness', false),\n round: element.getGraphicAttribute('round', false),\n align: element.getGraphicAttribute('align', false),\n pathType: element.getGraphicAttribute('pathType', false),\n endArrow: element.getGraphicAttribute('endArrow', false),\n startArrow: element.getGraphicAttribute('startArrow', false)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(linkValues).forEach(key => {\n if (isNil(linkValues[key])) {\n delete linkValues[key];\n }\n });\n return {\n from: Object.assign({}, linkValues, { x1: linkValues.x0, y1: linkValues.y0 }),\n to: linkValues\n };\n};\n\nconst linkPathGrowOut: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const linkValues: LinkPathEncoderSpec = {\n x0: element.getGraphicAttribute('x0', true),\n x1: element.getGraphicAttribute('x1', true),\n y0: element.getGraphicAttribute('y0', true),\n y1: element.getGraphicAttribute('y1', true),\n thickness: element.getGraphicAttribute('thickness', true),\n round: element.getGraphicAttribute('round', true),\n align: element.getGraphicAttribute('align', true),\n pathType: element.getGraphicAttribute('pathType', true),\n endArrow: element.getGraphicAttribute('endArrow', true),\n startArrow: element.getGraphicAttribute('startArrow', true)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(linkValues).forEach(key => {\n if (isNil(linkValues[key])) {\n delete linkValues[key];\n }\n });\n return {\n from: linkValues,\n to: Object.assign({}, linkValues, { x1: linkValues.x0, y1: linkValues.y0 })\n };\n};\n\nconst linkPathUpdate: TypeAnimation = (\n element: IElement,\n options: any,\n animationParameters: IAnimationParameters\n) => {\n const bassLinkValues = {\n thickness: element.getGraphicAttribute('thickness', false),\n round: element.getGraphicAttribute('round', false),\n align: element.getGraphicAttribute('align', false),\n pathType: element.getGraphicAttribute('pathType', false),\n endArrow: element.getGraphicAttribute('endArrow', false),\n startArrow: element.getGraphicAttribute('startArrow', false)\n };\n // FIXME: undefined channel animation will cause vRender warning\n Object.keys(bassLinkValues).forEach(key => {\n if (isNil(bassLinkValues[key])) {\n delete bassLinkValues[key];\n }\n });\n const prevLinkValues: LinkPathEncoderSpec = Object.assign(\n {\n x0: element.getGraphicAttribute('x0', true),\n x1: element.getGraphicAttribute('x1', true),\n y0: element.getGraphicAttribute('y0', true),\n y1: element.getGraphicAttribute('y1', true),\n ...bassLinkValues\n },\n bassLinkValues\n );\n const nextLinkValues: LinkPathEncoderSpec = Object.assign(\n {\n x0: element.getGraphicAttribute('x0', false),\n x1: element.getGraphicAttribute('x1', false),\n y0: element.getGraphicAttribute('y0', false),\n y1: element.getGraphicAttribute('y1', false)\n },\n bassLinkValues\n );\n\n return {\n from: prevLinkValues,\n to: nextLinkValues\n };\n};\n\nexport const registerLinkPathGlyph = () => {\n Factory.registerGlyph('linkPath', {\n back: 'path',\n front: 'path'\n })\n .registerFunctionEncoder(encoder)\n .registerChannelEncoder('backgroundStyle', (channel, encodeValue) => {\n return {\n back: encodeValue\n };\n })\n .registerDefaultEncoder(() => {\n return {\n back: { zIndex: 0 },\n front: { zIndex: 1 }\n };\n });\n\n Factory.registerAnimationType('linkPathGrowIn', linkPathGrowIn);\n Factory.registerAnimationType('linkPathGrowOut', linkPathGrowOut);\n Factory.registerAnimationType('linkPathUpdate', linkPathUpdate);\n registerGlyphMark();\n registerGlyphGraphic();\n registerPathGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { ILinkPathMarkSpec } from '../typings/visual';\nimport type { ILinkPathMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerLinkPathGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport class LinkPathMark extends BaseMark implements ILinkPathMark {\n static readonly type = MarkTypeEnum.linkPath;\n readonly type = LinkPathMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n x0: 0,\n y0: 0,\n x1: 100,\n y1: 100,\n thickness: 1,\n round: true\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'linkPath';\n const direction = this.getStyle('direction');\n this._product = view\n .glyph(glyphType, group ?? view.rootMark)\n .id(id)\n .configureGlyph({ direction: direction });\n this._compiledProductId = id;\n }\n}\n\nexport const registerLinkPathMark = () => {\n registerLinkPathGlyph();\n Factory.registerMark(LinkPathMark.type, LinkPathMark as any);\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ISankeySeriesSpec, ISankeySeriesTheme } from './interface';\n\nexport class SankeySeriesSpecTransformer<\n T extends ISankeySeriesSpec = ISankeySeriesSpec,\n K extends ISankeySeriesTheme = ISankeySeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.node);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerSankeyTransforms } from '@visactor/vgrammar-sankey';\nimport type { Datum, IRectMarkSpec, ILinkPathMarkSpec, IComposedTextMarkSpec, StringOrNumber } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { ISankeyOpt } from '../../data/transforms/sankey';\nimport { sankeyFormat, sankeyLayout, collectHierarchyField } from '../../data/transforms/sankey';\nimport { sankeyNodes } from '../../data/transforms/sankey-nodes';\nimport { sankeyLinks } from '../../data/transforms/sankey-links';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { Event_Bubble_Level } from '../../constant/event';\nimport { SeriesData } from '../base/series-data';\nimport { SankeySeriesTooltipHelper } from './tooltip-helper';\nimport type { IBounds } from '@visactor/vutils';\nimport { Bounds, array, isNil, isValid, isNumber, isArray } from '@visactor/vutils';\nimport { registerSankeyAnimation } from './animation';\nimport type { ISankeySeriesSpec, SankeyLinkElement, ISankeyLabelSpec, ISankeyAnimationParams } from './interface';\nimport type { ExtendEventParam } from '../../event/interface';\nimport type { IElement, IGlyphElement, IMark as IVgrammarMark } from '@visactor/vgrammar-core';\nimport type { IMarkAnimateSpec } from '../../animation/spec';\nimport { ColorOrdinalScale } from '../../scale/color-ordinal-scale';\nimport { registerRectMark } from '../../mark/rect';\nimport { registerTextMark } from '../../mark/text';\nimport { registerLinkPathMark } from '../../mark/link-path';\nimport { sankeySeriesMark } from './constant';\nimport { flatten } from '../../data/transforms/flatten';\nimport type { SankeyNodeElement } from '@visactor/vgrammar-sankey';\nimport { Factory } from '../../core/factory';\nimport type { ILinkPathMark, IMark, IRectMark, ITextMark } from '../../mark/interface';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { addDataKey, initKeyMap } from '../../data/transforms/data-key';\nimport { SankeySeriesSpecTransformer } from './sankey-transformer';\nimport { getFormatFunction } from '../../component/util';\nimport type { ILabelSpec } from '../../component';\n\nexport class SankeySeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.sankey;\n type = SeriesTypeEnum.sankey;\n\n static readonly transformerConstructor = SankeySeriesSpecTransformer as any;\n readonly transformerConstructor = SankeySeriesSpecTransformer;\n\n static readonly mark: SeriesMarkMap = sankeySeriesMark;\n\n private _nodeMark: IRectMark;\n private _linkMark: ILinkPathMark;\n\n private _nodeLayoutZIndex = LayoutZIndex.Node;\n private _labelLayoutZIndex = LayoutZIndex.Label;\n\n protected _nodesSeriesData?: SeriesData;\n protected _linksSeriesData?: SeriesData;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n private _colorScale: IBaseScale;\n private _nodeList: (string | number)[];\n private _needClear: boolean;\n\n get direction() {\n return this._spec.direction ?? 'horizontal';\n }\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n this.setSeriesField(this._spec.seriesField ?? this._spec.categoryField);\n }\n\n initData() {\n super.initData();\n const viewData = this.getViewData();\n const rawData = this.getRawData();\n\n if (rawData && viewData) {\n // 初始化桑基图数据\n registerDataSetInstanceTransform(this._dataSet, 'sankeyLayout', sankeyLayout);\n registerDataSetInstanceTransform(this._dataSet, 'sankeyFormat', sankeyFormat);\n\n rawData.transform(\n {\n type: 'sankeyFormat'\n },\n false\n );\n\n viewData.transform({\n type: 'sankeyLayout',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n sourceField: this._spec.sourceField,\n targetField: this._spec.targetField,\n valueField: this._spec.valueField,\n direction: this.direction,\n crossNodeAlign: this._spec.crossNodeAlign,\n nodeAlign: this._spec.nodeAlign ?? 'justify',\n nodeGap: this._spec.nodeGap ?? 8,\n nodeWidth: this._spec.nodeWidth ?? 10,\n linkWidth: this._spec.linkWidth,\n minStepWidth: this._spec.minStepWidth,\n minNodeHeight: this._spec.minNodeHeight ?? 4,\n maxNodeHeight: this._spec.maxNodeHeight,\n minLinkHeight: this._spec.minLinkHeight,\n maxLinkHeight: this._spec.maxLinkHeight,\n iterations: this._spec.iterations,\n nodeKey: this._spec.nodeKey,\n linkSortBy: this._spec.linkSortBy,\n nodeSortBy: this._spec.nodeSortBy,\n setNodeLayer: this._spec.setNodeLayer,\n dropIsolatedNode: this._spec.dropIsolatedNode,\n nodeHeight: this._spec.nodeHeight,\n linkHeight: this._spec.linkHeight,\n equalNodeHeight: this._spec.equalNodeHeight,\n linkOverlap: this._spec.linkOverlap,\n inverse: this._spec.inverse\n } as ISankeyOpt,\n level: TransformLevel.sankeyLayout\n });\n\n // 注册扁平化算法\n const { dataSet } = this._option;\n registerDataSetInstanceTransform(dataSet, 'sankeyNodes', sankeyNodes);\n registerDataSetInstanceTransform(dataSet, 'flatten', flatten);\n const nodesDataView = new DataView(dataSet, { name: `sankey-node-${this.id}-data` });\n nodesDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n nodesDataView.transform({\n type: 'sankeyNodes'\n });\n // sankeyNode进行扁平化处理(针对层级数据)\n nodesDataView.transform(\n {\n type: 'flatten',\n options: {\n callback: (node: SankeyNodeElement) => {\n if (node.datum) {\n const nodeData = node.datum[node.depth];\n return { ...node, ...nodeData };\n }\n return node;\n }\n }\n },\n false\n );\n\n nodesDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n\n this._nodesSeriesData = new SeriesData(this._option, nodesDataView);\n\n registerDataSetInstanceTransform(dataSet, 'sankeyLinks', sankeyLinks);\n const linksDataView = new DataView(dataSet, { name: `sankey-link-${this.id}-data` });\n linksDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n linksDataView.transform({\n type: 'sankeyLinks'\n });\n\n linksDataView.transform(\n {\n type: 'addVChartProperty',\n options: {\n beforeCall: initKeyMap.bind(this),\n call: addDataKey\n }\n },\n false\n );\n this._linksSeriesData = new SeriesData(this._option, linksDataView);\n }\n }\n\n compileData() {\n super.compileData();\n this._linksSeriesData?.compile();\n this._nodesSeriesData?.compile();\n }\n\n initMark(): void {\n // 为了让sankey 正常的滚动,interactive 需要设置为true,不然在空白处会滚动不了\n this._rootMark.setMarkConfig({\n overflow: this._spec.overflow,\n interactive: !!this._spec.overflow\n });\n const nodeMark = this._createMark(\n SankeySeries.mark.node,\n {\n isSeriesMark: true,\n dataView: this._nodesSeriesData.getDataView(),\n dataProductId: this._nodesSeriesData.getProductId(),\n stateSort: this._spec.node?.stateSort\n },\n {\n setCustomizedShape: this._spec.node?.customShape\n }\n ) as IRectMark;\n if (nodeMark) {\n nodeMark.setMarkConfig({ zIndex: this._nodeLayoutZIndex });\n this._nodeMark = nodeMark;\n }\n\n const linkMark = this._createMark(\n SankeySeries.mark.link,\n {\n dataView: this._linksSeriesData.getDataView(),\n dataProductId: this._linksSeriesData.getProductId(),\n stateSort: this._spec.link?.stateSort\n },\n {\n setCustomizedShape: this._spec.link?.customShape\n }\n ) as ILinkPathMark;\n if (linkMark) {\n this._linkMark = linkMark;\n }\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n\n this._markAttributeContext.valueToNode = this.valueToNode.bind(this);\n this._markAttributeContext.valueToLink = this.valueToLink.bind(this);\n }\n\n valueToNode(value: StringOrNumber | StringOrNumber[]) {\n const nodes = this._nodesSeriesData.getLatestData();\n const specifyValue = array(value)[0];\n return nodes && nodes.find((node: SankeyNodeElement) => node.key === specifyValue);\n }\n\n valueToLink(value: StringOrNumber | StringOrNumber[]) {\n const links = this._linksSeriesData.getLatestData();\n const specifyValue = array(value);\n\n return (\n links &&\n links.find(\n (link: SankeyLinkElement) => link && link.source === specifyValue[0] && link.target === specifyValue[1]\n )\n );\n }\n\n valueToPositionX(value: StringOrNumber | StringOrNumber[]) {\n const node = this.valueToNode(value);\n\n return node?.x0;\n }\n valueToPositionY(value: StringOrNumber | StringOrNumber[]) {\n const node = this.valueToNode(value);\n\n return node?.y0;\n }\n\n initMarkStyle(): void {\n this._initNodeMarkStyle();\n this._initLinkMarkStyle();\n }\n\n protected _initNodeMarkStyle() {\n const nodeMark = this._nodeMark;\n if (!nodeMark) {\n return;\n }\n\n this.setMarkStyle(\n nodeMark,\n {\n x: (datum: Datum) => {\n return datum.x0;\n },\n x1: (datum: Datum) => datum.x1,\n y: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Mark\n );\n\n this.setMarkStyle(\n nodeMark,\n {\n fill: this._spec.node.style?.fill ?? this._fillByNode\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n protected _fillByNode = (datum: Datum) => {\n if (datum && datum.sourceRect && datum.targetRect) {\n return this._fillByLink(datum);\n }\n\n const fill = this._spec.node?.style?.fill;\n\n if (isValid(fill)) {\n return fill;\n } else if (isValid(this._spec.seriesField)) {\n const colorScale = this._option?.globalScale?.getScale('color');\n const nodeDatum = datum?.datum ? datum.datum : datum;\n\n return colorScale?.scale(nodeDatum?.[this._spec.seriesField]);\n }\n\n return this._colorScale?.scale(this._getNodeNameFromData(datum));\n };\n\n protected _fillByLink = (datum: Datum) => {\n const fill = this._spec.link?.style?.fill;\n\n if (fill) {\n return fill;\n } else if (isValid(this._spec.seriesField)) {\n const sourceNode = this._nodesSeriesData?.getLatestData()?.find((entry: any) => datum.source === entry.key);\n const nodeDatum = sourceNode?.datum;\n const colorScale = this._option?.globalScale?.getScale('color');\n\n return colorScale?.scale(nodeDatum?.[this._spec.seriesField]);\n }\n\n const sourceName = isNumber(datum.source) ? this.getNodeList()[datum.source] : datum.source;\n return this._colorScale?.scale(sourceName);\n };\n\n protected _initLinkMarkStyle() {\n const linkMark = this._linkMark;\n if (!linkMark) {\n return;\n }\n\n this.setMarkStyle(\n linkMark,\n {\n x0: (datum: Datum) => datum.x0,\n x1: (datum: Datum) => datum.x1,\n y0: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n thickness: (datum: Datum) => datum.thickness,\n direction: this.direction\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n linkMark,\n {\n fill: this._spec.link.style?.fill ?? this._fillByLink\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n\n initLabelMarkStyle(labelMark: ITextMark, labelSpec: ILabelSpec) {\n if (!labelMark) {\n return;\n }\n const position = labelSpec.position;\n\n if (position && position.includes('inside')) {\n this.setMarkStyle(labelMark, {\n fill: '#ffffff',\n text: (datum: Datum) => this._createText(datum, labelSpec as ISankeyLabelSpec),\n maxLineWidth: (datum: Datum) => (labelSpec as ISankeyLabelSpec).limit ?? datum.x1 - datum.x0\n });\n } else {\n this.setMarkStyle(labelMark, {\n fill: this._fillByNode,\n text: (datum: Datum) => this._createText(datum, labelSpec as ISankeyLabelSpec),\n maxLineWidth: (labelSpec as ISankeyLabelSpec).limit\n });\n }\n\n labelMark.setMarkConfig({ zIndex: this._labelLayoutZIndex });\n }\n\n private _createText(datum: Datum, labelSpec: ISankeyLabelSpec) {\n if (isNil(datum) || isNil(datum.datum)) {\n return '';\n }\n let text = datum.datum[this._spec.categoryField] || '';\n const { formatMethod, formatter } = labelSpec || {};\n\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, text, datum.datum);\n if (formatFunc) {\n text = formatFunc(...args, { series: this });\n }\n return text;\n }\n\n initAnimation() {\n const animationParams: ISankeyAnimationParams = {\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IMarkAnimateSpec)?.preset;\n if (this._nodeMark) {\n this._nodeMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyNode')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.node, this._spec, this._markAttributeContext)\n )\n );\n }\n if (this._linkMark) {\n this._linkMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('sankeyLinkPath')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.link, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n\n this._nodesSeriesData.getDataView()?.target.addListener('change', this.nodesSeriesDataUpdate.bind(this));\n this._linksSeriesData.getDataView()?.target.addListener('change', this.linksSeriesDataUpdate.bind(this));\n const emphasisSpec = this._spec.emphasis ?? ({} as T['emphasis']);\n // 没有关闭交互时,才增加这些交互事件\n if (this._option.disableTriggerEvent !== true) {\n if (emphasisSpec.enable && (emphasisSpec.effect === 'adjacency' || emphasisSpec.effect === 'related')) {\n const event = emphasisSpec.trigger === 'hover' ? 'pointerover' : 'pointerdown';\n\n this.event.on(event, { level: Event_Bubble_Level.chart }, this._handleEmphasisElement);\n }\n }\n }\n\n private nodesSeriesDataUpdate() {\n this._nodesSeriesData.updateData();\n\n this._nodeList = null;\n this._setNodeOrdinalColorScale();\n }\n\n private linksSeriesDataUpdate() {\n this._linksSeriesData.updateData();\n }\n\n protected _handleEmphasisElement = (params: ExtendEventParam) => {\n const emphasisSpec = this._spec.emphasis ?? ({} as T['emphasis']);\n\n const element = params.item;\n\n if (emphasisSpec.effect === 'adjacency') {\n if (element && element.mark === this._nodeMark?.getProduct()) {\n this._handleNodeAdjacencyClick(element);\n } else if (element && element.mark === this._linkMark?.getProduct()) {\n this._handleLinkAdjacencyClick(element);\n } else {\n this._handleClearEmpty();\n }\n } else if (emphasisSpec.effect === 'related') {\n if (element && element.mark === this._nodeMark?.getProduct()) {\n this._handleNodeRelatedClick(element);\n } else if (element && element.mark === this._linkMark?.getProduct()) {\n this._handleLinkRelatedClick(element);\n } else {\n this._handleClearEmpty();\n }\n }\n };\n\n protected _handleClearEmpty = () => {\n if (!this._needClear) {\n return;\n }\n\n const allNodeElements = this._nodeMark?.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n\n const allLinkElements = this._linkMark?.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const states = [STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE];\n\n allNodeElements.forEach(el => {\n el.removeState(states);\n });\n allLinkElements.forEach(el => {\n el.removeState(states);\n });\n\n this._needClear = false;\n };\n\n protected _handleNodeAdjacencyClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const highlightNodes: string[] = [nodeDatum.key];\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n\n if (linkDatum.source === nodeDatum.key) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS); // 设置上用户配置选中状态\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS); // 设置上用户配置选中状态\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _handleLinkAdjacencyClick = (element: IGlyphElement) => {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n allLinkElements.forEach(linkEl => {\n if (linkEl === element) {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: 1 });\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _handleNodeRelatedClick = (element: IElement) => {\n const nodeDatum = element.getDatum();\n const allNodeElements = this._nodeMark.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const father = allLinkElements[0].getDatum()?.parents ? 'parents' : 'source';\n\n if (father === 'source') {\n // node-link 型数据\n const highlightNodes: string[] = [nodeDatum.key];\n const highlightLinks: string[] = [];\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n const father = linkDatum?.parents ? 'parents' : 'source';\n\n if (array(linkDatum[father]).includes(nodeDatum.key)) {\n // 下游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n // 下游link的目标节点\n const targetNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.target;\n });\n\n // 以下游link的目标节点为起点的links\n let targetNodeSourceLinks: any[] = targetNode.data[0].sourceLinks as any[];\n while (targetNodeSourceLinks?.length > 0) {\n const newTargetNodeSourceLinks: any[] = [];\n targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum: any) => {\n if (!highlightLinks.includes(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index)) {\n highlightLinks.push(targetNodeSourceLinkDatum.key ?? targetNodeSourceLinkDatum.index);\n // 该links的目标节点\n if (!highlightNodes.includes(targetNodeSourceLinkDatum.target)) {\n highlightNodes.push(targetNodeSourceLinkDatum.target);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === targetNodeSourceLinkDatum.target;\n });\n // 以该目标节点为起点的links\n newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n targetNodeSourceLinks = newTargetNodeSourceLinks;\n return;\n }\n }\n } else if (linkDatum.target === nodeDatum.key) {\n // 上游link\n if (!highlightLinks.includes(linkDatum.key ?? linkDatum.index)) {\n highlightLinks.push(linkDatum.key ?? linkDatum.index);\n }\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n const sourceNode = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === linkDatum.source;\n });\n let sourceNodeTargetLinks: any[] = sourceNode.data[0].targetLinks as any;\n while (sourceNodeTargetLinks?.length > 0) {\n const newSourceNodeTargetLinks: any[] = [];\n sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum: any) => {\n if (!highlightLinks.includes(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index)) {\n highlightLinks.push(sourceNodeTargetLinkDatum.key ?? sourceNodeTargetLinkDatum.index);\n if (!highlightNodes.includes(sourceNodeTargetLinkDatum.source)) {\n highlightNodes.push(sourceNodeTargetLinkDatum.source);\n const sourceNodeTemp = allNodeElements.find(nodeElement => {\n return nodeElement.data[0].key === sourceNodeTargetLinkDatum.source;\n });\n newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks as any[]);\n } else {\n return;\n }\n } else {\n return;\n }\n });\n sourceNodeTargetLinks = newSourceNodeTargetLinks;\n return;\n }\n }\n }\n });\n\n if (this._linkMark) {\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n if (highlightLinks.includes(linkEl.getDatum().key ?? linkEl.getDatum().index)) {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n } else {\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n } else {\n // 层级型数据\n const highlightNodes: string[] = [nodeDatum.key];\n\n const upstreamLinks = nodeDatum.targetLinks.reduce((res: any[], link: any) => {\n const dividedLinks = array((link as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = dividedLink.parents;\n const len = parents.length;\n\n for (let i = 0; i < len; i++) {\n const source = parents[i].key;\n const target = parents[i + 1] ? parents[i + 1].key : nodeDatum.key;\n const value = dividedLink.value;\n\n // 检查 res 数组中是否已存在相同的 source 和 target\n const existingItem = res.find(item => item.source === source && item.target === target);\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 res 数组中\n res.push({ source, target, value });\n }\n }\n });\n return res;\n }, []);\n\n allLinkElements.forEach((linkEl: IElement, i: number) => {\n const linkDatum = linkEl.getDatum();\n const originalDatum = linkDatum.datum;\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => entry[father].some((par: any) => par.key === nodeDatum.key))\n : null;\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum.reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio }); // 设置默认的部分高亮\n\n return;\n }\n\n if (upSelectedLink) {\n // 上游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: upSelectedLink.value / linkDatum.value }); // 设置默认的部分高亮\n\n return;\n }\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n\n return;\n });\n\n if (this._nodeMark) {\n this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);\n }\n }\n\n this._needClear = true;\n };\n\n protected _handleLinkRelatedClick = (element: IGlyphElement) => {\n const allNodeElements = this._nodeMark.getProductElements();\n\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n const allLinkElements = this._linkMark.getProductElements();\n\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n const father = element.getDatum()?.parents ? 'parents' : 'source';\n if (father === 'source') {\n const states = [STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE];\n if (this._linkMark) {\n allLinkElements.forEach(linkEl => {\n linkEl.removeState(states);\n });\n }\n\n if (this._nodeMark) {\n allNodeElements.forEach(el => {\n el.removeState(states);\n });\n }\n } else {\n const curLinkDatum = element.getDatum();\n const highlightNodes: string[] = [curLinkDatum.source, curLinkDatum.target];\n const upstreamLinks: Array<{ source: string; target: string; value: number }> = [];\n\n const dividedLinks = array((curLinkDatum as any).datum);\n\n dividedLinks.forEach(dividedLink => {\n const parents = (dividedLink as any).parents;\n const len = parents.length;\n for (let i = 0; i < len - 1; i++) {\n const source = parents[i].key;\n const target = parents[i + 1].key;\n const value = dividedLink.value;\n\n // 检查 upstreamLinks 数组中是否已存在相同的 source 和 target\n const existingItem = upstreamLinks.find(item => item.source === source && item.target === target);\n upstreamLinks.push({\n source: parents[i].key,\n target: parents[i + 1].key,\n value: dividedLink.value\n });\n\n if (existingItem) {\n // 如果存在相同的项,则对其 value 进行累加\n existingItem.value += value;\n } else {\n // 如果不存在相同的项,则添加新的项到 upstreamLinks 数组中\n upstreamLinks.push({ source, target, value });\n }\n }\n });\n\n allLinkElements.forEach(linkEl => {\n const linkDatum = linkEl.getDatum();\n const originalDatum = linkDatum.datum;\n\n if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) {\n // 自身\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: 1 });\n return;\n }\n\n const selectedDatum = originalDatum\n ? originalDatum.filter((entry: any) => {\n const parentKeysList = entry.parents.map((item: any) => item.key);\n return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);\n })\n : null;\n\n if (selectedDatum && selectedDatum.length) {\n // 下游link\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n\n const val = selectedDatum\n .filter((entry: any) => {\n return entry.parents.some((par: any, index: number) => {\n return par.key === curLinkDatum.source && entry.parents[index + 1]?.key === curLinkDatum.target;\n });\n })\n .reduce((sum: number, d: any) => {\n return (sum += d.value);\n }, 0);\n const ratio = val / linkDatum.value;\n\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio }); // 设置默认的部分高亮\n\n return;\n }\n\n const upSelectedLink = upstreamLinks.find(\n (upLink: any) => upLink.source === linkDatum.source && upLink.target === linkDatum.target\n );\n\n if (upSelectedLink) {\n // 点击节点的上游一层的节点\n if (!highlightNodes.includes(linkDatum.source)) {\n highlightNodes.push(linkDatum.source);\n }\n if (!highlightNodes.includes(linkDatum.target)) {\n highlightNodes.push(linkDatum.target);\n }\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, { ratio: upSelectedLink.value / linkDatum.value }); // 设置默认的部分高亮\n\n return;\n }\n linkEl.removeState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n linkEl.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n\n return;\n });\n\n this._highLightElements(allNodeElements, highlightNodes);\n }\n\n this._needClear = true;\n };\n\n protected _highLightElements(vGrammarElements: IVgrammarMark['elements'], highlightNodes: string[]) {\n if (!vGrammarElements || !vGrammarElements.length) {\n return;\n }\n\n vGrammarElements.forEach(el => {\n el.removeState([STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS]);\n\n if (highlightNodes.includes(el.getDatum().key)) {\n el.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS);\n } else {\n el.addState(STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);\n }\n });\n }\n\n protected initTooltip() {\n this._tooltipHelper = new SankeySeriesTooltipHelper(this);\n this._nodeMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodeMark);\n this._linkMark && this._tooltipHelper.activeTriggerSet.mark.add(this._linkMark);\n }\n\n _setNodeOrdinalColorScale() {\n const colorScale = this._option?.globalScale?.getScale('color');\n\n if ((colorScale as any)?._specified) {\n this._colorScale = colorScale;\n return;\n }\n\n let colorDomain: string[];\n let colorRange: string[];\n\n if (colorScale) {\n colorDomain = colorScale.domain();\n colorRange = colorScale.range();\n }\n\n if (!colorRange) {\n colorRange = this._getDataScheme() as unknown as string[];\n }\n\n if (!colorDomain || isNil(colorDomain[0])) {\n // no validate domain\n colorDomain = this.getNodeList();\n\n if (colorDomain.length > 10) {\n colorRange = (this._getDataScheme()[1] as any)?.scheme;\n }\n }\n\n const ordinalScale = new ColorOrdinalScale();\n\n ordinalScale.domain(colorDomain).range?.(colorRange);\n\n this._colorScale = ordinalScale;\n return;\n }\n\n getNodeList() {\n if (this._nodeList) {\n return this._nodeList;\n }\n\n const data = this._rawData.latestData[0];\n\n const nodeList = data?.nodes\n ? data.nodes[0]?.children\n ? Array.from(this.extractNamesFromTree(data.nodes, this._spec.categoryField))\n : data.nodes.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n })\n : data?.links\n ? Array.from(this.extractNamesFromLink(data.links))\n : data?.values?.map((datum: Datum, index: number) => {\n return datum[this._spec.categoryField];\n });\n\n this._nodeList = nodeList;\n\n return nodeList;\n }\n\n _getNodeNameFromData(datum: Datum) {\n return datum?.datum ? datum.datum[this._spec.categoryField] : datum.key ?? datum[this._spec.categoryField];\n }\n\n extractNamesFromTree(tree: any, categoryName: string) {\n // Set 用于存储唯一的 name 值\n const uniqueNames = new Set();\n\n // 遍历当前节点的子节点\n tree.forEach((node: any) => {\n // 将当前节点的 name 值添加到 Set 中\n uniqueNames.add(node[categoryName]);\n\n // 如果当前节点还有子节点,则递归调用该函数继续遍历子节点\n if (node.children) {\n const childNames = this.extractNamesFromTree(node.children, categoryName);\n childNames.forEach(name => uniqueNames.add(name));\n }\n });\n\n return uniqueNames;\n }\n\n extractNamesFromLink(links: any[]) {\n // Set 用于存储唯一的 name 值\n const uniqueNames = new Set();\n const { sourceField, targetField } = this._spec;\n\n // 遍历所有的边\n links.forEach((link: any) => {\n isValid(link[sourceField]) && uniqueNames.add(link[sourceField]);\n isValid(link[targetField]) && uniqueNames.add(link[targetField]);\n });\n\n return uniqueNames;\n }\n\n getDimensionField() {\n return [this._spec.categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getRawDataStatisticsByField(field: string, isNumeric?: boolean) {\n // overwrite the getRawDataStatisticsByField of base-series\n if (!this._rawStatisticsCache) {\n this._rawStatisticsCache = {};\n }\n\n if (!this._rawStatisticsCache[field]) {\n const canUseViewStatistics = this._viewDataStatistics && this.getViewData().transformsArr.length <= 1;\n\n if (canUseViewStatistics && this._viewDataStatistics.latestData?.[field]) {\n this._rawStatisticsCache[field] = this._viewDataStatistics.latestData[field];\n } else if (this._rawData) {\n this._rawStatisticsCache[field] = {\n values: this._collectByField(field)\n };\n }\n }\n\n return this._rawStatisticsCache[field];\n }\n\n private _collectByField(field: string): string[] {\n const keyArray: any[] = [];\n const rawData = this.getRawData()?.latestData?.[0];\n\n if (!rawData) {\n return [];\n }\n\n if ((rawData as any).links) {\n //node-link型数据\n if ((rawData as any).nodes?.length) {\n (rawData as any).nodes.forEach((node: any) => {\n if (node[this._seriesField]) {\n keyArray.push(node[this._seriesField]);\n }\n });\n }\n } else if ((rawData as any).nodes) {\n const set = new Set();\n // 层级型数据\n collectHierarchyField(set, (rawData as any).nodes, this._seriesField);\n\n return Array.from(set);\n }\n\n return keyArray;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n\n // calculate the sankeyLayout\n this.getViewData().reRunAllTransform();\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n // make sure this function fast\n protected _noAnimationDataKey(datum: Datum, index: number): unknown | undefined {\n return undefined;\n }\n\n getActiveMarks(): IMark[] {\n return [this._nodeMark, this._linkMark];\n }\n\n getMarkData(datum: Datum) {\n if (datum.datum) {\n if (isArray(datum.datum)) {\n return datum.datum[datum.datum.length - 1];\n }\n return datum.datum;\n }\n return datum;\n }\n}\n\nexport const registerSankeySeries = () => {\n registerSankeyTransforms();\n registerRectMark();\n registerLinkPathMark();\n registerTextMark();\n registerSankeyAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(SankeySeries.type, SankeySeries);\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ISankeyChartSpec } from './interface';\n\nexport class SankeyChartSpecTransformer<\n T extends ISankeyChartSpec = ISankeyChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'sourceField',\n 'targetField',\n 'direction',\n 'nodeAlign',\n 'crossNodeAlign',\n 'nodeGap',\n 'nodeWidth',\n 'linkWidth',\n 'minStepWidth',\n 'minNodeHeight',\n 'maxNodeHeight',\n 'minLinkHeight',\n 'maxLinkHeight',\n 'dropIsolatedNode',\n 'nodeHeight',\n 'linkHeight',\n 'equalNodeHeight',\n 'linkOverlap',\n 'iterations',\n 'nodeKey',\n 'linkSortBy',\n 'nodeSortBy',\n 'setNodeLayer',\n 'node',\n 'link',\n 'emphasis',\n 'inverse',\n 'overflow'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","const clampRange = (range: [number, number], min: number, max: number): [number, number] => {\n let [lowValue, highValue] = range;\n\n if (highValue < lowValue) {\n lowValue = range[1];\n highValue = range[0];\n }\n const span = highValue - lowValue;\n\n if (span >= max - min) {\n return [min, max];\n }\n\n lowValue = Math.min(Math.max(lowValue, min), max - span);\n\n return [lowValue, lowValue + span];\n};\n\nexport default clampRange;\n","import { registerGroup, registerRect } from '@visactor/vrender-kits';\n\nexport function loadScrollbarComponent() {\n registerGroup();\n registerRect();\n}\n","/**\n * @description 滚动条组件\n */\nimport type { IRectGraphicAttribute, FederatedPointerEvent, IGroup, IRect } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport { merge, normalizePadding, clamp, clampRange, debounce, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\n\nimport type { ScrollBarAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadScrollbarComponent } from './register';\nimport { SCROLLBAR_EVENT } from '../constant';\n\ntype ComponentBounds = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n width: number;\n height: number;\n};\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadScrollbarComponent();\n\nexport class ScrollBar extends AbstractComponent> {\n name = 'scrollbar';\n\n static defaultAttributes = {\n direction: 'horizontal',\n round: true,\n sliderSize: 20,\n sliderStyle: {\n fill: 'rgba(0, 0, 0, .5)'\n },\n railStyle: {\n fill: 'rgba(0, 0, 0, .0)'\n },\n padding: 2,\n scrollRange: [0, 1],\n delayType: 'throttle',\n delayTime: 0,\n realTime: true\n };\n\n private _container!: IGroup;\n // 滚动条滑块\n private _slider!: IRect;\n // 滚动条滑轨\n private _rail!: IRect;\n // 滑块可渲染的区域包围盒\n private _sliderRenderBounds!: ComponentBounds | null;\n // 滑块滑动的范围\n private _sliderLimitRange!: [number, number] | null;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // TODO: 临时方案\n private _viewPosition!: { x: number; y: number };\n private _sliderSize!: number;\n\n constructor(attributes: ScrollBarAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ScrollBar.defaultAttributes, attributes));\n }\n\n setScrollRange(range: [number, number], render = true) {\n const {\n direction = 'horizontal',\n limitRange = [0, 1],\n range: preRange,\n realTime = true\n } = this.attribute as ScrollBarAttributes;\n\n const currScrollRange = clampRange(range, limitRange[0], limitRange[1]);\n if (render) {\n // 更新图形\n const sliderPos = this._getSliderPos(currScrollRange);\n if (this._slider) {\n const sliderSize = sliderPos[1] - sliderPos[0];\n this._sliderSize = sliderSize;\n\n if (direction === 'horizontal') {\n this._slider.setAttributes(\n {\n x: sliderPos[0],\n width: sliderSize\n },\n true\n );\n } else {\n this._slider.setAttributes(\n {\n y: sliderPos[0],\n height: sliderSize\n },\n true\n );\n }\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n }\n }\n (this.attribute as ScrollBarAttributes).range = currScrollRange;\n // 发射 change 事件\n if (realTime) {\n this._dispatchEvent(SCROLLBAR_EVENT, {\n pre: preRange,\n value: currScrollRange\n });\n }\n }\n\n getScrollRange(): [number, number] {\n return (this.attribute as ScrollBarAttributes).range;\n }\n\n // public setLocation(point: PointLocationCfg) {\n // this.translateTo(point.x, point.y);\n // }\n\n // 绑定事件\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { delayType = 'throttle', delayTime = 0 } = this.attribute as ScrollBarAttributes;\n // TODO: wheel 事件支持\n if (this._rail) {\n this._rail.addEventListener(\n 'pointerdown',\n delayMap[delayType](this._onRailPointerDown, delayTime) as EventListener\n );\n }\n if (this._slider) {\n this._slider.addEventListener('pointerdown', this._onSliderPointerDown as EventListener);\n }\n }\n\n protected render() {\n this._reset();\n const {\n direction = 'horizontal',\n width,\n height,\n range,\n limitRange = [0, 1],\n // sliderSize = 20,\n // scrollValue = 0,\n // scrollRange = [0, 1],\n railStyle,\n sliderStyle,\n padding = 2\n } = this.attribute as ScrollBarAttributes;\n\n const group = this.createOrUpdateChild('scrollbar-container', {}, 'group') as IGroup;\n // 绘制轨道\n\n const rail = group.createOrUpdateChild(\n 'scrollbar-rail',\n {\n x: 0,\n y: 0,\n width,\n height,\n ...railStyle\n },\n 'rect'\n ) as IRect;\n this._rail = rail;\n\n // 滑块\n const sliderRenderBounds = this.getSliderRenderBounds();\n const sliderPos = this._getSliderPos(clampRange(range, limitRange[0], limitRange[1]));\n const sliderSize = sliderPos[1] - sliderPos[0];\n this._sliderSize = sliderSize;\n // const sliderRangePos = this._getScrollRange();\n\n let sliderAttribute: IRectGraphicAttribute;\n if (direction === 'horizontal') {\n sliderAttribute = {\n x: sliderPos[0],\n y: sliderRenderBounds.y1,\n width: sliderSize,\n height: sliderRenderBounds.height\n };\n } else {\n sliderAttribute = {\n x: sliderRenderBounds.x1,\n y: sliderPos[0],\n width: sliderRenderBounds.width,\n height: sliderSize\n };\n }\n\n const slider = group.createOrUpdateChild(\n 'slider',\n {\n ...sliderAttribute,\n cornerRadius: this._getDefaultSliderCornerRadius(),\n ...sliderStyle,\n boundsPadding: normalizePadding(padding),\n pickMode: 'imprecise'\n },\n 'rect'\n ) as IRect;\n this._slider = slider;\n this._container = group;\n\n const containerAABBBounds = this._container.AABBBounds;\n this._viewPosition = {\n x: containerAABBBounds.x1,\n y: containerAABBBounds.y1\n };\n }\n\n // 获取滑块渲染的包围盒区域\n getSliderRenderBounds() {\n if (this._sliderRenderBounds) {\n return this._sliderRenderBounds;\n }\n const { width, height, padding = 2 } = this.attribute as ScrollBarAttributes;\n const [top, right, bottom, left] = normalizePadding(padding);\n const renderBounds = {\n x1: left,\n y1: top,\n x2: width - right,\n y2: height - bottom,\n width: Math.max(0, width - (left + right)),\n height: Math.max(0, height - (top + bottom))\n };\n this._sliderRenderBounds = renderBounds;\n return renderBounds;\n }\n\n // 获取默认的滑块圆角\n private _getDefaultSliderCornerRadius() {\n const { direction, round } = this.attribute as ScrollBarAttributes;\n\n if (round) {\n const { width, height } = this.getSliderRenderBounds();\n return direction === 'horizontal' ? height : width;\n }\n\n return 0;\n }\n\n // 计算滑块在轨道的位置\n private _getSliderPos(range: [number, number]) {\n const { direction } = this.attribute as ScrollBarAttributes;\n const { width, height, x1, y1 } = this.getSliderRenderBounds();\n\n if (direction === 'horizontal') {\n return [width * range[0] + x1, width * range[1] + x1];\n }\n return [height * range[0] + y1, height * range[1] + y1];\n }\n\n private _getScrollRange() {\n if (this._sliderLimitRange) {\n return this._sliderLimitRange;\n }\n const { limitRange = [0, 1], direction } = this.attribute as ScrollBarAttributes;\n const [min, max] = clampRange(limitRange, 0, 1);\n const { width, height, x1, y1 } = this.getSliderRenderBounds();\n const sliderSize = this._sliderSize;\n\n return direction === 'horizontal'\n ? clampRange([x1 + min * width, x1 + max * width], x1, width - sliderSize)\n : clampRange([y1 + min * height, y1 + max * height], y1, height - sliderSize);\n }\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n // 将事件坐标转换为实际的滑块位置\n // TODO: 这里有问题,应该拿 viewX viewY,同时 graphic 要提供接口获取它的 相对 view 的坐标\n const { viewX, viewY } = e;\n const { direction, width, height, range } = this.attribute as ScrollBarAttributes;\n const sliderSize = this._sliderSize;\n const [min, max] = this._getScrollRange();\n let currentScrollValue;\n if (direction === 'vertical') {\n const relativeY = viewY - this._viewPosition.y;\n const currentYPos = clamp(relativeY - sliderSize / 2, min, max);\n currentScrollValue = relativeY / height;\n this._slider.setAttribute('y', currentYPos, true);\n } else {\n const relativeX = viewX - this._viewPosition.x;\n const currentXPos = clamp(relativeX - sliderSize / 2, min, max);\n currentScrollValue = relativeX / width;\n this._slider.setAttribute('x', currentXPos, true);\n }\n\n this.setScrollRange(\n [currentScrollValue - (range[1] - range[0]) / 2, currentScrollValue + (range[1] - range[0]) / 2],\n false\n );\n\n if (this.stage && !this.stage.autoRender) {\n this.stage.renderNextFrame();\n }\n };\n\n private _onSliderPointerDown = (e: FederatedPointerEvent) => {\n const { stopSliderDownPropagation = true } = this.attribute as ScrollBarAttributes;\n if (stopSliderDownPropagation) {\n e.stopPropagation();\n }\n const { direction } = this.attribute as ScrollBarAttributes;\n const { x, y } = this.stage.eventPointTransform(e);\n this._prePos = direction === 'horizontal' ? x : y;\n this._dispatchEvent('scrollDown', {\n pos: this._prePos,\n event: e\n });\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n vglobal.addEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.addEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n this.stage.addEventListener('pointerup', this._onSliderPointerUp);\n this.stage.addEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _computeScrollValue = (e: any) => {\n const { direction } = this.attribute as ScrollBarAttributes;\n const { x, y } = this.stage.eventPointTransform(e);\n\n let currentScrollValue;\n let currentPos;\n let delta = 0;\n\n const { width, height } = this.getSliderRenderBounds();\n if (direction === 'vertical') {\n currentPos = y;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / height;\n } else {\n currentPos = x;\n delta = currentPos - this._prePos;\n currentScrollValue = delta / width;\n }\n return [currentPos, currentScrollValue];\n };\n\n private _onSliderPointerMove = (e: any) => {\n const { stopSliderMovePropagation = true } = this.attribute as ScrollBarAttributes;\n if (stopSliderMovePropagation) {\n e.stopPropagation();\n }\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n this.setScrollRange([preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue], true);\n this._prePos = currentPos;\n };\n\n private _onSliderPointerMoveWithDelay =\n this.attribute.delayTime === 0\n ? this._onSliderPointerMove\n : delayMap[this.attribute.delayType](this._onSliderPointerMove, this.attribute.delayTime);\n\n private _onSliderPointerUp = (e: any) => {\n e.preventDefault();\n const { realTime = true, range: preRange, limitRange = [0, 1] } = this.attribute as ScrollBarAttributes;\n // 发射 change 事件\n const preScrollRange = this.getScrollRange();\n const [currentPos, currentScrollValue] = this._computeScrollValue(e);\n const range: [number, number] = [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue];\n\n this._dispatchEvent('scrollUp', {\n pre: preRange,\n value: clampRange(range, limitRange[0], limitRange[1])\n });\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n vglobal.removeEventListener('pointerup', this._onSliderPointerUp);\n } else {\n this.stage.removeEventListener('pointermove', this._onSliderPointerMoveWithDelay, { capture: true });\n this.stage.removeEventListener('pointerup', this._onSliderPointerUp);\n this.stage.removeEventListener('pointerupoutside', this._onSliderPointerUp);\n }\n };\n\n private _reset() {\n this._sliderRenderBounds = null;\n this._sliderLimitRange = null;\n }\n}\n","import type { IGraphic, IGroup, IPlugin, IPluginService } from '@visactor/vrender-core';\nimport { Generator, injectable } from '@visactor/vrender-core';\nimport { ScrollBar } from './scrollbar';\nimport type { IAABBBounds } from '@visactor/vutils';\nimport { AABBBounds, abs, Bounds } from '@visactor/vutils';\nimport { SCROLLBAR_EVENT } from '../constant';\nimport type { ScrollBarAttributes } from './type';\n\n// _showPoptip: 0-没有,1-添加,2-删除\n\ntype IParams = {\n timeout?: number; // 消失的timeout\n bufferV?: number; // 判定是否出现滚动条的buffer\n bufferH?: number; // 判定是否出现滚动条的buffer\n};\n\n@injectable()\nexport class ScrollBarPlugin implements IPlugin {\n name: 'scrollbar' = 'scrollbar';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n scrollContainer?: { g: IGroup; showH: boolean; showV: boolean };\n scrollContainerBounds: IAABBBounds;\n childrenBounds: IAABBBounds;\n\n static defaultParams: IParams = {\n timeout: 500\n };\n\n params: IParams;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n this.childrenBounds = new AABBBounds();\n stage.addEventListener('wheel', this.scroll as any);\n this.params = ScrollBarPlugin.defaultParams;\n }\n scroll = (e: { deltaX: number; deltaY: number; target: IGraphic }) => {\n // 计算子元素的bounds\n const graphic = e.target as any;\n // childrenBounds.set(0, 0, scrollContainer.AABBBounds.width(), scrollContainer.AABBBounds.height());\n\n const data = this.getScrollContainer(graphic);\n\n if (!data && !this.scrollContainer) {\n return;\n }\n\n if (!data && this.scrollContainer) {\n if (!this.scrollContainer.g.stage || this.scrollContainer.g.stage !== graphic.stage) {\n return;\n }\n const newScrollContainer = this.formatScrollContainer(this.scrollContainer.g);\n\n if (!newScrollContainer) {\n this.clearScrollbar(this.scrollContainer.g, 'all');\n // 删除老的scrollbar\n return;\n }\n if (this.scrollContainer.showH && !newScrollContainer.showH) {\n this.clearScrollbar(this.scrollContainer.g, 'horizontal');\n }\n\n if (this.scrollContainer.showV && !newScrollContainer.showV) {\n this.clearScrollbar(this.scrollContainer.g, 'vertical');\n }\n\n this.scrollContainer = newScrollContainer;\n } else if (data && this.scrollContainer && data.g !== this.scrollContainer.g) {\n this.clearScrollbar(this.scrollContainer.g, 'all');\n }\n\n this.scrollContainer = data ?? this.scrollContainer;\n if (!data) {\n return;\n }\n const scrollContainer = data.g;\n if (!scrollContainer) {\n return;\n }\n const { width, height, scrollX = 0, scrollY = 0 } = scrollContainer.attribute;\n let newScrollX = scrollX;\n let newScrollY = scrollY;\n let { showH, showV } = data;\n this.scrollContainerBounds = new Bounds().set(\n 0,\n 0,\n scrollContainer.attribute.width,\n scrollContainer.attribute.height\n );\n if (showH && showH) {\n if (abs(e.deltaX) > abs(e.deltaY)) {\n showH = showH && true;\n showV = showV && false;\n } else {\n showH = showH && false;\n showV = showV && true;\n }\n }\n\n const scrollWidth = this.childrenBounds.width();\n const scrollHeight = this.childrenBounds.height();\n\n if (showH) {\n newScrollX = scrollX - (e.deltaX ?? 0);\n if (newScrollX > 0) {\n newScrollX = 0;\n } else if (newScrollX < width - scrollWidth) {\n newScrollX = width - scrollWidth;\n }\n }\n\n if (showV) {\n newScrollY = scrollY - (e.deltaY ?? 0);\n if (newScrollY > 0) {\n newScrollY = 0;\n } else if (newScrollY < height - scrollHeight) {\n newScrollY = height - scrollHeight;\n }\n }\n\n scrollContainer.setAttributes({\n scrollX: newScrollX,\n scrollY: newScrollY\n });\n this.addOrUpdateScroll(showH, showV, scrollContainer.parent, scrollContainer);\n };\n\n handleScrollBarChange = (params: any) => {\n if (\n !this.scrollContainer ||\n !this.scrollContainerBounds ||\n !this.childrenBounds ||\n !params ||\n !params.target ||\n !params.detail ||\n !params.detail.value\n ) {\n return;\n }\n const scrollbar = params.target;\n const newRange = params.detail.value;\n\n if (scrollbar.attribute.direction === 'horizontal') {\n const scrollWidth = this.childrenBounds.width();\n\n this.scrollContainer.g.setAttributes({ scrollX: -newRange[0] * scrollWidth });\n } else {\n const scrollHeight = this.childrenBounds.height();\n\n this.scrollContainer.g.setAttributes({ scrollY: -newRange[0] * scrollHeight });\n }\n };\n\n initEventOfScrollbar(scrollContainer: IGroup, scrollbar: IGroup, isHorozntal?: boolean) {\n scrollContainer.addEventListener('pointerover', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollContainer.addEventListener('pointermove', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollContainer.addEventListener('pointerout', () => {\n scrollbar.setAttribute('visibleAll', false);\n });\n scrollbar.addEventListener('pointerover', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n scrollbar.addEventListener('pointerout', () => {\n scrollbar.setAttribute('visibleAll', true);\n });\n\n scrollbar.addEventListener('scrollUp', this.handleScrollBarChange);\n scrollbar.addEventListener(SCROLLBAR_EVENT, this.handleScrollBarChange);\n }\n\n addOrUpdateScroll(showH: boolean, showV: boolean, container: IGroup, scrollContainer: IGroup) {\n if (showH) {\n const { scrollBar: hScrollbar, isUpdate } = this.addOrUpdateHScroll(scrollContainer, container, true);\n\n if (!isUpdate) {\n this.initEventOfScrollbar(scrollContainer, hScrollbar, true);\n }\n } else {\n this.clearScrollbar(scrollContainer, 'horizontal');\n }\n if (showV) {\n const { scrollBar: vScrollbar, isUpdate } = this.addOrUpdateHScroll(scrollContainer, container, false);\n\n if (!isUpdate) {\n this.initEventOfScrollbar(scrollContainer, vScrollbar, false);\n }\n } else {\n this.clearScrollbar(scrollContainer, 'vertical');\n }\n }\n\n getDirection(isHorozntal?: boolean) {\n return isHorozntal ? 'horizontal' : 'vertical';\n }\n\n addOrUpdateHScroll(scrollContainer: IGroup, container: IGroup, isHorozntal?: boolean) {\n const direction = this.getDirection(isHorozntal);\n const name = `${scrollContainer.name ?? scrollContainer._uid}_${this.getDirection(isHorozntal)}_${this.name}`;\n const scrollbars = container.children.filter((g: ScrollBar) => g.name === name);\n let isUpdate = true;\n let scrollBar = scrollbars[0] as ScrollBar;\n\n const { y = 0, dy = 0, x = 0, dx = 0, height, width, zIndex = 0 } = this.scrollContainer.g.attribute;\n const attrs: Partial = {\n x: 0,\n y: 0,\n direction,\n zIndex: zIndex + 1,\n visibleAll: true,\n padding: [2, 0],\n railStyle: {\n fill: 'rgba(0, 0, 0, .1)'\n },\n range: [0, 0.05]\n };\n\n if (isHorozntal) {\n attrs.width = this.scrollContainerBounds.width();\n attrs.height = 12;\n } else {\n attrs.height = this.scrollContainerBounds.height();\n attrs.width = 12;\n }\n\n if (!scrollBar) {\n isUpdate = false;\n\n scrollBar = new ScrollBar(attrs as ScrollBarAttributes);\n scrollBar.name = name;\n container.add(scrollBar);\n (scrollBar as any).isScrollBar = true;\n } else if (scrollbars.length > 1) {\n scrollbars.forEach((child: IGraphic, index: number) => {\n if (index) {\n child.parent?.removeChild(child);\n }\n });\n }\n const childrenBounds = this.childrenBounds;\n\n const { scrollX, scrollY } = scrollContainer.attribute;\n if (isHorozntal) {\n const ratio = Math.min(this.scrollContainerBounds.width() / childrenBounds.width(), 1);\n const start = Math.max(Math.min(scrollX / this.childrenBounds.width(), 0), ratio - 1);\n attrs.x = x + dx;\n attrs.y = y + dy + height - (attrs.height ?? 0);\n attrs.range = [-start, -start + ratio];\n } else {\n const ratio = Math.min(this.scrollContainerBounds.height() / childrenBounds.height(), 1);\n const start = Math.max(Math.min(scrollY / this.childrenBounds.height(), 0), ratio - 1);\n attrs.x = x + dx + width - this.scrollContainerBounds.width();\n attrs.y = y + dy;\n attrs.range = [-start, -start + ratio];\n }\n\n scrollBar.setAttributes(attrs);\n return {\n scrollBar,\n isUpdate\n };\n }\n\n clearScrollbar(scrollContainer: IGroup, type: 'horizontal' | 'vertical' | 'all') {\n if (!scrollContainer.parent) {\n return;\n }\n const scrollbarBars = scrollContainer.parent.children.filter((child: IGroup) => {\n return (child as any).isScrollBar && (type === 'all' || (child.attribute as any).direction === type);\n });\n\n scrollbarBars.forEach((child: IGraphic) => {\n child.parent.removeChild(child);\n });\n }\n\n formatScrollContainer(g: IGraphic) {\n if (!g || g.type !== 'group' || !g.attribute) {\n return null;\n }\n\n const { overflow, width, height } = (g as IGroup).attribute;\n\n if (!overflow || overflow === 'hidden') {\n return null;\n }\n\n let showH = false;\n let showV = false;\n\n if (overflow === 'scroll') {\n showH = true;\n showV = true;\n } else {\n showH = overflow === 'scroll-x';\n showV = !showH;\n }\n\n const childrenBounds = this.childrenBounds;\n\n childrenBounds.clear();\n g.forEachChildren((g: IGraphic) => {\n childrenBounds.union(g.AABBBounds);\n });\n\n if (!g.AABBBounds.empty()) {\n if (showH) {\n showH = width < childrenBounds.width();\n }\n\n if (showV) {\n showV = height < childrenBounds.height();\n }\n }\n\n return showH || showV ? { g: g as IGroup, showH, showV } : null;\n }\n\n // 获取响应滚动的元素\n getScrollContainer(graphic: IGraphic): { g: IGroup; showH: boolean; showV: boolean } | null {\n let g = graphic;\n while (g) {\n const res = this.formatScrollContainer(g);\n\n if (res) {\n return res;\n }\n g = g.parent;\n }\n return null;\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('wheel', this.scroll as any);\n }\n}\n","import { AutoEnablePlugins, ContainerModule, container } from '@visactor/vrender-core';\nimport { ScrollBarPlugin } from './scrollbar-plugin';\n\nexport const scrollbarModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(ScrollBarPlugin)) {\n bind(ScrollBarPlugin).toSelf();\n bind(AutoEnablePlugins).toService(ScrollBarPlugin);\n }\n});\n\nexport function loadScrollbar() {\n container.load(scrollbarModule);\n}\n","import { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ISankeyChartSpec } from './interface';\nimport { registerSankeySeries } from '../../series/sankey/sankey';\nimport { Factory } from '../../core/factory';\nimport { SankeyChartSpecTransformer } from './sankey-transformer';\nimport type { Datum, MaybeArray } from '../../typings/common';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface/common';\nimport type { IRegionQuerier } from '../../typings/params';\nimport { isArray, isFunction } from '@visactor/vutils';\nimport { loadScrollbar } from '@visactor/vrender-components';\n\nexport class SankeyChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.sankey;\n static readonly seriesType: string = SeriesTypeEnum.sankey;\n static readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly transformerConstructor = SankeyChartSpecTransformer;\n readonly type: string = ChartTypeEnum.sankey;\n readonly seriesType: string = SeriesTypeEnum.sankey;\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n // 桑基图暂时只支持单选\n const activeDatum = isArray(datum) ? datum[0] : datum;\n const keys = !activeDatum ? null : Object.keys(activeDatum);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!activeDatum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n let hasPick = false;\n r.getSeries().forEach(s => {\n let activeNodeOrLink = null;\n\n s.getMarksWithoutRoot().forEach(m => {\n if (m.type === 'text') {\n return;\n }\n\n let pickElement = null;\n const mark = m.getProduct();\n if (!mark) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n pickElement = mark.elements.find((e: any) =>\n keys.every(k => {\n let datum = e.getDatum()?.datum;\n\n if (isArray(datum)) {\n // data of link\n datum = datum[0];\n }\n\n // eslint-disable-next-line eqeqeq\n return activeDatum[k] == datum?.[k];\n })\n );\n }\n if (pickElement) {\n hasPick = true;\n r.interaction.startInteraction(stateKey, pickElement);\n\n if (mark.id().includes('node') || mark.id().includes('link')) {\n activeNodeOrLink = pickElement;\n }\n }\n });\n\n if (activeNodeOrLink) {\n (s as any)._handleEmphasisElement?.({ item: activeNodeOrLink });\n }\n });\n if (checkReverse && hasPick) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n}\n\nexport const registerSankeyChart = () => {\n loadScrollbar();\n registerSankeySeries();\n\n Factory.registerChart(SankeyChart.type, SankeyChart);\n};\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\n\nexport class RangeAreaSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n protected _getMeasureData = (datum: any) => {\n return this.series.getSpec().direction === Direction.horizontal\n ? datum[this.series.getSpec().xField[0]] + '-' + datum[this.series.getSpec().xField[1]]\n : datum[this.series.getSpec().yField[0]] + '-' + datum[this.series.getSpec().yField[1]];\n };\n}\n","import { AreaSeries } from '../area/area';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport { registerAreaMark } from '../../mark/area';\nimport { Direction } from '../../typings/space';\nimport type { Datum } from '../../typings';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { RangeAreaSeriesTooltipHelper } from './tooltip-helper';\nimport type { IAreaSeriesSpec } from '../area/interface';\nimport { rangeAreaSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport type { IAreaMark } from '../../mark/interface';\n\nexport class RangeAreaSeries extends AreaSeries {\n static readonly type: string = SeriesTypeEnum.rangeArea;\n type = SeriesTypeEnum.rangeArea;\n\n static readonly mark: SeriesMarkMap = rangeAreaSeriesMark;\n\n initMark(): void {\n const { customShape, stateSort } = this._spec.area ?? {};\n this._areaMark = this._createMark(\n RangeAreaSeries.mark.area,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n stateSort\n },\n {\n setCustomizedShape: customShape,\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IAreaMark;\n }\n\n initMarkStyle(): void {\n this.initAreaMarkStyle();\n }\n\n initAreaMarkStyle(): void {\n const areaMark = this._areaMark;\n if (areaMark) {\n super.initAreaMarkStyle();\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._areaMark,\n {\n x1: (datum: Datum) => {\n if (!this._xAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._xAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.xField[1]), {\n bandPosition: this._bandPosition\n });\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._areaMark,\n {\n y1: (datum: Datum) => {\n if (!this._yAxisHelper) {\n return Number.NaN;\n }\n const { dataToPosition } = this._yAxisHelper;\n return dataToPosition(this.getDatumPositionValues(datum, this._spec.yField[1]), {\n bandPosition: this._bandPosition\n });\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n this.setMarkStyle(areaMark, { stroke: false }, 'normal', AttributeLevel.Series);\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new RangeAreaSeriesTooltipHelper(this);\n }\n\n protected _isFieldAllValid() {\n const viewStatistics = this.getViewDataStatistics();\n const fields = this.fieldY;\n if (viewStatistics && viewStatistics.latestData && fields.length) {\n return fields.every(field => viewStatistics.latestData[field] && viewStatistics.latestData[field].allValid);\n }\n return false;\n }\n}\n\nexport const registerRangeAreaSeries = () => {\n registerAreaMark();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(RangeAreaSeries.type, RangeAreaSeries);\n};\n","import { Direction } from '../../typings';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IRangeAreaChartSpec } from './interface';\n\nexport class RangeAreaChartSpecTransformer<\n T extends IRangeAreaChartSpec = IRangeAreaChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec);\n series.area = spec.area;\n if (spec.direction === Direction.horizontal) {\n series.xField = spec.xField ?? [spec.minField, spec.maxField];\n } else {\n series.yField = spec.yField ?? [spec.minField, spec.maxField];\n }\n series.stack = false;\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { registerRangeAreaSeries } from '../../series/range-area/range-area';\nimport { Factory } from '../../core/factory';\nimport type { IRangeAreaChartSpec } from './interface';\nimport { RangeAreaChartSpecTransformer } from './range-area-transformer';\nimport { BaseChart } from '../base';\n\nexport class RangeAreaChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.rangeArea;\n static readonly seriesType: string = SeriesTypeEnum.rangeArea;\n static readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly transformerConstructor = RangeAreaChartSpecTransformer;\n readonly type: string = ChartTypeEnum.rangeArea;\n readonly seriesType: string = SeriesTypeEnum.rangeArea;\n}\n\nexport const registerRangeAreaChart = () => {\n registerRangeAreaSeries();\n Factory.registerChart(RangeAreaChart.type, RangeAreaChart);\n};\n","import type { IBaseScale } from '@visactor/vscale';\nimport { GrammarMarkType } from '../graph/enums';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { isScaleEncode } from '../parse/mark';\nimport { getGrammarOutput, isFunctionType } from '../parse/util';\nimport type {\n StateEncodeSpec,\n MarkSpec,\n IElement,\n MarkFunctionType,\n AttributeTransform,\n GetSingleEncodeSpecByType,\n BaseSingleEncodeSpec\n} from '../types';\nimport { Mark } from '../view/mark';\nimport { isArray, isNil, isNumber } from '@visactor/vutils';\nimport { transformsByType } from '../graph/attributes/transform';\nimport { getBandWidthOfScale } from '../util/scale';\nimport { Factory } from '../core/factory';\n\nexport class Cell extends Mark {\n static markType = GrammarMarkType.cell;\n declare markType: GrammarMarkType.cell;\n protected declare spec: MarkSpec;\n\n protected _encoders: StateEncodeSpec | null;\n\n encodeState(state: string, channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType) {\n super.encodeState(state, channel, value);\n\n this._updateComponentEncoders(state);\n\n return this;\n }\n\n protected _updateComponentEncoders(state: string) {\n if (!this._encoders) {\n this._encoders = {};\n }\n\n const userEncoder = this.spec.encode[state] as GetSingleEncodeSpecByType<'cell'>;\n\n if (userEncoder && state === 'update') {\n const params = this.parameters();\n const scales: Record = isFunctionType(userEncoder)\n ? null\n : Object.keys(userEncoder).reduce((res, channel) => {\n if (isScaleEncode(userEncoder[channel])) {\n res[channel] = getGrammarOutput(userEncoder[channel].scale, params);\n }\n return res;\n }, {});\n\n this._encoders[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const userEncodeRes = invokeEncoder(userEncoder, datum, element, parameters);\n\n if (isNil(userEncodeRes.size)) {\n const sizeX = scales.x ? getBandWidthOfScale(scales.x) : undefined;\n const sizeY = scales.y ? getBandWidthOfScale(scales.y) : undefined;\n\n if (isNil(sizeX) && isNil(sizeY)) {\n userEncodeRes.size = 10;\n } else if (isNil(sizeX)) {\n userEncodeRes.size = sizeY;\n } else if (isNil(sizeY)) {\n userEncodeRes.size = sizeX;\n }\n\n userEncodeRes.size = [sizeX, sizeY];\n }\n\n if (isNil(userEncodeRes.shape)) {\n userEncodeRes.shape = 'rect';\n }\n\n return userEncodeRes;\n }\n } as GetSingleEncodeSpecByType<'cell'>;\n } else {\n this._encoders[state] = userEncoder;\n }\n }\n\n protected _getEncoders() {\n return this._encoders ?? {};\n }\n\n getAttributeTransforms() {\n return (\n [\n {\n channels: ['size', 'padding'],\n transform: (graphicAttributes: any, nextAttrs: any, storedAttrs: any) => {\n if (isNumber(storedAttrs.padding) && storedAttrs.padding > 0) {\n graphicAttributes.size = isArray(storedAttrs.size)\n ? storedAttrs.size.map((entry: number) => Math.max(entry - storedAttrs.padding, 1))\n : Math.max(storedAttrs.size - storedAttrs.padding, 1);\n } else if (isArray(storedAttrs.padding) && storedAttrs.padding.length === 2) {\n const arraySize = isArray(storedAttrs.size) ? storedAttrs.size : [storedAttrs.size, storedAttrs.size];\n\n graphicAttributes.size = [\n Math.max(arraySize[0] - storedAttrs.padding[0], 1),\n Math.max(arraySize[1] - storedAttrs.padding[1], 1)\n ];\n } else {\n graphicAttributes.size = storedAttrs.size;\n }\n },\n storedAttrs: 'paddingAttrs'\n }\n ] as AttributeTransform[]\n ).concat(transformsByType.symbol);\n }\n\n release(): void {\n super.release();\n this._encoders = null;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(GrammarMarkType.cell, Cell);\n};\n","import { Factory } from './../core/factory';\nimport type { ICellMarkSpec } from '../typings';\nimport type { ICellMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseSymbolMark } from './symbol';\nimport { registerCellGraphic, registerCellMark as registerVgrammarCellMark } from '@visactor/vgrammar-core';\n\nexport class CellMark extends BaseSymbolMark implements ICellMark {\n static readonly type = MarkTypeEnum.cell;\n readonly type = CellMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n padding: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerCellMark = () => {\n Factory.registerMark(CellMark.type, CellMark);\n registerCellGraphic();\n registerVgrammarCellMark();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { FadeInOutAnimation } from '../../animation/config';\nimport type { HeatmapAppearPreset } from './interface';\n\nexport function heatmapPresetAnimation(preset: HeatmapAppearPreset | boolean): IAnimationTypeConfig {\n if (preset === false) {\n return {};\n }\n return {\n type: 'fadeIn'\n };\n}\n\nexport const registerHeatmapAnimation = () => {\n Factory.registerAnimation('heatmap', (params: any, preset: HeatmapAppearPreset) => {\n return {\n ...FadeInOutAnimation,\n appear: heatmapPresetAnimation(preset)\n };\n });\n};\n","import type { TooltipActiveType } from '../../typings';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\n\nexport class HeatmapSeriesTooltipHelper extends BaseSeriesTooltipHelper {\n protected enableByType(activeType: TooltipActiveType): boolean {\n return activeType !== 'dimension';\n }\n}\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IHeatmapSeriesSpec, IHeatmapSeriesTheme } from './interface';\n\nexport class HeatmapSeriesSpecTransformer<\n T extends IHeatmapSeriesSpec = IHeatmapSeriesSpec,\n K extends IHeatmapSeriesTheme = IHeatmapSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.cell);\n }\n}\n","/* eslint-disable no-duplicate-imports */\nimport { registerCellMark } from './../../mark/cell';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { Datum } from '../../typings';\nimport { registerHeatmapAnimation } from './animation';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { HeatmapAppearPreset, IHeatmapSeriesSpec } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport { registerTextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { normalizePadding, array } from '@visactor/vutils';\nimport { HeatmapSeriesTooltipHelper } from './tooltip-helper';\nimport { heatmapSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { ICellMark, IMark, ITextMark } from '../../mark/interface';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { HeatmapSeriesSpecTransformer } from './heatmap-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class HeatmapSeries extends CartesianSeries {\n static readonly type: string = SeriesTypeEnum.heatmap;\n type = SeriesTypeEnum.heatmap;\n\n static readonly mark: SeriesMarkMap = heatmapSeriesMark;\n static readonly transformerConstructor = HeatmapSeriesSpecTransformer as any;\n readonly transformerConstructor = HeatmapSeriesSpecTransformer;\n\n protected _cellMark: ICellMark;\n protected _backgroundMark: ICellMark;\n\n protected _fieldValue!: string[];\n getFieldValue() {\n return this._fieldValue;\n }\n setFieldValue(f: string | string[]) {\n this._fieldValue = array(f);\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.setFieldValue(this._spec.valueField);\n }\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._cellMark = this._createMark(\n HeatmapSeries.mark.cell,\n {\n isSeriesMark: true,\n stateSort: this._spec.cell?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.cell?.customShape,\n morph: shouldMarkDoMorph(this._spec, HeatmapSeries.mark.cell.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as ICellMark;\n\n this._backgroundMark = this._createMark(\n HeatmapSeries.mark.cellBackground,\n {\n stateSort: this._spec.cellBackground?.stateSort\n },\n {\n ...progressive,\n setCustomizedShape: this._spec.cellBackground?.customShape\n }\n ) as ICellMark;\n }\n\n initMarkStyle(): void {\n this.initCellMarkStyle();\n this.initCellBackgroundMarkStyle();\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getMeasureField()[0]];\n }\n });\n }\n\n initCellMarkStyle() {\n this.setMarkStyle(\n this._cellMark,\n {\n x: (datum: Datum) => {\n const pos = this.dataToPositionX(datum);\n return pos;\n },\n y: (datum: Datum) => {\n const pos = this.dataToPositionY(datum);\n return pos;\n },\n size: () => {\n return [this.getCellSize(this._xAxisHelper), this.getCellSize(this._yAxisHelper)];\n },\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n initCellBackgroundMarkStyle() {\n const padding = normalizePadding(this._spec.cellBackground?.style?.padding ?? 0);\n this.setMarkStyle(\n this._backgroundMark,\n {\n x: (datum: Datum) => {\n const width = this.getCellSize(this._xAxisHelper);\n const pos = this.dataToPositionX(datum);\n return pos - width / 2 + padding[3];\n },\n y: (datum: Datum) => {\n const height = this.getCellSize(this._yAxisHelper);\n const pos = this.dataToPositionY(datum);\n return pos - height / 2 + padding[0];\n },\n width: () => {\n return this.getCellSize(this._xAxisHelper) - padding[1] - padding[3];\n },\n height: () => {\n return this.getCellSize(this._yAxisHelper) - padding[0] - padding[2];\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n // 通用的默认颜色映射 用户设置优先级比这个高,会在setStyle中处理\n getColorAttribute() {\n return {\n // TODO: 为热力图实现默认线性颜色 scale\n scale: this._option.globalScale.getScale('color') ?? this._getDefaultColorScale(),\n field: this.getFieldValue[0]\n };\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._cellMark ? [this._cellMark] : []);\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._cellMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('heatmap')?.(appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.cell, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n }\n\n protected getCellSize(axisHelper: IAxisHelper) {\n return axisHelper.getBandwidth?.(0) ?? DefaultBandWidth;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new HeatmapSeriesTooltipHelper(this);\n this._cellMark && this._tooltipHelper.activeTriggerSet.mark.add(this._cellMark);\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getDimensionField(): string[] {\n return [].concat(this.fieldX, this.fieldY);\n }\n\n getMeasureField(): string[] {\n return this.getFieldValue();\n }\n\n getActiveMarks(): IMark[] {\n return [this._cellMark];\n }\n}\n\nexport const registerHeatmapSeries = () => {\n registerTextMark();\n registerCellMark();\n registerHeatmapAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(HeatmapSeries.type, HeatmapSeries);\n};\n","import { CartesianChartSpecTransformer } from '../cartesian';\nimport type { IHeatmapChartSpec } from './interface';\n\nexport class HeatmapChartSpecTransformer<\n T extends IHeatmapChartSpec = IHeatmapChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, ['valueField', 'cell']);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport { registerHeatmapSeries } from '../../series/heatmap/heatmap';\nimport { Factory } from '../../core/factory';\nimport type { IHeatmapChartSpec } from './interface';\nimport { HeatmapChartSpecTransformer } from './heatmap-transformer';\nimport { BaseChart } from '../base';\n\nexport class HeatmapChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.heatmap;\n static readonly seriesType: string = SeriesTypeEnum.heatmap;\n static readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly transformerConstructor = HeatmapChartSpecTransformer;\n readonly type: string = ChartTypeEnum.heatmap;\n readonly seriesType: string = SeriesTypeEnum.heatmap;\n}\n\nexport const registerHeatmapChart = () => {\n registerHeatmapSeries();\n Factory.registerChart(HeatmapChart.type, HeatmapChart);\n};\n","/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-util/src/extent.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isFunction, isNumber, isNil } from '@visactor/vutils';\nimport type { ReturnNumberFunction } from './types';\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: ReturnNumberFunction) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n","import { PREFIX } from './base';\n\nexport const CORRELATION_X = `${PREFIX}_CORRELATION_X`;\nexport const CORRELATION_Y = `${PREFIX}_CORRELATION_Y`;\nexport const CORRELATION_SIZE = `${PREFIX}_CORRELATION_SIZE`;\n","import { isNil, isNumber, degreeToRadian, isArray } from '@visactor/vutils';\nimport { field as getFieldAccessor, extent, toPercent } from '@visactor/vgrammar-util';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\n\nexport interface ICorrelationOpt {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n}\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n size: number;\n datum: any;\n}\n\nexport const correlation = (data: any, options: any) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(options.startAngle ?? -90);\n const endAngle = degreeToRadian(options.endAngle ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(options.innerRadius ?? 0, maxRadius);\n const outerRadius = toPercent(options.outerRadius, maxRadius);\n\n const center = [\n isNumber(options.center?.[0])\n ? options.center[0]\n : viewBox.x0 + toPercent(options.center?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(options.center?.[1])\n ? options.center[1]\n : viewBox.y0 + toPercent(options.center?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(options.field);\n const values = data.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const sizeAccessor = !isNil(options.radiusField) ? getFieldAccessor(options.radiusField) : fieldAccessor;\n const defaultSize = options?.radiusRange?.[1] ?? 5;\n let sizeScale = (datum: any) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [min, max];\n const minR = options.radiusRange?.[0] ?? 5;\n const maxR = options.radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: any) => minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, data.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n data.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: Omit, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n return Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2);\n });\n};\n","import { isArray } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\n\nexport const correlationCenter = (data: any, options: any) => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n const { keyword, categoryField } = options;\n\n const nodeInfo = data[0].latestData[0];\n\n const centerInfo = {\n [categoryField]: keyword,\n [DEFAULT_DATA_INDEX]: nodeInfo?.[DEFAULT_DATA_INDEX],\n [DEFAULT_DATA_SERIES_FIELD]: nodeInfo?.[DEFAULT_DATA_SERIES_FIELD]\n };\n\n return centerInfo;\n};\n","import type { IElement, RipplePointEncoderSpec } from '../types';\nimport { Factory } from '../core/factory';\nimport { registerGlyphGraphic, registerSymbolGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport const registerRippleGlyph = () => {\n Factory.registerGlyph('ripplePoint', {\n symbol: 'symbol',\n ripple0: 'symbol',\n ripple1: 'symbol',\n ripple2: 'symbol'\n })\n .registerFunctionEncoder((encodeValues: RipplePointEncoderSpec, datum: any, element: IElement, config: any) => {\n // ripple value should be between 0 and 1\n const ripple = Math.max(0, Math.min(encodeValues.ripple, 1));\n const size = encodeValues.size ?? element.getGraphicAttribute('size');\n const rippleSize = size * 0.5;\n return {\n ripple0: { size: size + rippleSize * ripple, fillOpacity: 0.75 - ripple * 0.25 },\n ripple1: { size: size + rippleSize * (1 + ripple), fillOpacity: 0.5 - ripple * 0.25 },\n ripple2: { size: size + rippleSize * (2 + ripple), fillOpacity: 0.25 - ripple * 0.25 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n ripple0: { fillOpacity: 0.75 },\n ripple1: { fillOpacity: 0.5 },\n ripple2: { fillOpacity: 0.25 }\n };\n });\n registerGlyphMark();\n registerGlyphGraphic();\n registerSymbolGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { BaseMark } from './base/base-mark';\nimport type { IRippleMarkSpec } from '../typings/visual';\nimport type { IMarkStyle, IRippleMark } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerRippleGlyph } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nexport class RippleMark extends BaseMark implements IRippleMark {\n static readonly type = MarkTypeEnum.ripple;\n readonly type = RippleMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n x: 0,\n y: 0,\n ripple: 0\n };\n return defaultStyle;\n }\n\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n const glyphType = 'ripplePoint';\n this._product = view.glyph(glyphType, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerRippleMark = () => {\n Factory.registerMark(RippleMark.type, RippleMark);\n registerRippleGlyph();\n};\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { ScaleInOutAnimation } from '../../animation/config';\nimport type { CorrelationAppearPreset, ICorrelationAnimationParams } from './interface';\n\nexport const correlationPresetAnimation = (\n _params: ICorrelationAnimationParams, // 此处仅为保持结构统一\n preset: CorrelationAppearPreset\n): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'scaleIn'\n };\n }\n }\n};\n\nexport const registerCorrelationAnimation = () => {\n Factory.registerAnimation('correlation', (params: ICorrelationAnimationParams, preset: CorrelationAppearPreset) => ({\n appear: correlationPresetAnimation(params, preset),\n ...ScaleInOutAnimation\n }));\n};\n","import { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { ICorrelationSeriesSpec, ICorrelationSeriesTheme } from './interface';\n\nexport class CorrelationSeriesSpecTransformer<\n T extends ICorrelationSeriesSpec = ICorrelationSeriesSpec,\n K extends ICorrelationSeriesTheme = ICorrelationSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.nodePoint);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.centerPoint, 'centerLabel' as any);\n }\n}\n","import { PolarSeries } from '../polar/polar';\nimport type { CorrelationAppearPreset, ICorrelationSeriesSpec } from './interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport type { SeriesMarkMap } from '../interface';\nimport { correlationSeriesMark } from './constant';\nimport { registerDataSetInstanceTransform, registerDataSetInstanceParser } from '../../data/register';\nimport { correlation } from '../../data/transforms/correlation';\nimport { correlationCenter } from '../../data/transforms/correlation-center';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ICorrelationOpt } from '../../data/transforms/correlation';\nimport type { IBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerSymbolMark } from '../../mark/symbol';\nimport { SeriesData } from '../base/series-data';\nimport type { Datum, ISymbolMarkSpec, IRippleMarkSpec, AdaptiveSpec } from '../../typings';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { DataView, DataSet, dataViewParser } from '@visactor/vdataset';\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRippleMark } from '../../mark/ripple';\n// eslint-disable-next-line no-duplicate-imports\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerCorrelationAnimation } from './animation';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ILabelMark, IMark, IRippleMark, ISymbolMark } from '../../mark/interface';\nimport { CorrelationSeriesSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationSeries extends PolarSeries<\n AdaptiveSpec\n> {\n static readonly type: string = SeriesTypeEnum.correlation;\n type = SeriesTypeEnum.correlation;\n\n static readonly mark: SeriesMarkMap = correlationSeriesMark;\n static readonly transformerConstructor = CorrelationSeriesSpecTransformer as any;\n readonly transformerConstructor = CorrelationSeriesSpecTransformer;\n\n protected _centerSeriesData: SeriesData;\n\n private _nodePointMark: ISymbolMark;\n private _ripplePointMark: IRippleMark;\n private _centerPointMark: ISymbolMark;\n\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _seriesField?: string;\n getSeriesField() {\n return this._seriesField;\n }\n setSeriesField(field: string) {\n if (isValid(field)) {\n this._seriesField = field;\n }\n }\n\n protected _sizeField?: ICorrelationSeriesSpec['sizeField'];\n getSizeField() {\n return this._sizeField;\n }\n setSizeField(field: string) {\n if (isValid(field)) {\n this._sizeField = field;\n }\n }\n\n protected _sizeRange?: ICorrelationSeriesSpec['sizeRange'];\n getSizeRange() {\n return this._sizeRange;\n }\n setSizeRange(range: number[]) {\n if (isValid(range)) {\n this._sizeRange = range;\n }\n }\n\n protected _viewDataTransform!: SeriesData;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this.setSeriesField(this._spec.seriesField);\n this.setSizeField(this._spec.sizeField);\n this.setSizeRange(this._spec.sizeRange);\n }\n\n protected initData() {\n super.initData();\n\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'correlation', correlation);\n\n const centerDataSet = new DataSet();\n registerDataSetInstanceParser(centerDataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(centerDataSet, 'correlationCenter', correlationCenter);\n const centerDataView = new DataView(centerDataSet, { name: `${this.type}_${this.id}_center` });\n centerDataView.parse([this.getViewData()], {\n type: 'dataview'\n });\n centerDataView.transform({\n type: 'correlationCenter',\n options: {\n keyword: this._spec.centerLabel?.style?.text ?? '',\n categoryField: this._spec.categoryField\n }\n });\n\n this._centerSeriesData = new SeriesData(this._option, centerDataView);\n }\n\n compileData() {\n super.compileData();\n this._centerSeriesData?.compile();\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'correlation',\n options: {\n view: () => {\n return {\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2\n };\n },\n field: this._spec.valueField,\n radiusRange: this._spec.sizeRange as [number, number],\n radiusField: this._spec.sizeField,\n center: [this._spec.centerX, this._spec.centerY],\n innerRadius: this._spec.innerRadius,\n outerRadius: this._spec.outerRadius,\n startAngle: this._spec.startAngle,\n endAngle: this._spec.endAngle\n } as ICorrelationOpt\n });\n }\n\n initMark(): void {\n const nodePointMark = this._createMark(\n CorrelationSeries.mark.nodePoint,\n {\n groupKey: this._seriesField,\n isSeriesMark: true,\n key: DEFAULT_DATA_INDEX,\n stateSort: this._spec.nodePoint?.stateSort\n },\n {\n setCustomizedShape: this._spec.nodePoint?.customShape\n }\n ) as ISymbolMark;\n if (nodePointMark) {\n nodePointMark.setMarkConfig({ zIndex: LayoutZIndex.Node });\n this._nodePointMark = nodePointMark;\n }\n\n const ripplePointMark = this._createMark(CorrelationSeries.mark.ripplePoint, {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId()\n }) as IRippleMark;\n if (ripplePointMark) {\n this._ripplePointMark = ripplePointMark;\n }\n\n const centerPointMark = this._createMark(\n CorrelationSeries.mark.centerPoint,\n {\n key: DEFAULT_DATA_INDEX,\n dataView: this._centerSeriesData.getDataView(),\n dataProductId: this._centerSeriesData.getProductId(),\n stateSort: this._spec.centerPoint?.stateSort\n },\n {\n setCustomizedShape: this._spec.centerPoint?.customShape\n }\n ) as ISymbolMark;\n if (centerPointMark) {\n centerPointMark.setMarkConfig({ zIndex: LayoutZIndex.Node });\n this._centerPointMark = centerPointMark;\n }\n }\n\n initMarkStyle(): void {\n this._initNodePointMarkStyle();\n this._initRipplePointMarkStyle();\n this._initCenterPointMarkStyle();\n }\n\n protected _initNodePointMarkStyle() {\n const nodePointMark = this._nodePointMark;\n if (!nodePointMark) {\n return;\n }\n const nodePointStyle = this._spec.nodePoint?.style ?? {};\n this.setMarkStyle(\n nodePointMark,\n {\n x: (datum: Datum) => datum[CORRELATION_X],\n y: (datum: Datum) => datum[CORRELATION_Y],\n size: (datum: Datum) => datum[CORRELATION_SIZE],\n fill: nodePointStyle.fill ?? this.getColorAttribute(),\n fillOpacity: nodePointStyle.fillOpacity ?? 1,\n lineWidth: 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initRipplePointMarkStyle() {\n const ripplePointMark = this._ripplePointMark;\n if (!ripplePointMark) {\n return;\n }\n const ripplePointStyle = this._spec.ripplePoint?.style ?? {};\n\n this.setMarkStyle(\n ripplePointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1) / 2;\n },\n fill: ripplePointStyle.fill ?? this.getColorAttribute(),\n opacity: ripplePointStyle.fillOpacity ?? 0.2,\n ripple: ripplePointStyle.ripple ?? 0\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initCenterPointMarkStyle() {\n const centerPointMark = this._centerPointMark;\n if (!centerPointMark) {\n return;\n }\n this.setMarkStyle(\n centerPointMark,\n {\n x: () => {\n return this._spec.centerX ?? (this._viewBox.x1 + this._viewBox.x2) / 2;\n },\n y: () => {\n return this._spec.centerY ?? (this._viewBox.y1 + this._viewBox.y2) / 2;\n },\n size: () => {\n return (0.2 * Math.max(this._viewBox.x2 - this._viewBox.x1, this._viewBox.y2 - this._viewBox.y1)) / 2;\n },\n fill: this._spec.centerPoint?.style?.fill ?? this.getColorAttribute(),\n fillOpacity: this._spec.centerPoint?.style?.fillOpacity ?? 1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._nodePointMark && this._tooltipHelper.activeTriggerSet.mark.add(this._nodePointMark);\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this.setMarkStyle(\n labelMark,\n {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this._categoryField];\n },\n z: this.dataToPositionZ.bind(this)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initAnimation() {\n const appearPreset = (this._spec.animationAppear as IStateAnimateSpec)?.preset;\n\n this._nodePointMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('correlation')?.({}, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.nodePoint, this._spec, this._markAttributeContext)\n )\n );\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n getActiveMarks(): IMark[] {\n return [this._nodePointMark, this._centerPointMark];\n }\n\n /** 获取维度field */\n getDimensionField(): string[] {\n return [this._categoryField];\n }\n /** 获取指标field */\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this._region.getLayoutRect().width, this._region.getLayoutRect().height);\n this._rawData.reRunAllTransform();\n this.getViewData().reRunAllTransform();\n }\n}\n\nexport const registerCorrelationSeries = () => {\n registerSymbolMark();\n registerRippleMark();\n Factory.registerSeries(CorrelationSeries.type, CorrelationSeries);\n registerCorrelationAnimation();\n};\n","import type { ICorrelationSeriesSpec } from '../../series';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ICorrelationChartSpec } from './interface';\n\nexport class CorrelationChartSpecTransformer<\n T extends ICorrelationChartSpec = ICorrelationChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: ICorrelationSeriesSpec = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'sizeField',\n 'sizeRange',\n 'centerX',\n 'centerY',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'endAngle',\n 'ripplePoint',\n 'centerPoint',\n 'centerLabel',\n 'nodePoint'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { registerCorrelationSeries } from '../../series/correlation/correlation';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { ICorrelationChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { CorrelationChartSpecTransformer } from './correlation-transformer';\n\nexport class CorrelationChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.correlation;\n static readonly seriesType: string = SeriesTypeEnum.correlation;\n static readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly transformerConstructor = CorrelationChartSpecTransformer;\n readonly type: string = ChartTypeEnum.correlation;\n readonly seriesType: string = SeriesTypeEnum.correlation;\n}\n\nexport const registerCorrelationChart = () => {\n registerCorrelationSeries();\n Factory.registerChart(CorrelationChart.type, CorrelationChart);\n};\n","import type { IEffect } from '../../../model/interface';\nimport { DataView } from '@visactor/vdataset';\nimport { isXAxis } from './util/common';\nimport { isValid, TimeUtil } from '@visactor/vutils';\nimport { eachSeries } from '../../../util/model';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport { CartesianLinearAxis } from './linear-axis';\nimport type { ICartesianTickDataOpt } from '@visactor/vrender-components';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { Datum } from '../../../typings';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport type { ICartesianTimeAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { getAxisItem, shouldUpdateAxis } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianTimeAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianTimeAxis<\n T extends ICartesianTimeAxisSpec = ICartesianTimeAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianTimeAxis;\n type = ComponentTypeEnum.cartesianTimeAxis;\n\n static specKey = 'axes';\n\n protected _layerTickData!: CompilableData;\n\n protected _zero: boolean = false;\n\n effect: IEffect = {\n scaleUpdate: params => {\n this.computeData(params?.value);\n eachSeries(\n this._regions,\n s => {\n if (isXAxis(this.getOrient())) {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getXAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setXAxisHelper(this.axisHelper());\n }\n } else {\n if (\n shouldUpdateAxis(\n (s as ICartesianSeries).getYAxisHelper(),\n this.axisHelper(),\n isValid(this._seriesUserId) || isValid(this._seriesIndex)\n )\n ) {\n (s as ICartesianSeries).setYAxisHelper(this.axisHelper());\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._tick = mergeSpec({}, this._spec.tick, this._spec.layers?.[0]);\n }\n\n protected _initData() {\n super._initData();\n\n // 如果layer数组的第二项未配置,则不显示第二层\n if (this._spec.layers?.[1]) {\n const layerTickData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_layer_1_ticks` })\n .parse(this._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: `${this.type}-ticks`,\n options: {\n ...this._tickTransformOption(),\n tickCount: this._spec.layers[1].tickCount,\n forceTickCount: this._spec.layers[1].forceTickCount,\n tickStep: this._spec.layers[1].tickStep\n } as ICartesianTickDataOpt\n },\n false\n );\n this._layerTickData = new CompilableData(this._option, layerTickData);\n }\n }\n\n /**\n * @override\n */\n protected computeData(updateType?: 'range' | 'domain' | 'force'): void {\n super.computeData(updateType);\n if (this._layerTickData) {\n this._layerTickData.getDataView().reRunAllTransform();\n this._layerTickData.updateData();\n }\n }\n\n protected _getLabelFormatMethod(): any {\n const timeUtil = TimeUtil.getInstance();\n const timeFormat1 = this._spec.layers?.[1]?.timeFormat || '%Y%m%d';\n const timeFormatMode1 = this._spec.layers?.[1]?.timeFormatMode || 'local';\n const timeFormatter1 = timeFormatMode1 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n const timeFormat0 = this._spec.layers?.[0]?.timeFormat || '%Y%m%d';\n const timeFormatMode0 = this._spec.layers?.[0]?.timeFormatMode || 'local';\n const timeFormatter0 = timeFormatMode0 === 'local' ? timeUtil.timeFormat : timeUtil.timeUTCFormat;\n\n return (value: any, datum: any, index: number, data: any[], layer: number) => {\n let timeValue: string;\n if (layer === 0) {\n timeValue = timeFormatter0(timeFormat0, value);\n } else {\n timeValue = timeFormatter1(timeFormat1, value);\n }\n\n return this._spec.label?.formatMethod ? this._spec.label.formatMethod(timeValue, datum) : timeValue;\n };\n }\n\n protected getLabelItems(length: number) {\n const items = [];\n\n const tickLatestData = this.getTickData()?.getLatestData();\n if (tickLatestData && tickLatestData.length) {\n items.push(\n tickLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n );\n }\n\n const layerLatestData = this._layerTickData?.getLatestData();\n if (layerLatestData && layerLatestData.length) {\n items.push(\n layerLatestData.map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n );\n }\n\n return items;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n transformScaleDomain() {\n // do nothing\n }\n}\n\nexport const registerCartesianTimeAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianTimeAxis.type, CartesianTimeAxis);\n};\n","import type { NiceOptions, NiceType } from './interface';\nimport { parseNiceOptions } from './utils/tick-sample';\nimport { nice } from './utils/utils';\n\nexport class LogNiceMixin {\n protected _domain: number[];\n protected _domainValidator?: (val: number) => boolean;\n protected _niceDomain: number[];\n\n nice(count: number = 10, option?: NiceOptions): this {\n const originalDomain = this._domain;\n let niceMinMax: number[] = [];\n let niceType: NiceType = null;\n\n if (option) {\n const res = parseNiceOptions(originalDomain, option);\n niceMinMax = res.niceMinMax;\n this._domainValidator = res.domainValidator;\n\n niceType = res.niceType;\n\n if (res.niceDomain) {\n this._niceDomain = res.niceDomain;\n (this as any).rescale();\n return this;\n }\n } else {\n niceType = 'all';\n }\n\n if (niceType) {\n const niceDomain = nice(\n originalDomain.slice(),\n (this as any).getNiceConfig?.() ?? {\n floor: (x: number) => Math.floor(x),\n ceil: (x: number) => Math.ceil(x)\n }\n );\n\n if (niceType === 'min') {\n niceDomain[niceDomain.length - 1] = niceMinMax[1] ?? niceDomain[niceDomain.length - 1];\n } else if (niceType === 'max') {\n niceDomain[0] = niceMinMax[0] ?? niceDomain[0];\n }\n\n this._niceDomain = niceDomain as number[];\n (this as any).rescale();\n return this;\n }\n\n return this;\n }\n\n /**\n * 只对min区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMin(): this {\n const maxD = this._domain[this._domain.length - 1];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[niceDomain.length - 1] = maxD;\n this._niceDomain = niceDomain;\n (this as any).rescale();\n }\n\n return this;\n }\n\n /**\n * 只对max区间进行nice\n * 如果保持某一边界的值,就很难有好的nice效果,所以这里实现就是nice之后还原固定的边界值\n */\n niceMax(): this {\n const minD = this._domain[0];\n this.nice();\n const niceDomain = this._domain.slice();\n\n if (this._domain) {\n niceDomain[0] = minD;\n this._niceDomain = niceDomain;\n (this as any).rescale();\n }\n\n return this;\n }\n}\n","import { ticksBaseTransform, forceTicksBaseTransform, parseNiceOptions, d3TicksForLog } from './utils/tick-sample';\nimport { ContinuousScale } from './continuous-scale';\nimport { ScaleEnum } from './type';\nimport { logp, nice, powp, logNegative, expNegative, identity } from './utils/utils';\nimport type { ContinuousScaleType, IContinuousScale, NiceOptions, NiceType, PolymapType } from './interface';\nimport { mixin } from '@visactor/vutils';\nimport { LogNiceMixin } from './log-nice-mixin';\n\n/**\n * 逆反函数\n * @param f\n * @returns\n */\nfunction reflect(f: (x: number) => number) {\n return (x: number) => -f(-x);\n}\n\nfunction limitPositiveZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.max(x, min);\n };\n}\n\nfunction limitNegativeZero(min: number = Number.EPSILON) {\n return (x: number) => {\n return Math.min(x, -min);\n };\n}\n\nexport interface LogScale extends ContinuousScale {\n nice: (count?: number, option?: NiceOptions) => this;\n niceMin: (count?: number) => this;\n niceMax: (count?: number) => this;\n}\n\nexport class LogScale extends ContinuousScale {\n readonly type: ContinuousScaleType = ScaleEnum.Log;\n\n _base: number;\n _logs: (x: number) => number;\n _pows: (x: number) => number;\n _limit: (x: number) => number;\n\n constructor() {\n super(logp(10), powp(10));\n\n this._limit = limitPositiveZero();\n this._logs = this.transformer;\n this._pows = this.untransformer;\n this._domain = [1, 10];\n this._base = 10;\n }\n\n clone(): LogScale {\n return new LogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .base(this._base) as LogScale;\n }\n\n rescale(slience?: boolean) {\n if (slience) {\n return this;\n }\n super.rescale();\n\n const logs = logp(this._base);\n const pows = powp(this._base);\n\n const domain = this._niceDomain ?? this._domain;\n\n if (domain[0] < 0) {\n this._logs = reflect(logs);\n this._pows = reflect(pows);\n this._limit = limitNegativeZero();\n\n this.transformer = logNegative;\n this.untransformer = expNegative;\n } else {\n this._logs = logs;\n this._pows = pows;\n this._limit = limitPositiveZero();\n\n this.transformer = this._logs;\n this.untransformer = pows;\n }\n\n return this;\n }\n\n scale(x: any): any {\n x = Number(x);\n if (Number.isNaN(x) || (this._domainValidator && !this._domainValidator(x))) {\n return this._unknown;\n }\n if (!this._output) {\n this._output = (this._piecewise as PolymapType)(\n (this._niceDomain ?? this._domain).map(this._limit).map(this.transformer),\n this._calculateWholeRange(this._range),\n this._interpolate\n );\n }\n const output = this._output(this.transformer(this._limit(this._clamp(x))));\n\n return this._fishEyeTransform ? this._fishEyeTransform(output) : output;\n }\n\n base(): number;\n base(_: number, slience?: boolean): this;\n base(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._base;\n }\n\n this._base = _;\n return this.rescale(slience);\n }\n\n tickFormat() {\n // TODO\n return identity;\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = this._limit(d[0]);\n const v = this._limit(d[d.length - 1]);\n return d3TicksForLog(u, v, count, this._base, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n count,\n this._base,\n this.transformer,\n this.untransformer\n );\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(\n this._limit(d[0]),\n this._limit(d[d.length - 1]),\n step,\n this.transformer,\n this.untransformer\n );\n }\n\n protected getNiceConfig() {\n return {\n floor: (x: number) => this._pows(Math.floor(this._logs(this._limit(x)))),\n ceil: (x: number) => (Math.abs(x) >= 1 ? Math.ceil(x) : this._pows(Math.ceil(this._logs(this._limit(x)))))\n };\n }\n}\n\nmixin(LogScale, LogNiceMixin);\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { LogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianLogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianLogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianLogAxis extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianLogAxis;\n type = ComponentTypeEnum.cartesianLogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: LogScale = new LogScale();\n protected declare _scales: LogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.base(this._spec.base ?? 10);\n this._scale.clamp(true, null, false);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianLogAxis, LinearAxisMixin);\n\nexport const registerCartesianLogAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianLogAxis.type, CartesianLogAxis);\n};\n","import { mixin } from '@visactor/vutils';\nimport type { ContinuousScaleType, NiceOptions, NiceType } from './interface';\nimport { LinearScale } from './linear-scale';\nimport { ScaleEnum } from './type';\nimport { d3TicksForLog, forceTicksBaseTransform, parseNiceOptions, ticksBaseTransform } from './utils/tick-sample';\nimport { symlog, symexp, nice } from './utils/utils';\nimport { LogNiceMixin } from './log-nice-mixin';\n\nexport interface SymlogScale extends LinearScale {\n nice: (count?: number, option?: NiceOptions) => this;\n niceMin: (count?: number) => this;\n niceMax: (count?: number) => this;\n}\n\nexport class SymlogScale extends LinearScale {\n readonly type: ContinuousScaleType = ScaleEnum.Symlog;\n\n _const: number;\n\n constructor() {\n super(symlog(1), symexp(1));\n this._const = 1;\n }\n\n clone(): SymlogScale {\n return new SymlogScale()\n .domain(this._domain, true)\n .range(this._range, true)\n .unknown(this._unknown)\n .clamp(this.clamp(), null, true)\n .interpolate(this._interpolate, true)\n .constant(this._const) as SymlogScale;\n }\n\n constant(): number;\n constant(_: number, slience?: boolean): this;\n constant(_?: number, slience?: boolean): this | number {\n if (!arguments.length) {\n return this._const;\n }\n\n this._const = _;\n this.transformer = symlog(_);\n this.untransformer = symexp(_);\n\n return this.rescale(slience);\n }\n\n d3Ticks(count: number = 10, options?: { noDecimals?: boolean }) {\n const d = this.domain();\n const u = d[0];\n const v = d[d.length - 1];\n return d3TicksForLog(u, v, count, this._const, this.transformer, this.untransformer, options);\n }\n\n ticks(count: number = 10) {\n // return this.d3Ticks(count);\n const d = this.calculateVisibleDomain(this._range);\n return ticksBaseTransform(d[0], d[d.length - 1], count, this._const, this.transformer, this.untransformer);\n }\n\n /**\n * 生成tick数组,这个tick数组的长度就是count的长度\n * @param count\n */\n forceTicks(count: number = 10): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], count, this.transformer, this.untransformer);\n }\n\n /**\n * 基于给定step的ticks数组生成\n * @param step\n */\n stepTicks(step: number): any[] {\n const d = this.calculateVisibleDomain(this._range);\n return forceTicksBaseTransform(d[0], d[d.length - 1], step, this.transformer, this.untransformer);\n }\n}\n\nmixin(SymlogScale, LogNiceMixin);\n","import { CartesianLinearAxis } from './linear-axis';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { SymlogScale } from '@visactor/vscale';\nimport { mixin } from '@visactor/vutils';\nimport type { ICartesianSymlogAxisSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { continuousTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianSymlogAxis\n extends Pick,\n CartesianLinearAxis {}\n\nexport class CartesianSymlogAxis<\n T extends ICartesianSymlogAxisSpec = ICartesianSymlogAxisSpec\n> extends CartesianLinearAxis {\n static type = ComponentTypeEnum.cartesianSymlogAxis;\n type = ComponentTypeEnum.cartesianSymlogAxis;\n\n static specKey = 'axes';\n\n protected _zero: boolean = false;\n\n protected _scale: SymlogScale = new SymlogScale();\n protected declare _scales: SymlogScale[];\n\n /**\n * @override\n */\n protected initScales() {\n super.initScales();\n this._scale.constant(this._spec.constant ?? 10);\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n\n transformScaleDomain() {\n // do nothing\n }\n}\n\nmixin(CartesianSymlogAxis, LinearAxisMixin);\n\nexport const registerCartesianSymlogAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianSymlogAxis.type, CartesianSymlogAxis);\n};\n","import type { ITitle } from './interface';\nimport { isEmpty } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformToGraphic } from '../../util/style';\n\nexport function transformLegendTitleAttributes(title: ITitle) {\n const transformedTitle = {\n ...title\n };\n if (!isEmpty(title.style)) {\n transformedTitle.textStyle = transformToGraphic(title.style);\n }\n if (!isEmpty(title.textStyle)) {\n mergeSpec(transformedTitle.textStyle, transformToGraphic(title.textStyle));\n }\n\n if (title.shape?.style) {\n transformToGraphic(transformedTitle.shape.style);\n }\n\n if (title.background?.style) {\n transformToGraphic(transformedTitle.background.style);\n }\n return transformedTitle;\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = transformComponentStyle(item.shape);\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","/**\n * TODO:\n * align 为 'top' 时,操作区域同标题的间距有问题\n */\nimport { isValid, normalizePadding } from '@visactor/vutils';\nimport type { IGroup, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\nimport { Tag } from '../tag';\nimport type { LegendBaseAttributes, LegendTitle } from './type';\nimport { LEGEND_ELEMENT_NAME } from './constant';\n\nexport abstract class LegendBase extends AbstractComponent> {\n name = 'legend';\n protected _innerView!: IGroup;\n protected _title: Tag | null = null;\n protected _parsedPadding: number[];\n\n render() {\n this.removeAllChild(true);\n\n const { interactive = true, title, padding = 0 } = this.attribute;\n this._parsedPadding = normalizePadding(padding);\n\n // 创建一个内部的 container 用于存储所有的元素\n const innerView = graphicCreator.group({\n x: this._parsedPadding[3],\n y: this._parsedPadding[0],\n pickable: interactive,\n childrenPickable: interactive\n });\n innerView.name = LEGEND_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n if (title?.visible) {\n // 渲染标题\n this._renderTitle(title);\n }\n\n this._renderContent();\n\n this._adjustLayout();\n\n if (interactive) {\n this._bindEvents();\n }\n\n const viewBounds = this._innerView.AABBBounds;\n this.attribute.width = viewBounds.width() + this._parsedPadding[1] + this._parsedPadding[3];\n this.attribute.height = viewBounds.height() + this._parsedPadding[0] + this._parsedPadding[2];\n }\n /**\n * 图例主体内容渲染\n */\n protected abstract _renderContent(): void;\n /**\n * 事件绑定逻辑\n */\n protected abstract _bindEvents(): void;\n\n private _renderTitle(title: LegendTitle) {\n const { text = '', textStyle, padding = 0, background, minWidth, maxWidth, shape } = title;\n\n const tagAttrs: TagAttributes = {\n x: 0,\n y: 0,\n text,\n textStyle,\n padding: normalizePadding(padding),\n minWidth,\n maxWidth\n } as TagAttributes;\n\n if (shape && shape.visible) {\n tagAttrs.shape = {\n visible: true,\n ...shape.style\n };\n if (isValid(shape.space)) {\n tagAttrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n tagAttrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n const titleTag = new Tag(tagAttrs);\n titleTag.name = LEGEND_ELEMENT_NAME.title;\n this._title = titleTag;\n\n this._innerView.add(titleTag as unknown as INode);\n }\n\n private _adjustLayout() {\n // 调整 title\n if (this._title) {\n const innerViewWidth = this._innerView.AABBBounds.width();\n const titleWidth = this._title.AABBBounds.width();\n\n const align = this.attribute.title?.align;\n if (align === 'center') {\n this._title.setAttribute('x', (innerViewWidth - titleWidth) / 2);\n } else if (align === 'end') {\n this._title.setAttribute('x', innerViewWidth - titleWidth);\n }\n }\n }\n}\n","import { registerGroup, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadPagerComponent() {\n registerGroup();\n registerSymbol();\n registerText();\n}\n","/**\n * @description 翻页器\n */\nimport type { ISymbol, IText, FederatedPointerEvent } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, normalizePadding, isNumber, isFunction } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { measureTextSize } from '../util';\nimport type { PagerAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPagerComponent } from './register';\n\nconst DEFAULT_HANDLER_STYLE: PagerAttributes['handler'] = {\n space: 8,\n style: {\n fill: 'rgb(47, 69, 84)',\n cursor: 'pointer',\n size: 15\n },\n state: {\n disable: {\n fill: 'rgb(170, 170, 170)',\n cursor: 'not-allowed'\n },\n hover: {}\n }\n};\n\nloadPagerComponent();\n\nexport class Pager extends AbstractComponent> {\n name = 'pager';\n\n private _current = 1;\n getCurrent() {\n return this._current;\n }\n\n private _total!: number;\n preHandler!: ISymbol | null;\n nextHandler!: ISymbol | null;\n text!: IText | null;\n\n static defaultAttributes: Partial = {\n handler: DEFAULT_HANDLER_STYLE,\n textStyle: {\n fill: 'rgb(51, 51, 51)',\n fontSize: 12\n }\n };\n\n constructor(attributes: PagerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Pager.defaultAttributes, attributes));\n }\n\n protected render() {\n this._reset();\n const {\n layout = 'horizontal',\n handler = DEFAULT_HANDLER_STYLE,\n total,\n defaultCurrent = 1,\n textStyle,\n padding = 0\n } = this.attribute;\n\n this._current = defaultCurrent;\n const parsedPadding = normalizePadding(padding);\n const isHorizontal = layout === 'horizontal';\n\n const container = graphicCreator.group({\n x: 0,\n y: 0\n });\n\n const handlerStyle = handler.style || {};\n const handlerSize = handlerStyle.size || 15;\n const handlerSpace = handler.space ?? 8;\n const handlerState = handler.state || {};\n\n let { preShape, nextShape } = handler;\n if (!preShape) {\n preShape = isHorizontal ? 'triangleLeft' : 'triangleUp';\n }\n if (!nextShape) {\n nextShape = isHorizontal ? 'triangleRight' : 'triangleDown';\n }\n\n const preHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: 0,\n y: 0,\n symbolType: preShape,\n size: handlerSize\n });\n preHandler.states = handlerState;\n preHandler.name = 'preHandler';\n this.preHandler = preHandler;\n container.add(preHandler);\n\n // 获取文本的最大长度,如果不固定的话随着文本的变化整体会发生抖动\n const { width: maxTextWidth, height: maxTextHeight } = measureTextSize(\n this._getPageText(total),\n {\n textAlign: 'center',\n textBaseline: 'middle',\n ...textStyle\n },\n this.stage?.getTheme()?.text\n );\n\n const handlerSizeX = isNumber(handlerSize) ? handlerSize : handlerSize[0];\n const handlerSizeY = isNumber(handlerSize) ? handlerSize : handlerSize[1];\n\n const text = graphicCreator.text({\n x: isHorizontal ? handlerSizeX / 2 + handlerSpace + maxTextWidth / 2 : 0,\n y: isHorizontal ? 0 : handlerSizeY / 2 + handlerSpace + maxTextHeight / 2,\n text: this._getPageText(defaultCurrent),\n textAlign: 'center',\n textBaseline: 'middle',\n lineHeight: textStyle?.fontSize,\n ...textStyle\n });\n this.text = text;\n container.add(text);\n\n const nextHandler = graphicCreator.symbol({\n strokeBoundsBuffer: 0,\n pickMode: 'imprecise',\n ...handlerStyle,\n x: isHorizontal ? handlerSizeX + handlerSpace * 2 + maxTextWidth : 0,\n y: isHorizontal ? 0 : handlerSizeY + handlerSpace * 2 + maxTextHeight,\n symbolType: nextShape,\n size: handlerSize\n });\n nextHandler.name = 'nextHandler';\n nextHandler.states = handlerState;\n this.nextHandler = nextHandler;\n\n container.add(nextHandler);\n\n if (this._total === 1) {\n preHandler.addState('disable');\n nextHandler.addState('disable');\n } else if (this._current === 1) {\n preHandler.addState('disable');\n } else if (this._current === total) {\n nextHandler.addState('disable');\n }\n\n const containerBounds = container.AABBBounds;\n const width = containerBounds.width();\n const height = containerBounds.height();\n\n container.translateTo(0 - containerBounds.x1 + parsedPadding[3], 0 - containerBounds.y1 + parsedPadding[0]);\n this.add(container);\n\n this.attribute.width = width + parsedPadding[1] + parsedPadding[3];\n this.attribute.height = height + parsedPadding[0] + parsedPadding[2];\n\n this._bindEvents();\n }\n\n private _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this.preHandler) {\n this.preHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.preHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n\n if (this.nextHandler) {\n this.nextHandler.addEventListener('pointerenter', this._onHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerleave', this._onUnHover as EventListenerOrEventListenerObject);\n this.nextHandler.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (!target.hasState('disable')) {\n target.addState('hover');\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n target.removeState('hover');\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as ISymbol;\n if (target.name === 'preHandler') {\n if (this._current === 1) {\n return;\n }\n this._current -= 1;\n if (this._current === 1) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toPrev', {\n current: this._current,\n total: this._total,\n direction: 'pre',\n event: e\n });\n }\n\n if (target.name === 'nextHandler') {\n if (this._current === this._total) {\n return;\n }\n this._current += 1;\n\n if (this._current === this._total) {\n target.addState('disable');\n } else {\n target.removeState('disable');\n }\n\n this._dispatchEvent('toNext', {\n current: this._current,\n total: this._total,\n direction: 'next',\n event: e\n });\n }\n\n if (this._current > 1) {\n (this.preHandler as ISymbol).removeState('disable');\n }\n if (this._current < this._total) {\n (this.nextHandler as ISymbol).removeState('disable');\n }\n\n (this.text as IText).setAttribute('text', this._getPageText(this._current));\n };\n\n private _reset() {\n this.removeAllChild(true);\n this._current = 1;\n this._total = this.attribute.total as number;\n this.preHandler = this.nextHandler = this.text = null;\n }\n\n private _getPageText(current: number) {\n const { pageFormatter } = this.attribute;\n\n if (pageFormatter) {\n return isFunction(pageFormatter)\n ? pageFormatter(current, this._total)\n : `${pageFormatter}`.replace('{current}', `${current}`).replace('{total}', `${this._total}`);\n }\n\n return `${current}/${this._total}`;\n }\n\n setTotal(total: number) {\n if (total !== this.attribute.total) {\n this._total = total;\n\n if (this._current !== 1 && this._current <= total) {\n this.setAttributes({ total, defaultCurrent: this._current });\n } else {\n this.setAttribute('total', total);\n }\n }\n }\n}\n","import { registerGroup, registerRect, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadSliderComponent() {\n registerGroup();\n registerText();\n registerRect();\n registerSymbol();\n}\n","import { registerGroup, registerPath } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadPagerComponent } from '../pager/register';\nimport { loadSliderComponent } from '../slider/register';\nimport { loadScrollbarComponent } from '../scrollbar/register';\n\nfunction loadBaseLegend() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadDiscreteLegendComponent() {\n loadBaseLegend();\n loadPagerComponent();\n loadScrollbarComponent();\n}\n\nexport function loadColorContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n}\n\nexport function loadSizeContinuousLegendComponent() {\n loadBaseLegend();\n loadSliderComponent();\n registerPath();\n}\n","/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n if (contentWidth < startX + (width as number)) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { height } = item.attribute;\n if (contentHeight < startY + (height as number)) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n","import { isValid, isArray } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IDiscreteLegendData, IDiscreteLegendDataMakeOption, IDiscreteLegendFilterOption } from './interface';\nimport { DEFAULT_DATA_SERIES_FIELD } from '../../../../constant/data';\n\nexport const discreteLegendDataMake = (data: Array, op: IDiscreteLegendDataMakeOption) => {\n const result: IDiscreteLegendData[] = [];\n const tempKey: { [key in string]: boolean } = {};\n const { series, seriesField } = op;\n series().forEach(s => {\n const field = seriesField(s);\n let infoList;\n if (field === s.getSeriesField()) {\n infoList = s.getSeriesInfoList();\n } else {\n infoList = s.getSeriesInfoInField(field);\n }\n infoList.forEach(info => {\n if (tempKey[info.key]) {\n return;\n }\n tempKey[info.key] = true;\n result.push(info);\n });\n });\n return result;\n};\n\nexport const discreteLegendFilter = (data: Array, op: IDiscreteLegendFilterOption) => {\n const { series, selected, field, data: legendData, customFilter } = op;\n const selectedData = selected();\n const legendKeys = legendData(); // 全量的图例项\n if (selectedData.length === 0 && legendKeys.length) {\n return [];\n }\n\n if (selectedData.length === legendKeys.length) {\n return data;\n }\n\n const selectedFilter = {};\n selectedData.forEach(s => {\n selectedFilter[s] = true;\n });\n\n const datumField = field() ?? DEFAULT_DATA_SERIES_FIELD;\n\n if (customFilter) {\n return customFilter(data, selectedData, datumField);\n } else if (isArray(data) && data[0]?.nodes) {\n // data silter for sankey chart\n data[0].nodes = data[0].nodes.filter((d: any) => selectedFilter[d.key] === true);\n if (data[0]?.links) {\n data[0].links = data[0].links.filter(\n (d: any) => selectedFilter[d.source] === true && selectedFilter[d.target] === true\n );\n }\n } else {\n if (isValid(datumField)) {\n data = data.filter(d => selectedFilter[series.getSeriesFieldValue(d, datumField)] === true);\n }\n }\n\n return data;\n};\n","import { isNil, isEqual, isValid, array, isValidNumber } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect } from '../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutRect, ILayoutType, IOrientType, IPoint, StringOrNumber } from '../../typings';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { ChartEvent } from '../../constant/event';\nimport { eachSeries } from '../../util/model';\nimport { isValidOrient } from '../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { CompilableData } from '../../compile/data/compilable-data';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILegend, ILegendCommonSpec } from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseLegend extends BaseComponent implements ILegend {\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Legend;\n layoutLevel: number = LayoutLevel.Legend;\n\n static specKey = 'legends';\n specKey = 'legends';\n\n protected _orient: IOrientType = 'left';\n get orient() {\n return this._orient;\n }\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n protected _position: 'start' | 'middle' | 'end' = 'middle';\n get position() {\n return this._position;\n }\n\n protected _legendData!: CompilableData;\n /**\n * 获取图例数据\n * @returns 图例的数据\n */\n getLegendData() {\n return this._legendData.getLatestData();\n }\n\n private _preSelectedData: StringOrNumber[] = [];\n protected _selectedData: StringOrNumber[] = [];\n /**\n * getSelectedData\n */\n getSelectedData() {\n return this._selectedData;\n }\n\n protected _legendComponent: IGroup;\n private _cacheAttrs: any;\n\n effect: IEffect = {\n onSelectedDataChange: () => {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n };\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId?: StringOrNumber[];\n protected _regionUserIndex?: number[];\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n this._orient = isValidOrient(this._spec.orient) ? this._spec.orient : 'left';\n this._position = this._spec.position ?? 'middle';\n this._visible = this._spec.visible !== false;\n\n const { regionId, regionIndex, seriesId, seriesIndex } = this._spec;\n\n isValid(seriesId) && (this._seriesUserId = array(seriesId));\n isValid(regionId) && (this._regionUserId = array(regionId));\n isValid(seriesIndex) && (this._seriesIndex = array(seriesIndex));\n isValid(regionIndex) && (this._regionUserIndex = array(regionIndex));\n this._regions = this._option.getRegionsInUserIdOrIndex(this._regionUserId, this._regionUserIndex);\n }\n\n created() {\n super.created();\n // data\n this.initData();\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (spec?.orient !== prevSpec?.orient) {\n result.reMake = true;\n return result;\n }\n if (!isEqual(prevSpec, spec)) {\n result.reCompile = true;\n }\n return result;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected abstract _initLegendData(): DataView;\n protected abstract _initSelectedData(): void;\n protected abstract _getLegendAttributes(rect: ILayoutRect): any;\n protected abstract _getLegendConstructor(): any;\n protected abstract _initEvent(): void;\n\n private _bindLegendDataChange() {\n this._preSelectedData = this._selectedData.slice();\n this._initSelectedData();\n }\n\n protected initData() {\n const legendData = this._initLegendData();\n legendData.target.addListener('change', this._bindLegendDataChange.bind(this));\n this._legendData = new CompilableData(this._option, legendData);\n\n this._initSelectedData();\n eachSeries(\n this._regions,\n s => {\n s.event.on(ChartEvent.rawDataUpdate, { filter: ({ model }) => model?.id === s.id }, () => {\n this._legendData.getDataView().reRunAllTransform();\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n const lastData = this._selectedData;\n if (isNil(selectedData) || JSON.stringify(lastData) === JSON.stringify(selectedData)) {\n return;\n }\n\n // 更新图例筛选\n eachSeries(\n this._regions,\n s => {\n if (s.legendSelectedFilter) {\n selectedData = s.legendSelectedFilter(this, selectedData);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n\n this._selectedData = [...selectedData];\n // 更新数据\n this.effect.onSelectedDataChange?.();\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n\n // 更新图例样式\n (this._legendComponent as unknown as any)?.setSelected(this._selectedData);\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n super.afterSetLayoutStartPoint(pos);\n\n if (this._legendComponent) {\n const { x, y } = pos;\n if (isValidNumber(x * y)) {\n this._legendComponent.setAttributes({ x, y });\n }\n }\n }\n\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n if (!this._visible) {\n if (this._legendComponent && this._legendComponent.parent) {\n this._legendComponent.parent.removeChild(this._legendComponent);\n this._legendComponent = null;\n }\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n const result = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n const attrs = this._getLegendAttributes(rect);\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n if (this._legendComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n } else {\n const legendConstructor = this._getLegendConstructor();\n const legend = new legendConstructor(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData\n })\n );\n legend.name = 'legend';\n this._legendComponent = legend;\n const container = this.getContainer();\n container.add(legend);\n\n // 绑定事件\n if (!this._option.disableTriggerEvent) {\n this._initEvent();\n }\n\n // 代理 legend 上的事件\n legend.on('*', (event: any, type: string) => this._delegateEvent(this._legendComponent, event, type));\n }\n this._cacheAttrs = attrs;\n\n const width = isFinite(this._legendComponent.AABBBounds.width()) ? this._legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this._legendComponent.AABBBounds.height()) ? this._legendComponent.AABBBounds.height() : 0;\n\n if (this.layoutType !== 'normal-inline') {\n // 调整位置\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const position = this._position;\n const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width;\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height;\n }\n }\n\n this._legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY\n });\n }\n\n result.x2 = result.x1 + width;\n result.y2 = result.y1 + height;\n return result;\n }\n\n onDataUpdate(): void {\n if (JSON.stringify(this._preSelectedData) === JSON.stringify(this._selectedData)) {\n return;\n }\n\n if (this._legendComponent) {\n // 更新组件\n const attrs = this._getLegendAttributes(this.getLayoutRect());\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._legendComponent.setAttributes(\n mergeSpec({}, attrs, {\n defaultSelected: this._selectedData // 图表 resize 之后应该保留上次筛选的结果\n })\n );\n }\n }\n // 更新数据流\n this.effect.onSelectedDataChange?.();\n // 需要重新布局\n this.getChart()?.setLayoutTag(true, null, false);\n this.event.emit(ChartEvent.legendSelectedDataChange, { model: this });\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._legendComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n this._preSelectedData = null;\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isNil, isValidNumber, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport type { IDiscreteLegendSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { getLegendAttributes } from './util';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { LegendEvent } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscreteLegend as LegendComponent } from '@visactor/vrender-components';\nimport { discreteLegendDataMake, discreteLegendFilter } from '../../../data/transforms/legend-data/discrete/discrete';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { StringOrNumber } from '../../../typings';\nimport { getFormatFunction, getSpecInfo } from '../../util';\nimport type { IDiscreteLegendData } from '../../../data/transforms/legend-data/discrete';\n\nexport class DiscreteLegend extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.discreteLegend;\n type = ComponentTypeEnum.discreteLegend;\n name: string = ComponentTypeEnum.discreteLegend;\n\n protected _unselectedData: StringOrNumber[];\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IDiscreteLegendSpec) => {\n return !s.type || s.type === 'discrete';\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'discreteLegendFilter',\n options: {\n series: s,\n selected: () => this._selectedData,\n field: () => this._getSeriesLegendField(s),\n data: () => this.getLegendDefaultData(),\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendFilter', discreteLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendDataMake', discreteLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'discreteLegendDataMake',\n options: {\n series: () => {\n const result: ISeries[] = [];\n eachSeries(\n this._regions,\n s => {\n result.push(s);\n },\n {\n specIndex: this._spec.seriesIndex,\n userId: this._spec.seriesId\n }\n );\n return result;\n },\n seriesField: (s: ISeries) => this._getSeriesLegendField(s)\n }\n });\n\n return legendData;\n }\n\n protected _getSeriesLegendField(s: ISeries) {\n const defaultField = s.getSeriesField();\n const specifyScaleId = this._spec.scaleName ?? this._spec.scale;\n\n if (isNil(specifyScaleId)) {\n return defaultField;\n }\n if (!s.getRawData()) {\n return defaultField;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(specifyScaleId);\n if (!scaleSpec) {\n return defaultField;\n }\n\n // field是只在图例指定了scale的情况下生效\n if (this._spec.field) {\n return this._spec.field;\n }\n\n if (!isDataDomainSpec(scaleSpec.domain)) {\n return defaultField;\n }\n const seriesData = scaleSpec.domain.find(d => d.dataId === s.getRawData().name);\n if (!seriesData) {\n return defaultField;\n }\n return seriesData.fields?.[0] ?? defaultField;\n }\n\n protected _initSelectedData(): void {\n const fullSelectedData = this.getLegendDefaultData();\n\n if (this._unselectedData) {\n const selected: StringOrNumber[] = [];\n const unselected: StringOrNumber[] = [];\n\n fullSelectedData.forEach((entry: StringOrNumber) => {\n if (this._unselectedData.includes(entry)) {\n unselected.push(entry);\n } else {\n selected.push(entry);\n }\n });\n this._selectedData = selected;\n this._unselectedData = unselected;\n } else if (this._spec.defaultSelected) {\n this._selectedData = [...this._spec.defaultSelected];\n } else {\n this._selectedData = fullSelectedData;\n }\n }\n\n getLegendDefaultData(originalData?: boolean) {\n if (isFunction(this._spec.data)) {\n return this._getLegendItems().map((obj: LegendItemDatum) => obj.label);\n }\n\n return this._legendData\n .getLatestData()\n .map(originalData ? (obj: IDiscreteLegendData) => obj.originalKey : (obj: IDiscreteLegendData) => obj.key);\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n // 默认使用第0个系列的 seriesField 别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), series.getSeriesField());\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const attrs = {\n layout,\n items: this._getLegendItems(),\n zIndex: this.layoutZIndex,\n ...getLegendAttributes(this._spec, rect),\n // maxWidth 和 maxHeight 已经在布局模块处理了,所以 rect 的优先级最高\n maxWidth: rect.width,\n maxHeight: rect.height\n };\n this._addDefaultTitleText(attrs);\n this._addLegendItemFormatMethods(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return LegendComponent;\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n if (selectedData) {\n this._unselectedData = this.getLegendDefaultData().filter(\n (entry: StringOrNumber) => !selectedData.includes(entry)\n );\n }\n\n super.setSelectedData(selectedData);\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n doFilter && this.setSelectedData(selectedData);\n this.event.emit(ChartEvent.legendItemClick, { model: this, value: selectedData, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemHover, { model: this, value: detail, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemUnHover, { model: this, value: detail, event: e });\n });\n }\n }\n\n private _getLegendItems() {\n const originData = (this._legendData.getLatestData() || []).map((datum: any) => {\n const fillOpacity = datum.style('fillOpacity');\n const strokeOpacity = datum.style('strokeOpacity');\n const opacity = datum.style('opacity');\n const texture = datum.style('texture');\n\n return {\n label: datum.key,\n shape: {\n symbolType: datum.style('symbolType') ?? datum.shapeType ?? 'circle',\n fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,\n strokeOpacity: isValidNumber(strokeOpacity) ? strokeOpacity : 1,\n opacity: isValidNumber(opacity) ? opacity : 1,\n texturePadding: texture ? 1 : null,\n textureSize: texture ? 4 : null,\n texture,\n fill: datum.style('fill'),\n stroke: datum.style('stroke'),\n textureColor: datum.style('textureColor'),\n innerBorder: datum.style('innerBorder'),\n outerBorder: datum.style('outerBorder'),\n lineDash: datum.style('lineDash'),\n lineDashOffset: datum.style('lineDashOffset'),\n lineWidth: datum.style('lineWidth')\n }\n };\n });\n const legendItems = isFunction(this._spec.data)\n ? this._spec.data(originData, this._option.globalScale.getScale('color'), this._option.globalScale)\n : originData;\n return legendItems;\n }\n\n private _addLegendItemFormatMethods(attrs: any) {\n const { formatMethod: labelFormatMethod, formatter: labelFormatter } = this._spec.item?.label ?? {};\n const { formatMethod: valueFormatMethod, formatter: valueFormatter } = this._spec.item?.value ?? {};\n\n const { formatFunc: labelFormatFunc } = getFormatFunction(labelFormatMethod, labelFormatter);\n if (labelFormatter && !labelFormatMethod && labelFormatFunc) {\n attrs.item.label.formatMethod = (value: string, datum: any) => {\n return labelFormatFunc(value, datum, labelFormatter);\n };\n }\n const { formatFunc: valueFormatFunc } = getFormatFunction(valueFormatMethod, valueFormatter);\n if (valueFormatter && !valueFormatMethod && valueFormatFunc) {\n attrs.item.value.formatMethod = (value: string, datum: any) => {\n return valueFormatFunc(valueFormatter, value, datum, labelFormatter);\n };\n }\n }\n}\n\nexport const registerDiscreteLegend = () => {\n Factory.registerComponent(DiscreteLegend.type, DiscreteLegend);\n};\n","import { isEmpty, isValidNumber } from '@visactor/vutils';\nimport type { ISeries } from '../../../../series/interface';\nimport type { IContinuousLegendDataMakeOption, IContinuousLegendFilterOption } from './interface';\nimport { filterHierarchyDataByRange, isHierarchyItem } from '../../../../util';\n\n// 获取数值范围\nexport const continuousLegendDataMake = (data: Array, op: IContinuousLegendDataMakeOption) => {\n const { series, field, scale } = op;\n const datumField = field();\n if (field && datumField) {\n let min: number = Infinity;\n let max: number = -Infinity;\n series().forEach(s => {\n const statisticData = s.getRawDataStatisticsByField(datumField, true);\n const seriesMin = statisticData?.min;\n const seriesMax = statisticData?.max;\n if (isValidNumber(seriesMin)) {\n min = Math.min(seriesMin, min);\n }\n if (isValidNumber(seriesMax)) {\n max = Math.max(seriesMax, max);\n }\n });\n return [min, max];\n }\n if (scale) {\n const _scale = scale();\n if (!_scale) {\n return [];\n }\n return _scale.domain();\n }\n return [];\n};\n\n// 连续数据过滤\nexport const continuousLegendFilter = (data: Array, op: IContinuousLegendFilterOption) => {\n const { selected, field, data: legendData, isHierarchyData, customFilter } = op;\n const selectedRange = selected();\n const datumField = field();\n const dataRange = legendData();\n const isHierarchy = isHierarchyData\n ? isHierarchyData\n : (data: Array) => data && data.some(d => d && isHierarchyItem(d));\n\n // 如果数值范围相等,就不进行返回 data,不需要进行过滤\n if (selectedRange === dataRange) {\n return data;\n }\n if (datumField && !isEmpty(selectedRange)) {\n const [min, max] = selectedRange;\n\n if (customFilter) {\n return customFilter(data, selectedRange, datumField);\n } else if (isHierarchy(data)) {\n return filterHierarchyDataByRange(data, +min, +max, datumField);\n }\n return data.filter(datum => {\n return datum[datumField] >= min && datum[datumField] <= max;\n });\n }\n\n return data;\n};\n","/**\n * @description slider 滑块组件\n * TODO:\n * 3. step 功能开发\n * 4. tooltip 功能开发\n */\nimport type {\n IGroup,\n ISymbol,\n IGraphic,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n FederatedPointerEvent,\n Cursor\n} from '@visactor/vrender-core';\nimport { isNil, merge, clamp, isValid, array, isObject, isArray, clampRange, debounce } from '@visactor/vutils';\nimport { graphicCreator, vglobal, CustomEvent } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { SLIDER_ELEMENT_NAME } from './constant';\n\nimport type { SliderAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSliderComponent } from './register';\n\nfunction convertValueToRange(value: number | [number, number]) {\n if (isArray(value)) {\n return value;\n }\n return [value, value];\n}\n\nfunction getDefaultCursor(isHorizontal: boolean) {\n return isHorizontal ? 'ew-resize' : 'ns-resize';\n}\n\nloadSliderComponent();\n\nexport class Slider extends AbstractComponent> {\n name = 'slider';\n\n static defaultAttributes = {\n slidable: true,\n layout: 'horizontal',\n align: 'bottom',\n height: 8,\n showHandler: true,\n handlerSize: 14,\n handlerStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n tooltip: {\n shapeStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n text: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n },\n railStyle: {\n fill: 'rgba(0,0,0,.04)'\n },\n trackStyle: {\n fill: '#91caff'\n },\n showValue: true,\n valueStyle: {\n fill: '#2C3542',\n fontSize: 12\n },\n startText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n endText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n handlerText: {\n visible: true,\n space: 4,\n precision: 0,\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n };\n\n protected _isHorizontal = true;\n protected _innerView!: IGroup;\n protected _mainContainer!: IGroup;\n protected _startHandler: ISymbol | null = null;\n protected _endHandler: ISymbol | null = null;\n protected _startHandlerText: IText | null = null;\n protected _endHandlerText: IText | null = null;\n protected _railContainer!: IGroup;\n protected _rail!: IGraphic;\n protected _track!: IGraphic;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // 存储当前正在操作的滑块\n private _currentHandler: IGraphic | null = null;\n private _currentValue: { startValue?: number; endValue?: number; startPos?: number; endPos?: number } = {};\n private _tooltipState: {\n isActive?: boolean;\n pos?: number;\n value?: number;\n };\n private _isChanging?: boolean;\n\n protected _tooltipShape?: ISymbol;\n protected _tooltipText?: IText;\n\n get track() {\n return this._track;\n }\n\n get currentValue() {\n return this._currentValue;\n }\n\n get startHandler() {\n return this._startHandler;\n }\n\n get endHandler() {\n return this._endHandler;\n }\n\n get tooltipShape() {\n return this._tooltipShape;\n }\n\n constructor(attributes: SliderAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Slider.defaultAttributes, attributes));\n }\n\n protected calculatePosByValue(value: number, pos?: 'start' | 'end') {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n let ratio = 0;\n\n if (min === max) {\n ratio = pos === 'start' ? 0 : pos === 'end' ? 1 : 0;\n } else {\n ratio = (value - min) / (max - min);\n }\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return (inverse ? 1 - ratio : ratio) * railLen;\n }\n\n protected calculateValueByPos(pos: number) {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return min + (max - min) * (inverse ? 1 - pos / railLen : pos / railLen);\n }\n\n /**\n * 更新值域\n */\n setValue(value: number | number[]) {\n const { min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const [startValue, endValue] = array(value);\n\n const { startHandler, endHandler } = this._getHandlers();\n if (startHandler) {\n this._updateHandler(startHandler, this.calculatePosByValue(startValue), startValue);\n }\n\n if (endHandler) {\n this._updateHandler(endHandler, this.calculatePosByValue(endValue), endValue);\n }\n\n this._updateTrack();\n }\n\n render() {\n this.removeAllChild(true);\n const {\n layout = 'horizontal',\n railWidth,\n railHeight,\n startText,\n endText,\n min,\n max,\n showHandler = true,\n showTooltip\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n this._currentValue = {\n startValue: convertValueToRange(value)[0],\n endValue: convertValueToRange(value)[1]\n };\n const isHorizontal = layout === 'horizontal';\n this._isHorizontal = isHorizontal;\n\n const innerView = graphicCreator.group({\n x: 0,\n y: 0\n });\n innerView.name = SLIDER_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n let startLen = 0;\n let startTextShape;\n if (startText && startText.visible) {\n // 渲染首部文本\n startTextShape = graphicCreator.text({\n x: isHorizontal ? 0 : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : 0,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: startText.text,\n lineHeight: startText.style?.fontSize,\n ...startText.style\n });\n startTextShape.name = SLIDER_ELEMENT_NAME.startText;\n innerView.add(startTextShape);\n const space = isValid(startText.space) ? startText.space : 0;\n startLen += (isHorizontal ? startTextShape.AABBBounds.width() : startTextShape.AABBBounds.height()) + space;\n }\n const mainContainer = graphicCreator.group({\n x: isHorizontal ? startLen : 0,\n y: isHorizontal ? 0 : startLen\n });\n innerView.add(mainContainer);\n\n const railContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n railContainer.name = SLIDER_ELEMENT_NAME.railContainer;\n this._railContainer = railContainer;\n mainContainer.add(railContainer);\n\n this._mainContainer = mainContainer;\n\n this._renderRail(railContainer);\n\n startLen += isHorizontal ? (railWidth as number) : (railHeight as number);\n\n let endTextShape;\n if (endText && endText.visible) {\n const space = isValid(endText.space) ? endText.space : 0;\n\n // 渲染首部文本\n endTextShape = graphicCreator.text({\n x: isHorizontal ? startLen + space : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : startLen + space,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: endText.text,\n lineHeight: endText.style?.fontSize,\n ...endText.style\n });\n endTextShape.name = SLIDER_ELEMENT_NAME.endText;\n innerView.add(endTextShape);\n }\n\n this._renderTrack(railContainer);\n\n if (showHandler) {\n this._renderHandlers(mainContainer);\n this._bindEvents();\n }\n\n if (showTooltip) {\n this._renderTooltip();\n this._bindTooltipEvents();\n }\n }\n\n // 渲染滑块轨道\n protected _renderRail(container: IGroup) {\n const { railWidth, railHeight, railStyle, slidable } = this.attribute;\n\n let cursor: Cursor = 'default';\n if (slidable !== false) {\n cursor = 'pointer';\n }\n\n const railShape = graphicCreator.rect({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cursor,\n ...railStyle\n });\n railShape.name = SLIDER_ELEMENT_NAME.rail;\n container.add(railShape);\n this._rail = railShape;\n\n return railShape;\n }\n\n // 渲染 handler\n protected _renderHandlers(container: IGroup) {\n const {\n range,\n min,\n max,\n handlerSize = 14,\n handlerStyle,\n handlerText,\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n const handlerTextVisible = handlerText && handlerText.visible;\n const isHorizontal = this._isHorizontal;\n\n const [startValue, endValue] = convertValueToRange(value);\n // 单滑块\n const startPos = this.calculatePosByValue(startValue, range ? 'start' : 'end');\n const startHandler = this._renderHandler({\n x: isHorizontal ? startPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : startPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n startHandler.name = SLIDER_ELEMENT_NAME.startHandler;\n this._startHandler = startHandler;\n container.add(startHandler);\n this._currentValue.startPos = startPos;\n\n if (handlerTextVisible) {\n const startHandlerText = this._renderHandlerText(startValue, range ? 'start' : 'end');\n startHandlerText.name = SLIDER_ELEMENT_NAME.startHandlerText;\n container.add(startHandlerText);\n\n this._startHandlerText = startHandlerText;\n }\n\n if (range) {\n // 绘制第二个滑块\n // 单滑块\n const endPos = this.calculatePosByValue(endValue, 'end');\n const endHandler = this._renderHandler({\n x: isHorizontal ? endPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : endPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n endHandler.name = SLIDER_ELEMENT_NAME.endHandler;\n this._endHandler = endHandler;\n container.add(endHandler);\n this._currentValue.endPos = endPos;\n\n if (handlerTextVisible) {\n const endHandlerText = this._renderHandlerText(endValue, 'end');\n endHandlerText.name = SLIDER_ELEMENT_NAME.endHandlerText;\n container.add(endHandlerText);\n\n this._endHandlerText = endHandlerText;\n }\n }\n }\n\n // 渲染选中区域\n protected _renderTrack(container: IGroup) {\n const { range, min, max, railHeight, railWidth, trackStyle, railStyle, slidable, value } = this\n .attribute as SliderAttributes;\n\n let startValue;\n let endValue;\n\n if (isNil(value)) {\n if (range) {\n startValue = min;\n endValue = max;\n } else {\n startValue = endValue = min;\n }\n } else {\n if (range) {\n const clampValue = clampRange(value as [number, number], min, max);\n startValue = clampValue[0];\n endValue = clampValue[1];\n } else {\n startValue = min;\n endValue = clamp(value as number, min, max);\n }\n }\n\n const isHorizontal = this._isHorizontal;\n // eslint-disable-next-line prefer-const\n // let [startValue, endValue] = convertValueToRange(value);\n\n if (!range) {\n startValue = min;\n }\n\n const trackContainer = graphicCreator.group({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cornerRadius: railStyle?.cornerRadius,\n clip: true,\n pickable: false\n });\n trackContainer.name = SLIDER_ELEMENT_NAME.trackContainer;\n\n const draggableTrack = isObject(range) && range.draggableTrack === true;\n let cursor: Cursor;\n if (slidable === false) {\n cursor = 'default';\n } else if (range === false) {\n cursor = 'pointer';\n } else if (draggableTrack === false) {\n cursor = 'pointer';\n } else {\n cursor = getDefaultCursor(isHorizontal);\n }\n\n const startPos = this.calculatePosByValue(startValue, 'start');\n const endPos = this.calculatePosByValue(endValue, range ? 'end' : 'start');\n\n const track = graphicCreator.rect({\n x: isHorizontal ? Math.min(startPos, endPos) : 0,\n y: isHorizontal ? 0 : Math.min(startPos, endPos),\n width: isHorizontal ? Math.abs(endPos - startPos) : railWidth,\n height: isHorizontal ? railHeight : Math.abs(endPos - startPos),\n cursor,\n ...trackStyle\n });\n track.name = SLIDER_ELEMENT_NAME.track;\n this._track = track;\n trackContainer.add(track);\n container.add(trackContainer);\n }\n\n protected _renderHandler(style: Partial) {\n // 渲染单个滑块\n const handler = graphicCreator.symbol(style);\n\n return handler;\n }\n\n private _renderHandlerText(value: number, position: 'start' | 'end') {\n const {\n align,\n handlerSize = 14,\n handlerText = {},\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n\n const isHorizontal = this._isHorizontal;\n\n const pos = this.calculatePosByValue(value, position);\n const textSpace = handlerText.space ?? 4;\n const textStyle: ITextGraphicAttribute = {\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n lineHeight: handlerText.style?.lineHeight,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)\n };\n if (isHorizontal) {\n if (align === 'top') {\n // 展示 slider 上部\n textStyle.textBaseline = 'bottom';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight - handlerSize) / 2 - textSpace;\n } else {\n // 展示 slider 下部\n textStyle.textBaseline = 'top';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight + handlerSize) / 2 + textSpace;\n }\n } else {\n if (align === 'left') {\n // 展示 slider 左侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'end';\n textStyle.x = (railWidth - handlerSize) / 2 - textSpace;\n textStyle.y = pos;\n } else {\n // 展示 slider 右侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'start';\n textStyle.x = (railWidth + handlerSize) / 2 + textSpace;\n textStyle.y = pos;\n }\n }\n\n // 展示 handler 当前所在的数值\n const textShape = graphicCreator.text({\n ...textStyle,\n ...handlerText.style\n });\n return textShape;\n }\n\n private _renderTooltip() {\n const { tooltip, railHeight, railWidth, align } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n this._tooltipState = {\n value: this._currentValue.startValue,\n pos: this._currentValue.startPos\n };\n } else {\n this._tooltipState = null;\n }\n\n const cx = this._isHorizontal ? 0 : railWidth / 2;\n const cy = this._isHorizontal ? railHeight / 2 : 0;\n\n if (tooltip && tooltip.shape) {\n const shape = graphicCreator.symbol({\n pickable: false,\n visible: !!this._tooltipState,\n x: cx,\n y: cy,\n symbolType: 'circle',\n\n ...tooltip.shapeStyle\n });\n\n this._tooltipShape = shape;\n this._mainContainer.add(shape);\n }\n\n const textConfig = (tooltip && tooltip.text) || {};\n const space = textConfig.space ?? 6;\n\n const textStyle: ITextGraphicAttribute = {\n pickable: false,\n visible: !!this._tooltipState,\n text: ''\n };\n\n if (this._isHorizontal) {\n textStyle.x = cx;\n textStyle.y = align === 'top' ? cy - railHeight / 2 - space : cy + railHeight / 2 + space;\n textStyle.textAlign = 'center';\n textStyle.textBaseline = align === 'top' ? 'bottom' : 'top';\n } else {\n textStyle.y = cy;\n textStyle.x = align === 'left' ? cx - railWidth / 2 - space : cy + railWidth / 2 + space;\n textStyle.textAlign = align === 'left' ? 'end' : 'start';\n textStyle.textBaseline = 'middle';\n }\n const text = graphicCreator.text({\n ...textStyle,\n ...textConfig.style\n });\n\n this._mainContainer.add(text);\n this._tooltipText = text;\n\n if (this._tooltipState) {\n this._updateTooltip();\n }\n }\n\n private _updateTooltip() {\n if ((!this._tooltipShape && !this._tooltipText) || !this._tooltipState) {\n return;\n }\n const { railWidth, railHeight } = this.attribute;\n\n const railLen = this._isHorizontal ? railWidth : railHeight;\n const coord = this._tooltipState.pos * railLen;\n const coordKey = this._isHorizontal ? 'x' : 'y';\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttributes({\n visible: true,\n [coordKey]: coord\n });\n }\n const { align } = this.attribute;\n\n if (this._tooltipText) {\n const textConfig = (this.attribute.tooltip && this.attribute.tooltip.text) || {};\n this._tooltipText.setAttributes({\n visible: true,\n [coordKey]: coord,\n text: textConfig.formatter\n ? textConfig.formatter(this._tooltipState.value)\n : !this._isHorizontal && align === 'left'\n ? `${this._tooltipState.value.toFixed(textConfig.precision ?? 0)} ≈`\n : `≈ ${this._tooltipState.value.toFixed(textConfig.precision ?? 0)}`\n });\n }\n }\n\n private _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { slidable, range } = this.attribute as SliderAttributes;\n if (slidable) {\n if (this._startHandler) {\n this._startHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._startHandlerText) {\n this._startHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandler) {\n this._endHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandlerText) {\n this._endHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n\n if (isObject(range) && range.draggableTrack) {\n this._track.addEventListener('pointerdown', this._onTrackPointerdown as EventListenerOrEventListenerObject);\n }\n\n this._railContainer.addEventListener(\n 'pointerdown',\n this._onRailPointerDown as EventListenerOrEventListenerObject\n );\n }\n }\n\n private _bindTooltipEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n\n this._mainContainer.addEventListener('pointerenter', this._onTooltipShow as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointermove', this._onTooltipUpdate as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointerleave', this._onTooltipHide as EventListenerOrEventListenerObject);\n }\n\n private _onTooltipShow = (e: FederatedPointerEvent) => {\n if (this._isChanging || (this._tooltipState && this._tooltipState.isActive)) {\n return;\n }\n\n if (!this._tooltipState) {\n this._tooltipState = { isActive: true };\n } else {\n this._tooltipState.isActive = true;\n }\n\n this._onTooltipUpdate(e);\n this._dispatchTooltipEvent('sliderTooltipShow');\n };\n\n private _onTooltipUpdate = (e: FederatedPointerEvent) => {\n if (this._isChanging || !this._tooltipState || !this._tooltipState.isActive) {\n return;\n }\n const railLen = this._isHorizontal ? this._rail.globalAABBBounds.width() : this._rail.globalAABBBounds.height();\n const pos = clamp(\n this._isHorizontal\n ? (e.viewX - this._rail.globalAABBBounds.x1) / railLen\n : (e.viewY - this._rail.globalAABBBounds.y1) / railLen,\n 0,\n 1\n );\n\n if (pos !== this._tooltipState.pos) {\n this._tooltipState.pos = pos;\n this._tooltipState.value = this.calculateValueByPos(pos * railLen);\n\n this._updateTooltip();\n this._dispatchTooltipEvent('sliderTooltipUpdate');\n }\n };\n\n private _onTooltipHide = () => {\n const { tooltip } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n return;\n }\n\n this._tooltipState = null;\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttribute('visible', false);\n }\n if (this._tooltipText) {\n this._tooltipText.setAttribute('visible', false);\n }\n this._dispatchTooltipEvent('sliderTooltipHide');\n };\n\n private _onHandlerPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { x, y } = this.stage.eventPointTransform(e);\n this._currentHandler = e.target as unknown as IGraphic;\n this._prePos = this._isHorizontal ? x : y;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onHandlerPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const { x, y } = this.stage.eventPointTransform(e);\n let currentPos;\n let delta = 0;\n let originPos;\n let railLen;\n if (!this._isHorizontal) {\n currentPos = y;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.y as number;\n railLen = railHeight;\n } else {\n currentPos = x;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.x as number;\n railLen = railWidth;\n }\n\n const newPos = clamp(originPos + delta, 0, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n\n if (this._currentHandler.type === 'text') {\n this._updateHandlerText(this._currentHandler as IText, newPos, currentValue);\n } else {\n this._updateHandler(this._currentHandler as ISymbol, newPos, currentValue);\n }\n\n this._updateTrack();\n this._prePos = currentPos;\n\n this._dispatchChangeEvent();\n };\n\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n this._currentHandler = null;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener(\n 'pointerupoutside',\n this._onHandlerPointerUp as EventListenerOrEventListenerObject\n );\n }\n };\n\n private _onTrackPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n\n const { x, y } = this.stage.eventPointTransform(e);\n this._prePos = this._isHorizontal ? x : y;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onTrackPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n const { startHandler, endHandler } = this._getHandlers();\n\n let currentPos;\n let trackLen;\n let railLen;\n const { x, y } = this.stage.eventPointTransform(e);\n if (this._isHorizontal) {\n currentPos = x;\n // @ts-ignore\n trackLen = this._track.attribute.width;\n railLen = railWidth;\n } else {\n currentPos = y;\n // @ts-ignore\n trackLen = this._track.attribute.height;\n railLen = railHeight;\n }\n const delta = currentPos - this._prePos; // 实际位移的变化\n if (startHandler) {\n const originPos = (this._isHorizontal ? startHandler.attribute.x : startHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, trackLen, railLen)\n : clamp(originPos + delta, 0, railLen - trackLen);\n const currentValue = this.calculateValueByPos(newPos);\n this._updateHandler(startHandler, newPos, currentValue);\n }\n\n if (endHandler) {\n const originPos = (this._isHorizontal ? endHandler.attribute.x : endHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, 0, railLen - trackLen)\n : clamp(originPos + delta, trackLen, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n const startHandlerAttribute = startHandler?.attribute;\n this._updateHandler(endHandler, newPos, currentValue);\n this._track.setAttributes(\n this._isHorizontal\n ? {\n x: Math.min(startHandlerAttribute.x as number, endHandler.attribute.x as number),\n // @ts-ignore\n width: Math.abs((startHandlerAttribute.x as number) - (endHandler.attribute.x as number))\n }\n : {\n y: Math.min(startHandlerAttribute.y as number, endHandler.attribute.y as number),\n // @ts-ignore\n height: Math.abs((startHandlerAttribute.y as number) - (endHandler.attribute.y as number))\n }\n );\n }\n\n this._prePos = currentPos;\n this._dispatchChangeEvent();\n };\n\n private _onTrackPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n\n const startHandler = this._startHandler as ISymbol;\n const endHandler = this._endHandler;\n\n let currentPos;\n let startHandlerPos;\n let endHandlerPos;\n let railLen;\n // 更新 handler, text 以及 track\n if (this._isHorizontal) {\n currentPos = e.viewX - this._rail.globalAABBBounds.x1;\n startHandlerPos = startHandler?.attribute.x as number;\n endHandlerPos = endHandler?.attribute.x;\n railLen = railWidth;\n } else {\n currentPos = e.viewY - this._rail.globalAABBBounds.y1;\n startHandlerPos = startHandler?.attribute.y as number;\n endHandlerPos = endHandler?.attribute.y;\n railLen = railHeight;\n }\n\n const currentValue = this.calculateValueByPos(currentPos);\n\n if (isValid(endHandlerPos)) {\n const updateHandler = (\n Math.abs(currentPos - startHandlerPos) > Math.abs(currentPos - endHandlerPos) ? endHandler : startHandler\n ) as ISymbol;\n this._updateHandler(updateHandler, currentPos, currentValue);\n } else {\n this._updateHandler(startHandler, currentPos, currentValue);\n }\n this._updateTrack();\n\n this._dispatchChangeEvent();\n };\n\n // 更新 track 样式\n private _updateTrack() {\n // 更新 track\n const { inverse, railWidth, railHeight } = this.attribute;\n const startHandler = this._startHandler;\n const endHandler = this._endHandler;\n\n if (this._isHorizontal) {\n const startHandlerPos = startHandler?.attribute.x as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.x as number;\n // 区间\n this._track.setAttributes({\n x: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n width: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n x: startHandlerPos,\n // @ts-ignore\n width: railWidth - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n width: startHandlerPos\n });\n }\n } else {\n const startHandlerPos = startHandler?.attribute.y as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.y as number;\n // 区间\n this._track.setAttributes({\n y: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n height: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n y: startHandlerPos,\n // @ts-ignore\n height: railHeight - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n height: startHandlerPos\n });\n }\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandler(handler: ISymbol, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n handler.setAttribute(isHorizontal ? 'x' : 'y', position);\n const updateHandlerText =\n handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;\n if (updateHandlerText) {\n const { handlerText = {} } = this.attribute as SliderAttributes;\n updateHandlerText.setAttributes({\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandlerText(handlerText: IText, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n const { handlerText: handlerTextAttr = {} } = this.attribute as SliderAttributes;\n handlerText.setAttributes({\n [isHorizontal ? 'x' : 'y']: position,\n text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed(handlerTextAttr.precision ?? 0)\n });\n const updateHandler =\n handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;\n if (updateHandler) {\n updateHandler.setAttributes({\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n private _dispatchChangeEvent() {\n const isRange = !!this.attribute.range;\n const currentValue = this._currentValue;\n\n this._dispatchEvent('change', {\n value: isRange\n ? [\n Math.min(currentValue.endValue as number, currentValue.startValue as number),\n Math.max(currentValue.endValue as number, currentValue.startValue as number)\n ]\n : currentValue.startValue,\n position: isRange\n ? [\n Math.min(currentValue.endPos as number, currentValue.startPos as number),\n Math.max(currentValue.endPos as number, currentValue.startPos as number)\n ]\n : currentValue.startPos\n });\n }\n\n private _dispatchTooltipEvent(type: string) {\n this._dispatchEvent('sliderTooltip', {\n type,\n position: this._tooltipState && this._tooltipState.pos,\n value: this._tooltipState && this._tooltipState.value\n });\n }\n\n private _getHandlers() {\n const { inverse } = this.attribute as SliderAttributes;\n let startHandler = this._startHandler;\n let endHandler = this._endHandler;\n\n if (!endHandler) {\n return { startHandler, endHandler };\n }\n\n if (this._isHorizontal) {\n if (\n (!inverse && (endHandler.attribute.x as number) < (startHandler?.attribute.x as number)) ||\n (inverse && (endHandler.attribute.x as number) > (startHandler?.attribute.x as number))\n ) {\n [startHandler, endHandler] = [endHandler, startHandler];\n }\n } else {\n if (\n (!inverse && (endHandler.attribute.y as number) < (startHandler?.attribute.y as number)) ||\n (inverse && (endHandler.attribute.y as number) > (startHandler?.attribute.y as number))\n ) {\n [startHandler, endHandler] = [endHandler, startHandler];\n }\n }\n\n return {\n startHandler,\n endHandler\n };\n }\n}\n","/**\n * @description 连续颜色图例\n * TODO:\n * showHandlers 测试\n */\nimport { merge, isEmpty, get, isNil } from '@visactor/vutils';\nimport type { FederatedPointerEvent, FederatedEvent, IColor, ILinearGradient, INode } from '@visactor/vrender-core';\nimport type { ILinearScale } from '@visactor/vscale';\nimport { LinearScale } from '@visactor/vscale';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ColorLegendAttributes } from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadColorContinuousLegendComponent } from '../register';\n\nloadColorContinuousLegendComponent();\nexport class ColorContinuousLegend extends LegendBase {\n name = 'colorLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n // orient: 'top',\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n fill: null as any,\n lineWidth: 4,\n stroke: '#fff',\n outerBorder: {\n distance: 2,\n lineWidth: 1,\n stroke: '#ccc'\n }\n },\n tooltip: {\n shapeStyle: {\n lineWidth: 4,\n stroke: '#fff'\n }\n }\n };\n\n private _slider!: Slider;\n private _colorScale!: ILinearScale;\n private _color: IColor | undefined;\n\n constructor(attributes: ColorLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ColorContinuousLegend.defaultAttributes, attributes));\n }\n\n /**\n * 更新数据选中范围\n * @param value 选中数据范围\n * @returns\n */\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n this._updateColor();\n }\n\n protected _renderContent(): void {\n const {\n colors,\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n inverse,\n disableTriggerEvent\n } = this.attribute as ColorLegendAttributes;\n\n // 创建 colorScale\n const domain = [];\n const step = (max - min) / (colors.length - 1);\n for (let i = 0; i < colors.length; i++) {\n domain.push(min + step * i);\n }\n\n this._colorScale = new LinearScale().domain(domain, true).range(colors);\n this._color = this._getTrackColor();\n\n const slider = new Slider({\n x: 0,\n y: 0,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle: {\n fill: this._color,\n ...trackStyle\n },\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent,\n inverse\n });\n this._innerView.add(slider as unknown as INode);\n this._slider = slider;\n // 做下位置调整,对齐\n slider.translateTo(\n 0 - slider.AABBBounds.x1,\n (this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE) : 0) -\n slider.AABBBounds.y1\n );\n this._updateColor();\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n this._slider.addEventListener('sliderTooltip', this._onSliderToolipChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _getTrackColor(): IColor | undefined {\n const { colors, layout, inverse } = this.attribute as ColorLegendAttributes;\n\n if (isEmpty(colors)) {\n return undefined;\n }\n const count = colors.length;\n if (count === 1) {\n return colors[0];\n }\n const stops = [];\n\n for (let i = 0; i < count; i++) {\n const percent = i / (count - 1);\n stops.push({\n offset: percent,\n color: colors[i]\n });\n }\n const isHorizontal = layout === 'horizontal';\n\n const res: IColor = {\n gradient: 'linear',\n stops,\n x0: 0,\n y0: 0,\n x1: isHorizontal ? 1 : 0,\n y1: isHorizontal ? 0 : 1\n };\n\n if (inverse) {\n if (isHorizontal) {\n res.x0 = 1;\n res.x1 = 0;\n } else {\n res.y0 = 1;\n res.y1 = 0;\n }\n }\n\n return res;\n }\n\n private _onSliderToolipChange = (e: FederatedEvent) => {\n const tooltipShape = this._slider.tooltipShape;\n\n if (tooltipShape && e.detail && !isNil(e.detail.value)) {\n const color = this._colorScale.scale(e.detail.value);\n\n tooltipShape.setAttribute('fill', color);\n }\n\n this.dispatchEvent(e);\n };\n\n private _onSliderChange = (e: FederatedEvent) => {\n // 更新 handler 以及 track 的渐变色\n this._updateColor();\n this.dispatchEvent(e);\n };\n\n private _updateColor() {\n const { layout = 'horizontal', colors, railWidth, railHeight } = this.attribute as ColorLegendAttributes;\n const { startHandler, endHandler, track, attribute } = this._slider;\n const { startValue, endValue, startPos, endPos } = this._slider.currentValue;\n const handlerColor = attribute.handlerStyle?.fill;\n // 计算颜色\n if (startHandler && !handlerColor) {\n const startHandlerColor = this._colorScale.scale(startValue);\n startHandler.setAttribute('fill', startHandlerColor);\n }\n\n if (endHandler && !handlerColor) {\n const endHandlerColor = this._colorScale.scale(endValue);\n endHandler.setAttribute('fill', endHandlerColor);\n }\n\n const isHorizontal = layout === 'horizontal';\n const railLen = isHorizontal ? railWidth : railHeight;\n const trackLength = Math.abs((startPos as number) - (endPos as number));\n\n // 计算渐变色\n if (trackLength !== railLen && colors && colors.length > 1) {\n const stops = (this._color as ILinearGradient).stops;\n const start = Math.min(startPos as number, endPos as number);\n const end = Math.max(startPos as number, endPos as number);\n const startRatio = start / railLen;\n const endRatio = end / railLen;\n const range = endRatio - startRatio;\n const betweenStops = stops.filter(stop => stop.offset > startRatio && stop.offset < endRatio);\n\n const minValue = Math.min(startValue, endValue);\n const maxValue = Math.max(startValue, endValue);\n const startColor = this._colorScale.scale(minValue);\n const endColor = this._colorScale.scale(maxValue);\n const newStops = [{ offset: 0, color: startColor }];\n betweenStops.forEach(stop => {\n newStops.push({\n offset: (stop.offset - startRatio) / range,\n color: stop.color\n });\n });\n newStops.push({\n offset: 1,\n color: endColor\n });\n track.setAttribute('fill', {\n ...(this._color as ILinearGradient),\n stops: newStops\n });\n }\n }\n}\n","import type { OrientType } from '../interface';\n\nexport function getSizeHandlerPath(align: OrientType = 'bottom') {\n let centerX = 0;\n const centerY = 0;\n const upperHalf = 3.5;\n const leftHalf = 2.5;\n const arrowY = 6;\n\n if (align === 'top') {\n return `\n M${centerX},${centerY - arrowY}L${centerX - upperHalf},${centerY - leftHalf}\n v${2 * leftHalf}\n h${2 * upperHalf}\n v${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'left') {\n centerX = 1;\n return `\n M${centerX - arrowY},${centerY}L${centerX - arrowY + leftHalf},${centerY - upperHalf}\n h${2 * leftHalf}\n v${2 * upperHalf}\n h${-2 * leftHalf}\n Z\n`;\n }\n\n if (align === 'right') {\n centerX = -1;\n\n return `\n M${centerX + arrowY},${centerY}L${centerX + arrowY - leftHalf},${centerY - upperHalf}\n h${-2 * leftHalf}\n v${2 * upperHalf}\n h${2 * leftHalf}\n Z\n `;\n }\n\n return `\n M${centerX},${centerY + arrowY}L${centerX - upperHalf},${centerY + leftHalf}\n v${-2 * leftHalf}\n h${2 * upperHalf}\n v${2 * leftHalf}\n Z\n`;\n}\n","/**\n * @description 连续尺寸图例\n */\nimport type { FederatedEvent, INode } from '@visactor/vrender-core';\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge, get } from '@visactor/vutils';\nimport { LegendBase } from '../base';\nimport { Slider } from '../../slider';\nimport { DEFAULT_TITLE_SPACE } from '../constant';\nimport type { ComponentOptions } from '../../interface';\nimport type { SizeLegendAttributes } from './type';\nimport { getSizeHandlerPath } from '../util';\nimport { loadSizeContinuousLegendComponent } from '../register';\n\nloadSizeContinuousLegendComponent();\nexport class SizeContinuousLegend extends LegendBase {\n name = 'sizeLegend';\n\n static defaultAttributes = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: 'rgba(46, 47, 50, 1)'\n }\n },\n handlerSize: 10,\n handlerStyle: {\n lineWidth: 1,\n stroke: '#ccc',\n fill: '#fff'\n },\n sizeBackground: {\n fill: 'rgba(20,20,20,0.1)'\n }\n };\n\n private _slider!: Slider;\n\n constructor(attributes: SizeLegendAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SizeContinuousLegend.defaultAttributes, attributes));\n }\n\n setSelected(value: number[]) {\n if (!this._slider) {\n return;\n }\n this._slider.setValue(value);\n }\n\n protected _renderContent(): void {\n const {\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler = true,\n handlerSize,\n handlerStyle,\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n sizeBackground,\n disableTriggerEvent,\n inverse\n } = this.attribute as SizeLegendAttributes;\n\n const mainContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._innerView.add(mainContainer);\n\n const slider = new Slider({\n x: 0,\n y: 0,\n zIndex: 1,\n range: {\n draggableTrack: true\n },\n slidable,\n layout,\n align,\n min,\n max,\n value,\n railWidth,\n railHeight,\n showHandler,\n handlerSize,\n handlerStyle: {\n symbolType: getSizeHandlerPath(align),\n ...handlerStyle\n },\n railStyle,\n trackStyle,\n startText,\n endText,\n handlerText,\n showTooltip,\n tooltip,\n disableTriggerEvent,\n inverse\n });\n mainContainer.add(slider as unknown as INode);\n\n // 绘制 size 背景\n let start = 0;\n let path;\n const backgroundHeight = 12; // 目前暂不开放配置\n if (layout === 'horizontal') {\n if (align === 'top') {\n path = `M0,0L${railWidth},0L${inverse ? 0 : railWidth},${backgroundHeight}Z`;\n start = railHeight;\n } else {\n path = `M0,${backgroundHeight}L${railWidth},${backgroundHeight}L${inverse ? 0 : railWidth},0Z`;\n slider.setAttribute('y', backgroundHeight);\n }\n } else {\n if (align === 'left') {\n path = `M${railWidth},0L${railWidth + backgroundHeight},${\n inverse ? 0 : railHeight\n }L${railWidth},${railHeight}Z`;\n } else {\n path = `M0,${inverse ? 0 : railHeight}L${backgroundHeight},${railHeight}L${backgroundHeight},0Z`;\n slider.setAttribute('x', backgroundHeight);\n }\n }\n const background = graphicCreator.path({\n x: 0,\n y: start,\n path,\n ...sizeBackground,\n zIndex: 0\n });\n mainContainer.add(background);\n\n // 做下位置调整\n const titleSpace = this._title\n ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', DEFAULT_TITLE_SPACE)\n : 0;\n\n mainContainer.translate(0 - mainContainer.AABBBounds.x1, titleSpace - mainContainer.AABBBounds.y1);\n\n this._slider = slider;\n }\n\n protected _bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (this._slider) {\n this._slider.addEventListener('change', this._onSliderChange as EventListenerOrEventListenerObject);\n this._slider.addEventListener('sliderTooltip', this._onSliderToolipChange as EventListenerOrEventListenerObject);\n }\n }\n\n private _onSliderChange = (e: FederatedEvent) => {\n this.dispatchEvent(e);\n };\n\n private _onSliderToolipChange = (e: FederatedEvent) => {\n this.dispatchEvent(e);\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport { ColorContinuousLegend, SizeContinuousLegend } from '@visactor/vrender-components';\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\n\n// 获取连续图例组件属性\nexport function getContinuousLegendAttributes(spec: IColorLegendSpec | ISizeLegendSpec) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = mergeSpec({}, spec);\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n\nexport function isContinuousLegend(type: string) {\n return type === 'color' || type === 'size';\n}\n\nexport const ContinuousLegendMap = {\n color: ColorContinuousLegend,\n size: SizeContinuousLegend\n};\n","/**\n * @description color legend component\n */\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { debounce, isEmpty, isNil, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries, getSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport {\n continuousLegendDataMake,\n continuousLegendFilter\n} from '../../../data/transforms/legend-data/continuous/continuous';\nimport { ContinuousLegendMap, getContinuousLegendAttributes, isContinuousLegend } from './util';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport { getSpecInfo } from '../../util';\n\nconst SINGLE_SEQUENCE = ['#C4E7FF', '#98CAFF', '#75ACFF', '#518FF9', '#2775DC', '#005CBE', '#00429F', '#00287E'];\nconst SIZE = [2, 10];\n\nexport class ContinuousLegend<\n T extends IColorLegendSpec | ISizeLegendSpec = IColorLegendSpec | ISizeLegendSpec\n> extends BaseLegend {\n static specKey = 'legends';\n\n static type = ComponentTypeEnum.continuousLegend;\n type = ComponentTypeEnum.colorLegend;\n name: string = ComponentTypeEnum.colorLegend;\n\n private _field: string | undefined;\n private _legendType: string;\n\n static getSpecInfo(chartSpec: any): Maybe {\n const infos = getSpecInfo(\n chartSpec,\n this.specKey,\n this.type,\n (s: IColorLegendSpec | ISizeLegendSpec) => {\n return isContinuousLegend(s.type);\n }\n );\n\n if (infos) {\n infos.forEach(info => {\n info.type = info.spec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend;\n });\n }\n\n return infos;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n // 这里需要区分下是 colorLegend 还是 sizeLegend\n const legendName = this._spec.type === 'color' ? ComponentTypeEnum.colorLegend : ComponentTypeEnum.sizeLegend;\n this.type = legendName;\n this.name = legendName;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._field = this._spec.field;\n this._legendType = this._spec.type;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'continuousLegendFilter',\n options: {\n selected: () => this._selectedData,\n field: () => this._field,\n data: () => this._legendData.getLatestData(),\n isHierarchyData: s.isHierarchyData,\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n private _getScaleInGlobal() {\n const globalScale = this._option.globalScale;\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n return globalScale.getScale(scaleKey);\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendFilter', continuousLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'continuousLegendDataMake', continuousLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'continuousLegendDataMake',\n options: {\n series: () => {\n return getSeries(this._regions, {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n });\n },\n field: () => this._field,\n scale: this._getScaleInGlobal.bind(this)\n }\n });\n return legendData;\n }\n\n protected _initSelectedData(): void {\n if (this._spec.defaultSelected) {\n this._selectedData = this._spec.defaultSelected.slice();\n } else {\n this._selectedData = this._legendData.getLatestData();\n }\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n const field = this._field;\n if (field) {\n // 默认使用第0个系列的对应别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), field);\n return;\n }\n let scaleKey = this._spec.scale;\n if (!scaleKey) {\n scaleKey = this._legendType;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(scaleKey);\n if (!isDataDomainSpec(scaleSpec?.domain)) {\n return;\n }\n const dataInfo = scaleSpec.domain[0];\n if (dataInfo.fields.length === 0) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(this._option.dataSet.getDataView(dataInfo.dataId), dataInfo.fields[0]);\n return;\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const align = layout === 'horizontal' ? 'bottom' : this.layoutOrient;\n\n // 获取关联的 scale 以获取 colors / size\n let visualMappingRange = [];\n const scale = this._getScaleInGlobal();\n if (scale && scale.type === 'linear') {\n visualMappingRange = scale.range();\n }\n if (isEmpty(visualMappingRange)) {\n visualMappingRange = this._legendType === 'color' ? SINGLE_SEQUENCE : SIZE;\n }\n let min = this._legendData.getLatestData()[0] ?? 0;\n let max = this._legendData.getLatestData()[1] ?? 1;\n\n const isSame = this._legendData.getLatestData()[0] === this._legendData.getLatestData()[1];\n if (isSame) {\n min = Math.min(0, this._legendData.getLatestData()[0]);\n max = this._legendData.getLatestData()[0] === 0 ? 1 : Math.max(0, this._legendData.getLatestData()[0]);\n }\n\n const attrs: any = {\n layout,\n align,\n zIndex: this.layoutZIndex,\n min,\n max,\n value: this._spec.defaultSelected,\n [this._legendType === 'color' ? 'colors' : 'sizeRange']: visualMappingRange,\n ...getContinuousLegendAttributes(this._spec)\n };\n this._addDefaultTitleText(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return ContinuousLegendMap[this._legendType];\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(\n 'change',\n debounce((e: any) => {\n const selectedData = get(e, 'detail.value');\n if (doFilter) {\n this.setSelectedData(selectedData);\n }\n this.event.emit(ChartEvent.legendFilter, { model: this, value: selectedData, event: e });\n }, 30)\n );\n }\n }\n}\n\nexport const registerContinuousLegend = () => {\n Factory.registerComponent(ContinuousLegend.type, ContinuousLegend);\n};\n","import { Direction, type Datum, type IPoint, type IShowTooltipOption, type TooltipActiveType } from '../../../typings';\nimport type { ICartesianSeries, IPolarSeries, ISeries } from '../../../series/interface';\nimport { SeriesTypeEnum } from '../../../series/interface/type';\nimport type { PieSeries } from '../../../series/pie/pie';\nimport type { TooltipHandlerParams } from '../interface';\nimport { Event_Source_Type } from '../../../constant/event';\nimport { getElementAbsolutePosition, isArray, isValid, isNil } from '@visactor/vutils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { VChart } from '../../../core/vchart';\nimport type { IRegion } from '../../../region';\nimport type { Tooltip } from '../tooltip';\nimport type { IComponentOption } from '../../interface';\nimport { isDiscrete } from '@visactor/vscale';\n\nconst getDataArrayFromFieldArray = (fields: string[], datum?: Datum) =>\n isValid(datum) ? fields.map(f => datum[f]) : undefined;\n\nconst datumContainsArray = (fields: string[], data?: Datum[]) => (datum: Datum) =>\n fields.every((key, i) => datum[key] === data?.[i]);\n\nconst hasData = (data?: any[] | Datum) => {\n if (isNil(data)) {\n return false;\n }\n if (isArray(data)) {\n return data.length > 0 && data.every(isValid);\n }\n return Object.keys(data).length > 0;\n};\n\ntype MarkInfo = {\n pos: IPoint;\n data: {\n dimensionFields: string[];\n measureFields: string[];\n dimensionData?: any[];\n measureData?: any[];\n hasMeasureData?: boolean;\n groupField?: string;\n groupData?: any;\n };\n series: ISeries;\n dimType?: string;\n};\n\nexport function showTooltip(datum: Datum, options: IShowTooltipOption, component: Tooltip): TooltipActiveType | 'none' {\n const opt: IShowTooltipOption = {\n regionIndex: 0,\n ...options\n };\n const componentOptions = component.getOption() as IComponentOption;\n\n // 确认region\n const region = componentOptions.getRegionsInUserIdOrIndex(\n isValid(opt.regionId) ? [opt.regionId] : undefined,\n isValid(opt.regionIndex) ? [opt.regionIndex] : undefined\n )[0];\n if (!region) {\n return 'none';\n }\n\n // 查询图元信息\n const markInfoList = getMarkInfoList(datum, region);\n\n // 组织数据\n const activeType = opt.activeType ?? (markInfoList.length > 1 ? 'dimension' : 'mark');\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n const container = componentOptions.globalInstance.getContainer();\n const containerPos = {\n x: 0,\n y: 0,\n ...(container ? getElementAbsolutePosition(container) : {})\n };\n const bound = (pos: IPoint): IPoint => ({\n x: Math.min(Math.max(pos.x, 0), regionRect.width),\n y: Math.min(Math.max(pos.y, 0), regionRect.height)\n });\n const getOriginDatum = (info: MarkInfo) => {\n const { dimensionFields, dimensionData, measureFields, measureData, groupField, groupData } = info.data;\n const originDatum = info.series.getViewData()?.latestData.find((datum: any) => {\n return (\n datumContainsArray(dimensionFields, dimensionData)(datum) &&\n datumContainsArray(measureFields, measureData)(datum) &&\n (isNil(groupField) || datumContainsArray([groupField], [groupData])(datum))\n );\n });\n return originDatum;\n };\n const getMockEvent = (originPos: IPoint): any => {\n const pos = bound(originPos);\n const canvasX = opt.x ?? regionPos.x + pos.x;\n const canvasY = opt.y ?? regionPos.y + pos.y;\n return {\n canvasX,\n canvasY,\n clientX: containerPos.x + canvasX,\n clientY: containerPos.y + canvasY\n };\n };\n\n // 显示tooltip\n if (activeType === 'dimension') {\n const firstInfo = markInfoList[0];\n if (!firstInfo) {\n return 'none';\n }\n\n // 将markInfoList按系列分组\n const markInfoSeriesMap = new Map();\n markInfoList.forEach(info => {\n if (!markInfoSeriesMap.has(info.series)) {\n markInfoSeriesMap.set(info.series, []);\n }\n markInfoSeriesMap.get(info.series)?.push(info);\n });\n\n const mockDimensionInfo: IDimensionInfo[] = [\n {\n value: datum[firstInfo.data.dimensionFields[0]],\n data: [...markInfoSeriesMap.keys()].map(series => {\n return {\n series,\n datum: markInfoSeriesMap.get(series)?.map(info => getOriginDatum(info)) ?? []\n };\n })\n }\n ];\n\n if (isValid(firstInfo.dimType)) {\n mockDimensionInfo[0].position = firstInfo.pos[firstInfo.dimType];\n mockDimensionInfo[0].dimType = firstInfo.dimType;\n }\n\n const mockParams: TooltipHandlerParams = {\n changePositionOnly: false,\n action: 'enter',\n tooltip: null,\n dimensionInfo: mockDimensionInfo,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: undefined,\n model: undefined,\n source: Event_Source_Type.chart,\n event: getMockEvent({\n x: markInfoList.reduce((sum, info) => sum + info.pos.x, 0) / markInfoList.length,\n y: markInfoList.reduce((sum, info) => sum + info.pos.y, 0) / markInfoList.length // 位置求平均\n }),\n item: undefined,\n itemMap: new Map()\n };\n\n component.processor.dimension.showTooltip(mockDimensionInfo, mockParams, false);\n\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n\n return activeType;\n } else if (activeType === 'mark') {\n const info = markInfoList[0];\n if (!info) {\n return 'none';\n }\n const mockDatum = {\n ...getOriginDatum(info),\n ...datum\n };\n const mockDimensionData: IDimensionData[] = [\n {\n datum: [mockDatum],\n series: info.series\n }\n ];\n const mockDimensionInfo: IDimensionInfo[] = [\n {\n value: mockDatum[info.data.dimensionFields[0]],\n data: mockDimensionData\n }\n ];\n const mockParams: TooltipHandlerParams = {\n // FIXME: 补充 action、dimensionInfo\n changePositionOnly: false,\n tooltip: null,\n dimensionInfo: mockDimensionInfo,\n chart: componentOptions.globalInstance.getChart() ?? undefined,\n datum: mockDatum,\n model: info.series,\n source: Event_Source_Type.chart,\n event: getMockEvent(info.pos),\n item: undefined,\n itemMap: new Map()\n } as any;\n\n component.processor.mark.showTooltip(\n {\n datum: mockDatum,\n mark: null,\n series: info.series\n },\n mockParams,\n false\n );\n\n // 全局唯一 tooltip\n const vchart = componentOptions.globalInstance;\n if (VChart.globalConfig.uniqueTooltip) {\n VChart.hideTooltip(vchart.id);\n }\n return activeType;\n }\n return 'none';\n}\n\nexport const getMarkInfoList = (datum: Datum, region: IRegion) => {\n const seriesList = region.getSeries();\n const markInfoList: MarkInfo[] = [];\n\n seriesList.forEach(series => {\n /** 维度field */\n const dimensionFields = series.getDimensionField();\n /** 指标原始field(用于显示tooltip) */\n const measureFields = series.getMeasureField();\n\n const groupField = series.getSeriesField();\n const groupData = isValid(groupField) ? datum[groupField] : undefined;\n const groupDomain = isValid(groupField)\n ? series.getViewDataStatistics?.()?.latestData[groupField]?.values ?? []\n : [];\n\n const dimensionData = getDataArrayFromFieldArray(dimensionFields, datum);\n let measureData = getDataArrayFromFieldArray(measureFields, datum);\n const hasMeasureData = hasData(measureData);\n\n const isMultiGroups = !hasMeasureData && isValid(groupField) && isNil(groupData) && groupDomain.length > 0; // 是否需要考虑多个数据组\n\n const parseMarkInfoOfSimpleSeries = () => {\n const originDatum = series.getViewData()?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos =\n series.type === SeriesTypeEnum.pie\n ? (series as PieSeries).dataToCentralPosition(originDatum)\n : series.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n };\n\n if (series.coordinate === 'cartesian') {\n const cartesianSeries = series as ICartesianSeries;\n const dimType = isDiscrete((series as ICartesianSeries).getYAxisHelper()?.getScale(0)?.type) ? 'y' : 'x';\n\n // 补全维度轴数据\n const invalidDimensionFields = dimensionFields\n .map((field, i) => [field, i] as [string, number])\n .filter(([, i]) => isNil(dimensionData?.[i]));\n let dimensionDataList: any[][] = [dimensionData ?? []];\n if (invalidDimensionFields.length > 0) {\n invalidDimensionFields.forEach(([field, i]) => {\n const domain = series.getViewDataStatistics?.()?.latestData[field]?.values ?? [];\n const nextList: any[][] = [];\n dimensionDataList.forEach(dimensionData => {\n domain.forEach((value: any) => {\n const newData = dimensionData?.slice() ?? [];\n newData[i] = value;\n nextList.push(newData);\n });\n });\n dimensionDataList = nextList;\n });\n }\n dimensionDataList.forEach(dimensionData => {\n if (isMultiGroups) {\n const measureDataList = cartesianSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n groupDomain.forEach((groupData: any) => {\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series,\n dimType\n });\n });\n } else {\n const originDatum = cartesianSeries\n .getViewData()\n ?.latestData.find(datumContainsArray(dimensionFields, dimensionData));\n if (!hasMeasureData) {\n // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n }\n\n const pos = cartesianSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n dimType,\n series\n });\n }\n });\n } else if (series.coordinate === 'polar') {\n if (series.type === SeriesTypeEnum.pie) {\n parseMarkInfoOfSimpleSeries();\n } else {\n // 处理玫瑰图、雷达图\n const polarSeries = series as IPolarSeries;\n\n if (isMultiGroups) {\n const measureDataList = polarSeries\n .getViewData()\n ?.latestData.filter(datumContainsArray(dimensionFields, dimensionData));\n const originDatum = measureDataList.find((d: Datum) => d[groupField] === groupData);\n groupDomain.forEach((groupData: any) => {\n // 补全指标轴数据\n measureData = getDataArrayFromFieldArray(measureFields, originDatum);\n if (!hasData(measureData)) {\n return;\n }\n\n const pos = polarSeries.dataToPosition(originDatum);\n if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) {\n return;\n }\n\n markInfoList.push({\n pos,\n data: {\n dimensionFields,\n dimensionData,\n measureFields,\n measureData,\n hasMeasureData,\n groupField,\n groupData\n },\n series\n });\n });\n } else {\n parseMarkInfoOfSimpleSeries();\n }\n }\n } else if (series.coordinate === 'geo') {\n parseMarkInfoOfSimpleSeries();\n }\n });\n\n return markInfoList;\n};\n","import type { ITooltipActual, TooltipActiveType, TooltipData } from '../../../typings';\nimport type { ISeries } from '../../../series/interface';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { isValid } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../interface/common';\nimport { combineContents, isActiveTypeVisible } from './common';\nimport type { ITooltipSpec } from '../interface/spec';\n\nconst pick_keys = ['updateTitle', 'updateContent', 'updatePosition', 'maxLineCount', 'othersLine'];\n\nexport const getTooltipSpecForShow = (\n activeType: TooltipActiveType,\n globalSpec: ITooltipSpec,\n series?: ISeries,\n data?: TooltipData,\n params?: TooltipHandlerParams\n): ITooltipActual => {\n // 组装tooltip spec\n const finalSpec = {\n activeType\n } as ITooltipActual;\n\n switch (activeType) {\n case 'mark':\n case 'group':\n if (series) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesSpec = series.getSpec()?.tooltip as ITooltipSpec;\n\n finalSpec.visible = true;\n\n if (seriesSpec?.handler) {\n // 优先使用自定义handler\n finalSpec.handler = seriesSpec.handler;\n }\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n if (seriesSpec?.[activeType]) {\n pick_keys.forEach(k => {\n if (isValid((seriesSpec[activeType] as any)[k])) {\n (finalSpec as any)[k] = (seriesSpec as any)[activeType][k];\n }\n });\n }\n\n return {\n ...finalSpec,\n ...series.tooltipHelper.getTooltipData(\n activeType,\n globalSpec,\n data as IDimensionData[],\n (data as IDimensionData[])[0].datum,\n params\n )\n };\n }\n break;\n case 'dimension':\n if ((data as IDimensionInfo[])?.length) {\n // tooltip spec覆盖优先级: series spec > global spec > default pattern\n const seriesList = getSeriesListFromDimensionInfo(data as IDimensionInfo[]);\n\n // visible\n if (seriesList.every(series => !isActiveTypeVisible('dimension', series.tooltipHelper?.spec))) {\n finalSpec.visible = false;\n } else {\n finalSpec.visible = true;\n }\n\n // 优先使用自定义handler\n finalSpec.handler = globalSpec.handler;\n if (finalSpec.handler?.showTooltip) {\n return finalSpec;\n }\n\n const patternList: ITooltipActual[] = [];\n (data as IDimensionInfo[]).forEach(info =>\n info.data.forEach(datum => {\n const { series } = datum;\n const pattern = series.tooltipHelper.getTooltipData(activeType, globalSpec, data, datum.datum, params);\n if (pattern) {\n patternList.push(pattern);\n }\n })\n );\n\n return combineContents(patternList);\n }\n break;\n }\n\n return null;\n};\n\nconst getSeriesListFromDimensionInfo = (dimensionInfo: IDimensionInfo[]): ISeries[] => {\n const list: ISeries[] = [];\n dimensionInfo.forEach(info => {\n info.data.forEach(datum => {\n if (isValid(datum.series)) {\n list.push(datum.series);\n }\n });\n });\n\n return list;\n};\n","import { PREFIX } from '../../constant/base';\nimport type { ITooltipLineActual, TooltipActiveType } from '../../typings';\n\nexport const TooltipHandlerType = {\n dom: `${PREFIX}_TOOLTIP_HANDLER_DOM`, // 模拟 enum\n canvas: `${PREFIX}_TOOLTIP_HANDLER_CANVAS`\n};\n\nexport const TOOLTIP_EL_CLASS_NAME = 'vchart-tooltip-element';\n\nexport const TOOLTIP_MAX_LINE_COUNT = 20;\n\nexport const TOOLTIP_OTHERS_LINE = {\n // TODO: i18n\n key: '其他',\n value: '...'\n} as ITooltipLineActual;\n\nexport const TOOLTIP_TYPES: TooltipActiveType[] = ['group', 'mark', 'dimension'];\n\nexport const DEFAULT_SHOW_DELAY = 50;\n","import { isNil, isValid } from '@visactor/vutils';\nimport type { BaseEventParams } from '../../../event/interface';\nimport type { ITooltipActual, TooltipActiveType, TooltipData } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../interface/common';\nimport type { Tooltip } from '../tooltip';\nimport type { MouseEventData, TooltipInfo } from './interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { TooltipEventParams } from '../interface/event';\nimport type { IDimensionInfo } from '../../../event/events/dimension';\nimport type { ISeries } from '../../../series/interface';\nimport { getTooltipSpecForShow } from '../utils/get-spec';\nimport { isActiveTypeVisible } from '../utils/common';\nimport { TOOLTIP_MAX_LINE_COUNT, TOOLTIP_OTHERS_LINE } from '../constant';\n\nexport abstract class BaseTooltipProcessor {\n readonly component: Tooltip;\n abstract activeType: TooltipActiveType;\n\n protected _cacheActiveSpec: ITooltipActual | undefined;\n\n constructor(component: Tooltip) {\n this.component = component;\n }\n\n /** 触发对应类型的 tooltip */\n abstract showTooltip(info: TooltipInfo, params: BaseEventParams, changePositionOnly: boolean): TooltipResult;\n /** 获取触发 tooltip 需要的信息 */\n abstract getMouseEventData(params: BaseEventParams): MouseEventData;\n\n protected _showTooltipByHandler = (data: TooltipData | undefined, params: TooltipHandlerParams): TooltipResult => {\n if (isNil(data)) {\n return TooltipResult.failed;\n }\n\n if (!params.changePositionOnly) {\n this.clearCache();\n }\n\n // 更新 this._cacheActiveSpec\n this._updateViewSpec(data, params);\n const spec = this._cacheActiveSpec;\n if (isNil(spec) || spec.visible === false) {\n return TooltipResult.failed;\n }\n params.tooltipSpec = this.component.getSpec();\n params.activeTooltipSpec = spec;\n\n // 判断 tooltip 是否为空\n const { title, content } = spec;\n\n const isEmpty = isNil(title?.key) && isNil(title?.value) && !content?.length;\n // 触发事件\n this.component.event.emit(ChartEvent.tooltipShow, {\n ...params,\n isEmptyTooltip: isEmpty,\n tooltipData: data,\n activeType: this.activeType,\n tooltip: this.component\n } as TooltipEventParams);\n\n if (isEmpty) {\n return TooltipResult.failed;\n }\n\n // 显示 tooltip\n let showTooltip;\n if (spec.handler?.showTooltip) {\n showTooltip = spec.handler.showTooltip.bind(spec.handler);\n } else if (this.component.tooltipHandler?.showTooltip) {\n showTooltip = this.component.tooltipHandler.showTooltip.bind(this.component.tooltipHandler);\n }\n if (showTooltip) {\n return showTooltip(this.activeType, data, params) ?? TooltipResult.success;\n }\n return TooltipResult.failed;\n };\n\n protected _preprocessDimensionInfo(dimensionInfo?: IDimensionInfo[]): IDimensionInfo[] | undefined {\n const newDimensionInfo: IDimensionInfo[] = [];\n dimensionInfo?.forEach(info => {\n const di: IDimensionInfo = {\n ...info,\n data: info.data.filter(\n ({ series }: any) => series.getSpec()?.tooltip?.visible !== false // 过滤掉不需要显示的维度数据\n )\n };\n if (di.data.length > 0) {\n newDimensionInfo.push(di);\n }\n });\n if (newDimensionInfo.length > 0) {\n return newDimensionInfo;\n }\n return undefined;\n }\n\n /**\n * 合成实际显示的 tooltip spec\n * @param params\n */\n protected _updateViewSpec(data: TooltipData, params: TooltipHandlerParams) {\n const { changePositionOnly, model } = params;\n if (!changePositionOnly || !this._cacheActiveSpec) {\n const tooltipSpec = this.component.getSpec();\n /** spec 预处理 */\n this._cacheActiveSpec = getTooltipSpecForShow(\n this.activeType,\n this.component.getSpec(),\n model as ISeries,\n data,\n params\n );\n\n if (this._cacheActiveSpec) {\n if (isNil(this._cacheActiveSpec.handler) && isValid(tooltipSpec.handler)) {\n this._cacheActiveSpec.handler = tooltipSpec.handler;\n }\n const specByType = tooltipSpec[this.activeType] ?? {};\n const updateTitle = this._cacheActiveSpec.updateTitle ?? specByType.updateTitle;\n const updateContent = this._cacheActiveSpec.updateContent ?? specByType.updateContent;\n const maxLineCount = this._cacheActiveSpec.maxLineCount ?? specByType.maxLineCount ?? TOOLTIP_MAX_LINE_COUNT;\n\n if (updateTitle) {\n this._cacheActiveSpec.title =\n updateTitle(this._cacheActiveSpec.title, data, params) ?? this._cacheActiveSpec.title;\n }\n\n if (updateContent) {\n this._cacheActiveSpec.content =\n updateContent(this._cacheActiveSpec.content, data, params) ?? this._cacheActiveSpec.content;\n } else if (maxLineCount >= 1 && this._cacheActiveSpec.content?.length > maxLineCount) {\n const othersLine = this._cacheActiveSpec.othersLine ?? specByType.othersLine;\n const otherLine = othersLine\n ? {\n ...TOOLTIP_OTHERS_LINE,\n ...othersLine\n }\n : TOOLTIP_OTHERS_LINE;\n this._cacheActiveSpec.content = [\n ...this._cacheActiveSpec.content.slice(0, maxLineCount - 1),\n {\n ...this._cacheActiveSpec.content[maxLineCount - 1],\n ...otherLine\n }\n ];\n }\n }\n }\n }\n\n /** 判断是否应该触发 tooltip */\n shouldHandleTooltip(params: BaseEventParams, info: TooltipInfo): boolean {\n if (isNil(info)) {\n return false;\n }\n\n return isActiveTypeVisible(this.activeType, (params.model as ISeries)?.tooltipHelper?.spec);\n }\n\n clearCache() {\n this._cacheActiveSpec = undefined;\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { TooltipHandlerParams } from '../interface';\nimport type { DimensionTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { isValid } from '@visactor/vutils';\nimport type { ICartesianSeries } from '../../../series/interface';\nimport { getCartesianDimensionInfo } from '../../../event/events/dimension/util/cartesian';\nimport { getPolarDimensionInfo } from '../../../event/events/dimension/util/polar';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport { isDiscrete } from '@visactor/vscale';\n\nexport class DimensionTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'dimension';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: DimensionTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const newParams: TooltipHandlerParams = {\n ...(params as TooltipHandlerParams),\n dimensionInfo: this._preprocessDimensionInfo(info),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(info, newParams);\n }\n\n protected _getDimensionInfo(params: BaseEventParams): IDimensionInfo[] {\n let targetDimensionInfo: IDimensionInfo[] | undefined;\n // 处理dimension info\n const chart = this.component.getChart();\n\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n targetDimensionInfo = [\n ...(getCartesianDimensionInfo(chart, point, true) ?? []),\n ...(getPolarDimensionInfo(chart, point) ?? [])\n ];\n if (targetDimensionInfo.length === 0) {\n targetDimensionInfo = undefined;\n } else if (targetDimensionInfo.length > 1) {\n // 只保留一个轴的dimension info\n const dimensionAxisInfo = targetDimensionInfo.filter(info => {\n const axis = info.axis;\n if (axis.getSpec().hasDimensionTooltip) {\n return true;\n }\n\n // 优先显示离散轴 tooltip\n if (!isDiscrete(axis.getScale().type)) {\n return false;\n }\n // 下面的逻辑用来判断当前的离散轴是不是维度轴\n let firstSeries: ICartesianSeries | undefined;\n for (const region of axis?.getRegions() ?? []) {\n for (const series of region.getSeries()) {\n if (series.coordinate === 'cartesian') {\n firstSeries = series as ICartesianSeries;\n break;\n }\n }\n if (isValid(firstSeries)) {\n break;\n }\n }\n if (isValid(firstSeries) && firstSeries.getDimensionField()[0] === firstSeries.fieldY[0]) {\n // 维度轴为Y轴时,选择只显示Y轴tooltip\n return axis.getOrient() === 'left' || axis.getOrient() === 'right';\n }\n // 维度轴为X轴时,选择只显示X轴tooltip\n return axis.getOrient() === 'bottom' || axis.getOrient() === 'top';\n });\n targetDimensionInfo = dimensionAxisInfo.length ? dimensionAxisInfo : targetDimensionInfo.slice(0, 1);\n\n // datum 去重,保证每个系列的每个数据项只对应于一行 tooltip 内容项\n if (targetDimensionInfo.length > 1) {\n const dimensionDataKeySet = new Set();\n targetDimensionInfo.forEach(info => {\n info.data = info.data.filter(({ key }: IDimensionData) => {\n if (dimensionDataKeySet.has(key)) {\n return false;\n }\n dimensionDataKeySet.add(key);\n return true;\n });\n });\n }\n }\n\n return targetDimensionInfo;\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n return {\n tooltipInfo: this._getDimensionInfo(params),\n // 排除被声明要忽略的项\n ignore: false\n };\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { Datum, IGroupTooltipPattern, TooltipActiveType } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { GroupTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport { array } from '@visactor/vutils';\nimport type { ISeries } from '../../../series/interface';\n\nexport class GroupTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'group';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: GroupTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series } = info;\n const tooltipData = [{ datum: array(datum), series }];\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n groupDatum: this._getGroupDatum(params),\n changePositionOnly,\n tooltip: this.component\n };\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: GroupTooltipInfo | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.group;\n\n if (activeTriggers?.has(params.mark)) {\n const patternSpec: IGroupTooltipPattern = (this.component.getSpec() as ITooltipSpec)[this.activeType];\n const triggerMark = patternSpec?.triggerMark ? array(patternSpec.triggerMark) : [];\n if (triggerMark.includes(params.mark?.name as any)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series\n };\n }\n }\n }\n\n return {\n tooltipInfo: info,\n ignore: false\n };\n }\n\n protected _getGroupDatum(params: BaseEventParams) {\n const { model, mark, datum } = params;\n const series = model as ISeries;\n if (['line', 'area'].includes(mark.type)) {\n return array(datum);\n }\n\n const datumList = series.getViewData().latestData;\n const seriesField = series.getSeriesField();\n if (!seriesField) {\n return datumList;\n }\n\n const seriesFieldValue = array(datum)[0][seriesField];\n return datumList.filter((d: Datum) => d[seriesField] === seriesFieldValue);\n }\n}\n","import type { BaseEventParams } from '../../../event/interface';\nimport type { TooltipActiveType } from '../../../typings';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../interface';\nimport type { MarkTooltipInfo, MouseEventData } from './interface';\nimport { BaseTooltipProcessor } from './base';\nimport type { ISeries } from '../../../series/interface';\nimport { IContainPointMode } from '@visactor/vrender-core';\nimport type { IDimensionData } from '../../../event/events/dimension/interface';\n\nexport class MarkTooltipProcessor extends BaseTooltipProcessor {\n activeType: TooltipActiveType = 'mark';\n\n /** 触发对应类型的 tooltip */\n showTooltip(info: MarkTooltipInfo, params: BaseEventParams, changePositionOnly: boolean) {\n const { datum, series } = info;\n const tooltipSpec = this.component.getSpec();\n const tooltipData = [{ datum: [datum], series }];\n const helper = series.tooltipHelper;\n const seriesSpec = series.getSpec()?.tooltip as ITooltipSpec;\n const seriesCheckOverlap = seriesSpec?.mark?.checkOverlap;\n let checkOverlap = false;\n\n if (seriesCheckOverlap === true || (tooltipSpec.mark?.checkOverlap === true && seriesCheckOverlap !== false)) {\n const activeTriggers = helper?.activeTriggerSet.mark;\n\n if (activeTriggers) {\n checkOverlap = true;\n const chart = this.component.getChart();\n // compute layer offset\n const layer = chart.getCompiler().getStage().getLayer(undefined);\n const point = { x: params.event.viewX, y: params.event.viewY };\n layer.globalTransMatrix.transformPoint({ x: params.event.viewX, y: params.event.viewY }, point);\n\n activeTriggers.forEach(mark => {\n mark.getProductElements().forEach(el => {\n const graphic = el.getGraphicItem();\n\n if (\n el !== params.item &&\n graphic &&\n graphic.containsPoint(point.x, point.y, IContainPointMode.GLOBAL, graphic.stage.getPickerService())\n ) {\n tooltipData[0].datum.push(el.getDatum());\n }\n });\n });\n }\n }\n\n const newParams: TooltipHandlerParams = {\n ...(params as any),\n changePositionOnly,\n tooltip: this.component\n };\n if (changePositionOnly && checkOverlap) {\n const cacheData = this._cacheActiveSpec && this._cacheActiveSpec.data;\n\n if (\n !cacheData ||\n (cacheData as IDimensionData[])[0].series !== tooltipData[0].series ||\n (cacheData as IDimensionData[])[0].datum.length !== tooltipData[0].datum.length ||\n (cacheData as IDimensionData[])[0].datum.some((d, index) => d !== tooltipData[0].datum[index])\n ) {\n newParams.changePositionOnly = false;\n }\n }\n return this._showTooltipByHandler(tooltipData, newParams);\n }\n\n /** 获取触发 tooltip 需要的信息 */\n getMouseEventData(params: BaseEventParams): MouseEventData {\n let info: MarkTooltipInfo | undefined;\n let ignore: boolean | undefined;\n\n // 处理mark info\n if (params.model?.modelType === 'series') {\n const series = params.model as ISeries;\n const helper = series.tooltipHelper;\n const activeTriggers = helper?.activeTriggerSet.mark;\n const ignoreTriggers = helper?.ignoreTriggerSet.mark;\n if (activeTriggers?.has(params.mark)) {\n info = {\n mark: params.mark,\n datum: params.datum,\n series\n };\n } else if (ignoreTriggers?.has(params.mark)) {\n ignore = true;\n }\n }\n\n return {\n tooltipInfo: info,\n ignore\n };\n }\n}\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isArray, isValid } from '@visactor/vutils';\nimport type { DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './interface';\n\nexport const isMarkInfo = (info: Maybe): info is MarkTooltipInfo => isValid(info) && !isArray(info);\n\nexport const isDimensionInfo = (info: Maybe): info is DimensionTooltipInfo =>\n isValid(info) && isArray(info);\n","import { vglobal } from '@visactor/vrender-core';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { domDocument, isMiniAppLikeMode, isString, isTrueBrowser, isValid } from '../../util';\nimport { BaseComponentSpecTransformer } from '../base';\nimport { TOOLTIP_EL_CLASS_NAME } from './constant';\nimport { getTooltipActualActiveType } from './utils/common';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class TooltipSpecTransformer extends BaseComponentSpecTransformer {\n protected _shouldMergeThemeToSpec() {\n return false;\n }\n\n protected _initTheme(spec: any, chartSpec: any): { spec: any; theme: any } {\n const { spec: newSpec, theme } = super._initTheme(spec, chartSpec);\n newSpec.style = mergeSpec({}, this._theme, newSpec.style);\n newSpec.offset = mergeSpec({}, theme.offset, spec.offset);\n newSpec.transitionDuration = spec.transitionDuration ?? theme.transitionDuration;\n return { spec: newSpec, theme };\n }\n\n protected _transformSpecAfterMergingTheme(spec: any, chartSpec: any, chartSpecInfo?: IChartSpecInfo) {\n super._transformSpecAfterMergingTheme(spec, chartSpec, chartSpecInfo);\n\n spec.visible = spec.visible ?? true;\n spec.activeType = getTooltipActualActiveType(spec);\n spec.renderMode =\n spec.renderMode ??\n // 小程序或非浏览器环境下,默认使用canvas渲染\n (isMiniAppLikeMode(this._option.mode) || !isTrueBrowser(this._option.mode) ? 'canvas' : 'html');\n spec.trigger = spec.trigger ?? 'hover';\n spec.className = spec.className ?? TOOLTIP_EL_CLASS_NAME;\n spec.enterable = spec.enterable ?? false;\n spec.transitionDuration = spec.transitionDuration ?? 150;\n spec.confine = spec.confine ?? spec.renderMode === 'canvas';\n\n if (isValid(spec.parentElement)) {\n if (isString(spec.parentElement)) {\n spec.parentElement = vglobal.getElementById(spec.parentElement);\n }\n } else if (isTrueBrowser(this._option.mode)) {\n spec.parentElement = domDocument?.body;\n }\n }\n}\n","import { ComponentTypeEnum } from '../interface/type';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { BaseEventParams, EventCallback, EventQuery, EventType } from '../../event/interface';\nimport type { ITooltipHandler, TooltipActiveType } from '../../typings/tooltip';\nimport type { Datum, IPoint, IShowTooltipOption } from '../../typings';\nimport { isMobileLikeMode, isTrueBrowser, isMiniAppLikeMode } from '../../util/env';\nimport type {\n ITooltip,\n ITooltipActiveTypeAsKeys,\n ITooltipSpec,\n TooltipHandlerParams,\n TotalMouseEventData\n} from './interface';\nimport { TooltipResult } from './interface/common';\nimport { showTooltip } from './utils/show-tooltip';\nimport { isEmptyPos } from './utils/common';\nimport { isSameDimensionInfo } from '../../event/events/dimension/util/common';\nimport { ChartEvent, Event_Source_Type } from '../../constant/event';\nimport type { BaseTooltipProcessor, DimensionTooltipInfo, MarkTooltipInfo, TooltipInfo } from './processor';\n// eslint-disable-next-line no-duplicate-imports\nimport { GroupTooltipProcessor, DimensionTooltipProcessor, MarkTooltipProcessor } from './processor';\nimport { isDimensionInfo, isMarkInfo } from './processor/util';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid, isNil, array, isNumber, throttle, isObject } from '@visactor/vutils';\nimport { VChart } from '../../core/vchart';\nimport type { TooltipEventParams } from './interface/event';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { TooltipSpecTransformer } from './tooltip-transformer';\nimport { error } from '../../util';\nimport { DEFAULT_SHOW_DELAY, TOOLTIP_TYPES, TooltipHandlerType } from './constant';\n\ntype EventHandlerList = {\n eventType: EventType;\n handler: any;\n}[];\n\nexport class Tooltip extends BaseComponent implements ITooltip {\n protected layoutZIndex: number = 1;\n static type = ComponentTypeEnum.tooltip;\n static readonly transformerConstructor = TooltipSpecTransformer;\n type = ComponentTypeEnum.tooltip;\n name: string = ComponentTypeEnum.tooltip;\n readonly transformerConstructor = TooltipSpecTransformer;\n\n static specKey = 'tooltip';\n specKey = 'tooltip';\n\n layoutType: 'none' = 'none';\n private _hideTimer?: number;\n private _outTimer?: number;\n private _showTimer?: number;\n private _needInitEventOfTooltip?: boolean;\n private _enterable: boolean;\n private _isReleased: boolean = false;\n protected declare _spec: ITooltipSpec;\n\n tooltipHandler?: ITooltipHandler;\n\n processor: ITooltipActiveTypeAsKeys;\n\n private _alwaysShow: boolean = false;\n\n private _cacheInfo: TooltipInfo | undefined;\n private _cacheParams: BaseEventParams | undefined;\n private _cacheActiveType: TooltipActiveType | undefined;\n private _cacheEnterableRect: { x: number; y: number; width: number; height: number };\n\n private _eventList: EventHandlerList = [];\n\n protected _isTooltipShown: boolean = false;\n\n protected _clickLock: boolean = false;\n private _handleMouseMove: (params: BaseEventParams) => void;\n\n /** 当前是否正在显示 tooltip */\n isTooltipShown() {\n return this._isTooltipShown;\n }\n\n changeRegions(regions: IRegion[]) {\n /* do nothing */\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n protected _registerEvent() {\n /* do nothing */\n }\n protected _releaseEvent() {\n /* do nothing */\n }\n onLayout(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onLayoutEnd(ctx: IModelLayoutOption) {\n /* do nothing */\n }\n onRender(ctx: IModelRenderOption) {\n /* do nothing */\n }\n\n created() {\n super.created();\n this._regions = this._option.getAllRegions();\n // event\n this._initEvent();\n }\n\n release() {\n super.release();\n this._isReleased = true;\n if (this._hideTimer) {\n clearTimeout(this._hideTimer);\n }\n\n this._eventList.forEach(({ eventType, handler }) => {\n this.event.off(eventType, handler);\n });\n this._eventList = [];\n this.tooltipHandler?.release?.();\n this._isTooltipShown = false;\n }\n\n beforeRelease() {\n // 触发事件\n this.event.emit(ChartEvent.tooltipHide, {\n tooltip: this,\n chart: this.getChart()\n } as unknown as TooltipEventParams);\n this.event.emit(ChartEvent.tooltipRelease, {\n tooltip: this,\n chart: this.getChart()\n } as unknown as TooltipEventParams);\n }\n\n protected _initHandler() {\n const renderMode = this._spec.renderMode ?? 'html';\n\n const userTooltipHandler = this._option.globalInstance.getTooltipHandlerByUser();\n if (userTooltipHandler) {\n this.tooltipHandler = userTooltipHandler;\n this._enterable = false;\n } else {\n // 构造内部默认 handler\n const type = renderMode === 'canvas' ? TooltipHandlerType.canvas : TooltipHandlerType.dom;\n const handlerConstructor = Factory.getComponentPluginInType(type);\n if (!handlerConstructor) {\n error('Can not find tooltip handler: ' + type);\n }\n const handler = new handlerConstructor();\n handler.name = `${this._spec.className}-${this._option.globalInstance.id ?? 0}-${this.getSpecIndex()}`;\n this.pluginService?.load([handler]);\n\n this.tooltipHandler = handler as unknown as ITooltipHandler;\n\n if (this._spec.enterable && renderMode === 'html' && this.tooltipHandler) {\n this._enterable = true;\n this._needInitEventOfTooltip = true;\n } else {\n this._enterable = false;\n }\n }\n }\n\n protected _initEventOfTooltipContent() {\n if (!this._needInitEventOfTooltip) {\n return;\n }\n\n const container = this.tooltipHandler.getTooltipContainer?.();\n const element = container?.firstChild as HTMLElement;\n\n if (element) {\n element.addEventListener('pointerenter', () => {\n if (!this._enterable) {\n return;\n }\n\n const rect = element.getBoundingClientRect?.();\n if (rect) {\n this._cacheEnterableRect = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n }\n if (this._outTimer) {\n clearTimeout(this._outTimer);\n this._outTimer = null;\n }\n\n if (this._showTimer) {\n clearTimeout(this._showTimer);\n this._showTimer = null;\n }\n });\n\n element.addEventListener('pointerleave', () => {\n if (!this._enterable) {\n return;\n }\n\n if (this._cacheEnterableRect) {\n const newRect = element.getBoundingClientRect?.();\n\n if (\n newRect &&\n Object.keys(this._cacheEnterableRect).every(\n k => (this._cacheEnterableRect as any)[k] === (newRect as any)[k]\n )\n ) {\n this._cacheEnterableRect = null;\n this._outTimer = setTimeout(\n this.hideTooltip,\n this._spec?.showDelay ?? DEFAULT_SHOW_DELAY\n ) as unknown as number;\n }\n }\n });\n\n this._needInitEventOfTooltip = false;\n }\n }\n\n protected _initProcessor() {\n // 初始化 tooltip 类型\n const activeType = this._spec.activeType;\n\n this.processor = {};\n\n if (activeType.includes('dimension')) {\n this.processor.dimension = new DimensionTooltipProcessor(this);\n }\n\n if (activeType.includes('group')) {\n this.processor.group = new GroupTooltipProcessor(this);\n }\n\n if (activeType.includes('mark')) {\n this.processor.mark = new MarkTooltipProcessor(this);\n }\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = array(this._spec.trigger ?? 'hover');\n const triggerOff = array(this._spec.triggerOff);\n const mode = this._option.mode;\n\n trigger.forEach(triggerType => {\n if (triggerType === 'hover') {\n this._handleMouseMove = this._throttle(this._getMouseMoveHandler(false));\n\n this._mountEvent('pointermove', { source: 'chart' }, this._handleMouseMove);\n // 移动端的点按 + 滑动触发\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n this._mountEvent('pointerdown', { source: 'chart' }, this._getMouseMoveHandler(false));\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n }\n this._mountEvent('pointerleave', { source: 'chart' }, this._getMouseOutHandler(false));\n } else if (triggerType === 'click') {\n this._mountEvent('pointertap', { source: 'chart' }, this._getMouseMoveHandler(true));\n this._mountEvent('pointerup', { source: 'window' }, this._getMouseOutHandler(true));\n } else if (isObject(triggerType)) {\n this._mountEvent(\n triggerType.eventType,\n { source: triggerType.source ?? 'chart', consume: triggerType.consume },\n this._getMouseMoveHandler(true)\n );\n }\n });\n const offEvents = triggerOff.filter(entry => isObject(entry));\n\n offEvents.forEach(entry => {\n this._mountEvent(\n (entry as any).eventType,\n { source: (entry as any).source ?? 'chart', consume: (entry as any).consume },\n this._getMouseOutHandler((entry as any).checkOutside ?? false)\n );\n });\n\n if (!trigger.includes('click') && this._spec.lockAfterClick) {\n this._mountEvent('pointertap', { source: 'chart' }, this._handleClickToLock);\n }\n }\n\n protected _throttle(callback: (...args: any[]) => any): (...args: any[]) => any {\n let wait: number;\n if (isNumber(this._spec.throttleInterval)) {\n wait = this._spec.throttleInterval;\n } else {\n if (this._spec.renderMode !== 'html' || !this._spec.transitionDuration) {\n wait = 10;\n } else {\n wait = 50;\n }\n }\n return throttle(callback, wait);\n }\n\n protected _mountEvent = (eType: EventType, query: EventQuery, callback: EventCallback) => {\n this.event.on(eType, query, callback);\n this._eventList.push({\n eventType: eType,\n handler: callback\n });\n };\n\n protected _handleClickToLock = (params: BaseEventParams) => {\n if (this._clickLock) {\n this._handleChartMouseOut(params);\n this._clickLock = false;\n } else {\n this._clickLock = true;\n }\n };\n\n protected _getMouseOutHandler = (needPointerDetection?: boolean) => (params: BaseEventParams) => {\n if (this._isReleased) {\n return;\n }\n if (this._alwaysShow || this._clickLock) {\n return;\n }\n\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n return;\n }\n\n const browserEnv = isTrueBrowser(this._option?.mode);\n const { clientX, clientY } = params.event as MouseEvent;\n\n // 当 enterable 为 true,同时鼠标移入 tooltip 时 pointerleave 事件也会触发,所以这里做一个判断\n\n // 判断鼠标是否在图表范围内\n if (browserEnv && needPointerDetection && this._isPointerInChart({ x: clientX, y: clientY })) {\n return;\n }\n\n if (this._enterable) {\n this._outTimer = setTimeout(() => {\n this._handleChartMouseOut(params);\n }, this._spec?.showDelay ?? DEFAULT_SHOW_DELAY) as unknown as number;\n } else {\n this._handleChartMouseOut(params);\n }\n };\n\n protected _handleChartMouseOut = (params?: BaseEventParams) => {\n if (this._alwaysShow || this._isReleased) {\n return;\n }\n\n if (this._spec.triggerOff !== 'none') {\n this._hideTooltipByHandler({\n ...(params as any),\n tooltip: this\n });\n\n if (this._handleMouseMove && (this._handleMouseMove as any).cancel) {\n // 防止因为throttle,mousemove事件又触发了一遍,导致 tooltip 隐藏失败\n (this._handleMouseMove as any).cancel();\n }\n this._cacheEnterableRect = null;\n this._cacheInfo = undefined;\n this._cacheParams = undefined;\n this._cacheActiveType = undefined;\n }\n };\n\n protected _getMouseMoveHandler = (isClick: boolean) => (params: BaseEventParams) => {\n if (this._isReleased) {\n return;\n }\n if (this._outTimer) {\n clearTimeout(this._outTimer);\n this._outTimer = null;\n }\n\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this.processor) {\n this._initProcessor();\n }\n\n if (this._alwaysShow) {\n return;\n }\n\n if (this._clickLock) {\n if (isClick) {\n this._handleChartMouseOut(params);\n this._clickLock = false;\n }\n return;\n }\n\n if (!isClick && this._enterable && this.tooltipHandler?.isTooltipShown?.()) {\n if (this._showTimer) {\n clearTimeout(this._showTimer);\n }\n\n this._showTimer = setTimeout(() => {\n this._handleChartMouseMove(params, isClick);\n }, this._spec?.showDelay ?? DEFAULT_SHOW_DELAY) as unknown as number;\n } else {\n this._handleChartMouseMove(params, isClick);\n }\n };\n\n protected _handleChartMouseMove = (params: BaseEventParams, isClick: boolean) => {\n if (this._isReleased) {\n return;\n }\n /* 获取 tooltip 原始数据 */\n const mouseEventData = this._getMouseEventData(params);\n const {\n tooltipInfo: { dimension: dimensionInfo },\n ignore: { mark: ignoreMark }\n } = mouseEventData;\n\n /** tooltip 是否显示成功 */\n const success: ITooltipActiveTypeAsKeys = {\n mark: false,\n dimension: false,\n group: false\n };\n\n for (let i = 0, len = TOOLTIP_TYPES.length; i < len; i++) {\n const type = TOOLTIP_TYPES[i];\n const res = this.processor[type] ? this._showTooltipByMouseEvent(type, mouseEventData, params, isClick) : false;\n\n if (res) {\n success[type] = true;\n break;\n }\n }\n\n /* 如果不是常规情况,进行一些特殊情况tooltip处理 */\n if (Object.values(success).every(val => !val) && !isEmptyPos(params)) {\n // 用户手动配置ignore,则继续显示缓存tooltip\n if (ignoreMark && isMarkInfo(this._cacheInfo)) {\n success.mark = this._showTooltipByMouseEvent('mark', mouseEventData, params, isClick, true);\n } else if (isValid(dimensionInfo)) {\n // 用户没有手动配置ignore的话,默认显示dimension tooltip\n success.dimension = this._showTooltipByMouseEvent('dimension', mouseEventData, params, isClick);\n }\n }\n\n /* 如果还是不应该显示tooltip,则隐藏上一次tooltip */\n if (!success.mark && !success.group && (!success.dimension || isNil(dimensionInfo))) {\n this._handleChartMouseOut(params);\n } else {\n this._initEventOfTooltipContent();\n }\n };\n\n /**\n * 通过鼠标事件触发 tooltip,返回是否成功\n * @param activeType tooltip 类型\n * @param mouseEventData tooltip 相关数据\n * @param params 事件参数\n * @param useCache 是否直接显示缓存 tooltip\n * @returns 是否成功执行\n */\n protected _showTooltipByMouseEvent = (\n activeType: TooltipActiveType,\n mouseEventData: TotalMouseEventData,\n params: BaseEventParams,\n isClick: boolean,\n useCache?: boolean\n ): boolean => {\n const processor = this.processor[activeType];\n // 判断是否应该触发 tooltip\n if (!processor.shouldHandleTooltip(params, mouseEventData.tooltipInfo[activeType])) {\n return false;\n }\n if (this._hideTimer) {\n clearTimeout(this._hideTimer);\n }\n\n let success: boolean;\n\n if (useCache) {\n // 直接显示缓存 tooltip\n success = !processor.showTooltip(this._cacheInfo as any, params, true);\n } else {\n const tooltipInfo = mouseEventData.tooltipInfo[activeType];\n const isSameAsCache = this._isSameAsCache(tooltipInfo, params, activeType);\n\n success = !processor.showTooltip(tooltipInfo as any, params, isSameAsCache);\n\n if (success) {\n // 成功显示 tooltip,则更新缓存\n this._cacheInfo = tooltipInfo;\n this._cacheParams = params;\n this._cacheActiveType = activeType;\n }\n }\n if (success) {\n this._isTooltipShown = true;\n if (isClick && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n } else if (Number.isFinite(this._spec.hideTimer)) {\n // hover 事件,设置默认的定时器,避免out事件不触发的问题\n this._hideTimer = setTimeout(() => {\n this._handleChartMouseOut();\n }, this._spec.hideTimer as number) as unknown as number;\n }\n }\n // 全局唯一 tooltip\n const vchart = this._option?.globalInstance;\n if (success && VChart.globalConfig.uniqueTooltip && vchart) {\n VChart.hideTooltip(vchart.id);\n }\n return success;\n };\n\n protected _getMouseEventData = (params: BaseEventParams): TotalMouseEventData => {\n const result: TotalMouseEventData = {\n tooltipInfo: {},\n ignore: {}\n };\n\n Object.keys(this.processor).forEach(activeType => {\n const { tooltipInfo, ignore } = this.processor[activeType as TooltipActiveType].getMouseEventData(params);\n result.tooltipInfo[activeType as TooltipActiveType] = tooltipInfo as any;\n result.ignore[activeType as TooltipActiveType] = ignore;\n });\n return result;\n };\n\n protected _hideTooltipByHandler = (params: TooltipHandlerParams): TooltipResult => {\n if (!this._isTooltipShown && !this.tooltipHandler?.isTooltipShown?.()) {\n // 如果当前 tooltip 未显示,则提前退出\n return TooltipResult.success;\n }\n\n // 触发事件\n this.event.emit(ChartEvent.tooltipHide, {\n ...params,\n source: Event_Source_Type.chart, // 统一 event 的来源\n tooltip: this\n });\n\n // 删除缓存\n Object.values(this.processor).forEach((processor: BaseTooltipProcessor) => {\n processor.clearCache();\n });\n\n // 隐藏 tooltip\n const handler = this._spec.handler ?? this.tooltipHandler;\n\n if (handler.hideTooltip) {\n const result = handler.hideTooltip.call(handler, params);\n if (!result) {\n this._isTooltipShown = false;\n }\n return result;\n }\n return TooltipResult.failed;\n };\n\n reInit(spec?: any) {\n super.reInit(spec);\n\n if (this.tooltipHandler) {\n const renderMode = this._spec.renderMode ?? 'html';\n const newEnterable = this._spec.enterable && renderMode === 'html';\n\n if (newEnterable && !this._enterable) {\n this._needInitEventOfTooltip = true;\n }\n this._enterable = newEnterable;\n\n this.tooltipHandler.reInit?.();\n } else {\n this._initHandler();\n }\n }\n\n showTooltip(datum: Datum, options: IShowTooltipOption) {\n if (!this.tooltipHandler) {\n this._initHandler();\n }\n\n if (!this.processor) {\n this._initProcessor();\n }\n\n if (!this.tooltipHandler?.showTooltip) {\n return false;\n }\n const result = showTooltip(datum, options, this);\n if (result !== 'none') {\n this._alwaysShow = !!options?.alwaysShow;\n }\n return result;\n }\n\n /** 手动隐藏 tooltip,返回是否成功 */\n hideTooltip = (): boolean => {\n if (this._isReleased) {\n return false;\n }\n const params: TooltipHandlerParams = {\n changePositionOnly: false,\n tooltip: this,\n item: undefined,\n datum: undefined,\n source: Event_Source_Type.chart\n } as any;\n\n this._alwaysShow = false;\n return !this._hideTooltipByHandler(params);\n };\n\n private _isSameAsCache(\n nextInfo?: TooltipInfo,\n nextParams?: BaseEventParams,\n nextActiveType?: TooltipActiveType\n ): boolean {\n if (nextActiveType !== this._cacheActiveType) {\n return false;\n }\n if (nextInfo === this._cacheInfo) {\n return true;\n }\n if (isNil(this._cacheInfo) || isNil(nextInfo)) {\n return false;\n }\n\n // 判断 tooltip 信息是否一致\n if (isDimensionInfo(nextInfo)) {\n if (isMarkInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as DimensionTooltipInfo;\n const isSameAsCacheInfo =\n prevInfo.length === nextInfo.length && nextInfo.every((info, i) => isSameDimensionInfo(info, prevInfo[i]));\n\n return isSameAsCacheInfo;\n }\n\n if (isDimensionInfo(this._cacheInfo)) {\n return false;\n }\n\n const prevInfo = this._cacheInfo as MarkTooltipInfo;\n const isSameAsCacheInfo =\n nextInfo?.datum === prevInfo.datum && nextInfo?.mark === prevInfo.mark && nextInfo?.series === prevInfo.series;\n if (!isSameAsCacheInfo) {\n return false;\n }\n\n // 判断事件触发信息是否一致\n const prevParams = this._cacheParams;\n if (isNil(prevParams) || isNil(nextParams)) {\n return false;\n }\n return (\n prevParams.mark === nextParams.mark &&\n prevParams.model === nextParams.model &&\n prevParams.datum === nextParams.datum\n );\n }\n\n private _isPointerInChart(point: IPoint): boolean {\n const globalInstance = this._option?.globalInstance;\n if (!globalInstance) {\n return false;\n }\n const chart = globalInstance.getChart();\n if (!chart) {\n return false;\n }\n const { x, y } = point;\n const canvas = globalInstance.getCanvas();\n const { x: chartX, y: chartY, width: chartWidth, height: chartHeight } = canvas.getBoundingClientRect();\n // 鼠标仍在图表范围内,则不处理\n if (x >= chartX && x <= chartX + chartWidth && y >= chartY && y <= chartY + chartHeight) {\n return true;\n }\n\n return false;\n }\n\n getVisible() {\n return this._spec.visible !== false;\n }\n}\n\nexport const registerTooltip = () => {\n Factory.registerComponent(Tooltip.type, Tooltip);\n};\n","/**\n * @description Crosshair 基类\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { LocationCfg } from '../core/type';\nimport type { BaseCrosshairAttrs } from './type';\n\nexport abstract class CrosshairBase extends AbstractComponent> {\n name = 'crosshair';\n\n protected abstract renderCrosshair(container: IGroup): any;\n /**\n * 更新位置\n * @param location 位置信息\n */\n abstract setLocation(location: LocationCfg): void;\n\n protected render() {\n this.renderCrosshair(this as unknown as IGroup);\n }\n}\n","// import { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\nimport { registerArc, registerGroup, registerLine, registerPath, registerRect } from '@visactor/vrender-kits';\n\nexport function loadLineCrosshairComponent() {\n registerGroup();\n registerLine();\n}\n\nexport function loadCircleCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n\nexport function loadPolygonCrosshairComponent() {\n registerGroup();\n registerPath();\n}\n\nexport function loadRectCrosshairComponent() {\n registerGroup();\n registerRect();\n}\n\nexport function loadSectorCrosshairComponent() {\n registerGroup();\n registerArc();\n}\n\nexport function loadPolygonSectorCrosshairComponent() {\n registerGroup();\n registerPath();\n}\n","/**\n * @description 直线类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { LineCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineCrosshairComponent } from './register';\n\nloadLineCrosshairComponent();\nexport class LineCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: LineCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, lineStyle } = this.attribute as LineCrosshairAttrs;\n\n const line = container.createOrUpdateChild(\n 'crosshair-line',\n {\n points: [start, end],\n ...lineStyle\n },\n 'line'\n );\n return line;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","/**\n * @description 矩形类型 crosshair\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { RegionLocationCfg } from '../core/type';\nimport type { Tag } from '../tag';\nimport { CrosshairBase } from './base';\nimport type { RectCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadRectCrosshairComponent } from './register';\n\nloadRectCrosshairComponent();\nexport class RectCrosshair extends CrosshairBase {\n static defaultAttributes = {\n rectStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n protected topLabelShape?: Tag;\n protected bottomLabelShape?: Tag;\n protected leftLabelShape?: Tag;\n protected rightLabelShape?: Tag;\n\n constructor(attributes: RectCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { start, end, rectStyle } = this.attribute as RectCrosshairAttrs;\n\n const rect = container.createOrUpdateChild(\n 'crosshair-rect',\n {\n x: start.x,\n y: start.y,\n width: end.x - start.x,\n height: end.y - start.y,\n ...rectStyle\n },\n 'rect'\n );\n return rect;\n }\n\n setLocation(region: RegionLocationCfg) {\n const { start, end } = region;\n this.setAttributes({\n start,\n end\n });\n }\n}\n","import type { RenderMode } from '../../typings/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { RenderModeEnum } from '../../typings/spec';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\n\nexport function getDefaultCrosshairTriggerEventByMode(mode: RenderMode) {\n if (mode === RenderModeEnum['desktop-browser'] || mode === RenderModeEnum['desktop-miniApp']) {\n return {\n click: 'pointertap',\n hover: 'pointermove',\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n if (isMobileLikeMode(mode) || isMiniAppLikeMode(mode)) {\n return {\n click: 'tap',\n hover: ['pointerdown', 'pointermove'],\n hoverOut: 'pointerleave',\n clickOut: 'pointerleave'\n };\n }\n\n return null;\n}\n\nexport const enum LayoutType {\n ALL = 0b0011,\n HORIZONTAL = 0b0010,\n VERTICAL = 0b0001\n}\n","import type { Dict, IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { throttle, PointService, isEqual, isArray, isNumber, get, isBoolean, isObject, array } from '@visactor/vutils';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport type { BaseEventParams, EventType } from '../../event/interface';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPadding, Maybe, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { outOfBounds } from '../../util/math';\nimport type { IComponentOption } from '../interface';\nimport type {\n ICrossHair,\n CrossHairTrigger,\n ICartesianCrosshairSpec,\n IPolarCrosshairSpec,\n ICrosshairCategoryFieldSpec\n} from './interface';\nimport { ChartEvent, Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { getDefaultCrosshairTriggerEventByMode } from './config';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IAxis } from '../axis/interface';\nimport type { TooltipEventParams } from '../tooltip/interface/event';\n\nexport type IBound = { x1: number; y1: number; x2: number; y2: number };\nexport type IAxisInfo = Map;\n\nexport interface IHair {\n /** 是否展示 crosshair 辅助图形 */\n visible: boolean;\n /** 类型 */\n type: 'rect' | 'line';\n /** 样式 */\n style?: Dict;\n label?: {\n /** 文本是否可见 */\n visible: boolean;\n /** 格式化函数 */\n formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 文本样式 */\n textStyle?: Dict;\n minWidth?: number;\n maxWidth?: number;\n padding?: IPadding | number | number[];\n panel?: Dict;\n zIndex?: number;\n };\n}\n\nexport interface IHairRadius extends IHair {\n smooth?: boolean;\n}\n\nconst ORIENT_MAP = {\n x: ['top', 'bottom'],\n y: ['left', 'right'],\n category: ['angle'],\n value: ['radius']\n};\n\nexport abstract class BaseCrossHair\n extends BaseComponent\n implements ICrossHair\n{\n static specKey = 'crosshair';\n specKey = 'crosshair';\n\n layoutType: 'none' = 'none';\n gridZIndex: number = LayoutZIndex.CrossHair_Grid;\n labelZIndex: number = LayoutZIndex.CrossHair;\n trigger: CrossHairTrigger = 'hover';\n enable: boolean;\n showDefault: boolean;\n triggerOff: 'none' | number; // 为none则不消失\n\n private _timer?: number;\n private _clickLock?: boolean;\n private _hasActive?: boolean;\n private _onlyLockClick?: boolean;\n\n get enableRemain(): boolean {\n return this.triggerOff === 'none';\n }\n\n private _limitBounds: Maybe;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this.enable = true;\n this.showDefault = true;\n }\n\n protected abstract _showDefaultCrosshairBySpec(): void;\n protected abstract _layoutCrosshair(\n x: number,\n y: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ): void;\n protected abstract _parseFieldInfo(): void;\n abstract hide(): void;\n\n protected _getLimitBounds() {\n if (!this._limitBounds) {\n const { width, height } = this._option.globalInstance.getChart()?.getViewRect() ?? {\n width: 0,\n height: 0\n };\n this._limitBounds = {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height\n };\n }\n return this._limitBounds;\n }\n\n protected _showDefaultCrosshair() {\n if (!this.showDefault) {\n return;\n }\n\n this._showDefaultCrosshairBySpec();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._parseCrosshairSpec();\n }\n\n created() {\n super.created();\n // event\n this._initEvent();\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n if (this._spec.followTooltip) {\n this._registerTooltipEvent();\n } else {\n const triggerConfig = this._getTriggerEvent();\n\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._registerEvent(cfg.in, false, cfg.click);\n cfg.out && this._registerEvent(cfg.out, true);\n });\n }\n }\n }\n\n private _registerEvent(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n const cfg = isOut ? { level: Event_Bubble_Level.chart } : { source: Event_Source_Type.chart };\n\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.on(evt, cfg, handler);\n });\n } else {\n this.event.on(eventName as EventType, cfg, handler);\n }\n }\n\n private _eventOff(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.off(evt, handler);\n });\n } else {\n this.event.off(eventName as EventType, handler);\n }\n }\n\n updateLayoutAttribute() {\n this._limitBounds = null;\n this._showDefaultCrosshair();\n }\n\n protected calculateTriggerPoint(params: any) {\n const { event } = params as BaseEventParams;\n // compute layer offset\n const layer = this._option.getCompiler().getStage().getLayer(undefined);\n const point = { x: event.viewX, y: event.viewY };\n layer.globalTransMatrix.transformPoint({ x: event.viewX, y: event.viewY }, point);\n\n return {\n x: point.x - this.getLayoutStartPoint().x,\n y: point.y - this.getLayoutStartPoint().y\n };\n }\n\n private _handleIn = (params: any) => {\n if (!this._option) {\n return;\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleClickInEvent = (params: any) => {\n if (this._hasActive && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n return;\n } else if (this._clickLock) {\n this._clickLock = false;\n this._handleOutEvent();\n return;\n }\n\n if (this._onlyLockClick) {\n return;\n }\n\n this._handleIn(params);\n\n if (isNumber(this.triggerOff)) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timer = setTimeout(() => {\n this._handleOutEvent();\n }, this.triggerOff as number) as unknown as number;\n }\n };\n\n private _handleHoverInEvent = throttle((params: any) => {\n if (this._clickLock) {\n return;\n }\n\n this._handleIn(params);\n }, 10);\n\n private _handleOutEvent = () => {\n if (this.enableRemain || this._clickLock || !this._hasActive) {\n return;\n }\n this.clearOutEvent();\n\n this.hide();\n };\n\n private _getTriggerEvent() {\n const { mode = RenderModeEnum['desktop-browser'] } = this._option;\n const triggerConfig = getDefaultCrosshairTriggerEventByMode(mode);\n if (triggerConfig) {\n const trigger: string[] = array(this.trigger || 'hover');\n const outTrigger = (inTrigger: CrossHairTrigger) => {\n if (inTrigger === 'click') {\n return this.triggerOff === 'none' ? null : triggerConfig.clickOut;\n }\n return triggerConfig.hoverOut;\n };\n\n if (this._spec.lockAfterClick && !trigger.includes('click')) {\n trigger.push('click');\n this._onlyLockClick = true;\n } else {\n this._onlyLockClick = false;\n }\n // 同时配置了多个触发事件\n const res: { in: EventType | EventType[]; out: EventType | EventType[]; click: boolean }[] = [];\n (trigger as ['click', 'hover']).forEach(item => {\n res.push({\n click: item === 'click',\n in: triggerConfig[item],\n out: outTrigger(item)\n });\n });\n return res;\n }\n return null;\n }\n\n private _registerTooltipEvent() {\n this.event.on(ChartEvent.tooltipHide, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n this.event.on(ChartEvent.tooltipShow, { source: Event_Source_Type.chart }, this._handleTooltipShow);\n this.event.on(ChartEvent.tooltipRelease, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n }\n\n private _handleTooltipShow = (params: TooltipEventParams) => {\n const tooltipData = params.tooltipData;\n\n if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) {\n this._handleTooltipHideOrRelease();\n return;\n }\n\n if (isObject(this._spec.followTooltip)) {\n if (this._spec.followTooltip[params.activeType] === false) {\n this._handleTooltipHideOrRelease();\n return;\n }\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y, tooltipData, params.activeType);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleTooltipHideOrRelease = () => {\n this.clearOutEvent();\n\n this.hide();\n };\n\n protected _getAxisInfoByField(field: 'x' | 'y' | 'category' | 'value') {\n // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n const axesComponents = this._option.getComponentsByKey?.('axes') as IAxis[];\n if (!axesComponents?.length) {\n return null;\n }\n let bindingAxesIndex: number[] = get(this._spec, `${field}Field.bindingAxesIndex`);\n if (!bindingAxesIndex) {\n bindingAxesIndex = [];\n axesComponents.forEach((item, index) => {\n if (ORIENT_MAP[field].includes(item.getOrient())) {\n bindingAxesIndex.push(index);\n }\n });\n }\n if (!bindingAxesIndex.length) {\n return null;\n }\n\n const map: IAxisInfo = new Map();\n let x1 = Infinity;\n let y1 = Infinity;\n let x2 = -Infinity;\n let y2 = -Infinity;\n const { x: sx, y: sy } = this.getLayoutStartPoint();\n bindingAxesIndex.forEach(idx => {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n const axis = axesComponents.find(axis => axis.getSpecIndex() === idx);\n if (!axis) {\n return;\n }\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x: regionStartX, y: regionStartY } = r.getLayoutStartPoint();\n x1 = Math.min(x1, regionStartX - sx);\n y1 = Math.min(y1, regionStartY - sy);\n x2 = Math.max(x2, regionStartX + r.getLayoutRect().width - sx);\n y2 = Math.max(y2, regionStartY + r.getLayoutRect().height - sy);\n });\n map.set(idx, { x1, y1, x2, y2, axis: axis as unknown as T });\n });\n\n return map;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onLayoutEnd(ctx: IModelLayoutOption): void {\n const region = this._regions[0];\n this.setLayoutRect(region.getLayoutRect());\n this.setLayoutStartPosition(region.getLayoutStartPoint());\n\n super.onLayoutEnd(ctx);\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _releaseEvent(): void {\n this.clearOutEvent();\n\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._eventOff(cfg.in, false, cfg.click);\n cfg.out && this._eventOff(cfg.out, true);\n });\n }\n }\n\n protected _parseCrosshairSpec() {\n this._parseFieldInfo();\n\n const { trigger, triggerOff, labelZIndex, gridZIndex } = this._spec;\n if (trigger) {\n this.trigger = trigger;\n }\n if (triggerOff === 'none' || (isNumber(triggerOff) && triggerOff > 0)) {\n this.triggerOff = triggerOff;\n }\n if (labelZIndex !== undefined) {\n this.labelZIndex = labelZIndex;\n }\n if (gridZIndex !== undefined) {\n this.gridZIndex = gridZIndex;\n }\n }\n\n protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string) {\n const hair = {} as any;\n const { line = {}, label = {}, visible } = field;\n\n hair.visible = visible;\n hair.type = line.type || 'line';\n\n if (line.visible === false) {\n hair.style = { visible: false };\n } else {\n const style = line.style || {};\n const { stroke, fill, lineWidth } = style as any;\n const { strokeOpacity, fillOpacity, opacity, ...restStyle } = style as any;\n const isLineType = hair.type === 'line';\n let finalOpacity = isLineType ? strokeOpacity : fillOpacity;\n if (isNumber(opacity)) {\n // FIXME: 之前的兼容逻辑,去掉可能会影响现有 crosshair 的展示效果\n finalOpacity = (finalOpacity ?? 1) * opacity;\n }\n hair.style = {\n opacity: finalOpacity,\n pickable: false,\n visible: true,\n ...restStyle\n };\n\n if (isLineType) {\n hair.style.stroke = stroke || fill;\n hair.style.lineWidth = get(line, 'width', lineWidth || 2);\n } else {\n hair.style.fill = fill || stroke;\n if (this._spec[fieldName]?.line?.style?.stroke) {\n hair.style.stroke = this._spec[fieldName].line.style.stroke;\n }\n const rectSize = get(line, 'width');\n if (typeof rectSize === 'string') {\n const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;\n hair.style.sizePercent = percent;\n } else if (typeof rectSize === 'number' || typeof rectSize === 'function') {\n hair.style.size = rectSize;\n }\n }\n }\n\n if (!!label.visible) {\n const labelBackground = label.labelBackground || {};\n const labelStyle = label.style || {};\n const {\n fill: rectFill = 'rgba(47, 59, 82, 0.9)',\n stroke: rectStroke,\n outerBorder,\n ...rectStyle\n } = labelBackground.style || {};\n hair.label = {\n visible: true,\n formatMethod: label.formatMethod,\n formatter: label.formatter,\n minWidth: labelBackground.minWidth,\n maxWidth: labelBackground.maxWidth,\n padding: labelBackground.padding,\n textStyle: {\n fontSize: 14,\n pickable: false,\n ...labelStyle,\n fill: labelStyle.fill || '#fff',\n stroke: get(labelStyle, 'stroke')\n },\n panel: (isBoolean(labelBackground.visible) ? labelBackground.visible : !!labelBackground)\n ? {\n visible: true,\n pickable: false,\n fill: rectFill,\n stroke: rectStroke,\n // Note: 通过这个配置可以保证 label 和 轴 label 对齐\n outerBorder: {\n stroke: rectFill,\n distance: 0,\n lineWidth: 3,\n ...outerBorder\n },\n ...rectStyle\n }\n : { visible: false },\n zIndex: this.labelZIndex,\n childrenPickable: false,\n pickable: false\n };\n } else {\n hair.label = { visible: false };\n }\n\n return hair;\n }\n\n protected _filterAxisByPoint(axisMap: IAxisInfo, relativeX: number, relativeY: number) {\n axisMap &&\n axisMap.forEach(item => {\n const axis = item.axis as unknown as IAxis | IPolarAxis;\n if (outOfBounds(item, relativeX, relativeY)) {\n axisMap.delete(axis.getSpecIndex());\n }\n if ((axis as IPolarAxis).type.startsWith('polarAxis')) {\n // 极坐标下需要判断是否在半径内\n const center = (axis as IPolarAxis).getCenter();\n const innerRadius = (axis as IPolarAxis).getInnerRadius();\n const outerRadius = (axis as IPolarAxis).getOuterRadius();\n const distance = PointService.distancePP({ x: relativeX, y: relativeY }, center);\n if (distance > outerRadius || distance < innerRadius) {\n axisMap.delete((axis as IPolarAxis).getSpecIndex());\n }\n }\n });\n return axisMap;\n }\n\n protected clearOutEvent() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._clickLock) {\n this._clickLock = null;\n }\n\n if (this._hasActive) {\n this._hasActive = null;\n }\n }\n}\n","import type { BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series';\nimport type { ILayoutPoint, StringOrNumber } from '../../../typings';\nimport type { IBound, IHair } from '../base';\nimport { LayoutType } from '../config';\nimport type { AxisCurrentValueMap, ICrosshairInfoX, ICrosshairInfoY, ICrosshairLabelInfo } from '../interface';\nimport { getDatumByValue } from './common';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { isValid } from '@visactor/vutils';\nimport type { IAxis, ILinearAxis } from '../../axis';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n tag: number = LayoutType.ALL,\n series: ICartesianSeries,\n layoutStartPoint: ILayoutPoint,\n currValueX: AxisCurrentValueMap,\n currValueY: AxisCurrentValueMap,\n xHair: IHair,\n yHair: IHair,\n enableRemain: boolean = false,\n cacheXCrossHairInfo?: ICrosshairInfoX,\n cacheYCrossHairInfo?: ICrosshairInfoY\n) => {\n const layoutX = tag & LayoutType.VERTICAL;\n const layoutY = tag & LayoutType.HORIZONTAL;\n\n if (!layoutStartPoint) {\n layoutStartPoint = { x: 0, y: 0 };\n }\n\n // 计算x和y的坐标\n let xAxis = null;\n let yAxis = null;\n let x = 0;\n let y = 0;\n if (currValueX.size) {\n const item = Array.from(currValueX.values())[0];\n x = item.axis.getScale().scale(item.value) + item.axis.getLayoutStartPoint().x - layoutStartPoint.x;\n xAxis = item.axis;\n }\n if (currValueY.size) {\n const item = Array.from(currValueY.values())[0];\n y = item.axis.getScale().scale(item.value) + item.axis.getLayoutStartPoint().y - layoutStartPoint.y;\n yAxis = item.axis;\n }\n\n const xVisible = !!currValueX.size && Number.isFinite(x);\n const yVisible = !!currValueY.size && Number.isFinite(y);\n const xUseCache = enableRemain && !xVisible && isValid(cacheXCrossHairInfo);\n const yUseCache = enableRemain && !yVisible && isValid(cacheYCrossHairInfo);\n\n let xCrossHairInfo: ICrosshairInfoX;\n if (layoutX) {\n xCrossHairInfo = xUseCache\n ? cacheXCrossHairInfo\n : {\n height: 0,\n leftPos: 0,\n rightPos: 0,\n topPos: 0,\n x: 0,\n bottom: { visible: false, text: '', dx: 0, dy: 0 },\n top: { visible: false, text: '', dx: 0, dy: 0 },\n visible: xVisible,\n axis: xAxis\n };\n }\n\n let yCrossHairInfo: ICrosshairInfoY;\n if (layoutY) {\n yCrossHairInfo = yUseCache\n ? cacheYCrossHairInfo\n : {\n width: 0,\n leftPos: 0,\n topPos: 0,\n bottomPos: 0,\n y: 0,\n left: { visible: false, text: '', dx: 0, dy: 0 },\n right: { visible: false, text: '', dx: 0, dy: 0 },\n visible: yVisible,\n axis: yAxis\n };\n }\n\n let bandWidth;\n let offsetWidth: number = 0;\n let bandHeight;\n let offsetHeight: number = 0;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (xHair) {\n currValueX.forEach(({ axis, value }) => {\n value = value ?? '';\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const xScale = axis.getScale();\n if (isDiscrete(xScale.type)) {\n bandWidth = (xScale as BandScale).bandwidth();\n\n if (bandWidth === 0 && (xScale as BandScale).step) {\n offsetWidth = (xScale as BandScale).step();\n }\n } else if (isContinuous(xScale.type)) {\n const fieldX = series.fieldX[0];\n const fieldX2 = series.fieldX2;\n const datum = getDatumByValue(series.getViewData().latestData, +value, fieldX, fieldX2);\n if (datum) {\n const startX = series.dataToPositionX(datum);\n if (fieldX2) {\n bandWidth = Math.abs(startX - series.dataToPositionX1(datum));\n value = `${datum[fieldX]} ~ ${datum[fieldX2]}`;\n } else {\n bandWidth = 1;\n }\n x = startX;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (xCrossHairInfo && xHair.label?.visible && !xUseCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'bottom') {\n xCrossHairInfo.bottom.visible = true;\n xCrossHairInfo.bottom.defaultFormatter = niceLabelFormatter;\n xCrossHairInfo.bottom.text = value;\n xCrossHairInfo.bottom.dx = 0;\n xCrossHairInfo.bottom.dy = labelOffset;\n } else if (axis.getOrient() === 'top') {\n xCrossHairInfo.top.visible = true;\n xCrossHairInfo.top.defaultFormatter = niceLabelFormatter;\n xCrossHairInfo.top.text = value;\n xCrossHairInfo.top.dx = 0;\n xCrossHairInfo.top.dy = -labelOffset;\n }\n }\n });\n }\n\n if (yHair) {\n currValueY.forEach(({ axis, value }) => {\n value = value ?? '';\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const yScale = axis.getScale();\n if (isDiscrete(yScale.type)) {\n bandHeight = (yScale as BandScale).bandwidth();\n\n if (bandHeight === 0 && (yScale as BandScale).step) {\n offsetHeight = (yScale as BandScale).step();\n }\n } else if (isContinuous(yScale.type)) {\n const fieldY = series.fieldY[0];\n const fieldY2 = series.fieldY2;\n const datum = getDatumByValue(series.getViewData().latestData, +value, fieldY, fieldY2);\n if (datum) {\n const startY = series.dataToPositionY(datum);\n if (fieldY2) {\n bandHeight = Math.abs(startY - series.dataToPositionY1(datum));\n value = `${datum[fieldY]} ~ ${datum[fieldY2]}`;\n } else {\n bandHeight = 1;\n }\n y = startY;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (yCrossHairInfo && yHair.label?.visible && !yUseCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n if (axis.getOrient() === 'left') {\n yCrossHairInfo.left.visible = true;\n yCrossHairInfo.left.defaultFormatter = niceLabelFormatter;\n yCrossHairInfo.left.text = value;\n yCrossHairInfo.left.dx = -labelOffset;\n yCrossHairInfo.left.dy = 0;\n } else if (axis.getOrient() === 'right') {\n yCrossHairInfo.right.visible = true;\n yCrossHairInfo.right.defaultFormatter = niceLabelFormatter;\n yCrossHairInfo.right.text = value;\n yCrossHairInfo.right.dx = labelOffset;\n yCrossHairInfo.right.dy = 0;\n }\n }\n });\n }\n\n if (xCrossHairInfo && !xUseCache) {\n const xRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(xRegion, currValueX);\n xCrossHairInfo.leftPos = xRegion.x1;\n xCrossHairInfo.rightPos = xRegion.x2;\n xCrossHairInfo.topPos = xRegion.y1;\n xCrossHairInfo.height = xRegion.y2 - xRegion.y1;\n xCrossHairInfo.x = x + layoutStartPoint.x;\n\n if (xHair && xHair.label) {\n const { top, bottom } = xCrossHairInfo;\n if (top.visible) {\n setFormattedCrosshairLabel(top, 'top', xHair.label);\n }\n if (bottom.visible) {\n setFormattedCrosshairLabel(bottom, 'bottom', xHair.label);\n }\n }\n }\n\n if (yCrossHairInfo && !yUseCache) {\n const yRegion = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(yRegion, currValueY);\n yCrossHairInfo.leftPos = yRegion.x1;\n yCrossHairInfo.topPos = yRegion.y1;\n yCrossHairInfo.bottomPos = yRegion.y2;\n yCrossHairInfo.width = yRegion.x2 - yRegion.x1;\n yCrossHairInfo.y = y + layoutStartPoint.y;\n\n if (yHair && yHair.label) {\n const { left, right } = yCrossHairInfo;\n if (left.visible) {\n setFormattedCrosshairLabel(left, 'left', yHair.label);\n }\n if (right.visible) {\n setFormattedCrosshairLabel(right, 'right', yHair.label);\n }\n }\n }\n\n return {\n x: layoutX && xCrossHairInfo ? xCrossHairInfo : undefined,\n y: layoutY && yCrossHairInfo ? yCrossHairInfo : undefined,\n offsetWidth,\n offsetHeight,\n bandWidth: bandWidth ?? 0,\n bandHeight: bandHeight ?? 0\n };\n};\n\nconst setFormattedCrosshairLabel = (labelInfo: ICrosshairLabelInfo, position: string, labelSpec: IHair['label']) => {\n const { formatMethod, formatter } = labelSpec;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, labelInfo.text, {\n label: labelInfo.text,\n position\n });\n if (formatFunc) {\n labelInfo.text = formatFunc(...args);\n } else if (labelInfo.defaultFormatter) {\n labelInfo.text = labelInfo.defaultFormatter(labelInfo.text);\n }\n};\n\n// 计算x轴和y轴对应的region区域\nconst setRegionArea = (outRegion: IBound, currentValue: AxisCurrentValueMap) => {\n currentValue.forEach(({ axis }) => {\n const regions = axis.getRegions();\n regions.forEach(r => {\n outRegion.x1 = Math.min(outRegion.x1, r.getLayoutStartPoint().x);\n outRegion.y1 = Math.min(outRegion.y1, r.getLayoutStartPoint().y);\n outRegion.x2 = Math.max(outRegion.x2, r.getLayoutStartPoint().x + r.getLayoutRect().width);\n outRegion.y2 = Math.max(outRegion.y2, r.getLayoutStartPoint().y + r.getLayoutRect().height);\n });\n });\n};\n\nexport const layoutVerticalCrosshair = (\n xHair: IHair,\n crosshairInfo: ICrosshairInfoX,\n bandWidth: number,\n offsetWidth: number\n) => {\n const { x, topPos, height } = crosshairInfo;\n\n // 外部设置的size\n const type = xHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n visible: true,\n start: { x: x + bandWidth / 2, y: topPos },\n end: { x: x + bandWidth / 2, y: topPos + height }\n };\n } else if (type === 'rect') {\n const extend = getRectSize(xHair, bandWidth, crosshairInfo.axis);\n const { leftPos, rightPos } = crosshairInfo;\n\n positionAttribute = {\n visible: true,\n start: { x: Math.max(x - extend / 2 - offsetWidth / 2, leftPos), y: topPos },\n end: { x: Math.min(x + bandWidth + extend / 2 + offsetWidth / 2, rightPos), y: topPos + height }\n };\n }\n\n return positionAttribute;\n};\n\nexport const layoutHorizontalCrosshair = (\n yHair: IHair,\n crosshairInfo: ICrosshairInfoY,\n bandHeight: number,\n offsetHeight: number\n) => {\n const { leftPos, width, y } = crosshairInfo;\n\n // 外部设置的size\n const type = yHair.type;\n let positionAttribute;\n if (type === 'line') {\n positionAttribute = {\n visible: true,\n start: { x: leftPos, y: y + bandHeight / 2 },\n end: { x: leftPos + width, y: y + bandHeight / 2 }\n };\n } else if (type === 'rect') {\n const extend = getRectSize(yHair, bandHeight, crosshairInfo.axis);\n const { topPos, bottomPos } = crosshairInfo;\n\n positionAttribute = {\n visible: true,\n start: { x: leftPos, y: Math.max(y - extend / 2 - offsetHeight / 2, topPos) },\n end: { x: leftPos + width, y: Math.min(y + bandHeight + extend / 2 + offsetHeight / 2, bottomPos) }\n };\n }\n\n return positionAttribute;\n};\n\nconst getRectSize = (hair: IHair, bandSize: number, axis: IAxis) => {\n // 外部设置的size\n let extend = 0;\n if (hair.style?.sizePercent) {\n extend = (hair.style.sizePercent - 1) * bandSize;\n } else if (typeof hair.style?.size === 'number') {\n extend = hair.style.size - bandSize;\n } else if (typeof hair.style?.size === 'function') {\n const axisRect = axis.getLayoutRect();\n extend = hair.style.size(axisRect, axis) - bandSize;\n }\n\n return extend;\n};\n","import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type {\n AxisCurrentValueMap,\n ICartesianCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n ICrosshairInfoX,\n ICrosshairInfoY\n} from './interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';\nimport type { IAxisInfo, IHair } from './base';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseCrossHair } from './base';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\nimport { limitTagInBounds } from './utils';\nimport type { IAxis } from '../axis/interface';\nimport type { IOrientType, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { isXAxis, isYAxis } from '../axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { layoutByValue, layoutHorizontalCrosshair, layoutVerticalCrosshair } from './utils/cartesian';\nimport { getFirstSeries } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../event/events/dimension/interface';\nimport { getSpecInfo } from '../util';\n\n// 1. crosshair保存上次记录的x和y轴dimension\n// 2. 每次交互触发时,首先转化成dimension保存,然后依据dimension计算x和y绘制\n// 3. 如果同方向同时有多个轴,那么同时保存这些轴的数据\n// 4. 如果同方向的轴有多个离散轴,那么直接不显示\n\nexport class CartesianCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.cartesianCrosshair;\n type = ComponentTypeEnum.cartesianCrosshair;\n name: string = ComponentTypeEnum.cartesianCrosshair;\n\n private _xHair: IHair | undefined;\n private _yHair: IHair | undefined;\n\n private _cacheXCrossHairInfo: ICrosshairInfoX | undefined;\n private _cacheYCrossHairInfo: ICrosshairInfoY | undefined;\n\n private _xCrosshair: LineCrosshair | RectCrosshair;\n private _xTopLabel: Tag;\n private _xBottomLabel: Tag;\n\n private _yCrosshair: LineCrosshair | RectCrosshair;\n private _yLeftLabel: Tag;\n private _yRightLabel: Tag;\n\n private _currValueX: AxisCurrentValueMap;\n private _currValueY: AxisCurrentValueMap;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: ICartesianCrosshairSpec) => {\n return (s.xField && s.xField.visible !== false) || (s.yField && s.yField.visible !== false);\n });\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueX = new Map();\n this._currValueY = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n if (xField?.visible && xField.defaultSelect) {\n const { axisIndex, datum } = xField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (yField?.visible && yField.defaultSelect) {\n const { axisIndex, datum } = yField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, value: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueX.clear();\n this._currValueX.set(axisIndex, { axis, value });\n } else {\n this._currValueY.clear();\n this._currValueY.set(axisIndex, { axis, value });\n }\n this.layoutByValue(tag);\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const xAxisMap = this._getAxisInfoByField('x');\n const yAxisMap = this._getAxisInfoByField('y');\n return {\n xAxisMap: this._filterAxisByPoint(xAxisMap, relativeX, relativeY),\n yAxisMap: this._filterAxisByPoint(yAxisMap, relativeX, relativeY)\n };\n }\n\n private _getValueAt(axis: IAxis, p: number): number | string {\n const value = axis.getScale().invert(p);\n return value;\n }\n\n /**\n * clear axis value of crosshair\n */\n clearAxisValue() {\n this._currValueX.clear();\n this._currValueY.clear();\n }\n\n /**\n * set axis value of crosshair\n */\n setAxisValue(value: StringOrNumber, axis: IAxis) {\n if (isXAxis(axis.getOrient() as unknown as IOrientType)) {\n this._currValueX.set(axis.getSpecIndex(), {\n value,\n axis\n });\n } else {\n this._currValueY.set(axis.getSpecIndex(), {\n value,\n axis\n });\n }\n }\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(\n axisMap: IAxisInfo,\n p: number,\n currValue: AxisCurrentValueMap,\n vertical: boolean\n ): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, {\n value: this._getValueAt(\n axis,\n p -\n (vertical\n ? axis.getLayoutStartPoint().x - this.getLayoutStartPoint().x\n : axis.getLayoutStartPoint().y - this.getLayoutStartPoint().y)\n ),\n axis\n });\n });\n return true;\n }\n\n protected _layoutCrosshair(\n relativeX: number,\n relativeY: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ) {\n let x = relativeX;\n let y = relativeY;\n\n if (tooltipData && tooltipData.length) {\n if (activeType === 'dimension') {\n const dimensionInfo = (tooltipData as IDimensionInfo[])[0];\n // 图例筛选时, 找到第一个没有被筛选的系列\n const datumIndex = dimensionInfo.data.findIndex(dimData => dimData.datum.length > 0);\n let pos;\n if (datumIndex > -1) {\n const dimensionData = dimensionInfo.data[datumIndex];\n pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n }\n\n const isY = isValid(dimensionInfo.dimType)\n ? dimensionInfo.dimType === 'y'\n : isYAxis(dimensionInfo?.axis?.getOrient() as IOrientType);\n\n if (isY) {\n y = pos?.y;\n } else {\n x = pos?.x;\n }\n } else if (activeType === 'mark') {\n const dimensionData = (tooltipData as IDimensionData[])[0];\n const pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n\n x = pos?.x;\n y = pos?.y;\n }\n }\n\n // 找到所有的包含这个点的轴\n const { xAxisMap, yAxisMap } = this._findAllAxisContains(x, y);\n if ((xAxisMap && xAxisMap.size === 0) || (yAxisMap && yAxisMap.size === 0)) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueX.clear();\n this._currValueY.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n xAxisMap && xAxisMap.size && this._getAllAxisValues(xAxisMap, x, this._currValueX, true);\n yAxisMap && yAxisMap.size && this._getAllAxisValues(yAxisMap, y, this._currValueY, false);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n // 隐藏\n this._xCrosshair && this._xCrosshair.hideAll();\n this._xTopLabel && this._xTopLabel.hideAll();\n this._xBottomLabel && this._xBottomLabel.hideAll();\n\n this._yCrosshair && this._yCrosshair.hideAll();\n this._yLeftLabel && this._yLeftLabel.hideAll();\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n const series = getFirstSeries(this._regions, 'cartesian') as ICartesianSeries;\n if (!series) {\n return;\n }\n\n const { x, y, offsetWidth, offsetHeight, bandWidth, bandHeight } = layoutByValue(\n tag,\n series,\n this.getLayoutStartPoint(),\n this._currValueX,\n this._currValueY,\n this._xHair,\n this._yHair,\n this.enableRemain,\n this._cacheXCrossHairInfo,\n this._cacheYCrossHairInfo\n );\n\n if (this.enableRemain) {\n x && (this._cacheXCrossHairInfo = { ...x, _isCache: true });\n y && (this._cacheYCrossHairInfo = { ...y, _isCache: true });\n }\n\n x && this._layoutVertical(x, bandWidth, offsetWidth);\n y && this._layoutHorizontal(y, bandHeight, offsetHeight);\n }\n\n private _layoutVertical(crosshairInfo: ICrosshairInfoX, bandWidth: number, offsetWidth: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._xHair) {\n return;\n }\n\n const { x, topPos, height, top, bottom, visible } = crosshairInfo;\n\n if (visible) {\n // 外部设置的size\n const type = this._xHair.type;\n const positionAttribute = layoutVerticalCrosshair(this._xHair, crosshairInfo, bandWidth, offsetWidth);\n this._updateCrosshair('x', type, positionAttribute);\n // 文本\n if (top.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos,\n ...top,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n zIndex: this.labelZIndex,\n visible: true\n };\n this._updateCrosshairLabel(this._xTopLabel, updateAttrs, label => {\n label.name = 'crosshair-x-top-label';\n this._xTopLabel = label;\n });\n } else {\n this._xTopLabel && this._xTopLabel.hideAll();\n }\n\n if (bottom.visible) {\n const updateAttrs = {\n x: x + bandWidth / 2,\n y: topPos + height,\n ...bottom,\n ...this._xHair.label,\n textStyle: {\n ...this._xHair.label?.textStyle,\n textAlign: 'center',\n textBaseline: 'top'\n },\n zIndex: this.labelZIndex,\n visible: true\n };\n this._updateCrosshairLabel(this._xBottomLabel, updateAttrs, label => {\n label.name = 'crosshair-x-bottom-label';\n this._xBottomLabel = label;\n });\n } else {\n this._xBottomLabel && this._xBottomLabel.hideAll();\n }\n }\n }\n\n private _layoutHorizontal(crosshairInfo: ICrosshairInfoY, bandHeight: number, offsetHeight: number) {\n if ((crosshairInfo._isCache && this.enableRemain) || !this._yHair) {\n return;\n }\n const { leftPos, width, y, left, right, visible } = crosshairInfo;\n if (visible) {\n const type = this._yHair.type;\n const positionAttribute = layoutHorizontalCrosshair(this._yHair, crosshairInfo, bandHeight, offsetHeight);\n this._updateCrosshair('y', type, positionAttribute);\n\n // 文本\n if (left.visible) {\n const updateAttrs = {\n x: leftPos,\n y: y + bandHeight / 2,\n ...left,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'right',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n\n this._updateCrosshairLabel(this._yLeftLabel, updateAttrs, label => {\n label.name = 'crosshair-y-left-label';\n this._yLeftLabel = label;\n });\n } else {\n this._yLeftLabel && this._yLeftLabel.hideAll();\n }\n\n if (right.visible) {\n const updateAttrs = {\n x: leftPos + width,\n y: y + bandHeight,\n ...right,\n ...this._yHair.label,\n textStyle: {\n ...this._yHair.label?.textStyle,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._yRightLabel, updateAttrs, label => {\n label.name = 'crosshair-y-right-label';\n this._yRightLabel = label;\n });\n } else {\n this._yRightLabel && this._yRightLabel.hideAll();\n }\n }\n }\n\n protected _parseFieldInfo() {\n const { xField, yField } = this._spec as ICartesianCrosshairSpec;\n this._parseAndSetCrosshair(xField, 'x');\n this._parseAndSetCrosshair(yField, 'y');\n }\n\n private _parseAndSetCrosshair(field: ICrosshairCategoryFieldSpec, axis: 'x' | 'y') {\n const hairProp = `_${axis}Hair` as '_xHair' | '_yHair';\n const crosshairProp = `_${axis}Crosshair` as '_xCrosshair' | '_yCrosshair';\n if (field && field.visible) {\n this[hairProp] = this._parseField(field, `${axis}Field` as 'xField' | 'yField');\n\n if (this[crosshairProp]) {\n const { style, type } = this[hairProp];\n const styleKey = type === 'rect' ? 'rectStyle' : 'lineStyle';\n\n this[crosshairProp].setAttributes({\n [styleKey]: style\n });\n }\n } else if (this[crosshairProp] && this[crosshairProp].parent) {\n this[crosshairProp].parent.removeChild(this[crosshairProp]);\n }\n }\n\n private _updateCrosshair(dim: string, type: string, attributes: any) {\n const container = this.getContainer();\n let crosshair;\n if (dim === 'x') {\n crosshair = this._xCrosshair;\n } else {\n crosshair = this._yCrosshair;\n }\n if (crosshair) {\n crosshair.setAttributes(attributes);\n } else {\n const style = dim === 'x' ? this._xHair.style : this._yHair.style;\n // 创建\n if (type === 'line') {\n crosshair = new LineCrosshair({\n ...attributes,\n lineStyle: style,\n zIndex: this.gridZIndex + 1, // 样式优化:线盖在面上\n disableTriggerEvent: this._option.disableTriggerEvent,\n pickable: false\n });\n } else if (type === 'rect') {\n crosshair = new RectCrosshair({\n ...attributes,\n rectStyle: style,\n zIndex: this.gridZIndex,\n disableTriggerEvent: this._option.disableTriggerEvent,\n pickable: false\n });\n }\n // 添加至场景树\n container?.add(crosshair as unknown as INode);\n if (dim === 'x') {\n this._xCrosshair = crosshair;\n } else {\n this._yCrosshair = crosshair;\n }\n }\n }\n\n private _updateCrosshairLabel(label: Tag, attributes: any, callback: (label: Tag) => void) {\n const container = this.getContainer();\n if (label) {\n label.setAttributes(attributes);\n } else {\n label = new Tag(attributes);\n callback(label);\n container?.add(label as unknown as INode);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._xCrosshair,\n this._xTopLabel,\n this._xBottomLabel,\n this._yCrosshair,\n this._yLeftLabel,\n this._yRightLabel\n ] as unknown as IGraphic[];\n }\n}\n\nexport const registerCartesianCrossHair = () => {\n Factory.registerComponent(CartesianCrossHair.type, CartesianCrossHair);\n};\n","/**\n * @description sector 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, getAngleByPoint, radianToDegree } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { POLAR_END_ANGLE, POLAR_START_ANGLE } from '../constant';\nimport { CrosshairBase } from './base';\nimport type { SectorCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSectorCrosshairComponent } from './register';\n\nloadSectorCrosshairComponent();\nexport class SectorCrosshair extends CrosshairBase {\n static defaultAttributes = {\n sectorStyle: {\n fill: '#b2bacf',\n opacity: 0.2\n }\n };\n\n constructor(attributes: SectorCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SectorCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, innerRadius = 0, sectorStyle } = this.attribute as SectorCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n const circle = container.createOrUpdateChild(\n 'crosshair-sector',\n {\n ...center,\n outerRadius: radius,\n innerRadius,\n startAngle,\n endAngle,\n ...sectorStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const {\n center,\n startAngle = POLAR_START_ANGLE,\n endAngle = POLAR_END_ANGLE\n } = this.attribute as SectorCrosshairAttrs;\n const sectorAngle = endAngle - startAngle;\n const pointAngle = radianToDegree(getAngleByPoint(center, point));\n this.setAttributes({\n startAngle: pointAngle - sectorAngle / 2,\n endAngle: pointAngle + sectorAngle / 2\n });\n }\n}\n","/**\n * @description polygon 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, polarToCartesian, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { PolygonCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadPolygonCrosshairComponent } from './register';\n\nloadPolygonCrosshairComponent();\nexport class PolygonCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: PolygonCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PolygonCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, sides = 6, lineStyle } = this.attribute as PolygonCrosshairAttrs;\n const { startAngle, endAngle } = this.attribute;\n\n const isClose = (endAngle - startAngle) % (Math.PI * 2) === 0;\n const eachAngle = (endAngle - startAngle) / sides;\n let path;\n for (let index = 0; index <= sides; index++) {\n const angle = startAngle + eachAngle * index;\n const point = polarToCartesian(center, radius, angle);\n if (index === 0) {\n path = `M${point.x},${point.y}`;\n } else {\n path += `L${point.x},${point.y}`;\n }\n if (index === sides && isClose) {\n path += 'Z';\n }\n }\n\n const polygon = container.createOrUpdateChild(\n 'crosshair-polygon',\n {\n path,\n ...lineStyle\n },\n 'path'\n );\n return polygon;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as PolygonCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","/**\n * @description circle 类型 crosshair,用于极坐标系下\n */\nimport type { IGroup } from '@visactor/vrender-core';\nimport { merge, PointService } from '@visactor/vutils';\nimport type { PointLocationCfg } from '../core/type';\nimport { CrosshairBase } from './base';\nimport type { CircleCrosshairAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadCircleCrosshairComponent } from './register';\n\nloadCircleCrosshairComponent();\nexport class CircleCrosshair extends CrosshairBase {\n static defaultAttributes = {\n lineStyle: {\n stroke: ['#b2bacf', false, false, false],\n lineWidth: 1,\n lineDash: [2]\n }\n };\n\n constructor(attributes: CircleCrosshairAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CircleCrosshair.defaultAttributes, attributes));\n }\n\n protected renderCrosshair(container: IGroup) {\n const { center, radius, lineStyle } = this.attribute as CircleCrosshairAttrs;\n\n const circle = container.createOrUpdateChild(\n 'crosshair-circle',\n {\n ...center,\n outerRadius: radius,\n // TODO: group的cornerRadius支持数组,arc的不支持数组,此处会有类型转换问题\n ...(this.attribute as any),\n ...lineStyle\n },\n 'arc'\n );\n return circle;\n }\n\n setLocation(point: PointLocationCfg) {\n const { center } = this.attribute as CircleCrosshairAttrs;\n const radius = PointService.distancePP(point, center);\n\n this.setAttribute('radius', radius);\n }\n}\n","import type { BandScale } from '@visactor/vscale';\nimport type { IPolarSeries } from '../../../series';\nimport type { IHair, IHairRadius } from '../base';\nimport type { AxisCurrentValueMap, IPolarCrosshairInfo } from '../interface';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { PointService, clamp, getAngleByPoint, getIntersectPoint, isValid, polarToCartesian } from '@visactor/vutils';\nimport type { ILinearAxis, IPolarAxis } from '../../axis';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n series: IPolarSeries,\n currValueAngle: AxisCurrentValueMap,\n currValueRadius: AxisCurrentValueMap,\n angleHair: IHair,\n radiusHair: IHair,\n enableRemain: boolean = false,\n cacheAngleCrossHairInfo?: IPolarCrosshairInfo,\n cacheRadiusCrossHairInfo?: IPolarCrosshairInfo\n) => {\n let angleCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n let radiusCrossHairInfo = {\n x: 0,\n y: 0,\n center: { x: 0, y: 0 },\n radius: 0,\n distance: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n visible: false,\n sides: (series.angleAxisHelper.getScale(0) as BandScale).domain().length,\n label: { visible: false, text: '', offset: 0 }\n } as IPolarCrosshairInfo;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (angleHair) {\n angleCrossHairInfo.visible = !!currValueAngle.size;\n const bandWidth = series.angleAxisHelper.getBandwidth(0);\n currValueAngle.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n mergeSpec(angleCrossHairInfo, rest);\n const angle = series.angleAxisHelper.dataToPosition([value]);\n angleCrossHairInfo.angle = angle;\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (angleHair.label?.visible) {\n angleCrossHairInfo.label.visible = true;\n angleCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n angleCrossHairInfo.label.text = value;\n angleCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n\n angleCrossHairInfo.startAngle = angle - bandWidth / 2;\n angleCrossHairInfo.endAngle = angle + bandWidth / 2;\n });\n }\n\n if (radiusHair) {\n radiusCrossHairInfo.visible = !!currValueRadius.size;\n currValueRadius.forEach(({ axis, value, coord, ...rest }) => {\n value = value ?? '';\n const niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n if (radiusHair.label?.visible) {\n radiusCrossHairInfo.label.visible = true;\n radiusCrossHairInfo.label.defaultFormatter = niceLabelFormatter;\n radiusCrossHairInfo.label.text = value;\n radiusCrossHairInfo.label.offset = getAxisLabelOffset(axis.getSpec());\n }\n radiusCrossHairInfo.angle = coord.angle;\n radiusCrossHairInfo.axis = axis as IPolarAxis;\n mergeSpec(radiusCrossHairInfo, rest);\n });\n }\n\n if (enableRemain && !angleCrossHairInfo.visible && isValid(cacheAngleCrossHairInfo)) {\n angleCrossHairInfo = cacheAngleCrossHairInfo;\n } else {\n if (angleCrossHairInfo.label.visible) {\n if (angleHair && angleHair.label) {\n const { label } = angleCrossHairInfo;\n const { formatMethod, formatter } = angleHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'angle'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n if (enableRemain && !radiusCrossHairInfo.visible && isValid(cacheRadiusCrossHairInfo)) {\n radiusCrossHairInfo = cacheRadiusCrossHairInfo;\n } else {\n if (radiusCrossHairInfo.label.visible) {\n if (radiusHair && radiusHair.label) {\n const { label } = radiusCrossHairInfo;\n const { formatMethod, formatter } = radiusHair.label;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, label.text, {\n label: label.text,\n orient: 'radius'\n });\n if (formatFunc) {\n label.text = formatFunc(...args);\n } else if (label.defaultFormatter) {\n label.text = label.defaultFormatter(label.text);\n }\n }\n }\n }\n\n return {\n angle: angleCrossHairInfo,\n radius: radiusCrossHairInfo\n };\n};\n\nexport const layoutAngleCrosshair = (angleHair: IHair, crosshairInfo: IPolarCrosshairInfo) => {\n const { angle, innerRadius, radius, startAngle, endAngle, center } = crosshairInfo;\n\n const crosshairType = angleHair.type === 'rect' ? 'sector' : 'line';\n let positionAttrs;\n if (crosshairType === 'sector') {\n positionAttrs = {\n center,\n innerRadius,\n radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n } else {\n positionAttrs = {\n start: polarToCartesian(center, innerRadius, angle),\n end: polarToCartesian(center, radius, angle)\n };\n }\n\n return positionAttrs;\n};\n\nexport const layoutRadiusCrosshair = (radiusHair: IHairRadius, crosshairInfo: IPolarCrosshairInfo) => {\n const { center, startAngle, endAngle, distance, sides, axis, point, radius, innerRadius } = crosshairInfo;\n\n const crosshairType = radiusHair.smooth ? 'circle' : 'polygon';\n\n let polygonRadius = distance;\n if (crosshairType === 'polygon') {\n const axisCenter = axis.getCenter();\n // 需要计算半径\n // 获取当前点的角度\n const curAngle = getAngleByPoint(axisCenter, point);\n const stepAngle = (endAngle - startAngle) / sides;\n const index = Math.floor((curAngle - startAngle) / stepAngle);\n const preAngle = index * stepAngle + startAngle;\n const nextAngle = Math.min((index + 1) * stepAngle + startAngle, endAngle);\n\n const prePoint = polarToCartesian(axisCenter, distance, preAngle);\n const nextPoint = polarToCartesian(axisCenter, distance, nextAngle);\n // 求交点\n const insertPoint = getIntersectPoint(\n [nextPoint.x, nextPoint.y],\n [prePoint.x, prePoint.y],\n [axisCenter.x, axisCenter.y],\n [point.x, point.y]\n );\n if (insertPoint) {\n polygonRadius = clamp(\n PointService.distancePN(point, insertPoint[0], insertPoint[1]) + distance,\n innerRadius,\n radius\n );\n }\n }\n const positionAttrs = {\n center,\n startAngle: startAngle,\n endAngle: endAngle,\n radius: polygonRadius,\n sides\n };\n\n return positionAttrs;\n};\n","/* eslint-disable no-duplicate-imports */\nimport type { IPolarSeries } from '../../series/interface/series';\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { AxisCurrentValueMap, IPolarCrosshairInfo, IPolarCrosshairSpec } from './interface';\nimport { isDiscrete } from '@visactor/vscale';\nimport { Tag } from '@visactor/vrender-components';\nimport { LineCrosshair, SectorCrosshair, CircleCrosshair, PolygonCrosshair } from '@visactor/vrender-components';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IPoint, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport type { IAxisInfo, IHair, IHairRadius } from './base';\nimport { BaseCrossHair } from './base';\nimport type { Maybe } from '@visactor/vutils';\nimport { polarToCartesian, PointService, isArray, isNil } from '@visactor/vutils';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport { angleLabelOrientAttribute, radiusLabelOrientAttribute } from '../../util/math';\nimport { limitTagInBounds } from './utils';\nimport { Factory } from '../../core/factory';\nimport { LayoutType } from './config';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { layoutByValue, layoutAngleCrosshair, layoutRadiusCrosshair } from './utils/polar';\nimport { getFirstSeries } from '../../util';\nimport type { IDimensionData, IDimensionInfo } from '../../event/events/dimension/interface';\nimport { getSpecInfo } from '../util';\n\nexport class PolarCrossHair extends BaseCrossHair {\n static specKey = 'crosshair';\n\n static type = ComponentTypeEnum.polarCrosshair;\n type = ComponentTypeEnum.polarCrosshair;\n name: string = ComponentTypeEnum.polarCrosshair;\n private _currValueAngle: AxisCurrentValueMap;\n private _currValueRadius: AxisCurrentValueMap;\n\n private _angleHair: IHair | undefined;\n private _radiusHair: IHairRadius | undefined;\n\n private _cacheAngleCrossHairInfo: IPolarCrosshairInfo | undefined;\n private _cacheRadiusCrossHairInfo: IPolarCrosshairInfo | undefined;\n\n private _radiusCrosshair: IGroup;\n private _radiusLabelCrosshair: Tag;\n private _angleCrosshair: IGroup;\n private _angleLabelCrosshair: Tag;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IPolarCrosshairSpec) => {\n return (s.categoryField && s.categoryField.visible !== false) || (s.valueField && s.valueField.visible !== false);\n });\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._currValueAngle = new Map();\n this._currValueRadius = new Map();\n }\n\n protected _showDefaultCrosshairBySpec() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField?.visible && categoryField.defaultSelect) {\n const { axisIndex, datum } = categoryField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.VERTICAL);\n }\n if (valueField?.visible && valueField.defaultSelect) {\n const { axisIndex, datum } = valueField.defaultSelect;\n this._defaultCrosshair(axisIndex, datum, LayoutType.HORIZONTAL);\n }\n }\n\n private _defaultCrosshair(axisIndex: number, datum: StringOrNumber, tag: number) {\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IPolarAxis;\n if (!axis) {\n return;\n }\n // 横轴\n if (tag === LayoutType.VERTICAL) {\n this._currValueAngle.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.valueToPosition(datum),\n radius: axis.getOuterRadius()\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueAngle.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n } else {\n this._currValueRadius.clear();\n // 根据数值拿到对应的坐标点\n const polarCoord = {\n angle: axis.startAngle,\n radius: axis.valueToPosition(datum)\n };\n const canvasPosition = axis.coordToPoint(polarCoord);\n this._currValueRadius.set(axisIndex, this._getValueByAxis(axis, canvasPosition));\n }\n this.layoutByValue(LayoutType.ALL);\n }\n\n hide() {\n this._radiusCrosshair && this._radiusCrosshair.hideAll();\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n this._angleCrosshair && this._angleCrosshair.hideAll();\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n\n /**\n * 查找所有落在x和y区域的轴\n * @param relativeX\n * @param relativeY\n */\n private _findAllAxisContains(relativeX: number, relativeY: number) {\n const angleAxisMap = this._getAxisInfoByField('category');\n const radiusAxisMap = this._getAxisInfoByField('value');\n return {\n angleAxisMap: this._filterAxisByPoint(angleAxisMap, relativeX, relativeY),\n radiusAxisMap: this._filterAxisByPoint(radiusAxisMap, relativeX, relativeY)\n };\n }\n\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n private _getAllAxisValues(axisMap: IAxisInfo, point: IPoint, currValue: AxisCurrentValueMap): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currValue.set(id, this._getValueByAxis(axis, point));\n });\n return true;\n }\n\n private _getValueByAxis(axis: IPolarAxis, point: IPoint) {\n const { x: axisStartX, y: axisStartY } = axis.getLayoutStartPoint();\n const { x, y } = this.getLayoutStartPoint();\n const value = axis.positionToData({\n x: point.x - (axisStartX - x),\n y: point.y - (axisStartY - y)\n });\n\n const center = {\n x: axis.getCenter().x + this.getLayoutStartPoint().x,\n y: axis.getCenter().y + this.getLayoutStartPoint().y\n };\n\n return {\n value,\n axis,\n center,\n innerRadius: axis.getInnerRadius(),\n radius: axis.getOuterRadius(),\n startAngle: axis.startAngle,\n endAngle: axis.endAngle,\n distance: PointService.distancePP(point, axis.getCenter()),\n coord: axis.pointToCoord(point),\n point\n };\n }\n\n protected _layoutCrosshair(\n relativeX: number,\n relativeY: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ) {\n let x = relativeX;\n let y = relativeY;\n\n if (tooltipData && tooltipData.length) {\n if (activeType === 'dimension') {\n const dimensionInfo = (tooltipData as IDimensionInfo[])[0];\n\n if (dimensionInfo.axis) {\n const triggerCoord = (dimensionInfo.axis as IPolarAxis).pointToCoord({ x, y });\n const isRadius = dimensionInfo.axis.getOrient() === 'radius';\n const coord = isRadius\n ? {\n radius: dimensionInfo.position,\n angle: triggerCoord.angle\n }\n : {\n radius: triggerCoord.radius,\n angle: dimensionInfo.position\n };\n const uniformPos = (dimensionInfo.axis as IPolarAxis).coordToPoint(coord);\n x = uniformPos.x;\n y = uniformPos.y;\n }\n } else if (activeType === 'mark') {\n const dimensionData = (tooltipData as IDimensionData[])[0];\n const pos = dimensionData.series.dataToPosition(dimensionData.datum[0]);\n\n x = pos.x;\n y = pos.y;\n }\n }\n\n // 找到所有的包含这个点的轴\n const { angleAxisMap, radiusAxisMap } = this._findAllAxisContains(x, y);\n if (angleAxisMap.size === 0 && radiusAxisMap.size === 0) {\n if (this.enableRemain) {\n return;\n }\n // 隐藏\n this.hide();\n return;\n }\n // 删除之前的currValue\n this._currValueAngle.clear();\n this._currValueRadius.clear();\n // 将数据保存到这个对象中,如果不存在,就直接不执行后续逻辑\n angleAxisMap && this._getAllAxisValues(angleAxisMap, { x, y }, this._currValueAngle);\n radiusAxisMap && this._getAllAxisValues(radiusAxisMap, { x, y }, this._currValueRadius);\n\n this.layoutByValue(LayoutType.ALL);\n }\n\n layoutByValue(tag: number = LayoutType.ALL) {\n if (!this.enable) {\n return;\n }\n const series = getFirstSeries(this._regions, 'polar') as IPolarSeries;\n if (!series) {\n return;\n }\n\n const { angle, radius } = layoutByValue(\n series,\n this._currValueAngle,\n this._currValueRadius,\n this._angleHair,\n this._radiusHair,\n this.enableRemain,\n this._cacheAngleCrossHairInfo,\n this._cacheRadiusCrossHairInfo\n );\n\n if (this.enableRemain) {\n this._cacheAngleCrossHairInfo = { ...angle, _isCache: true };\n this._cacheRadiusCrossHairInfo = { ...radius, _isCache: true };\n }\n\n if (tag) {\n LayoutType.HORIZONTAL && this._layoutRadius(radius);\n LayoutType.VERTICAL && this._layoutAngle(angle);\n }\n }\n\n private _layoutAngle(crosshairInfo: IPolarCrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const container = this.getContainer();\n const { angle, radius, label, center, visible } = crosshairInfo;\n if (visible) {\n const crosshairType = this._angleHair.type === 'rect' ? 'sector' : 'line';\n const positionAttrs = layoutAngleCrosshair(this._angleHair, crosshairInfo);\n\n if (this._angleCrosshair) {\n this._angleCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n // 创建\n if (crosshairType === 'line') {\n crosshair = new LineCrosshair({\n ...(positionAttrs as { start: IPoint; end: IPoint }),\n lineStyle: this._angleHair.style,\n zIndex: this.gridZIndex,\n pickable: false\n });\n } else if (crosshairType === 'sector') {\n crosshair = new SectorCrosshair({\n ...(positionAttrs as {\n center: IPoint;\n innerRadius: number;\n radius: number;\n startAngle: number;\n endAngle: number;\n }),\n sectorStyle: this._angleHair.style,\n zIndex: this.gridZIndex,\n pickable: false\n });\n }\n this._angleCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = angleLabelOrientAttribute(angle);\n const labelAttrs = {\n ...polarToCartesian(center, radius + label.offset, angle),\n ...this._angleHair.label,\n ...label,\n textStyle: {\n ...this._angleHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._angleLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-angle-label';\n this._angleLabelCrosshair = label;\n });\n } else {\n this._angleLabelCrosshair && this._angleLabelCrosshair.hideAll();\n }\n }\n }\n\n private _layoutRadius(crosshairInfo: IPolarCrosshairInfo) {\n if (crosshairInfo._isCache && this.enableRemain) {\n return;\n }\n\n const { center, startAngle, label, visible } = crosshairInfo;\n const container = this.getContainer();\n if (visible) {\n const crosshairType = this._radiusHair.smooth ? 'circle' : 'polygon';\n const positionAttrs = layoutRadiusCrosshair(this._radiusHair, crosshairInfo);\n const polygonRadius = positionAttrs.radius;\n\n if (this._radiusCrosshair) {\n this._radiusCrosshair.setAttributes(positionAttrs as unknown as any);\n } else {\n let crosshair;\n if (crosshairType === 'polygon') {\n crosshair = new PolygonCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex + 1 // 样式优化:线盖在面上\n });\n } else {\n crosshair = new CircleCrosshair({\n ...positionAttrs,\n lineStyle: this._radiusHair.style,\n zIndex: this.gridZIndex\n });\n }\n this._radiusCrosshair = crosshair as unknown as IGroup;\n // 添加至场景树\n container.add(crosshair as unknown as INode);\n }\n\n // 文本\n if (label.visible) {\n const orient = radiusLabelOrientAttribute(startAngle);\n const labelAttrs = {\n ...polarToCartesian(center, polygonRadius, startAngle),\n ...this._radiusHair.label,\n ...label,\n textStyle: {\n ...this._radiusHair.label?.textStyle,\n textAlign: orient.align,\n textBaseline: orient.baseline\n },\n zIndex: this.labelZIndex\n };\n this._updateCrosshairLabel(this._radiusLabelCrosshair, labelAttrs, label => {\n label.name = 'crosshair-radius-label';\n this._radiusLabelCrosshair = label;\n });\n } else {\n this._radiusLabelCrosshair && this._radiusLabelCrosshair.hideAll();\n }\n }\n }\n\n protected _parseFieldInfo() {\n const { categoryField, valueField } = this._spec as IPolarCrosshairSpec;\n if (categoryField && categoryField.visible) {\n this._angleHair = this._parseField(categoryField, 'categoryField');\n }\n if (valueField && valueField.visible) {\n this._radiusHair = this._parseField(valueField, 'valueField');\n this._radiusHair.smooth = valueField?.line?.smooth;\n }\n }\n\n private _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void) {\n // 文本\n const container = this.getContainer();\n if (label) {\n label.setAttributes(labelAttrs);\n } else {\n label = new Tag(labelAttrs);\n container?.add(label as unknown as INode);\n callback(label);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [\n this._radiusCrosshair,\n this._radiusLabelCrosshair,\n this._angleCrosshair,\n this._angleLabelCrosshair\n ] as unknown as IGroup[];\n }\n}\n\nexport const registerPolarCrossHair = () => {\n Factory.registerComponent(PolarCrossHair.type, PolarCrossHair);\n};\n","import { isArray, last } from '@visactor/vutils';\nimport { array, isNil } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\n\nexport interface IDataFilterWithNewDomainOption {\n getNewDomain: () => any[];\n isContinuous: () => boolean;\n field: () => string;\n}\n\nexport const lockStatisticsFilter = (\n statisticsData: any,\n op: IDataFilterWithNewDomainOption & {\n originalFields: () => Record;\n }\n) => {\n const { getNewDomain, isContinuous, field, originalFields } = op;\n\n const datumField = field();\n const newDomain = getNewDomain();\n if (isNil(newDomain) || isNil(datumField)) {\n return statisticsData;\n }\n const fields = originalFields();\n const realField = isArray(datumField) ? datumField[0] : datumField;\n\n if (\n statisticsData[realField] &&\n fields &&\n fields[realField] &&\n fields[realField].lockStatisticsByDomain &&\n !isContinuous()\n ) {\n statisticsData[realField].values = newDomain;\n }\n\n return statisticsData;\n};\n\n/**\n * 保证数据筛选的结果全都在坐标轴的新domain范围中,防止出现point数据因为超出domain范围而绘制在原点的情况\n */\nexport const dataFilterWithNewDomain = (data: Array, op: IDataFilterWithNewDomainOption) => {\n const { getNewDomain, isContinuous, field } = op;\n const datumField = field();\n const newDomain = getNewDomain();\n if (isNil(newDomain) || isNil(datumField)) {\n return data;\n }\n if (newDomain.length === 0) {\n return [];\n }\n\n // 使用map代替indexOf查找,提升性能\n const domainMap = {};\n newDomain.forEach(d => {\n if (!domainMap[d]) {\n domainMap[d] = 1;\n }\n });\n\n let filter = null;\n if (isContinuous()) {\n filter = (d: any) => {\n let flag = false;\n array(datumField).every(field => {\n if (d[field] >= newDomain[0] && d[field] <= last(newDomain)) {\n flag = true;\n }\n return;\n });\n return flag;\n };\n } else {\n filter = (d: any) => {\n let flag = false;\n array(datumField).every(field => {\n // 这里d[f] + ''的原因是:数据是number类型的,但轴声明为band轴,domain会强制将number => string,所以filter的时候要将data中的number => string\n if (domainMap[d[field] + ''] || domainMap[d[field]]) {\n flag = true;\n }\n return;\n });\n return flag;\n };\n }\n\n return data.filter(filter);\n};\n\nexport interface IDataFilterComputeDomainOption {\n input: {\n dataCollection: any[];\n stateFields: string[];\n valueFields: string[];\n method: 'sum'; // todo: 也许可以提供多种数据统计方法 @chensiji\n };\n output: {\n stateField: string;\n valueField: string;\n };\n}\n\nexport const dataFilterComputeDomain = (data: Array, op: IDataFilterComputeDomainOption) => {\n const { stateFields, valueFields, dataCollection } = op.input;\n const { stateField, valueField } = op.output;\n const resultObj = {};\n const resultData: any[] = [];\n\n dataCollection.forEach((dv: DataView, i) => {\n if (isNil(stateFields[i])) {\n return;\n }\n // 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果)\n const stateFieldInfo = dv.getFields()?.[stateFields[i]];\n if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) {\n stateFieldInfo.domain.forEach((d: any) => {\n resultObj[d] = 0;\n });\n }\n dv.latestData.forEach((d: any) => {\n // 针对rangeColumn等xField为数组形式的图表,需要将xField的所有value都记录下来\n array(stateFields[i]).forEach(state => {\n if (!isNil(d[state])) {\n if (isNil(resultObj[d[state]])) {\n resultObj[d[state]] = 0;\n }\n if (!isNil(valueFields[i])) {\n // 传进来的d[yFields[i]]可能是stringnumber\n // 传进来的d[yFields[i]]可能是普通的字符串,这时计数按1计算(其实相当于计算数据条数)\n resultObj[d[state]] += isNaN(parseFloat(d[valueFields[i]])) ? 1 : parseFloat(d[valueFields[i]]);\n }\n }\n });\n });\n });\n Object.keys(resultObj).forEach((d, i) => {\n const res = { [stateField]: d };\n\n if (valueField) {\n res[valueField] = resultObj[d];\n }\n\n resultData.push(res);\n });\n\n return resultData;\n};\n","import type { ICartesianSeries, IPolarSeries, ISeries } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { eachSeries } from '../../util/model';\n// eslint-disable-next-line no-duplicate-imports\nimport { BaseComponent } from '../base/base-component';\nimport type { IEffect, IModelInitOption } from '../../model/interface';\nimport { ComponentTypeEnum, type IComponent, type IComponentOption } from '../interface';\nimport { dataFilterComputeDomain, dataFilterWithNewDomain, lockStatisticsFilter } from './util';\nimport type { AdaptiveSpec, ILayoutRect, ILayoutType, IOrientType, IRect, StringOrNumber } from '../../typings';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../../data/register';\nimport { BandScale, isContinuous, isDiscrete } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBandLikeScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { Direction } from '../../typings/space';\nimport type { CartesianAxis, ICartesianBandAxisSpec } from '../axis/cartesian';\nimport { getDirectionByOrient, getOrient } from '../axis/cartesian/util/common';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n mixin,\n clamp,\n isNil,\n merge,\n isEqual,\n isValid,\n array,\n minInArray,\n maxInArray,\n abs,\n last\n} from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IFilterMode } from './interface';\nimport type {\n IDataFilterComponent,\n IDataFilterComponentSpec,\n IRoamDragSpec,\n IRoamScrollSpec,\n IRoamZoomSpec\n} from './interface';\nimport { dataViewParser, DataView } from '@visactor/vdataset';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport type { BaseEventParams } from '../../event/interface';\nimport type { IZoomable } from '../../interaction/zoom/zoomable';\n// eslint-disable-next-line no-duplicate-imports\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport type { AbstractComponent, DataZoom } from '@visactor/vrender-components';\nimport type { IDelayType } from '../../typings/event';\nimport { TransformLevel } from '../../data/initialize';\nimport type { IDataZoomSpec } from './data-zoom/interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { IGroupMark } from '../../mark/interface/mark';\n\nexport abstract class DataFilterBaseComponent\n extends BaseComponent>\n implements IDataFilterComponent\n{\n layoutType: ILayoutType | 'none' = 'none';\n\n protected _component: AbstractComponent;\n\n protected _orient: IOrientType = 'left';\n protected _isHorizontal: boolean;\n\n // 是否为自动模式\n protected _auto?: boolean;\n protected _fixedBandSize?: number;\n protected _cacheRect?: ILayoutRect;\n protected _cacheVisibility?: boolean = undefined;\n protected _dataUpdating: boolean = false;\n\n // 数据\n protected _stateScale: IBaseScale;\n\n protected _relatedAxisComponent!: IComponent;\n protected _originalStateFields: Record;\n\n // 与系列的关联关系\n // 优先级:id > index\n // 最终结果:series & region取交集\n protected _seriesUserId?: StringOrNumber[];\n protected _seriesIndex?: number[];\n protected _regionUserId!: string[];\n protected _regionIndex!: number[];\n protected _newDomain: any[];\n\n // 起点数据\n protected _startValue!: number | string;\n // 终点数据\n protected _endValue!: number | string;\n // 开始值,百分比值,0 - 1\n protected _start!: number;\n // 结束值,百分比值,0 - 1\n protected _end!: number;\n // 最小窗口范围\n protected _minSpan!: number;\n // 最大窗口范围\n protected _maxSpan!: number;\n // 窗口范围缓存\n protected _spanCache!: number;\n protected _shouldChange: boolean = true;\n\n protected _domainCache!: any;\n\n protected _field!: string | undefined;\n protected _stateField: string = 'x';\n protected _valueField?: string;\n\n protected _width!: number;\n protected _height!: number;\n\n protected _filterMode!: IFilterMode;\n\n protected _activeRoam: boolean = true;\n protected _zoomAttr: IRoamZoomSpec = {\n enable: true,\n rate: 1,\n focus: true\n };\n protected _dragAttr: IRoamDragSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n protected _scrollAttr: IRoamScrollSpec = {\n enable: true,\n rate: 1,\n reverse: true\n };\n\n get relatedAxisComponent() {\n return this._relatedAxisComponent;\n }\n\n /**\n * 外部可以通过此方法强制改变datazoom的start和end,达到聚焦定位的效果\n * @param start datazoom起点所在的相对位置\n * @param end datazoom终点所在的相对位置\n * @returns\n */\n setStartAndEnd(\n start: number | string,\n end: number | string,\n rangeMode: ['percent' | 'value', 'percent' | 'value'] = ['percent', 'percent']\n ) {\n const [startMode = 'percent', endMode = 'percent'] = rangeMode;\n\n const startPercent = (startMode === 'percent' ? start : this.dataToStatePoint(start)) as number;\n const endPercent = (endMode === 'percent' ? end : this.dataToStatePoint(end)) as number;\n\n this._handleChange(startPercent, endPercent, true);\n }\n\n enableInteraction() {\n this._activeRoam = true;\n }\n disableInteraction() {\n this._activeRoam = false;\n }\n zoomIn(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 1.2, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n zoomOut(location?: { x: number; y: number }) {\n this._handleChartZoom({\n zoomDelta: 0.8, // 经验值\n zoomX: location?.x,\n zoomY: location?.y\n });\n }\n\n protected abstract _createOrUpdateComponent(): void;\n protected abstract _computeWidth(): number;\n protected abstract _computeHeight(): number;\n protected abstract _handleDataCollectionChange(): void;\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n const zoomLock = this._spec?.zoomLock ?? false;\n if (\n zoomLock ||\n // 拖拽两端的handler, 而非拖拽中间handler\n (end - start !== this._spanCache &&\n // 拖拽后超出限制范围\n (end - start < this._minSpan || end - start > this._maxSpan))\n ) {\n this._shouldChange = false;\n } else {\n this._shouldChange = true;\n this._spanCache = end - start;\n }\n }\n\n protected _isReverse() {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (!axis) {\n return false;\n }\n const axisScale = axis.getScale() as IBandLikeScale;\n return axisScale.range()[0] > axisScale.range()[1] && (!axis.getInverse() || this._isHorizontal);\n }\n\n protected _updateRangeFactor(tag?: 'startHandler' | 'endHandler') {\n // 轴的range有时是相反的\n // 比如相同的region范围, 有的场景range为[0, 500], 有的场景range为[500, 0]\n // 而datazoom/scrollbar的range是根据布局强制转化为[0, 500]\n // 所以这里在转换时进行判断并做转置, 有待优化\n // 轴在inverse时,也要做转置处理\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisScale = axis.getScale() as IBandLikeScale;\n const reverse = this._isReverse();\n const newRangeFactor: [number, number] = reverse ? [1 - this._end, 1 - this._start] : [this._start, this._end];\n\n if (reverse) {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n case 'endHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n default:\n axisScale.rangeFactorStart(newRangeFactor[0], true);\n axisScale.rangeFactorEnd(newRangeFactor[1]); // end 保证为准确值\n }\n } else {\n switch (tag) {\n case 'startHandler':\n axisScale.rangeFactorStart(newRangeFactor[0]);\n break;\n case 'endHandler':\n axisScale.rangeFactorEnd(newRangeFactor[1]);\n break;\n default:\n axisScale.rangeFactorEnd(newRangeFactor[1], true);\n axisScale.rangeFactorStart(newRangeFactor[0]); // start 保证为准确值\n }\n }\n\n const newFactor = axisScale.rangeFactor();\n if (newFactor) {\n this._start = reverse ? 1 - newFactor[1] : newFactor[0];\n this._end = reverse ? 1 - newFactor[0] : newFactor[1];\n } else {\n this._start = 0;\n this._end = 1;\n }\n }\n\n effect: IEffect = {\n onZoomChange: (tag?: 'startHandler' | 'endHandler') => {\n const axis = this._relatedAxisComponent as CartesianAxis;\n if (axis && this._filterMode === 'axis') {\n const axisScale = axis.getScale() as IBandLikeScale;\n const axisSpec = axis.getSpec() as ICartesianBandAxisSpec;\n // 判断是否允许自由更改轴 bandSize\n if (this._auto && this._getAxisBandSize(axisSpec) && (this._spec as IDataZoomSpec).ignoreBandSize) {\n axisScale.bandwidth('auto');\n axisScale.maxBandwidth('auto');\n axisScale.minBandwidth('auto');\n }\n\n this._updateRangeFactor(tag);\n if (this._auto) {\n (this._component as DataZoom)?.setStartAndEnd?.(this._start, this._end);\n }\n\n // 强制更新视图, 不管/component/axis/base-axis.ts computeData中的tickData判断\n axis.effect.scaleUpdate({\n value: 'force'\n });\n } else {\n eachSeries(\n this._regions,\n s => {\n s.getViewData()?.markRunning();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n eachSeries(\n this._regions,\n s => {\n s.reFilterViewData();\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n };\n\n protected _visible: boolean = true;\n get visible() {\n return this._visible;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._orient = getOrient(spec as any);\n this._isHorizontal = getDirectionByOrient(this._orient) === Direction.horizontal;\n }\n\n /**\n * the hook after this component is created\n */\n created() {\n super.created();\n // related axis\n this._setAxisFromSpec();\n // related regions\n this._setRegionsFromSpec();\n this._initEvent();\n // data for background\n this._initData();\n // init the state scale\n this._initStateScale();\n // set state: _start, _end, _startValue, _endValue, _newDomain from spec\n this._setStateFromSpec();\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n protected _setAxisFromSpec() {\n if (isValid(this._spec.axisId)) {\n this._relatedAxisComponent = this._option.getComponentByUserId(this._spec.axisId);\n } else if (isValid(this._spec.axisIndex)) {\n this._relatedAxisComponent = this._option.getComponentByIndex('axes', this._spec.axisIndex);\n }\n\n // 如果用户没有配置关联轴 或 用户配置的关联轴和datazoom方向不一致\n // 则 使用与datazoom的orient相同的第一个axis作为关联轴\n if (isNil(this._spec.field) && !this._relatedAxisComponent) {\n const axes = this._option.getComponentsByKey('axes');\n const sameOrientAxis = axes.find((cm: any) => (cm as any)._orient === this._orient);\n\n if (sameOrientAxis) {\n this._relatedAxisComponent = sameOrientAxis;\n } else {\n const bandAxis = axes.find((cm: any) => !isContinuous((cm as any).getScale().type));\n\n this._relatedAxisComponent = bandAxis;\n }\n }\n if (this._relatedAxisComponent && this._filterMode === 'axis') {\n (this._relatedAxisComponent as CartesianAxis).autoIndentOnce = true;\n }\n }\n\n protected _setRegionsFromSpec() {\n // 从axis中获取关联的regions\n this._regions = this._relatedAxisComponent ? this._relatedAxisComponent.getRegions() : this._option.getAllRegions();\n // 默认使用关联轴的系列绑定关系\n const bindSeriesFilter = this._relatedAxisComponent ? this._relatedAxisComponent.getBindSeriesFilter?.() : null;\n if (isValid(bindSeriesFilter)) {\n isValid(bindSeriesFilter.userId) && (this._seriesUserId = array(bindSeriesFilter.userId));\n isValid(bindSeriesFilter.specIndex) && (this._seriesIndex = array(bindSeriesFilter.specIndex));\n }\n // spec中的系列绑定关系 取交集\n if (isValid(this._spec.seriesId)) {\n const specSeriesId = array(this._spec.seriesId);\n if (this._seriesUserId) {\n this._seriesUserId = this._seriesUserId.filter(s => specSeriesId.includes(s));\n } else {\n this._seriesUserId = specSeriesId;\n }\n }\n if (isValid(this._spec.seriesIndex)) {\n const specSeriesIndex = array(this._spec.seriesIndex);\n if (this._seriesIndex) {\n this._seriesIndex = this._seriesIndex.filter(s => specSeriesIndex.includes(s));\n } else {\n this._seriesIndex = specSeriesIndex;\n }\n }\n if (isValid(this._spec.regionIndex)) {\n const regionsFromSpec = this._option.getRegionsInIndex(array(this._spec.regionIndex));\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = this._regions.filter(r => regionsFromSpec.includes(r));\n return;\n }\n if (isValid(this._spec.regionId)) {\n const ids = array(this._spec.regionId);\n // 如果用户配置了region就取 axis关联 和 用户配置 的交集\n this._regions = ids.length ? this._regions.filter(r => ids.includes(r.id)) : [];\n return;\n }\n return;\n }\n\n onDataUpdate(): void {\n const domain = this._computeDomainOfStateScale(isContinuous(this._stateScale.type));\n\n this._stateScale.domain(domain, false);\n this._handleChange(this._start, this._end, true);\n // auto 模式下需要重新布局\n if (this._spec.auto && !isEqual(this._domainCache, domain)) {\n this._domainCache = domain;\n this._dataUpdating = true;\n this.getChart()?.setLayoutTag(true, null, false);\n }\n }\n\n protected _computeDomainOfStateScale(isContinuous?: boolean) {\n if ((this._spec as IDataZoomSpec).customDomain) {\n return (this._spec as IDataZoomSpec).customDomain;\n }\n\n const domain = this._data.getLatestData().map((d: any) => d[this._stateField]);\n\n if (isContinuous) {\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [-Infinity, Infinity];\n }\n\n return domain;\n }\n\n protected _initEvent() {\n this._initCommonEvent();\n }\n\n protected _initData() {\n const dataCollection: any[] = [];\n const stateFields: string[] = [];\n const valueFields: string[] = [];\n\n if (this._relatedAxisComponent) {\n const originalStateFields = {};\n eachSeries(\n this._regions,\n s => {\n // 如果副轴的类型是time或band,则无法进行数据统计\n const xAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getXAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).angleAxisHelper\n : null;\n const yAxisHelper =\n s.coordinate === 'cartesian'\n ? (s as ICartesianSeries).getYAxisHelper()\n : s.coordinate === 'polar'\n ? (s as IPolarSeries).radiusAxisHelper\n : null;\n if (!xAxisHelper || !yAxisHelper) {\n return;\n }\n const stateAxisHelper =\n xAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? xAxisHelper\n : yAxisHelper.getAxisId() === this._relatedAxisComponent.id\n ? yAxisHelper\n : this._isHorizontal\n ? xAxisHelper\n : yAxisHelper;\n const valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper;\n const isValidateValueAxis = isContinuous(valueAxisHelper.getScale(0).type);\n const isValidateStateAxis = isContinuous(stateAxisHelper.getScale(0).type);\n\n dataCollection.push(s.getRawData());\n // 这里获取原始的spec中的xField和yField,而非经过stack处理后的fieldX和fieldY,原因如下:\n // 1. dataFilterComputeDomain处理时拿到的viewData中没有__VCHART_STACK_START等属性,也就是还没处理\n // 2. datazoom计算的是原始的value值,如果要根据stack后的数据来算,则需要__VCHART_STACK_END - __VCHART_STACK_START\n const seriesSpec = s.getSpec();\n\n const xField =\n s.coordinate === 'cartesian'\n ? array(seriesSpec.xField)\n : array(seriesSpec.angleField ?? seriesSpec.categoryField);\n const yField =\n s.coordinate === 'cartesian'\n ? array(seriesSpec.yField)\n : array(seriesSpec.radiusField ?? seriesSpec.valueField);\n\n originalStateFields[s.id] =\n s.type === 'link' ? ['from_xField'] : stateAxisHelper === xAxisHelper ? xField : yField;\n\n if (isValidateStateAxis) {\n stateFields.push(originalStateFields[s.id]);\n } else {\n stateFields.push(originalStateFields[s.id][0]);\n }\n\n if (this._valueField) {\n const valueField = s.type === 'link' ? ['from_yField'] : valueAxisHelper === xAxisHelper ? xField : yField;\n if (isValidateValueAxis) {\n valueFields.push(...valueField);\n }\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n\n this._originalStateFields = originalStateFields;\n } else {\n eachSeries(\n this._regions,\n s => {\n dataCollection.push(s.getRawData());\n\n stateFields.push(this._field);\n if (this._valueField) {\n valueFields.push(this._spec.valueField);\n }\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n const { dataSet } = this._option;\n registerDataSetInstanceParser(dataSet, 'dataview', dataViewParser);\n registerDataSetInstanceTransform(dataSet, 'dataFilterComputeDomain', dataFilterComputeDomain);\n const data = new DataView(dataSet, { name: `${this.type}_${this.id}_data` });\n data.transform(\n {\n type: 'dataFilterComputeDomain',\n options: {\n input: {\n dataCollection: dataCollection,\n stateFields,\n valueFields\n },\n output: {\n stateField: this._stateField,\n valueField: this._valueField\n }\n }\n },\n false\n );\n\n this._data = new CompilableData(this._option, data);\n data.reRunAllTransform();\n dataSet.multipleDataViewAddListener(dataCollection, 'change', this._handleDataCollectionChange.bind(this));\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n // interaction相关\n if (this._spec.roamZoom === true || this._spec.roamZoom) {\n this._zoomAttr = merge({}, this._zoomAttr, this._spec.roamZoom);\n } else {\n this._zoomAttr.enable = false;\n }\n\n if (this._spec.roamDrag === true || this._spec.roamDrag) {\n this._dragAttr = merge({}, this._dragAttr, this._spec.roamDrag);\n } else {\n this._dragAttr.enable = false;\n }\n\n if (this._spec.roamScroll === true || this._spec.roamScroll) {\n this._scrollAttr = merge({}, this._scrollAttr, this._spec.roamScroll);\n } else {\n this._scrollAttr.enable = false;\n }\n\n // style相关\n this._field = this._spec.field;\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n this._visible = this._spec.visible ?? true;\n }\n\n protected _statePointToData(state: number) {\n const scale = this._stateScale;\n const domain = scale.domain();\n\n // continuous scale: 本来可以用scale invert,但scale invert在大数据场景下性能不太好,所以这里自行计算\n if (isContinuous(scale.type)) {\n if (this._isReverse()) {\n return domain[0] + (last(domain) - domain[0]) * (1 - state);\n }\n return domain[0] + (last(domain) - domain[0]) * state;\n }\n\n // discete scale: 根据bandSize计算不准确, bandSize不是最新的, 导致index计算错误, 所以仍然使用invert\n let range = scale.range();\n if (this._isReverse()) {\n range = range.slice().reverse();\n }\n const posInRange: number = range[0] + (last(range) - range[0]) * state;\n // const bandSize = (scale as BandScale).bandwidth();\n // const domainIndex = Math.min(Math.max(0, Math.floor(posInRange / bandSize)), domain.length - 1);\n // return domain[domainIndex];\n return scale.invert(posInRange);\n }\n\n dataToStatePoint(data: number | string) {\n const scale = this._stateScale;\n const pos = scale.scale(data);\n let range = scale.range();\n\n if (!this._isHorizontal && isContinuous(scale.type)) {\n range = range.slice().reverse();\n }\n\n return (pos - range[0]) / (last(range) - range[0]);\n }\n\n protected _modeCheck(statePoint: 'start' | 'end', mode: string): any {\n if (statePoint === 'start') {\n return (mode === 'percent' && isValid(this._spec.start)) || (mode === 'value' && isValid(this._spec.startValue));\n }\n return (mode === 'percent' && isValid(this._spec.end)) || (mode === 'value' && isValid(this._spec.endValue));\n }\n\n protected _setStateFromSpec() {\n this._auto = !!this._spec.auto;\n let start;\n let end;\n if (this._spec.rangeMode) {\n const [startMode, endMode] = this._spec.rangeMode;\n // 只有mode与配置相符时,才会生效\n // 比如rangeMode为['value', 'percent'],那么start为dataValue, end为[0, 1]\n if (this._modeCheck('start', startMode) && this._modeCheck('end', endMode)) {\n start = startMode === 'percent' ? this._spec.start : this.dataToStatePoint(this._spec.startValue);\n end = endMode === 'percent' ? this._spec.end : this.dataToStatePoint(this._spec.endValue);\n }\n } else {\n start = this._spec.start\n ? this._spec.start\n : this._spec.startValue\n ? this.dataToStatePoint(this._spec.startValue)\n : 0;\n end = this._spec.end ? this._spec.end : this._spec.endValue ? this.dataToStatePoint(this._spec.endValue) : 1;\n }\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n this._start = start;\n this._end = end;\n this._minSpan = this._spec.minSpan ?? 0;\n this._maxSpan = this._spec.maxSpan ?? 1;\n if (isContinuous(this._stateScale.type) && this._stateScale.domain()[0] !== last(this._stateScale.domain())) {\n if (this._spec.minValueSpan) {\n this._minSpan = this._spec.minValueSpan / (last(this._stateScale.domain()) - this._stateScale.domain()[0]);\n }\n if (this._spec.maxValueSpan) {\n this._maxSpan = this._spec.maxValueSpan / (last(this._stateScale.domain()) - this._stateScale.domain()[0]);\n }\n }\n this._minSpan = Math.max(0, this._minSpan);\n this._maxSpan = Math.min(this._maxSpan, 1);\n\n // eslint-disable-next-line max-len\n if ((!this._relatedAxisComponent || this._filterMode !== 'axis') && (this._start !== 0 || this._end !== 1)) {\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n }\n }\n\n private _parseFieldOfSeries(s: ISeries) {\n return this._originalStateFields?.[s.id];\n }\n\n protected _initStateScale() {\n const defaultRange = [0, 1];\n\n if (this._relatedAxisComponent) {\n const scale = (this._relatedAxisComponent as CartesianAxis).getScale();\n const isContinuousScale = isContinuous(scale.type);\n const domain = this._computeDomainOfStateScale(isContinuousScale);\n\n this._stateScale = scale.clone();\n if (isContinuousScale) {\n const domainNum = domain.map((n: any) => n * 1);\n this._stateScale\n .domain(domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : [0, 1], true)\n .range(defaultRange);\n } else {\n this._stateScale.domain(domain, true).range(defaultRange);\n }\n } else {\n this._stateScale = new BandScale();\n this._stateScale.domain(this._computeDomainOfStateScale(), true).range(defaultRange);\n }\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n // 添加 transform\n this._addTransformToSeries();\n // 增加datazoom 数据统计\n // 只有在轴没有被设置数据时才有用\n // this.addZoomStatistics();\n\n if (this._start !== 0 || this._end !== 1) {\n this.effect.onZoomChange();\n }\n }\n\n protected _addTransformToSeries() {\n if (!this._relatedAxisComponent || this._filterMode !== 'axis') {\n registerDataSetInstanceTransform(this._option.dataSet, 'dataFilterWithNewDomain', dataFilterWithNewDomain);\n registerDataSetInstanceTransform(this._option.dataSet, 'lockStatisticsFilter', lockStatisticsFilter);\n\n eachSeries(\n this._regions,\n s => {\n s.getViewDataStatistics().transform(\n {\n type: 'lockStatisticsFilter',\n options: {\n originalFields: () => {\n return s.getViewDataStatistics().getFields();\n },\n getNewDomain: () => this._newDomain,\n field: () => {\n return this._field ?? this._parseFieldOfSeries(s);\n },\n isContinuous: () => isContinuous(this._stateScale.type)\n },\n level: 1\n },\n false\n );\n\n s.addViewDataFilter({\n type: 'dataFilterWithNewDomain',\n options: {\n getNewDomain: () => this._newDomain,\n field: () => {\n return this._field ?? this._parseFieldOfSeries(s);\n },\n isContinuous: () => isContinuous(this._stateScale.type)\n },\n level: TransformLevel.dataZoomFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n }\n\n /** LifeCycle API**/\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: AdaptiveSpec, prevSpec: AdaptiveSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n\n return result;\n }\n\n reInit(spec?: AdaptiveSpec) {\n super.reInit(spec);\n\n this._marks.forEach(g => {\n (g).getMarks().forEach(m => {\n this.initMarkStyleWithSpec(m, this._spec[m.name]);\n });\n });\n }\n\n changeRegions() {\n // do nothing\n }\n protected update(ctx: IComponentOption) {\n // do nothing\n }\n protected resize(ctx: IComponentOption) {\n // do nothing\n }\n\n protected _parseDomainFromState(startValue: number | string, endValue: number | string) {\n if (isContinuous(this._stateScale.type)) {\n return [Math.min(endValue as number, startValue as number), Math.max(endValue as number, startValue as number)];\n }\n const allDomain = this._stateScale.domain();\n const startIndex = allDomain.indexOf(startValue);\n const endIndex = allDomain.indexOf(endValue);\n return allDomain.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex) + 1);\n }\n\n protected _handleStateChange = (startValue: number, endValue: number, tag?: string) => {\n this._startValue = startValue;\n this._endValue = endValue;\n\n this._newDomain = this._parseDomainFromState(this._startValue, this._endValue);\n\n this.effect.onZoomChange?.(tag);\n return true;\n };\n\n protected _handleChartZoom = (params: { zoomDelta: number; zoomX?: number; zoomY?: number }) => {\n if (!this._activeRoam) {\n return;\n }\n\n const { zoomDelta, zoomX, zoomY } = params;\n const { x, y } = this._regions[0].getLayoutStartPoint();\n const { width, height } = this._regions[0].getLayoutRect();\n\n const delta = Math.abs(this._start - this._end);\n const zoomRate = (this._spec.roamZoom as IRoamZoomSpec)?.rate ?? 1;\n // zoomDelta > 1表示放大, zoomDelta < 1表示缩小\n if (delta >= 1 && zoomDelta < 1) {\n return;\n }\n if (delta <= 0.01 && zoomDelta > 1) {\n return;\n }\n const focusLoc = this._isHorizontal ? zoomX : zoomY;\n const totalValue = delta * (zoomDelta - 1) * zoomRate;\n let startValue = totalValue / 2;\n let endValue = totalValue / 2;\n if (focusLoc) {\n const startLoc = this._isHorizontal ? x : y;\n const endLoc = this._isHorizontal ? width : height;\n startValue = (Math.abs(startLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n endValue = (Math.abs(endLoc - focusLoc) / Math.abs(endLoc - startLoc)) * totalValue;\n }\n const start = clamp(this._start + startValue, 0, 1);\n const end = clamp(this._end - endValue, 0, 1);\n\n this._handleChange(Math.min(start, end), Math.max(start, end), true);\n };\n\n protected _handleChartScroll = (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return false;\n }\n const { scrollX, scrollY } = params;\n let value = this._isHorizontal ? scrollX : scrollY;\n // 判断这次是否应该要滚动,最少\n const active = this._isHorizontal ? abs(scrollX / scrollY) >= 0.5 : abs(scrollY / scrollX) >= 0.5;\n if (!this._scrollAttr.reverse) {\n value = -value;\n }\n\n if (active) {\n this._handleChartMove(value, this._scrollAttr.rate ?? 1);\n }\n\n // 判断是否滚动到最顶部或最底部\n // 如果滚动到最顶部或最底部,则不应该stopBubble\n const hasChange = this._start !== 0 && this._end !== 1;\n\n return active && hasChange;\n };\n\n protected _handleChartDrag = (delta: [number, number], e: BaseEventParams['event']) => {\n if (!this._activeRoam) {\n return;\n }\n const [dx, dy] = delta;\n let value = this._isHorizontal ? dx : dy;\n if (this._dragAttr.reverse) {\n value = -value;\n }\n\n this._handleChartMove(value, this._dragAttr.rate ?? 1);\n };\n\n protected _handleChartMove = (value: number, rate: number) => {\n const totalValue = this._isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n if (Math.abs(value) >= 1e-6) {\n if (value > 0 && this._end < 1) {\n const moveDelta = Math.min(1 - this._end, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n } else if (value < 0 && this._start > 0) {\n const moveDelta = Math.max(-this._start, value / totalValue) * rate;\n this._handleChange(this._start + moveDelta, this._end + moveDelta, true);\n }\n }\n return false;\n };\n\n protected _initCommonEvent() {\n const delayType: IDelayType = this._spec?.delayType ?? 'throttle';\n const delayTime = isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0;\n const realTime = this._spec?.realTime ?? true;\n const option = { delayType, delayTime, realTime };\n if (this._zoomAttr.enable) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom, option);\n }\n if (this._scrollAttr.enable) {\n (this as unknown as IZoomable).initScrollEventOfRegions(this._regions, null, this._handleChartScroll, option);\n }\n if (this._dragAttr.enable) {\n (this as unknown as IZoomable).initDragEventOfRegions(this._regions, null, this._handleChartDrag, option);\n }\n }\n\n updateLayoutAttribute(): void {\n // create or update component\n if (this._visible) {\n this._createOrUpdateComponent();\n }\n super.updateLayoutAttribute();\n }\n\n protected _autoVisible(isShown: boolean) {\n if (!this._auto) {\n return;\n }\n if (isShown) {\n this.show();\n } else {\n this.hide();\n }\n const sizeKey = this._isHorizontal ? 'height' : 'width';\n this.layout.setLayoutRect(\n {\n [sizeKey]: isShown ? this[`_${sizeKey}`] : 0\n },\n {\n [sizeKey]: AttributeLevel.Built_In\n }\n );\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n const isShown = this._autoUpdate(layoutRect);\n this._autoVisible(isShown);\n this._dataUpdating = false;\n }\n\n onLayoutEnd(ctx: any): void {\n // 布局结束后, start和end会发生变化, 因此需要再次更新visible\n const isShown = !(this._start === 0 && this._end === 1);\n this._autoVisible(isShown);\n super.onLayoutEnd(ctx);\n }\n\n /**\n * bounds预计算\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect): IBoundsLike {\n const result: IBoundsLike = { x1: this.getLayoutStartPoint().x, y1: this.getLayoutStartPoint().y, x2: 0, y2: 0 };\n\n if (this._isHorizontal) {\n result.y2 = result.y1 + this._height;\n result.x2 = result.x1 + rect.width;\n } else {\n result.x2 = result.x1 + this._width;\n result.y2 = result.y1 + rect.height;\n }\n return result;\n }\n\n hide() {\n this._component?.hideAll();\n }\n\n show() {\n this._component?.showAll();\n }\n\n protected _getAxisBandSize(axisSpec?: ICartesianBandAxisSpec) {\n const bandSize = axisSpec?.bandSize;\n const maxBandSize = axisSpec?.maxBandSize;\n const minBandSize = axisSpec?.minBandSize;\n if (bandSize || minBandSize || maxBandSize) {\n return { bandSize, maxBandSize, minBandSize };\n }\n return undefined;\n }\n\n protected _autoUpdate(rect?: ILayoutRect): boolean {\n if (!this._auto) {\n this._cacheVisibility = undefined;\n return true;\n }\n\n const axis = this._relatedAxisComponent as CartesianAxis;\n const axisSpec = axis?.getSpec() as ICartesianBandAxisSpec | undefined;\n const axisScale = axis?.getScale() as IBandLikeScale;\n const bandSizeResult = this._getAxisBandSize(axisSpec);\n\n if (\n !this._dataUpdating &&\n isDiscrete(axisScale.type) &&\n rect?.height === this._cacheRect?.height &&\n rect?.width === this._cacheRect?.width &&\n this._fixedBandSize === bandSizeResult?.bandSize\n ) {\n return this._cacheVisibility;\n }\n\n let isShown = true;\n if (this._isHorizontal && rect?.width !== this._cacheRect?.width) {\n axisScale.range(axis.getInverse() ? [rect.width, 0] : [0, rect.width]);\n } else if (rect?.height !== this._cacheRect?.height) {\n axisScale.range(axis.getInverse() ? [0, rect.height] : [rect.height, 0]);\n }\n\n this._cacheRect = {\n width: rect?.width,\n height: rect?.height\n };\n this._fixedBandSize = bandSizeResult?.bandSize;\n\n if (isDiscrete(axisScale.type)) {\n if (bandSizeResult && (this._start || this._end)) {\n if (this.type === ComponentTypeEnum.scrollBar) {\n this._start = 0;\n this._end = 1;\n }\n this._updateRangeFactor();\n }\n const [start, end] = axisScale.rangeFactor() ?? [];\n if (isNil(start) && isNil(end)) {\n isShown = false;\n } else {\n isShown = !(start === 0 && end === 1);\n }\n } else {\n const [start, end] = axisScale.rangeFactor() ?? [this._start, this._end];\n isShown = !(start === 0 && end === 1);\n }\n this.setStartAndEnd(this._start, this._end);\n this._cacheVisibility = isShown;\n return isShown;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nmixin(DataFilterBaseComponent, Zoomable);\n","/*\n 优化自simplify-js: https://github.com/mourner/simplify-js\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nimport type { IPointLike } from '@visactor/vutils';\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: IPointLike[], sqTolerance: number): IPointLike[] {\n let lastX = points[0].x;\n let lastY = points[0].y;\n let deltaX;\n let deltaY;\n const newPoints: IPointLike[] = [points[0]];\n for (let i = 1, len = points.length; i < len; i++) {\n deltaX = points[i].x - lastX;\n deltaY = points[i].y - lastY;\n if (deltaX * deltaX + deltaY * deltaY > sqTolerance) {\n lastX = points[i].x;\n lastY = points[i].y;\n newPoints.push(points[i]);\n }\n }\n if (points[points.length - 1].x !== lastX || points[points.length - 1].y !== lastY) {\n newPoints.push(points[points.length - 1]);\n }\n return newPoints;\n}\nfunction simplifyDPStep(\n points: IPointLike[],\n startIdx: number,\n endIdx: number,\n sqTolerance: number,\n simplified: IPointLike[]\n) {\n let maxSqDist = sqTolerance;\n let nextIdx = startIdx;\n const startX = points[startIdx].x;\n const startY = points[startIdx].y;\n const endX = points[endIdx].x;\n const endY = points[endIdx].y;\n const vecX2 = endX - startX;\n const vecY2 = endY - startY;\n const sqLength = vecX2 * vecX2 + vecY2 * vecY2;\n let area;\n let sqArea;\n let sqDistance;\n // 计算距离startIdx到endIdx最长的distance\n let vecX1;\n let vecY1;\n for (let i = startIdx + 1, len = endIdx - 1; i < len; i++) {\n vecX1 = points[i].x - startX;\n vecY1 = points[i].y - startY;\n // axb = x1y2 - x2y1\n area = vecX1 * vecY2 - vecX2 * vecY1;\n sqArea = area * area;\n sqDistance = sqArea / sqLength;\n if (sqDistance > maxSqDist) {\n maxSqDist = sqDistance;\n nextIdx = i;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (nextIdx - startIdx > 2) {\n simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified);\n }\n simplified.push(points[nextIdx], points[nextIdx + 1]);\n if (endIdx - nextIdx > 2) {\n simplifyDPStep(points, nextIdx + 1, endIdx, sqTolerance, simplified);\n }\n }\n}\n// simplification using Ramer-Douglas-Peucker algorithm\n// https://karthaus.nl/rdp/\nfunction simplifyDouglasPeucker(points: IPointLike[], sqTolerance: number): IPointLike[] {\n const lastIdx = points.length - 1;\n const simplified = [points[0]];\n simplifyDPStep(points, 0, lastIdx, sqTolerance, simplified);\n simplified.push(points[lastIdx]);\n return simplified;\n}\n// both algorithms combined for awesome performance\nexport function flatten_simplify(points: IPointLike[], tolerance: number, highestQuality: boolean): IPointLike[] {\n if (points.length <= 10) {\n return points;\n }\n const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n // 暂时屏蔽 Douglas-Peucker 算法, 因为在极端情况下不会有点被删除, 导致性能问题\n // points = simplifyDouglasPeucker(points, sqTolerance);\n return points;\n}\n","export const DEFAULT_HANDLER_PATH =\n // eslint-disable-next-line max-len\n 'M -0.0544 0.25 C -0.0742 0.25 -0.0901 0.234 -0.0901 0.2143 L -0.0901 -0.1786 C -0.0901 -0.1983 -0.0742 -0.2143 -0.0544 -0.2143 L -0.0187 -0.2143 L -0.0187 -0.5 L 0.017 -0.5 L 0.017 -0.2143 L 0.0527 -0.2143 C 0.0724 -0.2143 0.0884 -0.1983 0.0884 -0.1786 L 0.0884 0.2143 C 0.0884 0.234 0.0724 0.25 0.0527 0.25 L 0.017 0.25 L 0.017 0.5 L -0.0187 0.5 L -0.0187 0.25 L -0.0544 0.25 Z M -0.0187 -0.1429 L -0.0544 -0.1429 L -0.0544 0.1786 L -0.0187 0.1786 L -0.0187 -0.1429 Z M 0.0527 -0.1429 L 0.017 -0.1429 L 0.017 0.1786 L 0.0527 0.1786 L 0.0527 -0.1429 Z';\nexport const DEFAULT_DATA_ZOOM_ATTRIBUTES = {\n orient: 'bottom',\n showDetail: 'auto',\n brushSelect: true,\n zoomLock: false,\n minSpan: 0,\n maxSpan: 1,\n delayType: 'throttle',\n delayTime: 0,\n realTime: true,\n backgroundStyle: {\n fill: 'white',\n stroke: '#D1DBEE',\n lineWidth: 1,\n cornerRadius: 2\n },\n dragMaskStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2\n },\n backgroundChartStyle: {\n area: {\n visible: true,\n stroke: '#D1DBEE',\n lineWidth: 1,\n fill: '#F6F8FC'\n },\n line: {\n visible: true,\n stroke: '#D1DBEE',\n lineWidth: 1\n }\n },\n selectedBackgroundStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.5\n },\n selectedBackgroundChartStyle: {\n area: {\n visible: true,\n stroke: '#B0C8F9',\n lineWidth: 1,\n fill: '#fbb934'\n },\n line: {\n visible: true,\n stroke: '#fbb934',\n lineWidth: 1\n }\n },\n middleHandlerStyle: {\n visible: true,\n background: {\n size: 8,\n style: {\n fill: 'white',\n stroke: '#B0C8F9',\n cornerRadius: 2\n }\n },\n icon: {\n size: 6,\n fill: 'white',\n stroke: '#B0C8F9',\n symbolType:\n // eslint-disable-next-line max-len\n 'M 0.3 -0.5 C 0.41 -0.5 0.5 -0.41 0.5 -0.3 C 0.5 -0.3 0.5 0.3 0.5 0.3 C 0.5 0.41 0.41 0.5 0.3 0.5 C 0.3 0.5 -0.3 0.5 -0.3 0.5 C -0.41 0.5 -0.5 0.41 -0.5 0.3 C -0.5 0.3 -0.5 -0.3 -0.5 -0.3 C -0.5 -0.41 -0.41 -0.5 -0.3 -0.5 C -0.3 -0.5 0.3 -0.5 0.3 -0.5 Z',\n lineWidth: 0.5\n }\n },\n startHandlerStyle: {\n visible: true,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: 'white',\n stroke: '#B0C8F9',\n lineWidth: 0.5\n },\n endHandlerStyle: {\n visible: true,\n triggerMinSize: 0,\n symbolType: DEFAULT_HANDLER_PATH,\n fill: 'white',\n stroke: '#B0C8F9',\n lineWidth: 0.5\n },\n startTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: '#6F6F6F'\n }\n },\n endTextStyle: {\n padding: 4,\n textStyle: {\n fontSize: 10,\n fill: '#6F6F6F'\n }\n }\n};\n\nexport const DEFAULT_HANDLER_ATTR_MAP = {\n horizontal: {\n angle: 0,\n strokeBoundsBuffer: 0,\n boundsPadding: 2,\n pickMode: 'imprecise',\n cursor: 'ew-resize'\n },\n vertical: {\n angle: 90 * (Math.PI / 180),\n cursor: 'ns-resize',\n boundsPadding: 2,\n pickMode: 'imprecise',\n strokeBoundsBuffer: 0\n }\n};\n","import type {\n IAreaGraphicAttribute,\n ICurveType,\n IGroupGraphicAttribute,\n ILineGraphicAttribute,\n IRectGraphicAttribute,\n ISymbolGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { IDelayType, OrientType } from '../interface';\nimport type { TagAttributes } from '../tag/type';\n\nexport enum DataZoomActiveTag {\n startHandler = 'startHandler',\n endHandler = 'endHandler',\n middleHandler = 'middleHandler',\n background = 'background'\n}\n\nexport interface DataZoomAttributes extends IGroupGraphicAttribute {\n /**\n * DataZoom位置\n */\n position: IPointLike;\n /**\n * DataZoom 尺寸\n */\n size: {\n width: number;\n height: number;\n };\n /**\n * DataZoom方向\n * @default 'bottom'\n */\n orient?: OrientType;\n\n /**\n * 起点配置(比例):范围[0, 1]\n * @default 0\n */\n start?: number;\n\n /**\n * 终点配置(比例):范围[0, 1]\n * @default 1\n */\n end?: number;\n\n /**\n * 背景样式\n */\n backgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 起点手柄样式\n */\n startHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 中间手柄样式\n */\n middleHandlerStyle?: {\n /**\n * 是否显示\n * @default false\n */\n visible?: boolean;\n /**\n * 中间手柄的中间symbol样式\n */\n icon?: ISymbolGraphicAttribute;\n /**\n * 中间手柄的背景rect样式\n */\n background?: {\n style?: IRectGraphicAttribute;\n size?: number;\n };\n };\n\n /**\n * 终点手柄样式\n */\n endHandlerStyle?: {\n /**\n * 热区最小size\n * 取handler size 和 min size 的最大值\n */\n triggerMinSize?: number;\n } & ISymbolGraphicAttribute;\n\n /**\n * 起点文字样式\n */\n startTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 终点文字样式\n */\n endTextStyle?: {\n formatMethod?: (text: string | number) => (string | number) | (string | number)[];\n } & Partial;\n\n /**\n * 选中背景样式\n */\n selectedBackgroundStyle?: IRectGraphicAttribute;\n\n /**\n * 拖拽进行中的选中背景样式\n */\n dragMaskStyle?: IRectGraphicAttribute;\n\n /**\n * 背景图表样式\n */\n backgroundChartStyle?: {\n line?: {\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 选中的背景图表样式\n */\n selectedBackgroundChartStyle?: {\n line?: {\n /**\n * @default true\n */\n visible?: boolean;\n } & ILineGraphicAttribute;\n area?: {\n /**\n * @default true\n */\n visible?: boolean;\n curveType?: ICurveType;\n } & Omit;\n };\n\n /**\n * 是否显示startText和endText\n * @default 'auto' 鼠标hover在选中区域时才显示startText和endText\n */\n showDetail?: 'auto' | boolean;\n\n /**\n * 是否开启框选, 如果不开启则支持selectedBackground拖拽(框选和拖拽两者互斥)\n * @default true\n */\n brushSelect?: boolean;\n\n /**\n * 是否锁定选择区域(或叫做数据窗口)的大小\n */\n zoomLock?: boolean;\n\n /**\n * 用于限制窗口大小的最小值, [0, 1]\n * @default 0\n */\n minSpan?: number;\n\n /**\n * 用于限制窗口大小的最大值, [0, 1]\n * @default 1\n */\n maxSpan?: number;\n\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 是否在操作时动态更新视图\n * @default true\n */\n realTime?: boolean;\n\n /**\n * 绘制背景图表的数据 & 映射函数\n */\n previewData?: any[];\n previewPointsX?: (datum: any) => number;\n previewPointsY?: (datum: any) => number;\n previewPointsX1?: (datum: any) => number;\n previewPointsY1?: (datum: any) => number;\n updateStateCallback?: (start: number, end: number) => any;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 背景图表数据点采样压缩率\n * 参考: https://mourner.github.io/simplify-js/\n */\n tolerance?: number;\n}\n","import type { FederatedPointerEvent, IArea, IGroup, ILine, IRect, ISymbol, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { flatten_simplify, vglobal } from '@visactor/vrender-core';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, array, clamp, debounce, isFunction, isValid, merge, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { DEFAULT_DATA_ZOOM_ATTRIBUTES, DEFAULT_HANDLER_ATTR_MAP } from './config';\nimport { DataZoomActiveTag } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadDataZoomComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nloadDataZoomComponent();\nexport class DataZoom extends AbstractComponent> {\n name = 'dataZoom';\n static defaultAttributes = DEFAULT_DATA_ZOOM_ATTRIBUTES;\n\n private _isHorizontal: boolean;\n\n private _background!: IRect;\n\n private _container!: IGroup;\n\n /** 手柄 */\n private _startHandlerMask!: IRect;\n private _startHandler!: ISymbol;\n private _middleHandlerSymbol!: ISymbol;\n private _middleHandlerRect!: IRect;\n private _endHandlerMask!: IRect;\n private _endHandler!: ISymbol;\n private _selectedBackground!: IRect;\n private _dragMask!: IRect;\n private _startText!: Tag;\n private _endText!: Tag;\n private _startValue!: string | number;\n private _endValue!: string | number;\n private _showText!: boolean;\n\n /** 背景图表 */\n private _previewData: any[] = [];\n private _previewGroup!: IGroup;\n private _previewLine!: ILine;\n private _previewArea!: IArea;\n private _selectedPreviewGroupClip!: IGroup;\n private _selectedPreviewGroup!: IGroup;\n private _selectedPreviewLine!: ILine;\n private _selectedPreviewArea!: IArea;\n\n /** 交互状态 */\n protected _activeTag!: DataZoomActiveTag;\n protected _activeItem!: any;\n protected _activeState = false;\n protected _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n protected _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n max: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n max: 0\n };\n /** 起始状态 */\n readonly state = {\n start: 0,\n end: 1\n };\n protected _spanCache: number;\n\n /** 回调函数 */\n private _previewPointsX!: (datum: any) => number;\n private _previewPointsY!: (datum: any) => number;\n private _previewPointsX1!: (datum: any) => number;\n private _previewPointsY1!: (datum: any) => number;\n private _statePointToData: (state: number) => any = state => state;\n private _layoutAttrFromConfig: any; // 用于缓存\n\n setPropsFromAttrs() {\n const { start, end, orient, previewData, previewPointsX, previewPointsY, previewPointsX1, previewPointsY1 } = this\n .attribute as DataZoomAttributes;\n start && (this.state.start = start);\n end && (this.state.end = end);\n const { width, height } = this.getLayoutAttrFromConfig();\n this._spanCache = this.state.end - this.state.start;\n this._isHorizontal = orient === 'top' || orient === 'bottom';\n this._layoutCache.max = this._isHorizontal ? width : height;\n this._layoutCache.attPos = this._isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = this._isHorizontal ? 'width' : 'height';\n previewData && (this._previewData = previewData);\n isFunction(previewPointsX) && (this._previewPointsX = previewPointsX);\n isFunction(previewPointsY) && (this._previewPointsY = previewPointsY);\n isFunction(previewPointsX1) && (this._previewPointsX1 = previewPointsX1);\n isFunction(previewPointsY1) && (this._previewPointsY1 = previewPointsY1);\n }\n\n constructor(attributes: DataZoomAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DataZoom.defaultAttributes, attributes));\n const { position, showDetail } = attributes;\n // 这些属性在事件交互过程中会改变,所以不能在setAttrs里面动态更改\n this._activeCache.startPos = position;\n this._activeCache.lastPos = position;\n if (showDetail === 'auto') {\n this._showText = false as boolean;\n } else {\n this._showText = showDetail as boolean;\n }\n this.setPropsFromAttrs();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n this.setPropsFromAttrs();\n }\n\n protected bindEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n this.setAttribute('childrenPickable', false);\n return;\n }\n const { showDetail, brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n if (this._startHandlerMask) {\n this._startHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n }\n if (this._endHandlerMask) {\n this._endHandlerMask.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n }\n if (this._middleHandlerSymbol) {\n this._middleHandlerSymbol.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n }\n if (this._middleHandlerRect) {\n this._middleHandlerRect.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n }\n\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n if (this._selectedBackground) {\n this._selectedBackground.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n if (brushSelect && this._background) {\n this._background.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (brushSelect && this._previewGroup) {\n this._previewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n }\n if (this._selectedPreviewGroup) {\n this._selectedPreviewGroup.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n }\n // 拖拽结束\n (this as unknown as IGroup).addEventListener('pointerup', this._onHandlerPointerUp);\n (this as unknown as IGroup).addEventListener('pointerupoutside', this._onHandlerPointerUp);\n // hover\n if (showDetail === 'auto') {\n (this as unknown as IGroup).addEventListener('pointerenter', this._onHandlerPointerEnter as EventListener);\n (this as unknown as IGroup).addEventListener('pointerleave', this._onHandlerPointerLeave as EventListener);\n }\n }\n\n /** dragMask size边界处理 */\n protected dragMaskSize() {\n const { position } = this.attribute as DataZoomAttributes;\n const { attPos, max } = this._layoutCache;\n if (this._activeCache.lastPos[attPos] - position[attPos] > max) {\n return max + position[attPos] - this._activeCache.startPos[attPos];\n } else if (this._activeCache.lastPos[attPos] - position[attPos] < 0) {\n return position[attPos] - this._activeCache.startPos[attPos];\n }\n return this._activeCache.lastPos[attPos] - this._activeCache.startPos[attPos];\n }\n\n /** state 边界处理 */\n protected setStateAttr(start: number, end: number, shouldRender: boolean) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this.state.start = start;\n this.state.end = end;\n shouldRender && this.setAttributes({ start, end });\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n e.stopPropagation();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this.eventPosToStagePos(e);\n this._activeCache.lastPos = this.eventPosToStagePos(e);\n\n // 拖拽开始时监听事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp);\n }\n // 拖拽时\n (this as unknown as IGroup).addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => dragMask的宽 or 高被改变\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => 所有handler的位置被改变\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => 所有handler的位置被改变\n * 4. 在endHandler上拖拽,同上\n */\n private _pointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const { start: startAttr, end: endAttr, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n const pos = this.eventPosToStagePos(e);\n const { attPos, max } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / max;\n\n let { start, end } = this.state;\n // this._activeState= false;\n if (this._activeState) {\n // if (this._activeTag === DataZoomActiveTag.background) {\n // } else\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis);\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n if (start + dis > end) {\n start = end;\n end = start + dis;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n start = start + dis;\n }\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n if (end + dis < start) {\n end = start;\n start = end + dis;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n end = end + dis;\n }\n }\n this._activeCache.lastPos = pos;\n brushSelect && this.renderDragMask();\n }\n start = Math.min(Math.max(start, 0), 1);\n end = Math.min(Math.max(end, 0), 1);\n\n // 避免attributes相同时, 重复渲染\n if (startAttr !== start || endAttr !== end) {\n this.setStateAttr(start, end, true);\n\n if (realTime) {\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }\n };\n private _onHandlerPointerMove =\n this.attribute.delayTime === 0\n ? this._pointerMove\n : delayMap[this.attribute.delayType](this._pointerMove, this.attribute.delayTime);\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n const { start, end, brushSelect, realTime = true } = this.attribute as DataZoomAttributes;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.background) {\n const pos = this.eventPosToStagePos(e);\n this.backgroundDragZoom(this._activeCache.startPos, pos);\n }\n }\n this._activeState = false;\n\n // dragMask不依赖于state更新\n brushSelect && this.renderDragMask();\n\n // 避免attributes相同时, 重复渲染\n if (start !== this.state.start || end !== this.state.end) {\n this.setStateAttr(this.state.start, this.state.end, true);\n\n this._dispatchEvent('change', {\n start: this.state.start,\n end: this.state.end,\n tag: this._activeTag\n });\n }\n\n // 拖拽结束后卸载事件\n if (vglobal.env === 'browser') {\n // 拖拽时\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n // 拖拽结束\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp);\n }\n // 拖拽时\n (this as unknown as IGroup).removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n (this as unknown as IGroup).removeEventListener('pointerup', this._onHandlerPointerUp);\n };\n\n /**\n * 鼠标进入事件\n * @description 鼠标进入选中部分出现start和end文字\n */\n private _onHandlerPointerEnter(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = true;\n this.renderText();\n }\n\n /**\n * 鼠标移出事件\n * @description 鼠标移出选中部分不出现start和end文字\n */\n private _onHandlerPointerLeave(e: FederatedPointerEvent) {\n e.stopPropagation();\n this._showText = false;\n this.renderText();\n }\n\n protected backgroundDragZoom(startPos: IPointLike, endPos: IPointLike) {\n const { attPos, max } = this._layoutCache;\n const { position } = this.attribute as DataZoomAttributes;\n const startPosInComponent = startPos[attPos] - position[attPos];\n const endPosInComponent = endPos[attPos] - position[attPos];\n const start = Math.min(Math.max(Math.min(startPosInComponent, endPosInComponent) / max, 0), 1);\n const end = Math.min(Math.max(Math.max(startPosInComponent, endPosInComponent) / max, 0), 1);\n if (Math.abs(start - end) < 0.01) {\n this.moveZoomWithMiddle(start);\n } else {\n this.setStateAttr(start, end, false);\n }\n }\n\n protected moveZoomWithMiddle(middle: number) {\n const currentMiddle = (this.state.start + this.state.end) / 2;\n let offset = middle - currentMiddle;\n // 拖拽middleHandler时,限制在background范围内\n if (offset === 0) {\n return;\n } else if (offset > 0) {\n if (this.state.end + offset > 1) {\n offset = 1 - this.state.end;\n }\n } else if (offset < 0) {\n if (this.state.start + offset < 0) {\n offset = -this.state.start;\n }\n }\n this.setStateAttr(this.state.start + offset, this.state.end + offset, false);\n }\n\n protected renderDragMask() {\n const { dragMaskStyle } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n // drag部分\n if (this._isHorizontal) {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.x : this._activeCache.startPos.x,\n position.x,\n position.x + width\n ),\n y: position.y,\n width:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n height,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n } else {\n this._dragMask = this._container.createOrUpdateChild(\n 'dragMask',\n {\n x: position.x,\n y: clamp(\n this.dragMaskSize() < 0 ? this._activeCache.lastPos.y : this._activeCache.startPos.y,\n position.y,\n position.y + height\n ),\n width,\n height:\n (this._activeState && this._activeTag === DataZoomActiveTag.background && Math.abs(this.dragMaskSize())) ||\n 0,\n ...dragMaskStyle\n },\n 'rect'\n ) as IRect;\n }\n }\n\n /**\n * 判断文字是否超出datazoom范围\n */\n protected isTextOverflow(componentBoundsLike: IBoundsLike, textBounds: IBoundsLike | null, layout: 'start' | 'end') {\n if (!textBounds) {\n return false;\n }\n if (this._isHorizontal) {\n if (layout === 'start') {\n if (textBounds.x1 < componentBoundsLike.x1) {\n return true;\n }\n } else {\n if (textBounds.x2 > componentBoundsLike.x2) {\n return true;\n }\n }\n } else {\n if (layout === 'start') {\n if (textBounds.y1 < componentBoundsLike.y1) {\n return true;\n }\n } else {\n if (textBounds.y2 > componentBoundsLike.y2) {\n return true;\n }\n }\n }\n return false;\n }\n\n protected setTextAttr(startTextBounds: IBoundsLike, endTextBounds: IBoundsLike) {\n const { startTextStyle, endTextStyle } = this.attribute as DataZoomAttributes;\n const { formatMethod: startTextFormat, ...restStartTextStyle } = startTextStyle;\n const { formatMethod: endTextFormat, ...restEndTextStyle } = endTextStyle;\n const { start, end } = this.state;\n this._startValue = this._statePointToData(start);\n this._endValue = this._statePointToData(end);\n const { position, width, height } = this.getLayoutAttrFromConfig();\n\n const startTextValue = startTextFormat ? startTextFormat(this._startValue) : this._startValue;\n const endTextValue = endTextFormat ? endTextFormat(this._endValue) : this._endValue;\n const componentBoundsLike = {\n x1: position.x,\n y1: position.y,\n x2: position.x + width,\n y2: position.y + height\n };\n let startTextPosition: IPointLike;\n let endTextPosition: IPointLike;\n let startTextAlignStyle: any;\n let endTextAlignStyle: any;\n if (this._isHorizontal) {\n startTextPosition = {\n x: position.x + start * width,\n y: position.y + height / 2\n };\n endTextPosition = {\n x: position.x + end * width,\n y: position.y + height / 2\n };\n startTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'left' : 'right',\n textBaseline: restStartTextStyle?.textStyle?.textBaseline ?? 'middle'\n };\n endTextAlignStyle = {\n textAlign: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'right' : 'left',\n textBaseline: restEndTextStyle?.textStyle?.textBaseline ?? 'middle'\n };\n } else {\n startTextPosition = {\n x: position.x + width / 2,\n y: position.y + start * height\n };\n endTextPosition = {\n x: position.x + width / 2,\n y: position.y + end * height\n };\n startTextAlignStyle = {\n textAlign: restStartTextStyle?.textStyle?.textAlign ?? 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, startTextBounds, 'start') ? 'top' : 'bottom'\n };\n endTextAlignStyle = {\n textAlign: restEndTextStyle?.textStyle?.textAlign ?? 'center',\n textBaseline: this.isTextOverflow(componentBoundsLike, endTextBounds, 'end') ? 'bottom' : 'top'\n };\n }\n\n this._startText = this.maybeAddLabel(\n this._container,\n merge({}, restStartTextStyle, {\n text: startTextValue,\n x: startTextPosition.x,\n y: startTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: startTextAlignStyle\n }),\n `data-zoom-start-text-${position}`\n );\n this._endText = this.maybeAddLabel(\n this._container,\n merge({}, restEndTextStyle, {\n text: endTextValue,\n x: endTextPosition.x,\n y: endTextPosition.y,\n visible: this._showText,\n pickable: false,\n childrenPickable: false,\n textStyle: endTextAlignStyle\n }),\n `data-zoom-end-text-${position}`\n );\n }\n\n protected renderText() {\n let startTextBounds: IBoundsLike | null = null;\n let endTextBounds: IBoundsLike | null = null;\n\n // 第一次绘制\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n\n // 第二次绘制: 将text限制在组件bounds内\n this.setTextAttr(startTextBounds, endTextBounds);\n // 得到bounds\n startTextBounds = this._startText.AABBBounds;\n endTextBounds = this._endText.AABBBounds;\n const { x1, x2, y1, y2 } = startTextBounds;\n const { dx: startTextDx = 0, dy: startTextDy = 0 } = this.attribute.startTextStyle;\n\n // 第三次绘制: 避免startText和endText重叠, 如果重叠了, 对startText做位置调整(考虑到调整的最小化,只单独调整startText而不调整endText)\n if (new Bounds().set(x1, y1, x2, y2).intersects(endTextBounds)) {\n const direction = this.attribute.orient === 'bottom' || this.attribute.orient === 'right' ? -1 : 1;\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy + direction * Math.abs(endTextBounds.y1 - endTextBounds.y2));\n } else {\n this._startText.setAttribute('dx', startTextDx + direction * Math.abs(endTextBounds.x1 - endTextBounds.x2));\n }\n } else {\n if (this._isHorizontal) {\n this._startText.setAttribute('dy', startTextDy);\n } else {\n this._startText.setAttribute('dx', startTextDx);\n }\n }\n }\n\n /**\n * 获取背景框中的位置和宽高\n * @description 实际绘制的背景框中的高度或宽度 减去 中间手柄的高度或宽度\n */\n protected getLayoutAttrFromConfig() {\n if (this._layoutAttrFromConfig) {\n return this._layoutAttrFromConfig;\n }\n const {\n position: positionConfig,\n size,\n orient,\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {},\n backgroundStyle = {}\n } = this.attribute as DataZoomAttributes;\n const { width: widthConfig, height: heightConfig } = size;\n const middleHandlerSize = middleHandlerStyle.background?.size ?? 10;\n\n // 如果middleHandler显示的话,要将其宽高计入datazoom宽高\n let width;\n let height;\n let position;\n if (middleHandlerStyle.visible) {\n if (this._isHorizontal) {\n width = widthConfig;\n height = heightConfig - middleHandlerSize;\n position = {\n x: positionConfig.x,\n y: positionConfig.y + middleHandlerSize\n };\n } else {\n width = widthConfig - middleHandlerSize;\n height = heightConfig;\n position = {\n x: positionConfig.x + (orient === 'left' ? middleHandlerSize : 0),\n y: positionConfig.y\n };\n }\n } else {\n width = widthConfig;\n height = heightConfig;\n position = positionConfig;\n }\n\n const startHandlerSize = (startHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n const endHandlerSize = (endHandlerStyle.size as number) ?? (this._isHorizontal ? height : width);\n // 如果startHandler显示的话,要将其宽高计入dataZoom宽高\n if (startHandlerStyle.visible) {\n if (this._isHorizontal) {\n width -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x + startHandlerSize / 2,\n y: position.y\n };\n } else {\n height -= (startHandlerSize + endHandlerSize) / 2;\n position = {\n x: position.x,\n y: position.y + startHandlerSize / 2\n };\n }\n }\n\n // stroke 需计入宽高, 否则dataZoom在画布边缘会被裁剪lineWidth / 2\n height += backgroundStyle.lineWidth / 2 ?? 1;\n width += backgroundStyle.lineWidth / 2 ?? 1;\n\n this._layoutAttrFromConfig = {\n position,\n width,\n height\n };\n return this._layoutAttrFromConfig;\n }\n\n protected render() {\n this._layoutAttrFromConfig = null;\n const {\n // start,\n // end,\n orient,\n backgroundStyle,\n backgroundChartStyle = {},\n selectedBackgroundStyle = {},\n selectedBackgroundChartStyle = {},\n middleHandlerStyle = {},\n startHandlerStyle = {},\n endHandlerStyle = {},\n brushSelect,\n zoomLock\n } = this.attribute as DataZoomAttributes;\n const { start, end } = this.state;\n\n const { position, width, height } = this.getLayoutAttrFromConfig();\n const startHandlerMinSize = startHandlerStyle.triggerMinSize ?? 40;\n const endHandlerMinSize = endHandlerStyle.triggerMinSize ?? 40;\n const group = (this as unknown as IGroup).createOrUpdateChild('dataZoom-container', {}, 'group') as IGroup;\n this._container = group;\n this._background = group.createOrUpdateChild(\n 'background',\n {\n x: position.x,\n y: position.y,\n width,\n height,\n cursor: brushSelect ? 'crosshair' : 'auto',\n ...backgroundStyle,\n pickable: zoomLock ? false : backgroundStyle.pickable ?? true\n },\n 'rect'\n ) as IRect;\n\n /** 背景图表 */\n backgroundChartStyle.line?.visible && this.setPreviewAttributes('line', group);\n backgroundChartStyle.area?.visible && this.setPreviewAttributes('area', group);\n\n /** drag mask */\n brushSelect && this.renderDragMask();\n\n /** 选中背景 */\n if (this._isHorizontal) {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x + start * width,\n y: position.y,\n width: (end - start) * width,\n height: height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: zoomLock ? false : (selectedBackgroundChartStyle as any).pickable ?? true\n },\n 'rect'\n ) as IRect;\n } else {\n // 选中部分\n this._selectedBackground = group.createOrUpdateChild(\n 'selectedBackground',\n {\n x: position.x,\n y: position.y + start * height,\n width,\n height: (end - start) * height,\n cursor: brushSelect ? 'crosshair' : 'move',\n ...selectedBackgroundStyle,\n pickable: zoomLock ? false : selectedBackgroundStyle.pickable ?? true\n },\n 'rect'\n ) as IRect;\n }\n\n /** 选中的背景图表 */\n selectedBackgroundChartStyle.line?.visible && this.setSelectedPreviewAttributes('line', group);\n selectedBackgroundChartStyle.area?.visible && this.setSelectedPreviewAttributes('area', group);\n\n /** 左右 和 中间手柄 */\n if (this._isHorizontal) {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: position.x + start * width,\n y: position.y - middleHandlerBackgroundSize,\n width: (end - start) * width,\n height: middleHandlerBackgroundSize,\n ...middleHandlerStyle.background?.style,\n pickable: zoomLock ? false : middleHandlerStyle.background?.style?.pickable ?? true\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x: position.x + ((start + end) / 2) * width,\n y: position.y - middleHandlerBackgroundSize / 2,\n strokeBoundsBuffer: 0,\n angle: 0,\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n ...middleHandlerStyle.icon,\n pickable: zoomLock ? false : middleHandlerStyle.icon.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + start * width,\n y: position.y + height / 2,\n size: height,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...startHandlerStyle,\n pickable: zoomLock ? false : startHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + end * width,\n y: position.y + height / 2,\n size: height,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n ...endHandlerStyle,\n pickable: zoomLock ? false : endHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + start * width - startHandlerWidth / 2,\n y: position.y + height / 2 - startHandlerHeight / 2,\n width: startHandlerWidth,\n height: startHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + end * width - endHandlerWidth / 2,\n y: position.y + height / 2 - endHandlerHeight / 2,\n width: endHandlerWidth,\n height: endHandlerHeight,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.horizontal as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n } else {\n if (middleHandlerStyle.visible) {\n const middleHandlerBackgroundSize = middleHandlerStyle.background?.size || 10;\n\n this._middleHandlerRect = group.createOrUpdateChild(\n 'middleHandlerRect',\n {\n x: orient === 'left' ? position.x - middleHandlerBackgroundSize : position.x + width,\n y: position.y + start * height,\n width: middleHandlerBackgroundSize,\n height: (end - start) * height,\n ...middleHandlerStyle.background?.style,\n pickable: zoomLock ? false : middleHandlerStyle.background?.style?.pickable ?? true\n },\n 'rect'\n ) as IRect;\n this._middleHandlerSymbol = group.createOrUpdateChild(\n 'middleHandlerSymbol',\n {\n x:\n orient === 'left'\n ? position.x - middleHandlerBackgroundSize / 2\n : position.x + width + middleHandlerBackgroundSize / 2,\n y: position.y + ((start + end) / 2) * height,\n // size: height,\n angle: 90 * (Math.PI / 180),\n symbolType: middleHandlerStyle.icon?.symbolType ?? 'square',\n strokeBoundsBuffer: 0,\n ...middleHandlerStyle.icon,\n pickable: zoomLock ? false : middleHandlerStyle.icon?.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n }\n this._startHandler = group.createOrUpdateChild(\n 'startHandler',\n {\n x: position.x + width / 2,\n y: position.y + start * height,\n size: width,\n symbolType: startHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...startHandlerStyle,\n pickable: zoomLock ? false : startHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n this._endHandler = group.createOrUpdateChild(\n 'endHandler',\n {\n x: position.x + width / 2,\n y: position.y + end * height,\n size: width,\n symbolType: endHandlerStyle.symbolType ?? 'square',\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n ...endHandlerStyle,\n pickable: zoomLock ? false : endHandlerStyle.pickable ?? true\n },\n 'symbol'\n ) as ISymbol;\n\n // 透明mask构造热区, 热区大小配置来自handler bounds\n const startHandlerWidth = Math.max(this._startHandler.AABBBounds.width(), startHandlerMinSize);\n const startHandlerHeight = Math.max(this._startHandler.AABBBounds.height(), startHandlerMinSize);\n const endHandlerWidth = Math.max(this._endHandler.AABBBounds.width(), endHandlerMinSize);\n const endHandlerHeight = Math.max(this._endHandler.AABBBounds.height(), endHandlerMinSize);\n\n this._startHandlerMask = group.createOrUpdateChild(\n 'startHandlerMask',\n {\n x: position.x + width / 2 + startHandlerWidth / 2,\n y: position.y + start * height - startHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n this._endHandlerMask = group.createOrUpdateChild(\n 'endHandlerMask',\n {\n x: position.x + width / 2 + endHandlerWidth / 2,\n y: position.y + end * height - endHandlerHeight / 2,\n width: endHandlerHeight,\n height: endHandlerWidth,\n fill: 'white',\n fillOpacity: 0,\n zIndex: 999,\n ...(DEFAULT_HANDLER_ATTR_MAP.vertical as any),\n pickable: !zoomLock\n },\n 'rect'\n ) as IRect;\n }\n\n /** 左右文字 */\n if (this._showText) {\n this.renderText();\n }\n }\n\n computeBasePoints() {\n const { orient } = this.attribute as DataZoomAttributes;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n let basePointStart: any;\n let basePointEnd: any;\n if (this._isHorizontal) {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else if (orient === 'left') {\n basePointStart = [\n {\n x: position.x + width,\n y: position.y\n }\n ];\n basePointEnd = [\n {\n x: position.x + width,\n y: position.y + height\n }\n ];\n } else {\n basePointStart = [\n {\n x: position.x,\n y: position.y + height\n }\n ];\n basePointEnd = [\n {\n x: position.x,\n y: position.y\n }\n ];\n }\n return {\n basePointStart,\n basePointEnd\n };\n }\n\n protected simplifyPoints(points: IPointLike[]) {\n // 采样压缩率策略: 如果没做任何配置, 那么限制在niceCount内, 如果做了配置, 则按照配置计算\n const niceCount = 10000; // 经验值\n if (points.length > niceCount) {\n const tolerance = this.attribute.tolerance ?? this._previewData.length / niceCount;\n return flatten_simplify(points, tolerance, false);\n }\n return points;\n }\n\n protected getPreviewLinePoints() {\n let previewPoints = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n\n // 采样\n previewPoints = this.simplifyPoints(previewPoints);\n\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n protected getPreviewAreaPoints() {\n let previewPoints: IPointLike[] = this._previewData.map(d => {\n return {\n x: this._previewPointsX && this._previewPointsX(d),\n y: this._previewPointsY && this._previewPointsY(d),\n x1: this._previewPointsX1 && this._previewPointsX1(d),\n y1: this._previewPointsY1 && this._previewPointsY1(d)\n };\n });\n // 仅在有数据的时候增加base point, 以弥补背景图表两端的不连续缺口。不然的话没有数据时,会因为base point而仍然绘制图形\n if (previewPoints.length === 0) {\n return previewPoints;\n }\n\n // 采样\n previewPoints = this.simplifyPoints(previewPoints);\n\n const { basePointStart, basePointEnd } = this.computeBasePoints();\n return basePointStart.concat(previewPoints).concat(basePointEnd);\n }\n\n /** 使用callback绘制背景图表 (数据和数据映射从外部传进来) */\n protected setPreviewAttributes(type: 'line' | 'area', group: IGroup) {\n if (!this._previewGroup) {\n this._previewGroup = group.createOrUpdateChild('previewGroup', { pickable: false }, 'group') as IGroup;\n }\n if (type === 'line') {\n this._previewLine = this._previewGroup.createOrUpdateChild('previewLine', {}, 'line') as ILine;\n } else {\n this._previewArea = this._previewGroup.createOrUpdateChild(\n 'previewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { backgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n type === 'line' &&\n this._previewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.line\n });\n type === 'area' &&\n this._previewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...backgroundChartStyle.area\n });\n }\n\n /** 使用callback绘制选中的背景图表 (数据和数据映射从外部传进来) */\n protected setSelectedPreviewAttributes(type: 'area' | 'line', group: IGroup) {\n if (!this._selectedPreviewGroupClip) {\n this._selectedPreviewGroupClip = group.createOrUpdateChild(\n 'selectedPreviewGroupClip',\n { pickable: false },\n 'group'\n ) as IGroup;\n this._selectedPreviewGroup = this._selectedPreviewGroupClip.createOrUpdateChild(\n 'selectedPreviewGroup',\n {},\n 'group'\n ) as IGroup;\n }\n\n if (type === 'line') {\n this._selectedPreviewLine = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewLine',\n {},\n 'line'\n ) as ILine;\n } else {\n this._selectedPreviewArea = this._selectedPreviewGroup.createOrUpdateChild(\n 'selectedPreviewArea',\n { curveType: 'basis' },\n 'area'\n ) as IArea;\n }\n\n const { selectedBackgroundChartStyle = {} } = this.attribute as DataZoomAttributes;\n\n const { start, end } = this.state;\n const { position, width, height } = this.getLayoutAttrFromConfig();\n this._selectedPreviewGroupClip.setAttributes({\n x: this._isHorizontal ? position.x + start * width : position.x,\n y: this._isHorizontal ? position.y : position.y + start * height,\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n clip: true,\n pickable: false\n } as any);\n this._selectedPreviewGroup.setAttributes({\n x: -(this._isHorizontal ? position.x + start * width : position.x),\n y: -(this._isHorizontal ? position.y : position.y + start * height),\n width: this._isHorizontal ? (end - start) * width : width,\n height: this._isHorizontal ? height : (end - start) * height,\n pickable: false\n } as any);\n type === 'line' &&\n this._selectedPreviewLine.setAttributes({\n points: this.getPreviewLinePoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.line\n });\n type === 'area' &&\n this._selectedPreviewArea.setAttributes({\n points: this.getPreviewAreaPoints(),\n curveType: 'basis',\n pickable: false,\n ...selectedBackgroundChartStyle.area\n });\n }\n\n protected maybeAddLabel(container: IGroup, attributes: TagAttributes, name: string): Tag {\n let labelShape = (this as unknown as IGroup).find(node => node.name === name, true) as unknown as Tag;\n if (labelShape) {\n labelShape.setAttributes(attributes);\n } else {\n labelShape = new Tag(attributes);\n labelShape.name = name;\n }\n\n container.add(labelShape as unknown as INode);\n return labelShape;\n }\n\n /** 外部重置组件的起始状态 */\n setStartAndEnd(start?: number, end?: number) {\n const { start: startAttr, end: endAttr } = this.attribute as DataZoomAttributes;\n if (isValid(start) && isValid(end) && (start !== this.state.start || end !== this.state.end)) {\n this.state.start = start;\n this.state.end = end;\n if (startAttr !== this.state.start || endAttr !== this.state.end) {\n this.setStateAttr(start, end, true);\n this._dispatchEvent('change', {\n start,\n end,\n tag: this._activeTag\n });\n }\n }\n }\n\n /** 外部更新背景图表的数据 */\n setPreviewData(data: any[]) {\n this._previewData = data;\n }\n\n /** 外部更新手柄文字 */\n setText(text: string, tag: 'start' | 'end') {\n if (tag === 'start') {\n this._startText.setAttribute('text', text);\n } else {\n this._endText.setAttribute('text', text);\n }\n }\n\n /** 外部获取起始点数据值 */\n getStartValue() {\n return this._startValue;\n }\n\n getEndTextValue() {\n return this._endValue;\n }\n\n getMiddleHandlerSize() {\n const { middleHandlerStyle = {} } = this.attribute as DataZoomAttributes;\n const middleHandlerRectSize = middleHandlerStyle.background?.size ?? 10;\n const middleHandlerSymbolSize = middleHandlerStyle.icon?.size ?? 10;\n return Math.max(middleHandlerRectSize, ...array(middleHandlerSymbolSize));\n }\n\n /** 外部传入数据映射 */\n setPreviewPointsX(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX = callback);\n }\n setPreviewPointsY(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY = callback);\n }\n setPreviewPointsX1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsX1 = callback);\n }\n setPreviewPointsY1(callback: (d: any) => number) {\n isFunction(callback) && (this._previewPointsY1 = callback);\n }\n setStatePointToData(callback: (state: number) => any) {\n isFunction(callback) && (this._statePointToData = callback);\n }\n}\n","import { registerArea, registerLine, registerRect, registerSymbol } from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nexport function loadDataZoomComponent() {\n loadTagComponent();\n registerRect();\n registerSymbol();\n registerArea();\n registerLine();\n}\n","import type { AdaptiveSpec } from '../../../typings';\nimport { isArray } from '../../../util';\nimport { BaseComponentSpecTransformer } from '../../base';\nimport type { IDataZoomSpec, IDataZoomTheme } from './interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport class DataZoomSpecTransformer<\n T extends IDataZoomSpec = IDataZoomSpec,\n K extends IDataZoomTheme = IDataZoomTheme\n> extends BaseComponentSpecTransformer, K> {\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec(\n spec: AdaptiveSpec,\n chartSpec: any\n ): { spec: AdaptiveSpec; theme: K } {\n const theme = this._theme;\n let newSpec = spec;\n if (this._shouldMergeThemeToSpec()) {\n // this._originalSpec + this._theme = this._spec\n const merge = (originalSpec: any) => {\n const result = mergeSpec(\n {\n selectedBackgroundChart: {\n line: {},\n area: {}\n }\n },\n this._theme,\n originalSpec\n );\n\n // 兼容:为了减少主题更改造成的影响,如果用户在 spec 配置了主题默认关闭的 mark,则自动加上 visible: true\n const { selectedBackgroundChart = {} } = originalSpec;\n const { line, area } = selectedBackgroundChart;\n\n if (line && line.visible !== false) {\n result.selectedBackgroundChart.line.style = {\n ...result.selectedBackgroundChart.line.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n if (area && area.visible !== false) {\n result.selectedBackgroundChart.area.style = {\n ...result.selectedBackgroundChart.area.style,\n visible: true // FIXME: visible 应该提到更上面,等 datazoom 支持\n };\n }\n\n return result;\n };\n\n const baseSpec = spec;\n if (isArray(baseSpec)) {\n newSpec = baseSpec.map(spec => merge(spec)) as unknown as any;\n } else {\n newSpec = merge(baseSpec);\n }\n }\n\n this._adjustPadding(newSpec);\n return { spec: newSpec, theme };\n }\n}\n","// eslint-disable-next-line no-duplicate-imports\nimport {\n isBoolean,\n isFunction,\n isNil,\n isNumber,\n isValid,\n last,\n maxInArray,\n minInArray,\n uniqArray\n} from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataZoomAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataZoom as DataZoomComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, ISymbolGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { Datum, ILayoutType } from '../../../typings';\nimport type { ILinearScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { LinearScale, isContinuous, isDiscrete } from '@visactor/vscale';\nimport { LayoutLevel, LayoutZIndex } from '../../../constant/layout';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IDataZoomSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { CartesianAxis } from '../../axis/cartesian';\nimport { DataZoomSpecTransformer } from './data-zoom-transformer';\nimport { getFormatFunction } from '../../util';\n\nexport class DataZoom extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.dataZoom;\n static readonly transformerConstructor = DataZoomSpecTransformer as any;\n type = ComponentTypeEnum.dataZoom;\n name: string = ComponentTypeEnum.dataZoom;\n readonly transformerConstructor = DataZoomSpecTransformer;\n\n static specKey = 'dataZoom';\n specKey = 'dataZoom';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: DataZoomComponent;\n\n protected _valueScale!: ILinearScale;\n\n protected _backgroundSize!: number;\n protected _middleHandlerSize!: number;\n protected _startHandlerSize!: number;\n protected _endHandlerSize!: number;\n\n protected _isReverseCache: boolean = false;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n\n this._valueField = 'y';\n this._filterMode = spec.filterMode ?? 'filter';\n }\n\n created() {\n super.created();\n this._initValueScale();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = (this._spec as any).roam;\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n // size相关\n this._backgroundSize = this._spec.background?.size ?? 30;\n this._middleHandlerSize = this._computeMiddleHandlerSize();\n this._width = this._computeWidth();\n this._height = this._computeHeight();\n // startHandler和endHandler size如果没有配置,则默认跟随background宽 or 高\n if (isNil(this._spec?.startHandler?.style?.size)) {\n this._spec.startHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n if (isNil(this._spec?.endHandler?.style?.size)) {\n this._spec.endHandler.style.size = this._isHorizontal\n ? this._height - this._middleHandlerSize\n : this._width - this._middleHandlerSize;\n }\n const startHandlerVisble = this._spec.startHandler.style.visible ?? true;\n const endHandlerVisble = this._spec.endHandler.style.visible ?? true;\n this._startHandlerSize = startHandlerVisble ? this._spec.startHandler.style.size : 0;\n this._endHandlerSize = endHandlerVisble ? this._spec.endHandler.style.size : 0;\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n // 初始时reverse判断并不准确,导致start和end颠倒, 保险起见在layoutend之后触发该逻辑\n // FIXME: 牺牲了一定性能,有待优化\n if (this._isReverse() && !this._isReverseCache) {\n this._isReverseCache = this._isReverse();\n this.effect.onZoomChange();\n }\n if (this._cacheVisibility !== false) {\n super.onLayoutEnd(ctx);\n }\n }\n\n protected _initValueScale() {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n const valueScale = new LinearScale();\n valueScale.domain(domain);\n this._valueScale = valueScale;\n }\n }\n\n protected _updateScaleRange() {\n const handlerSize = this._startHandlerSize + this._endHandlerSize;\n if (!this._stateScale || !this._valueScale) {\n return;\n }\n\n // visible为false时, 计算stateScale的兜底range\n let stateScaleRange;\n const defaultSize = this._isHorizontal\n ? this.getLayoutRect().width - handlerSize\n : this.getLayoutRect().height - handlerSize;\n\n const defaultRange = (this._relatedAxisComponent as CartesianAxis)?.getScale().range() ?? [\n this._startHandlerSize / 2,\n defaultSize + this._startHandlerSize / 2\n ];\n\n const compWidth = this._computeWidth();\n const compHeight = this._computeHeight();\n\n if (this._isHorizontal) {\n stateScaleRange = this._visible\n ? [this._startHandlerSize / 2, compWidth - handlerSize + this._startHandlerSize / 2]\n : defaultRange;\n this._stateScale.range(stateScaleRange);\n this._valueScale.range([compHeight - this._middleHandlerSize, 0]);\n } else {\n stateScaleRange = this._visible\n ? [this._startHandlerSize / 2, compHeight - handlerSize + this._startHandlerSize / 2]\n : defaultRange;\n\n this._stateScale.range(stateScaleRange);\n\n if (this.layoutOrient === 'left') {\n this._valueScale.range([compWidth - this._middleHandlerSize, 0]);\n } else {\n this._valueScale.range([0, compWidth - this._middleHandlerSize]);\n }\n }\n if (this._component && this._cacheVisibility !== false) {\n this._component.setAttributes({\n size: {\n width: compWidth,\n height: compHeight\n },\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n }\n });\n }\n }\n\n protected _computeDomainOfValueScale() {\n const domain = this._data.getLatestData().map((d: any) => d[this._valueField]);\n\n const domainNum = domain.map((n: any) => n * 1);\n return domain.length ? [minInArray(domainNum), maxInArray(domainNum)] : null;\n }\n\n protected _computeMiddleHandlerSize(): number {\n let size = 0;\n if (this._spec?.middleHandler?.visible) {\n const middleHandlerIconSize = this._spec.middleHandler.icon.style.size ?? 8;\n const middleHandlerBackSize = this._spec.middleHandler.background.size ?? 40;\n size += Math.max(middleHandlerIconSize as number, middleHandlerBackSize);\n }\n return size;\n }\n\n protected _computeWidth(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n\n return this._backgroundSize + this._middleHandlerSize;\n }\n\n protected _computeHeight(): number {\n if (this._visible === false) {\n return 0;\n }\n\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n if (this._isHorizontal) {\n return this._backgroundSize + this._middleHandlerSize;\n }\n return this.getLayoutRect().height;\n }\n\n protected _isScaleValid(scale: IBaseScale | ILinearScale) {\n if (!scale || !scale.domain()) {\n return false;\n }\n const domain = scale.domain();\n if (isContinuous(scale.type) && domain[0] === last(domain)) {\n return false;\n }\n if (isDiscrete(scale.type) && uniqArray(domain).length === 1) {\n return false;\n }\n return true;\n }\n\n protected _dataToPositionX = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const xField = this._isHorizontal ? this._stateField : this._valueField;\n return xScale.scale(datum[xField]) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionX2 = (datum: Datum): number => {\n const offsetLeft = this._orient === 'left' ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? this._startHandlerSize / 2 : 0;\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const min = xScale.domain()[0];\n return xScale.scale(min) + this.getLayoutStartPoint().x + offsetLeft + offsetHandler;\n };\n\n protected _dataToPositionY = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const yField = this._isHorizontal ? this._valueField : this._stateField;\n return yScale.scale(datum[yField]) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n protected _dataToPositionY2 = (datum: Datum): number => {\n const offsetTop = this._isHorizontal ? this._middleHandlerSize : 0;\n const offsetHandler = this._isHorizontal ? 0 : this._startHandlerSize / 2;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const min = yScale.domain()[0];\n return yScale.scale(min) + this.getLayoutStartPoint().y + offsetTop + offsetHandler;\n };\n\n private _getAttrs(isNeedPreview: boolean) {\n const spec = this._spec ?? ({} as T);\n return {\n zIndex: this.layoutZIndex,\n start: this._start,\n end: this._end,\n position: {\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y\n },\n orient: this._orient,\n size: {\n width: this._computeWidth(),\n height: this._computeHeight()\n },\n showDetail: spec.showDetail,\n brushSelect: spec.brushSelect ?? false,\n zoomLock: spec.zoomLock ?? false,\n minSpan: this._minSpan,\n maxSpan: this._maxSpan,\n delayType: spec.delayType,\n delayTime: isValid(spec.delayType) ? spec.delayTime ?? 30 : 0,\n realTime: spec.realTime ?? true,\n previewData: isNeedPreview && this._data.getLatestData(),\n previewPointsX: isNeedPreview && this._dataToPositionX,\n previewPointsY: isNeedPreview && this._dataToPositionY,\n tolerance: this._spec.tolerance,\n ...(this._getComponentAttrs(isNeedPreview) as any)\n } as DataZoomAttributes;\n }\n\n protected _createOrUpdateComponent() {\n if (this._visible) {\n const xScale = this._isHorizontal ? this._stateScale : this._valueScale;\n const yScale = this._isHorizontal ? this._valueScale : this._stateScale;\n const isNeedPreview =\n this._isScaleValid(xScale) && this._isScaleValid(yScale) && this._spec.showBackgroundChart !== false;\n const attrs = this._getAttrs(isNeedPreview);\n\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new DataZoomComponent(attrs);\n\n if (this._isHorizontal) {\n isNeedPreview && this._component.setPreviewPointsY1(this._dataToPositionY2);\n } else {\n isNeedPreview && this._component.setPreviewPointsX1(this._dataToPositionX2);\n }\n this._component.setStatePointToData((state: number) => this._statePointToData(state));\n\n this._component.addEventListener('change', (e: any) => {\n const { start, end, tag } = e.detail;\n this._handleChange(start, end, undefined, tag);\n });\n container.add(this._component as unknown as INode);\n\n this._updateScaleRange();\n }\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean, tag?: string) {\n super._handleChange(start, end, updateComponent);\n\n if (this._shouldChange) {\n if (updateComponent && this._component) {\n this._component.setStartAndEnd(start, end);\n }\n\n this._start = start;\n this._end = end;\n const startValue = this._statePointToData(start);\n const endValue = this._statePointToData(end);\n const hasChange = isFunction(this._spec.updateDataAfterChange)\n ? this._spec.updateDataAfterChange(start, end, startValue, endValue)\n : this._handleStateChange(startValue, endValue, tag);\n if (hasChange) {\n this.event.emit(ChartEvent.dataZoomChange, {\n model: this,\n value: {\n filterData: this._filterMode !== 'axis',\n start,\n end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n }\n\n protected _handleDataCollectionChange() {\n const data = this._data.getDataView();\n data.reRunAllTransform();\n this._component?.setPreviewData(data.latestData);\n\n if (this._valueScale) {\n const domain = this._computeDomainOfValueScale();\n\n if (domain) {\n this._valueScale.domain(domain);\n }\n }\n }\n\n protected _getComponentAttrs(isNeedPreview: boolean) {\n const {\n middleHandler = {},\n startText = {},\n endText = {},\n backgroundChart = {},\n selectedBackgroundChart = {}\n } = this._spec as T;\n return {\n backgroundStyle: transformToGraphic(this._spec.background?.style) as unknown as IRectGraphicAttribute,\n startHandlerStyle: transformToGraphic(this._spec.startHandler?.style) as unknown as ISymbolGraphicAttribute,\n middleHandlerStyle: middleHandler.visible\n ? {\n visible: true,\n icon: transformToGraphic(middleHandler.icon?.style) as unknown as ISymbolGraphicAttribute,\n background: {\n size: middleHandler.background?.size,\n style: transformToGraphic(middleHandler.background?.style)\n } as any\n }\n : { visible: false },\n endHandlerStyle: transformToGraphic(this._spec.endHandler?.style) as unknown as ISymbolGraphicAttribute,\n startTextStyle: {\n padding: startText.padding,\n formatMethod: this._getHandlerTextFormatMethod(startText),\n textStyle: transformToGraphic(startText.style)\n } as unknown,\n endTextStyle: {\n padding: endText.padding,\n formatMethod: this._getHandlerTextFormatMethod(endText),\n textStyle: transformToGraphic(endText.style)\n } as unknown,\n selectedBackgroundStyle: transformToGraphic(\n this._spec.selectedBackground.style\n ) as unknown as IRectGraphicAttribute,\n dragMaskStyle: transformToGraphic(this._spec.dragMask?.style) as unknown as IRectGraphicAttribute,\n backgroundChartStyle: isNeedPreview\n ? {\n line: mergeSpec(transformToGraphic(backgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(backgroundChart.area?.style)\n }\n }\n : {\n line: { visible: false },\n area: { visible: false }\n },\n selectedBackgroundChartStyle: isNeedPreview\n ? {\n line: mergeSpec(transformToGraphic(selectedBackgroundChart.line?.style), { fill: false }),\n area: {\n curveType: 'basis',\n visible: true,\n ...transformToGraphic(selectedBackgroundChart.area?.style)\n }\n }\n : {\n line: { visible: false },\n area: { visible: false }\n },\n disableTriggerEvent: this._option.disableTriggerEvent\n };\n }\n\n protected _getHandlerTextFormatMethod(spec: IDataZoomSpec['startText']) {\n const { formatMethod, formatter } = spec;\n const { formatFunc } = getFormatFunction(formatMethod, formatter);\n return formatFunc ? (text: any) => formatFunc(text, { label: text }, formatter) : undefined;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n\n clear(): void {\n if (this._component) {\n const container = this.getContainer();\n this._component.removeAllChild();\n if (container) {\n container.removeChild(this._component as unknown as INode);\n }\n\n this._component = null;\n }\n super.clear();\n }\n}\n\nexport const registerDataZoom = () => {\n Factory.registerComponent(DataZoom.type, DataZoom);\n};\n","import { isBoolean, isEmpty, isFunction, isNil, isNumber, isValid } from '@visactor/vutils';\nimport type { IComponentOption } from '../../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { DataFilterBaseComponent } from '../data-filter-base-component';\nimport type { ScrollBarAttributes } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { ScrollBar as ScrollBarComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport type { IRectGraphicAttribute, INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport { LayoutLevel, LayoutZIndex } from '../../../constant/layout';\nimport { ChartEvent } from '../../../constant/event';\nimport { SCROLL_BAR_DEFAULT_SIZE } from '../../../constant/scroll-bar';\nimport type { IScrollBarSpec } from './interface';\nimport { Factory } from '../../../core/factory';\nimport type { IZoomable } from '../../../interaction/zoom';\nimport type { ILayoutType } from '../../../typings/layout';\nimport { isClose } from '../../../util';\n\nexport class ScrollBar extends DataFilterBaseComponent {\n static type = ComponentTypeEnum.scrollBar;\n type = ComponentTypeEnum.scrollBar;\n name: string = ComponentTypeEnum.scrollBar;\n\n static specKey = 'scrollBar';\n specKey = 'scrollBar';\n\n layoutZIndex: number = LayoutZIndex.DataZoom;\n layoutLevel: number = LayoutLevel.DataZoom;\n layoutType: ILayoutType = 'region-relative';\n\n // datazoom组件\n protected _component!: ScrollBarComponent;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec as any, options);\n this._filterMode = spec.filterMode ?? 'axis';\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // roam兼容逻辑\n if (isBoolean((this._spec as any).roam)) {\n this._zoomAttr.enable = false; // 对于之前的逻辑而言,只要配置了roam,zoom始终不打开\n this._dragAttr.enable = (this._spec as any).roam;\n this._scrollAttr.enable = (this._spec as any).roam;\n }\n if (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n }\n\n /** LifeCycle API**/\n onLayoutEnd(ctx: any): void {\n this._updateScaleRange();\n this.effect.onZoomChange?.();\n super.onLayoutEnd(ctx);\n }\n\n protected _updateScaleRange() {\n if (this._component) {\n this._component.setAttributes({\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height\n });\n }\n }\n\n protected _computeWidth(): number {\n if (isNumber(this._spec.width)) {\n return this._spec.width;\n }\n\n if (this._isHorizontal) {\n return this.getLayoutRect().width;\n }\n // default value\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n protected _computeHeight(): number {\n if (isNumber(this._spec.height)) {\n return this._spec.height;\n }\n\n // default value\n if (!this._isHorizontal) {\n return this.getLayoutRect().height;\n }\n\n return SCROLL_BAR_DEFAULT_SIZE;\n }\n\n private _getAttrs() {\n return {\n zIndex: this.layoutZIndex,\n x: this.getLayoutStartPoint().x,\n y: this.getLayoutStartPoint().y,\n width: this.getLayoutRect().width,\n height: this.getLayoutRect().height,\n range: [this._start, this._end],\n direction: this._isHorizontal ? 'horizontal' : 'vertical',\n delayType: this._spec?.delayType,\n delayTime: isValid(this._spec?.delayType) ? this._spec?.delayTime ?? 30 : 0,\n realTime: this._spec?.realTime ?? true,\n ...this._getComponentAttrs()\n } as ScrollBarAttributes;\n }\n\n protected _createOrUpdateComponent() {\n const attrs = this._getAttrs();\n if (this._component) {\n this._component.setAttributes(attrs);\n } else {\n const container = this.getContainer();\n this._component = new ScrollBarComponent(attrs);\n // 绑定事件,防抖,防止频繁触发\n this._component.addEventListener('scrollDrag', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n container.add(this._component as unknown as INode);\n }\n }\n\n protected _handleChange(start: number, end: number, updateComponent?: boolean) {\n super._handleChange(start, end, updateComponent);\n // filter out scroll event with same scroll value\n const isSameScrollValue = isClose(this._start, start) && isClose(this._end, end);\n if (this._shouldChange && !isSameScrollValue) {\n if (updateComponent && this._component) {\n this._component.setAttribute('range', [start, end]);\n }\n\n this._start = start;\n this._end = end;\n const startValue = this._statePointToData(start);\n const endValue = this._statePointToData(end);\n const hasChange = isFunction(this._spec.updateDataAfterChange)\n ? this._spec.updateDataAfterChange(start, end, startValue, endValue)\n : this._handleStateChange(this._statePointToData(start), this._statePointToData(end));\n if (hasChange) {\n this.event.emit(ChartEvent.scrollBarChange, {\n model: this,\n value: {\n filterData: this._filterMode !== 'axis',\n start: this._start,\n end: this._end,\n startValue: this._startValue,\n endValue: this._endValue,\n newDomain: this._newDomain\n }\n });\n }\n }\n }\n\n protected _handleDataCollectionChange() {\n if (this._spec.auto) {\n const data = this._data.getDataView();\n data.reRunAllTransform();\n }\n }\n\n protected _initCommonEvent() {\n super._initCommonEvent();\n if (this._component) {\n this._component.on('scrollDrag', (e: any) => {\n const value = e.detail.value;\n this._handleChange(value[0], value[1]);\n });\n }\n }\n\n protected _getComponentAttrs() {\n const { rail, slider, innerPadding } = this._spec;\n const attrs: Partial = {};\n\n if (!isNil(innerPadding)) {\n attrs.padding = innerPadding;\n }\n\n if (!isEmpty(rail?.style)) {\n attrs.railStyle = transformToGraphic(rail.style) as unknown as IRectGraphicAttribute;\n }\n if (!isEmpty(slider?.style)) {\n attrs.sliderStyle = transformToGraphic(slider.style) as unknown as IRectGraphicAttribute;\n }\n attrs.disableTriggerEvent = this._option.disableTriggerEvent;\n return attrs;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._component] as unknown as IGroup[];\n }\n}\n\nexport const registerScrollBar = () => {\n Factory.registerComponent(ScrollBar.type, ScrollBar);\n};\n","import { array } from '@visactor/vutils';\nimport type { IIndicatorItemSpec } from './interface';\n\nexport interface IIndicatorDatum {\n type: 'title' | 'content';\n index: number;\n datum: any;\n spec: IIndicatorItemSpec;\n}\n\nexport interface IIndicatorMapper {\n title: IIndicatorItemSpec;\n content: IIndicatorItemSpec[];\n datum: () => any;\n}\n\nexport const indicatorMapper = (data: Array, op: IIndicatorMapper) => {\n const { datum, title, content } = op;\n const mappedData: Array = [];\n const datumResult = datum.call(null);\n if (title.visible) {\n mappedData.push({\n type: 'title',\n index: 0,\n datum: datumResult,\n spec: title\n } as IIndicatorDatum);\n }\n array(content).forEach((c, i) => {\n if (c.visible) {\n mappedData.push({\n type: 'content',\n index: i,\n datum: datumResult,\n spec: c\n } as IIndicatorDatum);\n }\n });\n return mappedData;\n};\n","import { IndicatorAttributes } from './type';\nexport const DEFAULT_INDICATOR_THEME: Partial = {\n title: {\n style: {\n text: '',\n fontSize: 20,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n },\n content: {\n style: {\n text: '',\n fontSize: 16,\n fill: 'black',\n fontWeight: 'normal',\n fillOpacity: 1,\n textBaseline: 'top',\n textAlign: 'center'\n }\n }\n};\n","import { registerGroup, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadIndicatorComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 指标卡组件\n */\nimport type { IGroup, IRichText, IText, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { merge, isValid, array, isValidNumber, get } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { createTextGraphicByType, measureTextSize } from '../util';\nimport type { IndicatorAttributes, IndicatorItemSpec } from './type';\nimport { DEFAULT_INDICATOR_THEME } from './config';\nimport { loadIndicatorComponent } from './register';\n\nloadIndicatorComponent();\nexport class Indicator extends AbstractComponent> {\n name = 'indicator';\n\n private _title?: IText | IRichText;\n private _content?: (IText | IRichText)[];\n\n protected _renderText(\n group: IGroup,\n title: IndicatorItemSpec,\n limit: number,\n limitRatio: number,\n themePath: string,\n graphicName: string\n ) {\n if (title.visible !== false) {\n const titleStyle = merge({}, get(DEFAULT_INDICATOR_THEME, themePath), title.style, {\n visible: title.visible\n });\n titleStyle.lineHeight = isValid(titleStyle.lineHeight) ? titleStyle.lineHeight : titleStyle.fontSize;\n\n if (title.formatMethod) {\n titleStyle._originText = titleStyle.text;\n titleStyle.text = title.formatMethod(titleStyle.text, titleStyle);\n }\n const textGraphic = createTextGraphicByType(titleStyle);\n textGraphic.name = graphicName;\n group.appendChild(textGraphic);\n\n // auto-fit\n if (title.autoFit && isValidNumber(limit)) {\n this._setLocalAutoFit(limit, textGraphic as IText, title);\n }\n\n //auto-limit\n if (title.autoLimit && isValidNumber(limitRatio)) {\n textGraphic.setAttribute('maxLineWidth', limit);\n }\n\n return textGraphic;\n }\n\n return undefined;\n }\n\n protected render() {\n this.removeAllChild(true);\n\n if (this.attribute.visible !== true) {\n return;\n }\n const { title = {}, content, size, limitRatio = Infinity } = this.attribute as IndicatorAttributes;\n\n const limit = Math.min(size.width, size.height) * limitRatio;\n\n const group = this.createOrUpdateChild(\n 'indicator-container',\n { x: 0, y: 0, zIndex: 1, pickable: this.attribute.pickable ?? true },\n 'group'\n ) as IGroup;\n if (isValid(title)) {\n this._title = this._renderText(group, title, limit, limitRatio, 'title.style', 'indicator-title');\n }\n\n if (isValid(content)) {\n const contents: IndicatorItemSpec[] = array(content);\n const contentComponents: (IText | IRichText)[] = [];\n contents.forEach((contentItem, i) => {\n if (contentItem.visible !== false) {\n contentComponents.push(\n this._renderText(group, contentItem, limit, limitRatio, 'content.style', 'indicator-content-' + i)\n );\n } else {\n }\n });\n this._content = contentComponents;\n }\n\n this._setGlobalAutoFit(limit);\n this._setYPosition();\n\n const totalHeight = group?.AABBBounds.height() ?? 0;\n group.setAttribute('y', size.height / 2 - totalHeight / 2);\n group.setAttribute('x', size.width / 2);\n }\n\n private _setLocalAutoFit(limit: number, indicatorItem: IText, indicatorItemSpec: IndicatorItemSpec) {\n // only apply local auto fit for default auto fit text\n if ((indicatorItemSpec.fitStrategy ?? 'default') !== 'default') {\n return;\n }\n const originWidth = measureTextSize(\n (indicatorItemSpec.style?.text ?? '') as string | number | number[] | string[],\n (indicatorItemSpec.style ?? {}) as Partial,\n this.stage?.getTheme()?.text\n ).width;\n if (originWidth > 0) {\n const ratio = (limit * (indicatorItemSpec.fitPercent ?? 0.5)) / originWidth;\n const fontSize = Math.floor((indicatorItemSpec.style?.fontSize ?? 20) * ratio);\n indicatorItem.setAttribute('fontSize', fontSize);\n indicatorItem.setAttribute(\n 'lineHeight',\n isValid(indicatorItemSpec.style.lineHeight) ? indicatorItemSpec.style.lineHeight : fontSize\n );\n }\n }\n\n private _setGlobalAutoFit(limit: number) {\n // compute the inscribed rect width & height for all texts\n // the font size will be determined by the longest text\n // 1. hx^2 + hy^2 = r^2\n // 2. hy = ra * hx + h\n // -> (ra^2 + 1) * x^2 + (2 * h * ra) * x + (h^2 - r^2) = 0\n\n const r = limit / 2;\n\n // unify the initial font size for auto fit texts\n const singleHeight = 12;\n const autoFitTexts: { text: IText; spec: IndicatorItemSpec }[] = [];\n // other text height\n let otherHeight = 0;\n // non auto fit title height\n const titleSpec = this.attribute.title ?? {};\n if (titleSpec.autoFit && titleSpec.fitStrategy === 'inscribed') {\n this._title.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: this._title as IText, spec: this.attribute.title ?? {} });\n } else {\n otherHeight += this._title?.AABBBounds?.height?.() ?? 0;\n }\n const titleSpace = titleSpec.space ?? 0;\n otherHeight += titleSpace;\n // non auto fit content height\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n if (contentSpec.autoFit && contentSpec.fitStrategy === 'inscribed') {\n contentText.setAttribute('fontSize', singleHeight);\n autoFitTexts.push({ text: contentText as IText, spec: contentSpec });\n } else {\n otherHeight += contentText?.AABBBounds?.height?.() ?? 0;\n }\n const contentSpace = contentSpec.space ?? 0;\n otherHeight += contentSpace;\n });\n if (autoFitTexts.length <= 0) {\n return;\n }\n\n // max width for all auto fit texts\n const maxWidth = autoFitTexts.reduce((width, textItem) => {\n return Math.max(width, textItem.text.AABBBounds.width());\n }, 0);\n\n // y = x * (singleHeight / maxWidth * textCount) + otherHeight\n // hy = hx * (singleHeight / maxWidth * textCount) + otherHeight / 2\n const ra = (singleHeight / maxWidth) * autoFitTexts.length;\n const h = otherHeight / 2;\n const a = ra ** 2 + 1;\n const b = 2 * h * ra;\n const c = h ** 2 - r ** 2;\n const hx = (-b + Math.sqrt(b ** 2 - 4 * a * c)) / (2 * a);\n const hy = ra * hx + h;\n const y = 2 * hy;\n const lineHeight = (y - otherHeight) / autoFitTexts.length;\n if (isValidNumber(y)) {\n autoFitTexts.forEach(textItem => {\n const specLineHeight = textItem.spec.style?.lineHeight;\n textItem.text.setAttribute('fontSize', lineHeight);\n textItem.text.setAttribute('lineHeight', isValid(specLineHeight) ? specLineHeight : lineHeight);\n });\n }\n }\n\n private _setYPosition() {\n let lastContentHeight = 0;\n\n const titleHeight = this._title?.AABBBounds?.height?.() ?? 0;\n const titleSpace = this.attribute.title?.space ?? 0;\n array(this.attribute.content)\n .filter(contentSpec => contentSpec.visible !== false)\n .forEach((contentSpec, index) => {\n const contentText = this._content[index];\n contentText.setAttribute('y', titleHeight + titleSpace + lastContentHeight);\n const contentSpace = contentSpec.space ?? 0;\n lastContentHeight += contentText.AABBBounds.height() + contentSpace;\n });\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IRegion } from '../../region/interface';\nimport type { IIndicator, IIndicatorItemSpec, IIndicatorSpec } from './interface';\nimport type { Maybe } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformIndicatorStyle } from '../../util/style';\nimport { getActualNumValue } from '../../util/space';\nimport { isEqual, isValid, isFunction, array, pickWithout } from '@visactor/vutils';\nimport { indicatorMapper } from './util';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { Indicator as IndicatorComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IndicatorAttributes } from '@visactor/vrender-components';\nimport type { IGraphic, INode, IGroup } from '@visactor/vrender-core';\nimport type { FunctionType } from '../../typings/visual';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\nimport { getSpecInfo } from '../util';\n\nexport class Indicator extends BaseComponent implements IIndicator {\n static type = ComponentTypeEnum.indicator;\n type = ComponentTypeEnum.indicator;\n name: string = ComponentTypeEnum.indicator;\n\n static specKey = 'indicator';\n specKey = 'indicator';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Indicator;\n layoutLevel: number = LayoutLevel.Indicator;\n\n private _gap: number = 0;\n\n private _activeDatum: any = null;\n private _displayData!: CompilableData;\n\n private _title: IIndicatorItemSpec;\n private _content: IIndicatorItemSpec[];\n\n private _indicatorComponent: IndicatorComponents;\n private _cacheAttrs: IndicatorAttributes;\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IIndicatorSpec) => {\n return s && s.visible !== false;\n });\n }\n\n created() {\n super.created();\n // data\n this.initData();\n // event\n this.initEvent();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._gap = this._spec.gap || 0;\n this._title = this._spec.title;\n this._content = array(this._spec.content);\n this._regions = this._option.getRegionsInUserIdOrIndex(array(this._spec.regionId), array(this._spec.regionIndex));\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n // event\n protected initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n const view = this.getCompiler()?.getVGrammarView();\n\n if (!view) {\n return;\n }\n\n if (this._spec.trigger === 'hover') {\n view.addEventListener('element-highlight:start', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-highlight:reset', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(null);\n }\n });\n } else {\n view.addEventListener('element-select:start', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-select:reset', (params: any) => {\n if (this.isRelativeModel(params.options.regionId)) {\n this.updateDatum(null);\n }\n });\n }\n }\n\n updateDatum(datum: any) {\n this._activeDatum = datum;\n this._displayData.updateData();\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n }\n\n // data\n private initData() {\n registerDataSetInstanceTransform(this._option.dataSet, 'indicatorFilter', indicatorMapper);\n const displayData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n displayData.transform({\n type: 'indicatorFilter',\n options: {\n title: this._title,\n content: this._content,\n datum: () => this._activeDatum\n }\n });\n\n displayData.target.addListener('change', this.updateDatum.bind(this));\n\n this._displayData = new CompilableData(this._option, displayData);\n }\n\n updateLayoutAttribute(): void {\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n\n super.updateLayoutAttribute();\n }\n\n private _getIndicatorAttrs() {\n if (this._spec.visible === false || (this._spec.fixed === false && this._activeDatum === null)) {\n return {\n visible: false\n } as IndicatorAttributes;\n }\n\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n const { x, y } = region.getLayoutStartPoint();\n const { content, offsetX, offsetY, limitRatio, title, ...restSpec } = this._spec;\n\n const contentComponentSpec: IIndicatorItemSpec[] = [];\n array(content).forEach((eachItem: IIndicatorItemSpec) => {\n const contentSpec = mergeSpec({}, this._theme.content, eachItem);\n contentComponentSpec.push({\n visible: contentSpec.visible !== false && (contentSpec.field ? this._activeDatum !== null : true),\n space: contentSpec.space || this._gap,\n autoLimit: contentSpec.autoLimit,\n autoFit: contentSpec.autoFit,\n fitPercent: contentSpec.fitPercent,\n fitStrategy: contentSpec.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(contentSpec.style, ['text']), this._activeDatum),\n text: this._createText(contentSpec.field, contentSpec.style.text)\n }\n });\n });\n\n return {\n visible: true,\n size: {\n width: width,\n height: height\n },\n zIndex: this.layoutZIndex,\n x: x,\n y: y,\n dx: offsetX ? getActualNumValue(offsetX, this._computeLayoutRadius()) : 0,\n dy: offsetY ? getActualNumValue(offsetY, this._computeLayoutRadius()) : 0,\n limitRatio: limitRatio || Infinity,\n title: {\n visible: title.visible !== false && (!isValid(title.field) || this._activeDatum !== null),\n space: title.space || this._gap,\n autoLimit: title.autoLimit,\n autoFit: title.autoFit,\n fitPercent: title.fitPercent,\n fitStrategy: title.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(title.style, ['text']), this._activeDatum),\n text: this._createText(title.field, title.style.text as any) // FIXME: type\n }\n },\n content: contentComponentSpec,\n ...(restSpec as unknown as IndicatorAttributes)\n } as IndicatorAttributes;\n }\n\n private _createOrUpdateIndicatorComponent(attrs: IndicatorAttributes) {\n if (attrs.visible === false) {\n // 按照vrender-component 的设置,只切换visible: false,并不会更新组件,所以强制删掉节点\n if (this._indicatorComponent && this._indicatorComponent.parent) {\n this._indicatorComponent.parent.removeChild(this._indicatorComponent);\n }\n this._indicatorComponent = null;\n return;\n }\n\n if (this._indicatorComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._indicatorComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n //FIXME:类型“IndicatorAttributes”的参数不能赋给类型“Required”的参数\n const indicator = new IndicatorComponents(attrs as any);\n indicator.name = 'indicator';\n container.add(indicator as unknown as INode);\n this._indicatorComponent = indicator;\n this._indicatorComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._indicatorComponent as unknown as IGraphic, event, type)\n );\n }\n this._cacheAttrs = attrs;\n }\n\n private _createText(\n field: string | undefined,\n text:\n | string\n | number\n | string[]\n | number[]\n | IRichTextCharacter[]\n | FunctionType\n ) {\n if (field) {\n return this._activeDatum ? this._activeDatum[field] : '';\n }\n if (isFunction(text)) {\n return text(this._activeDatum, undefined) ?? '';\n }\n return text ?? '';\n }\n\n private _computeLayoutRadius() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n private isRelativeModel(regionId: number) {\n return this._regions.some(region => region.id === regionId);\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._indicatorComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n this._cacheAttrs = null;\n super.clear();\n }\n\n getIndicatorComponent(): IndicatorComponents {\n return this._indicatorComponent;\n }\n}\n\nexport const registerIndicator = () => {\n Factory.registerComponent(Indicator.type, Indicator);\n};\n","import type { IAggrType } from '../component/marker/interface';\nimport type { IRegressType } from '../component/marker/mark-area/interface';\n\nexport const AGGR_TYPE: IAggrType[] = ['sum', 'average', 'min', 'max', 'variance', 'standardDeviation', 'median'];\n\nexport const REGRESS_TYPE: IRegressType[] = ['regression'];\n","import type { ICartesianSeries, IGeoSeries, IPolarSeries, ISeries } from '../../series/interface';\nimport type { DataView } from '@visactor/vdataset';\nimport {\n isValid,\n isNumber,\n array,\n minInArray,\n maxInArray,\n isArray,\n normalizePadding,\n isFunction,\n type IPointLike\n} from '@visactor/vutils';\nimport type { Datum, IPoint, StringOrNumber } from '../../typings';\nimport { isPercent, transformToGraphic } from '../../util';\nimport type {\n IDataPos,\n IMarkerAttributeContext,\n IMarkerLabelSpec,\n IMarkerState,\n IMarkerSupportSeries,\n IPolarPoint,\n MarkerPositionPoint,\n MarkerStateValue\n} from './interface';\nimport { AGGR_TYPE } from '../../constant/marker';\nimport type { IRegion } from '../../region/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { OffsetPoint } from './interface';\n\nfunction isNeedExtendDomain(domain: number[], datum: number, autoRange: boolean) {\n if (!autoRange) {\n return false;\n }\n const domainNum = domain.map((n: any) => n * 1);\n const min = minInArray(domainNum);\n const max = maxInArray(domainNum);\n if (datum < min || datum > max) {\n return true;\n }\n return false;\n}\n\nfunction getXValue(\n datum: Datum,\n xDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries },\n regionWidth: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.x) &&\n isNeedExtendDomain(xDomain, datum.x, autoRange) &&\n (relativeSeries as ICartesianSeries)?.getXAxisHelper().setExtendDomain?.('marker_xAxis_extend', datum.x);\n let x: number;\n if (isPercent(datum.x)) {\n x = convertPercentToValue(datum.x, regionWidth) + regionStartLayoutStartPoint.x;\n } else {\n x = (relativeSeries as ICartesianSeries).getXAxisHelper().dataToPosition([datum.x]) + regionStartLayoutStartPoint.x;\n }\n\n return x;\n}\n\nfunction getYValue(\n datum: Datum,\n yDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries },\n regionHeight: number,\n regionStartLayoutStartPoint: IPoint\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.y) &&\n isNeedExtendDomain(yDomain, datum.y, autoRange) &&\n (relativeSeries as ICartesianSeries).getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', datum.y);\n\n let y: number;\n if (isPercent(datum.y)) {\n y = convertPercentToValue(datum.y, regionHeight) + regionStartLayoutStartPoint.y;\n } else {\n y = (relativeSeries as ICartesianSeries).getYAxisHelper().dataToPosition([datum.y]) + regionStartLayoutStartPoint.y;\n }\n\n return y;\n}\n\nfunction getAngleValue(\n datum: Datum,\n angleDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries }\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.angle) &&\n isNeedExtendDomain(angleDomain, datum.angle, autoRange) &&\n (relativeSeries as IPolarSeries).angleAxisHelper?.setExtendDomain?.('marker_angleAxis_extend', datum.angle);\n\n return (relativeSeries as IPolarSeries).angleAxisHelper.dataToPosition([datum.angle]);\n}\n\nfunction getRadiusValue(\n datum: Datum,\n radiusDomain: number[],\n autoRange: boolean,\n refSeries: { [key: string]: IMarkerSupportSeries }\n) {\n const { relativeSeries } = refSeries;\n isNumber(datum.radius) &&\n isNeedExtendDomain(radiusDomain, datum.radius, autoRange) &&\n (relativeSeries as IPolarSeries).radiusAxisHelper?.setExtendDomain?.('marker_radiusAxis_extend', datum.radius);\n\n return (relativeSeries as IPolarSeries).radiusAxisHelper.dataToPosition([datum.radius]);\n}\n\nfunction convertPercentToValue(percent: string, relativeLength: number) {\n return (Number(percent.substring(0, percent.length - 1)) * relativeLength) / 100;\n}\n\nexport function isAggrSpec(spec: IDataPos) {\n return AGGR_TYPE.includes(spec as any);\n}\n\nexport function xyLayout(\n data: DataView,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean\n) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n\n const refSeries = {\n relativeSeries,\n startRelativeSeries,\n endRelativeSeries\n };\n\n const lines: IPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const xDomain = (relativeSeries as ICartesianSeries).getXAxisHelper().getScale(0).domain();\n const yDomain = (relativeSeries as ICartesianSeries).getYAxisHelper().getScale(0).domain();\n dataPoints.forEach((datum: IPoint) => {\n const isValidX = isValid(datum.x);\n const isValidY = isValid(datum.y);\n if (isValidX && isValidY) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n lines.push([{ x, y }]);\n } else if (isValidX) {\n const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint);\n const y = Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n );\n const y1 = Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y);\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x,\n y: y1\n }\n ]);\n } else if (isValidY) {\n const x = Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x);\n const y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);\n const x1 = Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n );\n lines.push([\n {\n x: x,\n y: y\n },\n {\n x: x1,\n y: y\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function polarLayout(\n data: DataView,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean\n) {\n const refSeries = {\n relativeSeries,\n startRelativeSeries,\n endRelativeSeries\n };\n const lines: IPolarPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n\n const angleDomain = (relativeSeries as IPolarSeries).angleAxisHelper.getScale(0).domain();\n const radiusDomain = (relativeSeries as IPolarSeries).radiusAxisHelper.getScale(0).domain();\n const regionRadius = Math.min(\n relativeSeries.getRegion().getLayoutRect().width / 2,\n relativeSeries.getRegion().getLayoutRect().height / 2\n );\n dataPoints.forEach((datum: IPolarPoint) => {\n const isValidAngle = isValid(datum.angle);\n const isValidRadius = isValid(datum.radius);\n if (isValidAngle && isValidRadius) {\n const angle = getAngleValue(datum, angleDomain, autoRange, refSeries);\n const radius = getRadiusValue(datum, radiusDomain, autoRange, refSeries);\n lines.push([{ angle, radius }]);\n } else if (isValidAngle) {\n const angle = getAngleValue(datum, angleDomain, autoRange, refSeries);\n lines.push([\n {\n angle,\n radius: -regionRadius\n },\n {\n angle,\n radius: regionRadius\n }\n ]);\n } else if (isValidRadius) {\n const radius = getRadiusValue(datum, radiusDomain, autoRange, refSeries);\n lines.push([\n {\n radius,\n angle: 0\n },\n {\n radius,\n angle: Math.PI * 2\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function geoLayout(data: DataView, relativeSeries: IMarkerSupportSeries) {\n const lines: IPoint[][] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n dataPoints.forEach((datum: any) => {\n const isValidName = isValid(datum.areaName);\n if (isValidName) {\n lines.push([\n {\n x:\n (relativeSeries as IGeoSeries).nameValueToPosition(datum.areaName).x +\n relativeSeries.getRegion().getLayoutStartPoint().x,\n y:\n (relativeSeries as IGeoSeries).nameValueToPosition(datum.areaName).y +\n relativeSeries.getRegion().getLayoutStartPoint().y\n }\n ]);\n }\n });\n\n return lines;\n}\n\nexport function cartesianCoordinateLayout(\n data: DataView,\n relativeSeries: IMarkerSupportSeries,\n autoRange: boolean,\n coordinatesOffset: OffsetPoint[] | OffsetPoint\n) {\n const points: IPoint[] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n const isArrayCoordinatesOffset = isArray(coordinatesOffset);\n dataPoints.forEach(\n (\n datum: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n },\n index: number\n ) => {\n const refRelativeSeries = (\n datum?.getRefRelativeSeries ? datum.getRefRelativeSeries() : relativeSeries\n ) as ICartesianSeries;\n const regionStart = refRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n\n const { width: regionWidth, height: regionHeight } = regionStart.getLayoutRect();\n\n let offsetX = 0;\n let offsetY = 0;\n if (coordinatesOffset) {\n const currentCoordinatesOffset = isArrayCoordinatesOffset ? coordinatesOffset[index] : coordinatesOffset;\n const x = currentCoordinatesOffset.x;\n const y = currentCoordinatesOffset.y;\n if (x) {\n offsetX = isPercent(x) ? (Number(x.substring(0, x.length - 1)) * regionWidth) / 100 : (x as number);\n }\n if (y) {\n offsetY = isPercent(y) ? (Number(y.substring(0, y.length - 1)) * regionHeight) / 100 : (y as number);\n }\n }\n\n const xDomain = refRelativeSeries.getXAxisHelper().getScale(0).domain();\n const yDomain = refRelativeSeries.getYAxisHelper().getScale(0).domain();\n const xValue = array(datum.x);\n const yValue = array(datum.y);\n\n xValue.length === 1 &&\n isNumber(xValue[0]) &&\n isNeedExtendDomain(xDomain, xValue[0], autoRange) &&\n refRelativeSeries.getXAxisHelper()?.setExtendDomain?.('marker_xAxis_extend', xValue[0] as number);\n\n yValue.length === 1 &&\n isNumber(yValue[0]) &&\n isNeedExtendDomain(yDomain, yValue[0], autoRange) &&\n refRelativeSeries.getYAxisHelper()?.setExtendDomain?.('marker_yAxis_extend', yValue[0] as number);\n points.push({\n x: refRelativeSeries.getXAxisHelper().dataToPosition(xValue) + regionStartLayoutStartPoint.x + offsetX,\n y: refRelativeSeries.getYAxisHelper().dataToPosition(yValue) + regionStartLayoutStartPoint.y + offsetY\n });\n }\n );\n return points;\n}\n\nexport function polarCoordinateLayout(data: DataView, relativeSeries: IMarkerSupportSeries, autoRange: boolean) {\n const points: IPolarPoint[] = [];\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n dataPoints.forEach(\n (datum: {\n angle: StringOrNumber[] | StringOrNumber | null;\n radius: StringOrNumber[] | StringOrNumber | null;\n getRefRelativeSeries?: () => ICartesianSeries;\n }) => {\n const refRelativeSeries = (\n datum?.getRefRelativeSeries ? datum.getRefRelativeSeries() : relativeSeries\n ) as IPolarSeries;\n\n const angleDomain = refRelativeSeries.angleAxisHelper.getScale(0).domain();\n const radiusDomain = refRelativeSeries.radiusAxisHelper.getScale(0).domain();\n const angleValue = array(datum.angle);\n const radiusValue = array(datum.radius);\n\n angleValue.length === 1 &&\n isNumber(angleValue[0]) &&\n isNeedExtendDomain(angleDomain, angleValue[0], autoRange) &&\n refRelativeSeries.angleAxisHelper?.setExtendDomain?.('marker_xAxis_extend', angleValue[0] as number);\n\n radiusValue.length === 1 &&\n isNumber(radiusValue[0]) &&\n isNeedExtendDomain(radiusDomain, radiusValue[0], autoRange) &&\n refRelativeSeries.radiusAxisHelper?.setExtendDomain?.('marker_yAxis_extend', radiusValue[0] as number);\n points.push({\n angle: refRelativeSeries.angleAxisHelper.dataToPosition(angleValue),\n radius: refRelativeSeries.radiusAxisHelper.dataToPosition(radiusValue)\n });\n }\n );\n return points;\n}\n\nfunction convertPosition(position: MarkerPositionPoint, relativeWidth: number, relativeHeight: number): IPoint {\n let { x, y } = position;\n if (isPercent(x)) {\n x = convertPercentToValue(x, relativeWidth);\n }\n if (isPercent(y)) {\n y = convertPercentToValue(y, relativeHeight);\n }\n\n return {\n x: x as number,\n y: y as number\n };\n}\n\nexport function positionLayout(\n positions:\n | MarkerPositionPoint\n | MarkerPositionPoint[]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint)\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint[]),\n series: IMarkerSupportSeries,\n regionRelative: boolean\n): IPoint[] {\n let transformPositions;\n if (isFunction(positions)) {\n transformPositions = array(positions(series.getData().getLatestData(), series));\n } else {\n transformPositions = array(positions);\n }\n\n if (regionRelative) {\n const region = series.getRegion();\n const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint();\n const { width: regionWidth, height: regionHeight } = region.getLayoutRect();\n return transformPositions.map(position => {\n let { x, y } = convertPosition(position, regionWidth, regionHeight);\n\n x = (x as number) + regionStartX;\n y = (y as number) + regionStartY;\n\n return {\n x,\n y\n };\n });\n }\n\n const { width: canvasWidth, height: canvasHeight } = series.getOption().getChart().getViewRect();\n return transformPositions.map(position => {\n return convertPosition(position, canvasWidth, canvasHeight);\n });\n}\n\nexport function computeClipRange(regions: IRegion[]) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n regions.forEach((region: IRegion) => {\n const regionPos = region.getLayoutStartPoint();\n const regionRect = region.getLayoutRect();\n if (regionPos.x < minX) {\n minX = regionPos.x;\n }\n if (regionPos.x + regionRect.width > maxX) {\n maxX = regionPos.x + regionRect.width;\n }\n if (regionPos.y < minY) {\n minY = regionPos.y;\n }\n if (regionPos.y + regionRect.height > maxY) {\n maxY = regionPos.y + regionRect.height;\n }\n });\n return { minX, maxX, minY, maxY };\n}\n\nexport function transformLabelAttributes(\n label: IMarkerLabelSpec,\n markerData: any,\n markAttributeContext: IMarkerAttributeContext\n) {\n const { labelBackground = {}, style, shape, ...restLabel } = label;\n\n if (label.visible !== false) {\n const labelAttrs = restLabel as any;\n\n if (shape?.visible) {\n labelAttrs.shape = {\n visible: true,\n ...transformToGraphic(shape.style)\n };\n } else {\n labelAttrs.shape = {\n visible: false\n };\n }\n\n if (labelBackground.visible !== false) {\n labelAttrs.panel = {\n visible: true,\n customShape: labelBackground.customShape,\n ...transformStyle(transformToGraphic(labelBackground.style), markerData, markAttributeContext)\n };\n if (isValid(labelBackground.padding)) {\n labelAttrs.padding = normalizePadding(labelBackground.padding);\n }\n } else {\n labelAttrs.panel = {\n visible: false\n };\n labelAttrs.padding = 0;\n }\n\n if (style) {\n labelAttrs.textStyle = transformStyle(transformToGraphic(style), markerData, markAttributeContext);\n }\n return labelAttrs;\n }\n return {\n visible: false\n };\n}\n\nexport function transformState(\n state: {} | Record>,\n markerData: DataView,\n markerAttributeContext: IMarkerAttributeContext\n) {\n for (const stateKey in state) {\n if (isFunction(state[stateKey])) {\n state[stateKey] = state[stateKey](markerData, markerAttributeContext);\n }\n }\n return state;\n}\n\nexport function transformStyle(style: any, markerData: DataView, markerAttributeContext: IMarkerAttributeContext) {\n if (isFunction(style)) {\n return style(markerData, markerAttributeContext);\n }\n return style;\n}\n\nexport function transformOffset(offset: string | number | Function, region: IRegion) {\n if (isFunction(offset)) {\n return offset(region);\n }\n return offset;\n}\n\nexport function computeOffsetFromRegion(point: IPointLike, offset: string | number, region: IRegion): number {\n if (!isValid(point)) {\n return offset as number;\n }\n if (offset === 'regionLeft') {\n return region.getLayoutStartPoint().x - point.x;\n } else if (offset === 'regionRight') {\n return region.getLayoutStartPoint().x + region.getLayoutRect().width - point.x;\n } else if (offset === 'regionTop') {\n return region.getLayoutStartPoint().y - point.y;\n } else if (offset === 'regionBottom') {\n return region.getLayoutStartPoint().y + region.getLayoutRect().height - point.y;\n }\n return offset as number;\n}\n\nexport function getMarkLineProcessInfo(spec: any) {\n const isXProcess = 'x' in spec;\n const isYProcess = 'y' in spec;\n const isX1Process = 'x1' in spec;\n const isY1Process = 'y1' in spec;\n const isAngleProcess = 'angle' in spec;\n const isRadiusProcess = 'radius' in spec;\n const isAngle1Process = 'angle1' in spec;\n const isRadius1Process = 'radius1' in spec;\n const isCoordinatesProcess = 'coordinates' in spec;\n const isValidProcess = 'process' in spec;\n\n return {\n doXProcess: isXProcess && !isYProcess && !isY1Process,\n doXYY1Process: isXProcess && isYProcess && isY1Process,\n doYProcess: isYProcess && !isXProcess && !isX1Process,\n doYXX1Process: isYProcess && isXProcess && isX1Process,\n doXYProcess: isXProcess && isYProcess && isX1Process && isY1Process,\n doAngleProcess: isAngleProcess && !isAngle1Process && !isRadiusProcess && !isRadius1Process,\n doRadiusProcess: isRadiusProcess && !isRadius1Process && !isAngleProcess && !isAngle1Process,\n doAngRadRad1Process: isAngleProcess && !isAngle1Process && isRadiusProcess && isRadius1Process,\n doRadAngAng1Process: isRadiusProcess && isAngleProcess && isAngle1Process && !isRadius1Process,\n doRadAngProcess: isAngleProcess && isRadiusProcess && isAngle1Process && isRadius1Process,\n doCoordinatesProcess: isCoordinatesProcess && (!isValidProcess || ('process' in spec && 'xy' in spec.process))\n };\n}\n\nexport function getMarkAreaProcessInfo(spec: any) {\n const isXProcess = 'x' in spec;\n const isX1Process = 'x1' in spec;\n const isYProcess = 'y' in spec;\n const isY1Process = 'y1' in spec;\n const isAngleProcess = 'angle' in spec;\n const isRadiusProcess = 'radius' in spec;\n const isAngle1Process = 'angle1' in spec;\n const isRadius1Process = 'radius1' in spec;\n const isCoordinatesProcess = 'coordinates' in spec;\n return {\n doXProcess: isXProcess && isX1Process && !isYProcess && !isY1Process,\n doYProcess: isYProcess && isY1Process && !isXProcess && !isX1Process,\n doXYProcess: isXProcess && isX1Process && isYProcess && isY1Process,\n doAngleProcess: isAngleProcess && isAngle1Process && !isRadiusProcess && !isRadius1Process,\n doRadiusProcess: isRadiusProcess && isRadius1Process && !isAngleProcess && !isAngle1Process,\n doRadAngProcess: isAngleProcess && isRadiusProcess && isAngle1Process && isRadius1Process,\n doCoordinatesProcess: isCoordinatesProcess\n };\n}\n\nexport function getMarkPointProcessInfo(spec: any) {\n const isXYProcess = isValid(spec.x) && isValid(spec.y);\n const isPolarProcess = isValid(spec.angle) && isValid(spec.radius);\n const isGeoProcess = isValid(spec.areaName);\n return {\n doXYProcess: isXYProcess,\n doPolarProcess: isPolarProcess,\n doGeoProcess: isGeoProcess\n };\n}\n","import {\n registerArc,\n registerGroup,\n registerImage,\n registerLine,\n registerPolygon,\n registerSymbol\n} from '@visactor/vrender-kits';\nimport { loadTagComponent } from '../tag/register';\nimport { loadArcSegmentComponent, loadSegmentComponent } from '../segment/register';\nfunction loadBaseMarker() {\n registerGroup();\n loadTagComponent();\n}\n\nexport function loadMarkLineComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n}\n\nexport function loadMarkArcLineComponent() {\n loadBaseMarker();\n loadArcSegmentComponent();\n}\n\nexport function loadMarkAreaComponent() {\n loadBaseMarker();\n registerPolygon();\n}\n\nexport function loadMarkArcAreaComponent() {\n loadBaseMarker();\n registerArc();\n}\n\nexport function loadMarkPointComponent() {\n loadBaseMarker();\n loadSegmentComponent();\n loadArcSegmentComponent();\n registerSymbol();\n registerImage();\n registerLine();\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IBoundsLike } from '@visactor/vutils';\n\nexport function computeOffsetForlimit(shape: IGraphic, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n return {\n dx,\n dy\n };\n}\nexport function limitShapeInBounds(shape: IGraphic, bounds: IBoundsLike) {\n const { dx, dy } = computeOffsetForlimit(shape, bounds);\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n","import type { FederatedPointerEvent, IGraphic, IGroup, IImage, IRichText, ISymbol } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { Tag } from '../tag';\nimport type { MarkerAnimationState, MarkerAttrs, MarkerExitAnimation, MarkerUpdateAnimation } from './type';\nimport { dispatchClickState, dispatchHoverState, dispatchUnHoverState } from '../util/interaction';\nimport { isObject, merge } from '@visactor/vutils';\n\nexport abstract class Marker, AnimationAttr> extends AbstractComponent<\n Required\n> {\n name = 'marker';\n\n private _containerClip!: IGroup;\n protected _container!: IGroup;\n\n protected _label!: Tag;\n\n /** animate */\n static _animate?: (\n marker: any,\n label: Tag | IRichText | ISymbol | IImage,\n animationConfig: any,\n state: MarkerAnimationState\n ) => void;\n\n defaultUpdateAnimation!: MarkerUpdateAnimation;\n defaultExitAnimation!: MarkerExitAnimation;\n\n protected _animationConfig?: {\n enter: MarkerUpdateAnimation;\n exit: MarkerExitAnimation;\n update: MarkerUpdateAnimation;\n };\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract setLabelPos(): any;\n protected abstract initMarker(container: IGroup): any;\n protected abstract updateMarker(): any;\n protected abstract isValidPoints(): any;\n protected abstract markerAnimate(state: MarkerAnimationState): void;\n\n private transAnimationConfig(): void {\n if (this.attribute.animation !== false) {\n const animation = isObject(this.attribute.animation) ? this.attribute.animation : {};\n this._animationConfig = {\n enter: merge(\n {},\n this.defaultUpdateAnimation,\n animation,\n this.attribute.animationEnter ?? {}\n ) as MarkerUpdateAnimation,\n exit: merge({}, this.defaultExitAnimation, animation, this.attribute.animationExit ?? {}),\n update: merge(\n {},\n this.defaultUpdateAnimation,\n animation,\n this.attribute.animationUpdate ?? {}\n ) as MarkerUpdateAnimation\n };\n }\n }\n setAttribute(key: string, value: any, forceUpdateTag?: boolean | undefined): void {\n super.setAttribute(key, value, forceUpdateTag);\n if (key === 'visible') {\n this.render();\n }\n }\n\n private _bindEvent() {\n if (!this.attribute.interactive) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._container?.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._container?.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._container?.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _releaseEvent() {\n this._container?.removeEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._container?.removeEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n this._container?.removeEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchHoverState(e, this._container, this._lastHover);\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n this._lastHover = dispatchUnHoverState(e, this._container, this._lastHover);\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n this._lastSelect = dispatchClickState(e, this._container, this._lastSelect);\n };\n\n private _initContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n let group;\n if (clipInRange) {\n // 如果用户配置了剪切\n const groupClip = graphicCreator.group({\n ...limitRect,\n clip: true,\n pickable: false\n });\n group = graphicCreator.group({\n x: -(limitRect.x ?? 0),\n y: -(limitRect.y ?? 0),\n pickable: false\n });\n groupClip.add(group);\n this._containerClip = groupClip;\n this.add(groupClip);\n } else {\n group = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n this.add(group);\n }\n group.name = 'marker-container';\n this._container = group;\n }\n\n private _updateContainer() {\n const { limitRect = {} as T['limitRect'], clipInRange } = this.attribute;\n if (this._containerClip) {\n this._containerClip.setAttributes({\n ...limitRect\n });\n }\n\n this._container.setAttributes({\n x: clipInRange ? -(limitRect.x ?? 0) : 0,\n y: clipInRange ? -(limitRect.y ?? 0) : 0\n });\n }\n\n protected render() {\n this.transAnimationConfig();\n\n // 因为标注本身不规则,所以默认将组件的 group 设置为不可拾取\n this.setAttribute('pickable', false);\n\n const markerVisible = this.attribute.visible ?? true;\n if (this.attribute.interactive === false) {\n this.setAttribute('childrenPickable', false);\n }\n\n if (markerVisible && this.isValidPoints()) {\n if (!this._container) {\n this._initContainer();\n this.initMarker(this._container);\n this.markerAnimate('enter');\n } else {\n this._updateContainer();\n this.updateMarker();\n this.markerAnimate('update');\n }\n } else {\n this.markerAnimate('exit');\n this._container = null;\n this.removeAllChild(true);\n }\n\n // 先把之前的event都release掉,否则会重复触发\n this._releaseEvent();\n this._bindEvent();\n }\n\n release(): void {\n this.markerAnimate('exit');\n super.release();\n this._releaseEvent();\n this._container = null;\n }\n}\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\n\n/** fade-in */\nexport function graphicFadeIn(graphic: IGraphic, delay: number, duration: number, easing: EasingType) {\n if (!graphic) {\n return;\n }\n graphic?.animates?.forEach(a => a.stop('end'));\n const fillOpacityConfig = graphic.attribute?.fillOpacity ?? 1;\n const strokeOpacityConfig = graphic.attribute?.strokeOpacity ?? 1;\n\n graphic.setAttributes({\n fillOpacity: 0,\n strokeOpacity: 0\n });\n\n graphic.animate().wait(delay).to(\n {\n fillOpacity: fillOpacityConfig,\n strokeOpacity: strokeOpacityConfig\n },\n duration,\n easing\n );\n}\n\nexport function segmentFadeIn(segment: Segment, delay: number, duration: number, easing: EasingType) {\n if (!segment) {\n return;\n }\n\n // start symbol\n graphicFadeIn(segment.startSymbol, delay, duration, easing);\n\n // line\n segment.lines.forEach(line => graphicFadeIn(line, delay, duration, easing));\n graphicFadeIn((segment as ArcSegment).line, delay, duration, easing);\n\n // end symbol\n graphicFadeIn(segment.endSymbol, delay, duration, easing);\n}\n\nexport function tagFadeIn(tag: Tag, delay: number, duration: number, easing: EasingType) {\n if (!tag) {\n return;\n }\n\n // text\n graphicFadeIn(tag.getTextShape(), delay, duration, easing);\n\n // text background\n graphicFadeIn(tag.getBgRect(), delay, duration, easing);\n}\n\n/** fade-out */\nexport function graphicFadeOut(graphic: IGraphic, delay: number, duration: number, easing: EasingType) {\n if (!graphic) {\n return;\n }\n\n graphic.setAttributes({\n fillOpacity: graphic.attribute?.fillOpacity ?? 1,\n strokeOpacity: graphic.attribute?.strokeOpacity ?? 1\n });\n\n graphic.animate().wait(delay).to({ fillOpacity: 0, strokeOpacity: 0 }, duration, easing);\n}\n\nexport function segmentFadeOut(segment: Segment | ArcSegment, delay: number, duration: number, easing: EasingType) {\n if (!segment) {\n return;\n }\n\n // start symbol\n graphicFadeOut(segment.startSymbol, delay, duration, easing);\n\n // line\n segment.lines.forEach(line => graphicFadeOut(line, delay, duration, easing));\n graphicFadeOut((segment as ArcSegment).line, delay, duration, easing);\n\n // end symbol\n graphicFadeOut(segment.endSymbol, delay, duration, easing);\n}\n\nexport function tagFadeOut(tag: Tag, delay: number, duration: number, easing: EasingType) {\n if (!tag) {\n return;\n }\n\n // text\n graphicFadeOut(tag.getTextShape(), delay, duration, easing);\n\n // text background\n graphicFadeOut(tag.getBgRect(), delay, duration, easing);\n}\n","import type { EasingType } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn } from './common';\n\nexport function commonLineClipIn(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n const startSymbolDuration = 0.1 * duration;\n const lineDuration = 0.7 * duration;\n const endSymbolDuration = 0.1 * duration;\n const labelDuration = 0.1 * duration;\n\n // start symbol\n graphicFadeIn(line.startSymbol, delay, startSymbolDuration, easing);\n\n // line\n line.lines.forEach(line => line.setAttribute('clipRange', 0));\n line.lines.forEach((l, index) => {\n const stepDuration = lineDuration / line.lines.length;\n l.animate()\n .wait(delay + startSymbolDuration + index * stepDuration)\n .to({ clipRange: 1 }, stepDuration, easing);\n });\n\n // end symbol\n graphicFadeIn(line.endSymbol, delay + startSymbolDuration + lineDuration, endSymbolDuration, easing);\n\n // text\n graphicFadeIn(\n label.getTextShape(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n\n // text background\n graphicFadeIn(\n label.getBgRect(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n}\n","import type { EasingType, IArc, IImage, ILine, IPolygon, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn, segmentFadeIn, tagFadeIn } from './common';\n\nexport function commonLineFadeIn(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeIn(line, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function areaFadeIn(area: IPolygon, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeIn(area, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function arcAreaFadeIn(area: IArc, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeIn(area, delay, duration, easing);\n tagFadeIn(label, delay, duration, easing);\n}\n\nexport function pointFadeIn(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeIn(itemLine, delay, duration, easing);\n graphicFadeIn(decorativeLine, delay, duration, easing);\n if (item.getTextShape?.()) {\n // tag\n tagFadeIn(item as Tag, delay, duration, easing);\n } else {\n // symbol / richText / image\n graphicFadeIn(item, delay, duration, easing);\n }\n}\n","import type { EasingType, IArc, IImage, ILine, IPolygon, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeOut, segmentFadeOut, tagFadeOut } from './common';\n\nexport function commonLineFadeOut(\n line: Segment | ArcSegment,\n label: Tag,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeOut(line, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function areaFadeOut(area: IPolygon, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeOut(area, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function arcAreaFadeOut(area: IArc, label: Tag, duration: number, delay: number, easing: EasingType) {\n graphicFadeOut(area, delay, duration, easing);\n tagFadeOut(label, delay, duration, easing);\n}\n\nexport function pointFadeOut(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n segmentFadeOut(itemLine, delay, duration, easing);\n graphicFadeOut(decorativeLine, delay, duration, easing);\n if (item.getTextShape?.()) {\n // tag\n tagFadeOut(item as Tag, delay, duration, easing);\n } else {\n // symbol / richText / image\n graphicFadeOut(item, delay, duration, easing);\n }\n}\n","import type { EasingType, IImage, ILine, IRichText, ISymbol } from '@visactor/vrender-core';\nimport type { Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport { graphicFadeIn } from './common';\n\nexport function pointCallIn(\n itemLine: Segment,\n decorativeLine: ILine,\n item: Tag | IRichText | ISymbol | IImage,\n duration: number,\n delay: number,\n easing: EasingType\n) {\n const startSymbolDuration = 0.1 * duration;\n const lineDuration = 0.65 * duration;\n const decorativeDuration = 0.05 * duration;\n const endSymbolDuration = 0.1 * duration;\n const labelDuration = 0.1 * duration;\n\n // start symbol\n graphicFadeIn(itemLine.startSymbol, delay, startSymbolDuration, easing);\n\n // line\n itemLine.lines.forEach(line => line.setAttribute('clipRange', 0));\n itemLine.lines.forEach((l, index) => {\n const stepDuration = lineDuration / itemLine.lines.length;\n l.animate()\n .wait(delay + startSymbolDuration + index * stepDuration)\n .to({ clipRange: 1 }, stepDuration, easing);\n });\n\n graphicFadeIn(decorativeLine, delay + startSymbolDuration + lineDuration, decorativeDuration, easing);\n\n // end symbol\n graphicFadeIn(\n itemLine.endSymbol,\n delay + startSymbolDuration + lineDuration + decorativeDuration,\n endSymbolDuration,\n easing\n );\n\n if (item.getTextShape?.()) {\n // text\n graphicFadeIn(\n item.getTextShape(),\n delay + startSymbolDuration + lineDuration + decorativeDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n\n // text background\n graphicFadeIn(\n item.getBgRect(),\n delay + startSymbolDuration + lineDuration + endSymbolDuration,\n labelDuration,\n easing\n );\n } else {\n graphicFadeIn(item, delay + startSymbolDuration + lineDuration + endSymbolDuration, labelDuration, easing);\n }\n}\n","import type { IRichText, ISymbol, IImage, IArc } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILine, IPolygon } from '@visactor/vrender-core';\nimport type { ArcSegment, Segment } from '../../segment';\nimport type { Tag } from '../../tag';\nimport type {\n CommonMarkAreaAnimationType,\n MarkCommonLineAnimationType,\n MarkPointAnimationType,\n MarkerAnimationState,\n MarkerExitAnimation,\n MarkerUpdateAnimation\n} from '../type';\nimport { commonLineClipIn } from './clip-in';\nimport { areaFadeIn, commonLineFadeIn, arcAreaFadeIn, pointFadeIn } from './fade-in';\nimport { areaFadeOut, commonLineFadeOut, arcAreaFadeOut, pointFadeOut } from './fade-out';\nimport { pointCallIn } from './call-in';\n\nexport function markCommonLineAnimate(\n line: Segment | ArcSegment,\n label: Tag,\n animationconfig: any,\n state: MarkerAnimationState\n) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'clipIn') {\n commonLineClipIn(line, label, duration, delay, easing);\n } else if (type === 'fadeIn') {\n commonLineFadeIn(line, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'clipIn') {\n commonLineClipIn(line, label, duration, delay, easing);\n } else if (type === 'fadeIn') {\n commonLineFadeIn(line, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n commonLineFadeOut(line, label, duration, delay, easing);\n }\n}\n\nexport function markAreaAnimate(area: IPolygon, label: Tag, animationconfig: any, state: MarkerAnimationState) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n areaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n areaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n areaFadeOut(area, label, duration, delay, easing);\n }\n}\n\nexport function markArcAreaAnimate(area: IArc, label: Tag, animationconfig: any, state: MarkerAnimationState) {\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n arcAreaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n arcAreaFadeIn(area, label, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n arcAreaFadeOut(area, label, duration, delay, easing);\n }\n}\n\nexport function markPointAnimate(\n lines: [Segment, ILine],\n item: Tag | IRichText | ISymbol | IImage,\n animationconfig: any,\n state: MarkerAnimationState\n) {\n const [itemLine, decorativeLine] = lines;\n const { enter, update, exit } = animationconfig;\n if (state === 'enter') {\n const { type, duration, delay, easing } = enter;\n if (type === 'fadeIn') {\n pointFadeIn(itemLine, decorativeLine, item, duration, delay, easing);\n } else if (type === 'callIn') {\n pointCallIn(itemLine, decorativeLine, item, duration, delay, easing);\n }\n } else if (state === 'update') {\n const { type, duration, delay, easing } = update;\n if (type === 'fadeIn') {\n pointFadeIn(itemLine, decorativeLine, item, duration, delay, easing);\n } else if (type === 'callIn') {\n pointCallIn(itemLine, decorativeLine, item, duration, delay, easing);\n }\n } else if (state === 'exit') {\n const { duration, delay, easing } = exit;\n pointFadeOut(itemLine, decorativeLine, item, duration, delay, easing);\n }\n}\n\nexport const DefaultUpdateMarkLineAnimation: MarkerUpdateAnimation = {\n type: 'clipIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultUpdateMarkAreaAnimation: MarkerUpdateAnimation = {\n type: 'fadeIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultUpdateMarkPointAnimation: MarkerUpdateAnimation = {\n type: 'callIn',\n duration: 500,\n easing: 'linear',\n delay: 0\n} as any;\n\nexport const DefaultExitMarkerAnimation: MarkerExitAnimation = {\n type: 'fadeOut',\n duration: 500,\n easing: 'linear',\n delay: 0\n};\n","import type { IGroup, INode } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { ArcSegment, Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport type { MarkCommonLineAnimationType, MarkCommonLineAttrs, MarkerAnimationState } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport { DEFAULT_STATES } from '../constant';\nimport { Marker } from './base';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkLineAnimation } from './animate/animate';\n\nexport abstract class MarkCommonLine extends Marker<\n MarkCommonLineAttrs,\n MarkCommonLineAnimationType\n> {\n name = 'markCommonLine';\n\n /** animate */\n static _animate?: (line: Segment | ArcSegment, label: Tag, animationConfig: any, state: MarkerAnimationState) => void;\n defaultUpdateAnimation = DefaultUpdateMarkLineAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n\n protected _line!: Segment | ArcSegment;\n protected abstract createSegment(): any;\n protected abstract setLineAttributes(): any;\n protected abstract getPointAttrByPosition(position: any): any;\n protected abstract getRotateByAngle(angle: number): number;\n protected abstract getTextStyle(position: any, labelAngle: number, autoRotate: boolean): any;\n protected abstract markerAnimate(state: MarkerAnimationState): void;\n\n getLine() {\n return this._line;\n }\n getLabel() {\n return this._label;\n }\n\n protected setLabelPos(): void {\n const { label = {}, limitRect } = this.attribute;\n const { position, confine, autoRotate } = label;\n const labelPoint = this.getPointAttrByPosition(position);\n const labelAngle = position.toString().toLocaleLowerCase().includes('start')\n ? this._line.getStartAngle() || 0\n : this._line.getEndAngle() || 0;\n this._label.setAttributes({\n ...labelPoint.position,\n angle: autoRotate ? this.getRotateByAngle(labelPoint.angle) : 0,\n textStyle: {\n ...this.getTextStyle(position, labelAngle, autoRotate),\n ...label.textStyle\n }\n });\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n\n protected initMarker(container: IGroup) {\n const { label, state } = this.attribute as MarkCommonLineAttrs<\n LineAttr,\n LabelPosition,\n MarkCommonLineAnimationType\n >;\n const line = this.createSegment();\n line.name = 'mark-common-line-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-common-line-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { label, state } = this.attribute as MarkCommonLineAttrs<\n LineAttr,\n LabelPosition,\n MarkCommonLineAnimationType\n >;\n\n this.setLineAttributes();\n\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n this.setLabelPos();\n }\n }\n}\n","import type {\n EasingType,\n IArcGraphicAttribute,\n IGroup,\n IGroupGraphicAttribute,\n IImageGraphicAttribute,\n ILineGraphicAttribute,\n IPolygonAttribute,\n IPolygonGraphicAttribute,\n IRectGraphicAttribute,\n IRichTextGraphicAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { CommonSegmentAttributes, ILineGraphicWithCornerRadius, SegmentAttributes } from '../segment/type';\nimport type { TagAttributes } from '../tag/type';\nimport type { Point, State } from '../core/type';\n\nexport enum IMarkLineLabelPosition {\n start = 'start',\n startTop = 'startTop',\n startBottom = 'startBottom',\n insideStart = 'insideStart',\n insideStartTop = 'insideStartTop',\n insideStartBottom = 'insideStartBottom',\n\n middle = 'middle',\n insideMiddleTop = 'insideMiddleTop',\n insideMiddleBottom = 'insideMiddleBottom',\n\n end = 'end',\n endTop = 'endTop',\n endBottom = 'endBottom',\n insideEnd = 'insideEnd',\n insideEndTop = 'insideEndTop',\n insideEndBottom = 'insideEndBottom'\n}\n\nexport enum IMarkAreaLabelPosition {\n left = 'left',\n right = 'right',\n top = 'top',\n bottom = 'bottom',\n topLeft = 'topLeft',\n topRight = 'topRight',\n bottomLeft = 'bottomLeft',\n bottomRight = 'bottomRight',\n\n middle = 'middle',\n\n insideLeft = 'insideLeft',\n insideRight = 'insideRight',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom',\n insideTopLeft = 'insideTopLeft',\n insideTopRight = 'insideTopRight',\n insideBottomLeft = 'insideBottomLeft',\n insideBottomRight = 'insideBottomRight'\n}\n\nexport enum IMarkCommonArcLabelPosition {\n arcInnerStart = 'arcInnerStart',\n arcInnerEnd = 'arcInnerEnd',\n arcInnerMiddle = 'arcInnerMiddle',\n arcOuterStart = 'arcOuterStart',\n arcOuterEnd = 'arcOuterEnd',\n arcOuterMiddle = 'arcOuterMiddle',\n center = 'center'\n}\n\nexport enum IMarkPointItemPosition {\n top = 'top',\n bottom = 'bottom',\n middle = 'middle',\n insideTop = 'insideTop',\n insideBottom = 'insideBottom',\n insideMiddle = 'insideMiddle'\n}\n\nexport type IMarkBackgroundAttributes = {\n /**\n * 是否绘制背景层\n */\n visible: boolean;\n /**\n * TODO: 根据文字宽度进行背景 panel size自适应\n */\n autoHeight?: boolean;\n /**\n * TODO: 根据文高度度进行背景 panel size自适应\n */\n autoWidth?: boolean;\n} & Partial;\n\nexport type IMarkLabel = Omit & {\n /**\n * 标签的背景面板配置\n */\n panel?: IMarkBackgroundAttributes;\n};\n\nexport type IMarkRef = {\n /**\n * 自动旋转,沿着线的方向\n * @default\n * mark-line/mark-area/mark-point: false - 旧逻辑里autoRotate是false, 保持不变\n * mark-arc-line/mark-arc-area: true - 新增逻辑, 如果不开启的话, 效果不太好, 所以默认true\n * mark-point - 旧逻辑里autoRotate是true, 保持不变\n */\n autoRotate?: boolean;\n /**\n * label 相对line平行方向上的偏移\n */\n refX?: number;\n /**\n * label 相对line正交方向上的偏移\n */\n refY?: number;\n /**\n * label 相对默认角度的偏移 (label跟随line的角度做自动旋转时,默认按照line的平行向量作为初始角度)\n */\n refAngle?: number;\n};\n\nexport type MarkerAttrs = IGroupGraphicAttribute & {\n type?: 'line' | 'arc-line' | 'area' | 'arc-area' | 'point';\n /**\n * 是否支持交互\n * @default true\n */\n interactive?: boolean;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 是否显示marker组件\n * @default true\n */\n visible?: boolean;\n /**\n * 是否将组件在绘制区域内进行剪切\n * @default true\n */\n clipInRange?: boolean;\n /**\n * 组件绘制范围配置\n */\n limitRect?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n} & BaseMarkerAnimation;\n\n/** animation type */\nexport type BaseMarkerAnimation = {\n animation?: MarkerAnimation | boolean;\n animationEnter?: MarkerUpdateAnimation;\n animationUpdate?: MarkerUpdateAnimation;\n animationExit?: MarkerExitAnimation;\n};\nexport type MarkerAnimation = MarkerUpdateAnimation | MarkerUpdateAnimation;\n\nexport type MarkerUpdateAnimation = {\n type: T;\n} & MarkerExitAnimation;\n\nexport type MarkCommonLineAnimationType = 'clipIn' | 'fadeIn';\n\nexport type CommonMarkAreaAnimationType = 'fadeIn';\n\nexport type MarkPointAnimationType = 'callIn' | 'fadeIn';\n\nexport type MarkerExitAnimation = {\n type: 'fadeOut';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n};\n\nexport type MarkerAnimationState = 'enter' | 'update' | 'exit';\n\n/** state type */\nexport type MarkCommonLineState = {\n line?: State;\n lineStartSymbol?: State>;\n lineEndSymbol?: State>;\n label?: State>;\n labelBackground?: State>;\n};\n\nexport type CommonMarkAreaState = {\n area?: State>;\n label?: State>;\n labelBackground?: State>;\n};\n\nexport type MarkPointState = {\n line?: State[]>;\n lineStartSymbol?: State>;\n lineEndSymbol?: State>;\n symbol?: State>;\n image?: State>;\n text?: State>;\n textBackground?: State>;\n richText?: State>;\n customMark?: State>;\n targetItem?: State>;\n};\n\nexport type MarkCommonLineAttrs =\n MarkerAttrs &\n Omit & {\n /**\n * 标签\n */\n label?: {\n /**\n * label 相对line的位置\n */\n position?: LineLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkRef &\n IMarkLabel;\n state?: MarkCommonLineState;\n };\n\nexport type MarkLineAttrs = MarkCommonLineAttrs<\n ILineGraphicWithCornerRadius | ILineGraphicAttribute[],\n keyof typeof IMarkLineLabelPosition,\n MarkCommonLineAnimationType\n> & {\n type?: 'line';\n /**\n * 是否对 points 进行多段处理,默认为 false,即直接将所有的点连接成线。\n * 如果需要进行多段处理,需要将 points 属性配置为 Point[][] 类型\n * @default false\n */\n multiSegment?: boolean;\n /**\n * 在 `multiSegment` 属性开启的前提下,用于声明那一段线段用来作为主线段,如果不声明,默认全段为主线段\n */\n mainSegmentIndex?: number;\n /**\n * 构成line的点: 如果是两个点,则为直线;多个点则为曲线\n */\n points: Point[] | Point[][];\n lineStyle?: ILineGraphicAttribute;\n};\n\nexport type MarkArcLineAttrs = MarkCommonLineAttrs<\n IArcGraphicAttribute,\n keyof typeof IMarkCommonArcLabelPosition,\n MarkCommonLineAnimationType\n> & {\n type?: 'arc-line';\n /**\n * 弧线中心位置\n */\n center: {\n x: number;\n y: number;\n };\n /**\n * 弧线半径\n */\n radius: number;\n /**\n * 弧线起始角度(弧度)\n */\n startAngle: number;\n /**\n * 弧线终点角度(弧度)\n */\n endAngle: number;\n lineStyle?: IArcGraphicAttribute;\n};\n\nexport type MarkAreaAttrs = MarkerAttrs & {\n type?: 'area';\n /**\n * 构成area的点\n */\n points: Point[];\n /**\n * 标签\n */\n label?: {\n position?: keyof typeof IMarkAreaLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkLabel;\n /**\n * area的样式\n */\n areaStyle?: IPolygonAttribute;\n\n state?: CommonMarkAreaState;\n};\n\nexport type MarkArcAreaAttrs = MarkerAttrs & {\n type?: 'arc-area';\n /**\n * 扇区中心位置\n */\n center: {\n x: number;\n y: number;\n };\n /**\n * 扇区内半径\n */\n innerRadius: number;\n /**\n * 扇区外半径\n */\n outerRadius: number;\n /**\n * 扇区起始角度(弧度)\n */\n startAngle: number;\n /**\n * 扇区终点角度(弧度)\n */\n endAngle: number;\n /**\n * 标签\n */\n label?: {\n position?: keyof typeof IMarkCommonArcLabelPosition;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n } & IMarkRef &\n IMarkLabel;\n /**\n * area的样式\n */\n areaStyle?: IArcGraphicAttribute;\n\n state?: CommonMarkAreaState;\n};\n\nexport type IItemContent = IMarkRef & {\n /**\n * 标注类型\n * Tips: 保留'richText'与之前的定义做兼容\n */\n type?: 'symbol' | 'text' | 'image' | 'richText' | 'custom';\n position?: keyof typeof IMarkPointItemPosition;\n /**\n * x 方向偏移量\n */\n offsetX?: number;\n /**\n * y 方向偏移量\n */\n offsetY?: number;\n /**\n * type为symbol时, symbol的样式\n */\n symbolStyle?: ISymbolGraphicAttribute;\n /**\n * type为image时, image的样式\n */\n imageStyle?: IImageGraphicAttribute;\n /**\n * type为text时, text的配置\n * 'text'类型的ItemContent新增三种子类型:'text','rich','html'。配置在textStyle.type上,继承自TagAttributes。\n */\n textStyle?: IMarkLabel;\n /**\n * type为rich text时, rich text的样式\n */\n richTextStyle?: IRichTextGraphicAttribute;\n /**\n * type为custom时,允许以callback的方式传入需要render的item\n */\n renderCustomCallback?: () => IGroup;\n /**\n * 当 mark 配置了 limitRect 之后,label 是否自动调整位置\n * @default false\n */\n confine?: boolean;\n};\n\nexport type IItemLine = {\n /** TODO:'type-opo' */\n type?: 'type-s' | 'type-do' | 'type-po' | 'type-op' | 'type-arc';\n visible?: boolean;\n /**\n * 当type为type-arc时生效, 数值决定曲率, 符号决定法向, 不能等于0\n * @default 0.8\n */\n arcRatio?: number;\n /**\n * 垂直于引导线的装饰线,参考案例: https://observablehq.com/@mikelotis/edmonton-population-history-line-chart\n */\n decorativeLine?: {\n visible?: boolean;\n length?: number;\n };\n} & Omit;\n\nexport type MarkPointAttrs = Omit, 'labelStyle'> & {\n /**\n * markPoint的位置(也是path的起点)\n */\n position: Point;\n /**\n * 标注引导线\n */\n itemLine?: IItemLine;\n\n /**\n * 标注内容\n */\n itemContent?: IItemContent;\n\n /**\n * 被标注的内容\n */\n targetSymbol?: {\n /**\n * 被标注内容与标记线间的间隙\n * @default 0\n */\n offset?: number;\n /**\n * 是否显示\n * @default false\n */\n visible?: boolean;\n /**\n * 大小\n * @default 20\n */\n size?: number;\n style?: ISymbol;\n };\n\n state?: MarkPointState;\n} & BaseMarkerAnimation;\n","import type { TextAlignType, TextBaselineType } from '@visactor/vrender-core';\nimport { IMarkAreaLabelPosition, IMarkLineLabelPosition, IMarkCommonArcLabelPosition } from './type';\n\nexport const FUZZY_EQUAL_DELTA = 0.001;\nexport const DEFAULT_MARK_LINE_THEME = {\n interactive: true,\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n label: {\n position: IMarkLineLabelPosition.end,\n refX: 0,\n refY: 0,\n refAngle: 0,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n};\n\nexport const DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP: {\n [K: string]: {\n [T: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n };\n} = {\n postiveXAxis: {\n start: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n startTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n startBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideStart: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideStartTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideStartBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n insideMiddleTop: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideMiddleBottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n end: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n endTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n endBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideEnd: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideEndTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideEndBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n }\n },\n negativeXAxis: {\n start: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n startTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n startBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideStart: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideStartTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideStartBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n insideMiddleTop: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideMiddleBottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n end: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n endTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n endBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideEnd: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideEndTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideEndBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n }\n }\n};\n\nexport const DEFAULT_MARK_ARC_LINE_THEME = {\n interactive: true,\n startSymbol: {\n visible: false,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n endSymbol: {\n visible: true,\n symbolType: 'triangle',\n size: 12,\n fill: 'rgba(46, 47, 50)',\n lineWidth: 0\n },\n label: {\n position: IMarkCommonArcLabelPosition.arcOuterMiddle,\n refX: 0,\n refY: 0,\n refAngle: 0,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n lineStyle: {\n stroke: '#b2bacf',\n lineWidth: 1,\n lineDash: [2]\n }\n};\n\nexport const DEFAULT_MARK_AREA_THEME = {\n interactive: true,\n label: {\n position: IMarkAreaLabelPosition.right,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n areaStyle: {\n fill: '#b2bacf',\n visible: true\n }\n};\n\nexport const DEFAULT_MARK_ARC_AREA_THEME = {\n interactive: true,\n label: {\n position: IMarkCommonArcLabelPosition.arcOuterMiddle,\n textStyle: {\n fill: '#fff',\n stroke: '#fff',\n lineWidth: 0,\n fontSize: 10,\n fontWeight: 'normal',\n fontStyle: 'normal'\n },\n padding: [2, 2, 4, 4],\n panel: {\n visible: true,\n cornerRadius: 0,\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8\n }\n },\n areaStyle: {\n fill: '#b2bacf',\n visible: true\n }\n};\n\nexport const DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n arcInnerStart: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n arcInnerEnd: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n arcInnerMiddle: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n arcOuterStart: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n arcOuterEnd: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n arcOuterMiddle: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n center: {\n textAlign: 'center',\n textBaseline: 'middle'\n }\n};\n\nexport const DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP: {\n [K: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n} = {\n left: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideLeft: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n\n right: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideRight: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n\n top: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n insideTop: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n\n bottom: {\n textAlign: 'center',\n textBaseline: 'top'\n },\n insideBottom: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n\n middle: {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n\n topLeft: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideTopLeft: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n topRight: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideTopRight: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n bottomLeft: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideBottomLeft: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n bottomRight: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideBottomRight: {\n textAlign: 'right',\n textBaseline: 'bottom'\n }\n};\n\nexport const DEFAULT_MARK_POINT_THEME = {\n interactive: true,\n targetSymbol: {\n visible: false,\n offset: 0,\n style: {\n symbolType: 'circle',\n size: 20,\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n itemLine: {\n visible: true,\n decorativeLine: {\n visible: false,\n length: 30\n },\n startSymbol: {\n visible: true,\n clip: true,\n symbolType: 'circle',\n size: 20,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n endSymbol: {\n visible: false,\n clip: true,\n symbolType: 'triangle',\n size: 12,\n style: {\n fill: false,\n stroke: 'rgba(46, 47, 50)'\n }\n },\n lineStyle: {\n stroke: '#000',\n lineWidth: 1\n }\n },\n itemContent: {\n type: 'text',\n position: 'middle',\n refX: 10,\n symbolStyle: {\n symbolType: 'star',\n fill: 'rgb(48, 115, 242)',\n fillOpacity: 0.8,\n size: 20\n },\n textStyle: {\n dx: 0,\n dy: 0\n },\n imageStyle: {\n width: 80,\n height: 80\n },\n richTextStyle: {\n width: 100,\n height: 100\n }\n }\n};\n\nexport const DEFAULT_MARK_POINT_TEXT_STYLE_MAP: {\n [K: string]: {\n [T: string]: {\n textAlign: TextAlignType;\n textBaseline: TextBaselineType;\n };\n };\n} = {\n postiveXAxis: {\n top: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n bottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n middle: {\n textAlign: 'left',\n textBaseline: 'middle'\n },\n insideTop: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n insideBottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n insideMiddle: {\n textAlign: 'right',\n textBaseline: 'middle'\n }\n },\n negativeXAxis: {\n top: {\n textAlign: 'right',\n textBaseline: 'bottom'\n },\n bottom: {\n textAlign: 'right',\n textBaseline: 'top'\n },\n middle: {\n textAlign: 'right',\n textBaseline: 'middle'\n },\n insideTop: {\n textAlign: 'left',\n textBaseline: 'bottom'\n },\n insideBottom: {\n textAlign: 'left',\n textBaseline: 'top'\n },\n insideMiddle: {\n textAlign: 'left',\n textBaseline: 'middle'\n }\n }\n};\n","import { isValidNumber, merge } from '@visactor/vutils';\nimport type { IMarkLineLabelPosition } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkLineAttrs, MarkerAnimationState } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkLineComponent } from './register';\nimport type { Point } from '../core/type';\nimport { MarkCommonLine } from './common-line';\nimport type { ArcSegment } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { DEFAULT_STATES } from '../constant';\nimport { DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP, DEFAULT_MARK_LINE_THEME, FUZZY_EQUAL_DELTA } from './config';\nimport type { ILineGraphicAttribute } from '@visactor/vrender-core';\nimport { markCommonLineAnimate } from './animate/animate';\nimport { fuzzyEqualNumber, getTextAlignAttrOfVerticalDir, isPostiveXAxis } from '../util';\n\nloadMarkLineComponent();\n\nexport function registerMarkLineAnimate() {\n MarkLine._animate = markCommonLineAnimate;\n}\n\nexport class MarkLine extends MarkCommonLine {\n name = 'markLine';\n // eslint-disable-next-line max-len\n static defaultAttributes: Partial = DEFAULT_MARK_LINE_THEME as unknown as MarkLineAttrs;\n protected _line!: Segment | ArcSegment;\n\n /** animate */\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkLine._animate && this._animationConfig) {\n MarkLine._animate(this._line, this._label, this._animationConfig, state);\n }\n }\n\n constructor(attributes: MarkLineAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkLine.defaultAttributes, attributes));\n }\n\n protected getPointAttrByPosition(position: IMarkLineLabelPosition) {\n const { label = {} } = this.attribute;\n const { refX = 0, refY = 0 } = label;\n const points = this._line.getMainSegmentPoints();\n const lineEndAngle = this._line.getEndAngle() ?? 0;\n const labelAngle = isPostiveXAxis(lineEndAngle) ? lineEndAngle : lineEndAngle;\n\n const labelOffsetX = refX * Math.cos(labelAngle) + refY * Math.cos(labelAngle - Math.PI / 2);\n const labelOffsetY = refX * Math.sin(labelAngle) + refY * Math.sin(labelAngle - Math.PI / 2);\n\n if (position.includes('start') || position.includes('Start')) {\n return {\n position: {\n x: points[0].x + labelOffsetX,\n y: points[0].y + labelOffsetY\n },\n angle: labelAngle\n };\n } else if (position.includes('middle') || position.includes('Middle')) {\n return {\n position: {\n x: (points[0].x + points[points.length - 1].x) / 2 + labelOffsetX,\n y: (points[0].y + points[points.length - 1].y) / 2 + labelOffsetY\n },\n angle: labelAngle\n };\n }\n return {\n position: {\n x: points[points.length - 1].x + labelOffsetX,\n y: points[points.length - 1].y + labelOffsetY\n },\n angle: labelAngle\n };\n }\n\n protected getRotateByAngle(angle: number): number {\n const itemAngle = isPostiveXAxis(angle) ? angle : angle - Math.PI;\n return itemAngle + (this.attribute.label.refAngle ?? 0);\n }\n\n protected getTextStyle(position: IMarkLineLabelPosition, labelAngle: number, autoRotate: boolean) {\n // 垂直方向例外\n if (\n fuzzyEqualNumber(Math.abs(labelAngle), Math.PI / 2, FUZZY_EQUAL_DELTA) ||\n fuzzyEqualNumber(Math.abs(labelAngle), (Math.PI * 3) / 2, FUZZY_EQUAL_DELTA)\n ) {\n return getTextAlignAttrOfVerticalDir(autoRotate, labelAngle, position);\n }\n\n if (isPostiveXAxis(labelAngle)) {\n return DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP.postiveXAxis[position];\n }\n return DEFAULT_CARTESIAN_MARK_LINE_TEXT_STYLE_MAP.negativeXAxis[position];\n }\n\n protected createSegment() {\n const { points, startSymbol, endSymbol, lineStyle, mainSegmentIndex, multiSegment, state } = this\n .attribute as MarkLineAttrs;\n return new Segment({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment,\n pickable: false, // 组件容器本身不参与拾取\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n\n protected setLineAttributes() {\n const { points, startSymbol, endSymbol, lineStyle, mainSegmentIndex, multiSegment, state } = this\n .attribute as MarkLineAttrs;\n if (this._line) {\n this._line.setAttributes({\n points,\n startSymbol,\n endSymbol,\n lineStyle,\n mainSegmentIndex,\n multiSegment,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkLineAttrs;\n if (!points || points.length < 2) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point | Point[]) => {\n if ((point as any).length) {\n (point as Point[]).forEach((p: Point) => {\n if (!isValidNumber((p as Point).x) || !isValidNumber((p as Point).y)) {\n validFlag = false;\n return;\n }\n });\n } else if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import type { IPoint } from '../../../typings';\n\nexport function getInsertPoints(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const points: IPoint[] = [];\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n switch (direction) {\n case 'top':\n points.push(start);\n points.push({\n x: start.x,\n y: dy > 0 ? start.y - offset - Math.abs(dy) : start.y - offset\n });\n points.push({\n x: end.x,\n y: dy > 0 ? end.y - offset : end.y - offset - Math.abs(dy)\n });\n points.push(end);\n break;\n case 'bottom':\n points.push(start);\n points.push({ x: start.x, y: dy < 0 ? start.y + offset + Math.abs(dy) : start.y + offset });\n points.push({ x: end.x, y: dy < 0 ? end.y + offset : end.y + offset + Math.abs(dy) });\n points.push(end);\n break;\n case 'left':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x - offset - Math.abs(dx) : start.x - offset,\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x - offset : end.x - offset - Math.abs(dx),\n y: end.y\n });\n points.push(end);\n break;\n case 'right':\n points.push(start);\n points.push({\n x: dx > 0 ? start.x + offset : start.x + offset + Math.abs(dx),\n y: start.y\n });\n points.push({\n x: dx > 0 ? end.x + offset + Math.abs(dx) : end.x + offset,\n y: end.y\n });\n points.push(end);\n break;\n default:\n break;\n }\n return points;\n}\n\nexport function getTextOffset(\n start: IPoint,\n end: IPoint,\n direction: 'top' | 'bottom' | 'left' | 'right',\n offset: number = 0\n) {\n const dy = start.y - end.y;\n const dx = start.x - end.x;\n\n if (direction === 'bottom') {\n return {\n dx: dx > 0 ? -dx / 2 : Math.abs(dx / 2),\n dy: dy > 0 ? offset : Math.abs(dy) + offset\n };\n }\n\n if (direction === 'top') {\n return {\n dx: dx > 0 ? -Math.abs(dx / 2) : +Math.abs(dx / 2),\n dy: dy > 0 ? -(Math.abs(dy) + offset) : -offset\n };\n }\n\n if (direction === 'left') {\n return {\n dx: dx > 0 ? -dx - offset : -offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n if (direction === 'right') {\n return {\n dx: dx > 0 ? offset : Math.abs(dx) + offset,\n dy: dy > 0 ? -(dy / 2) : Math.abs(dy / 2)\n };\n }\n\n return {};\n}\n","import type { DataView } from '@visactor/vdataset';\nimport type { IAggrType, IDataPointSpec, IDataPos, IMarkerSupportSeries } from '../../component/marker/interface';\nimport type { Datum, StringOrNumber } from '../../typings';\nimport { array, isArray, isFunction, isPlainObject, isString, isValid } from '@visactor/vutils';\nimport { variance, average, min, max, sum, standardDeviation, median } from '../../util/math';\nimport { isAggrSpec } from '../../component/marker/utils';\nimport type {\n IOption,\n IOptionAggr,\n IOptionAggrField,\n IOptionCallback,\n IOptionPos,\n IOptionWithCoordinates\n} from './interface';\n\nexport const markerMin = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return min(data, opt.field);\n};\nexport const markerMax = (_data: Array, opt: IOption) => {\n const data = _data[0].latestData as Datum[];\n\n return max(data, opt.field);\n};\n\nexport function markerSum(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return sum(data, opt.field);\n}\nexport function markerAverage(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return average(data, opt.field);\n}\n\nexport function markerVariance(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return variance(data, opt.field);\n}\n\nexport function markerStandardDeviation(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return standardDeviation(data, opt.field);\n}\n\nexport function markerMedian(_data: Array, opt: IOption) {\n const data = _data[0].latestData;\n\n return median(data, opt.field);\n}\n\nexport function markerAggregation(_data: Array, options: IOptionWithCoordinates | IOptionAggr[]) {\n let markerSource: IOptionAggr[];\n if ((options as IOptionWithCoordinates).coordinates) {\n const {\n coordinates: coordinatesInOptions,\n coordinateType,\n getSeriesByIdOrIndex,\n ...rest\n } = options as IOptionWithCoordinates;\n let coordinates;\n if (isFunction(coordinatesInOptions)) {\n const relativeSeries = (options as IOptionWithCoordinates).getRelativeSeries();\n coordinates = coordinatesInOptions(relativeSeries.getData().getLatestData(), relativeSeries);\n } else {\n coordinates = coordinatesInOptions;\n }\n coordinates = array(coordinates);\n let option: IOptionAggr;\n\n markerSource = coordinates.map((coordinate: IDataPointSpec) => {\n const refRelativeSeries = getSeriesByIdOrIndex(coordinate.refRelativeSeriesId, coordinate.refRelativeSeriesIndex);\n\n if (coordinateType === 'cartesian') {\n const { xField, yField } = refRelativeSeries.getSpec();\n const { xFieldDim, xFieldIndex, yFieldDim, yFieldIndex } = coordinate;\n let bindXField = xField;\n if (isValid(xFieldIndex)) {\n bindXField = array(xField)[xFieldIndex];\n }\n if (xFieldDim && array(xField).includes(xFieldDim)) {\n bindXField = xFieldDim;\n }\n\n let bindYField = yField;\n if (isValid(yFieldIndex)) {\n bindYField = array(yField)[yFieldIndex];\n }\n if (yFieldDim && array(yField).includes(yFieldDim)) {\n bindYField = yFieldDim;\n }\n\n option = {\n x: undefined,\n y: undefined,\n ...rest\n };\n\n if (isString(coordinate[bindXField]) && isAggrSpec(coordinate[bindXField] as IDataPos)) {\n option.x = { field: bindXField, aggrType: coordinate[bindXField] as IAggrType };\n } else {\n option.x = array(bindXField).map(field => coordinate[field]) as StringOrNumber[];\n }\n\n if (isString(coordinate[bindYField]) && isAggrSpec(coordinate[bindYField] as IDataPos)) {\n option.y = { field: bindYField, aggrType: coordinate[bindYField] as IAggrType };\n } else {\n option.y = array(bindYField).map(field => coordinate[field]) as StringOrNumber[];\n }\n } else if (coordinateType === 'polar') {\n const { valueField: radiusField, categoryField: angleField } = refRelativeSeries.getSpec();\n const { angleFieldDim, angleFieldIndex } = coordinate;\n let bindAngleField = angleField;\n if (isValid(angleFieldIndex)) {\n bindAngleField = array(angleField)[angleFieldIndex];\n }\n if (angleFieldDim && array(angleField).includes(angleFieldDim)) {\n bindAngleField = angleFieldDim;\n }\n\n const bindRadiusField = radiusField;\n\n option = {\n angle: undefined,\n radius: undefined,\n ...rest\n };\n\n if (isString(coordinate[bindAngleField]) && isAggrSpec(coordinate[bindAngleField] as IDataPos)) {\n option.angle = { field: bindAngleField, aggrType: coordinate[bindAngleField] as IAggrType };\n } else {\n option.angle = array(bindAngleField).map(field => coordinate[field]) as StringOrNumber[];\n }\n\n if (isString(coordinate[bindRadiusField]) && isAggrSpec(coordinate[bindRadiusField] as IDataPos)) {\n option.radius = { field: bindRadiusField, aggrType: coordinate[bindRadiusField] as IAggrType };\n } else {\n option.radius = array(bindRadiusField).map(field => coordinate[field]) as StringOrNumber[];\n }\n }\n\n option.getRefRelativeSeries = () => refRelativeSeries;\n return option;\n });\n } else {\n markerSource = options as IOptionAggr[];\n }\n\n const results: {\n x: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n y: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n angle: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n radius: StringOrNumber[] | StringOrNumber | IOptionCallback | null;\n areaName: string | IOptionCallback | null;\n }[] = [];\n markerSource.forEach(option => {\n const result: {\n x: StringOrNumber[] | StringOrNumber | null;\n y: StringOrNumber[] | StringOrNumber | null;\n angle: StringOrNumber[] | StringOrNumber | null;\n radius: StringOrNumber[] | StringOrNumber | null;\n areaName: string | null;\n getRefRelativeSeries?: () => IMarkerSupportSeries;\n } = { x: null, y: null, angle: null, radius: null, areaName: null };\n\n if (isValid(option.x)) {\n const x = option.x;\n\n if (isArray(x)) {\n result.x = x.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.x = getFinalValue(x, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.y)) {\n const y = option.y;\n if (isArray(y)) {\n result.y = y.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.y = getFinalValue(y, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.angle)) {\n const angle = option.angle;\n if (isArray(angle)) {\n result.angle = angle.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.angle = getFinalValue(angle, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.radius)) {\n const radius = option.radius;\n if (isArray(radius)) {\n result.radius = radius.map(item => getFinalValue(item, _data, option)) as StringOrNumber[];\n } else {\n result.radius = getFinalValue(radius, _data, option) as StringOrNumber;\n }\n }\n if (isValid(option.areaName)) {\n const name = option.areaName;\n result.areaName = getFinalValue(name, _data, option) as string;\n }\n if (option.getRefRelativeSeries) {\n result.getRefRelativeSeries = option.getRefRelativeSeries;\n }\n results.push(result);\n });\n\n return results;\n}\n\nconst aggrMap = {\n min: markerMin,\n max: markerMax,\n sum: markerSum,\n average: markerAverage,\n variance: markerVariance,\n standardDeviation: markerStandardDeviation,\n median: markerMedian\n};\n\nfunction getFinalValue(source: IOptionPos | IOptionCallback, _data: Array, option: IOptionAggr) {\n const relativeSeries = option.getRelativeSeries();\n const startSeries = option.getStartRelativeSeries();\n const endSeries = option.getEndRelativeSeries();\n const relativeSeriesData = relativeSeries.getData().getLatestData();\n const startRelativeSeriesData = startSeries.getData().getLatestData();\n const endRelativeSeriesData = endSeries.getData().getLatestData();\n\n if (isFunction(source)) {\n return source(\n relativeSeriesData,\n startRelativeSeriesData,\n endRelativeSeriesData,\n relativeSeries,\n startSeries,\n endSeries\n ) as StringOrNumber[] | StringOrNumber;\n }\n if (isPlainObject(source)) {\n const { aggrType, field } = source as IOptionAggrField;\n return aggrMap[aggrType](_data, { field: field });\n }\n\n return source;\n}\n","import type { ICartesianSeries } from '../../series/interface/series';\n\nexport interface IMarkerFilterOptions {\n getRelativeSeries: () => ICartesianSeries;\n}\n\nexport function markerFilter(data: Array, options: IMarkerFilterOptions) {\n if (options && options.getRelativeSeries) {\n const series = options.getRelativeSeries();\n\n if (series) {\n const viewData = series.getViewData();\n return viewData && viewData.latestData && viewData.latestData.length ? data : [];\n }\n }\n\n return data;\n}\n","import { DataSet, DataView } from '@visactor/vdataset';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid, isNil, isString, isEqual } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { CoordinateType, ILayoutRect, ILayoutType, IRect, StringOrNumber } from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type {\n IAggrType,\n IDataPos,\n IDataPosCallback,\n IMarkerAttributeContext,\n IMarkerSpec,\n IMarkerSupportSeries,\n IMarkProcessOptions\n} from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { calcLayoutNumber } from '../../util/space';\nimport { isAggrSpec } from './utils';\nimport { getFirstSeries } from '../../util';\nimport { arrayParser } from '../../data/parser/array';\nimport { getSpecInfo } from '../util';\nimport type { IOptionWithCoordinates } from '../../data/transforms/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { markerAggregation } from '../../data/transforms/aggregation';\nimport { markerFilter } from '../../data/transforms/marker-filter';\n\nexport abstract class BaseMarker extends BaseComponent {\n layoutType: ILayoutType | 'none' = 'none';\n\n // 下面三个属性需要子组件复写\n static specKey: string;\n static type: string;\n static coordinateType: string;\n coordinateType: CoordinateType;\n\n protected _startRelativeSeries!: IMarkerSupportSeries;\n protected _endRelativeSeries!: IMarkerSupportSeries;\n protected _relativeSeries!: IMarkerSupportSeries;\n protected _specifiedDataSeries!: IMarkerSupportSeries | IMarkerSupportSeries[];\n getRelativeSeries() {\n return this._relativeSeries;\n }\n\n // marker 组件数据\n protected _markerData!: DataView;\n getMarkerData() {\n return this._markerData;\n }\n // marker 组件\n protected _markerComponent!: any;\n\n protected _layoutOffsetX: number = 0;\n protected _layoutOffsetY: number = 0;\n\n private _firstSeries: ICartesianSeries;\n\n protected abstract _initDataView(): void;\n protected abstract _createMarkerComponent(): IGroup;\n protected abstract _markerLayout(): void;\n protected abstract _computeOptions(): IMarkProcessOptions;\n // 该方法需要子组件复写\n static _getMarkerCoordinateType(markerSpec: any): string {\n return 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IMarkerSpec) => {\n return s.visible !== false && this._getMarkerCoordinateType(s) === this.coordinateType;\n });\n }\n\n protected _markAttributeContext: IMarkerAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkerAttributeContext() {\n this._markAttributeContext = {\n relativeSeries: this._relativeSeries,\n startRelativeSeries: this._startRelativeSeries,\n endRelativeSeries: this._endRelativeSeries,\n vchart: this._option.globalInstance\n };\n }\n\n created() {\n super.created();\n this._bindSeries();\n this._initDataView();\n this.initEvent();\n this._buildMarkerAttributeContext();\n }\n\n protected _getAllRelativeSeries() {\n return {\n getRelativeSeries: () => this._relativeSeries,\n getStartRelativeSeries: () => this._startRelativeSeries,\n getEndRelativeSeries: () => this._endRelativeSeries\n };\n }\n\n private _getFieldInfoFromSpec(\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName',\n spec: IDataPos | IDataPosCallback,\n relativeSeries: IMarkerSupportSeries\n ) {\n const specKeyByDim = {\n x: 'xField',\n y: 'yField',\n radius: 'valueField',\n angle: 'categoryField',\n areaName: 'nameField'\n };\n\n if (isString(spec) && isAggrSpec(spec)) {\n return {\n field: relativeSeries.getSpec()[specKeyByDim[dim]],\n aggrType: spec as unknown as IAggrType\n };\n }\n return spec;\n }\n\n protected _processSpecByDims(\n dimSpec: {\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName';\n specValue: IDataPos | IDataPosCallback;\n }[]\n ) {\n const relativeSeries = this._relativeSeries;\n const dimMap = {};\n dimSpec.forEach(d => (dimMap[d.dim] = this._getFieldInfoFromSpec(d.dim, d.specValue, relativeSeries)));\n return {\n ...dimMap,\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecCoo(spec: any): IOptionWithCoordinates {\n return {\n coordinates: spec.coordinates || spec.coordinate,\n ...this._getAllRelativeSeries(),\n getSeriesByIdOrIndex: (seriesUserId: StringOrNumber, seriesIndex: number) =>\n this._getSeriesByIdOrIndex(seriesUserId, seriesIndex),\n coordinateType: this.coordinateType\n };\n }\n\n protected _getRelativeDataView() {\n if (this._specifiedDataSeries) {\n let resultData: any[] = [];\n array(this._specifiedDataSeries).forEach(series => {\n resultData = resultData.concat(series.getViewData().latestData);\n });\n const dataSet = new DataSet();\n dataSet.registerParser('array', arrayParser);\n return new DataView(dataSet).parse(resultData, { type: 'array' });\n }\n return this._relativeSeries.getViewData();\n }\n\n updateLayoutAttribute(): void {\n const markerVisible = this._spec.visible ?? true;\n if (markerVisible) {\n // 创建marker组件\n if (!this._markerComponent) {\n const markerComponent = this._createMarkerComponent();\n markerComponent.name = this._spec.name ?? this.type;\n markerComponent.id = this._spec.id ?? `${this.type}-${this.id}`;\n this._markerComponent = markerComponent;\n\n this.getContainer().add(this._markerComponent);\n // 代理 marker 组件上的事件\n this._markerComponent.on('*', (event: any, type: string) => {\n this._delegateEvent(\n this._markerComponent as unknown as IGraphic,\n event,\n type,\n null,\n this.getMarkerData.bind(this)\n );\n });\n }\n this._markerLayout();\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getSeriesByIdOrIndex(seriesUserId: StringOrNumber, seriesIndex: number) {\n let series: IMarkerSupportSeries;\n series = this._option.getSeriesInUserIdOrIndex(isValid(seriesUserId) ? [seriesUserId] : [], [\n seriesIndex\n ])?.[0] as IMarkerSupportSeries;\n if (!series) {\n series = this._relativeSeries ?? this._getFirstSeries();\n }\n return series;\n }\n\n protected _bindSeries() {\n const spec: any = this._spec;\n this._relativeSeries = this._getSeriesByIdOrIndex(spec.relativeSeriesId, spec.relativeSeriesIndex);\n this._startRelativeSeries = this._getSeriesByIdOrIndex(spec.startRelativeSeriesId, spec.startRelativeSeriesIndex);\n this._endRelativeSeries = this._getSeriesByIdOrIndex(spec.endRelativeSeriesId, spec.endRelativeSeriesIndex);\n if (\n (spec.specifiedDataSeriesIndex && spec.specifiedDataSeriesIndex === 'all') ||\n (spec.specifiedDataSeriesId && spec.specifiedDataSeriesId === 'all')\n ) {\n this._specifiedDataSeries = this._option.getAllSeries() as IMarkerSupportSeries[];\n } else if (spec.specifiedDataSeriesIndex || spec.specifiedDataSeriesId) {\n this._specifiedDataSeries = this._getSeriesByIdOrIndex(spec.specifiedDataSeriesId, spec.specifiedDataSeriesIndex);\n }\n }\n\n protected initEvent() {\n // 在极坐标系/地理坐标系中, 滚动或缩放画布不会update layout, 所以需要通过事件监听来更新标注的位置\n // 在直角坐标系中, update layout中已经更新标注位置, 在这里不需要重复监听\n if (this._relativeSeries.coordinate !== 'cartesian') {\n this._relativeSeries.event.on('zoom', this._markerLayout.bind(this));\n this._relativeSeries.event.on('panmove', this._markerLayout.bind(this));\n this._relativeSeries.event.on('scroll', this._markerLayout.bind(this));\n }\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n clear(): void {\n super.clear();\n this._firstSeries = null;\n }\n\n private _getFirstSeries(): ICartesianSeries {\n if (this._firstSeries) {\n return this._firstSeries;\n }\n const firstSeries = getFirstSeries(this._regions) as ICartesianSeries;\n if (firstSeries) {\n this._firstSeries = firstSeries;\n return firstSeries;\n }\n this._option?.onError('need at least one series');\n return null;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._markerComponent] as unknown as IGroup[];\n }\n\n onLayoutStart(layoutRect: IRect, chartViewRect: ILayoutRect, ctx: any): void {\n // offset\n if (!isNil(this._spec.offsetX)) {\n this._layoutOffsetX = calcLayoutNumber(this._spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(this._spec.offsetY)) {\n this._layoutOffsetY = calcLayoutNumber(this._spec.offsetY, chartViewRect.height, chartViewRect);\n }\n super.onLayoutStart(layoutRect, chartViewRect, ctx);\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n result.change = true;\n }\n return result;\n }\n\n _initCommonDataView() {\n const { options } = this._computeOptions();\n\n const seriesData = this._getRelativeDataView();\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\nimport { regression } from '../../util/math';\nimport type { IOptionRegr } from './interface';\n\nexport function markerRegression(_data: Array, opt: IOptionRegr) {\n const data = _data[0].latestData;\n\n return regression(data, opt.fieldX, opt.fieldY);\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IMarkLine, IMarkLineSpec } from './interface';\nimport { markerAggregation } from '../../../data/transforms/aggregation';\nimport {\n computeClipRange,\n transformLabelAttributes,\n transformState,\n transformStyle,\n getMarkLineProcessInfo\n} from '../utils';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { MarkArcLineAttrs, MarkLineAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkLine as MarkLineComponent, MarkArcLine as MarkArcLineComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { IMarkerSymbol } from '../interface';\nimport { markerRegression } from '../../../data/transforms/regression';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport { markerFilter } from '../../../data/transforms/marker-filter';\n\nexport abstract class BaseMarkLine extends BaseMarker implements IMarkLine {\n static specKey = 'markLine';\n specKey = 'markLine';\n layoutZIndex: number = LayoutZIndex.MarkLine;\n\n // eslint-disable-next-line max-len\n protected abstract _newMarkLineComponent(\n attr: MarkLineAttrs | MarkArcLineAttrs\n ): MarkLineComponent | MarkArcLineComponent;\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doAngleProcess, doRadiusProcess, doAngRadRad1Process, doRadAngAng1Process, doRadAngProcess } =\n getMarkLineProcessInfo(markerSpec);\n\n if (\n markerSpec.coordinateType === 'polar' ||\n doAngleProcess ||\n doRadiusProcess ||\n doAngRadRad1Process ||\n doRadAngAng1Process ||\n doRadAngProcess\n ) {\n return 'polar';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const {\n label = {},\n startSymbol = {} as IMarkerSymbol,\n endSymbol = {} as IMarkerSymbol\n } = this._spec as IMarkLineSpec;\n\n const markLineAttrs: MarkLineAttrs | MarkArcLineAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ],\n center: {\n x: 0,\n y: 0\n },\n radius: 0,\n startAngle: 0,\n endAngle: 0,\n lineStyle: transformStyle(\n transformToGraphic(this._spec.line?.style),\n this._markerData,\n this._markAttributeContext\n ),\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label, this._markerData, this._markAttributeContext),\n state: {\n line: transformState(this._spec.line?.state ?? {}, this._markerData, this._markAttributeContext),\n lineStartSymbol: transformState(\n this._spec.startSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n lineEndSymbol: transformState(this._spec.endSymbol?.state ?? {}, this._markerData, this._markAttributeContext),\n label: transformState(this._spec?.label?.state ?? {}, this._markerData, this._markAttributeContext),\n labelBackground: transformState(\n this._spec?.label?.labelBackground?.state ?? {},\n this._markerData,\n this._markAttributeContext\n )\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n if (startSymbol.visible) {\n markLineAttrs.startSymbol = {\n ...startSymbol,\n visible: true,\n style: transformStyle(transformToGraphic(startSymbol.style), this._markerData, this._markAttributeContext)\n };\n } else {\n markLineAttrs.startSymbol = {\n visible: false\n };\n }\n\n if (endSymbol.visible) {\n markLineAttrs.endSymbol = {\n ...endSymbol,\n visible: true,\n style: transformStyle(transformToGraphic(endSymbol.style), this._markerData, this._markAttributeContext)\n };\n } else {\n markLineAttrs.endSymbol = {\n visible: false\n };\n }\n const markLine = this._newMarkLineComponent(markLineAttrs);\n return markLine as unknown as IGroup;\n }\n\n protected _getUpdateMarkerAttrs() {\n const spec = this._spec;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const pointsAttr = this._computePointsAttr();\n\n const seriesData = relativeSeries.getViewData().latestData;\n const dataPoints =\n data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n const markerComponentAttr = this._markerComponent?.attribute ?? {};\n const labelAttrs = {\n ...markerComponentAttr.label,\n text: this._spec.label.formatMethod\n ? this._spec.label.formatMethod(dataPoints, seriesData)\n : markerComponentAttr.label?.text\n };\n\n return {\n ...pointsAttr,\n label: labelAttrs as MarkLineComponent['attribute']['label'],\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n };\n }\n\n protected _markerLayout() {\n const updateAttrs = this._getUpdateMarkerAttrs();\n this._markerComponent?.setAttributes(updateAttrs);\n }\n\n protected _initDataView(): void {\n const spec = this._spec;\n const isCoordinateProcess = 'coordinates' in spec;\n\n const {\n doXProcess,\n doYProcess,\n doXYY1Process,\n doYXX1Process,\n doXYProcess,\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess\n } = getMarkLineProcessInfo(spec);\n this._markerData = this._getRelativeDataView();\n\n if (\n !doXProcess &&\n !doYProcess &&\n !doXYY1Process &&\n !doYXX1Process &&\n !doXYProcess &&\n !doAngleProcess &&\n !doRadiusProcess &&\n !doAngRadRad1Process &&\n !doRadAngAng1Process &&\n !doRadAngProcess &&\n !isCoordinateProcess\n ) {\n return;\n }\n\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerRegression', markerRegression);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n\n const { options, needAggr, needRegr, processData } = this._computeOptions();\n\n const data = new DataView(this._option.dataSet);\n data.parse([processData], {\n type: 'dataview'\n });\n if (needAggr) {\n data.transform({\n type: 'markerAggregation',\n options\n });\n }\n if (needRegr) {\n data.transform({\n type: 'markerRegression',\n options\n });\n }\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n data.target.on('change', () => {\n this._markerLayout();\n });\n this._markerData = data;\n }\n}\n","import { DataView } from '@visactor/vdataset';\nimport type { IStepMarkLineSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates, IOptionRegr } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, positionLayout, xyLayout, getMarkLineProcessInfo } from '../utils';\nimport {\n type MarkLineAttrs,\n MarkLine as MarkLineComponent,\n registerMarkLineAnimate\n} from '@visactor/vrender-components';\nimport { isValid, isValidNumber } from '@visactor/vutils';\nimport type { IDataPos, IMarkProcessOptions } from '../interface';\nimport { getInsertPoints, getTextOffset } from './util';\nimport { Factory } from '../../../core/factory';\nimport { isPercent } from '../../../util';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport { BaseMarkLine } from './base-mark-line';\n\nexport class CartesianMarkLine extends BaseMarkLine {\n static type = ComponentTypeEnum.markLine;\n type = ComponentTypeEnum.markLine;\n name: string = ComponentTypeEnum.markLine;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected declare _markerComponent: MarkLineComponent;\n\n protected _newMarkLineComponent(attr: MarkLineAttrs): MarkLineComponent {\n return new MarkLineComponent(attr);\n }\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const isValidCoordinates = isValid(spec.coordinates);\n const isValidProcess = isValid(spec.process);\n const isValidProcessX = isValidProcess && isValid(spec.process.x);\n const isValidProcessY = isValidProcess && isValid(spec.process.y);\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n const { doXProcess, doYProcess, doXYY1Process, doYXX1Process, doXYProcess, doCoordinatesProcess } =\n getMarkLineProcessInfo(spec);\n\n let points: IPoint[] = [];\n if (\n doXProcess ||\n doXYY1Process ||\n doYProcess ||\n doYXX1Process ||\n doXYProcess ||\n (isValidCoordinates && isValidProcessX) ||\n (isValidCoordinates && isValidProcessY)\n ) {\n const xyPoints = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 这里不同的场景返回的值不同,如果同时声明了 x x1 y y1,会返回两个数值的数组(如 [[{}], [{}]]),所以需要分别处理下\n points = (xyPoints.length === 1 ? xyPoints[0] : xyPoints.map(point => point[0])) as IPoint[];\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n return { points };\n }\n\n protected _markerLayout() {\n const updateAttrs = this._getUpdateMarkerAttrs();\n\n if ((this._spec as IStepMarkLineSpec).type === 'type-step') {\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n\n const { multiSegment, mainSegmentIndex } = (this._spec as IStepMarkLineSpec).line || {};\n const { connectDirection, expandDistance = 0 } = this._spec as IStepMarkLineSpec;\n\n let expandDistanceValue: number;\n if (isPercent(expandDistance)) {\n const regionStart = startRelativeSeries.getRegion();\n const regionStartLayoutStartPoint = regionStart.getLayoutStartPoint();\n const regionEnd = endRelativeSeries.getRegion();\n const regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();\n\n if (connectDirection === 'bottom' || connectDirection === 'top') {\n const regionHeight = Math.abs(\n Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) -\n Math.max(\n regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height,\n regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionHeight) / 100;\n } else {\n const regionWidth = Math.abs(\n Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) -\n Math.max(\n regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width,\n regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width\n )\n );\n expandDistanceValue = (Number(expandDistance.substring(0, expandDistance.length - 1)) * regionWidth) / 100;\n }\n } else {\n expandDistanceValue = expandDistance as number;\n }\n const { points, label, limitRect } = updateAttrs;\n\n const joinPoints = getInsertPoints(\n (points as IPoint[])[0],\n (points as IPoint[])[1],\n connectDirection,\n expandDistanceValue\n );\n\n let labelPositionAttrs: any;\n if (multiSegment && isValid(mainSegmentIndex)) {\n // 如果用户配置了主线段,则不进行 label 的偏移处理,直接显示在主线段中间\n labelPositionAttrs = {\n position: 'middle',\n autoRotate: false,\n refX: 0,\n refY: 0\n };\n } else {\n labelPositionAttrs = {\n position: 'start',\n autoRotate: false,\n ...getTextOffset((points as IPoint[])[0], (points as IPoint[])[1], connectDirection, expandDistanceValue),\n refX: 0,\n refY: 0\n };\n }\n\n if (isValidNumber(this._spec.label?.refX)) {\n labelPositionAttrs.refX += this._spec.label.refX;\n }\n if (isValidNumber(this._spec.label?.refY)) {\n labelPositionAttrs.refY += this._spec.label.refY;\n }\n if (isValidNumber(this._spec.label?.dx)) {\n labelPositionAttrs.dx = (labelPositionAttrs.dx || 0) + this._spec.label.dx;\n }\n if (isValidNumber(this._spec.label?.dy)) {\n labelPositionAttrs.dy = (labelPositionAttrs.dy || 0) + this._spec.label.dy;\n }\n const markerComponentAttr = this._markerComponent?.attribute ?? {};\n this._markerComponent?.setAttributes({\n points: multiSegment\n ? [\n [joinPoints[0], joinPoints[1]],\n [joinPoints[1], joinPoints[2]],\n [joinPoints[2], joinPoints[3]]\n ]\n : joinPoints,\n label: {\n ...label,\n ...labelPositionAttrs,\n textStyle: {\n ...markerComponentAttr.label.textStyle,\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n limitRect,\n multiSegment,\n mainSegmentIndex,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n } as any);\n } else {\n this._markerComponent?.setAttributes(updateAttrs);\n }\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n let options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n let processData: DataView = this._getRelativeDataView();\n let needAggr: boolean = true;\n let needRegr: boolean = false;\n const spec: any = this._spec;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYY1Process, doYXX1Process, doXYProcess, doCoordinatesProcess } =\n getMarkLineProcessInfo(spec);\n\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [this._processSpecByDims([{ dim: 'x', specValue: spec.x }])];\n } else if (doYProcess) {\n options = [this._processSpecByDims([{ dim: 'y', specValue: spec.y }])];\n } else if (doXYY1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doYXX1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y }\n ])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n needAggr = false;\n processData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` })\n .parse([relativeSeries.getViewData()], {\n type: 'dataview'\n })\n .transform({\n type: 'markerAggregation',\n options\n });\n if (spec.process && 'x' in spec.process) {\n options = [this._processSpecByDims([{ dim: 'x', specValue: spec.process.x as unknown as IDataPos }])];\n needAggr = true;\n }\n if (spec.process && 'y' in spec.process) {\n options = options = [this._processSpecByDims([{ dim: 'y', specValue: spec.process.y as unknown as IDataPos }])];\n needAggr = true;\n }\n if (spec.process && 'xy' in spec.process) {\n const { xField, yField } = relativeSeries.getSpec();\n options = {\n fieldX: xField,\n fieldY: yField\n };\n needRegr = true;\n }\n } else {\n needAggr = false;\n }\n return { options, needAggr, needRegr, processData };\n }\n}\n\nexport const registerMarkLine = () => {\n Factory.registerComponent(CartesianMarkLine.type, CartesianMarkLine);\n registerMarkLineAnimate();\n};\n","/**\n * @description 标签组件\n */\nimport { isEmpty, merge } from '@visactor/vutils';\nimport type { IArc } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { ArcSegmentAttributes, SymbolAttributes } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadArcSegmentComponent } from './register';\nimport { Segment } from './segment';\n\nloadArcSegmentComponent();\nexport class ArcSegment extends Segment {\n name = 'arc-segment';\n key = 'arc-segment';\n line?: IArc;\n isReverseArc: boolean = false;\n\n constructor(attributes: ArcSegmentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Segment.defaultAttributes, attributes));\n }\n\n /**\n * 外部获取segment起点切线正方向\n */\n getStartAngle() {\n // 如果是顺时针弧, start切线方向 = 弧度方向 - Math.PI / 2, 反之相反\n const tangAng = this.isReverseArc ? this._startAngle + Math.PI / 2 : this._startAngle - Math.PI / 2;\n\n // 经过刚刚的计算角度范围: [0, 360] => [-90, 270] 或 [0, 450]\n // 将其规范范围到[0, 360]\n return tangAng < 0 ? tangAng + Math.PI * 2 : tangAng > Math.PI * 2 ? tangAng - Math.PI * 2 : tangAng;\n }\n\n /**\n * 外部获取segment终点切线正方向\n */\n getEndAngle() {\n // 如果是顺时针弧, end切线方向 = 弧度方向 + Math.PI / 2, 反之相反\n const tangAng = this.isReverseArc ? this._endAngle - Math.PI / 2 : this._endAngle + Math.PI / 2;\n\n // 经过刚刚的计算角度范围: [0, 360] => [-90, 270] 或 [0, 450]\n // 将其规范范围到[0, 360]\n return tangAng < 0 ? tangAng + Math.PI * 2 : tangAng > Math.PI * 2 ? tangAng - Math.PI * 2 : tangAng;\n }\n\n getMainSegmentPoints() {\n return this._mainSegmentPoints;\n }\n\n protected _computeStartRotate(angle: number) {\n return this.isReverseArc ? angle + Math.PI : angle;\n }\n\n protected _computeEndRotate(angle: number) {\n return this.isReverseArc ? angle : angle + Math.PI;\n }\n\n protected render() {\n this.removeAllChild(true);\n this._reset();\n const {\n // points,\n startSymbol,\n endSymbol,\n lineStyle,\n state,\n visible = true,\n radius,\n startAngle,\n endAngle,\n center\n } = this.attribute as ArcSegmentAttributes;\n\n if (!visible) {\n return;\n }\n\n this._startAngle = startAngle;\n this._endAngle = endAngle;\n this.isReverseArc = startAngle > endAngle;\n\n // 绘制start和end symbol\n const startPoint: Point = {\n x: center.x + radius * Math.cos(this._startAngle),\n y: center.y + radius * Math.sin(this._startAngle)\n };\n const endPoint: Point = {\n x: center.x + radius * Math.cos(this._endAngle),\n y: center.y + radius * Math.sin(this._endAngle)\n };\n this._mainSegmentPoints = [startPoint, endPoint];\n\n const startSymbolShape = this._renderSymbol(startSymbol as SymbolAttributes, this._mainSegmentPoints, 'start');\n const endSymbolShape = this._renderSymbol(endSymbol as SymbolAttributes, this._mainSegmentPoints, 'end');\n\n this.startSymbol = startSymbolShape;\n this.endSymbol = endSymbolShape;\n\n const line = graphicCreator.arc({\n x: center.x,\n y: center.y,\n // startAngle: Math.PI + 0.5,\n // endAngle: 0,\n startAngle,\n endAngle,\n innerRadius: radius,\n outerRadius: radius,\n ...lineStyle\n });\n\n line.name = `${this.name}-line`;\n line.id = this._getNodeId('arc');\n if (!isEmpty(state?.line)) {\n line.states = [].concat(state.line)[0];\n }\n this.add(line);\n this.line = line;\n }\n}\n","import { merge } from '@visactor/vutils';\nimport { ArcSegment } from '../segment';\nimport { loadMarkArcLineComponent } from './register';\nimport { DEFAULT_STATES } from '../constant';\nimport { MarkCommonLine } from './common-line';\nimport type { ComponentOptions } from '../interface';\nimport type { IArcGraphicAttribute } from '@visactor/vrender-core';\nimport { IMarkCommonArcLabelPosition } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkArcLineAttrs, MarkerAnimationState } from './type';\nimport { DEFAULT_MARK_ARC_LINE_THEME, DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP } from './config';\nimport { markCommonLineAnimate } from './animate/animate';\n\nloadMarkArcLineComponent();\n\nexport function registerMarkArcLineAnimate() {\n MarkArcLine._animate = markCommonLineAnimate;\n}\nexport class MarkArcLine extends MarkCommonLine {\n name = 'markArcLine';\n // eslint-disable-next-line max-len\n static defaultAttributes: Partial = DEFAULT_MARK_ARC_LINE_THEME as unknown as MarkArcLineAttrs;\n protected _line!: ArcSegment;\n\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArcLine._animate && this._animationConfig) {\n MarkArcLine._animate(this._line, this._label, this._animationConfig, state);\n }\n }\n\n constructor(attributes: MarkArcLineAttrs, options?: ComponentOptions) {\n // eslint-disable-next-line max-len\n super(\n options?.skipDefault\n ? attributes\n : merge({}, MarkArcLine.defaultAttributes, attributes, { label: { autoRotate: true } })\n );\n }\n\n protected getPointAttrByPosition(direction: IMarkCommonArcLabelPosition) {\n const { center, radius, startAngle, endAngle, label } = this.attribute as MarkArcLineAttrs;\n const { refX = 0, refY = 0 } = label;\n let angle;\n\n switch (direction) {\n case IMarkCommonArcLabelPosition.arcInnerStart:\n angle = startAngle;\n case IMarkCommonArcLabelPosition.arcOuterStart:\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerEnd:\n angle = endAngle;\n case IMarkCommonArcLabelPosition.arcOuterEnd:\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.center:\n case IMarkCommonArcLabelPosition.arcInnerMiddle:\n case IMarkCommonArcLabelPosition.arcOuterMiddle:\n angle = (startAngle + endAngle) / 2;\n break;\n default: // default arcInnerMiddle\n angle = (startAngle + endAngle) / 2;\n }\n\n return {\n position: {\n x: center.x + (radius + refY) * Math.cos(angle) + refX * Math.cos(angle - Math.PI / 2),\n y: center.y + (radius + refY) * Math.sin(angle) + refX * Math.sin(angle - Math.PI / 2)\n },\n angle\n };\n }\n\n protected getTextStyle(position: IMarkCommonArcLabelPosition) {\n return DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP[position];\n }\n\n protected getRotateByAngle(angle: number): number {\n return angle - Math.PI / 2 + (this.attribute.label.refAngle ?? 0);\n }\n\n protected createSegment() {\n const { center, radius, startAngle, endAngle, startSymbol, endSymbol, lineStyle, state } = this\n .attribute as MarkArcLineAttrs;\n return new ArcSegment({\n center,\n radius,\n startAngle,\n endAngle,\n startSymbol,\n endSymbol,\n lineStyle,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n\n protected setLineAttributes() {\n const { center, radius, startAngle, endAngle, startSymbol, endSymbol, lineStyle, state } = this\n .attribute as MarkArcLineAttrs;\n if (this._line) {\n (this._line as any).setAttributes({\n center,\n radius,\n startAngle,\n endAngle,\n startSymbol,\n endSymbol,\n lineStyle,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n }\n }\n\n protected isValidPoints() {\n return true;\n }\n}\n","import type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IOptionAggr, IOptionWithCoordinates, IOptionRegr } from '../../../data/transforms/interface';\nimport { polarLayout, getMarkLineProcessInfo, polarCoordinateLayout } from '../utils';\nimport type { MarkArcLineAttrs, MarkLineAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n MarkArcLine as MarkArcLineComponent,\n MarkLine as MarkLineComponent,\n registerMarkArcLineAnimate,\n registerMarkLineAnimate\n} from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint, IPolarPoint } from '../../../typings';\nimport type { IPolarSeries } from 'src/series';\nimport { BaseMarkLine } from './base-mark-line';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class PolarMarkLine extends BaseMarkLine {\n static type = ComponentTypeEnum.polarMarkLine;\n type = ComponentTypeEnum.polarMarkLine;\n name: string = ComponentTypeEnum.polarMarkLine;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected declare _markerComponent: MarkArcLineComponent;\n\n protected _newMarkLineComponent(attr: MarkArcLineAttrs | MarkLineAttrs): MarkArcLineComponent | MarkLineComponent {\n const { doRadiusProcess, doRadAngAng1Process } = getMarkLineProcessInfo(this._spec as any);\n const isArcLine = doRadiusProcess || doRadAngAng1Process;\n return isArcLine\n ? new MarkArcLineComponent(attr as MarkArcLineAttrs)\n : new MarkLineComponent(attr as MarkLineAttrs);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n const autoRange = spec.autoRange ?? false;\n\n const {\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkLineProcessInfo(spec);\n\n let points: IPolarPoint[] = [];\n let pointsAttr: {\n points?: IPoint[];\n radius?: number;\n startAngle?: number;\n endAngle?: number;\n center?: IPoint;\n } = {};\n\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n\n if (doAngleProcess || doRadiusProcess || doAngRadRad1Process || doRadAngAng1Process || doRadAngProcess) {\n const polarPoints = polarLayout(\n data,\n startRelativeSeries as IPolarSeries,\n endRelativeSeries as IPolarSeries,\n relativeSeries as IPolarSeries,\n autoRange\n );\n\n points = (polarPoints.length === 1 ? polarPoints[0] : polarPoints.map(point => point[0])) as IPolarPoint[];\n\n if (points[0].radius === points[1].radius) {\n pointsAttr = {\n radius: points[0].radius,\n startAngle: points[0].angle,\n endAngle: points[1].angle,\n center\n };\n } else {\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n } else if (doCoordinatesProcess) {\n points = polarCoordinateLayout(data, relativeSeries, autoRange);\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n return pointsAttr;\n }\n\n protected _computeOptions(): any {\n const spec = this._spec as any;\n const {\n doAngleProcess,\n doRadiusProcess,\n doAngRadRad1Process,\n doRadAngAng1Process,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkLineProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n const processData: DataView = this._getRelativeDataView();\n const needAggr: boolean = true;\n const needRegr: boolean = false;\n\n if (doRadAngProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doAngleProcess) {\n options = [this._processSpecByDims([{ dim: 'angle', specValue: spec.angle }])];\n } else if (doRadiusProcess) {\n options = [this._processSpecByDims([{ dim: 'radius', specValue: spec.radius }])];\n } else if (doAngRadRad1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doRadAngAng1Process) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius }\n ])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options, needAggr, needRegr, processData };\n }\n}\n\nexport const registerPolarMarkLine = () => {\n Factory.registerComponent(PolarMarkLine.type, PolarMarkLine);\n registerMarkArcLineAnimate();\n registerMarkLineAnimate();\n};\n","import { registerGroup, registerRichtext, registerText } from '@visactor/vrender-kits';\n\nexport function loadTitleComponent() {\n registerGroup();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRichTextCharacter } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isArray } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { TitleAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTitleComponent } from './register';\n\nloadTitleComponent();\nexport class Title extends AbstractComponent> {\n name = 'title';\n\n private _mainTitle?: IText | IRichText;\n private _subTitle?: IText | IRichText;\n\n static defaultAttributes: Partial = {\n textStyle: {\n ellipsis: '...',\n fill: '#333',\n fontSize: 20,\n fontWeight: 'bold',\n textAlign: 'left',\n textBaseline: 'top'\n },\n subtextStyle: {\n ellipsis: '...',\n fill: '#6F6F6F',\n fontSize: 16,\n fontWeight: 'normal',\n textAlign: 'left',\n textBaseline: 'top'\n }\n };\n\n constructor(attributes: TitleAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Title.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n textType,\n text,\n subtextType,\n textStyle = {},\n subtext,\n subtextStyle = {},\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n align,\n verticalAlign,\n padding = 0\n } = this.attribute as TitleAttrs;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild(\n 'title-container',\n { x: parsedPadding[3], y: parsedPadding[0], zIndex: 1 },\n 'group'\n ) as IGroup;\n\n if (this.attribute.visible !== false && textStyle.visible !== false) {\n const {\n width: mainTitleWidth,\n height: mainTitleHeight,\n maxHeight: mainTitleMaxHeight,\n maxWidth: mainTitleMaxWidth,\n x = 0,\n y = 0,\n ellipsis = true,\n wordBreak = 'break-word',\n maxWidth,\n lineClamp\n } = textStyle;\n if (textType === 'rich' || isValid(textStyle.character)) {\n const attr = {\n x,\n y,\n width: mainTitleWidth ?? width ?? 0,\n height: mainTitleHeight ?? height ?? 0,\n ellipsis: ellipsis ?? true,\n wordBreak: wordBreak ?? 'break-word',\n maxHeight: mainTitleMaxHeight ?? maxHeight,\n maxWidth: mainTitleMaxWidth ?? maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: textStyle.character ?? (text as IRichTextCharacter[]),\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (textType === 'html') {\n const attr = {\n html: {\n dom: text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...textStyle\n },\n x,\n y,\n width: mainTitleWidth ?? width ?? 0,\n height: mainTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: mainTitleMaxHeight ?? maxHeight,\n maxWidth: mainTitleMaxWidth ?? maxWidth,\n textConfig: [] as any[],\n ...textStyle\n };\n this._mainTitle = group.createOrUpdateChild('mainTitle', attr, 'richtext') as IRichText;\n } else if (isValid(text)) {\n this._mainTitle = group.createOrUpdateChild(\n 'mainTitle',\n {\n text: isArray(text) ? (text as any) : [text as string],\n whiteSpace: 'normal',\n ...textStyle,\n maxLineWidth: textStyle.maxLineWidth ?? mainTitleWidth ?? width,\n heightLimit: mainTitleHeight ?? maxHeight,\n lineClamp,\n ellipsis,\n x,\n y\n },\n 'text'\n ) as IText;\n }\n }\n\n const maintextHeight = this._mainTitle ? this._mainTitle.AABBBounds.height() : 0;\n const maintextWidth = this._mainTitle ? this._mainTitle.AABBBounds.width() : 0;\n\n // 目前 height 限制等于 0 时,相当于 Infinity,无限制\n\n if (this.attribute.visible !== false && subtextStyle.visible !== false) {\n const {\n width: subTitleWidth,\n height: subTitleHeight,\n maxWidth: subTitleMaxWidth,\n maxHeight: subTitleMaxHeight,\n x = 0,\n y = 0,\n ellipsis = true,\n wordBreak = 'break-word',\n lineClamp\n } = subtextStyle;\n const maxSubTextHeight = Math.max(Number.MIN_VALUE, maxHeight - maintextHeight);\n\n if (subtextType === 'rich' || isValid(subtextStyle.character)) {\n const attr: any = {\n x,\n y,\n width: subTitleWidth ?? width ?? 0,\n height: subTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: subTitleMaxHeight ?? maxSubTextHeight,\n maxWidth: subTitleMaxWidth ?? maxWidth,\n // 兼容旧版富文本配置,如果未设置textType === 'rich',text内容为string 易报错\n textConfig: subtextStyle.character ?? (subtext as IRichTextCharacter[]),\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (subtextType === 'html') {\n const attr: any = {\n html: {\n dom: subtext as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...subtextStyle\n },\n x,\n y,\n width: subTitleWidth ?? width ?? 0,\n height: subTitleHeight ?? height ?? 0,\n ellipsis,\n wordBreak,\n maxHeight: subTitleMaxHeight ?? maxSubTextHeight,\n maxWidth: subTitleMaxWidth ?? maxWidth,\n textConfig: [] as any[],\n ...subtextStyle\n };\n this._subTitle = group.createOrUpdateChild('subTitle', attr, 'richtext') as IRichText;\n } else if (isValid(subtext)) {\n this._subTitle = group.createOrUpdateChild(\n 'subTitle',\n {\n text: isArray(subtext) ? (subtext as any) : [subtext as string],\n whiteSpace: 'normal',\n ...subtextStyle,\n maxLineWidth: subtextStyle.maxLineWidth ?? width,\n heightLimit: subtextStyle.heightLimit ?? maxSubTextHeight,\n lineClamp,\n ellipsis,\n x: 0,\n y: maintextHeight\n },\n 'text'\n ) as IText;\n }\n }\n\n const subtextHeight = this._subTitle ? this._subTitle.AABBBounds.height() : 0;\n const subtextWidth = this._subTitle ? this._subTitle.AABBBounds.width() : 0;\n\n // 设置宽高\n let titleWidth = Math.max(maintextWidth, subtextWidth);\n let titleHeight = maintextHeight + (subtextStyle.height ?? subtextHeight);\n\n if (isValid(width)) {\n titleWidth = width;\n }\n\n if (isValid(height)) {\n titleHeight = height;\n }\n\n if (isValid(minWidth) && titleWidth < minWidth) {\n titleWidth = minWidth;\n }\n if (isValid(maxWidth)) {\n if (titleWidth > maxWidth) {\n titleWidth = maxWidth;\n }\n }\n\n if (isValid(minHeight) && titleHeight < minHeight) {\n titleHeight = minHeight;\n }\n\n if (isValid(maxHeight)) {\n if (titleHeight > maxHeight) {\n titleHeight = maxHeight;\n }\n }\n group.attribute.width = titleWidth;\n group.attribute.height = titleHeight;\n group.attribute.boundsPadding = parsedPadding;\n\n // 设置对齐\n if (this._mainTitle) {\n if (isValid(align) || isValid(textStyle.align)) {\n const mainTitleAlign = textStyle.align ? textStyle.align : align;\n const mainTitleWidth = textStyle.width ?? maintextWidth;\n if (mainTitleAlign === 'left') {\n this._mainTitle.setAttribute('x', 0);\n this._mainTitle.setAttribute('textAlign', 'left');\n } else if (mainTitleAlign === 'center') {\n this._mainTitle.setAttribute('x', mainTitleWidth / 2);\n this._mainTitle.setAttribute('textAlign', 'center');\n } else if (mainTitleAlign === 'right') {\n this._mainTitle.setAttribute('x', mainTitleWidth);\n this._mainTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const mainTitleVerticalAlign = textStyle.verticalAlign ? textStyle.verticalAlign : verticalAlign;\n const mainTitleHeight = textStyle.height ? textStyle.height : titleHeight;\n if (mainTitleVerticalAlign === 'top') {\n this._mainTitle.setAttribute('y', 0);\n this._mainTitle.setAttribute('textBaseline', 'top');\n } else if (mainTitleVerticalAlign === 'middle') {\n this._mainTitle.setAttribute('y', mainTitleHeight / 2);\n this._mainTitle.setAttribute('textBaseline', 'middle');\n } else if (mainTitleVerticalAlign === 'bottom') {\n this._mainTitle.setAttribute('y', mainTitleHeight);\n this._mainTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n\n if (this._subTitle) {\n if (isValid(align) || isValid(subtextStyle.align)) {\n const subTitleAlign = subtextStyle.align ? subtextStyle.align : align;\n const subTitleWidth = subtextStyle.width ?? subtextWidth;\n if (subTitleAlign === 'left') {\n this._subTitle.setAttribute('x', 0);\n this._subTitle.setAttribute('textAlign', 'left');\n } else if (subTitleAlign === 'center') {\n this._subTitle.setAttribute('x', subTitleWidth / 2);\n this._subTitle.setAttribute('textAlign', 'center');\n } else if (subTitleAlign === 'right') {\n this._subTitle.setAttribute('x', subTitleWidth);\n this._subTitle.setAttribute('textAlign', 'right');\n }\n }\n\n if (isValid(verticalAlign) || isValid(textStyle.verticalAlign)) {\n const subTitleVerticalAlign = subtextStyle.verticalAlign ? subtextStyle.verticalAlign : verticalAlign;\n const subTitleYStart = maintextHeight;\n const subTitleHeight = subtextStyle.height ?? 0;\n if (subTitleVerticalAlign === 'top') {\n this._subTitle.setAttribute('y', subTitleYStart);\n this._subTitle.setAttribute('textBaseline', 'top');\n } else if (subTitleVerticalAlign === 'middle') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight / 2);\n this._subTitle.setAttribute('textBaseline', 'middle');\n } else if (subTitleVerticalAlign === 'bottom') {\n this._subTitle.setAttribute('y', subTitleYStart + subTitleHeight);\n this._subTitle.setAttribute('textBaseline', 'bottom');\n }\n }\n }\n }\n}\n","import { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { Factory } from '../../core/factory';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IPoint, IOrientType, ILayoutType, ILayoutRect } from '../../typings';\nimport { calcLayoutNumber, isValidOrient } from '../../util/space';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponentOption } from '../interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { ITitle, ITitleSpec } from './interface';\nimport { Title as TitleComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TitleAttrs } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode } from '@visactor/vrender-core';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual, isValidNumber, pickWithout, isValid } from '@visactor/vutils';\nimport { getSpecInfo } from '../util';\n\nexport class Title extends BaseComponent implements ITitle {\n static type = ComponentTypeEnum.title;\n type = ComponentTypeEnum.title;\n static specKey = ComponentTypeEnum.title;\n specKey: string = ComponentTypeEnum.title;\n\n layoutType: ILayoutType = 'normal';\n layoutZIndex: number = LayoutZIndex.Title;\n layoutLevel: number = LayoutLevel.Title;\n\n protected _orient: IOrientType = 'top';\n\n private _titleComponent: TitleComponents;\n private _cacheAttrs: TitleAttrs;\n\n get orient() {\n return this._orient;\n }\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._orient = isValidOrient(spec.orient) ? spec.orient : 'top';\n }\n\n initLayout(): void {\n super.initLayout();\n this._layout && (this._layout.layoutOrient = this._orient);\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, ComponentTypeEnum.title, (s: ITitleSpec) => {\n return s.visible !== false;\n });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n\n if (prevSpec?.orient !== spec?.orient || (prevSpec as any)?.visible !== (spec as any).visible) {\n // title 组件切换visible会影响布局,所以需要重新remake\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n // region\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n update(ctx: IComponentOption) {\n // TODO\n }\n\n resize(ctx: IComponentOption) {\n // TODO\n }\n\n afterSetLayoutStartPoint(pos: IPoint): void {\n if (isValidNumber(pos.x)) {\n this._titleComponent && this._titleComponent.setAttribute('x', pos.x);\n }\n if (isValidNumber(pos.y)) {\n this._titleComponent && this._titleComponent.setAttribute('y', pos.y);\n }\n super.afterSetLayoutStartPoint(pos);\n }\n\n getBoundsInRect(rect: ILayoutRect) {\n let result: Partial = {};\n this.setLayoutRect(rect);\n\n const attrs = this._getTitleAttrs();\n this._createOrUpdateTitleComponent(attrs);\n\n result = this._getTitleLayoutRect();\n const { x, y } = this.getLayoutStartPoint();\n return {\n x1: x,\n y1: y,\n x2: x + result.width,\n y2: y + result.height\n };\n }\n\n private _getTitleLayoutRect() {\n const titleBounds = this._titleComponent.AABBBounds;\n const width = this._spec.width ? this._spec.width : isValidNumber(titleBounds.width()) ? titleBounds.width() : 0;\n const height = this._spec.height\n ? this._spec.height\n : isValidNumber(titleBounds.height())\n ? titleBounds.height()\n : 0;\n return {\n width,\n height\n };\n }\n\n private _getTitleAttrs() {\n // 当 width 小于 0 时,设置为 0,负数场景容易引起不可预知的问题\n if (this._spec.visible === false) {\n return { visible: false };\n }\n const layoutRect = this.getLayoutRect();\n const titleWidth = calcLayoutNumber(this._spec.width, layoutRect.width, null, layoutRect.width);\n const titleMaxWidth = calcLayoutNumber(this._spec.maxWidth, layoutRect.width, null, layoutRect.width);\n const maxWidth = Math.max(Math.min(titleWidth, titleMaxWidth, layoutRect.width), 0);\n\n const attrs = {\n ...(pickWithout(this._spec, ['padding']) as any),\n textType: this._spec.textType ?? 'text',\n text: this._spec.text ?? '',\n subtextType: this._spec.subtextType ?? 'text',\n subtext: this._spec.subtext ?? '',\n x: this._spec.x ?? 0,\n y: this._spec.y ?? 0,\n height: this._spec.height,\n minWidth: this._spec.minWidth,\n maxWidth,\n minHeight: this._spec.minHeight,\n maxHeight: this._spec.maxHeight,\n padding: this._spec.innerPadding,\n align: this._spec.align ?? 'left',\n verticalAlign: this._spec.verticalAlign ?? 'top',\n textStyle: {\n width: maxWidth,\n maxLineWidth: maxWidth,\n ...this._spec.textStyle\n },\n subtextStyle: {\n maxLineWidth: maxWidth,\n ...this._spec.subtextStyle\n }\n } as TitleAttrs;\n\n if (isValid(this._spec.width)) {\n attrs.textStyle.width = Math.max(titleWidth, layoutRect.width);\n attrs.subtextStyle.width = attrs.textStyle.width;\n }\n return attrs;\n }\n\n private _createOrUpdateTitleComponent(attrs: TitleAttrs): TitleComponents {\n if (this._titleComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._titleComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n const title = new TitleComponents(attrs);\n title.name = 'title';\n container.add(title as unknown as INode);\n this._titleComponent = title;\n // 代理 title 组件上的事件\n title.on('*', (event: any, type: string) => this._delegateEvent(title as unknown as IGraphic, event, type));\n }\n this._cacheAttrs = attrs;\n return this._titleComponent;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._titleComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n super.clear();\n this._cacheAttrs = null;\n }\n}\n\nexport const registerTitle = () => {\n Factory.registerComponent(Title.type, Title);\n};\n","import type { IGroup, INode, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP, DEFAULT_MARK_AREA_THEME } from './config';\nimport type { CommonMarkAreaAnimationType, IMarkAreaLabelPosition, MarkAreaAttrs, MarkerAnimationState } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkAreaComponent } from './register';\nimport type { Point } from '../core/type';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkAreaAnimation, markAreaAnimate } from './animate/animate';\n\nloadMarkAreaComponent();\n\nexport function registerMarkAreaAnimate() {\n MarkArea._animate = markAreaAnimate;\n}\n\nexport class MarkArea extends Marker {\n name = 'markArea';\n static defaultAttributes = DEFAULT_MARK_AREA_THEME;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkAreaAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArea._animate && this._animationConfig) {\n MarkArea._animate(this._area, this._label, this._animationConfig, state);\n }\n }\n\n private _area!: IPolygon;\n getArea() {\n return this._area;\n }\n\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkAreaAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkArea.defaultAttributes, attributes));\n }\n\n protected getPointAttrByPosition(position: IMarkAreaLabelPosition) {\n const { x1, x2, y1, y2 } = this._area.AABBBounds;\n\n if (position.includes('left') || position.includes('Left')) {\n return {\n x: x1,\n y: (y1 + y2) / 2\n };\n }\n if (position.includes('right') || position.includes('Right')) {\n return {\n x: x2,\n y: (y1 + y2) / 2\n };\n }\n if (position.includes('top') || position.includes('Top')) {\n return {\n x: (x1 + x2) / 2,\n y: y1\n };\n }\n if (position.includes('bottom') || position.includes('Bottom')) {\n return {\n x: (x1 + x2) / 2,\n y: y2\n };\n }\n\n return {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n };\n }\n\n protected setLabelPos() {\n if (this._label && this._area) {\n const { label = {} } = this.attribute as MarkAreaAttrs;\n const labelPosition = label.position ?? 'middle';\n const labelPoint = this.getPointAttrByPosition(labelPosition as IMarkAreaLabelPosition);\n this._label.setAttributes({\n ...labelPoint,\n textStyle: {\n ...DEFAULT_CARTESIAN_MARK_AREA_TEXT_STYLE_MAP[labelPosition],\n ...label.textStyle\n }\n });\n\n if (this.attribute.limitRect && label.confine) {\n const { x, y, width, height } = this.attribute.limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n }\n\n protected initMarker(container: IGroup) {\n const { points, label, areaStyle, state } = this.attribute as MarkAreaAttrs;\n const area = graphicCreator.polygon({\n points: points,\n ...areaStyle\n });\n area.states = merge({}, DEFAULT_STATES, state?.area);\n area.name = 'mark-area-polygon';\n this._area = area;\n container.add(area);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-area-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { points, label, areaStyle, state } = this.attribute as MarkAreaAttrs;\n if (this._area) {\n this._area.setAttributes({\n points: points,\n ...areaStyle\n });\n this._area.states = merge({}, DEFAULT_STATES, state?.area);\n }\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n }\n this.setLabelPos();\n }\n\n protected isValidPoints() {\n const { points } = this.attribute as MarkAreaAttrs;\n if (!points || points.length < 3) {\n return false;\n }\n let validFlag = true;\n points.forEach((point: Point) => {\n if (!isValidNumber((point as Point).x) || !isValidNumber((point as Point).y)) {\n validFlag = false;\n return;\n }\n });\n return validFlag;\n }\n}\n","import type { IMarkArea, IMarkAreaSpec } from './interface';\nimport {\n computeClipRange,\n transformLabelAttributes,\n transformState,\n transformStyle,\n getMarkAreaProcessInfo\n} from '../utils';\nimport type { MarkArcAreaAttrs, MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { MarkArea as MarkAreaComponent, MarkArcArea as MarkArcAreaComponent } from '@visactor/vrender-components';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IGroup } from '@visactor/vrender-core';\nexport abstract class BaseMarkArea extends BaseMarker implements IMarkArea {\n static specKey = 'markArea';\n specKey = 'markArea';\n\n layoutZIndex: number = LayoutZIndex.MarkArea;\n\n // eslint-disable-next-line max-len\n protected abstract _newMarkAreaComponent(\n attr: MarkAreaAttrs | MarkArcAreaAttrs\n ): MarkAreaComponent | MarkArcAreaComponent;\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doAngleProcess, doRadiusProcess, doRadAngProcess } = getMarkAreaProcessInfo(markerSpec);\n\n if (markerSpec.coordinateType === 'polar' || doAngleProcess || doRadiusProcess || doRadAngProcess) {\n return 'polar';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const label = this._spec.label ?? {};\n const markAreaAttrs: MarkAreaAttrs | MarkArcAreaAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n points: [\n {\n x: 0,\n y: 0\n }\n ],\n center: {\n x: 0,\n y: 0\n },\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n areaStyle: transformStyle(\n transformToGraphic(this._spec.area?.style),\n this._markerData,\n this._markAttributeContext\n ),\n clipInRange: this._spec.clip ?? false,\n label: transformLabelAttributes(label, this._markerData, this._markAttributeContext),\n state: {\n area: transformState(this._spec.area?.state, this._markerData, this._markAttributeContext),\n label: transformState(this._spec.label?.state, this._markerData, this._markAttributeContext),\n labelBackground: transformState(\n this._spec?.label?.labelBackground?.state,\n this._markerData,\n this._markAttributeContext\n )\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n const markArea = this._newMarkAreaComponent(markAreaAttrs);\n return markArea as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const pointsAttr = this._computePointsAttr();\n\n const seriesData = this._getRelativeDataView().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.label?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([\n startRelativeSeries.getRegion(),\n endRelativeSeries.getRegion(),\n relativeSeries.getRegion()\n ]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n if (this._markerComponent) {\n this._markerComponent.setAttributes({\n ...pointsAttr,\n label: {\n ...this._markerComponent.attribute?.label,\n text: this._spec.label.formatMethod\n ? // type error here will be fixed in components\n (this._spec.label.formatMethod(dataPoints, seriesData) as any)\n : this._markerComponent.attribute?.label?.text\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n } as any);\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const {\n doXProcess,\n doYProcess,\n doXYProcess,\n doAngleProcess,\n doRadiusProcess,\n doRadAngProcess,\n doCoordinatesProcess\n } = getMarkAreaProcessInfo(spec);\n if (\n !doXProcess &&\n !doYProcess &&\n !doXYProcess &&\n !doAngleProcess &&\n !doRadiusProcess &&\n !doRadAngProcess &&\n !doCoordinatesProcess\n ) {\n return null;\n }\n\n this._initCommonDataView();\n }\n}\n","import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, getMarkAreaProcessInfo, positionLayout, xyLayout } from '../utils';\nimport type { MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkArea as MarkAreaComponent, registerMarkAreaAnimate } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport type { IMarkProcessOptions } from '../interface';\nimport { BaseMarkArea } from './base-mark-area';\n\nexport class CartesianMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.markArea;\n type = ComponentTypeEnum.markArea;\n name: string = ComponentTypeEnum.markArea;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected _newMarkAreaComponent(attr: MarkAreaAttrs): MarkAreaComponent {\n return new MarkAreaComponent(attr);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n let points: IPoint[] = [];\n let lines: IPoint[][] = [];\n if (doXYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 格式为 [[{x, y}], [{x, y}]]\n // 顺序为左下角开始逆时针绘制\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [\n {\n x: start[0].x,\n y: end[0].y\n },\n start[0],\n {\n x: end[0].x,\n y: start[0].y\n },\n end[0]\n ];\n }\n } else if (doXProcess || doYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [...start, end[1], end[0]];\n }\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n return { points };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [\n this._processSpecByDims([{ dim: 'x', specValue: spec.x }]),\n this._processSpecByDims([{ dim: 'x', specValue: spec.x1 }])\n ];\n } else if (doYProcess) {\n options = [\n this._processSpecByDims([{ dim: 'y', specValue: spec.y }]),\n this._processSpecByDims([{ dim: 'y', specValue: spec.y1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n return { options };\n }\n}\n\nexport const registerMarkArea = () => {\n Factory.registerComponent(CartesianMarkArea.type, CartesianMarkArea);\n registerMarkAreaAnimate();\n};\n","import type { IArc, IGroup, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { merge } from '@visactor/vutils';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_ARC_AREA_THEME, DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP } from './config';\nimport type { CommonMarkAreaAnimationType, MarkerAnimationState } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IMarkCommonArcLabelPosition, type MarkArcAreaAttrs } from './type';\nimport { limitShapeInBounds } from '../util/limit-shape';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkArcAreaComponent } from './register';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkAreaAnimation, markArcAreaAnimate } from './animate/animate';\n\nloadMarkArcAreaComponent();\n\nexport function registerMarkArcAreaAnimate() {\n MarkArcArea._animate = markArcAreaAnimate;\n}\n\nexport class MarkArcArea extends Marker {\n name = 'markArcArea';\n static defaultAttributes = DEFAULT_MARK_ARC_AREA_THEME;\n private _area!: IArc;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkAreaAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState) {\n if (MarkArcArea._animate && this._animationConfig) {\n MarkArcArea._animate(this._area, this._label, this._animationConfig, state);\n }\n }\n\n getArea() {\n return this._area;\n }\n\n getLabel() {\n return this._label;\n }\n\n constructor(attributes: MarkArcAreaAttrs, options?: ComponentOptions) {\n // eslint-disable-next-line max-len\n super(\n options?.skipDefault\n ? attributes\n : merge({}, MarkArcArea.defaultAttributes, attributes, { label: { autoRotate: true } })\n );\n }\n\n protected getPointAttrByPosition(position: IMarkCommonArcLabelPosition) {\n const { center, innerRadius, outerRadius, startAngle, endAngle, label } = this.attribute as MarkArcAreaAttrs;\n const { refX = 0, refY = 0 } = label;\n\n let radius;\n let angle;\n\n switch (position) {\n case IMarkCommonArcLabelPosition.center:\n radius = (innerRadius + outerRadius) / 2;\n angle = (startAngle + endAngle) / 2;\n break;\n case IMarkCommonArcLabelPosition.arcInnerStart:\n radius = innerRadius;\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcOuterStart:\n radius = outerRadius;\n angle = startAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerEnd:\n radius = innerRadius;\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.arcOuterEnd:\n radius = outerRadius;\n angle = endAngle;\n break;\n case IMarkCommonArcLabelPosition.arcInnerMiddle:\n radius = innerRadius;\n angle = (startAngle + endAngle) / 2;\n break;\n case IMarkCommonArcLabelPosition.arcOuterMiddle:\n radius = outerRadius;\n angle = (startAngle + endAngle) / 2;\n break;\n default: // default arcInnerMiddle\n radius = innerRadius;\n angle = (startAngle + endAngle) / 2;\n }\n\n return {\n position: {\n x: center.x + (radius + refY) * Math.cos(angle) + refX * Math.cos(angle - Math.PI / 2),\n y: center.y + (radius + refY) * Math.sin(angle) + refX * Math.sin(angle - Math.PI / 2)\n },\n angle\n };\n }\n\n protected setLabelPos() {\n if (this._label && this._area) {\n const { label = {} } = this.attribute as MarkArcAreaAttrs;\n const { position: labelPosition = 'arcInnerMiddle', autoRotate } = label;\n const labelAttr = this.getPointAttrByPosition(labelPosition as IMarkCommonArcLabelPosition);\n\n this._label.setAttributes({\n ...labelAttr.position,\n angle: autoRotate ? labelAttr.angle - Math.PI / 2 + (label.refAngle ?? 0) : 0,\n textStyle: {\n ...DEFAULT_POLAR_MARKER_TEXT_STYLE_MAP[labelPosition],\n ...label.textStyle\n }\n });\n\n if (this.attribute.limitRect && label.confine) {\n const { x, y, width, height } = this.attribute.limitRect;\n limitShapeInBounds(this._label, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n }\n }\n }\n\n protected initMarker(container: IGroup) {\n const { center, innerRadius, outerRadius, startAngle, endAngle, areaStyle, label, state } = this\n .attribute as MarkArcAreaAttrs;\n const area = graphicCreator.arc({\n x: center.x,\n y: center.y,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n ...areaStyle\n });\n area.states = merge({}, DEFAULT_STATES, state?.area);\n area.name = 'polar-mark-area-area';\n this._area = area;\n container.add(area);\n\n const markLabel = new Tag({\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n markLabel.name = 'mark-area-label';\n this._label = markLabel;\n container.add(markLabel as unknown as INode);\n this.setLabelPos();\n }\n\n protected updateMarker() {\n const { center, innerRadius, outerRadius, startAngle, endAngle, areaStyle, label, state } = this\n .attribute as MarkArcAreaAttrs;\n if (this._area) {\n this._area.setAttributes({\n x: center.x,\n y: center.y,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n ...areaStyle\n });\n this._area.states = merge({}, DEFAULT_STATES, state?.area);\n }\n if (this._label) {\n this._label.setAttributes({\n dx: 0,\n dy: 0, // 需要进行复位\n ...(label as TagAttributes),\n state: {\n panel: merge({}, DEFAULT_STATES, state?.labelBackground),\n text: merge({}, DEFAULT_STATES, state?.label)\n }\n });\n this.setLabelPos();\n }\n }\n\n protected isValidPoints() {\n return true;\n }\n}\n","import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { getMarkAreaProcessInfo, polarCoordinateLayout, polarLayout } from '../utils';\nimport type { MarkArcAreaAttrs, MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n MarkArcArea as MarkArcAreaComponent,\n MarkArea as MarkAreaComponent,\n registerMarkArcAreaAnimate,\n registerMarkAreaAnimate\n} from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint, IPolarPoint } from '../../../typings';\nimport type { IPolarSeries } from 'src/series';\nimport { BaseMarkArea } from './base-mark-area';\nimport type { IMarkProcessOptions } from '../interface';\nimport { polarToCartesian } from '@visactor/vutils';\n\nexport class PolarMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.polarMarkArea;\n type = ComponentTypeEnum.polarMarkArea;\n name: string = ComponentTypeEnum.polarMarkArea;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected declare _markerComponent: MarkArcAreaComponent;\n\n protected _newMarkAreaComponent(attr: MarkArcAreaAttrs | MarkAreaAttrs): MarkArcAreaComponent | MarkAreaComponent {\n const { doRadiusProcess, doAngleProcess, doRadAngProcess } = getMarkAreaProcessInfo(this._spec as any);\n const isArcArea = doAngleProcess || doRadiusProcess || doRadAngProcess;\n return isArcArea\n ? new MarkArcAreaComponent(attr as MarkArcAreaAttrs)\n : new MarkAreaComponent(attr as MarkAreaAttrs);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n const { doAngleProcess, doRadiusProcess, doRadAngProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const autoRange = spec.autoRange ?? false;\n\n let points: IPolarPoint[];\n let pointsAttr: {\n points?: IPoint[] | IPolarPoint[];\n innerRadius?: number;\n outerRadius?: number;\n startAngle?: number;\n endAngle?: number;\n center?: IPoint;\n } = {};\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n\n if (doAngleProcess || doRadiusProcess || doRadAngProcess) {\n const polarLines = polarLayout(\n data,\n startRelativeSeries as IPolarSeries,\n endRelativeSeries as IPolarSeries,\n relativeSeries as IPolarSeries,\n autoRange\n );\n if (doRadAngProcess) {\n pointsAttr = {\n innerRadius: polarLines[0][0].radius,\n outerRadius: polarLines[1][0].radius,\n startAngle: polarLines[0][0].angle,\n endAngle: polarLines[1][0].angle,\n center\n };\n } else if (doAngleProcess) {\n pointsAttr = {\n innerRadius: 0,\n outerRadius: Math.abs(polarLines[0][0].radius),\n startAngle: polarLines[0][1].angle,\n endAngle: polarLines[1][1].angle,\n center\n };\n } else if (doRadiusProcess) {\n pointsAttr = {\n innerRadius: polarLines[0][0].radius,\n outerRadius: polarLines[1][0].radius,\n startAngle: polarLines[0][0].angle,\n endAngle: polarLines[1][1].angle,\n center\n };\n }\n } else if (doCoordinatesProcess) {\n points = polarCoordinateLayout(data, relativeSeries as IPolarSeries, autoRange);\n pointsAttr = {\n points: points.map(point => {\n return polarToCartesian(center, point.radius, point.angle);\n })\n };\n }\n\n return pointsAttr;\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doAngleProcess, doRadiusProcess, doRadAngProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doRadAngProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius1 }\n ])\n ];\n } else if (doAngleProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle },\n { dim: 'radius', specValue: spec.radius }\n ]),\n this._processSpecByDims([\n { dim: 'angle', specValue: spec.angle1 },\n { dim: 'radius', specValue: spec.radius }\n ])\n ];\n } else if (doRadiusProcess) {\n options = [\n this._processSpecByDims([{ dim: 'radius', specValue: spec.radius }]),\n this._processSpecByDims([{ dim: 'radius', specValue: spec.radius1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options };\n }\n}\n\nexport const registerPolarMarkArea = () => {\n Factory.registerComponent(PolarMarkArea.type, PolarMarkArea);\n registerMarkArcAreaAnimate();\n registerMarkAreaAnimate();\n};\n","// export const iconPlay = `\n// M 837.808 551.64 L 219.376 968.6 a 8 8 0 0 1 -12.48 -6.64 V 128.04 a 8 8 0 0 1 12.48 -6.624 l 618.432 416.96 a 8 8 0 0 1 0 13.264 z m -534.896 -246.8 v 480.288 L 687.52 545 L 302.912 304.84 z\n// `;\n\nexport const iconPlay = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -73.1429 161.4994 a 48.7619 48.7619 0 0 1 25.9901 7.5093 l 201.7524 127.1223 a 48.7619 48.7619 0 0 1 0.3657 82.2613 l -201.7524 129.6335 A 48.7619 48.7619 0 0 1 292.5952 540.1838 v -256.7314 a 48.7619 48.7619 0 0 1 48.7619 -48.7619 z m 24.381 92.9402 v 167.9116 l 131.9497 -84.7726 L 365.7381 327.6063 z`;\nexport const iconPause = `M 414.5 0.0238 c 228.9128 0 414.4762 185.5634 414.4762 414.4762 s -185.5634 414.4762 -414.4762 414.4762 S 0.0238 643.4128 0.0238 414.5 S 185.5872 0.0238 414.5 0.0238 z m 0 73.1429 C 225.9865 73.1667 73.1667 225.9865 73.1667 414.5 s 152.8198 341.3333 341.3333 341.3333 s 341.3333 -152.8198 341.3333 -341.3333 S 603.0135 73.1667 414.5 73.1667 z m -48.7619 195.0476 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z m 158.4762 0 v 316.9524 h -73.1429 V 268.2143 h 73.1429 z`;\nexport const iconLeft = `M 521.29 734.276 L 230.929 448.019 L 521.29 161.762 c 37.685 -37.153 38.003 -97.625 0.707 -134.384 c -37.297 -36.758 -98.646 -36.435 -136.331 0.718 l -357.43 352.378 c -0.155 0.153 -0.297 0.314 -0.451 0.468 c -0.084 0.082 -0.172 0.157 -0.256 0.239 c -18.357 18.092 -27.581 41.929 -27.743 65.902 c -0.004 0.311 -0.017 0.623 -0.018 0.934 c 0.001 0.316 0.014 0.632 0.018 0.948 c 0.165 23.97 9.389 47.803 27.743 65.892 c 0.083 0.082 0.171 0.157 0.255 0.239 c 0.154 0.154 0.296 0.315 0.452 0.468 l 357.43 352.378 c 37.685 37.153 99.034 37.476 136.331 0.718 c 37.297 -36.758 36.979 -97.231 -0.707 -134.384 z`;\n\nexport const iconDown = `M 734.276 28.71 L 448.019 319.071 L 161.762 28.71 c -37.153 -37.685 -97.625 -38.003 -134.384 -0.707 c -36.758 37.297 -36.435 98.646 0.718 136.331 l 352.378 357.43 c 0.153 0.155 0.314 0.297 0.468 0.451 c 0.082 0.084 0.157 0.172 0.239 0.256 c 18.092 18.357 41.929 27.581 65.902 27.743 c 0.311 0.004 0.623 0.017 0.934 0.018 c 0.316 -0.001 0.632 -0.014 0.948 -0.018 c 23.97 -0.165 47.803 -9.389 65.892 -27.743 c 0.082 -0.083 0.157 -0.171 0.239 -0.255 c 0.154 -0.154 0.315 -0.296 0.468 -0.452 l 352.378 -357.43 c 37.153 -37.685 37.476 -99.034 0.718 -136.331 c -36.758 -37.297 -97.231 -36.979 -134.384 0.707 z`;\n\nexport const iconUp = `m 161.724 521.29 l 286.257 -290.361 l 286.257 290.361 c 37.153 37.685 97.625 38.003 134.384 0.707 c 36.758 -37.297 36.435 -98.646 -0.718 -136.331 l -352.378 -357.43 c -0.153 -0.155 -0.314 -0.297 -0.468 -0.451 c -0.082 -0.084 -0.157 -0.172 -0.239 -0.256 c -18.092 -18.357 -41.929 -27.581 -65.902 -27.743 c -0.311 -0.004 -0.623 -0.017 -0.934 -0.018 c -0.316 0.001 -0.632 0.014 -0.948 0.018 c -23.97 0.165 -47.803 9.389 -65.892 27.743 c -0.082 0.083 -0.157 0.171 -0.239 0.255 c -0.154 0.154 -0.315 0.296 -0.468 0.452 l -352.378 357.43 c -37.153 37.685 -37.476 99.034 -0.718 136.331 c 36.758 37.297 97.231 36.979 134.384 -0.707 z`;\n\nexport const iconRight = `M 30 163 L 320.361 449.257 L 30 735.514 c -37.685 37.153 -38.003 97.625 -0.707 134.384 c 37.297 36.758 98.646 36.435 136.331 -0.718 l 357.43 -352.378 c 0.155 -0.153 0.297 -0.314 0.451 -0.468 c 0.084 -0.082 0.172 -0.157 0.256 -0.239 c 18.357 -18.092 27.581 -41.929 27.743 -65.902 c 0.004 -0.311 0.017 -0.623 0.018 -0.934 c -0.001 -0.316 -0.014 -0.632 -0.018 -0.948 c -0.165 -23.97 -9.389 -47.803 -27.743 -65.892 c -0.083 -0.082 -0.171 -0.157 -0.255 -0.239 c -0.154 -0.154 -0.296 -0.315 -0.452 -0.468 l -357.43 -352.378 c -37.685 -37.153 -99.034 -37.476 -136.331 -0.718 c -37.297 36.758 -36.979 97.231 0.707 134.384 z`;\n","import type { ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { Symbol } from '@visactor/vrender-core';\n\nexport class PlayerIcon extends Symbol {\n constructor(params: ISymbolGraphicAttribute) {\n super(params);\n }\n}\n","export enum ControllerEventEnum {\n OnPlay = 'onPlay',\n OnPause = 'onPause',\n OnForward = 'onForward',\n OnBackward = 'onBackward'\n}\n\nexport enum ControllerTypeEnum {\n Start = 'start',\n Pause = 'pause',\n Forward = 'forward',\n Backward = 'backward'\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../../core/base';\nimport type { BaseGraphicAttributes } from '../../core/type';\nimport type { ControllerAttributes, LayoutType } from './type';\nimport { iconRight, iconPause, iconPlay, iconLeft, iconUp, iconDown } from './assets';\nimport { PlayerIcon } from './icon';\nimport { ControllerEventEnum, ControllerTypeEnum } from './constant';\nimport type { ComponentOptions } from '../../interface';\n\nexport class Controller extends AbstractComponent> {\n static defaultControllerAttr: ISymbolGraphicAttribute = {\n visible: true,\n x: 0,\n y: 0,\n size: 20,\n fill: '#91caff',\n pickMode: 'imprecise',\n cursor: 'pointer'\n };\n static defaultAttributes: ControllerAttributes = {\n [ControllerTypeEnum.Start]: {},\n [ControllerTypeEnum.Pause]: {},\n [ControllerTypeEnum.Backward]: {},\n [ControllerTypeEnum.Forward]: {}\n };\n\n private _isPaused = true;\n private _playController: PlayerIcon;\n private _forwardController: PlayerIcon;\n private _backwardController: PlayerIcon;\n\n private _layout: LayoutType;\n private _startAttr: BaseGraphicAttributes;\n private _pauseAttr: BaseGraphicAttributes;\n private _forwardAttr: BaseGraphicAttributes;\n private _backwardAttr: BaseGraphicAttributes;\n\n constructor(attributes: ControllerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Controller.defaultAttributes, attributes));\n this.updateAttributes();\n this._initPlay();\n this._initBackward();\n this._initForward();\n this._initEvents();\n }\n\n updateAttributes = () => {\n this._startAttr = {\n style: {\n symbolType: iconPlay,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.start.visible,\n ...this.attribute.start.style\n }\n };\n this._pauseAttr = {\n style: {\n symbolType: iconPause,\n ...Controller.defaultControllerAttr,\n visible: this.attribute.pause.visible,\n ...this.attribute.pause.style\n }\n };\n this._forwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.forward.visible,\n ...this.attribute.forward.style\n }\n };\n this._backwardAttr = {\n style: {\n ...Controller.defaultControllerAttr,\n visible: this.attribute.backward.visible,\n ...this.attribute.backward.style\n }\n };\n this.updateLayout();\n };\n\n private updateLayout = () => {\n this._layout = this.attribute.layout;\n // 若水平布局\n if (this._layout === 'horizontal') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconLeft;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconRight;\n }\n // 若垂直布局\n else if (this._layout === 'vertical') {\n this._backwardAttr.style.symbolType = this._backwardAttr.style.symbolType ?? iconUp;\n this._forwardAttr.style.symbolType = this._forwardAttr.style.symbolType ?? iconDown;\n }\n };\n\n private _initPlay = () => {\n if (isNil(this._playController)) {\n this._playController = new PlayerIcon({\n ...this._startAttr.style\n });\n\n this.add(this._playController);\n }\n };\n\n private _initBackward = () => {\n if (isNil(this._backwardController)) {\n this._backwardController = new PlayerIcon({\n ...this._backwardAttr.style\n });\n\n this.add(this._backwardController);\n }\n };\n\n private _initForward = () => {\n if (isNil(this._forwardController)) {\n this._forwardController = new PlayerIcon({\n ...this._forwardAttr.style\n });\n\n this.add(this._forwardController);\n }\n };\n\n /**\n * 初始化事件\n * 1. 注册\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._playController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n if (this._isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n });\n\n this._backwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._forwardController.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n };\n\n render(): void {\n this.updateAttributes();\n this.renderPlay();\n this.renderBackward();\n this.renderForward();\n }\n\n renderPlay = () => {\n if (this._isPaused) {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._startAttr.style\n });\n } else {\n this._playController.setAttributes({\n symbolType: this._playController.getComputedAttribute('symbolType'),\n ...this._pauseAttr.style\n });\n }\n };\n\n renderBackward = () => {\n this._backwardController.setAttributes(this._backwardAttr.style);\n };\n\n renderForward = () => {\n this._forwardController.setAttributes(this._forwardAttr.style);\n };\n\n play = () => {\n this._dispatchEvent(ControllerEventEnum.OnPlay);\n };\n\n pause = () => {\n this._dispatchEvent(ControllerEventEnum.OnPause);\n };\n\n forward = () => {\n this._dispatchEvent(ControllerEventEnum.OnForward);\n };\n\n backward = () => {\n this._dispatchEvent(ControllerEventEnum.OnBackward);\n };\n\n togglePlay = () => {\n this._playController.setAttributes(this._startAttr.style);\n this._isPaused = true;\n };\n\n togglePause = () => {\n this._playController.setAttributes(this._pauseAttr.style);\n this._isPaused = false;\n };\n}\n","export const defaultControllerAttributes = {\n visible: true,\n style: {\n x: 0,\n y: 0,\n dx: 0,\n dy: 0,\n size: 20\n },\n order: 0,\n space: 10\n};\n\n/**\n * 滑轨默认[长度,宽度]\n */\nexport const RailDefaultSize = [200, 10];\n","export enum DirectionEnum {\n Default = 'default',\n Reverse = 'reverse'\n}\n\nexport type DirectionType = 'default' | 'reverse';\n","import { OrientType } from '../interface';\nimport { DirectionEnum, DirectionType } from './type';\n\n/**\n * 检测下标是否正确\n */\ninterface ICheckIndex {\n direction: DirectionType;\n maxIndex: number;\n minIndex: number;\n dataIndex: number;\n}\nexport const checkIndex = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n // 若默认方向, 检测下标是否合法\n if (direction === DirectionEnum.Default) {\n return dataIndex < maxIndex;\n }\n // 若逆向, 检测下标是否合法\n else if (direction === DirectionEnum.Reverse) {\n return dataIndex > minIndex;\n }\n};\n\n/**\n * 判断能否进入循环\n */\n\nexport const canPlay = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex): boolean => {\n return checkIndex({ direction, maxIndex, minIndex, dataIndex });\n};\n\n/**\n * 判断是否到达了末尾\n */\nexport const isReachEndByDefault = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachEndByReverse = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachEnd = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachEndByDefault({ direction, maxIndex, dataIndex }) || isReachEndByReverse({ direction, minIndex, dataIndex })\n );\n};\n\n/**\n * 判断是否处于起点\n */\nexport const isReachStartByDefault = ({ direction, minIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Default) {\n return dataIndex === minIndex;\n }\n return false;\n};\n\nexport const isReachStartByReverse = ({ direction, maxIndex, dataIndex }: Omit) => {\n if (direction === DirectionEnum.Reverse) {\n return dataIndex === maxIndex;\n }\n return false;\n};\n\nexport const isReachStart = ({ direction, maxIndex, minIndex, dataIndex }: ICheckIndex) => {\n return (\n isReachStartByDefault({ direction, minIndex, dataIndex }) ||\n isReachStartByReverse({ direction, maxIndex, dataIndex })\n );\n};\n\n/**\n * 得到初始化下标\n */\n\nexport const isVertical = (orient: OrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: OrientType) => orient === 'top' || orient === 'bottom';\n\nexport const forwardStep = (direction: DirectionType, currentIndex: number, min: number, max: number) => {\n if (direction === 'default') {\n return Math.min(currentIndex + 1, max);\n }\n return Math.max(currentIndex - 1, min);\n};\n","import type { INode } from '@visactor/vrender-core';\nimport { isNumber, isValidNumber, max, merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { ComponentOptions, OrientType } from '../interface';\nimport type { SliderAttributes } from '../slider';\nimport { Slider } from '../slider';\nimport type { ControllerAttributes } from './controller';\nimport { Controller } from './controller';\nimport type {\n Datum,\n PlayerEventEnum,\n PlayerAttributes,\n RailStyleType,\n ControllerType,\n TrackStyleType,\n HandlerStyleType\n} from './type';\nimport { RailDefaultSize, defaultControllerAttributes } from './constant';\nimport { isHorizontal } from './utils';\n\n/**\n * 基本播放器组件\n * 提供最基本的布局能力,\n */\nexport abstract class BasePlayer extends AbstractComponent> {\n static defaultAttributes = {\n visible: true,\n data: [] as Datum[],\n interval: 1000,\n orient: 'bottom',\n align: 'center',\n size: {\n height: 20,\n width: 300\n },\n slider: {\n visible: true,\n space: 10,\n dx: 0,\n dy: 0,\n railStyle: {\n cornerRadius: 5\n },\n trackStyle: {},\n handlerStyle: {}\n },\n controller: {\n visible: true,\n start: { ...defaultControllerAttributes, key: 'start', position: 'start', space: 0 },\n pause: { ...defaultControllerAttributes, key: 'pause', position: 'start' },\n forward: { ...defaultControllerAttributes, key: 'forward', position: 'end' },\n backward: { ...defaultControllerAttributes, key: 'backward', position: 'start' }\n }\n };\n\n // 组件属性\n protected _slider: Slider;\n protected _controller: Controller;\n\n // 数据属性\n protected _data = [] as Datum[];\n protected _minIndex: number;\n getMinIndex() {\n return this._minIndex;\n }\n protected _maxIndex: number;\n getMaxIndex() {\n return this._maxIndex;\n }\n\n // 滑轨属性\n private _sliderVisible: boolean;\n private _railStyle: RailStyleType;\n private _trackStyle: TrackStyleType;\n private _handlerStyle: HandlerStyleType;\n\n // 控件属性\n private _controllerVisible: boolean;\n private _start: ControllerType;\n private _pause: ControllerType;\n private _forward: ControllerType;\n private _backward: ControllerType;\n\n // 布局属性\n private _size: { width: number; height: number };\n private _orient: OrientType;\n\n // dataIndex, 代表slider的value\n protected _dataIndex: number = 0;\n getDataIndex() {\n return this._dataIndex;\n }\n\n private _layoutInfo: {\n // 滚动条位置\n slider?: { x: number; y: number; size: number };\n\n // 控件位置\n start?: { x: number; y: number; size: number };\n pause?: { x: number; y: number; size: number };\n backward?: { x: number; y: number; size: number };\n forward?: { x: number; y: number; size: number };\n } = {};\n\n abstract play(): void;\n abstract pause(): void;\n abstract backward(): void;\n abstract forward(): void;\n\n constructor(attributes: T, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BasePlayer.defaultAttributes, attributes));\n // 先初始化属性, 再初始化Slider、Controller, 最后初始化事件.\n this._initAttributes();\n this._initDataIndex();\n this._initLayoutInfo();\n this._initController();\n this._initSlider();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes() {\n // 基本布局属性\n this._size = this.attribute.size;\n this._orient = this.attribute.orient;\n\n // Slider范围, 起点一定要从0开始\n this._data = this.attribute.data;\n this._minIndex = 0;\n this._maxIndex = this._data.length - 1;\n\n const { slider = {}, controller = {} as PlayerAttributes['controller'] } = this.attribute;\n // 轨道样式\n this._sliderVisible = slider.visible;\n this._railStyle = { ...slider.railStyle };\n this._trackStyle = { ...slider.trackStyle };\n this._handlerStyle = { ...slider.handlerStyle };\n\n // 控制器样式\n this._controllerVisible = controller.visible;\n this._start = { ...controller.start };\n this._pause = { ...controller.pause };\n this._forward = { ...controller.forward };\n this._backward = { ...controller.backward };\n }\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex() {\n this._dataIndex = this.attribute.dataIndex ?? 0;\n }\n\n private _initLayoutInfo() {\n // 控制器\n const controllers = [this._start, this._backward, this._forward].sort((a, b) => a.order - b.order);\n // 在开始位置的控制器\n const startControllers = controllers.filter(d => d.position !== 'end');\n // 在结束位置的控制器\n const endControllers = controllers.filter(d => d.position === 'end');\n // 滑轨横切面长度\n const railSectionLength =\n (isHorizontal(this._orient) ? this._railStyle.height : this._railStyle.width) ?? RailDefaultSize[1];\n\n // 1. 计算所有组件自身占据的宽度 or 高度\n const controllerPx = controllers.reduce((len, controller) => {\n const size = controller.style.size;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n return len + controller.space + maxSize;\n }, 0);\n\n // 2. 计算slider的总占据像素\n const sliderPx = this._sliderVisible\n ? (isHorizontal(this._orient) ? this._size?.width : this._size?.height) - controllerPx\n : 0;\n\n // 3. 计算slider滑轨的总占据像素\n const railPx = sliderPx - this.attribute.slider.space;\n\n // 4. 计算起点控件坐标\n const startPx = startControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, 0);\n\n // 5. 计算slider的起点坐标\n this._layoutInfo.slider = {\n ...this._layoutInfo.slider,\n size: railPx,\n x: isHorizontal(this._orient)\n ? startPx + this.attribute.slider.space\n : (this._size.width - railSectionLength) / 2,\n y: isHorizontal(this._orient)\n ? (this._size.height - railSectionLength) / 2\n : startPx + this.attribute.slider.space\n };\n\n // 6. 计算终点控件坐标\n endControllers.reduce((px, controller) => {\n const {\n key,\n space,\n style: { size }\n } = controller;\n const maxSize = isNumber(size) ? size : max(size[0], size[1]);\n this._layoutInfo[key] = {\n ...this._layoutInfo[key],\n size: maxSize,\n x: isHorizontal(this._orient) ? px + space : (this._size.width - maxSize) / 2,\n y: isHorizontal(this._orient) ? (this._size.height - maxSize) / 2 : px + space\n };\n return px + space + maxSize;\n }, startPx + sliderPx);\n }\n\n /**\n * 初始化滑动条\n */\n private _updateSliderAttrs = () => {\n let handlerSize;\n if (isValidNumber(this._handlerStyle.size)) {\n handlerSize = this._handlerStyle.size;\n } else if (this._handlerStyle.size && this._handlerStyle.size.length) {\n handlerSize = max(this._handlerStyle.size[0], this._handlerStyle.size[1]);\n }\n\n const attrs: SliderAttributes = {\n visible: this._sliderVisible,\n // 重要参数\n min: this._minIndex,\n max: this._maxIndex,\n value: this._dataIndex,\n railWidth: this._railStyle.width,\n railHeight: this._railStyle.height,\n railStyle: this._railStyle,\n trackStyle: this._trackStyle,\n handlerSize: isValidNumber(handlerSize) ? handlerSize : undefined,\n handlerStyle: this._handlerStyle,\n // 不重要, 但需要预设的参数\n dy: this.attribute.slider.dy,\n dx: this.attribute.slider.dx,\n slidable: true,\n range: false,\n handlerText: { visible: false },\n startText: { visible: false },\n endText: { visible: false },\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n\n // 横向布局\n if (isHorizontal(this._orient)) {\n // 滑动条水平居中\n const railWidth = Math.max(0, this._layoutInfo.slider.size);\n const railHeight = this._railStyle.height ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'horizontal';\n attrs.railHeight = railHeight;\n attrs.railWidth = railWidth;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n // 纵向布局\n else {\n // 滑动条垂直居中\n const railHeight = Math.max(0, this._layoutInfo.slider.size);\n const railWidth = this._railStyle.width ?? RailDefaultSize[1];\n\n // 属性修改\n attrs.layout = 'vertical';\n attrs.railWidth = railWidth;\n attrs.railHeight = railHeight;\n attrs.x = this._layoutInfo.slider.x;\n attrs.y = this._layoutInfo.slider.y;\n }\n return attrs;\n };\n\n private _initSlider = () => {\n const attrs = this._updateSliderAttrs();\n this._slider = new Slider(attrs);\n if (this._sliderVisible) {\n this.add(this._slider as unknown as INode);\n }\n };\n\n /**\n * 初始化控制器\n */\n private _updateControllerAttrs = () => {\n const attrs: ControllerAttributes = {\n start: this._start,\n pause: this._pause,\n forward: this._forward,\n backward: this._backward,\n disableTriggerEvent: this.attribute.disableTriggerEvent\n };\n // 横向布局\n attrs.layout = isHorizontal(this._orient) ? 'horizontal' : 'vertical';\n attrs.start = {\n ...attrs.start,\n style: {\n ...attrs.start.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.pause = {\n ...attrs.pause,\n // 暂停按钮, 复用开始按钮的布局\n style: {\n ...attrs.pause.style,\n x: this._layoutInfo.start.x,\n y: this._layoutInfo.start.y\n }\n };\n attrs.backward = {\n ...attrs.backward,\n style: {\n ...attrs.backward.style,\n x: this._layoutInfo.backward.x,\n y: this._layoutInfo.backward.y\n }\n };\n attrs.forward = {\n ...attrs.forward,\n style: {\n ...attrs.forward.style,\n x: this._layoutInfo.forward.x,\n y: this._layoutInfo.forward.y\n }\n };\n return attrs;\n };\n\n private _initController = () => {\n const attrs = this._updateControllerAttrs();\n this._controller = new Controller(attrs);\n if (this._controllerVisible) {\n this.add(this._controller as unknown as INode);\n }\n };\n\n /**\n * 渲染\n */\n render() {\n this._initLayoutInfo();\n this.renderSlider();\n this.renderController();\n }\n\n /**\n * 更新滑动条\n */\n renderSlider() {\n const attrs = this._updateSliderAttrs();\n this._slider.setAttributes(attrs);\n }\n\n /**\n * 更新控制器\n */\n renderController() {\n const attrs = this._updateControllerAttrs();\n this._controller.setAttributes(attrs);\n }\n\n /**\n * 触发事件\n * @param eventType 事件类型\n * @param dataIndex 数据下标\n */\n dispatchCustomEvent(eventType: PlayerEventEnum, dataIndex: number) {\n this._dispatchEvent(eventType, {\n eventType,\n index: dataIndex,\n value: this._data[dataIndex]\n });\n }\n}\n","import { registerGroup, registerSymbol } from '@visactor/vrender-kits';\nimport { loadSliderComponent } from '../slider/register';\n\nfunction loadBasePlayer() {\n loadSliderComponent();\n registerGroup();\n registerSymbol();\n}\n\nexport function loadDiscretePlayerComponent() {\n loadBasePlayer();\n}\n\nexport function loadContinuousPlayerComponent() {\n loadBasePlayer();\n}\n","export enum PlayerEventEnum {\n change = 'change',\n play = 'play',\n pause = 'pause',\n backward = 'backward',\n forward = 'forward',\n end = 'end',\n\n /**\n * @deprecated please use `change` instead.\n */\n OnChange = 'change',\n /**\n * @deprecated please use `play` instead.\n */\n OnPlay = 'play',\n /**\n * @deprecated please use `pause` instead.\n */\n OnPause = 'pause',\n /**\n * @deprecated please use `backward` instead.\n */\n OnBackward = 'backward',\n /**\n * @deprecated please use `forward` instead.\n */\n OnForward = 'forward',\n /**\n * @deprecated please use `end` instead.\n */\n OnEnd = 'end'\n}\n","import { isNil, merge } from '@visactor/vutils';\nimport type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { DirectionType, DiscretePlayerAttributes, PlayerAttributes } from './type';\nimport { DirectionEnum, PlayerEventEnum } from './type';\nimport { forwardStep, isReachEnd, isReachStart } from './utils';\nimport { ControllerEventEnum } from './controller/constant';\nimport type { ComponentOptions } from '../interface';\nimport { loadDiscretePlayerComponent } from './register';\n\nloadDiscretePlayerComponent();\nexport class DiscretePlayer extends BasePlayer {\n declare attribute: DiscretePlayerAttributes;\n\n private _activeIndex = -1;\n\n protected _alternate: boolean;\n protected _interval: number;\n\n private _isPlaying: boolean;\n private _direction: DirectionType;\n private _tickTime: number;\n private _rafId: number;\n private _isReachEnd = false;\n\n constructor(attributes: DiscretePlayerAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, attributes));\n\n this._initAttributes();\n this._initDataIndex();\n this._initEvents();\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean): void {\n super.setAttributes(params, forceUpdateTag);\n this._initAttributes();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n this._alternate = this.attribute.alternate ?? false;\n this._interval = this.attribute.interval ?? 1000;\n this._direction = this.attribute.direction ?? DirectionEnum.Default;\n };\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex = () => {\n this._dataIndex = isNil(this.attribute.dataIndex)\n ? this._direction === 'default'\n ? this._minIndex\n : this._maxIndex\n : this.attribute.dataIndex ?? 0;\n\n this._slider.setAttribute('value', this._dataIndex);\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent & { detail: { value: number } }) => {\n const middle = Math.floor(e.detail.value) + 0.5;\n this._dataIndex = e.detail.value >= middle ? Math.ceil(e.detail.value) : Math.floor(e.detail.value);\n this._slider.setValue(this._dataIndex);\n this.dispatchCustomEvent(PlayerEventEnum.change);\n });\n };\n\n /**\n * 派遣事件\n */\n dispatchCustomEvent(event: PlayerEventEnum) {\n super.dispatchCustomEvent(event, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = () => {\n if (this._isPlaying) {\n return;\n }\n // 一条数据无需播放\n if (this._data.length === 1) {\n return;\n }\n // 图标切换\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 若到达末尾, 则计算下一次播放的状态下标\n if (\n isReachEnd({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n }) ||\n isReachStart({\n dataIndex: this._dataIndex,\n maxIndex: this._maxIndex,\n minIndex: this._minIndex,\n direction: this._direction\n })\n ) {\n // 根据方向恢复dataIndex\n if (this._direction === DirectionEnum.Default) {\n this._updateDataIndex(this._minIndex);\n } else {\n this._updateDataIndex(this._maxIndex);\n }\n }\n\n // 事件触发\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 重置结束状态\n this._isReachEnd = false;\n // 重置tick时间, 暂停后重新播放也会重新计时\n this._tickTime = Date.now();\n // 开启动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, true));\n };\n\n /**\n * 播放过程\n */\n private _play = (isFirstPlay: boolean) => {\n const now = Date.now();\n\n // 抵达终点, 延迟一个interval触发end\n if (this._isReachEnd && now - this._tickTime >= this._interval) {\n this._isReachEnd = false;\n this._playEnd();\n return;\n }\n // 未达终点\n\n // 第一个播放帧, 立即执行\n if (isFirstPlay && this._activeIndex !== this._dataIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this._activeIndex = this._dataIndex;\n }\n // 中间播放帧, 每一个interval执行一次\n else if (now - this._tickTime >= this._interval) {\n this._tickTime = now;\n this._updateDataIndex(forwardStep(this._direction, this._dataIndex, this._minIndex, this._maxIndex));\n this._activeIndex = this._dataIndex;\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n\n // 终止条件\n if (\n (this._direction === 'default' && this._dataIndex >= this._maxIndex) ||\n (this._direction === 'reverse' && this._dataIndex <= this._minIndex)\n ) {\n this._isReachEnd = true;\n }\n\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this, false));\n };\n\n /**\n * 更新数据\n */\n private _updateDataIndex = (dataIndex: number) => {\n this._dataIndex = dataIndex;\n this._slider.setValue(this._dataIndex);\n };\n\n /**\n * 播放结束\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 图标切换\n this._controller.togglePlay();\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 重置ActiveIndex\n this._activeIndex = -1;\n // 播放结束时并且到达终点\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 后退接口\n */\n backward = () => {\n const { loop = false } = this.attribute as PlayerAttributes;\n let index;\n if (loop) {\n index = this._dataIndex - 1 < this._minIndex ? this._maxIndex : this._dataIndex - 1;\n } else {\n index = Math.max(this._dataIndex - 1, this._minIndex);\n }\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 前进接口\n */\n forward = () => {\n const { loop = false } = this.attribute as PlayerAttributes;\n let index;\n if (loop) {\n index = this._dataIndex + 1 > this._maxIndex ? this._minIndex : this._dataIndex + 1;\n } else {\n index = Math.min(this._dataIndex + 1, this._maxIndex);\n }\n this._updateDataIndex(index);\n\n this.dispatchCustomEvent(PlayerEventEnum.change);\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n}\n","import type { FederatedPointerEvent } from '@visactor/vrender-core';\nimport { vglobal } from '@visactor/vrender-core';\nimport { BasePlayer } from './base-player';\nimport type { ContinuousPlayerAttributes } from './type';\nimport { PlayerEventEnum } from './type';\nimport { ControllerEventEnum } from './controller/constant';\nimport { loadContinuousPlayerComponent } from './register';\n\nloadContinuousPlayerComponent();\nexport class ContinuousPlayer extends BasePlayer {\n declare attribute: ContinuousPlayerAttributes;\n\n private _activeIndex: number;\n\n protected _alternate: boolean;\n protected _interval: number;\n protected _totalDuration: number;\n\n private _isPlaying = false;\n private _startTime: number = Date.now();\n private _elapsed: number;\n private _rafId: number;\n\n constructor(attributes: ContinuousPlayerAttributes) {\n super(attributes);\n\n this._initAttributes();\n this._initDataIndex();\n this._initEvents();\n }\n\n /**\n * 初始化属性\n */\n _initAttributes = () => {\n super._initAttributes();\n // 新增一个占位数据\n this._maxIndex = this._data.length;\n this._slider.setAttribute('max', this._maxIndex);\n\n this._isPlaying = false;\n this._elapsed = 0;\n this._interval = this.attribute.interval ?? 1000;\n\n // 播放帧数(10条数据, 需要10个播放帧)\n const frames = this._data.length;\n\n // 若用户配置了总时长\n if (this.attribute.totalDuration && this._data.length) {\n this._totalDuration = this.attribute.totalDuration;\n // 避免除0\n this._interval = this._totalDuration / (frames ?? 1);\n }\n // 若未配置总时长, 则根据interval算出一个总时长, interval有默认值\n else {\n this._totalDuration = this._interval * frames;\n this._interval = this.attribute.interval;\n }\n };\n\n /**\n * 初始化dataIndex\n */\n _initDataIndex = () => {\n this._dataIndex = this.attribute.dataIndex ?? this._minIndex;\n };\n\n /**\n * 初始化事件\n */\n private _initEvents = () => {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n this._controller.addEventListener(ControllerEventEnum.OnPlay, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.play();\n });\n this._controller.addEventListener(ControllerEventEnum.OnPause, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.pause();\n });\n this._controller.addEventListener(ControllerEventEnum.OnForward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.forward();\n });\n this._controller.addEventListener(ControllerEventEnum.OnBackward, (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.backward();\n });\n\n this._slider.addEventListener('change', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n /**\n * 根据value, 反推开始时间\n * 1. 计算进度\n * 2. 计算流逝时间\n * 3. 用现在的时间, 模拟一个开始时间\n */\n const value = (e.detail as unknown as { value: number; position: number })?.value;\n const progress = value / this._maxIndex;\n this._elapsed = progress * this._totalDuration;\n this._startTime = Date.now() - this._elapsed;\n\n this._dispatchChange(value);\n });\n };\n\n /**\n * 根据已流逝时间和总时长, 计算slider的值\n */\n private _getSliderValue = () => {\n const progress = this._elapsed / this._totalDuration;\n return Math.min(progress * this._maxIndex, this._maxIndex);\n };\n\n /**\n * 根据流逝时间, 更新Slider的值\n */\n private _updateSlider = () => {\n const value = this._getSliderValue();\n this._dataIndex = Math.floor(value);\n this._slider.setValue(Math.min(value, this._maxIndex));\n this._dispatchChange(Math.floor(value));\n };\n\n /**\n * 根据Slider的值, 判断是否要触发Change事件.\n */\n private _dispatchChange = (value: number) => {\n const index = Math.floor(value);\n if (index !== this._activeIndex) {\n this._dataIndex = index;\n this._activeIndex = index;\n\n if (index !== this._maxIndex) {\n this.dispatchCustomEvent(PlayerEventEnum.change);\n }\n }\n };\n\n /**\n * 派遣事件\n * @param eventType 事件类型\n */\n dispatchCustomEvent(eventType: PlayerEventEnum) {\n super.dispatchCustomEvent(eventType, this._dataIndex);\n }\n\n /**\n * 播放接口\n */\n play = async () => {\n if (this._isPlaying) {\n return;\n }\n // 切换按钮\n this._controller.togglePause();\n // 播放状态更新\n this._isPlaying = true;\n // 播放结束后再点击play, 此条件下生效.\n if (this._elapsed >= this._totalDuration) {\n this._elapsed = 0;\n }\n // 此时此刻减去已流逝的时间, 则为起点对应的时间戳.\n this._startTime = Date.now() - this._elapsed;\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.play);\n // 开始播放动画\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放动画主要逻辑\n */\n private _play = () => {\n // 计算已流逝的时间, 但不需要保存\n this._elapsed = Date.now() - this._startTime;\n // 计算Slider的值.\n const value = this._getSliderValue();\n // 更新Slider的值.\n this._updateSlider();\n\n // 播放终止条件\n if (value >= this._maxIndex) {\n this._playEnd();\n return;\n }\n\n // 持续播放\n this._rafId = vglobal.getRequestAnimationFrame()(this._play.bind(this));\n };\n\n /**\n * 播放结束时触发\n */\n private _playEnd = () => {\n // 播放状态更新\n this._isPlaying = false;\n // 取消播放动画\n vglobal.getCancelAnimationFrame()(this._rafId);\n // 切换按钮\n this._controller.togglePlay();\n // 事件\n this.dispatchCustomEvent(PlayerEventEnum.end);\n };\n\n /**\n * 暂停接口\n */\n pause = () => {\n if (!this._isPlaying) {\n return;\n }\n this._isPlaying = false;\n // 计算已流逝的时间, 需要记录下来\n this._elapsed = Date.now() - this._startTime;\n vglobal.getCancelAnimationFrame()(this._rafId);\n this._controller.togglePlay();\n\n this.dispatchCustomEvent(PlayerEventEnum.pause);\n };\n\n /**\n * 前进接口\n */\n backward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 减去 interval\n const elapsed = this._elapsed - interval;\n\n // 若到达起点\n if (elapsed <= 0) {\n this._elapsed = 0;\n this._startTime = now;\n }\n // 若未到达起点\n else {\n this._elapsed = elapsed;\n this._startTime = this._startTime + this._interval;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.backward);\n };\n\n /**\n * 后退接口\n */\n forward = () => {\n // 按下按钮的时间\n const now = Date.now();\n // 步长\n const interval = this._interval * 1;\n // 流逝时间 加上 1个interval\n const elapsed = this._elapsed + interval;\n // 若超过终点\n if (elapsed >= this._totalDuration) {\n this._startTime = now - this._totalDuration;\n this._elapsed = this._totalDuration;\n }\n // 未超过终点\n else {\n this._startTime = this._startTime - interval;\n this._elapsed = elapsed;\n }\n // 更新slider\n this._updateSlider();\n\n this.dispatchCustomEvent(PlayerEventEnum.forward);\n };\n\n render() {\n super.render();\n }\n}\n","import type { ContinuousPlayerAttributes, DiscretePlayerAttributes, Datum } from '@visactor/vrender-components';\nimport type { IPlayer } from '../interface';\nimport type { IRectGraphicAttribute, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport type { IRectMarkSpec, ISymbolMarkSpec } from '../../../typings';\nimport { transformToGraphic } from '../../../util/style';\nimport type { BaseGraphicAttributes } from '@visactor/vrender-components';\n\n/**\n * IRectMarkSpec => IRectGraphicAttribute\n */\nconst rectToAttribute = (markSpec: IRectMarkSpec): IRectGraphicAttribute => {\n const result: IRectGraphicAttribute = {\n ...(markSpec as unknown as IRectGraphicAttribute)\n };\n\n return transformToGraphic(result) as IRectGraphicAttribute;\n};\n\n/**\n * ISymbolMarkSpec => ISymbolGraphicAttribute\n */\nconst symbolToAttribute = (markSpec: ISymbolMarkSpec): ISymbolGraphicAttribute => {\n const result: ISymbolGraphicAttribute = {\n ...(markSpec as unknown as ISymbolGraphicAttribute)\n };\n\n return transformToGraphic(result) as ISymbolGraphicAttribute;\n};\n\nconst baseToAttribute = (spec: BaseGraphicAttributes) => {\n const result: BaseGraphicAttributes = {\n ...spec,\n style: {\n ...transformToGraphic(spec.style)\n }\n };\n return result;\n};\n\nconst transformToAttrs = (spec: IPlayer) => {\n // slider\n const trackStyle = rectToAttribute(spec?.slider?.trackStyle ?? {});\n const railStyle = rectToAttribute(spec?.slider?.railStyle ?? {});\n const handlerStyle = symbolToAttribute(spec?.slider?.handlerStyle ?? {});\n\n // controllers\n const start = baseToAttribute(spec?.controller?.start ?? {});\n const pause = baseToAttribute(spec?.controller?.pause ?? {});\n const backward = baseToAttribute(spec?.controller?.backward ?? {});\n const forward = baseToAttribute(spec?.controller?.forward ?? {});\n\n const attrs = {\n ...spec,\n direction: spec.direction,\n interval: spec.interval,\n visible: spec.visible,\n // 不配置默认值的话, set attr时会将undefined代入配置, 导致vrender默认配置失效\n orient: spec.orient ?? 'bottom',\n slider: {\n ...spec.slider,\n trackStyle: trackStyle,\n railStyle: railStyle,\n handlerStyle: handlerStyle\n },\n controller: {\n ...spec.controller,\n start: start,\n pause: pause,\n backward: backward,\n forward: forward\n }\n };\n\n // player hidden after set player.visible: 'false'\n if (!spec.visible) {\n attrs.controller.visible = false;\n attrs.slider.visible = false;\n }\n\n return attrs;\n};\n\n/**\n * 连续型播放器spec转换为Attrs\n */\nexport const transformContinuousSpecToAttrs = (spec: IPlayer, data: Datum[]): ContinuousPlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'continuous'\n});\n\nexport const transformDiscreteSpecToAttrs = (spec: IPlayer, data: Datum[]): DiscretePlayerAttributes => ({\n ...(transformToAttrs(spec) as any),\n data,\n type: 'discrete'\n});\n","import type { IOrientType } from '../../../typings';\n\nexport const isVertical = (orient: IOrientType) => orient === 'left' || orient === 'right';\n\nexport const isHorizontal = (orient: IOrientType) => orient === 'top' || orient === 'bottom';\n","import { Factory } from './../../core/factory';\nimport type { INode, IGroup, IGraphic } from '@visactor/vrender-core';\nimport type { ContinuousPlayerAttributes, DiscretePlayerAttributes } from '@visactor/vrender-components';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscretePlayer, ContinuousPlayer, PlayerEventEnum } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, array, isEqual, isValidNumber } from '@visactor/vutils';\n\nimport type { IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\n\nimport type { DirectionType, IPlayer } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent } from '../interface';\nimport type { IPoint, IOrientType, ILayoutRect, IChartSpec, IDataValues } from '../../typings';\n\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport { transformContinuousSpecToAttrs, transformDiscreteSpecToAttrs } from './utils/transform';\nimport { isHorizontal, isVertical } from './utils/orient';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { ChartEvent } from '../../constant/event';\n\nexport class Player extends BaseComponent implements IComponent {\n layoutZIndex: number = LayoutZIndex.Player;\n layoutLevel: number = LayoutLevel.Player;\n\n static specKey = 'player';\n specKey: string = 'player';\n\n static type = ComponentTypeEnum.player;\n type = ComponentTypeEnum.player;\n protected _orient: IOrientType = 'bottom';\n private _specs: Partial[];\n\n private _playerComponent: DiscretePlayer | ContinuousPlayer;\n private _cacheAttrs: ContinuousPlayerAttributes | DiscretePlayerAttributes;\n\n private _visible: boolean;\n private _direction: DirectionType;\n private _alternate: boolean;\n private _dx: number;\n private _dy: number;\n private _width: number;\n private _height: number;\n private _position: 'start' | 'middle' | 'end';\n\n get orient() {\n return this._orient;\n }\n\n set layoutOrient(v: IOrientType) {\n this._orient = v;\n }\n\n /**\n * 设置Attr\n */\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._orient = this._spec.orient ?? 'bottom';\n this._specs = this._spec.specs ?? [];\n this._direction = this._spec.direction ?? 'default';\n this._alternate = this._spec.alternate ?? false;\n this._dx = this._spec.dx ?? 0;\n this._dy = this._spec.dy ?? 0;\n this._position = this._spec.position ?? 'middle';\n this._visible = this._spec.visible ?? true;\n }\n\n /**\n * 计算组件位置(布局的左上角起点)\n * @param pos\n */\n afterSetLayoutStartPoint(pos: IPoint) {\n super.afterSetLayoutStartPoint(pos);\n if (isValidNumber(pos.x)) {\n const offsetX = isVertical(this._orient) ? pos.x + this._sliderExceededSize() / 2 : pos.x;\n this._playerComponent && this._playerComponent.setAttribute('x', offsetX);\n }\n if (isValidNumber(pos.y)) {\n const offsetY = isHorizontal(this._orient) ? pos.y + this._sliderExceededSize() / 2 : pos.y;\n this._playerComponent && this._playerComponent.setAttribute('y', offsetY);\n }\n }\n\n /**\n * 计算组件占用的bound box\n * @param rect\n * @returns\n */\n getBoundsInRect(rect: ILayoutRect, fullSpace: ILayoutRect) {\n this._width = this._computeWidth(rect);\n this._height = this._computeHeight(rect);\n this._dx = this._computeDx(fullSpace);\n this._dy = this._computeDy(fullSpace);\n\n const bounds = this._computeLayoutRect(rect, this._width, this._height);\n\n this._createOrUpdatePlayerComponent();\n\n return bounds;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._playerComponent] as unknown as IGroup[];\n }\n\n /**\n * 播放器属性\n */\n private _getPlayerAttrs = () => {\n const type = this._spec.type;\n const layoutAttrs = {\n size: {\n width: this._width,\n height: this._height\n },\n dx: this._spec.dx ?? 0 + this._dx,\n dy: this._spec.dy ?? 0 + this._dy\n };\n // 离散类型Attrs\n if (type === 'discrete') {\n return {\n ...transformDiscreteSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent,\n loop: this._spec?.loop ?? true\n };\n }\n // 连续类型Attrs\n return {\n ...transformContinuousSpecToAttrs(this._spec, this._specs),\n ...layoutAttrs,\n disableTriggerEvent: this._option.disableTriggerEvent,\n loop: this._spec?.loop ?? true\n };\n };\n\n /**\n * 创建或更新播放器组件\n */\n private _createOrUpdatePlayerComponent = () => {\n const attrs = { ...this._getPlayerAttrs() };\n const container = this.getContainer();\n if (this._playerComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._cacheAttrs = attrs;\n this._playerComponent.setAttributes(attrs);\n // FIXME: player 组件没有重写 setAttributes 方法,因此不能正常更新样式。以下两句模拟执行了 setAttributes 方法,但是应在 vrender-component 的后续版本中实现 setAttributes 方法\n this._playerComponent._initAttributes();\n this._playerComponent.render();\n }\n } else {\n if (attrs.type === 'discrete') {\n this._playerComponent = new DiscretePlayer(attrs);\n } else {\n this._playerComponent = new ContinuousPlayer(attrs);\n }\n\n this._cacheAttrs = attrs;\n this._playerComponent.name = `player`;\n\n container.add(this._playerComponent as unknown as INode);\n\n this._initEvent();\n }\n };\n\n /**\n * 计算起点\n */\n private _computeLayoutRect(rect: ILayoutRect, width: number, height: number) {\n // don't set bounds when player hidden\n if (this._visible === false) {\n return { x1: 0, x2: 0, y1: 0, y2: 0 };\n }\n // set bounds by 4 kinds of orient\n switch (this._orient) {\n case 'top': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'right': {\n return { x1: rect.width - width, y1: 0, x2: rect.width, y2: rect.height };\n }\n case 'left': {\n return { x1: 0, y1: 0, x2: width, y2: height };\n }\n case 'bottom':\n default: {\n return { x1: 0, y1: rect.height - height, x2: rect.width, y2: rect.height };\n }\n }\n }\n\n /**\n * 计算组件宽度\n */\n private _computeWidth(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.width)) {\n return Math.min(rect.width, Number(this._spec.width));\n }\n\n if (isVertical(this._orient)) {\n return this._maxSize();\n }\n return rect.width;\n }\n\n /**\n * 计算组件高度\n */\n private _computeHeight(rect: ILayoutRect) {\n // 若设置的是数值则直接返回\n if (isNumber(this._spec.height)) {\n this._height = this._spec.height;\n return Math.min(rect.height, Number(this._spec.height));\n }\n\n if (isHorizontal(this._orient)) {\n return this._maxSize();\n }\n return rect.height;\n }\n\n /**\n * 计算x方向的偏移, 用于实现对齐\n */\n private _computeDx(rect: ILayoutRect) {\n // 垂直时, x不偏移\n if (isVertical(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.width - this._width) / 2;\n }\n // end\n return rect.width - this._width;\n }\n\n /**\n * 计算y方向的偏移, 用于实现对齐\n */\n private _computeDy(rect: ILayoutRect) {\n // 水平时, y不偏移\n if (isHorizontal(this._orient)) {\n return 0;\n }\n\n // start\n if (this._position === 'start') {\n return 0;\n }\n // middle\n else if (this._position === 'middle') {\n return (rect.height - this._height) / 2;\n }\n\n // end\n return rect.height - this._height;\n }\n\n /**\n * 播放器宽度取计算子组件中最高的一个\n */\n private _maxSize = () => {\n return Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size),\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10\n );\n };\n\n /**\n * 滑动条超过按钮的高度\n */\n private _sliderExceededSize = () => {\n const sliderHeight =\n (isVertical(this._orient) ? this._spec.slider.railStyle.width : this._spec.slider.railStyle.height) ?? 10;\n const controllersHeight = Math.max(\n ...array(this._spec.controller.start?.style?.size),\n ...array(this._spec.controller.pause?.style?.size),\n ...array(this._spec.controller.backward?.style?.size),\n ...array(this._spec.controller.forward?.style?.size)\n );\n if (sliderHeight >= controllersHeight) {\n return sliderHeight - controllersHeight;\n }\n return 0;\n };\n\n changePlayerIndex(index: number) {\n const spec = this._specs[index];\n (array(spec.data) as IDataValues[]).forEach(data => {\n this._option?.globalInstance?.updateData(data.id, data.values);\n });\n this.event.emit(ChartEvent.playerChange, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n }\n\n /**\n * 事件\n */\n private _initEvent = () => {\n if (this._option.disableTriggerEvent) {\n return;\n }\n // 自动播放\n this._option.globalInstance.on(ChartEvent.rendered, () => {\n if (this._spec?.auto) {\n this._playerComponent.play();\n }\n });\n\n // 循环播放 与 交替方向\n this._playerComponent.addEventListener(PlayerEventEnum.end, () => {\n this.event.emit(ChartEvent.playerEnd, { model: this });\n\n // 交替方向, 仅离散轴支持\n if (this._alternate && this._spec.type === 'discrete') {\n this._direction = this._direction === 'default' ? 'reverse' : 'default';\n this._playerComponent.setAttributes({\n direction: this._direction,\n dataIndex: this._direction === 'reverse' ? this._specs.length - 2 : 1\n });\n }\n\n // 循环播放\n if (this._spec?.loop) {\n this._playerComponent.play();\n }\n });\n\n // 数据更新\n this._playerComponent.addEventListener(PlayerEventEnum.change, (e: { detail: { index: number } }) => {\n // 更新data\n const { index } = e.detail;\n this.changePlayerIndex(index);\n });\n\n // 后退\n this._playerComponent.addEventListener(PlayerEventEnum.backward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerBackward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 前进\n this._playerComponent.addEventListener(PlayerEventEnum.forward, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerForward, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 播放\n this._playerComponent.addEventListener(PlayerEventEnum.play, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPlay, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n\n // 暂停\n this._playerComponent.addEventListener(PlayerEventEnum.pause, (e: { detail: { index: number } }) => {\n const { index } = e.detail;\n const spec = this._specs[index];\n this.event.emit(ChartEvent.playerPause, {\n model: this,\n value: {\n spec: spec,\n index: index,\n specs: this._specs\n }\n });\n });\n };\n}\n\nexport const registerPlayer = () => {\n Factory.registerComponent(Player.type, Player);\n};\n","import { isValidNumber, merge } from '@visactor/vutils';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { bitmapTool } from './overlap';\nimport type { DataLabelAttrs } from './type';\nimport type { LabelBase } from './base';\nimport { LabelBase as PointLabel } from './base';\nimport type { ComponentOptions } from '../interface';\nimport { getLabelComponent } from './data-label-register';\n\nexport class DataLabel extends AbstractComponent {\n name = 'data-label';\n\n private _componentMap: Map>;\n\n private static defaultAttributes: Partial = {\n pickable: false\n };\n\n constructor(attributes: DataLabelAttrs, options?: ComponentOptions) {\n const { dataLabels, ...restAttributes } = attributes;\n super(\n options?.skipDefault ? attributes : { dataLabels, ...merge({}, DataLabel.defaultAttributes, restAttributes) }\n );\n }\n\n protected render(): void {\n const { dataLabels, size } = this.attribute;\n if (!dataLabels || dataLabels.length === 0) {\n return;\n }\n const { width = 0, height = 0, padding } = size || {};\n\n if (!width || !height || !isValidNumber(height * width)) {\n return;\n }\n\n if (!this._componentMap) {\n this._componentMap = new Map();\n }\n const tool = bitmapTool(width, height, padding);\n const bitmap = tool.bitmap();\n\n const currentComponentMap = new Map();\n const prevComponentMap = this._componentMap;\n\n for (let i = 0; i < dataLabels.length; i++) {\n const dataLabel = dataLabels[i];\n const labelComponent = getLabelComponent(dataLabel.type) || PointLabel;\n if (labelComponent) {\n const { baseMarkGroupName, type } = dataLabel;\n const id = dataLabel.id ?? `${baseMarkGroupName}-${type}-${i}`;\n\n if (dataLabel.type === 'arc') {\n dataLabel.width = size.width;\n dataLabel.height = size.height;\n }\n\n let component = this._componentMap.get(id);\n if (component) {\n component.setBitmapTool(tool);\n component.setBitmap(bitmap);\n component.setAttributes(dataLabel);\n currentComponentMap.set(id, component);\n } else {\n component = new labelComponent(dataLabel as any);\n component.setBitmap(bitmap);\n component.setBitmapTool(tool);\n this.add(component as unknown as INode);\n currentComponentMap.set(id, component);\n }\n }\n }\n\n prevComponentMap.forEach((cp, key) => {\n if (!currentComponentMap.get(key)) {\n this.removeChild(cp as unknown as IGraphic);\n }\n });\n\n this._componentMap = currentComponentMap;\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._componentMap.forEach(component => {\n component.disableAnimation();\n });\n }\n\n enableAnimation() {\n this._componentMap.forEach(component => {\n component.enableAnimation();\n });\n }\n}\n","import { array, isNil, isString, merge } from '@visactor/vutils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { BaseLabelAttrs, DataLabelAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DataLabel } from '@visactor/vrender-components';\nimport type {\n BaseSingleEncodeSpec,\n IElement,\n IGroupMark,\n IMark,\n ITheme,\n IView,\n MarkFunctionType,\n Nil,\n StateEncodeSpec\n} from '../types';\nimport { ComponentEnum, GrammarMarkType } from '../graph/enums';\nimport type { ILabel, LabelSpec } from '../types/component';\nimport { Component } from '../view/component';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { Factory } from '../core/factory';\n\nexport const generateLabelAttributes = (\n marks: IMark[],\n groupSize: { width: number; height: number },\n encoder: BaseSingleEncodeSpec,\n labelStyle: MarkFunctionType>,\n parameters: any,\n theme: ITheme = {}\n): DataLabelAttrs => {\n const labelTheme = theme.components?.dataLabel;\n const dataLabels = marks\n .map((mark, index) => {\n const labelParameters = { ...parameters, labelIndex: index };\n const addition = invokeFunctionType(labelStyle, labelParameters, mark) ?? {};\n const { components = {} } = theme;\n let currentTheme: any = {};\n\n switch (mark.markType) {\n case GrammarMarkType.line:\n case GrammarMarkType.area:\n if (addition.type === 'line') {\n currentTheme = components.lineLabel;\n } else if (addition.type === 'area') {\n currentTheme = components.areaLabel;\n } else {\n currentTheme = components.lineDataLabel;\n }\n break;\n case GrammarMarkType.rect:\n case GrammarMarkType.rect3d:\n case GrammarMarkType.interval:\n currentTheme = components.rectLabel;\n break;\n case GrammarMarkType.symbol:\n case GrammarMarkType.circle:\n case GrammarMarkType.cell:\n currentTheme = components.symbolLabel;\n break;\n case GrammarMarkType.arc:\n case GrammarMarkType.arc3d:\n currentTheme = components.arcLabel;\n break;\n case GrammarMarkType.polygon:\n case GrammarMarkType.path:\n default:\n currentTheme = components.pointLabel;\n break;\n }\n\n const data: any[] = addition.data ?? [];\n const themeDatum = currentTheme?.data?.[0] ?? {};\n if (data && data.length > 0) {\n data.forEach((d, index) => {\n if (mark.elements[index]) {\n const attributes = invokeEncoder(encoder, d, mark.elements[index], labelParameters);\n merge(d, themeDatum, attributes);\n }\n });\n } else {\n const mergeAttributes = (attributes: any, themeDatum: any) => {\n const { data: labelData, ...restAttribute } = attributes;\n return { ...merge({}, themeDatum, restAttribute), data: labelData };\n };\n // process by order of elements\n mark.elements.forEach(element => {\n const graphicItem = element.getGraphicItem();\n if ((graphicItem as any).releaseStatus !== 'willRelease') {\n if (mark.isCollectionMark()) {\n const datum = element.getDatum();\n\n datum.forEach((entry: any) => {\n const attributes = invokeEncoder(encoder, entry, element, labelParameters);\n data.push(mergeAttributes(attributes, themeDatum));\n });\n } else {\n const attributes = invokeEncoder(encoder, element.getDatum(), element, labelParameters);\n data.push(mergeAttributes(attributes, themeDatum));\n }\n }\n });\n }\n\n const graphicItemName = mark.graphicItem?.name;\n const result = merge(\n {},\n currentTheme,\n {\n baseMarkGroupName: graphicItemName,\n // FIXME: hack\n // 标签是对数据顺序有强要求的场景,因为顺序会影响标签躲避结果;而目前没有机制保证 vrender 图元顺序与数据顺序一致。\n // 这里目前只能通过自定义方法来 hack\n getBaseMarks: () => mark.elements.map(element => element.getGraphicItem())\n },\n addition ?? {}\n );\n result.data = data ?? currentTheme.data;\n return result;\n })\n .filter(label => !isNil(label));\n\n const result = merge({}, labelTheme, { size: groupSize });\n result.dataLabels = dataLabels;\n return result;\n};\n\nexport class Label extends Component implements ILabel {\n static readonly componentType: string = ComponentEnum.label;\n protected declare spec: LabelSpec;\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, ComponentEnum.label, group);\n this.spec.componentType = ComponentEnum.label;\n }\n\n protected parseAddition(spec: LabelSpec) {\n super.parseAddition(spec);\n this.labelStyle(spec.labelStyle);\n this.size(spec.size);\n this.target(spec.target);\n return this;\n }\n\n labelStyle(style: MarkFunctionType>) {\n return this.setFunctionSpec(style, 'labelStyle');\n }\n\n size(size: LabelSpec['size']) {\n return this.setFunctionSpec(size, 'size');\n }\n\n target(mark: IMark | IMark[] | string | string[] | Nil): this {\n if (this.spec.target) {\n const prevMarks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.detach(prevMarks);\n }\n this.spec.target = mark;\n if (mark) {\n const nextMarks = array(mark).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n this.attach(nextMarks);\n }\n this.commit();\n return this;\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const marks = array(this.spec.target).map(m => (isString(m) ? this.view.getMarkById(m) : m));\n const groupGraphicItem = this.group?.getGroupGraphicItem?.();\n let size = invokeFunctionType(this.spec.size, parameters);\n if (!size) {\n size = groupGraphicItem\n ? {\n width: groupGraphicItem.attribute.width ?? groupGraphicItem.AABBBounds.width(),\n height: groupGraphicItem.attribute.height ?? groupGraphicItem.AABBBounds.height()\n }\n : { width: Infinity, height: Infinity };\n }\n\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n\n return generateLabelAttributes(\n marks,\n size,\n encoder as BaseSingleEncodeSpec,\n this.spec.labelStyle,\n parameters,\n theme\n );\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n}\n\nexport const registerLabel = () => {\n Factory.registerGraphicComponent(\n ComponentEnum.label,\n (attrs: DataLabelAttrs) => new DataLabel(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.label, Label);\n};\n","import { BaseComponent } from '../base/base-component';\nimport type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption } from '../../model/interface';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { ILabelSpec } from './interface';\nimport type { IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport type { LooseFunction } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Label;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._regions = options.getRegionsInIndex(options.regionIndexes);\n }\n\n protected _interactiveConfig(labelSpec: ILabelSpec) {\n const { interactive } = labelSpec;\n const result = { hover: false, select: false, state: labelSpec.state };\n if (interactive !== true) {\n return result;\n }\n\n const { hover, select } = this._option.getChart().getSpec();\n if (hover !== false || (hover as unknown as IHoverSpec).enable !== false) {\n result.hover = true;\n }\n if (select !== false || (select as unknown as ISelectSpec).enable !== false) {\n result.select = true;\n }\n return result;\n }\n\n /** Update API **/\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n result.reRender = true;\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n return result;\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n}\n","import { registerTextGraphic } from '@visactor/vgrammar-core';\nimport { Factory } from './../core/factory';\nimport type { IMark } from './interface/common';\nimport { MarkTypeEnum } from './interface/type';\nimport { TextMark } from './text';\nimport type { ILabelMark } from './interface/mark';\n\nexport class LabelMark extends TextMark implements ILabelMark {\n static readonly type = MarkTypeEnum.text;\n static readonly constructorType = MarkTypeEnum.label;\n\n skipEncode = false;\n\n private _rule: string;\n getRule() {\n return this._rule;\n }\n setRule(rule: string) {\n this._rule = rule;\n }\n\n private _target: IMark;\n getTarget() {\n return this._target;\n }\n setTarget(target: IMark) {\n this._target = target;\n if (!this._rule) {\n this.setRule(target.type);\n }\n }\n\n private _component: IMark;\n getComponent() {\n return this._component;\n }\n setComponent(component: IMark) {\n this._component = component;\n }\n}\n\nexport const registerLabelMark = () => {\n Factory.registerMark(LabelMark.constructorType, LabelMark);\n registerTextGraphic();\n};\n","import type { IChartSpec } from '../../typings';\nimport { BaseComponentSpecTransformer } from '../base';\n\nexport class LabelSpecTransformer extends BaseComponentSpecTransformer {\n protected _initTheme(spec: T, chartSpec: any): { spec: T; theme: K } {\n return { spec, theme: this._theme };\n }\n}\n","import type { IComponentOption } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport type { IRegion } from '../../region/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport { STACK_FIELD_TOTAL_BOTTOM, STACK_FIELD_TOTAL_TOP } from '../../constant/data';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IComponentMark, ILabelMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { eachSeries } from '../../util/model';\nimport type { ISeries } from '../../series/interface';\nimport type { IGroupMark, ILabel, IMark as IVGrammarMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { defaultLabelConfig, textAttribute } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerComponentMark } from '../../mark/component';\nimport { BaseLabelComponent } from './base-label';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isArray, isFunction, isValid, pickWithout } from '@visactor/vutils';\nimport type { ILabelInfo, ILabelSpec, TransformedLabelSpec } from './interface';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport type { IChartSpec } from '../../typings';\nimport { LabelSpecTransformer } from './label-transformer';\n\nexport class Label extends BaseLabelComponent {\n static type = ComponentTypeEnum.label;\n type = ComponentTypeEnum.label;\n name: string = ComponentTypeEnum.label;\n\n static specKey = 'label';\n specKey = 'label';\n\n static readonly transformerConstructor = LabelSpecTransformer as any;\n readonly transformerConstructor = LabelSpecTransformer;\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n protected _labelInfoMap: Map;\n\n protected _labelComponentMap: Map ILabelInfo | ILabelInfo[]>;\n\n protected _layoutRule: 'series' | 'region';\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this._layoutRule = (spec as any).labelLayout || 'series';\n }\n\n static getSpecInfo(chartSpec: any, chartSpecInfo: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n const regionSpecInfo = chartSpecInfo?.region || [];\n const isLabelVisible = (labelSpecList: ILabelSpec[]) => {\n return labelSpecList.some(labelSpec => labelSpec.visible);\n };\n\n regionSpecInfo.forEach((regionInfo, i) => {\n const seriesIndexes = regionInfo.seriesIndexes || [];\n const hasVisibleLabel = seriesIndexes.some(seriesIndex => {\n const seriesInfo = chartSpecInfo.series[seriesIndex];\n const { markLabelSpec = {} } = seriesInfo;\n\n return Object.values(markLabelSpec).some(\n labelSpecList => Array.isArray(labelSpecList) && isLabelVisible(labelSpecList)\n );\n });\n if (hasVisibleLabel) {\n specInfo.push({\n spec: chartSpec,\n type: ComponentTypeEnum.label,\n specInfoPath: ['component', this.specKey, i],\n regionIndexes: [i]\n });\n }\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this.initEvent();\n this._initTextMark();\n this._initLabelComponent();\n this._initTextMarkStyle();\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._labelInfoMap && this._labelInfoMap.clear();\n this._initTextMark();\n this._initTextMarkStyle();\n }\n\n initEvent() {\n this.event.on(ChartEvent.dataZoomChange, () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.disableAnimation();\n }\n });\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n });\n const enableAnimation = () => {\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n graphicItem.enableAnimation();\n }\n });\n this.event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableAnimation);\n };\n }\n\n protected _initTextMark() {\n if (!this._labelInfoMap) {\n this._labelInfoMap = new Map();\n }\n\n if (!this._labelComponentMap) {\n this._labelComponentMap = new Map();\n }\n eachSeries(this._regions, (series: ISeries) => {\n const { markLabelSpec = {} } = series.getSpecInfo();\n const markNames = Object.keys(markLabelSpec);\n const region = series.getRegion();\n\n if (!this._labelInfoMap.get(region)) {\n this._labelInfoMap.set(region, []);\n }\n for (let i = 0; i < markNames.length; i++) {\n const markName = markNames[i];\n const mark = series.getMarkInName(markName);\n if (!mark) {\n continue;\n }\n markLabelSpec[markName].forEach((spec: TransformedLabelSpec, index: number) => {\n if (spec.visible) {\n const info = this._labelInfoMap.get(region);\n const labelMark = this._createMark(\n {\n type: MarkTypeEnum.label,\n name: `${markName}-label-${index}`\n },\n { noSeparateStyle: true, attributeContext: series.getMarkAttributeContext() }\n ) as ILabelMark;\n labelMark.setTarget(mark);\n info.push({\n labelMark,\n baseMark: mark,\n series,\n labelSpec: spec\n });\n }\n });\n }\n });\n }\n\n protected _initLabelComponent() {\n this._labelInfoMap.forEach((regionLabelInfo, region) => {\n if (this._layoutRule === 'region') {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${region.getGroupMark().name}-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: (this._spec as any).support3d\n }\n );\n if (component) {\n component.setSkipBeforeLayouted(true);\n\n if (regionLabelInfo[0] && isValid(regionLabelInfo[0].labelSpec.zIndex)) {\n component.setMarkConfig({ zIndex: regionLabelInfo[0].labelSpec.zIndex });\n }\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region);\n });\n }\n } else {\n regionLabelInfo.forEach((labelInfo, i) => {\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${labelInfo.labelMark.name}-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: labelInfo.baseMark.getMarkConfig().support3d\n }\n );\n if (component) {\n if (isValid(labelInfo.labelSpec.zIndex)) {\n component.setMarkConfig({ zIndex: labelInfo.labelSpec.zIndex });\n }\n\n component.setSkipBeforeLayouted(true);\n this._marks.addMark(component);\n this._labelComponentMap.set(component, () => {\n return this._labelInfoMap.get(region)[i];\n });\n }\n });\n }\n });\n }\n\n protected _initTextMarkStyle() {\n this._labelComponentMap.forEach((labelInfoCb, labelComponent) => {\n const labelInfoArray = array(labelInfoCb());\n labelInfoArray.forEach(({ labelMark }) => {\n labelMark.setComponent(labelComponent);\n });\n });\n this._labelInfoMap.forEach(labelInfos => {\n labelInfos.forEach(info => {\n const { labelMark, labelSpec, series } = info;\n this.initMarkStyleWithSpec(labelMark, labelSpec, undefined);\n if (isFunction(labelSpec?.getStyleHandler)) {\n const styleHandler = labelSpec.getStyleHandler(series);\n styleHandler?.call(series, labelMark, labelSpec);\n }\n if (labelMark.stateStyle?.normal?.lineWidth) {\n labelMark.setAttribute('stroke', series.getColorAttribute(), 'normal', AttributeLevel.Base_Series);\n }\n });\n });\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n this._labelComponentMap.forEach((labelInfoCb, labelComponent) => {\n const labelInfo = labelInfoCb();\n if (isArray(labelInfo)) {\n this._updateMultiLabelAttribute(labelInfo, labelComponent);\n } else {\n this._updateSingleLabelAttribute(labelInfo, labelComponent);\n }\n });\n }\n\n protected _updateMultiLabelAttribute(labelInfo: ILabelInfo[], labelComponent: IComponentMark) {\n this._updateLabelComponentAttribute(\n labelComponent.getProduct() as ILabel,\n labelInfo.map(({ baseMark }) => baseMark.getProduct()),\n labelInfo\n );\n }\n\n protected _updateSingleLabelAttribute(labelInfo: ILabelInfo, labelComponent: IComponentMark) {\n const { baseMark } = labelInfo;\n this._updateLabelComponentAttribute(labelComponent.getProduct() as ILabel, baseMark.getProduct(), [labelInfo]);\n }\n\n protected _updateLabelComponentAttribute(\n component: ILabel,\n target: IVGrammarMark | IVGrammarMark[],\n labelInfos: ILabelInfo[]\n ) {\n const dependCmp = this._option.getComponentsByType('totalLabel');\n component\n .target(target)\n .configure({ interactive: false })\n .depend(dependCmp.map(cmp => cmp.getMarks()[0].getProduct()))\n .labelStyle((mark: IVGrammarMark, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark, series } = labelInfo;\n const rule = labelMark.getRule();\n const interactive = this._interactiveConfig(labelSpec);\n /** arc label When setting the centerOffset of the spec, the label also needs to be offset accordingly, and the centerOffset is not in the labelSpec */\n const centerOffset = (this._spec as any)?.centerOffset ?? 0;\n let spec = mergeSpec(\n {\n textStyle: { pickable: labelSpec.interactive === true, ...labelSpec.style },\n overlap: {\n avoidMarks: dependCmp.map(cmp => cmp.getMarks()[0].getProductId())\n }\n },\n defaultLabelConfig(rule, labelInfo),\n {\n ...pickWithout(labelSpec, [\n 'position',\n 'style',\n 'state',\n 'type',\n 'stackDataFilterType',\n 'getStyleHandler'\n ]),\n ...interactive,\n centerOffset\n },\n labelSpec.stackDataFilterType\n ? {\n dataFilter:\n labelSpec.stackDataFilterType === 'min'\n ? (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_BOTTOM]);\n }\n : (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n }\n }\n : {}\n );\n\n if (series && series.parseLabelStyle) {\n spec = series.parseLabelStyle(spec, labelSpec, labelMark);\n }\n // TODO 可以优化。vgrammar 的 label 图元类型分发是完全依赖 baseMark 的类型。默认情况下,line/area 图元的标签会使用'line-data'标签,此时需要 vchart 将类型传给 vgrammar\n if (rule === 'line' || rule === 'area') {\n spec.type = rule;\n }\n return spec;\n }\n })\n .encode((datum, element, params: Record) => {\n const labelInfo = labelInfos[params.labelIndex];\n if (labelInfo) {\n const { labelSpec, labelMark } = labelInfos[params.labelIndex];\n\n return labelMark.skipEncode\n ? { data: datum }\n : textAttribute(labelInfos[params.labelIndex], datum, labelSpec.formatMethod, labelSpec.formatter);\n }\n })\n .size(() => labelInfos[0].series.getRegion().getLayoutRect());\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const labelInfo = this._labelComponentMap.get(m)();\n let group;\n if (isArray(labelInfo)) {\n group = labelInfo[0].series.getRegion().getGroupMark().getProduct() as IGroupMark;\n } else {\n group = labelInfo.series.getRegion().getGroupMark().getProduct() as IGroupMark;\n }\n m.compile({ group, context: { model: this, labelInfo } });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this._labelComponentMap.forEach((info, component) => {\n const graphicItem = component.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n}\n\nexport const registerLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(Label.type, Label, true);\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_TOP } from '../../constant/data';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IMark, MarkType } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { IGroupMark, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { textAttribute } from './util';\nimport { BaseLabelComponent } from './base-label';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport { registerComponentMark } from '../../mark/component';\nimport type { IChartSpecInfo } from '../../chart/interface';\n\nexport class TotalLabel extends BaseLabelComponent {\n static type = ComponentTypeEnum.totalLabel;\n type = ComponentTypeEnum.totalLabel;\n name: string = ComponentTypeEnum.totalLabel;\n\n static specKey = 'totalLabel';\n specKey = 'totalLabel';\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n private _textMark?: ILabelMark;\n private _baseMark?: IMark;\n\n static getSpecInfo(chartSpec: any, chartSpecInfo?: IChartSpecInfo): Maybe {\n const specInfo: IModelSpecInfo[] = [];\n chartSpecInfo?.region?.forEach((regionInfo, regionIndex) => {\n regionInfo.seriesIndexes?.forEach(seriesIndex => {\n const { spec } = chartSpecInfo.series[seriesIndex];\n const labelSpec = spec[this.specKey];\n if (labelSpec?.visible) {\n specInfo.push({\n spec: labelSpec,\n type: ComponentTypeEnum.totalLabel,\n specPath: ['series', seriesIndex, this.specKey],\n specInfoPath: ['component', this.specKey, seriesIndex],\n regionIndexes: [regionIndex],\n seriesIndexes: [seriesIndex]\n });\n }\n });\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this._initTextMark();\n this._initLabelComponent();\n }\n\n reInit(spec?: any) {\n super.reInit(spec);\n this._initTextMark();\n }\n\n protected _initTextMark() {\n const series = this._getSeries();\n if (series.getSpec().totalLabel?.visible) {\n const mark = series.getSeriesMark();\n if (mark) {\n const textMark = this._createMark({ type: MarkTypeEnum.label, name: `${mark.name}-total-label` }) as ILabelMark;\n this._baseMark = mark;\n this._textMark = textMark;\n this._initTextMarkStyle();\n }\n }\n }\n\n _initTextMarkStyle() {\n super.initMarkStyleWithSpec(this._textMark, this._spec);\n this.setMarkStyle(\n this._textMark,\n {\n text: (datum: Datum) => {\n return datum[STACK_FIELD_TOTAL];\n }\n },\n 'normal',\n AttributeLevel.Default\n );\n\n const series = this._getSeries();\n series.initTotalLabelMarkStyle?.(this._textMark);\n }\n\n protected _initLabelComponent() {\n const series = this._getSeries();\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${series.name}-total-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true\n },\n {\n support3d: this._spec.support3d\n }\n );\n if (component) {\n this._marks.addMark(component);\n }\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n const series = this._getSeries();\n this._marks.forEach((componentMark, index) => {\n const component = componentMark.getProduct() as ReturnType;\n component\n .target(this._baseMark.getProduct())\n .configure({ interactive: false })\n .labelStyle(() => {\n if (this._baseMark) {\n const { offset, animation, overlap } = this._spec;\n const interactive = this._interactiveConfig(this._spec);\n return mergeSpec(\n {\n textStyle: { pickable: this._spec.interactive === true },\n position: totalLabelPosition(series, this._baseMark.type),\n x: 0,\n y: 0\n },\n series.getTotalLabelComponentStyle?.({\n baseMark: this._baseMark,\n labelMark: this._textMark\n }) ?? {},\n {\n offset,\n animation,\n overlap,\n dataFilter: (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n },\n ...interactive\n }\n );\n }\n })\n .encode(datum => {\n return textAttribute(\n {\n baseMark: this._baseMark,\n labelMark: this._textMark,\n series,\n labelSpec: series.getSpec().totalLabel\n },\n datum,\n this._spec.formatMethod\n );\n })\n .size(() => this._regions[0].getLayoutRect());\n });\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const group = this._regions[0].getGroupMark().getProduct() as IGroupMark;\n m.compile({ group, context: { model: this } });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this.getMarks().forEach(m => {\n const graphicItem = m.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n\n protected _getSeries() {\n return this._option.getSeriesInIndex([this.getSpecPath()[1] as number])[0];\n }\n}\n\nexport function totalLabelPosition(series: ISeries, type: MarkType) {\n let position;\n const { direction } = series as ICartesianSeries;\n const isInverse =\n direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = isInverse ? 1 : 0;\n switch (type) {\n case 'rect':\n case 'symbol':\n position = positionMap[direction][index];\n break;\n default:\n position = 'top';\n }\n return position;\n}\n\nexport const registerTotalLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(TotalLabel.type, TotalLabel, true);\n};\n","/**\n *\n * @param x x方向到圆心距离\n * @param y y方向到圆心距离\n * @returns 在圆上的角度(顺时针方向, 与arc图元绘制方向一致)\n */\nexport const deltaXYToAngle = (y: number, x: number) => {\n const angle = Math.atan2(y, x);\n // ref: https://jsbin.com/taxozoyaja/2/edit?html,js,output\n return angle < 0 ? angle + Math.PI * 2 : angle;\n};\n\nexport const tan2AngleToAngle = (angle: number) => {\n return angle < 0 ? angle + Math.PI * 2 : angle;\n};\n","import type {\n IGroup,\n IImage,\n INode,\n ISymbol,\n IImageGraphicAttribute,\n IRichText,\n IRichTextGraphicAttribute,\n ILine,\n ILineGraphicAttribute\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValidNumber, merge } from '@visactor/vutils';\nimport { ArcSegment, Segment } from '../segment';\nimport type { TagAttributes } from '../tag';\n// eslint-disable-next-line no-duplicate-imports\nimport { Tag } from '../tag';\nimport { Marker } from './base';\nimport { DEFAULT_MARK_POINT_TEXT_STYLE_MAP, DEFAULT_MARK_POINT_THEME, FUZZY_EQUAL_DELTA } from './config';\nimport type { IItemContent, IItemLine, MarkPointAnimationType, MarkPointAttrs, MarkerAnimationState } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IMarkPointItemPosition } from './type';\nimport type { Point } from '../core/type';\nimport type { ComponentOptions } from '../interface';\nimport { loadMarkPointComponent } from './register';\nimport { computeOffsetForlimit } from '../util/limit-shape';\nimport { DEFAULT_STATES } from '../constant';\nimport { DefaultExitMarkerAnimation, DefaultUpdateMarkPointAnimation, markPointAnimate } from './animate/animate';\nimport {\n deltaXYToAngle,\n fuzzyEqualNumber,\n getTextAlignAttrOfVerticalDir,\n isPostiveXAxis,\n removeRepeatPoint\n} from '../util';\n\nloadMarkPointComponent();\n\nexport function registerMarkPointAnimate() {\n MarkPoint._animate = markPointAnimate;\n}\n\nexport class MarkPoint extends Marker {\n name = 'markPoint';\n static defaultAttributes = DEFAULT_MARK_POINT_THEME;\n\n /** animate */\n defaultUpdateAnimation = DefaultUpdateMarkPointAnimation;\n defaultExitAnimation = DefaultExitMarkerAnimation;\n protected markerAnimate(state: MarkerAnimationState): void {\n if (MarkPoint._animate && this._animationConfig) {\n MarkPoint._animate([this._line, this._decorativeLine], this._item, this._animationConfig, state);\n }\n }\n\n private _item!: ISymbol | Tag | IImage | IRichText;\n private _targetItem!: ISymbol;\n\n private _line?: Segment;\n\n private _decorativeLine!: ILine;\n private _isArcLine: boolean = false; // 用于区分 arc-segment 和 segment\n private _isStraightLine: boolean = false; // 用于区分绘制 纯直线 和 折线,(type-do/op/po时, 如果偏移量很小, 视觉无法分辨, 也需要绘制成直线)\n\n constructor(attributes: MarkPointAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, MarkPoint.defaultAttributes, attributes));\n }\n\n protected setLabelPos() {\n //do nothing\n }\n\n protected getTextAlignAttr(\n autoRotate: boolean,\n offsetX: number,\n offsetY: number,\n lineEndAngle: number,\n itemPosition: keyof typeof IMarkPointItemPosition\n ) {\n // 垂直方向例外\n if (\n fuzzyEqualNumber(Math.abs(lineEndAngle), Math.PI / 2, FUZZY_EQUAL_DELTA) ||\n fuzzyEqualNumber(Math.abs(lineEndAngle), (Math.PI * 3) / 2, FUZZY_EQUAL_DELTA)\n ) {\n return getTextAlignAttrOfVerticalDir(autoRotate, lineEndAngle, itemPosition);\n }\n\n if (isPostiveXAxis(lineEndAngle)) {\n return DEFAULT_MARK_POINT_TEXT_STYLE_MAP.postiveXAxis[itemPosition];\n }\n return DEFAULT_MARK_POINT_TEXT_STYLE_MAP.negativeXAxis[itemPosition];\n }\n\n protected setItemAttributes(\n item: ISymbol | Tag | IImage | IRichText,\n itemContent: IItemContent,\n newPosition: Point,\n newItemPosition: Point,\n itemType: 'symbol' | 'text' | 'image' | 'richText' | 'custom'\n ) {\n if (!item) {\n return;\n }\n const {\n autoRotate = true,\n refX = 0,\n refY = 0,\n refAngle = 0,\n textStyle = {},\n richTextStyle = {},\n imageStyle = {},\n position: positionType = IMarkPointItemPosition.middle\n } = itemContent;\n const { state } = this.attribute as MarkPointAttrs;\n const lineEndAngle = this._line?.getEndAngle() || 0;\n const itemRefOffsetX = refX * Math.cos(lineEndAngle) + refY * Math.cos(lineEndAngle - Math.PI / 2);\n const itemRefOffsetY = refX * Math.sin(lineEndAngle) + refY * Math.sin(lineEndAngle - Math.PI / 2);\n if (itemType === 'text') {\n const offsetX = newItemPosition.x - newPosition.x;\n const offsetY = newItemPosition.y - newPosition.y;\n item.setAttributes({\n ...(textStyle as TagAttributes),\n textStyle: {\n ...this.getTextAlignAttr(\n autoRotate,\n offsetX,\n offsetY,\n lineEndAngle,\n itemContent.position ?? ('end' as keyof typeof IMarkPointItemPosition)\n ),\n ...textStyle.textStyle\n },\n state: {\n panel: merge({}, DEFAULT_STATES, state?.textBackground),\n text: merge({}, DEFAULT_STATES, state?.text)\n }\n } as any);\n } else if (itemType === 'richText') {\n item.setAttributes({\n dx: this.getItemDx(item, positionType, richTextStyle) + (richTextStyle.dx || 0),\n dy: this.getItemDy(item, positionType, richTextStyle) + (richTextStyle.dy || 0)\n });\n item.states = merge({}, DEFAULT_STATES, state?.richText);\n } else if (itemType === 'image') {\n item.setAttributes({\n dx: this.getItemDx(item, positionType, imageStyle) + (imageStyle.dx || 0),\n dy: this.getItemDy(item, positionType, imageStyle) + (imageStyle.dy || 0)\n });\n item.states = merge({}, DEFAULT_STATES, state?.image);\n }\n\n const itemAngle = isPostiveXAxis(lineEndAngle) ? lineEndAngle : lineEndAngle - Math.PI;\n\n item.setAttributes({\n x: newItemPosition.x + (itemRefOffsetX || 0),\n y: newItemPosition.y + (itemRefOffsetY || 0),\n angle: autoRotate && itemAngle + refAngle\n });\n }\n\n protected getItemDx(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const width = (item as IGroup)?.AABBBounds?.width() ?? (style?.width || 0);\n if (position.includes('inside')) {\n return -width;\n }\n if (position === 'insideTop') {\n return 0;\n }\n return 0;\n }\n\n protected getItemDy(\n item: ISymbol | Tag | IImage | IRichText,\n position: keyof typeof IMarkPointItemPosition,\n style?: IImageGraphicAttribute | IRichTextGraphicAttribute\n ) {\n const height = (item as IGroup)?.AABBBounds?.height() ?? (style?.height || 0);\n if (position.includes('top') || position.includes('Top')) {\n return -height;\n }\n if (position.includes('middle') || position.includes('Middle')) {\n return -height / 2;\n }\n return 0;\n }\n\n protected initItem(itemContent: IItemContent, newPosition: Point, newItemPosition: Point) {\n const { state } = this.attribute as MarkPointAttrs;\n const { type = 'text', symbolStyle, richTextStyle, imageStyle, renderCustomCallback } = itemContent;\n let item: ISymbol | Tag | IImage | IRichText | IGroup;\n if (type === 'symbol') {\n item = graphicCreator.symbol({\n ...newItemPosition,\n ...symbolStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.symbol);\n } else if (type === 'text') {\n item = new Tag({\n ...newItemPosition,\n state: {\n panel: merge({}, DEFAULT_STATES, state?.textBackground),\n text: merge({}, DEFAULT_STATES, state?.text)\n }\n });\n } else if (type === 'richText') {\n item = graphicCreator.richtext({\n ...newItemPosition,\n ...richTextStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.richText);\n } else if (type === 'image') {\n item = graphicCreator.image({\n ...newItemPosition,\n ...imageStyle\n });\n item.states = merge({}, DEFAULT_STATES, state?.image);\n } else if (type === 'custom' && renderCustomCallback) {\n item = renderCustomCallback();\n item.states = merge({}, DEFAULT_STATES, state?.customMark);\n }\n item.name = `mark-point-${type}`;\n this.setItemAttributes(item, itemContent, newPosition, newItemPosition, type);\n return item;\n }\n\n protected getItemLineAttr(itemLine: IItemLine, newPosition: Point, newItemPosition: Point) {\n let points: Point[] = [];\n let center = { x: 0, y: 0 };\n let radius = 0;\n let startAngle = 0;\n let endAngle = 0;\n const { type = 'type-s', arcRatio = 0.8 } = itemLine;\n // confine之后位置会变化,所以这里需要重新check是否是直线\n const itemOffsetX = newItemPosition.x - newPosition.x;\n const itemOffsetY = newItemPosition.y - newPosition.y;\n this._isStraightLine =\n fuzzyEqualNumber(itemOffsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(itemOffsetY, 0, FUZZY_EQUAL_DELTA);\n if (this._isArcLine) {\n // 思路:\n // 1. 以数据位置为起点, 标记内容的位置为终点绘制圆弧\n // - 在起点与终点的垂直平分线上找圆心\n // - 根据圆心计算半径\n // - 根据圆心计算起始角度和结束角度\n // 2. 根据数据位置上要绘制的targetSymbol调整起始角度, 保证标记线上的startSymbol紧贴在targetSymbol上\n // ps: 计算时将targetSymbol看作圆, 如果是其他不规则形状, 无法保证\n // - 直接计算圆弧与targetSymbol的交点 到 圆心 的角度(也可以先计算交点的准确坐标, 但需解二元二次方程, 可行却没必要)\n // - 用计算好的起始角度 - 交点到圆心的角度, 得到最终起始角度\n // 3. 根据是否为凹凸圆弧, 进行角度的进一步加工\n\n const { x: x1, y: y1 } = this.attribute.position;\n const { x: x2, y: y2 } = newItemPosition;\n // 得到中点和斜率\n const x0 = (x1 + x2) / 2;\n const y0 = (y1 + y2) / 2;\n // 得到垂直平分线表达式\n const k = y1 === y2 ? 0 : -(x1 - x2) / (y1 - y2); // 垂直平分线斜率 * 两点连线斜率 = -1\n const line = (x: number) => k * (x - x0) + y0;\n // 在垂直平分线上找圆心\n const direction = y2 > y1 ? -1 : 1;\n const deltaX = arcRatio * direction * x0; // 数值决定曲率, 符号决定法向, 可通过配置自定义\n const centerX = x0 + deltaX;\n const centerY = line(centerX);\n // 计算半径和角度\n startAngle = deltaXYToAngle(y1 - centerY, x1 - centerX);\n endAngle = deltaXYToAngle(y2 - centerY, x2 - centerX);\n center = { x: centerX, y: centerY };\n\n // 圆弧与symbol交点的角度\n const R = Math.sqrt((centerX - x1) * (centerX - x1) + (centerY - y1) * (centerY - y1));\n const r = this.attribute.targetSymbol.style.size / 2;\n const deltaAngle = Math.acos(Math.sqrt(1 - (r * r) / (4 * R * R))) * 2;\n startAngle = startAngle + deltaAngle;\n\n if (arcRatio > 0) {\n // 此时绘制凹圆弧, 顺时针绘制\n // 根据arc图元绘制逻辑, 需要保证endAngle > startAngle, 才能顺时针绘制\n if (endAngle < startAngle) {\n endAngle += Math.PI * 2;\n }\n } else {\n // 此时绘制凸圆弧, 顺时针绘制\n // 根据arc图元绘制逻辑, 需要保证endAngle < startAngle, 才能逆时针绘制\n if (startAngle < endAngle) {\n startAngle += Math.PI * 2;\n }\n }\n\n radius = Math.sqrt((centerX - x1) * (centerX - x1) + (centerY - y1) * (centerY - y1));\n } else if (type === 'type-do' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: (newPosition.x + newItemPosition.x) / 2,\n y: newItemPosition.y\n },\n newItemPosition\n ];\n } else if (type === 'type-po' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: newItemPosition.x,\n y: newPosition.y\n },\n newItemPosition\n ];\n } else if (type === 'type-op' && !this._isStraightLine) {\n points = [\n newPosition,\n {\n x: newPosition.x,\n y: newItemPosition.y\n },\n newItemPosition\n ];\n } else {\n points = [newPosition, newItemPosition];\n }\n // 插值的过程中可能会产生重复的点, 在此去除\n points = removeRepeatPoint(points);\n return {\n points,\n center,\n radius,\n startAngle,\n endAngle\n };\n }\n\n protected reDrawLine(itemLine: IItemLine, pointsAttr: any) {\n this._line.release();\n const { startSymbol, endSymbol, lineStyle, type = 'type-s' } = itemLine;\n const { state } = this.attribute as MarkPointAttrs;\n const lineConstructor = this._isArcLine ? ArcSegment : Segment;\n this._container.removeChild(this._line);\n this._line = new lineConstructor({\n ...pointsAttr,\n pickable: false,\n startSymbol,\n endSymbol,\n lineStyle,\n visible: itemLine.visible,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n } as any);\n this._container.add(this._line as unknown as INode);\n }\n\n protected setItemLineAttr(itemLine: IItemLine, newPosition: Point, newItemPosition: Point) {\n if (this._line) {\n const { startSymbol, endSymbol, lineStyle, type = 'type-s' } = itemLine;\n const { state } = this.attribute as MarkPointAttrs;\n const pointsAttr = this.getItemLineAttr(itemLine, newPosition, newItemPosition);\n if ((this._isArcLine && this._line.key === 'arc-segment') || (!this._isArcLine && this._line.key === 'segment')) {\n this._line.setAttributes({\n ...pointsAttr,\n startSymbol,\n endSymbol,\n lineStyle,\n visible: itemLine.visible,\n state: {\n line: merge({}, DEFAULT_STATES, state?.line),\n startSymbol: merge({}, DEFAULT_STATES, state?.lineStartSymbol),\n endSymbol: merge({}, DEFAULT_STATES, state?.lineEndSymbol)\n }\n });\n } else {\n this.reDrawLine(itemLine, pointsAttr);\n }\n }\n }\n\n protected getDecorativeLineAttr(itemLine: IItemLine) {\n const decorativeLength = itemLine?.decorativeLine?.length || 10;\n const itemAngle = this._line.getEndAngle() || 0;\n\n const startPointOffsetX = (decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const startPointOffsetY = (decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n const endPointOffsetX = (-decorativeLength / 2) * Math.cos(itemAngle - Math.PI / 2);\n const endPointOffsetY = (-decorativeLength / 2) * Math.sin(itemAngle - Math.PI / 2);\n return {\n startPointOffsetX,\n startPointOffsetY,\n endPointOffsetX,\n endPointOffsetY\n };\n }\n\n protected setDecorativeLineAttr(itemLine: IItemLine, newItemPosition: Point, visible: boolean) {\n if (this._decorativeLine) {\n const { lineStyle } = itemLine;\n const { startPointOffsetX, startPointOffsetY, endPointOffsetX, endPointOffsetY } =\n this.getDecorativeLineAttr(itemLine);\n this._decorativeLine.setAttributes({\n points: [\n {\n x: newItemPosition.x + startPointOffsetX,\n y: newItemPosition.y + startPointOffsetY\n },\n {\n x: newItemPosition.x + endPointOffsetX,\n y: newItemPosition.y + endPointOffsetY\n }\n ] as IPointLike[],\n ...(lineStyle as Partial),\n visible\n });\n this._decorativeLine.states = merge({}, DEFAULT_STATES, this.attribute.state?.line);\n }\n }\n\n protected setTargetItemAttributes(targetItem: any, position: IPointLike) {\n if (this._targetItem) {\n this._targetItem.setAttributes({\n x: position.x,\n y: position.y,\n visible: targetItem.visible ?? false,\n size: targetItem.size,\n ...targetItem.style\n });\n this._targetItem.states = merge({}, DEFAULT_STATES, this.attribute.state?.targetItem);\n }\n }\n\n protected setAllOfItemsAttr(newPosition: Point, newItemPosition: Point) {\n const { position, itemLine = {}, itemContent = {}, limitRect, targetSymbol } = this.attribute as MarkPointAttrs;\n const { type = 'text', confine } = itemContent;\n if (limitRect && confine) {\n const { x, y, width, height } = limitRect;\n const { dx, dy } = computeOffsetForlimit(this._item, {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n });\n newItemPosition.x = newItemPosition.x + dx;\n newItemPosition.y = newItemPosition.y + dy;\n }\n this.setTargetItemAttributes(targetSymbol, position);\n this.setItemLineAttr(itemLine, newPosition, newItemPosition);\n this.setItemAttributes(this._item, itemContent, newPosition, newItemPosition, type);\n this.setDecorativeLineAttr(itemLine, newItemPosition, itemLine.decorativeLine?.visible);\n }\n\n protected computeNewPositionAfterTargetItem(position: Point) {\n const { itemContent = {}, targetSymbol, itemLine } = this.attribute as MarkPointAttrs;\n const { offsetX: itemContentOffsetX = 0, offsetY: itemContentOffsetY = 0 } = itemContent;\n const {\n offset: targetSymbolOffset = 0,\n style: targetSymbolStyle,\n visible: targetItemvisible = false,\n size: targetSymbolSize\n } = targetSymbol;\n const targetSize = targetItemvisible ? targetSymbolStyle.size ?? targetSymbolSize ?? 20 : 0;\n\n let targetOffsetAngle;\n if (itemLine.type === 'type-do') {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, itemContentOffsetX / 2);\n } else if (itemLine.type === 'type-po') {\n targetOffsetAngle = deltaXYToAngle(0, itemContentOffsetX);\n } else if (itemLine.type === 'type-op') {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, 0);\n } else {\n targetOffsetAngle = deltaXYToAngle(itemContentOffsetY, itemContentOffsetX);\n }\n\n const newPosition: Point = {\n x: position.x + (targetSize / 2 + targetSymbolOffset) * Math.cos(targetOffsetAngle),\n y: position.y + (targetSize / 2 + targetSymbolOffset) * Math.sin(targetOffsetAngle)\n };\n const newItemPosition: Point = {\n x: position.x + (targetSize / 2 + targetSymbolOffset) * Math.cos(targetOffsetAngle) + itemContentOffsetX, // 偏移量 = targetItem size + targetItem space + 用户配置offset\n y: position.y + (targetSize / 2 + targetSymbolOffset) * Math.sin(targetOffsetAngle) + itemContentOffsetY // 偏移量 = targetItem size + targetItem space + 用户配置offset\n };\n return { newPosition, newItemPosition };\n }\n\n protected initMarker(container: IGroup) {\n const { position, itemContent = {}, itemLine } = this.attribute as MarkPointAttrs;\n const { type: itemLineType = 'type-s', arcRatio = 0.8 } = itemLine;\n const { offsetX = 0, offsetY = 0 } = itemContent;\n\n this._isStraightLine =\n fuzzyEqualNumber(offsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(offsetY, 0, FUZZY_EQUAL_DELTA);\n this._isArcLine = itemLineType === 'type-arc' && arcRatio !== 0 && !this._isStraightLine;\n\n /** 根据targetItem计算新的弧线起点 */\n const { newPosition, newItemPosition } = this.computeNewPositionAfterTargetItem(position);\n\n /** itemline - 连接线 */\n\n const lineConstructor = this._isArcLine ? ArcSegment : Segment;\n const line = new lineConstructor({\n points: [],\n pickable: false, // 组件容器本身不参与拾取\n center: { x: 0, y: 0 },\n radius: 0,\n startAngle: 0,\n endAngle: 0\n });\n\n line.name = 'mark-point-line';\n this._line = line;\n container.add(line as unknown as INode);\n\n /** decorativeLine - 装饰线 */\n const decorativeLine = graphicCreator.line({\n points: []\n });\n decorativeLine.name = 'mark-point-decorativeLine';\n this._decorativeLine = decorativeLine;\n container.add(decorativeLine as unknown as INode);\n\n /** targetItem - 被标注的点上需要放置的内容 */\n const targetItem = graphicCreator.symbol({});\n targetItem.name = 'mark-point-targetItem';\n this._targetItem = targetItem;\n container.add(this._targetItem);\n\n /** item - 标注的内容 */\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n const item = this.initItem(itemContent as any, newPosition, newItemPosition);\n this._item = item;\n container.add(item as unknown as INode);\n\n /** 全部属性确定后, 给每个元素 set attr */\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(newPosition, newItemPosition);\n }\n\n protected updateMarker() {\n const { position, itemContent = {}, itemLine } = this.attribute as MarkPointAttrs;\n const { type = 'text' } = itemContent;\n const { type: itemLineType = 'type-s', arcRatio = 0.8 } = itemLine;\n const { offsetX = 0, offsetY = 0 } = itemContent;\n\n this._isStraightLine =\n fuzzyEqualNumber(offsetX, 0, FUZZY_EQUAL_DELTA) || fuzzyEqualNumber(offsetY, 0, FUZZY_EQUAL_DELTA);\n const isArcLine = itemLineType === 'type-arc' && arcRatio !== 0 && !this._isStraightLine;\n /** 根据targetItem计算新的弧线起点 */\n const { newPosition, newItemPosition } = this.computeNewPositionAfterTargetItem(position);\n\n if (isArcLine !== this._isArcLine) {\n // 如果曲线和直线相互切换了, 则需要重新绘制line\n this._isArcLine = isArcLine;\n this.reDrawLine(itemLine, {\n points: [{ x: 0, y: 0 }],\n pickable: false,\n center: { x: 0, y: 0 },\n radius: 0,\n startAngle: 0,\n endAngle: 0\n });\n } else {\n this._isArcLine = isArcLine;\n }\n\n // 为了强制将itemContent限制在limitRect内, 所以需要先绘制item, 然后根据item bounds 动态调整位置\n this.setItemAttributes(this._item, itemContent, newPosition, newItemPosition, type);\n // 由于itemLine的指向也要变化, 所以需要对所有的内容进行渲染\n this.setAllOfItemsAttr(newPosition, newItemPosition);\n }\n\n protected isValidPoints() {\n const { position } = this.attribute as MarkPointAttrs;\n if (isValidNumber(position.x) && isValidNumber(position.y)) {\n return true;\n }\n return false;\n }\n}\n","import type { IMarkPoint, IMarkPointSpec } from './interface';\nimport {\n computeClipRange,\n computeOffsetFromRegion,\n getMarkPointProcessInfo,\n transformLabelAttributes,\n transformOffset,\n transformState,\n transformStyle\n} from '../utils';\nimport type { MarkPointAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkPoint as MarkPointComponent } from '@visactor/vrender-components';\nimport { isValid } from '@visactor/vutils';\nimport { transformToGraphic } from '../../../util/style';\nimport { BaseMarker } from '../base-marker';\nimport { LayoutZIndex } from '../../../constant/layout';\nimport type { IGroup } from '@visactor/vrender-core';\n\nexport abstract class BaseMarkPoint extends BaseMarker implements IMarkPoint {\n static specKey = 'markPoint';\n specKey = 'markPoint';\n\n layoutZIndex: number = LayoutZIndex.MarkPoint;\n protected declare _markerComponent: MarkPointComponent;\n\n protected abstract _computePointsAttr(): any;\n\n static _getMarkerCoordinateType(markerSpec: any): string {\n const { doPolarProcess, doGeoProcess } = getMarkPointProcessInfo(markerSpec);\n if (markerSpec.coordinateType === 'polar' || doPolarProcess) {\n return 'polar';\n } else if (markerSpec.coordinateType === 'geo' || doGeoProcess) {\n return 'geo';\n }\n return 'cartesian';\n }\n\n protected _createMarkerComponent() {\n const { itemContent = {}, itemLine = {}, targetSymbol = {} } = this._spec;\n const { text: label = {}, symbol, image, richText, ...restItemContent } = itemContent;\n\n const markPointAttrs: MarkPointAttrs = {\n zIndex: this.layoutZIndex,\n interactive: this._spec.interactive ?? true,\n hover: this._spec.interactive ?? true,\n select: this._spec.interactive ?? true,\n position: { x: 0, y: 0 },\n clipInRange: this._spec.clip ?? false,\n itemContent: {\n offsetX: transformOffset(itemContent.offsetX, this._relativeSeries.getRegion()),\n offsetY: transformOffset(itemContent.offsetX, this._relativeSeries.getRegion()),\n ...restItemContent // Tips: 因为网站 demo 上已经透出了 imageStyle richTextStyle 的写法,为了兼容所以这个需要在后面覆盖\n },\n targetSymbol: {\n offset: targetSymbol.offset ?? 0,\n visible: targetSymbol.visible ?? false,\n size: targetSymbol.size ?? 20,\n style: transformStyle(targetSymbol.style, this._markerData, this._markAttributeContext)\n },\n state: {\n line: transformState(this._spec.itemLine.line?.state ?? {}, this._markerData, this._markAttributeContext),\n lineStartSymbol: transformState(\n this._spec.itemLine.startSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n lineEndSymbol: transformState(\n this._spec.itemLine.endSymbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n symbol: transformState(\n this._spec.itemContent.symbol?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n image: transformState(this._spec.itemContent.image?.state ?? {}, this._markerData, this._markAttributeContext),\n text: transformState(this._spec.itemContent.text?.state ?? {}, this._markerData, this._markAttributeContext),\n textBackground: transformState(\n this._spec.itemContent.text?.labelBackground?.state,\n this._markerData,\n this._markAttributeContext\n ),\n richText: transformState(\n this._spec.itemContent.richText?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n customMark: transformState(\n this._spec.itemContent.customMark?.state ?? {},\n this._markerData,\n this._markAttributeContext\n ),\n targetItem: transformState(this._spec.targetSymbol?.state ?? {}, this._markerData, this._markAttributeContext)\n },\n animation: this._spec.animation ?? false,\n animationEnter: this._spec.animationEnter,\n animationExit: this._spec.animationExit,\n animationUpdate: this._spec.animationUpdate\n };\n\n if (symbol?.style) {\n markPointAttrs.itemContent.symbolStyle = transformToGraphic(\n transformStyle(symbol.style, this._markerData, this._markAttributeContext)\n );\n }\n if (image?.style) {\n markPointAttrs.itemContent.imageStyle = transformStyle(image.style, this._markerData, this._markAttributeContext);\n }\n if (label) {\n markPointAttrs.itemContent.textStyle = transformLabelAttributes(\n label,\n this._markerData,\n this._markAttributeContext\n );\n }\n if (richText?.style) {\n markPointAttrs.itemContent.richTextStyle = transformStyle(\n richText.style,\n this._markerData,\n this._markAttributeContext\n );\n }\n\n const { visible, line = {}, ...restItemLine } = itemLine;\n if (visible !== false) {\n markPointAttrs.itemLine = {\n ...restItemLine,\n visible: true,\n lineStyle: transformToGraphic(line.style)\n } as any;\n } else {\n markPointAttrs.itemLine = {\n visible: false\n };\n }\n\n const markPoint = new MarkPointComponent(markPointAttrs);\n return markPoint as unknown as IGroup;\n }\n\n protected _markerLayout() {\n const spec = this._spec;\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n\n const { point } = this._computePointsAttr();\n\n const seriesData = this._getRelativeDataView().latestData;\n const dataPoints = data\n ? data.latestData[0] && data.latestData[0].latestData\n ? data.latestData[0].latestData\n : data.latestData\n : seriesData;\n\n let limitRect;\n if (spec.clip || spec.itemContent?.confine) {\n const { minX, maxX, minY, maxY } = computeClipRange([relativeSeries.getRegion()]);\n limitRect = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n if (this._markerComponent) {\n const attribute = this._markerComponent.attribute ?? {};\n const textStyle = attribute.itemContent?.textStyle ?? {};\n this._markerComponent.setAttributes({\n position: point === undefined ? { x: null, y: null } : point, // setAttrs时merge时undefined会被忽略, 所以这里做转换\n itemContent: {\n ...attribute.itemContent,\n textStyle: {\n ...textStyle,\n text: this._spec.itemContent.text?.formatMethod\n ? // type error here will be fixed in components\n (this._spec.itemContent.text.formatMethod(dataPoints, seriesData) as any)\n : textStyle.text\n },\n offsetX: computeOffsetFromRegion(point, attribute.itemContent.offsetX, this._relativeSeries.getRegion()),\n offsetY: computeOffsetFromRegion(point, attribute.itemContent.offsetY, this._relativeSeries.getRegion())\n },\n limitRect,\n dx: this._layoutOffsetX,\n dy: this._layoutOffsetY\n });\n }\n }\n\n protected _initDataView(): void {\n const spec = this._spec as any;\n const { doXYProcess, doPolarProcess, doGeoProcess } = getMarkPointProcessInfo(spec);\n const isCoordinateProcess = isValid(spec.coordinate);\n if (!isCoordinateProcess && !doXYProcess && !doPolarProcess && !doGeoProcess) {\n return;\n }\n\n this._initCommonDataView();\n }\n}\n","import type { IMarkPointCoordinateSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { cartesianCoordinateLayout, getMarkPointProcessInfo, positionLayout, xyLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { IMarkProcessOptions } from '../interface';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\n\nexport class CartesianMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.markPoint;\n type = ComponentTypeEnum.markPoint;\n name: string = ComponentTypeEnum.markPoint;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n protected _computePointsAttr() {\n const spec = this._spec;\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const isXYLayout = 'x' in spec && 'y' in spec;\n const isCoordinateLayout = 'coordinate' in spec;\n const isPositionLayout = 'position' in spec;\n const autoRange = spec?.autoRange ?? false;\n\n let point: IPoint;\n\n if (isXYLayout) {\n point = xyLayout(data, relativeSeries, relativeSeries, relativeSeries, autoRange)[0][0];\n } else if (isCoordinateLayout) {\n point = cartesianCoordinateLayout(\n data,\n relativeSeries,\n autoRange,\n (spec as IMarkPointCoordinateSpec).coordinatesOffset\n )[0];\n } else if (isPositionLayout) {\n point = positionLayout(spec.position, relativeSeries, spec.regionRelative)[0];\n }\n\n return { point };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXYProcess } = getMarkPointProcessInfo(spec);\n const isCoordinateProcess = isValid(spec.coordinate);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ])\n ];\n } else if (isCoordinateProcess) {\n options = this._processSpecCoo(spec);\n }\n\n return { options };\n }\n}\n\nexport const registerMarkPoint = () => {\n Factory.registerComponent(CartesianMarkPoint.type, CartesianMarkPoint);\n registerMarkPointAnimate();\n};\n","import { ComponentTypeEnum } from '../../interface/type';\nimport { polarLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { IPolarSeries } from 'src/series';\nimport type { IMarkProcessOptions } from '../interface';\nimport { polarToCartesian } from '@visactor/vutils';\nimport type { CoordinateType } from '../../../typings';\n\nexport class PolarMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.polarMarkPoint;\n type = ComponentTypeEnum.polarMarkPoint;\n name: string = ComponentTypeEnum.polarMarkPoint;\n static coordinateType = 'polar';\n coordinateType = 'polar' as CoordinateType;\n\n protected _computePointsAttr() {\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const autoRange = this._spec?.autoRange ?? false;\n const polarPoint = polarLayout(data, relativeSeries, relativeSeries, relativeSeries, autoRange)[0][0];\n const center = {\n x:\n this._relativeSeries.getRegion().getLayoutStartPoint().x +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().x,\n y:\n this._relativeSeries.getRegion().getLayoutStartPoint().y +\n (this._relativeSeries as IPolarSeries).angleAxisHelper.center().y\n };\n const point = polarToCartesian(center, polarPoint.radius, polarPoint.angle);\n\n return { point };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const options = [\n this._processSpecByDims([\n { dim: 'radius', specValue: spec.radius },\n { dim: 'angle', specValue: spec.angle }\n ])\n ];\n return { options };\n }\n}\n\nexport const registerPolarMarkPoint = () => {\n Factory.registerComponent(PolarMarkPoint.type, PolarMarkPoint);\n registerMarkPointAnimate();\n};\n","import { ComponentTypeEnum } from '../../interface/type';\nimport { geoLayout } from '../utils';\nimport { registerMarkPointAnimate } from '@visactor/vrender-components';\nimport { Factory } from '../../../core/factory';\nimport { BaseMarkPoint } from './base-mark-point';\nimport type { CoordinateType } from '../../../typings';\n\nexport class GeoMarkPoint extends BaseMarkPoint {\n static type = ComponentTypeEnum.geoMarkPoint;\n type = ComponentTypeEnum.geoMarkPoint;\n name: string = ComponentTypeEnum.geoMarkPoint;\n static coordinateType: string = 'geo';\n coordinateType = 'geo' as CoordinateType;\n\n protected _computePointsAttr() {\n const data = this._markerData;\n const relativeSeries = this._relativeSeries;\n const point = geoLayout(data, relativeSeries)[0][0];\n\n return { point };\n }\n\n protected _computeOptions(): any {\n const spec = this._spec as any;\n const options = [this._processSpecByDims([{ dim: 'areaName', specValue: spec.areaName }])];\n return { options };\n }\n}\n\nexport const registerGeoMarkPoint = () => {\n Factory.registerComponent(GeoMarkPoint.type, GeoMarkPoint);\n registerMarkPointAnimate();\n};\n","import type { IPointLike } from '../data-structure';\nimport { isIntersect } from './algorithm';\n\nconst EPSILON = 1e-8;\n\n// Adapted from https://github.com/apache/echarts/blob/master/src/util/graphic.ts by striezel\n// License: https://github.com/apache/echarts/blob/master/LICENSE\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\nexport function lineIntersectPolygon(\n a1x: number,\n a1y: number,\n a2x: number,\n a2y: number,\n points: IPointLike[]\n): boolean {\n for (let i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n const p = points[i];\n if (isIntersect([a1x, a1y], [a2x, a2y], [p.x, p.y], [p2.x, p2.y])) {\n return true;\n }\n p2 = p;\n }\n return false;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function polygonContainPoint(points: IPointLike[], x: number, y: number) {\n let w = 0;\n let p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (let i = 1; i < points.length; i++) {\n const p2 = points[i];\n w += isPointInLine(p.x, p.y, p2.x, p2.y, x, y);\n p = p2;\n }\n\n // Close polygon\n const p0 = points[0];\n if (!isAroundEqual(p.x, p0.x) || !isAroundEqual(p.y, p0.y)) {\n w += isPointInLine(p.x, p.y, p0.x, p0.y, x, y);\n }\n\n return w !== 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/windingLine.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nexport function isPointInLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\n// Adapted from https://github.com/ecomfe/zrender/blob/master/src/contain/polygon.ts by pissang\n// License: https://github.com/ecomfe/zrender/blob/master/LICENSE\nfunction isAroundEqual(a: number, b: number): boolean {\n return Math.abs(a - b) < EPSILON;\n}\n\n/**\n * polygon图元之间是否相交\n * @param pointsA 图元A的points\n * @param pointsB 图元B的points\n * @returns 是否相交\n */\nexport function polygonIntersectPolygon(pointsA: IPointLike[], pointsB: IPointLike[]) {\n for (let i = 0; i < pointsB.length; i++) {\n if (polygonContainPoint(pointsA, pointsB[i].x, pointsB[i].y)) {\n return true;\n }\n if (i > 0 && lineIntersectPolygon(pointsB[i - 1].x, pointsB[i - 1].y, pointsB[i].x, pointsB[i].y, pointsA)) {\n return true;\n }\n }\n return false;\n}\n","import type { GraphicEventType, IGroupGraphicAttribute, IPolygonGraphicAttribute } from '@visactor/vrender-core';\nimport type { IDelayType } from '../interface';\n\nexport interface BrushAttributes extends IGroupGraphicAttribute {\n /**\n * 触发框选的事件名称\n */\n trigger?: GraphicEventType;\n /**\n * 更新框选的事件名称\n */\n updateTrigger?: GraphicEventType;\n /**\n * 结束框选的事件名称\n */\n endTrigger?: GraphicEventType;\n /**\n * 清空框选的事件名称\n */\n resetTrigger?: GraphicEventType;\n /**\n * 可交互范围\n */\n interactiveRange?: {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n };\n /**\n * 框选模式\n * @default 'single'\n */\n brushMode?: IBrushMode;\n /**\n * 框选类型\n * @default 'rect'\n */\n brushType?: IBrushType;\n /**\n * brushType为'y'时, x的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n xRange?: [number, number];\n /**\n * brushType为'x'时, y的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n yRange?: [number, number];\n /** 是否展示brush mask */\n hasMask?: boolean;\n /**\n * 框选区域的样式\n */\n brushStyle?: IPolygonGraphicAttribute;\n /**\n * 是否可被平移\n * @default true\n */\n brushMoved?: boolean;\n /**\n * brushMode为'single'时,是否单击清除选框\n * @default true\n */\n removeOnClick?: boolean;\n /**\n * brush选框的大小阈值\n */\n sizeThreshold?: number;\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n\nexport type IBrushType = 'x' | 'y' | 'rect' | 'polygon';\nexport type IBrushMode = 'single' | 'multiple';\n\nexport enum IOperateType {\n drawStart = 'drawStart',\n drawEnd = 'drawEnd',\n drawing = 'drawing',\n moving = 'moving',\n moveStart = 'moveStart',\n moveEnd = 'moveEnd',\n brushClear = 'brushClear'\n}\n","export const DEFAULT_BRUSH_ATTRIBUTES = {\n trigger: 'pointerdown',\n updateTrigger: 'pointermove',\n endTrigger: 'pointerup',\n resetTrigger: 'pointerupoutside',\n hasMask: true,\n brushMode: 'single',\n brushType: 'rect',\n brushStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n strokeWidth: 2\n },\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 10,\n interactiveRange: {\n y1: -Infinity,\n y2: Infinity,\n x1: -Infinity,\n x2: Infinity\n }\n};\n\nexport const DEFAULT_SIZE_THRESHOLD = 5;\n","/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\nimport { graphicCreator, vglobal } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\nimport { cloneDeep, debounce, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n private _isDrawedBeforeEnd = false;\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const {\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n // 拖拽绘制开始\n this.stage.addEventListener(trigger, this._onBrushStart as EventListener);\n // 拖拽绘制时\n this.stage.addEventListener(updateTrigger, this._onBrushingWithDelay as EventListener);\n // 拖拽绘制结束\n this.stage.addEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.addEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n\n const brushMoved = this.attribute.brushMoved ?? true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n\n this._activeDrawState && this._initDraw(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._initMove(e);\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n\n if (this._activeDrawState || this._activeMoveState) {\n e.stopPropagation();\n }\n\n this._activeDrawState && this._drawing(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._moving(e);\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n if (!this._activeDrawState && !this._activeMoveState) {\n return;\n }\n\n e.preventDefault();\n const { removeOnClick = true } = this.attribute as BrushAttributes;\n if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {\n // _isDrawedBeforeEnd有两种情况:\n // 1. 没有绘制mask\n // 2. 绘制了mask但没有超过阈值\n // 只有第2种情况才会触发clear, 可以理解为双击才触发clear\n if (this._operatingMask?._AABBBounds.empty()) {\n this._dispatchEvent(IOperateType.brushClear, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n this._container.incrementalClearChild();\n this._brushMaskAABBBoundsDict = {};\n } else {\n if (this._activeDrawState) {\n this._dispatchEvent(IOperateType.drawEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n if (this._activeMoveState) {\n this._dispatchEvent(IOperateType.moveEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n this._isDrawedBeforeEnd = false;\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [pos];\n this._isDrawedBeforeEnd = false;\n if (brushMode === 'single') {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n }\n this._addBrushMask();\n this._dispatchEvent(IOperateType.drawStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchEvent(IOperateType.moveStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { sizeThreshold = DEFAULT_SIZE_THRESHOLD, brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n\n // 更新形状之后再判断是否需要正在绘制\n // if not, 则_isDrawedBeforeEnd false\n // then: 1. 不暴露drawing状态 2. 在brushEnd时该形状会被清空\n const { x1 = 0, x2 = 0, y1 = 0, y2 = 0 } = this._operatingMask?._AABBBounds;\n this._isDrawedBeforeEnd =\n !this._operatingMask._AABBBounds.empty() &&\n !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);\n if (this._isDrawedBeforeEnd) {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.drawing, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.moving, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? brushStyle.opacity ?? 1 : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const {\n delayType = 'throttle',\n delayTime = 0,\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n this.stage.removeEventListener(trigger, this._onBrushStart as EventListener);\n this.stage.removeEventListener(updateTrigger, this._onBrushingWithDelay as EventListener);\n this.stage.removeEventListener(endTrigger, this._onBrushEnd as EventListener);\n this.stage.removeEventListener(resetTrigger, this._onBrushEnd as EventListener);\n }\n}\n","import { registerGroup, registerPolygon } from '@visactor/vrender-kits';\n\nexport function loadBrushComponent() {\n registerGroup();\n registerPolygon();\n}\n","import { ChartEvent } from '../../constant/event';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { Brush as BrushComponent, IOperateType as BrushEvent } from '@visactor/vrender-components';\nimport type { IPointLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, polygonIntersectPolygon, isValid, last } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { IGraphic, IGroup, INode, IPolygon, ISymbolGraphicAttribute } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { ISeries } from '../../series/interface';\nimport type { IMark } from '../../mark/interface';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BrushInteractiveRangeAttr, IBrush, IBrushSpec, selectedItemStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEqual } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { DataZoom } from '../data-zoom';\nimport type { IBandLikeScale, IContinuousScale, ILinearScale } from '@visactor/vscale';\nimport type { AxisComponent } from '../axis/base-axis';\nimport { getSpecInfo } from '../util';\n\nconst IN_BRUSH_STATE = 'inBrush';\nconst OUT_BRUSH_STATE = 'outOfBrush';\n\nexport class Brush extends BaseComponent implements IBrush {\n layoutType: 'none' = 'none';\n static type = ComponentTypeEnum.brush;\n type = ComponentTypeEnum.brush;\n name: string = ComponentTypeEnum.brush;\n\n static specKey = 'brush';\n specKey = 'brush';\n\n layoutZIndex: number = LayoutZIndex.Brush;\n\n // brush组件\n protected _brushComponents!: BrushComponent[];\n protected _relativeRegions!: IRegion[];\n protected _linkedSeries: ISeries[] = [];\n\n private _itemMap: { [regionId: string | number]: IMark[] } = {};\n private _linkedItemMap: { [seriesId: string | number]: IMark[] } = {};\n\n // 用brushName做分组管理的原因是: 如果有多个brush, 某个图元A brush内, 但在B brush外, 该图元state会被B误变成out of brush。 但其实该图元只有在A brush外才能被判断out of brush\n // 用dict做存储因为方便查找和删减对应图元\n protected _inBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _outOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n protected _linkedInBrushElementsMap: { [brushName: string]: { [elementKey: string]: IElement } } = {};\n protected _linkedOutOfBrushElementsMap: { [elementKey: string]: IElement } = {};\n\n private _needInitOutState: boolean = true;\n private _cacheInteractiveRangeAttrs: BrushInteractiveRangeAttr[] = [];\n\n private _needDisablePickable: boolean = false;\n\n private _releatedAxes: AxisComponent[] = [];\n\n // 根据region找axis\n private _regionAxisMap: { [regionId: string]: AxisComponent[] } = {};\n // 根据axis找dataZoom\n private _axisDataZoomMap: { [axisId: string]: DataZoom } = {};\n // 记录当前操作的axis或dataZoom的状态\n private _zoomRecord: { operateComponent: AxisComponent | DataZoom; start: number; end: number }[] = [];\n\n init() {\n const inBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.inBrush);\n const outOfBrushMarkAttr = this._transformBrushedMarkAttr(this._spec.outOfBrush);\n // 写入mark state, 便于后续state管理\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getActiveMarks().forEach((m: IMark) => {\n if (m) {\n s.setMarkStyle(\n m,\n {\n ...inBrushMarkAttr\n },\n IN_BRUSH_STATE,\n AttributeLevel.Series\n );\n s.setMarkStyle(\n m,\n {\n ...outOfBrushMarkAttr\n },\n OUT_BRUSH_STATE,\n AttributeLevel.Series\n );\n }\n });\n });\n }\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IBrushSpec) => {\n return s.visible !== false;\n });\n }\n\n created() {\n super.created();\n\n // event\n this.initEvent();\n this._bindRegions();\n this._bindLinkedSeries();\n this._initRegionAxisMap();\n this._initAxisDataZoomMap();\n this._initNeedOperatedItem();\n }\n\n protected _extendDataInBrush(elementsMap: { [brushName: string]: { [elementKey: string]: IElement } }) {\n const data = [];\n for (const brushName in elementsMap) {\n for (const elementKey in elementsMap[brushName]) {\n data.push({\n ...elementsMap[brushName][elementKey]?.data?.[0]\n });\n }\n }\n return data;\n }\n\n protected _extendDatumOutOfBrush(elementsMap: { [elementKey: string]: IElement }) {\n const data = [];\n for (const elementKey in elementsMap) {\n // 图例筛选后, elementKey未更新, 导致data可能为null\n // FIXME: brush透出的map维护逻辑有待优化\n data.push(elementsMap[elementKey].data?.[0]);\n }\n return data;\n }\n\n protected _getBrushInteractiveAttr(region: IRegion) {\n const regionLayoutPosition = region.getLayoutStartPoint();\n const regionLayoutRect = region.getLayoutRect();\n const seriesRegionStartX = regionLayoutPosition.x;\n const seriesRegionEndX = seriesRegionStartX + regionLayoutRect.width;\n const seriesRegionStartY = regionLayoutPosition.y;\n const seriesRegionEndY = seriesRegionStartY + regionLayoutRect.height;\n return {\n interactiveRange: {\n minY: seriesRegionStartY,\n maxY: seriesRegionEndY,\n minX: seriesRegionStartX,\n maxX: seriesRegionEndX\n },\n xRange: [seriesRegionStartX, seriesRegionEndX],\n yRange: [seriesRegionStartY, seriesRegionEndY]\n } as BrushInteractiveRangeAttr;\n }\n\n protected _updateBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n // 布局变化后, 更新可交互范围\n const brushComponent = this._brushComponents[componentIndex];\n brushComponent.setAttributes(interactiveAttr as any);\n\n // 布局变化后, 更新brush 和 图元状态\n // 方案一:\n // TODO: 更新mask位置(保持选框在画布中的相对位置)\n // TODO: 是否更新mask大小有待商榷(保持选框位置和图元高亮区域一致)\n\n // 方案二: 清空brushMask 和 图元高亮状态\n this._initMarkBrushState(componentIndex, '');\n brushComponent.children[0].removeAllChild();\n this._needInitOutState = true;\n }\n\n protected _createBrushComponent(region: IRegion, componentIndex: number) {\n const interactiveAttr = this._getBrushInteractiveAttr(region);\n const brush = new BrushComponent({\n zIndex: this.layoutZIndex,\n brushStyle: transformToGraphic(this._spec?.style),\n ...interactiveAttr,\n ...this._spec,\n disableTriggerEvent: this._option.disableTriggerEvent\n });\n brush.id = this._spec.id ?? `brush-${this.id}`;\n this.getContainer().add(brush as unknown as INode);\n const { brushMode = 'single' } = this._spec;\n this._brushComponents.push(brush);\n this._cacheInteractiveRangeAttrs.push(interactiveAttr);\n\n brush.addEventListener(BrushEvent.drawStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.moveStart, (e: any) => {\n this._emitEvent(ChartEvent.brushStart, region);\n });\n\n brush.addEventListener(BrushEvent.drawing, (e: any) => {\n // 需要重置out状态的情况:\n // _needInitOutState:框选模式为'single' 且 开始后的第一次drawing时(这里不选择drawStart而选择第一次触发drawing的时机是因为点击空白处也会触发drawStart), 需要重置图元状态\n if (this._needInitOutState && brushMode === 'single') {\n this._initMarkBrushState(componentIndex, OUT_BRUSH_STATE);\n }\n this._needInitOutState = false;\n this._needDisablePickable = true;\n\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.moving, (e: any) => {\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n });\n\n brush.addEventListener(BrushEvent.brushClear, (e: any) => {\n this._initMarkBrushState(componentIndex, '');\n this._needInitOutState = true;\n this._needDisablePickable = false;\n this._handleBrushChange(ChartEvent.brushChange, region, e);\n this._handleBrushChange(ChartEvent.brushClear, region, e);\n this._emitEvent(ChartEvent.brushChange, region);\n this._emitEvent(ChartEvent.brushClear, region);\n });\n\n brush.addEventListener(BrushEvent.drawEnd, (e: any) => {\n this._needInitOutState = true;\n this._needDisablePickable = false;\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n\n brush.addEventListener(BrushEvent.moveEnd, (e: any) => {\n const { operateMask } = e.detail as any;\n this._handleBrushChange(ChartEvent.brushEnd, region, e);\n const inBrushData = this._extendDataInBrush(this._inBrushElementsMap);\n if (!this._spec.zoomWhenEmpty && inBrushData.length > 0) {\n this._setAxisAndDataZoom(operateMask, region);\n }\n this._emitEvent(ChartEvent.brushEnd, region);\n });\n }\n\n private _handleBrushChange(eventType: string, region: IRegion, e: any) {\n const { operateMask } = e.detail as any;\n this._reconfigItem(operateMask, region);\n this._reconfigLinkedItem(operateMask, region);\n }\n\n private _emitEvent(eventType: string, region: IRegion) {\n this.event.emit(eventType, {\n model: this,\n value: {\n // 操作类型\n operateType: eventType,\n // 正在操作的region\n operateRegion: region,\n // 在选框内的 element data\n inBrushData: this._extendDataInBrush(this._inBrushElementsMap),\n // 在选框外的 element data\n outOfBrushData: this._extendDatumOutOfBrush(this._outOfBrushElementsMap),\n // 被链接的系列中:在选框内的 element data\n linkInBrushData: this._extendDataInBrush(this._linkedInBrushElementsMap),\n // 被链接的系列中:在选框外的 element data\n linkOutOfBrushData: this._extendDatumOutOfBrush(this._linkedOutOfBrushElementsMap),\n // 在选框内的 vgrammar elements\n inBrushElementsMap: this._inBrushElementsMap,\n // 在选框外的 vgrammar elements\n outOfBrushElementsMap: this._outOfBrushElementsMap,\n // 被链接的系列中:在选框内的 vgrammar elements\n linkedInBrushElementsMap: this._linkedInBrushElementsMap,\n // 被链接的系列中:在选框外的 vgrammar elements\n linkedOutOfBrushElementsMap: this._linkedOutOfBrushElementsMap,\n // 缩放记录\n zoomRecord: this._zoomRecord\n }\n });\n }\n\n private _transformBrushedMarkAttr(brushedStyle: selectedItemStyle) {\n const styleResult: any = {};\n if (brushedStyle?.symbol) {\n styleResult.symbolType = brushedStyle.symbol;\n }\n if (brushedStyle?.symbolSize) {\n styleResult.size = brushedStyle.symbolSize;\n }\n if (brushedStyle?.color) {\n styleResult.fill = brushedStyle.color;\n }\n if (brushedStyle?.colorAlpha) {\n styleResult.fillOpacity = brushedStyle.colorAlpha;\n }\n return {\n ...transformToGraphic(brushedStyle),\n ...styleResult\n };\n }\n\n private _reconfigItem(operateMask: IPolygon, region: IRegion) {\n // 遍历图元, 更新状态\n this._itemMap[region.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (this._outOfBrushElementsMap?.[elementKey] && this._isBrushContainItem(operateMask, graphicItem)) {\n el.addState(IN_BRUSH_STATE);\n if (!this._inBrushElementsMap[operateMask?.name]) {\n this._inBrushElementsMap[operateMask?.name] = {};\n }\n this._inBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._outOfBrushElementsMap[elementKey];\n } else if (\n this._inBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem)\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._outOfBrushElementsMap[elementKey] = el;\n delete this._inBrushElementsMap[operateMask.name][elementKey];\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n\n private _reconfigLinkedItem(operateMask: IPolygon, region: IRegion) {\n const regionLayoutPos = region.getLayoutStartPoint();\n const seriesId = region.getSeries().map(s => s.id);\n this._linkedSeries.forEach((s: ISeries) => {\n if (!seriesId.includes(s.id)) {\n const sRegionLayoutPos = s.getRegion().getLayoutStartPoint();\n\n const regionOffsetX = sRegionLayoutPos.x - regionLayoutPos.x;\n const regionOffsetY = sRegionLayoutPos.y - regionLayoutPos.y;\n\n this._linkedItemMap[s.id].forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const graphicItem = el.getGraphicItem();\n const elementKey = mark.id + '_' + el.key;\n // 判断逻辑:\n // 应该被置为inBrush状态的图元:\n // before: 在out brush elment map, 即不在任何brush中\n // now: 在当前brush图元中\n\n // 应该被置为outOfBrush状态的图元:\n // before: 在当前brush 的 in brush element map中, 即在当前brush中\n // now: 不在当前brush中\n if (\n this._linkedOutOfBrushElementsMap?.[elementKey] &&\n this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.addState(IN_BRUSH_STATE);\n if (!this._linkedInBrushElementsMap[operateMask?.name]) {\n this._linkedInBrushElementsMap[operateMask?.name] = {};\n }\n this._linkedInBrushElementsMap[operateMask?.name][elementKey] = el;\n delete this._linkedOutOfBrushElementsMap[elementKey];\n } else if (\n this._linkedInBrushElementsMap?.[operateMask?.name]?.[elementKey] &&\n !this._isBrushContainItem(operateMask, graphicItem, { dx: regionOffsetX, dy: regionOffsetY })\n ) {\n el.removeState(IN_BRUSH_STATE);\n el.addState(OUT_BRUSH_STATE);\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n }\n graphicItem.setAttribute('pickable', !this._needDisablePickable);\n });\n });\n }\n });\n }\n\n private _isBrushContainItem(brushMask: IPolygon, item: IGraphic, linkedOffset?: { dx: number; dy: number }) {\n if (!brushMask?.globalTransMatrix || !brushMask?.attribute?.points) {\n return false;\n }\n\n // 根据变换矩阵得到brushMask的实际坐标\n const points = brushMask?.attribute?.points ?? [];\n const { a, b, c, d, e, f } = brushMask.globalTransMatrix;\n\n const dx = linkedOffset?.dx || 0;\n const dy = linkedOffset?.dy || 0;\n\n const pointsCoord = points.map((p: IPointLike) => {\n return {\n x: a * p.x + c * p.y + e + dx,\n y: b * p.x + d * p.y + f + dy\n };\n });\n\n brushMask.globalAABBBounds\n .clone()\n .set(\n brushMask.globalAABBBounds.x1 + dx,\n brushMask.globalAABBBounds.y1 + dy,\n brushMask.globalAABBBounds.x2 + dx,\n brushMask.globalAABBBounds.y2 + dy\n );\n\n // 根据变换矩阵得到item的实际坐标\n const x = item.globalTransMatrix.e;\n const y = item.globalTransMatrix.f;\n\n // brush与图表图元进行相交 或 包含判断\n let itemBounds: { x: number; y: number }[] = [];\n if (item.type === 'symbol') {\n const { size: itemSize = 0 } = item?.attribute as ISymbolGraphicAttribute;\n const size = array(itemSize)[0] / 2;\n itemBounds = [\n {\n x: x - size,\n y: y - size\n },\n {\n x: x + size,\n y: y - size\n },\n {\n x: x + size,\n y: y + size\n },\n {\n x: x - size,\n y: y + size\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n } else if (item.type === 'rect') {\n const { x1, x2, y1, y2 } = item?.AABBBounds;\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n itemBounds = [\n {\n x: x,\n y: y\n },\n {\n x: x + width,\n y: y\n },\n {\n x: x + width,\n y: y + height\n },\n {\n x: x,\n y: y + height\n }\n ];\n return polygonIntersectPolygon(pointsCoord, itemBounds);\n }\n return brushMask.globalAABBBounds.intersects(item.globalAABBBounds);\n }\n\n private _stateClamp(state: number) {\n return Math.min(Math.max(0, state), 1);\n }\n\n private _setAxisAndDataZoom(operateMask: IPolygon, region: IRegion) {\n this._zoomRecord = [];\n if (this._spec.zoomAfterBrush) {\n // step1: 拿到brush bounds, 计算 continuous axis/dataZoom新范围\n const operateMaskBounds = operateMask.AABBBounds;\n\n // step2:\n // 如果轴关联了dataZoom,则通过dataZoom更新轴\n // 如果轴没有关联dataZoom,则直接更改轴rangeFactor\n this._regionAxisMap['region_' + region.id]?.forEach(axis => {\n const isHorizontal = axis.layoutOrient === 'bottom' || axis.layoutOrient === 'top';\n const axisRangeExpand = this._spec.axisRangeExpand ?? 0;\n const { x1, x2, y1, y2 } = operateMaskBounds;\n const regionStartAttr = isHorizontal ? 'x' : 'y';\n const boundsStart = isHorizontal ? x1 : y1;\n const boundsEnd = isHorizontal ? x2 : y2;\n\n if (this._axisDataZoomMap[axis.id]) {\n const dataZoom = this._axisDataZoomMap[axis.id];\n const releatedAxis = dataZoom.relatedAxisComponent as AxisComponent;\n const startValue = releatedAxis\n .getScale()\n .invert(boundsStart - region.getLayoutStartPoint()[regionStartAttr]);\n const endValue = releatedAxis.getScale().invert(boundsEnd - region.getLayoutStartPoint()[regionStartAttr]);\n const startPercent = dataZoom.dataToStatePoint(startValue);\n const endPercent = dataZoom.dataToStatePoint(endValue);\n const newStartPercent = this._stateClamp(startPercent - axisRangeExpand);\n const newEndPercent = this._stateClamp(endPercent + axisRangeExpand);\n dataZoom.setStartAndEnd(Math.min(newStartPercent, newEndPercent), Math.max(newStartPercent, newEndPercent), [\n 'percent',\n 'percent'\n ]);\n\n this._zoomRecord.push({\n operateComponent: dataZoom,\n start: newStartPercent,\n end: newEndPercent\n });\n } else {\n const range = axis.getScale().range();\n const rangeFactor = (axis.getScale() as IContinuousScale | IBandLikeScale).rangeFactor() ?? [0, 1];\n\n // 判断轴是否为反向轴(last(range) < range[0]),即从右到左, 或从下到上\n // 如果是反向轴, 计算start和end时, 也要保持 start < end\n const isAxisReverse = last(range) < range[0];\n const startPosTemp = boundsStart - region.getLayoutStartPoint()[regionStartAttr];\n const endPosTemp = boundsEnd - region.getLayoutStartPoint()[regionStartAttr];\n const endPos = isAxisReverse ? Math.min(startPosTemp, endPosTemp) : Math.max(startPosTemp, endPosTemp);\n const startPos = isAxisReverse ? Math.max(startPosTemp, endPosTemp) : Math.min(startPosTemp, endPosTemp);\n\n const start =\n ((startPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const end =\n ((endPos - range[0]) / (last(range) - range[0])) * (rangeFactor[1] - rangeFactor[0]) + rangeFactor[0];\n const newStart = this._stateClamp(start - axisRangeExpand);\n const newEnd = this._stateClamp(end + axisRangeExpand);\n (axis.getScale() as ILinearScale).rangeFactor([newStart, newEnd]);\n axis.effect.scaleUpdate();\n\n this._zoomRecord.push({\n operateComponent: axis,\n start: newStart,\n end: newEnd\n });\n }\n });\n }\n }\n\n protected _bindRegions() {\n if (isValid(this._spec.regionId) && isValid(this._spec.regionIndex)) {\n this._relativeRegions = this._option.getAllRegions();\n }\n this._relativeRegions = this._option.getRegionsInUserIdOrIndex(\n array(this._spec.regionId),\n array(this._spec.regionIndex)\n );\n }\n\n protected _bindLinkedSeries() {\n if (isValid(this._spec.brushLinkSeriesId) && isValid(this._spec.brushLinkSeriesIndex)) {\n return;\n }\n this._linkedSeries = this._option.getSeriesInUserIdOrIndex(\n array(this._spec.brushLinkSeriesId),\n array(this._spec.brushLinkSeriesIndex)\n );\n }\n\n private _initRegionAxisMap() {\n // 如果配置了axis,则按配置\n // 如果没有配置axis,则默认所有axis\n if (isValid(this._spec.axisId)) {\n array(this._spec.axisId).forEach((axisId: string) => {\n this._releatedAxes.push(this._option.getComponentByUserId(axisId) as AxisComponent);\n });\n } else if (isValid(this._spec.axisIndex)) {\n array(this._spec.axisIndex).forEach((axisIndex: number) => {\n this._releatedAxes.push(this._option.getComponentByIndex('axes', axisIndex) as AxisComponent);\n });\n } else {\n this._releatedAxes = this._option.getComponentsByKey('axes') as AxisComponent[];\n }\n\n // 按照region进行分组,便于brush找到关联axis (brush -> region -> axis)\n this._releatedAxes.forEach((axis: AxisComponent) => {\n axis?.getRegions().forEach((region: IRegion) => {\n if (this._regionAxisMap['region_' + region.id]) {\n this._regionAxisMap['region_' + region.id].push(axis);\n } else {\n this._regionAxisMap['region_' + region.id] = [axis];\n }\n });\n });\n }\n\n private _initAxisDataZoomMap() {\n (this._option.getComponentsByKey('dataZoom') as DataZoom[]).forEach((dz: DataZoom) => {\n if (dz.relatedAxisComponent) {\n this._axisDataZoomMap[(dz.relatedAxisComponent as AxisComponent).id] = dz;\n }\n });\n }\n\n private _initNeedOperatedItem() {\n const seriesUserId = this._spec.seriesId;\n const seriesIndex = this._spec.seriesIndex;\n this._relativeRegions.forEach(r => {\n const allMarks: IMark[] = [];\n r.getSeries().forEach((s: ISeries) => {\n if (\n (seriesUserId && array(seriesUserId).includes(s.userId.toString())) ||\n (seriesIndex && array(seriesIndex).includes(s.getSpecIndex())) ||\n (!seriesIndex && !seriesUserId)\n ) {\n allMarks.push(...s.getMarksWithoutRoot());\n }\n this._itemMap[r.id] = allMarks;\n });\n });\n\n this._linkedSeries.forEach(s => {\n this._linkedItemMap[s.id] = s.getMarksWithoutRoot();\n });\n }\n\n protected _initMarkBrushState(componentIndex: number, stateName: string) {\n this._brushComponents.forEach((brush, index) => {\n if (index !== componentIndex) {\n brush.children[0].removeAllChild();\n }\n });\n\n this._inBrushElementsMap = {};\n this._outOfBrushElementsMap = {};\n this._linkedInBrushElementsMap = {};\n this._linkedOutOfBrushElementsMap = {};\n\n this._option.getAllSeries().forEach((s: ISeries) => {\n s.getMarksWithoutRoot().forEach((mark: IMark) => {\n const grammarMark = mark.getProduct();\n if (!grammarMark || !grammarMark.elements || !grammarMark.elements.length) {\n return;\n }\n const elements = grammarMark.elements;\n elements.forEach((el: IElement) => {\n const elementKey = mark.id + '_' + el.key;\n el.removeState(IN_BRUSH_STATE);\n el.removeState(OUT_BRUSH_STATE);\n el.addState(stateName);\n this._outOfBrushElementsMap[elementKey] = el;\n this._linkedOutOfBrushElementsMap[elementKey] = el;\n });\n });\n });\n }\n\n protected initEvent() {\n // do nothing\n }\n onRender(ctx: IModelRenderOption): void {\n // do nothing\n }\n changeRegions(regions: IRegion[]): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._brushComponents as unknown as IGroup[];\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n if (this._brushComponents) {\n // FIXME: 这个逻辑放在这个方法里不太妥当?\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n if (this._option.disableTriggerEvent) {\n return;\n }\n const brushVisible = this._spec.visible ?? true;\n if (brushVisible) {\n // 创建或更新marker组件\n if (!this._brushComponents) {\n this._brushComponents = [];\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._createBrushComponent(region, index);\n });\n } else {\n this._relativeRegions.forEach((region: IRegion, index: number) => {\n this._updateBrushComponent(region, index);\n });\n }\n }\n }\n\n clearGraphic(): void {\n if (this._brushComponents) {\n this._brushComponents.forEach(brush => {\n (brush as any)._container.incrementalClearChild();\n });\n }\n }\n\n clear(): void {\n if (this._brushComponents) {\n const container = this.getContainer();\n this._brushComponents.forEach(brush => {\n brush.removeAllChild();\n brush.releaseBrushEvents();\n\n if (container) {\n container.removeChild(brush as unknown as INode);\n }\n });\n this._brushComponents = null;\n }\n }\n}\n\nexport const registerBrush = () => {\n Factory.registerComponent(Brush.type, Brush);\n};\n","import { BaseComponent } from '../base/base-component';\nimport { ComponentTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport type { IModelRenderOption } from '../../model/interface';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\nimport { PREFIX } from '../../constant/base';\nimport type { EnableMarkType, ICustomMarkGroupSpec, ICustomMarkSpec, ILayoutRect } from '../../typings';\nimport type { IGroupMark, IMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { Bounds, isEqual, isNil, isValid, isValidNumber } from '@visactor/vutils';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IModelMarkAttributeContext } from '../../compile/mark/interface';\n\n// TODO: 规范范型\nexport class CustomMark extends BaseComponent> {\n static type = ComponentTypeEnum.customMark;\n type = ComponentTypeEnum.customMark;\n\n static specKey = 'customMark';\n specKey = 'customMark';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.CustomMark;\n layoutLevel: number = LayoutLevel.CustomMark;\n\n protected declare _spec: ICustomMarkSpec> | ICustomMarkGroupSpec;\n\n created() {\n super.created();\n this.initMarks();\n this.initEvent();\n }\n\n protected _markAttributeContext: IModelMarkAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkAttributeContext() {\n this._markAttributeContext = {\n vchart: this._option.globalInstance,\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n }\n };\n }\n\n protected initMarks() {\n if (!this._spec) {\n return;\n }\n const series = this._option && this._option.getAllSeries();\n const hasAnimation = this._option.animation !== false;\n const depend: IMark[] = [];\n\n if (series && series.length) {\n series.forEach(s => {\n const marks = s && s.getMarksWithoutRoot();\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n depend.push(mark);\n });\n }\n });\n }\n let parentMark: IGroupMark | null = null;\n if (this._spec.parent) {\n const mark = this.getChart()\n .getAllMarks()\n .find(m => m.getUserId() === this._spec.parent) as IGroupMark;\n if (mark.type === 'group') {\n parentMark = mark;\n }\n }\n this._createExtensionMark(this._spec, parentMark, `${PREFIX}_series_${this.id}_extensionMark`, 0, {\n depend,\n hasAnimation\n });\n }\n\n private _createExtensionMark(\n spec: ICustomMarkSpec> | ICustomMarkGroupSpec,\n parentMark: null | IGroupMark,\n namePrefix: string,\n index: number = 0,\n options: { hasAnimation?: boolean; depend?: IMark[] }\n ) {\n const mark = this._createMark(\n {\n type: spec.type,\n name: isValid(spec.name) ? `${spec.name}` : `${namePrefix}_${index}`\n },\n {\n // 避免二次dataflow\n skipBeforeLayouted: true,\n attributeContext: this._getMarkAttributeContext(),\n componentType: spec.componentType,\n key: spec.dataKey\n }\n ) as IGroupMark;\n if (!mark) {\n return;\n }\n\n if (isValid(spec.id)) {\n mark.setUserId(spec.id);\n }\n\n if (options.hasAnimation && spec.animation) {\n // 自定义图元默认不添加动画\n const config = animationConfig({}, userAnimationConfig(spec.type, spec as any, this._markAttributeContext));\n mark.setAnimationConfig(config);\n }\n\n if (options.depend && options.depend.length) {\n mark.setDepend(...options.depend);\n }\n if (isNil(parentMark)) {\n this._marks.addMark(mark);\n } else if (parentMark) {\n parentMark.addMark(mark);\n }\n // set style\n this.initMarkStyleWithSpec(mark, spec);\n if (spec.type === 'group') {\n namePrefix = `${namePrefix}_${index}`;\n spec.children?.forEach((s, i) => {\n this._createExtensionMark(s as any, mark, namePrefix, i, options);\n });\n }\n\n if (isValid(spec.dataId) || isValidNumber(spec.dataIndex)) {\n const dataview = this.getChart().getSeriesData(spec.dataId, spec.dataIndex);\n if (dataview) {\n dataview.target.addListener('change', () => {\n mark.getData().updateData();\n });\n mark.setDataView(dataview);\n }\n }\n }\n\n initEvent() {\n // do nothing\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: ICustomMarkSpec, prevSpec: ICustomMarkSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reMake = true;\n }\n\n result.change = true;\n result.reRender = true;\n return result;\n }\n\n changeRegions(regions: IRegion[]): void {\n // do nothing;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [];\n }\n\n onRender(ctx: IModelRenderOption): void {\n // do nothing;\n }\n\n private _getMarkAttributeContext() {\n return {\n vchart: this._option.globalInstance,\n chart: this.getChart(),\n globalScale: (key: string, value: string | number) => {\n return this._option.globalScale.getScale(key)?.scale(value);\n },\n getLayoutBounds: () => {\n const { x, y } = this.getLayoutStartPoint();\n const { width, height } = this.getLayoutRect();\n return new Bounds().set(x, y, x + width, y + height);\n }\n };\n }\n\n private _getLayoutRect() {\n const bounds = new Bounds();\n\n this.getMarks().forEach(mark => {\n const product = mark.getProduct();\n\n if (product) {\n bounds.union(product.getBounds());\n }\n });\n\n if (bounds.empty()) {\n return {\n width: 0,\n height: 0\n };\n }\n\n return {\n width: bounds.width(),\n height: bounds.height()\n };\n }\n\n getBoundsInRect(rect: ILayoutRect) {\n this.setLayoutRect(rect);\n\n const result = this._getLayoutRect();\n const { x, y } = this.getLayoutStartPoint();\n return {\n x1: x,\n y1: y,\n x2: x + result.width,\n y2: y + result.height\n };\n }\n}\n\nexport const registerCustomMark = () => {\n Factory.registerComponent(CustomMark.type, CustomMark);\n};\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Morgan Herlocker\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\nimport type { Feature, MultiPolygon, Polygon, Units } from './interface';\nimport { lengthToRadians } from '@turf/helpers';\nimport { pointInRect, polygonContainPoint } from '../graphics';\nimport type { IPointLike } from '../data-structure';\nimport { degreeToRadian, radianToDegree } from '../angle';\n\n// https://github.com/Turfjs/turf\nfunction getGeom(geojson: any): any {\n if (geojson.type === 'Feature') {\n return geojson.geometry;\n }\n return geojson;\n}\n\nexport function isPointInPolygon(point: IPointLike, polygon: Feature | G) {\n if (!point) {\n return false;\n }\n\n if (!polygon) {\n return false;\n }\n\n const geom = getGeom(polygon);\n const type = geom.type;\n // BBox [west, south, east, north]\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n if (bbox && pointInRect(point, { x1: bbox[0], x2: bbox[1], y1: bbox[1], y2: bbox[3] }, true) === true) {\n return false;\n }\n\n if (type === 'Polygon') {\n polys = [polys];\n }\n let result = false;\n\n for (let i = 0; i < polys.length; ++i) {\n for (let j = 0; j < polys[i].length; ++j) {\n const polyResult = polygonContainPoint(\n polys[i][j].map((p: number[]) => ({ x: p[0], y: p[1] })),\n point.x,\n point.y\n );\n if (polyResult) {\n result = true;\n return result;\n }\n }\n }\n\n return result;\n}\n\n// https://github.com/Turfjs/turf\nexport function destination(\n point: IPointLike,\n distance: number,\n bearing: number,\n options: {\n units?: Units;\n } = {}\n) {\n const longitude1 = degreeToRadian(point[0]);\n const latitude1 = degreeToRadian(point[1]);\n const bearingRad = degreeToRadian(bearing);\n const radians = lengthToRadians(distance, options.units);\n\n // Main\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 =\n longitude1 +\n Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radianToDegree(longitude2);\n const lat = radianToDegree(latitude2);\n\n return { x: lng, y: lat };\n}\n","import type { Feature } from '@visactor/vutils';\nimport { isPointInPolygon, destination, getAABBFromPoints } from '@visactor/vutils';\nimport type { IRect, IOrientType, IPoint } from '../../typings';\n\ntype IBound = {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n};\nexport interface IPairInfo {\n /** 矩形信息 */\n rect: IRect;\n /** 对应点的画布坐标 */\n point: IPoint;\n /** 对应点的经纬度坐标 */\n pointCoord?: IPoint;\n /** 基于锚点的可放置位置 */\n anchors?: IOrientType[];\n /** 距离锚点的位置偏移量 */\n offset?: number;\n /** 原始顺序 */\n index: number;\n}\n\nfunction overlap(a: T, b: T, sep: number = 0) {\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport function bound(rect: IRect): IBound {\n return {\n x1: rect.x,\n x2: rect.x + rect.width,\n y1: rect.y,\n y2: rect.y + rect.height\n };\n}\n\nfunction toRect(bound: IBound): IRect {\n return {\n x: bound.x1,\n y: bound.y1,\n width: bound.x2 - bound.x1,\n height: bound.y2 - bound.y1\n };\n}\n\n/**\n * 根据可选位置进行躲避布局\n * @param pairs\n * @returns\n */\nexport function layoutByPosition(pairs: IPairInfo[]): IRect[] {\n if (!pairs || pairs.length === 0) {\n return [];\n }\n\n // 只有一个无需布局\n if (pairs.length === 1) {\n return [pairs[0].rect];\n }\n\n const _pairs = pairs.map(pair => {\n return {\n ...pair,\n bound: bound(pair.rect),\n anchorCandidates: candidatesByOrient(pair.anchors ?? [], pair.point!, pair.rect, pair.offset)\n };\n });\n\n const resultBound: IBound[] = [];\n // 默认布局第一个\n resultBound.push(_pairs[0].bound);\n\n for (let i = 1; i <= _pairs.length - 1; i++) {\n const curPair = _pairs[i];\n const curBound = curPair.bound;\n // 遍历检测\n let isOverlap = resultBound.some(r => overlap(r, curBound));\n if (!curPair.anchorCandidates) {\n continue;\n }\n if (isOverlap && curPair.anchorCandidates?.length > 0) {\n for (let j = 0; j < curPair.anchorCandidates.length; j++) {\n const anchor = curPair.anchorCandidates[j];\n const newBound = {\n x1: anchor.x,\n y1: anchor.y,\n x2: anchor.x + curBound.x2 - curBound.x1,\n y2: anchor.y + curBound.y2 - curBound.y1,\n anchor\n };\n if (!resultBound.some(r => overlap(r, newBound))) {\n resultBound.push(newBound);\n isOverlap = false;\n break;\n }\n }\n if (isOverlap) {\n // 所有候选位置都放不下\n resultBound.push(curPair.bound);\n }\n } else {\n resultBound.push(curPair.bound);\n }\n }\n\n return resultBound.map(bound => toRect(bound));\n}\n\nexport function layoutOuter(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算包围圆\n const _points = pairs.map(rect => rect.pointCoord);\n const { x1, x2, y1, y2 } = getAABBFromPoints(_points);\n const geoCenter = [(x1 + x2) / 2, (y1 + y2) / 2];\n const centerPosition = dataToPosition(geoCenter);\n\n if (!centerPosition) {\n return [];\n }\n\n // 2. 遍历每个rect\n // anchor与圆心的交点方向,尝试寻找不在地图区域内部的新锚点\n const result = pairs.map(pair => {\n const rect = pair.rect;\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord!)\n ? pair.point\n : dataToPosition(\n nearestPoint(\n features,\n [pair.pointCoord!.x, pair.pointCoord!.y],\n uniformDegree(lineDegree(pair.point!, centerPosition))\n )\n );\n\n if (targetPoint) {\n rect.x = targetPoint.x;\n rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n\n const degree = uniformDegree(lineDegree(pair.point!, centerPosition));\n\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result);\n}\n\nexport function layoutOuter2(\n pairs: IPairInfo[],\n features: Feature[],\n dataToPosition: (coord: number[]) => IPoint | null\n): IRect[] {\n // 1. 计算几何中心\n let x = 0;\n let y = 0;\n for (let i = 0; i < pairs.length; i++) {\n x += pairs[i].pointCoord.x;\n y += pairs[i].pointCoord.y;\n }\n x /= pairs.length;\n y /= pairs.length;\n const centerPosition = dataToPosition([x, y]);\n if (!centerPosition) {\n return [];\n }\n\n const count = pairs.length;\n\n // 2. 按照圆心角排序\n pairs.sort((a, b) => {\n return lineDegree(centerPosition, a.point) - lineDegree(centerPosition, b.point);\n });\n\n const result = pairs.map((pair, index) => {\n let degree = (360 / count) * index;\n const _degree = lineDegree(centerPosition, pair.point);\n degree = uniformDegree((degree + _degree) / 2);\n const targetPoint = !isPointWithinFeatures(features, pair.pointCoord)\n ? pair.point\n : dataToPosition(nearestPoint(features, [pair.pointCoord.x, pair.pointCoord.y], degree));\n if (targetPoint) {\n pair.rect.x = targetPoint.x;\n pair.rect.y = targetPoint.y;\n }\n // 3. 根据finalAnchor在包围圆上的位置,调整rect的位置\n // 将圆根据圆心角划分为4个区域,对应不同的position\n let position: IOrientType;\n const anchors: IOrientType[] = [];\n if (degree >= -45 && degree < 45) {\n position = 'top';\n anchors.push('left', 'right');\n } else if (degree >= 45 && degree < 135) {\n position = 'right';\n } else if (degree >= -135 && degree < -45) {\n position = 'left';\n anchors.push('left');\n } else {\n position = 'bottom';\n anchors.push('left', 'right');\n }\n\n pair.anchors = anchors;\n pair.offset = 20;\n pair.rect = placeRectByOrient(pair.rect, position, 0);\n return pair;\n });\n\n return layoutByPosition(result.sort((a, b) => a.index - b.index));\n}\n\nfunction uniformDegree(degree: number) {\n return degree > 180 ? degree - 360 : degree;\n}\n\nfunction lineDegree(start: IPoint, end: IPoint) {\n return (Math.atan2(start.y - end.y, start.x - end.x) * 180) / Math.PI + 90;\n}\n\nfunction nearestPoint(features: Feature[], origin: number[], bearing: number, distance = 200) {\n const count = 5621 / distance;\n let curOrigin = origin;\n for (let i = 1; i <= count; i++) {\n const dest = destination(curOrigin as unknown as IPoint, distance, bearing);\n if (!isPointWithinFeatures(features, dest)) {\n return [dest.x, dest.y];\n }\n curOrigin = [dest.x, dest.y];\n }\n return origin;\n}\n\nfunction isPointWithinFeatures(features: Feature[], p: IPoint) {\n for (let i = 0; i < features.length; i++) {\n const inside = isPointInPolygon(p, features[i] as any);\n if (inside) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * 以rect左上角为锚点的,根据position位置调整rect布局。\n * @param rect\n * @param position 在锚点的四周位置,'top' | 'bottom' | 'left' | 'right'\n * @param offset rect与锚点间的距离\n * @returns\n */\nexport function placeRectByOrient(rect: IRect, position: IOrientType, offset: number = 0) {\n const result: IRect = { ...rect };\n if (position === 'top') {\n result.x -= rect.width / 2;\n result.y -= offset + rect.height / 2;\n } else if (position === 'bottom') {\n result.x -= rect.width / 2;\n result.y += offset - rect.height / 2;\n } else if (position === 'left') {\n result.x -= offset + rect.width;\n result.y -= rect.height / 2;\n } else if (position === 'right') {\n result.x += offset;\n result.y -= rect.height / 2;\n }\n return result;\n}\n\nexport function candidatesByOrient(\n positions: IOrientType[],\n anchor: IPoint,\n rect: Pick,\n offset = 0\n) {\n const candidates: IPoint[] = [];\n positions.forEach((p: IOrientType) => {\n const { x, y } = placeRectByOrient({ ...anchor, width: rect.width, height: rect.height }, p, offset);\n candidates.push({ x, y });\n });\n return candidates;\n}\n","import type { IPadding, IRect, IOrientType } from '../../typings/space';\nimport { DataView } from '@visactor/vdataset';\nimport { BaseComponent } from '../base/base-component';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IMapLabelSpec, MapLabelSceneNodeMap } from './interface';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport type { IPoint, Datum } from '../../typings';\nimport type { IPairInfo } from './layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { layoutByPosition, layoutOuter, placeRectByOrient } from './layout';\n\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { normalizeLayoutPaddingSpec } from '../../util/space';\nimport { MarkPoint } from '@visactor/vrender-components';\nimport type { IGraphic, IGroup, INode, IRect as IRectGraphic } from '@visactor/vrender-core';\nimport { createGroup, createRect, createSymbol, createText } from '@visactor/vrender-core';\nimport { transformToGraphic } from '../../util/style';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport type { PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { IModel, IModelSpecInfo } from '../../model/interface';\nimport { Factory } from '../../core/factory';\nimport { TransformLevel } from '../../data/initialize';\nimport { getSpecInfo } from '../util';\n\nexport class MapLabelComponent extends BaseComponent {\n static type = ComponentTypeEnum.mapLabel;\n type = ComponentTypeEnum.mapLabel;\n name: string = ComponentTypeEnum.mapLabel;\n\n static specKey = 'mapLabel';\n specKey = 'mapLabel';\n\n layoutType: 'none' = 'none';\n\n layoutZIndex = LayoutZIndex.MarkPoint;\n\n protected nameField: string;\n protected valueField?: string;\n\n protected _series: ICartesianSeries | IGeoSeries;\n protected _map: any[];\n protected _longitudeField: string;\n protected _latitudeField: string;\n\n protected _markerComponents: MarkPoint[];\n\n private _activeDatum: Datum[] = [];\n\n static getSpecInfo(chartSpec: any): Maybe {\n return getSpecInfo(chartSpec, this.specKey, this.type, (s: IMapLabelSpec) => {\n return s.visible && isValid(s.seriesId);\n });\n }\n\n setAttrFromSpec(): void {\n this.nameField = this._spec.nameField ?? this._series?.getDimensionField()[0];\n this.valueField = this._spec.valueField ?? this._series?.getMeasureField()[0];\n }\n\n created() {\n super.created();\n if (!!this._spec.visible === false) {\n return;\n }\n this.initRelatedInfo();\n this.initData();\n this.initEvent();\n }\n\n initRelatedInfo(): void {\n this._series = this._option.getSeriesInUserIdOrIndex([this._spec.seriesId])[0] as ICartesianSeries;\n if (this._spec.position === 'outer') {\n // 需要获取region上的地理坐标系\n this._map = (this._regions[0].getSeriesInType('map')[0] as IGeoSeries)?.getMapViewData()?.latestData;\n\n this._longitudeField = this._regions[0].getSpec?.()?.longitudeField;\n this._latitudeField = this._regions[0].getSpec?.()?.latitudeField;\n }\n }\n\n initData() {\n const series = this._series;\n if (!series) {\n return;\n }\n const seriesData = series.getViewData();\n if (seriesData) {\n const data = new DataView(this._option.dataSet, { name: `${this.name}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({ type: 'copyDataView', level: TransformLevel.copyDataView }, false);\n\n this._data = new CompilableData(this._option, data);\n data.target.addListener('change', () => {\n if (this._spec.trigger !== 'hover' && this._spec.trigger !== 'click') {\n this._activeDatum = this._data.getLatestData();\n }\n });\n }\n }\n\n initEvent() {\n this.event.on('zoom', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handleZoom(e as unknown as ZoomEventParam);\n return true;\n });\n\n this.event.on('panmove', { filter: params => this._isRelativeModel(params.model) }, e => {\n this.handlePan(e as unknown as PanEventParam);\n return true;\n });\n\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n const view = this.getCompiler()?.getVGrammarView();\n\n if (!view) {\n return;\n }\n\n if (trigger === 'hover') {\n view.addEventListener('element-highlight:start', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('element-highlight:reset', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(null);\n }\n });\n } else if (trigger === 'click') {\n view.addEventListener('element-select:start', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum(params.elements[0].getDatum());\n }\n });\n view.addEventListener('elementSelectReset', (params: any) => {\n if (this._isRelativeSeries(params.options.seriesId)) {\n this._updateDatum([]);\n }\n });\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n this._markerComponents.forEach(marker => {\n marker.translate(delta[0], delta[1]);\n });\n }\n\n handleZoom(e: ZoomEventParam) {\n this._updateMarkerLayoutAttribute();\n }\n\n private _updateDatum(datum: Datum[]) {\n this._activeDatum = datum;\n this._markerComponents.forEach((marker, index) => {\n const markerDatum = this._data?.getLatestData()[index];\n if (this._activeDatum.includes(markerDatum)) {\n marker.setAttribute('visible', true);\n } else {\n marker.setAttribute('visible', false);\n }\n });\n }\n\n dataToPosition(datum: any) {\n return this._series.dataToPosition(datum);\n }\n\n updateLayoutAttribute() {\n const markData = this._data?.getLatestData();\n if (!markData || markData.length === 0) {\n return;\n }\n super.updateLayoutAttribute();\n this._updateMarkerLayoutAttribute();\n }\n\n protected _updateMarkerLayoutAttribute() {\n const layoutPairInfo: IPairInfo[] = [];\n const markerMarks: MapLabelSceneNodeMap[] = [];\n if (!this._markerComponents) {\n this._markerComponents = this._data?.getLatestData().map((data: Datum, index: number) => {\n const cmp = new MarkPoint({\n position: undefined,\n animation: false // 地图标签使用的是markPoint, 暂不开启动画, 待优化@chensiji\n });\n if (cmp) {\n cmp.name = `${this.name}_marker_${index}`;\n cmp.id = this._spec.id ?? `${this.name}_marker_${this.id}`;\n cmp.setAttribute('zIndex', this.layoutZIndex);\n }\n return cmp;\n });\n }\n\n const markerComponents = this._markerComponents;\n markerComponents.forEach((marker, index) => {\n marker.removeAllChild();\n const { pairInfo, contentMarks } = this._evaluateMarker(this._data.getLatestData()[index], index);\n pairInfo && layoutPairInfo.push(pairInfo);\n contentMarks && markerMarks.push(contentMarks);\n });\n\n const positionedRects = this._layoutLabels(layoutPairInfo);\n this._layoutMarkers(positionedRects, markerMarks);\n this._renderMarkers();\n }\n\n protected _evaluateMarker(data: Datum, index: number) {\n let contentItemCount = 0;\n let paddingWidth = 0;\n let paddingHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n\n const position = this._spec.position || 'top';\n const offset = this._spec.offset;\n\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n paddingWidth += (padding?.left || 0) + (padding?.right || 0);\n paddingHeight += (padding?.top || 0) + (padding?.bottom || 0);\n\n const contentMarks: MapLabelSceneNodeMap = {};\n const positionAttr = this.dataToPosition(data);\n\n const container = createGroup({});\n container.name = `${this.name}_marker_itemContainer_${index}`;\n contentMarks.container = container;\n\n if (this._spec.background?.visible) {\n const labelBackground = createRect(transformToGraphic({ ...this._spec.background.style }));\n labelBackground.setAttributes(positionAttr);\n contentMarks.labelBackground = labelBackground;\n container.appendChild(labelBackground);\n }\n\n if (this._spec.icon?.visible) {\n const icon = createSymbol(transformToGraphic({ ...this._spec.icon.style }));\n icon.setAttributes(positionAttr);\n icon.setAttribute('symbolType', this._spec.icon.style?.shape);\n const iconBound = icon.AABBBounds;\n const iconHeight = iconBound?.y2 - iconBound?.y1 ?? 0;\n const iconWidth = iconBound?.x2 - iconBound?.x1 ?? 0;\n contentMarks.icon = icon;\n container.appendChild(icon);\n\n contentHeight = iconHeight;\n contentWidth += iconWidth;\n contentItemCount++;\n }\n\n if (this._spec.nameLabel?.visible) {\n const nameLabel = createText(transformToGraphic({ ...this._spec.nameLabel.style }));\n nameLabel.setAttributes(positionAttr);\n nameLabel.setAttribute('text', data[this.nameField]);\n const nameLabelBound = nameLabel.AABBBounds;\n const nameLabelHeight = nameLabelBound?.y2 - nameLabelBound?.y1 ?? 0;\n const nameLabelWidth = nameLabelBound?.x2 - nameLabelBound?.x1 ?? 0;\n contentMarks.nameLabel = nameLabel;\n container.appendChild(nameLabel);\n\n contentHeight = Math.max(contentHeight, nameLabelHeight);\n contentWidth += nameLabelWidth;\n contentItemCount++;\n }\n\n if (this._spec.valueLabel?.visible && isValid(data[this.valueField])) {\n const valueLabel = createText(transformToGraphic({ ...this._spec.valueLabel.style }));\n valueLabel.setAttributes(positionAttr);\n valueLabel.setAttribute('text', data[this.valueField]);\n const valueLabelBound = valueLabel.AABBBounds;\n const valueLabelHeight = valueLabelBound?.y2 - valueLabelBound?.y1 ?? 0;\n const valueLabelWidth = valueLabelBound?.x2 - valueLabelBound?.x1 ?? 0;\n contentMarks.valueLabel = valueLabel;\n container.appendChild(valueLabel);\n\n contentHeight = Math.max(contentHeight, valueLabelHeight);\n contentWidth += valueLabelWidth;\n contentItemCount++;\n }\n\n const firstValidMark = Object.values(contentMarks).find(m => !!m && m.type !== 'group');\n\n const anchor: IPoint = {\n x: firstValidMark?.getComputedAttribute('x'),\n y: firstValidMark?.getComputedAttribute('y')\n };\n const itemRect = {\n x: anchor.x,\n y: anchor.y,\n width: 0,\n height: 0\n };\n\n itemRect.width = paddingWidth + contentWidth + (contentItemCount - 1) * space;\n itemRect.height = paddingHeight + contentHeight;\n\n const pairInfo: IPairInfo = {\n rect: itemRect,\n point: anchor,\n index\n };\n // 计算得到最终所有元素包围盒的布局位置\n if (position !== 'outer') {\n const anchors = ['top', 'right', 'left', 'bottom'].filter(a => a !== position);\n pairInfo.rect = placeRectByOrient(itemRect, position, offset);\n pairInfo.anchors = anchors as IOrientType[];\n pairInfo.offset = offset;\n } else {\n pairInfo.pointCoord = {\n x: +data?.[this._longitudeField],\n y: +data?.[this._latitudeField]\n };\n }\n return { pairInfo, contentMarks };\n }\n\n protected _layoutMarkers(positionedRects: IRect[], contentMarks: MapLabelSceneNodeMap[]) {\n for (let i = 0; i < contentMarks.length; i++) {\n if (!positionedRects[i] || !contentMarks[i]) {\n return;\n }\n const { icon, nameLabel, valueLabel, labelBackground, container } = contentMarks[i];\n\n const itemRect = positionedRects[i];\n const padding = normalizeLayoutPaddingSpec(this._spec.background?.padding) as IPadding;\n const space = this._spec.space || 0;\n\n const curY = itemRect.height / 2;\n let curX = padding?.left || 0;\n [icon, nameLabel, valueLabel].forEach((item, index) => {\n if (item) {\n const bounds = item.AABBBounds;\n let offset = 0;\n if (item.type === 'symbol') {\n // 文字的锚点在文字左侧,baseline在中心\n // symbol的锚点[0,0]在图形中心。所以x方向要偏移半个bound。\n offset += (bounds.x2 - bounds.x1 ?? 0) / 2;\n }\n item.setAttributes({\n x: curX + offset,\n y: curY\n });\n\n curX += bounds.x2 - bounds.x1 ?? 0;\n if (index !== 2) {\n curX += space;\n }\n }\n });\n (labelBackground as IRectGraphic)?.setAttributes({\n x: 0,\n y: 0,\n width: itemRect.width,\n height: itemRect.height\n });\n container?.setAttributes({\n dx: -itemRect.width / 2,\n dy: -itemRect.height / 2\n });\n const datum = this._data.getLatestData()[i];\n const anchor = this.dataToPosition(datum);\n const regionPos = this.getRegions()[0].getLayoutStartPoint();\n const showLeader = !!(this._spec.leader?.visible && (icon || nameLabel || valueLabel));\n this._markerComponents[i].setAttributes({\n x: regionPos.x,\n y: regionPos.y,\n position: anchor,\n visible: this._activeDatum.includes(datum),\n itemContent: {\n refX: 0,\n type: 'custom',\n renderCustomCallback: () => container as unknown as IGroup,\n autoRotate: false,\n offsetX: itemRect.x + itemRect.width / 2 - anchor.x,\n offsetY: itemRect.y + itemRect.height / 2 - anchor.y\n },\n itemLine: {\n visible: showLeader,\n type: 'type-po',\n lineStyle: transformToGraphic({ ...this._spec.leader?.style }),\n startSymbol: { visible: false }\n }\n });\n }\n }\n\n protected _renderMarkers() {\n if (!this._markerComponents || !this._markerComponents.length) {\n return;\n }\n\n for (let i = 0; i < this._markerComponents.length; i++) {\n this.getContainer().add(this._markerComponents[i] as unknown as INode);\n }\n }\n\n protected _layoutLabels(rects: IPairInfo[]) {\n const result =\n this._spec.position === 'outer' && this._map\n ? layoutOuter(rects, this._map, (coord: number[]) =>\n this._series.dataToPosition({\n [this._longitudeField]: coord[0],\n [this._latitudeField]: coord[1]\n })\n )\n : layoutByPosition(rects);\n\n return result;\n }\n\n private _isRelativeModel(model: IModel) {\n const id =\n (this._series as ICartesianSeries).getXAxisHelper()?.getAxisId() ??\n (this._series as IGeoSeries).getCoordinateHelper()?.getCoordinateId();\n return model?.id === id;\n }\n\n private _isRelativeSeries(model: IModel) {\n return model?.id === this._series.id;\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n changeRegions(/** regions: IRegion[] */): void {\n // do nothing\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return this._markerComponents as unknown as IGroup[];\n }\n}\n\nexport const registerMapLabel = () => {\n Factory.registerComponent(MapLabelComponent.type, MapLabelComponent);\n};\n","import type { utilFunctionCtx } from '../../typings/params';\nimport type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, IGridLayoutSpec, ElementSpec, ILayoutItem } from '../interface';\nimport { isFunction, isValid, isValidNumber } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport { Factory } from '../../core/factory';\n\ntype GridSize = {\n value: number;\n isUserSetting: boolean;\n isLayoutSetting: boolean;\n};\n\nexport class GridLayout implements IBaseLayout {\n static type = 'grid';\n private _chartLayoutRect: IRect = { x: 0, y: 0, width: 1, height: 1 };\n private _chartViewBox: IBoundsLike;\n\n protected _col: number = 1;\n protected _row: number = 1;\n protected _colSize: GridSize[];\n protected _rowSize: GridSize[];\n\n protected _colElements: ILayoutItem[][];\n protected _rowElements: ILayoutItem[][];\n\n protected _gridInfo: IGridLayoutSpec;\n\n protected _elementMap: Map = new Map();\n\n protected _onError: (...args: any[]) => void;\n\n constructor(gridInfo: IGridLayoutSpec, ctx: utilFunctionCtx) {\n this.standardizationSpec(gridInfo);\n this._gridInfo = gridInfo;\n this._col = gridInfo.col;\n this._row = gridInfo.row;\n this._colSize = new Array(this._col).fill(null);\n this._rowSize = new Array(this._row).fill(null);\n this._colElements = new Array(this._col).fill([]);\n this._rowElements = new Array(this._row).fill([]);\n this._onError = ctx?.onError;\n\n this.initUserSetting();\n }\n\n protected standardizationSpec(gridInfo: IGridLayoutSpec) {\n gridInfo.col = gridInfo.col ?? 1;\n gridInfo.row = gridInfo.row ?? 1;\n gridInfo.elements = gridInfo.elements ?? [];\n }\n\n protected initUserSetting() {\n // 先对用户设置的宽高进行设置\n this._gridInfo.colWidth &&\n this.setSizeFromUserSetting(this._gridInfo.colWidth, this._colSize, this._col, this._chartLayoutRect.width);\n\n this._gridInfo.rowHeight &&\n this.setSizeFromUserSetting(this._gridInfo.rowHeight, this._rowSize, this._row, this._chartLayoutRect.height);\n // 其余位置默认填充0\n this._colSize.forEach((c, i) => {\n if (!c) {\n this._colSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n this._rowSize.forEach((r, i) => {\n if (!r) {\n this._rowSize[i] = {\n value: 0,\n isUserSetting: false,\n isLayoutSetting: false\n };\n }\n });\n }\n\n /**\n * 设置用户设置的 colWidth 和 rowHeight\n */\n protected setSizeFromUserSetting(\n userSetting: {\n index: number;\n size: number | ((maxSize: number) => number);\n }[],\n gridSize: GridSize[],\n gridMax: number,\n maxSize: number\n ) {\n userSetting.forEach(userSet => {\n if (userSet.index < 0 && userSet.index >= gridMax) {\n return;\n }\n if (isValidNumber(userSet.size)) {\n gridSize[userSet.index] = {\n value: +userSet.size,\n isUserSetting: true,\n isLayoutSetting: false\n };\n } else if (isFunction(userSet.size)) {\n gridSize[userSet.index] = {\n value: userSet.size(maxSize),\n isUserSetting: true,\n isLayoutSetting: false\n };\n }\n });\n }\n\n protected clearLayoutSize() {\n // 其余位置默认填充0\n this._colSize.forEach(c => {\n c.isLayoutSetting = false;\n if (!c.isUserSetting) {\n c.value = 0;\n }\n });\n this._rowSize.forEach(r => {\n r.isLayoutSetting = false;\n if (!r.isUserSetting) {\n r.value = 0;\n }\n });\n }\n\n protected getItemGridInfo(item: ILayoutItem): ElementSpec {\n // map 中寻找\n const mapResult = this._elementMap.get(item);\n if (mapResult) {\n return mapResult;\n }\n // 配置中匹配\n let result: ElementSpec | undefined;\n result = this._gridInfo.elements?.find(e => {\n if ('modelId' in e && isValid(e.modelId)) {\n if (isValid(item.model.userId) && item.model.userId === e.modelId) {\n return true;\n }\n } else if ('modelKey' in e && isValid(e.modelKey) && 'modelIndex' in e && isValid(e.modelIndex)) {\n const specKey = item.model.specKey ?? item.model.type;\n if (specKey === e.modelKey && item.model.getSpecIndex() === e.modelIndex) {\n return true;\n }\n }\n return false;\n });\n // default\n if (!result) {\n result = {\n col: 0,\n colSpan: 1,\n row: 0,\n rowSpan: 1\n } as ElementSpec;\n }\n this._elementMap.set(item, result);\n return result;\n }\n\n protected getSizeFromGrid(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected getSizeFromUser(spec: ElementSpec, type: 'col' | 'row'): number | undefined {\n const sizeList = type === 'col' ? this._colSize : this._rowSize;\n if (!sizeList[spec[type]]?.isUserSetting) {\n return undefined;\n }\n let result = 0;\n for (let index = spec[type]; index < spec[type] + (spec[`${type}Span`] ?? 1); index++) {\n if (!sizeList[index].isUserSetting) {\n return undefined;\n }\n result += sizeList[index].value;\n }\n return result;\n }\n\n protected setItemLayoutSizeToGrid(item: ILayoutItem, gridSpec: ElementSpec) {\n if (isColItem(item)) {\n if (gridSpec.colSpan && gridSpec.colSpan > 1) {\n return;\n }\n if (this._colSize[gridSpec.col].isUserSetting) {\n return;\n }\n this._colSize[gridSpec.col].value = Math.max(\n this._colSize[gridSpec.col].value,\n item.getLayoutRect().width + item.layoutPaddingLeft + item.layoutPaddingRight\n );\n this._colSize[gridSpec.col].isLayoutSetting = true;\n } else {\n if (gridSpec.rowSpan && gridSpec.rowSpan > 1) {\n return;\n }\n if (this._rowSize[gridSpec.row].isUserSetting) {\n return;\n }\n this._rowSize[gridSpec.row].value = Math.max(\n this._rowSize[gridSpec.row].value,\n item.getLayoutRect().height + item.layoutPaddingTop + item.layoutPaddingBottom\n );\n this._rowSize[gridSpec.row].isLayoutSetting = true;\n }\n }\n\n protected layoutGrid(type: 'col' | 'row') {\n const gridSize = type === 'col' ? this._colSize : this._rowSize;\n let unSetSize = type === 'col' ? this._chartLayoutRect.width : this._chartLayoutRect.height;\n const willSize: GridSize[] = [];\n gridSize.forEach(s => {\n if (s.isUserSetting || s.isLayoutSetting) {\n unSetSize -= s.value;\n } else {\n willSize.push(s);\n }\n });\n if (unSetSize < 0) {\n console.warn(`layout content ${type} size bigger than chart`);\n }\n willSize.forEach(s => (s.value = unSetSize / willSize.length));\n }\n\n protected getItemPosition(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n const point = { x: this._chartLayoutRect.x, y: this._chartLayoutRect.y };\n for (let col = 0; col < gridSpec.col; col++) {\n point.x += this._colSize[col].value;\n }\n for (let row = 0; row < gridSpec.row; row++) {\n point.y += this._rowSize[row].value;\n }\n point.x += item.layoutPaddingLeft + item.layoutOffsetX;\n point.y += item.layoutPaddingTop + item.layoutOffsetY;\n return point;\n }\n\n protected getItemLayoutRect(item: ILayoutItem) {\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const rect = {\n width:\n (this.getSizeFromGrid(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (this.getSizeFromGrid(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n return rect;\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n // 先清空旧布局信息\n this.clearLayoutSize();\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n\n // 剔除 region 后,其余元素先布局运算\n const normalItems = items.filter(item => item.layoutType === 'normal' && item.getModelVisible() !== false);\n const normalItemsCol = normalItems.filter(item => isColItem(item));\n const normalItemsRow = normalItems.filter(item => !isColItem(item));\n normalItems.forEach(item => {\n this.layoutOneItem(item, 'user', false);\n });\n\n // region 和 region 关联元素\n const regionsRelative = items.filter(x => x.layoutType === 'region-relative');\n const regionsRelativeCol = regionsRelative.filter(item => isColItem(item));\n const regionsRelativeRow = regionsRelative.filter(item => !isColItem(item));\n // 先进行 col 方向布局\n regionsRelativeCol.forEach(item => this.layoutOneItem(item, 'user', false));\n // 然后得到最终 col 信息 此时已经是最终 col 信息\n this.layoutGrid('col');\n // 再使用宽度信息辅助row方向排序\n // 此时普通占位元素,会因为布局宽度影响最终布局高度\n normalItemsRow.forEach(item => this.layoutOneItem(item, 'colGrid', false));\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'colGrid', false);\n });\n // 然后得到最终 row 信息\n this.layoutGrid('row');\n // 统一水平方向元素高度\n regionsRelativeRow.forEach(item => {\n this.layoutOneItem(item, 'grid', false);\n });\n // 再使用宽度信息,第二次次对 col 方向布局\n normalItemsCol.forEach(item => this.layoutOneItem(item, 'grid', false));\n regionsRelativeCol.forEach(item => {\n // 此时从布局逻辑可知,item的layoutRect会发生,将item的layoutTag设置为true\n this.layoutOneItem(item, 'grid', true);\n });\n this.layoutGrid('col');\n\n // region\n items.filter(x => x.layoutType === 'region').forEach(item => this.layoutOneItem(item, 'grid', false));\n\n // 再找出 absolute 元素,无需排序,在 compiler 层需要排序放置\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n\n // 最后基于grid 设置位置\n items\n .filter(x => x.layoutType !== 'absolute')\n .forEach(item => {\n item.setLayoutStartPosition(this.getItemPosition(item));\n });\n }\n\n /**\n *\n * 无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n\n private layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n });\n }\n\n protected layoutOneItem(item: ILayoutItem, sizeType: 'user' | 'grid' | 'colGrid' | 'rowGrid', ignoreTag: boolean) {\n const sizeCallRow =\n sizeType === 'rowGrid' || sizeType === 'grid' ? this.getSizeFromGrid.bind(this) : this.getSizeFromUser.bind(this);\n const sizeCallCol =\n sizeType === 'colGrid' || sizeType === 'grid' ? this.getSizeFromGrid.bind(this) : this.getSizeFromUser.bind(this);\n // 先获取 item 的 grid 信息\n const gridSpec = this.getItemGridInfo(item);\n // 先设置空间\n const computeRect = {\n width:\n (sizeCallCol(gridSpec, 'col') ?? this._chartLayoutRect.width) -\n item.layoutPaddingLeft -\n item.layoutPaddingRight,\n height:\n (sizeCallRow(gridSpec, 'row') ?? this._chartLayoutRect.height) -\n item.layoutPaddingTop -\n item.layoutPaddingBottom\n };\n const rect = item.computeBoundsInRect(computeRect);\n if (!isValidNumber(rect.width)) {\n rect.width = computeRect.width;\n }\n if (!isValidNumber(rect.height)) {\n rect.height = computeRect.height;\n }\n item.setLayoutRect(sizeType !== 'grid' ? rect : computeRect);\n // 设置大小到grid\n this.setItemLayoutSizeToGrid(item, gridSpec);\n }\n}\n\nfunction isColItem(item: ILayoutItem) {\n return item.layoutOrient === 'left' || item.layoutOrient === 'right';\n}\n\nexport const registerGridLayout = () => {\n Factory.registerLayout(GridLayout.type, GridLayout);\n};\n","import type { IChart } from '../../chart/interface/chart';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IRect } from '../../typings/space';\nimport type { IBaseLayout, ILayoutItem } from '../interface';\nimport type { IOffset, LayoutSideType } from '../base-layout';\nimport { Layout } from '../base-layout';\nimport { isXAxis, isYAxis } from '../../component/axis/cartesian/util/common';\nimport { Factory } from '../../core/factory';\nimport type { IAxis } from '../../component/axis';\n\nexport class Layout3d extends Layout implements IBaseLayout {\n static type = 'layout3d';\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items);\n\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n // 计算3d轴\n const absoluteItem = items.filter(x => x.layoutType === 'absolute');\n const zItems = absoluteItem.filter(i => {\n return i.layoutOrient === 'z';\n });\n\n // 计算z的宽高,让出一部分位置\n let extraWH = { width: 0, height: 0 };\n if (zItems.length) {\n const layoutRect = zItems[0].getLayoutRect();\n extraWH = layoutRect;\n }\n this.leftCurrent += extraWH.width / 8;\n this.rightCurrent -= extraWH.width / 8;\n this.topCurrent += extraWH.height / 8;\n this.bottomCurrent -= extraWH.height / 8;\n\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems);\n\n // 缩进\n this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp);\n\n // z轴以外的绝对定位\n const absoluteItemExceptZAxis = absoluteItem.filter(i => i.layoutOrient !== 'z');\n this.layoutAbsoluteItems(absoluteItemExceptZAxis);\n\n // 找到x轴\n const xAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isXAxis(item.layoutOrient);\n })[0];\n const yAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isYAxis(item.layoutOrient);\n })[0];\n if (xAxis && zItems.length) {\n const sp = xAxis.getLayoutStartPoint();\n const lr = xAxis.getLayoutRect();\n const zRect = {\n x: yAxis.layoutOrient === 'left' ? sp.x + lr.width : sp.x,\n y: sp.y,\n width: this._chartLayoutRect.width,\n height: this._chartLayoutRect.height\n };\n (zItems[0].model as IAxis).directionStr = yAxis.layoutOrient === 'left' ? 'r2l' : 'l2r';\n // 将长宽高信息传给所有的轴\n const xRect = xAxis.getLayoutRect();\n const yRect = yAxis.getLayoutRect();\n // const zRect = zItems[0].getLayoutRect();\n const box3d = {\n length: zItems[0].getLayoutRect().width,\n width: xRect.width,\n height: yRect.height\n };\n\n (xAxis.model).setLayout3dBox && (xAxis.model).setLayout3dBox(box3d);\n (yAxis.model).setLayout3dBox && (yAxis.model).setLayout3dBox(box3d);\n (zItems[0].model).setLayout3dBox && (zItems[0].model).setLayout3dBox(box3d);\n\n this.layoutZAxisItems(zItems, zRect);\n }\n }\n\n /**\n * 对z轴进行布局\n * @param zItems\n */\n protected layoutZAxisItems(zItems: ILayoutItem[], zRect: IRect) {\n zItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(zRect);\n });\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem, extraOffset?: IOffset) {\n if (!extraOffset) {\n extraOffset = { offsetLeft: 0, offsetRight: 0, offsetTop: 0, offsetBottom: 0 };\n }\n const result = {\n width:\n this.rightCurrent -\n this.leftCurrent -\n item.layoutPaddingLeft -\n item.layoutPaddingRight -\n (extraOffset.offsetLeft + extraOffset.offsetRight),\n height:\n this.bottomCurrent -\n this.topCurrent -\n item.layoutPaddingTop -\n item.layoutPaddingBottom -\n (extraOffset.offsetTop + extraOffset.offsetBottom)\n };\n return result;\n }\n\n protected _checkAutoIndent(items: ILayoutItem[]) {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n const rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent;\n const bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const outer = i.getLastComputeOutBounds();\n if (vOrH) {\n result.top = Math.max(result.top, outer.y1 - this.topCurrent);\n result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent);\n } else {\n result.left = Math.max(result.left, outer.x1 - this.leftCurrent);\n result.right = Math.max(result.right, outer.x2 - rightCurrent);\n }\n });\n return result;\n }\n}\n\nexport const registerLayout3d = () => {\n Factory.registerLayout(Layout3d.type, Layout3d);\n};\n","/**\n * @description PopTip组件\n */\nimport {\n InputText,\n type IGraphic,\n type IGroup,\n type IRect,\n type ISymbol,\n type ISymbolGraphicAttribute,\n type IText,\n type ITextGraphicAttribute,\n type TextAlignType,\n type TextBaselineType\n} from '@visactor/vrender-core';\nimport {\n AABBBounds,\n Bounds,\n getRectIntersect,\n isArray,\n isBoolean,\n isEmpty,\n isValid,\n max,\n merge,\n normalizePadding,\n pi,\n rectInsideAnotherRect\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { PopTipAttributes } from './type';\nimport { loadPoptipComponent } from './register';\n\nconst _tBounds = new AABBBounds();\n\nloadPoptipComponent();\n\nconst tlStr = 'M -0.5 -0.5, L -0.5 0.5, L 0.5 -0.5, Z';\nconst blStr = 'M -0.5 -0.5, L -0.5 0.5, L 0.5 0.5, Z';\nconst trStr = 'M -0.5 -0.5, L 0.5 -0.5, L 0.5 0.5, Z';\nconst brStr = 'M 0.5 -0.5, L 0.5 0.5, L -0.5 0.5, Z';\n\nconst conciseSymbolMap = {\n tl: tlStr,\n tr: trStr,\n bl: blStr,\n br: brStr,\n lt: tlStr,\n lb: blStr,\n rt: trStr,\n rb: brStr\n};\nexport class PopTip extends AbstractComponent> {\n name = 'poptip';\n\n static defaultAttributes: Partial = {\n position: 'rt',\n visible: true,\n title: null,\n content: null,\n titleStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n contentStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n panel: {} as any,\n maxWidthPercent: 0.8,\n space: 8,\n padding: 10\n };\n\n titleShape?: IText;\n contentShape?: IText;\n group?: IGroup;\n\n constructor(attributes: PopTipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTip.defaultAttributes, attributes));\n }\n\n protected render() {\n const {\n titleStyle = {} as ITextGraphicAttribute,\n position,\n contentStyle = {} as ITextGraphicAttribute,\n panel,\n logoSymbol,\n logoText,\n logoTextStyle = {} as ITextGraphicAttribute,\n triangleMode = 'default',\n space = 4,\n minWidth = 0,\n maxWidth = Infinity,\n padding = 4,\n maxWidthPercent,\n visible,\n state,\n dx = 0,\n dy = 0\n } = this.attribute as PopTipAttributes;\n\n let { title = '', content = '' } = this.attribute as PopTipAttributes;\n\n title = this.attribute.titleFormatMethod ? this.attribute.titleFormatMethod(title) : title;\n content = this.attribute.contentFormatMethod ? this.attribute.contentFormatMethod(content) : content;\n\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('poptip-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n this.group = group;\n\n const maxLineWidth = maxWidth - parsedPadding[1] - parsedPadding[3];\n\n const titleVisible = isValid(title) && visible !== false;\n const titleAttrs = {\n text: isArray(title) ? title : ([title] as any),\n visible: titleVisible,\n wrap: true,\n ...titleStyle,\n x: parsedPadding[3],\n y: parsedPadding[0],\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const titleShape = group.createOrUpdateChild('poptip-title', titleAttrs, 'text') as IText;\n if (!isEmpty(state?.title)) {\n titleShape.states = state.title;\n }\n\n const titleBounds = titleShape.AABBBounds;\n const titleHeight = titleBounds.height();\n const titleWidth = titleBounds.width();\n let height = titleHeight + space;\n if (!titleVisible) {\n height = 0;\n }\n\n const contentVisible = isValid(content) && visible !== false;\n const contentAttrs = {\n text: isArray(content) ? content : ([content] as any),\n visible: contentVisible,\n wrap: true,\n ...contentStyle,\n x: parsedPadding[3],\n y: parsedPadding[0] + height,\n maxLineWidth,\n textAlign: 'left' as TextAlignType,\n textBaseline: 'top' as TextBaselineType\n };\n\n const contentShape = group.createOrUpdateChild('poptip-content', contentAttrs, 'text') as IText;\n if (!isEmpty(state?.content)) {\n contentShape.states = state.content;\n }\n\n const contentBounds = contentShape.AABBBounds;\n const contentHeight = contentBounds.height();\n const contentWidth = contentBounds.width();\n\n if (contentVisible) {\n height += contentHeight;\n }\n\n this.titleShape = titleShape;\n this.contentShape = contentShape;\n\n // 计算整个popTip的宽高\n let popTipWidth = max(\n titleWidth + parsedPadding[1] + parsedPadding[3],\n contentWidth + parsedPadding[1] + parsedPadding[3]\n );\n if (popTipWidth > maxWidth) {\n popTipWidth = maxWidth;\n } else if (popTipWidth < minWidth) {\n popTipWidth = minWidth;\n }\n let poptipHeight = parsedPadding[0] + parsedPadding[2] + height;\n\n // 绘制背景层\n const { visible: bgVisible, square, ...backgroundStyle } = panel;\n // 如果是正方形,取宽高的最大值,同时文字也需要居中\n if (square) {\n const maxWH = max(popTipWidth, poptipHeight);\n popTipWidth = maxWH;\n const deltaH = maxWH - poptipHeight;\n poptipHeight = maxWH;\n titleShape.setAttributes({ dy: deltaH / 2 });\n contentShape.setAttributes({ dy: deltaH / 2 });\n }\n const symbolSize = backgroundStyle.size ?? 12;\n const spaceSize: number | [number, number] = isArray(symbolSize)\n ? [symbolSize[0] + (backgroundStyle.space ?? 0), symbolSize[1] + (backgroundStyle.space ?? 0)]\n : (symbolSize as number) + (backgroundStyle.space ?? 0);\n const lineWidth = backgroundStyle.lineWidth ?? 1;\n const range: [number, number] | undefined = (this as any).stage\n ? [\n (this as any).stage.viewWidth ?? (this as any).stage.width,\n (this as any).stage.viewHeight ?? (this as any).stage.height\n ]\n : undefined;\n\n if (range) {\n // 尝试进行换行\n const b = (this as any).AABBBounds;\n const leftWidth = this.attribute.x ?? b.x1;\n const rightWidth = range[0] - b.x1;\n let maxSpace = Math.max(leftWidth, rightWidth);\n // 减一些buffer,buffer不能超过maxSpace的20%\n const buf = (isArray(symbolSize) ? symbolSize[0] : 12) + 3;\n maxSpace = Math.min(maxSpace - buf, maxSpace * maxWidthPercent);\n // 需要进行换行\n if (maxSpace < popTipWidth) {\n popTipWidth = maxSpace;\n const buf = parsedPadding[1] + parsedPadding[3];\n titleShape.setAttribute('maxLineWidth', maxSpace - buf);\n contentShape.setAttribute('maxLineWidth', maxSpace - buf);\n poptipHeight = parsedPadding[0] + parsedPadding[2];\n if (titleVisible) {\n poptipHeight += titleShape.AABBBounds.height() + space;\n }\n poptipHeight += contentShape.AABBBounds.height();\n }\n }\n\n const layout = position === 'auto';\n // 最多循环this.positionList次\n let maxBBoxI: number;\n let maxBBoxSize: number = -Infinity;\n\n for (let i = 0; i < this.positionList.length + 1; i++) {\n const p = layout ? this.positionList[i === this.positionList.length ? maxBBoxI : i] : position;\n let symbolType = 'arrow2Left';\n let offsetX = (isArray(symbolSize) ? symbolSize[0] : symbolSize) / 4;\n let offsetY = 0;\n if (p === 'top' || p === 'bottom' || p === 'left' || p === 'right') {\n symbolType = 'arrow2Left';\n } else if (triangleMode === 'concise') {\n symbolType = (conciseSymbolMap as any)[p];\n offsetX = ['tl', 'bl', 'rt', 'rb'].includes(position)\n ? (isArray(symbolSize) ? symbolSize[0] : symbolSize) / 2\n : -(isArray(symbolSize) ? symbolSize[0] : symbolSize) / 2;\n offsetY = ['tl', 'tr', 'lb', 'rb'].includes(position)\n ? -(isArray(symbolSize) ? symbolSize[1] : symbolSize) / 2\n : (isArray(symbolSize) ? symbolSize[1] : symbolSize) / 2;\n }\n\n const { angle, offset } = this.getAngleAndOffset(\n p,\n popTipWidth,\n poptipHeight,\n isArray(spaceSize) ? (spaceSize as [number, number]) : [spaceSize, spaceSize - lineWidth],\n symbolType\n );\n if (isBoolean(bgVisible)) {\n const bgSymbol = group.createOrUpdateChild(\n 'poptip-symbol-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: offsetX,\n y: offsetY,\n strokeBoundsBuffer: -1,\n boundsPadding: -2,\n anchor: [0, 0],\n symbolType,\n angle: angle,\n dx: offset[0],\n // 标签和背景同时移动\n dy: offset[1] - (backgroundStyle.space ?? 0),\n size: symbolSize,\n zIndex: 9\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.panel)) {\n bgSymbol.states = state.panel;\n }\n\n let bgRect: IGraphic;\n if (panel.panelSymbolType) {\n bgRect = group.createOrUpdateChild(\n 'poptip-rect-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: 0,\n y: 0,\n symbolType: 'rect',\n size: [popTipWidth, poptipHeight],\n zIndex: -8\n },\n 'symbol'\n ) as ISymbol;\n } else {\n bgRect = group.createOrUpdateChild(\n 'poptip-rect-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && (contentVisible || titleVisible),\n x: 0,\n y: 0,\n width: popTipWidth,\n height: poptipHeight,\n zIndex: -8\n },\n 'rect'\n ) as IRect;\n }\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n }\n\n group.setAttributes({\n x: -offset[0] + dx,\n y: -offset[1] + dy,\n anchor: [offsetX, offsetY]\n });\n\n // 添加logo和logo内的text\n if (logoSymbol) {\n const { size = 12 } = logoSymbol;\n const sizeArray = isArray(size) ? (size as [number | string, number | string]) : [size, size];\n if (sizeArray[1] === 'auto') {\n sizeArray[1] = poptipHeight;\n }\n if (sizeArray[0] === 'auto') {\n sizeArray[0] = poptipHeight;\n }\n const sizeW = sizeArray[0] as number;\n group.createOrUpdateChild(\n 'poptip-logo',\n {\n ...logoSymbol,\n x: 0,\n y: poptipHeight / 2,\n visible: bgVisible && (contentVisible || titleVisible),\n zIndex: 10,\n size: sizeArray as [number, number]\n },\n 'symbol'\n );\n group.setAttributes({\n x: -offset[0] + dx + sizeW / 2,\n y: -offset[1] + dy\n });\n if (logoText) {\n group.createOrUpdateChild(\n 'poptip-logo-text',\n {\n ...logoTextStyle,\n x: 0,\n y: poptipHeight / 2,\n visible: bgVisible && (contentVisible || titleVisible),\n text: logoText,\n textAlign: 'center',\n textBaseline: 'middle',\n zIndex: 10\n },\n 'text'\n );\n }\n }\n\n if (layout && range) {\n _tBounds.setValue(0, 0, popTipWidth, poptipHeight).transformWithMatrix(group.globalTransMatrix);\n const b = _tBounds;\n const stageBounds = new Bounds().setValue(0, 0, range[0], range[1]);\n if (rectInsideAnotherRect(b, stageBounds, false)) {\n break;\n } else {\n const bbox = getRectIntersect(b, stageBounds, false);\n const size = (bbox.x2 - bbox.x1) * (bbox.y2 - bbox.y1);\n if (size > maxBBoxSize) {\n maxBBoxSize = size;\n maxBBoxI = i;\n }\n }\n } else {\n break;\n }\n }\n }\n\n positionList = ['top', 'tl', 'tr', 'bottom', 'bl', 'br', 'left', 'lt', 'lb', 'right', 'rt', 'rb'];\n\n getAngleAndOffset(\n position: string,\n width: number,\n height: number,\n size: [number, number],\n symbolType: 'arrow2Left' | string\n ): { angle: number; offset: [number, number] } {\n // const sizeW = size[0];\n const sizeH = symbolType === 'arrow2Left' ? size[1] / 2 : size[1];\n switch (position) {\n case 'tl':\n return {\n angle: symbolType === 'arrow2Left' ? (pi / 2) * 3 : 0,\n offset: symbolType === 'arrow2Left' ? [width / 4, height + sizeH] : [0, height + sizeH]\n };\n case 'top':\n return { angle: (pi / 2) * 3, offset: [width / 2, height + sizeH] };\n case 'tr':\n return {\n angle: symbolType === 'arrow2Left' ? (pi / 2) * 3 : 0,\n offset: symbolType === 'arrow2Left' ? [(width / 4) * 3, height + sizeH] : [width, height + sizeH]\n };\n case 'rt':\n return {\n angle: 0,\n offset: symbolType === 'arrow2Left' ? [-sizeH, height / 5] : [-sizeH, 0]\n };\n case 'right':\n return { angle: 0, offset: [-sizeH, height / 2] };\n case 'rb':\n return {\n angle: 0,\n offset: symbolType === 'arrow2Left' ? [-sizeH, (height / 5) * 4] : [-sizeH, height]\n };\n case 'bl':\n return {\n angle: symbolType === 'arrow2Left' ? pi / 2 : 0,\n offset: symbolType === 'arrow2Left' ? [width / 4, -sizeH] : [0, -sizeH]\n };\n case 'bottom':\n return { angle: pi / 2, offset: [width / 2, -sizeH] };\n case 'br':\n return {\n angle: symbolType === 'arrow2Left' ? pi / 2 : 0,\n offset: symbolType === 'arrow2Left' ? [(width / 4) * 3, -sizeH] : [width, -sizeH]\n };\n case 'lt':\n return {\n angle: symbolType === 'arrow2Left' ? pi : 0,\n offset: symbolType === 'arrow2Left' ? [width + sizeH, height / 5] : [width + sizeH, 0]\n };\n case 'left':\n return { angle: pi, offset: [width + sizeH, height / 2] };\n case 'lb':\n return {\n angle: symbolType === 'arrow2Left' ? pi : 0,\n offset: symbolType === 'arrow2Left' ? [width + sizeH, (height / 5) * 4] : [width + sizeH, height]\n };\n }\n }\n\n appearAnimate(animateConfig: { duration?: number; easing?: string; wave?: number }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.setAttributes({ scaleX: 0, scaleY: 0 });\n this.animate().to({ scaleX: 1, scaleY: 1 }, (duration / 3) * 2, easing as any);\n this.titleShape &&\n this.titleShape\n .animate()\n .play(new InputText({ text: '' }, { text: this.titleShape.attribute.text as string }, duration, easing as any));\n this.contentShape &&\n this.contentShape\n .animate()\n .play(\n new InputText({ text: '' }, { text: this.contentShape.attribute.text as string }, duration, easing as any)\n );\n\n // 摇摆\n if (animateConfig.wave) {\n const dur = duration / 6;\n this.group\n .animate()\n .to({ angle: animateConfig.wave }, dur, easing as any)\n .to({ angle: -animateConfig.wave }, dur * 2, easing as any)\n .to({ angle: animateConfig.wave }, dur * 2, easing as any)\n .to({ angle: 0 }, dur, easing as any);\n }\n }\n\n disappearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n }\n}\n","import type {\n IContext2d,\n IGraphic,\n IGraphicAttribute,\n IInteractiveSubRenderContribution,\n IThemeAttribute,\n IDrawContext\n} from '@visactor/vrender-core';\nimport { injectable } from '@visactor/vrender-core';\nimport { PopTip } from './poptip';\nimport { merge } from '@visactor/vutils';\nimport { theme } from './theme';\n\nfunction wrapPoptip(target: Record, source: Record) {\n merge(target, theme.poptip, source);\n return target;\n}\n\n@injectable()\nexport class PopTipRenderContribution implements IInteractiveSubRenderContribution {\n declare poptipComponent: PopTip;\n render(\n graphic: IGraphic>,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n graphicAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n strokeCb?: (ctx: IContext2d, markAttribute: Partial, themeAttribute: IThemeAttribute) => boolean,\n options?: any\n ): void {\n if (graphic._showPoptip === 1) {\n const { visible, visibleCb } = (graphic.attribute as any).poptip || {};\n if (visible === false || (visibleCb && visibleCb(graphic) === false)) {\n return;\n }\n const attribute = {};\n merge(\n attribute,\n PopTip.defaultAttributes,\n (graphic.attribute as any).poptip ? (graphic.attribute as any).poptip : {}\n );\n if (!this.poptipComponent) {\n this.poptipComponent = new PopTip(attribute);\n } else {\n this.poptipComponent.initAttributes(attribute);\n }\n // 如果text图元没有配置title和content的话\n let poptip = (graphic.attribute as any).poptip || {};\n if (graphic.type === 'text' && poptip.title == null && poptip.content == null) {\n const out = {};\n wrapPoptip(out, poptip);\n poptip = out;\n poptip.content = poptip.content ?? (graphic.attribute as any).text;\n }\n const matrix = graphic.globalTransMatrix;\n this.poptipComponent.setAttributes({\n visibleAll: true,\n pickable: false,\n childrenPickable: false,\n ...poptip,\n x: matrix.e,\n y: matrix.f\n });\n // 添加到交互层中\n drawContext.stage.tryInitInteractiveLayer();\n const interactiveLayer = drawContext.stage.getLayer('_builtin_interactive');\n if (interactiveLayer) {\n interactiveLayer.add(this.poptipComponent);\n }\n } else if (graphic._showPoptip === 2) {\n graphic._showPoptip = 0;\n if (this.poptipComponent) {\n this.poptipComponent.setAttributes({\n visibleAll: false\n });\n this.poptipComponent.parent?.removeChild(this.poptipComponent);\n this.poptipComponent = null;\n }\n }\n }\n}\n","import type { FederatedPointerEvent, IGraphic, IPlugin, IPluginService } from '@visactor/vrender-core';\nimport { Generator, injectable } from '@visactor/vrender-core';\n\n// _showPoptip: 0-没有,1-添加,2-删除\n\nexport abstract class PopTipPluginBase {\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n activeGraphic: IGraphic;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerover', this.poptip);\n }\n\n needHide(graphic: IGraphic) {\n return graphic.isContainer || !graphic.attribute;\n }\n\n needShow(graphic: IGraphic) {\n return !!(graphic.attribute as any).poptip;\n }\n\n poptip = (e: FederatedPointerEvent) => {\n const graphic = e.target as any;\n if (this.needHide(graphic)) {\n this.unpoptip(e);\n return;\n }\n // 触发graphic重绘\n if (graphic === this.activeGraphic) {\n return;\n }\n if (this.needShow(graphic)) {\n graphic.setAttributes({});\n graphic._showPoptip = 1;\n }\n\n if (this.activeGraphic) {\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n }\n // console.log(graphic)\n this.setActiveGraphic(graphic, true);\n };\n\n unpoptip = (e: FederatedPointerEvent) => {\n if (!this.activeGraphic) {\n return;\n }\n this.activeGraphic.setAttributes({});\n this.activeGraphic._showPoptip = 2;\n this.setActiveGraphic(null, true);\n };\n\n setActiveGraphic(graphic: any | null, rerender?: boolean) {\n this.activeGraphic = graphic;\n // 触发重绘\n this.pluginService.stage.renderNextFrame();\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n stage.removeEventListener('pointerover', this.poptip);\n }\n}\n\n@injectable()\nexport class PopTipPlugin extends PopTipPluginBase implements IPlugin {\n name: 'poptip' = 'poptip';\n key: string = this.name + this._uid;\n}\n\n@injectable()\nexport class PopTipForClipedTextPlugin extends PopTipPluginBase implements IPlugin {\n name: 'poptipForText' = 'poptipForText';\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n super.activate(context);\n\n const { stage } = this.pluginService;\n\n stage.addEventListener('pointerleave', this.pointerlave);\n }\n pointerlave = (e: any) => {\n const { stage } = this.pluginService;\n if (e.target === stage) {\n this.unpoptip(e);\n }\n };\n\n needHide(graphic: IGraphic) {\n return (\n graphic.type !== 'text' ||\n !graphic.cliped ||\n graphic.isContainer ||\n !graphic.attribute ||\n (graphic as any).attribute.disableAutoClipedPoptip\n );\n }\n needShow(graphic: IGraphic): boolean {\n return true;\n }\n\n deactivate(context: IPluginService): void {\n const { stage } = this.pluginService;\n super.deactivate(context);\n stage.removeEventListener('pointerleave', this.pointerlave);\n }\n}\n","import {\n InteractiveSubRenderContribution,\n AutoEnablePlugins,\n ContainerModule,\n container\n} from '@visactor/vrender-core';\nimport { PopTipRenderContribution } from './contribution';\nimport { PopTipPlugin, PopTipForClipedTextPlugin } from './poptip-plugin';\n\nexport const popTipModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (!isBound(PopTipRenderContribution)) {\n bind(PopTipRenderContribution).toSelf().inSingletonScope();\n bind(InteractiveSubRenderContribution).toService(PopTipRenderContribution);\n }\n if (!isBound(PopTipPlugin)) {\n bind(PopTipPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipPlugin);\n }\n if (!isBound(PopTipForClipedTextPlugin)) {\n bind(PopTipForClipedTextPlugin).toSelf();\n bind(AutoEnablePlugins).toService(PopTipForClipedTextPlugin);\n }\n});\n\nexport function loadPoptip() {\n container.load(popTipModule);\n}\n","import { loadPoptip } from '@visactor/vrender-components';\n\nexport const registerPoptip = () => {\n loadPoptip();\n};\n","import type { ITooltipHandlerOptions } from './interface';\n\nexport const TOOLTIP_PREFIX = 'vchart-tooltip';\nexport const TOOLTIP_CONTAINER_EL_CLASS_NAME = `${TOOLTIP_PREFIX}-container`;\nexport const TOOLTIP_TITLE_CLASS_NAME = `${TOOLTIP_PREFIX}-title`;\nexport const TOOLTIP_CONTENT_BOX_CLASS_NAME = `${TOOLTIP_PREFIX}-content-box`;\nexport const TOOLTIP_EMPTY_STRING = '';\n\nexport const DEFAULT_OPTIONS: ITooltipHandlerOptions = {\n /**\n * X offset.\n */\n offsetX: 10,\n\n /**\n * Y offset.\n */\n offsetY: 10\n};\nexport const DEFAULT_TOOLTIP_Z_INDEX = '99999999999999';\n","import { isString, isNumber } from '@visactor/vutils';\nimport { TOOLTIP_EMPTY_STRING } from '../constants';\n\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nexport function escapeHTML(value: any): string {\n return String(value)\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\\(/g, '(')\n .replace(/ /g, '  '); // 转义符和真空格夹杂,在转义和正常换行之间取得平衡\n}\n\n/** 获取元素的绝对缩放因数(支持外部传入 boundingClientRect 提升性能) */\nexport const getScale = (element: HTMLElement, boundingClientRect?: DOMRect) => {\n if (!element) {\n return 1;\n }\n if (!boundingClientRect) {\n boundingClientRect = element.getBoundingClientRect();\n }\n if (element.offsetWidth > 0) {\n return boundingClientRect.width / element.offsetWidth;\n }\n return element.offsetHeight > 0 ? boundingClientRect.height / element.offsetHeight : 1;\n};\n\nexport const formatContent = (content: any) => {\n if ((isString(content) && content?.trim() !== '') || isNumber(content)) {\n return escapeHTML(content);\n }\n\n return TOOLTIP_EMPTY_STRING;\n};\n","import type { IAxis } from '../../../../component/axis';\nimport type { AxisCurrentValueMap } from '../../../../component/crosshair';\nimport type { IHair } from '../../../../component/crosshair/base';\nimport { LayoutType } from '../../../../component/crosshair/config';\nimport {\n layoutByValue,\n layoutHorizontalCrosshair,\n layoutVerticalCrosshair\n} from '../../../../component/crosshair/utils/cartesian';\nimport type { IDimensionData } from '../../../../event';\nimport type { ICartesianSeries } from '../../../../series';\nimport { Direction, type ILayoutPoint } from '../../../../typings';\nimport type {\n IFixedTooltipPositionPattern,\n IGlobalTooltipPositionPattern,\n TooltipFixedPosition\n} from '../../../../typings/tooltip/position';\nimport { isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\n\nexport const getActualTooltipPositionValue = (\n position: number | ((event: MouseEvent) => number) | null | undefined,\n event: MouseEvent\n): number => {\n let result: number;\n if (isValid(position)) {\n if (isNumber(position)) {\n result = position as number;\n } else if (isFunction(position)) {\n // 这里额外判断下是否合法\n const tooltipPosition = (position as (event: MouseEvent) => number)(event);\n\n if (isNumber(tooltipPosition)) {\n result = tooltipPosition;\n }\n }\n }\n return result;\n};\n\n// 'left' | 'centerLeft' | 'center' | 'centerRight' | 'right'\n// 'top' | 'centerTop' | 'center' | 'centerBottom' | 'bottom'\nexport type TooltipPositionType = -2 | -1 | 0 | 1 | 2;\n\n/** position 对齐方式在 x、y 分量下的分解 */\nexport const positionType: Record = {\n left: [-2, 0],\n right: [2, 0],\n top: [0, -2],\n lt: [-2, -2],\n tl: [-2, -2],\n rt: [2, -2],\n tr: [2, -2],\n bottom: [0, 2],\n bl: [-2, 2],\n lb: [-2, 2],\n br: [2, 2],\n rb: [2, 2],\n inside: [0, 0], // 旧版兼容\n center: [0, 0],\n centerBottom: [0, 1],\n centerTop: [0, -1],\n centerLeft: [-1, 0],\n centerRight: [1, 0]\n};\n\nexport const getPositionType = (\n position: TooltipFixedPosition,\n dim: 'x' | 'y',\n defaultCase: TooltipPositionType = 2\n): TooltipPositionType => positionType[position]?.[dim === 'x' ? 0 : 1] ?? defaultCase;\n\nexport const getCartesianCrosshairRect = (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => {\n const currValueX: AxisCurrentValueMap = new Map();\n const currValueY: AxisCurrentValueMap = new Map();\n const { series, datum } = dimensionData;\n const isHorizontal = (series as ICartesianSeries).direction === Direction.horizontal;\n const axisHelper = isHorizontal\n ? (series as ICartesianSeries).getYAxisHelper()\n : (series as ICartesianSeries).getXAxisHelper();\n const axisId = axisHelper.getAxisId();\n const axis = series\n .getChart()\n .getComponentsByKey('axes')\n .find(axis => axis.id === axisId) as IAxis;\n\n if (!axis) {\n return undefined;\n }\n (isHorizontal ? currValueY : currValueX).set(axis.getSpecIndex(), {\n value: series.getDatumPositionValues(datum[0], series.getDimensionField())?.[0],\n axis\n });\n\n const xHair: IHair = {\n visible: !!currValueX.size,\n type: 'rect'\n };\n const yHair: IHair = {\n visible: !!currValueY.size,\n type: 'rect'\n };\n\n const {\n x: crosshairInfoX,\n y: crosshairInfoY,\n offsetWidth,\n offsetHeight,\n bandWidth,\n bandHeight\n } = layoutByValue(LayoutType.ALL, series as ICartesianSeries, layoutStartPoint, currValueX, currValueY, xHair, yHair);\n\n if (crosshairInfoX) {\n return layoutVerticalCrosshair(xHair, crosshairInfoX, bandWidth, offsetWidth);\n }\n if (crosshairInfoY) {\n return layoutHorizontalCrosshair(yHair, crosshairInfoY, bandHeight, offsetHeight);\n }\n return undefined;\n};\n\nexport const isGlobalTooltipPositionPattern = (obj: any): obj is IGlobalTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IGlobalTooltipPositionPattern).left) ||\n isValid((obj as IGlobalTooltipPositionPattern).right) ||\n isValid((obj as IGlobalTooltipPositionPattern).top) ||\n isValid((obj as IGlobalTooltipPositionPattern).bottom))\n );\n};\n\nexport const isFixedTooltipPositionPattern = (obj: any): obj is IFixedTooltipPositionPattern => {\n return (\n isObject(obj) &&\n (isValid((obj as IFixedTooltipPositionPattern).x) || isValid((obj as IFixedTooltipPositionPattern).y))\n );\n};\n","import { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_OPTIONS } from './constants';\nimport type { Maybe, IPoint, RenderMode } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITooltipPositionFixedValue, TooltipPositionKeys } from '../../../typings/tooltip/position';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTrueBrowser } from '../../../util/env';\nimport type {\n TooltipData,\n ITooltipActual,\n TooltipActiveType,\n ITooltipHandler,\n ITooltipPositionActual,\n IGlobalTooltipPositionPattern\n} from '../../../typings/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TooltipFixedPosition } from '../../../typings/tooltip';\nimport { getScale } from './utils/common';\nimport {\n getActualTooltipPositionValue,\n getCartesianCrosshairRect,\n getPositionType,\n isFixedTooltipPositionPattern,\n isGlobalTooltipPositionPattern\n} from './utils/position';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { AABBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, isObject, isValidNumber, isValid, isFunction } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILayoutModel } from '../../../model/interface';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport type { IChartOption } from '../../../chart/interface';\nimport type { ITooltipSpec, Tooltip, TooltipHandlerParams } from '../../../component/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../../../component/tooltip';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport { getTooltipPatternValue } from '../../../component/tooltip/utils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\nimport type { ITooltipHandlerOptions } from './interface';\nimport type { ICompiler } from '../../../compile/interface/compilable-item';\n\ntype ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => TooltipResult;\n\ntype ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => TooltipResult;\n\n/**\n * The tooltip handler class.\n */\nexport abstract class BaseTooltipHandler extends BasePlugin implements ITooltipHandler, IComponentPlugin {\n static readonly pluginType: 'component';\n static readonly specKey = 'tooltip';\n\n readonly type: string;\n\n /** 是否可见 */\n protected _visible = true;\n\n // protected _style: ITooltipStyle = {};\n\n protected _option: ITooltipHandlerOptions;\n\n protected _chartOption: IChartOption;\n\n protected _env: RenderMode;\n public get env() {\n return this._env;\n }\n\n protected _component: Tooltip;\n\n protected _chartContainer: Maybe;\n protected _compiler: ICompiler;\n\n // tooltip 容器\n protected _container!: Maybe;\n\n protected _isReleased: boolean = false;\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n const component = service.component as Tooltip;\n this._component = component;\n this._chartOption = component.getOption() as any;\n this._env = this._chartOption.mode;\n this._chartContainer = this._chartOption.globalInstance.getContainer();\n this._compiler = component.getCompiler();\n this._initFromSpec();\n }\n\n showTooltip = (activeType: TooltipActiveType, data: TooltipData, params: TooltipHandlerParams) => {\n const { changePositionOnly } = params;\n\n if (changePositionOnly) {\n return this.changeTooltipPosition(params, data);\n }\n return this.changeTooltip(true, params, data);\n };\n\n /** 改变 tooltip 内容和位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltip: ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n if (!visible) {\n /** 关闭 tooltip */\n this._updateTooltip(false, params);\n return TooltipResult.success;\n }\n\n return this.changeTooltipPosition(params, data);\n };\n\n /** 改变 tooltip 位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltipPosition: ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n const event = params.event as MouseEvent;\n const { tooltipSpec, activeTooltipSpec, changePositionOnly } = params;\n\n if (!activeTooltipSpec) {\n return TooltipResult.failed;\n }\n\n const activeType = activeTooltipSpec.activeType;\n\n /** 用户自定义逻辑 */\n if (activeTooltipSpec.handler) {\n return activeTooltipSpec.handler.showTooltip?.(activeType, data, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = activeTooltipSpec;\n\n // 计算 tooltip 位置\n const position = this._getActualTooltipPosition(\n activeTooltipSpec,\n params,\n this._getTooltipBoxSize(activeTooltipSpec, changePositionOnly)\n );\n activeTooltipSpec.position = position;\n const updatePosition = activeTooltipSpec.updatePosition ?? tooltipSpec[activeType]?.updatePosition;\n\n if (updatePosition) {\n activeTooltipSpec.position = updatePosition(activeTooltipSpec.position, data, params);\n }\n\n // 判断 tooltip 可见性\n let tooltipVisible = pattern?.visible !== false;\n if (\n !data ||\n event.type === 'pointerout' ||\n !activeTooltipSpec.visible ||\n (!activeTooltipSpec.title && !activeTooltipSpec.content)\n ) {\n tooltipVisible = false;\n }\n\n this._updateTooltip(tooltipVisible, {\n ...params,\n changePositionOnly\n });\n return TooltipResult.success;\n };\n\n hideTooltip(params: TooltipHandlerParams): TooltipResult {\n return this.changeTooltip(false, params);\n }\n\n release(): void {\n const spec = this._component.getSpec() ?? {};\n /** 用户自定义逻辑 */\n if (spec.handler) {\n spec.handler.release?.();\n return;\n }\n /** 默认逻辑 */\n this._removeTooltip();\n\n this._isReleased = true;\n }\n\n /* -----需要子类继承的方法开始----- */\n\n protected abstract _updateTooltip(visible: boolean, params: TooltipHandlerParams): void;\n protected abstract _removeTooltip(): void;\n protected abstract _getTooltipBoxSize(\n actualTooltip: ITooltipActual,\n changePositionOnly: boolean\n ): IContainerSize | undefined;\n\n /* -----需要子类继承的方法结束----- */\n\n protected _getDefaultOption(): ITooltipHandlerOptions {\n const { offset } = this._component.getSpec();\n\n return offset\n ? {\n offsetX: offset.x ?? DEFAULT_OPTIONS.offsetX,\n offsetY: offset.y ?? DEFAULT_OPTIONS.offsetY\n }\n : DEFAULT_OPTIONS;\n }\n\n /**\n * 计算实际的 tooltip 位置\n */\n protected _getActualTooltipPosition = (\n actualTooltip: ITooltipActual,\n params: TooltipHandlerParams,\n tooltipBoxSize: IContainerSize | undefined\n ): ITooltipPositionActual => {\n const { tooltipSpec } = params;\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n if (!tooltipSpec) {\n return invalidPosition;\n }\n const event = params.event as MouseEvent;\n const { activeType, data } = actualTooltip;\n const firstDim =\n activeType === 'dimension' ? (data as IDimensionInfo[])[0]?.data?.[0] : (data as IDimensionData[])?.[0];\n\n const { offsetX, offsetY } = this._option;\n\n const spec = tooltipSpec[activeType];\n const position = getTooltipPatternValue(spec?.position, data, params);\n const positionMode =\n getTooltipPatternValue(spec?.positionMode, data, params) ?? (activeType === 'mark' ? 'mark' : 'pointer');\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = tooltipBoxSize ?? {};\n\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const canvasRect = params?.chart?.getCanvasRect();\n const canvasWidth = canvasRect?.width ?? DEFAULT_CHART_WIDTH;\n const canvasHeight = canvasRect?.height ?? DEFAULT_CHART_HEIGHT;\n let isFixedPosition = false;\n\n const containerSize = {\n width: 0,\n height: 0\n };\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementRect: DOMRect;\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n const isBrowser = isTrueBrowser(this._env);\n\n if (isBrowser && !tooltipSpec.confine) {\n // 只有在 browser 模式下才可以获取到 window 对象\n containerSize.width = window.innerWidth;\n containerSize.height = window.innerHeight;\n } else {\n containerSize.width = canvasWidth;\n containerSize.height = canvasHeight;\n }\n if (isBrowser && !isCanvas) {\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect?.() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n const tooltipSizeScale = tooltipParentElementScale / chartElementScale;\n\n /* 一、计算 left、top、right、bottom */\n\n const calcPos: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const pointerFixedPosition: {\n x: TooltipFixedPosition;\n y: TooltipFixedPosition;\n } = { x: position as any, y: position as any };\n const dimToPos = { x: ['left', 'right'], y: ['top', 'bottom'] };\n\n const processCartesianFixedPosition = ({ orient, mode, offset }: ITooltipPositionFixedValue, dim: 'x' | 'y') => {\n let dim1: number;\n let dim2: number;\n const model = params.model as ILayoutModel;\n const startPoint = model?.getLayoutStartPoint();\n const dimOffset = offset ?? (dim === 'x' ? offsetX : offsetY);\n\n if (mode === 'mark') {\n isFixedPosition = true;\n const element = params.item as IElement;\n const bounds = element?.getBounds() as AABBBounds;\n if (bounds && startPoint) {\n dim1 = (dim === 'x' ? bounds.x1 : bounds.y1) + startPoint[dim];\n dim2 = (dim === 'x' ? bounds.x2 : bounds.y2) + startPoint[dim];\n }\n } else if (\n mode === 'crosshair' &&\n firstDim?.series?.coordinate === 'cartesian' &&\n firstDim.datum &&\n firstDim.datum.length\n ) {\n isFixedPosition = true;\n const rect = getCartesianCrosshairRect(firstDim, startPoint);\n if (rect) {\n dim1 = rect.start[dim];\n dim2 = rect.end[dim];\n }\n } else {\n pointerFixedPosition[dim] = orient;\n }\n\n if (isFixedPosition) {\n const posKey = dimToPos[dim][0] as TooltipPositionKeys;\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n switch (getPositionType(orient, dim)) {\n case -2:\n calcPos[posKey] = dim1 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 0:\n calcPos[posKey] = (dim1 + dim2) / 2 - (boxSize * tooltipSizeScale) / 2;\n break;\n case -1:\n calcPos[posKey] = (dim1 + dim2) / 2 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 1:\n calcPos[posKey] = (dim1 + dim2) / 2 + dimOffset;\n break;\n case 2:\n calcPos[posKey] = dim2 + dimOffset;\n break;\n }\n }\n };\n const dims = ['x', 'y'] as ('x' | 'y')[];\n if (isObject(position)) {\n if (isGlobalTooltipPositionPattern(position)) {\n const {\n left: posLeft,\n right: posRight,\n top: posTop,\n bottom: posBottom\n } = position as IGlobalTooltipPositionPattern;\n calcPos.left = getActualTooltipPositionValue(posLeft, event);\n calcPos.top = getActualTooltipPositionValue(posTop, event);\n calcPos.right = getActualTooltipPositionValue(posRight, event);\n calcPos.bottom = getActualTooltipPositionValue(posBottom, event);\n } else if (isFixedTooltipPositionPattern(position)) {\n dims.forEach(dim => {\n const dimValue = position[dim];\n if (isNumber(dimValue) || isFunction(dimValue)) {\n calcPos[dimToPos[dim][0] as TooltipPositionKeys] = getActualTooltipPositionValue(\n dimValue as number | ((event: MouseEvent) => number),\n event\n );\n } else {\n processCartesianFixedPosition(dimValue as ITooltipPositionFixedValue, dim);\n }\n });\n }\n } else if (isValid(position)) {\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'x');\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'y');\n }\n\n const result: ITooltipPositionActual = { x: null, y: null };\n\n dims.forEach(dim => {\n /* 二、换算成 x 和 y */\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n const canvasSize = dim === 'x' ? canvasWidth : canvasHeight;\n const offset = dim === 'x' ? offsetX : offsetY;\n const posType = getPositionType(pointerFixedPosition[dim], dim);\n if (isValidNumber(calcPos[dimToPos[dim][0] as TooltipPositionKeys])) {\n result[dim] = calcPos[dimToPos[dim][0] as TooltipPositionKeys];\n } else if (isValidNumber(calcPos[dimToPos[dim][1] as TooltipPositionKeys])) {\n result[dim] = canvasSize - boxSize * tooltipSizeScale - calcPos[dimToPos[dim][1] as TooltipPositionKeys];\n } else {\n const value0 = dim === 'x' ? (event as any).canvasX : (event as any).canvasY;\n\n if (posType > 0) {\n result[dim] = value0 + offset;\n } else if (posType === 0) {\n result[dim] = value0 - (boxSize * tooltipSizeScale) / 2;\n } else {\n result[dim] = value0 - boxSize * tooltipSizeScale - offset;\n }\n }\n result[dim] *= chartElementScale;\n\n if (isBrowser) {\n result[dim] += relativePosOffset[dim];\n }\n result[dim] /= tooltipParentElementScale;\n\n /* 三、确保tooltip在视区内 */\n const containerDimSize = dim === 'x' ? containerSize.width : containerSize.height;\n const leftOrTop = tooltipSpec.confine\n ? -(tooltipParentElementRect[dim] - (chartElementRect?.[dim] ?? 0) / chartElementScale) /\n tooltipParentElementScale\n : -tooltipParentElementRect[dim] / tooltipParentElementScale;\n const rightOrBottom = containerDimSize / tooltipParentElementScale + leftOrTop - boxSize;\n\n // 处理左右\n if (posType !== 2 && result[dim] < leftOrTop) {\n // 优先检测left\n if (isFixedPosition) {\n result[dim] = leftOrTop;\n } else {\n if (posType === 0) {\n // 从居中 挪至 右侧\n result[dim] += offset + boxSize / 2;\n } else {\n // 从居左/左侧 挪至 居右/右侧\n result[dim] += offset * 2 + boxSize;\n }\n\n if (result[dim] > rightOrBottom) {\n // 位置不超出视区右界\n result[dim] = rightOrBottom;\n }\n }\n } else if (posType !== -2 && result[dim] > rightOrBottom) {\n // 优先检测right\n // 位置不超出视区右界\n if (isFixedPosition) {\n result[dim] = rightOrBottom;\n } else {\n if (posType === 0) {\n // 从居中 挪至 左侧\n result[dim] -= offset + boxSize / 2;\n } else {\n // 从居右/右侧 挪至 居左/左侧\n result[dim] -= offset * 2 + boxSize;\n }\n\n if (result[dim] < leftOrTop) {\n // 位置不超出视区左界\n result[dim] = leftOrTop;\n }\n }\n }\n });\n\n return result;\n };\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return spec.parentElement as any;\n }\n\n getTooltipContainer() {\n return this._container;\n }\n\n protected _initFromSpec() {\n this._option = this._getDefaultOption();\n }\n\n reInit() {\n this._initFromSpec();\n }\n}\n","import { isArray, isValid, isValidNumber, normalizePadding } from '@visactor/vutils';\nimport type { ITooltipSpec, ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip';\nimport { calcLayoutNumber } from '../../../../util/space';\nimport type { ILayoutNumber } from '../../../../typings/layout';\nconst DEFAULT_SHAPE_SPACING = 8;\nconst DEFAULT_KEY_SPACING = 26;\nconst DEFAULT_VALUE_SPACING = 0;\n\nexport const getPixelPropertyStr = (num?: number | number[], defaultStr?: string) => {\n if (isValid(num)) {\n if (isArray(num)) {\n return num.map(n => `${n}px`).join(' ');\n }\n return `${num}px`;\n }\n return defaultStr ?? 'initial';\n};\n\nexport const getTextStyle = (style: ITooltipTextTheme = {}, textStyle: Partial = {}) => {\n if (isValid(style.fontFamily)) {\n textStyle.fontFamily = style.fontFamily;\n }\n const color = style.fill ?? style.fontColor;\n\n if (isValid(color)) {\n textStyle.color = color;\n }\n if (isValid(style.fontWeight)) {\n textStyle.fontWeight = style.fontWeight as string;\n }\n if (isValid(style.textAlign)) {\n textStyle.textAlign = style.textAlign as string;\n }\n if (isValid(style.fontSize)) {\n textStyle.fontSize = getPixelPropertyStr(style.fontSize as number);\n }\n if (isValid(style.maxWidth)) {\n textStyle.maxWidth = getPixelPropertyStr(style.maxWidth as number);\n }\n if (style.multiLine) {\n textStyle.whiteSpace = 'initial';\n textStyle.wordBreak = style.wordBreak ?? 'break-word';\n } else {\n textStyle.wordBreak = 'normal';\n textStyle.whiteSpace = 'nowrap';\n }\n\n return textStyle;\n};\n\nexport const getLineHeight = (style: ITooltipTextTheme = {}) => {\n const { lineHeight } = style;\n\n if (style.fontSize) {\n return calcLayoutNumber(lineHeight as ILayoutNumber, style.fontSize as number);\n }\n\n return 0;\n};\n\nexport const getDomStyle = (spec: ITooltipSpec = {}) => {\n const { style = {}, enterable, transitionDuration } = spec;\n const { panel = {}, titleLabel, shape, keyLabel, valueLabel, spaceRow: commonSpaceRow, align } = style;\n const { panelStyle, panelPadding } = getPanelStyle(panel);\n const rowStyle: Partial = {\n marginTop: '0px',\n marginBottom: '0px'\n };\n\n panelStyle.pointerEvents = enterable ? 'auto' : 'none';\n if (transitionDuration) {\n panelStyle.transitionDuration = transitionDuration ? `${transitionDuration}ms` : 'initial';\n panelStyle.transitionProperty = transitionDuration ? 'transform' : 'initial';\n panelStyle.transitionTimingFunction = transitionDuration ? 'ease-out' : 'initial';\n }\n\n if (isValidNumber(commonSpaceRow)) {\n rowStyle.marginBottom = `${commonSpaceRow}px`;\n }\n\n const shapeStyle: Partial = {\n // TODO 默认值优化\n width: getPixelPropertyStr(shape?.size ?? 8)\n };\n const titleStyle = getTextStyle(titleLabel);\n const keyStyle = getTextStyle(keyLabel);\n const valueStyle = getTextStyle(valueLabel);\n const marginKey = align === 'right' ? 'marginLeft' : 'marginRight';\n\n if (align === 'right') {\n // rtl\n panelStyle.direction = 'rtl';\n titleStyle.textAlign = 'right';\n keyStyle.textAlign = 'right';\n valueStyle.textAlign = 'left';\n } else {\n titleStyle.textAlign = 'left';\n keyStyle.textAlign = 'left';\n valueStyle.textAlign = 'right';\n }\n shapeStyle[marginKey] = getPixelPropertyStr(shape.spacing ?? DEFAULT_SHAPE_SPACING);\n keyStyle[marginKey] = getPixelPropertyStr(keyLabel.spacing ?? DEFAULT_KEY_SPACING);\n valueStyle[marginKey] = getPixelPropertyStr(valueLabel.spacing ?? DEFAULT_VALUE_SPACING);\n const lineHeight = Math.max(getLineHeight(valueLabel), getLineHeight(keyLabel));\n\n // 如果不设置lineHeight,会导致横向不对齐的问题\n rowStyle.lineHeight = lineHeight > 0 ? `${lineHeight}px` : '20px';\n\n return {\n panelPadding,\n row: rowStyle,\n panel: panelStyle,\n title: titleStyle,\n shape: shapeStyle,\n key: keyStyle,\n value: valueStyle\n };\n};\n\nexport const getPanelStyle = (\n style: ITooltipTheme['panel']\n): { panelStyle: Partial; panelPadding?: number[] } => {\n const { backgroundColor, border, shadow, padding } = style;\n const panelStyle: Partial = {\n borderWidth: `${border?.width ?? 0}px`\n };\n let panelPadding: number[] = null;\n\n if (border?.color) {\n panelStyle.borderColor = border.color as string;\n }\n if (backgroundColor) {\n panelStyle.backgroundColor = backgroundColor as string;\n }\n panelStyle.boxShadow = shadow\n ? `${shadow.x}px ${shadow.y}px ${shadow.blur}px ${shadow.spread}px ${shadow.color}`\n : 'initial';\n const { radius } = border ?? {};\n\n if (isValid(radius)) {\n panelStyle.borderRadius = isValidNumber(radius) ? `${radius}px` : `${radius}`;\n }\n\n if (padding) {\n panelPadding = normalizePadding(padding);\n panelStyle.padding = getPixelPropertyStr(panelPadding);\n }\n\n return { panelStyle, panelPadding };\n};\n\nexport function setStyleToDom(dom: HTMLElement, style: Partial) {\n if (!dom || !dom.style || !style) {\n return;\n }\n\n Object.keys(style).forEach(key => {\n (dom.style as any)[key] = (style as any)[key];\n });\n}\n","import { Factory } from '../../core/factory';\nimport type { IComponentPluginConstructor } from './interface';\n\nexport const registerComponentPlugin = (plugin: IComponentPluginConstructor) => {\n Factory.registerComponentPlugin(plugin.type, plugin);\n};\n","import { escapeHTML } from './common';\n// eslint-disable-next-line no-duplicate-imports\nimport type { CustomSymbolClass, IGradientColor, ILinearGradient } from '@visactor/vrender-core';\nimport { Symbol } from '@visactor/vrender-core';\nimport { Bounds, isObject, isString } from '@visactor/vutils';\nimport type { ITooltipShapeActual } from '../../../../typings';\n\nexport function getSvgHtml(option: ITooltipShapeActual | undefined, gradientId?: string) {\n if (!option || !option.hasShape || !option.shapeType) {\n return '';\n }\n\n const styleString = `style=\"display:inline-block;vertical-align:middle;\"`;\n const { shapeType, shapeFill, shapeStroke, shapeHollow = false } = option;\n const size = option.shapeSize ?? 8;\n const lineWidth = option.shapeLineWidth ? escapeHTML(option.shapeLineWidth) + 'px' : '0px';\n let fillString: string = 'currentColor';\n const getStroke = () => (shapeStroke ? escapeHTML(shapeStroke) : fillString);\n\n const sizeNumber = size;\n const createSymbol = (symbolType: string) => new Symbol({ symbolType, size: sizeNumber, fill: true });\n\n let symbol = createSymbol(shapeType);\n const parsedPath = symbol.getParsedPath();\n if (!parsedPath.path && parsedPath.pathStr) {\n symbol = createSymbol(parsedPath.pathStr);\n }\n\n let bounds;\n let path;\n if (symbol.getParsedPath().path) {\n const pathModel = symbol.getParsedPath().path;\n\n path = pathModel.toString();\n bounds = pathModel.bounds;\n } else if (parsedPath.isSvg && (parsedPath as unknown as CustomSymbolClass).svgCache) {\n path = (parsedPath as unknown as CustomSymbolClass).svgCache.map(s => s.path.toString()).join();\n bounds = (parsedPath as unknown as CustomSymbolClass).svgCache.reduce(\n (acc, cur) => acc.union(cur.path.bounds),\n new Bounds()\n );\n }\n let viewBox = `${bounds.x1} ${bounds.y1} ${bounds.width()} ${bounds.height()}`;\n\n // svg 不支持内描边,需要手动将描边空间预留在 viewBox 上\n if (lineWidth !== '0px') {\n const [x, y, w, h] = viewBox.split(' ').map(n => Number(n));\n const lw = Number(lineWidth.slice(0, -2));\n viewBox = `${x - lw / 2} ${y - lw / 2} ${w + lw} ${h + lw}`;\n }\n\n if (!shapeFill || isString(shapeFill) || shapeHollow) {\n fillString = shapeHollow ? 'none' : shapeFill ? escapeHTML(shapeFill) : 'currentColor';\n return `\n \n \n \n `;\n }\n if (isObject(shapeFill)) {\n fillString = 'gradientColor' + (gradientId ?? '');\n let gradient = '';\n const stops = ((shapeFill as IGradientColor).stops ?? [])\n .map(s => ``)\n .join('');\n if ((shapeFill as IGradientColor).gradient === 'radial') {\n gradient = `\n ${stops}\n `;\n } else if ((shapeFill as IGradientColor).gradient === 'linear') {\n gradient = `\n ${stops}\n `;\n }\n return `\n \n ${gradient}\n \n \n `;\n }\n\n return '';\n}\n","import type { ITooltipActual, ITooltipPositionActual } from '../../../typings/tooltip';\nimport { BaseTooltipHandler } from './base';\nimport { getDomStyle, getTextStyle, setStyleToDom } from './utils/style';\nimport {\n TOOLTIP_CONTAINER_EL_CLASS_NAME,\n DEFAULT_TOOLTIP_Z_INDEX,\n TOOLTIP_PREFIX,\n TOOLTIP_CONTENT_BOX_CLASS_NAME,\n TOOLTIP_TITLE_CLASS_NAME\n} from './constants';\nimport { type Maybe, isValid } from '@visactor/vutils';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { domDocument } from '../../../util/env';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport type { ILayoutPoint } from '../../../typings';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport { getSvgHtml } from './utils/svg';\nimport { formatContent } from './utils/common';\nimport { token } from '../../../theme/token';\nimport { calcLayoutNumber } from '../../../util/space';\n/**\n * The tooltip handler class.\n */\nexport class DomTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.dom;\n readonly type = TooltipHandlerType.dom;\n\n protected _tooltipContainer = domDocument?.body;\n protected _domStyle: {\n panelPadding?: number[];\n panel: Partial;\n row: Partial;\n title: Partial;\n shape: Partial;\n key: Partial;\n value: Partial;\n };\n protected _rootDom?: HTMLElement;\n protected _tooltipActual?: ITooltipActual;\n protected declare _container: Maybe;\n\n /** 自定义 tooltip 的位置缓存 */\n protected _cacheCustomTooltipPosition: ILayoutPoint;\n\n getVisibility() {\n return this._rootDom ? this._rootDom.style.visibility === 'visible' : false;\n }\n\n setVisibility(_value: boolean) {\n // 这里做个节流\n if (_value !== this.getVisibility() && this._rootDom) {\n this._rootDom.style.visibility = _value ? 'visible' : 'hidden';\n }\n }\n\n constructor() {\n super(DomTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n this._initStyle();\n this.initEl();\n }\n\n initEl() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const parentElement = tooltipSpec.parentElement as HTMLElement | HTMLCanvasElement;\n if (domDocument && parentElement && parentElement.children && parentElement.children.length) {\n for (let i = 0; i < parentElement.children.length; i++) {\n if (parentElement.children[i].classList.contains(TOOLTIP_CONTAINER_EL_CLASS_NAME)) {\n this._container = parentElement.children[i] as HTMLDivElement;\n break;\n }\n }\n if (!this._container) {\n this._container = domDocument.createElement('div');\n this._container.style.position = 'relative';\n this._container.style.zIndex = DEFAULT_TOOLTIP_Z_INDEX;\n this._container.classList.add(TOOLTIP_CONTAINER_EL_CLASS_NAME);\n parentElement.appendChild(this._container);\n }\n }\n }\n\n initRootDom() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const tooltipElement = document.createElement('div');\n const globalTheme = this._chartOption?.getTheme() ?? {};\n\n setStyleToDom(tooltipElement, {\n left: '0',\n top: '0',\n pointerEvents: 'none',\n padding: '12px',\n position: 'absolute',\n zIndex: DEFAULT_TOOLTIP_Z_INDEX,\n fontFamily: (globalTheme?.fontFamily ?? token.fontFamily) as string,\n fontSize: '11px',\n borderRadius: '3px',\n borderStyle: 'solid',\n lineHeight: 'initial',\n background: '#fff',\n boxShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',\n maxWidth: '100wh',\n maxHeight: '100vh',\n visibility: 'hidden',\n ...this._domStyle.panel\n } as CSSStyleDeclaration);\n tooltipElement.classList.add(tooltipSpec.className);\n tooltipElement.setAttribute('vchart-tooltip-id', `${this.id}`);\n this._container.appendChild(tooltipElement);\n this._rootDom = tooltipElement;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!this._rootDom) {\n this.initRootDom();\n }\n if (!changePositionOnly) {\n this._updateDomStringByCol(actualTooltip);\n }\n\n this._updateDomStyle('height');\n\n const rect = this._rootDom?.getBoundingClientRect();\n\n return {\n width: rect?.width,\n height: rect?.height\n };\n }\n\n protected _removeTooltip() {\n if (this._rootDom && this._rootDom.parentNode) {\n this._rootDom.parentNode.removeChild(this._rootDom);\n this._rootDom = null;\n }\n this._container = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n if (!visible || !this._rootDom) {\n this.setVisibility(visible);\n this._cacheCustomTooltipPosition = undefined;\n } else {\n const { tooltipSpec, activeTooltipSpec } = params;\n\n if (!params.changePositionOnly) {\n this._tooltipActual = activeTooltipSpec;\n }\n const currentVisible = this.getVisibility();\n\n // 位置\n const el = this._rootDom;\n if (el) {\n const { x = 0, y = 0 } = activeTooltipSpec.position ?? {};\n if (tooltipSpec.updateElement) {\n // 此处先设定一次位置,防止页面暂时出现滚动条(优先设置上次的位置)\n this._updatePosition(this._cacheCustomTooltipPosition ?? { x, y });\n // 更新 tooltip dom\n tooltipSpec.updateElement(el, activeTooltipSpec, params);\n // 重新计算 tooltip 位置\n const position = this._getActualTooltipPosition(activeTooltipSpec, params, {\n width: el.offsetWidth,\n height: el.offsetHeight\n });\n // 更新位置\n this._updatePosition(position);\n // 更新缓存\n this._cacheCustomTooltipPosition = position;\n } else {\n if (!currentVisible) {\n // 当从隐藏切换到显示的时候,需要先设置一次 transition 为 0ms,防止出现从一个非常远的初始位置进行动画\n this._rootDom.style.transitionDuration = '0ms';\n } else {\n this._rootDom.style.transitionDuration = this._domStyle.panel.transitionDuration ?? 'initial';\n }\n this._updatePosition({ x, y });\n }\n }\n this.setVisibility(visible);\n }\n }\n\n protected _initStyle() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n\n this._domStyle = getDomStyle(tooltipSpec);\n }\n\n protected _updateDomStringByCol(actualTooltip?: ITooltipActual) {\n const { title = {}, content } = actualTooltip;\n const hasContent = content && content.length;\n const rowStyle = this._domStyle.row;\n const chilren = [...(this._rootDom.children as any)] as HTMLElement[];\n let titleDom = chilren.find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n\n if (!titleDom && title.visible !== false) {\n titleDom = document.createElement('h2');\n const span = document.createElement('span');\n titleDom.appendChild(span);\n\n titleDom.classList.add(TOOLTIP_TITLE_CLASS_NAME);\n this._rootDom.appendChild(titleDom);\n }\n\n if (titleDom && title.visible !== false) {\n setStyleToDom(titleDom, {\n ...this._domStyle.title,\n ...(hasContent ? rowStyle : { marginBottom: '0px' }),\n marginTop: '0px'\n });\n (titleDom.firstChild as HTMLElement).innerHTML = `${title.value ?? ''}`;\n } else if (titleDom && title.visible === false) {\n titleDom.parentNode.removeChild(titleDom);\n }\n\n let contentDom = chilren.find(child => child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME));\n const columns = ['shape', 'key', 'value'];\n\n if (!contentDom && hasContent) {\n contentDom = document.createElement('div');\n\n columns.forEach(col => {\n const colDiv = document.createElement('div');\n\n colDiv.classList.add(`${TOOLTIP_PREFIX}-column`);\n colDiv.classList.add(`${TOOLTIP_PREFIX}-${col}-column`);\n colDiv.setAttribute('data-col', col);\n contentDom.appendChild(colDiv);\n });\n\n contentDom.classList.add(TOOLTIP_CONTENT_BOX_CLASS_NAME);\n this._rootDom.appendChild(contentDom);\n }\n\n if (contentDom && hasContent) {\n const columnDivs = [...(contentDom.children as any)] as HTMLElement[];\n setStyleToDom(contentDom, { whiteSpace: 'nowrap' });\n\n columnDivs.forEach((colDiv, index) => {\n const colName = colDiv.getAttribute('data-col');\n\n if (colName && columns.includes(colName)) {\n const hideColumn = colName === 'shape' && content.every(c => !c.hasShape || !c.shapeType);\n\n setStyleToDom(colDiv, {\n ...(this._domStyle as any)[colName],\n display: hideColumn ? 'none' : 'inline-block',\n verticalAlign: 'top'\n });\n const rows = [...(colDiv.children as any)] as HTMLElement[];\n\n // 删除多余的行\n rows.slice(content.length).forEach(extraRow => {\n extraRow.parentNode.removeChild(extraRow);\n });\n\n content.forEach((entry, index) => {\n let row = rows[index];\n\n if (!row) {\n row = document.createElement('div');\n row.classList.add(`${TOOLTIP_PREFIX}-${colName}`);\n colDiv.appendChild(row);\n }\n const styleByRow = {\n ...rowStyle\n };\n\n if (index === content.length - 1) {\n styleByRow.marginBottom = '0px';\n }\n\n styleByRow.display = entry.visible === false ? 'none' : 'block';\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n styleByRow.height = 'initial';\n\n if (colName === 'key') {\n row.innerHTML = formatContent(entry.key);\n if (entry.keyStyle) {\n getTextStyle(entry.keyStyle, styleByRow);\n }\n } else if (colName === 'value') {\n row.innerHTML = formatContent(entry.value);\n if (entry.valueStyle) {\n getTextStyle(entry.valueStyle, styleByRow);\n }\n } else if (colName === 'shape') {\n row.innerHTML = getSvgHtml(entry, `${this.id}_${index}`);\n }\n\n setStyleToDom(row, styleByRow);\n });\n }\n });\n } else if (contentDom && !hasContent) {\n contentDom.parentNode.removeChild(contentDom);\n }\n }\n protected _updateDomStyle(sizeKey: 'width' | 'height' = 'width') {\n const rootDom = this._rootDom;\n\n const contentDom = [...(rootDom.children as any)].find(child =>\n child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME)\n );\n\n if (contentDom) {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const contentStyle: Partial = {};\n\n if (isValid(tooltipSpec?.style?.maxContentHeight)) {\n const titleDom = rootDom.children[0];\n const titleHeight =\n titleDom && titleDom.className.includes(TOOLTIP_TITLE_CLASS_NAME)\n ? titleDom.getBoundingClientRect().height + (tooltipSpec.style.spaceRow ?? 0)\n : 0;\n const viewRect = (this._chartOption as any).getChartViewRect();\n const maxHeight = calcLayoutNumber(\n tooltipSpec.style.maxContentHeight,\n Math.min(viewRect.height, document.body.clientHeight) -\n titleHeight -\n (this._domStyle.panelPadding ? this._domStyle.panelPadding[0] + this._domStyle.panelPadding[1] : 0)\n );\n\n if (maxHeight > 0) {\n contentStyle.maxHeight = `${maxHeight}px`;\n contentStyle.overflowY = 'auto';\n // todo 让内容宽度往外阔一点,给滚动条留出位置\n contentStyle.width = `calc(100% + ${\n this._domStyle.panelPadding ? this._domStyle.panelPadding[1] + 'px' : '10px'\n })`;\n\n setStyleToDom(contentDom as HTMLElement, contentStyle);\n }\n }\n\n const rows = contentDom.children;\n const widthByCol: number[] = [];\n if (rows) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n const width = cols[j].getBoundingClientRect()[sizeKey];\n if (widthByCol[j] === undefined || widthByCol[j] < width) {\n widthByCol[j] = width;\n }\n }\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n (cols[j] as HTMLElement).style[sizeKey] = `${widthByCol[j]}px`;\n }\n }\n }\n }\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return this._container ?? super._getParentElement(spec);\n }\n\n isTooltipShown() {\n return this.getVisibility();\n }\n\n reInit() {\n super.reInit();\n this._initStyle();\n if (this._rootDom) {\n setStyleToDom(this._rootDom, this._domStyle.panel);\n }\n\n if (this.getVisibility()) {\n this._updateDomStringByCol(this._tooltipActual);\n this._updateDomStyle('height');\n }\n }\n\n protected _updatePosition({ x, y }: ITooltipPositionActual) {\n if (this._rootDom) {\n // translate3d 性能较好:https://stackoverflow.com/questions/22111256/translate3d-vs-translate-performance\n this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n }\n}\n\nexport const registerDomTooltipHandler = () => {\n registerComponentPlugin(DomTooltipHandler);\n};\n","import { array, isNil, merge } from '@visactor/vutils';\nimport type { IRichTextGraphicAttribute } from '@visactor/vrender-core';\nimport type { TooltipRowAttrs, TooltipRowStyleAttrs, TooltipTextAttrs, TooltipRichTextAttrs } from './type';\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\n\nexport const mergeRowAttrs = (\n target: TooltipRowAttrs | TooltipRowStyleAttrs,\n ...sources: (TooltipRowAttrs | TooltipRowStyleAttrs)[]\n): TooltipRowAttrs | TooltipRowStyleAttrs => {\n const shapeList = [target.shape, ...sources.map(s => s?.shape)];\n const keyList = [target.key, ...sources.map(s => s?.key)];\n const valueList = [target.value, ...sources.map(s => s?.value)];\n\n return merge(target, ...sources, {\n shape: shapeList.every(isNil) ? undefined : merge({}, ...shapeList),\n key: keyList.every(isNil) ? undefined : merge({}, ...keyList),\n value: valueList.every(isNil) ? undefined : merge({}, ...valueList)\n }) as TooltipRowAttrs | TooltipRowStyleAttrs;\n};\n\nexport const getRichTextAttribute = (attr: TooltipTextAttrs): IRichTextGraphicAttribute => {\n const { width, height, wordBreak = 'break-word', textAlign, textBaseline, text } = attr;\n if (Array.isArray(text)) {\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: array(text as string[]).map(\n text =>\n ({\n ...attr,\n text\n } as any)\n )\n };\n }\n return {\n width,\n height,\n wordBreak: wordBreak as any,\n textAlign: textAlign as any,\n textBaseline: textBaseline as any,\n singleLine: false,\n textConfig: (text as TooltipRichTextAttrs)?.text as IRichTextCharacter[]\n };\n};\n","import { AABBBounds } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY } from '../constant';\nimport { TooltipAttributes } from './type';\n\nexport const defaultAttributes: Partial = {\n panel: {\n visible: true,\n cornerRadius: [3, 3, 3, 3],\n fill: 'white',\n shadow: true,\n shadowBlur: 12,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowSpread: 0,\n stroke: 'white'\n },\n titleStyle: {\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 14,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle'\n },\n spaceRow: 6\n },\n contentStyle: {\n shape: {\n fill: 'black',\n size: 8,\n symbolType: 'circle',\n spacing: 6\n },\n key: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'left',\n textBaseline: 'middle',\n spacing: 26\n },\n value: {\n fill: '#4E5969',\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: 12,\n lineHeight: 18,\n textAlign: 'right',\n textBaseline: 'middle',\n spacing: 0\n },\n spaceRow: 6\n },\n padding: 10,\n positionX: 'right',\n positionY: 'bottom',\n offsetX: 10,\n offsetY: 10,\n parentBounds: new AABBBounds().setValue(\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY\n ),\n autoCalculatePosition: true,\n autoMeasure: true,\n\n pickable: false,\n childrenPickable: false,\n zIndex: 500\n};\n\nexport const TOOLTIP_POSITION_ATTRIBUTES = [\n 'pointerX',\n 'pointerY',\n 'offsetX',\n 'offsetY',\n 'positionX',\n 'positionY',\n 'parentBounds'\n];\n","import { registerGroup, registerRect, registerRichtext, registerSymbol, registerText } from '@visactor/vrender-kits';\n\nexport function loadTooltipComponent() {\n registerGroup();\n registerRect();\n registerSymbol();\n registerText();\n registerRichtext();\n}\n","/**\n * @description 标题组件\n */\nimport type {\n IGroup,\n IText,\n IRichText,\n IRect,\n ISymbol,\n ITextGraphicAttribute,\n TextAlignType\n} from '@visactor/vrender-core';\nimport { builtinSymbolsMap, calculateLineHeight } from '@visactor/vrender-core';\nimport { merge, isValid, normalizePadding, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { alignTextInLine, initTextMeasure } from '../util/text';\nimport { isVisible } from '../util';\nimport type { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs, TooltipRichTextAttrs } from './type';\nimport { getRichTextAttribute, mergeRowAttrs } from './util';\nimport { defaultAttributes, TOOLTIP_POSITION_ATTRIBUTES } from './config';\nimport type { ComponentOptions } from '../interface';\nimport type { TextMeasureInput } from '@visactor/vutils';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { loadTooltipComponent } from './register';\n\nconst TOOLTIP_BACKGROUND_NAME = 'tooltip-background';\nconst TOOLTIP_TITLE_NAME = 'tooltip-title';\nconst TOOLTIP_CONTENT_NAME = 'tooltip-content';\n\nconst TOOLTIP_SHAPE_NAME_SUFFIX = 'shape';\nconst TOOLTIP_KEY_NAME_SUFFIX = 'key';\nconst TOOLTIP_VALUE_NAME_SUFFIX = 'value';\n\nloadTooltipComponent();\nexport class Tooltip extends AbstractComponent> {\n name = 'tooltip';\n\n // tooltip 背景\n private _tooltipPanel!: IRect;\n // tooltip title 容器\n private _tooltipTitleContainer!: IGroup;\n // tooltip title shape\n private _tooltipTitleSymbol!: ISymbol;\n // tooltip title 文本\n private _tooltipTitle!: IText | IRichText;\n // tooltip 内容项容器\n private _tooltipContent!: IGroup;\n\n static defaultAttributes: Partial = defaultAttributes;\n\n constructor(attributes: TooltipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tooltip.defaultAttributes, attributes), options);\n }\n\n protected render() {\n const {\n visible,\n content,\n panel,\n keyWidth,\n valueWidth,\n hasContentShape,\n autoCalculatePosition,\n autoMeasure,\n align\n } = this.attribute;\n\n if (!visible) {\n this.hideAll();\n return;\n }\n\n if (autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n if (autoCalculatePosition) {\n Tooltip.calculateTooltipPosition(this.attribute);\n }\n\n const padding = normalizePadding(this.attribute.padding);\n\n // 创建背景层\n this._tooltipPanel = this.createOrUpdateChild(\n TOOLTIP_BACKGROUND_NAME,\n {\n visible: true,\n ...panel\n },\n 'rect'\n ) as IRect;\n\n // 创建标题层\n this._tooltipTitleContainer = this.createOrUpdateChild(\n TOOLTIP_TITLE_NAME,\n { visible: true, x: padding[3], y: padding[0] },\n 'group'\n ) as IGroup;\n\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(this.attribute);\n\n // 创建标题 shape\n // 创建 symbol\n this._tooltipTitleSymbol = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n merge({ symbolType: 'circle' }, titleAttr.shape, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.shape)\n }),\n 'symbol'\n ) as ISymbol;\n\n // 文本\n if (\n typeof titleAttr.value.text === 'object' &&\n titleAttr.value.text !== null &&\n ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (titleAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else if ((titleAttr.value.text as TooltipRichTextAttrs).type === 'html') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (titleAttr.value.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...titleAttr.value\n },\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: [],\n ...(titleAttr.value as any)\n },\n 'richtext'\n ) as IRichText;\n }\n } else if (titleAttr.value.multiLine) {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n text: (titleAttr.value.text ?? '') as any,\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...titleAttr.value\n },\n 'text'\n ) as IText;\n }\n\n // 调整标题的位置\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\n const { textAlign, textBaseline } = titleAttr.value;\n const contentWidth = panel.width - padding[3] - padding[0] - titlePaddingLeft;\n if (textAlign === 'center') {\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth);\n } else {\n // 默认左对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft);\n }\n if (textBaseline === 'bottom') {\n this._tooltipTitle.setAttribute('y', titleAttr.height);\n } else if (textBaseline === 'middle') {\n this._tooltipTitle.setAttribute('y', titleAttr.height / 2);\n } else {\n this._tooltipTitle.setAttribute('y', 0);\n }\n const titleHeight = isVisible(titleAttr) ? titleAttr.height + titleAttr.spaceRow : 0;\n\n // 创建内容层\n this._tooltipContent = this.createOrUpdateChild(TOOLTIP_CONTENT_NAME, { visible: true }, 'group') as IGroup;\n this._tooltipContent.removeAllChild(true); // 清空内容区\n\n if (content && content.length) {\n this._tooltipContent.setAttribute('x', padding[3]);\n this._tooltipContent.setAttribute('y', padding[0] + titleHeight);\n\n let lastYPos = 0;\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(this.attribute, i);\n\n if (!isVisible(itemAttr)) {\n return;\n }\n\n const itemGroupName = `${TOOLTIP_CONTENT_NAME}-${i}`;\n const itemGroup = this._tooltipContent.createOrUpdateChild(\n itemGroupName,\n { visible: true, x: 0, y: lastYPos },\n 'group'\n ) as IGroup;\n\n const shapeOffsetWidth = itemAttr.shape.size + itemAttr.shape.spacing;\n let x =\n align === 'right'\n ? (hasContentShape ? shapeOffsetWidth : 0) +\n (isVisible(itemAttr.key) ? keyWidth + itemAttr.key.spacing : 0) +\n (isVisible(itemAttr.value) ? valueWidth : 0)\n : 0;\n\n this._createShape(\n align === 'right' ? x - itemAttr.shape.size / 2 : x + itemAttr.shape.size / 2,\n itemAttr,\n itemGroup,\n itemGroupName\n );\n if (hasContentShape) {\n if (align === 'right') {\n x -= shapeOffsetWidth;\n } else {\n x += shapeOffsetWidth;\n }\n }\n\n const keyGraphic = this._createKey(itemAttr, itemGroup, itemGroupName);\n\n if (keyGraphic) {\n alignTextInLine(align, keyGraphic, itemAttr.key.textAlign, x, keyWidth);\n keyGraphic.setAttribute('y', 0);\n if (align === 'right') {\n x -= keyWidth + itemAttr.key.spacing;\n } else {\n x += keyWidth + itemAttr.key.spacing;\n }\n }\n const valueGraphic = this._createValue(itemAttr, itemGroup, itemGroupName);\n if (valueGraphic) {\n let textAlign: TextAlignType = 'right';\n\n if (isValid(itemAttr.value.textAlign)) {\n textAlign = itemAttr.value.textAlign;\n } else if (!isVisible(itemAttr.key) && align !== 'right') {\n textAlign = 'left';\n }\n valueGraphic.setAttribute('textAlign', textAlign);\n alignTextInLine(align, valueGraphic, textAlign, x, valueWidth);\n valueGraphic.setAttribute('y', 0);\n }\n\n lastYPos += itemAttr.height + itemAttr.spaceRow;\n });\n }\n }\n\n protected _createShape(\n x: number,\n itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs,\n itemGroup: IGroup,\n itemGroupName: string\n ) {\n if (isVisible(itemAttr.shape)) {\n // 存在 symbol\n return itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n {\n visible: true,\n x: x,\n y:\n itemAttr.shape.size / 2 +\n ((calculateLineHeight(itemAttr.key.lineHeight, itemAttr.key.fontSize) ?? itemAttr.key.fontSize) -\n itemAttr.shape.size) /\n 2,\n ...itemAttr.shape\n },\n 'symbol'\n ) as ISymbol;\n }\n\n return;\n }\n\n protected _createKey(itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs, itemGroup: IGroup, itemGroupName: string) {\n if (isVisible(itemAttr.key)) {\n let element: IRichText | IText;\n if (itemAttr.key.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.key.text === 'object' &&\n itemAttr.key.text !== null &&\n ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.key.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.key.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.key.text as TooltipRichTextAttrs).text as string,\n ...DEFAULT_HTML_TEXT_SPEC,\n ...itemAttr.key\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.key.text ?? '') as any,\n ...itemAttr.key,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n return element;\n }\n return;\n }\n\n protected _createValue(itemAttr: TooltipRowAttrs & TooltipRowStyleAttrs, itemGroup: IGroup, itemGroupName: string) {\n if (isVisible(itemAttr.value)) {\n let element: IRichText | IText;\n if (itemAttr.value.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else if (\n typeof itemAttr.value.text === 'object' &&\n itemAttr.value.text !== null &&\n ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich' ||\n (itemAttr.value.text as TooltipRichTextAttrs).type === 'html')\n ) {\n if ((itemAttr.value.text as TooltipRichTextAttrs).type === 'rich') {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: (itemAttr.value.text as TooltipRichTextAttrs).text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...itemAttr.value\n }\n },\n 'richtext'\n ) as IRichText;\n }\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n text: (itemAttr.value.text ?? '') as any,\n ...itemAttr.value,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\n\n return element;\n }\n\n return;\n }\n\n setAttributes(params: Partial>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof TooltipAttributes)[];\n // 优化:只更改 tooltip 位置\n if (this.attribute.autoCalculatePosition && keys.every(key => TOOLTIP_POSITION_ATTRIBUTES.includes(key))) {\n this._mergeAttributes(params, keys);\n // 计算 x y\n if (isNil(this.attribute.panel.width) && this.attribute.autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n Tooltip.calculateTooltipPosition(this.attribute);\n // 应用 x y\n super.setAttributes(\n {\n x: this.attribute.x,\n y: this.attribute.y\n },\n forceUpdateTag\n );\n } else {\n super.setAttributes(params, forceUpdateTag);\n }\n }\n\n static calculateTooltipPosition(attribute: Partial): Partial {\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = attribute.panel;\n\n const { offsetX, offsetY, pointerX, pointerY, positionX, positionY, parentBounds } = attribute;\n\n let x = pointerX;\n let y = pointerY;\n if (positionX === 'left') {\n x -= tooltipBoxWidth + offsetX;\n } else if (positionX === 'center') {\n x -= tooltipBoxWidth / 2;\n } else {\n x += offsetX;\n }\n if (positionY === 'top') {\n y -= tooltipBoxHeight + offsetY;\n } else if (positionY === 'middle') {\n y -= tooltipBoxHeight / 2;\n } else {\n y += offsetY;\n }\n\n /* 确保tooltip在视区内 */\n if (x + tooltipBoxWidth > parentBounds.x2) {\n // 位置不超出视区右界\n x -= tooltipBoxWidth + offsetX;\n }\n if (y + tooltipBoxHeight > parentBounds.y2) {\n // 位置不超出视区下界\n y -= tooltipBoxHeight + offsetY;\n }\n if (x < parentBounds.x1) {\n // 位置不超出视区左界\n x = parentBounds.x1;\n }\n if (y < parentBounds.y1) {\n // 位置不超出视区上界\n y = parentBounds.y1;\n }\n\n attribute.x = x;\n attribute.y = y;\n\n return attribute;\n }\n\n static measureTooltip(attribute: Partial): Partial {\n const { content, contentStyle } = attribute;\n const padding = normalizePadding(attribute.padding);\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(attribute);\n\n let maxWidth = 0;\n let containerHeight = padding[0] + padding[2];\n\n // calculate title\n let titleMaxHeight = 0;\n const { value: titleValue, shape: titleShape } = titleAttr;\n const { visible: titleHasShape = false, symbolType: titleShapeType = '' } = titleShape ?? {};\n\n if (isValid(titleValue) && typeof titleAttr.value.text !== 'object') {\n const { width, height } = initTextMeasure(titleValue as Partial).quickMeasure(\n titleValue.text as TextMeasureInput\n );\n maxWidth = width;\n titleMaxHeight = height;\n }\n if (titleHasShape && builtinSymbolsMap[titleShapeType]) {\n maxWidth += titleShape.size + titleShape.spacing;\n titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);\n }\n\n if (attribute.title) {\n attribute.title.width = maxWidth;\n attribute.title.height = titleMaxHeight;\n }\n\n if (isVisible(titleAttr)) {\n containerHeight += titleMaxHeight + titleAttr.spaceRow;\n }\n\n // calculate content\n if (content && content.length) {\n // filter content\n const filteredContent: [TooltipRowAttrs, TooltipRowAttrs][] = [];\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(attribute, i);\n if ((item.key || item.value) && isVisible(itemAttr)) {\n filteredContent.push([item, itemAttr]);\n }\n });\n\n if (filteredContent.length) {\n let hasContentShape = false;\n const shapeWidths: number[] = [];\n const keyWidths: number[] = [];\n const valueWidths: number[] = [];\n\n filteredContent.forEach(([item, itemAttr], i) => {\n const { key, value, shape, spaceRow } = itemAttr;\n const itemHasShape = isVisible(shape);\n const itemShapeType = shape?.symbolType ?? '';\n\n const keyTextMeasure = initTextMeasure(key as Partial);\n const valueTextMeasure = initTextMeasure(value as Partial);\n\n let itemHeight = 0;\n if (isVisible(key)) {\n const { width, height } = keyTextMeasure.quickMeasure(key.text as TextMeasureInput);\n keyWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (isVisible(value)) {\n const { width, height } = valueTextMeasure.quickMeasure(value.text as TextMeasureInput);\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (itemHasShape && builtinSymbolsMap[itemShapeType]) {\n hasContentShape = true;\n shapeWidths.push(shape.size);\n itemHeight = Math.max(shape.size, itemHeight);\n }\n\n item.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += spaceRow ?? contentStyle.spaceRow;\n }\n });\n\n const maxShapeWidth = shapeWidths.length ? Math.max(...shapeWidths) : 0; // shape 需要对齐\n const maxKeyWidth = keyWidths.length ? Math.max(...keyWidths) : 0; // name 需要对齐\n const maxValueWidth = valueWidths.length ? Math.max(...valueWidths) : 0; // value 需要对齐\n maxWidth = Math.max(\n maxKeyWidth +\n maxValueWidth +\n contentStyle.key.spacing +\n contentStyle.value.spacing +\n (hasContentShape ? maxShapeWidth + contentStyle.shape.spacing : 0),\n maxWidth\n );\n content.forEach(item => {\n item.width = maxWidth;\n });\n attribute.hasContentShape = hasContentShape;\n attribute.keyWidth = maxKeyWidth;\n attribute.valueWidth = maxValueWidth;\n }\n }\n\n attribute.panel.width = maxWidth + padding[1] + padding[3];\n attribute.panel.height = containerHeight;\n\n return attribute;\n }\n\n static getTitleAttr(attribute: Partial): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs(\n {},\n Tooltip.defaultAttributes.titleStyle,\n Tooltip.defaultAttributes.title,\n attribute.titleStyle,\n attribute.title\n );\n }\n\n static getContentAttr(attribute: Partial, index: number): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs({}, Tooltip.defaultAttributes.contentStyle, attribute.contentStyle, attribute.content[index]);\n }\n}\n","import type {\n TooltipPanelAttrs,\n TooltipRowAttrs,\n TooltipRowStyleAttrs,\n TooltipSymbolAttrs,\n TooltipTextAttrs,\n TooltipRichTextAttrs\n} from '@visactor/vrender-components';\nimport type { IPadding, ITooltipActual, MaybeArray } from '../../../../typings';\nimport type { ITooltipAttributes, ITooltipTextStyle } from '../interface';\nimport { isValid, maxInArray, normalizePadding } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { normalizeLayoutPaddingSpec } from '../../../../util/space';\nimport type { ITheme } from '../../../../theme';\nimport type { ITooltipSpec, ITooltipTextTheme, ITooltipTheme } from '../../../../component/tooltip';\nimport { token } from '../../../../theme/token';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRichTextBounds } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter, IRichTextParagraphCharacter } from '@visactor/vrender-core';\n\nconst DEFAULT_TEXT_ATTRIBUTES: Partial = {\n fontFamily: token.fontFamily,\n spacing: 10,\n wordBreak: 'break-word'\n};\n\ninterface ITooltipTextInfo {\n width: number;\n height: number;\n text: MaybeArray | MaybeArray | TooltipRichTextAttrs;\n}\n\n/** 测量 tooltip 标签文本 */\nexport const measureTooltipText = (text: string | TooltipRichTextAttrs, style: ITooltipTextStyle): ITooltipTextInfo => {\n let textLines: string[] | TooltipRichTextAttrs;\n let textConfig: IRichTextCharacter[];\n if (!((text as TooltipRichTextAttrs)?.type === 'rich' || (text as TooltipRichTextAttrs)?.type === 'html')) {\n text = (text ?? '').toString();\n if (style.multiLine) {\n textLines = text.split('\\n');\n textLines = textLines.map((line, i) => (i < (textLines as string[]).length - 1 ? line + '\\n' : line));\n } else {\n textLines = [text];\n }\n textConfig = textLines.map(\n line =>\n ({\n ...style,\n text: line\n } as unknown as IRichTextParagraphCharacter)\n );\n } else {\n textConfig = (text as TooltipRichTextAttrs).text as IRichTextCharacter[];\n textLines = text as TooltipRichTextAttrs;\n }\n\n const bound = getRichTextBounds({\n wordBreak: (style as any).wordBreak ?? 'break-word',\n maxWidth: style.maxWidth ? style.maxWidth : undefined,\n width: 0,\n height: 0,\n textConfig: textConfig\n });\n return {\n width: bound.width(),\n height: bound.height(),\n text: textLines\n };\n};\n\nexport function getTextAttributes(\n style: ITooltipTextTheme = {},\n globalTheme?: ITheme,\n defaultAttributes?: Partial\n): ITooltipTextStyle {\n const attrs: ITooltipTextStyle = {\n ...(defaultAttributes ?? DEFAULT_TEXT_ATTRIBUTES),\n fill: (style.fill ?? style.fontColor) as string,\n textAlign: style.textAlign,\n textBaseline: style.textBaseline,\n fontFamily: style.fontFamily ?? (globalTheme?.fontFamily as string),\n fontSize: style.fontSize as number,\n fontWeight: style.fontWeight,\n lineHeight: style.lineHeight as number,\n spacing: style.spacing,\n multiLine: style.multiLine,\n maxWidth: style.maxWidth,\n wordBreak: style.wordBreak,\n autoWidth: style.autoWidth\n };\n return attrs;\n}\n\nexport const getPanelAttributes = (style: ITooltipTheme['panel']): TooltipPanelAttrs => {\n const { backgroundColor, border, shadow } = style;\n const panelAttrs: TooltipPanelAttrs = {\n lineWidth: border?.width ?? 0,\n shadow: !!shadow\n };\n if (border?.color) {\n panelAttrs.stroke = border.color as string;\n }\n if (backgroundColor) {\n panelAttrs.fill = backgroundColor as string;\n }\n if (shadow) {\n panelAttrs.shadowColor = shadow.color as string;\n panelAttrs.shadowBlur = shadow.blur;\n panelAttrs.shadowOffsetX = shadow.x;\n panelAttrs.shadowOffsetY = shadow.y;\n panelAttrs.shadowSpread = shadow.spread;\n }\n const { radius } = border ?? {};\n if (isValid(radius)) {\n panelAttrs.cornerRadius = [radius, radius, radius, radius];\n }\n return panelAttrs;\n};\n\nexport const getTooltipAttributes = (\n actualTooltip: ITooltipActual,\n spec: ITooltipSpec,\n globalTheme: ITheme\n): ITooltipAttributes => {\n const { style = {}, enterable, transitionDuration } = spec;\n const { panel = {}, titleLabel, shape, keyLabel, valueLabel, spaceRow: commonSpaceRow, align } = style;\n const padding = normalizePadding(panel.padding);\n const paddingSpec = normalizeLayoutPaddingSpec(panel.padding) as IPadding;\n\n const titleStyle = getTextAttributes(\n {\n textAlign: align === 'right' ? 'right' : 'left',\n ...titleLabel\n },\n globalTheme\n );\n const keyStyle = getTextAttributes(\n {\n textAlign: align === 'right' ? 'right' : 'left',\n ...keyLabel\n },\n globalTheme\n );\n const valueStyle = getTextAttributes(valueLabel, globalTheme);\n const shapeStyle: TooltipRowStyleAttrs['shape'] = {\n fill: true,\n size: shape?.size ?? 8,\n spacing: shape?.spacing ?? 6\n };\n\n const attributes: ITooltipAttributes = {\n panel: getPanelAttributes(panel),\n padding,\n\n title: {},\n content: [],\n\n titleStyle: {\n value: titleStyle,\n spaceRow: commonSpaceRow\n },\n contentStyle: {\n shape: shapeStyle,\n key: keyStyle,\n value: valueStyle,\n spaceRow: commonSpaceRow\n },\n hasContentShape: false,\n keyWidth: 0,\n valueWidth: 0,\n\n enterable,\n transitionDuration,\n align\n };\n\n const { title = {}, content = [] } = actualTooltip;\n\n let panelWidth = paddingSpec.left + paddingSpec.right;\n let panelHeight = paddingSpec.top + paddingSpec.bottom;\n\n // calculate content\n let contentMaxWidth = 0;\n\n const hasContent = !!content.length;\n let maxKeyWidth = 0;\n let maxAdaptiveKeyWidth = 0;\n let maxValueWidth = 0;\n let maxShapeWidth = 0;\n\n if (hasContent) {\n const keyWidths: number[] = [];\n const adaptiveKeyWidths: number[] = [];\n const valueWidths: number[] = [];\n const shapeWidths: number[] = [];\n\n let contentHeight = 0;\n attributes.content = content.map((item, i) => {\n let itemHeight = 0;\n const {\n hasShape: actualHasShape,\n key: actualKey,\n shapeType: actualShapeType = '',\n shapeFill: actualShapeFill,\n shapeStroke: actualShapeStroke,\n shapeLineWidth: actualShapeLineWidth,\n shapeSize: actualShapeSize,\n value: actualValue,\n isKeyAdaptive: actualIsKeyAdaptive,\n spaceRow: actualSpaceRow,\n keyStyle: actualKeyStyle,\n valueStyle: actualValueStyle,\n shapeHollow: actualShapeHollow\n } = item;\n const itemAttrs: TooltipRowAttrs = { height: 0, spaceRow: actualSpaceRow ?? commonSpaceRow };\n if (isValid(actualKey)) {\n const itemKeyStyle: ITooltipTextStyle = mergeSpec(\n {},\n keyStyle,\n getTextAttributes(actualKeyStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualKey, itemKeyStyle);\n itemAttrs.key = {\n width,\n height,\n ...itemKeyStyle,\n text\n };\n if (!actualIsKeyAdaptive) {\n keyWidths.push(width);\n } else {\n adaptiveKeyWidths.push(width);\n }\n itemHeight = Math.max(itemHeight, height);\n }\n if (isValid(actualValue)) {\n const itemValueStyle: ITooltipTextStyle = mergeSpec(\n {},\n valueStyle,\n getTextAttributes(actualValueStyle, undefined, {})\n );\n const { width, height, text } = measureTooltipText(actualValue, itemValueStyle);\n itemAttrs.value = {\n width,\n height,\n ...itemValueStyle,\n text\n };\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (actualHasShape) {\n const shape: TooltipSymbolAttrs = {\n visible: true,\n symbolType: actualShapeType\n };\n if (actualShapeHollow) {\n shape.stroke = actualShapeFill;\n } else {\n shape.fill = actualShapeFill;\n }\n shape.stroke = actualShapeStroke ?? actualShapeFill;\n shape.lineWidth = actualShapeLineWidth;\n itemAttrs.shape = shape;\n\n const shapeWidth = actualShapeSize ?? shapeStyle.size;\n itemHeight = Math.max(shapeWidth, itemHeight);\n shapeWidths.push(shapeWidth);\n } else {\n itemAttrs.shape = { visible: false };\n }\n\n itemAttrs.height = itemHeight;\n contentHeight += itemHeight;\n if (i < content.length - 1) {\n contentHeight += itemAttrs.spaceRow;\n }\n\n return itemAttrs;\n });\n panelHeight += contentHeight;\n\n maxKeyWidth = keyWidths.length ? maxInArray(keyWidths) : 0; // name 需要对齐\n maxAdaptiveKeyWidth = adaptiveKeyWidths.length ? maxInArray(adaptiveKeyWidths) : 0;\n maxValueWidth = valueWidths.length ? maxInArray(valueWidths) : 0; // value 需要对齐\n maxShapeWidth = shapeWidths.length ? maxInArray(shapeWidths) + shapeStyle.spacing : 0; // shape 列宽度\n contentMaxWidth = Math.max(\n maxShapeWidth + maxKeyWidth + keyStyle.spacing + maxValueWidth + valueStyle.spacing,\n maxShapeWidth + maxAdaptiveKeyWidth,\n contentMaxWidth\n );\n attributes.hasContentShape = !!shapeWidths.length;\n attributes.keyWidth = maxKeyWidth;\n attributes.valueWidth = maxValueWidth;\n }\n\n // calculate title\n let titleMaxWidth = 0;\n let titleMaxHeight = 0;\n let titleHeightWithSpace = 0;\n const {\n visible: actualTitleVisible = true,\n value: actualTitleValue = '',\n valueStyle: actualTitleValueStyle,\n spaceRow: actualTitleSpaceRow\n } = title;\n attributes.title.visible = actualTitleVisible;\n attributes.title.spaceRow = actualTitleSpaceRow ?? commonSpaceRow;\n\n let titleValueStyle: ITooltipTextStyle = {};\n // 当前是否处于自适应宽度模式\n const isAutoWidthMode = () => titleValueStyle.autoWidth && titleValueStyle.multiLine !== false;\n if (actualTitleVisible) {\n titleValueStyle = mergeSpec({}, titleStyle, getTextAttributes(actualTitleValueStyle, undefined, {}));\n // 标题默认优化策略:如果 autoWidth 为 true,则宽度默认跟随 content 宽度并开启自动换行\n if (isAutoWidthMode()) {\n titleValueStyle.multiLine = titleValueStyle.multiLine ?? true;\n titleValueStyle.maxWidth = titleValueStyle.maxWidth ?? (hasContent ? Math.ceil(contentMaxWidth) : undefined);\n }\n\n const { text, width, height } = measureTooltipText(actualTitleValue, titleValueStyle);\n attributes.title.value = {\n width: isAutoWidthMode() ? Math.min(width, titleValueStyle.maxWidth ?? Number.MAX_VALUE) : width,\n height,\n ...titleValueStyle,\n text\n };\n titleMaxWidth = attributes.title.value.width;\n titleMaxHeight = attributes.title.value.height;\n\n titleHeightWithSpace = titleMaxHeight + (hasContent ? attributes.title.spaceRow : 0);\n }\n panelHeight += titleHeightWithSpace;\n attributes.title.width = titleMaxWidth;\n attributes.title.height = titleMaxHeight;\n\n if (isAutoWidthMode()) {\n panelWidth += contentMaxWidth ? contentMaxWidth : titleMaxWidth;\n } else {\n panelWidth += Math.max(titleMaxWidth, contentMaxWidth);\n }\n\n // 处理 content 的自动宽度模式\n if (hasContent) {\n attributes.content.forEach(item => {\n const value = item.value as ITooltipTextStyle & TooltipTextAttrs;\n // 最后一列默认自适应宽度\n if (value && (value.autoWidth ?? true)) {\n value.width =\n panelWidth -\n paddingSpec.left -\n paddingSpec.right -\n maxShapeWidth -\n maxKeyWidth -\n keyStyle.spacing -\n valueStyle.spacing;\n //value.multiLine = true; multiLine 需要用户手动开启,不会自动开启\n if (!value.maxWidth) {\n value.maxWidth = Math.ceil(value.width);\n }\n attributes.valueWidth = Math.max(attributes.valueWidth, value.width);\n }\n });\n }\n\n attributes.panel.width = panelWidth;\n attributes.panel.height = panelHeight;\n return attributes;\n};\n","import type { ILayer, INode, IStage } from '@visactor/vrender-core';\nimport { BaseTooltipHandler } from './base';\nimport { Tooltip as TooltipComponent } from '@visactor/vrender-components';\nimport { isValid, isNil } from '@visactor/vutils';\nimport type { TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport type { ITooltipActual } from '../../../typings';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { getTooltipAttributes } from './utils/attribute';\nimport type { ITooltipAttributes } from './interface';\n\n/**\n * The tooltip handler class.\n */\nexport class CanvasTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.canvas;\n readonly type = TooltipHandlerType.canvas;\n\n private _layer: ILayer;\n protected _el?: HTMLCanvasElement;\n protected _tooltipCanvasId?: string;\n protected _tooltipComponent: TooltipComponent;\n protected _attributes?: ITooltipAttributes | null = null;\n\n constructor() {\n super(CanvasTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService): void {\n super.onAdd(service);\n this._tooltipCanvasId = (this._chartOption.modeParams as any)?.tooltipCanvasId;\n }\n\n private _initTooltipComponent(stage: IStage) {\n const layer = this._getLayer(stage);\n this._tooltipComponent = new TooltipComponent({\n autoCalculatePosition: false,\n autoMeasure: false\n });\n layer.add(this._tooltipComponent as unknown as INode);\n }\n\n private _getLayer(stage: IStage) {\n if (this._layer) {\n return this._layer;\n }\n\n this._layer = stage.createLayer(this._tooltipCanvasId);\n\n // 需要关闭 layer 对应的 canvas 的事件\n const layerCanvas = this._layer.layerHandler.canvas.nativeCanvas as HTMLCanvasElement;\n // TODO:待 vrender 支持\n if (layerCanvas && layerCanvas.style) {\n layerCanvas.style.touchAction = 'none';\n layerCanvas.style.pointerEvents = 'none';\n }\n\n return this._layer;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!changePositionOnly || isNil(this._attributes)) {\n const chartTheme = this._chartOption?.getTheme() ?? {};\n this._attributes = getTooltipAttributes(actualTooltip, this._component.getSpec(), chartTheme);\n }\n const { panel } = this._attributes ?? {};\n // canvas模式下, size需要考虑border size, 目的是为了精准判断边界是否超出画布,达到confine效果\n // html模式不提供confine, 所以不考虑精准计算size\n\n return {\n width: panel.width + panel.lineWidth,\n height: panel.height + panel.lineWidth\n };\n }\n\n protected _removeTooltip() {\n if (this._layer) {\n this._layer.removeAllChild();\n // this._layer.render();\n }\n this._attributes = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n this._visible = visible;\n\n const stage = this._compiler.getStage();\n if (!stage) {\n return;\n }\n\n if (!visible) {\n if (this._tooltipComponent && this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.hideAll();\n this._tooltipComponent.setAttributes({\n visibleAll: false\n });\n }\n return;\n }\n\n if (!this._tooltipComponent) {\n this._initTooltipComponent(stage);\n }\n\n const { activeTooltipSpec } = params;\n const pos = activeTooltipSpec.position;\n if (!params.changePositionOnly) {\n this._tooltipComponent.setAttributes({\n ...this._attributes,\n ...pos\n });\n } else if (isValid(pos)) {\n this._tooltipComponent.setAttributes(pos);\n }\n\n if (!this._tooltipComponent.attribute.visible) {\n this._tooltipComponent.showAll();\n this._tooltipComponent.setAttributes({\n visibleAll: true\n });\n }\n }\n\n isTooltipShown() {\n return this._tooltipComponent?.attribute.visibleAll;\n }\n\n release() {\n super.release();\n this._layer?.release();\n }\n}\n\nexport const registerCanvasTooltipHandler = () => {\n registerComponentPlugin(CanvasTooltipHandler);\n};\n","import { Logger } from '../../logger';\n\nexport interface IFormatSpecifier {\n fill?: string | undefined;\n align?: string | undefined;\n sign?: string | undefined;\n symbol?: string | undefined;\n zero?: string | undefined;\n width?: string | undefined;\n comma?: string | undefined;\n precision?: string | undefined;\n trim?: string | undefined;\n type?: string | undefined;\n}\n\nexport class FormatSpecifier {\n fill;\n align;\n sign;\n symbol;\n zero;\n width;\n comma;\n precision;\n trim;\n type;\n\n constructor(specifier: IFormatSpecifier = {}) {\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\n toString() {\n return (\n 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 }\n}\n\nexport const numberSpecifierReg = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport function formatSpecifier(specifier: string) {\n let match;\n if (!(match = numberSpecifierReg.exec(specifier))) {\n Logger.getInstance().error('invalid format: ' + specifier);\n return;\n }\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","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatDecimal(x: number) {\n return Math.abs((x = Math.round(x))) >= 1e21 ? x.toLocaleString('en').replace(/,/g, '') : x.toString(10);\n}\n\nexport function formatDecimalParts(x: number, p?: number): [string, number] | null {\n const _x = p ? x.toExponential(p - 1) : x.toExponential();\n const i = _x.indexOf('e');\n if (i < 0) {\n return null; // NaN, ±Infinity\n }\n const coefficient = _x.slice(0, i);\n\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +_x.slice(i + 1)];\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatGroup(grouping: number[], thousands: string) {\n return function (value: string, width: number) {\n let i = value.length;\n const t = [];\n let j = 0;\n let g = grouping[0];\n let length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) {\n g = Math.max(1, width - length);\n }\n t.push(value.substring((i -= g), i + g));\n if ((length += g + 1) > width) {\n break;\n }\n g = grouping[(j = (j + 1) % grouping.length)];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nimport { formatDecimalParts } from './formatDecimal';\n\nexport function formatRounded(x: number, p: number) {\n const d = formatDecimalParts(x, p);\n if (!d) {\n return x + '';\n }\n const coefficient = d[0];\n const exponent = d[1];\n return exponent < 0\n ? '0.' + new Array(-exponent).join('0') + coefficient\n : coefficient.length > exponent + 1\n ? coefficient.slice(0, exponent + 1) + '.' + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join('0');\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\nexport function formatTrim(s: string) {\n const n = s.length;\n let i0 = -1;\n let i1;\n out: for (let i = 1; i < n; ++i) {\n switch (s[i]) {\n case '.':\n i0 = i1 = i;\n break;\n case '0':\n if (i0 === 0) {\n i0 = i;\n }\n i1 = i;\n break;\n default:\n if (!+s[i]) {\n break out;\n }\n if (i0 > 0) {\n i0 = 0;\n }\n break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-format\n * Licensed under the ISC\n\n * License: https://github.com/d3/d3-format/blob/main/LICENSE\n * @license\n */\n\nimport { formatDecimal, formatDecimalParts } from './formatDecimal';\nimport { formatGroup } from './formatGroup';\nimport { formatPrefixAuto, prefixExponent } from './formatPrefixAuto';\nimport { formatRounded } from './formatRounded';\nimport { formatTrim } from './formatTrim';\nimport { formatSpecifier } from './specifier';\n\nexport interface FormatLocale {\n thousands: string;\n grouping: number[];\n currency: [string, string];\n numerals?: string[] | undefined;\n percent?: string | undefined;\n minus?: string | undefined;\n nan?: string | undefined;\n decimal?: string;\n}\n\nconst prefixes = ['y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\n\nexport class NumberUtil {\n private locale: FormatLocale = {\n thousands: ',',\n grouping: [3],\n currency: ['$', '']\n };\n\n private group =\n this.locale.grouping === undefined || this.locale.thousands === undefined\n ? (group: any) => group\n : formatGroup([...this.locale.grouping].map(Number), `${this.locale.thousands}`);\n private currencyPrefix = this.locale.currency === undefined ? '' : this.locale.currency[0] + '';\n private currencySuffix = this.locale.currency === undefined ? '' : this.locale.currency[1] + '';\n private decimal = this.locale.decimal === undefined ? '.' : this.locale.decimal + '';\n private numerals =\n this.locale.numerals === undefined\n ? (numerals: any) => numerals\n : formatNumerals([...this.locale.numerals].map(String));\n private percent = this.locale.percent === undefined ? '%' : this.locale.percent + '';\n private minus = this.locale.minus === undefined ? '−' : this.locale.minus + '';\n private nan = this.locale.nan === undefined ? 'NaN' : this.locale.nan + '';\n\n private static instance: NumberUtil;\n\n static getInstance(): NumberUtil {\n if (!NumberUtil.instance) {\n NumberUtil.instance = new NumberUtil();\n }\n return NumberUtil.instance;\n }\n\n private newFormat(specifier: string) {\n const specifierIns = formatSpecifier(specifier);\n\n let fill = specifierIns.fill;\n let align = specifierIns.align;\n const sign = specifierIns.sign;\n const symbol = specifierIns.symbol;\n let zero = specifierIns.zero;\n const width = specifierIns.width;\n let comma = specifierIns.comma;\n let precision = specifierIns.precision;\n let trim = specifierIns.trim;\n let type = specifierIns.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === 'n') {\n (comma = true), (type = 'g');\n }\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n // @ts-ignore\n else if (!formatTypes[type]) {\n precision === undefined && (precision = 12), (trim = true), (type = 'g');\n }\n\n // If zero fill is specified, padding goes after sign and before digits.\n // @ts-ignore\n if (zero || (fill === '0' && align === '=')) {\n (zero = true), (fill = '0'), (align = '=');\n }\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n const prefix =\n symbol === '$' ? this.currencyPrefix : symbol === '#' && /[boxX]/.test(type) ? '0' + type.toLowerCase() : '';\n const suffix = symbol === '$' ? this.currencySuffix : /[%p]/.test(type) ? this.percent : '';\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n const formatType = formatTypes[type];\n const maybeSuffix = /[defgprstz%]/.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 =\n precision === undefined\n ? 6\n : /[gprs]/.test(type)\n ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n const { nan, minus, decimal, group, numerals } = this;\n\n function format(value: number) {\n let valuePrefix = prefix;\n let valueSuffix = suffix;\n let i;\n let n;\n let c;\n let _value: any = value;\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 let 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) {\n _value = formatTrim(_value);\n }\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 !== '+') {\n valueNegative = false;\n }\n\n // Compute the prefix and suffix.\n valuePrefix =\n (valueNegative ? (sign === '(' ? sign : minus) : sign === '-' || sign === '(' ? '' : sign) + valuePrefix;\n valueSuffix =\n (type === 's' ? prefixes[8 + prefixExponent / 3] : '') +\n valueSuffix +\n (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) {\n _value = group(_value, Infinity);\n }\n\n // Compute the padding.\n let length = valuePrefix.length + _value.length + valueSuffix.length;\n let 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) {\n _value = group(padding + _value, padding.length ? width - valueSuffix.length : Infinity);\n padding = '';\n }\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case '<':\n _value = valuePrefix + _value + valueSuffix + padding;\n break;\n case '=':\n _value = valuePrefix + padding + _value + valueSuffix;\n break;\n case '^':\n _value =\n padding.slice(0, (length = padding.length >> 1)) +\n valuePrefix +\n _value +\n valueSuffix +\n padding.slice(length);\n break;\n default:\n _value = padding + valuePrefix + _value + valueSuffix;\n break;\n }\n return numerals(_value);\n }\n\n format.toString = function () {\n return specifier + '';\n };\n\n return format;\n }\n\n private _formatPrefix(specifier: string, value: number) {\n const _specifier = formatSpecifier(specifier);\n _specifier.type = 'f';\n const f = this.newFormat(_specifier.toString());\n const e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3;\n const k = Math.pow(10, -e);\n const prefix = prefixes[8 + e / 3];\n return function (value: number) {\n return f(k * value) + prefix;\n };\n }\n\n formatter = (specifier: string) => {\n return this.newFormat(specifier);\n };\n\n format = (specifier: string, value: number) => {\n return this.formatter(specifier)(value);\n };\n\n formatPrefix = (specifier: string, value: number) => {\n return this._formatPrefix(specifier, value);\n };\n}\n\nexport const formatTypes = {\n '%': (x: number, p: number) => (x * 100).toFixed(p),\n b: (x: number) => Math.round(x).toString(2),\n c: (x: number) => x + '',\n d: formatDecimal,\n f: (x: number, p: number) => x.toFixed(p),\n e: (x: number, p: number) => x.toExponential(p),\n g: (x: number, p: number) => x.toPrecision(p),\n o: (x: number) => Math.round(x).toString(8),\n p: (x: number, p: number) => formatRounded(x * 100, p),\n r: formatRounded,\n s: formatPrefixAuto,\n X: (x: number) => Math.round(x).toString(16).toUpperCase(),\n x: (x: number) => Math.round(x).toString(16),\n t: (x: number, p: number) => {\n // 判断是否为整数\n if (Number.isInteger(x)) {\n return x.toFixed(2);\n }\n return Math.floor(x * Math.pow(10, p)) / Math.pow(10, p) + '';\n },\n z: (x: number, p: number) => (x % 1 === 0 ? x + '' : x.toFixed(p))\n};\n\nexport function exponent(x: number) {\n const _x = formatDecimalParts(Math.abs(x));\n return _x ? _x[1] : NaN;\n}\n\nexport function formatNumerals(numerals: string[]) {\n return function (value: string) {\n return value.replace(/[0-9]/g, (i: string) => numerals[+i]);\n };\n}\n","import { Factory } from '../../core/factory';\nimport type { IChartPluginConstructor } from './interface';\n\nexport const registerChartPlugin = (plugin: IChartPluginConstructor) => {\n Factory.registerChartPlugin(plugin.type, plugin);\n};\n","import { isFunction, isArray, TimeUtil, NumberUtil, numberSpecifierReg } from '@visactor/vutils';\n\nimport { BasePlugin } from '../../base/base-plugin';\n\nimport type { IChartPlugin, IChartPluginService } from '../interface';\nimport { Factory } from '../../../core/factory';\nimport { registerChartPlugin } from '../register';\n\nconst bracketReg = /\\{([^}]+)\\}/;\nconst bracketGReg = /\\{([^}]+)\\}/g;\n\nconst semicolonReg = /:/;\n\nexport class FormatterPlugin extends BasePlugin implements IChartPlugin {\n static readonly pluginType: 'chart' = 'chart';\n\n static readonly specKey = 'formatter';\n\n static readonly type: string = 'formatterPlugin';\n readonly type: string = 'formatterPlugin';\n\n private readonly _timeModeFormat = {\n utc: TimeUtil.getInstance().timeUTCFormat,\n local: TimeUtil.getInstance().timeFormat\n };\n\n protected _spec: {\n timeMode: 'utc' | 'local';\n customFormatter: (specifier: string, text: string | number | string[] | number[], datum: any) => string | string[];\n numericFormatter: (specifier: string, text: string | number | string[] | number[]) => string;\n timeFormatter: (specifier: string, text: string | number | string[] | number[]) => string;\n };\n\n protected _formatter = this._format;\n\n private _timeFormatter = this._timeModeFormat.local;\n private _numericFormatter = NumberUtil.getInstance().format;\n\n // used for optimize performance,avoiding repeatedly parsing same format template string,\n private _numericSpecifier = NumberUtil.getInstance().formatter;\n private _numericFormatterCache = new Map();\n private _isNumericFormatterCache = new Map();\n\n constructor() {\n super(FormatterPlugin.type);\n }\n\n onInit(service: IChartPluginService, chartSpec: any) {\n const { globalInstance } = service;\n if (!globalInstance) {\n return;\n }\n this._spec = chartSpec?.[FormatterPlugin.specKey] ?? {};\n const { timeMode, customFormatter, numericFormatter, timeFormatter } = this._spec;\n\n if (isFunction(customFormatter)) {\n this._formatter = customFormatter;\n } else {\n this._formatter = this._format.bind(this);\n if (isFunction(timeFormatter)) {\n this._timeFormatter = timeFormatter;\n } else if (timeMode && this._timeModeFormat[timeMode]) {\n this._timeFormatter = this._timeModeFormat[timeMode];\n }\n\n if (numericFormatter) {\n this._numericFormatter = numericFormatter;\n this._numericSpecifier = null;\n this._numericFormatterCache = null;\n }\n }\n Factory.registerFormatter(this._formatter);\n }\n\n protected _format(text: string | number | string[] | number[], datum: any, formatter: string | string[]) {\n if (isArray(text)) {\n return text.map((t, i) => {\n const f = isArray(formatter) ? formatter[i] : formatter;\n return f ? this._formatSingleLine(t, datum, f) : t;\n });\n }\n\n if (isArray(formatter)) {\n return formatter.map(f => this._formatSingleLine(text, datum, f));\n }\n return this._formatSingleLine(text, datum, formatter);\n }\n\n protected _formatSingleLine(text: string | number, datum: any, formatter: string) {\n let isTemplate;\n if (this._isNumericFormatterCache) {\n if (this._isNumericFormatterCache.get(formatter)) {\n isTemplate = this._isNumericFormatterCache.get(formatter);\n } else {\n isTemplate = bracketReg.test(formatter);\n this._isNumericFormatterCache.set(formatter, isTemplate);\n }\n }\n if (isTemplate) {\n const result = formatter.replace(bracketGReg, (match, key) => {\n const hasFormatter = semicolonReg.test(key);\n if (!hasFormatter) {\n const value = datum[key.trim()];\n return typeof value !== 'undefined' ? value : match;\n }\n const parts = key.split(':');\n const value = datum[parts.shift()];\n const valueFormatter = parts.join(':');\n return this._formatSingleText(value, valueFormatter);\n });\n return result;\n }\n return this._formatSingleText(text, formatter);\n }\n\n protected _formatSingleText(text: string | number, formatter: string): string | number {\n const isNumeric = numberSpecifierReg.test(formatter);\n if (isNumeric && this._numericFormatter) {\n // 内置的 formatter 逻辑,可以进行缓存性能优化\n let numericFormat;\n if (this._numericFormatterCache && this._numericSpecifier) {\n if (this._numericFormatterCache.get(formatter)) {\n numericFormat = this._numericFormatterCache.get(formatter);\n } else {\n numericFormat = this._numericSpecifier(formatter) as any;\n this._numericFormatterCache.set(formatter, numericFormat);\n }\n return numericFormat(Number(text));\n }\n return this._numericFormatter(formatter, Number(text));\n } else if (formatter.includes('%') && this._timeFormatter) {\n return this._timeFormatter(formatter, text);\n }\n return text;\n }\n\n release() {\n super.release();\n this._format = null;\n this._timeFormatter = null;\n this._numericFormatter = null;\n this._numericSpecifier = null;\n this._numericFormatterCache = null;\n this._isNumericFormatterCache = null;\n }\n}\n\nexport const registerFormatPlugin = () => {\n registerChartPlugin(FormatterPlugin);\n};\n","import { Factory } from './../core/factory';\nimport type { IImageMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IImageMark, IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { registerImageGraphic } from '@visactor/vgrammar-core';\n\nexport class ImageMark extends BaseMark implements IImageMark {\n static readonly type = MarkTypeEnum.image;\n readonly type = ImageMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n width: undefined,\n height: undefined,\n lineWidth: 0\n };\n return defaultStyle;\n }\n}\n\nexport const registerImageMark = () => {\n Factory.registerMark(ImageMark.type, ImageMark);\n registerImageGraphic();\n};\n","import { VChart } from './core';\n\nimport { registerLineChart } from './chart/line';\nimport { registerAreaChart } from './chart/area';\nimport { registerBar3dChart, registerBarChart } from './chart/bar';\nimport { registerScatterChart } from './chart/scatter';\nimport { registerMapChart } from './chart/map';\nimport { registerPie3dChart, registerPieChart } from './chart/pie';\nimport { registerRoseChart } from './chart/rose';\nimport { registerRadarChart } from './chart/radar';\nimport { registerCommonChart } from './chart/common';\nimport { registerSequenceChart } from './chart/sequence';\nimport { registerHistogram3dChart, registerHistogramChart } from './chart/histogram';\nimport { registerCircularProgressChart } from './chart/progress/circular';\nimport { registerGaugeChart } from './chart/gauge';\nimport {\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart\n} from './chart/word-cloud';\nimport { registerFunnel3dChart, registerFunnelChart } from './chart/funnel';\nimport { registerLinearProgressChart } from './chart/progress/linear';\nimport { registerRangeColumn3dChart, registerRangeColumnChart } from './chart/range-column';\nimport { registerSunburstChart } from './chart/sunburst';\nimport { registerCirclePackingChart } from './chart/circle-packing';\nimport { registerTreemapChart } from './chart/treemap';\nimport { registerWaterfallChart } from './chart/waterfall';\nimport { registerBoxplotChart } from './chart/box-plot';\nimport { registerSankeyChart } from './chart/sankey';\nimport { registerRangeAreaChart } from './chart/range-area';\nimport { registerHeatmapChart } from './chart/heatmap';\nimport { registerCorrelationChart } from './chart/correlation';\nimport {\n registerCartesianBandAxis,\n registerCartesianLinearAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerCartesianTimeAxis\n} from './component/axis/cartesian';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from './component/axis/polar';\nimport { registerContinuousLegend, registerDiscreteLegend } from './component/legend';\nimport { registerTooltip } from './component/tooltip';\nimport { registerCartesianCrossHair, registerPolarCrossHair } from './component/crosshair';\nimport { registerDataZoom, registerScrollBar } from './component/data-zoom';\nimport { registerIndicator } from './component/indicator';\nimport { registerGeoCoordinate } from './component/geo';\nimport { registerMarkLine, registerPolarMarkLine } from './component/marker/mark-line';\nimport { registerTitle } from './component/title';\nimport { registerMarkArea, registerPolarMarkArea } from './component/marker/mark-area';\nimport { registerPlayer } from './component/player';\nimport { registerLabel } from './component/label';\nimport { registerTotalLabel } from './component/label/total-label';\nimport { registerMarkPoint, registerPolarMarkPoint, registerGeoMarkPoint } from './component/marker/mark-point';\nimport { registerBrush } from './component/brush';\nimport { registerCustomMark } from './component/custom-mark';\nimport { registerMapLabel } from './component/map-label';\nimport { registerGridLayout } from './layout/grid-layout/grid-layout';\nimport { registerLayout3d } from './layout/layout3d';\nimport { registerPoptip } from './component/poptip';\nimport { registerCanvasTooltipHandler, registerDomTooltipHandler } from './plugin/components/tooltip-handler';\nimport { registerFormatPlugin } from './plugin/chart/formatter';\n\nimport {\n registerElementActive,\n registerElementActiveByLegend,\n registerElementHighlightByLegend,\n registerElementHighlightByName,\n registerElementHighlightByGroup,\n registerElementHighlightByKey\n} from './interaction';\nimport { registerAllMarks } from './mark';\nimport {\n register3DPlugin,\n registerAnimate,\n registerHtmlAttributePlugin,\n registerReactAttributePlugin\n} from './plugin/other';\n\nVChart.useRegisters([\n // charts\n registerLineChart,\n registerAreaChart,\n registerBarChart,\n registerScatterChart,\n registerPieChart,\n registerRoseChart,\n registerRadarChart,\n registerHistogramChart,\n registerMapChart,\n registerGaugeChart,\n registerWordCloudChart,\n registerWordCloudShapeChart,\n registerFunnelChart,\n registerWaterfallChart,\n registerBoxplotChart,\n registerCircularProgressChart,\n registerLinearProgressChart,\n registerRangeColumnChart,\n registerRangeAreaChart,\n registerSunburstChart,\n registerCirclePackingChart,\n registerTreemapChart,\n registerSankeyChart,\n registerHeatmapChart,\n registerSequenceChart,\n registerCorrelationChart,\n // 优化vchart-all体积, 默认不注册\n // registerLiquidChart,\n // registerVennChart,\n registerCommonChart,\n\n // 3d charts\n registerBar3dChart,\n registerPie3dChart,\n registerHistogram3dChart,\n registerFunnel3dChart,\n registerRangeColumn3dChart,\n registerWordCloud3dChart,\n registerWordCloudShape3dChart,\n\n // components\n registerCartesianLinearAxis,\n registerCartesianBandAxis,\n registerCartesianTimeAxis,\n registerCartesianLogAxis,\n registerCartesianSymlogAxis,\n registerPolarBandAxis,\n registerPolarLinearAxis,\n\n registerDiscreteLegend,\n registerContinuousLegend,\n\n registerTooltip,\n registerCartesianCrossHair,\n registerPolarCrossHair,\n\n registerDataZoom,\n registerScrollBar,\n registerIndicator,\n registerGeoCoordinate,\n\n registerMarkLine,\n registerMarkArea,\n registerMarkPoint,\n registerPolarMarkLine,\n registerPolarMarkArea,\n registerPolarMarkPoint,\n registerGeoMarkPoint,\n\n registerTitle,\n registerPlayer,\n registerLabel,\n registerTotalLabel,\n registerBrush,\n registerCustomMark,\n registerMapLabel,\n registerPoptip,\n\n // layout\n registerGridLayout,\n registerLayout3d,\n\n // mark\n registerAllMarks,\n\n // plugin\n registerDomTooltipHandler,\n registerCanvasTooltipHandler,\n registerFormatPlugin,\n\n // vgrammar interactions,\n registerElementActive,\n\n registerElementActiveByLegend,\n registerElementHighlightByLegend,\n\n registerElementHighlightByName,\n registerElementHighlightByGroup,\n registerElementHighlightByKey,\n\n // vgrammar animate,\n registerAnimate,\n registerReactAttributePlugin,\n registerHtmlAttributePlugin\n]);\n\nexport { VChart };\n","import type { IInitOption } from '@visactor/vchart';\nimport { merge } from '@visactor/vutils';\n\nexport function mergeChartOption(\n target: Partial,\n ...sources: Partial[]\n): Partial {\n const performanceHook: { [key: string]: (() => void)[] } = {};\n\n function pushHookToTemp(hooks: IInitOption['performanceHook']) {\n Object.keys(hooks).forEach((k: string) => {\n if (!performanceHook[k]) {\n performanceHook[k] = [];\n }\n // @ts-ignore\n performanceHook[k].push(hooks[k]);\n });\n }\n if (target.performanceHook) {\n pushHookToTemp(target.performanceHook);\n }\n sources.forEach(source => {\n if (!source) {\n return;\n }\n const { performanceHook, ...rest } = source;\n if (performanceHook) {\n pushHookToTemp(performanceHook);\n }\n merge(target, rest);\n });\n target.performanceHook = {};\n Object.keys(performanceHook).forEach(k => {\n // @ts-ignore\n target.performanceHook[k] = (...args) => {\n // @ts-ignore\n performanceHook[k].forEach(f => f(...args));\n };\n });\n return target;\n}\n","// Adapted from https://github.com/antvis/F2/blob/master/packages/f2/src/base/equal.ts by zengyue\n// License: https://github.com/antvis/F2/blob/master/packages/f2/LICENSE\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { isArray, isPlainObject } from '@visactor/vutils';\n\n/**\n * 所有a中的属性都和b相等,但不要求b和a相等\n * @param a\n * @param b\n * @returns\n */\nexport function allParamsEqualTo(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n // null 和 undefined\n if (a == null || b == null) {\n return false;\n }\n\n // 特殊处理NaN\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = a.length - 1; i >= 0; i--) {\n if (!allParamsEqualTo(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (!isPlainObject(a)) {\n return false;\n }\n\n const ka = Object.keys(a);\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (let i = ka.length - 1; i >= 0; i--) {\n const key = ka[i];\n if (!allParamsEqualTo((a as any)[key], b[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getDiffedParams(from: any, to: any): any {\n if (from === to) {\n return null;\n }\n const obj: any = {};\n for (const key in from) {\n if (from[key] !== to[key]) {\n obj[key] = to[key];\n }\n }\n return obj;\n}\n\nexport function isBoundsLikeEqual(a: IBoundsLike, b: IBoundsLike) {\n return a.x1 === b.x1 && a.x2 === b.x2 && a.y1 === b.y1 && a.y2 === b.y2;\n}\n","import type { IInitOption, IVChart } from '@visactor/vchart';\nimport VChart from '@visactor/vchart';\nimport type { GraphicType, IGraphic, IGroup, IRectGraphicAttribute, ITicker } from '@visactor/vrender-core';\nimport { genNumberType, parsePadding, Rect } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { Bounds, pointInAABB, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { mergeChartOption } from '../../../utils/chart';\nimport { isBoundsLikeEqual } from '../../../utils/equal';\n\nexport interface IChartGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // ClassType: any;\n vchart?: IVChart;\n mode?: IInitOption['mode'];\n modeParams?: any;\n dpr: number;\n interactive?: boolean;\n animation?: boolean;\n disableTriggerEvent: boolean;\n disableDirtyBounds: boolean;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n chartInitOptions?: any;\n enablePickBounds?: boolean;\n width: number;\n height: number;\n x?: number;\n y?: number;\n angle?: number;\n anchor?: [number, number];\n zIndex?: number;\n panel?: Partial;\n vchartBoundsMode?: 'clip' | 'auto';\n}\n\nexport const CHART_NUMBER_TYPE = genNumberType();\n\nexport class VChartGraphic extends Rect {\n type: GraphicType = 'chart' as any;\n declare attribute: IChartGraphicAttribute;\n protected _vchart: IVChart;\n\n get vchart() {\n return this._vchart;\n }\n // vchart 的实际绘图绘制位置\n // 首先 vchart.stage 会根据 stage.window.viewBoxTransform 变换第一次,这一次变化包括了\n // 1. 全局stage的缩放;2. vchart-graphic 的位置定位;3. auto 模式下的自动偏移(这个等同于位置偏移)\n // 然后 vchart.stage.defaultLayer 会根据偏移量,将图表绘制内容再偏移回来\n // 来回2次偏移的目的是,让 vchart 内容超出原是viewBox的部分,可以正常被viewBox包含并绘制\n protected _vchartAutoTranslate: { x: number; y: number } = { x: 0, y: 0 };\n get vchartAutoTranslate() {\n return this._vchartAutoTranslate;\n }\n\n // 实际渲染图表内容的 bounds\n // 只在 auto 模式下生效\n protected _displayBounds: Bounds;\n\n doUpdateAABBBounds(full?: boolean): IAABBBounds {\n if (!this._displayBounds) {\n return super.doUpdateAABBBounds(full);\n }\n this.updateAABBBoundsStamp++;\n const graphicTheme = this.getGraphicTheme();\n const bounds = this._displayBounds.clone();\n transformBoundsWithMatrix(bounds, bounds, this.transMatrix);\n // @ts-ignore\n const { boundsPadding = graphicTheme.boundsPadding } = this.attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray as number);\n }\n this.clearUpdateBoundTag();\n this._AABBBounds.copy(bounds);\n return bounds;\n }\n\n constructor(params: IChartGraphicAttribute) {\n const { panel, zIndex } = params;\n super({ ...(panel || {}), zIndex, visible: false });\n this.numberType = CHART_NUMBER_TYPE;\n // 创建chart\n const {\n spec,\n renderCanvas,\n mode,\n modeParams,\n dpr,\n interactive,\n disableTriggerEvent,\n disableDirtyBounds,\n ticker,\n chartInitOptions,\n viewBox,\n vchartBoundsMode\n } = params;\n this.attribute.viewBox = viewBox;\n this.attribute.vchartBoundsMode = vchartBoundsMode;\n this._vchart = new VChart(\n spec,\n mergeChartOption(\n {\n renderCanvas,\n mode,\n modeParams,\n canvasControled: false,\n viewBox,\n dpr,\n interactive,\n // animation: false,\n autoFit: false,\n disableTriggerEvent,\n disableDirtyBounds,\n // @ts-ignore\n ticker,\n // 只有vstory触发的render才会真的render\n beforeRender: stage => {\n const chartStage = this._vchart.getStage();\n if (!(chartStage as any)._story_needRender) {\n chartStage.pauseRender();\n stage.dirtyBounds?.union(this.globalAABBBounds);\n stage.renderNextFrame();\n }\n },\n afterRender: stage => {\n // @ts-ignore\n stage._story_needRender = false;\n stage.resumeRender();\n }\n },\n chartInitOptions ?? {}\n )\n );\n\n // 背景设置为false后,不会擦除画布内容,可以实现元素正常堆叠绘制\n const stage = this._vchart.getStage();\n // TODO stage的pauseRender支持传入count\n (stage as any)._skipRender = -Infinity;\n this._vchart.renderSync();\n if (stage) {\n stage.background = false as any;\n // 关闭交互\n // stage.pauseTriggerEvent();\n }\n stage.resumeRender();\n\n if (vchartBoundsMode === 'auto') {\n // auto 模式下,需要手动更新一下\n this.updateVChartGraphicViewBoxInAuto();\n }\n }\n\n /**\n * 判定点是否在设置 viewBox 内。设置 viewBox 会小于展示 bounds\n * @param canvasX\n * @param canvasY\n */\n pointInViewBox(canvasX: number, canvasY: number): boolean {\n const target = { x: 0, y: 0 };\n this.globalTransMatrix.transformPoint({ x: canvasX, y: canvasY }, target);\n return pointInAABB(target, this._vchart.getStage().viewBox);\n }\n\n release() {\n this._vchart && this._vchart.release();\n super.release();\n }\n\n setAttribute(key: string, value: any) {\n if (key === 'viewBox') {\n super.setAttribute('x', value.x1);\n super.setAttribute('y', value.y1);\n this.updateVChartGraphicViewBox(value);\n }\n if (key === 'spec') {\n this._vchart.updateSpecSync(value, false, {}, { reMake: true, change: true });\n } else {\n super.setAttribute(key, value);\n }\n }\n setAttributes(attrs: IChartGraphicAttribute) {\n const lastedViewBox = this.attribute.viewBox;\n super.setAttributes(attrs);\n if (attrs.viewBox) {\n this.attribute.viewBox = lastedViewBox;\n this.updateVChartGraphicViewBox(attrs.viewBox);\n }\n if (attrs.spec) {\n this._vchart.updateSpecSync(attrs.spec, false, {}, { reMake: true, change: true });\n }\n }\n\n private _getVChartGroupActualBounds(bounds: Bounds, _group: IGraphic) {\n if (_group.type !== 'group') {\n bounds.union(_group.globalAABBBounds);\n return;\n }\n // 以下是 group 的情况\n const group = _group as IGroup;\n if (group.childrenCount === 0) {\n return;\n }\n if (group.name?.startsWith('seriesGroup_')) {\n return bounds.union(group.globalAABBBounds);\n }\n if (group.attribute.clip === true && (group.attribute.width || group.attribute.height)) {\n bounds.union(group.globalAABBBounds);\n return;\n }\n group.forEachChildren(_child => {\n this._getVChartGroupActualBounds(bounds, _child as IGraphic);\n });\n }\n\n /**\n * 获取 VChart 图形的实际边界。\n * 该方法通过遍历 VChart stage的默认图层中的所有子组,计算并返回它们的边界框。\n *\n * @returns {Bounds} 返回包含所有子组边界的 Bounds 对象。\n */\n getVChartActualBounds() {\n const stage = this._vchart.getStage();\n // const layer = stage.defaultLayer;\n const root = stage.defaultLayer.getChildByName('root') as IGroup;\n const bounds = new Bounds();\n root.forEachChildren((child: IGroup) => {\n this._getVChartGroupActualBounds(bounds, child);\n });\n\n bounds.translate(-(stage.defaultLayer.attribute.x ?? 0), -(stage.defaultLayer.attribute.y ?? 0));\n return bounds;\n }\n\n updateVChartGraphicViewBox(bounds: IBoundsLike) {\n if (this.attribute.viewBox && isBoundsLikeEqual(this.attribute.viewBox, bounds)) {\n // 没有变化,不需要更新\n return;\n }\n // 先更新 viewBox\n this.attribute.viewBox = bounds;\n // 不是auto模式\n if (this.attribute.vchartBoundsMode !== 'auto') {\n // 直接更新\n this._vchart.updateViewBox(bounds);\n return;\n }\n this.updateVChartGraphicViewBoxInAuto();\n }\n\n updateVChartGraphicViewBoxInAuto() {\n // 1. 得到当前设置 viewBox 的实际渲染bounds\n const rect = this._vchart.getChart().getCanvasRect();\n const viewBoxSize = {\n width: this.attribute.viewBox.x2 - this.attribute.viewBox.x1,\n height: this.attribute.viewBox.y2 - this.attribute.viewBox.y1\n };\n // 当尺寸变化时,进行一次 resize\n if (rect.width !== viewBoxSize.width || rect.height !== viewBoxSize.height) {\n // vchart 使用当前的设置 viewBox 进行 resize\n // 这里的 resize 不期望修改viewBox\n // 但是 vchart 内 viewBox 优先级更高,所以这里的实现有点hack。\n // @ts-ignore\n this.vchart._viewBox = this.attribute.viewBox;\n // @ts-ignore\n this.vchart._option.viewBox = this.attribute.viewBox;\n // @ts-ignore\n this.vchart.getChart()._option.viewBox = this.attribute.viewBox;\n this.vchart.resize(viewBoxSize.width, viewBoxSize.height);\n }\n const rootBounds = this.getVChartActualBounds();\n // 2. 得到需要绘制全部内容时的 vchart 的 viewBox\n // 不要小于设置viewBox;\n rootBounds.union(this.attribute.viewBox);\n // 当前实际绘图内容的 bounds\n this._displayBounds = rootBounds.clone();\n // 3. 考虑到 vchart 可能会将内容绘制到 -x, -y,记录下这个偏移量\n this._vchartAutoTranslate.x = rootBounds.x1 < 0 ? rootBounds.x1 : 0;\n this._vchartAutoTranslate.y = rootBounds.y1 < 0 ? rootBounds.y1 : 0;\n // 4. 将 bounds 标准化到 0, 0, width, height\n rootBounds.translate(-this._vchartAutoTranslate.x, -this._vchartAutoTranslate.y);\n // 5. 将绘图 viewBox 更新到 vchart.stage\n // 注意不要更新到 vchart,更新到vchart会触发vchart重新布局,但是我们不需要vchart按照 viewBox_display 重新布局\n this._vchart.getStage().defaultLayer.translateTo(-this.vchartAutoTranslate.x, -this.vchartAutoTranslate.y);\n // @ts-ignore\n this._vchart._compiler._view.renderer.setViewBox(rootBounds, true);\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasRectRender } from '@visactor/vrender';\nimport type { VChartGraphic } from './vchart-graphic';\nimport { CHART_NUMBER_TYPE } from './vchart-graphic';\n\nexport const ChartRender = Symbol.for('VStoryChartRender');\nexport const ChartRenderContribution = Symbol.for('VStoryChartRenderContribution');\n\n@injectable()\nexport class VChartRender extends DefaultCanvasRectRender implements IGraphicRender {\n type: 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n drawShape(\n chart: any,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { baseOpacity = 1 } = chart.attribute;\n if (baseOpacity <= 0) {\n return;\n }\n context.baseGlobalAlpha *= baseOpacity;\n super.drawShape(chart, context, x, y, drawContext, params, fillCb, strokeCb);\n // TODO 考虑一个通用的ctx清理逻辑\n if (context._clearFilterStyle && context.nativeContext) {\n context.nativeContext.filter = 'blur(0px)';\n context._clearFilterStyle = false;\n }\n context.baseGlobalAlpha /= baseOpacity;\n const vChart = (chart as VChartGraphic).vchart;\n const vchartStage = vChart.getStage();\n const vchartCtx = vchartStage.window.getContext();\n vchartCtx.baseGlobalAlpha *= baseOpacity;\n // @ts-ignore\n vchartStage._story_needRender = true;\n const matrix = chart.globalTransMatrix.clone();\n // auto 模式下,需要将vchart.stage的viewBoxTransform 设置到包含偏移量的位置\n matrix.translate(chart.vchartAutoTranslate.x, chart.vchartAutoTranslate.y);\n const stageMatrix = chart.stage.window.getViewBoxTransform().clone();\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n vchartStage.window.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n vchartStage.dirtyBounds?.clear();\n vchartStage.render();\n vchartCtx.baseGlobalAlpha /= baseOpacity;\n }\n\n draw(chart: any, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const chartAttribute = getTheme(chart, params?.theme).circle;\n this._draw(chart, {} as any, false, drawContext, params);\n }\n}\n","import { injectable } from '@visactor/vrender';\nimport type { IGraphicPicker, IPickParams } from '@visactor/vrender';\nimport type { VChartGraphic } from './vchart-graphic';\nimport { CHART_NUMBER_TYPE } from './vchart-graphic';\n\n@injectable()\nexport class VChartPicker implements IGraphicPicker {\n type = 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n contains(chart: any, point: any, params?: IPickParams): boolean | any {\n // 将当前的point转化到global\n const matrix = chart.parent.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n const toGlobalMatrix = matrix.getInverse();\n const nextP = { x: 0, y: 0 };\n toGlobalMatrix.transformPoint(point, nextP);\n\n // 得到 vchart stage\n const vChart = (chart as VChartGraphic).vchart;\n const vchartStage = vChart.getStage();\n vchartStage.dirtyBounds?.clear();\n const toChartMatrix = vchartStage.window.getViewBoxTransform();\n toChartMatrix.transformPoint(nextP, nextP);\n const pick = vchartStage.pick(nextP.x, nextP.y);\n // @ts-ignore\n if (pick.graphic === null && pick.group.name === 'root') {\n return false;\n }\n return pick;\n }\n}\n","import type { IPickerService, IPickParams, PickResult } from '@visactor/vrender-core';\nimport { injectable } from '@visactor/vrender-core';\nimport type { IMatrix, IPointLike } from '@visactor/vutils';\n\n@injectable()\nexport class VChartPickServiceInterceptorContribution {\n order: number = 1;\n afterPickItem(\n result: PickResult,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n // 点击到图表的空白区域了,那么就判断该位置是否有其他图元,如果有,那就返回false,否则还是认为选中了图表\n if (\n result.graphic === null &&\n result.group &&\n (result.group as any).stage &&\n (result.group as any).stage.id === 'vstory'\n ) {\n // console.log('aaaa', result);\n const stage = (result.group as any).stage;\n const charts = stage.getElementsByType('chart');\n const nextPoint = { x: point.x, y: point.y };\n if (params && params.parentMatrix) {\n params.parentMatrix.transformPoint(point, nextPoint);\n }\n\n for (let i = charts.length - 1; i >= 0; i--) {\n const chart = charts[i];\n const pointInChart = { x: nextPoint.x, y: nextPoint.y };\n chart.globalTransMatrix.transformPoint(pointInChart, pointInChart);\n const viewBox = chart._vchart.getStage().viewBox;\n // console.log(chart);\n if (viewBox.contains(pointInChart.x, pointInChart.y)) {\n result.graphic = chart;\n result.group = null;\n // result.group =\n return result;\n }\n }\n }\n\n return result;\n }\n}\n","import type { IBoundsLike } from '@visactor/vutils';\nimport type { IVChart } from '@visactor/vchart';\nimport type { GraphicType, IGroupGraphicAttribute, ITicker } from '@visactor/vrender';\nimport { genNumberType, Group } from '@visactor/vrender';\n\nexport interface IChartGraphicAttribute extends IGroupGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // ClassType: any;\n vchart: IVChart;\n mode: string;\n modeParams?: any;\n dpr: number;\n interactive: boolean;\n animation: boolean;\n disableTriggerEvent: boolean;\n disableDirtyBounds: boolean;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n chartInitOptions?: any;\n}\n\nexport const COMPONENT_NUMBER_TYPE = genNumberType();\n\n// @ts-ignore\nexport class ComponentGroup extends Group {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n constructor(attrs: IGroupGraphicAttribute) {\n // vstory-component-group没有主题,必须都初始化,否则动画会找不到属性\n super({ scaleX: 1, scaleY: 1, x: 0, y: 0, angle: 0, ...attrs, pickable: false });\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute,\n IGraphic,\n IGroup\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasGroupRender } from '@visactor/vrender';\nimport { COMPONENT_NUMBER_TYPE } from './component-group-graphic';\n\nexport const ComponentRender = Symbol.for('VStoryComponentRender');\nexport const ComponentRenderContribution = Symbol.for('VStoryComponentRenderContribution');\n\n@injectable()\nexport class ComponentGroupRender extends DefaultCanvasGroupRender implements IGraphicRender {\n type: any = 'vstory-component-group';\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n draw(group: IGroup, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const { context } = drawContext;\n if (!context) {\n return;\n }\n const { wipeDirection, wipeRatio, wipeColor, wipeBlur } = group.attribute as any;\n const drawWipe = isFinite(wipeRatio);\n let x1;\n let y1;\n let x2;\n let y2;\n if (drawWipe) {\n const b = group.AABBBounds;\n if (wipeDirection === 'l2r') {\n x1 = b.x1;\n y1 = b.y1;\n x2 = x1 + b.width() * wipeRatio;\n y2 = b.height() + y1;\n } else if (wipeDirection === 'r2l') {\n x2 = b.x1;\n y1 = b.y1;\n x1 = x2 - b.width() * wipeRatio;\n y2 = b.height() + y1;\n } else if (wipeDirection === 't2b') {\n x1 = b.x1;\n y1 = b.y1;\n x2 = x1 + b.width();\n y2 = b.height() * wipeRatio + y1;\n } else if (wipeDirection === 'b2t') {\n x1 = b.x1;\n y2 = b.y1;\n x2 = x1 + b.width();\n y1 = y2 - b.height() * wipeRatio;\n }\n context.save();\n context.setTransformForCurrent();\n context.beginPath();\n context.rect(x1, y1, x2 - x1, y2 - y1);\n context.clip();\n }\n super.draw(group, renderService, drawContext, params);\n if (drawWipe) {\n context.restore();\n }\n }\n}\n","export const chartTypes: { [key: string]: any } = {};\n","import { icons as iconPlugins } from './plugins/icons';\nimport { themes as themePlugins } from './plugins/themes';\nimport { chartTypes as chartTypePlugins } from './plugins/chartModules';\nimport type { ColumnIconOption, ITableThemeDefine } from './ts-types';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { editors } from './edit/editors';\n\nfunction register(obj: { [key: string]: any }, name: string, value: any): any {\n const old = obj[name];\n obj[name] = value;\n return old;\n}\n\nexport function theme(name: string, theme?: ITableThemeDefine): ITableThemeDefine {\n if (theme !== null && theme !== undefined) {\n return register(themePlugins, name, theme);\n }\n return themePlugins[name];\n}\nexport function icon(name: string, icon?: ColumnIconOption): ColumnIconOption {\n if (icon !== null && icon !== undefined) {\n return register(iconPlugins, name, icon);\n }\n return iconPlugins[name];\n}\nexport function chartModule(name: string, chartModule?: any): any {\n if (chartModule !== null && chartModule !== undefined) {\n return register(chartTypePlugins, name, chartModule);\n }\n return chartTypePlugins[name];\n}\nexport function editor(name: string, editor?: IEditor): IEditor {\n if (editor !== null && editor !== undefined) {\n return register(editors, name, editor);\n }\n return editors[name];\n}\n// 清理注册的全局theme icon chartModule\nfunction clear(obj: any) {\n for (const key in obj) {\n delete obj[key];\n }\n}\n/**\n * 清理注册的全局theme icon chartModule\n */\nexport function clearAll() {\n clear(themePlugins);\n clear(iconPlugins);\n clear(chartTypePlugins);\n}\n","import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n\n /** 是否开启树形结构复选框 */\n enableTreeCheckbox?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: (index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n\n enableTreeNodeMerge?: boolean;\n groupBy?: GroupByOption;\n groupTitleCustomLayout?: ICustomLayout;\n\n enableTreeStickCell?: boolean;\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManager;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的碎银均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManager;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n _parseColumnWidthConfig: (columnWidthConfig: { dimensions: IDimensionInfo[]; width: string | number }[]) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n /** 隐藏该指标。 但内部聚合逻辑是正常执行的 */\n hide?: boolean;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n","import type { SparklineSpec } from '../ts-types';\n\n// export const DEFAULTFONT = '16px sans-serif'; //默认字体\nexport const DEFAULTFONTSIZE = 16; //默认字号\nexport const DEFAULTFONTFAMILY = 'Arial,sans-serif'; //默认字体\nexport const DEFAULTBGCOLOR = '#FFF'; //默认背景色\nexport const DEFAULTBORDERCOLOR = '#000'; //默认边框颜色\nexport const DEFAULTBORDERLINEWIDTH = 1; //默认边框线宽\nexport const DEFAULTBORDERLINEDASH: [] = []; //默认边框dash\nexport const DEFAULTFONTCOLOR = '#000'; //默认字体颜色\n/**\n * 校验是否为超链接\n */\nexport const regUrl = /^(https?|ftp|file):\\/\\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/;\n/**\n * 调整列宽热区宽度\n */\nexport const ResizeColumnHotSpotSize = 16;\nexport const ResizeRowHotSpotSize = 16;\n\n/** 指标维度 在行列维度分析中占位标识 */\nexport const IndicatorDimensionKeyPlaceholder = '$$indicator$$';\n\n// svg path\nexport const DrillDown = ``;\nexport const DrillUp = ``;\n\nexport const DefaultSparklineSpec: SparklineSpec = {\n type: 'line'\n};\n","/*\n * migrate from vchart/src/plugin/components/axis-sync-plugin/zero-align-transform.ts\n */\nimport { isValidNumber } from '@visactor/vutils';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n};\n\nfunction isValidAlignDomain(domain: number[]): boolean {\n return domain.length === 2 && isValidNumber(domain[0]) && isValidNumber(domain[1]) && domain[1] >= domain[0];\n}\n\nfunction getScaleInfo(domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = domain[1] - domain[0];\n const includeZero = domain[1] * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = domain[1] > 0 ? domain[1] - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n return {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: true,\n extendable_max: true\n };\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport function getNewRangeToAlign(\n range1: { min: number; max: number },\n range2: { min: number; max: number }\n): { range1: number[]; range2: number[] } | undefined {\n const domain1 = [range1.min, range1.max];\n const domain2 = [range2.min, range2.max];\n\n if (!isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return undefined;\n }\n // 先分别获取正负比例\n const info1 = getScaleInfo(domain1);\n const info2 = getScaleInfo(domain2);\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return undefined;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return undefined;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return undefined;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return undefined;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return undefined;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return undefined;\n }\n domain1[0] = 0;\n } else {\n return undefined;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return undefined;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return undefined;\n }\n domain1[1] = 0;\n } else {\n return undefined;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return undefined;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return undefined;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return undefined;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return undefined;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return undefined;\n }\n }\n }\n // s1.domain(domain1);\n // s2.domain(domain2);\n\n return { range1: domain1, range2: domain2 };\n}\n","import { parsePadding } from './../../vrender';\nimport { isArray, isNumber, isString } from '@visactor/vutils';\n\nexport function getQuadProps(\n paddingOrigin: number | string | number[] | { left?: number; right?: number; top?: number; bottom?: number }\n): [number, number, number, number] {\n if (isNumber(paddingOrigin) || isString(paddingOrigin) || isArray(paddingOrigin)) {\n let padding = parsePadding(paddingOrigin as number);\n if (typeof padding === 'number' || typeof padding === 'string') {\n padding = [padding, padding, padding, padding];\n } else if (Array.isArray(padding)) {\n padding = padding.slice(0) as any;\n }\n return padding as any;\n } else if (\n paddingOrigin &&\n (isFinite(paddingOrigin.bottom) ||\n isFinite(paddingOrigin.left) ||\n isFinite(paddingOrigin.right) ||\n isFinite(paddingOrigin.top))\n ) {\n return [paddingOrigin.top ?? 0, paddingOrigin.right ?? 0, paddingOrigin.bottom ?? 0, paddingOrigin.left ?? 0];\n }\n return [0, 0, 0, 0];\n}\n","import { isValid } from '@visactor/vutils';\nimport type { StylePropertyFunctionArg } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function getProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n // to do 处理回调函数\n if (typeof prop === 'function') {\n const arg: StylePropertyFunctionArg = {\n col,\n row,\n table: _table,\n value: _table.getCellValue(col, row),\n dataValue: _table.getCellOriginValue(col, row),\n cellHeaderPaths: _table.getCellHeaderPaths(col, row)\n };\n return prop(arg);\n }\n return prop;\n}\n\nexport function getRawProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n if (typeof prop === 'function') {\n return undefined;\n }\n return prop;\n}\n\nexport function getFunctionalProp(\n name: string,\n cellStyle: any,\n // commonStyle: any,\n col: number,\n row: number,\n _table: BaseTableAPI\n) {\n const prop = cellStyle && isValid(cellStyle[name]) ? cellStyle[name] : undefined;\n if (typeof prop === 'function') {\n const arg: StylePropertyFunctionArg = {\n col,\n row,\n table: _table,\n value: _table.getCellValue(col, row),\n dataValue: _table.getCellOriginValue(col, row),\n cellHeaderPaths: _table.getCellHeaderPaths(col, row)\n };\n return prop(arg);\n }\n return undefined;\n}\n","import { Factory } from '../../core/factory';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport { getAxisOption } from './get-axis-config';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\n\nexport function getZeroAlignTickAlignTicks(\n targetRange: { min: number; max: number },\n col: number,\n row: number,\n index: number,\n position: 'top' | 'bottom' | 'left' | 'right',\n layout: PivotHeaderLayoutMap\n) {\n const getAxisDomainRangeAndLabels = Factory.getFunction('getAxisDomainRangeAndLabels') as GetAxisDomainRangeAndLabels;\n const { axisOption, isZeroAlign } = getAxisOption(col, row, index === 0 ? 'right' : 'left', layout);\n\n const { ticks } = getAxisDomainRangeAndLabels(\n targetRange.min,\n targetRange.max,\n axisOption,\n isZeroAlign,\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight // avoid 0, 0 causes NaN\n );\n\n return ticks;\n}\n\nexport function getTickModeFunction(\n targetTicks: number[],\n targetRange: { min: number; max: number },\n range: { min: number; max: number },\n indicatorIndex: number\n) {\n return indicatorIndex !== 0 && targetTicks\n ? () => {\n const newTicks: number[] = targetTicks.map((value: number) => {\n const percent = (value - targetRange.min) / (targetRange.max - targetRange.min);\n const tick = (range.max - range.min) * percent + range.min;\n // TO BE FIXED: 保留2位有效数字,避免出现过长的数字\n return Math.round(tick * 100) / 100;\n // return tick;\n });\n return newTicks;\n }\n : undefined;\n}\n","import { isArray, isNumber, isValid, merge } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport type { ITableAxisOption } from '../../ts-types/component/axis';\nimport type { PivotChart } from '../../PivotChart';\nimport type { CollectedValue } from '../../ts-types';\nimport { getNewRangeToAlign } from './zero-align';\nimport { Factory } from '../../core/factory';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\nimport { getQuadProps } from '../../scenegraph/utils/padding';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport { getTickModeFunction, getZeroAlignTickAlignTicks } from './tick-align';\n\ntype AxisRange = {\n min: number;\n max: number;\n};\n\nexport type GetAxisConfigInPivotChart = (col: number, row: number, layout: PivotHeaderLayoutMap) => any;\nexport function getAxisConfigInPivotChart(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n if (!layout._table.isPivotChart()) {\n return undefined;\n }\n\n // 是否是指标\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n const axisRange = getRange('top', col, row + 1, col, layout.columnHeaderLevelCount - 1, col, row, 1, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row + 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row + 1, layout._table));\n\n // range for top axis\n const { range, ticks, axisOption, targetTicks, targetRange, index, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for bottom axis\n // const subAxisRange = getRange(\n // 'bottom',\n // col,\n // row + 1,\n // col,\n // layout.columnHeaderLevelCount - 1,\n // col,\n // row,\n // 0,\n // layout\n // );\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 顶部副指标轴\n return merge(\n {\n range: range\n },\n axisOption,\n {\n orient: 'top',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo = null;\n indicatorKeys?.forEach(key => {\n const info = layout.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n\n const axisRange = getRange('bottom', col, row - 1, col, row, col, row, 0, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row - 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row - 1, layout._table));\n\n // range for bottom axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for top axis\n // const subAxisRange = getRange('top', col, row - 1, col, row, col, row, 1, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 底侧指标轴\n return merge(\n {\n title: {\n visible: true,\n text: (indicatorInfo as any)?.title\n // autoRotate: true\n },\n range\n },\n axisOption,\n {\n orient: 'bottom',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n let rowDimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n if (isArray(rowDimensionKey)) {\n rowDimensionKey = rowDimensionKey[0];\n }\n const data = layout.dataset.collectedValues[rowDimensionKey] ?? ([] as string[]);\n\n const rowPath = layout.getRowKeysPath(col, row);\n const domain = ((data as any)[rowPath ?? ''] as Array) ?? [];\n\n const { axisOption, theme, chartType } = getAxisOption(col + 1, row, 'left', layout);\n if (axisOption?.visible === false) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col + 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col + 1, row, layout._table));\n\n const spec = layout.getRawChartSpec(col + 1, row);\n // 左侧维度轴\n return merge(\n {\n // domain: chartType === 'scatter' ? undefined : Array.from(domain),\n domain: axisOption?.type === 'linear' ? undefined : Array.from(domain),\n // range: chartType === 'scatter' ? domain : undefined,\n range: axisOption?.type === 'linear' ? domain : undefined,\n title: {\n autoRotate: true\n }\n },\n axisOption,\n {\n orient: 'left',\n // type: chartType === 'scatter' ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n __vtableChartTheme: theme,\n // 默认左侧维度轴对应的图表direction 为 horizontal\n // 散点图特殊处理\n inverse: transformInverse(\n axisOption,\n (spec?.direction ?? (chartType === 'scatter' ? 'vertical' : 'horizontal')) === Direction.horizontal\n ),\n __vtablePadding: padding\n }\n );\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo = null;\n indicatorKeys?.forEach(key => {\n const info = layout.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n\n const axisRange = getRange('left', col + 1, row, col, row, col, row, 0, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col + 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col + 1, row, layout._table));\n\n // range for left axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for right axis\n // const subAxisRange = getRange('right', col + 1, row, col, row, col, row, 1, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 左侧指标轴\n return merge(\n {\n title: {\n visible: true,\n text: (indicatorInfo as any)?.title,\n autoRotate: true\n },\n range: range\n },\n axisOption,\n {\n orient: 'left',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n const axisRange = getRange('right', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 1, layout);\n if (!axisRange) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col - 1, row);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col - 1, row, layout._table));\n\n // range for right axis\n const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;\n\n // if (isZeroAlign) {\n // // range for left axis\n // const subAxisRange = getRange('left', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 0, layout);\n\n // if (subAxisRange) {\n // const { range: subRange } = subAxisRange;\n\n // const align = getNewRangeToAlign(range, subRange);\n // if (align) {\n // range.min = align.range1[0];\n // range.max = align.range1[1];\n // }\n // }\n // }\n\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n if (range.min > 0) {\n axisOption.zero = false;\n }\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n if (range.max < 0) {\n axisOption.zero = false;\n }\n }\n\n // 右侧副指标轴\n return merge(\n {\n range: range,\n title: {\n autoRotate: true\n }\n },\n axisOption,\n {\n orient: 'right',\n type: axisOption?.type || 'linear',\n label: {\n flush: true\n },\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n __ticksForVTable: ticks,\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n\n let columnDimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n if (isArray(columnDimensionKey)) {\n columnDimensionKey = columnDimensionKey[0];\n }\n const data = layout.dataset.collectedValues[columnDimensionKey] ?? ([] as string[]);\n\n const colPath = layout.getColKeysPath(col, row);\n const domain = ((data as any)?.[colPath ?? ''] as Array) ?? [];\n\n const { axisOption, isPercent, theme, chartType } = getAxisOption(col, row - 1, 'bottom', layout);\n if (axisOption?.visible === false) {\n return;\n }\n\n const chartCellStyle = layout._table._getCellStyle(col, row - 1);\n const padding = getQuadProps(getProp('padding', chartCellStyle, col, row - 1, layout._table));\n\n // 底部维度轴\n return merge(\n {\n // domain: chartType === 'scatter' ? undefined : Array.from(domain),\n domain: axisOption?.type === 'linear' ? undefined : Array.from(domain),\n // range: chartType === 'scatter' ? domain : undefined\n range: axisOption?.type === 'linear' ? domain : undefined\n },\n axisOption,\n {\n orient: 'bottom',\n // type: chartType === 'scatter' ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n __vtableChartTheme: theme,\n __vtablePadding: padding\n }\n );\n }\n }\n\n return undefined;\n}\n\nexport function getAxisOption(col: number, row: number, orient: string, layout: PivotHeaderLayoutMap) {\n const spec = layout.getRawChartSpec(col, row);\n const axes = spec.axes ?? [];\n (layout._table as PivotChart).pivotChartAxes.forEach(axis => {\n const index = axes.findIndex((a: any) => {\n return axis.orient === a.orient;\n });\n if (index === -1) {\n axes.push(axis);\n }\n });\n\n if (spec && isArray(axes)) {\n const axisOption = axes.find((axis: any) => {\n return axis.orient === orient;\n });\n if (axisOption) {\n const { seriesIndex, seriesId } = axisOption;\n let seriesIndice;\n let seriesSpec: any;\n if (isValid(seriesId) && isArray(spec.series)) {\n seriesIndice = (isArray(seriesId) ? seriesId : [seriesId]).map(id => {\n const index = spec.series.findIndex((s: any) => s.id === id);\n if (index >= 0) {\n seriesSpec = spec.series[index];\n }\n return index;\n });\n } else if (isValid(seriesIndex) && isArray(spec.series)) {\n seriesIndice = seriesIndex;\n }\n const { isZeroAlign, isTickAlign } = checkZeroAlign(spec, orient, layout);\n return {\n axisOption,\n isPercent: spec.percent,\n isZeroAlign,\n isTickAlign,\n seriesIndice,\n theme: spec.theme,\n chartType: seriesSpec?.type ?? spec.type\n };\n }\n }\n const axisOption = ((layout._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === orient;\n });\n const { isZeroAlign, isTickAlign } = checkZeroAlign(spec, orient, layout);\n return {\n axisOption,\n isPercent: false,\n // isZeroAlign: checkZeroAlign(spec, orient, layout),\n isZeroAlign,\n isTickAlign,\n theme: spec.theme,\n chartType: spec.type\n };\n}\n\nfunction checkZeroAlign(spec: any, orient: string, layout: PivotHeaderLayoutMap) {\n // check condition:\n // 1. two axes and one set sync\n // 2. axisId in sync is another\n const orients: string[] = [];\n if (orient === 'left' || orient === 'right') {\n orients.push('left', 'right');\n } else if (orient === 'top' || orient === 'bottom') {\n orients.push('top', 'bottom');\n }\n // const spec = layout.getRawChartSpec(col, row);\n let axesSpec;\n if (spec && isArray(spec.axes)) {\n axesSpec = spec.axes;\n } else {\n axesSpec = (layout._table as PivotChart).pivotChartAxes as ITableAxisOption[];\n }\n\n let isZeroAlign = false;\n let isTickAlign = false;\n if (isArray(axesSpec)) {\n const axes: any[] = [];\n axesSpec.forEach((axis: any) => {\n if (orients.includes(axis.orient)) {\n axes.push(axis);\n }\n });\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n if (\n axis.sync &&\n // axis.sync.zeroAlign &&\n axis.sync.axisId &&\n axes.find(axisSync => {\n return axisSync.id === axis.sync.axisId;\n })\n ) {\n // return true;\n isZeroAlign = isZeroAlign || axis.sync.zeroAlign;\n isTickAlign = isTickAlign || axis.sync.tickAlign;\n }\n }\n }\n\n // return false;\n return {\n isZeroAlign,\n isTickAlign\n };\n}\n\nexport function getAxisRange(\n collectedValues: Record>,\n indicatorKeys: string[],\n isZeroAlign: boolean,\n colPath: string,\n seriesId: number | number[]\n): AxisRange | null {\n if (isArray(seriesId)) {\n const range = { min: Infinity, max: -Infinity };\n for (let i = 0; i < seriesId.length; i++) {\n const singleRange = getAxisRange(collectedValues, indicatorKeys, isZeroAlign, colPath, seriesId[i]);\n if (singleRange) {\n range.min = Math.min(range.min, singleRange.min);\n range.max = Math.max(range.max, singleRange.max);\n }\n }\n if (isFinite(range.min) && isFinite(range.max)) {\n return range;\n }\n return null;\n }\n let defaultKey = indicatorKeys?.[seriesId];\n if (isArray(defaultKey)) {\n defaultKey = defaultKey[0];\n }\n if (!defaultKey) {\n return null;\n }\n // const data = collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]\n // ? collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]\n // : collectedValues[defaultKey];\n const data = collectedValues[defaultKey];\n const range = merge({}, (data?.[colPath ?? ''] as { min: number; max: number }) ?? { min: 0, max: 1 });\n\n if (range.positiveMax && range.positiveMax > range.max) {\n range.max = range.positiveMax;\n }\n if (range.negativeMin && range.negativeMin < range.min) {\n range.min = range.negativeMin;\n }\n if (range.min === range.max) {\n if (range.min > 0) {\n range.min = 0;\n } else {\n range.max = 0;\n }\n }\n\n return range;\n}\n\nexport function isTopOrBottomAxis(col: number, row: number, layout: PivotHeaderLayoutMap): boolean {\n if (!layout._table.isPivotChart()) {\n return false;\n }\n\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 顶部副指标轴\n return true;\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 底侧指标轴\n return true;\n }\n } else {\n if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n // 底部维度轴\n return true;\n }\n }\n return false;\n}\n\nexport function isLeftOrRightAxis(col: number, row: number, layout: PivotHeaderLayoutMap): boolean {\n if (!layout._table.isPivotChart()) {\n return false;\n }\n\n if (layout.indicatorsAsCol) {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 左侧维度轴\n return true;\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 左侧指标轴\n return true;\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n // 右侧副指标轴\n return true;\n }\n }\n return false;\n}\n\nconst enum Direction {\n vertical = 'vertical',\n horizontal = 'horizontal'\n}\n\n// align with vchart (packages/vchart/src/component/axis/cartesian/util/common.ts)\nfunction transformInverse(spec: any, isHorizontal: boolean) {\n // 这里处理下 direction === 'horizontal' 下的 Y 轴\n // 因为 Y 轴绘制的时候默认是从下至上绘制的,但是在 direction === 'horizontal' 场景下,图表应该是按照从上至下阅读的\n // 所以这里在这种场景下坐标轴会默认 inverse 已达到效果\n let inverse = spec?.inverse;\n if (isHorizontal && !isXAxis(spec?.orient)) {\n inverse = isValid(spec?.inverse) ? !spec?.inverse : true;\n }\n return inverse;\n}\n\ntype IOrientType = 'left' | 'top' | 'right' | 'bottom' | 'z';\nfunction isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function hasLinearAxis(spec: any, tableAxesConfig: any, isHorizontal: boolean, isThisXAxis: boolean): boolean {\n if (!isArray(spec.axes) || spec.axes.length === 0) {\n return (isHorizontal && isThisXAxis) || (!isHorizontal && !isThisXAxis);\n }\n\n for (let i = 0; i < spec.axes.length; i++) {\n const axisSpec = spec.axes[i];\n if (!isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type === 'linear') {\n return true;\n }\n\n if (isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (!isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type === 'linear') {\n return true;\n }\n }\n\n if (isArray(tableAxesConfig) && tableAxesConfig.length > 0) {\n for (let i = 0; i < tableAxesConfig.length; i++) {\n const axisSpec = tableAxesConfig[i];\n if (!isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type === 'linear') {\n return true;\n }\n\n if (isHorizontal && isThisXAxis && axisSpec.orient === 'bottom' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (!isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type !== 'linear') {\n return true;\n }\n\n if (isHorizontal && !isThisXAxis && axisSpec.orient === 'left' && axisSpec.type === 'linear') {\n return true;\n }\n }\n }\n\n return (isHorizontal && isThisXAxis) || (!isHorizontal && !isThisXAxis);\n}\n\nfunction getRange(\n position: 'left' | 'right' | 'top' | 'bottom',\n colForAxisOption: number,\n rowForAxisOption: number,\n colForIndicatorKey: number,\n rowForIndicatorKey: number,\n col: number,\n row: number,\n defaultSeriesIndice: number,\n layout: PivotHeaderLayoutMap\n) {\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(colForIndicatorKey, rowForIndicatorKey);\n let path;\n if (position === 'top' || position === 'bottom') {\n path = layout.getColKeysPath(col, row);\n } else {\n path = layout.getRowKeysPath(col, row);\n }\n\n const rangeConfig = getChartAxisRange(\n colForAxisOption,\n rowForAxisOption,\n defaultSeriesIndice,\n position,\n indicatorKeys,\n path,\n layout\n );\n\n if (!rangeConfig) {\n return undefined;\n }\n\n const subAxisPosition =\n position === 'bottom' ? 'top' : position === 'top' ? 'bottom' : position === 'left' ? 'right' : 'left';\n\n const { targetRange, targetTicks } = getTargetRangeAndTicks(\n colForAxisOption,\n rowForAxisOption,\n rangeConfig.index,\n rangeConfig.isZeroAlign,\n rangeConfig.isTickAlign,\n rangeConfig.range,\n indicatorKeys,\n subAxisPosition,\n path,\n layout\n );\n\n if (rangeConfig.index !== 0 && targetTicks) {\n // reset range\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(\n rangeConfig.range.min,\n rangeConfig.range.max,\n // merge({}, rangeConfig.axisOption, { nice: true, tick: { forceTickCount: targetTicks.length } }),\n rangeConfig.axisOption,\n rangeConfig.isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight, // avoid 0, 0 causes NaN\n {\n targetTicks,\n targetRange\n }\n );\n rangeConfig.range.min = newRange[0];\n rangeConfig.range.max = newRange[1];\n rangeConfig.ticks = newTicks;\n }\n\n (rangeConfig as any).targetRange = targetRange;\n (rangeConfig as any).targetTicks = targetTicks;\n\n return rangeConfig as typeof rangeConfig & { targetRange: AxisRange; targetTicks: number[] };\n}\n\nfunction getChartAxisRange(\n col: number,\n row: number,\n index: number,\n position: 'bottom' | 'top' | 'left' | 'right',\n indicatorKeys: string[],\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n const { axisOption, isPercent, isZeroAlign, isTickAlign, seriesIndice, theme, chartType } = getAxisOption(\n col,\n row,\n position,\n layout\n );\n\n // if (axisOption?.visible === false) {\n // return undefined;\n // }\n\n const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, path, seriesIndice ?? index);\n\n if (!range) {\n return undefined;\n }\n\n if (isPercent) {\n range.min = range.min < 0 ? -1 : 0;\n range.max = range.max > 0 ? 1 : 0;\n }\n if (axisOption?.zero || range.min === range.max) {\n range.min = Math.min(range.min, 0);\n range.max = Math.max(range.max, 0);\n }\n let ticks;\n if (axisOption?.nice || isTickAlign) {\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: axisRange, ticks: selfTicks } = getAxisDomainRangeAndLabels(\n range.min,\n range.max,\n axisOption,\n isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight // avoid 0, 0 causes NaN\n );\n if (axisOption?.nice) {\n range.min = axisRange[0];\n range.max = axisRange[1];\n }\n // if (isTickAlign) {\n // }\n ticks = selfTicks;\n }\n if (isNumber(axisOption?.min)) {\n range.min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n range.max = axisOption.max;\n }\n\n return {\n index: seriesIndice ?? index,\n range,\n ticks,\n isZeroAlign,\n isTickAlign,\n axisOption,\n theme,\n chartType\n };\n}\n\nexport function getAxisRangeAndTicks(\n col: number,\n row: number,\n index: number,\n position: 'bottom' | 'top' | 'left' | 'right',\n subAxisPosition: 'bottom' | 'top' | 'left' | 'right',\n indicatorKeys: string[],\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n const { range, isZeroAlign, isTickAlign, axisOption } = getChartAxisRange(\n col,\n row,\n index,\n position,\n indicatorKeys,\n path,\n layout\n );\n const { targetRange, targetTicks } = getTargetRangeAndTicks(\n col,\n row,\n index,\n isZeroAlign,\n isTickAlign,\n range,\n indicatorKeys,\n subAxisPosition,\n path,\n layout\n );\n\n if (index !== 0 && targetTicks) {\n // reset range\n const getAxisDomainRangeAndLabels = Factory.getFunction(\n 'getAxisDomainRangeAndLabels'\n ) as GetAxisDomainRangeAndLabels;\n const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(\n range.min,\n range.max,\n merge({}, axisOption, { nice: true, tick: { forceTickCount: targetTicks.length } }),\n isZeroAlign,\n // layout._table.getColWidth(col)\n position === 'bottom' || position === 'top'\n ? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth\n : layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight, // avoid 0, 0 causes NaN\n {\n targetTicks,\n targetRange\n }\n );\n range.min = newRange[0];\n range.max = newRange[1];\n // axisOption.ticks = newTicks;\n }\n\n return {\n axisOption,\n range,\n targetTicks,\n targetRange\n };\n}\n\nfunction getTargetRangeAndTicks(\n col: number,\n row: number,\n index: number,\n isZeroAlign: boolean,\n isTickAlign: boolean,\n range: AxisRange,\n indicatorKeys: string[],\n subAxisPosition: 'bottom' | 'top' | 'left' | 'right',\n path: string,\n layout: PivotHeaderLayoutMap\n) {\n let targetTicks: number[];\n let targetRange: {\n max: number;\n min: number;\n };\n\n if (!isZeroAlign && !isTickAlign) {\n return {\n targetTicks,\n targetRange\n };\n }\n\n const subAxisRange = getChartAxisRange(\n col,\n row,\n indicatorKeys.length - 1 - index,\n subAxisPosition,\n indicatorKeys,\n path,\n layout\n );\n if (subAxisRange) {\n const { range: subRange, ticks: subTicks } = subAxisRange;\n targetRange = subRange;\n if (isZeroAlign) {\n const align = getNewRangeToAlign(range, subRange);\n if (align) {\n range.min = align.range1[0];\n range.max = align.range1[1];\n targetRange.min = align.range2[0];\n targetRange.max = align.range2[1];\n }\n }\n if (isTickAlign) {\n if (!isZeroAlign) {\n targetTicks = subTicks;\n } else {\n targetTicks = getZeroAlignTickAlignTicks(targetRange, col, row, index, subAxisPosition, layout);\n }\n }\n }\n\n return {\n targetTicks,\n targetRange\n };\n}\n","import { isArray, isBoolean, isDate, isNumber, isString, isValid, isHTMLElement } from '@visactor/vutils';\nimport { isDataView } from '@visactor/vdataset';\n\n/**\n * 深拷贝 spec,为避免循环引用,DataView 维持原有引用\n * @param spec 原spec\n */\nexport function cloneDeepSpec(spec: any, excludeKeys: string[] = ['data']) {\n const value = spec;\n\n let result;\n if (!isValid(value) || typeof value !== 'object') {\n return value;\n }\n\n // 判断是不是不能深拷贝的对象\n if (isDataView(value) || isHTMLElement(value)) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n if (excludeKeys?.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeepSpec(subValue, excludeKeys);\n }\n }\n }\n\n return result;\n}\n","import { degreeToRadian, isEmpty, merge } from '@visactor/vutils';\n\nexport function transformLegendTitleAttributes(title: any) {\n const transformedTitle = {\n ...title\n };\n if (!isEmpty(title.style)) {\n transformedTitle.textStyle = transformToGraphic(title.style);\n }\n if (!isEmpty(title.textStyle)) {\n merge(transformedTitle.textStyle, transformToGraphic(title.textStyle));\n }\n\n if (title.shape?.style) {\n transformToGraphic(transformedTitle.shape.style);\n }\n\n if (title.background?.style) {\n transformToGraphic(transformedTitle.background.style);\n }\n return transformedTitle;\n}\n\nexport function transformToGraphic(style: any) {\n if (isEmpty(style)) {\n return style;\n }\n if (style.angle) {\n style.angle = degreeToRadian(style.angle);\n }\n\n return style;\n}\n\nexport function transformComponentStyle(cfg: any = {}) {\n if (!isEmpty(cfg.style)) {\n cfg.style = transformToGraphic(cfg.style);\n }\n\n if (!isEmpty(cfg.state)) {\n Object.keys(cfg.state).forEach(key => {\n if (!isEmpty(cfg.state[key])) {\n cfg.state[key] = transformToGraphic(cfg.state[key]);\n }\n });\n }\n\n return cfg;\n}\n\nexport function transformStateStyle(stateStyle: any) {\n if (isEmpty(stateStyle)) {\n return null;\n }\n Object.keys(stateStyle).forEach(key => {\n if (!isEmpty(stateStyle[key])) {\n stateStyle[key] = transformToGraphic(stateStyle[key]);\n }\n });\n\n return stateStyle;\n}\n\nexport function transformAxisLineStyle(lineCfg: any) {\n transformComponentStyle(lineCfg);\n transformComponentStyle(lineCfg.startSymbol);\n transformComponentStyle(lineCfg.endSymbol);\n\n return lineCfg;\n}\n","import { degreeToRadian, isNil, merge, pickWithout } from '@visactor/vutils';\nimport { transformAxisLineStyle, transformStateStyle, transformToGraphic } from '../util/transform';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\n\nconst DEFAULT_TITLE_STYLE = {\n left: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n right: {\n textAlign: 'center',\n textBaseline: 'bottom'\n },\n radius: {},\n angle: {}\n};\n\nexport const DEFAULT_TEXT_FONT_FAMILY =\n // eslint-disable-next-line max-len\n 'PingFang SC,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif, apple color emoji,segoe ui emoji,segoe ui symbol';\n\nexport const DEFAULT_TEXT_FONT_SIZE = 14;\n\nexport const THEME_CONSTANTS = {\n FONT_FAMILY: DEFAULT_TEXT_FONT_FAMILY,\n LABEL_FONT_SIZE: DEFAULT_TEXT_FONT_SIZE,\n MAP_LABEL_FONT_SIZE: 10,\n TITLE_FONT_SIZE: 18,\n AXIS_TICK_SIZE: 4\n};\n\nexport const commonAxis = {\n domainLine: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n grid: {\n visible: true,\n style: {\n lineWidth: 1,\n stroke: '#EBEDF2',\n strokeOpacity: 1,\n lineDash: [] as any[]\n }\n },\n subGrid: {\n visible: false,\n style: {\n lineWidth: 1,\n stroke: '#EBEDF2',\n strokeOpacity: 1,\n lineDash: [4, 4]\n }\n },\n tick: {\n visible: true,\n tickSize: THEME_CONSTANTS.AXIS_TICK_SIZE,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n subTick: {\n visible: false,\n tickSize: THEME_CONSTANTS.AXIS_TICK_SIZE / 2,\n style: {\n lineWidth: 1,\n stroke: '#D9DDE4',\n strokeOpacity: 1\n }\n },\n label: {\n visible: true,\n space: 1, // hack: VChart中为0,为了方便fs调试暂时改为1\n style: {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE,\n fill: '#89909D',\n fontWeight: 'normal',\n fillOpacity: 1\n },\n autoLimit: true\n },\n title: {\n space: 10,\n style: {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE,\n fill: '#333333',\n fontWeight: 'normal',\n fillOpacity: 1\n }\n }\n};\n\nexport function getCommonAxis(theme: any) {\n if (!theme?.colorScheme?.default?.palette) {\n return commonAxis;\n }\n return merge({}, commonAxis, {\n tick: {\n style: {\n stroke: theme.colorScheme.default.palette.axisDomainColor || '#D9DDE4'\n }\n },\n subTick: {\n style: {\n stroke: theme.colorScheme.default.palette.axisDomainColor || '#D9DDE4'\n }\n },\n label: {\n style: {\n fill: theme.colorScheme.default.palette.axisLabelFontColor || '#89909D'\n }\n },\n title: {\n style: {\n fill: theme.colorScheme.default.palette.secondaryFontColor || '#333333'\n }\n }\n });\n}\n\nexport function getAxisAttributes(option: ICellAxisOption) {\n const spec = merge({}, option);\n // const spec = option;\n let titleAngle = spec.title?.angle ?? 0;\n let titleTextStyle;\n if (spec.orient === 'left' || spec.orient === 'right') {\n // 处理纵轴的标题样式\n if (spec.title?.autoRotate && isNil(spec.title.angle)) {\n titleAngle = spec.orient === 'left' ? -90 : 90;\n titleTextStyle = DEFAULT_TITLE_STYLE[spec.orient];\n }\n }\n\n const labelSpec = pickWithout(spec.label, ['style', 'formatMethod', 'state']);\n\n return {\n orient: spec.orient,\n select: spec.select,\n hover: spec.hover,\n line: transformAxisLineStyle(spec.domainLine),\n label: {\n style:\n // isFunction(spec.label.style)\n // ? (datum: Datum, index: number) => {\n // const style = this._preprocessSpec(spec.label.style(datum.rawValue, index, datum));\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.label?.style, style)));\n // }\n // :\n transformToGraphic(spec.label.style),\n formatMethod: spec.label.formatMethod\n ? (value: any, datum: any, index: number) => {\n return spec.label.formatMethod(datum.rawValue, datum);\n }\n : null,\n state: transformStateStyle(spec.label.state),\n ...labelSpec\n },\n tick: {\n visible: spec.tick.visible,\n length: spec.tick.tickSize,\n inside: spec.tick.inside,\n alignWithLabel: spec.tick.alignWithLabel,\n style:\n // isFunction(spec.tick.style)\n // ? (datum: Datum, index: number) => {\n // const style = this._preprocessSpec(spec.tick.style(datum.rawValue, index, datum));\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.tick?.style, style)));\n // }\n // :\n transformToGraphic(spec.tick.style),\n state: transformStateStyle(spec.tick.state),\n dataFilter: spec.tick.dataFilter\n },\n subTick: {\n visible: spec.subTick.visible,\n length: spec.subTick.tickSize,\n inside: spec.subTick.inside,\n count: spec.subTick.tickCount,\n style: transformToGraphic(spec.subTick.style),\n state: transformStateStyle(spec.subTick.state)\n },\n grid: {\n type: 'line',\n visible: spec.grid.visible,\n alternateColor: spec.grid.alternateColor,\n alignWithLabel: spec.grid.alignWithLabel,\n style:\n // isFunction(spec.grid.style)\n // ? (datum: Datum, index: number) => {\n // const style = spec.grid.style(datum.datum?.rawValue, index, datum.datum);\n\n // return transformToGraphic(this._preprocessSpec(merge({}, this._theme.grid?.style, style)));\n // }\n // :\n transformToGraphic(spec.grid.style)\n },\n subGrid: {\n type: 'line',\n visible: spec.subGrid.visible,\n alternateColor: spec.subGrid.alternateColor,\n style: transformToGraphic(spec.subGrid.style)\n },\n title: {\n visible: spec.title.visible,\n position: spec.title.position,\n space: spec.title.space,\n autoRotate: false, // 默认不对外提供该配置\n angle: titleAngle ? degreeToRadian(titleAngle) : null,\n textStyle: merge({}, titleTextStyle, transformToGraphic(spec.title.style)),\n padding: spec.title.padding,\n shape: {\n visible: spec.title.shape?.visible,\n space: spec.title.shape?.space,\n style: transformToGraphic(spec.title.shape?.style)\n },\n background: {\n visible: spec.title.background?.visible,\n style: transformToGraphic(spec.title.background?.style)\n },\n state: {\n text: transformStateStyle(spec.title.state),\n shape: transformStateStyle(spec.title.shape?.state),\n background: transformStateStyle(spec.title.background?.state)\n }\n },\n panel: {\n visible: spec.background?.visible,\n style: transformToGraphic(spec.background?.style),\n state: transformStateStyle(spec.background?.state)\n }\n };\n}\n","import { cloneDeep, isArray, isNumber, merge } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../simple-header-layout';\nimport { getAxisOption, getAxisRange, getAxisRangeAndTicks } from './get-axis-config';\nimport { getNewRangeToAlign } from './zero-align';\nimport type { IChartIndicator, IIndicator } from '../../ts-types';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { Factory } from '../../core/factory';\nimport type { GetAxisDomainRangeAndLabels } from './get-axis-domain';\nimport { DEFAULT_TEXT_FONT_SIZE } from '../../components/axis/get-axis-attributes';\nimport { convertDomainToTickData } from '@visactor/vrender-components';\nimport { getTickModeFunction, getZeroAlignTickAlignTicks } from './tick-align';\n\nconst NO_AXISID_FRO_VTABLE = 'NO_AXISID_FRO_VTABLE';\n\nexport function getRawChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const chartSpec = indicatorObj?.chartSpec;\n\n if (typeof chartSpec === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: layout._table.getCellOriginValue(col, row) || '',\n value: layout._table.getCellValue(col, row) || '',\n rect: layout._table.getCellRangeRelativeRect(layout._table.getCellRange(col, row)),\n table: layout._table\n };\n return chartSpec(arg);\n }\n return chartSpec;\n}\nexport function isShareChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const chartSpec = indicatorObj?.chartSpec;\n\n if (typeof chartSpec === 'function') {\n return false;\n }\n return true;\n}\nexport function isNoChartDataRenderNothing(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const paths = layout.getCellHeaderPaths(col, row);\n let indicatorObj;\n if (layout.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = layout.columnObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n const noDataRenderNothing = indicatorObj?.noDataRenderNothing;\n\n return noDataRenderNothing;\n}\n/** 检查是否有直角坐标系的图表 */\nexport function checkHasCartesianChart(indicatorsDefine: (IIndicator | IChartIndicator | string)[]) {\n let isHasCartesianChart = false;\n for (let i = 0; i < indicatorsDefine.length; i++) {\n //columnObjects数量和指标数量一样 并不是每个列都有 所有会快一些\n const columnObj = indicatorsDefine[i] as IChartIndicator;\n if (columnObj.chartSpec) {\n if (\n columnObj.chartSpec.type !== 'wordCloud' &&\n columnObj.chartSpec.type !== 'radar' &&\n columnObj.chartSpec.type !== 'gauge' &&\n columnObj.chartSpec.type !== 'pie' &&\n columnObj.chartSpec.type !== 'funnel' &&\n columnObj.chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n break;\n }\n }\n }\n return isHasCartesianChart;\n}\n\n/** 检查是否有直角坐标系的图表 */\nexport function isCartesianChart(col: number, row: number, layout: PivotHeaderLayoutMap) {\n let isHasCartesianChart = true;\n const chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (\n chartSpec.type === 'pie' ||\n chartSpec.type === 'radar' ||\n chartSpec.type === 'gauge' ||\n chartSpec.type === 'wordCloud' ||\n chartSpec.type === 'funnel' ||\n chartSpec.type === 'rose'\n ) {\n isHasCartesianChart = false;\n }\n } else {\n isHasCartesianChart = false;\n }\n return isHasCartesianChart;\n}\n\n/** 检查是否有直角坐标系的图表 整行或者整列去检查 */\nexport function isHasCartesianChartInline(\n col: number,\n row: number,\n checkDirection: 'col' | 'row',\n layout: PivotHeaderLayoutMap\n) {\n let isHasCartesianChart = false;\n if ((layout.indicatorsAsCol && checkDirection === 'row') || (!layout.indicatorsAsCol && checkDirection === 'col')) {\n for (let i = 0; i < layout.indicatorsDefine.length; i++) {\n //columnObjects数量和指标数量一样 并不是每个列都有 所有会快一些\n const columnObj = layout.indicatorsDefine[i] as IChartIndicator;\n if (columnObj.chartSpec) {\n if (\n columnObj.chartSpec.type !== 'pie' &&\n columnObj.chartSpec.type !== 'wordCloud' &&\n columnObj.chartSpec.type !== 'radar' &&\n columnObj.chartSpec.type !== 'gauge' &&\n columnObj.chartSpec.type !== 'funnel' &&\n columnObj.chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n break;\n }\n }\n }\n } else {\n const chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (\n chartSpec.type !== 'pie' &&\n chartSpec.type !== 'radar' &&\n chartSpec.type !== 'gauge' &&\n chartSpec.type !== 'wordCloud' &&\n chartSpec.type !== 'funnel' &&\n chartSpec.type !== 'rose'\n ) {\n isHasCartesianChart = true;\n }\n } else {\n isHasCartesianChart = false;\n }\n }\n return isHasCartesianChart;\n}\n\nexport function getChartSpec(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n let chartSpec = layout.getRawChartSpec(col, row);\n if (chartSpec) {\n if (layout._table.isPivotChart()) {\n chartSpec = cloneDeepSpec(chartSpec);\n chartSpec.sortDataByAxis = true;\n if (isArray(chartSpec.series)) {\n chartSpec.series.forEach((serie: any) => {\n serie.sortDataByAxis = true;\n });\n }\n if (chartSpec.type !== 'gauge' && chartSpec.type !== 'rose' && chartSpec.type !== 'radar') {\n chartSpec.axes = layout.getChartAxes(col, row);\n }\n chartSpec.padding = 0;\n chartSpec.dataZoom = []; // Do not support datazoom temply\n return chartSpec;\n }\n return chartSpec;\n }\n return null;\n}\n\nexport function getChartAxes(col: number, row: number, layout: PivotHeaderLayoutMap): any {\n const axes: any[] = [];\n if (layout.indicatorsAsCol) {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n // const colIndex = layout.getRecordIndexByCol(col);\n const colPath = layout.getColKeysPath(col, row);\n indicatorKeys.forEach((key, index) => {\n const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(\n col,\n row,\n index,\n index === 0 ? 'bottom' : 'top',\n index === 0 ? 'top' : 'bottom',\n indicatorKeys,\n colPath,\n layout\n );\n if (isNumber(axisOption?.min)) {\n (range as any).min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n (range as any).max = axisOption.max;\n }\n\n if (hasSameAxis(axisOption, axes)) {\n return;\n }\n\n axes.push(\n merge(\n {\n range,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n type: axisOption?.type || 'linear',\n orient: index === 0 ? 'bottom' : 'top',\n // visible: true,\n label: { visible: false, flush: true },\n // label: { flush: true },\n title: { visible: false },\n domainLine: { visible: false },\n seriesIndex: axisOption?.seriesId ? undefined : index,\n // height: -1,\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n sync: { axisId: NO_AXISID_FRO_VTABLE } // hack for fs\n }\n )\n );\n });\n\n let rowDimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n if (isArray(rowDimensionKey)) {\n rowDimensionKey = rowDimensionKey[0];\n }\n const data =\n layout.dataset.cacheCollectedValues[rowDimensionKey] ||\n layout.dataset.collectedValues[rowDimensionKey] ||\n ([] as string[]);\n const rowPath = layout.getRowKeysPath(col, row);\n const domain = (data as any)[rowPath ?? ''] as Set;\n const { axisOption, isPercent, chartType } = getAxisOption(col, row, 'left', layout);\n axes.push(\n // 左侧维度轴\n merge(\n {\n // domain: chartType === 'scatter' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n domain: axisOption?.type === 'linear' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n // range: chartType === 'scatter' && !Array.isArray(domain) ? domain : undefined,\n range: axisOption?.type === 'linear' && !Array.isArray(domain) ? domain : undefined,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n // type: chartType === 'scatter' && !Array.isArray(domain) ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n orient: 'left',\n // visible: true,\n label: { visible: false },\n domainLine: { visible: false },\n tick: { visible: false },\n subTick: { visible: false },\n title: { visible: false }\n // height: -1,\n // width: -1\n // autoIndent: false,\n }\n )\n );\n } else {\n // const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row).slice(0, 2);\n const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);\n const rowPath = layout.getRowKeysPath(col, row);\n indicatorKeys.forEach((key, index) => {\n const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(\n col,\n row,\n index,\n index === 0 ? 'left' : 'right',\n index === 0 ? 'right' : 'left',\n indicatorKeys,\n rowPath,\n layout\n );\n if (isNumber(axisOption?.min)) {\n (range as any).min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n (range as any).max = axisOption.max;\n }\n\n if (hasSameAxis(axisOption, axes)) {\n return;\n }\n\n axes.push(\n merge(\n {\n range,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n type: axisOption?.type || 'linear',\n orient: index === 0 ? 'left' : 'right',\n // visible: true,\n label: { visible: false, flush: true },\n // label: { flush: true },\n title: { visible: false },\n domainLine: { visible: false },\n seriesIndex: axisOption?.seriesId ? undefined : index,\n // width: -1,\n // grid: index === 0 ? undefined : { visible: false }\n tick: {\n tickMode: getTickModeFunction(targetTicks, targetRange, range, index)\n },\n sync: { axisId: NO_AXISID_FRO_VTABLE } // hack for fs\n }\n )\n );\n });\n\n let columnDimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n if (isArray(columnDimensionKey)) {\n columnDimensionKey = columnDimensionKey[0];\n }\n const data =\n layout.dataset.cacheCollectedValues[columnDimensionKey] ||\n layout.dataset.collectedValues[columnDimensionKey] ||\n ([] as string[]);\n const colPath = layout.getColKeysPath(col, row);\n const domain: string[] | Set = ((data as any)?.[colPath ?? ''] as Set) ?? [];\n\n const { axisOption, isPercent, chartType } = getAxisOption(col, row, 'bottom', layout);\n axes.push(\n // 底部维度轴\n merge(\n {\n // domain: chartType === 'scatter' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n domain: axisOption?.type === 'linear' && !Array.isArray(domain) ? undefined : Array.from(domain ?? []),\n // range: chartType === 'scatter' && !Array.isArray(domain) ? domain : undefined,\n range: axisOption?.type === 'linear' && !Array.isArray(domain) ? domain : undefined,\n label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }\n },\n axisOption,\n {\n // type: chartType === 'scatter' && !Array.isArray(domain) ? axisOption?.type ?? 'linear' : 'band',\n type: axisOption?.type ?? 'band',\n orient: 'bottom',\n visible: true,\n label: { visible: false },\n domainLine: { visible: false },\n tick: { visible: false },\n subTick: { visible: false },\n title: { visible: false }\n // height: -1\n // autoIndent: false,\n }\n )\n );\n }\n return axes;\n}\n/**\n * 获取单元格对应spec的dataId。\n * 如果是spec外层的dataId,则是string,否则通过series获取到的是Record => \n * @param col\n * @param row\n * @param layout\n * @returns\n */\nexport function getChartDataId(\n col: number,\n row: number,\n layout: PivotHeaderLayoutMap | SimpleHeaderLayoutMap\n): string | Record {\n const chartSpec = layout.getRawChartSpec(col, row);\n // 如果chartSpec配置了组合图 series 则需要考虑 series中存在的多个指标\n if (chartSpec?.series) {\n const dataIdfield: Record = {};\n\n if (chartSpec.data?.id) {\n dataIdfield[chartSpec.data.id] = undefined;\n }\n chartSpec?.series.forEach((seriesSpec: any) => {\n if (!seriesSpec.data?.fromDataId) {\n if (!seriesSpec.data?.transforms) {\n const seriesField = seriesSpec.direction === 'horizontal' ? seriesSpec.xField : seriesSpec.yField;\n dataIdfield[seriesSpec.data?.id ?? chartSpec.data?.id ?? 'data'] = seriesSpec.data?.id\n ? seriesField\n : undefined;\n } else {\n dataIdfield[seriesSpec.data?.id ?? chartSpec.data?.id ?? 'data'] = undefined;\n }\n }\n });\n return dataIdfield;\n }\n return chartSpec.data.id;\n}\n\n/** 检查是否有直角坐标系的图表 */\nexport function checkHasChart(layout: PivotHeaderLayoutMap | SimpleHeaderLayoutMap) {\n let isHasChart = false;\n for (let i = 0; i < layout.columnObjects.length; i++) {\n const columnObj = layout.columnObjects[i];\n if (columnObj.chartSpec) {\n isHasChart = true;\n break;\n }\n }\n return isHasChart;\n}\n\nfunction hasSameAxis(axisOption: any, axes: any[]) {\n if (axisOption && isArray(axisOption.seriesId) && axisOption.seriesId.length > 0) {\n // find same seriesId axes\n const sameSeriesIdAxes = (axes as any[]).filter(axis => {\n // same seriesId\n if (\n axis.orient === axisOption.orient &&\n axis.seriesId &&\n axis.seriesId.length === axisOption.seriesId.length &&\n axis.seriesId.every((id: string, index: number) => id === axisOption.seriesId[index])\n ) {\n return true;\n }\n return false;\n });\n\n if (sameSeriesIdAxes.length > 0) {\n // has same seriesId axes\n return true;\n }\n }\n return false;\n}\n","import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record, arr: Record[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: T extends AggregationType.RECORD ? string[] | string : string;\n aggregationType: T;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule[];\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n};\nexport type CollectedValue = { max?: number; min?: number } | Array;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n","import { isValid } from '@visactor/vutils';\n\nconst indexFirst = (arr: number[], elm: number): number => {\n let low = 0;\n let high = arr.length - 1;\n while (low <= high) {\n const i = Math.floor((low + high) / 2);\n if (arr[i] === elm) {\n return i;\n } else if (arr[i] > elm) {\n high = i - 1;\n } else {\n low = i + 1;\n }\n }\n return high < 0 ? 0 : high;\n};\n\nexport class NumberMap {\n private _keys: number[] = [];\n private _vals: { [key: number]: T } = {};\n private _sorted = false;\n count() {\n return this._keys.length;\n }\n values() {\n return this._vals;\n }\n valueArr() {\n return Object.values(this._vals);\n }\n /**\n * 将sourceIndex位置开始 往后moveCount个值 调整到targetIndex位置处\n * @param sourceIndex\n * @param targetIndex\n * @param moveCount\n */\n adjustOrder(sourceIndex: number, targetIndex: number, moveCount: number) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex + moveCount - 1); i >= 0; i--) {\n const key = keys[i];\n if (key >= sourceIndex) {\n sourceVals.push(this.get(key));\n } else if (targetIndex <= key && key < sourceIndex) {\n this.put(key + moveCount, this.get(key));\n } else if (key < targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[moveCount - 1 - i]);\n }\n }\n const { length } = keys;\n if (sourceIndex < targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < length; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + moveCount) {\n sourceVals.push(this.get(key));\n } else if (sourceIndex + moveCount <= key && key <= targetIndex) {\n this.put(key - moveCount, this.get(key));\n } else if (key > targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[i]);\n }\n }\n }\n exchangeOrder(\n sourceIndex: number,\n sourceCount: number,\n targetIndex: number,\n targetCount: number,\n insertIndex: number\n ) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, targetIndex); i < indexFirst(keys, sourceIndex) + sourceCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(insertIndex + sourceCount + i, targetVals[i]);\n }\n } else {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < indexFirst(keys, targetIndex) + targetCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(sourceIndex + i, targetVals[i]);\n }\n }\n }\n del(key: number): void {\n delete this._vals[key];\n const index = this._keys.indexOf(key);\n if (index !== -1) {\n this._keys.splice(index, 1); // 使用 splice() 方法删除指定索引位置的元素\n }\n }\n put(key: number, value: T): void {\n if (!(key in this._vals)) {\n this._keys.push(key);\n this._sorted = false;\n }\n this._vals[key] = value;\n }\n get(key: number): T | undefined {\n return this._vals[key];\n }\n has(key: number): boolean {\n return isValid(this._vals[key]);\n }\n contain(value: T): boolean {\n return Object.values(this._vals).indexOf(value) >= 0;\n }\n each(keyFrom: number, keyTo: number, fn: (t: T, k: number) => boolean | void): void {\n const { _keys: keys } = this;\n const { length } = keys;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n\n for (let i = indexFirst(keys, keyFrom); i < length; i++) {\n const key = keys[i];\n if (keyFrom <= key && key <= keyTo) {\n const callRes = fn(this.get(key) as T, key);\n if (callRes === false) {\n break;\n }\n } else if (keyTo < key) {\n return;\n }\n }\n }\n clear() {\n this._keys.length = 0;\n this._vals = {};\n this._sorted = false;\n }\n\n getLastIndex() {\n return this._keys[this._keys.length - 1];\n }\n\n delLast() {\n const lastIndex = this.getLastIndex();\n this.del(lastIndex);\n }\n\n delAndReorder(index: number) {\n if (!this.has(index)) {\n return;\n }\n const lastIndex = this.getLastIndex();\n\n this.adjustOrder(index + 1, index, lastIndex - index);\n this.delLast();\n }\n\n addAndReorder(index: number, newValue?: T) {\n const lastIndex = this.getLastIndex();\n this.adjustOrder(index, index + 1, lastIndex - index);\n if (isValid(newValue)) {\n this.put(index, newValue);\n }\n }\n}\n","import { cloneDeep, isValid } from '@visactor/vutils';\nimport { NumberMap } from '../tools/NumberMap';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport type { Either } from '../tools/helper';\nimport type {\n CellInfo,\n ColumnIconOption,\n FieldData,\n HeaderData,\n ICustomRender,\n IDimension,\n IDimensionInfo,\n IHeaderTreeDefine,\n IIndicator,\n IRowDimension,\n LayoutObjectId\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type { PivotHeaderLayoutMap } from './pivot-header-layout';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n// import { sharedVar } from './pivot-header-layout';\n\ninterface ITreeLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: ITreeLayoutHeadNode[] | undefined;\n columns?: any; //兼容ListTable情况 simple-header-layout中增加了columnTree\n level: number;\n /** 节点跨占层数 如汇总节点跨几层维度 */\n levelSpan: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\n\ninterface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {\n dimensionKey: string;\n virtual?: boolean;\n}\ninterface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {\n indicatorKey: string;\n hide?: boolean;\n}\nexport type ITreeLayoutHeadNode = Either;\nexport class DimensionTree {\n sharedVar: { seqId: number };\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n hasHideNode = false;\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: ITreeLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n levelSpan: 1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map = new Map();\n // blockEndIndexMap: Map = new Map();\n dimensionKeys: NumberMap = new NumberMap();\n dimensionKeysIncludeVirtual: NumberMap = new NumberMap();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n cache: Map = new Map();\n constructor(\n tree: ITreeLayoutHeadNode[],\n sharedVar: { seqId: number },\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.sharedVar = sharedVar;\n this.reset(tree);\n }\n\n reset(tree: ITreeLayoutHeadNode[]) {\n this.hasHideNode = false;\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.cache.clear();\n this.dimensionKeys = new NumberMap();\n this.dimensionKeysIncludeVirtual = new NumberMap();\n this.tree.children = tree as ITreeLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n // this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n if (node.hide) {\n this.hasHideNode = true;\n }\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n if (\n !node.virtual &&\n !this.dimensionKeys.contain(\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n )\n ) {\n this.dimensionKeys.put(\n (node as any).level,\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n );\n }\n if (\n !this.dimensionKeysIncludeVirtual.contain(\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n )\n ) {\n this.dimensionKeysIncludeVirtual.put(\n (node as any).level,\n (node as any).indicatorKey ? IndicatorDimensionKeyPlaceholder : (node as any).dimensionKey\n );\n }\n if (!(node as any).id) {\n (node as any).id = ++this.sharedVar.seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n const children = node.children || node.columns;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (children?.length >= 1) {\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n this.setTreeNode(n, size, node);\n });\n } else if (\n !node.hierarchyState &&\n node.level + 1 < this.rowExpandLevel &&\n (children?.length >= 1 || children === true)\n ) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n size += this.setTreeNode(n, size, node);\n });\n } else if (children?.length >= 1 || children === true) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.totalLevel = Math.max(this.totalLevel, n.level + 1);\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n getTreePathByCellIds(ids: LayoutObjectId[]): Array {\n const path: any[] = [];\n let nodes = this.tree.children;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const pathNode = this.findNodeById(nodes, id);\n if (pathNode) {\n path.push(pathNode);\n nodes = pathNode.children;\n } else {\n break;\n }\n }\n // path.shift();\n return path;\n }\n findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: ITreeLayoutHeadNode, path: Array, maxDeep: number) {\n if (!node) {\n return;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return;\n }\n path.push(node);\n if (!node.children || node.children.length === 0 || node.level >= maxDeep) {\n return;\n }\n\n // const cIndex = index - node.startIndex;\n // for (let i = 0; i < node.children.length; i++) {\n // const element = node.children[i];\n // if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n // this.searchPath(cIndex, element, path, maxDeep);\n // break;\n // }\n // }\n\n // use dichotomy to optimize search performance\n const cIndex = index - node.startIndex;\n\n if (this.cache.has(node.level + 1)) {\n const cacheNode = this.cache.get(node.level + 1);\n if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) {\n this.searchPath(cIndex, cacheNode, path, maxDeep);\n return;\n }\n }\n\n let left = 0;\n let right = node.children.length - 1;\n\n while (left <= right) {\n const middle = Math.floor((left + right) / 2);\n const element = node.children[middle];\n\n if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n this.cache.set(element.level, element);\n const deleteLevels: number[] = [];\n this.cache.forEach((node, key) => {\n if (key > element.level) {\n deleteLevels.push(key);\n }\n });\n deleteLevels.forEach(key => {\n this.cache.delete(key);\n });\n this.searchPath(cIndex, element, path, maxDeep);\n break;\n } else if (cIndex < element.startIndex) {\n right = middle - 1;\n } else {\n left = middle + 1;\n }\n }\n return;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: ITreeLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: ITreeLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n const children = node.children || node.columns;\n if (children && node.level < level) {\n parNode = node;\n for (let i = 0; i < children.length; i++) {\n if (\n (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size) ||\n (targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size)\n ) {\n findTargetNode(children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const children = parNode.children || parNode.columns;\n const sourceColumns = children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(children, sourceColumns);\n }\n /** 获取纯净树结构 没有level size index这些属性 */\n getCopiedTree() {\n const children = cloneDeep(this.tree.children);\n clearNode(children);\n return children;\n }\n}\n\n//#region 为方法getLayoutRowTree提供的类型和工具方法\nexport type LayouTreeNode = {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children?: LayouTreeNode[];\n};\n\nexport function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]) {\n children?.forEach((node: ITreeLayoutHeadNode) => {\n const diemnsonNode: {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n virtual?: boolean;\n hierarchyState: HierarchyState;\n children: ITreeLayoutHeadNode[];\n levelSpan: number;\n } = {\n dimensionKey: node.dimensionKey,\n indicatorKey: node.indicatorKey,\n value: node.value,\n hierarchyState: node.hierarchyState,\n children: undefined,\n virtual: node.virtual ?? false,\n levelSpan: node.levelSpan ?? 1\n };\n tree.push(diemnsonNode);\n if (node.children) {\n diemnsonNode.children = [];\n generateLayoutTree(diemnsonNode.children, node.children);\n }\n });\n}\n//#endregion\n\n//#region 为方法getLayoutRowTreeCount提的工具方法\nexport function countLayoutTree(children: { children?: any }[], countParentNode: boolean) {\n let count = 0;\n children?.forEach((node: ITreeLayoutHeadNode) => {\n if (countParentNode) {\n count++;\n } else {\n if (!node.children || node.children.length === 0) {\n count++;\n }\n }\n if (node.children) {\n count += countLayoutTree(node.children, countParentNode);\n }\n });\n return count;\n}\n//#endregion\n\nexport function dealHeader(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n layoutMap: PivotHeaderLayoutMap\n // totalLevel: number,\n // indicatorKeys: string[]\n) {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (layoutMap.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (layoutMap.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value && !hd.dimensionKey;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo?.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: hd,\n define: Object.assign({}, hd, indicatorInfo ?? Object.assign({}, dimensionInfo, { sort: undefined })),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n sort: indicatorInfo?.sort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n noDataRenderNothing: 'noDataRenderNothing' in indicatorInfo ? indicatorInfo.noDataRenderNothing : false,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // layoutMap.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // layoutMap.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n layoutMap._headerObjects[id] = cell;\n // //这个if判断处理上层维度和指标之间跨级的情况。即表头可能总共有5层,但是有的节点从跟到指标只有三级,那么合并单元格之前是指标单元格跨了三个单元格,现在处理成最后一个维度单元格跨三个单元格\n // if (\n // ((hd as any).levelSpan ?? 0) <= 1 &&\n // row < totalLevel - 1 &&\n // hd.indicatorKey &&\n // indicatorKeys.includes(hd.indicatorKey) &&\n // (hd.children?.length ?? 0) === 0\n // ) {\n // const newRoots = [...roots];\n // const lastId = newRoots[row - 1] ?? id;\n // for (; row < totalLevel - 1; row++) {\n // if (!_headerCellIds[row]) {\n // _headerCellIds[row] = [];\n // }\n // _headerCellIds[row][layoutMap.colIndex] = lastId;\n // newRoots[row] = lastId;\n // }\n // for (let r = row - 1; r >= 0; r--) {\n // _headerCellIds[r][layoutMap.colIndex] = newRoots[r];\n // }\n // if (!_headerCellIds[row]) {\n // _headerCellIds[row] = [];\n // }\n // } else {\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n // }\n _headerCellIds[row][layoutMap.colIndex] = id;\n\n // 处理汇总小计跨维度层级的情况\n if ((hd as any).levelSpan > 1) {\n for (let i = 1; i < (hd as any).levelSpan; i++) {\n if (!_headerCellIds[row + i]) {\n _headerCellIds[row + i] = [];\n // 当行前几个没有赋值的id 赋值\n for (let col = 0; col < layoutMap.colIndex; col++) {\n _headerCellIds[row + i][col] = _headerCellIds[row][col];\n }\n }\n _headerCellIds[row + i][layoutMap.colIndex] = id;\n }\n }\n\n if ((hd as ITreeLayoutHeadNode).children?.length >= 1) {\n layoutMap._addHeaders(\n _headerCellIds,\n row + ((hd as any).levelSpan ?? 1),\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, ...Array((hd as any).levelSpan ?? 1).fill(id)],\n results\n // totalLevel,\n // indicatorKeys\n );\n // .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n\n // if ((hd as any).levelSpan > 1) {\n // for (let i = 1; i < (hd as any).levelSpan; i++) {\n // _headerCellIds[r + i][layoutMap.colIndex] = id;\n // }\n // }\n }\n layoutMap.colIndex++;\n }\n}\n\nexport function dealHeaderForTreeMode(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n layoutMap: PivotHeaderLayoutMap\n) {\n const id = hd.id;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension;\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo.title,\n field: hd.dimensionKey as FieldData,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle, { textAlign: 'left' }),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n define: Object.assign(hd, {\n linkJump: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.linkJump,\n linkDetect: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.linkDetect,\n templateLink: ((indicatorInfo ?? dimensionInfo) as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: ((indicatorInfo ?? dimensionInfo) as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: ((indicatorInfo ?? dimensionInfo) as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: (indicatorInfo ?? dimensionInfo)?.headerCustomRender,\n headerCustomLayout: (indicatorInfo ?? dimensionInfo)?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader,\n disableHeaderHover: !!(indicatorInfo ?? dimensionInfo)?.disableHeaderHover,\n disableHeaderSelect: !!(indicatorInfo ?? dimensionInfo)?.disableHeaderSelect,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n hide: indicatorInfo?.hide\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey as string,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.hierarchyState, //hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n parentCellId: roots[roots.length - 1]\n };\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n noDataRenderNothing: 'noDataRenderNothing' in indicatorInfo ? indicatorInfo.noDataRenderNothing : false,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, hd)\n });\n }\n }\n results[id] = cell;\n // this._cellIdDiemnsionMap.set(id, {\n // dimensionKey: hd.dimensionKey,\n // value: hd.value\n // });\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as ITreeLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand, //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n dimensions,\n results\n );\n // .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && layoutMap.colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n }\n }\n}\n\nfunction clearNode(children: any) {\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n delete node.level;\n delete node.startIndex;\n delete node.id;\n delete node.levelSpan;\n delete node.size;\n delete node.startInTotal;\n const childrenNew = node.children || node.columns;\n if (childrenNew) {\n clearNode(childrenNew);\n }\n }\n}\n\nexport function deleteTreeHideNode(\n tree_children: LayouTreeNode[],\n dimensionPath: IDimensionInfo[],\n indicators: IIndicator[],\n hasHideNode: boolean,\n table: BaseTableAPI\n) {\n for (let i = tree_children.length - 1; i >= 0; i--) {\n const node = tree_children[i];\n dimensionPath.push(node);\n if (hasHideNode && (node as any).hide) {\n tree_children.splice(i, 1);\n } else if (node.indicatorKey) {\n const hide = indicators?.find(indicator => indicator.indicatorKey === node.indicatorKey)?.hide;\n if (typeof hide === 'function') {\n if (hide({ dimensionPaths: dimensionPath, table })) {\n tree_children.splice(i, 1);\n }\n } else if (hide) {\n tree_children.splice(i, 1);\n }\n } else if (node.children && node.children.length > 0) {\n deleteTreeHideNode(node.children, dimensionPath, indicators, hasHideNode, table);\n }\n dimensionPath.pop();\n }\n}\n","import { isArray, isString } from '@visactor/vutils';\nimport type { PivotTable } from '../PivotTable';\nimport { AggregationType } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type {\n Aggregation,\n IHeaderTreeDefine,\n IIndicator,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from '../ts-types';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\nimport type { IChartColumnIndicator } from '../ts-types/pivot-table/indicator/chart-indicator';\nimport type { SimpleHeaderLayoutMap } from './simple-header-layout';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport type { IImageColumnIndicator, IImageHeaderIndicator } from '../ts-types/pivot-table/indicator/image-indicator';\nimport type { IImageColumnBodyDefine, IImageHeaderDefine } from '../ts-types/list-table/define/image-define';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport { deleteTreeHideNode, DimensionTree } from './tree-helper';\nimport type { ISparklineColumnIndicator } from '../ts-types/pivot-table/indicator/sparkline-indicator';\n\nexport function checkHasAggregation(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkHasAggregationOnTop(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array).filter(item => item.showOnTop).length\n );\n } else if (((column as ColumnData).aggregation as Aggregation).showOnTop) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n\nexport function checkHasAggregationOnBottom(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array).filter(item => !item.showOnTop).length\n );\n } else if (!((column as ColumnData).aggregation as Aggregation).showOnTop) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n\nexport function checkHasTreeDefine(layoutMap: SimpleHeaderLayoutMap) {\n if (layoutMap._table.options.groupBy) {\n return true;\n }\n const { columns } = layoutMap._table.options as ListTableConstructorOptions;\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n if (isString(column)) {\n continue;\n }\n if (column.tree) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasAutoImageColumn(table: BaseTableAPI) {\n const { columns, rows, indicators } = table.options as PivotTableConstructorOptions;\n if (table.isPivotTable()) {\n // pivot table\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n if (isString(column)) {\n continue;\n }\n if (\n (column.headerType === 'image' || column.headerType === 'video' || typeof column.headerType === 'function') &&\n (column as IImageDimension).imageAutoSizing\n ) {\n return true;\n }\n }\n }\n if (isArray(rows) && rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (isString(row)) {\n continue;\n }\n if (\n (row.headerType === 'image' || row.headerType === 'video' || typeof row.headerType === 'function') &&\n (row as IImageDimension).imageAutoSizing\n ) {\n return true;\n }\n }\n }\n if (isArray(indicators) && indicators.length > 0) {\n for (let i = 0; i < indicators.length; i++) {\n const indicator = indicators[i];\n if (isString(indicator)) {\n continue;\n }\n if (\n ((indicator.cellType === 'image' ||\n indicator.cellType === 'video' ||\n typeof indicator.cellType === 'function') &&\n (indicator as IImageColumnIndicator).imageAutoSizing) ||\n ((indicator.headerType === 'image' ||\n indicator.headerType === 'video' ||\n typeof indicator.headerType === 'function') &&\n (indicator as IImageHeaderIndicator).imageAutoSizing)\n ) {\n return true;\n }\n }\n }\n } else {\n // list table\n if (isArray(columns) && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i] as unknown as ListTableConstructorOptions['columns'][0];\n if (\n ((column.cellType === 'image' || column.cellType === 'video' || typeof column.cellType === 'function') &&\n (column as IImageColumnBodyDefine).imageAutoSizing) ||\n ((column.headerType === 'image' ||\n column.headerType === 'video' ||\n typeof column.headerType === 'function') &&\n (column as IImageHeaderDefine).imageAutoSizing)\n ) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\nexport function parseColKeyRowKeyForPivotTable(table: PivotTable, options: PivotTableConstructorOptions) {\n let columnDimensionTree;\n let rowDimensionTree;\n // let isNeedResetColumnDimensionTree = true;\n // let isNeedResetRowDimensionTree = true;\n if (options.columnTree) {\n if (table.options.indicatorsAsCol !== false && table.options.supplementIndicatorNodes !== false) {\n table.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n table.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (table.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n table.layoutNodeId\n );\n\n // if (\n // table.options.supplementIndicatorNodes !== false &&\n // table.options.indicatorsAsCol !== false &&\n // !columnDimensionTree.dimensionKeys.contain(IndicatorDimensionKeyPlaceholder) &&\n // options.indicators?.length >= 1\n // ) {\n // isNeedResetColumnDimensionTree = true;\n // } else {\n // isNeedResetColumnDimensionTree = false;\n // }\n // } else {\n // if (options.indicatorsAsCol !== false) {\n // table.internalProps.columnTree = supplementIndicatorNodesForCustomTree([], options.indicators);\n // }\n }\n if (options.rowTree) {\n if (table.options.indicatorsAsCol === false && table.options.supplementIndicatorNodes !== false) {\n table.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n table.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (table.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n table.layoutNodeId,\n table.options.rowHierarchyType,\n table.options.rowHierarchyType === 'tree' ? table.options.rowExpandLevel ?? 1 : undefined\n );\n // if (\n // table.options.supplementIndicatorNodes !== false &&\n // table.options.indicatorsAsCol === false &&\n // !rowDimensionTree.dimensionKeys.contain(IndicatorDimensionKeyPlaceholder) &&\n // options.indicators?.length >= 1\n // ) {\n // isNeedResetRowDimensionTree = true;\n // } else {\n // isNeedResetRowDimensionTree = false;\n // }\n // } else {\n // if (options.indicatorsAsCol === false) {\n // table.internalProps.rowTree = supplementIndicatorNodesForCustomTree([], options.indicators);\n // }\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys: string[], rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys: string[], columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys: string[], indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n if (\n (indicatorObj as IChartColumnIndicator).chartSpec ||\n (indicatorObj as ISparklineColumnIndicator).sparklineSpec\n ) {\n if (table.internalProps.dataConfig?.aggregationRules) {\n if (\n !table.internalProps.dataConfig.aggregationRules.find(aggregation => {\n return aggregation.indicatorKey === indicatorObj.indicatorKey;\n })\n ) {\n table.internalProps.dataConfig.aggregationRules.push({\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n });\n }\n } else if (table.internalProps.dataConfig) {\n table.internalProps.dataConfig.aggregationRules = [\n {\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n }\n ];\n } else {\n table.internalProps.dataConfig = {\n aggregationRules: [\n {\n field: indicatorObj.indicatorKey,\n indicatorKey: indicatorObj.indicatorKey,\n aggregationType: AggregationType.NONE\n }\n ]\n };\n }\n }\n }\n return keys;\n }, []) ?? [];\n if (options.rowHierarchyType === 'tree' && (options.extensionRows?.length ?? 0) >= 1) {\n options.extensionRows?.forEach(extensionRow => {\n const extension_rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n extension_rowKeys.push(row);\n } else {\n extension_rowKeys.push(row.dimensionKey);\n }\n });\n rowKeys.push(...extension_rowKeys);\n });\n }\n return {\n rowKeys,\n columnKeys,\n indicatorKeys,\n // isNeedResetColumnDimensionTree,\n // isNeedResetRowDimensionTree,\n columnDimensionTree,\n rowDimensionTree\n };\n}\n\nexport function supplementIndicatorNodesForCustomTree(\n customTree: IHeaderTreeDefine[],\n indicators: (string | IIndicator)[]\n) {\n const checkNode = (nodes: IHeaderTreeDefine[], isHasIndicator: boolean) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if (\n !node.indicatorKey &&\n !isHasIndicator &&\n (!(node.children as IHeaderTreeDefine[])?.length || !node.children)\n ) {\n node.children = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n } else if (node.children && Array.isArray(node.children)) {\n checkNode(node.children, isHasIndicator || !!node.indicatorKey);\n }\n });\n };\n if (customTree?.length) {\n checkNode(customTree, false);\n } else {\n customTree = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n }\n return customTree;\n}\n\nexport function deleteHideIndicatorNode(\n treeNodeChildren: LayouTreeNode[],\n indicators: (string | IIndicator)[],\n hasHideNode: boolean,\n table: PivotTable\n) {\n const hasHideSettingIndicators: IIndicator[] = [];\n for (let i = 0; i < indicators?.length; i++) {\n const indicator = indicators[i];\n if ((indicator as IIndicator)?.hide) {\n hasHideSettingIndicators.push(indicator as IIndicator);\n }\n }\n if (hasHideSettingIndicators.length || hasHideNode) {\n deleteTreeHideNode(treeNodeChildren, [], hasHideSettingIndicators, hasHideNode, table);\n }\n}\n","import type { CellRange, TextColumnDefine } from '../../ts-types';\nimport type { SimpleHeaderLayoutMap } from '../simple-header-layout';\n\nexport function getCellRange(col: number, row: number, layout: SimpleHeaderLayoutMap): CellRange {\n if (col === -1 || row === -1) {\n return {\n start: { col, row },\n end: { col, row }\n };\n }\n if (layout._cellRangeMap.has(`$${col}$${row}`)) {\n return layout._cellRangeMap.get(`$${col}$${row}`);\n }\n let cellRange: CellRange = { start: { col, row }, end: { col, row } };\n if (layout.transpose) {\n cellRange = getCellRangeTranspose(col, row, layout);\n } else {\n // hover相关的单元格位置是-1,-1,getCellRange计算有误,先进行判断\n if (layout.headerLevelCount <= row) {\n //如果是body部分 设置了需要合并单元格 这里判断上下是否内容相同 相同的话 将cellRange范围扩大\n if (\n layout.headerLevelCount <= row &&\n (layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount]?.define as TextColumnDefine)?.mergeCell\n ) {\n const value = layout._table.getCellValue(col, row);\n for (let r = row - 1; r >= layout.headerLevelCount; r--) {\n const last_Value = layout._table.getCellValue(col, r);\n if (typeof layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell === 'boolean') {\n if (value !== last_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell as Function)(\n value,\n last_Value,\n {\n source: {\n col,\n row\n },\n target: {\n col,\n row: r\n },\n table: layout._table\n }\n )\n ) {\n break;\n }\n }\n cellRange.start.row = r;\n }\n for (let r = row + 1; r < layout.rowCount; r++) {\n const next_Value = layout._table.getCellValue(col, r);\n if (typeof layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell === 'boolean') {\n if (value !== next_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[col - layout.leftRowSeriesNumberColumnCount].define.mergeCell as Function)(\n value,\n next_Value,\n {\n source: {\n col,\n row\n },\n target: {\n col,\n row: r\n },\n table: layout._table\n }\n )\n ) {\n break;\n }\n }\n cellRange.end.row = r;\n }\n }\n getTreeTitleMerge(col, row, cellRange, layout);\n // return cellRange;\n } else {\n //in header\n const id = layout.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n cellRange.start.col = c;\n }\n for (let c = col + 1; c < (layout.colCount ?? 0); c++) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n cellRange.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n cellRange.start.row = r;\n }\n for (let r = row + 1; r < layout.headerLevelCount; r++) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n cellRange.end.row = r;\n }\n // return cellRange;\n }\n }\n layout._cellRangeMap.set(`$${col}$${row}`, cellRange);\n return cellRange;\n}\n\nfunction getTreeTitleMerge(col: number, row: number, cellRange: CellRange, layout: SimpleHeaderLayoutMap) {\n if (layout.rowHierarchyType !== 'tree') {\n return;\n }\n\n const cellRecord = layout._table.getCellRawRecord(col, row);\n if (layout._table.internalProps.rowSeriesNumber?.enableTreeCheckbox) {\n if (cellRecord?.vtableMerge && col >= layout.leftRowSeriesNumberColumnCount) {\n cellRange.start.col = layout.rowHeaderLevelCount + layout.leftRowSeriesNumberColumnCount;\n cellRange.end.col = layout.colCount - 1;\n cellRange.start.row = cellRange.end.row = row;\n }\n } else {\n if (cellRecord?.vtableMerge) {\n cellRange.start.col = layout.rowHeaderLevelCount;\n cellRange.end.col = layout.colCount - 1;\n cellRange.start.row = cellRange.end.row = row;\n }\n }\n}\n\nexport function getCellRangeTranspose(col: number, row: number, layout: SimpleHeaderLayoutMap): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n // hover相关的单元格位置是-1,-1,getCellRange计算有误,先进行判断\n if (layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount <= col || (col === -1 && row === -1)) {\n //如果是body部分 设置了需要合并单元格 这里判断左右是否内容相同 相同的话 将cellRange范围扩大\n if (\n layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount <= col &&\n layout.columnObjects[row]?.define?.mergeCell\n ) {\n const value = layout._table.getCellValue(col, row);\n for (let c = col - 1; c >= layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount; c--) {\n const last_Value = layout._table.getCellValue(c, row);\n if (typeof layout.columnObjects[row].define.mergeCell === 'boolean') {\n if (value !== last_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[row].define.mergeCell as Function)(value, last_Value, {\n source: {\n col,\n row\n },\n target: {\n col: c,\n row\n },\n table: layout._table\n })\n ) {\n break;\n }\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (layout.colCount ?? 0); c++) {\n const next_Value = layout._table.getCellValue(c, row);\n if (typeof layout.columnObjects[row].define.mergeCell === 'boolean') {\n if (value !== next_Value) {\n break;\n }\n } else {\n if (\n !(layout.columnObjects[row].define.mergeCell as Function)(value, next_Value, {\n source: {\n col,\n row\n },\n target: {\n col: c,\n row\n },\n table: layout._table\n })\n ) {\n break;\n }\n }\n result.end.col = c;\n }\n }\n return result;\n }\n //in header\n const id = layout.getCellId(col, row);\n for (let r = row - 1; r >= 0; r--) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (layout.rowCount ?? 0); r++) {\n if (id !== layout.getCellId(col, r)) {\n break;\n }\n result.end.row = r;\n }\n for (let c = col - 1; c >= 0; c--) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < layout.headerLevelCount + layout.leftRowSeriesNumberColumnCount; c++) {\n if (id !== layout.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n return result;\n}\n","/* eslint-disable sort-imports */\nimport { isValid, merge } from '@visactor/vutils';\nimport type { ListTable } from '../ListTable';\nimport { DefaultSparklineSpec } from '../tools/global';\nimport type {\n CellAddress,\n CellRange,\n CellLocation,\n IListTableCellHeaderPaths,\n LayoutObjectId,\n AggregationType,\n Aggregation,\n IRowSeriesNumber\n} from '../ts-types';\nimport type { ChartColumnDefine, ColumnsDefine } from '../ts-types/list-table/define';\nimport type {\n ColumnData,\n ColumnDefine,\n HeaderData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\nimport { checkHasChart, getChartDataId } from './chart-helper/get-chart-spec';\nimport {\n checkHasAggregation,\n checkHasAggregationOnBottom,\n checkHasAggregationOnTop,\n checkHasTreeDefine\n} from './layout-helper';\nimport type { Aggregator } from '../dataset/statistics-helper';\nimport { DimensionTree } from './tree-helper';\nimport { getCellRange } from './cell-range/simple-cell-range';\n// import { EmptyDataCache } from './utils';\n\n// let seqId = 0;\nexport class SimpleHeaderLayoutMap implements LayoutMapAPI {\n private seqId: number = 0;\n private _headerObjects: HeaderData[];\n private _headerObjectMap: { [key in LayoutObjectId]: HeaderData };\n private _headerObjectsIncludeHided: HeaderData[];\n // private _headerObjectMapIncludeHided: { [key in LayoutObjectId]: HeaderData };\n // private _headerObjectFieldKey: { [key in string]: HeaderData };\n private _headerCellIds: number[][];\n private _columns: ColumnData[];\n private _columnsIncludeHided: ColumnData[];\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumnCount: number = 0;\n /** 后期加的 对应pivot-header-layout 中的columnDimensionTree 为了排序后获取到排序后的columns */\n columnTree: DimensionTree;\n readonly bodyRowSpanCount: number = 1;\n //透视表中树形结构使用 这里为了table逻辑不报错\n // rowHierarchyIndent?: number = 0;\n hierarchyIndent?: number; // 树形展示缩进值\n hierarchyTextStartAlignment?: boolean;\n // private _emptyDataCache = new EmptyDataCache();\n _transpose = false;\n _showHeader = true;\n _recordsCount = 0;\n _table: ListTable;\n _hasAggregation: boolean = false;\n _hasAggregationOnTopCount: number = 0;\n _hasAggregationOnBottomCount: number = 0;\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n _cellRangeMap: Map; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n constructor(table: ListTable, columns: ColumnsDefine, showHeader: boolean, hierarchyIndent: number) {\n this._cellRangeMap = new Map();\n this._showHeader = showHeader;\n this._table = table;\n this._columns = [];\n this._columnsIncludeHided = [];\n this._headerCellIds = [];\n this.hierarchyIndent = hierarchyIndent ?? 20;\n this.hierarchyTextStartAlignment = table.options.hierarchyTextStartAlignment;\n this.columnTree = new DimensionTree(columns as any, { seqId: 0 }); //seqId这里没有利用上 所有顺便传了0\n this._headerObjectsIncludeHided = this._addHeaders(0, columns, []);\n // this._headerObjectMapIncludeHided = this._headerObjectsIncludeHided.reduce((o, e) => {\n // o[e.id as number] = e;\n // return o;\n // }, {} as { [key in LayoutObjectId]: HeaderData });\n\n this._headerObjects = this._headerObjectsIncludeHided.filter(col => {\n return col.define.hide !== true;\n });\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key in LayoutObjectId]: HeaderData });\n this.rowHierarchyType = checkHasTreeDefine(this) ? 'tree' : 'grid';\n this._hasAggregation = checkHasAggregation(this);\n this._hasAggregationOnBottomCount = checkHasAggregationOnBottom(this);\n this._hasAggregationOnTopCount = checkHasAggregationOnTop(this);\n // this._headerObjectFieldKey = this._headerObjects.reduce((o, e) => {\n // o[e.fieldKey] = e;\n // return o;\n // }, {} as { [key in string]: HeaderData });\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map((seriesNumber, index) => {\n return {\n id: this.seqId++,\n title: seriesNumber.title,\n define: merge({ field: '_vtable_rowSeries_number_' + index }, seriesNumber),\n cellType: seriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: seriesNumber.style,\n width: seriesNumber.width,\n format: seriesNumber.format,\n field: seriesNumber.field ?? '_vtable_rowSeries_number_' + index,\n icon: seriesNumber.icon,\n headerIcon: seriesNumber.headerIcon,\n isChildNode: false\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: this.seqId++,\n title: rowSeriesNumber.title,\n define: merge({ field: '_vtable_rowSeries_number' }, rowSeriesNumber),\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '_vtable_rowSeries_number', //rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n headerIcon: rowSeriesNumber.headerIcon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n // get columnWidths(): ColumnData[] {\n // return this._columns;\n // }\n get transpose(): boolean {\n return this._transpose;\n }\n set transpose(_transpose: boolean) {\n this._transpose = _transpose;\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return false;\n } else if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (this.transpose) {\n return false;\n } else if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return true;\n }\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return true;\n }\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return undefined;\n }\n if (row < this.headerLevelCount) {\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: this._table.internalProps.rowSeriesNumber.headerStyle\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (this.transpose) {\n return undefined;\n }\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return this.leftRowSeriesNumberColumn[col];\n }\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (this.transpose) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n isHeader(col: number, row: number): boolean {\n if (\n this.transpose &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (!this.transpose && row >= 0 && row < this.headerLevelCount) {\n return true;\n }\n return false;\n }\n isAggregation(col: number, row: number): boolean {\n // const column = this.getBody(col, row);\n // const aggregation = column.aggregation;\n if (this.hasAggregation) {\n if (this.hasAggregationOnBottomCount) {\n if (this.transpose) {\n if (col >= this.colCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n } else {\n if (row >= this.rowCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n }\n }\n if (this.hasAggregationOnTopCount) {\n if (this.transpose) {\n if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n } else {\n if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n }\n }\n }\n return false;\n }\n isTopAggregation(col: number, row: number): boolean {\n if (this.hasAggregationOnTopCount) {\n if (this.transpose) {\n if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n } else {\n if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) {\n return true;\n }\n }\n }\n return false;\n }\n isBottomAggregation(col: number, row: number): boolean {\n if (this.hasAggregationOnBottomCount) {\n if (this.transpose) {\n if (col >= this.colCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n } else {\n if (row >= this.rowCount - this.hasAggregationOnBottomCount) {\n return true;\n }\n }\n }\n return false;\n }\n get hasAggregation() {\n return this._hasAggregation;\n }\n\n get hasAggregationOnTopCount() {\n return this._hasAggregationOnTopCount;\n }\n\n get hasAggregationOnBottomCount() {\n return this._hasAggregationOnBottomCount;\n }\n\n getAggregatorsByCell(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n return aggregators;\n }\n\n getAggregatorsByCellRange(startCol: number, startRow: number, endCol: number, endRow: number) {\n let aggregators: Aggregator[] = [];\n if (this.transpose) {\n for (let i = startRow; i <= endRow; i++) {\n const column = this.getColumnDefine(startCol, i) as any;\n if (column.vtable_aggregator) {\n aggregators = aggregators.concat(\n Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [column.vtable_aggregator]\n );\n }\n }\n } else {\n for (let i = startCol; i <= endCol; i++) {\n const column = this.getColumnDefine(i, startRow) as any;\n if (column.vtable_aggregator) {\n aggregators = aggregators.concat(\n Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [column.vtable_aggregator]\n );\n }\n }\n return aggregators;\n }\n return [];\n }\n getAggregatorOnTop(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n const aggregation = (column as ColumnDefine).aggregation;\n if (Array.isArray(aggregation)) {\n const topAggregationIndexs = aggregation.reduce((indexs, agg, index) => {\n if (agg.showOnTop) {\n indexs.push(index);\n }\n return indexs;\n }, []);\n const topAggregators = topAggregationIndexs.map(index => aggregators[index]);\n if (this.transpose) {\n return (topAggregators as Aggregator[])[col - this.rowHeaderLevelCount];\n }\n return (topAggregators as Aggregator[])[row - this.columnHeaderLevelCount];\n }\n if (this.transpose && col - this.rowHeaderLevelCount === 0) {\n return (aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n } else if (!this.transpose && row - this.columnHeaderLevelCount === 0) {\n return (aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n }\n return null;\n }\n\n getAggregatorOnBottom(col: number, row: number) {\n const column = this.getColumnDefine(col, row);\n const aggregators = (column as any).vtable_aggregator;\n const aggregation = (column as ColumnDefine).aggregation;\n if (Array.isArray(aggregation)) {\n const bottomAggregationIndexs = aggregation.reduce((indexs, agg, index) => {\n if (!agg.showOnTop) {\n indexs.push(index);\n }\n return indexs;\n }, []);\n const bottomAggregators = bottomAggregationIndexs.map(index => aggregators[index]);\n if (this.transpose) {\n return (bottomAggregators as Aggregator[])[col - (this.colCount - this.hasAggregationOnBottomCount)];\n }\n return (bottomAggregators as Aggregator[])[row - (this.rowCount - this.hasAggregationOnBottomCount)];\n }\n if (this.transpose && col - (this.colCount - this.hasAggregationOnBottomCount) === 0) {\n return !(aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n } else if (!this.transpose && row - (this.rowCount - this.hasAggregationOnBottomCount) === 0) {\n return !(aggregation as Aggregation)?.showOnTop ? (aggregators as Aggregator) : null;\n }\n return null;\n }\n /**\n * 获取单元格所在行或者列中的聚合值的单元格地址\n * @param col\n * @param row\n * @returns\n */\n getAggregatorCellAddress(startCol: number, startRow: number, endCol: number, endRow: number) {\n const cellAddrs = [];\n const topCount = this.hasAggregationOnTopCount;\n const bottomCount = this.hasAggregationOnBottomCount;\n if (this.transpose) {\n for (let row = startRow; row <= endRow; row++) {\n const column = this.getColumnDefine(startCol, row) as any;\n if (column.vtable_aggregator) {\n for (let i = 0; i < topCount; i++) {\n cellAddrs.push({ col: this.headerLevelCount + i, row });\n }\n for (let i = 0; i < bottomCount; i++) {\n cellAddrs.push({ col: this.rowCount - bottomCount + i, row });\n }\n }\n }\n } else {\n for (let col = startCol; col <= endCol; col++) {\n const column = this.getColumnDefine(col, startRow) as any;\n if (column.vtable_aggregator) {\n for (let i = 0; i < topCount; i++) {\n cellAddrs.push({ col, row: this.headerLevelCount + i });\n }\n for (let i = 0; i < bottomCount; i++) {\n cellAddrs.push({ col, row: this.rowCount - bottomCount + i });\n }\n }\n }\n }\n return cellAddrs;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isHeader(col, row)) {\n if (this.transpose) {\n return 'rowHeader';\n }\n return 'columnHeader';\n }\n return 'body';\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n this.transpose &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n !this.transpose &&\n row >= 0 &&\n row <= this.headerLevelCount - 1 &&\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n if (this.transpose) {\n return {\n start: { col: 0, row: 0 },\n end: { col: this._headerCellIds.length - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: this._headerCellIds.length - 1 }\n };\n }\n //目前和getColumnHeaderRange 逻辑一致 因为基本表格只有一侧有表头\n getRowHeaderRange(): CellRange | undefined {\n if (this.transpose) {\n return {\n start: { col: 0, row: 0 },\n end: { col: this._headerCellIds.length - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: this._headerCellIds.length - 1 }\n };\n }\n getCornerHeaderRange(): CellRange | undefined {\n return undefined;\n }\n getBodyRange(): CellRange {\n if (this.transpose) {\n return {\n start: { col: this.headerLevelCount, row: 0 },\n end: { col: (this.colCount ?? 0) - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n return {\n start: { col: 0, row: this.headerLevelCount },\n end: { col: (this.colCount ?? 0) - 1, row: (this.rowCount ?? 0) - 1 }\n };\n }\n /**\n * 是否为最底层表头\n * @param col\n * @param row\n * @returns\n */\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(header.define).columns || (header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n get headerLevelCount(): number {\n return this.showHeader ? this._headerCellIds.length : 0;\n }\n get columnHeaderLevelCount(): number {\n return this.transpose ? 0 : this.headerLevelCount;\n }\n get rowHeaderLevelCount(): number {\n return this.transpose ? this.headerLevelCount : 0;\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n // return this._table.internalProps.frozenRowCount ?? 0;\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get bottomFrozenRowCount(): number {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.frozenColCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return Math.max(0, this.colCount - this.frozenColCount);\n }\n return 0;\n }\n get colCount(): number {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose\n ? this.headerLevelCount +\n this.recordsCount +\n this.leftRowSeriesNumberColumnCount +\n this.rightRowSeriesNumberColumnCount\n : this._columns.length + this.leftRowSeriesNumberColumnCount + this.rightRowSeriesNumberColumnCount;\n }\n get rowCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this._columns.length : this.headerLevelCount + this.recordsCount;\n }\n /** 不包括冻结的行 */\n get bodyRowCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this._columns.length : this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number {\n //转置表格 行数是由表头定义的field决定的;如果是标准表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this.transpose ? this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount : this._columns.length;\n }\n get recordsCount() {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n return this._recordsCount;\n }\n set recordsCount(recordsCount: number) {\n //标准表格 列数是由表头定义的field决定的;如果是转置表格,这个值么有地方用到,而且是由数据量决定的,在listTable中有定义这个值\n this._recordsCount = recordsCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): ColumnData[] {\n return this._columns;\n }\n get headerObjectsIncludeHided(): HeaderData[] {\n return this._headerObjectsIncludeHided;\n }\n //对比multi-layout 那个里面有columWidths对象,保持结构一致\n get columnWidths(): WidthData[] {\n if (this.leftRowSeriesNumberColumnCount) {\n const widths = this.leftRowSeriesNumberColumn.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n });\n widths.push(\n ...this._columns.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n })\n );\n return widths;\n }\n\n return this._columns.map(item => {\n return {\n width: item.width,\n minWidth: item.minWidth,\n maxWidth: item.maxWidth\n };\n });\n }\n\n getColumnWidthDefined(col: number): WidthData {\n if (col >= 0) {\n if (col < this.leftRowSeriesNumberColumnCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n if (this.transpose) {\n let width: string | number = 0;\n let maxWidth: string | number;\n let minWidth: string | number;\n if (col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n let isAuto;\n this.columnObjects.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, minWidth);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.max(obj.maxWidth, maxWidth);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n return { width, minWidth, maxWidth };\n }\n if (this.isRowHeader(col, 0)) {\n const defaultWidth = Array.isArray(this._table.defaultHeaderColWidth)\n ? this._table.defaultHeaderColWidth[col] ?? this._table.defaultColWidth\n : this._table.defaultHeaderColWidth;\n if (defaultWidth === 'auto') {\n return { width: 'auto' };\n }\n return { width: defaultWidth };\n }\n }\n\n return this._columns[col - this.leftRowSeriesNumberColumnCount];\n }\n return undefined;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (this.transpose) {\n if (col >= this.headerLevelCount + this.leftRowSeriesNumberColumnCount) {\n return this._columns[row]?.id;\n }\n if (this.isSeriesNumber(col, row)) {\n return row + '_series_number';\n }\n //in header\n return this._headerCellIds[col - this.leftRowSeriesNumberColumnCount]?.[row];\n }\n if (this.isSeriesNumber(col, row)) {\n return this.rowSeriesNumberColumn[col].id;\n }\n if (this.headerLevelCount <= row) {\n return this._columns[col - this.leftRowSeriesNumberColumnCount]?.id;\n }\n //in header\n return this._headerCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]!;\n }\n getHeaderField(col: number, row: number) {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row)?.field;\n } else if (this.isSeriesNumberInBody(col, row)) {\n return this.getSeriesNumberBody(col, row)?.field;\n }\n const id = this.getCellId(col, row);\n return (\n this._headerObjectMap[id as number]?.field ||\n (this.transpose\n ? this._columns[row] && this._columns[row].field\n : this._columns[col - this.leftRowSeriesNumberColumnCount] &&\n this._columns[col - this.leftRowSeriesNumberColumnCount].field)\n );\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._headerCellIds.length; i++) {\n const row = this._headerCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n if (this.transpose) {\n return { col: i, row: j };\n }\n return { col: j + this.leftRowSeriesNumberColumnCount, row: i };\n }\n }\n }\n return undefined;\n }\n /** 根据field获取表头cell位置 */\n getHeaderCellAddressByField(field: string): CellAddress | undefined {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n getBody(col: number, _row: number): ColumnData | SeriesNumberColumnData {\n if (this.isSeriesNumber(col, _row)) {\n return this.getSeriesNumberBody(col, _row);\n }\n return this.transpose ? this._columns[_row] : this._columns[col - this.leftRowSeriesNumberColumnCount];\n }\n getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n if (this.transpose) {\n for (let row = 0; row < (this.rowCount ?? 0); row++) {\n if (id === this._columns[row].id) {\n return {\n start: { col: 0, row },\n end: { col: 0, row }\n };\n }\n }\n } else {\n for (let col = this.leftRowSeriesNumberColumnCount; col < (this.colCount ?? 0); col++) {\n if (id === this._columns[col - this.leftRowSeriesNumberColumnCount].id) {\n return {\n start: { col, row: 0 },\n end: { col, row: 0 }\n };\n }\n }\n }\n return {\n start: { col: -1, row: -1 },\n end: { col: -1, row: -1 }\n };\n // throw new Error(`can not found body layout @id=${id as number}`);\n }\n getCellRange(col: number, row: number): CellRange {\n return getCellRange(col, row, this);\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n const skipRowCount = this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount;\n if (this.transpose) {\n if (col < skipRowCount) {\n return -1;\n }\n return col - skipRowCount;\n }\n\n if (row < skipRowCount) {\n return -1;\n }\n return row - skipRowCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n const skipRowCount = this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount;\n return skipRowCount + index;\n }\n private _addHeaders(\n row: number,\n column: ColumnsDefine,\n roots: number[],\n hideColumnsSubHeader?: boolean\n ): HeaderData[] {\n const results: HeaderData[] = [];\n const rowCells = this._newRow(row, hideColumnsSubHeader); // !hideColumnsSubHeader ? this._headerCellIds[row] || this._newRow(row) : [];\n column.forEach((hd: ColumnDefine) => {\n const col = this._columns.length;\n const id = this.seqId++;\n const cell: HeaderData = {\n id,\n title: hd.title ?? (hd as any).caption,\n // captionIcon,\n headerIcon: hd.headerIcon,\n field: (hd as ColumnDefine).field,\n // fieldFormat: (hd as ColumnDefine).fieldFormat,\n style: hd.headerStyle,\n headerType: hd.headerType ?? 'text',\n dropDownMenu: hd.dropDownMenu,\n define: hd,\n columnWidthComputeMode: hd.columnWidthComputeMode\n // iconPositionList:[]\n };\n\n results[id] = cell;\n for (let r = row - 1; r >= 0; r--) {\n this._headerCellIds[r] && (this._headerCellIds[r][col] = roots[r]);\n }\n if (!hideColumnsSubHeader) {\n rowCells[col] = id;\n } else if (this._headerCellIds[row - 1]) {\n rowCells[col] = this._headerCellIds[row - 1][col];\n }\n if (hd.columns) {\n this._addHeaders(row + 1, hd.columns, [...roots, id], hd.hideColumnsSubHeader || hideColumnsSubHeader).forEach(\n c => results.push(c)\n );\n } else {\n const colDef = {\n id: this.seqId++,\n field: hd.field,\n // fieldKey: colDef.fieldKey,\n fieldFormat: hd.fieldFormat,\n width: hd.width,\n minWidth: hd.minWidth,\n maxWidth: hd.maxWidth,\n icon: hd.icon,\n cellType: hd.cellType ?? (hd as any).columnType ?? 'text',\n chartModule: 'chartModule' in hd ? hd.chartModule : null, // todo: 放到对应的column对象中\n chartSpec: 'chartSpec' in hd ? hd.chartSpec : null, // todo: 放到对应的column对象中\n sparklineSpec: 'sparklineSpec' in hd ? hd.sparklineSpec : DefaultSparklineSpec, // todo: 放到对应的column对象中\n style: hd.style,\n define: hd,\n columnWidthComputeMode: hd.columnWidthComputeMode,\n disableColumnResize: hd?.disableColumnResize,\n aggregation: hd.aggregation, //getAggregationForColumn(hd, col, this._table),\n isChildNode: row >= 1\n };\n this._columnsIncludeHided.push(colDef);\n if (hd.hide !== true) {\n this._columns.push(colDef);\n\n for (let r = row + 1; r < this._headerCellIds.length; r++) {\n this._headerCellIds[r][col] = id;\n }\n }\n }\n });\n return results;\n }\n\n private _newRow(row: number, hideColumnsSubHeader = false): number[] {\n //如果当前行已经有数组对象 将上一行的id内容补全到当前行上\n if (this._headerCellIds[row]) {\n const prev = this._headerCellIds[row - 1];\n if (prev.length > this._headerCellIds[row].length) {\n for (let col = this._headerCellIds[row].length; col < prev.length; col++) {\n this._headerCellIds[row][col] = prev[col];\n }\n }\n return this._headerCellIds[row];\n }\n // 隐藏子标题的情况 吐出一个新的数组\n if (hideColumnsSubHeader) {\n return [];\n }\n // 其他情况 不隐藏子标题 同步上一行的id\n const newRow: number[] = (this._headerCellIds[row] = []);\n if (!this._columns.length) {\n return newRow;\n }\n const prev = this._headerCellIds[row - 1];\n for (let col = 0; col < prev.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n getCellHeaderPaths(col: number, row: number): IListTableCellHeaderPaths {\n if (this.isSeriesNumber(col, row)) {\n return undefined;\n }\n let colPath: IListTableCellHeaderPaths['colHeaderPaths'] = [];\n let rowPath: IListTableCellHeaderPaths['rowHeaderPaths'] = [];\n if (!this.transpose) {\n colPath = [\n {\n field: this._columns[col - this.leftRowSeriesNumberColumnCount].field\n }\n ];\n } else {\n rowPath = [\n {\n field: this._columns[row].field\n }\n ];\n }\n return {\n colHeaderPaths: colPath,\n rowHeaderPaths: rowPath,\n cellLocation: this.getCellLocation(col, row)\n };\n }\n private getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n if (this.isSeriesNumberInBody(col - 1, row)) {\n return undefined;\n }\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n } else if (\n !this.transpose &&\n this.isSeriesNumberInBody(target.col, target.row) &&\n this.isSeriesNumberInBody(source.col, source.row)\n ) {\n // return true;\n const sourceIndex = this.getRecordShowIndexByCell(0, source.row);\n const targetIndex = this.getRecordShowIndexByCell(0, target.row);\n const canMove = this._table.dataSource.isCanExchangeOrder(sourceIndex, targetIndex);\n return canMove;\n } else if (\n this.transpose &&\n this.isSeriesNumberInBody(target.col, target.row) &&\n this.isSeriesNumberInBody(source.col, source.row)\n ) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n if (\n this.getBody(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n this.getBody(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n } else {\n // 为适应下面的判断逻辑 将col加至表格第一级\n source.col = source.col + this.leftRowSeriesNumberColumnCount;\n target.col = target.col + this.leftRowSeriesNumberColumnCount;\n }\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this._table.internalProps.frozenColDragHeaderMode === 'disabled') {\n if (this._table.isFrozenColumn(target.col)) {\n return false;\n }\n }\n\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: number;\n sourceSize: number;\n targetSize: number;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (this.canMoveHeaderPosition(source, target)) {\n let sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._headerCellIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._headerCellIds[row].splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);\n }\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columns.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columns, sourceColumns);\n\n // 对表头columnTree调整节点位置\n this.columnTree.movePosition(\n sourceCellRange.start.row,\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n targetIndex - this.leftRowSeriesNumberColumnCount\n );\n this.columnTree.reset(this.columnTree.tree.children);\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (\n this.isRowHeader(source.col, source.row) ||\n (this.isSeriesNumberInBody(source.col, source.row) && this.transpose)\n ) {\n if (this.isSeriesNumberInBody(source.col, source.row)) {\n sourceCellRange = this.getCellRange(source.col + this.leftRowSeriesNumberColumnCount, source.row); // 把拖拽转移到拖拽表头节点\n }\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.row - sourceCellRange.start.row + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(sourceCellRange.start.col, target.row);\n if (target.row >= source.row) {\n targetIndex = targetCellRange.end.row - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.row;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.row) {\n return null;\n }\n // 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._headerCellIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._headerCellIds[row].splice(sourceCellRange.start.row, sourceSize);\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);\n }\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columns.splice(sourceCellRange.start.row, sourceSize);\n sourceColumns.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._columns, sourceColumns);\n\n // 对表头columnTree调整节点位置\n this.columnTree.movePosition(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceCellRange.start.row,\n targetIndex + (target.row > source.row ? sourceCellRange.end.row - sourceCellRange.start.row : 0)\n );\n this.columnTree.reset(this.columnTree.tree.children);\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.row - targetCellRange.start.row + 1,\n moveType: 'row'\n };\n } else if (this.isSeriesNumberInBody(source.col, source.row)) {\n return {\n sourceIndex: source.row,\n targetIndex: target.row,\n sourceSize: 1,\n targetSize: 1,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n */\n toggleHierarchyState(diffDataIndices: { add: number[]; remove: number[] }) {\n // const addCellPositions: any[] = [];\n // diffDataIndices.add.forEach(index => {\n // if (\n // this._table.frozenRowCount + index >= this._table.scenegraph.proxy.rowStart &&\n // this._table.frozenRowCount + index <=\n // Math.max(\n // this._table.scenegraph.proxy.rowEnd,\n // this._table.scenegraph.proxy.rowStart + this._table.scenegraph.proxy.rowLimit\n // )\n // ) {\n // addCellPositions.push({ col: 0, row: this._table.frozenRowCount + index });\n // }\n // });\n // const removeCellPositions: any[] = [];\n // diffDataIndices.remove.forEach(index => {\n // if (\n // this._table.frozenRowCount + index >= this._table.scenegraph.proxy.rowStart &&\n // this._table.frozenRowCount + index <= this._table.scenegraph.proxy.rowEnd\n // ) {\n // removeCellPositions.push({ col: 0, row: this._table.frozenRowCount + index });\n // }\n // });\n const addCellPositions = diffDataIndices.add.map(index => {\n return { col: 0, row: this._table.columnHeaderLevelCount + index };\n });\n const removeCellPositions = diffDataIndices.remove.map(index => {\n return { col: 0, row: this._table.columnHeaderLevelCount + index };\n });\n return {\n addCellPositions,\n removeCellPositions\n };\n }\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const columnObj = this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount];\n if (typeof columnObj.chartSpec === 'function') {\n return;\n }\n columnObj.chartInstance = chartInstance;\n }\n\n getChartInstance(_col: number, _row: number) {\n const columnObj = this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount];\n return columnObj.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n return undefined;\n }\n isEmpty(col: number, row: number) {\n return false;\n }\n isAxisCell(col: number, row: number) {\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n return [];\n }\n /** 共享chartSpec 非函数 */\n isShareChartSpec(col: number, row: number): boolean {\n const body = this.getBody(col, row);\n const chartSpec = (body as ColumnData)?.chartSpec;\n if (typeof chartSpec === 'function') {\n return false;\n }\n return true;\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n const body = this.getBody(col, row);\n const noDataRenderNothing = ((body as ColumnData)?.define as ChartColumnDefine).noDataRenderNothing;\n return noDataRenderNothing;\n }\n getChartSpec(col: number, row: number) {\n return this.getRawChartSpec(col, row);\n }\n getRawChartSpec(col: number, row: number): any {\n const body = this.getBody(col, row);\n const chartSpec = (body as ColumnData)?.chartSpec;\n if (typeof chartSpec === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: this._table.getCellOriginValue(col, row) || '',\n value: this._table.getCellValue(col, row) || '',\n rect: this._table.getCellRangeRelativeRect(this._table.getCellRange(col, row)),\n table: this._table\n };\n return chartSpec(arg);\n }\n return chartSpec;\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n release() {\n const activeChartInstance = this._table._getActiveChartInstance();\n activeChartInstance?.release();\n this.columnObjects.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n }\n\n clearCellRangeMap() {\n this._cellRangeMap.clear();\n }\n\n updateColumnTitle(col: number, row: number, title: string) {\n const define = this._table.internalProps.layoutMap.getHeader(col, row);\n define.title = title;\n define.define.title = title;\n }\n\n getColumnByField(field: string | number): {\n col: number;\n columnDefine: ColumnData;\n }[] {\n const result = this.columnObjects?.reduce((pre: { col: number; columnDefine: ColumnData }[], cur, index) => {\n if (cur.field === field) {\n pre.push({ col: index, columnDefine: cur });\n }\n return pre;\n }, []);\n return result;\n }\n\n getColumnDefine(col: number, row: number) {\n if (col >= 0) {\n if (col < this.leftRowSeriesNumberColumnCount) {\n return this.leftRowSeriesNumberColumn[col].define;\n }\n if (this.transpose) {\n return this._columns[row].define;\n }\n\n return this._columns[col - this.leftRowSeriesNumberColumnCount].define;\n }\n return undefined;\n }\n}\n","import type { SortOrder } from '../ts-types';\n\nfunction createArray(get: (i: number) => any, length: number): any[] {\n const array = new Array(length);\n for (let i = 0; i < length; i++) {\n array[i] = get(i);\n }\n return array;\n}\n\nexport function sort(\n get: (i: number) => any,\n set: (i: number, r: any) => void,\n length: number,\n compare: (a: any, b: any, order: SortOrder) => number,\n order: SortOrder,\n getField: (r: any) => any\n) {\n const old = createArray(get, length);\n\n old.sort((r1, r2) => (compare as (a: any, b: any, order: SortOrder) => number)(getField(r1), getField(r2), order));\n for (let i = 0; i < length; i++) {\n set(i, old[i]);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array, arr2: Array) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n","/* Adapted from cheetah-grid by yosuke ota\n *url:https://github.com/future-architect/cheetah-grid/blob/master/packages/cheetah-grid/src/js/core/EventTarget.ts\n *License: https://github.com/future-architect/cheetah-grid/blob/master/LICENSE\n * @license\n */\nimport type {\n TableEventListener,\n EventListenerId,\n TableEventHandlersEventArgumentMap,\n TableEventHandlersReturnMap\n} from '../ts-types';\nimport { isValid } from '@visactor/vutils';\n\nlet idCount = 1;\n\nexport class EventTarget {\n private listenersData: {\n listeners: { [TYPE in keyof TableEventHandlersEventArgumentMap]?: TableEventListener[] };\n listenerData: {\n [id: number]: {\n type: string;\n listener: TableEventListener;\n remove: () => void;\n };\n };\n } = {\n listeners: {},\n listenerData: {}\n };\n\n /**\n * 监听事件\n * @param type 事件类型\n * @param listener 事件监听器\n * @returns 事件监听器id\n */\n on(\n type: TYPE,\n listener: TableEventListener\n ): EventListenerId {\n const list: TableEventListener[] =\n this.listenersData.listeners[type] || (this.listenersData.listeners[type] = []);\n list.push(listener);\n\n const id = idCount++;\n this.listenersData.listenerData[id] = {\n type,\n listener,\n remove: (): void => {\n delete this.listenersData.listenerData[id];\n const index = list.indexOf(listener);\n list.splice(index, 1);\n if (!this.listenersData.listeners[type].length) {\n delete this.listenersData.listeners[type];\n }\n }\n };\n return id;\n }\n\n off(type: string, listener: TableEventListener): void;\n off(id: EventListenerId): void;\n off(\n idOrType: EventListenerId | string,\n listener?: TableEventListener\n ): void {\n if (listener) {\n const type = idOrType as string;\n this.removeEventListener(type, listener);\n } else {\n const id = idOrType as EventListenerId;\n if (!this.listenersData) {\n return;\n }\n this.listenersData.listenerData[id]?.remove();\n }\n }\n\n addEventListener(\n type: TYPE,\n listener: TableEventListener,\n option?: any\n ): void {\n this.on(type, listener);\n }\n\n removeEventListener(type: string, listener: TableEventListener): void {\n if (!this.listenersData) {\n return;\n }\n for (const key in this.listenersData.listenerData) {\n const listenerData = this.listenersData.listenerData[key];\n if (listenerData.type === type && listenerData.listener === listener) {\n this.off(key as unknown as number);\n }\n }\n }\n\n hasListeners(type: string): boolean {\n if (!this.listenersData) {\n return false;\n }\n return !!this.listenersData.listeners[type];\n }\n\n // fireListeners(type: string, ...args: any[]): any {\n // if (!this.listenersData) {\n // return [];\n // }\n // const list = this.listenersData.listeners[type];\n // if (!list) {\n // return [];\n // }\n // return list.map(listener => listener.call(this, ...args)).filter(r => isValid(r));\n // }\n fireListeners(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n if (!this.listenersData) {\n return [];\n }\n const list = this.listenersData.listeners[type];\n if (!list) {\n return [];\n }\n return list.map(listener => listener.call(this, event)).filter(r => isValid(r));\n }\n release(): void {\n delete this.listenersData;\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport interface IAggregator {\n records?: any[];\n value: () => any;\n className: string;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n className = 'Aggregator';\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records?: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n _formatedValue?: any;\n\n constructor(config: { key: string; dimension: string; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.dimension;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records;\n }\n reset() {\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: {\n key: string;\n dimension: string;\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE; //仅获取其中一条数据 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n dimension: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.fieldValue;\n }\n reset() {\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n dimension: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum -= value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum -= value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator') {\n const oldValue = oldRecord.value();\n const newValue = newRecord.value();\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum : undefined;\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator') {\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator') {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n }\n }\n value() {\n return this.count;\n }\n reset() {\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum -= record.sum;\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum -= parseFloat(record[this.field]);\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.className === 'Aggregator' && oldRecord.type === AggregationType.AVG) {\n this.sum += newRecord.sum - oldRecord.sum;\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum += parseFloat(newRecord[this.field]) - parseFloat(oldRecord[this.field]);\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.sum / this.count : undefined;\n }\n reset() {\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.max : undefined;\n }\n reset() {\n this.records = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.recalculate();\n }\n }\n value() {\n return this.records?.length >= 1 ? this.min : undefined;\n }\n reset() {\n this.records = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.className === 'Aggregator') {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (a1.replace(rz, '.0') - b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping = {};\n const lowercase_mapping = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n","import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../dataset/statistics-helper';\nimport type { ColumnsDefine } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nfunction getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n if (fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get: (index: number) => any;\n length: number;\n /** 需要异步加载的情况 请不要设置records */\n records?: any;\n added?: (index: number, count: number) => any;\n deleted?: (index: number[]) => any;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any[] | DataSourceParam | DataSource;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n // private lastOrder: SortOrder;\n // private lastOrderFn: (a: any, b: any, order: string) => number;\n // private lastOrderField: FieldDef;\n private lastSortStates: Array;\n\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map = new Map();\n beforeChangedRecordsMap: Record = {}; // TODO过滤后 或者排序后的对应关系\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (config: {\n dimension: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }): Aggregator;\n };\n } = {};\n rowHierarchyType: 'grid' | 'tree';\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n columns: ColumnsDefine;\n lastFilterRules: FilterRules;\n constructor(\n dataSourceObj?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get;\n this.columns = columns;\n this._source = dataSourceObj?.records ? this.processRecords(dataSourceObj?.records) : dataSourceObj;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n updateColumns(columns: ColumnsDefine) {\n this.columns = columns;\n }\n _generateFieldAggragations() {\n const columnObjs = this.columns;\n this.fieldAggregators = [];\n for (let i = 0; i < columnObjs?.length; i++) {\n delete (columnObjs[i] as any).vtable_aggregator; //重置聚合器 如更新了过滤条件都需要重新计算\n const field = columnObjs[i].field;\n const aggragation = columnObjs[i].aggregation;\n if (!aggragation) {\n continue;\n }\n if (Array.isArray(aggragation)) {\n for (let j = 0; j < aggragation.length; j++) {\n const item = aggragation[j];\n const aggregator = new this.registedAggregators[item.aggregationType]({\n dimension: field as string,\n formatFun: item.formatFun,\n isRecord: true,\n aggregationFun: (item as CustomAggregation).aggregationFun\n });\n this.fieldAggregators.push(aggregator);\n if (!(columnObjs[i] as any).vtable_aggregator) {\n (columnObjs[i] as any).vtable_aggregator = [];\n }\n (columnObjs[i] as any).vtable_aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggragation.aggregationType]({\n dimension: field as string,\n formatFun: aggragation.formatFun,\n isRecord: true,\n aggregationFun: (aggragation as CustomAggregation).aggregationFun\n });\n this.fieldAggregators.push(aggregator);\n (columnObjs[i] as any).vtable_aggregator = aggregator;\n }\n }\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1 || this.lastFilterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n isHasAggregation && this.processRecord(record);\n }\n } else if (this.lastFilterRules?.length >= 1) {\n //上次做了过滤 本次做清除过滤规则的情况\n this.clearFilteredChildren(record);\n isHasAggregation && this.processRecord(record);\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n filteredChildren(records: any[]) {\n const filteredRecords = [];\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n }\n }\n return filteredRecords;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.filteredChildren ? nodeData.filteredChildren.length : nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.filteredChildren ? nodeData.filteredChildren[j] : nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (\n childNodeData.filteredChildren ? childNodeData.filteredChildren.length > 0 : childNodeData.children?.length > 0\n ) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n if ((childNodeData as any).children === true) {\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n get records(): any[] {\n return Array.isArray(this._source) ? this._source : [];\n }\n\n get source(): any[] | DataSourceParam | DataSource {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentPagerIndexedData[index]);\n return record?.hierarchyState ?? null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number, bodyStartIndex: number, bodyEndIndex: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n // 记录状态变化影响的子节点行数\n let childrenLength = 0;\n /**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\n const computeChildrenNodeLength = (\n indexKey: number | number[],\n hierarchyState: HierarchyState,\n nodeData: any\n ) => {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n };\n computeChildrenNodeLength(indexed, state, data);\n\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n const add = [];\n const remove = [];\n if (state === HierarchyState.collapse) {\n const addLength = this.currentIndexedData.length - oldIndexedData.length;\n for (let i = 0; i < addLength; i++) {\n add.push(index + i + 1);\n }\n } else if (state === HierarchyState.expand) {\n const removeLength = oldIndexedData.length - this.currentIndexedData.length;\n for (let i = 0; i < removeLength; i++) {\n remove.push(index + i + 1);\n }\n }\n // const newDiff = calculateArrayDiff(\n // oldIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // this.currentIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // bodyStartIndex\n // );\n // // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // // return oldDiff;\n // return newDiff;\n return { add, remove };\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n const subNodeSortedIndexArray: Array = Array.from({ length: children.length }, (_, i) => i);\n this.lastSortStates?.forEach(state => {\n if (state.order !== 'normal') {\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n children.length,\n state.orderFn,\n state.order,\n index =>\n this.getOriginalField(Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index], state.field)\n );\n }\n });\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!childData.hierarchyState && (childData.filteredChildren ?? childData.children)) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n childData.hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n childData.hierarchyState,\n children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index) as number;\n\n if (!this.beforeChangedRecordsMap[dataIndex]) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap[dataIndex] =\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {};\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap[dataIndex][field as any]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (isPromise(record)) {\n record\n .then(record => {\n record[field] = formatValue;\n })\n .catch((err: Error) => {\n console.error('VTable Error:', err);\n });\n } else {\n if (record) {\n record[field] = formatValue;\n } else {\n this.records[dataIndex] = {};\n this.records[dataIndex][field] = formatValue;\n }\n }\n }\n }\n // return getField(record, field);\n }\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n let isAdd = true;\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n } else {\n isAdd = false;\n }\n }\n if (isAdd && Array.isArray(this.records)) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.records.splice(indexed, 1, record);\n } else {\n // const c_node_index = (indexed as Array)[indexed.length - 1];\n // const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n // (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecord(record: any, index: number) {\n if (Array.isArray(this.records)) {\n this.records.splice(index, 0, record);\n this.adjustBeforeChangedRecordsMap(index, 1);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].push(record);\n }\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, 1);\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number) {\n if (Array.isArray(this.records)) {\n if (Array.isArray(recordArr)) {\n this.records.splice(index, 0, ...recordArr);\n this.adjustBeforeChangedRecordsMap(index, recordArr.length);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n for (let j = 0; j < recordArr.length; j++) {\n this.fieldAggregators[i].push(recordArr[j]);\n }\n }\n }\n\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, recordArr.length);\n }\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap = []; // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n this.records.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap = []; // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n if (Array.isArray(recordArr)) {\n this.records.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n adjustBeforeChangedRecordsMap(insertIndex: number, insertCount: number) {\n const length = this.beforeChangedRecordsMap.length;\n for (let key = length - 1; key >= insertIndex; key--) {\n const record = this.beforeChangedRecordsMap[key];\n delete this.beforeChangedRecordsMap[key];\n this.beforeChangedRecordsMap[key + insertCount] = record;\n }\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n realDeletedRecordIndexs.push(recordIndex);\n const deletedRecord = this.records[recordIndex];\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].deleteRecord(deletedRecord);\n }\n this.records.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n if ((this.dataSourceObj as DataSourceParam)?.deleted) {\n (this.dataSourceObj as DataSourceParam).deleted(realDeletedRecordIndexs);\n }\n return realDeletedRecordIndexs;\n }\n return [];\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex] as number;\n delete this.beforeChangedRecordsMap[rawIndex];\n this.records.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: number[] | number[][]) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (Array.isArray(recordIndex)) {\n delete this.beforeChangedRecordsMap[recordIndex.join(',')];\n realDeletedRecordIndexs.push(recordIndex);\n // for (let i = 0; i < this.fieldAggregators.length; i++) {\n // this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n // }\n\n // this.records[recordIndex[0]][recordIndex[1]][recordIndex[2]] = records[index];\n recordIndex.slice(0, -1).reduce((acc, key) => {\n if (acc[key] === undefined) {\n acc[key] = {};\n }\n return acc[key].children;\n }, this.records)[recordIndex[recordIndex.length - 1]] = records[index];\n } else {\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n realDeletedRecordIndexs.push(recordIndex);\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n }\n this.records[recordIndex] = records[index];\n }\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n delete this.beforeChangedRecordsMap[rawIndex];\n realDeletedRecordIndexs.push(recordIndex);\n this.records[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(states: Array): void {\n // Convert states into an array and filter out unnecessary ones\n states = (Array.isArray(states) ? states : [states]).filter(state => {\n const column = this.columns.find(obj => obj.field === state.field);\n return column?.sort !== false && state.order !== 'normal';\n });\n\n // Save the sorting states\n this.lastSortStates = states;\n\n // Get an array of sorting objects for each state\n let filedMapArray: Array = states.map(\n state => this.sortedIndexMap.get(state?.field) || { asc: [], desc: [], normal: [] }\n );\n\n let orderedData: number[] | null = null;\n\n // If there is already sorted data in the caches, take it\n if (filedMapArray.length > 0) {\n orderedData = states.reduce((data, state, index) => {\n const currentData = (filedMapArray[index] as any)?.[state.order];\n return currentData && currentData.length > 0 ? currentData : data;\n }, null);\n\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n\n // If there is no cache, we start sorting\n const sortedIndexArray: number[] = Array.from({ length: this._sourceLength }, (_, i) => i);\n\n // Perform sorting on each state\n sortedIndexArray.sort((indexA, indexB) => {\n return states.reduce((result: number, state: SortState) => {\n if (result !== 0) {\n return result;\n }\n\n const orderFn =\n state.orderFn ||\n (state.order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1));\n\n return orderFn(\n this.getOriginalField(indexA, state.field),\n this.getOriginalField(indexB, state.field),\n state.order\n );\n }, 0);\n });\n\n this.currentIndexedData = sortedIndexArray;\n\n // Process the hierarchy, if any\n if (this.hierarchyExpandLevel) {\n let nodeLength = sortedIndexArray.length;\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i])\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n\n // If there were no caches, initialize them\n if (!filedMapArray.length) {\n filedMapArray = states.map(() => ({ asc: [], desc: [], normal: [] }));\n for (let index = 0; index < states.length; index++) {\n this.sortedIndexMap.set(states[index].field, filedMapArray[index]);\n }\n }\n\n // Save the sorted indexes for each state to the cache\n states.forEach((state, index) => {\n const mapItem = filedMapArray[index] as ISortedMapItem;\n (mapItem as any)[state.order] = sortedIndexArray.slice(); // Save a copy of the array\n });\n\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.sortedIndexMap.set(field, filedMap);\n }\n\n private clearFilteredChildren(record: any) {\n record.filteredChildren = undefined;\n for (let i = 0; i < record.children?.length ?? 0; i++) {\n this.clearFilteredChildren(record.children[i]);\n }\n }\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules?.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n const isFieldInRules = this.lastSortStates.some(state => state.field === key);\n if (!isFieldInRules) {\n this.sortedIndexMap.delete(key);\n } else {\n this.lastSortStates.forEach(state => {\n if (state.order === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (state.order === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.asc = [];\n sortMap.desc = [];\n }\n });\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n this.lastFilterRules = null;\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n // if (this.dataConfig?.filterRules) {\n // return (this.records as Array)[dataIndex as number];\n // }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[dataIndex as number]) {\n return this.beforeChangedRecordsMap[dataIndex as number];\n }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n isCanExchangeOrder(sourceIndex: number, targetIndex: number) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n // 拖拽调整数据位置 目前对排序过的数据不过处理,因为自动排序和手动排序融合问题目前没有找到好的解决方式\n reorderRecord(sourceIndex: number, targetIndex: number) {\n if (this.lastSortStates?.some(state => state.order === 'asc' || state.order === 'desc')) {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.isCanExchangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n const sourceIds = parent.filteredChildren\n ? parent.filteredChildren.splice(sourceI, 1)\n : parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.filteredChildren ?? parent.children, sourceIds);\n } else {\n const sourceIds = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, sourceIds);\n }\n } else {\n sourceI = this.currentPagerIndexedData[sourceIndex] as number;\n targetI = this.currentPagerIndexedData[targetIndex];\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceIndex, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetIndex, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n }\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n const nodeLength = children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n}\n\n/**\n * 从数组array中获取index的值\n * 如:给index=[0,0] 则返回 array[0].children[0];如果给index=[2] 则返回array[2]; 如果给index=[3,0,4] 则返回array[3].children[0].children[4]\n * @param array\n * @param index\n * @returns\n */\nfunction getValueFromDeepArray(array: any, index: number[]) {\n let result = array;\n for (let i = 0; i < index.length; i++) {\n const currentIdx = index[i];\n if (result[currentIdx]) {\n result = result[currentIdx];\n } else {\n return undefined;\n }\n const children = result.filteredChildren ?? result?.children;\n if (children && i + 1 < index.length) {\n result = children;\n }\n }\n return result;\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport {\n AggregationType,\n HierarchyState,\n type FieldData,\n type FieldDef,\n type IListTableDataConfig,\n type IPagination,\n type MaybePromise,\n type MaybePromiseOrUndefined\n} from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type { ColumnData, ColumnsDefine } from '../ts-types/list-table/layout-map/api';\nimport type { DataSourceParam } from './DataSource';\nimport { DataSource } from './DataSource';\n\n/** @private */\nfunction _setFieldCache(\n fCache: { [index: number]: Map },\n index: number,\n field: FieldDef,\n\n value: any\n): void {\n const recCache = fCache[index] || (fCache[index] = new Map());\n recCache.set(field, value);\n}\n/**\n * table data source for caching Promise data\n *\n * @classdesc VTable.data.CachedDataSource\n * @memberof VTable.data\n */\nexport class CachedDataSource extends DataSource {\n /**\n * record cache 当用户定义的CachedDataSource.get为promise的时候 可以用rCache缓存已获取数据条目\n */\n private _recordCache: any[];\n /**\n * field cache 当用户定义field为promise的时候 可以用fCache缓存已获取值\n */\n private _fieldCache: { [index: number]: Map };\n\n groupAggregator: any;\n\n static get EVENT_TYPE(): typeof DataSource.EVENT_TYPE {\n return DataSource.EVENT_TYPE;\n }\n static ofArray(\n array: any[],\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ): CachedDataSource {\n return new CachedDataSource(\n {\n get: (index: number): any => {\n // if (Array.isArray(index)) {\n // return getValueFromDeepArray(array, index);\n // }\n return array[index];\n },\n length: array.length,\n records: array\n },\n dataConfig,\n pagination,\n columns,\n rowHierarchyType,\n hierarchyExpandLevel\n );\n }\n\n // _originalRecords: any[];\n constructor(\n opt?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n if (isArray(dataConfig?.groupByRules)) {\n rowHierarchyType = 'tree';\n }\n super(opt, dataConfig, pagination, columns, rowHierarchyType, hierarchyExpandLevel);\n this._recordCache = [];\n this._fieldCache = {};\n }\n protected getOriginalRecord(index: number): MaybePromiseOrUndefined {\n if (this._recordCache && this._recordCache[index]) {\n return this._recordCache[index];\n }\n return super.getOriginalRecord(index);\n }\n protected getRawRecord(index: number): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.[index as number]) {\n return this.beforeChangedRecordsMap[index as number];\n }\n if (this._recordCache && this._recordCache[index]) {\n return this._recordCache[index];\n }\n return super.getRawRecord(index);\n }\n protected getOriginalField(\n index: number,\n field: F,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n const rowCache = this._fieldCache && this._fieldCache[index];\n if (rowCache) {\n const cache = rowCache.get(field);\n if (cache) {\n return cache;\n }\n }\n return super.getOriginalField(index, field, col, row, table);\n }\n\n clearCache(): void {\n if (this._recordCache) {\n this._recordCache = [];\n }\n if (this._fieldCache) {\n this._fieldCache = {};\n }\n }\n\n protected fieldPromiseCallBack(index: number, field: F, value: MaybePromiseOrUndefined): void {\n _setFieldCache(this._fieldCache, index, field, value);\n }\n protected recordPromiseCallBack(index: number, record: MaybePromiseOrUndefined): void {\n this._recordCache && (this._recordCache[index] = record);\n }\n get records(): any[] {\n return Array.isArray(this._recordCache) && this._recordCache.length > 0 ? this._recordCache : super.records;\n }\n\n release(): void {\n super.release?.();\n this._recordCache = null;\n this._fieldCache = null;\n }\n\n _generateFieldAggragations() {\n super._generateFieldAggragations();\n // groupby aggragations\n if (isArray(this.dataConfig?.groupByRules)) {\n // const groupByKey = this.dataConfig.groupByRules[0];\n const groupByKeys = this.dataConfig.groupByRules;\n this.groupAggregator = new this.registedAggregators[AggregationType.CUSTOM]({\n dimension: '',\n aggregationFun: (values: any, records: any, field: any) => {\n const groupMap = new Map();\n const groupResult = [] as any[];\n for (let i = 0; i < records.length; i++) {\n dealWithGroup(records[i], groupResult, groupMap, groupByKeys, 0);\n records[i].vtableOriginIndex = i;\n }\n return groupResult;\n }\n });\n this.fieldAggregators.push(this.groupAggregator);\n }\n }\n\n processRecords(records: any[]) {\n const result = super.processRecords(records);\n const groupResult = this.groupAggregator?.value();\n if (groupResult) {\n // this._originalRecords = result;\n return groupResult;\n }\n return result;\n }\n\n getGroupLength() {\n return this.dataConfig?.groupByRules?.length ?? 0;\n }\n\n updateGroup() {\n this.clearCache();\n\n const oldSource = this.source;\n (this as any)._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n if (oldSource) {\n syncGroupCollapseState(oldSource, this.source);\n }\n\n // syncGroupCollapseState(this.source, newSource.source);\n this.sourceLength = this.source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this.sourceLength }, (_, i) => i);\n if (!this.userPagination) {\n this.pagination.perPageCount = this.sourceLength;\n this.pagination.totalCount = this.sourceLength;\n }\n\n this.initTreeHierarchyState();\n this.updatePagerData();\n }\n\n addRecordsForGroup(recordArr: any[], recordIndex?: number) {\n if (!isArray(recordArr) || recordArr.length === 0) {\n return;\n }\n if (recordIndex === undefined || recordIndex > this.dataSourceObj.records) {\n recordIndex = this.dataSourceObj.records;\n }\n // this.dataSourceObj.records.push(...recordArr);\n this.dataSourceObj.records.splice(recordIndex, 0, ...recordArr);\n\n this.updateGroup();\n }\n\n deleteRecordsForGroup(recordIndexs: number[]) {\n if (!isArray(recordIndexs) || recordIndexs.length === 0) {\n return;\n }\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this.sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n this.dataSourceObj.records.splice(recordIndex, 1);\n this.sourceLength -= 1;\n }\n\n this.updateGroup();\n }\n\n updateRecordsForGroup(records: any[], recordIndexs: number[]) {\n // const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this.sourceLength || recordIndex < 0) {\n continue;\n }\n delete this.beforeChangedRecordsMap[recordIndex];\n // realDeletedRecordIndexs.push(recordIndex);\n this.dataSourceObj.records[recordIndex] = records[index];\n }\n\n this.updateGroup();\n }\n}\n\nfunction dealWithGroup(record: any, children: any[], map: Map, groupByKeys: string[], level: number): any {\n const groupByKey = groupByKeys[level];\n if (!isValid(groupByKey)) {\n children.push(record);\n return;\n }\n const value = record[groupByKey];\n if (value !== undefined) {\n if (map.has(value)) {\n const index = map.get(value);\n // children[index].children.push(record);\n return dealWithGroup(record, children[index].children, children[index].map, groupByKeys, level + 1);\n }\n map.set(value, children.length);\n children.push({\n vtableMerge: true,\n vtableMergeName: value,\n children: [] as any,\n map: new Map()\n });\n return dealWithGroup(\n record,\n children[children.length - 1].children,\n children[children.length - 1].map,\n groupByKeys,\n level + 1\n );\n }\n}\n\nfunction syncGroupCollapseState(\n oldSource: any,\n newSource: any,\n oldGroupMap?: Map,\n newGroupMap?: Map\n) {\n if (!oldGroupMap) {\n oldGroupMap = new Map();\n for (let i = 0; i < oldSource.length; i++) {\n const record = oldSource[i];\n if (record.vtableMerge) {\n oldGroupMap.set(record.vtableMergeName, i);\n }\n }\n }\n\n if (!newGroupMap) {\n newGroupMap = new Map();\n for (let i = 0; i < newSource.length; i++) {\n const record = newSource[i];\n if (record.vtableMerge) {\n newGroupMap.set(record.vtableMergeName, i);\n }\n }\n }\n\n for (let i = 0; i < oldSource.length; i++) {\n const oldRecord = oldSource[i];\n const newRecord = newSource[newGroupMap.get(oldRecord.vtableMergeName)];\n if (isValid(newRecord)) {\n newRecord.hierarchyState = oldSource[i].hierarchyState;\n }\n if (\n isArray(oldRecord.children) &&\n isArray(newRecord.children) &&\n oldRecord.map.size !== 0 &&\n newRecord.map.size !== 0\n ) {\n syncGroupCollapseState(oldRecord.children, newRecord.children, oldRecord.map, newRecord.map);\n }\n }\n}\n","// @ts-nocheck\nimport parse from 'cssfontparser';\n\nexport function parseFont(font: string) {\n return parse(font);\n}\n","import { Bounds } from '@visactor/vutils';\nimport type { RectProps } from '../ts-types';\n\nexport class Rect implements RectProps {\n bounds: Bounds;\n constructor(left: number, top: number, width: number, height: number) {\n this.bounds = new Bounds();\n this.bounds.set(left, top, left + width, top + height);\n }\n\n static bounds(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, Math.round(right - left), Math.round(bottom - top));\n }\n\n get left(): number {\n return this.bounds.x1;\n }\n set left(left: number) {\n this.bounds.x1 = left;\n }\n get top(): number {\n return this.bounds.y1;\n }\n set top(top: number) {\n this.bounds.y1 = top;\n }\n get right(): number {\n return this.bounds.x2;\n }\n set right(right: number) {\n this.bounds.x2 = right;\n }\n get bottom(): number {\n return this.bounds.y2;\n }\n set bottom(bottom: number) {\n this.bounds.y2 = bottom;\n }\n get width(): number {\n return this.bounds.width();\n }\n set width(width: number) {\n this.bounds.x2 = this.bounds.x1 + width;\n }\n get height(): number {\n return this.bounds.height();\n }\n set height(height: number) {\n this.bounds.y2 = this.bounds.y1 + height;\n }\n\n offsetLeft(offset: number): void {\n this.bounds.translate(offset, 0);\n }\n offsetTop(offset: number): void {\n this.bounds.translate(0, offset);\n }\n copy(): Rect {\n return new Rect(this.left, this.top, this.width, this.height);\n }\n contains(another: Rect): boolean {\n return this.bounds.encloses(another.bounds);\n }\n inPoint(x: number, y: number): boolean {\n return this.bounds.contains(x, y);\n }\n}\n","/* Adapted from cheetah-grid by yosuke ota\n *url:https://github.com/future-architect/cheetah-grid/blob/master/packages/cheetah-grid/src/js/internal/calc.ts\n *License: https://github.com/future-architect/cheetah-grid/blob/master/LICENSE\n * @license\n */\n\nimport { isNil, isNumber, isString } from '@visactor/vutils';\nimport { array } from './helper';\n\nconst TYPE_PAREN = 0;\nconst TYPE_UNIT = 1;\nconst TYPE_OPERATOR = 2;\nconst TYPE_NUMBER = 3;\n\nconst NODE_TYPE_UNIT = 10;\nconst NODE_TYPE_BINARY_EXPRESSION = 11;\nconst NODE_TYPE_NUMBER = 12;\n\ntype Ops = '-' | '+' | '*' | '/';\ntype ParenToken = {\n value: '(' | ')';\n type: typeof TYPE_PAREN;\n};\ntype UnitToken = {\n unit: string;\n value: number;\n type: typeof TYPE_UNIT;\n};\ntype OpToken = {\n value: Ops;\n type: typeof TYPE_OPERATOR;\n};\ntype NumToken = {\n value: number;\n type: typeof TYPE_NUMBER;\n};\ntype Token = ParenToken | UnitToken | OpToken | NumToken;\ntype UnitNode = {\n nodeType: typeof NODE_TYPE_UNIT;\n unit: string;\n value: number;\n};\ntype BinaryNode = {\n nodeType: typeof NODE_TYPE_BINARY_EXPRESSION;\n left: Node;\n op: OpToken;\n right: Node;\n};\ntype NumNode = {\n nodeType: typeof NODE_TYPE_NUMBER;\n value: number;\n};\ntype Node = UnitNode | BinaryNode | NumNode;\n\nconst TABULATION = 0x09;\nconst CARRIAGE_RETURN = 0x0d;\nconst LINE_FEED = 0x0a;\nconst FORM_FEED = 0x0c;\nconst SPACE = 0x20;\nconst PERCENT = 0x25;\nconst FULL_STOP = 0x2e;\nconst DIGIT_0 = 0x30;\nconst DIGIT_9 = 0x39;\nconst LATIN_CAPITAL_A = 0x41;\nconst LATIN_CAPITAL_Z = 0x5a;\nconst LATIN_SMALL_A = 0x61;\nconst LATIN_SMALL_Z = 0x7a;\nfunction isUpperLetter(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z;\n}\nfunction isLowerLetter(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z;\n}\nfunction isLetter(cp: number): boolean {\n return isLowerLetter(cp) || isUpperLetter(cp);\n}\nfunction isWhitespace(cp: number): boolean {\n return cp === TABULATION || cp === LINE_FEED || cp === FORM_FEED || cp === CARRIAGE_RETURN || cp === SPACE;\n}\nfunction isDigit(cp: number): boolean {\n return cp >= DIGIT_0 && cp <= DIGIT_9;\n}\nfunction isDot(cp: number): boolean {\n return cp === FULL_STOP;\n}\nfunction isUnit(cp: number): boolean {\n return isLetter(cp) || cp === PERCENT;\n}\n\nfunction createError(calc: string): Error {\n return new Error(`calc parse error: ${calc}`);\n}\n\n/**\n * tokenize\n * @param {string} calc calc expression\n * @returns {Array} tokens\n * @private\n */\nfunction tokenize(calc: string): Token[] {\n const exp = calc.replace(/calc\\(/g, '(').trim();\n\n const tokens: Token[] = [];\n const len = exp.length;\n for (let index = 0; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (c === '(' || c === ')') {\n tokens.push({ value: c, type: TYPE_PAREN });\n } else if (c === '*' || c === '/') {\n tokens.push({ value: c, type: TYPE_OPERATOR });\n } else if (c === '+' || c === '-') {\n index = parseSign(c, index + 1) - 1;\n } else if (isDigit(cp) || isDot(cp)) {\n index = parseNum(c, index + 1) - 1;\n } else if (isWhitespace(cp)) {\n // skip\n } else {\n throw createError(calc);\n }\n }\n\n function parseSign(sign: '+' | '-', start: number): number {\n if (start < len) {\n const c = exp[start];\n const cp = c.charCodeAt(0);\n if (isDigit(cp) || isDot(cp)) {\n return parseNum(sign + c, start + 1);\n }\n }\n tokens.push({ value: sign, type: TYPE_OPERATOR });\n return start;\n }\n function parseNum(num: string, start: number): number {\n let index = start;\n for (; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (isDigit(cp)) {\n num += c;\n } else if (c === '.') {\n if (num.indexOf('.') >= 0) {\n throw createError(calc);\n }\n num += c;\n } else if (isUnit(cp)) {\n return parseUnit(num, c, index + 1);\n } else {\n break;\n }\n }\n if (num === '.') {\n throw createError(calc);\n }\n tokens.push({ value: parseFloat(num), type: TYPE_NUMBER });\n return index;\n }\n function parseUnit(num: string, unit: string, start: number): number {\n let index = start;\n for (; index < len; index++) {\n const c = exp[index];\n const cp = c.charCodeAt(0);\n if (isUnit(cp)) {\n unit += c;\n } else {\n break;\n }\n }\n tokens.push({ value: parseFloat(num), unit, type: TYPE_UNIT });\n return index;\n }\n return tokens;\n}\n\nconst PRECEDENCE = {\n '*': 3,\n '/': 3,\n '+': 2,\n '-': 2\n};\n\nfunction lex(tokens: Token[], calc: string): Node {\n function buildBinaryExpNode(stack: (Node | OpToken)[]): BinaryNode {\n const right = stack.pop() as Node;\n const op = stack.pop() as OpToken;\n const left = stack.pop() as Node;\n\n if (!left || !left.nodeType || !op || op.type !== TYPE_OPERATOR || !right || !right.nodeType) {\n throw createError(calc);\n }\n return {\n nodeType: NODE_TYPE_BINARY_EXPRESSION,\n left,\n op,\n right\n };\n }\n\n const stack: (Node | OpToken)[] = [];\n\n while (tokens.length) {\n const token = tokens.shift() as Token;\n if (token.type === TYPE_PAREN && token.value === '(') {\n let deep = 0;\n const closeIndex = array.findIndex(tokens, t => {\n if (t.type === TYPE_PAREN && t.value === '(') {\n deep++;\n } else if (t.type === TYPE_PAREN && t.value === ')') {\n if (!deep) {\n return true;\n }\n deep--;\n }\n return false;\n });\n if (closeIndex === -1) {\n throw createError(calc);\n }\n\n stack.push(lex(tokens.splice(0, closeIndex), calc));\n tokens.shift();\n } else if (token.type === TYPE_OPERATOR) {\n if (stack.length >= 3) {\n const beforeOp = (stack[stack.length - 2] as OpToken).value;\n if (PRECEDENCE[token.value] <= PRECEDENCE[beforeOp]) {\n stack.push(buildBinaryExpNode(stack));\n }\n }\n stack.push(token);\n } else if (token.type === TYPE_UNIT) {\n const { value: num, unit } = token;\n stack.push({\n nodeType: NODE_TYPE_UNIT,\n value: num,\n unit\n });\n } else if (token.type === TYPE_NUMBER) {\n stack.push({\n nodeType: NODE_TYPE_NUMBER,\n value: token.value\n });\n }\n }\n while (stack.length > 1) {\n stack.push(buildBinaryExpNode(stack));\n }\n return stack[0] as Node;\n}\n\nfunction parse(calcStr: string): Node {\n const tokens = tokenize(calcStr);\n return lex(tokens, calcStr);\n}\n\nfunction calcNode(node: Node, context: CalcContext): number {\n if (node.nodeType === NODE_TYPE_BINARY_EXPRESSION) {\n const left = calcNode(node.left, context);\n const right = calcNode(node.right, context);\n\n switch (node.op.value) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`calc error. unknown operator: ${node.op.value}`);\n }\n } else if (node.nodeType === NODE_TYPE_UNIT) {\n switch (node.unit) {\n case '%':\n return (node.value * context.full) / 100;\n // case 'em':\n // return node.value * context.em;\n case 'px':\n return node.value;\n default:\n throw new Error(`calc error. unknown unit: ${node.unit}`);\n }\n } else if (node.nodeType === NODE_TYPE_NUMBER) {\n return node.value;\n }\n throw new Error('calc error.');\n}\n\nfunction toPxInternal(value: string, context: CalcContext): number {\n const ast = parse(value);\n return calcNode(ast, context);\n}\n\ntype CalcContext = {\n full: number;\n // em: number;\n};\n\nexport function toPx(value: string | number, context: CalcContext): number {\n if (typeof value === 'string') {\n return toPxInternal(value.trim(), context);\n }\n return value - 0;\n}\n\nexport type IPercent = `${number}%`;\n\nexport function couldBeValidNumber(v: any) {\n if (isNil(v)) {\n return false;\n }\n if (isNumber(v)) {\n return true;\n }\n // eslint-disable-next-line no-self-compare\n return +v === +v;\n}\n\nexport function isPercent(v: any): v is IPercent {\n if (!isString(v)) {\n return false;\n }\n if (!v.endsWith('%')) {\n return false;\n }\n return couldBeValidNumber(v.substring(0, v.length - 1));\n}\n","import type { IThemeSpec } from './../vrender';\nimport type { BaseTable } from '../core';\nimport { CachedDataSource, DataSource } from '../data';\nimport { parseFont } from '../scenegraph/utils/font';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport { Rect } from '../tools/Rect';\nimport * as calc from '../tools/calc';\nimport type {\n Aggregation,\n ColumnsDefine,\n CustomAggregation,\n FullExtendStyle,\n ListTableAPI,\n ListTableConstructorOptions,\n SortState\n} from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { defaultOrderFn } from '../tools/util';\nimport type { ListTable } from '../ListTable';\nimport { isValid } from '@visactor/vutils';\n\nexport function createRootElement(padding: any, className: string = 'vtable'): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('tabindex', '0');\n element.classList.add(className);\n element.style.outline = 'none';\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n\n return element;\n}\nexport function updateRootElementPadding(element: HTMLElement, padding: any): void {\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n}\nexport function _dealWithUpdateDataSource(table: BaseTableAPI, fn: (table: BaseTableAPI) => void): void {\n const { dataSourceEventIds } = table.internalProps;\n\n if (dataSourceEventIds) {\n dataSourceEventIds.forEach((id: any) => table.internalProps.handler.off(id));\n }\n\n fn(table);\n\n table.internalProps.dataSourceEventIds = [\n table.internalProps.handler.on(table.internalProps.dataSource, DataSource.EVENT_TYPE.CHANGE_ORDER, () => {\n if (table.dataSource.hierarchyExpandLevel) {\n table.refreshRowColCount();\n }\n table.render();\n })\n ];\n}\n/** @private */\nexport function _setRecords(table: ListTableAPI, records: any[] = []): void {\n _dealWithUpdateDataSource(table, () => {\n table.internalProps.records = records;\n const newDataSource = (table.internalProps.dataSource = CachedDataSource.ofArray(\n records,\n table.internalProps.dataConfig,\n table.pagination,\n table.internalProps.columns,\n table.internalProps.layoutMap.rowHierarchyType,\n getHierarchyExpandLevel(table)\n ));\n table.addReleaseObj(newDataSource);\n });\n}\n\nfunction getHierarchyExpandLevel(table: ListTableAPI) {\n if ((table.options as ListTableConstructorOptions).hierarchyExpandLevel) {\n return (table.options as ListTableConstructorOptions).hierarchyExpandLevel;\n } else if (table.options.groupBy) {\n return Infinity;\n }\n return table._hasHierarchyTreeHeader?.() ? 1 : undefined;\n}\n\nexport function _setDataSource(table: BaseTableAPI, dataSource: DataSource): void {\n _dealWithUpdateDataSource(table, () => {\n if (dataSource) {\n if (dataSource instanceof DataSource) {\n table.internalProps.dataSource = dataSource;\n } else {\n const newDataSource = (table.internalProps.dataSource = new CachedDataSource(dataSource));\n table.addReleaseObj(newDataSource);\n }\n } else {\n table.internalProps.dataSource = DataSource.EMPTY;\n }\n table.internalProps.records = null;\n });\n}\nexport function _getTargetFrozenRowAt(\n table: BaseTableAPI,\n absoluteY: number\n): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n} | null {\n if (!table.internalProps.frozenRowCount) {\n return null;\n }\n let { scrollTop } = table;\n const rowCount = table.internalProps.frozenRowCount;\n for (let row = 0; row < rowCount; row++) {\n const height = table.getRowHeight(row);\n const bottom = scrollTop + height;\n if (bottom > absoluteY) {\n return {\n top: scrollTop,\n row,\n bottom,\n height\n };\n }\n scrollTop = bottom;\n }\n return null;\n}\n\nexport function _getTargetFrozenColAt(\n table: BaseTableAPI,\n absoluteX: number\n): {\n left: number;\n col: number;\n right: number;\n width: number;\n} | null {\n if (!table.internalProps.frozenColCount) {\n return null;\n }\n let { scrollLeft } = table;\n const colCount = table.internalProps.frozenColCount;\n for (let col = 0; col < colCount; col++) {\n const width = table.getColWidth(col);\n const right = scrollLeft + width;\n if (right > absoluteX) {\n return {\n left: scrollLeft,\n col,\n right,\n width\n };\n }\n scrollLeft = right;\n }\n return null;\n}\n\nexport function _toPxWidth(table: BaseTable, width: string | number): number {\n return Math.round(calc.toPx(width, table.internalProps.calcWidthContext));\n}\n\nexport function _applyColWidthLimits(limits: { min?: number; max?: number } | void | null, orgWidth: number): number {\n if (!limits) {\n return orgWidth;\n }\n\n if (limits.min) {\n if (limits.min > orgWidth) {\n return limits.min;\n }\n }\n if (limits.max) {\n if (limits.max < orgWidth) {\n return limits.max;\n }\n }\n return orgWidth;\n}\n/**\n * 检查设置的width是否为'auto'\n * @param {string|number} width width definition\n * @returns {boolean}\n */\nexport function isAutoDefine(width: string | number): width is 'auto' {\n return Boolean(width && typeof width === 'string' && width.toLowerCase() === 'auto');\n}\n\nexport function _getScrollableVisibleRect(table: BaseTableAPI): Rect {\n let frozenColsWidth = 0;\n let rightFrozenColsWidth = 0;\n if (table.frozenColCount > 0) {\n //有固定列时绘制固定列\n frozenColsWidth = table.getFrozenColsWidth();\n }\n if (table.rightFrozenColCount > 0) {\n //有固定列时绘制固定列\n rightFrozenColsWidth = table.getRightFrozenColsWidth();\n }\n let frozenRowsHeight = 0;\n let bottomFrozenRowsHeight = 0;\n if (table.frozenRowCount > 0) {\n //有固定列时绘制固定列\n frozenRowsHeight = table.getFrozenRowsHeight();\n }\n if (table.bottomFrozenRowCount > 0) {\n //有固定列时绘制固定列\n bottomFrozenRowsHeight = table.getBottomFrozenRowsHeight();\n }\n return new Rect(\n table.scrollLeft + frozenColsWidth,\n table.scrollTop + frozenRowsHeight,\n table.tableNoFrameWidth - frozenColsWidth - rightFrozenColsWidth,\n table.tableNoFrameHeight - frozenRowsHeight - bottomFrozenRowsHeight\n );\n}\n/**\n * @description: 从style对象里获取theme所需要的属性\n * @param {FullExtendStyle} headerStyle\n * @param {BaseTableAPI} table\n * @param {number} col\n * @param {number} row\n * @param {any} getProp\n * @return {*}\n */\nexport function getStyleTheme(\n headerStyle: FullExtendStyle,\n table: BaseTableAPI,\n col: number,\n row: number,\n getProp: any,\n needGetTheme = true\n) {\n // 属性参考IStyleOption\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, table));\n const bgColor = getProp('bgColor', headerStyle, col, row, table);\n\n const font = getProp('font', headerStyle, col, row, table);\n let fontFamily;\n let fontSize;\n let fontWeight;\n let fontStyle;\n let fontVariant;\n if (font) {\n // 后期会弃用直接设置font,而使用fontFamily fontSize fontWeight 等属性\n const { family, size, weight, style, variant } = parseFont(font);\n fontFamily = family.join(' ');\n fontSize = size;\n fontWeight = weight;\n fontStyle = style;\n fontStyle = variant;\n } else {\n fontFamily = getProp('fontFamily', headerStyle, col, row, table);\n fontSize = getProp('fontSize', headerStyle, col, row, table);\n fontWeight = getProp('fontWeight', headerStyle, col, row, table);\n fontStyle = getProp('fontStyle', headerStyle, col, row, table);\n fontVariant = getProp('fontVariant', headerStyle, col, row, table);\n }\n\n // const fontSize = getFontSize(font);\n // const fontWeight = getFontWeight(font);\n\n const textAlign = getProp('textAlign', headerStyle, col, row, table);\n const textBaseline = getProp('textBaseline', headerStyle, col, row, table);\n const color = getProp('color', headerStyle, col, row, table);\n const strokeColor = getProp('strokeColor', headerStyle, col, row, table);\n\n const lineHeight = getProp('lineHeight', headerStyle, col, row, table);\n const underline = getProp('underline', headerStyle, col, row, table); // boolean\n // const underlineColor = getProp('underlineColor', headerStyle, col, row, table);\n const underlineDash = getProp('underlineDash', headerStyle, col, row, table);\n const underlineOffset = getProp('underlineOffset', headerStyle, col, row, table);\n const lineThrough = getProp('lineThrough', headerStyle, col, row, table); // boolean\n // const lineThroughColor = getProp('lineThroughColor', headerStyle, col, row, table);\n // const lineThroughDash = getProp('lineThroughDash', headerStyle, col, row, table);\n const textDecorationWidth = Math.max(1, Math.floor(fontSize / 10));\n\n const textOverflow = getProp('textOverflow', headerStyle, col, row, table); // 'clip' | 'ellipsis' | string\n const borderColor = getProp('borderColor', headerStyle, col, row, table); // string | string[]\n const borderLineWidth = getProp('borderLineWidth', headerStyle, col, row, table); // number | number[]\n const borderLineDash = getProp('borderLineDash', headerStyle, col, row, table); // number[] | (number[] | null)[]\n\n const marked = getProp('marked', headerStyle, col, row, table); // boolean\n const cursor = getProp('cursor', headerStyle, col, row, table); // boolean\n\n const hasFunctionPros =\n !padding ||\n !bgColor ||\n !font ||\n !textAlign ||\n !textBaseline ||\n !color ||\n !textOverflow ||\n !borderColor ||\n !borderLineWidth ||\n !borderLineDash ||\n typeof underline !== 'boolean' ||\n typeof lineThrough !== 'boolean' ||\n typeof marked !== 'boolean';\n if (!needGetTheme) {\n return { hasFunctionPros };\n }\n const theme: IThemeSpec & { _vtable: any } = {\n text: {\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n fontVariant,\n fill: color,\n stroke: strokeColor ?? false,\n textAlign,\n textBaseline,\n lineHeight: lineHeight ?? fontSize,\n underline: underline ? textDecorationWidth : undefined,\n underlineDash,\n underlineOffset,\n lineThrough: lineThrough ? textDecorationWidth : undefined,\n ellipsis:\n textOverflow === 'clip'\n ? ''\n : textOverflow === 'ellipsis'\n ? '...'\n : isValid(textOverflow)\n ? textOverflow\n : undefined\n },\n group: {\n fill: bgColor,\n lineDash: borderLineDash,\n lineWidth: borderLineWidth,\n stroke: borderColor,\n cursor: cursor === 'auto' || cursor === 'default' ? undefined : cursor\n // cornerRadius: getCellCornerRadius(col, row, table)\n },\n _vtable: {\n padding,\n marked\n }\n };\n\n if (Array.isArray(borderLineWidth)) {\n (theme.group as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n }\n if (Array.isArray(borderColor)) {\n const strokeColors = getQuadProps(borderColor);\n (theme.group as any).stroke = strokeColors.every(color => !color) ? false : strokeColors; // deal width strokeColor: [null, null, null, null]\n (theme.group as any).strokeArrayColor = getQuadProps(borderColor);\n }\n\n return {\n theme,\n hasFunctionPros\n };\n}\n\nexport function getCellCornerRadius(col: number, row: number, table: BaseTableAPI) {\n const tableCornerRadius = table.theme.frameStyle.cornerRadius;\n if (Array.isArray(tableCornerRadius)) {\n if (col === 0 && row === 0) {\n return [tableCornerRadius[0], 0, 0, 0];\n } else if (col === table.colCount - 1 && row === 0) {\n return [0, tableCornerRadius[1], 0, 0];\n } else if (col === 0 && row === table.rowCount - 1) {\n return [0, 0, 0, tableCornerRadius[3]];\n } else if (col === table.colCount - 1 && row === table.rowCount - 1) {\n return [0, 0, tableCornerRadius[2], 0];\n }\n } else if (tableCornerRadius) {\n if (col === 0 && row === 0) {\n return [tableCornerRadius, 0, 0, 0];\n } else if (col === table.colCount - 1 && row === 0) {\n return [0, tableCornerRadius, 0, 0];\n } else if (col === 0 && row === table.rowCount - 1) {\n return [0, 0, 0, tableCornerRadius];\n } else if (col === table.colCount - 1 && row === table.rowCount - 1) {\n return [0, 0, tableCornerRadius, 0];\n }\n }\n return 0;\n}\n\nexport function parseMarkLineGetExtendRange(markLine: any): number | 'sum' | 'max' {\n if (markLine) {\n if (Array.isArray(markLine)) {\n let extendRange: number | 'sum' | 'max';\n for (let i = 0; i < markLine.length; i++) {\n if (markLine[i].autoRange) {\n if (\n markLine[i].y === 'sum' ||\n markLine[i].x === 'sum' ||\n markLine[i].y1 === 'sum' ||\n markLine[i].x1 === 'sum'\n ) {\n return 'sum';\n }\n if (\n markLine[i].y === 'max' ||\n markLine[i].x === 'max' ||\n markLine[i].y1 === 'max' ||\n markLine[i].x1 === 'max'\n ) {\n extendRange = 'max';\n }\n if (typeof markLine[i].y === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].y);\n }\n if (typeof markLine[i].x === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].x);\n }\n if (typeof markLine[i].y1 === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].y1);\n }\n if (typeof markLine[i].x1 === 'number' && typeof (extendRange ?? 0) === 'number') {\n extendRange = Math.max(extendRange ?? 0, markLine[i].x1);\n }\n }\n }\n return extendRange;\n } else if (markLine.autoRange) {\n if (markLine.y === 'sum' || markLine.x === 'sum' || markLine.y1 === 'sum' || markLine.x1 === 'sum') {\n return 'sum';\n }\n if (markLine.y === 'max' || markLine.x === 'max' || markLine.y1 === 'max' || markLine.x1 === 'max') {\n return 'max';\n }\n if (typeof markLine.y === 'number') {\n return markLine.y;\n }\n if (typeof markLine.x === 'number') {\n return markLine.x;\n }\n if (typeof markLine.y1 === 'number') {\n return markLine.y1;\n }\n if (typeof markLine.x1 === 'number') {\n return markLine.x1;\n }\n }\n }\n return undefined;\n}\n\nexport function generateAggregationForColumn(table: ListTable) {\n for (let col = 0; col < table.internalProps.columns.length; col++) {\n const colDef = table.internalProps.columns[col];\n if (colDef.aggregation) {\n } else if (table.options.aggregation) {\n let aggregation;\n if (typeof table.options.aggregation === 'function') {\n aggregation = table.options.aggregation({\n col: col,\n field: colDef.field as string\n });\n } else {\n aggregation = table.options.aggregation;\n }\n\n if (aggregation) {\n if (Array.isArray(aggregation)) {\n const aggregations: (Aggregation | CustomAggregation)[] = [];\n aggregation.forEach(item => {\n aggregations.push(Object.assign({ showOnTop: false }, item));\n });\n colDef.aggregation = aggregations;\n } else {\n colDef.aggregation = Object.assign({ showOnTop: false }, aggregation);\n }\n }\n }\n }\n}\n\nexport function checkHasAggregationOnColumnDefine(colDefs: ColumnsDefine) {\n for (let i = 0; i < colDefs.length; i++) {\n const colDef = colDefs[i];\n if (colDef.aggregation) {\n return true;\n }\n }\n return false;\n}\n","import { isValid } from '@visactor/vutils';\nimport type {\n ColumnStyle,\n ColumnStyleOption,\n FullExtendStyle,\n IImageStyleOption,\n ITextStyleOption,\n IStyleOption,\n StylePropertyFunctionArg\n} from '../ts-types';\n\nimport { ImageStyle } from './style/ImageStyle';\nimport { TextStyle } from './style/MultilineTextStyle';\nimport { NumberStyle } from './style/NumberStyle';\nimport { Style } from './style/Style';\nimport type { TableTheme } from '../themes/theme';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { RadioStyle } from './style/RadioStyle';\n\nconst { EVENT_TYPE } = Style;\nexport {\n EVENT_TYPE,\n Style,\n NumberStyle,\n ImageStyle,\n TextStyle,\n // types\n IStyleOption,\n IImageStyleOption,\n ITextStyleOption\n};\nexport function of(\n columnStyle: ColumnStyleOption,\n bodyStyle: ColumnStyleOption,\n styleArg: StylePropertyFunctionArg,\n StyleClassDef: typeof Style = Style,\n globalAutoWrapText: boolean,\n theme: TableTheme\n): FullExtendStyle {\n if (columnStyle || bodyStyle) {\n if (columnStyle instanceof Style) {\n return columnStyle;\n } else if (typeof columnStyle === 'function') {\n return of(columnStyle(styleArg), bodyStyle, styleArg, StyleClassDef, globalAutoWrapText, theme);\n }\n if (!columnStyle) {\n columnStyle = {};\n }\n if (globalAutoWrapText && !isValid((columnStyle as any).autoWrapText)) {\n (columnStyle as any).autoWrapText = true;\n }\n if (StyleClassDef === CheckboxStyle) {\n return new CheckboxStyle(columnStyle ?? {}, (bodyStyle ?? {}) as any, (theme.checkboxStyle ?? {}) as any);\n } else if (StyleClassDef === RadioStyle) {\n return new RadioStyle(columnStyle ?? {}, (bodyStyle ?? {}) as any, (theme.radioStyle ?? {}) as any);\n }\n return new StyleClassDef((columnStyle ?? {}) as any, (bodyStyle ?? {}) as any);\n }\n return StyleClassDef.DEFAULT;\n}\n","export type EnvMode = 'browser' | 'node' | 'worker' | 'miniApp' | 'desktop-miniApp';\nexport type LooseFunction = (...args: any) => any;\n\nexport class Env {\n static _mode: EnvMode;\n public static get mode() {\n if (!Env._mode) {\n Env._mode = defaultMode();\n }\n return Env._mode;\n }\n public static set mode(mode: EnvMode) {\n Env._mode = mode;\n }\n\n static dpr = 0;\n\n static CreateCanvas?: LooseFunction;\n\n static LoadImage?: LooseFunction;\n\n static RequestAnimationFrame?: LooseFunction;\n\n static CancelAnimationFrame?: LooseFunction;\n\n static RegisterCreateCanvas(func: LooseFunction) {\n Env.CreateCanvas = func;\n }\n\n static RegisterLoadImage(func: LooseFunction) {\n Env.LoadImage = func;\n }\n\n static GetCreateCanvasFunc(): LooseFunction | undefined {\n if (Env.CreateCanvas) {\n return Env.CreateCanvas;\n }\n if (Env.mode === 'worker') {\n return (width = 200, height = 200) => new OffscreenCanvas(width, height);\n }\n return undefined;\n }\n\n static RegisterRequestAnimationFrame(func: LooseFunction) {\n Env.RequestAnimationFrame = func();\n }\n\n static GetRequestAnimationFrame() {\n if (Env.RequestAnimationFrame) {\n return Env.RequestAnimationFrame;\n }\n return undefined;\n }\n\n static RegisterCancelAnimationFrame(func: LooseFunction) {\n Env.CancelAnimationFrame = func();\n }\n\n static GetCancelAnimationFrame() {\n if (Env.CancelAnimationFrame) {\n return Env.CancelAnimationFrame;\n }\n return undefined;\n }\n}\n\n/**\n *\n * 这个默认的判断方法并不能区分出不同的环境,所以这里采用是否判断\n * 满足条件为 'browser',不满足则为 'node'\n */\nfunction defaultMode(): EnvMode {\n let mode: EnvMode = 'browser';\n try {\n if ((window as any).type === 'node') {\n mode = 'node';\n } else if (typeof window !== 'undefined' && !window.performance) {\n mode = 'miniApp';\n } else if (typeof window === 'undefined') {\n mode = 'node';\n }\n } catch (err) {\n mode = 'node';\n }\n return mode;\n}\n","import { Env } from '../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-style-styleSheet';\n styleElement.textContent = `\n.vtable .input-container {\n\tposition: absolute;\n\ttop:0px;\n}\n.vtable .table-scrollable {\n\tposition: absolute;\n\toverflow: scroll;\n}\n.vtable .table-scrollable::-webkit-scrollbar-button{\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-track-piece{\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-corner {\n\tbackground-color: transparent;\n}\n.vtable .table-scrollable::-webkit-scrollbar-thumb {\n\tborder-radius : 4px;\n\tbackground-color : rgba(100, 100, 100, .5);\n}\n\n.vtable .table-scroll-end-point {\n\topacity: 0;\n\tposition: relative;\n}\n.vtable {\n\t/* 设置overflow: auto 应该是为了滚动条的某个问题 但设置了auto之后 dom的下拉菜单只能显示在vtable节点中 超出会截断;现在去掉auto 暂时滚动条的问题没有发现 */\n\t/* overflow: auto; */\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: left;\n -webkit-font-smoothing:auto;\n\n overflow: hidden; // for react-vtable dom custom element\n}\n\n.vtable-gantt {\n\t/* 设置overflow: auto 应该是为了滚动条的某个问题 但设置了auto之后 dom的下拉菜单只能显示在vtable节点中 超出会截断;现在去掉auto 暂时滚动条的问题没有发现 */\n\t/* overflow: auto; */\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttext-align: left;\n -webkit-font-smoothing:auto;\n\n overflow: hidden; // for react-vtable dom custom element\n}\n.vtable .table-component-container {\n pointer-events: none;\n overflow: hidden;\n position: absolute;\n top: 0px;\n left: 0px;\n}\n.vtable > canvas {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n}\n.vtable .table-focus-control {\n\tposition: relative !important;\n\twidth: 1px;\n\theight: 1px;\n\topacity: 0;\n\tpadding: 0;\n\tmargin: 0;\n\tbox-sizing: border-box;\n\tpointer-events: none;\n\tmax-width: 500px;\n\tmax-height: 500px;\n\tfloat: none !important;\n}\n.vtable input.table-focus-control::-ms-clear {\n\tvisibility: hidden;\n}\n.vtable input.table-focus-control.composition {\n\topacity: 1;\n\tmax-width: none;\n\tmax-height: none;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { ScrollStyle } from '../ts-types';\n\nexport function getHorizontalScrollBarSize(scrollStyle?: ScrollStyle): number {\n if (\n scrollStyle?.hoverOn ||\n (scrollStyle?.horizontalVisible && scrollStyle?.horizontalVisible === 'none') ||\n (!scrollStyle?.horizontalVisible && scrollStyle?.visible === 'none')\n ) {\n return 0;\n }\n return scrollStyle?.width ?? 7;\n}\n\nexport function getVerticalScrollBarSize(scrollStyle?: ScrollStyle): number {\n if (\n scrollStyle?.hoverOn ||\n (scrollStyle?.verticalVisible && scrollStyle?.verticalVisible === 'none') ||\n (!scrollStyle?.verticalVisible && scrollStyle?.visible === 'none')\n ) {\n return 0;\n }\n return scrollStyle?.width ?? 7;\n}\n\nexport function isValidStyle(style: (string | number) | (string | number)[]) {\n if (!isValid(style)) {\n return false;\n }\n if (isArray(style)) {\n return style.some(s => isValid(s));\n }\n\n return true;\n}\n\nexport function isZeroStyle(style: number | number[]) {\n return style === 0 || (isArray(style) && style.every(s => s === 0));\n}\n","import type { Style } from '../body-helper/style';\nimport type { ColumnStyleOption, ColumnTypeOption } from './column';\nimport type { ColumnData } from './list-table/layout-map/api';\nimport type { CellLocation, CellRange, FieldData, FieldDef } from './table-engine';\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI } from './base-table';\n\nexport type MaybePromise = T | Promise;\n\nexport type MaybeCall = T | ((...args: A) => T);\n\nexport type MaybePromiseOrUndefined = any | undefined | Promise;\nexport type MaybePromiseOrCallOrUndefined = any | undefined | Promise | ((...args: any) => any);\nexport type PromiseMaybeUndefOrCall = Promise | ((...args: A) => T);\nexport type AnyFunction = (...args: any[]) => any;\n\nexport interface RectProps {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n}\n\nexport interface CellPosition {\n col: number;\n row: number;\n}\n\nexport type ColorsDef = string | (string | null)[];\nexport type LineWidthsDef = number | (number | null)[];\nexport type LineDashsDef = number[] | (number[] | null)[];\nexport type shadowColorsDef = { from: string; to: string } | ({ from: string; to: string } | null)[];\nexport type PaddingsDef = number | (number | null)[];\nexport type SortOption = boolean | ((v1: any, v2: any, order: SortOrder) => -1 | 0 | 1);\nexport type MergeCellOption =\n | boolean\n | ((\n v1: any,\n v2: any,\n extraArgs: {\n source: CellPosition;\n target: CellPosition;\n table: BaseTableAPI;\n }\n ) => boolean);\nexport type BaseCellInfo = {\n row: number;\n col: number;\n /**format之后的值 */\n value: FieldData;\n /**原始值 */\n dataValue: FieldData;\n};\nexport type MergeCellInfo = {\n colStart: number;\n colEnd: number;\n rowStart: number;\n rowEnd: number;\n};\nexport type CellInfo = {\n col: number;\n row: number;\n title?: string | (() => string) | undefined;\n /**维度名称 */\n field?: FieldDef;\n /**单元格行列表头paths */\n cellHeaderPaths?: ICellHeaderPaths;\n /**单元格的位置 */\n cellRange?: Rect;\n /**整条数据-原始数据 */\n originData?: any;\n /**format之后的值 */\n value?: FieldData;\n /**原始值 */\n dataValue?: FieldData;\n cellLocation?: CellLocation;\n cellType?: ColumnTypeOption;\n};\n\nexport type ICellHeaderPaths = IListTableCellHeaderPaths | IPivotTableCellHeaderPaths;\nexport type IListTableCellHeaderPaths = {\n readonly colHeaderPaths?: {\n field: FieldDef;\n // title: string | (() => string) | undefined;\n }[];\n readonly rowHeaderPaths?: {\n field: FieldDef;\n // title: string | (() => string) | undefined;\n }[];\n cellLocation: CellLocation;\n};\nexport type IPivotTableCellHeaderPaths = {\n /** 列表头各级path表头信息 */\n readonly colHeaderPaths?: IDimensionInfo[];\n /** 行表头各级path表头信息 */\n readonly rowHeaderPaths?: IDimensionInfo[];\n cellLocation: CellLocation;\n};\n\nexport interface IDimensionInfo {\n dimensionKey?: string;\n value?: string;\n indicatorKey?: string;\n isPivotCorner?: boolean;\n virtual?: boolean;\n}\n\n/**\n * 当前表格的交互状态:\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\nexport enum InteractionState {\n 'default' = 'default',\n 'grabing' = 'grabing',\n 'scrolling' = 'scrolling'\n}\n/**\n * 单元格的高亮效果设置\n * single 单个单元格高亮\n * column 整列高亮\n * row 整行高量\n * cross 十字花 行列均高亮\n * none 无高亮\n */\nexport enum HighlightScope {\n 'single' = 'single',\n 'column' = 'column',\n 'row' = 'row',\n 'cross' = 'cross',\n 'none' = 'none'\n}\n\nexport type SortOrder = 'asc' | 'desc' | 'normal' | 'ASC' | 'DESC' | 'NORMAL';\n\nexport type CustomCellStyle = {\n id: string;\n style: ColumnStyleOption;\n};\n\nexport type CustomCellStyleArrangement = {\n cellPosition: {\n col?: number;\n row?: number;\n range?: CellRange;\n };\n customStyleId: string;\n};\n","export interface TableEvents {\n /**\n * 鼠标点击单元格事件\n */\n CLICK_CELL: 'click_cell';\n /**\n * 鼠标双击单元格事件\n */\n DBLCLICK_CELL: 'dblclick_cell';\n /**\n * 单元格上鼠标按下事件\n */\n MOUSEDOWN_CELL: 'mousedown_cell';\n /**\n * 单元格鼠标松开事件\n */\n MOUSEUP_CELL: 'mouseup_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CELL: 'selected_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CLEAR: 'selected_clear';\n /**\n * 键盘按下事件\n */\n KEYDOWN: 'keydown';\n /**\n * 鼠标进入表格事件\n */\n MOUSEENTER_TABLE: 'mouseenter_table';\n /**\n * 鼠标离开表格事件\n */\n MOUSELEAVE_TABLE: 'mouseleave_table';\n /**\n * 鼠标点击表格事件\n */\n MOUSEDOWN_TABLE: 'mousedown_table';\n /**\n * 鼠标在表格上移动事件\n */\n MOUSEMOVE_TABLE: 'mousemove_table';\n /**\n * 鼠标在某个单元格上移动事件\n */\n MOUSEMOVE_CELL: 'mousemove_cell';\n /**\n * 鼠标进入单元格事件\n */\n MOUSEENTER_CELL: 'mouseenter_cell';\n /**\n * 鼠标离开单元格事件\n */\n MOUSELEAVE_CELL: 'mouseleave_cell';\n /**\n * 单元格右键事件\n */\n CONTEXTMENU_CELL: 'contextmenu_cell';\n /**\n * 列宽调整事件\n */\n RESIZE_COLUMN: 'resize_column';\n /**\n * 列宽调整结束事件\n */\n RESIZE_COLUMN_END: 'resize_column_end';\n /**\n * 行高调整事件\n */\n RESIZE_ROW: 'resize_row';\n /**\n * 行高调整结束事件\n */\n RESIZE_ROW_END: 'resize_row_end';\n /**\n * 拖拽表头移动位置的事件\n */\n CHANGE_HEADER_POSITION: 'change_header_position';\n CHANGE_HEADER_POSITION_START: 'change_header_position_start';\n CHANGING_HEADER_POSITION: 'changing_header_position';\n CHANGE_HEADER_POSITION_FAIL: 'change_header_position_fail';\n /**\n * 点击排序图标事件\n */\n SORT_CLICK: 'sort_click';\n /**\n * 执行完排序\n */\n AFTER_SORT: 'after_sort';\n /**\n * 点击固定列图标 冻结或者解冻事件\n */\n FREEZE_CLICK: 'freeze_click';\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n /**\n * 横向滚动条滚动到结束位\n */\n SCROLL_HORIZONTAL_END: 'scroll_horizontal_end';\n /**\n * 竖向滚动条滚动到结束位\n */\n SCROLL_VERTICAL_END: 'scroll_vertical_end';\n /**\n * 点击下拉菜单图标事件\n */\n DROPDOWN_MENU_CLICK: 'dropdown_menu_click';\n /**\n * 鼠标经过迷你图标记事件\n */\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol';\n\n /**\n * 拖拽框选单元格鼠标松开事件\n */\n DRAG_SELECT_END: 'drag_select_end';\n /** 复制完成 */\n COPY_DATA: 'copy_data';\n /**\n * 点击下拉菜单按钮\n */\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click';\n /**\n * 清空下拉菜单事件(菜单显示时点击其他区域)\n */\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear';\n\n /**\n * 树形结构展开收起的点击事件\n */\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change';\n\n SHOW_MENU: 'show_menu';\n HIDE_MENU: 'hide_menu';\n /**\n * icon图标点击事件\n */\n ICON_CLICK: 'icon_click';\n\n // legend component\n LEGEND_ITEM_CLICK: 'legend_item_click';\n LEGEND_ITEM_HOVER: 'legend_item_hover';\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover';\n LEGEND_CHANGE: 'legend_change';\n\n MOUSEENTER_AXIS: 'mouseenter_axis';\n MOUSELEAVE_AXIS: 'mouseleave_axis';\n\n CHECKBOX_STATE_CHANGE: 'checkbox_state_change';\n RADIO_STATE_CHANGE: 'radio_state_change';\n //#region lifecircle\n /** 每次渲染完成触发 */\n AFTER_RENDER: 'after_render';\n /** 表格实例初始化完成 */\n INITIALIZED: 'initialized';\n //#endregion\n\n CHANGE_CELL_VALUE: 'change_cell_value';\n\n /**\n * 鼠标按下填充柄事件\n */\n MOUSEDOWN_FILL_HANDLE: 'mousedown_fill_handle';\n /**\n * 拖拽填充柄结束事件\n */\n DRAG_FILL_HANDLE_END: 'drag_fill_handle_end';\n /**\n * 双击填充柄事件\n */\n DBLCLICK_FILL_HANDLE: 'dblclick_fill_handle';\n}\n/**\n * Table event types\n */\nexport const TABLE_EVENT_TYPE: TableEvents = {\n CLICK_CELL: 'click_cell',\n DBLCLICK_CELL: 'dblclick_cell',\n MOUSEDOWN_CELL: 'mousedown_cell',\n MOUSEUP_CELL: 'mouseup_cell',\n SELECTED_CELL: 'selected_cell',\n SELECTED_CLEAR: 'selected_clear',\n KEYDOWN: 'keydown',\n MOUSEENTER_TABLE: 'mouseenter_table',\n MOUSELEAVE_TABLE: 'mouseleave_table',\n MOUSEDOWN_TABLE: 'mousedown_table',\n MOUSEMOVE_TABLE: 'mousemove_table',\n MOUSEMOVE_CELL: 'mousemove_cell',\n MOUSEENTER_CELL: 'mouseenter_cell',\n MOUSELEAVE_CELL: 'mouseleave_cell',\n CONTEXTMENU_CELL: 'contextmenu_cell',\n RESIZE_COLUMN: 'resize_column',\n RESIZE_COLUMN_END: 'resize_column_end',\n RESIZE_ROW: 'resize_row',\n RESIZE_ROW_END: 'resize_row_end',\n CHANGE_HEADER_POSITION_START: 'change_header_position_start',\n CHANGE_HEADER_POSITION: 'change_header_position',\n CHANGING_HEADER_POSITION: 'changing_header_position',\n CHANGE_HEADER_POSITION_FAIL: 'change_header_position_fail',\n SORT_CLICK: 'sort_click',\n /**\n * 执行完排序\n */\n AFTER_SORT: 'after_sort',\n FREEZE_CLICK: 'freeze_click',\n SCROLL: 'scroll',\n SCROLL_HORIZONTAL_END: 'scroll_horizontal_end',\n SCROLL_VERTICAL_END: 'scroll_vertical_end',\n DROPDOWN_MENU_CLICK: 'dropdown_menu_click',\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol',\n DRAG_SELECT_END: 'drag_select_end',\n COPY_DATA: 'copy_data',\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click', // 点击下拉菜单按钮\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear', // 清空下拉菜单事件(菜单显示时点击其他区域)\n\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change', //树形结构展开收起的点击事件\n\n SHOW_MENU: 'show_menu',\n HIDE_MENU: 'hide_menu',\n\n ICON_CLICK: 'icon_click',\n\n LEGEND_ITEM_CLICK: 'legend_item_click',\n LEGEND_ITEM_HOVER: 'legend_item_hover',\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover',\n LEGEND_CHANGE: 'legend_change',\n\n MOUSEENTER_AXIS: 'mouseenter_axis',\n MOUSELEAVE_AXIS: 'mouseleave_axis',\n\n CHECKBOX_STATE_CHANGE: 'checkbox_state_change',\n RADIO_STATE_CHANGE: 'radio_state_change',\n AFTER_RENDER: 'after_render',\n INITIALIZED: 'initialized',\n CHANGE_CELL_VALUE: 'change_cell_value',\n DRAG_FILL_HANDLE_END: 'drag_fill_handle_end',\n MOUSEDOWN_FILL_HANDLE: 'mousedown_fill_handle',\n DBLCLICK_FILL_HANDLE: 'dblclick_fill_handle'\n} as TableEvents;\n","export const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n","import { isObject } from './isx';\n\nexport function debounce(func: Function, wait?: number, options?: any) {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number; // 最长等待时间\n let result: any; // 存储 func 函数的返回值\n let timerId: number | undefined; // 定时器 id\n let lastCallTime: number; // 最近一次 执行 debounced 函数时的时间\n\n // 最近一次执行 func 时的时间戳\n let lastInvokeTime = 0;\n // options 是否 传入了 maxWait\n let maxing = false;\n // 是否在延迟开始前调用函数\n let leading = false;\n // 是否在延迟结束后调用函数\n let trailing = true;\n\n const useRAF = !wait && wait !== 0 && typeof requestAnimationFrame === 'function';\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n\n wait = +(wait as number) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(+options.maxWait || 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastThis = undefined;\n lastArgs = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n // 开启定时器\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n // 清除定时器\n // function cancelTimer(id: number) {\n // if (useRAF) {\n // return cancelAnimationFrame(id);\n // }\n // clearTimeout(id);\n // }\n\n // 在延迟开始前调用\n function leadingEdge(time: number) {\n // 记录 函数被调用时 的时间戳\n lastInvokeTime = time;\n //@ts-ignore\n timerId = startTimer(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n // 在延迟结束后调用\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // lastArgs 在 debounced 函数执行时赋值\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n // 重置参数和作用域\n lastThis = undefined;\n lastArgs = undefined;\n return result;\n }\n\n function remainingWait(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n // 用 wait 减去已经等待的时间\n const timeWaiting = wait && -timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting as number, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n // 是否可以执行函数\n function shouldInvoke(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n return (\n // 是不是第一次执行 debouned 函数\n lastCallTime === undefined ||\n timeSinceLastCall >= (wait as number) ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n // 封装执行函数,用于 wait 延迟结束后执行\n function timerExpired() {\n const time = Date.now();\n // 根据时间来判断是否可以执行 func 函数\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // 重新计算时间,重新建一个定时器\n // @ts-ignore\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function debounced(this: any, ...args: any) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n // 第一次执行时\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n // 因为 trailingEdge 函数内部会执行 timerId = undefined\n // trailingEdge 函数执行之后,又触发了 debounced\n if (timerId === undefined) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n }\n\n return result;\n }\n\n return debounced;\n}\n","import type { AnyFunction, EventListenerId } from '../ts-types';\nimport type { EventTarget as CustomEventTarget } from './EventTarget';\nimport { debounce } from '../tools/debounce';\nimport { Env } from '../tools/env';\n\nlet idCount = 1;\ntype EventHandlerTarget = EventTarget | CustomEventTarget;\ntype Listener = AnyFunction;\ntype EventListenerObject = {\n target: EventHandlerTarget;\n type: string;\n listener: Listener;\n options: any[];\n};\n\nexport type ResizeObserverCallBack = ({\n width,\n height,\n windowSizeNotChange\n}: {\n width: number;\n height: number;\n windowSizeNotChange: boolean;\n}) => void;\n\nexport class ResizeObserver {\n resizeTime = 100;\n element: HTMLElement;\n cb: ResizeObserverCallBack;\n observer?: MutationObserver;\n lastSize: {\n width: number;\n height: number;\n } = {\n width: 0,\n height: 0\n };\n callBackDebounce: () => void;\n\n constructor(element: HTMLElement, cb: ResizeObserverCallBack, resizeTime?: number) {\n this.element = element;\n this.cb = cb;\n this.lastSize = this.getSize();\n if (resizeTime) {\n this.resizeTime = Math.max(resizeTime, 16);\n }\n\n this.callBackDebounce = debounce(this.callBack, this.resizeTime);\n //TODO: 这个地方的 addEventListener resize 应该更改到下面的else逻辑中,兼容ResizeObserver不存在的情况\n window?.addEventListener('resize', this.onResize);\n // 优先使用 ResizeObserver\n if ('ResizeObserver' in window) {\n // @ts-ignore\n const ResizeObserverWindow: any = window.ResizeObserver;\n this.observer = new ResizeObserverWindow(this.mutationResize);\n this.observer?.observe(this.element);\n } else if ('MutationObserver' in window) {\n this.observer = new MutationObserver(this.mutationResize);\n this.observer.observe(this.element, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n }\n\n mutationResize = () => {\n this.onResize();\n };\n\n disConnect() {\n window.removeEventListener('resize', this.onResize);\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n }\n\n callBack = () => {\n const newSize = this.getSize();\n let windowSizeNotChange = false;\n if (newSize.width === this.lastSize.width && newSize.height === this.lastSize.height) {\n windowSizeNotChange = true;\n }\n this.lastSize = newSize;\n this.cb && this.cb({ ...this.lastSize, windowSizeNotChange });\n };\n\n setSize(size: { width: number; height: number }) {\n this.lastSize = size;\n }\n\n private onResize = () => {\n // if (this.checkSize()) {\n this.callBackDebounce();\n // }\n };\n\n private checkSize() {\n const newSize = this.getSize();\n if (newSize.width === this.lastSize.width && newSize.height === this.lastSize.height) {\n return false;\n }\n return true;\n }\n\n getSize() {\n if (!this.element) {\n return {\n ...this.lastSize\n };\n }\n return {\n width: Math.floor(this.element.clientWidth),\n height: Math.floor(this.element.clientHeight)\n };\n }\n}\n\nexport class EventHandler {\n resizeTime?: number;\n\n private listeners: {\n [key: string]: EventListenerObject;\n } = {};\n\n private reseizeListeners: {\n [key: string]: ResizeObserver;\n } = {};\n\n on(\n target: HTMLElement | Window | EventHandlerTarget,\n type: string,\n listener: Listener,\n ...options: any[]\n ): EventListenerId {\n if (Env.mode === 'node') {\n return -1;\n }\n const id = idCount++;\n if (target?.addEventListener) {\n if (type !== 'resize' || (target as Window) === window) {\n (target as EventTarget)?.addEventListener(type, listener, ...(options as []));\n } else {\n const resizeObserver = new ResizeObserver(target as HTMLElement, listener, this.resizeTime);\n this.reseizeListeners[id] = resizeObserver;\n }\n }\n const obj = { target, type, listener, options };\n this.listeners[id] = obj;\n return id;\n }\n once(\n target: EventHandlerTarget,\n type: string,\n listener: Listener,\n ...options: (boolean | AddEventListenerOptions)[]\n ): EventListenerId {\n if (Env.mode === 'node') {\n return -1;\n }\n const id = this.on(\n target,\n type,\n (...args) => {\n this.off(id);\n listener(...args);\n },\n ...options\n );\n return id;\n }\n off(id: EventListenerId | null | undefined): void {\n if (Env.mode === 'node') {\n return;\n }\n if (id === null) {\n return;\n }\n const obj = this.listeners?.[id];\n if (!obj) {\n return;\n }\n delete this.listeners[id];\n if (obj.target.removeEventListener) {\n obj.target.removeEventListener(obj.type, obj.listener, ...(obj.options as []));\n }\n }\n fire(target: EventTarget, type: string, ...args: any[]): void {\n if (Env.mode === 'node') {\n return;\n }\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target === target && listener.type === type) {\n listener.listener.call(listener.target, ...args);\n }\n }\n }\n hasListener(target: EventTarget, type: string): boolean {\n if (Env.mode === 'node') {\n return false;\n }\n let result = false;\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target === target && listener.type === type) {\n result = true;\n }\n }\n\n return result;\n }\n clear(): void {\n if (Env.mode === 'node') {\n return;\n }\n for (const key in this.listeners) {\n const listener = this.listeners[key];\n if (listener.target.removeEventListener) {\n listener.target.removeEventListener(listener.type, listener.listener, ...(listener.options as []));\n }\n }\n\n for (const key in this.reseizeListeners) {\n const resizeObserver: ResizeObserver = this.reseizeListeners[key];\n resizeObserver?.disConnect();\n }\n\n this.listeners = {};\n }\n release(): void {\n if (Env.mode === 'node') {\n return;\n }\n this.clear();\n (this as any).listeners = {};\n }\n}\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#2d3137';\n }\n return '#282a2e';\n}\n\n/**\n * dark theme\n * @name DARK\n * @memberof VTable.themes.DARK\n */\nexport default {\n name: 'DARK',\n underlayBackgroundColor: 'transparent',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#D3D5DA',\n bgColor: '#373b45',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#2F4774'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n headerStyle: {\n color: '#D3D5DA',\n bgColor: '#373b45',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#2F4774'\n }\n // click: {\n // cellBgColor: '#2F4774',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n rowHeaderStyle: {},\n cornerHeaderStyle: {},\n bodyStyle: {\n color: '#e5e7ea',\n bgColor: getBackgroundColor,\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#444A54',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#29364D'\n }\n // click: {\n // cellBgColor: '#29364D',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#4284FF',\n // cellBorderLineWidth: 2,\n // },\n },\n frameStyle: {\n borderColor: '#d1d5da',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 10,\n shadowBlur: 6,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'rgba(00, 24, 47, 0.06)'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 4,\n startColor: 'rgba(00, 24, 47, 0.05)',\n endColor: 'rgba(00, 24, 47, 0)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(255, 255, 255, 0.1)',\n // inlineColumnBgColor: \"#82b2f5\",\n cellBorderColor: '#4284FF',\n cellBorderLineWidth: 2\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n },\n functionalIconsStyle: {\n sort_color: '#FFFFFF',\n sort_color_opacity: '0.75',\n sort_color_2: '#416EFF',\n sort_color_opacity_2: '1',\n frozen_color: '#FFFFFF',\n frozen_color_opacity: '0.75',\n collapse_color: '#FFF',\n collapse_color_opacity: '0.75',\n expand_color: '#FFF',\n expand_color_opacity: '0.75',\n dragReorder_color: '#FFF',\n dragReorder_color_opacity: '0.75'\n }\n} as ITableThemeDefine;\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n // if (row < table.frozenRowCount) {\n // return \"#FFF\";\n // }\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#F4F8FF';\n }\n return '#FFF';\n}\n\n/**\n * basic theme\n * @name BRIGHT\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'BRIGHT',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#FFF',\n bgColor: '#5389FF',\n borderColor: '#5286FA',\n hover: {\n cellBgColor: '#2E67E3'\n }\n // click: {\n // cellBgColor: '#2E67E3',\n // },\n },\n headerStyle: {\n color: '#FFF',\n bgColor: '#5389FF',\n borderColor: '#A1C1FF',\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#2E67E3'\n }\n // click: {\n // cellBgColor: '#2E67E3',\n // },\n },\n\n bodyStyle: {\n color: '#000',\n bgColor: getBackgroundColor,\n borderColor: '#E0EAFE',\n hover: {\n cellBgColor: '#E9EFFD'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // },\n },\n frameStyle: {\n borderColor: '#E1E4E8',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'black'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 3,\n startColor: '#CBDCFE',\n endColor: '#CBDCFE'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","import type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#FFF';\n }\n return '#fbfbfc';\n}\n\n/**\n * arco theme\n * @name ARCO\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'ARCO',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 600,\n lineHeight: 14,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12]\n },\n headerStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n // 优先使用 Arial 字体,等宽能够保证数字场景长度一致,英文加粗场景 Arial 没有 500 字重,所以使用 600\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 600,\n lineHeight: 14,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n rowHeaderStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n cornerHeaderStyle: {\n color: '#1B1F23',\n bgColor: '#EEF1F5',\n fontSize: 12,\n fontFamily: 'PingFang SC',\n fontWeight: 500,\n lineHeight: 12,\n borderColor: '#e1e4e8',\n padding: [8, 12, 8, 12],\n hover: {\n cellBgColor: '#c8daf6'\n }\n // click: {\n // cellBgColor: '#c8daf6',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#3073f2', //['#e1e4e8', '#e1e4e8', '#3073f2', '#e1e4e8'],\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n bodyStyle: {\n padding: [8, 12, 8, 12],\n color: '#141414',\n fontSize: 14,\n fontFamily: 'Arial,sans-serif',\n fontWeight: 400,\n textAlign: 'left',\n bgColor: getBackgroundColor,\n borderColor: '#e1e4e8',\n lineHeight: 14,\n hover: {\n cellBgColor: '#F7F8FA',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // cellBorderLineWidth: 2,\n // inlineColumnBgColor: '#CCE0FF',\n // inlineRowBgColor: '#00E0FF',\n // cellBorderColor: '#3073f2',\n // },\n },\n frameStyle: {\n borderColor: '#d1d5da',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 4,\n shadowBlur: 6,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'rgba(00, 24, 47, 0.06)'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 4,\n startColor: 'rgba(00, 24, 47, 0.05)',\n endColor: 'rgba(00, 24, 47, 0)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)',\n cellBorderLineWidth: 2,\n cellBorderColor: '#3073f2'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","/*eslint no-bitwise:0*/\n\nimport type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getBackgroundColor(args: StylePropertyFunctionArg): string {\n const { row, table } = args;\n // if (row < table.frozenRowCount) {\n // return \"#FFF\";\n // }\n const index = row - table.frozenRowCount;\n if (!(index & 1)) {\n return '#FAF9FB';\n }\n return '#FDFDFD';\n}\n\n/**\n * default theme\n * @name DEFAULT\n * @memberof VTable.themes.DEFAULT\n */\nexport default {\n name: 'DEFAULT',\n underlayBackgroundColor: '#FFF',\n // selectionBgColor: '#CCE0FF',\n defaultStyle: {\n borderColor: '#E1E4E8',\n color: '#000',\n bgColor: '#ECF1F5'\n },\n headerStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n bgColor: '#ECF1F5',\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n // click: {\n // cellBgColor: '#82b2f5',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#0000ff',\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n },\n rowHeaderStyle: {\n fontSize: 16,\n fontWeight: 'bold',\n bgColor: '#ECF1F5',\n // click: {\n // cellBgColor: '#82b2f5',\n // // inlineColumnBgColor: \"#82b2f5\",\n // cellBorderColor: '#0000ff',\n // cellBorderLineWidth: 2, // [0, 1, 3, 1],\n // },\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n }\n },\n cornerHeaderStyle: {\n fontSize: 16,\n fontWeight: 'bold'\n },\n bodyStyle: {\n fontSize: 14,\n bgColor: getBackgroundColor,\n hover: {\n // cellBorderColor: \"#003fff\",\n cellBgColor: '#CCE0FF',\n inlineRowBgColor: '#F3F8FF',\n inlineColumnBgColor: '#F3F8FF'\n // cellBorderLineWidth:2\n }\n // click: {\n // cellBgColor: 'rgba(0, 0, 255,0.1)',\n // cellBorderLineWidth: 2,\n // inlineColumnBgColor: '#CCE0FF',\n // inlineRowBgColor: '#CCE0FF',\n // cellBorderColor: '#0000ff',\n // },\n },\n frameStyle: {\n borderColor: '#E1E4E8',\n borderLineWidth: 1,\n borderLineDash: [],\n cornerRadius: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: 'black'\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF',\n width: 3\n },\n frozenColumnLine: {\n shadow: {\n width: 3,\n startColor: 'rgba(225, 228, 232, 0.6)',\n endColor: 'rgba(225, 228, 232, 0.6)'\n }\n },\n // menuStyle: {\n // color: '#000',\n // highlightColor: '#2E68CF',\n // fontSize: 12,\n // fontFamily: 'Arial,sans-serif',\n // highlightFontSize: 12,\n // highlightFontFamily: 'Arial,sans-serif',\n // hoverBgColor: '#EEE'\n // },\n selectionStyle: {\n cellBgColor: 'rgba(0, 0, 255,0.1)',\n cellBorderLineWidth: 2,\n cellBorderColor: '#0000ff'\n },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","/*eslint no-bitwise:0*/\n\nimport type { ITableThemeDefine, StylePropertyFunctionArg } from '../ts-types';\n\nfunction getFrozenRowsBorderColor(args: StylePropertyFunctionArg): string[] {\n const {\n row,\n table: { frozenRowCount }\n } = args;\n if (frozenRowCount - 1 === row) {\n return ['#f2f2f2', '#f2f2f2', '#ccc7c7', '#f2f2f2'];\n }\n return ['#f2f2f2'];\n}\nfunction getBorderColor(args: StylePropertyFunctionArg): (string | null)[] {\n const { col, table } = args;\n const { colCount, frozenColCount } = table;\n const top: string | null = '#ccc7c7';\n const bottom: string | null = '#ccc7c7';\n // if (recordRowCount > 1) {\n // const startRow = table.getRecordStartRowByRecordIndex(row);\n // const endRow = startRow + recordRowCount - 1;\n // if (startRow !== row) {\n // top = null;\n // }\n // if (endRow !== row) {\n // bottom = null;\n // }\n // }\n if (frozenColCount - 1 === col) {\n return [top, '#f2f2f2', bottom, null];\n }\n if (colCount - 1 === col) {\n return [top, '#f2f2f2', bottom, null];\n }\n\n return [top, null, bottom, null];\n}\n/**\n * material design theme\n * @name SIMPLIFY\n * @memberof VTable.themes.choices\n */\nexport default {\n name: 'SIMPLIFY',\n // selectionBgColor: '#CCE0FF',\n underlayBackgroundColor: '#FFF',\n\n defaultStyle: {\n borderColor: getBorderColor,\n // click: { cellBorderColor: '#FD5', cellBgColor: '#6FA8DC' },\n hover: { cellBorderColor: '#0000FF', cellBgColor: '#D0E0E3' },\n bgColor: '#FFF'\n },\n headerStyle: {\n color: 'rgba(0, 0, 0, 0.87)',\n borderColor: getFrozenRowsBorderColor\n },\n bodyStyle: {\n // rowsBgColor:'#FFF',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n frameStyle: {\n borderColor: '#f2f2f2',\n borderLineWidth: 1\n },\n columnResize: {\n lineWidth: 1,\n lineColor: '#416EFF',\n bgColor: '#D9E2FF'\n },\n selectionStyle: { cellBorderColor: '#FD5', cellBgColor: 'rgba(111, 168, 220, 0.1)' },\n tooltipStyle: {\n bgColor: '#FFF',\n color: '#000',\n fontSize: 12,\n fontFamily: 'Arial,sans-serif'\n }\n} as ITableThemeDefine;\n","import type { TableTheme } from '../themes/theme';\n\nexport const themes: { [key: string]: TableTheme } = {};\n","import type { RequiredTableThemeDefine } from '../ts-types';\n\nexport function getAxisStyle(axisStyle: RequiredTableThemeDefine['axisStyle']) {\n const style = {\n defaultAxisStyle: getSingleAxisStyle(axisStyle.defaultAxisStyle),\n leftAxisStyle: getSingleAxisStyle(axisStyle.leftAxisStyle),\n rightAxisStyle: getSingleAxisStyle(axisStyle.rightAxisStyle),\n topAxisStyle: getSingleAxisStyle(axisStyle.topAxisStyle),\n bottomAxisStyle: getSingleAxisStyle(axisStyle.bottomAxisStyle)\n };\n\n return style;\n}\n\nfunction getSingleAxisStyle(axisStyle?: RequiredTableThemeDefine['axisStyle']['defaultAxisStyle']) {\n if (!axisStyle) {\n return {};\n }\n\n return axisStyle; // to do: turn into get mode\n}\n\nexport const defalutPoptipStyle = {\n visible: true,\n position: 'auto',\n padding: 8,\n titleStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#4E5969'\n },\n contentStyle: {\n fontSize: 12,\n fill: '#4E5969'\n },\n panel: {\n visible: true,\n fill: '#fff',\n stroke: '#ffffff',\n lineWidth: 0,\n cornerRadius: 3,\n shadowBlur: 12,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n size: 0,\n space: 12\n }\n // maxWidthPercent: 0.8\n};\n","/* eslint-disable no-undef */\n/* eslint-disable sort-imports */\nimport type {\n ColorPropertyDefine,\n ColorsDef,\n ColorsPropertyDefine,\n ColumnIconOption,\n FrameStyle,\n ITableThemeDefine,\n InteractionStyle,\n LineClamp,\n LineDashsDef,\n LineDashsPropertyDefine,\n LineWidthsDef,\n LineWidthsPropertyDefine,\n PartialTableThemeDefine,\n RequiredTableThemeDefine,\n TextOverflow,\n ThemeStyle,\n // menuStyle,\n TableFrameStyle,\n PaddingsPropertyDefine,\n ScrollStyle,\n CursorPropertyDefine,\n TooltipStyle,\n MarkedPropertyDefine,\n UnderlinePropertyDefine,\n LineDashPropertyDefine,\n LineThroughPropertyDefine,\n FontSizePropertyDefine,\n FontFamilyPropertyDefine,\n FontWeightPropertyDefine,\n FontVariantPropertyDefine,\n FontStylePropertyDefine,\n TextAlignType,\n TextBaselineType\n} from '../ts-types';\nimport { getChainSafe } from '../tools/helper';\nimport { changeColor, ingoreNoneValueMerge, merge } from '../tools/util';\nimport {\n DEFAULTBGCOLOR,\n DEFAULTBORDERCOLOR,\n DEFAULTBORDERLINEDASH,\n DEFAULTBORDERLINEWIDTH,\n DEFAULTFONTCOLOR,\n DEFAULTFONTFAMILY,\n DEFAULTFONTSIZE\n} from '../tools/global';\nimport { defalutPoptipStyle, getAxisStyle } from './component';\n//private symbol\n// const _ = getSymbol();\n\nfunction getProp(obj: PartialTableThemeDefine, superObj: ITableThemeDefine, names: string[], defNames?: string[]): any {\n return (\n getChainSafe(obj, ...names) ??\n getChainSafe(superObj, ...names) ??\n (defNames && getChainSafe(obj, ...defNames)) ??\n (defNames && getChainSafe(superObj, ...defNames))\n );\n}\nexport class TableTheme implements ITableThemeDefine {\n private internalTheme: {\n obj: PartialTableThemeDefine;\n superTheme: ITableThemeDefine;\n };\n private _defaultStyle: RequiredTableThemeDefine['defaultStyle'] | null = null;\n private _header: ITableThemeDefine['headerStyle'] | null = null;\n private _cornerHeader: ITableThemeDefine['cornerHeaderStyle'] | null = null;\n private _cornerRightTopCell: ITableThemeDefine['cornerRightTopCellStyle'] | null = null;\n private _cornerLeftBottomCell: ITableThemeDefine['cornerLeftBottomCellStyle'] | null = null;\n private _cornerRightBottomCell: ITableThemeDefine['cornerRightBottomCellStyle'] | null = null;\n private _rightFrozen: ITableThemeDefine['rightFrozenStyle'] | null = null;\n private _bottomFrozen: ITableThemeDefine['bottomFrozenStyle'] | null = null;\n private _rowHeader: ITableThemeDefine['rowHeaderStyle'] | null = null;\n private _body: ITableThemeDefine['bodyStyle'] | null = null;\n private _groupTitle: ITableThemeDefine['groupTitleStyle'] | null = null;\n private _scroll: ITableThemeDefine['scrollStyle'] | null = null;\n private _tooltip: ITableThemeDefine['tooltipStyle'] | null = null;\n private _frameStyle: ITableThemeDefine['frameStyle'] | null = null;\n private _columnResize: RequiredTableThemeDefine['columnResize'] | null = null;\n private _dragHeaderSplitLine: RequiredTableThemeDefine['dragHeaderSplitLine'] | null = null;\n private _frozenColumnLine: RequiredTableThemeDefine['frozenColumnLine'] | null = null;\n private _selectionStyle: RequiredTableThemeDefine['selectionStyle'] | null = null;\n\n private _axisStyle: RequiredTableThemeDefine['axisStyle'] | null = null;\n private _checkboxStyle: RequiredTableThemeDefine['checkboxStyle'] | null = null;\n private _radioStyle: RequiredTableThemeDefine['radioStyle'] | null = null;\n private _textPopTipStyle: RequiredTableThemeDefine['textPopTipStyle'] | null = null;\n private _internalIconsStyle: RequiredTableThemeDefine['functionalIconsStyle'] | null = null;\n isPivot: boolean = false;\n name: string = '';\n constructor(obj: PartialTableThemeDefine | ITableThemeDefine, superTheme: ITableThemeDefine) {\n this.internalTheme = {\n obj,\n superTheme\n };\n this.name = getProp(obj, superTheme, ['name']);\n }\n /** gantt _generateListTableOptions 使用更方法 */\n getExtendTheme(): PartialTableThemeDefine | ITableThemeDefine {\n return this.internalTheme.obj;\n }\n /** gantt _generateListTableOptions 使用更方法 */\n clearBodyStyleCache() {\n this._body = null;\n }\n get font(): string {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['font'], ['bodyStyle', 'font']);\n }\n get underlayBackgroundColor(): string {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['underlayBackgroundColor']);\n }\n\n get cellInnerBorder(): boolean {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['cellInnerBorder']) ?? true;\n }\n\n get cellBorderClipDirection(): 'top-left' | 'bottom-right' {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['cellBorderClipDirection']) ?? 'top-left';\n }\n\n get _contentOffset(): number {\n const { obj, superTheme } = this.internalTheme;\n return getProp(obj, superTheme, ['_contentOffset']) ?? 0;\n }\n\n get defaultStyle(): RequiredTableThemeDefine['defaultStyle'] {\n // const defaultStyle = getProp(obj, superTheme, [\"defaultStyle\"]);\n const that = this;\n if (!this._defaultStyle) {\n const { obj, superTheme } = this.internalTheme;\n const defaultStyle: ThemeStyle = ingoreNoneValueMerge({}, superTheme.defaultStyle, obj.defaultStyle);\n this._defaultStyle = {\n get fontSize(): FontSizePropertyDefine {\n return defaultStyle.fontSize ?? DEFAULTFONTSIZE;\n },\n get fontFamily(): FontFamilyPropertyDefine {\n return defaultStyle.fontFamily ?? DEFAULTFONTFAMILY;\n },\n get fontWeight(): FontWeightPropertyDefine | undefined {\n return defaultStyle.fontWeight;\n },\n get fontVariant(): FontVariantPropertyDefine | undefined {\n return defaultStyle.fontVariant;\n },\n get fontStyle(): FontStylePropertyDefine | undefined {\n return defaultStyle.fontStyle;\n },\n get bgColor(): ColorPropertyDefine {\n return defaultStyle.bgColor ?? DEFAULTBGCOLOR;\n },\n get color(): ColorPropertyDefine {\n return defaultStyle.color ?? DEFAULTFONTCOLOR;\n },\n get borderColor(): ColorsPropertyDefine {\n return defaultStyle.borderColor ?? DEFAULTBORDERCOLOR;\n },\n get borderLineWidth(): LineWidthsPropertyDefine | undefined {\n return defaultStyle.borderLineWidth ?? DEFAULTBORDERLINEWIDTH;\n },\n get borderLineDash(): LineDashsPropertyDefine | undefined {\n return defaultStyle.borderLineDash ?? DEFAULTBORDERLINEDASH;\n },\n get hover(): InteractionStyle | undefined {\n if (defaultStyle.hover) {\n return {\n get cellBgColor(): ColorPropertyDefine | undefined {\n return defaultStyle.hover?.cellBgColor ?? undefined;\n },\n // get cellBorderColor(): ColorsPropertyDefine | undefined {\n // return defaultStyle.hover?.cellBorderColor ?? undefined;\n // },\n // get cellBorderLineWidth(): LineWidthsPropertyDefine | undefined {\n // return defaultStyle.hover?.cellBorderLineWidth ?? undefined;\n // },\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.hover?.inlineColumnBgColor ??\n (defaultStyle.hover?.cellBgColor && typeof defaultStyle.hover?.cellBgColor === 'string'\n ? changeColor(defaultStyle.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.hover?.inlineRowBgColor ??\n (defaultStyle.hover?.cellBgColor && typeof defaultStyle.hover?.cellBgColor === 'string'\n ? changeColor(defaultStyle.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get select(): InteractionStyle | undefined {\n if (defaultStyle.select) {\n return {\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.select?.inlineColumnBgColor ??\n that.selectionStyle?.inlineColumnBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n defaultStyle.select?.inlineRowBgColor ??\n that.selectionStyle.inlineRowBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get padding(): PaddingsPropertyDefine {\n return defaultStyle.padding ?? [10, 16, 10, 16];\n },\n get textAlign(): TextAlignType {\n return defaultStyle.textAlign ?? 'left';\n },\n get textBaseline(): TextBaselineType {\n return defaultStyle.textBaseline ?? 'middle';\n },\n get textOverflow(): TextOverflow {\n return defaultStyle.textOverflow ?? 'ellipsis';\n },\n get lineHeight(): number {\n return defaultStyle.lineHeight;\n },\n get autoWrapText(): boolean {\n return defaultStyle.autoWrapText ?? false;\n },\n get lineClamp(): LineClamp {\n return defaultStyle.lineClamp ?? 'auto';\n },\n get linkColor(): ColorPropertyDefine {\n return defaultStyle.linkColor ?? '#3772ff';\n },\n get cursor(): CursorPropertyDefine {\n return defaultStyle.cursor ?? 'auto';\n },\n get marked(): MarkedPropertyDefine {\n return defaultStyle.marked ?? false;\n },\n get underline(): UnderlinePropertyDefine {\n return defaultStyle.underline ?? false;\n },\n get underlineColor(): ColorPropertyDefine | undefined {\n return defaultStyle.underlineColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get underlineDash(): LineDashPropertyDefine | undefined {\n return defaultStyle.underlineDash;\n },\n get underlineOffset(): number | undefined {\n return defaultStyle.underlineOffset;\n },\n get lineThrough(): LineThroughPropertyDefine | undefined {\n return defaultStyle.lineThrough ?? false;\n },\n get lineThroughColor(): ColorPropertyDefine | undefined {\n return defaultStyle.lineThroughColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get lineThroughDash(): LineDashPropertyDefine | undefined {\n return defaultStyle.lineThroughDash;\n }\n };\n }\n return this._defaultStyle;\n }\n\n get cornerHeaderStyle(): ITableThemeDefine['cornerHeaderStyle'] {\n if (!this._cornerHeader) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerHeaderStyle,\n obj.cornerHeaderStyle // ?? obj.headerStyle\n );\n this._cornerHeader = this.getStyle(header);\n }\n return this._cornerHeader;\n }\n get cornerRightTopCellStyle(): ITableThemeDefine['cornerRightTopCellStyle'] {\n if (!this._cornerRightTopCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerRightTopCellStyle && !obj.cornerRightTopCellStyle) {\n return this._cornerRightTopCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerRightTopCellStyle,\n obj.cornerRightTopCellStyle // ?? obj.headerStyle\n );\n this._cornerRightTopCell = this.getStyle(header);\n }\n return this._cornerRightTopCell;\n }\n get cornerLeftBottomCellStyle(): ITableThemeDefine['cornerLeftBottomCellStyle'] {\n if (!this._cornerLeftBottomCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerLeftBottomCellStyle && !obj.cornerLeftBottomCellStyle) {\n return this._cornerLeftBottomCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerLeftBottomCellStyle,\n obj.cornerLeftBottomCellStyle // ?? obj.headerStyle\n );\n this._cornerLeftBottomCell = this.getStyle(header);\n }\n return this._cornerLeftBottomCell;\n }\n get cornerRightBottomCellStyle(): ITableThemeDefine['cornerRightBottomCellStyle'] {\n if (!this._cornerRightBottomCell) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.cornerRightBottomCellStyle && !obj.cornerRightBottomCellStyle) {\n return this._cornerRightBottomCell;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.cornerRightBottomCellStyle,\n obj.cornerRightBottomCellStyle // ?? obj.headerStyle\n );\n this._cornerRightBottomCell = this.getStyle(header);\n }\n return this._cornerRightBottomCell;\n }\n get rightFrozenStyle(): ITableThemeDefine['rightFrozenStyle'] {\n if (!this._rightFrozen) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.rightFrozenStyle && !obj.rightFrozenStyle) {\n return this._rightFrozen;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n this.rowHeaderStyle,\n superTheme.rightFrozenStyle,\n obj.rightFrozenStyle // ?? obj.headerStyle\n );\n this._rightFrozen = this.getStyle(header);\n }\n return this._rightFrozen;\n }\n get bottomFrozenStyle(): ITableThemeDefine['bottomFrozenStyle'] {\n if (!this._bottomFrozen) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.bottomFrozenStyle && !obj.bottomFrozenStyle) {\n return this._bottomFrozen;\n }\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n this.headerStyle,\n superTheme.bottomFrozenStyle,\n obj.bottomFrozenStyle // ?? obj.headerStyle\n );\n this._bottomFrozen = this.getStyle(header);\n }\n return this._bottomFrozen;\n }\n get rowHeaderStyle(): ITableThemeDefine['rowHeaderStyle'] {\n if (!this._rowHeader) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.rowHeaderStyle,\n obj.rowHeaderStyle ?? (this.isPivot ? null : obj.headerStyle) // not for pivot\n );\n this._rowHeader = this.getStyle(header);\n }\n return this._rowHeader;\n }\n get headerStyle(): ITableThemeDefine['headerStyle'] {\n if (!this._header) {\n const { obj, superTheme } = this.internalTheme;\n // const header = getProp(obj, superTheme, [\"header\"]);\n const header: ThemeStyle = ingoreNoneValueMerge({}, this.defaultStyle, superTheme.headerStyle, obj.headerStyle);\n this._header = this.getStyle(header);\n }\n return this._header;\n }\n get bodyStyle(): ITableThemeDefine['bodyStyle'] {\n if (!this._body) {\n const { obj, superTheme } = this.internalTheme;\n // const body = getProp(obj, superTheme, [\"body\"]);\n const body: ThemeStyle = ingoreNoneValueMerge({}, this.defaultStyle, superTheme.bodyStyle, obj.bodyStyle);\n this._body = this.getStyle(body);\n }\n\n return this._body;\n }\n\n get groupTitleStyle(): ITableThemeDefine['groupTitleStyle'] {\n if (!this._groupTitle) {\n const { obj, superTheme } = this.internalTheme;\n if (!superTheme.groupTitleStyle && !obj.groupTitleStyle) {\n return this._groupTitle;\n }\n const groupTitle: ThemeStyle = ingoreNoneValueMerge(\n {},\n this.defaultStyle,\n superTheme.groupTitleStyle,\n obj.groupTitleStyle\n );\n this._groupTitle = this.getStyle(groupTitle);\n }\n\n return this._groupTitle;\n }\n\n get frameStyle(): ITableThemeDefine['frameStyle'] {\n if (!this._frameStyle) {\n const { obj, superTheme } = this.internalTheme;\n const frameStyle: TableFrameStyle = ingoreNoneValueMerge({}, superTheme.frameStyle, obj.frameStyle);\n this._frameStyle = {\n get borderColor(): ColorsDef | undefined {\n return frameStyle.borderColor;\n },\n get borderLineWidth(): LineWidthsDef | undefined {\n return frameStyle.borderLineWidth;\n },\n get borderLineDash(): LineDashsDef | undefined {\n return frameStyle.borderLineDash;\n },\n get innerBorder(): boolean | undefined {\n return frameStyle.innerBorder;\n },\n get shadowBlur(): number {\n return frameStyle.shadowBlur;\n },\n get shadowColor(): string {\n return frameStyle.shadowColor;\n },\n get shadowOffsetX(): number {\n return frameStyle.shadowOffsetX;\n },\n get shadowOffsetY(): number {\n return frameStyle.shadowOffsetY;\n },\n get cornerRadius(): number | [number, number, number, number] {\n return frameStyle.cornerRadius;\n }\n };\n }\n return this._frameStyle;\n }\n get scrollStyle(): ITableThemeDefine['scrollStyle'] {\n if (!this._scroll) {\n const { obj, superTheme } = this.internalTheme;\n const scroll: ScrollStyle = ingoreNoneValueMerge({}, superTheme.scrollStyle, obj.scrollStyle);\n this._scroll = {\n get scrollSliderColor(): string | undefined {\n return scroll.scrollSliderColor ?? '#C0C0C0';\n },\n get scrollSliderCornerRadius(): number | undefined {\n return scroll.scrollSliderCornerRadius;\n },\n get scrollRailColor(): string | undefined {\n return scroll.scrollRailColor;\n },\n get visible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.visible ?? 'scrolling';\n },\n get verticalVisible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.verticalVisible;\n },\n get horizontalVisible(): 'always' | 'scrolling' | 'none' | 'focus' {\n return scroll.horizontalVisible;\n },\n get width(): number | undefined {\n return scroll.width ?? 7;\n },\n get hoverOn(): boolean | undefined {\n return scroll.hoverOn ?? true;\n },\n get barToSide(): boolean | undefined {\n return scroll.barToSide ?? false;\n },\n get horizontalPadding(): number | [number, number, number, number] {\n return scroll.horizontalPadding ?? 0;\n },\n get verticalPadding(): number | [number, number, number, number] {\n return scroll.verticalPadding ?? 0;\n }\n };\n }\n\n return this._scroll;\n }\n get tooltipStyle(): ITableThemeDefine['tooltipStyle'] {\n if (!this._tooltip) {\n const { obj, superTheme } = this.internalTheme;\n const tooltip: TooltipStyle = ingoreNoneValueMerge({}, superTheme.tooltipStyle, obj.tooltipStyle);\n this._tooltip = {\n get fontFamily(): string | undefined {\n return tooltip.fontFamily ?? DEFAULTFONTFAMILY;\n },\n get fontSize(): number | undefined {\n return tooltip.fontSize ?? DEFAULTFONTSIZE;\n },\n get bgColor(): string | undefined {\n return tooltip.bgColor ?? '#000';\n },\n get padding(): number[] {\n return tooltip.padding ?? [6, 8];\n },\n get color(): string | undefined {\n return tooltip.color ?? '#FFF';\n },\n get maxWidth(): number | undefined {\n return tooltip.maxWidth;\n },\n get maxHeight(): number | undefined {\n return tooltip.maxHeight;\n }\n };\n }\n\n return this._tooltip;\n }\n\n /**\n * resize 分割线样式\n */\n get columnResize(): RequiredTableThemeDefine['columnResize'] {\n if (!this._columnResize) {\n const { obj, superTheme } = this.internalTheme;\n const columnResize: RequiredTableThemeDefine['columnResize'] = ingoreNoneValueMerge(\n {},\n superTheme.columnResize,\n obj.columnResize\n );\n this._columnResize = {\n get lineColor(): ColorPropertyDefine {\n return columnResize.lineColor ?? '#416EFF';\n },\n get bgColor(): ColorPropertyDefine {\n return columnResize.bgColor ?? '#D9E2FF';\n },\n get lineWidth(): number {\n return columnResize.lineWidth ?? 1;\n },\n get width(): number {\n return columnResize.width ?? columnResize.lineWidth + 2;\n },\n get resizeHotSpotSize(): number {\n return columnResize.resizeHotSpotSize ?? 16;\n },\n get labelColor(): string {\n return columnResize.labelColor ?? '#FFF';\n },\n get labelFontSize(): number {\n return columnResize.labelFontSize ?? 10;\n },\n get labelFontFamily(): string {\n return columnResize.labelFontFamily ?? 'sans-serif';\n },\n get labelBackgroundFill(): string {\n return columnResize.labelBackgroundFill ?? '#3073F2';\n },\n get labelBackgroundCornerRadius(): number {\n return columnResize.labelBackgroundCornerRadius ?? 5;\n },\n get labelVisible(): boolean {\n return columnResize.labelVisible ?? true;\n }\n };\n }\n return this._columnResize;\n }\n /**\n * 移位 分割线样式\n */\n get dragHeaderSplitLine(): RequiredTableThemeDefine['dragHeaderSplitLine'] {\n if (!this._dragHeaderSplitLine) {\n const { obj, superTheme } = this.internalTheme;\n const dragHeaderSplitLine: RequiredTableThemeDefine['dragHeaderSplitLine'] = ingoreNoneValueMerge(\n {},\n superTheme.dragHeaderSplitLine,\n obj.dragHeaderSplitLine\n );\n this._dragHeaderSplitLine = {\n get lineColor(): ColorPropertyDefine {\n return dragHeaderSplitLine.lineColor ?? 'blue';\n },\n // get bgColor(): ColorPropertyDefine {\n // return dragHeaderSplitLine.bgColor ?? dragHeaderSplitLine.lineColor;\n // },\n get lineWidth(): number {\n return dragHeaderSplitLine.lineWidth ?? 2;\n },\n // get width(): number {\n // return dragHeaderSplitLine.width ?? dragHeaderSplitLine.lineWidth;\n // },\n get shadowBlockColor(): string {\n return dragHeaderSplitLine.shadowBlockColor ?? 'rgba(204,204,204,0.3)';\n }\n };\n }\n return this._dragHeaderSplitLine;\n }\n get frozenColumnLine(): RequiredTableThemeDefine['frozenColumnLine'] {\n // const { obj, superTheme } = this.internalTheme;\n // const that = this;\n // const frozenColumnLine = getProp(obj, superTheme, [\n // \"frozenColumnLine\",\n // ]);\n if (!this._frozenColumnLine) {\n const { obj, superTheme } = this.internalTheme;\n const frozenColumnLine: RequiredTableThemeDefine['frozenColumnLine'] = ingoreNoneValueMerge(\n {},\n superTheme.frozenColumnLine,\n obj.frozenColumnLine\n );\n this._frozenColumnLine = {\n get shadow(): { width: number; startColor: string; endColor: string } | undefined {\n if (frozenColumnLine.shadow) {\n return {\n get width(): number {\n return frozenColumnLine.shadow?.width ?? 24;\n },\n get startColor(): string {\n return frozenColumnLine.shadow?.startColor ?? 'rgba(00, 24, 47, 0.06)';\n },\n get endColor(): string {\n return frozenColumnLine.shadow?.endColor ?? 'rgba(00, 24, 47, 0)';\n }\n };\n }\n return undefined;\n },\n get border():\n | {\n lineColor: ColorPropertyDefine;\n bgColor?: ColorPropertyDefine;\n lineWidth: number;\n width?: number;\n }\n | undefined {\n if (frozenColumnLine.border) {\n return {\n get lineColor(): ColorPropertyDefine {\n return frozenColumnLine.border?.lineColor ?? 'rgba(00, 24, 47, 0.06)';\n },\n get bgColor(): ColorPropertyDefine {\n return (\n frozenColumnLine.border?.bgColor ?? frozenColumnLine.border?.lineColor ?? 'rgba(00, 24, 47, 0.06)'\n );\n },\n get lineWidth(): number {\n return frozenColumnLine.border?.lineWidth ?? 4;\n },\n get width(): number {\n return frozenColumnLine.border?.width ?? frozenColumnLine.border?.lineWidth ?? 4;\n }\n };\n }\n return undefined;\n }\n };\n }\n return this._frozenColumnLine;\n }\n get selectionStyle(): RequiredTableThemeDefine['selectionStyle'] {\n if (!this._selectionStyle) {\n const { obj, superTheme } = this.internalTheme;\n const selectionStyle: RequiredTableThemeDefine['selectionStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.selectionStyle,\n obj.selectionStyle\n );\n this._selectionStyle = {\n get cellBgColor(): string | undefined {\n return selectionStyle?.cellBgColor ?? 'rgba(0, 0, 255,0.1)';\n },\n get cellBorderColor(): string | undefined {\n return selectionStyle?.cellBorderColor ?? '#3073f2';\n },\n get cellBorderLineWidth(): number | undefined {\n return selectionStyle?.cellBorderLineWidth ?? 2;\n },\n get inlineColumnBgColor(): string | undefined {\n return selectionStyle?.inlineColumnBgColor;\n },\n get inlineRowBgColor(): string | undefined {\n return selectionStyle?.inlineRowBgColor;\n },\n get selectionFillMode(): 'overlay' | 'replace' {\n return selectionStyle?.selectionFillMode ?? 'overlay';\n }\n };\n }\n return this._selectionStyle;\n }\n\n get axisStyle(): RequiredTableThemeDefine['axisStyle'] {\n if (!this._axisStyle) {\n const { obj, superTheme } = this.internalTheme;\n const axisStyle: RequiredTableThemeDefine['axisStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.axisStyle,\n obj.axisStyle\n );\n this._axisStyle = getAxisStyle(axisStyle);\n }\n return this._axisStyle;\n }\n\n get checkboxStyle(): RequiredTableThemeDefine['checkboxStyle'] {\n if (!this._checkboxStyle) {\n const { obj, superTheme } = this.internalTheme;\n const checkboxStyle: RequiredTableThemeDefine['checkboxStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.checkboxStyle,\n obj.checkboxStyle\n );\n this._checkboxStyle = checkboxStyle;\n }\n return this._checkboxStyle;\n }\n\n get radioStyle(): RequiredTableThemeDefine['radioStyle'] {\n if (!this._radioStyle) {\n const { obj, superTheme } = this.internalTheme;\n const radioStyle: RequiredTableThemeDefine['radioStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.radioStyle,\n obj.radioStyle\n );\n this._radioStyle = radioStyle;\n }\n return this._radioStyle;\n }\n\n get textPopTipStyle(): RequiredTableThemeDefine['textPopTipStyle'] {\n if (!this._textPopTipStyle) {\n const { obj, superTheme } = this.internalTheme;\n const textPopTipStyle: RequiredTableThemeDefine['textPopTipStyle'] = ingoreNoneValueMerge(\n {},\n defalutPoptipStyle,\n superTheme.textPopTipStyle,\n obj.textPopTipStyle\n );\n this._textPopTipStyle = textPopTipStyle;\n }\n return this._textPopTipStyle;\n }\n\n get functionalIconsStyle(): RequiredTableThemeDefine['functionalIconsStyle'] {\n if (!this._internalIconsStyle) {\n const { obj, superTheme } = this.internalTheme;\n const functionalIconsStyle: RequiredTableThemeDefine['functionalIconsStyle'] = ingoreNoneValueMerge(\n {},\n superTheme.functionalIconsStyle,\n obj.functionalIconsStyle\n );\n this._internalIconsStyle = functionalIconsStyle;\n }\n return this._internalIconsStyle;\n }\n\n hasProperty(names: string[]): boolean {\n const { obj, superTheme } = this.internalTheme;\n return hasThemeProperty(obj, names) || hasThemeProperty(superTheme, names);\n }\n extends(obj: PartialTableThemeDefine): TableTheme {\n return new TableTheme(\n ingoreNoneValueMerge({}, obj),\n ingoreNoneValueMerge(this.internalTheme.superTheme, this.internalTheme.obj)\n );\n }\n private getStyle(style: ThemeStyle) {\n const that = this;\n return {\n get fontSize(): FontSizePropertyDefine | undefined {\n return style.fontSize;\n },\n get fontFamily(): FontFamilyPropertyDefine | undefined {\n return style.fontFamily;\n },\n get fontWeight(): FontWeightPropertyDefine | undefined {\n return style.fontWeight;\n },\n get fontVariant(): FontVariantPropertyDefine | undefined {\n return style.fontVariant;\n },\n get fontStyle(): FontStylePropertyDefine | undefined {\n return style.fontStyle;\n },\n get bgColor(): ColorPropertyDefine | undefined {\n return style.bgColor;\n },\n get color(): ColorPropertyDefine | undefined {\n return style.color;\n },\n get strokeColor(): ColorPropertyDefine | undefined {\n return style.strokeColor;\n },\n get borderColor(): ColorsPropertyDefine | undefined {\n return style.borderColor;\n },\n get borderLineWidth(): LineWidthsPropertyDefine | undefined {\n return style.borderLineWidth;\n },\n get borderLineDash(): LineDashsPropertyDefine | undefined {\n return style.borderLineDash;\n },\n get hover(): InteractionStyle | undefined {\n if (style.hover) {\n return {\n get cellBgColor(): ColorPropertyDefine | undefined {\n return style.hover?.cellBgColor ?? undefined;\n },\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n style.hover?.inlineColumnBgColor ??\n (style.hover?.cellBgColor && typeof style.hover?.cellBgColor === 'string'\n ? changeColor(style.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n style.hover?.inlineRowBgColor ??\n (style.hover?.cellBgColor && typeof style.hover?.cellBgColor === 'string'\n ? changeColor(style.hover?.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n }\n };\n }\n return undefined;\n },\n get select(): InteractionStyle | undefined {\n // if (style.select) {\n return {\n get inlineColumnBgColor(): ColorPropertyDefine | undefined {\n return (\n style.select?.inlineColumnBgColor ??\n that.selectionStyle?.inlineColumnBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get inlineRowBgColor(): ColorPropertyDefine | undefined {\n return (\n style.select?.inlineRowBgColor ??\n that.selectionStyle.inlineRowBgColor ??\n (that.selectionStyle?.cellBgColor && typeof that.selectionStyle.cellBgColor === 'string'\n ? changeColor(that.selectionStyle.cellBgColor, 0.1, false)\n : undefined) ??\n undefined\n );\n },\n get cellBgColor(): ColorPropertyDefine | undefined {\n if (that.selectionStyle.selectionFillMode === 'replace') {\n return style.select?.cellBgColor ?? that.selectionStyle.cellBgColor ?? undefined;\n }\n return undefined;\n }\n };\n // }\n // return undefined;\n },\n\n get frameStyle(): FrameStyle | undefined {\n if (style.frameStyle) {\n return {\n get borderColor(): ColorsDef | undefined {\n return style.frameStyle?.borderColor ?? undefined;\n },\n get borderLineWidth(): LineWidthsDef | undefined {\n return style.frameStyle?.borderLineWidth ?? undefined;\n },\n get borderLineDash(): LineDashsDef | undefined {\n return style.frameStyle?.borderLineDash ?? undefined;\n }\n };\n }\n return undefined;\n },\n get padding(): PaddingsPropertyDefine | undefined {\n return style.padding;\n },\n get textAlign(): TextAlignType | undefined {\n return style.textAlign;\n },\n get textBaseline(): TextBaselineType | undefined {\n return style.textBaseline;\n },\n get textOverflow(): TextOverflow | undefined {\n return style.textOverflow;\n },\n get lineHeight(): number | undefined {\n return style.lineHeight;\n },\n get autoWrapText(): boolean | undefined {\n return style.autoWrapText;\n },\n get lineClamp(): LineClamp | undefined {\n return style.lineClamp;\n },\n get linkColor(): ColorPropertyDefine | undefined {\n return style.linkColor;\n },\n get cursor(): CursorPropertyDefine | undefined {\n return style.cursor;\n },\n get textStick(): boolean | 'vertical' | 'horizontal' | undefined {\n return style.textStick;\n },\n get marked(): MarkedPropertyDefine | undefined {\n return style.marked;\n },\n get underline(): UnderlinePropertyDefine {\n return style.underline ?? false;\n },\n get underlineColor(): ColorPropertyDefine | undefined {\n return style.underlineColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get underlineDash(): LineDashPropertyDefine | undefined {\n return style.underlineDash;\n },\n get underlineOffset(): number | undefined {\n return style.underlineOffset;\n },\n get lineThrough(): LineThroughPropertyDefine | undefined {\n return style.lineThrough ?? false;\n },\n get lineThroughColor(): ColorPropertyDefine | undefined {\n return style.lineThroughColor; // 不需要默认值 绘制中已处理默认用文字颜色\n },\n get lineThroughDash(): LineDashPropertyDefine | undefined {\n return style.lineThroughDash;\n }\n };\n }\n}\n\nfunction hasThemeProperty(obj: PartialTableThemeDefine, names: string[]): boolean {\n if (obj instanceof TableTheme) {\n return obj.hasProperty(names);\n }\n\n let o: any = obj;\n if (!o) {\n return false;\n }\n for (let index = 0; index < names.length; index++) {\n const name = names[index];\n o = o[name];\n if (!o) {\n return false;\n }\n }\n return !!o;\n}\n","/* eslint-disable sort-imports */\nimport { extend, getIgnoreCase } from './tools/helper';\nimport darkTheme from './themes/DARK';\nimport brightTheme from './themes/BRIGHT';\nimport arcoTheme from './themes/ARCO';\nimport defaultTheme from './themes/DEFAULT';\nimport materialDesignTheme from './themes/SIMPLIFY';\nimport { themes as plugins } from './plugins/themes';\nimport { TableTheme } from './themes/theme';\nimport type { ITableThemeDefine } from './ts-types';\nexport const DARK = new TableTheme(darkTheme, darkTheme);\nexport const BRIGHT = new TableTheme(brightTheme, brightTheme);\nexport const ARCO = new TableTheme(arcoTheme, arcoTheme);\nexport const DEFAULT = new TableTheme(defaultTheme, defaultTheme);\nexport const SIMPLIFY = new TableTheme(materialDesignTheme, materialDesignTheme);\n\nconst builtin: { [key: string]: TableTheme } = {\n DEFAULT,\n SIMPLIFY,\n ARCO,\n DARK,\n BRIGHT\n};\n// let defTheme = DEFAULT;\nexport const theme = { TableTheme };\nexport function of(value: ITableThemeDefine | string | undefined | null): TableTheme | null {\n if (!value) {\n return null;\n }\n if (typeof value === 'string') {\n const t = getIgnoreCase(get(), value);\n if (t) {\n if (t instanceof TableTheme) {\n return t;\n }\n return new TableTheme(t, t);\n }\n return null;\n }\n if (value instanceof TableTheme) {\n return value;\n }\n return new TableTheme(value, value);\n}\n\nexport function get(): { [key: string]: TableTheme } {\n return extend(builtin, plugins);\n}\nexport { ITableThemeDefine, TableTheme };\nexport default {\n DARK,\n BRIGHT,\n ARCO,\n DEFAULT,\n SIMPLIFY,\n theme,\n of,\n get\n};\n","import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.14.4-alpha.0\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n // registerArc3d();\n // registerArea();\n registerCircle();\n // registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n // registerPath();\n // registerPolygon();\n // registerPyramid3d();\n registerRect();\n // registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerFlexLayoutPlugin();\n // registerWrapText();\n loadPoptip();\n\n registerFlexLayoutPlugin();\n}\n\nexport type { Direction, Timeline } from '@visactor/vrender-core';\nexport { GroupFadeIn } from '@visactor/vrender-core';\nexport { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\n","import type { CellRange, ColumnDefine, TextColumnDefine } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\n/**\n * @description: 获取对应坐标单元格的单元格合并信息,没有单元格合并返回false,有合并返回合并信息\n * @param {BaseTableAPI} table\n * @param {number} col\n * @param {number} row\n * @return {false | CellRange}\n */\nexport function getCellMergeInfo(table: BaseTableAPI, col: number, row: number): false | CellRange {\n // 先判断非表头且非cellMerge配置,返回false\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n return customMerge.range;\n }\n }\n if (\n !table.internalProps.enableTreeNodeMerge &&\n !table.isHeader(col, row) &&\n !(table.getBodyColumnDefine(col, row) as ColumnDefine)?.mergeCell\n ) {\n return false;\n }\n const range = table.getCellRange(col, row);\n const isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n if (!isMerge) {\n return false;\n }\n return range;\n}\n","import {\n graphicCreator,\n type IArc3dGraphicAttribute,\n type IArcGraphicAttribute,\n type IAreaGraphicAttribute,\n type ICircleGraphicAttribute,\n type IGlyphGraphicAttribute,\n type IGroupGraphicAttribute,\n type IImageGraphicAttribute,\n type ILineGraphicAttribute,\n type IPathGraphicAttribute,\n type IPolygonGraphicAttribute,\n type IPyramid3dGraphicAttribute,\n type IRect3dGraphicAttribute,\n type IRectGraphicAttribute,\n type IRichTextCharacter,\n type IRichTextGraphicAttribute,\n type IRichTextImageCharacter,\n type ISymbolGraphicAttribute,\n type ITextGraphicAttribute\n} from '@visactor/vrender-core';\n\nexport const REACT_TO_CANOPUS_EVENTS = {\n onPointerDown: 'pointerdown',\n onPointerUp: 'pointerup',\n onPointerUpOutside: 'pointerupoutside',\n onPointerTap: 'pointertap',\n onPointerOver: 'pointerover',\n onPointerMove: 'pointermove',\n onPointerEnter: 'pointerenter',\n onPointerLeave: 'pointerleave',\n onPointerOut: 'pointerout',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onMouseUpOutside: 'mouseupoutside',\n onMouseMove: 'mousemove',\n onMouseOver: 'mouseover',\n onMouseOut: 'mouseout',\n onMouseEnter: 'mouseenter',\n onMouseLeave: 'mouseleave',\n onPinch: 'pinch',\n onPinchStart: 'pinchstart',\n onPinchEnd: 'pinchend',\n onPan: 'pan',\n onPanStart: 'panstart',\n onPanEnd: 'panend',\n onDrag: 'drag',\n onDragStart: 'dragstart',\n onDragEnter: 'dragenter',\n onDragLeave: 'dragleave',\n onDragOver: 'dragover',\n onDragEnd: 'dragend',\n onRightDown: 'rightdown',\n onRightUp: 'rightup',\n onRightUpOutside: 'rightupoutside',\n onTouchStart: 'touchstart',\n onTouchEnd: 'touchend',\n onTouchEndOutside: 'touchendoutside',\n onTouchMove: 'touchmove',\n onTouchCancel: 'touchcancel',\n onPress: 'press',\n onPressUp: 'pressup',\n onPressEnd: 'pressend',\n onSwipe: 'swipe',\n onDrop: 'drop',\n onWeel: 'wheel',\n onClick: 'click',\n onDblClick: 'dblclick'\n};\n\nexport const REACT_TO_CANOPUS_EVENTS_LIST = Object.keys(REACT_TO_CANOPUS_EVENTS);\n\nexport type IEventParamsType = {\n [t in keyof typeof REACT_TO_CANOPUS_EVENTS]?: (d: any) => void;\n};\n\nexport type IDefaultGraphicParamsType = {\n attribute?: T;\n stateProxy?: (stateName: string, targetStates?: string[]) => Partial;\n // react可能类型报错\n children?: any;\n name?: string;\n id?: string;\n} & IEventParamsType;\n\nexport function VArc(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).arc(params ? params.attribute : {});\n}\nexport function VArc3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).arc3d(params ? params.attribute : {});\n}\nexport function VArea(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).area(params ? params.attribute : {});\n}\nexport function VCircle(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).circle(params ? params.attribute : {});\n}\nexport function VGroup(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).group(params ? params.attribute : {});\n}\nexport function VGlyph(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).glyph(params ? params.attribute : {});\n}\nexport function VImage(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).image(params ? params.attribute : {});\n}\nexport function VLine(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).line(params ? params.attribute : {});\n}\nexport function VPath(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).path(params ? params.attribute : {});\n}\nexport function VPolygon(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).polygon(params ? params.attribute : {});\n}\nexport function VPyramid3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).pyramid3d(params ? params.attribute : {});\n}\nexport function VRect(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).rect(params ? params.attribute : {});\n}\nexport function VRect3d(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).rect3d(params ? params.attribute : {});\n}\nexport function VSymbol(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).symbol(params ? params.attribute : {});\n}\nexport function VText(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).text(params ? params.attribute : {});\n}\nexport function VRichText(params: IDefaultGraphicParamsType) {\n return (graphicCreator as any).richtext(params ? params.attribute : {});\n}\n\nVRichText.Text = function (params: IDefaultGraphicParamsType) {\n return {\n type: 'rich/text',\n ...params\n };\n};\n\nVRichText.Image = function (params: IDefaultGraphicParamsType) {\n return {\n type: 'rich/image',\n ...params\n };\n};\n","import type { IImageGraphicAttribute, ISetAttributeContext } from './../../vrender';\nimport { Image, ResourceLoader } from './../../vrender';\nimport type { IIconBase } from '../../ts-types';\nimport type { ParsedFrame } from 'gifuct-js';\nimport { decompressFrames, parseGIF } from 'gifuct-js';\n\nexport interface IIconGraphicAttribute extends IImageGraphicAttribute {\n backgroundWidth?: number;\n backgroundHeight?: number;\n backgroundColor?: string;\n visibleTime?: string;\n funcType?: string;\n hoverImage?: string | HTMLImageElement | HTMLCanvasElement;\n originImage?: string | HTMLImageElement | HTMLCanvasElement;\n // margin?: [number, number, number, number];\n marginLeft?: number;\n marginRight?: number;\n shape?: 'circle' | 'square';\n interactive?: boolean;\n}\n\nexport class Icon extends Image {\n declare attribute: IIconGraphicAttribute;\n role?: string;\n tooltip?: IIconBase['tooltip'];\n frameImageData?: ImageData;\n tempCanvas?: HTMLCanvasElement;\n tempCtx?: CanvasRenderingContext2D;\n gifCanvas?: HTMLCanvasElement;\n gifCtx?: CanvasRenderingContext2D;\n loadedFrames?: ParsedFrame[];\n frameIndex?: number;\n playing?: boolean;\n lastTime?: number;\n\n // eslint-disable-next-line no-useless-constructor\n constructor(params: IIconGraphicAttribute) {\n super(params);\n\n if (this.attribute.visibleTime === 'mouseenter_cell' || this.attribute.visibleTime === 'click_cell') {\n this.attribute.opacity = 0;\n }\n\n if (this.attribute.hoverImage) {\n this.attribute.originImage = this.attribute.image;\n }\n\n if ((this.attribute as any).isGif && (this.attribute as any).gif) {\n this.loadGif();\n }\n\n // if (this.attribute.margin) {\n // this.attribute.boundsPadding = this.attribute.margin;\n // this.attribute.dx = this.attribute.margin[3] ?? 0;\n // }\n }\n\n loadGif() {\n this.playing = false;\n ResourceLoader.GetFile((this.attribute as any).gif + '?role=gif', 'arrayBuffer') // ?role=gif: hack for ResourceLoader cache\n .then((res: ArrayBuffer) => {\n const gif = parseGIF(res);\n const frames = decompressFrames(gif, true);\n this.renderGIF(frames);\n\n // hack for image resource\n (this as any).resources.set((this.attribute as any).image, {\n state: 'success',\n data: this.gifCanvas\n });\n })\n .catch((e: any) => {\n console.error('Gif load error: ', e);\n });\n }\n\n get backgroundWidth(): number {\n return this.attribute.backgroundWidth ?? this.attribute.width ?? 0;\n }\n\n get backgroundHeight(): number {\n return this.attribute.backgroundHeight ?? this.attribute.height ?? 0;\n }\n\n // protected tryUpdateAABBBounds() {\n // super.tryUpdateAABBBounds();\n // // 扩大范围\n // const { width, height } = this.attribute;\n // const { backgroundWidth = width, backgroundHeight = height } = this.attribute;\n // const expandX = (backgroundWidth - width) / 2;\n // const expandY = (backgroundHeight - height) / 2;\n // this._AABBBounds.expand([expandY, expandX, expandY, expandX]);\n\n // return this._AABBBounds;\n // }\n\n renderGIF(frames: ParsedFrame[]) {\n this.loadedFrames = frames;\n this.frameIndex = 0;\n\n if (!this.tempCanvas) {\n this.tempCanvas = document.createElement('canvas');\n this.tempCtx = this.tempCanvas.getContext('2d');\n }\n\n if (!this.gifCanvas) {\n this.gifCanvas = document.createElement('canvas');\n this.gifCtx = this.gifCanvas.getContext('2d');\n }\n\n this.gifCanvas.width = frames[0].dims.width;\n this.gifCanvas.height = frames[0].dims.height;\n\n this.playing = true;\n this.lastTime = new Date().getTime();\n this.animate().to({}, 1000, 'linear').loop(Infinity);\n }\n\n renderFrame(context: CanvasRenderingContext2D, x: number, y: number) {\n // get the frame\n const frame = this.loadedFrames[this.frameIndex || 0];\n\n if (frame.disposalType === 2) {\n this.gifCtx.clearRect(0, 0, this.gifCanvas.width, this.gifCanvas.height);\n }\n\n // draw the patch\n this.drawPatch(frame);\n\n // perform manipulation\n this.manipulate(context, x, y);\n\n // update the frame index\n // this.frameIndex++;\n const diff = new Date().getTime() - this.lastTime;\n if (frame.delay < diff) {\n // return;\n this.frameIndex++;\n this.lastTime = new Date().getTime();\n }\n if (this.frameIndex >= this.loadedFrames.length) {\n this.frameIndex = 0;\n }\n }\n\n drawPatch(frame: ParsedFrame) {\n const dims = frame.dims;\n\n if (\n !this.frameImageData ||\n dims.width !== this.frameImageData.width ||\n dims.height !== this.frameImageData.height\n ) {\n this.tempCanvas.width = dims.width;\n this.tempCanvas.height = dims.height;\n this.frameImageData = this.tempCtx.createImageData(dims.width, dims.height);\n }\n\n // set the patch data as an override\n this.frameImageData.data.set(frame.patch);\n\n // draw the patch back over the canvas\n this.tempCtx.putImageData(this.frameImageData, 0, 0);\n\n // gifCtx.drawImage(tempCanvas, dims.left, dims.top)\n // this.attribute.image = this.tempCanvas;\n\n this.gifCtx.drawImage(this.tempCanvas, dims.left, dims.top);\n }\n\n manipulate(context: CanvasRenderingContext2D, x: number, y: number) {\n context.drawImage(\n this.gifCanvas,\n 0,\n 0,\n this.gifCanvas.width,\n this.gifCanvas.height,\n x,\n y,\n this.attribute.width,\n this.attribute.height\n );\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext): void {\n super.setAttribute(key, value, forceUpdateTag, context);\n if (key === 'gif') {\n this.loadGif();\n }\n }\n\n setAttributes(\n params: Partial,\n forceUpdateTag?: boolean,\n context?: ISetAttributeContext\n ): void {\n super.setAttributes(params, forceUpdateTag, context);\n if ((params as any).gif) {\n this.loadGif();\n }\n }\n}\n","import { Group } from './../../vrender';\nimport type { CustomRenderFunctionArg, ICustomLayoutFuc } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\n\nexport function emptyCustomLayout(args: CustomRenderFunctionArg) {\n const group = new Group({});\n return {\n rootContainer: group,\n renderDefault: true\n };\n}\n\nexport class ReactCustomLayout {\n removeAllContainer: () => void;\n table: BaseTableAPI;\n customLayoutFuncCache: Map;\n reactRemoveGraphicCache: Map void>;\n reactRemoveAllGraphicCache: Map void>;\n headerCustomLayoutFuncCache: Map;\n headerReactRemoveGraphicCache: Map void>;\n headerReactRemoveAllGraphicCache: Map void>;\n // reactContainerCache: Map>;\n constructor(table: BaseTableAPI) {\n // this.removeAllContainer = removeAllContainer;\n this.table = table;\n this.customLayoutFuncCache = new Map();\n // this.reactContainerCache = new Map();\n this.reactRemoveGraphicCache = new Map();\n this.reactRemoveAllGraphicCache = new Map();\n this.headerCustomLayoutFuncCache = new Map();\n // this.headerCeactContainerCache = new Map();\n this.headerReactRemoveGraphicCache = new Map();\n this.headerReactRemoveAllGraphicCache = new Map();\n }\n\n hasReactCreateGraphic(componentId: string, isHeaderCustomLayout?: boolean) {\n if (isHeaderCustomLayout) {\n return this.headerCustomLayoutFuncCache.has(componentId);\n }\n return this.customLayoutFuncCache.has(componentId);\n }\n\n setReactCreateGraphic(\n componentId: string,\n createGraphic: ICustomLayoutFuc,\n // containerCache: Map,\n isHeaderCustomLayout?: boolean\n ) {\n if (isHeaderCustomLayout) {\n this.headerCustomLayoutFuncCache.set(componentId, createGraphic);\n } else {\n this.customLayoutFuncCache.set(componentId, createGraphic);\n }\n // this.reactContainerCache.set(componentId, containerCache);\n }\n\n setReactRemoveGraphic(\n componentId: string,\n removeGraphic: (col: number, row: number) => void,\n isHeaderCustomLayout?: boolean\n ) {\n if (isHeaderCustomLayout) {\n this.headerReactRemoveGraphicCache.set(componentId, removeGraphic);\n } else {\n this.reactRemoveGraphicCache.set(componentId, removeGraphic);\n }\n }\n\n setReactRemoveAllGraphic(componentId: string, removeGraphic: () => void, isHeaderCustomLayout?: boolean) {\n if (isHeaderCustomLayout) {\n this.headerReactRemoveAllGraphicCache.set(componentId, removeGraphic);\n } else {\n this.reactRemoveAllGraphicCache.set(componentId, removeGraphic);\n }\n }\n\n updateCustomCell(componentId: string, isHeaderCustomLayout?: boolean) {\n const table = this.table;\n // const col = componentId;\n // // to do: deal with transpose table\n // if (isHeaderCustomLayout) {\n // for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n // table.scenegraph.updateCellContent(col, row);\n // }\n // } else {\n // for (let row = table.columnHeaderLevelCount; row < table.rowCount; row++) {\n // table.scenegraph.updateCellContent(col, row);\n // }\n // }\n\n if (table.isPivotTable()) {\n const ranges = getUpdateCustomCellRangeInPivotTable(componentId, table, isHeaderCustomLayout);\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n } else {\n const range = getUpdateCustomCellRangeInListTable(componentId, table, isHeaderCustomLayout);\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n if (table.widthMode === 'autoWidth') {\n table.scenegraph.recalculateColWidths();\n }\n if (table.isAutoRowHeight()) {\n table.scenegraph.recalculateRowHeights();\n }\n // table.scenegraph.updateNextFrame();\n table.scenegraph.renderSceneGraph(); // use sync render for faster update\n }\n\n getCustomLayoutFunc(col: number, row: number) {\n const isHeader = this.table.isHeader(col, row);\n if (isHeader) {\n const { componentId } = this.table.getHeaderDefine(col, row) as any;\n return this.headerCustomLayoutFuncCache.get(componentId) ?? emptyCustomLayout;\n }\n const { componentId } = this.table.getBodyColumnDefine(col, row) as any;\n return this.customLayoutFuncCache.get(componentId) || emptyCustomLayout;\n }\n\n removeCustomCell(col: number, row: number) {\n // const { startInTotal } = this.table.getBodyColumnDefine(col, row) as any;\n const isHeader = this.table.isHeader(col, row);\n let removeFun;\n if (isHeader) {\n const define = this.table.getHeaderDefine(col, row);\n const { componentId } = define as any;\n removeFun = this.headerReactRemoveGraphicCache.get(componentId);\n } else {\n const define = this.table.getBodyColumnDefine(col, row);\n const { componentId } = define as any;\n removeFun = this.reactRemoveGraphicCache.get(componentId);\n }\n if (removeFun) {\n removeFun(col, row);\n }\n }\n\n clearCache() {\n this.reactRemoveAllGraphicCache.forEach(removeFun => {\n removeFun();\n });\n this.headerReactRemoveAllGraphicCache.forEach(removeFun => {\n removeFun();\n });\n }\n\n updateAllCustomCell() {\n this.customLayoutFuncCache.forEach((createFun, componentId) => {\n this.updateCustomCell(componentId);\n });\n this.headerCustomLayoutFuncCache.forEach((createFun, componentId) => {\n this.updateCustomCell(componentId, true);\n });\n }\n}\n\nfunction getUpdateCustomCellRangeInListTable(componentId: string, table: BaseTableAPI, isHeaderCustomLayout?: boolean) {\n const rowSeriesNumber = table.internalProps.rowSeriesNumber ? 1 : 0;\n if (isHeaderCustomLayout) {\n const layoutMap = table.internalProps.layoutMap as SimpleHeaderLayoutMap;\n const { headerObjects } = table.internalProps.layoutMap;\n let headerId: number;\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if ((headerObject.define as any).componentId === componentId) {\n headerId = headerObject.id as number;\n break;\n }\n }\n\n const startCell = layoutMap.getHeaderCellAdressById(headerId);\n const range = layoutMap.getCellRange(startCell.col, startCell.row);\n return range;\n\n // let startCol = -1;\n // let endCol = -1;\n // let startRow = -1;\n // let endRow = -1;\n // for (let i = 0; i < _headerCellIds.length; i++) {\n // const row = _headerCellIds[i];\n // let rowHasObject = false;\n // for (let j = 0; j < row.length; j++) {\n // if (row[j] === headerId) {\n // rowHasObject = true;\n // if (transpose) {\n // // return { col: i, row: j };\n // startCol === -1 && (startCol = i);\n // startRow === -1 && (startRow = j);\n // } else {\n // // return { col: j + this.leftRowSeriesNumberColumnCount, row: i };\n // startCol === -1 && (startCol = j);\n // startRow === -1 && (startRow = i);\n // }\n // } else {\n // if (transpose) {\n // // endCol === -1 && startCol !== -1 && (endCol = i);\n // endRow === -1 && startRow !== -1 && (endRow = j - 1);\n // } else {\n // endCol === -1 && startCol !== -1 && (endCol = j - 1);\n // // endRow === -1 && startRow !== -1 && (endRow = i);\n // }\n // }\n\n // if (startCol !== -1 && endCol !== -1 && startRow !== -1 && endRow !== -1) {\n // break;\n // }\n // }\n\n // if (!rowHasObject) {\n // if (transpose) {\n // endCol === -1 && startCol !== -1 && (endCol = i - 1);\n // } else {\n // endRow === -1 && startRow !== -1 && (endRow = i - 1);\n // }\n // }\n\n // if (startCol !== -1 && endCol !== -1 && startRow !== -1 && endRow !== -1) {\n // break;\n // }\n // }\n\n // return {\n // startCol: startCol + rowSeriesNumber,\n // endCol: endCol + rowSeriesNumber,\n // startRow,\n // endRow\n // };\n }\n const { columnObjects } = table.internalProps.layoutMap;\n for (let i = 0; i < columnObjects.length; i++) {\n const columnObject = columnObjects[i];\n if ((columnObject.define as any).componentId === componentId) {\n return {\n start: {\n col: rowSeriesNumber + i,\n row: table.columnHeaderLevelCount\n },\n end: {\n col: rowSeriesNumber + i,\n row: table.rowCount - 1\n }\n };\n }\n }\n\n return {\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: table.colCount - 1,\n row: table.rowCount - 1\n }\n };\n}\n\nfunction getUpdateCustomCellRangeInPivotTable(\n componentId: string,\n table: BaseTableAPI,\n isHeaderCustomLayout?: boolean\n) {\n const rowSeriesNumber = table.internalProps.rowSeriesNumber ? 1 : 0;\n const ranges = [];\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n if (isHeaderCustomLayout) {\n const { headerObjects } = layoutMap;\n const headerIds: number[] = [];\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (!headerObject) {\n continue;\n }\n if ((headerObject.define as any).componentId === componentId) {\n headerIds.push(headerObject.id as number);\n }\n }\n\n for (let i = 0; i < headerIds.length; i++) {\n const headerId = headerIds[i];\n const startCell = layoutMap.getHeaderCellAdressById(headerId);\n const range = layoutMap.getCellRange(startCell.col, startCell.row);\n ranges.push(range);\n }\n } else {\n let columnIndex: number;\n const { columnObjects, indicatorsAsCol } = layoutMap;\n for (let i = 0; i < columnObjects.length; i++) {\n const columnObject = columnObjects[i];\n if ((columnObject.define as any).componentId === componentId) {\n columnIndex = i;\n break;\n }\n }\n\n if (indicatorsAsCol) {\n for (\n let column = layoutMap.rowHeaderLevelCount + columnIndex;\n column < layoutMap.colCount;\n column += columnObjects.length\n ) {\n const range = {\n start: {\n col: column + rowSeriesNumber,\n row: layoutMap.columnHeaderLevelCount\n },\n end: {\n col: column + rowSeriesNumber,\n row: layoutMap.rowCount - 1\n }\n };\n ranges.push(range);\n }\n } else {\n for (\n let row = layoutMap.columnHeaderLevelCount + columnIndex;\n row < layoutMap.rowCount;\n row += columnObjects.length\n ) {\n const range = {\n start: {\n col: layoutMap.rowHeaderLevelCount + rowSeriesNumber,\n row: row\n },\n end: {\n col: layoutMap.colCount - 1,\n row: row\n }\n };\n ranges.push(range);\n }\n }\n }\n\n return ranges;\n\n // return {\n // startCol: 0,\n // endCol: table.colCount - 1,\n // startRow: 0,\n // endRow: table.rowCount - 1\n // };\n}\n","import type { Cursor, ITimeline, Timeline } from './../../vrender';\nimport {\n createArc,\n createCircle,\n createLine,\n createRect,\n REACT_TO_CANOPUS_EVENTS,\n Text,\n Group as VGroup\n} from './../../vrender';\nimport { isArray, isFunction, isObject, isString, isValid } from '@visactor/vutils';\nimport type {\n CellRange,\n ICustomLayout,\n ICustomRender,\n ICustomRenderElement,\n ICustomRenderElements,\n RectElement\n} from '../../ts-types';\nimport { Icon } from '../graphic/icon';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { percentCalcObj } from '../../render/layout';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\nimport { getTargetCell } from '../../event/util';\nimport type { Group } from '../graphic/group';\n\nexport const CUSTOM_MERGE_PRE_NAME = '_custom_';\nexport const CUSTOM_CONTAINER_NAME = 'custom-container';\nexport const CUSTOM_MERGE_CONTAINER_NAME = CUSTOM_MERGE_PRE_NAME + '_0';\n\nexport function dealWithCustom(\n customLayout: ICustomLayout,\n customRender: ICustomRender,\n col: number,\n row: number,\n width: number,\n height: number,\n autoWidth: boolean,\n autoHeight: boolean,\n padding: [number, number, number, number],\n range: CellRange | undefined,\n table: BaseTableAPI\n) {\n let renderDefault = true;\n let enableCellPadding = false;\n let expectedWidth: number;\n let expectedHeight: number;\n let customElements;\n let elementsGroup: VGroup;\n\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (typeof customLayout === 'function') {\n const arg = {\n col: range?.start.col ?? col,\n row: range?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height\n },\n table,\n originCol: col,\n originRow: row\n };\n const customRenderObj = customLayout(arg);\n if (!customRenderObj) {\n return {\n renderDefault: true\n };\n }\n if (customRenderObj.rootContainer) {\n customRenderObj.rootContainer = decodeReactDom(customRenderObj.rootContainer, table.animationManager.timeline);\n }\n // expectedWidth = customRenderObj.expectedWidth;\n // expectedHeight = customRenderObj.expectedHeight;\n if (customRenderObj.rootContainer instanceof VGroup) {\n elementsGroup = customRenderObj.rootContainer;\n elementsGroup.name = CUSTOM_CONTAINER_NAME;\n (elementsGroup as any).col = col;\n (elementsGroup as any).row = row;\n // } else if (customRenderObj.rootContainer) {\n // customElements = customRenderObj.rootContainer.getElements(undefined, false, false);\n }\n renderDefault = customRenderObj.renderDefault;\n enableCellPadding = customRenderObj.enableCellPadding;\n } else if (typeof customRender === 'function') {\n const arg = {\n col,\n row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: {\n left: 0,\n top: 0,\n right: width,\n bottom: height,\n width,\n height\n },\n table\n };\n const customRenderObj = customRender(arg);\n if (customRenderObj) {\n customElements = customRenderObj.elements;\n renderDefault = customRenderObj.renderDefault;\n expectedWidth = customRenderObj.expectedWidth;\n expectedHeight = customRenderObj.expectedHeight;\n }\n } else if (customRender) {\n expectedWidth = customRender.expectedWidth;\n expectedHeight = customRender.expectedHeight;\n customElements = customRender.elements;\n renderDefault = customRender.renderDefault;\n }\n\n if (customElements) {\n const value = table.getCellValue(col, row);\n elementsGroup = adjustElementToGroup(\n customElements,\n autoWidth ? expectedWidth : width,\n autoHeight ? expectedHeight : height,\n value\n );\n }\n\n if (enableCellPadding) {\n elementsGroup.setAttributes({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3],\n height: height - padding[0] - padding[2]\n });\n }\n\n // for percent calc\n dealPercentCalc(elementsGroup, width, height);\n\n // deal with merge cell attribute update\n if (range && (range.start.col !== range.end.col || range.start.row !== range.end.row)) {\n bindAttributeUpdate(elementsGroup, col, row, 0);\n }\n\n return {\n elementsGroup,\n renderDefault\n };\n}\n\nfunction adjustElementToGroup(\n elements: ICustomRenderElements,\n width: number,\n height: number,\n value: any\n): VGroup | undefined {\n const customGroup = new VGroup({\n x: 0,\n y: 0,\n width,\n height,\n fill: false,\n stroke: false,\n pickable: false\n });\n customGroup.name = CUSTOM_CONTAINER_NAME;\n\n const elementsAdjusted = adjustElementsPos(elements, width, height, value);\n elementsAdjusted.forEach(element => {\n if ((element as any).clickable) {\n element.pickable = (element as any).clickable;\n }\n switch (element.type) {\n case 'arc':\n const arc = createArc({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n outerRadius: element.radius as number,\n startAngle: element.startAngle as number,\n endAngle: element.endAngle as number,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n arc.name = element.name;\n customGroup.appendChild(arc);\n break;\n case 'text':\n if (element.background) {\n const expandX = element.background?.expandX ?? 0;\n const expandY = element.background?.expandY ?? 0;\n const textBackRect = createRect({\n x: (element.x as number) - expandX,\n y: (element.y as number) - expandY,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width + expandX * 2,\n height: element.height + expandY * 2,\n cornerRadius: element.background?.cornerRadius ?? 0,\n // fill: true,\n fill: element.background?.fill ?? '#888'\n });\n customGroup.appendChild(textBackRect);\n }\n const text = new Text(\n Object.assign(\n {\n pickable: !!element.pickable,\n fill: element.color ?? element.fill\n },\n element as any\n )\n );\n text.name = element.name;\n customGroup.appendChild(text);\n break;\n case 'rect':\n const rect = createRect({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n cornerRadius: element.radius as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n rect.name = element.name;\n customGroup.appendChild(rect);\n break;\n case 'circle':\n const circle = createCircle({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n radius: element.radius as number,\n fill: element.fill as string,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n circle.name = element.name;\n customGroup.appendChild(circle);\n break;\n case 'icon':\n const icon = new Icon({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n image: element.svg as string,\n backgroundWidth: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundHeight: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundColor: element.hover ? element.hover.bgColor ?? 'rgba(22,44,66,0.2)' : undefined,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n icon.name = element.name;\n icon.role = 'icon-custom';\n customGroup.appendChild(icon);\n break;\n case 'image':\n const image = new Icon({\n x: element.x as number,\n y: element.y as number,\n dx: (element.dx ?? 0) as number,\n dy: (element.dy ?? 0) as number,\n width: element.width as number,\n height: element.height as number,\n image: element.src as string,\n backgroundWidth: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundHeight: element.hover ? ((element.hover.width ?? element.width) as number) : undefined,\n backgroundColor: element.hover ? element.hover.bgColor ?? 'rgba(22,44,66,0.2)' : undefined,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor,\n shape: element.shape\n });\n image.name = element.name;\n image.role = 'image-custom';\n customGroup.appendChild(image);\n break;\n\n case 'line':\n const line = createLine({\n points: element.points,\n lineWidth: element.lineWidth ?? 1,\n stroke: element.stroke as string,\n pickable: !!element.pickable,\n cursor: element.cursor as Cursor\n });\n line.name = element.name;\n customGroup.appendChild(line);\n break;\n }\n });\n\n return customGroup;\n}\n\nfunction adjustElementsPos(\n originalElements: ICustomRenderElements,\n // rect: RectProps,\n width: number,\n height: number,\n // borderLineWidths: number[],\n value: any\n): ICustomRenderElements {\n const result: ICustomRenderElements = [];\n // const { left, top, width, height } = rect;\n const left = 0;\n const top = 0;\n const borderLineWidths = [0, 0, 0, 0];\n\n for (let i = 0; i < originalElements.length; i++) {\n const originalElement = originalElements[i];\n const element = Object.assign({}, originalElement);\n // 执行相关函数\n for (const name in element) {\n if (element.hasOwnProperty(name) && isFunction(element[name])) {\n element[name] = (element[name] as Function)(value);\n }\n }\n\n // 转换字符串值(百分比、px)\n const rect = element as RectElement;\n if (isValid(rect.x)) {\n rect.x = isString(rect.x)\n ? transformString((rect as any).x as string, width - borderLineWidths[1])\n : Number(rect.x);\n }\n if (isValid(rect.y)) {\n rect.y = isString(rect.y)\n ? transformString((rect as any).y as string, height - borderLineWidths[2])\n : Number(rect.y);\n }\n if ('width' in element) {\n element.width = isString(element.width)\n ? transformString(element.width as string, width - borderLineWidths[1])\n : Number(element.width);\n }\n if ('height' in element) {\n element.height = isString(element.height)\n ? transformString(element.height as string, height - borderLineWidths[2])\n : Number(element.height);\n }\n if ('radius' in element) {\n element.radius = isString(element.radius)\n ? transformString(element.radius as string, Math.min(width - borderLineWidths[1], height - borderLineWidths[2]))\n : Number(element.radius);\n }\n if ('hover' in element) {\n // 转换字符串值(百分比、px)\n element.hover.x = isString(element.hover.x)\n ? transformString(element.hover.x as string, width - borderLineWidths[1])\n : Number(element.hover.x);\n element.hover.y = isString(element.hover.y)\n ? transformString(element.hover.y as string, height - borderLineWidths[2])\n : Number(element.hover.y);\n element.hover.width = isString(element.hover.width)\n ? transformString(element.hover.width as string, width - borderLineWidths[1])\n : Number(element.hover.width);\n\n element.hover.height = isString(element.hover.height)\n ? transformString(element.hover.height as string, height - borderLineWidths[2])\n : Number(element.hover.height);\n element.hover.x += left;\n element.hover.y += top;\n }\n // 矫正位置\n rect.x = rect.x + left;\n rect.y = rect.y + top;\n\n result.push(element as unknown as ICustomRenderElement);\n }\n\n return result;\n}\n\nfunction transformString(str: string, size?: number): number {\n if (str.endsWith('px')) {\n return parseInt(str, 10);\n } else if (str.endsWith('%') && size) {\n return (parseInt(str, 10) / 100) * size;\n }\n return parseInt(str, 10);\n}\n\nexport function dealPercentCalc(group: VGroup, parentWidth: number, parentHeight: number) {\n if (!group) {\n return;\n }\n group.forEachChildren((child: VGroup) => {\n if (!child) {\n return;\n }\n if (isObject(child.attribute.width) && (child.attribute.width as percentCalcObj).percent) {\n child.setAttribute(\n 'width',\n Math.max(\n 0,\n ((child.attribute.width as percentCalcObj).percent / 100) * parentWidth +\n ((child.attribute.width as percentCalcObj).delta ?? 0)\n )\n );\n }\n\n if (child.attribute.width < 0) {\n child.setAttribute('width', 0);\n }\n\n if (isObject(child.attribute.height) && (child.attribute.height as percentCalcObj).percent) {\n child.setAttribute(\n 'height',\n Math.max(\n 0,\n ((child.attribute.height as percentCalcObj).percent / 100) * parentHeight +\n ((child.attribute.height as percentCalcObj).delta ?? 0)\n )\n );\n }\n\n if (child.attribute.height < 0) {\n child.setAttribute('height', 0);\n }\n\n if (child.type === 'group') {\n dealPercentCalc(child, child.attribute.width, child.attribute.height);\n }\n });\n}\n\n// temp devode for react jsx customLayout\nexport function decodeReactDom(dom: any, timeline?: ITimeline) {\n if (\n !dom ||\n (!isValid(dom.$$typeof) && // for react\n !isValid(dom.vtype)) // for openinula\n ) {\n // not react or openinula\n return dom;\n }\n const type = dom.type;\n const { attribute, children, stateProxy, animation } = dom.props;\n const g = type({ attribute });\n parseToGraphic(g, dom.props);\n if (stateProxy) {\n g.stateProxy = stateProxy;\n }\n\n g.id = attribute.id;\n g.name = attribute.name;\n if (isArray(children)) {\n children.forEach((item: any) => {\n const c = decodeReactDom(item, timeline);\n c && c.type && g.add(c);\n });\n } else if (children) {\n g.add(decodeReactDom(children, timeline));\n }\n\n if (isArray(animation) && timeline) {\n const animate = g.animate();\n animate.setTimeline(timeline);\n animation.forEach((item: any[]) => {\n animate[item[0]](...item.slice(1));\n });\n }\n return g;\n}\n\nfunction parseToGraphic(g: any, props: any) {\n let isGraphic: boolean = false;\n switch (g.type) {\n case 'richtext':\n break;\n // case 'rich/text':\n // out = g.attribute || {};\n // childrenList[0] && (out.text = childrenList[0]);\n // break;\n case 'rich/image':\n break;\n default:\n isGraphic = true;\n }\n\n if (isGraphic) {\n // childrenList.forEach((c: any) => {\n // c && g.add(c);\n // });\n\n Object.keys(props).forEach(k => {\n const en = REACT_TO_CANOPUS_EVENTS[k];\n if (en) {\n g.on(en, props[k]);\n }\n });\n\n // } else {\n // if (g.type === 'richtext') {\n // g.attribute.textConfig = childrenList.map(item => item.attribute).filter(item => item);\n // }\n }\n}\n\nfunction bindAttributeUpdate(group: VGroup, col: number, row: number, index: number, preId?: string) {\n if (!group) {\n return;\n }\n group.name = `${CUSTOM_MERGE_PRE_NAME}${preId ?? ''}_${index}`;\n group.onBeforeAttributeUpdate = onBeforeAttributeUpdate as any;\n // group.on('afterAttributeUpdate', (e) => {console.log('afterAttributeUpdate', e)})\n if (group.type === 'group' && group.childrenCount) {\n group.forEachChildren((child: VGroup, childIndex: number) => {\n bindAttributeUpdate(child, col, row, childIndex, (preId ?? '') + '_' + index);\n });\n }\n}\n\nfunction onBeforeAttributeUpdate(val: Record, attribute: any) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.skipMergeUpdate) {\n return;\n }\n const cellGroup = getTargetCell(graphic) as Group;\n if (!cellGroup || !cellGroup.stage) {\n return;\n }\n const table = ((cellGroup as any).stage as any).table as BaseTableAPI;\n graphic.skipAttributeUpdate = true;\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = cellGroup;\n if (\n isValid(mergeStartCol) &&\n isValid(mergeEndCol) &&\n isValid(mergeStartRow) &&\n isValid(mergeEndRow) &&\n (mergeStartCol !== mergeEndCol || mergeStartRow !== mergeEndRow)\n ) {\n for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n if (col === cellGroup.col && row === cellGroup.row) {\n continue;\n }\n // const cell = table.scenegraph.getCell(col, row);\n const cell = table.scenegraph.highPerformanceGetCell(col, row);\n if (cell.role === 'cell') {\n const target = cell.getChildByName(graphic.name, true);\n if (!target || target.skipAttributeUpdate) {\n continue;\n }\n for (const key in val) {\n // 表格内merge 单元格布局时,会使用dx dy定位,避免重复更新值,属性同步跳过 dx dy\n // console.log(\n // '[onBeforeAttributeUpdate]',\n // target._uid,\n // cellGroup.col,\n // cellGroup.row,\n // col,\n // row,\n // key,\n // val[key]\n // );\n if (val[key] !== target.attribute[key] && key !== 'dx' && key !== 'dy') {\n target.setAttribute(key, val[key]);\n }\n }\n }\n }\n }\n graphic.skipAttributeUpdate = undefined;\n // return attribute;\n }\n}\n","import type { ColumnIconOption } from '../ts-types';\n\nexport const icons: { [key: string]: ColumnIconOption } = {};\n\nexport class IconCache {\n private static cache: Map = new Map();\n\n static setIcon(key: string, icon: ColumnIconOption) {\n this.cache.set(key, icon);\n }\n\n static getIcon(key: string): ColumnIconOption | null {\n if (this.cache.has(key)) {\n return this.cache.get(key) as ColumnIconOption;\n }\n return null;\n }\n\n static hasIcon(key: string): boolean {\n return this.cache.has(key);\n }\n\n static clear(key: string): boolean {\n return this.cache.delete(key);\n }\n\n static clearAll() {\n this.cache = new Map();\n }\n}\n","import type { IGraphic, IColor, IRect, INode, IGroupGraphicAttribute, ISetAttributeContext } from './../../vrender';\nimport { Group as VRenderGroup } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { InteractionState } from '../../ts-types';\nimport { isNumber, type AABBBounds } from '@visactor/vutils';\n\nexport class Group extends VRenderGroup {\n role?: string;\n col?: number;\n row?: number;\n mergeStartCol?: number;\n mergeStartRow?: number;\n mergeEndCol?: number;\n mergeEndRow?: number;\n contentWidth?: number;\n contentHeight?: number;\n rowNumber?: number; // row number of the column group\n colHeight?: number; // current height of the column group\n border?: IRect; // table/header/body的border mark,挂载在这里方便更新\n needUpdate?: boolean;\n\n needUpdateWidth?: boolean;\n needUpdateHeight?: boolean;\n\n // changes for size align for fs\n // constructor(attribute?: IGroupGraphicAttribute) {\n // dealWidthSize(attribute, attribute);\n // super(attribute);\n // }\n\n // setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext): void {\n // if (key === 'x' || key === 'y' || key === 'width' || key === 'height') {\n // this.attribute[`old${key}`];\n // }\n // const values = {\n // [key]: value\n // };\n // this.setAttributes(values, forceUpdateTag, context);\n // }\n\n // setAttributes(\n // params: Partial,\n // forceUpdateTag?: boolean,\n // context?: ISetAttributeContext\n // ): void {\n // dealWidthSize(params, this.attribute);\n // super.setAttributes(params, forceUpdateTag, context);\n // }\n\n /**\n * @description: 清空Group下全部子元素\n * @return {*}\n */\n clear() {\n this.removeAllChild();\n }\n\n getChildByName(name: string, deep?: boolean): any {\n // for (let i = 0, j = this.children.length; i < j; i++) {\n // if (this.children[i].name === name) {\n // return this.children[i] as unknown as T;\n // }\n // }\n let result = null;\n this.forEachChildren((child: IGraphic) => {\n if (child.name === name) {\n result = child;\n return true; // 提前退出循环\n }\n return false;\n });\n\n if (deep) {\n // for (let i = 0, j = this.children.length; i < j; i++) {\n // const child = this.children[i] as Group;\n\n // if (!child.getChildByName) {\n // continue;\n // }\n\n // const target = child.getChildByName(name, true);\n\n // if (target) {\n // return target;\n // }\n // }\n this.forEachChildren((child: IGraphic) => {\n if ((child as Group).getChildByName) {\n const target = (child as Group).getChildByName(name, true);\n if (target) {\n result = target;\n return true;\n }\n }\n return false;\n });\n }\n\n return result;\n }\n\n get width() {\n let width = this.AABBBounds.width();\n if (width === Infinity || width === -Infinity) {\n width = 0;\n }\n return Math.max(width, this.attribute.width ?? 0);\n }\n\n get height() {\n let height = this.AABBBounds.height();\n if (height === Infinity || height === -Infinity) {\n height = 0;\n }\n return Math.max(height, this.attribute.height ?? 0);\n }\n\n setDeltaWidth(deltaX: number) {\n if (deltaX === 0) {\n return;\n }\n this.setAttribute('width', (this.attribute.width ?? 0) + deltaX);\n if (this.border) {\n this.border.setAttribute('width', this.border.attribute.width + deltaX);\n\n if (this.border.type === 'group') {\n (this.border.firstChild as IRect).setAttribute(\n 'width',\n (this.border.firstChild as IRect).attribute.width + deltaX\n );\n }\n }\n }\n\n setDeltaHeight(deltaY: number) {\n if (deltaY === 0) {\n return;\n }\n this.setAttribute('height', (this.attribute.height ?? 0) + deltaY);\n if (this.border) {\n this.border.setAttribute('height', this.border.attribute.height + deltaY);\n if (this.border.type === 'group') {\n (this.border.firstChild as IRect).setAttribute(\n 'width',\n (this.border.firstChild as IRect).attribute.height + deltaY\n );\n }\n }\n }\n\n setDeltaX(deltaX: number) {\n if (deltaX === 0) {\n return;\n }\n this.setAttribute('x', this.attribute.x + deltaX);\n }\n\n setDeltaY(deltaY: number) {\n if (deltaY === 0) {\n return;\n }\n this.setAttribute('y', this.attribute.y + deltaY);\n }\n\n /**\n * @description: 遍历所有子节点,跳过部分节点,默认跳过group的border\n * @return {*}\n */\n forEachChildrenSkipChild(\n cb: (item: T, index: number) => void | boolean,\n skipChildName = 'border-rect',\n reverse = false\n ) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n if (child.name !== skipChildName) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n if (child.name !== skipChildName) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n }\n child = child._next;\n }\n }\n }\n\n getColGroup(col: number) {\n let c = this._firstChild as Group;\n if (!c) {\n return null;\n }\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.col === col) {\n return c;\n }\n c = c._next as Group;\n }\n return null;\n }\n\n getRowGroup(row: number) {\n let c = this._firstChild as Group;\n if (!c) {\n return null;\n }\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.row === row) {\n return c;\n }\n c = c._next as Group;\n }\n return null;\n }\n\n addCellGroup(cellGroup: Group) {\n if (this.childrenCount === 0 || (this.lastChild as Group).row === cellGroup.row - 1) {\n this.addChild(cellGroup);\n } else {\n // for promise cell row order in column\n let c = this._firstChild as Group;\n for (let i = 0; i < this.childrenCount; i++) {\n if (c.row === cellGroup.row - 1) {\n this.insertAfter(cellGroup, c);\n return;\n }\n c = c._next as Group;\n }\n this.addChild(cellGroup);\n }\n }\n\n getChildAt(index: number) {\n const child = super.getChildAt(index);\n if (child && child.name === 'border-rect') {\n return child._next;\n }\n return child;\n }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n if (this.role === 'cell') {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds as AABBBounds;\n }\n // application.graphicService.beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n // const selfChange = true;\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n // application.graphicService.afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n after(this, selfChange);\n\n return bounds;\n }\n return super.tryUpdateAABBBounds() as AABBBounds;\n }\n\n // 目前优化方案会导致合并单元格无法正常更新列宽(因为合并单元格更新bounds不会触发父节点bounds更新),暂时关闭优化方案\n // shouldUpdateAABBBoundsForRowMerge(): boolean {\n\n // }\n\n // shouldUpdateAABBBounds(): boolean {\n // return this.shouldSelfChangeUpdateAABBBounds();\n // // // 检索自己是否需要更新\n // // if (super.shouldUpdateAABBBounds()) {\n // // return true;\n // // }\n // // // 检索叶子节点是否有更新(如果children是叶子节点的话)\n // // if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n // // return true;\n // // }\n // // // 检索是否子group需要更新\n // // let needUpdate = false;\n // // this.forEachChildren((node: IGraphic) => {\n // // // 只查找group层级\n // // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // // needUpdate = true;\n // // return true;\n // // }\n // // return false;\n // // });\n // // return needUpdate;\n // }\n\n protected doUpdateAABBBounds(): any {\n // const groupTheme = getTheme(this).group;\n // debugger;\n if (this.role === 'cell') {\n const attribute = this.attribute;\n const { x, y, width, height } = attribute;\n this._AABBBounds.setValue(x, y, x + width, y + height);\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this.clearUpdateBoundTag();\n if (this.shadowRoot) {\n // this.shadowRoot.clearUpdateBoundTag();\n this.shadowRoot.tryUpdateAABBBounds();\n }\n return this._AABBBounds;\n } else if (\n this.role === 'body' ||\n this.role === 'row-header' ||\n this.role === 'col-header' ||\n this.role === 'right-frozen' ||\n this.role === 'bottom-frozen' ||\n this.role === 'corner-header' ||\n this.role === 'corner-right-top-header' ||\n this.role === 'corner-right-bottom-header' ||\n this.role === 'corner-left-bottom-header'\n ) {\n // Infinity bounds for manual clip group\n this._AABBBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this.clearUpdateBoundTag();\n\n if (this.shadowRoot) {\n // this.shadowRoot.clearUpdateBoundTag();\n this.shadowRoot.tryUpdateAABBBounds();\n }\n return this._AABBBounds;\n }\n return super.doUpdateAABBBounds();\n // _AABBBounds\n // const bounds = graphicService.updateGroupAABBBounds(\n // attribute,\n // getTheme(this).group,\n // this._AABBBounds,\n // this\n // ) as AABBBounds;\n\n // const { boundsPadding = groupTheme.boundsPadding } = attribute;\n // const paddingArray = parsePadding(boundsPadding);\n // if (paddingArray) {\n // bounds.expand(paddingArray);\n // }\n // // 更新bounds之后需要设置父节点,否则tag丢失\n // this.parent && this.parent.addChildUpdateBoundTag();\n // this.clearUpdateBoundTag();\n\n // this.emit('AAABBBoundsChange');\n }\n\n // update column group row number\n updateColumnRowNumber(row: number) {\n if (!this.rowNumber) {\n this.rowNumber = row;\n } else {\n this.rowNumber = Math.max(this.rowNumber, row);\n }\n }\n\n // update column height\n updateColumnHeight(cellHeight: number) {\n if (!this.colHeight) {\n this.colHeight = cellHeight;\n } else {\n this.colHeight += cellHeight;\n }\n }\n\n // doUpdateLocalMatrix() {\n // const oldX = this.attribute.x;\n // const oldY = this.attribute.y;\n // this.attribute.x = Math.floor(this.attribute.x);\n // this.attribute.y = Math.floor(this.attribute.y);\n // super.doUpdateLocalMatrix();\n // this.attribute.x = oldX;\n // this.attribute.y = oldY;\n // }\n}\n\nfunction after(group: Group, selfChange: boolean) {\n if (!group.stage || !group.stage.dirtyBounds || !group.stage.renderCount) {\n return;\n }\n // group的子元素导致的bounds更新不用做dirtyBounds\n if (group.isContainer && !selfChange) {\n return;\n }\n group.stage.dirty(group.globalAABBBounds);\n}\n\n// function dealWidthSize(values: any, attributes: any) {\n// const x = values.x ?? attributes.oldx ?? attributes.x ?? 0 + values.dx ?? attributes.dx ?? 0;\n// const y = values.y ?? attributes.oldy ?? attributes.y ?? 0 + values.dy ?? attributes.dy ?? 0;\n// const width = values.width ?? attributes.oldwidth ?? attributes.width ?? 0;\n// const height = values.height ?? attributes.oldheight ?? attributes.height ?? 0;\n// isNumber(values.width) && (values.oldwidth = values.width);\n// isNumber(values.height) && (values.oldheight = values.height);\n// isNumber(values.x) && (values.oldx = values.x);\n// isNumber(values.y) && (values.oldy = values.y);\n\n// if (Math.floor(x + width) > Math.floor(width) + Math.floor(x)) {\n// values.width = Math.ceil(width);\n// } else {\n// values.width = Math.floor(width);\n// }\n\n// if (Math.floor(y + height) > Math.floor(height) + Math.floor(y)) {\n// values.height = Math.ceil(height);\n// } else {\n// values.height = Math.floor(height);\n// }\n// isNumber(values.x) && (values.x = Math.floor(values.x));\n// isNumber(values.y) && (values.y = Math.floor(values.y));\n// }\n","export function calcKeepAspectRatioSize(\n width: number, // image width\n height: number, // image height\n maxWidth: number, // cell width\n maxHeight: number // cell height\n): {\n width: number;\n height: number;\n} {\n // let newWidth = width;\n // let newHeight = height;\n // if (newWidth > maxWidth) {\n // newWidth = maxWidth;\n // newHeight = (newWidth * height) / width;\n // }\n // if (newHeight > maxHeight) {\n // newHeight = maxHeight;\n // newWidth = (newHeight * width) / height;\n // }\n // return {\n // width: newWidth,\n // height: newHeight\n // };\n\n const rectWidth = width;\n const rectHeight = height;\n const containerWidth = maxWidth;\n const containerHeight = maxHeight;\n const containerRatio = containerWidth / containerHeight;\n const rectRatio = rectWidth / rectHeight;\n let newWidth;\n let newHeight;\n let offsetX;\n let offsetY;\n\n if (rectRatio > containerRatio) {\n // 矩形的宽高比较大,以容器的宽度为基准进行缩放\n newWidth = containerWidth;\n newHeight = newWidth / rectRatio;\n offsetX = 0;\n offsetY = (containerHeight - newHeight) / 2;\n } else {\n // 矩形的高宽比较大,以容器的高度为基准进行缩放\n newHeight = containerHeight;\n newWidth = newHeight * rectRatio;\n offsetY = 0;\n offsetX = (containerWidth - newWidth) / 2;\n }\n\n return {\n width: newWidth,\n height: newHeight\n };\n}\n","/* eslint-disable no-undef */\nexport function calcStartPosition(\n left: number,\n top: number,\n width: number,\n height: number,\n contentWidth: number,\n contentHeight: number,\n textAlign: CanvasTextAlign = 'left',\n textBaseline: CanvasTextBaseline = 'middle',\n margin = [0, 0, 0, 0],\n paddingLeft = 0,\n paddingRight = 0,\n paddingTop = 0,\n paddingBottom = 0\n): { x: number; y: number } {\n const right = left + width;\n const bottom = top + height;\n let x = left + margin[3] + paddingLeft;\n if (textAlign === 'right' || textAlign === 'end') {\n x = right - contentWidth - margin[1] - paddingRight;\n } else if (textAlign === 'center') {\n x = left + (width - contentWidth + paddingLeft - paddingRight) / 2;\n }\n let y = top + margin[0] + paddingTop;\n if (textBaseline === 'bottom' || textBaseline === 'alphabetic' || textBaseline === 'ideographic') {\n y = bottom - contentHeight - margin[2] - paddingBottom;\n } else if (textBaseline === 'middle') {\n y = top + (height - contentHeight + paddingTop - paddingBottom) / 2;\n }\n return { x, y };\n}\n","import type { IThemeSpec } from '@visactor/vrender-core';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { style as utilStyle } from '../../tools/helper';\nimport { isValid } from '@visactor/vutils';\nimport { isValidStyle, isZeroStyle } from '../../tools/style';\n\nexport function getCellBorderStrokeWidth(col: number, row: number, cellTheme: IThemeSpec, table: BaseTableAPI) {\n // const frameBorderLineWidths = utilStyle.toBoxArray(table.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n let strokeArrayWidth = (cellTheme?.group as any)?.strokeArrayWidth ?? undefined;\n if (\n table.theme.cellInnerBorder ||\n !isValidStyle(table.theme.frameStyle.borderLineWidth) ||\n isZeroStyle(table.theme.frameStyle.borderLineWidth)\n ) {\n return strokeArrayWidth;\n }\n if (col === 0) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[3] = 0;\n }\n if (col === table.colCount - 1) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[1] = 0;\n }\n if (row === 0) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[0] = 0;\n }\n if (row === table.rowCount - 1) {\n strokeArrayWidth = strokeArrayWidth ?? [\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth,\n cellTheme?.group?.lineWidth\n ];\n strokeArrayWidth[2] = 0;\n }\n\n return strokeArrayWidth;\n}\n","/* eslint-disable no-undef */\nimport type { IGroupGraphicAttribute } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport { Group } from '../graphic/group';\nimport { Icon } from '../graphic/icon';\n\n/*\n * cell区域规划\n * 左侧占位区 | 中央内容区 | 右侧占位区\n *\n * cell width设置\n * 1. 固定width\n * 2. 自动撑开\n * cell height设置\n * 1. 固定height\n * 2. 无折行,单行自动撑开\n * 2. 折行,多行自动撑开\n *\n * 中央内容区横向对齐方式\n * 纵向对齐方式\n * padding\n */\n\ninterface ICellContentOption {\n autoWidth: boolean;\n autoHeight: boolean;\n cellWidth: number;\n cellHeight: number;\n align: CanvasTextAlign;\n baseline: CanvasTextBaseline;\n}\n\n/**\n * @description: 单元格内容组件,包含content icon & wraptext/richtext\n * @return {*}\n */\nexport class CellContent extends Group {\n _leftGroup: Group;\n _rightGroup: Group;\n _centerGroup: Group;\n\n _autoWidth = false;\n _autoHeight = false;\n _cellWidth: number;\n _originCellWidth: number;\n _cellHeight: number;\n _align: CanvasTextAlign;\n _baseline: CanvasTextBaseline;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n\n this._leftGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._leftGroup.role = 'content-left';\n this._rightGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._rightGroup.role = 'content-right';\n this._centerGroup = new Group({\n pickable: false,\n fill: false,\n stroke: false\n });\n this._centerGroup.role = 'content-center';\n\n this.appendChild(this._leftGroup);\n this.appendChild(this._rightGroup);\n this.appendChild(this._centerGroup);\n }\n\n setCellContentOption(option: ICellContentOption) {\n this._autoWidth = option.autoWidth;\n this._autoHeight = option.autoHeight;\n this._cellWidth = option.cellWidth;\n this._originCellWidth = option.cellWidth;\n this._cellHeight = option.cellHeight;\n this._align = option.align;\n this._baseline = option.baseline;\n }\n\n addLeftOccupyingIcon(icon: Icon) {\n icon.setAttribute('x', this._leftGroup.width + (icon.attribute.marginLeft ?? 0));\n this._leftGroup.appendChild(icon);\n this._leftGroup.setDeltaWidth(\n (icon.attribute.marginLeft ?? 0) + (icon.attribute.marginRight ?? 0) + icon.attribute.width\n );\n }\n\n addRightOccupyingIcon(icon: Icon) {\n icon.setAttribute('x', this._rightGroup.width + (icon.attribute.marginLeft ?? 0));\n this._rightGroup.appendChild(icon);\n this._rightGroup.setDeltaWidth(\n (icon.attribute.marginLeft ?? 0) + (icon.attribute.marginRight ?? 0) + icon.attribute.width\n );\n }\n\n addContent(content: Icon | Text | RichText) {\n const lastChild = this._centerGroup.lastChild as Icon | Text | RichText;\n if (lastChild) {\n // 横排content,新加入content更新x坐标\n content.setAttributes({\n x: lastChild.attribute.x + lastChild.AABBBounds.width()\n });\n }\n this._centerGroup.appendChild(content);\n if (content instanceof Text) {\n this._centerGroup.setAttribute('pickable', false);\n content.setAttribute('textAlign', 'left');\n }\n }\n\n layout() {\n // 计算左侧占位区域尺寸\n let leftOccupyingWidth = this._leftGroup.width;\n if (leftOccupyingWidth === Infinity) {\n leftOccupyingWidth = 0;\n }\n // 计算右侧占位区域尺寸\n let rightOccupyingWidth = this._rightGroup.width;\n if (rightOccupyingWidth === -Infinity) {\n rightOccupyingWidth = 0;\n }\n\n // 计算中央内容区域尺寸\n if (this._autoWidth) {\n // 计算内容本身宽度\n const centerWidth = this._centerGroup.width;\n // 更新cell宽度\n this._cellWidth = leftOccupyingWidth + rightOccupyingWidth + centerWidth;\n // this.attribute.width = this._cellWidth;\n this.setAttribute('width', this._cellWidth);\n } else {\n // 计算留给内容的宽度\n const contentWidth = this._cellWidth - leftOccupyingWidth - rightOccupyingWidth;\n // 更新内容宽度\n this.updateCenterLayout(contentWidth);\n const centerWidth = this._centerGroup.width;\n this._cellWidth = leftOccupyingWidth + rightOccupyingWidth + centerWidth;\n // this.attribute.width = this._cellWidth;\n this.setAttribute('width', this._cellWidth);\n }\n // 更新水平位置\n this.updateHorizontalPos();\n\n // if (this._autoHeight) {\n const leftOccupyingHeight = this._leftGroup.height;\n const rightOccupyingHeight = this._rightGroup.height;\n const centerHeight = this._centerGroup.height;\n\n this._cellHeight = Math.max(leftOccupyingHeight, rightOccupyingHeight, centerHeight);\n // this.attribute.height = this._cellHeight;\n this.setAttribute('height', this._cellHeight);\n // }\n\n // 更新纵向位置\n this.updateVerticalPos();\n }\n\n updateCenterLayout(contentWidth: number) {\n // 计算留给文字的空间\n let textWidth = contentWidth;\n this._centerGroup.forEachChildren(child => {\n if (child instanceof Icon) {\n textWidth -= child.AABBBounds.width();\n }\n });\n\n // 更新文字宽度\n const text = this._centerGroup.getChildByName('text');\n if (text instanceof RichText) {\n text.setAttribute('width', textWidth);\n } else if (text instanceof Text) {\n text.setAttribute('maxLineWidth', textWidth);\n }\n\n // 按顺序更新x\n let x = 0;\n this._centerGroup.forEachChildren((child: Icon | Text | RichText) => {\n child.setAttribute('x', x);\n x += child.AABBBounds.width();\n });\n }\n\n updateHorizontalPos() {\n this._leftGroup.setAttribute('x', 0);\n this._rightGroup.setAttribute('x', this._cellWidth - this._rightGroup.width);\n this._centerGroup.setAttribute('x', this._leftGroup.width);\n // 对齐方式由外部处理\n if (this._align === 'left' || this._align === 'start') {\n this.setAttribute('dx', 0);\n } else if (this._align === 'center') {\n this.setAttribute('dx', -this.attribute.width / 2);\n } else if (this._align === 'right' || this._align === 'end') {\n this.setAttribute('dx', -this.attribute.width);\n }\n }\n\n updateVerticalPos() {\n if (this._baseline === 'top') {\n this._leftGroup.setAttribute('y', 0);\n this._rightGroup.setAttribute('y', 0);\n this._centerGroup.setAttribute('y', 0);\n } else if (this._baseline === 'middle') {\n // 处理Group内icon对齐\n this._leftGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', (this._leftGroup.height - icon.AABBBounds.height()) / 2);\n });\n this._rightGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', (this._rightGroup.height - icon.AABBBounds.height()) / 2);\n });\n\n this._leftGroup.setAttribute('y', this._cellHeight / 2 - this._leftGroup.height / 2);\n this._rightGroup.setAttribute('y', this._cellHeight / 2 - this._rightGroup.height / 2);\n this._centerGroup.setAttribute('y', this._cellHeight / 2 - this._centerGroup.height / 2);\n } else if (this._baseline === 'bottom') {\n // 处理Group内icon对齐\n this._leftGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', this._leftGroup.height - icon.AABBBounds.height());\n });\n this._rightGroup.forEachChildren((icon: Icon) => {\n icon.setAttribute('y', this._rightGroup.height - icon.AABBBounds.height());\n });\n\n this._leftGroup.setAttribute('y', this._cellHeight - this._leftGroup.height);\n this._rightGroup.setAttribute('y', this._cellHeight - this._rightGroup.height);\n this._centerGroup.setAttribute('y', this._cellHeight - this._centerGroup.height);\n }\n }\n\n updateWidth(width: number) {\n this._cellWidth = width;\n this._originCellWidth = width;\n this.layout();\n }\n\n updateHeight(height: number) {\n this._cellHeight = height;\n this._cellWidth = this._originCellWidth;\n const textMark = this.getChildByName('text', true);\n if (textMark) {\n textMark.setAttribute('heightLimit', height);\n }\n\n this.layout();\n }\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\nimport { HierarchyState } from '../../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\n\nexport function getHierarchyOffset(col: number, row: number, table: BaseTableAPI): number {\n // 处理树形展开\n let cellHierarchyIndent = 0;\n const layoutMap = table.internalProps.layoutMap;\n //判断是否为表头\n if (layoutMap.isHeader(col, row)) {\n const hd = layoutMap.getHeader(col, row) as HeaderData;\n if (isValid(hd?.hierarchyLevel)) {\n cellHierarchyIndent = (hd.hierarchyLevel ?? 0) * ((layoutMap as PivotHeaderLayoutMap).rowHierarchyIndent ?? 0);\n if (\n (layoutMap as PivotHeaderLayoutMap).rowHierarchyTextStartAlignment &&\n !table.internalProps.headerHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n } else {\n // 基本表格表身body单元格 如果是树形展开 需要考虑缩进值\n // const cellHierarchyState = table.getHierarchyState(col, row);\n if (\n (table.options as ListTableConstructorOptions).groupBy ||\n (table.getBodyColumnDefine(col, row) as ColumnDefine)?.tree\n ) {\n const indexArr = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row));\n const groupLength = table.dataSource.getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = 0;\n }\n cellHierarchyIndent =\n Array.isArray(indexArr) && table.getHierarchyState(col, row) !== HierarchyState.none\n ? indexArrLngth * ((layoutMap as SimpleHeaderLayoutMap).hierarchyIndent ?? 0)\n : 0;\n if (\n (layoutMap as SimpleHeaderLayoutMap).hierarchyTextStartAlignment &&\n !table.internalProps.bodyHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.bodyHelper.getHierarchyIconWidth();\n }\n }\n }\n\n return cellHierarchyIndent;\n}\n","import { isString } from '@visactor/vutils';\nimport { convertInternal } from '../../tools/util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function breakString(textStr: string, table: BaseTableAPI) {\n let moreThanMaxCharacters = false;\n if (isString(textStr) && textStr.length > (table.options.maxCharactersNumber || 200)) {\n textStr = textStr.slice(0, table.options.maxCharactersNumber || 200);\n textStr += '\\u2026';\n moreThanMaxCharacters = true;\n }\n let text;\n if (!table.internalProps.enableLineBreak && !table.options.customConfig?.multilinesForXTable) {\n text = [convertInternal(textStr)];\n } else {\n text = convertInternal(textStr).replace(/\\r?\\n/g, '\\n').replace(/\\r/g, '\\n').split('\\n') || [];\n }\n\n // clear empty string in array end\n while (text.length && text.length > 1 && !text[text.length - 1]) {\n text.pop();\n }\n\n if (table.options.customConfig?.multilinesForXTable && !table.internalProps.autoWrapText) {\n // clear empty string in array start;\n // align width xtable display\n while (text.length && text.length > 1 && !text[0]) {\n text.shift();\n }\n }\n\n return {\n text,\n moreThanMaxCharacters\n };\n}\n","/* eslint-disable no-undef */\nimport type { IThemeSpec } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport { convertInternal } from '../../tools/util';\nimport type { CellRange, ColumnIconOption } from '../../ts-types';\nimport { IconFuncTypeEnum, IconPosition } from '../../ts-types';\nimport { CellContent } from '../component/cell-content';\nimport type { Group } from '../graphic/group';\nimport { Icon } from '../graphic/icon';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from './get-cell-merge';\nimport { getHierarchyOffset } from './get-hierarchy-offset';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isNil, isNumber, isValid, isValidNumber } from '@visactor/vutils';\nimport { isMergeCellGroup } from './is-merge-cell-group';\nimport { breakString } from './break-string';\nimport { CUSTOM_CONTAINER_NAME } from '../component/custom';\nimport { getTargetCell } from '../../event/util';\n\n/**\n * @description: 创建单元格内容\n * cellGroup\n * |-- content\n * |-- leftContentIcons\n * |-- rightContentIcons\n * |-- wrapText / richtext\n * |-- leftIcons\n * |-- rightIcons\n * |-- absoluteIcons\n * @param {ColumnIconOption} icons\n * @param {string} textStr\n * @param {array} padding\n * @param {boolean} autoColWidth\n * @param {boolean} autoRowHeight\n * @param {boolean} autoWrapText\n * @param {number} cellWidth\n * @param {number} cellHeight\n * @param {CanvasTextAlign} textAlign\n * @param {CanvasTextBaseline} textBaseline\n * @return {*}\n */\nexport function createCellContent(\n cellGroup: Group,\n icons: ColumnIconOption[] | null,\n textStr: string,\n padding: [number, number, number, number],\n autoColWidth: boolean,\n autoRowHeight: boolean,\n autoWrapText: boolean,\n lineClamp: number | undefined,\n cellWidth: number,\n cellHeight: number,\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined\n) {\n // const leftIcons: ColumnIconOption[] = [];\n // const rightIcons: ColumnIconOption[] = [];\n // const contentLeftIcons: ColumnIconOption[] = [];\n // const contentRightIcons: ColumnIconOption[] = [];\n // const inlineFrontIcons: ColumnIconOption[] = [];\n // const inlineEndIcons: ColumnIconOption[] = [];\n // const absoluteLeftIcons: ColumnIconOption[] = [];\n // const absoluteRightIcons: ColumnIconOption[] = [];\n\n let contentWidth: number;\n let contentHeight: number;\n let leftIconWidth = 0;\n // let leftIconHeight = 0;\n let rightIconWidth = 0;\n // let rightIconHeight = 0;\n // let absoluteLeftIconWidth = 0;\n let absoluteRightIconWidth = 0;\n\n if (!Array.isArray(icons) || icons.length === 0) {\n if (isValid(textStr)) {\n // 没有icon,cellGroup只添加WrapText\n const { text, moreThanMaxCharacters } = breakString(textStr, table);\n\n const hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(cellGroup.col, cellGroup.row, table);\n\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n if (textAlign === 'left') {\n _contentOffset = table.theme._contentOffset;\n } else if (textAlign === 'right') {\n _contentOffset = -table.theme._contentOffset;\n }\n }\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n moreThanMaxCharacters,\n maxLineWidth: autoColWidth ? Infinity : cellWidth - (padding[1] + padding[3] + hierarchyOffset),\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit:\n table.options.customConfig?.limitContentHeight === false\n ? -1\n : autoRowHeight && !table.options.customConfig?.multilinesForXTable\n ? -1\n : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: (textAlign === 'left' ? hierarchyOffset : 0) + _contentOffset,\n whiteSpace:\n table.options.customConfig?.limitContentHeight === false\n ? 'normal'\n : text.length === 1 && !autoWrapText\n ? 'no-wrap'\n : 'normal',\n keepCenterInLine: true\n };\n const wrapText = new Text(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n wrapText.name = 'text';\n (wrapText as any).textBaseline = textBaseline;\n\n cellGroup.appendChild(wrapText);\n\n contentWidth = wrapText.AABBBounds.width();\n contentHeight = wrapText.AABBBounds.height();\n }\n } else {\n // // icon分类\n // icons.forEach(icon => {\n // switch (icon.positionType) {\n // case IconPosition.left:\n // leftIcons.push(icon);\n // break;\n // case IconPosition.right:\n // rightIcons.push(icon);\n // break;\n // case IconPosition.contentLeft:\n // contentLeftIcons.push(icon);\n // break;\n // case IconPosition.contentRight:\n // contentRightIcons.push(icon);\n // break;\n // // case IconPosition.absoluteLeft:\n // // absoluteLeftIcons.push(icon);\n // // break;\n // case IconPosition.absoluteRight:\n // absoluteRightIcons.push(icon);\n // break;\n // case IconPosition.inlineFront:\n // inlineFrontIcons.push(icon);\n // break;\n // case IconPosition.inlineEnd:\n // inlineEndIcons.push(icon);\n // break;\n // }\n // });\n\n // // 添加非cell icon & absolute icon\n // leftIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-left';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', leftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // leftIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n // cellGroup.appendChild(iconMark);\n // });\n\n // rightIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-right';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', rightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // rightIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n // cellGroup.appendChild(iconMark);\n // });\n\n // absoluteLeftIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-absolute-left';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', absoluteLeftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // absoluteLeftIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // cellGroup.appendChild(iconMark);\n // });\n\n // absoluteRightIcons.forEach(icon => {\n // const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n // iconMark.role = 'icon-absolute-right';\n // iconMark.name = icon.name;\n // iconMark.setAttribute('x', absoluteRightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n // absoluteRightIconWidth +=\n // iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n // cellGroup.appendChild(iconMark);\n // });\n\n const {\n inlineFrontIcons,\n inlineEndIcons,\n contentLeftIcons,\n contentRightIcons,\n leftIconWidth: layoutLeftIconWidth,\n // leftIconHeight: layoutLeftIconHeight,\n rightIconWidth: layoutRightIconWidth,\n // rightIconHeight: layoutRightIconHeight,\n // absoluteLeftIconWidth: layoutAbsoluteLeftIconWidth,\n absoluteRightIconWidth: layoutAbsoluteRightIconWidth\n } = dealWithIconLayout(icons, cellGroup, range, table);\n\n leftIconWidth = layoutLeftIconWidth;\n // leftIconHeight = layoutLeftIconHeight;\n rightIconWidth = layoutRightIconWidth;\n // rightIconHeight = layoutRightIconHeight;\n // absoluteLeftIconWidth = layoutAbsoluteLeftIconWidth;\n absoluteRightIconWidth = layoutAbsoluteRightIconWidth;\n\n // 添加text & content icon & inline icon\n let textMark;\n // 直接添加richtext / wrapText\n if (inlineFrontIcons.length === 0 && inlineEndIcons.length === 0) {\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n if (textAlign === 'left') {\n _contentOffset = table.theme._contentOffset;\n } else if (textAlign === 'right') {\n _contentOffset = -table.theme._contentOffset;\n }\n }\n const hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(cellGroup.col, cellGroup.row, table);\n const { text, moreThanMaxCharacters } = breakString(textStr, table);\n\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n moreThanMaxCharacters,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth - hierarchyOffset,\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit:\n table.options.customConfig?.limitContentHeight === false\n ? -1\n : autoRowHeight && !table.options.customConfig?.multilinesForXTable\n ? -1\n : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n whiteSpace:\n table.options.customConfig?.limitContentHeight === false\n ? 'normal'\n : text.length === 1 && !autoWrapText\n ? 'no-wrap'\n : 'normal',\n dx: (textAlign === 'left' ? (!contentLeftIcons.length ? hierarchyOffset : 0) : 0) + _contentOffset,\n keepCenterInLine: true\n };\n const wrapText = new Text(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n wrapText.name = 'text';\n textMark = wrapText;\n } else {\n const textOption = Object.assign(\n {\n text: textStr?.toString()\n },\n (cellGroup.parent as Group)?.theme?.userTheme?.text || {}\n );\n if (cellTheme.text) {\n Object.assign(textOption, cellTheme.text);\n }\n textOption.textBaseline = 'middle';\n const textConfig = [\n ...inlineFrontIcons.map(icon => dealWithRichTextIcon(icon)),\n textOption,\n ...inlineEndIcons.map(icon => dealWithRichTextIcon(icon))\n ];\n textConfig[0].textAlign = textAlign;\n const text = new RichText({\n width: autoColWidth ? 0 : cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth,\n height: autoRowHeight && autoWrapText ? 0 : Math.ceil(cellHeight - (padding[0] + padding[2])),\n textConfig,\n verticalDirection: autoRowHeight && autoWrapText ? 'top' : (textBaseline as any),\n\n ellipsis: textOption.ellipsis\n // verticalDirection: textBaseline as any\n // textAlign: textAlign as any,\n // textBaseline: textBaseline as any,\n });\n text.name = 'text';\n textMark = text;\n text.bindIconEvent();\n\n if (range && (range.start.col !== range.end.col || range.start.row !== range.end.row)) {\n text.onBeforeAttributeUpdate = onBeforeAttributeUpdate as any;\n }\n }\n\n if (contentLeftIcons.length !== 0 || contentRightIcons.length !== 0) {\n // 创建CellContent处理conten icon;有content icon,cellGroup: CellIcons + cellContent\n\n const cellContent = new CellContent({\n // x: padding[3] + leftIconWidth,\n // y: padding[0],\n x: 0,\n y: 0,\n fill: false,\n stroke: false,\n pickable: false\n });\n cellContent.name = 'content';\n\n cellContent.setCellContentOption({\n autoWidth: autoColWidth,\n autoHeight: autoRowHeight,\n cellWidth: cellWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth,\n cellHeight: cellHeight - (padding[0] + padding[2]),\n align: textAlign,\n baseline: textBaseline\n });\n const dealWithIconComputeVar = {\n addedHierarchyOffset: 0\n }; //为了只增加一次indent的缩进值,如果有两个icon都dealWithIcon的话\n contentLeftIcons.forEach(icon => {\n const iconMark = dealWithIcon(\n icon,\n undefined,\n cellGroup.col,\n cellGroup.row,\n range,\n table,\n dealWithIconComputeVar\n );\n iconMark.role = 'icon-content-left';\n iconMark.name = icon.name;\n cellContent.addLeftOccupyingIcon(iconMark);\n });\n contentRightIcons.forEach(icon => {\n const iconMark = dealWithIcon(\n icon,\n undefined,\n cellGroup.col,\n cellGroup.row,\n range,\n table,\n dealWithIconComputeVar\n );\n iconMark.role = 'icon-content-right';\n iconMark.name = icon.name;\n cellContent.addRightOccupyingIcon(iconMark);\n });\n cellContent.addContent(textMark);\n\n cellGroup.appendChild(cellContent);\n cellContent.layout();\n\n contentWidth = cellContent.AABBBounds.width();\n contentHeight = cellContent.AABBBounds.height();\n } else {\n // 没有content icon,cellGroup: CellIcons + wrapText/richtext\n // cellGroup.appendChild(textMark);\n if (cellGroup.firstChild) {\n cellGroup.insertBefore(textMark, cellGroup.firstChild);\n } else {\n cellGroup.appendChild(textMark);\n }\n contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n }\n }\n\n // 内容添加后单元格的宽高\n const width = autoColWidth\n ? leftIconWidth + contentWidth + rightIconWidth // + padding[1] + padding[3]\n : cellWidth - (padding[1] + padding[3]);\n // const height = autoRowHeight\n // ? Math.max(leftIconHeight, contentHeight, rightIconHeight) // + padding[0] + padding[2]\n // : cellHeight - (padding[0] + padding[2]);\n const height = cellHeight - (padding[0] + padding[2]);\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth + padding[3]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth + padding[3] + padding[1]);\n } else if (child.name === 'content' || child.name === 'text') {\n if (textAlign === 'center' && child.type !== 'richtext') {\n child.setAttribute('x', padding[3] + leftIconWidth + (width - leftIconWidth - rightIconWidth) / 2);\n } else if (textAlign === 'right' && child.type !== 'richtext') {\n child.setAttribute('x', padding[3] + width - rightIconWidth);\n } else {\n child.setAttribute('x', padding[3] + leftIconWidth);\n }\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + height - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n // 更新cell Group宽高\n cellGroup.setAttributes({\n width: width + padding[1] + padding[3],\n height: height + padding[0] + padding[2]\n } as any);\n}\n\n/**\n * @description: icon option生成icon mark\n * @param {ColumnIconOption} icon\n * @return {*}\n */\nexport function dealWithIcon(\n icon: ColumnIconOption,\n mark?: Icon,\n col?: number,\n row?: number,\n range?: CellRange,\n table?: BaseTableAPI,\n dealWithIconComputeVar?: {\n addedHierarchyOffset: number;\n }\n): Icon {\n // positionType在外部处理\n const iconAttribute = {} as any;\n\n // 图片内容\n if (icon.type === 'image') {\n if (icon.isGif) {\n iconAttribute.gif = icon.src;\n iconAttribute.image = icon.src;\n } else {\n iconAttribute.image = icon.src;\n }\n } else if (icon.type === 'svg' || 'svg' in icon) {\n iconAttribute.image = icon.svg;\n // } else if (icon.type === 'path') {\n // // to do: 暂不支持\n // } else if (icon.type === 'font') {\n // // to do: 暂不支持\n }\n\n // name\n // iconAttribute.name = icon.name;\n iconAttribute.width = icon.width;\n iconAttribute.height = icon.height;\n iconAttribute.visibleTime = icon.visibleTime ?? 'always';\n iconAttribute.funcType = icon.funcType;\n iconAttribute.interactive = icon.interactive;\n iconAttribute.isGif = (icon as any).isGif;\n\n let hierarchyOffset = 0;\n if (\n (!dealWithIconComputeVar || dealWithIconComputeVar?.addedHierarchyOffset === 0) &&\n isNumber(col) &&\n isNumber(row) &&\n table &&\n (icon.funcType === IconFuncTypeEnum.collapse ||\n icon.funcType === IconFuncTypeEnum.expand ||\n icon.positionType === IconPosition.contentLeft ||\n icon.positionType === IconPosition.contentRight)\n ) {\n // compute hierarchy offset\n // hierarchyOffset = getHierarchyOffset(col, row, table);\n hierarchyOffset = range\n ? getHierarchyOffset(range.start.col, range.start.row, table)\n : getHierarchyOffset(col, row, table);\n if (dealWithIconComputeVar) {\n dealWithIconComputeVar.addedHierarchyOffset = 1;\n }\n }\n\n iconAttribute.marginLeft = (icon.marginLeft ?? 0) + hierarchyOffset;\n iconAttribute.marginRight = icon.marginRight ?? 0;\n\n if (icon.interactive === false) {\n iconAttribute.pickable = false;\n }\n\n if (icon.hover) {\n iconAttribute.backgroundWidth = icon.hover.width ?? icon.width;\n iconAttribute.backgroundHeight = icon.hover.width ?? icon.width;\n iconAttribute.backgroundColor = icon.hover.bgColor ?? 'rgba(22,44,66,0.2)';\n iconAttribute.hoverImage = icon.hover.image;\n }\n\n if (icon.cursor) {\n iconAttribute.cursor = icon.cursor;\n }\n\n if ('shape' in icon && icon.shape === 'circle') {\n iconAttribute.shape = icon.shape;\n }\n\n if (mark) {\n mark.setAttributes(iconAttribute);\n mark.loadImage(iconAttribute.image);\n mark.tooltip = icon.tooltip;\n mark.name = icon.name;\n return mark;\n }\n // funcType, cursor, tooltip, hover在事件响应阶段处理\n const iconMark = new Icon(iconAttribute);\n iconMark.tooltip = icon.tooltip;\n iconMark.name = icon.name;\n\n return iconMark;\n}\n\n/**\n * @description: icon option生成richtext icon config\n * @param {ColumnIconOption} icon\n * @return {*}\n */\nexport function dealWithRichTextIcon(icon: ColumnIconOption) {\n // positionType在外部处理\n const config = {} as any;\n\n // 图片内容\n if (icon.type === 'image') {\n config.image = icon.src;\n } else if (icon.type === 'svg' || 'svg' in icon) {\n config.image = icon.svg;\n // } else if (icon.type === 'path') {\n // // to do: 暂不支持\n // } else if (icon.type === 'font') {\n // // to do: 暂不支持\n }\n\n // name\n config.visibleTime = icon.visibleTime ?? 'always';\n config.funcType = icon.funcType;\n config.id = icon.name;\n config.width = icon.width;\n config.height = icon.height;\n\n if (icon.marginRight || icon.marginLeft) {\n config.margin = [0, icon.marginRight ?? 0, 0, icon.marginLeft ?? 0];\n }\n\n if (icon.hover) {\n config.backgroundWidth = icon.hover.width ?? icon.width;\n config.backgroundHeight = icon.hover.height ?? icon.height;\n config.backgroundShowMode = 'hover';\n config.hoverImage = icon.hover.image;\n config.backgroundStroke = false;\n config.backgroundFill = icon.hover.bgColor ?? 'rgba(22,44,66,0.2)';\n }\n\n if (icon.cursor) {\n config.cursor = icon.cursor;\n }\n\n config.tooltip = icon.tooltip;\n\n // funcType, cursor, tooltip在事件响应阶段处理\n return config;\n}\n\n/**\n * @description: 更新单元格内容宽度\n * @param {Group} cellGroup\n * @param {number} distWidth\n * @param {boolean} autoRowHeight\n * @return {*}\n */\nexport function updateCellContentWidth(\n cellGroup: Group,\n distWidth: number,\n cellHeight: number,\n detaX: number,\n autoRowHeight: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n scene: Scenegraph\n): boolean {\n if (isValidNumber(cellGroup.contentWidth)) {\n detaX = distWidth - (cellGroup.contentWidth ?? cellGroup.attribute.width);\n }\n let leftIconWidth = 0;\n let leftIconHeight = 0;\n let rightIconWidth = 0;\n let rightIconHeight = 0;\n // let hasIcon = false;\n cellGroup.forEachChildren((iconMark: Icon) => {\n if (iconMark.role === 'icon-left') {\n leftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n } else if (iconMark.role === 'icon-right') {\n rightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n }\n });\n\n // 记录原始内容高度\n let oldTextHeight;\n const textMark = cellGroup.getChildByName('text');\n const cellContent = cellGroup.getChildByName('content') as CellContent;\n let contentHeight: number;\n if (textMark instanceof Text) {\n oldTextHeight = textMark.AABBBounds.height();\n textMark.setAttribute(\n 'maxLineWidth',\n distWidth -\n leftIconWidth -\n rightIconWidth -\n (padding[1] + padding[3]) -\n (textMark.attribute.dx ?? 0) -\n (scene.table.theme._contentOffset ?? 0)\n );\n // contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n } else if (textMark instanceof RichText) {\n oldTextHeight = textMark.AABBBounds.height();\n textMark.setAttribute('width', distWidth - leftIconWidth - rightIconWidth - (padding[1] + padding[3]));\n // contentWidth = textMark.AABBBounds.width();\n contentHeight = textMark.AABBBounds.height();\n } else if (cellContent) {\n oldTextHeight = cellContent.AABBBounds.height();\n cellContent.updateWidth(distWidth - leftIconWidth - rightIconWidth - (padding[1] + padding[3]));\n // contentWidth = cellContent.AABBBounds.width();\n contentHeight = cellContent.AABBBounds.height();\n }\n\n const oldCellHeight = Math.round(Math.max(leftIconHeight, rightIconHeight, oldTextHeight) + padding[0] + padding[2]);\n\n // 更新x方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n // do nothing\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + detaX);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + detaX);\n } else if (child.name === 'content' || (child.name === 'text' && child.type !== 'richtext')) {\n const childTextAlign = child.attribute.textAlign ?? textAlign;\n if (childTextAlign === 'center') {\n child.setAttribute(\n 'x',\n padding[3] + leftIconWidth + (distWidth - (padding[1] + padding[3]) - leftIconWidth - rightIconWidth) / 2\n );\n } else if (childTextAlign === 'right') {\n child.setAttribute('x', padding[3] + distWidth - (padding[1] + padding[3]) - rightIconWidth);\n } else {\n // left: do nothing\n }\n } else if (child.name === 'mark') {\n child.setAttribute('x', cellGroup.attribute.width);\n }\n });\n\n // 如果autoRowHeight && 高度改变 更新y方向位置\n if (autoRowHeight) {\n let newHeight = Math.max(leftIconHeight, contentHeight, rightIconHeight); // + padding[0] + padding[2]\n\n if (isCellHeightUpdate(scene, cellGroup, Math.round(newHeight + padding[0] + padding[2]), oldCellHeight)) {\n // cellGroup.setAttribute('height', newHeight + padding[0] + padding[2]);\n return true;\n }\n\n newHeight = (cellGroup.contentHeight ?? cellHeight) - (padding[0] + padding[2]);\n\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n } else if (textBaseline === 'middle' || textBaseline === 'bottom') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n return;\n }\n if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', (cellHeight - padding[2] + padding[0] - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', cellHeight - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n }\n return false;\n}\n\n/**\n * @description: 更新单元格内容宽度\n */\nexport function updateCellContentHeight(\n cellGroup: Group,\n distHeight: number,\n detaY: number,\n autoRowHeight: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI\n) {\n const newHeight = distHeight - Math.floor(padding[0] + padding[2]);\n\n const textMark = cellGroup.getChildByName('text');\n\n if (textMark instanceof Text && !autoRowHeight) {\n textMark.setAttributes({\n heightLimit: table.options.customConfig?.limitContentHeight === false ? -1 : newHeight\n } as any);\n } else if (textMark instanceof RichText && !autoRowHeight) {\n textMark.setAttributes({\n height: newHeight\n });\n } else if (cellGroup.getChildByName('content')) {\n const cellContent = cellGroup.getChildByName('content') as CellContent;\n cellContent.updateHeight(newHeight);\n }\n\n // 更新y方向位置\n cellGroup.forEachChildren((child: any) => {\n child.setAttribute('dy', 0);\n if (child.type === 'rect' || child.type === 'chart' || child.name === CUSTOM_CONTAINER_NAME) {\n // do nothing\n } else if (child.name === 'mark') {\n child.setAttribute('y', 0);\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n}\n\n/**\n * @description: 自适应行高模式下,判断当前单元格是否需要更新行高\n * @param {Scenegraph} scene\n * @param {Group} cellGroup\n * @param {number} newHeight\n * @param {number} oldHeight\n * @return {*}\n */\nfunction isCellHeightUpdate(scene: Scenegraph, cellGroup: Group, newHeight: number, oldHeight: number): boolean {\n const table = scene.table;\n const mergeInfo = getCellMergeInfo(table, cellGroup.col, cellGroup.row);\n\n // let rowHeight: number = 0;\n if (mergeInfo && mergeInfo.end.row - mergeInfo.start.row) {\n oldHeight = oldHeight / (mergeInfo.end.row - mergeInfo.start.row + 1);\n newHeight = newHeight / (mergeInfo.end.row - mergeInfo.start.row + 1);\n for (let rowIndex = mergeInfo.start.row; rowIndex <= mergeInfo.end.row; rowIndex++) {\n const rowHeight = table.getRowHeight(rowIndex);\n\n if (rowHeight === oldHeight && newHeight !== rowHeight) {\n // 当前行的自适应行高,是由本单元格撑起;如果当前单元格高度发生变化,则更新行高\n return true;\n } else if (newHeight > rowHeight) {\n // 如果当前单元格高度超过目前所在行的行高,则更新行高\n return true;\n }\n }\n } else {\n const rowHeight = table.getRowHeight(cellGroup.row);\n\n if (rowHeight === oldHeight && newHeight !== rowHeight) {\n // 当前行的自适应行高,是由本单元格撑起;如果当前单元格高度发生变化,则更新行高\n return true;\n } else if (newHeight > rowHeight) {\n // 如果当前单元格高度超过目前所在行的行高,则更新行高\n return true;\n }\n }\n\n return false;\n}\n\nexport function dealWithIconLayout(\n icons: ColumnIconOption[],\n cellGroup: Group,\n range: CellRange | undefined,\n table: BaseTableAPI\n) {\n const leftIcons: ColumnIconOption[] = [];\n const rightIcons: ColumnIconOption[] = [];\n const contentLeftIcons: ColumnIconOption[] = [];\n const contentRightIcons: ColumnIconOption[] = [];\n const inlineFrontIcons: ColumnIconOption[] = [];\n const inlineEndIcons: ColumnIconOption[] = [];\n const absoluteLeftIcons: ColumnIconOption[] = [];\n const absoluteRightIcons: ColumnIconOption[] = [];\n\n let leftIconWidth = 0;\n let leftIconHeight = 0;\n let rightIconWidth = 0;\n let rightIconHeight = 0;\n let absoluteLeftIconWidth = 0;\n let absoluteRightIconWidth = 0;\n\n // icon分类\n icons.forEach(icon => {\n switch (icon.positionType) {\n case IconPosition.left:\n leftIcons.push(icon);\n break;\n case IconPosition.right:\n rightIcons.push(icon);\n break;\n case IconPosition.contentLeft:\n contentLeftIcons.push(icon);\n break;\n case IconPosition.contentRight:\n contentRightIcons.push(icon);\n break;\n // case IconPosition.absoluteLeft:\n // absoluteLeftIcons.push(icon);\n // break;\n case IconPosition.absoluteRight:\n absoluteRightIcons.push(icon);\n break;\n case IconPosition.inlineFront:\n inlineFrontIcons.push(icon);\n break;\n case IconPosition.inlineEnd:\n inlineEndIcons.push(icon);\n break;\n }\n });\n\n // 添加非cell icon & absolute icon\n leftIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-left';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', leftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n leftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n leftIconHeight = Math.max(leftIconHeight, iconMark.AABBBounds.height());\n cellGroup.appendChild(iconMark);\n });\n\n rightIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-right';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', rightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n rightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n rightIconHeight = Math.max(rightIconHeight, iconMark.AABBBounds.height());\n cellGroup.appendChild(iconMark);\n });\n\n absoluteLeftIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-absolute-left';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', absoluteLeftIconWidth + (iconMark.attribute.marginLeft ?? 0));\n absoluteLeftIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n cellGroup.appendChild(iconMark);\n });\n\n absoluteRightIcons.forEach(icon => {\n const iconMark = dealWithIcon(icon, undefined, cellGroup.col, cellGroup.row, range, table);\n iconMark.role = 'icon-absolute-right';\n iconMark.name = icon.name;\n iconMark.setAttribute('x', absoluteRightIconWidth + (iconMark.attribute.marginLeft ?? 0));\n absoluteRightIconWidth +=\n iconMark.AABBBounds.width() + (iconMark.attribute.marginLeft ?? 0) + (iconMark.attribute.marginRight ?? 0);\n cellGroup.appendChild(iconMark);\n });\n\n return {\n leftIcons,\n rightIcons,\n contentLeftIcons,\n contentRightIcons,\n inlineFrontIcons,\n inlineEndIcons,\n absoluteLeftIcons,\n absoluteRightIcons,\n leftIconWidth,\n leftIconHeight,\n rightIconWidth,\n rightIconHeight,\n absoluteLeftIconWidth,\n absoluteRightIconWidth\n };\n}\n\nfunction onBeforeAttributeUpdate(val: Record, attribute: any) {\n if (val.hasOwnProperty('hoverIconId')) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.skipMergeUpdate) {\n return;\n }\n\n const cellGroup = getTargetCell(graphic) as Group;\n if (!cellGroup || !cellGroup.stage) {\n return;\n }\n const table = ((cellGroup as any).stage as any).table as BaseTableAPI;\n graphic.skipAttributeUpdate = true;\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = cellGroup;\n if (\n isValid(mergeStartCol) &&\n isValid(mergeEndCol) &&\n isValid(mergeStartRow) &&\n isValid(mergeEndRow) &&\n (mergeStartCol !== mergeEndCol || mergeStartRow !== mergeEndRow)\n ) {\n for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n if (col === cellGroup.col && row === cellGroup.row) {\n // update icon state\n if (val.hoverIconId !== graphic.attribute.hoverIconId) {\n const icon = graphic._frameCache.icons.get(val.hoverIconId);\n graphic.updateHoverIconState(icon);\n }\n continue;\n }\n // const cell = table.scenegraph.getCell(col, row);\n const cell = table.scenegraph.highPerformanceGetCell(col, row);\n if (cell.role === 'cell') {\n const target = cell.getChildByName(graphic.name, true);\n if (!target || target.skipAttributeUpdate) {\n continue;\n }\n if (val.hoverIconId !== target.attribute.hoverIconId) {\n target.setAttribute('hoverIconId', val.hoverIconId);\n cell.addUpdateBoundTag();\n }\n }\n }\n }\n graphic.skipAttributeUpdate = undefined;\n }\n }\n}\n","/* eslint-disable no-undef */\nimport type { Cursor, IImage, Image, IThemeSpec } from './../../../vrender';\nimport { createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { Group } from '../../graphic/group';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nimport { calcStartPosition } from '../../utils/cell-pos';\nimport type { Scenegraph } from '../../scenegraph';\nimport { getProp, getFunctionalProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport { getQuadProps } from '../../utils/padding';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { CellRange } from '../../../ts-types';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nexport function createImageCellGroup(\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n keepAspectRatio: boolean,\n imageAutoSizing: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n // const margin = getProp('padding', headerStyle, col, row, table);\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n let cellGroup: Group;\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n\n let cellIcons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n cellIcons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(cellIcons) && cellIcons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n cellIcons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n (cellGroup as any)._cellLeftIconWidth = cellLeftIconWidth;\n (cellGroup as any)._cellRightIconWidth = cellRightIconWidth;\n }\n\n // image\n const value = table.getCellValue(col, row);\n const image: IImage = createImage({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3] - iconWidth,\n height: height - padding[0] - padding[2],\n image: value, //?? (regedIcons.damage_pic as any).svg,\n cursor: 'pointer' as Cursor\n });\n image.name = 'image';\n image.keepAspectRatio = keepAspectRatio;\n image.textAlign = textAlign;\n image.textBaseline = textBaseline;\n if (keepAspectRatio || imageAutoSizing) {\n if (\n image.resources &&\n image.resources.has(image.attribute.image) &&\n image.resources.get(image.attribute.image).state === 'success'\n ) {\n setTimeout(() => {\n updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing,\n keepAspectRatio,\n padding,\n textAlign,\n textBaseline,\n image,\n cellGroup,\n table\n );\n }, 0);\n } else {\n image.successCallback = () => {\n updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing,\n keepAspectRatio,\n padding,\n textAlign,\n textBaseline,\n image,\n cellGroup,\n table\n );\n table.scenegraph.updateNextFrame();\n };\n }\n } else {\n if (\n image.resources &&\n image.resources.has(image.attribute.image) &&\n image.resources.get(image.attribute.image).state === 'success'\n ) {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, table);\n } else {\n image.successCallback = () => {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, table);\n };\n }\n }\n (image as any).failCallback = () => {\n const regedIcons = icons.get();\n // image.setAttribute('image', (regedIcons.damage_pic as any).svg);\n (image as any).image = (regedIcons.damage_pic as any).svg;\n };\n cellGroup.appendChild(image);\n\n return cellGroup;\n}\n\nexport type CreateImageCellGroup = typeof createImageCellGroup;\n\n/**\n * 调整某个图片资源所在行列的行高列宽 之后重绘\n * @param col\n * @param row\n * @param img\n * @param table\n * @returns 行高或者列宽是否进行了调整\n */\nexport function _adjustWidthHeight(\n col: number,\n row: number,\n // img: HTMLImageElement,\n width: number,\n height: number,\n scene: Scenegraph,\n padding: [number, number, number, number],\n cellGroup: Group\n): boolean {\n // const { width, height } = img as any;\n // const currentContext = context.toCurrentContext();\n\n let needInvalidate = false;\n let targetWidth: number = null;\n let targetHeight: number = null;\n // const cellGroup = scene.getCell(col, row, true);\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, scene.table);\n\n if (cellWidth < width + padding[1] + padding[3]) {\n targetWidth = width + padding[1] + padding[3];\n needInvalidate = true;\n }\n if (cellHeight < height + padding[2] + padding[0]) {\n targetHeight = height + padding[2] + padding[0];\n needInvalidate = true;\n }\n if (needInvalidate) {\n if (typeof targetWidth === 'number') {\n // table.setColWidth(col, targetWidth, true);\n if (isMerge) {\n for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {\n scene.setColWidth(col, targetWidth / (cellGroup.mergeEndCol - cellGroup.mergeStartCol + 1));\n }\n } else {\n scene.setColWidth(col, targetWidth);\n }\n }\n if (typeof targetHeight === 'number') {\n // table.setRowHeight(row, targetHeight, true);\n if (isMerge) {\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n scene.setRowHeight(row, targetHeight / (cellGroup.mergeEndRow - cellGroup.mergeStartRow + 1));\n }\n } else {\n scene.setRowHeight(row, targetHeight);\n }\n }\n // table.updateCanvasScroll();\n // // table.throttleInvalidate(); // 这里会造成每一张图加载后就重绘 造成多次绘制问题!节流绘制\n // table.invalidate(); //节流绘制改回及时绘制 节流绘制在图片加载过程中的效果不太好\n\n scene.component.updateScrollBar();\n // scene.updateNextFrame();\n return true;\n }\n return false;\n}\n\nexport function updateImageCellContentWhileResize(\n cellGroup: Group,\n col: number,\n row: number,\n deltaX: number,\n deltaY: number,\n table: BaseTableAPI\n) {\n const image = cellGroup.getChildByName('image') as Image;\n if (!image) {\n return;\n }\n const originImage =\n (typeof image.attribute.image !== 'string' && image.attribute.image) ||\n image.resources?.get(image.attribute.image as string).data;\n\n if (!originImage) {\n return;\n }\n\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const textAlign = getProp('textAlign', headerStyle, col, row, table) ?? 'left';\n const textBaseline = getProp('textBaseline', headerStyle, col, row, table) ?? 'middle';\n let padding: [number, number, number, number];\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else {\n padding = getQuadProps(getProp('padding', headerStyle, col, row, table)) ?? [0, 0, 0, 0];\n }\n\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n const colStart = cellGroup.mergeStartCol ?? cellGroup.col;\n const rowStart = cellGroup.mergeStartRow ?? cellGroup.row;\n const colEnd = cellGroup.mergeEndCol ?? cellGroup.col;\n const rowEnd = cellGroup.mergeEndCol ?? cellGroup.row;\n\n const leftIconWidth = (cellGroup as any)._cellLeftIconWidth ?? 0;\n const rightIconWidth = (cellGroup as any)._cellRightIconWidth ?? 0;\n\n if ((image as any).keepAspectRatio) {\n const { width: imageWidth, height: imageHeight } = calcKeepAspectRatioSize(\n originImage.width || (originImage as any).videoWidth,\n originImage.height || (originImage as any).videoHeight,\n // cellGroup.attribute.width - (padding[1] + padding[3]),\n // cellGroup.attribute.height - (padding[0] + padding[2])\n cellWidth - (padding[1] + padding[3]),\n cellHeight - (padding[0] + padding[2])\n );\n\n const pos = calcStartPosition(\n 0,\n 0,\n // cellGroup.attribute.width,\n // cellGroup.attribute.height,\n cellWidth,\n cellHeight,\n imageWidth,\n imageHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const image = cellGroup.getChildByName('image') as Image;\n image?.setAttributes({\n x: pos.x,\n y: pos.y,\n width: imageWidth,\n height: imageHeight\n });\n }\n }\n } else {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const image = cellGroup.getChildByName('image') as Image;\n image?.setAttributes({\n x: leftIconWidth + padding[3],\n y: padding[0],\n // width: cellGroup.attribute.width - padding[1] - padding[3],\n // height: cellGroup.attribute.height - padding[0] - padding[2]\n width: cellWidth - padding[1] - padding[3] - rightIconWidth - leftIconWidth,\n height: cellHeight - padding[0] - padding[2]\n });\n }\n }\n }\n\n // update video play icon\n const playIcon = cellGroup.getChildByName('play-icon');\n if (playIcon) {\n const left = 0;\n const top = 0;\n // const width = cellGroup.attribute.width;\n // const height = cellGroup.attribute.height;\n const { width, height } = getCellRange(cellGroup, table);\n const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n const anchorX =\n left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n const anchorY =\n top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const playIcon = cellGroup.getChildByName('play-icon') as Image;\n playIcon.setAttributes({\n x: anchorX - iconSize / 2,\n y: anchorY - iconSize / 2,\n width: iconSize,\n height: iconSize\n });\n }\n }\n }\n\n // 更新x方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n // do nothing\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + deltaX);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + deltaX);\n }\n });\n\n // 更新y方向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.type !== 'rect' && (!child.role || !child.role.startsWith('icon'))) {\n // do nothing\n } else if (textBaseline === 'middle') {\n child.setAttribute('y', padding[0] + (cellHeight - padding[0] - padding[2] - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', padding[0] + cellHeight - padding[0] - padding[2] - child.AABBBounds.height());\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n}\n\nexport function getCellRange(cellGroup: Group, table: BaseTableAPI) {\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n return {\n width: table.getColsWidth(cellGroup.mergeStartCol, cellGroup.mergeEndCol),\n height: table.getRowsHeight(cellGroup.mergeStartRow, cellGroup.mergeEndRow),\n isMerge: true\n };\n }\n return {\n width: cellGroup.attribute.width,\n height: cellGroup.attribute.height,\n isMerge: false\n };\n}\n\nexport function updateImageDxDy(\n startCol: number,\n endCol: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI\n) {\n for (let col = startCol; col <= endCol; col++) {\n for (let row = startRow; row <= endRow; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n if (cellGroup) {\n const image = cellGroup.getChildByName('image');\n if (image) {\n image.setAttributes({\n dx: -table.getColsWidth(cellGroup.mergeStartCol, col - 1),\n dy: -table.getRowsHeight(cellGroup.mergeStartRow, row - 1)\n });\n }\n const playIcon = cellGroup.getChildByName('play-icon');\n if (playIcon) {\n playIcon.setAttributes({\n dx: -table.getColsWidth(cellGroup.mergeStartCol, col - 1),\n dy: -table.getRowsHeight(cellGroup.mergeStartRow, row - 1)\n });\n }\n }\n }\n }\n}\n\nfunction updateAutoSizingAndKeepAspectRatio(\n imageAutoSizing: boolean,\n keepAspectRatio: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n image: IImage,\n cellGroup: Group,\n table: BaseTableAPI\n) {\n const originImage = image.resources.get(image.attribute.image as string).data;\n const { col, row } = cellGroup;\n\n if (imageAutoSizing && !isDamagePic(image)) {\n _adjustWidthHeight(\n col,\n row,\n (originImage as HTMLImageElement).width,\n (originImage as HTMLImageElement).height,\n table.scenegraph,\n padding,\n cellGroup\n );\n }\n if (keepAspectRatio || isDamagePic(image)) {\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n\n const { width: imageWidth, height: imageHeight } = calcKeepAspectRatioSize(\n originImage.width,\n originImage.height,\n // cellGroup.attribute.width - padding[1] - padding[3],\n // cellGroup.attribute.height - padding[0] - padding[2]\n cellWidth - padding[1] - padding[3],\n cellHeight - padding[0] - padding[2]\n );\n\n // const left = 0;\n // const top = 0;\n const pos = calcStartPosition(\n 0,\n 0,\n // cellGroup.attribute.width,\n // cellGroup.attribute.height,\n cellWidth,\n cellHeight,\n imageWidth,\n imageHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n image.setAttributes({\n x: pos.x,\n y: pos.y,\n width: imageWidth,\n height: imageHeight\n // dx: isMerge ? -table.getColsWidth(cellGroup.mergeStartCol, col - 1) : 0,\n // dy: isMerge ? -table.getRowsHeight(cellGroup.mergeStartRow, row - 1) : 0\n });\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n }\n}\n\nfunction isDamagePic(image: IImage) {\n const regedIcons = icons.get();\n return image.attribute.image === (regedIcons.damage_pic as any).svg;\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealPromiseData(dataPromise: Promise, tabel: BaseTableAPI, callback: () => void) {\n dataPromise\n .then(() => {\n callback();\n tabel.scenegraph.updateNextFrame();\n })\n .catch((err: Error) => {\n console.error(err);\n });\n}\n","import type { Group, Rect } from './../vrender';\nimport { isValid } from '@visactor/vutils';\n\nexport function onBeforeAttributeUpdateForInvertHighlight(val: Record, attribute: any) {\n // @ts-ignore\n const graphic = this as any;\n if (graphic.shadowRoot && graphic.shadowRoot.childrenCount && (isValid(val.width) || isValid(val.height))) {\n const shadowRect = (graphic.shadowRoot as Group).findChildrenByName('shadow-rect')[0] as Rect;\n if (shadowRect) {\n shadowRect.setAttributes({\n width: val.width ?? shadowRect.attribute.width,\n height: val.height ?? shadowRect.attribute.height\n });\n }\n }\n}\n","import type { Cursor, IGraphic, IThemeSpec, Rect, Group as VGroup } from './../../vrender';\nimport type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport { regUrl } from '../../tools/global';\nimport type {\n CellRange,\n ChartColumnDefine,\n CheckboxColumnDefine,\n ColumnDefine,\n ColumnTypeOption,\n ImageColumnDefine,\n ProgressbarColumnDefine,\n IRowSeriesNumber,\n TextColumnDefine,\n RadioColumnDefine,\n ListTableConstructorOptions\n} from '../../ts-types';\nimport { dealWithCustom } from '../component/custom';\nimport type { Group } from '../graphic/group';\nimport { getProp } from '../utils/get-prop';\nimport type { CreateChartCellGroup } from './cell-type/chart-cell';\nimport type { CreateImageCellGroup } from './cell-type/image-cell';\nimport type { CreateProgressBarCell } from './cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from './cell-type/spark-line-cell';\nimport type { CreateTextCellGroup } from './cell-type/text-cell';\nimport type { CreateVideoCellGroup } from './cell-type/video-cell';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { getCellCornerRadius, getStyleTheme } from '../../core/tableHelper';\nimport { isPromise } from '../../tools/helper';\nimport { dealPromiseData } from '../utils/deal-promise-data';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport type { CreateCheckboxCellGroup } from './cell-type/checkbox-cell';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentHeight, updateCellContentWidth } from '../utils/text-icon-layout';\nimport { isArray, isNumber, isValid } from '@visactor/vutils';\nimport { breakString } from '../utils/break-string';\nimport type { CreateRadioCellGroup } from './cell-type/radio-cell';\nimport { onBeforeAttributeUpdateForInvertHighlight } from '../../plugins/invert-highlight';\nimport { getCellBorderStrokeWidth } from '../utils/cell-border-stroke-width';\n\nexport function createCell(\n type: ColumnTypeOption,\n value: string,\n define: ColumnDefine,\n table: BaseTableAPI,\n col: number,\n row: number,\n colWidth: number,\n cellWidth: number,\n cellHeight: number,\n columnGroup: Group,\n y: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n customResult?: {\n elementsGroup?: VGroup;\n renderDefault: boolean;\n }\n): Group {\n let isAsync = false;\n let cellGroup: Group;\n if (isPromise(value)) {\n if (table.scenegraph.highPerformanceGetCell(col, row).role !== 'cell') {\n // avoid nouse async create cell\n return cellGroup;\n }\n value = table.getCellValue(col, row);\n isAsync = true;\n }\n // let bgColorFunc: Function;\n // // 判断是否有mapping 遍历dataset中mappingRules\n // if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n // (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n // (mappingRule: MappingRule, i: number) => {\n // if (\n // mappingRule.bgColor &&\n // (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n // mappingRule.bgColor.indicatorKey\n // ) {\n // bgColorFunc = mappingRule.bgColor.mapping;\n // }\n // }\n // );\n // }\n\n // customMerge&customLayout cell as text cell\n if (type === 'text' || type === 'link' || customResult) {\n if (type === 'link') {\n //如果是超链接 颜色按照linkColor绘制 TODO:放到方法_getCellStyle中\n // const columnDefine = table.getHeaderDefine(col, row);\n const cellValue = value;\n const headerStyle = table._getCellStyle(col, row);\n\n if (\n type === 'link' &&\n (('templateLink' in define && define.templateLink) ||\n !('linkDetect' in define && define.linkDetect) ||\n regUrl.test(cellValue))\n ) {\n if (cellTheme) {\n cellTheme.text.fill = getProp('linkColor', headerStyle, col, row, table);\n (cellTheme as any).group.cursor = 'pointer';\n } else {\n cellTheme = {\n text: {\n fill: getProp('linkColor', headerStyle, col, row, table)\n },\n group: {\n cursor: 'pointer' as Cursor\n }\n };\n }\n }\n }\n // 判断是否有mapping 遍历dataset中mappingRules 但这里还需要根据fieldName来判断\n // if (bgColorFunc) {\n // const cellValue = table.getCellOriginValue(col, row);\n // const bgColor = bgColorFunc(table, cellValue);\n // if (bgColor) {\n // if (cellTheme) {\n // cellTheme.group.fill = bgColor;\n // } else {\n // cellTheme = {\n // group: {\n // fill: bgColor\n // }\n // };\n // }\n // }\n // }\n\n let customElementsGroup;\n let renderDefault = true;\n if (customResult) {\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n } else {\n let customRender;\n let customLayout;\n const cellLocation = table.getCellLocation(col, row);\n if (cellLocation !== 'body') {\n customRender = define?.headerCustomRender;\n customLayout = define?.headerCustomLayout;\n } else {\n customRender = define?.customRender || table.customRender;\n customLayout = define?.customLayout;\n }\n if (customLayout || customRender) {\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n cellWidth,\n cellHeight,\n false,\n table.isAutoRowHeight(row),\n padding,\n range,\n table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n }\n }\n\n const createTextCellGroup = Factory.getFunction('createTextCellGroup') as CreateTextCellGroup;\n cellGroup = createTextCellGroup(\n table,\n value,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n customElementsGroup,\n renderDefault,\n cellTheme,\n range,\n isAsync\n );\n\n const axisConfig = table.internalProps.layoutMap.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n table\n );\n cellGroup.clear();\n cellGroup.appendChild(axis.component);\n axis.overlap();\n } else if (table.internalProps.layoutMap.isEmpty(col, row)) {\n cellGroup.setAttributes({\n fill: false,\n stroke: false\n });\n cellGroup.clear();\n } else if (table.internalProps.layoutMap.isAxisCell(col, row)) {\n cellGroup.clear();\n }\n } else if (type === 'image') {\n // 创建图片单元格\n const createImageCellGroup = Factory.getFunction('createImageCellGroup') as CreateImageCellGroup;\n cellGroup = createImageCellGroup(\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n (define as ImageColumnDefine).keepAspectRatio,\n (define as ImageColumnDefine).imageAutoSizing,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n range,\n isAsync\n );\n } else if (type === 'video') {\n // 创建视频单元格\n const createVideoCellGroup = Factory.getFunction('createVideoCellGroup') as CreateVideoCellGroup;\n cellGroup = createVideoCellGroup(\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n (define as ImageColumnDefine).keepAspectRatio,\n (define as ImageColumnDefine).imageAutoSizing,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n range,\n isAsync\n );\n } else if (type === 'chart') {\n const chartInstance = table.internalProps.layoutMap.getChartInstance(col, row);\n const createChartCellGroup = Factory.getFunction('createChartCellGroup') as CreateChartCellGroup;\n cellGroup = createChartCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n padding,\n value,\n (define as ChartColumnDefine).chartModule,\n table.internalProps.layoutMap.getChartSpec(col, row),\n chartInstance,\n table.internalProps.layoutMap.getChartDataId(col, row) ?? 'data',\n table,\n cellTheme,\n table.internalProps.layoutMap.isShareChartSpec(col, row),\n isAsync,\n table.internalProps.layoutMap.isNoChartDataRenderNothing(col, row)\n );\n } else if (type === 'progressbar') {\n const style = table._getCellStyle(col, row) as ProgressBarStyle;\n const dataValue = table.getCellOriginValue(col, row);\n // 创建基础文字单元格\n const createTextCellGroup = Factory.getFunction('createTextCellGroup') as CreateTextCellGroup;\n cellGroup = createTextCellGroup(\n table,\n value,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n false,\n null,\n true,\n cellTheme,\n range,\n isAsync\n );\n\n // 创建bar group\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const progressBarGroup = createProgressBarCell(\n define as ProgressbarColumnDefine,\n style,\n colWidth,\n value,\n dataValue,\n col,\n row,\n padding,\n table,\n range\n );\n // 进度图插入到文字前,绘制在文字下\n if (cellGroup.firstChild) {\n cellGroup.insertBefore(progressBarGroup, cellGroup.firstChild);\n } else {\n cellGroup.appendChild(progressBarGroup);\n }\n } else if (type === 'sparkline') {\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n cellGroup = createSparkLineCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n cellWidth,\n cellHeight,\n padding,\n table,\n cellTheme,\n isAsync\n );\n } else if (type === 'checkbox') {\n const createCheckboxCellGroup = Factory.getFunction('createCheckboxCellGroup') as CreateCheckboxCellGroup;\n cellGroup = createCheckboxCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n table,\n cellTheme,\n define as CheckboxColumnDefine,\n range,\n isAsync\n );\n } else if (type === 'radio') {\n const createRadioCellGroup = Factory.getFunction('createRadioCellGroup') as CreateRadioCellGroup;\n cellGroup = createRadioCellGroup(\n null,\n columnGroup,\n 0,\n y,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n table,\n cellTheme,\n define as RadioColumnDefine,\n range\n );\n }\n\n cellGroup.onBeforeAttributeUpdate = onBeforeAttributeUpdateForInvertHighlight as any;\n return cellGroup;\n}\n\nexport function updateCell(\n col: number,\n row: number,\n table: BaseTableAPI,\n addNew?: boolean,\n isShadow?: boolean,\n forceFastUpdate?: boolean\n) {\n // const oldCellGroup = table.scenegraph.getCell(col, row, true);\n const oldCellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n const cellLocation = table.getCellLocation(col, row);\n let value = table.getCellValue(col, row);\n\n let isMerge;\n let range;\n let customStyle;\n let customResult;\n let isCustomMerge = false;\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout,\n customRender\n } = customMerge;\n range = customMergeRange;\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n value = customMergeText;\n customStyle = customMergeStyle;\n // if (customStyle) {\n // cellTheme = getStyleTheme(customStyle, table, range.start.col, range.start.row, getProp).theme;\n // cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n // }\n\n if (customLayout || customRender) {\n customResult = dealWithCustom(\n customLayout,\n customRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n\n isCustomMerge = true;\n }\n }\n\n // const define = cellLocation !== 'body' ? table.getHeaderDefine(col, row) : table.getBodyColumnDefine(col, row);\n let colForDefine = col;\n let rowForDefine = row;\n if (range) {\n colForDefine = range.start.col;\n rowForDefine = range.start.row;\n }\n const define: TextColumnDefine = (\n cellLocation !== 'body'\n ? table.getHeaderDefine(colForDefine, rowForDefine)\n : table.getBodyColumnDefine(colForDefine, rowForDefine)\n ) as any;\n\n let mayHaveIcon =\n cellLocation !== 'body'\n ? true\n : (define as IRowSeriesNumber)?.dragOrder || !!define?.icon || !!(define as ColumnDefine)?.tree;\n\n if (\n !range &&\n (table.internalProps.enableTreeNodeMerge || cellLocation !== 'body' || (define as TextColumnDefine)?.mergeCell)\n ) {\n // 只有表头或者column配置合并单元格后再进行信息获取\n range = table.getCellRange(col, row);\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n }\n let isVtableMerge = false;\n if (table.internalProps.enableTreeNodeMerge && isMerge) {\n const rawRecord = table.getCellRawRecord(range.start.col, range.start.row);\n const { vtableMergeName, vtableMerge } = rawRecord ?? {};\n\n isVtableMerge = vtableMerge;\n if (vtableMerge) {\n mayHaveIcon = true;\n if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customResult = dealWithCustom(\n (table.options as ListTableConstructorOptions).groupTitleCustomLayout,\n undefined,\n range.start.col,\n range.start.row,\n table.getColsWidth(range.start.col, range.end.col),\n table.getRowsHeight(range.start.row, range.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n }\n if (vtableMergeName) {\n value = vtableMergeName;\n }\n }\n\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n isMerge ? range.start.col : col,\n isMerge ? range.start.row : row,\n getProp\n ).theme;\n\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n\n // fast method for text\n if (\n !addNew &&\n !isMerge &&\n !(define?.customLayout || define?.customRender || define?.headerCustomLayout || define?.headerCustomRender) &&\n (forceFastUpdate || canUseFastUpdate(col, row, oldCellGroup, autoWrapText, mayHaveIcon, table))\n ) {\n // update group\n const cellWidth = table.getColWidth(col);\n const cellHeight = table.getRowHeight(row);\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n oldCellGroup.setAttributes({\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n cornerRadius: cellTheme?.group?.cornerRadius ?? 0,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n y: table.scenegraph.getCellGroupY(row)\n } as any);\n\n oldCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n // update text\n const textMark = oldCellGroup.getChildByName('text');\n if (forceFastUpdate && textMark) {\n const attribute = {\n textBaseline: 'top'\n };\n textMark.setAttributes(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n } else if (textMark) {\n const text = table.getCellValue(col, row);\n const { text: textArr, moreThanMaxCharacters } = breakString(text, table);\n\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const lineClamp = cellStyle.lineClamp;\n const padding = getQuadProps(getProp('padding', cellStyle, col, row, table)) ?? [0, 0, 0, 0];\n\n const textAlign = cellTheme.text.textAlign;\n let x = 0;\n if (textAlign === 'center') {\n x = padding[3] + (cellWidth - (padding[1] + padding[3])) / 2;\n } else if (textAlign === 'right') {\n x = padding[3] + cellWidth - (padding[1] + padding[3]);\n } else {\n x = padding[3];\n }\n\n const attribute = {\n text: textArr.length === 1 && !autoWrapText ? textArr[0] : textArr, // 单行(no-autoWrapText)为字符串,多行(autoWrapText)为字符串数组\n moreThanMaxCharacters,\n maxLineWidth: cellWidth - (padding[1] + padding[3] + hierarchyOffset),\n // fill: true,\n // textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: textAlign === 'left' ? hierarchyOffset : 0,\n x\n };\n // const oldText = textMark.attribute.text;\n textMark.setAttributes(cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute);\n if (textMark.attribute.text) {\n const textBaseline = cellTheme.text.textBaseline;\n const height = cellHeight - (padding[0] + padding[2]);\n let y = 0;\n if (textBaseline === 'middle') {\n y = padding[0] + (height - textMark.AABBBounds.height()) / 2;\n } else if (textBaseline === 'bottom') {\n y = padding[0] + height - textMark.AABBBounds.height();\n } else {\n y = padding[0];\n }\n textMark.setAttributes({\n y\n });\n }\n }\n return oldCellGroup;\n }\n\n if (!addNew && oldCellGroup.role === 'empty') {\n return undefined;\n }\n\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : table.getBodyColumnType(col, row) ?? 'text';\n\n const padding = cellTheme._vtable.padding;\n const textAlign = cellTheme.text.textAlign;\n const textBaseline = cellTheme.text.textBaseline;\n\n let newCellGroup;\n // let bgColorFunc: Function;\n // 判断是否有mapping 遍历dataset中mappingRules\n // if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n // (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n // (mappingRule: MappingRule, i: number) => {\n // if (\n // mappingRule.bgColor &&\n // (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n // mappingRule.bgColor.indicatorKey\n // ) {\n // bgColorFunc = mappingRule.bgColor.mapping;\n // }\n // }\n // );\n // }\n\n let cellWidth;\n let cellHeight;\n if (range) {\n cellWidth = table.getColsWidth(range.start.col, range.end.col);\n cellHeight = table.getRowsHeight(range.start.row, range.end.row);\n } else {\n cellWidth = table.getColWidth(col);\n cellHeight = table.getRowHeight(row);\n }\n\n // deal with promise data\n if (isPromise(value)) {\n // clear cell content sync\n oldCellGroup.removeAllChild();\n\n // update cell content async\n dealPromiseData(\n value,\n table,\n callUpdateCellContentForPromiseValue.bind(null, {\n type,\n value,\n define,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n range,\n customResult,\n customStyle\n })\n );\n } else {\n newCellGroup = updateCellContent(\n type,\n value,\n define as ColumnDefine,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n cellTheme,\n range,\n customResult\n );\n }\n\n if (isMerge) {\n // const rangeHeight = table.getRowHeight(row);\n // const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = newCellGroup.attribute;\n const { height: contentHeight } = newCellGroup.attribute;\n newCellGroup.contentWidth = contentWidth;\n newCellGroup.contentHeight = contentHeight;\n\n if (isShadow) {\n dealWithMergeCellSizeForShadow(\n range,\n cellWidth,\n cellHeight,\n padding,\n textAlign,\n textBaseline,\n table,\n newCellGroup\n );\n } else {\n dealWithMergeCellSize(range, cellWidth, cellHeight, padding, textAlign, textBaseline, table);\n }\n }\n\n return newCellGroup;\n}\n\nfunction updateCellContent(\n type: ColumnTypeOption,\n value: string,\n define: ColumnDefine,\n table: BaseTableAPI,\n col: number,\n row: number,\n // bgColorFunc: Function,\n cellWidth: number,\n cellHeight: number,\n oldCellGroup: Group,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n addNew: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n customResult?: {\n elementsGroup?: VGroup;\n renderDefault: boolean;\n }\n) {\n if (isPromise(value)) {\n value = table.getCellValue(col, row);\n }\n //解决报错 getCellByCache递归调用 死循环问题\n if (!addNew && (oldCellGroup.row !== row || oldCellGroup.col !== col)) {\n return null;\n }\n if (!addNew && oldCellGroup.parent) {\n // clear react container\n if (table.reactCustomLayout) {\n const reactGroup = oldCellGroup.getChildByName('custom-container');\n if (reactGroup) {\n const { col, row } = reactGroup;\n if (isNumber(col) && isNumber(row)) {\n table.reactCustomLayout.removeCustomCell(col, row);\n }\n }\n }\n }\n const newCellGroup = createCell(\n type,\n value,\n define,\n table,\n col,\n row,\n table.getColWidth(col),\n cellWidth,\n cellHeight,\n // oldCellGroup.parent,\n addNew ? table.scenegraph.getColGroup(col) : oldCellGroup.parent,\n // oldCellGroup.attribute.y,\n addNew ? 0 : table.scenegraph.getCellGroupY(row), // y\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n if (!addNew && oldCellGroup.parent) {\n // update cell\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n // update cache\n if (table.scenegraph?.proxy.cellCache.get(col)) {\n table.scenegraph?.proxy.cellCache.set(col, newCellGroup);\n }\n }\n return newCellGroup;\n}\n\nfunction canUseFastUpdate(\n col: number,\n row: number,\n oldCellGroup: Group,\n autoWrapText: boolean,\n mayHaveIcon: boolean,\n table: BaseTableAPI\n) {\n // return false;\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n const cellType = table.getBodyColumnType(col, row);\n const autoRowHeight = table.isAutoRowHeight(row);\n const value = table.getCellValue(col, row);\n\n if (\n !table.isHeader(col, row) &&\n oldCellGroup.role === 'cell' &&\n cellType === 'text' &&\n !autoWrapText &&\n !autoRowHeight &&\n !mayHaveIcon &&\n oldCellGroup.firstChild?.type === 'text' && // judgement for none text\n !isPromise(value)\n ) {\n return true;\n }\n return false;\n}\nfunction callUpdateCellContentForPromiseValue(updateCellArgs: any) {\n const {\n type,\n value,\n define,\n table,\n col,\n row,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n range,\n customResult,\n customStyle\n } = updateCellArgs;\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n updateCellContent(\n type,\n value,\n define,\n table,\n col,\n row,\n // bgColorFunc,\n cellWidth,\n cellHeight,\n oldCellGroup,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n addNew,\n cellTheme,\n range,\n customResult\n );\n}\nexport function dealWithMergeCellSize(\n range: CellRange,\n cellWidth: number,\n cellHeight: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI\n) {\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n // const cellGroup = table.scenegraph.getCell(col, row, true);\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n\n if (cellGroup.role !== 'cell') {\n continue;\n }\n\n if (range.start.row !== range.end.row && cellGroup.contentHeight !== cellHeight) {\n updateCellContentHeight(\n cellGroup,\n cellHeight,\n cellHeight,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table\n // 'middle'\n );\n }\n if (range.start.col !== range.end.col && cellGroup.contentWidth !== cellWidth) {\n updateCellContentWidth(\n cellGroup,\n cellWidth,\n cellHeight,\n 0,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n }\n\n cellGroup.contentWidth = cellWidth;\n cellGroup.contentHeight = cellHeight;\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n }\n }\n}\n\nexport function dealWithMergeCellSizeForShadow(\n range: CellRange,\n cellWidth: number,\n cellHeight: number,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellGroup: Group\n) {\n const { col, row } = cellGroup;\n if (range.start.row !== range.end.row && cellGroup.contentHeight !== cellHeight) {\n updateCellContentHeight(\n cellGroup,\n cellHeight,\n cellHeight,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table\n // 'middle'\n );\n }\n if (range.start.col !== range.end.col && cellGroup.contentWidth !== cellWidth) {\n updateCellContentWidth(\n cellGroup,\n cellWidth,\n cellHeight,\n 0,\n table.isAutoRowHeight(row),\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n }\n\n cellGroup.contentWidth = cellWidth;\n cellGroup.contentHeight = cellHeight;\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n}\n\nexport function resizeCellGroup(\n cellGroup: Group,\n rangeWidth: number,\n rangeHeight: number,\n range: CellRange,\n table: BaseTableAPI\n) {\n const { col, row } = cellGroup;\n const dx = -table.getColsWidth(range.start.col, col - 1);\n let dy = 0;\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n // temply fix for fs merge position; bugserverId: 673af513801d3000b3cd9e8f\n for (let i = range.start.row; i <= row - 1; i++) {\n dy -= table.getRowHeight(i);\n }\n } else {\n dy = -table.getRowsHeight(range.start.row, row - 1);\n }\n\n cellGroup.forEachChildren((child: IGraphic) => {\n // 利用_dx hack解决掉 合并单元格的范围内的格子依次执行该方法 如果挨个调用updateCell的话 执行多次后dx累计问题\n if (typeof child._dx === 'number') {\n child.skipMergeUpdate = true;\n child.setAttributes({\n dx: (child._dx ?? 0) + dx\n });\n child.skipMergeUpdate = false;\n } else {\n child.skipMergeUpdate = true;\n child._dx = child.attribute.dx ?? 0;\n child.setAttributes({\n dx: (child.attribute.dx ?? 0) + dx\n });\n child.skipMergeUpdate = false;\n }\n\n if (typeof child._dy === 'number') {\n child.skipMergeUpdate = true;\n child.setAttributes({\n dy: (child._dy ?? 0) + dy\n });\n child.skipMergeUpdate = false;\n } else {\n child._dy = child.attribute.dy ?? 0;\n child.skipMergeUpdate = true;\n child.setAttributes({\n dy: (child.attribute.dy ?? 0) + dy\n });\n child.skipMergeUpdate = false;\n }\n });\n\n const lineWidth = (cellGroup.attribute as any).strokeArrayWidth ?? cellGroup.attribute.lineWidth;\n const isLineWidthArray = isArray(lineWidth);\n const newLineWidth = [0, 0, 0, 0];\n\n if (col === range.start.col) {\n newLineWidth[3] = isLineWidthArray ? lineWidth[3] : lineWidth;\n }\n if (row === range.start.row) {\n newLineWidth[0] = isLineWidthArray ? lineWidth[0] : lineWidth;\n }\n if (col === range.end.col) {\n newLineWidth[1] = isLineWidthArray ? lineWidth[1] : lineWidth;\n }\n if (row === range.end.row) {\n newLineWidth[2] = isLineWidthArray ? lineWidth[2] : lineWidth;\n }\n\n const widthChange = rangeWidth !== cellGroup.attribute.width;\n const heightChange = rangeHeight !== cellGroup.attribute.height;\n\n (cellGroup as any).skipMergeUpdate = true;\n cellGroup.setAttributes({\n width: rangeWidth,\n height: rangeHeight,\n strokeArrayWidth: newLineWidth\n } as any);\n (cellGroup as any).skipMergeUpdate = false;\n\n cellGroup.mergeStartCol = range.start.col;\n cellGroup.mergeStartRow = range.start.row;\n cellGroup.mergeEndCol = range.end.col;\n cellGroup.mergeEndRow = range.end.row;\n\n return {\n widthChange,\n heightChange\n };\n}\n\nexport function getCustomCellMergeCustom(col: number, row: number, cellGroup: Group, table: BaseTableAPI) {\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout: customMergeLayout,\n customRender: customMergeRender\n } = customMerge;\n\n if (customMergeLayout || customMergeRender) {\n const customResult = dealWithCustom(\n customMergeLayout,\n customMergeRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n customMergeRange,\n table\n );\n\n const customElementsGroup = customResult.elementsGroup;\n\n if (cellGroup.childrenCount > 0 && customElementsGroup) {\n cellGroup.insertBefore(customElementsGroup, cellGroup.firstChild);\n } else if (customElementsGroup) {\n cellGroup.appendChild(customElementsGroup);\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = cellGroup.attribute;\n const { height: contentHeight } = cellGroup.attribute;\n cellGroup.contentWidth = contentWidth;\n cellGroup.contentHeight = contentHeight;\n\n resizeCellGroup(cellGroup, rangeWidth, rangeHeight, customMergeRange, table);\n\n return customMergeRange;\n }\n }\n }\n\n return undefined;\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { Group } from '../graphic/group';\n\nexport function isMergeCellGroup(cellGroup: Group) {\n if (\n cellGroup.role === 'cell' &&\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n return true;\n }\n return false;\n}\n","import { merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { CheckboxAttributes } from './type';\nimport { Image, Rect, Text } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadCheckBoxComponent } from './register';\n\nconst checkSvg =\n '';\n\nconst indeterminateSvg =\n '';\n\nloadCheckBoxComponent();\nexport class CheckBox extends AbstractComponent> {\n static defaultAttributes: Partial = {\n interactive: true,\n disabled: false,\n checked: false,\n indeterminate: false,\n cursor: 'pointer',\n disableCursor: 'not-allowed',\n spaceBetweenTextAndIcon: 8,\n text: {\n text: 'text',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n textBaseline: 'top',\n pickable: false\n },\n icon: {\n checkIconImage: checkSvg,\n indeterminateIconImage: indeterminateSvg,\n width: 10,\n height: 10,\n pickable: false\n },\n box: {\n width: 14,\n height: 14,\n cornerRadius: 2,\n fill: '#fff',\n stroke: 'rgb(229,230,235)',\n disableFill: 'rgb(242,243,245)',\n checkedFill: 'rgb(22, 93, 255)',\n checkedStroke: 'rgb(22, 93, 255)',\n disableCheckedFill: 'rgb(148, 191, 255)',\n disableCheckedStroke: 'rgb(148, 191, 255)',\n pickable: false\n }\n };\n _box: Rect;\n _checkIcon: Image;\n _indeterminateIcon: Image;\n _text: Text;\n\n name: 'checkbox';\n\n constructor(attributes: CheckboxAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, CheckBox.defaultAttributes, attributes));\n this.renderGroup();\n\n this.onBeforeAttributeUpdate = (val: any, attributes: any, key: null | string | string[]) => {\n if ('interactive' in val) {\n this.setAttribute('pickable', val.interactive);\n }\n if ('disabled' in val) {\n this.setAttribute('cursor', val.disable ? this.attribute.disableCursor : this.attribute.cursor);\n }\n return undefined;\n };\n\n this.addEventListener('pointerup', this._handlePointerUp);\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderBox();\n this.renderIcon();\n this.renderText();\n this.layout();\n }\n\n renderBox() {\n this._box = new Rect(merge({}, this.attribute.box));\n const isCheckedOrIndeterminate = this.attribute.checked || this.attribute.indeterminate;\n if (isCheckedOrIndeterminate && this.attribute.disabled) {\n this._box.setAttributes({\n fill: this.attribute.box.disableCheckedFill,\n stroke: this.attribute.box.disableCheckedStroke\n });\n } else if (isCheckedOrIndeterminate) {\n this._box.setAttributes({\n fill: this.attribute.box.checkedFill,\n stroke: this.attribute.box.checkedStroke\n });\n } else if (this.attribute.disabled) {\n this._box.setAttributes({\n fill: this.attribute.box.disableFill\n // stroke: this.attribute.box.disableFill\n });\n }\n this.appendChild(this._box);\n }\n\n renderIcon() {\n this._checkIcon = new Image(merge({ image: this.attribute.icon.checkIconImage }, this.attribute.icon));\n this.appendChild(this._checkIcon);\n this._indeterminateIcon = new Image(\n merge(\n {\n image: this.attribute.icon.indeterminateIconImage\n },\n this.attribute.icon\n )\n );\n this.appendChild(this._indeterminateIcon);\n\n if (this.attribute.checked) {\n this._checkIcon.setAttribute('visible', true);\n this._indeterminateIcon.setAttribute('visible', false);\n } else if (this.attribute.indeterminate) {\n this._checkIcon.setAttribute('visible', false);\n this._indeterminateIcon.setAttribute('visible', true);\n } else {\n this._checkIcon.setAttribute('visible', false);\n this._indeterminateIcon.setAttribute('visible', false);\n }\n }\n\n renderText() {\n this._text = new Text(merge({ wrap: true }, this.attribute.text));\n if (this.attribute.disabled) {\n this._text.setAttribute('fill', this.attribute.text.disableFill);\n }\n this.appendChild(this._text);\n }\n\n renderGroup() {\n if (!this.attribute.interactive) {\n this.setAttribute('pickable', false);\n }\n if (this.attribute.disabled) {\n this.setAttribute('cursor', this.attribute.disableCursor);\n }\n }\n\n layout() {\n const boxHeight = this.attribute.box.height;\n const iconHeight = this.attribute.icon.height;\n const textHeight = this._text.AABBBounds.height();\n const maxHeight = Math.max(boxHeight, iconHeight, textHeight);\n const boxY = maxHeight / 2 - boxHeight / 2;\n const iconY = maxHeight / 2 - iconHeight / 2;\n const textY = maxHeight / 2 - textHeight / 2;\n\n const boxWidth = this.attribute.box.width;\n const iconWidth = this.attribute.icon.width;\n const maxWidth = Math.max(boxWidth, iconWidth);\n const boxX = maxWidth / 2 - boxWidth / 2;\n const iconX = maxWidth / 2 - iconWidth / 2;\n const textX = maxWidth + this.attribute.spaceBetweenTextAndIcon;\n\n this._box.setAttributes({\n x: boxX,\n y: boxY\n });\n this._checkIcon.setAttributes({\n x: iconX,\n y: iconY\n });\n this._indeterminateIcon.setAttributes({\n x: iconX,\n y: iconY\n });\n this._text.setAttributes({\n x: textX,\n y: textY\n });\n }\n\n private _handlePointerUp = () => {\n if (this.attribute.disabled) {\n return;\n } else if (this.attribute.checked) {\n this.setAttribute('checked', false);\n this.setAttribute('indeterminate', false);\n } else {\n this.setAttribute('checked', true);\n this.setAttribute('indeterminate', false);\n }\n\n this._dispatchEvent('checkbox_state_change', {\n eventType: 'checkbox_state_change',\n checked: this.attribute.checked\n });\n\n this.stage.renderNextFrame();\n };\n\n initAttributes(params: CheckboxAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, CheckBox.defaultAttributes, params);\n super.initAttributes(params);\n this.renderGroup();\n this.render();\n }\n}\n","import { registerGroup, registerImage, registerRect, registerText } from '@visactor/vrender-kits';\n\nexport function loadCheckBoxComponent() {\n registerGroup();\n registerRect();\n registerText();\n registerImage();\n}\n","import { registerGroup, registerImage, registerRect, registerWrapText } from '@visactor/vrender-kits';\n\nexport function loadRadioComponent() {\n registerGroup();\n registerRect();\n registerWrapText();\n registerImage();\n}\n","import { merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { RadioAttributes } from './type';\nimport { Arc, Text } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadRadioComponent } from './register';\n\nloadRadioComponent();\nexport class Radio extends AbstractComponent> {\n static defaultAttributes: Partial = {\n interactive: true,\n disabled: false,\n checked: false,\n cursor: 'pointer',\n disableCursor: 'not-allowed',\n spaceBetweenTextAndIcon: 8,\n text: {\n text: 'text',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n textBaseline: 'top',\n pickable: false\n },\n circle: {\n outerRadius: 7,\n innerRadius: 3,\n startAngle: 0,\n endAngle: 2 * Math.PI,\n lineWidth: 1,\n fill: '#fff',\n stroke: 'rgb(229,230,235)',\n disableFill: 'rgb(242,243,245)',\n checkedFill: 'rgb(22, 93, 255)',\n checkedStroke: 'rgb(22, 93, 255)',\n disableCheckedFill: 'rgb(148, 191, 255)',\n disableCheckedStroke: 'rgb(148, 191, 255)',\n pickable: false\n }\n };\n _circle: Arc;\n _text: Text;\n\n name: 'radio';\n\n constructor(attributes: RadioAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Radio.defaultAttributes, attributes));\n this.renderGroup();\n\n this.onBeforeAttributeUpdate = (val: any, attributes: any, key: null | string | string[]) => {\n if ('interactive' in val) {\n this.setAttribute('pickable', val.interactive);\n }\n if ('disabled' in val) {\n this.setAttribute('cursor', val.disable ? this.attribute.disableCursor : this.attribute.cursor);\n }\n return undefined;\n };\n\n this.addEventListener('pointerup', this._handlePointerUp);\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderCircle();\n this.renderText();\n this.layout();\n }\n\n renderCircle() {\n this._circle = new Arc(merge({}, this.attribute.circle));\n const isChecked = this.attribute.checked;\n if (isChecked && this.attribute.disabled) {\n this._circle.setAttributes({\n fill: this.attribute.circle.disableCheckedFill,\n stroke: this.attribute.circle.disableCheckedStroke\n });\n } else if (isChecked) {\n this._circle.setAttributes({\n fill: this.attribute.circle.checkedFill,\n stroke: this.attribute.circle.checkedStroke\n });\n } else if (this.attribute.disabled) {\n this._circle.setAttributes({\n fill: this.attribute.circle.disableFill\n // stroke: this.attribute.circle.disableFill\n });\n }\n this.appendChild(this._circle);\n }\n\n renderText() {\n this._text = new Text(merge({}, this.attribute.text));\n if (this.attribute.disabled) {\n this._text.setAttribute('fill', this.attribute.text.disableFill);\n }\n this.appendChild(this._text);\n }\n\n renderGroup() {\n if (!this.attribute.interactive) {\n this.setAttribute('pickable', false);\n }\n if (this.attribute.disabled) {\n this.setAttribute('cursor', this.attribute.disableCursor);\n }\n }\n\n layout() {\n const circleHeight = (this.attribute.circle.outerRadius + this.attribute.circle.lineWidth) * 2;\n const textHeight = this._text.AABBBounds.height();\n const maxHeight = Math.max(circleHeight, textHeight);\n const circleY =\n maxHeight / 2 - circleHeight / 2 + this.attribute.circle.outerRadius + this.attribute.circle.lineWidth;\n const textY = maxHeight / 2 - textHeight / 2;\n\n const circleWidth = (this.attribute.circle.outerRadius + this.attribute.circle.lineWidth) * 2;\n const circleX = this.attribute.circle.outerRadius + this.attribute.circle.lineWidth;\n const textX = circleWidth + this.attribute.spaceBetweenTextAndIcon;\n\n this._circle.setAttributes({\n x: circleX,\n y: circleY\n });\n this._text.setAttributes({\n x: textX,\n y: textY\n });\n }\n\n private _handlePointerUp = () => {\n if (this.attribute.disabled || this.attribute.checked) {\n // checked do nothing\n return;\n }\n this.setAttribute('checked', true);\n\n this._dispatchEvent('radio_checked', {\n eventType: 'radio_checked',\n target: this\n });\n\n this.stage.renderNextFrame();\n };\n\n initAttributes(params: RadioAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Radio.defaultAttributes, params);\n super.initAttributes(params);\n this.renderGroup();\n this.render();\n }\n}\n","import { isArray, isNumber, isObject } from '@visactor/vutils';\nimport { validToString } from '../../tools/util';\nimport { getProp } from '../utils/get-prop';\nimport { CheckBox, Radio } from '@visactor/vrender-components';\nimport type { FullExtendStyle, RadioColumnDefine } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nconst utilCheckBoxMark = new CheckBox({});\nconst utilRadioMark = new Radio({});\n\nexport function computeCheckboxCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n const text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n const lines = validToString(text).split('\\n') || [];\n const cellWidth = table.getColsWidth(col, endCol);\n const size = getProp('size', actStyle, col, row, table);\n let maxHeight = 0;\n if (autoWrapText) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - size - spaceBetweenTextAndIcon;\n utilCheckBoxMark.setAttributes({\n text: {\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n lineClamp\n },\n icon: {\n width: Math.floor(size / 1.4), // icon : box => 10 : 14\n height: Math.floor(size / 1.4)\n },\n box: {\n width: size,\n height: size\n },\n spaceBetweenTextAndIcon\n });\n utilCheckBoxMark.render();\n maxHeight = utilCheckBoxMark.AABBBounds.height();\n } else {\n maxHeight = Math.max(size, lines.length * lineHeight);\n }\n\n return maxHeight;\n}\n\nexport function computeRadioCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n if (isArray(cellValue)) {\n // multi radio\n let maxHeight = 0;\n const define = table.getBodyColumnDefine(col, row);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', actStyle, col, row, table);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n // sum all radio height\n cellValue.forEach((singleValue, index) => {\n const height = computeSingleRadioCellHeight(\n singleValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n maxHeight += height;\n if (index !== cellValue.length - 1) {\n maxHeight += spaceBetweenRadio;\n }\n });\n } else if (radioDirectionInCell === 'horizontal') {\n // get max radio height\n cellValue.forEach(singleValue => {\n const height = computeSingleRadioCellHeight(\n singleValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n maxHeight = Math.max(height, maxHeight);\n });\n }\n return maxHeight;\n }\n // single radio\n return computeSingleRadioCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n}\n\nexport function computeSingleRadioCellHeight(\n cellValue: any,\n col: number,\n row: number,\n endCol: number,\n actStyle: FullExtendStyle,\n autoWrapText: boolean,\n iconWidth: number,\n fontSize: number,\n fontStyle: string,\n fontWeight: string,\n fontFamily: string,\n lineHeight: number,\n lineClamp: number | undefined,\n padding: [number, number, number, number],\n table: BaseTableAPI\n) {\n const text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n const lines = validToString(text).split('\\n') || [];\n const cellWidth = table.getColsWidth(col, endCol);\n const size = getProp('size', actStyle, col, row, table);\n let outerRadius = getProp('outerRadius', actStyle, col, row, table);\n const circleSize = isNumber(outerRadius) ? outerRadius * 2 : size;\n let maxHeight = 0;\n if (autoWrapText) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - circleSize - spaceBetweenTextAndIcon;\n if (!isNumber(outerRadius)) {\n outerRadius = Math.round(size / 2);\n }\n utilRadioMark.setAttributes({\n text: {\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n lineClamp\n },\n circle: {\n outerRadius\n },\n spaceBetweenTextAndIcon\n });\n utilRadioMark.render();\n maxHeight = utilRadioMark.AABBBounds.height();\n } else {\n maxHeight = Math.max(size, lines.length * lineHeight);\n }\n\n return maxHeight;\n}\n","import type { ITextGraphicAttribute, TextOptionsType } from './../../vrender';\nimport {\n DefaultTextStyle,\n getTextBounds,\n DefaultTextMeasureContribution,\n TextMeasureContribution,\n ContainerModule,\n container,\n Text\n} from './../../vrender';\n// eslint-disable-next-line max-len\n// import {\n// DefaultTextMeasureContribution,\n// TextMeasureContribution\n// } from '@visactor/vrender/es/core/contributions/textMeasure/textMeasure-contribution';\nimport type { ITextMeasureOption, ITextSize } from '@visactor/vutils';\nimport { TextMeasure } from '@visactor/vutils';\n\nlet customAlphabetCharSet = '';\nlet textMeasureMode: 'quick' | 'canvas' = 'quick';\n\ntype ITextGraphicAttributeFroMeasure = Omit & {\n lineHeight?: number;\n};\n\nconst textMeasureModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (isBound(TextMeasureContribution)) {\n rebind(TextMeasureContribution).to(FastTextMeasureContribution).inSingletonScope();\n } else {\n bind(TextMeasureContribution).to(FastTextMeasureContribution).inSingletonScope();\n }\n});\n\nconst restoreTextMeasureModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n if (isBound(TextMeasureContribution)) {\n rebind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n } else {\n bind(TextMeasureContribution).to(DefaultTextMeasureContribution).inSingletonScope();\n }\n});\n\nexport default textMeasureModule;\n\nexport const initTextMeasure = (\n textSpec?: ITextGraphicAttributeFroMeasure,\n option?: Partial,\n useNaiveCanvas?: boolean\n): TextMeasure => {\n return new TextMeasure(\n {\n defaultFontParams: {\n fontFamily: DefaultTextStyle.fontFamily,\n fontSize: DefaultTextStyle.fontSize\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: `{}()//&-/: .,@%'\"~…=——${\n TextMeasure.ALPHABET_CHAR_SET\n }${TextMeasure.ALPHABET_CHAR_SET.toUpperCase()}0123456789${customAlphabetCharSet}`,\n ...(option ?? {})\n },\n textSpec\n );\n};\n\nconst fastTextMeasureCache: Map> = new Map();\n\nfunction getFastTextMeasure(\n fontSize: number,\n fontWeight: string | number,\n fontFamily: string,\n fontStyle: string = 'normal'\n) {\n const key = `${fontSize}-${fontWeight}-${fontFamily}-${fontStyle}`;\n const cache = fastTextMeasureCache.get(key);\n if (cache) {\n return cache;\n }\n const fastTextMeasure = initTextMeasure({\n // 16px sans-serif\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle\n });\n fastTextMeasureCache.set(key, fastTextMeasure);\n return fastTextMeasure;\n}\n\nexport class FastTextMeasureContribution extends DefaultTextMeasureContribution {\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType): number {\n // if (!this.context) {\n // return this.estimate(text, options).width;\n // }\n // this.context.setTextStyleWithoutAlignBaseline(options);\n // const textMeasure = this.context.measureText(text);\n // return textMeasure.width;\n\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure.width;\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n // if (!this.context) {\n // return this.estimate(text, options);\n // }\n // this.context.setTextStyleWithoutAlignBaseline(options);\n // return this.context.measureText(text);\n\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure;\n }\n}\n\nexport class TextMeasureTool {\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureText(text: string, options: ITextGraphicAttribute): ITextSize {\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure;\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: ITextGraphicAttribute): number {\n const { fontSize, fontFamily = 'Arial,sans-serif', fontWeight = 'normal', fontStyle = 'normal' } = options;\n const fastTextMeasure = getFastTextMeasure(fontSize, fontWeight, fontFamily, fontStyle);\n const textMeasure = fastTextMeasure.measure(text, textMeasureMode);\n return textMeasure.width;\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: ITextGraphicAttribute,\n width: number\n ): {\n str: string;\n width: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n return this._clipText(text, options, width, 0, text.length - 1);\n }\n\n // 二分法找到最佳宽\n private _clipText(\n text: string,\n options: ITextGraphicAttribute,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipText(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipText(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n clipTextWithSuffix(\n text: string,\n options: ITextGraphicAttribute,\n width: number,\n suffix: string\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1);\n data.str += suffix;\n data.width += suffixWidth;\n return data;\n }\n}\n\nexport const textMeasure = new TextMeasureTool();\n\n// add user custom alphabet char set into fast measurement\nexport function setCustomAlphabetCharSet(str: string) {\n customAlphabetCharSet = str;\n fastTextMeasureCache.clear();\n // container.load(textMeasureModule);\n}\n\n// change fast textMeasure into canvas textMeasure\nexport function restoreMeasureText() {\n textMeasureMode = 'canvas';\n container.load(restoreTextMeasureModule);\n}\n\nconst utilTextMark = new Text({\n ignoreBuf: true\n // autoWrapText: true\n});\n\nexport function measureTextBounds(attribute: ITextGraphicAttribute) {\n utilTextMark.initAttributes({\n ...attribute,\n ignoreBuf: true\n });\n return utilTextMark.AABBBounds;\n}\n","import type { Group as VGroup } from './../../vrender';\nimport { RichText, Text } from './../../vrender';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { validToString } from '../../tools/util';\nimport type {\n ColumnIconOption,\n ColumnTypeOption,\n IRowSeriesNumber,\n ListTableAPI,\n ListTableConstructorOptions\n} from '../../ts-types';\nimport { IconPosition } from '../../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { ColumnData, ColumnDefine, TextColumnDefine } from '../../ts-types/list-table/layout-map/api';\nimport { getProp } from '../utils/get-prop';\nimport { getQuadProps } from '../utils/padding';\nimport { dealWithRichTextIcon } from '../utils/text-icon-layout';\nimport type { ComputeAxisComponentHeight } from '../../components/axis/get-axis-component-size';\nimport { Factory } from '../../core/factory';\nimport { isArray, isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\nimport { CheckBox } from '@visactor/vrender-components';\nimport { decodeReactDom, dealPercentCalc } from '../component/custom';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { computeCheckboxCellHeight, computeRadioCellHeight } from './height-util';\nimport { measureTextBounds } from '../utils/text-measure';\nimport { breakString } from '../utils/break-string';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\n\nconst utilRichTextMark = new RichText({\n width: 0,\n height: 0,\n textConfig: []\n});\n\nexport function computeRowsHeight(\n table: BaseTableAPI,\n rowStart?: number,\n rowEnd?: number,\n isClearRowRangeHeightsMap: boolean = true,\n update?: boolean\n): void {\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n\n const oldRowHeights: number[] = [];\n const newHeights: number[] = [];\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n // oldRowHeights.push(table.getRowHeight(row));\n oldRowHeights[row] = table.getRowHeight(row);\n }\n }\n\n const layoutMap = table.internalProps.layoutMap;\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).enableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).enableUseHeaderPathCache();\n }\n\n table.defaultHeaderRowHeight;\n table.defaultHeaderColWidth;\n const isDefaultHeaderHasAuto =\n table.defaultHeaderRowHeight === 'auto' ||\n (isArray(table.defaultHeaderRowHeight) && table.defaultHeaderRowHeight.some(item => item === 'auto'));\n const isAllRowsAuto =\n table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false);\n const isDefaultRowHeightIsAuto = table.options.defaultRowHeight === 'auto';\n\n if (isAllRowsAuto || isDefaultHeaderHasAuto || isDefaultRowHeightIsAuto) {\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? table.rowCount - 1;\n\n // clear rowRangeHeightsMap\n if ((rowStart === 0 && rowEnd === table.rowCount - 1) || isClearRowRangeHeightsMap) {\n table._clearRowRangeHeightsMap();\n }\n // else {\n // for (let row = rowStart; row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row);\n // }\n // }\n\n // compute header row in column header row\n for (let row = rowStart; row < table.columnHeaderLevelCount; row++) {\n let startCol = 0;\n let endCol = table.colCount - 1;\n if (\n ((table.isPivotTable() && !table.isPivotChart()) ||\n (table.isPivotChart() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)) && // no top axis\n checkPivotFixedStyleAndNoWrap(table, row) &&\n !getCellMergeInfo(table, table.rowHeaderLevelCount, row)\n ) {\n // 列表头样式一致,只计算第一列行高,作为整行行高\n startCol = 0;\n endCol = table.rowHeaderLevelCount;\n }\n if (isAllRowsAuto || table.getDefaultRowHeight(row) === 'auto') {\n const height = computeRowHeight(row, startCol, endCol, table);\n newHeights[row] = Math.round(height);\n //表头部分需要马上设置到缓存中 因为adaptive不会调整表头的高度 另外后面adaptive处理过程中有取值 table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n if (table.heightAdaptiveMode === 'only-body' || !update) {\n table._setRowHeight(row, height);\n }\n }\n }\n\n // compute bottom frozen row\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= rowEnd; row++) {\n if (isAllRowsAuto || table.getDefaultRowHeight(row) === 'auto') {\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n }\n\n if (rowEnd < table.columnHeaderLevelCount || (!isAllRowsAuto && !isDefaultRowHeightIsAuto)) {\n // do nothing\n } else {\n // compute body row\n if (\n // 以列展示 且符合只需要计算第一行其他行可复用行高的条条件\n !(\n table.internalProps.transpose ||\n (table.isPivotTable() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) &&\n !(table.options as ListTableConstructorOptions).customComputeRowHeight &&\n checkFixedStyleAndNoWrap(table)\n ) {\n // check fixed style and no wrap situation, fill all row width single compute\n // traspose table and row indicator pivot table cannot use single row height\n const height = computeRowHeight(table.columnHeaderLevelCount, 0, table.colCount - 1, table);\n fillRowsHeight(\n height,\n table.columnHeaderLevelCount,\n table.rowCount - 1 - table.bottomFrozenRowCount,\n table,\n update ? newHeights : undefined\n );\n //底部冻结的行行高需要单独计算\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= rowEnd; row++) {\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n } else if (\n // 以行展示\n table.internalProps.transpose ||\n (table.isPivotTable() && !(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n // check fixed style and no wrap situation, just compute 0-table.rowHeaderLevelCount column(the column after row header) in ervey row\n // in traspose table and row indicator pivot table\n for (let row = Math.max(rowStart, table.columnHeaderLevelCount); row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row);//注释掉 注意有无缓存问题\n let height;\n if (checkFixedStyleAndNoWrapForTranspose(table, row)) {\n // 以行展示 只计算到body第一列样式的情况即可\n height = computeRowHeight(row, 0, table.rowHeaderLevelCount, table);\n } else {\n height = computeRowHeight(row, 0, table.colCount - 1, table);\n }\n // table.setRowHeight(row, height);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n } else {\n // 以列展示 需要逐行计算情况\n for (let row = Math.max(rowStart, table.columnHeaderLevelCount); row <= rowEnd; row++) {\n // table._clearRowRangeHeightsMap(row); //注释掉 注意有无缓存问题\n const height = computeRowHeight(row, 0, table.colCount - 1, table);\n // table.setRowHeight(row, height);\n if (update) {\n newHeights[row] = Math.round(height);\n } else {\n table._setRowHeight(row, height);\n }\n }\n }\n }\n } else {\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n // for tree mode\n // getRowHeight() in adaptive will return scaled height\n table.clearRowHeightCache();\n }\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n newHeights[row] = table.getRowHeight(row);\n }\n }\n }\n\n if ((rowStart === 0 && rowEnd === table.rowCount - 1) || isClearRowRangeHeightsMap) {\n table._clearRowRangeHeightsMap();\n }\n\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n let totalDrawHeight = table.tableNoFrameHeight;\n let startRow = 0;\n let endRow = table.rowCount;\n if (table.heightAdaptiveMode === 'only-body') {\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n startRow = table.columnHeaderLevelCount;\n endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n }\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight =\n totalDrawHeight -\n (update\n ? newHeights.reduce((acr, cur, index) => {\n if (index >= startRow && index <= endRow - 2) {\n return acr + cur;\n }\n return acr;\n }, 0)\n : table.getRowsHeight(startRow, endRow - 2));\n } else {\n rowHeight = Math.round(\n (update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row)) * factor\n );\n }\n if (update) {\n newHeights[row] = rowHeight;\n } else {\n table._setRowHeight(row, rowHeight, false);\n }\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (actualHeight < canvasHeight && actualHeight - actualHeaderHeight > 0) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n // if (update) {\n // newHeights[row] = newHeights[row] * factor;\n // } else {\n // table.setRowHeight(row, table.getRowHeight(row) * factor);\n // }\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight =\n canvasHeight -\n actualHeaderHeight -\n (update\n ? newHeights.reduce((acr, cur, index) => {\n if (index >= startRow && index <= endRow - 2) {\n return acr + cur;\n }\n return acr;\n }, 0)\n : table.getRowsHeight(startRow, endRow - 2));\n } else {\n rowHeight = Math.round(\n (update ? newHeights[row] ?? table.getRowHeight(row) : table.getRowHeight(row)) * factor\n );\n }\n if (update) {\n newHeights[row] = rowHeight;\n } else {\n table._setRowHeight(row, rowHeight, false);\n }\n }\n }\n }\n\n if (update) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const newRowHeight = newHeights[row] ?? table.getRowHeight(row);\n // if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // table._setRowHeight(row, newRowHeight);\n // }\n if (isValid(newRowHeight)) {\n table._setRowHeight(row, newRowHeight);\n }\n }\n\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n for (let row = 0; row <= table.columnHeaderLevelCount - 1; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= table.rowCount - 1; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n }\n for (let row = table.scenegraph.proxy.rowStart; row <= table.scenegraph.proxy.rowEnd; row++) {\n const newRowHeight = table.getRowHeight(row);\n if (newRowHeight !== (oldRowHeights[row] ?? table.getRowHeight(row))) {\n // update the row height in scenegraph\n table.scenegraph.updateRowHeight(row, newRowHeight - (oldRowHeights[row] ?? table.getRowHeight(row)), true);\n }\n }\n }\n // console.log('computeRowsHeight time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time, rowStart, rowEnd);\n\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).disableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).disableUseHeaderPathCache();\n }\n}\n\nexport function computeRowHeight(row: number, startCol: number, endCol: number, table: BaseTableAPI): number {\n const isAllRowsAuto =\n table.isAutoRowHeight() || (table.heightMode === 'adaptive' && table.options.autoHeightInAdaptiveMode !== false);\n if (!isAllRowsAuto && table.getDefaultRowHeight(row) !== 'auto') {\n return table.getDefaultRowHeight(row) as number;\n }\n\n let maxHeight;\n if (table.options.customComputeRowHeight) {\n const customRowHeight = table.options.customComputeRowHeight({\n row,\n table\n });\n if (typeof customRowHeight === 'number') {\n return customRowHeight;\n } else if (customRowHeight !== 'auto') {\n return table.getDefaultRowHeight(row) as number;\n }\n }\n // 如果是透视图\n if (\n table.isPivotChart() &&\n row >= table.columnHeaderLevelCount &&\n row < table.rowCount - table.bottomFrozenRowCount\n ) {\n if ((table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol) {\n //并且指标是以列展示 计算行高需要根据y轴的值域范围\n const optimunHeight = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getOptimunHeightForChart(row);\n if (optimunHeight > 0) {\n return optimunHeight;\n }\n } else {\n //直接拿默认行高\n const defaultHeight = table.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n }\n }\n for (let col = startCol; col <= endCol; col++) {\n // CustomRender height calculation\n const customHeight = computeCustomRenderHeight(col, row, table);\n if (customHeight) {\n maxHeight = isValid(maxHeight) ? Math.max(customHeight.height, maxHeight) : customHeight.height;\n if (!customHeight.renderDefault) {\n continue;\n }\n }\n\n // Axis component height calculation\n if (table.isPivotChart()) {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const axisConfig = layout.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const computeAxisComponentHeight: ComputeAxisComponentHeight =\n Factory.getFunction('computeAxisComponentHeight');\n const axisWidth = computeAxisComponentHeight(axisConfig, table);\n if (typeof axisWidth === 'number') {\n maxHeight = isValid(maxHeight) ? Math.max(axisWidth, maxHeight) : axisWidth;\n continue;\n }\n }\n }\n\n if (\n table.isPivotChart() &&\n ((table.isLeftFrozenColumn(col) && table.isBottomFrozenRow(row)) ||\n (table.isRightFrozenColumn(col) && table.isBottomFrozenRow(row)))\n ) {\n continue;\n }\n const cellType = table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData)?.headerType\n : table.getBodyColumnType(col, row);\n // if ( isValid(cellType) && cellType !== 'text' && cellType !== 'link' && cellType !== 'progressbar' && cellType !== 'checkbox') {\n // // text&link&progressbar测量文字宽度\n // // image&video&sparkline使用默认宽度\n // const defaultHeight = table.getDefaultRowHeight(row);\n // maxHeight = Math.max(maxHeight, isNumber(defaultHeight) ? defaultHeight : table.defaultRowHeight);\n // continue;\n // }\n\n // text height calculation\n const textHeight = computeTextHeight(col, row, cellType, table);\n maxHeight = isValid(maxHeight) ? Math.max(textHeight, maxHeight) : textHeight;\n }\n if (isValid(maxHeight)) {\n return maxHeight;\n }\n\n const defaultHeight = table.getDefaultRowHeight(row);\n return isNumber(defaultHeight) ? defaultHeight : table.defaultRowHeight;\n}\n\nfunction checkFixedStyleAndNoWrap(table: BaseTableAPI): boolean {\n const { layoutMap } = table.internalProps;\n const row = table.columnHeaderLevelCount;\n //设置了全局自动换行的话 不能复用高度计算\n if (\n (table.internalProps.autoWrapText || table.internalProps.enableLineBreak || table.isPivotChart()) &&\n (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')\n ) {\n return false;\n }\n for (let col = 0; col < table.colCount; col++) {\n const cellDefine = layoutMap.getBody(col, row);\n if (cellDefine.cellType === 'radio') {\n return false;\n }\n if (\n typeof cellDefine.style === 'function' ||\n typeof (cellDefine as ColumnData).icon === 'function' ||\n (cellDefine.define as ColumnDefine)?.customRender ||\n (cellDefine.define as ColumnDefine)?.customLayout ||\n typeof cellDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const cellStyle = table._getCellStyle(col, row); //获取的style是结合了theme配置的style\n if (\n typeof cellStyle.padding === 'function' ||\n typeof cellStyle.fontSize === 'function' ||\n typeof cellStyle.lineHeight === 'function' ||\n cellStyle.autoWrapText === true\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction checkFixedStyleAndNoWrapForTranspose(table: BaseTableAPI, row: number): boolean {\n const { layoutMap } = table.internalProps;\n //设置了全局自动换行的话 不能复用高度计算\n if (\n (table.internalProps.autoWrapText || table.internalProps.enableLineBreak) &&\n (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')\n ) {\n return false;\n }\n\n const cellDefine = layoutMap.getBody(table.rowHeaderLevelCount, row);\n if (\n typeof cellDefine.style === 'function' ||\n typeof (cellDefine as ColumnData).icon === 'function' ||\n (cellDefine.define as ColumnDefine)?.customRender ||\n (cellDefine.define as ColumnDefine)?.customLayout ||\n typeof cellDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const cellStyle = table._getCellStyle(table.rowHeaderLevelCount, row);\n if (\n typeof cellStyle.padding === 'function' ||\n typeof cellStyle.fontSize === 'function' ||\n typeof cellStyle.lineHeight === 'function' ||\n cellStyle.autoWrapText === true\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction checkPivotFixedStyleAndNoWrap(table: BaseTableAPI, row: number) {\n const { layoutMap } = table.internalProps;\n //设置了全局自动换行的话 不能复用高度计算\n if (table.internalProps.autoWrapText && (table.isAutoRowHeight() || table.options.heightMode === 'adaptive')) {\n return false;\n }\n\n const headerDefine = layoutMap.getHeader(table.rowHeaderLevelCount, row);\n if (\n typeof headerDefine.style === 'function' ||\n typeof (headerDefine as HeaderData).icons === 'function' ||\n (headerDefine.define as ColumnDefine)?.headerCustomRender ||\n (headerDefine.define as ColumnDefine)?.headerCustomLayout ||\n typeof headerDefine.define?.icon === 'function'\n ) {\n return false;\n }\n const headerStyle = table._getCellStyle(table.rowHeaderLevelCount, row);\n if (\n typeof headerStyle.padding === 'function' ||\n typeof headerStyle.fontSize === 'function' ||\n typeof headerStyle.lineHeight === 'function' ||\n headerStyle.autoWrapText === true\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction fillRowsHeight(\n height: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI,\n newHeights: number[] | undefined\n) {\n if (table.internalProps.useOneRowHeightFillAll) {\n return;\n }\n for (let row = startRow; row <= endRow; row++) {\n if (newHeights) {\n newHeights[row] = height;\n } else {\n table._setRowHeight(row, height);\n }\n }\n table.internalProps.useOneRowHeightFillAll = true;\n}\n\n/**\n * @description: compute customRender height\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeCustomRenderHeight(col: number, row: number, table: BaseTableAPI) {\n const customRender = table.getCustomRender(col, row);\n let customLayout = table.getCustomLayout(col, row);\n if (customRender || customLayout) {\n let spanRow = 1;\n let height = 0;\n let renderDefault = false;\n let enableCellPadding = false;\n let cellRange;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n cellRange = table.getCellRange(col, row);\n spanRow = cellRange.end.row - cellRange.start.row + 1;\n }\n const arg = {\n col: cellRange?.start.col ?? col,\n row: cellRange?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: getCellRect(col, row, table),\n table,\n originCol: col,\n originRow: row\n };\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (isFunction(customLayout)) {\n // 处理customLayout\n const customLayoutObj = customLayout(arg);\n if (customLayoutObj.rootContainer) {\n customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n dealPercentCalc(customLayoutObj.rootContainer, table.getColWidth(col), 0);\n customLayoutObj.rootContainer.setStage(table.scenegraph.stage);\n height = (customLayoutObj.rootContainer as VGroup).AABBBounds.height() ?? 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n } else {\n height = 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n }\n } else if (typeof customRender === 'function') {\n // 处理customRender\n const customRenderObj = customRender(arg);\n height = customRenderObj?.expectedHeight ?? 0;\n renderDefault = customRenderObj?.renderDefault;\n } else {\n height = customRender?.expectedHeight ?? 0;\n renderDefault = customRender?.renderDefault;\n }\n if (enableCellPadding) {\n const actStyle = table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n height += padding[0] + padding[2];\n }\n return {\n height: height / spanRow,\n renderDefault\n };\n }\n return undefined;\n}\n\n/**\n * @description: compute text height\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeTextHeight(col: number, row: number, cellType: ColumnTypeOption, table: BaseTableAPI): number {\n let maxHeight = 0;\n const cellValue = table.getCellValue(col, row);\n // const dataValue = table.getCellOriginValue(col, row);\n const actStyle = table._getCellStyle(col, row);\n let iconHeight = 0;\n let iconWidth = 0;\n const iconInlineFront: ColumnIconOption[] = [];\n let iconInlineFrontHeight = 0;\n const iconInlineEnd: ColumnIconOption[] = [];\n let iconInlineEndHeight = 0;\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = table.getCellLocation(col, row) !== 'body' ? true : !!define?.icon || !!define?.tree;\n\n let mayHaveIcon = false;\n if (table.getCellLocation(col, row) !== 'body') {\n mayHaveIcon = true;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n }\n\n if (mayHaveIcon) {\n const icons = table.getCellIcons(col, row);\n icons?.forEach(icon => {\n if (\n icon.positionType !== IconPosition.absoluteRight &&\n icon.positionType !== IconPosition.inlineFront &&\n icon.positionType !== IconPosition.inlineEnd\n ) {\n iconWidth += (icon.width ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0);\n iconHeight = Math.max(iconHeight, icon.height ?? 0);\n } else if (icon.positionType === IconPosition.inlineFront) {\n iconInlineFront.push(icon);\n iconInlineFrontHeight = Math.max(\n iconInlineFrontHeight,\n (icon.height ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0)\n );\n } else if (icon.positionType === IconPosition.inlineEnd) {\n iconInlineEnd.push(icon);\n iconInlineEndHeight = Math.max(\n iconInlineEndHeight,\n (icon.height ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0)\n );\n }\n });\n }\n let spanRow = 1;\n let endCol = col;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n const cellRange = table.getCellRange(col, row);\n spanRow = cellRange.end.row - cellRange.start.row + 1;\n col = cellRange.start.col;\n endCol = cellRange.end.col;\n }\n\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n const fontSize = getProp('fontSize', actStyle, col, row, table);\n const fontStyle = getProp('fontStyle', actStyle, col, row, table);\n const fontWeight = getProp('fontWeight', actStyle, col, row, table);\n const lineHeight = getProp('lineHeight', actStyle, col, row, table) ?? fontSize;\n const fontFamily = getProp('fontFamily', actStyle, col, row, table);\n const autoWrapText = getProp('autoWrapText', actStyle, col, row, table);\n const lineClamp = getProp('lineClamp', actStyle, col, row, table);\n\n // underline\n const underline = getProp('underline', actStyle, col, row, table); // boolean\n const underlineOffset = getProp('underlineOffset', actStyle, col, row, table) ?? 0;\n\n let text;\n if (\n cellType !== 'text' &&\n cellType !== 'link' &&\n cellType !== 'progressbar' &&\n cellType !== 'checkbox' &&\n cellType !== 'radio'\n ) {\n maxHeight = lineHeight;\n } else if (cellType === 'checkbox') {\n maxHeight = computeCheckboxCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n } else if (cellType === 'radio') {\n maxHeight = computeRadioCellHeight(\n cellValue,\n col,\n row,\n endCol,\n actStyle,\n autoWrapText,\n iconWidth,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n lineClamp,\n padding,\n table\n );\n } else {\n // text\n text = cellValue;\n const lines = breakString(text, table).text;\n const cellWidth = table.getColsWidth(col, endCol);\n\n if (iconInlineFront.length || iconInlineEnd.length) {\n if (autoWrapText) {\n const textOption = Object.assign({\n text: cellValue?.toString(),\n fontFamily,\n fontSize,\n fontStyle,\n fontWeight,\n lineHeight\n });\n textOption.textBaseline = 'middle';\n const textConfig = [\n ...iconInlineFront.map(icon => dealWithRichTextIcon(icon)),\n textOption,\n ...iconInlineEnd.map(icon => dealWithRichTextIcon(icon))\n ];\n utilRichTextMark.setAttributes({\n width: cellWidth - (padding[1] + padding[3]) - iconWidth,\n height: 0,\n textConfig\n });\n maxHeight = utilRichTextMark.AABBBounds.height();\n } else {\n maxHeight = 0;\n lines.forEach((line: string, index: number) => {\n if (table.options.customConfig?.multilinesForXTable && index !== 0) {\n return;\n }\n if (index === 0 && iconInlineFront.length) {\n maxHeight += Math.max(lineHeight, iconInlineFrontHeight);\n } else if (index === lines.length - 1 && iconInlineEnd.length) {\n maxHeight += Math.max(lineHeight, iconInlineEndHeight);\n } else {\n maxHeight += lineHeight;\n }\n });\n }\n } else if (autoWrapText) {\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const maxLineWidth = cellWidth - (padding[1] + padding[3]) - iconWidth - hierarchyOffset;\n const bounds = measureTextBounds({\n maxLineWidth,\n text: lines,\n fontSize,\n fontStyle,\n fontWeight,\n fontFamily,\n lineHeight,\n wordBreak: 'break-word',\n whiteSpace: lines.length === 1 && !autoWrapText ? 'no-wrap' : 'normal',\n lineClamp\n });\n maxHeight =\n (bounds.height() || (typeof lineHeight === 'number' ? lineHeight : fontSize)) +\n (underline ? underlineOffset : 0);\n } else {\n // autoWrapText = false\n if (table.options.customConfig?.multilinesForXTable) {\n maxHeight = lineHeight;\n } else {\n maxHeight = lines.length * lineHeight;\n }\n }\n }\n return (Math.max(maxHeight, iconHeight) + padding[0] + padding[2]) / spanRow;\n}\n\nfunction getCellRect(col: number, row: number, table: BaseTableAPI) {\n return {\n left: 0,\n top: 0,\n right: table.getColWidth(col),\n bottom: table.getRowHeight(row),\n width: table.getColWidth(col),\n height: 0\n };\n}\n","import type { Group } from '../scenegraph/graphic/group';\nimport type { Scenegraph } from '../scenegraph/scenegraph';\nimport type { CellRange } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function getCellMergeRange(cellGroup: Group, scene: Scenegraph) {\n if (!scene || !scene.proxy) {\n return {\n colStart: 0,\n colEnd: 0,\n rowStart: 0,\n rowEnd: 0\n };\n }\n const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow, col, row } = cellGroup;\n // const { colStart, colEnd, rowStart, rowEnd, bodyLeftCol, bodyRightCol, bodyTopRow, bodyBottomRow } = scene.proxy;\n\n const cellRangeColStart = mergeStartCol;\n const cellRangeColEnd = mergeEndCol;\n const cellRangeRowStart = mergeStartRow;\n const cellRangeRowEnd = mergeEndRow;\n\n // if (col >= bodyLeftCol && col <= bodyRightCol) {\n // cellRangeColStart = Math.max(cellGroup.mergeStartCol, colStart);\n // cellRangeColEnd = Math.min(cellGroup.mergeEndCol, colEnd);\n // }\n\n // if (row >= bodyTopRow && row <= bodyBottomRow) {\n // cellRangeRowStart = Math.max(cellGroup.mergeStartRow, rowStart);\n // cellRangeRowEnd = Math.min(cellGroup.mergeEndRow, rowEnd);\n // }\n\n return {\n colStart: cellRangeColStart,\n colEnd: cellRangeColEnd,\n rowStart: cellRangeRowStart,\n rowEnd: cellRangeRowEnd\n };\n}\n\nexport function expendCellRange(cellRange: CellRange, table: BaseTableAPI): CellRange {\n const colStart = cellRange.start.col;\n const colEnd = cellRange.end.col;\n const rowStart = cellRange.start.row;\n const rowEnd = cellRange.end.row;\n\n let newColStart = colStart;\n let newColEnd = colEnd;\n let newRowStart = rowStart;\n let newRowEnd = rowEnd;\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const mergeRange = table.getCellRange(col, row);\n if (mergeRange) {\n newColStart = Math.min(newColStart, mergeRange.start.col);\n newColEnd = Math.max(newColEnd, mergeRange.end.col);\n newRowStart = Math.min(newRowStart, mergeRange.start.row);\n newRowEnd = Math.max(newRowEnd, mergeRange.end.row);\n }\n }\n }\n\n cellRange.start.col = newColStart;\n cellRange.end.col = newColEnd;\n cellRange.start.row = newRowStart;\n cellRange.end.row = newRowEnd;\n\n return cellRange;\n}\n","import type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport type { Group } from '../graphic/group';\nimport type { CreateProgressBarCell } from '../group-creater/cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from '../group-creater/cell-type/spark-line-cell';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getProp } from '../utils/get-prop';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentHeight } from '../utils/text-icon-layout';\nimport type { IProgressbarColumnBodyDefine } from '../../ts-types/list-table/define/progressbar-define';\nimport { CUSTOM_CONTAINER_NAME, CUSTOM_MERGE_CONTAINER_NAME, dealWithCustom } from '../component/custom';\nimport { updateImageCellContentWhileResize } from '../group-creater/cell-type/image-cell';\nimport { getStyleTheme } from '../../core/tableHelper';\nimport { isMergeCellGroup } from '../utils/is-merge-cell-group';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { resizeCellGroup, getCustomCellMergeCustom } from '../group-creater/cell-helper';\nimport type { IGraphic } from './../../vrender';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\nimport { Factory } from '../../core/factory';\n\nexport function updateRowHeight(scene: Scenegraph, row: number, detaY: number, skipTableHeightMap?: boolean) {\n // 更新table行高存储\n if (!skipTableHeightMap) {\n scene.table._setRowHeight(row, scene.table.getRowHeight(row) + detaY, true);\n }\n\n for (let col = 0; col < scene.table.colCount; col++) {\n const cell = scene.getCell(col, row);\n if (cell.role === 'empty') {\n continue;\n }\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.col !== col) {\n continue;\n }\n const height = cell.attribute.height;\n // cell.setAttribute('height', height);\n // (cell.firstChild as Rect).setAttribute('height', cell.attribute.height);\n updateCellHeightForRow(scene, cell, col, row, height + detaY, detaY, scene.table.isHeader(col, row));\n\n scene.updateCellContentWhileResize(col, row);\n }\n\n let rowStart = 0;\n let rowEnd = 0;\n // 更新header 高度\n if (row < scene.table.frozenRowCount) {\n // scene.colHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height + detaY);\n // scene.rowHeaderGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y + detaY);\n // scene.bodyGroup.setAttribute('y', scene.bodyGroup.attribute.y + detaY);\n\n rowStart = row + 1;\n rowEnd = scene.table.frozenRowCount - 1;\n } else if (row >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {\n rowStart = row + 1;\n rowEnd = scene.table.rowCount - 1;\n } else {\n rowStart = row + 1;\n // rowEnd = scene.table.rowCount - 1;\n rowEnd = Math.min(scene.proxy.rowEnd, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1); //- scene.table.bottomFrozenRowCount;\n }\n\n // 更新以下行位置\n for (let colIndex = 0; colIndex < scene.table.colCount; colIndex++) {\n for (let rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++) {\n const cellGroup = scene.highPerformanceGetCell(colIndex, rowIndex);\n if (cellGroup.role === 'cell') {\n cellGroup.setAttribute('y', cellGroup.attribute.y + detaY);\n }\n }\n }\n}\n\n/**\n * @description: 更新单个单元格高度\n * @return {*}\n */\nexport function updateCellHeightForRow(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n height: number,\n detaY: number,\n isHeader: boolean\n // autoRowHeight: boolean\n) {\n // cell.setAttribute('height', height);\n const cellGroup = cell;\n const distHeight = height;\n\n if (!cellGroup) {\n // 合并单元格非主单元格,不处理\n return;\n }\n\n updateCellHeight(scene, cellGroup, col, row, distHeight, detaY, isHeader);\n}\n\nexport function updateCellHeightForColumn(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n height: number,\n detaY: number,\n isHeader: boolean\n) {\n // cell.setAttribute('height', height);\n const cellGroup = cell;\n updateCellHeight(scene, cellGroup, col, row, height, 0, isHeader);\n}\n\nexport function updateCellHeight(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n distHeight: number,\n detaY: number,\n isHeader: boolean\n) {\n if (cell.attribute.height === distHeight && !cell.needUpdateHeight) {\n return;\n }\n cell.needUpdateHeight = false;\n\n cell.setAttribute('height', distHeight);\n const isVtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;\n const isCustomMerge = !!scene.table.getCustomMerge(col, row);\n // 更新单元格布局\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : scene.table.isHeader(col, row)\n ? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : scene.table.getBodyColumnType(col, row) ?? 'text';\n if (type === 'progressbar') {\n // 目前先采用重新生成节点的方案\n const columnDefine = scene.table.getBodyColumnDefine(col, row) as IProgressbarColumnBodyDefine;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const value = scene.table.getCellValue(col, row);\n const dataValue = scene.table.getCellOriginValue(col, row);\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n\n // deal with bar\n let range;\n if (columnDefine?.mergeCell) {\n range = scene.table.getCellRange(col, row);\n }\n\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const newBarCell = createProgressBarCell(\n columnDefine,\n style,\n cell.attribute.width,\n // cell.attribute.height,\n value,\n dataValue,\n col,\n row,\n padding,\n scene.table,\n range\n );\n\n const oldBarCell = cell.getChildByName('progress-bar') as Group;\n // cell.replaceChild(newBarCell, oldBarCell);\n cell.insertBefore(newBarCell, oldBarCell);\n cell.removeChild(oldBarCell);\n oldBarCell.removeAllChild();\n oldBarCell.release();\n\n // deal with text\n updateMergeCellContentHeight(cell, distHeight, detaY, scene.table.isAutoRowHeight(row), true, scene.table);\n } else if (type === 'sparkline') {\n // 目前先采用重新生成节点的方案\n cell.removeAllChild();\n const headerStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, scene.table));\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n createSparkLineCellGroup(\n cell,\n cell.parent,\n cell.attribute.x,\n cell.attribute.y,\n col,\n row,\n cell.attribute.width,\n cell.attribute.height,\n padding,\n scene.table,\n getStyleTheme(headerStyle, scene.table, col, row, getProp).theme,\n false\n );\n } else if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cell, col, row, 0, detaY, scene.table);\n } else if (cell.firstChild?.name === 'axis') {\n (cell.firstChild as any)?.originAxis.resize(cell.attribute.width, cell.attribute.height);\n } else {\n let renderDefault = true;\n const customContainer =\n (cell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n if (customContainer) {\n // if (scene.table.reactCustomLayout) {\n // scene.table.reactCustomLayout.removeCustomCell(col, row);\n // }\n // customContainer.removeAllChild();\n let customElementsGroup;\n cell.removeChild(customContainer);\n\n const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);\n if (customMergeRange) {\n for (let mergeRow = customMergeRange.start.row; mergeRow <= customMergeRange.end.row; mergeRow++) {\n if (mergeRow === row) {\n continue;\n }\n const mergedCell = scene.getCell(col, mergeRow);\n const customContainer =\n (mergedCell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (mergedCell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n customContainer.removeAllChild();\n mergedCell.removeChild(customContainer);\n getCustomCellMergeCustom(col, mergeRow, mergedCell, scene.table);\n }\n } else {\n let customRender;\n let customLayout;\n const cellLocation = scene.table.getCellLocation(col, row);\n const { vtableMerge } = scene.table.getCellRawRecord(col, row) || {};\n\n if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;\n } else if (cellLocation !== 'body') {\n const define = scene.table.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = scene.table.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || scene.table.customRender;\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n\n if ((customRender || customLayout) && isMergeCellGroup(cell)) {\n for (let mergeCol = cell.mergeStartCol; mergeCol <= cell.mergeEndCol; mergeCol++) {\n for (let mergeRow = cell.mergeStartRow; mergeRow <= cell.mergeEndRow; mergeRow++) {\n if (mergeRow !== row) {\n scene.updateCellContent(mergeCol, mergeRow);\n }\n }\n }\n }\n\n if (customLayout || customRender) {\n // const { autoRowHeight } = table.internalProps;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (isMergeCellGroup(cell)) {\n width = scene.table.getColsWidth(cell.mergeStartCol, cell.mergeEndCol);\n height = scene.table.getRowsHeight(cell.mergeStartRow, cell.mergeEndRow);\n }\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n width,\n height,\n false,\n scene.table.isAutoRowHeight(row),\n padding,\n isMergeCellGroup(cell)\n ? {\n start: { col: cell.mergeStartCol, row: cell.mergeStartRow },\n end: { col: cell.mergeEndCol, row: cell.mergeEndRow }\n }\n : undefined,\n scene.table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n }\n\n if (cell.childrenCount > 0 && customElementsGroup) {\n cell.insertBefore(customElementsGroup, cell.firstChild);\n } else if (customElementsGroup) {\n cell.appendChild(customElementsGroup);\n }\n }\n }\n // if (renderDefault) {\n // // 处理文字\n // const style = scene.table._getCellStyle(col, row);\n // updateMergeCellContentHeight(\n // cell,\n // distHeight,\n // detaY,\n // // scene.table.internalProps.autoRowHeight,\n // getQuadProps(style.padding as number),\n // style.textAlign,\n // style.textBaseline,\n // scene.table\n // );\n // }\n updateMergeCellContentHeight(cell, distHeight, detaY, scene.table.isAutoRowHeight(row), renderDefault, scene.table);\n }\n}\n\nfunction updateMergeCellContentHeight(\n cellGroup: Group,\n distHeight: number,\n detaY: number,\n autoRowHeight: boolean,\n renderDefault: boolean,\n table: BaseTableAPI\n) {\n if (isMergeCellGroup(cellGroup)) {\n distHeight = 0;\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n distHeight += table.getRowHeight(row);\n }\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n singleCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n if (renderDefault) {\n const style = table._getCellStyle(colStart, rowStart);\n const padding = getQuadProps(getProp('padding', style, col, row, table));\n updateCellContentHeight(\n singleCellGroup,\n distHeight,\n detaY,\n autoRowHeight,\n padding,\n style.textAlign,\n style.textBaseline,\n table\n );\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n // const { height: contentHeight } = cellGroup.attribute;\n singleCellGroup.contentHeight = distHeight;\n\n const { widthChange } = resizeCellGroup(\n singleCellGroup,\n rangeWidth,\n rangeHeight,\n {\n start: {\n col: cellGroup.mergeStartCol,\n row: cellGroup.mergeStartRow\n },\n end: {\n col: cellGroup.mergeEndCol,\n row: cellGroup.mergeEndRow\n }\n },\n table\n );\n\n if (widthChange) {\n singleCellGroup.needUpdateWidth = true;\n }\n }\n }\n } else {\n const style = table._getCellStyle(cellGroup.col, cellGroup.row);\n const padding = getQuadProps(getProp('padding', style, cellGroup.col, cellGroup.row, table));\n updateCellContentHeight(\n cellGroup,\n distHeight,\n detaY,\n autoRowHeight,\n padding,\n style.textAlign,\n style.textBaseline,\n table\n );\n }\n}\n","import type { IGraphic } from './../../vrender';\nimport type { ProgressBarStyle } from '../../body-helper/style/ProgressBarStyle';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport { getStyleTheme } from '../../core/tableHelper';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { IProgressbarColumnBodyDefine } from '../../ts-types/list-table/define/progressbar-define';\nimport { CUSTOM_CONTAINER_NAME, CUSTOM_MERGE_CONTAINER_NAME, dealWithCustom } from '../component/custom';\nimport type { Group } from '../graphic/group';\nimport { updateImageCellContentWhileResize } from '../group-creater/cell-type/image-cell';\nimport type { CreateProgressBarCell } from '../group-creater/cell-type/progress-bar-cell';\nimport type { CreateSparkLineCellGroup } from '../group-creater/cell-type/spark-line-cell';\nimport { resizeCellGroup, getCustomCellMergeCustom } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { getProp } from '../utils/get-prop';\nimport { isMergeCellGroup } from '../utils/is-merge-cell-group';\nimport { getQuadProps } from '../utils/padding';\nimport { updateCellContentWidth } from '../utils/text-icon-layout';\nimport { computeRowHeight } from './compute-row-height';\nimport { updateCellHeightForRow } from './update-height';\nimport { getHierarchyOffset } from '../utils/get-hierarchy-offset';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport type { ColumnDefine, ListTableConstructorOptions } from '../../ts-types';\n// import { updateAutoRowHeight } from './auto-height';\n\n/**\n * @description: 更新指定列列宽,在拖拽调整列宽中使用\n * @param {Scenegraph} scene\n * @param {number} col\n * @param {number} detaX\n * @return {*}\n */\nexport function updateColWidth(scene: Scenegraph, col: number, detaX: number, skipTableWidthMap?: boolean) {\n if (!skipTableWidthMap) {\n scene.table._setColWidth(col, scene.table.getColWidth(col) + detaX, true);\n }\n\n // deal with corner header or column header\n const colOrCornerHeaderColumn = scene.getColGroup(col, true) as Group;\n const rightTopColumn = scene.getColGroupInRightTopCorner(col);\n if (colOrCornerHeaderColumn && !rightTopColumn) {\n updateColunmWidth(colOrCornerHeaderColumn, detaX, 'col-corner', scene);\n }\n // deal with right bottom frozen cells\n if (rightTopColumn) {\n updateColunmWidth(rightTopColumn, detaX, 'right-top', scene);\n }\n\n // deal with row header or body or right frozen cells\n const rowHeaderOrBodyColumn = scene.getColGroup(col) as Group;\n if (rowHeaderOrBodyColumn) {\n updateColunmWidth(rowHeaderOrBodyColumn, detaX, 'row-body', scene);\n }\n\n const leftBottomColumn = scene.getColGroupInLeftBottomCorner(col);\n // deal with left bottom frozen cells\n if (leftBottomColumn) {\n updateColunmWidth(leftBottomColumn, detaX, 'left-bottom', scene);\n }\n // deal with bottom frozen cells\n const bottomColumn = scene.getColGroupInBottom(col);\n if (bottomColumn) {\n updateColunmWidth(bottomColumn, detaX, 'bottom', scene);\n }\n // deal with right bottom frozen cells\n const rightBottomColumn = scene.getColGroupInRightBottomCorner(col);\n if (rightBottomColumn) {\n updateColunmWidth(rightBottomColumn, detaX, 'right-bottom', scene);\n }\n\n // 更新剩余列位置\n if (col < scene.frozenColCount) {\n scene.cornerHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n scene.rowHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n } else {\n scene.colHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n scene.bodyGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n\n if (leftBottomColumn) {\n scene.leftBottomCornerGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n if (bottomColumn) {\n scene.bottomFrozenGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n if (rightBottomColumn) {\n scene.rightBottomCornerGroup.forEachChildrenSkipChild((column: Group, index) => {\n if (column.col > col) {\n column.setAttribute('x', column.attribute.x + detaX);\n }\n });\n }\n\n // scene.table.setColWidth(col, rowHeaderOrBodyColumn.attribute.width, true);\n}\n\nfunction updateColunmWidth(\n columnGroup: Group,\n detaX: number,\n // autoRowHeight: boolean,\n mode: 'col-corner' | 'row-body' | 'bottom' | 'left-bottom' | 'right-top' | 'right-bottom',\n scene: Scenegraph\n) {\n let needRerangeRow = false;\n // const colOrCornerHeaderColumn = scene.getColGroup(col, true) as Group;\n const oldColumnWidth = columnGroup?.attribute.width ?? 0;\n columnGroup?.setAttribute('width', oldColumnWidth + detaX);\n // 更新单元格宽度\n columnGroup?.forEachChildren((cell: Group, index: number) => {\n const isHeightChange = updateCellWidth(\n scene,\n cell,\n cell.col,\n cell.row,\n oldColumnWidth,\n oldColumnWidth + detaX,\n detaX,\n mode === 'row-body' ? cell.col < scene.table.rowHeaderLevelCount : true,\n scene.table.internalProps.autoWrapText\n );\n if (isHeightChange) {\n const mergeInfo = getCellMergeInfo(scene.table, cell.col, cell.row);\n if (mergeInfo && mergeInfo.end.row - mergeInfo.start.row) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n resetRowHeight(scene, row);\n }\n } else {\n resetRowHeight(scene, cell.row);\n }\n needRerangeRow = true;\n }\n });\n\n if (needRerangeRow) {\n let newTotalHeight = 0;\n let colGroup;\n let oldContainerHeight;\n let row;\n for (let col = 0; col < scene.table.colCount; col++) {\n // const colGroup = scene.getColGroup(col, true);\n if (mode === 'col-corner') {\n row = 0;\n colGroup = scene.getColGroup(col, true);\n oldContainerHeight = scene.colHeaderGroup.attribute.height ?? 0;\n } else if (mode === 'row-body') {\n row = scene.table.frozenRowCount;\n colGroup = scene.getColGroup(col, false);\n oldContainerHeight = scene.bodyGroup.attribute.height ?? 0;\n } else if (mode === 'bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInBottom(col);\n oldContainerHeight = scene.bottomFrozenGroup.attribute.height ?? 0;\n } else if (mode === 'left-bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInLeftBottomCorner(col);\n oldContainerHeight = scene.leftBottomCornerGroup.attribute.height ?? 0;\n } else if (mode === 'right-top') {\n row = 0;\n colGroup = scene.getColGroupInRightTopCorner(col);\n oldContainerHeight = scene.rightTopCornerGroup.attribute.height ?? 0;\n } else if (mode === 'right-bottom') {\n row = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup = scene.getColGroupInRightBottomCorner(col);\n oldContainerHeight = scene.rightBottomCornerGroup.attribute.height ?? 0;\n }\n if (!colGroup) {\n continue;\n }\n let y = 0;\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row) ?? 0;\n });\n newTotalHeight = y;\n }\n scene.updateContainerHeight(row, newTotalHeight - oldContainerHeight);\n //#region 修改bug:https://github.com/VisActor/VTable/issues/954 添加底部冻结行的三块区域\n for (let col = 0; col < scene.table.frozenColCount; col++) {\n const leftBottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n // reset cell y\n let y = 0;\n leftBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n for (let col = scene.table.colCount - scene.table.rightFrozenColCount; col < scene.table.colCount; col++) {\n const rightBottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n // reset cell y\n let y = 0;\n rightBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n\n for (let col = scene.table.frozenColCount; col < scene.table.colCount - scene.table.rightFrozenColCount; col++) {\n const rightBottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n // reset cell y\n let y = 0;\n rightBottomFrozenColumnGroup?.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += scene.table.getRowHeight(cellGroup.row);\n });\n }\n //#endregion\n }\n}\n\n/**\n * @description: 更新单个单元格宽度\n * @return {*}\n */\nfunction updateCellWidth(\n scene: Scenegraph,\n cell: Group,\n col: number,\n row: number,\n oldWidth: number, // old width, not dist\n distWidth: number, // old width, not dist\n detaX: number,\n isHeader: boolean,\n // autoColWidth: boolean,\n autoWrapText: boolean\n): boolean {\n if (cell.attribute.width === distWidth && !cell.needUpdateWidth) {\n return false;\n }\n cell.needUpdateWidth = false;\n\n cell.setAttribute('width', distWidth);\n // const mergeInfo = getCellMergeInfo(scene.table, col, row);\n // if (mergeInfo && mergeInfo.start.row !== row) {\n // return false;\n // }\n const cellGroup = cell;\n // const distWidth = width + detaX;\n\n if (!cellGroup) {\n // 合并单元格非主单元格,不处理\n return false;\n }\n const autoRowHeight = scene.table.isAutoRowHeight(row);\n const isVtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;\n const isCustomMerge = !!scene.table.getCustomMerge(col, row);\n // 更新单元格布局\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : scene.table.isHeader(col, row)\n ? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : scene.table.getBodyColumnType(col, row) ?? 'text';\n let isHeightChange = false;\n if (type === 'progressbar') {\n // 目前先采用重新生成节点的方案\n const columnDefine = scene.table.getBodyColumnDefine(col, row) as IProgressbarColumnBodyDefine;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const value = scene.table.getCellValue(col, row);\n const dataValue = scene.table.getCellOriginValue(col, row);\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n\n // deal with bar\n let range;\n if (columnDefine?.mergeCell) {\n range = scene.table.getCellRange(col, row);\n }\n\n const createProgressBarCell = Factory.getFunction('createProgressBarCell') as CreateProgressBarCell;\n const newBarCell = createProgressBarCell(\n columnDefine,\n style,\n cellGroup.attribute.width,\n // cellGroup.attribute.height,\n value,\n dataValue,\n col,\n row,\n padding,\n scene.table,\n range\n );\n\n const oldBarCell = cellGroup.getChildByName('progress-bar') as Group;\n // cell.replaceChild(newBarCell, oldBarCell);\n cellGroup.insertBefore(newBarCell, oldBarCell);\n cellGroup.removeChild(oldBarCell);\n oldBarCell.removeAllChild();\n oldBarCell.release();\n\n // deal width text\n const cellChange = updateMergeCellContentWidth(cellGroup, distWidth, detaX, autoRowHeight, true, scene.table);\n isHeightChange = isHeightChange || cellChange;\n } else if (type === 'sparkline') {\n // 目前先采用重新生成节点的方案\n cellGroup.removeAllChild();\n const headerStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, scene.table));\n const createSparkLineCellGroup = Factory.getFunction('createSparkLineCellGroup') as CreateSparkLineCellGroup;\n createSparkLineCellGroup(\n cellGroup,\n cellGroup.parent,\n cellGroup.attribute.x,\n cellGroup.attribute.y,\n col,\n row,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n padding,\n scene.table,\n getStyleTheme(headerStyle, scene.table, col, row, getProp).theme,\n false\n );\n } else if (type === 'image' || type === 'video') {\n // // 只更新背景边框\n // const rect = cell.firstChild as Rect;\n // rect.setAttribute('width', cell.attribute.width);\n updateImageCellContentWhileResize(cellGroup, col, row, detaX, 0, scene.table);\n } else if (cellGroup.firstChild?.name === 'axis') {\n // recreate axis component\n const axisConfig = scene.table.internalProps.layoutMap.getAxisConfigInPivotChart(col, row);\n const cellStyle = scene.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', cellStyle, col, row, scene.table));\n if (axisConfig) {\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n scene.table\n );\n cellGroup.clear();\n cellGroup.appendChild(axis.component);\n axis.overlap();\n }\n } else if (cell.firstChild?.name === 'axis') {\n (cell.firstChild as any)?.originAxis.resize(cell.attribute.width, cell.attribute.height);\n } else {\n let renderDefault = true;\n const customContainer =\n (cell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n if (customContainer) {\n // fix for custom component flash\n // if (scene.table.reactCustomLayout) {\n // scene.table.reactCustomLayout.removeCustomCell(col, row);\n // }\n // customContainer.removeAllChild();\n let customElementsGroup;\n cell.removeChild(customContainer);\n\n const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);\n if (customMergeRange) {\n for (let mergeCol = customMergeRange.start.col; mergeCol <= customMergeRange.end.col; mergeCol++) {\n if (mergeCol === col) {\n continue;\n }\n const mergedCell = scene.getCell(mergeCol, row);\n const customContainer =\n (mergedCell.getChildByName(CUSTOM_CONTAINER_NAME) as Group) ||\n (mergedCell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME) as Group);\n customContainer.removeAllChild();\n mergedCell.removeChild(customContainer);\n getCustomCellMergeCustom(mergeCol, row, mergedCell, scene.table);\n }\n } else {\n let customRender;\n let customLayout;\n const cellType = scene.table.getCellLocation(col, row);\n const { vtableMerge } = scene.table.getCellRawRecord(col, row) || {};\n\n if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;\n } else if (cellType !== 'body') {\n const define = scene.table.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = scene.table.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || scene.table.customRender;\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n\n if ((customRender || customLayout) && isMergeCellGroup(cellGroup)) {\n for (let mergeCol = cellGroup.mergeStartCol; mergeCol <= cellGroup.mergeEndCol; mergeCol++) {\n if (mergeCol !== col) {\n for (let mergeRow = cellGroup.mergeStartRow; mergeRow <= cellGroup.mergeEndRow; mergeRow++) {\n scene.updateCellContent(mergeCol, mergeRow);\n }\n }\n }\n }\n\n if (customLayout || customRender) {\n // const { autoRowHeight } = table.internalProps;\n const style = scene.table._getCellStyle(col, row) as ProgressBarStyle;\n const padding = getQuadProps(getProp('padding', style, col, row, scene.table));\n let width = cellGroup.attribute.width;\n let height = cellGroup.attribute.height;\n if (isMergeCellGroup(cellGroup)) {\n width = scene.table.getColsWidth(cellGroup.mergeStartCol, cellGroup.mergeEndCol);\n height = scene.table.getRowsHeight(cellGroup.mergeStartRow, cellGroup.mergeEndRow);\n }\n const customResult = dealWithCustom(\n customLayout,\n customRender,\n col,\n row,\n width,\n height,\n false,\n scene.table.isAutoRowHeight(row),\n padding,\n isMergeCellGroup(cellGroup)\n ? {\n start: { col: cellGroup.mergeStartCol, row: cellGroup.mergeStartRow },\n end: { col: cellGroup.mergeEndCol, row: cellGroup.mergeEndRow }\n }\n : undefined,\n scene.table\n );\n customElementsGroup = customResult.elementsGroup;\n renderDefault = customResult.renderDefault;\n isHeightChange = true;\n }\n\n if (cell.childrenCount > 0 && customElementsGroup) {\n cell.insertBefore(customElementsGroup, cell.firstChild);\n } else if (customElementsGroup) {\n cell.appendChild(customElementsGroup);\n }\n }\n }\n const cellChange = updateMergeCellContentWidth(\n cellGroup,\n distWidth,\n detaX,\n autoRowHeight,\n renderDefault,\n scene.table\n );\n isHeightChange = isHeightChange || cellChange;\n }\n if (!autoWrapText) {\n const style = scene.table._getCellStyle(col, row);\n autoWrapText = style.autoWrapText;\n }\n return autoRowHeight && autoWrapText ? isHeightChange : false;\n}\n\nfunction updateMergeCellContentWidth(\n cellGroup: Group,\n distWidth: number,\n detaX: number,\n autoRowHeight: boolean,\n renderDefault: boolean,\n table: BaseTableAPI\n) {\n if (isMergeCellGroup(cellGroup)) {\n distWidth = 0;\n let isHeightChange = false;\n for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {\n distWidth += table.getColWidth(col);\n }\n let cellHeight = 0;\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n cellHeight += table.getRowHeight(row);\n }\n\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n if (col === cellGroup.col && row !== cellGroup.row) {\n continue;\n }\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n singleCellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: 0,\n dy: 0\n });\n });\n\n let changed = false;\n if (renderDefault) {\n // 处理文字\n // const style = table._getCellStyle(col, row);\n const style = table._getCellStyle(colStart, rowStart);\n const padding = getQuadProps(getProp('padding', style, col, row, table));\n\n const textAlign = style.textAlign;\n const textBaseline = style.textBaseline;\n changed = updateCellContentWidth(\n singleCellGroup,\n distWidth,\n cellHeight,\n detaX,\n autoRowHeight,\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n\n // reset hierarchy offset\n const hierarchyOffset = getHierarchyOffset(singleCellGroup.col, singleCellGroup.row, table);\n if (hierarchyOffset) {\n const text = singleCellGroup.getChildByName('text');\n const icon = singleCellGroup.getChildByName('expand') || singleCellGroup.getChildByName('collapse');\n // icon-left deal with hierarchy offset, no need add to text dx\n if (icon?.role !== 'icon-left' && text) {\n text.setAttribute('dx', hierarchyOffset);\n }\n }\n }\n\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n // const { width: contentWidth } = cellGroup.attribute;\n singleCellGroup.contentWidth = distWidth;\n\n const { heightChange } = resizeCellGroup(\n singleCellGroup,\n rangeWidth,\n rangeHeight,\n {\n start: {\n col: cellGroup.mergeStartCol,\n row: cellGroup.mergeStartRow\n },\n end: {\n col: cellGroup.mergeEndCol,\n row: cellGroup.mergeEndRow\n }\n },\n table\n );\n\n if (heightChange) {\n singleCellGroup.needUpdateHeight = true;\n }\n\n isHeightChange = isHeightChange || changed;\n }\n }\n return isHeightChange;\n }\n\n // 处理文字\n const style = table._getCellStyle(cellGroup.col, cellGroup.row);\n const padding = getQuadProps(getProp('padding', style, cellGroup.col, cellGroup.row, table));\n const textAlign = style.textAlign;\n const textBaseline = style.textBaseline;\n return updateCellContentWidth(\n cellGroup,\n distWidth,\n table.getRowHeight(cellGroup.row),\n detaX,\n autoRowHeight,\n padding,\n textAlign,\n textBaseline,\n table.scenegraph\n );\n}\n\n/**\n * @description: 重置指定行行高\n * @param {Scenegraph} scene\n * @param {number} row\n * @return {*}\n */\nfunction resetRowHeight(scene: Scenegraph, row: number) {\n // 获取高度\n const maxHeight = Math.round(computeRowHeight(row, 0, scene.table.colCount - 1, scene.table));\n // 更新table行高存储\n scene.table._setRowHeight(row, maxHeight, true);\n\n // 更新高度\n for (let col = 0; col < scene.table.colCount; col++) {\n const distHeight = maxHeight;\n const cell = scene.highPerformanceGetCell(col, row);\n if (cell.role === 'empty') {\n continue;\n }\n\n updateCellHeightForRow(\n scene,\n cell,\n col,\n row,\n distHeight,\n distHeight - cell.attribute.height,\n scene.table.isHeader(col, row)\n );\n }\n}\n","import type { Cursor } from './../../vrender';\nimport { Icon } from '../graphic/icon';\nimport * as icons from '../../icons';\nimport type { SvgIcon } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\n\nconst regedIcons = icons.get();\n\nexport class DrillIcon {\n icon: Icon;\n\n constructor() {\n const iconOption = regedIcons.drillDown as SvgIcon;\n this.icon = new Icon({\n x: -1000,\n y: -1000,\n image: iconOption.svg,\n width: iconOption.width,\n height: iconOption.height,\n dx: -iconOption.width / 2,\n dy: -iconOption.height / 2,\n visible: false,\n funcType: iconOption.funcType,\n cursor: iconOption.cursor as Cursor\n });\n this.icon.role = 'icon-drill';\n }\n\n appand(parent: Group) {\n parent.appendChild(this.icon);\n }\n\n update(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean, scene: Scenegraph) {\n if (!visible || (drillDown && drillUp)) {\n this.icon.setAttributes({\n x: -1000,\n y: -1000,\n visible: false\n });\n scene.updateNextFrame();\n return;\n }\n\n const drillDownOption = regedIcons.drillDown as SvgIcon;\n const drillUpOption = regedIcons.drillUp as SvgIcon;\n this.icon.setAttributes({\n x,\n y,\n image: drillDown ? drillDownOption.svg : drillUpOption.svg,\n visible: true\n });\n this.icon.loadImage(this.icon.attribute.image);\n scene.updateNextFrame();\n }\n}\n","import type { ILine, IRect, ISymbol } from './../../vrender';\nimport { createLine, createRect, createSymbol } from './../../vrender';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport type { Group } from '../graphic/group';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\n\nexport class CellMover {\n columnMoverLabel: ISymbol;\n columnMoverLine: ILine;\n columnMoverBack: IRect;\n table: BaseTableAPI;\n x?: number;\n\n constructor(table: BaseTableAPI) {\n const columnMoverLineWidth = table.theme.dragHeaderSplitLine.lineWidth;\n const columnMoverLineColor = table.theme.dragHeaderSplitLine.lineColor;\n const columnMoverShadowBlockColor = table.theme.dragHeaderSplitLine.shadowBlockColor;\n\n this.columnMoverLabel = createSymbol({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n symbolType: 'triangle',\n fill: columnMoverLineColor as string\n });\n this.columnMoverLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnMoverLineColor as string,\n lineWidth: columnMoverLineWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n // 列顺序调整阴影块\n this.columnMoverBack = createRect({\n visible: false,\n pickable: false,\n fill: columnMoverShadowBlockColor,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n\n this.table = table;\n }\n\n appand(parent: Group) {\n parent.appendChild(this.columnMoverLabel);\n parent.appendChild(this.columnMoverLine);\n parent.appendChild(this.columnMoverBack);\n }\n\n show(col: number, row: number, delta: number) {\n const cellLocation = this.table.getCellLocation(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n col = mergeInfo.start.col;\n row = mergeInfo.start.row;\n }\n\n let rectX = 0;\n let rectY = 0;\n let rectWidth = 0;\n let rectHeight = 0;\n let rectDx = 0;\n let rectDy = 0;\n let symbolX = 0;\n let symbolY = 0;\n let symbolRotate = Math.PI;\n const linePoints: { x: number; y: number }[] = [];\n if (cellLocation === 'columnHeader') {\n rectX = this.table.getColsWidth(0, col - 1) - this.table.stateManager.scroll.horizontalBarPos;\n rectY = this.table.getRowsHeight(0, this.table.frozenRowCount - 1);\n rectHeight = this.table.tableNoFrameHeight;\n if (mergeInfo) {\n rectWidth = this.table.getColsWidth(mergeInfo.start.col, mergeInfo.end.col);\n } else {\n rectWidth = this.table.getColWidth(col);\n }\n rectDx = rectX - delta;\n\n symbolX = rectX + rectWidth;\n symbolY = 2;\n\n linePoints.push({ x: 0, y: 0 });\n linePoints.push({ x: 0, y: this.table.tableNoFrameHeight });\n } else if (\n cellLocation === 'rowHeader' ||\n (this.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ) {\n rectY = this.table.getRowsHeight(0, row - 1) - this.table.stateManager.scroll.verticalBarPos;\n rectX = this.table.getColsWidth(0, this.table.frozenColCount - 1);\n rectWidth = this.table.tableNoFrameWidth;\n if (mergeInfo) {\n rectHeight = this.table.getRowsHeight(mergeInfo.start.row, mergeInfo.end.row);\n } else {\n rectHeight = this.table.getRowHeight(row);\n }\n rectDy = rectY - delta;\n\n symbolX = 2;\n symbolY = rectY + rectHeight;\n symbolRotate = Math.PI / 2;\n\n linePoints.push({ x: 0, y: 0 });\n linePoints.push({ x: this.table.tableNoFrameWidth, y: 0 });\n }\n\n this.columnMoverBack.setAttributes({\n visible: true,\n x: rectX - rectDx,\n y: rectY - rectDy,\n width: rectWidth,\n height: rectHeight,\n dx: rectDx,\n dy: rectDy\n });\n this.columnMoverLine.setAttributes({\n x: symbolX,\n y: symbolY,\n visible: true,\n points: linePoints\n });\n this.columnMoverLabel.setAttributes({\n visible: true,\n x: symbolX,\n y: symbolY,\n angle: symbolRotate\n });\n return {\n backX: rectX - rectDx,\n lineX: symbolX,\n backY: rectY - rectDy,\n lineY: symbolY\n };\n }\n\n hide() {\n this.columnMoverLabel.setAttribute('visible', false);\n this.columnMoverLine.setAttribute('visible', false);\n this.columnMoverBack.setAttribute('visible', false);\n }\n\n update(backX: number | undefined, lineX: number | undefined, backY: number | undefined, lineY: number | undefined) {\n if (typeof backX === 'number' && typeof lineX === 'number') {\n this.columnMoverLabel.setAttribute('x', lineX);\n this.columnMoverLine.setAttribute('x', lineX);\n this.columnMoverBack.setAttribute('x', backX);\n } else if (typeof backY === 'number' && typeof lineY === 'number') {\n this.columnMoverLabel.setAttribute('y', lineY);\n this.columnMoverLine.setAttribute('y', lineY);\n this.columnMoverBack.setAttribute('y', backY);\n }\n }\n\n updateStyle() {\n const columnMoverLineWidth = this.table.theme.dragHeaderSplitLine.lineWidth;\n const columnMoverLineColor = this.table.theme.dragHeaderSplitLine.lineColor;\n const columnMoverShadowBlockColor = this.table.theme.dragHeaderSplitLine.shadowBlockColor;\n\n this.columnMoverLabel.setAttributes({\n fill: columnMoverLineColor as string\n });\n this.columnMoverLine.setAttributes({\n stroke: columnMoverLineColor as string,\n lineWidth: columnMoverLineWidth as number\n });\n\n // 列顺序调整阴影块\n this.columnMoverBack.setAttributes({\n fill: columnMoverShadowBlockColor\n });\n }\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function getColX(col: number, table: BaseTableAPI, isRightFrozen?: boolean) {\n if (isRightFrozen) {\n return Math.min(table.tableNoFrameWidth, table.getAllColsWidth()) - table.getColsWidth(col, table.colCount - 1);\n }\n let colX = table.getColsWidth(0, col);\n if (col >= table.frozenColCount) {\n colX -= table.scrollLeft;\n }\n return colX;\n}\n\nexport function getRowY(row: number, table: BaseTableAPI, isBottomFrozen?: boolean) {\n if (isBottomFrozen) {\n return Math.min(table.tableNoFrameWidth, table.getAllRowsHeight()) - table.getRowsHeight(row, table.rowCount - 1);\n }\n let rowY = table.getRowsHeight(0, row);\n if (row >= table.frozenRowCount) {\n rowY -= table.scrollTop;\n }\n return rowY;\n}\n","import { theme } from './../../themes';\nimport type { ILine, IRect, IGroup, FederatedPointerEvent, Text, IText } from './../../vrender';\nimport { createRect, createLine, createText, createGroup, createSymbol } from './../../vrender';\nimport { ScrollBar } from '@visactor/vrender-components';\nimport type { Group } from '../graphic/group';\nimport { MenuHandler } from './menu';\nimport { DrillIcon } from './drill-icon';\nimport { CellMover } from './cell-mover';\nimport { getColX, getRowY } from './util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isValid } from '@visactor/vutils';\n\n/**\n * @description: 表格内容外组件\n * @return {*}\n */\nexport class TableComponent {\n table: BaseTableAPI;\n\n border: IRect; // 表格外边框\n // selectBorder: IRect; // 表格选择区域边框\n columnResizeLine: ILine; // 表格列宽调整基准线\n columnResizeBgLine: ILine; // 表格列宽调整基准线背景\n columnResizeLabel: IGroup; // 表格列宽调整标记\n rowResizeLine: ILine; // 表格列宽调整基准线\n rowResizeBgLine: ILine; // 表格列宽调整基准线背景\n rowResizeLabel: IGroup; // 表格列宽调整标记\n menu: MenuHandler; // 表格菜单\n vScrollBar: ScrollBar; // 表格横向滚动条\n hScrollBar: ScrollBar; // 表格纵向滚动条\n frozenShadowLine: IRect; // 表格冻结列右侧阴影块\n rightFrozenShadowLine: IRect; // 表格右侧冻结列左侧阴影块\n drillIcon: DrillIcon; // drill icon\n cellMover: CellMover; // 表格列顺序调整标记\n labelVisible: boolean; // 是否显示label\n constructor(table: BaseTableAPI) {\n this.table = table;\n const theme = this.table.theme;\n\n // 滚动条\n this.createScrollBar();\n\n // 列宽调整基准线\n const columnResizeColor = theme.columnResize?.lineColor;\n const columnResizeWidth = theme.columnResize?.lineWidth;\n const columnResizeBgColor = theme.columnResize?.bgColor;\n const columnResizeBgWidth = theme.columnResize?.width;\n const labelVisible = theme.columnResize?.labelVisible ?? true;\n const labelColor = theme.columnResize?.labelColor;\n const labelFontSize = theme.columnResize?.labelFontSize;\n const labelFontFamily = theme.columnResize?.labelFontFamily;\n const labelBackgroundFill = theme.columnResize?.labelBackgroundFill;\n const labelBackgroundCornerRadius = theme.columnResize?.labelBackgroundCornerRadius;\n\n this.labelVisible = labelVisible;\n\n this.columnResizeLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n this.columnResizeBgLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number,\n x: 0,\n y: 0,\n // dx: -(columnResizeBgWidth - columnResizeWidth) / 2,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n const columnResizeLabelText = createText({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n text: '',\n textBaseline: 'top',\n dx: 12 + 4,\n dy: -labelFontSize / 2\n });\n const columnResizeLabelBack = createRect({\n visible: false,\n pickable: false,\n fill: labelBackgroundFill,\n x: 0,\n y: 0,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dx: 12,\n dy: -labelFontSize / 2 - 4\n });\n this.columnResizeLabel = createGroup({\n visible: false,\n pickable: false,\n x: 0,\n y: 0\n });\n this.columnResizeLabel.appendChild(columnResizeLabelBack);\n this.columnResizeLabel.appendChild(columnResizeLabelText);\n\n this.rowResizeLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number,\n x: 0,\n y: 0,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n this.rowResizeBgLine = createLine({\n visible: false,\n pickable: false,\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number,\n x: 0,\n y: 0,\n // dx: -(columnResizeBgWidth - columnResizeWidth) / 2,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: 0 }\n ]\n });\n\n // 列宽调整文字标签\n const rowResizeLabelText = createText({\n visible: false,\n pickable: false,\n x: 0,\n y: 0,\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n text: '',\n textBaseline: 'top',\n dx: 12 + 4,\n dy: -labelFontSize / 2\n });\n const rowResizeLabelBack = createRect({\n visible: false,\n pickable: false,\n fill: labelBackgroundFill,\n x: 0,\n y: 0,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dx: 12,\n dy: -labelFontSize / 2 - 4\n });\n this.rowResizeLabel = createGroup({\n visible: false,\n pickable: false,\n x: 0,\n y: 0\n });\n this.rowResizeLabel.appendChild(rowResizeLabelBack);\n this.rowResizeLabel.appendChild(rowResizeLabelText);\n // 列顺序调整基准线\n this.cellMover = new CellMover(this.table);\n\n // 冻结列阴影\n const shadowWidth = theme.frozenColumnLine?.shadow?.width;\n const shadowStartColor = theme.frozenColumnLine?.shadow?.startColor;\n const shadowEndColor = theme.frozenColumnLine?.shadow?.endColor;\n this.frozenShadowLine = createRect({\n visible: true,\n pickable: false,\n x: 0,\n y: 0,\n width: shadowWidth,\n height: 0,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowStartColor, offset: 0 },\n { color: shadowEndColor, offset: 1 }\n ]\n }\n });\n this.rightFrozenShadowLine = createRect({\n visible: true,\n pickable: false,\n x: 0,\n y: 0,\n width: shadowWidth,\n height: 0,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowEndColor, offset: 0 },\n { color: shadowStartColor, offset: 1 }\n ]\n }\n });\n\n // TO BE DONE 冻结列border(theme.frozenColumnLine?.border)\n\n // 弹出窗口\n // this.menu = createGroup({\n // visible: false,\n // pickable: false,\n // x: 0,\n // y: 0,\n // });\n this.menu = new MenuHandler(this.table);\n\n this.drillIcon = new DrillIcon();\n }\n\n /**\n * @description: 组件mark加入到容器Group中\n * @param {Group} componentGroup\n * @return {*}\n */\n addToGroup(componentGroup: Group) {\n componentGroup.addChild(this.frozenShadowLine);\n componentGroup.addChild(this.rightFrozenShadowLine);\n // componentGroup.addChild(this.selectBorder);\n componentGroup.addChild(this.columnResizeBgLine);\n componentGroup.addChild(this.columnResizeLine);\n componentGroup.addChild(this.columnResizeLabel);\n componentGroup.addChild(this.rowResizeBgLine);\n componentGroup.addChild(this.rowResizeLine);\n componentGroup.addChild(this.rowResizeLabel);\n\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n if (hoverOn && !this.table.theme.scrollStyle.barToSide) {\n componentGroup.addChild(this.hScrollBar);\n componentGroup.addChild(this.vScrollBar);\n } else {\n componentGroup.stage.defaultLayer.addChild(this.hScrollBar);\n componentGroup.stage.defaultLayer.addChild(this.vScrollBar);\n\n // // add scroll bar before border, avoid scroll hide by border globalCompositeOperation\n // componentGroup.stage.defaultLayer.insertBefore(this.vScrollBar, componentGroup.stage.defaultLayer.firstChild);\n // componentGroup.stage.defaultLayer.insertBefore(this.hScrollBar, componentGroup.stage.defaultLayer.firstChild);\n }\n this.menu.bindTableComponent(componentGroup);\n this.drillIcon.appand(componentGroup);\n this.cellMover.appand(componentGroup);\n }\n\n /**\n * @description: 创建滚动条组件\n * @return {*}\n */\n createScrollBar() {\n const theme = this.table.theme;\n const scrollRailColor = theme.scrollStyle?.scrollRailColor as string;\n const scrollSliderColor = theme.scrollStyle?.scrollSliderColor as string;\n const scrollSliderCornerRadius = theme.scrollStyle?.scrollSliderCornerRadius;\n const width = theme.scrollStyle?.width as number;\n const horizontalPadding = theme.scrollStyle?.horizontalPadding;\n const verticalPadding = theme.scrollStyle?.verticalPadding;\n\n let sliderStyle;\n if (isValid(scrollSliderCornerRadius)) {\n sliderStyle = {\n cornerRadius: scrollSliderCornerRadius,\n fill: scrollSliderColor\n };\n } else {\n sliderStyle = {\n fill: scrollSliderColor\n };\n }\n // const visible = theme.scrollStyle?.visible as string;\n // const hoverOn = theme.scrollStyle?.hoverOn as boolean;\n\n this.hScrollBar = new ScrollBar({\n direction: 'horizontal',\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width: this.table.tableNoFrameWidth,\n height: width,\n padding: horizontalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle,\n range: [0, 0.1],\n // scrollRange: [0.4, 0.8]\n visible: false\n });\n // hack方案实现初始化隐藏滚动条,也可以add到stage之后执行hideAll\n (this.hScrollBar as any).render();\n this.hScrollBar.hideAll();\n\n this.vScrollBar = new ScrollBar({\n direction: 'vertical',\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width,\n height: this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight(),\n padding: verticalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle,\n range: [0, 0.1],\n visible: false\n });\n (this.vScrollBar as any).render();\n this.vScrollBar.hideAll();\n }\n\n /**\n * @description: 更新滚动条尺寸\n * @return {*}\n */\n updateScrollBar() {\n const oldHorizontalBarPos = this.table.stateManager.scroll.horizontalBarPos;\n const oldVerticalBarPos = this.table.stateManager.scroll.verticalBarPos;\n\n const theme = this.table.theme;\n const width = theme.scrollStyle?.width as number;\n const visible1 = theme.scrollStyle?.visible as string;\n const horizontalVisible = theme.scrollStyle?.horizontalVisible ?? visible1;\n const verticalVisible = theme.scrollStyle?.verticalVisible ?? visible1;\n // const hoverOn = theme.scrollStyle?.hoverOn as boolean;\n const tableWidth = Math.ceil(this.table.scenegraph.tableGroup.attribute.width);\n const tableHeight = Math.ceil(this.table.scenegraph.tableGroup.attribute.height);\n\n const totalHeight = this.table.getAllRowsHeight();\n const totalWidth = this.table.getAllColsWidth();\n const frozenRowsHeight = this.table.getFrozenRowsHeight();\n const frozenColsWidth = this.table.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.table.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.table.getRightFrozenColsWidth();\n\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n if (totalWidth > tableWidth + sizeTolerance) {\n const y = Math.min(tableHeight, totalHeight);\n const rangeEnd = Math.max(0.05, (tableWidth - frozenColsWidth) / (totalWidth - frozenColsWidth));\n\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n\n let attrY = 0;\n if (this.table.theme.scrollStyle.barToSide) {\n attrY =\n this.table.tableNoFrameHeight -\n (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y) +\n this.table.tableY;\n } else {\n attrY = y - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.y);\n }\n\n this.hScrollBar.setAttributes({\n x: frozenColsWidth + (!hoverOn ? this.table.scenegraph.tableGroup.attribute.x : 0),\n y: attrY,\n width: tableWidth - frozenColsWidth - rightFrozenColsWidth,\n range: [0, rangeEnd],\n visible: horizontalVisible === 'always'\n });\n const bounds = this.hScrollBar.AABBBounds && this.hScrollBar.globalAABBBounds;\n (this.hScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n if (horizontalVisible === 'always') {\n this.hScrollBar.showAll();\n }\n } else {\n this.hScrollBar.setAttributes({\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n width: 0,\n visible: false\n });\n }\n\n if (totalHeight > tableHeight + sizeTolerance) {\n const x = Math.min(tableWidth, totalWidth);\n const rangeEnd = Math.max(0.05, (tableHeight - frozenRowsHeight) / (totalHeight - frozenRowsHeight));\n\n let attrX = 0;\n const hoverOn = this.table.theme.scrollStyle.hoverOn;\n\n if (this.table.theme.scrollStyle.barToSide) {\n attrX =\n this.table.tableNoFrameWidth -\n (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.x) +\n this.table.tableX;\n } else {\n attrX = x - (hoverOn ? width : -this.table.scenegraph.tableGroup.attribute.x);\n }\n\n this.vScrollBar.setAttributes({\n x: attrX,\n y: frozenRowsHeight + (!hoverOn ? this.table.scenegraph.tableGroup.attribute.y : 0),\n height: tableHeight - frozenRowsHeight - bottomFrozenRowsHeight,\n range: [0, rangeEnd],\n visible: verticalVisible === 'always'\n });\n const bounds = this.vScrollBar.AABBBounds && this.vScrollBar.globalAABBBounds;\n (this.vScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n\n if (verticalVisible === 'always') {\n this.vScrollBar.showAll();\n }\n } else {\n this.vScrollBar.setAttributes({\n x: -this.table.tableNoFrameWidth * 2,\n y: -this.table.tableNoFrameHeight * 2,\n height: 0,\n visible: false\n });\n }\n\n this.table.stateManager.setScrollLeft(oldHorizontalBarPos);\n this.table.stateManager.setScrollTop(oldVerticalBarPos);\n }\n\n /**\n * @description: 隐藏列宽调整组件\n * @return {*}\n */\n hideResizeCol() {\n // this.columnResizeLine.attribute.visible = false;\n this.columnResizeLine.setAttribute('visible', false);\n this.columnResizeBgLine.setAttribute('visible', false);\n this.columnResizeLabel.setAttribute('visible', false);\n this.columnResizeLabel.hideAll();\n }\n\n /**\n * @description: 显示列宽调整组件\n * @param {number} col\n * @param {number} y\n * @return {*}\n */\n showResizeCol(col: number, y: number, isRightFrozen?: boolean) {\n // this.columnResizeLine.attribute.visible = false;\n // 基准线\n const colX = getColX(col, this.table, isRightFrozen);\n this.columnResizeLine.setAttributes({\n visible: true,\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) }\n ]\n });\n this.columnResizeBgLine.setAttributes({\n visible: true,\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) }\n ]\n });\n\n // 标签\n // this.columnResizeLabel.setAttribute('visible', true);\n if (this.labelVisible) {\n this.columnResizeLabel.showAll();\n this.columnResizeLabel.setAttributes({\n visible: true,\n x: colX,\n y\n });\n (this.columnResizeLabel.lastChild as Text).setAttribute('text', `${this.table.getColWidth(col)}px`);\n }\n }\n\n /**\n * @description: 更新列宽调整组件\n * @param {number} col\n * @param {number} y 标签显示的y坐标\n * @return {*}\n */\n updateResizeCol(col: number, y: number, isRightFrozen?: boolean) {\n // 基准线\n const colX = getColX(col, this.table, isRightFrozen);\n // this.columnResizeLine.setAttribute('x', x);\n this.columnResizeLine.setAttributes({\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) } // todo: 优化points赋值\n ]\n });\n this.columnResizeBgLine.setAttributes({\n x: colX,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: this.table.getRowsHeight(0, this.table.rowCount - 1) } // todo: 优化points赋值\n ]\n });\n\n // 标签\n if (this.labelVisible) {\n this.columnResizeLabel.setAttributes({\n x: colX,\n y\n });\n (this.columnResizeLabel.lastChild as Text).setAttribute('text', `${Math.floor(this.table.getColWidth(col))}px`);\n }\n }\n\n /**\n * @description: 隐藏列宽调整组件\n * @return {*}\n */\n hideResizeRow() {\n // this.columnResizeLine.attribute.visible = false;\n this.rowResizeLine.setAttribute('visible', false);\n this.rowResizeBgLine.setAttribute('visible', false);\n this.rowResizeLabel.setAttribute('visible', false);\n this.rowResizeLabel.hideAll();\n }\n\n /**\n * @description: 显示列宽调整组件\n * @param {number} col\n * @param {number} y\n * @return {*}\n */\n showResizeRow(row: number, x: number, isRightFrozen?: boolean) {\n // 基准线\n const rowY = getRowY(row, this.table, isRightFrozen);\n this.rowResizeLine.setAttributes({\n visible: true,\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) }\n ]\n });\n this.rowResizeBgLine.setAttributes({\n visible: true,\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) }\n ]\n });\n\n if (this.labelVisible) {\n // 标签\n this.rowResizeLabel.showAll();\n this.rowResizeLabel.setAttributes({\n visible: true,\n y: rowY,\n x\n });\n (this.rowResizeLabel.lastChild as Text).setAttribute('text', `${this.table.getRowHeight(row)}px`);\n }\n }\n\n /**\n * @description: 更新列宽调整组件\n * @param {number} col\n * @param {number} y 标签显示的y坐标\n * @return {*}\n */\n updateResizeRow(row: number, x: number, isBottomFrozen?: boolean) {\n // 基准线\n const rowY = getRowY(row, this.table, isBottomFrozen);\n // this.columnResizeLine.setAttribute('x', x);\n this.rowResizeLine.setAttributes({\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) } // todo: 优化points赋值\n ]\n });\n this.rowResizeBgLine.setAttributes({\n y: rowY,\n points: [\n { y: 0, x: 0 },\n { y: 0, x: this.table.getColsWidth(0, this.table.colCount - 1) } // todo: 优化points赋值\n ]\n });\n\n if (this.labelVisible) {\n // 标签\n this.rowResizeLabel.setAttributes({\n y: rowY,\n x\n });\n (this.rowResizeLabel.lastChild as Text).setAttribute('text', `${Math.floor(this.table.getRowHeight(row))}px`);\n }\n }\n\n /**\n * @description: 隐藏列顺序调整组件\n * @return {*}\n */\n hideMoveCol() {\n this.cellMover.hide();\n }\n\n /**\n * @description: 显示列顺序调整组件\n * @param {number} col\n * @param {number} x\n * @return {*}\n */\n showMoveCol(col: number, row: number, delta: number) {\n return this.cellMover.show(col, row, delta);\n }\n\n /**\n * @description: 更新列顺序调整组件\n * @param {number} backX\n * @param {number} lineX\n * @return {*}\n */\n updateMoveCol(backX: number, lineX: number, backY: number, lineY: number) {\n this.cellMover.update(backX, lineX, backY, lineY);\n }\n\n /**\n * @description: 显示冻结列shadow\n * @param {number} col\n * @return {*}\n */\n setFrozenColumnShadow(col: number, isRightFrozen?: boolean) {\n if (col < 0) {\n this.frozenShadowLine.setAttributes({\n visible: false\n });\n } else {\n // const colX = this.table.getColsWidth(0, col);\n const colX = getColX(col, this.table, isRightFrozen);\n this.frozenShadowLine.setAttributes({\n visible: true,\n x: colX,\n height: this.table.getDrawRange().height\n });\n }\n }\n\n /**\n * @description: 显示右侧冻结列shadow\n * @param {number} col\n * @return {*}\n */\n setRightFrozenColumnShadow(col: number) {\n if (col >= this.table.colCount) {\n this.rightFrozenShadowLine.setAttributes({\n visible: false\n });\n } else {\n // const colX = this.table.getColsWidth(0, col);\n const colX = getColX(col, this.table, true);\n this.rightFrozenShadowLine.setAttributes({\n visible: true,\n x: colX - this.rightFrozenShadowLine.attribute.width,\n height: this.table.getDrawRange().height\n });\n }\n }\n\n hideVerticalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const verticalVisible = this.table.theme.scrollStyle.verticalVisible ?? visible1;\n if (verticalVisible !== 'focus' && verticalVisible !== 'scrolling') {\n return;\n }\n this.vScrollBar.setAttribute('visible', false);\n this.vScrollBar.hideAll();\n this.table.scenegraph.updateNextFrame();\n }\n showVerticalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const verticalVisible = this.table.theme.scrollStyle.verticalVisible ?? visible1;\n if (verticalVisible !== 'focus' && verticalVisible !== 'scrolling') {\n return;\n }\n this.vScrollBar.setAttribute('visible', true);\n this.vScrollBar.showAll();\n this.table.scenegraph.updateNextFrame();\n }\n hideHorizontalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const horizontalVisible = this.table.theme.scrollStyle.horizontalVisible ?? visible1;\n if (horizontalVisible !== 'focus' && horizontalVisible !== 'scrolling') {\n return;\n }\n this.hScrollBar.setAttribute('visible', false);\n this.hScrollBar.hideAll();\n this.table.scenegraph.updateNextFrame();\n }\n showHorizontalScrollBar() {\n const visible1 = this.table.theme.scrollStyle.visible;\n const horizontalVisible = this.table.theme.scrollStyle.horizontalVisible ?? visible1;\n if (horizontalVisible !== 'focus' && horizontalVisible !== 'scrolling') {\n return;\n }\n this.hScrollBar.setAttribute('visible', true);\n this.hScrollBar.showAll();\n this.table.scenegraph.updateNextFrame();\n }\n updateVerticalScrollBarPos(topRatio: number) {\n const range = this.vScrollBar.attribute.range;\n const size = range[1] - range[0];\n const range0 = topRatio * (1 - size);\n this.vScrollBar.setAttribute('range', [range0, range0 + size]);\n const bounds = this.vScrollBar.AABBBounds && this.vScrollBar.globalAABBBounds;\n (this.vScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n }\n updateHorizontalScrollBarPos(leftRatio: number) {\n const range = this.hScrollBar.attribute.range;\n const size = range[1] - range[0];\n const range0 = leftRatio * (1 - size);\n this.hScrollBar.setAttribute('range', [range0, range0 + size]);\n const bounds = this.hScrollBar.AABBBounds && this.hScrollBar.globalAABBBounds;\n (this.hScrollBar as any)._viewPosition = {\n x: bounds.x1,\n y: bounds.y1\n };\n }\n\n updateStyle() {\n const theme = this.table.theme;\n\n // scrollbar\n const scrollRailColor = theme.scrollStyle?.scrollRailColor as string;\n const scrollSliderColor = theme.scrollStyle?.scrollSliderColor as string;\n const scrollSliderCornerRadius = theme.scrollStyle?.scrollSliderCornerRadius;\n const width = theme.scrollStyle?.width as number;\n const horizontalPadding = theme.scrollStyle?.horizontalPadding;\n const verticalPadding = theme.scrollStyle?.verticalPadding;\n\n let sliderStyle;\n if (isValid(scrollSliderCornerRadius)) {\n sliderStyle = {\n cornerRadius: scrollSliderCornerRadius,\n fill: scrollSliderColor\n };\n } else {\n sliderStyle = {\n fill: scrollSliderColor\n };\n }\n this.hScrollBar.setAttributes({\n height: width,\n padding: horizontalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle\n });\n\n this.vScrollBar.setAttributes({\n width,\n padding: verticalPadding,\n railStyle: {\n fill: scrollRailColor\n },\n sliderStyle\n });\n\n // columnResizeLine & columnResizeBgLine\n const columnResizeColor = theme.columnResize?.lineColor;\n const columnResizeWidth = theme.columnResize?.lineWidth;\n const columnResizeBgColor = theme.columnResize?.bgColor;\n const columnResizeBgWidth = theme.columnResize?.width;\n\n this.columnResizeLine.setAttributes({\n stroke: columnResizeColor as string,\n lineWidth: columnResizeWidth as number\n });\n this.columnResizeBgLine = createLine({\n stroke: columnResizeBgColor as string,\n lineWidth: columnResizeBgWidth as number\n });\n\n const labelColor = theme.columnResize?.labelColor;\n const labelFontSize = theme.columnResize?.labelFontSize;\n const labelFontFamily = theme.columnResize?.labelFontFamily;\n const labelBackgroundFill = theme.columnResize?.labelBackgroundFill;\n const labelBackgroundCornerRadius = theme.columnResize?.labelBackgroundCornerRadius;\n const labelVisible = theme.columnResize?.labelVisible ?? true;\n this.labelVisible = labelVisible;\n\n // columnResizeLabelBack\n (this.columnResizeLabel.lastChild as IText).setAttributes({\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n dy: -labelFontSize / 2\n });\n // columnResizeLabelText\n (this.columnResizeLabel.firstChild as IRect).setAttributes({\n fill: labelBackgroundFill,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dy: -labelFontSize / 2 - 4\n });\n\n // rowResizeLabelBack\n (this.rowResizeLabel.lastChild as IText).setAttributes({\n fontSize: labelFontSize, // 10\n fill: labelColor,\n fontFamily: labelFontFamily,\n dy: -labelFontSize / 2\n });\n // rowResizeLabelText\n (this.rowResizeLabel.firstChild as IRect).setAttributes({\n fill: labelBackgroundFill,\n width: 5 * labelFontSize * 0.8,\n height: labelFontSize + 8,\n cornerRadius: labelBackgroundCornerRadius,\n dy: -labelFontSize / 2 - 4\n });\n\n // frozenShadowLine\n const shadowWidth = theme.frozenColumnLine?.shadow?.width;\n const shadowStartColor = theme.frozenColumnLine?.shadow?.startColor;\n const shadowEndColor = theme.frozenColumnLine?.shadow?.endColor;\n this.frozenShadowLine.setAttributes({\n width: shadowWidth,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowStartColor, offset: 0 },\n { color: shadowEndColor, offset: 1 }\n ]\n }\n });\n this.rightFrozenShadowLine.setAttributes({\n width: shadowWidth,\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops: [\n { color: shadowEndColor, offset: 0 },\n { color: shadowStartColor, offset: 1 }\n ]\n }\n });\n\n this.cellMover.updateStyle();\n // this.menu.updateStyle();\n // this.drillIcon.updateStyle();\n }\n}\n","import type { IGroupGraphicAttribute, IRect, IRectGraphicAttribute } from './../../vrender';\nimport { createGroup, createRect } from './../../vrender';\nimport type { TableFrameStyle } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport { isArray } from '@visactor/vutils';\nimport { getQuadProps } from '../utils/padding';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { toBoxArray } from '../../tools/helper';\n\n/**\n * @description: create frame border\n * @param {Group} group\n * @param {TableFrameStyle} frameTheme\n * @param {string} role\n * @param {[boolean, boolean, boolean, boolean]} strokeArray\n * @return {*}\n */\nexport function createFrameBorder(\n group: Group,\n frameTheme: TableFrameStyle | undefined,\n role: string,\n strokeArray: [boolean, boolean, boolean, boolean] | undefined, // to do 处理成0b001111形式\n justForXYPosition?: boolean\n) {\n if (!frameTheme) {\n return;\n }\n\n const isTableGroup = role === 'table';\n\n const {\n shadowBlur,\n shadowOffsetX,\n shadowOffsetY,\n shadowColor,\n cornerRadius,\n borderColor,\n borderLineWidth,\n borderLineDash\n } = frameTheme;\n let hasShadow = false;\n const groupAttributes: IGroupGraphicAttribute = {};\n const rectAttributes: IRectGraphicAttribute = {\n pickable: false\n };\n // 处理shadow\n if (shadowBlur && isTableGroup) {\n // 只有table才能配置shadow\n rectAttributes.shadowBlur = shadowBlur;\n rectAttributes.shadowOffsetX = shadowOffsetX;\n rectAttributes.shadowOffsetY = shadowOffsetY;\n rectAttributes.shadowColor = shadowColor;\n rectAttributes.stroke = true;\n rectAttributes.stroke = shadowColor;\n rectAttributes.lineWidth = 1;\n hasShadow = true;\n\n // rectAttributes.fill = true;\n // rectAttributes.fillOpacity = 0.01;\n }\n\n // 处理边框\n if (borderLineWidth) {\n rectAttributes.stroke = true;\n rectAttributes.fill = false;\n rectAttributes.stroke = getStroke(borderColor ?? '#E1E4E8', strokeArray, borderLineWidth);\n rectAttributes.lineWidth = borderLineWidth as number;\n borderLineDash && (rectAttributes.lineDash = borderLineDash as number[]);\n rectAttributes.lineCap = 'butt';\n }\n\n if (Array.isArray(borderColor)) {\n (rectAttributes as any).strokeArrayColor = getQuadProps(borderColor as any);\n }\n\n if (Array.isArray(borderLineWidth)) {\n (rectAttributes as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n (rectAttributes as any).lineWidth = 1;\n }\n\n if (cornerRadius) {\n rectAttributes.cornerRadius = cornerRadius;\n groupAttributes.cornerRadius = cornerRadius;\n }\n\n const borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n const borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n\n // // 处理边框引起的宽度高度变化(只对最外层tableGroup生效)\n // if (isTableGroup && (rectAttributes.shadowBlur || rectAttributes.lineWidth)) {\n // const deltaX = (rectAttributes.shadowBlur ?? 0) + (borderLeft + borderRight) / 2;\n // const deltaY = (rectAttributes.shadowBlur ?? 0) + (borderTop + borderBottom) / 2;\n\n // groupAttributes.x = deltaX;\n // groupAttributes.y = deltaY;\n // // 宽度高度在tableNoFrameWidth&tableNoFrameHeight中处理\n // // groupAttributes.width = group.attribute.width - deltaX - deltaX;\n // // groupAttributes.height = group.attribute.height - deltaY - deltaY;\n // }\n group.setAttributes(groupAttributes);\n\n if (justForXYPosition) {\n return;\n }\n\n if (rectAttributes.stroke) {\n rectAttributes.x = borderLeft / 2;\n rectAttributes.y = borderTop / 2;\n rectAttributes.pickable = false;\n if (isTableGroup) {\n if (cornerRadius) {\n if (Array.isArray(cornerRadius)) {\n const cornerRadiusArr = getQuadProps(cornerRadius);\n rectAttributes.cornerRadius = cornerRadiusArr;\n groupAttributes.cornerRadius = cornerRadiusArr;\n cornerRadiusArr[0] && (cornerRadiusArr[0] = cornerRadiusArr[0] + Math.min(borderLeft, borderTop) / 2);\n cornerRadiusArr[1] && (cornerRadiusArr[1] = cornerRadiusArr[1] + Math.min(borderTop, borderRight) / 2);\n cornerRadiusArr[2] && (cornerRadiusArr[2] = cornerRadiusArr[2] + Math.min(borderRight, borderBottom) / 2);\n cornerRadiusArr[3] && (cornerRadiusArr[3] = cornerRadiusArr[3] + Math.min(borderBottom, borderLeft) / 2);\n } else if (isArray(borderLineWidth)) {\n const cornerRadiusArr: number[] = [];\n rectAttributes.cornerRadius = cornerRadiusArr;\n groupAttributes.cornerRadius = cornerRadiusArr;\n cornerRadiusArr[0] = cornerRadius + Math.min(borderLeft, borderTop) / 2;\n cornerRadiusArr[1] = cornerRadius + Math.min(borderTop, borderRight) / 2;\n cornerRadiusArr[2] = cornerRadius + Math.min(borderRight, borderBottom) / 2;\n cornerRadiusArr[3] = cornerRadius + Math.min(borderBottom, borderLeft) / 2;\n } else {\n rectAttributes.cornerRadius = cornerRadius + (rectAttributes.lineWidth ?? 0) / 2;\n groupAttributes.cornerRadius = cornerRadius + (rectAttributes.lineWidth ?? 0) / 2;\n }\n }\n if (frameTheme.innerBorder) {\n rectAttributes.x = group.attribute.x + borderLeft / 2;\n rectAttributes.y = group.attribute.y + borderTop / 2;\n rectAttributes.width = group.attribute.width - borderLeft / 2 - borderRight / 2;\n rectAttributes.height = group.attribute.height - borderTop / 2 - borderBottom / 2;\n } else {\n rectAttributes.x = group.attribute.x - borderLeft / 2;\n rectAttributes.y = group.attribute.y - borderTop / 2;\n rectAttributes.width = group.attribute.width + borderLeft / 2 + borderRight / 2;\n rectAttributes.height = group.attribute.height + borderTop / 2 + borderBottom / 2;\n }\n\n let shadowRect;\n let borderRect;\n if (hasShadow) {\n rectAttributes.fill = 'white';\n (rectAttributes as any).notAdjustPos = true;\n // rectAttributes.globalCompositeOperation = 'source-over';\n\n // first draw group\n borderRect = createGroup(rectAttributes);\n borderRect.name = 'table-border-rect';\n\n // second draw rect\n shadowRect = createRect({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: group.attribute.width,\n height: group.attribute.height,\n fill: 'red',\n cornerRadius: group.attribute.cornerRadius,\n globalCompositeOperation: 'destination-out'\n });\n borderRect.addChild(shadowRect);\n\n // hack for vrender globalCompositeOperation&clip render problem\n const hackRect = createRect({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: group.attribute.width,\n height: group.attribute.height,\n fill: 'transparent',\n pickable: false,\n globalCompositeOperation: 'source-over'\n });\n borderRect.addChild(hackRect);\n } else {\n borderRect = createRect(rectAttributes);\n borderRect.name = 'table-border-rect';\n }\n\n // to be fixed: border index in shadow mode\n if (frameTheme.innerBorder && !hasShadow) {\n group.parent.insertAfter(borderRect, group);\n } else {\n group.parent.insertBefore(borderRect, group);\n }\n (group as any).border = borderRect;\n } else {\n // rectAttributes.x = rectAttributes.lineWidth / 2;\n // rectAttributes.y = rectAttributes.lineWidth / 2;\n rectAttributes.width = group.attribute.width - borderLeft / 2 - borderRight / 2;\n rectAttributes.height = group.attribute.height - borderTop / 2 - borderBottom / 2;\n const borderRect = createRect(rectAttributes);\n borderRect.name = 'border-rect';\n group.addChild(borderRect);\n (group as any).border = borderRect;\n }\n } else {\n const borderRect = createRect({\n fill: false,\n stroke: false,\n pickable: false,\n lineWidth: 0\n });\n borderRect.name = 'border-rect';\n group.addChild(borderRect);\n (group as any).border = borderRect;\n }\n}\n\n/**\n * @description: update frame border stroke atrribute\n * @param {Group} group\n * @param {TableFrameStyle} frameTheme\n * @param {array} strokeArray stroke boolean array\n * @return {*}\n */\nexport function updateFrameBorder(\n group: Group,\n frameTheme: TableFrameStyle | undefined,\n strokeArray?: [boolean, boolean, boolean, boolean] // to do 处理成0b001111形式\n) {\n if (!frameTheme) {\n return;\n }\n const { borderColor } = frameTheme;\n group.border?.setAttribute('stroke', getStroke(borderColor, strokeArray));\n}\n\nexport function getStroke(\n borderColor: string | string[],\n strokeArray: boolean[] | undefined,\n strokeLineWidth?: number | number[]\n) {\n let stroke: boolean | string | (boolean | string)[] = true;\n if ((strokeArray || isArray(strokeLineWidth)) && !isArray(borderColor)) {\n stroke = (strokeArray ?? (strokeLineWidth as number[])).map(stroke => {\n if (stroke) {\n return borderColor;\n }\n return false;\n });\n } else if (strokeArray) {\n stroke = strokeArray;\n } else if (!strokeArray && !isArray(borderColor)) {\n stroke = borderColor;\n } else if (isArray(borderColor)) {\n stroke = true;\n }\n return stroke;\n}\n\n/**\n * @description: update frame border size when group size change\n * @param {Group} group\n * @return {*}\n */\nexport function updateFrameBorderSize(group: Group) {\n if (!group.border) {\n return;\n }\n const borderTop = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[0]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderRight = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[1]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderBottom = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[2]\n : (group.border.attribute.lineWidth as number) ?? 0;\n const borderLeft = (group.border.attribute as any).strokeArrayWidth\n ? (group.border.attribute as any).strokeArrayWidth[3]\n : (group.border.attribute.lineWidth as number) ?? 0;\n\n group.border.setAttributes({\n width: group.attribute.width - borderLeft / 2 - borderRight / 2,\n height: group.attribute.height - borderTop / 2 - borderBottom / 2\n });\n\n if (group.border.type === 'group') {\n (group.border.firstChild as IRect).setAttributes({\n width: group.attribute.width,\n height: group.attribute.height\n });\n }\n}\n\nexport function updateCornerRadius(table: BaseTableAPI) {\n if (!table.theme.frameStyle.cornerRadius) {\n return;\n }\n const cornerRadius = table.theme.frameStyle.cornerRadius;\n const {\n cornerHeaderGroup,\n colHeaderGroup,\n rowHeaderGroup,\n bodyGroup,\n rightTopCornerGroup,\n leftBottomCornerGroup,\n rightBottomCornerGroup,\n rightFrozenGroup,\n bottomFrozenGroup\n } = table.scenegraph;\n\n // reset corner radius\n cornerHeaderGroup.setAttribute('cornerRadius', 0);\n colHeaderGroup.setAttribute('cornerRadius', 0);\n rowHeaderGroup.setAttribute('cornerRadius', 0);\n bodyGroup.setAttribute('cornerRadius', 0);\n rightTopCornerGroup.setAttribute('cornerRadius', 0);\n leftBottomCornerGroup.setAttribute('cornerRadius', 0);\n rightBottomCornerGroup.setAttribute('cornerRadius', 0);\n rightFrozenGroup.setAttribute('cornerRadius', 0);\n bottomFrozenGroup.setAttribute('cornerRadius', 0);\n\n const cornerRadiusArray = toBoxArray(cornerRadius);\n // left top\n if (cornerHeaderGroup.attribute.width > 0 && cornerHeaderGroup.attribute.height > 0) {\n setCornerRadius(cornerHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else if (colHeaderGroup.attribute.height > 0) {\n setCornerRadius(colHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else if (rowHeaderGroup.attribute.width > 0) {\n setCornerRadius(rowHeaderGroup, [cornerRadiusArray[0], 0, 0, 0]);\n } else {\n setCornerRadius(bodyGroup, [cornerRadiusArray[0], 0, 0, 0]);\n }\n\n // left bottom\n if (leftBottomCornerGroup.attribute.width > 0 && leftBottomCornerGroup.attribute.height > 0) {\n setCornerRadius(leftBottomCornerGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else if (bottomFrozenGroup.attribute.height > 0) {\n setCornerRadius(bottomFrozenGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else if (rowHeaderGroup.attribute.width > 0) {\n setCornerRadius(rowHeaderGroup, [0, 0, 0, cornerRadiusArray[3]]);\n } else {\n setCornerRadius(bodyGroup, [0, 0, 0, cornerRadiusArray[3]]);\n }\n\n // right top\n if (rightTopCornerGroup.attribute.width > 0 && rightTopCornerGroup.attribute.height > 0) {\n setCornerRadius(rightTopCornerGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else if (colHeaderGroup.attribute.height > 0) {\n setCornerRadius(colHeaderGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else if (rightFrozenGroup.attribute.width > 0) {\n setCornerRadius(rightFrozenGroup, [0, cornerRadiusArray[1], 0, 0]);\n } else {\n setCornerRadius(bodyGroup, [0, cornerRadiusArray[1], 0, 0]);\n }\n\n // right bottom\n if (rightBottomCornerGroup.attribute.width > 0 && rightBottomCornerGroup.attribute.height > 0) {\n setCornerRadius(rightBottomCornerGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else if (rightFrozenGroup.attribute.width > 0) {\n setCornerRadius(rightFrozenGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else if (bottomFrozenGroup.attribute.height > 0) {\n setCornerRadius(bottomFrozenGroup, [0, 0, cornerRadiusArray[2], 0]);\n } else {\n setCornerRadius(bodyGroup, [0, 0, cornerRadiusArray[2], 0]);\n }\n}\n\nfunction setCornerRadius(group: Group, cornerRadius: number[]) {\n group.setAttribute('cornerRadius', cornerRadius);\n if (group.border) {\n group.border.setAttribute('cornerRadius', cornerRadius);\n }\n}\n","import type { GraphicType, IGroupGraphicAttribute, Stage } from './../../vrender';\nimport { genNumberType, Group } from './../../vrender';\nimport { Bounds, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { PivotChart } from '../../PivotChart';\n\ninterface IChartGraphicAttribute extends IGroupGraphicAttribute {\n canvas: HTMLCanvasElement;\n dataId: string | Record; //如果是spec外层的dataId,则是string,否则通过series获取到的是Record \n data: any;\n spec: any;\n axes: any;\n ClassType: any;\n chartInstance: any;\n cellPadding: number[];\n mode: string;\n modeParams: any;\n dpr: number;\n // viewBox: {\n // x1: number;\n // y1: number;\n // x2: number;\n // y2: number;\n // };\n tableChartOption: any;\n col?: number;\n row?: number;\n}\n\nexport const CHART_NUMBER_TYPE = genNumberType();\n\nexport class Chart extends Group {\n type: GraphicType = 'chart' as any;\n declare attribute: IChartGraphicAttribute;\n chartInstance: any;\n activeChartInstance: any;\n active: boolean;\n cacheCanvas: HTMLCanvasElement | { x: number; y: number; width: number; height: number; canvas: HTMLCanvasElement }[]; // HTMLCanvasElement\n isShareChartSpec: boolean; //针对chartSpec用户配置成函数形式的话 就不需要存储chartInstance了 会太占内存,使用这个变量 当渲染出缓存图表会就删除chartInstance实例\n constructor(isShareChartSpec: boolean, params: IChartGraphicAttribute) {\n super(params);\n this.numberType = CHART_NUMBER_TYPE;\n this.isShareChartSpec = isShareChartSpec;\n // 创建chart\n if (!params.chartInstance) {\n const chartInstance = (this.chartInstance = new params.ClassType(\n params.spec,\n merge({}, this.attribute.tableChartOption, {\n renderCanvas: params.canvas,\n mode: this.attribute.mode === 'node' ? 'node' : 'desktop-browser',\n modeParams: this.attribute.modeParams,\n canvasControled: false,\n viewBox: { x1: 0, x2: 0, y1: 0, y2: 0 },\n dpr: params.dpr,\n // viewBox: params.viewBox,\n // viewBox: this.getViewBox(),\n // viewBox: {\n // x1: params.cellPadding[3],\n // x2: params.width - params.cellPadding[1],\n // y1: params.cellPadding[0],\n // y2: params.height - params.cellPadding[2]\n // },\n interactive: false,\n animation: false,\n autoFit: false\n })\n ));\n chartInstance.renderSync();\n chartInstance.getStage().enableDirtyBounds();\n params.chartInstance = this.chartInstance = chartInstance;\n } else {\n this.chartInstance = params.chartInstance;\n }\n\n // this.chart.load().then((cache) => {\n // this.cacheCanvas = cache;\n // this.deactivate();\n // });\n }\n\n // onBeforeAttributeUpdate() {\n // if (arguments[2] === y) {\n // debugger;\n // }\n // }\n /**\n * 激活该图表元素\n * @param table\n */\n activate(table: BaseTableAPI) {\n this.active = true;\n const { col, row } = this.parent;\n // this.chart = new TestChart(this.attribute.spec);\n // const ctx = this.attribute.canvas.getContext('2d');\n // const { x1, y1, x2, y2 } = this.attribute.viewBox;\n const { x1, y1, x2, y2 } = this.getViewBox();\n //获取渲染区域的bound 考虑被表头遮住部分的情况\n const tableBound = getTableBounds(col, row, table);\n const clipBound = tableBound.intersect({\n x1: x1 - table.scrollLeft,\n x2: x2 - table.scrollLeft,\n y1: y1 - table.scrollTop,\n y2: y2 - table.scrollTop\n });\n this.activeChartInstance = new this.attribute.ClassType(\n this.attribute.spec,\n merge({}, this.attribute.tableChartOption, {\n // disableDirtyBounds: true,\n renderCanvas: this.attribute.canvas,\n mode: 'desktop-browser',\n canvasControled: false,\n // viewBox: {\n // x1: x1 - table.scrollLeft,\n // x2: x2 - table.scrollLeft,\n // y1: y1 - table.scrollTop,\n // y2: y2 - table.scrollTop\n // },\n viewBox: {\n x1: 0,\n x2: x2 - x1,\n y1: 0,\n y2: y2 - y1\n },\n dpr: table.internalProps.pixelRatio,\n animation: false,\n interactive: true,\n autoFit: false, //控制当容器变化大小时vchart实例不应响应事件进行内部处理\n beforeRender: (chartStage: Stage) => {\n const stage = this.stage;\n const ctx = chartStage.window.getContext();\n const stageMatrix = stage.window.getViewBoxTransform();\n const viewBox = stage.window.getViewBox();\n ctx.inuse = true;\n // ctx.save();\n // console.log(ctx.getImageData(0, 0, 100, 100));\n ctx.clearMatrix();\n ctx.setTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f,\n true\n );\n ctx.translate(viewBox.x1, viewBox.y1);\n ctx.setTransformForCurrent(true); // 替代原有的chart viewBox\n ctx.beginPath();\n ctx.rect(clipBound.x1, clipBound.y1, clipBound.x2 - clipBound.x1, clipBound.y2 - clipBound.y1);\n ctx.clip();\n ctx.clearMatrix();\n\n if (table.options.canvas && !(chartStage as any).needRender) {\n // 在使用viewbox局部渲染时,activate单独渲染chart stage,可能导致外部stage场景层级错乱\n // 此时触发整个表格的重绘,外部stage场景可以通过table的beforeRender配置触发更上一级的重绘\n chartStage.pauseRender();\n table.scenegraph.stage.dirtyBounds.union(this.globalAABBBounds);\n table.scenegraph.updateNextFrame();\n }\n },\n afterRender(stage: any) {\n const ctx = stage.window.getContext();\n ctx.inuse = false;\n\n stage.needRender = false;\n chartStage.resumeRender();\n }\n })\n );\n const chartStage = this.activeChartInstance.getStage();\n // chartStage.needRender = true;\n // chartStage.background = 'red';\n const matrix = this.globalTransMatrix.clone();\n const stageMatrix = this.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n chartStage.window.setViewBoxTransform &&\n chartStage.window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n\n // this.activeChartInstance.updateData('data', this.attribute.data);\n this.activeChartInstance.renderSync();\n\n (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(this.activeChartInstance);\n this.activeChartInstance.on('click', (params: any) => {\n if (this.attribute.spec.select?.enable === false) {\n table.scenegraph.updateChartState(null);\n } else if (Chart.temp) {\n table.scenegraph.updateChartState(params?.datum);\n }\n });\n this.activeChartInstance.on('brushEnd', (params: any) => {\n table.scenegraph.updateChartState(params?.value?.inBrushData);\n Chart.temp = 0;\n setTimeout(() => {\n Chart.temp = 1;\n }, 0);\n });\n (table as PivotChart)._bindChartEvent?.(this.activeChartInstance);\n }\n static temp: number = 1;\n /**\n * 图表失去焦点\n * @param table\n */\n deactivate() {\n this.active = false;\n // move active chart view box out of browser view\n // to avoid async render when chart is releasd\n this.activeChartInstance?.updateViewBox(\n {\n x1: -1000,\n x2: -800,\n y1: -1000,\n y2: -800\n },\n false,\n false\n );\n this.activeChartInstance?.release();\n this.activeChartInstance = null;\n }\n /** 更新图表对应数据 */\n updateData(data: any) {\n this.attribute.data = data;\n }\n\n getViewBox(): {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n } {\n const cellGroup = this.parent as Group;\n const padding = this.attribute.cellPadding;\n const table = (this.stage as any).table as BaseTableAPI;\n\n const { x1, y1, x2, y2 } = cellGroup.globalAABBBounds;\n\n return {\n x1: Math.ceil(x1 + padding[3] + table.scrollLeft + (table.options.viewBox?.x1 ?? 0)),\n x2: Math.ceil(x1 + cellGroup.attribute.width - padding[1] + table.scrollLeft + (table.options.viewBox?.x1 ?? 0)),\n y1: Math.ceil(y1 + padding[0] + table.scrollTop + (table.options.viewBox?.y1 ?? 0)),\n y2: Math.ceil(y1 + cellGroup.attribute.height - padding[2] + table.scrollTop + (table.options.viewBox?.y1 ?? 0))\n };\n }\n}\n\nfunction getTableBounds(col: number, row: number, table: BaseTableAPI) {\n const { layoutMap } = table.internalProps;\n const bodyBound = new Bounds();\n const tableBound = table.scenegraph.tableGroup.globalAABBBounds;\n bodyBound.x1 = tableBound.x1;\n bodyBound.x2 = tableBound.x2;\n bodyBound.y1 = tableBound.y1;\n bodyBound.y2 = tableBound.y2;\n if (\n layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightTopCorner(col, row) ||\n layoutMap.isLeftTopCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row)\n ) {\n // frozen cornor\n } else if (layoutMap.isFrozenColumn(col, row)) {\n // left frozen\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n } else if (layoutMap.isFrozenRow(col, row)) {\n // top frozen\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n } else if (layoutMap.isRightFrozenColumn(col, row)) {\n // right frozen\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n } else if (layoutMap.isBottomFrozenRow(col, row)) {\n // bottom frozen\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n } else if (!layoutMap.isFrozenColumn(col, row) && !layoutMap.isRightFrozenColumn(col, row)) {\n // no frozen body\n bodyBound.x1 = tableBound.x1 + table.getFrozenColsWidth();\n bodyBound.x2 = tableBound.x2 - table.getRightFrozenColsWidth();\n bodyBound.y1 = tableBound.y1 + table.getFrozenRowsHeight();\n bodyBound.y2 = tableBound.y2 - table.getBottomFrozenRowsHeight();\n }\n\n bodyBound.x1 = bodyBound.x1 + (table.options.viewBox?.x1 ?? 0);\n bodyBound.x2 = bodyBound.x2 + (table.options.viewBox?.x1 ?? 0);\n bodyBound.y1 = bodyBound.y1 + (table.options.viewBox?.y1 ?? 0);\n bodyBound.y2 = bodyBound.y2 + (table.options.viewBox?.y1 ?? 0);\n\n return bodyBound;\n}\n","import { container, VWindow, type IStage, type IWindow } from './../../../vrender';\nimport type { Chart } from '../chart';\nimport type { IAABBBounds } from '@visactor/vutils';\nimport { Bounds, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nexport const cancelRenderChartQueue = false;\nexport const chartRenderKeys: string[] = [];\nexport const chartRenderQueueList: Chart[] = [];\ninterface chartRenderQueueItem {\n chart: Chart;\n}\n//每次消费的图表数量\nlet batchRenderChartCount = 5;\nlet isHandlingChartQueue = false;\nexport function setBatchRenderChartCount(count: number) {\n if (isValid(count)) {\n batchRenderChartCount = count;\n }\n}\nexport function IsHandlingChartQueue() {\n return isHandlingChartQueue;\n}\nexport function renderChart(chart: Chart) {\n const { axes, dataId, data, spec, ClassType, canvas, mode, modeParams, dpr } = chart.attribute;\n let { chartInstance } = chart;\n if (!chartInstance) {\n chartInstance = new ClassType(spec, {\n renderCanvas: canvas,\n mode: mode === 'node' ? 'node' : 'desktop-browser',\n modeParams: modeParams,\n canvasControled: false,\n viewBox: { x1: 0, x2: 0, y1: 0, y2: 0 },\n dpr: dpr,\n interactive: false,\n animation: false,\n autoFit: false\n });\n chartInstance.renderSync();\n chart.chartInstance = chartInstance;\n }\n const viewBox = chart.getViewBox();\n\n // avoid canvas size 0\n if (viewBox.x2 <= viewBox.x1) {\n viewBox.x2 = viewBox.x1 + 1;\n }\n if (viewBox.y2 <= viewBox.y1) {\n viewBox.y2 = viewBox.y1 + 1;\n }\n\n // use vrender trasnform, viewbox starts from 0,0\n chartInstance.updateViewBox(\n // {\n // x1: viewBox.x1 - (chart.getRootNode() as any).table.scrollLeft,\n // x2: viewBox.x2 - (chart.getRootNode() as any).table.scrollLeft,\n // y1: viewBox.y1 - (chart.getRootNode() as any).table.scrollTop,\n // y2: viewBox.y2 - (chart.getRootNode() as any).table.scrollTop\n // },\n {\n x1: 0,\n x2: viewBox.x2 - viewBox.x1,\n y1: 0,\n y2: viewBox.y2 - viewBox.y1\n },\n false,\n false\n );\n\n const chartStage = chartInstance.getStage();\n const matrix = chart.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n chartStage.window.setViewBoxTransform &&\n chartStage.window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n // to be fixed: update state everytimes render, need be fix by vchart\n // 测试的没发现问题 这里应该能去掉吧 留着每次都要调用一次\n // const table = (chart.getRootNode() as any).table as BaseTableAPI;\n // (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(chartInstance);\n\n const { table } = chart.getRootNode() as any;\n\n let updateSpec = false;\n if (table.options.specFormat) {\n const formatResult = table.options.specFormat(chart.attribute.spec, chartInstance, chart);\n if (formatResult.needFormatSpec && formatResult.spec) {\n const spec = formatResult.spec;\n chartInstance.updateSpecSync(spec);\n updateSpec = formatResult.updateSpec ?? true;\n }\n }\n\n if (!updateSpec) {\n axes?.forEach((axis: any, index: number) => {\n if (axis.type === 'band') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._spec.domain = axis.domain.slice(0);\n // chartAxis.updateScaleDomain();\n chartInstance.updateModelSpec({ type: 'axes', index }, { domain: axis.domain.slice(0) }, true);\n } else {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._domain = {\n // min: axis.range?.min ?? 0,\n // max: axis.range?.max ?? 0\n // };\n chartInstance.updateModelSpecSync(\n { type: 'axes', index },\n {\n min: axis.range?.min ?? 0,\n max: axis.range?.max ?? 0,\n tick: {\n tickMode: axis.tick?.tickMode\n }\n },\n true\n );\n }\n });\n\n // to be fixed: update state everytimes render, need be fix by vchart\n (table.internalProps.layoutMap as any)?.updateDataStateToActiveChartInstance?.(chartInstance);\n\n if (typeof dataId === 'string') {\n chartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n // 判断是否有updateFullDataSync 木有的话 还是循环调用updateDataSync\n if (!chartInstance.updateFullDataSync) {\n chartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n chartInstance.updateFullDataSync?.(dataBatch);\n }\n }\n\n const sg = chartInstance.getStage();\n cacheStageCanvas(sg, chart);\n // chart.cacheCanvas = sg.toCanvas();\n\n // debugger;\n // chart.cacheCanvas[] = sg.toCanvas(fullImage, viewBox);\n // chart.cacheCanvas = sg.toCanvas(false, {\n // x1: 0,\n // y1: 0,\n // x2: 500,\n // y2: 300,\n // width: () => 500,\n // height: () => 300\n // });\n // 截图空白问题 因为开启了动画 首屏截图是无数据的TODO\n}\n\nexport function startRenderChartQueue(table: any) {\n isHandlingChartQueue = true;\n\n // 检查是否还有未渲染的图表\n if (chartRenderQueueList.length > 0) {\n // 使用 requestAnimationFrame 或 setTimeout 来调度下一批图表的渲染\n // requestAnimationFrame(() => renderChartQueue(table));\n requestAnimationFrame(() => {\n // 从集合中获取要渲染的图表上下文\n const chartsToRender = chartRenderQueueList.splice(0, batchRenderChartCount);\n chartRenderKeys.splice(0, batchRenderChartCount);\n // 渲染图表\n chartsToRender.forEach(chart => {\n // 在正确的位置渲染图表\n renderChart(chart);\n chart.addUpdateBoundTag();\n });\n table.render();\n startRenderChartQueue(table);\n });\n // setTimeout(() => {\n // // debugger;\n // renderChartQueue(table);\n // }, 0);\n } else {\n isHandlingChartQueue = false;\n }\n}\n\nconst cacheCanvasSizeLimit = 2000;\nfunction cacheStageCanvas(stage: IStage, chart: Chart) {\n const { viewWidth, viewHeight } = stage;\n if (viewWidth < cacheCanvasSizeLimit && viewHeight < cacheCanvasSizeLimit) {\n chart.cacheCanvas = toCanvas(stage);\n if (!chart.isShareChartSpec) {\n // 不能整列共享chart的情况 生成完图片后即将chartInstance清除\n chart.chartInstance?.release();\n chart.chartInstance = null;\n chart.setAttribute('chartInstance', null);\n }\n return;\n }\n\n const rows = Math.ceil(viewHeight / cacheCanvasSizeLimit);\n const columns = Math.ceil(viewWidth / cacheCanvasSizeLimit);\n\n const cacheCanvas = [];\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n const startX = col * cacheCanvasSizeLimit;\n const startY = row * cacheCanvasSizeLimit;\n const endX = startX + cacheCanvasSizeLimit > viewWidth ? viewWidth : startX + cacheCanvasSizeLimit;\n const endY = startY + cacheCanvasSizeLimit > viewHeight ? viewHeight : startY + cacheCanvasSizeLimit;\n const width = endX - startX;\n const height = endY - startY;\n const bounds = new Bounds();\n bounds.setValue(startX, startY, endX, endY);\n\n const canvas = toCanvas(stage, false, bounds);\n cacheCanvas.push({\n canvas,\n x: startX,\n y: startY,\n width,\n height\n });\n }\n }\n\n chart.cacheCanvas = cacheCanvas;\n}\n\nfunction toCanvas(stage: IStage, fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n if ((stage as any).releaseStatus === 'released') {\n return null;\n }\n const matrix = stage.window.getViewBoxTransform();\n const window = renderToNewWindow(stage, fullImage, viewBox);\n window.setViewBoxTransform(matrix.a, matrix.b, matrix.c, matrix.d, 0, 0);\n (stage as any).renderTo(window);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n}\n\nfunction renderToNewWindow(stage: IStage, fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n const matrix = stage.window.getViewBoxTransform();\n const window = container.get(VWindow);\n const x1 = viewBox ? -viewBox.x1 : 0;\n const y1 = viewBox ? -viewBox.y1 : 0;\n const x2 = viewBox ? viewBox.x2 : stage.viewWidth;\n const y2 = viewBox ? viewBox.y2 : stage.viewHeight;\n const width = viewBox ? viewBox.width() : stage.viewWidth;\n const height = viewBox ? viewBox.height() : stage.viewHeight;\n if (fullImage) {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width: width * matrix.a,\n height: height * matrix.d,\n dpr: stage.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n window.create({\n viewBox: { x1, y1, x2, y2 },\n width: width * matrix.a,\n height: height * matrix.d,\n dpr: stage.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n (stage as any).renderTo(window);\n return window;\n}\n","import type {\n IGraphicAttribute,\n IContext2d,\n IDrawContext,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from './../../../vrender';\nimport {\n ContributionProvider,\n getTheme,\n IGroupRenderContribution,\n createImage,\n inject,\n injectable,\n named,\n BaseRender\n} from './../../../vrender';\nimport type { Chart } from '../chart';\nimport { CHART_NUMBER_TYPE } from '../chart';\nimport {\n IsHandlingChartQueue,\n chartRenderKeys,\n chartRenderQueueList,\n renderChart,\n startRenderChartQueue\n} from './chart-render-helper';\nimport { isArray } from '@visactor/vutils';\n\nexport const ChartRender = Symbol.for('ChartRender');\nexport const ChartRenderContribution = Symbol.for('ChartRenderContribution');\n\n@injectable()\nexport class DefaultCanvasChartRender extends BaseRender implements IGraphicRender {\n type: 'chart';\n numberType: number = CHART_NUMBER_TYPE;\n\n drawShape(\n chart: Chart,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // console.log(chart.parent.col, chart.parent.row);\n // if (chart.parent.col !== 2 || chart.parent.row !== 2) {\n // return;\n // }\n const groupAttribute = getTheme(chart, params?.theme).group;\n\n const { dataId, data, spec } = chart.attribute;\n const viewBox = chart.getViewBox();\n const { width = groupAttribute.width, height = groupAttribute.height } = chart.attribute;\n const { table } = chart.getRootNode() as any;\n\n const { active, cacheCanvas, activeChartInstance } = chart;\n // console.log('render chart', chart.parent.col, chart.parent.row, viewBox, cacheCanvas);\n if (!active && cacheCanvas) {\n if (isArray(cacheCanvas)) {\n cacheCanvas.forEach(singleCacheCanvas => {\n const { x, y, width, height, canvas } = singleCacheCanvas;\n context.drawImage(canvas, x, y, width, height);\n });\n } else {\n context.drawImage(cacheCanvas, x, y, width, height);\n }\n } else if (activeChartInstance) {\n if (table.options.specFormat) {\n const formatResult = table.options.specFormat(chart.attribute.spec, activeChartInstance, chart);\n if (formatResult.needFormatSpec && formatResult.spec) {\n const spec = formatResult.spec;\n activeChartInstance.updateSpecSync(spec);\n // return;\n }\n }\n\n const viewBox = chart.getViewBox();\n activeChartInstance.updateViewBox(\n // {\n // x1: viewBox.x1 - (chart.getRootNode() as any).table.scrollLeft,\n // x2: viewBox.x2 - (chart.getRootNode() as any).table.scrollLeft,\n // y1: viewBox.y1 - (chart.getRootNode() as any).table.scrollTop,\n // y2: viewBox.y2 - (chart.getRootNode() as any).table.scrollTop\n // },\n {\n x1: 0,\n x2: viewBox.x2 - viewBox.x1,\n y1: 0,\n y2: viewBox.y2 - viewBox.y1\n },\n false,\n false\n );\n // console.log(viewBox);\n\n const chartStage = activeChartInstance.getStage();\n chartStage.needRender = true;\n // chartStage.background = 'red';\n const matrix = chart.globalTransMatrix.clone();\n const stageMatrix = chart.stage.window.getViewBoxTransform().clone();\n // matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n chartStage.window.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n\n if (typeof dataId === 'string') {\n activeChartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n // 如果是组合图有series系列 需要组个设置数据 这里的data包括的单元格完整数据 需要根据key过滤\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n if (!activeChartInstance.updateFullDataSync) {\n activeChartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n activeChartInstance.updateFullDataSync?.(dataBatch);\n }\n // debugger;\n // console.log(drawContext.context.canvas.toDataURL());\n } else {\n if (table.internalProps.renderChartAsync) {\n if (chartRenderKeys.indexOf(`${chart.parent.col}+${chart.parent.row}`) === -1) {\n chartRenderKeys.push(`${chart.parent.col}+${chart.parent.row}`);\n chartRenderQueueList.push(chart);\n }\n //判断是否已经开启渲染队列\n if (!IsHandlingChartQueue()) {\n startRenderChartQueue(table);\n }\n } else {\n renderChart(chart);\n }\n }\n }\n\n // draw(chart: Chart, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const { context } = drawContext;\n // if (!context) {\n // return;\n // }\n // // debugger;\n // const { clip } = chart.attribute;\n // if (clip) {\n // context.save();\n // } else {\n // context.highPerformanceSave();\n // }\n // // group直接transform\n // context.transformFromMatrix(chart.transMatrix, true);\n\n // context.beginPath();\n // // 如果跳过绘制,那就不绘制\n // if (params.skipDraw) {\n // this.drawShape(\n // chart,\n // context,\n // 0,\n // 0,\n // drawContext,\n // params,\n // () => false,\n // () => false\n // );\n // } else {\n // this.drawShape(chart, context, 0, 0, drawContext);\n // }\n\n // if (clip) {\n // context.restore();\n // } else {\n // context.highPerformanceRestore();\n // }\n // }\n draw(chart: Chart, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const circleAttribute = getTheme(circle, params?.theme).circle;\n this._draw(chart, {} as any, false, drawContext, params);\n }\n}\n","import type {\n IImage,\n IContext2d,\n IImageGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IImageRenderContribution,\n IDrawContext\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable } from './../../../vrender';\n\n/**\n * @description: image支持绘制部分形状\n * @return {*}\n */\n@injectable()\nexport class BeforeImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { shape } = image.attribute as any;\n\n if (shape === 'circle') {\n const { width = imageAttribute.width, height = imageAttribute.height } = image.attribute;\n\n context.beginPath();\n context.arc(x + width / 2, y + height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI);\n context.closePath();\n\n context.save();\n context.clip();\n }\n }\n}\n\n@injectable()\nexport class AfterImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { shape } = image.attribute as any;\n\n if (shape === 'circle') {\n context.restore();\n }\n }\n}\n\n/**\n * @description: image支持gif动态图片\n * @return {*}\n */\n@injectable()\nexport class BeforeGifImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { isGif } = image.attribute as any;\n\n if (isGif && image.playing) {\n image.attribute.opacity = 0; // hack for static image\n }\n }\n}\n\n@injectable()\nexport class AfterGifImageRenderContribution implements IImageRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n image: IImage,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n imageAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const { isGif } = image.attribute as any;\n\n if (isGif && image.playing) {\n image.attribute.opacity = 1; // hack for static image\n context.globalAlpha = image.attribute.opacity;\n image.renderFrame(context, x, y);\n }\n }\n}\n","import type { StateManager } from '../state';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ColumnDefine } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function getCellHoverColor(cellGroup: Group, table: BaseTableAPI): string | undefined {\n let colorKey;\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const key = isCellHover(table.stateManager, col, row, cellGroup);\n if (key && (!colorKey || key === 'cellBgColor')) {\n colorKey = key;\n }\n }\n }\n } else if (cellGroup.role === 'cell') {\n colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);\n }\n\n if (!colorKey) {\n return undefined;\n }\n\n let hoverStyle;\n const layout = table.internalProps.layoutMap;\n if (layout.isCornerHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.cornerHeaderStyle?.hover || table.theme.headerStyle?.hover;\n } else if (layout.isColumnHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.headerStyle?.hover;\n } else if (layout.isRowHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.rowHeaderStyle?.hover;\n } else if (layout.isBottomFrozenRow(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.bottomFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.headerStyle?.hover);\n } else if (layout.isRightFrozenColumn(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.rightFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.rowHeaderStyle?.hover);\n } else if (!table.isHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.bodyStyle?.hover;\n }\n const fillColor = getProp(colorKey, hoverStyle, cellGroup.col, cellGroup.row, table);\n return fillColor;\n}\n\nexport function isCellHover(state: StateManager, col: number, row: number, cellGroup: Group): string | undefined {\n const { highlightScope, disableHeader, cellPos } = state.hover;\n const table = state.table;\n\n const isHeader = table.isHeader(col, row);\n if (isHeader && disableHeader) {\n return undefined;\n }\n\n let hoverMode;\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && cellPos.col === col) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else {\n hoverMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && cellPos.row === row) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else {\n hoverMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (cellPos.col === col) {\n hoverMode = 'inlineColumnBgColor';\n } else if (cellPos.row === row) {\n hoverMode = 'inlineRowBgColor';\n }\n }\n\n if (hoverMode) {\n let cellDisable;\n if (isHeader) {\n const define = table.getHeaderDefine(col, row);\n cellDisable = (define as ColumnDefine)?.disableHeaderHover;\n\n if (cellGroup.firstChild && cellGroup.firstChild.name === 'axis' && table.options.hover?.disableAxisHover) {\n cellDisable = true;\n }\n } else {\n const define = table.getBodyColumnDefine(col, row);\n cellDisable = (define as ColumnDefine)?.disableHover;\n }\n\n if (cellDisable) {\n hoverMode = undefined;\n }\n }\n\n return hoverMode;\n}\n","import type { StateManager } from '../state';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CellRange, ColumnDefine } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { cellInRange } from '../../tools/helper';\n\nexport function getCellSelectColor(cellGroup: Group, table: BaseTableAPI): string | undefined {\n let colorKey;\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const key = isCellSelected(table.stateManager, col, row, cellGroup);\n if (key && (!colorKey || key === 'cellBgColor')) {\n colorKey = key;\n }\n }\n }\n } else if (cellGroup.role === 'cell') {\n colorKey = isCellSelected(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);\n }\n\n if (!colorKey) {\n return undefined;\n }\n\n let selectStyle;\n const layout = table.internalProps.layoutMap;\n if (layout.isCornerHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.cornerHeaderStyle?.select || table.theme.headerStyle?.select;\n } else if (layout.isColumnHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.headerStyle?.select;\n } else if (layout.isRowHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.rowHeaderStyle?.select;\n } else if (layout.isBottomFrozenRow(cellGroup.col, cellGroup.row)) {\n selectStyle =\n table.theme.bottomFrozenStyle?.select ||\n (table.isListTable() ? table.theme.bodyStyle?.select : table.theme.headerStyle?.select);\n } else if (layout.isRightFrozenColumn(cellGroup.col, cellGroup.row)) {\n selectStyle =\n table.theme.rightFrozenStyle?.select ||\n (table.isListTable() ? table.theme.bodyStyle?.select : table.theme.rowHeaderStyle?.select);\n } else if (!table.isHeader(cellGroup.col, cellGroup.row)) {\n selectStyle = table.theme.bodyStyle?.select;\n }\n const fillColor = getProp(colorKey, selectStyle, cellGroup.col, cellGroup.row, table);\n return fillColor;\n}\n\n// 选中多列\nfunction isSelectMultipleRange(range: CellRange) {\n return range.start.col !== range.end.col || range.start.row !== range.end.row;\n}\n\nfunction getSelectModeRange(state: StateManager, col: number, row: number) {\n let selectMode;\n const { highlightScope, cellPos, ranges } = state.select;\n const range = ranges[0];\n const rangeColStart = Math.min(range.start.col, range.end.col);\n const rangeColEnd = Math.max(range.start.col, range.end.col);\n const rangeRowStart = Math.min(range.start.row, range.end.row);\n const rangeRowEnd = Math.max(range.start.row, range.end.row);\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && col >= rangeColStart && col <= rangeColEnd) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && row >= rangeRowStart && row <= rangeRowEnd) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellInRange(ranges[0], col, row)) {\n selectMode = 'cellBgColor';\n } else if (col >= rangeColStart && col <= rangeColEnd) {\n selectMode = 'inlineColumnBgColor';\n } else if (row >= rangeRowStart && row <= rangeRowEnd) {\n selectMode = 'inlineRowBgColor';\n }\n }\n return selectMode;\n}\n\nfunction getSelectMode(state: StateManager, col: number, row: number) {\n let selectMode;\n const { highlightScope, cellPos } = state.select;\n\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && cellPos.col === col) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineColumnBgColor';\n }\n } else if (highlightScope === HighlightScope.row && cellPos.row === row) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else {\n selectMode = 'inlineRowBgColor';\n }\n } else if (highlightScope === HighlightScope.cross) {\n if (cellPos.col === col && cellPos.row === row) {\n selectMode = 'cellBgColor';\n } else if (cellPos.col === col) {\n selectMode = 'inlineColumnBgColor';\n } else if (cellPos.row === row) {\n selectMode = 'inlineRowBgColor';\n }\n }\n return selectMode;\n}\n\nexport function isCellSelected(state: StateManager, col: number, row: number, cellGroup: Group): string | undefined {\n const { highlightInRange, disableHeader, ranges } = state.select;\n let selectMode;\n const isSelectRange = ranges.length === 1 && isSelectMultipleRange(ranges?.[0]) && highlightInRange;\n if (\n isSelectRange\n ? ranges?.length === 1 && ranges[0].start && ranges[0].end\n : ranges?.length === 1 && ranges[0].end.col === ranges[0].start.col && ranges[0].end.row === ranges[0].start.row\n ) {\n const table = state.table;\n\n const isHeader = table.isHeader(col, row);\n if (isHeader && disableHeader) {\n return undefined;\n }\n\n selectMode = isSelectRange ? getSelectModeRange(state, col, row) : getSelectMode(state, col, row);\n\n if (selectMode) {\n const cellDisable = isCellDisableSelect(state.table, col, row);\n if (cellDisable) {\n selectMode = undefined;\n }\n }\n } else if (state.table.theme.selectionStyle.selectionFillMode === 'replace') {\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n const rangeColStart = Math.min(range.start.col, range.end.col);\n const rangeColEnd = Math.max(range.start.col, range.end.col);\n const rangeRowStart = Math.min(range.start.row, range.end.row);\n const rangeRowEnd = Math.max(range.start.row, range.end.row);\n if (rangeColStart <= col && rangeRowStart <= row && rangeColEnd >= col && rangeRowEnd >= row) {\n selectMode = 'cellBgColor';\n break;\n }\n }\n }\n return selectMode;\n}\n/**\n * 判断单元格是否禁用选择。先判断高优配置select.disableSelect。\n * 然后在根据如果是表头的话依次去判断select.disableHeaderSelect和column.disableHeaderSelect。\n * 不是表头的话去判断column.disableSelect。\n */\nexport function isCellDisableSelect(table: BaseTableAPI, col: number, row: number) {\n const globalDisableSelect = table.options.select?.disableSelect;\n const cellDisable =\n typeof globalDisableSelect === 'function' ? globalDisableSelect(col, row, table) : globalDisableSelect;\n if (cellDisable) {\n return true;\n }\n if (table.isHeader(col, row)) {\n let cellDisable = table.options.select?.disableHeaderSelect;\n if (cellDisable) {\n return true;\n }\n const columnDefine = table.getHeaderDefine(col, row);\n cellDisable = (columnDefine as ColumnDefine)?.disableHeaderSelect;\n if (cellDisable) {\n return true;\n }\n } else {\n const columnDefine = table.getBodyColumnDefine(col, row);\n const disableSelect = (columnDefine as ColumnDefine)?.disableSelect;\n const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n if (cellDisable) {\n return true;\n }\n }\n return false;\n}\n","import type {\n IGroup,\n IContext2d,\n IGroupGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext,\n IRectGraphicAttribute\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable, createRectPath } from './../../../vrender';\nimport type { Group } from '../group';\nimport { getCellHoverColor } from '../../../state/hover/is-cell-hover';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getCellMergeInfo } from '../../utils/get-cell-merge';\nimport { InteractionState } from '../../../ts-types';\nimport { isArray } from '@visactor/vutils';\nimport { getCellSelectColor } from '../../../state/select/is-cell-select-highlight';\nimport { renderStrokeWithCornerRadius } from './rect-contribution-render';\n\n// const highlightDash: number[] = [];\n\n// SplitGroupContribution处理分段渲染stroke\n// stroke/strokeArrayWidth/strokeArrayColor 为数组时调用\n@injectable()\nexport class SplitGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n stroke = groupAttribute.stroke,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n } = group.attribute as any;\n\n if (stroke && (Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n\n // if (highlightStroke) {\n // // 依据highlightStroke信息调整clip范围,以实现在单个单元格显示highlight border\n // let xDist = x;\n // let yDist = y;\n // let widthDist = width;\n // let heightDist = height;\n // if (highlightStroke[0] && highlightStrokeArrayWidth[0]) {\n // // top\n // yDist -= highlightStrokeArrayWidth[0] / 2;\n // heightDist += highlightStrokeArrayWidth[0] / 2;\n // }\n // if (highlightStroke[1] && highlightStrokeArrayWidth[1]) {\n // // right\n // widthDist += highlightStrokeArrayWidth[1] / 2;\n // }\n // if (highlightStroke[2] && highlightStrokeArrayWidth[2]) {\n // // bottom\n // heightDist += highlightStrokeArrayWidth[2] / 2;\n // }\n // if (highlightStroke[3] && highlightStrokeArrayWidth[3]) {\n // // left\n // xDist -= highlightStrokeArrayWidth[3] / 2;\n // widthDist += highlightStrokeArrayWidth[3] / 2;\n // }\n\n // context.beginPath();\n // context.rect(xDist, yDist, widthDist, heightDist);\n // }\n }\n}\n@injectable()\nexport class SplitGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n // 基础border\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n\n lineWidth = groupAttribute.lineWidth,\n strokeColor = groupAttribute.stroke,\n\n cornerRadius = groupAttribute.cornerRadius\n // // select & hover border\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (groupAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (groupAttribute as any).highlightStrokeArrayPart,\n } = group.attribute as any;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n\n // lineWidth === 0 不绘制\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n let widthForStroke: number;\n let heightForStroke: number;\n if (Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n if (\n (typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1))\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n const bottomRight = table?.theme?.cellBorderClipDirection === 'bottom-right';\n // let deltaWidth = 0;\n // let deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n }\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height),\n bottomRight\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n\n // 带不同stroke边框\n if (!(cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0)))) {\n // let lastStrokeI = 0;\n // let lastStroke: any;\n context.beginPath();\n // debugger;\n createRectPath(\n context,\n x,\n y,\n widthForStroke,\n heightForStroke,\n cornerRadius,\n new Array(4).fill(0).map((_, i) => (x1: number, y1: number, x2: number, y2: number) => {\n renderStrokeWithCornerRadius(\n i,\n x1,\n y1,\n x2,\n y2,\n group,\n context,\n x,\n y,\n groupAttribute as any,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n widthForStroke,\n heightForStroke\n );\n })\n );\n\n context.stroke();\n } else {\n renderStroke(\n group,\n context,\n x,\n y,\n groupAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n // Math.ceil(width),\n // Math.ceil(height)\n widthForStroke,\n heightForStroke\n );\n }\n }\n }\n}\n\n/**\n * @description: 判断线宽是否需要分别渲染(线宽不同)\n * @param {number} widthArray\n * @return {*}\n */\nexport function getWidthInfo(widthArray: number[] | number) {\n if (!Array.isArray(widthArray)) {\n return {\n isSplitDraw: false,\n width: widthArray\n };\n }\n\n let temp;\n for (let i = 0; i < widthArray.length; i++) {\n const width = widthArray[i];\n if (width) {\n if (!temp) {\n temp = width;\n } else if (width !== temp) {\n return {\n isSplitDraw: true\n };\n }\n }\n }\n\n return {\n isSplitDraw: false,\n width: temp\n };\n}\n\nexport function renderStroke(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n groupAttribute: Required | Required,\n stroke: boolean | [boolean, boolean, boolean, boolean],\n strokeArrayWidth: [number, number, number, number] | undefined,\n strokeArrayColor: [string, string, string, string] | undefined,\n width: number,\n height: number,\n isHighlight?: boolean,\n part?: ([number, number] | undefined)[]\n) {\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n // 渲染部分线段,part: [[0, 0.5], undifined, undifined, undifined]\n // 同样上右下左,范围0-1,[0, 0.5]即只渲染前一半\n const isPart = Array.isArray(part);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // if (isHighlight) {\n // context.setLineDash(highlightDash);\n // }\n // const oldLineCap = context.lineCap;\n // context.lineCap = 'square';\n\n const { lineDash = groupAttribute.lineDash } = group.attribute as any;\n // const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length && lineDash.some((dash: number[] | null) => Array.isArray(dash))) {\n isDash = true;\n }\n // 单独处理每条边界,目前不考虑圆角\n context.beginPath();\n context.moveTo(x, y);\n\n const strokeTop = (isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0]);\n const strokeRight = (isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1]);\n const strokeBottom = (isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2]);\n const strokeLeft = (isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3]);\n\n // top\n if (strokeTop) {\n // context.lineTo(x + width, y);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n if (isPart && Array.isArray(part[0])) {\n context.moveTo(x - deltaLeft + (width + deltaLeft + deltaRight) * part[0][0], y);\n context.lineTo(x - deltaLeft + (width + deltaLeft + deltaRight) * (part[0][1] - part[0][0]), y);\n context.moveTo(x + width + deltaRight, y);\n } else {\n context.moveTo(x - deltaLeft, y);\n context.lineTo(x + width + deltaRight, y);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[0]) {\n context.strokeStyle = strokeArrayColor[0];\n } else if (strokeArrayColor && !strokeArrayColor[0]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[0] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y);\n }\n } else {\n context.moveTo(x + width, y);\n }\n // right\n if (strokeRight) {\n // context.lineTo(x + width, y + height);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n if (isPart && Array.isArray(part[1])) {\n context.moveTo(x + width, y - deltaTop + height * part[1][0]);\n context.lineTo(x + width, y - deltaTop + (height + deltaTop + deltaBottom) * (part[1][1] - part[1][0]));\n context.moveTo(x + width, y + height + deltaBottom);\n } else {\n context.moveTo(x + width, y - deltaTop);\n context.lineTo(x + width, y + height + deltaBottom);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[1]) {\n context.strokeStyle = strokeArrayColor[1];\n } else if (strokeArrayColor && !strokeArrayColor[1]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[1] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if (strokeBottom) {\n // context.lineTo(x, y + height);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n if (isPart && Array.isArray(part[2])) {\n context.moveTo(x - deltaLeft + (width + deltaLeft + deltaRight) * part[2][0], y + height);\n context.lineTo(x - deltaLeft + (width + deltaLeft + deltaRight) * (part[2][1] - part[2][0]), y + height);\n context.moveTo(x - deltaLeft, y + height);\n } else {\n context.moveTo(x - deltaLeft, y + height);\n context.lineTo(x + width + deltaRight, y + height);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[2]) {\n context.strokeStyle = strokeArrayColor[2];\n } else if (strokeArrayColor && !strokeArrayColor[2]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[2] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else {\n context.moveTo(x, y + height);\n }\n // left\n if (strokeLeft) {\n // context.lineTo(x, y);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n if (isPart && Array.isArray(part[3])) {\n context.moveTo(x, y - deltaTop + (height + deltaTop + deltaBottom) * part[3][0]);\n context.lineTo(x, y - deltaTop + (height + deltaTop + deltaBottom) * (part[3][1] - part[3][0]));\n context.moveTo(x, y - deltaTop);\n } else {\n context.moveTo(x, y - deltaTop);\n context.lineTo(x, y + height + deltaBottom);\n }\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[3]) {\n context.strokeStyle = strokeArrayColor[3];\n } else if (strokeArrayColor && !strokeArrayColor[3]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[3] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n context.lineDashOffset = 0;\n // context.lineCap = oldLineCap;\n context.setLineDash([]);\n}\n\n// DashGroupContribution处理虚线边框对齐\n// lineDash 为非空数组时调用\n@injectable()\nexport class DashGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth\n } = group.attribute as any;\n\n if (\n stroke &&\n Array.isArray(lineDash) &&\n lineDash.length &&\n lineDash[0]?.length &&\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth)\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n@injectable()\nexport class DashGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n lineWidth = groupAttribute.lineWidth\n } = group.attribute as any;\n\n if (\n !stroke ||\n !(Array.isArray(lineDash) && lineDash.length && lineDash[0]?.length) ||\n Array.isArray(strokeArrayColor) ||\n Array.isArray(strokeArrayWidth)\n ) {\n return;\n }\n\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n\n // convert lineDash to number[][]\n const splitLineDash = isArray(lineDash[0]) ? getQuadLineDash(lineDash) : [lineDash, lineDash, lineDash, lineDash];\n\n // const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n } else {\n width = Math.ceil(width);\n height = Math.ceil(height);\n }\n\n let widthForStroke;\n let heightForStroke;\n if (lineWidth & 1) {\n const bottomRight = table.theme.cellBorderClipDirection === 'bottom-right';\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight),\n bottomRight\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // 分段设置lineDashOffset,实现虚线边框对齐\n // top\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + widthForStroke, y);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.setLineDash(splitLineDash[0] ?? []);\n context.stroke();\n\n // right\n context.beginPath();\n context.moveTo(x + widthForStroke, y);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.setLineDash(splitLineDash[1] ?? []);\n context.stroke();\n\n // bottom\n context.beginPath();\n context.moveTo(x, y + heightForStroke);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.setLineDash(splitLineDash[2] ?? []);\n context.stroke();\n\n // left\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.setLineDash(splitLineDash[3] ?? []);\n context.stroke();\n\n context.lineDashOffset = 0;\n context.setLineDash([]);\n }\n}\n\n// AdjustPosGroupContribution处理线宽为奇数时stroke位置偏移0.5px\n// lineWidth 为奇数时调用\n@injectable()\nexport class AdjustPosGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos\n } = group.attribute as any;\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class AdjustPosGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos,\n cornerRadius = groupAttribute.cornerRadius\n } = group.attribute as any;\n\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n // width = Math.ceil(width);\n // height = Math.ceil(height);\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n // if (group.role === 'cell') {\n // const table = (group.stage as any).table as BaseTableAPI;\n // let col = (group as any).col as number;\n // let row = (group as any).row as number;\n // const mergeInfo = getCellMergeInfo(table, col, row);\n // if (mergeInfo) {\n // col = mergeInfo.end.col;\n // row = mergeInfo.end.row;\n // }\n\n // if (table && col === table.colCount - 1) {\n // width -= 1;\n // } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n // width -= 1;\n // }\n // if (table && row === table.rowCount - 1) {\n // height -= 1;\n // } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n // height -= 1;\n // }\n // }\n\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n if (table.options.customConfig?._disableColumnAndRowSizeRound) {\n width = Math.round(width);\n height = Math.round(height);\n }\n\n context.beginPath();\n\n const bottomRight = table?.theme?.cellBorderClipDirection === 'bottom-right';\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (bottomRight) {\n x = Math.floor(x) - 0.5;\n y = Math.floor(y) - 0.5;\n if (group.role === 'cell') {\n const col = (group as any).col as number;\n const row = (group as any).row as number;\n if (col === 0) {\n x += 1;\n }\n if (row === 0) {\n y += 1;\n }\n }\n } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height),\n bottomRight\n );\n\n if (cornerRadius) {\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, widthFroDraw + deltaWidth, heightFroDraw + deltaHeight, cornerRadius);\n } else {\n context.rect(x, y, widthFroDraw, heightFroDraw);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n context.stroke();\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'cell') {\n const table = (group.stage as any).table as BaseTableAPI;\n if (table) {\n const selectColor = getCellSelectColor(group as Group, table);\n if (selectColor) {\n // show select highlight when scrolling\n (group.attribute as any)._vtableHightLightFill = selectColor;\n } else if (table.stateManager.interactionState !== InteractionState.scrolling) {\n const hoverColor = getCellHoverColor(group as Group, table);\n if (hoverColor) {\n (group.attribute as any)._vtableHightLightFill = hoverColor;\n }\n }\n }\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group.attribute as any)._vtableHightLightFill) {\n if (fillCb) {\n // do nothing\n // fillCb(context, group.attribute, groupAttribute);\n } else if (fVisible) {\n const oldColor = group.attribute.fill;\n // draw hover fill\n group.attribute.fill = (group.attribute as any)._vtableHightLightFill as any;\n context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n context.fill();\n group.attribute.fill = oldColor;\n (group.attribute as any)._vtableHightLightFill = undefined;\n }\n }\n }\n}\n\n@injectable()\nexport class ClipBodyGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n xOrigin: number,\n yOrigin: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if (!table) {\n return;\n }\n\n if ((group as Group).role === 'body') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'row-header') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'col-header') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'right-frozen') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'bottom-frozen') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-right-top-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-right-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n } else if ((group as Group).role === 'corner-left-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n drawClipRect(context, x, y, width, height);\n }\n }\n}\n\nconst precision = Math.pow(2, 24);\n\nfunction drawClipRect(context: IContext2d, x: number, y: number, width: number, height: number) {\n context.beginPath();\n\n const matrix = context.applyedMatrix;\n if (Math.abs(matrix.f) > precision || Math.abs(matrix.g) > precision) {\n // hack for precision problem in CanvasRenderingContext2D\n // if position is too big, disable clip\n context.rect(x - precision, y - precision, width + precision * 2, height + precision * 2);\n } else {\n context.rect(x, y, width, height);\n }\n}\n\n// @injectable()\n// export class ClipBodyGroupAfterRenderContribution implements IGroupRenderContribution {\n// time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n// useStyle = true;\n// order = 0;\n// drawShape(\n// group: IGroup,\n// context: IContext2d,\n// x: number,\n// y: number,\n// doFill: boolean,\n// doStroke: boolean,\n// fVisible: boolean,\n// sVisible: boolean,\n// groupAttribute: Required,\n// drawContext: IDrawContext,\n// fillCb?: (\n// ctx: IContext2d,\n// markAttribute: Partial,\n// themeAttribute: IThemeAttribute\n// ) => boolean,\n// strokeCb?: (\n// ctx: IContext2d,\n// markAttribute: Partial,\n// themeAttribute: IThemeAttribute\n// ) => boolean\n// ) {\n// // 处理hover颜色\n// if ((group as Group).role === 'body') {\n// }\n// }\n// }\n\nfunction getCellSizeForDraw(group: any, width: number, height: number, bottomRight: boolean) {\n const table = group.stage.table as BaseTableAPI;\n if (!table) {\n return { width, height };\n }\n if (group.role === 'cell') {\n let col = group.col as number;\n let row = group.row as number;\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo) {\n col = mergeInfo.end.col;\n row = mergeInfo.end.row;\n }\n\n if (col === table.colCount - 1 && !bottomRight) {\n width -= 1;\n } else if (col === table.frozenColCount - 1 && table.scrollLeft && !bottomRight) {\n width -= 1;\n } else if (col === 0 && bottomRight) {\n width -= 1;\n }\n if (row === table.rowCount - 1 && !bottomRight) {\n height -= 1;\n } else if (row === table.frozenRowCount - 1 && table.scrollTop && !bottomRight) {\n height -= 1;\n } else if (row === 0 && bottomRight) {\n height -= 1;\n }\n } else if (group.role === 'corner-frozen') {\n if (table.scrollLeft && !bottomRight) {\n width -= 1;\n }\n if (table.scrollTop && !bottomRight) {\n height -= 1;\n }\n }\n\n return { width, height };\n}\n\nfunction getQuadLineDash(lineDash: number[][]) {\n if (lineDash.length === 1) {\n return [lineDash[0], lineDash[0], lineDash[0], lineDash[0]];\n } else if (lineDash.length === 2) {\n return [lineDash[0], lineDash[1], lineDash[0], lineDash[1]];\n }\n // 不考虑三个数的情况,三个数是用户传错了\n return lineDash;\n}\n","import type {\n IRect,\n IContext2d,\n IRectGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IRectRenderContribution,\n IGroup,\n IGroupGraphicAttribute,\n IDrawContext,\n ICustomPath2D\n} from './../../../vrender';\nimport { BaseRenderContributionTime, injectable } from './../../../vrender';\nimport { getWidthInfo, renderStroke } from './group-contribution-render';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { vec2, vec4 } from '@visactor/vutils';\nimport { abs, arrayEqual, halfPi, isArray, isNumber, pi } from '@visactor/vutils';\nimport { createRectPath } from '@visactor/vrender-core';\n\n@injectable()\nexport class SplitRectBeforeRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // const { stroke = rectAttribute.stroke } = group.attribute as any;\n\n // if (Array.isArray(stroke)) {\n // doFillOrStroke.doStroke = false;\n // }\n\n const {\n stroke = rectAttribute.stroke,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor\n } = rect.attribute as any;\n\n if (stroke && (Array.isArray(stroke) || Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class SplitRectAfterRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const {\n // width = rectAttribute.width,\n // height = rectAttribute.height,\n // stroke = rectAttribute.stroke\n // } = group.attribute as any;\n\n // if (!Array.isArray(stroke)) {\n // return;\n // }\n\n // context.setStrokeStyle(group, group.attribute, x, y, rectAttribute);\n // // 单独处理每条边界,目前不考虑圆角\n // context.beginPath();\n // context.moveTo(x, y);\n // // top\n // if (stroke[0]) {\n // context.lineTo(x + width, y);\n // } else {\n // context.moveTo(x + width, y);\n // }\n // // right\n // if (stroke[1]) {\n // context.lineTo(x + width, y + height);\n // } else {\n // context.moveTo(x + width, y + height);\n // }\n // // bottom\n // if (stroke[2]) {\n // context.lineTo(x, y + height);\n // } else {\n // context.moveTo(x, y + height);\n // }\n // // left\n // if (stroke[3]) {\n // // 没有close path是,起点和终点不连续,需要调整y保证不出现缺口\n // const adjustY = stroke[0] ? y - context.lineWidth / 2 : y;\n // context.lineTo(x, adjustY);\n // } else {\n // context.moveTo(x, y);\n // }\n\n // context.stroke();\n\n const {\n width = rectAttribute.width,\n height = rectAttribute.height,\n // 基础border\n stroke = rectAttribute.stroke,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n\n lineWidth = rectAttribute.lineWidth,\n strokeColor = rectAttribute.stroke,\n\n cornerRadius = rectAttribute.cornerRadius\n // // select & hover border\n // highlightStroke = (rectAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (rectAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (rectAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (rectAttribute as any).highlightStrokeArrayPart,\n } = rect.attribute as any;\n\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n if (Array.isArray(stroke) || Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n // let dx = 0;\n // let dy = 0;\n const deltaWidth = 0;\n const deltaHeight = 0;\n if (\n rect.name !== 'border-rect' && // border-rect not need offset\n rect.name !== 'table-border-rect' && // table-border-rect not need offset\n ((typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1)))\n ) {\n // const table = (rect.stage as any).table as BaseTableAPI;\n // const bottomRight = table.theme.cellBorderClipDirection === 'bottom-right';\n // if (bottomRight) {\n // x = Math.floor(x) - 0.5;\n // y = Math.floor(y) - 0.5;\n // deltaWidth = 0.5;\n // deltaHeight = 0.5;\n // } else {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n // }\n }\n\n // 带不同stroke边框\n if (!(cornerRadius === 0 || (isArray(cornerRadius) && (cornerRadius).every(num => num === 0)))) {\n // let lastStrokeI = 0;\n // let lastStroke: any;\n context.beginPath();\n // debugger;\n createRectPath(\n context,\n x,\n y,\n width,\n height,\n cornerRadius,\n new Array(4).fill(0).map((_, i) => (x1: number, y1: number, x2: number, y2: number) => {\n renderStrokeWithCornerRadius(\n i,\n x1,\n y1,\n x2,\n y2,\n rect,\n context,\n x,\n y,\n rectAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight)\n );\n })\n );\n\n context.stroke();\n } else {\n renderStroke(\n rect as IGroup,\n context,\n x,\n y,\n rectAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n Math.ceil(width + deltaWidth),\n Math.ceil(height + deltaHeight)\n );\n }\n }\n }\n}\n\nexport function renderStrokeWithCornerRadius(\n i: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n rectAttribute: Required,\n stroke: any,\n strokeArrayWidth: any,\n strokeArrayColor: any,\n width: number,\n height: number\n) {\n const group = rect;\n const groupAttribute = rectAttribute;\n\n // if (stroke[i]) {\n // if (!(lastStrokeI === i - 1 && stroke[i] === lastStroke)) {\n // context.setStrokeStyle(rect, { ...rect.attribute, stroke: stroke[i] }, x, y, rectAttribute);\n // context.beginPath();\n // context.moveTo(x1, y1);\n // lastStroke = stroke[i];\n // }\n // lastStrokeI = i;\n // context.lineTo(x2, y2);\n // context.stroke();\n // if (i === 3) {\n // context.beginPath();\n // }\n // }\n\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(rect, rect.attribute, x, y, rectAttribute);\n const { lineDash = groupAttribute.lineDash } = group.attribute as any;\n // const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length && lineDash.some((dash: number[] | null) => Array.isArray(dash))) {\n isDash = true;\n }\n\n // 单独处理每条边界,目前不考虑圆角\n // context.beginPath();\n context.moveTo(x, y);\n\n const strokeTop = (isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0]);\n const strokeRight = (isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1]);\n const strokeBottom = (isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2]);\n const strokeLeft = (isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3]);\n\n // top\n if (strokeTop && i === 0) {\n // context.lineTo(x + width, y);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[0]) / 2;\n\n // context.moveTo(x - deltaLeft, y);\n // context.lineTo(x + width + deltaRight, y);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[0]) {\n context.strokeStyle = strokeArrayColor[0];\n } else if (strokeArrayColor && !strokeArrayColor[0]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[0] ?? []);\n }\n context.stroke();\n context.beginPath();\n // context.moveTo(x + width, y);\n }\n } else if (i === 0) {\n context.moveTo(x + width, y);\n }\n // right\n if (strokeRight && i === 1) {\n // context.lineTo(x + width, y + height);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[1]) / 2;\n\n // context.moveTo(x + width, y - deltaTop);\n // context.lineTo(x + width, y + height + deltaBottom);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[1]) {\n context.strokeStyle = strokeArrayColor[1];\n } else if (strokeArrayColor && !strokeArrayColor[1]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[1] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else if (i === 1) {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if (strokeBottom && i === 2) {\n // context.lineTo(x, y + height);\n const deltaLeft = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n const deltaRight = (isWidthNumber ? widthInfo.width : strokeArrayWidth[2]) / 2;\n\n // context.moveTo(x - deltaLeft, y + height);\n // context.lineTo(x + width + deltaRight, y + height);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[2]) {\n context.strokeStyle = strokeArrayColor[2];\n } else if (strokeArrayColor && !strokeArrayColor[2]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n if (isDash) {\n context.setLineDash(lineDash[2] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else if (i === 2) {\n context.moveTo(x, y + height);\n }\n // left\n if (strokeLeft && i === 3) {\n // context.lineTo(x, y);\n const deltaTop = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n const deltaBottom = (isWidthNumber ? widthInfo.width : strokeArrayWidth[3]) / 2;\n\n // context.moveTo(x, y - deltaTop);\n // context.lineTo(x, y + height + deltaBottom);\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n\n if (isSplitDraw || isDash) {\n if (strokeArrayColor && strokeArrayColor[3]) {\n context.strokeStyle = strokeArrayColor[3];\n } else if (strokeArrayColor && !strokeArrayColor[3]) {\n context.strokeStyle = 'transparent';\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n if (isDash) {\n context.setLineDash(lineDash[3] ?? []);\n }\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else if (i === 3) {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n context.lineDashOffset = 0;\n // context.lineCap = oldLineCap;\n context.setLineDash([]);\n\n context.closePath();\n}\n\ntype IEdgeCb = (x1: number, y1: number, x2: number, y2: number) => void;\n","import type {\n IDrawItemInterceptorContribution,\n IGraphic,\n IRenderService,\n IDrawContext,\n IDrawContribution,\n IGraphicRenderDrawParams,\n IImage\n} from './../../../vrender';\nimport { injectable, createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nlet loadingImage: IImage;\n\n@injectable()\nexport class VTableDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n interceptors: IDrawItemInterceptorContribution[];\n constructor() {\n this.interceptors = [new ImageDrawItemInterceptorContribution()];\n }\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].afterDrawItem &&\n this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n\n beforeDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n // 【性能方案】判定写在外层,减少遍历判断耗时,10000条数据减少1ms\n if (\n (!graphic.in3dMode || drawContext.in3dInterceptor) &&\n !graphic.shadowRoot &&\n !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)\n ) {\n return false;\n }\n\n for (let i = 0; i < this.interceptors.length; i++) {\n if (\n this.interceptors[i].beforeDrawItem &&\n this.interceptors[i].beforeDrawItem(graphic, renderService, drawContext, drawContribution, params)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\nexport class ImageDrawItemInterceptorContribution implements IDrawItemInterceptorContribution {\n order: number = 1;\n\n afterDrawItem(\n graphic: IGraphic,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n if (graphic.type === 'image') {\n this.drawItem(graphic, renderService, drawContext, drawContribution, params);\n }\n return false;\n }\n\n protected drawItem(\n graphic: IImage,\n renderService: IRenderService,\n drawContext: IDrawContext,\n drawContribution: IDrawContribution,\n params?: IGraphicRenderDrawParams\n ): boolean {\n const { image: url, gif } = graphic.attribute as any;\n\n if (gif && graphic.playing) {\n return false;\n }\n if (!url || !graphic.resources) {\n return false;\n }\n const res = graphic.resources.get(url);\n if (!res || res.state !== 'loading') {\n return false;\n }\n\n if (!loadingImage) {\n const regedIcons = icons.get();\n const svg = (regedIcons.loading_pic as any).svg;\n const width = (regedIcons.loading_pic as any).width;\n const height = (regedIcons.loading_pic as any).height;\n loadingImage = createImage({\n width,\n height,\n image: svg\n });\n }\n const { image: loadingUrl } = loadingImage.attribute;\n if (!url || !loadingImage.resources) {\n return false;\n }\n const loadingRes = loadingImage.resources.get(loadingUrl);\n if (loadingRes.state !== 'success') {\n return false;\n }\n\n const { context } = drawContext;\n context.highPerformanceSave();\n // 直接transform\n graphic.parent && context.setTransformFromMatrix(graphic.parent.globalTransMatrix, true);\n graphic.glyphHost &&\n graphic.glyphHost.parent &&\n context.setTransformFromMatrix(graphic.glyphHost.parent.globalTransMatrix, true);\n\n const b = graphic.AABBBounds;\n\n const { width, height } = calcKeepAspectRatioSize(\n loadingRes.data.width,\n loadingRes.data.height,\n b.width(),\n b.height()\n );\n\n context.drawImage(loadingRes.data, b.x1 + (b.width() - width) / 2, b.y1 + (b.height() - height) / 2, width, height);\n\n context.highPerformanceRestore();\n\n return true;\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IMarkAttribute,\n IText,\n ITextGraphicAttribute,\n ITextRenderContribution,\n IThemeAttribute\n} from './../../../vrender';\nimport {\n BaseRenderContributionTime,\n calculateLineHeight,\n injectable,\n textDrawOffsetX,\n textLayoutOffsetY\n} from './../../../vrender';\nimport { isString } from '@visactor/vutils';\nimport { textMeasure } from '../../utils/text-measure';\n\n@injectable()\nexport class SuffixTextBeforeRenderContribution implements ITextRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n text: IText,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n textAttribute: Required,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n text: str,\n underline = textAttribute.underline,\n lineThrough = textAttribute.lineThrough,\n direction = textAttribute.direction,\n // lineHeight = textAttribute.lineHeight,\n whiteSpace = textAttribute.whiteSpace,\n fontSize = textAttribute.fontSize,\n verticalMode = textAttribute.verticalMode,\n ellipsis = textAttribute.ellipsis,\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n x: originX = textAttribute.x,\n y: originY = textAttribute.y\n } = text.attribute;\n\n let isEmpty: boolean = false;\n if (Array.isArray(text)) {\n const layoutData = text.cache?.layoutData;\n if (ellipsis && layoutData && layoutData.lines.every(line => line.str === '')) {\n isEmpty = true;\n }\n } else {\n const { cache } = text;\n if (ellipsis && cache && cache.clipedText === '' && cache.clipedWidth === 0) {\n isEmpty = true;\n }\n }\n\n if (!isEmpty) {\n return;\n }\n\n const textStr = isString(ellipsis) ? ellipsis : '...';\n const lineHeight = calculateLineHeight(text.attribute.lineHeight, fontSize) ?? fontSize;\n\n let dy = 0;\n if (lineHeight !== fontSize) {\n if (textBaseline === 'top') {\n dy = (lineHeight - fontSize) / 2;\n } else if (textBaseline === 'middle') {\n // middle do nothing\n } else if (textBaseline === 'bottom') {\n dy = -(lineHeight - fontSize) / 2;\n } else {\n // alphabetic do nothing\n // dy = (lineHeight - fontSize) / 2 - fontSize * 0.79;\n }\n }\n if (doStroke) {\n if (strokeCb) {\n strokeCb(context, text.attribute, textAttribute);\n } else if (sVisible) {\n context.setStrokeStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.strokeText(textStr, originX, originY + dy);\n }\n }\n if (doFill) {\n if (fillCb) {\n fillCb(context, text.attribute, textAttribute);\n } else if (fVisible) {\n context.setCommonStyle(text, text.attribute, originX - x, originY - y, textAttribute);\n context.fillText(textStr, originX, originY + dy);\n this.drawUnderLine(underline, lineThrough, text, originX, originY + dy, 0, textAttribute, context, textStr);\n }\n }\n }\n\n drawUnderLine(\n underline: number,\n lineThrough: number,\n text: IText,\n x: number,\n y: number,\n z: number,\n textAttribute: Required,\n context: IContext2d,\n textStr: string\n ) {\n if (lineThrough + underline <= 0) {\n return;\n }\n\n const {\n textAlign = textAttribute.textAlign,\n textBaseline = textAttribute.textBaseline,\n fontSize = textAttribute.fontSize,\n fontFamily = textAttribute.fontFamily,\n fontWeight = textAttribute.fontWeight,\n fontStyle = textAttribute.fontStyle,\n fill = textAttribute.fill,\n opacity = textAttribute.opacity,\n underlineOffset = textAttribute.underlineOffset,\n underlineDash = textAttribute.underlineDash,\n fillOpacity = textAttribute.fillOpacity\n } = text.attribute;\n\n if (!underline && !lineThrough) {\n return;\n }\n // const w = text.clipedWidth;\n const w = textMeasure.measureTextWidth(textStr, {\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle\n });\n const offsetX = textDrawOffsetX(textAlign, w);\n const offsetY = textLayoutOffsetY(textBaseline, fontSize, fontSize);\n const attribute = { lineWidth: 0, stroke: fill, opacity, strokeOpacity: fillOpacity };\n if (underline) {\n attribute.lineWidth = underline;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.setLineDash(underlineDash);\n context.beginPath();\n const dy = y + offsetY + fontSize + underlineOffset;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n if (lineThrough) {\n attribute.lineWidth = lineThrough;\n context.setStrokeStyle(text, attribute, x, y, textAttribute);\n context.beginPath();\n const dy = y + offsetY + fontSize / 2;\n context.moveTo(x + offsetX, dy, z);\n context.lineTo(x + offsetX + w, dy, z);\n context.stroke();\n }\n }\n}\n","import {\n GraphicRender,\n GroupRenderContribution,\n ImageRenderContribution,\n RectRenderContribution,\n SplitRectBeforeRenderContribution,\n SplitRectAfterRenderContribution,\n ContainerModule,\n DrawItemInterceptor,\n TextRenderContribution\n} from './../../../vrender';\nimport { ChartRender, DefaultCanvasChartRender } from './chart-render';\nimport {\n AfterImageRenderContribution,\n BeforeImageRenderContribution,\n BeforeGifImageRenderContribution,\n AfterGifImageRenderContribution\n} from './image-contribution-render';\nimport {\n SplitRectBeforeRenderContribution as VTableSplitRectBeforeRenderContribution,\n SplitRectAfterRenderContribution as VTableSplitRectAfterRenderContribution\n} from './rect-contribution-render';\nimport {\n DashGroupAfterRenderContribution,\n DashGroupBeforeRenderContribution,\n SplitGroupBeforeRenderContribution,\n SplitGroupAfterRenderContribution,\n AdjustPosGroupBeforeRenderContribution,\n AdjustPosGroupAfterRenderContribution,\n AdjustColorGroupBeforeRenderContribution,\n AdjustColorGroupAfterRenderContribution,\n ClipBodyGroupBeforeRenderContribution\n // ClipBodyGroupAfterRenderContribution\n} from './group-contribution-render';\nimport { VTableDrawItemInterceptorContribution } from './draw-interceptor';\nimport { SuffixTextBeforeRenderContribution } from './text-contribution-render';\n\nexport default new ContainerModule((bind, unbind, isBound, rebind) => {\n // rect 渲染器注入contributions\n if (isBound(SplitRectBeforeRenderContribution)) {\n rebind(SplitRectBeforeRenderContribution).to(VTableSplitRectBeforeRenderContribution).inSingletonScope();\n } else {\n bind(VTableSplitRectBeforeRenderContribution).toSelf().inSingletonScope();\n bind(RectRenderContribution).toService(VTableSplitRectBeforeRenderContribution);\n }\n if (isBound(SplitRectAfterRenderContribution)) {\n rebind(SplitRectAfterRenderContribution).to(VTableSplitRectAfterRenderContribution).inSingletonScope();\n } else {\n bind(VTableSplitRectAfterRenderContribution).toSelf().inSingletonScope();\n bind(RectRenderContribution).toService(VTableSplitRectAfterRenderContribution);\n }\n\n // chart渲染器注入\n bind(DefaultCanvasChartRender).toSelf().inSingletonScope();\n bind(ChartRender).to(DefaultCanvasChartRender);\n bind(GraphicRender).to(DefaultCanvasChartRender);\n\n // image 渲染器注入contributions\n bind(BeforeImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(BeforeImageRenderContribution);\n bind(AfterImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(AfterImageRenderContribution);\n\n bind(BeforeGifImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(BeforeGifImageRenderContribution);\n bind(AfterGifImageRenderContribution).toSelf().inSingletonScope();\n bind(ImageRenderContribution).toService(AfterGifImageRenderContribution);\n\n // group 渲染器注入contributions\n bind(AdjustColorGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustColorGroupBeforeRenderContribution);\n bind(AdjustColorGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustColorGroupAfterRenderContribution);\n\n bind(SplitGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(SplitGroupAfterRenderContribution);\n bind(SplitGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(SplitGroupBeforeRenderContribution);\n\n bind(DashGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(DashGroupBeforeRenderContribution);\n bind(DashGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(DashGroupAfterRenderContribution);\n\n bind(AdjustPosGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustPosGroupBeforeRenderContribution);\n bind(AdjustPosGroupAfterRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(AdjustPosGroupAfterRenderContribution);\n\n bind(ClipBodyGroupBeforeRenderContribution).toSelf().inSingletonScope();\n bind(GroupRenderContribution).toService(ClipBodyGroupBeforeRenderContribution);\n // bind(ClipBodyGroupAfterRenderContribution).toSelf().inSingletonScope();\n // bind(GroupRenderContribution).toService(ClipBodyGroupAfterRenderContribution);\n\n // interceptor\n bind(VTableDrawItemInterceptorContribution).toSelf().inSingletonScope();\n bind(DrawItemInterceptor).toService(VTableDrawItemInterceptorContribution);\n\n // text 渲染器注入contributions\n bind(SuffixTextBeforeRenderContribution).toSelf().inSingletonScope();\n bind(TextRenderContribution).toService(SuffixTextBeforeRenderContribution);\n});\n","import type { SimpleHeaderLayoutMap } from '../../layout';\nimport type {\n ColumnDefine,\n ColumnTypeOption,\n IRowSeriesNumber,\n PivotTableAPI,\n RadioColumnDefine,\n RadioStyleOption,\n TextColumnDefine\n} from '../../ts-types';\nimport { HierarchyState, IconPosition } from '../../ts-types';\nimport * as calc from '../../tools/calc';\nimport { validToString } from '../../tools/util';\nimport { getQuadProps } from '../utils/padding';\nimport { getProp } from '../utils/get-prop';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ComputeAxisComponentWidth } from '../../components/axis/get-axis-component-size';\nimport { Factory } from '../../core/factory';\nimport type { Group as VGroup } from './../../vrender';\nimport { isArray, isFunction, isNumber, isObject, isValid } from '@visactor/vutils';\nimport { decodeReactDom, dealPercentCalc } from '../component/custom';\nimport { breakString } from '../utils/break-string';\nimport { emptyCustomLayout } from '../../components/react/react-custom-layout';\n\nexport function computeColsWidth(table: BaseTableAPI, colStart?: number, colEnd?: number, update?: boolean): void {\n // const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n table.internalProps.columnWidthConfig &&\n (table as PivotTableAPI)._parseColumnWidthConfig(table.internalProps.columnWidthConfig);\n colStart = colStart ?? 0;\n colEnd = colEnd ?? table.colCount - 1;\n // table._clearColRangeWidthsMap();\n // clear colRangeWidthsMap\n if (colStart === 0 && colEnd === table.colCount - 1) {\n table._clearColRangeWidthsMap();\n // } else {\n // for (let col = colStart; col <= colEnd; col++) {\n // table._clearColRangeWidthsMap(col);\n // }\n }\n\n const layoutMap = table.internalProps.layoutMap;\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).enableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).enableUseHeaderPathCache();\n }\n\n const oldColWidths: number[] = [];\n const newWidths: number[] = [];\n if (update) {\n for (let col = 0; col < table.colCount; col++) {\n oldColWidths[col] = table.getColWidth(col);\n }\n }\n for (let col = colStart; col <= colEnd; col++) {\n let maxWidth;\n if (\n !table.internalProps.transpose &&\n (table.internalProps.layoutMap.columnObjects?.[col]?.columnWidthComputeMode === 'only-header' ||\n table.columnWidthComputeMode === 'only-header') &&\n 'showHeader' in table.internalProps.layoutMap\n ) {\n const temp = table.internalProps.layoutMap.showHeader;\n table.internalProps.layoutMap.showHeader = true;\n maxWidth = computeColWidth(col, 0, table.internalProps.layoutMap.headerLevelCount - 1, table);\n table.internalProps.layoutMap.showHeader = temp;\n } else if (\n !table.internalProps.transpose &&\n (table.internalProps.layoutMap.columnObjects?.[col]?.columnWidthComputeMode === 'only-body' ||\n table.columnWidthComputeMode === 'only-body')\n ) {\n maxWidth = computeColWidth(\n col,\n table.internalProps.layoutMap.getBodyRange().start.row,\n table.internalProps.layoutMap.getBodyRange().end.row,\n table\n );\n } else {\n maxWidth = computeColWidth(col, 0, table.rowCount - 1, table);\n }\n\n table._setColContentWidth(col, maxWidth);\n\n const oldWidth = table.getColWidth(col);\n if (oldWidth !== maxWidth) {\n table._clearColRangeWidthsMap(col);\n }\n if (update) {\n newWidths[col] = Math.round(table._adjustColWidth(col, maxWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, maxWidth), false, true);\n }\n }\n\n // 处理adaptive宽度\n if (table.widthMode === 'adaptive') {\n // const rowHeaderWidth = table.getColsWidth(0, table.rowHeaderLevelCount - 1);\n // const rightHeaderWidth = table.isPivotChart() ? table.getRightFrozenColsWidth() : 0;\n // const totalDrawWidth = table.tableNoFrameWidth - rowHeaderWidth - rightHeaderWidth;\n\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n }\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, update, newWidths, table);\n // const canvasWidth = table.internalProps.canvas.width;\n // const rowHeaderWidth = table.getColsWidth(0, table.rowHeaderLevelCount - 1);\n // const rightHeaderWidth = table.isPivotChart() ? table.getRightFrozenColsWidth() : 0;\n // const totalDrawWidth = table.tableNoFrameWidth - rowHeaderWidth - rightHeaderWidth;\n // const startCol = table.rowHeaderLevelCount;\n // const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n // let actualWidth = 0;\n // for (let col = startCol; col < endCol; col++) {\n // actualWidth += update ? newWidths[col] : table.getColWidth(col);\n // }\n // const factor = totalDrawWidth / actualWidth;\n // for (let col = startCol; col < endCol; col++) {\n // let colWidth;\n // if (col === endCol - 1) {\n // colWidth =\n // totalDrawWidth -\n // (update\n // ? newWidths.reduce((acr, cur, index) => {\n // if (index >= startCol && index <= endCol - 2) {\n // return acr + cur;\n // }\n // return acr;\n // }, 0)\n // : table.getColsWidth(startCol, endCol - 2));\n // } else {\n // colWidth = Math.round((update ? newWidths[col] : table.getColWidth(col)) * factor);\n // }\n // if (update) {\n // newWidths[col] = table._adjustColWidth(col, colWidth);\n // } else {\n // table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n // }\n // }\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, update, newWidths, table);\n }\n\n // // 如果内容宽度小于canvas宽度,执行adaptive放大\n // if (actualWidth < canvasWidth && actualWidth - actualHeaderWidth > 0) {\n // const factor = (canvasWidth - actualHeaderWidth) / (actualWidth - actualHeaderWidth);\n // for (let col = table.frozenColCount; col < table.colCount - table.rightFrozenColCount; col++) {\n // let colWidth;\n // if (col === table.colCount - table.rightFrozenColCount - 1) {\n // colWidth =\n // canvasWidth -\n // actualHeaderWidth -\n // (update\n // ? newWidths.reduce((acr, cur, index) => {\n // if (index >= table.frozenColCount && index <= table.colCount - table.rightFrozenColCount - 2) {\n // return acr + cur;\n // }\n // return acr;\n // }, 0)\n // : table.getColsWidth(table.frozenColCount, table.colCount - table.rightFrozenColCount - 2));\n // } else {\n // colWidth = Math.round((update ? newWidths[col] : table.getColWidth(col)) * factor);\n // }\n // if (update) {\n // // newWidths[col] = newWidths[col] * factor;\n // newWidths[col] = table._adjustColWidth(col, colWidth);\n // } else {\n // // table.setColWidth(col, table.getColWidth(col) * factor, false, true);\n // table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n // }\n // }\n // }\n }\n // console.log('computeColsWidth time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n\n if (update) {\n for (let col = 0; col < table.colCount; col++) {\n // newColWidth could not be in column min max range possibly\n // const newColWidth = table._adjustColWidth(col, newWidths[col]) ?? table.getColWidth(col);\n const newColWidth = newWidths[col] ?? table.getColWidth(col) ?? table.getColWidth(col);\n if (newColWidth !== oldColWidths[col]) {\n // update the column width in scenegraph\n table._setColWidth(col, newColWidth, false, true);\n // table.scenegraph.updateColWidth(col, newColWidth - oldColWidths[col], true, true);\n }\n }\n table.stateManager.checkFrozen();\n for (let col = 0; col < table.colCount; col++) {\n // newColWidth could not be in column min max range possibly\n // const newColWidth = table._adjustColWidth(col, newWidths[col]) ?? table.getColWidth(col);\n const newColWidth = table.getColWidth(col);\n if (newColWidth !== oldColWidths[col]) {\n // update the column width in scenegraph\n // table._setColWidth(col, newColWidth);\n table.scenegraph.updateColWidth(col, newColWidth - oldColWidths[col], true, true);\n }\n }\n table.scenegraph.updateContainer(true);\n }\n // console.log('computeColsWidth time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time, colStart, colEnd);\n\n if (table.isPivotTable()) {\n (layoutMap as PivotHeaderLayoutMap).disableUseGetBodyCache();\n (layoutMap as PivotHeaderLayoutMap).disableUseHeaderPathCache();\n }\n}\n\n/**\n * @description: 计算列宽\n * @param {number} col\n * @param {number} startRow\n * @param {number} endRow\n * @param {BaseTableAPI} table\n * @param {boolean} forceCompute\n * @return {*}\n */\nexport function computeColWidth(\n col: number,\n startRow: number,\n endRow: number,\n table: BaseTableAPI,\n forceCompute: boolean = false //forceCompute如果设置为true 即便不是自动列宽的列也会按内容计算列宽\n): number {\n let width = getColWidthDefinedWidthResizedWidth(col, table);\n if (\n table.internalProps.transpose &&\n width === 'auto' &&\n ((table.columnWidthComputeMode === 'only-header' && col >= table.rowHeaderLevelCount) ||\n (table.columnWidthComputeMode === 'only-body' && col < table.rowHeaderLevelCount))\n ) {\n width = table.getDefaultColumnWidth(col);\n }\n\n if (forceCompute && !table.internalProps.transpose) {\n return computeAutoColWidth(width, col, startRow, endRow, forceCompute, table);\n } else if (typeof width === 'number') {\n return width;\n } else if (width !== 'auto' && typeof width === 'string') {\n // return calc.toPx(width, table.internalProps.calcWidthContext);\n return table._adjustColWidth(col, table._colWidthDefineToPxWidth(width));\n }\n return computeAutoColWidth(width, col, startRow, endRow, forceCompute, table);\n}\n\n/**\n * @description: 计算width: auto情况下的列宽\n * @param {number} col\n * @param {number} startRow\n * @param {number} endRow\n * @param {boolean} forceCompute\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeAutoColWidth(\n widthDeifne: string | number,\n col: number,\n startRow: number,\n endRow: number,\n forceCompute: boolean,\n table: BaseTableAPI\n): number {\n // 处理 auto width\n let maxWidth = 0;\n let deltaRow = 1;\n let prepareDeltaRow = 1; // 当计算完表头单元格的宽度后再采用采用逻辑,prepareDeltaRow这个值为期body部分做准备\n if (endRow - startRow > 5000) {\n // 超过5000行启动列宽自动计算采样\n prepareDeltaRow = Math.ceil((endRow - startRow) / 5000);\n }\n // 如果是透视图\n if (table.isPivotChart() && col >= table.rowHeaderLevelCount && col < table.colCount - table.rightFrozenColCount) {\n if (!(table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol) {\n //并且指标是以行展示 计算列宽需要根据x轴的值域范围\n const optimunWidth = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getOptimunWidthForChart(col);\n if (optimunWidth > 0) {\n return optimunWidth;\n }\n } else {\n //直接拿表头的默认列宽\n return table.defaultColWidth;\n }\n }\n\n for (let row = startRow; row <= endRow; row += deltaRow) {\n // 判断透视图轴组件\n if (table.isPivotChart()) {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const axisConfig = layout.getAxisConfigInPivotChart(col, row);\n if (axisConfig) {\n const computeAxisComponentWidth: ComputeAxisComponentWidth = Factory.getFunction('computeAxisComponentWidth');\n const axisWidth = computeAxisComponentWidth(axisConfig, table);\n if (typeof axisWidth === 'number') {\n maxWidth = Math.max(axisWidth, maxWidth);\n continue;\n }\n } else if (\n layout.isLeftBottomCorner(col, row) ||\n layout.isRightTopCorner(col, row) ||\n layout.isRightBottomCorner(col, row)\n ) {\n // 透视图三角为无效单元格,不参与宽度计算\n continue;\n }\n }\n\n // 判断CustomRender\n const customWidth = computeCustomRenderWidth(col, row, table);\n if (customWidth) {\n maxWidth = Math.max(customWidth.width, maxWidth);\n if (!customWidth.renderDefault) {\n continue;\n }\n }\n\n // 判断透视表如果在指标\n // const indicatorWidth = computeIndicatorWidth(col, row, forceCompute, table);\n // const indicatorWidth = table.internalProps.layoutMap.getColumnWidthDefined(col);\n const indicatorWidth = widthDeifne;\n if (typeof indicatorWidth === 'number' && table.widthMode === 'standard' && !forceCompute) {\n maxWidth = Math.max(indicatorWidth, maxWidth);\n continue;\n }\n\n const cellType = table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData)?.headerType\n : table.getBodyColumnType(col, row);\n if (\n isValid(cellType) &&\n cellType !== 'text' &&\n cellType !== 'link' &&\n cellType !== 'progressbar' &&\n cellType !== 'checkbox' &&\n cellType !== 'radio'\n ) {\n // text&link&progressbar测量文字宽度\n // image&video&sparkline使用默认宽度\n maxWidth = Math.max(maxWidth, table.getColWidthDefinedNumber(col) || 0);\n continue;\n }\n\n // 处理树形展开\n let cellHierarchyIndent = 0;\n const layoutMap = table.internalProps.layoutMap;\n //判断是否为表头\n if (layoutMap.isHeader(col, row)) {\n const hd = layoutMap.getHeader(col, row);\n // 如果某级表头设置了only-body,在计算表头内容宽度时跳过改级表头\n if ((hd as HeaderData)?.define?.columnWidthComputeMode === 'only-body') {\n continue;\n }\n if (isValid((hd as HeaderData)?.hierarchyLevel)) {\n cellHierarchyIndent =\n ((hd as HeaderData).hierarchyLevel ?? 0) * ((layoutMap as PivotHeaderLayoutMap).rowHierarchyIndent ?? 0);\n if (\n (layoutMap as PivotHeaderLayoutMap).rowHierarchyTextStartAlignment &&\n !table.internalProps.headerHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n } else if (table.isListTable()) {\n deltaRow = prepareDeltaRow;\n // 基本表格表身body单元格 如果是树形展开 需要考虑缩进值\n // const cellHierarchyState = table.getHierarchyState(col, row);\n // if (cellHierarchyState === HierarchyState.expand || cellHierarchyState === HierarchyState.collapse) {\n const define = table.getBodyColumnDefine(col, row);\n if ((define as ColumnDefine)?.tree) {\n const indexArr = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row));\n cellHierarchyIndent =\n Array.isArray(indexArr) && table.getHierarchyState(col, row) !== HierarchyState.none\n ? (indexArr.length - 1) * ((layoutMap as SimpleHeaderLayoutMap).hierarchyIndent ?? 0)\n : 0;\n if (\n (layoutMap as SimpleHeaderLayoutMap).hierarchyTextStartAlignment &&\n !table.internalProps.bodyHelper.getHierarchyIcon(col, row)\n ) {\n cellHierarchyIndent += table.internalProps.headerHelper.getHierarchyIconWidth();\n }\n }\n }\n\n // 测量文字宽度\n const textWidth = computeTextWidth(col, row, cellType, table);\n maxWidth = Math.max(textWidth + cellHierarchyIndent, maxWidth);\n //在前面设置了采用规则的情况下,为了确保底部冻结的每一行都测到\n if (\n deltaRow > 1 &&\n table.bottomFrozenRowCount > 0 &&\n row < table.rowCount - table.bottomFrozenRowCount &&\n row + deltaRow >= table.rowCount - table.bottomFrozenRowCount\n ) {\n row = table.rowCount - table.bottomFrozenRowCount - deltaRow;\n deltaRow = 1;\n prepareDeltaRow = 1;\n }\n }\n\n // 处理宽度限制\n const colMinWidth = table.getMinColWidth(col);\n const colMaxWidth = table.getMaxColWidth(col);\n if (maxWidth < colMinWidth) {\n return colMinWidth;\n } else if (maxWidth > colMaxWidth) {\n return colMaxWidth;\n } else if (maxWidth <= 0) {\n // In the case of partially hiding the header, the width calculation may be 0.\n // In this case, the default value is used to prevent it from being unable to be displayed\n maxWidth = table.defaultColWidth;\n }\n return maxWidth;\n}\n\n/**\n * @description: 计算customRender相关列宽\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeCustomRenderWidth(col: number, row: number, table: BaseTableAPI) {\n const customRender = table.getCustomRender(col, row);\n let customLayout = table.getCustomLayout(col, row);\n if (customRender || customLayout) {\n let spanCol = 1;\n let width = 0;\n let renderDefault = false;\n let enableCellPadding = false;\n let cellRange;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n cellRange = table.getCellRange(col, row);\n spanCol = cellRange.end.col - cellRange.start.col + 1;\n }\n const arg = {\n col: cellRange?.start.col ?? col,\n row: cellRange?.start.row ?? row,\n dataValue: table.getCellOriginValue(col, row),\n value: table.getCellValue(col, row) || '',\n rect: getCellRect(col, row, table),\n table,\n originCol: col,\n originRow: row\n };\n if (customLayout === 'react-custom-layout') {\n // customLayout = table._reactCreateGraphic;\n customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;\n }\n if (isFunction(customLayout)) {\n // 处理customLayout\n const customLayoutObj = customLayout(arg);\n if (customLayoutObj.rootContainer) {\n customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n dealPercentCalc(customLayoutObj.rootContainer, 0, table.getRowHeight(row));\n const setedWidth = (customLayoutObj.rootContainer as VGroup).attribute.width;\n customLayoutObj.rootContainer.setStage(table.scenegraph.stage);\n width = setedWidth > 0 ? setedWidth : (customLayoutObj.rootContainer as VGroup).AABBBounds.width() ?? 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n } else {\n width = 0;\n renderDefault = customLayoutObj.renderDefault;\n enableCellPadding = customLayoutObj.enableCellPadding;\n }\n } else if (typeof customRender === 'function') {\n // 处理customRender\n const customRenderObj = customRender(arg);\n width = customRenderObj?.expectedWidth ?? 0;\n renderDefault = customRenderObj?.renderDefault;\n } else {\n width = customRender?.expectedWidth ?? 0;\n renderDefault = customRender?.renderDefault;\n }\n width = Math.ceil(width);\n if (enableCellPadding) {\n const actStyle = table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n width += padding[1] + padding[3];\n }\n return {\n width: width / spanCol,\n renderDefault\n };\n }\n return undefined;\n}\n\n/**\n * @description: 计算指标相关列宽\n * @param {number} col\n * @param {number} row\n * @param {boolean} forceCompute\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeIndicatorWidth(\n col: number,\n row: number,\n forceCompute: boolean,\n table: BaseTableAPI\n): number | undefined {\n const { layoutMap } = table.internalProps;\n if (table.isPivotTable() && (layoutMap as PivotHeaderLayoutMap).isColumnIndicatorHeader(col, row)) {\n // 透视表如果在指标中配置了宽度,使用该宽度作为指标单元格及下面内容单元格的列宽\n const body = layoutMap.getBody(col, row);\n if (body && body.width && body.width !== 'auto' && !forceCompute) {\n const width = Math.round(calc.toPx(body.width, table.internalProps.calcWidthContext));\n return width;\n }\n }\n return undefined;\n}\n\n/**\n * @description: 计算文字宽度\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction computeTextWidth(col: number, row: number, cellType: ColumnTypeOption, table: BaseTableAPI): number {\n let maxWidth = 0;\n const cellValue = table.getCellValue(col, row);\n // const dataValue = table.getCellOriginValue(col, row);\n const actStyle = table._getCellStyle(col, row);\n let iconWidth = 0;\n\n // const define = table.getBodyColumnDefine(col, row);\n // const mayHaveIcon = table.getCellLocation(col, row) !== 'body' ? true : !!define?.icon || !!define?.tree;\n\n let mayHaveIcon = false;\n if (table.getCellLocation(col, row) !== 'body') {\n mayHaveIcon = true;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n mayHaveIcon = !!define?.icon || !!(define as ColumnDefine)?.tree || (define as IRowSeriesNumber)?.dragOrder;\n }\n if (mayHaveIcon) {\n const icons = table.getCellIcons(col, row);\n icons?.forEach(icon => {\n if (icon.positionType !== IconPosition.absoluteRight) {\n iconWidth += (icon.width ?? 0) + (icon.marginLeft ?? 0) + (icon.marginRight ?? 0);\n }\n });\n }\n\n let spanCol = 1;\n if (\n table.isHeader(col, row) ||\n (table.getBodyColumnDefine(col, row) as TextColumnDefine)?.mergeCell ||\n table.hasCustomMerge()\n ) {\n const cellRange = table.getCellRange(col, row);\n spanCol = cellRange.end.col - cellRange.start.col + 1;\n }\n\n const padding = getQuadProps(getProp('padding', actStyle, col, row, table));\n const paddingWidth = padding[1] + padding[3]; // + cellHierarchyIndent\n\n const fontSize = getProp('fontSize', actStyle, col, row, table);\n const fontFamily = getProp('fontFamily', actStyle, col, row, table);\n const fontWeight = getProp('fontWeight', actStyle, col, row, table);\n let text: string;\n if (cellType === 'checkbox') {\n text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n } else if (cellType === 'radio') {\n if (isArray(cellValue)) {\n text = '';\n const define = table.getBodyColumnDefine(col, row);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n cellValue.forEach(line => {\n text += (isObject(line) ? (line as any).text : line).toString() + '\\n';\n });\n } else if (radioDirectionInCell === 'horizontal') {\n cellValue.forEach(line => {\n text += (isObject(line) ? (line as any).text : line).toString();\n });\n }\n } else {\n text = isObject(cellValue) ? (cellValue as any).text : cellValue;\n }\n } else {\n text = cellValue;\n }\n const lines = breakString(text, table).text;\n if (lines.length >= 1 && !(lines.length === 1 && lines[0] === '')) {\n // eslint-disable-next-line no-loop-func\n lines.forEach((line: string) => {\n const width = table.measureText(line, {\n fontSize,\n fontFamily,\n fontWeight\n }).width;\n maxWidth = Math.max(\n // 最大字符上限控制测量的字符\n (width + paddingWidth + 4 + iconWidth) / spanCol, // 这里+4为列宽测量结果的buffer\n maxWidth\n );\n });\n } else {\n maxWidth = Math.max(\n // 最大字符上限控制测量的字符\n (paddingWidth + 4 + iconWidth) / spanCol,\n maxWidth\n );\n }\n // 判断是否需要限制最大宽度 之前写死的450 需要使用配置来判断\n if (table.internalProps.limitMaxAutoWidth !== false) {\n maxWidth = Math.min(\n typeof table.internalProps.limitMaxAutoWidth === 'number' ? table.internalProps.limitMaxAutoWidth : 450,\n maxWidth\n );\n }\n\n if (cellType === 'checkbox') {\n const size = getProp('size', actStyle, col, row, table);\n maxWidth += size;\n\n if (text) {\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n maxWidth += spaceBetweenTextAndIcon;\n }\n } else if (cellType === 'radio') {\n const size = getProp('size', actStyle, col, row, table);\n const outerRadius = getProp('outerRadius', actStyle, col, row, table);\n const circleSize = isNumber(outerRadius) ? outerRadius * 2 : size;\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', actStyle, col, row, table);\n\n if (isArray(cellValue)) {\n const define = table.getBodyColumnDefine(col, row);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', actStyle, col, row, table);\n const radioDirectionInCell = (define as RadioColumnDefine)?.radioDirectionInCell ?? 'vertical';\n if (radioDirectionInCell === 'vertical') {\n // one icon\n maxWidth += circleSize;\n maxWidth += spaceBetweenTextAndIcon;\n } else if (radioDirectionInCell === 'horizontal') {\n // multi icon\n maxWidth += (circleSize + spaceBetweenTextAndIcon) * cellValue.length;\n maxWidth += spaceBetweenRadio * (cellValue.length - 1);\n }\n } else {\n // one icon\n maxWidth += circleSize;\n if (text) {\n maxWidth += spaceBetweenTextAndIcon;\n }\n }\n }\n\n return maxWidth;\n}\n\nfunction getCellRect(col: number, row: number, table: BaseTableAPI): any {\n return {\n left: 0,\n top: 0,\n right: table.getColWidth(col),\n bottom: table.getRowHeight(row),\n width: null, // vrender 逻辑中通过判断null对flex的元素来自动计算宽高\n height: null\n };\n}\n\nfunction getColWidthDefinedWidthResizedWidth(col: number, table: BaseTableAPI) {\n const widthDefined = table.getColWidthDefined(col);\n if (table.internalProps._widthResizedColMap.has(col)) {\n return table.getColWidth(col);\n }\n return widthDefined;\n}\n\nexport function getAdaptiveWidth(\n totalDrawWidth: number,\n startCol: number,\n endColPlus1: number,\n update: boolean,\n newWidths: number[],\n table: BaseTableAPI,\n fromScenegraph?: boolean\n) {\n let actualWidth = 0;\n const adaptiveColumns: number[] = [];\n const sparklineColumns = [];\n let totalSparklineAbleWidth = 0;\n for (let col = startCol; col < endColPlus1; col++) {\n const width = update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col);\n const maxWidth = table.getMaxColWidth(col);\n const minWidth = table.getMinColWidth(col);\n if (width !== maxWidth && width !== minWidth) {\n actualWidth += width;\n adaptiveColumns.push(col);\n } else {\n // fixed width, do not adaptive\n totalDrawWidth -= width;\n }\n\n if (table.options.customConfig?.shrinkSparklineFirst) {\n const bodyCellType = table.getBodyColumnType(col, 0);\n if (bodyCellType === 'sparkline') {\n sparklineColumns.push({ col, width });\n totalSparklineAbleWidth += width - table.defaultColWidth;\n }\n }\n }\n\n const factor = totalDrawWidth / actualWidth;\n\n if (\n table.options.customConfig?.shrinkSparklineFirst &&\n factor < 1 &&\n actualWidth - totalDrawWidth < totalSparklineAbleWidth\n ) {\n // only shrink sparkline column\n for (let i = 0; i < sparklineColumns.length; i++) {\n const { col, width } = sparklineColumns[i];\n const deltaWidth = (actualWidth - totalDrawWidth) / sparklineColumns.length;\n const colWidth = Math.floor(width - deltaWidth);\n\n if (update) {\n newWidths[col] = table._adjustColWidth(col, colWidth);\n } else if (fromScenegraph) {\n table.scenegraph.setColWidth(col, table._adjustColWidth(col, colWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n }\n }\n return;\n }\n\n for (let i = 0; i < adaptiveColumns.length; i++) {\n const col = adaptiveColumns[i];\n let colWidth;\n if (i === adaptiveColumns.length - 1) {\n colWidth =\n totalDrawWidth -\n adaptiveColumns.reduce((acr, cur, index) => {\n if (cur !== col) {\n return acr + (update ? newWidths[cur] ?? table.getColWidth(col) : table.getColWidth(cur));\n }\n return acr;\n }, 0);\n } else {\n colWidth = Math.round((update ? newWidths[col] ?? table.getColWidth(col) : table.getColWidth(col)) * factor);\n }\n if (update) {\n newWidths[col] = table._adjustColWidth(col, colWidth);\n } else if (fromScenegraph) {\n table.scenegraph.setColWidth(col, table._adjustColWidth(col, colWidth));\n } else {\n table._setColWidth(col, table._adjustColWidth(col, colWidth), false, true);\n }\n }\n}\n","import { Group } from '../graphic/group';\n\nexport const emptyGroup = new Group({});\nemptyGroup.role = 'empty';\n","/* eslint-disable no-undef */\nimport type { IThemeSpec } from './../../vrender';\nimport type {\n CellLocation,\n CellRange,\n ColumnDefine,\n IRowSeriesNumber,\n ListTableConstructorOptions,\n TextColumnDefine\n} from '../../ts-types';\nimport { Group } from '../graphic/group';\nimport { getProp, getRawProp } from '../utils/get-prop';\nimport type { MergeMap } from '../scenegraph';\nimport { createCell, dealWithMergeCellSize, resizeCellGroup } from './cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../../ts-types/base-table';\nimport { getCellCornerRadius, getStyleTheme } from '../../core/tableHelper';\nimport { isPromise } from '../../tools/helper';\nimport { dealPromiseData } from '../utils/deal-promise-data';\nimport { dealWithCustom } from '../component/custom';\n/**\n * 创建复合列 同一列支持创建不同类型单元格\n * @param columnGroup 列Group\n * @param col\n * @param colWidth 配置列宽\n * @param rowStart\n * @param rowEnd\n * @param mergeMap merge单元格信息\n * @param defaultRowHeight\n * @param table\n * @param cellLocation\n * @param rowLimit\n * @param customRender\n * @param customLayout\n * @returns\n */\nexport function createComplexColumn(\n columnGroup: Group,\n col: number,\n colWidth: number,\n rowStart: number,\n rowEnd: number,\n mergeMap: MergeMap,\n defaultRowHeight: number | number[],\n table: BaseTableAPI,\n // cellLocation: CellLocation,\n rowLimit?: number\n) {\n let padding;\n let textAlign;\n let textBaseline;\n /** useColumnTheme 判断是否可以使用columnTheme */\n // insert cell into column group top\n let y = 0;\n // if (columnGroup.colHeight) {\n // // insert cell into column group bottom\n // y = columnGroup.colHeight;\n // }\n if (columnGroup.lastChild && (columnGroup.lastChild as Group).row === rowStart - 1) {\n y = (columnGroup.lastChild as Group).attribute.y + (columnGroup.lastChild as Group).attribute.height;\n } else if (columnGroup.colHeight) {\n y = columnGroup.colHeight;\n }\n\n for (let j = rowStart; j <= rowEnd; j++) {\n const row = j;\n let cellLocation = table.getCellLocation(col, row);\n let value = table.getCellValue(col, row);\n\n // 处理单元格合并\n let cellWidth = colWidth;\n // let cellHeight = table.internalProps.autoRowHeight ? 0 : table.getRowHeight(row);\n let cellHeight = table.getRowHeight(row);\n let range;\n let isMerge;\n let customStyle;\n let customResult;\n let isCustomMerge = false;\n if (table.internalProps.customMergeCell) {\n const customMerge = table.getCustomMerge(col, row);\n if (customMerge) {\n const {\n range: customMergeRange,\n text: customMergeText,\n style: customMergeStyle,\n customLayout,\n customRender\n } = customMerge;\n range = customMergeRange;\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n if (isMerge) {\n const needUpdateRange = rowStart > range.start.row;\n const mergeSize = dealMerge(range, mergeMap, table, needUpdateRange);\n cellWidth = mergeSize.cellWidth;\n cellHeight = mergeSize.cellHeight;\n }\n value = customMergeText;\n customStyle = customMergeStyle;\n\n if (customLayout || customRender) {\n customResult = dealWithCustom(\n customLayout,\n customRender,\n customMergeRange.start.col,\n customMergeRange.start.row,\n table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col),\n table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n\n isCustomMerge = true;\n }\n }\n\n let colForDefine = col;\n let rowForDefine = row;\n if (range) {\n colForDefine = range.start.col;\n rowForDefine = range.start.row;\n }\n\n // adjust cellLocation for top frozen row\n if (\n !table.isPivotTable() &&\n (cellLocation === 'columnHeader' || cellLocation === 'cornerHeader') &&\n row >= table.columnHeaderLevelCount\n ) {\n cellLocation = 'body';\n }\n let define;\n if (!table.isPivotTable() && table.isSeriesNumberInBody(col, row)) {\n // 序号列 传入的cellLocation是'rowHeader'(不清楚为什么)。这里处理下获取到的define值\n define = table.getBodyColumnDefine(colForDefine, rowForDefine);\n } else {\n define =\n cellLocation !== 'body'\n ? table.getHeaderDefine(colForDefine, rowForDefine)\n : table.getBodyColumnDefine(colForDefine, rowForDefine);\n }\n let mayHaveIcon =\n cellLocation !== 'body'\n ? true\n : (define as IRowSeriesNumber)?.dragOrder || !!define?.icon || !!(define as ColumnDefine)?.tree;\n\n if (\n !range &&\n (table.internalProps.enableTreeNodeMerge || cellLocation !== 'body' || (define as TextColumnDefine)?.mergeCell)\n ) {\n // 只有表头或者column配置合并单元格后再进行信息获取\n range = table.getCellRange(col, row);\n isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n // 所有Merge单元格,只保留左上角一个真实的单元格,其他使用空Group占位\n if (isMerge) {\n const needUpdateRange = rowStart > range.start.row;\n const mergeSize = dealMerge(range, mergeMap, table, needUpdateRange);\n cellWidth = mergeSize.cellWidth;\n cellHeight = mergeSize.cellHeight;\n }\n }\n let isVtableMerge = false;\n if (table.internalProps.enableTreeNodeMerge && isMerge) {\n const rawRecord = table.getCellRawRecord(range.start.col, range.start.row);\n const { vtableMergeName, vtableMerge } = rawRecord ?? {};\n\n isVtableMerge = vtableMerge;\n if (vtableMerge) {\n mayHaveIcon = true;\n if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {\n customResult = dealWithCustom(\n (table.options as ListTableConstructorOptions).groupTitleCustomLayout,\n undefined,\n range.start.col,\n range.start.row,\n table.getColsWidth(range.start.col, range.end.col),\n table.getRowsHeight(range.start.row, range.end.row),\n false,\n table.isAutoRowHeight(row),\n [0, 0, 0, 0],\n range,\n table\n );\n }\n }\n if (vtableMergeName) {\n value = vtableMergeName;\n }\n }\n\n const type =\n isVtableMerge || isCustomMerge\n ? 'text'\n : (table.isHeader(col, row)\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType ?? 'text'\n : table.getBodyColumnType(col, row)) ?? 'text';\n\n // deal with promise data\n if (isPromise(value)) {\n createEmptyCellGroup(col, row, 0, y, cellWidth, cellHeight, columnGroup);\n dealPromiseData(\n value,\n table,\n callCreateCellForPromiseValue.bind(null, {\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n customStyle,\n mayHaveIcon,\n cellLocation,\n range,\n customResult,\n defaultRowHeight\n })\n );\n columnGroup.updateColumnRowNumber(row);\n const height = table.getRowHeight(row);\n columnGroup.updateColumnHeight(height);\n y += height;\n } else {\n const cellStyle =\n customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n cellTheme.group.width = colWidth;\n cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;\n if (cellTheme._vtable.padding) {\n padding = cellTheme._vtable.padding;\n }\n if (cellTheme.text.textAlign) {\n textAlign = cellTheme.text.textAlign;\n }\n if (cellTheme.text.textBaseline) {\n textBaseline = cellTheme.text.textBaseline;\n }\n\n // enable clip body\n if (cellLocation !== 'body' && !cellTheme.group.fill) {\n cellTheme.group.fill = '#fff';\n }\n const cellGroup = createCell(\n type,\n value,\n define as ColumnDefine,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n columnGroup.updateColumnRowNumber(row);\n if (isMerge) {\n const rangeHeight = table.getRowHeight(row);\n const rangeWidth = table.getColWidth(col);\n\n const { width: contentWidth } = cellGroup.attribute;\n const { height: contentHeight } = cellGroup.attribute;\n cellGroup.contentWidth = contentWidth;\n cellGroup.contentHeight = contentHeight;\n\n // resizeCellGroup(cellGroup, rangeWidth, rangeHeight, range, table);\n dealWithMergeCellSize(range, contentWidth, contentHeight, padding, textAlign, textBaseline, table);\n columnGroup.updateColumnHeight(rangeHeight);\n y += rangeHeight;\n } else {\n // columnGroup.updateColumnHeight(cellGroup.attribute.height);\n // y += cellGroup.attribute.height;\n columnGroup.updateColumnHeight(cellHeight);\n y += cellHeight;\n }\n }\n if (rowLimit && row > rowLimit) {\n break;\n }\n }\n\n columnGroup.setAttribute('width', colWidth);\n return {\n width: colWidth,\n height: y\n };\n}\n\n/**\n * 获取列分组主题\n * @param col 列索引\n * @param colWidth 列宽\n * @param table 表格实例\n * @returns 列分组主题\n */\nexport function getColumnGroupTheme(\n col: number,\n colWidth: number,\n table: BaseTableAPI\n): { theme: IThemeSpec & { _vtable: any }; hasFunctionPros: boolean } {\n const style = table._getCellStyle(col, table.columnHeaderLevelCount); // to be fixed\n const { theme: columnTheme, hasFunctionPros } = getStyleTheme(\n style,\n table,\n col,\n table.columnHeaderLevelCount,\n getRawProp\n );\n\n // get column header style\n columnTheme.group.width = colWidth;\n columnTheme.group.height = 0;\n return { theme: columnTheme, hasFunctionPros };\n}\nfunction callCreateCellForPromiseValue(createCellArgs: any) {\n let padding;\n let textAlign;\n let textBaseline;\n const {\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n cellLocation,\n mayHaveIcon,\n customStyle,\n range,\n customResult,\n defaultRowHeight\n } = createCellArgs;\n const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);\n const cellTheme = getStyleTheme(\n cellStyle,\n table,\n range ? range.start.col : col,\n range ? range.start.row : row,\n getProp\n ).theme;\n cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);\n cellTheme.group.width = colWidth;\n cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;\n if (cellTheme._vtable.padding) {\n padding = cellTheme._vtable.padding;\n }\n if (cellTheme.text.textAlign) {\n textAlign = cellTheme.text.textAlign;\n }\n if (cellTheme.text.textBaseline) {\n textBaseline = cellTheme.text.textBaseline;\n }\n\n // enable clip body\n if (cellLocation !== 'body' && !cellTheme.group.fill) {\n cellTheme.group.fill = '#fff';\n }\n createCell(\n type,\n value,\n define,\n table,\n col,\n row,\n colWidth,\n cellWidth,\n cellHeight,\n columnGroup,\n y,\n padding,\n textAlign,\n textBaseline,\n mayHaveIcon,\n cellTheme,\n range,\n customResult\n );\n}\nfunction dealMerge(range: CellRange, mergeMap: MergeMap, table: BaseTableAPI, forceUpdate: boolean) {\n let cellWidth = 0;\n let cellHeight = 0;\n const mergeResult = mergeMap.get(`${range.start.col},${range.start.row};${range.end.col},${range.end.row}`);\n if (!mergeResult || forceUpdate) {\n for (let col = range.start.col; col <= range.end.col; col++) {\n cellWidth += table.getColWidth(col);\n }\n\n // let cellHeight = 0;\n for (let i = range.start.row; i <= range.end.row; i++) {\n cellHeight += table.getRowHeight(i);\n }\n\n mergeMap.set(`${range.start.col},${range.start.row};${range.end.col},${range.end.row}`, {\n cellWidth,\n cellHeight\n });\n } else {\n cellWidth = mergeResult.cellWidth;\n cellHeight = mergeResult.cellHeight;\n }\n return {\n cellWidth,\n cellHeight\n };\n}\n\nfunction createEmptyCellGroup(\n col: number,\n row: number,\n x: number,\n y: number,\n width: number,\n height: number,\n columnGroup: Group\n) {\n const cellGroup = new Group({\n x,\n y,\n width,\n height\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup.addChild(cellGroup);\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { CellLocation } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { createComplexColumn } from './column-helper';\n\n// /**\n// * @description: 处理全部角表头\n// * @param {Group} colHeaderGroup 列表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createCornerHeaderColGroup(\n// cornerHeaderGroup: Group,\n// xOrigin: number,\n// yOrigin: number,\n// table: BaseTableAPI\n// ) {\n// createColGroup(\n// cornerHeaderGroup,\n// xOrigin,\n// yOrigin,\n// 0, // colStart\n// table.rowHeaderLevelCount - 1, // colEnd\n// 0, // rowStart\n// table.columnHeaderLevelCount - 1, // rowEnd\n// 'cornerHeader', // CellType\n// table\n// );\n// }\n\n// /**\n// * @description: 处理全部列表头\n// * @param {Group} colHeaderGroup 列表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createColHeaderColGroup(colHeaderGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// colHeaderGroup,\n// xOrigin,\n// yOrigin,\n// table.rowHeaderLevelCount, // colStart\n// table.colCount - 1, // colEnd\n// 0, // rowStart\n// table.columnHeaderLevelCount - 1, // rowEnd\n// 'columnHeader', // isHeader\n// table\n// );\n// }\n\n// /**\n// * @description: 处理全部行表头\n// * @param {Group} rowHeaderGroup 行表头容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createRowHeaderColGroup(rowHeaderGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// rowHeaderGroup,\n// xOrigin,\n// yOrigin,\n// 0, // colStart\n// table.rowHeaderLevelCount - 1, // colEnd\n// table.columnHeaderLevelCount, // rowStart\n// table.rowCount - 1, // rowEnd\n// 'rowHeader', // isHeader\n// table\n// );\n// }\n\n// /**\n// * @description: 处理内容单元格\n// * @param {Group} bodyGroup 内容容器Group\n// * @param {number} xOrigin x起始坐标\n// * @param {number} yOrigin y起始坐标\n// * @param {BaseTableAPI} table\n// * @return {*}\n// */\n// export function createBodyColGroup(bodyGroup: Group, xOrigin: number, yOrigin: number, table: BaseTableAPI) {\n// createColGroup(\n// bodyGroup,\n// xOrigin,\n// yOrigin,\n// table.rowHeaderLevelCount, // colStart\n// table.colCount - 1, // colEnd\n// table.columnHeaderLevelCount, // rowStart\n// table.rowCount - 1, // rowEnd\n// 'body', // isHeader\n// table\n// );\n// }\n\n/**\n * @description: 生成一个列的场景节点\n * @param {Group} containerGroup 列容器Group\n * @param {number} xOrigin x起始坐标\n * @param {number} yOrigin y起始坐标\n * @param {number} colStart 起始col\n * @param {number} colEnd 结束col\n * @param {number} rowStart 起始row\n * @param {number} rowEnd 结束row\n * @param {boolean} isHeader 是否是表头\n * @param {BaseTableAPI} table\n * @return {*}\n */\nexport function createColGroup(\n containerGroup: Group,\n xOrigin: number,\n yOrigin: number,\n colStart: number,\n colEnd: number,\n rowStart: number,\n rowEnd: number,\n cellLocation: CellLocation,\n table: BaseTableAPI,\n rowLimit?: number\n) {\n if (colStart > colEnd || rowStart > rowEnd) {\n return;\n }\n const { layoutMap, defaultHeaderRowHeight, defaultColWidth } = table.internalProps;\n const defaultRowHeight = table.defaultRowHeight;\n let x = 0;\n let heightMax = 0;\n for (let i = colStart; i <= colEnd; i++) {\n const col = i;\n const colWidth = table.getColWidth(col);\n\n const columnGroup = new Group({\n x: xOrigin + x,\n y: yOrigin,\n width: colWidth,\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = i;\n containerGroup.addChild(columnGroup);\n const { width: default2Width, height: default2Height } = createComplexColumn(\n columnGroup,\n col,\n colWidth,\n rowStart,\n rowEnd,\n table.scenegraph.mergeMap,\n cellLocation === 'columnHeader' && isNumber(defaultHeaderRowHeight)\n ? (defaultHeaderRowHeight as number)\n : defaultRowHeight,\n table,\n // cellLocation,\n rowLimit\n );\n x += default2Width;\n heightMax = Math.max(heightMax, default2Height);\n }\n // 更新containerGroup尺寸\n containerGroup.setAttribute('width', x);\n containerGroup.setAttribute('height', heightMax);\n}\n","import type { ListTable } from '../../../ListTable';\nimport { ListTableAPI } from '../../../ts-types';\nimport type { Group } from '../../graphic/group';\nimport { computeColsWidth } from '../../layout/compute-col-width';\nimport { computeRowsHeight } from '../../layout/compute-row-height';\nimport { createColGroup } from '../column';\nimport type { SceneProxy } from './proxy';\n\nexport function createGroupForFirstScreen(\n cornerHeaderGroup: Group,\n colHeaderGroup: Group,\n rowHeaderGroup: Group,\n rightFrozenGroup: Group,\n bottomFrozenGroup: Group,\n bodyGroup: Group,\n xOrigin: number,\n yOrigin: number,\n proxy: SceneProxy\n) {\n const { table } = proxy;\n const { leftBottomCornerGroup, rightTopCornerGroup, rightBottomCornerGroup } = table.scenegraph;\n\n // compute parameters\n proxy.setParamsForRow();\n proxy.setParamsForColumn();\n\n let distCol;\n let distRow;\n let distColForCompute;\n let distRowForCompute;\n if (\n table.widthMode === 'adaptive' ||\n (table.options.autoWrapText && (table.heightMode === 'adaptive' || table.isAutoRowHeight()))\n ) {\n // distCol = table.colCount - 1;\n // proxy.colEnd = distCol;\n\n distColForCompute = table.colCount - 1;\n distCol = Math.min(proxy.firstScreenColLimit - 1, table.colCount - 1);\n } else {\n distCol = Math.min(proxy.firstScreenColLimit - 1, table.colCount - 1);\n }\n if (table.heightMode === 'adaptive') {\n // distRow = table.rowCount - 1;\n // proxy.rowEnd = distRow;\n\n distRowForCompute = table.rowCount - 1;\n distRow = Math.min(proxy.firstScreenRowLimit - 1, table.rowCount - 1);\n } else {\n distRow = Math.min(proxy.firstScreenRowLimit - 1, table.rowCount - 1);\n }\n if (table.internalProps._widthResizedColMap.size === 0) {\n // compute colums width in first screen\n computeColsWidth(table, 0, distColForCompute ?? distCol);\n }\n\n if (table.internalProps._heightResizedRowMap.size === 0) {\n // compute rows height in first screen\n computeRowsHeight(table, 0, distRowForCompute ?? distRow);\n }\n\n if (distCol < table.colCount - table.rightFrozenColCount) {\n // compute right frozen row height\n computeColsWidth(table, table.colCount - table.rightFrozenColCount, table.colCount - 1);\n }\n if (distRow < table.rowCount - table.bottomFrozenRowCount) {\n // compute bottom frozen row height\n computeRowsHeight(table, table.rowCount - table.bottomFrozenRowCount, table.rowCount - 1);\n }\n\n // update colHeaderGroup rowHeaderGroup bodyGroup position\n table.scenegraph.colHeaderGroup.setAttribute('x', table.getFrozenColsWidth());\n table.scenegraph.rowHeaderGroup.setAttribute('y', table.getFrozenRowsHeight());\n table.scenegraph.bottomFrozenGroup.setAttribute('x', table.getFrozenColsWidth());\n table.scenegraph.rightFrozenGroup.setAttribute('y', table.getFrozenRowsHeight());\n table.scenegraph.bodyGroup.setAttributes({\n x: table.getFrozenColsWidth(),\n y: table.getFrozenRowsHeight()\n });\n\n // create cornerHeaderGroup\n createColGroup(\n cornerHeaderGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.frozenColCount - 1, // colEnd\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n table.isListTable() ? 'columnHeader' : 'cornerHeader', // CellType\n table\n );\n\n // create colHeaderGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n colHeaderGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n table\n );\n\n // create rowHeaderGroup\n if (table.frozenColCount > 0) {\n if (table.leftRowSeriesNumberCount > 0) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.leftRowSeriesNumberCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.rowHeaderLevelCount > 0) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n table.leftRowSeriesNumberCount, // colStart\n table.leftRowSeriesNumberCount + table.rowHeaderLevelCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.frozenColCount > table.rowHeaderLevelCount + table.leftRowSeriesNumberCount) {\n createColGroup(\n rowHeaderGroup,\n xOrigin,\n yOrigin,\n table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, // colStart\n table.frozenColCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'body',\n table\n );\n }\n }\n\n if (table.bottomFrozenRowCount > 0) {\n // if (!table.isPivotChart()) {\n // create left bottom frozen\n // if (table.rowHeaderLevelCount > 0) {\n // createColGroup(\n // leftBottomCornerGroup,\n // xOrigin,\n // yOrigin,\n // 0, // colStart\n // table.rowHeaderLevelCount - 1, // colEnd\n // table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n // table.rowCount - 1, // rowEnd\n // 'rowHeader', // isHeader\n // table\n // );\n // }\n // if (table.frozenColCount > table.rowHeaderLevelCount) {\n // createColGroup(\n // leftBottomCornerGroup,\n // xOrigin,\n // yOrigin,\n // table.rowHeaderLevelCount, // colStart\n // table.frozenColCount - 1, // colEnd\n // table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n // table.rowCount - 1, // rowEnd\n // 'body',\n // table\n // );\n // }\n\n if (table.frozenColCount > 0) {\n if (table.leftRowSeriesNumberCount > 0) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n 0, // colStart\n table.leftRowSeriesNumberCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.rowHeaderLevelCount > 0) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.leftRowSeriesNumberCount, // colStart\n table.leftRowSeriesNumberCount + table.rowHeaderLevelCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n }\n if (table.frozenColCount > table.rowHeaderLevelCount + table.leftRowSeriesNumberCount) {\n createColGroup(\n leftBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, // colStart\n table.frozenColCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'body',\n table\n );\n }\n }\n // }\n // create bottomFrozenGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n bottomFrozenGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n table.isPivotChart() ? 'rowHeader' : 'body', // isHeader\n table\n );\n }\n\n if (table.rightFrozenColCount > 0) {\n // if (!table.isPivotChart()) {\n // create right top frozen Group\n createColGroup(\n rightTopCornerGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n 0, // rowStart\n table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n table\n );\n // }\n // create rightFrozenGroup\n createColGroup(\n rightFrozenGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n table.isPivotChart() ? 'rowHeader' : 'body', // isHeader\n table\n );\n }\n\n if (table.bottomFrozenRowCount > 0 && table.rightFrozenColCount > 0) {\n // create right bottom frozen Group\n createColGroup(\n rightBottomCornerGroup,\n xOrigin,\n yOrigin,\n table.colCount - 1 - table.rightFrozenColCount + 1, // colStart\n table.colCount - 1, // colEnd\n table.rowCount - 1 - table.bottomFrozenRowCount + 1, // rowStart\n table.rowCount - 1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n\n // create bodyGroup\n distCol - table.rightFrozenColCount >= table.frozenColCount &&\n createColGroup(\n bodyGroup,\n xOrigin,\n yOrigin,\n table.frozenColCount, // colStart\n // Math.min(proxy.firstScreenColLimit, table.colCount - 1 - table.rightFrozenColCount), // colEnd\n distCol - table.rightFrozenColCount,\n table.frozenRowCount, // rowStart\n // Math.min(proxy.firstScreenRowLimit, table.rowCount - 1 - table.bottomFrozenRowCount), // rowEnd\n distRow - table.bottomFrozenRowCount,\n 'body', // isHeader\n table\n );\n\n // update progress information\n if (\n !bodyGroup.firstChild &&\n !colHeaderGroup.firstChild &&\n !cornerHeaderGroup.firstChild &&\n !rowHeaderGroup.firstChild\n ) {\n // 无数据\n proxy.currentRow = proxy.totalRow;\n proxy.rowEnd = proxy.currentRow;\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n\n proxy.currentCol = proxy.totalCol;\n proxy.colEnd = proxy.currentCol;\n proxy.colUpdatePos = proxy.colEnd + 1;\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n } else {\n proxy.currentRow =\n (bodyGroup.firstChild as Group)?.rowNumber ?? (rowHeaderGroup.firstChild as Group)?.rowNumber ?? proxy.totalRow;\n proxy.rowEnd = proxy.currentRow;\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n\n proxy.currentCol =\n (bodyGroup.lastChild as Group)?.col ??\n (colHeaderGroup.lastChild as Group)?.col ??\n (rowHeaderGroup.lastChild as Group)?.col ??\n (cornerHeaderGroup.lastChild as Group)?.col ??\n proxy.totalCol;\n proxy.colEnd = proxy.currentCol;\n proxy.colUpdatePos = proxy.colEnd + 1;\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n\n // 开始异步任务\n proxy.progress();\n }\n}\n","import type { Group } from '../../../graphic/group';\nimport { getCellMergeInfo } from '../../../utils/get-cell-merge';\nimport { updateCell } from '../../cell-helper';\nimport type { SceneProxy } from '../proxy';\n\nexport function checkFirstRowMerge(row: number, proxy: SceneProxy) {\n for (let col = 0; col < proxy.table.colCount; col++) {\n if (\n (col >= proxy.table.rowHeaderLevelCount && col < proxy.colStart) ||\n (col > proxy.colEnd && col < proxy.table.colCount - proxy.table.rightFrozenColCount)\n ) {\n continue;\n }\n\n const range = getCellMergeInfo(proxy.table, col, row);\n // 清除之前mock的Merge cell\n range && clearHadMergedRow(range.start.row, range.end.row, col, proxy);\n\n // 重新生成mock的Merge cell\n if (\n range &&\n range.start.row !== row &&\n proxy.highPerformanceGetCell(range.start.col, range.start.row, true).role !== 'cell'\n ) {\n // 在row的位置添加range.start.row单元格\n const oldCellGroup = proxy.highPerformanceGetCell(col, row, true);\n const newCellGroup = updateCell(range.start.col, range.start.row, proxy.table, true);\n\n newCellGroup.col = col;\n newCellGroup.row = row;\n newCellGroup.setAttribute('y', proxy.table.getRowsHeight(proxy.table.frozenRowCount, range.start.row - 1));\n\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n oldCellGroup.needUpdate = false;\n newCellGroup.needUpdate = false;\n\n // update cache\n if (proxy.cellCache.get(col)) {\n proxy.cellCache.set(col, newCellGroup);\n }\n }\n }\n}\n\nexport function checkFirstColMerge(col: number, proxy: SceneProxy) {\n for (let row = 0; row < proxy.table.rowCount; row++) {\n if (\n (row >= proxy.table.frozenRowCount && row < proxy.rowStart) ||\n (row > proxy.rowEnd && row < proxy.table.rowCount - proxy.table.bottomFrozenRowCount)\n ) {\n continue;\n }\n\n const range = getCellMergeInfo(proxy.table, col, row);\n // 清除之前mock的Merge cell\n range && clearHadMergedColumn(range.start.col, range.end.col, row, proxy);\n\n if (\n range &&\n range.start.col !== col &&\n proxy.highPerformanceGetCell(range.start.col, range.start.row, true).role !== 'cell'\n ) {\n // 在col的位置添加range.start.col单元格\n const oldCellGroup = proxy.highPerformanceGetCell(col, row, true);\n const newCellGroup = updateCell(range.start.col, range.start.row, proxy.table, true);\n\n newCellGroup.col = col;\n newCellGroup.row = row;\n newCellGroup.setAttribute(\n 'x',\n proxy.table.getColsWidth(proxy.table.rowHeaderLevelCount, range.start.col - 1) - oldCellGroup.parent.attribute.x\n );\n newCellGroup.setAttributes({\n x:\n proxy.table.getColsWidth(proxy.table.rowHeaderLevelCount, range.start.col - 1) -\n oldCellGroup.parent.attribute.x,\n y: proxy.table.getRowsHeight(0, range.start.row - 1) - oldCellGroup.parent.attribute.y\n });\n\n oldCellGroup.parent.insertAfter(newCellGroup, oldCellGroup);\n oldCellGroup.parent.removeChild(oldCellGroup);\n\n oldCellGroup.needUpdate = false;\n newCellGroup.needUpdate = false;\n\n // update cache\n if (proxy.cellCache.get(col)) {\n proxy.cellCache.set(col, newCellGroup);\n }\n }\n }\n}\n\nfunction clearHadMergedRow(rowStart: number, rowEnd: number, col: number, proxy: SceneProxy) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'shadow-cell' && cellGroup.role !== 'empty' && cellGroup.row !== rowStart) {\n cellGroup.role = 'shadow-cell';\n cellGroup.setAttributes({\n width: 0,\n height: proxy.table.getRowHeight(cellGroup.row),\n y: proxy.table.getRowsHeight(proxy.table.frozenRowCount, cellGroup.row - 1),\n x: 0\n });\n cellGroup.clear();\n }\n }\n}\n\nfunction clearHadMergedColumn(colStart: number, colEnd: number, row: number, proxy: SceneProxy) {\n for (let col = colStart; col <= colEnd; col++) {\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'shadow-cell' && cellGroup.role !== 'empty' && cellGroup.col !== colStart) {\n cellGroup.role = 'shadow-cell';\n cellGroup.setAttributes({\n width: 0,\n height: proxy.table.getRowHeight(cellGroup.row),\n y: proxy.table.getRowsHeight(0, cellGroup.row - 1),\n x: 0\n });\n cellGroup.clear();\n }\n }\n}\n\nfunction checkHasColMerge(colStart: number, colEnd: number, row: number, proxy: SceneProxy) {\n for (let col = colStart; col <= colEnd; col++) {\n if (\n proxy.highPerformanceGetCell(col, row, true).role !== 'shadow-cell' &&\n proxy.highPerformanceGetCell(col, row, true).role !== 'empty'\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function getFirstChild(containerGroup: Group): Group {\n let child = containerGroup.firstChild as Group;\n while (child && child.type !== 'group') {\n child = child._next as Group;\n }\n return child;\n}\n\nexport function getLastChild(containerGroup: Group): Group {\n let child = containerGroup.lastChild as Group;\n while (child && child.type !== 'group') {\n child = child._prev as Group;\n }\n return child;\n}\n\nexport function getPrevGroup(group: Group): Group {\n let child = group._prev as Group;\n while (child && child.type !== 'group') {\n child = child._prev as Group;\n }\n return child;\n}\n\nexport function getNextGroup(group: Group): Group {\n let child = group._next as Group;\n while (child && child.type !== 'group') {\n child = child._next as Group;\n }\n return child;\n}\n","import type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\nimport { getNextGroup, getPrevGroup } from './util';\n\nexport function updateAutoColumn(\n colStart: number,\n colEnd: number,\n table: BaseTableAPI,\n direction: 'left' | 'right' = 'left'\n) {\n // 更新y位置\n for (let col = colStart; col <= colEnd; col++) {\n const bodyColGroup = table.scenegraph.getColGroup(col);\n if (bodyColGroup) {\n moveColumnGroup(bodyColGroup, table, direction);\n }\n const columnHeaderColGroup = table.scenegraph.getColGroup(col, true);\n if (columnHeaderColGroup) {\n moveColumnGroup(columnHeaderColGroup, table, direction);\n }\n const bottomColGroup = table.scenegraph.getColGroupInBottom(col);\n if (bottomColGroup) {\n moveColumnGroup(bottomColGroup, table, direction);\n }\n }\n\n // update x limit in proxy\n const totalActualBodyColumnCount = Math.min(\n table.scenegraph.proxy.colLimit,\n table.scenegraph.proxy.bodyRightCol - table.scenegraph.proxy.bodyLeftCol + 1\n );\n // 渐进加载总column数量\n const totalBodyWidth = table.getColsWidth(table.frozenColCount, table.frozenColCount + totalActualBodyColumnCount);\n const totalWidth = table.getColsWidth(table.frozenColCount, table.colCount - 1);\n table.scenegraph.proxy.xLimitLeft = totalBodyWidth / 2;\n table.scenegraph.proxy.xLimitRight = totalWidth - totalBodyWidth / 2;\n}\n\nfunction moveColumnGroup(colGroup: Group, table: BaseTableAPI, direction: 'left' | 'right' = 'left') {\n if (direction === 'left') {\n let x;\n const prevCellGroup = getPrevGroup(colGroup);\n if (prevCellGroup) {\n x = prevCellGroup.attribute.x + table.getColWidth((colGroup._prev as Group).col);\n } else {\n // 估计位置\n x = table.getColsWidth(table.frozenColCount, colGroup.col - 1);\n }\n colGroup.setAttribute('x', x);\n } else {\n let x;\n const nextCellGroup = getNextGroup(colGroup);\n if (nextCellGroup) {\n x = nextCellGroup.attribute.x - table.getColWidth(colGroup.col);\n } else {\n // 估计位置\n x = table.getColsWidth(table.frozenColCount, colGroup.col - 1);\n }\n colGroup.setAttribute('x', x);\n }\n}\n","import type { ColumnInfo } from '../../../../ts-types';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\nimport { computeColsWidth } from '../../../layout/compute-col-width';\nimport type { SceneProxy } from '../proxy';\nimport { updateAutoColumn } from './update-auto-column';\nimport { checkFirstColMerge, getFirstChild, getLastChild } from './util';\n\nexport async function dynamicSetX(x: number, screenLeft: ColumnInfo | null, isEnd: boolean, proxy: SceneProxy) {\n if (!screenLeft) {\n return;\n }\n const screenLeftCol = screenLeft.col;\n const screenLeftX = screenLeft.left;\n\n let deltaCol;\n if (isEnd) {\n deltaCol = proxy.bodyRightCol - proxy.colEnd;\n } else {\n deltaCol = proxy.screenLeftCol - proxy.referenceCol;\n }\n // const deltaCol = proxy.screenLeftCol - proxy.referenceCol;\n move(deltaCol, screenLeftCol, screenLeftX, x, proxy);\n\n if (isEnd) {\n const colGroup = proxy.table.scenegraph.getColGroup(proxy.colEnd);\n if (colGroup) {\n const deltaX =\n colGroup.attribute.x +\n colGroup.attribute.width -\n (proxy.table.tableNoFrameWidth - proxy.table.getFrozenColsWidth() - proxy.table.getRightFrozenColsWidth()) -\n x;\n proxy.deltaX = -deltaX;\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n }\n }\n\n proxy.table.scenegraph.updateNextFrame();\n}\n\nfunction move(deltaCol: number, screenLeftCol: number, screenLeftX: number, x: number, proxy: SceneProxy) {\n if (deltaCol > 0) {\n // 向右滚动,左部column group移到右部\n moveColumn(deltaCol, 'left', proxy.screenLeftCol, screenLeftX, x, proxy);\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n } else if (deltaCol < 0) {\n // 向左滚动,右部cell group移到左部\n moveColumn(-deltaCol, 'right', proxy.screenLeftCol, screenLeftX, x, proxy);\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n } else {\n // 不改变row,更新body group范围\n proxy.updateDeltaX(x, screenLeftX, screenLeftCol);\n proxy.table.scenegraph.setBodyAndColHeaderX(-x + proxy.deltaX);\n }\n}\n\nasync function moveColumn(\n count: number,\n direction: 'left' | 'right',\n screenLeftCol: number,\n screenLeftX: number,\n x: number,\n proxy: SceneProxy\n) {\n // 限制count范围\n if (direction === 'left' && proxy.colEnd + count > proxy.bodyRightCol) {\n count = proxy.bodyRightCol - proxy.colEnd;\n } else if (direction === 'right' && proxy.colStart - count < proxy.bodyLeftCol) {\n count = proxy.colStart - proxy.bodyLeftCol;\n }\n if (count === 0) {\n return;\n }\n if (count < 0) {\n direction = direction === 'left' ? 'right' : 'left';\n count = -count;\n }\n // 两种更新模式\n // 1. count < colEnd - colStart:从顶/底部移动count数量的单元格到底/顶部\n // 2. count >= colEnd - colStart:整体移动到目标位置\n if (count < proxy.colEnd - proxy.colStart) {\n // 计算更新区域\n const startCol = direction === 'left' ? proxy.colStart : proxy.colEnd - count + 1;\n const endCol = direction === 'left' ? proxy.colStart + count - 1 : proxy.colEnd;\n const distStartCol = direction === 'left' ? proxy.colEnd + 1 : proxy.colStart - count;\n const distEndCol = direction === 'left' ? proxy.colEnd + count : proxy.colStart - 1;\n // update column width\n computeColsWidth(proxy.table, distStartCol, distEndCol);\n updatePartColPosition(startCol, endCol, direction, proxy);\n\n const syncLeftCol = distStartCol;\n const syncRightCol = distEndCol;\n\n proxy.colStart = direction === 'left' ? proxy.colStart + count : proxy.colStart - count;\n proxy.colEnd = direction === 'left' ? proxy.colEnd + count : proxy.colEnd - count;\n\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n updateAutoColumn(\n syncLeftCol, // colStart\n syncRightCol, // colEnd\n proxy.table,\n direction\n );\n\n const colGroup =\n proxy.table.scenegraph.getColGroup(screenLeftCol) || proxy.table.scenegraph.getColGroup(screenLeftCol, true);\n const deltaX =\n screenLeftX - (colGroup.attribute.x + proxy.table.getFrozenColsWidth() + proxy.table.scenegraph.proxy.deltaX);\n proxy.table.scenegraph.proxy.deltaX += deltaX;\n\n proxy.currentCol = direction === 'left' ? proxy.currentCol + count : proxy.currentCol - count;\n proxy.totalCol = Math.max(\n 0,\n Math.min(proxy.table.colCount - 1, direction === 'left' ? proxy.totalCol + count : proxy.totalCol - count)\n );\n\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n proxy.colUpdatePos = distStartCol;\n proxy.colUpdateDirection = direction;\n\n proxy.table.scenegraph.updateNextFrame();\n\n // 开始异步任务\n // await proxy.progress();\n } else {\n const distStartCol = direction === 'left' ? proxy.colStart + count : proxy.colStart - count;\n const distEndCol = direction === 'left' ? proxy.colEnd + count : proxy.colEnd - count;\n\n // update column width\n computeColsWidth(proxy.table, distStartCol, distEndCol);\n const distStartColY = proxy.table.getColsWidth(proxy.bodyLeftCol, distStartCol - 1);\n\n // 更新同步范围\n updateAllColPosition(distStartColY, count, direction, proxy);\n const syncLeftCol = distStartCol;\n const syncRightCol = distEndCol;\n\n proxy.colStart = distStartCol;\n proxy.colEnd = distEndCol;\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n updateAutoColumn(\n syncLeftCol, // colStart\n syncRightCol, // colEnd\n proxy.table,\n distEndCol > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left' // 跳转到右侧时,从右向左对齐\n );\n // // update body position when click scroll bar\n // if (syncLeftCol === proxy.bodyLeftCol) {\n // const colGroup = proxy.table.scenegraph.getColGroup(syncLeftCol);\n // const deltaX = colGroup.attribute.x - x;\n // proxy.table.scenegraph.proxy.deltaX = deltaX;\n // } else if (syncRightCol === proxy.bodyRightCol) {\n // const colGroup = proxy.table.scenegraph.getColGroup(syncRightCol);\n // const deltaX =\n // colGroup.attribute.x +\n // colGroup.attribute.width -\n // (proxy.table.tableNoFrameWidth - proxy.table.getFrozenColsWidth()) -\n // x;\n // proxy.table.scenegraph.proxy.deltaX = -deltaX;\n // } else {\n // // proxy.table.scenegraph.proxy.deltaX = 0;\n // const colGroup =\n // proxy.table.scenegraph.getColGroup(screenLeftCol) || proxy.table.scenegraph.getColGroup(screenLeftCol, true);\n // const deltaX =\n // screenLeftX - (colGroup.attribute.x + proxy.table.getFrozenColsWidth() + proxy.table.scenegraph.proxy.deltaX);\n // proxy.table.scenegraph.proxy.deltaX = deltaX;\n // }\n\n proxy.currentCol = direction === 'left' ? proxy.currentCol + count : proxy.currentCol - count;\n proxy.totalCol = Math.max(\n 0,\n Math.min(proxy.table.colCount - 1, direction === 'left' ? proxy.totalCol + count : proxy.totalCol - count)\n );\n proxy.referenceCol = proxy.colStart + Math.floor((proxy.colEnd - proxy.colStart) / 2);\n proxy.colUpdatePos = proxy.colStart;\n proxy.colUpdateDirection = distEndCol > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left';\n\n proxy.table.scenegraph.updateNextFrame();\n // await proxy.progress();\n }\n}\n\nfunction updateColGroupPosition(colGroup: Group, newCol: number, x: number) {\n // 更新位置&col\n colGroup.col = newCol;\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.col = newCol;\n cellGroup.needUpdate = true;\n });\n colGroup.setAttribute('x', x);\n colGroup.needUpdate = true;\n}\n\nfunction updateColGroupContent(colGroup: Group, proxy: SceneProxy) {\n if (!colGroup) {\n return;\n }\n let cellGroup = colGroup.firstChild;\n while (cellGroup) {\n const newCellGroup = proxy.updateCellGroupContent(cellGroup as Group);\n cellGroup = newCellGroup._next;\n }\n colGroup.needUpdate = false;\n colGroup.setAttribute('width', proxy.table.getColWidth(colGroup.col));\n}\n\n// update cells async\nfunction updateColGroupContentAsync(colGroup: Group, proxy: SceneProxy) {\n if (!colGroup) {\n return;\n }\n const screenTopRow = proxy.screenTopRow;\n const topRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n const bottomRow = Math.min(proxy.bodyBottomRow, screenTopRow + proxy.screenRowCount * 2, proxy.table.rowCount - 1);\n\n for (let row = topRow; row <= bottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(colGroup.col, row, true);\n proxy.updateCellGroupContent(cellGroup);\n }\n proxy.rowUpdatePos = proxy.rowStart;\n\n colGroup.needUpdate = false;\n colGroup.setAttribute('width', proxy.table.getColWidth(colGroup.col));\n}\n\nfunction updatePartColPosition(startCol: number, endCol: number, direction: 'left' | 'right', proxy: SceneProxy) {\n for (let col = startCol; col <= endCol; col++) {\n if (\n proxy.table.scenegraph.bodyGroup.childrenCount > 0 &&\n proxy.table.scenegraph.bodyGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.bodyGroup, direction, proxy);\n }\n if (\n proxy.table.scenegraph.colHeaderGroup.childrenCount > 0 &&\n proxy.table.scenegraph.colHeaderGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.colHeaderGroup, direction, proxy);\n }\n if (\n proxy.table.scenegraph.bottomFrozenGroup.childrenCount > 0 &&\n proxy.table.scenegraph.bottomFrozenGroup.firstChild.type === 'group'\n ) {\n updateColPosition(proxy.table.scenegraph.bottomFrozenGroup, direction, proxy);\n }\n }\n}\n\nfunction updateColPosition(containerGroup: Group, direction: 'left' | 'right', proxy: SceneProxy) {\n if (direction === 'left') {\n const colGroup = getFirstChild(containerGroup);\n const lastChild = getLastChild(containerGroup);\n updateColGroupPosition(colGroup, lastChild.col + 1, lastChild.attribute.x + proxy.table.getColWidth(lastChild.col));\n containerGroup.appendChild(colGroup);\n // console.log('after', colGroup.col, colGroup.attribute.x, containerGroup._uid);\n if (containerGroup.border) {\n containerGroup.appendChild(containerGroup.border);\n }\n } else {\n const colGroup = getLastChild(containerGroup);\n const firstChild = getFirstChild(containerGroup);\n updateColGroupPosition(\n colGroup,\n firstChild.col - 1,\n firstChild.attribute.x - proxy.table.getColWidth(firstChild.col - 1)\n );\n containerGroup.insertBefore(colGroup, containerGroup.firstChild);\n }\n}\n\nexport function updateColContent(syncLeftCol: number, syncRightCol: number, proxy: SceneProxy) {\n for (let col = syncLeftCol; col <= syncRightCol; col++) {\n const colHeaderColGroup = proxy.table.scenegraph.getColGroup(col, true);\n colHeaderColGroup && updateColGroupContent(colHeaderColGroup, proxy);\n\n const bottomColGroup = proxy.table.scenegraph.getColGroupInBottom(col);\n bottomColGroup && updateColGroupContent(bottomColGroup, proxy);\n\n const rightTopColGroup = proxy.table.scenegraph.getColGroupInRightTopCorner(col);\n rightTopColGroup && updateColGroupContent(rightTopColGroup, proxy);\n\n const rightBottomColGroup = proxy.table.scenegraph.getColGroupInRightBottomCorner(col);\n rightBottomColGroup && updateColGroupContent(rightBottomColGroup, proxy);\n\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup && updateColGroupContentAsync(colGroup, proxy);\n }\n\n // update column container width\n updateColumnContainerWidth(proxy.table.scenegraph.colHeaderGroup);\n updateColumnContainerWidth(proxy.table.scenegraph.bottomFrozenGroup);\n updateColumnContainerWidth(proxy.table.scenegraph.bodyGroup);\n\n proxy.progress();\n}\n\nfunction updateAllColPosition(distStartColY: number, count: number, direction: 'left' | 'right', proxy: SceneProxy) {\n proxy.table.scenegraph.colHeaderGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n proxy.table.scenegraph.bottomFrozenGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n updateColGroupPosition(\n colGroup,\n direction === 'left' ? colGroup.col + count : colGroup.col - count,\n // (bodyGroup.lastChild as Group).attribute.x + (bodyGroup.lastChild as Group).attribute.width\n index === 0 // row === proxy.rowStart\n ? distStartColY\n : (colGroup._prev as Group).attribute.x + proxy.table.getColWidth((colGroup._prev as Group).col)\n );\n }\n });\n}\n\nfunction updateColumnContainerWidth(containerGroup: Group) {\n // update column container width\n const lastColGroup = getLastChild(containerGroup);\n if (!lastColGroup) {\n return;\n }\n containerGroup.setAttribute('width', lastColGroup.attribute.x + lastColGroup.attribute.width);\n containerGroup.border?.setAttribute('width', lastColGroup.attribute.x + lastColGroup.attribute.width);\n}\n","import { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimport type { Group } from '../../../graphic/group';\n\nexport function updateAutoRow(\n colStart: number,\n colEnd: number,\n rowStart: number,\n rowEnd: number,\n table: BaseTableAPI,\n direction: 'up' | 'down' = 'up',\n part?: boolean\n) {\n // return;\n // 更新y位置\n if (direction === 'up') {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'cell' || !cellGroup.row) {\n continue;\n }\n let y;\n if (cellGroup._prev) {\n // y = ((cellGroup._prev as Group)?.attribute.y ?? 0) + ((cellGroup._prev as Group)?.attribute.height ?? 0);\n y = (cellGroup._prev as Group)?.attribute.y + table.getRowHeight((cellGroup._prev as Group).row);\n } else if (part) {\n const baseCellGroup = table.scenegraph.highPerformanceGetCell(col, rowEnd + 1, true);\n y = baseCellGroup.attribute.y;\n if (isValid(y)) {\n for (let r = row; r <= rowEnd; r++) {\n y -= table.getRowHeight(r);\n }\n }\n } else {\n // 估计位置\n y = getEstimatePosition(cellGroup.row, table);\n }\n if (isValid(y)) {\n cellGroup.setAttribute('y', y);\n }\n }\n }\n } else {\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowEnd; row >= rowStart; row--) {\n const cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup.role !== 'cell' || !cellGroup.row) {\n continue;\n }\n let y;\n if (cellGroup._next) {\n // y = ((cellGroup._next as Group)?.attribute.y ?? 0) - (cellGroup.attribute.height ?? 0);\n y = (cellGroup._next as Group)?.attribute.y - table.getRowHeight(cellGroup.row);\n } else if (part) {\n const baseCellGroup = table.scenegraph.highPerformanceGetCell(col, rowStart - 1, true);\n y = baseCellGroup.attribute.y;\n for (let r = rowStart - 1; r < row; r++) {\n const height = table.getRowHeight(r);\n y += height;\n }\n } else {\n // 估计位置\n y = getEstimatePosition(cellGroup.row, table);\n // console.log('估计位置', table.getRowsHeight(table.frozenRowCount, cellGroup.row));\n }\n if (isValid(y)) {\n cellGroup.setAttribute('y', y);\n }\n }\n }\n }\n\n // update y limit in proxy\n const totalActualBodyRowCount = Math.min(\n table.scenegraph.proxy.rowLimit,\n table.scenegraph.proxy.bodyBottomRow - table.scenegraph.proxy.bodyTopRow + 1\n );\n // 渐进加载总row数量\n const totalBodyHeight = table.getRowsHeight(table.frozenRowCount, table.frozenRowCount + totalActualBodyRowCount);\n const totalHeight = table.getRowsHeight(table.frozenRowCount, table.rowCount - 1);\n table.scenegraph.proxy.yLimitTop = totalBodyHeight / 2;\n table.scenegraph.proxy.yLimitBottom = totalHeight - totalBodyHeight / 2;\n\n // // check\n // const columnGroup = table.scenegraph.bodyGroup.firstChild;\n // let y;\n // columnGroup.forEachChildren(child => {\n // if (!isValid(y)) {\n // y = child.attribute.y + child.attribute.height;\n // } else if (child.attribute.y !== y) {\n // debugger;\n // }\n // y = child.attribute.y + child.attribute.height;\n // });\n}\n\n// 获取预估位置\nfunction getEstimatePosition(row: number, table: BaseTableAPI) {\n let y;\n if (row < table.frozenRowCount) {\n y = table.getRowsHeight(0, row - 1);\n } else if (row >= table.rowCount - table.bottomFrozenRowCount) {\n y = table.getRowsHeight(table.rowCount - table.bottomFrozenRowCount, row - 1);\n } else {\n y = table.getRowsHeight(table.frozenRowCount, row - 1);\n }\n\n return y;\n}\n","import type { RowInfo } from '../../../../ts-types';\nimport type { Group } from '../../../graphic/group';\nimport { computeRowsHeight } from '../../../layout/compute-row-height';\nimport type { SceneProxy } from '../proxy';\nimport { updateAutoRow } from './update-auto-row';\n\nexport async function dynamicSetY(y: number, screenTop: RowInfo | null, isEnd: boolean, proxy: SceneProxy) {\n if (!screenTop) {\n return;\n }\n const screenTopRow = screenTop.row;\n const screenTopY = screenTop.top;\n\n let deltaRow;\n if (isEnd) {\n deltaRow = proxy.bodyBottomRow - proxy.rowEnd;\n } else {\n deltaRow = screenTopRow - proxy.referenceRow;\n }\n move(deltaRow, screenTopRow, screenTopY, y, proxy);\n if (isEnd) {\n const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, proxy.rowEnd, true);\n if (cellGroup.role === 'cell') {\n const deltaY =\n cellGroup.attribute.y +\n cellGroup.attribute.height -\n (proxy.table.tableNoFrameHeight - proxy.table.getFrozenRowsHeight() - proxy.table.getBottomFrozenRowsHeight()) -\n y;\n proxy.deltaY = -deltaY;\n proxy.updateBody(y - proxy.deltaY);\n }\n }\n // proxy.table.scenegraph.updateNextFrame();\n}\n\nfunction move(deltaRow: number, screenTopRow: number, screenTopY: number, y: number, proxy: SceneProxy) {\n if (deltaRow > 0) {\n // 向下滚动,顶部cell group移到底部\n moveCell(deltaRow, 'up', screenTopRow, screenTopY, y, proxy);\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n } else if (deltaRow < 0) {\n // 向上滚动,底部cell group移到顶部\n moveCell(-deltaRow, 'down', screenTopRow, screenTopY, y, proxy);\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n } else {\n // 不改变row,更新body group范围\n proxy.updateDeltaY(y, screenTopY, screenTopRow);\n proxy.updateBody(y - proxy.deltaY);\n }\n}\n\nasync function moveCell(\n count: number,\n direction: 'up' | 'down',\n screenTopRow: number,\n screenTopY: number,\n y: number,\n proxy: SceneProxy\n) {\n // 限制count范围\n if (direction === 'up' && proxy.rowEnd + count > proxy.bodyBottomRow) {\n count = proxy.bodyBottomRow - proxy.rowEnd;\n } else if (direction === 'down' && proxy.rowStart - count < proxy.bodyTopRow) {\n count = proxy.rowStart - proxy.bodyTopRow;\n }\n if (count === 0) {\n return;\n }\n if (count < 0) {\n direction = direction === 'up' ? 'down' : 'up';\n count = -count;\n }\n\n // 两种更新模式\n // 1. count < rowEnd - rowStart:从顶/底部移动count数量的单元格到底/顶部\n // 2. count >= rowEnd - rowStart:整体移动到目标位置\n if (count < proxy.rowEnd - proxy.rowStart) {\n // 计算更新区域\n const startRow = direction === 'up' ? proxy.rowStart : proxy.rowEnd - count + 1;\n const endRow = direction === 'up' ? proxy.rowStart + count - 1 : proxy.rowEnd;\n const distStartRow = direction === 'up' ? proxy.rowEnd + 1 : proxy.rowStart - count;\n const distEndRow = direction === 'up' ? proxy.rowEnd + count : proxy.rowStart - 1;\n\n // 更新同步范围\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = distStartRow;\n syncBottomRow = distEndRow;\n } else {\n const topRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n const bottomRow = Math.min(\n proxy.bodyBottomRow,\n screenTopRow + proxy.screenRowCount * 2,\n proxy.table.rowCount - 1\n );\n // get coincide of distStartRow&distEndRow and topRow&BottomRow\n // syncTopRow = Math.max(distStartRow, topRow);\n // syncBottomRow = Math.min(distEndRow, bottomRow);\n syncTopRow = topRow;\n syncBottomRow = bottomRow;\n }\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow, false);\n\n updatePartRowPosition(startRow, endRow, direction, proxy);\n\n proxy.rowStart = direction === 'up' ? proxy.rowStart + count : proxy.rowStart - count;\n proxy.rowEnd = direction === 'up' ? proxy.rowEnd + count : proxy.rowEnd - count;\n\n // 本次行更新是否同步完成,列数超过limit时为false\n const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true);\n\n if (proxy.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // row header group\n updateAutoRow(\n 0, // colStart\n proxy.table.frozenColCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // right frozen group\n updateAutoRow(\n proxy.table.colCount - proxy.table.rightFrozenColCount, // colStart\n proxy.table.colCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up', // 跳转到底部时,从下向上对齐\n true\n );\n\n // const oldCellOffset = screenTopY - y - proxy.table.getFrozenRowsHeight();\n // console.log('cellOffset', screenTopY, screenTopRow);\n // const newScreenTop = (proxy.table as any).getTargetRowAt(\n // y + proxy.table.scenegraph.colHeaderGroup.attribute.height\n // );\n // console.log('newScreenTop', newScreenTop);\n // const cellOffset = newScreenTop.top - screenTopY;\n\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, screenTopRow, true);\n // const deltaY =\n // newScreenTop.top -\n // cellOffset -\n // (cellGroup.attribute.y + proxy.table.getFrozenRowsHeight() + proxy.table.scenegraph.proxy.deltaY);\n // proxy.table.scenegraph.proxy.deltaY += deltaY;\n }\n\n proxy.currentRow = direction === 'up' ? proxy.currentRow + count : proxy.currentRow - count;\n proxy.totalRow = Math.max(\n 0,\n Math.min(\n proxy.bodyBottomRow,\n direction === 'up' ? proxy.totalRow + count : proxy.totalRow - count,\n proxy.table.rowCount - 1\n )\n );\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n // proxy.referenceRow = screenTopRow;\n // proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow);\n if (proxy.table.isAutoRowHeight() && sync) {\n proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, proxy.rowEnd + 1);\n } else {\n proxy.rowUpdatePos = Math.min(proxy.rowUpdatePos, distStartRow);\n }\n proxy.rowUpdateDirection = direction;\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n } else {\n const distStartRow = direction === 'up' ? proxy.rowStart + count : proxy.rowStart - count;\n const distEndRow = Math.min(\n proxy.table.rowCount - 1,\n direction === 'up' ? proxy.rowEnd + count : proxy.rowEnd - count\n );\n const distStartRowY = proxy.table.getRowsHeight(proxy.bodyTopRow, distStartRow - 1);\n\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = distStartRow;\n syncBottomRow = distEndRow;\n } else {\n syncTopRow = Math.max(proxy.bodyTopRow, screenTopRow - proxy.screenRowCount * 1);\n syncBottomRow = Math.min(proxy.bodyBottomRow, screenTopRow + proxy.screenRowCount * 2, proxy.table.rowCount - 1);\n }\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow, false);\n\n // 更新同步范围\n updateAllRowPosition(distStartRowY, count, direction, proxy);\n\n proxy.rowStart = distStartRow;\n proxy.rowEnd = distEndRow;\n\n const sync = updateRowContent(syncTopRow, syncBottomRow, proxy, true);\n\n if (proxy.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n\n // row header group\n updateAutoRow(\n 0, // colStart\n proxy.table.frozenColCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n\n // right frozen group\n updateAutoRow(\n proxy.table.colCount - proxy.table.rightFrozenColCount, // colStart\n proxy.table.colCount - 1, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n }\n\n // // update body position when click scroll bar\n // if (syncTopRow === proxy.bodyTopRow) {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, syncTopRow, true);\n // const deltaY = cellGroup.attribute.y - y;\n // proxy.table.scenegraph.proxy.deltaY = deltaY;\n // } else if (syncBottomRow === proxy.bodyBottomRow) {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, syncBottomRow, true);\n // const deltaY =\n // cellGroup.attribute.y +\n // cellGroup.attribute.height -\n // (proxy.table.tableNoFrameHeight - proxy.table.getFrozenRowsHeight()) -\n // y;\n // proxy.table.scenegraph.proxy.deltaY = -deltaY;\n // } else {\n // const cellGroup = proxy.table.scenegraph.highPerformanceGetCell(proxy.colStart, screenTopRow, true);\n // const deltaY =\n // screenTopY - (cellGroup.attribute.y + proxy.table.getFrozenRowsHeight() + proxy.table.scenegraph.proxy.deltaY);\n // proxy.table.scenegraph.proxy.deltaY = deltaY;\n // }\n\n proxy.currentRow = direction === 'up' ? proxy.currentRow + count : proxy.currentRow - count;\n proxy.totalRow = Math.max(\n 0,\n Math.min(\n proxy.bodyBottomRow,\n direction === 'up' ? proxy.totalRow + count : proxy.totalRow - count,\n proxy.table.rowCount - 1\n )\n );\n proxy.referenceRow = proxy.rowStart + Math.floor((proxy.rowEnd - proxy.rowStart) / 2);\n // proxy.referenceRow = screenTopRow;\n if (proxy.table.isAutoRowHeight() && sync) {\n proxy.rowUpdatePos = proxy.rowEnd + 1;\n } else {\n proxy.rowUpdatePos = proxy.rowStart;\n }\n proxy.rowUpdateDirection = distEndRow > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up';\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n }\n}\n\nfunction updatePartRowPosition(startRow: number, endRow: number, direction: 'up' | 'down', proxy: SceneProxy) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n // body group\n for (let col = proxy.bodyLeftCol; col <= proxy.bodyRightCol; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n if (colGroup) {\n for (let row = startRow; row <= endRow; row++) {\n updateCellGroupPosition(colGroup, direction, proxy);\n }\n }\n }\n}\n\nfunction updateCellGroupPosition(colGroup: Group, direction: 'up' | 'down', proxy: SceneProxy) {\n if (colGroup.childrenCount >= 1) {\n if (direction === 'up') {\n const cellGroup = colGroup.firstChild as Group;\n proxy.updateCellGroupPosition(\n cellGroup,\n (colGroup.lastChild as Group).row + 1,\n (colGroup.lastChild as Group).attribute.y + proxy.table.getRowHeight((colGroup.lastChild as Group).row) // (colGroup.lastChild as Group).attribute.height\n );\n colGroup.appendChild(cellGroup);\n } else {\n const cellGroup = colGroup.lastChild as Group;\n proxy.updateCellGroupPosition(\n cellGroup,\n (colGroup.firstChild as Group).row - 1,\n (colGroup.firstChild as Group).attribute.y - proxy.table.getRowHeight((cellGroup as Group).row) // cellGroup.attribute.height\n );\n colGroup.insertBefore(cellGroup, colGroup.firstChild);\n }\n }\n}\n\nfunction updateAllRowPosition(distStartRowY: number, count: number, direction: 'up' | 'down', proxy: SceneProxy) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n // body group\n for (let col = proxy.bodyLeftCol; col <= proxy.bodyRightCol; col++) {\n const colGroup = proxy.table.scenegraph.getColGroup(col);\n colGroup?.forEachChildren((cellGroup: Group, index) => {\n // 这里使用colGroup变量而不是for proxy.rowStart to proxy.rowEndproxy.rowEnd是因为在更新内可能出现row号码重复的情况\n proxy.updateCellGroupPosition(\n cellGroup,\n direction === 'up' ? cellGroup.row + count : cellGroup.row - count,\n index === 0 // row === proxy.rowStart\n ? distStartRowY\n : (cellGroup._prev as Group).attribute.y + proxy.table.getRowHeight((cellGroup._prev as Group).row)\n );\n });\n }\n}\n\nexport function updateRowContent(syncTopRow: number, syncBottomRow: number, proxy: SceneProxy, async = false) {\n // row header group\n for (let col = 0; col < proxy.table.frozenColCount; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row, true);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n // right frozen group\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n // body group\n let leftCol = proxy.bodyLeftCol;\n let rightCol = proxy.bodyRightCol;\n let sync = true;\n if (async) {\n const screenLeftCol = proxy.screenLeftCol;\n leftCol = Math.max(proxy.bodyLeftCol, screenLeftCol - proxy.screenColCount * 1);\n rightCol = Math.min(proxy.bodyRightCol, screenLeftCol + proxy.screenColCount * 2);\n if (leftCol !== proxy.bodyLeftCol || rightCol !== proxy.bodyRightCol) {\n sync = false;\n }\n }\n for (let col = leftCol; col <= rightCol; col++) {\n for (let row = syncTopRow; row <= syncBottomRow; row++) {\n // const cellGroup = proxy.table.scenegraph.getCell(col, row);\n const cellGroup = proxy.highPerformanceGetCell(col, row);\n proxy.updateCellGroupContent(cellGroup);\n }\n }\n proxy.table.scenegraph.updateNextFrame();\n\n return sync;\n}\n","import type { Group } from '../../../graphic/group';\nimport { computeRowsHeight } from '../../../layout/compute-row-height';\nimport type { SceneProxy } from '../proxy';\nimport { updateRowContent } from './dynamic-set-y';\nimport { updateAutoRow } from './update-auto-row';\n\nexport async function sortVertical(proxy: SceneProxy) {\n // 更新左 中 右 左下 底部 右下 部分的单元格需更新标记\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n colGroup.needUpdate = true;\n colGroup?.forEachChildren((cellGroup: Group) => {\n (cellGroup as any).needUpdate = true;\n });\n }\n });\n\n // 更新同步范围\n let syncTopRow;\n let syncBottomRow;\n if (proxy.table.isAutoRowHeight()) {\n syncTopRow = proxy.rowStart;\n syncBottomRow = proxy.rowEnd;\n } else {\n syncTopRow = Math.max(proxy.bodyTopRow, proxy.screenTopRow - proxy.screenRowCount * 1);\n syncBottomRow = Math.min(\n proxy.bodyBottomRow,\n proxy.screenTopRow + proxy.screenRowCount * 2,\n proxy.table.rowCount - 1\n );\n }\n // console.log('sort更新同步范围', syncTopRow, syncBottomRow);\n\n const oldBodyHeight = proxy.table.getAllRowsHeight();\n\n computeRowsHeight(proxy.table, syncTopRow, syncBottomRow);\n\n const newBodyHeight = proxy.table.getAllRowsHeight();\n\n if (oldBodyHeight !== newBodyHeight) {\n proxy.table.scenegraph.updateContainerHeight(proxy.table.frozenRowCount, newBodyHeight - oldBodyHeight);\n }\n\n for (let col = 0; col < proxy.table.frozenColCount ?? 0; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n\n updateRowContent(syncTopRow, syncBottomRow, proxy);\n\n if (proxy.table.isAutoRowHeight()) {\n updateAutoRow(\n proxy.bodyLeftCol, // colStart\n proxy.bodyRightCol, // colEnd\n syncTopRow, // rowStart\n syncBottomRow, // rowEnd\n proxy.table,\n proxy.rowEnd > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up' // 跳转到底部时,从下向上对齐\n );\n }\n proxy.rowUpdatePos = proxy.rowStart;\n proxy.rowUpdateDirection = proxy.rowEnd > proxy.bodyBottomRow - (proxy.rowEnd - proxy.rowStart + 1) ? 'down' : 'up';\n\n // if (\n // proxy.rowEnd === proxy.table.scenegraph.proxy.bodyBottomRow &&\n // proxy.rowStart === proxy.table.scenegraph.proxy.bodyTopRow\n // ) {\n // // 全量更新,do nothing\n // } else if (proxy.rowEnd === proxy.table.scenegraph.proxy.bodyBottomRow) {\n // const totalHeight = proxy.table.getAllRowsHeight();\n // const top = totalHeight - proxy.table.scenegraph.height;\n // proxy.updateBody(top);\n // } else if (proxy.rowStart === proxy.table.scenegraph.proxy.bodyTopRow) {\n // proxy.updateBody(0);\n // }\n\n proxy.table.scenegraph.updateNextFrame();\n if (!proxy.table.isAutoRowHeight()) {\n await proxy.progress();\n }\n}\n","import type { Group } from '../../../graphic/group';\nimport { computeColsWidth } from '../../../layout/compute-col-width';\nimport type { SceneProxy } from '../proxy';\nimport { updateColContent } from './dynamic-set-x';\nimport { updateAutoColumn } from './update-auto-column';\n\nexport async function sortHorizontal(proxy: SceneProxy) {\n // 更新左 中 右 左下 底部 右下 部分的单元格需更新标记\n proxy.table.scenegraph.bodyGroup.forEachChildren((colGroup: Group, index: number) => {\n if (colGroup.type === 'group') {\n colGroup.needUpdate = true;\n colGroup?.forEachChildren((cellGroup: Group) => {\n (cellGroup as any).needUpdate = true;\n });\n }\n });\n\n // 更新同步范围\n const syncLeftCol = Math.max(proxy.bodyLeftCol, proxy.screenLeftCol - proxy.screenColCount * 1);\n const syncRightCol = Math.min(proxy.bodyRightCol, proxy.screenLeftCol + proxy.screenColCount * 2);\n\n computeColsWidth(proxy.table, syncLeftCol, syncRightCol);\n\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n for (let col = proxy.table.colCount - proxy.table.rightFrozenColCount; col < proxy.table.colCount; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = proxy.table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = proxy.rowStart; row <= proxy.rowEnd; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n for (let row = proxy.table.rowCount - proxy.table.bottomFrozenRowCount; row < proxy.table.rowCount; row++) {\n proxy.table.scenegraph.updateCellContent(col, row);\n }\n }\n\n updateColContent(syncLeftCol, syncRightCol, proxy);\n\n // updateAutoColumn(\n // syncLeftCol, // colStart\n // syncRightCol, // colEnd\n // proxy.table,\n // proxy.colEnd > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left' // 跳转到右侧时,从右向左对齐\n // );\n\n proxy.colUpdatePos = proxy.colStart;\n proxy.colUpdateDirection = proxy.colEnd > proxy.bodyRightCol - (proxy.colEnd - proxy.colStart + 1) ? 'right' : 'left';\n\n // if (\n // proxy.colEnd === proxy.table.scenegraph.proxy.bodyRightCol &&\n // proxy.colStart === proxy.table.scenegraph.proxy.bodyLeftCol\n // ) {\n // // 全量更新,do nothing\n // } else if (proxy.colEnd === proxy.table.scenegraph.proxy.bodyRightCol) {\n // const totalWidth = proxy.table.getAllColsWidth();\n // const left = totalWidth - proxy.table.scenegraph.width;\n // // proxy.updateBody(top);\n // proxy.table.scenegraph.setBodyAndColHeaderX(-left);\n // } else if (proxy.colStart === proxy.table.scenegraph.proxy.bodyLeftCol) {\n // // proxy.updateBody(0);\n // proxy.table.scenegraph.setBodyAndColHeaderX(0);\n // }\n\n proxy.table.scenegraph.updateNextFrame();\n await proxy.progress();\n}\n","import type { IGraphic, Image, Text } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Group } from '../graphic/group';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ITextStyleOption, StickCell } from '../../ts-types';\nimport { isNumber, min } from '@visactor/vutils';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function handleTextStick(table: BaseTableAPI) {\n // reset\n const { changedCells } = table.internalProps.stick; // changedCells only cache one time\n changedCells.forEach((cellPos: StickCell) => {\n const cellGroup = table.scenegraph.getCell(cellPos.col, cellPos.row);\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dx: cellPos.dx,\n dy: cellPos.dy\n });\n });\n });\n changedCells.clear();\n\n const { scrollTop, scrollLeft, frozenRowCount, frozenColCount } = table;\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const frozenColsWidth = table.getFrozenColsWidth();\n // 计算非冻结\n const { row: rowTop } = table.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colLeft } = table.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowStart = Math.max(rowTop, table.frozenRowCount);\n const colStart = Math.max(colLeft, table.frozenColCount);\n const rowEnd =\n table.getAllRowsHeight() > table.tableNoFrameHeight\n ? table.getRowAt(scrollTop + table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() - 1).row\n : table.rowCount - table.bottomFrozenRowCount - 1;\n const colEnd =\n table.getAllColsWidth() > table.tableNoFrameWidth\n ? table.getColAt(scrollLeft + table.tableNoFrameWidth - table.getRightFrozenColsWidth() - 1).col\n : table.colCount - table.rightFrozenColCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return;\n }\n\n // column header\n for (let row = 0; row < frozenRowCount; row++) {\n if (colEnd < colStart) {\n break;\n }\n [colStart, colEnd].forEach((col: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'vertical') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(\n cellGroup,\n frozenColsWidth + table.tableX,\n table.tableNoFrameWidth - table.getRightFrozenColsWidth() + table.tableX,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n\n // row header\n for (let col = 0; col < frozenColCount; col++) {\n if (rowEnd < rowStart) {\n break;\n }\n [rowStart, rowEnd].forEach((row: number) => {\n const style = table._getCellStyle(col, row);\n if (\n style?.textStick &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'tree' &&\n style?.textStick !== 'horizontal'\n ) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(\n cellGroup,\n frozenRowsHeight + table.tableY,\n table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() + table.tableY,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n\n // body\n for (let col = colStart; col <= colEnd; col++) {\n if (rowEnd < rowStart) {\n break;\n }\n [rowStart, rowEnd].forEach((row: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'horizontal') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(\n cellGroup,\n frozenRowsHeight + table.tableY,\n table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() + table.tableY,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n for (let row = rowStart; row <= rowEnd; row++) {\n if (colEnd < colStart) {\n break;\n }\n [colStart, colEnd].forEach((col: number) => {\n const style = table._getCellStyle(col, row);\n if (style?.textStick && style?.textStick !== 'vertical') {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(\n cellGroup,\n frozenColsWidth + table.tableX,\n table.tableNoFrameWidth - table.getRightFrozenColsWidth() + table.tableX,\n changedCells,\n style?.textStickBaseOnAlign,\n table\n );\n }\n });\n }\n}\n\n/*\n * adjust cell content vertical layout\n * @param {Group} cellGroup\n * @param {number} scrollTop\n */\nfunction adjustCellContentVerticalLayout(\n cellGroup: Group,\n minTop: number,\n maxTop: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined,\n table: BaseTableAPI\n) {\n if (\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n dealVertical(singleCellGroup, minTop, maxTop, changedCells, textStickBaseOnAlign);\n }\n }\n } else {\n dealVertical(cellGroup, minTop, maxTop, changedCells, textStickBaseOnAlign);\n }\n}\n\nfunction dealVertical(\n cellGroup: Group,\n minTop: number,\n maxTop: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined\n) {\n // get text element\n const graphic =\n (cellGroup.getChildByName('text', true) as Text) || (cellGroup.getChildByName('image', true) as Image);\n if (!graphic) {\n return;\n }\n if (graphic.type === 'image') {\n const { image: url } = graphic.attribute;\n if (!url || !graphic.resources) {\n return;\n }\n const res = graphic.resources.get(url as any);\n if (res.state !== 'success') {\n return;\n }\n }\n\n // const textBaseline = (graphic as any).attribute.textBaseline ?? (graphic as any).textBaseline ?? 'top';\n const textBaseline = (graphic as any).textBaseline ?? 'top';\n\n graphic.AABBBounds.width();\n const textTop = graphic.globalAABBBounds.y1;\n const textBottom = graphic.globalAABBBounds.y2;\n\n if (textBaseline === 'middle' && textStickBaseOnAlign) {\n const cellTop = cellGroup.globalAABBBounds.y1 + ((cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0);\n const cellBottom = cellTop + (cellGroup.contentHeight ?? cellGroup.attribute.height ?? 0);\n if (cellTop < minTop || cellBottom > maxTop) {\n const visibleCellTop = Math.max(cellTop, minTop);\n const visibleCellBottom = Math.min(cellBottom, maxTop);\n const delta =\n graphic.globalTransMatrix.f - (visibleCellBottom + visibleCellTop) / 2 + graphic.AABBBounds.height() / 2;\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - delta + 2); // 2 is the buffer\n });\n }\n } else if (textTop < minTop) {\n const deltaHeight = textTop - minTop;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - deltaHeight + 2); // 2 is the buffer\n });\n } else if (textBottom > maxTop) {\n const deltaHeight = textBottom - maxTop;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', (child.attribute.dy ?? 0) - deltaHeight); // 2 is the buffer\n });\n }\n}\n\n/*\n * adjust cell content horizontal layout\n * @param {Group} cellGroup\n * @param {number} scrollLeft\n */\nfunction adjustCellContentHorizontalLayout(\n cellGroup: Group,\n minLeft: number,\n maxLeft: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined,\n table: BaseTableAPI\n) {\n if (\n isNumber(cellGroup.mergeStartCol) &&\n isNumber(cellGroup.mergeStartRow) &&\n isNumber(cellGroup.mergeEndCol) &&\n isNumber(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, table.scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const singleCellGroup = table.scenegraph.getCell(col, row);\n if (singleCellGroup.role !== 'cell') {\n continue;\n }\n dealHorizontal(singleCellGroup, minLeft, maxLeft, changedCells, textStickBaseOnAlign);\n }\n }\n } else {\n dealHorizontal(cellGroup, minLeft, maxLeft, changedCells, textStickBaseOnAlign);\n }\n}\n\nfunction dealHorizontal(\n cellGroup: Group,\n minLeft: number,\n maxLeft: number,\n changedCells: Map,\n textStickBaseOnAlign: boolean | undefined\n) {\n // get text element\n // const text = cellGroup.getChildByName('text', true) as Text;\n // if (!text) {\n // return;\n // }\n\n // get text element\n const graphic =\n (cellGroup.getChildByName('text', true) as Text) || (cellGroup.getChildByName('image', true) as Image);\n if (!graphic) {\n return;\n }\n if (graphic.type === 'image') {\n const { image: url } = graphic.attribute;\n if (!url || !graphic.resources) {\n return;\n }\n const res = graphic.resources.get(url as any);\n if (res.state !== 'success') {\n return;\n }\n }\n const textAlign = (graphic as any).attribute.textAlign ?? (graphic as any).textAlign ?? 'left';\n graphic.AABBBounds.width();\n const textLeft = graphic.globalAABBBounds.x1;\n const textRight = graphic.globalAABBBounds.x2;\n if (textAlign === 'center' && textStickBaseOnAlign) {\n const cellLeft = cellGroup.globalAABBBounds.x1 + ((cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0);\n const cellRight = cellLeft + (cellGroup.contentWidth ?? cellGroup.attribute.width ?? 0);\n if (cellLeft < minLeft || cellRight > maxLeft) {\n const visibleCellLeft = Math.max(cellLeft, minLeft);\n const visibleCellRight = Math.min(cellRight, maxLeft);\n const delta = graphic.globalTransMatrix.e - (visibleCellRight + visibleCellLeft) / 2;\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - delta + 2); // 2 is the buffer\n });\n }\n } else if (textLeft < minLeft) {\n const deltaWidth = textLeft - minLeft;\n // text is out of view, move all elements right\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - deltaWidth + 2); // 2 is the buffer\n });\n } else if (textRight > maxLeft) {\n const deltaWidth = textRight - maxLeft;\n // text is out of view, move all elements down\n !changedCells.has(`${cellGroup.col}-${cellGroup.row}`) &&\n changedCells.set(`${cellGroup.col}-${cellGroup.row}`, {\n col: cellGroup.col,\n row: cellGroup.row,\n dx: (cellGroup.firstChild as IGraphic)?.attribute.dx ?? 0,\n dy: (cellGroup.firstChild as IGraphic)?.attribute.dy ?? 0\n });\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', (child.attribute.dx ?? 0) - deltaWidth); // 2 is the buffer\n });\n }\n}\n\nexport function checkHaveTextStick(table: BaseTableAPI) {\n const headerObjects = table.internalProps.layoutMap.headerObjects;\n const columnObjects = table.internalProps.layoutMap.columnObjects;\n for (let i = 0; i < headerObjects.length; i++) {\n const header = headerObjects[i];\n if (header && (header.style as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if (column && (column.style as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n const themeStick =\n table.theme.headerStyle.textStick || table.theme.rowHeaderStyle.textStick || table.theme.bodyStyle.textStick;\n if (themeStick) {\n return true;\n }\n return false;\n}\n","import { isNumber, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { Group } from '../../graphic/group';\nimport { computeColsWidth } from '../../layout/compute-col-width';\nimport { computeRowsHeight } from '../../layout/compute-row-height';\nimport { emptyGroup } from '../../utils/empty-group';\nimport { createColGroup } from '../column';\nimport { createComplexColumn } from '../column-helper';\nimport { createGroupForFirstScreen } from './create-group-for-first-screen';\nimport { dynamicSetX, updateColContent } from './update-position/dynamic-set-x';\nimport { dynamicSetY, updateRowContent } from './update-position/dynamic-set-y';\nimport { updateAutoRow } from './update-position/update-auto-row';\nimport { sortVertical } from './update-position/sort-vertical';\nimport { sortHorizontal } from './update-position/sort-horizontal';\nimport { updateAutoColumn } from './update-position/update-auto-column';\nimport { getDefaultHeight, getDefaultWidth } from './default-width-height';\nimport { handleTextStick } from '../../stick-text';\nimport type { ColumnInfo, RowInfo } from '../../../ts-types';\n\nexport class SceneProxy {\n table: BaseTableAPI;\n isRelease: boolean = false;\n mode: 'column' | 'row' | 'pivot' = 'column';\n isProgressing: boolean;\n\n rowLimit = 200;\n currentRow = 0; // 目前渐进生成的row number\n totalRow: number; // 渐进完成最后一行的row number\n yLimitTop: number; // y > yLimitTop动态更新,否则直接修改xy\n yLimitBottom: number; // y < yLimitBottom动态更新,否则直接修改xy\n rowStart = 0; // 当前维护的部分第一行的row number\n rowEnd = 0; // 当前维护的部分最后一行的row number\n referenceRow = 0; // 当前维护的部分中间一行的row number,认为referenceRow对应当前屏幕显示范围的第一行\n bodyTopRow: number; // table body部分的第一行row number\n bodyBottomRow: number; // table body部分的最后一行row number\n screenRowCount: number; // 预计屏幕范围内显示的row count\n firstScreenRowLimit: number; // 首屏同步加载部分最后一行的row number\n taskRowCount: number; // 一次任务生成/更新的row count\n rowUpdatePos: number; // 异步任务目前更新到的行的row number\n rowUpdateDirection: 'up' | 'down'; // 当前行更新的方向\n screenTopRow: number = 0; // 当前屏幕范围内显示的第一行的row number\n totalActualBodyRowCount: number; // 实际表格body部分的行数\n deltaY: number = 0;\n deltaHeight: number = 0;\n\n colLimit = 100;\n // bodyLeftCol: number; // table body部分的第一列col number\n bodyRightCol: number; // table body部分的最后一列col number\n totalCol: number; // 渐进完成最后一列的col number\n colStart: number; // 当前维护的部分第一列的col number\n colEnd: number; // 当前维护的部分最后一列的col number\n taskColCount: number; // 一次任务生成/更新的col count\n xLimitLeft: number; // x > xLimitLeft动态更新,否则直接修改xy\n xLimitRight: number; // x < xLimitRight动态更新,否则直接修改xy\n screenColCount: number; // 预计屏幕范围内显示的col count\n firstScreenColLimit: number; // 首屏同步加载部分最后一列的col number\n colUpdatePos: number; // 异步任务目前更新到的列的col number\n currentCol: number; // 目前渐进生成的col number\n referenceCol: number; // 当前维护的部分中间一列的col number,认为referenceCol对应当前屏幕显示范围的第一列\n screenLeftCol: number = 0; // 当前屏幕范围内显示的第一列的col number\n colUpdateDirection: 'left' | 'right'; // 当前列更新方向\n totalActualBodyColCount: number; // 实际表格body部分的列数\n deltaX: number = 0;\n deltaWidth: number = 0;\n\n cellCache: Map = new Map(); // 单元格位置快速查找缓存\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n\n if (this.table.isPivotChart()) {\n // this.rowLimit = 100;\n // this.colLimit = 100;\n this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n } else if (this.table.isAutoRowHeight()) {\n // this.rowLimit = 100;\n this.rowLimit = Math.max(100, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n } else if (this.table.widthMode === 'autoWidth') {\n // this.colLimit = 100;\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n } else {\n this.rowLimit = Math.max(200, Math.ceil((table.tableNoFrameHeight * 2) / table.defaultRowHeight));\n this.colLimit = Math.max(100, Math.ceil((table.tableNoFrameWidth * 2) / table.defaultColWidth));\n }\n\n if (this.table.internalProps.transpose) {\n this.mode = 'row';\n } else if (this.table.isPivotTable()) {\n this.mode = 'pivot';\n }\n if (this.table.options.maintainedDataCount) {\n this.rowLimit = this.table.options.maintainedDataCount;\n }\n }\n\n get bodyLeftCol(): number {\n return this.table.frozenColCount;\n }\n\n setParamsForColumn() {\n // this.bodyLeftCol = this.table.frozenColCount;\n this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n\n // compute the column info about progress creation\n const totalActualBodyColCount = Math.min(this.colLimit, this.bodyRightCol - this.bodyLeftCol + 1);\n this.totalActualBodyColCount = totalActualBodyColCount;\n this.totalCol = this.bodyLeftCol + totalActualBodyColCount - 1; // 目标渐进完成的col\n this.colStart = this.bodyLeftCol;\n this.colEnd = this.totalCol; // temp for first screen, will replace in createGroupForFirstScreen()\n const defaultColWidth = this.table.defaultColWidth;\n // const defaultColWidth = getDefaultHeight(this.table);\n this.taskColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth) * 1;\n\n // 确定动态更新限制\n const totalBodyWidth = defaultColWidth * totalActualBodyColCount;\n const totalWidth = defaultColWidth * (this.bodyRightCol - this.bodyLeftCol + 1);\n this.xLimitLeft = totalBodyWidth / 2;\n this.xLimitRight = totalWidth - totalBodyWidth / 2;\n\n // 确定首屏高度范围\n const widthLimit = this.table.tableNoFrameWidth * 5;\n this.screenColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth);\n this.firstScreenColLimit = Math.max(\n 15, // min firstScreenColLimit\n this.bodyLeftCol + Math.min(this.colLimit, Math.ceil(widthLimit / defaultColWidth))\n );\n // this.firstScreenRowLimit = this.bodyBottomRow;\n\n this.colUpdatePos = this.bodyRightCol;\n }\n\n setParamsForRow() {\n this.bodyTopRow = this.table.frozenRowCount;\n this.bodyBottomRow = this.table.rowCount - 1 - this.table.bottomFrozenRowCount;\n // this.bodyLeftCol = 0;\n // this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n\n // 计算渐进加载数量\n const totalActualBodyRowCount = Math.min(this.rowLimit, this.bodyBottomRow - this.bodyTopRow + 1); // 渐进加载总row数量\n this.totalActualBodyRowCount = totalActualBodyRowCount;\n this.totalRow = this.bodyTopRow + totalActualBodyRowCount - 1; // 目标渐进完成的row\n this.rowStart = this.bodyTopRow;\n this.rowEnd = this.totalRow; // temp for first screen, will replace in createGroupForFirstScreen()\n const defaultRowHeight = this.table.defaultRowHeight;\n // const defaultRowHeight = getDefaultWidth(this.table);\n this.taskRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight) * 1;\n\n // 确定动态更新限制\n const totalBodyHeight = defaultRowHeight * totalActualBodyRowCount;\n const totalHeight = defaultRowHeight * (this.bodyBottomRow - this.bodyTopRow + 1);\n this.yLimitTop = totalBodyHeight / 2;\n this.yLimitBottom = totalHeight - totalBodyHeight / 2;\n // this.bottomOffset = totalHeight - totalBodyHeight / 2;\n\n // 确定首屏高度范围\n const heightLimit = this.table.tableNoFrameHeight * 5;\n this.screenRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight);\n this.firstScreenRowLimit = Math.max(\n 30, // min firstScreenRowLimit\n this.bodyTopRow + Math.min(this.rowLimit, Math.ceil(heightLimit / defaultRowHeight))\n );\n // this.firstScreenRowLimit = this.bodyBottomRow;\n\n this.rowUpdatePos = this.bodyBottomRow;\n }\n\n refreshRowCount() {\n this.bodyTopRow = this.table.frozenRowCount;\n this.bodyBottomRow = this.table.rowCount - 1 - this.table.bottomFrozenRowCount;\n const totalActualBodyRowCount = Math.min(this.rowLimit, this.bodyBottomRow - this.bodyTopRow + 1); // 渐进加载总row数量\n this.totalActualBodyRowCount = totalActualBodyRowCount;\n this.totalRow = this.rowStart + totalActualBodyRowCount - 1; // 目标渐进完成的row\n\n // this.rowStart = this.bodyTopRow;\n // this.rowEnd = this.totalRow; // temp for first screen, will replace in createGroupForFirstScreen()\n }\n\n refreshColCount() {\n this.bodyRightCol = this.table.colCount - 1 - this.table.rightFrozenColCount;\n const totalActualBodyColCount = Math.min(this.colLimit, this.bodyRightCol - this.bodyLeftCol + 1);\n this.totalActualBodyColCount = totalActualBodyColCount;\n this.totalCol = this.bodyLeftCol + totalActualBodyColCount - 1; // 目标渐进完成的col\n\n this.colStart = this.bodyLeftCol;\n this.colEnd = this.totalCol; // temp for first screen, will replace in createGroupForFirstScreen()\n }\n\n resize() {\n const defaultColWidth = this.table.defaultColWidth;\n this.taskColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth) * 1;\n const widthLimit = this.table.tableNoFrameWidth * 5;\n this.screenColCount = Math.ceil(this.table.tableNoFrameWidth / defaultColWidth);\n this.firstScreenColLimit = this.bodyLeftCol + Math.min(this.colLimit, Math.ceil(widthLimit / defaultColWidth));\n\n const defaultRowHeight = this.table.defaultRowHeight;\n this.taskRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight) * 1;\n const heightLimit = this.table.tableNoFrameHeight * 5;\n this.screenRowCount = Math.ceil(this.table.tableNoFrameHeight / defaultRowHeight);\n this.firstScreenRowLimit = this.bodyTopRow + Math.min(this.rowLimit, Math.ceil(heightLimit / defaultRowHeight));\n }\n\n createGroupForFirstScreen(\n cornerHeaderGroup: Group,\n colHeaderGroup: Group,\n rowHeaderGroup: Group,\n rightFrozenGroup: Group,\n bottomFrozenGroup: Group,\n bodyGroup: Group,\n xOrigin: number,\n yOrigin: number\n ) {\n createGroupForFirstScreen(\n cornerHeaderGroup,\n colHeaderGroup,\n rowHeaderGroup,\n rightFrozenGroup,\n bottomFrozenGroup,\n bodyGroup,\n xOrigin,\n yOrigin,\n this\n );\n }\n // async progress() {\n // if (this.rowUpdatePos < this.rowEnd) {\n // console.log('progress rowUpdatePos', this.rowUpdatePos);\n // // 先更新\n // await this.updateCellGroupsAsync();\n // await this.progress();\n // } else if (this.currentRow < this.totalRow) {\n // console.log('progress currentRow', this.currentRow);\n // // 先更新没有需要更新的节点,在生成新节点\n // await this.createRow();\n // await this.progress();\n // }\n // }\n async progress() {\n if (this.isProgressing) {\n return;\n }\n this.isProgressing = true;\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n this.isProgressing = false;\n if (this.isRelease) {\n return;\n }\n // console.log('progress col', this.colUpdatePos, this.colEnd, this.currentCol, this.totalCol);\n // console.log('progress row', this.rowUpdatePos, this.rowEnd, this.currentRow, this.totalRow);\n // console.log('before: createRow', table.scenegraph.bodyGroup.lastChild.attribute);\n // if (this.isSkipProgress) {\n // await this.progress();\n // } else\n if (this.colUpdatePos <= this.colEnd) {\n // console.log('progress colUpdatePos', this.colUpdatePos);\n await this.updateColCellGroupsAsync();\n await this.progress();\n } else if (this.rowUpdatePos <= this.rowEnd) {\n // console.log('progress rowUpdatePos', this.rowUpdatePos);\n // 先更新\n await this.updateRowCellGroupsAsync();\n await this.progress();\n } else if (this.currentCol < this.totalCol) {\n await this.createCol();\n await this.progress();\n } else if (this.currentRow < this.totalRow) {\n // console.log('progress currentRow', this.currentRow);\n // 先更新没有需要更新的节点,在生成新节点\n await this.createRow();\n await this.progress();\n }\n handleTextStick(this.table);\n this.table.scenegraph.updateNextFrame();\n resolve();\n }, 16);\n });\n }\n\n async createRow() {\n if (!this.taskRowCount) {\n return;\n }\n // console.log('createRow', this.currentRow, this.currentRow + this.taskRowCount);\n this.createRowCellGroup(this.taskRowCount);\n }\n\n async createCol() {\n if (!this.taskColCount) {\n return;\n }\n // console.log('createCol', this.currentCol, this.currentCol + this.taskColCount);\n this.createColGroup(this.taskRowCount);\n }\n\n createRowCellGroup(onceCount: number) {\n const endRow = Math.min(this.totalRow, this.currentRow + onceCount);\n // compute rows height\n computeRowsHeight(this.table, this.currentRow + 1, endRow, false);\n\n this.rowEnd = endRow;\n\n if (this.table.frozenColCount) {\n // create row header row cellGroup\n let maxHeight = 0;\n for (let col = 0; col < this.table.frozenColCount; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n const cellLocation = this.table.isListTable() ? 'body' : 'rowHeader';\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n this.table.scenegraph.rowHeaderGroup.setAttribute('height', maxHeight);\n }\n }\n\n if (this.table.rightFrozenColCount) {\n // create row header row cellGroup\n let maxHeight = 0;\n for (let col = this.table.colCount - this.table.rightFrozenColCount; col < this.table.colCount; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n const cellLocation = this.table.isPivotChart() ? 'rowHeader' : 'body'; // isHeader\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n this.table.scenegraph.rightFrozenGroup.setAttribute('height', maxHeight);\n }\n }\n\n // create body row cellGroup\n let maxHeight = 0;\n for (let col = this.bodyLeftCol; col <= this.bodyRightCol; col++) {\n const colGroup = this.table.scenegraph.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n const cellLocation = col < this.table.rowHeaderLevelCount ? 'rowHeader' : 'body';\n const { height } = createComplexColumn(\n colGroup,\n col,\n colGroup.attribute.width,\n this.currentRow + 1,\n endRow,\n this.table.scenegraph.mergeMap,\n this.table.defaultRowHeight,\n this.table\n // cellLocation\n );\n maxHeight = Math.max(maxHeight, height);\n }\n this.table.scenegraph.bodyGroup.setAttribute('height', maxHeight);\n\n this.currentRow = endRow;\n this.rowUpdatePos = this.rowEnd;\n\n // update container group size and border\n this.table.scenegraph.updateContainer();\n this.table.scenegraph.updateBorderSizeAndPosition();\n }\n\n createColGroup(onceCount: number) {\n // compute rows height\n const endCol = Math.min(this.totalCol, this.currentCol + onceCount);\n computeColsWidth(this.table, this.currentCol + 1, endCol);\n\n this.colEnd = endCol;\n\n // update last merge cell size\n for (let row = 0; row < this.table.rowCount; row++) {\n const cellGroup = this.highPerformanceGetCell(this.currentCol, row);\n if (cellGroup.role === 'cell' && isNumber(cellGroup.mergeStartCol) && cellGroup.mergeStartCol > this.currentCol) {\n this.table.scenegraph.updateCellContent(cellGroup.col, cellGroup.row);\n }\n }\n\n // create column\n if (this.table.frozenRowCount) {\n // create colGroup\n const lastColumnGroup = (\n this.table.scenegraph.colHeaderGroup.lastChild instanceof Group\n ? this.table.scenegraph.colHeaderGroup.lastChild\n : this.table.scenegraph.colHeaderGroup.lastChild._prev\n ) as Group;\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create colHeaderGroup\n createColGroup(\n this.table.scenegraph.colHeaderGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n 0, // rowStart\n this.table.frozenRowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n this.table\n );\n }\n if (this.table.bottomFrozenRowCount) {\n // create colGroup\n const lastColumnGroup = (\n this.table.scenegraph.bottomFrozenGroup.lastChild instanceof Group\n ? this.table.scenegraph.bottomFrozenGroup.lastChild\n : this.table.scenegraph.bottomFrozenGroup.lastChild._prev\n ) as Group;\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create bottomFrozenGroup\n createColGroup(\n this.table.scenegraph.bottomFrozenGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n this.table.rowCount - this.table.bottomFrozenRowCount, // rowStart\n this.table.rowCount - 1, // rowEnd\n 'columnHeader', // isHeader\n this.table\n );\n }\n // create colGroup\n let lastColumnGroup =\n this.table.scenegraph.bodyGroup.lastChild &&\n ((this.table.scenegraph.bodyGroup.lastChild instanceof Group\n ? this.table.scenegraph.bodyGroup.lastChild\n : this.table.scenegraph.bodyGroup.lastChild._prev) as Group);\n if (!lastColumnGroup) {\n lastColumnGroup =\n this.table.scenegraph.colHeaderGroup.lastChild &&\n ((this.table.scenegraph.colHeaderGroup.lastChild instanceof Group\n ? this.table.scenegraph.colHeaderGroup.lastChild\n : this.table.scenegraph.colHeaderGroup.lastChild._prev) as Group);\n }\n const xOrigin = lastColumnGroup.attribute.x + lastColumnGroup.attribute.width;\n const yOrigin = lastColumnGroup.attribute.y;\n // create bodyGroup\n createColGroup(\n this.table.scenegraph.bodyGroup,\n xOrigin,\n yOrigin,\n this.currentCol + 1, // colStart\n endCol, // colEnd\n this.rowStart, // rowStart\n this.rowEnd, // rowEnd\n 'body', // isHeader\n this.table\n );\n\n this.currentCol = endCol;\n this.colUpdatePos = this.colEnd;\n\n // update container group size and border\n this.table.scenegraph.updateContainer();\n this.table.scenegraph.updateBorderSizeAndPosition();\n }\n\n async setY(y: number, isEnd = false) {\n const yLimitTop =\n this.table.getRowsHeight(this.bodyTopRow, this.bodyTopRow + (this.rowEnd - this.rowStart + 1)) / 2;\n const yLimitBottom = this.table.getAllRowsHeight() - yLimitTop;\n\n const screenTop = this.table.getTargetRowAt(y + this.table.scenegraph.colHeaderGroup.attribute.height);\n if (screenTop) {\n this.screenTopRow = screenTop.row;\n }\n\n if (y < yLimitTop && this.rowStart === this.bodyTopRow) {\n // 执行真实body group坐标修改\n this.updateDeltaY(y);\n this.updateBody(y - this.deltaY);\n } else if (y > yLimitBottom && this.rowEnd === this.bodyBottomRow) {\n // 执行真实body group坐标修改\n this.updateDeltaY(y);\n this.updateBody(y - this.deltaY);\n } else if (\n (!this.table.scenegraph.bodyGroup.firstChild ||\n this.table.scenegraph.bodyGroup.firstChild.type !== 'group' ||\n this.table.scenegraph.bodyGroup.firstChild.childrenCount === 0) &&\n (!this.table.scenegraph.rowHeaderGroup.firstChild ||\n this.table.scenegraph.rowHeaderGroup.firstChild.type !== 'group' ||\n this.table.scenegraph.rowHeaderGroup.firstChild.childrenCount === 0)\n ) {\n this.updateDeltaY(y);\n // 兼容异步加载数据promise的情况 childrenCount=0 如果用户立即调用setScrollTop执行dynamicSetY会出错\n this.updateBody(y - this.deltaY);\n } else {\n // 执行动态更新节点\n this.dynamicSetY(y, screenTop, isEnd);\n }\n }\n\n async setX(x: number, isEnd = false) {\n const xLimitLeft =\n this.table.getColsWidth(this.bodyLeftCol, this.bodyLeftCol + (this.colEnd - this.colStart + 1)) / 2;\n const xLimitRight = this.table.getAllColsWidth() - xLimitLeft;\n\n const screenLeft = this.table.getTargetColAt(x + this.table.scenegraph.rowHeaderGroup.attribute.width);\n if (screenLeft) {\n this.screenLeftCol = screenLeft.col;\n }\n\n if (x < xLimitLeft && this.colStart === this.bodyLeftCol) {\n // 执行真实body group坐标修改\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else if (x > xLimitRight && this.colEnd === this.bodyRightCol) {\n // 执行真实body group坐标修改\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else if (\n // 注意判断关系 这里不是 || 而是 &&\n this.table.scenegraph.bodyGroup.firstChild &&\n this.table.scenegraph.bodyGroup.firstChild.type === 'group' &&\n this.table.scenegraph.bodyGroup.firstChild.childrenCount === 0\n ) {\n // 兼容异步加载数据promise的情况 childrenCount=0 如果用户立即调用setScrollLeft执行dynamicSetX会出错\n this.updateDeltaX(x);\n this.table.scenegraph.setBodyAndColHeaderX(-x + this.deltaX);\n } else {\n // 执行动态更新节点\n this.dynamicSetX(x, screenLeft, isEnd);\n }\n }\n\n async dynamicSetY(y: number, screenTop: RowInfo | null, isEnd = false) {\n dynamicSetY(y, screenTop, isEnd, this);\n }\n async dynamicSetX(x: number, screenLeft: ColumnInfo | null, isEnd = false) {\n dynamicSetX(x, screenLeft, isEnd, this);\n }\n\n updateBody(y: number) {\n this.table.scenegraph.setBodyAndRowHeaderY(-y);\n }\n\n async updateRowCellGroupsAsync() {\n this.updateCellGroups(this.taskRowCount);\n }\n\n updateCellGroups(count: number) {\n const distRow = Math.min(this.bodyBottomRow, this.rowUpdatePos + count);\n // console.log('updateCellGroups', this.rowUpdatePos, distRow);\n if (this.table.isAutoRowHeight()) {\n computeRowsHeight(this.table, this.rowUpdatePos, distRow, false);\n }\n\n updateRowContent(this.rowUpdatePos, distRow, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n this.bodyLeftCol, // colStart\n this.bodyRightCol, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n // row header group\n updateAutoRow(\n 0, // colStart\n this.table.frozenColCount - 1, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n // right frozen group\n updateAutoRow(\n this.table.colCount - this.table.rightFrozenColCount, // colStart\n this.table.colCount - 1, // colEnd\n this.rowUpdatePos, // rowStart\n distRow, // rowEnd\n this.table,\n this.rowUpdateDirection,\n true\n );\n }\n\n this.rowUpdatePos = distRow + 1;\n }\n /** 更新底部冻结行的单元格内容 包括两边的角头 */\n updateBottomFrozenCellGroups() {\n const startRow = this.table.rowCount - this.table.bottomFrozenRowCount;\n const endRow = this.table.rowCount - 1;\n if (this.table.isAutoRowHeight()) {\n computeRowsHeight(this.table, startRow, endRow, false);\n }\n console.log('updateBottomFrozenCellGroups', startRow, endRow);\n updateRowContent(startRow, endRow, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoRow(\n this.bodyLeftCol, // colStart\n this.bodyRightCol, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n // row header group\n updateAutoRow(\n 0, // colStart\n this.table.frozenColCount - 1, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n // right frozen group\n updateAutoRow(\n this.table.colCount - this.table.rightFrozenColCount, // colStart\n this.table.colCount - 1, // colEnd\n startRow, // rowStart\n endRow, // rowEnd\n this.table,\n this.rowUpdateDirection\n );\n }\n }\n /** 更新底部冻结行的单元格内容 包括两边的角头 */\n updateRightFrozenCellGroups() {\n const startCol = this.table.colCount - this.table.rightFrozenColCount;\n const endCol = this.table.colCount - 1;\n if (this.table.widthMode === 'autoWidth') {\n computeColsWidth(this.table, startCol, endCol, false);\n }\n console.log('updateRightFrozenCellGroups', startCol, endCol);\n updateColContent(startCol, endCol, this);\n\n if (this.table.isAutoRowHeight()) {\n // body group\n updateAutoColumn(startCol, endCol, this.table, this.colUpdateDirection);\n }\n }\n async updateColCellGroupsAsync() {\n this.updateColGroups(this.taskRowCount);\n }\n\n updateColGroups(count: number) {\n const distCol = Math.min(this.bodyRightCol, this.colUpdatePos + count);\n // console.log('updateCellGroups', this.colUpdatePos, distCol);\n // for (let col = this.colUpdatePos; col <= distCol; col++) {\n // const colGroup = this.table.scenegraph.getColGroup(col);\n // if (colGroup) {\n // // colGroup.forEachChildren((cellGroup: Group) => {\n // // this.updateCellGroupContent(cellGroup);\n // // });\n // // for (let row = (colGroup.firstChild as Group).row; row <= (colGroup.lastChild as Group).row; row++) {\n // // const cellGroup = this.highPerformanceGetCell(colGroup.col, row);\n // // this.updateCellGroupContent(cellGroup);\n // // }\n // let cellGroup = colGroup.firstChild;\n // while (cellGroup) {\n // // this.updateCellGroupContent(cellGroup as Group);\n // // cellGroup = cellGroup._next;\n // const newCellGroup = this.updateCellGroupContent(cellGroup as Group);\n // cellGroup = newCellGroup._next;\n // }\n // colGroup.needUpdate = false;\n // }\n // }\n computeColsWidth(this.table, this.colUpdatePos, distCol);\n updateColContent(this.colUpdatePos, distCol, this);\n this.colUpdatePos = distCol + 1;\n }\n\n updateCellGroupPosition(cellGroup: Group, newRow: number, y: number) {\n // 更新位置&row\n cellGroup.row = newRow;\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeEndRow = undefined;\n cellGroup.setAttribute('y', y);\n (cellGroup as any).needUpdate = true;\n (cellGroup as any).needUpdateForAutoRowHeight = true;\n }\n\n updateCellGroupContent(cellGroup: Group) {\n if (!cellGroup.needUpdate || cellGroup.role !== 'cell') {\n return cellGroup;\n }\n\n const newCellGroup = this.table.scenegraph.updateCellContent(cellGroup.col, cellGroup.row);\n cellGroup.needUpdate = false;\n return newCellGroup || cellGroup;\n }\n\n async sortCellVertical() {\n await sortVertical(this);\n }\n\n async sortCellHorizontal() {\n await sortHorizontal(this);\n }\n\n highPerformanceGetCell(\n col: number,\n row: number,\n // rowStart: number = this.rowStart,\n // rowEnd: number = this.rowEnd,\n getShadow?: boolean\n ) {\n // if (row < rowStart || row > rowEnd) {\n // return emptyGroup;\n // }\n // if (row < this.rowStart || row > this.rowEnd || col < this.colStart || col > this.colEnd) {\n // return emptyGroup;\n // }\n\n if (\n row >= this.table.frozenRowCount && // not column header\n row < this.table.rowCount - this.table.bottomFrozenRowCount && // not bottom frozen\n (row < this.rowStart || row > this.rowEnd) // not in proxy row range\n ) {\n return emptyGroup;\n }\n\n if (\n col >= this.table.frozenColCount && // not row header\n col < this.table.colCount - this.table.rightFrozenColCount && // not right frozen\n (col < this.colStart || col > this.colEnd) // not in proxy col range\n ) {\n return emptyGroup;\n }\n\n if (this.cellCache.get(col)) {\n const cacheCellGoup = this.cellCache.get(col);\n if ((cacheCellGoup._next || cacheCellGoup._prev) && Math.abs(cacheCellGoup.row - row) < row) {\n // 由缓存单元格向前后查找要快于从头查找\n let cellGroup = getCellByCache(cacheCellGoup, row);\n if (!cellGroup || (!getShadow && cellGroup.role === 'shadow-cell')) {\n cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n }\n cellGroup.row && this.cellCache.set(col, cellGroup);\n return cellGroup;\n }\n const cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n // cellGroup.row && this.cellCache.set(col, cellGroup);\n if (cellGroup.col === col && cellGroup.row) {\n this.cellCache.set(col, cellGroup);\n }\n return cellGroup;\n }\n const cellGroup = this.table.scenegraph.getCell(col, row, getShadow);\n // cellGroup.row && this.cellCache.set(col, cellGroup);\n if (cellGroup.col === col && cellGroup.row) {\n this.cellCache.set(col, cellGroup);\n }\n return cellGroup;\n }\n\n updateDeltaY(y: number, screenTopY?: number, screenTopRow?: number) {\n if (this.rowStart === this.bodyTopRow) {\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, this.rowStart, true);\n if (cellGroup.role === 'cell') {\n const deltaY = cellGroup.attribute.y;\n this.deltaY = -deltaY;\n }\n } else if (this.rowEnd === this.bodyBottomRow) {\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, this.rowEnd, true);\n if (cellGroup.role === 'cell') {\n // const deltaY =\n // cellGroup.attribute.y +\n // cellGroup.attribute.height -\n // (this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()) -\n // y;\n const deltaY =\n cellGroup.attribute.y +\n cellGroup.attribute.height -\n (this.table.getAllRowsHeight() - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight());\n this.deltaY = -deltaY;\n }\n } else if (isValid(screenTopY) && isValid(screenTopRow)) {\n let cellGroup = this.table.scenegraph.highPerformanceGetCell(this.colStart, screenTopRow, true);\n if (cellGroup.role !== 'cell') {\n cellGroup = this.table.scenegraph.highPerformanceGetCell(0, screenTopRow, true);\n }\n const bodyY = y - this.deltaY;\n const distRowYOffset = screenTopY - bodyY; // dist cell 距离表格顶部的位置差\n const currentRowYOffset = cellGroup.attribute.y - bodyY + this.table.getFrozenRowsHeight(); // current cell 距离表格顶部的位置差\n // const deltaY = screenTopY - (cellGroup.attribute.y + );\n this.deltaY = distRowYOffset - currentRowYOffset;\n }\n }\n\n updateDeltaX(x: number, screenLeftX?: number, screenLeftCol?: number) {\n if (this.colStart === this.bodyLeftCol) {\n const colGroup = this.table.scenegraph.getColGroup(this.colStart);\n if (colGroup) {\n const deltaX = colGroup.attribute.x;\n this.deltaX = -deltaX;\n }\n } else if (this.colEnd === this.bodyRightCol) {\n const colGroup = this.table.scenegraph.getColGroup(this.colEnd);\n if (colGroup) {\n const deltaX =\n colGroup.attribute.x +\n colGroup.attribute.width -\n (this.table.getAllColsWidth() - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth());\n this.deltaX = -deltaX;\n }\n } else if (isValid(screenLeftX) && isValid(screenLeftCol)) {\n const colGroup =\n this.table.scenegraph.getColGroup(screenLeftCol) || this.table.scenegraph.getColGroup(screenLeftCol, true);\n // const deltaX = screenLeftX - (colGroup.attribute.x + this.table.getFrozenColsWidth() + this.deltaX);\n // this.deltaX = deltaX + this.deltaX;\n const bodyX = x - this.deltaX;\n const distColXOffset = screenLeftX - bodyX; // dist col 距离表格左侧的位置差\n const currentColXOffset = colGroup.attribute.x - bodyX + this.table.getFrozenColsWidth(); // current col 距离表格左侧的位置差\n this.deltaX = distColXOffset - currentColXOffset;\n }\n }\n\n release() {\n this.isRelease = true;\n }\n}\n\nfunction getCellByCache(cacheCellGroup: Group, row: number): Group | null {\n if (!cacheCellGroup) {\n return null;\n }\n if (cacheCellGroup.row === row) {\n return cacheCellGroup;\n }\n const prev = cacheCellGroup._prev as Group;\n const next = cacheCellGroup._next as Group;\n // cacheCellGroup may have wrong order\n if (cacheCellGroup.row > row && prev && prev.row === cacheCellGroup.row - 1) {\n return getCellByCache(prev, row);\n }\n if (cacheCellGroup.row < row && next && next.row === cacheCellGroup.row + 1) {\n return getCellByCache(next, row);\n }\n return null;\n}\n","import type { Group } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CellRange } from '../../ts-types';\nexport function moveHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row',\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange,\n table: BaseTableAPI\n) {\n const scene = table.scenegraph;\n\n // 更新columnGroup列宽\n for (let col = updateColStart; col <= updateColEnd; col++) {\n const columnWidth = table.getColWidth(col);\n const columnHeaderGroup = table.scenegraph.getColGroup(col, true);\n const columnGroup = table.scenegraph.getColGroup(col);\n const columnBottomGroup = table.scenegraph.getColGroupInBottom(col);\n const columnLeftBottomGroup = table.scenegraph.getColGroupInLeftBottomCorner(col);\n const columnRightBottomGroup = table.scenegraph.getColGroupInRightBottomCorner(col);\n if (columnHeaderGroup) {\n columnHeaderGroup.setAttribute('width', columnWidth);\n columnHeaderGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnGroup) {\n columnGroup.setAttribute('width', columnWidth);\n columnGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnBottomGroup) {\n columnBottomGroup.setAttribute('width', columnWidth);\n columnBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnRightBottomGroup) {\n columnRightBottomGroup.setAttribute('width', columnWidth);\n columnRightBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n if (columnLeftBottomGroup) {\n columnLeftBottomGroup.setAttribute('width', columnWidth);\n columnLeftBottomGroup.forEachChildren((child: Group) => {\n child.setAttribute('width', columnWidth);\n });\n }\n }\n\n // 更新容器尺寸\n // scene.updateContainerAttrWidthAndX();\n scene.updateContainer();\n\n if (moveType === 'column') {\n for (let col = updateColStart; col <= updateColEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n\n // 将上下表头 和中间body部分分别更新\n for (let row = 0; row <= table.frozenRowCount - 1; row++) {\n scene.updateCellContent(col, row);\n }\n for (let row = scene.bodyRowStart; row <= scene.bodyRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n for (let row = table.rowCount - table.bottomFrozenRowCount; row <= table.rowCount - 1; row++) {\n scene.updateCellContent(col, row);\n }\n }\n } else {\n // 将左侧冻结列or行表头的单元格更新\n for (let col = 0; col <= table.frozenColCount - 1; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n // 将中间body的单元格更新\n for (let col = scene.bodyColStart; col <= scene.bodyColEnd; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n // 将右侧冻结列的单元格更新\n for (let col = table.colCount - table.rightFrozenColCount; col <= table.colCount - 1; col++) {\n // 将该列的chartInstance清除掉\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup?.setAttribute('chartInstance', undefined);\n for (let row = updateRowStart; row <= updateRowEnd; row++) {\n scene.updateCellContent(col, row);\n }\n }\n }\n}\n","import { createRect, type IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.customSelectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n}\n\nfunction updateComponent(\n selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation },\n key: string,\n scene: Scenegraph\n) {\n const table = scene.table;\n const [startColStr, startRowStr, endColStr, endRowStr] = key.split('-');\n const startCol = parseInt(startColStr, 10);\n const startRow = parseInt(startRowStr, 10);\n const endCol = parseInt(endColStr, 10);\n const endRow = parseInt(endRowStr, 10);\n // 下面为计算选中区域使用的行列值\n let computeRectCellRangeStartCol = startCol;\n let computeRectCellRangeStartRow = startRow;\n let computeRectCellRangeEndCol = endCol;\n let computeRectCellRangeEndRow = endRow;\n // 下面逻辑根据选中区域所属表格部分 来判断可视区域内容的选中单元格范围\n let visibleCellRange;\n switch (selectComp.role) {\n case 'rowHeader':\n visibleCellRange = table.getBodyVisibleRowRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'columnHeader':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'cornerHeader':\n break;\n case 'bottomFrozen':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'rightFrozen':\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'rightTopCorner':\n break;\n case 'leftBottomCorner':\n break;\n case 'rightBottomCorner':\n break;\n default:\n visibleCellRange = table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n }\n // const cellRange = table.getCellRange(startCol, startRow);\n // const colsWidth = table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow);\n const firstCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol,\n computeRectCellRangeStartRow\n ).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n\n selectComp.rect.setAttributes({\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, //坐标xy在下面的逻辑中会做适当调整\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: colsWidth,\n height: rowsHeight,\n visible: true\n });\n if (selectComp.fillhandle) {\n selectComp.fillhandle?.setAttributes({\n x: lastCellBound.x2 - scene.tableGroup.attribute.x - 3, // 调整小方块位置\n y: lastCellBound.y2 - scene.tableGroup.attribute.y - 3, // 调整小方块位置\n width: 6,\n height: 6,\n visible: true\n });\n }\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n let isNearRowHeader = table.frozenColCount ? startCol === table.frozenColCount : false;\n if (!isNearRowHeader && table.frozenColCount && table.scrollLeft > 0 && startCol >= table.frozenColCount) {\n const startColRelativePosition = table.getColsWidth(0, startCol - 1) - table.scrollLeft;\n if (startColRelativePosition < table.getFrozenColsWidth()) {\n isNearRowHeader = true;\n }\n }\n\n let isNearRightRowHeader = table.rightFrozenColCount\n ? table.rightFrozenColCount > 0 && endCol === table.colCount - table.rightFrozenColCount - 1\n : false;\n if (!isNearRightRowHeader && table.rightFrozenColCount && endCol < table.colCount - table.rightFrozenColCount) {\n const endColRelativePosition = table.getColsWidth(0, endCol) - table.scrollLeft;\n if (endColRelativePosition > table.tableNoFrameWidth - table.getRightFrozenColsWidth()) {\n isNearRightRowHeader = true;\n }\n }\n\n let isNearColHeader = table.frozenRowCount ? startRow === table.frozenRowCount : true;\n if (!isNearColHeader && table.frozenRowCount && table.scrollTop > 0 && startRow >= table.frozenRowCount) {\n const startRowRelativePosition = table.getRowsHeight(0, startRow - 1) - table.scrollTop;\n if (startRowRelativePosition < table.getFrozenRowsHeight()) {\n isNearColHeader = true;\n }\n }\n\n let isNearBottomColHeader = table.bottomFrozenRowCount\n ? endRow === table.rowCount - table.bottomFrozenRowCount - 1\n : false;\n if (!isNearBottomColHeader && table.bottomFrozenRowCount && endRow < table.rowCount - table.bottomFrozenRowCount) {\n const endRowRelativePosition = table.getRowsHeight(0, endRow) - table.scrollTop;\n if (endRowRelativePosition > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()) {\n isNearBottomColHeader = true;\n }\n }\n\n if (\n (isNearRowHeader && selectComp.rect.attribute.stroke[3]) ||\n (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) ||\n (isNearColHeader && selectComp.rect.attribute.stroke[0]) ||\n (isNearBottomColHeader && selectComp.rect.attribute.stroke[2])\n ) {\n if (isNearRowHeader && selectComp.rect.attribute.stroke[3]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.leftBottomCornerGroup\n : scene.rowHeaderGroup\n );\n }\n\n if (isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightBottomCornerGroup\n : scene.bottomFrozenGroup\n );\n }\n\n if (isNearColHeader && selectComp.rect.attribute.stroke[0]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightTopCornerGroup\n : scene.colHeaderGroup\n );\n }\n if (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.rightBottomCornerGroup\n : scene.rightFrozenGroup\n );\n }\n\n //#region 调整层级后 滚动情况下会出现绘制范围出界 如body的选中框 渲染在了rowheader上面,所有需要调整选中框rect的 边界\n if (\n selectComp.rect.attribute.x < table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width > 0\n });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n table.getRightFrozenColsWidth() > 0 && // right冻结列存在的情况下\n scene.rightFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x;\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x,\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width - colsWidth > 0\n });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n table.scrollTop > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height =\n selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y);\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),\n height: height > 0 ? height : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: height > 0\n });\n }\n if (\n scene.bottomFrozenGroup.attribute.width > 0 &&\n scene.bottomFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height = scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y;\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y,\n height: height > 0 ? height : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: height - rowsHeight > 0\n });\n }\n //#endregion\n } else {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'body'\n ? scene.bodyGroup\n : selectComp.role === 'columnHeader'\n ? scene.colHeaderGroup\n : selectComp.role === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectComp.role === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectComp.role === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n }\n //#endregion\n\n //#region 处理边缘被截问题\n let diffSize = 0;\n if (typeof selectComp.rect.attribute.lineWidth === 'number') {\n diffSize = Math.ceil(selectComp.rect.attribute.lineWidth / 2);\n }\n if (endCol === table.colCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[1] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (startCol === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[3] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + diffSize,\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // x: selectComp.rect.attribute.x + diffSize,\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (endRow === table.rowCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[2] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n if (startRow === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[0] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + diffSize,\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle?.setAttributes({\n // y: selectComp.rect.attribute.y + diffSize,\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n //#endregion\n}\n\nexport function updateCellSelectBorder(\n scene: Scenegraph,\n selectRange: CellRange & { skipBodyMerge?: boolean },\n ifExtendSelectRange: boolean = true\n) {\n const table = scene.table;\n const newStartCol = selectRange.start.col;\n const newStartRow = selectRange.start.row;\n const newEndCol = selectRange.end.col;\n const newEndRow = selectRange.end.row;\n const skipBodyMerge = selectRange.skipBodyMerge;\n\n let startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n let startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n let endCol = Math.min(Math.max(newEndCol, newStartCol), table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), table.rowCount - 1);\n //#region region 校验四周的单元格有没有合并的情况,如有则扩大范围\n const extendSelectRange = () => {\n let isExtend = false;\n for (let col = startCol; col <= endCol; col++) {\n if (col === startCol) {\n for (let row = startRow; row <= endRow; row++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && mergeInfo.start.col < startCol) {\n startCol = mergeInfo.start.col;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && col === endCol) {\n for (let row = startRow; row <= endRow; row++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, table.colCount - 1) > endCol) {\n endCol = mergeInfo.end.col;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n if (!isExtend) {\n for (let row = startRow; row <= endRow; row++) {\n if (row === startRow) {\n for (let col = startCol; col <= endCol; col++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && mergeInfo.start.row < startRow) {\n startRow = mergeInfo.start.row;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && row === endRow) {\n for (let col = startCol; col <= endCol; col++) {\n if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, table.rowCount - 1) > endRow) {\n endRow = mergeInfo.end.row;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n }\n if (isExtend) {\n extendSelectRange();\n }\n };\n ifExtendSelectRange && extendSelectRange();\n //#endregion\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n\n let needRowHeader = false;\n let needRightRowHeader = false; // 右侧冻结\n let needColumnHeader = false;\n let needBottomColumnHeader = false; // 底部冻结\n let needBody = false;\n let needCornerHeader = false;\n let needRightTopCornerHeader = false;\n let needRightBottomCornerHeader = false;\n let needLeftBottomCornerHeader = false;\n if (startCol <= table.frozenColCount - 1 && startRow <= table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= table.frozenColCount - 1 &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= table.colCount - table.rightFrozenColCount &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= table.frozenRowCount - 1 &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= table.rowCount - table.bottomFrozenRowCount &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= table.colCount - table.rightFrozenColCount - 1 &&\n endCol >= table.frozenColCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1 &&\n endRow >= table.frozenRowCount\n ) {\n needBody = true;\n }\n\n // TODO 可以尝试不拆分三个表头和body【前提是theme中合并配置】 用一个SelectBorder 需要结合clip,并动态设置border的范围【依据区域范围 已经是否跨表头及body】\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n scene.createCellSelectBorder(\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n scene.createCellSelectBorder(\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n scene.createCellSelectBorder(\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n}\n\nexport function hideCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n}\n","import { createRect } from './../../vrender';\nimport type { CellSubLocation } from '../../ts-types';\nimport type { Scenegraph } from '../scenegraph';\nimport { table } from 'console';\n\nexport function createCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[]\n // isHasFillHandleRect: boolean\n) {\n let isHasFillHandleRect = !!scene.table.options.excelOptions?.fillHandle;\n if (scene.table.stateManager.select.ranges?.length > 1) {\n isHasFillHandleRect = false;\n scene.removeFillHandleFromSelectComponents();\n } else if (scene.table.stateManager.select.ranges?.length === 1) {\n const maxRow = Math.max(\n scene.table.stateManager.select.ranges[0].start.row,\n scene.table.stateManager.select.ranges[0].end.row\n );\n const maxCol = Math.max(\n scene.table.stateManager.select.ranges[0].start.col,\n scene.table.stateManager.select.ranges[0].end.col\n );\n if (scene.table.isHeader(maxCol, maxRow)) {\n isHasFillHandleRect = false;\n }\n }\n if (Array.isArray(strokes) && (strokes[1] === false || strokes[2] === false)) {\n isHasFillHandleRect = false;\n }\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds;\n const theme = scene.table.theme;\n // 框选外边框\n const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;\n const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;\n const rect = createRect({\n pickable: false,\n fill:\n theme.selectionStyle?.selectionFillMode === 'replace'\n ? false\n : (theme.selectionStyle?.cellBgColor as any) ?? 'rgba(0, 0, 255,0.1)',\n\n lineWidth: bodyClickLineWidth as number,\n // stroke: bodyClickBorderColor as string,\n stroke: strokes.map(stroke => {\n if (stroke) {\n return bodyClickBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, // 坐标xy及宽高width height 不需要这里计算具体值 update-select-border文件中updateComponent方法中有逻辑 且该方法调用时间是render\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: 0,\n height: 0,\n visible: true\n });\n // 创建右下角小方块\n let fillhandle;\n if (isHasFillHandleRect) {\n fillhandle = createRect({\n pickable: false,\n fill: bodyClickBorderColor as string,\n // lineWidth: bodyClickLineWidth as number,\n stroke: bodyClickBorderColor as string, // 右下角小方块边框颜色\n x: lastCellBound.x2 - 3, // 调整小方块位置\n y: lastCellBound.y2 - 3, // 调整小方块位置\n width: 6,\n height: 6,\n\n visible: true\n });\n }\n scene.lastSelectId = selectId;\n scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n fillhandle,\n role: selectRangeType\n });\n scene.tableGroup.insertAfter(\n rect,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n isHasFillHandleRect &&\n scene.tableGroup.insertAfter(\n fillhandle,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n}\n","import type { Scenegraph } from '../scenegraph';\n\nexport function moveSelectingRangeComponentsToSelectedRangeComponents(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((rangeComponent, key) => {\n if (scene.selectedRangeComponents.get(key)) {\n scene.selectingRangeComponents.get(key).rect.delete();\n scene.selectingRangeComponents.get(key).fillhandle?.delete();\n }\n scene.selectedRangeComponents.set(key, rangeComponent);\n });\n scene.selectingRangeComponents = new Map();\n scene.updateNextFrame();\n}\n","import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\n\n/** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\nexport function deleteLastSelectedRangeComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n const lastSelectId = key.split('-')[4];\n if (lastSelectId === scene.lastSelectId) {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n scene.selectedRangeComponents.delete(key);\n }\n }\n );\n}\n\nexport function deleteAllSelectBorder(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectedRangeComponents = new Map();\n}\n\nexport function deleteAllSelectingBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n}\n\nexport function removeFillHandleFromSelectComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.fillhandle?.delete();\n selectComp.fillhandle = undefined;\n }\n );\n}\n","import { isNumber, isValid } from '@visactor/vutils';\nimport type { CellAddress, CellRange } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { updateCell } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { deduplication } from '../../tools/util';\n\n/**\n * add and remove rows in scenegraph\n */\nexport function updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[],\n table: BaseTableAPI,\n skipUpdateProxy?: boolean\n) {\n const scene = table.scenegraph;\n // deduplication\n const removeRows = deduplication(removeCells.map(cell => cell.row)).sort((a, b) => b - a);\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n\n let rowUpdatePos;\n if (updateRows.length) {\n const beforeRow = updateRows[0] - 1;\n const afterRow = updateRows[updateRows.length - 1] + 1;\n rowUpdatePos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n }\n if (addRows.length) {\n const beforeRow = addRows[0] - 1;\n const afterRow = addRows[addRows.length - 1] + 1;\n const pos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n if (removeRows.length) {\n const beforeRow = removeRows[0] - 1;\n const afterRow = removeRows[removeRows.length - 1] + 1;\n const pos = _getUpdateRowIndexUseCellNode(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n // remove cells\n removeRows.forEach(row => {\n removeRow(row, scene, skipUpdateProxy);\n });\n\n const rowHeightsMap = table.rowHeightsMap;\n removeRows.forEach(row => {\n rowHeightsMap.delete(row);\n });\n\n if (removeRows.length) {\n resetRowNumber(scene);\n const beforeRow = removeRows[removeRows.length - 1] - 1;\n const afterRow = removeRows[0] - removeRows.length + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n // isNumber(rowUpdatePos) && (scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, rowUpdatePos));\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n scene.table._clearRowRangeHeightsMap();\n\n // add cells\n let updateAfter: number;\n addRows.forEach(row => {\n const needUpdateAfter = addRow(row, scene, skipUpdateProxy);\n updateAfter = updateAfter ?? needUpdateAfter;\n rowHeightsMap.insert(row);\n });\n\n // reset attribute y and row number in CellGroup\n // const newTotalHeight = resetRowNumberAndY(scene);\n resetRowNumberAndY(scene);\n\n if (addRows.length) {\n const beforeRow = addRows[0] - 1;\n const afterRow = addRows[addRows.length - 1] + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n for (let col = 0; col < table.colCount; col++) {\n // add cells\n updateRows.forEach(row => {\n if (row < table.frozenRowCount) {\n // top frozen\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n } else if (\n // row < table.frozenRowCount || // not top frozen\n row > table.rowCount - 1 || // greater than rowCount - 1\n (row < scene.table.rowCount - scene.table.bottomFrozenRowCount && // not bottom frozen\n (row < scene.proxy.rowStart || row > scene.proxy.rowEnd)) // not in row range\n ) {\n removeCellGroup(row, scene);\n } else {\n // updateRowAttr(row, scene);\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let row = mergeInfo.start.row; row <= mergeInfo.end.row; row++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n }\n });\n }\n\n if (updateRows.length) {\n const beforeRow = updateRows[0] - 1;\n const afterRow = updateRows[updateRows.length - 1] + 1;\n const pos = _getUpdateRowIndex(beforeRow, afterRow, scene);\n rowUpdatePos = isValid(rowUpdatePos) ? (isValid(pos) ? Math.min(rowUpdatePos, pos) : rowUpdatePos) : pos;\n }\n\n if (isNumber(updateAfter)) {\n for (let col = 0; col < table.colCount; col++) {\n for (let row = updateAfter; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n rowUpdatePos = isValid(rowUpdatePos)\n ? isValid(updateAfter)\n ? Math.min(rowUpdatePos, updateAfter)\n : rowUpdatePos\n : updateAfter;\n // scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, updateAfter);\n }\n isNumber(rowUpdatePos) && (scene.proxy.rowUpdatePos = Math.min(scene.proxy.rowUpdatePos, rowUpdatePos));\n if (addRows.length) {\n if (!isNumber(updateAfter)) {\n const minRow = Math.min(...addRows);\n scene.proxy.rowUpdatePos = Math.min(minRow, scene.proxy.rowUpdatePos);\n }\n scene.proxy.rowUpdateDirection = 'up';\n scene.proxy.updateCellGroups(scene.proxy.screenRowCount * 2);\n updateBottomFrozeCellGroups();\n // scene.proxy.progress();\n } else if (removeRows.length) {\n setRowSeriesNumberCellNeedUpdate(removeRows[removeRows.length - 1], scene);\n scene.proxy.updateCellGroups(scene.proxy.screenRowCount * 2);\n\n updateBottomFrozeCellGroups();\n // scene.proxy.progress();\n }\n scene.proxy.progress();\n\n // update table size\n const newTotalHeight = table.getRowsHeight(table.frozenRowCount, table.rowCount - 1 - table.bottomFrozenRowCount);\n scene.updateContainerHeight(scene.table.frozenRowCount, newTotalHeight - scene.bodyGroup.attribute.height);\n\n function updateBottomFrozeCellGroups() {\n if (\n addRows?.[addRows?.length - 1] >= table.rowCount - table.bottomFrozenRowCount ||\n updateRows?.[updateRows?.length - 1] >= table.rowCount - table.bottomFrozenRowCount ||\n removeRows?.[0] >= table.rowCount - table.bottomFrozenRowCount\n ) {\n for (let col = 0; col < table.colCount; col++) {\n for (let row = table.rowCount - table.bottomFrozenRowCount; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.updateBottomFrozenCellGroups();\n }\n }\n}\nfunction removeRow(row: number, scene: Scenegraph, skipUpdateProxy?: boolean) {\n // const infectCellRange = removeCellGroup(row, scene);\n // for (let i = 0; i < infectCellRange.length; i++) {\n // const { mergeStartCol, mergeEndCol, mergeStartRow, mergeEndRow } = infectCellRange[i];\n // for (let col = mergeStartCol; col <= mergeEndCol; col++) {\n // for (let row = mergeStartRow; row <= mergeEndRow; row++) {\n // const cellGroup = scene.getCell(col, row, true);\n // if (cellGroup) {\n // cellGroup.needUpdate = true;\n // }\n // }\n // }\n // }\n\n const proxy = scene.proxy;\n\n // TODO 需要整体更新proxy的状态\n if (row >= proxy.rowStart && row <= proxy.rowEnd) {\n removeCellGroup(row, scene);\n proxy.rowEnd--;\n proxy.currentRow--;\n }\n if (!skipUpdateProxy) {\n proxy.bodyBottomRow--;\n // proxy.totalRow--;\n const totalActualBodyRowCount = Math.min(proxy.rowLimit, proxy.bodyBottomRow - proxy.bodyTopRow + 1); // 渐进加载总row数量\n proxy.totalActualBodyRowCount = totalActualBodyRowCount;\n proxy.totalRow = Math.min(proxy.table.rowCount - 1, proxy.rowStart + totalActualBodyRowCount - 1); // 目标渐进完成的row\n }\n}\n\nfunction addRow(row: number, scene: Scenegraph, skipUpdateProxy?: boolean) {\n const proxy = scene.proxy;\n if (!skipUpdateProxy) {\n proxy.bodyBottomRow++;\n // proxy.totalRow++;\n const totalActualBodyRowCount = Math.min(proxy.rowLimit, proxy.bodyBottomRow - proxy.bodyTopRow + 1); // 渐进加载总row数量\n proxy.totalActualBodyRowCount = totalActualBodyRowCount;\n proxy.totalRow = proxy.rowStart + totalActualBodyRowCount - 1; // 目标渐进完成的row\n }\n\n if (row < proxy.rowStart) {\n return undefined;\n } else if (row > proxy.rowEnd) {\n if (proxy.rowEnd - proxy.rowStart + 1 < proxy.rowLimit) {\n // can add row\n proxy.rowEnd++;\n proxy.currentRow++;\n\n addRowCellGroup(row, scene);\n return row;\n }\n return undefined;\n }\n if (proxy.rowEnd - proxy.rowStart + 1 < proxy.rowLimit) {\n // can add row\n proxy.rowEnd++;\n proxy.currentRow++;\n\n addRowCellGroup(row, scene);\n return row;\n }\n\n // update rows after\n return row;\n\n // return undefined;\n\n // // TODO 需要整体更新proxy的状态\n // scene.proxy.bodyBottomRow++;\n // scene.proxy.totalRow++;\n // scene.proxy.rowEnd++;\n // scene.proxy.currentRow++;\n}\nfunction resetRowNumber(scene: Scenegraph) {\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n\n scene.rowHeaderGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.leftBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex);\n rowIndex++;\n });\n });\n function processCell(cellGroup: Group, rowIndex: number) {\n cellGroup.row = rowIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeStartRow = merge.start.row;\n cellGroup.mergeEndRow = merge.end.row;\n } else {\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndRow = undefined;\n }\n }\n}\n\nfunction resetRowNumberAndY(scene: Scenegraph) {\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n\n scene.rowHeaderGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.bodyRowStart;\n // let y = (colGroup.firstChild as IGraphic).attribute.y;\n let y = scene.getCellGroupY(rowIndex);\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.leftBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n let rowIndex = scene.table.rowCount - scene.table.bottomFrozenRowCount;\n let y = 0;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup, rowIndex, y);\n rowIndex++;\n y += cellGroup.attribute.height;\n });\n });\n function processCell(cellGroup: Group, rowIndex: number, y: number) {\n cellGroup.row = rowIndex;\n cellGroup.setAttribute('y', y);\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeStartRow = merge.start.row;\n cellGroup.mergeEndRow = merge.end.row;\n } else {\n cellGroup.mergeStartCol = undefined;\n cellGroup.mergeEndCol = undefined;\n cellGroup.mergeStartRow = undefined;\n cellGroup.mergeEndRow = undefined;\n }\n }\n}\nfunction addRowCellGroup(row: number, scene: Scenegraph) {\n for (let col = 0; col < scene.table.colCount; col++) {\n // create cellGroup\n // const cellGroup = updateCell(col, row, scene.table, true);\n const cellGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: scene.table.getRowHeight(row)\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n cellGroup.needUpdate = true;\n\n if (!cellGroup) {\n // TODO: deal with data promise situation\n continue;\n }\n\n // insert cellGroup in colGroup\n const colGroup = scene.getColGroup(col);\n if (!colGroup) {\n continue;\n }\n\n if (colGroup.firstChild && row < (colGroup.firstChild as Group).row) {\n colGroup.insertBefore(cellGroup, colGroup.firstChild);\n (colGroup.firstChild as Group).row = (colGroup.firstChild as Group).row + 1;\n // if (\n // isNumber((colGroup.firstChild as Group).mergeStartRow) &&\n // isNumber((colGroup.firstChild as Group).mergeEndRow)\n // ) {\n // (colGroup.firstChild as Group).mergeStartRow = (colGroup.firstChild as Group).mergeStartRow + 1;\n // (colGroup.firstChild as Group).mergeEndRow = (colGroup.firstChild as Group).mergeEndRow + 1;\n // }\n } else if (colGroup.lastChild && row > (colGroup.lastChild as Group).row) {\n colGroup.appendChild(cellGroup);\n } else {\n // let cellBefore: Group;\n // colGroup.forEachChildren((cellGroup: Group) => {\n // if (cellGroup.row === row) {\n // cellBefore = cellGroup;\n // return true;\n // }\n // return false;\n // });\n\n const cellBefore = scene.highPerformanceGetCell(col, row, true);\n if (cellBefore !== cellGroup) {\n colGroup.insertBefore(cellGroup, cellBefore);\n cellBefore && (cellBefore.row = cellBefore.row + 1);\n // if (isNumber(cellBefore.mergeStartRow) && isNumber(cellBefore.mergeEndRow)) {\n // cellBefore.mergeStartRow = cellBefore.mergeStartRow + 1;\n // cellBefore.mergeEndRow = cellBefore.mergeEndRow + 1;\n // }\n if (cellBefore !== colGroup.lastChild) {\n colGroup.lastChild && ((colGroup.lastChild as Group).row = (colGroup.lastChild as Group).row + 1);\n // if (\n // isNumber((colGroup.lastChild as Group).mergeStartRow) &&\n // isNumber((colGroup.lastChild as Group).mergeEndRow)\n // ) {\n // (colGroup.lastChild as Group).mergeStartRow = (colGroup.lastChild as Group).mergeStartRow + 1;\n // (colGroup.lastChild as Group).mergeEndRow = (colGroup.lastChild as Group).mergeEndRow + 1;\n // }\n }\n }\n }\n\n // // reset row number\n // let rowIndex = (colGroup.firstChild as Group)?.row;\n // colGroup.forEachChildren((cellGroup: Group) => {\n // cellGroup.row = rowIndex;\n // rowIndex++;\n // });\n }\n}\n\nfunction removeCellGroup(row: number, scene: Scenegraph) {\n // const infectCellRange = [];\n for (let col = 0; col < scene.table.colCount; col++) {\n // const headerColGroup = scene.getColGroup(col, true);\n const colGroup = scene.getColGroup(col, false);\n if (!colGroup) {\n continue;\n }\n\n // remove cellGroup in colGroup\n let cellGroup: Group;\n colGroup.forEachChildren((cell: Group) => {\n if (cell.row === row) {\n cellGroup = cell;\n return true;\n }\n return false;\n });\n if (cellGroup) {\n colGroup.updateColumnHeight(-(cellGroup as Group).attribute.height);\n colGroup.removeChild(cellGroup);\n // if (\n // isValid(cellGroup.mergeStartCol) &&\n // isValid(cellGroup.mergeEndCol) &&\n // isValid(cellGroup.mergeStartRow) &&\n // isValid(cellGroup.mergeEndRow)\n // ) {\n // infectCellRange.push({\n // col: cellGroup.col,\n // row: cellGroup.row,\n // mergeStartCol: cellGroup.mergeStartCol,\n // mergeEndCol: cellGroup.mergeEndCol,\n // mergeStartRow: cellGroup.mergeStartRow,\n // mergeEndRow: cellGroup.mergeEndRow\n // });\n // }\n }\n }\n // return infectCellRange;\n}\n\nfunction _getUpdateRowIndex(beforeRow: number, afterRow: number, scene: Scenegraph) {\n let updateRow;\n for (let col = 0; col < scene.table.colCount; col++) {\n const rangeBefore = scene.table.getCellRange(col, beforeRow);\n let row;\n if (rangeBefore.start.row <= beforeRow + 1 && rangeBefore.end.row >= beforeRow + 1) {\n addNeedUpdateTag(rangeBefore, scene);\n row = rangeBefore.start.row;\n }\n\n const rangeAfter = scene.table.getCellRange(col, afterRow);\n if (rangeAfter.start.row <= afterRow + 1 && rangeAfter.end.row >= afterRow + 1) {\n addNeedUpdateTag(rangeAfter, scene);\n row = rangeAfter.start.row;\n }\n if (isValid(row)) {\n updateRow = isValid(updateRow) ? Math.min(updateRow, row) : row;\n }\n }\n return updateRow;\n}\nfunction _getUpdateRowIndexUseCellNode(beforeRow: number, afterRow: number, scene: Scenegraph) {\n let updateRow;\n for (let col = 0; col < scene.table.colCount; col++) {\n let row;\n const beforeCell = scene.highPerformanceGetCell(col, beforeRow);\n if (beforeCell.mergeStartRow && beforeCell.mergeEndRow && beforeCell.mergeEndRow > beforeRow) {\n addNeedUpdateTag(\n {\n start: {\n row: beforeCell.mergeStartRow,\n col: scene.table.isAutoRowHeight() ? 0 : beforeCell.mergeStartCol\n },\n end: {\n row: beforeCell.mergeEndRow,\n col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : beforeCell.mergeEndCol\n }\n },\n scene\n );\n row = beforeCell.mergeStartRow;\n }\n\n const afterCell = scene.highPerformanceGetCell(col, afterRow);\n if (afterCell.mergeStartRow && afterCell.mergeEndRow && afterCell.mergeStartRow < afterRow) {\n addNeedUpdateTag(\n {\n start: {\n row: afterCell.mergeStartRow,\n col: scene.table.isAutoRowHeight() ? 0 : afterCell.mergeStartCol\n },\n end: {\n row: afterCell.mergeEndRow,\n col: scene.table.isAutoRowHeight() ? scene.table.colCount - 1 : afterCell.mergeEndCol\n }\n },\n scene\n );\n row = afterCell.mergeStartRow;\n }\n if (isValid(row)) {\n updateRow = isValid(updateRow) ? Math.min(updateRow, row) : row;\n }\n }\n return updateRow;\n}\n\nfunction addNeedUpdateTag(range: CellRange, scene: Scenegraph) {\n const { start, end } = range;\n for (let col = start.col; col <= end.col; col++) {\n for (let row = start.row; row <= end.row; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n if (!cellGroup) {\n continue;\n }\n cellGroup.needUpdate = true;\n }\n }\n}\n\nfunction setRowSeriesNumberCellNeedUpdate(startUpdateRow: number, scene: Scenegraph) {\n if (scene.table.isHasSeriesNumber()) {\n for (let row = startUpdateRow; row <= scene.table.rowCount - 1; row++) {\n updateCell(0, row, scene.table, false);\n }\n }\n}\n","import type { IGraphic, ReactAttributePlugin } from './../../vrender';\nimport { getTargetCell } from '../../event/util';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Scenegraph } from '../scenegraph';\n\nexport function createReactContainer(table: BaseTableAPI) {\n const { internalProps } = table;\n internalProps.bodyDomContainer = document.createElement('div');\n internalProps.bodyDomContainer.id = 'vtable-body-dom-container';\n internalProps.bodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.bodyDomContainer);\n\n internalProps.headerDomContainer = document.createElement('div');\n internalProps.headerDomContainer.id = 'vtable-header-dom-container';\n internalProps.headerDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.headerDomContainer);\n\n internalProps.frozenBodyDomContainer = document.createElement('div');\n internalProps.frozenBodyDomContainer.id = 'vtable-frozen-body-dom-container';\n internalProps.frozenBodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenBodyDomContainer);\n\n internalProps.frozenHeaderDomContainer = document.createElement('div');\n internalProps.frozenHeaderDomContainer.id = 'vtable-frozen-header-dom-container';\n internalProps.frozenHeaderDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenHeaderDomContainer);\n\n internalProps.rightFrozenBodyDomContainer = document.createElement('div');\n internalProps.rightFrozenBodyDomContainer.id = 'vtable-right-frozen-body-dom-container';\n internalProps.rightFrozenBodyDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenBodyDomContainer);\n\n internalProps.rightFrozenHeaderDomContainer = document.createElement('div');\n internalProps.rightFrozenHeaderDomContainer.id = 'vtable-right-frozen-header-dom-container';\n internalProps.rightFrozenHeaderDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenHeaderDomContainer);\n\n internalProps.frozenBottomDomContainer = document.createElement('div');\n internalProps.frozenBottomDomContainer.id = 'vtable-frozen-bottom-dom-container';\n internalProps.frozenBottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.frozenBottomDomContainer);\n\n internalProps.bottomDomContainer = document.createElement('div');\n internalProps.bottomDomContainer.id = 'vtable-bottom-dom-container';\n internalProps.bottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.bottomDomContainer);\n\n internalProps.rightFrozenBottomDomContainer = document.createElement('div');\n internalProps.rightFrozenBottomDomContainer.id = 'vtable-right-frozen-bottom-dom-container';\n internalProps.rightFrozenBottomDomContainer.classList.add('table-component-container');\n internalProps.element.appendChild(internalProps.rightFrozenBottomDomContainer);\n}\n\nexport function updateReactContainer(table: BaseTableAPI) {\n const {\n headerDomContainer,\n bodyDomContainer,\n frozenBodyDomContainer,\n frozenHeaderDomContainer,\n rightFrozenBodyDomContainer,\n rightFrozenHeaderDomContainer,\n bottomDomContainer,\n frozenBottomDomContainer,\n rightFrozenBottomDomContainer\n } = table.internalProps;\n if (\n !headerDomContainer &&\n !bodyDomContainer &&\n !frozenBodyDomContainer &&\n !frozenHeaderDomContainer &&\n !rightFrozenBodyDomContainer &&\n !rightFrozenHeaderDomContainer &&\n !bottomDomContainer &&\n !frozenBottomDomContainer &&\n !rightFrozenBottomDomContainer\n ) {\n return;\n }\n const allColsWidth = table.getAllColsWidth();\n const tableNoFrameWidth = Math.min(allColsWidth, table.tableNoFrameWidth);\n const frozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const totalFrozenColsWidth = frozenColsWidth + rightFrozenColsWidth;\n const bodyWidth = Math.min(allColsWidth - totalFrozenColsWidth, tableNoFrameWidth - totalFrozenColsWidth);\n\n const allRowsHeight = table.getAllRowsHeight();\n const tableNoFrameHeight = Math.min(allRowsHeight, table.tableNoFrameHeight);\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = table.getBottomFrozenRowsHeight();\n const totalFrozenRowsHeight = frozenRowsHeight + bottomFrozenRowsHeight;\n const bodyHeight = Math.min(allRowsHeight - totalFrozenRowsHeight, tableNoFrameHeight - totalFrozenRowsHeight);\n\n if (table.frozenColCount > 0) {\n headerDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n bodyDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n bottomDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;\n } else if (table.frozenColCount === 0) {\n headerDomContainer.style.left = `${table.tableX}px`;\n bodyDomContainer.style.left = `${table.tableX}px`;\n bottomDomContainer.style.left = `${table.tableX}px`;\n }\n frozenBodyDomContainer.style.left = `${table.tableX}px`;\n frozenHeaderDomContainer.style.left = `${table.tableX}px`;\n\n // headerDomContainer.style.width = `${(headerDomContainer.parentElement?.offsetWidth ?? 1) - 1}px`;\n headerDomContainer.style.width = `${bodyWidth}px`;\n headerDomContainer.style.height = `${frozenRowsHeight}px`;\n bodyDomContainer.style.top = `${table.tableY}px`;\n\n // bodyDomContainer.style.width = `${(bodyDomContainer.parentElement?.offsetWidth ?? 1) - 1}px`;\n bodyDomContainer.style.width = `${bodyWidth}px`;\n bodyDomContainer.style.height = `${bodyHeight}px`;\n bodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n\n frozenBodyDomContainer.style.width = `${frozenColsWidth}px`;\n frozenBodyDomContainer.style.height = `${bodyHeight}px`;\n frozenBodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n\n frozenHeaderDomContainer.style.width = `${frozenColsWidth}px`;\n frozenHeaderDomContainer.style.height = `${frozenRowsHeight}px`;\n frozenHeaderDomContainer.style.top = `${table.tableY}px`;\n\n rightFrozenBodyDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenBodyDomContainer.style.height = `${bodyHeight}px`;\n rightFrozenBodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;\n rightFrozenBodyDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n\n rightFrozenHeaderDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenHeaderDomContainer.style.height = `${frozenRowsHeight}px`;\n rightFrozenHeaderDomContainer.style.top = `${table.tableY}px`;\n rightFrozenHeaderDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n\n bottomDomContainer.style.width = `${bodyWidth}px`;\n bottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n bottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n\n frozenBottomDomContainer.style.width = `${frozenColsWidth}px`;\n frozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n frozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n\n rightFrozenBottomDomContainer.style.width = `${rightFrozenColsWidth}px`;\n rightFrozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;\n rightFrozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;\n rightFrozenBottomDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;\n}\n\nexport function updateReactComponentContainer(scene: Scenegraph) {\n if (!scene.table.reactCustomLayout) {\n return;\n }\n const { table, stage } = scene;\n const plugin = stage.pluginService.findPluginsByName('ReactAttributePlugin')[0] as ReactAttributePlugin;\n const { htmlMap } = plugin;\n\n for (const key in htmlMap) {\n const item = htmlMap[key];\n const { graphic, wrapContainer } = item as typeof item & { graphic: IGraphic };\n let targetContainer: HTMLElement;\n if (scene.frozenColCount > table.frozenColCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n const { col, row } = getTargetCell(graphic);\n if (\n row >= table.rowCount - table.bottomFrozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenBottomDomContainer\n ) {\n targetContainer = table.bottomDomContainer;\n } else if (\n row >= table.frozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenBodyDomContainer\n ) {\n targetContainer = table.bodyDomContainer;\n } else if (\n row < table.frozenRowCount &&\n col < scene.frozenColCount &&\n col >= table.frozenColCount &&\n graphic.attribute.react.container === table.frozenHeaderDomContainer\n ) {\n targetContainer = table.headerDomContainer;\n }\n } else if (scene.frozenColCount < table.frozenColCount) {\n // move columnGroup from bodyGroup into rowHeaderGroup(from colHeaderGroup into cornerHeaderGroup)\n const { col, row } = getTargetCell(graphic);\n if (\n row >= table.rowCount - table.bottomFrozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.bottomDomContainer\n ) {\n targetContainer = table.frozenBottomDomContainer;\n } else if (\n row >= table.frozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.bodyDomContainer\n ) {\n targetContainer = table.frozenBodyDomContainer;\n } else if (\n row < table.frozenRowCount &&\n col < table.frozenColCount &&\n col >= scene.frozenColCount &&\n graphic.attribute.react.container === table.headerDomContainer\n ) {\n targetContainer = table.frozenHeaderDomContainer;\n }\n }\n\n if (targetContainer) {\n targetContainer.appendChild(wrapContainer);\n item.nativeContainer = targetContainer;\n item.container = targetContainer;\n graphic.attribute.react.container = targetContainer;\n plugin.updateStyleOfWrapContainer(graphic, stage, wrapContainer, targetContainer, graphic.attribute.react);\n }\n }\n}\n","import { getStyleTheme } from '../../core/tableHelper';\nimport { getTargetCell } from '../../event/util';\nimport { Group } from '../graphic/group';\nimport { createColGroup } from '../group-creater/column';\nimport type { Scenegraph } from '../scenegraph';\nimport { getProp } from '../utils/get-prop';\nimport { table } from 'console';\nimport { updateReactComponentContainer } from './frozen-react';\n\nexport function dealFrozen(scene: Scenegraph) {\n if (scene.table.frozenColCount > scene.table.rowHeaderLevelCount) {\n // 将对应列移入rowHeaderGroup\n scene.rowHeaderGroup.setAttribute('height', scene.bodyGroup.attribute.height);\n scene.rowHeaderGroup.setAttribute('y', scene.bodyGroup.attribute.y);\n scene.cornerHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.frozenColCount - scene.table.rowHeaderLevelCount; i++) {\n moveColumnFromBodyToRowHeader(scene);\n moveColumnFromColHeaderToCornerHeader(scene);\n moveColumnFromBottomToLeftBottomCorner(scene);\n }\n } else if (scene.table.frozenColCount < scene.table.rowHeaderLevelCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n scene.bodyGroup.setAttribute('height', scene.rowHeaderGroup.attribute.height);\n scene.bodyGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y);\n scene.colHeaderGroup.setAttribute('height', scene.cornerHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.rowHeaderLevelCount - scene.table.frozenColCount; i++) {\n moveColumnFromRowHeaderToBody(scene);\n moveColumnFromCornerHeaderToColHeader(scene);\n moveColumnFromLeftBottomCornerToBottom(scene);\n }\n }\n scene.bodyGroup.setAttribute('x', scene.rowHeaderGroup.attribute.width);\n scene.colHeaderGroup.setAttribute('x', scene.cornerHeaderGroup.attribute.width);\n\n scene.updateContainer();\n scene.updateBorderSizeAndPosition();\n\n if (!scene.isPivot && !(scene.table as any).transpose) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n }\n scene.hasFrozen = true;\n\n // scene.frozenColCount = scene.rowHeaderGroup.childrenCount;\n scene.frozenColCount = scene.table.frozenColCount;\n scene.frozenRowCount = scene.colHeaderGroup.firstChild?.childrenCount ?? 0;\n}\n\nexport function resetFrozen(scene: Scenegraph) {\n if (scene.frozenColCount > scene.table.frozenColCount) {\n // move columnGroup from rowHeaderGroup into bodyGroup(from cornerHeaderGroup into colHeaderGroup)\n scene.bodyGroup.setAttribute('height', scene.rowHeaderGroup.attribute.height);\n scene.bodyGroup.setAttribute('y', scene.rowHeaderGroup.attribute.y);\n scene.colHeaderGroup.setAttribute('height', scene.cornerHeaderGroup.attribute.height);\n for (let i = 0; i < scene.frozenColCount - scene.table.frozenColCount; i++) {\n moveColumnFromRowHeaderToBody(scene);\n moveColumnFromCornerHeaderToColHeader(scene);\n moveColumnFromLeftBottomCornerToBottom(scene);\n }\n } else if (scene.frozenColCount < scene.table.frozenColCount) {\n // move columnGroup from bodyGroup into rowHeaderGroup(from colHeaderGroup into cornerHeaderGroup)\n scene.rowHeaderGroup.setAttribute('height', scene.bodyGroup.attribute.height);\n scene.rowHeaderGroup.setAttribute('y', scene.bodyGroup.attribute.y);\n scene.cornerHeaderGroup.setAttribute('height', scene.colHeaderGroup.attribute.height);\n for (let i = 0; i < scene.table.frozenColCount - scene.frozenColCount; i++) {\n moveColumnFromBodyToRowHeader(scene);\n moveColumnFromColHeaderToCornerHeader(scene);\n moveColumnFromBottomToLeftBottomCorner(scene);\n }\n }\n\n updateReactComponentContainer(scene);\n scene.recreateAllSelectRangeComponents();\n // scene.frozenColCount = scene.rowHeaderGroup.childrenCount;\n scene.frozenColCount = scene.table.frozenColCount;\n scene.frozenRowCount = scene.colHeaderGroup.firstChild?.childrenCount ?? 0;\n // scene.proxy.colStart = scene.table.frozenColCount;\n scene.proxy.colStart = (scene.bodyGroup.firstChild as any)?.col ?? scene.table.frozenColCount;\n\n scene.bodyGroup.setAttribute('x', scene.rowHeaderGroup.attribute.width);\n scene.colHeaderGroup.setAttribute('x', scene.cornerHeaderGroup.attribute.width);\n // scene.updateContainerAttrWidthAndX();\n scene.updateContainer();\n scene.updateBorderSizeAndPosition();\n\n if (!scene.isPivot && !(scene.table as any).transpose) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n } else if (scene.table.options.frozenColCount) {\n scene.component.setFrozenColumnShadow(scene.table.frozenColCount - 1);\n } else if (scene.table.options.rightFrozenColCount) {\n scene.component.setRightFrozenColumnShadow(scene.table.colCount - scene.table.rightFrozenColCount);\n }\n scene.hasFrozen = true;\n}\n\nfunction moveColumnFromBodyToRowHeader(scene: Scenegraph) {\n // deal with bodyGroup\n const column = scene.bodyGroup.firstChild instanceof Group ? scene.bodyGroup.firstChild : null;\n if (column) {\n scene.rowHeaderGroup.appendChild(column);\n // update container width\n scene.rowHeaderGroup.setAttribute('width', scene.rowHeaderGroup.attribute.width + column.attribute.width);\n scene.bodyGroup.setAttribute('width', scene.bodyGroup.attribute.width - column.attribute.width);\n }\n}\n\nfunction moveColumnFromColHeaderToCornerHeader(scene: Scenegraph) {\n // deal width colHeaderGroup\n const headerColumn = scene.colHeaderGroup.firstChild instanceof Group ? scene.colHeaderGroup.firstChild : null;\n if (headerColumn) {\n scene.cornerHeaderGroup.appendChild(headerColumn);\n scene.cornerHeaderGroup.setAttribute(\n 'width',\n scene.cornerHeaderGroup.attribute.width + headerColumn.attribute.width\n );\n scene.colHeaderGroup.setAttribute('width', scene.colHeaderGroup.attribute.width - headerColumn.attribute.width);\n }\n}\n\nfunction moveColumnFromRowHeaderToBody(scene: Scenegraph) {\n const column =\n scene.rowHeaderGroup.lastChild instanceof Group\n ? scene.rowHeaderGroup.lastChild\n : (scene.rowHeaderGroup.lastChild?._prev as Group);\n if (column) {\n insertBefore(scene.bodyGroup, column, scene.bodyGroup.firstChild as Group);\n // 更新容器宽度\n scene.bodyGroup.setAttribute('width', scene.bodyGroup.attribute.width + column.attribute.width);\n scene.rowHeaderGroup.setAttribute('width', scene.rowHeaderGroup.attribute.width - column.attribute.width);\n }\n}\n\nfunction moveColumnFromCornerHeaderToColHeader(scene: Scenegraph) {\n // 处理列表头\n const headerColumn =\n scene.cornerHeaderGroup.lastChild instanceof Group\n ? scene.cornerHeaderGroup.lastChild\n : (scene.cornerHeaderGroup.lastChild?._prev as Group);\n if (headerColumn) {\n insertBefore(scene.colHeaderGroup, headerColumn, scene.colHeaderGroup.firstChild as Group);\n scene.colHeaderGroup.setAttribute('width', scene.colHeaderGroup.attribute.width + headerColumn.attribute.width);\n scene.cornerHeaderGroup.setAttribute(\n 'width',\n scene.cornerHeaderGroup.attribute.width - headerColumn.attribute.width\n );\n }\n}\n\nfunction moveColumnFromBottomToLeftBottomCorner(scene: Scenegraph) {\n // deal with bottomFrozenGroup\n const column = scene.bottomFrozenGroup.firstChild instanceof Group ? scene.bottomFrozenGroup.firstChild : null;\n if (column) {\n scene.leftBottomCornerGroup.appendChild(column);\n // update container width\n scene.leftBottomCornerGroup.setAttribute(\n 'width',\n scene.leftBottomCornerGroup.attribute.width + column.attribute.width\n );\n scene.bottomFrozenGroup.setAttribute('width', scene.bottomFrozenGroup.attribute.width - column.attribute.width);\n\n if (scene.table.isPivotChart()) {\n column.forEachChildren((child: Group) => {\n child.setAttributes({\n stroke: false,\n fill: false\n });\n });\n }\n }\n}\n\nfunction moveColumnFromLeftBottomCornerToBottom(scene: Scenegraph) {\n const column =\n scene.leftBottomCornerGroup.lastChild instanceof Group\n ? scene.leftBottomCornerGroup.lastChild\n : (scene.leftBottomCornerGroup.lastChild?._prev as Group);\n if (column) {\n insertBefore(scene.bottomFrozenGroup, column, scene.bottomFrozenGroup.firstChild as Group);\n // 更新容器宽度\n scene.bottomFrozenGroup.setAttribute('width', scene.bottomFrozenGroup.attribute.width + column.attribute.width);\n scene.leftBottomCornerGroup.setAttribute(\n 'width',\n scene.leftBottomCornerGroup.attribute.width - column.attribute.width\n );\n\n if (scene.table.isPivotChart()) {\n column.forEachChildren((child: Group) => {\n const cellStyle = scene.table._getCellStyle(child.col, child.row);\n const range = scene.table.getCellRange(child.col, child.row);\n const cellTheme = getStyleTheme(\n cellStyle,\n scene.table,\n range ? range.start.col : child.col,\n range ? range.start.row : child.row,\n getProp\n ).theme;\n\n child.setAttributes({\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined\n });\n });\n }\n }\n}\n\nexport function dealRightFrozen(distRightFrozenCol: number, scene: Scenegraph) {\n const {\n table,\n proxy,\n rightTopCornerGroup,\n rightFrozenGroup,\n rightBottomCornerGroup,\n bottomFrozenGroup,\n bodyGroup,\n colHeaderGroup\n } = scene;\n // const distRightFrozenCol = scene.table.rightFrozenColCount;\n const currentRightFrozenCol = scene.table.rightFrozenColCount;\n if (distRightFrozenCol > currentRightFrozenCol) {\n for (let col = table.colCount - currentRightFrozenCol - 1; col >= table.colCount - distRightFrozenCol; col--) {\n const colGroup = scene.getColGroup(col);\n insertBefore(rightFrozenGroup, colGroup, rightFrozenGroup.firstChild as Group);\n const headerColGroup = scene.getColGroup(col, true);\n insertBefore(rightTopCornerGroup, headerColGroup, rightTopCornerGroup.firstChild as Group);\n const bottomColGroup = scene.getColGroupInBottom(col);\n insertBefore(rightBottomCornerGroup, bottomColGroup, rightBottomCornerGroup.firstChild as Group);\n }\n // reset cell y\n let x = 0;\n rightFrozenGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightTopCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightBottomCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n } else if (distRightFrozenCol < currentRightFrozenCol) {\n for (let col = table.colCount - currentRightFrozenCol; col < table.colCount - distRightFrozenCol; col++) {\n const colGroup = scene.getColGroup(col);\n colGroup.setAttribute(\n 'x',\n (bodyGroup.lastChild as Group).attribute.x + table.getColWidth((bodyGroup.lastChild as Group).col)\n );\n bodyGroup.appendChild(colGroup);\n const headerColGroup = scene.getColGroupInRightTopCorner(col);\n headerColGroup.setAttribute(\n 'x',\n (colHeaderGroup.lastChild as Group).attribute.x + table.getColWidth((colHeaderGroup.lastChild as Group).col)\n );\n colHeaderGroup.appendChild(headerColGroup);\n const bottomColGroup = scene.getColGroupInRightBottomCorner(col);\n bottomColGroup.setAttribute(\n 'x',\n (bottomFrozenGroup.lastChild as Group).attribute.x +\n table.getColWidth((bottomFrozenGroup.lastChild as Group).col)\n );\n bottomFrozenGroup.appendChild(bottomColGroup);\n }\n // reset cell y\n let x = 0;\n rightFrozenGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightTopCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n x = 0;\n rightBottomCornerGroup.forEachChildren((columnGroup: Group) => {\n columnGroup.setAttribute('x', x);\n x += columnGroup.attribute.width;\n });\n }\n\n // reset right width\n rightFrozenGroup.setAttribute('width', table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1));\n rightTopCornerGroup.setAttribute(\n 'width',\n table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1)\n );\n rightBottomCornerGroup.setAttribute(\n 'width',\n table.getColsWidth(table.colCount - distRightFrozenCol, table.colCount - 1)\n );\n\n table.internalProps.rightFrozenColCount = distRightFrozenCol;\n scene.updateContainer();\n scene.component.updateScrollBar();\n scene.updateNextFrame();\n}\n\nexport function dealBottomFrozen(distBottomFrozenRow: number, scene: Scenegraph) {\n const { table, proxy, bottomFrozenGroup, leftBottomCornerGroup, rightBottomCornerGroup } = scene;\n if (!bottomFrozenGroup.childrenCount) {\n // init bottom\n if (!proxy.table.isPivotChart()) {\n // create left bottom frozen\n createColGroup(\n leftBottomCornerGroup,\n 0,\n 0,\n 0, // colStart\n table.frozenColCount - 1, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'rowHeader', // isHeader\n table\n );\n createColGroup(\n rightBottomCornerGroup,\n 0,\n 0,\n table.colCount - table.rightFrozenColCount, // colStart\n table.colCount - 1, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n // create bottomFrozenGroup\n createColGroup(\n bottomFrozenGroup,\n 0,\n 0,\n proxy.colStart, // colStart\n proxy.colEnd, // colEnd\n 0, // rowStart\n -1, // rowEnd\n 'body', // isHeader\n table\n );\n }\n const currentBottomFrozenRow = scene.table.bottomFrozenRowCount;\n if (distBottomFrozenRow > currentBottomFrozenRow) {\n // row header -> left bottom\n for (let col = 0; col < table.frozenColCount; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n // move cell\n for (let row = table.rowCount - currentBottomFrozenRow - 1; row >= table.rowCount - distBottomFrozenRow; row--) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n // body -> bottom\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n // move cell\n for (let row = table.rowCount - currentBottomFrozenRow - 1; row >= table.rowCount - distBottomFrozenRow; row--) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n if (table.rightFrozenColCount > 0) {\n // right -> right bottom\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n const bottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n // move cell\n for (\n let row = table.rowCount - currentBottomFrozenRow - 1;\n row >= table.rowCount - distBottomFrozenRow;\n row--\n ) {\n const cellGroup = scene.getCell(col, row, true);\n // bottomFrozenColumnGroup.insertBefore(cellGroup, bottomFrozenColumnGroup.firstChild);\n insertBefore(bottomFrozenColumnGroup, cellGroup, bottomFrozenColumnGroup.firstChild as Group);\n }\n // reset cell y\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n }\n } else if (distBottomFrozenRow < currentBottomFrozenRow) {\n // left bottom -> row header\n for (let col = 0; col < table.rowHeaderLevelCount; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInLeftBottomCorner(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n // bottom -> body\n for (let col = proxy.colStart; col <= proxy.colEnd; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInBottom(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n if (table.rightFrozenColCount > 0) {\n // right bottom -> right\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n const columnGroup = scene.getColGroup(col);\n for (let row = table.rowCount - currentBottomFrozenRow; row < table.rowCount - distBottomFrozenRow; row++) {\n const cellGroup = scene.getCell(col, row, true);\n cellGroup.setAttribute(\n 'y',\n (columnGroup.lastChild as Group).attribute.y + table.getRowHeight((columnGroup.lastChild as Group).row)\n );\n columnGroup.appendChild(cellGroup);\n }\n // reset cell y\n const bottomFrozenColumnGroup = scene.getColGroupInRightBottomCorner(col);\n let y = 0;\n bottomFrozenColumnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.setAttribute('y', y);\n y += table.getRowHeight(cellGroup.row);\n });\n }\n }\n }\n // reset bottom height\n bottomFrozenGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n leftBottomCornerGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n rightBottomCornerGroup.setAttribute(\n 'height',\n table.getRowsHeight(table.rowCount - distBottomFrozenRow, table.rowCount - 1)\n );\n\n table.internalProps.bottomFrozenRowCount = distBottomFrozenRow;\n scene.updateContainer();\n scene.component.updateScrollBar();\n scene.updateNextFrame();\n}\n\nfunction insertBefore(container: Group, newNode: Group, targetGroup: Group) {\n if (!newNode || !container) {\n return;\n }\n if (targetGroup) {\n container.insertBefore(newNode, targetGroup);\n } else {\n container.appendChild(newNode);\n }\n}\n","import { isEqual } from '@visactor/vutils';\nimport type { PivotChart } from '../../PivotChart';\nimport type { ICartesianAxis } from '../../components/axis/axis';\nimport { Factory } from '../../core/factory';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { Chart } from '../graphic/chart';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { getQuadProps } from '../utils/padding';\nimport { getProp } from '../utils/get-prop';\n\n/** 供调整列宽后更新chart使用 */\nexport function updateChartSizeForResizeColWidth(scenegraph: Scenegraph, col: number) {\n const { table } = scenegraph;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const columnResizeType = col === -1 ? 'all' : table.internalProps.columnResizeType;\n if (columnResizeType === 'column') {\n const columnGroup = scenegraph.getColGroup(col);\n const columnHeaderGroup = scenegraph.getColGroup(col, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(col, true);\n columnGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n if (table.widthMode === 'adaptive' && col < table.colCount - 1) {\n const columnGroup = scenegraph.getColGroup(col + 1);\n const columnHeaderGroup = scenegraph.getColGroup(col + 1, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(col + 1, true);\n columnGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n }\n } else {\n let startCol = table.rowHeaderLevelCount;\n let endCol = table.colCount - 1;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (columnResizeType === 'indicator') {\n if (layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(col, table.columnHeaderLevelCount);\n } else {\n const headerPaths = layout.getCellHeaderPaths(col, table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n resizeDimensionKey = headerPath.dimensionKey;\n resizeDimensionValue = headerPath.value;\n }\n } else if (columnResizeType === 'indicatorGroup') {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(table.stateManager.columnResize.col, table.columnHeaderLevelCount);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n startCol = node.startInTotal + table.frozenColCount;\n endCol = node.startInTotal + table.frozenColCount + node.size - 1;\n }\n\n for (let c = startCol; c <= endCol; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n const columnHeaderGroup = scenegraph.getColGroup(c, true);\n const columnBottomGroup = scenegraph.getColGroupInBottom(c, true);\n if (columnGroup) {\n if (columnResizeType === 'indicator') {\n const indicatorKey = layout.getIndicatorKey(c, table.columnHeaderLevelCount);\n if (layout.indicatorsAsCol && indicatorKey !== resizeIndicatorKey) {\n continue;\n } else if (!layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(c, table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths?.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n if (\n !headerPath ||\n resizeDimensionKey !== headerPath.dimensionKey ||\n resizeDimensionValue !== headerPath.value\n ) {\n continue;\n }\n }\n }\n columnGroup.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnHeaderGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n columnBottomGroup?.forEachChildren((cellNode: Group) => {\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n });\n }\n }\n }\n\n // // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n // for (let c = col; c <= scenegraph.proxy.colEnd; c++) {\n // const columnGroup = scenegraph.getColGroup(c);\n // // const chartInstance = (columnGroup.attribute as any)?.chartInstance;\n // // if (chartInstance) {\n // columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // node.setAttribute('width', Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1]));\n // node.setAttribute(\n // 'height',\n // Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2])\n // );\n // }\n // });\n // });\n // // }\n // }\n // // 右侧冻结的单元格也需要调整\n // if (!scenegraph.table.isPivotChart() && scenegraph.table.rightFrozenColCount >= 1) {\n // for (\n // let c = scenegraph.table.colCount - scenegraph.table.rightFrozenColCount;\n // c <= scenegraph.table.colCount - 1;\n // c++\n // ) {\n // const columnGroup = scenegraph.getColGroup(c);\n // columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // node.setAttribute(\n // 'width',\n // Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1])\n // );\n // node.setAttribute(\n // 'height',\n // Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2])\n // );\n // }\n // });\n // });\n // }\n // }\n}\n/** 供调整列宽后更新chart使用 */\nexport function updateChartSizeForResizeRowHeight(scenegraph: Scenegraph, row: number) {\n const { table } = scenegraph;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const state = table.stateManager;\n const rowResizeType = row === -1 ? 'all' : table.internalProps.rowResizeType;\n\n let startRow = table.columnHeaderLevelCount;\n let endRow = table.rowCount - 1;\n let resizeIndicatorKey: string;\n let resizeDimensionKey: string;\n let resizeDimensionValue: string;\n if (rowResizeType === 'indicator') {\n if (!layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(table.rowHeaderLevelCount, row);\n } else {\n const headerPaths = layout.getCellHeaderPaths(table.rowHeaderLevelCount - 1, row);\n const headerPath = headerPaths.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n resizeDimensionKey = headerPath?.dimensionKey;\n resizeDimensionValue = headerPath?.value;\n }\n } else if (rowResizeType === 'indicatorGroup') {\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(table.rowHeaderLevelCount, row);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n startRow = node.startInTotal + table.frozenRowCount;\n endRow = node.startInTotal + table.frozenRowCount + node.size - 1;\n }\n\n const colsRange = [{ startCol: scenegraph.proxy.colStart, endCol: scenegraph.proxy.colEnd }];\n if (table.frozenColCount) {\n colsRange.push({ startCol: 0, endCol: table.frozenColCount - 1 });\n }\n if (table.rightFrozenColCount) {\n colsRange.push({ startCol: table.colCount - table.rightFrozenColCount, endCol: table.colCount - 1 });\n }\n colsRange.forEach(({ startCol, endCol }) => {\n for (let col = startCol; col <= endCol; col++) {\n if (rowResizeType === 'row') {\n const cellNode = scenegraph.highPerformanceGetCell(col, row);\n if (cellNode.role !== 'cell') {\n continue;\n }\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n\n if (table.heightMode === 'adaptive' && row < table.rowCount - 1) {\n const cellNode = scenegraph.highPerformanceGetCell(col, row + 1);\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n }\n } else {\n for (let r = startRow; r <= endRow; r++) {\n if (rowResizeType === 'indicator') {\n const indicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, r);\n if (!layout.indicatorsAsCol && indicatorKey !== resizeIndicatorKey) {\n continue;\n } else if (layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, r);\n const headerPath = headerPaths?.rowHeaderPaths[headerPaths.rowHeaderPaths.length - 1];\n if (\n !headerPath ||\n resizeDimensionKey !== headerPath.dimensionKey ||\n resizeDimensionValue !== headerPath.value\n ) {\n continue;\n }\n }\n }\n const cellNode = scenegraph.highPerformanceGetCell(col, r);\n if (cellNode.role !== 'cell') {\n continue;\n }\n const width = table.getColWidth(cellNode.col);\n const height = table.getRowHeight(cellNode.row);\n updateChartGraphicSize(cellNode, width, height);\n }\n }\n }\n });\n\n // const updateCellNode = (c: number, r: number) => {\n // const cellNode = scenegraph.getCell(c, r);\n // const width = scenegraph.table.getColWidth(cellNode.col);\n // const height = scenegraph.table.getRowHeight(cellNode.row);\n // cellNode.children.forEach((node: Chart) => {\n // if ((node as any).type === 'chart') {\n // node.cacheCanvas = null;\n // console.log('bf', c, r, node.attribute.width, node.attribute.height);\n\n // node.setAttribute('width', Math.ceil(width - node.attribute.cellPadding[3] - node.attribute.cellPadding[1]));\n // node.setAttribute('height', Math.ceil(height - node.attribute.cellPadding[0] - node.attribute.cellPadding[2]));\n // console.log('af', c, r, node.attribute.width, node.attribute.height);\n // }\n // });\n // };\n // // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n // for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n\n // // 右侧冻结的单元格也需要调整\n // if (scenegraph.table.rightFrozenColCount >= 1) {\n // for (\n // let c = scenegraph.table.colCount - scenegraph.table.rightFrozenColCount;\n // c <= scenegraph.table.colCount - 1;\n // c++\n // ) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n // }\n // // 左侧冻结的单元格\n // if (scenegraph.table.frozenColCount >= 1) {\n // for (let c = 0; c <= scenegraph.table.frozenColCount - 1; c++) {\n // for (let r = row; r <= scenegraph.proxy.rowEnd; r++) {\n // updateCellNode(c, r);\n // }\n // }\n // }\n}\n/** 清理所有chart节点的 图表缓存图片 */\nexport function clearChartCacheImage(scenegraph: Scenegraph) {\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n cellNode.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.cacheCanvas = null;\n node.addUpdateBoundTag();\n }\n });\n });\n }\n}\n\nexport function clearCellChartCacheImage(col: number, row: number, scenegraph: Scenegraph) {\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n const cellGroup = scenegraph.getCell(col, row);\n cellGroup.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.cacheCanvas = null;\n node.addUpdateBoundTag();\n }\n });\n}\n\n/** 更新所有的图表chart节点上缓存attribute中的data数据 */\nexport function updateChartData(scenegraph: Scenegraph) {\n const table = scenegraph.table;\n // 将调整列宽的后面的面也都一起需要调整viewbox。 TODO:columnResizeType支持后需要根据变化的列去调整,范围可能变多或者变少\n for (let c = scenegraph.proxy.colStart; c <= scenegraph.proxy.colEnd; c++) {\n const columnGroup = scenegraph.getColGroup(c);\n columnGroup?.getChildren()?.forEach((cellNode: Group) => {\n const col = cellNode.col;\n const row = cellNode.row;\n cellNode.children.forEach((node: Chart) => {\n if ((node as any).type === 'chart') {\n node.updateData(table.getCellValue(col, row));\n const chartSpec = node.attribute.spec;\n const chartType = chartSpec.type;\n if (chartType !== 'gauge' && chartType !== 'rose' && chartType !== 'radar') {\n const newAxes = table.internalProps.layoutMap.getChartAxes(col, row);\n node.setAttribute('axes', newAxes);\n chartSpec.axes = newAxes;\n }\n node.setAttribute('spec', chartSpec);\n // node.addUpdateBoundTag();\n }\n });\n });\n }\n\n // update left axes\n updateTableAxes(scenegraph.rowHeaderGroup, scenegraph.table);\n // update top axes\n updateTableAxes(scenegraph.colHeaderGroup, scenegraph.table);\n // update right axes\n updateTableAxes(scenegraph.rightFrozenGroup, scenegraph.table);\n // update bottom axes\n updateTableAxes(scenegraph.bottomFrozenGroup, scenegraph.table);\n}\n/** 组织图表数据状态_selectedDataItemsInChart 更新选中的图表图元状态 */\nexport function updateChartState(scenegraph: Scenegraph, datum: any) {\n const table = scenegraph.table;\n if (table.isPivotChart()) {\n const preSelectItemsCount = (table as PivotChart)._selectedDataItemsInChart.length;\n if ((datum === null || datum?.length === 0 || Object.keys(datum).length === 0) && preSelectItemsCount === 0) {\n //避免无效的更新\n return;\n }\n // (table as PivotChart)._selectedDataItemsInChart = [];\n const newSelectedDataItemsInChart = [];\n if (Array.isArray(datum)) {\n datum.forEach((dataItem: any) => {\n if (dataItem && dataItem.key !== 0 && Object.keys(dataItem).length > 0) {\n //本以为没有点击到图元上 datum为空 发现是{key:0}或者{}\n const selectedState = {} as any;\n for (const itemKey in dataItem) {\n if (!itemKey.startsWith('VGRAMMAR_') && !itemKey.startsWith('__VCHART')) {\n selectedState[itemKey] = dataItem[itemKey];\n }\n }\n newSelectedDataItemsInChart.push(selectedState);\n }\n });\n } else if (datum && datum.key !== 0 && Object.keys(datum).length > 0) {\n //本以为没有点击到图元上 datum为空 发现是{key:0}或者{}\n const selectedState = {} as any;\n for (const itemKey in datum) {\n if (!itemKey.startsWith('VGRAMMAR_') && !itemKey.startsWith('__VCHART')) {\n selectedState[itemKey] = datum[itemKey];\n }\n }\n newSelectedDataItemsInChart.push(selectedState);\n }\n //避免无效的更新\n if (!isEqual((table as PivotChart)._selectedDataItemsInChart, newSelectedDataItemsInChart)) {\n (table as PivotChart)._selectedDataItemsInChart = newSelectedDataItemsInChart;\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).updateDataStateToChartInstance();\n // 清楚chart缓存图片\n clearChartCacheImage(scenegraph);\n table.scenegraph.updateNextFrame();\n }\n }\n}\n\n/**\n * @description: update table axis component\n * @param {Group} containerGroup\n * @param {BaseTableAPI} table\n * @return {*}\n */\nfunction updateTableAxes(containerGroup: Group, table: BaseTableAPI) {\n containerGroup.forEachChildren((column: Group) => {\n if (column.role === 'column') {\n column.forEachChildren((cell: Group) => {\n if (cell.role === 'cell') {\n let isAxisComponent = false;\n cell.forEachChildren((mark: Group) => {\n if (mark.name === 'axis') {\n isAxisComponent = true;\n return true;\n }\n return false;\n });\n if (isAxisComponent) {\n const axisConfig = table.internalProps.layoutMap.getAxisConfigInPivotChart(cell.col, cell.row);\n const cellStyle = table._getCellStyle(cell.col, cell.row);\n const padding = getQuadProps(getProp('padding', cellStyle, cell.col, cell.row, table));\n const CartesianAxis: ICartesianAxis = Factory.getComponent('axis');\n const axis = new CartesianAxis(\n axisConfig,\n cell.attribute.width,\n cell.attribute.height,\n axisConfig.__vtablePadding ?? padding,\n table\n );\n cell.clear();\n cell.appendChild(axis.component);\n axis.overlap();\n }\n }\n });\n }\n });\n}\n\nfunction updateChartGraphicSize(cellNode: Group, width: number, height: number) {\n cellNode.forEachChildren((graphic: Chart) => {\n if ((graphic as any).type === 'chart') {\n graphic.cacheCanvas = null;\n graphic.setAttributes({\n width: Math.ceil(width - graphic.attribute.cellPadding[3] - graphic.attribute.cellPadding[1]),\n height: Math.ceil(height - graphic.attribute.cellPadding[0] - graphic.attribute.cellPadding[2])\n });\n }\n });\n}\n","import type { ListTableConstructorOptions } from '../..';\nimport { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\n\nexport function initSceneGraph(scene: Scenegraph) {\n const width = scene.table.tableNoFrameWidth;\n const height = scene.table.tableNoFrameHeight;\n\n scene.tableGroup = new Group({ x: 0, y: 0, width, height, clip: true, pickable: false });\n scene.tableGroup.role = 'table';\n\n const colHeaderGroup = createContainerGroup(\n 0,\n 0,\n !(scene.table.options as ListTableConstructorOptions).enableTreeStickCell\n );\n colHeaderGroup.role = 'col-header';\n scene.colHeaderGroup = colHeaderGroup;\n\n const cornerHeaderGroup = createContainerGroup(\n 0,\n 0,\n !(scene.table.options as ListTableConstructorOptions).enableTreeStickCell\n );\n cornerHeaderGroup.role = 'corner-header';\n scene.cornerHeaderGroup = cornerHeaderGroup;\n\n const rowHeaderGroup = createContainerGroup(0, 0, true);\n rowHeaderGroup.role = 'row-header';\n scene.rowHeaderGroup = rowHeaderGroup;\n\n const bodyGroup = createContainerGroup(width, 0, true);\n bodyGroup.role = 'body';\n scene.bodyGroup = bodyGroup;\n\n const rightFrozenGroup = createContainerGroup(0, 0, true);\n rightFrozenGroup.role = 'right-frozen';\n scene.rightFrozenGroup = rightFrozenGroup;\n\n const bottomFrozenGroup = createContainerGroup(0, 0, true);\n bottomFrozenGroup.role = 'bottom-frozen';\n scene.bottomFrozenGroup = bottomFrozenGroup;\n\n const componentGroup = createContainerGroup(0, 0);\n componentGroup.role = 'component';\n scene.componentGroup = componentGroup;\n\n const rightTopCornerGroup = createContainerGroup(0, 0, true);\n rightTopCornerGroup.role = 'corner-right-top-header';\n scene.rightTopCornerGroup = rightTopCornerGroup;\n\n const rightBottomCornerGroup = createContainerGroup(0, 0, true);\n rightBottomCornerGroup.role = 'corner-right-bottom-header';\n scene.rightBottomCornerGroup = rightBottomCornerGroup;\n\n const leftBottomCornerGroup = createContainerGroup(0, 0, true);\n leftBottomCornerGroup.role = 'corner-left-bottom-header';\n scene.leftBottomCornerGroup = leftBottomCornerGroup;\n\n scene.tableGroup.addChild(bodyGroup);\n //注意这块添加的顺序 会影响select框选效果 有可能引起框选框覆盖其他部分group的问题 具体问题出在update-select-border文件中的updateComponent方法\n scene.tableGroup.addChild(rowHeaderGroup);\n scene.tableGroup.addChild(bottomFrozenGroup);\n\n scene.tableGroup.addChild(colHeaderGroup);\n scene.tableGroup.addChild(rightFrozenGroup);\n\n scene.tableGroup.addChild(rightBottomCornerGroup);\n scene.tableGroup.addChild(rightTopCornerGroup);\n scene.tableGroup.addChild(leftBottomCornerGroup);\n scene.tableGroup.addChild(cornerHeaderGroup);\n scene.tableGroup.addChild(componentGroup);\n}\n\nfunction createContainerGroup(width: number, height: number, clip?: boolean) {\n return new Group({\n x: 0,\n y: 0,\n width,\n height,\n clip: clip ?? false,\n pickable: false\n });\n}\n","import type { Group } from '../graphic/group';\n\nexport function updateContainerChildrenX(containerGroup: Group, x: number): number {\n // let x = 0;\n containerGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', x);\n x += column.attribute.width;\n });\n return x;\n}\n","import { isValid } from '@visactor/vutils';\nimport type { Group } from '../graphic/group';\nimport type { Scenegraph } from '../scenegraph';\nimport type { ColumnIconOption, SortOrder, SvgIcon } from '../../ts-types';\nimport { IconFuncTypeEnum } from '../../ts-types';\nimport type { Icon } from '../graphic/icon';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport type { IRect } from './../../vrender';\nimport { IContainPointMode, createRect } from './../../vrender';\nimport { dealWithIcon } from '../utils/text-icon-layout';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { getCellMergeRange } from '../../tools/merge-range';\nimport { traverseObject } from '../../tools/util';\n\nexport function hideHoverIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // hideIcon(scene, cellGroup, 'mouseenter_cell');\n\n // hideIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'mouseenter_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 0);\n\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function showHoverIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // showIcon(scene, cellGroup, 'mouseenter_cell');\n\n // showIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'mouseenter_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function hideClickIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // hideIcon(scene, cellGroup, 'click_cell');\n\n // hideIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'click_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 0);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\nexport function showClickIcon(col: number, row: number, scene: Scenegraph) {\n if (col === -1 || row === -1) {\n return;\n }\n // const cellGroup = scene.getCell(col, row);\n // showIcon(scene, cellGroup, 'click_cell');\n\n // showIcon\n updateCellRangeIcon(\n col,\n row,\n (icon: Icon) => icon.attribute.visibleTime === 'click_cell',\n (icon: Icon) => {\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n scene.updateNextFrame();\n}\n\n/**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\nexport function getIconByXY(col: number, row: number, x: number, y: number, scene: Scenegraph): Icon | undefined {\n const cellGroup = scene.getCell(col, row);\n let pickMark;\n cellGroup.forEachChildren((mark: Icon) => {\n if (mark.role && mark.role.startsWith('icon') && mark.containsPoint(x, y, IContainPointMode.GLOBAL)) {\n pickMark = mark;\n }\n });\n return pickMark;\n}\n\n/**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function setIconHoverStyle(baseIcon: Icon, col: number, row: number, cellGroup: Group, scene: Scenegraph) {\n if (baseIcon.attribute.backgroundColor || baseIcon.attribute.hoverImage) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === baseIcon.name,\n (icon: Icon) => {\n // hover展示背景\n if (icon.attribute.backgroundColor) {\n let iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttributes({\n x:\n (icon.attribute.x ?? 0) +\n // (icon.attribute.dx ?? 0) +\n (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n dx: icon.attribute.dx ?? 0,\n dy: icon.attribute.dy ?? 0,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n visible: true\n });\n } else {\n iconBack = createRect({\n x:\n (icon.attribute.x ?? 0) +\n // (icon.attribute.dx ?? 0) +\n (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n dx: icon.attribute.dx ?? 0,\n dy: icon.attribute.dy ?? 0,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n pickable: false,\n visible: true\n }) as IRect;\n iconBack.name = 'icon-back';\n // cellGroup.appendChild(iconBack);\n }\n icon.parent.insertBefore(iconBack, icon);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.hoverImage) {\n icon.image = icon.attribute.hoverImage;\n }\n },\n scene\n );\n }\n // hover展示tooltip\n if (baseIcon.tooltip) {\n const { x1: left, x2: right, y1: top, y2: bottom } = baseIcon.globalAABBBounds;\n const tooltipOptions: TooltipOptions = {\n content: baseIcon.tooltip.title,\n referencePosition: {\n rect: {\n left: left,\n right: right,\n top: top,\n bottom: bottom,\n width: baseIcon.globalAABBBounds.width(),\n height: baseIcon.globalAABBBounds.height()\n },\n placement: baseIcon.tooltip.placement\n },\n disappearDelay: baseIcon.tooltip.disappearDelay,\n style: Object.assign({}, scene.table.internalProps.theme?.tooltipStyle, baseIcon.tooltip?.style)\n };\n if (!scene.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n scene.table.showTooltip(col, row, tooltipOptions);\n }\n }\n}\n\n/**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function setIconNormalStyle(baseIcon: Icon, col: number, row: number, scene: Scenegraph) {\n if (baseIcon.attribute.backgroundColor || baseIcon.attribute.hoverImage) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === baseIcon.name,\n (icon: Icon) => {\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.originImage) {\n icon.image = icon.attribute.originImage;\n }\n },\n scene\n );\n }\n}\n\nexport function updateIcon(baseIcon: Icon, iconConfig: ColumnIconOption, col: number, row: number, scene: Scenegraph) {\n // 直接更新mark attribute\n // dealWithIcon(iconConfig, icon);\n // icon.name = iconConfig.name;\n // scene.updateNextFrame();\n const iconName = baseIcon.name;\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.name === iconName,\n // dealer\n (icon: Icon) => {\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n\n scene.updateNextFrame();\n}\n\nfunction resetSortIcon(oldSortCol: number, oldSortRow: number, iconConfig: ColumnIconOption, scene: Scenegraph) {\n const oldSortCell = scene.getCell(oldSortCol, oldSortRow);\n\n if (\n isValid(oldSortCell.mergeStartCol) &&\n isValid(oldSortCell.mergeStartRow) &&\n isValid(oldSortCell.mergeEndCol) &&\n isValid(oldSortCell.mergeEndRow)\n ) {\n for (let col = oldSortCell.mergeStartCol; col <= oldSortCell.mergeEndCol; col++) {\n for (let row = oldSortCell.mergeStartRow; row <= oldSortCell.mergeEndRow; row++) {\n let oldIconMark: Icon;\n scene.getCell(col, row).forEachChildren((mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n if (oldIconMark) {\n dealWithIcon(iconConfig, oldIconMark);\n oldIconMark.name = iconConfig.name;\n }\n }\n }\n } else {\n let oldIconMark: Icon;\n\n //oldSortCell.forEachChildren((mark: Icon) => {\n traverseObject(oldSortCell, 'children', (mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n\n if (oldIconMark) {\n // updateIcon(oldIconMark, oldIcon);\n dealWithIcon(iconConfig, oldIconMark);\n oldIconMark.name = iconConfig.name;\n }\n }\n}\n\nfunction checkSameCell(col1: number, row1: number, col2: number, row2: number, table: BaseTableAPI) {\n const range1 = table.getCellRange(col1, row1);\n const range2 = table.getCellRange(col2, row2);\n if (\n range1.start.col === range2.start.col &&\n range1.start.row === range2.start.row &&\n range1.end.col === range2.end.col &&\n range1.end.row === range2.end.row\n ) {\n return true;\n }\n return false;\n}\n\nexport function updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n scene: Scenegraph;\n}) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene } = options;\n // 更新icon\n const icon = scene.table.internalProps.headerHelper.getSortIcon(order, scene.table, col, row);\n if (iconMark) {\n updateIcon(iconMark, icon, col, row, scene);\n }\n\n // 更新旧frozen icon\n if (!checkSameCell(col, row, oldSortCol, oldSortRow, scene.table)) {\n const oldIcon = scene.table.internalProps.headerHelper.getSortIcon('normal', scene.table, oldSortCol, oldSortRow);\n if (oldIconMark) {\n updateIcon(oldIconMark, oldIcon, oldSortCol, oldSortRow, scene);\n } else {\n resetSortIcon(oldSortCol, oldSortRow, oldIcon, scene);\n }\n }\n}\n\nexport function updateFrozenIcon(scene: Scenegraph) {\n // 依据新旧冻结列确定更新范围\n for (let col = 0; col < scene.table.colCount; col++) {\n for (let row = 0; row < scene.table.columnHeaderLevelCount; row++) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === 'frozen',\n // dealer\n (icon: Icon) => {\n const iconConfig = scene.table.internalProps.headerHelper.getFrozenIcon(col, row);\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n }\n }\n}\n\nexport function updateHierarchyIcon(col: number, row: number, scene: Scenegraph) {\n let iconConfig: SvgIcon;\n if (scene.table.isHeader(col, row)) {\n iconConfig = scene.table.internalProps.headerHelper.getHierarchyIcon(col, row);\n } else {\n iconConfig = scene.table.internalProps.bodyHelper.getHierarchyIcon(col, row);\n }\n\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) =>\n icon.attribute.funcType === IconFuncTypeEnum.collapse || icon.attribute.funcType === IconFuncTypeEnum.expand,\n // dealer\n (icon: Icon) => {\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n },\n scene\n );\n}\n\nexport function updateCellGroupIcon(cellGroup: Group, filter: (icon: Icon) => boolean, dealer: (icon: Icon) => void) {\n if (!cellGroup || cellGroup.role === 'empty') {\n return;\n }\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n updateCellGroupIcon(child, filter, dealer);\n } else if (filter(child)) {\n dealer(child);\n }\n });\n}\n\nexport function updateCellRangeIcon(\n col: number,\n row: number,\n filter: (icon: Icon) => boolean,\n dealer: (icon: Icon) => void,\n scene: Scenegraph\n) {\n const cellGroup = scene.getCell(col, row);\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, scene);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n updateCellGroupIcon(scene.highPerformanceGetCell(col, row), filter, dealer);\n }\n }\n } else {\n updateCellGroupIcon(cellGroup, filter, dealer);\n }\n}\n\nexport function residentHoverIcon(col: number, row: number, scene: Scenegraph) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === IconFuncTypeEnum.dropDown,\n // dealer\n (icon: Icon) => {\n (icon as any).oldVisibleTime = icon.attribute.visibleTime;\n icon.setAttribute('visibleTime', 'always');\n icon.setAttribute('opacity', 1);\n },\n scene\n );\n}\n\nexport function resetResidentHoverIcon(col: number, row: number, scene: Scenegraph) {\n updateCellRangeIcon(\n col,\n row,\n // filter\n (icon: Icon) => icon.attribute.funcType === IconFuncTypeEnum.dropDown,\n // dealer\n (icon: Icon) => {\n (icon as any).oldVisibleTime && icon.setAttribute('visibleTime', (icon as any).oldVisibleTime);\n icon.setAttribute('opacity', icon.attribute.visibleTime === 'always' ? 1 : 0);\n },\n scene\n );\n}\n","import type { IRectGraphicAttribute } from './../../vrender';\nimport type { ThemeStyle } from '../../ts-types';\nimport type { Group } from '../graphic/group';\nimport { getStroke } from './frame-border';\nimport { getQuadProps } from '../utils/padding';\n\nexport function createCornerCell(cellGroup: Group, frameTheme: ThemeStyle) {\n const { bgColor, borderColor, borderLineWidth, borderLineDash } = frameTheme;\n\n const rectAttributes: IRectGraphicAttribute = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false,\n pickable: true,\n fill: bgColor as string\n };\n rectAttributes.stroke = getStroke(borderColor as string, undefined);\n rectAttributes.lineWidth = borderLineWidth as number;\n borderLineDash && (rectAttributes.lineDash = borderLineDash as number[]);\n rectAttributes.lineCap = 'butt';\n if (Array.isArray(borderColor)) {\n (rectAttributes as any).strokeArrayColor = getQuadProps(borderColor as any);\n }\n if (Array.isArray(borderLineWidth)) {\n (rectAttributes as any).strokeArrayWidth = getQuadProps(borderLineWidth);\n (rectAttributes as any).lineWidth = 1;\n }\n\n // const cornerCellGroup = new Group(rectAttributes);\n cellGroup.setAttributes(rectAttributes);\n cellGroup.role = 'corner-frozen';\n return cellGroup;\n}\n","import { isNumber } from '@visactor/vutils';\nimport type { CellAddress } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { Group } from '../graphic/group';\nimport { updateCell } from '../group-creater/cell-helper';\nimport type { Scenegraph } from '../scenegraph';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport type { IGroup } from './../../vrender';\n\n/**\n * add and remove rows in scenegraph\n */\nexport function updateCol(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[],\n table: BaseTableAPI\n) {\n const scene = table.scenegraph;\n // deduplication\n const removeCols = deduplication(removeCells.map(cell => cell.col)).sort((a, b) => b - a);\n const addCols = deduplication(addCells.map(cell => cell.col)).sort((a, b) => a - b);\n const updateCols = deduplication(updateCells.map(cell => cell.col)).sort((a, b) => a - b);\n\n // remove cells\n removeCols.forEach(col => {\n removeCol(col, scene);\n });\n\n const colWidthsMap = table.colWidthsMap;\n removeCols.forEach(col => {\n colWidthsMap.delAndReorder(col);\n });\n\n if (removeCols.length) {\n resetColNumber(scene);\n }\n\n scene.table._clearColRangeWidthsMap();\n\n // add cells\n let updateAfter: number;\n addCols.forEach(col => {\n const needUpdateAfter = addCol(col, scene);\n resetColNumber(scene);\n updateAfter = updateAfter ?? needUpdateAfter;\n colWidthsMap.addAndReorder(col);\n });\n\n // reset attribute y and col number in CellGroup\n // const newTotalHeight = resetColNumberAndY(scene);\n resetColNumberAndX(scene);\n // add cells\n updateCols.forEach(col => {\n for (let row = 0; row < table.rowCount; row++) {\n // updateColAttr(col, scene);\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n for (let col = mergeInfo.start.col; col <= mergeInfo.end.col; col++) {\n updateCell(col, row, scene.table, false);\n }\n }\n } else {\n updateCell(col, row, scene.table, false);\n }\n }\n });\n\n if (isNumber(updateAfter)) {\n for (let col = updateAfter; col < table.colCount; col++) {\n for (let row = 0; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.colUpdatePos = updateAfter;\n }\n if (addCols.length) {\n if (!isNumber(updateAfter)) {\n const minCol = Math.min(...addCols);\n scene.proxy.colUpdatePos = minCol;\n }\n scene.proxy.colUpdateDirection = 'left';\n scene.proxy.updateColGroups(scene.proxy.screenColCount * 2);\n updateRightFrozeCellGroups();\n scene.proxy.progress();\n } else if (removeCols.length) {\n scene.proxy.updateColGroups(scene.proxy.screenColCount * 2);\n updateRightFrozeCellGroups();\n scene.proxy.progress();\n }\n\n // update table size\n const newTotalWidth = table.getColsWidth(table.frozenColCount, table.colCount - 1);\n scene.updateContainerWidth(scene.table.frozenColCount, newTotalWidth - scene.bodyGroup.attribute.width);\n\n function updateRightFrozeCellGroups() {\n if (\n addCols?.[addCols?.length - 1] >= table.colCount - table.rightFrozenColCount ||\n updateCols?.[updateCols?.length - 1] >= table.colCount - table.rightFrozenColCount ||\n removeCols?.[0] >= table.colCount - table.rightFrozenColCount\n ) {\n for (let col = table.colCount - table.rightFrozenColCount; col < table.colCount; col++) {\n for (let row = 0; row < table.rowCount; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row, true);\n cellGroup && (cellGroup.needUpdate = true);\n }\n }\n scene.proxy.updateRightFrozenCellGroups();\n }\n }\n}\n\nfunction removeCol(col: number, scene: Scenegraph) {\n const proxy = scene.proxy;\n // removeCellGroup(col, scene);\n //先考虑非表头部分删除情况\n if (col >= scene.table.rowHeaderLevelCount) {\n if (col >= scene.table.colCount - scene.table.rightFrozenColCount) {\n // 如果是删除的右侧固定列 这里不做真正的删除,只需要后面将相应列做更新\n // scene.bodyGroup.removeChild(scene.bodyGroup.lastChild as any);\n // scene.bottomFrozenGroup.removeChild(scene.bottomFrozenGroup.lastChild as any);\n } else {\n const colGroup = scene.getColGroup(col, false);\n if (colGroup && colGroup.parent === scene.bodyGroup) {\n scene.bodyGroup.removeChild(colGroup);\n }\n const bottomColGroup = scene.getColGroupInBottom(col);\n if (bottomColGroup && bottomColGroup.parent === scene.bottomFrozenGroup) {\n scene.bottomFrozenGroup.removeChild(bottomColGroup);\n }\n }\n }\n\n // TODO 需要整体更新proxy的状态\n if (col >= proxy.colStart && col <= proxy.colEnd) {\n proxy.colEnd--;\n proxy.currentCol--;\n }\n proxy.bodyRightCol--;\n // proxy.totalCol--;\n const totalActualBodyColCount = Math.min(proxy.colLimit, proxy.bodyRightCol - proxy.bodyLeftCol + 1); // 渐进加载总col数量\n proxy.totalActualBodyColCount = totalActualBodyColCount;\n proxy.totalCol = proxy.colStart + totalActualBodyColCount - 1; // 目标渐进完成的col\n}\n\nfunction addCol(col: number, scene: Scenegraph) {\n const proxy = scene.proxy;\n proxy.bodyRightCol++;\n // proxy.totalCol++;\n const totalActualBodyColCount = Math.min(proxy.colLimit, proxy.bodyRightCol - proxy.bodyLeftCol + 1); // 渐进加载总col数量\n proxy.totalActualBodyColCount = totalActualBodyColCount;\n proxy.totalCol = proxy.colStart + totalActualBodyColCount - 1; // 目标渐进完成的col\n\n if (col < proxy.colStart) {\n return undefined;\n } else if (col > proxy.colEnd) {\n if (proxy.colEnd - proxy.colStart + 1 < proxy.colLimit) {\n // can add col\n proxy.colEnd++;\n proxy.currentCol++;\n\n addColGroup(col, scene);\n return col;\n }\n return undefined;\n }\n if (proxy.colEnd - proxy.colStart + 1 < proxy.colLimit) {\n // can add col\n proxy.colEnd++;\n proxy.currentCol++;\n\n addColGroup(col, scene);\n return col;\n }\n return col;\n}\n\n// array deduplication\nfunction deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\nfunction resetColNumber(scene: Scenegraph) {\n let colIndex = scene.bodyColStart;\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n scene.colHeaderGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colIndex++;\n });\n function processCell(cellGroup: Group) {\n cellGroup.col = colIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeEndCol = merge.end.col;\n }\n\n if (cellGroup.role !== 'cell') {\n return;\n }\n }\n}\n\nfunction resetColNumberAndX(scene: Scenegraph) {\n let colIndex = scene.bodyColStart;\n let x = scene.getCellGroupX(colIndex);\n scene.bodyGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n x = scene.getCellGroupX(colIndex);\n scene.colHeaderGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.bodyColStart;\n x = scene.getCellGroupX(colIndex);\n scene.bottomFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightFrozenGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightTopCornerGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n\n colIndex = scene.table.colCount - scene.table.rightFrozenColCount;\n x = 0;\n scene.rightBottomCornerGroup.forEachChildren((colGroup: Group) => {\n colGroup.col = colIndex;\n colGroup?.forEachChildren((cellGroup: Group) => {\n processCell(cellGroup);\n });\n colGroup.setAttribute('x', x);\n x += colGroup.attribute.width;\n colIndex++;\n });\n function processCell(cellGroup: Group) {\n cellGroup.col = colIndex;\n const merge = getCellMergeInfo(scene.table, cellGroup.col, cellGroup.row);\n if (merge) {\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeStartCol = merge.start.col;\n cellGroup.mergeEndCol = merge.end.col;\n cellGroup.mergeEndCol = merge.end.col;\n }\n\n if (cellGroup.role !== 'cell') {\n return;\n }\n }\n}\n\nfunction addColGroup(col: number, scene: Scenegraph) {\n if (scene.colHeaderGroup && scene.table.columnHeaderLevelCount > 0) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroup(col, true);\n if (colAfter) {\n scene.colHeaderGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.colHeaderGroup.appendChild(columnGroup);\n }\n generateCellGroup(columnGroup, col, 0, scene.table.columnHeaderLevelCount - 1);\n }\n\n if (scene.bodyGroup) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroup(col, false);\n if (colAfter) {\n scene.bodyGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.bodyGroup.appendChild(columnGroup);\n }\n generateCellGroup(columnGroup, col, scene.bodyRowStart, scene.bodyRowEnd);\n }\n if (scene.bottomFrozenGroup && scene.table.bottomFrozenRowCount > 0) {\n const columnGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: 0,\n clip: false,\n pickable: false\n });\n columnGroup.role = 'column';\n columnGroup.col = col;\n\n const colAfter = scene.getColGroupInBottom(col);\n if (colAfter) {\n scene.bottomFrozenGroup.insertBefore(columnGroup, colAfter);\n } else {\n scene.bottomFrozenGroup.appendChild(columnGroup);\n }\n\n generateCellGroup(\n columnGroup,\n col,\n scene.table.rowCount - scene.table.bottomFrozenRowCount,\n scene.table.rowCount - 1\n );\n }\n\n function generateCellGroup(group: IGroup, col: number, rowStart: number, rowEnd: number) {\n for (let row = rowStart; row <= rowEnd; row++) {\n // create cellGroup\n // const cellGroup = updateCell(col, row, scene.table, true);\n const cellGroup = new Group({\n x: 0,\n y: 0,\n width: scene.table.getColWidth(col),\n height: scene.table.getRowHeight(row)\n });\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n cellGroup.needUpdate = true;\n group.appendChild(cellGroup);\n }\n }\n}\n","import type { Text } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealWithAnimationAppear(table: BaseTableAPI) {\n if (!table.options.animationAppear) {\n return;\n }\n\n let duration: number;\n let delay: number;\n let type: 'all' | 'one-by-one';\n let direction: 'row' | 'column';\n\n if (table.options.animationAppear === true) {\n duration = 500;\n delay = 0;\n type = 'one-by-one';\n direction = 'column';\n } else {\n duration = table.options.animationAppear.duration ?? 500;\n delay = table.options.animationAppear.delay ?? 0;\n type = table.options.animationAppear.type ?? 'one-by-one';\n direction = table.options.animationAppear.direction ?? 'row';\n }\n\n const { scenegraph: scene, frozenColCount, frozenRowCount } = table;\n\n // header cell\n const { colStart, colEnd, rowStart, rowEnd } = scene.proxy; // to do: right bottom frozen\n\n for (let col = 0; col <= colEnd; col++) {\n for (let row = 0; row <= rowEnd; row++) {\n const cellGroup = scene.highPerformanceGetCell(col, row);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.forEachChildren((child: Text) => {\n child.setAttribute('opacity', 0);\n child\n .animate()\n .wait(type === 'one-by-one' ? (direction === 'row' ? row : col) * (duration - delay) : delay)\n .to({ opacity: 1 }, duration, 'linear');\n });\n }\n }\n }\n}\n","import type { IRect, IRectGraphicAttribute } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\n\n// for fs big screen\nexport function temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute, scene: Scenegraph) {\n const { selectedRangeComponents } = scene;\n selectedRangeComponents.forEach((selectComp: { rect: IRect }, key: string) => {\n selectComp.rect.setAttributes(rectAttribute);\n });\n scene.updateNextFrame();\n}\n","import type { IStage, IRect, ITextCache, INode, Text, RichText, Stage, IRectGraphicAttribute } from './../vrender';\nimport { createStage, createRect, IContainPointMode, container, vglobal, registerForVrender } from './../vrender';\nimport type { CellRange, CellSubLocation } from '../ts-types';\nimport {\n type CellAddress,\n type CellLocation,\n type ColumnIconOption,\n type SortOrder,\n IconFuncTypeEnum,\n InternalIconName\n} from '../ts-types';\nimport { isArray, isString, isValid } from '@visactor/vutils';\nimport type { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateCornerRadius, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport splitModule from './graphic/contributions';\nimport { getFunctionalProp, getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth, getAdaptiveWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport {\n deleteAllSelectBorder,\n deleteAllSelectingBorder,\n deleteLastSelectedRangeComponents,\n removeFillHandleFromSelectComponents\n} from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { computeRowHeight, computeRowsHeight } from './layout/compute-row-height';\nimport { emptyGroup } from './utils/empty-group';\nimport { dealBottomFrozen, dealFrozen, dealRightFrozen, resetFrozen } from './layout/frozen';\nimport {\n updateChartSizeForResizeColWidth,\n updateChartSizeForResizeRowHeight,\n updateChartState\n} from './refresh-node/update-chart';\nimport { initSceneGraph } from './group-creater/init-scenegraph';\nimport { updateContainerChildrenX } from './utils/update-container';\nimport type { CheckBox } from '@visactor/vrender-components';\nimport { loadPoptip, setPoptipTheme } from '@visactor/vrender-components';\nimport textMeasureModule from './utils/text-measure';\nimport {\n getIconByXY,\n hideClickIcon,\n hideHoverIcon,\n resetResidentHoverIcon,\n residentHoverIcon,\n setIconHoverStyle,\n setIconNormalStyle,\n showClickIcon,\n showHoverIcon,\n updateFrozenIcon,\n updateHierarchyIcon,\n updateSortIcon\n} from './icon/icon-update';\nimport { Env } from '../tools/env';\nimport { createCornerCell } from './style/corner-cell';\nimport { updateCol } from './layout/update-col';\nimport { deduplication } from '../tools/util';\nimport { getDefaultHeight, getDefaultWidth } from './group-creater/progress/default-width-height';\nimport { dealWithAnimationAppear } from './animation/appear';\nimport { updateReactContainer } from './layout/frozen-react';\n\nimport * as registerIcons from '../icons';\nimport { temporarilyUpdateSelectRectStyle } from './select/update-select-style';\n// import { contextModule } from './context/module';\n\nregisterForVrender();\n\n// VChart poptip theme\n// loadPoptip();\ncontainer.load(splitModule);\ncontainer.load(textMeasureModule);\n// container.load(renderServiceModule);\n// container.load(contextModule);\n// console.log(container);\n\nexport type MergeMap = Map<\n string,\n {\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n rightFrozenGroup: Group; // 右侧冻结列Group\n bottomFrozenGroup: Group; // 下侧冻结行Group\n rightTopCornerGroup: Group; // 右上角占位单元格Group,只在有右侧冻结列时使用\n leftBottomCornerGroup: Group; // 左下角占位单元格Group,只在有下侧冻结行时使用\n rightBottomCornerGroup: Group; // 右下角占位单元格Group,只在有右侧下侧都有冻结行时使用\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map;\n customSelectedRangeComponents: Map;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n // transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number; // 冻结列数\n frozenRowCount: number; // 冻结行数\n clear: boolean;\n\n mergeMap: MergeMap;\n _dealAutoFillHeightOriginRowsHeight: number; // hack 缓存一个值 用于处理autoFillHeight的逻辑判断 在某些情况下是需要更新此值的 如增删数据 但目前没有做这个\n\n _needUpdateContainer: boolean = false;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n setPoptipTheme(this.table.theme.textPopTipStyle);\n let width;\n let height;\n if (table.options.canvas && table.options.viewBox) {\n vglobal.setEnv('browser');\n width = table.options.viewBox.x2 - table.options.viewBox.x1;\n height = table.options.viewBox.y2 - table.options.viewBox.y1;\n } else if (Env.mode === 'node') {\n vglobal.setEnv('node', table.options.modeParams);\n width = table.canvasWidth;\n height = table.canvasHeight;\n } else {\n vglobal.setEnv('browser');\n width = table.canvas.width;\n height = table.canvas.height;\n }\n this.stage = createStage({\n canvas: table.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio,\n enableLayout: true,\n // enableHtmlAttribute: true,\n // pluginList: table.isPivotChart() ? ['poptipForText'] : undefined,\n beforeRender: (stage: Stage) => {\n this.table.options.beforeRender && this.table.options.beforeRender(stage);\n this.table.animationManager.ticker.start();\n },\n afterRender: (stage: Stage) => {\n this.table.options.afterRender && this.table.options.afterRender(stage);\n this.table.fireListeners('after_render', null);\n // console.trace('after_render');\n },\n // event: { clickInterval: 400 }\n // autoRender: true\n\n canvasControled: !table.options.canvas,\n viewBox: table.options.viewBox,\n ...table.options.renderOption\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n return this.proxy.rowEnd ?? this.table.rowCount - 1;\n }\n\n get bodyColStart(): number {\n return this.proxy.colStart ?? 0;\n }\n\n get bodyColEnd(): number {\n return this.proxy.colEnd ?? this.table.colCount - 1;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n // (this.table as any).transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n\n initSceneGraph(this);\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.table.animationManager.clear();\n // unbind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n this.stage.pluginService.findPluginsByName('poptipForText').forEach(plugin => {\n plugin.deactivate(this.stage.pluginService);\n });\n }\n\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n delete this.colHeaderGroup.border;\n this.rowHeaderGroup.clear();\n delete this.rowHeaderGroup.border;\n this.cornerHeaderGroup.clear();\n delete this.cornerHeaderGroup.border;\n this.bodyGroup.clear();\n delete this.bodyGroup.border;\n\n this.bottomFrozenGroup.clear();\n delete this.bottomFrozenGroup.border;\n this.rightFrozenGroup.clear();\n delete this.rightFrozenGroup.border;\n this.rightTopCornerGroup.clear();\n delete this.rightTopCornerGroup.border;\n this.rightBottomCornerGroup.clear();\n delete this.rightBottomCornerGroup.border;\n this.leftBottomCornerGroup.clear();\n delete this.leftBottomCornerGroup.border;\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bottomFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightTopCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.leftBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.rightBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: 0,\n height: 0\n });\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n this.proxy?.release();\n\n this.table.reactCustomLayout?.clearCache();\n }\n\n updateStageBackground() {\n this.stage.background = this.table.theme.underlayBackgroundColor;\n this.stage.renderNextFrame();\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n this.customSelectedRangeComponents = new Map();\n }\n\n updateComponent() {\n this.component.updateStyle();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph(skipRowHeightClear = false) {\n if (!skipRowHeightClear) {\n this.table.rowHeightsMap.clear();\n this.table.internalProps.layoutMap.clearCellRangeMap();\n }\n\n // bind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n (this.stage.pluginService as any).autoEnablePlugins.getContributions().forEach((p: any) => {\n if (p.name === 'poptipForText') {\n this.stage.pluginService.register(p);\n }\n });\n }\n\n this.clear = false;\n // this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenColCount = this.table.frozenColCount;\n this.frozenRowCount = this.table.frozenRowCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n if (this.table.isPivotChart()) {\n createCornerCell(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n }\n\n this.proxy.createGroupForFirstScreen(\n this.cornerHeaderGroup,\n this.colHeaderGroup,\n this.rowHeaderGroup,\n this.rightFrozenGroup,\n this.bottomFrozenGroup,\n this.bodyGroup,\n 0,\n 0\n );\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n // const colGroup = row < this.frozenRowCount ? this.colHeaderGroup : this.cornerHeaderGroup;\n let cell;\n if (\n this.table.rightFrozenColCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row < this.table.frozenRowCount\n ) {\n cell = this.rightTopCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.bottomFrozenRowCount > 0 &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount &&\n col < this.table.frozenColCount\n ) {\n cell = this.leftBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.rightFrozenColCount > 0 &&\n this.table.bottomFrozenRowCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount\n ) {\n cell = this.rightBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.rightFrozenColCount > 0 && col > this.table.colCount - 1 - this.table.rightFrozenColCount) {\n cell = this.rightFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.bottomFrozenRowCount > 0 && row > this.table.rowCount - 1 - this.table.bottomFrozenRowCount) {\n cell = this.bottomFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else {\n cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n }\n\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n if (range.start.col === col && range.start.row === row) {\n // 理论上不会出现这种情况,但是在PivotChart会偶先,这里处理避免进入死循环\n // do nothing\n } else {\n cell = this.getCell(range.start.col, range.start.row);\n }\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number, getShadow?: boolean): Group {\n // if (!this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, getShadow);\n // }\n // return this.getCell(col, row, getShadow);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (\n isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightTopCornerGroup.getColGroup(col) as Group;\n } else if (\n !isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightFrozenGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n getColGroupInBottom(col: number, isCornerOrColHeader = false): Group | undefined {\n if (isCornerOrColHeader) {\n const element = this.getColGroupInLeftBottomCorner(col) ?? this.getColGroupInRightBottomCorner(col);\n if (element) {\n return element;\n }\n }\n if (this.table.bottomFrozenRowCount > 0) {\n return this.bottomFrozenGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInLeftBottomCorner(col: number): Group | undefined {\n if (this.table.bottomFrozenRowCount > 0) {\n return this.leftBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightTopCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0) {\n return this.rightTopCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightBottomCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0 && this.table.bottomFrozenRowCount > 0) {\n return this.rightBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.updateContainerSync();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n if (\n this.table.stateManager.select?.ranges?.length > 0 ||\n this.table.stateManager.select?.customSelectRanges?.length > 0\n ) {\n updateAllSelectComponent(this);\n }\n }\n\n hideHoverIcon(col: number, row: number) {\n hideHoverIcon(col, row, this);\n }\n\n showHoverIcon(col: number, row: number) {\n showHoverIcon(col, row, this);\n }\n\n hideClickIcon(col: number, row: number) {\n hideClickIcon(col, row, this);\n }\n\n showClickIcon(col: number, row: number) {\n showClickIcon(col, row, this);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n return getIconByXY(col, row, x, y, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n setIconHoverStyle(icon, col, row, cellGroup, this);\n }\n\n updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n }) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark } = options;\n updateSortIcon({ col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene: this });\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n updateFrozenIcon(this);\n }\n updateHierarchyIcon(col: number, row: number) {\n updateHierarchyIcon(col, row, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n setIconNormalStyle(icon, col, row, this);\n }\n\n residentHoverIcon(col: number, row: number) {\n residentHoverIcon(col, row, this);\n }\n resetResidentHoverIcon(col: number, row: number) {\n resetResidentHoverIcon(col, row, this);\n }\n\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.deactivate?.();\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n deleteAllSelectingBorder(this);\n }\n\n updateCellSelectBorder(selectRange: CellRange & { skipBodyMerge?: boolean }, extendSelectRange: boolean = true) {\n updateCellSelectBorder(this, selectRange, extendSelectRange);\n }\n\n removeFillHandleFromSelectComponents() {\n removeFillHandleFromSelectComponents(this);\n }\n /** 根据select状态重新创建选中range节点 */\n recreateAllSelectRangeComponents() {\n deleteAllSelectBorder(this);\n this.table.stateManager.select.ranges.forEach((cellRange: CellRange) => {\n updateCellSelectBorder(this, cellRange);\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n });\n }\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number, skipUpdateContainer?: boolean, skipTableWidthMap?: boolean) {\n updateColWidth(this, col, Math.round(detaX), skipTableWidthMap);\n // this.updateContainerWidth(col, detaX);\n if (!skipUpdateContainer) {\n // this.updateContainerAttrWidthAndX();\n this.updateContainer(true);\n }\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeColWidth(col: number) {\n updateChartSizeForResizeColWidth(this, col);\n }\n\n /**\n * @description: 行高调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeRowHeight(row: number) {\n updateChartSizeForResizeRowHeight(this, row);\n }\n /** 更新图表的高亮状态 */\n updateChartState(datum: any) {\n this.table.isPivotChart() && updateChartState(this, datum);\n }\n\n updateCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.bodyGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n ?.getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col);\n columnGroup?.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n }\n }\n updateHeaderCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.rowHeaderGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n .getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col, true);\n columnGroup.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n });\n });\n }\n }\n updateAutoColWidth(col: number) {\n this.table.internalProps._widthResizedColMap.delete(col);\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n const table = this.table;\n\n if (table.widthMode === 'adaptive' || table.autoFillWidth || table.internalProps.transpose) {\n computeColsWidth(this.table, 0, this.table.colCount - 1, true);\n } else {\n table._clearColRangeWidthsMap();\n // left frozen\n if (table.frozenColCount > 0) {\n computeColsWidth(this.table, 0, table.frozenColCount - 1, true);\n }\n // right frozen\n if (table.rightFrozenColCount > 0) {\n computeColsWidth(this.table, table.rightFrozenColCount, table.colCount - 1, true);\n }\n // body\n computeColsWidth(table, this.proxy.colStart, this.proxy.colEnd, true);\n }\n }\n\n recalculateRowHeights() {\n const table = this.table;\n table.internalProps.useOneRowHeightFillAll = false;\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n computeRowsHeight(this.table, 0, this.table.rowCount - 1, true, true);\n } else {\n // top frozen\n if (table.frozenRowCount > 0) {\n computeRowsHeight(this.table, 0, table.frozenRowCount - 1, true, true);\n }\n // bottom frozen\n if (table.bottomFrozenRowCount > 0) {\n computeRowsHeight(this.table, table.bottomFrozenRowCount, table.rowCount - 1, true, true);\n }\n computeRowsHeight(table, this.proxy.rowStart, this.proxy.rowEnd, true, true);\n }\n }\n\n resize() {\n // reset proxy config\n this.proxy.resize();\n\n if (this.table.widthMode === 'adaptive' || this.table.autoFillWidth) {\n if (this.table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.recalculateColWidths();\n } else {\n this.dealWidthMode();\n }\n }\n\n if (this.table.heightMode === 'adaptive') {\n // perf to be optimized:\n // reason to use recalculateRowHeights();\n // 1. error amplification(误差放大) in dealHeightMode when multiple resize\n // 2. width update caused height update dose not have enlarge/reduce number,\n // will cause scale error in dealHeightMode()\n if (this.table.internalProps._heightResizedRowMap.size === 0) {\n this.recalculateRowHeights();\n } else {\n this.dealHeightMode();\n }\n // this.dealHeightMode();\n } else if (this.table.autoFillHeight) {\n this.dealHeightMode();\n }\n\n // this.dealWidthMode();\n // this.dealHeightMode();\n this.resetFrozen();\n // this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n if (\n this.table.widthMode === 'adaptive' ||\n this.table.heightMode === 'adaptive' ||\n this.table.autoFillWidth ||\n this.table.autoFillHeight\n ) {\n this.updateChartSizeForResizeColWidth(-1);\n }\n\n this.proxy.progress();\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: Math.min(\n this.table.tableNoFrameWidth,\n Math.max(\n this.colHeaderGroup.attribute.width,\n this.bodyGroup.attribute.width,\n this.bottomFrozenGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.cornerHeaderGroup.attribute.width,\n this.rowHeaderGroup.attribute.width,\n this.leftBottomCornerGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.rightTopCornerGroup.attribute.width,\n this.rightFrozenGroup.attribute.width,\n this.rightBottomCornerGroup.attribute.width,\n 0\n )\n ),\n height: Math.min(\n this.table.tableNoFrameHeight,\n Math.max(\n this.colHeaderGroup.attribute.height,\n this.cornerHeaderGroup.attribute.height,\n this.rightTopCornerGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.rowHeaderGroup.attribute.height,\n this.bodyGroup.attribute.height,\n this.rightFrozenGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.leftBottomCornerGroup.attribute.height,\n this.bottomFrozenGroup.attribute.height,\n this.rightBottomCornerGroup.attribute.height,\n 0\n )\n )\n } as any);\n\n if (this.tableGroup.border) {\n const rectAttributes = this.tableGroup.border?.attribute;\n let borderTop;\n let borderRight;\n let borderBottom;\n let borderLeft;\n if ((rectAttributes as any)?.strokeArrayWidth) {\n borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n } else {\n borderTop = (rectAttributes?.lineWidth as number) ?? 0;\n borderRight = (rectAttributes?.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes?.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes?.lineWidth as number) ?? 0;\n }\n if (this.tableGroup.border.type === 'rect') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n }\n } else if (this.tableGroup.border.type === 'group') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: 0,\n y: 0,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: this.tableGroup.attribute.width,\n height: this.tableGroup.attribute.height\n });\n }\n }\n }\n\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute(\n 'y',\n this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight()\n );\n this.leftBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight(),\n width: this.table.getFrozenColsWidth()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight()\n });\n }\n\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('x', this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth());\n this.rightTopCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth(),\n height: this.table.getFrozenRowsHeight()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth()\n });\n }\n }\n\n updateRowHeight(row: number, detaY: number, skipTableHeightMap?: boolean) {\n detaY = Math.round(detaY);\n updateRowHeight(this, row, detaY, skipTableHeightMap);\n this.updateContainerHeight(row, detaY);\n }\n updateRowsHeight(rows: number[], detaYs: number[], skipTableHeightMap?: boolean) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) {\n const detaY = detaYs[i];\n updateRowHeight(this, row, Math.round(detaY), skipTableHeightMap);\n this._updateContainerHeight(row, detaY);\n }\n }\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n _updateContainerHeight(row: number, detaY: number) {\n if (row < this.table.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaY(detaY);\n } else if (row >= this.table.rowCount - this.table.bottomFrozenRowCount) {\n this.leftBottomCornerGroup.setDeltaHeight(detaY);\n this.bottomFrozenGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightBottomCornerGroup.setDeltaHeight(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaHeight(detaY);\n }\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n this._updateContainerHeight(row, detaY);\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n this.table._clearColRangeWidthsMap(col);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n if (oldHeight === height) {\n return;\n }\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) || // body\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1) || // bottom\n row < this.table.frozenRowCount\n ) {\n this.updateRowHeight(row, height - oldHeight);\n }\n this.table._clearRowRangeHeightsMap(row);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.table.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n this.table.scenegraph.proxy.setY(-y, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n // correct y, avoid scroll out of range\n const firstBodyCell = this.bodyGroup.firstChild?.firstChild as Group;\n const lastBodyCell = this.bodyGroup.firstChild?.lastChild as Group;\n if (\n y === 0 &&\n firstBodyCell &&\n firstBodyCell.row === this.table.frozenRowCount &&\n firstBodyCell.attribute.y + y < 0\n ) {\n y = -firstBodyCell.attribute.y;\n } else if (\n lastBodyCell &&\n this.table.tableNoFrameHeight < this.table.getAllRowsHeight() &&\n lastBodyCell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n lastBodyCell.attribute.y + lastBodyCell.attribute.height + y <\n this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()\n ) {\n y =\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() -\n lastBodyCell.attribute.y -\n lastBodyCell.attribute.height;\n }\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height + y);\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('y', this.rightTopCornerGroup.attribute.height + y);\n }\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setBodyAndColHeaderX(x: number) {\n // correct x, avoid scroll out of range\n const firstBodyCol = this.bodyGroup.firstChild as Group;\n const lastBodyCol = this.bodyGroup.lastChild as Group;\n if (x === 0 && firstBodyCol && firstBodyCol.col === this.table.frozenColCount && firstBodyCol.attribute.x + x < 0) {\n x = -firstBodyCol.attribute.x;\n } else if (\n lastBodyCol &&\n this.table.tableNoFrameWidth < this.table.getAllColsWidth() &&\n lastBodyCol.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n lastBodyCol.attribute.x + lastBodyCol.attribute.width + x <\n this.table.tableNoFrameWidth - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth()\n ) {\n x =\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() -\n lastBodyCol.attribute.x -\n lastBodyCol.attribute.width;\n }\n if (this.table.getFrozenColsWidth() + x === this.bodyGroup.attribute.x) {\n return;\n }\n this.bodyGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n this.colHeaderGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // this.dealWidthMode();\n // this.dealHeightMode();\n // 处理冻结\n // this.resetFrozen();\n // this.dealFrozen();\n\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else {\n this.component.setFrozenColumnShadow(-1);\n }\n this.table.stateManager.checkFrozen();\n // this.updateContainerAttrWidthAndX();\n this.updateContainer();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n\n // 处理单元格内容需要textStick的情况 入股这里不处理 只依赖异步proxy progress中处理 会有闪烁问题\n\n handleTextStick(this.table);\n\n // // temp add rect\n // const rect = createRect({\n // x: 200,\n // y: 200,\n // width: 100,\n // height: 100,\n // fill: 'red',\n // stroke: 'blue',\n // lineWidth: 1\n // });\n // this.tableGroup.addChild(rect);\n // deal with animation\n\n if (this.table.options.animationAppear) {\n dealWithAnimationAppear(this.table);\n }\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n const colWidth = table.getColWidth(col);\n actualHeaderWidth += colWidth;\n }\n }\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n const startCol = table.rowHeaderLevelCount;\n const endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理高度模式\n * @return {*}\n */\n dealHeightMode() {\n const table = this.table;\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n const totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = totalDrawHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n\n this.setRowHeight(row, rowHeight);\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n // table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (\n (this._dealAutoFillHeightOriginRowsHeight ?? actualHeight) < canvasHeight &&\n actualHeight - actualHeaderHeight > 0\n ) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = canvasHeight - actualHeaderHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n this.setRowHeight(row, rowHeight);\n }\n }\n }\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as Text;\n const text = cellGroup.getChildByName('text') as Text;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row'\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange\n ) {\n moveHeaderPosition(updateColStart, updateColEnd, updateRowStart, updateRowEnd, moveType, this.table);\n }\n\n updateContainerAttrWidthAndX() {\n // 更新各列x&col\n const cornerX = updateContainerChildrenX(this.cornerHeaderGroup, 0);\n const rowHeaderX = updateContainerChildrenX(this.rowHeaderGroup, 0);\n const colHeaderX =\n this.colHeaderGroup.hasChildNodes() && this.colHeaderGroup.firstChild\n ? updateContainerChildrenX(\n this.colHeaderGroup,\n (this.colHeaderGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.colHeaderGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const bodyX =\n this.bodyGroup.hasChildNodes() && this.bodyGroup.firstChild\n ? updateContainerChildrenX(\n this.bodyGroup,\n (this.bodyGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bodyGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const rightX = updateContainerChildrenX(\n this.rightFrozenGroup.childrenCount > 0 ? this.rightFrozenGroup : this.rightTopCornerGroup,\n 0\n );\n\n this.bottomFrozenGroup.hasChildNodes() &&\n this.bottomFrozenGroup.firstChild &&\n updateContainerChildrenX(\n this.bottomFrozenGroup,\n (this.bottomFrozenGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bottomFrozenGroup.firstChild as any).col - 1)\n : 0\n );\n updateContainerChildrenX(this.leftBottomCornerGroup, 0);\n updateContainerChildrenX(this.rightTopCornerGroup, 0);\n updateContainerChildrenX(this.rightBottomCornerGroup, 0);\n\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.leftBottomCornerGroup.setDeltaWidth(cornerX - this.leftBottomCornerGroup.attribute.width);\n //TODO 可能有影响\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n // this.rightFrozenGroup.setDeltaWidth(colHeaderX - this.table.getRightFrozenColsWidth());\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setDeltaWidth(colHeaderX - this.bottomFrozenGroup.attribute.width);\n this.rightFrozenGroup.setDeltaWidth(rightX - this.rightFrozenGroup.attribute.width);\n this.rightTopCornerGroup.setDeltaWidth(rightX - this.rightTopCornerGroup.attribute.width);\n this.rightBottomCornerGroup.setDeltaWidth(rightX - this.rightBottomCornerGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth());\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n }\n\n updateContainer(async: boolean = false) {\n if (async) {\n if (!this._needUpdateContainer) {\n this._needUpdateContainer = true;\n setTimeout(() => {\n this.updateContainerSync();\n }, 0);\n }\n } else {\n this._needUpdateContainer = true;\n this.updateContainerSync();\n }\n }\n\n updateContainerSync() {\n if (!this._needUpdateContainer) {\n return;\n }\n this._needUpdateContainer = false;\n this.updateContainerAttrWidthAndX();\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateDomContainer();\n\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const isVtableMerge = this.table.getCellRawRecord(col, row)?.vtableMerge;\n const type = isVtableMerge\n ? 'text'\n : this.table.isHeader(col, row)\n ? (this.table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot && !this.table.internalProps.transpose;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.internalProps.transpose\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group\n ): { col: number; row: number; x?: number; rightFrozen?: boolean } {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n let cell: { col: number; row: number; x?: number; rightFrozen?: boolean };\n if (!cellGroup) {\n const drawRange = this.table.getDrawRange();\n if (abstractY >= drawRange.top && abstractY <= drawRange.bottom) {\n // to do: 处理最后一列外调整列宽\n cell = this.table.getCellAtRelativePosition(abstractX - offset, abstractY);\n if (cell.col === this.table.colCount - 1) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n if (!cellGroup.stage) {\n return { col: -1, row: -1 };\n }\n\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n cell = { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n } else if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n cell = { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n if (\n cell &&\n this.table.rightFrozenColCount > 0 &&\n // cell.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n cell.col >= this.table.colCount - this.table.rightFrozenColCount - 1 &&\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() +\n this.table.scrollLeft <\n this.bodyGroup.attribute.width\n ) {\n // 有右侧冻结列,并且横向没有滚动到最右侧时,右侧冻结列左侧调整对只对右侧冻结列生效\n cell.col = cell.col + 1;\n cell.rightFrozen = true;\n }\n\n if (cell) {\n return cell;\n }\n // }\n return { col: -1, row: -1 };\n }\n\n getResizeRowAt(abstractX: number, abstractY: number, cellGroup?: Group) {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n let cell: { col: number; row: number; y?: number; bottomFrozen?: boolean };\n if (abstractY < cellGroup.globalAABBBounds.y1 + offset) {\n cell = { col: cellGroup.col, row: cellGroup.row - 1, y: cellGroup.globalAABBBounds.y1 };\n } else if (cellGroup.globalAABBBounds.y2 - offset < abstractY) {\n cell = { col: cellGroup.col, row: cellGroup.row, y: cellGroup.globalAABBBounds.y2 };\n }\n if (\n cell &&\n this.table.bottomFrozenRowCount > 0 &&\n // cell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n cell.row >= this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() +\n this.table.scrollTop <\n this.bodyGroup.attribute.height\n ) {\n // 有下侧冻结行,并且纵向没有滚动到最下侧时,下侧冻结行左侧调整对只对下侧冻结行生效\n cell.row = cell.row + 1;\n cell.bottomFrozen = true;\n }\n if (cell) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n dealWidthRightFrozen(rightFrozenColCount: number) {\n if (this.clear) {\n this.table.internalProps.rightFrozenColCount = rightFrozenColCount;\n return;\n }\n dealRightFrozen(rightFrozenColCount, this);\n }\n dealWidthBottomFrozen(bottomFrozenRowCount: number) {\n if (this.clear) {\n this.table.internalProps.bottomFrozenRowCount = bottomFrozenRowCount;\n return;\n }\n dealBottomFrozen(bottomFrozenRowCount, this);\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n\n updateCornerRadius(this.table);\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if ((this.table as any).transpose) {\n this.proxy.sortCellHorizontal();\n } else {\n this.proxy.sortCellVertical();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as Text | RichText;\n\n if (text && text.type === 'text') {\n if ((text.attribute as any).moreThanMaxCharacters) {\n return this.table.getCellValue(col, row);\n }\n const textAttributeStr = isArray(text.attribute.text)\n ? text.attribute.text.join('')\n : (text.attribute.text as string);\n let cacheStr = '';\n if (isString(text.cache.clipedText)) {\n cacheStr = text.cache.clipedText;\n } else {\n (text.cache as ITextCache).layoutData?.lines?.forEach((line: any) => {\n cacheStr += line.str;\n });\n }\n if (cacheStr !== textAttributeStr) {\n // return textAttributeStr;\n return this.table.getCellValue(col, row);\n }\n } else if (text && text.type === 'richtext') {\n const richtext = text;\n if (\n richtext.attribute.ellipsis &&\n richtext._frameCache &&\n richtext.attribute.height < richtext._frameCache.actualHeight\n ) {\n const textConfig = richtext.attribute.textConfig.find((item: any) => item.text);\n // return (textConfig as any).text as string;\n return this.table.getCellValue(col, row);\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number, forceFastUpdate: boolean = false) {\n if (this.clear) {\n return undefined;\n }\n return updateCell(col, row, this.table, undefined, undefined, forceFastUpdate);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[] = [],\n recalculateColWidths: boolean = true,\n skipUpdateProxy?: boolean\n ) {\n this.table.internalProps.layoutMap.clearCellRangeMap();\n this.table.internalProps.useOneRowHeightFillAll = false;\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n //这个值是后续为了autoFillHeight判断逻辑中用到的 判断是否更新前是未填满的情况\n const isNotFillHeight =\n this.table.getAllRowsHeight() -\n [...addRows, ...updateRows].reduce((tolHeight, rowNumber) => {\n return tolHeight + this.table.getRowHeight(rowNumber);\n }, 0) <=\n this.table.tableNoFrameHeight;\n\n // add or move rows\n updateRow(removeCells, addCells, updateCells, this.table, skipUpdateProxy);\n\n // update column width and row height\n\n recalculateColWidths && this.recalculateColWidths();\n\n // this.recalculateRowHeights();\n\n if (\n this.table.heightMode === 'adaptive' ||\n (this.table.autoFillHeight && (this.table.getAllRowsHeight() <= this.table.tableNoFrameHeight || isNotFillHeight))\n ) {\n this.table.scenegraph.recalculateRowHeights();\n } else if (this.table.isAutoRowHeight()) {\n // if (updateCells.length > 0) {\n // this.table.scenegraph.recalculateRowHeights();\n // }\n for (let i = 0; i < updateRows.length; i++) {\n const row = updateRows[i];\n const oldHeight = this.table.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.table.colCount - 1, this.table);\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) ||\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1)\n ) {\n this.table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n }\n }\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n updateCol(removeCells: CellAddress[], addCells: CellAddress[], updateCells: CellAddress[] = []) {\n // add or move rows\n updateCol(removeCells, addCells, updateCells, this.table);\n\n // update column width and row height\n this.recalculateColWidths();\n\n this.recalculateRowHeights();\n\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n getColumnGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // row header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // right frozen\n return this.table.getColsWidth(this.table.colCount - this.table.bottomFrozenRowCount, col - 1);\n }\n return 0;\n }\n\n getCellGroupY(row: number) {\n if (row < this.table.frozenRowCount) {\n // column header\n return this.table.getRowsHeight(0, row - 1);\n } else if (row < this.table.rowCount - this.table.bottomFrozenRowCount) {\n // body\n return this.table.getRowsHeight(this.table.frozenRowCount, row - 1);\n } else if (row < this.table.rowCount) {\n // bottom frozen\n return this.table.getRowsHeight(this.table.rowCount - this.table.bottomFrozenRowCount, row - 1);\n }\n return 0;\n }\n getCellGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // column header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // bottom frozen\n return this.table.getColsWidth(this.table.colCount - this.table.rightFrozenColCount, col - 1);\n }\n return 0;\n }\n // /** 更新场景树某个单元格的值 */\n // updateCellValue(col: number, row: number) {\n // updateCell(col, row, this.table);\n // }\n updateDomContainer() {\n updateReactContainer(this.table);\n }\n\n setLoadingHierarchyState(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n const iconGraphic = cellGroup.getChildByName('collapse', true);\n if (iconGraphic) {\n const regedIcons = registerIcons.get();\n const loadingIcon = regedIcons[InternalIconName.loadingIconName];\n\n dealWithIcon(loadingIcon, iconGraphic, col, row);\n }\n }\n\n temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute) {\n temporarilyUpdateSelectRectStyle(rectAttribute, this);\n }\n\n resetSelectRectStyle() {\n this.recreateAllSelectRangeComponents();\n }\n}\n","import { cellInRange, rangeIntersected } from '../../tools/helper';\nimport type { CellAddress, CellRange, HighlightScope } from '../../ts-types';\n\nexport function checkColInlineInSelect(col: number, cellRanges: CellRange[]): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const currentRangeMinCol = Math.min(cellRanges[i].start.col, cellRanges[i].end.col);\n const currentRangeMaxCol = Math.max(cellRanges[i].start.col, cellRanges[i].end.col);\n if (col >= currentRangeMinCol && col <= currentRangeMaxCol) {\n // 不更新在select范围内的单元格\n return true;\n }\n }\n return false;\n}\n\nexport function checkRowInlineInSelect(row: number, cellRanges: CellRange[]): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const currentRangeMinRow = Math.min(cellRanges[i].start.row, cellRanges[i].end.row);\n const currentRangeMaxRow = Math.max(cellRanges[i].start.row, cellRanges[i].end.row);\n if (row >= currentRangeMinRow && row <= currentRangeMaxRow) {\n // 不更新在select范围内的单元格\n return true;\n }\n }\n return false;\n}\n/**\n * @description: 判断单元格是否在select区域中\n * @param {number} col\n * @param {number} row\n * @param {CellAddress} selectCellPosStart\n * @param {CellAddress} selectCellPosEnd\n * @param {HighlightScope} selectMode\n * @return {*}\n */\nexport function checkCellInSelect(\n col: number,\n row: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const _in = cellInRange(range, col, row);\n if (_in) {\n return true;\n }\n }\n // if (selectMode === HighlightScope.single) {\n // if (cellInRange(cellRange, col, row)) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.column) {\n // if (col >= cellRange.start.col && col <= cellRange.end.col) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.row) {\n // if (row >= cellRange.start.row && row <= cellRange.end.row) {\n // return true;\n // }\n // } else if (selectMode === HighlightScope.cross) {\n // if (col >= cellRange.start.col && col <= cellRange.end.col) {\n // return true;\n // } else if (row >= cellRange.start.row && row <= cellRange.end.row) {\n // return true;\n // }\n // }\n\n return false;\n}\n\n/**\n * @description: 判断单元格范围是否与select区域有交集\n * @param {CellAddress} cellPosStart\n * @param {CellAddress} cellPosEnd\n * @param {CellAddress} selectCellPosStart\n * @param {CellAddress} selectCellPosEnd\n * @param {HighlightScope} selectMode\n * @return {*}\n */\nexport function checkMultiCellInSelect(\n cellPosStart: CellAddress,\n cellPosEnd: CellAddress,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n selectRangs: CellRange[],\n selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < selectRangs.length; i++) {\n const range = selectRangs[i];\n const inSelect = rangeIntersected(range, { start: cellPosStart, end: cellPosEnd });\n if (inSelect) {\n return true;\n }\n }\n\n // for (let col = cellPosStart.col; col <= cellPosEnd.col; col++) {\n // for (let row = cellPosStart.row; row <= cellPosEnd.row; row++) {\n // const inSelect = checkCellInSelect(\n // col,\n // row,\n // selectCellPosStart,\n // selectCellPosEnd,\n // selectMode\n // );\n // if (inSelect) {\n // return true;\n // }\n // }\n // }\n\n return false;\n}\n\nexport function checkRowInSelect(\n row: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const _in = row >= minRow && row <= maxRow;\n if (_in) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkColInSelect(\n col: number,\n // selectCellPosStart: CellAddress,\n // selectCellPosEnd: CellAddress,\n cellRanges: CellRange[]\n // selectMode: HighlightScope\n): boolean {\n for (let i = 0; i < cellRanges.length; i++) {\n const range = cellRanges[i];\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n const _in = col >= minCol && col <= maxCol;\n if (_in) {\n return true;\n }\n }\n return false;\n}\n","import { isValid } from '@visactor/vutils';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\nimport { getCellMergeRange } from '../../tools/merge-range';\n\nexport function updateCell(scenegraph: Scenegraph, col: number, row: number) {\n const cellGroup = scenegraph.highPerformanceGetCell(col, row);\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n const { colStart, colEnd, rowStart, rowEnd } = getCellMergeRange(cellGroup, scenegraph);\n for (let col = colStart; col <= colEnd; col++) {\n for (let row = rowStart; row <= rowEnd; row++) {\n const mergeCell = scenegraph.highPerformanceGetCell(col, row);\n if (mergeCell.role !== 'cell') {\n continue;\n }\n mergeCell.addUpdateBoundTag();\n }\n }\n } else {\n cellGroup.addUpdateBoundTag();\n }\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearColHover(\n scenegraph: Scenegraph,\n col: number,\n rowOrigin: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n updateCell(scenegraph, col, row);\n }\n // 更新body\n const cellGroup = scenegraph.getColGroup(col);\n cellGroup?.addUpdateBoundTag();\n\n return true;\n}\n\nexport function updateColHover(\n scenegraph: Scenegraph,\n col: number,\n rowOrigin: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope,\n singleStyle: boolean\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let row = 0; row < table.columnHeaderLevelCount; row++) {\n updateCell(scenegraph, col, row);\n }\n // 更新body\n const cellGroup = scenegraph.getColGroup(col);\n cellGroup?.addUpdateBoundTag();\n\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearRowHover(\n scenegraph: Scenegraph,\n colOrigin: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let col = 0; col < table.colCount; col++) {\n updateCell(scenegraph, col, row);\n }\n return true;\n}\n\nexport function updateRowHover(\n scenegraph: Scenegraph,\n colOrigin: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope,\n singleStyle: boolean\n): boolean {\n const table = scenegraph.table;\n // 更新表头(无group theme)\n for (let col = 0; col < table.colCount; col++) {\n updateCell(scenegraph, col, row);\n }\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange, HighlightScope } from '../../ts-types';\nimport { updateCell } from './update-cell';\n\nexport function clearSingleHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n updateCell(scenegraph, col, row);\n return true;\n}\n\nexport function updateSingleHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectCellPosStart: CellPosition,\n // selectCellPosEnd: CellPosition,\n selectRanges: CellRange[],\n selectMode: HighlightScope\n): boolean {\n updateCell(scenegraph, col, row);\n return true;\n}\n","import type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { CellRange } from '../../ts-types';\nimport { HighlightScope } from '../../ts-types';\nimport { CellPosition } from '../../ts-types';\n// import { HoverMode, SelectMode, StateManager } from '../state';\nimport type { StateManager } from '../state';\nimport { clearColHover, updateColHover } from './col';\nimport { clearRowHover, updateRowHover } from './row';\nimport { clearSingleHover, updateSingleHover } from './single';\n\n/**\n * @description: 更新hover位置\n * @param {StateManager} state\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function updateHoverPosition(state: StateManager, col: number, row: number) {\n const { table } = state;\n const { scenegraph } = table;\n const { highlightScope, singleStyle, disableHeader, cellPos, cellPosContainHeader } = state.hover;\n const prevHoverCellCol = cellPos.col;\n const prevHoverCellRow = cellPos.row;\n\n if (\n highlightScope === HighlightScope.none ||\n (disableHeader && (cellPosContainHeader.col !== col || cellPosContainHeader.row !== row))\n ) {\n // disableHeader状态,更新hover图标状态依赖cellPosContainHeader\n const prevHoverCellCol = cellPosContainHeader.col;\n const prevHoverCellRow = cellPosContainHeader.row;\n scenegraph.hideHoverIcon(prevHoverCellCol, prevHoverCellRow);\n scenegraph.showHoverIcon(col, row);\n cellPosContainHeader.col = col;\n cellPosContainHeader.row = row;\n }\n\n if ((disableHeader && table.isHeader(col, row)) || highlightScope === HighlightScope.none) {\n col = -1;\n row = -1;\n }\n\n if (prevHoverCellCol === col && prevHoverCellRow === row) {\n return;\n }\n // 将hover单元格的图表实例激活 并将上一个失去焦点\n scenegraph.deactivateChart(prevHoverCellCol, prevHoverCellRow);\n scenegraph.activateChart(col, row);\n\n let updateScenegraph = false;\n const {\n // cellPosStart: selectStart,\n // cellPosEnd: selectEnd,\n ranges,\n highlightScope: selectMode\n } = state.select;\n // 移出表格/移入表头清空hover\n if (prevHoverCellCol !== -1 && prevHoverCellRow !== -1) {\n updateScenegraph = clearHover(\n scenegraph,\n prevHoverCellCol,\n prevHoverCellRow,\n // selectStart,\n // selectEnd,\n ranges,\n singleStyle,\n highlightScope,\n selectMode\n );\n\n if (!disableHeader) {\n scenegraph.hideHoverIcon(prevHoverCellCol, prevHoverCellRow);\n }\n }\n\n if (col === -1 || row === -1) {\n cellPos.col = -1;\n cellPos.row = -1;\n if (updateScenegraph && (prevHoverCellCol !== col || prevHoverCellRow !== row)) {\n state.table.scenegraph.updateNextFrame();\n }\n return;\n }\n\n // 更新hover单元格状态\n if (highlightScope === HighlightScope.single) {\n updateScenegraph = updateSingleHover(scenegraph, col, row, ranges, selectMode) ? true : updateScenegraph;\n } else if (highlightScope === HighlightScope.row) {\n updateScenegraph = updateRowHover(\n scenegraph,\n col,\n row,\n // selectStart,\n // selectEnd,\n ranges,\n selectMode,\n singleStyle\n )\n ? true\n : updateScenegraph;\n } else if (highlightScope === HighlightScope.column) {\n updateScenegraph = updateColHover(\n scenegraph,\n col,\n row,\n // selectStart,\n // selectEnd,\n ranges,\n selectMode,\n singleStyle\n )\n ? true\n : updateScenegraph;\n } else if (highlightScope === HighlightScope.cross) {\n updateScenegraph = updateRowHover(scenegraph, col, row, ranges, selectMode, singleStyle) ? true : updateScenegraph;\n updateScenegraph = updateColHover(scenegraph, col, row, ranges, selectMode, singleStyle) ? true : updateScenegraph;\n }\n\n // if (!disableHeader) {\n // scenegraph.showHoverIcon(col, row);\n // }\n if (highlightScope !== HighlightScope.none && !disableHeader) {\n scenegraph.showHoverIcon(col, row);\n }\n\n cellPos.col = col;\n cellPos.row = row;\n if (updateScenegraph) {\n state.table.scenegraph.updateNextFrame();\n }\n}\n\n/**\n * @description: 清空hover状态\n * @param {StateManager} state\n * @return {*}\n */\nfunction clearHover(\n scenegraph: Scenegraph,\n col: number,\n row: number,\n // selectStart: CellPosition,\n // selectEnd: CellPosition,\n selectRanges: CellRange[],\n singleStyle: boolean,\n mode: HighlightScope,\n selectMode: HighlightScope\n) {\n let updateScenegraph = false;\n if (mode === HighlightScope.single) {\n updateScenegraph = clearSingleHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.row) {\n updateScenegraph = clearRowHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.column) {\n updateScenegraph = clearColHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n } else if (mode === HighlightScope.cross) {\n updateScenegraph = clearRowHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n updateScenegraph = clearColHover(scenegraph, col, row, selectRanges, selectMode) ? true : updateScenegraph;\n }\n\n return updateScenegraph;\n}\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function dealFreeze(col: number, row: number, table: BaseTableAPI) {\n // table.setFrozenColCount(col + 1);\n if (table.frozenColCount > 0) {\n if (col !== table.frozenColCount - 1) {\n table.setFrozenColCount(col + 1);\n } else {\n table.setFrozenColCount(0);\n }\n } else {\n table.setFrozenColCount(col + 1);\n }\n\n // table.stateManager.frozen.col = table.frozenColCount - 1;\n // table.stateManager.frozen.row = row;\n // if (table.stateManager.checkFrozen()) {\n // table.stateManager.setFrozenCol(table.frozenColCount - 1);\n // } else {\n // table.scenegraph.updateFrozenIcon(0, table.colCount - 1);\n // }\n}\n","import { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { defaultOrderFn } from '../../tools/util';\nimport type { ColumnDefine, HeaderData, HeaderDefine, ListTableAPI, SortState } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\n/**\n * @description: 执行sort\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @return {*}\n */\nexport function dealSort(col: number, row: number, table: ListTableAPI, event: Event) {\n //是击中的sort按钮才进行排序\n let range1 = null;\n let tableState: SortState;\n let isTargetCell = false;\n //找出当前表头是否在sortState排序规则中\n if (Array.isArray(table.sortState)) {\n for (let i = 0; i < table.sortState.length; i++) {\n tableState = table.sortState[i];\n if (tableState) {\n range1 = table._getHeaderCellBySortState(tableState);\n }\n range1 && (isTargetCell = isTarget(col, row, range1.col, range1.row, table));\n if (isTargetCell) {\n break;\n }\n }\n } else {\n tableState = table.sortState;\n if (tableState) {\n range1 = table._getHeaderCellBySortState(tableState);\n }\n range1 && (isTargetCell = isTarget(col, row, range1.col, range1.row, table));\n }\n\n const headerC = table.getHeaderDefine(col, row) as ColumnDefine;\n //当前排序规则是该表头field 且 表头设置了sort规则 需要转变sort的状态\n if (tableState && isTargetCell && headerC?.sort) {\n tableState.order = tableState.order === 'asc' ? 'desc' : tableState.order === 'desc' ? 'normal' : 'asc';\n } else if (headerC?.sort) {\n //如果当前表头设置了sort 则 转变sort的状态\n tableState = {\n field: table.getHeaderField(col, row),\n order: 'asc'\n };\n } else if (isTargetCell && headerC?.showSort) {\n //当前排序规则是该表头field 且仅为显示showSort无sort 什么也不做\n } else {\n tableState = {\n field: table.getHeaderField(col, row),\n order: 'normal'\n };\n }\n (tableState as SortState & { event: Event }).event = event;\n // 如果用户监听SORT_CLICK事件的回调函数返回false 则不执行内部排序逻辑\n const sortEventReturns = table.fireListeners(TABLE_EVENT_TYPE.SORT_CLICK, tableState as SortState & { event: Event });\n if (sortEventReturns.includes(false)) {\n return;\n }\n let isArraySortState = false;\n let sortState: SortState | SortState[] = table.internalProps.sortState\n ? Array.isArray(table.internalProps.sortState) && (isArraySortState = true)\n ? (table.internalProps.sortState as SortState[])\n : [table.internalProps.sortState as SortState]\n : [];\n if (Array.isArray(sortState)) {\n const index = (sortState as SortState[]).findIndex(item => item.field === tableState.field);\n if (index >= 0) {\n sortState[index] = tableState;\n } else {\n sortState.push(tableState);\n }\n }\n sortState = (sortState as SortState[]).filter(item => item.order !== 'normal');\n sortState = table.internalProps.multipleSort && (isArraySortState = true) ? sortState : sortState.splice(-1);\n sortState = isArraySortState && sortState.length ? (sortState as SortState[]) : (sortState[0] as SortState);\n table.internalProps.sortState = sortState; // 目前不支持多级排序 所以这里 直接赋值为单个sortState TODO优化(如果支持多级排序的话)\n table.stateManager.setSortState(sortState);\n if (headerC?.sort) {\n executeSort(sortState, table, headerC);\n }\n\n // clear cell range cache\n table.internalProps.useOneRowHeightFillAll = false;\n table.internalProps.layoutMap.clearCellRangeMap();\n\n table.scenegraph.sortCell();\n // 排序后,清除选中效果\n const isHasSelected = !!table.stateManager.select.ranges?.length;\n table.stateManager.updateSelectPos(-1, -1);\n table.stateManager.endSelectCells(true, isHasSelected);\n}\n\nfunction executeSort(newState: SortState | SortState[], table: BaseTableAPI, headerDefine: HeaderDefine): void {\n newState = Array.isArray(newState) || !newState ? newState : [newState];\n table.dataSource.sort(\n ((newState || []) as Array).map(item => {\n const hd = table.internalProps.layoutMap.headerObjects.find((col: HeaderData) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: typeof hd?.define?.sort === 'function' ? hd?.define?.sort : defaultOrderFn\n };\n })\n );\n}\n\nfunction isTarget(col: number, row: number, range1Col: number, range1Row: number, table: BaseTableAPI): boolean {\n return table._getLayoutCellId(col, row) === table._getLayoutCellId(range1Col, range1Row);\n}\n","import type { ListTable } from '../..';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\nimport type { SelectAllOnCtrlAOption } from '../../ts-types';\nimport { InteractionState } from '../../ts-types';\nimport type { StateManager } from '../state';\n/**\n * @description: 更新select位置\n * @param {StateManager} state\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\nexport function updateSelectPosition(\n state: StateManager,\n col: number,\n row: number,\n isShift: boolean,\n isCtrl: boolean,\n isSelectAll: boolean,\n makeSelectCellVisible: boolean = true,\n skipBodyMerge: boolean = false\n // forceSelect: boolean = false\n) {\n const { table, interactionState } = state;\n const { scenegraph } = table;\n const { highlightScope, disableHeader, cellPos, disableCtrlMultiSelect } = state.select;\n // const disableSelect = table.options?.select?.disableSelect;\n // const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n // const { highlightScope, disableHeader, cellPos } = state.select;\n // const disableSelect = table.options?.select?.disableSelect;\n // const cellDisable = typeof disableSelect === 'function' ? disableSelect(col, row, table) : disableSelect;\n\n // if (\n // ((disableHeader && table.isHeader(col, row)) || highlightScope === 'none' || cellDisable) &&\n // forceSelect === false\n // ) {\n if (col !== -1 && row !== -1 && makeSelectCellVisible) {\n table._makeVisibleCell(col, row);\n }\n // col = -1;\n // row = -1;\n // }\n\n /** 完整显示选中单元格 自动滚动效果*/\n if (col !== -1 && row !== -1 && makeSelectCellVisible) {\n if (interactionState === InteractionState.grabing && state.select.ranges.length > 0) {\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (col > currentRange.start.col && col > currentRange.end.col) {\n //向右扩展\n table._makeVisibleCell(col + 1, row);\n }\n if (row > currentRange.start.row && row > currentRange.end.row) {\n //向右扩展\n table._makeVisibleCell(col, row + 1);\n }\n if (col < currentRange.start.col && col < currentRange.end.col) {\n //向右扩展\n table._makeVisibleCell(col - 1, row);\n }\n if (row < currentRange.start.row && row < currentRange.end.row) {\n //向右扩展\n table._makeVisibleCell(col, row - 1);\n }\n } else {\n table._makeVisibleCell(col, row);\n }\n }\n if (isSelectAll) {\n state.select.ranges = [];\n scenegraph.deleteAllSelectBorder();\n let _startCol = 0;\n let _startRow = 0;\n const { disableHeaderSelect, disableRowSeriesNumberSelect } =\n (table.options.keyboardOptions?.selectAllOnCtrlA as SelectAllOnCtrlAOption) || {};\n\n // 表头选中\n if (disableHeaderSelect) {\n _startCol = table.rowHeaderLevelCount;\n _startRow = table.columnHeaderLevelCount;\n }\n // 行号列选中\n if (\n (disableRowSeriesNumberSelect || (disableHeaderSelect && (table as ListTable).transpose)) &&\n table.options.rowSeriesNumber\n ) {\n _startCol += 1;\n }\n\n state.select.ranges.push({\n start: { col: _startCol, row: _startRow },\n end: { col: table.colCount - 1, row: table.rowCount - 1 }\n });\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n scenegraph.updateCellSelectBorder(currentRange, false);\n } else if (cellPos.col !== -1 && cellPos.row !== -1 && (col === -1 || row === -1)) {\n // 输入-1清空选中状态\n // clearMultiSelect(scenegraph, ranges, highlightScope, singleStyle);\n cellPos.col = -1;\n cellPos.row = -1;\n state.select.ranges = [];\n // 隐藏select border\n scenegraph.deleteAllSelectBorder();\n } else if (\n interactionState === InteractionState.default &&\n !table.eventManager.isDraging &&\n !table.stateManager.isResizeCol()\n ) {\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (isShift && currentRange) {\n if (!isCtrl || disableCtrlMultiSelect) {\n cellPos.col = col;\n cellPos.row = row;\n }\n if (state.select.headerSelectMode !== 'cell' && table.isColumnHeader(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = Math.max(currentRange.start.col, currentRange.end.col, col);\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = table.rowCount - 1;\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: startCol, row: table.columnHeaderLevelCount };\n currentRange.end = { col: endCol, row: table.rowCount - 1 };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isRowHeader(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = table.colCount - 1;\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = Math.max(currentRange.start.row, currentRange.end.row, row);\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: table.leftRowSeriesNumberCount + table.rowHeaderLevelCount, row: startRow };\n currentRange.end = { col: table.colCount - 1, row: endRow };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isSeriesNumberInBody(col, row)) {\n const startCol = Math.min(currentRange.start.col, currentRange.end.col, col);\n const endCol = table.colCount - 1;\n const startRow = Math.min(currentRange.start.row, currentRange.end.row, row);\n const endRow = Math.max(currentRange.start.row, currentRange.end.row, row);\n if (state.select.headerSelectMode === 'body') {\n currentRange.start = { col: table.leftRowSeriesNumberCount, row: startRow };\n currentRange.end = { col: table.colCount - 1, row: endRow };\n } else {\n currentRange.start = { col: startCol, row: startRow };\n currentRange.end = { col: endCol, row: endRow };\n }\n } else {\n currentRange.end = { col, row };\n }\n scenegraph.deleteLastSelectedRangeComponents();\n scenegraph.updateCellSelectBorder(currentRange);\n // } else if (isCtrl) {\n // cellPos.col = col;\n // cellPos.row = row;\n // state.select.ranges.push({\n // start: { col: cellPos.col, row: cellPos.row },\n // end: { col: cellPos.col, row: cellPos.row },\n // });\n // // 单选或多选的开始,只选中第一个单元格\n // // updateCellSelect(scenegraph, col, row, ranges, highlightScope, singleStyle);\n // scenegraph.setCellNormalStyle(col, row);\n // // 更新select border\n // // calculateAndUpdateMultiSelectBorder(scenegraph, col, row, col, row, state.select.ranges);\n // // 更新select border\n // scenegraph.updateCellSelectBorder(cellPos);\n } else {\n let extendSelectRange = true;\n // 单选或多选开始\n if (cellPos.col !== -1 && cellPos.row !== -1 && (!isCtrl || disableCtrlMultiSelect)) {\n state.select.ranges = [];\n scenegraph.deleteAllSelectBorder();\n }\n if (state.select.headerSelectMode !== 'cell' && table.isColumnHeader(col, row)) {\n // 选中行表头\n const cellRange = table.getCellRange(col, row);\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: { col: cellRange.start.col, row: table.columnHeaderLevelCount },\n end: { col: cellRange.end.col, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: cellRange.start.col, row },\n end: { col: cellRange.end.col, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if (state.select.headerSelectMode !== 'cell' && table.isRowHeader(col, row)) {\n // 选中列表头\n const cellRange = table.getCellRange(col, row);\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: { col: table.rowHeaderLevelCount + table.leftRowSeriesNumberCount, row: cellRange.start.row },\n end: { col: table.colCount - 1, row: cellRange.end.row },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col, row: cellRange.start.row },\n end: { col: table.colCount - 1, row: cellRange.end.row },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)) {\n // 选中表头行号单元格\n extendSelectRange = false;\n\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.leftRowSeriesNumberCount,\n row: table.columnHeaderLevelCount\n },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: 0, row: 0 },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)) {\n // 选中内容行号单元格\n extendSelectRange = false;\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.leftRowSeriesNumberCount,\n row\n },\n end: { col: table.colCount - 1, row: row },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col, row },\n end: { col: table.colCount - 1, row: row },\n skipBodyMerge: true\n });\n }\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isCornerHeader(col, row)) {\n // 选中表头行号单元格\n extendSelectRange = false;\n\n if (state.select.headerSelectMode === 'body') {\n state.select.ranges.push({\n start: {\n col: table.rowHeaderLevelCount + table.leftRowSeriesNumberCount,\n row: table.columnHeaderLevelCount\n },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n } else {\n state.select.ranges.push({\n start: { col: table.leftRowSeriesNumberCount, row: 0 },\n end: { col: table.colCount - 1, row: table.rowCount - 1 },\n skipBodyMerge: true\n });\n }\n } else if (col >= 0 && row >= 0) {\n // 选中普通单元格\n const cellRange = skipBodyMerge ? { start: { col, row }, end: { col, row } } : table.getCellRange(col, row);\n state.select.ranges.push({\n start: { col: cellRange.start.col, row: cellRange.start.row },\n end: { col: cellRange.end.col, row: cellRange.end.row },\n skipBodyMerge: skipBodyMerge || undefined\n });\n }\n cellPos.col = col;\n cellPos.row = row;\n // scenegraph.setCellNormalStyle(col, row);\n const currentRange = state.select.ranges?.[state.select.ranges.length - 1];\n currentRange && scenegraph.updateCellSelectBorder(currentRange, extendSelectRange);\n }\n } else if (\n (interactionState === InteractionState.grabing || table.eventManager.isDraging) &&\n !table.stateManager.isResizeCol()\n ) {\n let extendSelectRange = true;\n // 可能有cellPosStart从-1开始grabing的情况\n if (cellPos.col === -1) {\n cellPos.col = col;\n }\n if (cellPos.row === -1) {\n cellPos.row = row;\n }\n cellPos.col = col;\n cellPos.row = row;\n const currentRange = state.select.ranges[state.select.ranges.length - 1];\n if (currentRange) {\n if (\n (table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(\n currentRange.start.col,\n currentRange.start.row\n )\n ) {\n // 如果选中起始位置是序号 那么选中范围都是整行整行的选中\n extendSelectRange = false;\n currentRange.end = {\n col: table.colCount - 1,\n row\n };\n } else {\n if (state.fillHandle.isFilling) {\n // 修正拖拽填充柄选中范围 和 不拖填充柄是有区别的 解决选中区域缩小问题\n if (state.fillHandle.direction === 'top') {\n if (row === state.fillHandle.beforeFillMinRow && row === state.fillHandle.beforeFillMaxRow) {\n currentRange.start.row = currentRange.end.row = row;\n } else if (row <= state.fillHandle.beforeFillMinRow) {\n if (currentRange.start.row < currentRange.end.row) {\n const temp = currentRange.start.row;\n currentRange.start.row = currentRange.end.row;\n currentRange.end.row = temp;\n }\n currentRange.end.row = row;\n } else if (row === state.fillHandle.beforeFillMaxRow) {\n if (currentRange.start.row > currentRange.end.row) {\n currentRange.start.row = row;\n } else {\n currentRange.end.row = row;\n }\n }\n } else if (state.fillHandle.direction === 'bottom') {\n if (row >= state.fillHandle.beforeFillMaxRow) {\n if (currentRange.start.row > currentRange.end.row) {\n const temp = currentRange.start.row;\n currentRange.start.row = currentRange.end.row;\n currentRange.end.row = temp;\n }\n currentRange.end.row = row;\n }\n } else if (state.fillHandle.direction === 'left') {\n if (col === state.fillHandle.beforeFillMinCol && col === state.fillHandle.beforeFillMaxCol) {\n currentRange.start.col = currentRange.end.col = col;\n } else if (col <= state.fillHandle.beforeFillMinCol) {\n if (currentRange.start.col < currentRange.end.col) {\n const temp = currentRange.start.col;\n currentRange.start.col = currentRange.end.col;\n currentRange.end.col = temp;\n }\n currentRange.end.col = col;\n } else if (col === state.fillHandle.beforeFillMaxCol) {\n if (currentRange.start.col > currentRange.end.col) {\n currentRange.start.col = col;\n } else {\n currentRange.end.col = col;\n }\n }\n } else if (state.fillHandle.direction === 'right') {\n if (col >= state.fillHandle.beforeFillMaxCol) {\n if (currentRange.start.col > currentRange.end.col) {\n const temp = currentRange.start.col;\n currentRange.start.col = currentRange.end.col;\n currentRange.end.col = temp;\n }\n currentRange.end.col = col;\n }\n }\n } else {\n currentRange.end = {\n col,\n row\n };\n const cellRange = skipBodyMerge ? { start: { col, row }, end: { col, row } } : table.getCellRange(col, row);\n if (currentRange.start.col < cellRange.end.col) {\n currentRange.end.col = cellRange.end.col;\n } else if (currentRange.start.col > cellRange.start.col) {\n currentRange.end.col = cellRange.start.col;\n }\n\n if (currentRange.start.row < cellRange.end.row) {\n currentRange.end.row = cellRange.end.row;\n } else if (currentRange.start.row > cellRange.start.row) {\n currentRange.end.row = cellRange.start.row;\n }\n\n if (state.select.headerSelectMode === 'body') {\n if (table.isRowHeader(col, row)) {\n currentRange.start.col = table.rowHeaderLevelCount + table.leftRowSeriesNumberCount;\n currentRange.end.col = table.colCount - 1;\n } else if (table.isColumnHeader(col, row)) {\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.row = table.rowCount - 1;\n } else if ((table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)) {\n currentRange.start.col = table.leftRowSeriesNumberCount;\n currentRange.end.col = table.colCount - 1;\n } else if (table.isCornerHeader(col, row)) {\n currentRange.start.col = table.rowHeaderLevelCount + table.leftRowSeriesNumberCount;\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.col = table.colCount - 1;\n currentRange.end.row = table.rowCount - 1;\n } else if (table.isSeriesNumber(col, row)) {\n currentRange.start.col = table.leftRowSeriesNumberCount;\n currentRange.start.row = table.columnHeaderLevelCount;\n currentRange.end.col = table.colCount - 1;\n currentRange.end.row = table.rowCount - 1;\n }\n }\n if (skipBodyMerge) {\n currentRange.skipBodyMerge = true;\n }\n }\n }\n scenegraph.updateCellSelectBorder(currentRange, extendSelectRange);\n }\n }\n scenegraph.updateNextFrame();\n}\nexport function selectEnd(scenegraph: Scenegraph) {\n scenegraph.moveSelectingRangeComponentsToSelectedRangeComponents();\n}\n","import type { TableEvents } from '../../core/TABLE_EVENT_TYPE';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { extend } from '../../tools/helper';\n\nexport interface PivotTableEvents extends TableEvents {\n /**\n * 透视表中排序图标点击事件\n */\n PIVOT_SORT_CLICK: 'pivot_sort_click';\n /**\n * 下钻按钮点击事件\n */\n DRILLMENU_CLICK: 'drillmenu_click';\n}\n\nexport interface PivotChartEvents extends TableEvents {\n /**\n * 代理vchart中的事件\n */\n VCHART_EVENT_TYPE: 'vchart_event_type';\n}\nexport const PIVOT_TABLE_EVENT_TYPE: PivotTableEvents = extend(TABLE_EVENT_TYPE, {\n PIVOT_SORT_CLICK: 'pivot_sort_click' as const,\n DRILLMENU_CLICK: 'drillmenu_click' as const\n});\nexport const PIVOT_CHART_EVENT_TYPE: PivotChartEvents = extend(TABLE_EVENT_TYPE, {\n VCHART_EVENT_TYPE: 'vchart_event_type' as const\n});\n","import type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function updateDrill(col: number, row: number, drillDown: boolean, drillUp: boolean, table: BaseTableAPI) {\n // 找到当前单元格显示drill icon位置\n const headerType = table.getCellLocation(col, row);\n let x = 0;\n let y = 0;\n let visible = false;\n if (headerType === 'columnHeader') {\n x = table.getColsWidth(0, table.rowHeaderLevelCount - 1) - (table.frozenColCount === 0 ? table.scrollLeft : 0); //还需要考虑 行表头过宽被滚动后的情况\n y = table.getRowsHeight(0, row - 1) + table.getRowHeight(row) / 2;\n visible = true;\n } else if (headerType === 'rowHeader') {\n y = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n x = table.getColsWidth(0, col - 1) + table.getColWidth(col) / 2;\n // 位置按自动吸附到中间位置计算【行表头滚动后有用】\n // const rectObj = table.getVisibleCellRangeRelativeRect(table.hover.state.address);\n // x = rectObj.left + rectObj.width / 2;\n visible = true;\n }\n\n // 更新drill icon 位置\n table.scenegraph.updateDrill(visible, x, y, drillDown, drillUp);\n}\n","import { createLine, createSymbol } from './../../vrender';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { MousePointerSparklineEvent } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function clearChartHover(col: number, row: number, table: BaseTableAPI) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const sparkline = cellGroup.getChildByName('sparkline');\n const highlightLine = sparkline?.getChildByName('highlight-line');\n const highlightSymbol = sparkline?.getChildByName('highlight-symbol');\n if (highlightLine) {\n highlightLine.setAttributes({\n visible: false,\n pickable: false\n });\n }\n if (highlightSymbol) {\n highlightSymbol.setAttributes({\n visible: false,\n pickable: false\n });\n }\n\n table.scenegraph.updateNextFrame();\n}\n\nexport function updateChartHover(col: number, row: number, x: number, y: number, table: BaseTableAPI): boolean {\n const cellGroup = table.scenegraph.getCell(col, row);\n const sparkline = cellGroup.getChildByName('sparkline');\n const line = sparkline?.getChildByName('sparkline-line');\n const symbol = sparkline?.getChildByName('sparkline-symbol-group');\n if (!line) {\n return false;\n }\n const bandwidth = (line as any).bandwidth;\n const min = (line as any).min;\n const max = (line as any).max;\n const points = line.attribute.points;\n x = x - sparkline.globalAABBBounds.x1;\n y = y - sparkline.globalAABBBounds.y1;\n\n let chartPoint;\n for (let i = 0; i < points.length; i++) {\n const { x: pointX, y: pointY, defined, rawData } = points[i];\n\n if (Math.abs(x - pointX) < bandwidth / 2) {\n chartPoint = {\n point: points[i],\n points,\n pointsBandWidth: bandwidth,\n pointData: rawData\n };\n if (defined) {\n // 添加highlight line\n const highlightLine = sparkline.getChildByName('highlight-line');\n if (highlightLine) {\n highlightLine.setAttributes({\n // x: pointX,\n points: [\n { x: pointX, y: max },\n { x: pointX, y: min }\n ],\n visible: true,\n pickable: true\n });\n } else {\n const highlightLine = createLine({\n // x: 0,\n // y: 0,\n points: [\n { x: pointX, y: max },\n { x: pointX, y: min }\n ],\n lineWidth: line.hover?.strokeWidth,\n stroke: line.hover?.stroke\n });\n highlightLine.name = 'highlight-line';\n sparkline.addChild(highlightLine);\n }\n\n // 添加highlight symbol\n const highlightSymbol = sparkline.getChildByName('highlight-symbol');\n if (highlightSymbol) {\n highlightSymbol.setAttributes({\n x: pointX,\n y: pointY,\n visible: true,\n pickable: true\n });\n } else {\n const highlightSymbol = createSymbol({\n x: pointX,\n y: pointY,\n stroke: symbol.hover.stroke,\n lineWidth: symbol.hover.strokeWidth,\n fill: symbol.hover.fill,\n size: symbol.hover.size * 2, // 之前配置的是圆半径\n symbolType: 'circle'\n });\n highlightSymbol.name = 'highlight-symbol';\n sparkline.addChild(highlightSymbol);\n }\n break;\n }\n }\n }\n table.scenegraph.updateNextFrame();\n\n if (chartPoint) {\n const eventInfo: Omit = {\n col,\n row,\n field: table.getHeaderField(col, row),\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: table.getBodyColumnDefine(col, row).title,\n cellRange: table.getCellRelativeRect(col, row),\n sparkline: {\n pointData: chartPoint.pointData\n },\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL, eventInfo as MousePointerSparklineEvent);\n }\n return true;\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { CellAddress } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function adjustMoveHeaderTarget(source: CellAddress, target: CellAddress, table: BaseTableAPI) {\n const sourceCellRange = table.getCellRange(source.col, source.row);\n\n if (table.isColumnHeader(source.col, source.row)) {\n // 处理是目标位置处是合并单元格的情况\n const targetCellRange = table.getCellRange(target.col, sourceCellRange.start.row);\n // 如果是拖拽处是body target.row处理成表头最后一层\n if (target.row >= table.columnHeaderLevelCount) {\n target.row = table.columnHeaderLevelCount - 1;\n }\n //如果拖拽目标的列在原位置的右侧 位置是合并单元格的最右侧\n if (target.col >= source.col) {\n target.col = targetCellRange.end.col;\n } else {\n target.col = targetCellRange.start.col;\n } //左侧 位置是合并单元格的最左侧\n } else if (\n table.isRowHeader(source.col, source.row)\n // ||\n // ((table as ListTable).transpose && table.internalProps.layoutMap.isSeriesNumberInBody(source.col, source.row))\n ) {\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n const targetCellRange = table.getCellRange(sourceCellRange.start.col, target.row);\n if (target.col >= table.rowHeaderLevelCount + layoutMap.leftRowSeriesNumberColumnCount) {\n target.col = table.rowHeaderLevelCount + layoutMap.leftRowSeriesNumberColumnCount - 1;\n }\n // tree模式[透视表行表头]\n if (layoutMap.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = layoutMap.getCellHeaderPathsWithTreeNode(source.col, source.row)\n .rowHeaderPaths as any;\n const targetRowHeaderPaths = layoutMap.getCellHeaderPathsWithTreeNode(target.col, target.row)\n .rowHeaderPaths as any;\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n const targetPathNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1]; //找到共同层级节点\n // 根据这个目标节点找到结束的row index\n if (targetPathNode) {\n if (target.row >= source.row) {\n //如果拖拽目标的列在原位置的上面 位置是层级的最上端\n target.row = targetPathNode.startInTotal + targetPathNode.size - 1 + table.columnHeaderLevelCount;\n } else {\n target.row = targetPathNode.startInTotal + table.columnHeaderLevelCount;\n }\n } //如果拖拽目标的列在原位置的下面 位置是层级的最下端\n }\n } else if (target.row >= source.row) {\n //table模式 如果拖拽目标的列在原位置的下面 位置是层级的最下端\n target.row = targetCellRange.end.row;\n } else {\n //table模式 如果拖拽目标的列在原位置的上面 位置是层级的最上端\n target.row = targetCellRange.start.row;\n }\n }\n return target;\n}\n","import type { ListTable } from '../../ListTable';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { SimpleHeaderLayoutMap } from '../../layout';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport { getCellMergeInfo } from '../../scenegraph/utils/get-cell-merge';\nimport type { CellRange } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { StateManager } from '../state';\nimport { adjustMoveHeaderTarget } from './adjust-header';\n\nexport function startMoveCol(\n col: number,\n row: number,\n x: number,\n y: number,\n state: StateManager,\n event: MouseEvent | PointerEvent | TouchEvent\n) {\n if (!('canMoveHeaderPosition' in state.table.internalProps.layoutMap)) {\n return;\n }\n state.columnMove.moving = true;\n state.columnMove.colSource = col;\n state.columnMove.rowSource = row;\n state.columnMove.x = x - state.table.tableX;\n state.columnMove.y = y - state.table.tableY;\n\n const cellLocation = state.table.getCellLocation(col, row);\n const delta =\n cellLocation === 'columnHeader'\n ? state.columnMove.x\n : cellLocation === 'rowHeader' ||\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ? state.columnMove.y\n : 0;\n\n const { backX, lineX, backY, lineY } = state.table.scenegraph.component.showMoveCol(col, row, delta);\n\n state.table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, {\n col,\n row,\n x,\n y,\n backX,\n lineX,\n backY,\n lineY,\n event\n });\n // 调整列顺序期间清空选中清空\n const isHasSelected = !!state.select.ranges?.length;\n state.table.stateManager.updateSelectPos(-1, -1);\n state.table.stateManager.endSelectCells(true, isHasSelected);\n state.table.scenegraph.updateNextFrame();\n}\n\nexport function updateMoveCol(\n col: number,\n row: number,\n x: number,\n y: number,\n state: StateManager,\n event: MouseEvent | PointerEvent | TouchEvent\n) {\n if (!('canMoveHeaderPosition' in state.table.internalProps.layoutMap)) {\n return;\n }\n\n const targetCell = adjustMoveHeaderTarget(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col, row },\n state.table\n );\n const canMove = state.table.internalProps.layoutMap.canMoveHeaderPosition(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col: targetCell.col, row: targetCell.row }\n );\n if (!canMove) {\n state.updateCursor('not-allowed');\n state.columnMove.colTarget = state.columnMove.colSource;\n state.columnMove.rowTarget = state.columnMove.rowSource;\n } else {\n state.columnMove.x = x - state.table.tableX;\n state.columnMove.y = y - state.table.tableY;\n state.columnMove.colTarget = targetCell.col;\n state.columnMove.rowTarget = targetCell.row;\n state.updateCursor('grabbing');\n let lineX;\n let backX;\n let lineY;\n let backY;\n const cellLocation = state.table.getCellLocation(state.columnMove.colSource, state.columnMove.rowSource);\n if (cellLocation === 'columnHeader') {\n backX = state.columnMove.x;\n if (state.table.isLeftFrozenColumn(col)) {\n lineX =\n state.columnMove.colTarget >= state.columnMove.colSource\n ? state.table.getColsWidth(0, state.columnMove.colTarget)\n : state.table.getColsWidth(0, state.columnMove.colTarget - 1);\n } else if (state.table.isRightFrozenColumn(col)) {\n lineX = state.table.tableNoFrameWidth - state.table.getColsWidth(targetCell.col + 1, state.table.colCount - 1);\n } else {\n lineX =\n (state.columnMove.colTarget >= state.columnMove.colSource\n ? state.table.getColsWidth(0, state.columnMove.colTarget)\n : state.table.getColsWidth(0, state.columnMove.colTarget - 1)) -\n state.table.stateManager.scroll.horizontalBarPos;\n }\n } else if (\n cellLocation === 'rowHeader' ||\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n ) {\n backY = state.columnMove.y;\n if (state.table.isFrozenRow(row)) {\n lineY =\n state.columnMove.rowTarget >= state.columnMove.rowSource\n ? state.table.getRowsHeight(0, state.columnMove.rowTarget)\n : state.table.getRowsHeight(0, state.columnMove.rowTarget - 1);\n } else if (state.table.isBottomFrozenRow(row)) {\n lineY =\n state.table.tableNoFrameHeight - state.table.getRowsHeight(targetCell.row + 1, state.table.rowCount - 1);\n } else {\n lineY =\n (state.columnMove.rowTarget >= state.columnMove.rowSource\n ? state.table.getRowsHeight(0, state.columnMove.rowTarget)\n : state.table.getRowsHeight(0, state.columnMove.rowTarget - 1)) -\n state.table.stateManager.scroll.verticalBarPos;\n }\n }\n state.table.scenegraph.component.updateMoveCol(backX, lineX, backY, lineY);\n state.table.fireListeners(TABLE_EVENT_TYPE.CHANGING_HEADER_POSITION, {\n col,\n row,\n x,\n y,\n backX,\n lineX,\n backY,\n lineY,\n event\n });\n state.table.scenegraph.updateNextFrame();\n }\n}\n\nexport function endMoveCol(state: StateManager): boolean {\n let moveColResult = false;\n if (\n 'canMoveHeaderPosition' in state.table.internalProps.layoutMap &&\n state.columnMove.moving &&\n state.columnMove.colSource >= 0 &&\n state.columnMove.rowSource >= 0 &&\n state.columnMove.colTarget >= 0 &&\n state.columnMove.rowTarget >= 0 &&\n state.table.options.customConfig?.notUpdateInColumnRowMove !== true\n ) {\n //getCellMergeInfo 一定要在moveHeaderPosition之前调用 否则就不是修改前的range了\n const oldSourceMergeInfo = state.table.getCellRange(state.columnMove.colSource, state.columnMove.rowSource);\n const oldTargetMergeInfo = state.table.getCellRange(state.columnMove.colTarget, state.columnMove.rowTarget);\n // 调整列顺序\n const moveContext = state.table._moveHeaderPosition(\n { col: state.columnMove.colSource, row: state.columnMove.rowSource },\n { col: state.columnMove.colTarget, row: state.columnMove.rowTarget }\n );\n\n // 更新状态\n if (moveContext && moveContext.targetIndex !== moveContext.sourceIndex) {\n state.table.internalProps.useOneRowHeightFillAll = false;\n state.table.internalProps.layoutMap.clearCellRangeMap();\n const sourceMergeInfo = state.table.getCellRange(state.columnMove.colSource, state.columnMove.rowSource);\n const targetMergeInfo = state.table.getCellRange(state.columnMove.colTarget, state.columnMove.rowTarget);\n\n const colMin = Math.min(\n sourceMergeInfo.start.col,\n targetMergeInfo.start.col,\n oldSourceMergeInfo.start.col,\n oldTargetMergeInfo.start.col\n );\n const colMax = Math.max(\n sourceMergeInfo.end.col,\n targetMergeInfo.end.col,\n oldSourceMergeInfo.end.col,\n oldTargetMergeInfo.end.col\n );\n const rowMin = Math.min(\n sourceMergeInfo.start.row,\n targetMergeInfo.start.row,\n oldSourceMergeInfo.start.row,\n oldTargetMergeInfo.start.row\n );\n let rowMax = Math.max(\n sourceMergeInfo.end.row,\n targetMergeInfo.end.row,\n oldSourceMergeInfo.end.row,\n oldTargetMergeInfo.end.row\n );\n if (\n moveContext.moveType === 'row' &&\n (state.table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree'\n ) {\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n rowMax = rowMax + moveContext.targetSize - 1;\n } else {\n rowMax = rowMax + moveContext.sourceSize - 1;\n }\n }\n if (\n !(state.table as ListTable).transpose &&\n (state.table.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(\n state.columnMove.colSource,\n state.columnMove.rowSource\n )\n ) {\n state.table.changeRecordOrder(moveContext.sourceIndex, moveContext.targetIndex);\n state.changeCheckboxAndRadioOrder(moveContext.sourceIndex, moveContext.targetIndex);\n }\n // clear columns width and rows height cache\n if (moveContext.moveType === 'column') {\n clearWidthsAndHeightsCache(colMin, colMax, 0, -1, state.table);\n } else {\n clearWidthsAndHeightsCache(0, -1, rowMin, rowMax, state.table);\n }\n\n // clear cell style cache\n state.table.clearCellStyleCache();\n if (\n state.table.internalProps.layoutMap.isSeriesNumberInBody(state.columnMove.colSource, state.columnMove.rowSource)\n ) {\n // 如果是拖拽序号换位置 考虑到非拖拽单元格合并而是其他地方有合并被拆开或者独立单元格拖拽后变为合并的情况 这里直接刷新这个场景树的节点 才能覆盖所有情况\n state.table.scenegraph.updateHeaderPosition(\n state.table.scenegraph.proxy.colStart,\n state.table.scenegraph.proxy.colEnd,\n state.table.scenegraph.proxy.rowStart,\n state.table.scenegraph.proxy.rowEnd,\n moveContext.moveType\n );\n } else if (moveContext.moveType === 'column') {\n state.table.scenegraph.updateHeaderPosition(colMin, colMax, 0, -1, moveContext.moveType);\n } else {\n state.table.scenegraph.updateHeaderPosition(0, -1, rowMin, rowMax, moveContext.moveType);\n }\n //调整冻结列数量\n if (state.table.internalProps.frozenColDragHeaderMode === 'adjustFrozenCount' && state.table.isListTable()) {\n if (\n state.table.isLeftFrozenColumn(state.columnMove.colTarget) &&\n !state.table.isLeftFrozenColumn(state.columnMove.colSource)\n ) {\n state.table.frozenColCount +=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n } else if (\n state.table.isLeftFrozenColumn(state.columnMove.colSource) &&\n !state.table.isLeftFrozenColumn(state.columnMove.colTarget)\n ) {\n state.table.frozenColCount -=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n }\n if (\n state.table.isRightFrozenColumn(state.columnMove.colTarget) &&\n !state.table.isRightFrozenColumn(state.columnMove.colSource)\n ) {\n state.table.rightFrozenColCount +=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n } else if (\n state.table.isRightFrozenColumn(state.columnMove.colSource) &&\n !state.table.isRightFrozenColumn(state.columnMove.colTarget)\n ) {\n state.table.rightFrozenColCount -=\n (sourceMergeInfo as CellRange).end.col - (sourceMergeInfo as CellRange).start.col + 1;\n }\n }\n moveColResult = true;\n } else {\n state.updateCursor();\n //触发事件 CHANGE_HEADER_POSITION 还需要用到这些值 所以延迟清理\n state.columnMove.moving = false;\n delete state.columnMove.colSource;\n delete state.columnMove.rowSource;\n delete state.columnMove.colTarget;\n delete state.columnMove.rowTarget;\n state.table.scenegraph.component.hideMoveCol();\n state.table.scenegraph.updateNextFrame();\n return false;\n }\n }\n state.columnMove.moving = false;\n setTimeout(() => {\n //触发事件 CHANGE_HEADER_POSITION 还需要用到这些值 所以延迟清理\n delete state.columnMove.colSource;\n delete state.columnMove.rowSource;\n delete state.columnMove.colTarget;\n delete state.columnMove.rowTarget;\n }, 0);\n state.table.scenegraph.component.hideMoveCol();\n // update frozen shadowline component\n if (\n state.columnResize.col < state.table.frozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setFrozenColumnShadow(\n state.table.frozenColCount - 1,\n state.columnResize.isRightFrozen\n );\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (state.table.options.frozenColCount) {\n state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1);\n } else if (state.table.options.rightFrozenColCount) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n }\n state.table.scenegraph.updateNextFrame();\n\n if (state.table.options.customConfig?.notUpdateInColumnRowMove === true) {\n return true;\n }\n return moveColResult;\n}\n\nfunction clearWidthsAndHeightsCache(\n colMin: number,\n colMax: number,\n rowMin: number,\n rowMax: number,\n table: BaseTableAPI\n) {\n for (let col = colMin; col <= colMax; col++) {\n table._clearColRangeWidthsMap(col);\n }\n for (let row = rowMin; row <= rowMax; row++) {\n table._clearRowRangeHeightsMap(row);\n }\n}\n","/**\n * @description: 从事件对象中获取图标和位置信息\n * @param {any} target\n * @return {*}\n */\nexport function getIconAndPositionFromTarget(target: any):\n | {\n icon: any;\n position: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n };\n type: string;\n }\n | undefined {\n if (!target) {\n return undefined;\n }\n const icon = target.role?.startsWith('icon')\n ? target\n : target.type === 'richtext'\n ? target._currentHoverIcon\n : undefined;\n if (!icon) {\n return undefined;\n }\n if (target.type === 'richtext') {\n return {\n icon: icon,\n position: {\n left: target.globalAABBBounds.x1 + icon.globalAABBBounds.x1,\n right: target.globalAABBBounds.x1 + icon.globalAABBBounds.x2,\n top: target.globalAABBBounds.y1 + icon.globalAABBBounds.y1,\n bottom: target.globalAABBBounds.y1 + icon.globalAABBBounds.y2,\n width: icon.globalAABBBounds.x2 - icon.globalAABBBounds.x1,\n height: icon.globalAABBBounds.y2 - icon.globalAABBBounds.y1\n },\n type: 'richtext-icon'\n };\n }\n return {\n icon: icon,\n position: {\n left: icon.globalAABBBounds.x1,\n right: icon.globalAABBBounds.x2,\n top: icon.globalAABBBounds.y1,\n bottom: icon.globalAABBBounds.y2,\n width: icon.globalAABBBounds.x2 - icon.globalAABBBounds.x1,\n height: icon.globalAABBBounds.y2 - icon.globalAABBBounds.y1\n },\n type: 'icon'\n };\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { IndicatorData } from '../../ts-types/list-table/layout-map/api';\nimport type { StateManager } from '../state';\n\n// columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\nexport function updateResizeColumn(xInTable: number, yInTable: number, state: StateManager) {\n xInTable = Math.ceil(xInTable);\n yInTable = Math.ceil(yInTable);\n let detaX = state.columnResize.isRightFrozen ? state.columnResize.x - xInTable : xInTable - state.columnResize.x;\n // table.getColWidth会使用Math.round,因此这里直接跳过小于1px的修改\n if (Math.abs(detaX) < 1) {\n return;\n }\n\n // 检查minWidth/maxWidth\n // getColWidth会进行Math.round,所以先从colWidthsMap获取:\n // 如果是数值,直接使用;如果不是,则通过getColWidth获取像素值\n // let widthCache = (state.table as any).colWidthsMap.get(state.columnResize.col);\n // if (typeof widthCache === 'number') {\n // widthCache = widthCache;\n // } else {\n const widthCache = state.table.getColWidth(state.columnResize.col);\n // }\n let width = widthCache;\n width += detaX;\n const minWidth = state.table.getMinColWidth(state.columnResize.col);\n const maxWidth = state.table.getMaxColWidth(state.columnResize.col);\n if (width < minWidth || width > maxWidth) {\n if (widthCache === minWidth || widthCache === maxWidth) {\n return;\n } else if (widthCache - minWidth > maxWidth - widthCache) {\n detaX = maxWidth - widthCache;\n } else {\n detaX = minWidth - widthCache;\n }\n }\n\n // limitMinWidth限制\n let afterSize = state.table.getColWidth(state.columnResize.col) + detaX;\n if (afterSize < state.table.internalProps.limitMinWidth) {\n afterSize = state.table.internalProps.limitMinWidth;\n detaX = afterSize - state.table.getColWidth(state.columnResize.col);\n }\n if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n const rightColWidthCache = state.table.getColWidth(state.columnResize.col + 1);\n const rightColMinWidth = state.table.getMinColWidth(state.columnResize.col + 1);\n const rightColMaxWidth = state.table.getMaxColWidth(state.columnResize.col + 1);\n let rightColWidth = rightColWidthCache;\n rightColWidth -= detaX;\n if (rightColWidth < rightColMinWidth || rightColWidth > rightColMaxWidth) {\n if (rightColWidthCache === rightColMinWidth || rightColWidthCache === rightColMaxWidth) {\n return;\n } else if (rightColWidthCache - rightColMinWidth > rightColMaxWidth - rightColWidthCache) {\n detaX = rightColMaxWidth - rightColWidthCache;\n } else {\n detaX = rightColMinWidth - rightColWidthCache;\n }\n }\n if (rightColWidth - detaX < state.table.internalProps.limitMinWidth) {\n detaX = rightColWidth - state.table.internalProps.limitMinWidth;\n }\n }\n detaX = Math.ceil(detaX);\n\n if (\n state.columnResize.col < state.table.rowHeaderLevelCount ||\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount\n ) {\n updateResizeColForColumn(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'indicator') {\n updateResizeColForIndicator(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'indicatorGroup') {\n updateResizeColForIndicatorGroup(detaX, state);\n } else if (state.table.internalProps.columnResizeType === 'all') {\n updateResizeColForAll(detaX, state);\n } else {\n // state.table.internalProps.columnResizeType === 'column'\n updateResizeColForColumn(detaX, state);\n }\n\n // if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n // // in adaptive mode, the right column width can not be negative\n // const rightColWidth = state.table.getColWidth(state.columnResize.col + 1);\n // if (rightColWidth - detaX < 0) {\n // detaX = rightColWidth;\n // }\n // state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n // state.table.scenegraph.updateColWidth(state.columnResize.col + 1, -detaX);\n // } else {\n // state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n // }\n state.columnResize.x = xInTable;\n\n // update resize column component\n state.table.scenegraph.component.updateResizeCol(state.columnResize.col, yInTable, state.columnResize.isRightFrozen);\n if (\n state.columnResize.col < state.table.frozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setFrozenColumnShadow(\n state.table.frozenColCount - 1,\n state.columnResize.isRightFrozen\n );\n } else if (state.table.options.frozenColCount) {\n state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1);\n }\n if (\n state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount &&\n !state.table.isPivotTable() &&\n !(state.table as ListTable).transpose\n ) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n } else if (state.table.options.rightFrozenColCount) {\n state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);\n }\n\n // stage rerender\n state.table.scenegraph.updateNextFrame();\n}\n\nfunction updateResizeColForColumn(detaX: number, state: StateManager) {\n if (state.table.widthMode === 'adaptive' && state.columnResize.col < state.table.colCount - 1) {\n // in adaptive mode, the right column width can not be negative\n // const rightColWidth = state.table.getColWidth(state.columnResize.col + 1);\n // if (rightColWidth - detaX < 0) {\n // detaX = rightColWidth;\n // }\n state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n state.table.scenegraph.updateColWidth(state.columnResize.col + 1, -detaX);\n\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col);\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col + 1);\n } else {\n state.table.scenegraph.updateColWidth(state.columnResize.col, detaX);\n state.table.internalProps._widthResizedColMap.add(state.columnResize.col);\n }\n}\n\nfunction updateResizeColForAll(detaX: number, state: StateManager) {\n // 全列调整\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n for (let col = state.table.frozenColCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) {\n // 是否禁止调整列宽disableColumnResize 对应canResizeColumn的逻辑判断\n if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n continue;\n }\n }\n // state.table.setColWidth(col, afterSize);\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n}\n\nfunction updateResizeColForIndicator(detaX: number, state: StateManager) {\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(state.columnResize.col, state.table.columnHeaderLevelCount);\n } else {\n const headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n resizeDimensionKey = headerPath.dimensionKey;\n resizeDimensionValue = headerPath.value;\n }\n for (let col = state.table.rowHeaderLevelCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) {\n const indicatorKey = layout.getIndicatorKey(col, state.table.columnHeaderLevelCount);\n if (layout.indicatorsAsCol && indicatorKey === resizeIndicatorKey) {\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n } else if (!layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(col, state.table.columnHeaderLevelCount - 1);\n const headerPath = headerPaths?.colHeaderPaths[headerPaths.colHeaderPaths.length - 1];\n if (headerPath && resizeDimensionKey === headerPath.dimensionKey && resizeDimensionValue === headerPath.value) {\n state.table.scenegraph.updateColWidth(col, detaX);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n }\n }\n}\n\nfunction updateResizeColForIndicatorGroup(detaX: number, state: StateManager) {\n // not support for PivotChart temply\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n const startCol = node.startInTotal + state.table.frozenColCount;\n const endCol = node.startInTotal + state.table.frozenColCount + node.size - 1;\n // 计算当前受影响列的总宽度 后面会利用这个计算比例\n const totalColWidth = state.table.getColsWidth(startCol, endCol);\n const moveX = detaX; // 纠正moveX 用于指标列均分该值\n for (let col = startCol; col <= endCol; col++) {\n // 是否禁止调整列宽disableColumnResize 对应canResizeColumn的逻辑判断\n if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n continue;\n }\n }\n const prevWidth = state.table.getColWidth(col);\n\n // deltaWidth <0.5 & >=-0.5 在updateRowWidth函数中会被Math.round处理为0,导致高度更新失效\n let deltaWidth = (prevWidth / totalColWidth) * moveX;\n if (deltaWidth > 0 && deltaWidth < 0.5) {\n deltaWidth = 0.5;\n } else if (deltaWidth < 0 && deltaWidth >= -0.5) {\n deltaWidth = -0.5;\n }\n state.table.scenegraph.updateColWidth(col, deltaWidth);\n state.table.internalProps._widthResizedColMap.add(col);\n }\n}\n","import { isBoolean, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { StateManager } from '../state';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ColumnDefine } from '../../ts-types';\nimport type { Radio } from '@visactor/vrender-components';\n\nexport function setRadioState(\n col: number,\n row: number,\n field: string | number,\n type: 'column' | 'cell',\n indexInCell: number | undefined,\n state: StateManager\n) {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex) as number;\n if (type === 'column') {\n if (isNumber(indexInCell)) {\n state.radioState[field] = {};\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field] = dataIndex;\n }\n } else {\n if (!state.radioState[field]) {\n state.radioState[field] = {};\n }\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n }\n }\n}\n\nexport function getCellRadioState(col: number, row: number, table: BaseTableAPI): boolean | number {\n const define = table.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = table.getCellType(col, row);\n if (isValid(field) && cellType === 'checkbox') {\n const dataIndex = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row)) as number;\n const columnState = table.stateManager.radioState?.[field as string | number];\n if (isNumber(columnState)) {\n if (columnState === dataIndex) {\n return true;\n }\n } else if (isObject(columnState)) {\n const cellState = (columnState as Record)[dataIndex];\n if (isNumber(cellState)) {\n return cellState;\n }\n }\n }\n return false;\n}\n\nexport function syncRadioState(\n col: number,\n row: number,\n field: string | number,\n type: 'column' | 'cell',\n indexInCell: number | undefined,\n isChecked: boolean,\n state: StateManager\n): boolean {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex) as number;\n\n if (type === 'column') {\n if (!isValid(state.radioState[field]) && isChecked) {\n if (isNumber(indexInCell)) {\n state.radioState[field] = {};\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field] = dataIndex;\n }\n return true;\n } else if (isNumber(state.radioState[field]) && !isNumber(indexInCell)) {\n // column : column\n return state.radioState[field] === dataIndex;\n } else if (isNumber(state.radioState[field]) && isNumber(indexInCell)) {\n // column : cell\n return false;\n } else if (isObject(state.radioState[field]) && !isNumber(indexInCell)) {\n // cell : column\n return false;\n } else if (isObject(state.radioState[field]) && isNumber(indexInCell)) {\n // cell : cell\n return state.radioState[field][dataIndex] === indexInCell;\n }\n } else if (type === 'cell') {\n if (!isValid(state.radioState[field]) && isChecked) {\n state.radioState[field] = {};\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n return true;\n } else if (!isValid(state.radioState[field]?.[dataIndex]) && isChecked) {\n if (isNumber(indexInCell)) {\n state.radioState[field][dataIndex] = indexInCell;\n } else {\n state.radioState[field][dataIndex] = true;\n }\n return true;\n } else if (isBoolean(state.radioState[field]?.[dataIndex]) && !isNumber(indexInCell)) {\n // single : single\n return state.radioState[field][dataIndex];\n } else if (isBoolean(state.radioState[field]?.[dataIndex]) && isNumber(indexInCell)) {\n // single : multiple\n return false;\n } else if (isNumber(state.radioState[field]?.[dataIndex]) && !isNumber(indexInCell)) {\n // multiple : single\n return false;\n } else if (isNumber(state.radioState[field]?.[dataIndex]) && isNumber(indexInCell)) {\n // multiple : multiple\n return state.radioState[field][dataIndex] === indexInCell;\n }\n }\n }\n return isChecked;\n}\n\nexport function setCellRadioState(col: number, row: number, index: number | undefined, table: BaseTableAPI) {\n const cellGoup = table.scenegraph.getCell(col, row);\n if (!cellGoup) {\n return;\n }\n if (isNumber(index)) {\n const radio = cellGoup.getChildAt(index) as any;\n radio?._handlePointerUp();\n } else {\n const radio = cellGoup.getChildByName('radio') as any;\n radio?._handlePointerUp();\n }\n}\n\nexport function changeRadioOrder(sourceIndex: number, targetIndex: number, state: StateManager) {\n const { radioState, table } = state;\n if (table.internalProps.transpose) {\n sourceIndex = table.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = table.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = table.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = table.getRecordShowIndexByCell(0, targetIndex);\n }\n // if (sourceIndex !== targetIndex) {\n // const sourceRecord = radioState[sourceIndex];\n // radioState[sourceIndex] = radioState[targetIndex];\n // radioState[targetIndex] = sourceRecord;\n // }\n if (sourceIndex > targetIndex) {\n const sourceRecord = radioState[sourceIndex];\n for (let i = sourceIndex; i > targetIndex; i--) {\n radioState[i] = radioState[i - 1];\n }\n radioState[targetIndex] = sourceRecord;\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = radioState[sourceIndex];\n for (let i = sourceIndex; i < targetIndex; i++) {\n radioState[i] = radioState[i + 1];\n }\n radioState[targetIndex] = sourceRecord;\n }\n}\n","import { isArray, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { StateManager } from '../state';\nimport type { CheckboxColumnDefine, ListTableAPI } from '../../ts-types';\nimport { getOrApply } from '../../tools/helper';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { CachedDataSource } from '../../data';\nimport type { CheckBox } from './../../vrender';\n\nexport function setCheckedState(\n col: number,\n row: number,\n field: string | number,\n checked: boolean | 'indeterminate',\n state: StateManager\n) {\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex).toString();\n if (state.checkedState.has(dataIndex)) {\n state.checkedState.get(dataIndex)[field] = checked;\n } else {\n state.checkedState.set(dataIndex, {\n [field]: checked\n });\n }\n }\n}\n\nexport function setHeaderCheckedState(field: string | number, checked: boolean | 'indeterminate', state: StateManager) {\n state.headerCheckedState[field] = checked;\n state.checkedState?.forEach(recordCheckState => {\n recordCheckState[field] = checked;\n });\n}\n\n//#region CheckedState 状态维护\n\n/**\n * 创建cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\nexport function syncCheckedState(\n col: number,\n row: number,\n field: string | number,\n checked: boolean,\n state: StateManager\n): boolean | 'indeterminate' {\n if (state.table.isHeader(col, row)) {\n if (isValid(state.headerCheckedState[field])) {\n return state.headerCheckedState[field];\n } else if (typeof checked === 'function') {\n return undefined;\n } else if (isValid(checked)) {\n state.headerCheckedState[field] = checked;\n } else if (state.checkedState?.size > 0) {\n const isAllChecked = state.updateHeaderCheckedState(field, col, row);\n return isAllChecked;\n }\n return state.headerCheckedState[field];\n }\n const recordIndex = state.table.getRecordShowIndexByCell(col, row);\n if (recordIndex >= 0) {\n const dataIndex = state.table.dataSource.getIndexKey(recordIndex).toString();\n if (isValid(state.checkedState.get(dataIndex)?.[field])) {\n return state.checkedState.get(dataIndex)[field];\n }\n if (state.checkedState.has(dataIndex)) {\n state.checkedState.get(dataIndex)[field] = checked;\n } else {\n state.checkedState.set(dataIndex, {\n [field]: checked\n });\n }\n }\n return checked;\n}\n\n/**\n * 初始化check状态\n * @param records\n */\nexport function initCheckedState(records: any[], state: StateManager) {\n // clear checkbox state\n state.checkedState.clear();\n state.headerCheckedState = {};\n state.radioState = {};\n\n let isNeedInitHeaderCheckedStateFromRecord = false;\n state._checkboxCellTypeFields = [];\n state._headerCheckFuncs = {};\n state.table.internalProps.layoutMap.headerObjects.forEach((hd, index) => {\n if (hd.headerType === 'checkbox') {\n const headerChecked = (hd.define as CheckboxColumnDefine).checked as boolean;\n\n if (headerChecked === undefined || headerChecked === null || typeof headerChecked === 'function') {\n // 如果没有明确指定check的状态 则需要在下面遍历所有数据获取到节点状态 确定这个header的check状态\n isNeedInitHeaderCheckedStateFromRecord = true;\n if (typeof headerChecked === 'function') {\n state._headerCheckFuncs[hd.field as string | number] = headerChecked;\n }\n } else {\n state.headerCheckedState[hd.field as string | number] = headerChecked;\n }\n if (hd.define.cellType === 'checkbox' && !hd.fieldFormat) {\n state._checkboxCellTypeFields.push(hd.field as string | number);\n }\n }\n });\n\n // for row series number\n if (state.table.leftRowSeriesNumberCount === 1) {\n state.headerCheckedState._vtable_rowSeries_number = false;\n state._checkboxCellTypeFields.push('_vtable_rowSeries_number');\n isNeedInitHeaderCheckedStateFromRecord = true;\n } else if (state.table.leftRowSeriesNumberCount > 1) {\n for (let i = 0; i < state.table.leftRowSeriesNumberCount; i++) {\n state.headerCheckedState[`_vtable_rowSeries_number_${i}`] = false;\n state._checkboxCellTypeFields.push(`_vtable_rowSeries_number_${i}`);\n }\n isNeedInitHeaderCheckedStateFromRecord = true;\n }\n\n //如果没有明确指定check的状态 遍历所有数据获取到节点状态 确定这个header的check状态\n if (isNeedInitHeaderCheckedStateFromRecord) {\n initRecordCheckState(records, state);\n }\n}\n\n/**\n * 更新header单元checked的状态,依据当前列每一个数据checked的状态。\n * @param field\n * @returns\n */\nexport function updateHeaderCheckedState(\n field: string | number,\n state: StateManager,\n col: number,\n row: number\n): boolean | 'indeterminate' {\n let allChecked = true;\n let allUnChecked = true;\n let hasChecked = false;\n state.checkedState.forEach((check_state: Record, index: string | number | number[]) => {\n if ((index as string).includes(',')) {\n index = (index as string).split(',').map(item => {\n return Number(item);\n }) as number[];\n } else {\n index = Number(index);\n }\n const tableIndex = state.table.getTableIndexByRecordIndex(index as number);\n const mergeCell = (state.table as ListTableAPI).transpose\n ? state.table.getCustomMerge(tableIndex, row)\n : state.table.getCustomMerge(col, tableIndex);\n\n const data = state.table.dataSource?.get(index as number);\n if (mergeCell || (!state.table.internalProps.rowSeriesNumber?.enableTreeCheckbox && data.vtableMerge)) {\n // 不参与check状态的计算\n return;\n }\n if (check_state?.[field] !== true) {\n allChecked = false;\n } else {\n allUnChecked = false;\n hasChecked = true;\n }\n });\n\n if (allChecked) {\n state.headerCheckedState[field] = true;\n return allChecked;\n }\n\n if (allUnChecked) {\n state.headerCheckedState[field] = false;\n return false;\n }\n\n if (hasChecked) {\n state.headerCheckedState[field] = 'indeterminate';\n return 'indeterminate'; //半选状态\n }\n return false;\n}\n\n/**\n * setRecords的时候虽然调用了initCheckedState 进行了初始化 但当每个表头的checked状态都用配置了的话 初始化不会遍历全部数据\n * @param records\n */\nexport function initLeftRecordsCheckState(records: any[], state: StateManager) {\n for (let index = state.checkedState.size; index < records.length; index++) {\n const record = records[index];\n state._checkboxCellTypeFields.forEach(field => {\n const value = record[field] as string | { text: string; checked: boolean; disable: boolean } | boolean;\n let isChecked;\n if (isObject(value)) {\n isChecked = value.checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n const dataIndex = index.toString();\n if (!state.checkedState.get(dataIndex)) {\n state.checkedState.set(dataIndex, {});\n }\n state.checkedState.get(dataIndex)[field] = isChecked;\n });\n }\n}\n\nexport function setCellCheckboxState(\n col: number,\n row: number,\n checked: boolean | 'indeterminate',\n table: BaseTableAPI\n) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const checkbox = cellGroup?.getChildByName('checkbox') as any;\n if (!checkbox) {\n // update state\n const field = table.getHeaderField(col, row);\n if (table.isHeader(col, row)) {\n //点击的表头部分的checkbox 需要同时处理表头和body单元格的状态\n table.stateManager.setHeaderCheckedState(field, checked);\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n table.scenegraph.updateCheckboxCellState(col, row, checked);\n }\n } else {\n //点击的是body单元格的checkbox 处理本单元格的状态维护 同时需要检查表头是否改变状态\n table.stateManager.setCheckedState(col, row, field, checked);\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n const oldHeaderCheckedState = table.stateManager.headerCheckedState[field];\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState(field, col, row);\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n }\n return;\n }\n const { checked: oldChecked, indeterminate } = checkbox.attribute;\n\n if (indeterminate) {\n if (checked) {\n checkbox._handlePointerUp();\n } else {\n checkbox._handlePointerUp();\n checkbox._handlePointerUp();\n }\n } else if (oldChecked) {\n if (checked) {\n // do nothing\n } else {\n checkbox._handlePointerUp();\n }\n } else {\n if (checked) {\n checkbox._handlePointerUp();\n } else {\n // do nothing\n }\n }\n}\n\nexport function setCellCheckboxStateByAttribute(\n col: number,\n row: number,\n checked: boolean | 'indeterminate',\n table: BaseTableAPI\n) {\n const cellGroup = table.scenegraph.getCell(col, row);\n const checkbox = cellGroup?.getChildByName('checkbox') as any;\n if (checkbox) {\n if (checked === 'indeterminate') {\n (checkbox as CheckBox).setAttribute('indeterminate', true);\n (checkbox as CheckBox).setAttribute('checked', undefined);\n } else {\n (checkbox as CheckBox).setAttribute('indeterminate', undefined);\n (checkbox as CheckBox).setAttribute('checked', checked);\n }\n }\n}\n\nexport function changeCheckboxOrder(sourceIndex: number, targetIndex: number, state: StateManager) {\n const { checkedState, table } = state;\n let source;\n let target;\n if (table.internalProps.transpose) {\n sourceIndex = table.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = table.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n // sourceIndex = table.getRecordShowIndexByCell(0, sourceIndex);\n // targetIndex = table.getRecordShowIndexByCell(0, targetIndex);\n\n source = table.isPivotTable() ? undefined : (table as any).getRecordIndexByCell(0, sourceIndex);\n target = table.isPivotTable() ? undefined : (table as any).getRecordIndexByCell(0, targetIndex);\n }\n\n if (isNumber(source) && isNumber(target)) {\n if (sourceIndex > targetIndex) {\n const sourceRecord = checkedState.get(sourceIndex.toString());\n for (let i = sourceIndex; i > targetIndex; i--) {\n // checkedState[i] = checkedState[i - 1];\n checkedState.set(i.toString(), checkedState.get((i - 1).toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(targetIndex.toString(), sourceRecord);\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = checkedState.get(sourceIndex.toString());\n for (let i = sourceIndex; i < targetIndex; i++) {\n // checkedState[i] = checkedState[i + 1];\n checkedState.set(i.toString(), checkedState.get((i + 1).toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(targetIndex.toString(), sourceRecord);\n }\n } else if (isArray(source) && isArray(target)) {\n sourceIndex = source[source.length - 1];\n targetIndex = target[target.length - 1];\n if (sourceIndex > targetIndex) {\n const sourceRecord = checkedState.get(source.toString());\n for (let i = sourceIndex; i > targetIndex; i--) {\n const now = [...source];\n now[now.length - 1] = i;\n const last = [...source];\n last[last.length - 1] = i - 1;\n checkedState.set(now.toString(), checkedState.get(last.toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(target.toString(), sourceRecord);\n } else if (sourceIndex < targetIndex) {\n const sourceRecord = checkedState.get(source.toString());\n for (let i = sourceIndex; i < targetIndex; i++) {\n const now = [...source];\n now[now.length - 1] = i;\n const next = [...source];\n next[next.length - 1] = i + 1;\n checkedState.set(now.toString(), checkedState.get(next.toString()));\n }\n // checkedState[targetIndex] = sourceRecord;\n checkedState.set(target.toString(), sourceRecord);\n }\n }\n}\n\nexport function getGroupCheckboxState(table: BaseTableAPI) {\n const result: any[] = [];\n const dataSource = table.dataSource as CachedDataSource;\n const groupKeyLength = dataSource.dataConfig.groupByRules.length + 1;\n dataSource.currentIndexedData.forEach((indexArr: number, index) => {\n if (isArray(indexArr) && indexArr.length === groupKeyLength) {\n // get record by index\n const { vtableOriginIndex } = (dataSource as any).getRawRecord(indexArr);\n result[vtableOriginIndex] = table.stateManager.checkedState.get(indexArr.toString());\n }\n });\n\n return result;\n}\n\nfunction initRecordCheckState(records: any[], state: StateManager) {\n const table = state.table;\n const start = table.isPivotTable()\n ? 0\n : table.internalProps.transpose\n ? table.rowHeaderLevelCount\n : table.columnHeaderLevelCount;\n const end = table.isPivotTable()\n ? isArray(records)\n ? records.length\n : 0\n : table.internalProps.transpose\n ? table.colCount\n : table.rowCount;\n for (let index = 0; index + start < end; index++) {\n const record = table.isPivotTable() ? records[index] : table.dataSource.get(index);\n // eslint-disable-next-line no-loop-func\n state._checkboxCellTypeFields.forEach(field => {\n const value =\n record && (record[field] as string | { text: string; checked: boolean; disable: boolean } | boolean);\n let isChecked;\n if (isObject(value)) {\n isChecked = value.checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n if (isChecked === undefined || isChecked === null) {\n const headerCheckFunc = state._headerCheckFuncs[field];\n if (headerCheckFunc) {\n //如果定义的checked是个函数 则需要每个都去计算这个值\n const cellAddr = state.table.getCellAddrByFieldRecord(field, index);\n const globalChecked = getOrApply(headerCheckFunc as any, {\n col: cellAddr.col,\n row: cellAddr.row,\n table: state.table,\n context: null,\n value\n });\n isChecked = globalChecked;\n }\n }\n const dataIndex = table.isPivotTable() ? index.toString() : state.table.dataSource.getIndexKey(index).toString();\n if (!state.checkedState.get(dataIndex)) {\n state.checkedState.set(dataIndex, {});\n }\n state.checkedState.get(dataIndex)[field] = isChecked;\n });\n }\n}\n","import type { ListTable } from '../../ListTable';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { IndicatorData } from '../../ts-types/list-table/layout-map/api';\nimport type { StateManager } from '../state';\n\n// rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\nexport function updateResizeRow(xInTable: number, yInTable: number, state: StateManager) {\n xInTable = Math.ceil(xInTable);\n yInTable = Math.ceil(yInTable);\n let detaY = state.rowResize.isBottomFrozen ? state.rowResize.y - yInTable : yInTable - state.rowResize.y;\n // table.getColWidth会使用Math.round,因此这里直接跳过小于1px的修改\n if (Math.abs(detaY) < 1) {\n return;\n }\n\n const heightCache = state.table.getRowHeight(state.rowResize.row);\n let height = heightCache;\n height += detaY;\n\n // limitMinHeight限制\n let afterSize = state.table.getRowHeight(state.rowResize.row) + detaY;\n if (afterSize < state.table.internalProps.limitMinHeight) {\n afterSize = state.table.internalProps.limitMinHeight;\n detaY = afterSize - state.table.getRowHeight(state.rowResize.row);\n }\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\n const bottomRowHeightCache = state.table.getRowHeight(state.rowResize.row + 1);\n let bottomRowHeight = bottomRowHeightCache;\n bottomRowHeight -= detaY;\n if (bottomRowHeight - detaY < state.table.internalProps.limitMinHeight) {\n detaY = bottomRowHeight - state.table.internalProps.limitMinHeight;\n }\n }\n detaY = Math.ceil(detaY);\n\n if (\n state.rowResize.row < state.table.columnHeaderLevelCount ||\n state.rowResize.row >= state.table.rowCount - state.table.bottomFrozenRowCount\n ) {\n updateResizeColForRow(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'indicator') {\n updateResizeColForIndicator(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'indicatorGroup') {\n updateResizeColForIndicatorGroup(detaY, state);\n } else if (state.table.internalProps.rowResizeType === 'all') {\n updateResizeColForAll(detaY, state);\n } else {\n updateResizeColForRow(detaY, state);\n }\n\n state.rowResize.y = yInTable;\n\n // update resize row component\n state.table.scenegraph.component.updateResizeRow(state.rowResize.row, xInTable, state.rowResize.isBottomFrozen);\n\n // stage rerender\n state.table.scenegraph.updateNextFrame();\n}\n\nfunction updateResizeColForRow(detaY: number, state: StateManager) {\n if (state.table.heightMode === 'adaptive' && state.rowResize.row < state.table.rowCount - 1) {\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\n state.table.scenegraph.updateRowHeight(state.rowResize.row + 1, -detaY);\n\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row + 1);\n } else {\n state.table.scenegraph.updateRowHeight(state.rowResize.row, detaY);\n state.table.internalProps._heightResizedRowMap.add(state.rowResize.row);\n }\n}\n\nfunction updateResizeColForAll(detaY: number, state: StateManager) {\n // 全列调整\n // const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n for (let row = state.table.frozenRowCount; row < state.table.rowCount - state.table.bottomFrozenRowCount; row++) {\n // // 是否禁止调整列宽disableRowResize 对应canResizeRow的逻辑判断\n // if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n // const cellDefine = layout.getBody(row, state.table.rowHeaderLevelCount);\n // if ((cellDefine as IndicatorData)?.disableRowResize) {\n // continue;\n // }\n // }\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n}\n\nfunction updateResizeColForIndicator(detaY: number, state: StateManager) {\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let resizeIndicatorKey;\n let resizeDimensionKey;\n let resizeDimensionValue;\n if (!layout.indicatorsAsCol) {\n resizeIndicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, state.rowResize.row);\n } else {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, state.rowResize.row);\n const headerPath = headerPaths.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n resizeDimensionKey = headerPath?.dimensionKey;\n resizeDimensionValue = headerPath?.value;\n }\n for (\n let row = state.table.columnHeaderLevelCount;\n row < state.table.rowCount - state.table.bottomFrozenRowCount;\n row++\n ) {\n const indicatorKey = layout.getIndicatorKey(state.table.rowHeaderLevelCount, row);\n if (!layout.indicatorsAsCol && indicatorKey === resizeIndicatorKey) {\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n } else if (layout.indicatorsAsCol) {\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount - 1, row);\n const headerPath = headerPaths?.rowHeaderPaths?.[headerPaths.rowHeaderPaths.length - 1];\n if (headerPath && resizeDimensionKey === headerPath.dimensionKey && resizeDimensionValue === headerPath.value) {\n state.table.scenegraph.updateRowHeight(row, detaY);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n }\n }\n}\n\nfunction updateResizeColForIndicatorGroup(detaY: number, state: StateManager) {\n // not support for PivotChart temply\n const layout = state.table.internalProps.layoutMap as PivotHeaderLayoutMap;\n //通过getCellHeaderPaths接口获取列表头最后一层指标维度的path\n const headerPaths = layout.getCellHeaderPaths(state.table.rowHeaderLevelCount, state.rowResize.row);\n const node = layout.getHeadNodeByRowOrColDimensions(\n headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length - 1)\n ) as any;\n // 计算宽度受影响列的起止\n const startRow = node.startInTotal + state.table.frozenRowCount;\n const endRow = node.startInTotal + state.table.frozenRowCount + node.size - 1;\n // 计算当前受影响列的总宽度 后面会利用这个计算比例\n const totalRowHeight = state.table.getRowsHeight(startRow, endRow);\n const moveY = detaY; // 纠正moveX 用于指标列均分该值\n for (let row = startRow; row <= endRow; row++) {\n // 是否禁止调整列宽disableRowResize 对应canResizeRow的逻辑判断\n // if (!(state.table.internalProps.transpose || (state.table.isPivotTable() && !layout.indicatorsAsCol))) {\n // const cellDefine = layout.getBody(state.table.columnHeaderLevelCount, row);\n // // if ((cellDefine as IndicatorData)?.disableRowResize) {\n // // continue;\n // // }\n // }\n const prevHeight = state.table.getRowHeight(row);\n\n // deltaHeight <0.5 & >=-0.5 在updateRowHeight函数中会被Math.round处理为0,导致高度更新失效\n let deltaHeight = (prevHeight / totalRowHeight) * moveY;\n if (deltaHeight > 0 && deltaHeight < 0.5) {\n deltaHeight = 0.5;\n } else if (deltaHeight < 0 && deltaHeight >= -0.5) {\n deltaHeight = -0.51;\n }\n state.table.scenegraph.updateRowHeight(row, deltaHeight);\n state.table.internalProps._heightResizedRowMap.add(row);\n }\n}\n","import type { CustomSelectionStyle, StateManager } from '../state';\nimport type { CellRange } from '../../ts-types';\nimport type { IRect, IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { createRect } from '@visactor/vrender-core';\nimport { updateAllSelectComponent } from '../../scenegraph/select/update-select-border';\nimport type { Scenegraph } from '../../scenegraph/scenegraph';\n\nexport function deletaCustomSelectRanges(state: StateManager) {\n const { customSelectedRangeComponents } = state.table.scenegraph;\n // delete graphic\n customSelectedRangeComponents.forEach((selectComp: { rect: IRect }, key: string) => {\n selectComp.rect.delete();\n });\n customSelectedRangeComponents.clear();\n state.select.customSelectRanges = [];\n}\n\nexport function addCustomSelectRanges(\n customSelectRanges: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[],\n state: StateManager\n) {\n const { customSelectedRangeComponents } = state.table.scenegraph;\n customSelectRanges.forEach((customRange: { range: CellRange; style: CustomSelectionStyle }) => {\n const { range, style } = customRange;\n const rect = createRect({\n fill: style.cellBgColor ?? false,\n stroke: style.cellBorderColor ?? false,\n lineWidth: style.cellBorderLineWidth ?? 0,\n lineDash: style.cellBorderLineDash ?? [],\n pickable: false\n });\n customSelectedRangeComponents.set(`${range.start.col}-${range.start.row}-${range.end.col}-${range.end.row}`, {\n rect,\n role: 'body'\n });\n });\n state.select.customSelectRanges = customSelectRanges;\n updateAllSelectComponent(state.table.scenegraph);\n state.table.scenegraph.updateNextFrame();\n}\n","import { Rect } from '../tools/Rect';\nimport { MenuType } from '../scenegraph/component/menu';\nimport type { Group } from '../scenegraph/graphic/group';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type {\n CellAddress,\n CellPosition,\n CellRange,\n DropDownMenuHighlightInfo,\n IDimensionInfo,\n ListTableAPI,\n MenuListItem,\n PivotTableAPI,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { HighlightScope, InteractionState, SortType } from '../ts-types';\nimport { IconFuncTypeEnum } from '../ts-types';\nimport { checkMultiCellInSelect } from './common/check-in-select';\nimport { updateHoverPosition } from './hover/update-position';\nimport { dealFreeze } from './frozen';\nimport { dealSort } from './sort';\nimport { selectEnd, updateSelectPosition } from './select/update-position';\nimport { cellInRange, getOrApply } from '../tools/helper';\nimport type { ListTable } from '../ListTable';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { Bounds, isObject, isString, isValid } from '@visactor/vutils';\nimport { updateDrill } from './drill';\nimport { clearChartHover, updateChartHover } from './spark-line';\nimport { endMoveCol, startMoveCol, updateMoveCol } from './cell-move';\nimport type { FederatedWheelEvent, IRectGraphicAttribute } from './../vrender';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { getIconAndPositionFromTarget } from '../scenegraph/utils/icon';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { debounce } from '../tools/debounce';\nimport { updateResizeColumn } from './resize/update-resize-column';\nimport { changeRadioOrder, setRadioState, syncRadioState } from './radio/radio';\nimport {\n changeCheckboxOrder,\n initCheckedState,\n initLeftRecordsCheckState,\n setCheckedState,\n setHeaderCheckedState,\n syncCheckedState,\n updateHeaderCheckedState\n} from './checkbox/checkbox';\nimport { updateResizeRow } from './resize/update-resize-row';\nimport { deleteAllSelectingBorder } from '../scenegraph/select/delete-select-border';\nimport type { PivotTable } from '../PivotTable';\nimport { traverseObject } from '../tools/util';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\nimport { addCustomSelectRanges, deletaCustomSelectRanges } from './select/custom-select';\nimport { expendCellRange } from '../tools/merge-range';\n\nexport type CustomSelectionStyle = {\n cellBorderColor?: string; //边框颜色\n cellBorderLineWidth?: number; //边框线宽度\n cellBorderLineDash?: number[]; //边框线虚线\n cellBgColor?: string; //选择框背景颜色\n};\n\nexport class StateManager {\n table: BaseTableAPI;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState;\n interactionStateBeforeScroll?: InteractionState;\n // select记录两个位置,第二个位置只在range模式生效\n select: {\n ranges: (CellRange & { skipBodyMerge?: boolean })[];\n highlightScope: HighlightScope;\n cellPos: CellPosition;\n // cellPosStart: CellPosition;\n // cellPosEnd: CellPosition;\n singleStyle?: boolean; // select当前单元格是否使用单独样式\n disableHeader?: boolean; // 是否禁用表头select\n disableCtrlMultiSelect?: boolean; // 是否禁用ctrl多选框\n /** 点击表头单元格效果\n * 'inline': 点击行表头则整行选中,选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的表头单元格;\n * 'body': 不选择表头,点击行表头则选择该行所有 body 单元格,点击列表头则选择该列所有 body 单元格。\n */\n headerSelectMode?: 'inline' | 'cell' | 'body';\n highlightInRange?: boolean;\n selecting: boolean;\n customSelectRanges?: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[];\n };\n fillHandle: {\n direction?: 'top' | 'bottom' | 'left' | 'right';\n directionRow?: boolean;\n isFilling: boolean;\n startX: number;\n startY: number;\n beforeFillMinCol?: number;\n beforeFillMinRow?: number;\n beforeFillMaxCol?: number;\n beforeFillMaxRow?: number;\n };\n hover: {\n highlightScope: HighlightScope; // hover模式\n singleStyle?: boolean; // hover当前单元格是否使用单独样式\n disableHeader?: boolean; // 是否禁用表头hover\n cellPos: CellPosition; // 记录当前hover的位置\n cellPosContainHeader?: CellPosition; // 记录当前hover的位置(在disableHeader时启用,记录真实位置)\n };\n hoverIcon: {\n col: number;\n row: number;\n icon: Icon | null;\n };\n residentHoverIcon?: {\n col: number;\n row: number;\n icon: Icon | null;\n };\n columnResize: {\n col: number;\n /** x坐标是相对table内坐标 */\n x: number;\n resizing: boolean;\n isRightFrozen?: boolean;\n };\n rowResize: {\n row: number;\n /** x坐标是相对table内坐标 */\n y: number;\n resizing: boolean;\n isBottomFrozen?: boolean;\n };\n columnMove: {\n colSource: number;\n colTarget: number;\n rowSource: number;\n rowTarget: number;\n x: number;\n y: number;\n moving: boolean;\n };\n menu: {\n x: number;\n y: number;\n isShow: boolean;\n itemList: MenuListItem[];\n bounds: Bounds;\n highlightIndex: number;\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n sort: Array<{\n col: number;\n row: number;\n field?: string;\n // fieldKey?: string;\n order: SortOrder;\n icon?: Icon;\n }>;\n frozen: {\n col: number;\n // row: number;\n icon?: Icon;\n };\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n tablePosition: {\n absoluteX: number;\n absoluteY: number;\n };\n drill: {\n dimensionKey?: string;\n title?: string;\n drillDown?: boolean;\n drillUp?: boolean;\n col: number;\n row: number;\n };\n // 当鼠标hover到迷你图上时存储行列值,好在鼠标移动到其他单元格时清理Sparkline的高亮状态\n sparkLine: {\n col: number;\n row: number;\n };\n _clearVerticalScrollBar: any;\n _clearHorizontalScrollBar: any;\n\n fastScrolling: boolean = false;\n\n /**\n * 对应原始数据列表顺序的checked状态\n */\n // checkedState: Record[] = [];\n checkedState: Map> = new Map();\n /**\n * 对应表头checked状态\n */\n headerCheckedState: Record = {};\n\n _checkboxCellTypeFields: (string | number)[] = [];\n\n _headerCheckFuncs: Record = {};\n\n radioState: Record> = {};\n // 供滚动重置为default使用\n resetInteractionState = debounce((state?: InteractionState) => {\n this.updateInteractionState(state ?? InteractionState.default);\n }, 100);\n // _x: number = 0;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.initState();\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n }\n\n initState() {\n this._initState();\n this.setHoverState();\n this.setSelectState();\n this.setFrozenState();\n }\n /** updateOption更新配置的情况下 调用接口*/\n updateOptionSetState() {\n this._updateOptionSetState();\n this.setHoverState();\n this.setSelectState();\n this.setFrozenState();\n }\n _updateOptionSetState() {\n this.interactionState = InteractionState.default;\n // this.select = {\n // highlightScope: HighlightScope.single,\n // ranges: [],\n // cellPos: {\n // col: -1,\n // row: -1\n // },\n // selecting: false\n // };\n // this.hover = {\n // highlightScope: HighlightScope.single,\n // cellPos: {\n // col: -1,\n // row: -1\n // }\n // };\n this.hoverIcon = {\n col: -1,\n row: -1,\n icon: null\n };\n this.columnResize = {\n col: -1,\n x: 0,\n resizing: false\n };\n this.rowResize = {\n row: -1,\n y: 0,\n resizing: false\n };\n this.columnMove = {\n colSource: -1,\n colTarget: -1,\n rowSource: -1,\n rowTarget: -1,\n x: 0,\n y: 0,\n moving: false\n };\n this.menu = {\n x: -1,\n y: -1,\n isShow: false,\n itemList: [],\n bounds: new Bounds(),\n highlightIndex: -1,\n dropDownMenuHighlight: []\n };\n this.sort = [\n {\n col: -1,\n row: -1,\n order: 'normal'\n }\n ];\n this.frozen = {\n col: -1\n // row: -1,\n };\n // this.scroll = {\n // horizontalBarPos: 0,\n // verticalBarPos: 0\n // };\n this.tablePosition = {\n absoluteX: 0,\n absoluteY: 0\n };\n this.drill = {\n col: -1,\n row: -1\n };\n this.sparkLine = {\n col: -1,\n row: -1\n };\n }\n _initState() {\n this.interactionState = InteractionState.default;\n this.select = {\n highlightScope: HighlightScope.single,\n ranges: [],\n cellPos: {\n col: -1,\n row: -1\n },\n selecting: false\n };\n this.fillHandle = {\n isFilling: false,\n startX: undefined,\n startY: undefined\n };\n this.hover = {\n highlightScope: HighlightScope.single,\n cellPos: {\n col: -1,\n row: -1\n }\n };\n this.hoverIcon = {\n col: -1,\n row: -1,\n icon: null\n };\n this.columnResize = {\n col: -1,\n x: 0,\n resizing: false\n };\n this.rowResize = {\n row: -1,\n y: 0,\n resizing: false\n };\n this.columnMove = {\n colSource: -1,\n colTarget: -1,\n rowSource: -1,\n rowTarget: -1,\n x: 0,\n y: 0,\n moving: false\n };\n this.menu = {\n x: -1,\n y: -1,\n isShow: false,\n itemList: [],\n bounds: new Bounds(),\n highlightIndex: -1,\n dropDownMenuHighlight: []\n };\n this.sort = [\n {\n col: -1,\n row: -1,\n order: 'normal'\n }\n ];\n this.frozen = {\n col: -1\n // row: -1,\n };\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.tablePosition = {\n absoluteX: 0,\n absoluteY: 0\n };\n this.drill = {\n col: -1,\n row: -1\n };\n this.sparkLine = {\n col: -1,\n row: -1\n };\n }\n\n setHoverState() {\n const { highlightMode, disableHover, disableHeaderHover } = this.table.options.hover ?? {\n highlightMode: 'cell'\n };\n if (!disableHover) {\n if (highlightMode === 'cross') {\n this.hover.highlightScope = HighlightScope.cross;\n } else if (highlightMode === 'row') {\n this.hover.highlightScope = HighlightScope.row;\n } else if (highlightMode === 'column') {\n this.hover.highlightScope = HighlightScope.column;\n } else if (highlightMode === 'cell') {\n this.hover.highlightScope = HighlightScope.single;\n }\n } else {\n this.hover.highlightScope = HighlightScope.none;\n }\n\n this.hover.singleStyle = !disableHover;\n this.hover.disableHeader = disableHeaderHover;\n if (this.hover.highlightScope === HighlightScope.none || disableHeaderHover) {\n this.hover.cellPosContainHeader = {\n col: -1,\n row: -1\n };\n }\n }\n\n setSelectState() {\n const {\n // enableRowHighlight,\n // enableColumnHighlight,\n /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode,\n disableSelect,\n disableHeaderSelect,\n highlightMode,\n highlightInRange\n } = Object.assign(\n {},\n {\n /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode: 'inline',\n disableSelect: false,\n disableHeaderSelect: false,\n highlightMode: 'cell',\n highlightInRange: false\n },\n this.table.options.select\n );\n\n // if (enableRowHighlight && enableColumnHighlight) {\n // this.select.highlightScope = HighlightScope.cross;\n // } else if (enableRowHighlight) {\n // this.select.highlightScope = HighlightScope.row;\n // } else if (enableColumnHighlight) {\n // this.select.highlightScope = HighlightScope.column;\n // } else\n if (disableSelect === true) {\n this.select.highlightScope = HighlightScope.none;\n } else {\n if (highlightMode === 'cross') {\n this.select.highlightScope = HighlightScope.cross;\n } else if (highlightMode === 'row') {\n this.select.highlightScope = HighlightScope.row;\n } else if (highlightMode === 'column') {\n this.select.highlightScope = HighlightScope.column;\n } else {\n this.select.highlightScope = HighlightScope.single;\n }\n }\n\n this.select.singleStyle = !disableSelect;\n this.select.disableHeader = disableHeaderSelect;\n this.select.headerSelectMode = headerSelectMode;\n this.select.highlightInRange = highlightInRange;\n this.select.disableCtrlMultiSelect = this.table.options.keyboardOptions?.ctrlMultiSelect === false;\n }\n\n isSelected(col: number, row: number): boolean {\n // if (!this.select.selecting) {\n // return false;\n // }\n let seled = false;\n this.select.ranges.forEach((range: CellRange) => {\n if (cellInRange(range, col, row)) {\n seled = true;\n }\n });\n return seled;\n }\n\n setSortState(sortState: SortState | SortState[]) {\n const state = this;\n sortState = !sortState || Array.isArray(sortState) ? sortState : [sortState];\n ////this.sort[this.sort.length - 1].field = sortState[sortState.length - 1]?.field as string;\n // this.sort.fieldKey = sortState?.fieldKey as string;\n ////this.sort[this.sort.length - 1].order = sortState[sortState.length - 1]?.order;\n // // 这里有一个问题,目前sortState中一般只传入了fieldKey,但是getCellRangeByField需要field\n // const range = this.table.getCellRangeByField(this.sort.field, 0);\n // if (range) {\n // this.sort.col = range.start.col;\n // this.sort.row = range.start.row;\n // }\n\n function flattenColumns(columns: any) {\n const result: Array = [];\n\n function flatten(cols: any, parentStartIndex = 0) {\n cols.forEach((col: any) => {\n const startIndex = col.startInTotal\n ? col.startInTotal + state.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0\n : parentStartIndex;\n if (col.columns) {\n flatten(col.columns, startIndex);\n } else {\n result.push({\n ...col,\n startIndex\n });\n }\n });\n }\n\n flatten(columns);\n return result;\n }\n\n const sort =\n sortState &&\n (sortState as SortState[]).reduce((prev, item) => {\n const column = flattenColumns((this.table.internalProps as any).columns)?.find(\n column => column?.field === item?.field\n );\n //let path = (item as any)?.event?.path?.findLast((item:any)=>item.col!=undefined);\n if (this.table.internalProps.transpose) {\n prev.push({\n field: item.field,\n order: item.order,\n row: column?.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n col: column?.level\n } as any);\n } else {\n prev.push({\n field: item.field,\n order: item.order,\n col: column?.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n row: column?.level\n } as any);\n }\n\n return prev;\n }, []);\n\n this.sort = sort || [];\n }\n\n setFrozenState() {\n this.frozen.col = this.table.frozenColCount - 1;\n // this.frozen.row = 0;\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n\n if (mode === InteractionState.scrolling) {\n this.interactionStateBeforeScroll = this.interactionState;\n }\n\n // console.log('updateInteractionState', mode);\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateHoverhighlightScope(mode: HighlightScope) {\n if (this.hover.highlightScope === mode) {\n return;\n }\n this.hover.highlightScope = mode;\n // 处理mode 更新后逻辑\n // ......\n }\n\n updateHoverPos(col: number, row: number) {\n updateHoverPosition(this, col, row);\n }\n\n updateSelectPos(\n col: number,\n row: number,\n isShift: boolean = false,\n isCtrl: boolean = false,\n isSelectAll: boolean = false,\n makeSelectCellVisible: boolean = true,\n skipBodyMerge: boolean = false\n ) {\n if (row !== -1 && row !== -1) {\n this.select.selecting = true;\n }\n updateSelectPosition(this, col, row, isShift, isCtrl, isSelectAll, makeSelectCellVisible, skipBodyMerge);\n }\n\n checkCellRangeInSelect(cellPosStart: CellAddress, cellPosEnd: CellAddress) {\n return checkMultiCellInSelect(\n cellPosStart,\n cellPosEnd,\n this.select.ranges,\n // this.select.cellPosEnd,\n this.select.highlightScope\n );\n }\n\n updateHoverIcon(col: number, row: number, target: any, cellGroup: Group) {\n if (this.residentHoverIcon?.icon && target === this.residentHoverIcon?.icon) {\n return; // 常驻hover icon不更新交互\n }\n const iconInfo = getIconAndPositionFromTarget(target);\n if (!iconInfo) {\n // target非icon\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n\n this.hoverIcon.col = -1;\n this.hoverIcon.col = -1;\n this.hoverIcon.icon = null;\n this.table.scenegraph.updateNextFrame();\n }\n return;\n }\n if (iconInfo.type === 'richtext-icon') {\n // richtext icon 特殊处理\n const inlineIcon = iconInfo.icon;\n // 清除当前hover icon\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n\n this.hoverIcon.col = -1;\n this.hoverIcon.col = -1;\n this.hoverIcon.icon = null;\n this.table.scenegraph.updateNextFrame();\n }\n // hover展示tooltip\n if (inlineIcon.attribute.tooltip) {\n const tooltipOptions: TooltipOptions = {\n content: inlineIcon.attribute.tooltip.title,\n referencePosition: {\n rect: iconInfo.position,\n placement: inlineIcon.attribute.tooltip.placement\n },\n style: Object.assign(\n {},\n this.table.internalProps.theme?.tooltipStyle,\n inlineIcon.tooltip?.style,\n inlineIcon.attribute?.tooltip?.style\n ),\n disappearDelay: inlineIcon.attribute.tooltip.disappearDelay\n };\n if (!this.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n this.table.showTooltip(col, row, tooltipOptions);\n }\n }\n } else {\n // const icon = target as Icon;\n const icon = iconInfo.icon;\n if (icon !== this.hoverIcon.icon) {\n if (this.hoverIcon.icon && this.hoverIcon.icon !== this.residentHoverIcon?.icon) {\n this.table.scenegraph.setIconNormalStyle(this.hoverIcon.icon, this.hoverIcon.col, this.hoverIcon.row);\n }\n\n this.hoverIcon.col = col;\n this.hoverIcon.row = row;\n this.hoverIcon.icon = icon;\n\n // 更新icon样式\n this.table.scenegraph.setIconHoverStyle(icon, col, row, cellGroup);\n this.table.scenegraph.updateNextFrame();\n }\n }\n }\n\n isResizeCol(): boolean {\n return this.columnResize.resizing;\n }\n isResizeRow(): boolean {\n return this.rowResize.resizing;\n }\n isFillHandle(): boolean {\n return this.fillHandle.isFilling;\n }\n isSelecting(): boolean {\n return this.select.selecting;\n }\n endSelectCells(fireListener: boolean = true, fireClear: boolean = true) {\n if (this.select.selecting) {\n this.select.selecting = false;\n if (this.select.ranges.length === 0) {\n return;\n }\n\n // this.select.ranges deduplication\n const currentRange = this.select.ranges[this.select.ranges.length - 1];\n\n // deal with merge cell\n expendCellRange(currentRange, this.table);\n\n let isSame = false;\n for (let i = 0; i < this.select.ranges.length - 1; i++) {\n const range = this.select.ranges[i];\n if (\n range &&\n range.start.col === currentRange.start.col &&\n range.start.row === currentRange.start.row &&\n range.end.col === currentRange.end.col &&\n range.end.row === currentRange.end.row\n ) {\n isSame = true;\n break;\n }\n }\n if (isSame) {\n this.select.ranges.pop();\n // remove selecting rect\n deleteAllSelectingBorder(this.table.scenegraph);\n this.table.scenegraph.selectingRangeComponents.clear();\n } else {\n selectEnd(this.table.scenegraph);\n }\n\n // 触发SELECTED_CELL\n const lastCol = this.select.ranges[this.select.ranges.length - 1].end.col;\n const lastRow = this.select.ranges[this.select.ranges.length - 1].end.row;\n fireListener &&\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CELL, {\n ranges: this.select.ranges,\n col: lastCol,\n row: lastRow\n });\n } else if (fireClear) {\n if (this.select.ranges.length === 0) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CLEAR, {});\n }\n }\n }\n\n endResizeCol() {\n setTimeout(() => {\n this.columnResize.resizing = false;\n }, 0);\n this.table.scenegraph.updateChartSizeForResizeColWidth(this.columnResize.col);\n this.checkFrozen();\n this.table.scenegraph.component.hideResizeCol();\n this.table.scenegraph.updateNextFrame();\n }\n startResizeCol(col: number, x: number, y: number, isRightFrozen?: boolean) {\n this.columnResize.resizing = true;\n this.columnResize.col = col;\n this.columnResize.x = x;\n this.columnResize.isRightFrozen = isRightFrozen;\n\n this.table.scenegraph.component.showResizeCol(col, y, isRightFrozen);\n\n // // 调整列宽期间清空选中清空\n // const isHasSelected = !!this.select.ranges?.length;\n // this.updateSelectPos(-1, -1);\n // this.endSelectCells(true, isHasSelected);\n this.table.scenegraph.updateNextFrame();\n }\n updateResizeCol(xInTable: number, yInTable: number) {\n updateResizeColumn(xInTable, yInTable, this);\n }\n\n endResizeRow() {\n setTimeout(() => {\n this.rowResize.resizing = false;\n }, 0);\n this.table.scenegraph.updateChartSizeForResizeRowHeight(this.rowResize.row);\n // this.checkFrozen();\n this.table.scenegraph.component.hideResizeRow();\n this.table.scenegraph.updateNextFrame();\n }\n startResizeRow(row: number, x: number, y: number, isBottomFrozen?: boolean) {\n this.rowResize.resizing = true;\n this.rowResize.row = row;\n this.rowResize.y = y;\n this.rowResize.isBottomFrozen = isBottomFrozen;\n\n this.table.scenegraph.component.showResizeRow(row, x, isBottomFrozen);\n\n // // 调整列宽期间清空选中清空\n // const isHasSelected = !!this.select.ranges?.length;\n // this.updateSelectPos(-1, -1);\n // this.endSelectCells(true, isHasSelected);\n this.table.scenegraph.updateNextFrame();\n }\n updateResizeRow(xInTable: number, yInTable: number) {\n updateResizeRow(xInTable, yInTable, this);\n }\n\n startFillSelect(x: number, y: number) {\n this.fillHandle.isFilling = true;\n this.fillHandle.startX = x;\n this.fillHandle.startY = y;\n const currentRange = this.select.ranges[this.select.ranges.length - 1];\n this.fillHandle.beforeFillMinCol = Math.min(currentRange.start.col, currentRange.end.col);\n this.fillHandle.beforeFillMinRow = Math.min(currentRange.start.row, currentRange.end.row);\n this.fillHandle.beforeFillMaxCol = Math.max(currentRange.start.col, currentRange.end.col);\n this.fillHandle.beforeFillMaxRow = Math.max(currentRange.start.row, currentRange.end.row);\n // this.table.scenegraph.updateNextFrame();\n this.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_FILL_HANDLE, {});\n }\n endFillSelect() {\n this.fillHandle.isFilling = false;\n this.fillHandle.startX = undefined;\n this.fillHandle.startY = undefined;\n this.fillHandle.directionRow = undefined;\n const currentMinCol = Math.min(this.select.ranges[0].start.col, this.select.ranges[0].end.col);\n const currentMinRow = Math.min(this.select.ranges[0].start.row, this.select.ranges[0].end.row);\n const currentMaxCol = Math.max(this.select.ranges[0].start.col, this.select.ranges[0].end.col);\n const currentMaxRow = Math.max(this.select.ranges[0].start.row, this.select.ranges[0].end.row);\n //如果选中区域没有发生变化 不触发事件\n if (\n this.fillHandle.beforeFillMinCol !== currentMinCol ||\n this.fillHandle.beforeFillMinRow !== currentMinRow ||\n this.fillHandle.beforeFillMaxCol !== currentMaxCol ||\n this.fillHandle.beforeFillMaxRow !== currentMaxRow\n ) {\n this.table.eventManager.isDraging &&\n this.table.fireListeners(TABLE_EVENT_TYPE.DRAG_FILL_HANDLE_END, { direction: this.fillHandle.direction });\n }\n this.fillHandle.beforeFillMaxCol = undefined;\n this.fillHandle.beforeFillMaxRow = undefined;\n this.fillHandle.beforeFillMinCol = undefined;\n this.fillHandle.beforeFillMinRow = undefined;\n }\n\n startMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n startMoveCol(col, row, x, y, this, event);\n }\n updateMoveCol(col: number, row: number, x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n updateMoveCol(col, row, x, y, this, event);\n }\n isMoveCol(): boolean {\n return this.columnMove.moving;\n }\n endMoveCol(): boolean {\n return endMoveCol(this);\n }\n\n checkFrozen(): boolean {\n // 判断固定列的总宽度 是否过大\n let originalFrozenColCount =\n this.table.isListTable() && !this.table.internalProps.transpose\n ? this.table.options.frozenColCount\n : this.table.isPivotChart()\n ? this.table.rowHeaderLevelCount ?? 0\n : Math.max(\n (this.table.rowHeaderLevelCount ?? 0) + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount,\n this.table.options.frozenColCount ?? 0\n );\n if (originalFrozenColCount) {\n if (originalFrozenColCount > this.table.colCount) {\n originalFrozenColCount = this.table.colCount;\n }\n if (this.table.tableNoFrameWidth - this.table.getColsWidth(0, originalFrozenColCount - 1) <= 120) {\n this.table._setFrozenColCount(0);\n this.setFrozenCol(-1);\n return false;\n } else if (this.table.frozenColCount !== originalFrozenColCount) {\n this.table._setFrozenColCount(originalFrozenColCount);\n this.setFrozenCol(originalFrozenColCount);\n return false;\n }\n }\n return true;\n }\n setFrozenCol(col: number) {\n if (col !== this.frozen.col) {\n // const oldFrozenCol = this.frozen.col;\n this.frozen.col = col;\n\n // 更新scenegraph,这里因为dealFreeze更新了table里存储的frozen信息,会影响scenegraph里的getCell\n // 因此先更新scenegraph结构再更新icon\n this.table.scenegraph.updateFrozen();\n\n // 更新icon\n this.table.scenegraph.updateFrozenIcon(0, this.table.colCount - 1);\n } else {\n this.table.scenegraph.updateFrozenIcon(0, this.table.colCount - 1);\n }\n }\n checkVerticalScrollBarEnd() {\n const totalHeight = this.table.getAllRowsHeight();\n const scrollTop = this.scroll.verticalBarPos;\n const viewHeight = this.table.tableNoFrameHeight;\n\n if (scrollTop + viewHeight >= totalHeight) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL_VERTICAL_END, {\n scrollTop,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight,\n viewWidth: this.table.tableNoFrameWidth\n });\n }\n }\n checkHorizontalScrollBarEnd() {\n const totalWidth = this.table.getAllColsWidth();\n const scrollLeft = this.scroll.horizontalBarPos;\n const viewWidth = this.table.tableNoFrameWidth;\n\n if (scrollLeft + viewWidth >= totalWidth) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL_HORIZONTAL_END, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth\n });\n }\n }\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this.table.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this.table.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this.table.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n this.scroll.verticalBarPos -= this.table.scenegraph.proxy.deltaY;\n this.table.scenegraph.proxy.deltaY = 0;\n\n // 滚动期间清空选中清空\n this.updateHoverPos(-1, -1);\n // this.updateSelectPos(-1, -1);\n\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: undefined,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n\n if (oldVerticalBarPos !== this.scroll.verticalBarPos) {\n this.checkVerticalScrollBarEnd();\n }\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this.table.getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this.table.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this.table.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this.scroll.horizontalBarPos -= this.table.scenegraph.proxy.deltaX;\n this.table.scenegraph.proxy.deltaX = 0;\n // console.log(this.table.scenegraph.bodyGroup.lastChild.attribute);\n // this.table.scenegraph.bodyGroup.lastChild.onBeforeAttributeUpdate = attr => {\n // if (attr.x) {\n // debugger;\n // }\n // };\n // 滚动期间清空选中清空\n this.updateHoverPos(-1, -1);\n // this.updateSelectPos(-1, -1);\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: undefined,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n\n if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n this.checkHorizontalScrollBarEnd();\n }\n }\n setScrollTop(top: number, event?: FederatedWheelEvent, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this.table.getAllRowsHeight();\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n top = Math.max(0, Math.min(top, totalHeight - this.table.scenegraph.height - sizeTolerance));\n top = Math.ceil(top);\n // 滚动期间清空选中清空 如果调用接口hover状态需要保留,但是如果不调用updateHoverPos透视图处于hover状态的图就不能及时更新 所以这里单独判断了isPivotChart\n if (top !== this.scroll.verticalBarPos || this.table.isPivotChart()) {\n this.updateHoverPos(-1, -1);\n }\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this.table.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this.table.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this.table.scenegraph.height);\n this.table.scenegraph.component.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n\n this.checkVerticalScrollBarEnd();\n }\n }\n setScrollLeft(left: number, event?: FederatedWheelEvent, triggerEvent: boolean = true) {\n const oldScrollLeft = this.table.scrollLeft;\n // 矫正left值范围\n const totalWidth = this.table.getAllColsWidth();\n const frozenWidth = this.table.getFrozenColsWidth();\n\n // _disableColumnAndRowSizeRound环境中,可能出现\n // getAllColsWidth/getAllRowsHeight(A) + getAllColsWidth/getAllRowsHeight(B) < getAllColsWidth/getAllRowsHeight(A+B)\n // (由于小数在取数时被省略)\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = this.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n left = Math.max(0, Math.min(left, totalWidth - this.table.scenegraph.width - sizeTolerance));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n if (left !== this.scroll.horizontalBarPos) {\n this.updateHoverPos(-1, -1);\n }\n // this.table.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this.table.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this.table.scenegraph.width);\n this.table.scenegraph.component.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this.table.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n event: (event as FederatedWheelEvent)?.nativeEvent as WheelEvent,\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n scrollHeight: this.table.theme.scrollStyle?.width,\n scrollWidth: this.table.theme.scrollStyle?.width,\n viewHeight: this.table.tableNoFrameHeight,\n viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n\n this.checkHorizontalScrollBarEnd();\n }\n }\n hideVerticalScrollBar() {\n this.table.scenegraph.component.hideVerticalScrollBar();\n }\n showVerticalScrollBar(autoHide?: boolean) {\n this.table.scenegraph.component.showVerticalScrollBar();\n if (autoHide) {\n // 滚轮触发滚动条显示后,异步隐藏\n clearTimeout(this._clearVerticalScrollBar);\n this._clearVerticalScrollBar = setTimeout(() => {\n this.table.scenegraph?.component.hideVerticalScrollBar();\n }, 1000);\n }\n }\n hideHorizontalScrollBar() {\n this.table.scenegraph.component.hideHorizontalScrollBar();\n }\n showHorizontalScrollBar(autoHide?: boolean) {\n this.table.scenegraph.component.showHorizontalScrollBar();\n if (autoHide) {\n // 滚轮触发滚动条显示后,异步隐藏\n clearTimeout(this._clearHorizontalScrollBar);\n this._clearHorizontalScrollBar = setTimeout(() => {\n this.table.scenegraph?.component.hideHorizontalScrollBar();\n }, 1000);\n }\n }\n\n triggerContextMenu(col: number, row: number, x: number, y: number) {\n if (this.menu.isShow && this.menu.x === x && this.menu.y === y) {\n this.hideMenu();\n } else {\n this.showContextMenu(col, row, x, y);\n }\n }\n\n showContextMenu(col: number, row: number, x: number, y: number) {\n if (this.table.internalProps.menu?.contextMenuItems) {\n if (this.table.internalProps.menu.renderMode === 'html') {\n // dom菜单通过LG_EVENT_TYPE.DROPDOWN_ICON_CLICK事件触发\n this.menu.isShow = true;\n } else {\n this.menu.isShow = true;\n this.menu.x = x;\n this.menu.y = y;\n this.table.scenegraph.component.menu.attach(x, y, col, row, MenuType.contextmenu);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.SHOW_MENU, { x, y, col, row, type: 'contextmenu' });\n }\n }\n\n triggerDropDownMenu(col: number, row: number, x: number, y: number, event: Event) {\n this.table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_ICON_CLICK, {\n col,\n row,\n event\n });\n if (this.menu.isShow) {\n this.hideMenu();\n } else {\n this.showDropDownMenu(col, row, x, y);\n }\n }\n\n showDropDownMenu(col: number, row: number, x: number, y: number) {\n if (this.table.internalProps.menu.renderMode === 'html') {\n // dom菜单通过LG_EVENT_TYPE.CONTEXTMENU_CELL事件触发\n this.menu.isShow = true;\n } else {\n this.menu.isShow = true;\n this.table.scenegraph.component.menu.attach(x, y, col, row, MenuType.dropDown);\n this.menu.bounds = this.table.scenegraph.component.menu.bounds as Bounds;\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.SHOW_MENU, { x, y, col, row, type: 'dropDown' });\n\n if (this.residentHoverIcon) {\n this.table.scenegraph.setIconNormalStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row\n );\n }\n // 常驻显示下拉菜单hover按钮\n const cellGroup = this.table.scenegraph.getCell(col, row);\n let icon: Icon;\n cellGroup.forEachChildren((child: Icon) => {\n if (child.attribute.funcType === IconFuncTypeEnum.dropDown) {\n icon = child;\n return true;\n }\n return false;\n });\n if (icon) {\n this.residentHoverIcon = {\n col,\n row,\n icon\n };\n this.table.scenegraph.setIconHoverStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row,\n cellGroup\n );\n // (icon as any).oldVisibleTime = icon.attribute.visibleTime;\n // icon.setAttribute('visibleTime', 'always');\n // icon.setAttribute('opacity', 1);\n this.table.scenegraph.residentHoverIcon(col, row);\n }\n }\n\n hideMenu() {\n if (this.menu.isShow) {\n this.table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null);\n this.table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null);\n this.menu.isShow = false;\n this.table.scenegraph.component.menu.detach();\n if (this.residentHoverIcon) {\n this.table.scenegraph.setIconNormalStyle(\n this.residentHoverIcon.icon,\n this.residentHoverIcon.col,\n this.residentHoverIcon.row\n );\n // this.residentHoverIcon.icon.setAttribute('visibleTime', (this.residentHoverIcon.icon as any).oldVisibleTime);\n // this.residentHoverIcon.icon.setAttribute(\n // 'opacity',\n // this.residentHoverIcon.icon.attribute.visibleTime === 'always' ? 1 : 0\n // );\n this.table.scenegraph.resetResidentHoverIcon(this.residentHoverIcon.col, this.residentHoverIcon.row);\n this.residentHoverIcon = null;\n }\n }\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.menu.dropDownMenuHighlight = cells;\n for (let i = 0; i < cells.length; i++) {\n const { col, row } = cells[i];\n const range = this.table.getCellRange(col, row);\n if (!range) {\n continue;\n }\n for (let col = range.start.col; col <= range.end.col; col++) {\n for (let row = range.start.row; row <= range.end.row; row++) {\n this.table.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n const highlights = this.menu.dropDownMenuHighlight;\n if (Array.isArray(highlights)) {\n for (let i = 0; i < highlights.length; i++) {\n const highlight = highlights[i];\n let { col, row } = highlight;\n const { field, menuKey } = highlight;\n // 这部分比较hack,需要和张宏再确认一下\n // 没有col和row时,通过field或cellHeaderPaths确定col和row\n if (typeof col !== 'number' || typeof row !== 'number') {\n if (this.table.isPivotTable() && typeof Array.isArray(field)) {\n const cellAddress = (this.table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(\n field as IDimensionInfo[]\n );\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n } else {\n const cellAddress = this.table.internalProps.layoutMap.getHeaderCellAddressByField(field as string);\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n }\n }\n\n if (isValid(col) && isValid(row) && this.table.isCellRangeEqual(colNow, rowNow, col, row)) {\n // 手动查询menuKey对应的dropDownIndex\n const headerC = this.table._getHeaderLayoutMap(col ?? colNow, row ?? rowNow);\n\n const dropDownMenu = (headerC as HeaderData).dropDownMenu || this.table.globalDropDownMenu;\n if (dropDownMenu) {\n for (let i = 0; i < dropDownMenu.length; i++) {\n const item: any = dropDownMenu[i];\n if (isObject(item) && ((item as any).menuKey || (item as any).text) === (menuKey || '') && i === index) {\n // return i === index;\n return true;\n } else if (isString(item) && item === menuKey && i === index) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n }\n triggerSort(col: number, row: number, iconMark: Icon, event: Event) {\n if (this.table.isPivotTable()) {\n // 透视表不执行sort操作\n const sortState = (this.table as PivotTableAPI).getPivotSortState(col, row);\n\n const order = sortState ? (sortState.toUpperCase() as SortOrder) : 'NORMAL';\n const new_order = order === 'ASC' ? 'DESC' : order === 'DESC' ? 'NORMAL' : 'ASC';\n // const new_order = order === 'ASC' ? 'DESC' : 'ASC';\n (this.table as PivotTable).sort(col, row, new_order);\n\n // // 触发透视表排序按钮点击\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.PIVOT_SORT_CLICK, {\n col: col,\n row: row,\n order: order || 'normal',\n dimensionInfo: (this.table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row),\n cellLocation: this.table.getCellLocation(col, row),\n event\n });\n return;\n }\n\n const previousSort = [...this.sort];\n const previousSortItem =\n this.table.internalProps.multipleSort || !previousSort.length ? null : this.sort[this.sort.length - 1];\n\n // 执行sort\n dealSort(col, row, this.table as ListTableAPI, event);\n\n const range = this.table.getCellRange(col, row);\n const currentSortItem = this.sort.find(item => item.col === range.start.col && item.row === range.start.row);\n\n const oldSortCol = this.table.internalProps.multipleSort || !previousSortItem ? null : previousSortItem.col;\n const oldSortRow = this.table.internalProps.multipleSort || !previousSortItem ? null : previousSortItem.row;\n //currentSortItem.col = col;\n //currentSortItem.row = row;\n\n const currentSortItemIndex = previousSort.findIndex(item => item.col === col && item.row === row);\n if (currentSortItemIndex >= 0) {\n previousSort.splice(currentSortItemIndex, 1);\n }\n\n // 更新icon\n this.table.scenegraph.updateSortIcon({\n col: col,\n row: row,\n iconMark,\n order: currentSortItem?.order,\n oldSortCol,\n oldSortRow,\n oldIconMark: previousSortItem?.icon\n });\n if (currentSortItem) {\n currentSortItem.icon = iconMark;\n }\n\n if (!this.table.internalProps.multipleSort) {\n previousSort.forEach((sortItem: any) => {\n this.table.scenegraph.updateSortIcon({\n col: null,\n row: null,\n iconMark: null,\n order: 'normal',\n oldSortCol: sortItem.col,\n oldSortRow: sortItem.row,\n oldIconMark: null\n });\n });\n }\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.AFTER_SORT, {\n order: currentSortItem?.order,\n field: this.table.getHeaderField(col, row),\n event\n });\n }\n\n updateSortState(sortState: SortState[]) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n for (let index = 0; index < sortState.length; index++) {\n if (\n sortState[index].field === this.sort[index]?.field &&\n sortState[sortState.length - 1].order === this.sort[index]?.order\n ) {\n return;\n }\n const oldSortCol = this.table.internalProps.multipleSort ? null : this.sort[index]?.col || null;\n const oldSortRow = this.table.internalProps.multipleSort ? null : this.sort[index]?.row || null;\n const name =\n this.sort[index]?.order === 'asc'\n ? 'sort_downward'\n : this.sort[index]?.order === 'desc'\n ? 'sort_upward'\n : 'sort_normal';\n this.setSortState(sortState.slice(0, index + 1));\n // 获取sort对应的行列位置\n const cellAddress = this.table.internalProps.layoutMap.getHeaderCellAddressByField(\n sortState[index].field as string\n );\n this.sort[index].col = cellAddress.col;\n this.sort[index].row = cellAddress.row;\n const cellGroup = this.table.scenegraph.getCell(this.sort[index].col, this.sort[index].row);\n //const iconMark = cellGroup.getChildByName(name, true);\n let iconMark: Icon;\n\n traverseObject(cellGroup, 'children', (mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n iconMark = mark;\n return true;\n }\n return false;\n });\n\n // 更新icon\n this.table.scenegraph.updateSortIcon({\n col: this.sort[index].col,\n row: this.sort[index].row,\n iconMark,\n order: this.sort[index].order,\n oldSortCol,\n oldSortRow,\n oldIconMark: this.sort[index]?.icon\n });\n }\n\n const normalHeaders: Array = [];\n (this.table.internalProps.layoutMap.columnTree as any).tree.children.forEach((item: any) => {\n if (!sortState.some((state: SortState) => state.field === item.field)) {\n normalHeaders.push(item);\n }\n });\n\n for (let index = 0; index < normalHeaders.length; index++) {\n const column = normalHeaders[index];\n this.table.scenegraph.updateSortIcon({\n col: null,\n row: null,\n iconMark: null,\n order: null,\n oldSortCol: column.startInTotal + this.table.internalProps.layoutMap.leftRowSeriesNumberColumnCount ?? 0,\n oldSortRow: column.level,\n oldIconMark: null\n });\n }\n }\n\n triggerFreeze(col: number, row: number, iconMark: Icon) {\n if (this.table.isPivotTable() || (this.table as ListTable).transpose) {\n return;\n }\n // let oldFrowzenCol = this.frowzen.col;\n // let oldFrowzenRow = this.frowzen.row;\n\n // 更新frozen\n dealFreeze(col, row, this.table);\n if ((this.table as any).hasListeners(PIVOT_TABLE_EVENT_TYPE.FREEZE_CLICK)) {\n const fields: ColumnData[] = (this.table as ListTable).internalProps.layoutMap.columnObjects.slice(0, col + 1);\n this.table.fireListeners(PIVOT_TABLE_EVENT_TYPE.FREEZE_CLICK, {\n col: col,\n row: row,\n fields: fields.reduce((pre: any, cur: any) => pre.concat(cur.field), []),\n colCount: this.table.frozenColCount\n });\n }\n // // 更新scenegraph,这里因为dealFreeze更新了table里存储的frozen信息,会影响scenegraph里的getCell\n // // 因此先更新scenegraph结构再更新icon\n // this.table.scenegraph.updateFrozen(this.frowzen.col);\n\n // // 更新icon\n // this.table.scenegraph.updateFrozenIcon(oldFrowzenCol, this.frowzen.col);\n\n this.frozen.icon = iconMark;\n }\n\n updateCursor(mode: string = 'default') {\n this.table.getElement().style.cursor = mode;\n }\n\n updateDrillState(\n dimensionKey: string,\n title: string,\n drillDown: boolean,\n drillUp: boolean,\n col: number,\n row: number\n ) {\n this.drill.dimensionKey = dimensionKey;\n this.drill.title = title;\n this.drill.drillDown = drillDown;\n this.drill.drillUp = drillUp;\n this.drill.col = col;\n this.drill.row = row;\n updateDrill(col, row, drillDown, drillUp, this.table);\n }\n\n updateSparklineHoverPose(col: number, row: number, x: number, y: number) {\n if (this.sparkLine.col !== -1 && this.sparkLine.row !== -1) {\n clearChartHover(this.sparkLine.col, this.sparkLine.row, this.table);\n }\n let isUpdated = false;\n if (col !== -1 && row !== -1) {\n isUpdated = updateChartHover(col, row, x, y, this.table);\n }\n if (isUpdated) {\n this.sparkLine.col = col;\n this.sparkLine.row = row;\n } else {\n this.sparkLine.col = -1;\n this.sparkLine.row = -1;\n }\n }\n setCheckedState(col: number, row: number, field: string | number, checked: boolean | 'indeterminate') {\n return setCheckedState(col, row, field, checked, this);\n }\n setHeaderCheckedState(field: string | number, checked: boolean | 'indeterminate') {\n return setHeaderCheckedState(field, checked, this);\n }\n\n //#region CheckedState 状态维护\n\n /**\n * 创建cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\n syncCheckedState(col: number, row: number, field: string | number, checked: boolean): boolean | 'indeterminate' {\n return syncCheckedState(col, row, field, checked, this);\n }\n /**\n * 创建表头cell节点时同步状态 如果状态缓存有则用 如果没有则设置缓存\n * @param col\n * @param row\n * @param field\n * @param checked\n * @returns\n */\n // syncHeaderCheckedState(field: string | number, checked: boolean): boolean | 'indeterminate' {\n // if (isValid(this.headerCheckedState[field])) {\n // return this.headerCheckedState[field];\n // } else if (typeof checked === 'function') {\n // return undefined;\n // } else if (isValid(checked)) {\n // this.headerCheckedState[field] = checked;\n // } else if (this.checkedState?.length > 0) {\n // const isAllChecked = this.updateHeaderCheckedState(field);\n // return isAllChecked;\n // }\n // return this.headerCheckedState[field];\n // }\n /**\n * 初始化check状态\n * @param records\n */\n initCheckedState(records: any[]) {\n return initCheckedState(records, this);\n }\n /**\n * 更新header单元checked的状态,依据当前列每一个数据checked的状态。\n * @param field\n * @returns\n */\n updateHeaderCheckedState(field: string | number, col: number, row: number): boolean | 'indeterminate' {\n return updateHeaderCheckedState(field, this, col, row);\n }\n /**\n * setRecords的时候虽然调用了initCheckedState 进行了初始化 但当每个表头的checked状态都用配置了的话 初始化不会遍历全部数据\n * @param records\n */\n initLeftRecordsCheckState(records: any[]) {\n return initLeftRecordsCheckState(records, this);\n }\n //#endregion\n\n setRadioState(\n col: number,\n row: number,\n field: string | number,\n radioType: 'column' | 'cell',\n indexInCell: number | undefined\n ) {\n setRadioState(col, row, field, radioType, indexInCell, this);\n }\n\n syncRadioState(\n col: number,\n row: number,\n field: string | number,\n radioType: 'column' | 'cell',\n indexInCell: number | undefined,\n isChecked: boolean\n ) {\n return syncRadioState(col, row, field, radioType, indexInCell, isChecked, this);\n }\n\n changeCheckboxAndRadioOrder(sourceIndex: number, targetIndex: number) {\n if (this.checkedState.size) {\n changeCheckboxOrder(sourceIndex, targetIndex, this);\n }\n if (this.radioState.length) {\n changeRadioOrder(sourceIndex, targetIndex, this);\n }\n }\n\n setCustomSelectRanges(\n customSelectRanges: {\n range: CellRange;\n style: CustomSelectionStyle;\n }[]\n ) {\n deletaCustomSelectRanges(this);\n addCustomSelectRanges(customSelectRanges, this);\n }\n}\n","import { isFunction } from '@visactor/vutils';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { Env } from '../tools/env';\nimport { regUrl } from '../tools/global';\nimport type { LinkColumnDefine, MousePointerCellEvent } from '../ts-types';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport type { IImageColumnBodyDefine } from '../ts-types/list-table/define/image-define';\n\nexport function bindMediaClick(table: BaseTableAPI): void {\n if (Env.mode === 'browser') {\n // table.hasMedia = false;\n\n table.on(TABLE_EVENT_TYPE.CLICK_CELL, (e: MousePointerCellEvent) => {\n //如果目前是在某个icon上,如收起展开按钮 则不进行其他点击逻辑\n const { col, row } = e;\n\n if (e.target.type === 'image' && (e.target as any).role && (e.target as any).role.startsWith('icon')) {\n // click icon\n return;\n }\n let cellType;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n cellType = table.isPivotTable()\n ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : (table.getHeaderDefine(col, row) as HeaderData).headerType;\n } else {\n cellType = table.getBodyColumnType(col, row);\n }\n const columnDefine = table.isHeader(col, row)\n ? table.getHeaderDefine(col, row)\n : table.getBodyColumnDefine(col, row);\n const cellValue = table.getCellValue(col, row);\n const cellOriginValue = table.getCellOriginValue(col, row);\n if (cellType === 'link') {\n const linkJump = (columnDefine as LinkColumnDefine).linkJump !== false;\n if (!linkJump) {\n return;\n }\n\n // 点击链接,打开相应页面\n const templateLink = (columnDefine as LinkColumnDefine).templateLink;\n const linkDetect = (columnDefine as LinkColumnDefine).linkDetect !== false;\n let url;\n if (templateLink) {\n // 如果有模板链接,使用模板\n const rowData = table.getCellOriginRecord(col, row);\n if (rowData.vtableMerge) {\n // group title\n return;\n }\n const data = Object.assign(\n {\n __value: cellValue,\n __dataValue: cellOriginValue\n },\n rowData\n );\n if (isFunction(templateLink)) {\n url = templateLink(data, col, row, table);\n } else {\n const re = /\\{\\s*(\\S+?)\\s*\\}/g;\n url = templateLink.replace(re, (matchs: string, key: string) => {\n matchs;\n return (data as any)[key];\n });\n }\n } else if (!linkDetect) {\n url = cellValue;\n } else if (regUrl.test(cellValue)) {\n // 没有模板链接,使用单元格内的字符串\n url = cellValue;\n } else {\n return;\n }\n\n if (!url) {\n return;\n }\n\n const linkTarget = (columnDefine as LinkColumnDefine).linkTarget;\n const linkWindowFeatures = (columnDefine as LinkColumnDefine).linkWindowFeatures;\n window.open(url, linkTarget, linkWindowFeatures);\n } else if (cellType === 'image') {\n // 点击图片,打开放大图片\n const { clickToPreview } = columnDefine as IImageColumnBodyDefine;\n if (clickToPreview === false) {\n return;\n }\n\n // 开启蒙版\n const overlay = document.createElement('div');\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.backgroundColor = 'rgba(30, 30, 30, 0.4)';\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n overlay.style.overflow = 'hidden';\n overlay.style.zIndex = '9999';\n\n overlay.addEventListener('click', e => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n // overlay.addEventListener('pointermove', (e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // });\n // overlay.addEventListener('mousemove', (e) => {\n // e.stopPropagation();\n // e.preventDefault();\n // });\n // 创建图片\n const image = new Image();\n image.src = cellValue;\n image.style.maxWidth = '80%';\n image.style.maxHeight = '80%';\n overlay.appendChild(image);\n\n document.body.appendChild(overlay);\n } else if (cellType === 'video') {\n // 点击视频,弹出播放窗口\n const { clickToPreview } = columnDefine as IImageColumnBodyDefine;\n if (clickToPreview === false) {\n return;\n }\n\n // 开启蒙版\n const overlay = document.createElement('div');\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.backgroundColor = 'rgba(30, 30, 30, 0.4)';\n overlay.style.display = 'flex';\n overlay.style.justifyContent = 'center';\n overlay.style.alignItems = 'center';\n overlay.style.overflow = 'hidden';\n overlay.style.zIndex = '9999';\n\n overlay.addEventListener('click', e => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n\n // 创建视频\n const video = document.createElement('video');\n video.src = cellValue;\n video.style.maxWidth = '80%';\n video.style.maxHeight = '80%';\n video.setAttribute('preload', 'auto');\n video.setAttribute('controls', 'true');\n overlay.appendChild(video);\n\n document.body.appendChild(overlay);\n }\n });\n }\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { DrillMenuEventInfo, MousePointerCellEvent, PivotTableAPI } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\n\nexport function bindDrillEvent(table: BaseTableAPI) {\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, (e: MousePointerCellEvent) => {\n //是否需要显示出上钻下钻按钮\n // if (!table.isPivotTable()) {\n // return;\n // }\n const { col, row } = e;\n if (col === -1 || row === -1) {\n return;\n }\n const dimension = (table.internalProps.layoutMap as PivotHeaderLayoutMap).getHeaderDimension(col, row);\n if (dimension?.drillDown || dimension?.drillUp) {\n table.stateManager.updateDrillState(\n dimension.dimensionKey,\n dimension.title,\n dimension.drillDown,\n dimension.drillUp,\n col,\n row\n );\n } else {\n table.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, (e: MousePointerCellEvent) => {\n table.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n });\n}\n\nexport function drillClick(table: BaseTableAPI) {\n table.fireListeners(PIVOT_TABLE_EVENT_TYPE.DRILLMENU_CLICK, table.stateManager.drill as DrillMenuEventInfo);\n}\n\nexport function checkHaveDrill(table: PivotTableAPI) {\n const rowsDefine = (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowsDefine;\n const columnsDefine = (table.internalProps.layoutMap as PivotHeaderLayoutMap).columnsDefine;\n for (let i = 0; i < rowsDefine.length; i++) {\n const row = rowsDefine[i];\n if (typeof row !== 'string' && (row.drillDown || row.drillUp)) {\n return true;\n }\n }\n for (let i = 0; i < columnsDefine.length; i++) {\n const column = columnsDefine[i];\n if (typeof column !== 'string' && (column.drillDown || column.drillUp)) {\n return true;\n }\n }\n return false;\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { MousePointerCellEvent } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function bindSparklineHoverEvent(table: BaseTableAPI) {\n if (table.eventManager.bindSparklineHoverEvent) {\n return;\n }\n\n // 判断是否有sparkline 类型\n let hasSparkLine = false;\n if (table.isPivotTable()) {\n const layoutMap = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n hasSparkLine = layoutMap.indicatorsDefine.some(indicator => {\n return typeof indicator !== 'string' && indicator.cellType === 'sparkline';\n });\n } else {\n const layoutMap = table.internalProps.layoutMap as SimpleHeaderLayoutMap;\n hasSparkLine = layoutMap.columnObjects.some(column => {\n return column.cellType === 'sparkline' || typeof column.cellType === 'function';\n });\n }\n\n if (!hasSparkLine) {\n return;\n }\n\n table.eventManager.bindSparklineHoverEvent = true;\n\n table.on(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, (e: MousePointerCellEvent) => {\n const { col, row, x, y } = e;\n const type = table.getBodyColumnType(col, row);\n if (type !== 'sparkline') {\n table.stateManager.updateSparklineHoverPose(-1, -1, 0, 0);\n }\n table.stateManager.updateSparklineHoverPose(col, row, x, y);\n });\n\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, (e: MousePointerCellEvent) => {\n table.stateManager.updateSparklineHoverPose(-1, -1, 0, 0);\n });\n}\n","import type { StateManager } from '../state/state';\nimport { InteractionState } from '../ts-types';\nimport type { FederatedWheelEvent } from './../vrender';\n\n/**\n *\n * @param event\n * @param state\n * @param isWheelEvent 是否是由鼠标或者触摸板原生滚动事件触发进入?\n */\nexport function handleWhell(event: FederatedWheelEvent, state: StateManager, isWheelEvent: boolean = true) {\n let { deltaX, deltaY } = event;\n // 如果按住了shift 则进行横向滚动 纵向不滚动\n if (event.shiftKey && event.deltaY) {\n //mac电脑按住shift 鼠标滚动deltaX和deltaY是自动互换的,所以此逻辑只针对windows电脑有效及mac触摸板有效\n deltaX = deltaY;\n deltaY = 0;\n }\n const [optimizedDeltaX, optimizedDeltaY] = optimizeScrollXY(deltaX, deltaY, { horizontal: 1, vertical: 1 });\n if (optimizedDeltaX || optimizedDeltaY) {\n if (state.interactionState !== InteractionState.scrolling) {\n state.updateInteractionState(InteractionState.scrolling);\n }\n }\n\n if (optimizedDeltaX) {\n state.setScrollLeft(state.scroll.horizontalBarPos + optimizedDeltaX, event);\n state.showHorizontalScrollBar(true);\n }\n if (optimizedDeltaY) {\n state.setScrollTop(state.scroll.verticalBarPos + optimizedDeltaY, event);\n state.showVerticalScrollBar(true);\n }\n isWheelEvent && state.resetInteractionState(state.interactionStateBeforeScroll);\n if (\n event.nativeEvent?.cancelable &&\n (state.table.internalProps.overscrollBehavior === 'none' ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, state)))\n ) {\n event.nativeEvent.preventDefault();\n }\n}\n\ninterface ScrollSpeedRatio {\n horizontal?: number;\n vertical?: number;\n}\n\n/**\n * 优化滚动方向,对于小角度的滚动,固定为一个方向\n * @param x\n * @param y\n * @param ratio\n */\nfunction optimizeScrollXY(x: number, y: number, ratio: ScrollSpeedRatio): [number, number] {\n const ANGLE = 2; // 调参 根据斜率来调整xy方向的划分\n const angle = Math.abs(x / y);\n\n // 经过滚动优化之后的 x, y\n const deltaX = angle <= 1 / ANGLE ? 0 : x;\n const deltaY = angle > ANGLE ? 0 : y;\n\n return [Math.ceil(deltaX * (ratio.horizontal ?? 0)), Math.ceil(deltaY * (ratio.vertical ?? 0))];\n}\n\nexport function isVerticalScrollable(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n if (totalHeight === 0) {\n return false;\n }\n return !isScrollToTop(deltaY, state) && !isScrollToBottom(deltaY, state);\n}\n\nexport function isHorizontalScrollable(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n if (totalWidth === 0) {\n return false;\n }\n return !isScrollToLeft(deltaX, state) && !isScrollToRight(deltaX, state);\n}\n\nfunction isScrollToTop(deltaY: number, state: StateManager) {\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY <= 0 && state.scroll.verticalBarPos < 1;\n}\n\nfunction isScrollToBottom(deltaY: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalHeight = state.table.getAllRowsHeight() - state.table.scenegraph.height;\n return totalHeight !== 0 && deltaY >= 0 && Math.abs(state.scroll.verticalBarPos - totalHeight) < 1 + sizeTolerance;\n}\n\nfunction isScrollToLeft(deltaX: number, state: StateManager) {\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX <= 0 && state.scroll.horizontalBarPos < 1;\n}\n\nfunction isScrollToRight(deltaX: number, state: StateManager) {\n // 这里加入tolerance,避免出现无用滚动\n const sizeTolerance = state.table.options.customConfig?._disableColumnAndRowSizeRound ? 1 : 0;\n\n const totalWidth = state.table.getAllColsWidth() - state.table.scenegraph.width;\n return totalWidth !== 0 && deltaX >= 0 && Math.abs(state.scroll.horizontalBarPos - totalWidth) < 1 + sizeTolerance;\n}\n\nexport class InertiaScroll {\n friction: number;\n lastTime: number;\n speedX: number;\n speedY: number;\n stateManager: StateManager;\n runingId: number;\n scrollHandle: (dx: number, dy: number) => void;\n constructor(stateManager: StateManager) {\n this.stateManager = stateManager;\n }\n setScrollHandle(scrollHandle: (dx: number, dy: number) => void) {\n this.scrollHandle = scrollHandle;\n }\n\n startInertia(speedX: number, speedY: number, friction: number) {\n this.lastTime = Date.now();\n this.speedX = speedX;\n this.speedY = speedY;\n this.friction = friction;\n if (!this.runingId) {\n this.runingId = requestAnimationFrame(this.inertia.bind(this));\n }\n }\n inertia() {\n const now = Date.now();\n const dffTime = now - this.lastTime;\n let stopped = true;\n const f = Math.pow(this.friction, dffTime / 16);\n const newSpeedX = f * this.speedX;\n const newSpeedY = f * this.speedY;\n let dx = 0;\n let dy = 0;\n if (Math.abs(newSpeedX) > 0.05) {\n stopped = false;\n dx = ((this.speedX + newSpeedX) / 2) * dffTime;\n }\n if (Math.abs(newSpeedY) > 0.05) {\n stopped = false;\n dy = ((this.speedY + newSpeedY) / 2) * dffTime;\n }\n this.scrollHandle?.(dx, dy);\n if (stopped) {\n this.runingId = null;\n return;\n }\n this.lastTime = now;\n this.speedX = newSpeedX;\n this.speedY = newSpeedY;\n\n this.runingId = requestAnimationFrame(this.inertia.bind(this));\n }\n endInertia() {\n cancelAnimationFrame(this.runingId);\n this.runingId = null;\n }\n isInertiaScrolling() {\n return !!this.runingId;\n }\n}\n","import { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { ListTableAPI } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport function fireMoveColEventListeners(table: BaseTableAPI, endMoveColSuccess: boolean, e: Event) {\n if (\n endMoveColSuccess &&\n table.stateManager.columnMove?.colSource !== -1 &&\n table.stateManager.columnMove?.rowSource !== -1 &&\n table.stateManager.columnMove?.colTarget !== -1 &&\n table.stateManager.columnMove?.rowTarget !== -1\n ) {\n // 下面触发CHANGE_HEADER_POSITION 区别于pointerup\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION)) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, {\n target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n source: {\n col: table.stateManager.columnMove.colSource,\n row: table.stateManager.columnMove.rowSource\n },\n event: e\n });\n }\n } else if (!endMoveColSuccess) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL)) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, {\n target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n source: {\n col: table.stateManager.columnMove.colSource,\n row: table.stateManager.columnMove.rowSource\n },\n event: e\n });\n }\n }\n}\n","import type { IEventTarget, FederatedPointerEvent, FederatedWheelEvent } from './../../vrender';\nimport { Gesture, vglobal } from './../../vrender';\nimport type {\n ListTableAPI,\n MousePointerCellEvent,\n MousePointerMultiCellEvent,\n MousePointerSparklineEvent,\n RadioColumnDefine\n} from '../../ts-types';\nimport { IconFuncTypeEnum, InteractionState } from '../../ts-types';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet, regIndexReg } from '../util';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { isValid } from '@visactor/vutils';\nimport { getIconAndPositionFromTarget } from '../../scenegraph/utils/icon';\nimport { cellInRanges, getPromiseValue } from '../../tools/helper';\nimport { Rect } from '../../tools/Rect';\nimport type { EventManager } from '../event';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { IIconGraphicAttribute } from '../../scenegraph/graphic/icon';\nimport { getCellMergeInfo } from '../../scenegraph/utils/get-cell-merge';\nimport type { CheckBox, CheckboxAttributes, Radio } from '@visactor/vrender-components';\nimport { handleWhell } from '../scroll';\nimport { fireMoveColEventListeners } from '../helper';\nexport function bindTableGroupListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n\n table.scenegraph.tableGroup.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n const lastX = table.eventManager.LastPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastPointerXY?.y ?? e.y;\n table.eventManager.LastPointerXY = { x: e.x, y: e.y };\n // const eventArgsSet: SceneEvent = (table as any).getCellEventArgsSet(e);\n if (eventManager.touchSetTimeout) {\n // 移动端事件特殊处理\n clearTimeout(eventManager.touchSetTimeout);\n eventManager.touchSetTimeout = undefined;\n }\n const eventArgsSet = getCellEventArgsSet(e);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n\n // 触发MOUSEMOVE_TABLE\n if (eventArgsSet.eventArgs && (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n\n if (\n stateManager.interactionState === InteractionState.grabing &&\n !(table as ListTableAPI).editorManager?.editingEditor\n ) {\n if (Math.abs(lastX - e.x) + Math.abs(lastY - e.y) >= 1) {\n if (stateManager.isResizeCol() || stateManager.isResizeRow()) {\n /* do nothing */\n } else if (stateManager.isMoveCol()) {\n eventManager.dealColumnMover(eventArgsSet);\n } else if (stateManager.isFillHandle()) {\n eventManager.dealFillSelect(eventArgsSet, true);\n } else {\n table.options.select?.disableDragSelect || eventManager.dealTableSelect(eventArgsSet, true);\n }\n }\n return;\n } else if (\n !table.options.select?.disableDragSelect &&\n table.eventManager.isDraging &&\n stateManager.isSelecting() &&\n !(table as ListTableAPI).editorManager?.editingEditor\n ) {\n eventManager.dealTableSelect(eventArgsSet, true);\n }\n // 更新列宽调整pointer\n // if (stateManager.isResizeCol() || eventManager.checkColumnResize(eventArgsSet)) {\n // // 更新填充柄pointer\n // if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n // stateManager.updateCursor('crosshair');\n // } else {\n // stateManager.updateCursor('col-resize');\n // }\n // } else {\n // stateManager.updateCursor();\n // }\n\n const cellGoup: any = e.path.find(node => (node as any).role === 'cell');\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL)) {\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (\n // cellGoup?.role === 'cell' && // 这里去掉这个判断 处理当鼠标移动到滚动条上 也需要触发leave事件\n table.stateManager.hover.cellPos.col !== -1 &&\n table.stateManager.hover.cellPos.row !== -1 &&\n (cellGoup?.col !== table.stateManager.hover.cellPos.col ||\n cellGoup?.row !== table.stateManager.hover.cellPos.row)\n ) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, {\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row,\n cellRange: table.getCellRangeRelativeRect({\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target\n });\n }\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEENTER_CELL)) {\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (\n cellGoup?.role === 'cell' &&\n isValid(cellGoup.col) &&\n isValid(cellGoup.row) &&\n (cellGoup.col !== table.stateManager.hover.cellPos.col ||\n cellGoup.row !== table.stateManager.hover.cellPos.row) &&\n (cellGoup.col !== table.stateManager.hover.cellPosContainHeader?.col ||\n cellGoup.row !== table.stateManager.hover.cellPosContainHeader?.row)\n ) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_CELL, {\n col: cellGoup.col,\n row: cellGoup.row,\n cellRange: table.getCellRangeRelativeRect({\n col: cellGoup.col,\n row: cellGoup.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n }\n\n eventManager.dealIconHover(eventArgsSet);\n eventManager.dealTableHover(eventArgsSet);\n\n // 触发MOUSEMOVE_CELL\n if (eventArgsSet.eventArgs && (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEMOVE_CELL)) {\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n event: e.nativeEvent,\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('pointerout', (e: FederatedPointerEvent) => {\n const eventArgsSet = getCellEventArgsSet(e);\n const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n if (cellGoup?.role === 'table') {\n eventManager.dealTableHover();\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('pointerover', (e: FederatedPointerEvent) => {\n const eventArgsSet = getCellEventArgsSet(e);\n const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n // console.log('pointerover', cellGoup);\n\n if (\n cellGoup &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL) &&\n cellGoup.type === 'symbol'\n ) {\n const cellGroup = e.composedPath().find(p => (p as any).roll === 'cell');\n if (cellGroup) {\n const { col, row } = cellGroup as unknown as Group;\n const eventInfo: MousePointerSparklineEvent = {\n col,\n row,\n field: table.getHeaderField(col, row),\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: table.getBodyColumnDefine(col, row).title,\n cellRange: table.getCellRelativeRect(col, row),\n event: e.nativeEvent,\n sparkline: {\n pointData: undefined // chartPoint.pointData,\n },\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: eventArgsSet?.eventArgs?.target\n };\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEOVER_CHART_SYMBOL, eventInfo);\n }\n }\n //MOUSEENTER_CELL 不能在这里触发 引发在单元格内移动会触发多次的问题【迷你图的单元格中】\n // if ((table as any).hasListeners(DG_EVENT_TYPE.MOUSEENTER_CELL)) {\n // const eventArgsSet = getCellEventArgsSet(e);\n // const cellGoup = eventArgsSet?.eventArgs?.target as unknown as Group;\n // console.log('hover cell', table.stateManager.hover.cellPos);\n // if (\n // cellGoup?.role === 'cell' &&\n // (cellGoup.col !== table.stateManager.hover.cellPos.col ||\n // cellGoup.row !== table.stateManager.hover.cellPos.row)\n // ) {\n // table.fireListeners(DG_EVENT_TYPE.MOUSEENTER_CELL, {\n // col: cellGoup.col,\n // row: cellGoup.row,\n // cellRange: table.getCellRangeRelativeRect({\n // col: cellGoup.col,\n // row: cellGoup.row,\n // }),\n // scaleRatio:\n // table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // event: e.nativeEvent,\n // });\n // }\n // }\n });\n // table.scenegraph.tableGroup.addEventListener('pointerenter', (e: FederatedPointerEvent) => {\n // console.log('pointerenter', e.target);\n // 触发MOUSEOVER_CELL\n // const eventArgsSet = getCellEventArgsSet(e);\n // if ((eventArgsSet?.eventArgs?.target as unknown as Group)?.role === 'cell') {\n // table.fireListeners(DG_EVENT_TYPE.MOUSEENTER_CELL, {\n // col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n // row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n // cellRange: table.getCellRangeRelativeRect({\n // col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n // row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n // }),\n // scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // event: e.nativeEvent,\n // });\n // }\n // });\n table.scenegraph.tableGroup.addEventListener('pointerenter', (e: FederatedPointerEvent) => {\n if (\n (table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.horizontalVisible === 'focus') ||\n (!table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.showHorizontalScrollBar();\n }\n if (\n (table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.verticalVisible === 'focus') ||\n (!table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.showVerticalScrollBar();\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEENTER_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n table.scenegraph.tableGroup.addEventListener('pointerleave', (e: FederatedPointerEvent) => {\n //resize 列宽 当鼠标离开table也需要继续响应\n if (\n !stateManager.isResizeCol() &&\n !stateManager.isResizeRow() &&\n !stateManager.isMoveCol() &&\n !stateManager.isSelecting()\n ) {\n stateManager.updateInteractionState(InteractionState.default);\n stateManager.updateCursor();\n }\n\n if (\n (table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.horizontalVisible === 'focus') ||\n (!table.theme.scrollStyle.horizontalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.hideHorizontalScrollBar();\n }\n if (\n (table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.verticalVisible === 'focus') ||\n (!table.theme.scrollStyle.verticalVisible && table.theme.scrollStyle.visible === 'focus')\n ) {\n stateManager.hideVerticalScrollBar();\n }\n\n // 移动到table外部 如移动到表格空白区域 移动到表格浏览器外部\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL)) {\n if (table.stateManager.hover.cellPos.col !== -1 && table.stateManager.hover.cellPos.row !== -1) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, {\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row,\n cellRange: table.getCellRangeRelativeRect({\n col: table.stateManager.hover.cellPos.col,\n row: table.stateManager.hover.cellPos.row\n }),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n event: e.nativeEvent,\n target: undefined\n });\n }\n }\n eventManager.dealTableHover();\n const target = e.target;\n if (target && !target.isDescendantsOf(table.scenegraph.tableGroup)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n // /**\n // * 两种场景会触发这里的pointerupoutside TODO 第二种并不应该触发,待vrender修改后再整理这里的逻辑\n // * 1. 鼠标down和up的场景树节点不一样\n // * 2. 点击到非stage的(非canvas) 其他dom节点\n // */\n // table.scenegraph.tableGroup.addEventListener('pointerupoutside', (e: FederatedPointerEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // if (stateManager.menu.isShow && (eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon) {\n // setTimeout(() => {\n // // conside page scroll\n // if (!table.internalProps.menuHandler.pointInMenuElement(e.client.x, e.client.y)) {\n // stateManager.menu.isShow && stateManager.hideMenu();\n // }\n // }, 0);\n // }\n // // 同pointerup中的逻辑\n // if (stateManager.isResizeCol()) {\n // endResizeCol(table);\n // } else if (stateManager.isResizeRow()) {\n // endResizeRow(table);\n // } else if (stateManager.isMoveCol()) {\n // const endMoveColSuccess = table.stateManager.endMoveCol();\n // if (\n // endMoveColSuccess &&\n // table.stateManager.columnMove?.colSource !== -1 &&\n // table.stateManager.columnMove?.rowSource !== -1 &&\n // table.stateManager.columnMove?.colTarget !== -1 &&\n // table.stateManager.columnMove?.rowTarget !== -1\n // ) {\n // // 下面触发CHANGE_HEADER_POSITION 区别于pointerup\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION)) {\n // table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, {\n // target: { col: table.stateManager.columnMove.colTarget, row: table.stateManager.columnMove.rowTarget },\n // source: {\n // col: table.stateManager.columnMove.colSource,\n // row: table.stateManager.columnMove.rowSource\n // },\n // event: e.nativeEvent\n // });\n // }\n // }\n // } else if (stateManager.isSelecting()) {\n // if (table.stateManager.select?.ranges?.length) {\n // const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n // const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n // table.stateManager.endSelectCells();\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n // const cellsEvent: MousePointerMultiCellEvent = {\n // event: e.nativeEvent,\n // cells: [],\n // col: lastCol,\n // row: lastRow,\n // scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n // target: undefined\n // };\n // cellsEvent.cells = table.getSelectedCellInfos();\n // table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n // }\n // }\n // }\n // });\n\n const globalPointerupCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n });\n }\n };\n const globalPointerdownCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target) && !table.internalProps.menuHandler.containElement(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n //点击到表格外部不需要取消选中状态\n if (table.options.select?.outsideClickDeselect) {\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect();\n stateManager.endSelectCells(true, isHasSelected);\n }\n });\n }\n };\n //释放时最好是通过vglobal.removeEventListener TODO\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'document',\n callback: globalPointerupCallback\n });\n //释放时最好是通过vglobal.removeEventListener TODO\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'document',\n callback: globalPointerdownCallback\n });\n // 整体全局监听事件\n vglobal.addEventListener('pointerup', globalPointerupCallback);\n vglobal.addEventListener('pointerdown', globalPointerdownCallback);\n table.scenegraph.tableGroup.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n // table.eventManager.isPointerDownOnTable = true;\n // setTimeout(() => {\n // table.eventManager.isPointerDownOnTable = false;\n // }, 0);\n table.eventManager.isDown = true;\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n // // 避免在调整列宽等拖拽操作触发外层组件的拖拽逻辑;\n // // 如果鼠标位置在表格内(加调整列宽的热区),将pointerdown事件阻止冒泡(如果阻止mousedown需要结合isPointerDownOnTable来判断)\n // e.stopPropagation();\n\n // e.preventDefault(); //为了阻止mousedown事件的触发,后续:不能这样写,会阻止table聚焦\n table.eventManager.LastPointerXY = { x: e.x, y: e.y };\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n eventManager.downIcon = undefined;\n if (stateManager.interactionState !== InteractionState.default) {\n return;\n }\n //处理当点击到的不是图表上时 更新图表的状态为空\n if (table.isPivotChart() && eventArgsSet?.eventArgs?.target.type !== 'chart') {\n table.scenegraph.updateChartState(null);\n }\n // 处理menu\n if ((eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon) {\n // 点击在menu外,且不是下拉菜单的icon,移除menu\n stateManager.hideMenu();\n }\n // 如果点击到了图表上 后续的逻辑忽略掉 以免重绘了图表 丢失vchart图表的交互\n if (eventArgsSet?.eventArgs?.target.type === 'chart') {\n return;\n }\n\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e.nativeEvent);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n\n const hitIcon = (eventArgsSet?.eventArgs?.target as any)?.role?.startsWith('icon')\n ? eventArgsSet.eventArgs.target\n : (e.target as any).role?.startsWith('icon')\n ? e.target\n : undefined;\n eventManager.downIcon = hitIcon;\n if (!hitIcon || (hitIcon.attribute as IIconGraphicAttribute).interactive === false) {\n if (e.pointerType === 'touch') {\n // 移动端事件特殊处理\n eventManager.touchEnd = false;\n eventManager.touchSetTimeout = setTimeout(() => {\n eventManager.isTouchdown = false;\n eventManager.touchMove = true;\n // 处理列宽调整\n if (\n !eventManager.touchEnd &&\n (eventManager.checkColumnResize(eventArgsSet, true) || eventManager.checkRowResize(eventArgsSet, true))\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理column mover\n if (!eventManager.touchEnd && eventManager.chechColumnMover(eventArgsSet)) {\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理单元格选择\n if (eventManager.dealTableSelect(eventArgsSet) && !eventManager.touchEnd) {\n // 先执行单选逻辑,再更新为grabing模式\n // stateManager.interactionState = 'grabing';\n stateManager.updateInteractionState(InteractionState.grabing);\n // console.log('DRAG_SELECT_START');\n }\n }, 500);\n // 这里处理成hover 这样移动端 当点击到带有下拉菜单dropdown的单元格时 那个icon才能绘制出来。可以测试example的menu示例\n eventManager.dealTableHover(eventArgsSet);\n } else {\n // 处理列宽调整\n if (\n !eventManager.checkCellFillhandle(eventArgsSet) &&\n (eventManager.checkColumnResize(eventArgsSet, true) || eventManager.checkRowResize(eventArgsSet, true))\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n table.scenegraph.updateChartState(null);\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理column mover\n if (eventManager.chechColumnMover(eventArgsSet)) {\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n\n // 处理填充功能\n if (eventManager.checkCellFillhandle(eventArgsSet, true) && eventManager.dealFillSelect(eventArgsSet)) {\n // table.eventManager.LastRange = {\n // start: table.stateManager.select.ranges[0].start,\n // end: {\n // col: (getCellEventArgsSet(e).eventArgs.target as unknown as Group).col,\n // row: (getCellEventArgsSet(e).eventArgs.target as unknown as Group).row\n // }\n // };\n // table.eventManager.SelectData = table.getCopyValue();\n stateManager.updateInteractionState(InteractionState.grabing);\n return;\n }\n // 处理单元格选择\n if (eventManager.dealTableSelect(eventArgsSet)) {\n // 先执行单选逻辑,再更新为grabing模式\n // stateManager.interactionState = 'grabing';\n stateManager.updateInteractionState(InteractionState.grabing);\n // console.log('DRAG_SELECT_START');\n }\n }\n } else if ((hitIcon.attribute as any).funcType === IconFuncTypeEnum.dragReorder) {\n stateManager.startMoveCol(\n eventArgsSet.eventArgs.col,\n eventArgsSet.eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgsSet.eventArgs?.event?.nativeEvent\n );\n stateManager.updateInteractionState(InteractionState.grabing);\n }\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_CELL)) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventArgsSet.eventArgs) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs.mergeInfo\n });\n }\n }\n });\n });\n // 注意和pointertap事件的处理 vrender中的事件系统: 是先触发pointerup 如果是点击到的场景树图元节点则会继续触发pointertap 否则不触发pointertap\n table.scenegraph.tableGroup.addEventListener('pointerup', (e: FederatedPointerEvent) => {\n console.log('tableGroup', 'pointerup');\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n if (stateManager.interactionState === 'grabing') {\n // stateManager.interactionState = 'default';\n stateManager.updateInteractionState(InteractionState.default);\n // eventManager._resizing = false;\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e.nativeEvent);\n } else if (stateManager.isSelecting()) {\n table.stateManager.endSelectCells();\n if (table.stateManager.isFillHandle()) {\n table.stateManager.endFillSelect();\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n table.eventManager.isDraging &&\n eventArgsSet.eventArgs &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)\n ) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e.nativeEvent,\n cells: [],\n col: (eventArgsSet.eventArgs.target as unknown as Group).col,\n row: (eventArgsSet.eventArgs.target as unknown as Group).row,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n } else if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n // scroll end\n }\n\n // console.log('DRAG_SELECT_END');\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEUP_CELL)) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventArgsSet.eventArgs) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEUP_CELL, {\n col: eventArgsSet.eventArgs.col,\n row: eventArgsSet.eventArgs.row,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n });\n }\n }\n });\n\n table.scenegraph.tableGroup.addEventListener('rightdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // 右键点击\n if (eventArgsSet.eventArgs) {\n stateManager.triggerContextMenu(\n eventArgsSet.eventArgs.col,\n eventArgsSet.eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y\n );\n\n //处理监听的右键事件\n const { col, row } = eventArgsSet.eventArgs;\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CELL)) {\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n if (cellInRanges(table.stateManager.select.ranges, col, row)) {\n // 用户右键点击已经选中的区域\n // const { start, end } = eventManager.selection.range;\n cellsEvent.cells = table.getSelectedCellInfos();\n } else {\n // 用户右键点击新单元格\n cellsEvent.cells = [[cellInfo]];\n }\n\n table.fireListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CELL, cellsEvent);\n }\n }\n });\n // 注意和pointerup事件的处理 vrender中的事件系统: 是先触发pointerup 如果是点击到的场景树图元节点则会继续触发pointertap 否则不触发pointertap\n table.scenegraph.tableGroup.addEventListener('pointertap', (e: FederatedPointerEvent) => {\n console.log('tableGroup', 'pointertap');\n if (table.stateManager.columnResize.resizing) {\n return;\n }\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n !eventManager.touchMove &&\n e.button === 0 &&\n eventArgsSet.eventArgs &&\n (table as any).hasListeners(TABLE_EVENT_TYPE.CLICK_CELL)\n ) {\n const { col, row } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n federatedEvent: e,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo\n };\n\n table.fireListeners(TABLE_EVENT_TYPE.CLICK_CELL, cellsEvent);\n }\n if (table.stateManager.columnResize.resizing || table.stateManager.columnMove.moving) {\n return;\n }\n // if (table.stateManager.fillHandle.isFilling) {\n // table.stateManager.endFillSelect();\n // return;\n // }\n\n eventManager.dealIconClick(e, eventArgsSet);\n if (!eventArgsSet?.eventArgs) {\n return;\n }\n if (eventManager.touchSetTimeout) {\n // 通过这个变量判断非drag鼠标拖拽状态,就不再增加其他变量isDrag了(touchSetTimeout如果拖拽过会变成undefined pointermove事件有置为undefined)\n if (e.pointerType === 'touch') {\n // 移动端事件特殊处理\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (eventManager.touchSetTimeout) {\n clearTimeout(eventManager.touchSetTimeout);\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect(eventArgsSet);\n stateManager.endSelectCells(true, isHasSelected);\n eventManager.touchSetTimeout = undefined;\n }\n }\n }\n });\n // stage 的pointerdown监听\n table.scenegraph.stage.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (\n !eventArgsSet.eventArgs?.target ||\n (eventArgsSet.eventArgs?.target as any) !== stateManager.residentHoverIcon?.icon\n ) {\n stateManager.hideMenu();\n }\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e.nativeEvent);\n getPromiseValue(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n const hitIcon = (e.target as any).role?.startsWith('icon') ? e.target : undefined;\n eventManager.downIcon = hitIcon;\n // 处理列宽调整 这里和tableGroup.addEventListener('pointerdown' 逻辑一样\n if (\n !hitIcon &&\n !eventManager.checkCellFillhandle(eventArgsSet) &&\n !stateManager.columnResize.resizing &&\n eventManager.checkColumnResize(eventArgsSet, true)\n ) {\n // eventManager.startColumnResize(e);\n // eventManager._resizing = true;\n table.scenegraph.updateChartState(null);\n stateManager.updateInteractionState(InteractionState.grabing);\n\n // 调整列宽最后一列有外扩了8px 需要将其考虑到table中 需要触发下MOUSEDOWN_TABLE事件\n const { eventArgs } = eventArgsSet;\n if (!eventArgs?.targetCell) {\n const cell = table.getCellAt(\n eventArgsSet.abstractPos.x - table.theme.columnResize.resizeHotSpotSize / 2,\n eventArgsSet.abstractPos.y\n );\n if (cell) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n }\n }\n return;\n }\n });\n });\n table.scenegraph.stage.addEventListener('pointerup', (e: FederatedPointerEvent) => {\n // 处理列宽调整 这里和tableGroup.addEventListener('pointerup' 逻辑一样\n if (stateManager.interactionState === 'grabing') {\n // stateManager.interactionState = 'default';\n stateManager.updateInteractionState(InteractionState.default);\n // eventManager._resizing = false;\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n }\n }\n });\n // click outside\n table.scenegraph.stage.addEventListener('pointertap', (e: FederatedPointerEvent) => {\n const target = e.target;\n if (\n // 如果是鼠标点击到canvas空白区域 则取消选中状态\n !table.eventManager.isDraging &&\n target &&\n (target.isDescendantsOf(table.scenegraph.stage) || (target as any).stage === target) && //判断节点未被删除 后面这个是为了判断是stage本身\n !target.isDescendantsOf(table.scenegraph.tableGroup)\n // &&\n // (target as any) !== table.scenegraph.tableGroup &&\n // (target as any) !== table.scenegraph.stage\n ) {\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n const isHasSelected = !!stateManager.select.ranges?.length;\n // 点击空白区域取消选中\n if (table.options.select?.blankAreaClickDeselect ?? true) {\n eventManager.dealTableSelect();\n }\n stateManager.endSelectCells(true, isHasSelected);\n\n stateManager.updateCursor();\n table.scenegraph.updateChartState(null);\n } else if (table.eventManager.isDraging && stateManager.isSelecting()) {\n // 如果鼠标拖拽后是否 则结束选中\n stateManager.endSelectCells();\n }\n });\n table.scenegraph.stage.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n // 处理列宽调整 这里和tableGroup.addEventListener('pointermove' 逻辑一样\n if (stateManager.isResizeCol() || eventManager.checkColumnResize(eventArgsSet)) {\n // 更新填充柄pointer\n if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n stateManager.updateCursor('crosshair');\n } else {\n stateManager.updateCursor('col-resize');\n }\n } else if (stateManager.isResizeRow() || eventManager.checkRowResize(eventArgsSet)) {\n // 更新填充柄pointer\n if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {\n stateManager.updateCursor('crosshair');\n } else {\n stateManager.updateCursor('row-resize');\n }\n } else if (stateManager.isMoveCol()) {\n // 拖拽位置已经在updateMoveCol方法中添加了响应的鼠标样式\n } else {\n stateManager.updateCursor();\n }\n });\n // table.scenegraph.tableGroup.addEventListener('dbltap', (e: FederatedPointerEvent) => {\n // console.log('tableGroup', 'dbltap');\n // dblclickHandler(e);\n // });\n // table.scenegraph.tableGroup.addEventListener('dblclick', (e: FederatedPointerEvent) => {\n // console.log('tableGroup', 'dblclick');\n // dblclickHandler(e);\n // });\n\n table.scenegraph.tableGroup.addEventListener('checkbox_state_change', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n\n const mergeRange = getCellMergeInfo(table, col, row);\n if (mergeRange) {\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((checkbox: CheckBox) => {\n if (checkbox.name === 'checkbox') {\n checkbox.setAttributes({\n checked: (e.target.attribute as CheckboxAttributes).checked,\n indeterminate: (e.target.attribute as CheckboxAttributes).indeterminate\n });\n }\n });\n }\n }\n }\n\n const cellsEvent: MousePointerCellEvent & { checked: boolean } = {\n ...cellInfo,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo,\n checked: (e.detail as unknown as { checked: boolean }).checked\n };\n\n if (table.isHeader(col, row)) {\n //点击的表头部分的checkbox 需要同时处理表头和body单元格的状态\n table.stateManager.setHeaderCheckedState(\n cellInfo.field as string | number,\n (e.detail as unknown as { checked: boolean }).checked\n );\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n table.scenegraph.updateCheckboxCellState(col, row, (e.detail as unknown as { checked: boolean }).checked);\n }\n } else {\n //点击的是body单元格的checkbox 处理本单元格的状态维护 同时需要检查表头是否改变状态\n table.stateManager.setCheckedState(\n col,\n row,\n cellInfo.field as string | number,\n (e.detail as unknown as { checked: boolean }).checked\n );\n const cellType = table.getCellType(col, row);\n if (cellType === 'checkbox') {\n const oldHeaderCheckedState = table.stateManager.headerCheckedState[cellInfo.field as string | number];\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState(\n cellInfo.field as string | number,\n col,\n row\n );\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.CHECKBOX_STATE_CHANGE, cellsEvent);\n\n table.scenegraph.updateNextFrame();\n });\n\n table.scenegraph.tableGroup.addEventListener('radio_checked', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row, target } = eventArgsSet.eventArgs;\n const cellInfo = table.getCellInfo(col, row);\n const indexInCell: string | undefined = regIndexReg.exec(target.id as string)?.[1];\n\n const mergeRange = getCellMergeInfo(table, col, row);\n if (mergeRange) {\n // update all radio in merge cells\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id === target.id) {\n radio.setAttributes({\n checked: true\n });\n }\n });\n }\n }\n }\n\n // update other radio\n const define = table.getBodyColumnDefine(col, row) as RadioColumnDefine;\n const radioCheckType = define.radioCheckType || 'column';\n\n if (radioCheckType === 'cell') {\n // update other radio in this cell\n if (mergeRange) {\n // update all radio in merge cells\n for (let col = mergeRange.start.col; col <= mergeRange.end.col; col++) {\n for (let row = mergeRange.start.row; row <= mergeRange.end.row; row++) {\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n }\n }\n } else {\n // update all radio in single cell\n const cellGroup = table.scenegraph.getCell(col, row);\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n }\n } else if (radioCheckType === 'column') {\n // update other radio in this column\n const columnGroup = table.scenegraph.getColGroup(col);\n columnGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((radio: Radio) => {\n if (radio.name === 'radio' && radio.id !== target.id) {\n radio.setAttributes({\n checked: false\n });\n }\n });\n });\n }\n\n // update state\n const radioIndexInCell = indexInCell ? Number(indexInCell) : undefined;\n table.stateManager.setRadioState(col, row, cellInfo.field as string | number, radioCheckType, radioIndexInCell);\n\n // trigger event\n const cellsEvent: MousePointerCellEvent & { radioIndexInCell: number | undefined } = {\n ...cellInfo,\n event: e.nativeEvent,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo,\n radioIndexInCell\n };\n table.fireListeners(TABLE_EVENT_TYPE.RADIO_STATE_CHANGE, cellsEvent);\n\n table.scenegraph.updateNextFrame();\n });\n table.scenegraph.stage.addEventListener('wheel', (e: FederatedWheelEvent) => {\n const legend: any = e.path.find(node => (node as any).name === 'legend');\n if (!legend) {\n table.editorManager?.completeEdit();\n if (table.eventManager._enableTableScroll) {\n handleWhell(e, stateManager);\n }\n }\n });\n}\nexport function bindGesture(eventManager: EventManager) {\n const table = eventManager.table;\n eventManager.gesture = new Gesture(table.scenegraph.tableGroup as unknown as IEventTarget, {\n tap: {\n interval: 300\n }\n });\n eventManager.gesture.on('doubletap', e => {\n console.log('doubletap', e);\n // e.preventDefault();\n dblclickHandler(e, table);\n });\n}\nexport function endResizeCol(table: BaseTableAPI) {\n table.stateManager.endResizeCol();\n // textStick 依赖了这个事件 所以一定要触发RESIZE_COLUMN_END\n // if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN_END)) {\n // RESIZE_COLUMN_END事件触发,返回所有列宽\n const columns = [];\n // 返回所有列宽信息\n for (let col = 0; col < table.colCount; col++) {\n columns.push(table.getColWidth(col));\n }\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, {\n col: table.stateManager.columnResize.col,\n colWidths: columns\n });\n // }\n}\n\nexport function endResizeRow(table: BaseTableAPI) {\n table.stateManager.endResizeRow();\n\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW_END, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n}\n\nfunction dblclickHandler(e: FederatedPointerEvent, table: BaseTableAPI) {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n let col = -1;\n let row = -1;\n if (eventArgsSet.eventArgs) {\n col = eventArgsSet.eventArgs.col;\n row = eventArgsSet.eventArgs.row;\n }\n const value = table.getCellValue(col, row);\n\n const bounds = eventArgsSet.eventArgs?.targetCell?.globalAABBBounds;\n bounds &&\n table.internalProps.focusControl.setFocusRect(\n new Rect(bounds.x1 + table.scrollLeft, bounds.y1 + table.scrollTop, bounds.x2 - bounds.x1, bounds.y2 - bounds.y1),\n value\n );\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DBLCLICK_CELL)) {\n const cellInfo = table.getCellInfo(col, row);\n let icon;\n let position;\n if (eventArgsSet.eventArgs?.target) {\n const iconInfo = getIconAndPositionFromTarget(eventArgsSet.eventArgs?.target);\n if (iconInfo) {\n icon = iconInfo.icon;\n position = iconInfo.position;\n }\n }\n const cellsEvent: MousePointerMultiCellEvent = {\n ...cellInfo,\n event: e.nativeEvent,\n federatedEvent: e,\n cells: [],\n targetIcon: icon\n ? {\n name: icon.name,\n position: position,\n funcType: (icon as any).attribute.funcType\n }\n : undefined,\n target: eventArgsSet?.eventArgs?.target,\n mergeCellInfo: eventArgsSet?.eventArgs?.mergeInfo\n };\n table.fireListeners(TABLE_EVENT_TYPE.DBLCLICK_CELL, cellsEvent);\n }\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport { throttle } from '../../tools/util';\nimport type { ListTableAPI } from '../../ts-types';\nimport { InteractionState } from '../../ts-types';\nimport type { EventManager } from '../event';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet } from '../util';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\n\nexport function bindScrollBarListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const scenegraph = table.scenegraph;\n\n // 监听滚动条组件pointover事件\n scenegraph.component.vScrollBar.addEventListener('pointerover', (e: any) => {\n stateManager.showVerticalScrollBar();\n });\n scenegraph.component.hScrollBar.addEventListener('pointerover', (e: any) => {\n stateManager.showHorizontalScrollBar();\n });\n scenegraph.component.vScrollBar.addEventListener('pointerout', (e: any) => {\n if (stateManager.interactionState === InteractionState.scrolling) {\n return;\n }\n stateManager.hideVerticalScrollBar();\n });\n scenegraph.component.hScrollBar.addEventListener('pointerout', (e: any) => {\n if (stateManager.interactionState === InteractionState.scrolling) {\n return;\n }\n stateManager.hideHorizontalScrollBar();\n });\n scenegraph.component.vScrollBar.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n scenegraph.table.stateManager.updateCursor('default');\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成可拖拽\n });\n scenegraph.component.vScrollBar.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成拖拽状态\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.vScrollBar.addEventListener('scrollDown', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n scenegraph.table.eventManager.isDown = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n scenegraph.table.stateManager.hideMenu();\n (scenegraph.table as ListTableAPI).editorManager?.completeEdit();\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.vScrollBar.addEventListener('pointerup', () => {\n stateManager.fastScrolling = false;\n scenegraph.table.eventManager.isDraging = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.vScrollBar.addEventListener('pointerupoutside', () => {\n stateManager.fastScrolling = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.vScrollBar.addEventListener('scrollUp', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.isDraging = false;\n });\n\n scenegraph.component.hScrollBar.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n scenegraph.table.stateManager.updateCursor('default');\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成可拖拽\n });\n scenegraph.component.hScrollBar.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n e.stopPropagation(); //防止冒泡到stage上 检测到挨着列间隔线判断成拖拽状态\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.hScrollBar.addEventListener('scrollDown', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n scenegraph.table.eventManager.isDown = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n scenegraph.table.stateManager.hideMenu();\n (scenegraph.table as ListTableAPI).editorManager?.completeEdit();\n if ((scenegraph.table as any).hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {\n scenegraph.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {\n event: e.nativeEvent\n });\n }\n });\n scenegraph.component.hScrollBar.addEventListener('pointerup', () => {\n stateManager.fastScrolling = false;\n scenegraph.table.eventManager.isDraging = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.hScrollBar.addEventListener('pointerupoutside', () => {\n stateManager.fastScrolling = false;\n if (stateManager.interactionState === InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.default);\n }\n });\n scenegraph.component.hScrollBar.addEventListener('scrollUp', (e: FederatedPointerEvent) => {\n scenegraph.table.eventManager.isDraging = false;\n });\n const throttleVerticalWheel = throttle(stateManager.updateVerticalScrollBar, 20);\n const throttleHorizontalWheel = throttle(stateManager.updateHorizontalScrollBar, 20);\n\n // 监听滚动条组件scroll事件\n scenegraph.component.vScrollBar.addEventListener('scrollDrag', (e: any) => {\n if (scenegraph.table.eventManager.isDown) {\n scenegraph.table.eventManager.isDraging = true;\n }\n stateManager.fastScrolling = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n const ratio = e.detail.value[0] / (1 - e.detail.value[1] + e.detail.value[0]);\n throttleVerticalWheel(ratio, e);\n });\n\n scenegraph.component.hScrollBar.addEventListener('scrollDrag', (e: any) => {\n if (scenegraph.table.eventManager.isDown) {\n scenegraph.table.eventManager.isDraging = true;\n }\n stateManager.fastScrolling = true;\n if (stateManager.interactionState !== InteractionState.scrolling) {\n stateManager.updateInteractionState(InteractionState.scrolling);\n }\n // stateManager.table.scenegraph.proxy.isSkipProgress = true;\n const ratio = e.detail.value[0] / (1 - e.detail.value[1] + e.detail.value[0]);\n throttleHorizontalWheel(ratio);\n // setTimeout(() => {\n // console.log('isSkipProgress', false);\n // stateManager.table.scenegraph.proxy.isSkipProgress = false;\n // }, 10);\n });\n}\n","import { isNode } from './helper';\n\nexport let defaultPixelRatio = 1;\n/*\n * @Description: 设置像素比\n */\nexport function getPixelRatio(): number {\n if (isNode) {\n defaultPixelRatio = 1;\n } else {\n defaultPixelRatio = Math.ceil(window.devicePixelRatio || 1);\n if (defaultPixelRatio > 1 && defaultPixelRatio % 2 !== 0) {\n // 非整数倍的像素比,向上取整\n defaultPixelRatio += 1;\n }\n }\n return defaultPixelRatio;\n}\ngetPixelRatio();\n","import { isValid } from '@visactor/vutils';\nimport type { EventHandler } from '../EventHandler';\nimport type { ListTableConstructorOptions, MousePointerMultiCellEvent } from '../../ts-types';\nimport { InteractionState, type KeydownEvent, type ListTableAPI } from '../../ts-types';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { handleWhell } from '../scroll';\nimport { browser } from '../../tools/helper';\nimport type { EventManager } from '../event';\nimport { getPixelRatio } from '../../tools/pixel-ratio';\nimport { endResizeCol, endResizeRow } from './table-group';\nimport { isCellDisableSelect } from '../../state/select/is-cell-select-highlight';\nimport { fireMoveColEventListeners } from '../helper';\nexport function bindContainerDomListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const handler: EventHandler = table.internalProps.handler;\n\n // handler.on(table.getElement(), 'mousedown', (e: MouseEvent) => {\n // if (table.eventManager.isPointerDownOnTable) {\n // e.stopPropagation();\n // }\n // });\n\n handler.on(table.getElement(), 'blur', (e: MouseEvent) => {\n eventManager.dealTableHover();\n // eventManager.dealTableSelect();\n });\n\n // 监听键盘事件\n handler.on(table.getElement(), 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'a' && (e.ctrlKey || e.metaKey)) {\n if (table.keyboardOptions?.selectAllOnCtrlA) {\n // 处理全选\n e.preventDefault();\n //全选\n eventManager.deelTableSelectAll();\n }\n } else if (\n stateManager.select.cellPos.col >= 0 &&\n stateManager.select.cellPos.row >= 0 &&\n (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n if (\n (!(table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor) ||\n table.options.keyboardOptions?.moveSelectedCellOnArrowKeys === false\n ) {\n // 编辑单元格状态下 如果没有开启方向键切换cell 则退出 。方向键可以在编辑input内移动光标\n return;\n }\n e.preventDefault();\n // 如果不加这句话 外部监听了键盘事件 会影响表格本身的移动格子功能,例如自定义日历编辑器的日期选择pickday.js\n //可能会引起其他问题 例如自定义实现了日历编辑器 里面切换日期左右键可能失效,这个时候建议监听VTable实例的事件keydown\n e.stopPropagation();\n let targetCol;\n let targetRow;\n\n // 处理向上箭头键\n if (e.key === 'ArrowUp') {\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = 0;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n }\n } else if (e.key === 'ArrowDown') {\n // 处理向下箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = table.rowCount - 1;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n }\n } else if (e.key === 'ArrowLeft') {\n // 处理向左箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = 0;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n }\n } else if (e.key === 'ArrowRight') {\n // 处理向右箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = table.colCount - 1;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n }\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n if (\n (table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n // 开启了方向键切换编辑单元格 并且当前已经在编辑状态下 切换到下一个需先退出再进入下个单元格的编辑\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager.startEditCell(targetCol, targetRow);\n }\n }\n } else if (e.key === 'Escape') {\n (table as ListTableAPI).editorManager?.cancelEdit();\n table.getElement().focus();\n } else if (e.key === 'Enter') {\n // 如果按enter键 可以结束当前的编辑 或开启编辑选中的单元格(仅限单选)\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n // 如果是结束当前编辑,且有主动监听keydown事件,则先触发keydown事件,之后再结束编辑\n handleKeydownListener(e);\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n }\n // 直接返回,不再触发最后的keydown监听事件相关代码\n return;\n }\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n } else if (\n (table.options.keyboardOptions?.editCellOnEnter ?? true) &&\n (table.stateManager.select.ranges?.length ?? 0) === 1\n ) {\n // 如果开启按enter键进入编辑的配置 且当前有选中的单元格 则进入编辑(仅限单选)\n const startCol = table.stateManager.select.ranges[0].start.col;\n const startRow = table.stateManager.select.ranges[0].start.row;\n const endCol = table.stateManager.select.ranges[0].end.col;\n const endRow = table.stateManager.select.ranges[0].end.row;\n if (startCol === endCol && startRow === endRow) {\n if ((table as ListTableAPI).getEditor(startCol, startRow)) {\n (table as ListTableAPI).editorManager.startEditCell(startCol, startRow);\n }\n }\n }\n } else if (e.key === 'Tab') {\n if (table.options.keyboardOptions?.moveFocusCellOnTab ?? true) {\n if (stateManager.select.cellPos.col >= 0 && stateManager.select.cellPos.row >= 0) {\n const isLastCell =\n stateManager.select.cellPos.col === table.colCount - 1 &&\n stateManager.select.cellPos.row === table.rowCount - 1;\n\n if (isLastCell) {\n return;\n }\n\n e.preventDefault();\n\n let targetCol;\n let targetRow;\n if (stateManager.select.cellPos.col === table.colCount - 1) {\n targetRow = Math.min(table.rowCount - 1, stateManager.select.cellPos.row + 1);\n targetCol = table.rowHeaderLevelCount;\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = stateManager.select.cellPos.col + 1;\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow);\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n (table as ListTableAPI).editorManager.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager.startEditCell(targetCol, targetRow);\n }\n }\n }\n }\n } else if (!(e.ctrlKey || e.metaKey || e.shiftKey)) {\n const editCellTrigger = (table.options as ListTableConstructorOptions).editCellTrigger;\n if (\n (editCellTrigger === 'keydown' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('keydown'))) &&\n !table.editorManager?.editingEditor\n ) {\n const allowedKeys = /^[a-zA-Z0-9+\\-*\\/%=.,\\s]$/; // 允许的键值正则表达式\n if (e.key.match(allowedKeys)) {\n table.editorManager.startEditCell(stateManager.select.cellPos.col, stateManager.select.cellPos.row, '');\n }\n }\n }\n handleKeydownListener(e);\n });\n /**\n * 处理主动注册的keydown事件\n * @param e\n */\n function handleKeydownListener(e: KeyboardEvent) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.KEYDOWN)) {\n const cellsEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e,\n // cells: table.getSelectedCellInfos(),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.KEYDOWN, cellsEvent);\n }\n }\n\n handler.on(table.getElement(), 'copy', async (e: KeyboardEvent) => {\n if (table.keyboardOptions?.copySelected) {\n const data = table.getCopyValue();\n if (isValid(data)) {\n e.preventDefault();\n //检查是否有权限\n const permissionState = await navigator.permissions.query({ name: 'clipboard-write' as PermissionName });\n if (navigator.clipboard?.write && permissionState.state === 'granted') {\n // 将复制的数据转为html格式\n const setDataToHTML = (data: string) => {\n const result = [''];\n const META_HEAD = [\n '', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n ''\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&') // replace & with & to prevent XSS attacks\n .replace(/'/g, ''') // replace ' with ' to prevent XSS attacks\n .replace(//g, '>') // replace > with > to prevent XSS attacks\n .replace(/\\n/g, '
') // replace \\n with
to prevent XSS attacks\n .replace(/((\\r\\n|\\n)?|\\r\\n|\\n)/g, '
\\r\\n') // replace
with
\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `${' '.repeat(substring.length - 1)} `;\n }) // replace 2 or more spaces with   to prevent XSS attacks\n .replace(/\\t/gi, ' '); // replace \\t with to prevent XSS attacks\n\n rowValues.push(`
`);\n });\n result.push('', ...rowValues, '');\n\n if (rowIndex === rows.length - 1) {\n result.push('');\n }\n });\n result.push('
${parsedCellData}
');\n return [META_HEAD, result.join('')].join('');\n };\n const dataHTML = setDataToHTML(data);\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([dataHTML], { type: 'text/html' }),\n 'text/plain': new Blob([data], { type: 'text/plain' })\n })\n ]);\n } else {\n if (browser.IE) {\n (window as any).clipboardData.setData('Text', data); // IE\n } else {\n (e as any).clipboardData.setData('text/plain', data); // Chrome, Firefox\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: table.stateManager.select.ranges,\n copyData: data\n });\n }\n }\n });\n handler.on(table.getElement(), 'paste', (e: any) => {\n if (table.keyboardOptions?.pasteValueToCell && (table as ListTableAPI).changeCellValues) {\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n return;\n }\n if (table.stateManager.select.ranges?.length > 0) {\n if (navigator.clipboard?.read) {\n // 读取剪切板数据\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n // 优先处理 html 格式数据\n if (item.types.includes('text/html')) {\n pasteHtmlToTable(item);\n } else if (item.types.length === 1 && item.types[0] === 'text/plain') {\n pasteTextToTable(item);\n } else {\n // 其他情况\n }\n }\n });\n } else {\n const ranges = table.stateManager.select.ranges;\n const col = Math.min(ranges[0].start.col, ranges[0].end.col);\n const row = Math.min(ranges[0].start.row, ranges[0].end.row);\n\n const clipboardData = e.clipboardData || window.Clipboard;\n const pastedData = clipboardData.getData('text');\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n const values: (string | number)[][] = [];\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n });\n (table as ListTableAPI).changeCellValues(col, row, values);\n }\n }\n }\n });\n\n handler.on(table.getElement(), 'contextmenu', (e: any) => {\n if (table.eventOptions?.preventDefaultContextMenu !== false) {\n e.preventDefault();\n }\n });\n\n if (!table.options.canvas) {\n handler.on(table.getContainer(), 'resize', e => {\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (table.autoFillWidth || table.autoFillHeight) {\n table.editorManager?.completeEdit();\n }\n if (!isValid(table.options.pixelRatio)) {\n table.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n table.resize();\n }\n });\n }\n\n // const regex = /]*>(.*?)<\\/tr>/gs; // 匹配标签及其内容\n const regex = /]*>([\\s\\S]*?)<\\/tr>/g; // for webpack3\n // const cellRegex = /]*>(.*?)<\\/td>/gs; // 匹配标签及其内容\n const cellRegex = /]*>([\\s\\S]*?)<\\/td>/g; // for webpack3\n\n function pasteHtmlToTable(item: ClipboardItem) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n item.getType('text/html').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n // 解析html数据\n if (pastedData && /(标签中的内容\n const cellMatches: RegExpMatchArray[] = Array.from(rowContent.matchAll(cellRegex)); // 获取标签中的内容\n const rowValues = cellMatches.map(cellMatch => {\n return (\n cellMatch[1]\n .replace(/(<(?!br)([^>]+)>)/gi, '') // 除了
标签以外的所有 HTML 标签都替换为空字符串\n .replace(/[\\r\\n]?/gim, '\\n') // 将字符串中的
标签以及其后可能存在的空白字符和斜杠都替换为换行符 \\n\n // .replace(/
/g, '\\n') // 替换
标签为换行符\n // .replace(/<(?:.|\\n)*?>/gm, '') // 去除HTML标签\n //将字符串中的 HTML 实体字符转换为原始的字符\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/ /gi, '\\t')\n .replace(/ /g, ' ')\n );\n // .trim(); // 去除首尾空格\n });\n values.push(rowValues);\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n }\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n } else {\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n if (item.types.includes('text/plain')) {\n item.getType('text/plain').then((blob: Blob) => {\n blob.text().then(_pasteValue);\n });\n }\n }\n });\n }\n });\n });\n }\n\n function _pasteValue(pastedData: string) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n }\n function pasteTextToTable(item: ClipboardItem) {\n // 如果只有 'text/plain'\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n // const values: (string | number)[][] = [];\n item.getType('text/plain').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n let values: (string | number)[][] = [];\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n if (cell.includes('\\n')) {\n cell = cell\n .replace(/^\"(.*)\"$/, '$1') // 将字符串开头和结尾的双引号去除,并保留双引号内的内容\n .replace(/[\"]*/g, match => new Array(Math.floor(match.length / 2)).fill('\"').join('')); // 连续出现的双引号替换为一半数量的双引号\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n (table as ListTableAPI).changeCellValues(col, row, values, true);\n });\n });\n }\n function handlePasteValues(\n values: (string | number)[][],\n rowCount: number,\n colCount: number,\n selectedRowCount: number,\n selectedColCount: number\n ) {\n if (selectedColCount > colCount || selectedRowCount > rowCount) {\n if (selectedColCount % colCount === 0 && selectedRowCount % rowCount === 0) {\n const toPasteValues: (string | number)[][] = [];\n // 在目标区域中循环遍历,将复制的值逐个粘贴到每个单元格中\n for (let i = 0; i < selectedRowCount; i++) {\n const rowPasteValue: (string | number)[] = [];\n toPasteValues.push(rowPasteValue);\n for (let j = 0; j < selectedColCount; j++) {\n const copiedRow = i % rowCount;\n const copiedCol = j % colCount;\n rowPasteValue.push(values[copiedRow][copiedCol]);\n }\n }\n return toPasteValues;\n }\n return values;\n }\n return values;\n }\n // 有被阻止冒泡的场景 就触发不到这里的事件了 所以这个LastBodyPointerXY变量的赋值在scrollbar的down事件也进行了处理\n const globalPointerdownCallback = (e: MouseEvent) => {\n // console.log('body pointerdown');\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n table.eventManager.isDown = true;\n };\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'body',\n callback: globalPointerdownCallback\n });\n document.body.addEventListener('pointerdown', globalPointerdownCallback);\n\n const globalPointerupOutsideCallback = (e: MouseEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (stateManager.menu.isShow) {\n setTimeout(() => {\n // conside page scroll\n if (!table.internalProps.menuHandler.pointInMenuElement(e.clientX, e.clientY)) {\n stateManager.menu.isShow && stateManager.hideMenu();\n }\n }, 0);\n }\n // 同pointerup中的逻辑\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (stateManager.isSelecting()) {\n if (table.stateManager.select?.ranges?.length) {\n const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n table.stateManager.endSelectCells();\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e,\n cells: [],\n col: lastCol,\n row: lastRow,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: undefined\n };\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n }\n };\n\n const globalPointerupCallback = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target !== table.canvas) {\n globalPointerupOutsideCallback(e);\n }\n table.eventManager.LastBodyPointerXY = null;\n // console.log('body pointerup', table.eventManager.isDown, table.eventManager.isDraging);\n table.eventManager.isDown = false;\n table.eventManager.isDraging = false;\n table.eventManager.inertiaScroll.endInertia();\n if (stateManager.interactionState === 'grabing' && stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.interactionState === 'grabing' && stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'document',\n callback: globalPointerupCallback\n });\n document.addEventListener('pointerup', globalPointerupCallback);\n\n const globalPointermoveCallback = (e: MouseEvent) => {\n if (table.eventManager.isDown && table.eventManager.LastBodyPointerXY) {\n const lastX = table.eventManager.LastBodyPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastBodyPointerXY?.y ?? e.y;\n if (Math.abs(lastX - e.x) > 1 || Math.abs(lastY - e.y) > 1) {\n table.eventManager.isDraging = true;\n }\n }\n // 注释掉。因为: 这里pointermove太敏感了 点击快的时候 可能动了1px这里也会执行到 就影响到下面选中不触发的问题。下面pointermove就有这段逻辑,这里先去掉\n // if (eventManager.touchSetTimeout) {\n // clearTimeout(eventManager.touchSetTimeout);\n // console.log('eventManager.touchSetTimeout', eventManager.touchSetTimeout);\n // eventManager.touchSetTimeout = undefined;\n // }\n // const eventArgsSet = getCellEventArgsSet(e);\n const { x, y } = table._getMouseAbstractPoint(e, false);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n if (stateManager.interactionState === InteractionState.grabing) {\n if (stateManager.isResizeCol()) {\n eventManager.dealColumnResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN, {\n col: table.stateManager.columnResize.col,\n colWidth: table.getColWidth(table.stateManager.columnResize.col)\n });\n }\n } else if (stateManager.isResizeRow()) {\n eventManager.dealRowResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_ROW)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n }\n }\n }\n const isSelecting = table.stateManager.isSelecting();\n\n if (\n eventManager._enableTableScroll &&\n eventManager.isDraging &&\n isSelecting &&\n table.stateManager.select.ranges?.length > 0\n ) {\n // 检测鼠标是否离开了table\n const drawRange = table.getDrawRange();\n // const element = table.getElement();\n // const { x: rootLeft, y: rootTop, width: rootWidth } = element.getBoundingClientRect();\n // const tableLeft = drawRange.left + rootLeft;\n // const tableTop = drawRange.top + rootTop;\n // const tableRight = tableLeft + drawRange.width;\n // const tableBottom = tableTop + drawRange.height;\n // console.log('x, y', x, y);\n const topFrozenRowHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowHeight = table.getBottomFrozenRowsHeight();\n const leftFrozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const startCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].start;\n if (table.isSeriesNumber(startCell.col, startCell.row)) {\n //如果是鼠标落到了序号列 不自动滚动\n return;\n }\n const endCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end;\n const canScrollY =\n (table.isFrozenRow(startCell.row) === false || table.isFrozenRow(endCell.row) === false) &&\n table.getAllRowsHeight() > table.tableNoFrameHeight;\n const canScrollX =\n (table.isFrozenColumn(startCell.col) === false || table.isFrozenColumn(endCell.col) === false) &&\n table.getAllColsWidth() > table.tableNoFrameWidth;\n if (\n ((y > drawRange.bottom - bottomFrozenRowHeight || y < drawRange.top + topFrozenRowHeight) && canScrollY) ||\n ((x > drawRange.right - rightFrozenColsWidth || x < drawRange.left + leftFrozenColsWidth) && canScrollX)\n ) {\n table.eventManager.scrollXSpeed = 0;\n table.eventManager.scrollYSpeed = 0;\n let bottom = false;\n let top = false;\n let right = false;\n let left = false;\n if (\n y > drawRange.bottom - bottomFrozenRowHeight &&\n canScrollY &&\n table.scrollTop + table.tableNoFrameHeight < table.getAllRowsHeight()\n ) {\n bottom = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.bottom + bottomFrozenRowHeight) / 50;\n } else if (y < drawRange.top + topFrozenRowHeight && canScrollY && table.scrollTop > 0) {\n top = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.top - topFrozenRowHeight) / 50;\n }\n\n if (\n x > drawRange.right - rightFrozenColsWidth &&\n canScrollX &&\n table.scrollLeft + table.tableNoFrameWidth < table.getAllColsWidth()\n ) {\n right = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.right + rightFrozenColsWidth) / 50;\n } else if (x < drawRange.left + leftFrozenColsWidth && canScrollX && table.scrollLeft > 0) {\n left = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.left - leftFrozenColsWidth) / 50;\n }\n table.eventManager.inertiaScroll.startInertia(\n table.eventManager.scrollXSpeed,\n table.eventManager.scrollYSpeed,\n 1\n );\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager, false);\n\n let selectX: number;\n let selectY: number;\n\n if (bottom) {\n selectY = table.scrollTop + drawRange.height - bottomFrozenRowHeight - 20;\n } else if (top) {\n selectY = table.scrollTop + topFrozenRowHeight + 20;\n }\n\n if (right) {\n selectX = table.scrollLeft + drawRange.width - rightFrozenColsWidth - 20;\n } else if (left) {\n selectX = table.scrollLeft + leftFrozenColsWidth + 20;\n }\n\n let considerFrozenY = false;\n let considerFrozenX = false;\n if (!right && !left) {\n if (\n (x > table.tableNoFrameWidth - table.getRightFrozenColsWidth() && x < table.tableNoFrameWidth) ||\n (x > 0 && x < table.getFrozenColsWidth())\n ) {\n selectX = x;\n considerFrozenX = true;\n } else {\n selectX = table.scrollLeft + x;\n }\n }\n if (!bottom && !top) {\n if (\n (y > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() && y < table.tableNoFrameHeight) ||\n (y > 0 && y < table.getFrozenRowsHeight())\n ) {\n selectY = y;\n considerFrozenY = true;\n } else {\n selectY = table.scrollTop + y;\n }\n }\n table.stateManager.updateInteractionState(InteractionState.grabing);\n const targetCol = table.getTargetColAtConsiderRightFrozen(selectX, considerFrozenX);\n const targetRow = table.getTargetRowAtConsiderBottomFrozen(selectY, considerFrozenY);\n if (isValid(targetCol) && isValid(targetRow)) {\n table.stateManager.updateSelectPos(targetCol.col, targetRow.row, false, false, false, false);\n }\n });\n } else if (table.eventManager.inertiaScroll.isInertiaScrolling()) {\n table.eventManager.inertiaScroll.endInertia();\n } else {\n table.eventManager.scrollYSpeed = 0;\n }\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointermove',\n env: 'body',\n callback: globalPointermoveCallback\n });\n document.body.addEventListener('pointermove', globalPointermoveCallback);\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport { handleWhell, isHorizontalScrollable, isVerticalScrollable } from '../scroll';\nimport type { EventManager } from '../event';\nimport { IconFuncTypeEnum } from '../../ts-types';\n\nexport function bindTouchListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const scenegraph = table.scenegraph;\n\n // deal width touch scrolling in mobile devices\n eventManager.touchMovePoints = [];\n table.scenegraph.tableGroup.addEventListener('touchstart', (e: FederatedPointerEvent) => {\n if (e.target.isChildOf(scenegraph.component.vScrollBar) || e.target.isChildOf(scenegraph.component.vScrollBar)) {\n return;\n }\n eventManager.isTouchdown = true;\n eventManager.touchMovePoints.push({\n x: e.page.x,\n y: e.page.y,\n timestamp: Date.now()\n });\n });\n\n const globalTouchMoveCallback = (e: TouchEvent) => {\n if (eventManager.touchMove) {\n e.preventDefault();\n }\n if (!eventManager.isTouchdown || !isTouchEvent(e)) {\n return;\n }\n console.log('downIcon', eventManager.downIcon);\n if ((eventManager.downIcon?.attribute as any)?.funcType === IconFuncTypeEnum.dragReorder) {\n // console.log()\n e.preventDefault();\n } else {\n // collect four last touch pisitions\n if (eventManager.touchMovePoints.length > 4) {\n eventManager.touchMovePoints.shift();\n }\n eventManager.touchMovePoints.push({\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n timestamp: Date.now()\n });\n if (eventManager._enableTableScroll) {\n const deltaX =\n -eventManager.touchMovePoints[eventManager.touchMovePoints.length - 1].x +\n eventManager.touchMovePoints[eventManager.touchMovePoints.length - 2].x;\n const deltaY =\n -eventManager.touchMovePoints[eventManager.touchMovePoints.length - 1].y +\n eventManager.touchMovePoints[eventManager.touchMovePoints.length - 2].y;\n handleWhell({ deltaX, deltaY } as any, stateManager);\n\n if (\n e.cancelable &&\n (table.internalProps.overscrollBehavior === 'none' ||\n (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, stateManager)) ||\n (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, stateManager)))\n ) {\n e.preventDefault();\n }\n }\n }\n };\n window.addEventListener('touchmove', globalTouchMoveCallback, { passive: false });\n eventManager.globalEventListeners.push({\n name: 'touchmove',\n env: 'window',\n callback: globalTouchMoveCallback\n });\n\n const globalTouchEndCallback = (e: TouchEvent) => {\n eventManager.touchEnd = true;\n eventManager.touchMove = false;\n if (!eventManager.isTouchdown || !isTouchEvent(e)) {\n return;\n }\n if ((eventManager.downIcon?.attribute as any)?.funcType === IconFuncTypeEnum.dragReorder) {\n // console.log()\n e.preventDefault();\n } else {\n if (eventManager.touchMovePoints?.length) {\n if (eventManager.touchMovePoints.length > 4) {\n eventManager.touchMovePoints.shift();\n }\n eventManager.touchMovePoints.push({\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n timestamp: Date.now()\n });\n // compute inertia parameter\n\n if (eventManager._enableTableScroll) {\n const firstPoint = eventManager.touchMovePoints[0];\n const lastPoint = eventManager.touchMovePoints[eventManager.touchMovePoints?.length - 1];\n const vX = (lastPoint.x - firstPoint.x) / (lastPoint.timestamp - firstPoint.timestamp);\n const vY = (lastPoint.y - firstPoint.y) / (lastPoint.timestamp - firstPoint.timestamp);\n //开始惯性滚动\n eventManager.inertiaScroll.startInertia(vX, vY, 0.95);\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager);\n });\n }\n }\n }\n eventManager.isTouchdown = false;\n eventManager.touchMovePoints = [];\n };\n window.addEventListener('touchend', globalTouchEndCallback);\n eventManager.globalEventListeners.push({\n name: 'touchend',\n env: 'window',\n callback: globalTouchEndCallback\n });\n\n const globalTouchCancelCallback = (e: TouchEvent) => {\n eventManager.touchEnd = true;\n eventManager.touchMove = false;\n if (!eventManager.isTouchdown) {\n return;\n }\n eventManager.isTouchdown = false;\n eventManager.touchMovePoints = [];\n };\n window.addEventListener('touchcancel', globalTouchCancelCallback);\n eventManager.globalEventListeners.push({\n name: 'touchcancel',\n env: 'window',\n callback: globalTouchCancelCallback\n });\n}\n\nfunction isTouchEvent(e: TouchEvent | MouseEvent): e is TouchEvent {\n return !!(e as TouchEvent).changedTouches;\n}\n","import type { FederatedPointerEvent } from './../../vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { SceneEvent } from '../util';\nimport { getCellEventArgsSet } from '../util';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { PivotChart } from '../../PivotChart';\nimport { clearChartCacheImage } from '../../scenegraph/refresh-node/update-chart';\n\nexport function bindAxisClickEvent(table: BaseTableAPI) {\n if (!table.isPivotChart()) {\n return;\n }\n\n table.scenegraph.tableGroup.addEventListener('click', (e: FederatedPointerEvent) => {\n if (table.stateManager.columnMove.moving || table.stateManager.columnResize.resizing) {\n return;\n }\n if (e.target.name === 'axis-label') {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n const { col, row } = eventArgsSet.eventArgs;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n let dimensionKey;\n let dimensions: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n }[];\n if (layout.indicatorsAsCol) {\n dimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row);\n dimensions = layout.getCellHeaderPaths(layout.rowHeaderLevelCount - 2, row).rowHeaderPaths;\n } else {\n dimensionKey = layout.getDimensionKeyInChartSpec(col, layout.columnHeaderLevelCount);\n dimensions = layout.getCellHeaderPaths(col, layout.columnHeaderLevelCount - 1).colHeaderPaths;\n }\n const filter = dimensions\n .map(dimension => {\n return {\n key: dimension.dimensionKey,\n value: dimension.value\n };\n })\n .filter(dimension => dimension.key);\n filter.push({ key: dimensionKey, value: (e.target.attribute as any).text });\n\n if (\n (table as PivotChart)._selectedDimensionInChart.length &&\n isSameSelectedDimension((table as PivotChart)._selectedDimensionInChart, filter)\n ) {\n return;\n }\n\n (table as PivotChart)._selectedDimensionInChart = filter;\n\n layout.updateDataStateToChartInstance();\n // 清除chart缓存图片\n clearChartCacheImage(table.scenegraph);\n table.scenegraph.updateNextFrame();\n } else if ((table as PivotChart)._selectedDimensionInChart?.length) {\n (table as PivotChart)._selectedDimensionInChart.length = 0;\n const layout = table.internalProps.layoutMap as PivotHeaderLayoutMap;\n layout.updateDataStateToChartInstance();\n // 清除chart缓存图片\n clearChartCacheImage(table.scenegraph);\n table.scenegraph.updateNextFrame();\n }\n });\n}\n\nfunction isSameSelectedDimension(\n dimensions1: { key: string; value: string }[],\n dimensions2: { key: string; value: string }[]\n): boolean {\n if (dimensions1.length !== dimensions2.length) {\n return false;\n }\n for (let i = 0; i < dimensions1.length; i++) {\n if (dimensions1[i].key !== dimensions2[i].key || dimensions1[i].value !== dimensions2[i].value) {\n return false;\n }\n }\n return true;\n}\n","import { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function bindAxisHoverEvent(table: BaseTableAPI) {\n if (!table.isPivotChart()) {\n return;\n }\n\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, e => {\n const cellGroup = table.scenegraph.getCell(e.col, e.row);\n cellGroup.forEachChildren(child => {\n if (child.name === 'axis') {\n const position = getAxisPosition(e.col, e.row, table.internalProps.layoutMap as PivotHeaderLayoutMap);\n (e as any).axisPosition = position;\n table.fireListeners(TABLE_EVENT_TYPE.MOUSEENTER_AXIS, e as any);\n }\n });\n });\n\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, e => {\n const cellGroup = table.scenegraph.getCell(e.col, e.row);\n cellGroup.forEachChildren(child => {\n if (child.name === 'axis') {\n const position = getAxisPosition(e.col, e.row, table.internalProps.layoutMap as PivotHeaderLayoutMap);\n (e as any).axisPosition = position;\n table.fireListeners(TABLE_EVENT_TYPE.MOUSELEAVE_AXIS, e as any);\n }\n });\n });\n}\n\nfunction getAxisPosition(col: number, row: number, layout: PivotHeaderLayoutMap) {\n if (layout.indicatorsAsCol) {\n if (\n layout.hasTwoIndicatorAxes &&\n row === layout.columnHeaderLevelCount - 1 &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'top';\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'bottom';\n } else if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.rowHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'left';\n }\n } else {\n if (\n col === layout.rowHeaderLevelCount - 1 &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'left';\n } else if (\n col === layout.colCount - layout.rightFrozenColCount &&\n row >= layout.columnHeaderLevelCount &&\n row < layout.rowCount - layout.bottomFrozenRowCount\n ) {\n return 'right';\n } else if (\n row === layout.rowCount - layout.bottomFrozenRowCount &&\n col >= layout.rowHeaderLevelCount &&\n col < layout.colCount - layout.rightFrozenColCount\n ) {\n return 'bottom';\n }\n }\n return 'bottom';\n}\n","import { isArray, isNumber } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { setCellCheckboxStateByAttribute } from '../../state/checkbox/checkbox';\n\nexport function bindGroupTitleCheckboxChange(table: BaseTableAPI) {\n table.on('checkbox_state_change', args => {\n if (table.internalProps.rowSeriesNumber?.enableTreeCheckbox !== true) {\n return;\n }\n\n const { col, row, checked } = args;\n const record = table.getCellOriginRecord(col, row);\n const indexedData = (table.dataSource as any).currentPagerIndexedData as (number | number[])[];\n const titleShowIndex = table.getRecordShowIndexByCell(col, row);\n let titleIndex = indexedData[titleShowIndex];\n if (isNumber(titleIndex)) {\n titleIndex = [titleIndex];\n }\n\n if (record.vtableMerge) {\n // 1. group title\n if (checked) {\n // 1.1 group title check\n // 1.1.1 check all children\n setAllChildrenCheckboxState(true, titleShowIndex, titleIndex, indexedData, table);\n // 1.1.2 update group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n } else {\n // 1.2 group title uncheck\n // 1.2.1 uncheck all children\n setAllChildrenCheckboxState(false, titleShowIndex, titleIndex, indexedData, table);\n // 1.2.2 update group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n\n // 1.2.3 update header checkbox state\n const oldHeaderCheckedState = table.stateManager.headerCheckedState._vtable_rowSeries_number;\n const newHeaderCheckedState = table.stateManager.updateHeaderCheckedState('_vtable_rowSeries_number', col, row);\n if (oldHeaderCheckedState !== newHeaderCheckedState) {\n table.scenegraph.updateHeaderCheckboxCellState(col, row, newHeaderCheckedState);\n }\n }\n } else {\n // 2. group content, reset group title state\n updateGroupTitleCheckboxState(titleShowIndex, titleIndex, indexedData, table);\n }\n });\n}\n\nfunction setAllChildrenCheckboxState(\n state: boolean,\n titleShowIndex: number,\n titleIndex: number[],\n indexedData: (number | number[])[],\n table: BaseTableAPI\n) {\n let i = titleShowIndex + 1;\n while (isArray(indexedData[i]) && (indexedData[i] as number[])?.length > titleIndex.length) {\n const row = table.columnHeaderLevelCount + i;\n table.stateManager.setCheckedState(0, row, '_vtable_rowSeries_number', state);\n setCellCheckboxStateByAttribute(0, row, state, table);\n i++;\n }\n}\n\nfunction updateGroupTitleCheckboxState(\n titleShowIndex: number,\n titleIndex: number[],\n indexedData: (number | number[])[],\n table: BaseTableAPI\n) {\n let parentLength = titleIndex.length - 1;\n if (parentLength > 0) {\n let i = titleShowIndex - 1;\n while (parentLength > 0 && i >= 0) {\n if (\n (isArray(indexedData[i]) && (indexedData[i] as number[])?.length === parentLength) ||\n (parentLength === 1 && isNumber(indexedData[i]))\n ) {\n const row = table.columnHeaderLevelCount + i;\n // check all children\n updateParentCheckboxState(0, row, indexedData[i], table);\n // table.stateManager.setCheckedState(0, row, '_vtable_rowSeries_number', 'indeterminate');\n // setCellCheckboxStateByAttribute(0, row, 'indeterminate', table);\n\n parentLength--;\n }\n i--;\n }\n }\n}\n\nfunction updateParentCheckboxState(col: number, row: number, currentIndex: number | number[], table: BaseTableAPI) {\n const { checkedState } = table.stateManager;\n const key = currentIndex.toString();\n const currentIndexLength = isArray(currentIndex) ? currentIndex.length : 1;\n let start = false;\n const result: (boolean | string)[] = [];\n checkedState.forEach((value, index: string) => {\n if (start) {\n const indexData = index.split(',');\n if (indexData.length === currentIndexLength) {\n start = false;\n } else {\n result.push(value._vtable_rowSeries_number);\n }\n }\n if (index === key) {\n start = true;\n }\n });\n\n if (result.length === 0) {\n return;\n }\n\n const allChecked = result.every(item => !!item);\n const allUnChecked = result.every(item => !item);\n\n if (allChecked) {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', true);\n setCellCheckboxStateByAttribute(col, row, true, table);\n } else if (allUnChecked) {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', false);\n setCellCheckboxStateByAttribute(col, row, false, table);\n } else {\n table.stateManager.setCheckedState(col, row, '_vtable_rowSeries_number', 'indeterminate');\n setCellCheckboxStateByAttribute(col, row, 'indeterminate', table);\n }\n}\n","import type {\n FontIcon,\n ImageIcon,\n // NamedIcon,\n PathIcon,\n SvgIcon\n} from '../ts-types';\n\ntype IconPropKey = keyof FontIcon | keyof SvgIcon | keyof ImageIcon | keyof PathIcon;\n// | keyof NamedIcon;\nconst ICON_PROP_KEYS: IconPropKey[] = [\n //TODO 需要去掉这个逻辑 每次fontIcon新增属性 就会丢失 定位到是这里需要对应加上key\n 'type',\n 'content',\n 'font',\n 'color',\n 'width',\n 'height',\n 'marginRight',\n 'marginLeft',\n 'src',\n 'svg',\n 'name',\n 'path',\n 'positionType',\n 'tooltip',\n 'hover',\n 'cursor',\n 'shape',\n 'interactive',\n 'isGif'\n];\n\nexport const iconPropKeys = ICON_PROP_KEYS;\n","import type { ColumnIconOption, ImageIcon, ListTableAPI, SvgIcon } from '../ts-types';\nimport { HierarchyState, InternalIconName } from '../ts-types';\nimport * as registerIcons from '../icons';\nimport { Style } from './style/Style';\nimport { TextStyle } from './style/MultilineTextStyle';\nimport { ProgressBarStyle } from './style/ProgressBarStyle';\nimport { ImageStyle } from './style/ImageStyle';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport * as icons from '../tools/icons';\nimport { obj } from '../tools/helper';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { RadioStyle } from './style/RadioStyle';\nimport { isValid } from '@visactor/vutils';\nexport class BodyHelper {\n expandIcon: SvgIcon;\n collapseIcon: SvgIcon;\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n //展开折叠按钮\n this.expandIcon = regedIcons[InternalIconName.expandIconName] as SvgIcon;\n this.collapseIcon = regedIcons[InternalIconName.collapseIconName] as SvgIcon;\n }\n getIcons(\n col: number,\n row: number,\n cellValue: any,\n dataValue: any,\n context: CanvasRenderingContext2D\n ): ColumnIconOption[] {\n //加入固定列图标 排序 文本中元素\n const iconArr: ColumnIconOption[] = [];\n\n const hierarchyIcon = this.getHierarchyIcon(col, row);\n if (hierarchyIcon) {\n iconArr.push(hierarchyIcon);\n }\n\n const { icon: iconDefine } = this._table.getBodyColumnDefine(col, row);\n\n if (iconDefine) {\n let iconResults;\n if (typeof iconDefine === 'function') {\n const arg = {\n col,\n row,\n value: cellValue,\n dataValue,\n table: this._table\n };\n iconResults = iconDefine(arg);\n } else {\n iconResults = iconDefine;\n }\n const regedIcons = registerIcons.get();\n const addIcon = (columnIcon: string | ColumnIconOption) => {\n let icon;\n if (typeof columnIcon === 'string') {\n icon = regedIcons[columnIcon];\n } else {\n icon = columnIcon;\n }\n if (icon) {\n iconArr.push(icon);\n }\n };\n if (Array.isArray(iconResults)) {\n iconResults.forEach((columnIcon: string | ColumnIconOption, index: number) => {\n addIcon(columnIcon);\n });\n } else {\n addIcon(iconResults);\n }\n }\n\n context &&\n iconArr.forEach((i, index) => {\n if ((i as any).content || (i).src) {\n iconArr[index] = this.getCellIconFromRecordValue(i, col, row);\n // if ((i).font)\n // helper.testFontLoad((i).font, (i).content, col, row);\n }\n });\n\n return iconArr;\n }\n getStyleClass(\n cellType:\n | 'text'\n | 'link'\n | 'image'\n | 'video'\n | 'chart'\n | 'sparkline'\n | 'progressbar'\n | 'chart'\n | 'checkbox'\n | 'radio'\n ) {\n switch (cellType) {\n case 'text':\n return TextStyle;\n case 'image':\n return ImageStyle;\n case 'video':\n return ImageStyle;\n case 'link':\n return TextStyle;\n case 'chart':\n return Style;\n case 'sparkline':\n return Style;\n case 'progressbar':\n return ProgressBarStyle;\n case 'checkbox':\n return CheckboxStyle;\n case 'radio':\n return RadioStyle;\n }\n return TextStyle;\n }\n getCellIconFromRecordValue(icon: ColumnIconOption, col: number, row: number): ColumnIconOption;\n getCellIconFromRecordValue(icon: ColumnIconOption[], col: number, row: number): ColumnIconOption[];\n getCellIconFromRecordValue(\n icon: ColumnIconOption | ColumnIconOption[],\n col: number,\n row: number\n ): ColumnIconOption | ColumnIconOption[];\n getCellIconFromRecordValue(\n icon: ColumnIconOption | ColumnIconOption[],\n col: number,\n row: number\n ): ColumnIconOption | ColumnIconOption[] {\n if (Array.isArray(icon)) {\n return icon.map(i => this.getCellIconFromRecordValue(i, col, row));\n }\n // icon.positionType = IconPosition.inlineFront;\n if (!obj.isObject(icon) || typeof icon === 'function') {\n return (this._table as ListTableAPI).getFieldData(icon, col, row);\n }\n // 新建对象 挨个属性赋值\n const retIcon: any = {};\n const iconOpt: any = icon;\n icons.iconPropKeys.forEach(k => {\n if (typeof iconOpt[k] !== 'undefined') {\n const f = (this._table as ListTableAPI).getFieldData(iconOpt[k], col, row);\n if (isValid(f)) {\n retIcon[k] = f;\n } else if (!this._table._hasField?.(iconOpt[k], col, row)) {\n retIcon[k] = iconOpt[k];\n }\n }\n });\n return retIcon;\n }\n\n getHierarchyIcon(col: number, row: number) {\n const hierarchyState = this._table.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n //展开状态 应该显示-号\n return this.expandIcon;\n } else if (hierarchyState === HierarchyState.collapse) {\n //折叠状态 应该显示-号\n return this.collapseIcon;\n }\n return undefined;\n }\n getHierarchyIconWidth() {\n return this.expandIcon.width + (this.expandIcon.marginLeft ?? 0) + (this.expandIcon.marginRight ?? 0);\n }\n}\n","export function createElement(tagName: string, classNames?: string[]): HTMLElement {\n const element = document.createElement(tagName);\n if (classNames) {\n element.classList.add(...classNames);\n }\n return element;\n}\n","import { EventHandler } from '../../../../event/EventHandler';\nimport type {\n DropDownMenuHighlightInfo,\n IDimensionInfo,\n MenuInstanceInfo,\n MenuListItem,\n Placement,\n RectProps\n} from '../../../../ts-types';\nimport { createElement } from '../../../../tools/dom';\nimport { importStyle } from './MenuElementStyle';\nimport { TABLE_EVENT_TYPE } from '../../../../core/TABLE_EVENT_TYPE';\nimport { cellInRange } from '../../../../tools/helper';\nimport { isValid } from '@visactor/vutils';\nimport type { PivotHeaderLayoutMap } from '../../../../layout/pivot-header-layout';\nimport { regUrl } from '../../../../tools/global';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\nimportStyle();\n\nconst CLASSNAME = 'vtable__menu-element';\nconst ITEM_CLASSNAME = `${CLASSNAME}__item`;\nconst CONTENT_CLASSNAME = `${CLASSNAME}__content`;\nconst HIDDEN_CLASSNAME = `${CLASSNAME}--hidden`;\nconst SHOWN_CLASSNAME = `${CLASSNAME}--shown`;\nconst NORAML_CLASSNAME = `${CLASSNAME}--normal`;\nconst SELECT_CLASSNAME = `${CLASSNAME}--select`;\nconst ICOM_CLASSNAME = `${CLASSNAME}__icon`;\nconst SPLIT_CLASSNAME = `${CLASSNAME}__split`;\nconst TITLE_CLASSNAME = `${CLASSNAME}__title`;\nconst ARROW_CLASSNAME = `${CLASSNAME}__arrow`;\nconst NOEVENT_CLASSNAME = `${CLASSNAME}__no-event`;\nconst ITEMTEXT_CLASSNAME = `${CLASSNAME}__item-text`;\n\nfunction createMenuDomElement(): HTMLElement {\n const rootElement = createElement('div', [CLASSNAME, HIDDEN_CLASSNAME]);\n return rootElement;\n}\n\nexport function isMenuHighlight(\n _table: BaseTableAPI,\n cells: DropDownMenuHighlightInfo[],\n menuKeyCurrent: string,\n colCurrent: number,\n rowCurrent: number,\n index: number\n) {\n const cellRange = _table.getCellRange(colCurrent, rowCurrent);\n for (let i = 0; i < cells.length; i++) {\n const highlight = cells[i];\n let { col, row } = highlight;\n const { field, menuKey } = highlight;\n\n if (typeof col !== 'number' || typeof row !== 'number') {\n if (_table.isPivotTable() && typeof Array.isArray(field)) {\n const cellAddress = (_table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(\n field as IDimensionInfo[]\n );\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n } else {\n const cellAddress = _table.internalProps.layoutMap.getHeaderCellAddressByField(field as string);\n if (!cellAddress) {\n continue;\n }\n col = cellAddress.col;\n row = cellAddress.row;\n }\n }\n\n if (isValid(col) && isValid(row) && cellInRange(cellRange, col, row)) {\n // dropDownIndex在多级菜单中判断会有问题\n // if (typeof dropDownIndex === 'number' && dropDownIndex === index) {\n // return true;\n // }\n if (menuKeyCurrent === menuKey) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport class MenuElement {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _secondElement?: HTMLElement;\n private _menuInstanceInfo?: MenuInstanceInfo;\n private _showChildrenIndex: number;\n private _mouseEnterSecondElement: boolean;\n constructor(table: BaseTableAPI) {\n this._handler = new EventHandler();\n this._rootElement = createMenuDomElement();\n this._secondElement = createMenuDomElement();\n (this._secondElement as any).sub = true;\n this._showChildrenIndex = -1;\n\n // 鼠标在菜单上滚动阻止冒泡\n this._rootElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n // 绑定交互事件\n this._rootElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._rootElement?.addEventListener('contextmenu', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n // 在移动端_rootElement的click事件在表格的touchend事件后触发,\n // 表格的touchend事件会引发selecter.start,从而清空菜单\n // 这样就会导致_rootElement的click事件无法触发\n // 因此菜_rootElement监听touchend事件,在表格的touchend事件前触发\n // 执行菜单点击功能\n this._rootElement?.addEventListener('touchend', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n // table.invalidateCell(col, row); // 更新状态图表\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n\n e.stopPropagation();\n\n // 处理二级菜单\n const { hasChildren, dropDownIndex, col, row, sub } = e.target as any;\n if (hasChildren) {\n // 更新二级菜单\n this._showChildrenIndex = dropDownIndex;\n const secondElement = this._secondElement;\n secondElement?.classList.remove(HIDDEN_CLASSNAME);\n secondElement?.classList.add(SHOWN_CLASSNAME);\n secondElement.innerHTML = '';\n\n // 添加item\n const children = (this._menuInstanceInfo.content[dropDownIndex] as any)?.children;\n for (let i = 0; i < children.length; i++) {\n const menuItem = children[i];\n const isHighlight = table.stateManager.menu.dropDownMenuHighlight\n ? isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n col,\n row,\n i\n )\n : false;\n\n const item = createItem(menuItem, isHighlight) as any;\n // dom绑定相关属性\n item.col = col;\n item.row = row;\n item.dropDownIndex = i;\n if (typeof menuItem === 'string') {\n item.text = menuItem;\n item.menuKey = menuItem;\n } else if (typeof menuItem === 'object') {\n item.text = menuItem.text;\n item.menuKey = menuItem.menuKey || menuItem.text;\n }\n item.sub = true;\n item.sub = true;\n secondElement.appendChild(item);\n }\n\n // 对齐菜单位置\n const rect = (e.target as any).getBoundingClientRect();\n this._bindSecondElement(table, col, row, rect.right, rect.top);\n } else if (hasChildren && this._showChildrenIndex === dropDownIndex) {\n const secondElement = this._secondElement;\n secondElement?.classList.remove(HIDDEN_CLASSNAME);\n secondElement?.classList.add(SHOWN_CLASSNAME);\n } else if (!sub && this._secondElement?.classList.contains(SHOWN_CLASSNAME)) {\n setTimeout(() => {\n //因为增加了主菜单和子菜单的间距 鼠标在移入子菜单的过程中 可能引起子菜单消失 这里增加延时处理\n if (this._mouseEnterSecondElement !== true) {\n this._showChildrenIndex = -1;\n const secondElement = this._secondElement;\n secondElement?.classList.remove(SHOWN_CLASSNAME);\n secondElement?.classList.add(HIDDEN_CLASSNAME);\n }\n }, 300);\n }\n });\n\n // 鼠标在菜单上滚动阻止冒泡\n this._secondElement?.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n this._secondElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousemove', e);\n // table.hoverIcon = undefined;\n\n e.stopPropagation();\n });\n this._secondElement?.addEventListener('mouseenter', e => {\n this._mouseEnterSecondElement = true;\n });\n this._secondElement?.addEventListener('mouseleave', e => {\n this._mouseEnterSecondElement = false;\n });\n this._secondElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._secondElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._secondElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n let highlight = false;\n const menus = this._menuInstanceInfo.content;\n menus.forEach((menu, i) => {\n if (typeof menu === 'object' && menu.children && menu.children.length) {\n for (let j = 0; j < menu.children.length; j++) {\n const childItem = menu.children[j];\n if (\n isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey : childItem,\n col,\n row,\n -1\n ) &&\n menuKey === (typeof childItem === 'object' ? childItem?.menuKey : childItem)\n ) {\n highlight = true;\n return;\n }\n }\n }\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n cellHeaderPaths: table.isPivotTable() ? table.getCellHeaderPaths(col, row) : undefined,\n menuKey,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n e.stopPropagation();\n });\n }\n get rootElement() {\n return this._rootElement;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler.release();\n delete this._rootElement;\n }\n bindToCell(table: BaseTableAPI, col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const rootElement = this._rootElement;\n const secondElement = this._secondElement;\n this._menuInstanceInfo = menuInstanceInfo;\n\n rootElement?.classList.remove(SHOWN_CLASSNAME);\n rootElement?.classList.add(HIDDEN_CLASSNAME);\n secondElement?.classList.remove(SHOWN_CLASSNAME);\n secondElement?.classList.add(HIDDEN_CLASSNAME);\n\n if (this._canBindToCell(table, col, row)) {\n // messageElement && (messageElement.textContent = 'aaa');\n // 生成下拉菜单dom\n rootElement.innerHTML = '';\n\n if (Array.isArray(menuInstanceInfo.content)) {\n const menuListItem = menuInstanceInfo.content;\n for (let i = 0; i < menuListItem?.length ?? 0; i++) {\n const menuItem = menuListItem[i];\n let isHighlight = table.stateManager.menu.dropDownMenuHighlight\n ? isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n col,\n row,\n i\n )\n : false;\n\n if (\n table.stateManager.menu.dropDownMenuHighlight &&\n typeof menuItem === 'object' &&\n Array.isArray(menuItem.children) &&\n menuItem.children.length\n ) {\n // 判断子项目是否高亮\n for (let i = 0; i < menuItem.children.length; i++) {\n const childItem = menuItem.children[i];\n // eslint-disable-next-line max-depth\n if (\n isMenuHighlight(\n table,\n table.stateManager.menu.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey || childItem?.text : childItem,\n col,\n row,\n i\n )\n ) {\n isHighlight = true;\n break;\n }\n }\n }\n\n const item = createItem(menuItem, isHighlight) as any;\n // dom绑定相关属性\n item.col = col;\n item.row = row;\n item.dropDownIndex = i;\n if (typeof menuItem === 'string') {\n item.text = menuItem;\n item.menuKey = menuItem;\n } else if (typeof menuItem === 'object') {\n item.text = menuItem.text;\n item.menuKey = menuItem.menuKey || menuItem.text;\n if (menuItem.children?.length) {\n item.hasChildren = true;\n }\n }\n rootElement.appendChild(item);\n }\n }\n const binded = this._bindToCell(table, col, row, menuInstanceInfo.position, menuInstanceInfo.referencePosition);\n\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASSNAME);\n rootElement?.classList.remove(HIDDEN_CLASSNAME);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n unbindFromCell(): void {\n const rootElement = this._rootElement;\n const secondElement = this._secondElement;\n this._menuInstanceInfo = undefined;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASSNAME);\n rootElement.classList.add(HIDDEN_CLASSNAME);\n }\n if (secondElement?.parentElement) {\n secondElement.classList.remove(SHOWN_CLASSNAME);\n secondElement.classList.add(HIDDEN_CLASSNAME);\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { top, bottom, left, right } = rect;\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n const { offsetHeight, offsetWidth } = element;\n if (offsetHeight < top) {\n return false;\n }\n if (offsetWidth < left) {\n return false;\n }\n return true;\n }\n _bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement }\n ): boolean {\n const rootElement = this._rootElement;\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const {\n width: containerWidth,\n height: containerHeight,\n left: containerLeft,\n top: containerTop\n } = element.getBoundingClientRect();\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement); // 之前在做dom边缘躲避的时候放到了table.getParentElement()上,但发现不是相对定位导致位置错位\n }\n rootElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.offsetWidth;\n const rootElementHeight = rootElement.offsetHeight;\n let rootElementLeft;\n let rootElementTop;\n if (position) {\n rootElementLeft = position.x;\n rootElementTop = position.y;\n } else if (referencePosition) {\n rootElementLeft = referencePosition.rect.right - rootElementWidth;\n rootElementTop = referencePosition.rect.bottom;\n }\n\n // 获取元素的边界矩形\n const rect = element.getBoundingClientRect();\n\n // 计算缩放比例\n const scaleX = rect.width / element.offsetWidth;\n const scaleY = rect.height / element.offsetHeight;\n\n // rootElementLeft = position.x - rootElementWidth;\n // let leftStyle = rootElementLeft;\n // 检测下方能否容纳,不能容纳向上偏移\n if (rootElementTop * scaleY + rootElementHeight > containerHeight) {\n rootElementTop = (containerHeight - rootElementHeight) / scaleY;\n // rootElementLeft += rootElementWidth - 2;\n }\n // 偏移后上方超出canvas范围,居中显示\n if (rootElementTop < 0) {\n rootElementTop = rootElementTop / 2;\n }\n\n let deltaTop = 0;\n let deltaLeft = 0;\n if (table.getElement() !== element) {\n const { left, top } = table.getElement().getBoundingClientRect();\n deltaTop = top - containerTop;\n deltaLeft = left - containerLeft;\n }\n rootElement.style.top = `${rootElementTop + deltaTop}px`;\n\n // 判断如果超出左右范围则靠边显示\n if (rootElementLeft < 0) {\n rootElementLeft = 0;\n } else if (rootElementLeft * scaleX + rootElementWidth > containerWidth) {\n rootElementLeft = (containerWidth - rootElementWidth) / scaleX;\n }\n rootElement.style.left = `${rootElementLeft + deltaLeft}px`;\n\n return true;\n }\n return false;\n }\n _bindSecondElement(table: BaseTableAPI, col: number, row: number, x: number, y: number): boolean {\n const secondElement = this._secondElement;\n const rootElement = this._rootElement;\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { width: containerWidth, left: containerLeft, top: containerTop } = element.getBoundingClientRect();\n const { x: rootLeft, y: rootTop, width: rootWidth } = rootElement.getBoundingClientRect();\n\n if (secondElement) {\n // if (secondElement.parentElement !== rootElement) {\n // rootElement.appendChild(secondElement);\n // }\n if (secondElement.parentElement !== element) {\n element.appendChild(secondElement);\n }\n\n secondElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n secondElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const secondElementWidth = secondElement.clientWidth;\n // const secondElementHeight = secondElement.clientHeight;\n\n const secondElementTop = y - 4 - containerTop;\n const secondElementLeft = x - containerLeft;\n\n secondElement.style.top = `${secondElementTop}px`;\n let leftStyle = secondElementLeft;\n\n // 判断如果超出右范围则靠左边显示\n if (leftStyle + secondElementWidth > containerWidth) {\n leftStyle = leftStyle - secondElementWidth - rootWidth;\n } else {\n leftStyle += 4; //位置调整 需要和主菜单之间有4px的间隔\n }\n secondElement.style.left = `${leftStyle}px`;\n\n return true;\n }\n return false;\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const rootElement = this._rootElement;\n\n const { x: rootLeft, y: rootTop, width: rootWidth, height: rootHeight } = rootElement.getBoundingClientRect();\n if (x > rootLeft - 5 && x < rootLeft + rootWidth + 5 && y > rootTop - 5 && y < rootTop + rootHeight + 5) {\n return true;\n }\n const secondElement = this._secondElement;\n if (secondElement) {\n const {\n x: secondLeft,\n y: secondTop,\n width: secondWidth,\n height: secondHeight\n } = rootElement.getBoundingClientRect();\n if (\n x > secondLeft - 5 &&\n x < secondLeft + secondWidth + 5 &&\n y > secondTop - 5 &&\n y < secondTop + secondHeight + 5\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction createItem(info: MenuListItem, isHighlight: boolean): HTMLDivElement {\n const itemContainer = createElement('div', [\n ITEM_CLASSNAME,\n isHighlight ? SELECT_CLASSNAME : NORAML_CLASSNAME\n ]) as HTMLDivElement;\n\n if (typeof info === 'string') {\n const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n item.innerHTML = info;\n itemContainer.appendChild(item);\n } else if (typeof info === 'object') {\n const type = info.type ?? 'item';\n if (type === 'split') {\n itemContainer?.classList.add(SPLIT_CLASSNAME);\n return itemContainer;\n }\n if (info?.icon?.svg) {\n if (regUrl.test(info.icon.svg)) {\n const image = new Image();\n if (info.icon.width) {\n image.style.width = info.icon.width.toString() + 'px';\n } else {\n image.style.width = '16px';\n }\n if (info.icon.height) {\n image.style.height = info.icon.height.toString() + 'px';\n } else {\n image.style.height = '16px';\n }\n image.src = info.icon.svg;\n itemContainer.appendChild(image);\n } else {\n const svg = createElement('span', [ICOM_CLASSNAME, NOEVENT_CLASSNAME]);\n svg.innerHTML =\n isHighlight && info.selectedIcon && info.selectedIcon.svg ? info.selectedIcon.svg : info.icon.svg;\n info.icon.width && (svg.children[0] as SVGElement).setAttribute('width', info.icon.width.toString());\n info.icon.height && (svg.children[0] as SVGElement).setAttribute('height', info.icon.height.toString());\n itemContainer.appendChild(svg);\n }\n }\n const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n item.innerHTML = info.text;\n itemContainer.appendChild(item);\n if (type === 'title') {\n itemContainer?.classList.add(NOEVENT_CLASSNAME, TITLE_CLASSNAME);\n } else if (info?.children?.length) {\n const arrow = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ARROW_CLASSNAME]);\n arrow.innerHTML = isHighlight\n ? ''\n : '';\n itemContainer.appendChild(arrow);\n }\n }\n return itemContainer;\n}\n","import { Env } from '../../../../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-menu-styleSheet';\n styleElement.textContent = `\n@keyframes vtable__menu-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__menu-element {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tborder-radius: 4px;\n\tbackground-color: #fff;\n\tpadding: 6px 0;\n\t/* pointer-events: none; */\n\tuser-select: none;\n\tcolor: #000;\n\tmax-width: 300px;\n\tz-index: 99999;\n\tborder: #CCC 0.5px solid;\n\tcursor: default;\n\twidth: max-content;\n\tbox-shadow: 0px 8px 16px rgba(27, 31, 35, 0.12);\n max-height: 100%;\n overflow-y: auto;\n}\n.vtable__menu-element--hidden {\n\topacity: 0;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n\tz-index: -9999;\n}\n.vtable__menu-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__menu-element--shown-animation 150ms ease-out;\n}\n.vtable__menu-element__content {\n\tfont-family: Roboto;\n\tfont-size: 12px;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\t/* height: 100%; */\n\tline-height: 30px;\n}\n.vtable__menu-element__item {\n\theight: 32px;\n\tpadding: 0px 12px;\n\tcursor: pointer;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n}\n.vtable__menu-element__item:hover {\n\tbackground-color: rgba(27, 31, 35, 0.06);\n}\n.vtable__menu-element__icon{\n\t/* vertical-align: top; */\n\tdisplay: flex;\n\t/* line-height: 30px; */\n\tmargin-right: 6px;\n}\n.vtable__menu-element__no-event {\n\tpointer-events: none;\n}\n.vtable__menu-element--select {\n\tcolor: #2E68CF;\n}.vtable__menu-element--normal {\n\tcolor: rgba(20, 20, 20, 0.9);;\n}\n.vtable__menu-element__split {\n\theight: 0px;\n\tborder: 1px solid rgb(209, 213, 218);\n\tmargin: 5px 0;\n}\n.vtable__menu-element__title {\n\tcolor: rgb(149, 149, 149);\n}\n.vtable__menu-element__arrow {\n\tposition: absolute;\n\tright: 3px;\n\tfont-weight: bold;\n\tmargin-top: 1px;\n}\n.vtable__menu-element__item-text {\n\tmargin-right: 15px;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import type {\n ColumnIconOption,\n ColumnsDefine,\n ListTableAPI,\n PivotTableAPI,\n RectProps,\n SortOrder,\n SvgIcon\n} from '../ts-types';\nimport { HierarchyState, IconFuncTypeEnum, IconPosition, InternalIconName } from '../ts-types';\nimport * as registerIcons from '../icons';\nimport { cellInRange } from '../tools/helper';\nimport { isMenuHighlight } from '../components/menu/dom/logic/MenuElement';\nimport { Style } from './style/Style';\nimport { ImageStyle } from './style/ImageStyle';\nimport { TextHeaderStyle } from './style';\nimport type { ListTable } from '../ListTable';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { CheckboxStyle } from './style/CheckboxStyle';\nimport { isValid } from '@visactor/vutils';\nexport class HeaderHelper {\n normalIcon: SvgIcon;\n upIcon: SvgIcon;\n downIcon: SvgIcon;\n freezeIcon: SvgIcon;\n frozenIcon: SvgIcon;\n frozenCurrentIcon: SvgIcon;\n dropDownAbsoluteIcon: SvgIcon;\n // dropDownHoverIcon: SvgIcon;\n\n expandIcon: SvgIcon;\n collapseIcon: SvgIcon;\n // //存储鼠标hover到的图标类型,后面需要用name判断,应该再拿个inline对象上赋值showFrozenIconIcon,绘制感应区域\n // _showFrozenIconIcon?: SvgIcon;\n // _showSortIcon?: SvgIcon;\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n //pin默认值\n this.freezeIcon = regedIcons[InternalIconName.freezeIconName] as SvgIcon;\n this.frozenIcon = regedIcons[InternalIconName.frozenIconName] as SvgIcon;\n this.frozenCurrentIcon = regedIcons[InternalIconName.frozenCurrentIconName] as SvgIcon;\n\n //sort默认值\n this.normalIcon = regedIcons[InternalIconName.normalIconName] as SvgIcon;\n this.upIcon = regedIcons[InternalIconName.upwardIconName] as SvgIcon;\n this.downIcon = regedIcons[InternalIconName.downwardIconName] as SvgIcon;\n //下拉按钮\n this.dropDownAbsoluteIcon = regedIcons[InternalIconName.dropdownIconName] as SvgIcon;\n // this.dropDownHoverIcon = regedIcons[InternalIconName.dropdownHoverIconName] as SvgIcon;\n //展开折叠按钮\n this.expandIcon = regedIcons[InternalIconName.expandIconName] as SvgIcon;\n this.collapseIcon = regedIcons[InternalIconName.collapseIconName] as SvgIcon;\n }\n\n getIcons(col: number, row: number): ColumnIconOption[] {\n //加入固定列图标 排序 文本中元素\n const icons: ColumnIconOption[] = [];\n if (this._table.isPivotTable()) {\n // 透视表显示排序按钮\n const { showSort, sort } = this._table.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n let _showSort;\n if (typeof showSort === 'function') {\n _showSort = showSort({ col, row, table: this._table });\n } else {\n _showSort = showSort;\n }\n if (_showSort) {\n let order = (this._table as PivotTableAPI).getPivotSortState(col, row) as string;\n if (order) {\n order = order.toUpperCase();\n }\n const sortIcon = order === 'ASC' ? this.upIcon : order === 'DESC' ? this.downIcon : this.normalIcon;\n\n if (sortIcon) {\n icons.push(sortIcon);\n }\n } else if (sort) {\n // 处理配置了sort的情况\n const sortIcon = this.getSortIconForPivotTable(\n (this._table as PivotTableAPI).getPivotSortState(col, row),\n this._table,\n col,\n row\n );\n if (sortIcon) {\n icons.push(sortIcon);\n }\n }\n } else {\n const states = (this._table as ListTableAPI).sortState;\n let order: SortOrder | undefined;\n order = undefined;\n const range = this._table.getCellRange(col, row);\n if (states) {\n if (Array.isArray(states)) {\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n const stateRange = this._table._getHeaderCellBySortState(state);\n if (stateRange && cellInRange(range, stateRange.col, stateRange.row)) {\n ({ order } = state);\n break;\n }\n }\n } else {\n const stateRange = this._table._getHeaderCellBySortState(states);\n if (stateRange && cellInRange(range, stateRange.col, stateRange.row)) {\n ({ order } = states);\n }\n }\n }\n const sortIcon = this.getSortIcon(order, this._table, col, row);\n if (sortIcon) {\n icons.push(sortIcon);\n }\n }\n\n if (this._table.showFrozenIcon && col < this._table.allowFrozenColCount) {\n const pinInline = this.getFrozenIcon(col, row);\n if (pinInline) {\n icons.push(pinInline);\n // context.showIcon = this.showFrozenIconIcon;//todo 暂时去掉 需要想其他方式\n }\n }\n\n if (this.checkDropDownIcon(this._table, col, row)) {\n // const dropDownMenuHoverIcon = this.dropDownHoverIcon;//this.getDropDownHoverIcon(_table, col, row);\n const dropDownMenuIcon = this.dropDownAbsoluteIcon; //this.getDropDownAbsoluteIcon(_table, col, row);\n // dropDownMenuIcon.hover.image = dropDownMenuHoverIcon.svg; // to do 规范化处理\n icons.push(dropDownMenuIcon);\n }\n\n const dropDownStateIcons = this.getDropDownStateIcons(this._table, col, row);\n if (dropDownStateIcons.length) {\n icons.push(...dropDownStateIcons);\n }\n\n const { headerIcon } = this._table._getHeaderLayoutMap(col, row) as HeaderData;\n // captionIcon && icons.push(captionIcon);\n\n const hierarchyIcon = this.getHierarchyIcon(col, row);\n if (hierarchyIcon) {\n icons.push(hierarchyIcon);\n }\n\n if (headerIcon) {\n let headerIconStrs;\n if (typeof headerIcon === 'function') {\n const arg = {\n col,\n row,\n value: this._table.getCellValue(col, row),\n dataValue: this._table.getCellOriginValue(col, row),\n table: this._table\n };\n headerIconStrs = headerIcon(arg);\n } else {\n headerIconStrs = headerIcon;\n }\n const regedIcons = registerIcons.get();\n const addIcon = (headerIcon: string | ColumnIconOption) => {\n let icon;\n if (typeof headerIcon === 'string') {\n icon = regedIcons[headerIcon];\n } else {\n icon = headerIcon;\n }\n if (icon) {\n icons.push(icon);\n }\n };\n if (Array.isArray(headerIconStrs)) {\n headerIconStrs.forEach((columnIcon: string | ColumnIconOption, index: number) => {\n addIcon(columnIcon);\n });\n } else {\n addIcon(headerIconStrs);\n }\n }\n return icons;\n }\n\n getFrozenIcon(col: number, row: number): ColumnIconOption | null {\n // this.showFrozenIconIcon = undefined;\n if (this._table.isPivotTable() || (this._table as ListTable).transpose) {\n // 透视表和转置模式不显示冻结按钮\n return null;\n }\n\n if (this._table.rightFrozenColCount && col >= this._table.colCount - this._table.rightFrozenColCount) {\n return null;\n }\n const headerC = this._table.getHeaderDefine(col, row) as any;\n if (headerC.columns && headerC.columns.length > 0) {\n return null;\n }\n\n let frozen = this.freezeIcon;\n // 使用table.options.frozenColCount原始冻结信息获取按钮\n if (this._table.options.frozenColCount - 1 > col) {\n frozen = this.frozenIcon;\n } else if (this._table.options.frozenColCount - 1 === col) {\n frozen = this.frozenCurrentIcon;\n }\n return frozen;\n }\n\n getSortIcon(order: SortOrder | undefined, _table: BaseTableAPI, col: number, row: number): ColumnIconOption | null {\n // this.showSortIcon = undefined;\n const icon = order === 'asc' ? this.upIcon : order === 'desc' ? this.downIcon : this.normalIcon;\n\n const headerC = _table.getHeaderDefine(col, row) as any;\n let _showSort;\n if (headerC) {\n if (typeof headerC.showSort === 'function') {\n _showSort = headerC.showSort({ col, row, table: this._table });\n } else {\n _showSort = headerC.showSort;\n }\n }\n if (\n !headerC ||\n _showSort === false ||\n (!isValid(_showSort) && !headerC.sort) ||\n (headerC.columns && headerC.columns.length > 0)\n ) {\n return null;\n }\n return icon;\n }\n\n getSortIconForPivotTable(\n order: SortOrder | undefined,\n _table: BaseTableAPI,\n col: number,\n row: number\n ): ColumnIconOption | null {\n const headerC = _table.getHeaderDefine(col, row) as any;\n let _showSort;\n if (headerC) {\n if (typeof headerC.showSort === 'function') {\n _showSort = headerC.showSort({ col, row, table: this._table });\n } else {\n _showSort = headerC.showSort;\n }\n }\n if (\n !headerC ||\n _showSort === false ||\n (!isValid(_showSort) && !headerC.sort) ||\n (headerC.columns && headerC.columns.length > 0)\n ) {\n return null;\n }\n const icon =\n order?.toUpperCase() === 'ASC' ? this.upIcon : order?.toUpperCase() === 'DESC' ? this.downIcon : this.normalIcon;\n // const icon = order === 'ASC' ? this.downIcon : this.upIcon;\n return icon;\n }\n\n private getDropDownStateIcons(_table: BaseTableAPI, col: number, row: number): ColumnIconOption[] {\n const headerC = _table.getHeaderDefine(col, row) as any;\n const headerL = _table._getHeaderLayoutMap(col, row);\n const { dropDownMenu } = headerL as HeaderData;\n const results: ColumnIconOption[] = [];\n if (\n (Array.isArray(dropDownMenu) && dropDownMenu.length) || // header中配置dropDownMenu\n (Array.isArray(_table.globalDropDownMenu) && _table.globalDropDownMenu.length && !headerC?.columns?.length) // 全局配置dropDownMenu,只在最下级表头展示\n ) {\n const menus = dropDownMenu || _table.globalDropDownMenu;\n let highlightIndex = -1;\n let subHighlightIndex = -1;\n for (let i = 0; i < menus.length; i++) {\n const menu = menus[i];\n // 优先判断子元素\n if (typeof menu === 'object' && menu.children && menu.children.length) {\n for (let j = 0; j < menu.children.length; j++) {\n const childItem = menu.children[j];\n if (\n _table.stateManager.menu?.dropDownMenuHighlight &&\n isMenuHighlight(\n _table,\n _table.stateManager.menu?.dropDownMenuHighlight,\n typeof childItem === 'object' ? childItem?.menuKey : childItem,\n col,\n row,\n i\n )\n ) {\n highlightIndex = i;\n subHighlightIndex = j;\n break;\n }\n }\n }\n if (_table._dropDownMenuIsHighlight(col, row, i)) {\n highlightIndex = i;\n break;\n }\n }\n // const highlightIndex = _table._dropDownMenuIsHighlight(col, row);\n if (highlightIndex !== -1) {\n let menu;\n if (subHighlightIndex !== -1) {\n menu = ((dropDownMenu || _table.globalDropDownMenu)[highlightIndex] as any).children[\n subHighlightIndex\n ] as any;\n } else {\n menu = (dropDownMenu || _table.globalDropDownMenu)[highlightIndex] as any;\n }\n\n if (menu.stateIcon) {\n if (menu.stateIcon.svg) {\n results.push({\n type: 'svg',\n name: menu.stateIcon.src || menu.stateIcon.svg,\n width: menu.stateIcon.width || 22,\n height: menu.stateIcon.height || 22,\n // dropDownIndex: highlightIndex,\n svg: menu.stateIcon.svg,\n positionType: IconPosition.right,\n marginRight: 0,\n funcType: IconFuncTypeEnum.dropDownState,\n interactive: false\n // hover: {\n // width: menu.stateIcon.width || 22,\n // height: menu.stateIcon.height || 22,\n // bgColor: 'rgba(101, 117, 168, 0.1)',\n // },\n });\n } else if (menu.stateIcon.src) {\n results.push({\n type: 'image',\n name: menu.stateIcon.src || menu.stateIcon.svg,\n width: menu.stateIcon.width || 22,\n height: menu.stateIcon.height || 22,\n // dropDownIndex: highlightIndex,\n src: menu.stateIcon.src,\n positionType: IconPosition.right,\n marginRight: 0,\n funcType: IconFuncTypeEnum.dropDownState,\n interactive: false\n // hover: {\n // width: menu.stateIcon.width || 22,\n // height: menu.stateIcon.height || 22,\n // bgColor: 'rgba(101, 117, 168, 0.1)',\n // },\n });\n }\n }\n }\n }\n return results;\n }\n /**\n * 内置dropDownIcon的位置信息\n * @param cellRect\n * @param marginTop\n * @param baseline\n * @returns\n */\n getDropDownIconRect(cellRect: RectProps, marginTop: number, baseline?: string): RectProps {\n // const left = cellRect.right - (this.downIcon.box?.width || 0) - marginRight;\n // const right = cellRect.right - marginRight;\n const iconW = this.downIcon.hover?.width ?? this.downIcon?.width ?? 0;\n const iconH = this.downIcon.hover?.height ?? this.downIcon?.height ?? 0;\n const left = cellRect.right - 2 - iconW;\n const right = cellRect.right - 2;\n let top;\n if (baseline === 'middle') {\n top = cellRect.top + cellRect.height / 2 - iconW / 2;\n } else if (baseline === 'top') {\n top = cellRect.top + marginTop / 2;\n } else if (baseline === 'bottom') {\n top = cellRect.bottom - marginTop * 2;\n } else {\n top = cellRect.top;\n }\n const bottom = iconH + top;\n\n return {\n left,\n right,\n top,\n bottom,\n width: iconW,\n height: iconH\n };\n }\n\n getHierarchyIcon(col: number, row: number) {\n const { hierarchyState } = this._table._getHeaderLayoutMap(col, row) as HeaderData;\n if (hierarchyState) {\n if (hierarchyState === HierarchyState.expand) {\n //展开状态 应该显示-号\n return this.expandIcon;\n } else if (hierarchyState === HierarchyState.collapse) {\n //折叠状态 应该显示-号\n return this.collapseIcon;\n }\n }\n return undefined;\n }\n getHierarchyIconWidth() {\n return this.expandIcon.width + (this.expandIcon.marginLeft ?? 0) + (this.expandIcon.marginRight ?? 0);\n }\n private checkDropDownIcon(_table: BaseTableAPI, col: number, row: number) {\n /*\n * dropDownMenu有三种状态:\n * 1. header中未配置 =》 使用globalDropDownMenu,icon展示\n * 2. header中配置 =》 使用header中的dropDownMenu,icon展示\n * 3. header中dropDownMenu为空数组 =》 icon不展示\n */\n if (_table.isPivotTable()) {\n const headerC = _table._getHeaderLayoutMap(col, row) as any;\n if (\n Array.isArray(headerC.dropDownMenu) &&\n headerC.dropDownMenu.length // header中配置dropDownMenu\n ) {\n return true;\n }\n } else {\n const headerC = _table.getHeaderDefine(col, row) as any;\n if (\n (Array.isArray(headerC.dropDownMenu) && headerC.dropDownMenu.length) || // header中配置dropDownMenu\n ((!Array.isArray(headerC.dropDownMenu) || headerC.dropDownMenu.length !== 0) && // header中dropDownMenu为空数组,不显示\n Array.isArray(_table.globalDropDownMenu) &&\n _table.globalDropDownMenu.length && // 全局配置dropDownMenu\n !headerC?.columns?.length) // 只在最下级表头展示\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n getStyleClass(headerType: 'text' | 'image' | 'video' | 'link' | 'checkbox') {\n switch (headerType) {\n case 'text':\n return TextHeaderStyle;\n case 'image':\n return ImageStyle;\n case 'video':\n return ImageStyle;\n case 'link':\n return TextHeaderStyle;\n case 'checkbox':\n return CheckboxStyle;\n }\n }\n\n setTableColumnsEditor() {\n const setEditor = (colDefines: ColumnsDefine, setColumns: ColumnsDefine) => {\n colDefines?.forEach((colDefine, index) => {\n if (colDefine.editor) {\n setColumns[index].editor = colDefine.editor;\n }\n if (colDefine.columns) {\n setEditor(colDefine.columns, setColumns[index].columns);\n }\n });\n };\n setEditor((this._table as ListTable).options.columns, (this._table as ListTable).internalProps.columns);\n }\n}\n","import type { BaseTable } from '../core';\nimport type { Rect } from '../tools/Rect';\nimport { Env } from '../tools/env';\n\nexport class FocusInput extends EventTarget {\n private _container: HTMLDivElement;\n private _table: BaseTable;\n private _input: HTMLInputElement;\n constructor(table: BaseTable, parentElement: HTMLElement) {\n super();\n this._table = table;\n if (Env.mode === 'node') {\n return;\n }\n const div = document.createElement('div'); //再加一层 C360插件逻辑中用的window.getSelection()来判断的滚动\n // div.style.position = 'fixed';//定位不能使用fixed 在父级transform非none的时候 都会有问题\n div.style.opacity = '0';\n div.dataset.vtable = 'vtable'; //这里不能变 C360取元素的依据\n div.style.pointerEvents = 'none';\n div.classList.add('input-container');\n const input = (this._input = document.createElement('input'));\n div.appendChild(input);\n input.classList.add('table-focus-control');\n input.dataset.vtable = 'vtable';\n input.readOnly = true;\n parentElement.appendChild(div);\n this._container = div;\n }\n\n focus(): void {\n this._input.focus({ preventScroll: true });\n }\n setFocusRect(rect: Rect, value: string): void {\n const input = this._input;\n input.value = value;\n // input.focus({ preventScroll: true });\n input.select();\n const top = rect.top - this._table.scrollTop;\n const left = rect.left - this._table.scrollLeft;\n input.style.top = `${top.toFixed()}px`;\n input.style.left = `${left.toFixed()}px`;\n input.style.width = `${rect.width.toFixed()}px`;\n input.style.height = `${rect.height.toFixed()}px`;\n }\n get input(): HTMLInputElement {\n return this._input;\n }\n release(): void {\n // document.removeChild(this._input);\n this._container.parentElement?.removeChild(this._container);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\nexport class NumberRangeMap {\n data: Map;\n cumulativeSum: Map;\n difference: Map;\n totalSum: number;\n table: BaseTableAPI;\n isUpdate = false;\n private _keys: number[] = [];\n private _sorted = false;\n\n constructor(table: BaseTableAPI) {\n this.data = new Map();\n this._keys.length = 0;\n this.cumulativeSum = new Map();\n this.difference = new Map();\n this.totalSum = 0;\n this.table = table;\n }\n\n get length() {\n return this.data.size;\n }\n\n clear() {\n this._keys = [];\n this.data.clear();\n this.cumulativeSum.clear();\n this.difference.clear();\n this.totalSum = 0;\n }\n\n clearRange() {\n this.cumulativeSum.clear();\n this.difference.clear();\n }\n\n add(position: number, value: number) {\n if (!isValid(value)) {\n return;\n }\n const defaultValue = this.table.getRowHeight(position);\n if (!this.data.has(position)) {\n this._keys.push(position);\n this._sorted = false;\n }\n this.data.set(position, value);\n this.totalSum += value;\n // this.updateCumulativeSum(position, value);\n this.updateDifference(position, value - defaultValue);\n }\n\n remove(position: number) {\n if (this.data.has(position)) {\n const value = this.data.get(position);\n this.data.delete(position);\n const index = this._keys.indexOf(position);\n if (index !== -1) {\n this._keys.splice(index, 1); // 使用 splice() 方法删除指定索引位置的元素\n }\n this.totalSum -= value;\n const defaultValue = this.table.getRowHeight(position);\n // this.updateCumulativeSum(position, -value);\n this.updateDifference(position, defaultValue - value);\n }\n }\n\n put(position: number, newValue: number) {\n if (!isValid(newValue)) {\n return;\n }\n if (this.data.has(position)) {\n const oldValue = this.data.get(position);\n\n if (oldValue === newValue) {\n return;\n }\n this.data.set(position, newValue);\n const difference = newValue - oldValue;\n this.totalSum += difference;\n // this.updateCumulativeSum(position, difference);\n this.updateDifference(position, difference);\n } else {\n this.add(position, newValue);\n }\n }\n\n get(position: number) {\n return this.data.get(position);\n }\n\n has(position: number) {\n return this.data.has(position);\n }\n\n private _sort() {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n }\n\n updateDifference(position: number, difference: number) {\n const oldDifference = this.difference.get(position) ?? 0;\n this.difference.set(position, oldDifference + difference);\n this.update();\n }\n\n getSumInRange(start: number, end: number) {\n return this.calculatePrefixSum(end) - this.calculatePrefixSum(start - 1);\n }\n\n updateCumulativeSum(position: number, difference: number) {\n // 更新累加和\n for (const [pos, sum] of this.cumulativeSum) {\n if (pos >= position) {\n this.cumulativeSum.set(pos, sum + difference);\n }\n }\n }\n\n calculatePrefixSum(position: number) {\n if (position < 0) {\n return 0;\n }\n if (this.cumulativeSum.has(position)) {\n let cache = this.cumulativeSum.get(position);\n for (const [pos, difference] of this.difference) {\n if (pos <= position) {\n cache += difference;\n }\n }\n return cache;\n }\n\n this.dealDiffenence();\n return this.getCumulativeSum(position);\n }\n\n getCumulativeSum(position: number) {\n let sum = 0;\n for (let i = position; i >= 0; i--) {\n if (this.cumulativeSum.has(i)) {\n sum += this.cumulativeSum.get(i);\n break;\n } else {\n sum += this.data.get(i) ?? this.table.getRowHeight(i);\n }\n // if (i === position && this.cumulativeSum.has(i + 1)) {\n // sum += this.cumulativeSum.get(i + 1) - (this.data.get(i + 1) ?? this.table.getRowHeight(i + 1));\n // break;\n // }\n }\n this.cumulativeSum.set(position, sum);\n return sum;\n }\n\n update() {\n if (this.isUpdate) {\n return;\n }\n this.isUpdate = true;\n setTimeout(() => {\n this.dealDiffenence();\n this.isUpdate = false;\n }, 0);\n }\n\n dealDiffenence() {\n for (const [sumPos] of this.cumulativeSum) {\n for (const [difPos, difference] of this.difference) {\n if (sumPos >= difPos) {\n const oldSum = this.cumulativeSum.get(sumPos);\n this.cumulativeSum.set(sumPos, oldSum + difference);\n }\n }\n }\n\n this.difference.clear();\n }\n\n // add and reorder\n insert(position: number, value?: number) {\n // clear all sum cover position\n for (let i = position; i <= this.getLastIndex(); i++) {\n this.cumulativeSum.delete(i);\n }\n const lastIndex = this.getLastIndex() + 1;\n this.adjustOrder(position, position + 1, lastIndex - position);\n if (isValid(value)) {\n this.put(position, value);\n }\n }\n\n getLastIndex() {\n this._sort();\n return this._keys[this._keys.length - 1];\n }\n\n delLast() {\n const lastIndex = this.getLastIndex();\n this.remove(lastIndex);\n }\n\n // del and reorder\n delete(position: number) {\n if (!this.has(position)) {\n return;\n }\n\n // clear all sum cover position\n for (let i = position; i <= this.getLastIndex(); i++) {\n this.cumulativeSum.delete(i);\n }\n\n const lastIndex = this.getLastIndex();\n\n this.adjustOrder(position + 1, position, lastIndex - position);\n this.delLast();\n }\n\n /**\n * 将sourceIndex位置开始 往后moveCount个值 调整到targetIndex位置处\n * @param sourceIndex\n * @param targetIndex\n * @param moveCount\n */\n adjustOrder(sourceIndex: number, targetIndex: number, moveCount: number) {\n this.clearRange();\n this._sort();\n const { _keys: keys } = this;\n\n if (sourceIndex > targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex + moveCount - 1); i >= 0; i--) {\n const key = keys[i];\n if (key >= sourceIndex) {\n sourceVals.push(this.get(key));\n } else if (targetIndex <= key && key < sourceIndex) {\n this.put(key + moveCount, this.get(key));\n } else if (key < targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[moveCount - 1 - i]);\n }\n }\n const { length } = keys;\n if (sourceIndex < targetIndex) {\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < length; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + moveCount) {\n sourceVals.push(this.get(key));\n } else if (sourceIndex + moveCount <= key && key <= targetIndex) {\n this.put(key - moveCount, this.get(key));\n } else if (key > targetIndex) {\n break;\n }\n }\n for (let i = 0; i < moveCount; i++) {\n this.put(targetIndex + i, sourceVals[i]);\n }\n }\n }\n\n exchangeOrder(\n sourceIndex: number,\n sourceCount: number,\n targetIndex: number,\n targetCount: number,\n insertIndex: number\n ) {\n const { _keys: keys } = this;\n if (!this._sorted) {\n keys.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n this._sorted = true;\n }\n if (sourceIndex > targetIndex) {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, targetIndex); i < indexFirst(keys, sourceIndex) + sourceCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(insertIndex + sourceCount + i, targetVals[i]);\n }\n } else {\n //先将target部分的值存起来\n const targetVals = [];\n const sourceVals = [];\n for (let i = indexFirst(keys, sourceIndex); i < indexFirst(keys, targetIndex) + targetCount; i++) {\n const key = keys[i];\n if (key >= sourceIndex && key < sourceIndex + sourceCount) {\n sourceVals.push(this.get(key));\n } else {\n targetVals.push(this.get(key));\n }\n }\n for (let i = 0; i < sourceCount; i++) {\n this.put(insertIndex + i, sourceVals[i]);\n }\n\n for (let i = 0; i < targetVals.length; i++) {\n this.put(sourceIndex + i, targetVals[i]);\n }\n }\n }\n}\n\nfunction indexFirst(arr: number[], elm: number): number {\n let low = 0;\n let high = arr.length - 1;\n while (low <= high) {\n const i = Math.floor((low + high) / 2);\n if (arr[i] === elm) {\n return i;\n } else if (arr[i] > elm) {\n high = i - 1;\n } else {\n low = i + 1;\n }\n }\n return high < 0 ? 0 : high;\n}\n","import {\n InternalIconName,\n type ColumnIconOption,\n type ListTableAPI,\n type PivotTableAPI,\n type RectProps,\n type SortOrder,\n type SvgIcon\n} from '../ts-types';\nimport * as registerIcons from '../icons';\n\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nexport class RowSeriesNumberHelper {\n dragReorderIconName: SvgIcon;\n\n _table: BaseTableAPI;\n constructor(_table: BaseTableAPI) {\n this._table = _table;\n const regedIcons = registerIcons.get();\n\n this.dragReorderIconName = regedIcons[InternalIconName.dragReorderIconName] as SvgIcon;\n }\n\n getIcons(col: number, row: number): ColumnIconOption[] {\n return [this.dragReorderIconName];\n }\n}\n","import type { CellAddressWithBound, ColumnInfo, RowInfo } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { _getTargetFrozenColAt, _getTargetFrozenRowAt } from '../tableHelper';\n\n/**\n * 根据y值计算所在行\n * @param absoluteY 相对于表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getRowAt(\n absoluteY: number,\n _this: BaseTableAPI\n): { top: number; row: number; bottom: number; height: number } {\n const frozen = _getTargetFrozenRowAt(_this as any, absoluteY);\n if (frozen) {\n return frozen;\n }\n let row = getTargetRowAt(absoluteY, _this);\n if (!row) {\n row = {\n top: -1,\n row: -1,\n bottom: -1,\n height: -1\n };\n }\n return row;\n}\n\n/**\n * 根据x值计算所在列\n * @param absoluteX 相对于表格左上角的x坐标(无滚动)\n * @returns\n */\nexport function getColAt(\n absoluteX: number,\n _this: BaseTableAPI\n): { left: number; col: number; right: number; width: number } {\n const frozen = _getTargetFrozenColAt(_this as any, absoluteX);\n if (frozen) {\n return frozen;\n }\n let col = getTargetColAt(absoluteX, _this);\n if (!col) {\n col = {\n left: -1,\n col: -1,\n right: -1,\n width: 1\n };\n }\n return col;\n}\n/**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX 表格左上角的x坐标(无滚动)\n * @param absoluteY 表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getCellAt(absoluteX: number, absoluteY: number, _this: BaseTableAPI): CellAddressWithBound {\n const rowInfo = getRowAt(absoluteY, _this);\n const { row, top, bottom, height } = rowInfo;\n const colInfo = getColAt(absoluteX, _this);\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n}\n\n/**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX 表格左上角的x坐标(无滚动)\n * @returns\n */\nexport function getTargetColAt(absoluteX: number, _this: BaseTableAPI): ColumnInfo | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n const findBefore = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let right = startRight;\n for (let col = startCol; col >= 0; col--) {\n const width = _this.getColWidth(col);\n const left = right - width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n right = left;\n }\n return null;\n };\n const findAfter = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let left = startRight - _this.getColWidth(startCol);\n const { colCount } = _this.internalProps;\n for (let col = startCol; col < colCount; col++) {\n const width = _this.getColWidth(col);\n const right = left + width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n left = right;\n }\n return null;\n };\n //计算这个位置处是第几行\n const candCol = computeTargetColByX(absoluteX, _this);\n const right = _this.getColsWidth(0, candCol);\n if (absoluteX >= right) {\n return findAfter(candCol, right);\n }\n return findBefore(candCol, right);\n}\n\n/**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX 表格左上角的y坐标(无滚动)\n * @returns\n */\nexport function getTargetRowAt(absoluteY: number, _this: BaseTableAPI): RowInfo | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n\n const findBefore = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let bottom = startBottom;\n for (let row = startRow; row >= 0; row--) {\n const height = _this.getRowHeight(row);\n const top = bottom - height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n bottom = top;\n }\n return null;\n };\n const findAfter = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let top = startBottom - _this.getRowHeight(startRow);\n const { rowCount } = _this.internalProps;\n for (let row = startRow; row < rowCount; row++) {\n const height = _this.getRowHeight(row);\n const bottom = top + height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n top = bottom;\n }\n return null;\n };\n // const candRow = Math.min(\n // Math.ceil(absoluteY / this.internalProps.defaultRowHeight),\n // this.rowCount - 1\n // );\n //计算这个位置处是第几行\n const candRow = computeTargetRowByY(absoluteY, _this);\n const bottom = _this.getRowsHeight(0, candRow);\n if (absoluteY >= bottom) {\n return findAfter(candRow, bottom);\n }\n return findBefore(candRow, bottom);\n}\n\n/**\n * 根据x获取右侧冻结中该位置所处列值\n * @param table\n * @param absoluteX 屏幕坐标x值\n * @returns\n */\nexport function getTargetColAtConsiderRightFrozen(\n absoluteX: number,\n isConsider: boolean,\n _this: BaseTableAPI\n): ColumnInfo | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n if (\n isConsider &&\n absoluteX > _this.tableNoFrameWidth - _this.getRightFrozenColsWidth() &&\n absoluteX < _this.tableNoFrameWidth &&\n absoluteX <= _this.getAllColsWidth()\n ) {\n for (let i = 0; i < _this.rightFrozenColCount; i++) {\n if (absoluteX > _this.tableNoFrameWidth - _this.getColsWidth(_this.colCount - i - 1, _this.colCount - 1)) {\n return {\n col: _this.colCount - i - 1,\n left: undefined,\n right: undefined,\n width: undefined\n };\n }\n }\n }\n return getTargetColAt(absoluteX, _this);\n}\n\n/**\n * 根据y获取底部冻结该位置所处行值\n * @param table\n * @param absoluteX 屏幕坐标y值\n * @param isConsider 是否考Y值是否在底部冻结区域内\n * @returns\n */\nexport function getTargetRowAtConsiderBottomFrozen(\n absoluteY: number,\n isConsider: boolean,\n _this: BaseTableAPI\n): RowInfo | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n absoluteY = absoluteY - _this.tableY;\n if (\n isConsider &&\n absoluteY > _this.tableNoFrameHeight - _this.getBottomFrozenRowsHeight() &&\n absoluteY < _this.tableNoFrameHeight\n ) {\n for (let i = 0; i < _this.rightFrozenColCount; i++) {\n if (absoluteY > _this.tableNoFrameHeight - _this.getRowsHeight(_this.rowCount - i - 1, _this.rowCount - 1)) {\n return {\n row: _this.rowCount - i - 1,\n top: undefined,\n bottom: undefined,\n height: undefined\n };\n }\n }\n }\n return getTargetRowAt(absoluteY, _this);\n}\n\n/**\n * 根据y值(包括了scroll的)计算所在行\n * @param this\n * @param absoluteY 左边y值,包含了scroll滚动距离\n * @returns\n */\nexport function computeTargetRowByY(absoluteY: number, _this: BaseTableAPI): number {\n let defaultRowHeight = _this.defaultRowHeight;\n\n //使用二分法计算出row\n if (_this._rowRangeHeightsMap.get(`$0$${_this.rowCount - 1}`)) {\n defaultRowHeight = _this._rowRangeHeightsMap.get(`$0$${_this.rowCount - 1}`) / _this.rowCount;\n // let startRow = 0;\n // let endRow = this.rowCount - 1;\n // while (endRow - startRow > 1) {\n // const midRow = Math.floor((startRow + endRow) / 2);\n // if (absoluteY < this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n // endRow = midRow;\n // } else if (absoluteY > this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n // startRow = midRow;\n // } else {\n // return midRow;\n // }\n // }\n // return endRow;\n }\n //否则使用defaultRowHeight大约计算一个row\n return Math.min(Math.ceil(absoluteY / defaultRowHeight), _this.rowCount - 1);\n}\n\n/**\n * 根据x值(包括了scroll的)计算所在列 主要借助colRangeWidthsMap缓存来提高计算效率\n * @param this\n * @param absoluteX 左边x值,包含了scroll滚动距离\n * @returns\n */\nexport function computeTargetColByX(absoluteX: number, _this: BaseTableAPI): number {\n //使用二分法计算出col\n if (_this._colRangeWidthsMap.get(`$0$${_this.colCount - 1}`)) {\n let startCol = 0;\n let endCol = _this.colCount - 1;\n while (endCol - startCol > 1) {\n const midCol = Math.floor((startCol + endCol) / 2);\n if (absoluteX < _this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n endCol = midCol;\n } else if (absoluteX > _this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n startCol = midCol;\n } else {\n return midCol;\n }\n }\n return endCol;\n }\n //否则使用defaultColWidth大约计算一个col\n return Math.min(Math.ceil(absoluteX / _this.internalProps.defaultColWidth), _this.colCount - 1);\n}\n\n/**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,考虑表格滚动\n * @param relativeY 左边y值,相对于容器左上角,考虑表格滚动\n * @returns\n */\nexport function getCellAtRelativePosition(x: number, y: number, _this: BaseTableAPI): CellAddressWithBound {\n // table border and outer component\n x -= _this.tableX;\n y -= _this.tableY;\n\n // top frozen\n let topFrozen = false;\n if (y > 0 && y < _this.getFrozenRowsHeight()) {\n topFrozen = true;\n }\n\n // left frozen\n let leftFrozen = false;\n if (x > 0 && x < _this.getFrozenColsWidth()) {\n leftFrozen = true;\n }\n\n // bottom frozen\n let bottomFrozen = false;\n if (\n y > _this.tableNoFrameHeight - _this.getBottomFrozenRowsHeight() &&\n y < _this.tableNoFrameHeight &&\n y <= _this.getAllRowsHeight()\n ) {\n bottomFrozen = true;\n }\n // right frozen\n let rightFrozen = false;\n if (\n x > _this.tableNoFrameWidth - _this.getRightFrozenColsWidth() &&\n x < _this.tableNoFrameWidth &&\n x <= _this.getAllColsWidth()\n ) {\n rightFrozen = true;\n }\n\n const colInfo = getTargetColAtConsiderRightFrozen(\n leftFrozen || rightFrozen ? x : x + _this.scrollLeft,\n rightFrozen,\n _this\n );\n const rowInfo = getTargetRowAtConsiderBottomFrozen(\n topFrozen || bottomFrozen ? y : y + _this.scrollTop,\n bottomFrozen,\n _this\n );\n\n if (colInfo && rowInfo) {\n const { row, top, bottom, height } = rowInfo;\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n }\n return { col: -1, row: -1 };\n}\n","import { isValid } from '@visactor/vutils';\nimport type { FullExtendStyle, HeaderStyleOption, StylePropertyFunctionArg } from '../ts-types';\nimport { TextHeaderStyle } from './style/MultilineTextHeaderStyle';\n// import { SortHeaderStyle } from \"./style/SortHeaderStyle\";\nimport { Style } from './style/Style';\nimport type { TableTheme } from '../themes/theme';\nimport { CheckboxStyle } from './style/CheckboxStyle';\n\nexport { Style, TextHeaderStyle };\n\nexport function of(\n headerStyle: HeaderStyleOption,\n defaultHeaderStyle: HeaderStyleOption,\n styleArg: StylePropertyFunctionArg,\n StyleClass: typeof Style,\n globalAutoWrapText: boolean,\n theme: TableTheme\n): FullExtendStyle {\n if (headerStyle || defaultHeaderStyle) {\n if (headerStyle instanceof Style) {\n return headerStyle;\n } else if (typeof headerStyle === 'function') {\n return of(headerStyle(styleArg), defaultHeaderStyle, styleArg, StyleClass, globalAutoWrapText, theme);\n }\n if (!headerStyle) {\n headerStyle = {};\n }\n if (globalAutoWrapText && !isValid((headerStyle as any).autoWrapText)) {\n (headerStyle as any).autoWrapText = true;\n }\n if (StyleClass === CheckboxStyle) {\n return new CheckboxStyle(\n headerStyle ?? {},\n (defaultHeaderStyle ?? {}) as any,\n (theme.checkboxStyle ?? {}) as any\n );\n }\n return new StyleClass(headerStyle ?? {}, (defaultHeaderStyle ?? {}) as any);\n }\n return StyleClass.DEFAULT;\n}\n","import type { LineWidthsPropertyDefine } from '..';\nimport { PaddingPropertyDefine } from '..';\nimport type {\n ColorPropertyDefine,\n ColorsPropertyDefine,\n IconPropertyDefine,\n LineClamp,\n LineDashsPropertyDefine,\n TextOverflow,\n UnderlinePropertyDefine,\n LineDashPropertyDefine,\n LineThroughPropertyDefine,\n TagPropertyDefine,\n PaddingsPropertyDefine,\n StylePropertyFunctionArg,\n CursorPropertyDefine,\n MarkedPropertyDefine,\n FontSizePropertyDefine,\n FontFamilyPropertyDefine,\n FontWeightPropertyDefine,\n FontVariantPropertyDefine,\n FontStylePropertyDefine,\n TextAlignType,\n TextBaselineType\n} from '../style-define';\nimport type { ThemeStyle } from '../theme';\n//这个style是在绘制里面的内容时用到的,用不到borderColor和borderLineWidth,所以和IStyleOption有些不一致\nexport interface ColumnStyle {\n padding?: PaddingsPropertyDefine;\n bgColor?: ColorPropertyDefine;\n // eslint-disable-next-line no-undef\n textAlign?: TextAlignType;\n // eslint-disable-next-line no-undef\n textBaseline?: TextBaselineType;\n color?: ColorPropertyDefine;\n\n fontSize?: FontSizePropertyDefine;\n fontFamily?: FontFamilyPropertyDefine;\n fontWeight?: FontWeightPropertyDefine;\n fontVariant?: FontVariantPropertyDefine;\n fontStyle?: FontStylePropertyDefine;\n\n textOverflow?: TextOverflow;\n // doChangeStyle: () => void;\n clone: () => ColumnStyle;\n linkColor?: ColorPropertyDefine;\n}\n\nexport type IHeaderStyle = ColumnStyle;\n\nexport type ISortheaderSyle = IHeaderStyle;\n\nexport interface IStyleOption {\n bgColor?: ColorPropertyDefine;\n padding?: PaddingsPropertyDefine;\n textAlign?: TextAlignType;\n textBaseline?: TextBaselineType;\n color?: ColorPropertyDefine;\n strokeColor?: ColorPropertyDefine;\n\n fontSize?: FontSizePropertyDefine;\n fontFamily?: FontFamilyPropertyDefine;\n fontWeight?: FontWeightPropertyDefine;\n fontVariant?: FontVariantPropertyDefine;\n fontStyle?: FontStylePropertyDefine;\n\n textOverflow?: TextOverflow;\n borderColor?: ColorsPropertyDefine;\n borderLineWidth?: LineWidthsPropertyDefine;\n\n lineHeight?: number;\n underline?: UnderlinePropertyDefine;\n /** TODO */\n underlineColor?: ColorPropertyDefine;\n underlineDash?: LineDashPropertyDefine;\n underlineOffset?: number;\n lineThrough?: LineThroughPropertyDefine;\n /** TODO */\n lineThroughColor?: ColorPropertyDefine;\n /** TODO */\n lineThroughDash?: LineDashPropertyDefine;\n\n borderLineDash?: LineDashsPropertyDefine;\n linkColor?: ColorPropertyDefine;\n\n // tag?: TagPropertyDefine;\n // tagFont?: FontPropertyDefine;\n // tagColor?: ColorPropertyDefine;\n // tagBgColor?: ColorPropertyDefine;\n // tagMargin?: number | string | (number | string)[];\n\n // dropDownIcon?: IconPropertyDefine;\n // dropDownHoverIcon?: IconPropertyDefine;\n cursor?: CursorPropertyDefine;\n\n textStick?: boolean | 'vertical' | 'horizontal';\n textStickBaseOnAlign?: boolean;\n\n marked?: MarkedPropertyDefine;\n}\n\nexport const cellStyleKeys = ['bgColor', 'color', 'strokeColor', 'borderColor', 'linkColor']; // keys of style not change cell layout\n\nexport interface ITextStyleOption extends IStyleOption {\n // lineHeight?: string | number;//移入IStyleOption中 单行文本类型也可以有\n autoWrapText?: boolean;\n lineClamp?: LineClamp;\n}\n\nexport interface IImageStyleOption extends IStyleOption {\n // imageSizing?: 'keep-aspect-ratio';\n // imageAutoSizing?: boolean;\n margin?: number;\n}\n// export type ISortHeaderStyleOption = IStyleOption;\n\nexport type ColumnStyleOption =\n | IStyleOption\n | ITextStyleOption\n | IImageStyleOption\n | ProgressBarStyleOption\n | CheckboxStyleOption\n | ((styleArg: StylePropertyFunctionArg) => IStyleOption | ITextStyleOption | IImageStyleOption);\n\nexport type HeaderStyleOption =\n | (IStyleOption & { textStick?: boolean | 'vertical' | 'horizontal' }) //表头可以配置吸附\n | ITextStyleOption\n | IImageStyleOption\n // | ISortHeaderStyleOption\n | ((styleArg: StylePropertyFunctionArg) => IStyleOption | ITextStyleOption | IImageStyleOption);\n// | ISortHeaderStyleOption\n\nexport type FullExtendStyle = HeaderStyleOption & ColumnStyleOption & ThemeStyle;\n\n// export interface BaseStyleOption {\n// bgColor?: ColorPropertyDefine;\n// }\n\n// export interface StdBaseStyleOption extends BaseStyleOption {\n// // eslint-disable-next-line no-undef\n// textAlign?: CanvasTextAlign;\n// // eslint-disable-next-line no-undef\n// textBaseline?: CanvasTextBaseline;\n// }\n// export interface StyleOption extends StdBaseStyleOption {\n// color?: ColorPropertyDefine;\n// font?: FontPropertyDefine;\n// padding?: PaddingsPropertyDefine;\n// textOverflow?: TextOverflow;\n// }\nexport interface ProgressBarStyleOption extends IStyleOption {\n // 是否显示进度条\n showBar?: boolean | ((args: StylePropertyFunctionArg) => boolean);\n // 进度条颜色\n barColor?: ColorPropertyDefine;\n // 进度条背景颜色\n barBgColor?: ColorPropertyDefine;\n // 进度条高度\n barHeight?: number | string;\n // 进度条距单元格底部距离\n barBottom?: number | string;\n // 进度条padding\n barPadding?: (number | string)[];\n // 进度条正向颜色\n barPositiveColor?: ColorPropertyDefine;\n // 进度条负向颜色\n barNegativeColor?: ColorPropertyDefine;\n // 进度条坐标轴轴颜色\n barAxisColor?: ColorPropertyDefine;\n // 进度条方向是否从右到左\n barRightToLeft?: boolean;\n\n // 是否显示进度条标记\n showBarMark?: boolean;\n // 进度条标记正向颜色\n barMarkPositiveColor?: ColorPropertyDefine;\n // 进度条标记负向颜色\n barMarkNegativeColor?: ColorPropertyDefine;\n // 进度条标记宽度\n barMarkWidth?: number;\n // 进度条标记位置\n barMarkPosition?: 'right' | 'bottom';\n}\n\nexport type CheckboxStyleOption = {\n size?: number;\n spaceBetweenTextAndIcon?: number;\n checkboxStyle?: CheckboxStyle;\n} & ITextStyleOption;\n\nexport type RadioStyleOption = {\n size?: number;\n spaceBetweenTextAndIcon?: number;\n spaceBetweenRadio?: number;\n radioStyle?: RadioStyle;\n} & ITextStyleOption;\n\nexport type CheckboxStyle = {\n // 选择框尺寸\n size?: number;\n // 选择框与文字间距\n spaceBetweenTextAndIcon?: number;\n\n // 未选中状态填充颜色\n defaultFill?: string;\n // 未选中状态描边颜色\n defaultStroke?: string;\n // disable状态填充颜色\n disableFill?: string;\n // checked状态填充颜色\n checkedFill?: string;\n // checked状态描边颜色\n checkedStroke?: string;\n // checked状态填充颜色\n disableCheckedFill?: string;\n // checked状态描边颜色\n disableCheckedStroke?: string;\n\n // checked状态图标url\n checkIconImage?: string;\n // indeterminate状态图标url\n indeterminateIconImage?: string;\n};\n\nexport type RadioStyle = {\n // 选择框尺寸\n size?: number;\n // 选择框与文字间距\n spaceBetweenTextAndIcon?: number;\n // 单元格内多个单选框,单选框直接的间距\n spaceBetweenRadio?: number;\n\n // 单选框环形图标外半径(会覆盖size)\n outerRadius?: number;\n // 单选框环形图标内半径\n innerRadius?: number;\n\n // 未选中状态填充颜色\n defaultFill?: string;\n // 未选中状态描边颜色\n defaultStroke?: string;\n // disable状态填充颜色\n disableFill?: string;\n // checked状态填充颜色\n checkedFill?: string;\n // checked状态描边颜色\n checkedStroke?: string;\n // checked状态填充颜色\n disableCheckedFill?: string;\n // checked状态描边颜色\n disableCheckedStroke?: string;\n};\n","import { isValid, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n cellStyleKeys,\n type CellRange,\n type ColumnStyleOption,\n type CustomCellStyle,\n type CustomCellStyleArrangement\n} from '../ts-types';\nimport type { Style } from '../body-helper/style';\nimport { Factory } from '../core/factory';\n\nexport interface ICustomCellStylePlugin {\n new (\n table: BaseTableAPI,\n customCellStyle: CustomCellStyle[],\n customCellStyleArrangement: CustomCellStyleArrangement[]\n ): CustomCellStylePlugin;\n}\n\nexport class CustomCellStylePlugin {\n table: BaseTableAPI;\n customCellStyle: CustomCellStyle[];\n customCellStyleArrangement: CustomCellStyleArrangement[];\n\n constructor(\n table: BaseTableAPI,\n customCellStyle: CustomCellStyle[],\n customCellStyleArrangement: CustomCellStyleArrangement[]\n ) {\n this.table = table;\n this.customCellStyle = customCellStyle;\n this.customCellStyleArrangement = customCellStyleArrangement;\n }\n\n getCustomCellStyle(col: number, row: number) {\n const customStyleIds = this.getCustomCellStyleIds(col, row);\n if (customStyleIds.length) {\n const styles: ColumnStyleOption[] = [];\n\n customStyleIds.forEach(customStyleId => {\n const styleOption = this.getCustomCellStyleOption(customStyleId);\n if (styleOption?.style) {\n styles.push(styleOption.style);\n }\n });\n\n return merge({}, ...styles);\n // const styleOption = this.getCustomCellStyleOption(customStyleId);\n // return styleOption?.style;\n }\n return undefined;\n }\n\n getCustomCellStyleIds(col: number, row: number) {\n // let customStyleId;\n const customStyleIds: string[] = [];\n\n const range = this.table.getCellRange(col, row);\n for (let c = range.start.col; c <= range.end.col; c++) {\n for (let r = range.start.row; r <= range.end.row; r++) {\n // eslint-disable-next-line no-loop-func\n this.customCellStyleArrangement.forEach(style => {\n if (style.cellPosition.range) {\n if (\n style.cellPosition.range.start.col <= c &&\n style.cellPosition.range.end.col >= c &&\n style.cellPosition.range.start.row <= r &&\n style.cellPosition.range.end.row >= r\n ) {\n // customStyleId = style.customStyleId;\n customStyleIds.push(style.customStyleId);\n }\n } else if (style.cellPosition.col === c && style.cellPosition.row === r) {\n // customStyleId = style.customStyleId;\n customStyleIds.push(style.customStyleId);\n }\n });\n }\n }\n\n return customStyleIds;\n }\n\n getCustomCellStyleOption(customStyleId: string) {\n return this.customCellStyle.find(style => style.id === customStyleId);\n }\n\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n const index = this.customCellStyle.findIndex(style => style.id === customStyleId);\n if (index === -1) {\n this.customCellStyle.push({\n id: customStyleId,\n style: customStyle\n });\n } else {\n this.customCellStyle[index] = {\n id: customStyleId,\n style: customStyle\n };\n }\n\n this.customCellStyleArrangement.forEach(cellStyle => {\n const cellPos = cellStyle.cellPosition;\n if (cellStyle.customStyleId === customStyleId) {\n if (cellPos.range) {\n for (\n let col = Math.max(0, cellPos.range.start.col);\n col <= Math.min(this.table.colCount - 1, cellPos.range.end.col);\n col++\n ) {\n for (\n let row = Math.max(0, cellPos.range.start.row);\n row <= Math.min(this.table.rowCount - 1, cellPos.range.end.row);\n row++\n ) {\n this.table.scenegraph.updateCellContent(col, row);\n }\n }\n } else {\n this.table.scenegraph.updateCellContent(cellPos.col, cellPos.row);\n }\n }\n });\n this.table.scenegraph.updateNextFrame();\n }\n\n arrangeCustomCellStyle(\n cellPos: {\n col?: number;\n row?: number;\n range?: CellRange;\n },\n customStyleId: string | undefined | null,\n forceFastUpdate?: boolean\n ) {\n const index = this.customCellStyleArrangement.findIndex(style => {\n if (style.cellPosition.range && cellPos.range) {\n return (\n style.cellPosition.range.start.col === cellPos.range.start.col &&\n style.cellPosition.range.start.row === cellPos.range.start.row &&\n style.cellPosition.range.end.col === cellPos.range.end.col &&\n style.cellPosition.range.end.row === cellPos.range.end.row\n );\n }\n return style.cellPosition.col === cellPos.col && style.cellPosition.row === cellPos.row;\n });\n\n if (index === -1 && !customStyleId) {\n // do nothing\n return;\n } else if (index === -1 && customStyleId) {\n // add new style\n this.customCellStyleArrangement.push({\n cellPosition: {\n col: cellPos.col,\n row: cellPos.row,\n range: cellPos.range\n },\n customStyleId: customStyleId\n });\n } else if (this.customCellStyleArrangement[index].customStyleId === customStyleId) {\n // same style\n return;\n } else if (customStyleId) {\n // update style\n this.customCellStyleArrangement[index].customStyleId = customStyleId;\n } else {\n // delete useless style\n this.customCellStyleArrangement.splice(index, 1);\n }\n\n const style = this.getCustomCellStyleOption(customStyleId)?.style;\n // let forceFastUpdate;\n if (style) {\n forceFastUpdate = true;\n for (const key in style) {\n if (cellStyleKeys.indexOf(key) === -1) {\n forceFastUpdate = false;\n break;\n }\n }\n }\n\n // update cell group\n if (cellPos.range) {\n for (\n let col = Math.max(0, cellPos.range.start.col);\n col <= Math.min(this.table.colCount - 1, cellPos.range.end.col);\n col++\n ) {\n for (\n let row = Math.max(0, cellPos.range.start.row);\n row <= Math.min(this.table.rowCount - 1, cellPos.range.end.row);\n row++\n ) {\n const range = this.table.getCellRange(col, row);\n for (let c = range.start.col; c <= range.end.col; c++) {\n for (let r = range.start.row; r <= range.end.row; r++) {\n this.table.scenegraph.updateCellContent(c, r, forceFastUpdate);\n }\n }\n // this.table.scenegraph.updateCellContent(col, row);\n }\n }\n } else {\n this.table.scenegraph.updateCellContent(cellPos.col, cellPos.row, forceFastUpdate);\n }\n\n this.table.scenegraph.updateNextFrame();\n }\n\n updateCustomCell(customCellStyle: CustomCellStyle[], customCellStyleArrangement: CustomCellStyleArrangement[]) {\n this.customCellStyle.length = 0;\n this.customCellStyleArrangement.length = 0;\n customCellStyle.forEach((cellStyle: CustomCellStyle) => {\n this.registerCustomCellStyle(cellStyle.id, cellStyle.style);\n });\n customCellStyleArrangement.forEach((cellStyle: CustomCellStyleArrangement) => {\n this.arrangeCustomCellStyle(cellStyle.cellPosition, cellStyle.customStyleId);\n });\n }\n\n hasCustomCellStyle(customStyleId: string) {\n return this.customCellStyle.some(style => style.id === customStyleId);\n }\n}\n\nexport function mergeStyle(cacheStyle: Style, customCellStyle: ColumnStyleOption): Style {\n cacheStyle = cacheStyle.clone();\n\n for (const key in customCellStyle) {\n const value = (customCellStyle as any)[key];\n if (isValid(value)) {\n (cacheStyle as any)[`_${key}`] = value;\n }\n }\n\n return cacheStyle;\n}\n\nexport const registerCustomCellStylePlugin = () => {\n Factory.registerComponent('customCellStylePlugin', CustomCellStylePlugin);\n};\n\n// export type ICustomCellStylePlugin = typeof CustomCellStylePlugin;\n","import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { isFunction } from '@visactor/vutils';\nimport * as headerStyleContents from '../header-helper/style';\nimport * as columnStyleContents from '../body-helper/style';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from '../ts-types/base-table';\nimport type { ColorPropertyDefine, FullExtendStyle, MappingRule } from '../ts-types';\nimport { mergeStyle } from '../plugins/custom-cell-style';\n\nconst EMPTY_STYLE = {};\n\n/**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\nexport function getCellStyle(col: number, row: number, table: BaseTableAPI): FullExtendStyle {\n const customCellStyle = table.customCellStylePlugin?.getCustomCellStyle(col, row);\n const { layoutMap } = table.internalProps;\n const isHeader = layoutMap.isHeader(col, row);\n if (isHeader) {\n // const cacheKey = `${col}-${row}`;\n let cacheKey;\n if (table.isPivotTable() && !table.isBottomFrozenRow(row) && !table.isRightFrozenColumn(col)) {\n // use dimensionKey&indicatorKey to cache style object in pivot table\n const define = table.getHeaderDefine(col, row) as any;\n const isCorner = table.isCornerHeader(col, row);\n cacheKey = define?.dimensionKey\n ? isCorner\n ? `dim-cor-${define.dimensionKey}`\n : `dim-${define.dimensionKey}`\n : define?.indicatorKey\n ? `ind-${define.indicatorKey}`\n : `${col}-${row}`;\n } else {\n cacheKey = `${col}-${row}`;\n }\n let cacheStyle = table.headerStyleCache.get(cacheKey);\n if (cacheStyle) {\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n const hd = layoutMap.getHeader(col, row);\n\n let paddingForAxis;\n if (\n table.isPivotChart() &&\n isTopOrBottomAxis(col, row, layoutMap as PivotHeaderLayoutMap) &&\n layoutMap.isAxisCell(col, row)\n ) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(col, table.rowHeaderLevelCount);\n const padding = (chartColumn.style as any)?.padding ?? table.theme.bodyStyle.padding;\n paddingForAxis = padding;\n } else if (\n table.isPivotChart() &&\n isLeftOrRightAxis(col, row, layoutMap as PivotHeaderLayoutMap) &&\n layoutMap.isAxisCell(col, row)\n ) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(table.columnHeaderLevelCount, row);\n const padding = (chartColumn.style as any)?.padding ?? table.theme.bodyStyle.padding;\n paddingForAxis = padding;\n }\n\n if (\n (!hd || (hd as HeaderData).isEmpty) &&\n (layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row) ||\n layoutMap.isCornerHeader(col, row) ||\n layoutMap.isRightTopCorner(col, row))\n ) {\n return EMPTY_STYLE;\n }\n\n const styleClass = table.internalProps.headerHelper.getStyleClass((hd as HeaderData)?.headerType || 'text');\n if (layoutMap.isBottomFrozenRow(col, row) && table.theme.bottomFrozenStyle) {\n cacheStyle = headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n table.theme.bottomFrozenStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n } else if (layoutMap.isRightFrozenColumn(col, row) && table.theme.rightFrozenStyle) {\n cacheStyle = headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n table.theme.rightFrozenStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n } else {\n // let defaultStyle;\n // if (layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)) {\n // defaultStyle = table.theme.headerStyle;\n // } else if (table.internalProps.transpose && layoutMap.isRowHeader(col, row)) {\n // defaultStyle = table.theme.headerStyle;\n // } else if (layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)) {\n // defaultStyle = table.theme.rowHeaderStyle;\n // } else {\n // defaultStyle = table.theme.cornerHeaderStyle;\n // }\n // const styleClass = hd.headerType.StyleClass; //BaseHeader文件\n // const { style } = hd;\n const style = hd?.style || {};\n if (paddingForAxis) {\n (style as any).padding = paddingForAxis;\n }\n cacheStyle = headerStyleContents.of(\n style,\n // defaultStyle,\n layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)\n ? table.theme.headerStyle\n : layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)\n ? table.theme.rowHeaderStyle\n : table.theme.cornerHeaderStyle,\n {\n col,\n row,\n table: table as BaseTableAPI,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n }\n table.headerStyleCache.set(cacheKey, cacheStyle);\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n\n let bgColorFunc: ColorPropertyDefine;\n // 判断是否有mapping 遍历dataset中mappingRules\n if ((table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules && !table.isHeader(col, row)) {\n (table.internalProps as PivotTableProtected)?.dataConfig?.mappingRules?.forEach(\n (mappingRule: MappingRule, i: number) => {\n if (\n mappingRule.bgColor &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row) ===\n mappingRule.bgColor.indicatorKey\n ) {\n bgColorFunc = mappingRule.bgColor.mapping;\n }\n }\n );\n // // 判断是否有mapping 遍历dataset中mappingRules 但这里还需要根据fieldName来判断\n // if (bgColorFunc && typeof bgColorFunc === 'function') {\n // const cellValue = table.getCellOriginValue(col, row);\n // bgColor = bgColorFunc(this, cellValue);\n // }\n }\n\n let cacheKey;\n const cellType = table.getCellType(col, row);\n const rawRecord = table.getCellOriginRecord(col, row);\n\n //如果是主体部分,获取相应的style\n if (rawRecord?.vtableMerge) {\n cacheKey = 'merge-title';\n } else if (table.isSeriesNumberInBody(col, row)) {\n // 如果是行序号\n cacheKey = `${col}-series-` + cellType;\n } else if (\n (table.isListTable() && !(table as any).transpose) ||\n (table.isPivotTable() && (table.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n cacheKey = col + cellType;\n } else {\n cacheKey = row + cellType;\n }\n let cacheStyle;\n\n if (rawRecord?.vtableMerge) {\n cacheStyle = table.bodyMergeTitleCache.get(cacheKey);\n } else if (layoutMap.isBottomFrozenRow(row)) {\n cacheStyle = table.bodyBottomStyleCache.get(cacheKey);\n } else {\n cacheStyle = table.bodyStyleCache.get(cacheKey);\n }\n if (cacheStyle) {\n if (customCellStyle) {\n return mergeStyle(cacheStyle, customCellStyle);\n }\n return cacheStyle;\n }\n const column = layoutMap.getBody(col, row);\n // const styleClass = column?.cellType?.StyleClass; //BaseColumn文件\n const styleClass = table.internalProps.bodyHelper.getStyleClass(table.getCellType(col, row));\n const style = column?.style;\n cacheStyle = columnStyleContents.of(\n style,\n rawRecord?.vtableMerge && table.theme.groupTitleStyle\n ? table.theme.groupTitleStyle\n : layoutMap.isBottomFrozenRow(row) && table.theme.bottomFrozenStyle\n ? table.theme.bottomFrozenStyle\n : layoutMap.isRightFrozenColumn(col) && table.theme.rightFrozenStyle\n ? table.theme.rightFrozenStyle\n : table.theme.bodyStyle,\n {\n col,\n row,\n table: table,\n value: table.getCellValue(col, row),\n dataValue: table.getCellOriginValue(col, row),\n cellHeaderPaths: table.getCellHeaderPaths(col, row)\n },\n styleClass,\n table.options.autoWrapText,\n table.theme\n );\n if (bgColorFunc) {\n cacheStyle = mergeStyle(cacheStyle as any, { bgColor: bgColorFunc });\n }\n if (!isFunction(style)) {\n if (layoutMap.isBottomFrozenRow(row)) {\n table.bodyBottomStyleCache.set(cacheKey, cacheStyle);\n } else {\n table.bodyStyleCache.set(cacheKey, cacheStyle);\n }\n }\n if (customCellStyle) {\n return mergeStyle(cacheStyle as any, customCellStyle);\n }\n return cacheStyle;\n}\n","import type { EasingType, IRect } from './../vrender';\nimport { DefaultTimeline, DefaultTicker, Animate, ACustomAnimate, createRect, Generator } from './../vrender';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { isBoolean, isNumber } from '@visactor/vutils';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\n\nclass Animateaaa extends ACustomAnimate {\n onUpdate(end: boolean, ratio: number, out: Record): void {\n if (this.from.x !== this.to.x) {\n const x = end ? this.to.x : this.from.x + Math.floor((this.to.x - this.from.x) * ratio);\n this.params.table.scrollLeft = x;\n }\n if (this.from.y !== this.to.y) {\n const y = end ? this.to.y : this.from.y + Math.floor((this.to.y - this.from.y) * ratio);\n this.params.table.scrollTop = y;\n }\n }\n}\n\nexport class TableAnimationManager {\n table: BaseTableAPI;\n timeline: DefaultTimeline;\n ticker: DefaultTicker;\n animation: Animate;\n tempGraphic: IRect;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.timeline = new DefaultTimeline();\n // this.ticker = new DefaultTicker([this.timeline]);\n this.ticker = new DefaultTicker();\n this.ticker.addTimeline(this.timeline);\n const TICKER_FPS = 60;\n this.ticker.setFPS(TICKER_FPS);\n // no use, for avoid error in vrender animation\n this.tempGraphic = createRect({});\n }\n\n scrollTo(position: { col?: number; row?: number }, animationOption?: ITableAnimationOption | true) {\n const from = {\n x: this.table.scrollLeft,\n y: this.table.scrollTop\n };\n const cellRect = this.table.getCellRect(position.col ?? 0, position.row ?? 0);\n const to = {\n x: isNumber(position.col) ? cellRect.left - this.table.getFrozenColsWidth() : this.table.scrollLeft,\n y: isNumber(position.row) ? cellRect.top - this.table.getFrozenRowsHeight() : this.table.scrollTop\n };\n const duration = !isBoolean(animationOption) ? animationOption?.duration ?? 3000 : animationOption ? 3000 : 0;\n const easing = !isBoolean(animationOption) ? animationOption?.easing ?? 'linear' : animationOption ? 'linear' : '';\n\n const animation = new Animate(Generator.GenAutoIncrementId(), this.timeline).bind(this.tempGraphic).play(\n new Animateaaa(from, to, duration, easing, {\n graphic: this.tempGraphic,\n table: this.table\n })\n );\n // this.timeline.addAnimate(animation);\n this.ticker.start();\n }\n\n clear() {\n this.timeline.clear();\n this.ticker.stop();\n }\n}\n","import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n InteractionState,\n Placement\n} from '../ts-types';\nimport type {\n AnyFunction,\n CellAddressWithBound,\n ColorPropertyDefine,\n ColumnIconOption,\n ColumnSeriesNumber,\n IRowSeriesNumber,\n ColumnStyleOption,\n MappingRule,\n TableEventOptions,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ListTableAPI,\n ColumnInfo,\n RowInfo,\n ListTableConstructorOptions\n} from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { ITooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport {\n AABBBounds,\n isNumber,\n isBoolean,\n isFunction,\n type ITextSize,\n isValid,\n merge,\n cloneDeep\n} from '@visactor/vutils';\nimport { measureTextBounds, textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData,\n SeriesNumberColumnData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { IconCache } from '../plugins/icons';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport type { IMenuHandler } from '../components/menu/dom/MenuHandler';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n IBaseTableProtected,\n PivotTableProtected\n} from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport type { CreateLegend } from '../components/legend/create-legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport { setBatchRenderChartCount } from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { NumberRangeMap } from '../layout/row-height-map';\nimport { ListTable } from '../ListTable';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { RowSeriesNumberHelper } from './row-series-number-helper';\nimport { hideCellSelectBorder, restoreCellSelectBorder } from '../scenegraph/select/update-select-border';\nimport type { ITextGraphicAttribute } from './../vrender';\nimport { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport { hasAutoImageColumn } from '../layout/layout-helper';\nimport { Factory } from './factory';\nimport {\n getCellAt,\n getCellAtRelativePosition,\n getColAt,\n getRowAt,\n getTargetColAt,\n getTargetColAtConsiderRightFrozen,\n getTargetRowAt,\n getTargetRowAtConsiderBottomFrozen\n} from './utils/get-cell-position';\nimport { getCellStyle } from './style-helper';\nimport type { EditManager } from '../edit/edit-manager';\nimport { createReactContainer } from '../scenegraph/layout/frozen-react';\nimport { setIconColor } from '../icons';\nimport { TableAnimationManager } from './animation';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport type { CustomCellStylePlugin, ICustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\n\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[];\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n _widthAdaptiveMode: WidthAdaptiveModeDef;\n _heightAdaptiveMode: HeightAdaptiveModeDef;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n _vDataSet?: DataSet;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n editorManager: EditManager;\n animationManager: TableAnimationManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n /** 是否设置了canvas的宽高 */\n canvasSizeSeted?: boolean;\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"1.14.4-alpha.0\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: Map;\n bodyStyleCache: Map;\n bodyMergeTitleCache: Map;\n bodyBottomStyleCache: Map;\n container: HTMLElement;\n isReleased: boolean = false;\n _chartEventMap: Record = {};\n\n customCellStylePlugin?: CustomCellStylePlugin;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n reactCustomLayout?: ReactCustomLayout;\n _hasAutoImageColumn?: boolean;\n\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n if (!container && options.mode !== 'node' && !options.canvas) {\n throw new Error(\"vtable's container is undefined\");\n }\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n frozenRowCount,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n widthAdaptiveMode = 'only-body',\n heightAdaptiveMode = 'only-body',\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n dragHeaderMode,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight,\n clearDOM = true\n } = options;\n this.container = container;\n this.options = options;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._widthAdaptiveMode = widthAdaptiveMode;\n this._heightAdaptiveMode = heightAdaptiveMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n if (isValid(canvasHeight) && isValid(canvasWidth)) {\n this.canvasSizeSeted = true;\n }\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (this.options.canvas) {\n internalProps.element = this.options.canvas.parentElement;\n internalProps.element.style.position = 'relative';\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = this.options.canvas;\n internalProps.context = internalProps.canvas.getContext('2d')!;\n } else if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n\n if (options.customConfig?.createReactContainer) {\n createReactContainer(this);\n }\n }\n\n internalProps.handler = new EventHandler();\n if (isNumber(this.options.resizeTime)) {\n internalProps.handler.resizeTime = this.options.resizeTime;\n }\n\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n internalProps.frozenRowCount = frozenRowCount;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.rowResizeMode = rowResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n if (container) {\n // 先清空\n if (clearDOM) {\n container.innerHTML = '';\n }\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n // this.options = options;\n // internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n // internalProps.theme.isPivot = this.isPivotTable();\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n internalProps.rowSeriesNumberHelper = new RowSeriesNumberHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n this.animationManager = new TableAnimationManager(this);\n\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n TooltipHandler && (internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine));\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyMergeTitleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n\n internalProps.stick = { changedCells: new Map() };\n\n internalProps.customMergeCell = options.customMergeCell;\n\n const CustomCellStylePlugin = Factory.getComponent('customCellStylePlugin') as ICustomCellStylePlugin;\n if (CustomCellStylePlugin) {\n this.customCellStylePlugin = new CustomCellStylePlugin(\n this,\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n setCanvasSize(canvasWidth: number, canvasHeight: number) {\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n this.options.canvasHeight = canvasHeight;\n this.options.canvasWidth = canvasWidth;\n this.resize();\n }\n resize() {\n this._updateSize();\n this.internalProps.legends?.forEach(legend => {\n legend?.resize();\n });\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps?.layoutMap?.frozenColCount ?? this.internalProps?.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n // 纠正frozenColCount的值;\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps?.layoutMap?.frozenRowCount ?? this.internalProps?.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n // this.options.frozenRowCount = frozenRowCount;\n }\n\n get rightFrozenColCount(): number {\n return this.internalProps?.layoutMap?.rightFrozenColCount ?? this.internalProps?.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps?.layoutMap?.bottomFrozenRowCount ?? this.internalProps?.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n if (isNumber(this.internalProps.defaultRowHeight)) {\n return this.internalProps.defaultRowHeight as number;\n }\n return 40;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number | 'auto') {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberRangeMap {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberRangeMap) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n get eventOptions(): TableEventOptions | null {\n return this.internalProps.eventOptions ?? null;\n }\n set eventOptions(eventOptions: TableEventOptions | null) {\n this.internalProps.eventOptions = eventOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n get widthAdaptiveMode(): WidthAdaptiveModeDef {\n return this._widthAdaptiveMode;\n }\n set widthAdaptiveMode(widthAdaptiveMode: WidthAdaptiveModeDef) {\n if (widthAdaptiveMode !== this._widthAdaptiveMode) {\n this._widthAdaptiveMode = widthAdaptiveMode;\n }\n }\n get heightAdaptiveMode(): HeightAdaptiveModeDef {\n return this._heightAdaptiveMode;\n }\n set heightAdaptiveMode(heightAdaptiveMode: HeightAdaptiveModeDef) {\n if (heightAdaptiveMode !== this._heightAdaptiveMode) {\n this._heightAdaptiveMode = heightAdaptiveMode;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n if (pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n const canvasWidth = this.options.canvasWidth;\n this.internalProps.calcWidthContext = {\n _: this.internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n };\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n this.tableX = 0;\n this.tableY = 0;\n\n if (this.options.canvas && this.options.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n // this.tableX = this.options.viewBox.x1;\n // this.tableY = this.options.viewBox.y1;\n if (this?.scenegraph?.stage) {\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n if (this.canvasSizeSeted) {\n widthWithoutPadding = this.canvasWidth;\n heightWithoutPadding = this.canvasHeight;\n } else {\n if (element.parentElement) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n parseInt(computedStyle.paddingLeft || '0px', 10) -\n parseInt(computedStyle.paddingRight || '0px', 10);\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n widthWithoutPadding = (widthWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightWithoutPadding = (heightWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n }\n }\n\n element.style.width = (widthWithoutPadding && `${widthWithoutPadding - padding.left - padding.right}px`) || '0px';\n element.style.height =\n (heightWithoutPadding && `${heightWithoutPadding - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = (canvas.parentElement?.offsetWidth ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightP = (canvas.parentElement?.offsetHeight ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const width = Math.floor(widthP - style.getVerticalScrollBarSize(this.getTheme().scrollStyle));\n const height = Math.floor(heightP - style.getHorizontalScrollBarSize(this.getTheme().scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n if (this.theme.frameStyle?.innerBorder) {\n this.tableX = 0;\n this.tableY = 0;\n this.tableNoFrameWidth = width - (shadowWidths[1] ?? 0);\n this.tableNoFrameHeight = height - (shadowWidths[2] ?? 0);\n } else {\n this.tableX = (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY = (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n this.tableNoFrameWidth =\n width - ((lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0)) - ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n this.tableNoFrameHeight =\n height - ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) - ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n }\n }\n\n updateViewBox(newViewBox: IBoundsLike) {\n const oldWidth = this.options?.viewBox.x2 ?? 0 - this.options?.viewBox.x1 ?? 0;\n const oldHeight = this.options?.viewBox.y2 ?? 0 - this.options?.viewBox.y1 ?? 0;\n const newWidth = newViewBox.x2 - newViewBox.x1;\n const newHeight = newViewBox.y2 - newViewBox.y1;\n this.options.viewBox = newViewBox;\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.resize();\n } else {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, true);\n }\n }\n\n setViewBoxTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.internalProps.modifiedViewBoxTransform = true;\n this.scenegraph.stage.window.setViewBoxTransform(a, b, c, d, e, f);\n }\n\n get rowHierarchyType(): 'grid' | 'tree' {\n return 'grid';\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n if (startCol > endCol) {\n return 0;\n }\n startCol = Math.max(startCol, 0);\n endCol = Math.min(endCol, (this.colCount ?? Infinity) - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n const addWidth = cachedLowerColWidth + adjustW;\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (isValid(this.rowHeightsMap.get(row))) {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n const height = this.rowHeightsMap.get(row);\n let heightRange;\n if (row < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, row);\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(row, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, row);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(height);\n }\n return Math.floor(height);\n }\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultColumnWidth(col: number) {\n // return col < this.rowHeaderLevelCount\n // ? Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth\n // : this.defaultColWidth;\n if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row) || this.isSeriesNumberInHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(row)) {\n //底部冻结行默认取用了表头的行高 但针对非表头数据冻结的情况这里可能不妥\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n // this.rowHeightsMap.put(row, Math.round(height));\n this.rowHeightsMap.put(row, this.options.customConfig?._disableColumnAndRowSizeRound ? height : Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n\n setRowHeight(row: number, height: number) {\n this.scenegraph.setRowHeight(row, height);\n this.scenegraph.updateChartSizeForResizeRowHeight(row);\n this.internalProps._heightResizedRowMap.add(row); // add resize tag\n }\n\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n if (startRow > endRow || this.rowCount === 0) {\n return 0;\n }\n startRow = Math.max(startRow, 0);\n endRow = Math.min(endRow, (this.rowCount ?? Infinity) - 1);\n\n let h = 0;\n const isDefaultRowHeightIsAuto = this.options.defaultRowHeight === 'auto';\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.options.customComputeRowHeight &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n // endRow >= this.columnHeaderLevelCount &&\n // !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn() &&\n !isDefaultRowHeightIsAuto &&\n this.internalProps._heightResizedRowMap.size === 0\n ) {\n // part in header\n for (let i = startRow; i < Math.min(endRow + 1, this.columnHeaderLevelCount); i++) {\n h += this.getRowHeight(i);\n }\n // part in body\n if (endRow >= this.columnHeaderLevelCount) {\n h +=\n this.defaultRowHeight *\n (Math.min(endRow, this.rowCount - this.bottomFrozenRowCount - 1) -\n Math.max(this.columnHeaderLevelCount, startRow) +\n 1);\n }\n // part in bottom frozen\n // last axis row height is default header row height in pivot chart\n for (let i = this.rowCount - this.bottomFrozenRowCount; i < endRow + 1; i++) {\n h += this.getRowHeight(i);\n }\n } else {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // for (let i = startRow; i <= endRow; i++) {\n // h += this.getRowHeight(i);\n // }\n const tempH = this.rowHeightsMap.getSumInRange(startRow, endRow);\n let heightRange;\n if (endRow < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, endRow);\n } else if (endRow >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(endRow, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, endRow);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(tempH);\n }\n return Math.floor(tempH);\n }\n h = this.rowHeightsMap.getSumInRange(startRow, endRow);\n }\n // if (this.options._disableColumnAndRowSizeRound) {\n // // console.log(startRow, endRow, Number(h.toFixed(2)));\n // // return Number(h.toFixed(2));\n // return h;\n // }\n return Math.round(h);\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n }\n return this.getDefaultColumnWidth(col);\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // if (this.isPivotTable()) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n // return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /** 判断某行是否应该计算行高 */\n isAutoRowHeight(row?: number): boolean {\n if (this.heightMode === 'autoHeight') {\n return true;\n } else if (this.options.customComputeRowHeight) {\n return true;\n } else if (row >= 0 && row < this.columnHeaderLevelCount) {\n return this.getDefaultRowHeight(row) === 'auto';\n }\n return false;\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width = this.colWidthsMap.get(col) ?? this.getDefaultColumnWidth(col);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(\n col,\n // typeof width === 'number' ? (this.options.customConfig?._disableColumnAndRowSizeRound ? width : Math.round(width)) : width\n typeof width === 'number' ? Math.round(width) : width\n );\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n setColWidth(col: number, width: number) {\n this.scenegraph.setColWidth(col, width);\n this.scenegraph.updateChartSizeForResizeColWidth(col);\n this.internalProps._widthResizedColMap.add(col); // add resize tag\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n this.rowHeightsMap.clearRange();\n // if (typeof row !== 'number') {\n // this._rowRangeHeightsMap.clear();\n // } else {\n // const keys = this._rowRangeHeightsMap.keys();\n // for (const key of keys) {\n // const reg = rangeReg.exec(key);\n // if (reg) {\n // const start = Number(reg[1]);\n // const end = Number(reg[2]);\n // if (row >= start && row <= end) {\n // this._rowRangeHeightsMap.delete(key);\n // }\n // }\n // }\n // }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n if (this.getAllColsWidth() <= this.tableNoFrameWidth) {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n } else {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n // absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n if (this.getAllRowsHeight() <= this.tableNoFrameHeight) {\n absoluteTop = this.getRowsHeight(0, row - 1);\n } else {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n // absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n const cellRect = this.getCellRect(col, row);\n return this._toRelativeRect(cellRect, relativeX, relativeY);\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((range).start) {\n const isFrozenCell = this.isFrozenCell((range).start.col, (range).start.row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n ),\n relativeX,\n relativeY\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n const isFrozenCell = this.isFrozenCell((range).col, (range).row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row),\n relativeX,\n relativeY\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((range).start) {\n cellRange = range;\n } else {\n cellRange = this.getCellRange((range).col, (range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n const scrollLeft = this.scrollLeft;\n if (this.isLeftFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n // width =\n // this.tableNoFrameWidth -\n // (this.getColsWidth(0, startCol - 1) ?? 0) -\n // (this.getColsWidth(endCol + 1, this.colCount - 1) ?? 0);\n } else if (this.isLeftFrozenColumn(startCol) && !this.isLeftFrozenColumn(endCol)) {\n width = Math.max(width - scrollLeft, this.getColsWidth(startCol, this.frozenColCount - 1));\n } else if (!this.isRightFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n absoluteLeft = Math.min(absoluteLeft - scrollLeft, this.tableNoFrameWidth - this.getRightFrozenColsWidth());\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n } else if (this.isRightFrozenColumn(startCol)) {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(startCol, this.colCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n const scrollTop = this.scrollTop;\n if (this.isTopFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n // height =\n // this.tableNoFrameHeight -\n // (this.getRowsHeight(0, startRow - 1) ?? 0) -\n // (this.getRowsHeight(endRow + 1, this.rowCount - 1) ?? 0);\n } else if (this.isTopFrozenRow(startRow) && !this.isTopFrozenRow(endRow)) {\n height = Math.max(height - scrollTop, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n } else if (!this.isBottomFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n absoluteTop = Math.min(absoluteTop - scrollTop, this.tableNoFrameHeight - this.getBottomFrozenRowsHeight());\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n } else if (this.isBottomFrozenRow(startRow)) {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(startRow, this.rowCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((range).start) {\n return this.getCellsRect(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((range).start) {\n return this.getCellsRectWidth(\n (range).start.col,\n (range).start.row,\n (range).end.col,\n (range).end.row\n );\n }\n const cellRange = this.getCellRange((range).col, (range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n return getRowAt(absoluteY, this);\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n return getColAt(absoluteX, this);\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddressWithBound {\n return getCellAt(absoluteX, absoluteY, this);\n }\n\n /**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,已考虑格滚动情况\n * @param relativeY 左边y值,相对于容器左上角,已考虑格滚动情况\n * @returns\n */\n getCellAtRelativePosition(relativeX: number, relativeY: number): CellAddressWithBound {\n return getCellAtRelativePosition(relativeX, relativeY, this);\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect, relativeX: boolean = true, relativeY: boolean = true): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - (relativeX ? visibleRect.left : 0));\n rect.offsetTop(this.tableY - (relativeY ? visibleRect.top : 0));\n rect.offsetLeft(this.options.viewBox?.x1 ?? 0);\n rect.offsetTop(this.options.viewBox?.y1 ?? 0);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange() {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange() {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n if (this.isReleased) {\n return;\n }\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n IconCache.clearAll();\n\n super.release?.();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n this.eventManager.release();\n internalProps.focusControl?.release?.();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n internalProps.focusControl.release();\n const { parentElement } = internalProps.element;\n if (parentElement && !this.options.canvas) {\n parentElement.removeChild(internalProps.element);\n }\n (this as any).editorManager?.editingEditor?.onEnd?.();\n this.isReleased = true;\n this.scenegraph = null;\n this.internalProps = null;\n\n this.reactCustomLayout?.clearCache();\n }\n\n fireListeners(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(options: BaseTableConstructorOptions) {\n (this.options as BaseTable['options']) = options;\n this._hasAutoImageColumn = undefined;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n dragHeaderMode,\n\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n widthAdaptiveMode,\n heightAdaptiveMode,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight\n } = options;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this._widthAdaptiveMode = widthAdaptiveMode ?? 'only-body';\n this._heightAdaptiveMode = heightAdaptiveMode ?? 'only-body';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n this.customRender = customRender;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node' && !options.canvas) {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.rowResizeMode = rowResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.stick.changedCells.clear();\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n this.scenegraph.clearCells();\n this.scenegraph.updateComponent();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.clearCellStyleCache();\n this.clearColWidthCache();\n this.clearRowHeightCache();\n\n internalProps.customMergeCell = options.customMergeCell;\n\n this.customCellStylePlugin?.updateCustomCell(\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n // const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);//替换成下面遍历获取高度,鉴于冻结数量有限。否则这里在初始化的时候ClipBodyGroupBeforeRenderContribution.drawShap就先走了这个计算,导致初始化时间加长,而后续计算行高列宽会清除这个计算结果,浪费了性能\n let height = 0;\n for (let row = this.rowCount - this.bottomFrozenRowCount; row <= this.rowCount - 1; row++) {\n height += this.getRowHeight(row);\n }\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n // const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1); // 同getBottomFrozenRowsHeight的原因\n let width = 0;\n for (let col = this.colCount - this.rightFrozenColCount; col <= this.colCount - 1; col++) {\n width += this.getColWidth(col);\n }\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll = true\n ): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n const originWidth = this.canvas.offsetWidth || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n const originHeight = this.canvas.offsetHeight || currentHeight;\n const heightRatio = currentHeight / originHeight;\n\n const x =\n (clientX - rect.left) / widthRatio + (isAddScroll ? table.scrollLeft : 0) - (this.options.viewBox?.x1 ?? 0);\n const y =\n (clientY - rect.top) / heightRatio + (isAddScroll ? table.scrollTop : 0) - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n\n if (this.internalProps.modifiedViewBoxTransform && this.scenegraph.stage.window.getViewBoxTransform()) {\n const transform = this.scenegraph.stage.window.getViewBoxTransform();\n transform.transformPoint(point, point);\n }\n return point;\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): ColumnInfo | null {\n return getTargetColAt(absoluteX, this);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): RowInfo | null {\n const targetRow = getTargetRowAt(absoluteY, this);\n if (targetRow) {\n targetRow.row = Math.min(targetRow.row, this.rowCount - 1);\n }\n return targetRow;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAtConsiderRightFrozen(absoluteX: number, isConsider: boolean): ColumnInfo | null {\n return getTargetColAtConsiderRightFrozen(absoluteX, isConsider, this);\n }\n\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAtConsiderBottomFrozen(absoluteY: number, isConsider: boolean): RowInfo | null {\n return getTargetRowAtConsiderBottomFrozen(absoluteY, isConsider, this);\n }\n\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n * @param isShift 是否按住 shift 键\n * @param isCtrl 是否按住 ctrl 键\n * @param makeSelectCellVisible 是否让选中的单元格可见\n * @param skipBodyMerge 是否忽略合并单元格,默认 false针对合并单元自动扩大选取范围\n */\n selectCell(\n col: number,\n row: number,\n isShift?: boolean,\n isCtrl?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge: boolean = false\n ) {\n const isHasSelected = !!this.stateManager.select.ranges?.length;\n this.stateManager.updateSelectPos(\n col,\n row,\n isShift,\n isCtrl,\n false,\n makeSelectCellVisible ?? this.options.select?.makeSelectCellVisible ?? true,\n skipBodyMerge\n );\n this.stateManager.endSelectCells(true, isHasSelected);\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n if (cellRange.start.col === cellRange.end.col && cellRange.start.row === cellRange.end.row) {\n this.stateManager.updateSelectPos(\n cellRange.start.col,\n cellRange.start.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n } else {\n this.stateManager.updateSelectPos(\n cellRange.start.col,\n cellRange.start.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n cellRange.end.col,\n cellRange.end.row,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n this.stateManager.endSelectCells(false, false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array, option?: { sortState?: SortState | SortState[] }): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number, recalculateColWidths?: boolean): void;\n abstract _hasHierarchyTreeHeader(): boolean;\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract _moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n\n abstract _hasCustomRenderOrLayout(): boolean;\n\n get recordsCount() {\n return this.records?.length;\n }\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): DataSource | CachedDataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: DataSource | CachedDataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n /**\n * Get the enableLineBreak.\n */\n get enableLineBreak(): boolean {\n return this.internalProps.enableLineBreak;\n }\n /**\n * Set the enableLineBreak\n */\n set enableLineBreak(enableLineBreak: boolean) {\n this.internalProps.enableLineBreak = enableLineBreak;\n this.options.enableLineBreak = enableLineBreak;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n this.options.theme = theme;\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n this.options.theme = theme;\n this.scenegraph.updateComponent();\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row)?.cellType ?? 'text';\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n getCellType(col: number, row: number): ColumnTypeOption {\n let cellType;\n if (this.isSeriesNumberInHeader(col, row)) {\n return (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberHeader(col, row).cellType;\n } else if (this.isHeader(col, row)) {\n cellType = (this.internalProps.layoutMap.getHeader(col, row) as HeaderData).headerType;\n } else {\n cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n }\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): (ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber)[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row) as ColumnDefine;\n if (header && (header.field || (header as ColumnDefine).columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.getCellOriginRecord(col, row);\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n const hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || customMerge.customRender)\n ) {\n return customMerge.range;\n }\n }\n return this.internalProps.layoutMap?.getCellRange(col, row);\n }\n\n hasCustomMerge() {\n return !!this.internalProps.customMergeCell;\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || this.customRender)\n ) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText,\n this.theme\n );\n customMerge.style = fullStyle;\n }\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = (fieldDef as ColumnDefine)?.description ?? (field as HeaderData)?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n /** 判断单元格是否属于序号body部分 */\n isSeriesNumberInBody(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n );\n }\n /** 判断单元格是否属于序号表头部分 */\n isSeriesNumberInHeader(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)\n );\n }\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.isLeftFrozenColumn(col, row) || this.isRightFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.isTopFrozenRow(col, row) || this.isBottomFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit {\n if (col >= 0 && row >= 0) {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: this.getCellType(col, row),\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n return undefined;\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field === null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource?.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n return getCellStyle(col, row, this);\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n this.bodyStyleCache.clear();\n this.bodyMergeTitleCache.clear();\n this.bodyBottomStyleCache.clear();\n\n // this._newRowHeightsMap.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeRow(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col, row + 1)) {\n return false;\n }\n\n if (this.internalProps.rowResizeMode === 'none') {\n return false;\n } else if (this.internalProps.rowResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.rowResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (\n this.isHeader(col, row) &&\n (this.stateManager.isSelected(col, row) ||\n (this.options.select?.headerSelectMode === 'body' &&\n checkCellInSelect(col, row, [\n this.getCellRange(this.stateManager.select.cellPos.col, this.stateManager.select.cellPos.row)\n ])) ||\n isCellDisableSelect(this, col, row))\n ) {\n if (this.internalProps.frozenColDragHeaderMode === 'disabled' && this.isFrozenColumn(col)) {\n return false;\n }\n if (this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if ((define as ColumnDefine).dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return (define as ColumnDefine).dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else if ((this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumber(col, row)) {\n if (!(this.options as ListTableConstructorOptions).groupBy || !this.getCellRawRecord(col, row)?.vtableMerge) {\n const dragOrder = (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberBody(col, row)?.define\n ?.dragOrder;\n if (dragOrder) {\n icons = this.internalProps.rowSeriesNumberHelper.getIcons(col, row);\n }\n }\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n\n const ctx = this.internalProps.context;\n const cellIcon = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n if (icons?.length > 0) {\n icons = icons.concat(cellIcon);\n } else if (cellIcon?.length > 0) {\n icons = cellIcon;\n }\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n strokeColor: isBoolean(theme.text.stroke)\n ? getProp('strokeColor', actStyle, col, row, this)\n : (theme.text.stroke as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n underlineDash: theme.text.underlineDash,\n underlineOffset: theme.text.underlineOffset,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough,\n _strokeArrayWidth: (theme.group as any).strokeArrayWidth,\n _strokeArrayColor: (theme.group as any).strokeArrayColor,\n _linkColor: getProp('linkColor', actStyle, col, row, this)\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = isValid(copyCellValue) ? `${copyCellValue}` : '';\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n if (r < maxRow) {\n copyValue += '\\r\\n';\n }\n }\n }\n\n if (this.options?.formatCopyValue) {\n copyValue = this.options.formatCopyValue(copyValue);\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n getSelectedCellRanges(): CellRange[] {\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n return cloneDeep(ranges);\n }\n\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n measureTextBounds(attribute: ITextGraphicAttribute): AABBBounds {\n return measureTextBounds(attribute) as AABBBounds;\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n if (this._hasAutoImageColumn === undefined) {\n this._hasAutoImageColumn = hasAutoImageColumn(this);\n }\n return this._hasAutoImageColumn;\n }\n\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n let colHeaderRangeRect;\n if (this.frozenRowCount >= 1) {\n colHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n });\n }\n let rowHeaderRangeRect;\n if (this.frozenColCount >= 1) {\n rowHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let bottomFrozenRangeRect;\n if (this.bottomFrozenRowCount >= 1) {\n bottomFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let rightFrozenRangeRect;\n if (this.rightFrozenColCount >= 1) {\n rightFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n // return true;\n if (this.isFrozenCell(col, row)) {\n return true;\n } else if (\n // body cell drawRange do not intersect colHeaderRangeRect&rowHeaderRangeRect\n rect.top >= (colHeaderRangeRect?.bottom ?? rect.top) &&\n rect.left >= (rowHeaderRangeRect?.right ?? rect.left) &&\n rect.bottom <= (bottomFrozenRangeRect?.top ?? rect.bottom) &&\n rect.right <= (rightFrozenRangeRect?.left ?? rect.right)\n ) {\n return true;\n }\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number, options?: { disableBackground?: boolean; disableBorder?: boolean }) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n\n // hide border\n this.scenegraph.tableGroup.border.setAttribute('visible', false);\n\n // deal with options\n let oldFill;\n if (options?.disableBackground) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldFill = cellGroup.attribute.fill;\n cellGroup.setAttribute('fill', 'transparent');\n }\n let oldStroke;\n if (options?.disableBorder) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldStroke = cellGroup.attribute.stroke;\n cellGroup.setAttribute('stroke', false);\n }\n\n this.scenegraph.renderSceneGraph();\n let sizeOffset = 0;\n if (this.theme.cellBorderClipDirection === 'bottom-right') {\n sizeOffset = 1;\n }\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX - sizeOffset,\n cellRect.bottom + this.tableY - sizeOffset\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n\n // restore border\n this.scenegraph.tableGroup.border.setAttribute('visible', true);\n\n // restore options\n if (oldFill) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('fill', oldFill);\n }\n if (oldStroke) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('stroke', oldStroke);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n this.scenegraph.updateNextFrame();\n\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n this.scenegraph.renderSceneGraph();\n\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n const contentWidth = this.tableX + this.getAllColsWidth();\n const contentHeight = this.tableY + this.getAllRowsHeight();\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex(col: number, row: number) {\n return {\n col: col - this.rowHeaderLevelCount,\n row: row - this.columnHeaderLevelCount\n };\n }\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex(col: number, row: number) {\n return {\n col: col + this.rowHeaderLevelCount,\n row: row + this.columnHeaderLevelCount\n };\n }\n\n /**\n * 监听vchart事件\n * @param type vchart事件类型\n * @param listener vchart事件监听器\n * @returns 事件监听器id\n */\n onVChartEvent(type: string, callback: AnyFunction): void;\n onVChartEvent(type: string, query: any, callback: AnyFunction): void;\n onVChartEvent(type: string, query?: any, callback?: AnyFunction): void {\n if (!this._chartEventMap[type]) {\n this._chartEventMap[type] = [];\n }\n if (typeof query === 'function') {\n this._chartEventMap[type].push({ callback: query });\n } else {\n this._chartEventMap[type].push({ callback, query });\n }\n }\n\n offVChartEvent(type: string, callback?: AnyFunction): void {\n // delete this._chartEventMap[type];\n if (!this._chartEventMap[type]) {\n return;\n }\n if (callback) {\n this._chartEventMap[type] = this._chartEventMap[type].filter(e => e.callback !== callback);\n } else {\n this._chartEventMap[type] = [];\n }\n }\n /** 给activeChartInstance逐个绑定chart用户监听事件 */\n _bindChartEvent(activeChartInstance: any) {\n if (activeChartInstance) {\n for (const key in this._chartEventMap) {\n (this._chartEventMap[key] || []).forEach(e => {\n if (e.query) {\n activeChartInstance.on(key, e.query, e.callback);\n } else {\n activeChartInstance.on(key, e.callback);\n }\n });\n }\n }\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n hasCustomCellStyle(customStyleId: string): boolean {\n return this.customCellStylePlugin?.hasCustomCellStyle(customStyleId);\n }\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n this.customCellStylePlugin?.registerCustomCellStyle(customStyleId, customStyle);\n }\n\n arrangeCustomCellStyle(\n cellPos: { col?: number; row?: number; range?: CellRange },\n customStyleId: string,\n forceFastUpdate?: boolean\n ) {\n this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate);\n }\n isSeriesNumber(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isSeriesNumber(col, row);\n }\n isHasSeriesNumber(): boolean {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount > 0;\n }\n get leftRowSeriesNumberCount(): number {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount ?? 0;\n }\n setMinMaxLimitWidth(setWidth: boolean = false) {\n const internalProps = this.internalProps;\n //设置列宽\n for (let col = 0; col < internalProps.layoutMap.columnWidths.length; col++) {\n if (this.internalProps._widthResizedColMap.has(col)) {\n continue;\n }\n const { width, minWidth, maxWidth } = internalProps.layoutMap.columnWidths?.[col] ?? {};\n // width 为 \"auto\" 时先不存储ColWidth\n if (\n setWidth &&\n width &&\n ((typeof width === 'string' && width !== 'auto') || (typeof width === 'number' && width > 0))\n ) {\n this._setColWidth(col, width);\n }\n if (minWidth && ((typeof minWidth === 'number' && minWidth > 0) || typeof minWidth === 'string')) {\n this.setMinColWidth(col, minWidth);\n }\n if (maxWidth && ((typeof maxWidth === 'number' && maxWidth > 0) || typeof maxWidth === 'string')) {\n this.setMaxColWidth(col, maxWidth);\n }\n }\n }\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.dataSource?.setSortedIndexMap(field, filedMap);\n }\n // startInertia() {\n // startInertia(0, -1, 1, this.stateManager);\n // }\n\n checkReactCustomLayout() {\n if (!this.reactCustomLayout) {\n this.reactCustomLayout = new ReactCustomLayout(this);\n }\n }\n\n get bodyDomContainer() {\n return this.internalProps.bodyDomContainer;\n }\n get headerDomContainer() {\n return this.internalProps.headerDomContainer;\n }\n get frozenBodyDomContainer() {\n return this.internalProps.frozenBodyDomContainer;\n }\n get frozenHeaderDomContainer() {\n return this.internalProps.frozenHeaderDomContainer;\n }\n get rightFrozenBodyDomContainer() {\n return this.internalProps.rightFrozenBodyDomContainer;\n }\n get rightFrozenHeaderDomContainer() {\n return this.internalProps.rightFrozenHeaderDomContainer;\n }\n get frozenBottomDomContainer() {\n return this.internalProps.frozenBottomDomContainer;\n }\n get bottomDomContainer() {\n return this.internalProps.bottomDomContainer;\n }\n get rightFrozenBottomDomContainer() {\n return this.internalProps.rightFrozenBottomDomContainer;\n }\n /**\n * 显示移动列或移动行的高亮线 如果(col,row)单元格是列头 则显示高亮列线; 如果(col,row)单元格是行头 则显示高亮行线\n * @param col 在表头哪一列后显示高亮线\n * @param row 在表头哪一行后显示高亮线\n */\n showMoverLine(col: number, row: number) {\n this.scenegraph.component.showMoveCol(col, row, 0);\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 隐藏掉移动列或移动行的高亮线\n * @param col\n * @param row\n */\n hideMoverLine(col: number, row: number) {\n this.scenegraph.component.hideMoveCol();\n this.scenegraph.renderSceneGraph();\n }\n /** 关闭表格的滚动 */\n disableScroll() {\n this.eventManager.disableScroll();\n }\n /** 开启表格的滚动 */\n enableScroll() {\n this.eventManager.enableScroll();\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n return undefined;\n }\n\n // anmiation\n scrollToRow(row: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ row });\n return;\n }\n this.animationManager.scrollTo({ row }, animationOption);\n }\n scrollToCol(col: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ col });\n return;\n }\n this.animationManager.scrollTo({ col }, animationOption);\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n * @param animationOption 动画配置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) {\n if (animationOption) {\n this.animationManager.scrollTo(cellAddr, animationOption);\n return;\n }\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n}\n","import type { IEditor } from '@visactor/vtable-editors';\nexport const editors: { [key: string]: IEditor } = {};\nexport function get(editorName: string): IEditor {\n const editor = editors[editorName];\n if (!editor) {\n console.warn('editor should register before init table!');\n return undefined;\n }\n return editors[editorName];\n}\n","import type { IEditor, ValidateEnum } from '@visactor/vtable-editors';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport type { ListTableAPI, ListTableConstructorOptions } from '../ts-types';\nimport { getCellEventArgsSet } from '../event/util';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { isPromise } from '../tools/helper';\nimport { isValid } from '@visactor/vutils';\n\nexport class EditManager {\n table: BaseTableAPI;\n editingEditor: IEditor;\n isValidatingValue: boolean = false;\n editCell: { col: number; row: number };\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.bindEvent();\n }\n\n bindEvent() {\n const handler = this.table.internalProps.handler;\n const editCellTrigger = (this.table.options as ListTableConstructorOptions).editCellTrigger;\n this.table.on(TABLE_EVENT_TYPE.DBLCLICK_CELL, e => {\n if (\n !editCellTrigger || //默认为双击\n editCellTrigger === 'doubleclick' ||\n (Array.isArray(editCellTrigger) && editCellTrigger.includes('doubleclick'))\n ) {\n const { col, row } = e;\n\n //取双击自动列宽逻辑\n const eventArgsSet = getCellEventArgsSet(e.federatedEvent);\n const resizeCol = this.table.scenegraph.getResizeColAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgsSet.eventArgs?.targetCell\n );\n if (this.table._canResizeColumn(resizeCol.col, resizeCol.row) && resizeCol.col >= 0) {\n // 判断同双击自动列宽的时间监听的DBLCLICK_CELL\n // 如果是双击自动列宽 则编辑不开启\n return;\n }\n this.startEditCell(col, row);\n }\n });\n\n this.table.on(TABLE_EVENT_TYPE.CLICK_CELL, e => {\n if (editCellTrigger === 'click' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('click'))) {\n const { col, row } = e;\n this.startEditCell(col, row);\n }\n });\n\n // handler.on(this.table.getElement(), 'wheel', (e: WheelEvent) => {\n // this.completeEdit();\n // });\n // handler.on(this.table.getElement(), 'resize', (e: Event) => {\n // if (this.table.autoFillWidth || this.table.autoFillHeight) {\n // this.completeEdit();\n // }\n // });\n }\n\n startEditCell(col: number, row: number, value?: string | number) {\n if (this.editingEditor) {\n return;\n }\n const editor = (this.table as ListTableAPI).getEditor(col, row);\n if (editor) {\n // //自定义内容单元格不允许编辑\n // if (this.table.getCustomRender(col, row) || this.table.getCustomLayout(col, row)) {\n // console.warn(\"VTable Warn: cell has config custom render or layout, can't be edited\");\n // return;\n // }\n // if (!this.table.isHeader(col, row)) {\n // const range = this.table.getCellRange(col, row);\n // const isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;\n // if (isMerge) {\n // console.warn(\"VTable Warn: this is merge cell, can't be edited\");\n // return;\n // }\n // }\n if ((this.table.internalProps.layoutMap as SimpleHeaderLayoutMap)?.isAggregation?.(col, row)) {\n console.warn(\"VTable Warn: this is aggregation value, can't be edited\");\n return;\n }\n\n if (!this.editingEditor) {\n this.editCell = { col, row };\n }\n\n this.table._makeVisibleCell(col, row);\n this.editingEditor = editor;\n const dataValue = isValid(value) ? value : this.table.getCellOriginValue(col, row);\n const rect = this.table.getCellRangeRelativeRect(this.table.getCellRange(col, row));\n const referencePosition = { rect: { left: rect.left, top: rect.top, width: rect.width, height: rect.height } };\n\n // adjust last col&row, same as packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw\n if (col === this.table.colCount - 1) {\n referencePosition.rect.width = rect.width - 1;\n }\n if (row === this.table.rowCount - 1) {\n referencePosition.rect.height = rect.height - 1;\n }\n\n editor.beginEditing && console.warn('VTable Warn: `beginEditing` is deprecated, please use `onStart` instead.');\n editor.beginEditing?.(this.table.getElement(), referencePosition, dataValue);\n\n if (editor.bindSuccessCallback) {\n console.warn('VTable Warn: `bindSuccessCallback` is deprecated, please use `onStart` instead.');\n }\n editor.bindSuccessCallback?.(() => {\n this.completeEdit();\n });\n editor.onStart?.({\n value: dataValue,\n endEdit: () => {\n this.completeEdit();\n },\n referencePosition,\n container: this.table.getElement(),\n col,\n row\n });\n }\n }\n\n /** 如果是鼠标事件触发调用该接口 请传入原始事件对象 将判断事件对象是否在编辑器本身上面 来处理是否结束编辑\n * 返回值如果为false说明没有退出编辑状态 validateValue接口返回false 说明校验失败不退出编辑 */\n completeEdit(e?: Event): boolean | Promise {\n if (!this.editingEditor) {\n return true;\n }\n if (this.isValidatingValue) {\n return false;\n }\n const target = e?.target as HTMLElement | undefined;\n const { editingEditor: editor } = this;\n\n if (target) {\n if (editor.targetIsOnEditor) {\n console.warn('VTable Warn: `targetIsOnEditor` is deprecated, please use `isEditorElement` instead.');\n\n if (editor.targetIsOnEditor(target)) {\n return false;\n }\n } else if (!editor.isEditorElement || editor.isEditorElement(target)) {\n return false;\n }\n }\n\n if (!this.editingEditor.getValue) {\n console.warn('VTable Warn: `getValue` is not provided, did you forget to implement it?');\n }\n if (this.editingEditor.validateValue) {\n this.isValidatingValue = true;\n const newValue = this.editingEditor.getValue();\n const oldValue = this.table.getCellOriginValue(this.editCell.col, this.editCell.row);\n\n const maybePromiseOrValue = this.editingEditor.validateValue?.(newValue, oldValue, this.editCell, this.table);\n\n if (isPromise(maybePromiseOrValue)) {\n this.isValidatingValue = true;\n return new Promise((resolve, reject) => {\n maybePromiseOrValue\n .then(result => {\n // if (result) {\n // this.doExit();\n // resolve(true);\n // } else {\n // this.isValidatingValue = false;\n // resolve(false);\n // }\n dealWithValidateValue(result, this, oldValue, resolve);\n })\n .catch((err: Error) => {\n this.isValidatingValue = false;\n console.error('VTable Error:', err);\n reject(err);\n });\n });\n }\n return dealWithValidateValue(maybePromiseOrValue, this, oldValue);\n }\n this.doExit();\n return true;\n }\n\n doExit() {\n const changedValue = this.editingEditor.getValue?.();\n const range = this.table.getCellRange(this.editCell.col, this.editCell.row);\n const changedValues: any[] = [];\n for (let row = range.start.row; row <= range.end.row; row++) {\n const rowChangedValues = [];\n for (let col = range.start.col; col <= range.end.col; col++) {\n rowChangedValues.push(changedValue);\n }\n changedValues.push(rowChangedValues);\n }\n (this.table as ListTableAPI).changeCellValues(range.start.col, range.start.row, changedValues);\n this.editingEditor.exit && console.warn('VTable Warn: `exit` is deprecated, please use `onEnd` instead.');\n this.editingEditor.exit?.();\n this.editingEditor.onEnd?.();\n this.editingEditor = null;\n this.isValidatingValue = false;\n }\n\n cancelEdit() {\n if (this.editingEditor) {\n // TODO: 添加开发时弃用警告\n this.editingEditor.exit?.();\n this.editingEditor.onEnd?.();\n this.editingEditor = null;\n }\n }\n}\n\nfunction dealWithValidateValue(\n validateValue: boolean | ValidateEnum,\n editManager: EditManager,\n oldValue: any,\n resolve?: (value: boolean | PromiseLike) => void\n): boolean {\n editManager.isValidatingValue = false;\n if (validateValue === 'validate-exit') {\n editManager.doExit();\n resolve?.(true);\n return true;\n } else if (validateValue === 'invalidate-exit') {\n (editManager.editingEditor as any).setValue(oldValue);\n editManager.doExit();\n resolve?.(true);\n return true;\n } else if (validateValue === 'validate-not-exit') {\n resolve?.(false);\n return false;\n } else if (validateValue === 'invalidate-not-exit') {\n resolve?.(false);\n return false;\n } else if (validateValue === true) {\n editManager.doExit();\n resolve?.(true);\n return true;\n }\n resolve?.(false);\n return false;\n}\n","import { isArray, isString } from '@visactor/vutils';\nimport type { GroupByOption } from '../ts-types';\n\nexport function getGroupByDataConfig(groupByOption: GroupByOption) {\n // no sort temply\n if (isString(groupByOption)) {\n return { groupByRules: [groupByOption] };\n }\n if (isArray(groupByOption)) {\n const groupByRules = groupByOption.map(item => {\n if (isString(item)) {\n return item;\n }\n return item.key;\n });\n return { groupByRules };\n }\n\n return {};\n}\n","/* eslint-disable max-depth */\nimport type { ListTable } from '../ListTable';\nimport type { CachedDataSource } from '../data';\nimport { computeColWidth } from '../scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from '../scenegraph/layout/compute-row-height';\nimport { isPromise } from '../tools/helper';\nimport { defaultOrderFn } from '../tools/util';\nimport type { SortState } from '../ts-types';\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\n\n/**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n */\nexport function listTableChangeCellValue(\n col: number,\n row: number,\n value: string | number | null,\n workOnEditableCell: boolean,\n table: ListTable\n) {\n if ((workOnEditableCell && table.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n const recordIndex = table.getRecordShowIndexByCell(col, row);\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n const beforeChangeValue = table.getCellRawValue(col, row);\n const oldValue = table.getCellOriginValue(col, row);\n if (table.isHeader(col, row)) {\n table.internalProps.layoutMap.updateColumnTitle(col, row, value as string);\n } else {\n table.dataSource.changeFieldValue(value, recordIndex, field, col, row, table);\n }\n const range = table.getCellRange(col, row);\n //改变单元格的值后 聚合值做重新计算\n const aggregators = table.internalProps.layoutMap.getAggregatorsByCell(col, row);\n if (aggregators) {\n if (Array.isArray(aggregators)) {\n for (let i = 0; i < aggregators?.length; i++) {\n aggregators[i].recalculate();\n }\n } else {\n aggregators.recalculate();\n }\n const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(\n range.start.col,\n range.start.row,\n range.end.col,\n range.end.row\n );\n for (let i = 0; i < aggregatorCells.length; i++) {\n const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n }\n }\n\n // const cell_value = table.getCellValue(col, row);\n\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (table.widthMode === 'adaptive' || (table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth)) {\n if (table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n table.scenegraph.recalculateColWidths();\n }\n } else if (!table.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, table.rowCount - 1, table, false);\n if (newWidth !== oldWidth) {\n table.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n if (table.internalProps._heightResizedRowMap.size === 0) {\n table.scenegraph.recalculateRowHeights();\n }\n } else if (table.isAutoRowHeight() && !table.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = table.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, table.colCount - 1, table);\n table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n const changedValue = table.getCellOriginValue(col, row);\n if (oldValue !== changedValue) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue: beforeChangeValue,\n currentValue: oldValue,\n changedValue\n });\n }\n table.scenegraph.updateNextFrame();\n }\n}\n/**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\nexport function listTableChangeCellValues(\n startCol: number,\n startRow: number,\n values: (string | number)[][],\n workOnEditableCell: boolean,\n table: ListTable\n) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n let cellUpdateType: 'normal' | 'sort' | 'group';\n\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > table.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > table.colCount - 1) {\n break;\n }\n cellUpdateType = getCellUpdateType(startCol + j, startRow + i, table, cellUpdateType);\n const beforeChangeValue = table.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = table.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > table.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > table.colCount - 1) {\n break;\n }\n thisRowPasteColEnd = startCol + j;\n let isCanChange = false;\n if (workOnEditableCell === false) {\n isCanChange = true;\n } else {\n if (table.isHasEditorDefine(startCol + j, startRow + i)) {\n const editor = table.getEditor(startCol + j, startRow + i);\n const oldValue = oldValues[i][j];\n const value = rowValues[j];\n const maybePromiseOrValue = editor?.validateValue?.(value, oldValue) ?? true;\n if (isPromise(maybePromiseOrValue)) {\n //TODO 处理promise的情况\n isCanChange = true;\n } else {\n isCanChange =\n maybePromiseOrValue === true ||\n maybePromiseOrValue === 'validate-exit' ||\n maybePromiseOrValue === 'invalidate-exit';\n }\n }\n }\n // if ((workOnEditableCell && table.isHasEditorDefine(startCol + j, startRow + i)) || workOnEditableCell === false) {\n if (isCanChange) {\n const value = rowValues[j];\n const recordIndex = table.getRecordShowIndexByCell(startCol + j, startRow + i);\n const { field } = table.internalProps.layoutMap.getBody(startCol + j, startRow + i);\n // const beforeChangeValue = table.getCellRawValue(startCol + j, startRow + i);\n // const oldValue = table.getCellOriginValue(startCol + j, startRow + i);\n const beforeChangeValue = beforeChangeValues[i][j];\n const oldValue = oldValues[i][j];\n if (table.isHeader(startCol + j, startRow + i)) {\n table.internalProps.layoutMap.updateColumnTitle(startCol + j, startRow + i, value as string);\n } else {\n table.dataSource.changeFieldValue(value, recordIndex, field, startCol + j, startRow + i, table);\n }\n const changedValue = table.getCellOriginValue(startCol + j, startRow + i);\n if (oldValue !== changedValue) {\n table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue: beforeChangeValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = table.getCellValue(col, row);\n const startRange = table.getCellRange(startCol, startRow);\n const range = table.getCellRange(pasteColEnd, pasteRowEnd);\n\n //改变单元格的值后 聚合值做重新计算\n const aggregators = table.internalProps.layoutMap.getAggregatorsByCellRange(\n startRange.start.col,\n startRange.start.row,\n range.end.col,\n range.end.row\n );\n\n if (aggregators) {\n for (let i = 0; i < aggregators?.length; i++) {\n aggregators[i].recalculate();\n }\n\n if (cellUpdateType === 'normal') {\n const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(\n startRange.start.col,\n startRange.start.row,\n range.end.col,\n range.end.row\n );\n for (let i = 0; i < aggregatorCells.length; i++) {\n const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n }\n }\n }\n\n if (cellUpdateType === 'group') {\n (table.dataSource as CachedDataSource).updateRecordsForGroup([], []);\n }\n\n if (cellUpdateType === 'sort' || cellUpdateType === 'group') {\n (table.dataSource as any).sortedIndexMap.clear();\n sortRecords(table);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n table.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (table.widthMode === 'adaptive' || (table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth)) {\n if (table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n table.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!table.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = table.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, table.rowCount - 1, table, false);\n if (newWidth !== oldWidth) {\n table.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n if (\n table.heightMode === 'adaptive' ||\n (table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight)\n ) {\n table.scenegraph.recalculateRowHeights();\n } else if (table.isAutoRowHeight()) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (table.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = table.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, table.colCount - 1, table);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n table.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n table.scenegraph.updateNextFrame();\n}\n\ntype CellUpdateType = 'normal' | 'sort' | 'group';\nfunction getCellUpdateType(\n col: number,\n row: number,\n table: ListTable,\n oldCellUpdateType: CellUpdateType | undefined\n): CellUpdateType {\n if (oldCellUpdateType === 'group') {\n return oldCellUpdateType;\n }\n if (oldCellUpdateType === 'sort' && !table.options.groupBy) {\n return oldCellUpdateType;\n }\n let cellUpdateType: CellUpdateType = 'normal';\n if (table.options.groupBy) {\n cellUpdateType = 'group';\n } else if (!table.isHeader(col, row) && (table.dataSource as any).lastOrderField) {\n const field = table.getBodyField(col, row);\n if (field === (table.dataSource as any).lastOrderField) {\n cellUpdateType = 'sort';\n }\n }\n return cellUpdateType;\n}\n\nexport function sortRecords(table: ListTable) {\n let sortState = table.sortState;\n sortState = !sortState || Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState) {\n sortState = (sortState as SortState[]).map(item => {\n item.orderFn = table._getSortFuncFromHeaderOption(undefined, item.field) ?? defaultOrderFn;\n //const hd = table.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return item;\n });\n\n table.dataSource.sort(sortState);\n }\n}\n\n/**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\nexport function listTableAddRecord(record: any, recordIndex: number, table: ListTable) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).addRecordsForGroup?.([record], recordIndex);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.addRecordForSorted(record);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n if (recordIndex === undefined || recordIndex > table.dataSource.sourceLength) {\n recordIndex = table.dataSource.sourceLength;\n }\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n table.dataSource.addRecord(record, recordIndex);\n const oldRowCount = table.rowCount;\n table.refreshRowColCount();\n if (table.scenegraph.proxy.totalActualBodyRowCount === 0) {\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (recordIndex < endIndex) {\n //插入当前页或者前面的数据才需要更新 如果是插入的是当前页后面的数据不需要更新场景树\n if (recordIndex < endIndex - perPageCount) {\n // 如果是当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n //如果是插入当前页数据\n const rowNum = recordIndex - (endIndex - perPageCount) + headerCount;\n if (oldRowCount - headerCount === table.pagination.perPageCount) {\n //如果当页数据是满的 则更新插入的部分行\n const updateRows = [];\n for (let row = rowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n } else {\n //如果当页数据不是满的 则插入新数据\n const addRows = [];\n for (let row = rowNum; row < Math.min(newRowCount, rowNum + 1); row++) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n }\n } else {\n const addRows = [];\n for (let row = recordIndex + headerCount; row < recordIndex + headerCount + 1; row++) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n const updateRows = [];\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n}\n\n/**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\nexport function listTableAddRecords(records: any[], recordIndex: number, table: ListTable) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).addRecordsForGroup?.(records, recordIndex);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.addRecordsForSorted(records);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n if (recordIndex === undefined || recordIndex > table.dataSource.sourceLength) {\n recordIndex = table.dataSource.sourceLength;\n } else if (recordIndex < 0) {\n recordIndex = 0;\n }\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n table.dataSource.addRecords(records, recordIndex);\n const oldRowCount = table.transpose ? table.colCount : table.rowCount;\n table.refreshRowColCount();\n if (table.scenegraph.proxy.totalActualBodyRowCount === 0) {\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n return;\n }\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (recordIndex < endIndex) {\n //插入当前页或者前面的数据才需要更新 如果是插入的是当前页后面的数据不需要更新场景树\n if (recordIndex < endIndex - perPageCount) {\n // 如果是当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n //如果是插入当前页数据\n\n const rowNum = recordIndex - (endIndex - perPageCount) + headerCount;\n if (oldRowCount - headerCount === table.pagination.perPageCount) {\n //如果当页数据是满的 则更新插入的部分行\n const updateRows = [];\n for (let row = rowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n } else {\n //如果当页数据不是满的 则插入新数据\n const addRows = [];\n for (\n let row = rowNum;\n row < Math.min(newRowCount, rowNum + (Array.isArray(records) ? records.length : 1));\n row++\n ) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []);\n }\n }\n }\n } else {\n const addRows = [];\n for (\n let row = recordIndex + headerCount;\n row < recordIndex + headerCount + (Array.isArray(records) ? records.length : 1);\n row++\n ) {\n if (table.transpose) {\n addRows.push({ col: row, row: 0 });\n } else {\n addRows.push({ col: 0, row });\n }\n }\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n const updateRows = [];\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], addRows, updateRows)\n : table.scenegraph.updateRow([], addRows, updateRows);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n}\n\n/**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\nexport function listTableDeleteRecords(recordIndexs: number[], table: ListTable) {\n if (recordIndexs?.length > 0) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).deleteRecordsForGroup?.(recordIndexs);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.deleteRecordsForSorted(recordIndexs);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const deletedRecordIndexs = table.dataSource.deleteRecords(recordIndexs);\n if (deletedRecordIndexs.length === 0) {\n return;\n }\n const oldRowCount = table.transpose ? table.colCount : table.rowCount;\n table.refreshRowColCount();\n const newRowCount = table.transpose ? table.colCount : table.rowCount;\n const recordIndexsMinToMax = deletedRecordIndexs.sort((a, b) => a - b);\n const minRecordIndex = recordIndexsMinToMax[0];\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (minRecordIndex < endIndex) {\n //删除当前页或者前面的数据才需要更新 如果是删除的是当前页后面的数据不需要更新场景树\n if (minRecordIndex < endIndex - perPageCount) {\n // 如果删除包含当页之前的数据 则整个场景树都更新\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n //如果是仅删除当前页数据\n const minRowNum =\n minRecordIndex -\n (endIndex - perPageCount) +\n (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) +\n topAggregationCount;\n //如果当页数据是满的 则更新影响的部分行\n const updateRows = [];\n const delRows = [];\n\n for (let row = minRowNum; row < newRowCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n if (newRowCount < oldRowCount) {\n //如果如果删除后不满 需要有删除数据\n for (let row = newRowCount; row < oldRowCount; row++) {\n if (table.transpose) {\n delRows.push({ col: row, row: 0 });\n } else {\n delRows.push({ col: 0, row });\n }\n }\n }\n table.reactCustomLayout?.clearCache();\n table.transpose\n ? table.scenegraph.updateCol(delRows, [], updateRows)\n : table.scenegraph.updateRow(delRows, [], updateRows);\n table.reactCustomLayout?.updateAllCustomCell();\n }\n }\n } else {\n const delRows = [];\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n const rowNum = recordIndex + headerCount + topAggregationCount;\n if (table.transpose) {\n delRows.push({ col: rowNum, row: 0 });\n } else {\n delRows.push({ col: 0, row: rowNum });\n }\n }\n const updateRows = [];\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n\n table.reactCustomLayout?.clearCache();\n table.transpose\n ? table.scenegraph.updateCol(delRows, [], updateRows)\n : table.scenegraph.updateRow(delRows, [], updateRows);\n table.reactCustomLayout?.updateAllCustomCell();\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n }\n}\n\n/**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\nexport function listTableUpdateRecords(records: any[], recordIndexs: number[], table: ListTable) {\n if (recordIndexs?.length > 0) {\n if (table.options.groupBy) {\n (table.dataSource as CachedDataSource).updateRecordsForGroup?.(records, recordIndexs);\n table.refreshRowColCount();\n table.internalProps.layoutMap.clearCellRangeMap();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else if (table.sortState) {\n table.dataSource.updateRecordsForSorted(records, recordIndexs);\n sortRecords(table);\n table.refreshRowColCount();\n // 更新整个场景树\n table.scenegraph.clearCells();\n table.scenegraph.createSceneGraph();\n } else {\n const updateRecordIndexs = table.dataSource.updateRecords(records, recordIndexs);\n if (updateRecordIndexs.length === 0) {\n return;\n }\n const bodyRowIndex = updateRecordIndexs.map(index => table.getBodyRowIndexByRecordIndex(index));\n const recordIndexsMinToMax = bodyRowIndex.sort((a, b) => a - b);\n if (table.pagination) {\n const { perPageCount, currentPage } = table.pagination;\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n const updateRows = [];\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n if (recordIndex < endIndex && recordIndex >= endIndex - perPageCount) {\n const rowNum =\n recordIndex -\n (endIndex - perPageCount) +\n (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) +\n topAggregationCount;\n updateRows.push(rowNum);\n }\n }\n if (updateRows.length >= 1) {\n const updateRowCells = [];\n for (let index = 0; index < updateRows.length; index++) {\n const updateRow = updateRows[index];\n if (table.transpose) {\n updateRowCells.push({ col: updateRow, row: 0 });\n } else {\n updateRowCells.push({ col: 0, row: updateRow });\n }\n }\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRowCells.push({ col: row, row: 0 });\n } else {\n updateRowCells.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRowCells)\n : table.scenegraph.updateRow([], [], updateRowCells);\n }\n } else {\n const updateRows = [];\n const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount;\n const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount;\n const bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount;\n for (let index = 0; index < recordIndexsMinToMax.length; index++) {\n const recordIndex = recordIndexsMinToMax[index];\n const rowNum = recordIndex + headerCount + topAggregationCount;\n if (table.transpose) {\n updateRows.push({ col: rowNum, row: 0 });\n } else {\n updateRows.push({ col: 0, row: rowNum });\n }\n }\n for (let row = headerCount; row < headerCount + topAggregationCount; row++) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n for (\n let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount;\n row < (table.transpose ? table.colCount : table.rowCount);\n row++\n ) {\n if (table.transpose) {\n updateRows.push({ col: row, row: 0 });\n } else {\n updateRows.push({ col: 0, row });\n }\n }\n table.transpose\n ? table.scenegraph.updateCol([], [], updateRows)\n : table.scenegraph.updateRow([], [], updateRows);\n }\n }\n // table.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, { row });\n }\n}\n","import type { CellAddress } from '../ts-types';\nimport type { BaseTableAPI } from '../ts-types/base-table';\n\n/*\n * fix update row range logic:\n *\n * ADD:\n * 1. proxy not full => add\n * 2. proxy full\n * 2.1 row outside of proxy row range => skip\n * 2.2 row inside of proxy row range => update row to proxy rowEnd\n * REM:\n * 1. row before rowStart or after rowEnd => skip\n * 2. row after rowStart and before new rowEnd => update row to rowEnd\n * 3. rows after new rowEnd before old rowEnd => delete\n */\n\nexport function fixUpdateRowRange(\n diffPositions: {\n addCellPositions: CellAddress[];\n removeCellPositions: CellAddress[];\n },\n // updateCells: CellAddress[], // default [{col,row}]\n col: number,\n row: number,\n table: BaseTableAPI\n) {\n const updateCells = [{ col, row }];\n const addCells = [];\n const removeCells = [];\n\n const { addCellPositions, removeCellPositions } = diffPositions;\n const proxy = table.scenegraph.proxy;\n const { rowStart, rowLimit } = proxy;\n let { rowEnd } = proxy;\n let updateRow = Infinity;\n\n for (let i = 0; i < addCellPositions.length; i++) {\n const { row: cellRow } = addCellPositions[i];\n\n if (rowEnd - rowStart + 1 === rowLimit) {\n // current row cell is full\n if (cellRow >= rowStart && cellRow <= rowEnd) {\n updateRow = Math.min(updateRow, cellRow);\n }\n } else {\n // row cell is not full\n addCells.push({\n col,\n row: cellRow\n });\n rowEnd++;\n }\n }\n\n const newRowEnd = Math.min(rowStart + rowLimit, table.rowCount - 1 - table.bottomFrozenRowCount);\n const notFullRow = newRowEnd < rowStart + rowLimit;\n for (let i = 0; i < removeCellPositions.length; i++) {\n const { row: cellRow } = removeCellPositions[removeCellPositions.length - i - 1];\n if (cellRow < rowStart || cellRow > rowEnd) {\n // row before rowStart or after rowEnd => skip\n continue;\n } else if (cellRow > newRowEnd) {\n // rows after new rowEnd before old rowEnd => delete\n removeCells.push({\n col,\n row: cellRow\n });\n updateRow--;\n } else if (notFullRow) {\n // row range is not full\n removeCells.push({\n col,\n row: cellRow\n });\n updateRow--;\n } else {\n // row after rowStart and before new rowEnd => update row to rowEnd\n updateRow = Math.min(updateRow, cellRow);\n }\n }\n\n if (updateRow !== Infinity) {\n for (let i = updateRow; i <= rowEnd; i++) {\n updateCells.push({\n col,\n row: i\n });\n }\n }\n\n table.scenegraph.proxy.refreshRowCount();\n return {\n updateCells,\n addCells,\n removeCells\n };\n}\n","import type {\n AggregationType,\n CellAddress,\n CellRange,\n ColumnsDefine,\n DropDownMenuEventInfo,\n FieldData,\n FieldDef,\n FieldFormat,\n FieldKeyDef,\n FilterRules,\n IPagination,\n ListTableAPI,\n ListTableConstructorOptions,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from './ts-types';\nimport { HierarchyState } from './ts-types';\nimport { SimpleHeaderLayoutMap } from './layout';\nimport { isArray, isValid } from '@visactor/vutils';\nimport {\n _setDataSource,\n _setRecords,\n checkHasAggregationOnColumnDefine,\n generateAggregationForColumn\n} from './core/tableHelper';\nimport { BaseTable } from './core';\nimport type { BaseTableAPI, ListTableProtected } from './ts-types/base-table';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport * as editors from './edit/editors';\nimport { EditManager } from './edit/edit-manager';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { defaultOrderFn } from './tools/util';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ColumnData, ColumnDefine } from './ts-types/list-table/layout-map/api';\nimport { getCellRadioState, setCellRadioState } from './state/radio/radio';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { getGroupCheckboxState, setCellCheckboxState } from './state/checkbox/checkbox';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { getGroupByDataConfig } from './core/group-helper';\nimport type { CachedDataSource } from './data';\nimport {\n listTableAddRecord,\n listTableAddRecords,\n listTableChangeCellValue,\n listTableChangeCellValues,\n listTableDeleteRecords,\n listTableUpdateRecords,\n sortRecords\n} from './core/record-helper';\nimport type { IListTreeStickCellPlugin, ListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport { fixUpdateRowRange } from './tools/update-row';\n// import {\n// registerAxis,\n// registerEmptyTip,\n// registerLegend,\n// registerMenu,\n// registerTitle,\n// registerTooltip\n// } from './components';\n// import {\n// registerChartCell,\n// registerCheckboxCell,\n// registerImageCell,\n// registerProgressBarCell,\n// registerRadioCell,\n// registerSparkLineCell,\n// registerTextCell,\n// registerVideoCell\n// } from './scenegraph/group-creater/cell-type';\n\n// registerAxis();\n// registerEmptyTip();\n// registerLegend();\n// registerMenu();\n// registerTitle();\n// registerTooltip();\n\n// registerChartCell();\n// registerCheckboxCell();\n// registerImageCell();\n// registerProgressBarCell();\n// registerRadioCell();\n// registerSparkLineCell();\n// registerTextCell();\n// registerVideoCell();\n\nexport class ListTable extends BaseTable implements ListTableAPI {\n declare internalProps: ListTableProtected;\n /**\n * 用户配置的options 只读 勿直接修改\n */\n declare options: ListTableConstructorOptions;\n showHeader = true;\n listTreeStickCellPlugin?: ListTreeStickCellPlugin;\n\n // eslint-disable-next-line default-param-last\n constructor(options: ListTableConstructorOptions);\n constructor(container: HTMLElement, options: ListTableConstructorOptions);\n constructor(container?: HTMLElement | ListTableConstructorOptions, options?: ListTableConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as ListTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as ListTableConstructorOptions;\n if ((container as ListTableConstructorOptions).container) {\n container = (container as ListTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n const internalProps = this.internalProps;\n internalProps.frozenColDragHeaderMode = options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n internalProps.multipleSort = !!options.multipleSort;\n internalProps.dataConfig = options.groupBy ? getGroupByDataConfig(options.groupBy) : {}; //cloneDeep(options.dataConfig ?? {});\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children']) // children for react\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns?.forEach((colDefine, index) => {\n // //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n\n internalProps.enableTreeNodeMerge = options.enableTreeNodeMerge ?? isValid(options.groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n this.showHeader = options.showHeader ?? true;\n\n this.transpose = options.transpose ?? false;\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n if (options.dataSource) {\n _setDataSource(this, options.dataSource);\n } else if (options.records) {\n this.setRecords(options.records as any, { sortState: internalProps.sortState });\n } else {\n this.setRecords([]);\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n if (options.enableTreeStickCell) {\n const ListTreeStickCellPlugin = Factory.getComponent('listTreeStickCellPlugin') as IListTreeStickCellPlugin;\n this.listTreeStickCellPlugin = new ListTreeStickCellPlugin(this);\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n isListTable(): true {\n return true;\n }\n isPivotTable(): false {\n return false;\n }\n isPivotChart(): false {\n return false;\n }\n /**\n * Get the sort state.\n */\n get sortState(): SortState | SortState[] {\n return this.internalProps.sortState;\n }\n\n get records() {\n return this.dataSource?.records;\n }\n\n get recordsCount() {\n return this.dataSource.records.length;\n }\n // /**\n // * Gets the define of the header.\n // */\n // get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n // }\n // /**\n // * Sets the define of the column.\n // */\n // set columns(columns: ColumnsDefine) {\n // this.internalProps.columns = columns;\n // this.options.columns = columns;\n // }\n /**\n * Sets the define of the column.\n */\n updateColumns(columns: ColumnsDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.columns = cloneDeepSpec(columns, ['children']);\n generateAggregationForColumn(this);\n // columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // this.internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n this.options.columns = columns;\n this.internalProps.headerHelper.setTableColumnsEditor();\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n this.dataSource.updateColumns?.(this.internalProps.columns);\n if (this.records && checkHasAggregationOnColumnDefine(columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n return this.internalProps.layoutMap.columnTree.getCopiedTree(); //调整顺序后的columns\n }\n /**\n *@deprecated 请使用columns\n */\n get header(): ColumnsDefine {\n return this.internalProps.columns;\n }\n /**\n * @deprecated 请使用columns\n */\n set header(header: ColumnsDefine) {\n this.internalProps.columns = header;\n generateAggregationForColumn(this);\n this.options.header = header;\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n //需要异步等待其他事情都完成后再绘制\n this.renderAsync();\n }\n /**\n * Get the transpose.\n */\n get transpose(): boolean {\n return this.internalProps.transpose ?? false;\n }\n /**\n * Set the transpose from given\n */\n set transpose(transpose: boolean) {\n if (this.internalProps.transpose === transpose) {\n return;\n }\n this.internalProps.transpose = transpose;\n // this.options.transpose = transpose; // cause extr update in react\n if (this.internalProps.layoutMap) {\n //后面如果修改是否转置\n this.internalProps.layoutMap.transpose = transpose;\n this.refreshRowColCount();\n\n // 转置后为行布局,列宽只支持依据该列所有内容自适应宽度\n this._resetFrozenColCount();\n this.renderAsync();\n }\n }\n /** 获取单元格展示值 */\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n let value;\n if ((this.options as ListTableConstructorOptions).groupBy) {\n const record = table.getCellRawRecord(col, row);\n if (record?.vtableMerge) {\n return '';\n }\n const indexs = this.dataSource.currentIndexedData[row - this.columnHeaderLevelCount] as number[];\n value = indexs[indexs.length - 1] + 1;\n } else {\n value = row - this.columnHeaderLevelCount + 1;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this, value) : value;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n }\n }\n const { field, fieldFormat } = table.internalProps.layoutMap.getBody(col, row) as ColumnData;\n return table.getFieldData(fieldFormat || field, col, row);\n }\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.value();\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.value();\n }\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getFieldData(field, col, row);\n }\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getRawFieldData(field, col, row);\n }\n /** 获取当前单元格在body部分的展示索引 即(row / col)-headerLevelCount。注:ListTable特有接口 */\n getRecordShowIndexByCell(col: number, row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getRecordShowIndexByCell(col, row);\n }\n\n /** 获取当前单元格的数据是数据源中的第几条。\n * 如果是树形模式的表格,将返回数组,如[1,2] 数据源中第2条数据中children中的第3条\n * 注:ListTable特有接口 */\n getRecordIndexByCell(col: number, row: number): number | number[] {\n const { layoutMap } = this.internalProps;\n const recordShowIndex = layoutMap.getRecordShowIndexByCell(col, row);\n return this.dataSource.currentPagerIndexedData[recordShowIndex];\n }\n\n getTableIndexByRecordIndex(recordIndex: number | number[]) {\n if (this.transpose) {\n return this.dataSource.getTableIndex(recordIndex) + this.rowHeaderLevelCount;\n }\n return this.dataSource.getTableIndex(recordIndex) + this.columnHeaderLevelCount;\n }\n getTableIndexByField(field: FieldDef) {\n const colObj = this.internalProps.layoutMap.columnObjects.find((col: any) => col.field === field);\n if (!colObj) {\n return -1;\n }\n const layoutRange = this.internalProps.layoutMap.getBodyLayoutRangeById(colObj.id);\n if (this.transpose) {\n return layoutRange.start.row;\n }\n return layoutRange.start.col;\n }\n /**\n * 根据数据源中的index和field获取单元格行列号\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n if (this.transpose) {\n return { col: this.getTableIndexByRecordIndex(recordIndex), row: this.getTableIndexByField(field) };\n }\n return { col: this.getTableIndexByField(field), row: this.getTableIndexByRecordIndex(recordIndex) };\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑单元格的话 对应编辑后format前\n * @param col\n * @param row\n */\n getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.get(index);\n }\n return undefined;\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑的话 对应编辑前\n * @param col\n * @param row\n */\n getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.getRaw(index);\n }\n return undefined;\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.transpose) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if ((cellDefine as ColumnData)?.disableColumnResize) {\n return false;\n } else if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: ListTableConstructorOptions) {\n const internalProps = this.internalProps;\n super.updateOption(options);\n internalProps.frozenColDragHeaderMode = options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n // internalProps.dataConfig = {}; // cloneDeep(options.dataConfig ?? {});\n internalProps.dataConfig = options.groupBy ? getGroupByDataConfig(options.groupBy) : {}; //cloneDeep(options.dataConfig ?? {});\n //更新protectedSpace\n this.showHeader = options.showHeader ?? true;\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children'])\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n internalProps.enableTreeNodeMerge = options.enableTreeNodeMerge ?? isValid(options.groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n // 处理转置\n this.transpose = options.transpose ?? false;\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n if (options.dataSource) {\n _setDataSource(this, options.dataSource);\n } else if (options.records) {\n this.setRecords(options.records as any, {\n sortState: options.sortState\n });\n } else {\n this._resetFrozenColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination: IPagination): void {\n if (this.pagination) {\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n this.dataSource.updatePagination(this.pagination);\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.renderAsync();\n }\n }\n /** @private */\n refreshHeader(): void {\n const table = this;\n const internalProps = table.internalProps;\n const transpose = table.transpose;\n const showHeader = table.showHeader;\n const layoutMap = (internalProps.layoutMap = new SimpleHeaderLayoutMap(\n this,\n internalProps.columns ?? [],\n showHeader,\n table.options.hierarchyIndent\n ));\n\n layoutMap.transpose = transpose;\n\n if (!transpose) {\n //设置列宽 这里需要优化,考虑转置表格的情况 transpose,转置表格不需要设置colWidth TODO\n this.setMinMaxLimitWidth(true);\n }\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n\n const dataCount = table.internalProps.dataSource?.length ?? 0;\n layoutMap.recordsCount =\n dataCount + (dataCount > 0 ? layoutMap.hasAggregationOnTopCount + layoutMap.hasAggregationOnBottomCount : 0);\n\n if (table.transpose) {\n table.rowCount = layoutMap.rowCount ?? 0;\n table.colCount = layoutMap.colCount ?? 0;\n // table.frozenRowCount = 0;\n // table.frozenColCount = layoutMap.headerLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.headerLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n this.internalProps.frozenRowCount = this.options.frozenRowCount ?? 0;\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n } else {\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n // table.frozenColCount = table.options.frozenColCount ?? 0; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = this.options.frozenColCount ?? 0;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n // this.scenegraph.proxy?.refreshRowColCount();\n }\n /**\n * 获取records数据源中 字段对应的value 值是format之后的\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(\n table.transpose ? col - table.internalProps.layoutMap.leftRowSeriesNumberColumnCount : col,\n row\n );\n return table.internalProps.dataSource.getField(index, field, col, row, this);\n }\n /**\n * 获取records数据源中 字段对应的value 值是数据源中原始值\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getRawFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.getRawField(index, field, col, row, this);\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = this.internalProps.layoutMap.moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n if (!this.transpose) {\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.colWidthsLimit = {}; //需要先清空\n this.setMinMaxLimitWidth();\n }\n // // 清空相关缓存\n // const colStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const colEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let col = colStart; col <= colEnd; col++) {\n // this._clearColRangeWidthsMap(col);\n // }\n } else {\n // // 清空相关缓存\n // const rowStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const rowEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let row = rowStart; row <= rowEnd; row++) {\n // this._clearRowRangeHeightsMap(row);\n // }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n changeRecordOrder(sourceIndex: number, targetIndex: number) {\n if (this.transpose) {\n sourceIndex = this.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = this.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = this.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = this.getRecordShowIndexByCell(0, targetIndex);\n }\n this.dataSource.reorderRecord(sourceIndex, targetIndex);\n }\n /**\n * 方法适用于获取body中某条数据的行列号\n * @param findTargetRecord 通过数据对象或者指定函数来计算数据条目index\n * @param field\n * @returns\n */\n getCellAddress(findTargetRecord: any | ((record: any) => boolean), field: FieldDef): CellAddress {\n let targetRecordIndex: number;\n\n for (let i = 0; i < this.internalProps.records.length; i++) {\n const record = this.internalProps.records[i];\n if (typeof findTargetRecord === 'function') {\n if ((findTargetRecord)(record)) {\n targetRecordIndex = i;\n }\n } else {\n let isAllRight = true;\n for (const prop in findTargetRecord) {\n if (record[prop] !== findTargetRecord[prop]) {\n isAllRight = false;\n break;\n }\n }\n if (isAllRight) {\n targetRecordIndex = i;\n }\n }\n if (isValid(targetRecordIndex)) {\n break;\n }\n }\n const cellRange = this.getCellRangeByField(field, targetRecordIndex);\n if (cellRange) {\n return { row: cellRange.start.row, col: cellRange.start.col };\n }\n return undefined;\n }\n /**\n * 获取指定field及指定数据条index的单元格位置\n * @param {*} field\n * @param {number} index 要获取的第几条数据\n * @return {number} 返回单元格的坐标范围 TODO 转置表有问题bug\n */\n getCellRangeByField(field: FieldDef, index: number): CellRange | null {\n const { layoutMap } = this.internalProps;\n const colObj = layoutMap.columnObjects.find((col: any) => col.field === field);\n if (colObj) {\n const layoutRange = layoutMap.getBodyLayoutRangeById(colObj.id);\n let startRow;\n if (isValid(index)) {\n startRow = layoutMap.getRecordStartRowByRecordIndex(index);\n }\n if (this.transpose) {\n return {\n start: {\n row: layoutRange.start.row,\n col: isValid(startRow) ? startRow + layoutRange.start.col : undefined\n },\n end: {\n row: layoutRange.end.row,\n col: isValid(startRow) ? startRow + layoutRange.end.col : undefined\n }\n };\n }\n return {\n start: {\n col: layoutRange.start.col,\n row: isValid(startRow) ? startRow + layoutRange.start.row : undefined // layoutRange.start.row这里是0 所以无意义\n },\n end: {\n col: layoutRange.end.col,\n row: isValid(startRow) ? startRow + layoutRange.end.row : undefined // layoutRange.start.row这里是0 所以无意义\n }\n };\n }\n return null;\n }\n /**\n * 获取层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getHierarchyState(col: number, row: number) {\n if (!this.options.groupBy) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n if (!define.tree) {\n return HierarchyState.none;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n return this.dataSource.getHierarchyState(index);\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n const record = this.getCellOriginRecord(col, row);\n if (Array.isArray(record.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: record\n });\n }\n }\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n /** 刷新当前节点收起展开状态,如手动更改过 */\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n let notFillWidth = false;\n let notFillHeight = false;\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n const diffDataIndices = this.dataSource.toggleHierarchyState(\n index,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount,\n Math.max(\n this.scenegraph.proxy.rowEnd - this.columnHeaderLevelCount,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount + this.scenegraph.proxy.rowLimit - 1\n )\n );\n const diffPositions = this.internalProps.layoutMap.toggleHierarchyState(diffDataIndices);\n //影响行数\n this.refreshRowColCount();\n\n // for bottom frozen row height map\n for (let row = this.rowCount - this.bottomFrozenRowCount; row < this.rowCount; row++) {\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this._setRowHeight(row, newHeight);\n }\n\n this.clearCellStyleCache();\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // this.scenegraph.updateHierarchyIcon(col, row);// 添加了updateCells:[{ col, row }] 就不需要单独更新图标了(只更新图标针对有自定义元素的情况 会有更新不到问题)'\n // const updateCells = [{ col, row }];\n // // 如果需要移出的节点超过了当前加载部分最后一行 则转变成更新对应的行\n // if (\n // diffPositions.removeCellPositions?.length > 0 &&\n // diffPositions.removeCellPositions[diffPositions.removeCellPositions.length - 1].row >=\n // this.scenegraph.proxy.rowEnd\n // ) {\n // for (let i = 0; i <= diffPositions.removeCellPositions.length - 1; i++) {\n // if (diffPositions.removeCellPositions[i].row <= this.scenegraph.proxy.rowEnd) {\n // updateCells.push({\n // col: diffPositions.removeCellPositions[i].col,\n // row: diffPositions.removeCellPositions[i].row\n // });\n // }\n // }\n // diffPositions.removeCellPositions = [];\n\n // // reset proxy row config\n // this.scenegraph.proxy.refreshRowCount();\n // }\n\n const { updateCells, addCells, removeCells } = fixUpdateRowRange(diffPositions, col, row, this);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n // diffPositions.removeCellPositions,\n // diffPositions.addCellPositions,\n removeCells,\n addCells,\n updateCells,\n recalculateColWidths,\n true\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n\n _hasHierarchyTreeHeader() {\n return (this.options.columns ?? this.options.header)?.some((column, i) => column.tree);\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const result: DropDownMenuEventInfo = {\n field: this.getHeaderField(col, row),\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n event: undefined\n };\n return result;\n }\n _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): SortState['orderFn'] | undefined {\n if (!columns) {\n columns = this.internalProps.columns;\n }\n if (field && columns && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const header = columns[i];\n if (\n ((fieldKey && fieldKey === header.fieldKey) || (!fieldKey && header.field === field)) &&\n header.sort &&\n typeof header.sort === 'function'\n ) {\n return header.sort;\n } else if (header.columns) {\n const sort = this._getSortFuncFromHeaderOption(header.columns, field, fieldKey);\n if (sort) {\n return sort;\n }\n }\n }\n }\n return undefined;\n }\n /**\n * 更新排序状态\n * @param sortState 要设置的排序状态\n * @param executeSort 是否执行内部排序逻辑,设置false将只更新图标状态\n */\n updateSortState(sortState: SortState[] | SortState | null, executeSort: boolean = true) {\n if (!sortState) {\n // 解除排序状态\n if (this.internalProps.sortState) {\n if (Array.isArray(this.internalProps.sortState)) {\n for (let i = 0; i < (this.internalProps.sortState).length; i++) {\n sortState = this.internalProps.sortState?.[i];\n sortState && (sortState.order = 'normal');\n }\n } else {\n (this.internalProps.sortState).order = 'normal';\n sortState = this.internalProps.sortState;\n }\n }\n } else {\n this.internalProps.sortState = sortState;\n // 这里的sortState需要有field属性\n // this.stateManager.setSortState(sortState as SortState);\n }\n\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState.some((item: any) => item.field) && executeSort) {\n if (this.internalProps.layoutMap.headerObjects.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(this.internalProps.columns, item.field);\n const hd = this.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order,\n orderFn: sortFunc\n };\n })\n );\n\n // clear cell range cache\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.sortCell();\n }\n }\n if (sortState.length) {\n this.stateManager.updateSortState(sortState);\n }\n }\n updateFilterRules(filterRules: FilterRules) {\n this.scenegraph.clearCells();\n if (this.sortState) {\n this.dataSource.updateFilterRulesForSorted(filterRules);\n sortRecords(this);\n } else {\n this.dataSource.updateFilterRules(filterRules);\n }\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n this.scenegraph.createSceneGraph();\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getCheckboxState(field?: string | number) {\n if (this.stateManager.checkedState.size < this.rowCount - this.columnHeaderLevelCount) {\n this.stateManager.initLeftRecordsCheckState(this.records);\n }\n if (isValid(field)) {\n let stateArr = this.stateManager.checkedState.values() as any;\n if (this.options.groupBy) {\n stateArr = getGroupCheckboxState(this) as any;\n }\n return stateArr.map((state: any) => {\n return state[field];\n });\n }\n return new Array(...this.stateManager.checkedState.values());\n }\n /** 获取某个单元格checkbox的状态 */\n getCellCheckboxState(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = this.getCellType(col, row);\n if (isValid(field) && cellType === 'checkbox') {\n const dataIndex = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row)).toString();\n return this.stateManager.checkedState.get(dataIndex)?.[field as string | number];\n }\n return undefined;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getRadioState(field?: string | number) {\n if (isValid(field)) {\n return this.stateManager.radioState[field];\n }\n return this.stateManager.radioState;\n }\n /** 获取某个单元格checkbox的状态 */\n getCellRadioState(col: number, row: number): boolean | number {\n return getCellRadioState(col, row, this);\n }\n\n setCellCheckboxState(col: number, row: number, checked: boolean | 'indeterminate') {\n setCellCheckboxState(col, row, checked, this);\n }\n\n setCellRadioState(col: number, row: number, index?: number) {\n setCellRadioState(col, row, index, this);\n }\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param option 附近参数,其中的sortState为排序状态,如果设置null 将清除目前的排序状态\n */\n setRecords(records: Array, option?: { sortState?: SortState | SortState[] | null }): void {\n // 释放事件 及 对象\n this.internalProps.dataSource?.release();\n // 过滤掉dataSource的引用\n this.internalProps.releaseList = this.internalProps.releaseList?.filter((item: any) => !item.dataSourceObj);\n this.internalProps.dataSource = null;\n let sort: SortState | SortState[];\n if (Array.isArray(option) || (option as any)?.order) {\n //兼容之前第二个参数为sort的情况\n sort = option;\n } else if (option) {\n sort = option.sortState;\n } else if (option === null) {\n //兼容之前第二个参数为null来清除sort排序状态的逻辑\n sort = null;\n }\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n // 清空单元格内容\n this.scenegraph.clearCells();\n\n //重复逻辑抽取updateWidthHeight\n if (sort !== undefined) {\n if (sort === null || (!Array.isArray(sort) && isValid(sort.field)) || Array.isArray(sort)) {\n this.internalProps.sortState = this.internalProps.multipleSort ? (Array.isArray(sort) ? sort : [sort]) : sort;\n this.stateManager.setSortState((this as any).sortState as SortState);\n }\n }\n if (records) {\n _setRecords(this, records);\n if ((this as any).sortState) {\n const sortState = Array.isArray((this as any).sortState) ? (this as any).sortState : [(this as any).sortState];\n\n // 根据sort规则进行排序\n if (sortState.some((item: any) => item.order && item.field && item.order !== 'normal')) {\n // hd?.define?.sort && //如果这里也判断 那想要利用sortState来排序 但不显示排序图标就实现不了\n if (this.internalProps.layoutMap.headerObjectsIncludeHided.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(undefined, item.field);\n // 如果sort传入的信息不能生成正确的sortFunc,直接更新表格,避免首次加载无法正常显示内容\n const hd = this.internalProps.layoutMap.headerObjectsIncludeHided.find(\n (col: any) => col && col.field === item.field\n );\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n }\n }\n }\n this.refreshRowColCount();\n } else {\n _setRecords(this, records);\n }\n\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n this.render();\n if (isValid(oldHoverState.col) && isValid(oldHoverState.row) && oldHoverState.col >= 0 && oldHoverState.row >= 0) {\n setTimeout(() => {\n this.internalProps?.tooltipHandler.showTooltip(oldHoverState.col, oldHoverState.row);\n }, 0);\n }\n console.log('setRecords cost time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n }\n /**\n * 基本表格树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param records 设置到单元格其子节点的数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n setRecordChildren(records: any[], col: number, row: number, recalculateColWidths: boolean = true) {\n const record = this.getCellOriginRecord(col, row);\n record.children = records;\n const index = this.getRecordShowIndexByCell(col, row);\n this.dataSource.setRecord(record, index);\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n\n /**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n */\n changeCellValue(col: number, row: number, value: string | number | null, workOnEditableCell = false) {\n return listTableChangeCellValue(col, row, value, workOnEditableCell, this);\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: (string | number)[][], workOnEditableCell = false) {\n return listTableChangeCellValues(startCol, startRow, values, workOnEditableCell, this);\n }\n /**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecord(record: any, recordIndex?: number) {\n listTableAddRecord(record, recordIndex, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecords(records: any[], recordIndex?: number) {\n listTableAddRecords(records, recordIndex, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n deleteRecords(recordIndexs: number[]) {\n listTableDeleteRecords(recordIndexs, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n\n /**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n updateRecords(records: any[], recordIndexs: number[]) {\n listTableUpdateRecords(records, recordIndexs, this);\n }\n\n _hasCustomRenderOrLayout() {\n const { headerObjects } = this.internalProps.layoutMap;\n if (this.options.customRender) {\n return true;\n }\n\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (\n headerObject?.define?.customLayout ||\n headerObject?.define?.headerCustomLayout ||\n headerObject?.define?.customRender ||\n headerObject?.define?.headerCustomRender\n ) {\n return true;\n }\n }\n return false;\n }\n /**\n * 根据字段获取聚合值\n * @param field 字段名\n * 返回数组,包括列号和每一列的聚合值数组\n */\n getAggregateValuesByField(field: string | number): {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] {\n const columns = this.internalProps.layoutMap.getColumnByField(field);\n const results: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] = [];\n for (let i = 0; i < columns.length; i++) {\n const aggregator = columns[i].columnDefine.aggregator;\n delete columns[i].columnDefine;\n if (aggregator) {\n const columnAggregateValue: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n } = {\n col: columns[i].col,\n aggregateValue: null\n };\n columnAggregateValue.aggregateValue = [];\n if (Array.isArray(aggregator)) {\n for (let j = 0; j < aggregator.length; j++) {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator[j].type as AggregationType,\n value: aggregator[j].value()\n });\n }\n } else {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator.type as AggregationType,\n value: aggregator.value()\n });\n }\n\n results.push(columnAggregateValue);\n }\n }\n return results;\n }\n /** 是否为聚合值单元格 */\n isAggregation(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isAggregation(col, row);\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n if (!(this.options as ListTableConstructorOptions).groupBy) {\n return undefined;\n }\n const indexArr = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row));\n const groupLength = (this.dataSource as CachedDataSource).getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = undefined;\n }\n return indexArrLngth;\n }\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex(index: number | number[]): number {\n if (Array.isArray(index) && index.length === 1) {\n index = index[0];\n }\n return this.dataSource.getTableIndex(index);\n }\n}\n","import type { IOrientType } from '../../ts-types/component/util';\n\nexport function isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nexport function isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n","import { BandScale } from '@visactor/vscale';\nimport { isArray } from '@visactor/vutils';\n\nexport class BandAxisScale {\n _scale: BandScale;\n _scales: BandScale[];\n bandPadding?: number | number[];\n paddingInner?: number | number[];\n paddingOuter?: number | number[];\n\n constructor() {\n this._scale = new BandScale();\n this._scales = [this._scale];\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n calcScales(defalutBandInnerPadding: number, defalutBandOuterPadding: number) {\n const { bandPadding, paddingInner, paddingOuter } = this;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? defalutBandInnerPadding, true)\n .paddingOuter(_paddingOuter ?? _padding ?? defalutBandOuterPadding);\n }\n }\n\n dataToPosition(values: any[], cfg: any = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n\n return position + bandScale.bandwidth() * (cfg.bandPosition ?? 0.5);\n }\n\n updateScaleDomain(domain: (number | string)[]) {\n for (let i = 0; i < this._scales.length; i++) {\n this._scales[i].domain(domain);\n }\n // this.transformScaleDomain();\n }\n\n updateRange(newRange: [number, number]) {\n const [start, end] = this._scale.range();\n if (newRange[0] !== start || newRange[1] !== end) {\n this._scale.range(newRange);\n }\n }\n}\n","import type { DataSet, Parser, Transform } from '@visactor/vdataset';\n\nexport function registerDataSetInstanceTransform(dataSet: DataSet, name: string, transform: Transform) {\n if (!dataSet.getTransform(name)) {\n dataSet.registerTransform(name, transform);\n }\n}\n\nexport function registerDataSetInstanceParser(dataSet: DataSet, name: string, parse: Parser) {\n if (!dataSet.getParser(name)) {\n dataSet.registerParser(name, parse);\n }\n}\n","import type { BandScale, ContinuousScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport { continuousTicks } from './continuous';\nimport { linearDiscreteTicks } from './discrete/linear';\nimport { polarAngleAxisDiscreteTicks } from './discrete/polar-angle';\nimport type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from '../type';\nimport { convertDomainToTickData } from './util';\n\n// 总入口\nexport const ticks = (scale: IBaseScale, op: ITickDataOpt): ITickData[] => {\n if (isContinuous(scale.type)) {\n return continuousTicks(scale as ContinuousScale, op);\n } else if (isDiscrete(scale.type)) {\n if (op.coordinateType === 'cartesian') {\n return linearDiscreteTicks(scale as BandScale, op as ICartesianTickDataOpt);\n } else if (op.coordinateType === 'polar') {\n if (op.axisOrientType === 'angle') {\n return polarAngleAxisDiscreteTicks(scale as BandScale, op as IPolarTickDataOpt);\n }\n }\n }\n return convertDomainToTickData(scale.domain());\n};\n","import { LinearScale, LogScale, SymlogScale } from '@visactor/vscale';\nimport { isNil, isValid, maxInArray, minInArray } from '@visactor/vutils';\n\nconst e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\n\ntype IRange = { max?: number; min?: number };\nexport class LinearAxisScale {\n protected _extend: { [key: string]: number } = {};\n _scale: LinearScale | LogScale | SymlogScale;\n _scales: (LinearScale | LogScale | SymlogScale)[];\n nice: boolean;\n zero: boolean;\n domain: Required;\n expand?: IRange;\n forceTickCount?: number;\n tickCount?: number;\n niceType?: 'tickCountFirst' | 'accurateFirst';\n type?: 'linear' | 'time' | 'log' | 'symlog';\n\n constructor(type?: 'linear' | 'time' | 'log' | 'symlog') {\n this.type = type ?? 'linear';\n if (type === 'log') {\n this._scale = new LogScale();\n } else if (type === 'symlog') {\n this._scale = new SymlogScale();\n } else {\n this._scale = new LinearScale();\n }\n this._scales = [this._scale];\n }\n\n setExtraAttrFromSpec(\n nice: boolean,\n zero: boolean,\n range: Required,\n expand?: IRange,\n base?: number,\n constant?: number\n ) {\n // this.nice = nice;\n this.nice = false; // nice deal in getAxisDomainRangeAndLabels()\n this.zero = zero;\n // this.domain = range;\n if (this.zero) {\n range.min = Math.min(range.min, 0);\n range.max = Math.max(range.max, 0);\n }\n this.domain = range;\n this.expand = expand;\n\n if (this.type === 'log') {\n (this._scale as LogScale).base(base ?? 10);\n } else if (this.type === 'symlog') {\n (this._scale as SymlogScale).constant(constant ?? 10);\n }\n }\n\n transformScaleDomain() {\n if (this.type === 'symlog' || this.type === 'log') {\n // do nothing\n } else {\n this.setScaleNice();\n }\n }\n\n setScaleNice() {\n if (this.type === 'log') {\n this.setLogScaleNice();\n } else {\n this.setLinearScaleNice();\n }\n }\n\n setLogScaleNice() {\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.nice();\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.niceMax();\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this.nice && this._scale.niceMin();\n }\n }\n\n setLinearScaleNice() {\n let tickCount = this.forceTickCount ?? this.tickCount ?? 10;\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (this.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.nice(tickCount);\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this.nice && this._scale.niceMax(tickCount);\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this.nice && this._scale.niceMin(tickCount);\n } else {\n this.nice && this._scale.nice(tickCount);\n }\n }\n dataToPosition(values: any[]): number {\n return this.valueToPosition(values[0]);\n }\n\n valueToPosition(value: any): number {\n return this._scale.scale(value);\n }\n\n computeLinearDomain(data: { min: number; max: number }[]): number[] {\n const domain: number[] = [];\n data.forEach(d => {\n const { min, max } = d;\n domain[0] = domain[0] === undefined ? min : Math.min(domain[0] as number, min as number);\n domain[1] = domain[1] === undefined ? max : Math.max(domain[1] as number, max as number);\n });\n this.expandDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n return domain;\n }\n\n protected expandDomain(domain: number[]): void {\n if (!this.expand) {\n return;\n }\n const domainMin = domain[0];\n const domainMax = domain[domain.length - 1];\n if (isValid(this.expand.min)) {\n domain[0] = domainMin - (domainMax - domainMin) * this.expand.min;\n }\n if (isValid(this.expand.max)) {\n domain[domain.length - 1] = domainMax + (domainMax - domainMin) * this.expand.max;\n }\n }\n\n protected niceDomain(domain: number[]) {\n if (isValid(domain[0]) || isValid(domain[1]) || this.type !== 'linear') {\n // 如果用户设置了 min 或者 max 则按照用户设置的为准\n // 如果是非 linear 类型也不处理\n return domain;\n }\n if (Math.abs(minInArray(domain) - maxInArray(domain)) <= 1e-12) {\n let num: number = domain[0];\n const flag = num >= 0 ? 1 : -1;\n num = Math.abs(num);\n if (num < 1) {\n domain[0] = 0;\n domain[1] = 1; // 在[0, 1) 区间变成[0, 1]\n } else {\n let step = num / 5; // 默认5个ticks\n const power = Math.floor(Math.log(step) / Math.LN10);\n const err = step / Math.pow(10, power);\n step = (err >= e10 ? 10 : err >= e5 ? 5 : err >= e2 ? 2 : 1) * Math.pow(10, power);\n\n domain[0] = 0;\n domain[1] = step * 10;\n }\n if (flag < 0) {\n domain.reverse();\n domain[0] *= -1;\n domain[1] *= -1;\n }\n }\n return domain;\n }\n\n protected niceMinMax() {\n if (this.nice) {\n let tickCount = this.forceTickCount ?? this.tickCount ?? 10;\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (this.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n if (isNil(this.domain?.min) && isNil(this.domain?.max)) {\n this._scale.nice(tickCount);\n } else if (isValid(this.domain?.min) && isNil(this.domain?.max)) {\n this._scale.niceMax(tickCount);\n } else if (isNil(this.domain?.min) && isValid(this.domain?.max)) {\n this._scale.niceMin(tickCount);\n } else {\n this._scale.nice(tickCount);\n }\n }\n }\n\n protected includeZero(domain: number[]): void {\n if (this.zero) {\n domain[0] = Math.min(domain[0], 0);\n domain[domain.length - 1] = Math.max(domain[domain.length - 1], 0);\n }\n }\n\n // 用户其他模块扩充轴scale的区间\n setExtendDomain(key: string, value: number | undefined) {\n if (value === undefined) {\n delete this._extend[key];\n return;\n }\n this._extend[key] = value;\n const domain = this._scale.domain();\n this.extendDomain(domain);\n this.includeZero(domain);\n this.setDomainMinMax(domain);\n this.niceDomain(domain);\n this._scale.domain(domain, this.nice);\n this.niceMinMax();\n\n // this.event.emit(ChartEvent.scaleUpdate, { model: this as any });\n }\n\n protected extendDomain(domain: number[]) {\n let temp;\n const domainLast = domain.length - 1;\n const reverse = domain[0] - domain[domainLast] > 0;\n const min = reverse ? domainLast : 0;\n const max = reverse ? 0 : domainLast;\n for (const key in this._extend) {\n temp = this._extend[key];\n temp > domain[max] && (domain[max] = temp);\n temp < domain[min] && (domain[min] = temp);\n }\n }\n\n protected setDomainMinMax(domain: number[]): void {\n if (!this.domain) {\n return;\n }\n const { min, max } = this.domain;\n isValid(min) && (domain[0] = min);\n isValid(max) && (domain[1] = max);\n }\n\n setZero(zero: boolean) {\n if (this.zero !== zero) {\n this.zero = zero;\n this.updateScaleDomain();\n }\n }\n /**\n * @override\n * TODO event.emit是否可以考虑用decorator\n */\n updateScaleDomain() {\n const domain: number[] = this.computeDomain([this.domain]) as number[];\n this.updateScaleDomainByModel(domain);\n }\n\n computeDomain(data: { min: number; max: number }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n /**\n * TODO event.emit是否可以考虑用decorator\n * 数据逻辑外,模块的设置更新对scale-domain的修改操作\n */\n protected updateScaleDomainByModel(domain?: number[]) {\n domain = domain ?? this._scale.domain();\n // 其他模块的设置 domain\n this.extendDomain(domain);\n this.includeZero(domain);\n // 用户 spec 的 min-max\n this.setDomainMinMax(domain);\n // nice 优先级最高\n this.niceDomain(domain);\n this._scale.domain(domain, this.nice);\n // 设置scale的nice-min-max\n this.niceMinMax();\n\n // this.event.emit(ChartEvent.scaleUpdate, { model: this as any });\n }\n\n updateRange(newRange: [number, number]) {\n const [start, end] = this._scale.range();\n if (newRange[0] !== start || newRange[1] !== end) {\n this._scale.range(newRange);\n }\n }\n}\n","import type { IGroup, INode, IText } from './../../vrender';\nimport type { LineAxis } from '@visactor/vrender-components';\nimport type { CartesianAxis } from './axis';\nimport { isXAxis } from '../util/orient';\nimport { isEmpty, last as peek } from '@visactor/vutils';\n\nexport function doOverlap(axisComponent: LineAxis, axis: CartesianAxis) {\n const layer0LabelsContainer = axisComponent.find(\n (node: INode) => node.name === 'axis-label-container-layer-0',\n true\n ) as IGroup;\n const layer1LabelsContainer = axisComponent.find(\n (node: INode) => node.name === 'axis-label-container-layer-1',\n true\n ) as IGroup;\n overlap(layer0LabelsContainer ? (layer0LabelsContainer.getChildren() as IText[]) : [], axis);\n overlap(layer1LabelsContainer ? (layer1LabelsContainer.getChildren() as IText[]) : [], axis);\n}\n\nfunction labelFlush(axisLabels: IText[], axis: CartesianAxis) {\n const { width, height } = axis.getLayoutRect();\n const isX = isXAxis(axis.orient);\n const isInverse = (axis.option as any).inverse === true;\n const first = axisLabels[0];\n const last = peek(axisLabels);\n\n if (isX) {\n if (isInverse) {\n const start = width;\n const end = 0;\n const startBound = first.AABBBounds.x2;\n const endBound = last.AABBBounds.x1;\n\n if (startBound > start) {\n first.setAttributes({\n x: start,\n textAlign: 'right'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n x: end,\n textAlign: 'left'\n });\n }\n } else {\n const start = 0;\n const end = width;\n const startBound = first.AABBBounds.x1;\n const endBound = last.AABBBounds.x2;\n if (startBound < start) {\n first.setAttributes({\n x: start,\n textAlign: 'left'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n x: end,\n textAlign: 'right'\n });\n }\n }\n } else {\n if (isInverse) {\n const startBound = first.AABBBounds.y1;\n const endBound = last.AABBBounds.y2;\n const start = 0;\n const end = height;\n\n if (startBound < start) {\n first.setAttributes({\n y: start,\n textBaseline: 'top'\n });\n }\n\n if (endBound > end) {\n last.setAttributes({\n y: end,\n textBaseline: 'bottom'\n });\n }\n } else {\n const start = height;\n const end = 0;\n const startBound = first.AABBBounds.y2;\n const endBound = last.AABBBounds.y1;\n\n if (startBound > start) {\n first.setAttributes({\n y: start,\n textBaseline: 'bottom'\n });\n }\n\n if (endBound < end) {\n last.setAttributes({\n y: end,\n textBaseline: 'top'\n });\n }\n }\n }\n}\n\nfunction overlap(axisLabels: IText[], axis: CartesianAxis) {\n const spec = axis.option;\n if (!isEmpty(axisLabels)) {\n // 首尾标签向内偏移\n if (spec?.label?.flush) {\n labelFlush(axisLabels, axis);\n }\n }\n}\n","import { degreeToRadian, isNil, isValidNumber, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\nimport { LineAxis, type LineAxisAttributes } from '@visactor/vrender-components';\nimport { getAxisAttributes, getCommonAxis } from './get-axis-attributes';\nimport { isXAxis, isYAxis } from '../util/orient';\nimport type { IOrientType } from '../../ts-types/component/util';\nimport { BandAxisScale } from './band-scale';\nimport { registerDataSetInstanceParser, registerDataSetInstanceTransform } from '../util/register';\nimport type { Parser } from '@visactor/vdataset';\nimport { DataSet, DataView } from '@visactor/vdataset';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { ticks } from './../../vrender';\nimport { LinearAxisScale } from './linear-scale';\nimport { doOverlap } from './label-overlap';\nimport type { TableTheme } from '../../themes/theme';\n\nconst DEFAULT_BAND_INNER_PADDING = 0.1;\nconst DEFAULT_BAND_OUTER_PADDING = 0.3;\nconst scaleParser: Parser = (scale: IBaseScale) => {\n return scale;\n};\n\nexport interface ICartesianAxis {\n new (\n option: ICellAxisOption,\n width: number,\n height: number,\n padding: [number, number, number, number],\n table: BaseTableAPI\n ): CartesianAxis;\n}\n\nexport class CartesianAxis {\n width: number;\n height: number;\n x: number = 0;\n y: number = 0;\n table: BaseTableAPI;\n option: ICellAxisOption;\n orient: IOrientType;\n visible: boolean;\n type: 'linear' | 'band' | 'point' | 'time' | 'log' | 'symlog';\n inverse: boolean;\n data?: any[];\n tickData: DataView;\n scale: BandAxisScale | LinearAxisScale;\n component: LineAxis;\n padding: [number, number, number, number];\n\n constructor(\n option: ICellAxisOption,\n width: number,\n height: number,\n padding: [number, number, number, number],\n table: BaseTableAPI\n ) {\n this.padding = padding;\n this.table = table;\n this.orient = option.orient ?? 'left';\n this.type = option.type ?? 'band';\n this.option = merge(\n {},\n // commonAxis,\n getCommonAxis(option.__vtableChartTheme),\n getTableAxisTheme(this.orient, table.theme),\n getChartSpecAxisTheme(this.orient, this.type, option.__vtableChartTheme),\n option\n );\n\n if (this.orient === 'left' || this.orient === 'right') {\n // const innerOffsetTop = this.option.innerOffset?.top ?? 0;\n // const innerOffsetBottom = this.option.innerOffset?.bottom ?? 0;\n const innerOffsetTop = 0;\n const innerOffsetBottom = 0;\n this.width = width;\n this.height = height - padding[0] - padding[2] - innerOffsetBottom;\n this.y = padding[0] + innerOffsetTop;\n } else if (this.orient === 'top' || this.orient === 'bottom') {\n // const innerOffsetLeft = this.option.innerOffset?.left ?? 0;\n // const innerOffsetRight = this.option.innerOffset?.right ?? 0;\n const innerOffsetLeft = 0;\n const innerOffsetRight = 0;\n this.width = width - padding[1] - padding[3] - innerOffsetRight;\n this.height = height;\n this.x = padding[3] + innerOffsetLeft;\n }\n\n this.visible = option.visible ?? true;\n this.inverse = 'inverse' in option ? !!option.inverse : false;\n if (option.type === 'band') {\n this.data = option.domain;\n }\n\n this.initScale();\n this.initData();\n this.createComponent();\n this.initEvent();\n }\n\n initScale() {\n const option = this.option as any;\n if (this.type === 'band' || this.type === 'point') {\n this.scale = new BandAxisScale();\n this.scale.bandPadding = option.bandPadding;\n this.scale.paddingInner = option.paddingInner;\n this.scale.paddingOuter = option.paddingOuter;\n this.scale.calcScales(DEFAULT_BAND_INNER_PADDING, DEFAULT_BAND_OUTER_PADDING); // 0.1 0.3\n this.scale.updateScaleDomain(this.data);\n this.updateScaleRange();\n } else if (this.type === 'linear' || this.type === 'time' || this.type === 'log' || this.type === 'symlog') {\n this.scale = new LinearAxisScale(this.type);\n this.scale.setExtraAttrFromSpec(\n option.nice,\n option.zero,\n option.range,\n option.expand,\n option.base,\n option.constant\n );\n this.scale.transformScaleDomain();\n this.scale.updateScaleDomain();\n this.updateScaleRange();\n }\n }\n\n initData() {\n if (!this.table._vDataSet) {\n this.table._vDataSet = new DataSet();\n }\n\n registerDataSetInstanceParser(this.table._vDataSet, 'scale', scaleParser);\n registerDataSetInstanceTransform(this.table._vDataSet, 'ticks', ticks);\n\n const label = this.option.label || {};\n const tick = this.option.tick || {};\n\n const tickData = new DataView(this.table._vDataSet)\n .parse(this.scale._scale, {\n type: 'scale'\n })\n .transform(\n {\n type: 'ticks',\n options: {\n sampling: this.option.sampling !== false, // default do sampling\n tickCount: tick.tickCount,\n forceTickCount: tick.forceTickCount,\n tickStep: tick.tickStep,\n tickMode: tick.tickMode,\n noDecimals: tick.noDecimals,\n\n axisOrientType: this.orient,\n coordinateType: 'cartesian',\n\n labelStyle: label.style,\n labelFormatter: label.formatMethod,\n labelGap: label.minGap,\n\n labelLastVisible: label.lastVisible,\n labelFlush: label.flush\n }\n },\n false\n );\n this.tickData = tickData;\n\n this.computeData();\n }\n\n computeData(): void {\n this.tickData.reRunAllTransform();\n }\n\n initEvent() {\n // to be added\n }\n\n createComponent() {\n const axisStylrAttrs = getAxisAttributes(this.option);\n const attrs = this.getUpdateAttribute();\n attrs.verticalFactor = this.orient === 'top' || this.orient === 'right' ? -1 : 1;\n this.component = new LineAxis(\n merge(\n {\n disableTriggerEvent: this.table.options.disableInteraction\n },\n axisStylrAttrs,\n attrs\n )\n );\n this.component.setAttributes(this.setLayoutStartPosition({ x: this.x, y: this.y }));\n (this.component as any).originAxis = this;\n }\n\n resize(width: number, height: number) {\n this.width = width - (this.orient === 'top' || this.orient === 'bottom' ? this.padding[1] + this.padding[3] : 0);\n this.height = height - (this.orient === 'left' || this.orient === 'right' ? this.padding[2] + this.padding[0] : 0);\n this.updateScaleRange();\n this.computeData();\n const axisStylrAttrs = getAxisAttributes(this.option);\n const attrs = this.getUpdateAttribute();\n attrs.verticalFactor = this.orient === 'top' || this.orient === 'right' ? -1 : 1;\n this.component.setAttributes(merge({}, axisStylrAttrs, attrs));\n this.component.setAttributes(this.setLayoutStartPosition({ x: this.x, y: this.y }));\n this.overlap();\n }\n\n overlap() {\n doOverlap(this.component, this);\n }\n\n getLayoutRect() {\n // const padding = getQuadProps(this.table.theme.bodyStyle.padding as number);\n return {\n // width: this.width - (this.orient === 'top' || this.orient === 'bottom' ? padding[3] + padding[1] : 0),\n // height: this.height - (this.orient === 'left' || this.orient === 'right' ? padding[0] + padding[2] : 0)\n width: this.width,\n height: this.height\n };\n }\n\n getUpdateAttribute() {\n // 获取更新的坐标轴属性\n const regionHeight = this.table.tableNoFrameHeight;\n const regionWidth = this.table.tableNoFrameWidth;\n\n const { width, height } = this.getLayoutRect();\n const isX = isXAxis(this.orient);\n const isY = isYAxis(this.orient);\n let end = { x: 0, y: 0 };\n let gridLength = 0;\n let axisLength = 0;\n if (isX) {\n end = { x: width, y: 0 };\n gridLength = regionHeight;\n axisLength = width;\n } else if (isY) {\n end = { x: 0, y: height };\n gridLength = regionWidth;\n axisLength = height;\n }\n const size = this.orient === 'top' || this.orient === 'bottom' ? height : width;\n const attrs: LineAxisAttributes = {\n // start: { x: this.x, y: this.y },\n // x: this.x,\n // y: this.y,\n start: { x: 0, y: 0 },\n end,\n // grid: {\n // type: 'line',\n // length: gridLength,\n // visible: this.option.grid.visible\n // },\n title: {\n text: this.option.title.text as string,\n maxWidth: this._getTitleLimit(isX)\n },\n items: this.getLabelItems(axisLength),\n verticalLimitSize: size,\n verticalMinSize: size\n };\n return attrs;\n }\n\n getLabelItems(length: number) {\n return [\n this.tickData.latestData\n .map((obj: any) => {\n return {\n id: obj.value,\n label: obj.value,\n value: length === 0 ? 0 : this.scale.dataToPosition([obj.value]) / length,\n rawValue: obj.value\n };\n })\n .filter((entry: any) => entry.value >= 0 && entry.value <= 1)\n ];\n }\n\n updateScaleRange() {\n const right = this.option.innerOffset?.right ?? 0;\n const left = this.option.innerOffset?.left ?? 0;\n const top = this.option.innerOffset?.top ?? 0;\n const bottom = this.option.innerOffset?.bottom ?? 0;\n\n const { width, height } = this.getLayoutRect();\n const inverse = (this.option as any).inverse || false;\n let newRange: [number, number] = [0, 0];\n if (isXAxis(this.orient)) {\n if (isValidNumber(width)) {\n // newRange = inverse ? [width, 0] : [0, width];\n newRange = inverse ? [width - right, left] : [left, width - right];\n }\n } else {\n if (isValidNumber(height)) {\n // newRange = inverse ? [0, height] : [height, 0];\n newRange = inverse ? [top, height - bottom] : [height - bottom, top];\n }\n }\n\n this.scale.updateRange(newRange);\n }\n\n setLayoutStartPosition(pos: any) {\n let { x, y } = pos;\n\n if (isValidNumber(x)) {\n x += Number(this.orient === 'left') * this.getLayoutRect().width;\n }\n if (isValidNumber(y)) {\n y += Number(this.orient === 'top') * this.getLayoutRect().height;\n }\n\n return { x, y };\n // super.setLayoutStartPosition({ x, y });\n }\n\n private _getTitleLimit(isX: boolean) {\n if (this.option.title.visible && isNil(this.option.title.style?.maxLineWidth)) {\n let angle = this.option.title.style?.angle || 0;\n if (this.option.title?.autoRotate && isNil(this.option.title.angle)) {\n angle = this.option.orient === 'left' ? -90 : 90;\n }\n if (isX) {\n const width = this.getLayoutRect().width;\n const cosValue = Math.abs(Math.cos(degreeToRadian(angle)));\n // VRender 接收到的limit是考虑角度计算后的宽度\n // TODO:还需要考虑angle后,高度是否太高,综合计算一个limit,比如高度不能超过图表整体高度的1/4\n return cosValue < 1e-6 ? Infinity : width / cosValue;\n }\n const height = this.getLayoutRect().height;\n const sinValue = Math.abs(Math.sin(degreeToRadian(angle)));\n\n // TODO:还需要考虑angle后,宽度是否太宽,综合计算一个limit,比如宽度度不能超过图表整体宽度的1/4\n return sinValue < 1e-6 ? Infinity : height / sinValue;\n }\n\n return null;\n }\n\n getScale() {\n return this.scale._scale;\n }\n\n getDomainSpec() {\n return (this.scale as LinearAxisScale).domain;\n }\n}\n\nfunction getTableAxisTheme(orient: IOrientType, theme: TableTheme) {\n let directionStyle;\n if (orient === 'left') {\n directionStyle = theme.axisStyle.leftAxisStyle;\n } else if (orient === 'right') {\n directionStyle = theme.axisStyle.rightAxisStyle;\n } else if (orient === 'top') {\n directionStyle = theme.axisStyle.topAxisStyle;\n } else if (orient === 'bottom') {\n directionStyle = theme.axisStyle.bottomAxisStyle;\n }\n return merge({}, theme.axisStyle.defaultAxisStyle, directionStyle);\n}\n\nfunction getChartSpecAxisTheme(\n orient: IOrientType,\n type: 'linear' | 'band' | 'point' | 'time' | 'log' | 'symlog',\n chartSpecTheme?: any\n) {\n if (!chartSpecTheme) {\n return {};\n }\n const axisTheme = chartSpecTheme.axis;\n let axisTypeTheme;\n if (type === 'linear' || type === 'log' || type === 'symlog') {\n axisTypeTheme = chartSpecTheme.axisLinear;\n } else if (type === 'band') {\n axisTypeTheme = chartSpecTheme.axisBand;\n }\n\n let axisOrientTheme;\n if (orient === 'top' || orient === 'bottom') {\n axisOrientTheme = chartSpecTheme.axisX;\n } else if (orient === 'left' || orient === 'right') {\n axisOrientTheme = chartSpecTheme.axisY;\n }\n return merge({}, axisTheme, axisTypeTheme, axisOrientTheme);\n}\n","import { isArray, isFunction, isString, merge } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { ICellAxisOption } from '../../ts-types/component/axis';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE, commonAxis } from './get-axis-attributes';\n\nexport type ComputeAxisComponentWidth = (config: ICellAxisOption, table: BaseTableAPI) => number;\nexport type ComputeAxisComponentHeight = (config: ICellAxisOption, table: BaseTableAPI) => number;\n/**\n * @description: compuational vertical axis width\n * @param {ICellAxisOption} config\n * @return {*}\n */\nexport function computeAxisComponentWidth(config: ICellAxisOption, table: BaseTableAPI) {\n const attribute = merge({}, commonAxis, config);\n // tick\n let tickWidth = 0;\n if (attribute.tick.visible !== false) {\n tickWidth = attribute.tick.width ?? 4;\n }\n\n // text\n let labelWidth = 0;\n if (attribute.label.visible) {\n if (attribute.type === 'band') {\n const domain = attribute.domain;\n domain.forEach((text: string) => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angel =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelWidth = Math.max(labelWidth, getSizeAfterResize(Math.min(width, widthLimit), height, angel).width);\n });\n } else {\n let ticks: string[];\n if (config.sync?.tickAlign && isFunction(config.tick?.tickMode)) {\n ticks = config.tick.tickMode();\n } else if (isArray((config as any).__ticksForVTable)) {\n ticks = (config as any).__ticksForVTable;\n } else {\n const range = attribute.range;\n const minNumber = Math.abs(range.min) > 1 ? Math.round(range.min) : range.min;\n const maxNumber = Math.abs(range.max) > 1 ? Math.round(range.max) : range.max;\n // abs>1取整保留两位有效数字,abs<1保留一位有效数字\n const minString = formatDecimal(minNumber);\n const maxString = formatDecimal(maxNumber);\n // 这里测量的是预估的最大最小range,与实际现实的label可能不同\n ticks = [minString, maxString];\n }\n ticks.forEach(text => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelWidth = Math.max(labelWidth, getSizeAfterResize(Math.min(width, widthLimit), height, angle).width);\n });\n }\n labelWidth += attribute.label.space ?? 4;\n }\n\n // title\n let titleWidth = 0;\n // align with vrender-component, use isString()\n if (attribute.title.visible && isString(attribute.title.text)) {\n const { width, height } = table.measureText(attribute.title.text, {\n fontSize: attribute.title?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.title?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.title?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const size = getSizeAfterResize(Math.min(width, widthLimit), height, attribute.title?.style?.angle);\n if ((config.orient === 'left' || config.orient === 'right') && attribute.title.autoRotate) {\n titleWidth = size.height;\n } else {\n titleWidth = size.width;\n }\n titleWidth += attribute.title.space ?? 4;\n }\n\n return tickWidth + labelWidth + titleWidth + 1; // 2 is buffer\n}\n\n/**\n * @description: compuational horizontal axis height\n * @param {ICellAxisOption} config\n * @return {*}\n */\nexport function computeAxisComponentHeight(config: ICellAxisOption, table: BaseTableAPI) {\n const attribute = merge({}, commonAxis, config);\n // tick\n let tickHeight = 0;\n if (attribute.tick.visible !== false) {\n tickHeight = attribute.tick.width ?? 4;\n }\n\n // text\n let labelHeight = 0;\n if (attribute.label.visible) {\n if (attribute.type === 'band') {\n const domain = attribute.domain;\n domain.forEach((text: string) => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelHeight = Math.max(labelHeight, getSizeAfterResize(Math.min(width, widthLimit), height, angle).height);\n });\n } else {\n let ticks: string[];\n if (config.sync?.tickAlign && isFunction(config.tick?.tickMode)) {\n ticks = config.tick.tickMode();\n } else if (isArray((config as any).__ticksForVTable)) {\n ticks = (config as any).__ticksForVTable;\n } else {\n const range = attribute.range;\n const minNumber = Math.abs(range.min) > 1 ? Math.round(range.min) : range.min;\n const maxNumber = Math.abs(range.max) > 1 ? Math.round(range.max) : range.max;\n // abs>1取整保留两位有效数字,abs<1保留一位有效数字\n const minString = formatDecimal(minNumber);\n const maxString = formatDecimal(maxNumber);\n // 这里测量的是预估的最大最小range,与实际现实的label可能不同\n ticks = [minString, maxString];\n }\n ticks.forEach(text => {\n if (attribute.label.formatMethod) {\n text = attribute.label.formatMethod(text);\n }\n const { width, height } = table.measureText(text, {\n fontSize: attribute.label?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.label?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.label?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const angle =\n (attribute.label?.style?.angle ?? 0) + (attribute.label?.style?.direction === 'vertical' ? 90 : 0);\n labelHeight = Math.max(labelHeight, getSizeAfterResize(Math.min(width, widthLimit), height, angle).height);\n });\n }\n labelHeight += attribute.label.space ?? 4;\n }\n\n // title\n let titleHeight = 0;\n if (attribute.title.visible && attribute.title.text) {\n const { width, height } = table.measureText(attribute.title.text, {\n fontSize: attribute.title?.style?.fontSize ?? DEFAULT_TEXT_FONT_SIZE,\n fontWeight: attribute.title?.style?.fontWeight ?? 'normal',\n fontFamily: attribute.title?.style?.fontFamily ?? DEFAULT_TEXT_FONT_FAMILY\n });\n const widthLimit = attribute.label?.style?.maxLineWidth || Infinity;\n const size = getSizeAfterResize(Math.min(width, widthLimit), height, attribute.title?.style?.angle);\n if ((config.orient === 'bottom' || config.orient === 'top') && attribute.title.autoRotate) {\n titleHeight = size.width;\n } else {\n titleHeight = size.height;\n }\n titleHeight += attribute.title.space ?? 4;\n }\n\n return tickHeight + labelHeight + titleHeight + 1; // 2 is buffer\n}\n\n// 保留一位有效数字\nfunction formatDecimal(number: number) {\n if (typeof number !== 'number') {\n number = Number(number);\n }\n\n return Number(number.toPrecision(1)).toString(); // 避免科学计数法\n}\n\n// 计算旋转后的size\nfunction getSizeAfterResize(width: number, height: number, angle = 0) {\n const theta = (angle * Math.PI) / 180; // 角度转为弧度\n const p1 = { x: -width / 2, y: -height / 2 };\n const p2 = { x: width / 2, y: -height / 2 };\n const p3 = { x: width / 2, y: height / 2 };\n const p4 = { x: -width / 2, y: height / 2 };\n\n const p1Rotated = {\n x: p1.x * Math.cos(theta) - p1.y * Math.sin(theta),\n y: p1.x * Math.sin(theta) + p1.y * Math.cos(theta)\n };\n const p2Rotated = {\n x: p2.x * Math.cos(theta) - p2.y * Math.sin(theta),\n y: p2.x * Math.sin(theta) + p2.y * Math.cos(theta)\n };\n const p3Rotated = {\n x: p3.x * Math.cos(theta) - p3.y * Math.sin(theta),\n y: p3.x * Math.sin(theta) + p3.y * Math.cos(theta)\n };\n const p4Rotated = {\n x: p4.x * Math.cos(theta) - p4.y * Math.sin(theta),\n y: p4.x * Math.sin(theta) + p4.y * Math.cos(theta)\n };\n\n const bounds = {\n minX: Math.min(p1Rotated.x, p2Rotated.x, p3Rotated.x, p4Rotated.x),\n maxX: Math.max(p1Rotated.x, p2Rotated.x, p3Rotated.x, p4Rotated.x),\n minY: Math.min(p1Rotated.y, p2Rotated.y, p3Rotated.y, p4Rotated.y),\n maxY: Math.max(p1Rotated.y, p2Rotated.y, p3Rotated.y, p4Rotated.y)\n };\n\n return {\n width: bounds.maxX - bounds.minX,\n height: bounds.maxY - bounds.minY\n };\n}\n","import { isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { EmptyTipAttributes } from './type';\nimport { Image, Rect, Text, graphicCreator } from '@visactor/vrender-core';\nimport type { ComponentOptions } from '../interface';\nimport { loadEmptyTipComponent } from './register';\n\nconst emptyTipSvg =\n '';\n\nloadEmptyTipComponent();\nexport class EmptyTip extends AbstractComponent> {\n static defaultAttributes: Partial = {\n spaceBetweenTextAndIcon: 20,\n text: {\n text: 'no data',\n fontSize: 14,\n fill: '#000',\n disableFill: 'rgb(201,205,212)',\n pickable: false\n },\n icon: {\n image: emptyTipSvg,\n width: 100,\n height: 100,\n pickable: false\n }\n };\n _text: Text;\n _emptyTipIcon: Image;\n constructor(attributes: EmptyTipAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, EmptyTip.defaultAttributes, attributes));\n }\n\n render() {\n this.removeAllChild(true);\n\n this.renderIcon();\n this.renderText();\n this.layout();\n }\n\n renderIcon() {\n this._emptyTipIcon = new Image(merge({ image: this.attribute.icon.image }, this.attribute.icon));\n this.appendChild(this._emptyTipIcon);\n }\n\n renderText() {\n this._text = new Text(merge({ wrap: true }, this.attribute.text));\n this.appendChild(this._text);\n }\n\n layout() {\n const iconHeight = this.attribute.icon.height;\n const textHeight = this._text.AABBBounds.height();\n\n const iconWidth = this.attribute.icon.width;\n\n const { width, height, spaceBetweenTextAndIcon } = this.attribute as EmptyTipAttributes;\n\n this._emptyTipIcon.setAttribute('x', width / 2 - iconWidth / 2);\n // this._emptyTipIcon.setAttribute('textAlign', 'center');\n\n this._emptyTipIcon.setAttribute('y', height / 2 - iconHeight / 2 - textHeight / 2 - spaceBetweenTextAndIcon / 2);\n // this._emptyTipIcon.setAttribute('textBaseline', 'middle');\n\n this._text.setAttribute('x', width / 2);\n this._text.setAttribute('textAlign', 'center');\n\n this._text.setAttribute('y', height / 2 + iconHeight / 2 + spaceBetweenTextAndIcon / 2);\n this._text.setAttribute('textBaseline', 'middle');\n }\n}\n","import { registerGroup, registerImage, registerRect, registerText } from '@visactor/vrender-kits';\n\nexport function loadEmptyTipComponent() {\n registerGroup();\n // registerRect();\n registerText();\n registerImage();\n}\n","import { EmptyTip as EmptyTipComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { EmptyTipAttributes } from '@visactor/vrender-components';\nimport type { IEmptyTip } from '../../ts-types/component/empty-tip';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isEqual } from '@visactor/vutils';\nimport type { ListTable } from '../../ListTable';\nimport type { PivotTable } from '../../PivotTable';\nimport type { BaseTable } from '../../core';\nconst emptyTipSvg =\n '';\n\nexport interface IEmptyTipComponent {\n new (emptyTipOption: IEmptyTip | true, table: BaseTableAPI): EmptyTip;\n}\n\nexport class EmptyTip {\n table: BaseTableAPI;\n _emptyTipOption: IEmptyTip = {\n spaceBetweenTextAndIcon: 20,\n text: 'no data',\n textStyle: {\n fontSize: 14,\n color: '#000'\n },\n icon: {\n image: emptyTipSvg,\n width: 100,\n height: 100\n }\n };\n isReleased: boolean = false;\n private _emptyTipComponent: EmptyTipComponents;\n private _cacheAttrs: EmptyTipAttributes;\n constructor(emptyTipOption: IEmptyTip | true, table: BaseTableAPI) {\n this.table = table;\n this._emptyTipOption = Object.assign(this._emptyTipOption, emptyTipOption === true ? {} : emptyTipOption);\n this._emptyTipComponent = this._createOrUpdateEmptyTipComponent(this._getEmptyTipAttrs());\n }\n\n private _createOrUpdateEmptyTipComponent(attrs: EmptyTipAttributes): EmptyTipComponents {\n if (this._emptyTipComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._emptyTipComponent.setAttributes(attrs);\n }\n } else {\n const emptyTip = new EmptyTipComponents(attrs);\n emptyTip.name = 'emptyTip';\n this.table.scenegraph.stage.defaultLayer.appendChild(emptyTip);\n this._emptyTipComponent = emptyTip;\n }\n // update table size\n // this._adjustTableSize(this._emptyTipComponent.attribute);\n return this._emptyTipComponent;\n }\n\n resize() {\n if (!this._emptyTipComponent) {\n return;\n }\n const leftHeaderWidth =\n (this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol === false\n ? this.table.getFrozenColsWidth()\n : 0;\n const topHeaderHeight =\n !(this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol\n ? this.table.getFrozenRowsHeight()\n : 0;\n const width =\n (this.table.columnHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().width\n : this.table.tableNoFrameWidth) -\n leftHeaderWidth -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n\n const height =\n (this.table.rowHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().height\n : this.table.tableNoFrameHeight) -\n topHeaderHeight -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n this._emptyTipComponent.setAttributes({\n spaceBetweenTextAndIcon: this._emptyTipOption.spaceBetweenTextAndIcon,\n x: this.table.tableX + leftHeaderWidth,\n y: this.table.tableY + topHeaderHeight,\n width,\n height,\n text: {\n text: this._emptyTipOption.text,\n ...this._emptyTipOption.textStyle,\n fill: this._emptyTipOption.textStyle?.color\n },\n icon: {\n ...this._emptyTipOption.icon\n }\n });\n }\n\n release(): void {\n this._emptyTipComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this._emptyTipComponent);\n this._emptyTipComponent = null;\n this.isReleased = true;\n }\n resetVisible() {\n if (\n ((!this.table.recordsCount || this.table.recordsCount === 0) &&\n this.table.internalProps.layoutMap.rowCount === this.table.internalProps.layoutMap.columnHeaderLevelCount) ||\n this.table.internalProps.layoutMap.colCount === this.table.internalProps.layoutMap.rowHeaderLevelCount\n ) {\n // this._emptyTipComponent.setAttributes({\n // visible: true\n // });\n // this._emptyTipComponent.showAll();\n if (!this.table.scenegraph.stage.defaultLayer.children.includes(this._emptyTipComponent)) {\n this.table.scenegraph.stage.defaultLayer.appendChild(this._emptyTipComponent);\n }\n } else {\n // this._emptyTipComponent.setAttributes({\n // visible: false\n // });\n // this._emptyTipComponent.hideAll();\n if (this.table.scenegraph.stage.defaultLayer.children.includes(this._emptyTipComponent)) {\n this.table.scenegraph.stage.defaultLayer.removeChild(this._emptyTipComponent);\n }\n }\n }\n\n private _getEmptyTipAttrs() {\n const leftHeaderWidth =\n (this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol === false\n ? this.table.getFrozenColsWidth()\n : 0;\n const topHeaderHeight =\n !(this.table as ListTable).transpose || (this.table as PivotTable).options.indicatorsAsCol\n ? this.table.getFrozenRowsHeight()\n : 0;\n const width =\n (this.table.columnHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().width\n : this.table.tableNoFrameWidth) -\n leftHeaderWidth -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n const height =\n (this.table.rowHeaderLevelCount > 0 && this.table.isListTable()\n ? this.table.getDrawRange().height\n : this.table.tableNoFrameHeight) -\n topHeaderHeight -\n (this.table as BaseTable).getTheme().scrollStyle.width;\n\n return {\n spaceBetweenTextAndIcon: this._emptyTipOption.spaceBetweenTextAndIcon,\n x: this.table.tableX + leftHeaderWidth,\n y: this.table.tableY + topHeaderHeight,\n width,\n height,\n text: {\n text: this._emptyTipOption.text,\n ...this._emptyTipOption.textStyle,\n fill: this._emptyTipOption.textStyle?.color\n },\n icon: {\n ...this._emptyTipOption.icon\n }\n // visible:this.table.recordsCount === 0?true:false\n } as EmptyTipAttributes;\n }\n}\n","import { isEmpty, isValid, merge } from '@visactor/vutils';\nimport type { IDiscreteTableLegendOption } from '../../../ts-types/component/legend';\nimport { isPercent } from '../../../tools/calc';\nimport { transformComponentStyle, transformLegendTitleAttributes, transformToGraphic } from '../../util/transform';\n\nconst defaultLegendSpec = {\n orient: 'bottom',\n position: 'middle',\n padding: 30,\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: 14,\n fill: '#000000',\n fontWeight: 'normal'\n },\n space: 12\n },\n item: {\n visible: true,\n spaceCol: 10,\n spaceRow: 10,\n padding: 2,\n background: {\n state: {\n selectedHover: {\n fill: 'gray',\n fillOpacity: 0.7\n },\n unSelectedHover: {\n fill: 'gray',\n fillOpacity: 0.2\n }\n }\n },\n shape: {\n space: 4,\n state: {\n unSelected: {\n fillOpacity: 0.5\n }\n }\n },\n label: {\n space: 4,\n style: {\n fill: '#89909D',\n fontSize: 14\n },\n state: {\n unSelected: {\n fillOpacity: 0.5\n }\n }\n }\n },\n allowAllCanceled: true,\n visible: true\n};\n\nexport function getLegendAttributes(spec: IDiscreteTableLegendOption, rect: { width: number; height: number }) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = merge({}, defaultLegendSpec, spec);\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n transformComponentStyle(item.shape);\n transformComponentStyle(item.label);\n transformComponentStyle(item.value);\n transformComponentStyle(item.background);\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n // transform pager\n if (!isEmpty(pager.textStyle)) {\n transformToGraphic(pager.textStyle);\n }\n transformComponentStyle(pager.handler);\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n merge(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","import { cloneDeep, get, merge } from '@visactor/vutils';\nimport type { IDiscreteTableLegendOption } from '../../../ts-types/component/legend';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { DiscreteLegend, LegendEvent } from '@visactor/vrender-components';\nimport { getLegendAttributes } from './get-discrete-legend-attributes';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport { getQuadProps } from '../../../scenegraph/utils/padding';\nimport type { IOrientType } from '../../../ts-types/component/util';\n\nexport class DiscreteTableLegend {\n table: BaseTableAPI;\n option: IDiscreteTableLegendOption;\n orient: IOrientType;\n visible: boolean;\n position: 'start' | 'middle' | 'end';\n selectedData: (string | number)[];\n legendComponent: DiscreteLegend;\n\n constructor(option: IDiscreteTableLegendOption, table: BaseTableAPI) {\n this.table = table;\n this.option = cloneDeep(option);\n this.orient = option.orient ?? 'left';\n this.visible = option.visible ?? true;\n this.position = option.position ?? 'middle';\n this.selectedData = option.defaultSelected ?? null;\n\n this.createComponent();\n this.initEvent();\n }\n\n createComponent() {\n const attrs = this.getLegendAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n const legend = new DiscreteLegend(\n merge({}, attrs, {\n defaultSelected: this.selectedData,\n disableTriggerEvent: this.table.options.disableInteraction\n })\n );\n legend.name = 'legend';\n this.legendComponent = legend;\n if (this.visible === false) {\n legend.setAttributes({\n visible: false,\n visibleAll: false\n });\n legend.hideAll();\n }\n this.table.scenegraph.stage.defaultLayer.appendChild(legend);\n\n this.adjustTableSize(attrs);\n }\n\n resize() {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n\n this.legendComponent.setAttributes({\n maxWidth: this.table.tableNoFrameWidth,\n maxHeight: this.table.tableNoFrameHeight\n });\n\n this.adjustTableSize(this.legendComponent.attribute);\n }\n\n adjustTableSize(attrs: any) {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n // 调整位置\n let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n if (width <= 0 || height <= 0) {\n return;\n }\n const rectWidth = this.table.tableNoFrameWidth;\n const rectHeight = this.table.tableNoFrameHeight;\n const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);\n\n let x = 0;\n let y = 0;\n if (this.orient === 'left') {\n x = padding[3];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'top') {\n x = 0;\n y = padding[0];\n height += padding[0] + padding[2];\n } else if (this.orient === 'right') {\n x = rectWidth - width - padding[1];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'bottom') {\n x = 0;\n y = rectHeight - height - padding[2];\n height += padding[0] + padding[2];\n }\n\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const position = this.position;\n // const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width - padding[1];\n } else {\n offsetX = padding[3];\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height - padding[2];\n } else {\n offsetY = padding[0];\n }\n }\n\n this.legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY,\n x,\n y\n });\n\n // update table size\n if (this.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n }\n\n getLegendAttributes(rect: any) {\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const legendAttrs = getLegendAttributes(this.option, rect);\n const padding = getQuadProps(legendAttrs.padding ?? this.option.padding ?? 10);\n const attrs = {\n layout,\n items: this.getLegendItems(),\n // zIndex: this.layoutZIndex,\n maxWidth: rect.width - padding[1] - padding[3],\n maxHeight: rect.height - padding[0] - padding[2],\n ...legendAttrs\n };\n return attrs;\n }\n\n getLegendItems() {\n return this.option.data;\n }\n\n initEvent() {\n if (this.legendComponent) {\n this.legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_CLICK, { model: this, value: selectedData, event: e });\n });\n\n this.legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_HOVER, { model: this, value: detail, event: e });\n });\n\n this.legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_ITEM_UNHOVER, { model: this, value: detail, event: e });\n });\n\n // wait for vrender-vcomponent version update\n this.legendComponent.addEventListener('legendItemAttributeUpdate', (e: any) => {\n this.table.scenegraph.updateNextFrame();\n });\n }\n }\n\n getLegendBounds() {\n const width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n\n return {\n width: width,\n height: height\n };\n }\n release() {\n this.legendComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this.legendComponent);\n this.legendComponent = null;\n }\n}\n","import { isEmpty, isValid, merge } from '@visactor/vutils';\nimport type { IColorTableLegendOption, ISizeTableLegendOption } from '../../../ts-types/component/legend';\nimport { transformComponentStyle, transformLegendTitleAttributes, transformToGraphic } from '../../util/transform';\n\nconst defaultContinueLegendSpec = {\n orient: 'right',\n position: 'middle',\n padding: 30,\n title: {\n visible: false,\n padding: 0,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'titleFontColor' }\n },\n space: 12\n },\n handler: {\n visible: true\n },\n startText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n },\n endText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n },\n handlerText: {\n style: {\n fontSize: 14,\n fontWeight: 'normal',\n fill: { type: 'palette', key: 'labelFontColor' }\n }\n }\n};\n\nconst defaultColorLegendSpec = {\n horizontal: {\n ...defaultContinueLegendSpec,\n rail: {\n width: 200,\n height: 8,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n }\n },\n vertical: {\n ...defaultContinueLegendSpec,\n rail: {\n width: 8,\n height: 200,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n }\n }\n};\n\nconst defaultSizeLegendSpec = {\n horizontal: {\n sizeBackground: {\n fill: '#cdcdcd'\n },\n track: {\n style: {\n fill: 'rgba(20,20,20,0.1)'\n }\n },\n rail: {\n width: 200,\n height: 4,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n },\n ...defaultContinueLegendSpec\n },\n vertical: {\n sizeBackground: {\n fill: '#cdcdcd'\n },\n track: {\n style: {\n fill: 'rgba(20,20,20,0.1)'\n }\n },\n rail: {\n width: 4,\n height: 200,\n style: {\n fill: 'rgba(0,0,0,0.04)'\n }\n },\n ...defaultContinueLegendSpec\n }\n};\n\nexport function getContinuousLegendAttributes(\n spec: IColorTableLegendOption | ISizeTableLegendOption,\n rect: { width: number; height: number }\n) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = merge(\n {},\n (spec.type === 'color' ? defaultColorLegendSpec : defaultSizeLegendSpec)[\n spec.orient === 'bottom' || spec.orient === 'top' ? 'horizontal' : 'vertical'\n ],\n spec\n );\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n merge(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n","import { cloneDeep, get, merge } from '@visactor/vutils';\nimport type { IColorTableLegendOption, ISizeTableLegendOption } from '../../../ts-types/component/legend';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { ColorContinuousLegend, SizeContinuousLegend, LegendEvent } from '@visactor/vrender-components';\nimport { getContinuousLegendAttributes } from './get-continue-legend-attributes';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport { getQuadProps } from '../../../scenegraph/utils/padding';\nimport type { IOrientType } from '../../../ts-types/component/util';\n\nexport class ContinueTableLegend {\n table: BaseTableAPI;\n option: IColorTableLegendOption | ISizeTableLegendOption;\n orient: IOrientType;\n visible: boolean;\n position: 'start' | 'middle' | 'end';\n selectedData: (string | number)[];\n legendComponent: ColorContinuousLegend | SizeContinuousLegend;\n\n constructor(option: IColorTableLegendOption | ISizeTableLegendOption, table: BaseTableAPI) {\n this.table = table;\n this.option = cloneDeep(option);\n this.orient = option.orient ?? 'left';\n this.visible = option.visible ?? true;\n this.position = option.position ?? 'middle';\n this.selectedData = option.defaultSelected ?? null;\n\n this.createComponent();\n this.initEvent();\n }\n\n createComponent() {\n const attrs = this.getLegendAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n\n let legend;\n if (this.option.type === 'color') {\n legend = new ColorContinuousLegend(\n merge({}, attrs, {\n slidable: true\n // defaultSelected: this.selectedData\n })\n );\n } else {\n legend = new SizeContinuousLegend(\n merge({}, attrs, {\n slidable: true\n // defaultSelected: this.selectedData\n })\n );\n }\n legend.name = 'legend';\n this.legendComponent = legend;\n if (this.visible === false) {\n legend.setAttributes({\n visible: false,\n visibleAll: false\n });\n legend.hideAll();\n }\n this.table.scenegraph.stage.defaultLayer.appendChild(legend);\n\n this.adjustTableSize(attrs);\n }\n\n resize() {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n\n this.legendComponent.setAttributes({\n width: this.table.tableNoFrameWidth,\n height: this.table.tableNoFrameHeight\n });\n\n this.adjustTableSize(this.legendComponent.attribute);\n }\n\n adjustTableSize(attrs: any) {\n if (!this.legendComponent || this.visible === false) {\n return;\n }\n // 调整位置\n let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n if (width <= 0 || height <= 0) {\n return;\n }\n const rectWidth = this.table.tableNoFrameWidth;\n const rectHeight = this.table.tableNoFrameHeight;\n const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);\n\n let x = 0;\n let y = 0;\n if (this.orient === 'left') {\n x = padding[3];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'top') {\n x = 0;\n y = padding[0];\n height += padding[0] + padding[2];\n } else if (this.orient === 'right') {\n x = rectWidth - width - padding[1];\n y = 0;\n width += padding[1] + padding[3];\n } else if (this.orient === 'bottom') {\n x = 0;\n y = rectHeight - height - padding[2];\n height += padding[0] + padding[2];\n }\n\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const position = this.position;\n // const { width: rectWidth, height: rectHeight } = fullSpace;\n let offsetX = 0;\n let offsetY = 0;\n if (layout === 'horizontal') {\n if (position === 'middle') {\n offsetX = (rectWidth - width) / 2;\n } else if (position === 'end') {\n offsetX = rectWidth - width - padding[1];\n } else {\n offsetX = padding[3];\n }\n } else {\n if (position === 'middle') {\n offsetY = (rectHeight - height) / 2;\n } else if (position === 'end') {\n offsetY = rectHeight - height - padding[2];\n } else {\n offsetY = padding[0];\n }\n }\n\n this.legendComponent.setAttributes({\n dx: offsetX,\n dy: offsetY,\n x,\n y\n });\n\n // update table size\n if (this.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n }\n\n getLegendAttributes(rect: any) {\n const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';\n const align = layout === 'horizontal' ? 'bottom' : this.orient;\n\n const attrs = {\n ...getContinuousLegendAttributes(this.option, rect),\n layout,\n align,\n // zIndex: this.layoutZIndex,\n min: this.option.min,\n max: this.option.max,\n value: this.option.value,\n [this.option.type === 'color' ? 'colors' : 'sizeRange']:\n this.option.type === 'color'\n ? (this.option as IColorTableLegendOption).colors\n : (this.option as ISizeTableLegendOption).sizeRange\n };\n return attrs;\n }\n\n initEvent() {\n if (this.legendComponent) {\n this.legendComponent.addEventListener('change', (e: any) => {\n const selectedData = get(e, 'detail.value');\n this.table.fireListeners(TABLE_EVENT_TYPE.LEGEND_CHANGE, { model: this, value: selectedData, event: e });\n this.table.scenegraph.updateNextFrame();\n });\n }\n }\n\n getLegendBounds() {\n const width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;\n const height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;\n\n return {\n width: width,\n height: height\n };\n }\n release() {\n this.legendComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this.legendComponent);\n this.legendComponent = null;\n }\n}\n","import type { ITableLegendOption } from '../../ts-types/component/legend';\nimport { DiscreteTableLegend } from './discrete-legend/discrete-legend';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { ContinueTableLegend } from './continue-legend/continue-legend';\n\nexport type CreateLegend = (\n option: ITableLegendOption,\n table: BaseTableAPI\n) => DiscreteTableLegend | ContinueTableLegend;\nexport function createLegend(option: ITableLegendOption, table: BaseTableAPI) {\n if (option.type === 'color' || option.type === 'size') {\n return new ContinueTableLegend(option, table);\n }\n return new DiscreteTableLegend(option, table);\n}\n","import type { MenuInstanceInfo } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { MenuContainer } from './logic/MenuContainer';\nimport type { MenuElement } from './logic/MenuElement';\n\nexport abstract class BaseMenu {\n protected _table: BaseTableAPI;\n /** 弹出的菜单显示内容 */\n private _menuElement?: MenuElement | MenuContainer;\n constructor(table: BaseTableAPI) {\n this._table = table;\n }\n release(): void {\n this.unbindMenuElement();\n if (this._menuElement) {\n this._menuElement.release();\n }\n this._menuElement = undefined;\n }\n private _getMenuElement(): MenuElement | MenuContainer {\n if (this._menuElement) {\n return this._menuElement;\n }\n this._menuElement = this.createMenuElementInternal();\n\n return this._menuElement;\n }\n /** 继承的具体类来实现 可以返回 MenuElement 或者 MenuContainer */\n abstract createMenuElementInternal(): MenuElement | MenuContainer;\n bindMenuElement(col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const menuElement = this._getMenuElement();\n return menuElement.bindToCell(this._table, col, row, menuInstanceInfo);\n }\n unbindMenuElement(): void {\n const menuElement = this._getMenuElement();\n menuElement.unbindFromCell();\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const menuElement = this._getMenuElement();\n return menuElement.pointInMenuElement(x, y);\n }\n getRootElement(): HTMLElement {\n return this._getMenuElement().rootElement;\n }\n}\n","import { EventHandler } from '../../../../event/EventHandler';\nimport type { MenuInstanceInfo, Placement, RectProps } from '../../../../ts-types';\nimport { createElement } from '../../../../tools/dom';\nimport { TABLE_EVENT_TYPE } from '../../../../core/TABLE_EVENT_TYPE';\nimport type { PivotHeaderLayoutMap } from '../../../../layout/pivot-header-layout';\nimport type { BaseTableAPI } from '../../../../ts-types/base-table';\n\nconst CLASSNAME = 'vtable__menu-element';\nconst HIDDEN_CLASSNAME = `${CLASSNAME}--hidden`;\nconst SHOWN_CLASSNAME = `${CLASSNAME}--shown`;\n\nfunction createMenuDomElement(): HTMLElement {\n const rootElement = createElement('div', [CLASSNAME, HIDDEN_CLASSNAME]);\n return rootElement;\n}\n\nexport class MenuContainer {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _menuInstanceInfo?: MenuInstanceInfo;\n constructor(table: BaseTableAPI) {\n this._handler = new EventHandler();\n this._rootElement = createMenuDomElement();\n\n // 鼠标在菜单上滚动阻止冒泡\n this._rootElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n // 绑定交互事件\n this._rootElement?.addEventListener('mousedown', e => {\n e.stopPropagation();\n e.preventDefault();\n });\n this._rootElement?.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousedown', e);\n // 触发菜单条目点击事件\n const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n if (typeof dropDownIndex !== 'number' || hasChildren) {\n e.stopPropagation();\n return;\n }\n // const field = table.getHeaderField(col, row);\n const field = table.isPivotTable()\n ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n : table.getHeaderField(col, row);\n\n const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n col,\n row,\n field: field,\n menuKey,\n // fieldKey,\n // dropDownIndex,\n text,\n highlight,\n cellLocation: table.getCellLocation(col, row),\n event: e\n });\n\n table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n // table.invalidateCell(col, row); // 更新状态图表\n e.stopPropagation();\n });\n this._rootElement?.addEventListener('mousemove', e => {\n if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n return;\n }\n // console.log('menu mousemove', e);\n // table.hoverIcon = undefined;\n\n e.stopPropagation();\n });\n // this._rootElement?.addEventListener('mouseenter', () => {\n // if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) return;\n // if (!table.hoverIcon) return;\n // // console.log('menu mousemove', e);\n // table.showHoverIcon = table.hoverIcon;\n // table.hoverIcon = undefined; // 避免在hover icon后不能交互表格区域\n // table.invalidateCell(table.showHoverIcon.col, table.showHoverIcon.row);\n // // console.log('showHoverIcon', table.showHoverIcon);\n // });\n // this._rootElement?.addEventListener('blur', () => {\n // // table.fireListeners(LG_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n // table.showHoverIcon = undefined;\n // });\n }\n get rootElement() {\n return this._rootElement;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler.release();\n delete this._rootElement;\n // delete this._messageElement;\n }\n bindToCell(table: BaseTableAPI, col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n const rootElement = this._rootElement;\n this._menuInstanceInfo = menuInstanceInfo;\n // const messageElement = this._messageElement;\n\n rootElement?.classList.remove(SHOWN_CLASSNAME);\n rootElement?.classList.add(HIDDEN_CLASSNAME);\n\n if (this._canBindToCell(table, col, row)) {\n rootElement.innerHTML = '';\n rootElement.appendChild(menuInstanceInfo.content);\n\n const binded = this._bindCell(table, col, row, menuInstanceInfo.position, menuInstanceInfo.referencePosition);\n\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASSNAME);\n rootElement?.classList.remove(HIDDEN_CLASSNAME);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n unbindFromCell(): void {\n const rootElement = this._rootElement;\n this._menuInstanceInfo = undefined;\n if (rootElement?.parentElement) {\n // rootElement.parentElement.removeChild(rootElement);\n rootElement.classList.remove(SHOWN_CLASSNAME);\n rootElement.classList.add(HIDDEN_CLASSNAME);\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n // const element = table.getElement();\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const { top, bottom, left, right } = rect;\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n\n const { offsetHeight, offsetWidth } = element;\n if (offsetHeight < top) {\n return false;\n }\n if (offsetWidth < left) {\n return false;\n }\n return true;\n }\n _bindCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position: { x: number; y: number },\n referencePosition: { rect: RectProps; placement?: Placement }\n ): boolean {\n const rootElement = this._rootElement;\n // const element = table.getElement(); // container element\n const element = table.internalProps.menu.parentElement ?? table.getElement();\n const {\n width: containerWidth,\n height: containerHeight,\n left: containerLeft,\n top: containerTop\n } = element.getBoundingClientRect();\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement); // 之前在做dom边缘躲避的时候放到了table.getParentElement()上,但发现不是相对定位导致位置错位\n }\n rootElement.style.left = `0px`;\n //设置最宽尺寸\n const maxWidth = containerWidth * 0.8;\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth;\n const rootElementHeight = rootElement.clientHeight;\n let rootElementLeft;\n let rootElementTop;\n if (position) {\n rootElementLeft = position.x;\n rootElementTop = position.y;\n }\n if (referencePosition) {\n rootElementLeft = referencePosition.rect.right - rootElementWidth;\n rootElementTop = referencePosition.rect.bottom;\n }\n // rootElementLeft = position.x - rootElementWidth;\n // let leftStyle = rootElementLeft;\n // 检测下方能否容纳,不能容纳向上偏移\n if (rootElementTop + rootElementHeight > containerHeight) {\n rootElementTop = containerHeight - rootElementHeight;\n rootElementLeft += rootElementWidth - 2;\n }\n // 偏移后上方超出canvas范围,居中显示\n if (rootElementTop < 0) {\n rootElementTop = rootElementTop / 2;\n }\n\n let deltaTop = 0;\n let deltaLeft = 0;\n if (table.getElement() !== element) {\n const { left, top } = table.getElement().getBoundingClientRect();\n deltaTop = top - containerTop;\n deltaLeft = left - containerLeft;\n }\n\n rootElement.style.top = `${rootElementTop + deltaTop}px`;\n\n // 判断如果超出左右范围则靠边显示\n if (rootElementLeft < 0) {\n rootElementLeft = 0;\n } else if (rootElementLeft + rootElementWidth > containerWidth) {\n rootElementLeft = containerWidth - rootElementWidth;\n }\n rootElement.style.left = `${rootElementLeft + deltaLeft}px`;\n\n return true;\n }\n return false;\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number): boolean {\n const rootElement = this._rootElement;\n\n const { x: rootLeft, y: rootTop, width: rootWidth, height: rootHeight } = rootElement.getBoundingClientRect();\n if (x > rootLeft - 5 && x < rootLeft + rootWidth + 5 && y > rootTop - 5 && y < rootTop + rootHeight + 5) {\n return true;\n }\n\n return false;\n }\n}\n","import { BaseMenu } from './BaseMenu';\nimport { MenuContainer } from './logic/MenuContainer';\nimport { MenuElement } from './logic/MenuElement';\n\nexport class Menu extends BaseMenu {\n createMenuElementInternal(): MenuElement {\n return new MenuElement(this._table);\n }\n}\nexport class Container extends BaseMenu {\n createMenuElementInternal(): MenuContainer {\n return new MenuContainer(this._table);\n }\n}\n","import type { CellRange, DropDownMenuOptions, MenuInstanceInfo, MenuInstanceType } from '../../../ts-types';\nimport type { BaseMenu } from './BaseMenu';\nimport { Container, Menu } from './Menu';\nimport { cellInRange } from '../../../tools/helper';\nimport { TABLE_EVENT_TYPE } from '../../../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI, HeaderData } from '../../../ts-types/base-table';\n// import { DEFAULTFONT } from '../../tools/global';\n// import { getFontSize } from '../../tools/canvases';\n\nconst MENU_INSTANCE_FACTORY = {\n 'dropdown-menu': function (table: BaseTableAPI): BaseMenu {\n return new Menu(table);\n },\n 'context-menu': function (table: BaseTableAPI): BaseMenu {\n return new Menu(table);\n },\n container(table: BaseTableAPI): BaseMenu {\n return new Container(table);\n }\n};\n\n/** 获取下拉菜单展示内容及坐标位置 */\nfunction getMenuInstanceInfo(\n table: BaseTableAPI,\n col: number,\n row: number,\n type: MenuInstanceType,\n dropDownMenuOptions?: DropDownMenuOptions\n): MenuInstanceInfo | null {\n const { lineHeight, textBaseline, textStick } = table._getCellStyle(col, row);\n // table.internalProps.layoutMap.getHeader(col, row).style ?? {};\n // const lineHeight = getFontSize(table.getContext(), font).height;\n let rect = table.getCellRangeRelativeRect(table.getCellRange(col, row));\n if (textStick) {\n rect = table.getVisibleCellRangeRelativeRect({ col, row });\n }\n\n let { left, right, bottom, top, width, height } = rect;\n if (table.isHeader(col, row)) {\n ({ left, right, bottom, top, width, height } = table.internalProps.headerHelper.getDropDownIconRect(\n rect,\n // paddingArray[1]\n lineHeight as number,\n textBaseline || 'middle'\n ));\n }\n if (dropDownMenuOptions?.content) {\n //如果有指定的下拉菜单内容\n return {\n type,\n position: dropDownMenuOptions.position,\n referencePosition: dropDownMenuOptions.referencePosition ?? {\n rect: {\n left,\n right,\n top,\n bottom,\n width,\n height\n }\n },\n content: dropDownMenuOptions.content\n };\n } // 没有指定的下拉菜单 从headerLayout中获取下拉菜单内容\n else if (type === 'dropdown-menu') {\n // 获取下拉菜单信息及位置 注:这里逻辑特指内置的下拉菜单\n const { dropDownMenu = table.globalDropDownMenu, pivotInfo } = table._getHeaderLayoutMap(col, row) as HeaderData;\n\n // const x = (left + right) / 2;\n // const y = bottom;\n\n return {\n type,\n // position: {\n // x,\n // y,\n // },\n referencePosition: {\n rect: {\n left,\n right,\n top,\n bottom,\n width,\n height\n }\n },\n content: dropDownMenu,\n pivotInfo\n };\n }\n // else if (type === 'context-menu') {\n // // 获取右键菜单信息及位置\n // const abstractPos = table._getMouseAbstractPoint(event, false);\n // let menu = null;\n // if (abstractPos && typeof table.options.contextmenu === 'function') {\n // menu = table.options.contextmenu(table.getHeaderField(col, row) as string, row);\n // } else if (abstractPos && Array.isArray(table.options.contextmenu)) {\n // menu = table.options.contextmenu;\n // }\n // return {\n // position: {\n // x: abstractPos.x,\n // y: abstractPos.y,\n // },\n // type,\n // content: menu,\n // };\n // }\n return null;\n}\n\ntype AttachInfo = {\n instance?: BaseMenu;\n range: CellRange;\n};\n\nexport interface IMenuHandler {\n new (table: BaseTableAPI): MenuHandler;\n}\nexport class MenuHandler {\n private _table: BaseTableAPI;\n private _menuInstances?: { [type: string]: BaseMenu };\n private _attachInfo?: AttachInfo | null;\n constructor(table: BaseTableAPI) {\n this._table = table;\n this._menuInstances = {};\n this._bindTableEvent(table);\n }\n release(): void {\n const menuInstances = this._menuInstances;\n for (const k in menuInstances) {\n menuInstances[k].release();\n }\n delete this._menuInstances;\n this._attachInfo = null;\n }\n _bindToCell(col: number, row: number, type: MenuInstanceType, dropDownMenuOptions?: DropDownMenuOptions): void {\n const info = this._attachInfo;\n const instanceInfo = this._getMenuInstanceInfo(col, row, type, dropDownMenuOptions);\n if (info && (!instanceInfo || info.instance !== instanceInfo.instance)) {\n info.instance?.unbindMenuElement();\n this._attachInfo = null;\n }\n if (!instanceInfo) {\n return;\n }\n const { instance, info: menuInstanceInfo } = instanceInfo;\n const attach = instance && instance.bindMenuElement(col, row, menuInstanceInfo);\n if (attach) {\n const range = this._table.getCellRange(col, row);\n this._attachInfo = { range, instance };\n }\n }\n _unbindFromCell(): void {\n const info = this._attachInfo;\n if (!info) {\n return;\n }\n const { instance } = info;\n instance?.unbindMenuElement();\n this._attachInfo = null;\n // this._table.showHoverIcon = undefined;\n }\n _isBindToCell(col: number, row: number): boolean {\n const info = this._attachInfo;\n if (!info) {\n return false;\n }\n return cellInRange(info.range, col, row);\n }\n /** 鼠标坐标位置 是否位于下拉菜单内 */\n pointInMenuElement(x: number, y: number) {\n if (!this._attachInfo) {\n return false;\n }\n const info = this._attachInfo;\n const { instance } = info;\n return instance.pointInMenuElement(x, y);\n }\n _bindTableEvent(table: BaseTableAPI): void {\n // 监听按钮点击事件\n // 三种情况:\n // 1. 没有菜单,点击弹出菜单\n // 2. 已显示菜单,点击关闭菜单\n // 3. 已显示菜单,点击其他菜单按钮,关闭当前菜单,显示另一菜单\n table.on(TABLE_EVENT_TYPE.DROPDOWN_ICON_CLICK, e => {\n if (this._attachInfo) {\n if (this._isBindToCell(e.col, e.row)) {\n this._unbindFromCell();\n } else {\n this._bindToCell(e.col, e.row, 'dropdown-menu');\n }\n } else {\n this._bindToCell(e.col, e.row, 'dropdown-menu');\n }\n });\n // 监听菜单清除事件\n table.on(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, e => {\n this._unbindFromCell();\n });\n // 监听右键菜单\n table.on(TABLE_EVENT_TYPE.CONTEXTMENU_CELL, e => {\n if (table.internalProps.menu?.renderMode === 'html') {\n // 获取右键菜单信息及位置\n const abstractPos = table._getMouseAbstractPoint(e.event, false);\n let menu = null;\n if (abstractPos.inTable && typeof table.internalProps.menu?.contextMenuItems === 'function') {\n menu = table.internalProps.menu.contextMenuItems(\n table.getHeaderField(e.col, e.row) as string,\n e.row,\n e.col,\n table\n );\n } else if (abstractPos.inTable && Array.isArray(table.internalProps.menu?.contextMenuItems)) {\n menu = table.internalProps.menu?.contextMenuItems;\n }\n\n this._bindToCell(e.col, e.row, 'context-menu', {\n content: menu,\n position: { x: abstractPos.x, y: abstractPos.y }\n });\n }\n });\n }\n _getMenuInstanceInfo(\n col: number,\n row: number,\n type: MenuInstanceType,\n dropDownMenuOptions?: DropDownMenuOptions\n ): {\n instance?: BaseMenu;\n type: MenuInstanceType;\n info: MenuInstanceInfo;\n } | null {\n const table = this._table;\n const menuInstances = this._menuInstances;\n\n const info = getMenuInstanceInfo(table, col, row, type, dropDownMenuOptions);\n if (!info) {\n return null;\n }\n\n // const { type } = info;\n const instance =\n (menuInstances && menuInstances[type]) ||\n (menuInstances && (menuInstances[type] = MENU_INSTANCE_FACTORY[type](table)));\n\n return {\n instance,\n type,\n info\n };\n }\n\n containElement(el: HTMLElement): boolean {\n for (const k in this._menuInstances) {\n const contain = this._menuInstances[k].getRootElement()?.contains(el);\n if (contain) {\n return true;\n }\n }\n return false;\n }\n}\n","import { Title as TitleComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TitleAttrs } from '@visactor/vrender-components';\nimport type { ITitle } from '../../ts-types/component/title';\nimport { getQuadProps } from '../../scenegraph/utils/padding';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isEqual, merge } from '@visactor/vutils';\n\nexport interface ITitleComponent {\n new (titleOption: ITitle, table: BaseTableAPI): Title;\n}\nexport class Title {\n table: BaseTableAPI;\n _titleOption: ITitle;\n isReleased: boolean = false;\n private _titleComponent: TitleComponents;\n private _cacheAttrs: TitleAttrs;\n constructor(titleOption: ITitle, table: BaseTableAPI) {\n this.table = table;\n this._titleOption = merge({ orient: 'top' }, titleOption);\n if (titleOption.visible !== false) {\n this._titleComponent = this._createOrUpdateTitleComponent(this._getTitleAttrs());\n }\n }\n\n private _createOrUpdateTitleComponent(attrs: TitleAttrs): TitleComponents {\n if (this._titleComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._titleComponent.setAttributes(attrs);\n }\n } else {\n const title = new TitleComponents(attrs);\n title.name = 'title';\n this.table.scenegraph.stage.defaultLayer.appendChild(title);\n this._titleComponent = title;\n // 代理 title 组件上的事件\n // title.on('*', (event: any, type: string) => this._delegateEvent(title as unknown as INode, event, type));\n }\n // update table size\n this._adjustTableSize(this._titleComponent.attribute);\n return this._titleComponent;\n }\n\n resize() {\n if (!this._titleComponent) {\n return;\n }\n const padding = getQuadProps(this._titleOption.padding ?? 10);\n const realWidth =\n this._titleOption.width ??\n (this.table.widthMode === 'adaptive'\n ? this.table.tableNoFrameWidth\n : Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)) -\n padding[1] -\n padding[3];\n const realHeight =\n this._titleOption.height ??\n (this.table.heightMode === 'adaptive'\n ? this.table.tableNoFrameHeight\n : Math.min(this.table.tableNoFrameHeight, this.table.getDrawRange().height)) -\n padding[0] -\n padding[2];\n this._titleComponent.setAttributes({\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY,\n // width: realWidth,\n width:\n this._titleOption.orient === 'top' || this._titleOption.orient === 'bottom'\n ? realWidth\n : this._titleOption.width,\n height:\n this._titleOption.orient === 'left' || this._titleOption.orient === 'right'\n ? realHeight\n : this._titleOption.height,\n textStyle: {\n width: realWidth,\n ...this._titleOption.textStyle\n },\n subtextStyle: {\n width: realWidth,\n ...this._titleOption.subtextStyle\n }\n });\n this._adjustTableSize(this._titleComponent.attribute);\n }\n\n _adjustTableSize(attrs: TitleAttrs) {\n // 调整位置\n const width = isFinite(this._titleComponent?.AABBBounds.width()) ? this._titleComponent.AABBBounds.width() : 0;\n const height = isFinite(this._titleComponent?.AABBBounds.height()) ? this._titleComponent.AABBBounds.height() : 0;\n // const rectWidth = this.table.tableNoFrameWidth;\n // const rectHeight = this.table.tableNoFrameHeight;\n // const padding = getQuadProps((attrs.padding as number | number[]) ?? this._titleOption.padding ?? 10);\n\n // let x = 0;\n // let y = 0;\n // if (this._titleOption.orient === 'left') {\n // x = padding[3];\n // y = 0;\n // // width += padding[1] + padding[3];\n // } else if (this._titleOption.orient === 'top') {\n // x = 0;\n // y = padding[0];\n // // height += padding[0] + padding[2];\n // } else if (this._titleOption.orient === 'right') {\n // x = rectWidth - width - padding[1];\n // y = 0;\n // width += padding[1] + padding[3];\n // } else if (this._titleOption.orient === 'bottom') {\n // x = 0;\n // y = rectHeight - height - padding[2];\n // // height += padding[0] + padding[2];\n // }\n if (this._titleOption.orient === 'left') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n this.table.tableX += Math.ceil(width);\n } else if (this._titleOption.orient === 'top') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n this.table.tableY += Math.ceil(height);\n } else if (this._titleOption.orient === 'right') {\n this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);\n } else if (this._titleOption.orient === 'bottom') {\n this.table.tableNoFrameHeight = this.table.tableNoFrameHeight - Math.ceil(height);\n }\n this._cacheAttrs = attrs;\n if (this._titleOption.orient === 'right' || this._titleOption.orient === 'bottom') {\n this._titleComponent.setAttributes({\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + this.table.tableNoFrameWidth\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY\n });\n }\n }\n\n release(): void {\n this._titleComponent && this.table.scenegraph.stage.defaultLayer.removeChild(this._titleComponent);\n this._titleComponent = null;\n this.isReleased = true;\n }\n private _getTitleAttrs() {\n const defaultPadding = this._titleOption.text || this._titleOption.subtext ? 10 : 0;\n const padding = getQuadProps(this._titleOption.padding ?? defaultPadding);\n const realWidth =\n this._titleOption.width ??\n Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width) - padding[1] - padding[3];\n const realHeight =\n this._titleOption.height ??\n Math.min(this.table.tableNoFrameHeight, this.table.getDrawRange().height) - padding[0] - padding[2];\n return {\n text: this._titleOption.text ?? '',\n subtext: this._titleOption.subtext ?? '',\n x:\n this._titleOption.x ?? this._titleOption.orient === 'right'\n ? this.table.tableX + Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width)\n : this.table.tableX,\n y:\n this._titleOption.y ?? this._titleOption.orient === 'bottom'\n ? this.table.tableY + this.table.tableNoFrameHeight\n : this.table.tableY,\n width:\n this._titleOption.orient === 'top' || this._titleOption.orient === 'bottom'\n ? realWidth\n : this._titleOption.width,\n height:\n this._titleOption.orient === 'left' || this._titleOption.orient === 'right'\n ? realHeight\n : this._titleOption.height,\n minWidth: this._titleOption.minWidth,\n maxWidth: this._titleOption.maxWidth,\n minHeight: this._titleOption.minHeight,\n maxHeight: this._titleOption.maxHeight,\n padding: this._titleOption.padding,\n align: this._titleOption.align ?? 'left',\n verticalAlign: this._titleOption.verticalAlign ?? 'top',\n textStyle: {\n width: realWidth,\n ...this._titleOption.textStyle\n },\n subtextStyle: {\n width: realWidth,\n ...this._titleOption.subtextStyle\n },\n dx: this._titleOption.dx ?? 0,\n dy: this._titleOption.dy ?? 0\n } as TitleAttrs;\n }\n\n getComponentGraphic() {\n return this._titleComponent;\n }\n}\n","import type { Placement, RectProps } from '../../ts-types';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport type { BubbleTooltipElement } from './logic/BubbleTooltipElement';\n\nexport abstract class BaseTooltip {\n private _table: BaseTableAPI;\n private _tooltipElement?: BubbleTooltipElement;\n constructor(table: BaseTableAPI) {\n this._table = table;\n }\n release(): void {\n this.unbindTooltipElement();\n if (this._tooltipElement) {\n this._tooltipElement.release?.();\n }\n this._tooltipElement = undefined;\n }\n private _getTooltipElement(): BubbleTooltipElement {\n if (this._tooltipElement) {\n return this._tooltipElement;\n }\n this._tooltipElement = this.createTooltipElementInternal();\n return this._tooltipElement;\n }\n abstract createTooltipElementInternal(): BubbleTooltipElement;\n bindTooltipElement(col: number, row: number, tooltipInstanceInfo: TooltipOptions, confine?: boolean): boolean {\n const tooltipElement = this._getTooltipElement();\n return tooltipElement.bindToCell(this._table, col, row, tooltipInstanceInfo, confine);\n }\n moveTooltipElement(col: number, row: number, tooltipOptions: TooltipOptions, confine?: boolean): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement.move(this._table, col, row, tooltipOptions, confine);\n }\n unbindTooltipElement(): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement.unbindFromCell();\n }\n locateTooltipElement(\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n },\n confine?: boolean\n ): void {\n const tooltipElement = this._getTooltipElement();\n tooltipElement._locate(this._table, col, row, position, referencePosition, confine);\n }\n}\n","import { EventHandler } from '../../../event/EventHandler';\nimport type { RectProps } from '../../../ts-types';\nimport { Placement } from '../../../ts-types';\nimport { createElement } from '../../../tools/dom';\nimport { importStyle } from './BubbleTooltipElementStyle';\nimport { isDivSelected, isMobile } from '../../../tools/util';\nimport type { TooltipOptions } from '../../../ts-types/tooltip';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimportStyle();\nconst TOOLTIP_CLASS = 'vtable__bubble-tooltip-element';\nconst CONTENT_CLASS = `${TOOLTIP_CLASS}__content`;\nconst TRIANGLE_CLASS = `${TOOLTIP_CLASS}__triangle`;\nconst HIDDEN_CLASS = `${TOOLTIP_CLASS}--hidden`;\nconst SHOWN_CLASS = `${TOOLTIP_CLASS}--shown`;\n\nexport class BubbleTooltipElement {\n private _handler: EventHandler;\n private _rootElement?: HTMLElement;\n private _messageElement?: HTMLElement;\n private _triangleElement?: HTMLElement;\n private _disappearDelay?: number; // 提示框延迟多久消失\n private _disappearDelayId?: any;\n constructor() {\n this._handler = new EventHandler();\n const rootElement = (this._rootElement = createElement('div', [TOOLTIP_CLASS, HIDDEN_CLASS]));\n const messageElement = createElement('div', [CONTENT_CLASS]);\n const triangle = createElement('span', [TRIANGLE_CLASS]);\n rootElement.appendChild(triangle);\n rootElement.appendChild(messageElement);\n this._messageElement = rootElement.querySelector(`.${CONTENT_CLASS}`) || undefined;\n this._triangleElement = rootElement.querySelector(`.${TRIANGLE_CLASS}`) || undefined;\n\n rootElement.addEventListener('mousemove', () => {\n this._disappearDelayId && clearTimeout(this._disappearDelayId);\n });\n rootElement.addEventListener('mouseleave', () => {\n this._disappearDelay = undefined;\n this.unbindFromCell();\n });\n\n messageElement.addEventListener('wheel', e => {\n e.stopPropagation();\n });\n messageElement.addEventListener('copy', e => {\n const isSelected = isDivSelected(messageElement as HTMLDivElement); // 判断tooltip弹框内容是否有选中\n if (isSelected) {\n e.stopPropagation();\n }\n });\n }\n bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n tooltipInstanceInfo: TooltipOptions,\n confine: boolean\n ): boolean {\n this._disappearDelay = tooltipInstanceInfo?.disappearDelay;\n this._disappearDelayId && clearTimeout(this._disappearDelayId);\n const rootElement = this._rootElement;\n const messageElement = this._messageElement;\n const triangle = this._triangleElement;\n\n rootElement?.classList.remove(SHOWN_CLASS);\n rootElement?.classList.add(HIDDEN_CLASS);\n if (this._canBindToCell(table, col, row)) {\n //设置style及类名\n messageElement.setAttribute('style', '');\n triangle.setAttribute('style', '');\n tooltipInstanceInfo?.className && rootElement.classList.add(tooltipInstanceInfo.className);\n tooltipInstanceInfo?.style?.bgColor &&\n (messageElement.style.backgroundColor = tooltipInstanceInfo?.style?.bgColor);\n tooltipInstanceInfo?.style?.bgColor && (triangle.style.backgroundColor = tooltipInstanceInfo?.style?.bgColor);\n triangle.style.display = tooltipInstanceInfo?.style?.arrowMark === true ? 'block' : 'none';\n tooltipInstanceInfo?.style?.fontSize &&\n (messageElement.style.fontSize = (tooltipInstanceInfo?.style?.fontSize ?? 12) + 'px');\n tooltipInstanceInfo?.style?.fontFamily &&\n (messageElement.style.fontFamily = tooltipInstanceInfo?.style?.fontFamily);\n tooltipInstanceInfo?.style?.color && (messageElement.style.color = tooltipInstanceInfo?.style?.color);\n tooltipInstanceInfo?.style?.padding &&\n (messageElement.style.padding = `${tooltipInstanceInfo?.style?.padding.join('px ')}px`);\n tooltipInstanceInfo?.style?.maxHeight &&\n (messageElement.style.maxHeight = `${tooltipInstanceInfo?.style?.maxHeight}px`);\n tooltipInstanceInfo?.style?.maxWidth &&\n (messageElement.style.maxWidth = `${tooltipInstanceInfo?.style?.maxWidth}px`);\n messageElement && (messageElement.textContent = tooltipInstanceInfo?.content);\n const binded = this._bindToCell(\n table,\n col,\n row,\n tooltipInstanceInfo?.position,\n tooltipInstanceInfo?.referencePosition,\n confine,\n tooltipInstanceInfo?.style?.arrowMark\n );\n if (binded) {\n rootElement?.classList.add(SHOWN_CLASS);\n rootElement?.classList.remove(HIDDEN_CLASS);\n return true;\n }\n } else {\n this.unbindFromCell();\n }\n return false;\n }\n release(): void {\n this.unbindFromCell();\n\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.parentElement.removeChild(rootElement);\n }\n\n this._handler?.release?.();\n delete this._rootElement;\n delete this._messageElement;\n }\n move(table: BaseTableAPI, col: number, row: number, tooltipOptions?: TooltipOptions, confine?: boolean): void {\n const rootElement = this._rootElement;\n if (this._canBindToCell(table, col, row)) {\n this._bindToCell(table, col, row, tooltipOptions?.position, tooltipOptions?.referencePosition, confine);\n rootElement?.classList.add(SHOWN_CLASS);\n rootElement?.classList.remove(HIDDEN_CLASS);\n } else {\n this.unbindFromCell();\n }\n }\n unbindFromCell(): void {\n if (this._disappearDelay) {\n this._disappearDelayId = setTimeout(() => {\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASS);\n rootElement.classList.add(HIDDEN_CLASS);\n }\n }, this._disappearDelay ?? 0);\n } else {\n const rootElement = this._rootElement;\n if (rootElement?.parentElement) {\n rootElement.classList.remove(SHOWN_CLASS);\n rootElement.classList.add(HIDDEN_CLASS);\n }\n }\n }\n _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n const rect = table.getCellRangeRelativeRect({ col, row });\n const element = table.getElement();\n const { bottom, left, right, top } = rect;\n // const { frozenRowCount, frozenColCount } = table;\n // if (row >= frozenRowCount && frozenRowCount > 0) {\n // const frozenRect = table.getCellRangeRelativeRect({ col, row: frozenRowCount - 1 });\n // if (bottom < frozenRect.bottom) {\n // // 范围外\n // return false;\n // }\n // } else if (bottom < 0) {\n // // 范围外\n // return false;\n // }\n // if (col >= frozenColCount && frozenColCount > 0) {\n // const frozenRect = table.getCellRangeRelativeRect({ col: frozenColCount - 1, row });\n // if (right < frozenRect.right) {\n // //整个是被冻结列盖住的 不需要提示toolTip\n // return false;\n // }\n // } else if (left < 0) {\n // return false;\n // }\n\n if (table.isFrozenCell(col, row)) {\n return true;\n } else if (\n bottom < table.getFrozenRowsHeight() ||\n right < table.getFrozenColsWidth() ||\n left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n ) {\n // 范围外\n return false;\n }\n const { offsetHeight, offsetWidth } = element;\n if (top > offsetHeight) {\n return false;\n }\n if (left > offsetWidth) {\n return false;\n }\n return true;\n }\n _bindToCell(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement },\n confine?: boolean,\n arrowMark?: boolean\n ): boolean {\n const rootElement = this._rootElement;\n const rect = table.getCellRangeRelativeRect({ col, row });\n const element = table.internalProps.tooltip.parentElement;\n const containerWidth = table.internalProps.element.offsetWidth;\n const { width } = rect;\n if (rootElement) {\n if (rootElement.parentElement !== element) {\n element.appendChild(rootElement);\n }\n rootElement.style.left = `0px`;\n // 边界碰撞检测\n let tooltipY: number;\n let tooltipX: number;\n //设置最宽尺寸\n const maxWidth = Math.min(containerWidth * 0.8, width * 4);\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth; //Math.min(Math.max(rootElement.clientWidth, width), maxWidth);\n const rootElementHeight = rootElement.clientHeight;\n if (position || referencePosition) {\n const tooltipPosition = this.getComputedPosition(\n table,\n col,\n row,\n position,\n referencePosition,\n confine,\n arrowMark\n );\n tooltipX = tooltipPosition.x;\n tooltipY = tooltipPosition.y;\n } else {\n return false;\n }\n\n rootElement.style.left = `${tooltipX}px`;\n rootElement.style.top = `${tooltipY}px`;\n // rootElement.style.width=rootElementWidth+'px';\n if (isMobile()) {\n rootElement.style.fontSize = '11px';\n }\n\n // 判断当前tooltip范围是否与tooltip重合\n const { x1: menuLeft, x2: menuRight, y1: menuTop, y2: menuBottom } = table.stateManager.menu.bounds;\n const tooltipLeft = tooltipX;\n const tooltipRight = tooltipLeft + rootElementWidth;\n const tooltipTop = tooltipY;\n const tooltipBottom = tooltipLeft + rootElementHeight;\n if (\n table.stateManager.menu.isShow &&\n menuLeft < tooltipRight &&\n menuRight > tooltipLeft &&\n menuBottom > tooltipTop &&\n menuTop < tooltipBottom\n ) {\n return false;\n }\n return true;\n }\n return false;\n }\n private getComputedPosition(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: { rect: RectProps; placement?: Placement },\n confine?: boolean,\n arrowMark?: boolean\n ) {\n const rootElement = this._rootElement;\n const rect = table.getCellRangeRelativeRect({ col, row });\n const { x: parentX, y: parentY } = table.internalProps.tooltip.parentElement.getBoundingClientRect();\n const {\n width: containerWidth,\n height: containerHeight,\n x,\n y\n } = table.internalProps.element.getBoundingClientRect();\n // const { width: containerWidth, height: containerHeight } = document.body.getBoundingClientRect();\n const { width } = rect;\n // 边界碰撞检测\n let tooltipY: number;\n let tooltipX: number;\n //设置最宽尺寸\n const maxWidth = Math.min(containerWidth * 0.8, width * 4);\n rootElement.style.maxWidth = `${maxWidth}px`;\n //计算弹出框的宽度\n const rootElementWidth = rootElement.clientWidth; //Math.min(Math.max(rootElement.clientWidth, width), maxWidth);\n const rootElementHeight = rootElement.clientHeight;\n // this._triangleElement.setAttribute('style', '');\n const triangleHeight = arrowMark ? 6 : 0;\n if (position) {\n tooltipX = position.x;\n tooltipY = position.y + triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.top = '-5px';\n } else if (referencePosition) {\n let placement = referencePosition.placement ?? Placement.bottom;\n const referenceXMiddle = referencePosition.rect.left + referencePosition.rect.width / 2;\n const referenceYMiddle = referencePosition.rect.top + referencePosition.rect.height / 2;\n const referenceTop = referencePosition.rect.top;\n const referenceBottom = referencePosition.rect.bottom;\n const referenceLeft = referencePosition.rect.left;\n const referenceRight = referencePosition.rect.right;\n\n let callCount = 0;\n /** 根据placement计算弹出框的位置 躲避策略[dom的这块先去除 dom可以超出显示]:根据顺时针方向依次检测placement */\n const adjustPosition = () => {\n callCount++;\n if (callCount >= 4) {\n return;\n }\n this.removeStyleFromTriangle();\n if (placement === Placement.top) {\n tooltipX = referenceXMiddle - rootElementWidth / 2;\n tooltipY = referenceTop - rootElementHeight - triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.bottom = '-5px';\n\n // 判断如果超出左右范围则靠边显示\n if (confine && tooltipY < 0) {\n placement = Placement.right;\n adjustPosition();\n }\n } else if (placement === Placement.bottom) {\n tooltipX = referenceXMiddle - rootElementWidth / 2;\n tooltipY = referenceBottom + triangleHeight;\n this._triangleElement.style.left = '50%';\n this._triangleElement.style.marginLeft = '-5px';\n this._triangleElement.style.top = '-5px';\n if (confine && tooltipY + rootElementHeight > containerHeight) {\n placement = Placement.left;\n adjustPosition();\n }\n } else if (placement === Placement.left) {\n tooltipY = referenceYMiddle - rootElementHeight / 2;\n tooltipX = referenceLeft - rootElementWidth - triangleHeight;\n this._triangleElement.style.top = '50%';\n this._triangleElement.style.marginTop = '-5px';\n this._triangleElement.style.right = '-5px';\n if (confine && tooltipX < 0) {\n placement = Placement.top;\n adjustPosition();\n }\n } else if (placement === Placement.right) {\n tooltipY = referenceYMiddle - rootElementHeight / 2;\n tooltipX = referenceRight + triangleHeight;\n this._triangleElement.style.top = '50%';\n this._triangleElement.style.marginTop = '-5px';\n this._triangleElement.style.left = '-5px';\n if (confine && tooltipX + rootElementWidth > containerWidth) {\n placement = Placement.bottom;\n adjustPosition();\n }\n }\n };\n adjustPosition();\n }\n // 判断如果超出左右范围则靠边显示\n if (confine) {\n if (tooltipX < 0) {\n tooltipX = 0;\n } else if (tooltipX + rootElement.offsetWidth > containerWidth) {\n tooltipX = containerWidth - rootElement.offsetWidth;\n }\n }\n return {\n x: tooltipX + x - parentX,\n y: tooltipY + y - parentY\n };\n }\n private removeStyleFromTriangle() {\n this._triangleElement.style.left = '';\n this._triangleElement.style.right = '';\n this._triangleElement.style.top = '';\n this._triangleElement.style.bottom = '';\n this._triangleElement.style.marginLeft = '';\n this._triangleElement.style.marginTop = '';\n }\n _locate(\n table: BaseTableAPI,\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n },\n confine?: boolean\n ) {\n const tooltipPosition = this.getComputedPosition(table, col, row, position, referencePosition, confine);\n const tooltipX = tooltipPosition.x;\n const tooltipY = tooltipPosition.y;\n this._rootElement.style.left = `${tooltipX}px`;\n this._rootElement.style.top = `${tooltipY}px`;\n }\n}\n","import { Env } from '../../../tools/env';\n\nexport function importStyle() {\n if (Env.mode === 'node') {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-tooltip-styleSheet';\n styleElement.textContent = `\n@keyframes vtable__bubble-tooltip-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__bubble-tooltip-element {\n\tposition: absolute;\n\t\n\t// pointer-events: none;\n\t//user-select: none;\n\tmax-width: 300px;\n\tz-index: 99999;\n\n\tbackground: #FFFFFF;\n border: 1px solid #E6E8ED;\n box-sizing: border-box;\n border-radius: 4px;\n box-shadow: 0px 2px 4px rgb(27 31 35 / 8%);\n color: #141414;\n font-size: 13px;\n}\n.vtable__bubble-tooltip-element--hidden {\n\topacity: 0;\n pointer-events: none;\n\tuser-select: none;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n}\n.vtable__bubble-tooltip-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__bubble-tooltip-element--shown-animation 150ms ease-out;\n}\n.vtable__bubble-tooltip-element__content {\n\t/* font-size: .75rem; */\n\tpadding: 6px 8px;\n\tmin-height: 1em;\n\tline-height: 1.5;\n\twidth: 100%;\n\tdisplay: block;\n\twhite-space: pre-wrap;\n\tmargin: 0;\n\tbox-sizing: border-box;\n\toverflow: auto;\n\tword-wrap: break-word;\n\tposition: relative;\n\tbackground-color: #FFF;\n\tz-index: 2;\n\tborder-radius: 4px;\n}\n/* WebKit Microsoft Edge(新版): */\n.vtable__bubble-tooltip-element__content::-webkit-scrollbar {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n/* Opera Firefox */\n.vtable__bubble-tooltip-element__content > scrollbar-track {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n/* Internet Explorer 11 和 Microsoft Edge(旧版) */\n.vtable__bubble-tooltip-element__content > scrollbar {\n width: 0;\n height: 0;\n background-color: transparent;\n}\n.vtable__bubble-tooltip-element__triangle {\n\t/* font-size: .75rem; */\n\tposition: absolute;\n\twidth: 10px;\n\theight: 10px;\n\tdisplay: block;\n\ttransform: rotate(45deg);\n transform-origin: 50% 50% 0;\n\tz-index: 1;\n\tbackground-color: #FFF;\n\tborder: 1px solid #E6E8ED;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n","import { BaseTooltip } from './BaseTooltip';\nimport { BubbleTooltipElement } from './logic/BubbleTooltipElement';\n\n// export class Tooltip extends BaseTooltip {\n// createTooltipElementInternal(): TooltipElement {\n// return new TooltipElement();\n// }\n// }\n\nexport class BubbleTooltip extends BaseTooltip {\n createTooltipElementInternal(): BubbleTooltipElement {\n return new BubbleTooltipElement();\n }\n}\n","import type { CellRange, RectProps } from '../../ts-types';\nimport type { Placement } from '../../ts-types';\nimport type { BaseTooltip } from './BaseTooltip';\nimport { BubbleTooltip } from './Tooltip';\nimport { cellInRange } from '../../tools/helper';\nimport { isMobile } from '../../tools/util';\n// import { DG_EVENT_TYPE } from '../core/DG_EVENT_TYPE';\nimport type { TooltipOptions } from '../../ts-types/tooltip';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { isFunction } from '@visactor/vutils';\nconst TOOLTIP_INSTANCE_FACTORY = {\n // tooltip(table: BaseTableAPI): BaseTooltip {\n // return new Tooltip(table);\n // },\n 'bubble-tooltip': function (table: BaseTableAPI): BaseTooltip {\n return new BubbleTooltip(table);\n }\n};\ntype AttachInfo = {\n instance?: BaseTooltip;\n range: CellRange;\n tooltipOptions: TooltipOptions;\n};\nexport interface ITooltipHandler {\n new (table: BaseTableAPI, confine: boolean): TooltipHandler;\n}\n\nexport class TooltipHandler {\n private _table: BaseTableAPI;\n private _tooltipInstances?: { [type: string]: BaseTooltip };\n private _attachInfo?: AttachInfo | null;\n private confine?: boolean; //弹出框是否需要限定在canvas区域\n constructor(table: BaseTableAPI, confine: boolean) {\n this._table = table;\n this._tooltipInstances = {};\n this._bindTableEvent(table);\n this.confine = confine;\n }\n release(): void {\n const tooltipInstances = this._tooltipInstances;\n for (const k in tooltipInstances) {\n tooltipInstances[k]?.release?.();\n }\n delete this._tooltipInstances;\n this._attachInfo = null;\n }\n _bindToCell(col: number, row: number, tooltipOptions?: TooltipOptions): void {\n const info = this._attachInfo;\n const instance = this._getTooltipInstanceInfo(col, row);\n if (info && (!instance || info.instance !== instance)) {\n info.instance?.unbindTooltipElement();\n this._attachInfo = null;\n }\n if (!instance) {\n return;\n }\n // const { instance, info: tooltipInstanceInfo } = instanceInfo;\n const attach = instance && instance.bindTooltipElement(col, row, tooltipOptions, this.confine);\n if (attach) {\n const range = this._table.getCellRange(col, row);\n this._attachInfo = { range, instance, tooltipOptions };\n }\n }\n _move(col: number, row: number, tooltipOptions: TooltipOptions): void {\n const info = this._attachInfo;\n if (!info || !cellInRange(info.range, col, row)) {\n return;\n }\n const { instance } = info;\n instance?.moveTooltipElement(col, row, tooltipOptions, this.confine);\n }\n moveToPosition(\n col: number,\n row: number,\n position?: { x: number; y: number },\n referencePosition?: {\n rect: RectProps;\n placement?: Placement;\n }\n ): void {\n const info = this._attachInfo;\n if (!info || !cellInRange(info.range, col, row)) {\n return;\n }\n const { instance } = info;\n this._attachInfo.tooltipOptions.position = position;\n this._attachInfo.tooltipOptions.referencePosition = referencePosition;\n instance?.locateTooltipElement(col, row, position, referencePosition, this.confine);\n }\n _unbindFromCell(): void {\n const info = this._attachInfo;\n if (!info) {\n return;\n }\n const { instance } = info;\n instance?.unbindTooltipElement();\n this._attachInfo = null;\n }\n _isBindCell(col: number, row: number): boolean {\n const info = this._attachInfo;\n if (!info) {\n return false;\n }\n return cellInRange(info.range, col, row);\n }\n _bindTableEvent(table: BaseTableAPI): void {\n // (table.options.hover?.isShowTooltip || table.options.tooltip?.isShowOverflowTextTooltip) &&\n table.on(TABLE_EVENT_TYPE.MOUSEENTER_CELL, e => {\n //移动端不监听mousemove事件 (修改移动端tooltip时加的isMobile判断)\n if (isMobile()) {\n return;\n }\n // dropDownMenu区域不响应\n const { x1: left, x2: right, y1: top, y2: bottom } = table.stateManager.menu.bounds;\n if (\n table.stateManager.menu.isShow &&\n typeof e.x === 'number' &&\n typeof e.y === 'number' &&\n e.x > left &&\n e.x < right &&\n e.y > top &&\n e.y < bottom\n ) {\n return;\n }\n const { col, row } = e;\n this.showTooltip(col, row);\n // if (e.related) {\n // if (this._isBindCell(col, row)) {\n // return;\n // }\n // }\n });\n table.on(TABLE_EVENT_TYPE.MOUSEMOVE_CELL, e => {\n //移动端不监听mousemove事件 (修改移动端tooltip时加的isMobile判断)\n if (isMobile()) {\n return;\n }\n if (this._attachInfo?.tooltipOptions?.referencePosition) {\n const position = this._attachInfo.tooltipOptions.referencePosition;\n const { event } = e;\n const { left, right, top, bottom } = position.rect;\n const abstractPos = table._getMouseAbstractPoint(event, false);\n if (\n !(\n abstractPos.inTable &&\n abstractPos.x >= left - 5 &&\n abstractPos.x <= right + 5 &&\n abstractPos.y >= top - 5 &&\n abstractPos.y <= bottom + 5\n )\n ) {\n // 这里加5px的判断buffer\n this._unbindFromCell();\n }\n }\n // dropDownMenu区域不响应\n if (this._attachInfo && table.stateManager.menu.isShow) {\n this._bindToCell(e.col, e.row);\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_CELL, e => {\n // if (e.related) {\n // if (this._isBindCell(e.related.col, e.related.row)) {\n // return;\n // }\n // }\n this._unbindFromCell();\n });\n table.on(TABLE_EVENT_TYPE.SELECTED_CELL, e => {\n if (this._isBindCell(e.col, e.row)) {\n this._unbindFromCell();\n }\n });\n table.on(TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, e => {\n this._unbindFromCell();\n });\n table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n this._unbindFromCell();\n // const info = this._attachInfo;\n // if (info?.tooltipOptions && info?.range?.start) {\n // const { col, row } = info.range.start;\n // const rect = table.getCellRangeRelativeRect({ col, row });\n // info.tooltipOptions.referencePosition.rect = rect;\n // this._move(info.range.start.col, info.range.start.row, info.tooltipOptions);\n // }\n });\n }\n showTooltip(col: number, row: number) {\n let tooltipOption;\n const table = this._table;\n const headerDescription = table.getHeaderDescription(col, row);\n if (headerDescription) {\n const rect = table.getCellRangeRelativeRect({ col, row });\n tooltipOption = {\n content: headerDescription,\n referencePosition: {\n placement: table.internalProps.tooltip.position,\n rect\n },\n disappearDelay: table.internalProps.tooltip.overflowTextTooltipDisappearDelay ?? 0,\n style: table.theme.tooltipStyle\n };\n } else if (\n isFunction(table.internalProps.tooltip?.isShowOverflowTextTooltip)\n ? table.internalProps.tooltip.isShowOverflowTextTooltip(col, row, table)\n : table.internalProps.tooltip.isShowOverflowTextTooltip\n ) {\n const overflowText = table.getCellOverflowText(col, row);\n const rect = table.getCellRangeRelativeRect({ col, row });\n if (overflowText) {\n tooltipOption = {\n content: headerDescription\n ? `${headerDescription}\n ${overflowText}`\n : overflowText,\n referencePosition: {\n placement: table.internalProps.tooltip.position,\n rect\n },\n disappearDelay: table.internalProps.tooltip.overflowTextTooltipDisappearDelay ?? 0,\n style: table.theme.tooltipStyle\n };\n }\n }\n if (tooltipOption) {\n this._bindToCell(col, row, tooltipOption);\n } else {\n this._unbindFromCell();\n }\n }\n _getTooltipInstanceInfo(col: number, row: number): BaseTooltip | null {\n const table = this._table;\n const tooltipInstances = this._tooltipInstances;\n // const info = getTooltipInstanceInfo(table, col, row, tooltipOptions);\n // if (!info) {\n // return null;\n // }\n const tooltipType = 'bubble-tooltip';\n // const { tooltipType } = info;\n const instance =\n (tooltipInstances && tooltipInstances[tooltipType]) ||\n (tooltipInstances && (tooltipInstances[tooltipType] = TOOLTIP_INSTANCE_FACTORY[tooltipType](table)));\n return instance;\n }\n isBinded(tooltipOptions: TooltipOptions) {\n if (JSON.stringify(tooltipOptions) === JSON.stringify(this._attachInfo?.tooltipOptions)) {\n return true;\n }\n return false;\n }\n}\n","import { Factory } from '../core/factory';\nimport { getAxisConfigInPivotChart } from '../layout/chart-helper/get-axis-config';\nimport { CartesianAxis } from './axis/axis';\nimport { computeAxisComponentHeight, computeAxisComponentWidth } from './axis/get-axis-component-size';\nimport { EmptyTip } from './empty-tip/empty-tip';\nimport { createLegend } from './legend/create-legend';\nimport { MenuHandler } from './menu/dom/MenuHandler';\nimport { Title } from './title/title';\nimport { TooltipHandler } from './tooltip/TooltipHandler';\n\nexport const registerAxis = () => {\n Factory.registerComponent('axis', CartesianAxis);\n Factory.registerFunction('computeAxisComponentWidth', computeAxisComponentWidth);\n Factory.registerFunction('computeAxisComponentHeight', computeAxisComponentHeight);\n Factory.registerFunction('getAxisConfigInPivotChart', getAxisConfigInPivotChart);\n};\n\nexport const registerEmptyTip = () => {\n Factory.registerComponent('emptyTip', EmptyTip);\n};\n\nexport const registerLegend = () => {\n Factory.registerFunction('createLegend', createLegend);\n};\n\nexport const registerMenu = () => {\n Factory.registerComponent('menuHandler', MenuHandler);\n};\n\nexport const registerTitle = () => {\n Factory.registerComponent('title', Title);\n};\n\nexport const registerTooltip = () => {\n Factory.registerComponent('tooltipHandler', TooltipHandler);\n};\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { ListTable } from '../ListTable';\nimport { Group } from '../scenegraph/graphic/group';\nimport { updateCell } from '../scenegraph/group-creater/cell-helper';\nimport type { Graphic } from './../vrender';\nimport { createRect } from './../vrender';\nimport { Factory } from '../core/factory';\nimport { getTargetCell } from '../event/util';\n\nexport interface IListTreeStickCellPlugin {\n new (table: ListTable): ListTreeStickCellPlugin;\n}\n\nexport class ListTreeStickCellPlugin {\n table: ListTable;\n titleRows: number[] = [];\n showedTitleRows: number[] = [];\n rowNow: number = -1;\n skipStartRow: number = -1;\n skipEndRow: number = -1;\n\n constructor(table: ListTable) {\n this.table = table;\n\n this.table.on('scroll', e => {\n if (e.scrollDirection !== 'vertical') {\n return;\n }\n this.updateGroupTitle();\n });\n\n this.table.on('tree_hierarchy_state_change', e => {\n this.updateGroupTitle();\n });\n\n this.table.on('resize_column', e => {\n this.updateGroupTitle();\n });\n }\n\n updateGroupTitle() {\n // this.updateGroupTitleInfo();\n if (this.table.scrollTop === 0) {\n // do nothing\n this.titleRows = [];\n this.showedTitleRows = [];\n } else if (\n this.skipStartRow !== -1 &&\n this.skipEndRow !== -1 &&\n this.skipStartRow !== this.table.scenegraph.proxy.bodyTopRow - 1\n ) {\n if (\n this.table.scenegraph.proxy.screenTopRow <= this.skipStartRow ||\n this.table.scenegraph.proxy.screenTopRow >= this.skipEndRow\n ) {\n this.skipStartRow = -1;\n this.skipEndRow = -1;\n this.updateGroupTitleInfo();\n } else {\n // const row = this.table.scenegraph.proxy.screenTopRow + titleRows.length;\n // nowRow = row;\n // renderLast = true;\n // do nothing\n }\n } else {\n this.skipStartRow = -1;\n this.skipEndRow = -1;\n this.updateGroupTitleInfo();\n }\n\n this.updateScenegraph();\n }\n\n updateGroupTitleInfo() {\n this.rowNow = this.table.scenegraph.proxy.screenTopRow + this.titleRows.length;\n const recordIndex = this.table.getRecordIndexByCell(0, this.rowNow); // [0, 0, 6]/0\n const nextRecordIndex = this.table.getRecordIndexByCell(0, this.rowNow + 1);\n this.getTitleRowsByRecordIndex(recordIndex, nextRecordIndex);\n }\n\n getTitleRowsByRecordIndex(recordIndex: number | number[], nextRecordIndex: number | number[]) {\n const titleRecords = [];\n if (!isArray(recordIndex)) {\n recordIndex = [recordIndex];\n }\n if (!isArray(nextRecordIndex)) {\n nextRecordIndex = [nextRecordIndex];\n }\n\n for (let i = 0; i < recordIndex.length; i++) {\n const index = recordIndex.slice(0, i + 1);\n const record = this.table.dataSource.getRaw(index as unknown as number);\n titleRecords.push(record);\n }\n\n const titleRows = [];\n // const isTitle = !(recordIndex.length === (this.table.options.groupBy as any).length + 1);\n const isTitle = nextRecordIndex.length === recordIndex.length + 1;\n let titleIndex = recordIndex.slice(0, !isTitle ? recordIndex.length - 1 : recordIndex.length);\n const currentIndexedData = this.table.dataSource.currentIndexedData;\n const startIndex = this.rowNow - this.table.columnHeaderLevelCount;\n\n for (let i = startIndex; i >= 0; i--) {\n const currentIndex = currentIndexedData[i];\n if (isArray(currentIndex) && titleIndex.length === currentIndex.length) {\n let isMatch = true;\n for (let j = 0; j < currentIndex.length; j++) {\n if (currentIndex[j] !== titleIndex[j]) {\n isMatch = false;\n break;\n }\n }\n if (isMatch) {\n titleRows.push(i + this.table.columnHeaderLevelCount);\n titleIndex = titleIndex.slice(0, titleIndex.length - 1);\n }\n } else if (currentIndex === recordIndex[0]) {\n titleRows.push(i + this.table.columnHeaderLevelCount);\n break;\n }\n }\n\n this.titleRows = titleRows.reverse();\n }\n\n updateScenegraph() {\n const { table } = this;\n const { shadowGroup, shadowGroupFrozen } = prepareShadowRoot(table);\n\n this.showedTitleRows.length = 0;\n let skip = 0;\n for (let col = 0; col < table.colCount; col++) {\n let colGroup;\n if (col < table.frozenColCount) {\n colGroup = new Group({\n x: table.getColsWidth(0, col - 1),\n y: table.getFrozenRowsHeight()\n });\n shadowGroupFrozen.add(colGroup);\n } else {\n colGroup = new Group({\n x: table.getColsWidth(table.frozenColCount, col - 1),\n y: table.getFrozenRowsHeight()\n });\n shadowGroup.add(colGroup);\n }\n colGroup.col = col;\n for (let i = 0; i < this.titleRows.length; i++) {\n const row = this.titleRows[i];\n if (isSkipRow(row, this.rowNow, table.scenegraph.proxy.screenTopRow, this.titleRows)) {\n // skipOne = true;\n col === 0 && skip++;\n continue;\n }\n if (col === 0) {\n this.showedTitleRows.push(row);\n }\n const cell = table.scenegraph.getCell(col, row);\n if (cell.role === 'cell') {\n const newCell = cloneGraphic(cell);\n newCell.setAttributes({\n y: i * 40\n });\n colGroup.add(newCell);\n } else {\n // create a fake cellGroup for title\n const newCell = updateCell(col, row, table, true, true);\n newCell.setAttributes({\n y: i * 40\n });\n colGroup.add(newCell);\n }\n }\n }\n\n if (skip > 0 && this.skipStartRow === -1 && this.skipEndRow === -1) {\n this.skipStartRow = table.scenegraph.proxy.screenTopRow - 1;\n this.skipEndRow = table.scenegraph.proxy.screenTopRow + 1;\n }\n }\n}\n\nfunction isSkipRow(row: number, topRow: number, screenTopRow: number, titleRows: number[]) {\n if (row === topRow && row !== screenTopRow + titleRows.length - 1) {\n return true;\n }\n\n const rowIndex = titleRows.indexOf(row);\n const rowLimit = screenTopRow + rowIndex + 1;\n if (row === rowLimit && row < topRow) {\n return true;\n }\n\n return false;\n}\n\nfunction cloneGraphic(graphic: Graphic) {\n const newGraphic = graphic.clone();\n (newGraphic as any).role = (graphic as any).role;\n (newGraphic as any).col = (graphic as any).col;\n (newGraphic as any).row = (graphic as any).row;\n (newGraphic as any).mergeStartCol = (graphic as any).mergeStartCol;\n (newGraphic as any).mergeStartRow = (graphic as any).mergeStartRow;\n (newGraphic as any).mergeEndCol = (graphic as any).mergeEndCol;\n (newGraphic as any).mergeEndRow = (graphic as any).mergeEndRow;\n (newGraphic as any).contentWidth = (graphic as any).contentWidth;\n (newGraphic as any).contentHeight = (graphic as any).contentHeight;\n\n if ((newGraphic as any).role === 'cell') {\n // hack for vrender not support shadow group pick\n const hackRect = createRect({\n x: 0,\n y: 0,\n width: newGraphic.attribute.width,\n height: newGraphic.attribute.height\n });\n newGraphic.add(hackRect);\n }\n\n if (graphic.type === 'group') {\n const newGroup = newGraphic as Group;\n graphic.forEachChildren(child => {\n const newChild = cloneGraphic(child as any);\n newGroup.add(newChild);\n });\n }\n return newGraphic;\n}\n\nfunction prepareShadowRoot(table: ListTable) {\n const colHeaderGroup = table.scenegraph.colHeaderGroup;\n const cornerHeaderGroup = table.scenegraph.cornerHeaderGroup;\n if (!colHeaderGroup.border) {\n const hackBorder = createRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n cursor: 'pointer'\n });\n colHeaderGroup.add(hackBorder);\n colHeaderGroup.border = hackBorder;\n (hackBorder as any).attachShadow(hackBorder.shadowRoot);\n hackBorder.name = 'border-rect';\n\n hackBorder.addEventListener('click', (e: any) => {\n const titleRows = table.listTreeStickCellPlugin.titleRows;\n const { shadowTarget } = e.pickParams;\n const cellGroup = getTargetCell(shadowTarget);\n const { col, row } = cellGroup;\n const rowIndex = titleRows.indexOf(row);\n // table.scrollToCell({ col, row: row - rowIndex });\n scrollToRow(row - rowIndex, table);\n });\n }\n\n if (!cornerHeaderGroup.border) {\n const hackBorder = createRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n cursor: 'pointer'\n });\n cornerHeaderGroup.add(hackBorder);\n cornerHeaderGroup.border = hackBorder;\n (hackBorder as any).attachShadow(hackBorder.shadowRoot);\n hackBorder.name = 'border-rect';\n\n hackBorder.addEventListener('click', (e: any) => {\n const titleRows = table.listTreeStickCellPlugin.titleRows;\n const { shadowTarget } = e.pickParams;\n const cellGroup = getTargetCell(shadowTarget);\n const { col, row } = cellGroup;\n const rowIndex = titleRows.indexOf(row);\n // table.scrollToCell({ col, row: row - rowIndex });\n scrollToRow(row - rowIndex, table);\n });\n }\n\n const shadowGroup = colHeaderGroup.border.shadowRoot;\n const shadowGroupFrozen = cornerHeaderGroup.border.shadowRoot;\n shadowGroup.removeAllChild();\n shadowGroupFrozen.removeAllChild();\n\n return { shadowGroup, shadowGroupFrozen };\n}\n\nfunction scrollToRow(row: number, table: ListTable) {\n const drawRange = table.getDrawRange();\n\n if (isValid(row) && row >= table.frozenRowCount) {\n const frozenHeight = table.getFrozenRowsHeight();\n const top = table.getRowsHeight(0, row - 1);\n table.scrollTop = Math.min(top - frozenHeight, table.getAllRowsHeight() - drawRange.height) - 1;\n }\n table.scenegraph.updateNextFrame();\n}\n\nexport const registerListTreeStickCellPlugin = () => {\n Factory.registerComponent('listTreeStickCellPlugin', ListTreeStickCellPlugin);\n};\n\n// export type IListTreeStickCellPlugin = typeof ListTreeStickCellPlugin;\n","/* eslint-disable sort-imports */\nimport { extend } from './tools/helper';\nimport { chartTypes as plugins } from './plugins/chartModules';\nconst builtin = {};\nexport function get(): { [key: string]: any } {\n return extend(builtin, plugins);\n}\n","import { Group } from '../../graphic/group';\nimport { Chart } from '../../graphic/chart';\nimport * as registerChartTypes from '../../../chartModule';\nimport { getFunctionalProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { IThemeSpec } from './../../../vrender';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nexport function createChartCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n dataValue: string,\n chartModule: any,\n chartSpec: any,\n chartInstance: any,\n dataId: string | Record,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n isShareChartSpec: true,\n isAsync: boolean,\n isNoChartDataRenderNothing: boolean\n) {\n // 获取注册的chart图表类型\n const registerCharts = registerChartTypes.get();\n const ClassType = registerCharts[chartModule];\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n cellGroup.AABBBounds.width(); // TODO 需要底层VRender修改\n // chart\n if ((isNoChartDataRenderNothing && Array.isArray(table.getCellValue(col, row))) || !isNoChartDataRenderNothing) {\n const chartGroup = new Chart(isShareChartSpec, {\n stroke: false,\n x: padding[3],\n y: padding[0],\n // canvas: table.canvas,\n canvas: table.canvas ?? (table.scenegraph.stage.window.getContext().canvas as unknown as HTMLCanvasElement),\n mode: table.options.mode,\n modeParams: table.options.modeParams,\n spec: table.options.specTransformInCell ? table.options.specTransformInCell(chartSpec, col, row) : chartSpec,\n ClassType,\n width: width - padding[3] - padding[1],\n height: height - padding[2] - padding[0],\n chartInstance,\n dataId,\n data: table.getCellValue(col, row) || [],\n cellPadding: padding,\n dpr: table.internalProps.pixelRatio,\n // viewBox: {\n // x1: Math.ceil(cellGroup.globalAABBBounds.x1 + padding[3] + table.scrollLeft),\n // x2: Math.ceil(cellGroup.globalAABBBounds.x1 + width - padding[1] + table.scrollLeft),\n // y1: Math.ceil(cellGroup.globalAABBBounds.y1 + padding[0] + table.scrollTop),\n // y2: Math.ceil(cellGroup.globalAABBBounds.y1 + height - padding[2] + table.scrollTop)\n // },\n axes: table.isPivotChart() ? table.internalProps.layoutMap.getChartAxes(col, row) : [],\n // clipRect: {\n // left: cellGroup.globalAABBBounds.x1 + (table as any).tableX + padding[3],\n // top: cellGroup.globalAABBBounds.y1 + (table as any).tableY + padding[0],\n // width: width - padding[1] - padding[3], //cellGroup.globalAABBBounds.width() - padding[1] - padding[3],\n // height: height - padding[0] - padding[2],\n // },\n tableChartOption: table.options.chartOption,\n col,\n row\n });\n cellGroup.appendChild(chartGroup);\n // 将生成的实例存到layoutMap中 共享\n table.internalProps.layoutMap.setChartInstance(col, row, chartGroup.chartInstance);\n }\n return cellGroup;\n}\n\nexport type CreateChartCellGroup = typeof createChartCellGroup;\n","import type { IThemeSpec } from './../../../vrender';\nimport { Group } from '../../graphic/group';\nimport type { CellInfo, CellRange, CheckboxColumnDefine, CheckboxStyleOption, SparklineSpec } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { isObject } from '@visactor/vutils';\nimport type { CheckboxAttributes } from '@visactor/vrender-components';\nimport { CheckBox } from '@visactor/vrender-components';\nimport { getHierarchyOffset } from '../../utils/get-hierarchy-offset';\nimport { getOrApply } from '../../../tools/helper';\nimport type { CheckboxStyle } from '../../../body-helper/style/CheckboxStyle';\nimport { getProp } from '../../utils/get-prop';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nexport function createCheckboxCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n colWidth: number,\n width: number,\n height: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n define: CheckboxColumnDefine,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n\n let icons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n icons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(icons) && icons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n icons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n }\n\n // checkbox\n const checkboxComponent = createCheckbox(\n col,\n row,\n colWidth - iconWidth,\n width,\n height,\n padding,\n cellTheme,\n define,\n table\n );\n if (checkboxComponent) {\n cellGroup.appendChild(checkboxComponent);\n }\n\n checkboxComponent.render();\n\n width -= padding[1] + padding[3] + iconWidth;\n height -= padding[0] + padding[2];\n if (textAlign === 'center') {\n checkboxComponent.setAttribute(\n 'x',\n padding[3] + cellLeftIconWidth + (width - checkboxComponent.AABBBounds.width()) / 2\n );\n } else if (textAlign === 'right') {\n checkboxComponent.setAttribute('x', padding[3] + cellLeftIconWidth + width - checkboxComponent.AABBBounds.width());\n } else {\n checkboxComponent.setAttribute('x', padding[3] + cellLeftIconWidth);\n }\n\n if (textBaseline === 'middle') {\n checkboxComponent.setAttribute('y', padding[0] + (height - checkboxComponent.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n checkboxComponent.setAttribute('y', padding[0] + height - checkboxComponent.AABBBounds.height());\n } else {\n checkboxComponent.setAttribute('y', padding[0]);\n }\n\n return cellGroup;\n}\n\nfunction createCheckbox(\n col: number,\n row: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n cellTheme: IThemeSpec,\n define: CheckboxColumnDefine,\n table: BaseTableAPI\n) {\n const style = table._getCellStyle(col, row) as CheckboxStyle;\n const size = getProp('size', style, col, row, table);\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', style, col, row, table);\n const defaultFill = getProp('defaultFill', style, col, row, table);\n const defaultStroke = getProp('defaultStroke', style, col, row, table);\n const disableFill = getProp('disableFill', style, col, row, table);\n const checkedFill = getProp('checkedFill', style, col, row, table);\n const checkedStroke = getProp('checkedStroke', style, col, row, table);\n const disableCheckedFill = getProp('disableCheckedFill', style, col, row, table);\n const disableCheckedStroke = getProp('disableCheckedStroke', style, col, row, table);\n const checkIconImage = getProp('checkIconImage', style, col, row, table);\n const indeterminateIconImage = getProp('indeterminateIconImage', style, col, row, table);\n\n const value = table.getCellValue(col, row) as string | { text: string; checked: boolean; disable: boolean } | boolean;\n const dataValue = table.getCellOriginValue(col, row);\n let isChecked;\n let isDisabled;\n let text = (value as string) ?? '';\n if (isObject(value)) {\n isChecked = value.checked;\n isDisabled = value.disable;\n text = value.text ?? '';\n } else if (typeof value === 'boolean') {\n isChecked = value;\n text = '';\n }\n isChecked = table.stateManager.syncCheckedState(col, row, define.field as string | number, isChecked);\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const cellStyle = table._getCellStyle(col, row) as CheckboxStyleOption; // to be fixed\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const { lineClamp } = cellStyle;\n const { checked, disable } = define;\n if (isChecked === undefined || isChecked === null || typeof isChecked === 'function') {\n //isChecked无效值 取全局设置的值\n const globalChecked = getOrApply(checked as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n isChecked = table.stateManager.syncCheckedState(col, row, define.field as string | number, globalChecked);\n }\n const globalDisable = getOrApply(disable as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n const autoColWidth = colWidth === 'auto';\n const autoRowHeight = table.isAutoRowHeight(row);\n\n const attribute = {\n text: text.length === 1 ? text[0] : text,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3] + hierarchyOffset) - size - spaceBetweenTextAndIcon,\n // fill: true,\n textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: autoRowHeight ? -1 : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: hierarchyOffset,\n whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n };\n const testAttribute = cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute;\n const checkboxAttributes: CheckboxAttributes = {\n x: 0,\n y: 0,\n text: testAttribute,\n icon: {\n width: Math.floor(size / 1.4), // icon : box => 10 : 14\n height: Math.floor(size / 1.4)\n },\n box: {\n width: size,\n height: size\n },\n spaceBetweenTextAndIcon,\n disabled: isDisabled ?? globalDisable ?? false\n };\n\n if (isChecked === 'indeterminate') {\n checkboxAttributes.checked = undefined;\n checkboxAttributes.indeterminate = true;\n } else {\n checkboxAttributes.checked = isChecked;\n checkboxAttributes.indeterminate = undefined;\n }\n defaultFill && (checkboxAttributes.box.fill = defaultFill);\n defaultStroke && (checkboxAttributes.box.stroke = defaultStroke);\n disableFill && (checkboxAttributes.box.disableFill = disableFill);\n checkedFill && (checkboxAttributes.box.checkedFill = checkedFill);\n checkedStroke && (checkboxAttributes.box.checkedStroke = checkedStroke);\n disableCheckedFill && (checkboxAttributes.box.disableCheckedFill = disableCheckedFill);\n disableCheckedStroke && (checkboxAttributes.box.disableCheckedStroke = disableCheckedStroke);\n checkIconImage && (checkboxAttributes.icon.checkIconImage = checkIconImage);\n indeterminateIconImage && (checkboxAttributes.icon.indeterminateIconImage = indeterminateIconImage);\n\n const checkbox = new CheckBox(checkboxAttributes);\n checkbox.name = 'checkbox';\n\n return checkbox;\n}\n\nexport type CreateCheckboxCellGroup = typeof createCheckboxCellGroup;\n","import type { IThemeSpec } from './../../../vrender';\nimport { Group } from '../../graphic/group';\nimport type { CellRange, RadioColumnDefine, RadioStyleOption } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { cos, isArray, isBoolean, isNumber, isObject, isValid, merge } from '@visactor/vutils';\nimport type { RadioAttributes } from '@visactor/vrender-components';\nimport { Radio } from '@visactor/vrender-components';\nimport { getHierarchyOffset } from '../../utils/get-hierarchy-offset';\nimport { getOrApply } from '../../../tools/helper';\nimport type { RadioStyle } from '../../../body-helper/style/RadioStyle';\nimport { getProp } from '../../utils/get-prop';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\nexport function createRadioCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n colWidth: number | 'auto',\n width: number,\n height: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n define: RadioColumnDefine,\n range: CellRange\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n lineCap: 'butt',\n\n clip: true,\n\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n // columnGroup?.addChild(cellGroup);\n columnGroup?.addCellGroup(cellGroup);\n }\n\n // radio\n const { width: radioWidth, height: radioHeight } = createRadio(\n col,\n row,\n colWidth,\n width,\n height,\n padding,\n cellTheme,\n define,\n cellGroup,\n range,\n table\n );\n\n // align in cell\n width -= padding[1] + padding[3];\n height -= padding[0] + padding[2];\n cellGroup.forEachChildren((radioComponent: Radio) => {\n if (textAlign === 'center') {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x + (width - radioWidth) / 2);\n } else if (textAlign === 'right') {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x + width - radioWidth);\n } else {\n radioComponent.setAttribute('x', padding[3] + radioComponent.attribute.x);\n }\n\n if (textBaseline === 'middle') {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y + (height - radioHeight) / 2);\n } else if (textBaseline === 'bottom') {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y + height - radioHeight);\n } else {\n radioComponent.setAttribute('y', padding[0] + radioComponent.attribute.y);\n }\n });\n\n return cellGroup;\n}\n\nexport type CreateRadioCellGroup = typeof createRadioCellGroup;\n\nfunction createRadio(\n col: number,\n row: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n cellTheme: IThemeSpec,\n define: RadioColumnDefine,\n cellGroup: Group,\n range: CellRange,\n table: BaseTableAPI\n) {\n const style = table._getCellStyle(col, row) as RadioStyle;\n let size = getProp('size', style, col, row, table);\n let innerRadius = getProp('innerRadius', style, col, row, table);\n let outerRadius = getProp('outerRadius', style, col, row, table);\n const spaceBetweenTextAndIcon = getProp('spaceBetweenTextAndIcon', style, col, row, table);\n const spaceBetweenRadio = getProp('spaceBetweenRadio', style, col, row, table);\n const defaultFill = getProp('defaultFill', style, col, row, table);\n const defaultStroke = getProp('defaultStroke', style, col, row, table);\n const disableFill = getProp('disableFill', style, col, row, table);\n const checkedFill = getProp('checkedFill', style, col, row, table);\n const checkedStroke = getProp('checkedStroke', style, col, row, table);\n const disableCheckedFill = getProp('disableCheckedFill', style, col, row, table);\n const disableCheckedStroke = getProp('disableCheckedStroke', style, col, row, table);\n\n // deal width actual size\n if (isNumber(outerRadius)) {\n size = outerRadius * 2;\n } else {\n outerRadius = Math.round(size / 2);\n }\n if (!isNumber(innerRadius) || innerRadius < 0) {\n innerRadius = Math.round((outerRadius / 7) * 3);\n }\n\n const value = table.getCellValue(col, row) as\n | string\n | boolean\n | string[]\n | { text: string; checked?: boolean; disable?: boolean }\n | { text: string; checked?: boolean; disable?: boolean }[];\n const dataValue = table.getCellOriginValue(col, row);\n const hierarchyOffset = getHierarchyOffset(col, row, table);\n const cellStyle = table._getCellStyle(col, row) as RadioStyleOption; // to be fixed\n const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const { lineClamp } = cellStyle;\n const autoColWidth = colWidth === 'auto';\n const autoRowHeight = table.isAutoRowHeight();\n\n const attribute = {\n // text: text.length === 1 ? text[0] : text,\n maxLineWidth: autoColWidth\n ? Infinity\n : cellWidth - (padding[1] + padding[3] + hierarchyOffset) - size - spaceBetweenTextAndIcon,\n // fill: true,\n textAlign: 'left',\n textBaseline: 'top',\n autoWrapText,\n lineClamp,\n wordBreak: 'break-word',\n // widthLimit: autoColWidth ? -1 : colWidth - (padding[1] + padding[3]),\n heightLimit: autoRowHeight ? -1 : cellHeight - Math.floor(padding[0] + padding[2]),\n pickable: false,\n dx: hierarchyOffset\n // whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n };\n const testAttribute = cellTheme.text ? (Object.assign({}, cellTheme.text, attribute) as any) : attribute;\n const radioAttributes: RadioAttributes = {\n x: 0,\n y: 0,\n text: testAttribute,\n circle: {\n innerRadius,\n outerRadius\n },\n spaceBetweenTextAndIcon\n };\n\n defaultFill && (radioAttributes.circle.fill = defaultFill);\n defaultStroke && (radioAttributes.circle.stroke = defaultStroke);\n disableFill && (radioAttributes.circle.disableFill = disableFill);\n checkedFill && (radioAttributes.circle.checkedFill = checkedFill);\n checkedStroke && (radioAttributes.circle.checkedStroke = checkedStroke);\n disableCheckedFill && (radioAttributes.circle.disableCheckedFill = disableCheckedFill);\n disableCheckedStroke && (radioAttributes.circle.disableCheckedStroke = disableCheckedStroke);\n\n let width = 0;\n let height = 0;\n const direction = define.radioDirectionInCell ?? 'vertical';\n if (isArray(value)) {\n value.forEach((item, index) => {\n const radioComponent = createSingleRadio(\n item,\n dataValue,\n index,\n col,\n row,\n define,\n autoWrapText,\n radioAttributes,\n table\n );\n if (radioComponent) {\n cellGroup.appendChild(radioComponent);\n }\n radioComponent.id = `radio-${range?.start.col ?? col}-${range?.start.row ?? row}-${index}`;\n\n radioComponent.render();\n const bounds = radioComponent.AABBBounds;\n if (direction === 'vertical') {\n radioComponent.setAttribute('y', height);\n height += bounds.height() + (index !== value.length - 1 ? spaceBetweenRadio : 0);\n width = Math.max(width, bounds.width());\n } else if (direction === 'horizontal') {\n radioComponent.setAttribute('x', width);\n width += bounds.width() + (index !== value.length - 1 ? spaceBetweenRadio : 0);\n height = Math.max(height, bounds.height());\n }\n });\n } else {\n const radioComponent = createSingleRadio(\n value,\n dataValue,\n undefined,\n col,\n row,\n define,\n autoWrapText,\n radioAttributes,\n table\n );\n if (radioComponent) {\n cellGroup.appendChild(radioComponent);\n }\n radioComponent.id = `radio-${range?.start.col ?? col}-${range?.start.row ?? row}`;\n radioComponent.render();\n const bounds = radioComponent.AABBBounds;\n width = bounds.width();\n height = bounds.height();\n }\n\n return { width, height };\n}\n\nfunction createSingleRadio(\n value: any,\n dataValue: any,\n indexInCell: number | undefined,\n col: number,\n row: number,\n define: RadioColumnDefine,\n autoWrapText: boolean,\n cellRadioAttributes: RadioAttributes,\n table: BaseTableAPI\n) {\n const isChecked = getChecked(value, dataValue, indexInCell, col, row, define, table);\n const isDisabled = getDisable(value, dataValue, col, row, define, table);\n const text = isObject(value) ? (value as any).text : isBoolean(value) ? '' : value ?? '';\n\n const radioAttributes = merge({}, cellRadioAttributes, {\n checked: isChecked,\n disabled: isDisabled,\n text: {\n text: text.length === 1 ? text[0] : text,\n whiteSpace: text.length === 1 && !autoWrapText ? 'no-wrap' : 'normal'\n },\n boundsPadding: 0\n });\n const radio = new Radio(radioAttributes);\n radio.name = 'radio';\n\n return radio;\n}\n\nfunction getChecked(\n value: any,\n dataValue: any,\n indexInCell: number | undefined,\n col: number,\n row: number,\n define: RadioColumnDefine,\n table: BaseTableAPI\n) {\n const radioType = define.radioCheckType ?? 'column';\n let isChecked;\n let globalChecked;\n if (isObject(value)) {\n isChecked = (value as any).checked;\n } else if (typeof value === 'boolean') {\n isChecked = value;\n }\n isChecked = table.stateManager.syncRadioState(\n col,\n row,\n define.field as string | number,\n radioType,\n indexInCell,\n isChecked\n );\n if (isChecked === undefined || isChecked === null || typeof isChecked === 'function') {\n //isChecked无效值 取全局设置的值\n globalChecked = getOrApply(define.checked as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n isChecked = table.stateManager.syncRadioState(\n col,\n row,\n define.field as string | number,\n radioType,\n indexInCell,\n globalChecked\n );\n }\n\n return isChecked ?? globalChecked ?? false;\n}\n\nfunction getDisable(\n value: any,\n dataValue: any,\n col: number,\n row: number,\n define: RadioColumnDefine,\n table: BaseTableAPI\n) {\n let isDisabled;\n if (isObject(value)) {\n isDisabled = (value as any).disable;\n }\n const globalDisable = getOrApply(define.disable as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n return isDisabled ?? globalDisable ?? false;\n}\n","import type { ILine, ISymbol, IThemeSpec } from './../../../vrender';\nimport { createLine, createSymbol } from './../../../vrender';\nimport { PointScale, LinearScale } from '@visactor/vscale';\nimport { isNumber, isValid } from '@visactor/vutils';\nimport { Group } from '../../graphic/group';\nimport type { CellInfo, SparklineSpec } from '../../../ts-types';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport type { ColumnData } from '../../../ts-types/list-table/layout-map/api';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\nconst xScale: PointScale = new PointScale();\nconst yScale: LinearScale = new LinearScale();\n\nexport function createSparkLineCellGroup(\n cellGroup: Group | null,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n isAsync: boolean\n) {\n // cell\n if (!cellGroup) {\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n }\n\n // chart\n const chartGroup = createSparkLine(col, row, width, height, padding, table);\n if (chartGroup) {\n cellGroup.appendChild(chartGroup);\n }\n\n return cellGroup;\n}\n\nexport type CreateSparkLineCellGroup = typeof createSparkLineCellGroup;\n\nfunction createSparkLine(\n col: number,\n row: number,\n width: number,\n height: number,\n padding: number[],\n table: BaseTableAPI\n): Group | undefined {\n //获取场景树对象,根据当前单元格位置更改其位置\n //待定 TODO group需要设置shape属性吗\n let sparklineSpec: SparklineSpec;\n let chartGroup: Group;\n const chartSpecRaw = (table.internalProps.layoutMap.getBody(col, row) as ColumnData).sparklineSpec;\n const dataValue = table.getCellValue(col, row) as unknown as any[];\n\n if (!Array.isArray(dataValue)) {\n return undefined;\n }\n\n const x = padding[3];\n const y = padding[0];\n width -= padding[1] + padding[3];\n height -= padding[0] + padding[2];\n const left = 0;\n // const top = y;\n // const right = x + width;\n const bottom = height;\n if (typeof chartSpecRaw === 'function') {\n // 动态组织spec\n const arg = {\n col,\n row,\n dataValue: table.getCellOriginValue(col, row) || '',\n value: table.getCellValue(col, row) || '',\n rect: table.getCellRangeRelativeRect(table.getCellRange(col, row)),\n table\n };\n sparklineSpec = chartSpecRaw(arg);\n chartGroup = createChartGroup(sparklineSpec, x, y, width, height);\n } else {\n sparklineSpec = chartSpecRaw;\n chartGroup = createChartGroup(chartSpecRaw, x, y, width, height);\n }\n\n // #region scale对x y轴映射\n const items: { x: number; y: number; defined?: boolean }[] = [];\n const dataItems: any[] = [];\n\n let xField;\n let yField;\n if (typeof sparklineSpec.xField === 'object') {\n xScale.domain(sparklineSpec.xField.domain);\n xField = sparklineSpec.xField.field;\n } else if (typeof sparklineSpec.xField === 'string') {\n const indexValues = dataValue.map((value: any) => value[sparklineSpec.xField as string]);\n xScale.domain(indexValues);\n xField = sparklineSpec.xField;\n } else {\n // xField未配置 data为数值数组的情况\n if (Array.isArray(dataValue)) {\n xScale.domain(Array.from({ length: dataValue.length }, (_, i) => i));\n xField = sparklineSpec.xField;\n }\n }\n xScale.range([0, width]);\n\n if (typeof sparklineSpec.yField === 'object') {\n yScale.domain(sparklineSpec.yField.domain);\n yField = sparklineSpec.yField.field;\n } else if (typeof sparklineSpec.yField === 'string') {\n // string类型 自动计算出domain\n // const values = dataValue.map((value: any) => value[sparklineSpec.yField as string]);\n const values = getYNumbers(dataValue, sparklineSpec.yField as string);\n yScale.domain([Math.min(...values), Math.max(...values)]);\n yField = sparklineSpec.yField;\n } else {\n // yField未配置 检查data是否为数值数组\n if (Array.isArray(dataValue)) {\n const values = getYNumbers(dataValue);\n yScale.domain([Math.min(...values), Math.max(...values)]);\n yField = sparklineSpec.yField;\n }\n }\n yScale.range([0, height]);\n\n if (typeof sparklineSpec.xField === 'object' && Array.isArray(sparklineSpec.xField.domain)) {\n // 如果xField.domain合法,需要按需补充null值点\n const values = dataValue.map((value: any) => value[(sparklineSpec.xField as any).field]);\n const domain = sparklineSpec.xField.domain;\n for (let i = 0; i < domain.length; i++) {\n let valid = false;\n for (let j = 0; j < values.length; j++) {\n // eslint-disable-next-line eqeqeq\n if (domain[i] === values[j]) {\n const data: any = dataValue[j];\n // 无效数据不进行scale,避免null被解析为0\n if (!isValid(data[xField]) || !isValid(data[yField])) {\n break;\n }\n items.push({\n x: left + xScale.scale(data[xField]),\n y: bottom - yScale.scale(data[yField]),\n defined: isValid(data[yField])\n });\n dataItems.push(data); //收集原始数据\n valid = true;\n break;\n }\n }\n\n if (!valid) {\n // 该domain的index没有在数据中,补充无效点\n items.push({\n x: left + xScale.scale(domain[i]),\n y: 0,\n defined: false\n });\n dataItems.push({ [xField]: domain[i], [yField]: null });\n }\n }\n } else {\n for (let i = 0; i < dataValue.length; i++) {\n const data: any = dataValue[i];\n items.push({\n x: left + xScale.scale(xField ? data[xField] : i),\n y: bottom - yScale.scale(yField ? data[yField] : data),\n defined: isValid(yField ? data[yField] : data),\n rawData: data\n } as any);\n dataItems.push(data);\n }\n }\n // #endregion\n\n // 更新线节点属性\n const line = chartGroup.getChildByName('sparkline-line') as ILine;\n if (line) {\n line.setAttribute('points', items);\n }\n (line as any).bandwidth = xScale.step();\n (line as any).min = yScale.range()[0];\n (line as any).max = yScale.range()[1];\n\n // 更新symbol节点属性\n const symbolGroup = chartGroup.getChildByName('sparkline-symbol-group') as ILine;\n if (symbolGroup) {\n const isShowIsolatedPoint = sparklineSpec.pointShowRule === 'isolatedPoint';\n if (sparklineSpec.pointShowRule === 'all') {\n for (let i = 0; i < items.length; i++) {\n const { x, y, defined } = items[i];\n if (defined) {\n const symbol: ISymbol = createSymbol({ x, y });\n symbolGroup.appendChild(symbol);\n }\n }\n } else if (isShowIsolatedPoint) {\n // 处理孤立点显示\n for (let i = 0; i < items.length; i++) {\n const { x, y, defined } = items[i];\n if (defined && (!items[i - 1] || !items[i - 1].defined) && (!items[i + 1] || !items[i + 1].defined)) {\n // 规范孤立数据显示Symbol的spec api\n const symbol: ISymbol = createSymbol({ x, y });\n symbolGroup.appendChild(symbol);\n }\n }\n }\n }\n return chartGroup;\n}\n\nfunction createChartGroup(\n spec: SparklineSpec | ((arg: CellInfo) => SparklineSpec),\n x: number,\n y: number,\n width: number,\n height: number\n): Group {\n let specObj: SparklineSpec;\n if (typeof spec === 'function') {\n // specObj = spec.apply(null, null);\n specObj = spec(null);\n } else {\n specObj = spec;\n }\n // 生成根节点\n const group = new Group({\n x,\n y,\n width,\n height,\n stroke: false,\n fill: false\n });\n group.name = 'sparkline';\n\n if (specObj.type === 'line') {\n // 生成line\n const line = createLine({\n x: 0,\n y: 0,\n curveType: specObj.smooth ? 'monotoneX' : 'linear',\n stroke: specObj.line?.style?.stroke ?? 'blue',\n lineWidth: specObj.line?.style?.strokeWidth ?? 2\n });\n line.name = 'sparkline-line';\n group.addChild(line);\n if (specObj.crosshair) {\n (line as any).hover = specObj.crosshair?.style ?? {\n stroke: '#000',\n interpolate: 'linear'\n };\n }\n\n // 生成symbol\n const symbolGroup = new Group({\n x: 0,\n y: 0,\n width,\n height,\n stroke: false,\n fill: false\n });\n symbolGroup.name = 'sparkline-symbol-group';\n symbolGroup.setTheme({\n symbol: {\n stroke: specObj.point?.style?.stroke ?? '#000',\n lineWidth: specObj.point?.style?.strokeWidth ?? 1,\n fill: specObj.point?.style?.fill ?? '#000',\n size: (specObj.point?.style?.size ?? 3) * 2, // 之前配置的是圆半径\n symbolType: 'circle'\n }\n });\n group.addChild(symbolGroup);\n (symbolGroup as any).hover = specObj.point?.hover ?? false;\n }\n return group;\n}\n\nfunction getYNumbers(data: any[], field?: string): number[] {\n // return data.map((item) => item[field]).filter((item) => isValid(item));\n const numbers = [];\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (isValid(field) && isValid(item[field])) {\n numbers.push(item[field]);\n } else if (!isValid(field) && isValid(item)) {\n numbers.push(item);\n }\n }\n\n return numbers;\n}\n","/* eslint-disable no-undef */\nimport type { Cursor, IImage, IThemeSpec } from './../../../vrender';\nimport { createRect, createImage } from './../../../vrender';\nimport * as icons from '../../../icons';\nimport { Group } from '../../graphic/group';\nimport { calcKeepAspectRatioSize } from '../../utils/keep-aspect-ratio';\nimport { Icon } from '../../graphic/icon';\nimport { calcStartPosition } from '../../utils/cell-pos';\nimport { _adjustWidthHeight, getCellRange, updateImageDxDy } from './image-cell';\nimport { getFunctionalProp, getProp } from '../../utils/get-prop';\nimport { isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\nimport { getQuadProps } from '../../utils/padding';\nimport type { CellRange } from '../../../ts-types';\nimport { dealWithIconLayout } from '../../utils/text-icon-layout';\n\nconst regedIcons = icons.get();\n\nexport function createVideoCellGroup(\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n width: number,\n height: number,\n keepAspectRatio: boolean,\n imageAutoSizing: boolean,\n padding: [number, number, number, number],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n table: BaseTableAPI,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n) {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n // const margin = getProp('padding', headerStyle, col, row, table);\n if (table.options.customConfig?.imageMargin) {\n padding = getQuadProps(table.options.customConfig?.imageMargin);\n } else if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n\n let cellGroup: Group;\n if (isAsync) {\n cellGroup = table.scenegraph.highPerformanceGetCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width,\n height,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n\n let cellIcons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n cellIcons = table.getCellIcons(iconCol, iconRow);\n }\n\n let iconWidth = 0;\n let cellLeftIconWidth = 0;\n let cellRightIconWidth = 0;\n if (Array.isArray(cellIcons) && cellIcons.length !== 0) {\n const { leftIconWidth, rightIconWidth, absoluteLeftIconWidth, absoluteRightIconWidth } = dealWithIconLayout(\n cellIcons,\n cellGroup,\n range,\n table\n );\n\n iconWidth = leftIconWidth + rightIconWidth;\n cellLeftIconWidth = leftIconWidth;\n cellRightIconWidth = rightIconWidth;\n\n // 更新各个部分横向位置\n cellGroup.forEachChildren((child: any) => {\n if (child.role === 'icon-left') {\n child.setAttribute('x', child.attribute.x + padding[3]);\n } else if (child.role === 'icon-right') {\n child.setAttribute('x', child.attribute.x + width - rightIconWidth - padding[1]);\n } else if (child.role === 'icon-absolute-right') {\n child.setAttribute('x', child.attribute.x + width - absoluteRightIconWidth - padding[1]);\n }\n });\n\n // 更新各个部分纵向位置\n cellGroup.forEachChildren((child: any) => {\n if (textBaseline === 'middle') {\n child.setAttribute('y', (height - child.AABBBounds.height()) / 2);\n } else if (textBaseline === 'bottom') {\n child.setAttribute('y', height - child.AABBBounds.height() - padding[2]);\n } else {\n child.setAttribute('y', padding[0]);\n }\n });\n\n (cellGroup as any)._cellLeftIconWidth = cellLeftIconWidth;\n (cellGroup as any)._cellRightIconWidth = cellRightIconWidth;\n }\n\n // video\n const value = table.getCellValue(col, row);\n const video = document.createElement('video');\n video.addEventListener('loadeddata', (): void => {\n if (imageAutoSizing) {\n _adjustWidthHeight(col, row, video.videoWidth, video.videoHeight, table.scenegraph, padding, cellGroup);\n }\n // const width = cellGroup.attribute.width;\n // const height = cellGroup.attribute.height;\n // 更新宽高\n const { width: cellWidth, height: cellHeight, isMerge } = getCellRange(cellGroup, table);\n if (keepAspectRatio) {\n const { width: videoWidth, height: videoHeight } = calcKeepAspectRatioSize(\n video.videoWidth,\n video.videoHeight,\n cellWidth - padding[1] - padding[3],\n cellHeight - padding[0] - padding[2]\n );\n const pos = calcStartPosition(\n 0,\n 0,\n cellWidth,\n cellHeight,\n videoWidth,\n videoHeight,\n textAlign,\n textBaseline,\n padding\n );\n\n image.setAttributes({\n width: videoWidth,\n height: videoHeight,\n x: pos.x,\n y: pos.y,\n dx: 0\n });\n } else {\n // const { width: cellWidth, height: cellHeight } = getCellRange(cellGroup, table);\n image.setAttributes({\n x: padding[3],\n y: padding[0],\n width: cellWidth - padding[1] - padding[3],\n height: cellHeight - padding[2] - padding[0],\n dy: 0\n });\n }\n\n if (isMerge) {\n updateImageDxDy(\n cellGroup.mergeStartCol,\n cellGroup.mergeEndCol,\n cellGroup.mergeStartRow,\n cellGroup.mergeEndRow,\n table\n );\n }\n\n const left = 0;\n const top = 0;\n // 播放按钮\n // const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n // const anchorX =\n // left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n // const anchorY =\n // top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n const { width, height } = getCellRange(cellGroup, table);\n const iconSize = Math.floor(Math.min(width - padding[1] - padding[3], height - padding[2] - padding[0]) / 2);\n const anchorX =\n left + (width > image.attribute.width ? image.attribute.x - left + image.attribute.width / 2 : width / 2);\n const anchorY =\n top + (height > image.attribute.height ? image.attribute.y - top + image.attribute.height / 2 : height / 2);\n\n const playIcon: Icon = new Icon({\n x: anchorX - iconSize / 2,\n y: anchorY - iconSize / 2,\n width: iconSize,\n height: iconSize,\n image: (regedIcons.play as any).svg,\n cursor: (regedIcons.play as any).cursor\n });\n playIcon.name = 'play-icon';\n cellGroup.appendChild(playIcon);\n // 触发重绘\n table.scenegraph.updateNextFrame();\n });\n video.onerror = (): void => {\n // image.setAttribute('image', (regedIcons.damage_pic as any).svg);\n (image as any).image = (regedIcons.damage_pic as any).svg;\n };\n video.src = value;\n video.setAttribute('preload', 'auto');\n\n const image: IImage = createImage({\n x: padding[3],\n y: padding[0],\n width: width - padding[1] - padding[3],\n height: height - padding[2] - padding[0],\n image: video as any,\n cursor: 'pointer' as Cursor\n });\n image.name = 'image';\n image.keepAspectRatio = keepAspectRatio;\n image.textAlign = textAlign;\n image.textBaseline = textBaseline;\n cellGroup.appendChild(image);\n\n return cellGroup;\n}\n\nexport type CreateVideoCellGroup = typeof createVideoCellGroup;\n","/* eslint-disable no-undef */\nimport type { IThemeSpec, Group as VGroup } from './../../../vrender';\nimport { createArc } from './../../../vrender';\nimport { isValid } from '@visactor/vutils';\nimport { Group } from '../../graphic/group';\n// import { parseFont } from '../../utils/font';\nimport { getFunctionalProp } from '../../utils/get-prop';\nimport { createCellContent } from '../../utils/text-icon-layout';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getStyleTheme } from '../../../core/tableHelper';\nimport type { CellRange } from '../../../ts-types';\nimport { getCellBorderStrokeWidth } from '../../utils/cell-border-stroke-width';\n\n/**\n * @description: 创建单元格场景节点\n * @param {Group} columnGroup 列Group\n * @param {number} xOrigin 起始x坐标\n * @param {number} yOrigin 起始y坐标\n * @param {number} col\n * @param {number} row\n * @param {BaseTableAPI} table\n * @param {number | 'auto'} colWidth 配置列宽\n * @param {number} padding 单元格padding\n * @param {CanvasTextAlign} textAlign\n * @param {CanvasTextBaseline} textBaseline\n * @param {boolean} noWrap 不进行折行(default column type)\n * @param {IThemeSpec} cellTheme 单元格主题\n * @return {Group}\n */\nexport function createCellGroup(\n table: BaseTableAPI,\n value: string,\n columnGroup: Group,\n xOrigin: number,\n yOrigin: number,\n col: number,\n row: number,\n // rowHeight: number,\n colWidth: number | 'auto',\n cellWidth: number,\n cellHeight: number,\n padding: number[],\n textAlign: CanvasTextAlign,\n textBaseline: CanvasTextBaseline,\n mayHaveIcon: boolean,\n customElementsGroup: VGroup,\n renderDefault: boolean,\n cellTheme: IThemeSpec,\n range: CellRange | undefined,\n isAsync: boolean\n): Group {\n const headerStyle = table._getCellStyle(col, row); // to be fixed\n const functionalPadding = getFunctionalProp('padding', headerStyle, col, row, table);\n if (isValid(functionalPadding)) {\n padding = functionalPadding;\n }\n if (cellTheme?.text?.textAlign) {\n textAlign = cellTheme?.text?.textAlign;\n }\n if (cellTheme?.text?.textBaseline) {\n textBaseline = cellTheme?.text?.textBaseline;\n }\n const autoRowHeight = table.isAutoRowHeight(row);\n const autoColWidth = colWidth === 'auto';\n const autoWrapText = headerStyle.autoWrapText ?? table.internalProps.autoWrapText;\n const lineClamp = headerStyle.lineClamp;\n\n // cell\n const strokeArrayWidth = getCellBorderStrokeWidth(col, row, cellTheme, table);\n let cellGroup;\n if (isAsync) {\n cellGroup = table.scenegraph.getCell(col, row, true);\n if (cellGroup && cellGroup.role === 'cell') {\n cellGroup.setAttributes({\n x: xOrigin,\n y: yOrigin,\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n lineCap: 'butt',\n clip: true,\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n }\n }\n if (!cellGroup || cellGroup.role !== 'cell') {\n cellGroup = new Group({\n x: xOrigin,\n y: yOrigin,\n width: cellWidth,\n height: cellHeight,\n // 背景相关,cell背景由cellGroup绘制\n lineWidth: cellTheme?.group?.lineWidth ?? undefined,\n fill: cellTheme?.group?.fill ?? undefined,\n stroke: cellTheme?.group?.stroke ?? undefined,\n strokeArrayWidth: strokeArrayWidth ?? undefined,\n strokeArrayColor: (cellTheme?.group as any)?.strokeArrayColor ?? undefined,\n cursor: (cellTheme?.group as any)?.cursor ?? undefined,\n lineDash: cellTheme?.group?.lineDash ?? undefined,\n\n lineCap: 'butt',\n\n clip: true,\n\n cornerRadius: cellTheme.group.cornerRadius\n } as any);\n cellGroup.role = 'cell';\n cellGroup.col = col;\n cellGroup.row = row;\n columnGroup?.addCellGroup(cellGroup);\n }\n if (customElementsGroup) {\n cellGroup.appendChild(customElementsGroup);\n }\n if (renderDefault) {\n const textStr: string = value;\n let icons;\n if (mayHaveIcon) {\n let iconCol = col;\n let iconRow = row;\n if (range) {\n iconCol = range.start.col;\n iconRow = range.start.row;\n }\n icons = table.getCellIcons(iconCol, iconRow);\n }\n\n createCellContent(\n cellGroup,\n icons,\n textStr,\n padding as any,\n autoColWidth,\n autoRowHeight,\n autoWrapText,\n typeof lineClamp === 'number' ? lineClamp : undefined,\n // autoColWidth ? 0 : colWidth,\n // table.getRowHeight(row),\n // cellWidth,\n // cellHeight,\n cellGroup.attribute.width,\n cellGroup.attribute.height,\n textAlign,\n textBaseline,\n table,\n cellTheme,\n range\n );\n\n if ((cellTheme as any)?._vtable?.marked) {\n const mark = createArc({\n x: cellGroup.attribute.width,\n y: 0,\n startAngle: Math.PI / 2,\n endAngle: Math.PI,\n outerRadius: 6,\n fill: '#3073F2',\n pickable: false\n });\n mark.name = 'mark';\n\n cellGroup.appendChild(mark);\n }\n }\n if (customElementsGroup) {\n cellGroup.setAttributes({\n width: Math.max(cellGroup.attribute.width, customElementsGroup.attribute.width ?? 0),\n height: Math.max(cellGroup.attribute.height, customElementsGroup.attribute.height ?? 0)\n });\n }\n return cellGroup;\n}\n\nexport type CreateTextCellGroup = typeof createCellGroup;\n\n// /**\n// * @description: 获取函数式赋值的样式,记录在cellTheme中\n// * @param {BaseTableAPI} table\n// * @param {number} col\n// * @param {number} row\n// * @param {IThemeSpec} cellTheme\n// * @return {IThemeSpec | undefined}\n// */\n// export function getCellTheme(\n// table: BaseTableAPI,\n// col: number,\n// row: number,\n// cellTheme?: IThemeSpec\n// ): IThemeSpec | undefined {\n// // get column header style\n// const headerStyle = table._getCellStyle(col, row);\n\n// const theme = getStyleTheme(headerStyle, table, col, row, getFunctionalProp).theme;\n\n// for (const prop in theme.group) {\n// if (isValid(theme.group[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!cellTheme.group) {\n// cellTheme.group = {};\n// }\n\n// cellTheme.group[prop] = theme.group[prop];\n// }\n// }\n\n// for (const prop in theme.text) {\n// if (isValid(theme.text[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!cellTheme.text) {\n// cellTheme.text = {};\n// }\n\n// cellTheme.text[prop] = theme.text[prop];\n// }\n// }\n\n// for (const prop in theme._vtable) {\n// if (isValid(theme._vtable[prop])) {\n// if (!cellTheme) {\n// cellTheme = {};\n// }\n\n// if (!(cellTheme as any)._vtable) {\n// (cellTheme as any)._vtable = {};\n// }\n\n// (cellTheme as any)._vtable[prop] = theme._vtable[prop];\n// }\n// }\n// return cellTheme;\n// }\n","import { createRect, createLine } from './../../../vrender';\nimport type { ProgressBarStyle } from '../../../body-helper/style/ProgressBarStyle';\nimport { str, getOrApply } from '../../../tools/helper';\nimport { Group } from '../../graphic/group';\nimport { getProp } from '../../utils/get-prop';\nimport { getQuadProps } from '../../utils/padding';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { isNumber } from '@visactor/vutils';\nimport type { CellRange, StylePropertyFunctionArg } from '../../../ts-types';\n\nexport function createProgressBarCell(\n progressBarDefine: {\n min?: number | ((args: StylePropertyFunctionArg) => number);\n max?: number | ((args: StylePropertyFunctionArg) => number);\n barType?: 'default' | 'negative' | 'negative_no_axis'; // 进度图类型\n dependField?: string; // 指定其他列数据(风神使用),\n },\n style: ProgressBarStyle,\n width: number,\n // height: number,\n value: string,\n dataValue: string,\n col: number,\n row: number,\n padding: [number, number, number, number],\n table: BaseTableAPI,\n range?: CellRange\n) {\n if (progressBarDefine.dependField) {\n dataValue = (table.getCellOriginRecord(col, row) as any)?.[progressBarDefine.dependField] ?? dataValue;\n }\n\n progressBarDefine.barType = progressBarDefine.barType ?? 'default';\n progressBarDefine.min =\n getOrApply(progressBarDefine.min, {\n col,\n row,\n table,\n value,\n dataValue,\n cellHeaderPaths: undefined\n }) ?? 0;\n progressBarDefine.max =\n getOrApply(progressBarDefine.max, {\n col,\n row,\n table,\n value,\n dataValue,\n cellHeaderPaths: undefined\n }) ?? progressBarDefine.min + 100;\n let height = 0;\n if (range) {\n height = table.getRowsHeight(range.start.row, range.end.row);\n } else {\n height = table.getRowHeight(row);\n }\n let contentWidth = width;\n let contentHeight = height;\n let _contentOffset = 0;\n if (isNumber(table.theme._contentOffset)) {\n _contentOffset = table.theme._contentOffset;\n }\n const percentCompleteBarGroup = new Group({\n x: -_contentOffset,\n y: -_contentOffset,\n width: contentWidth,\n height: contentHeight\n });\n percentCompleteBarGroup.name = 'progress-bar';\n\n const {\n showBar,\n barColor,\n barBgColor,\n // bgColor,\n barPositiveColor,\n barNegativeColor,\n barAxisColor,\n barRightToLeft,\n showBarMark,\n barMarkPositiveColor,\n barMarkNegativeColor,\n barMarkWidth,\n barMarkPosition\n } = style;\n let { barHeight, barBottom, barPadding } = style;\n // const { col, row, dataValue: originalValue } = context;\n\n // 完善四元组\n if (barPadding.length === 1) {\n barPadding = [barPadding[0], barPadding[0], barPadding[0], barPadding[0]];\n } else if (barPadding.length === 2) {\n barPadding = [barPadding[0], barPadding[1], barPadding[0], barPadding[1]];\n } else if (barPadding.length === 3) {\n barPadding = [barPadding[0], barPadding[1], barPadding[2], barPadding[1]];\n }\n\n // 将百分比值转换为数值\n barPadding = barPadding.map((v, i) => {\n if (typeof v === 'string' && str.endsWith(v, '%')) {\n const num = Number(v.substr(0, v.length - 1));\n if (i === 0 || i === 2) {\n return (height * num) / 100;\n }\n return (width * num) / 100;\n }\n return Number(v);\n });\n\n const borderWidth = getQuadProps(getProp('borderLineWidth', style, col, row, table));\n const barPaddingTop = Math.max((barPadding as number[])[0], Math.ceil(borderWidth[0] / 2));\n const barPaddingRight = Math.max((barPadding as number[])[1], Math.floor(borderWidth[1] / 2));\n const barPaddingBottom = Math.max((barPadding as number[])[2], Math.floor(borderWidth[2] / 2));\n const barPaddingLeft = Math.max((barPadding as number[])[3], Math.ceil(borderWidth[3] / 2));\n\n contentWidth -= barPaddingRight + barPaddingLeft;\n contentHeight -= barPaddingBottom + barPaddingTop;\n if (row === table.rowCount - 1 && [0, '0'].includes(barBottom)) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n contentHeight -= 1;\n }\n\n // if (barPaddingTop & 1) {\n // // barPaddingTop += 0.5;\n // contentWidth += borderWidth[0];\n // }\n // if (barPaddingLeft & 1) {\n // // barPaddingLeft += 0.5;\n // contentHeight += borderWidth[0];\n // }\n\n const top = barPaddingTop;\n const left = barPaddingLeft;\n const right = contentWidth;\n const bottom = contentHeight;\n\n if (typeof barHeight === 'string' && str.endsWith(barHeight, '%')) {\n barHeight = Number(barHeight.substr(0, barHeight.length - 1));\n barHeight = (contentHeight * barHeight) / 100;\n } else {\n barHeight = Number(barHeight);\n }\n if (typeof barBottom === 'string' && str.endsWith(barBottom, '%')) {\n barBottom = Number(barBottom.substr(0, barBottom.length - 1));\n barBottom = (contentHeight * barBottom) / 100;\n } else {\n barBottom = Number(barBottom);\n }\n\n const show = getOrApply(showBar as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue\n });\n\n if (show) {\n let svalue = `${dataValue}`;\n if (str.endsWith(svalue, '%')) {\n svalue = svalue.substr(0, svalue.length - 1);\n }\n const num = Number(svalue);\n if (isNaN(num)) {\n return percentCompleteBarGroup;\n }\n\n if ((progressBarDefine.barType ?? 'default') === 'default') {\n const percentile =\n num < progressBarDefine.min\n ? 0\n : num > progressBarDefine.max\n ? 1\n : (num - progressBarDefine.min) / (progressBarDefine.max - progressBarDefine.min);\n\n const barMaxWidth = contentWidth;\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n // const barLeft = 0 + barPaddingLeft;\n let barSize = Math.min(barMaxWidth * percentile, barMaxWidth);\n const barLeft = barRightToLeft ? left + right - barSize : left;\n if (col === table.colCount - 1 && percentile === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSize -= 1;\n }\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n });\n\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n const fillColor =\n getOrApply(barColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n const barMain = createRect({\n x: barLeft,\n y: barTop,\n width: barSize,\n height: barHeight,\n fill: fillColor\n });\n percentCompleteBarGroup.addChild(barMain);\n } else if (progressBarDefine.barType === 'negative') {\n // negative模式参考风神现有数据条样式,显示坐标轴和正负数据条\n // 计算坐标轴位置\n const negativeRange = progressBarDefine.min < 0 ? -progressBarDefine.min : 0;\n const positiveRange = progressBarDefine.max > 0 ? progressBarDefine.max : 0;\n\n const negativeFactor = negativeRange / (negativeRange + positiveRange);\n const positiveFactor = 1 - negativeFactor;\n\n // 计算rate\n const positiveRate = num > 0 ? num / positiveRange : 0;\n const negativeRate = num < 0 ? -num / negativeRange : 0;\n\n // 绘制\n // 绘制背景\n const barMaxWidth = contentWidth;\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n const barLeft = left;\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n });\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n // 坐标轴距离左侧边界距离\n const positiveLeft = barRightToLeft ? positiveFactor * barMaxWidth : negativeFactor * barMaxWidth;\n\n // 绘制负值区域\n const barSizeNega = Math.min(barMaxWidth * negativeFactor * negativeRate, barMaxWidth);\n const barRectNega = barRightToLeft\n ? {\n left: barLeft + positiveLeft,\n top: barTop,\n width: barSizeNega,\n height: barHeight as number\n }\n : {\n left: barLeft + positiveLeft - barSizeNega,\n top: barTop,\n width: barSizeNega,\n height: barHeight as number\n };\n const barNagiFillColor =\n getOrApply(barNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: negativeRate\n }) || '#20a8d8';\n const barNega = createRect({\n x: barRectNega.left,\n y: barRectNega.top,\n width: barRectNega.width,\n height: barRectNega.height,\n fill: barNagiFillColor\n });\n percentCompleteBarGroup.addChild(barNega);\n\n // 绘制正值区域\n let barSizePosi = Math.min(barMaxWidth * positiveFactor * positiveRate, barMaxWidth);\n if (col === table.colCount - 1 && positiveRate === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSizePosi -= 1;\n }\n const barRectPosi = barRightToLeft\n ? {\n left: barLeft + positiveLeft - barSizePosi,\n top: barTop,\n width: barSizePosi,\n height: barHeight as number\n }\n : {\n left: barLeft + positiveLeft,\n top: barTop,\n width: barSizePosi,\n height: barHeight as number\n };\n const barPosiFillColor =\n getOrApply(barPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n }) || '#20a8d8';\n const barPosi = createRect({\n x: barRectPosi.left,\n y: barRectPosi.top,\n width: barRectPosi.width,\n height: barRectPosi.height,\n fill: barPosiFillColor\n });\n percentCompleteBarGroup.addChild(barPosi);\n\n // 绘制坐标轴\n const lineLeft = barRightToLeft ? barRectNega.left : barRectPosi.left;\n const lineStrokeColor = getOrApply(barAxisColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n });\n const line = createLine({\n x: 0,\n y: 0,\n stroke: lineStrokeColor,\n lineWidth: 1,\n lineDash: [2, 2],\n points: [\n { x: lineLeft, y: 0 },\n { x: lineLeft, y: height }\n ]\n });\n percentCompleteBarGroup.addChild(line);\n\n // 绘制mark\n if (showBarMark && (positiveRate || negativeRate)) {\n const lineWidth = barMarkWidth;\n const points = [];\n let barMarkStrokeColor;\n if (positiveRate > 0) {\n barMarkStrokeColor =\n getOrApply(barMarkPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: positiveRate\n }) || '#20a8d8';\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRectPosi.left + barMarkWidth / 2\n : barRectPosi.left + barRectPosi.width - barMarkWidth / 2;\n points.push({ x: markLeft, y: barRectPosi.top });\n points.push({ x: markLeft, y: barRectPosi.top + barRectPosi.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRectPosi.left,\n y: barRectPosi.top + barRectPosi.height - barMarkWidth / 2\n });\n points.push({\n x: barRectPosi.left + barRectPosi.width,\n y: barRectPosi.top + barRectPosi.height - barMarkWidth / 2\n });\n }\n } else if (negativeRate > 0) {\n barMarkStrokeColor =\n getOrApply(barMarkNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile: negativeRate\n }) || '#20a8d8';\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRectNega.left + barRectNega.width - barMarkWidth / 2\n : barRectNega.left + barMarkWidth / 2;\n points.push({ x: markLeft, y: barRectNega.top });\n points.push({ x: markLeft, y: barRectNega.top + barRectNega.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRectNega.left,\n y: barRectNega.top + barRectNega.height - barMarkWidth / 2\n });\n points.push({\n x: barRectNega.left + barRectNega.width,\n y: barRectNega.top + barRectNega.height - barMarkWidth / 2\n });\n }\n }\n const barMark = createLine({\n x: 0,\n y: 0,\n stroke: barMarkStrokeColor,\n lineWidth,\n points\n });\n percentCompleteBarGroup.addChild(barMark);\n }\n } else if (progressBarDefine.barType === 'negative_no_axis') {\n // negative_no_axis模式不显示坐标轴,正负数据条同向,区分颜色\n // 计算range\n const _negativeRange = progressBarDefine.min < 0 ? -progressBarDefine.min : 0;\n const _positiveRange = progressBarDefine.max > 0 ? progressBarDefine.max : 0;\n const range = Math.max(_negativeRange, _positiveRange);\n\n // 计算rate\n const percentile = range === 0 ? 0 : Math.abs(num) / range;\n\n // 绘制\n // 绘制背景\n // const barMaxWidth = width - barPaddingLeft - barPaddingRight - 1; /*罫線*/\n const barMaxWidth = contentWidth;\n let barSize = Math.min(barMaxWidth * percentile, barMaxWidth);\n if (col === table.colCount - 1 && percentile === 1 && !barRightToLeft) {\n // 单元格边框在表格边界会向内缩进1px,为了避免进度图矩形覆盖边框,这里在最后一行向内缩进1px\n // 详见 packages/vtable/src/scenegraph/graphic/contributions/group-contribution-render.ts getCellSizeForDraw()\n barSize -= 1;\n }\n // const barTop = bottom - barPaddingBottom - (barHeight as number) - (barBottom as number) - 1; /*罫線*/\n const barTop = top + contentHeight - (barHeight as number) - (barBottom as number);\n // const barLeft = barRightToLeft ? right - barPaddingRight - barSize : left + barPaddingLeft;\n const barLeft = barRightToLeft ? left + right - barSize : left;\n\n const bgFillColor = getOrApply(barBgColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n });\n if (bgFillColor) {\n const barBack = createRect({\n x: barLeft,\n y: barTop,\n width: barMaxWidth,\n height: barHeight,\n fill: bgFillColor\n });\n percentCompleteBarGroup.addChild(barBack);\n }\n\n // 绘制bar\n const barRect = {\n left: barLeft,\n top: barTop,\n width: barSize,\n height: barHeight as number\n };\n let barRectFillColor;\n if (num >= 0) {\n barRectFillColor =\n getOrApply(barPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n percentile,\n dataValue\n }) || '#20a8d8';\n } else {\n barRectFillColor =\n getOrApply(barNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n }\n const bar = createRect({\n x: barRect.left,\n y: barRect.top,\n width: barRect.width,\n height: barRect.height,\n fill: barRectFillColor\n });\n percentCompleteBarGroup.addChild(bar);\n\n // 绘制mark\n if (showBarMark && num) {\n const lineWidth = barMarkWidth;\n const points = [];\n let barMarkStrokeColor;\n if (num >= 0) {\n barMarkStrokeColor =\n getOrApply(barMarkPositiveColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n } else {\n barMarkStrokeColor =\n getOrApply(barMarkNegativeColor as any, {\n col,\n row,\n table,\n context: null,\n value,\n dataValue,\n percentile\n }) || '#20a8d8';\n }\n if (barMarkPosition === 'right') {\n const markLeft = barRightToLeft\n ? barRect.left + barMarkWidth / 2\n : barRect.left + barRect.width - barMarkWidth / 2;\n points.push({ x: markLeft, y: barRect.top });\n points.push({ x: markLeft, y: barRect.top + barRect.height });\n } else if (barMarkPosition === 'bottom') {\n points.push({\n x: barRect.left,\n y: barRect.top + barRect.height - barMarkWidth / 2\n });\n points.push({\n x: barRect.left + barRect.width,\n y: barRect.top + barRect.height - barMarkWidth / 2\n });\n }\n const barMark = createLine({\n x: 0,\n y: 0,\n stroke: barMarkStrokeColor,\n lineWidth,\n points\n });\n percentCompleteBarGroup.addChild(barMark);\n }\n }\n }\n return percentCompleteBarGroup;\n}\n\nexport type CreateProgressBarCell = typeof createProgressBarCell;\n","import { LinearScale, LogScale, SymlogScale } from '@visactor/vscale';\nimport { isFunction, isNil, isNumber, isValid } from '@visactor/vutils';\nimport { THEME_CONSTANTS } from '../../components/axis/get-axis-attributes';\n\nconst DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n/**\n * @description: get axis nice domain and tick label text\n * @param {number} min\n * @param {number} max\n * @param {ITableAxisOption} axisOption\n * @return {*}\n */\nexport function getAxisDomainRangeAndLabels(\n min: number,\n max: number,\n axisOption: any,\n isZeroAlign: boolean,\n axisLength: number,\n // skipTick?: boolean,\n target?: {\n targetTicks: number[];\n targetRange: { min: number; max: number };\n }\n) {\n if (axisOption?.zero) {\n min = Math.min(min, 0);\n max = Math.max(max, 0);\n }\n if (axisOption?.expand) {\n const domainMin = min;\n const domainMax = max;\n if (isValid(axisOption.expand.min)) {\n min = domainMin - (domainMax - domainMin) * axisOption.expand.min;\n }\n if (isValid(axisOption.expand.max)) {\n max = domainMax + (domainMax - domainMin) * axisOption.expand.max;\n }\n }\n if (isNumber(axisOption?.min)) {\n min = axisOption.min;\n }\n if (isNumber(axisOption?.max)) {\n max = axisOption.max;\n }\n\n let scale;\n if (axisOption?.type === 'log') {\n scale = new LogScale();\n scale.base(axisOption?.base ?? 10);\n } else if (axisOption?.type === 'symlog') {\n scale = new SymlogScale();\n scale.constant(axisOption?.constant ?? 10);\n } else {\n scale = new LinearScale();\n }\n scale.domain([min, max], !!axisOption?.nice);\n\n if (target) {\n forceTickCountNice(scale as LinearScale, target);\n } else if (axisOption?.nice) {\n let tickCount = axisOption.tick?.forceTickCount ?? axisOption.tick?.tickCount ?? 10;\n if (isFunction(tickCount)) {\n tickCount = tickCount({\n axisLength,\n labelStyle: axisOption?.label?.style ?? {\n fontSize: THEME_CONSTANTS.LABEL_FONT_SIZE\n }\n });\n }\n // 如果配置了精度优先,那么最低是10\n // 否则就直接使用tickCount即可\n if (axisOption.niceType === 'accurateFirst') {\n tickCount = Math.max(10, tickCount);\n }\n if (isNil(axisOption.min) && isNil(axisOption.max)) {\n scale.nice(tickCount);\n } else if (isValid(axisOption.min) && isNil(axisOption.max)) {\n scale.niceMax(tickCount);\n } else if (isNil(axisOption.min) && isValid(axisOption.max)) {\n scale.niceMin(tickCount);\n }\n }\n\n delete (scale as any)._niceType; // ensure scaleTicks consistent in `measurement`, `component label` and `chart`\n let scaleTicks;\n\n if (target?.targetTicks?.length ?? axisOption?.tick?.forceTickCount) {\n scaleTicks = scale.forceTicks(target?.targetTicks?.length ?? axisOption?.tick?.forceTickCount);\n } else {\n scaleTicks = scale.ticks(\n isNumber(axisOption?.tick?.tickCount) ? axisOption.tick.tickCount : DEFAULT_CONTINUOUS_TICK_COUNT,\n {\n noDecimals: axisOption?.tick?.noDecimals\n }\n );\n }\n\n return {\n range: scale.domain(),\n ticks: scaleTicks\n };\n}\n\nfunction forceTickCountNice(\n scale: LinearScale,\n target: {\n targetTicks: number[];\n targetRange: { min: number; max: number };\n }\n) {\n scale.niceMax(target.targetTicks.length);\n\n // to do: nice new ticks\n}\n\nexport type GetAxisDomainRangeAndLabels = typeof getAxisDomainRangeAndLabels;\n","import { Factory } from '../../../core/factory';\nimport { createChartCellGroup } from './chart-cell';\nimport { createCheckboxCellGroup } from './checkbox-cell';\nimport { createImageCellGroup } from './image-cell';\nimport { createRadioCellGroup } from './radio-cell';\nimport { createSparkLineCellGroup } from './spark-line-cell';\nimport { createVideoCellGroup } from './video-cell';\nimport { createCellGroup as createTextCellGroup } from './text-cell';\nimport { createProgressBarCell } from './progress-bar-cell';\nimport { getAxisDomainRangeAndLabels } from '../../../layout/chart-helper/get-axis-domain';\n\nexport const registerChartCell = () => {\n Factory.registerFunction('createChartCellGroup', createChartCellGroup);\n Factory.registerFunction('getAxisDomainRangeAndLabels', getAxisDomainRangeAndLabels);\n};\n\nexport const registerCheckboxCell = () => {\n Factory.registerFunction('createCheckboxCellGroup', createCheckboxCellGroup);\n};\n\nexport const registerImageCell = () => {\n Factory.registerFunction('createImageCellGroup', createImageCellGroup);\n};\n\nexport const registerProgressBarCell = () => {\n Factory.registerFunction('createProgressBarCell', createProgressBarCell);\n};\n\nexport const registerRadioCell = () => {\n Factory.registerFunction('createRadioCellGroup', createRadioCellGroup);\n};\n\nexport const registerSparkLineCell = () => {\n Factory.registerFunction('createSparkLineCellGroup', createSparkLineCellGroup);\n};\n\nexport const registerTextCell = () => {\n Factory.registerFunction('createTextCellGroup', createTextCellGroup);\n};\n\nexport const registerVideoCell = () => {\n Factory.registerFunction('createVideoCellGroup', createVideoCellGroup);\n};\n","import { ListTable } from './ListTable';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport { registerCustomCellStylePlugin } from './plugins/custom-cell-style';\nimport { registerListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\nregisterListTreeStickCellPlugin();\nregisterCustomCellStylePlugin();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\nexport class ListTableAll extends ListTable {}\n","import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { CellAddress } from '../ts-types';\nimport type { LayoutObjectId } from '../ts-types/base-table';\n\nexport function diffCellAddress(\n col: number,\n row: number,\n oldCellIds: number[],\n newCellIds: number[],\n oldRowHeaderCellPositons: CellAddress[],\n layout: PivotHeaderLayoutMap\n) {\n const columnHeaderStart = layout.columnHeaderLevelCount;\n // const oldCellIds = oldCellIdsArr.map(oldCellId => oldCellId[0]);\n // const newCellIds = newCellIdsArr.map(oldCellId => oldCellId[0]);\n const addCellPositions = [];\n const removeCellPositions = [];\n // const updateCellIds: Set = new Set();\n // diff two array elements\n for (let i = 0; i < oldCellIds.length; i++) {\n if (!newCellIds.includes(oldCellIds[i])) {\n // updateCellIds.add(layout.getParentCellId(oldRowHeaderCellPositons[i].col, oldRowHeaderCellPositons[i].row));\n removeCellPositions.push(oldRowHeaderCellPositons[i]);\n }\n }\n for (let i = 0; i < newCellIds.length; i++) {\n if (!oldCellIds.includes(newCellIds[i])) {\n const newCellAddr = { col, row: columnHeaderStart + i }; // layout.getHeaderCellAdressById(newCellIds[i]);\n // updateCellIds.add(layout.getParentCellId(newCellAddr.col, newCellAddr.row));\n addCellPositions.push(newCellAddr);\n }\n }\n let parentId = layout.getParentCellId(col, row);\n let parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n const updateCellPositions = [];\n parentCellAddress && updateCellPositions.push(parentCellAddress);\n while (parentId) {\n parentId = layout.getParentCellId(parentCellAddress.col, parentCellAddress.row);\n if (parentId) {\n parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n updateCellPositions.push(parentCellAddress);\n }\n }\n return {\n addCellPositions,\n removeCellPositions,\n updateCellPositions\n };\n}\n\n// find diff between two arrays\nfunction diffCellIndices(oldIndexedData: (number | number[])[], currentIndexedData: (number | number[])[]) {\n const add = [];\n const remove = [];\n // find removed indices\n for (let i = 0; i < oldIndexedData.length; i++) {\n let removed = true;\n for (let j = 0; j < currentIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[i], currentIndexedData[j])) {\n removed = false;\n break;\n }\n }\n if (removed) {\n remove.push(i);\n }\n }\n\n // find added indices\n for (let i = 0; i < currentIndexedData.length; i++) {\n let added = true;\n for (let j = 0; j < oldIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[j], currentIndexedData[i])) {\n added = false;\n break;\n }\n }\n if (added) {\n add.push(i);\n }\n }\n return { add, remove };\n}\n\nfunction checkIndex(oldIndex: number | number[], newIndex: number | number[]): boolean {\n if (typeof oldIndex !== typeof newIndex) {\n return false;\n }\n if (typeof oldIndex === 'number' && typeof newIndex === 'number' && oldIndex !== newIndex) {\n return false;\n }\n if ((oldIndex as number[]).length !== (newIndex as number[]).length) {\n return false;\n }\n for (let i = 0; i < (oldIndex as number[]).length; i++) {\n if (oldIndex[i] !== newIndex[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function calculateArrayDiff(\n originalArray: (number | number[])[],\n targetArray: (number | number[])[],\n startIndex: number\n) {\n const add = [];\n const remove = [];\n\n const originalMap = new Map();\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n const key = JSON.stringify(element);\n if (originalMap.has(key)) {\n originalMap.get(key).push(i);\n } else {\n originalMap.set(key, [i]);\n }\n }\n\n for (let i = 0; i < targetArray.length; i++) {\n const element = targetArray[i];\n const key = JSON.stringify(element);\n if (!originalMap.has(key)) {\n add.push(i + startIndex);\n } else {\n const indices = originalMap.get(key);\n indices.shift(); // Remove the first index\n if (indices.length === 0) {\n originalMap.delete(key);\n }\n }\n }\n\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n if (!targetArray.some(item => isEqual(item, element))) {\n remove.push(i + startIndex);\n }\n }\n\n return { add, remove };\n}\n\nfunction isEqual(arr1: any, arr2: any) {\n if (arr1 === arr2) {\n return true;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable sort-imports */\nimport { transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo,\n IExtensionRowDefine,\n IPagination,\n IColumnDimension,\n IRowDimension,\n IChartIndicator,\n IRowSeriesNumber\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport type { PivotChart } from '../PivotChart';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress } from '../tools/diff-cell';\nimport {\n checkHasCartesianChart,\n checkHasChart,\n getChartAxes,\n getChartDataId,\n getChartSpec,\n getRawChartSpec,\n isCartesianChart,\n isHasCartesianChartInline,\n isNoChartDataRenderNothing,\n isShareChartSpec\n} from './chart-helper/get-chart-spec';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport { DimensionTree, countLayoutTree, dealHeader, dealHeaderForTreeMode, generateLayoutTree } from './tree-helper';\nimport type { Dataset } from '../dataset/dataset';\nimport { cloneDeep, isArray, isValid } from '@visactor/vutils';\nimport type { TextStyle } from '../body-helper/style';\nimport type { ITableAxisOption } from '../ts-types/component/axis';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport type { GetAxisConfigInPivotChart } from './chart-helper/get-axis-config';\nimport { Factory } from '../core/factory';\n\n// export const sharedVar = { seqId: 0 };\n// let colIndex = 0;\n\nconst defaultDimension = { startInTotal: 0, level: 0 };\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\n sharedVar: { seqId: number };\n colIndex = 0;\n _showHeader = true;\n rowDimensionTree: DimensionTree;\n columnDimensionTree: DimensionTree;\n rowTree: IHeaderTreeDefine[];\n columnTree: IHeaderTreeDefine[];\n cornerHeaderObjs: HeaderData[];\n columnHeaderObjs: HeaderData[] = [];\n rowHeaderObjs: HeaderData[] = [];\n\n private _cornerHeaderCellFullPathIds: number[][] = [];\n private _columnHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellFullPathIds\n\n /**下面四份代表实际展示的 如果隐藏了某部分表头 那这里就会相比上面的数组少了隐藏掉的id */\n private _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellIds\n\n private _columnWidths: WidthData[] = [];\n private _columnHeaderLevelCount: number;\n private _rowHeaderLevelCount: number;\n rowsDefine: (IRowDimension | string)[];\n columnsDefine: (IColumnDimension | string)[];\n indicatorsDefine: (IIndicator | IChartIndicator | string)[];\n columnPaths: number[][] = [];\n _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n _indicators: IndicatorData[] = [];\n indicatorTitle: string;\n indicatorsAsCol = true;\n hideIndicatorName = false;\n _showRowHeader = true;\n _showColumnHeader = true;\n _rowHeaderTitle: ITitleDefine;\n _columnHeaderTitle: ITitleDefine;\n cornerSetting: ICornerDefine;\n private _indicatorShowType: ShowColumnRowType = 'column';\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n rowExpandLevel?: number;\n rowHierarchyIndent?: number;\n rowHierarchyTextStartAlignment?: boolean = false;\n /**\n * 行表头对应的维度key集合\n */\n rowDimensionKeys: string[] = [];\n /**\n * 列表头对应的维度key集合\n */\n colDimensionKeys: string[] = [];\n indicatorKeys: string[] = [];\n indicatorDimensionKey: string = IndicatorDimensionKeyPlaceholder;\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n // private _cellRangeMap: Map; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n private _largeCellRangeCache: CellRange[];\n // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map;\n _table: PivotTable | PivotChart;\n extensionRows: IExtensionRowDefine[];\n _rowHeaderExtensionTree: any = {};\n\n /**\n * 扩展行表头对应的维度key集合\n */\n _extensionRowDimensionKeys: string[][] = [];\n fullRowDimensionKeys: string[] = [];\n\n dataset: Dataset;\n /**\n * 分页配置\n */\n pagination: IPagination;\n currentPageStartIndex: number;\n currentPageEndIndex: number;\n // _extensionRowHeaderCellIds\n //#region pivotChart专有\n hasTwoIndicatorAxes: boolean;\n /** 图表spec中barWidth的收集 */\n _chartItemSpanSize: number;\n _chartPaddingInner: number;\n _chartPaddingOuter: number;\n _chartItemBandSize: number;\n _chartPadding?: number | number[];\n\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumnCount: number = 0;\n //#endregion\n\n _useGetBodyCache: boolean = false;\n _getBodyCache: Map = new Map();\n\n _useHeaderPathCache: boolean = false;\n _colHeaderPathCache: Map = new Map();\n _rowHeaderPathCache: Map = new Map();\n constructor(\n table: PivotTable | PivotChart,\n dataset: Dataset,\n columnDimensionTree: DimensionTree,\n rowDimensionTree: DimensionTree\n ) {\n this.sharedVar = table.layoutNodeId;\n this._table = table;\n if ((table as PivotTable).options.rowHierarchyType === 'tree') {\n this.extensionRows = (table as PivotTable).options.extensionRows;\n }\n this.dataset = dataset;\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache = [];\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.internalProps.rowTree;\n this.columnTree = table.internalProps.columnTree;\n this.rowsDefine = table.internalProps.rows ?? [];\n this.columnsDefine = table.internalProps.columns ?? [];\n this.indicatorsDefine = table.internalProps.indicators ?? [];\n this.indicatorTitle = table.options.indicatorTitle;\n this.indicatorsAsCol = table.options.indicatorsAsCol ?? true;\n this.hideIndicatorName = table.options.hideIndicatorName ?? false;\n this.showRowHeader = table.options.showRowHeader ?? true;\n this.showColumnHeader = table.options.showColumnHeader ?? true;\n this.rowHeaderTitle = table.options.rowHeaderTitle;\n this.columnHeaderTitle = table.options.columnHeaderTitle;\n this.rowHierarchyType = (table as PivotTable).options.rowHierarchyType ?? 'grid';\n this.rowExpandLevel = (table as PivotTable).options.rowExpandLevel ?? 1;\n this.rowHierarchyIndent = (table as PivotTable).options.rowHierarchyIndent ?? 20;\n this.rowHierarchyTextStartAlignment = (table as PivotTable).options.rowHierarchyTextStartAlignment;\n this.cornerSetting = Object.assign({ titleOnDimension: 'column', forceShowHeader: false }, table.options.corner);\n\n if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n }\n // 收集指标所有key\n this.indicatorsDefine?.forEach(indicator => {\n // this.indicatorKeys[indicator.indicatorKey] = indicator.value;\n if (typeof indicator === 'string') {\n this.indicatorKeys.push(indicator);\n } else {\n this.indicatorKeys.push(indicator.indicatorKey);\n }\n });\n this.columnDimensionTree = columnDimensionTree; // new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = rowDimensionTree;\n // new DimensionTree(\n // (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n // this.sharedVar,\n // this.rowHierarchyType,\n // this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n // );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n this.resetRowHeaderLevelCount();\n\n if (this._table.isPivotChart()) {\n this.hasTwoIndicatorAxes = this.indicatorsDefine.some((indicatorObject: any) => {\n if (\n indicatorObject.chartSpec &&\n indicatorObject.chartSpec.series &&\n indicatorObject.chartSpec.series.length > 1\n ) {\n const axes = indicatorObject.chartSpec.axes ?? (this._table as PivotChart).pivotChartAxes ?? [];\n if (\n !axes.length ||\n axes.every((axis: any) => {\n if (axis.orient === (this.indicatorsAsCol ? 'top' : 'right') && axis.visible === false) {\n return false;\n }\n return true;\n })\n ) {\n return true;\n }\n }\n return false;\n });\n }\n this.resetColumnHeaderLevelCount();\n\n // this.indicatorsAsCol = !isValid(this.rowDimensionKeys.find(key => key === this.indicatorDimensionKey));\n // this.colAttrs[this.colAttrs.length-1]===this.indicatorDimensionKey&&this.colAttrs.pop();\n // this.rowAttrs[this.rowAttrs.length-1]===this.indicatorDimensionKey&&this.rowAttrs.pop();\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if ((table as PivotTable).options.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n\n this.extensionRows.forEach(extensionRow => {\n const rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n rowKeys.push(row);\n } else {\n rowKeys.push(row.dimensionKey);\n }\n });\n this._extensionRowDimensionKeys.push(rowKeys);\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(rowKeys);\n });\n }\n\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n //#region 生成cornerHeaderObjs及_cornerHeaderCellIds\n // if (this.cornerSetting.titleOnDimension === 'all') {\n let colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree\n // &&\n // !this.dataset.customRowTree\n ) {\n colDimensionKeys = this.columnsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (this.indicatorsAsCol) {\n colDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n\n colDimensionKeys = this.columnHeaderTitle ? [''].concat(colDimensionKeys) : colDimensionKeys;\n\n let rowDimensionKeys: string[];\n let extensionRowDimensions = [];\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n // 如果是有扩展行维度\n const rowTreeFirstKey = [];\n rowTreeFirstKey.push(this.rowDimensionKeys[0]);\n this._extensionRowDimensionKeys.forEach(extensionRowKeys => {\n rowTreeFirstKey.push(extensionRowKeys[0]);\n });\n extensionRowDimensions = this.extensionRows.reduce((dimensions, cur) => {\n return dimensions.concat(cur.rows);\n }, []);\n\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowTreeFirstKey as any) : rowTreeFirstKey;\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree\n ) {\n rowDimensionKeys = this.rowsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (!this.indicatorsAsCol) {\n rowDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowDimensionKeys) : rowDimensionKeys;\n }\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n colDimensionKeys,\n rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine, ...extensionRowDimensions)\n );\n //#endregion\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'column';\n } else if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'row';\n } else {\n this._indicatorShowType = 'none';\n }\n\n this.generateCellIdsConsiderHideHeader();\n this.setPagination((table as PivotTable).options.pagination);\n\n if (this._table.isPivotChart()) {\n this._chartItemSpanSize = 0;\n this._chartItemBandSize = 0;\n // this._chartPadding ;\n this._indicators.find(indicatorObject => {\n if ((indicatorObject?.style as TextStyle)?.padding) {\n this._chartPadding = (indicatorObject.style as TextStyle).padding as number;\n }\n if (indicatorObject.chartSpec?.barWidth && typeof indicatorObject.chartSpec.barWidth === 'number') {\n this._chartItemSpanSize = indicatorObject.chartSpec?.barWidth;\n }\n const bandAxisConfig = indicatorObject.chartSpec?.axes?.find((axis: any) => {\n return axis.type === 'band';\n });\n if (bandAxisConfig?.bandSize) {\n this._chartItemBandSize = bandAxisConfig?.bandSize;\n this._chartPaddingInner =\n (isArray(bandAxisConfig.paddingInner) ? bandAxisConfig.paddingInner[0] : bandAxisConfig.paddingInner) ?? 0;\n this._chartPaddingOuter =\n (isArray(bandAxisConfig.paddingOuter) ? bandAxisConfig.paddingOuter[0] : bandAxisConfig.paddingOuter) ?? 0;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n indicatorObject.chartSpec.series?.find((seriesObject: any) => {\n if (seriesObject.barWidth && typeof seriesObject.barWidth === 'number') {\n this._chartItemSpanSize = seriesObject.barWidth;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n return false;\n });\n // if (this._chartItemSpanSize > 0) {\n // return true;\n // }\n return false;\n });\n }\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n\n this.setColumnWidths();\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map(seriesNumber => {\n return {\n id: '',\n title: seriesNumber.title,\n define: seriesNumber,\n cellType: seriesNumber.cellType ?? 'text',\n headerType: seriesNumber.cellType ?? 'text',\n width: seriesNumber.width,\n style: seriesNumber.style,\n format: seriesNumber.format,\n field: seriesNumber.field,\n icon: seriesNumber.icon\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: '',\n title: rowSeriesNumber.title,\n define: rowSeriesNumber,\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType: rowSeriesNumber.cellType ?? 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '', // rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n _generateColHeaderIds() {\n if (this.columnDimensionTree.tree.children?.length >= 1) {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n this.indicatorsAsCol &&\n this.columnDimensionTree.totalLevel < this.columnHeaderLevelCount\n ) {\n startRow = this.columnHeaderLevelCount - this.columnDimensionTree.totalLevel;\n for (let i = 0; i < startRow; i++) {\n this._columnHeaderCellFullPathIds.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: {\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _generateRowHeaderIds() {\n if (this.rowDimensionTree.tree.children?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n !this.indicatorsAsCol &&\n this.rowDimensionTree.totalLevel < this.rowHeaderLevelCount\n ) {\n startRow = this.rowHeaderLevelCount - this.rowDimensionTree.totalLevel;\n for (let i = 0; i < startRow; i++) {\n this._rowHeaderCellFullPathIds_FULL.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this._rowHeaderCellFullPathIds_FULL[0]?.length ?? this.rowDimensionTree.tree.size).fill(\n id\n );\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n id,\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n results: HeaderData[]\n // totalLevel: number,\n // indicatorKeys: string[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeader(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n this\n // totalLevel, indicatorKeys\n );\n }\n }\n _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, this);\n }\n }\n private _addCornerHeaders(\n colDimensionKeys: string[] | null,\n rowDimensionKeys: string[] | null,\n dimensions: (string | IDimension)[]\n ) {\n const results: HeaderData[] = [];\n if (this.cornerSetting.titleOnDimension === 'all') {\n if (this.indicatorsAsCol) {\n let indicatorAtIndex = -1;\n if (colDimensionKeys) {\n colDimensionKeys.forEach((dimensionKey: string, key: number) => {\n if (dimensionKey === this.indicatorDimensionKey) {\n indicatorAtIndex = key;\n }\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n });\n }\n if (rowDimensionKeys) {\n rowDimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n }\n this._cornerHeaderCellFullPathIds[indicatorAtIndex][key] = id;\n });\n }\n } else {\n let indicatorAtIndex = -1;\n if (rowDimensionKeys) {\n rowDimensionKeys.forEach((dimensionKey: string, key: number) => {\n if (dimensionKey === this.indicatorDimensionKey) {\n indicatorAtIndex = key;\n }\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n });\n }\n if (colDimensionKeys) {\n colDimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n // if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n // this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n // }\n this._cornerHeaderCellFullPathIds[key][indicatorAtIndex] = id;\n });\n }\n }\n } else if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'column') {\n const dimensionKeys = this.cornerSetting?.titleOnDimension === 'row' ? rowDimensionKeys : colDimensionKeys;\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: {\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (this.cornerSetting.titleOnDimension === 'column') {\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n }\n });\n }\n } else {\n const id = ++this.sharedVar.seqId;\n const cell: HeaderData = {\n id,\n title: '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: {\n dimensionKey: '维度名称',\n id,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n }\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n for (let j = 0; j < this.rowHeaderLevelCount; j++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][j] = id;\n }\n }\n }\n\n return results;\n }\n private generateExtensionRowTree() {\n this.extensionRows.forEach((extensionRow, indexP) => {\n const old_rowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL;\n this._rowHeaderCellFullPathIds_FULL = [];\n old_rowHeaderCellIds.forEach((row_ids: number[], index) => {\n const key = row_ids[row_ids.length - 1];\n this.colIndex = 0;\n let tree;\n if (typeof extensionRow.rowTree === 'function') {\n const fullCellIds = this.findFullCellIds(row_ids);\n tree = (extensionRow.rowTree as Function)(\n fullCellIds.map(id => {\n return { dimensionKey: this._headerObjects[id].field, value: this._headerObjects[id].title };\n })\n );\n } else {\n // 需要clone一份 否则跟DimensionTree有引用关系\n tree = cloneDeep(extensionRow.rowTree);\n }\n let rowExtensionDimensionTree;\n if (this._rowHeaderExtensionTree[key]) {\n this._rowHeaderExtensionTree[key].reset(this._rowHeaderExtensionTree[key].tree.children);\n rowExtensionDimensionTree = this._rowHeaderExtensionTree[key];\n } else {\n rowExtensionDimensionTree = new DimensionTree(tree ?? [], this.sharedVar, this.rowHierarchyType, undefined);\n this._rowHeaderExtensionTree[key] = rowExtensionDimensionTree;\n }\n\n const extensionRowTreeHeaderIds: number[][] = [];\n this._addHeadersForTreeMode(\n extensionRowTreeHeaderIds,\n 0,\n rowExtensionDimensionTree.tree.children,\n [],\n rowExtensionDimensionTree.totalLevel,\n true,\n extensionRow.rows,\n this.rowHeaderObjs\n );\n for (let i = 0; i < extensionRowTreeHeaderIds[0].length; i++) {\n this._rowHeaderCellFullPathIds_FULL.push(row_ids.concat(extensionRowTreeHeaderIds[0][i]));\n }\n });\n });\n }\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.leftRowSeriesNumberColumnCount) {\n returnWidths[0] = this.leftRowSeriesNumberColumn[0];\n }\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0 + this.leftRowSeriesNumberColumnCount] = {};\n }\n if (this.rowHierarchyType === 'tree') {\n const mainDimensionFirstRowKey = this.rowDimensionKeys[0];\n if (mainDimensionFirstRowKey) {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === mainDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[0 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n this._extensionRowDimensionKeys?.forEach((extensionRowDimensionKeys, index) => {\n const curDimensionFirstRowKey = extensionRowDimensionKeys[0];\n if (curDimensionFirstRowKey) {\n const dimension = this.extensionRows[index].rows?.find((dimension: string | IRowDimension) =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === curDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + 1 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n });\n // const _headerCellIds = this._rowHeaderCellIds[0];\n // _headerCellIds.forEach((cellId, index) => {\n // const headerDefine = this._headerObjectMap[cellId];\n // headerDefine &&\n // (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n // width: headerDefine.width,\n // minWidth: headerDefine.minWidth,\n // maxWidth: headerDefine.maxWidth\n // });\n // });\n } else {\n const rowDimensionKeys =\n this.rowDimensionTree.totalLevel > 0\n ? this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr()\n : this.rowsDefine.map(dimension => {\n if (typeof dimension === 'string') {\n return dimension;\n }\n return dimension.dimensionKey;\n });\n rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount; i < this.colCount; i++) {\n const cellDefine = this.getBody(i, this.columnHeaderLevelCount);\n returnWidths[i] = {\n width: cellDefine?.width,\n minWidth: cellDefine?.minWidth,\n maxWidth: cellDefine?.maxWidth\n };\n }\n } else {\n let width: string | number | undefined = 0;\n let maxWidth: string | number | undefined;\n let minWidth: string | number | undefined;\n let isAuto;\n this._indicators?.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, minWidth ?? 0);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.min(obj.maxWidth, maxWidth ?? Number.MAX_VALUE);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill(\n { width, minWidth, maxWidth },\n this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount,\n this.colCount - this.rightFrozenColCount\n );\n }\n this._columnWidths = returnWidths;\n }\n\n get columnWidths(): WidthData[] {\n return this._columnWidths;\n }\n getColumnWidthDefined(col: number): WidthData {\n return this._columnWidths[col];\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n get showColumnHeader(): boolean {\n return this._showColumnHeader;\n }\n set showColumnHeader(_showColumnHeader: boolean) {\n this._showColumnHeader = _showColumnHeader;\n }\n get showRowHeader(): boolean {\n return this._showRowHeader;\n }\n set showRowHeader(_showRowHeader: boolean) {\n this._showRowHeader = _showRowHeader;\n }\n get columnHeaderTitle(): ITitleDefine {\n return this._columnHeaderTitle;\n }\n set columnHeaderTitle(_columnHeaderTitle: ITitleDefine) {\n this._columnHeaderTitle = _columnHeaderTitle;\n }\n get rowHeaderTitle(): ITitleDefine {\n return this._rowHeaderTitle;\n }\n set rowHeaderTitle(_rowHeaderTitle: ITitleDefine) {\n this._rowHeaderTitle = _rowHeaderTitle;\n }\n getHeaderFieldKey(col: number, row: number): undefined {\n return undefined;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isCornerHeader(col, row)) {\n return 'cornerHeader';\n } else if (this.isColumnHeader(col, row)) {\n return 'columnHeader';\n } else if (this.isRowHeader(col, row)) {\n return 'rowHeader';\n }\n return 'body';\n }\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(header.define).columns || (header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n\n isHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (row >= 0 && row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightHeaderColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (\n col >= 0 &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n\n isFrozen(col: number, row: number): boolean {\n return (\n this.isFrozenColumn(col) ||\n this.isRightFrozenColumn(col) ||\n this.isBottomFrozenRow(row) ||\n this.isFrozenRow(row) ||\n this.isSeriesNumberInBody(col, row) ||\n this.isSeriesNumberInHeader(col, row)\n );\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: 0 },\n end: { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getRowHeaderRange(): CellRange {\n return {\n start: { col: 0, row: this.columnHeaderLevelCount },\n end: { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 }\n };\n }\n getCornerHeaderRange(): CellRange {\n return {\n start: { col: 0, row: 0 },\n end: { col: this.rowHeaderLevelCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getBodyRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount },\n end: { col: this.colCount - 1, row: this.rowCount - 1 }\n };\n }\n resetCellIds() {\n // for (let row = 0; row < this.columnHeaderLevelCount; row++) {}\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n resetColumnHeaderLevelCount() {\n if (this.showHeader && this.showColumnHeader) {\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.dataset?.colKeys?.length &&\n this.columnDimensionTree?.tree?.level === 0 &&\n !this.hasTwoIndicatorAxes\n ) {\n this.columnHeaderLevelCount = 0;\n return;\n }\n let count = this.indicatorsAsCol\n ? this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n ? this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n ? this.columnDimensionTree.totalLevel - 1\n : this.columnDimensionTree.totalLevel\n : this.columnDimensionTree.totalLevel\n : this.columnDimensionTree.totalLevel;\n\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n !this.dataset.customColTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n // && !this.dataset.customRowTree?.length\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' && this.cornerSetting.forceShowHeader) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.columnsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree // 这里不能改为 !this.dataset.customColTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n // &&\n // !this.dataset.customRowTree\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.columnsDefine.length ?? 0;\n if (!this.hideIndicatorName && this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (this.columnHeaderTitle) {\n count += 1;\n }\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.hasTwoIndicatorAxes &&\n checkHasCartesianChart(this.indicatorsDefine)\n ) {\n count -= 1;\n }\n\n this.columnHeaderLevelCount = count;\n return;\n }\n // this.columnHeaderLevelCount = 0;\n this.columnHeaderLevelCount = !this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n resetRowHeaderLevelCount() {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n const extensionRowCount = this.extensionRows?.length ?? 0;\n if (this.rowHeaderTitle) {\n this.rowHeaderLevelCount = 2 + extensionRowCount;\n return;\n }\n this.rowHeaderLevelCount = 1 + extensionRowCount;\n return;\n }\n const rowLevelCount = this.rowDimensionTree.totalLevel;\n // let count = this.indicatorsAsCol\n // ? rowLevelCount\n // : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n // ? rowLevelCount - 1\n // : rowLevelCount\n // : rowLevelCount;\n\n let count = rowLevelCount;\n\n // if (this._table.isPivotChart()&&this.indicatorsAsCol) {\n // count+=1;\n // }\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n // && !this.dataset.customColTree\n !this.dataset.customRowTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' && this.cornerSetting.forceShowHeader) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.rowsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree // 这里不能改为 !this.dataset.customRowTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.rowsDefine.length;\n if (!this.hideIndicatorName && !this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (\n !this.indicatorsAsCol &&\n this.hideIndicatorName &&\n this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count = rowLevelCount - 1;\n }\n\n if (this.rowHeaderTitle) {\n count += 1;\n }\n\n this.rowHeaderLevelCount = count;\n return;\n }\n // return 0;\n this.rowHeaderLevelCount = this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n get columnHeaderLevelCount(): number {\n return this._columnHeaderLevelCount;\n }\n set columnHeaderLevelCount(count: number) {\n this._columnHeaderLevelCount = count;\n }\n get rowHeaderLevelCount(): number {\n return this._rowHeaderLevelCount;\n }\n set rowHeaderLevelCount(count: number) {\n this._rowHeaderLevelCount = count;\n }\n get colCount(): number {\n return (\n (this.columnDimensionTree.totalLevel > 0 ||\n this._table.isPivotChart() ||\n (this.dataset.records as Array)?.length > 0 ||\n (this.dataset.records && !Array.isArray(this.dataset.records))\n ? this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size\n : 0) +\n this.rowHeaderLevelCount +\n this.rightHeaderColCount +\n this.leftRowSeriesNumberColumnCount\n ); // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出\n }\n get rowCount(): number {\n return (\n ((this._table.records || this.dataset.records\n ? Array.isArray(this._table.records)\n ? this._table.records.length > 0\n : true\n : false) &&\n this._indicators?.length > 0 && // 前两个判断条件来判断 有展示的body值的情况 需要展示body row\n !this._rowHeaderCellIds?.length // 需要展示body值 但 _rowHeaderCellIds的长度维度为0 无rows 行表头为空\n ? 1 //兼容bugserver: https://bugserver.cn.goofy.app/case?product=VTable&fileid=65364a57173c354c242a7c4f\n : this._rowHeaderCellIds?.length ?? 0) + //兼容 bugserver:https://bugserver.cn.goofy.app/case?product=VTable&fileid=6527ac0695c0cdbd788cf17d\n this.columnHeaderLevelCount +\n this.bottomHeaderRowCount // 小心bottomFrozenRowCount和rowCount的循环引用 造成调用栈溢出\n );\n // return (this._rowHeaderCellIds?.length ?? 0) + this.columnHeaderLevelCount + this.bottomFrozenRowCount;\n }\n get bodyRowSpanCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'bottom';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n // 指标在列上,指标及其对应坐标轴显示在底部,下侧冻结行数为1\n return 1;\n }\n return 1; // 指标在行上,维度对应坐标轴显示在底部,下侧冻结行数为1\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n // // return 0;\n // if (this.showHeader && this.showColumnHeader) {\n // if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n // // 查询指标是否有multiIndicator\n // return this.indicatorsDefine.find(indicator => {\n // return (indicator as any)?.multiIndicator;\n // })\n // ? 1\n // : 0;\n // }\n // }\n // return 0;\n //上面是原有逻辑\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.rowHeaderLevelCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return this.colCount - this.rowHeaderLevelCount;\n }\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'right';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n\n if (this.indicatorsAsCol) {\n return 0; // 指标在列上,没有图表需要显示右轴\n } else if (this.hasTwoIndicatorAxes) {\n // 查找指标,判断是否有双轴情况,如果有,则右侧冻结列数为1\n return 1;\n }\n return 0;\n }\n\n /** 不包括冻结的行 还是不确定应不应该包括*/\n get bodyRowCount(): number | undefined {\n return this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number | undefined {\n return this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): IndicatorData[] {\n return this._indicators;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (row >= 0 && col >= 0) {\n if (this.isSeriesNumber(col, row)) {\n return '';\n } else if (this.isCornerHeader(col, row)) {\n return this._cornerHeaderCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isColumnHeader(col, row)) {\n return this._columnHeaderCellIds[row]?.[col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRowHeader(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRightFrozenColumn(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[this.rowHeaderLevelCount - 1];\n } else if (this.isBottomFrozenRow(col, row)) {\n return this._columnHeaderCellIds[this.columnHeaderLevelCount - 1]?.[\n col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n ];\n }\n }\n return undefined;\n }\n // getCellIdOnHeader(col: number, row: number): LayoutObjectId {\n // if (row >= 0 && col >= 0) {\n // if (this.isCornerHeader(col, row)) return this._cornerHeaderCellIds[row][col];\n // else if (this.isColumnHeader(col, row))\n // return this._columnHeaderCellIds[row][col - this.rowHeaderLevelCount];\n // else if (this.isRowHeader(col, row))\n // return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col];\n // return this.getCellIdOnHeader(\n // col >= this.rowHeaderLevelCount ? this.rowHeaderLevelCount - 1 : col,\n // row >= this.columnHeaderLevelCount ? this.columnHeaderLevelCount - 1 : row\n // );\n // }\n // return 0;\n // }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number] ?? { id: undefined, field: '', headerType: 'text', define: undefined };\n }\n getHeaderField(col: number, row: number) {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]?.field || this.getBody(col, row)?.field;\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._columnHeaderCellIds.length; i++) {\n const row = this._columnHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j + this._table.frozenColCount, row: i };\n }\n }\n }\n for (let i = 0; i < this._rowHeaderCellIds.length; i++) {\n const row = this._rowHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i + this._table.frozenRowCount };\n }\n }\n }\n for (let i = 0; i < this._cornerHeaderCellIds.length; i++) {\n const row = this._cornerHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i };\n }\n }\n }\n return undefined;\n }\n /** 透视表中此函数有问题 应该传入paths */\n getHeaderCellAddressByField(field: string) {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData | SeriesNumberColumnData {\n const cache = this.getBodyWidthCache(_col, _row);\n if (cache) {\n return cache;\n }\n if (this.isSeriesNumber(_col, _row)) {\n const body = this.getSeriesNumberBody(_col, _row);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // let indicatorData;\n //正常情况下 通过行号或者列号可以取到Indicator的配置信息 但如果指标在前维度在后的情况下(如风神:列配置【指标名称,地区】) indicators中的数量是和真正指标值一样数量\n // if (this.indicatorsAsCol) indicatorData = this.indicators[_col - this.rowHeaderLevelCount];\n // else indicatorData = this.indicators[_row - this.columnHeaderLevelCount];\n // if (indicatorData) return indicatorData;\n const paths = this.getCellHeaderPaths(_col, _row);\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths?.find(colPath => colPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n const indicatorKey = paths.rowHeaderPaths?.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n // for (let col = 0; col < (this.colCount ?? 0); col++) {\n // if (id === this.columnObjects[col].id) {\n // return {\n // start: { col, row: 0 },\n // end: { col, row: 0 }\n // };\n // }\n // }\n\n // throw new Error(`can not found body layout @id=${id as number}`);\n // }\n getCellRange(col: number, row: number): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n if (!this.isHeader(col, row) || col === -1 || row === -1) {\n // || this.isIndicatorHeader(col, row)// 为什么加想不想来了 但是如果加上指标属于合并单元格的情况就会有问题了\n return result;\n }\n\n if (this.isRightFrozenColumn(col, row) || this.isBottomFrozenRow(col, row)) {\n return result;\n }\n\n if (this._table.isPivotChart()) {\n if (this.isLeftBottomCorner(col, row)) {\n return {\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n };\n } else if (this.isRightTopCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n };\n } else if (this.isRightBottomCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n };\n }\n }\n\n // if (this._cellRangeMap.has(`$${col}$${row}`)) {\n // return this._cellRangeMap.get(`$${col}$${row}`);\n // }\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n return range;\n }\n }\n if (this.isHeader(col, row) && col !== -1 && row !== -1) {\n //in header\n const id = this.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (this.colCount ?? 0); c++) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (\n id !== this.getCellId(col, r)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (\n id !== this.getCellId(col, r) ||\n (this.isSeriesNumberInHeader(col, row) && r >= this.columnHeaderLevelCount)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.end.row = r;\n }\n }\n // this._cellRangeMap.set(`${col}-${row}`, result);\n if (result.end.col - result.start.col > 100 || result.end.row - result.start.row > 100) {\n // only cache large range to avoid long col&row search\n this._largeCellRangeCache.push(result);\n }\n return result;\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n\n getBodyIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n // return this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n }\n get bottomHeaderRowCount() {\n if (this._table.isPivotChart()) {\n return this.bottomFrozenRowCount;\n }\n return 0;\n }\n\n get rightHeaderColCount() {\n if (this._table.isPivotChart()) {\n return this.rightFrozenColCount;\n }\n return 0;\n }\n getBodyIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n return -1;\n } else if (col >= this.colCount - this.rightHeaderColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWithTreeNode(col: number, row: number): IPivotTableCellHeaderPaths {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n // if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n // return this._CellHeaderPathMap.get(`${col}-${row}`);\n // }\n // if (col === this._lastCellCol && row === this._lastCellRow) {\n // return this._lastCellHeaderPath;\n // }\n\n let _largeCellRangeCacheIndex = -1;\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n _largeCellRangeCacheIndex = i;\n break;\n }\n }\n\n let colPath: ITreeLayoutHeadNode[] = this.getColHeaderPathCache(col, row);\n let rowPath: ITreeLayoutHeadNode[] = this.getRowHeaderPathCache(col, row);\n\n // if (_largeCellRangeCacheIndex !== -1) {\n // const range = this._largeCellRangeCache[_largeCellRangeCacheIndex];\n // if (this._CellHeaderPathMap.has(`${range.start.col}-${range.start.row}`)) {\n // return this._CellHeaderPathMap.get(`${range.start.col}-${range.start.row}`);\n // }\n // }\n // console.log(`${col}-${row}`);\n const recordCol = this.getBodyIndexByCol(col);\n const recordRow = this.getBodyIndexByRow(row) + this.currentPageStartIndex;\n\n // column\n if (!colPath && row >= 0 && recordCol >= 0) {\n colPath = this.columnDimensionTree.getTreePath(\n recordCol,\n this.showHeader && this.showColumnHeader\n ? row - (this.columnHeaderTitle ? 1 : 0)\n : this.columnDimensionTree.totalLevel\n );\n // this._colHeaderPathCache.set(col, colPath);\n this.setColHeaderPathCache(col, row, colPath);\n }\n\n // row\n if (!rowPath && col >= 0 && recordRow >= 0) {\n rowPath = [];\n if (this.rowHierarchyType === 'tree') {\n // 注释了原有逻辑\n // if (col >= this.rowHeaderLevelCount) {\n // //body单元格 col代表寻找的深度 这里需要加上行表头的整体深度\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + this.rowDimensionTree.totalLevel);\n // } else {\n // //header单元格 col代表寻找的深度 这里需要加上当前单元格行表头的深度\n // const hd = this.getHeader(col, row);\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + hd.hierarchyLevel);\n // }\n // 考虑多层级的ExtensionRowTree\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n let findTree = this.rowDimensionTree; //第一棵寻找的树是第一列的维度树 主树\n let level = 0; //level和col对应,代表一层层树找的过程\n while (findTree) {\n const pathIds: (number | string)[] = []; // pathIds记录寻找当前树需要匹配的cellId\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n // 组装好pathIds后从树中找出具体路径paths\n const findedRowPath = findTree.getTreePathByCellIds(pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n findTree = this._rowHeaderExtensionTree[row_pathIds[level]];\n level++;\n }\n } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader\n ? col - (this.rowHeaderTitle ? 1 : 0) - this.leftRowSeriesNumberColumnCount\n : this.rowDimensionTree.totalLevel\n );\n }\n // this._rowHeaderPathCache.set(row, rowPath);\n this.setRowHeaderPathCache(col, row, rowPath);\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath, cellLocation: this.getCellLocation(col, row) };\n // this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWithTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: [],\n cellLocation: headerPathsWidthNode.cellLocation\n };\n headerPathsWidthNode.colHeaderPaths?.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n colHeaderPath.virtual = colHeader.virtual;\n headerPaths.colHeaderPaths!.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths?.forEach((rowHeader: any) => {\n if (rowHeader.dimensionKey !== 'axis') {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n rowHeaderPath.value =\n rowHeader.value ?? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? '';\n rowHeaderPath.virtual = rowHeader.virtual;\n headerPaths.rowHeaderPaths!.push(rowHeaderPath);\n }\n });\n return headerPaths;\n }\n private getIndicatorInfoByIndicatorKey(indicatorKey: string) {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /**\n *\n * @param row_pathIds 当前_rowHeaderCellIds 可能只存储了一列id如:\n * [\n * [47],\n * [50]\n * ]\n * 但实际可能是有两三层或更多,所以全路径dimensionPath的话应该对应更多\n * [\n * [47, 48, 49]\n * [50, 51, 52]\n * ]\n * @returns 返回对应每一层维度对应的headerId, [47]为参数的话 返回 [47, 48, 49]\n */\n private findFullCellIds(row_pathIds: LayoutObjectId[]) {\n const pathIds = []; // pathIds记录寻找当前树需要匹配的cellId\n for (let level = 0; level < row_pathIds.length; level++) {\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n }\n return pathIds;\n }\n getHeaderDimension(col: number, row: number): IDimension | undefined {\n if (this.isHeader(col, row)) {\n const header = this.getHeader(col, row);\n const dimension =\n this.rowsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field) ??\n this.columnsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field);\n return dimension as IDimension;\n }\n return undefined;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isColumnIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'column' &&\n row === this.columnHeaderLevelCount - 1 &&\n col >= this.rowHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isRowIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'row' &&\n col === this.rowHeaderLevelCount - 1 &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isIndicatorHeader(col: number, row: number): boolean {\n return this.isColumnIndicatorHeader(col, row) || this.isRowIndicatorHeader(col, row);\n }\n\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n this.colIndex = 0;\n const oldRowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map((id, row) => {\n return { col, row: row + this.columnHeaderLevelCount };\n });\n const hd = this.getHeader(col, row);\n (hd.define).hierarchyState =\n (hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n const diffCell: {\n addCellPositions: CellAddress[];\n removeCellPositions: CellAddress[];\n updateCellPositions?: CellAddress[];\n } = diffCellAddress(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[col - this.leftRowSeriesNumberColumnCount]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[col - this.leftRowSeriesNumberColumnCount]),\n oldRowHeaderCellPositons,\n this\n );\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n return diffCell;\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\n * TODO 这个函数在有extensionRows的时候会有问题 数的startIndex等已经不对应了\n * @param dimensions\n * @returns\n */\n getPivotCellAdress(dimensions: IDimensionInfo[]): CellAddress | undefined {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n let col = 0; //树形展示的情况下 肯定是在第0列\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowDimensionKeys as Array).indexOf(highlightDimension.dimensionKey);\n }\n return col === -1\n ? undefined\n : { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array).indexOf(highlightDimension.dimensionKey);\n return row === -1\n ? undefined\n : { col: 0 + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderTitle ? row + 1 : row };\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr.length; k++) {\n const dimension = rowArr[k];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n let col = 0;\n let row = 0;\n if (rowDimension) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = rowDimension as ITreeLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowHeaderTitle ? level + 1 : level) + this.leftRowSeriesNumberColumnCount;\n } else {\n col = 0 + this.leftRowSeriesNumberColumnCount;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, level } = colDimension as ITreeLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? level + 1 : level;\n return { col, row };\n }\n return undefined;\n }\n getPivotDimensionInfo(col: number, row: number): IDimensionInfo[] {\n const { colHeaderPaths, rowHeaderPaths } = this.getCellHeaderPaths(col, row);\n const pivotInfo: IDimensionInfo[] = [];\n if (colHeaderPaths.length) {\n // 列表头\n colHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === colHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (rowHeaderPaths.length) {\n // 行表头\n rowHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === rowHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (this.isCornerHeader(col, row)) {\n // 角表头\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n // for (let i = 0; i <= col; i++) {\n pivotInfo.push({\n dimensionKey:\n this.rowDimensionKeys[(this.rowHeaderTitle ? col - 1 : col) - this.leftRowSeriesNumberColumnCount],\n isPivotCorner: true\n });\n // }\n } else {\n // for (let i = 0; i <= row; i++) {\n pivotInfo.push({\n dimensionKey: this.colDimensionKeys[this.columnHeaderTitle ? row - 1 : row],\n isPivotCorner: true\n });\n // }\n }\n }\n\n return pivotInfo;\n }\n\n getIndicatorKey(col: number, row: number) {\n // let indicator;\n // if (this._indicators?.length === 1) indicator = this._indicators[0];\n // else if (this.indicatorsAsCol) {\n // const bodyCol = col - this.rowHeaderLevelCount;\n // indicator = this._indicators[bodyCol % this._indicators?.length];\n // } else {\n // const bodyRow = row - this.columnHeaderLevelCount;\n // indicator = this._indicators[bodyRow % this._indicators?.length];\n // }\n\n // return indicator?.indicatorKey;\n return (this.getBody(col, row) as IndicatorData)?.indicatorKey;\n }\n getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n getRowHeaderCellAddressByCellId(cellId: LayoutObjectId) {\n let col;\n let row;\n this._rowHeaderCellIds.find((cellIds, rowIndex) => {\n const finded = cellIds.find((id, colIndex) => {\n if (id === cellId) {\n col = colIndex;\n return true;\n }\n return false;\n });\n if (finded) {\n row = rowIndex;\n return true;\n }\n return false;\n });\n if (isValid(col) && isValid(row)) {\n return { col, row: (row as number) + this.columnHeaderLevelCount };\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n }\n if (this.isCornerHeader(target.col, target.row)) {\n return false;\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row)) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n // if (\n // this.getColumnDefine(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n // this.getColumnDefine(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n // ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n // } else {\n // // 为适应下面的判断逻辑 将col加至表格第一级\n // source.col = source.col + this.leftRowSeriesNumberColumnCount;\n // target.col = target.col + this.leftRowSeriesNumberColumnCount;\n // }\n }\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n if (this.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\n\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n if (sourceRowHeaderPaths.length === targetRowHeaderPaths.length) {\n return !sourceRowHeaderPaths.find(\n (item: any, i: number) =>\n item.dimensionKey !== targetRowHeaderPaths[i].dimensionKey ||\n item.value !== targetRowHeaderPaths[i].value\n );\n }\n\n if (sourceRowHeaderPaths.length > 0) {\n //处理如层级a.b节点移动到c.d.e节点的情况 这个时候要返回false\n for (let i = 0; i < sourceRowHeaderPaths.length; i++) {\n if (sourceRowHeaderPaths[i].startInTotal !== targetRowHeaderPaths[i].startInTotal) {\n return false;\n }\n }\n }\n return true;\n }\n } else {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (\n this.canMoveHeaderPosition(source, target) &&\n !this.isCellRangeEqual(source.col, source.row, target.col, target.row)\n ) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // // _columnHeaderCellIds 逐行将每一行的source id 移动到目标地址targetCol处\n // for (let row = 0; row < this._columnHeaderCellIds.length; row++) {\n // // 从header id的二维数组中取出需要操作的source ids\n // const sourceIds = this._columnHeaderCellIds[row].splice(\n // sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n // sourceSize\n // );\n // // 将source ids插入到目标地址targetCol处\n // // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n // sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n // Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n // }\n // _columnHeaderCellFullPathIds 调整了 _columnHeaderCellIds就不需要调整了 因为他们的第二层数组对象是引用关系\n // _columnHeaderCellFullPathIds 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._columnHeaderCellFullPathIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._columnHeaderCellFullPathIds[row].splice(\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellFullPathIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).colHeaderPaths.length - 1,\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n targetCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths as any;\n const targetRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths as any;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n // const moveSize = sourceRowHeaderNode.size;\n const sourceSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - sourceSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (\n // targetIndex === source.row - this.columnHeaderLevelCount ||\n // targetIndex === sourceCellRange.end.row - this.columnHeaderLevelCount\n targetIndex ===\n sourceCellRange.start.row - this.columnHeaderLevelCount\n ) {\n return null;\n }\n\n // 表头id _rowHeaderCellIds进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._rowHeaderCellIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 表头id _rowHeaderCellFullPathIds\n const sourceIds0 = this._rowHeaderCellFullPathIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds0.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds, sourceIds0);\n // 表头id _rowHeaderCellIds_FULL进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds_FULL = this._rowHeaderCellIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds_FULL, sourceIds_FULL);\n // 表头id _rowHeaderCellFullPathIds_FULL进行调整\n const sourceIds_FULL0 = this._rowHeaderCellFullPathIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL0.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds_FULL, sourceIds_FULL0);\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n sourceRowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n // targetCellRange.start.row - this.columnHeaderLevelCount\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n sourceSize,\n targetSize: targetRowHeaderNode.size,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n\n /**\n * 通过dimensionPath获取到对应的表头地址col row, dimensionPath不要求必须按照表头层级顺序传递\n * @param dimensions\n * @returns\n */\n getCellAdressByHeaderPath(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress | undefined {\n let colHeaderPaths: IDimensionInfo[];\n let rowHeaderPaths: IDimensionInfo[];\n let isCornerCell = false;\n let forceBody = false;\n if (Array.isArray(dimensionPaths)) {\n if (dimensionPaths.length > this.rowDimensionKeys.length + this.colDimensionKeys.length) {\n //如果传入的path长度比行列维度层级多的话 无法匹配\n return undefined;\n }\n // 如果传入的是整体的path 按照行列维度区分开\n colHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.colDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.colDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.rowDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\n if (dimensionPaths?.cellLocation === 'body' && this._table.isPivotTable()) {\n forceBody = true;\n }\n }\n\n if (!Array.isArray(colHeaderPaths) && !Array.isArray(rowHeaderPaths)) {\n return undefined;\n }\n // 行列维度path根据key排序\n colHeaderPaths?.sort((a, b) => {\n return (\n this.colDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.colDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n rowHeaderPaths?.sort((a, b) => {\n return (\n this.fullRowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.fullRowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n\n colHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n rowHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n if (isCornerCell) {\n if (this.cornerSetting.titleOnDimension === 'all' && this.indicatorsAsCol && colHeaderPaths.length === 0) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderLevelCount - 1 };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'all' &&\n !this.indicatorsAsCol &&\n rowHeaderPaths.length === 0\n ) {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: this.rowHeaderLevelCount - 1, row: i };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'row' ||\n (this.cornerSetting.titleOnDimension === 'all' && !this.indicatorsAsCol)\n ) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n }\n } else {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: 0, row: i };\n }\n }\n }\n }\n let needLowestLevel = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowArr = this.rowTree;\n let rowDimensionFinded;\n let colArr = this.columnTree;\n let colDimensionFinded;\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n for (let i = 0; i < colHeaderPaths.length; i++) {\n const colDimension = colHeaderPaths[i];\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (!isValid(colDimension.indicatorKey) &&\n dimension.dimensionKey === colDimension.dimensionKey &&\n dimension.value === colDimension.value) ||\n (isValid(colDimension.indicatorKey) && dimension.indicatorKey === colDimension.indicatorKey)\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n if (needLowestLevel && !colArr) {\n colDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n colDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n // 先根据最后一个path获取到所有匹配该维度的pathCellIds\n const rowDimension = rowHeaderPaths[rowHeaderPaths.length - 1];\n const cellIDs: LayoutObjectId[] = this.headerObjects\n .filter((hd: HeaderData) => {\n return (\n (hd?.field === rowDimension.dimensionKey || hd?.field === rowDimension.indicatorKey) &&\n hd?.title === rowDimension.value\n );\n })\n .map((hd: HeaderData) => {\n return hd.id;\n });\n\n const findedCellIdPaths = this._rowHeaderCellIds.filter(rowHdCellIDs => {\n return cellIDs.indexOf(rowHdCellIDs[rowHdCellIDs.length - 1]) >= 0;\n });\n // 从上述过程中找到的pathCellIds中找到正确匹配完整路径rowHeaderPaths的一个 然后计算row行号\n const findedCellIdPath = findedCellIdPaths.find(pathIds => {\n const fullCellIds = this.findFullCellIds(pathIds);\n return (\n fullCellIds.length === rowHeaderPaths.length &&\n fullCellIds.every(id => {\n const curHd = this._headerObjectMap[id];\n return rowHeaderPaths.find(rowDimensionPath => {\n return rowDimensionPath.dimensionKey === curHd.field && rowDimensionPath.value === curHd.title;\n });\n })\n );\n });\n row = this._rowHeaderCellIds.indexOf(findedCellIdPath) + this.columnHeaderLevelCount;\n } else {\n for (let i = 0; i < rowHeaderPaths.length; i++) {\n const rowDimension = rowHeaderPaths[i];\n // 判断级别,找到distDimension\n // let isCol = false;\n for (let j = 0; j < rowArr.length; j++) {\n const dimension = rowArr[j];\n if (\n (!isValid(rowDimension.indicatorKey) &&\n dimension.dimensionKey === rowDimension.dimensionKey &&\n dimension.value === rowDimension.value) ||\n (isValid(rowDimension.indicatorKey) &&\n dimension.indicatorKey === rowDimension.indicatorKey &&\n (!isValid(rowDimension.value) || dimension.value === rowDimension.value))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n if (needLowestLevel && (!rowArr || rowArr.some(row => row.dimensionKey === 'axis'))) {\n rowDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n rowDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n }\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (!forceBody && needLowestLevel) {\n if ((!rowDimensionFinded && !isValid(row)) || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded || forceBody) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = (rowDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n row += startInTotal ?? 0;\n if (this.rowHierarchyType === 'grid') {\n defaultCol = (this.rowHeaderTitle ? level + 1 : level) + this.leftRowSeriesNumberColumnCount;\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded || forceBody) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, level } = (colDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n col += startInTotal ?? 0;\n defaultRow = this.columnHeaderTitle ? level + 1 : level;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\n }\n return undefined;\n }\n\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n if (typeof indicatorObj?.chartSpec === 'function') {\n return;\n }\n indicatorObj && (indicatorObj.chartInstance = chartInstance);\n }\n\n getChartInstance(_col: number, _row: number) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n return indicatorObj?.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getDimension(dimensionKey: string, type: 'column' | 'row'): any {\n if (type === 'column') {\n return this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n } else if (type === 'row') {\n return this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n }\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n if (\n ((this.isFrozenColumn(col, row) || this.isRightFrozenColumn(col, row)) &&\n isHasCartesianChartInline(col, row, 'row', this)) ||\n ((this.isFrozenRow(col, row) || this.isBottomFrozenRow(col, row)) &&\n isHasCartesianChartInline(col, row, 'col', this))\n ) {\n const getAxisConfigInPivotChart = Factory.getFunction('getAxisConfigInPivotChart') as GetAxisConfigInPivotChart;\n const config = getAxisConfigInPivotChart(col, row, this);\n if (config?.visible === false) {\n return undefined;\n }\n return config;\n }\n return undefined;\n }\n isEmpty(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.isLeftBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightTopCorner(col, row)) {\n return true;\n }\n return false;\n }\n isAxisCell(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n if (\n (this.isBottomFrozenRow(col, row) && isHasCartesianChartInline(col, row, 'col', this)) ||\n (this.isRightFrozenColumn(col, row) && isHasCartesianChartInline(col, row, 'row', this))\n ) {\n return true;\n }\n if (\n this.isRowHeader(col, row) &&\n col === this.rowHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'row', this)\n ) {\n return true;\n }\n if (\n this.hasTwoIndicatorAxes &&\n this.indicatorsAsCol &&\n row === this.columnHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'col', this)\n ) {\n return true;\n }\n }\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n if (isCartesianChart(col, row, this) || this.isAxisCell(col, row)) {\n return getChartAxes(col, row, this);\n }\n return undefined;\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n\n getChartSpec(col: number, row: number): any {\n return getChartSpec(col, row, this);\n }\n isShareChartSpec(col: number, row: number): any {\n return isShareChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n return isNoChartDataRenderNothing(col, row, this);\n }\n setPagination(pagination: IPagination): void {\n this.clearCellRangeMap();\n this._table.internalProps.useOneRowHeightFillAll = false;\n this.pagination = pagination;\n\n if (\n this.rowHierarchyType === 'grid' &&\n isValid(this.pagination?.perPageCount) &&\n isValid(this.pagination?.currentPage)\n ) {\n //调整perPageCount的数量 需要是indicatorKeys.length的整数倍\n if (this.indicatorsAsCol === false) {\n this.pagination.perPageCount =\n Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;\n }\n const { perPageCount, currentPage } = this.pagination;\n // const startIndex = Math.ceil((perPageCount * (currentPage || 0)) / this.indicatorKeys.length);\n // const endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);\n this.currentPageStartIndex = perPageCount * (currentPage || 0);\n this.currentPageEndIndex = this.currentPageStartIndex + perPageCount;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n } else {\n this.currentPageStartIndex = 0;\n this.currentPageEndIndex = this._rowHeaderCellIds_FULL.length;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n }\n this.pagination && (this.pagination.totalCount = this._rowHeaderCellIds_FULL?.length);\n }\n release() {\n const activeChartInstance = (this._table as PivotTable)._getActiveChartInstance();\n activeChartInstance?.release();\n this._indicators?.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n }\n\n getHeadNode(col: number, row: number) {\n let dimensions: IDimensionInfo[];\n const headerPaths = this.getCellHeaderPaths(col, row);\n if (headerPaths.rowHeaderPaths && (headerPaths.rowHeaderPaths?.length ?? 0) > 0) {\n dimensions = headerPaths.rowHeaderPaths?.slice(0, headerPaths.rowHeaderPaths.length);\n } else if (headerPaths.colHeaderPaths && headerPaths.colHeaderPaths.length > 0) {\n dimensions = headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length);\n }\n return this.getHeadNodeByRowOrColDimensions(dimensions, col, row);\n }\n getHeadNodeByRowOrColDimensions(dimensions: IDimensionInfo[], col?: number, row?: number) {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n\n // 处理带有扩展row时 获取node错误问题 rowArr需要变更为有相应扩展后的tree\n if (\n isValid(row) &&\n isValid(col) &&\n this.rowHierarchyType === 'tree' &&\n this.extensionRows &&\n col >= 1 + this.leftRowSeriesNumberColumnCount\n ) {\n const hdId = this.getCellId(col - 1, row);\n rowArr = this._rowHeaderExtensionTree[hdId].tree.children;\n }\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n return undefined;\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr?.length ?? 0; k++) {\n const dimension = rowArr[k];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n if (rowDimension) {\n return rowDimension;\n } else if (colDimension) {\n return colDimension;\n }\n return undefined;\n }\n clearCellRangeMap() {\n // this._cellRangeMap.clear();\n this._largeCellRangeCache.length = 0;\n this._CellHeaderPathMap = new Map();\n }\n\n /**\n * 获取图表对应的维度key非指标\n * */\n getDimensionKeyInChartSpec(_col: number, _row: number) {\n let dimensionKey: string;\n if (this.indicatorsAsCol === false) {\n //考虑pie和bar 同时配置的情况 series?.[0]?.xField;没有的情况\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey = chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n } else {\n //考虑pie和bar 同时配置的情况 series?.[0]?.xField;没有的情况\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey = chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n }\n return null;\n }\n\n /** 将_selectedDataItemsInChart保存的数据状态同步到各个图表实例中 */\n _generateChartState() {\n const state = {\n vtable_selected: {\n filter: (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !!match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !!match;\n }\n return false;\n }\n },\n vtable_selected_reverse: {\n filter: (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !match;\n }\n return false;\n }\n }\n };\n return state;\n }\n updateDataStateToChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n this._indicators.forEach((_indicatorObject: IndicatorData) => {\n const chartInstance = _indicatorObject.chartInstance;\n if (_indicatorObject.chartSpec.select?.enable !== false) {\n chartInstance.updateState(state);\n }\n });\n activeChartInstance?.updateState(state);\n }\n }\n updateDataStateToActiveChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n activeChartInstance?.updateState(state);\n }\n }\n\n /**\n * 获取图表对应的指标值\n * */\n getIndicatorKeyInChartSpec(_col: number, _row: number) {\n // const paths = this.getCellHeaderPaths(_col, _row);\n // let indicatorObj;\n // if (this.indicatorsAsCol) {\n // const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // } else {\n // const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // }\n // const chartSpec = indicatorObj?.chartSpec;\n const chartSpec = this.getRawChartSpec(_col, _row);\n const indicatorKeys: string[] = [];\n if (chartSpec) {\n if (chartSpec.series || chartSpec.xField || chartSpec.yField) {\n if (this.indicatorsAsCol === false) {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const yField = chartSeries.yField;\n indicatorKeys.push(yField);\n });\n } else {\n indicatorKeys.push(chartSpec.yField);\n }\n } else {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const xField = chartSeries.xField;\n indicatorKeys.push(xField);\n });\n } else {\n indicatorKeys.push(chartSpec.xField);\n }\n }\n return indicatorKeys;\n } else if (chartSpec.valueField) {\n indicatorKeys.push(chartSpec.valueField);\n }\n if (indicatorKeys.length >= 1) {\n return indicatorKeys;\n }\n }\n return null;\n }\n /** 获取某一图表列的最优高度,计算逻辑是根据图表的yField的维度值个数 * barWidth */\n getOptimunHeightForChart(row: number) {\n const path = this.getCellHeaderPaths(this.rowHeaderLevelCount, row).rowHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'yField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let height;\n if (this._chartItemBandSize) {\n // height = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n height = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n height = (collectedValues?.length ?? 0) * (barWidth + barWidth / 3);\n }\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return height + padding[0] + padding[2];\n }\n /** 获取某一图表列的最优宽度,计算逻辑是根据图表的xField的维度值个数 * barWidth */\n getOptimunWidthForChart(col: number) {\n const path = this.getCellHeaderPaths(col, this.columnHeaderLevelCount).colHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'xField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let width;\n if (this._chartItemBandSize) {\n // width = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n width = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n width = (collectedValues?.length ?? 0) * (barWidth + barWidth / 3);\n }\n\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return width + padding[1] + padding[3];\n }\n\n get leftAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'left';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n return 1; // 左侧维度轴\n }\n return 1; // 左侧主指标轴\n }\n get topAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'top';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol && this.hasTwoIndicatorAxes) {\n return 1; // 顶部副指标\n }\n return 0; // 顶部无轴\n }\n get rightAxesCount(): number {\n return this.rightFrozenColCount;\n }\n get bottomAxesCount(): number {\n return this.bottomFrozenRowCount;\n }\n getColKeysPath(col: number, row: number) {\n // const index = !this.indicatorsAsCol\n // ? col - this.rowHeaderLevelCount\n // : Math.floor((col - this.rowHeaderLevelCount) / this.indicatorKeys.length);\n // const colKey = this.dataset.colKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const colKey: string[] = [];\n if (path.colHeaderPaths.length) {\n path.colHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n colKey.push(path.value);\n }\n });\n }\n return colKey?.join(this.dataset.stringJoinChar);\n }\n getRowKeysPath(col: number, row: number) {\n // const index = this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n // const rowKey = this.dataset.rowKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const rowKey: string[] = [];\n if (path.rowHeaderPaths.length) {\n path.rowHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n rowKey.push(path.value);\n }\n });\n }\n return rowKey?.join(this.dataset.stringJoinChar);\n }\n\n getIndicatorInfo(indicatorKey: string, indicatorValue = '') {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n if (indicatorValue) {\n return indicator.title === indicatorValue;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /** 获取行头树结构 */\n getLayoutColumnTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.columnDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取行头树结构 */\n getLayoutRowTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.rowDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取列头总共的行数(全部展开情况下) */\n getLayoutColumnTreeCount() {\n const children = this.columnDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n return mainTreeCount;\n }\n /** 获取行头总共的行数(全部展开情况下) */\n getLayoutRowTreeCount() {\n const children = this.rowDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n let totalCount = mainTreeCount;\n this.extensionRows?.forEach(extensionRow => {\n if (typeof extensionRow.rowTree !== 'function') {\n //如果是自定义函数的扩展树结构 忽略这个计算 因为太复杂 需要将每个函数需要的参数都构造好才行\n const thisTreeCount = countLayoutTree(extensionRow.rowTree as { children: any }[], true);\n totalCount *= thisTreeCount;\n }\n });\n return totalCount;\n }\n resetHeaderTree() {\n this.colIndex = 0;\n //和初始化代码逻辑一致 但未考虑透视图类型\n this._rowHeaderCellFullPathIds_FULL = [];\n this._columnHeaderCellFullPathIds = [];\n this._columnHeaderCellIds = [];\n const dataset = this.dataset;\n // if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n\n const beforeRowDimensions = this.rowDimensionTree.tree.children;\n this.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n (this._table as PivotTable)._syncHierarchyState(beforeRowDimension, node);\n }\n });\n\n this.columnDimensionTree = new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.rowHierarchyType,\n this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n );\n\n this.resetColumnHeaderLevelCount();\n\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n // return this.leftRowSeriesNumberColumn[col];\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: this._table.internalProps.rowSeriesNumber.headerStyle\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n\n /** 修改表头值 */\n changeTreeNodeTitle(col: number, row: number, value: string) {\n // const headerPaths = this.getCellHeaderPaths(col, row);\n // if (headerPaths.rowHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));\n // headerTreeNode.value = value;\n // } else if (headerPaths.colHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length));\n // headerTreeNode.value = value;\n // }\n const headerTreeNode = this.getHeadNode(col, row);\n headerTreeNode.value = value;\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n changeCornerTitle(col: number, row: number, value: string) {\n if (this.isCornerHeader(col, row)) {\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n }\n generateCellIdsConsiderHideHeader() {\n // deal with hide header\n // 创建原数组的副本\n this._columnHeaderCellIds = this._columnHeaderCellFullPathIds.slice();\n if (!this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._columnHeaderCellIds.splice(indicatorIndex, 1);\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n this._columnHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n }\n }\n // else if (this.indicatorsAsCol) {\n // const indicatorsIds = this._columnHeaderCellIds[this._columnHeaderCellIds.length - 1];\n // for (let i = indicatorsIds.length - 1; i >= 0; i--) {\n // const id = indicatorsIds[i];\n // const define: IIndicator = this.headerObjects[id]?.define as any as IIndicator;\n // if ((define as any).indicatorKey && define.hide) {\n // let isHide = false;\n // if (typeof define.hide === 'function') {\n // isHide = define.hide({\n // dimensionPaths: this.getCellHeaderPaths(this.rowHeaderLevelCount + i, this.columnHeaderLevelCount - 1)\n // .colHeaderPaths as IDimensionInfo[],\n // table: this._table\n // });\n // } else {\n // isHide = define.hide;\n // }\n // //判断指标是否设置了hide\n // if (isHide) {\n // for (let j = 0; j < this._columnHeaderCellIds.length; j++) {\n // const _cellIds = this._columnHeaderCellIds[j];\n // _cellIds.splice(i, 1);\n // }\n // }\n // }\n // }\n // }\n // 创建原数组的副本\n this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL.slice();\n if (!this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n } else {\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n }\n }\n // else if (!this.indicatorsAsCol) {\n // this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL;\n // const _rowIds = this._rowHeaderCellIds_FULL;\n // for (let i = _rowIds.length - 1; i >= 0; i--) {\n // const id = _rowIds[i][_rowIds[i].length - 1];\n // const define = this.headerObjects[id]?.define;\n // if ((define as any).indicatorKey && define.hide) {\n // this._rowHeaderCellIds_FULL.splice(i, 1);\n // }\n // }\n // }\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n\n // 创建原数组的副本\n this._cornerHeaderCellIds = this._cornerHeaderCellFullPathIds.slice();\n if (this.rowHeaderLevelCount === 0 || this.columnHeaderLevelCount === 0) {\n this._cornerHeaderCellIds = [];\n } else if (this.cornerSetting.titleOnDimension === 'row' && !this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n } else {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n }\n } else if (this.cornerSetting.titleOnDimension === 'column' && !this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._cornerHeaderCellIds.splice(indicatorIndex, 1);\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n this._cornerHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n }\n }\n }\n enableUseGetBodyCache() {\n this._useGetBodyCache = true;\n this._getBodyCache.clear();\n }\n disableUseGetBodyCache() {\n this._useGetBodyCache = false;\n this._getBodyCache.clear();\n }\n enableUseHeaderPathCache() {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n disableUseHeaderPathCache() {\n this._useHeaderPathCache = false;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n getBodyWidthCache(col: number, row: number) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return undefined;\n }\n if (this.indicatorsAsCol && this._getBodyCache.has(col)) {\n return this._getBodyCache.get(col);\n } else if (!this.indicatorsAsCol && this._getBodyCache.has(row)) {\n return this._getBodyCache.get(row);\n }\n return undefined;\n }\n setBodyWidthCache(col: number, row: number, cache: IndicatorData | SeriesNumberColumnData) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return;\n }\n if (this.indicatorsAsCol) {\n this._getBodyCache.set(col, cache);\n } else {\n this._getBodyCache.set(row, cache);\n }\n }\n\n getColHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._colHeaderPathCache.has(col)\n ) {\n return this._colHeaderPathCache.get(col);\n }\n return undefined;\n }\n\n setColHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._colHeaderPathCache.set(col, cache);\n }\n }\n\n getRowHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._rowHeaderPathCache.has(row)\n ) {\n return this._rowHeaderPathCache.get(row);\n }\n return undefined;\n }\n\n setRowHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._rowHeaderPathCache.set(row, cache);\n }\n }\n}\n/** 计算 scale 的实际 range 长度 */\nfunction scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n // FIXME: vscale 同样需要加保护,目前这里加了保护以后,在 paddingInner为 1 的情况还是会崩溃\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = Math.ceil(space * step);\n return wholeSize;\n}\n\nfunction bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n","import { isValid } from '@visactor/vutils';\nimport { Env } from '../tools/env';\n\n// if (Env.mode === 'node') {\n// // eslint-disable-next-line no-global-assign\n// window = {\n// performance: {\n// now: () => -1,\n// },\n// } as any;\n// }\n/**\n * 针对聚合好的flat数据转为便于查询的行列树对象,每一个显示的指标值都能从一条数据记录中获得\n */\nexport class FlatDataToObjects {\n /**\n * 用户配置\n */\n dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n };\n /**\n * 明细数据\n */\n records: any[];\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record>> = {};\n beforeChangedTree: Record> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n // //列表头的每列对应的表头键值\n // colKeys: string[][] = [];\n // //行表头的每行对应的表头键值\n // rowKeys: string[][] = [];\n // /**\n // * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n // */\n // rowKeysPath: string[][];\n // /**\n // * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n // */\n // colKeysPath: string[][];\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n constructor(\n dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n },\n records?: any[]\n ) {\n this.dataConfig = dataConfig;\n // this.allTotal = new SumAggregator(this.dataConfig.indicators[0]);\n\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.setRecords(records);\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n }\n\n // delete this.rowFlatKeys;\n // delete this.colFlatKeys;\n }\n changeDataConfig(dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n indicators: string[]; //具体展示指标;\n indicatorsAsCol: boolean;\n indicatorDimensionKey: string | number;\n }) {\n this.dataConfig = dataConfig;\n }\n setRecords(records: any[]) {\n this.processRecords();\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n processRecords() {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n this.processRecord(record);\n }\n }\n\n /**\n * 处理单条数据\n * @param record\n * @returns\n */\n processRecord(record: any) {\n const colKey: any[] = [];\n const rowKey: any[] = [];\n\n for (let l = 0, len1 = this.dataConfig.rows.length; l < len1; l++) {\n const rowAttr = this.dataConfig.rows[l];\n if (\n // record[rowAttr] !== null &&\n record[rowAttr] !== undefined &&\n rowAttr !== this.dataConfig.indicatorDimensionKey\n ) {\n rowKey.push(record[rowAttr]);\n }\n }\n for (let n = 0, len2 = this.dataConfig.columns.length; n < len2; n++) {\n const colAttr = this.dataConfig.columns[n];\n if (\n // record[colAttr] !== null &&\n record[colAttr] !== undefined &&\n colAttr !== this.dataConfig.indicatorDimensionKey\n ) {\n colKey.push(record[colAttr]);\n }\n }\n\n this.dataConfig.indicators?.forEach((indicatorKey: string | number) => {\n const recordValue: string | number = record[indicatorKey];\n // const indicatorName = this.dataConfig.indicators[indicatorKey];\n if (recordValue !== undefined) {\n if (this.dataConfig.indicatorsAsCol) {\n colKey.push(indicatorKey);\n } else {\n rowKey.push(indicatorKey);\n }\n }\n\n // record[indicatorKey] && (recordValue = record[indicatorKey]);\n\n // this.allTotal.push(record);\n\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowFlatKeys[flatRowKey] = 1;\n }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colFlatKeys[flatColKey] = 1;\n }\n }\n\n if (colKey.length !== 0 || rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (recordValue !== undefined) {\n this.tree[flatRowKey][flatColKey] = { value: recordValue, record };\n if (this.dataConfig.indicatorsAsCol) {\n colKey.pop();\n } else {\n rowKey.pop();\n }\n }\n }\n });\n }\n\n getTreeNode(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n ifChangedValue: boolean = true\n ): Record {\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n rowKey.map((key, i) => {\n if (key === indicator) {\n rowKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && rowKey.push(indicator);\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n colKey.map((key, i) => {\n if (key === indicator) {\n colKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && colKey.push(indicator);\n flatColKey = colKey.join(this.stringJoinChar);\n }\n\n if (ifChangedValue) {\n return this.tree?.[flatRowKey]?.[flatColKey] ?? undefined;\n }\n if (isValid(this.beforeChangedTree[flatRowKey]?.[flatColKey])) {\n return {\n value: this.beforeChangedTree[flatRowKey][flatColKey].value,\n record: this.beforeChangedTree[flatRowKey][flatColKey].record\n };\n }\n return undefined;\n }\n\n changeTreeNodeValue(rowKey: string[] = [], colKey: string[] = [], indicator: string, newValue: any) {\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n rowKey.map((key, i) => {\n if (key === indicator) {\n rowKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && rowKey.push(indicator);\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n let isHasIndicator = false;\n colKey.map((key, i) => {\n if (key === indicator) {\n colKey.splice(i, 1);\n isHasIndicator = true;\n }\n });\n isHasIndicator && colKey.push(indicator);\n flatColKey = colKey.join(this.stringJoinChar);\n }\n const oldValue = this.tree[flatRowKey]?.[flatColKey]?.value;\n const oldRecord = Object.assign({}, this.tree[flatRowKey]?.[flatColKey]?.record);\n if (this.tree[flatRowKey]?.[flatColKey]?.record) {\n this.tree[flatRowKey][flatColKey].record[indicator] = newValue;\n this.tree[flatRowKey][flatColKey].value = newValue;\n } else {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n // 没有对应数据需要添加进去\n this.tree[flatRowKey][flatColKey] = {\n record: this._buildRecord(rowKey, colKey, indicator, newValue),\n value: newValue\n };\n }\n if (!this.beforeChangedTree[flatRowKey]?.[flatColKey]) {\n this.beforeChangedTree[flatRowKey] = {};\n this.beforeChangedTree[flatRowKey][flatColKey] = { record: undefined, value: undefined };\n this.beforeChangedTree[flatRowKey][flatColKey].record = oldRecord;\n this.beforeChangedTree[flatRowKey][flatColKey].value = oldValue;\n }\n }\n\n _buildRecord(rowKey: string[] = [], colKey: string[] = [], indicator: string, value: any) {\n const record = {};\n const rowDimensions = this.dataConfig.rows;\n const colDimensions = this.dataConfig.columns;\n rowDimensions.forEach((dimension, index) => {\n if (dimension !== this.dataConfig.indicatorDimensionKey) {\n record[dimension] = rowKey[index];\n }\n });\n colDimensions.forEach((dimension, index) => {\n if (dimension !== this.dataConfig.indicatorDimensionKey) {\n record[dimension] = colKey[index];\n }\n });\n record[indicator] = value;\n this.records.push(record);\n return record;\n }\n addRecords(records: any[]) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n this.processRecord(record);\n }\n this.records.push(records);\n }\n changeRecordFieldValue(fieldName: string, oldValue: string | number, value: string | number) {\n let isIndicatorName = false;\n\n for (let i = 0; i < this.dataConfig.indicators.length; i++) {\n if (this.dataConfig.indicators[i] === fieldName) {\n isIndicatorName = true;\n }\n }\n if (!isIndicatorName) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n this.tree = {};\n this.processRecords();\n }\n }\n}\n","export function join(strArr: string[], joinChar: string) {\n // return strArr.join(joinChar);\n let str = '';\n for (let i = 0; i < strArr.length; i++) {\n str += strArr[i];\n if (i !== strArr.length - 1) {\n str += joinChar;\n }\n }\n\n return str;\n}\n","import { isArray, isValid } from '@visactor/vutils';\nimport type {\n FilterRules,\n IPivotTableDataConfig,\n SortRule,\n AggregationRules,\n AggregationRule,\n SortRules,\n DerivedFieldRule,\n DerivedFieldRules,\n SortByIndicatorRule,\n SortByRule,\n SortTypeRule,\n SortFuncRule,\n Totals,\n MappingRules,\n SortOrder,\n IHeaderTreeDefine,\n CollectValueBy,\n CollectedValue,\n IIndicator,\n IPivotChartDataConfig,\n CalculateddFieldRules,\n SortType\n} from '../ts-types';\nimport { AggregationType } from '../ts-types';\nimport type { Aggregator, IAggregator } from './statistics-helper';\nimport {\n AvgAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n NoneAggregator,\n RecalculateAggregator,\n RecordAggregator,\n SumAggregator,\n naturalSort,\n sortBy,\n typeSort\n} from './statistics-helper';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { join } from '../tools/join';\n/**\n * 数据处理模块\n */\nexport class Dataset {\n /**\n * 用户配置\n */\n dataConfig?: IPivotTableDataConfig | IPivotChartDataConfig;\n // /**\n // * 分页配置\n // */\n // pagination: IPagination;\n /**\n * 明细数据\n */\n records?: any[] | Record;\n filteredRecords?: any[] | Record;\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record> = {};\n changedTree: Record> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n //列表头的每列对应的表头键值\n colKeys: string[][] = [];\n //行表头的每行对应的表头键值\n rowKeys: string[][] = [];\n\n // 存储下未排序即初始normal下rowKeys和colKeys\n colKeys_normal: string[][] = [];\n rowKeys_normal: string[][] = [];\n // /**\n // * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n // */\n // rowKeysPath: string[][];\n // /**\n // * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n // */\n // colKeysPath: string[][];\n // allTotal: SumAggregator;\n rowOrder = 'key_a_to_z';\n colOrder = 'key_a_to_z';\n //是否已排序\n sorted = false;\n //排序规则\n sortRules?: SortRules;\n //过滤规则\n filterRules?: FilterRules;\n //聚合规则\n aggregationRules?: AggregationRules;\n //派生字段规则\n derivedFieldRules?: DerivedFieldRules;\n mappingRules?: MappingRules;\n calculatedFieldRules?: CalculateddFieldRules;\n /** 计算字段 */\n calculatedFiledKeys?: string[];\n calculatedFieldDependIndicatorKeys?: string[];\n //汇总配置\n totals?: Totals;\n //全局统计各指标的极值\n indicatorStatistics: { max: Aggregator; min: Aggregator; total: Aggregator }[] = [];\n\n aggregators: {\n [key: string]: {\n new (args: {\n key: string;\n dimension: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n } = {};\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n private needSplitPositiveAndNegative?: boolean;\n collectValuesBy?: Record; //收集维度值,field收集维度,by按什么进行分组收集\n collectedValues: Record> = {};\n cacheCollectedValues: Record> = {};\n rows: string[];\n rowsHasValue: boolean[]; //rows中的key是否有在records中体现\n columns: string[];\n columnsHasValue: boolean[]; //columns中的key是否有在records中体现\n indicatorKeys: string[];\n indicatorKeysIncludeCalculatedFieldDependIndicatorKeys: string[];\n customRowTree?: IHeaderTreeDefine[];\n customColTree?: IHeaderTreeDefine[];\n // 存储自定义表头树 对应每一行的 key path\n customRowTreeDimensionPaths: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n childKeys?: (string | number)[];\n }[][];\n // 存储自定义表头树 对应每一行的 key path\n customColTreeDimensionPaths: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[][];\n // // 存储行表头path 这个是全量的 对比于分页截取的rowKeysPath;\n // private rowKeysPath_FULL: string[][];\n colHeaderTree: any[];\n rowHeaderTree: any[];\n rowHierarchyType: 'grid' | 'tree';\n indicators?: (string | IIndicator)[];\n indicatorsAsCol: boolean;\n // 记录用户传入的汇总数据\n totalRecordsTree: Record> = {};\n hasExtensionRowTree?: boolean;\n parseCustomTreeToMatchRecords?: boolean;\n constructor(\n dataConfig: IPivotTableDataConfig | IPivotChartDataConfig | undefined,\n // pagination: IPagination,\n rows: string[],\n columns: string[],\n indicatorKeys: string[],\n indicators: (string | IIndicator)[] | undefined,\n indicatorsAsCol: boolean,\n records: any[] | Record | undefined,\n rowHierarchyType?: 'grid' | 'tree',\n customColTree?: IHeaderTreeDefine[],\n customRowTree?: IHeaderTreeDefine[],\n needSplitPositiveAndNegative?: boolean,\n hasExtensionRowTree?: boolean,\n parseCustomTreeToMatchRecords?: boolean\n ) {\n this.registerAggregators();\n this.dataConfig = dataConfig;\n this.filterRules = this.dataConfig?.filterRules;\n this.rowHierarchyType = rowHierarchyType ?? 'grid';\n // this.allTotal = new SumAggregator(this.indicators[0]);\n this.sortRules = this.dataConfig?.sortRules;\n this.aggregationRules = this.dataConfig?.aggregationRules;\n this.derivedFieldRules = this.dataConfig?.derivedFieldRules;\n this.mappingRules = this.dataConfig?.mappingRules;\n this.calculatedFieldRules = this.dataConfig?.calculatedFieldRules;\n this.calculatedFiledKeys = this.calculatedFieldRules?.map(rule => rule.key) ?? [];\n this.calculatedFieldDependIndicatorKeys =\n this.calculatedFieldRules?.reduce((arr: string[], rule) => {\n for (let i = 0; i < rule.dependIndicatorKeys.length; i++) {\n if (arr.indexOf(rule.dependIndicatorKeys[i]) === -1) {\n arr.push(rule.dependIndicatorKeys[i]);\n }\n }\n return arr;\n }, []) ?? [];\n this.totals = this.dataConfig?.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicatorKeys = indicatorKeys;\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys = [...indicatorKeys];\n\n for (let m = 0; m < this.calculatedFieldDependIndicatorKeys.length; m++) {\n if (\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys.indexOf(\n this.calculatedFieldDependIndicatorKeys[m]\n ) === -1\n ) {\n this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys.push(this.calculatedFieldDependIndicatorKeys[m]);\n }\n }\n this.indicatorsAsCol = indicatorsAsCol;\n this.indicators = indicators;\n this.customColTree = customColTree;\n this.customRowTree = customRowTree;\n this.hasExtensionRowTree = hasExtensionRowTree;\n this.parseCustomTreeToMatchRecords = parseCustomTreeToMatchRecords;\n if (this.parseCustomTreeToMatchRecords) {\n this.customColTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customColTree, 'col');\n if (!this.hasExtensionRowTree) {\n this.customRowTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customRowTree, 'row');\n }\n }\n this.colGrandTotalLabel = this.totals?.column?.grandTotalLabel ?? '总计';\n this.colSubTotalLabel = this.totals?.column?.subTotalLabel ?? '小计';\n this.rowGrandTotalLabel = this.totals?.row?.grandTotalLabel ?? '总计';\n this.rowSubTotalLabel = this.totals?.row?.subTotalLabel ?? '小计';\n this.collectValuesBy = (this.dataConfig as IPivotChartDataConfig)?.collectValuesBy;\n this.needSplitPositiveAndNegative = needSplitPositiveAndNegative ?? false;\n this.rowsIsTotal = new Array(this.rows?.length ?? 0).fill(false);\n this.colsIsTotal = new Array(this.columns?.length ?? 0).fill(false);\n\n if (this.totals?.row && this.totals.row.showSubTotals !== false && this.totals.row.subTotalsDimensions) {\n for (let i = 0, len = this.totals?.row?.subTotalsDimensions?.length ?? 0; i < len; i++) {\n const dimension = this.totals.row.subTotalsDimensions[i];\n const dimensionIndex = this.rows.indexOf(dimension);\n this.rowsIsTotal[dimensionIndex] = true;\n }\n }\n if (this.totals?.column && this.totals.column.showSubTotals !== false && this.totals.column.subTotalsDimensions) {\n for (let i = 0, len = this.totals?.column?.subTotalsDimensions?.length ?? 0; i < len; i++) {\n const dimension = this.totals.column.subTotalsDimensions[i];\n const dimensionIndex = this.columns.indexOf(dimension);\n this.colsIsTotal[dimensionIndex] = true;\n }\n }\n // this.rowKeysPath = [];\n // this.rowKeysPath_FULL = [];\n // this.colKeysPath = [];\n this.setRecords(records);\n // this.updatePagination(pagination);\n }\n\n setRecords(records: any[] | Record) {\n this.records = records;\n this.collectedValues = {};\n this.cacheCollectedValues = {};\n this.totalRecordsTree = {};\n this.tree = {};\n this.colFlatKeys = {};\n this.rowFlatKeys = {};\n this.colKeys = [];\n this.rowKeys = [];\n this.rowsHasValue = [];\n this.columnsHasValue = [];\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // if (records?.[0]?.constructor !== Array) {\n // 不能加这个判断来提升性能了,\n // PivotChart 会有这种设置情况\n // records: {\n // \"0\": [\n // {\n // \"10001\": \"数量\",\n // \"10002\": \"37534\",\n // \"10003\": \"sum_1700027602758\",\n // \"30001\": \"数量\",\n // \"1700046734980\": \"\",\n // sum_1700027602758: \"37534\",\n // },\n // ],\n // },\n this.processRecords();\n // }\n\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的sumby 处理收集维度值范围\n this.processCollectedValuesWithSumBy();\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理sortby\n this.generateCollectedValuesSortRule();\n this.processCollectedValuesWithSortBy();\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n\n // 处理汇总\n const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.totalStatistics();\n const t5 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('totalStatistics:', t5 - t4);\n\n this.rowKeys_normal = this.rowKeys.slice();\n this.colKeys_normal = this.colKeys.slice();\n //对维度排序\n const t2 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.sortKeys();\n const t3 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('sortKeys:', t3 - t2);\n //转为树形\n // const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // this.madeTree(this.rowKeys);\n // const t41 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // console.log('madeTree:', t41 - t4);\n\n const t7 = typeof window !== 'undefined' ? window.performance.now() : 0;\n if (this.customRowTree) {\n // if (!this.indicatorsAsCol) {\n // this.customRowTree = this._adjustCustomTree(this.customRowTree);\n // }\n\n this.rowHeaderTree = this.customRowTree;\n } else {\n if (this.rowHierarchyType === 'tree') {\n this.rowHeaderTree = this.ArrToTree1(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.totals?.row?.showGrandTotals ||\n (!this.indicatorsAsCol && this.columns.length === 0) ||\n (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel\n );\n } else {\n this.rowHeaderTree = this.ArrToTree(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.rowsIsTotal,\n this.totals?.row?.showGrandTotals || (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel,\n this.totals?.row?.showGrandTotalsOnTop ?? false,\n this.totals?.row?.showSubTotalsOnTop ?? false\n );\n }\n }\n if (this.customColTree) {\n // if (this.indicatorsAsCol) {\n // this.customColTree = this._adjustCustomTree(this.customColTree);\n // }\n this.colHeaderTree = this.customColTree;\n } else {\n this.colHeaderTree = this.ArrToTree(\n this.colKeys,\n this.columns.filter((key, index) => {\n return this.columnsHasValue[index];\n }),\n this.indicatorsAsCol ? this.indicators : undefined,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || (!this.indicatorsAsCol && this.columns.length === 0), // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel,\n this.totals?.column?.showGrandTotalsOnLeft ?? false,\n this.totals?.column?.showSubTotalsOnLeft ?? false\n );\n }\n const t8 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('TreeToArr:', t8 - t7);\n\n if ((this.dataConfig as IPivotChartDataConfig)?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n // this.dealWithZeroAlign();\n\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n }\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.aggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.RECALCULATE, RecalculateAggregator);\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的 处理收集维度值范围 */\n private processCollectedValuesWithSumBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy?.[field]?.sumBy) {\n for (const byKeys in this.collectedValues[field]) {\n let max;\n\n //考虑有markLine设置sum的情况\n if (this.collectValuesBy[field]?.extendRange === 'sum') {\n max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return acc + cur.value();\n }, 0);\n max += Math.round(max / 20);\n } else {\n // 寻找最大值作为轴范围的max\n max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() > acc ? cur.value() : acc;\n }, Number.MIN_SAFE_INTEGER);\n //考虑有markLine设置max的情况\n if (this.collectValuesBy[field]?.extendRange === 'max') {\n max += Math.round(max / 20);\n } else if (typeof this.collectValuesBy[field]?.extendRange === 'number') {\n max = Math.max(max, this.collectValuesBy[field]?.extendRange as number);\n }\n }\n const min = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() < acc ? cur.value() : acc;\n }, Number.MAX_SAFE_INTEGER);\n let positiveMax;\n let negativeMin;\n if (this.needSplitPositiveAndNegative) {\n positiveMax = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.positiveValue() > acc ? cur.positiveValue() : acc;\n }, Number.MIN_SAFE_INTEGER);\n negativeMin = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.negativeValue() < acc ? cur.negativeValue() : acc;\n }, Number.MAX_SAFE_INTEGER);\n }\n\n this.collectedValues[field][byKeys] = {};\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).max = max;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).min = min;\n if (this.needSplitPositiveAndNegative) {\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).positiveMax = positiveMax;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n positiveMax?: number;\n negativeMin?: number;\n }\n ).negativeMin = negativeMin;\n }\n }\n }\n }\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理 */\n private processCollectedValuesWithSortBy() {\n const that = this;\n for (const field in this.collectedValues) {\n if (this.collectValuesBy?.[field]?.sortBy) {\n for (const byKeys in this.collectedValues[field]) {\n this.collectedValues[field][byKeys] = (this.collectedValues[field][byKeys] as Array).sort(\n (a, b) =>\n (that.collectValuesBy![field].sortBy?.indexOf(a) ?? -1) -\n (that.collectValuesBy![field].sortBy?.indexOf(b) ?? -1)\n );\n }\n }\n }\n }\n /**\n * 为了轴顺序的一致 这里将收集到的轴范围进行排序 并写入sortBy。这样不同单元格的轴顺序保持一致 同时过滤数据updateFilterRules后也不影响排序\n */\n private generateCollectedValuesSortRule() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy && this.collectValuesBy[field] && !this.collectValuesBy[field].sortBy) {\n let sortByRule: string[] = [];\n for (const byKeys in this.collectedValues[field]) {\n if (Array.isArray(this.collectedValues[field][byKeys])) {\n // 将数组中的元素合并到数组sortByRule中\n sortByRule.push(...(this.collectedValues[field][byKeys] as Array));\n // 使用Set和Array.from()方法去除重复值\n sortByRule = Array.from(new Set(sortByRule));\n }\n }\n if (sortByRule.length > 0) {\n this.collectValuesBy[field].sortBy = sortByRule;\n }\n }\n }\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n private processRecords() {\n let isNeedFilter = false;\n if ((this.filterRules?.length ?? 0) >= 1) {\n isNeedFilter = true;\n }\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n if (!this.filteredRecords) {\n this.filteredRecords = [];\n }\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (!isNeedFilter || this.filterRecord(record)) {\n (this.filteredRecords as any[]).push(record);\n this.processRecord(record);\n }\n }\n } else {\n if (!this.filteredRecords) {\n this.filteredRecords = {};\n }\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (!isNeedFilter || this.filterRecord(record)) {\n if (!(this.filteredRecords as Record)[key]) {\n (this.filteredRecords as Record)[key] = [];\n }\n (this.filteredRecords as Record)[key].push(record);\n this.processRecord(record, key);\n }\n }\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n }\n private filterRecord(record: any) {\n let isReserved = true;\n if (this.filterRules) {\n for (let i = 0; i < this.filterRules.length; i++) {\n const filterRule = this.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues?.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n }\n return isReserved;\n }\n /**\n * 处理单条数据\n * @param record\n * @param assignedIndicatorKey 指定要计算的指标key 外部用户 用指标做records的key 分别存储不同指标对应的数据时 会传入这个参数\n * @returns\n */\n private processRecord(record: any, assignedIndicatorKey?: string) {\n //这个派生字段的计算位置有待确定,是否应该放到filter之前\n this.derivedFieldRules?.forEach((derivedFieldRule: DerivedFieldRule, i: number) => {\n if (derivedFieldRule.fieldName && derivedFieldRule.derivedFunc) {\n record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);\n }\n });\n //#region 按照collectValuesBy 收集维度值\n for (const field in this.collectValuesBy) {\n if (isValid(record[field])) {\n if (!this.collectedValues[field]) {\n this.collectedValues[field] = {};\n }\n const collectKeys = this.collectValuesBy[field].by.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys]) {\n if (this.collectValuesBy[field].sumBy) {\n this.collectedValues[field][collectKeys] = {};\n } else if (this.collectValuesBy[field].range) {\n this.collectedValues[field][collectKeys] = {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n };\n } else {\n this.collectedValues[field][collectKeys] = [];\n }\n }\n\n if (this.collectValuesBy[field].sumBy) {\n const sumByKeys = this.collectValuesBy[field]\n .sumBy!.map(byField => record[byField])\n .join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys][sumByKeys]) {\n this.collectedValues[field][collectKeys][sumByKeys] = new this.aggregators[AggregationType.SUM]({\n key: field,\n dimension: field,\n isRecord: undefined,\n needSplitPositiveAndNegative: this.needSplitPositiveAndNegative\n });\n }\n this.collectedValues[field][collectKeys][sumByKeys].push(record);\n } else if (this.collectValuesBy[field].range) {\n const fieldRange = this.collectedValues[field][collectKeys] as {\n max: number;\n min: number;\n };\n const max = Math.max(record[field], fieldRange.max);\n const min = Math.min(record[field], fieldRange.min);\n if (!isNaN(max)) {\n fieldRange.max = max;\n fieldRange.min = min;\n }\n } else {\n const fieldRange = this.collectedValues[field][collectKeys] as Array;\n if (fieldRange.indexOf(record[field]) === -1) {\n fieldRange.push(record[field]);\n }\n }\n }\n }\n //#endregion\n\n let isToTalRecord = false;\n //#region 收集rowKey colKey\n // 原先的逻辑不关心customRowTree 只是根据rows 从record上收集维度path。现在考虑了rowTree和colTree的传入,需要依据colTree的真实定义的path来给数据做对应关系。\n // 一条数据可能对应多个path(多列),所以这里收集rowKeys colKeys 是个path的数组,同时兼容path中有indicatorKey和没有indicatorKey的情况\n const colKeys: { colKey: string[]; indicatorKey: string | number }[] = [];\n const rowKeys: { rowKey: string[]; indicatorKey: string | number }[] = [];\n\n if (\n this.parseCustomTreeToMatchRecords &&\n !(this.dataConfig as IPivotChartDataConfig)?.isPivotChart &&\n this.customRowTree?.length &&\n !assignedIndicatorKey && // 目前应该透视图才有可能传入assignedIndicatorKey 所以前面判断了isPivotChart 这个应该也没用了\n !this.hasExtensionRowTree // 有扩展树的情况不走新处理逻辑 走旧的即可\n ) {\n const rowTreePath = this.getFieldMatchRowDimensionPaths(record);\n if (rowTreePath.length > 0) {\n for (let i = 0, len = rowTreePath.length; i < len; i++) {\n const rowPath = rowTreePath[i];\n const rowKey: string[] = [];\n let indicatorKey;\n for (let j = 0, len1 = rowPath.length; j < len1; j++) {\n if (isValid(rowPath[j].indicatorKey)) {\n indicatorKey = rowPath[j].indicatorKey;\n } else {\n rowKey.push(rowPath[j].value);\n }\n }\n rowKeys.push({ rowKey, indicatorKey });\n }\n }\n } else {\n const rowKey: string[] = [];\n rowKeys.push({ rowKey, indicatorKey: assignedIndicatorKey });\n for (let l = 0, len1 = this.rows.length; l < len1; l++) {\n const rowAttr = this.rows[l];\n if (rowAttr in record) {\n this.rowsHasValue[l] = true;\n rowKey.push(record[rowAttr]);\n } else if (rowAttr !== IndicatorDimensionKeyPlaceholder) {\n //如果数据中缺失某个维度的值 可以认为是用户传入的汇总数据\n if (\n this.dataConfig?.totals?.row?.showGrandTotals &&\n l === 0 &&\n !this.rows.find((rk: string) => {\n // 判断没有其他字段在record中 例如rows中维度有省份和城市,当前在判断省份 数据中确实省份自动 可以认为是行总计的前提是城市也不应该存在\n return rk in record;\n })\n ) {\n rowKey.push(this.rowGrandTotalLabel);\n isToTalRecord = true;\n break;\n } else if (\n // this.dataConfig?.totals?.row?.showSubTotals &&\n this.dataConfig?.totals?.row?.subTotalsDimensions &&\n this.dataConfig?.totals?.row?.subTotalsDimensions.indexOf(this.rows[l - 1]) >= 0\n ) {\n if (this.rowHierarchyType === 'grid') {\n //如果是tree的话 不附加标签'小计'\n rowKey.push(this.rowSubTotalLabel);\n }\n isToTalRecord = true;\n break;\n }\n }\n }\n }\n\n if (\n this.parseCustomTreeToMatchRecords &&\n !(this.dataConfig as IPivotChartDataConfig)?.isPivotChart &&\n this.customColTree?.length &&\n !assignedIndicatorKey &&\n !this.hasExtensionRowTree\n ) {\n const colTreePath = this.getFieldMatchColDimensionPaths(record);\n if (colTreePath.length > 0) {\n for (let i = 0, len = colTreePath.length; i < len; i++) {\n const colPath = colTreePath[i];\n const colKey: string[] = [];\n let indicatorKey;\n for (let j = 0, len1 = colPath.length; j < len1; j++) {\n if (isValid(colPath[j].indicatorKey)) {\n indicatorKey = colPath[j].indicatorKey;\n } else {\n colKey.push(colPath[j].value);\n }\n }\n colKeys.push({ colKey: colKey, indicatorKey });\n }\n }\n } else {\n const colKey: string[] = [];\n colKeys.push({ colKey, indicatorKey: assignedIndicatorKey });\n for (let n = 0, len2 = this.columns.length; n < len2; n++) {\n const colAttr = this.columns[n];\n if (colAttr in record) {\n this.columnsHasValue[n] = true;\n colKey.push(record[colAttr]);\n } else if (colAttr !== IndicatorDimensionKeyPlaceholder) {\n //如果数据中缺失某个维度的值 可以认为是用户传入的汇总数据\n if (\n this.dataConfig?.totals?.column?.showGrandTotals &&\n n === 0 &&\n !this.columns.find((ck: string) => {\n // 判断没有其他字段在record中\n return ck in record;\n })\n ) {\n colKey.push(this.colGrandTotalLabel);\n isToTalRecord = true;\n break;\n } else if (\n // this.dataConfig?.totals?.column?.showSubTotals &&\n this.dataConfig?.totals?.column?.subTotalsDimensions &&\n this.dataConfig?.totals?.column?.subTotalsDimensions.indexOf(this.columns[n - 1]) >= 0\n ) {\n colKey.push(this.colSubTotalLabel);\n isToTalRecord = true;\n break;\n }\n }\n }\n }\n //#endregion\n //#region 对path的数组 rowKeys和colKeys 做双重循环\n for (let row_i = 0; row_i < rowKeys.length; row_i++) {\n const rowKey = rowKeys[row_i].rowKey;\n let assignedIndicatorKey_value;\n if (!this.indicatorsAsCol) {\n assignedIndicatorKey_value = rowKeys[row_i].indicatorKey;\n }\n for (let col_j = 0; col_j < colKeys.length; col_j++) {\n const colKey = colKeys[col_j].colKey;\n if (this.indicatorsAsCol) {\n assignedIndicatorKey_value = colKeys[col_j].indicatorKey;\n }\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n //#region 收集用户传入的汇总数据到totalRecordsTree\n //该条数据为汇总数据\n if (isToTalRecord) {\n if (!this.totalRecordsTree[flatRowKey]) {\n this.totalRecordsTree[flatRowKey] = {};\n }\n if (!this.totalRecordsTree[flatRowKey][flatColKey]) {\n this.totalRecordsTree[flatRowKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n if (!this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i]) {\n this.totalRecordsTree[flatRowKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n // single: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.totalRecordsTree[flatRowKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n toComputeIndicatorKeys[i] in record && this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n if (!this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i]) {\n this.totalRecordsTree[flatRowKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n // single: true,\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n\n //push融合了计算过程\n toComputeIndicatorKeys[i] in record && this.totalRecordsTree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n return;\n }\n //#endregion\n\n // 此方法判断效率很低\n // if (this.rowKeys.indexOf(rowKey) === -1) this.rowKeys.push(rowKey);\n // if (this.colKeys.indexOf(colKey) === -1) this.colKeys.push(colKey);\n\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowFlatKeys[flatRowKey] = 1;\n }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colKeys.push(colKey);\n this.colFlatKeys[flatColKey] = 1;\n }\n }\n\n //组织树结构: 行-列-单元格 行key为flatRowKey如’山东青岛‘ 列key为flatColKey如’家具椅子‘\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n //这里改成数组 因为可能是多个指标值 遍历indicators 生成对应类型的聚合对象\n if (!this.tree[flatRowKey]?.[flatColKey]) {\n this.tree[flatRowKey][flatColKey] = [];\n }\n\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(rule => rule.key === toComputeIndicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n let needAddToAggregator = false;\n if (assignedIndicatorKey_value) {\n if (assignedIndicatorKey === assignedIndicatorKey_value) {\n // 参数传入的assignedIndicatorKey 表示records是指标已经分好组的 组里一定要加入指标聚合对象中\n toComputeIndicatorKeys[i] === assignedIndicatorKey_value && (needAddToAggregator = true);\n } else {\n toComputeIndicatorKeys[i] === assignedIndicatorKey_value &&\n toComputeIndicatorKeys[i] in record &&\n (needAddToAggregator = true);\n }\n }\n //加入聚合结果 考虑field为数组的情况\n else if (aggRule?.field) {\n if (typeof aggRule?.field === 'string') {\n aggRule?.field in record && (needAddToAggregator = true);\n } else {\n const isPush = aggRule?.field.find((field: string) => {\n return field in record;\n });\n isPush && (needAddToAggregator = true);\n }\n } else {\n //push融合了计算过程\n toComputeIndicatorKeys[i] in record && (needAddToAggregator = true);\n }\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i] && needAddToAggregator) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n\n if (needAddToAggregator) {\n this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n }\n //统计整体的最大最小值和总计值 共mapping使用\n if (this.mappingRules) {\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.indicatorStatistics[i] = {\n max: new this.aggregators[AggregationType.MAX]({\n key: this.indicatorKeys[i],\n dimension: this.indicatorKeys[i]\n }),\n min: new this.aggregators[AggregationType.MIN]({\n key: this.indicatorKeys[i],\n dimension: this.indicatorKeys[i]\n }),\n total: new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM]({\n key: this.indicatorKeys[i],\n dimension: aggRule?.field ?? this.indicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === this.indicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n })\n };\n }\n //push融合了计算过程\n this.indicatorStatistics[i].max.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].min.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].total.push(record);\n }\n }\n }\n }\n //#endregion\n }\n /**\n * TODO 需要完善TreeToArr这里的逻辑\n * 全量更新排序规则 对数据重新排序 生成行列paths\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules) {\n this.sorted = false;\n this.sortRules = sortRules;\n this.sortKeys();\n //和初始化代码逻辑一致 但未考虑透视图类型\n if (!this.customRowTree) {\n if (this.rowHierarchyType === 'tree') {\n this.rowHeaderTree = this.ArrToTree1(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.totals?.row?.showGrandTotals ||\n (!this.indicatorsAsCol && this.columns.length === 0) ||\n (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel\n );\n } else {\n this.rowHeaderTree = this.ArrToTree(\n this.rowKeys,\n this.rows.filter((key, index) => {\n return this.rowsHasValue[index];\n }),\n this.indicatorsAsCol ? undefined : this.indicators,\n this.rowsIsTotal,\n this.totals?.row?.showGrandTotals || (this.indicatorsAsCol && this.rows.length === 0),\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel,\n this.totals?.row?.showGrandTotalsOnTop ?? false,\n this.totals?.row?.showSubTotalsOnTop ?? false\n );\n }\n }\n\n if (!this.customColTree) {\n this.colHeaderTree = this.ArrToTree(\n this.colKeys,\n this.columns.filter((key, index) => {\n return this.columnsHasValue[index];\n }),\n this.indicatorsAsCol ? this.indicators : undefined,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || (!this.indicatorsAsCol && this.columns.length === 0), // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel,\n this.totals?.column?.showGrandTotalsOnLeft ?? false,\n this.totals?.column?.showSubTotalsOnLeft ?? false\n );\n }\n // this.rowKeysPath_FULL = this.TreeToArr(\n // this.ArrToTree(\n // this.rowKeys,\n // this.rows,\n // this.indicatorsAsCol ? undefined : this.indicators,\n // this.rowsIsTotal,\n // this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n // this.rowGrandTotalLabel,\n // this.rowSubTotalLabel\n // )\n // );\n // this.colKeysPath = this.TreeToArr(\n // this.ArrToTree(\n // this.colKeys,\n // this.columns,\n // this.indicatorsAsCol ? this.indicators : undefined,\n // this.colsIsTotal,\n // this.totals?.column?.showGrandTotals || this.rows.length === 0,\n // this.colGrandTotalLabel,\n // this.colSubTotalLabel\n // )\n // );\n }\n /** 更新过滤规则 修改tree数据及收集的value */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.filterRules = filterRules;\n this.filteredRecords = undefined;\n if (isResetTree) {\n this.tree = {};\n } else {\n for (const treeRowKey in this.tree) {\n for (const treeColKey in this.tree[treeRowKey]) {\n for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {\n this.tree[treeRowKey][treeColKey][i]?.reset();\n }\n }\n }\n }\n this.collectedValues = {};\n this.processRecords();\n this.processCollectedValuesWithSumBy();\n this.processCollectedValuesWithSortBy();\n this.totalStatistics();\n if ((this.dataConfig as IPivotChartDataConfig)?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n // this.dealWithZeroAlign();\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n private getAggregatorRule(indicatorKey: string): AggregationRule | undefined {\n return this.aggregationRules?.find((value: AggregationRule, index: number) => {\n return indicatorKey === value.indicatorKey;\n });\n }\n /**\n * 根据行列的维度key 获取聚合对象\n * @param rowKey\n * @param colKey\n * @param indicator\n * @returns\n */\n getAggregator(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n considerChangedValue: boolean = true,\n indicatorPosition?: { position: 'col' | 'row'; index?: number }\n ): IAggregator {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n // let agg;\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n if (!indicatorPosition || indicatorPosition.position === 'row') {\n rowKey.map((key, i) => {\n if (key === indicator && (!isValid(indicatorPosition?.index) || i === indicatorPosition.index)) {\n rowKey.splice(i, 1);\n }\n });\n }\n // flatRowKey = rowKey.join(this.stringJoinChar);\n flatRowKey = join(rowKey, this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n //考虑 指标key有可能在数组中间位置或者前面的可能 将其删除再添加到尾部\n if (!indicatorPosition || indicatorPosition.position === 'col') {\n colKey.map((key, i) => {\n if (key === indicator && (!isValid(indicatorPosition?.index) || i === indicatorPosition.index)) {\n colKey.splice(i, 1);\n }\n });\n }\n // flatColKey = colKey.join(this.stringJoinChar);\n flatColKey = join(colKey, this.stringJoinChar);\n }\n //TODO 原有逻辑 但这里先强制跳过\n // if ( rowKey.length === 0 && colKey.length === 0) {\n // agg = this.allTotal;\n // } else if (rowKey.length === 0) {\n // // agg = this.tree.total[flatColKey]?.[sortByIndicatorIndex];\n // agg = this.colTotals[flatColKey]?.[sortByIndicatorIndex];\n // } else if (colKey.length === 0) {\n // // agg = this.tree[flatRowKey].total?.[sortByIndicatorIndex];\n // agg = this.rowTotals[flatRowKey]?.[sortByIndicatorIndex];\n // } else {\n const agg = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n if (considerChangedValue && isValid(this.changedTree[flatRowKey]?.[flatColKey]?.[indicatorIndex])) {\n const changeValue = this.changedTree[flatRowKey][flatColKey][indicatorIndex];\n if (agg) {\n return {\n value: () => {\n return changeValue;\n },\n formatValue: agg.formatValue,\n formatFun: agg.formatFun,\n records: agg.records,\n className: '',\n recalculate() {\n // do nothing\n },\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n // agg.clearCacheValue();\n // agg.value = () => { // 你们直接在原来的agg上赋值 会影响获取原始值的获取\n // return changeValue;\n // };\n }\n return {\n value() {\n return changeValue;\n },\n className: '',\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n recalculate() {\n // do nothing\n },\n formatValue() {\n return changeValue;\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n }\n\n // }\n return agg\n ? agg\n : {\n className: '',\n push() {\n // do nothing\n },\n deleteRecord() {\n // do nothing\n },\n updateRecord() {\n // do nothing\n },\n recalculate() {\n // do nothing\n },\n value(): any {\n return null;\n },\n clearCacheValue() {\n // do nothing\n },\n reset() {\n // do nothing\n }\n };\n }\n /**\n * 根据排序规则 对维度keys排序\n */\n sortKeys() {\n this.colKeys = this.colKeys_normal.slice();\n this.rowKeys = this.rowKeys_normal.slice();\n const that = this;\n if (!this.sorted) {\n this.sorted = true;\n // const getValue = function (rowKey: any, colKey: any) {\n // return that.getAggregator(rowKey, colKey, '').value();\n // };\n\n // switch (this.rowOrder) {\n // case 'value_a_to_z':\n // this.rowKeys.sort(function (a, b) {\n // return naturalSort(getValue(a, []), getValue(b, []));\n // });\n // break;\n // case 'value_z_to_a':\n // this.rowKeys.sort(function (a, b) {\n // return -naturalSort(getValue(a, []), getValue(b, []));\n // });\n // break;\n // default:\n this.rowKeys.sort(this.arrSort(this.rows, true));\n // }\n // switch (this.colOrder) {\n // case 'value_a_to_z':\n // this.colKeys.sort(function (a, b) {\n // return naturalSort(getValue([], a), getValue([], b));\n // });\n // break;\n // case 'value_z_to_a':\n // this.colKeys.sort(function (a, b) {\n // return -naturalSort(getValue([], a), getValue([], b));\n // });\n // break;\n // default:\n const sortfun = this.arrSort(this.columns, false);\n this.colKeys.sort(sortfun);\n // }\n }\n }\n /**\n * 生成排序函数 综合配置的多条排序规则\n * @param fieldArr 排序维度名称 如行rows 列columns\n * @returns\n */\n arrSort(fieldArr: string[], isRow: boolean) {\n let field;\n const that = this;\n const sortersArr: any[] = function (_this: any) {\n const results: any = [];\n for (let l = 0, len1 = fieldArr.length; l < len1; l++) {\n field = fieldArr[l];\n let isHasSortRule = false;\n if (that.sortRules) {\n for (let m = 0, len2 = that.sortRules.length; m < len2; m++) {\n if (that.sortRules[m].sortField === field) {\n isHasSortRule = true;\n results.push({\n field,\n fieldIndex: l,\n sortRule: that.sortRules[m],\n func: that.getSort(that.sortRules[m], isRow)\n });\n\n // if (that.sortRules[m].sortByIndicator) {\n // isHasSortRule = true;\n // results.push({\n // field,\n // fieldIndex: l,\n // sortRule: that.sortRules[m],\n // func: that.getSort(that.sortRules[m], field),\n // });\n // }\n }\n }\n }\n // 去掉内部默认排序\n // if (!isHasSortRule) {\n // results.push({ field, fieldIndex: l, func: naturalSort });\n // }\n }\n return results;\n }.call(this);\n return function (a: string[], b: string[]) {\n let comparison;\n let sorter;\n for (let i = 0; i < sortersArr.length; i++) {\n sorter = sortersArr[i];\n // if (!(sorter.sortRule?.sortType === SortType.NORMAL || sorter.sortRule?.sortType === SortType.normal)) {\n if (sorter.sortRule?.sortByIndicator) {\n let aChanged = a;\n let bChanged = b;\n if (sorter.fieldIndex < fieldArr.length - 1) {\n aChanged = a.slice(0, sorter.fieldIndex + 1);\n if (that.rowHierarchyType === 'grid' && isRow) {\n aChanged.push(that.rowSubTotalLabel);\n } else if (!isRow) {\n aChanged.push(that.colSubTotalLabel);\n }\n bChanged = b.slice(0, sorter.fieldIndex + 1);\n if (that.rowHierarchyType === 'grid' && isRow) {\n bChanged.push(that.rowSubTotalLabel);\n } else if (!isRow) {\n bChanged.push(that.colSubTotalLabel);\n }\n }\n comparison = sorter.func(aChanged, bChanged, sorter.sortRule?.sortType);\n } else {\n comparison = sorter.func?.(a[sorter.fieldIndex], b[sorter.fieldIndex], sorter.sortRule?.sortType);\n }\n if (comparison !== 0) {\n return comparison;\n // return (\n // comparison *\n // (sorter.sortRule?.sortType === SortType.DESC || sorter.sortRule?.sortType === SortType.desc ? -1 : 1)\n // );\n }\n }\n return 0;\n };\n }\n /**\n * 根据具体排序 获取不同的排序函数\n * @param sortRule\n * @returns\n */\n getSort(sortRule: SortRule, isSortRow: boolean) {\n const that = this;\n\n if ((sortRule).sortByIndicator) {\n return (a: string[], b: string[], sortType?: SortType) => {\n /**\n * 根据rowKey和colKey获取tree上对应的聚合值\n * @param rowKey\n * @param colKey\n * @returns\n */\n const getValue = function (rowKey: any, colKey: any) {\n //如果rowKey提供的不全 如 [地区,省,城市] 只提供了如[华东,山东] 会补全为[华东,山东,小计]\n if (\n that.rowHierarchyType === 'grid' &&\n rowKey.length < that.rows.length &&\n rowKey[rowKey.length - 1] !== that.rowSubTotalLabel &&\n rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel\n ) {\n rowKey.push(that.rowSubTotalLabel);\n }\n if (\n colKey.length < that.columns.length &&\n colKey[colKey.length - 1] !== that.colSubTotalLabel &&\n colKey[colKey.length - 1] !== that.colGrandTotalLabel\n ) {\n colKey.push(that.colSubTotalLabel);\n }\n return that.getAggregator(rowKey, colKey, (sortRule).sortByIndicator!).value();\n };\n if (isSortRow) {\n return naturalSort(\n getValue(a, (sortRule).query),\n getValue(b, (sortRule).query),\n sortType\n );\n }\n return naturalSort(\n getValue((sortRule).query, a),\n getValue((sortRule).query, b),\n sortType\n );\n };\n } else if ((sortRule).sortBy) {\n return sortBy((sortRule).sortBy);\n }\n\n if ((sortRule).sortFunc) {\n return (sortRule).sortFunc;\n }\n if ((sortRule).sortType) {\n return typeSort;\n }\n return naturalSort;\n }\n /**\n * 汇总小计\n */\n totalStatistics() {\n const that = this;\n /**\n * 计算每一行的所有列的汇总值\n * @param flatRowKey\n * @param flatColKey\n */\n const colCompute = (flatRowKey: string, flatColKey: string) => {\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColKey]) {\n // 利用汇总数据替换\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n this.tree[flatRowKey][flatColKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColKey];\n return;\n }\n const colKey = flatColKey.split(this.stringJoinChar);\n if (\n that.totals?.column?.subTotalsDimensions &&\n that.totals?.column?.subTotalsDimensions?.length > 0 &&\n that.totals.column.showSubTotals !== false\n ) {\n for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.column.subTotalsDimensions[i];\n const dimensionIndex = that.columns.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n // if (this.rowHierarchyType === 'grid') {\n colTotalKey.push(that.colSubTotalLabel);\n // }\n const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey]) {\n // 利用汇总数据替换\n this.tree[flatRowKey][flatColTotalKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey];\n return;\n }\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n if (!this.tree[flatRowKey]?.[flatColTotalKey]?.[i]) {\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColTotalKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n } else {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n }\n }\n if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n const flatColTotalKey = that.colGrandTotalLabel;\n if (this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey]) {\n // 利用汇总数据替换\n this.tree[flatRowKey][flatColTotalKey] = this.totalRecordsTree?.[flatRowKey]?.[flatColTotalKey];\n return;\n }\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(rule => rule.key === toComputeIndicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColTotalKey]?.[i]) {\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowKey][flatColTotalKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n } else {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n if (flatColTotalKey !== flatColKey) {\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n };\n\n if (\n (that?.totals?.column?.subTotalsDimensions && that?.totals?.column?.subTotalsDimensions?.length >= 1) ||\n (that?.totals?.row?.subTotalsDimensions && that?.totals?.row?.subTotalsDimensions?.length >= 1) ||\n that?.totals?.column?.showGrandTotals ||\n that?.totals?.row?.showGrandTotals\n // ||\n // that.rows.length === 0 || //todo 这里原有逻辑暂时注释掉\n // that.columns.length === 0\n ) {\n const rowTotalKeys: string[] = [];\n\n Object.keys(that.tree).forEach(flatRowKey => {\n const rowKey = flatRowKey.split(this.stringJoinChar);\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n if (\n that.totals?.row?.subTotalsDimensions &&\n that.totals?.row?.subTotalsDimensions?.length > 0 &&\n that.totals.row.showSubTotals !== false\n ) {\n for (let i = 0, len = that.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.row.subTotalsDimensions[i];\n const dimensionIndex = that.rows.indexOf(dimension);\n if (dimensionIndex >= 0 && dimensionIndex < that.rows.length - 1) {\n const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);\n if (this.rowHierarchyType === 'grid') {\n // 如果是tree的情况则不追加小计单元格值\n rowTotalKey.push(that.rowSubTotalLabel);\n }\n const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowTotalKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n }\n if (flatRowTotalKey !== flatRowKey) {\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n }\n\n if (that.totals?.row?.showGrandTotals || this.columns.length === 0) {\n const flatRowTotalKey = that.rowGrandTotalLabel;\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n const toComputeIndicatorKeys = this.indicatorKeysIncludeCalculatedFieldDependIndicatorKeys;\n for (let i = 0; i < toComputeIndicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n if (this.calculatedFiledKeys.indexOf(toComputeIndicatorKeys[i]) >= 0) {\n const calculatedFieldRule = this.calculatedFieldRules?.find(\n rule => rule.key === toComputeIndicatorKeys[i]\n );\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[AggregationType.RECALCULATE]({\n key: toComputeIndicatorKeys[i],\n dimension: toComputeIndicatorKeys[i],\n isRecord: true,\n formatFun: (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format,\n calculateFun: calculatedFieldRule?.calculateFun,\n dependAggregators: this.tree[flatRowTotalKey][flatColKey],\n dependIndicatorKeys: calculatedFieldRule?.dependIndicatorKeys\n });\n } else {\n const aggRule = this.getAggregatorRule(toComputeIndicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ]({\n key: toComputeIndicatorKeys[i],\n dimension: aggRule?.field ?? toComputeIndicatorKeys[i],\n formatFun:\n aggRule?.formatFun ??\n (\n this.indicators?.find((indicator: string | IIndicator) => {\n if (typeof indicator !== 'string') {\n return indicator.indicatorKey === toComputeIndicatorKeys[i];\n }\n return false;\n }) as IIndicator\n )?.format\n });\n }\n }\n if (flatRowTotalKey !== flatRowKey) {\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n colCompute(flatRowKey, flatColKey);\n });\n });\n //增加出来的rowTotalKeys 再遍历一次 汇总小计的小计 如 东北小计(row)-办公用品小计(col)所指单元格的值\n rowTotalKeys.forEach(flatRowKey => {\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n colCompute(flatRowKey, flatColKey);\n\n // //处理 row-sub-total 中没有col-sub-total的情况\n // if (\n // that.totals?.column?.subTotalsDimensions &&\n // that.totals?.column?.subTotalsDimensions?.length > 0 &&\n // that.totals.column.showSubTotals !== false\n // ) {\n // const colKey = flatColKey.split(this.stringJoinChar);\n // for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n // const dimension = that.totals.column.subTotalsDimensions[i];\n // const dimensionIndex = that.columns.indexOf(dimension);\n // if (dimensionIndex >= 0) {\n // const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n // colTotalKey.push(that.colSubTotalLabel);\n // const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n // if (!this.tree[flatRowKey][flatColTotalKey]) {\n // colCompute(flatRowKey, flatColTotalKey);\n // }\n // }\n // }\n // }\n });\n // //处理 row-total 中没有col-total的情况\n // if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n // const flatColTotalKey = that.colGrandTotalLabel;\n // if (!this.tree[flatRowKey][flatColTotalKey]) {\n // colCompute(flatRowKey, flatColTotalKey);\n // }\n // }\n });\n }\n // else if (that.rowHierarchyType === 'tree') {\n // for (const flatRowKey in that.totalRecordsTree) {\n // for (const flatColKey in that.totalRecordsTree[flatRowKey]) {\n // colCompute(flatRowKey, flatColKey);\n // }\n // }\n // }\n for (const flatRowKey in that.totalRecordsTree) {\n for (const flatColKey in that.totalRecordsTree[flatRowKey]) {\n colCompute(flatRowKey, flatColKey);\n }\n }\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @returns\n */\n private ArrToTree1(\n arr: string[][],\n rows: string[],\n indicators: (string | IIndicator)[] | undefined,\n isGrandTotal: boolean,\n grandTotalLabel: string\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n const result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { value: string; dimensionKey: string; children: any[] | undefined } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n value,\n // id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n dimensionKey: rows[index],\n //树的叶子节点补充指标\n children:\n index === list.length - 1 && (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n node.children.push(item);\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n\n arr.forEach(item => addList(item));\n if (isGrandTotal) {\n addList([grandTotalLabel]);\n }\n return result;\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @param subTotalFlags 标志小计的维度\n * @returns\n */\n private ArrToTree(\n arr: string[][],\n rows: string[],\n indicators: (string | IIndicator)[] | undefined,\n subTotalFlags: boolean[],\n isGrandTotal: boolean,\n grandTotalLabel: string,\n subTotalLabel: string,\n showGrandTotalsOnTop: boolean,\n showSubTotalsOnTop: boolean\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n let result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { value: string; dimensionKey: string; children: any[] | undefined } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n value,\n dimensionKey: rows[index],\n // id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n //树的叶子节点补充指标\n children:\n index === list.length - 1 && (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n if (subTotalFlags[index]) {\n let curChild = item.children ?? [];\n // for (let i = index; i < list.length - 1; i++) {\n const totalChild: { value: string; dimensionKey: string; children: any[] | undefined; levelSpan: number } =\n {\n value: subTotalLabel,\n dimensionKey: rows[index + 1],\n levelSpan: subTotalFlags.length - index - 1,\n // id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n //树的叶子节点补充指标\n children:\n // i + 1 === list.length - 1 &&\n (indicators?.length ?? 0) >= 1\n ? indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n })\n : []\n };\n\n curChild.push(totalChild);\n\n curChild = totalChild.children ?? [];\n\n // }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1] && !showSubTotalsOnTop) {\n node.children.splice(node.children.length - 1, 0, item);\n } else {\n node.children.push(item);\n }\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n if (arr?.length) {\n arr.forEach(item => addList(item));\n } else if (indicators) {\n result = indicators?.map((indicator: IIndicator | string): { indicatorKey: string; value: string } => {\n if (typeof indicator === 'string') {\n return { indicatorKey: indicator, value: indicator };\n }\n return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };\n });\n }\n //最后将总计的节点加上\n if (isGrandTotal && arr?.length) {\n const node: { value: string; dimensionKey: string; children: any[]; levelSpan: number } = {\n value: grandTotalLabel, // getId(item?.id, 1),\n dimensionKey: rows[0],\n levelSpan: subTotalFlags.length,\n children:\n indicators?.map(indicator => {\n if (typeof indicator === 'string') {\n return {\n indicatorKey: indicator,\n value: indicator\n };\n }\n return {\n indicatorKey: indicator.indicatorKey,\n value: indicator.title\n };\n }) ?? []\n };\n if (showGrandTotalsOnTop) {\n result.unshift(node);\n } else {\n result.push(node);\n }\n }\n return result;\n }\n\n private cacheDeminsionCollectedValues() {\n for (const key in this.collectValuesBy) {\n if (this.collectValuesBy[key].type === 'xField' || this.collectValuesBy[key].type === 'yField') {\n if ((this.dataConfig as IPivotChartDataConfig).dimensionSortArray) {\n this.cacheCollectedValues[key] = arraySortByAnotherArray(\n this.collectedValues[key] as unknown as string[],\n (this.dataConfig as IPivotChartDataConfig).dimensionSortArray!\n ) as unknown as Record;\n } else {\n this.cacheCollectedValues[key] = this.collectedValues[key];\n }\n }\n }\n }\n\n changeTreeNodeValue(\n rowKey: string[] | string = [],\n colKey: string[] | string = [],\n indicator: string,\n newValue: string | number\n ) {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n flatColKey = colKey.join(this.stringJoinChar);\n }\n\n if (this.changedTree[flatRowKey]?.[flatColKey]) {\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n } else if (this.changedTree[flatRowKey]) {\n this.changedTree[flatRowKey][flatColKey] = [];\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n } else {\n this.changedTree[flatRowKey] = {};\n this.changedTree[flatRowKey][flatColKey] = [];\n this.changedTree[flatRowKey][flatColKey][indicatorIndex] = newValue;\n }\n const cellAggregator = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n if (cellAggregator?.records.length === 1) {\n cellAggregator.records[0][this.indicatorKeys[indicatorIndex]] = newValue;\n }\n }\n\n changeRecordFieldValue(fieldName: string, oldValue: string | number, value: string | number) {\n let isIndicatorName = false;\n\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (this.indicatorKeys[i] === fieldName) {\n isIndicatorName = true;\n }\n }\n\n if (!isIndicatorName) {\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n } else {\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (record[fieldName] === oldValue) {\n record[fieldName] = value;\n }\n }\n }\n }\n\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n this.tree = {};\n this.processRecords();\n }\n }\n /** 主要是树形结构懒加载使用 */\n _rowTreeHasChanged() {\n if (!this.hasExtensionRowTree) {\n this.customRowTreeDimensionPaths = this.customTreeToDimensionPathArr(this.customRowTree, 'row');\n }\n }\n changeDataConfig(dataConfig: {\n rows: string[]; //行维度字段数组;\n columns: string[]; //列维度字段数组;\n }) {\n this.rows = dataConfig.rows;\n this.columns = dataConfig.columns;\n }\n addRecords(records: any[]) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n this.processRecord(record);\n }\n if (Array.isArray(this.records)) {\n this.records.push(records);\n }\n }\n\n //将树形结构转为二维数组\n private customTreeToDimensionPathArr(tree: IHeaderTreeDefine[], type: 'col' | 'row') {\n const result: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[][] = []; // 结果\n const that = this;\n function getPath(\n node: IHeaderTreeDefine,\n arr: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n virtual?: boolean;\n childKeys?: (string | number)[];\n }[]\n ) {\n if (!node.virtual) {\n if (\n arr[arr.length - 1]?.childKeys &&\n node.dimensionKey &&\n arr[arr.length - 1].childKeys.indexOf(node.dimensionKey) === -1 &&\n node.dimensionKey !== arr[arr.length - 1].dimensionKey\n ) {\n arr[arr.length - 1].childKeys.push(node.dimensionKey);\n }\n arr.push({\n dimensionKey: isValid(node.indicatorKey) ? undefined : node.dimensionKey,\n value: node.value,\n indicatorKey: node.indicatorKey,\n virtual: node.virtual\n });\n }\n if ((node.children as [])?.length > 0) {\n if (that.rowHierarchyType === 'tree' && type === 'row') {\n arr[arr.length - 1].childKeys = [];\n result.push([...arr]);\n }\n // 存在多个节点就递归\n (node.children as [])?.forEach((childItem: IHeaderTreeDefine) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree?.forEach((treeNode: IHeaderTreeDefine) => getPath(treeNode, []));\n return result;\n }\n\n private getFieldMatchColDimensionPaths(record: any) {\n const fieldMatchDimensionPaths = [];\n for (let i = 0; i < this.customColTreeDimensionPaths?.length ?? 0; i++) {\n const dimensionPath: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n }[] = this.customColTreeDimensionPaths[i];\n let isMatch = true;\n for (let j = 0; j < dimensionPath.length; j++) {\n const dimension = dimensionPath[j];\n if (\n (dimension.dimensionKey && record[dimension.dimensionKey] !== dimension.value) ||\n (dimension.indicatorKey && record[dimension.indicatorKey] === undefined)\n ) {\n isMatch = false;\n break;\n }\n }\n if (isMatch) {\n fieldMatchDimensionPaths.push(dimensionPath);\n }\n }\n return fieldMatchDimensionPaths;\n }\n\n private getFieldMatchRowDimensionPaths(record: any) {\n const fieldMatchDimensionPaths = [];\n for (let i = 0; i < this.customRowTreeDimensionPaths?.length ?? 0; i++) {\n const dimensionPath: {\n dimensionKey?: string | number;\n value: string;\n indicatorKey?: string | number;\n isVirtual?: boolean;\n childKeys?: (string | number)[];\n }[] = this.customRowTreeDimensionPaths[i];\n let isMatch = true;\n for (let j = 0; j < dimensionPath.length; j++) {\n const dimension = dimensionPath[j];\n if (\n (dimension.dimensionKey && record[dimension.dimensionKey] !== dimension.value) ||\n (dimension.indicatorKey && record[dimension.indicatorKey] === undefined)\n ) {\n isMatch = false;\n break;\n }\n if (dimension.childKeys && j === dimensionPath.length - 1) {\n if (dimension.childKeys.length > 0 && dimension.childKeys.find(key => isValid(record[key]))) {\n isMatch = false;\n break;\n }\n }\n }\n //上面条件符合 在进一步判断 如果有是指标在行的情况 且展示为树形结构,除了有指标的节点外 其他节点都不需要统计指标值\n if (isMatch) {\n if (!this.indicatorsAsCol && this.rowHierarchyType === 'tree') {\n if (\n !dimensionPath.find(path => {\n return path.indicatorKey;\n })\n ) {\n isMatch = false;\n }\n }\n }\n if (isMatch) {\n fieldMatchDimensionPaths.push(dimensionPath);\n }\n }\n return fieldMatchDimensionPaths;\n }\n}\n\nfunction arraySortByAnotherArray(array: string[], sortArray: string[]) {\n return array.sort((a, b) => {\n const aIndex = sortArray.indexOf(a);\n const bIndex = sortArray.indexOf(b);\n if (aIndex < bIndex) {\n return -1;\n }\n if (aIndex > bIndex) {\n return 1;\n }\n return 0;\n });\n}\n","import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n PivotTableConstructorOptions,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IPagination,\n CellLocation,\n IIndicator,\n ColumnDefine,\n SortByIndicatorRule,\n SortTypeRule,\n SortRule,\n FilterRules\n} from './ts-types';\nimport { HierarchyState, SortType } from './ts-types';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { FlatDataToObjects } from './dataset/flatDataToObject';\nimport { PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from './ts-types/base-table';\nimport type { ITitleComponent } from './components/title/title';\nimport { cloneDeep, isNumber, isValid } from '@visactor/vutils';\nimport { Env } from './tools/env';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport { EditManager } from './edit/edit-manager';\nimport * as editors from './edit/editors';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { isAllDigits } from './tools/util';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport {\n deleteHideIndicatorNode,\n parseColKeyRowKeyForPivotTable,\n supplementIndicatorNodesForCustomTree\n} from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\n\nexport class PivotTable extends BaseTable implements PivotTableAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotTableProtected;\n declare options: PivotTableConstructorOptions;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n flatDataToObjects?: FlatDataToObjects; //数据处理对象 聚合后的flat数据 转成便于查询的行列二维数组\n // drillMenu: Menu; //上卷下钻的按钮\n // eslint-disable-next-line default-param-last\n constructor(options: PivotTableConstructorOptions);\n constructor(container: HTMLElement, options: PivotTableConstructorOptions);\n constructor(container?: HTMLElement | PivotTableConstructorOptions, options?: PivotTableConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as PivotTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as PivotTableConstructorOptions;\n if ((container as PivotTableConstructorOptions).container) {\n container = (container as PivotTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n if (options) {\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators![index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n //分页配置\n this.pagination = options.pagination;\n this.internalProps.columnResizeType = options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n if (options.customConfig?.enableDataAnalysis === false) {\n // let columnDimensionTree;\n // let rowDimensionTree;\n // if (options.columnTree) {\n const columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n // }\n // if (options.rowTree) {\n const rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n // }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n // options.indicatorsAsCol === false ? rowKeys.concat(IndicatorDimensionKeyPlaceholder) : rowKeys,\n // options.indicatorsAsCol !== false ? columnKeys.concat(IndicatorDimensionKeyPlaceholder) : columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n options.rowHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(\n this,\n this.dataset,\n columnDimensionTree,\n rowDimensionTree\n );\n }\n this._changePivotSortStateBySortRules();\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n // this.render();\n\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n }\n static get EVENT_TYPE(): typeof PIVOT_TABLE_EVENT_TYPE {\n return PIVOT_TABLE_EVENT_TYPE;\n }\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): false {\n return false;\n }\n get recordsCount() {\n return this.records?.length;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n } else if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: PivotTableConstructorOptions) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options);\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators[index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.stateManager.initCheckedState(this.internalProps.records);\n this.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n //分页配置\n this.pagination = options.pagination;\n // 更新protectedSpace\n internalProps.columnResizeType = options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.rowResizeType ?? 'row';\n internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n\n //维护tree树形结构的展开状态\n if (\n options?.rowHierarchyType === 'tree' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowExpandLevel === options?.rowExpandLevel\n ) {\n const beforeRowDimensions = (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowDimensionTree.tree.children;\n this.internalProps.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, node);\n }\n });\n }\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n if (options.customConfig?.enableDataAnalysis === false) {\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n records,\n options.rowHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n }\n this._changePivotSortStateBySortRules();\n\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n\n // if (this.internalProps.title && !this.internalProps.title.isReleased) {\n // this._updateSize();\n // this.internalProps.title.resize();\n // this.scenegraph.resize();\n // }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n // this.render();\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination?: IPagination): void {\n if (pagination) {\n if (!this.pagination) {\n this.pagination = { currentPage: 0, perPageCount: 0 };\n }\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(this.pagination);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n } else if (this.pagination) {\n // 原来有分页 现在更新成不分页\n this.pagination = undefined;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n }\n\n refreshHeader(): void {\n //设置列宽\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n // table.frozenColCount = layoutMap.rowHeaderLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n // table.internalProps.frozenColCount = layoutMap.rowHeaderLevelCount ?? 0;\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n // table.frozenRowCount = layoutMap.headerLevelCount;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * Get rowHierarchyType of pivotTable\n */\n get rowHierarchyType(): 'grid' | 'tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n _syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n const beforeRowDimension = sourceNode.children.find(\n (item: any) => item.dimensionKey === targetChildNode.dimensionKey && item.value === targetChildNode.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, targetChildNode);\n }\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n getFieldData(field: string, col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n return this.records[rowIndex]?.[colIndex];\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (cellDimensionPath) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n if (aggregator.records && aggregator.records.length >= 1) {\n return aggregator.records[0][field];\n }\n // return ''\n }\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n if (treeNode?.record) {\n return treeNode?.record[field];\n }\n }\n }\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (this.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = this.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = this.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount + 1;\n } else if (this.internalProps.layoutMap.isHeader(col, row)) {\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n // const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n // return typeof fieldFormat === 'function'\n // ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n // : valueNode?.value ?? '';\n return aggregator.formatValue\n ? aggregator.formatValue(col, row, this as BaseTableAPI)\n : typeof fieldFormat === 'function'\n ? fieldFormat(aggregator?.value(), col, row, this as BaseTableAPI)\n : aggregator?.value() ?? '';\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const valueNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n return typeof fieldFormat === 'function'\n ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n : valueNode?.value ?? '';\n }\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.value;\n }\n\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.value;\n }\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.record;\n }\n }\n\n getCellRawRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.record;\n }\n }\n /**\n * 全量更新排序规则\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules, col?: number, row?: number) {\n if (this.internalProps.dataConfig) {\n this.internalProps.dataConfig.sortRules = sortRules;\n } else {\n this.internalProps.dataConfig = { sortRules };\n }\n this.dataset.updateSortRules(sortRules);\n this._changePivotSortStateBySortRules();\n const { layoutMap } = this.internalProps;\n layoutMap.resetHeaderTree();\n // 清空单元格内容\n this.scenegraph.clearCells();\n if (isNumber(col) && isNumber(row)) {\n if (this.isRowHeader(col, row)) {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (this.isCornerHeader(col, row)) {\n if (layoutMap.cornerSetting.titleOnDimension === 'column') {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (layoutMap.cornerSetting.titleOnDimension === 'row') {\n this.internalProps._heightResizedRowMap.clear();\n }\n } else if (this.isColumnHeader(col, row)) {\n this.internalProps._heightResizedRowMap.clear();\n }\n this.refreshRowColCount();\n } else {\n this.refreshHeader();\n }\n this.internalProps.useOneRowHeightFillAll = false;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph(true);\n this.render();\n }\n _changePivotSortStateBySortRules() {\n this.pivotSortState = [];\n const sortRules = this.internalProps.dataConfig?.sortRules ?? [];\n for (let i = 0; i < sortRules.length; i++) {\n const sortRule = sortRules[i];\n // if ((sortRule as SortByIndicatorRule).sortType) {\n const dimensions: IDimensionInfo[] = [];\n if (\n (sortRule as SortByIndicatorRule).sortByIndicator &&\n (sortRule as SortByIndicatorRule).sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n for (let j = 0; j < (sortRule as SortByIndicatorRule).query.length; j++) {\n dimensions.push({\n dimensionKey: this.dataset.indicatorsAsCol ? this.dataset.columns[j] : this.dataset.rows[j],\n value: (sortRule as SortByIndicatorRule).query[j]\n });\n }\n dimensions.push({\n indicatorKey: (sortRule as SortByIndicatorRule).sortByIndicator,\n value:\n this.internalProps.layoutMap.getIndicatorInfo((sortRule as SortByIndicatorRule).sortByIndicator)?.title ??\n (sortRule as SortByIndicatorRule).sortByIndicator\n });\n } else {\n dimensions.push({\n dimensionKey: (sortRule as SortTypeRule).sortField,\n isPivotCorner: true,\n value: (sortRule as SortTypeRule).sortField\n });\n }\n const sortType = sortRule.sortType ? (sortRule.sortType.toUpperCase() as 'ASC' | 'DESC' | 'NORMAL') : 'ASC';\n this.pivotSortState.push({\n dimensions,\n order: SortType[sortType]\n });\n // }\n }\n }\n /** 解析配置columnWidthConfig传入的列宽配置 */\n _parseColumnWidthConfig(columnWidthConfig: { dimensions: IDimensionInfo[]; width: number }[]) {\n for (let i = 0; i < columnWidthConfig?.length; i++) {\n const item = columnWidthConfig[i];\n const dimensions = item.dimensions;\n const width = item.width;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n if (cell && cell.col >= this.rowHeaderLevelCount) {\n const cellPath = this.getCellHeaderPaths(cell.col, this.columnHeaderLevelCount); //如单指标隐藏指标情况,从body行去取headerPath才会包括指标维度\n if (cellPath.colHeaderPaths.length === dimensions.length) {\n let match = true;\n for (let i = 0; i < dimensions.length; i++) {\n const dimension = dimensions[i];\n const finded = (cellPath.colHeaderPaths as IDimensionInfo[]).findIndex((colPath: IDimensionInfo, index) => {\n if (colPath.indicatorKey === dimension.indicatorKey) {\n return true;\n }\n if (colPath.dimensionKey === dimension.dimensionKey && colPath.value === dimension.value) {\n return true;\n }\n return false;\n });\n if (finded < 0) {\n match = false;\n break;\n }\n }\n if (match && !this.internalProps._widthResizedColMap.has(cell.col)) {\n this._setColWidth(cell.col, width);\n this.internalProps._widthResizedColMap.add(cell.col); // add resize tag\n }\n }\n }\n }\n }\n /**\n * 更新排序状态\n * @param pivotSortStateConfig.dimensions 排序状态维度对应关系;pivotSortStateConfig.order 排序状态\n */\n updatePivotSortState(\n pivotSortStateConfig: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[]\n ) {\n this.pivotSortState = pivotSortStateConfig;\n }\n // changePivotSortState(pivotSortState: { dimensions: IDimensionInfo[]; order: SortOrder }) {\n // let isExist = false;\n // for (let i = 0; i < this.pivotSortState.length; i++) {\n // const pivotSortStateItem = this.pivotSortState[i];\n // const dimensions = pivotSortStateItem.dimensions;\n // const isEqual = dimensions.every(\n // (item, index) =>\n // (item.dimensionKey === pivotSortState.dimensions[index].dimensionKey ||\n // item.indicatorKey === pivotSortState.dimensions[index].indicatorKey) &&\n // item.value === pivotSortState.dimensions[index].value &&\n // ((isValid(item.isPivotCorner ?? pivotSortState.dimensions[index].isPivotCorner) &&\n // item.isPivotCorner === pivotSortState.dimensions[index].isPivotCorner) ||\n // (!isValid(item.isPivotCorner) && !isValid(pivotSortState.dimensions[index].isPivotCorner)))\n // );\n // if (isEqual) {\n // isExist = true;\n // pivotSortStateItem.order = pivotSortState.order;\n // break;\n // }\n // }\n // if (!isExist) {\n // this.pivotSortState.push(pivotSortState);\n // }\n // }\n /** 如果单元格所在维度或者指标配置了sort自动 可以通过该接口进行排序 */\n sort(col: number, row: number, order: SortOrder) {\n let dimensions: IDimensionInfo[];\n if ((this as PivotTable).isCornerHeader(col, row)) {\n const dimensionInfo = (this as PivotTable).getHeaderDefine(col, row) as any;\n dimensions = [];\n const dimension: IDimensionInfo = {\n isPivotCorner: true,\n dimensionKey: dimensionInfo.value,\n value: dimensionInfo.value\n };\n dimensions.push(dimension);\n } else if ((this as PivotTable).isColumnHeader(col, row)) {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).colHeaderPaths as IDimensionInfo[];\n } else {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).rowHeaderPaths as IDimensionInfo[];\n }\n\n const sortIndicator = dimensions[dimensions.length - 1].indicatorKey;\n\n const headerDefine = this.getHeaderDefine(col, row) as any;\n if (headerDefine.sort) {\n if ((this as PivotTable).dataset.sortRules) {\n const cacheOldDimensionSortRule: Record = {};\n for (let i = (this as PivotTable).dataset.sortRules.length - 1; i >= 0; i--) {\n const sortRule = (this as PivotTable).dataset.sortRules[i];\n if (headerDefine.dimensionKey && sortRule.sortField === headerDefine.dimensionKey) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n } else if (\n sortIndicator &&\n // headerDefine.indicatorKey === sortIndicator &&\n // sortIndicator === (sortRule as SortByIndicatorRule).sortByIndicator &&\n sortRule.sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n }\n }\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules.push({\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n });\n } else {\n (this as PivotTable).dataset.sortRules.push(\n Object.assign(cacheOldDimensionSortRule[headerDefine.dimensionKey] ?? {}, {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n })\n );\n }\n } else {\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order as 'ASC' | 'DESC'],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n }\n ];\n } else {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n }\n ];\n }\n }\n\n (this as PivotTable).updateSortRules((this as PivotTable).dataset.sortRules, col, row);\n }\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const pivotState = this.pivotSortState[i];\n const dimensions = pivotState.dimensions;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n // const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n const order = pivotState.order;\n\n if (cell && cellInRange(cellRange, cell.col, cell.row)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n for (let row = 0; row < this.internalProps.records.length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n if (Array.isArray(headerTreeNode.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: headerTreeNode\n });\n }\n }\n\n // beforeUpdateCell主要用于setTreeNodeChildren方法\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true, beforeUpdateCell?: Function) {\n let notFillWidth = false;\n let notFillHeight = false;\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const result = (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyState(col, row);\n beforeUpdateCell && beforeUpdateCell();\n //影响行数\n this.refreshRowColCount();\n // this.scenegraph.clearCells();\n // this.scenegraph.createSceneGraph();\n // this.invalidate();\n this.clearCellStyleCache();\n this.scenegraph.updateHierarchyIcon(col, row);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n result.removeCellPositions,\n result.addCellPositions,\n result.updateCellPositions,\n recalculateColWidths\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n _hasHierarchyTreeHeader() {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree';\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array): void {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n const options = this.options;\n const internalProps = this.internalProps;\n if (this.options.customConfig?.enableDataAnalysis === false) {\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType === 'tree' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.pivotSortState = [];\n if (options.pivotSortState) {\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n let editorDefine;\n if (this.isCornerHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else if (this.isHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n }\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n /** 更改单元格数据 会触发change_cell_value事件*/\n changeCellValue(col: number, row: number, value: string | undefined, workOnEditableCell = false) {\n if ((workOnEditableCell && this.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n let newValue: any = value;\n const oldValue = this.getCellOriginValue(col, row);\n const rawValue = this.getCellRawValue(col, row);\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(col, row, oldValue, newValue);\n // this.scenegraph.updateCellContent(col, row);\n const range = this.getCellRange(col, row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else if (!this.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = this.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n this.heightMode === 'adaptive' ||\n (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)\n ) {\n if (this.internalProps._heightResizedRowMap.size === 0) {\n this.scenegraph.recalculateRowHeights();\n }\n } else if (this.isAutoRowHeight() && !this.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = this.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n if (oldValue !== newValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue,\n currentValue: oldValue,\n changedValue: newValue\n });\n }\n this.scenegraph.updateNextFrame();\n }\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: string[][], workOnEditableCell = false) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n const beforeChangeValue = this.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = this.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n\n thisRowPasteColEnd = startCol + j;\n if (\n (workOnEditableCell && this.isHasEditorDefine(startCol + j, startRow + i)) ||\n workOnEditableCell === false\n ) {\n const value = rowValues[j];\n let newValue: string | number = value;\n const oldValue = oldValues[i][j];\n const rawValue = beforeChangeValues[i][j];\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(startCol + j, startRow + i, oldValue, newValue);\n const changedValue = this.getCellOriginValue(startCol + j, startRow + i);\n if (changedValue !== oldValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = this.getCellValue(col, row);\n const startRange = this.getCellRange(startCol, startRow);\n const range = this.getCellRange(pasteColEnd, pasteRowEnd);\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!this.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = this.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n\n if (this.heightMode === 'adaptive' || (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)) {\n this.scenegraph.recalculateRowHeights();\n } else if (this.isAutoRowHeight()) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (this.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = this.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, this.colCount - 1, this);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n this.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n this.scenegraph.updateNextFrame();\n }\n\n private _changeCellValueToDataSet(col: number, row: number, oldValue: string | number, newValue: string | number) {\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n this.records[rowIndex][colIndex] = newValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (this.isCornerHeader(col, row)) {\n this.internalProps.layoutMap.changeCornerTitle(col, row, newValue as string);\n } else if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.dataset.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.dataset.changeTreeNodeValue(\n !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n newValue\n );\n }\n } else if (this.flatDataToObjects) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n\n if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.flatDataToObjects.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.flatDataToObjects.changeTreeNodeValue(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n newValue\n );\n }\n }\n }\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n\n changeRecordOrder(source: number, target: number) {\n //\n }\n\n /**\n * 树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param children 设置到该单元格的子节点\n * @param records 该节点展开后新增数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n */\n setTreeNodeChildren(children: IHeaderTreeDefine[], records: any[], col: number, row: number) {\n if (this.flatDataToObjects) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.flatDataToObjects.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n });\n this.flatDataToObjects.addRecords(records);\n });\n } else {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.dataset._rowTreeHasChanged();\n this.dataset.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys\n });\n this.dataset.addRecords(records);\n });\n }\n }\n\n /** 更新数据过滤规则 对应dataConfig中filterRules配置格式 */\n updateFilterRules(filterRules: FilterRules) {\n this.internalProps.dataConfig.filterRules = filterRules;\n this.dataset.updateFilterRules(filterRules);\n this.renderWithRecreateCells();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataset?.filterRules;\n }\n}\n","import { PivotTable } from './PivotTable';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\n\nexport class PivotTableAll extends PivotTable {}\n","import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IIndicator,\n PivotChartConstructorOptions,\n CollectValueBy,\n AggregationRules,\n AggregationRule,\n AnyFunction,\n FilterRules,\n IPivotTableCellHeaderPaths,\n PivotChartAPI\n} from './ts-types';\nimport { AggregationType } from './ts-types';\nimport type { HierarchyState } from './ts-types';\nimport { getField } from './data/DataSource';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { PIVOT_CHART_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { _setDataSource, parseMarkLineGetExtendRange } from './core/tableHelper';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotChartProtected } from './ts-types/base-table';\nimport type { IChartColumnIndicator } from './ts-types/pivot-table/indicator/chart-indicator';\nimport type { Chart } from './scenegraph/graphic/chart';\nimport {\n clearCellChartCacheImage,\n clearChartCacheImage,\n updateChartData\n} from './scenegraph/refresh-node/update-chart';\nimport type { ITableAxisOption } from './ts-types/component/axis';\nimport { cloneDeep, isArray, isNumber } from '@visactor/vutils';\nimport type { DiscreteLegend } from '@visactor/vrender-components';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { IndicatorDimensionKeyPlaceholder } from './tools/global';\nimport { checkHasCartesianChart } from './layout/chart-helper/get-chart-spec';\nimport { supplementIndicatorNodesForCustomTree } from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport {\n registerAxis,\n registerEmptyTip,\n registerLegend,\n registerMenu,\n registerTitle,\n registerTooltip\n} from './components';\nimport {\n registerChartCell,\n registerCheckboxCell,\n registerImageCell,\n registerProgressBarCell,\n registerRadioCell,\n registerSparkLineCell,\n registerTextCell,\n registerVideoCell\n} from './scenegraph/group-creater/cell-type';\nimport { hasLinearAxis } from './layout/chart-helper/get-axis-config';\n\nregisterAxis();\nregisterEmptyTip();\nregisterLegend();\nregisterMenu();\nregisterTitle();\nregisterTooltip();\n\nregisterChartCell();\nregisterCheckboxCell();\nregisterImageCell();\nregisterProgressBarCell();\nregisterRadioCell();\nregisterSparkLineCell();\nregisterTextCell();\nregisterVideoCell();\n\nexport class PivotChart extends BaseTable implements PivotChartAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotChartProtected;\n declare options: PivotChartConstructorOptions;\n pivotSortState: PivotSortState[];\n\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n\n _selectedDataItemsInChart: any[] = [];\n _selectedDimensionInChart: { key: string; value: string }[] = [];\n _chartEventMap: Record = {};\n\n _axes: ITableAxisOption[];\n constructor(options: PivotChartConstructorOptions);\n constructor(container: HTMLElement, options: PivotChartConstructorOptions);\n constructor(container?: HTMLElement | PivotChartConstructorOptions, options?: PivotChartConstructorOptions) {\n if (Env.mode === 'node') {\n options = container as PivotChartConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as PivotChartConstructorOptions;\n if ((container as PivotChartConstructorOptions).container) {\n container = (container as PivotChartConstructorOptions).container;\n } else {\n container = null;\n }\n }\n super(container as HTMLElement, options);\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n this.setCustomStateNameToSpec();\n this.internalProps.columnResizeType = options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = { isPivotChart: true };\n this._axes = isArray(options.axes) ? options.axes : [];\n\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys, rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys, columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys, indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n }\n return keys;\n }, []) ?? [];\n this.internalProps.dataConfig.collectValuesBy = this._generateCollectValuesConfig(columnKeys, rowKeys);\n this.internalProps.dataConfig.aggregationRules = this._generateAggregationRules();\n this.internalProps.dataConfig.dimensionSortArray = this._getDimensionSortArray();\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // null,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n undefined,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n true\n );\n if (this.options.indicatorsAsCol && checkHasCartesianChart(this.internalProps.indicators)) {\n const supplyAxisNode = (nodes: IHeaderTreeDefine[]) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if ((node.children as IHeaderTreeDefine[])?.length) {\n supplyAxisNode(node.children as IHeaderTreeDefine[]);\n } else {\n // 在指标在列上的透视图中,主指标轴(离散轴)显示在左侧,因此需要在原先行表头的布局中最右侧加入一列,用来显示坐标轴\n // 加入的这一列dimensionKey配置为'axis',在后续行列计算维度时需要注意,这一列是为了显示坐标轴加入的,不在行列维度信息内\n node.children = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n });\n };\n if (this.dataset.rowHeaderTree?.length) {\n supplyAxisNode(this.dataset.rowHeaderTree);\n } else {\n this.dataset.rowHeaderTree = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n }\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n }\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n static get EVENT_TYPE(): typeof PIVOT_CHART_EVENT_TYPE {\n return PIVOT_CHART_EVENT_TYPE;\n }\n get pivotChartAxes() {\n return this._axes;\n }\n get recordsCount() {\n return this.records?.length;\n }\n\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): true {\n return true;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(options: PivotChartConstructorOptions) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options);\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.setCustomStateNameToSpec();\n this._selectedDataItemsInChart = [];\n // 更新protectedSpace\n internalProps.columnResizeType = options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.rowResizeType ?? 'row';\n internalProps.dataConfig = { isPivotChart: true };\n\n this._axes = isArray(options.axes) ? options.axes : [];\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n // if (options.rows || options.columns) {\n\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.internalProps.columnTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.columnTree,\n options.indicators\n );\n }\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.internalProps.rowTree = supplementIndicatorNodesForCustomTree(\n this.internalProps.rowTree,\n options.indicators\n );\n }\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n const rowKeys = rowDimensionTree?.dimensionKeys?.count\n ? rowDimensionTree.dimensionKeys.valueArr()\n : options.rows?.reduce((keys, rowObj) => {\n if (typeof rowObj === 'string') {\n keys.push(rowObj);\n } else {\n keys.push(rowObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const columnKeys = columnDimensionTree?.dimensionKeys?.count\n ? columnDimensionTree.dimensionKeys.valueArr()\n : options.columns?.reduce((keys, columnObj) => {\n if (typeof columnObj === 'string') {\n keys.push(columnObj);\n } else {\n keys.push(columnObj.dimensionKey);\n }\n return keys;\n }, []) ?? [];\n const indicatorKeys =\n options.indicators?.reduce((keys, indicatorObj) => {\n if (typeof indicatorObj === 'string') {\n keys.push(indicatorObj);\n } else {\n keys.push(indicatorObj.indicatorKey);\n }\n return keys;\n }, []) ?? [];\n\n this.internalProps.dataConfig.collectValuesBy = this._generateCollectValuesConfig(columnKeys, rowKeys);\n this.internalProps.dataConfig.aggregationRules = this._generateAggregationRules();\n this.internalProps.dataConfig.dimensionSortArray = this._getDimensionSortArray();\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // null,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records ?? this.internalProps.records,\n undefined,\n this.internalProps.columnTree,\n this.internalProps.rowTree,\n true\n );\n if (this.options.indicatorsAsCol && checkHasCartesianChart(this.internalProps.indicators)) {\n const supplyAxisNode = (nodes: IHeaderTreeDefine[]) => {\n nodes.forEach((node: IHeaderTreeDefine) => {\n if ((node.children as IHeaderTreeDefine[])?.length) {\n supplyAxisNode(node.children as IHeaderTreeDefine[]);\n } else {\n // 在指标在列上的透视图中,主指标轴(离散轴)显示在左侧,因此需要在原先行表头的布局中最右侧加入一列,用来显示坐标轴\n // 加入的这一列dimensionKey配置为'axis',在后续行列计算维度时需要注意,这一列是为了显示坐标轴加入的,不在行列维度信息内\n node.children = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n });\n };\n if (this.dataset.rowHeaderTree?.length) {\n supplyAxisNode(this.dataset.rowHeaderTree);\n } else {\n this.dataset.rowHeaderTree = [\n {\n dimensionKey: 'axis',\n value: ''\n }\n ];\n }\n }\n\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n }\n\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n }\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n // else {\n // console.warn('VTable Warn: your option is invalid, please check it!');\n // return this;\n // }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n // if (options.dataSource) {\n // _setDataSource(this, options.dataSource);\n // }else\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n updatePagination() {\n //void\n }\n refreshHeader(): void {\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n // table.frozenColCount = layoutMap.rowHeaderLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n table.internalProps.frozenColCount = layoutMap.rowHeaderLevelCount ?? 0;\n // table.frozenRowCount = layoutMap.headerLevelCount;\n table.frozenRowCount = Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0);\n if (table.bottomFrozenRowCount !== (layoutMap?.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = layoutMap?.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (layoutMap?.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = layoutMap?.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n private syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n this.syncHierarchyState(sourceNode.children[index], targetChildNode);\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n // getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n // if (field === null || field === undefined) {\n // return null;\n // }\n // const table = this;\n // if (table.internalProps.layoutMap.isHeader(col, row)) {\n // return null;\n // }\n // const rowIndex = this.getBodyIndexByRow(row);\n // const colIndex = this.getBodyIndexByCol(col);\n // const dataValue = table.dataSource?.getField(rowIndex, colIndex, col, row, this);\n // if (typeof field !== 'string') {\n // //field为函数format\n // const cellHeaderPaths = table.internalProps.layoutMap.getCellHeaderPaths(col, row);\n // return getField({ dataValue, ...cellHeaderPaths }, field, col, row, this, emptyFn as any);\n // }\n // return dataValue;\n // }\n\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n if (\n this.internalProps.layoutMap.isBottomFrozenRow(col, row) ||\n this.internalProps.layoutMap.isRightFrozenColumn(col, row)\n ) {\n //针对底部和右侧冻结的轴单元格的值做处理 如果有轴这里会显示轴 如果没有则显示这里获取到的值\n const indicatorKeys = this.internalProps.layoutMap.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo: IIndicator;\n indicatorKeys?.forEach(key => {\n const info = this.internalProps.layoutMap.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n return indicatorInfo?.title ?? indicatorInfo?.indicatorKey ?? '';\n }\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n }\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n // const { field, fieldFormat } = this.internalProps.layoutMap.getBody(col, row);\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n if (\n this.internalProps.layoutMap.isBottomFrozenRow(col, row) ||\n this.internalProps.layoutMap.isRightFrozenColumn(col, row)\n ) {\n //针对底部和右侧冻结的轴单元格的值做处理 如果有轴这里会显示轴 如果没有则显示这里获取到的值\n const indicatorKeys = this.internalProps.layoutMap.getIndicatorKeyInChartSpec(col, row);\n let indicatorInfo: IIndicator;\n indicatorKeys?.forEach(key => {\n const info = this.internalProps.layoutMap.getIndicatorInfo(key);\n if (info) {\n indicatorInfo = info;\n }\n });\n return indicatorInfo?.title ?? indicatorInfo?.indicatorKey ?? '';\n }\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n }\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n getCellRawValue(col: number, row: number) {\n return this.getCellOriginValue(col, row);\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n }\n return undefined;\n }\n\n getCellRawRecord(col: number, row: number) {\n return this.getCellOriginRecord(col, row);\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n\n if (cellInRange(cellRange, sortCol, sortRow)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.options.records?.[0]?.constructor === Array) {\n for (let row = 0; row < (this.internalProps.records as Array).length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.options.records?.[0]?.constructor === Array) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n //nothing\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n\n _hasHierarchyTreeHeader() {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType === 'tree';\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n /**\n * 根据用户配置 生成 收集维度值collectValuesBy 的配置 传给dataset用\n * 这个收集规则的逻辑是按照正常使用方式:\n * 指标显示在行表头indicatorsAsCol=false时,图表yField为指标值,xField为维度值(考虑stack)direction为默认值'vertical';\n * 指标显示在列表头indicatorsAsCol=true时,图表xField为指标值,yField为维度值(考虑stack)direction为'horizontal';\n * @param columnKeys\n * @param rowKeys\n * @returns\n */\n private _generateCollectValuesConfig(columnKeys: string[], rowKeys: string[]): Record {\n columnKeys = columnKeys.filter(key => key !== IndicatorDimensionKeyPlaceholder);\n rowKeys = rowKeys.filter(key => key !== IndicatorDimensionKeyPlaceholder);\n const indicators = this.internalProps.indicators;\n const collectValuesBy: Record = {};\n\n for (let i = 0, len = indicators?.length; i < len; i++) {\n if (typeof indicators[i] !== 'string' && (indicators[i] as IChartColumnIndicator).chartSpec) {\n if (\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'pie' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'rose' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'radar' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'gauge' ||\n (indicators[i] as IChartColumnIndicator).chartSpec?.type === 'wordCloud'\n ) {\n continue;\n }\n const indicatorDefine = indicators[i] as IIndicator;\n const indicatorSpec = (indicatorDefine as IChartColumnIndicator).chartSpec;\n\n if (this.options.indicatorsAsCol === false) {\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n // 收集指标值的范围\n collectValuesBy[indicatorDefine.indicatorKey] = {\n by: rowKeys,\n range: true,\n // 判断是否需要匹配维度值相同的进行求和计算\n sumBy: indicatorSpec?.stack && columnKeys.concat(indicatorSpec?.xField)\n };\n if (indicatorSpec.series) {\n indicatorSpec.series.forEach((chartSeries: any) => {\n const xField = typeof chartSeries.xField === 'string' ? chartSeries.xField : chartSeries.xField[0];\n collectValuesBy[xField] = {\n by: columnKeys,\n type: chartSeries.direction !== 'horizontal' ? 'xField' : undefined,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction === 'horizontal',\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', true),\n sortBy:\n chartSeries.direction !== 'horizontal'\n ? chartSeries?.data?.fields?.[xField]?.domain ?? indicatorSpec?.data?.fields?.[xField]?.domain\n : undefined\n };\n\n const yField = chartSeries.yField;\n chartSeries.stack !== false &&\n (chartSeries.type === 'bar' || chartSeries.type === 'area') &&\n (chartSeries.stack = true); //明确指定 chartSpec.stack为true\n collectValuesBy[yField] = {\n by: rowKeys,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction !== 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', false),\n sumBy: chartSeries.stack && columnKeys.concat(chartSeries?.xField), // 逻辑严谨的话 这个concat的值也需要结合 chartSeries.direction来判断是xField还是yField\n sortBy:\n chartSeries.direction === 'horizontal'\n ? chartSeries?.data?.fields?.[yField]?.domain ?? indicatorSpec?.data?.fields?.[yField]?.domain\n : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n });\n } else {\n const xField = typeof indicatorSpec.xField === 'string' ? indicatorSpec.xField : indicatorSpec.xField[0];\n collectValuesBy[xField] = {\n by: columnKeys,\n type: indicatorSpec.direction !== 'horizontal' ? 'xField' : undefined,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction === 'horizontal',\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', true),\n sortBy:\n indicatorSpec.direction !== 'horizontal' ? indicatorSpec?.data?.fields?.[xField]?.domain : undefined\n };\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n //下面这个收集的值 应该是和收集的 collectValuesBy[indicatorDefine.indicatorKey] 相同\n const yField = indicatorSpec.yField;\n collectValuesBy[yField] = {\n by: rowKeys,\n range: indicatorSpec.direction !== 'horizontal', // direction默认为'vertical'\n sumBy: indicatorSpec.stack && columnKeys.concat(indicatorSpec?.xField), // 逻辑严谨的话 这个concat的值也需要结合 chartSeries.direction来判断是xField还是yField\n sortBy:\n indicatorSpec.direction === 'horizontal' ? indicatorSpec?.data?.fields?.[yField]?.domain : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n }\n } else {\n const indicatorDefine = indicators[i] as IIndicator;\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n // 收集指标值的范围\n collectValuesBy[indicatorDefine.indicatorKey] = {\n by: columnKeys,\n range: true,\n // 判断是否需要匹配维度值相同的进行求和计算\n sumBy: indicatorSpec?.stack && rowKeys.concat(indicatorSpec?.yField)\n };\n if (indicatorSpec.series) {\n indicatorSpec.series.forEach((chartSeries: any) => {\n const yField = typeof chartSeries.yField === 'string' ? chartSeries.yField : chartSeries.yField[0];\n collectValuesBy[yField] = {\n by: rowKeys,\n type: chartSeries.direction === 'horizontal' ? 'yField' : undefined,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction !== 'horizontal',\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', false),\n sortBy:\n chartSeries.direction === 'horizontal'\n ? chartSeries?.data?.fields?.[yField]?.domain ?? indicatorSpec?.data?.fields?.[yField]?.domain\n : undefined\n };\n\n const xField = chartSeries.xField;\n chartSeries.stack !== false &&\n (chartSeries.type === 'bar' || chartSeries.type === 'area') &&\n (chartSeries.stack = true); //明确指定 chartSpec.stack为true\n collectValuesBy[xField] = {\n by: columnKeys,\n // range: chartSeries.type === 'scatter' ? true : chartSeries.direction === 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(chartSeries, this._axes, chartSeries.direction === 'horizontal', true),\n sumBy: chartSeries.stack && rowKeys.concat(chartSeries?.yField),\n sortBy:\n chartSeries.direction !== 'horizontal'\n ? chartSeries?.data?.fields?.[xField]?.domain ?? indicatorSpec?.data?.fields?.[xField]?.domain\n : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n });\n } else {\n const yField = typeof indicatorSpec.yField === 'string' ? indicatorSpec.yField : indicatorSpec.yField[0];\n collectValuesBy[yField] = {\n by: rowKeys,\n type: indicatorSpec.direction === 'horizontal' ? 'yField' : undefined,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction !== 'horizontal',\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', false),\n sortBy:\n indicatorSpec.direction === 'horizontal' ? indicatorSpec?.data?.fields?.[yField]?.domain : undefined\n };\n //明确指定 chartSpec.stack为true\n indicatorSpec?.stack !== false &&\n (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&\n (indicatorSpec.stack = true);\n //下面这个收集的值 应该是和收集的 collectValuesBy[indicatorDefine.indicatorKey] 相同\n const xField = indicatorSpec.xField;\n collectValuesBy[xField] = {\n by: columnKeys,\n // range: indicatorSpec.type === 'scatter' ? true : indicatorSpec.direction === 'horizontal', // direction默认为'vertical'\n range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', true),\n sumBy: indicatorSpec.stack && rowKeys.concat(indicatorSpec?.yField),\n sortBy:\n indicatorSpec.direction !== 'horizontal' ? indicatorSpec?.data?.fields?.[xField]?.domain : undefined,\n extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)\n };\n }\n }\n }\n }\n\n return collectValuesBy;\n }\n // private _generateAggregationRules(indicatorKeys: string[]): AggregationRules {\n // return indicatorKeys.map((indicatorKey: string) => {\n // return {\n // indicatorKey, //field转为指标key\n // field: indicatorKey, //指标依据字段\n // aggregationType: AggregationType.RECORD //计算类型\n // };\n // });\n // }\n /**\n *\n * @param indicatorFromChartSpec 是否需要考虑chartSpec中的yField或者xField分析作为指标来分组数据\n * @returns\n */\n private _generateAggregationRules() {\n const aggregationRules: AggregationRules = [];\n // indicatorFromChartSpec = true;\n this.internalProps.indicators?.forEach((indicator: IIndicator | string) => {\n if (typeof indicator === 'string') {\n aggregationRules.push({\n indicatorKey: indicator, //field转为指标key\n field: indicator, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n } as AggregationRule);\n } else {\n if ((indicator as IChartColumnIndicator).chartSpec?.series) {\n // 如果chartSpec配置了组合图 series 则需要考虑 series中存在的多个指标\n const fields: string[] = [];\n (indicator as IChartColumnIndicator).chartSpec?.series.forEach((seriesSpec: any) => {\n const seriesField = this.options.indicatorsAsCol === false ? seriesSpec.yField : seriesSpec.xField;\n if (fields.indexOf(seriesField) === -1) {\n fields.push(seriesField);\n }\n });\n aggregationRules.push({\n indicatorKey: indicator.indicatorKey, //field转为指标key\n field: fields, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n });\n } else {\n const field =\n this.options.indicatorsAsCol === false\n ? (indicator as IChartColumnIndicator).chartSpec.yField\n : (indicator as IChartColumnIndicator).chartSpec.xField;\n aggregationRules.push({\n indicatorKey: indicator.indicatorKey, //field转为指标key\n field: field ?? indicator.indicatorKey, //指标依据字段\n aggregationType: AggregationType.RECORD //计算类型\n });\n }\n }\n });\n\n return aggregationRules;\n }\n /** 将spec中的 selected和selected_reverse 更名为vtable_selected和vtable_selected_reverse */\n private setCustomStateNameToSpec() {\n /** 修改设置的selected 和 dselected_reverse的名字加前缀vtable */\n const setCustomStateName = (spec: any) => {\n if (spec.bar?.state?.selected) {\n spec.bar.state.vtable_selected = spec.bar.state.selected;\n spec.bar.state.vtable_selected_reverse = spec.bar.state.selected_reverse;\n delete spec.bar.state.selected;\n delete spec.bar.state.selected_reverse;\n }\n if (spec.point?.state?.selected) {\n spec.point.state.vtable_selected = spec.point.state.selected;\n spec.point.state.vtable_selected_reverse = spec.point.state.selected_reverse;\n delete spec.point.state.selected;\n delete spec.point.state.selected_reverse;\n }\n if (spec.line?.state?.selected) {\n spec.line.state.vtable_selected = spec.line.state.selected;\n spec.line.state.vtable_selected_reverse = spec.line.state.selected_reverse;\n delete spec.line.state.selected;\n delete spec.line.state.selected_reverse;\n }\n if (spec.area?.state?.selected) {\n spec.area.state.vtable_selected = spec.area.state.selected;\n spec.area.state.vtable_selected_reverse = spec.area.state.selected_reverse;\n delete spec.area.state.selected;\n delete spec.area.state.selected_reverse;\n }\n if (spec.pie?.state?.selected) {\n spec.pie.state.vtable_selected = spec.pie.state.selected;\n spec.pie.state.vtable_selected_reverse = spec.pie.state.selected_reverse;\n delete spec.pie.state.selected;\n delete spec.pie.state.selected_reverse;\n }\n };\n this.internalProps.indicators?.forEach((indicator: string | IIndicator) => {\n if ((indicator as IChartColumnIndicator).chartSpec) {\n const spec = (indicator as IChartColumnIndicator).chartSpec;\n if (spec.series) {\n spec.series.forEach((series: any) => {\n setCustomStateName(series);\n });\n } else {\n setCustomStateName(spec);\n }\n }\n });\n }\n\n /** 更新数据过滤规则,适用场景:点击图例项后 更新过滤规则 来更新图表 */\n updateFilterRules(filterRules: FilterRules) {\n this.internalProps.dataConfig.filterRules = filterRules;\n this.dataset.updateFilterRules(filterRules);\n clearChartCacheImage(this.scenegraph);\n updateChartData(this.scenegraph);\n this.render();\n }\n clearChartCacheImage(col?: number, row?: number) {\n if (isNumber(col) && isNumber(row)) {\n clearCellChartCacheImage(col, row, this.scenegraph);\n } else {\n clearChartCacheImage(this.scenegraph);\n }\n }\n /** 获取图例的选择状态 */\n getLegendSelected() {\n const selected: any[] = [];\n this.internalProps.legends?.forEach(legend => {\n const data = (legend.legendComponent as any)._getSelectedLegends().map((d: any) => d.label);\n selected.push(...data);\n });\n return selected;\n }\n setLegendSelected(selectedData: (string | number)[]) {\n this.internalProps.legends?.forEach(legend => {\n (legend.legendComponent as DiscreteLegend).setSelected(selectedData);\n });\n // this.updateFilterRules([{ filterKey: '20001', filteredValues: selectedData }]);\n // this.invalidate();\n }\n /**\n * 获取图表上某一个图元的位置\n * @param datum 图元对应的数据\n * @param cellHeaderPaths 单元格的header路径\n * @returns 图元在整个表格上的坐标位置(相对表格左上角视觉坐标)\n */\n getChartDatumPosition(datum: any, cellHeaderPaths: IPivotTableCellHeaderPaths): { x: number; y: number } {\n const { chartInstance, bounds } = this.getChartInstance(cellHeaderPaths);\n if (chartInstance) {\n const position = chartInstance.convertDatumToPosition(datum);\n return position ? { x: Math.round(position.x + bounds.x1), y: Math.round(position.y + bounds.y1) } : null;\n }\n return null;\n }\n /** 获取某条数据所在的行列位置 */\n getCellAddressByRecord(record: any) {\n const rowHeaderPaths: IDimensionInfo[] = [];\n const colHeaderPaths: IDimensionInfo[] = [];\n const recordKeyMapToIndicatorKeys = {};\n const indicatorRecordKeys: (string | number)[] = [];\n this.dataset.dataConfig.aggregationRules.forEach(aggregationRule => {\n if (typeof aggregationRule.field === 'string') {\n recordKeyMapToIndicatorKeys[aggregationRule.field] = aggregationRule.indicatorKey;\n indicatorRecordKeys.push(aggregationRule.field);\n } else {\n for (let i = 0; i < aggregationRule.field.length; i++) {\n recordKeyMapToIndicatorKeys[aggregationRule.field[i]] = aggregationRule.indicatorKey;\n indicatorRecordKeys.push(aggregationRule.field[i]);\n }\n }\n });\n for (const key in record) {\n if (this.dataset.rows.indexOf(key) >= 0) {\n rowHeaderPaths.push({\n dimensionKey: key,\n value: record[key]\n });\n }\n if (this.dataset.columns.indexOf(key) >= 0) {\n colHeaderPaths.push({\n dimensionKey: key,\n value: record[key]\n });\n }\n if (indicatorRecordKeys.indexOf(key) >= 0) {\n if (this.dataset.indicatorsAsCol) {\n colHeaderPaths.push({\n indicatorKey: recordKeyMapToIndicatorKeys[key]\n });\n } else {\n rowHeaderPaths.push({\n indicatorKey: recordKeyMapToIndicatorKeys[key]\n });\n }\n }\n }\n return this.getCellAddressByHeaderPaths({\n rowHeaderPaths,\n colHeaderPaths,\n cellLocation: 'body'\n });\n }\n\n getChartInstance(cellHeaderPaths: IPivotTableCellHeaderPaths) {\n const cellAddr = this.getCellAddressByHeaderPaths(cellHeaderPaths);\n if (cellAddr) {\n const cellPosition = this.getCellRelativeRect(cellAddr.col, cellAddr.row);\n const cellGroup = this.scenegraph.getCell(cellAddr.col, cellAddr.row);\n // let position;\n let chartInstance: any;\n const chartNode: Chart = cellGroup?.getChildren()?.[0] as Chart;\n if (chartNode.attribute.chartInstance) {\n chartInstance = chartNode.attribute.chartInstance;\n const { dataId, data, axes, spec } = chartNode.attribute;\n const viewBox = chartNode.getViewBox();\n axes?.forEach((axis: any, index: number) => {\n if (axis.type === 'linear') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._domain = {\n // min: axis.range?.min ?? 0,\n // max: axis.range?.max ?? 0\n // };\n chartInstance.updateModelSpecSync(\n { type: 'axes', index },\n {\n min: axis.range?.min ?? 0,\n max: axis.range?.max ?? 0,\n tick: {\n tickMode: axis.tick?.tickMode\n }\n },\n true\n );\n } else if (axis.type === 'band') {\n // const chartAxis = chartInstance._chart._components[index];\n // chartAxis._spec.domain = axis.domain.slice(0);\n // chartAxis.updateScaleDomain();\n chartInstance.updateModelSpec({ type: 'axes', index }, { domain: axis.domain.slice(0) }, true);\n }\n });\n\n chartInstance.updateViewBox(\n {\n x1: viewBox.x1 - (chartNode.getRootNode() as any).table.scrollLeft,\n x2: viewBox.x2 - (chartNode.getRootNode() as any).table.scrollLeft,\n y1: viewBox.y1 - (chartNode.getRootNode() as any).table.scrollTop,\n y2: viewBox.y2 - (chartNode.getRootNode() as any).table.scrollTop\n },\n false,\n false\n );\n // chartInstance.updateDataSync(dataId, data);\n if (typeof dataId === 'string') {\n chartInstance.updateDataSync(dataId, data ?? []);\n } else {\n const dataBatch = [];\n for (const dataIdStr in dataId) {\n const dataIdAndField = dataId[dataIdStr];\n const series = spec.series.find((item: any) => item?.data?.id === dataIdStr);\n dataBatch.push({\n id: dataIdStr,\n values: dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? [],\n fields: series?.data?.fields\n });\n // 判断是否有updateFullDataSync 木有的话 还是循环调用updateDataSync\n if (!chartInstance.updateFullDataSync) {\n chartInstance.updateDataSync(\n dataIdStr,\n dataIdAndField\n ? data?.filter((item: any) => {\n return item.hasOwnProperty(dataIdAndField);\n }) ?? []\n : data ?? []\n );\n }\n }\n chartInstance.updateFullDataSync?.(dataBatch);\n }\n // position = chartInstance.convertDatumToPosition(datum);\n // this.render();\n this.renderAsync();\n }\n // cellPosition.offsetLeft(this.tableX);\n // cellPosition.offsetTop(this.tableY);\n return {\n chartInstance,\n bounds: cellPosition.bounds\n };\n // return position\n // ? { x: Math.round(position.x + cellPosition.bounds.x1), y: Math.round(position.y + cellPosition.bounds.y1) }\n // : null;\n }\n return {};\n }\n\n _getDimensionSortArray(): string[] | undefined {\n if (this.options?.axes?.length) {\n const dimensionAxisOrient = this.options.indicatorsAsCol ? 'left' : 'bottom';\n const dimensionAxisOption = this.options.axes.find(axis => {\n if (axis.orient === dimensionAxisOrient) {\n return true;\n }\n return false;\n });\n if (dimensionAxisOption && isArray((dimensionAxisOption as any).domain)) {\n return (dimensionAxisOption as any).domain;\n }\n }\n return undefined;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array): void {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n const options = this.options;\n const internalProps = this.internalProps;\n\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n }\n\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n}\n","import type { GraphicType, IRectGraphicAttribute, ITicker, IStage } from '@visactor/vrender-core';\nimport { genNumberType, parsePadding, Rect } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, Bounds } from '@visactor/vutils';\nimport { pointInAABB, transformBoundsWithMatrix } from '@visactor/vutils';\nimport { isBoundsLikeEqual } from '../../../utils/equal';\nimport * as VTable from '@visactor/vtable';\nimport { VChart, type IInitOption } from '@visactor/vchart';\nimport type { IVTable } from '../interface/character-table';\n\nVTable.register.chartModule('vchart', VChart);\n\nexport const TableClass: { [key: string]: any } = {\n table: VTable.ListTable,\n raw_table: VTable.ListTable,\n\n pivot_table: VTable.PivotTable,\n trend_table: VTable.PivotTable,\n okr_table: VTable.PivotTable,\n\n combination: VTable.PivotChart,\n // 其他都是 PivotChart\n\n ListTable: VTable.ListTable,\n PivotTable: VTable.PivotTable,\n PivotChart: VTable.PivotChart\n};\n\nexport interface ITableConstructor {\n new (option: any): IVTable;\n}\n\nexport interface ITableGraphicAttribute {\n renderCanvas: HTMLCanvasElement;\n spec: any;\n // 表格类型\n tableType: string;\n // ClassType: any;\n TableConstructor?: ITableConstructor;\n dpr: number;\n interactive?: boolean;\n animation?: boolean;\n // 图表的初始化参数\n chartOption?: IInitOption;\n viewBox: IBoundsLike;\n ticker?: ITicker;\n autoRender?: boolean;\n enablePickBounds?: boolean;\n width: number;\n height: number;\n x?: number;\n y?: number;\n angle?: number;\n anchor?: [number, number];\n zIndex?: number;\n panel?: Partial;\n}\n\nexport const TABLE_NUMBER_TYPE = genNumberType();\n\nexport class VTableGraphic extends Rect {\n type: GraphicType = 'table' as any;\n declare attribute: ITableGraphicAttribute;\n protected _vTable: IVTable;\n\n get vTable() {\n return this._vTable;\n }\n get vTableStage(): IStage {\n return this._vTable.scenegraph.stage as IStage;\n }\n // vtable 的实际绘图绘制位置\n // 首先 vtable.stage 会根据 stage.window.viewBoxTransform 变换第一次,这一次变化包括了\n // 1. 全局stage的缩放;2. vtable-graphic 的位置定位;3. auto 模式下的自动偏移(这个等同于位置偏移)\n // 然后 vtable.stage.defaultLayer 会根据偏移量,将图表绘制内容再偏移回来\n // 来回2次偏移的目的是,让 vtable 内容超出原是viewBox的部分,可以正常被viewBox包含并绘制\n protected _vTableAutoTranslate: { x: number; y: number } = { x: 0, y: 0 };\n get vTableAutoTranslate() {\n return this._vTableAutoTranslate;\n }\n\n // 实际渲染图表内容的 bounds\n // 只在 auto 模式下生效\n protected _displayBounds: Bounds;\n\n doUpdateAABBBounds(full?: boolean): IAABBBounds {\n if (!this._displayBounds) {\n return super.doUpdateAABBBounds(full);\n }\n this.updateAABBBoundsStamp++;\n const graphicTheme = this.getGraphicTheme();\n const bounds = this._displayBounds.clone();\n transformBoundsWithMatrix(bounds, bounds, this.transMatrix);\n // @ts-ignore\n const { boundsPadding = graphicTheme.boundsPadding } = this.attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray as number);\n }\n this.clearUpdateBoundTag();\n this._AABBBounds.copy(bounds);\n return bounds;\n }\n\n constructor(params: ITableGraphicAttribute) {\n const { panel, zIndex, TableConstructor } = params;\n super({ ...(panel || {}), zIndex, visible: false });\n this.numberType = TABLE_NUMBER_TYPE;\n // 创建table\n this.attribute.viewBox = params.viewBox;\n const filledOption = this._createOption(params);\n this._vTable = new (TableConstructor ?? TableClass[params.tableType] ?? VTable.PivotChart)(filledOption);\n\n // 背景设置为false后,不会擦除画布内容,可以实现元素正常堆叠绘制\n const stage = this._vTable.scenegraph.stage;\n // TODO stage的pauseRender支持传入count\n (stage as any)._skipRender = -Infinity;\n this._vTable.render();\n if (stage) {\n stage.background = false as any;\n // 关闭交互\n // stage.pauseTriggerEvent();\n }\n stage.resumeRender();\n }\n\n private _createOption(params: ITableGraphicAttribute) {\n const filledOption = { ...params.spec };\n const viewBox = params.viewBox;\n filledOption.viewBox = this._transformViewBoxToZero(viewBox);\n filledOption.beforeRender = () => {\n if (!this._vTable) {\n return;\n }\n const tableStage = this._vTable.scenegraph.stage;\n if (!(tableStage as any)._story_needRender) {\n // @ts-ignore\n tableStage.pauseRender();\n\n this.stage.dirtyBounds?.union(this.globalAABBBounds);\n this.stage.renderNextFrame();\n }\n };\n filledOption.afterRender = () => {\n if (!this._vTable) {\n return;\n }\n // @ts-ignore\n this._vTable.scenegraph.stage._story_needRender = false;\n // @ts-ignore\n this._vTable.scenegraph.stage.resumeRender();\n };\n\n return filledOption;\n }\n\n private _transformViewBoxToZero(_viewBox: IBoundsLike) {\n const viewBox = { ..._viewBox };\n viewBox.x2 -= viewBox.x1;\n viewBox.y2 -= viewBox.y1;\n viewBox.x1 = 0;\n viewBox.y1 = 0;\n return viewBox;\n }\n\n /**\n * 判定点是否在设置 viewBox 内。设置 viewBox 会小于展示 bounds\n * @param canvasX\n * @param canvasY\n */\n pointInViewBox(canvasX: number, canvasY: number): boolean {\n const target = { x: 0, y: 0 };\n this.globalTransMatrix.transformPoint({ x: canvasX, y: canvasY }, target);\n return pointInAABB(target, this._vTable.scenegraph.stage.viewBox);\n }\n\n release() {\n this._vTable && this._vTable.release();\n super.release();\n }\n\n setAttribute(key: string, value: any) {\n if (key === 'viewBox') {\n super.setAttribute('x', value.x1);\n super.setAttribute('y', value.y1);\n this.updateVTableGraphicViewBox(value);\n } else {\n super.setAttribute(key, value);\n }\n }\n setAttributes(attrs: ITableGraphicAttribute) {\n const lastedViewBox = this.attribute.viewBox;\n super.setAttributes(attrs);\n if (attrs.viewBox) {\n this.attribute.viewBox = lastedViewBox;\n this.updateVTableGraphicViewBox(attrs.viewBox);\n }\n }\n\n /**\n * 获取 VTable 图形的实际边界。\n * 该方法通过遍历 VTable stage的默认图层中的所有子组,计算并返回它们的边界框。\n *\n * @returns {Bounds} 返回包含所有子组边界的 Bounds 对象。\n */\n getVTableActualBounds() {\n return this.attribute.viewBox;\n }\n\n updateVTableGraphicViewBox(bounds: IBoundsLike) {\n if (this.attribute.viewBox && isBoundsLikeEqual(this.attribute.viewBox, bounds)) {\n // 没有变化,不需要更新\n return;\n }\n // 先更新 viewBox\n this.attribute.viewBox = bounds;\n // 直接更新viewBox\n // @ts-ignore\n this._vTable.updateViewBox(this._transformViewBoxToZero(bounds));\n }\n}\n","import type {\n IContext2d,\n IDrawContext,\n IGraphicAttribute,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IMarkAttribute,\n IRenderService,\n IThemeAttribute\n} from '@visactor/vrender';\nimport { injectable, DefaultCanvasRectRender } from '@visactor/vrender';\nimport type { VTableGraphic } from './vtable-graphic';\nimport { TABLE_NUMBER_TYPE } from './vtable-graphic';\n\nexport const TableRender = Symbol.for('VStoryTableRender');\nexport const TableRenderContribution = Symbol.for('VStoryTableRenderContribution');\n\n@injectable()\nexport class VTableRender extends DefaultCanvasRectRender implements IGraphicRender {\n type: 'table';\n numberType: number = TABLE_NUMBER_TYPE;\n\n drawShape(\n table: any,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { baseOpacity = 1 } = table.attribute;\n if (baseOpacity <= 0) {\n return;\n }\n context.baseGlobalAlpha *= baseOpacity;\n super.drawShape(table, context, x, y, drawContext, params, fillCb, strokeCb);\n // TODO 考虑一个通用的ctx清理逻辑\n if (context._clearFilterStyle && context.nativeContext) {\n context.nativeContext.filter = 'blur(0px)';\n context._clearFilterStyle = false;\n }\n context.baseGlobalAlpha /= baseOpacity;\n const vTable = (table as VTableGraphic).vTable;\n const vTableStage = vTable.scenegraph.stage;\n const vTableCtx = vTableStage.window.getContext();\n vTableCtx.baseGlobalAlpha *= baseOpacity;\n // @ts-ignore\n vTableStage._story_needRender = true;\n const matrix = table.globalTransMatrix.clone();\n // auto 模式下,需要将vTable.stage的viewBoxTransform 设置到包含偏移量的位置\n matrix.translate(table.vTableAutoTranslate.x, table.vTableAutoTranslate.y);\n const stageMatrix = table.stage.window.getViewBoxTransform().clone();\n stageMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n // vTableStage.setViewBox();\n // @ts-ignore\n vTable.setViewBoxTransform(\n stageMatrix.a,\n stageMatrix.b,\n stageMatrix.c,\n stageMatrix.d,\n stageMatrix.e,\n stageMatrix.f\n );\n vTableStage.dirtyBounds?.clear();\n vTableStage.render();\n vTableCtx.baseGlobalAlpha /= baseOpacity;\n }\n\n draw(table: any, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n // const tableAttribute = getTheme(table, params?.theme).circle;\n this._draw(table, {} as any, false, drawContext, params);\n }\n}\n","import { injectable } from '@visactor/vrender';\nimport type { IGraphicPicker, IPickParams } from '@visactor/vrender';\nimport type { VTableGraphic } from './vtable-graphic';\nimport { TABLE_NUMBER_TYPE } from './vtable-graphic';\n\n@injectable()\nexport class VTablePicker implements IGraphicPicker {\n type = 'table';\n numberType: number = TABLE_NUMBER_TYPE;\n\n contains(table: any, point: any, params?: IPickParams): boolean | any {\n // 将当前的point转化到global\n const matrix = table.parent.globalTransMatrix.clone();\n const stageMatrix = table.stage.window.getViewBoxTransform();\n matrix.multiply(stageMatrix.a, stageMatrix.b, stageMatrix.c, stageMatrix.d, stageMatrix.e, stageMatrix.f);\n const toGlobalMatrix = matrix.getInverse();\n const nextP = { x: 0, y: 0 };\n toGlobalMatrix.transformPoint(point, nextP);\n\n // 得到 vtable stage\n const vTable = (table as VTableGraphic).vTable;\n const vtableStage = vTable.scenegraph.stage;\n vtableStage.dirtyBounds?.clear();\n const toTableMatrix = vtableStage.window.getViewBoxTransform();\n toTableMatrix.transformPoint(nextP, nextP);\n const pick = vtableStage.pick(nextP.x, nextP.y);\n // @ts-ignore\n if (pick.graphic === null && pick.group.name === 'root') {\n return false;\n }\n return pick;\n }\n}\n","import { container, ContainerModule, GraphicRender, PickServiceInterceptor } from '@visactor/vrender-core';\nimport { ChartRender, VChartRender } from '../character/chart/graphic/vchart-graphic-render';\nimport { VChartPicker } from '../character/chart/graphic/vchart-graphic-picker';\nimport { CanvasPickerContribution } from '@visactor/vrender-kits';\nimport { VChartPickServiceInterceptorContribution } from '../character/chart/graphic/picker-interceptor';\nimport { ComponentGroupRender } from '../character/component/graphic/GroupComponent/component-group-graphic-render';\nimport { TableRender, VTableRender } from '../character/table/graphic/vtable-graphic-render';\nimport { VTablePicker } from '../character/table/graphic/vtable-graphic-picker';\n\nexport function registerGraphics() {\n registerVChartGraphic();\n}\n\nlet _registered = false;\nexport function registerVChartGraphic() {\n if (_registered) {\n return;\n }\n _registered = true;\n const module = new ContainerModule(bind => {\n // vchart渲染器注入\n bind(VChartRender).toSelf().inSingletonScope();\n bind(ChartRender).toService(VChartRender);\n bind(GraphicRender).toService(ChartRender);\n\n bind(VChartPicker).toSelf().inSingletonScope();\n bind(CanvasPickerContribution).toService(VChartPicker);\n bind(VChartPickServiceInterceptorContribution).toSelf().inSingletonScope();\n bind(PickServiceInterceptor).toService(VChartPickServiceInterceptorContribution);\n\n // component渲染器注入\n bind(ComponentGroupRender).toSelf().inSingletonScope();\n bind(GraphicRender).toService(ComponentGroupRender);\n\n // vTable渲染器注入\n bind(VTableRender).toSelf().inSingletonScope();\n bind(TableRender).toService(VTableRender);\n bind(GraphicRender).toService(TableRender);\n\n bind(VTablePicker).toSelf().inSingletonScope();\n bind(CanvasPickerContribution).toService(VTablePicker);\n });\n\n container.load(module);\n}\n","import type { IRankingBarSpec } from './interface';\nimport type { ICartesianAxisSpec, ICommonChartSpec, ILabelSpec } from '@visactor/vchart';\nimport type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { BaseChartSpecTransformer } from '@visactor/vchart';\nimport { isValid, merge } from '@visactor/vutils';\n\nexport class RankingBarChartSpecTransformer extends BaseChartSpecTransformer {\n transformSpec(spec: T): void {\n const { timeData, timeNodes } = processData(spec as unknown as IRankingBarSpec);\n const {\n interval: userInterval,\n xField,\n yField,\n color,\n icon,\n iconPosition,\n iconShape,\n timeLabel,\n label,\n nameLabel,\n xAxis,\n yAxis,\n animationAppear,\n animationDisappear,\n animationEnter,\n animationExit,\n animationNormal,\n animationUpdate,\n player\n } = spec as unknown as IRankingBarSpec;\n\n const interval = userInterval ? userInterval : 1000;\n const exchangeDuration = Math.min(interval, 500);\n\n spec.type = 'common';\n spec.data = [\n {\n id: 'timeData',\n values: timeData.get(timeNodes[0])\n },\n {\n id: 'time',\n values: [{ time: timeNodes[0] }]\n }\n ];\n\n // @ts-ignore FIXME: type definition\n spec.color = {\n specified: {\n ...color\n }\n };\n spec.region = [{ clip: true }];\n spec.series = [\n {\n type: 'bar',\n id: 'ranking-bar',\n dataId: 'timeData',\n direction: 'horizontal',\n yField,\n xField,\n seriesField: yField,\n extensionMark: [],\n label: labelSpec(label, { ...nameLabel, yField }) as any\n }\n ];\n spec.axes = axisSpec(xAxis, yAxis);\n spec.player = merge(\n {\n type: 'continuous',\n auto: true,\n loop: false,\n interval,\n specs: timeNodes.map(time => ({\n data: [\n { id: 'timeData', values: timeData.get(time) },\n { id: 'time', values: [{ time }] }\n ]\n }))\n },\n player || {}\n );\n spec.tooltip = { visible: false };\n spec.customMark = [];\n\n transformAnimationSpec(spec, { interval, exchangeDuration });\n // 支持外部关闭animate\n if (animationAppear === false) {\n (spec as any).animationAppear = animationAppear;\n }\n if (animationDisappear === false) {\n (spec as any).animationDisappear = animationDisappear;\n }\n if (animationEnter === false) {\n (spec as any).animationEnter = animationEnter;\n }\n if (animationExit === false) {\n (spec as any).animationExit = animationExit;\n }\n if (animationNormal === false) {\n (spec as any).animationNormal = animationNormal;\n }\n if (animationUpdate === false) {\n (spec as any).animationUpdate = animationUpdate;\n }\n\n if (!timeLabel || timeLabel.visible !== false) {\n spec.customMark.push(timeLabelSpec(timeLabel.style) as any);\n }\n if (icon) {\n const icon = iconSpec(iconPosition, iconShape, { interval, exchangeDuration });\n spec.series[0].extensionMark.push(icon as any);\n }\n\n super.transformSpec(spec);\n }\n}\n\nexport function processData(spec: IRankingBarSpec) {\n const { xField, yField, timeField, data, topN = 10, icon } = spec;\n\n // 数据处理\n const timeNodes = new Set();\n const timeData = new Map();\n\n data.sort((d1, d2) => Number(d2[xField]) - Number(d1[xField]));\n\n data.forEach(d => {\n const time = d[timeField];\n if (isValid(time)) {\n timeNodes.add(time);\n }\n if (!timeData.has(time)) {\n timeData.set(time, []);\n }\n const currentData = timeData.get(time);\n if (currentData.length < topN) {\n const _d = { ...d };\n if (icon && icon[_d[yField]]) {\n _d['icon'] = icon[_d[yField]];\n }\n currentData.push(_d);\n }\n });\n\n return { timeData, timeNodes: Array.from(timeNodes).sort() };\n}\n\nfunction transformAnimationSpec(\n spec: ICommonChartSpec,\n { interval, exchangeDuration }: { interval: number; exchangeDuration: number }\n) {\n (spec as any).animationAppear = false;\n (spec as any).animationUpdate = {\n bar: [\n {\n type: 'update',\n options: { excludeChannels: ['y'] },\n easing: 'linear',\n duration: interval\n },\n {\n channel: ['y'],\n easing: 'circInOut',\n duration: exchangeDuration\n }\n ],\n axis: {\n duration: interval,\n easing: 'linear'\n }\n };\n (spec as any).animationEnter = {\n bar: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ]\n };\n (spec as any).animationExit = {\n bar: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction labelSpec(label: IRankingBarSpec['label'] = {}, nameLabel: IRankingBarSpec['nameLabel'] & { yField: string }) {\n const spec: ILabelSpec[] = [];\n\n if (label.visible !== false) {\n spec.push({\n visible: true,\n overlap: false,\n style: {\n // @ts-ignore\n fill: `rgb(64, 64, 64)`,\n ...label.style\n },\n smartInvert: {\n fillStrategy: label.style?.fill ? 'null' : undefined,\n strokeStrategy: label.style?.stroke ? 'null' : undefined\n }\n });\n }\n\n if (nameLabel.visible) {\n spec.push({\n visible: true,\n overlap: false,\n // @ts-ignore\n style: {\n ...nameLabel.style\n },\n smartInvert: {\n fillStrategy: nameLabel.style?.fill ? 'null' : undefined,\n strokeStrategy: nameLabel.style?.stroke ? 'null' : undefined\n },\n position: nameLabel.position === 'bar-end' ? 'inside-right' : 'inside-left',\n formatter: `{${nameLabel.yField}}`\n });\n }\n\n return spec;\n}\n\nfunction axisSpec(xAxis: IRankingBarSpec['xAxis'] = {}, yAxis: IRankingBarSpec['yAxis'] = {}) {\n const leftAxis: ICartesianAxisSpec = {\n orient: 'left',\n type: 'band',\n inverse: true,\n label: { style: yAxis.label },\n domainLine: { style: yAxis.domainLine },\n grid: { style: yAxis.grid }\n } as any;\n const bottomAxis: ICartesianAxisSpec = {\n orient: 'bottom',\n type: 'linear',\n nice: false,\n animation: true,\n label: { style: xAxis.label },\n domainLine: { style: xAxis.domainLine },\n grid: { style: xAxis.grid },\n innerOffset: { right: '10%' }\n } as any;\n\n if (xAxis.label) {\n bottomAxis.label = xAxis.label;\n }\n return [leftAxis, bottomAxis];\n}\n\nfunction timeLabelSpec(textStyle: ITextGraphicAttribute = {}) {\n return {\n type: 'text',\n dataId: 'time',\n style: {\n textBaseline: 'alphabetic',\n fontSize: 200,\n textAlign: 'end',\n fontWeight: 600,\n text: (datum: any) => datum.time,\n x: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getLayoutRect()?.width;\n },\n y: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getAllRegions()[0]?.getLayoutRect()?.height;\n },\n fill: 'grey',\n fillOpacity: 0.5,\n ...textStyle\n }\n };\n}\n\nfunction iconSpec(\n iconPosition: IRankingBarSpec['iconPosition'] = 'bar-end',\n iconShape: IRankingBarSpec['iconShape'] = 'circle',\n { interval, exchangeDuration }: any\n) {\n return {\n type: 'symbol',\n dataId: 'timeData',\n style: {\n symbolType: iconShape,\n stroke: 'white',\n lineWidth: 1,\n size: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return Math.max(bandwidth - 4, 0);\n }\n return 10;\n },\n background: (data: any) => data.icon,\n // globalZIndex 有bug,会有动画闪烁和报错\n // globalZIndex: 1, // 否则会被 region 区域 clip\n x: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n if (iconPosition === 'bar-start') {\n return bandwidth / 2;\n } else if (iconPosition === 'axis') {\n return -bandwidth / 2;\n } else {\n return series.dataToPositionX(data) - bandwidth / 2;\n }\n }\n return undefined;\n },\n y: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return series.dataToPositionY(data) + bandwidth / 2;\n }\n return undefined;\n },\n scaleY: iconShape === 'rect' ? 1.2 : 1\n },\n animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration),\n animationEnter: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ],\n animationExit: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction customMarkUpdateAnimation(duration: number, exchangeDuration: number) {\n return [\n {\n duration: exchangeDuration,\n easing: 'cubicInOut',\n channel: ['y']\n },\n {\n options: { excludeChannels: ['y'] },\n channel: ['x', 'x2', 'x1'],\n easing: 'linear',\n duration\n }\n ];\n}\n","import { IRankingBarSpec } from './interface';\nimport VChart, { BaseChart } from '@visactor/vchart';\nimport { RankingBarChartSpecTransformer } from './ranking-bar-transformer';\n\nexport class RankingBar extends BaseChart> {\n type = 'rankingBar';\n static type = 'rankingBar';\n static readonly view: string = 'singleDefault';\n\n declare _spec: IRankingBarSpec;\n\n static readonly transformerConstructor = RankingBarChartSpecTransformer;\n readonly transformerConstructor = RankingBarChartSpecTransformer;\n\n init() {\n if (!this.isValid()) {\n return;\n }\n super.init();\n }\n\n protected isValid() {\n const { xField, yField, timeField, data } = this._spec;\n if (!xField || !yField || !timeField) {\n this._option.onError?.('Missing Required Config: `xField`, `yField`, `timeField` ');\n return false;\n }\n if (!data) {\n this._option.onError?.('Data is required');\n return false;\n }\n return true;\n }\n}\n\nexport const registerRankingBarChart = (option?: { VChart?: typeof VChart }) => {\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([RankingBar]);\n }\n};\n","import { isNumber, isString, isValidNumber } from '@visactor/vutils';\nimport type { ModelSelector } from '../interface/dsl/chart';\n\nexport function isIDSelector(value: ModelSelector): value is `#${string}` {\n return isString(value) && value.startsWith('#');\n}\n\nexport function isSpecIndexSelector(value: ModelSelector): value is number | `${number}` {\n return isValidNumber(+value);\n}\n\nexport function validNumber(value: any) {\n return isValidNumber(value) ? value : null;\n}\n\nexport function foreachAllConstructor(instance: any, fn: (value: any, key: string) => void) {\n let currentProto = Object.getPrototypeOf(instance);\n while (currentProto) {\n const constructor = currentProto.constructor;\n if (constructor) {\n fn(constructor, currentProto);\n }\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\nexport function getAllStaticAttrs(instance: any, key: string): Record {\n const allAttrs: Record = {};\n foreachAllConstructor(instance, (constructor, _currentProto) => {\n if (constructor && constructor[key]) {\n Object.assign(allAttrs, constructor[key]);\n }\n });\n return allAttrs;\n}\n","const repeat = (str: string | number, repeatCount: number = 0) => {\n let s = '';\n let i = repeatCount - 1;\n while (i >= 0) {\n s = `${s}${str}`;\n i -= 1;\n }\n return s;\n};\n\n/**\n * Pads `string` on the left and right, left or right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * pad('abc', 8)\n * // => ' abc '\n *\n * pad('abc', 8, '_-')\n * // => '_-abc_-_'\n *\n * pad('abc', 2)\n * // => 'abc'\n */\nconst pad = (str: string | number, length: number, padChar: string = ' ', align: string = 'right') => {\n const c = padChar;\n const s = str + '';\n const n = length - s.length;\n\n if (n <= 0) {\n return s;\n }\n\n if (align === 'left') {\n return repeat(c, n) + s;\n }\n\n return align === 'center' ? repeat(c, Math.floor(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n};\n\nexport default pad;\n","import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\n // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n","import pad from '../common/pad';\nimport type { DateLikeType } from '../common/toDate';\nimport { toDate } from '../common/toDate';\n\nexport function fullYearGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCFullYear' : 'getFullYear';\n}\n\nexport function monthGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMonth' : 'getMonth';\n}\n\nexport function dateGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCDate' : 'getDate';\n}\n\nexport function hoursGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCHours' : 'getHours';\n}\n\nexport function minutesGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMinutes' : 'getMinutes';\n}\n\nexport function secondsGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCSeconds' : 'getSeconds';\n}\n\nexport function millisecondsGetterName(isUTC?: boolean) {\n return isUTC ? 'getUTCMilliseconds' : 'getMilliseconds';\n}\n\nexport function fullYearSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCFullYear' : 'setFullYear';\n}\n\nexport function monthSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMonth' : 'setMonth';\n}\n\nexport function dateSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCDate' : 'setDate';\n}\n\nexport function hoursSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCHours' : 'setHours';\n}\n\nexport function minutesSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMinutes' : 'setMinutes';\n}\n\nexport function secondsSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCSeconds' : 'setSeconds';\n}\n\nexport function millisecondsSetterName(isUTC?: boolean) {\n return isUTC ? 'setUTCMilliseconds' : 'setMilliseconds';\n}\n\n/**\n * 根据时间推断格式化字符串\n * @param value\n * @param isUTC\n * @returns\n */\nexport function getFormatFromValue(value: DateLikeType, isUTC?: boolean) {\n const date = toDate(value);\n const M = (date as any)[monthGetterName(isUTC)]() + 1;\n const d = (date as any)[dateGetterName(isUTC)]();\n const h = (date as any)[hoursGetterName(isUTC)]();\n const m = (date as any)[minutesGetterName(isUTC)]();\n const s = (date as any)[secondsGetterName(isUTC)]();\n const S = (date as any)[millisecondsGetterName(isUTC)]();\n\n const isSecond = S === 0;\n const isMinute = isSecond && s === 0;\n const isHour = isMinute && m === 0;\n const isDay = isHour && h === 0;\n const isMonth = isDay && d === 1;\n const isYear = isMonth && M === 1;\n\n if (isYear) {\n return 'YYYY';\n } else if (isMonth) {\n return 'YYYY-MM';\n } else if (isDay) {\n return 'YYYY-MM-DD';\n } else if (isHour) {\n return 'HH';\n } else if (isMinute) {\n return 'HH:mm';\n } else if (isSecond) {\n return 'HH:mm:ss';\n }\n return 'HH:mm:ss SSS';\n}\n\nexport function getTimeFormatter(template: string, isUTC?: boolean) {\n return (time: DateLikeType) => {\n const date = toDate(time);\n const y = date[fullYearGetterName(isUTC)]();\n const M = date[monthGetterName(isUTC)]() + 1;\n const q = Math.floor((M - 1) / 3) + 1;\n const d = date[dateGetterName(isUTC)]();\n const e = date[('get' + (isUTC ? 'UTC' : '') + 'Day') as 'getDay' | 'getUTCDay']();\n const H = date[hoursGetterName(isUTC)]();\n const h = ((H - 1) % 12) + 1;\n const m = date[minutesGetterName(isUTC)]();\n const s = date[secondsGetterName(isUTC)]();\n const S = date[millisecondsGetterName(isUTC)]();\n\n // 月份,周等需要管理管理locale的时间格式化暂时不支持\n return (\n (template || '')\n .replace(/YYYY/g, pad(y + '', 4, '0', 'left'))\n .replace(/yyyy/g, y + '')\n .replace(/yy/g, (y % 100) + '')\n .replace(/Q/g, q + '')\n // .replace(/{MMMM}/g, month[M - 1])\n // .replace(/{MMM}/g, monthAbbr[M - 1])\n .replace(/MM/g, pad(M, 2, '0', 'left'))\n .replace(/M/g, M + '')\n .replace(/dd/g, pad(d, 2, '0', 'left'))\n .replace(/d/g, d + '')\n // .replace(/{eeee}/g, dayOfWeek[e])\n // .replace(/{ee}/g, dayOfWeekAbbr[e])\n .replace(/e/g, e + '')\n .replace(/HH/g, pad(H, 2, '0', 'left'))\n .replace(/H/g, H + '')\n .replace(/hh/g, pad(h + '', 2, '0', 'left'))\n .replace(/h/g, h + '')\n .replace(/mm/g, pad(m, 2, '0', 'left'))\n .replace(/m/g, m + '')\n .replace(/ss/g, pad(s, 2, '0', 'left'))\n .replace(/s/g, s + '')\n .replace(/SSS/g, pad(S, 3, '0', 'left'))\n .replace(/S/g, S + '')\n );\n };\n}\n","import type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { Unit } from '../../../constants/format';\nimport { DataFormatUnit, unionContentTypeMap } from '../../../constants/format';\nimport { isArray, isNil, isString } from '@visactor/vutils/es/common';\nimport { getTimeFormatter, isValidNumber } from '@visactor/vutils';\n\nexport type FormatValueFunction = (\n content: FormatContentType,\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) => string;\n\n// if (formatConfig.unit === 'CN_K') {\n// unit = { ratio: 1000, symbol: '千' };\n// } else if (formatConfig.unit === 'CN_W') {\n// unit = { ratio: 10000, symbol: '万' };\n// } else if (formatConfig.unit === 'CN_BW') {\n// unit = { ratio: 1000000, symbol: '百万' };\n// } else if (formatConfig.unit === 'CN_QW') {\n// unit = { ratio: 10000000, symbol: '千万' };\n// } else if (formatConfig.unit === 'CN_Y') {\n// unit = { ratio: 1e8, symbol: '亿' };\n// } else if (formatConfig.unit === 'K') {\n// unit = { ratio: 1e3, symbol: 'K' };\n// } else if (formatConfig.unit === 'M') {\n// unit = { ratio: 1e6, symbol: 'M' };\n// } else if (formatConfig.unit === 'B') {\n// unit = { ratio: 1e9, symbol: 'B' };\n// }\nexport const UnitMap: { [key in IFormatConfig['unit']]?: Unit } = {\n CN_K: { ratio: 1000, symbol: '千' },\n CN_W: { ratio: 10000, symbol: '万' },\n CN_BW: { ratio: 1000000, symbol: '百万' },\n CN_QW: { ratio: 10000000, symbol: '千万' },\n CN_Y: { ratio: 1e8, symbol: '亿' },\n K: { ratio: 1e3, symbol: 'K' },\n M: { ratio: 1e6, symbol: 'M' },\n B: { ratio: 1e9, symbol: 'B' }\n};\n\nexport type getContentValueFunction = (opt: any, content: FormatContentType) => string;\n\nexport function textFormatWithFix(text: string, config: { prefix?: string; postfix?: string }) {\n return normalizeFormatResult(`${config.prefix ?? ''}${text}${config.postfix ?? ''}`.split('\\n'));\n}\nexport function normalizeFormatResult(str: string | string[]): string | string[] {\n if (isArray(str)) {\n if (str.length === 0) {\n return '';\n }\n // extract string from array to make sure that the render result of [str] and str is same\n if (str.length === 1) {\n return str[0];\n }\n return str;\n }\n return str;\n}\n\nexport function formatValue(\n content: FormatContentType,\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) {\n if (content === 'date') {\n return formatDate(value, formatConfig, language, percentage);\n }\n if (content === 'text') {\n return value;\n }\n return formatNumber(value, formatConfig, language, percentage);\n}\n\nexport function formatDate(\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n) {\n return getTimeFormatter(formatConfig.dateFormat)(`${value}`);\n}\n\nexport function formatNumber(\n value: number | string,\n formatConfig: IFormatConfig,\n language: string,\n percentage?: boolean\n): string | number {\n // 字符串类型的处理\n if (value && isString(value) && !isValidNumber(+value)) {\n return value;\n }\n\n if (Number.isNaN(value) || isNil(value) || value === '') {\n return '';\n }\n\n // 先计算 unit\n let unit: Unit;\n // 优先百分比和千分比\n if (formatConfig.dataType === 'percent') {\n unit = { ratio: 1e-2, symbol: '%' };\n } else if (formatConfig.dataType === 'permil') {\n unit = { ratio: 1e-3, symbol: '‰' };\n } else if (formatConfig.unit === 'auto') {\n unit = getNumFormatAuto(\n value,\n language.includes('zh') ? DataFormatUnit.ZH_CN : DataFormatUnit.EN_US,\n language as 'zh_CN' | 'en_US'\n );\n } else {\n // 使用固定匹配\n unit = UnitMap[formatConfig.unit] ?? { ratio: 0, symbol: '' };\n }\n\n // 处理缩放 考虑超大数值的字符串场景\n if (typeof value === 'string') {\n const [integerPart, decimalPart = ''] = value.split('.');\n const combinedNumber = integerPart + decimalPart;\n const decimalShift = decimalPart.length - unit.ratio;\n\n // 计算缩放后的整数和小数部分\n if (decimalShift > 0) {\n value = combinedNumber.slice(0, decimalShift) + '.' + combinedNumber.slice(decimalShift);\n } else {\n value = combinedNumber + '0'.repeat(-decimalShift);\n }\n } else {\n value *= Math.pow(10, unit.ratio);\n value = value.toString();\n }\n\n // 分割整数部分和小数部分\n const [integerPart, decimalPart = ''] = value.toString().split('.');\n\n // 使用正则表达式添加千位分隔符\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n let formattedDecimalPart = '';\n\n if (formatConfig.fixed !== undefined && formatConfig.fixed !== 'auto') {\n // 如果提供了fixed值,则格式化小数部分\n const roundedNumber = parseFloat(`0.${decimalPart}`).toFixed(formatConfig.fixed);\n formattedDecimalPart = roundedNumber.split('.')[1];\n } else if (decimalPart) {\n // 如果没有提供fixed值,且原始数字有小数部分\n formattedDecimalPart = decimalPart;\n }\n\n // 拼接整数部分和小数部分\n const numberString = formattedDecimalPart ? `${formattedIntegerPart}.${formattedDecimalPart}` : formattedIntegerPart;\n return `${numberString}${unit.symbol}${percentage ? '%' : ''}`;\n}\n\n/**\n * unit = auto 时,获取当前合适的 unit\n * @param value\n * @param dataFormatUnit\n * @param lang\n * @returns\n */\nfunction getNumFormatAuto(\n value: number | string,\n dataFormatUnit?: `${DataFormatUnit}`,\n lang?: 'zh_CN' | 'en_US'\n): { ratio: number; symbol: string } {\n // TODO: i18N\n const locale = isNil(dataFormatUnit) || dataFormatUnit === 'auto' ? lang ?? 'zh_CN' : dataFormatUnit;\n const valueAbs = Math.abs(Number(value));\n switch (locale) {\n case 'zh_CN':\n if (valueAbs >= 1e8) {\n return { ratio: 1e8, symbol: '亿' };\n }\n\n if (valueAbs >= 1e4) {\n return { ratio: 1e4, symbol: '万' };\n }\n break;\n case 'en_US':\n if (valueAbs >= 1e9) {\n return { ratio: 1e9, symbol: 'B' };\n }\n if (valueAbs >= 1e6) {\n return { ratio: 1e6, symbol: 'M' };\n }\n if (valueAbs >= 1e3) {\n return { ratio: 1e3, symbol: 'K' };\n }\n break;\n }\n return { ratio: 1, symbol: '' };\n}\n\n// 得到标签经过 format 处理后的值\nexport function getTextWithFormat(\n formatConfig: IFormatConfig,\n formatContents: FormatContentType[],\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt?: any\n) {\n // 得到每一个 content 的内容\n const contentLabels = (formatContents.length === 0 ? (['value'] as FormatContentType[]) : formatContents).map(\n content => {\n return getLabelContentWithUnion(formatConfig, content, getContentValue, formatValue, opt);\n }\n );\n // 拼接\n const labelText: string = contentLabels.join(!!formatConfig.contentWrap ? '\\n' : ' ');\n\n // 最后添加前后缀\n return textFormatWithFix(labelText, formatConfig);\n}\n\n// 得到标签一个 content 的 format 值,含复合类型\nexport function getLabelContentWithUnion(\n formatConfig: IFormatConfig,\n content: FormatContentType,\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt: any\n) {\n if (unionContentTypeMap[content]) {\n const matchResult = content.match(/(.*)\\((.*)\\)/);\n const firstContent = matchResult[1] as FormatContentType;\n const secondContent = matchResult[2] as FormatContentType;\n return `${getLabelContent(formatConfig, firstContent, getContentValue, formatValue, opt)}(${getLabelContent(\n formatConfig,\n secondContent,\n getContentValue,\n formatValue,\n opt\n )})`;\n }\n return getLabelContent(formatConfig, content, getContentValue, formatValue, opt);\n}\n\n// 得到标签一个 content 的 format 值\nexport function getLabelContent(\n formatConfig: IFormatConfig,\n content: FormatContentType,\n getContentValue: getContentValueFunction,\n formatValue: FormatValueFunction,\n opt: any\n): string {\n const datumValue = getContentValue(opt, content);\n // number / date 类型的数值处理\n const labelContent = formatValue(\n content,\n datumValue,\n formatConfig,\n // TODO: i18n\n 'chinese',\n content === 'percentage' || content === 'CAGR' || content === 'percentdiff'\n );\n return labelContent as string;\n}\n","import { formatValue } from '../../character/common/utils/format';\nimport type { ITheme } from '../interface';\n\nexport const DefaultTheme: {\n name: string;\n theme: ITheme;\n} = {\n name: 'default',\n theme: {\n character: {\n Table: {\n runtime: {\n list: [\n 'CommonLayout',\n 'TableType',\n 'TableCommonSpec',\n 'TableTheme',\n 'ShowHeader',\n 'ColWidth',\n 'RowHeight',\n 'ColVisible',\n 'RowVisible',\n 'ColStyle',\n 'RowStyle',\n 'ContentColStyle',\n 'ContentRowStyle',\n 'CellStyle'\n ]\n }\n },\n PivotChart: {\n runtime: {\n list: []\n }\n },\n Chart: {\n runtime: {\n list: ['ChartCommonSpec', 'CommonLayout', 'MarkStyle', 'LabelStyle', 'TotalLabel'],\n functions: {\n formatValue: formatValue\n }\n }\n },\n VTable: {\n runtime: {\n list: []\n }\n },\n VChart: {\n runtime: {\n list: [],\n functions: {\n formatValue: formatValue\n }\n }\n },\n RankingBar: {\n runtime: {\n list: ['RankingBar']\n }\n },\n ScatterBar: {\n runtime: {\n list: []\n }\n },\n WaveScatter: {\n runtime: {\n list: ['WaveScatter']\n }\n },\n Text: {\n runtime: {\n list: ['Text']\n }\n },\n Line: {\n runtime: {\n list: ['BaseGraphic', 'Line']\n }\n },\n Arc: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Polygon: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Timeline: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Unit: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Rect: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Shape: {\n runtime: {\n list: ['BaseGraphic']\n }\n },\n Image: {\n runtime: {\n list: ['BaseGraphic']\n }\n }\n }\n }\n};\n","import type { Dict } from '@visactor/vutils';\nimport { isString } from '@visactor/vutils';\n\nexport function getThemeAttribute(obj: Dict, path: string | string[]): any {\n if (!obj) {\n return undefined;\n }\n const paths = isString(path) ? (path as string).split('.') : path;\n\n for (let p = 0; p < paths.length; p++) {\n obj = obj ? obj[paths[p]] : undefined;\n if (!obj) {\n return undefined;\n }\n }\n return obj;\n}\n","import { isString } from '@visactor/vutils';\n\nexport default class CommonStore {\n private _store: { [key: string]: T } = {};\n get(key: string) {\n return this._store[key];\n }\n\n register(key: string, v: T): void;\n register(v: T): void;\n register(keyOrValue: string | T, v?: T): void {\n let key: string = keyOrValue as string;\n if (!isString(keyOrValue)) {\n key = keyOrValue.type;\n v = keyOrValue;\n }\n\n if (this._store[key]) {\n console.warn(`${key} already exists in ${this.constructor.name}, will be overwritten`);\n }\n this._store[key] = v;\n }\n\n getList(enableMap: { [key: string]: boolean }, keyList: string[] = []) {\n const result: T[] = [];\n const enableKeyMap: { [key: string]: boolean } = {};\n // 先处理 keyList 中的 key\n keyList.forEach(key => {\n // 如果 keyList 中的 key 在 enableMap 中设置为 false 不添加\n if (enableMap[key] !== false && this._store[key]) {\n result.push(this._store[key]);\n enableKeyMap[key] = true;\n }\n });\n // 再处理 enableMap 中的 key\n Object.keys(enableMap).forEach(key => {\n if (enableMap[key] && this._store[key] && !enableKeyMap[key]) {\n result.push(this._store[key]);\n }\n });\n return result;\n }\n\n getKeyList(enableMap: { [key: string]: boolean }, keyList: string[] = []) {\n const enableKeyMap: { [key: string]: boolean } = {};\n // 先处理 keyList 中的 key\n keyList.forEach(key => {\n // 如果 keyList 中的 key 在 enableMap 中设置为 false 不添加\n if (enableMap[key] !== false && this._store[key]) {\n enableKeyMap[key] = true;\n }\n });\n // 再处理 enableMap 中的 key\n Object.keys(enableMap).forEach(key => {\n if (enableMap[key] && !enableKeyMap[key]) {\n enableKeyMap[key] = true;\n }\n });\n return Object.keys(enableMap);\n }\n}\n","import type { IChartCharacterRuntime } from '../character/chart/interface/runtime';\nimport type { IComponentCharacterRuntime } from '../character/component/interface/runtime';\nimport type { ITableCharacterRuntime } from '../character/table/interface/runtime';\nimport CommonStore from './common-store';\n\nexport class RuntimeStoreClass extends CommonStore<\n IChartCharacterRuntime | ITableCharacterRuntime | IComponentCharacterRuntime\n> {}\n","export const Events = {\n BEFORE_SET_CONFIG: 'beforeSetConfig',\n AFTER_SET_CONFIG: 'afterSetConfig'\n};\n","import type { ICharacterRuntimeConfig, ILayoutLine } from './../interface/character';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { Generator } from '@visactor/vrender-core';\nimport type { ICharacter } from '../interface/character';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../interface/dsl/dsl';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport type { ICharacterPickInfo, IStoryEvent } from '../interface/event';\nimport type { IStory } from '../interface/story';\nimport type { IStoryCanvas } from '../interface/canvas';\nimport type { IConfigProcess } from './config-transform/interface';\nimport { getLayoutLine } from '../utils/layout';\nimport { foreachAllConstructor } from '../utils/type';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { RuntimeStore } from '../store';\nimport { Events } from '../constants/events';\n\nexport abstract class CharacterBase implements ICharacter {\n readonly id: string;\n declare readonly visActorType: 'chart' | 'component' | 'table' | 'common';\n readonly type: string;\n protected declare _config: ICharacterConfig;\n protected declare _graphic: IGraphic;\n protected _story: IStory;\n protected _canvas: IStoryCanvas;\n declare configProcess: IConfigProcess;\n declare _attribute: T;\n protected declare _runtime: { type: string }[];\n // 是否锁定,不可被编辑\n declare locked?: boolean;\n // declare attributeProcess: IAttributeProcess;\n\n get config() {\n return this._config;\n }\n get graphic() {\n return this._graphic;\n }\n\n get story() {\n return this._story;\n }\n\n get canvas() {\n return this._canvas;\n }\n\n get theme() {\n return this._config.theme;\n }\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n this.id = config.id ?? `c_${Generator.GenAutoIncrementId()}`;\n this.type = config.type;\n this._config = config;\n this._story = option.story;\n this._canvas = option.canvas;\n }\n\n setConfig(\n config: Partial,\n params: {\n forceMergeOption?: boolean;\n mode?: number;\n } = {}\n ) {\n const { forceMergeOption = true } = params;\n this.story.emit(Events.BEFORE_SET_CONFIG, { config, character: this, params });\n if (!forceMergeOption) {\n const { options, ...rest } = config;\n this.configProcess.updateConfig(rest, config, this._config);\n this._config.options = options;\n this.applyConfigToAttribute(config, this._config);\n } else {\n const diffConfig = this.diffConfig(config);\n this.configProcess.updateConfig(diffConfig, config, this._config);\n this.applyConfigToAttribute(diffConfig, this._config);\n }\n this._setAttributes(this._attribute);\n this.story.emit(Events.AFTER_SET_CONFIG, { config, character: this, params });\n }\n\n init(): void {\n this._initRuntime();\n this._initGraphic();\n }\n\n abstract tickTo(t: number): void;\n\n toDSL(): ICharacterConfig {\n return cloneDeep(this._config);\n }\n\n getGraphic() {\n return this._graphic;\n }\n\n show(): void {\n this._graphic.setAttribute('visible', true);\n }\n hide(): void {\n this._graphic.setAttribute('visible', false);\n }\n\n abstract checkEvent(event: IStoryEvent): false | ICharacterPickInfo;\n release() {\n this.clearCharacter();\n }\n\n reset() {\n this.clearCharacter();\n this.init();\n }\n\n diffConfig(config: IUpdateConfigParams): IUpdateConfigParams {\n return config;\n }\n\n protected clearCharacter() {\n this._clearRuntime();\n this._clearGraphic();\n }\n\n protected _clearGraphic(): void {\n // 卸载group,卸载graphic和text\n this._graphic.release();\n this.canvas.removeGraphic(this._graphic);\n this._graphic = null;\n }\n\n protected abstract getDefaultAttribute(): Partial;\n getAttribute() {\n return this._attribute;\n }\n getRuntimeConfig() {\n return this as ICharacterRuntimeConfig;\n }\n\n getLayoutGuideLine(): ILayoutLine[] {\n const bounds = this._graphic.AABBBounds;\n return getLayoutLine(bounds, {\n id: this.id\n });\n }\n\n protected _initRuntime(): void {\n const keyMap: Record = {};\n const themeRuntimeKeyList: string[] = [];\n const tempKeyMap: Record = {};\n foreachAllConstructor(this, (constructor, _currentProto) => {\n if (constructor && constructor.RuntimeMap) {\n Object.assign(keyMap, constructor.RuntimeMap);\n }\n const runtimeList = ThemeManager.getAttribute(\n [this.theme, this.story.theme],\n `character.${constructor.type}.runtime.list`\n );\n if (isArray(runtimeList)) {\n const tempList: string[] = [];\n runtimeList.forEach(r => {\n if (!tempKeyMap[r]) {\n tempKeyMap[r] = true;\n tempList.push(r);\n }\n });\n themeRuntimeKeyList.splice(0, 0, ...tempList);\n }\n });\n\n this._runtime = RuntimeStore.getList(keyMap, themeRuntimeKeyList);\n }\n\n protected abstract applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void;\n protected abstract _clearRuntime(): void;\n protected abstract _initGraphic(): void;\n\n protected _setAttributes(attr: T): void {\n this._graphic.setAttributes(attr);\n }\n}\n","import type { IGraphic, IGraphicAttribute } from '@visactor/vrender';\nimport type { IVChart } from '@visactor/vchart';\nimport type { IStoryEvent } from '../../../interface/event';\n\nexport interface IPickModelInfo {\n type: string;\n model: any;\n specKey: string;\n specIndex: number;\n datum?: any;\n mark?: any;\n}\n\nfunction commonModelInfo(model: any) {\n return {\n type: model.type,\n model,\n specKey: model.specKey,\n specIndex: model.getSpecIndex()\n };\n}\n\nexport const seriesMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name?.startsWith('seriesGroup_');\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const nameInfo = graphic.name.split('_');\n const seriesId = +nameInfo[2];\n let markId = null;\n for (let i = index + 1; i < graphicPath.length; i++) {\n const markGraphic = graphicPath[i];\n const tempInfo = markGraphic.name.split('_');\n if (tempInfo[0] === 'group') {\n continue;\n }\n markId = +tempInfo[1];\n break;\n }\n if (markId === null) {\n return null;\n }\n const series = chart.getChart().getSeriesInIds([seriesId])[0];\n const datum = graphicPath[graphicPath.length - 1].__vgrammar_scene_item__.data;\n return {\n type: 'seriesMark',\n model: series,\n mark: series.getMarkInId(markId),\n specKey: series.specKey,\n specIndex: series.getSpecIndex(),\n datum\n };\n }\n};\n\nexport const axisMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name === 'axis' || graphic.name === 'axis-grid';\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const axisModel = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .filter(c => c.specKey === 'axes');\n let axisGraphic = graphicPath.find(g => g.name === 'axis');\n if (axisGraphic) {\n // @ts-ignore\n const axis = axisModel.find(a => a._axisMark && a._axisMark.getProduct().graphicItem === axisGraphic.parent);\n if (axis) {\n return commonModelInfo(axis);\n }\n }\n axisGraphic = graphicPath.find(g => g.name === 'axis-grid');\n if (axisGraphic) {\n // @ts-ignore\n const axis = axisModel.find(a => a._gridMark && a._gridMark.getProduct().graphicItem === axisGraphic.parent);\n if (axis) {\n return commonModelInfo(axis);\n }\n }\n return null;\n }\n};\n\nconst MarkerClassName: { [key: string]: boolean } = {\n MarkLine: true,\n MarkArea: true,\n MarkPoint: true,\n MarkArcLine: true,\n MarkArcArea: true\n};\n\nconst MarkerIdPrefix: { [key: string]: boolean } = {\n markPoint: true,\n markLine: true,\n markArea: true\n};\n\nexport const markerMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return !!MarkerClassName[graphic.constructor.name];\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[]) => {\n const split = (graphic.id).split('-');\n const idPrefix = split[0];\n let model;\n if (MarkerIdPrefix[idPrefix]) {\n const markerId = +(graphic.id).split('-')[1];\n model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.id === markerId);\n } else {\n const markerUserId = graphic.id;\n model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.userId === markerUserId);\n }\n return commonModelInfo(model);\n }\n};\n\nexport const labelMarkPick = {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.name === 'data-label';\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n const id = +graphicPath[index - 1].name.split('_')[1];\n const model = chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => {\n if (c.type !== 'label' && c.type !== 'totalLabel') {\n return false;\n }\n return c.getMarks().some(m => m.id === id);\n });\n // @ts-ignore\n return { ...commonModelInfo(model), datum: graphicPath[graphicPath.length - 1].attribute.data };\n }\n};\n\nfunction commonModePick(vrenderGraphicClassName: string, modelName: string) {\n return {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => {\n return graphic.constructor.name === vrenderGraphicClassName;\n },\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => {\n return commonModelInfo(\n chart\n .getChart()\n .getAllComponents()\n // @ts-ignore\n .find(c => c.type === modelName)\n );\n }\n };\n}\n\nexport const discreteLegendMarkPick = commonModePick('DiscreteLegend', 'discreteLegend');\nexport const colorLegendMarkPick = commonModePick('ColorContinuousLegend', 'colorLegend');\nexport const sizeLegendMarkPick = commonModePick('SizeContinuousLegend', 'sizeLegend');\nexport const scrollBarMarkPick = commonModePick('ScrollBar', 'scrollBar');\nexport const titleBarMarkPick = commonModePick('Title', 'title');\nexport const continuousPlayerMarkPick = commonModePick('ContinuousPlayer', 'player');\nexport const discretePlayerMarkPick = commonModePick('DiscretePlayer', 'player');\n\nconst modelCheck: {\n check: (graphic: IGraphic, graphicPath: IGraphic[]) => boolean;\n modelInfo: (chart: IVChart, graphic: IGraphic, graphicPath: IGraphic[], index: number) => any;\n}[] = [\n seriesMarkPick,\n axisMarkPick,\n discreteLegendMarkPick,\n colorLegendMarkPick,\n sizeLegendMarkPick,\n markerMarkPick,\n scrollBarMarkPick,\n labelMarkPick,\n titleBarMarkPick,\n continuousPlayerMarkPick,\n discretePlayerMarkPick\n];\n\n/**\n * 从event属性上,读取当前pick到的图表模块内容\n * @param event\n */\nexport function getChartModelWithEvent(chart: IVChart, event: IStoryEvent) {\n const graphicPath = event.detailPath[event.detailPath.length - 1] as unknown as IGraphic<\n Partial\n >[];\n if (!graphicPath) {\n return null;\n }\n const pickGraphic = graphicPath?.[graphicPath.length - 1];\n if (!pickGraphic) {\n return null;\n }\n return getGraphicModelMark(chart, pickGraphic, graphicPath, 0);\n}\n\nexport function getGraphicModelMark(\n chart: IVChart,\n graphic: IGraphic,\n graphicPath: IGraphic[],\n index: number\n): IPickModelInfo {\n if (!graphic) {\n return null;\n }\n if (graphic.layer !== chart.getStage().defaultLayer) {\n return null;\n }\n const modelPick = modelCheck.find(mc => mc.check(graphic, graphicPath));\n if (modelPick) {\n return modelPick.modelInfo(chart, graphic, graphicPath, index);\n }\n // @ts-ignore\n if (index >= graphicPath.length - 1) {\n return null;\n }\n\n return getGraphicModelMark(chart, graphicPath[index + 1], graphicPath, index + 1);\n}\n","// 设置属性的时候,如果是DeletedAttr,则表示删除该属性\nexport const DeletedAttr = Symbol('DeletedAttr');\n\nexport const VSTORY_PREFIX = '__VSTORY';\n","import { isArray, isObject } from '@visactor/vutils';\nimport { DeletedAttr } from '../constants/config';\n\n/**\n * 深拷贝对象,如果属性是DeletedAttr,则表示删除该属性\n * 数组的话,会直接替换\n * @param target\n * @param source\n * @returns\n */\nexport function deepMergeWithDeletedAttr(target: T, source: Partial): T {\n // 遍历 source 对象的每一个属性\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n const targetValue = target[key];\n const sourceValue = source[key];\n if (sourceValue === DeletedAttr) {\n delete target[key];\n continue;\n }\n if (isArray(targetValue) && isArray(sourceValue)) {\n // 如果都是数组,也直接赋值\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n // 如果 sourceValue 是对象且 targetValue 也是对象,进行递归合并\n target[key] = deepMergeWithDeletedAttr(targetValue, sourceValue);\n } else {\n // 否则直接赋值\n target[key] = sourceValue;\n }\n }\n }\n return target;\n}\n","import { cloneDeep, isValid, merge } from '@visactor/vutils';\nimport type { ICharacter } from '../../interface/character';\nimport { deepMergeWithDeletedAttr } from '../../utils/merge';\nimport type { IConfigProcess } from './interface';\nimport type { IUpdateConfigParams } from '../../interface/dsl/dsl';\n\nexport class ConfigProcessBase implements IConfigProcess {\n protected _character: ICharacter;\n\n constructor(character: ICharacter) {\n this._character = character;\n }\n\n checkEnable(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams) {\n return true;\n }\n\n updateConfig(\n diffConfig: IUpdateConfigParams,\n config: IUpdateConfigParams,\n targetConfig: IUpdateConfigParams\n ): boolean {\n // 先合并到临时对象\n const nextTargetConfig = cloneDeep(targetConfig);\n this.mergeConfig(diffConfig, config, nextTargetConfig);\n // 判定是否合法,如果合法,就完成合并\n if (this.checkEnable(diffConfig, targetConfig)) {\n merge(targetConfig, nextTargetConfig);\n return true;\n }\n return false;\n }\n\n protected mergeConfig(\n diffConfig: IUpdateConfigParams,\n config: IUpdateConfigParams,\n targetConfig: IUpdateConfigParams\n ) {\n const { position, zIndex, options } = diffConfig;\n if (position) {\n targetConfig.position = position;\n }\n if (isValid(zIndex)) {\n targetConfig.zIndex = zIndex;\n }\n if (options) {\n targetConfig.options = deepMergeWithDeletedAttr(\n targetConfig.options ?? ({} as typeof targetConfig.options),\n options\n );\n }\n return true;\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class ChartConfigProcess extends ConfigProcessBase {}\n","import type { ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTimeline, ManualTicker } from '@visactor/vrender-core';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../interface/event';\nimport { CharacterBase } from '../character-base';\nimport type { IChartGraphicAttribute } from './graphic/vchart-graphic';\nimport { VChartGraphic } from './graphic/vchart-graphic';\nimport { getChartModelWithEvent } from './utils/vchart-pick';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport type { IChartCharacterConfig } from '../../interface/dsl/chart';\nimport { getLayoutFromWidget } from '../../utils/layout';\nimport type { IChartCharacterRuntime } from './interface/runtime';\nimport { ChartConfigProcess } from './chart-config-process';\nimport type { ICharacterChart } from './interface/character-chart';\nimport { mergeChartOption } from '../../utils/chart';\nimport type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { isArray } from '@visactor/vutils';\n\nexport class CharacterChart\n extends CharacterBase\n implements ICharacterChart\n{\n static type = 'Chart';\n visActorType: 'chart' | 'component' | 'table' | 'common' = 'chart';\n protected declare _graphic: VChartGraphic;\n protected declare _config: IChartCharacterConfig;\n\n // 临时记录 vchart 对象。在第一次执行 afterInitializeChart 后赋值, 在 beforeVRenderDraw 中使用\n // 不临时记录的话,第一次 beforeVRenderDraw 时,graphic 对象还未执行完初始化,当前对象的 _graphic 为 null\n protected _vchart: IVChart;\n\n protected _ticker: ITicker;\n protected _timeline: ITimeline;\n protected _runtime: IChartCharacterRuntime[] = [];\n\n static RuntimeMap: { [key: string]: boolean } = {};\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this._timeline = new DefaultTimeline();\n this._ticker = new ManualTicker([this._timeline]);\n this.configProcess = new ChartConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n protected _initRuntime() {\n super._initRuntime();\n }\n\n tickTo(t: number): void {\n const stage = this._graphic.vchart.getStage();\n stage.ticker.start();\n stage.getTimeline().resume();\n stage.ticker.tickAt && stage.ticker.tickAt(t);\n }\n\n getGraphicBySelector(selector: string | string[]) {\n let chart = false;\n let panel = false;\n const seriesList: Set = new Set();\n const componentsList: Set = new Set();\n if (isArray(selector)) {\n selector.forEach(s => {\n const data = this._getGraphicBySelector(s);\n chart = chart || data.chart;\n panel = panel || data.panel;\n data.seriesList.forEach(s => seriesList.add(s));\n data.componentsList.forEach(c => componentsList.add(c));\n });\n return {\n chart,\n panel,\n seriesList: Array.from(seriesList.values()),\n componentsList: Array.from(componentsList.values())\n };\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const vchart = this._graphic.vchart;\n let chart = false;\n let seriesList = vchart.getChart().getAllSeries();\n let componentsList = vchart.getChart().getAllComponents();\n const selectorList = selector.split(' ');\n // 是否包含panel, >0为包含\n let includePanel = 1;\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n chart = true;\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n const data = this.selectByNameOrType(seriesList, componentsList, match, false);\n seriesList = data.seriesList;\n componentsList = data.componentsList;\n if (match === 'panel') {\n includePanel = -Infinity; // 如果被排除,那么一定不包含了\n }\n } else {\n const data = this.selectByNameOrType(seriesList, componentsList, subSelector);\n seriesList = data.seriesList;\n componentsList = data.componentsList;\n if (subSelector === 'panel') {\n includePanel = Infinity; // 如果有正选,那么选中才算\n } else {\n includePanel--;\n }\n }\n });\n\n return {\n chart,\n panel: includePanel > 0,\n seriesList,\n componentsList\n };\n }\n\n protected selectByNameOrType(\n seriesList: ISeries[],\n componentsList: IComponent[],\n select: string,\n match: boolean = true\n ) {\n if (select[0] === '#') {\n return this.selectByNameOrUserId(seriesList, componentsList, select, match);\n }\n return this.selectByType(seriesList, componentsList, select, match);\n }\n\n protected selectByNameOrUserId(\n seriesList: ISeries[],\n componentsList: IComponent[],\n select: string,\n match: boolean = true\n ) {\n const name = select.substring(1);\n return {\n seriesList: seriesList.filter(item => (item.name === name || item.userId === name) === match),\n componentsList: componentsList.filter(item => (item.name === name || item.userId === name) === match)\n };\n }\n\n protected selectByType(seriesList: ISeries[], componentsList: IComponent[], name: string, match: boolean = true) {\n return {\n seriesList: seriesList.filter(item => (item.type === name || item.specKey === name) === match),\n componentsList: componentsList.filter(item => (item.type === name || item.specKey === name) === match)\n };\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n const chartPath = event.detailPath[event.detailPath.length - 1];\n const result = getChartModelWithEvent(this._graphic.vchart, event);\n if (!result) {\n // 点击到图表的空白区域\n if (this._graphic.pointInViewBox((event as any).canvasX, (event as any).canvasY)) {\n return {\n part: 'null',\n graphic: null,\n modelInfo: null,\n graphicType: 'null'\n };\n }\n return false;\n }\n const graphic = chartPath?.[chartPath.length - 1];\n return {\n part: result.type,\n modelInfo: result,\n graphic,\n graphicType: graphic.type\n };\n }\n\n _initGraphic() {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this._graphic = new VChartGraphic(attribute);\n\n this.canvas.addGraphic(this._graphic);\n }\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getViewBoxFromSpec() {\n const layout = getLayoutFromWidget(this._config.position, this);\n const viewBox = {\n x1: layout.x,\n x2: layout.x + layout.width,\n y1: layout.y,\n y2: layout.y + layout.height\n };\n return { layout, viewBox };\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n // 设置locked\n this.locked = !!config.locked;\n }\n\n getDefaultAttribute(): Partial {\n return {\n spec: this._config.options.spec,\n vchart: null,\n dpr: this._canvas.getDpr(),\n disableTriggerEvent: true,\n disableDirtyBounds: true,\n autoRender: false,\n width: 500,\n height: 500,\n mode: 'desktop-browser',\n interactive: false,\n panel: {},\n ticker: this._ticker,\n zIndex: this._config.zIndex ?? 0,\n vchartBoundsMode: this._config.options.initOption?.vchartBoundsMode ?? 'clip',\n chartInitOptions: mergeChartOption(\n {\n performanceHook: {\n afterInitializeChart: (vchart: IVChart) => {\n this._vchart = vchart;\n this._runtime.forEach(r => r.afterInitialize?.(this, vchart));\n },\n // @ts-ignore\n beforeDoRender: () => {\n this._runtime.forEach(r => r.beforeVRenderDraw?.(this, this._graphic?.vchart ?? this._vchart));\n }\n }\n },\n this._config.options.initOption ?? {}\n )\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n this._vchart = null;\n }\n\n getRuntimeConfig() {\n return this;\n }\n}\n","import { registerRankingBarChart } from '@visactor/vchart-extension';\nimport VChart from '@visactor/vchart';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nexport function registerRankingBarTemp() {\n registerRankingBarChart({ VChart });\n}\n\nexport class RankingBarCharacter extends CharacterChart {\n static type = 'RankingBar';\n\n tickTo(t: number): void {\n // console.log(t);\n const vchart = this._graphic.vchart;\n const player = vchart.getComponents().filter((d: any) => d.type === 'player')[0];\n const interval = vchart.getSpec()?.interval ?? 0;\n const count = vchart.getSpec()?.player?.specs?.length ?? 0;\n const totalTime = interval * count;\n const specs = player.getSpec().specs;\n const currSlice = Math.min(Math.floor(t / (totalTime / specs.length) + 1), specs.length - 1);\n if (currSlice !== (player as any)._activeIndex) {\n (player as any)._activeIndex = currSlice;\n specs[currSlice].data.forEach((datum: any) => {\n vchart.updateDataSync(datum.id, datum.values);\n });\n }\n super.tickTo(t);\n }\n}\n","import { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n// import { WaveScatterRuntime } from '../runtime/wave-scatter';\n\n// function waterDrop(ctx: any, size: number, topX: number, topY: number) {\n// ctx.beginPath();\n// const centerX = topX;\n// const centerY = topY - size / 2;\n// ctx.moveTo(centerX, centerY);\n// ctx.quadraticCurveTo(centerX + size / 2, centerY + size, centerX, centerY + size);\n// ctx.quadraticCurveTo(centerX - size / 2, centerY + size, centerX, centerY);\n// }\n\ninterface IWaveScatterChartGraphicAttribute extends IChartGraphicAttribute {\n symbolType: string;\n xField: string;\n yField: string;\n}\n\nexport class ScatterBarCharacter extends CharacterChart {\n static type = CharacterType.SCATTER_BAR;\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'scatter',\n point: {\n style: {\n _layoutHeight: (_: any, ctx: any) => {\n return ctx.getRegion().getLayoutRect().height;\n }\n }\n }\n }\n };\n }\n}\n","import { array } from '@visactor/vutils';\n\nexport const getVennSeriesDataKey = (sets: string | string[]) => {\n return array(sets).join(',');\n};\n","import { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { getVennSeriesDataKey } from './util';\n\nexport class VennTooltipHelper extends BaseSeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n return getVennSeriesDataKey(datum?.[this.series.getDimensionField()[0]]);\n };\n\n markTooltipKeyCallback = (datum: any) => {\n return getVennSeriesDataKey(datum?.[this.series.getDimensionField()[0]]);\n };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nexport const SMALL = 1e-10;\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IPointLike } from '../data-structure';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService } from '../data-structure';\nimport { SMALL } from './constant';\nimport type { ICircleArc, ICircle, IIntersectPoint, IOverlapAreaStats } from './interface';\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) */\nexport function intersectionArea(circles: ICircle[], stats?: IOverlapAreaStats) {\n // get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n\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\n let arcArea = 0;\n let polygonArea = 0;\n const arcs: ICircleArc[] = [];\n\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 (let 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\n // iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (let i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n\n // polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n\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\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]];\n const a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y);\n const a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = PointService.distancePP(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a)\n });\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\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\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\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 (let i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n\n // make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n\n if (disjoint) {\n arcArea = polygonArea = 0;\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\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\n return arcArea + polygonArea;\n}\n\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point: IPointLike, circles: ICircle[]) {\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles: ICircle[]) {\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\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r: number, width: number) {\n return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\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: number, r2: number, d: number) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\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\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d);\n const w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\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: ICircle, p2: ICircle): IIntersectPoint[] {\n const d = PointService.distancePP(p1, p2);\n const r1 = p1.radius;\n const r2 = p2.radius;\n\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\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d);\n const h = Math.sqrt(r1 * r1 - a * a);\n const x0 = p1.x + (a * (p2.x - p1.x)) / d;\n const y0 = p1.y + (a * (p2.y - p1.y)) / d;\n const rx = -(p2.y - p1.y) * (h / d);\n const ry = -(p2.x - p1.x) * (h / d);\n\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry }\n ];\n}\n\n/** Returns the center of a bunch of points */\nexport function getCenter(points: IPointLike[]) {\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","import type { IOverlapAreaStats } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService, SMALL, crossProduct, intersectionArea } from '@visactor/vutils';\nimport type { IVennCircle, IVennOverlapArc } from './interface';\n\nexport const getArcsFromCircles = (circles: IVennCircle[]) => {\n const areaStats: IOverlapAreaStats = {};\n const circleList = Object.values(circles);\n if (!circleList.length) {\n return [];\n }\n intersectionArea(circleList, areaStats);\n const arcs = areaStats.arcs.map(\n ({ p1, p2, circle, width }) =>\n ({\n p1,\n p2,\n radius: circle.radius,\n setId: (circle as IVennCircle).setId,\n largeArcFlag: width > circle.radius\n } as IVennOverlapArc)\n );\n const result: IVennOverlapArc[] = [];\n let i = 0;\n let arc = arcs[0];\n while (i < arcs.length && arc) {\n const { p2 } = arc;\n result.push(arc);\n arc = arcs.find(a => PointService.distancePP(a.p1, p2) < SMALL);\n i++;\n }\n return result;\n};\n\nexport const getPathFromArcs = (arcs: IVennOverlapArc[]) => {\n if (!arcs?.length) {\n return '';\n }\n let i = 0;\n let arc = arcs[0];\n const { p1 } = arc;\n let path = `M${p1.x},${p1.y}`;\n while (arc) {\n const { p2, radius, largeArcFlag } = arc;\n path += `A${radius},${radius} 0 ${largeArcFlag ? 1 : 0},0 ${p2.x},${p2.y}`;\n arc = arcs[++i];\n }\n path += ' Z';\n return path;\n};\n\nexport const getArcsFromPath = (path: string) => {\n const arcs: Partial[] = [];\n const segments = path.split('A');\n const m = segments[0];\n let i = m.indexOf(',');\n arcs.push({\n p1: { x: +m.slice(1, i), y: +m.slice(i + 1) }\n });\n for (i = 1; i < segments.length; i++) {\n const s = segments[i].split(',');\n arcs[i - 1].radius = +s[0];\n const p2x = +s[2].slice(2);\n const p2y = +s[3].split(' ')[0];\n arcs[i - 1].p2 = { x: p2x, y: p2y };\n arcs[i - 1].largeArcFlag = s[1][s[1].length - 1] === '1';\n if (i < segments.length - 1) {\n arcs.push({\n p1: { x: p2x, y: p2y }\n });\n }\n }\n return arcs as IVennOverlapArc[];\n};\n\nexport const getCirclesFromArcs = (arcs: IVennOverlapArc[]) => {\n return (\n arcs?.map(arc => {\n const { p1, p2, radius, largeArcFlag, setId } = arc;\n const { x: x1, y: y1 } = p1;\n const { x: x2, y: y2 } = p2;\n // 两点之间的距离\n const d = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5;\n // 中点坐标\n const mX = (x1 + x2) / 2;\n const mY = (y1 + y2) / 2;\n // 中垂线的长度\n const h = (radius ** 2 - (d / 2) ** 2) ** 0.5;\n // 圆心坐标\n let x = mX + (h * (y2 - y1)) / d;\n let y = mY - (h * (x2 - x1)) / d;\n if (crossProduct([x2 - x1, y2 - y1], [x - x1, y - y1]) > 0 || largeArcFlag) {\n x = mX - (h * (y2 - y1)) / d;\n y = mY + (h * (x2 - x1)) / d;\n }\n return { x, y, radius, setId } as IVennCircle;\n }) ?? []\n );\n};\n","import { ACustomAnimate } from '@visactor/vrender-core';\nimport type { IVennCircle, IVennOverlapArc, VennCircleName } from './utils/interface';\nimport { getArcsFromCircles, getCirclesFromArcs, getPathFromArcs } from './utils/path';\n\nexport class VennOverlapAnimation extends ACustomAnimate<{ path: string; arcs: IVennOverlapArc[] }> {\n protected fromCircles: Record;\n protected toCircles: Record;\n\n onBind(): void {\n this.fromCircles = {};\n getCirclesFromArcs(this.from.arcs).forEach(c => {\n this.fromCircles[c.setId] = c;\n });\n this.toCircles = {};\n getCirclesFromArcs(this.to.arcs).forEach(c => {\n this.toCircles[c.setId] = c;\n });\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n const circles: IVennCircle[] = [];\n Object.keys(this.fromCircles).forEach(key => {\n const fromC = this.fromCircles[key];\n const toC = this.toCircles[key];\n if (fromC && toC) {\n circles.push({\n radius: fromC.radius + (toC.radius - fromC.radius) * ratio,\n x: fromC.x + (toC.x - fromC.x) * ratio,\n y: fromC.y + (toC.y - fromC.y) * ratio,\n setId: key\n } as IVennCircle);\n }\n });\n const arcs = getArcsFromCircles(circles);\n out.arcs = arcs;\n out.path = getPathFromArcs(arcs);\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport { VennOverlapAnimation } from '@visactor/vgrammar-venn';\nimport type { VennAppearPreset } from './interface';\n\nexport const vennCirclePresetAnimation = (preset: VennAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'growIn': {\n return {\n type: 'growRadiusIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'fadeIn'\n };\n }\n }\n};\n\nexport const vennOverlapPresetAnimation = (preset: VennAppearPreset): IAnimationTypeConfig => {\n switch (preset) {\n case 'fadeIn': {\n return {\n type: 'fadeIn'\n };\n }\n case 'scaleIn': {\n return {\n type: 'scaleIn'\n };\n }\n default: {\n return {\n type: 'fadeIn'\n };\n }\n }\n};\n\nexport const registerVennAnimation = () => {\n Factory.registerAnimation('vennCircle', (params: unknown, preset: VennAppearPreset) => {\n return {\n appear: vennCirclePresetAnimation(preset),\n enter: { type: 'growRadiusIn' },\n exit: { type: 'growRadiusOut' },\n disappear: { type: 'growRadiusOut' }\n };\n });\n Factory.registerAnimation('vennOverlap', (params: unknown, preset: VennAppearPreset) => {\n return {\n appear: vennOverlapPresetAnimation(preset),\n update: { custom: VennOverlapAnimation },\n enter: { type: 'fadeIn' },\n exit: { type: 'fadeOut' },\n disappear: { type: 'fadeOut' }\n };\n });\n};\n","import type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { SeriesMarkNameEnum } from '../interface';\nimport type { IVennSeriesSpec, IVennSeriesTheme } from './interface';\n\nexport class VennSeriesSpecTransformer<\n T extends ISeriesSpec = Omit,\n K extends IVennSeriesTheme = IVennSeriesTheme\n> extends BaseSeriesSpecTransformer {\n protected _transformLabelSpec(spec: T): void {\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.circle);\n this._addMarkLabelSpec(spec, SeriesMarkNameEnum.overlap, 'overlapLabel' as any, 'initOverlapLabelMarkStyle' as any);\n }\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { PointService, circleOverlap, intersectionArea } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle } from '../interface';\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: Record, overlaps: IVennArea[]): number {\n let output = 0;\n\n function getCircles(indices: VennCircleName[]) {\n return indices.map(function (i) {\n return sets[i];\n });\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 } else if (area.sets.length === 2) {\n const left = sets[area.sets[0]];\n const right = sets[area.sets[1]];\n overlap = circleOverlap(left.radius, right.radius, PointService.distancePP(left, right));\n } else {\n overlap = intersectionArea(getCircles(area.sets));\n }\n\n const weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n output += weight * (overlap - area.size) * (overlap - area.size);\n }\n\n return output;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/blas1.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\n\n// need some basic operations on vectors, rather than adding a dependency,\n// just define here\nexport function zeros(x: number): number[] {\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: number, y: number) {\n return zeros(x).map(function () {\n return zeros(y);\n });\n}\n\nexport function norm2(a: number[]) {\n return Math.sqrt(dotProduct(a, a));\n}\n\nexport function scale(ret: number[], value: number[], c: number) {\n for (let i = 0; i < value.length; ++i) {\n ret[i] = value[i] * c;\n }\n}\n\nexport function weightedSum(ret: number[], w1: number, v1: number[], w2: number, v2: number[]) {\n for (let j = 0; j < ret.length; ++j) {\n ret[j] = w1 * v1[j] + w2 * v2[j];\n }\n}\n\nexport function gemv(output: number[], A: number[][], x: number[]) {\n for (let i = 0; i < output.length; ++i) {\n output[i] = dotProduct(A[i], x);\n }\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { SMALL, circleOverlap, findZeroOfFunction, zerosM } from '@visactor/vutils';\nimport type { IVennArea } from '../interface';\n\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nexport function distanceFromIntersectArea(r1: number, r2: number, overlap: number) {\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\n return findZeroOfFunction(\n function (distance: number) {\n return circleOverlap(r1, r2, distance) - overlap;\n },\n 0,\n r1 + r2\n );\n}\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: IVennArea[], sets: IVennArea[], setIds: Record) {\n // initialize an empty distance matrix between all the points\n const distances = zerosM(sets.length, sets.length);\n const constraints = zerosM(sets.length, sets.length);\n\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]];\n const right = setIds[current.sets[1]];\n const r1 = Math.sqrt(sets[left].size / Math.PI);\n const r2 = Math.sqrt(sets[right].size / Math.PI);\n const distance = distanceFromIntersectArea(r1, r2, current.size);\n\n distances[left][right] = distances[right][left] = distance;\n\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 } else if (current.size <= 1e-10) {\n c = -1;\n }\n constraints[left][right] = constraints[right][left] = c;\n });\n\n return { distances, constraints };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennArea, IVennCircle, IVennSingleArea, IVennParams } from '../interface';\nimport { lossFunction } from './loss';\nimport { distanceFromIntersectArea } from './common';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { SMALL, circleCircleIntersection } from '@visactor/vutils';\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: IVennArea[], params: IVennParams): Record {\n const loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n // define a circle for each set\n const circles: Record = {};\n const setOverlaps: Record = {};\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length === 1) {\n const set = area.sets[0];\n circles[set] = {\n x: 1e10,\n y: 1e10,\n size: area.size,\n radius: Math.sqrt(area.size / Math.PI),\n setId: set\n };\n setOverlaps[set] = [];\n }\n }\n areas = areas.filter(function (a) {\n return a.sets.length === 2;\n });\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 let weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n const left = current.sets[0];\n const right = current.sets[1];\n\n // completely overlapped circles shouldn't be positioned early here\n if (current.size + SMALL >= Math.min(circles[left].size, circles[right].size)) {\n weight = 0;\n }\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\n // get list of most overlapped sets\n const mostOverlapped: IVennSingleArea[] = [];\n for (const set in setOverlaps) {\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\n mostOverlapped.push({ set, size });\n }\n }\n\n // sort by size desc\n function sortOrder(a: IVennSingleArea, b: IVennSingleArea) {\n return b.size - a.size;\n }\n mostOverlapped.sort(sortOrder);\n\n // keep track of what sets have been laid out\n const positioned: Record = {};\n function isPositioned(element: IVennSingleArea) {\n return element.set in positioned;\n }\n\n // adds a point to the output\n function positionSet(point: IPointLike, index: VennCircleName) {\n circles[index].x = point.x;\n circles[index].y = point.y;\n positioned[index] = true;\n }\n\n // add most overlapped set at (0,0)\n positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n\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;\n const overlap = setOverlaps[setIndex].filter(isPositioned);\n const set = circles[setIndex];\n overlap.sort(sortOrder);\n\n if (overlap.length === 0) {\n // this shouldn't happen anymore with addMissingAreas\n throw 'ERROR: missing pairwise overlap information';\n }\n\n const points: IPointLike[] = [];\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];\n const d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n\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\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];\n const d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n\n const extraPoints = circleCircleIntersection(\n { x: p1.x, y: p1.y, radius: d1 },\n { x: p2.x, y: p2.y, radius: d2 }\n );\n\n for (let l = 0; l < extraPoints.length; ++l) {\n points.push(extraPoints[l]);\n }\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;\n let 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\n positionSet(bestPoint, setIndex);\n }\n\n return circles;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/linesearch.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\nimport { weightedSum } from './blas1';\n\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: any, pk: number[], current: any, next: any, a: number, c1?: number, c2?: number) {\n const phi0 = current.fx;\n const phiPrime0 = dotProduct(current.fxprime, pk);\n let phi = phi0;\n let phi_old = phi0;\n let phiPrime = phiPrime0;\n let a0 = 0;\n\n a = a || 1;\n c1 = c1 || 1e-6;\n c2 = c2 || 0.1;\n\n function zoom(a_lo: number, a_high: number, phi_lo: number) {\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 = dotProduct(next.fxprime, pk);\n\n if (phi > phi0 + c1 * a * phiPrime0 || phi >= phi_lo) {\n a_high = a;\n } else {\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime * (a_high - a_lo) >= 0) {\n a_high = a_lo;\n }\n\n a_lo = a;\n phi_lo = phi;\n }\n }\n\n return 0;\n }\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 = dotProduct(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || (iteration && phi >= phi_old)) {\n return zoom(a0, a, phi_old);\n }\n\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime >= 0) {\n return zoom(a, a0, phi);\n }\n\n phi_old = phi;\n a0 = a;\n a *= 2;\n }\n\n return a;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/conjugateGradient.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { dotProduct } from '../math';\nimport { norm2, scale, weightedSum } from './blas1';\nimport { wolfeLineSearch } from './linesearch';\n\nexport function conjugateGradient(f: any, initial: any, params: any) {\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\n params = params || {};\n const maxIterations = params.maxIterations || initial.length * 20;\n\n current.fx = f(current.x, current.fxprime);\n const pk = current.fxprime.slice();\n scale(pk, current.fxprime, -1);\n\n for (let i = 0; i < maxIterations; ++i) {\n a = wolfeLineSearch(f, pk, current, next, a);\n\n // todo: history in wrong spot?\n if (params.history) {\n params.history.push({ x: current.x.slice(), fx: current.fx, fxprime: current.fxprime.slice(), 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 } else {\n // update direction using Polak–Ribiere CG method\n weightedSum(yk, 1, next.fxprime, -1, current.fxprime);\n\n const delta_k = dotProduct(current.fxprime, current.fxprime);\n const beta_k = Math.max(0, dotProduct(yk, next.fxprime) / delta_k);\n\n weightedSum(pk, beta_k, pk, -1, next.fxprime);\n\n temp = current;\n current = next;\n next = temp;\n }\n\n if (norm2(current.fxprime) <= 1e-5) {\n break;\n }\n }\n\n if (params.history) {\n params.history.push({ x: current.x.slice(), fx: current.fx, fxprime: current.fxprime.slice(), alpha: a });\n }\n\n return current;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { conjugateGradient, norm2, scale, zeros, seedRandom } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle, IVennParams } from '../interface';\nimport { getDistanceMatrices } from './common';\n\n/// use the constrained MDS variant to generate an initial layout\nexport function constrainedMDSLayout(areas: IVennArea[], params: IVennParams): Record {\n params = params || {};\n const restarts = params.restarts || 10;\n\n // bidirectionally map sets to a rowid (so we can create a matrix)\n const sets = [];\n const 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\n const matrices = getDistanceMatrices(areas, sets, setIds);\n let distances = matrices.distances;\n const constraints = matrices.constraints;\n\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((row: number[]) => {\n return row.map(value => {\n return value / norm;\n });\n });\n\n const obj = function (x: number[], fxPrime: number[]) {\n return constrainedMDSGradient(x, fxPrime, distances, constraints);\n };\n\n let best;\n let current;\n for (i = 0; i < restarts; ++i) {\n const initial = zeros(distances.length * 2).map((entry: any, i: number) => seedRandom(i));\n\n current = conjugateGradient(obj, initial, params);\n if (!best || current.fx < best.fx) {\n best = current;\n }\n }\n const positions = best.x;\n\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\n if (params.history) {\n for (i = 0; i < params.history.length; ++i) {\n (scale as any)(params.history[i].x, norm);\n }\n }\n return circles;\n}\n\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x: number[], fxPrime: number[], distances: number[][], constraints: number[][]) {\n let loss = 0;\n let i;\n for (i = 0; i < fxPrime.length; ++i) {\n fxPrime[i] = 0;\n }\n\n for (i = 0; i < distances.length; ++i) {\n const xi = x[2 * i];\n const yi = x[2 * i + 1];\n for (let j = i + 1; j < distances.length; ++j) {\n const xj = x[2 * j];\n const yj = x[2 * j + 1];\n const dij = distances[i][j];\n const constraint = constraints[i][j];\n\n const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi);\n const distance = Math.sqrt(squaredDistance);\n const delta = squaredDistance - dij * dij;\n\n if ((constraint > 0 && distance <= dij) || (constraint < 0 && distance >= dij)) {\n continue;\n }\n\n loss += 2 * delta * delta;\n\n fxPrime[2 * i] += 4 * delta * (xi - xj);\n fxPrime[2 * i + 1] += 4 * delta * (yi - yj);\n\n fxPrime[2 * j] += 4 * delta * (xj - xi);\n fxPrime[2 * j + 1] += 4 * delta * (yj - yi);\n }\n }\n return loss;\n}\n","/* Adapted from fmin by Ben Frederickson\n * https://github.com/benfred/fmin\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/benfred/fmin/blob/master/src/nelderMead.js\n * License: https://github.com/benfred/fmin/blob/master/LICENSE\n * @license\n */\n\nimport { weightedSum } from './blas1';\n\n/** minimizes a function using the downhill simplex method */\nexport function nelderMead(f: any, x0: any, parameters: any) {\n parameters = parameters || {};\n\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\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\n function updateSimplex(value: any) {\n for (let i = 0; i < value.length; i++) {\n simplex[N][i] = value[i];\n }\n simplex[N].fx = value.fx;\n }\n\n const sortOrder = function (a: any, b: any) {\n return a.fx - b.fx;\n };\n\n const centroid = x0.slice();\n const reflected = x0.slice();\n const contracted = x0.slice();\n const expanded = x0.slice();\n\n for (let iteration = 0; iteration < maxIterations; ++iteration) {\n simplex.sort(sortOrder);\n\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(function (x) {\n const state = x.slice();\n state.fx = x.fx;\n state.id = x.id;\n return state;\n });\n sortedSimplex.sort(function (a, b) {\n return a.id - b.id;\n });\n\n parameters.history.push({ x: simplex[0].slice(), fx: simplex[0].fx, 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\n if (Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta && maxDiff < minTolerance) {\n break;\n }\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\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\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 } else {\n updateSimplex(reflected);\n }\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\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 } else {\n shouldReduce = true;\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 } else {\n shouldReduce = true;\n }\n }\n\n if (shouldReduce) {\n // if we don't contract here, we're done\n if (sigma >= 1) {\n break;\n }\n\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 } else {\n updateSimplex(reflected);\n }\n }\n\n simplex.sort(sortOrder);\n return { fx: simplex[0].fx, x: simplex[0] };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennArea, IVennCircle, IVennParams, VennAreaName } from '../interface';\nimport { greedyLayout } from './greedy-layout';\nimport { lossFunction } from './loss';\nimport { constrainedMDSLayout } from './constrained-mds-layout';\nimport { nelderMead } from '@visactor/vutils';\n\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: IVennArea[], parameters?: IVennParams) {\n parameters = parameters || {};\n parameters.maxIterations = parameters.maxIterations || 500;\n const initialLayout = parameters.initialLayout || bestInitialLayout;\n const loss = parameters.lossFunction || lossFunction;\n\n // add in missing pairwise areas as having 0 size\n areas = addMissingAreas(areas);\n\n // initial layout is done greedily\n const circles = initialLayout(areas, parameters);\n\n // transform x/y coordinates to a vector to optimize\n const initial: number[] = [];\n const setIds: VennCircleName[] = [];\n for (const setId in circles) {\n if (circles.hasOwnProperty(setId)) {\n initial.push(circles[setId].x);\n initial.push(circles[setId].y);\n setIds.push(setId);\n }\n }\n\n // optimize initial layout from our loss function\n const solution = nelderMead(\n function (values: number[]) {\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 // size : circles[setId].size\n };\n }\n return loss(current, areas);\n },\n initial,\n parameters\n );\n\n // transform solution vector back to x/y points\n const positions = solution.x;\n for (let i = 0; i < setIds.length; ++i) {\n const setId = setIds[i];\n circles[setId].x = positions[2 * i];\n circles[setId].y = positions[2 * i + 1];\n }\n\n return circles;\n}\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: IVennArea[]) {\n areas = areas.slice();\n\n // two circle intersections that aren't defined\n const ids: VennCircleName[] = [];\n const pairs: Record = {};\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length === 1) {\n ids.push(area.sets[0]);\n } else if (area.sets.length === 2) {\n const a = area.sets[0];\n const b = area.sets[1];\n pairs[[a, b].toString()] = true;\n pairs[[b, a].toString()] = true;\n }\n }\n ids.sort(function (a, b) {\n return +(a > b);\n });\n\n for (let i = 0; i < ids.length; ++i) {\n const a = ids[i];\n for (let j = i + 1; j < ids.length; ++j) {\n const b = ids[j];\n if (!([a, b].toString() in pairs)) {\n areas.push({ sets: [a, b], size: 0 });\n }\n }\n }\n return areas;\n}\n\n/// takes the best working variant of either constrained MDS or greedy\nexport function bestInitialLayout(areas: IVennArea[], params: IVennParams): Record {\n let initial = greedyLayout(areas, params);\n const loss = params.lossFunction || lossFunction;\n\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);\n const constrainedLoss = loss(constrained, areas);\n const greedyLoss = loss(initial, areas);\n\n if (constrainedLoss + 1e-8 < greedyLoss) {\n initial = constrained;\n }\n }\n return initial;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport { PointService } from '@visactor/vutils';\nimport type { VennCircleName, IVennCircle, ICluster } from '../interface';\n\n// orientates a bunch of circles to point in orientation\nexport function orientateCircles(circles: IVennCircle[], orientation: number, orientationOrder: any) {\n if (orientationOrder === null) {\n circles.sort(function (a, b) {\n return b.radius - a.radius;\n });\n } else {\n circles.sort(orientationOrder);\n }\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;\n const largestY = circles[0].y;\n\n for (i = 0; i < circles.length; ++i) {\n circles[i].x -= largestX;\n circles[i].y -= largestY;\n }\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 = PointService.distancePP(circles[0], circles[1]);\n if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n circles[1].x = circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n circles[1].y = circles[0].y;\n }\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 const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n let x;\n let y;\n\n y;\n\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\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}\n\nexport function disjointCluster(circles: IVennCircle[]): ICluster[] {\n // union-find clustering to get disjoint sets\n circles.map(function (circle: IVennCircle) {\n circle.parent = circle;\n });\n\n // path compression step in union find\n function find(circle: IVennCircle) {\n if (circle.parent !== circle) {\n circle.parent = find(circle.parent);\n }\n return circle.parent;\n }\n\n function union(x: IVennCircle, y: IVennCircle) {\n const xRoot = find(x);\n const yRoot = find(y);\n xRoot.parent = yRoot;\n }\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 (PointService.distancePP(circles[i], circles[j]) + 1e-10 < maxDistance) {\n union(circles[j], circles[i]);\n }\n }\n }\n\n // find all the disjoint clusters and group them together\n const disjointClusters: Record = {};\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\n // cleanup bookkeeping\n circles.map(function (circle: IVennCircle) {\n delete circle.parent;\n });\n\n // return in more usable form\n const ret: IVennCircle[][] = [];\n for (setId in disjointClusters) {\n if (disjointClusters.hasOwnProperty(setId)) {\n ret.push(disjointClusters[setId]);\n }\n }\n return ret;\n}\n\nexport function getBoundingBox(circles: IVennCircle[]) {\n const minMax = function (d: string) {\n const hi = Math.max.apply(\n null,\n circles.map(function (c) {\n return c[d] + c.radius;\n })\n );\n const lo = Math.min.apply(\n null,\n circles.map(function (c) {\n return c[d] - c.radius;\n })\n );\n return { max: hi, min: lo };\n };\n\n return { xRange: minMax('x'), yRange: minMax('y') };\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennCircle, ICluster } from '../interface';\nimport { disjointCluster, getBoundingBox, orientateCircles } from './common';\n\nexport function normalizeSolution(\n solution: Record,\n orientation: number,\n orientationOrder: any\n): Record {\n if (orientation === null) {\n orientation = Math.PI / 2;\n }\n\n // work with a list instead of a dictionary, and take a copy so we\n // don't mutate input\n let circles: ICluster = [];\n for (const setId in solution) {\n if (solution.hasOwnProperty(setId)) {\n const previous = solution[setId];\n circles.push({ x: previous.x, y: previous.y, radius: previous.radius, setId });\n }\n }\n\n // get all the disjoint clusters\n const clusters = disjointCluster(circles);\n\n // orientate all disjoint sets, get sizes\n for (let i = 0; i < clusters.length; ++i) {\n orientateCircles(clusters[i], orientation, orientationOrder);\n const bounds = getBoundingBox(clusters[i]);\n clusters[i].size = (bounds.xRange.max - bounds.xRange.min) * (bounds.yRange.max - bounds.yRange.min);\n clusters[i].bounds = bounds;\n }\n clusters.sort(function (a: ICluster, b: ICluster) {\n return b.size - a.size;\n });\n\n // orientate the largest at 0,0, and get the bounds\n circles = clusters[0];\n let returnBounds = circles.bounds;\n\n const spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n\n function addCluster(cluster: ICluster, right: boolean, bottom: boolean) {\n if (!cluster) {\n return;\n }\n\n const bounds = cluster.bounds;\n let xOffset;\n let yOffset;\n let centering;\n\n if (right) {\n xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n } else {\n xOffset = returnBounds.xRange.max - bounds.xRange.max;\n centering = (bounds.xRange.max - bounds.xRange.min) / 2 - (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n if (centering < 0) {\n xOffset += centering;\n }\n }\n\n if (bottom) {\n yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n } else {\n yOffset = returnBounds.yRange.max - bounds.yRange.max;\n centering = (bounds.yRange.max - bounds.yRange.min) / 2 - (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n if (centering < 0) {\n yOffset += centering;\n }\n }\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\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\n // have one cluster (in top left). lay out next three relative\n // to it in a grid\n returnBounds = getBoundingBox(circles);\n }\n\n // convert back to solution form\n const ret: Record = {};\n for (let i = 0; i < circles.length; ++i) {\n ret[circles[i].setId] = circles[i];\n }\n return ret;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/layout.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { VennCircleName, IVennCircle } from '../interface';\nimport { getBoundingBox } from './common';\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(\n solution: Record,\n width: number,\n height: number,\n x0: number,\n y0: number\n): Record {\n width = Math.max(width, 1);\n height = Math.max(height, 1);\n\n const circles: IVennCircle[] = [];\n const setIds: VennCircleName[] = [];\n for (const setId in solution) {\n if (solution.hasOwnProperty(setId)) {\n setIds.push(setId);\n circles.push(solution[setId]);\n }\n }\n\n const bounds = getBoundingBox(circles);\n const xRange = bounds.xRange;\n const yRange = bounds.yRange;\n\n if (xRange.max === xRange.min || yRange.max === yRange.min) {\n // eslint-disable-next-line no-console\n console.log('not scaling solution: zero size detected');\n return solution;\n }\n\n const xScaling = width / (xRange.max - xRange.min);\n const yScaling = height / (yRange.max - yRange.min);\n const scaling = Math.min(yScaling, xScaling);\n\n // while we're at it, center the diagram too\n const xOffset = (width - (xRange.max - xRange.min) * scaling) / 2;\n const yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n\n const scaled: Record = {};\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: x0 + xOffset + (circle.x - xRange.min) * scaling,\n y: y0 + yOffset + (circle.y - yRange.min) * scaling,\n setId: circle.setId\n } as IVennCircle;\n }\n\n return scaled;\n}\n","/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/diagram.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IOverlapAreaStats, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService, getCenter, intersectionArea, nelderMead, Logger } from '@visactor/vutils';\nimport type { VennCircleName, IVennArea, IVennCircle, VennAreaName } from './interface';\n\nexport function computeTextCenters(\n circles: Record,\n areas: IVennArea[]\n): Record {\n const ret: Record = {};\n const overlapped = getOverlappingCircles(circles);\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i].sets;\n const areaIds: Record = {};\n const exclude: Record = {};\n for (let j = 0; j < area.length; ++j) {\n areaIds[area[j]] = true;\n const overlaps = overlapped[area[j]];\n // keep track of any circles that overlap this area,\n // and don't consider for purposes of computing the text\n // centre\n for (let k = 0; k < overlaps.length; ++k) {\n exclude[overlaps[k]] = true;\n }\n }\n\n const interior: IVennCircle[] = [];\n const exterior: IVennCircle[] = [];\n for (const setId in circles) {\n if (setId in areaIds) {\n interior.push(circles[setId]);\n } else if (!(setId in exclude)) {\n exterior.push(circles[setId]);\n }\n }\n const center = computeTextCenter(interior, exterior);\n ret[area.toString()] = center;\n if (center.disjoint && areas[i].size > 0) {\n const logger = Logger.getInstance();\n logger.error('Area ' + area + ' not represented on screen');\n }\n }\n return ret;\n}\n\n// given a dictionary of {setid : circle}, returns\n// a dictionary of setid to list of circles that completely overlap it\nfunction getOverlappingCircles(circles: Record): Record {\n const ret: Record = {};\n const circleIds: VennCircleName[] = [];\n for (const circleId in circles) {\n circleIds.push(circleId);\n ret[circleId] = [];\n }\n for (let i = 0; i < circleIds.length; i++) {\n const a = circles[circleIds[i]];\n for (let j = i + 1; j < circleIds.length; ++j) {\n const b = circles[circleIds[j]];\n const d = PointService.distancePP(a, b);\n\n if (d + b.radius <= a.radius + 1e-10) {\n ret[circleIds[j]].push(circleIds[i]);\n } else if (d + a.radius <= b.radius + 1e-10) {\n ret[circleIds[i]].push(circleIds[j]);\n }\n }\n }\n return ret;\n}\n\n// compute the center of some circles by maximizing the margin of\n// the center point relative to the circles (interior) after subtracting\n// nearby circles (exterior)\nexport function computeTextCenter(interior: IVennCircle[], exterior: IVennCircle[]) {\n // get an initial estimate by sampling around the interior circles\n // and taking the point with the biggest margin\n const points: IPointLike[] = [];\n for (let i = 0; i < interior.length; ++i) {\n const c = interior[i];\n points.push({ x: c.x, y: c.y });\n points.push({ x: c.x + c.radius / 2, y: c.y });\n points.push({ x: c.x - c.radius / 2, y: c.y });\n points.push({ x: c.x, y: c.y + c.radius / 2 });\n points.push({ x: c.x, y: c.y - c.radius / 2 });\n }\n let initial = points[0];\n let margin = circleMargin(points[0], interior, exterior);\n for (let i = 1; i < points.length; ++i) {\n const m = circleMargin(points[i], interior, exterior);\n if (m >= margin) {\n initial = points[i];\n margin = m;\n }\n }\n\n // maximize the margin numerically\n const solution = nelderMead(\n function (p: number[]) {\n return -1 * circleMargin({ x: p[0], y: p[1] }, interior, exterior);\n },\n [initial.x, initial.y],\n { maxIterations: 500, minErrorDelta: 1e-10 }\n ).x;\n let ret: {\n x: number;\n y: number;\n disjoint?: boolean;\n } = { x: solution[0], y: solution[1] };\n\n // check solution, fallback as needed (happens if fully overlapped\n // etc)\n let valid = true;\n for (let i = 0; i < interior.length; ++i) {\n if (PointService.distancePP(ret, interior[i]) > interior[i].radius) {\n valid = false;\n break;\n }\n }\n\n for (let i = 0; i < exterior.length; ++i) {\n if (PointService.distancePP(ret, exterior[i]) < exterior[i].radius) {\n valid = false;\n break;\n }\n }\n\n if (!valid) {\n if (interior.length === 1) {\n ret = { x: interior[0].x, y: interior[0].y };\n } else {\n const areaStats: IOverlapAreaStats = {};\n intersectionArea(interior, areaStats);\n\n if (areaStats.arcs.length === 0) {\n ret = { x: 0, y: -1000, disjoint: true };\n } else if (areaStats.arcs.length === 1) {\n ret = { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y };\n } else if (exterior.length) {\n // try again without other circles\n ret = computeTextCenter(interior, []);\n } else {\n // take average of all the points in the intersection\n // polygon. this should basically never happen\n // and has some issues:\n // https://github.com/benfred/venn.js/issues/48#issuecomment-146069777\n ret = getCenter(\n areaStats.arcs.map(function (a) {\n return a.p1;\n })\n );\n }\n }\n }\n\n return ret;\n}\n\nfunction circleMargin(current: IPointLike, interior: IVennCircle[], exterior: IVennCircle[]) {\n let margin = interior[0].radius - PointService.distancePP(interior[0], current);\n let i;\n let m;\n for (i = 1; i < interior.length; ++i) {\n m = interior[i].radius - PointService.distancePP(interior[i], current);\n if (m <= margin) {\n margin = m;\n }\n }\n\n for (i = 0; i < exterior.length; ++i) {\n m = PointService.distancePP(exterior[i], current) - exterior[i].radius;\n if (m <= margin) {\n margin = m;\n }\n }\n return margin;\n}\n","import type { Datum } from '@visactor/vgrammar-core';\nimport type {\n IVennCircleDatum,\n IVennCommonDatum,\n IVennOverlapDatum,\n IVennTransformMarkOptions,\n IVennTransformOptions\n} from './interface';\nimport { computeTextCenters, normalizeSolution, scaleSolution, venn } from './utils';\nimport type { VennCircleName, IVennArea, IVennCircle, VennAreaName } from './utils/interface';\nimport { getArcsFromCircles, getPathFromArcs } from './utils/path';\nimport type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array } from '@visactor/vutils';\n\nexport const transform = (\n options: IVennTransformOptions,\n upstreamData: Datum[]\n): Array => {\n const {\n x0,\n x1,\n y0,\n y1,\n setField = 'sets',\n valueField = 'size',\n orientation = Math.PI / 2,\n orientationOrder = null\n } = options;\n\n let circles: Record = {};\n let textCenters: Record = {};\n\n if (upstreamData.length > 0) {\n const vennData = upstreamData.map(\n area =>\n ({\n sets: array(area[setField]),\n size: area[valueField]\n } as IVennArea)\n );\n let solution = venn(vennData, options);\n solution = normalizeSolution(solution, orientation, orientationOrder);\n circles = scaleSolution(solution, x1 - x0, y1 - y0, x0, y0);\n textCenters = computeTextCenters(circles, vennData);\n }\n\n const data = upstreamData.map(area => {\n const sets = array(area[setField]);\n const key = sets.toString();\n const textCenter = textCenters[key];\n const basicDatum = {\n ...area,\n datum: area,\n sets,\n key,\n size: area[valueField],\n labelX: textCenter?.x,\n labelY: textCenter?.y\n } as IVennCommonDatum;\n const circle = circles[key];\n if (circle) {\n return {\n ...basicDatum,\n type: 'circle',\n x: circle.x,\n y: circle.y,\n radius: circle.radius\n } as IVennCircleDatum;\n }\n const arcs = getArcsFromCircles(sets.map(name => circles[name]));\n return {\n ...basicDatum,\n type: 'overlap',\n x: 0,\n y: 0,\n path: getPathFromArcs(arcs),\n arcs\n } as IVennOverlapDatum;\n });\n return data;\n};\n\nexport const transformMark = (\n options: IVennTransformMarkOptions,\n upstreamData: Array\n) => {\n return upstreamData.filter(datum => datum.type === options.datumType);\n};\n","/* eslint-disable no-duplicate-imports */\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { IArcMark, ILabelMark, IMark, IPathMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { Datum, IArcMarkSpec, IPathMarkSpec, IPoint, StringOrNumber } from '../../typings';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IVennSeriesSpec } from './interface';\nimport { VennTooltipHelper } from './tooltip-helper';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { TransformSpec } from '@visactor/vgrammar-core';\nimport { vennSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport { registerVennAnimation } from './animation';\nimport { VennSeriesSpecTransformer } from './venn-transform';\nimport { BaseSeries } from '../base';\nimport { registerArcMark } from '../../mark/arc';\nimport { registerPathMark } from '../../mark/path';\nimport type { IVennCircleDatum, IVennOverlapDatum } from '@visactor/vgrammar-venn';\nimport { registerVennTransforms } from '@visactor/vgrammar-venn';\nimport type { IBounds } from '@visactor/vutils';\nimport { Bounds, array } from '@visactor/vutils';\nimport { getVennSeriesDataKey } from './util';\nimport { ComponentTypeEnum } from '../../component/interface';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { ILegend, IDiscreteLegend } from '../../component/legend/interface';\n\nexport class VennSeries extends BaseSeries {\n static readonly type: string = SeriesTypeEnum.venn;\n type = SeriesTypeEnum.venn;\n\n static readonly mark: SeriesMarkMap = vennSeriesMark;\n\n static readonly transformerConstructor = VennSeriesSpecTransformer;\n readonly transformerConstructor = VennSeriesSpecTransformer;\n\n private _circleMark: IArcMark;\n private _overlapMark: IPathMark;\n private _labelMark: ILabelMark;\n\n protected declare _spec: T;\n\n // range for venn layout, change while zoom and pan\n private _viewBox: IBounds = new Bounds();\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setCategoryField(this._spec.categoryField ?? 'sets');\n this.setValueField(this._spec.valueField ?? 'size');\n this.setSeriesField(this._spec.seriesField ?? DEFAULT_DATA_KEY);\n }\n\n compile(): void {\n super.compile();\n this._runVennTransform();\n }\n\n protected _runVennTransform(render = false) {\n const viewDataProduct = this._data.getProduct();\n if (viewDataProduct) {\n viewDataProduct.transform([\n {\n type: 'venn',\n x0: this._viewBox.x1,\n x1: this._viewBox.x2,\n y0: this._viewBox.y1,\n y1: this._viewBox.y2,\n setField: this._categoryField,\n valueField: this._valueField\n }\n ]);\n }\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n initMark() {\n const circleMark = this._createMark(VennSeries.mark.circle, {\n isSeriesMark: true\n });\n if (circleMark) {\n circleMark.setTransform([\n {\n type: 'vennMark',\n datumType: 'circle'\n } as TransformSpec\n ]);\n this._circleMark = circleMark;\n }\n\n const overlapMark = this._createMark(VennSeries.mark.overlap, {\n isSeriesMark: true\n });\n if (overlapMark) {\n overlapMark.setTransform([\n {\n type: 'vennMark',\n datumType: 'overlap'\n } as TransformSpec\n ]);\n this._overlapMark = overlapMark;\n }\n }\n\n initMarkStyle() {\n this._initCircleMarkStyle();\n this._initOverlapMarkStyle();\n }\n\n protected _initCircleMarkStyle() {\n if (!this._circleMark) {\n return;\n }\n\n this.setMarkStyle(\n this._circleMark,\n {\n x: datum => (datum as IVennCircleDatum).x,\n y: datum => (datum as IVennCircleDatum).y,\n innerRadius: 0,\n outerRadius: datum => (datum as IVennCircleDatum).radius,\n startAngle: 0,\n endAngle: Math.PI * 2,\n fill: this.getColorAttribute(),\n stroke: this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected _initOverlapMarkStyle() {\n if (!this._overlapMark) {\n return;\n }\n this.setMarkStyle(\n this._overlapMark,\n {\n x: datum => (datum as IVennCircleDatum).x,\n y: datum => (datum as IVennCircleDatum).y,\n path: datum => (datum as IVennOverlapDatum).path,\n arcs: (datum: any) => (datum as IVennOverlapDatum).arcs,\n fill: this.getColorAttribute(),\n stroke: this.getColorAttribute(),\n zIndex: datum => {\n // zIndex 按照重叠的深度来分级\n return (datum as IVennOverlapDatum).sets.length * 100;\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n this.setMarkStyle(\n this._overlapMark,\n {\n zIndex: datum => {\n // hover 态的 zIndex 要比同级更高\n return (datum as IVennOverlapDatum).sets.length * 100 + 1;\n }\n },\n STATE_VALUE_ENUM.STATE_HOVER,\n AttributeLevel.Series\n );\n }\n\n initLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('venn');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum as IVennCircleDatum).labelX,\n y: datum => (datum as IVennCircleDatum).labelY,\n text: datum => getVennSeriesDataKey((datum as IVennCircleDatum).sets),\n maxLineWidth: (datum: any) => {\n const { x, radius, labelX } = datum as IVennCircleDatum;\n const circleX0 = x - radius;\n const circleX1 = x + radius;\n return Math.min(labelX - circleX0, circleX1 - labelX);\n }\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initOverlapLabelMarkStyle(labelMark: ILabelMark) {\n if (!labelMark) {\n return;\n }\n this._labelMark = labelMark;\n labelMark.setRule('venn');\n this.setMarkStyle(\n labelMark,\n {\n x: datum => (datum as IVennOverlapDatum).labelX,\n y: datum => (datum as IVennOverlapDatum).labelY,\n text: datum => getVennSeriesDataKey((datum as IVennOverlapDatum).sets)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n protected initTooltip() {\n this._tooltipHelper = new VennTooltipHelper(this);\n this._circleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._circleMark);\n this._overlapMark && this._tooltipHelper.activeTriggerSet.mark.add(this._overlapMark);\n }\n\n getDimensionField() {\n return [this._categoryField];\n }\n\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._viewBox.set(0, 0, this.getLayoutRect().width, this.getLayoutRect().height);\n this._runVennTransform();\n }\n\n getDefaultShapeType(): string {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._circleMark, this._overlapMark];\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n dataToPosition(data: Datum, checkInViewData?: boolean): IPoint {\n return {\n x: data.x,\n y: data.y\n };\n }\n\n dataToPositionX(data: Datum): number {\n return data.x;\n }\n\n dataToPositionY(data: Datum): number {\n return data.y;\n }\n\n valueToPosition(value1: any, value2?: any): IPoint {\n throw new Error('Method not implemented.');\n }\n\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n return null;\n }\n\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(originalKey => {\n const dataKey = getVennSeriesDataKey(originalKey);\n return {\n key: dataKey,\n originalKey,\n style: this.getSeriesStyle({\n [field]: originalKey\n }),\n shapeType: defaultShapeType\n };\n });\n }\n\n getSeriesFieldValue(datum: Datum, seriesField?: string) {\n const value = super.getSeriesFieldValue(datum, seriesField);\n return getVennSeriesDataKey(value);\n }\n\n legendSelectedFilter(component: ILegend, selectedKeys: StringOrNumber[]) {\n if (component.type === ComponentTypeEnum.discreteLegend) {\n const legend = component;\n\n const originalLegendKeys: any[] = (legend as IDiscreteLegend).getLegendDefaultData(true);\n if (selectedKeys.length === 0 && originalLegendKeys.length) {\n return [];\n }\n\n if (selectedKeys.length === originalLegendKeys.length) {\n return selectedKeys;\n }\n\n // 找到缺失的项\n const selectedFilter = {};\n selectedKeys.forEach(s => {\n selectedFilter[s] = true;\n });\n const disableKeys = originalLegendKeys.filter(key => !selectedFilter[getVennSeriesDataKey(key)]);\n\n // 找到缺失的项的派生项(如 “A&B” 的派生项 “A&B&C”)\n const derivedDisableKeys = originalLegendKeys.filter(key => {\n if (disableKeys.includes(key)) {\n return false;\n }\n return disableKeys.some(disableKey => array(disableKey).every(k => key.includes(k)));\n });\n\n // 将派生项从 selectedKeys 中移除\n selectedKeys = selectedKeys.slice();\n derivedDisableKeys.forEach(key => {\n selectedKeys.splice(selectedKeys.indexOf(getVennSeriesDataKey(key)), 1);\n });\n }\n return selectedKeys;\n }\n\n initAnimation(): void {\n this.getMarksInType(MarkTypeEnum.arc).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('vennCircle')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n this.getMarksInType(MarkTypeEnum.path).forEach(mark => {\n mark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('vennOverlap')?.(),\n userAnimationConfig(mark.name, this._spec, this._markAttributeContext)\n )\n );\n });\n }\n}\n\nexport const registerVennSeries = () => {\n registerArcMark();\n registerPathMark();\n registerVennAnimation();\n registerFadeInOutAnimation();\n registerVennTransforms();\n Factory.registerSeries(VennSeries.type, VennSeries);\n};\n","import type { AdaptiveSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IVennChartSpec } from './interface';\n\nexport class VennChartSpecTransformer extends BaseChartSpecTransformer<\n AdaptiveSpec\n> {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'categoryField',\n 'valueField',\n 'circle',\n 'overlap',\n 'overlapLabel'\n ]);\n\n return series;\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { BaseChart } from '../base/base-chart';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IVennChartSpec } from './interface';\nimport { registerVennSeries } from '../../series/venn/venn';\nimport { Factory } from '../../core/factory';\nimport type { AdaptiveSpec } from '../../typings';\nimport { VennChartSpecTransformer } from './venn-transformer';\n\nexport class VennChart extends BaseChart<\n AdaptiveSpec\n> {\n static readonly type: string = ChartTypeEnum.venn;\n static readonly seriesType: string = SeriesTypeEnum.venn;\n static readonly transformerConstructor = VennChartSpecTransformer;\n readonly transformerConstructor = VennChartSpecTransformer;\n readonly type: string = ChartTypeEnum.venn;\n readonly seriesType: string = SeriesTypeEnum.venn;\n}\n\nexport const registerVennChart = () => {\n registerVennSeries();\n Factory.registerChart(VennChart.type, VennChart);\n};\n","import { SeriesTypeEnum } from '../../series';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { ILiquidChartSpec } from './interface';\n\nexport class LiquidChartSpecTransformer<\n T extends ILiquidChartSpec = ILiquidChartSpec\n> extends BaseChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n const series: any = super._getDefaultSeriesSpec(spec, [\n 'valueField',\n 'maskShape',\n 'reverse',\n 'outlineMargin',\n 'outlinePadding',\n 'indicatorSmartInvert',\n 'liquidBackground',\n 'liquidOutline'\n ]);\n\n return series;\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n }\n}\n","import type { IAnimationTypeConfig } from '@visactor/vgrammar-core';\nimport { Factory } from '../../core/factory';\nimport type { ILiquidAnimationParams, LiquidAppearPreset } from './interface';\n\nconst Appear_Wave: IAnimationTypeConfig = {\n duration: 2000,\n loop: true,\n channel: {\n wave: { from: 0, to: 1 }\n }\n};\n\nconst Appear_Grow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n wave: { from: 0, to: 1 },\n height: params.height,\n dy: params.dy\n }\n };\n};\n\nconst Appear_WaveGrow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n wave: { from: 0, to: 1 },\n height: params.height,\n dy: params.dy\n }\n };\n};\n\nconst Appear_Group_Grow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n dy: params.dy\n }\n };\n};\n\nconst Appear_Group_WaveGrow = (params: ILiquidAnimationParams): IAnimationTypeConfig => {\n return {\n duration: 2000,\n channel: {\n dy: params.dy\n }\n };\n};\n\nexport function liquidPresetAnimation(\n params: ILiquidAnimationParams,\n preset: LiquidAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'wave':\n return Appear_Wave;\n case 'grow':\n return Appear_Grow(params);\n case 'waveGrow':\n return Appear_WaveGrow(params);\n default:\n return Appear_Wave;\n }\n}\n\nexport function liquidGroupPresetAnimation(\n params: ILiquidAnimationParams,\n preset: LiquidAppearPreset\n): IAnimationTypeConfig {\n switch (preset) {\n case 'wave':\n return Appear_Wave;\n case 'grow':\n return Appear_Group_Grow(params);\n case 'waveGrow':\n return Appear_Group_WaveGrow(params);\n default:\n return Appear_Wave;\n }\n}\n\nexport const registerLiquidAnimation = () => {\n Factory.registerAnimation('liquid', (params: ILiquidAnimationParams, preset: LiquidAppearPreset) => {\n return {\n appear: liquidPresetAnimation(params, preset),\n enter: liquidPresetAnimation(params, preset),\n exit: liquidPresetAnimation(params, preset)\n };\n });\n\n Factory.registerAnimation('liquidGroup', (params: ILiquidAnimationParams, preset: LiquidAppearPreset) => {\n return {\n appear: liquidGroupPresetAnimation(params, preset),\n enter: liquidGroupPresetAnimation(params, preset),\n exit: liquidGroupPresetAnimation(params, preset)\n };\n });\n};\n","import type { IPointLike } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { WaveEncoderSpec } from '../types';\nimport { registerAreaGraphic, registerGlyphGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport const registerWaveGlyph = () => {\n Factory.registerGlyph('wave', {\n wave0: 'area',\n wave1: 'area',\n wave2: 'area'\n })\n .registerChannelEncoder('wave', (channel, encodeValue, encodeValues, datum, element) => {\n const originPoints: IPointLike[] = new Array(21).fill(0).map((v, index) => {\n const waveHeight = index % 2 === 0 ? 20 : 0;\n return { x: -500 + 50 * index, y: encodeValues.y + waveHeight, y1: encodeValues.y + encodeValues.height };\n });\n const points0 = originPoints.map(point => {\n return { x: point.x + encodeValue * 100, y: point.y, y1: point.y1 };\n });\n const points1 = originPoints.map(point => {\n return { x: point.x + encodeValue * 200 - 40, y: point.y, y1: point.y1 };\n });\n const points2 = originPoints.map(point => {\n return { x: point.x + encodeValue * 300 - 20, y: point.y, y1: point.y1 };\n });\n return {\n wave0: { points: points0, x: 0, y: 0 },\n wave1: { points: points1, x: 0, y: 0 },\n wave2: { points: points2, x: 0, y: 0 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n wave0: { curveType: 'monotoneX', fillOpacity: 1 },\n wave1: { curveType: 'monotoneX', fillOpacity: 0.66 },\n wave2: { curveType: 'monotoneX', fillOpacity: 0.33 }\n };\n });\n registerGlyphMark();\n registerGlyphGraphic();\n registerAreaGraphic();\n};\n","import { Factory } from './../core/factory';\nimport { registerWaveGlyph } from '@visactor/vgrammar-core';\nimport type { ILiquidMarkSpec } from '../typings';\nimport type { IMarkStyle } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport { BaseMark } from './base';\nimport type { ILiquidMark } from '../series/liquid/liquid';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IGroupMark } from '@visactor/vgrammar-core';\n\nconst WAVE_GLYPH_TYPE = 'wave';\nexport class LiquidMark extends BaseMark implements ILiquidMark {\n static readonly type = MarkTypeEnum.liquid;\n readonly type = LiquidMark.type;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle = {\n ...super._getDefaultStyle(),\n wave: 0\n };\n return defaultStyle;\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: string | IGroupMark) {\n const view = this.getVGrammarView();\n\n // 声明语法元素\n const id = this.getProductId();\n this._product = view.glyph(WAVE_GLYPH_TYPE, group ?? view.rootMark).id(id);\n this._compiledProductId = id;\n }\n}\n\nexport const registerLiquidMark = () => {\n Factory.registerMark(LiquidMark.type, LiquidMark);\n registerWaveGlyph();\n};\n","import type { LiquidShapeType } from './interface';\n\nexport const getShapes = (shapesType: LiquidShapeType, size: number) => {\n if (shapesType === 'drop') {\n return pin(0, 0, size);\n }\n return shapesType;\n};\n\n/* Adapted from liquid shapes by ai-qing-hai and hustcc\n * https://github.com/antvis/G2\n * Licensed under the MIT\n\n * url: https://github.com/antvis/G2/blob/v5/src/shape/liquid/shapes.ts\n * License: https://github.com/antvis/G2/blob/v5/LICENSE\n * @license\n */\nfunction pin(x: number, y: number, radius: number) {\n const w = (radius * 4) / 3;\n const h = Math.max(w, radius * 2);\n const r = w / 2;\n\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\n // The start point of the path.\n const x0 = cx - dx;\n const y0 = cy + dy;\n\n // Control point.\n const cpX = x;\n const cpY = cy + r / Math.sin(theta);\n\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}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport type { Datum } from '../../typings';\nimport type { LiquidSeries } from './liquid';\n\nexport class LiquidSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n markTooltipKeyCallback = (datum: any) => {\n return (this.series as LiquidSeries).getValueField();\n };\n\n markTooltipValueCallback = (datum: any) => {\n const valueField = (this.series as LiquidSeries).getValueField();\n return datum[valueField];\n };\n\n shapeStrokeCallback = (datum: Datum) => {\n return this.series.getMarkInName('liquid').getAttribute('fill', datum) as any;\n };\n}\n","import type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid, max } from '@visactor/vutils';\nimport type { Datum, ILiquidMarkSpec, IPoint } from '../../typings';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { ILiquidPadding, ILiquidSeriesSpec, LiquidAppearPreset, LiquidShapeType } from './interface';\nimport type { IStateAnimateSpec } from '../../animation/spec';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLiquidAnimation } from './animation';\nimport { LiquidSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IGroupMark, IMark, IMarkRaw } from '../../mark/interface';\nimport { LineLikeSeriesSpecTransformer } from '../mixin/line-mixin-transformer';\nimport { registerLiquidMark } from '../../mark/liquid';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { ChartEvent } from '../../constant/event';\nimport { BaseSeries } from '../base';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerGroupMark } from '../../mark/group';\nimport { getShapes } from './util';\nimport { createRect, createSymbol } from '@visactor/vrender-core';\nimport { labelSmartInvert } from '@visactor/vrender-components';\nimport { normalizeLayoutPaddingSpec } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\nimport { LiquidSeriesTooltipHelper } from './tooltip-helper';\n\nexport type ILiquidMark = IMarkRaw;\nexport class LiquidSeries extends BaseSeries {\n static readonly type: string = SeriesTypeEnum.liquid;\n type = SeriesTypeEnum.liquid;\n\n static readonly mark: SeriesMarkMap = LiquidSeriesMark;\n static readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n readonly transformerConstructor = LineLikeSeriesSpecTransformer;\n private _liquidGroupMark?: IGroupMark;\n private _liquidMark?: ILiquidMark;\n private _liquidBackgroundMark?: IGroupMark | null = null;\n private _liquidOutlineMark?: IGroupMark | null = null;\n private _paddingSpec?: ILiquidPadding;\n private _marginSpec?: ILiquidPadding;\n\n private _heightRatio?: number;\n\n private _reverse?: boolean;\n private _maskShape?: LiquidShapeType;\n\n protected _valueField?: string;\n setValueField(field: string) {\n if (isValid(field)) {\n this._valueField = field;\n }\n }\n getValueField() {\n return this._valueField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._marginSpec = normalizeLayoutPaddingSpec(this._spec.outlineMargin) as ILiquidPadding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.outlinePadding) as ILiquidPadding;\n this.setValueField(this._spec.valueField);\n this._reverse = this._spec.reverse ?? false;\n this._maskShape = this._spec.maskShape ?? 'circle';\n }\n\n viewDataUpdate(d: DataView): void {\n super.viewDataUpdate(d);\n this._heightRatio = max(...this._data.getLatestData().map((d: Datum) => d[this._valueField]));\n }\n\n initMark(): void {\n this._initLiquidOutlineMark();\n this._initLiquidBackgroundMark();\n this._initLiquidMark();\n }\n\n initMarkStyle(): void {\n this._initLiquidOutlineMarkStyle();\n this._initLiquidBackgroundMarkStyle();\n this._initLiquidMarkStyle();\n }\n\n private _initLiquidOutlineMark() {\n this._liquidOutlineMark = this._createMark(LiquidSeries.mark.liquidOutline, {\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._liquidOutlineMark;\n }\n\n private _initLiquidBackgroundMark() {\n this._liquidBackgroundMark = this._createMark(LiquidSeries.mark.liquidBackground, {\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n return this._liquidBackgroundMark;\n }\n\n private _initLiquidMark() {\n this._liquidGroupMark = this._createMark(LiquidSeries.mark.liquidGroup, {\n parent: this._liquidBackgroundMark,\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as IGroupMark;\n this._liquidMark = this._createMark(LiquidSeries.mark.liquid, {\n parent: this._liquidGroupMark,\n isSeriesMark: true,\n skipBeforeLayouted: false\n }) as ILiquidMark;\n return this._liquidMark;\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getLiquidBackPosAndSize = this._getLiquidBackPosAndSize;\n this._markAttributeContext.getLiquidPosY = this._getLiquidPosY;\n this._markAttributeContext.getLiquidHeight = this._getLiquidHeight;\n }\n\n private _getLiquidPosY = () => {\n let liquidY = 0;\n const { height: liquidBackHeight, startY } = this._getLiquidBackPosAndSize();\n if (this._reverse) {\n liquidY = liquidBackHeight * this._heightRatio;\n } else {\n liquidY = liquidBackHeight * (1 - this._heightRatio);\n }\n return liquidY + startY;\n };\n\n private _getLiquidHeight = () => {\n const { height: liquidBackHeight } = this._getLiquidBackPosAndSize();\n return liquidBackHeight * this._heightRatio;\n };\n\n private _getLiquidBackPosAndSize = (isOutline: boolean = false) => {\n let {\n top: marginTop = 0,\n bottom: marginBottom = 0,\n // eslint-disable-next-line prefer-const\n left: marginLeft = 0,\n // eslint-disable-next-line prefer-const\n right: marginRight = 0\n } = this._marginSpec;\n let {\n top: paddingTop = 0,\n bottom: paddingBottom = 0,\n // eslint-disable-next-line prefer-const\n left: paddingLeft = 0,\n // eslint-disable-next-line prefer-const\n right: paddingRight = 0\n } = isOutline ? {} : this._paddingSpec;\n\n // 纠偏:对于正三角形而言, 上下留取相同的padidng/margin, 视觉上会看到下面留取的空白大于上面\n // 正确的做法是保持正三角形在60度方向上空白一致,换算到bottom就是/Math.sqrt(3), 换算到top就是 value/Math.sqrt(3)*2\n if (this._maskShape === 'triangle') {\n marginBottom = marginBottom / Math.sqrt(3);\n marginTop = (marginTop / Math.sqrt(3)) * 2;\n paddingBottom = paddingBottom / Math.sqrt(3);\n paddingTop = (paddingTop / Math.sqrt(3)) * 2;\n }\n\n const { width: regionWidth, height: regionHeight } = this._region?.getLayoutRect() ?? { width: 0, height: 0 };\n\n const deltaX = (marginLeft + paddingLeft - (marginRight + paddingRight)) / 2;\n const deltaY = (marginTop + paddingTop - (marginBottom + paddingBottom)) / 2;\n const x = regionWidth / 2 + deltaX;\n const y = regionHeight / 2 + deltaY;\n\n // 用于rect mark style\n let width = regionWidth - (marginLeft + marginRight + paddingLeft + paddingRight);\n let height = regionHeight - (marginTop + marginBottom + paddingTop + paddingBottom);\n // console.log('regionWidth', regionWidth, regionHeight)\n\n // 用于symbol mark style\n const size = Math.min(width, height);\n if (this._maskShape !== 'rect') {\n width = size;\n height = size;\n }\n\n return {\n x,\n y,\n size,\n width,\n height,\n startX: x - width / 2,\n startY: y - height / 2,\n endX: x + width / 2,\n endY: y + height / 2\n };\n };\n\n private _getLiquidBackPath = (isOutline: boolean = false) => {\n let symbolPath;\n if (this._maskShape === 'rect') {\n const { x, y, width, height } = this._getLiquidBackPosAndSize(isOutline);\n symbolPath = createRect({\n x: x - width / 2,\n y: y - height / 2,\n width,\n height,\n fill: true\n });\n } else {\n const { x, y, size } = this._getLiquidBackPosAndSize(isOutline);\n // console.log('size', size)\n symbolPath = createSymbol({\n x,\n y,\n size,\n symbolType: getShapes(this._spec.maskShape ?? 'circle', size),\n fill: true\n });\n }\n return [symbolPath];\n };\n\n private _initLiquidOutlineMarkStyle() {\n const liquidOutlineMark = this._liquidOutlineMark;\n liquidOutlineMark.created();\n this.setMarkStyle(\n liquidOutlineMark,\n {\n stroke: this.getColorAttribute(),\n width: () => this._region.getLayoutRect().width,\n height: () => this._region.getLayoutRect().height,\n path: () => this._getLiquidBackPath(true)\n },\n 'normal',\n AttributeLevel.Series\n );\n this._liquidOutlineMark.setMarkConfig({ interactive: false, zIndex: this.layoutZIndex });\n }\n\n private _initLiquidBackgroundMarkStyle() {\n const liquidBackgroundMark = this._liquidBackgroundMark;\n liquidBackgroundMark.created();\n // symbol mark x, y 指定center\n // rect mark x,y 指定左上角\n this.setMarkStyle(\n liquidBackgroundMark,\n {\n width: () => this._region.getLayoutRect().width,\n height: () => this._region.getLayoutRect().height,\n path: () => this._getLiquidBackPath()\n },\n 'normal',\n AttributeLevel.Series\n );\n this._liquidBackgroundMark.setMarkConfig({ interactive: false, zIndex: this.layoutZIndex, clip: true });\n }\n\n private _initLiquidMarkStyle() {\n const liquidMark = this._liquidMark;\n const liquidGroupMark = this._liquidGroupMark;\n if (liquidGroupMark) {\n this.setMarkStyle(liquidGroupMark, {\n x: () => {\n return this._region.getLayoutStartPoint().x + this._region.getLayoutRect().width / 2;\n },\n angle: this._reverse ? -Math.PI : 0,\n y: 0,\n dy: this._getLiquidPosY\n });\n }\n if (liquidMark) {\n // liquid mark x, y 指定左上角\n this.setMarkStyle(\n liquidMark,\n {\n // wave图元设置y后, 3个子area图元的point发生变化, 但vrender的渐变区域没有变化, 待vrender修复\n // 目前先采用下列方法配置:\n // 1. y强制指定为0, 保证图元不超出vrender的渐变区域\n // 2. 在外面包一层group图元, 使用group dy做偏移, 保证vrender渐变区域随图元位置变化而更新\n y: 0,\n dy: 0,\n height: this._getLiquidHeight,\n fill: this.getColorAttribute(),\n wave: 0\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new LiquidSeriesTooltipHelper(this);\n this._liquidMark && this._tooltipHelper.activeTriggerSet.mark.add(this._liquidMark);\n }\n\n initInteraction(): void {\n this._parseInteractionConfig(this._liquidMark ? [this._liquidMark] : []);\n }\n\n initAnimation() {\n const animationParams = {\n height: {\n from: 0,\n to: () => {\n return this._getLiquidHeight();\n }\n },\n dy: {\n from: () => {\n let liquidY = 0;\n const { height: liquidBackHeight, startY } = this._getLiquidBackPosAndSize();\n if (this._reverse) {\n liquidY = 0;\n } else {\n liquidY = liquidBackHeight;\n }\n return liquidY + startY;\n }\n }\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec)?.preset;\n this._liquidMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('liquid')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.liquid, this._spec, this._markAttributeContext)\n )\n );\n this._liquidGroupMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('liquidGroup')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.liquidGroup, this._spec, this._markAttributeContext)\n )\n );\n }\n\n protected initEvent(): void {\n super.initEvent();\n if (!this._spec.indicatorSmartInvert || !this._option.getChart().getComponentsByKey('indicator')) {\n return;\n }\n this.event.on(ChartEvent.renderFinished, () => {\n this._option\n .getChart()\n .getComponentsByKey('indicator')\n .forEach((indicatorComponent: any) => {\n // wave item比较特殊, 由wave1、wave2、wave3在x方向上偏移叠加而成\n // 由于在水波图中只需要判断y方向上是否重叠, 所以此处取wave1做y方向上对比\n const grammarMark = this._liquidMark.getProduct();\n const waveItem = (grammarMark.elements[0] as any).glyphGraphicItems.wave1;\n let { y1: waveY1, y2: waveY2 } = waveItem.globalAABBBounds;\n waveY1 += this._region.getLayoutStartPoint().y;\n waveY2 += this._region.getLayoutStartPoint().y;\n indicatorComponent\n ?.getIndicatorComponent()\n ?.getChildren()[0]\n ?.getChildren()\n .forEach((text: any) => {\n const { y1: textY1, y2: textY2 } = text.globalAABBBounds;\n if (waveY1 < textY1 && waveY2 > textY2) {\n const foregroundColor = text.attribute.fill;\n const backgroundColor = waveItem.attribute.fill;\n const invertColor = labelSmartInvert(foregroundColor, backgroundColor);\n text.setAttribute('fill', invertColor);\n }\n });\n });\n });\n }\n\n dataToPosition(data: Datum): IPoint {\n return null;\n }\n dataToPositionX(data: Datum): number {\n return null;\n }\n dataToPositionY(data: Datum): number {\n return null;\n }\n valueToPosition(value1: any, value2?: any): IPoint {\n return null;\n }\n\n getStatisticFields(): any[] {\n return [];\n }\n\n getGroupFields(): string[] {\n return [];\n }\n getStackGroupFields(): string[] {\n return [];\n }\n getStackValueField(): string {\n return '';\n }\n\n getActiveMarks(): IMark[] {\n return [this._liquidMark];\n }\n}\n\nexport const registerLiquidSeries = () => {\n registerLiquidMark();\n registerGroupMark();\n registerLiquidAnimation();\n Factory.registerSeries(LiquidSeries.type, LiquidSeries);\n};\n","import { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { ILiquidChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BaseChart } from '../base';\nimport { LiquidChartSpecTransformer } from './liquid-transformer';\nimport { registerLiquidSeries } from '../../series/liquid/liquid';\n\nexport class LiquidChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.liquid;\n static readonly seriesType: string = SeriesTypeEnum.liquid;\n static readonly transformerConstructor = LiquidChartSpecTransformer;\n readonly transformerConstructor = LiquidChartSpecTransformer;\n readonly type: string = ChartTypeEnum.liquid;\n readonly seriesType: string = SeriesTypeEnum.liquid;\n}\n\nexport const registerLiquidChart = () => {\n registerLiquidSeries();\n Factory.registerChart(LiquidChart.type, LiquidChart);\n};\n","import type { ICartesianAxisSpec } from '../../component/axis/cartesian/interface/spec';\nimport { CartesianChartSpecTransformer } from '../cartesian';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport type { IMosaicChartSpec } from './interface';\n\nexport class MosaicChartSpecTransformer<\n T extends IMosaicChartSpec = IMosaicChartSpec\n> extends CartesianChartSpecTransformer {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'barWidth',\n 'barMaxWidth',\n 'barMinWidth',\n 'barGapInGroup',\n 'barBackground',\n 'barMinHeight',\n 'stackCornerRadius',\n 'bar'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n\n protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'bottom',\n type: 'linear',\n label: {\n visible: false\n }\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n orient: 'left',\n type: 'linear'\n } as ICartesianAxisSpec;\n }\n}\n","import { BarSeries } from '../bar/bar';\n// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerRectMark } from '../../mark/rect';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerTextMark } from '../../mark/text';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { IMosaicSeriesSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { BarSeriesSpecTransformer } from '../bar/bar-transformer';\nimport { registerCartesianLinearAxis } from '../../component/axis/cartesian';\nimport { Direction } from '../../typings/space';\nimport {\n MOSAIC_CAT_END_PERCENT,\n MOSAIC_CAT_START_PERCENT,\n MOSAIC_VALUE_END_PERCENT,\n MOSAIC_VALUE_START_PERCENT\n} from '../../constant/data';\nimport { isNil } from '@visactor/vutils';\n\nexport class MosaicSeries extends BarSeries {\n static readonly type: string = SeriesTypeEnum.mosaic;\n type = SeriesTypeEnum.mosaic;\n\n protected declare _spec: T;\n\n static readonly transformerConstructor = BarSeriesSpecTransformer as any;\n readonly transformerConstructor = BarSeriesSpecTransformer as any;\n\n getStack() {\n return true;\n }\n\n getPercent() {\n return !!this.getSeriesField();\n }\n getGroupFields() {\n return this.direction === 'vertical' ? this._specXField : this._specYField;\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n const isPercent = this.getPercent();\n\n if (this.direction === Direction.horizontal) {\n if (isPercent) {\n this.setFieldX(MOSAIC_VALUE_END_PERCENT);\n this.setFieldX2(MOSAIC_VALUE_START_PERCENT);\n }\n\n this.setFieldY(MOSAIC_CAT_END_PERCENT);\n this.setFieldY2(MOSAIC_CAT_START_PERCENT);\n } else {\n if (isPercent) {\n this.setFieldY(MOSAIC_VALUE_END_PERCENT);\n this.setFieldY2(MOSAIC_VALUE_START_PERCENT);\n }\n\n this.setFieldX(MOSAIC_CAT_END_PERCENT);\n this.setFieldX2(MOSAIC_CAT_START_PERCENT);\n }\n }\n\n parseLabelStyle(labelStyle: any, labelSpec: any) {\n if (labelSpec?.filterByGroup && isNil(labelStyle.dataFilter)) {\n const allGroupFields = this.getGroupFields();\n const { field, type: filterType = 'max', filter } = labelSpec.filterByGroup;\n delete labelStyle.filterField;\n const fieldIndex = allGroupFields.indexOf(field);\n\n if (fieldIndex < 0) {\n return;\n }\n const isCatField = !!(fieldIndex % 2);\n const valueField = isCatField\n ? filterType === 'min'\n ? this.direction === Direction.horizontal\n ? this._fieldY2\n : this._fieldX2\n : this.direction === Direction.horizontal\n ? this._fieldY\n : this._fieldX\n : filterType === 'min'\n ? this.direction === Direction.horizontal\n ? this._fieldX2\n : this._fieldY2\n : this.direction === Direction.horizontal\n ? this._fieldX\n : this._fieldY;\n const filterFunc =\n filterType === 'min'\n ? (a: any, b: any) => {\n return a.data?.[valueField as string] < b.data?.[valueField as string];\n }\n : (a: any, b: any) => {\n return a.data?.[valueField as string] > b.data?.[valueField as string];\n };\n\n labelStyle.dataFilter = (data: any) => {\n const filteredData = {};\n\n data.forEach((d: any) => {\n const datum = d.data;\n const fieldValue = datum?.[field];\n\n if (isNil(fieldValue) || (filter && !filter(d))) {\n return;\n }\n\n if (!filteredData[fieldValue] || filterFunc(d, filteredData[fieldValue])) {\n filteredData[fieldValue] = d;\n }\n });\n return data.filter((d: any) => {\n const fieldValue = d.data?.[field];\n return filteredData[fieldValue] && filteredData[fieldValue] === d;\n });\n };\n }\n\n return labelStyle;\n }\n}\n\nexport const registerMosaicSeries = () => {\n registerRectMark();\n registerTextMark();\n registerFadeInOutAnimation();\n registerCartesianLinearAxis();\n Factory.registerSeries(MosaicSeries.type, MosaicSeries);\n};\n","import { ChartTypeEnum } from '../interface/type';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IMosaicChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { MosaicChartSpecTransformer } from './mosaic-transformer';\nimport { BaseChart } from '../base';\nimport { registerMosaicSeries } from '../../series/mosaic/mosaic';\nimport { Stack } from '../stack';\nimport type { IRegion } from '../../region';\nimport type { IStackCacheNode, IStackCacheRoot } from '../../util/data';\nimport { stackMosaic, stackMosaicTotal } from '../../util/data';\nimport { stackSplit } from '../../data/transforms/stack-split';\nimport { registerDataSetInstanceTransform } from '../../data/register';\n\nexport class MosaicChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.mosaic;\n static readonly seriesType: string = SeriesTypeEnum.mosaic;\n static readonly transformerConstructor = MosaicChartSpecTransformer;\n readonly transformerConstructor = MosaicChartSpecTransformer;\n readonly type: string = ChartTypeEnum.mosaic;\n readonly seriesType: string = SeriesTypeEnum.mosaic;\n protected _stack: Stack;\n\n protected _beforeInit() {\n if (this._dataSet) {\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n }\n }\n\n protected _initStack() {\n this._stack = new Stack(this, {\n afterStackRegion: this.handleAfterStackRegion\n });\n this._stack.init();\n }\n\n handleAfterStackRegion = (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => {\n region.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n\n if (stackData && stackValueField) {\n stackMosaicTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n stackMosaic(s, stackValueGroup[stackValue] as IStackCacheNode);\n }\n });\n };\n}\n\nexport const registerMosaicChart = () => {\n registerMosaicSeries();\n Factory.registerChart(MosaicChart.type, MosaicChart);\n};\n","// eslint-disable-next-line no-duplicate-imports\nimport { SeriesTypeEnum } from '../../series';\nimport type { IPictogramSeriesSpec } from '../../series/pictogram/interface';\nimport type { RegionSpec, ISeriesSpec } from '../../typings';\nimport { BaseChartSpecTransformer } from '../base';\nimport type { IPictogramChartSpec } from './interface';\n\nexport class PictogramChartSpecTransformer<\n T extends IPictogramChartSpec = IPictogramChartSpec\n> extends BaseChartSpecTransformer {\n protected _isValidSeries(type: string) {\n return type === SeriesTypeEnum.pictogram;\n }\n\n protected _getDefaultSeriesSpec(spec: IPictogramChartSpec): IPictogramSeriesSpec {\n return super._getDefaultSeriesSpec(spec, [\n 'type',\n 'nameField',\n 'valueField',\n 'svg',\n 'pictogram',\n 'defaultFillColor'\n ]);\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n\n spec.region.forEach((r: RegionSpec) => {\n r.coordinate = 'geo';\n });\n\n super.transformSeriesSpec(spec);\n }\n}\n","import { isValid } from '@visactor/vutils';\nimport type { ISeriesSpec } from '../../typings';\nimport { BaseSeriesSpecTransformer } from '../base';\nimport { svgSourceMap } from './svg-source';\nimport type { SVGParserResult } from '@visactor/vdataset';\n\nexport class PictogramSeriesSpecTransformer extends BaseSeriesSpecTransformer {\n protected _getDefaultSpecFromChart(chartSpec: any): any {\n const spec = super._getDefaultSpecFromChart(chartSpec) ?? {};\n const svg = chartSpec.svg;\n const elements = svgSourceMap.get(svg)?.latestData?.elements as SVGParserResult['elements'];\n if (elements && elements.length) {\n const names = elements.map(e => e.name).filter(n => isValid(n));\n names.forEach(name => {\n if (chartSpec[name]) {\n spec[name] = chartSpec[name];\n }\n });\n }\n return spec;\n }\n}\n","import type { ISeriesTooltipHelper } from '../interface';\nimport { BaseSeriesTooltipHelper } from '../base/tooltip-helper';\nimport { PictogramSeries } from './pictogram';\nimport { TooltipHandlerParams } from '../../component';\nimport { Datum } from '../../typings';\n\nexport class PictogramSeriesTooltipHelper extends BaseSeriesTooltipHelper implements ISeriesTooltipHelper {\n dimensionTooltipTitleCallback = (datum: any) => {\n const series = this.series as PictogramSeries;\n return this._getDimensionData(datum) ?? series.getDatumName(datum);\n };\n\n markTooltipValueCallback = (datum: Datum, params?: TooltipHandlerParams) => {\n const { measureFields } = this._seriesCacheInfo;\n if (measureFields[0] && datum.data) {\n return datum.data[measureFields[0]];\n }\n };\n\n markTooltipKeyCallback = (datum: Datum) => {\n return datum.data?.[this.series.getDimensionField()[0]];\n };\n}\n","import { isValid, merge } from '@visactor/vutils';\nimport type { DataView, SVGParserResult } from '@visactor/vdataset';\nimport { DEFAULT_DATA_INDEX } from '../../constant/data';\nimport { measureText } from '../../util';\n\nfunction isValidStrokeOrFill(attr: any) {\n return isValid(attr) && attr !== 'none' && !attr.includes?.('url');\n}\n\nconst getLineWidth = (attributes: any) => {\n const strokeWidth = parseFloat(attributes['strokeWidth']);\n if (!isNaN(strokeWidth)) return strokeWidth;\n\n const stroke = attributes['stroke'];\n return stroke && isValidStrokeOrFill(stroke) ? 1 : 0;\n};\n\nconst getFill = (attributes: any, defaultFill?: string) => {\n const fill = attributes['fill'] ?? defaultFill;\n return fill && isValidStrokeOrFill(fill) ? fill : undefined;\n};\n\nconst getStroke = (attributes: any, defaultStroke?: string) => {\n const stroke = attributes['stroke'] ?? defaultStroke;\n return stroke && isValidStrokeOrFill(stroke) ? stroke : false;\n};\n\nconst commonAttributes = (attributes: Record) => {\n return {\n ...attributes,\n x: parseFloat(attributes.x) || undefined,\n y: parseFloat(attributes.y) || undefined,\n fillStrokeOrder: false,\n fill: getFill(attributes),\n lineWidth: getLineWidth(attributes),\n stroke: getStroke(attributes)\n };\n};\n\nexport const graphicAttributeTransform = {\n group: (attributes: Record) => {\n const common = commonAttributes(attributes);\n return {\n ...common,\n visibleAll: common['visible'] !== false\n };\n },\n rule: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n x: parseFloat(attributes.x1),\n y: parseFloat(attributes.y1),\n x1: parseFloat(attributes.x2),\n y1: parseFloat(attributes.y2)\n };\n },\n rect: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n // rect 在 chrome 下有默认黑色填充,这里保持效果一致\n fill: getFill(attributes, '#000'),\n width: parseFloat(attributes.width),\n height: parseFloat(attributes.height)\n };\n },\n polygon: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n // rect 在 chrome 下有默认黑色填充,这里保持效果一致\n fill: getFill(attributes, '#000'),\n points: attributes.points\n .trim()\n .split(/\\s+/)\n .map((pair: string) => {\n const [x, y] = pair.split(',').map(Number);\n return { x, y };\n })\n };\n },\n line: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n points: attributes.points\n .trim()\n .split(/\\s+/)\n .map((pair: string) => {\n const [x, y] = pair.split(',').map(Number);\n return { x, y };\n })\n };\n },\n path: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n path: attributes.d,\n fillStrokeOrder: false\n };\n },\n arc: (attributes: Record) => {\n return {\n ...commonAttributes(attributes),\n outerRadius: attributes.r ?? attributes.ry,\n x: parseFloat(attributes.cx),\n y: parseFloat(attributes.cy),\n startAngle: 0,\n endAngle: Math.PI * 2,\n scaleX: parseFloat(attributes.rx) / parseFloat(attributes.ry) || 1,\n fill: getFill(attributes, '#000')\n };\n },\n text: (attributes: Record, value: string) => {\n return {\n ...commonAttributes(attributes),\n text: value,\n textAlign: attributes.textAlign ?? 'left',\n textBaseLine: attributes.textAnchor ?? 'middle',\n anchor: [0, 0],\n fill: getFill(attributes, '#000')\n };\n }\n};\n\nexport const pictogram = (data: DataView[]) => {\n if (!data || !data[0]) {\n return {};\n }\n const { elements } = data[0].latestData as SVGParserResult;\n\n // 处理最终属性\n if (elements && elements.length) {\n // TODO: type\n // elements.forEach((el: SVGParsedElementExtend, index: number) => {\n elements.forEach((el: any, index: number) => {\n el[DEFAULT_DATA_INDEX] = index;\n el._uniqueId = `${el.id}-${index}`;\n el.data = undefined;\n\n const { graphicType: type, transform } = el;\n\n let finalAttributes = {\n visible: el.attributes.visibility !== 'hidden' && el.attributes.visibility !== 'collapse'\n };\n\n if (el.graphicType === 'text') {\n merge(finalAttributes, el._inheritStyle, el.parent?._textGroupStyle, el.attributes);\n } else if (el.graphicType !== 'group') {\n merge(finalAttributes, el._inheritStyle, el.attributes);\n }\n\n if (graphicAttributeTransform[type]) {\n el._finalAttributes = graphicAttributeTransform[type](finalAttributes, el.value);\n } else {\n el._finalAttributes = finalAttributes;\n }\n\n if (transform) {\n el._finalAttributes.postMatrix = { ...transform };\n }\n });\n\n // 处理文字布局\n const texts = elements.filter(el => el.tagName === 'text');\n for (let i = 0; i < texts.length; i++) {\n const textId = texts[i]._uniqueId;\n const children = elements.filter(el => {\n let result = false;\n let parent = el.parent;\n while (parent) {\n if (parent._uniqueId === textId) {\n result = true;\n break;\n }\n parent = parent.parent;\n }\n return result;\n });\n\n if (children && children.length) {\n let startX = texts[i]._textGroupStyle?.x ?? 0;\n let curX = startX;\n\n for (let j = 0; j < children.length; j++) {\n const currentChild = children[j];\n if (currentChild.graphicType === 'group') {\n curX = startX;\n } else if (currentChild.value) {\n if (currentChild.parent._textGroupStyle.x === undefined) {\n const lastText = children\n .slice(0, j)\n .reverse()\n .find(c => c.graphicType === 'text' && c.value);\n if (lastText) {\n const width = measureText(lastText.value, lastText._finalAttributes).width;\n curX += width;\n }\n currentChild._finalAttributes.x = curX;\n }\n }\n }\n }\n }\n }\n\n return elements;\n};\n","import { DataView } from '@visactor/vdataset';\nimport type { SVGParsedElement, SVGParserResult } from '@visactor/vdataset';\nimport type { PanEventParam, ZoomEventParam } from '../../core';\nimport { Factory } from '../../core';\nimport { GeoSeries } from '../geo/geo';\nimport type { ISeriesSeriesInfo, SeriesMarkMap } from '../interface';\nimport { SeriesTypeEnum } from '../interface';\nimport type { IPictogramSeriesSpec } from './interface';\nimport { PictogramSeriesMark } from './constant';\nimport { getSVGSource, registerSVGSource, svgSourceMap, unregisterSVGSource } from './svg-source';\nimport { SeriesData } from '../base/series-data';\nimport { lookup } from '../../data/transforms/lookup';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport type { GroupMark } from '../../mark';\nimport { shouldMarkDoMorph } from '../../animation/utils';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { PictogramSeriesSpecTransformer } from './pictogram-transformer';\nimport type { IMatrix } from '@visactor/vutils';\nimport { Bounds, Matrix, isValid, merge } from '@visactor/vutils';\nimport type { Datum } from '../../typings';\nimport { createRect } from '@visactor/vrender-core';\nimport type { Group, IGraphic } from '@visactor/vrender-core';\nimport { VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IHoverSpec, ISelectSpec } from '../../interaction/interface';\nimport { STATE_VALUE_ENUM } from '../../compile/mark';\nimport type { EventType } from '@visactor/vgrammar-core';\nimport { registerElementHighlightByGraphicName, registerElementSelectByGraphicName } from '@visactor/vgrammar-core';\nimport type { IGroupMark, IMark, ITextMark } from '../../mark/interface';\nimport { PictogramSeriesTooltipHelper } from './tooltip-helper';\nimport { graphicAttributeTransform, pictogram } from '../../data/transforms/pictogram';\nimport type { IPoint } from '../../typings/coordinate';\n\nexport interface SVGParsedElementExtend extends SVGParsedElement {\n _finalAttributes: Record;\n _uniqueId: string; // 用于处理 svg 中 id 重复的情况\n}\n\nexport class PictogramSeries extends GeoSeries {\n static readonly type: string = SeriesTypeEnum.pictogram;\n type = SeriesTypeEnum.pictogram;\n static readonly mark: SeriesMarkMap = PictogramSeriesMark;\n static readonly transformerConstructor = PictogramSeriesSpecTransformer;\n\n svg!: string;\n\n protected _pictogramMark: GroupMark;\n protected _parsedSvgResult: SVGParserResult;\n private _labelMark: ITextMark;\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.svg = this._spec.svg;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n\n if (!this.svg) {\n this._option?.onError(`svg source is not specified !`);\n }\n this._parsedSvgResult = getSVGSource(this.svg)?.latestData;\n\n if (!this._parsedSvgResult) {\n this._option?.onError(`'${this.svg}' is not registered !`);\n }\n }\n\n getDatumCenter(datum: SVGParsedElementExtend): [number, number] {\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: SVGParsedElementExtend): string {\n return datum.name || datum._nameFromParent;\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(\n m => m.name && !m.name.includes('seriesGroup') && !m.name.includes('root') && m !== this._pictogramMark\n );\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getTransformMatrix = this.getRootMatrix.bind(this);\n this._markAttributeContext.coordToPosition = this.coordToPosition.bind(this);\n this._markAttributeContext.dataToPosition = this.dataToPosition.bind(this);\n }\n\n protected _defaultHoverConfig(selector: string[], finalHoverSpec: IHoverSpec) {\n return {\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n type: 'element-highlight-by-graphic-name',\n // trigger: finalHoverSpec.trigger as EventType,\n trigger: finalHoverSpec.trigger as EventType,\n triggerOff: 'pointerout' as EventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(selector: string[], finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty', 'self']\n : ['empty', finalSelectSpec.trigger];\n return {\n type: 'element-select-by-graphic-name',\n seriesId: this.id,\n regionId: this._region.id,\n selector,\n trigger: finalSelectSpec.trigger as EventType,\n triggerOff: triggerOff as EventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n initMark() {\n this._pictogramMark = this._createMark(\n PictogramSeries.mark.pictogram,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId()\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n ) as GroupMark;\n\n if (!this._pictogramMark) {\n return;\n }\n\n this._pictogramMark.setUserId(PictogramSeries.mark.pictogram.name);\n for (const element of this._mapViewData.getDataView().latestData as SVGParserResult['elements']) {\n const { graphicType: type, name, parent, id, _nameFromParent, _uniqueId } = element;\n\n const mark = this._createMark(\n { type, name: name ?? _nameFromParent },\n {\n groupKey: _uniqueId,\n isSeriesMark: false,\n skipBeforeLayouted: true,\n dataView: this._mapViewData.getDataView(),\n dataProductId: this._mapViewData.getProductId(),\n parent: (this._pictogramMark.getMarkInUserId(parent?._uniqueId) as IGroupMark) ?? this._pictogramMark\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n );\n\n if (mark) {\n mark.setUserId(_uniqueId); // id 必须唯一,但无法控制 svg 中元素有重复 id, 这里做一个保护\n if (mark.type !== 'group') {\n mark.setMarkConfig({ graphicName: mark.name });\n }\n mark.setTransform([\n {\n type: 'filter',\n callback: (datum: SVGParsedElementExtend) => {\n return datum._uniqueId === _uniqueId;\n }\n }\n ]);\n }\n }\n this._initLabelMark();\n }\n\n private _initLabelMark() {\n // @ts-ignore\n if (this._spec.label.visible !== true) {\n return;\n }\n\n const labelMark = this._createMark(PictogramSeries.mark.label, {\n isSeriesMark: false,\n parent: this._pictogramMark,\n groupKey: '_uniqueId',\n skipBeforeLayouted: true,\n depend: this.getMarksWithoutRoot()\n }) as ITextMark;\n\n if (labelMark) {\n this._labelMark = labelMark;\n this._labelMark.setDataView(this._mapViewData.getDataView());\n }\n }\n\n initLabelMarkStyle() {\n if (!this._labelMark) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: d => !!this._validElement(d as SVGParsedElementExtend),\n x: d => this.dataToPosition(d, true)?.x,\n y: d => this.dataToPosition(d, true)?.y,\n text: d => d[this.nameField],\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initMarkStyle() {\n const { root, viewBoxRect } = this._parsedSvgResult;\n const elements = this._mapViewData.getDataView().latestData as SVGParserResult['elements'];\n if (root) {\n this.setMarkStyle(\n this._pictogramMark,\n graphicAttributeTransform.group(root.attributes),\n 'normal',\n AttributeLevel.Built_In\n );\n if (root.transform) {\n this.setMarkStyle(\n this._pictogramMark,\n {\n postMatrix: () => root.transform\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n if (viewBoxRect) {\n // fill should be true or content will be invisible\n this._pictogramMark.setMarkConfig({\n clip: true,\n clipPath: [createRect({ ...viewBoxRect, fill: true }) as any]\n });\n }\n }\n for (const element of elements) {\n const { _uniqueId, _finalAttributes: attributes } = element as SVGParsedElementExtend;\n const mark = this._pictogramMark.getMarkInUserId(_uniqueId);\n const valid = this._validElement(element);\n if (mark) {\n // 描边粗细跟随缩放倍数\n this.setMarkStyle(mark, { keepStrokeScale: true }, 'normal', AttributeLevel.Built_In);\n if (valid) {\n this.initMarkStyleWithSpec(mark, merge({}, this._spec.pictogram, this._spec[mark.name]));\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Series);\n mark.setPostProcess('fill', (result, datum) => {\n return isValid(result) ? result : this._spec.defaultFillColor;\n });\n } else {\n // 对于没有设置 name 的元素,不支持响应事件、改变样式\n mark.setMarkConfig({ interactive: false });\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Built_In);\n }\n }\n }\n\n this.initLabelMarkStyle();\n }\n /** 在 svg 中使用 name attribute 标注了的图元*/\n protected _validElement(element: SVGParsedElement) {\n return element.name || element._nameFromParent;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new PictogramSeriesTooltipHelper(this);\n this.getMarksWithoutRoot().forEach(mark => {\n if (mark && mark.name) {\n this._tooltipHelper.activeTriggerSet.mark.add(mark);\n }\n });\n }\n\n dataToPosition(datum: Datum, global = false): IPoint {\n if (!datum) {\n return null;\n }\n const name = datum[this.nameField];\n if (!name) {\n return null;\n }\n\n const mark = this.getMarksWithoutRoot().filter(mark => mark.name === name);\n if (!mark || mark.length === 0) {\n return null;\n }\n let bounds = new Bounds();\n if (global) {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().getGroupGraphicItem().globalAABBBounds);\n });\n } else {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().getBounds());\n });\n }\n\n const point = { x: (bounds.x1 + bounds.x2) / 2, y: (bounds.y1 + bounds.y2) / 2 };\n\n if (global) {\n const { x, y } = this.getLayoutStartPoint();\n point.x -= x;\n point.y -= y;\n }\n return point;\n }\n\n coordToPosition(point: IPoint): IPoint | undefined {\n if (!point) {\n return null;\n }\n const { x, y } = point;\n const matrix = this.getRootMatrix();\n if (!matrix) {\n return null;\n }\n const position = {};\n matrix.getInverse().transformPoint({ x, y }, position as IPoint);\n return position as IPoint;\n }\n\n getRootMatrix() {\n return this.getPictogramRootGraphic()?.transMatrix as IMatrix;\n }\n\n getPictogramRootGraphic(): Group {\n return this._pictogramMark.getProduct()?.getGroupGraphicItem();\n }\n\n initData() {\n super.initData();\n const parsedSvg = svgSourceMap.get(this.svg);\n if (!parsedSvg) {\n this._option?.onError('no valid svg found!');\n }\n const svgData = new DataView(this._dataSet, { name: `pictogram_${this.id}_data` });\n registerDataSetInstanceTransform(this._dataSet, 'pictogram', pictogram);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n svgData\n .parse([parsedSvg], {\n type: 'dataview'\n })\n .transform({ type: 'pictogram' })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: 'name',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: '_nameFromParent',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', svgData.reRunAllTransform);\n this._mapViewData = new SeriesData(this._option, svgData);\n }\n\n mapViewDataUpdate() {\n this._mapViewData.updateData();\n }\n\n onLayoutEnd(ctx: any): void {\n super.onLayoutEnd(ctx);\n this._mapViewData?.getDataView().reRunAllTransform();\n }\n\n updateSVGSize() {\n const { width: regionWidth, height: regionHeight } = this.getLayoutRect();\n const regionCenterX = regionWidth / 2;\n const regionCenterY = regionHeight / 2;\n const root = this.getPictogramRootGraphic();\n if (root) {\n const bounds = root.AABBBounds;\n const { x1, x2, y1, y2 } = root.AABBBounds;\n const width = bounds.width();\n const height = bounds.height();\n\n const rootCenterX = (x1 + x2) / 2;\n const rootCenterY = (y1 + y2) / 2;\n\n const scaleX = regionWidth / width;\n const scaleY = regionHeight / height;\n const scale = Math.min(scaleX, scaleY);\n\n root.scale(scale, scale, { x: rootCenterX, y: rootCenterY });\n root.translate(regionCenterX - rootCenterX, regionCenterY - rootCenterY);\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n this._mapViewData.getDataView()?.target.addListener('change', this.mapViewDataUpdate.bind(this));\n // 必须在有 vrender mark 的时机后更新\n this.event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_LAYOUT_END, this.updateSVGSize.bind(this));\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.scale(scale, scale, scaleCenter);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.translate(delta[0], delta[1]);\n }\n }\n\n getMarkData(datum: Datum) {\n return datum.data ?? {};\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n data: {\n [field]: key\n }\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n}\n\nexport const registerPictogramSeries = () => {\n // 注册语法元素\n Factory.registerSeries(PictogramSeries.type, PictogramSeries);\n Factory.registerImplement('registerSVG', registerSVGSource);\n Factory.registerImplement('unregisterSVG', unregisterSVGSource);\n registerElementHighlightByGraphicName();\n registerElementSelectByGraphicName();\n};\n","import { BaseChart } from '../base/base-chart';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport { ChartTypeEnum } from '../interface/type';\nimport type { IPictogramChartSpec } from './interface';\nimport { Factory } from '../../core/factory';\nimport { PictogramChartSpecTransformer } from './pictogram-transformer';\nimport { registerPictogramSeries } from '../../series/pictogram/pictogram';\n\nexport class PictogramChart extends BaseChart {\n static readonly type: string = ChartTypeEnum.pictogram;\n static readonly seriesType: string = SeriesTypeEnum.pictogram;\n static readonly transformerConstructor = PictogramChartSpecTransformer;\n readonly transformerConstructor = PictogramChartSpecTransformer;\n readonly type: string = ChartTypeEnum.pictogram;\n readonly seriesType: string = SeriesTypeEnum.pictogram;\n}\n\nexport const registerPictogramChart = () => {\n registerPictogramSeries();\n Factory.registerChart(PictogramChart.type, PictogramChart);\n};\n","import { registerLiquidChart, registerMosaicChart, registerVennChart, registerPictogramChart } from '@visactor/vchart';\nexport { registerLiquidChart, registerMosaicChart, registerVennChart, registerPictogramChart } from '@visactor/vchart';\n\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nexport class VChartCharacter extends CharacterChart {\n static type = CharacterType.VCHART;\n}\n\nexport const registerAllVChart = () => {\n registerVennChart();\n registerLiquidChart();\n registerMosaicChart();\n registerPictogramChart();\n};\n","import { CharacterType } from '../../../constants/character';\nimport { CharacterChart } from '../character-chart';\nimport type { IChartGraphicAttribute } from '../graphic/vchart-graphic';\n\nfunction waterDrop(ctx: any, size: number, topX: number, topY: number) {\n ctx.beginPath();\n const centerX = topX;\n const centerY = topY - size / 2;\n ctx.moveTo(centerX, centerY);\n ctx.quadraticCurveTo(centerX + size / 2, centerY + size, centerX, centerY + size);\n ctx.quadraticCurveTo(centerX - size / 2, centerY + size, centerX, centerY);\n}\n\ninterface IWaveScatterChartGraphicAttribute extends IChartGraphicAttribute {\n waveDuration: number;\n waveRatio: number;\n waveColor: string;\n background: string;\n amplitude: number;\n frequency: number;\n categoryField: string;\n valueField: string;\n}\n\nexport class WaveScatterCharacter extends CharacterChart {\n static type = CharacterType.WAVE_SCATTER;\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'circlePacking',\n drill: true,\n layoutPadding: 5,\n circlePacking: {\n customShape: (data: any, attrs: any, path: any) => {\n waterDrop(path, attrs.outerRadius * 2, 0, 0);\n return path;\n },\n style: {\n // fill: 'linear-gradient(180deg, #0099ff11 100%, #0099ff33 0%)',\n // fillOpacity: (datum: any, _: any) => {\n // return datum.temperature / 40;\n // },\n // texture: 'wave',\n // textureColor: '#0099ff',\n // textureOptions: (datum: any) => {\n // return {\n // amplitude: 6,\n // frequency: 2,\n // percent: datum.temperature / 80,\n // }\n // },\n }\n }\n }\n };\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class ComponentConfigProcess extends ConfigProcessBase {}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport { CharacterBase } from '../character-base';\nimport type { IComponentCharacterConfig } from '../../interface/dsl/component';\nimport type { IComponentCharacterRuntime } from './interface/runtime';\nimport type { ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport { ComponentConfigProcess } from './component-config-process';\nimport type { ICharacterComponent } from './interface/character-component';\nimport type { IStoryEvent, ICharacterPickInfo } from '../../interface/event';\nimport { isArray } from '@visactor/vutils';\n\nexport abstract class CharacterComponent\n extends CharacterBase\n implements ICharacterComponent\n{\n visActorType: 'chart' | 'component' | 'table' | 'common' = 'component';\n protected declare _graphic: T;\n protected declare _config: IComponentCharacterConfig;\n\n protected _runtime: IComponentCharacterRuntime[] = [];\n\n constructor(config: IComponentCharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this.configProcess = new ComponentConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n tickTo(t: number): void {\n return;\n }\n\n getGraphicBySelector(selector: string | string[]) {\n if (isArray(selector)) {\n const graphics: Set = new Set();\n selector.forEach(s => {\n this._getGraphicBySelector(s).forEach(g => {\n graphics.add(g);\n });\n });\n return Array.from(graphics.values());\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const g = this._graphic;\n if (!selector) {\n return [g];\n }\n const selectorList = selector.split(' ');\n let graphics: IGraphic[] = [];\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n graphics.push(g);\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n graphics = graphics.filter(g => `#${g.name}` !== match && g.type !== match);\n } else {\n let g1: IGraphic[] = [];\n if (subSelector[0] === '#') {\n const name = subSelector.substring(1);\n g1 = g.getElementsByName(name) as IGraphic[];\n } else {\n g1 = g.getElementsByType(subSelector) as IGraphic[];\n }\n graphics = graphics.concat(g1);\n }\n });\n return graphics;\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n return {\n part: event.path[event.path.length - 1] === this._graphic.mainGraphic ? 'graphic' : 'text',\n graphicType: this._graphic.type\n };\n }\n\n protected _initGraphic(): void {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this.createAndAddGraphic(attribute);\n }\n\n protected abstract createAndAddGraphic(attribute: T1): void;\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n zIndex: this._config.zIndex ?? 0,\n visibleAll: true,\n x: 0,\n y: 0,\n textStyle: {}\n } as any;\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { merge } from '@visactor/vutils';\nimport type { GraphicType, IRichText } from '@visactor/vrender-core';\nimport { COMPONENT_NUMBER_TYPE } from './GroupComponent/component-group-graphic';\n\nexport class BaseComponentWithText extends AbstractComponent {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ITextComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, BaseComponentWithText.defaultAttributes, attributes));\n this._skipRenderAttributes.push('visible', 'visibleAll');\n }\n\n protected render(): void {\n // text在group中进行布局,如果给定了宽高的话\n // 如果没有给定宽高的话,就按照文本的宽高进行布局,同时要加上padding\n const { textStyle, padding, width, height } = this.attribute as ITextComponentAttributes;\n\n const { textAlign, textBaseline } = textStyle;\n\n const richtextTextAlign = textAlign === 'start' ? 'left' : textAlign === 'end' ? 'right' : textAlign;\n const richtextBaseline = textBaseline === 'alphabetic' ? 'middle' : textBaseline;\n let textConfig = this.transformTextAttrsToRichTextConfig(textStyle, 'left');\n\n // 先设置一个初始richtext,用于计算bounds\n const richtext = this.createOrUpdateChild(\n 'text',\n {\n ...(textStyle as any),\n width: 0,\n height: 0,\n textAlign: 'left',\n textBaseline: 'top',\n verticalDirection: 'top',\n textConfig,\n zIndex: 9999 // 保持文字在最上层\n },\n 'richtext'\n ) as IRichText;\n\n // 测量宽高\n let boxWidth = width;\n let boxHeight = height;\n if (!isFinite(boxWidth)) {\n boxWidth = richtext.AABBBounds.width() + (padding?.left ?? 0) + (padding?.right ?? 0);\n }\n if (!isFinite(boxHeight)) {\n boxHeight = richtext.AABBBounds.height() + (padding?.top ?? 0) + (padding?.bottom ?? 0);\n }\n\n // 重新设置richtext的位置,align设置在textConfig中,baseline设置到verticalDirection\n textConfig = this.transformTextAttrsToRichTextConfig(textStyle, richtextTextAlign);\n richtext.setAttributes({\n textConfig,\n verticalDirection: richtextBaseline,\n width: boxWidth,\n height: boxHeight,\n x: padding.left,\n y: padding.top\n });\n\n this.attribute.width = boxWidth;\n this.attribute.height = boxHeight;\n }\n\n protected transformTextAttrsToRichTextConfig(\n textStyle: ITextComponentAttributes['textStyle'],\n align: 'left' | 'center' | 'right'\n ) {\n let textConfig = textStyle.textConfig;\n\n // 如果是纯文本定义方式\n if (!(textConfig && textConfig.length) && textStyle.text) {\n const textList = Array.isArray(textStyle.text) ? textStyle.text : [textStyle.text];\n textConfig = textList.map((item, i) => {\n return {\n textAlign: align,\n lineHeight: textStyle.lineHeight,\n text: item + (i < textList.length - 1 ? '\\n' : '')\n };\n });\n } else if (textConfig && textConfig.length) {\n // 设置align\n textConfig.forEach(item => {\n item.textAlign = align;\n item.lineHeight = item.lineHeight ?? textStyle.lineHeight;\n });\n }\n\n return textConfig;\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IArc, IArcGraphicAttribute } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\nimport type { IArcComponentAttributes } from '../interface/character-arc';\n\nexport class ArcComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IArcComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ArcComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n this.renderPolygon();\n }\n protected renderPolygon() {\n const { graphic, padding, width, height } = this.attribute as IArcComponentAttributes;\n const attrs = { ...graphic };\n\n if (!attrs.x) {\n attrs.x = width / 2;\n }\n if (!attrs.y) {\n attrs.y = height / 2;\n }\n\n if (!(attrs as IArcGraphicAttribute).outerRadius) {\n attrs.outerRadius = Math.min(width - padding.left - padding.right, height - padding.top - padding.bottom) / 2;\n }\n\n this.createOrUpdateChild(\n 'arc',\n {\n ...attrs,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'arc'\n ) as IArc;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ArcComponent } from '../graphic/ArcComponent';\nimport type { IArcComponentAttributes } from '../interface/character-arc';\n\nexport class ArcCharacter extends CharacterComponent {\n static type = CharacterType.ARC;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IArcComponentAttributes): void {\n this._graphic = new ArcComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IImage } from '@visactor/vrender-core';\nimport type { IImageComponentAttributes } from '../interface/character-image';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class ImageComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n graphic: {\n image:\n ''\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n mainGraphic: IImage;\n\n constructor(attributes: IImageComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ImageComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderImage();\n }\n protected renderImage() {\n const { graphic, padding, width, height } = this.attribute as IImageComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n this.mainGraphic = this.createOrUpdateChild(\n 'image',\n { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null },\n 'image'\n ) as IImage;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ImageComponent } from '../graphic/ImageComponent';\nimport type { IImageComponentAttributes } from '../interface/character-image';\n\nexport class ImageCharacter extends CharacterComponent {\n static type = CharacterType.IMAGE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IImageComponentAttributes): void {\n this._graphic = new ImageComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IImage, ILine } from '@visactor/vrender-core';\nimport type { ILineComponentAttributes } from '../interface/character-line';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class LineComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ILineComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LineComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderLine();\n }\n protected renderLine() {\n const { graphic, padding } = this.attribute as ILineComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n this.createOrUpdateChild('line', { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null }, 'line') as ILine;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport type { ILineComponentAttributes } from '../interface/character-line';\nimport { LineComponent } from '../graphic/LineComponent';\nimport { LineRuntimeInstance } from '../runtime/line';\n\nexport class LineCharacter extends CharacterComponent {\n static type = CharacterType.LINE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILineComponentAttributes): void {\n this._graphic = new LineComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IPolygon } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\nimport type { IPolygonComponentAttributes } from '../interface/character-polygon';\n\nexport class PolygonComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IPolygonComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PolygonComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n this.renderPolygon();\n }\n protected renderPolygon() {\n const { graphic, padding } = this.attribute as IPolygonComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n\n this.createOrUpdateChild(\n 'polygon',\n {\n ...attrs,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'polygon' as any\n ) as IPolygon;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { PolygonComponent } from '../graphic/PolygonComponent';\nimport type { IPolygonComponentAttributes } from '../interface/character-polygon';\n\nexport class PolygonCharacter extends CharacterComponent {\n static type = CharacterType.POLYGON;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IPolygonComponentAttributes): void {\n this._graphic = new PolygonComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { IRectComponentAttributes } from '../interface/character-rect';\nimport type { IRect } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class RectComponent extends BaseComponentWithText {\n type: string = 'RectComponent';\n mainGraphic: IRect;\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IRectComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, RectComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderRect();\n }\n protected renderRect() {\n const { graphic, padding, width, height } = this.attribute as IRectComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n this.mainGraphic = this.createOrUpdateChild(\n 'rect',\n { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null },\n 'rect'\n ) as IRect;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { RectComponent } from '../graphic/RectComponent';\nimport type { IRectComponentAttributes } from '../interface/character-rect';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../../interface/event';\n\nexport class RectCharacter extends CharacterComponent {\n static type = CharacterType.RECT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IRectComponentAttributes): void {\n this._graphic = new RectComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n const info = super.checkEvent(event);\n if (info && event.path[event.path.length - 1] === this._group) {\n return false;\n }\n return info;\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { isArray, merge } from '@visactor/vutils';\nimport type { IShapeComponentAttributes } from '../interface/character-shape';\nimport type { ISymbol } from '@visactor/vrender-core';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nconst shapeMap: any = {\n star: 'M0 -1L0.22451398828979266 -0.3090169943749474L0.9510565162951535 -0.30901699437494745L0.3632712640026804 0.1180339887498948L0.5877852522924732 0.8090169943749473L8.326672684688674e-17 0.3819660112501051L-0.587785252292473 0.8090169943749476L-0.3632712640026804 0.11803398874989487L-0.9510565162951536 -0.30901699437494723L-0.22451398828979274 -0.30901699437494734Z'\n};\n\nexport class ShapeComponent extends BaseComponentWithText {\n type: string = 'ShapeComponent';\n mainGraphic: ISymbol;\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: IShapeComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, ShapeComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderShape();\n }\n protected renderShape() {\n const { graphic, padding, width, height } = this.attribute as IShapeComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n let dx = 0;\n let dy = 0;\n if (!attrs.size) {\n const w = width - padding.left - padding.right;\n const h = height - padding.top - padding.bottom;\n attrs.size = [w, h];\n dx = w / 2;\n dy = h / 2;\n } else if (isArray(attrs.size)) {\n dx = attrs.size[0] / 2;\n dy = attrs.size[1] / 2;\n } else {\n dx = attrs.size / 2;\n dy = attrs.size / 2;\n }\n\n this.mainGraphic = this.createOrUpdateChild(\n 'symbol',\n {\n ...attrs,\n symbolType: shapeMap[attrs.symbolType] ?? attrs.symbolType,\n dx,\n dy,\n scaleX: 1,\n scaleY: 1,\n angle: 0,\n postMatrix: null\n },\n 'symbol'\n ) as ISymbol;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { ShapeComponent } from '../graphic/ShapeComponent';\nimport type { IShapeComponentAttributes } from '../interface/character-shape';\n\nexport class ShapeCharacter extends CharacterComponent {\n static type = CharacterType.SHAPE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IShapeComponentAttributes): void {\n this._graphic = new ShapeComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { merge } from '@visactor/vutils';\nimport type { GraphicType, IRichText } from '@visactor/vrender-core';\nimport { COMPONENT_NUMBER_TYPE } from './GroupComponent/component-group-graphic';\n\n// 文字组件可以根据锚点进行定位\nexport class TextComponent extends AbstractComponent {\n type: GraphicType = 'vstory-component-group' as any;\n numberType: number = COMPONENT_NUMBER_TYPE;\n\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n constructor(attributes: ITextComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, TextComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n // text在group中进行布局,如果给定了宽高的话\n // 如果没有给定宽高的话,就按照文本的宽高进行布局,同时要加上padding\n const { textStyle, padding, width, height } = this.attribute as ITextComponentAttributes;\n\n const { textAlign, textBaseline } = textStyle;\n const { align = textAlign, baseline = textBaseline } = textStyle;\n\n const boxAlign = align === 'start' ? 'left' : align === 'end' ? 'right' : align;\n const boxBaseline = baseline;\n let textConfig = this.transformTextAttrsToRichTextConfig(textStyle, 'left');\n\n // 先设置一个初始richtext,用于计算bounds\n const richtext = this.createOrUpdateChild(\n 'text',\n {\n ...(textStyle as any),\n width: 0,\n height: 0,\n textAlign: 'left',\n textBaseline: 'top',\n verticalDirection: 'top',\n textConfig\n },\n 'richtext'\n ) as IRichText;\n\n // 测量宽高\n let boxWidth = width;\n let boxHeight = height;\n if (!isFinite(boxWidth)) {\n boxWidth = richtext.AABBBounds.width() + (padding?.left ?? 0) + (padding?.right ?? 0);\n }\n if (!isFinite(boxHeight)) {\n boxHeight = richtext.AABBBounds.height() + (padding?.top ?? 0) + (padding?.bottom ?? 0);\n }\n\n // 重新设置richtext的位置,align设置在textConfig中,baseline设置到verticalDirection\n textConfig = this.transformTextAttrsToRichTextConfig(\n textStyle,\n textAlign === 'start' ? 'left' : textAlign === 'end' ? 'right' : textAlign\n );\n richtext.setAttributes({\n textConfig,\n verticalDirection: textBaseline === 'alphabetic' ? 'middle' : textBaseline,\n width: boxWidth,\n height: boxHeight\n // x: boxWidth / 2,\n // y: boxHeight / 2\n });\n\n this.attribute.width = boxWidth;\n this.attribute.height = boxHeight;\n\n if (boxAlign === 'left') {\n this.attribute.dx = 0;\n } else if (boxAlign === 'right') {\n this.attribute.dx = -boxWidth;\n } else {\n this.attribute.dx = -boxWidth / 2;\n }\n\n if (boxBaseline === 'top') {\n this.attribute.dy = 0;\n } else if (boxBaseline === 'bottom') {\n this.attribute.dy = -boxHeight;\n } else {\n this.attribute.dy = -boxHeight / 2;\n }\n }\n\n protected transformTextAttrsToRichTextConfig(\n textStyle: ITextComponentAttributes['textStyle'],\n align: 'left' | 'center' | 'right'\n ) {\n let textConfig = textStyle.textConfig;\n\n // 如果是纯文本定义方式\n if (!(textConfig && textConfig.length) && textStyle.text) {\n const textList = Array.isArray(textStyle.text) ? textStyle.text : [textStyle.text];\n textConfig = textList.map((item, i) => {\n return {\n textAlign: align,\n lineHeight: textStyle.lineHeight,\n text: item + (i < textList.length - 1 ? '\\n' : '')\n };\n });\n } else if (textConfig && textConfig.length) {\n // 设置align\n textConfig.forEach(item => {\n item.textAlign = align;\n item.lineHeight = item.lineHeight ?? textStyle.lineHeight;\n });\n }\n\n return textConfig;\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport type { ITextComponentAttributes } from '../interface/character-text';\nimport { TextComponent } from '../graphic/TextComponent';\nimport { TextRuntimeInstance } from '../runtime/text';\n\nexport class TextCharacter extends CharacterComponent {\n static type = CharacterType.TEXT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ITextComponentAttributes): void {\n this._graphic = new TextComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n textStyle: {\n textAlign: 'center',\n textBaseline: 'top',\n text: 'input your text',\n fontSize: 16,\n ignoreBuf: true\n }\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { registerGroup, registerSymbol, registerLine, registerText } from '@visactor/vrender-kits';\n\nexport function loadTimelineComponent() {\n registerGroup();\n registerText();\n registerSymbol();\n registerLine();\n}\n","import { isArray, merge } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { loadTimelineComponent } from './register';\nimport type { TimelineAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { getTheme, type IGraphicAttribute, type IGroup, type ILine, type IText } from '@visactor/vrender-core';\nimport type { ISymbol } from '@visactor/vrender-core';\n\nloadTimelineComponent();\n\nexport class Timeline extends AbstractComponent> {\n name = 'timeline';\n\n private _line?: ILine;\n private _activeLine?: ILine;\n private _symbolGroup?: IGroup;\n private _labelGroup?: IGroup;\n private _timesPercent?: number[];\n\n static defaultAttributes: Partial = {\n labelSpace: 10,\n pointLayoutMode: 'space-around',\n animation: true,\n symbolStyle: {\n fill: 'black',\n size: 12,\n symbolType: 'circle'\n },\n activeSymbolStyle: {\n fill: 'orange',\n size: 16\n },\n lineStyle: {\n lineDash: [2, 2],\n lineCap: 'butt',\n stroke: 'black',\n lineWidth: 2\n },\n activeLineStyle: {\n stroke: 'orange',\n lineWidth: 4\n },\n labelStyle: {\n fontSize: 12,\n fill: 'black',\n textAlign: 'center',\n textBaseline: 'top'\n },\n activeLabelStyle: {\n fontSize: 14,\n fill: 'orange'\n },\n clipRange: 0\n };\n\n constructor(attributes: TimelineAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Timeline.defaultAttributes, attributes));\n }\n\n protected render(): void {\n const {\n width,\n lineStyle,\n activeLineStyle,\n symbolStyle,\n activeSymbolStyle,\n labelStyle,\n activeLabelStyle,\n times,\n pointLayoutMode,\n labelSpace,\n clipRange,\n animation\n } = this.attribute;\n\n if (!(times && times.length)) {\n return;\n }\n\n // 计算线段中心的y位置,考虑线宽和symbol宽度\n const symbolHeight = (isArray(symbolStyle.size) ? symbolStyle.size[1] : symbolStyle.size) || 0;\n const activeSymbolHeight =\n (isArray(activeSymbolStyle.size) ? activeSymbolStyle.size[1] : activeSymbolStyle.size) || 0;\n const lineSymbolHeight = Math.max(\n lineStyle.lineWidth || 0,\n activeLineStyle.lineWidth || 0,\n symbolHeight,\n activeSymbolHeight\n );\n const lineY = lineSymbolHeight / 2;\n const lineAttr = {\n y: lineY,\n points: [\n { x: 0, y: 0 },\n { x: width, y: 0 }\n ]\n };\n this._line = this.createOrUpdateChild(\n 'line-axes',\n {\n ...lineStyle,\n ...lineAttr\n },\n 'line'\n ) as ILine;\n this._activeLine = this.createOrUpdateChild(\n 'active-line-axes',\n {\n ...activeLineStyle,\n ...lineAttr,\n clipRange\n },\n 'line'\n ) as ILine;\n\n const activeWidth = width * clipRange;\n\n const symbolGroup = this.createOrUpdateChild(\n 'symbol-group',\n {\n y: lineY\n },\n 'group'\n ) as IGroup;\n const symbolSpace =\n times.length === 1\n ? width\n : pointLayoutMode === 'space-between'\n ? width / (times.length - 1)\n : width / times.length;\n const symbolStartX = pointLayoutMode === 'space-between' ? 0 : symbolSpace / 2;\n this._timesPercent = times.map((_, i) => (symbolStartX + symbolSpace * i) / width);\n\n times.forEach((item, i) => {\n const x = this._timesPercent[i] * width;\n symbolGroup.createOrUpdateChild(\n item.label,\n {\n ...symbolStyle,\n x\n },\n 'symbol'\n );\n });\n this._symbolGroup = symbolGroup;\n\n const labelY = lineSymbolHeight + labelSpace;\n const labelGroup = this.createOrUpdateChild(\n 'label-group',\n {\n y: labelY\n },\n 'group'\n ) as IGroup;\n\n times.forEach((item, i) => {\n const x = this._timesPercent[i] * width;\n labelGroup.createOrUpdateChild(\n item.label,\n {\n ...labelStyle,\n x,\n text: item.label\n },\n 'text'\n );\n });\n this._labelGroup = labelGroup;\n\n const setActive = (group: IGroup, activeStyle: Partial) => {\n group.forEachChildren((label: IText) => {\n if (label.currentStates) {\n const currentStates = label.currentStates;\n label.clearStates();\n label.useStates(currentStates, false);\n }\n label.states = {\n active: activeStyle\n };\n if (label.attribute.x <= activeWidth) {\n label.useStates(['active'], animation);\n }\n });\n };\n\n setActive(labelGroup, activeLabelStyle);\n setActive(symbolGroup, activeSymbolStyle);\n }\n\n appearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // 基准时间,line[0, 500], point[100, 600] 100 onebyone, pointNormal[600, 1000] 90+90 onebyone, activeLine[500, 700]\n // line和activeLine的clipRange\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n const { activeLabelStyle, activeSymbolStyle } = this.attribute;\n const percent = duration / 1000;\n const lineDuration = percent * 500;\n const activeLineDuration = percent * 200;\n const perSymbolDuration = percent * 100;\n const perSymbolNormalDuration = percent * 90;\n const symbolDelay = percent * 100;\n const symbolNormalDelay = percent * 600;\n if (this._line) {\n this._line.setAttributes({ clipRange: 0 });\n this._line.animate().to({ clipRange: 1 }, lineDuration, easing as any);\n }\n if (this._activeLine) {\n this._activeLine.setAttributes({ opacity: 0 });\n this._activeLine\n .animate()\n .wait(500)\n .to({ opacity: 1 }, activeLineDuration, easing as any);\n }\n if (this._symbolGroup) {\n const size = this._symbolGroup.count - 1;\n const delay = percent * (size === 1 ? 0 : (500 - 100) / (size - 1));\n const delayNormal = percent * (size === 1 ? 0 : (400 - 160) / (size - 1));\n this._symbolGroup.forEachChildren((symbol: ISymbol, i) => {\n const originAttrs: Record = {};\n Object.keys(activeSymbolStyle).forEach(k => {\n originAttrs[k] = (symbol.attribute as any)[k];\n });\n\n symbol.setAttributes({ opacity: 0 });\n symbol\n .animate()\n .wait(symbolDelay + delay * i)\n .to({ opacity: 1 }, perSymbolDuration, easing as any);\n symbol\n .animate()\n .wait(symbolNormalDelay + delayNormal * i)\n .to({ ...activeSymbolStyle }, perSymbolNormalDuration, easing as any)\n .to({ ...originAttrs }, perSymbolNormalDuration, easing as any);\n });\n }\n if (this._labelGroup) {\n const size = this._labelGroup.count - 1;\n const delay = percent * (size === 1 ? 0 : (500 - 100) / (size - 1));\n const delayNormal = percent * (size === 1 ? 0 : (400 - 160) / (size - 1));\n this._labelGroup.forEachChildren((label: IText, i) => {\n const originAttrs: Record = {};\n Object.keys(activeLabelStyle).forEach(k => {\n originAttrs[k] = (label.attribute as any)[k];\n });\n label.setAttributes({ opacity: 0 });\n label\n .animate()\n .wait(symbolDelay + delay * i)\n .to({ opacity: 1 }, perSymbolDuration, easing as any);\n label\n .animate()\n .wait(symbolNormalDelay + delayNormal * i)\n .to({ dy: 10, ...activeLabelStyle }, perSymbolNormalDuration, easing as any)\n .to({ dy: 0, ...originAttrs }, perSymbolNormalDuration, easing as any);\n });\n }\n }\n\n goto(flag: 1 | -1, animateConfig: { duration?: number; easing?: string }) {\n let { clipRange } = this.attribute;\n const { animation } = this.attribute;\n\n // 合法性判断\n if (flag > 0) {\n if (clipRange >= 1) {\n return;\n } else if (clipRange < 0) {\n clipRange = 0;\n }\n } else {\n if (clipRange <= 0) {\n return;\n } else if (clipRange > 1) {\n clipRange = 1;\n }\n }\n\n if (clipRange !== this.attribute.clipRange) {\n this.setAttributes({ clipRange });\n }\n\n // 判断区间\n let i = 0;\n for (; i < this._timesPercent.length; i++) {\n if (clipRange < this._timesPercent[i]) {\n break;\n }\n }\n\n const nextClipRange = flag > 0 ? this._timesPercent[i] || 1 : this._timesPercent[i - 1] || 0;\n if (animation) {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n // const actDuration =\n // (Math.abs(nextClipRange - clipRange) / ((this._timesPercent[i] ?? 1) - (this._timesPercent[i - 1] ?? 0))) *\n // duration;\n this.animate().to({ clipRange: nextClipRange }, duration, easing as any);\n } else {\n this.setAttributes({ clipRange: nextClipRange });\n }\n }\n\n forward(animateConfig: { duration?: number; easing?: string }) {\n this.goto(1, animateConfig);\n }\n\n backward(animateConfig: { duration?: number; easing?: string }) {\n this.goto(-1, animateConfig);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { Timeline } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport type { ITimelineComponentAttributes } from '../interface/character-timeline';\nimport { BaseComponentWithText } from './BaseComponentWithText';\n\nexport class TimelineComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n timeline: Timeline;\n\n constructor(attributes: ITimelineComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, TimelineComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderTimeline();\n }\n protected renderTimeline() {\n const { graphic, padding, width, height } = this.attribute as ITimelineComponentAttributes;\n const attrs: any = { ...graphic, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n if (!this.timeline) {\n this.timeline = new Timeline(attrs);\n this.add(this.timeline);\n } else {\n this.timeline.setAttributes(attrs);\n }\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { TimelineComponent } from '../graphic/TimelineComponent';\nimport type { ITimelineComponentAttributes } from '../interface/character-timeline';\n\nexport class TimelineCharacter extends CharacterComponent {\n static type = CharacterType.TIMELINE;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ITimelineComponentAttributes): void {\n this._graphic = new TimelineComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n graphic: {\n activeSymbolStyle: {\n size: 26\n },\n activeLineStyle: {\n lineWidth: 1.5\n }\n } as any\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport type { IUnitGraphicAttributes, IUnitItemAttributes } from './interface';\nimport { merge } from '@visactor/vutils';\nimport { createSymbol, type ISymbol } from '@visactor/vrender-core';\nimport { allParamsEqualTo, getDiffedParams } from '../../../../utils/equal';\n\ninterface IGridConfig {\n rows: number;\n cols: number;\n unitWidth: number;\n unitHeight: number;\n offsetX: number;\n offsetY: number;\n}\n\nexport class Unit extends AbstractComponent> {\n name = 'unit';\n\n static defaultAttributes: Partial = {\n width: 100,\n height: 100,\n gap: [0.5, 0.5],\n aspect: 1,\n direction: 'horizontal',\n padding: {\n top: 0,\n bottom: 0,\n right: 0,\n left: 0\n },\n count: 250,\n countPerSymbol: 1,\n units: []\n };\n\n _duration: number;\n _stagger: number;\n\n constructor(attributes: IUnitGraphicAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Unit.defaultAttributes, attributes));\n this._skipRenderAttributes.push('visible', 'visibleAll');\n }\n\n protected render(): void {\n const gridConfig = this._calculateGrid(this.attribute as IUnitGraphicAttributes);\n\n const { rows, cols, unitWidth, unitHeight, offsetX, offsetY } = gridConfig;\n const { count, countPerSymbol, units, padding, gap, direction } = this.attribute;\n const startX = padding.left + unitWidth / 2;\n const startY = padding.top + unitHeight / 2;\n const isHorizontal = direction === 'horizontal';\n\n const symbolCount = Math.ceil(count / countPerSymbol);\n\n // 判断子元素数量\n const currChildCount = this.count - 1;\n const expectChildCount = symbolCount;\n if (currChildCount > expectChildCount) {\n // 要删子元素\n for (let i = currChildCount; i > expectChildCount; i--) {\n this.removeChild(this._lastChild as ISymbol);\n }\n } else if (currChildCount < expectChildCount) {\n // 要增加子元素\n for (let i = currChildCount; i < expectChildCount; i++) {\n const symbol = createSymbol({});\n // 设置新元素标记\n symbol._new = true;\n this.add(symbol);\n }\n }\n\n this.forEachChildren((graphic: ISymbol, i: number) => {\n const col = isHorizontal ? Math.floor(i / rows) : i % cols;\n const row = isHorizontal ? i % rows : Math.floor(i / cols);\n const dx =\n startX +\n col * (unitWidth + gap[0] * unitWidth + offsetX) +\n (isHorizontal && cols <= 1 ? offsetX : 0) +\n (!isHorizontal && rows <= 1 ? offsetX : 0);\n const dy =\n startY +\n row * (unitHeight + gap[1] * unitHeight + offsetY) +\n (!isHorizontal && rows <= 1 ? offsetY : 0) +\n (isHorizontal && cols <= 1 ? offsetY : 0);\n\n // 执行update动画\n if (this._duration) {\n if (!graphic._new) {\n // 属性有diff,走动画去更新\n const nextAttrs = {\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n };\n if (!allParamsEqualTo(nextAttrs, graphic.attribute)) {\n const diffedAttrs = getDiffedParams(graphic.attribute, nextAttrs);\n if (this._stagger) {\n const delay = Math.random() * this._duration * (1 - this._stagger);\n graphic\n .animate()\n .wait(delay)\n .to(diffedAttrs, this._stagger * this._duration, 'linear');\n } else {\n graphic.animate().to(diffedAttrs, this._duration, 'linear');\n }\n }\n } else {\n // 入场执行另外的入场动画\n graphic.setAttributes({\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n });\n }\n } else {\n // 不执行动画\n graphic.setAttributes({\n ...(this.getUnitStyle(i, units, count, symbolCount) || {}),\n dx,\n dy,\n size: Math.max(unitWidth, unitHeight)\n });\n }\n\n graphic._new = false;\n });\n }\n\n protected getUnitStyle(\n index: number,\n units: IUnitItemAttributes[],\n count: number,\n symbolCount: number\n ): IUnitItemAttributes['style'] | void {\n const unit =\n units.find(item => {\n const range = [...item.range];\n if (range[0] == null) {\n range[0] = 0;\n }\n if (range[1] == null) {\n range[1] = count - 1;\n }\n const actualIdx = (count / symbolCount) * index;\n return range[0] <= actualIdx && range[1] >= actualIdx;\n }) || units[0];\n\n return unit && unit.style;\n }\n\n /**\n * 入场动画\n * @param animateConfig\n */\n appearAnimate(animateConfig: { duration?: number; easing?: string }) {\n // TODO 后续支持特殊入场效果\n const { duration = 1000, easing = 'linear' } = animateConfig;\n this.forEachChildren((g: ISymbol) => {\n g.setAttributes({ opacity: 0 });\n g.animate().to({ opacity: 1 }, duration, easing as any);\n });\n return;\n }\n\n styleAnimate(\n attrs: any,\n animation: { duration?: number; easing?: string; stagger?: { enable?: boolean; ratio?: number } }\n ) {\n const { duration, easing, stagger = {} } = animation;\n this._duration = duration || 0;\n if (stagger?.enable) {\n this._stagger = stagger?.ratio ?? 0.7;\n }\n this.setAttributes(attrs);\n this._stagger = 0;\n this._duration = 0;\n }\n\n protected _calculateMinPrimaryCount(\n primaryLength: number,\n secondaryLength: number,\n aspect: number,\n gap: [number, number],\n count: number\n ): number {\n const a = Math.pow(secondaryLength * (1 + gap[1]), 2);\n const b = gap[0] * aspect * primaryLength - secondaryLength * gap[1];\n const c = -count * primaryLength * aspect * (1 + gap[0]) * (1 + gap[1]);\n const delta = Math.sqrt(b * b - 4 * a * c);\n return Math.ceil((-b + delta) / (2 * a));\n }\n\n protected _convergeGrid(\n minPrimaryCount: number,\n count: number,\n primaryLength: number,\n secondaryLength: number,\n aspect: number,\n gap: [number, number]\n ) {\n let primaryCount = minPrimaryCount;\n let unitPrimarySize;\n let unitSecondarySize;\n let secondaryCount;\n let totalWidth;\n\n do {\n unitPrimarySize = primaryLength / (primaryCount * (1 + gap[1]) - gap[1]);\n unitSecondarySize = aspect * unitPrimarySize;\n secondaryCount = Math.ceil(count / primaryCount);\n totalWidth = secondaryCount * unitSecondarySize + (secondaryCount - 1) * gap[0] * unitSecondarySize;\n } while (totalWidth > secondaryLength && primaryCount++);\n\n return { primaryCount, secondaryCount, unitPrimarySize, unitSecondarySize };\n }\n\n protected _calculateGrid(attributes: IUnitGraphicAttributes): IGridConfig {\n const { width, height, padding, count, gap, aspect, direction, countPerSymbol } = attributes;\n const symbolCount = Math.ceil(count / countPerSymbol);\n const innerWidth = width - padding.left - padding.right;\n const innerHeight = height - padding.top - padding.bottom;\n\n const isHorizontal = direction === 'horizontal';\n const primaryLength = isHorizontal ? innerHeight : innerWidth;\n const secondaryLength = isHorizontal ? innerWidth : innerHeight;\n const adjustedAspect = isHorizontal ? aspect : 1 / aspect;\n const adjustedGap: [number, number] = isHorizontal ? gap : [gap[1], gap[0]];\n\n const minPrimaryCount = this._calculateMinPrimaryCount(\n primaryLength,\n secondaryLength,\n adjustedAspect,\n adjustedGap,\n symbolCount\n );\n const { primaryCount, secondaryCount, unitPrimarySize, unitSecondarySize } = this._convergeGrid(\n minPrimaryCount,\n symbolCount,\n primaryLength,\n secondaryLength,\n adjustedAspect,\n adjustedGap\n );\n\n const offset =\n (secondaryLength -\n secondaryCount * unitSecondarySize -\n (secondaryCount - 1) * adjustedGap[0] * unitSecondarySize) /\n (secondaryCount - 1);\n\n let primaryOffset;\n if (secondaryCount <= 1) {\n if (symbolCount <= 1) {\n primaryOffset = (primaryLength - unitPrimarySize) / 2;\n } else {\n primaryOffset =\n (primaryLength - symbolCount * unitPrimarySize - (symbolCount - 1) * unitPrimarySize * adjustedGap[1]) /\n (symbolCount - 1);\n }\n } else {\n primaryOffset = 0;\n }\n const secondaryOffset = secondaryCount <= 1 ? (secondaryLength - unitSecondarySize) / 2 : offset;\n\n return isHorizontal\n ? {\n rows: primaryCount,\n cols: secondaryCount,\n unitWidth: unitSecondarySize,\n unitHeight: unitPrimarySize,\n offsetX: secondaryOffset,\n offsetY: primaryOffset\n }\n : {\n rows: secondaryCount,\n cols: primaryCount,\n unitWidth: unitPrimarySize,\n unitHeight: unitSecondarySize,\n offsetX: primaryOffset,\n offsetY: secondaryOffset\n };\n }\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '../BaseComponentWithText';\nimport type { IUnitComponentAttributes } from './interface';\nimport { Unit } from './Unit';\n\nexport class UnitComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n clip: true,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n unit: Unit;\n\n constructor(attributes: IUnitComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, UnitComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderUnit();\n }\n protected renderUnit() {\n const { graphic, padding, width, height } = this.attribute as IUnitComponentAttributes;\n const attrs: any = { ...graphic, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n if (!this.unit) {\n this.unit = new Unit(attrs);\n this.add(this.unit);\n } else {\n this.unit.setAttributes(attrs);\n }\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterType } from '../../../constants/character';\nimport { CharacterComponent } from '../character-component';\nimport { UnitComponent } from '../graphic/UnitComponent.ts/UnitComponent';\nimport type { IUnitComponentAttributes } from '../graphic/UnitComponent.ts/interface';\n\nexport class UnitCharacter extends CharacterComponent {\n static type = CharacterType.UNIT;\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: IUnitComponentAttributes): void {\n this._graphic = new UnitComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n graphic: {\n activeSymbolStyle: {\n size: 26\n },\n activeLineStyle: {\n lineWidth: 1.5\n }\n } as any\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { ConfigProcessBase } from '../config-transform/config-process';\n\nexport class TableConfigProcess extends ConfigProcessBase {}\n","import type { IGroup, ITicker, ITimeline } from '@visactor/vrender-core';\nimport { DefaultTimeline, ManualTicker } from '@visactor/vrender-core';\nimport type { ICharacterPickInfo, IStoryEvent } from '../../interface/event';\nimport { CharacterBase } from '../character-base';\nimport type { ITableGraphicAttribute } from './graphic/vtable-graphic';\nimport { VTableGraphic } from './graphic/vtable-graphic';\nimport type { ICharacterConfig, ICharacterInitOption, IUpdateConfigParams } from '../../interface/dsl/dsl';\nimport type { ITableCharacterConfig } from '../../interface/dsl/table';\nimport { getLayoutFromWidget } from '../../utils/layout';\nimport type { ITableCharacterRuntime } from './interface/runtime';\nimport { TableConfigProcess } from './table-config-process';\nimport type { ICharacterTable, IVTable } from './interface/character-table';\nimport { isArray } from '@visactor/vutils';\n\nexport class CharacterTable\n extends CharacterBase\n implements ICharacterTable\n{\n static type = 'Table';\n\n visActorType: 'table' | 'component' | 'table' | 'common' = 'table';\n protected declare _graphic: VTableGraphic;\n protected declare _config: ITableCharacterConfig;\n\n // 临时记录 vtable 对象。在第一次执行 afterInitializeTable 后赋值, 在 beforeVRenderDraw 中使用\n // 不临时记录的话,第一次 beforeVRenderDraw 时,graphic 对象还未执行完初始化,当前对象的 _graphic 为 null\n protected _vtable: IVTable;\n\n protected _ticker: ITicker;\n protected _timeline: ITimeline;\n protected _runtime: ITableCharacterRuntime[] = [];\n\n constructor(config: ICharacterConfig, option: ICharacterInitOption) {\n super(config, option);\n this._timeline = new DefaultTimeline();\n this._ticker = new ManualTicker([this._timeline]);\n this.configProcess = new TableConfigProcess(this);\n }\n\n get config() {\n return this._config;\n }\n\n tickTo(t: number): void {\n this._graphic.vTableStage.ticker.tickAt && this._graphic.vTableStage.ticker.tickAt(t);\n }\n\n getGraphicBySelector(selector: string | string[]) {\n let table = false;\n let panel = false;\n if (isArray(selector)) {\n selector.forEach(s => {\n const data = this._getGraphicBySelector(s);\n table = table || data.table;\n panel = panel || data.panel;\n });\n return {\n table,\n panel\n };\n }\n return this._getGraphicBySelector(selector);\n }\n\n _getGraphicBySelector(selector: string) {\n const vtable = this._graphic.vTable;\n let table = false;\n // 是否包含panel, >0为包含\n let includePanel = 1;\n const rowHeader = vtable.scenegraph.rowHeaderGroup;\n const colHeader = vtable.scenegraph.colHeaderGroup;\n const bodyGroup = vtable.scenegraph.bodyGroup;\n\n let out: any = {\n rowHeader,\n colHeader,\n bodyGroup\n };\n\n const selectorList = selector.split(' ');\n selectorList.forEach(subSelector => {\n if (subSelector === '*') {\n table = true;\n } else if (/:not\\(([^)]+)\\)/.test(subSelector)) {\n const match = /:not\\(([^)]+)\\)/.exec(subSelector)[1];\n out = this.selectByType(out, match, false);\n if (match === 'panel') {\n includePanel = -Infinity; // 如果被排除,那么一定不包含了\n }\n } else {\n out = this.selectByType(out, subSelector);\n if (subSelector === 'panel') {\n includePanel = Infinity; // 如果有正选,那么选中才算\n } else {\n includePanel--;\n }\n }\n });\n\n return {\n table,\n panel: includePanel > 0,\n ...out\n };\n }\n\n protected selectByType(\n data: { rowHeader: IGroup; colHeader: IGroup; bodyGroup: IGroup },\n name: string,\n match: boolean = true\n ) {\n return {\n rowHeader: (name === 'rowHeader') === match ? data.rowHeader : null,\n colHeader: (name === 'colHeader') === match ? data.colHeader : null,\n bodyGroup: (name === 'body') === match ? data.bodyGroup : null\n };\n }\n\n checkEvent(event: IStoryEvent): false | ICharacterPickInfo {\n if (!(event.detailPath ?? event.path).some(g => g === this._graphic)) {\n return false;\n }\n // 点击到图表的空白区域\n if (this._graphic.pointInViewBox((event as any).canvasX, (event as any).canvasY)) {\n return {\n part: 'null',\n graphic: null,\n modelInfo: null,\n graphicType: 'null'\n };\n }\n return false;\n }\n\n _initGraphic() {\n this.applyConfigToAttribute(this._config, this._config);\n const attribute = this.getAttribute();\n\n this._graphic = new VTableGraphic(attribute);\n\n this.canvas.addGraphic(this._graphic);\n // 完成spec设置\n this._runtime.forEach(r => r.afterInitialize?.(this, this._graphic.vTable));\n }\n\n protected _setAttributes(attr: T): void {\n super._setAttributes(attr);\n // 完成spec更新也需要调用 afterInitialize\n this._runtime.forEach(r => r.afterInitialize?.(this, this._graphic.vTable));\n }\n\n protected _clearRuntime(): void {\n this._runtime.length = 0;\n }\n\n protected getViewBoxFromSpec() {\n const layout = getLayoutFromWidget(this._config.position, this);\n const viewBox = {\n x1: layout.x,\n x2: layout.x + layout.width,\n y1: layout.y,\n y2: layout.y + layout.height\n };\n return { layout, viewBox };\n }\n\n protected applyConfigToAttribute(diffConfig: IUpdateConfigParams, config: IUpdateConfigParams): void {\n this._attribute = this.getDefaultAttribute() as any;\n this._runtime.forEach(r => r.applyConfigToAttribute?.(this));\n }\n\n getDefaultAttribute(): Partial {\n return {\n spec: this._config.options.spec,\n dpr: this._canvas.getDpr(),\n autoRender: false,\n width: 500,\n height: 500,\n interactive: false,\n panel: {},\n ticker: this._ticker,\n zIndex: this._config.zIndex ?? 0,\n chartOption: {\n disableTriggerEvent: true,\n disableDirtyBounds: true,\n mode: 'desktop-browser'\n }\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n this._vtable = null;\n }\n\n getRuntimeConfig() {\n return this;\n }\n}\n","import { cloneDeep } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from './../../chart/interface/runtime';\nimport type { IVChart } from '@visactor/vchart';\nimport { CharacterType } from '../../../constants/character';\nimport type { IPivotChartCharacterConfig } from '../../../interface/dsl/table';\nimport type { ITableGraphicAttribute } from '../graphic/vtable-graphic';\nimport type { ICharacterChart } from '../../chart/interface/character-chart';\nimport { ThemeManager } from '../../../theme/theme-manager';\nimport { RuntimeStore } from '../../../store';\nimport { CharacterTable } from '../character-table';\n\nexport class PivotChartCharacter extends CharacterTable {\n static type = CharacterType.PIVOT_CHART;\n\n static ChartRuntimeMap: Record = {\n CommonLayout: false\n };\n\n protected declare _config: IPivotChartCharacterConfig;\n\n protected _chartRuntime: IChartCharacterRuntime[] = [];\n\n protected _currentDrawVChart: IVChart;\n get currentDrawVChart() {\n return this._currentDrawVChart;\n }\n\n // table 的图表相关生命周期\n // spec 生成钩子\n // 交互模式\n // option.specFormat => applyConfigToAttribute\n // 绘图模式\n // option.beforeChartDraw => applyConfigToAttribute\n // 通用的 vchart 生命周期钩子透传\n // option.chartOption {\n // performanceHook: {\n // chart\n // afterInitialize => afterInitialize\n // beforeVRenderDraw => beforeVRenderDraw\n // }\n // }\n\n getDefaultAttribute(): Partial {\n const result = super.getDefaultAttribute();\n const option = result.spec;\n // 这个函数功能的意义,当 vchart 在 vrender 渲染图表时,如果指标不变,仅单元格进行切换,是不会触发 updateSpec 的\n // 我们但是不同的单元格支持独立配置chart属性后,需要 updateSpec。所以在这里补充判定。\n // 1. 当存在独立配置时,key 为 col_row,否则为 no\n // 2. 当前图表实例上增加一个 _story_render_key 字段,用于记录当前的 key\n // 3. 当 key 变化时,需要 updateSpec。key 变化可能是从 no => col_row,或者从 col_row => no\n option.specFormat = (spec: any, chartInstance: any, chart: any) => {\n const { col, row } = chart.attribute;\n const hasOption = !!this._getVChartOption(col, row);\n const key = hasOption ? `${col}_${row}` : 'no';\n const needFormatSpec =\n key !== 'no'\n ? chartInstance._story_render_key !== key\n : chartInstance._story_render_key !== key && chartInstance._story_render_key !== undefined;\n chartInstance._story_render_key = key;\n return {\n needFormatSpec,\n spec: spec,\n updateSpec: false\n };\n };\n // 每一个单元格生成独立spec时,会调用这个函数,对应图表元素的 spec处理阶段\n // 注意:此时 spec 中没有数据\n option.specTransformInCell = (spec: any, col: number, row: number) => {\n spec._stroy_pivot_chart_info = {\n col,\n row\n };\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return spec;\n }\n // 先生成当前 chart 的临时 runtimeConfig\n const options = { ...(this._getVChartOption(col, row) ?? {}), spec };\n const attribute = { spec: cloneDeep(spec) };\n const runTimeConfig = {\n config: {\n options\n },\n canvas: this.canvas,\n getAttribute: () => {\n return attribute;\n }\n };\n // 复用 chart 元素的 runtime 对 spec 进行处理\n this._chartRuntime.forEach(r => {\n r.applyConfigToAttribute?.({\n story: this.story,\n getRuntimeConfig: () => {\n return runTimeConfig;\n }\n } as ICharacterChart);\n });\n // 返回处理后的 spec\n return attribute.spec;\n };\n option.chartOption = option.chartOption || {};\n option.chartOption.performanceHook = option.chartOption.performanceHook || {};\n option.chartOption.performanceHook.afterInitializeChart = (vchart: IVChart) => {\n const col = vchart.getSpec()._stroy_pivot_chart_info.col;\n const row = vchart.getSpec()._stroy_pivot_chart_info.row;\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return;\n }\n this._chartRuntime.forEach(r => {\n r.afterInitialize?.(\n {\n story: this.story,\n getRuntimeConfig: () => {\n return {\n config: {\n options: chartOption\n }\n };\n }\n } as ICharacterChart,\n vchart\n );\n });\n };\n option.chartOption.performanceHook.beforeDoRender = (vchart: IVChart) => {\n const col = vchart.getSpec()._stroy_pivot_chart_info.col;\n const row = vchart.getSpec()._stroy_pivot_chart_info.row;\n const chartOption = this._getVChartOption(col, row);\n if (!chartOption) {\n return;\n }\n this._chartRuntime.forEach(r => {\n r.beforeVRenderDraw?.(\n {\n story: this.story,\n getRuntimeConfig: () => {\n return {\n config: {\n options: chartOption\n }\n };\n }\n } as ICharacterChart,\n vchart\n );\n });\n };\n return result;\n }\n\n protected _getVChartOption(col: number, row: number) {\n return this._config.options.chartOptions?.[`${col}_${row}`]?.options;\n }\n\n protected _initRuntime(): void {\n super._initRuntime();\n const runtimeList = ThemeManager.getAttribute([this.theme, this.story.theme], `character.Chart.runtime.list`);\n this._chartRuntime.push(\n ...(RuntimeStore.getList(PivotChartCharacter.ChartRuntimeMap, runtimeList) as IChartCharacterRuntime[])\n );\n }\n}\n","import { merge, array, isArray } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { IChartCharacterConfig, ModelSelector } from '../../../interface/dsl/chart';\nimport { isIDSelector, isSpecIndexSelector } from '../../../utils/type';\n\nexport class CommonSpecRuntime implements IChartCharacterRuntime {\n type = 'ChartCommonSpec';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const config = character.getRuntimeConfig().config;\n const { spec } = rawAttribute;\n const options = config.options;\n const { data, color, rootConfig = {}, padding } = options;\n\n this._mergeComponentSpec(spec, options, 'title');\n this._mergeComponentSpec(spec, options, 'legends');\n this._mergeComponentSpec(spec, options, 'axes');\n this._mergeSeriesSpec(spec, options);\n if (data) {\n merge(spec, {\n data\n });\n }\n if (color) {\n merge(spec, { color });\n }\n if (padding) {\n merge(spec, { padding });\n }\n spec.animation = true;\n // 关闭默认的入场动画\n spec.animationAppear = false;\n // TODO 这个先不关闭,ADD的时候会调用\n // spec.animationEnter = false;\n merge(spec, { ...rootConfig });\n // 保证 data 的 values 有内容,避免 vchart 处理过程中报错\n this._fillDataValues(spec);\n }\n\n protected _mergeComponentSpec(\n rawSpec: any,\n options: IChartCharacterConfig['options'],\n key: 'title' | 'legends' | 'axes' | 'series'\n ) {\n if (!options[key]) {\n return;\n }\n if (!rawSpec[key]) {\n rawSpec[key] = [];\n }\n // 转化为数组\n rawSpec[key] = array(rawSpec[key]);\n (Object.keys(options[key]) as ModelSelector[]).forEach((selector: ModelSelector) => {\n if (selector === '*') {\n // 全部\n rawSpec[key].forEach((s: any) => {\n merge(s, options[key][selector]);\n });\n } else if (isSpecIndexSelector(selector)) {\n // 匹配索引\n const s = rawSpec[key][+selector];\n if (s) {\n merge(s, options[key][selector]);\n }\n } else if (isIDSelector(selector)) {\n // 匹配id\n const userId = selector.substring(1);\n const s = rawSpec[key].find((a: any) => {\n return a.id === userId;\n });\n if (s) {\n merge(s, options[key][selector]);\n } else {\n const s = options[key][selector];\n (s as any).id = userId;\n rawSpec[key].push(s);\n }\n }\n });\n }\n\n protected _mergeSeriesSpec(rawSpec: any, options: IChartCharacterConfig['options']) {\n if (!options.series) {\n return;\n }\n // 如果原始spec没有series,并且seriesSpec只有一项\n const optionSeries = options.series;\n if (!rawSpec.series && (options.series[0] || options.series['0'])) {\n merge(rawSpec, optionSeries[0] ?? optionSeries['0']);\n return;\n }\n // 其他情况同普通组件\n this._mergeComponentSpec(rawSpec, options, 'series');\n }\n\n private _fillSpecData(spec: any) {\n if (!spec.data) {\n return;\n }\n if (isArray(spec.data)) {\n spec.data.forEach((d: any) => {\n if (!d.values) {\n d.values = [];\n }\n });\n } else {\n if (!spec.data.values) {\n spec.data.values = [];\n }\n }\n }\n\n protected _fillDataValues(spec: any) {\n this._fillSpecData(spec);\n if (spec.series) {\n spec.series.forEach((s: any) => this._fillSpecData(s));\n }\n }\n}\n\nexport const CommonSpecRuntimeInstance = new CommonSpecRuntime();\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\n\nexport class RankingBarRuntime implements IChartCharacterRuntime {\n type = 'RankingBar';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n // 关掉player显示\n spec.player = {\n visible: false\n };\n spec.animation = true;\n spec.animationAppear = false;\n spec.animationEnter = false;\n }\n}\n\nexport const RankingBarRuntimeInstance = new RankingBarRuntime();\n","import { merge } from '@visactor/vutils';\nimport { ACustomAnimate } from '@visactor/vrender-core';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\n\nexport class WaveAnimate extends ACustomAnimate {\n static label: string = 'WaveAnimate';\n\n declare valid: boolean;\n\n constructor(from: any, to: any, duration: number, easing: any, params: any) {\n super(from, to, duration, easing, params);\n }\n\n getEndProps(): Record {\n return this.to;\n }\n\n getFromProps(): void | Record {\n return this.from;\n }\n\n onUpdate(end: boolean, ratio: number, out: Record): void {\n out.textureRatio = ratio;\n }\n}\n\nexport class WaveScatterRuntime implements IChartCharacterRuntime {\n type = 'WaveScatter';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n const config = character.getRuntimeConfig().config as any;\n const {\n waveDuration = 1000,\n categoryField,\n valueField,\n waveRatio = 0.0125,\n waveColor = '#0099ff',\n background = 'linear-gradient(180deg, #0099ff11 100%, #0099ff33 0%)',\n amplitude = 6,\n frequency = 2\n } = config.options;\n const { viewBox } = rawAttribute;\n const width = viewBox.x2 - viewBox.x1;\n const height = viewBox.y2 - viewBox.y1;\n rawAttribute.waveAnimate = {\n duration: waveDuration,\n customParameters: () => ({\n width,\n height\n }),\n custom: WaveAnimate,\n easing: 'linear',\n loop: true\n };\n merge(spec, {\n categoryField,\n valueField,\n circlePacking: {\n style: {\n fill: background,\n texture: 'wave',\n textureColor: waveColor,\n textureOptions: (datum: any) => {\n return {\n amplitude,\n frequency,\n percent: datum[valueField] * waveRatio\n };\n }\n }\n }\n });\n }\n}\n\nexport const WaveScatterRuntimeInstance = new WaveScatterRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterComponent } from '../interface/character-component';\n\nexport class TextRuntime implements IComponentCharacterRuntime {\n type = 'Text';\n\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { options, position } = character.config;\n const layout = getLayoutFromWidget(position, character);\n\n const { graphic = {}, panel = {}, padding } = options;\n\n merge(rawAttribute, panel);\n merge(rawAttribute, layout);\n rawAttribute.padding = padding;\n if (!rawAttribute.textStyle) {\n rawAttribute.textStyle = {};\n }\n merge(rawAttribute.textStyle, graphic);\n }\n}\n\nexport const TextRuntimeInstance = new TextRuntime();\n","import type { ICharacterComponent } from '../interface/character-component';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\n\nexport class LineRuntime implements IComponentCharacterRuntime {\n type = 'Line';\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { width = 1, height = 1 } = rawAttribute;\n rawAttribute.graphic.points = rawAttribute.graphic.points ?? [\n { x: 0, y: 0 },\n { x: width, y: height }\n ];\n }\n}\n\nexport const LineRuntimeInstance = new LineRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IComponentCharacterRuntime } from '../interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterComponent } from '../interface/character-component';\n\nexport class BaseGraphicRuntime implements IComponentCharacterRuntime {\n type = 'BaseGraphic';\n\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n const { options, position, locked } = character.config;\n const layout = getLayoutFromWidget(position, character);\n\n const { graphic = {}, text = {}, panel = {}, padding } = options;\n\n merge(rawAttribute, panel);\n rawAttribute.padding = padding;\n merge(rawAttribute, layout);\n if (!rawAttribute.textStyle) {\n rawAttribute.textStyle = {};\n }\n merge(rawAttribute.textStyle, text);\n if (!rawAttribute.graphic) {\n rawAttribute.graphic = {};\n }\n if (locked) {\n rawAttribute.pickable = false;\n rawAttribute.childrenPickable = false;\n }\n merge(rawAttribute.graphic, graphic);\n }\n}\n\nexport const BaseGraphicRuntimeInstance = new BaseGraphicRuntime();\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nexport class SeriesSpecRuntime implements IChartCharacterRuntime {\n type = 'SeriesSpec';\n}\n\nexport const SeriesSpecRuntimeInstance = new SeriesSpecRuntime();\n","// vchart 内置的数据序号\nexport const VCHART_DATA_INDEX = '__VCHART_DEFAULT_DATA_INDEX';\n\nexport const EDITOR_SERIES_MARK_STYLE_LEVEL = 90;\nexport const EDITOR_SERIES_MARK_SINGLE_LEVEL = 100;\n\nconst CommonMarkAttribute = ['visible', 'stroke', 'strokeOpacity', 'lineWidth', 'lineDash', 'curveType', 'zIndex'];\nexport const fillMarkAttribute = [...CommonMarkAttribute, 'fill', 'fillOpacity'];\nexport const rectMarkAttribute = [...fillMarkAttribute, 'cornerRadius'];\nexport const arcMarkAttribute = [...fillMarkAttribute, 'cornerRadius', 'centerOffset', 'innerRadius', 'outerRadius'];\nexport const pointMarkAttribute = [...CommonMarkAttribute, 'fill', 'fillOpacity', 'size', 'shape', 'symbolType'];\nexport const UseDefaultSeriesStyle = '_story_series_style_default';\nexport const CommonLabelStyleMap = {\n style: [...fillMarkAttribute, 'font', 'fontSize', 'fontStyle', 'fontWeight', 'underline', 'background'],\n attribute: ['position', 'offset', 'overlap', 'smartInvert']\n};\n\nexport const CommonMarkAttributeMap: { [key: string]: string[] } = {\n arc: arcMarkAttribute,\n rect: rectMarkAttribute,\n symbol: pointMarkAttribute,\n text: CommonLabelStyleMap.style\n};\n\nexport const SeriesMarkStyleMap: {\n // 系列 类型\n [key: string]: {\n // 系列内的 mark name | 或者某种系列层属性\n [key: string]: {\n style: string[]; // mark 的可编辑样式 key 的数组\n attribute: string[]; // mark 的可编辑属性 key 的数组\n };\n };\n} = {\n bar: {\n bar: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n line: {\n line: {\n style: [...CommonMarkAttribute],\n attribute: []\n },\n point: {\n style: pointMarkAttribute,\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n area: {\n line: {\n style: [...CommonMarkAttribute],\n attribute: []\n },\n area: {\n style: [...fillMarkAttribute],\n attribute: []\n },\n point: {\n style: pointMarkAttribute,\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n waterfall: {\n bar: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n pie: {\n pie: {\n style: [...arcMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n },\n funnel: {\n funnel: {\n style: [...rectMarkAttribute],\n attribute: []\n },\n label: CommonLabelStyleMap\n }\n};\n\nexport const FieldLink = '_filedLink_';\nexport const ValueLink = '_valueLink_';\n","import { isArray, isValid } from '@visactor/vutils';\nimport type { IChart } from '@visactor/vchart/esm/chart/interface';\nimport type { ICartesianSeries, ISeries } from '@visactor/vchart';\nimport { isContinuous } from '@visactor/vscale';\nimport { VCHART_DATA_INDEX, ValueLink, FieldLink } from './const';\nimport type { IComponentMatch, IMarkStyle } from '../../../interface/dsl/chart';\n\nexport function GetVChartSeriesWithMatch(vchart: IChart, seriesMatch: IComponentMatch & { type: string }) {\n if (!isValid(seriesMatch.specIndex) && seriesMatch.type) {\n return vchart.getAllSeries().filter(s => s.type === seriesMatch.type)[0];\n }\n if (!isValid(seriesMatch.specIndex)) {\n return null;\n }\n return vchart\n .getAllSeries()\n .find(s =>\n isValid(seriesMatch.usrId) ? s.userId === seriesMatch.usrId : s.getSpecIndex() === seriesMatch.specIndex\n );\n}\n\nexport function isSeriesMatch(seriesMatch: IComponentMatch & { type: string }, series: ISeries) {\n if (isValid(seriesMatch.type) && series.type !== seriesMatch.type) {\n return false;\n }\n if (isValid(seriesMatch.usrId) && series.userId !== seriesMatch.usrId) {\n return false;\n }\n if (isValid(seriesMatch.specIndex) && series.getSpecIndex() !== seriesMatch.specIndex) {\n return false;\n }\n return true;\n}\n\nexport function getSeriesKeyScalesMap(series: ISeries) {\n let axisHelper: any;\n let fields: string[];\n const map: { [key: string]: any } = {};\n if ((series).direction) {\n if ((series).direction === 'vertical') {\n axisHelper = (series).getXAxisHelper();\n fields = (series).fieldX;\n } else {\n axisHelper = (series).getYAxisHelper();\n fields = (series).fieldY;\n }\n if (axisHelper?.getScale) {\n fields.forEach((f, i) => {\n map[f] = axisHelper.getScale(i);\n });\n }\n }\n\n const seriesField = series.getSeriesField();\n if (!map[seriesField]) {\n if (seriesField) {\n if (series.getOption().globalScale.getScale('color')) {\n map[seriesField] = series.getOption().globalScale.getScale('color');\n }\n }\n }\n\n return map;\n}\n\nexport function matchDatumWithScaleMap(\n keys: string[],\n keyValueMap: { [key: string]: number },\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n if (isArray(datum)) {\n datum = datum[0];\n }\n return keys.every(key => {\n const scale = scaleMap[key];\n if (!scale) {\n return keyValueMap[key] === datum[key];\n }\n if (isContinuous(scale.type)) {\n return keyValueMap[VCHART_DATA_INDEX] === datum[VCHART_DATA_INDEX];\n }\n return keyValueMap[key] === scale._index.get(`${datum[key]}`);\n });\n}\n\nexport function isSingleMarkMatch(\n config: IMarkStyle,\n series: ISeries,\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n return (\n isSeriesMatch(config.seriesMatch, series) &&\n matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, scaleMap, datum)\n );\n}\n\nexport function findSingleConfig(\n config: { [key: string]: IMarkStyle },\n series: ISeries,\n scaleMap: { [key: string]: any } = {},\n datum: any\n) {\n if (!config) {\n return null;\n }\n return Object.values(config).find(v => {\n return isSingleMarkMatch(v, series, scaleMap, datum);\n });\n}\n\nexport function getMarkStyleId(markName: string, itemKeys: string[], itemKeyMap: { [key: string]: any }) {\n return itemKeys.reduce((pre, cur) => {\n return pre + `${FieldLink}${cur}${ValueLink}${itemKeyMap[cur]}`;\n }, markName);\n}\n","import type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport type { IInitOption, ISpec } from '@visactor/vchart';\nimport type { ICharacterConfigBase } from './dsl';\nimport type { IFormatConfig } from './common';\n\nexport const StroyAllDataGroup = '_STORY_ALL_DATA_GROUP';\n\nexport interface IComponentMatch {\n usrId?: string;\n specIndex?: number | 'all'; // all 表示所有\n [key: string]: any;\n}\n\nexport type ITextAttribute = ITextGraphicAttribute;\n\nexport interface IMarkStyle {\n seriesMatch: { type: string } & IComponentMatch;\n markName: string;\n itemKeys: string[]; // 数据匹配维度\n itemKeyMap: { [key: string]: number }; // 匹配维度值\n style: T; // 样式\n}\n\nexport interface IDataGroupStyle {\n // markName , label 也在这里,需要 label runtime 处理\n label?: {\n style?: IMarkStyle['style'];\n formatConfig?: IFormatConfig;\n visible?: boolean; // 是否可见\n [key: string]: any; // 其他可能存在的逻辑配置\n };\n [key: string]: {\n style?: IMarkStyle['style']; // markStyle\n visible?: boolean; // 是否可见\n [key: string]: any; // 其他可能存在的逻辑配置\n };\n}\n\nexport interface IChartCharacterInitOption {\n vchartBoundsMode?: 'clip' | 'auto';\n}\n\n// 模块选择器\n// number => model.getSpecIndex(); 模块的 specIndex\n// * => chart.getAllModelInType(); 所有模块\n// #id => model.userId; 模块的 userId\nexport type ModelSelector = number | `${number}` | '*' | `#${string}`;\n\n// 定义一个类型辅助工具来提取非数组类型\ntype ElementType = T extends (infer U)[] ? U : T;\n\nexport interface ITotalLabelConfig {\n visible?: boolean;\n style?: ITextAttribute;\n formatConfig?: IFormatConfig;\n single?: {\n // 使用 维度key_维度值_&_维度key_维度值 这样的格式构建key,保证唯一性\n [key: string]: {\n itemKeys: string[]; // 数据匹配维度\n itemKeyMap: { [key: string]: number }; // 匹配维度值\n formatConfig?: IFormatConfig;\n style?: ITextAttribute;\n };\n };\n}\n\nexport interface IChartCharacterConfig extends ICharacterConfigBase {\n options: {\n /**\n * 图表spec\n */\n spec?: any;\n /**\n * 初始化参数\n */\n initOption?: IInitOption & IChartCharacterInitOption;\n /**\n * 边距\n */\n padding?: { left: number; top: number; right: number; bottom: number };\n /**\n * 图表容器\n */\n panel?: any;\n /**\n * 数据源\n */\n data?: any;\n /**\n * 标题\n */\n title?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * 图例\n */\n legends?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * axes\n */\n axes?: {\n [key in ModelSelector]: Partial>;\n };\n /**\n * series\n */\n series?: {\n [key in ModelSelector]?: Partial>;\n };\n /**\n * 色板\n */\n color?: any;\n /**\n * mark 单元素样式\n */\n markStyle?: {\n [key: string]: IMarkStyle;\n };\n /**\n * label 单元素样式 与 mark 区分开,runtime逻辑完全不同\n */\n labelStyle?: {\n [key: string]: IMarkStyle & {\n formatConfig?: IFormatConfig;\n };\n };\n /**\n * 总计标签\n */\n totalLabel?: {\n // 以 `组` 为单位配置。组的 key 对应 vchart.series.stackValue\n // 默认情况下 vchart 中 stackValue = `${PREFIX}_series_${series.type}`\n // 直角坐标系下的系列 stackValue = `${PREFIX}_series_${this.type}_${axisId}`\n [key: string]: ITotalLabelConfig;\n };\n /**\n * 组样式配置\n */\n dataGroupStyle?: {\n [StroyAllDataGroup]?: IDataGroupStyle; // 全部分组的样式\n [key: string]: IDataGroupStyle; // 某一组\n };\n /**\n * 直接合并的配置\n */\n rootConfig?: Record;\n };\n}\n","import type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { ISeries, IVChart } from '@visactor/vchart';\nimport { getSeriesKeyScalesMap, GetVChartSeriesWithMatch, matchDatumWithScaleMap } from './utils';\nimport type { IChartCharacterConfig } from '../../../interface/dsl/chart';\nimport { StroyAllDataGroup } from '../../../interface/dsl/chart';\nimport type { IMark } from '@visactor/vchart/esm/mark/interface';\nimport {\n CommonMarkAttributeMap,\n EDITOR_SERIES_MARK_SINGLE_LEVEL,\n EDITOR_SERIES_MARK_STYLE_LEVEL,\n fillMarkAttribute,\n SeriesMarkStyleMap,\n UseDefaultSeriesStyle\n} from './const';\nimport { isArray, merge, isValid } from '@visactor/vutils';\n\nexport class MarkStyleRuntime implements IChartCharacterRuntime {\n type = 'MarkStyle';\n\n static getMarkStyle(\n mark: IMark,\n dataGroupStyle: IChartCharacterConfig['options']['dataGroupStyle'],\n key: string,\n datum: any,\n seriesField: string,\n markName?: string\n ) {\n if (!dataGroupStyle) {\n return null;\n }\n const value =\n dataGroupStyle[datum[seriesField]]?.[markName ?? mark.name]?.style?.[key] ??\n dataGroupStyle[StroyAllDataGroup]?.[markName ?? mark.name]?.style?.[key];\n\n if (value === UseDefaultSeriesStyle) {\n return null;\n }\n return value;\n }\n\n applyConfigToAttribute(character: ICharacterChart) {\n // visible\n // 如果 dataGroupStyle 中有 visible 配置,在这里添加上 visible = true\n // 具体 visible 的逻辑在下方 afterInitialize 中设置到 mark 上\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n // 没有的话,忽略\n if (!dataGroupStyle) {\n return;\n }\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n const visibleMarkNames: string[] = [];\n // 得到全部被设置过 visible 的 markName\n Object.values(dataGroupStyle).forEach(groupConfig => {\n Object.keys(groupConfig).forEach(markName => {\n if (isValid(groupConfig[markName]?.visible)) {\n visibleMarkNames.push(markName);\n }\n });\n });\n // 设置到 spec 上\n if (spec.series) {\n spec.series.forEach((s: any) => {\n visibleMarkNames.forEach(name => {\n s[name] = s[name] || { visible: true };\n s[name].visible = true;\n });\n });\n } else {\n visibleMarkNames.forEach(name => {\n spec[name] = spec[name] || { visible: true };\n spec[name].visible = true;\n });\n }\n\n return;\n }\n\n afterInitialize(character: ICharacterChart, vchart: IVChart) {\n this._setDataGroupStyle(character, vchart);\n this._setMarkStyle(character, vchart);\n return;\n }\n\n private _setDataGroupStyle(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n\n // seriesStyle\n const seriesList = vchart.getChart().getAllSeries();\n if (!seriesList?.length) {\n return;\n }\n seriesList.forEach(s => {\n // 一个 series 对应一组数据\n // 系列分组key\n const seriesField = s.getSeriesField();\n const groupValueList = s.getRawDataStatisticsByField(seriesField)?.values;\n const groupValue = groupValueList?.[0];\n s.getMarks().forEach(m => {\n // set visible first\n const visible =\n dataGroupStyle[groupValue]?.[m.name]?.visible ?? dataGroupStyle[StroyAllDataGroup]?.[m.name]?.visible;\n if (isValid(visible)) {\n m.setVisible(visible);\n }\n // 系列分组key\n if (groupValueList && groupValueList.length === 1) {\n // 一个 series 对应一组数据 简化处理,优化性能\n if (!dataGroupStyle[groupValue]?.[m.name]?.style && !dataGroupStyle[StroyAllDataGroup]?.[m.name]?.style) {\n return;\n }\n const markStyle = merge(\n {},\n dataGroupStyle[StroyAllDataGroup]?.[m.name]?.style ?? {},\n dataGroupStyle[groupValue]?.[m.name]?.style ?? {}\n );\n if (Object.keys(markStyle).length === 0) {\n return;\n }\n m.setStyle(\n {\n ...markStyle\n },\n 'normal',\n EDITOR_SERIES_MARK_STYLE_LEVEL\n );\n } else {\n // 如果有 style map 的话, 只有这些属性可以被设置\n const styleKeys =\n SeriesMarkStyleMap[s.type]?.[m.name]?.style ?? CommonMarkAttributeMap[m.type] ?? fillMarkAttribute;\n\n // 多组数据在同一个系列,使用后处理\n styleKeys.forEach(key => {\n if (!m.stateStyle.normal?.[key]) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n m.setAttribute(key, (): any => undefined);\n }\n\n m.setPostProcess(key, (result, datum) => {\n const temp = MarkStyleRuntime.getMarkStyle(m, dataGroupStyle, key, datum, seriesField) ?? result;\n if (s.type === 'area' && key === 'stroke' && m.name === 'area') {\n if (!isArray(temp)) {\n return [temp, false, false, false];\n }\n }\n return temp;\n });\n });\n }\n });\n });\n }\n\n private _setMarkStyle(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const markStyle = config.options?.markStyle;\n if (!markStyle) {\n return;\n }\n const chart = vchart.getChart();\n Object.keys(markStyle).forEach(key => {\n const config = markStyle[key];\n const series = GetVChartSeriesWithMatch(chart, config.seriesMatch) as ISeries;\n if (!series) {\n return;\n }\n const mark = series.getMarkInName(config.markName);\n if (!mark) {\n return;\n }\n const keyScaleMap = getSeriesKeyScalesMap(series);\n const stateKey = key;\n mark.setStyle(\n {\n ...config.style\n },\n stateKey,\n EDITOR_SERIES_MARK_SINGLE_LEVEL\n );\n chart.updateState({\n [stateKey]: {\n filter: (datum: any) => {\n return matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, keyScaleMap, datum);\n },\n level: 10\n }\n });\n });\n }\n}\n\nexport const MarkStyleRuntimeInstance = new MarkStyleRuntime();\n","import { ThemeManager } from './../../../theme/theme-manager';\nimport { array, isNil, isValid, merge } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport {\n STACK_FIELD_END,\n STACK_FIELD_END_PERCENT,\n STACK_FIELD_START,\n STACK_FIELD_START_PERCENT,\n STACK_FIELD_TOTAL,\n type ISeries,\n type IVChart,\n type IRegion\n} from '@visactor/vchart';\nimport type { Label as VChartLabelComponent } from '@visactor/vchart/esm/component/label/label';\nimport type { ILabelInfo } from '@visactor/vchart/esm/component/label';\nimport { MarkStyleRuntime } from './mark-style';\nimport { findSingleConfig, getSeriesKeyScalesMap, isSeriesMatch, matchDatumWithScaleMap } from './utils';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { IChartCharacterConfig, ITextAttribute } from '../../../interface/dsl/chart';\nimport { StroyAllDataGroup } from '../../../interface/dsl/chart';\nimport type { IMark } from '@visactor/vchart/esm/mark/interface';\nimport { CommonMarkAttributeMap, fillMarkAttribute, SeriesMarkStyleMap } from './const';\nimport { formatConfigKey } from '../../../constants/format';\nimport type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { FormatValueFunction } from '../../common/utils/format';\nimport { getTextWithFormat } from '../../common/utils/format';\nimport { validNumber } from '../../../utils/type';\nimport { getRegionStackGroup } from '@visactor/vchart/esm/util';\nimport { stack } from '@visactor/vchart/esm/util';\nexport class LabelStyleRuntime implements IChartCharacterRuntime {\n type = 'LabelStyle';\n\n applyConfigToAttribute(character: ICharacterChart) {\n // 设置 visible 为 true 关闭标签能力放到分组上\n // 当前 dataGroupStyle 中有 label.visible 配置,在这里添加上 visible = true\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n let hasLabelVisible = false;\n Object.keys(dataGroupStyle).forEach(key => {\n if (hasLabelVisible) {\n return;\n }\n if (isValid(dataGroupStyle[key]?.label?.visible)) {\n hasLabelVisible = true;\n }\n });\n // 如果没有设置 visible,不处理\n if (!hasLabelVisible) {\n return;\n }\n // 否则全部设置为 true\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n if (!spec.label) {\n spec.label = { visible: true };\n } else {\n spec.label.visible = true;\n }\n spec.series?.forEach((s: any) => {\n if (!s.label) {\n s.label = { visible: true };\n } else {\n s.label.visible = true;\n }\n });\n }\n\n /**\n * 处理 fill stroke 之外的样式\n * format 在这里处理,否则防重叠会无法正确使用format之后的值进行计算\n * @param character\n * @param vchart\n * @returns\n */\n afterInitialize(character: ICharacterChart, vchart: IVChart) {\n const labelComponent = vchart.getChart().getComponentsByKey('label')[0] as VChartLabelComponent;\n if (!labelComponent) {\n return;\n }\n this._setDataGroupStyle(character, vchart, labelComponent);\n }\n\n private _setDataGroupStyle(character: ICharacterChart, vchart: IVChart, labelComponent: VChartLabelComponent) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n if (!dataGroupStyle) {\n return;\n }\n\n const formatValue = ThemeManager.getAttribute(\n [character.theme, character.story.theme],\n 'character.VChart.runtime.functions.formatValue'\n );\n\n const singleLabelStyleKeys: { [key: string]: boolean } = {};\n const hasLabelStyle = !!config.options?.labelStyle;\n if (hasLabelStyle) {\n Object.values(config.options?.labelStyle).forEach(ls => {\n Object.keys(ls.style).forEach(k => (singleLabelStyleKeys[k] = true));\n });\n }\n\n labelComponent.getMarks().forEach(componentMark => {\n // @ts-ignore\n const infos = labelComponent._labelComponentMap.get(componentMark)();\n if (!infos) {\n return;\n }\n array(infos).forEach(info => {\n const { series, labelMark } = info as { series: ISeries; labelMark: IMark };\n const keyScaleMap = getSeriesKeyScalesMap(series);\n // 先看当前系列是否存在单标签样式\n const hasSingleStyle = hasLabelStyle\n ? isValid(\n Object.keys(config.options.labelStyle).find(k =>\n isSeriesMatch(config.options.labelStyle[k].seriesMatch, series)\n )\n )\n : false;\n // 系列分组key\n const seriesField = series.getSeriesField();\n // style Map 是 能设置的样式\n const styleKeys =\n SeriesMarkStyleMap[series.type]?.label?.style ?? CommonMarkAttributeMap.text ?? fillMarkAttribute;\n\n // 多组数据在同一个系列,使用vchart mark后处理。这里只有常规属性,如果发现某些属性设置不上,考虑styleKeys缺少\n styleKeys.forEach((key: keyof ITextAttribute) => {\n // fill 和 stroke 使用vrender后处理\n if (key === 'fill' || key === 'stroke') {\n return;\n }\n if (!labelMark.stateStyle.normal?.[key]) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n labelMark.setAttribute(key, (): any => undefined);\n }\n // 如果当前系列是有单标签样式的\n if (singleLabelStyleKeys[key] && hasSingleStyle) {\n labelMark.setPostProcess(key, (result, datum) => {\n return (\n // 如果匹配到单标签样式\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum)?.style?.[key] ??\n // 否则匹配组样式\n MarkStyleRuntime.getMarkStyle(labelMark, dataGroupStyle, key, datum, seriesField, 'label') ??\n result\n );\n });\n } else {\n // 没有单标签样式的\n // 直接匹配组样式\n labelMark.setPostProcess(key, (result, datum) => {\n return (\n MarkStyleRuntime.getMarkStyle(labelMark, dataGroupStyle, key, datum, seriesField, 'label') ?? result\n );\n });\n }\n });\n\n // format\n // 如果是有单标签样式的\n if (hasSingleStyle) {\n labelMark.setPostProcess('text', (result, datum) => {\n const formatConfig = (\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum) as unknown as {\n [formatConfigKey]: IFormatConfig;\n }\n )?.[formatConfigKey];\n if (isValid(formatConfig)) {\n return (\n getLabelTextWithFormat(datum, seriesField, series, vchart, character, formatConfig, formatValue) ??\n result\n );\n }\n // 否则匹配组样式\n return (\n getTextWithGroupFormat(datum, seriesField, series, vchart, character, dataGroupStyle, formatValue) ??\n result\n );\n });\n } else {\n // 没有单标签样式的\n // 直接匹配组样式\n labelMark.setPostProcess('text', (result, datum) => {\n return (\n getTextWithGroupFormat(datum, seriesField, series, vchart, character, dataGroupStyle, formatValue) ??\n result\n );\n });\n }\n\n // format结束\n\n // visible 单独设置\n if (!labelMark.stateStyle.normal?.visible) {\n // TODO VChart bug。如果直接设置属性为 undefined 会报错\n // 默认值 还必须这样写\n labelMark.setAttribute('visible', (): any => undefined);\n }\n const spec = config.options.spec;\n labelMark.setPostProcess('visible', (result, datum) => {\n return (\n // 如果匹配到单标签样式\n findSingleConfig(config.options.labelStyle, series, keyScaleMap, datum)?.style?.visible ??\n // 否则匹配组样式\n dataGroupStyle[datum[seriesField]]?.label?.visible ?? // 单组 visible\n dataGroupStyle[StroyAllDataGroup]?.label?.visible ?? // 全部组visible\n spec?.series?.[series.getSpecIndex()]?.label?.visible ?? // 单系列 visible\n spec?.label?.visible ?? // 全局 visible\n result\n );\n });\n // visible 结束\n });\n });\n }\n\n /**\n * 只处理 fill stroke 值,\n * 因为智能反色逻辑会修改它们,在 afterInitialize 中设置无效。\n * @param character\n * @param vchart\n * @returns\n */\n beforeVRenderDraw(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const dataGroupStyle = config.options?.dataGroupStyle;\n const labelStyle = config.options?.labelStyle;\n if (!labelStyle && !dataGroupStyle) {\n return;\n }\n\n const labelComponent = vchart.getChart().getComponentsByKey('label')[0] as VChartLabelComponent;\n if (!labelComponent) {\n return;\n }\n // 遍历mark\n labelComponent.getMarks().forEach(componentMark => {\n // @ts-ignore\n const infos = labelComponent._labelComponentMap.get(componentMark)();\n array(infos).forEach(info => {\n const { series: series } = info as { series: ISeries; labelMark: IMark };\n const keyScaleMap = getSeriesKeyScalesMap(series);\n const labelGraphics: IGraphic[] = [];\n findLabelGraphicWithInfo(componentMark.getProduct().graphicItem, info, labelGraphics);\n\n // 先设置分组样式\n if (dataGroupStyle) {\n const seriesField = series.getSeriesField();\n const groupValueList = series.getRawDataStatisticsByField(seriesField)?.values as string[];\n groupValueList.forEach(groupValue => {\n // 是否存在分组样式\n if (!dataGroupStyle[groupValue]?.label?.style && !dataGroupStyle[StroyAllDataGroup]?.label?.style) {\n return;\n }\n const style = merge(\n {},\n dataGroupStyle[StroyAllDataGroup]?.label?.style ?? {},\n dataGroupStyle[groupValue]?.label?.style ?? {}\n );\n // 只设置 fill 和 stroke 颜色\n if (!isValid(style.fill) && !isValid(style.stroke)) {\n return;\n }\n const labels = labelGraphics.filter(l => (l.attribute as any).data[seriesField] === groupValue);\n labels.forEach(l => {\n isValid(style.fill) && l.setAttribute('fill', style.fill);\n isValid(style.stroke) && l.setAttribute('stroke', style.stroke);\n });\n });\n }\n\n // 再设置单标签样式\n if (labelStyle) {\n const findKeys = !!labelStyle\n ? Object.keys(labelStyle).filter(k => isSeriesMatch(labelStyle[k].seriesMatch, series))\n : null;\n findKeys.forEach(findKey => {\n const item = labelStyle[findKey];\n // 只设置 fill 和 stroke 颜色\n if (!isValid(item.style.fill) && !isValid(item.style.stroke)) {\n return;\n }\n // 找到对应的标签\n const label = labelGraphics.find(l =>\n matchDatumWithScaleMap(item.itemKeys, item.itemKeyMap, keyScaleMap, (l.attribute as any).data as any)\n );\n if (!label) {\n return;\n }\n isValid(item.style.fill) && label.setAttribute('fill', item.style.fill);\n isValid(item.style.stroke) && label.setAttribute('stroke', item.style.stroke);\n });\n }\n });\n });\n return;\n }\n}\n\n/**\n * 将标签graphic放入数组\n * @param g graphic 父节点\n * @param list 将graphic放入数组\n * @returns\n */\nfunction _collectAllLabelGraphic(g: IGraphic, list: IGraphic[]) {\n if (g.type === 'text' || g.type === 'richtext') {\n list.push(g);\n return;\n }\n if (g.children) {\n g.children.forEach((child: IGraphic) => _collectAllLabelGraphic(child, list));\n }\n}\n\n/**\n * 找到对应的全部标签绘图节点\n * @param g\n * @param info\n * @param list\n * @returns\n */\nfunction findLabelGraphicWithInfo(g: IGraphic, info: ILabelInfo, list: IGraphic[]) {\n const matchLabel = g.children[0].children.find(\n // @ts-ignore\n (c: IGraphic) => c.attribute.baseMarkGroupName === info.baseMark.getProduct().graphicItem.name\n );\n if (!matchLabel) {\n return;\n }\n _collectAllLabelGraphic(matchLabel, list);\n}\n\n// 得到标签经过分组配置中的 format 处理后的值\nfunction getTextWithGroupFormat(\n datum: any,\n seriesField: string,\n series: ISeries,\n vchart: IVChart,\n character: ICharacterChart,\n dataGroupStyle: IChartCharacterConfig['options']['dataGroupStyle'],\n formatValue: FormatValueFunction\n) {\n if (!dataGroupStyle) {\n return null;\n }\n const formatConfig =\n dataGroupStyle[datum[seriesField]]?.label?.formatConfig ?? dataGroupStyle[StroyAllDataGroup]?.label?.formatConfig;\n\n if (!formatConfig) {\n return null;\n }\n\n return getLabelTextWithFormat(datum, seriesField, series, vchart, character, formatConfig, formatValue);\n}\n\n// 得到标签经过 format 处理后的值\nfunction getLabelTextWithFormat(\n datum: any,\n seriesField: string,\n series: ISeries,\n vchart: IVChart,\n character: ICharacterChart,\n formatConfig: IFormatConfig,\n formatValue: FormatValueFunction\n) {\n // 去掉非百分百情况下的 percentdiff 内容\n const formatContents = array(formatConfig.content).filter(content =>\n series.getPercent() ? true : content !== 'percentdiff'\n );\n const opt = {\n datum,\n seriesField,\n series,\n vchart,\n character\n };\n return getTextWithFormat(formatConfig, formatContents, getSeriesContentValue, formatValue, opt);\n}\n\nfunction getSeriesContentValue(\n {\n datum,\n seriesField,\n series,\n vchart\n }: {\n datum: any;\n seriesField: string;\n series: ISeries;\n vchart: IVChart;\n },\n content: FormatContentType\n) {\n const dimensionField = series.getDimensionField()[0];\n const measureField = series.getMeasureField()[0];\n switch (content) {\n case 'dimension':\n return datum[dimensionField];\n case 'abs':\n return Math.abs(datum[measureField]);\n case 'percentage':\n // TODO: i18n\n return validNumber(computeSeriesPercentage(vchart, datum, series)) ?? '百分比';\n case 'series':\n return datum[seriesField];\n case 'value':\n default:\n return Number.parseFloat(datum[measureField]);\n }\n}\n\n// 计算系列百分比\nfunction computeSeriesPercentage(vchart: IVChart, datum: any, series: ISeries) {\n // TODO: calculate stack & percentage before format method\n // calculate percentage for specified series\n if (\n series.type === 'pie' ||\n series.type === 'rose' ||\n series.type === 'scatter' ||\n series.type === 'map' ||\n series.type === 'funnel'\n ) {\n const data: any[] = series.getViewData().latestData;\n const measureField = series.getMeasureField()[0];\n const totalValue = data.reduce((sum: number, d: any) => {\n return sum + Number.parseFloat(d[measureField]);\n }, 0);\n const percentage = Number.parseFloat(datum[measureField]) / totalValue;\n return percentage * 100;\n }\n // TODO: unite the percentage calculation for different series\n // for now, line & waterfall & group bar series cannot get correct stack data\n if (\n series.type === 'line' ||\n series.type === 'waterfall' ||\n // group bar chart\n (series.type === 'bar' && series.getDimensionField().length > 1)\n ) {\n const seriesAxisOrient = series.getSpec()._editor_axis_orient;\n const allSeries = vchart\n .getChart()\n .getAllSeries()\n .filter((s: ISeries) => s.getSpec()._editor_axis_orient === seriesAxisOrient);\n const data = allSeries.reduce((data, series) => {\n return data.concat(series.getViewData().latestData);\n }, []);\n const dimensionField = series.getDimensionField()[0];\n const measureField = series.getMeasureField()[0];\n const totalValue = data.reduce((sum: number, d: any) => {\n if (d[dimensionField] === datum[dimensionField]) {\n const parsedValue = Number.parseFloat(d[measureField]);\n return sum + (Number.isNaN(parsedValue) ? 0 : parsedValue);\n }\n return sum;\n }, 0);\n const currentValue = Number.parseFloat(datum[measureField]);\n const percentage = Number.isNaN(currentValue) ? 0 : currentValue / totalValue;\n return percentage * 100;\n }\n // calculate stack\n const chart = vchart.getChart();\n chart.getAllRegions().forEach((region: IRegion) => {\n const stackValueGroup = getRegionStackGroup(region, true);\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), true);\n }\n }\n });\n\n if (!isNil(datum[STACK_FIELD_TOTAL])) {\n return ((datum[STACK_FIELD_END] - datum[STACK_FIELD_START]) / datum[STACK_FIELD_TOTAL]) * 100;\n }\n if (!isNil(datum[STACK_FIELD_END_PERCENT]) && !isNil(datum[STACK_FIELD_START_PERCENT])) {\n return (datum[STACK_FIELD_END_PERCENT] - datum[STACK_FIELD_START_PERCENT]) * 100;\n }\n return NaN;\n}\n\nexport const LabelStyleRuntimeInstance = new LabelStyleRuntime();\n","import { ThemeManager } from './../../../theme/theme-manager';\nimport { array, isValid, merge, isValidNumber } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterChart } from '../interface/character-chart';\nimport type { IVChart } from '@visactor/vchart';\nimport { type ISeries, PREFIX } from '@visactor/vchart';\nimport type { ITotalLabelConfig } from '../../../interface/dsl/chart';\nimport type { FormatContentType, IFormatConfig } from '../../../interface/dsl/common';\nimport type { FormatValueFunction } from '../../common/utils/format';\nimport { getTextWithFormat } from '../../common/utils/format';\nimport { VSTORY_PREFIX } from '../../../constants/config';\nimport { getSeriesKeyScalesMap, matchDatumWithScaleMap } from './utils';\nimport type { IText } from '@visactor/vrender-core';\nimport { SeriesAxisOrientKey } from '../../../constants/character';\n\nconst totalLabelTempValueKey = `${VSTORY_PREFIX}_totalLabel`;\n\n// 这里的到的 stackValue 与 vchart 中并不一致\n// 直角坐标系下 vchart series 的默认 stackValue 使用了对应的轴 Id 这个轴Id在spec生成阶段无法获取搭配\n// vchart 直角坐标系下默认 stackValue = `${PREFIX}_series_${this.type}_${axisId}`\nexport function getStackValueFromSeriesSpec(seriesSpec: any) {\n if (seriesSpec.stackValue) {\n return seriesSpec.stackValue;\n }\n return `${PREFIX}_series_${seriesSpec.type}_${seriesSpec[SeriesAxisOrientKey]}`;\n}\n\nexport class TotalLabelRuntime implements IChartCharacterRuntime {\n type = 'TotalLabel';\n\n applyConfigToAttribute(character: ICharacterChart) {\n // 将总计标签的 visible 配置和组样式设置到 spec 上\n // 设置 visible 为 true 关闭标签能力放到分组上\n // 当前 dataGroupStyle 中有 label.visible 配置,在这里添加上 visible = true\n const config = character.getRuntimeConfig().config;\n const totalLabel = config.options?.totalLabel;\n if (!totalLabel) {\n return;\n }\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n\n const formatValue = ThemeManager.getAttribute(\n [character.theme, character.story.theme],\n 'character.VChart.runtime.functions.formatValue'\n );\n\n if (spec.series) {\n // 符合配置的系列都要设置 totalLabel ,因为一组 totalLabel 可能是多个不同系列的 totalLabel 组成的\n spec.series?.forEach((s: any) => {\n const stackValue = getStackValueFromSeriesSpec(s);\n if (!totalLabel[stackValue]) {\n return;\n }\n this._mergeTotalLabelConfigToSpec(s, totalLabel[stackValue], formatValue);\n });\n } else {\n // 如果 spec 中没有 series\n // 如果 spec 上有stackValue\n if (spec.stackValue) {\n if (!totalLabel[spec.stackValue]) {\n return;\n }\n this._mergeTotalLabelConfigToSpec(spec, totalLabel[spec.stackValue], formatValue);\n } else {\n // 如果 spec 上没有, 那么将 totalLabel 中的第一个key作为stackValue 设置到 spec 上\n const stackValue = Object.keys(totalLabel)[0];\n if (!isValid(stackValue)) {\n return;\n }\n spec.stackValue = stackValue;\n this._mergeTotalLabelConfigToSpec(spec, totalLabel[stackValue], formatValue);\n }\n }\n }\n\n private _mergeTotalLabelConfigToSpec(\n spec: any,\n totalLabelConfig: ITotalLabelConfig,\n formatValue: FormatValueFunction\n ) {\n spec.totalLabel = spec.totalLabel ?? {};\n if (totalLabelConfig.visible) {\n spec.totalLabel.visible = totalLabelConfig.visible;\n }\n if (totalLabelConfig.style) {\n spec.totalLabel.style = spec.totalLabel.style ?? {};\n merge(spec.totalLabel.style, totalLabelConfig.style);\n }\n this._doFormat(totalLabelConfig, spec, formatValue);\n }\n\n private _doFormat(totalLabelConfig: ITotalLabelConfig, spec: any, formatValue: FormatValueFunction) {\n if (!totalLabelConfig.formatConfig && !totalLabelConfig.single) {\n return;\n }\n spec.totalLabel.formatMethod = (value: number, datum: any, ctx: { series: ISeries }) => {\n const keyScaleMap = getSeriesKeyScalesMap(ctx.series);\n let result: number | string | string[] = value;\n // 先进行单个匹配\n // 在这里处理可以避免放重叠开启后无法正常躲避\n if (\n Object.keys(totalLabelConfig.single).some(k => {\n const config = totalLabelConfig.single[k];\n config.itemKeys;\n if (matchDatumWithScaleMap(config.itemKeys, config.itemKeyMap, keyScaleMap, datum)) {\n // 匹配成功 设置结果\n result = getLabelTextWithFormat(value, datum, ctx.series, config.formatConfig, formatValue);\n return true;\n }\n return false;\n })\n ) {\n // 返回单个匹配结果\n return result;\n }\n // 整组匹配\n return getLabelTextWithFormat(value, datum, ctx.series, totalLabelConfig.formatConfig, formatValue);\n };\n }\n\n /**\n * 处理单个总计标签样式\n * @param character\n * @param vchart\n * @returns\n */\n beforeVRenderDraw(character: ICharacterChart, vchart: IVChart) {\n const config = character.getRuntimeConfig().config;\n const totalLabel = config.options?.totalLabel;\n if (!totalLabel) {\n return;\n }\n if (Object.values(totalLabel).every(v => !v.single)) {\n return;\n }\n\n const components = vchart.getChart().getComponentsByKey('totalLabel');\n components.forEach(component => {\n // @ts-ignore\n const series = component._getSeries();\n const totalLabelConfig = totalLabel[getStackValueFromSeriesSpec(series.getSpec())];\n if (!totalLabelConfig?.single) {\n return;\n }\n const keyScaleMap = getSeriesKeyScalesMap(series);\n component.getVRenderComponents().forEach(dataLabel => {\n dataLabel.getElementsByName('label').forEach(label => {\n (label.getElementsByType('text') as IText[]).forEach(text => {\n Object.values(totalLabelConfig.single).forEach(singleConfig => {\n if (\n matchDatumWithScaleMap(\n singleConfig.itemKeys,\n singleConfig.itemKeyMap,\n keyScaleMap,\n (text.attribute as any).data\n )\n ) {\n text.setAttributes(singleConfig.style);\n }\n });\n });\n });\n });\n });\n return;\n }\n}\n\n// 得到标签经过 format 处理后的值\nfunction getLabelTextWithFormat(\n value: number,\n datum: any,\n series: ISeries,\n formatConfig: IFormatConfig,\n formatValue: FormatValueFunction\n) {\n const opt = {\n value,\n datum,\n series\n };\n return getTextWithFormat(formatConfig, array(formatConfig.content), getTotalContentValue, formatValue, opt);\n}\n\nfunction getTotalContentValue(\n {\n value,\n datum,\n series\n }: {\n value: number;\n datum: any;\n series: ISeries;\n },\n content: FormatContentType\n) {\n const dimensionField = series.getDimensionField()[0];\n switch (content) {\n case 'dimension':\n return datum[dimensionField];\n case 'percentage':\n return computeTotalPercentage(value, series);\n case 'value':\n default:\n return value;\n }\n}\n\n// 计算系列百分比\nfunction computeTotalPercentage(value: any, series: ISeries) {\n const chart = series.getChart();\n // 先获取全部值总合\n let totalValue = 1;\n if (isValidNumber(chart.getSpec()[totalLabelTempValueKey])) {\n totalValue = chart.getSpec()[totalLabelTempValueKey];\n } else {\n totalValue = series\n .getChart()\n .getAllSeries()\n .reduce((totalValue, series) => {\n const data: any[] = series.getViewData().latestData;\n const measureField = series.getMeasureField()[0];\n const seriesTotalValue = data.reduce((sum: number, d: any) => {\n return sum + Number.parseFloat(d[measureField]);\n }, 0);\n return totalValue + seriesTotalValue;\n }, 0);\n chart.getSpec()[totalLabelTempValueKey] = totalValue;\n }\n if (totalValue === 0) {\n return 0;\n }\n return (value / totalValue) * 100;\n}\n\nexport const TotalLabelRuntimeInstance = new TotalLabelRuntime();\n","import { merge } from '@visactor/vutils';\nimport type { IChartCharacterRuntime } from '../../chart/interface/runtime';\nimport { getLayoutFromWidget } from '../../../utils/layout';\nimport type { ICharacterChart } from '../../chart/interface/character-chart';\nexport class CommonLayoutRuntime implements IChartCharacterRuntime {\n type = 'CommonLayout';\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const config = character.getRuntimeConfig().config;\n const layoutData = getLayoutFromWidget(config.position, character);\n const viewBox = {\n x1: 0,\n x2: layoutData.width,\n y1: 0,\n y2: layoutData.height\n };\n rawAttribute.viewBox = viewBox;\n rawAttribute.renderCanvas = character.canvas.getNativeCanvas();\n\n merge(rawAttribute, layoutData);\n\n // panel 样式\n const { panel } = config.options;\n merge(rawAttribute.panel, panel, layoutData);\n }\n}\n\nexport const CommonLayoutRuntimeInstance = new CommonLayoutRuntime();\n","import { array } from '@visactor/vutils';\nimport type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class CommonSpecRuntime implements ITableCharacterRuntime {\n type = 'TableCommonSpec';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n spec.canvas = character.canvas.getNativeCanvas();\n spec.animation = false;\n // 编辑模式关闭\n // if (isEditor) {\n // disable select cell visible for editor mode\n spec.select = Object.assign({}, spec.select ?? {}, {\n makeSelectCellVisible: false\n });\n // spec.hover = spec.hover ?? {};\n // // spec.select.disableSelect = true;\n // // spec.hover.disableHover = true;\n // spec.columnResizeMode = 'none';\n // spec.rowResizeMode = 'none';\n /** 控制拖拽表头移动位置顺序开关 */\n // spec.dragHeaderMode = 'none';\n\n if (spec.legends) {\n array(spec.legends).forEach(l => {\n l.interactive = false;\n });\n }\n // }\n // 风神的特殊位置设置去掉,避免布局小数\n delete spec.theme?.cellInnerBorder;\n delete spec.theme?.cellBorderClipDirection;\n delete spec.theme?._contentOffset;\n delete spec.customConfig;\n\n spec.disableDirtyBounds = false;\n spec.mode = 'desktop-browser';\n spec.dpr = window.devicePixelRatio;\n spec.interactive = true;\n }\n}\n\nexport const CommonSpecRuntimeInstance = new CommonSpecRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class CellStyleRuntime implements ITableCharacterRuntime {\n type = 'CellStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const config = character.getRuntimeConfig().config;\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n const { spec } = rawAttribute;\n if (!config.options.cellStyle) {\n return;\n }\n\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n\n spec.customCellStyle = spec.customCellStyle ?? [];\n spec.customCellStyleArrangement = spec.customCellStyleArrangement ?? [];\n Object.values(config.options.cellStyle).forEach(({ col, row, style }) => {\n if (!style) {\n return;\n }\n const customStyleId = `__story_cell_Style_${col}_${row}`;\n vTable.registerCustomCellStyle(customStyleId, style);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: vTable.getCellRange(col + rowHeaderCount, row + colHeaderCount)\n },\n customStyleId\n );\n });\n }\n}\n\nexport const CellStyleRuntimeInstance = new CellStyleRuntime();\n","import { isValidNumber } from '@visactor/vutils';\nimport type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class ColWidthRuntime implements ITableCharacterRuntime {\n type = 'ColWidth';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.colWidth && Object.keys(options.colWidth).length > 0) {\n // record visible indexes\n const lastColVisible = Object.values(options.colVisible ?? {}) ?? [];\n const visibleIndexes: number[] = [];\n for (let i = 0; i <= lastColVisible.length + spec.columns.length; i += 1) {\n const colVisible = lastColVisible[i];\n if (colVisible === false) {\n continue;\n }\n visibleIndexes.push(i);\n }\n spec.columns = spec.columns.map((column: any, index: number) => {\n const colWidth = options.colWidth[visibleIndexes[index]];\n if (!isValidNumber(colWidth)) {\n return column;\n }\n return Object.assign({}, column, { width: colWidth });\n });\n }\n }\n}\n\nexport const ColWidthRuntimeInstance = new ColWidthRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class RowHeightRuntime implements ITableCharacterRuntime {\n type = 'RowHeight';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.rowHeight && Object.keys(options.rowHeight).length > 0) {\n spec.customComputeRowHeight = (args: { row: number }) => {\n return options.rowHeight[args.row] ?? undefined;\n };\n }\n }\n}\n\nexport const RowHeightRuntimeInstance = new RowHeightRuntime();\n","export function getTableTypeFromSpec(spec: any): 'ListTable' | 'PivotTable' | 'PivotChart' {\n if (!spec.indicators) {\n return 'ListTable';\n }\n // 如果有图表\n if (spec.indicators.some((i: { chartSpec: object }) => !!i.chartSpec)) {\n return 'PivotChart';\n }\n return 'PivotTable';\n}\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { getTableTypeFromSpec } from '../../../utils/table';\n\nexport class TableTypeRuntime implements ITableCharacterRuntime {\n type = 'TableType';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute();\n rawAttribute.tableType = getTableTypeFromSpec(rawAttribute.spec);\n }\n}\n\nexport const TableTypeRuntimeInstance = new TableTypeRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { isValid, merge } from '@visactor/vutils';\n\nexport class TableThemeRuntime implements ITableCharacterRuntime {\n type = 'TableTheme';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n\n if (!spec.theme) {\n spec.theme = {};\n }\n if (isValid(options.theme)) {\n spec.theme = merge(spec.theme, options.theme);\n }\n // 设置明细表的表头 & body 样式\n if (tableType === 'ListTable') {\n if (options.theme?.headerStyle && spec.columns) {\n spec.columns.forEach((col: any) => {\n if (!col.headerStyle) {\n return;\n }\n col.headerStyle = merge(col.headerStyle, options.theme.headerStyle);\n });\n }\n if (options.theme?.bodyStyle && spec.columns) {\n spec.columns.forEach((col: any) => {\n if (!col.style) {\n return;\n }\n col.style = merge(col.style, options.theme.bodyStyle);\n });\n }\n }\n }\n}\n\nexport const TableThemeRuntimeInstance = new TableThemeRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\nimport { isValid } from '@visactor/vutils';\n\nexport class ShowHeaderRuntime implements ITableCharacterRuntime {\n type = 'ShowHeader';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (isValid(options.showHeader)) {\n spec.showHeader = options.showHeader !== false;\n }\n }\n}\n\nexport const ShowHeaderRuntimeInstance = new ShowHeaderRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class ColVisibleRuntime implements ITableCharacterRuntime {\n type = 'ColVisible';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.colVisible && Object.keys(options.colVisible).length > 0) {\n spec.columns = spec.columns.map((column: any, index: number) => {\n const colVisible = options.colVisible[index];\n const hide = colVisible === false;\n return Object.assign({}, column, { hide });\n });\n }\n }\n}\n\nexport const ColVisibleRuntimeInstance = new ColVisibleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable } from '../interface/character-table';\n\nexport class RowVisibleRuntime implements ITableCharacterRuntime {\n type = 'RowVisible';\n\n applyConfigToAttribute(character: ICharacterTable): void {\n // TODO: only handle list table for now\n const tableType = character.getRuntimeConfig().getAttribute().tableType;\n if (tableType !== 'ListTable') {\n return;\n }\n\n const spec = character.getRuntimeConfig().getAttribute().spec;\n const options = character.getRuntimeConfig().config.options;\n\n if (options.rowVisible && Object.keys(options.rowVisible).length > 0) {\n const records: any[] = [];\n const headerRowVisible = options.rowVisible[-1];\n spec.showHeader = headerRowVisible !== false && options.showHeader !== false;\n spec.records.forEach((record: any, index: number) => {\n const rowVisible = options.rowVisible[index];\n if (rowVisible === false) {\n return;\n }\n records.push(record);\n });\n spec.records = records;\n }\n }\n}\n\nexport const RowVisibleRuntimeInstance = new RowVisibleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ColStyleRuntime implements ITableCharacterRuntime {\n type = 'ColStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const rowCount = vTable.rowCount;\n\n if (options.colStyle && Object.keys(options.colStyle).length > 0) {\n Object.keys(options.colStyle).forEach(key => {\n const col = parseInt(key, 10);\n const styleKey = `colStyle-${col}`;\n const colStyle = options.colStyle[col];\n if (!colStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, colStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n col: col + rowHeaderCount,\n row: 0\n },\n end: {\n col: col + rowHeaderCount,\n row: rowCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ColStyleRuntimeInstance = new ColStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class RowStyleRuntime implements ITableCharacterRuntime {\n type = 'RowStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const colCount = vTable.colCount;\n\n if (options.rowStyle && Object.keys(options.rowStyle).length > 0) {\n Object.keys(options.rowStyle).forEach(key => {\n const row = parseInt(key, 10);\n const styleKey = `rowStyle-${row}`;\n const rowStyle = options.rowStyle[row];\n if (!rowStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, rowStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n row: row + colHeaderCount,\n col: 0\n },\n end: {\n row: row + colHeaderCount,\n col: colCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const RowStyleRuntimeInstance = new RowStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ContentColStyleRuntime implements ITableCharacterRuntime {\n type = 'ContentColStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const rowCount = vTable.rowCount;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n\n if (options.contentColStyle && Object.keys(options.contentColStyle).length > 0) {\n Object.keys(options.contentColStyle).forEach(key => {\n const col = parseInt(key, 10);\n const styleKey = `contentColStyle-${col}`;\n const colStyle = options.contentColStyle[col];\n if (!colStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, colStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n col: col + rowHeaderCount,\n row: colHeaderCount\n },\n end: {\n col: col + rowHeaderCount,\n row: rowCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ContentColStyleRuntimeInstance = new ContentColStyleRuntime();\n","import type { ITableCharacterRuntime } from '../interface/runtime';\nimport type { ICharacterTable, IVTable } from '../interface/character-table';\n\nexport class ContentRowStyleRuntime implements ITableCharacterRuntime {\n type = 'ContentRowStyle';\n\n afterInitialize(character: ICharacterTable, vTable: IVTable): void {\n const options = character.getRuntimeConfig().config.options;\n const rowHeaderCount = vTable.rowHeaderLevelCount;\n const colHeaderCount = vTable.columnHeaderLevelCount;\n const colCount = vTable.colCount;\n\n if (options.contentRowStyle && Object.keys(options.contentRowStyle).length > 0) {\n Object.keys(options.contentRowStyle).forEach(key => {\n const row = parseInt(key, 10);\n const styleKey = `contentRowStyle-${row}`;\n const rowStyle = options.contentRowStyle[row];\n if (!rowStyle) {\n return;\n }\n // 声明样式\n vTable.registerCustomCellStyle(styleKey, rowStyle);\n // 匹配样式\n vTable.arrangeCustomCellStyle(\n {\n range: {\n start: {\n row: row + colHeaderCount,\n col: rowHeaderCount\n },\n end: {\n row: row + colHeaderCount,\n col: colCount - 1\n }\n }\n },\n styleKey\n );\n });\n }\n }\n}\n\nexport const ContentRowStyleRuntimeInstance = new ContentRowStyleRuntime();\n","import { RankingBarCharacter, registerRankingBarTemp } from '../character/chart/character/rankingBar';\nimport { ScatterBarCharacter } from '../character/chart/character/scatter-bar';\nimport { VChartCharacter, registerAllVChart } from '../character/chart/character/vchart';\nimport { WaveScatterCharacter } from '../character/chart/character/wave-scatter';\nimport { ArcCharacter } from '../character/component/character/arc';\nimport { ImageCharacter } from '../character/component/character/image';\nimport { LineCharacter } from '../character/component/character/line';\nimport { PolygonCharacter } from '../character/component/character/polygon';\nimport { RectCharacter } from '../character/component/character/rect';\nimport { ShapeCharacter } from '../character/component/character/shape';\nimport { TextCharacter } from '../character/component/character/text';\nimport { TimelineCharacter } from '../character/component/character/timeline';\nimport { UnitCharacter } from '../character/component/character/unit';\nimport { StoryFactory } from '../utils/factory';\nimport { VTableCharacter } from '../character/table/character/vtable';\nimport { PivotChartCharacter } from '../character/table/character/pivot-chart';\nimport { RuntimeStore } from '../store';\nimport { CommonSpecRuntimeInstance as ChartCommonSpecRuntimeInstance } from '../character/chart/runtime/common-spec';\nimport { RankingBarRuntimeInstance } from '../character/chart/runtime/ranking-bar';\nimport { WaveScatterRuntimeInstance } from '../character/chart/runtime/wave-scatter';\nimport { TextRuntimeInstance } from '../character/component/runtime/text';\nimport { LineRuntimeInstance } from '../character/component/runtime/line';\nimport { BaseGraphicRuntimeInstance } from '../character/component/runtime/base';\nimport { SeriesSpecRuntimeInstance } from '../character/chart/runtime/series-spec';\nimport { MarkStyleRuntimeInstance } from '../character/chart/runtime/mark-style';\nimport { LabelStyleRuntimeInstance } from '../character/chart/runtime/label-style';\nimport { TotalLabelRuntimeInstance } from '../character/chart/runtime/total-label';\nimport { CommonLayoutRuntimeInstance } from '../character/common/runtime/common-layout';\n\nimport { CommonSpecRuntimeInstance as TableCommonSpecRuntimeInstance } from '../character/table/runtime/common-spec';\nimport { CellStyleRuntimeInstance } from '../character/table/runtime/cell-style';\nimport { ColWidthRuntimeInstance } from '../character/table/runtime/col-width';\nimport { RowHeightRuntimeInstance } from '../character/table/runtime/row-height';\nimport { TableTypeRuntimeInstance } from '../character/table/runtime/table-type';\nimport { TableThemeRuntimeInstance } from '../character/table/runtime/table-theme';\nimport { ShowHeaderRuntimeInstance } from '../character/table/runtime/show-header';\nimport { ColVisibleRuntimeInstance } from '../character/table/runtime/col-visible';\nimport { RowVisibleRuntimeInstance } from '../character/table/runtime/row-visible';\nimport { ColStyleRuntimeInstance } from '../character/table/runtime/col-style';\nimport { RowStyleRuntimeInstance } from '../character/table/runtime/row-style';\nimport { ContentColStyleRuntimeInstance } from '../character/table/runtime/content-col-style';\nimport { ContentRowStyleRuntimeInstance } from '../character/table/runtime/content-row-style';\n\nlet _register = false;\nexport function registerCharacters() {\n if (_register) {\n return;\n }\n _register = true;\n // chart\n StoryFactory.registerCharacter(VChartCharacter.type, VChartCharacter);\n registerRankingBarTemp();\n registerAllVChart();\n StoryFactory.registerCharacter(RankingBarCharacter.type, RankingBarCharacter);\n StoryFactory.registerCharacter(WaveScatterCharacter.type, WaveScatterCharacter);\n StoryFactory.registerCharacter(ScatterBarCharacter.type, ScatterBarCharacter);\n // component\n StoryFactory.registerCharacter(TextCharacter.type, TextCharacter);\n StoryFactory.registerCharacter(RectCharacter.type, RectCharacter);\n StoryFactory.registerCharacter(ImageCharacter.type, ImageCharacter);\n StoryFactory.registerCharacter(LineCharacter.type, LineCharacter);\n StoryFactory.registerCharacter(ShapeCharacter.type, ShapeCharacter);\n StoryFactory.registerCharacter(PolygonCharacter.type, PolygonCharacter);\n StoryFactory.registerCharacter(ArcCharacter.type, ArcCharacter);\n\n StoryFactory.registerCharacter(TimelineCharacter.type, TimelineCharacter);\n StoryFactory.registerCharacter(UnitCharacter.type, UnitCharacter);\n // table\n StoryFactory.registerCharacter(VTableCharacter.type, VTableCharacter);\n // table\n StoryFactory.registerCharacter(PivotChartCharacter.type, PivotChartCharacter);\n\n registerRuntime();\n}\n\nexport function registerRuntime() {\n // 基础运行时\n RuntimeStore.register(CommonLayoutRuntimeInstance);\n\n // 基础图表运行时\n RuntimeStore.register(ChartCommonSpecRuntimeInstance);\n RuntimeStore.register(SeriesSpecRuntimeInstance);\n RuntimeStore.register(MarkStyleRuntimeInstance);\n RuntimeStore.register(LabelStyleRuntimeInstance);\n RuntimeStore.register(TotalLabelRuntimeInstance);\n\n // 图表相关运行时\n RuntimeStore.register(RankingBarRuntimeInstance);\n RuntimeStore.register(WaveScatterRuntimeInstance);\n\n // 组件相关运行时\n RuntimeStore.register(BaseGraphicRuntimeInstance);\n RuntimeStore.register(TextRuntimeInstance);\n RuntimeStore.register(LineRuntimeInstance);\n\n // 表格相关运行时\n RuntimeStore.register(TableCommonSpecRuntimeInstance);\n RuntimeStore.register(TableTypeRuntimeInstance);\n RuntimeStore.register(TableThemeRuntimeInstance);\n RuntimeStore.register(ShowHeaderRuntimeInstance);\n RuntimeStore.register(ColWidthRuntimeInstance);\n RuntimeStore.register(RowHeightRuntimeInstance);\n RuntimeStore.register(ColVisibleRuntimeInstance);\n RuntimeStore.register(RowVisibleRuntimeInstance);\n RuntimeStore.register(ColStyleRuntimeInstance);\n RuntimeStore.register(RowStyleRuntimeInstance);\n RuntimeStore.register(ContentColStyleRuntimeInstance);\n RuntimeStore.register(ContentRowStyleRuntimeInstance);\n RuntimeStore.register(CellStyleRuntimeInstance);\n}\n","import type { IActionSpec } from '@visactor/vstory-core';\n\nexport function getPayload(action: IActionSpec) {\n return (Array.isArray(action.payload) ? action.payload[0] : action.payload) ?? {};\n}\n","import type { IActionProcessorItem } from '@visactor/vstory-core';\nimport type { IActionSpec } from '@visactor/vstory-core';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { getPayload } from './component/common/utils';\n\nexport class ActionProcessorItem implements IActionProcessorItem {\n getStartTime(action: IActionSpec): number {\n return this.getStartTimeAndDuration(action).startTime;\n }\n getDuration(action: IActionSpec): number {\n return this.getStartTimeAndDuration(action).duration;\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n protected preRun(character: ICharacter, actionSpec: IActionSpec) {\n // 首先展示出来\n character.show();\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n return;\n }\n}\n","import type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { ActionProcessorItem } from '../processor-item';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { array } from '@visactor/vutils';\n\nexport class VChartBaseActionProcessor extends ActionProcessorItem {\n /**\n * 筛选器,payload中可以配置筛选器来设置这个\n * @param selector\n * @param vchart\n */\n selectBySelector(\n selector: string | string[],\n character: ICharacter\n ): {\n chart: boolean;\n panel: boolean;\n seriesList: ISeries[];\n componentsList: IComponent[];\n } {\n return character.getGraphicBySelector(selector);\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n let totalStartTime = Infinity;\n let totalEndTime = -Infinity;\n array(action.payload).forEach(payload => {\n const { startTime = 0, duration = 0 } = payload?.animation ?? ({} as any);\n totalStartTime = Math.min(startTime ?? 0, totalStartTime);\n totalEndTime = Math.max(startTime + duration, totalEndTime);\n });\n\n let st = globalStartTime + totalStartTime;\n let d = totalEndTime - totalStartTime;\n // 避免数据不合法,算出来时长有问题\n if (!isFinite(st)) {\n st = 0;\n }\n if (!isFinite(d)) {\n d = 0;\n }\n return {\n startTime: st,\n duration: d\n };\n }\n}\n","export const ACTION_TYPE = {\n APPEAR: 'appear',\n DISAPPEAR: 'disappear',\n STYLE: 'style',\n MOVETO: 'moveTo',\n SCALETO: 'scaleTo',\n STATE: 'state',\n BOUNCE: 'bounce',\n PLAY: 'play',\n UPDATE: 'update',\n ADD: 'add',\n HIGHLIGHT: 'highlight'\n};\n","import { globalProcessorRegistry, type ICharacter, CharacterType } from '@visactor/vstory-core';\nimport type { IVChart } from '@visactor/vchart';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport type { IChartAddAction, IChartAddPayload } from './interface';\nimport { VChartBaseActionProcessor } from './base';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartAddActionProcessor extends VChartBaseActionProcessor {\n name: 'add';\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartAddAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec as IChartAddAction;\n // add action暂时不支持数组\n const { id: dataId, values } = payload as IChartAddPayload;\n const rowData = cloneDeep((instance as any)._dataSet.getDataView(dataId).rawData);\n\n const data = isArray(values) ? values : [values];\n rowData.push(...data);\n\n instance.updateDataSync(dataId, rowData);\n }\n}\n\nexport function registerVChartAddAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.ADD]: new VChartAddActionProcessor()\n });\n}\n","export const isMatch = (obj: any, source: any) => {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n if (!obj.hasOwnProperty(key) || obj[key] !== source[key]) {\n return false;\n }\n }\n }\n return true;\n};\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VChartBaseActionProcessor } from './base';\nimport type { IChartUpdateAction, IChartUpdatePayload } from './interface';\nimport type { IVChart } from '@visactor/vchart';\nimport { cloneDeep, isArray } from '@visactor/vutils';\nimport { isMatch } from '../../utils/isMatch';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartUpdateActionProcessor extends VChartBaseActionProcessor {\n name: 'update';\n\n run(character: ICharacter, actionSpec: IChartUpdateAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec;\n // update action暂时不支持数组\n const { id: dataId, data, values } = payload as IChartUpdatePayload;\n\n if (values) {\n instance.updateDataSync(dataId, values);\n } else {\n const rowData = cloneDeep((instance as any)._dataSet.getDataView(dataId).rawData);\n\n const items = isArray(data) ? data : [data];\n\n items.forEach(item => {\n const { sourceValue, targetValue } = item;\n const dataIndex = rowData.findIndex((v: any) => isMatch(v, sourceValue));\n if (dataIndex !== -1) {\n rowData.splice(dataIndex, 1, targetValue);\n }\n });\n\n instance.updateDataSync(dataId, rowData);\n }\n }\n}\n\nexport function registerVChartUpdateAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.UPDATE]: new VChartUpdateActionProcessor()\n });\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const commonFade = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean },\n key: string = 'baseOpacity'\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currOpacity = (instance.attribute as any)[key] ?? 1;\n const opacityMap = disappear ? { from: currOpacity, to: 0 } : { from: 0, to: currOpacity };\n\n instance.setAttributes({ [key]: opacityMap.from });\n instance.animate().to({ [key]: opacityMap.to }, duration, easing);\n};\nexport const commonGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currScaleX = instance.attribute.scaleX;\n const currScaleY = instance.attribute.scaleY;\n const opacityMap = disappear\n ? { fromX: currScaleX ?? 1, fromY: currScaleY ?? 1, toX: 0, toY: 0 }\n : { fromX: 0, fromY: 0, toX: currScaleX ?? 1, toY: currScaleY ?? 1 };\n\n instance.setAttributes({ scaleX: opacityMap.fromX, scaleY: opacityMap.fromY });\n instance.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade } from '../common/commonAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const commonGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height' }\n) => {\n const { duration, easing } = animation;\n const { disappear, orient = 'width' } = option;\n\n instance = instance.getChildAt(0) as IGroup;\n const width = instance.AABBBounds.width();\n const height = instance.AABBBounds.height();\n if (orient === 'width') {\n const opacityMap = disappear ? { from: width, to: 0 } : { from: 0, to: width };\n instance.setAttributes({\n width: opacityMap.from,\n height,\n clip: true\n });\n instance.animate().to({ width: opacityMap.to }, duration, easing);\n } else {\n const opacityMap = disappear ? { from: height, to: 0 } : { from: 0, to: height };\n // TODO: 轴 bounds 不准确\n instance.setAttributes({\n width: width * 2,\n height: opacityMap.from,\n clip: true\n });\n instance.animate().to({ height: opacityMap.to }, duration, easing);\n }\n};\n\nexport const runAppearOrDisAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type { IChartVisibilityPayload } from '../../interface';\nimport { commonFade } from '../common/commonAppear';\nimport { commonGrow } from './commonAppear';\nimport type { IGroup, ILine, IText } from '@visactor/vrender-core';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runAxisAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return axisGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nfunction axisGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n const isGrid = instance.name?.includes('grid');\n if (isGrid) {\n gridGrow(instance, animation, option);\n } else {\n mainAxisGrow(instance, animation, option);\n }\n}\n\nfunction mainAxisGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n const { duration, easing } = animation;\n const { disappear, direction = 'positive', orient } = option;\n const axisLine = instance.getElementsByName('axis-line')[0] as unknown as IGroup;\n const axisTicks = instance.getElementsByName('axis-tick-container')[0] as unknown as IGroup;\n const axisLabel = instance.getElementsByName('axis-label-container')[0] as unknown as IGroup;\n\n if (axisLine && axisLine.childrenCount > 0) {\n const shouldReverse =\n orient === 'height'\n ? direction === 'positive' || disappear //\n : false;\n\n const line = axisLine.getElementsByType('line')[0] as unknown as ILine;\n if (line) {\n if (shouldReverse) {\n line.setAttributes({ points: line.attribute.points.reverse() });\n }\n const attributeMap = disappear\n ? { from: { clipRange: 1 }, to: { clipRange: 0 } }\n : { from: { clipRange: 0 }, to: { clipRange: 1 } };\n\n line.setAttributes(attributeMap.from);\n line\n .animate()\n .to(attributeMap.to, duration, easing)\n .onEnd(() => {\n if (shouldReverse) {\n line.setAttributes({ points: line.attribute.points.reverse() });\n }\n });\n }\n }\n\n const opacityMap = disappear\n ? { from: { opacity: 1 }, to: { opacity: 0 } }\n : { from: { opacity: 0 }, to: { opacity: 1 } };\n\n if (axisTicks && axisTicks.childrenCount > 0) {\n const shouldReverse = disappear;\n const ticks = axisTicks.getElementsByType('line');\n if (shouldReverse) {\n ticks.reverse();\n }\n ticks.forEach((tick: IText, i: number) => {\n tick.setAttributes(opacityMap.from);\n tick\n .animate()\n .wait((duration / ticks.length) * i)\n .to(opacityMap.to, duration / ticks.length, easing)\n .onEnd(() => {\n if (shouldReverse) {\n ticks.reverse();\n }\n });\n });\n }\n\n if (axisLabel && axisLabel.childrenCount > 0) {\n const shouldReverse = disappear;\n const text = axisLabel.getElementsByType('text');\n if (shouldReverse) {\n text.reverse();\n }\n text.forEach((t: IText, i: number) => {\n t.setAttributes(opacityMap.from);\n t.animate()\n .wait((duration / text.length) * i)\n .to(opacityMap.to, duration / text.length, easing)\n .onEnd(() => {\n if (shouldReverse) {\n text.reverse();\n }\n });\n });\n }\n}\n\nfunction gridGrow(\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean; orient?: 'width' | 'height'; direction?: 'negative' | 'positive' }\n) {\n if (instance) {\n commonGrow(instance, animation, option);\n }\n}\n","import type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IChartVisibilityPayload } from '../../interface';\n\nexport const runLabelAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return labelGrow(instance, animation, option);\n }\n case 'followGraphic': {\n return labelFollowGraphic(instance, animation, option);\n }\n case 'fade': {\n return labelFade(instance, animation, option);\n }\n default: {\n return labelFade(instance, animation, option);\n }\n }\n};\n\nconst labelGrow = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const sizeMap = disappear ? { from: 1, to: 0 } : { from: 0, to: 1 };\n\n instance.getElementsByType('text').forEach((text: IGraphic) => {\n text.setAttributes({ scaleX: sizeMap.from, scaleY: sizeMap.from });\n text.animate().to({ scaleX: sizeMap.to, scaleY: sizeMap.to }, duration, easing);\n });\n\n instance.getElementsByType('richtext').forEach((text: IGraphic) => {\n text.setAttributes({ scaleX: sizeMap.from, scaleY: sizeMap.from });\n text.animate().to({ scaleX: sizeMap.to, scaleY: sizeMap.to }, duration, easing);\n });\n};\n\nconst labelFade = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const opacityMap = disappear ? { from: 1, to: 0 } : { from: 0, to: 1 };\n instance.getElementsByType('text').forEach((text: IGraphic) => {\n text.setAttributes({ opacity: opacityMap.from });\n text.animate().to({ opacity: opacityMap.to }, duration, easing);\n });\n\n instance.getElementsByType('richtext').forEach((text: IGraphic) => {\n text.setAttributes({ opacity: opacityMap.from });\n text.animate().to({ opacity: opacityMap.to }, duration, easing);\n });\n};\n\nconst labelFollowGraphic = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const opacityMap = disappear ? { from: 1, to: 0 } : { from: 1, to: 1 };\n instance.setAttributes({ baseOpacity: opacityMap.from });\n instance.animate().to({ baseOpacity: opacityMap.to }, duration, easing);\n};\n","import type { IChartVisibilityPayload } from '../../interface';\n\nexport const getCustomParams = (\n animation: IChartVisibilityPayload['animation'],\n delayPerTime: number,\n enterPerTime: number\n) => {\n const { duration: totalTime, loop, oneByOne, easing, dimensionCount = 1 } = animation;\n\n // 柱子+label,不要卡时间,加一些buffer\n const buffer = Math.min(delayPerTime, enterPerTime) / 3;\n const standTime = delayPerTime * (dimensionCount - 1) + enterPerTime + buffer;\n const ratio = totalTime / standTime;\n\n const duration = oneByOne ? enterPerTime * ratio : totalTime;\n\n return {\n duration,\n loop,\n oneByOne: oneByOne ? duration + (delayPerTime - enterPerTime) * ratio : oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\nimport { PieLeap } from '@visactor/vstory-animate';\n\n// 将payload转换为chart内置的动画type\nexport const transformArcVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n payload: any;\n }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return arcGrowRadius(instance, animation, option);\n }\n case 'growRadius': {\n return arcGrowRadius(instance, animation, option);\n }\n case 'growAngle': {\n return arcGrowAngle(instance, animation, option);\n }\n case 'fade': {\n return arcFade(instance, animation, option);\n }\n case 'pieLeap': {\n return pieLeap(instance, animation);\n }\n default: {\n return arcFade(instance, animation, option);\n }\n }\n};\n\nconst arcGrowRadius = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n\n const { disappear } = option;\n const type = disappear ? 'growRadiusOut' : 'growRadiusIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst arcGrowAngle = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { disappear } = option;\n const type = disappear ? 'growAngleOut' : 'growAngleIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing,\n options: {\n overall: true\n }\n };\n};\n\nconst arcFade = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { disappear } = option;\n const type = disappear ? 'fadeOut' : 'fadeIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst pieLeap = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? PieLeap.delayPerTime ?? 50,\n animation.enterPerTime ?? PieLeap.enterPerTime ?? 300\n );\n return {\n channel: ['x', 'y', 'innerRadius', 'outerRadius'],\n custom: PieLeap,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\n\nexport const commonGrow = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n typeList: string[],\n option: { markIndex: number; disappear: boolean }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n // const { duration, loop, oneByOne, easing } = animation;\n const { disappear } = option;\n\n const type = disappear ? typeList[1] : typeList[0];\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nexport const commonFade = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n const { disappear } = option;\n const type = disappear ? 'fadeOut' : 'fadeIn';\n\n return {\n type,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { getCustomParams } from './utils';\n\nexport const growPoints = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 30,\n animation.enterPerTime ?? 200\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n return {\n type: params.direction === 'horizontal' ? 'growPointsXIn' : 'growPointsYIn',\n options: {\n orient: params.direction === 'horizontal' ? 'positive' : 'negative'\n },\n duration,\n oneByOne,\n easing\n };\n};\n\nexport const transformLineVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['clipIn', 'clipOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n case 'growPoints': {\n return growPoints(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type VChart from '@visactor/vchart';\nimport type { IOrientType } from '@visactor/vrender-components';\nimport { BarBounce, BarLeap } from '@visactor/vstory-animate';\nimport { commonFade } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport { getCustomParams } from './utils';\nimport type { ICharacter } from '@visactor/vstory-core';\n\n// 将payload转换为chart内置的动画type\nexport const transformRectVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; payload: any; character?: ICharacter }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return rectGrow(instance, animation, {\n ...option,\n center: false\n });\n }\n case 'centerGrow': {\n return rectGrow(instance, animation, {\n ...option,\n center: true\n });\n }\n case 'barBounce': {\n return barBounce(instance, animation);\n }\n case 'barLeap': {\n return barLeap(instance, animation);\n }\n case 'fade':\n default: {\n return commonFade(instance, animation, {\n ...option\n });\n }\n }\n};\n\nconst rectGrow = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option = { center: false, disappear: false }\n) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 60,\n animation.enterPerTime ?? 100\n );\n const { center, disappear } = option;\n const direction = instance.getChart().getSpec().direction ?? 'vertical';\n const xField = instance.getChart().getSpec().xField;\n const yField = instance.getChart().getSpec().yField;\n const [xAxis, yAxis] = getXYAxis(instance);\n\n const type = disappear ? (center ? 'growCenterOut' : 'growHeightOut') : center ? 'growCenterIn' : 'growHeightIn';\n\n return {\n type: type,\n duration,\n loop,\n oneByOne,\n easing,\n options: (datum: any, element: any, params: any) => {\n const field = direction === 'vertical' ? yField : xField;\n const data = datum?.[field];\n\n if (direction === 'vertical') {\n return {\n overall: yAxis?.getScale(0).scale(0),\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n return {\n overall: xAxis?.getScale(0).scale(0),\n orient: data > 0 ? 'negative' : 'positive'\n };\n }\n };\n};\n\nfunction isXAxis(orient: IOrientType) {\n return orient === 'bottom' || orient === 'top';\n}\n\nfunction isYAxis(orient: IOrientType) {\n return orient === 'left' || orient === 'right';\n}\n\nconst getXYAxis = (instance: VChart) => {\n const axes = instance.getChart().getComponentsByKey('axes');\n const xAxis = axes.find(axis => {\n const orient = (axis as any).getOrient();\n if (isXAxis(orient)) {\n return true;\n }\n }) as any;\n const yAxis = axes.find(axis => {\n const orient = (axis as any).getOrient();\n if (isYAxis(orient)) {\n return true;\n }\n }) as any;\n\n return [xAxis, yAxis];\n};\n\nconst barBounce = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? BarBounce.delayPerTime ?? 50,\n animation.enterPerTime ?? BarBounce.enterPerTime ?? 300\n );\n\n return {\n channel: ['x', 'y', 'x1', 'y1', 'width', 'height'],\n custom: BarBounce,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n\nconst barLeap = (instance: VChart, animation: IChartVisibilityPayload['animation']) => {\n const { duration, loop, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? BarBounce.delayPerTime ?? 50,\n animation.enterPerTime ?? BarBounce.enterPerTime ?? 300\n );\n\n return {\n channel: ['x', 'y', 'x1', 'y1', 'width', 'height', 'cornerRadius'],\n custom: BarLeap,\n duration,\n loop,\n oneByOne,\n easing\n };\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { SymbolSwing, SymbolThrow } from '@visactor/vstory-animate';\nimport { getCustomParams } from './utils';\n\nexport const throwBounce = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 50,\n animation.enterPerTime ?? 300\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n const { width, height } = character.getAttribute();\n\n return {\n channel: ['x', 'y'],\n custom: SymbolThrow,\n easing,\n duration,\n oneByOne,\n customParameters: {\n width,\n height,\n ...params\n },\n reverse: true,\n reversed: true\n };\n};\nexport const swing = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n const { duration, oneByOne, easing } = getCustomParams(\n animation,\n animation.delayPerTime ?? 30,\n animation.enterPerTime ?? 200\n );\n const { params = {} } = animation;\n const { disappear, character } = option;\n if (disappear || !character) {\n return commonFade(instance, animation, option);\n }\n\n const { width, height } = character.getAttribute();\n\n return {\n channel: ['x', 'y'],\n custom: SymbolSwing,\n easing,\n duration,\n oneByOne: oneByOne,\n customParameters: {\n width,\n height,\n delta: 30,\n ...params\n },\n reverse: true,\n reversed: true\n };\n};\n\nexport const transformSymbolVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: { markIndex: number; disappear: boolean; character?: ICharacter }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['scaleIn', 'scaleOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n case 'throwBounce': {\n return throwBounce(instance, animation, option);\n }\n case 'swing': {\n return swing(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import { runChartAppear, runPanelAppear } from './common/chartAppear';\nimport { runAxisAppear } from './component/axisAppear';\nimport { runLabelAppear } from './component/labelAppear';\nimport { runLegendsAppear } from './component/legendsAppear';\nimport { runTitleAppear } from './component/titleAppear';\nimport { transformArcVisibility } from './seriesmark/transformArcVisibility';\nimport { transformLineVisibility } from './seriesmark/transformLineVisibility';\nimport { transformRectVisibility } from './seriesmark/transformRectVisibility';\nimport { transformSymbolVisibility } from './seriesmark/transformSymbolVisibility';\nimport { transformTextVisibility } from './seriesmark/transformTextVisibility';\n\nexport const transformMap = {\n appear: {\n // series & mark\n rect: transformRectVisibility,\n line: transformLineVisibility,\n symbol: transformSymbolVisibility,\n text: transformTextVisibility,\n arc: transformArcVisibility,\n // component\n legends: runLegendsAppear,\n label: runLabelAppear,\n axis: runAxisAppear,\n title: runTitleAppear,\n // chart:\n chart: runChartAppear,\n // panel\n panel: runPanelAppear\n }\n};\n","import type VChart from '@visactor/vchart';\nimport { commonFade, commonGrow } from './commonTransformMarkAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\n// 将payload转换为chart内置的动画type\nexport const transformTextVisibility = (\n instance: VChart,\n animation: IChartVisibilityPayload['animation'],\n option: {\n disappear: boolean;\n markIndex: number;\n }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, ['scaleIn', 'scaleOut'], option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade, commonGrow } from './commonAppear';\nimport type { IChartVisibilityPayload } from '../../interface';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runChartAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nexport const runPanelAppear = (\n instance: IGroup,\n animation: IChartVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option, 'opacity');\n }\n default: {\n return commonFade(instance, animation, option, 'opacity');\n }\n }\n};\n","export function checkArrayOrder(arr: any[], field: string) {\n if (!arr) {\n return 1;\n }\n let isAscending = true;\n let isDescending = true;\n\n for (let i = 0; i < arr.length - 1; i++) {\n if (arr[i][field] > arr[i + 1][field]) {\n isAscending = false;\n }\n if (arr[i][field] < arr[i + 1][field]) {\n isDescending = false;\n }\n }\n\n if (isAscending) {\n return 1;\n }\n if (isDescending) {\n return -1;\n }\n}\n","import { Bounce } from '@visactor/vstory-animate';\nimport type { IAction, IActionPayload, ICharacter } from '@visactor/vstory-core';\nimport { getCharacterParentGraphic } from './common';\nimport type { IGraphic } from '@visactor/vrender-core';\n\nexport interface IComponentBouncePayLoad extends IActionPayload {\n /**\n * 自定义弹跳 easing path string\n */\n customEase?: string;\n\n type?: 'bounce1' | 'bounce2';\n flipY?: boolean;\n\n /**\n * 跳跃高度\n */\n dy?: number;\n}\n\nexport interface IComponentBounceAction extends IAction {\n action: 'bounce';\n}\n\nconst bounce2Str =\n 'M 0 -0.545 C 0.024 -0.045 0.068 0.414 0.21 0.429 C 0.36 0.436 0.396 -0.258 0.521 -0.237 C 0.626 -0.232 0.634 0.131 0.717 0.128 C 0.827 0.133 0.827 -0.073 0.91 -0.083 C 0.962 -0.086 1 0 1 0';\nconst bounce3Str =\n 'M 0 -0.545 C 0.024 -0.045 0.052 0.358 0.216 0.381 C 0.321 0.368 0.37 -0.122 0.506 -0.114 C 0.615 -0.12 0.668 0.094 0.837 0.092 C 0.923 0.087 0.973 0.034 1.004 -0.005';\nconst bounce4Str =\n 'M 0 -0.545 C 0.024 -0.045 0.075 0.389 0.216 0.381 C 0.36 0.376 0.425 -0.133 0.756 -0.127 C 0.918 -0.109 0.973 -0.057 1.007 0.003';\nconst bounceMap: any = {\n bounce2: bounce2Str,\n bounce3: bounce3Str,\n bounce4: bounce4Str\n};\n\nexport function bounce(\n graphic: IGraphic,\n animation: IComponentBouncePayLoad['animation'],\n params: IComponentBouncePayLoad\n) {\n if (graphic) {\n const { duration, easing } = animation;\n const { dy } = params;\n const visible = graphic.attribute.visible;\n if (visible === false) {\n graphic.attribute.visible = true;\n }\n const height = graphic.AABBBounds.height();\n if (visible === false) {\n graphic.setAttribute('visible', false);\n }\n graphic.animate().play(\n new Bounce({}, {}, duration, easing, {\n dy: (params.flipY ? -1 : 1) * (dy ?? height * 0.2),\n customEase: params.customEase || bounceMap[params.type]\n })\n );\n }\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { ICharacter } from '@visactor/vstory-core';\n\nexport function getCharacterParentGraphic(character: ICharacter) {\n return character.graphic;\n}\n\nexport function getCharacterGraphic(character: ICharacter) {\n return character.graphic.getChildren() as IGraphic[];\n}\n\nexport function getCharacterByEffect(character: ICharacter, effect: 'move' | string) {\n // move效果, 一定是对parent的操作\n return getCharacterGraphic(character);\n}\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport type { IComponentBounceAction } from '../../common/bounce-processor';\nimport { bounce } from '../../common/bounce-processor';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { getCharacterParentGraphic } from '../../common/common';\n\nexport class CommonBounceActionProcessor extends ActionProcessorItem {\n name: 'bounce';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentBounceAction): void {\n super.preRun(character, actionSpec);\n const payload = getPayload(actionSpec);\n const { animation = {} } = payload;\n bounce(getCharacterParentGraphic(character), animation as any, payload);\n }\n}\n\nexport function registerCommonBounceAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.COMMON, {\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getCharacterGraphic, getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType } from '@visactor/vrender-core';\nimport { getPayload } from './utils';\n\nexport interface IComponentStylePayLoad extends IActionPayload {\n graphic?: Record;\n text?: Record;\n panel?: Record;\n}\n\nexport interface IComponentStyleAction extends IAction {\n action: 'style';\n}\n\nexport class CommonStyleActionProcessor extends ActionProcessorItem {\n name: 'style';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentStyleAction): void {\n super.preRun(character, actionSpec);\n const {\n animation = {},\n graphic: graphicStyle = {},\n text: textStyle,\n panel: panelStyle\n } = getPayload(actionSpec) as IComponentStylePayLoad;\n const { duration, easing } = animation as any;\n const characters = getCharacterGraphic(character);\n const component = getCharacterParentGraphic(character);\n const text = characters[0];\n const graphic = characters[characters.length - 1];\n\n // 这些属性都设置给component,由component下发给graphic\n const componentStyle: any = { ...panelStyle };\n ['x', 'y', 'dx', 'dy', 'scaleX', 'scaleY', 'width', 'height'].forEach(key => {\n if (key in graphicStyle) {\n componentStyle[key] = graphicStyle[key];\n delete graphicStyle[key];\n }\n });\n if (component) {\n // 获取到x,y,width,height,scaleX,scaleY,将这些属性应用到component上\n // TODO component动画优化\n if (component.styleAnimate) {\n component.styleAnimate(componentStyle, animation);\n } else {\n component.animate().to(componentStyle, duration, easing as EasingType);\n }\n }\n if (graphic && graphicStyle) {\n if (graphic.styleAnimate) {\n graphic.styleAnimate(graphicStyle, animation);\n } else {\n graphic.animate().to(graphicStyle, duration, easing as EasingType);\n }\n }\n if (text && textStyle) {\n // TODO 鲁棒性,考虑更兼容的方式\n // 特殊处理textConfig\n if (textStyle.text && (text.attribute as any).textConfig) {\n textStyle.textConfig = [{ ...((text.attribute as any).textConfig || [])[0], text: textStyle.text }];\n }\n text.animate().to(textStyle, duration, easing as EasingType);\n }\n }\n}\n","import type { IComponent, ISeries, IVChart } from '@visactor/vchart';\nimport { array, cloneDeep, isArray, isFunction, merge } from '@visactor/vutils';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VChartBaseActionProcessor } from './base';\nimport type { IChartVisibilityAction, IChartVisibilityPayload } from './interface';\nimport { transformMap } from './transformFunc/transformMap';\nimport type { AxisBaseAttributes } from '@visactor/vrender-components';\nimport { checkArrayOrder } from '../../utils/checkArrayOrder';\nimport type { IGroup } from '@visactor/vrender-core';\nimport { ACTION_TYPE } from '../constants/action';\nimport { CommonBounceActionProcessor } from '../component/common/bounce';\nimport { VChartUpdateActionProcessor } from './update';\nimport { VChartAddActionProcessor } from './add';\nimport { CommonStyleActionProcessor } from '../component/common/style';\n\nexport class VChartVisibilityActionProcessor extends VChartBaseActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n protected character: ICharacter | null;\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n super.preRun(character, actionSpec);\n this.runOrApplyAttrs(character, actionSpec, { isRun: true });\n }\n\n applyAttrsForVisibility(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n this.runOrApplyAttrs(character, actionSpec, { isRun: false });\n }\n\n protected runOrApplyAttrs(character: ICharacter, actionSpec: IChartVisibilityAction, params: { isRun?: boolean }) {\n const { isRun = true } = params;\n this.character = character;\n const vchart = character.graphic._vchart as IVChart;\n // 基于选择器做筛选\n // 同一个Action的payload数组中,项与项之间是覆盖关系,后项覆盖前项\n const runnedSeriesSet = new Set();\n const runnedComponentsSet = new Set();\n let runnedChart = false;\n array(actionSpec.payload)\n .reverse()\n .forEach(payload => {\n const { chart, seriesList, componentsList, panel } = this.selectBySelector(payload.selector ?? '*', character);\n if (!runnedChart && chart) {\n // chart & panel\n this.chartVisibility(character.graphic as any, actionSpec.action, payload, isRun);\n } else if (!runnedChart && panel) {\n // panel\n this.panelVisibility(character.graphic as any, actionSpec.action, payload, isRun);\n }\n // 过滤seriesList\n const shouldRunSeriesList = seriesList.filter(item => !runnedSeriesSet.has(item));\n shouldRunSeriesList.forEach(series => {\n this.commonSeriesAppear(vchart, series, actionSpec.action, payload, isRun);\n });\n // 过滤componentsList\n const shouldRunComponentsList = componentsList.filter(item => !runnedComponentsSet.has(item));\n shouldRunComponentsList.forEach(component => {\n this.componentAppear(vchart, component, actionSpec.action, payload, isRun);\n });\n runnedChart = runnedChart || chart;\n seriesList.forEach(item => runnedSeriesSet.add(item));\n componentsList.forEach(item => runnedComponentsSet.add(item));\n });\n this.character = null;\n }\n\n protected chartVisibility(\n chartGraphic: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (!isRun) {\n return;\n }\n const appearTransformFunc = transformMap.appear.chart;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(chartGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected panelVisibility(\n chartGraphic: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (!isRun) {\n return;\n }\n const appearTransformFunc = transformMap.appear.panel;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(chartGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected componentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n if (component.specKey === 'label') {\n this.labelComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'legends') {\n this.legendsComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'axes') {\n this.axisComponentAppear(vchart, component, action, payload, isRun);\n } else if (component.specKey === 'title') {\n this.titleComponentAppear(vchart, component, action, payload, isRun);\n }\n }\n\n protected labelComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const appearTransformFunc = transformMap.appear.label;\n const defaultPayload = VChartVisibilityActionProcessor.defaultPayload;\n vrenderComponents.forEach(group => {\n if (isRun) {\n (group.attribute as any).visibleAll = true;\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n } else {\n (group.attribute as any).visibleAll = false;\n }\n });\n }\n\n protected legendsComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents().filter((item: any) => !!item);\n const appearTransformFunc = transformMap.appear.legends;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n vrenderComponents.forEach(group => {\n if (isRun) {\n (group.attribute as any).visibleAll = true;\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n } else {\n (group.attribute as any).visibleAll = false;\n }\n });\n }\n\n protected axisComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const axis = vrenderComponents[0];\n if (!axis) {\n return;\n }\n vrenderComponents.forEach(c => {\n if (isRun) {\n (c.attribute as any).visibleAll = true;\n } else {\n (c.attribute as any).visibleAll = false;\n }\n });\n if (!isRun) {\n return;\n }\n const axisGrid = vrenderComponents[1];\n const axisOrient = (axis.attribute as AxisBaseAttributes)?.orient;\n if (axisOrient === 'angle' || axisOrient === 'radius') {\n this.polarAxisAppear(axis, axisGrid, action, payload, isRun);\n } else {\n this.cartesianAxisAppear(axis, axisGrid, action, payload, isRun);\n }\n }\n\n protected cartesianAxisAppear(\n axis: any,\n axisGrid: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const axisOrient = (axis.attribute as AxisBaseAttributes)?.orient;\n const axisItems = (axis.attribute as AxisBaseAttributes)?.items ?? [[]];\n const orient = axisOrient === 'left' || axisOrient === 'right' ? 'height' : 'width';\n const gridOrient = axisOrient === 'left' || axisOrient === 'right' ? 'width' : 'height';\n // 有点 hack。从 vrender component 拿不到轴 inverse 配置。\n const direction = checkArrayOrder(axisItems[0], 'value') < 0 ? 'positive' : 'negative';\n const appearTransformFunc = transformMap.appear.axis;\n const defaultPayload = VChartVisibilityActionProcessor.defaultPayload;\n if (axis) {\n this.runTransformFunc(axis as any, appearTransformFunc, action, payload, defaultPayload, { orient, direction });\n }\n if (axisGrid) {\n this.runTransformFunc(axisGrid as any, appearTransformFunc, action, payload, defaultPayload, {\n orient: gridOrient,\n direction\n });\n }\n }\n\n protected polarAxisAppear(\n axis: any,\n axisGrid: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const axisItems = (axis.attribute as AxisBaseAttributes)?.items ?? [[]];\n const appearTransformFunc = transformMap.appear.axis;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n if (axis) {\n this.runTransformFunc(axis as any, appearTransformFunc, action, payload, defaultPayload);\n }\n if (axisGrid) {\n this.runTransformFunc(axisGrid as any, appearTransformFunc, action, payload, defaultPayload, {});\n }\n }\n\n protected titleComponentAppear(\n vchart: IVChart,\n component: IComponent,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const vrenderComponents = component.getVRenderComponents();\n const appearTransformFunc = transformMap.appear.title;\n const defaultPayload = VChartVisibilityActionProcessor.fadePayload;\n vrenderComponents.forEach(group => {\n this.runTransformFunc(group as any, appearTransformFunc, action, payload, defaultPayload);\n });\n }\n\n private runTransformFunc(\n instance: IGroup,\n appearTransformFunc: any,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n defaultPayload: IActionSpec['payload'] = {} as any,\n actionOption: Record = {}\n ) {\n if (instance && appearTransformFunc) {\n const mergePayload = merge({}, defaultPayload, payload) as IChartVisibilityPayload;\n appearTransformFunc(instance, mergePayload.animation, {\n disappear: action === 'disappear',\n ...actionOption,\n payload: mergePayload\n });\n }\n }\n\n protected commonSeriesAppear(\n vchart: IVChart,\n series: ISeries,\n action: 'appear' | 'disappear',\n payload: IChartVisibilityPayload,\n isRun: boolean\n ) {\n const marks = series.getMarksWithoutRoot();\n if (!marks.length) {\n return;\n }\n marks.forEach((mark, markIndex) => {\n const config = this.getMarkAnimateConfig(vchart, mark, markIndex, action, series, payload);\n const product = mark.getProduct();\n if (isRun) {\n // @ts-ignore\n product?.graphicItem?.setAttribute('visibleAll', true);\n product?.animate?.run(config || {});\n } else {\n product?.graphicItem?.setAttribute('visibleAll', false);\n }\n });\n }\n\n getMarkPayload(mark: any, series: ISeries, payload: IChartVisibilityPayload) {\n const defaultMarkPayload = (VChartVisibilityActionProcessor as any)[`${mark.type}Payload`];\n const mergePayload = merge(\n {},\n isFunction(defaultMarkPayload) ? defaultMarkPayload(series.type) : defaultMarkPayload || {},\n payload\n ) as IChartVisibilityPayload;\n\n return mergePayload;\n }\n getMarkAnimateConfig(\n vchart: IVChart,\n mark: any,\n markIndex: number,\n action: 'appear' | 'disappear',\n series: ISeries,\n payload: IChartVisibilityPayload\n ) {\n const mergePayload = this.getMarkPayload(mark, series, payload);\n const appearTransform = (transformMap.appear as any)[mark.type];\n return (\n appearTransform &&\n appearTransform(vchart as any, mergePayload.animation, {\n index: markIndex,\n disappear: action === 'disappear',\n payload: mergePayload,\n character: this.character\n })\n );\n }\n\n static rectPayload = (seriesType: string) => {\n return {\n animation: {\n effect: seriesType === 'treemap' ? 'centerGrow' : 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n };\n\n static defaultPayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static fadePayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'fade',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static arcPayload: IChartVisibilityAction['payload'] = {\n animation: {\n effect: 'growAngle',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static linePayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n static symbolPayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n static textPayload: IChartVisibilityAction['payload'] = VChartVisibilityActionProcessor.defaultPayload;\n}\n\nexport function registerVChartVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.APPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n}\n","import { globalProcessorRegistry, type ICharacter, CharacterType } from '@visactor/vstory-core';\nimport type { IVChart } from '@visactor/vchart';\nimport type { IChartHighlightPayload, IChartHighlightAction } from './interface';\nimport { VChartBaseActionProcessor } from './base';\nimport { ACTION_TYPE } from '../constants/action';\n\nexport class VChartHighlightActionProcessor extends VChartBaseActionProcessor {\n name: 'highlight';\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IChartHighlightAction): void {\n super.preRun(character, actionSpec);\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n\n const { payload } = actionSpec as IChartHighlightAction;\n const { value, inverse, animation, style = {} } = payload as IChartHighlightPayload;\n const isDatumEqual = (inputValue: any, elementDatum: any) =>\n Object.keys(inputValue).every(key => inputValue[key] === elementDatum[key]);\n const channel = {};\n\n Object.keys(style).forEach(key => {\n channel[key] = {\n to: style[key]\n };\n });\n instance\n .getChart()\n .getAllMarks()\n .forEach(mark => {\n if (mark.getAnimationConfig()) {\n mark.getProduct().animate?.run({\n timeSlices: {\n effects: {\n channel,\n easing: animation.easing\n },\n duration: animation?.duration ?? 0\n },\n partitioner: datum => (inverse ? !isDatumEqual(value, datum) : isDatumEqual(value, datum))\n });\n }\n });\n }\n}\n\nexport function registerVChartHighlightAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VCHART, {\n [ACTION_TYPE.HIGHLIGHT]: new VChartHighlightActionProcessor()\n });\n}\n","import type { IVChart, Player } from '@visactor/vchart';\nimport type { BasePlayer } from '@visactor/vrender-components';\nimport { vglobal } from '@visactor/vrender';\nimport { isValid } from '@visactor/vutils';\nimport {\n CharacterType,\n globalProcessorRegistry,\n type IAction,\n type IActionPayload,\n type IActionSpec,\n type ICharacter\n} from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\n\n// TODO: move to interface folder\n// export type IRankingBarPlayPayload = Omit;\nexport type IRankingBarPlayPayload = IActionPayload;\n\nexport interface IRankingBarPlayAction extends IAction {\n action: 'play';\n}\n\nfunction _forward(\n vchartPlayer: Player,\n vrenderPlayer: BasePlayer,\n params: {\n progress: number;\n index?: number;\n }\n): boolean {\n if (!vrenderPlayer) {\n return false;\n }\n const { index } = params;\n if (isValid(index) && index !== vrenderPlayer.getMaxIndex()) {\n vchartPlayer.changePlayerIndex(vrenderPlayer.getDataIndex());\n return true;\n }\n return false;\n}\n\nexport class RankingBarPlayActionProcessor extends ActionProcessorItem {\n name: 'rankingBar-play';\n rafId: any;\n\n duration = 0;\n interval = 0;\n count = 0;\n\n start: number;\n prevIndex: number;\n done = false;\n\n vchartPlayer: Player;\n vrenderPlayer: BasePlayer;\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec, character?: ICharacter): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n // @ts-ignore\n const { startTime = 0 } = action.payload?.animation ?? ({} as any);\n const instance = (character.graphic as any)._vchart as IVChart;\n const interval = instance?.getSpec()?.interval ?? 0;\n const count = instance?.getSpec()?.player?.specs?.length ?? 0;\n const duration = interval * count;\n const st = globalStartTime + startTime;\n this.duration = duration;\n this.interval = interval;\n this.count = count;\n return {\n startTime: st,\n duration\n };\n }\n\n run(character: ICharacter, actionSpec: any): void {\n const instance = (character.graphic as any)._vchart as IVChart;\n if (!instance) {\n return;\n }\n const vchartPlayer = instance.getComponents().find(cmp => cmp.type === 'player') as Player;\n if (!vchartPlayer) {\n return;\n }\n const vrenderPlayer = vchartPlayer.getVRenderComponents()[0] as BasePlayer;\n if (!vrenderPlayer) {\n return;\n }\n this.vchartPlayer = vchartPlayer;\n this.vrenderPlayer = vrenderPlayer;\n this.rafId = vglobal.getRequestAnimationFrame()(this.forward.bind(this));\n }\n\n forward = (timestamp: number) => {\n if (!isValid(this.start)) {\n this.start = timestamp;\n this.vrenderPlayer.play();\n }\n const elapsed = timestamp - this.start;\n const progress = elapsed / this.duration;\n const curIndex = Math.floor(Math.min(progress * this.count, this.count));\n\n if (curIndex < this.count - 1) {\n if (this.prevIndex !== curIndex) {\n const result = _forward(this.vchartPlayer, this.vrenderPlayer, { index: curIndex, progress });\n if (result) {\n this.prevIndex = curIndex;\n }\n } else {\n _forward(this.vchartPlayer, this.vrenderPlayer, { progress });\n }\n\n // this.rafId = vglobal.getRequestAnimationFrame()(this.forward.bind(this));\n } else {\n this.start = undefined;\n this.prevIndex = undefined;\n // vglobal.getCancelAnimationFrame()(this.rafId);\n return;\n }\n };\n}\n\nexport function registerRankingBarPlayAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RANKINGBAR, {\n [ACTION_TYPE.PLAY]: new RankingBarPlayActionProcessor()\n });\n}\nexport function registerRankingBarVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RANKINGBAR, {\n [ACTION_TYPE.APPEAR]: new VChartVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VChartVisibilityActionProcessor()\n });\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry, globalTickerStore } from '@visactor/vstory-core';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\nimport type { IChartVisibilityAction } from '../interface';\nimport { IChartVisibilityPayload } from '../interface';\nimport type { ISeries, IVChart } from '@visactor/vchart';\n\nexport class ScatterBarVisibilityActionProcessor extends VChartVisibilityActionProcessor {\n // getMarkAnimateConfig(vchart: IVChart, mark: any, markIndex: number, action: 'appear' | 'disappear', series: ISeries, payload: IChartVisibilityPayload) {\n // }\n}\n\nexport function registerScatterBarVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.SCATTER_BAR, {\n [ACTION_TYPE.APPEAR]: new ScatterBarVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ScatterBarVisibilityActionProcessor()\n });\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry, globalTickerStore } from '@visactor/vstory-core';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { VChartVisibilityActionProcessor } from '../visibility';\nimport type { IChartVisibilityAction } from '../interface';\nimport type { IVChart } from '@visactor/vchart';\n\nexport class WaveScatterVisibilityActionProcessor extends VChartVisibilityActionProcessor {\n run(character: ICharacter, actionSpec: IChartVisibilityAction): void {\n super.run(character, actionSpec);\n // 执行背景动画\n const vchart = character.graphic._vchart as IVChart;\n const series = vchart\n .getChart()\n .getAllSeries()\n .filter(series => series.type === 'circlePacking')[0];\n if (!series) {\n return;\n }\n const mark = series.getMarksWithoutRoot().filter(item => item.type === 'arc')[0];\n if (!mark) {\n return;\n }\n const { waveAnimate } = character.getAttribute();\n if (!(waveAnimate && waveAnimate.custom && waveAnimate.customParameters)) {\n return;\n }\n const { duration, easing, loop, custom } = waveAnimate;\n const product = mark.getProduct();\n const graphics = product.getAllElements().map(item => item.getGraphicItem());\n if (!graphics.length) {\n return;\n }\n graphics.forEach(g => {\n g.animate({ timeline: globalTickerStore.getTimeline('background_animate') })\n .play(new custom({}, {}, duration, easing, {}))\n .loop(loop ? Infinity : 1);\n });\n }\n}\n\nexport function registerWaveScatterVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.WAVE_SCATTER, {\n [ACTION_TYPE.APPEAR]: new WaveScatterVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new WaveScatterVisibilityActionProcessor()\n });\n}\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IAnimationParams } from '@visactor/vstory-core';\n\nexport const canDoGraphicAnimation = (graphic: IGraphic, animationParams: IAnimationParams) => {\n return graphic && animationParams.duration && animationParams.duration > 0;\n};\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IScaleInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class ScaleVisibility {\n setInitAttributes(graphic: IGraphic, animation: IScaleInParams, appear: boolean) {\n if (!appear) {\n return;\n }\n const { ratio = 0 } = animation;\n graphic._vstory_lastScaleX = graphic.attribute.scaleX ?? 1;\n graphic._vstory_lastScaleY = graphic.attribute.scaleY ?? 1;\n\n graphic.setAttributes({ scaleX: ratio, scaleY: ratio });\n }\n run(graphic: IGraphic, animation: IScaleInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, animation)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, animation, appear);\n\n const duration = animation.duration;\n const easing = animation.easing;\n\n const currScaleX = graphic._vstory_lastScaleX ?? graphic.attribute.scaleX;\n const currScaleY = graphic._vstory_lastScaleY ?? graphic.attribute.scaleY;\n const opacityMap = appear ? { toX: currScaleX ?? 1, toY: currScaleY ?? 1 } : { toX: 0, toY: 0 };\n delete graphic._vstory_lastScaleX;\n delete graphic._vstory_lastScaleY;\n\n graphic.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n\n return true;\n }\n}\n\nexport const scaleInstance = new ScaleVisibility();\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IFadeInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class FadeVisibility {\n setInitAttributes(graphic: IGraphic, params: IFadeInParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n if (graphic.isContainer) {\n const opacity = 0;\n graphic.setAttributes({\n baseOpacity: opacity\n } as any);\n } else {\n const opacity = params.opacity ?? 0;\n graphic._vstory_lastOpacity = graphic.attribute.opacity ?? 1;\n graphic.setAttributes({\n opacity\n } as any);\n }\n }\n run(graphic: IGraphic, params: IFadeInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n const duration = params.duration;\n const easing = params.easing;\n\n if (graphic.isContainer) {\n graphic.animate().to({ baseOpacity: appear ? 1 : 0 }, duration, easing as EasingType);\n } else {\n const opacity = graphic._vstory_lastOpacity ?? 1;\n graphic.animate().to({ opacity: appear ? opacity : 0 }, duration, easing as EasingType);\n delete graphic._vstory_lastOpacity;\n }\n\n return true;\n }\n}\n\nexport const fadeInstance = new FadeVisibility();\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IMoveParams, IMoveToParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nexport class MoveVisibility {\n setInitAttributes(graphic: IGraphic, params: IMoveParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const { fromX, fromY } = this.getMoveStartPos(graphic, params);\n graphic._vstory_lastX = graphic.attribute.x ?? 0;\n graphic._vstory_lastY = graphic.attribute.y ?? 0;\n graphic.setAttributes({\n x: fromX,\n y: fromY\n });\n }\n run(graphic: IGraphic, params: IMoveParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n return appear ? this._moveIn(graphic, params) : this._moveOut(graphic, params);\n }\n\n getMoveStartPos(graphic: IGraphic, params: IMoveParams) {\n const from = params.pos ?? 1;\n const isVariableSpeed = params.isVariableSpeed ?? true;\n\n // 图形宽高\n const width = Math.abs(graphic.AABBBounds.x2 - graphic.AABBBounds.x1);\n const height = Math.abs(graphic.AABBBounds.y2 - graphic.AABBBounds.y1);\n\n let fromX = graphic.attribute.x;\n let fromY = graphic.attribute.y;\n if (isVariableSpeed) {\n // 同时从边缘进入, 速度不同, 同时抵达目标.\n switch (from) {\n case 'right':\n // 图形左边缘为起点\n fromX = graphic.parent.width;\n break;\n case 'left':\n // 图形右边缘为起点\n fromX = -width;\n break;\n case 'bottom':\n // 从下往上进入\n fromY = graphic.parent.height + height;\n break;\n case 'top':\n // 从上往下进入\n fromY = -height;\n break;\n case 'top-right':\n // 从右上进入 ↗️\n fromY = -height;\n fromX = graphic.parent.width;\n break;\n case 'top-left':\n // 从左上进入 ↖️\n fromY = -height;\n fromX = -width;\n break;\n case 'bottom-left':\n // 从左下进入 ↙️\n fromY = graphic.parent.height + height;\n fromX = -width;\n break;\n case 'bottom-right':\n // 从右下进入 ↘️\n fromY = graphic.parent.height + height;\n fromX = graphic.parent.width;\n break;\n }\n } else {\n // 速度相同, 相对位置不变, 但不同时出现.\n const distance = Math.max(graphic.parent.width, graphic.parent.height);\n switch (from) {\n case 'right':\n // 从右往左进入\n fromX += distance;\n break;\n case 'left':\n // 从左往右进入\n fromX += -distance;\n break;\n case 'bottom':\n // 从下往上进入\n fromY += distance;\n break;\n case 'top':\n // 从上往下进入\n fromY += -distance;\n break;\n case 'top-right':\n // 从右上进入 ↗️\n fromX += distance;\n fromY += -distance;\n break;\n case 'top-left':\n // 从左上进入 ↖️\n fromX += -distance;\n fromY += -distance;\n break;\n case 'bottom-left':\n // 从左下进入 ↙️\n fromY += distance;\n fromX += -distance;\n break;\n case 'bottom-right':\n // 从右下进入 ↘️\n fromX += distance;\n fromY += distance;\n break;\n }\n }\n\n return { fromX, fromY };\n }\n\n _moveIn(graphic: IGraphic, params: IMoveParams) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currX = graphic._vstory_lastX ?? graphic.attribute.x;\n const currY = graphic._vstory_lastY ?? graphic.attribute.y;\n\n graphic.animate().to({ x: currX, y: currY }, duration, easing as EasingType);\n return true;\n }\n\n _moveOut(graphic: IGraphic, params: IMoveParams) {\n const { move = {} } = params;\n const to = move.pos ?? params.pos;\n const duration = move.duration ?? params.duration;\n const easing = move.easing ?? params.easing;\n const isVariableSpeed = move.isVariableSpeed ?? true;\n\n let toX = graphic.attribute.x;\n let toY = graphic.attribute.y;\n\n // 图形宽高\n const width = Math.abs(graphic.AABBBounds.x2 - graphic.AABBBounds.x1);\n const height = Math.abs(graphic.AABBBounds.y2 - graphic.AABBBounds.y1);\n\n if (isVariableSpeed) {\n // 同时抵达边缘, 速度不同.\n switch (to) {\n case 'right':\n // 画布容器宽度\n toX = graphic.parent.width;\n break;\n case 'left':\n // 负的图形宽度\n toX = -width;\n break;\n case 'bottom':\n // 容器高度 + 图形高度\n toY = graphic.parent.height + height;\n break;\n case 'top':\n // 负的图形高度\n toY = -height;\n break;\n }\n } else {\n // 速度相同, 相对位置不变.\n const distance = Math.max(graphic.parent.width, graphic.parent.height);\n switch (to) {\n case 'right':\n toX += distance;\n break;\n case 'left':\n toX += -distance;\n break;\n case 'bottom':\n toY += distance;\n break;\n case 'top':\n toY += -distance;\n break;\n }\n }\n graphic\n .animate()\n .to({ x: toX, y: toY }, duration, easing as EasingType)\n // 最终不显示\n .onEnd(() => {\n graphic.setAttributes({ visible: false, visibleAll: false } as any);\n });\n return true;\n }\n}\n\nexport const moveInstance = new MoveVisibility();\n","import type { IGraphic } from '@visactor/vrender-core';\nimport type { IWipeInParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\n\nconst Direction: any = {\n right: 'l2r',\n left: 'r2l',\n top: 't2b',\n bottom: 'b2t'\n};\n\nexport class WipeVisibility {\n setInitAttributes(graphic: IGraphic, params: IWipeInParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const { fromRatio = 0 } = params;\n const from = params.from ?? 'right';\n graphic.setAttributes({\n wipeDirection: Direction[from],\n wipeRatio: fromRatio\n } as any);\n }\n run(graphic: IGraphic, params: IWipeInParams, appear: boolean, setInitAttributes: boolean = false) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n setInitAttributes && this.setInitAttributes(graphic, params, appear);\n\n const duration = params.duration;\n const easing = params.easing;\n\n let fromRatio = 0;\n let toRatio = 1;\n if (!appear) {\n [fromRatio, toRatio] = [toRatio, fromRatio];\n }\n\n graphic\n .animate()\n .to({ wipeRatio: toRatio }, duration, easing)\n .onEnd(() => {\n graphic.setAttributes({ wipeRatio: toRatio } as any);\n });\n return true;\n }\n}\n\nexport const wipeInstance = new WipeVisibility();\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { array } from '@visactor/vutils';\nimport { scaleInstance } from '../../common/scale-processor';\nimport { fadeInstance } from '../../common/fade-processor';\nimport { moveInstance } from '../../common/move-processor';\nimport { wipeInstance } from '../../common/wipe-processor';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { IGraphic } from '@visactor/vrender-core';\n\nexport class CommonVisibilityActionProcessor extends ActionProcessorItem {\n name: string = 'appearOrDisAppear';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n super.preRun(character, actionSpec);\n const { animation = {}, selector } = getPayload(actionSpec);\n const { effect = 'default' } = animation as any;\n array(effect).forEach(_effect => {\n const graphics = this.selectBySelector(selector, character);\n const appear = actionSpec.action === 'appear';\n const effectInstance = this.getEffectInstance(_effect, appear);\n if (effectInstance) {\n graphics.forEach(graphic => {\n effectInstance.run(graphic, animation as any, appear);\n });\n }\n });\n }\n\n applyAttrsForVisibility(character: ICharacter, actionSpec: IActionSpec): void {\n const { animation = {}, selector } = getPayload(actionSpec);\n const { effect = 'default' } = animation as any;\n array(effect).forEach(_effect => {\n const graphics = this.selectBySelector(selector, character);\n const appear = actionSpec.action === 'appear';\n const effectInstance = this.getEffectInstance(_effect, appear);\n if (effectInstance) {\n graphics.forEach(graphic => {\n effectInstance.setInitAttributes(graphic, animation as any, appear);\n });\n }\n });\n }\n\n selectBySelector(selector: string | string[], character: ICharacter): IGraphic[] {\n if (character.getGraphicBySelector) {\n return character.getGraphicBySelector(selector);\n }\n return [getCharacterParentGraphic(character)];\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'scale':\n return scaleInstance;\n case 'wipe':\n return wipeInstance;\n case 'fade':\n return fadeInstance;\n case 'move':\n return moveInstance;\n }\n return fadeInstance;\n }\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IMoveToParams } from '../../common/interface';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport interface IComponentMoveToPayLoad extends IActionPayload {\n destination: { x: number; y: number };\n}\nexport interface IComponentMoveToAction extends IAction {\n action: 'moveTo';\n}\n\nexport function moveTo(graphic: IGraphic, animation: IMoveToParams, destination: IPointLike) {\n if (graphic) {\n const { duration, easing } = animation;\n if (destination) {\n graphic.animate().to(destination, duration, easing as EasingType);\n }\n }\n}\n\nexport class CommonMoveToActionProcessor extends ActionProcessorItem {\n name: 'moveTo';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentMoveToAction): void {\n super.preRun(character, actionSpec);\n const { animation = {}, destination } = getPayload(actionSpec) as IComponentMoveToPayLoad;\n\n moveTo(getCharacterParentGraphic(character), animation as any, destination);\n }\n}\n","import type { IAction, IActionPayload, IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { ActionProcessorItem } from '../../processor-item';\nimport { getPayload } from './utils';\nimport { getCharacterParentGraphic } from '../../common/common';\nimport type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IScaleToParams } from '../../common/interface';\n\nexport interface IComponentScaleToPayLoad extends IActionPayload {\n scale: { scaleX: number; scaleY: number };\n}\nexport interface IComponentScaleToAction extends IAction {\n action: 'scaleTo';\n}\n\nexport function scaleTo(graphic: IGraphic, animation: IScaleToParams, scaleTo: { scaleX: number; scaleY: number }) {\n if (graphic) {\n const { duration, easing } = animation;\n if (scaleTo) {\n graphic.animate().to(scaleTo, duration, easing as EasingType);\n }\n }\n}\n\nexport class CommonScaleToActionProcessor extends ActionProcessorItem {\n name: 'scaleTo';\n\n constructor() {\n super();\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n const { startTime = 0, duration = 0 } = getPayload(action).animation ?? ({} as any);\n\n const st = globalStartTime + startTime;\n const d = duration;\n return {\n startTime: st,\n duration: d\n };\n }\n\n run(character: ICharacter, actionSpec: IComponentScaleToAction): void {\n super.preRun(character, actionSpec);\n const { animation = {}, scale } = getPayload(actionSpec) as IComponentScaleToPayLoad;\n scaleTo(getCharacterParentGraphic(character), animation as any, scale);\n }\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\n\nexport class ImageVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n}\n\nexport function registerImageVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.IMAGE, {\n [ACTION_TYPE.APPEAR]: new ImageVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ImageVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerImageVisibilityAction } from './image-visibility';\n\nexport function registerImageAction() {\n registerImageVisibilityAction();\n}\n","import type { IGraphic } from '@visactor/vrender-core';\n\nexport abstract class BaseVisibility {\n protected getGraphics(graphic: IGraphic, cb: (graphic: IGraphic) => void) {\n if (graphic.isContainer) {\n graphic.forEachChildren((g: any) => {\n cb(g);\n });\n } else {\n cb(graphic);\n }\n }\n\n run(graphic: IGraphic, params: any, appear: boolean) {\n this.getGraphics(graphic, (g: IGraphic) => {\n this._run(g, params, appear);\n });\n return true;\n }\n\n setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n this.getGraphics(graphic, (g: IGraphic) => {\n this._setInitAttributes(g, params, appear);\n });\n }\n\n protected abstract _setInitAttributes(graphic: IGraphic, params: any, appear: boolean): void;\n protected abstract _run(graphic: IGraphic, params: any, appear: boolean): void;\n}\n","import type { EasingType, IGraphic } from '@visactor/vrender-core';\nimport type { IClipRangeParams } from './interface';\nimport { canDoGraphicAnimation } from './utils';\nimport { BaseVisibility } from './base-visibility-processor';\n\nexport class ClipRangeVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: IClipRangeParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (!appear) {\n return;\n }\n const fromClipRange = params.clipRange ?? 0;\n graphic._vstory_lastScaleClipRange = (graphic.attribute as any).clipRange ?? 1;\n graphic.setAttributes({\n clipRange: fromClipRange\n } as any);\n }\n protected _run(graphic: IGraphic, params: IClipRangeParams, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n const { fade = {} } = params;\n const duration = fade.duration ?? params.duration;\n const easing = fade.easing ?? params.easing;\n const currClipRange = graphic._vstory_lastScaleClipRange ?? 1;\n\n const toRange = appear ? currClipRange : 0;\n\n graphic.animate().to({ clipRange: toRange }, duration, easing as EasingType);\n\n return true;\n }\n}\n\nexport const clipRangeInstance = new ClipRangeVisibility();\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\nexport class LineVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerLineVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.LINE, {\n [ACTION_TYPE.APPEAR]: new LineVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LineVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerLineVisibilityAction } from './line-visibility';\n\nexport function registerLineAction() {\n registerLineVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\n\nexport class RectVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n}\n\nexport function registerRectVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.RECT, {\n [ACTION_TYPE.APPEAR]: new RectVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new RectVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerRectVisibilityAction } from './rect-visibility';\n\nexport function registerRectAction() {\n registerRectVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\n\nexport class ShapeVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerShapeVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.SHAPE, {\n [ACTION_TYPE.APPEAR]: new ShapeVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ShapeVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerShapeVisibilityAction } from './shape-visibility';\n\nexport function registerShapeAction() {\n registerShapeVisibilityAction();\n}\n","import type { EasingType, IGraphic, IText } from '@visactor/vrender-core';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { TypeWriter } from '@visactor/vstory-animate';\nimport { isString } from '@visactor/vutils';\nimport type { ITypeWriterParams } from './interface';\nimport { getCharacterByEffect } from '../../common/common';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport class TypeWriterVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: ITypeWriterParams, appear: boolean) {\n if (!appear) {\n return;\n }\n const fromClipRange = params.clipRange ?? 0;\n graphic._vstory_lastScaleClipRange = (graphic.attribute as any).clipRange;\n graphic.setAttributes({\n clipRange: fromClipRange\n } as any);\n }\n protected _run(graphic: IGraphic, params: ITypeWriterParams, appear: boolean) {\n if (graphic && (graphic.type === 'text' || graphic.type === 'richtext')) {\n const { duration, easing, params: typewriterParams } = params;\n const { text } = graphic.attribute as any;\n if (isString(text)) {\n let from = '';\n let to = text;\n if (!appear) {\n [from, to] = [to, from];\n }\n const a = graphic\n .animate()\n .play(new TypeWriter({ text: from }, { text: to }, duration, easing as EasingType, typewriterParams as any));\n if (!appear) {\n a.reversed(true);\n }\n }\n }\n return true;\n }\n}\n\nconst typewriterIn = new TypeWriterVisibility();\n\nexport class TextVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear' = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'typewriter':\n return typewriterIn;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerTextVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.TEXT, {\n [ACTION_TYPE.APPEAR]: new TextVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new TextVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerTextVisibilityAction } from './text-visibility';\n\nexport function registerTextAction() {\n registerTextVisibilityAction();\n}\n","import type { ICharacter } from '@visactor/vstory-core';\nimport { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport type { ITypeWriterParams } from '../text/interface';\nimport { getCharacterByEffect } from '../../common/common';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { Timeline } from '@visactor/vrender-components';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n return;\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n graphic.appearAnimate({ duration: duration, easing });\n }\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class TimelineVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n\n getEffectInstance(effect: string = 'default', appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport class ForwardVisibility extends BaseVisibility {\n forward: boolean;\n constructor(forward: boolean) {\n super();\n this.forward = forward;\n }\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n return;\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n this.forward ? graphic.forward({ duration: duration, easing }) : graphic.backward({ duration: duration, easing });\n }\n return true;\n }\n}\nconst forward = new ForwardVisibility(true);\nconst backward = new ForwardVisibility(false);\nexport class TimelineStateActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'state';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string = 'forward', appear: boolean) {\n switch (effect) {\n case 'forward':\n return forward;\n case 'backward':\n return backward;\n }\n return forward;\n }\n}\n\nexport function registerTimelineVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.TIMELINE, {\n [ACTION_TYPE.APPEAR]: new TimelineVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new TimelineVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.STATE]: new TimelineStateActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerTimelineVisibilityAction } from './timeline-visibility';\n\nexport function registerTimelineAction() {\n registerTimelineVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\nimport { canDoGraphicAnimation } from '../../common/utils';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IGraphic, params: any, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n }\n\n protected _run(graphic: IGraphic, params: any, appear: boolean) {\n if (!canDoGraphicAnimation(graphic, params)) {\n return false;\n }\n if (graphic && graphic.appearAnimate) {\n const { duration, easing } = params;\n graphic.appearAnimate({ duration: duration, easing });\n }\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class UnitVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n\n getEffectInstance(effect: string = 'default', appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerUnitVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.UNIT, {\n [ACTION_TYPE.APPEAR]: new UnitVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new UnitVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerUnitVisibilityAction } from './unit-visibility';\n\nexport function registerUnitAction() {\n registerUnitVisibilityAction();\n}\n","import { CharacterType, globalProcessorRegistry } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { clipRangeInstance } from '../../common/clipRange-processor';\nexport class PolygonVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'clipRange':\n return clipRangeInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerPolygonVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.POLYGON, {\n [ACTION_TYPE.APPEAR]: new PolygonVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new PolygonVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerPolygonVisibilityAction } from './polygon-visibility';\n\nexport function registerPolygonAction() {\n registerPolygonVisibilityAction();\n}\n","import type { IArc } from '@visactor/vrender-core';\nimport type { IAnimationParams } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { CommonVisibilityActionProcessor } from '../common/visibility';\nimport { ACTION_TYPE } from '../../constants/action';\nimport { CommonStyleActionProcessor } from '../common/style';\nimport { CommonMoveToActionProcessor } from '../common/move';\nimport { CommonScaleToActionProcessor } from '../common/scale';\nimport { CommonBounceActionProcessor } from '../common/bounce';\nimport { BaseVisibility } from '../../common/base-visibility-processor';\n\nexport interface IAngleParams extends IAnimationParams {\n from?: {\n startAngle?: number;\n endAngle?: number;\n };\n}\n\nexport class ArcGrowAngle extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: IAngleParams, appear: boolean) {\n if (!appear) {\n return;\n }\n graphic._vstory_lastEndAngle = graphic.attribute.endAngle;\n graphic._vstory_lastStartAngle = graphic.attribute.startAngle;\n\n const { from = {} } = params;\n graphic.setAttributes({\n startAngle: graphic.attribute.startAngle,\n endAngle: from.endAngle ?? from.startAngle ?? graphic.attribute.startAngle\n });\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currStartAngle = graphic._vstory_lastStartAngle ?? graphic.attribute.startAngle;\n const currEndAngle = graphic._vstory_lastEndAngle ?? graphic.attribute.endAngle;\n const attrMap = appear ? { startAngle: currStartAngle, endAngle: currEndAngle } : { startAngle: 0, endAngle: 0 };\n delete graphic._vstory_lastEndAngle;\n delete graphic._vstory_lastStartAngle;\n graphic.animate().to(attrMap, duration, easing);\n\n return true;\n }\n}\n\nconst arcGrowAngleInstance = new ArcGrowAngle();\n\nexport interface IRadiusParams extends IAnimationParams {\n from?: {\n innerRadius?: number;\n outerRadius?: number;\n };\n}\n\nexport class ArcGrowRadius extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: IRadiusParams, appear: boolean) {\n if (!appear) {\n return;\n }\n graphic._vstory_lastInnerRadius = graphic.attribute.innerRadius;\n graphic._vstory_lastOuterRadius = graphic.attribute.outerRadius;\n\n const { from = {} } = params;\n graphic.setAttributes({\n innerRadius: graphic.attribute.innerRadius,\n outerRadius: from.outerRadius ?? from.innerRadius ?? graphic.attribute.innerRadius\n });\n }\n\n protected _run(graphic: IArc, params: IRadiusParams, appear: boolean) {\n const duration = params.duration;\n const easing = params.easing;\n\n const currInnerRadius = graphic._vstory_lastInnerRadius ?? graphic.attribute.innerRadius;\n const currOuterRadius = graphic._vstory_lastOuterRadius ?? graphic.attribute.outerRadius;\n const attrMap = appear\n ? { innerRadius: currInnerRadius, outerRadius: currOuterRadius }\n : { innerRadius: 0, outerRadius: 0 };\n delete graphic._vstory_lastInnerRadius;\n delete graphic._vstory_lastOuterRadius;\n\n graphic.animate().to(attrMap, duration, easing);\n\n return true;\n }\n}\n\nconst arcGrowRadiusInstance = new ArcGrowRadius();\n\nexport class ArcVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: 'appearOrDisAppear';\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'growAngle':\n return arcGrowAngleInstance;\n case 'growRadius':\n return arcGrowRadiusInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerArcVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.ARC, {\n [ACTION_TYPE.APPEAR]: new ArcVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new ArcVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { registerArcVisibilityAction } from './arc-visibility';\nexport { ArcGrowAngle } from './arc-visibility';\nexport type { IAngleParams } from './arc-visibility';\n\nexport function registerArcAction() {\n registerArcVisibilityAction();\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { ActionProcessorItem } from '../processor-item';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { array } from '@visactor/vutils';\n\nexport class VTableBaseActionProcessor extends ActionProcessorItem {\n /**\n * 筛选器,payload中可以配置筛选器来设置这个\n * @param selector\n * @param vtable\n */\n selectBySelector(\n selector: string | string[],\n character: ICharacter\n ): {\n table: boolean;\n panel: boolean;\n rowHeader: IGroup;\n colHeader: IGroup;\n bodyGroup: IGroup;\n } {\n return character.getGraphicBySelector(selector);\n }\n\n getStartTimeAndDuration(action: IActionSpec): { startTime: number; duration: number } {\n const { startTime: globalStartTime = 0 } = action;\n let totalStartTime = Infinity;\n let totalEndTime = -Infinity;\n array(action.payload).forEach(payload => {\n const { startTime = 0, duration = 0 } = payload?.animation ?? ({} as any);\n totalStartTime = Math.min(startTime ?? 0, totalStartTime);\n totalEndTime = Math.max(startTime + duration, totalEndTime);\n });\n\n let st = globalStartTime + totalStartTime;\n let d = totalEndTime - totalStartTime;\n // 避免数据不合法,算出来时长有问题\n if (!isFinite(st)) {\n st = 0;\n }\n if (!isFinite(d)) {\n d = 0;\n }\n return {\n startTime: st,\n duration: d\n };\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport type { ITableVisibilityPayload } from '../../interface';\n\nexport const commonFade = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean },\n key: string = 'baseOpacity'\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currOpacity = (instance.attribute as any)[key] ?? 1;\n const opacityMap = disappear ? { from: currOpacity, to: 0 } : { from: 0, to: currOpacity };\n\n instance.setAttributes({ [key]: opacityMap.from });\n instance.animate().to({ [key]: opacityMap.to }, duration, easing);\n};\nexport const commonGrow = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n const { duration, easing } = animation;\n const { disappear } = option;\n const currScaleX = instance.attribute.scaleX;\n const currScaleY = instance.attribute.scaleY;\n const opacityMap = disappear\n ? { fromX: currScaleX ?? 1, fromY: currScaleY ?? 1, toX: 0, toY: 0 }\n : { fromX: 0, fromY: 0, toX: currScaleX ?? 1, toY: currScaleY ?? 1 };\n\n instance.setAttributes({ scaleX: opacityMap.fromX, scaleY: opacityMap.fromY });\n instance.animate().to({ scaleX: opacityMap.toX, scaleY: opacityMap.toY }, duration, easing);\n};\n","import { runPanelAppear, runTableAppear } from './common/tableAppear';\n\nexport const transformMap = {\n appear: {\n // table:\n table: runTableAppear,\n // panel\n panel: runPanelAppear\n }\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { commonFade, commonGrow } from './commonAppear';\nimport type { ITableVisibilityPayload } from '../../interface';\n\n// TODO: 区分直角坐标系和极坐标系\nexport const runTableAppear = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option);\n }\n default: {\n return commonFade(instance, animation, option);\n }\n }\n};\n\nexport const runPanelAppear = (\n instance: IGroup,\n animation: ITableVisibilityPayload['animation'],\n option: { disappear: boolean }\n) => {\n switch (animation.effect) {\n case 'grow': {\n return commonGrow(instance, animation, option);\n }\n case 'fade': {\n return commonFade(instance, animation, option, 'opacity');\n }\n default: {\n return commonFade(instance, animation, option, 'opacity');\n }\n }\n};\n","import { array, merge } from '@visactor/vutils';\nimport type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry, CharacterType } from '@visactor/vstory-core';\nimport { VTableBaseActionProcessor } from './base';\nimport type { ITableVisibilityAction, ITableVisibilityPayload } from './interface';\nimport { transformMap } from './transformFunc/transformMap';\nimport type { IGroup } from '@visactor/vrender-core';\nimport { ACTION_TYPE } from '../constants/action';\nimport { CommonBounceActionProcessor } from '../component/common/bounce';\nimport { CommonStyleActionProcessor } from '../component/common/style';\nimport type { IVTable } from '@visactor/vstory-core/src/character/table/interface/character-table';\nimport { scaleInstance } from '../common/scale-processor';\nimport { wipeInstance } from '../common/wipe-processor';\nimport { fadeInstance } from '../common/fade-processor';\nimport { moveInstance } from '../common/move-processor';\n\nexport class VTableVisibilityActionProcessor extends VTableBaseActionProcessor {\n name: 'appearOrDisAppear';\n protected character: ICharacter | null;\n\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: ITableVisibilityAction): void {\n super.preRun(character, actionSpec);\n this.character = character;\n // 基于选择器做筛选\n // 同一个Action的payload数组中,项与项之间是覆盖关系,后项覆盖前项\n let runnedTable = false;\n array(actionSpec.payload)\n .reverse()\n .forEach(payload => {\n const { table, panel, rowHeader, colHeader, bodyGroup } = this.selectBySelector(\n payload.selector ?? '*',\n character\n );\n if (!runnedTable && table) {\n // table & panel\n this.tableVisibility(character.graphic as any, actionSpec.action, payload);\n } else if (!runnedTable && panel) {\n // panel\n this.panelVisibility(character.graphic as any, actionSpec.action, payload);\n }\n if (rowHeader) {\n this.headerAppear('row', character.graphic as any, rowHeader, actionSpec.action, payload, true);\n }\n if (colHeader) {\n this.headerAppear('col', character.graphic as any, colHeader, actionSpec.action, payload, true);\n }\n if (bodyGroup) {\n this.bodyGroupAppear(character.graphic as any, bodyGroup, actionSpec.action, payload, true);\n }\n runnedTable = runnedTable || table;\n });\n this.character = null;\n }\n\n protected headerAppear(\n type: 'row' | 'col',\n vtable: IVTable,\n headerGroup: IGroup,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n isRun: boolean\n ) {\n if (isRun) {\n headerGroup.setAttribute('visibleAll', true);\n const appear = action === 'appear';\n const effectInstance = this.getEffectInstance(payload.animation?.effect as string, appear);\n effectInstance.run(headerGroup, { from: type === 'col' ? 'left' : 'top', ...payload.animation }, appear, true);\n } else {\n headerGroup.setAttribute('visibleAll', false);\n }\n }\n\n protected bodyGroupAppear(\n vtable: IVTable,\n bodyGroup: IGroup,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n isRun: boolean\n ) {\n if (isRun) {\n bodyGroup.setAttribute('visibleAll', true);\n // 做默认动画\n const appear = action === 'appear';\n const { duration, oneByOne = true, easing } = payload.animation;\n let delay = 0;\n let actualDuration = duration;\n if (oneByOne) {\n actualDuration = duration * 0.6;\n delay = (duration - actualDuration) / bodyGroup.childrenCount;\n }\n const from = appear ? { baseOpacity: 0 } : { baseOpacity: 1 };\n const to = appear ? { baseOpacity: 1 } : { baseOpacity: 0 };\n bodyGroup.forEachChildren((child, i) => {\n (child as any).setAttributes(from);\n (child as any)\n .animate()\n .wait(delay * i)\n .to(to, actualDuration, easing);\n });\n } else {\n bodyGroup.setAttribute('visibleAll', false);\n }\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'scale':\n return scaleInstance;\n case 'wipe':\n return wipeInstance;\n case 'fade':\n return fadeInstance;\n case 'move':\n return moveInstance;\n }\n return fadeInstance;\n }\n\n // protected rowHeaderAppear(\n // vtable: IVTable,\n // rowHeader: IGroup\n // ) {\n // return this.headerAppear(vtable, rowHeader);\n // }\n\n protected tableVisibility(tableGraphic: any, action: 'appear' | 'disappear', payload: ITableVisibilityPayload) {\n const appearTransformFunc = transformMap.appear.table;\n const defaultPayload = VTableVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(tableGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n protected panelVisibility(tableGraphic: any, action: 'appear' | 'disappear', payload: ITableVisibilityPayload) {\n const appearTransformFunc = transformMap.appear.panel;\n const defaultPayload = VTableVisibilityActionProcessor.fadePayload;\n this.runTransformFunc(tableGraphic as any, appearTransformFunc, action, payload, defaultPayload);\n }\n\n private runTransformFunc(\n instance: IGroup,\n appearTransformFunc: any,\n action: 'appear' | 'disappear',\n payload: ITableVisibilityPayload,\n defaultPayload: IActionSpec['payload'] = {} as any,\n actionOption: Record = {}\n ) {\n if (instance && appearTransformFunc) {\n const mergePayload = merge({}, defaultPayload, payload) as ITableVisibilityPayload;\n appearTransformFunc(instance, mergePayload.animation, {\n disappear: action === 'disappear',\n ...actionOption,\n payload: mergePayload\n });\n }\n }\n\n static rectPayload = (seriesType: string) => {\n return {\n animation: {\n effect: seriesType === 'treemap' ? 'centerGrow' : 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n };\n\n static defaultPayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'grow',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static fadePayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'fade',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static arcPayload: ITableVisibilityAction['payload'] = {\n animation: {\n effect: 'growAngle',\n duration: 2000,\n easing: 'cubicOut',\n oneByOne: false,\n loop: false\n }\n };\n\n static linePayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n static symbolPayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n static textPayload: ITableVisibilityAction['payload'] = VTableVisibilityActionProcessor.defaultPayload;\n}\n\nexport function registerVTableVisibilityAction() {\n globalProcessorRegistry.registerProcessor(CharacterType.VTABLE, {\n [ACTION_TYPE.APPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n\n globalProcessorRegistry.registerProcessor(CharacterType.PIVOT_CHART, {\n [ACTION_TYPE.APPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new VTableVisibilityActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor()\n });\n}\n","import { registerVTableVisibilityAction } from './visibility';\n\nexport function registerVTableAction() {\n registerVTableVisibilityAction();\n}\n","import type { IActions, ICharacterConfig, IStoryDSL } from '@visactor/vstory-core';\nimport { isEqual, isFunction, isObject, merge } from '@visactor/vutils';\nimport type { IUnitTemplateSpec, QueryNode } from './interface';\nimport { DEFAULT_ANIMATION_DURATION, DEFAULT_SCENE_DURATION, defaultConfig } from './default';\nimport type { ISymbolGraphicAttribute } from '@visactor/vrender-core';\n\nexport function createUnitTemplate(params: IUnitTemplateSpec) {\n const input = initialInput(params);\n const { characters: layoutCharacters, actions: layoutActions } = generateLayoutSpec(input);\n const { characters: titleCharacters, actionsGroup: titleActionsGroup } = generateTitleSpec(input);\n const { character: vizCharacter, actions: vizActions } = generateVizSpec(input);\n\n const spec: IStoryDSL = {\n characters: [...layoutCharacters, ...titleCharacters, vizCharacter],\n acts: [\n {\n id: 'page1',\n scenes: input.scenes.map((_, sceneIndex) => {\n return {\n id: sceneIndex.toString(),\n actions: [...layoutActions, ...titleActionsGroup[sceneIndex], vizActions[sceneIndex]]\n };\n })\n }\n ]\n };\n\n return spec;\n}\n\nfunction initialInput(input: IUnitTemplateSpec): IUnitTemplateSpec {\n const { data, ...restInput } = input;\n const res = merge({}, defaultConfig, restInput);\n res.data = data;\n return res;\n}\n\nfunction generateLayoutSpec(input: IUnitTemplateSpec) {\n const {\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: {\n height: titleHeight = defaultConfig.layout.title.height,\n background: titleBackgroundColor = defaultConfig.layout.title.background\n } = {},\n viz: { background: vizBackgroundColor = defaultConfig.layout.viz.background, ...rest } = {}\n } = {}\n } = input;\n const characters: ICharacterConfig[] = [\n {\n type: 'Rect',\n id: 'background-title',\n zIndex: 2,\n position: {\n top: 0,\n left: 0,\n width: layoutWidth,\n height: titleHeight\n },\n options: {\n graphic: {\n fill: titleBackgroundColor,\n stroke: false\n }\n }\n },\n {\n type: 'Rect',\n id: 'background',\n zIndex: 0,\n position: {\n top: 0,\n left: 0,\n width: layoutWidth,\n height: layoutHeight\n },\n options: {\n graphic: {\n background: vizBackgroundColor,\n ...rest,\n stroke: false\n }\n }\n }\n ];\n const actions: IActions[] = [\n {\n characterId: 'background-title',\n characterActions: [\n {\n action: 'appear',\n startTime: 0,\n payload: {\n animation: {\n effect: 'move',\n duration: 1\n }\n }\n }\n ]\n },\n {\n characterId: 'background',\n characterActions: [\n {\n action: 'appear',\n startTime: 0,\n payload: {\n animation: {\n effect: 'move',\n duration: 1\n }\n }\n }\n ]\n }\n ];\n return { characters, actions };\n}\n\nfunction generateTitleSpec(input: IUnitTemplateSpec) {\n const {\n scenes,\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: {\n height: titleHeight = defaultConfig.layout.title.height,\n padding: {\n left: titlePaddingLeft = defaultConfig.layout.title.padding.left,\n right: titlePaddingRight = defaultConfig.layout.title.padding.right\n } = {},\n style: titleStyle = defaultConfig.layout.title.style\n } = {}\n } = {}\n } = input;\n\n const startTime = 0;\n const characters: ICharacterConfig[] = scenes.map((scene, sceneIndex) => {\n return {\n type: 'Text',\n id: 'title-' + sceneIndex,\n zIndex: 3,\n position: {\n top: titleHeight / 2,\n left: layoutWidth / 2,\n width: layoutWidth - titlePaddingLeft - titlePaddingRight,\n height: layoutHeight\n },\n options: {\n graphic: {\n width: layoutWidth - titlePaddingLeft - titlePaddingRight,\n height: layoutHeight,\n ...titleStyle,\n textConfig: scene.title\n }\n }\n };\n });\n const actionsGroup: IActions[][] = scenes.map((scene, sceneIndex) => {\n const actions: IActions[] = [\n {\n characterId: 'title-' + sceneIndex,\n characterActions: [\n {\n action: 'appear',\n startTime: startTime + (scene.animationDuration ?? DEFAULT_ANIMATION_DURATION) + 1,\n payload: {\n animation: {\n duration: scene.animationDuration ?? DEFAULT_ANIMATION_DURATION,\n easing: 'linear',\n effect: 'fade'\n }\n }\n }\n ]\n }\n ];\n\n // Only add disappear action if it's not the last scene\n if (sceneIndex < scenes.length - 1) {\n actions.push({\n characterId: `title-${sceneIndex}`,\n characterActions: [\n {\n action: 'disappear',\n startTime:\n startTime +\n (scene.sceneDuration ?? DEFAULT_SCENE_DURATION) -\n (scene.animationDuration ?? DEFAULT_ANIMATION_DURATION),\n payload: {\n animation: {\n duration: scene.animationDuration ?? DEFAULT_ANIMATION_DURATION,\n easing: 'linear',\n // @ts-ignore\n effect: 'fade'\n }\n }\n }\n ]\n });\n }\n\n return actions;\n });\n\n return { characters, actionsGroup };\n}\n\nfunction generateVizSpec(input: IUnitTemplateSpec) {\n const { scenes, data, unit: { defaultStyle = defaultConfig.unit.defaultStyle } = {} } = input;\n const initialStyleList: ISymbolGraphicAttribute[] = [];\n for (let i = 0; i < data.length; i++) {\n if (isFunction(defaultStyle)) {\n initialStyleList.push(defaultStyle(i));\n }\n if (isObject(defaultStyle)) {\n initialStyleList.push(defaultStyle);\n }\n }\n const character: ICharacterConfig = getUnitCharacter(initialStyleList, input);\n const actions: IActions[] = [];\n const startTime = 0;\n let prevStyleList = initialStyleList;\n for (let sceneIndex = 0; sceneIndex < scenes.length; sceneIndex++) {\n const sceneSpec = scenes[sceneIndex];\n const { nodes, animationDuration } = sceneSpec;\n const indexList = Array.from({ length: data.length }, (_, i) => i);\n const styleList = prevStyleList.slice();\n updateStyleList(styleList, nodes, data, indexList);\n const action = createUnitViz(styleList, animationDuration ?? DEFAULT_ANIMATION_DURATION, startTime);\n prevStyleList = styleList;\n actions.push(action);\n }\n return { character, actions };\n}\n\nfunction updateStyleList(\n styleList: ISymbolGraphicAttribute[],\n nodes: QueryNode[],\n data: Record[],\n indexList: number[]\n) {\n for (const node of nodes) {\n const query = node.query;\n const filteredIndexList = query ? indexList.filter(index => query(data[index])) : indexList;\n for (const index of filteredIndexList) {\n styleList[index] = { ...styleList[index], ...node.style };\n }\n if (node.children) {\n updateStyleList(styleList, node.children, data, filteredIndexList);\n }\n }\n return styleList;\n}\n\nfunction createUnitViz(styleList: ISymbolGraphicAttribute[], animationDuration: number, startTime: number): IActions {\n const action: IActions = {\n characterId: 'unit',\n characterActions: [\n {\n action: 'style',\n startTime: startTime,\n payload: {\n animation: {\n effect: 'default',\n duration: animationDuration,\n easing: 'linear',\n stagger: {\n enable: true\n }\n },\n graphic: {\n units: generateUnitStyleList(styleList)\n }\n }\n } as any\n ]\n };\n\n return action;\n}\n\nfunction getUnitCharacter(styleList: ISymbolGraphicAttribute[], input: IUnitTemplateSpec): ICharacterConfig {\n const {\n layout: {\n width: layoutWidth = defaultConfig.layout.width,\n height: layoutHeight = defaultConfig.layout.height,\n title: { height: titleHeight = defaultConfig.layout.title.height } = {},\n viz: {\n padding: {\n left: vizPaddingLeft = defaultConfig.layout.viz.padding.left,\n right: vizPaddingRight = defaultConfig.layout.viz.padding.right,\n top: vizPaddingTop = defaultConfig.layout.viz.padding.top,\n bottom: vizPaddingBottom = defaultConfig.layout.viz.padding.bottom\n } = {},\n direction: vizDirection = defaultConfig.layout.viz.direction\n } = {}\n } = {},\n unit: {\n gap: unitGap = defaultConfig.unit.gap,\n aspect: unitAspect = defaultConfig.unit.aspect,\n countPerSymbol = defaultConfig.unit.countPerSymbol\n } = {}\n } = input;\n\n const character: ICharacterConfig = {\n type: 'Unit',\n id: 'unit',\n zIndex: 2,\n position: {\n top: titleHeight,\n left: 0,\n width: layoutWidth,\n height: layoutHeight - titleHeight\n },\n options: {\n graphic: {\n padding: {\n top: vizPaddingTop,\n bottom: vizPaddingBottom,\n right: vizPaddingRight,\n left: vizPaddingLeft\n },\n count: styleList.length,\n countPerSymbol,\n units: generateUnitStyleList(styleList),\n gap: unitGap,\n aspect: unitAspect,\n direction: vizDirection\n }\n }\n };\n\n return character;\n}\n\nfunction generateUnitStyleList(styleList: ISymbolGraphicAttribute[]) {\n let startIdx = 0;\n let styleObj = styleList[0];\n const list = [];\n for (let i = 1; i < styleList.length; i++) {\n if (isEqual(styleObj, styleList[i])) {\n continue;\n } else {\n list.push({\n range: [startIdx, i - 1],\n style: styleObj\n });\n startIdx = i;\n styleObj = styleList[i];\n }\n }\n list.push({\n range: [startIdx, styleList.length - 1],\n style: styleObj\n });\n return list;\n}\n","export const LOTTIE = 'Lottie';\n","import { min } from '@visactor/vutils';\nimport { LOTTIE_NUMBER_TYPE } from './constants';\nimport type { IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { getTheme, GraphicType, IContext2d, NOWORK_ANIMATE_ATTR, Rect, vglobal } from '@visactor/vrender-core';\nimport type { ILottie, ILottieGraphicAttribute } from './interface/lottie';\nimport type { AnimationItem } from 'lottie-web';\nimport bodymovin from 'lottie-web';\n\nexport class Lottie extends Rect implements ILottie {\n type: any = 'lottie';\n declare attribute: ILottieGraphicAttribute;\n declare lottieInstance?: AnimationItem;\n declare canvas?: any;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: ILottieGraphicAttribute) {\n super(params);\n this.numberType = LOTTIE_NUMBER_TYPE;\n this.initLottieWeb(this.attribute.data);\n }\n\n setAttributes(params: Partial, forceUpdateTag?: boolean, context?: any): void {\n if (params.data) {\n this.initLottieWeb(params.data);\n }\n return super.setAttributes(params, forceUpdateTag, context);\n }\n\n setAttribute(key: string, value: any, forceUpdateTag?: boolean, context?: any): void {\n if (key === 'data') {\n this.initLottieWeb(value);\n }\n return super.setAttribute(key, value, forceUpdateTag, context);\n }\n\n getGraphicTheme(): Required {\n return getTheme(this).rect;\n }\n\n initLottieWeb(data: string) {\n // 必须是浏览器环境才行\n if (vglobal.env !== 'browser') {\n return;\n }\n if (this.lottieInstance) {\n this.releaseLottieInstance();\n }\n const theme = this.getGraphicTheme();\n const { width = theme.width, height = theme.height } = this.attribute;\n const canvas = vglobal.createCanvas({ width, height, dpr: vglobal.devicePixelRatio });\n const params: any = {\n // wrapper: svgContainer,\n rendererSettings: {\n context: canvas.getContext('2d')\n },\n animType: 'canvas',\n loop: true\n };\n if (typeof data === 'string') {\n params.path = data;\n } else {\n params.animationData = data;\n }\n this.lottieInstance = bodymovin.loadAnimation(params);\n this.canvas = canvas;\n this.lottieInstance.addEventListener('drawnFrame', this.renderNextFrame);\n }\n\n renderNextFrame = () => {\n this.stage.renderNextFrame();\n };\n\n release(): void {\n super.release();\n this.releaseLottieInstance();\n }\n\n releaseLottieInstance() {\n this.lottieInstance.removeEventListener('drawnFrame', this.renderNextFrame);\n this.lottieInstance.destroy();\n this.lottieInstance = null;\n }\n}\n\nexport function createLottie(attributes: ILottieGraphicAttribute): ILottie {\n return new Lottie(attributes);\n}\n","import type { ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ILottieComponentAttributes } from './lottie-interface';\nimport { Lottie } from '@visactor/vrender-kits';\n\nexport class LottieComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n lottieInstance: Lottie;\n\n constructor(attributes: ILottieComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LottieComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加image\n this.renderLottie();\n }\n protected renderLottie() {\n const { graphic, padding, width, height } = this.attribute as ILottieComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.lottieInstance) {\n const lottie = new Lottie(attribute);\n this.lottieInstance = lottie;\n this.addChild(lottie);\n } else {\n this.lottieInstance.setAttributes(attribute);\n }\n }\n}\n","import type { IComponentCharacterRuntime, ICharacterComponent } from '@visactor/vstory-core';\nimport { RuntimeStore } from '@visactor/vstory-core';\n// import loading1 from './lottie-files/loading1'\nimport { loading1 } from './lottie-file/loading1';\nimport { loading2 } from './lottie-file/loading2';\nimport { loading3 } from './lottie-file/loading3';\n\nconst builtinLottieMap: Record = {\n loading1,\n loading2,\n loading3\n};\n\nexport class LottieRuntime implements IComponentCharacterRuntime {\n type = 'Lottie';\n applyConfigToAttribute(character: ICharacterComponent): void {\n const rawAttribute = character.getAttribute();\n\n const { data } = rawAttribute.graphic;\n // 放一个默认的lottie\n const builtData = builtinLottieMap[data];\n if (builtData) {\n rawAttribute.graphic.data = builtData;\n }\n // TODO 目前VRender有问题,必须配置fill才能绘制\n rawAttribute.graphic.fill = true;\n }\n}\n\nexport const LottieRuntimeInstance = new LottieRuntime();\nRuntimeStore.register(LottieRuntimeInstance);\n","// @ts-nocheck\nexport const loading1 = {\n v: '4.6.8',\n fr: 60,\n ip: 0,\n op: 106,\n w: 500,\n h: 500,\n nm: 'Comp 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 2,\n ty: 4,\n nm: 'Shape Layer 5',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 20, s: [0], e: [360] },\n { t: 110 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [10, 10] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 20,\n op: 620,\n st: 20,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 3,\n ty: 4,\n nm: 'Shape Layer 4',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 15, s: [0], e: [360] },\n { t: 105 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [20, 20] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 15,\n op: 615,\n st: 15,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 4,\n ty: 4,\n nm: 'Shape Layer 3',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 10, s: [0], e: [360] },\n { t: 100 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [30, 30] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 10,\n op: 610,\n st: 10,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 5,\n ty: 4,\n nm: 'Shape Layer 2',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 5, s: [0], e: [360] },\n { t: 95 }\n ]\n },\n p: { a: 0, k: [251, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: { a: 0, k: [40, 40] },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 5,\n op: 605,\n st: 5,\n bm: 0,\n sr: 1\n },\n {\n ddd: 0,\n ind: 6,\n ty: 4,\n nm: 'Shape Layer 1',\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, n: ['0p667_1_0p333_0'], t: 0, s: [0], e: [360] },\n { t: 90 }\n ]\n },\n p: { a: 0, k: [250, 250, 0] },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n d: 1,\n ty: 'el',\n s: {\n a: 1,\n k: [\n {\n i: { x: [0.667, 0.667], y: [1, 1] },\n o: { x: [0.333, 0.333], y: [0, 0] },\n n: ['0p667_1_0p333_0', '0p667_1_0p333_0'],\n t: 0,\n s: [50, 50],\n e: [40, 40]\n },\n {\n i: { x: [0.667, 0.667], y: [1, 1] },\n o: { x: [0.333, 0.333], y: [0, 0] },\n n: ['0p667_1_0p333_0', '0p667_1_0p333_0'],\n t: 84,\n s: [40, 40],\n e: [50, 50]\n },\n { t: 100 }\n ]\n },\n p: { a: 0, k: [0, -100] },\n nm: 'Ellipse Path 1',\n mn: 'ADBE Vector Shape - Ellipse'\n },\n {\n ty: 'st',\n c: { a: 0, k: [0, 0, 0, 1] },\n o: { a: 0, k: 100 },\n w: { a: 0, k: 0 },\n lc: 1,\n lj: 1,\n ml: 4,\n nm: 'Stroke 1',\n mn: 'ADBE Vector Graphic - Stroke'\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0, 0.7294118, 1, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill'\n },\n {\n ty: 'tr',\n p: { a: 0, k: [0, 0], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: { a: 0, k: [100, 100], ix: 3 },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Ellipse 1',\n np: 3,\n cix: 2,\n ix: 1,\n mn: 'ADBE Vector Group'\n }\n ],\n ip: 0,\n op: 600,\n st: 0,\n bm: 0,\n sr: 1\n }\n ]\n};\n","// @ts-nocheck\nexport const loading2 = {\n v: '5.1.13',\n fr: 30,\n ip: 0,\n op: 26,\n w: 800,\n h: 600,\n nm: '合成 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 1,\n ty: 4,\n nm: '形状图层 2',\n sr: 1,\n ks: {\n o: { a: 0, k: 80, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [153, 300, 0], ix: 2 },\n a: { a: 0, k: [0, 0, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n hasMask: true,\n masksProperties: [\n {\n inv: false,\n mode: 'a',\n pt: {\n a: 0,\n k: {\n i: [\n [0, 0],\n [0, 0],\n [0, 0],\n [0, 0]\n ],\n o: [\n [0, 0],\n [0, 0],\n [0, 0],\n [0, 0]\n ],\n v: [\n [516.953, -16],\n [-23.062, -16.043],\n [-23.062, 16.039],\n [516.953, 16.082]\n ],\n c: true\n },\n ix: 1\n },\n o: { a: 0, k: 100, ix: 3 },\n x: { a: 0, k: 0, ix: 4 },\n nm: '蒙版 1'\n }\n ],\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: {\n a: 1,\n k: [\n {\n i: { x: [0.52, 0.52], y: [0.96, 1] },\n o: { x: [0.167, 0.167], y: [0.167, 0] },\n n: ['0p52_0p96_0p167_0p167', '0p52_1_0p167_0'],\n t: 0,\n s: [72, 10],\n e: [165, 10]\n },\n {\n i: { x: [0.833, 0.833], y: [0.833, 1] },\n o: { x: [0.48, 0.48], y: [0.04, 0] },\n n: ['0p833_0p833_0p48_0p04', '0p833_1_0p48_0'],\n t: 13,\n s: [165, 10],\n e: [72, 10]\n },\n { t: 25 }\n ],\n ix: 2\n },\n p: {\n a: 1,\n k: [\n {\n i: { x: 0.833, y: 0.833 },\n o: { x: 0.167, y: 0.167 },\n n: '0p833_0p833_0p167_0p167',\n t: 0,\n s: [-46, 0],\n e: [540, 0],\n to: [97.6666641235352, 0],\n ti: [-97.6666641235352, 0]\n },\n { t: 25 }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 4 },\n nm: '矩形路径 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.317815572023, 0.317815572023, 0.317815572023, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n nm: '填充 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n }\n ],\n ip: 0,\n op: 150,\n st: 0,\n bm: 0\n },\n {\n ddd: 0,\n ind: 2,\n ty: 4,\n nm: '形状图层 1',\n sr: 1,\n ks: {\n o: { a: 0, k: 100, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [400, 300, 0], ix: 2 },\n a: { a: 0, k: [0, 0, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [540, 10], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: '矩形路径 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.852359056473, 0.852359056473, 0.852359056473, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n nm: '填充 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n }\n ],\n ip: 0,\n op: 150,\n st: 0,\n bm: 0\n }\n ],\n markers: []\n};\n","// @ts-nocheck\nexport const loading3 = {\n v: '5.5.2',\n fr: 60,\n ip: 20,\n op: 90,\n w: 200,\n h: 200,\n nm: 'Comp 1',\n ddd: 0,\n assets: [],\n layers: [\n {\n ddd: 0,\n ind: 1,\n ty: 4,\n nm: 'Shape Layer 1',\n sr: 1,\n ks: {\n o: { a: 0, k: 100, ix: 11 },\n r: { a: 0, k: 0, ix: 10 },\n p: { a: 0, k: [99.944, 100.007, 0], ix: 2 },\n a: { a: 0, k: [-2.909, 2.363, 0], ix: 1 },\n s: { a: 0, k: [100, 100, 100], ix: 6 }\n },\n ao: 0,\n shapes: [\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 55, s: [0, 0] },\n { t: 70, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 9',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 1,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 50, s: [0, 0] },\n { t: 65, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 8',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 2,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [29.135, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 7',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 3,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 50, s: [0, 0] },\n { t: 65, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 6',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 4,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 5',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 5,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-2.858, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 25, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [0, 0] },\n { t: 55, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 4',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 6,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, -29.73], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 30, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 45, s: [0, 0] },\n { t: 60, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 3',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 7,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, 2.337], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 25, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 40, s: [0, 0] },\n { t: 55, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 2',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 8,\n mn: 'ADBE Vector Group',\n hd: false\n },\n {\n ty: 'gr',\n it: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [33.3, 33.3], ix: 2 },\n p: { a: 0, k: [0, 0], ix: 3 },\n r: { a: 0, k: 0, ix: 4 },\n nm: 'Rectangle Path 1',\n mn: 'ADBE Vector Shape - Rect',\n hd: false\n },\n {\n ty: 'fl',\n c: { a: 0, k: [0.017408838459, 0.417201023476, 0.690012254902, 1], ix: 4 },\n o: { a: 0, k: 100, ix: 5 },\n r: 1,\n bm: 0,\n nm: 'Fill 1',\n mn: 'ADBE Vector Graphic - Fill',\n hd: false\n },\n {\n ty: 'tr',\n p: { a: 0, k: [-34.953, 34.455], ix: 2 },\n a: { a: 0, k: [0, 0], ix: 1 },\n s: {\n a: 1,\n k: [\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 20, s: [100, 100] },\n { i: { x: [0.667, 0.667], y: [1, 1] }, o: { x: [0.333, 0.333], y: [0, 0] }, t: 35, s: [0, 0] },\n { t: 50, s: [100, 100] }\n ],\n ix: 3\n },\n r: { a: 0, k: 0, ix: 6 },\n o: { a: 0, k: 100, ix: 7 },\n sk: { a: 0, k: 0, ix: 4 },\n sa: { a: 0, k: 0, ix: 5 },\n nm: 'Transform'\n }\n ],\n nm: 'Rectangle 1',\n np: 3,\n cix: 2,\n bm: 0,\n ix: 9,\n mn: 'ADBE Vector Group',\n hd: false\n }\n ],\n ip: 0,\n op: 141,\n st: 0,\n bm: 0\n }\n ],\n markers: []\n};\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { LOTTIE } from './constant';\nimport { LottieComponent } from './LottieComponent';\nimport type { ILottieComponentAttributes } from './lottie-interface';\nimport './lottie-runtime';\n\nexport class LottieCharacter extends CharacterComponent {\n static type = LOTTIE;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true,\n Lottie: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILottieComponentAttributes): void {\n this._graphic = new LottieComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import type { IActionSpec, ICharacter } from '@visactor/vstory-core';\nimport { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor,\n getCharacterByEffect\n} from '@visactor/vstory-player';\nimport { LOTTIE } from '../../character/lottie/constant';\n\nfunction runLottieAnimate(character: ICharacter, effect: string) {\n const graphics = getCharacterByEffect(character, effect) as IGraphic[];\n graphics.forEach((graphic: any) => _runLottieAnimate(graphic));\n}\n\nfunction _runLottieAnimate(graphic: IGraphic) {\n if (graphic && graphic.type !== 'text' && graphic.type !== 'richtext') {\n if (graphic.lottieInstance) {\n graphic.lottieInstance.stop();\n graphic.lottieInstance.play();\n }\n }\n}\n\nexport class LottieVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n run(character: ICharacter, actionSpec: IActionSpec): void {\n super.run(character, actionSpec);\n runLottieAnimate(character, actionSpec.action);\n }\n}\n\nexport function registerLottieVisibilityAction() {\n globalProcessorRegistry.registerProcessor(LOTTIE, {\n [ACTION_TYPE.APPEAR]: new LottieVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LottieVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import { AbstractComponent, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ISinglePieComponentAttributes, ISinglePieGraphicAttribute } from './single-pie-interface';\nimport type { IArc } from '@visactor/vrender-core';\n\nclass VRenderSinglePieComponent extends AbstractComponent {\n protected render(): void {\n const { template } = this.attribute as ISinglePieGraphicAttribute;\n if (template === 'montage') {\n return this.renderMontageTemp();\n } else if (template === 'contain') {\n return this.renderContainTemp();\n }\n\n return this.renderDefaultTemp();\n }\n\n renderDefaultTemp() {\n const { trackPie, pie, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const { startAngle = 0, endAngle = Math.PI * 2 } = pie;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: endAngle,\n endAngle: startAngle + Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...pie\n },\n 'arc'\n ) as IArc;\n }\n\n renderMontageTemp() {\n const { trackPie, pie, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...pie\n },\n 'arc'\n ) as IArc;\n }\n\n renderContainTemp() {\n const { trackPie, pie = {}, width, height } = this.attribute as ISinglePieGraphicAttribute;\n const radius = Math.max(Math.min(width, height), 0) / 2;\n const trackArc = this.createOrUpdateChild(\n 'trackPie',\n {\n startAngle: 0,\n endAngle: Math.PI * 2,\n x: width / 2,\n y: height / 2,\n outerRadius: radius,\n innerRadius: 0,\n ...trackPie\n },\n 'arc'\n ) as IArc;\n const { startAngle = 0, endAngle = Math.PI * 2 } = pie;\n let deltaAngle = Math.abs(endAngle - startAngle);\n while (deltaAngle > Math.PI * 2) {\n deltaAngle -= Math.PI * 2;\n }\n const r = (radius * deltaAngle) / Math.PI / 2;\n const arc = this.createOrUpdateChild(\n 'pie',\n {\n x: width / 2,\n y: height - r,\n outerRadius: r,\n innerRadius: 0,\n ...pie,\n startAngle: 0,\n endAngle: Math.PI * 2\n },\n 'arc'\n ) as IArc;\n }\n}\n\nexport class SinglePieComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n vrComponent: VRenderSinglePieComponent;\n\n constructor(attributes: ISinglePieComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, SinglePieComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPie();\n }\n protected renderPie() {\n const { graphic, padding, width, height } = this.attribute as ISinglePieComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const lottie = new VRenderSinglePieComponent(attribute);\n this.vrComponent = lottie;\n this.addChild(lottie);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const SINGLE_PIE = 'SinglePie';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { SinglePieComponent } from './SinglePieComponent';\nimport type { ISinglePieComponentAttributes } from './single-pie-interface';\nimport { SINGLE_PIE } from './constant';\n\nexport class SinglePieCharacter extends CharacterComponent {\n static type = SINGLE_PIE;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ISinglePieComponentAttributes): void {\n this._graphic = new SinglePieComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport {\n ACTION_TYPE,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor,\n ArcGrowAngle\n} from '@visactor/vstory-player';\nimport { SINGLE_PIE } from '../../character/single-pie/constant';\n\nconst defaultInstance = new ArcGrowAngle();\nexport class SinglePieVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'angle':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerSinglePieVisibilityAction() {\n globalProcessorRegistry.registerProcessor(SINGLE_PIE, {\n [ACTION_TYPE.APPEAR]: new SinglePieVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new SinglePieVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","export const DYNAMIC_LINE = 'DynamicLine';\n","import { DYNAMIC_LINE } from './constant';\nimport type { IDynamicLineChartGraphicAttribute } from './dynamic-line-interface';\nimport type { IChartCharacterRuntime } from '@visactor/vstory-core/es/character/chart/interface/runtime';\nimport type { ICharacterChart } from '@visactor/vstory-core/es/character/chart/interface/character-chart';\nimport { RuntimeStore } from '@visactor/vstory-core';\n\nexport class DynamicLineRuntime implements IChartCharacterRuntime {\n type = DYNAMIC_LINE;\n\n applyConfigToAttribute(character: ICharacterChart): void {\n const rawAttribute = character.getRuntimeConfig().getAttribute() as IDynamicLineChartGraphicAttribute;\n const config = character.getRuntimeConfig().config;\n const { bottomRange } = config.options as any;\n const { spec } = rawAttribute;\n\n const bottom = spec.scrollBar.find((item: any) => item.orient === 'bottom');\n if (bottom) {\n bottom.start = bottomRange[0];\n bottom.end = bottomRange[1];\n }\n spec.animation = true;\n spec.animationAppear = false;\n spec.animationEnter = false;\n\n // 不允许采样,否则轴动画很奇怪\n if (!spec.axes) {\n spec.axes = [];\n }\n let bottomAxis = spec.axes.find((item: any) => item.orient === 'bottom');\n if (!bottomAxis) {\n bottomAxis = {\n orient: 'bottom'\n };\n spec.axes.push(bottomAxis);\n }\n bottomAxis.sampling = false;\n\n if (!bottomAxis.label) {\n bottomAxis.label = {};\n }\n bottomAxis.label.autoHide = false;\n }\n}\n\nexport const DynamicLineRuntimeInstance = new DynamicLineRuntime();\nRuntimeStore.register(DynamicLineRuntimeInstance);\n","import { CharacterChart } from '@visactor/vstory-core';\nimport { DYNAMIC_LINE } from './constant';\nimport type { IDynamicLineChartGraphicAttribute } from './dynamic-line-interface';\nimport './dynamic-line-runtime';\nexport class DynamicLineCharacter extends CharacterChart {\n static type = DYNAMIC_LINE;\n\n static RuntimeMap: { [key: string]: any } = {\n [DYNAMIC_LINE]: true\n };\n\n getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n spec: {\n type: 'line',\n scrollBar: [\n {\n visible: false,\n orient: 'bottom',\n start: 0,\n end: 0.5,\n roam: true,\n filterMode: 'axis'\n }\n ]\n },\n bottomRange: [0, 0.5]\n };\n }\n}\n","import { AbstractComponent, PopTip, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { IPopTipComponentAttributes } from './poptip-interface';\n\nexport class PopTipComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n },\n graphic: {\n panel: {\n visible: true\n }\n }\n };\n\n vrComponent: PopTip;\n\n constructor(attributes: IPopTipComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTipComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPopTip();\n }\n protected renderPopTip() {\n const { graphic, padding, width, height } = this.attribute as IPopTipComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const poptip = new PopTip(attribute);\n this.vrComponent = poptip;\n this.addChild(poptip);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const POPTIP = 'PopTip';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { PopTipComponent } from './PopTipComponent';\nimport type { IPopTipComponentAttributes } from './poptip-interface';\nimport { POPTIP } from './constant';\n\nexport class PopTipCharacter extends CharacterComponent {\n static type = POPTIP;\n\n protected _group: IGroup;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected createAndAddGraphic(attribute: IPopTipComponentAttributes): void {\n this._graphic = new PopTipComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IArc } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n BaseVisibility,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor\n} from '@visactor/vstory-player';\nimport { POPTIP } from '../../character/poptip/constant';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: any, appear: boolean) {\n if (!appear) {\n return;\n }\n // todo 添加appear属性的初始化逻辑\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n if (appear && graphic && graphic.appearAnimate) {\n graphic.appearAnimate(params);\n } else if (!appear && graphic && graphic.disappearAnimate) {\n graphic.disappearAnimate(params);\n }\n\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class PoptipVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerPopTipVisibilityAction() {\n globalProcessorRegistry.registerProcessor(POPTIP, {\n [ACTION_TYPE.APPEAR]: new PoptipVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new PoptipVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type {\n IGroup,\n ILine,\n ILineGraphicAttribute,\n IRect,\n ISymbol,\n ISymbolGraphicAttribute,\n IText\n} from '@visactor/vrender-core';\nimport { ILineAttribute, InputText, ISymbolAttribute } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport type { IStoryLabelItemAttrs } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { max, merge } from '@visactor/vutils';\n\nexport class StoryLabelItem extends AbstractComponent> {\n name: 'labelItem';\n private _line?: ILine;\n private _symbolStart: ISymbol;\n private _symbolEnd: ISymbol;\n private _symbolStartOuter: ISymbol;\n private _titleTop: IText;\n private _titleBottom: IText;\n private _titleTopPanel: IRect;\n private _titleBottomPanel: IRect;\n\n static defaultAttributes: Partial = {\n // 内容在X上的偏移量\n contentOffsetX: 100,\n // 内容在Y上的偏移量\n contentOffsetY: -60,\n titleTopStyle: {\n fontSize: 12,\n fill: 'white'\n },\n titleBottomStyle: {\n fontSize: 12,\n fill: 'white'\n },\n lineStyle: {\n stroke: 'white',\n lineWidth: 1\n } as ILineGraphicAttribute,\n // 线段开始端点的样式\n symbolStartStyle: {\n symbolType: 'circle',\n size: 3,\n fill: 'white'\n } as Partial,\n // 线段结束端点的样式\n symbolEndStyle: {\n symbolType: 'circle',\n size: 3,\n fill: 'white'\n } as Partial,\n // 线段开始端点外面包裹symbol的样式\n symbolStartOuterStyle: {\n symbolType: 'M0.5,0A0.5,0.5,0,1,1,-0.5,0A0.5,0.5,0,1,1,0.5,0',\n size: 8,\n stroke: 'white'\n } as Partial,\n titleSpace: [2, 2],\n titleTopPanelStyle: {\n visible: false,\n padding: { left: 0, right: 0, bottom: 2, top: 2 },\n cornerRadius: 3\n },\n titleBottomPanelStyle: {\n visible: false,\n padding: { left: 0, right: 0, bottom: 2, top: 2 },\n cornerRadius: 3\n },\n // 默认和简约两套主题\n theme: 'default'\n };\n\n constructor(attributes: IStoryLabelItemAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, StoryLabelItem.defaultAttributes, attributes));\n }\n\n protected render(): void {\n const {\n contentOffsetX,\n contentOffsetY,\n lineStyle,\n symbolStartStyle,\n symbolEndStyle,\n symbolStartOuterStyle,\n titleTop: titleTopText,\n titleBottom: titleBottomText,\n titleTopStyle,\n titleBottomStyle,\n titleSpace,\n titleTopPanelStyle,\n titleBottomPanelStyle,\n theme\n } = this.attribute;\n\n const group = this.createOrUpdateChild('label-item-container', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n const symbolStart = group.createOrUpdateChild(\n 'label-item-symbol-start',\n { x: 0, y: 0, ...symbolStartStyle },\n 'symbol'\n ) as ISymbol;\n const symbolEnd = group.createOrUpdateChild(\n 'label-item-symbol-end',\n { x: contentOffsetX, y: contentOffsetY, ...symbolEndStyle },\n 'symbol'\n ) as ISymbol;\n const symbolStartOut = group.createOrUpdateChild(\n 'label-item-symbol-start-out',\n { x: 0, y: 0, ...symbolStartOuterStyle },\n 'symbol'\n ) as ISymbol;\n\n const spaceW = titleSpace[0];\n const spaceH = titleSpace[1];\n // 逻辑:group占满,title在group内做偏移\n const titleTopGroup = group.createOrUpdateChild(\n 'label-item-title-top-group',\n { x: contentOffsetX, y: contentOffsetY, clip: true },\n 'group'\n ) as IGroup;\n const titleTop = titleTopGroup.createOrUpdateChild(\n 'label-item-title-top',\n {\n x: spaceW,\n y: -spaceH,\n text: titleTopText,\n ...titleTopStyle,\n textBaseline: 'bottom',\n textAlign: 'left',\n zIndex: 10\n },\n 'text'\n ) as IText;\n const titleTopBounds = titleTop.AABBBounds;\n if (contentOffsetX > 0) {\n titleTopGroup.setAttributes({ x: contentOffsetX - titleTopBounds.width() - spaceW * 2 });\n }\n titleTopGroup.setAttributes({\n width: titleTopBounds.width() + spaceW * 2,\n height: -titleTopBounds.height() - spaceH * 2\n });\n // 添加panel\n const titleTopPanel = titleTopGroup.createOrUpdateChild(\n 'label-item-title-top-panel',\n {\n ...titleTopPanelStyle,\n x: titleTopPanelStyle.padding.left,\n y: (titleTopGroup.attribute.height > 0 ? 0 : titleTopGroup.attribute.height) + titleTopPanelStyle.padding.top,\n width: titleTopGroup.attribute.width - titleTopPanelStyle.padding.left - titleTopPanelStyle.padding.right,\n height:\n (titleTopGroup.attribute.height > 0 ? 1 : -1) * titleTopGroup.attribute.height -\n titleTopPanelStyle.padding.bottom -\n titleTopPanelStyle.padding.top,\n scaleCenter: [titleTopGroup.attribute.width / 2, titleTopGroup.attribute.height / 2]\n },\n 'rect'\n ) as IRect;\n this._titleTopPanel = titleTopPanel;\n\n const titleBottomGroup = group.createOrUpdateChild(\n 'label-item-title-bottom-group',\n { x: contentOffsetX, y: contentOffsetY, clip: true },\n 'group'\n ) as IGroup;\n const titleBottom = titleBottomGroup.createOrUpdateChild(\n 'label-item-title-bottom',\n {\n x: spaceW,\n y: spaceH,\n text: titleBottomText,\n ...titleBottomStyle,\n textBaseline: 'top',\n textAlign: 'left',\n zIndex: 10\n },\n 'text'\n ) as IText;\n const titleBottomBounds = titleBottom.AABBBounds;\n if (contentOffsetX > 0) {\n titleBottomGroup.setAttributes({ x: contentOffsetX - titleBottomBounds.width() - spaceW * 2 });\n }\n titleBottomGroup.setAttributes({\n width: titleBottomBounds.width() + spaceW * 2,\n height: titleTopBounds.height() + spaceH * 2\n });\n // 添加panel\n const titleBottomPanel = titleBottomGroup.createOrUpdateChild(\n 'label-item-title-bottom-panel',\n {\n ...titleBottomPanelStyle,\n x: titleBottomPanelStyle.padding.left,\n y:\n (titleBottomGroup.attribute.height > 0 ? 0 : titleBottomGroup.attribute.height) +\n titleBottomPanelStyle.padding.top,\n width:\n titleBottomGroup.attribute.width - titleBottomPanelStyle.padding.left - titleBottomPanelStyle.padding.right,\n height:\n (titleBottomGroup.attribute.height > 0 ? 1 : -1) * titleBottomGroup.attribute.height -\n titleBottomPanelStyle.padding.bottom -\n titleBottomPanelStyle.padding.top,\n scaleCenter: [titleBottomGroup.attribute.width / 2, titleBottomGroup.attribute.height / 2]\n },\n 'rect'\n ) as IRect;\n this._titleBottomPanel = titleBottomPanel;\n\n const maxTextWidth = Math.max(titleTop.AABBBounds.width(), titleBottom.AABBBounds.width()) + spaceW * 2;\n const points = [\n { x: 0, y: 0 },\n contentOffsetX > 0\n ? { x: contentOffsetX - maxTextWidth, y: contentOffsetY }\n : { x: contentOffsetX + maxTextWidth, y: contentOffsetY },\n { x: contentOffsetX, y: contentOffsetY }\n ];\n // simple风格,不绘制终点,同时文字也要居中\n if (theme === 'simple') {\n points.pop();\n const p = points[1];\n symbolEnd.setAttributes(p);\n }\n const line = group.createOrUpdateChild('label-item-line', { x: 0, y: 0, ...lineStyle, points }, 'line') as ILine;\n\n this._symbolEnd = symbolEnd;\n this._symbolStart = symbolStart;\n this._symbolStartOuter = symbolStartOut;\n this._titleTop = titleTop;\n this._titleBottom = titleBottom;\n this._line = line;\n }\n\n appearAnimate(animateConfig: {\n duration?: number;\n easing?: string;\n symbolStartOuterType?: 'scale' | 'clipRange';\n titleType?: 'typewriter' | 'move';\n titlePanelType?: 'scale' | 'stroke';\n }) {\n const {\n duration = 1000,\n easing = 'quadOut',\n symbolStartOuterType = 'scale',\n titleType = 'typewriter',\n titlePanelType = 'scale'\n } = animateConfig;\n const symbolTime = duration / 10;\n this._symbolStart.setAttributes({ scaleX: 0, scaleY: 0 });\n this._symbolStart.animate().to({ scaleX: 1, scaleY: 1 }, symbolTime * 5, easing as any);\n\n let symbolStartOuterFrom: ISymbolGraphicAttribute;\n let symbolStartOuterTo: ISymbolGraphicAttribute;\n if (symbolStartOuterType === 'scale') {\n symbolStartOuterFrom = { scaleX: 0, scaleY: 0 };\n symbolStartOuterTo = { scaleX: 1, scaleY: 1 };\n } else {\n symbolStartOuterFrom = { clipRange: 0 };\n symbolStartOuterTo = { clipRange: 1 };\n }\n this._symbolStartOuter.setAttributes(symbolStartOuterFrom);\n this._symbolStartOuter.animate().to(symbolStartOuterTo, symbolTime * 5, easing as any);\n\n this._symbolEnd.setAttributes({ scaleX: 0, scaleY: 0 });\n this._symbolEnd\n .animate()\n .wait(symbolTime * 8)\n .to({ scaleX: 1, scaleY: 1 }, symbolTime * 2, easing as any);\n\n this._line.setAttributes({ clipRange: 0 });\n this._line.animate().to({ clipRange: 1 }, symbolTime * 9, easing as any);\n\n if (titleType === 'typewriter') {\n const titleTopText = this._titleTop.attribute.text as string;\n this._titleTop.setAttributes({ text: '' });\n this._titleTop\n .animate()\n .wait(symbolTime * 5)\n .play(new InputText({ text: '' }, { text: titleTopText }, symbolTime * 4, 'linear'));\n\n const titleBottomText = this._titleBottom.attribute.text as string;\n this._titleBottom.setAttributes({ text: '' });\n this._titleBottom\n .animate()\n .wait(symbolTime * 5)\n .play(new InputText({ text: '' }, { text: titleBottomText }, symbolTime * 4, 'linear'));\n } else {\n this._titleTop.setAttributes({ dy: this._titleTop.AABBBounds.height() + 10 });\n this._titleTop\n .animate()\n .wait(symbolTime * 5)\n .to({ dy: 0 }, symbolTime * 4, 'linear');\n\n this._titleBottom.setAttributes({ dy: -(10 + this._titleBottom.AABBBounds.height()) });\n this._titleBottom\n .animate()\n .wait(symbolTime * 5)\n .to({ dy: 0 }, symbolTime * 4, 'linear');\n }\n\n if (titlePanelType === 'scale') {\n [this._titleTopPanel, this._titleBottomPanel].forEach(panel => {\n const scaleX = panel.attribute.scaleX;\n panel.setAttributes({ scaleX: 0 });\n panel.animate().to({ scaleX }, duration, 'circInOut');\n });\n } else if (titlePanelType === 'stroke') {\n [this._titleTopPanel, this._titleBottomPanel].forEach(panel => {\n const b = panel.AABBBounds;\n const totalLen = (b.width() + b.height()) * 2;\n panel.setAttributes({ lineDash: [0, totalLen * 10] });\n panel.animate().to({ lineDash: [totalLen, totalLen * 10] }, duration, 'quadOut');\n });\n }\n }\n\n disappearAnimate(animateConfig: { duration?: number; easing?: string; mode?: 'scale' | 'default' }) {\n if (animateConfig.mode === 'scale') {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n } else {\n const { duration = 1000, easing = 'quadOut' } = animateConfig;\n this._line.animate().to({ clipRange: 0 }, duration, easing as any);\n this._symbolStart\n .animate()\n .wait(duration / 2)\n .to({ scaleX: 0, scaleY: 0 }, duration / 2, easing as any);\n this._symbolEnd.animate().to({ scaleX: 0, scaleY: 0 }, duration, easing as any);\n this._titleTop.animate().to({ dy: this._titleTop.AABBBounds.height() + 10 }, duration / 2, easing as any);\n this._titleBottom\n .animate()\n .to({ dy: -(10 + this._titleBottom.AABBBounds.height()) }, duration / 2, easing as any);\n this._symbolStartOuter\n .animate()\n .wait(duration / 2)\n .to({ clipRange: 0 }, duration / 2, easing as any);\n this._titleTopPanel.animate().to({ scaleX: 0 }, duration, 'circInOut');\n this._titleBottomPanel.animate().to({ scaleX: 0 }, duration, 'circInOut');\n }\n }\n}\n","import { StoryLabelItem, type ComponentOptions } from '@visactor/vrender-components';\nimport { merge } from '@visactor/vutils';\nimport { BaseComponentWithText } from '@visactor/vstory-core';\nimport type { ILabelItemComponentAttributes } from './label-item-interface';\n\nexport class PopTipComponent extends BaseComponentWithText {\n static defaultAttributes: Partial = {\n visible: true,\n textStyle: {},\n width: 100,\n height: 100,\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n };\n\n vrComponent: StoryLabelItem;\n\n constructor(attributes: ILabelItemComponentAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, PopTipComponent.defaultAttributes, attributes));\n }\n\n protected render(): void {\n super.render();\n // 添加pie\n this.renderPopTip();\n }\n protected renderPopTip() {\n const { graphic, padding, width, height } = this.attribute as ILabelItemComponentAttributes;\n const attrs = { ...graphic };\n if (!attrs.x) {\n attrs.x = padding.left;\n }\n if (!attrs.y) {\n attrs.y = padding.top;\n }\n if (!attrs.width) {\n attrs.width = width - padding.left - padding.right;\n }\n if (!attrs.height) {\n attrs.height = height - padding.top - padding.bottom;\n }\n const attribute: any = { ...attrs, scaleX: 1, scaleY: 1, angle: 0, postMatrix: null };\n if (!this.vrComponent) {\n const labelItem = new StoryLabelItem(attribute);\n this.vrComponent = labelItem;\n this.addChild(labelItem);\n } else {\n this.vrComponent.setAttributes(attribute);\n }\n }\n}\n","export const LABEL_ITEM = 'LabelItem';\n","import type { IGroup } from '@visactor/vrender-core';\nimport { CharacterComponent } from '@visactor/vstory-core';\nimport { PopTipComponent } from './LabelItemComponent';\nimport type { ILabelItemComponentAttributes } from './label-item-interface';\nimport { LABEL_ITEM } from './constant';\n\nexport class LabelItemCharacter extends CharacterComponent {\n static type = LABEL_ITEM;\n\n static RuntimeMap: { [key: string]: any } = {\n BaseGraphic: true\n };\n\n protected _group: IGroup;\n\n protected createAndAddGraphic(attribute: ILabelItemComponentAttributes): void {\n this._graphic = new PopTipComponent(attribute);\n this.canvas.addGraphic(this._graphic);\n }\n\n protected getDefaultAttribute(): Partial {\n return {\n ...super.getDefaultAttribute(),\n width: 100,\n height: 100\n };\n }\n\n protected _clearGraphic(): void {\n super._clearGraphic();\n }\n\n show() {\n this._graphic.setAttribute('visibleAll', true);\n }\n hide() {\n this._graphic.setAttribute('visibleAll', false);\n }\n}\n","import { globalProcessorRegistry } from '@visactor/vstory-core';\nimport type { IArc } from '@visactor/vrender-core';\nimport {\n ACTION_TYPE,\n BaseVisibility,\n CommonBounceActionProcessor,\n CommonMoveToActionProcessor,\n CommonScaleToActionProcessor,\n CommonStyleActionProcessor,\n CommonVisibilityActionProcessor\n} from '@visactor/vstory-player';\nimport { LABEL_ITEM } from '../../character/label-item/constant';\n\nexport class DefaultVisibility extends BaseVisibility {\n protected _setInitAttributes(graphic: IArc, params: any, appear: boolean) {\n if (!appear) {\n return;\n }\n // todo 添加appear属性的初始化逻辑\n }\n\n protected _run(graphic: IArc, params: any, appear: boolean) {\n if (appear && graphic && graphic.appearAnimate) {\n graphic.appearAnimate(params);\n } else if (!appear && graphic && graphic.disappearAnimate) {\n graphic.disappearAnimate(params);\n }\n\n return true;\n }\n}\n\nconst defaultInstance = new DefaultVisibility();\n\nexport class LabelItemVisibilityActionProcessor extends CommonVisibilityActionProcessor {\n name: string = 'appearOrDisAppear';\n constructor() {\n super();\n }\n\n getEffectInstance(effect: string, appear: boolean) {\n switch (effect) {\n case 'default':\n return defaultInstance;\n }\n return super.getEffectInstance(effect, appear);\n }\n}\n\nexport function registerLabelItemVisibilityAction() {\n globalProcessorRegistry.registerProcessor(LABEL_ITEM, {\n [ACTION_TYPE.APPEAR]: new LabelItemVisibilityActionProcessor(),\n [ACTION_TYPE.DISAPPEAR]: new LabelItemVisibilityActionProcessor(),\n [ACTION_TYPE.STYLE]: new CommonStyleActionProcessor(),\n [ACTION_TYPE.MOVETO]: new CommonMoveToActionProcessor(),\n [ACTION_TYPE.SCALETO]: new CommonScaleToActionProcessor(),\n [ACTION_TYPE.BOUNCE]: new CommonBounceActionProcessor()\n });\n}\n","import type { RichTextEditPlugin } from '@visactor/vrender';\nimport type { IGraphic } from '@visactor/vrender';\nimport { EventEmitter, isArray } from '@visactor/vutils';\nimport { PickEventType, EditActionEnum } from './const';\nimport type { ContinuousActionType, IEditActionInfo, IEditOverActionInfo } from './interface';\nimport type { ICharacter, ICharacterPickInfo, IStoryEvent, Story } from '@visactor/vstory-core';\n\nconst IgnoreEvent: { [key: string]: boolean } = {\n mousemove: true,\n mouseout: true,\n mouseover: true\n};\n\nconst PointerOverEvent: { [key: string]: boolean } = {\n pointerover: true,\n pointerout: true,\n pointermove: true\n};\n\nconst IgnoreEnds = 'capture';\n\nexport class EditAction extends EventEmitter {\n protected _actionInProgress: ContinuousActionType = null;\n get actionInProgress() {\n return this._actionInProgress;\n }\n\n constructor(public story: Story) {\n super();\n this.richTextPluginEvent();\n }\n\n lastOverGraphic: {\n characterInfo: ICharacterPickInfo;\n character: ICharacter;\n detailTarget: IGraphic;\n } = null;\n\n richTextPluginEvent() {\n const plugin = this.story.canvas\n .getStage()\n .pluginService.findPluginsByName('RichTextEditPlugin')[0] as RichTextEditPlugin;\n if (!plugin) {\n return;\n }\n plugin.registerUpdateListener((type, p) => {\n this.emit(EditActionEnum.richTextPluginEdit, { type, p });\n });\n }\n\n onStoryEvent(event: IStoryEvent, type: string) {\n if ((IgnoreEvent as any)[type]) {\n return;\n }\n if (type.endsWith(IgnoreEnds)) {\n return;\n }\n\n this.processOverEvent(event, type);\n\n // TODO: hack detailPath会被正常删除后,删除这个hack代码\n if (event.detailPath) {\n if (event.path[event.path.length - 1] !== event.detailPath[event.path.length - 1]) {\n delete event.detailPath;\n }\n }\n\n // 非选中逻辑\n if (!(PickEventType as any)[type]) {\n return this.dispatchAction({\n type: type,\n event\n });\n }\n\n // 选中逻辑才添加交互元素信息。得到交互元素\n const { characterInfo, character } = this.story.canvas.getEventDetail(event);\n // 单选\n if (type === 'click' && character) {\n type = EditActionEnum.singleSelection;\n } else if (type === 'pointerdown' && !character) {\n // 取消选中\n type = EditActionEnum.unSelection;\n }\n\n this.dispatchAction({\n type: type,\n characterId: character?.id,\n character: character,\n event,\n detail: characterInfo\n });\n }\n\n // graphic over out\n processOverEvent(event: IStoryEvent, type: string) {\n if (!PointerOverEvent[type]) {\n return;\n }\n const { characterInfo, character } = this.story.canvas.getEventDetail(event);\n let detailTarget = event.path[event.path.length - 1];\n const detailPath = event.detailPath;\n // 如果存在详细path\n if (detailPath) {\n const detailTargetList = detailPath[detailPath.length - 1];\n if (isArray(detailTargetList)) {\n detailTarget = detailTargetList[detailTargetList.length - 1];\n }\n }\n let actionType = null;\n // 外层 over 必然触发 over\n if (type === 'pointerover') {\n if (character) {\n actionType = EditActionEnum.pointerOverCharacter;\n }\n } else if (type === 'pointerout') {\n // 外层 out 必然触发out\n if (\n this.lastOverGraphic &&\n character &&\n character === this.lastOverGraphic.character &&\n detailTarget &&\n detailTarget === this.lastOverGraphic.detailTarget\n ) {\n actionType = EditActionEnum.pointerOutCharacter;\n }\n } else {\n // 外层move,同时没有lastOver,不需要继续判定\n if (!this.lastOverGraphic) {\n return;\n }\n // 如果不是同一个 character out\n if (character !== this.lastOverGraphic.character) {\n actionType = EditActionEnum.pointerOutCharacter;\n // 如果是同一个元素,但是不是同一个target\n } else if (detailTarget !== this.lastOverGraphic.detailTarget) {\n // 先抛出离开\n this.dispatchAction({\n type: EditActionEnum.pointerOutCharacter,\n characterId: this.lastOverGraphic.character?.id,\n character: this.lastOverGraphic.character,\n event,\n detail: this.lastOverGraphic.characterInfo\n // nextAction: {\n // actionType: EditActionEnum.pointerOverCharacter,\n // characterId: character?.id,\n // character: character,\n // event,\n // detail: characterInfo\n // }\n } as IEditOverActionInfo);\n actionType = EditActionEnum.pointerOverCharacter;\n } else {\n // 是同一个元素,并且是同一个target\n return;\n }\n }\n if (!actionType) {\n return;\n }\n this.dispatchAction({\n type: actionType,\n characterId: character?.id,\n character: character,\n event,\n detail: characterInfo\n });\n if (actionType === EditActionEnum.pointerOverCharacter) {\n this.lastOverGraphic = { characterInfo, character, detailTarget };\n } else if (actionType === EditActionEnum.pointerOutCharacter) {\n this.lastOverGraphic = null;\n }\n }\n\n dispatchAction(action: IEditActionInfo) {\n this.emit('dispatchAction', action);\n }\n\n release() {\n this.removeAllListeners();\n this.story = null;\n }\n}\n","import { EditAction } from './edit-action';\nimport { EventEmitter } from '@visactor/vutils';\nimport {\n type IEditActionInfo,\n type IEditSelection,\n type IEditSelectionConstructor,\n type IEditMessage\n} from './interface';\nimport type { IGroup, IGraphic } from '@visactor/vrender';\nimport { createGroup } from '@visactor/vrender';\nimport { EditActionEnum, SeriesMarkMode } from './const';\nimport type { ICharacter, ILayoutLine, IStoryEvent, Story } from '@visactor/vstory-core';\n\nexport class Edit extends EventEmitter {\n readonly editAction: EditAction;\n\n protected static selectionConstructorMap: { [key: string]: IEditSelectionConstructor } = {};\n\n static registerEditSelection(key: string, cpt: IEditSelectionConstructor) {\n Edit.selectionConstructorMap[key] = cpt;\n }\n\n protected _selectionMap: { [key: string]: IEditSelection } = {};\n protected _selectionList: IEditSelection[];\n\n protected _currentSelection: IEditSelection;\n protected _overGraphicGroup: IGroup;\n\n protected _editGroup: IGroup;\n\n // 提供给组件一个编辑的全局状态,组件可以读取/设置。\n // 比如当前的chart元素选中层级,全部/数据组/单个 这个状态在标签,系列mark 中共同使用\n private _editGlobalState: { [key: string]: any } = {\n seriesMarkMode: SeriesMarkMode.all\n };\n get editGlobalState(): { [key: string]: any } {\n return this._editGlobalState;\n }\n\n setEditGlobalState(key: string, value: any) {\n this._editGlobalState[key] = value;\n }\n\n constructor(public readonly story: Story) {\n super();\n this.editAction = new EditAction(story);\n this.editAction.on('dispatchAction', this.onAction);\n this.story.canvas.getStage().addEventListener('*', this.onStoryEvent);\n this._initEditGroup();\n this._initComponent();\n }\n\n _initEditGroup() {\n this._editGroup = createGroup({});\n this._editGroup.name = 'edit_group';\n const editLayer = this.story.canvas.getStage().createLayer();\n const defaultLayerAttr = this.story.canvas.getStage().defaultLayer.attribute;\n editLayer.setAttributes({\n width: defaultLayerAttr.width,\n height: defaultLayerAttr.height,\n x: defaultLayerAttr.x,\n y: defaultLayerAttr.y,\n scaleX: defaultLayerAttr.scaleX,\n scaleY: defaultLayerAttr.scaleY,\n clip: false\n });\n editLayer.clipInViewBox = false;\n editLayer.add(this._editGroup);\n\n this._overGraphicGroup = createGroup({ pickable: false });\n this._overGraphicGroup.name = 'over_group';\n editLayer.add(this._overGraphicGroup);\n }\n\n getEditGroup() {\n return this._editGroup;\n }\n\n getStage() {\n return this._editGroup.stage;\n }\n\n protected _initComponent() {\n this._selectionMap = {};\n Object.keys(Edit.selectionConstructorMap).forEach(key => {\n this._selectionMap[key] = new Edit.selectionConstructorMap[key](this);\n });\n this._selectionList = Object.values(this._selectionMap)\n .sort((a, b) => a.level - b.level)\n .reverse();\n }\n\n onStoryEvent = (event: IStoryEvent, type: string) => {\n // 如果交互到编辑元素忽略\n if (event.path.find((g: any) => g === this._editGroup || g === this._overGraphicGroup)) {\n // 具体判断是否编辑到交互元素,如果pick到group,就不算\n const pathTarget = event.path[event.path.length - 1];\n if (!pathTarget.isContainer || pathTarget.attribute?.pickable === true) {\n return;\n }\n }\n this.editAction.onStoryEvent(event, type);\n };\n\n // TODO: over不能正确的分发到全部selection\n onAction = (actionInfo: IEditActionInfo) => {\n // over\n if (\n actionInfo.type === EditActionEnum.pointerOverCharacter ||\n actionInfo.type === EditActionEnum.pointerOutCharacter\n ) {\n this._selectionList.forEach(c => c.checkOver?.(actionInfo));\n return;\n }\n\n // 选中\n if (this._currentSelection) {\n // 优先上一次的编辑组件\n if (this._currentSelection.checkAction(actionInfo)) {\n return;\n }\n }\n for (let i = 0; i < this._selectionList.length; i++) {\n const cpt = this._selectionList[i];\n if (cpt.checkAction(actionInfo)) {\n // this.stopEdit();\n // cpt.startEdit(actionInfo);\n this._currentSelection = cpt;\n return;\n }\n }\n };\n\n selectCharacter(id: string) {\n this.editAction.dispatchAction({\n type: EditActionEnum.singleSelection,\n characterId: id,\n character: this.story.getCharacterById(id),\n event: null,\n detail: null\n });\n }\n\n emitStartEdit(msg: IEditMessage) {\n this.dispatchEditAction('startEdit', msg);\n }\n emitEndEdit(msg: IEditMessage) {\n this.dispatchEditAction('endEdit', msg);\n }\n\n dispatchEditAction(type: string, msg: IEditMessage) {\n this.emit(type, msg);\n }\n\n triggerEditWithEvent(event: IStoryEvent) {\n return;\n }\n\n triggerEditWithComponent(type: string, actionInfo: IEditActionInfo) {\n return;\n }\n\n stopEdit() {\n this._currentSelection?.endEdit();\n this._currentSelection = null;\n }\n\n release() {\n this.story.canvas?.getStage?.().removeEventListener('*', this.onStoryEvent as any);\n this.editAction.release();\n }\n\n showOverGraphic(graphic: IGraphic, clearOther: boolean = true) {\n if (clearOther) {\n this._overGraphicGroup.removeAllChild();\n }\n this._overGraphicGroup.add(graphic);\n }\n\n clearOverGraphic() {\n this._overGraphicGroup.removeAllChild();\n }\n\n getLayoutLineInLayer(ignoreIdList: string[]): ILayoutLine[] {\n const result: ILayoutLine[] = [];\n const characterList = this.story.getCharacterList();\n result.push(...this.story.canvas.getLayoutGuideLine());\n characterList.forEach(c => {\n if (ignoreIdList.includes(c.id)) {\n return;\n }\n result.push(...c.getLayoutGuideLine());\n });\n return result;\n }\n}\n","export const BOUNDS_HOVER_COLOR = '#B2B7C2'; // 包围盒式 hover 的颜色\nexport const BOUNDS_SELECT_COLOR = '#3073F2'; // 包围盒式选中的颜色\nexport const SHAPE_HOVER_COLOR = '#3073F2'; // 使用图元自己形状的 hover 颜色\nexport const SHAPE_SELECT_COLOR = '#3073F2'; // 使用图元自己形状选中的颜色\nexport const DRAG_ANCHOR_COLOR = '#fea53e'; // 锚点拖拽颜色\n\nexport const LINE_CONNECT_COLOR = '#3073F2'; // 连接点颜色\nexport const PREVIEW_LINE_CONNECT_COLOR = '#95b5ff'; // 预览连接点颜色\nexport const LINE_CONTROL_COLOR = '#3073F2'; // 控制点颜色\nexport const PREVIEW_LINE_CONTROL_COLOR = '#95b5ff'; // 预览控制点颜色\n\nexport const MinFontSize = 8;\nexport const MinSize = 20;\n","import type { IStage } from '@visactor/vrender';\n\nexport class DragComponent {\n private _state: 'startDrag' | 'dragging' | 'stopDrag' | 'none' = 'none';\n private _pausing = false;\n get state() {\n return this._state;\n }\n set state(state: 'startDrag' | 'dragging' | 'stopDrag' | 'none') {\n this._state = state;\n }\n\n private _lastPosX: number;\n private _lastPosY: number;\n private _stage: IStage;\n // protected _container: HTMLElement;\n\n constructor(stage: IStage) {\n this._stage = stage;\n stage.addEventListener('pointermove', this.pointerMove, true);\n stage.addEventListener('pointerup', this.stopDrag, true);\n }\n\n protected _dragHandler: (moveX: number, moveY: number) => void;\n protected _dragEndHandler: () => void;\n protected _unDragEndHandler: () => void;\n\n pointerMove = (event: any) => {\n if (this._pausing) {\n return;\n }\n if (!(this._state === 'startDrag' || this._state === 'dragging')) {\n return;\n }\n if (this._state !== 'dragging') {\n this._state = 'dragging';\n }\n this._dragHandler?.(event.clientX - this._lastPosX, event.clientY - this._lastPosY);\n this._lastPosX = event.clientX;\n this._lastPosY = event.clientY;\n };\n\n dragHandler(handler: (moveX: number, moveY: number) => void) {\n this._dragHandler = handler;\n }\n dragEndHandler(handler: () => void) {\n this._dragEndHandler = handler;\n }\n unDragEndHandler(handler: () => void) {\n this._unDragEndHandler = handler;\n }\n\n pauseDrag() {\n this._pausing = true;\n }\n resumeDrag() {\n this._pausing = false;\n }\n\n startDrag(event: any) {\n this._state = 'startDrag';\n this._lastPosX = event.clientX;\n this._lastPosY = event.clientY;\n }\n\n stopDrag = (event: PointerEvent) => {\n if (this._state !== 'dragging' && this._state !== 'startDrag') {\n this._unDragEndHandler?.();\n return;\n }\n // const lastState = this._state;\n this._state = 'stopDrag';\n // if (lastState !== 'dragging') {\n // return;\n // }\n this._state = 'stopDrag';\n this._dragEndHandler?.();\n };\n\n release() {\n if (this._stage) {\n this._stage.removeEventListener('pointermove', this.pointerMove, true);\n this._stage.removeEventListener('pointerup', this.stopDrag, true);\n this._stage = null;\n }\n this._dragHandler = null;\n this._dragEndHandler = null;\n }\n}\n","import type { IStage } from '@visactor/vrender-core';\nimport type { IMatrix, IPointLike } from '@visactor/vutils';\n\nexport function transformDeltaWithStage(\n stage: IStage,\n point: IPointLike,\n subMatrix?: IMatrix\n): { x: number; y: number } {\n const stageMatrix = stage.window.getViewBoxTransform();\n const matrix = stageMatrix\n .clone()\n .multiply(\n subMatrix?.a ?? 1,\n subMatrix?.b ?? 0,\n subMatrix?.c ?? 0,\n subMatrix?.d ?? 1,\n subMatrix?.e ?? 0,\n subMatrix?.f ?? 0\n );\n const p0 = { x: 0, y: 0 };\n const p1 = point;\n\n const out1 = { x: 0, y: 0 };\n const out2 = { x: 0, y: 0 };\n\n matrix.transformPoint(p0, out1);\n matrix.transformPoint(p1, out2);\n return {\n x: out2.x - out1.x,\n y: out2.y - out1.y\n };\n}\n\nexport function transformPointWithStage(\n stage: IStage,\n point: IPointLike,\n subMatrix?: IMatrix\n): { x: number; y: number } {\n const stageMatrix = stage.window.getViewBoxTransform();\n const matrix = stageMatrix\n .clone()\n .multiply(\n subMatrix?.a ?? 1,\n subMatrix?.b ?? 0,\n subMatrix?.c ?? 0,\n subMatrix?.d ?? 1,\n subMatrix?.e ?? 0,\n subMatrix?.f ?? 0\n );\n\n const out = { x: 0, y: 0 };\n matrix.transformPoint(point, out);\n return out;\n}\n","/**\n * @description PopTip组件\n */\nimport type {\n ICircleGraphicAttribute,\n IPathGraphicAttribute,\n IGraphic,\n IGroupGraphicAttribute,\n IRect,\n IRectGraphicAttribute,\n ILineGraphicAttribute,\n IGroup,\n ILine\n} from '@visactor/vrender';\nimport { createLine, createRect } from '@visactor/vrender';\nimport type { IAABBBounds, IAABBBoundsLike, IPointLike } from '@visactor/vutils';\nimport { AABBBounds, abs, Matrix, merge, normalizeAngle, normalizePadding, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '@visactor/vrender-components';\nimport { DRAG_ANCHOR_COLOR, SHAPE_SELECT_COLOR, MinSize } from './constants';\nimport { DragComponent } from './transform-drag';\nimport { transformDeltaWithStage, transformPointWithStage } from '../../utils/transform';\nimport type { IEditSelection, VRenderPointerEvent } from '../../interface';\nimport { min } from '@visactor/vchart/esm/util';\nimport type { ILayoutLine } from '@visactor/vstory-core';\n\nconst i = 0;\n\nconst tempRect = createRect({});\n\ntype AnchorDirection = 'top' | 'bottom' | 'left-top' | 'left-bottom' | 'right' | 'left' | 'right-top' | 'right-bottom';\n\nconst fixedAngles = [0, Math.PI / 2, Math.PI, (Math.PI * 3) / 2, Math.PI * 2];\nconst maxAngleDifference = (3 / 180) * Math.PI; // 10 degrees\n\nexport type ControllerAttributes = {\n padding?: number | [number, number, number, number];\n resizeBorder?: Partial;\n cornerRect?: Partial;\n rotateCircle?: Partial;\n rotatePath?: Partial & { size: number };\n handlerLine?: Partial & { size: number };\n shapeCircle?: Partial;\n move?: boolean;\n rotate?: boolean;\n resize?: boolean;\n reshape?: boolean;\n setCursor?: (c: string) => void;\n shapePoints?: IPointLike[];\n isShapePointAbsolute?: boolean;\n /**\n * 支持的锚点\n */\n enabledAnchors?: AnchorDirection[];\n // minSize\n minWidth?: number;\n minHeight?: number;\n proportionalScaling?: boolean;\n} & IGroupGraphicAttribute;\n\ntype IXYWH = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type IUpdateParams = {\n x: number;\n y: number;\n width: number;\n height: number;\n angle: number;\n anchor: [number | string, number | string];\n // relative position of shape point\n shapePoints: IPointLike[];\n // text\n text?: string | string[];\n};\n\nconst borderAnchors = ['top', 'bottom', 'left', 'right'];\nconst cornerAnchors = ['left-top', 'right-top', 'left-bottom', 'right-bottom'];\n\nconst anchorPositionMap: any = {\n top: [0, 0, 1, 0],\n bottom: [0, 1, 1, 1],\n left: [0, 0, 0, 1],\n right: [1, 0, 1, 1],\n\n 'left-top': [0, 0],\n 'right-top': [1, 0],\n 'left-bottom': [0, 1],\n 'right-bottom': [1, 1]\n};\n\nconst anchorCursorMap: any = {\n 'left-top': 'nwse-resize',\n top: 'ns-resize',\n 'right-top': 'nesw-resize',\n left: 'ew-resize',\n right: 'ew-resize',\n 'left-bottom': 'nesw-resize',\n bottom: 'ns-resize',\n 'right-bottom': 'nwse-resize'\n};\n\nexport interface ITransformController extends IGroup {\n updateBoundsAndAngle: (b: IAABBBoundsLike, angle: number) => void;\n onActive: () => void;\n onUpdate: (cb: (data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false) => void;\n onEditorEnd: (cb: (event?: VRenderPointerEvent) => void) => void;\n onEditorStart: (cb: (event?: VRenderPointerEvent) => void) => void;\n onUnTransStart: (cb: (event: PointerEvent) => void) => void;\n}\n\n// @ts-ignore\nexport class TransformController extends AbstractComponent> implements IGroup {\n type: string = 'transformController';\n name = 'transformController';\n rectB: IAABBBounds;\n isDragging: boolean = false;\n dragOffsetX: number;\n dragOffsetY: number;\n dragStartAngle: number = 0;\n activeGraphic: IGraphic | null;\n horizontalResizble: number;\n verticalResizble: number;\n rotatable: number;\n reshapeState: number;\n rect: IRect;\n editBorder: IRect;\n\n private _snapLineX1: ILine;\n private _snapLineX2: ILine;\n private _snapLineX3: ILine;\n private _snapLineY1: ILine;\n private _snapLineY2: ILine;\n private _snapLineY3: ILine;\n protected _snapThreshold: number = 6;\n\n // snap的时候会修改rect,导致rect不跟手,所以需要一个最真实的bounds\n protected _actualSnapBounds: IAABBBounds | null = null;\n\n // state: {\n // actionMode: EditorActionMode;\n // };\n // 是否正在执行addChildUpdateBoundTag,避免循环调用\n runningAddChildUpdateBoundTag: boolean;\n\n updateCbs: Array<(data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false>;\n endEditCbs: Array<(event?: VRenderPointerEvent) => void>;\n editStartCbs: Array<(event?: VRenderPointerEvent) => void>;\n unTransStartCbs: Array<(event: PointerEvent) => void>;\n\n // isEditor: boolean = false;\n\n _editorConfig: {\n move: boolean;\n rotate: boolean;\n resize: boolean;\n reshape: boolean;\n };\n\n minSize: { width: number; height: number } = { width: MinSize, height: MinSize };\n\n proportionalScaling: boolean = false;\n // 缩放前的属性\n _rectBeforeScale: IRectGraphicAttribute;\n // 缩放前的点击位置,用来进行等比缩放处理缩放比\n _eventPosBeforeScale: any;\n\n _setCursor: (c: string) => void = null;\n\n editSelection: IEditSelection;\n\n // drag\n _dragger: DragComponent;\n private _lastBoxInDrag: IRect;\n\n static defaultAttributes: Partial = {\n // 去掉padding\n // padding: 2,\n resizeBorder: {\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1\n },\n cornerRect: {\n fill: 'white',\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1,\n width: 8,\n height: 8,\n cornerRadius: 2\n },\n rotateCircle: {\n fill: 'white',\n stroke: SHAPE_SELECT_COLOR,\n radius: 10\n },\n rotatePath: {\n fill: '#000000',\n size: 12,\n angle: Math.PI,\n // eslint-disable-next-line\n path: 'M202.403,95.22c0,46.312-33.237,85.002-77.109,93.484v25.663l-69.76-40l69.76-40v23.494 c27.176-7.87,47.109-32.964,47.109-62.642c0-35.962-29.258-65.22-65.22-65.22s-65.22,29.258-65.22,65.22 c0,9.686,2.068,19.001,6.148,27.688l-27.154,12.754c-5.968-12.707-8.994-26.313-8.994-40.441C11.964,42.716,54.68,0,107.184,0 S202.403,42.716,202.403,95.22z'\n },\n handlerLine: {\n stroke: SHAPE_SELECT_COLOR,\n lineWidth: 1,\n size: 24\n },\n shapeCircle: {\n fill: 'white',\n lineWidth: 1,\n radius: 4,\n stroke: DRAG_ANCHOR_COLOR,\n startAngle: 0,\n endAngle: Math.PI * 2\n }\n };\n\n constructor(editSelection: IEditSelection, attributes: Partial) {\n super(merge({ shadowRootIdx: 1 }, TransformController.defaultAttributes, attributes));\n this.editSelection = editSelection;\n this._editorConfig = {\n move: attributes.move !== false,\n rotate: attributes.rotate !== false,\n resize: attributes.resize !== false,\n reshape: attributes.reshape !== false\n };\n // this.state = {\n // actionMode: EditorActionMode.addTool\n // };\n this.rectB = new AABBBounds();\n this.dragOffsetX = 0;\n this.dragOffsetY = 0;\n this.activeGraphic = null;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n this.rotatable = 0;\n this.runningAddChildUpdateBoundTag = false;\n this.minSize.width = attributes.minWidth ?? MinSize;\n this.minSize.height = attributes.minHeight ?? MinSize;\n this.proportionalScaling = attributes.proportionalScaling === true;\n this._setCursor = attributes.setCursor;\n this.rect = createRect({\n fill: 'transparent',\n stroke: false,\n pickable: false\n });\n // this.rect.attachShadow();\n this.editBorder = createRect({\n fill: false,\n stroke: false\n });\n this.editBorder.attachShadow();\n this.add(this.rect);\n this.add(this.editBorder);\n this._createSnapLine();\n this.editStartCbs = [];\n this.unTransStartCbs = [];\n this.updateCbs = [];\n this.endEditCbs = [];\n }\n\n protected _createSnapLine() {\n const commonAttribute = {\n stroke: SHAPE_SELECT_COLOR,\n pickable: false,\n lineWidth: 1,\n strokeOpacity: 0.4,\n visible: false\n };\n this._snapLineX1 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX1);\n this._snapLineX2 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX2);\n this._snapLineX3 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineX3);\n\n this._snapLineY1 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY1);\n this._snapLineY2 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY2);\n this._snapLineY3 = createLine({\n ...commonAttribute\n });\n this.add(this._snapLineY3);\n }\n\n addDrag() {\n if (!this.stage) {\n return;\n }\n this._dragger = new DragComponent(this.stage);\n this._dragger.dragHandler(this._dragElement);\n this._dragger.dragEndHandler(this._dragEnd);\n this._dragger.unDragEndHandler(this._unDragEnd);\n this._lastBoxInDrag = createRect({\n pickable: false,\n stroke: SHAPE_SELECT_COLOR,\n strokeOpacity: 0.4,\n visible: false\n });\n }\n\n protected _dragElement = (moveX: number, moveY: number) => {\n const stage = this.stage;\n if (!stage) {\n return;\n }\n this._lastBoxInDrag.setAttribute('visible', true);\n\n const layer = stage.defaultLayer;\n const p = transformDeltaWithStage(stage, { x: moveX, y: moveY }, layer.globalTransMatrix);\n this.moveBy(p.x, p.y);\n };\n private _dragEnd = () => {\n this._editorEnd();\n };\n private _unDragEnd = () => {\n this._editorEnd();\n };\n\n protected _editorEnd = () => {\n this.endEditCbs?.forEach(cb => cb());\n // this._endHandler(this._editorBox.getTransformAttribute());\n // this._editorBox.isEditor = false;\n // this._snapLineX.setAttributes({ visible: false });\n // this._snapLineY.setAttributes({ visible: false });\n\n // this._snapTargetBoxX.setAttributes({ visible: false });\n // this._snapTargetBoxY.setAttributes({ visible: false });\n\n this._lastBoxInDrag.setAttribute('visible', false);\n // this._opt.editorEvent.setCursorSyncToTriggerLayer();\n };\n\n updateBoundsAndAngle(bounds: IAABBBoundsLike, angle: number) {\n // set bounds\n this.rect.setAttributes({\n x: bounds.x1,\n y: bounds.y1,\n width: bounds.x2 - bounds.x1,\n height: bounds.y2 - bounds.y1\n });\n\n // set anchor\n const x = (this.attribute.x ?? 0) + (bounds.x1 + bounds.x2) / 2;\n const y = (this.attribute.y ?? 0) + (bounds.y1 + bounds.y2) / 2;\n this.setAttributes({ anchor: [x, y], angle });\n }\n\n onActive() {\n this.initEvent();\n }\n\n initEvent() {\n // cursor\n this.editBorder.addEventListener('mousemove', this.handleMouseMove);\n this.addEventListener('pointerout', this.handleMouseOut);\n\n // drag\n // TODO 这里不生效\n this.addEventListener('pointerdown', this.handleDragMouseDown);\n this.addDrag();\n\n this.stage.addEventListener('pointermove', this.handleDragMouseMove);\n this.stage.addEventListener('pointerup', this.handleDragMouseUp);\n }\n\n protected handleMouseMove = (e: any) => {\n if (e.pickParams) {\n const { shadowTarget } = e.pickParams;\n this.setCursor(shadowTarget.attribute.cursor);\n } else {\n this.setCursor();\n }\n };\n\n protected handleMouseOut = (e: any) => {\n this.setCursor();\n };\n\n protected handleDragMouseDown = (e: any) => {\n this.editStartCbs.forEach(cb => cb(e));\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n\n this.dragOffsetX = layerPos.x;\n this.dragOffsetY = layerPos.y;\n\n const { shadowTarget } = e.pickParams || {};\n // 开启move\n if (shadowTarget && this.stage) {\n this.setActiveGraphic(shadowTarget);\n this._rectBeforeScale = { ...this.rect.attribute };\n this._eventPosBeforeScale = layerPos;\n this.isDragging = true;\n this.dragStartAngle = this.attribute.angle ?? 0;\n } else {\n this.unTransStartCbs.forEach(cb => cb(e));\n this._dragger.startDrag(e);\n }\n };\n\n protected handleDragMouseMove = (e: any) => {\n if (!this.isDragging) {\n return;\n }\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n\n const dx = layerPos.x - this.dragOffsetX;\n const dy = layerPos.y - this.dragOffsetY;\n\n if (dx === 0 && dy === 0) {\n return;\n }\n\n if (this.rotatable) {\n this.handleRotate(layerPos);\n this.dispatchUpdate(e);\n } else if (this.reshapeState) {\n this._handleReshape(dx, dy);\n this.dispatchUpdate(e);\n } else {\n this._handleScale(dx, dy, e);\n this.dispatchUpdate(e);\n }\n\n this.dragOffsetX = layerPos.x;\n this.dragOffsetY = layerPos.y;\n };\n\n protected handleDragMouseUp = (e: any) => {\n this._actualSnapBounds = null;\n // 清理snapLine\n [\n this._snapLineX1,\n this._snapLineX2,\n this._snapLineY1,\n this._snapLineY2,\n this._snapLineX3,\n this._snapLineY3\n ].forEach(g => {\n g.setAttributes({ visible: false });\n });\n if (!this.isDragging) {\n return;\n }\n // this._editComponent.isEditing = false;\n this.dragOffsetX = 0;\n this.dragOffsetY = 0;\n this.setActiveGraphic(null);\n this.endEditCbs?.forEach(cb => cb(e));\n // this.isEditor = false;\n this.isDragging = false;\n };\n\n protected setCursor(c?: string) {\n if (this.stage) {\n this.stage.setCursor(c);\n this._setCursor?.(c);\n }\n }\n\n protected setActiveGraphic(g: IGraphic | null) {\n this.activeGraphic = g;\n // 设置resize的方向\n let reset = true;\n if (g && g.name) {\n reset = false;\n const name = g.name;\n const dirList = name.split('-');\n const type = dirList.shift();\n if (type === 'scale') {\n if (dirList.length === 2) {\n this.horizontalResizble = dirList[0] === 'left' ? -1 : 1;\n this.verticalResizble = dirList[1] === 'top' ? -1 : 1;\n } else {\n const dir = dirList[0];\n const h = dir === 'left' || dir === 'right';\n this.horizontalResizble = h ? (dirList[0] === 'left' ? -1 : 1) : 0;\n this.verticalResizble = h ? 0 : dirList[0] === 'top' ? -1 : 1;\n }\n this.rotatable = 0;\n } else if (type === 'rotate') {\n this.rotatable = 1;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n } else if (type === 'reshape') {\n this.reshapeState = Number.parseInt(dirList[0], 10) + 1;\n this.rotatable = 0;\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n } else {\n reset = true;\n }\n }\n if (reset) {\n this.horizontalResizble = 0;\n this.verticalResizble = 0;\n this.rotatable = 0;\n this.reshapeState = 0;\n }\n }\n\n // 非等比缩放\n protected handleScale(dx: number, dy: number) {\n const { anchor, x, y, width, height } = this._getRectWithOffset(dx, dy, this.rect.attribute).attribute;\n if (width < this.minSize.width) {\n return;\n }\n if (height < this.minSize.height) {\n return;\n }\n this._doUpdateRectXYWH(x, y, width, height);\n this.setAttributes({\n anchor: anchor as [number | string, number | string]\n });\n }\n\n // 缩放\n private _handleScale(dx: number, dy: number, e: any) {\n if (this.proportionalScaling) {\n this._handleScaleProportional(dx, dy, e);\n } else {\n this.handleScale(dx, dy);\n }\n }\n\n private transformPoint(point: IPointLike) {\n const stage = this.stage;\n if (!stage) {\n return;\n }\n // this._editComponent.isEditing = true;\n return transformPointWithStage(stage, point, this.layer.globalTransMatrix);\n }\n\n // 等比缩放\n private _handleScaleProportional(dx: number, dy: number, e: any) {\n const layerPos = this.transformPoint(e.offset);\n if (!layerPos) {\n return;\n }\n const { attribute, temp } = this._getRectWithOffset(\n layerPos.x - this._eventPosBeforeScale.x,\n layerPos.y - this._eventPosBeforeScale.y,\n this._rectBeforeScale\n );\n\n const maxScale = Math.max(\n attribute.width / this._rectBeforeScale.width,\n attribute.height / this._rectBeforeScale.height\n );\n const finalWidth = this._rectBeforeScale.width * maxScale;\n const finalHeight = this._rectBeforeScale.height * maxScale;\n if (finalWidth < this.minSize.width) {\n return;\n }\n if (finalHeight < this.minSize.height) {\n return;\n }\n let nextP2 = temp.nextP2;\n const nextP1 = temp.nextP1;\n\n const angle = this.getAngle();\n // console.log('_handleScaleProportional', nextP1, nextP2, angle, this.verticalResizble, this.horizontalResizble);\n\n // v 1 h 1\n // 拖动的右下角 不需要改变\n if (this.verticalResizble > 0 && this.horizontalResizble > 0) {\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // 1 h -1\n // 拖动的左下角 以右上角为基准\n else if (this.verticalResizble > 0 && this.horizontalResizble < 0) {\n const lockPos = {\n // 锁定角位置\n x: nextP1.x + attribute.width * Math.cos(angle),\n y: nextP1.y + attribute.width * Math.sin(angle)\n };\n // final下的 p1 与 p2\n nextP1.x = lockPos.x - finalWidth * Math.cos(angle);\n nextP1.y = lockPos.y - finalWidth * Math.sin(angle);\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // -1 h 1\n // 拖动的右上角 以左下角为基准\n if (this.verticalResizble < 0 && this.horizontalResizble > 0) {\n const lockPos = {\n // 锁定角位置\n x: nextP1.x - attribute.height * Math.sin(angle),\n y: nextP1.y + attribute.height * Math.cos(angle)\n };\n // final下的 p1 与 p2\n (nextP1.x = lockPos.x + finalHeight * Math.sin(angle)), (nextP1.y = lockPos.y - finalHeight * Math.cos(angle));\n nextP2 = this._getRectP2(nextP1, { width: finalWidth, height: finalHeight }, angle);\n }\n // -1 h 1\n // 拖动的左上角 以右下角为基准\n if (this.verticalResizble < 0 && this.horizontalResizble < 0) {\n // p2 锁定 ,计算 p1\n nextP1.x = nextP2.x - Math.cos(angle) * finalWidth + Math.sin(angle) * finalHeight;\n nextP1.y = nextP2.y - Math.sin(angle) * finalWidth - Math.cos(angle) * finalHeight;\n }\n\n const center = {\n x: (nextP1.x + nextP2.x) / 2,\n y: (nextP1.y + nextP2.y) / 2\n };\n this._doUpdateRectXYWH(center.x - finalWidth / 2, center.y - finalHeight / 2, finalWidth, finalHeight);\n this.setAttributes({\n anchor: [center.x, center.y]\n });\n }\n\n private _handleReshape(dx: number, dy: number) {\n const { width, height } = this.rect.attribute;\n const { shapePoints } = this.attribute;\n const angle = this.getAngle();\n const _dx = dx;\n const _dy = dy;\n dx = Math.cos(angle) * _dx + Math.sin(angle) * _dy;\n dy = Math.cos(angle + pi / 2) * _dx + Math.sin(angle + pi / 2) * _dy;\n if (!this.attribute.isShapePointAbsolute) {\n dx /= width;\n dy /= height;\n }\n const nextShapePoints = shapePoints.map((shapePoint, i) => {\n return i + 1 === this.reshapeState ? { x: shapePoint.x + dx, y: shapePoint.y + dy } : shapePoint;\n });\n this.setAttributes({\n shapePoints: nextShapePoints\n });\n }\n\n private _getRectWithOffset(dx: number, dy: number, lastAttribute: IRectGraphicAttribute) {\n // 投影得到旋转前的dx和dy\n const angle = this.getAngle();\n const _dx = dx;\n const _dy = dy;\n dx = Math.cos(angle) * _dx + Math.sin(angle) * _dy;\n dy = Math.cos(angle + pi / 2) * _dx + Math.sin(angle + pi / 2) * _dy;\n\n dx *= this.horizontalResizble;\n dy *= this.verticalResizble;\n\n const { x, y, width, height } = lastAttribute;\n\n const m = this.transMatrix;\n // 原始的x和y位置\n const nextP1 = {\n x: m.a * x + m.c * y + m.e,\n y: m.b * x + m.d * y + m.f\n };\n const nextP2 = {\n x: m.a * (x + width) + m.c * (y + height) + m.e,\n y: m.b * (x + width) + m.d * (y + height) + m.f\n };\n if (this.horizontalResizble < 0) {\n nextP1.x -= Math.cos(angle) * dx;\n nextP1.y -= Math.sin(angle) * dx;\n } else if (this.horizontalResizble > 0) {\n nextP2.x += Math.cos(angle) * dx;\n nextP2.y += Math.sin(angle) * dx;\n }\n\n if (this.verticalResizble < 0) {\n nextP1.x -= Math.cos(angle + pi / 2) * dy;\n nextP1.y -= Math.sin(angle + pi / 2) * dy;\n } else if (this.verticalResizble > 0) {\n nextP2.x += Math.cos(angle + pi / 2) * dy;\n nextP2.y += Math.sin(angle + pi / 2) * dy;\n }\n\n const center = {\n x: (nextP1.x + nextP2.x) / 2,\n y: (nextP1.y + nextP2.y) / 2\n };\n\n const tw = width + dx;\n const th = height + dy;\n\n // 返回属性计算结果+当前计算过程的重要变量\n return {\n attribute: {\n width: tw,\n height: th,\n x: center.x - tw / 2,\n y: center.y - th / 2,\n anchor: [center.x, center.y]\n },\n temp: {\n nextP1,\n nextP2,\n dx,\n dy\n }\n };\n }\n\n private _getRectP2(p1: { x: number; y: number }, size: { width: number; height: number }, angle: number) {\n return {\n x: p1.x + Math.cos(angle) * size.width - Math.sin(angle) * size.height,\n y: p1.y + Math.sin(angle) * size.width + Math.cos(angle) * size.height\n };\n }\n\n protected handleRotate(currentPoint: { x: number; y: number }) {\n const originB = this.rectB;\n const cx = (originB.x1 + originB.x2) / 2;\n const cy = (originB.y1 + originB.y2) / 2;\n\n const vectorDrag = { x: this._eventPosBeforeScale.x - cx, y: this._eventPosBeforeScale.y - cy };\n const vectorCurrent = { x: currentPoint.x - cx, y: currentPoint.y - cy };\n const dot = vectorDrag.x * vectorCurrent.x + vectorDrag.y * vectorCurrent.y;\n const modDrag = Math.sqrt(vectorDrag.x ** 2 + vectorDrag.y ** 2);\n const modCurrent = Math.sqrt(vectorCurrent.x ** 2 + vectorCurrent.y ** 2);\n const cosAngle = dot / (modDrag * modCurrent);\n const cross = vectorDrag.x * vectorCurrent.y - vectorDrag.y * vectorCurrent.x;\n const delta = cross < 0 ? Math.PI * 2 - Math.acos(cosAngle) : Math.acos(cosAngle);\n\n this.setAttributes({\n angle: this.fixAngle(this.dragStartAngle + delta),\n anchor: [cx, cy]\n });\n }\n\n private fixAngle(angle: number) {\n angle = normalizeAngle(angle);\n for (const fixedAngle of fixedAngles) {\n if (angle >= fixedAngle - maxAngleDifference && angle <= fixedAngle + maxAngleDifference) {\n return normalizeAngle(fixedAngle);\n }\n }\n return angle;\n }\n\n getAngle(): number {\n if (!this.attribute.postMatrix) {\n return this.attribute.angle ?? 0;\n }\n const m = this.transMatrix;\n return Math.atan2(m.b, m.a);\n }\n\n protected render() {\n const {\n resizeBorder,\n padding,\n cornerRect,\n rotateCircle,\n rotatePath,\n handlerLine,\n shapeCircle,\n enabledAnchors = ['top', 'bottom', 'left-top', 'left-bottom', 'right', 'left', 'right-top', 'right-bottom'],\n shapePoints = [],\n isShapePointAbsolute\n } = this.attribute as ControllerAttributes;\n\n const root = this.editBorder.shadowRoot;\n if (!root || this.count === 1) {\n return;\n }\n\n const parsedPadding = normalizePadding(padding as any);\n const { x = 0, y = 0, width: w = 0, height: h = 0 } = this.rect.attribute;\n this.rectB.setValue(x, y, x + w, y + h);\n\n const minX = x - parsedPadding[3];\n const minY = y - parsedPadding[0];\n const width = w + parsedPadding[1] + parsedPadding[3];\n const height = h + parsedPadding[0] + parsedPadding[2];\n\n borderAnchors.forEach((anchor, i) => {\n const enableResize = this._editorConfig.resize && enabledAnchors.includes(anchor as AnchorDirection);\n const item = anchorPositionMap[anchor];\n const cursor = enableResize ? anchorCursorMap[anchor] : 'default';\n root.createOrUpdateChild(\n enableResize ? `scale-${anchor}` : `stroke-line-${anchor}`,\n {\n x: minX,\n y: minY,\n points: [\n { x: item[0] * width, y: item[1] * height },\n { x: item[2] * width, y: item[3] * height }\n ],\n pickStrokeBuffer: 2,\n boundsPadding: 1,\n cursor,\n ...resizeBorder\n },\n 'line'\n );\n });\n\n if (this._editorConfig.rotate) {\n // 添加顶部\n root.createOrUpdateChild(\n 'top-handler-line',\n {\n x: minX + width / 2,\n y: minY,\n points: [\n { x: 0, y: 0 },\n { x: 0, y: -handlerLine.size }\n ],\n ...handlerLine\n },\n 'line'\n );\n root.createOrUpdateChild(\n `rotate-all`,\n {\n x: minX + width / 2,\n y: minY - handlerLine.size - rotateCircle.radius,\n cursor: 'grab',\n ...rotateCircle\n },\n 'circle'\n );\n root.createOrUpdateChild(\n `path-rotate`,\n {\n pickable: false,\n x: minX + width / 2 + rotatePath.size / 2,\n y: minY - handlerLine.size + rotatePath.size / 2 - rotateCircle.radius,\n scaleX: rotatePath.size / 200,\n scaleY: rotatePath.size / 200,\n cursor: 'grab',\n dx: 0.5,\n dy: -0.5,\n ...rotatePath\n },\n 'path'\n );\n }\n\n // 添加锚点\n if (this._editorConfig.resize) {\n enabledAnchors.forEach((anchor: string) => {\n if (!cornerAnchors.includes(anchor)) {\n return;\n }\n const item = anchorPositionMap[anchor];\n const cursor = anchorCursorMap[anchor];\n root.createOrUpdateChild(\n `scale-${anchor}`,\n {\n x: minX + item[0] * width - cornerRect.width! / 2,\n y: minY + item[1] * height - cornerRect.height! / 2,\n cursor,\n ...cornerRect\n },\n 'rect'\n );\n });\n }\n\n if (this._editorConfig.reshape) {\n const shapePointsChildren = root.children.filter((child: any) => child.name.startsWith('reshape'));\n if (shapePointsChildren.length !== shapePoints.length) {\n shapePointsChildren.forEach((child: any) => root.removeChild(child));\n }\n shapePoints.forEach((point, i) => {\n root.createOrUpdateChild(\n `reshape-${i}`,\n {\n x: isShapePointAbsolute ? point.x : point.x * w + x,\n y: isShapePointAbsolute ? point.y : point.y * h + y,\n cursor: 'move',\n ...shapeCircle\n },\n 'circle'\n );\n });\n }\n }\n\n moveBy(dx: number, dy: number): this {\n const { x, y, width, height } = this.rect.attribute;\n this._doUpdateRectXYWH(x + dx, y + dy, width, height);\n this.setAttributes({\n anchor: [x + dx + width / 2, y + dy + height / 2]\n });\n this.dispatchUpdate();\n return this;\n }\n\n // moveBy或者scale,导致形状变化,走这里设置\n protected _doUpdateRectXYWH(x: number, y: number, width: number, height: number) {\n // console.log(x, y, width, height);\n const snappedRect = this._checkSnap(x, y, width, height);\n this.rect.setAttributes({\n ...snappedRect\n });\n }\n\n protected _checkSnap(x: number, y: number, width: number, height: number) {\n const { x: _x, y: _y, width: _width, height: _height } = this.rect.attribute;\n // 计算出这次的diff\n const diff = {\n x: x - _x,\n y: y - _y,\n width: width - _width,\n height: height - _height\n };\n const out = { x, y, width, height };\n if (diff.x === 0 && diff.y === 0 && diff.width === 0 && diff.height === 0) {\n return out;\n }\n const { activeCharacter } = this.editSelection;\n if (!activeCharacter) {\n return out;\n }\n // 如果有旋转的情况下resize宽高,那么不做处理直接返回\n const { angle } = this.attribute;\n if (angle && (diff.width || diff.height)) {\n return out;\n }\n const lines = this.editSelection.edit.getLayoutLineInLayer([activeCharacter.id]);\n // 计算出一个实际的bounds,_actualSnapBounds不受吸附影响,永远记录真实拖动的位置\n if (!this._actualSnapBounds) {\n this._actualSnapBounds = new AABBBounds().setValue(x, y, x + width, y + height);\n } else {\n this._actualSnapBounds.x1 += diff.x;\n this._actualSnapBounds.y1 += diff.y;\n this._actualSnapBounds.x2 += diff.x + diff.width;\n this._actualSnapBounds.y2 += diff.y + diff.height;\n }\n\n let actualSnapBounds = this._actualSnapBounds;\n // 有旋转的话,需要计算出旋转后的bounds\n if (angle) {\n tempRect.setAttributes({\n dx: actualSnapBounds.x1,\n dy: actualSnapBounds.y1,\n width,\n height,\n fill: 'transparent',\n angle: angle,\n anchor: [width / 2, height / 2]\n });\n actualSnapBounds = tempRect.AABBBounds.clone();\n tempRect.setAttributes({\n dx: out.x,\n dy: out.y,\n width: out.width,\n height: out.height,\n fill: 'transparent',\n angle: angle,\n anchor: [width / 2, height / 2]\n });\n out.x = tempRect.AABBBounds.x1;\n out.y = tempRect.AABBBounds.y1;\n out.width = tempRect.AABBBounds.width();\n out.height = tempRect.AABBBounds.height();\n\n const _out_backup = { ...out };\n this._snapLineWithAngle(lines, actualSnapBounds, out);\n\n const dx = _out_backup.x - out.x;\n const dy = _out_backup.y - out.y;\n // console.log(dy);\n out.x = x - dx;\n out.y = y - dy;\n out.width = width;\n out.height = height;\n return out;\n }\n\n let _snappedX = false;\n let _snappedY = false;\n const lineX = lines.filter(item => item.orient === 'x');\n const lineY = lines.filter(item => item.orient === 'y');\n _snappedX = this._snapLine('x', lineX, actualSnapBounds, out, diff.width !== 0);\n _snappedY = this._snapLine('y', lineY, actualSnapBounds, out, diff.height !== 0);\n\n // 从吸附到未吸附,将实际的bounds重置回去\n // TODO x和y都分两边,如果有一边已经吸附,那就不生效\n if (!_snappedX) {\n out.x = actualSnapBounds.x1;\n out.width = actualSnapBounds.width();\n }\n // 从吸附到未吸附,将实际的bounds重置回去\n if (!_snappedY) {\n out.y = actualSnapBounds.y1;\n out.height = actualSnapBounds.height();\n }\n // 如果没有吸附,就重置回去\n if (!(_snappedX || _snappedY)) {\n this._actualSnapBounds = null;\n }\n\n return out;\n }\n\n _snapLineWithAngle(lines: ILayoutLine[], bounds: IAABBBounds, out: IXYWH) {\n const lineX = lines.filter(item => item.orient === 'x');\n const lineY = lines.filter(item => item.orient === 'y');\n this._snapLine('x', lineX, bounds, out, false);\n this._snapLine('y', lineY, bounds, out, false);\n return out;\n }\n\n _snapLine(orient: 'x' | 'y', lines: ILayoutLine[], bounds: IAABBBounds, out: IXYWH, resize: boolean): boolean {\n // 重置snapLine\n [\n `_snapLine${orient.toUpperCase()}1`,\n `_snapLine${orient.toUpperCase()}2`,\n `_snapLine${orient.toUpperCase()}3`\n ].forEach(k => {\n (this as any)[k].setAttributes({ visible: false });\n });\n\n const snapLines = lines.filter(item => {\n const d1 = abs(item.value - bounds[`${orient}1`]);\n const d2 = abs(item.value - bounds[`${orient}2`]);\n // 中间的线\n const d3 = abs(item.value - (bounds[`${orient}1`] + bounds[`${orient}2`]) / 2);\n return d1 < this._snapThreshold || d2 < this._snapThreshold || d3 < this._snapThreshold;\n });\n if (!snapLines.length) {\n return false;\n }\n const outBounds = new AABBBounds().setValue(out.x, out.y, out.x + out.width, out.y + out.height);\n const otherOrient = orient === 'x' ? 'y' : 'x';\n snapLines.forEach(line => {\n const d1 = line.value - bounds[`${orient}1`];\n const d2 = line.value - bounds[`${orient}2`];\n // 中间的线\n const d3 = line.value - (bounds[`${orient}1`] + bounds[`${orient}2`]) / 2;\n const otherOrientMin = Math.min(line.start, line.end, outBounds[`${otherOrient}1`], outBounds[`${otherOrient}2`]);\n const otherOrientMax = Math.max(line.start, line.end, outBounds[`${otherOrient}1`], outBounds[`${otherOrient}2`]);\n const d1Obj = { v: d1, absV: abs(d1), idx: '1', d: line.value - outBounds[`${orient}1`] };\n const d2Obj = { v: d2, absV: abs(d2), idx: '2', d: line.value - outBounds[`${orient}2`] };\n const d3Obj = {\n v: d3,\n absV: abs(d3),\n idx: '3',\n d: line.value - (outBounds[`${orient}1`] + outBounds[`${orient}2`]) / 2\n };\n const min = [d1Obj, d2Obj, d3Obj].sort((a, b) => a.absV - b.absV)[0];\n\n if (!resize) {\n outBounds.translate(orient === 'x' ? min.d : 0, orient === 'y' ? min.d : 0);\n } else {\n (outBounds as any)[`${orient}${min.idx}`] = line.value;\n }\n (this as any)[`_snapLine${orient.toUpperCase()}${min.idx}`].setAttributes({\n visible: true,\n angle: -this.attribute.angle,\n anchor: this.attribute.anchor,\n points: [\n { [orient]: line.value, [otherOrient]: otherOrientMin },\n { [orient]: line.value, [otherOrient]: otherOrientMax }\n ] as any\n });\n });\n out.x = outBounds.x1;\n out.y = outBounds.y1;\n out.width = outBounds.width();\n out.height = outBounds.height();\n return true;\n }\n\n dispatchUpdate(e?: any) {\n const out = this.getTransformAttribute();\n this.updateCbs.forEach(cb => {\n const data = cb(out, e);\n if (data) {\n const { x, y, width, height, anchor, angle, shapePoints } = data;\n Number.isFinite(x) && this.rect.setAttribute('x', x);\n Number.isFinite(y) && this.rect.setAttribute('y', y);\n Number.isFinite(width) && this.rect.setAttribute('width', width);\n Number.isFinite(height) && this.rect.setAttribute('height', height);\n anchor && this.setAttribute('anchor', anchor);\n Number.isFinite(angle) && this.setAttribute('angle', angle);\n shapePoints && this.setAttribute('shapePoints', shapePoints);\n }\n });\n }\n\n onUpdate(cb: (data: IUpdateParams, event?: VRenderPointerEvent) => Partial | false) {\n this.updateCbs.push(cb);\n }\n\n onEditorEnd(cb: (event?: VRenderPointerEvent) => void) {\n this.endEditCbs.push(cb);\n }\n onEditorStart(cb: (event?: VRenderPointerEvent) => void) {\n this.editStartCbs.push(cb);\n }\n onUnTransStart(cb: (event: PointerEvent) => void) {\n this.unTransStartCbs.push(cb);\n }\n\n addChildUpdateBoundTag() {\n super.addChildUpdateBoundTag();\n\n // 如果wrap内的内容bounds变化,那就需要重新调用render\n if (this.runningAddChildUpdateBoundTag) {\n return;\n }\n this.runningAddChildUpdateBoundTag = true;\n\n this.render();\n\n this.runningAddChildUpdateBoundTag = false;\n }\n\n getTransformAttribute() {\n const { x, y, width, height } = this.rect.attribute;\n const { angle, anchor, shapePoints } = this.attribute;\n return {\n x,\n y,\n width,\n height,\n angle,\n anchor,\n shapePoints\n };\n }\n\n releaseEvent() {\n this.editBorder.removeEventListener('mousemove', this.handleMouseMove);\n if (this.stage) {\n this.stage.removeEventListener('pointermove', this.handleDragMouseMove);\n this.stage.removeEventListener('pointerup', this.handleDragMouseUp);\n }\n this.removeEventListener('pointerout', this.handleMouseOut);\n this.removeEventListener('pointerdown', this.handleDragMouseDown);\n }\n\n releaseDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.release();\n }\n\n pauseDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.pauseDrag();\n }\n\n resumeDragger() {\n if (!this._dragger) {\n return;\n }\n this._dragger.resumeDrag();\n }\n\n protected _isRelease = false;\n release(): void {\n this._isRelease = true;\n // event\n this.releaseEvent();\n\n this.parent.removeChild(this);\n this.removeAllChild();\n this.editBorder = null;\n this.rect = null;\n this._dragger = null;\n this._snapLineX1 = null;\n this._snapLineY1 = null;\n this._snapLineX2 = null;\n this._snapLineY2 = null;\n this._snapLineX2 = null;\n this._snapLineY2 = null;\n this.editStartCbs = [];\n this.updateCbs = [];\n this.endEditCbs = [];\n this.unTransStartCbs = [];\n super.release();\n }\n}\n","import { AbstractComponent } from '@visactor/vrender-components';\nimport type { IGroup, IGroupGraphicAttribute, IRect, IRectGraphicAttribute } from '@visactor/vrender-core';\nimport { createRect, IGraphic } from '@visactor/vrender-core';\nimport { IAABBBoundsLike, merge } from '@visactor/vutils';\nimport { SHAPE_HOVER_COLOR } from './constants';\nimport type { IEditSelection } from '../../interface';\nimport { VRenderPointerEvent } from '../../interface';\n\ninterface HoverControllerAttribute extends IGroupGraphicAttribute {\n hoverBorder: IRectGraphicAttribute;\n}\n\nexport type IHoverController = IGroup;\n\n// @ts-ignore\nexport class HoverController extends AbstractComponent> implements IGroup {\n hoverBorder: IRect;\n editSelection: IEditSelection;\n\n static defaultAttributes: Partial = {\n hoverBorder: {\n stroke: SHAPE_HOVER_COLOR,\n strokeOpacity: 0.7,\n lineWidth: 2,\n lineDash: [8, 8]\n }\n };\n\n constructor(editSelection: IEditSelection, attributes: Partial) {\n super(merge(HoverController.defaultAttributes, attributes));\n this.editSelection = editSelection;\n this.hoverBorder = createRect({\n visible: false\n });\n this.add(this.hoverBorder);\n }\n\n protected render(): void {\n const { width, height, hoverBorder } = this.attribute;\n this.hoverBorder.setAttributes({\n visible: true,\n x: 0,\n y: 0,\n width,\n height,\n ...hoverBorder\n });\n }\n\n release(): void {\n this.parent.removeChild(this);\n this.removeAllChild();\n this.hoverBorder.release();\n this.hoverBorder = null;\n super.release();\n }\n}\n","import type { IGroup } from '@visactor/vrender-core';\nimport { createGroup, vglobal } from '@visactor/vrender-core';\nimport type { IEditActionInfo, IEditSelection, IEditSelectionInfo } from '../interface';\nimport type { ICharacter } from '@visactor/vstory-core';\nimport { EditActionEnum, EditEditingState } from '../const';\nimport type { Edit } from '../edit';\nimport type { ITransformController, ControllerAttributes, IUpdateParams } from './edit-control/transform-control';\nimport { TransformController } from './edit-control/transform-control';\nimport type { IHoverController } from './edit-control/hover-control';\nimport { HoverController } from './edit-control/hover-control';\n\nexport abstract class BaseSelection implements IEditSelection {\n declare readonly level: number;\n declare readonly type: string;\n readonly supportedCharacterType: string[] = [];\n\n protected _overGraphic: IGroup;\n protected _actionInfo: IEditActionInfo | null;\n protected _activeCharacter: ICharacter | null;\n protected _layoutController: ITransformController | null;\n protected _hoverController: IHoverController | null;\n\n isEditing: boolean = false;\n declare clickCount: number;\n protected readonly dblclickTime: number = 300;\n\n get activeCharacter() {\n return this._activeCharacter;\n }\n\n constructor(public readonly edit: Edit) {\n this._activeCharacter = null;\n this._actionInfo = null;\n this._layoutController = null;\n this._hoverController = null;\n this._initOverGraphic();\n }\n\n checkAction(actionInfo: IEditActionInfo): boolean {\n if (this.isEditing) {\n return this.checkActionWhileEditing(actionInfo);\n }\n return this.checkActionWhileNoEditing(actionInfo);\n }\n checkOver(actionInfo: IEditActionInfo | IEditSelectionInfo) {\n if (!this.isActionInfoSupported(actionInfo)) {\n return;\n }\n if (actionInfo.type === EditActionEnum.pointerOverCharacter) {\n this.activeHoverController(actionInfo.character);\n } else if (actionInfo.type === EditActionEnum.pointerOutCharacter) {\n this.inActiveHoverController();\n }\n }\n startEdit(actionInfo: IEditActionInfo, emitEvent: boolean = false) {\n if (this.isEditing) {\n return;\n }\n this.isEditing = true;\n this._actionInfo = actionInfo;\n if (actionInfo && actionInfo.character) {\n this._activeCharacter = actionInfo.character;\n }\n this.activeLayoutController();\n\n emitEvent &&\n this.edit.emitStartEdit({\n type: this.type,\n actionInfo,\n selection: this\n });\n }\n\n endEdit(emitEvent: boolean = false) {\n if (!this.isEditing) {\n return;\n }\n this.isEditing = false;\n const actionInfo = this._actionInfo;\n this._actionInfo = null;\n this._activeCharacter = null;\n this.inActiveLayoutController();\n\n emitEvent &&\n this.edit.emitEndEdit({\n type: this.type,\n actionInfo,\n selection: this\n });\n }\n protected keyDown = (event: any) => {\n if (!(this._layoutController && event)) {\n return;\n }\n if (event.shiftKey || event.key === 'Shift') {\n this._layoutController.defaultProportionalScaling = this._layoutController.proportionalScaling;\n this._layoutController.proportionalScaling = true;\n }\n };\n protected keyUp = (event: any) => {\n if (!(this._layoutController && event)) {\n return;\n }\n if (event.shiftKey || event.key === 'Shift') {\n this._layoutController.proportionalScaling = this._layoutController.defaultProportionalScaling;\n }\n };\n\n protected activeLayoutController() {\n // 关闭hover的控件\n this.inActiveHoverController();\n\n if (!this._layoutController) {\n this._layoutController = this.createLayoutController();\n }\n if (!this._layoutController) {\n return;\n }\n this.attachController(this._layoutController);\n this._layoutController.onActive();\n this.updateController();\n vglobal.addEventListener('keydown', this.keyDown);\n vglobal.addEventListener('keyup', this.keyUp);\n }\n protected inActiveLayoutController() {\n if (!this._layoutController) {\n return;\n }\n\n this.detachController();\n\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, false);\n vglobal.removeEventListener('keydown', this.keyDown);\n vglobal.removeEventListener('keyup', this.keyUp);\n }\n\n protected activeHoverController(character: ICharacter) {\n if (this.isEditing) {\n return;\n }\n if (!this._hoverController) {\n this._hoverController = this.createHoverController(character);\n }\n this.attachController(this._hoverController);\n }\n\n protected inActiveHoverController() {\n if (!this._hoverController) {\n return;\n }\n\n this.detachController();\n }\n\n protected attachController(layoutController: IGroup) {\n const g = this.edit.getEditGroup();\n if (layoutController.parent === g) {\n throw new Error('【attachController】未知错误,不应该走到这里');\n }\n g.appendChild(layoutController);\n }\n protected detachController() {\n if (this._layoutController) {\n this._layoutController.release();\n this._layoutController = null;\n }\n if (this._hoverController) {\n this._hoverController.release();\n this._hoverController = null;\n }\n }\n protected updateController(): void {\n const actionInfo = this._actionInfo as IEditSelectionInfo;\n const activeCharacter = this._activeCharacter;\n if (!(actionInfo && actionInfo.character && activeCharacter)) {\n return;\n }\n const component = actionInfo.character.graphic;\n const graphic = component.mainGraphic;\n const bounds = graphic.AABBBounds.clone();\n const { angle, x, y } = component.attribute;\n bounds.translate(x, y);\n this._layoutController.updateBoundsAndAngle(bounds, angle);\n return;\n }\n\n protected createLayoutController(): ITransformController | undefined {\n const controller = this._createLayoutController({\n angle: 0,\n enabledAnchors: ['top', 'bottom', 'left', 'right', 'left-bottom', 'left-top', 'right-bottom', 'right-top'],\n minHeight: 10,\n minWidth: 10,\n proportionalScaling: false,\n childrenPickable: true,\n pickable: true,\n move: true,\n rotate: true,\n resize: true,\n setCursor: (c: any) => {\n this.edit.story.canvas.getStage().setCursor(c);\n return;\n }\n });\n\n controller.onEditorStart(() => {\n this.edit.clearOverGraphic();\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, true);\n });\n controller.onEditorEnd(() => {\n this.edit.setEditGlobalState(EditEditingState.continuingEditing, false);\n });\n controller.onUpdate(this.handlerControlChange);\n return controller;\n }\n\n protected createHoverController(character: ICharacter): IHoverController | undefined {\n const bounds = character.graphic.AABBBounds;\n const controller = new HoverController(this, {\n x: bounds.x1,\n y: bounds.y1,\n width: bounds.width(),\n height: bounds.height()\n }) as any;\n return controller;\n }\n\n protected _createLayoutController(attributes: Partial): ITransformController {\n return new TransformController(this, attributes) as any;\n }\n\n protected handlerControlChange = (data: IUpdateParams) => {\n if (this._activeCharacter) {\n this.edit.emit('resize', {\n position: data,\n character: this._activeCharacter\n });\n this._activeCharacter.setConfig({\n position: {\n top: data.y,\n left: data.x,\n width: data.width,\n height: data.height,\n anchor: data.anchor as any,\n angle: data.angle\n }\n });\n }\n return false as const;\n };\n\n protected _initOverGraphic() {\n this._overGraphic = createGroup({ pickable: false, visible: false });\n }\n\n protected isCharacterSupported(character: ICharacter): boolean {\n return this.supportedCharacterType.includes(character.type);\n }\n\n protected isActionInfoSupported(actionInfo: IEditActionInfo): boolean {\n return this.isCharacterSupported(actionInfo.character);\n }\n\n // 编辑状态下处理actionInfo\n protected checkActionWhileEditing(actionInfo: IEditActionInfo): boolean {\n // 取消选择,返回false\n if (actionInfo.type === EditActionEnum.unSelection) {\n this.endEdit();\n return false;\n }\n if (actionInfo.type === EditActionEnum.singleSelection) {\n this.checkDblClickAction(actionInfo);\n // 使用到其他的Selection了,return false\n if (!this.isActionInfoSupported(actionInfo)) {\n this.endEdit();\n return false;\n } else if (actionInfo.character !== this._activeCharacter) {\n // 选中同类型其他元素\n // 先停止当前的\n this.endEdit();\n // 再移动到新元素上去\n this.startEdit(actionInfo);\n return true;\n }\n // 还是是当前元素,return true\n return true;\n }\n return false;\n }\n\n protected checkDblClickAction(actionInfo: IEditActionInfo) {\n if (!this.clickCount) {\n this.clickCount = 1;\n } else {\n this.clickCount++;\n }\n if (this.clickCount > 1) {\n this._checkDblClickAction(actionInfo);\n this.clickCount = 0;\n // 暂时不用clearTimeout,猜测不会点的那么快\n }\n setTimeout(() => {\n this.clickCount = 0;\n }, this.dblclickTime);\n }\n protected _checkDblClickAction(actionInfo: IEditActionInfo) {\n return;\n }\n // 非编辑状态下处理actionInfo\n protected checkActionWhileNoEditing(actionInfo: IEditActionInfo): boolean {\n if (actionInfo.type === EditActionEnum.singleSelection && this.isActionInfoSupported(actionInfo)) {\n this.startEdit(actionInfo);\n return true;\n }\n return false;\n }\n}\n","import { EventEmitter, Point } from '@visactor/vutils';\nimport type { IRichText, RichTextEditPlugin } from '@visactor/vrender';\nimport type { Edit } from '../../edit';\nimport { EditActionEnum } from '../../const';\nimport type { ICharacter } from '@visactor/vstory-core';\nexport class RichTextControl {\n protected _character: ICharacter;\n protected _richText: IRichText;\n protected _edit: Edit;\n\n emitter: EventEmitter = new EventEmitter();\n\n constructor(edit: Edit, character: ICharacter, richText: IRichText) {\n this._character = character;\n this._richText = richText;\n this._edit = edit;\n this._initPlugin();\n }\n\n protected _initPlugin() {\n this._edit.editAction.on(EditActionEnum.richTextPluginEdit, this.onRichTextPluginEdit);\n }\n\n onRichTextPluginEdit = (msg: { type: string; p: RichTextEditPlugin }) => {\n this._edit.emit(EditActionEnum.richTextPluginEdit, { data: msg, character: this._character });\n const { type, p } = msg;\n if (p.currRt !== this._richText) {\n console.warn('current edit richtext not match in richtext-control.onRichTextPluginEdit');\n return;\n }\n if (msg.type === 'change' && this._character) {\n this._character.setConfig({\n options: { text: { text: '', textConfig: [...this._richText.attribute.textConfig] } } as any\n });\n }\n // do noting 富文本编辑消息的处理\n // console.log('onRichTextPluginEdit', type, p);\n };\n\n startEdit() {\n this._richText.setAttributes({ editable: true });\n }\n\n // 聚焦到富文本上\n focus(e: PointerEvent) {\n // 找到plugin\n const stage = this._richText.stage;\n if (!stage) {\n return;\n }\n const plugin = (stage.pluginService.findPluginsByName('RichTextEditPlugin') || [])[0];\n if (!plugin) {\n return;\n }\n (plugin as any).forceFocus && (plugin as any).forceFocus(e);\n }\n\n endEdit() {\n this._richText.setAttributes({ editable: false });\n }\n\n release() {\n this._edit.editAction.off(EditActionEnum.richTextPluginEdit, this.onRichTextPluginEdit);\n }\n}\n","import type { Edit } from './../../edit';\nimport type { IRichText } from '@visactor/vrender-core';\nimport type { IEditActionInfo, IEditSelection } from '../../interface';\nimport { RichTextControl } from '../edit-control/richtext-control';\nimport type { ICharacter } from '@visactor/vstory-core';\n\nexport interface RichTextMixin extends IEditSelection {\n edit: Edit;\n _actionInfo: IEditActionInfo;\n _isSelection: boolean;\n isEditing: boolean;\n mode: 'edit-text' | 'normal';\n}\n\nexport class RichTextMixin {\n _richTextControl: RichTextControl;\n _textClickHandlerTemp: any;\n _hasDrag: boolean = false;\n _pointerdownHandlerTemp: any;\n declare _layoutController: any;\n\n _createRichControl(character: ICharacter, text: IRichText, e: PointerEvent) {\n this._richTextControl = new RichTextControl(this.edit, character, text);\n this._tryStartEdit(e);\n this._pointerdownHandlerTemp = this.handlerPointerDown.bind(this, text);\n text.addEventListener('pointerdown', this._pointerdownHandlerTemp);\n // 暂停拖拽控件\n this._layoutController && this._layoutController.pauseDragger && this._layoutController.pauseDragger();\n }\n\n _releaseRichControl(character: ICharacter, text: IRichText) {\n if (!this._richTextControl) {\n return;\n }\n this._richTextControl.endEdit();\n this._richTextControl.release();\n if (text) {\n text.removeEventListener('pointerdown', this._pointerdownHandlerTemp);\n }\n this._richTextControl = null;\n this._textClickHandlerTemp = null;\n this._layoutController && this._layoutController.resumeDragger && this._layoutController.resumeDragger();\n }\n\n _tryStartEdit(e: PointerEvent) {\n // 必须是点击才行,拖动不行\n if (this._hasDrag) {\n return;\n }\n this.mode = 'edit-text';\n this._richTextControl?.startEdit();\n this._richTextControl?.focus(e);\n }\n\n handlerPointerDown(text: IRichText) {\n const uped = false;\n this._hasDrag = false;\n const count = 0;\n // const handlerMove = (e: PointerEvent) => {\n // console.log('aaaaaaaaaaaaaaaa')\n // // 认为鼠标按下,然后拖动事件触发次数大于2次,就算拖动,就不触发富文本编辑\n // if (!uped && count++ > 2) {\n // this._hasDrag = true;\n // }\n // };\n // text.addEventListener('pointermove', handlerMove);\n // text.stage.once('pointerup', () => {\n // uped = true;\n // text.removeEventListener('pointermove', handlerMove);\n // });\n }\n}\n","import type { IEditActionInfo, IEditSelection } from '../interface';\nimport { BaseSelection } from './base-selection';\nimport type { IRichText } from '@visactor/vrender-core';\nimport { mixin } from '@visactor/vutils';\nimport { RichTextMixin } from './mixin/richtext';\n\nexport interface RichTextSelectionCommon\n extends Pick,\n IEditSelection {}\n\nexport class RichTextSelectionCommon extends BaseSelection implements IEditSelection {\n readonly level = 3;\n readonly type: string;\n readonly editCharacterType: string;\n\n protected _getRichText() {\n // @ts-ignore\n const character = this._actionInfo.character;\n const text = character.graphic.getElementsByName('text')[0] as IRichText;\n return { character, text };\n }\n\n protected _checkDblClickAction(actionInfo: IEditActionInfo): void {\n const { character, text } = this._getRichText();\n // if (!text) {\n // return;\n // }\n this._createRichControl(character, text, actionInfo.event);\n }\n\n endEdit() {\n const { character, text } = this._getRichText();\n // if (!text) {\n // return;\n // }\n this._releaseRichControl(character, text);\n super.endEdit();\n }\n\n endRichTextEdit = () => {\n this._richTextControl?.endEdit();\n };\n}\n\nmixin(RichTextSelectionCommon, RichTextMixin);\n","import { application } from '../../application';\nimport type {\n IRichText,\n IRichTextCharacter,\n IRichTextGraphicAttribute,\n IRichTextParagraphCharacter\n} from '../../interface';\n\n// function getMaxConfigIndexIgnoreLinebreak(textConfig: IRichTextCharacter[]) {\n// let idx = 0;\n// for (let i = 0; i < textConfig.length; i++) {\n// const c = textConfig[i] as IRichTextParagraphCharacter;\n// if (c.text !== '\\n') {\n// idx++;\n// }\n// }\n// return Math.max(idx - 1, 0);\n// }\n\nexport function getDefaultCharacterConfig(attribute: IRichTextGraphicAttribute) {\n const { fill = 'black', stroke = false, fontWeight = 'normal', fontFamily = 'Arial' } = attribute;\n let { fontSize = 12 } = attribute;\n if (!isFinite(fontSize)) {\n fontSize = 12;\n }\n return {\n fill,\n stroke,\n fontSize,\n fontWeight,\n fontFamily\n } as any;\n}\n\n/**\n * 找到cursorIndex所在的textConfig的位置,给出的index就是要插入的准确位置\n * @param textConfig\n * @param cursorIndex\n * @returns\n */\nexport function findConfigIndexByCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n if (cursorIndex < 0) {\n return 0;\n }\n\n // 排序找到对应的元素\n const intCursorIndex = Math.round(cursorIndex);\n let tempCursorIndex = intCursorIndex;\n // 跳过连续换行符中的第一个换行符\n let lineBreak = false;\n let configIdx = 0;\n for (configIdx = 0; configIdx < textConfig.length && tempCursorIndex >= 0; configIdx++) {\n const c = textConfig[configIdx] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n tempCursorIndex -= Number(lineBreak);\n lineBreak = true;\n } else {\n tempCursorIndex--;\n lineBreak = false;\n }\n }\n // 说明过限了\n if (tempCursorIndex >= 0) {\n return textConfig.length;\n }\n configIdx -= 1;\n\n // 如果有换行,一定在换行符左边写\n if (cursorIndex > intCursorIndex && !lineBreak) {\n configIdx += 1;\n }\n return configIdx;\n}\n\n/**\n * 根据configIndex找到cursorIndex的位置,忽略单个换行符,连续换行符的时候只忽略第一个\n * @param textConfig\n * @param configIndex\n * @returns\n */\nexport function findCursorIdxByConfigIndex(textConfig: IRichTextCharacter[], configIndex: number): number {\n let cursorIndex = 0;\n if (configIndex < 0) {\n return -0.1;\n }\n // 仅有一个\\n,那不算\n // 如果有连续的\\n,那就少算一个\n let lastLineBreak = false;\n\n for (let i = 0; i <= configIndex && i < textConfig.length; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text === '\\n') {\n cursorIndex += Number(lastLineBreak);\n lastLineBreak = true;\n } else {\n cursorIndex++;\n lastLineBreak = false;\n }\n }\n cursorIndex = Math.max(cursorIndex - 1, 0);\n\n // 超出区间了直接设置到尾部,configIndex超过区间,cursorIndex不会超过\n if (configIndex > textConfig.length - 1) {\n // 如果最后一行是一个换行符,那么就得是xx.9否则就是xx.1\n if ((textConfig[textConfig.length - 1] as any)?.text === '\\n') {\n return cursorIndex + 0.9;\n }\n return cursorIndex + 0.1;\n }\n\n // 如果是这个configIdx对应到的是单个换行的话,那么算到下一个字符上\n const lineBreak = (textConfig[configIndex] as any)?.text === '\\n';\n if (configIndex >= textConfig.length - 1 && lineBreak) {\n return cursorIndex + 1 - 0.1;\n }\n const singleLineBreak = lineBreak && (textConfig[configIndex - 1] as any)?.text !== '\\n';\n\n // 光标往左放\n cursorIndex -= 0.1;\n\n // 如果是单行,那么这一个换行符没有算字符,光标要往右放\n if (singleLineBreak) {\n cursorIndex += 0.2;\n }\n return cursorIndex;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n composingConfigIdx: number;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n onFocusInList: Array<() => void>;\n onFocusOutList: Array<() => void>;\n focusOutTimer: number;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.composingConfigIdx = -1;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n this.onFocusInList = [];\n this.onFocusOutList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onChangeCbList.push(cb);\n }\n\n onFocusIn(cb: () => void) {\n this.onFocusInList.push(cb);\n }\n\n onFocusOut(cb: () => void) {\n this.onFocusOutList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n // 监听焦点\n textAreaDom.addEventListener('focusin', this.handleFocusIn);\n textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleFocusIn = () => {\n // this.focusOutTimer && clearTimeout(this.focusOutTimer);\n // this.focusOutTimer = 0;\n // this.onFocusInList && this.onFocusInList.forEach(cb => cb());\n };\n handleFocusOut = () => {\n // 暂时注释,会导致非期待情况下的误关闭\n // // 延时触发,避免误关闭\n // this.focusOutTimer = setTimeout(() => {\n // this.onFocusOutList && this.onFocusOutList.forEach(cb => cb());\n // }, 100);\n };\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n this.isComposing = true;\n const { textConfig = [] } = this.currRt.attribute;\n this.composingConfigIdx = this.cursorIndex < 0 ? 0 : findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n if (this.cursorIndex < 0) {\n const config = textConfig[0];\n textConfig.unshift({ ...getDefaultCharacterConfig(this.currRt.attribute), ...config, text: '' });\n } else {\n const configIdx = this.composingConfigIdx;\n const lastConfig = textConfig[configIdx] || textConfig[configIdx - 1];\n textConfig.splice(configIdx, 0, { ...lastConfig, text: '' });\n }\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n\n const text = this.parseCompositionStr(this.composingConfigIdx);\n // 拆分上一次的内容\n // const { textConfig = [] } = this.currRt.attribute;\n // const configIdx = this.composingConfigIdx;\n\n // const lastConfig = textConfig[configIdx];\n // textConfig.splice(configIdx, 1);\n // const text = (lastConfig as any).text;\n // const textList: string[] = text ? Array.from(text.toString()) : [];\n // for (let i = 0; i < textList.length; i++) {\n // textConfig.splice(i + configIdx, 0, { ...lastConfig, isComposing: false, text: textList[i] } as any);\n // }\n // this.currRt.setAttributes({ textConfig });\n // const nextConfigIdx = configIdx + textList.length;\n // this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n this.composingConfigIdx = -1;\n\n this.onChangeCbList.forEach(cb => {\n cb(\n text,\n this.isComposing,\n // TODO 当换行后刚开始输入会有问题,后续看这里具体Cursor变换逻辑\n this.cursorIndex,\n this.currRt\n );\n });\n };\n\n /**\n * 复合输入以及粘贴,都会复制出一大段内容,这时候需要重新处理textConfig和cursorIndex\n * 1. 拆分text到textConfig\n * 2. 计算新的cursorIndex\n * @param configIdx\n */\n parseCompositionStr(configIdx: number) {\n const { textConfig = [] } = this.currRt.attribute;\n\n const lastConfig = textConfig[configIdx];\n textConfig.splice(configIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = text ? Array.from(text.toString()) : [];\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + configIdx, 0, {\n fill: 'black',\n ...lastConfig,\n isComposing: false,\n text: textList[i]\n } as any);\n }\n this.currRt.setAttributes({ textConfig });\n const nextConfigIdx = configIdx + textList.length;\n this.cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n return text;\n }\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n if (ev.inputType === 'historyUndo') {\n return;\n }\n const { textConfig = [], ...rest } = this.currRt.attribute;\n // 删完了,直接返回\n if (ev.type === 'Backspace' && !textConfig.length) {\n return;\n }\n\n let str = (ev as any).data;\n if (!this.isComposing && ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n\n // 处理正反选\n if (this.selectionStartCursorIdx > this.cursorIndex) {\n [this.cursorIndex, this.selectionStartCursorIdx] = [this.selectionStartCursorIdx, this.cursorIndex];\n }\n\n const startIdx = findConfigIndexByCursorIdx(textConfig, this.selectionStartCursorIdx);\n const endIdx = findConfigIndexByCursorIdx(textConfig, this.cursorIndex);\n\n // composing的话会插入一个字符,所以往右加一个\n const lastConfigIdx = this.isComposing ? this.composingConfigIdx : Math.max(startIdx - 1, 0);\n // 算一个默认属性\n let lastConfig: any = textConfig[lastConfigIdx];\n if (!lastConfig) {\n lastConfig = getDefaultCharacterConfig(rest);\n }\n let nextConfig = lastConfig;\n\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx, endIdx - startIdx);\n if (this.isComposing) {\n this.composingConfigIdx = startIdx;\n }\n }\n\n let nextConfigIdx = startIdx;\n\n // 删除键\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx === endIdx) {\n if (startIdx <= 0) {\n return;\n }\n // 删除\n textConfig.splice(startIdx - 1, 1);\n nextConfigIdx = Math.max(startIdx - 1, 0);\n } else {\n // 不插入内容\n }\n } else {\n // 插入\n if (!this.isComposing) {\n nextConfig = { fill: 'black', ...lastConfig, text: '' };\n textConfig.splice(startIdx, 0, nextConfig);\n nextConfigIdx++;\n }\n // 插入\n nextConfig.text = str;\n // 标记isComposing,用来判定是否应该拆分成单个字符\n nextConfig.isComposing = this.isComposing;\n }\n\n this.currRt.setAttributes({ textConfig });\n // 重新计算cursorIdx\n // nextConfigIdx = Math.min(nextConfigIdx, textConfig.length - 1);\n\n let cursorIndex = this.cursorIndex;\n if (str && str.length > 1 && !this.isComposing) {\n // 如果字符长度大于1且不是composing,那说明是粘贴\n // 拆分\n this.parseCompositionStr(nextConfigIdx - 1);\n cursorIndex = this.cursorIndex;\n } else {\n // composing的时候不偏移,只有完整输入后才偏移\n cursorIndex = findCursorIdxByConfigIndex(textConfig, nextConfigIdx);\n if (!this.isComposing) {\n this.cursorIndex = cursorIndex;\n } else {\n this.cursorIndex = this.selectionStartCursorIdx;\n }\n }\n\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, cursorIndex, this.currRt);\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n this.textAreaDom.addEventListener('focusin', this.handleFocusOut);\n this.textAreaDom.addEventListener('focusout', this.handleFocusOut);\n application.global.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n","import type { IAABBBounds, IPointLike } from '@visactor/vutils';\nimport { isObject, isString, max, merge } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport {\n createGroup,\n createLine,\n createRect,\n createRichText,\n createText,\n getRichTextBounds,\n RichText\n} from '../../graphic';\nimport type {\n IGroup,\n ILine,\n IPlugin,\n IPluginService,\n IRect,\n IRichText,\n IRichTextCharacter,\n IRichTextFrame,\n IRichTextIcon,\n IRichTextLine,\n IRichTextParagraph,\n IRichTextParagraphCharacter,\n ITicker,\n ITimeline\n} from '../../interface';\nimport { Animate, DefaultTicker, DefaultTimeline } from '../../animate';\nimport { EditModule, findConfigIndexByCursorIdx, getDefaultCharacterConfig } from './edit-module';\nimport { application } from '../../application';\nimport { getWordStartEndIdx } from '../../graphic/richtext/utils';\n// import { testLetter, testLetter2 } from '../../graphic/richtext/utils';\n\ntype UpdateType = 'input' | 'change' | 'onfocus' | 'defocus' | 'selection' | 'dispatch';\n\nclass Selection {\n selectionStartCursorIdx: number;\n curCursorIdx: number;\n rt: IRichText;\n\n constructor(selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText) {\n this.curCursorIdx = curCursorIdx;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n this.rt = rt;\n }\n\n isEmpty(): boolean {\n return this.selectionStartCursorIdx === this.curCursorIdx;\n }\n\n getSelectionPureText(): string {\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return '';\n }\n const config = this.rt.attribute.textConfig as any;\n const startIdx = findConfigIndexByCursorIdx(config, Math.ceil(minCursorIdx));\n const endIdx = findConfigIndexByCursorIdx(config, Math.floor(maxCursorIdx));\n let str = '';\n for (let i = startIdx; i <= endIdx; i++) {\n str += config[i].text;\n }\n return str;\n }\n\n hasFormat(key: string): boolean {\n return this.getFormat(key) != null;\n }\n\n /**\n * 获取第idx中key的值\n * @param key\n * @param cursorIdx\n */\n _getFormat(key: string, cursorIdx: number) {\n if (!this.rt) {\n return null;\n }\n let idx = Math.round(cursorIdx);\n const config = this.rt.attribute.textConfig as any;\n if (!config.length) {\n return null;\n }\n for (let i = 0; i < config.length; i++) {\n if (config[i].text !== '\\n') {\n idx--;\n if (idx < 0) {\n return config[i][key];\n }\n }\n }\n return config[Math.min(idx, config.length - 1)][key] ?? (this.rt.attribute as any)[key];\n }\n getFormat(key: string): any {\n return this.getAllFormat(key)[0];\n }\n\n getAllFormat(key: string): any {\n const valSet = new Set();\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return [this._getFormat(key, minCursorIdx)];\n }\n for (let i = Math.ceil(minCursorIdx); i <= Math.floor(maxCursorIdx); i++) {\n const val = this._getFormat(key, i);\n val && valSet.add(val);\n }\n return Array.from(valSet.values());\n }\n}\n\nexport const FORMAT_TEXT_COMMAND = 'FORMAT_TEXT_COMMAND';\nexport const FORMAT_ALL_TEXT_COMMAND = 'FORMAT_ALL_TEXT_COMMAND';\nexport const FORMAT_ELEMENT_COMMAND = 'FORMAT_ELEMENT_COMMAND';\nexport class RichTextEditPlugin implements IPlugin {\n name: 'RichTextEditPlugin' = 'RichTextEditPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n // 是否正在编辑\n editing: boolean = false;\n // 是否正在聚焦中\n focusing: boolean = false;\n // 鼠标是否按下,判断是否展示selection\n pointerDown: boolean = false;\n\n // selection组件\n editLine: ILine;\n editBg: IGroup;\n shadowPlaceHolder: IRichText;\n shadowBounds: IRect;\n\n ticker: ITicker;\n timeline: ITimeline;\n\n currRt: IRichText;\n\n // 当前的cursor信息\n // 0.1为第一个字符右侧, -0.1为第一个字符左侧\n // 1.1为第二个字符右侧,0.9为第二个字符左侧\n curCursorIdx: number;\n selectionStartCursorIdx: number;\n startCursorPos?: IPointLike;\n\n editModule: EditModule;\n\n protected commandCbs: Map void>>;\n protected updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;\n\n // 富文本外部有align或者baseline的时候,需要对光标做偏移\n protected declare deltaX: number;\n protected declare deltaY: number;\n\n // static splitText(text: string) {\n // // 😁这种emoji长度算两个,所以得处理一下\n // return Array.from(text);\n // }\n\n static tryUpdateRichtext(richtext: IRichText) {\n const cache = richtext.getFrameCache();\n if (!RichText.AllSingleCharacter(cache)) {\n const tc = RichText.TransformTextConfig2SingleCharacter(richtext.attribute.textConfig);\n // richtext.attribute.textConfig.forEach((item: IRichTextParagraphCharacter) => {\n // const textList = RichTextEditPlugin.splitText(item.text.toString());\n // if (isString(item.text) && textList.length > 1) {\n // // 拆分\n // for (let i = 0; i < textList.length; i++) {\n // const t = textList[i];\n // tc.push({ ...item, text: t });\n // }\n // } else {\n // tc.push(item);\n // }\n // });\n richtext.setAttributes({ textConfig: tc });\n richtext.doUpdateFrameCache(tc);\n }\n }\n\n static CreateSelection(rt: IRichText) {\n if (!rt) {\n return null;\n }\n const { textConfig = [] } = rt.attribute;\n return new Selection(0, textConfig.length - 1, rt);\n }\n\n constructor() {\n this.commandCbs = new Map();\n this.commandCbs.set(FORMAT_TEXT_COMMAND, [this.formatTextCommandCb]);\n this.commandCbs.set(FORMAT_ALL_TEXT_COMMAND, [this.formatAllTextCommandCb]);\n this.updateCbs = [];\n this.timeline = new DefaultTimeline();\n this.ticker = new DefaultTicker([this.timeline]);\n this.deltaX = 0;\n this.deltaY = 0;\n }\n\n formatTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const selectionData = p.getSelection();\n if (!selectionData) {\n return;\n }\n const { selectionStartCursorIdx, curCursorIdx } = selectionData;\n const minCursorIdx = Math.min(selectionStartCursorIdx, curCursorIdx);\n const maxCursorIdx = Math.max(selectionStartCursorIdx, curCursorIdx);\n const minConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, minCursorIdx);\n const maxConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, maxCursorIdx);\n const config = rt.attribute.textConfig.slice(minConfigIdx, maxConfigIdx);\n this._formatTextCommand(payload, config, rt);\n };\n\n formatAllTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const config = rt.attribute.textConfig;\n this._formatTextCommand(payload, config, rt);\n };\n\n _formatTextCommand(payload: string, config: IRichTextCharacter[], rt: IRichText) {\n if (payload === 'bold') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontWeight = 'bold'));\n } else if (payload === 'italic') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontStyle = 'italic'));\n } else if (payload === 'underline') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.underline = true));\n } else if (payload === 'lineThrough') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.lineThrough = true));\n } else if (isObject(payload)) {\n config.forEach((item: IRichTextParagraphCharacter) => merge(item, payload));\n }\n rt.setAttributes(rt.attribute);\n // 重新渲染Selection位置,因为fontSize会影响文字大小\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n this.selectionRangeByCursorIdx(this.selectionStartCursorIdx, this.curCursorIdx, cache);\n // 设置属性的时候,Bounds也要更改\n this.tryShowInputBounds();\n }\n\n dispatchCommand(command: string, payload: any) {\n const cbs = this.commandCbs.get(command);\n cbs && cbs.forEach(cb => cb(payload, this));\n this.updateCbs.forEach(cb => cb('dispatch', this));\n }\n\n registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n cbs.push(cb);\n }\n\n removeCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n cbs.push(cb);\n }\n\n removeUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.editModule = new EditModule();\n // context.stage.on('click', this.handleClick);\n context.stage.on('pointermove', this.handleMove);\n context.stage.on('pointerdown', this.handlePointerDown);\n context.stage.on('pointerup', this.handlePointerUp);\n context.stage.on('pointerleave', this.handlePointerUp);\n context.stage.on('dblclick', this.handleDBLClick);\n application.global.addEventListener('keydown', this.handleKeyDown);\n\n this.editModule.onInput(this.handleInput);\n this.editModule.onChange(this.handleChange);\n this.editModule.onFocusOut(this.handleFocusOut);\n }\n\n copyToClipboard(e: KeyboardEvent): boolean {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'c') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'c')\n ) {\n const selection = this.getSelection();\n const text = selection.getSelectionPureText();\n application.global.copyToClipBoard(text);\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n /**\n * 选中某一个区间,startIdx和endIdx分别是开始结束的光标位置\n * 设置光标为endIdx,设置开始位置为startIdx\n * @param startIdx 开始位置\n * @param endIdx 结束位置\n * @returns\n */\n selectionRange(startIdx: number, endIdx: number) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n // 对startIdx和endIdx约束\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n startIdx = Math.min(Math.max(startIdx, -0.1), totalCursorCount + 0.1);\n endIdx = Math.min(Math.max(endIdx, -0.1), totalCursorCount + 0.1);\n\n this.selectionRangeByCursorIdx(startIdx, endIdx, cache);\n }\n\n selectionRangeByCursorIdx(startCursorIdx: number, endCursorIdx: number, cache: IRichTextFrame) {\n this.curCursorIdx = endCursorIdx;\n this.selectionStartCursorIdx = startCursorIdx;\n const { x, y1, y2 } = this.computedCursorPosByCursorIdx(this.selectionStartCursorIdx, this.currRt);\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this._tryShowSelection(pos, cache);\n }\n\n fullSelection(e: KeyboardEvent) {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'a') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'a')\n ) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n this.selectionRange(-0.1, totalCursorCount + 0.1);\n\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n directKey(e: KeyboardEvent) {\n if (!(e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n return false;\n }\n const cache = this.currRt.getFrameCache();\n if (!cache) {\n return false;\n }\n let x = 0;\n let y = 0;\n if (e.key === 'ArrowUp') {\n y = -1;\n } else if (e.key === 'ArrowDown') {\n y = 1;\n } else if (e.key === 'ArrowLeft') {\n x = -1;\n } else if (e.key === 'ArrowRight') {\n x = 1;\n }\n\n // const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const { lineInfo, columnInfo } = this.getColumnByIndex(cache, Math.round(this.curCursorIdx));\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (x) {\n // 快接近首尾需要特殊处理\n if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 2] &&\n this.curCursorIdx < Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 0.2;\n } else if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 1] &&\n this.curCursorIdx > Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 1 - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx > Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx < Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 1 + 0.2;\n } else {\n this.curCursorIdx += x;\n }\n if (this.curCursorIdx < -0.1) {\n this.curCursorIdx = -0.1;\n } else if (this.curCursorIdx > totalCursorCount + 0.1) {\n this.curCursorIdx = totalCursorCount + 0.1;\n }\n\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this.hideSelection();\n }\n\n if (y) {\n if (y > 0 && lineInfo === cache.lines[cache.lines.length - 1]) {\n return;\n }\n if (y < 0 && lineInfo === cache.lines[0]) {\n return;\n }\n const lineIdx = cache.lines.findIndex(item => item === lineInfo) + y;\n if (lineIdx < 0 || lineIdx >= cache.lines.length) {\n return;\n }\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const posX = pos.x;\n let posY = (pos.y1 + pos.y2) / 2;\n posY += y * lineInfo.height;\n const nextLineInfo = cache.lines[lineIdx];\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(nextLineInfo, { x: posX, y: posY });\n if (!columnInfo) {\n return;\n }\n let cursorIdx = this.getColumnIndex(cache, columnInfo) + delta;\n const data = this.computedCursorPosByCursorIdx(cursorIdx, this.currRt);\n\n if (cursorIdx < -0.1) {\n cursorIdx = -0.1;\n } else if (cursorIdx > totalCursorCount + 0.1) {\n cursorIdx = totalCursorCount + 0.1;\n }\n\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n this.setCursorAndTextArea(data.x, data.y1, data.y2, this.currRt);\n }\n\n return true;\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!(this.currRt && this.editing)) {\n return;\n }\n // 复制到剪贴板\n // cmd/ctl + C\n if (this.copyToClipboard(e)) {\n return;\n }\n // 全选\n // cmd/ctl + A\n if (this.fullSelection(e)) {\n return;\n }\n // 方向键\n // 上、下、左、右\n if (this.directKey(e)) {\n return;\n }\n };\n\n handleInput = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n // 如果文字被删除光了,那么展示一个shadowRoot\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,但并不同步到curIdx,因为这可能是临时的\n // const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n // console.log(this.curCursorIdx, cursorIdx);\n this.hideSelection();\n // this.setCursor(p.x, p.y1, p.y2);\n this.updateCbs.forEach(cb => cb('input', this));\n };\n\n handleChange = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,并同步到editModule\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n const p = this.computedCursorPosByCursorIdx(cursorIdx, rt);\n this.setCursorAndTextArea(p.x, p.y1, p.y2, rt);\n this.hideSelection();\n this.updateCbs.forEach(cb => cb('change', this));\n };\n\n tryShowShadowPlaceholder() {\n if (!this.currRt) {\n return;\n }\n // 删除富文本影子节点\n const shadowRoot = this.currRt.shadowRoot;\n if (shadowRoot) {\n const placeholder = shadowRoot.getElementsByType('richtext')[0];\n placeholder && shadowRoot.removeChild(placeholder);\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const {\n placeholder,\n placeholderColor = 'rgba(0, 0, 0, 0.6)',\n placeholderFontFamily,\n placeholderFontSize\n } = editOptions;\n const shadow = this.currRt.shadowRoot || this.currRt.attachShadow();\n this.shadowPlaceHolder = createRichText({\n ...this.currRt.attribute,\n x: 0,\n y: 0,\n angle: 0,\n _debug_bounds: false,\n textConfig: [\n { text: placeholder, fill: placeholderColor, fontFamily: placeholderFontFamily, fontSize: placeholderFontSize }\n ]\n });\n shadow.add(this.shadowPlaceHolder);\n }\n\n tryShowInputBounds() {\n if (!(this.currRt && this.focusing)) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n const { boundsStrokeWhenInput } = editOptions;\n\n if (!editOptions || !boundsStrokeWhenInput) {\n return;\n }\n const { attribute } = this.currRt;\n const b = this.currRt.AABBBounds;\n let h = b.height();\n if (!attribute.textConfig.length && this.editLine) {\n const { points } = this.editLine.attribute;\n h = points[1].y - points[0].y;\n }\n this.shadowBounds = this.shadowBounds || createRect({});\n this.shadowBounds.setAttributes({\n x: 0,\n y: 0,\n width: b.width(),\n height: h,\n fill: false,\n stroke: boundsStrokeWhenInput,\n lineWidth: 1,\n boundsMode: 'empty',\n zIndex: -1\n });\n const shadow = this.currRt.shadowRoot || this.currRt.attachShadow();\n shadow.add(this.shadowBounds);\n\n this.offsetLineBgAndShadowBounds();\n }\n\n trySyncPlaceholderToTextConfig() {\n if (!this.currRt) {\n return;\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const { placeholder } = editOptions;\n this.currRt.setAttributes({\n textConfig: [\n {\n text: placeholder,\n ...getDefaultCharacterConfig(this.currRt.attribute)\n }\n ]\n });\n }\n\n handleFocusIn = () => {\n throw new Error('不会走到这里 handleFocusIn');\n // this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n\n handleFocusOut = () => {\n throw new Error('不会走到这里 handleFocusOut');\n // console.log('abc')\n // this.editing = false;\n // this.deFocus();\n // this.pointerDown = false;\n // this.triggerRender();\n // this.updateCbs.forEach(cb => cb('defocus', this));\n };\n\n deactivate(context: IPluginService): void {\n // context.stage.off('pointerdown', this.handleClick);\n context.stage.off('pointermove', this.handleMove);\n context.stage.off('pointerdown', this.handlePointerDown);\n context.stage.off('pointerup', this.handlePointerUp);\n context.stage.off('pointerleave', this.handlePointerUp);\n context.stage.off('dblclick', this.handleDBLClick);\n\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleMove = (e: PointerEvent) => {\n if (!this.isRichtext(e)) {\n return;\n }\n this.currRt = e.target as IRichText;\n this.handleEnter(e);\n (e.target as any).once('pointerleave', this.handleLeave);\n\n this.tryShowSelection(e, false);\n };\n\n // 鼠标进入\n handleEnter = (e: PointerEvent) => {\n this.editing = true;\n this.pluginService.stage.setCursor('text');\n };\n\n // 鼠标离开\n handleLeave = (e: PointerEvent) => {\n this.editing = false;\n this.pluginService.stage.setCursor('default');\n };\n\n handlePointerDown = (e: PointerEvent) => {\n if (this.editing) {\n this.onFocus(e);\n } else {\n this.deFocus(true);\n }\n this.triggerRender();\n this.pointerDown = true;\n this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n handlePointerUp = (e: PointerEvent) => {\n this.pointerDown = false;\n };\n handleDBLClick = (e: PointerEvent) => {\n if (!this.editing) {\n return;\n }\n\n this.tryShowSelection(e, true);\n };\n\n onFocus(e: PointerEvent, data?: any) {\n this.deFocus(false);\n this.focusing = true;\n const target = e.target as IRichText;\n if (!(target && target.type === 'richtext')) {\n return;\n }\n this.currRt = target as IRichText;\n\n // 创建shadowGraphic\n\n RichTextEditPlugin.tryUpdateRichtext(target);\n const shadowRoot = target.shadowRoot || target.attachShadow();\n const cache = target.getFrameCache();\n if (!cache) {\n return;\n }\n // 计算全局偏移\n this.computeGlobalDelta(cache);\n\n // 添加cursor节点,shadowRoot在上面\n shadowRoot.setAttributes({ shadowRootIdx: 1, pickable: false, x: this.deltaX, y: this.deltaY });\n if (!this.editLine) {\n const line = createLine({ x: 0, y: 0, lineWidth: 1, stroke: 'black', boundsMode: 'empty' });\n // 不使用stage的Ticker,避免影响其他的动画以及受到其他动画影响\n this.addAnimateToLine(line);\n this.editLine = line;\n this.ticker.start(true);\n\n const g = createGroup({ x: 0, y: 0, width: 0, height: 0, boundsMode: 'empty' });\n this.editBg = g;\n shadowRoot.add(this.editLine);\n shadowRoot.add(this.editBg);\n }\n\n data = data || this.computedCursorPosByEvent(e, cache);\n\n if (data) {\n const { x, y1, y2, cursorIndex } = data;\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = cursorIndex;\n this.selectionStartCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1, y2, target);\n } else {\n const x = 0;\n const y1 = 0;\n const y2 = getRichTextBounds({ ...target.attribute, textConfig: [{ text: 'a' }] }).height();\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = -0.1;\n this.selectionStartCursorIdx = -0.1;\n this.setCursorAndTextArea(x, y1, y2, target);\n }\n\n // 聚焦的时候也判断,这样在最开始就能展示placeholder,否则需要等用户输入\n this.tryShowShadowPlaceholder();\n // 聚焦的时候也判断,这样在最开始就能展示bounds,否则需要等用户输入\n this.tryShowInputBounds();\n // 触发Bounds更新\n this.currRt.addUpdateBoundTag();\n }\n\n // 偏移线和背景,因为文字的baseline可能是middle或者bottom\n protected offsetLineBgAndShadowBounds() {\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n let attr = rt.attribute;\n let b: IAABBBounds;\n if (textBaseline === 'middle' || textBaseline === 'bottom') {\n if (!attr.textConfig.length) {\n attr = { ...attr, textConfig: [{ text: 'a' }] };\n }\n b = getRichTextBounds(attr);\n }\n if (textBaseline === 'middle') {\n dy = -b.height() / 2;\n } else if (textBaseline === 'bottom') {\n dy = -b.height();\n }\n this.editLine && this.editLine.setAttributes({ dy });\n this.editBg && this.editBg.setAttributes({ dy });\n if (this.shadowBounds) {\n this.shadowBounds.setAttributes({ dy });\n }\n }\n\n protected deFocus(trulyDeFocus = false) {\n const target = this.currRt as IRichText;\n if (!target) {\n return;\n }\n if (trulyDeFocus) {\n this.trySyncPlaceholderToTextConfig();\n target.detachShadow();\n }\n const currRt = this.currRt;\n this.currRt = null;\n if (this.editLine) {\n this.editLine.parent && this.editLine.parent.removeChild(this.editLine);\n this.editLine.release();\n this.editLine = null;\n\n this.editBg.parent && this.editBg.parent.removeChild(this.editBg);\n this.editBg.release();\n this.editBg = null;\n }\n\n if (trulyDeFocus) {\n if (this.shadowBounds) {\n this.shadowBounds.parent && this.shadowBounds.parent.removeChild(this.shadowBounds);\n this.shadowBounds.release();\n this.shadowBounds = null;\n }\n if (this.shadowPlaceHolder) {\n this.shadowPlaceHolder.parent && this.shadowPlaceHolder.parent.removeChild(this.shadowPlaceHolder);\n this.shadowPlaceHolder.release();\n this.shadowPlaceHolder = null;\n }\n }\n this.focusing = false;\n\n // 清理textConfig,不让最后有换行符\n const textConfig = currRt.attribute.textConfig;\n let lastConfig = textConfig[textConfig.length - 1];\n let cleared = false;\n while (lastConfig && (lastConfig as any).text === '\\n') {\n textConfig.pop();\n lastConfig = textConfig[textConfig.length - 1];\n cleared = true;\n }\n cleared && currRt.setAttributes({ textConfig });\n }\n\n protected addAnimateToLine(line: ILine) {\n line.animates &&\n line.animates.forEach(animate => {\n animate.stop();\n animate.release();\n });\n const animate = line.animate({\n timeline: this.timeline\n });\n animate.to({ opacity: 1 }, 10, 'linear').wait(700).to({ opacity: 0 }, 10, 'linear').wait(700).loop(Infinity);\n }\n\n // 显示selection\n tryShowSelection(e: PointerEvent, dblclick: boolean) {\n const cache = (e.target as IRichText).getFrameCache();\n if (!(cache && this.editBg && this.startCursorPos)) {\n return;\n }\n\n if (!dblclick) {\n if (this.pointerDown) {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n this.curCursorIdx = currCursorData.cursorIndex;\n this._tryShowSelection(currCursorData, cache);\n }\n } else {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n // const curCursorIdx = currCursorData.cursorIndex;\n const lineInfo = currCursorData.lineInfo;\n const columnIndex = lineInfo.paragraphs.findIndex(item => item === currCursorData.columnInfo);\n if (columnIndex < 0) {\n return;\n }\n const str = lineInfo.paragraphs.reduce((str, item) => {\n return str + item.text;\n }, '');\n\n let idx = 0;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n if (line === lineInfo) {\n break;\n }\n idx += line.paragraphs.length;\n }\n\n const { startIdx, endIdx } = getWordStartEndIdx(str, columnIndex);\n\n this.selectionRange(idx + startIdx - 0.1, idx + endIdx - 0.1);\n }\n }\n\n _tryShowSelection(\n currCursorData: {\n x: any;\n y1: number;\n y2: number;\n },\n cache: IRichTextFrame\n ) {\n let startCursorPos = this.startCursorPos;\n let endCursorPos = {\n x: currCursorData.x,\n y: (currCursorData.y1 + currCursorData.y2) / 2\n };\n let line0Info = this.getLineByPoint(cache, startCursorPos);\n let line1Info = this.getLineByPoint(cache, endCursorPos);\n\n if (\n startCursorPos.y > endCursorPos.y ||\n (startCursorPos.y === endCursorPos.y && startCursorPos.x > endCursorPos.x)\n ) {\n [startCursorPos, endCursorPos] = [endCursorPos, startCursorPos];\n [line1Info, line0Info] = [line0Info, line1Info];\n }\n\n this.hideSelection();\n if (line0Info === line1Info) {\n // 同行\n this.editBg.setAttributes({\n x: startCursorPos.x,\n y: line0Info.top,\n width: endCursorPos.x - startCursorPos.x,\n height: line0Info.height,\n fill: '#336df4',\n fillOpacity: 0.2\n });\n } else {\n this.editBg.setAttributes({ x: 0, y: line0Info.top, width: 0, height: 0 });\n const startIdx = cache.lines.findIndex(item => item === line0Info);\n const endIdx = cache.lines.findIndex(item => item === line1Info);\n let y = 0;\n for (let i = startIdx; i <= endIdx; i++) {\n const line = cache.lines[i];\n if (i === startIdx) {\n const p = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: startCursorPos.x,\n y,\n width: p.left + p.width - startCursorPos.x,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else if (i === endIdx) {\n const p = line.paragraphs[0];\n this.editBg.add(\n createRect({\n x: p.left,\n y,\n width: endCursorPos.x - p.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else {\n const p0 = line.paragraphs[0];\n const p1 = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.left,\n y,\n width: p1.left + p1.width - p0.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n }\n y += line.height;\n }\n }\n\n this.setCursorAndTextArea(currCursorData.x, currCursorData.y1, currCursorData.y2, this.currRt as IRichText);\n\n this.triggerRender();\n this.updateCbs.forEach(cb => cb('selection', this));\n }\n\n hideSelection() {\n if (this.editBg) {\n this.editBg.removeAllChild();\n this.editBg.setAttributes({ fill: 'transparent' });\n }\n }\n\n protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine {\n let lineInfo = cache.lines[0];\n for (let i = 0; i < cache.lines.length; i++) {\n if (lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y) {\n break;\n }\n lineInfo = cache.lines[i + 1];\n }\n\n return lineInfo;\n }\n protected getColumnAndIndexByLinePoint(\n lineInfo: IRichTextLine,\n p1: IPointLike\n ): {\n columnInfo: IRichTextParagraph | IRichTextIcon;\n delta: number;\n } {\n let columnInfo = lineInfo.paragraphs[0];\n let delta = 0;\n if (lineInfo.paragraphs.length) {\n const start = lineInfo.paragraphs[0];\n const end = lineInfo.paragraphs[lineInfo.paragraphs.length - 1];\n if (p1.x <= start.left) {\n delta = -0.1;\n columnInfo = start;\n } else if (p1.x >= end.left + end.width) {\n delta = 0.1;\n columnInfo = end;\n }\n }\n\n if (!delta) {\n for (let i = 0; i < lineInfo.paragraphs.length; i++) {\n columnInfo = lineInfo.paragraphs[i];\n if (columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x) {\n if (p1.x > columnInfo.left + columnInfo.width / 2) {\n delta = 0.1;\n } else {\n delta = -0.1;\n }\n break;\n }\n }\n }\n\n return {\n columnInfo,\n delta\n };\n }\n /* 工具函数 */\n /**\n * 根据给定的ParagraphInfo得到对应的index\n * @param cache 富文本缓存\n * @param cInfo ParagraphInfo\n * @returns\n */\n protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon) {\n // TODO 【注意】认为cache都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n for (let j = 0; j < line.paragraphs.length; j++) {\n inputIndex++;\n if (cInfo === line.paragraphs[j]) {\n return inputIndex;\n }\n }\n }\n return -1;\n }\n\n protected isRichtext(e: PointerEvent) {\n return !!(e.target && (e.target as any).type === 'richtext' && (e.target as any).attribute.editable);\n }\n\n // 如果没有开自动渲染,得触发重绘\n protected triggerRender() {\n this.pluginService.stage.renderNextFrame();\n }\n\n protected computeGlobalDelta(cache: IRichTextFrame) {\n this.deltaX = 0;\n this.deltaY = 0;\n const height = cache.height;\n const actualHeight = cache.actualHeight;\n const width = cache.lines.reduce((w, item) => Math.max(w, item.actualWidth), 0);\n if (cache.globalAlign === 'center') {\n this.deltaX = -width / 2;\n } else if (cache.globalAlign === 'right') {\n this.deltaX = -width;\n }\n if (cache.verticalDirection === 'middle') {\n this.deltaY = height / 2 - actualHeight / 2;\n } else if (cache.verticalDirection === 'bottom') {\n this.deltaY = height - actualHeight;\n }\n }\n\n protected getEventPosition(e: PointerEvent): IPointLike {\n const p = this.pluginService.stage.eventPointTransform(e);\n\n const p1 = { x: 0, y: 0 };\n (e.target as IRichText).globalTransMatrix.transformPoint(p, p1);\n p1.x -= this.deltaX;\n p1.y -= this.deltaY;\n\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n if (textBaseline === 'middle') {\n const b = getRichTextBounds(rt.attribute);\n dy = b.height() / 2;\n } else if (textBaseline === 'bottom') {\n const b = getRichTextBounds(rt.attribute);\n dy = b.height();\n }\n p1.y += dy;\n return p1;\n }\n\n protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n this.addAnimateToLine(this.editLine);\n const out = { x: 0, y: 0 };\n rt.globalTransMatrix.getInverse().transformPoint({ x, y: y1 }, out);\n // TODO 考虑stage变换\n const { left, top } = this.pluginService.stage.window.getBoundingClientRect();\n out.x += left;\n out.y += top;\n\n this.offsetLineBgAndShadowBounds();\n\n this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);\n }\n\n /**\n * 根据Event算出光标位置等信息\n * @param e Event\n * @param cache 富文本缓存\n * @returns\n */\n protected computedCursorPosByEvent(e: PointerEvent, cache: IRichTextFrame) {\n const p1 = this.getEventPosition(e);\n const lineInfo = this.getLineByPoint(cache, p1);\n if (!lineInfo) {\n return;\n }\n\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(lineInfo, p1);\n if (!columnInfo) {\n return;\n }\n\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n\n let cursorIndex = this.getColumnIndex(cache, columnInfo);\n cursorIndex += delta;\n const x = columnInfo.left + (delta > 0 ? columnInfo.width : 0);\n\n return {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n };\n }\n\n /**\n * 根据cursorIdx计算出点的位置\n * @param cursorIdx index\n * @param rt 富文本\n * @returns\n */\n protected computedCursorPosByCursorIdx(cursorIdx: number, rt: IRichText) {\n const idx = Math.round(cursorIdx);\n const leftRight = cursorIdx - idx; // >0 向右,<0 向左\n const cache = rt.getFrameCache();\n const column = this.getColumnByIndex(cache, idx);\n const height = rt.attribute.fontSize ?? (rt.attribute.textConfig?.[0] as any)?.fontSize;\n if (!column) {\n // 检查是不是空文本\n if (!cache.lines.length) {\n const b = getRichTextBounds({ ...rt.attribute, textConfig: [{ text: 'a' }] });\n return {\n x: 0,\n y1: 0,\n y2: b.height()\n };\n }\n return {\n x: 0,\n y1: 0,\n y2: height\n };\n }\n const { lineInfo, columnInfo } = column;\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n const x = columnInfo.left + (leftRight < 0 ? 0 : columnInfo.width);\n\n return { x, y1, y2, lineInfo, columnInfo };\n }\n\n /**\n * 根据index获取columnInfo\n * @param cache 缓存\n * @param index index\n * @returns\n */\n protected getColumnByIndex(\n cache: IRichTextFrame,\n index: number\n ): {\n lineInfo: IRichTextLine;\n columnInfo: IRichTextParagraph | IRichTextIcon;\n } | null {\n // TODO 认为都是单个字符拆分的\n for (let i = 0, inputIndex = 0; i < cache.lines.length; i++) {\n const lineInfo = cache.lines[i];\n for (let j = 0; j < lineInfo.paragraphs.length; j++) {\n const columnInfo = lineInfo.paragraphs[j];\n if (inputIndex === index) {\n return {\n lineInfo,\n columnInfo\n };\n }\n inputIndex++;\n }\n }\n return null;\n }\n\n release() {\n this.deactivate(this.pluginService);\n this.editModule.release();\n }\n\n /**\n * 获取当前选择的区间范围\n * @param defaultAll 如果force为true,又没有选择,则认为选择了所有然后进行匹配,如果为false,则认为什么都没有选择,返回null\n * @returns\n */\n getSelection(defaultAll: boolean = false) {\n if (!this.currRt) {\n return null;\n }\n if (\n this.selectionStartCursorIdx != null &&\n this.curCursorIdx != null\n // this.selectionStartCursorIdx !== this.curCursorIdx &&\n ) {\n return new Selection(this.selectionStartCursorIdx, this.curCursorIdx, this.currRt);\n } else if (defaultAll) {\n return RichTextEditPlugin.CreateSelection(this.currRt);\n }\n return null;\n }\n\n forceFocus(params: { e?: PointerEvent; target: IRichText | null; cursorIndex?: number }) {\n const { target, e, cursorIndex } = params;\n if (!target) {\n return;\n }\n this.currRt = target;\n if (e) {\n this._forceFocusByEvent(e);\n } else {\n this._forceFocusByCursorIndex(cursorIndex ?? -0.1);\n }\n }\n\n protected _forceFocusByEvent(e: PointerEvent) {\n this.handleEnter(e);\n this.handlePointerDown(e);\n this.handlePointerUp(e);\n }\n\n protected _forceFocusByCursorIndex(cursorIndex: number) {\n const richtext = this.currRt;\n if (!richtext) {\n return;\n }\n\n let x = 0;\n let y1 = 0;\n let y2 = 2;\n let lineInfo = null;\n let columnInfo = null;\n const data = this.computedCursorPosByCursorIdx(cursorIndex, richtext);\n x = data.x;\n y1 = data.y1;\n y2 = data.y2;\n lineInfo = data.lineInfo;\n columnInfo = data.columnInfo;\n\n this.onFocus({ target: this.currRt } as any, {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n });\n }\n}\n","import isType from './isType';\n\nconst isRegExp = (value: any): value is RegExp => {\n return isType(value, 'RegExp');\n};\n\nexport default isRegExp;\n","import isArray from './isArray';\nimport isDate from './isDate';\nimport isRegExp from './isRegExp';\n\nfunction getRegExpFlags(re: any) {\n let flags = '';\n re.global && (flags += 'g');\n re.ignoreCase && (flags += 'i');\n re.multiline && (flags += 'm');\n return flags;\n}\n\n// Adapted from https://github.com/pvorb/clone by Paul Vorbach\n// License: https://github.com/pvorb/clone/blob/master/LICENSE\nexport default function clone(parent: any, circular = false, depth = 0, prototype: any = undefined) {\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n const allParents: Array = [];\n const allChildren: Array = [];\n\n if (typeof circular === 'undefined') {\n circular = true;\n }\n\n if (typeof depth === 'undefined') {\n depth = Infinity;\n }\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent: any, depth: number) {\n // cloning null always returns null\n if (parent === null) {\n return null;\n }\n\n if (depth === 0) {\n return parent;\n }\n\n let child;\n if (typeof parent !== 'object') {\n return parent;\n }\n\n if (isArray(parent)) {\n child = [];\n } else if (isRegExp(parent)) {\n child = new RegExp(parent.source, getRegExpFlags(parent));\n if (parent.lastIndex) {\n child.lastIndex = parent.lastIndex;\n }\n } else if (isDate(parent)) {\n child = new Date(parent.getTime());\n } else {\n if (typeof prototype === 'undefined') {\n child = Object.create(Object.getPrototypeOf(parent));\n } else {\n child = Object.create(prototype);\n }\n }\n\n if (circular) {\n const index = allParents.indexOf(parent);\n\n if (index !== -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n for (const i in parent) {\n child[i] = _clone(parent[i], depth - 1);\n }\n\n return child;\n }\n return _clone(parent, depth);\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n () => selector(api.getState()),\n () => selector(api.getInitialState())\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create, useStore };\n","import { StateCreator } from 'zustand';\nimport { SchemaSlice, StoreState } from './types';\n\nexport const createSchemaSlice: StateCreator<\n StoreState,\n [],\n [],\n SchemaSlice\n> = (set) => ({\n schema: {\n structures: [],\n actions: [],\n },\n setSchema: (schema) => set({ schema }),\n});\n","import { StateCreator } from 'zustand';\nimport { CodeSlice, StoreState } from './types';\n\nexport const createCodeSlice: StateCreator = (\n set,\n) => ({\n code: '',\n setCode: (code) => set({ code }),\n});\n","import { create } from 'zustand';\nimport { StoreState } from './types';\nimport { createSchemaSlice } from './createSchema';\nimport { createCodeSlice } from './createCode';\n\nconst useDsv = create()((...a) => {\n return {\n ...createSchemaSlice(...a),\n ...createCodeSlice(...a),\n };\n});\n\nexport { useDsv };\n","import * as VStory from '@visactor/vstory';\nimport { useEffect, useState } from 'react';\nimport { useRef } from 'react';\nimport { FC } from 'react';\nimport { ArrayBar } from 'data-structure';\nimport { Schema } from 'schema';\nimport { useDsv } from './model';\nVStory.registerAll();\n\nexport const Chart: FC = () => {\n const schema = useDsv((state) => state.schema);\n\n const ref = useRef(null);\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n if (schema.actions.length === 0 || schema.structures.length === 0) {\n return;\n }\n const arrayBar = new ArrayBar([...schema.structures[0].array], {\n id: schema.structures[0].id,\n interval: 1000,\n structure: {},\n });\n schema.actions.forEach((action) => {\n if (action.structureId === arrayBar.id) {\n if (action.type === 'set') {\n arrayBar.set(action.args[0], action.args[1]);\n }\n if (action.type === 'swap') {\n arrayBar.swap(action.args[0], action.args[1]);\n }\n if (action.type === 'appear') {\n arrayBar.appear();\n }\n if (action.type === 'reverse') {\n arrayBar.reverse();\n }\n }\n });\n\n // 生成一个DSL,该DSL只包含一个VChart元素\n const dsl = {\n characters: [arrayBar.structure],\n // 图表的具体动画编排\n acts: [\n // 幕数组,一个故事可以包含多个幕,幕与幕之间是有先后顺序的串联结构\n {\n id: 'default-chapter',\n scenes: [\n {\n id: 'scene',\n actions: arrayBar.actions,\n },\n ],\n },\n ],\n };\n\n console.log('debug dsl', dsl);\n\n const story = new VStory.Story(dsl, {\n dom: ref.current,\n background: 'pink',\n });\n const player = new VStory.Player(story);\n story.init(player);\n\n player.play(0);\n\n return () => {\n story?.release();\n };\n }, [schema]);\n\n return (\n <>\n
\n \n );\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { run } from 'parser';\nimport { useDsv } from '../model';\n\nexport const CodeEditor = () => {\n const setSchema = useDsv((state) => state.setSchema);\n\n const [code, setCode] = useState(`Array.prototype.swap = function(i, j){\n const temp = this[i]\n this[i] = this[j]\n this[j] = temp\n}\n\nconst bubbleSort = (arr) => {\n for (let i = 0; i < arr.length; i++) {\n for (let j = 0; j < arr.length - i - 1; j++) {\n if (arr[j] > arr[j + 1]) {\n arr.swap(j, j+1)\n }\n }\n }\n console.log(\"res\", arr)\n return arr;\n}\n\nconst arr1 = [5, 3, 8, 4, 2, 1, 2, 4];\n\nbubbleSort(arr1)\n`);\n\n const handleExec = useCallback(() => {\n const result = run(code);\n setSchema(result.schema);\n }, [code]);\n\n return (\n <>\n setCode(e.target.value)}\n />\n \n \n );\n};\n","import { Chart } from './Chart';\nimport { StructureType } from 'schema';\nimport { CodeEditor } from './CodeEditor/CodeEditor';\n\nfunction App() {\n return (\n \n \n \n \n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App.tsx';\n\nReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(\n \n \n ,\n);\n"],"names":["SOURCELESS_MAPPING","SegmentObject","EMPTY_SOURCES","source","line","column","name","content","ignore","Source","map","sources","MapSource","OriginalSource","traceMappings","tree","gen","GenMapping","rootSources","rootNames","rootMappings","decodedMappings","i","segments","j","segment","genCol","traced","originalPositionFor","maybeAddSegment","setSourceContent","setIgnore","traceSegment","asArray","value","Array","buildSourceMapTree","input","loader","maps","m","TraceMap","Error","build","importer","importerDepth","resolvedSources","sourcesContent","ignoreList","depth","sourceFile","ctx","undefined","sourceMap","SourceMap","JSON","options","out","toDecodedMap","toEncodedMap","opts","COLUMN","SOURCES_INDEX","SOURCE_LINE","SOURCE_COLUMN","NAMES_INDEX","NO_NAME","file","sourceRoot","SetArray","cast","addSegment","genLine","genColumn","sourceLine","sourceColumn","addSegmentInternal","addMapping","mapping","addMappingInternal","maybeAddMapping","put","index","remove","mappings","names","removeEmptyFinalLines","decoded","encode","fromMap","putAll","allMappings","original","seg","generated","skipable","getLine","getColumnIndex","skipSourceless","insert","sourcesIndex","namesIndex","skipSource","current","array","length","len","setarr","prev","schemeRegex","urlRegex","fileRegex","isAbsoluteUrl","isSchemeRelativeUrl","isAbsolutePath","isFileUrl","isRelative","parseAbsoluteUrl","match","makeUrl","parseFileUrl","path","scheme","user","host","port","query","hash","parseUrl","url","stripPathFilename","mergePaths","base","normalizePath","type","rel","pieces","pointer","positive","addTrailingSlash","piece","inputType","baseUrl","baseType","queryHash","set","get","key","indexes","pop","k","comma","semicolon","chars","intToChar","Uint8Array","charToInt","c","decodeInteger","reader","relative","shift","integer","shouldNegate","encodeInteger","builder","num","delta","clamped","hasMoreVlq","max","bufLength","td","TextDecoder","Buffer","buf","String","StringWriter","v","buffer","pos","StringReader","char","idx","EMPTY","decodeOriginalScopes","scopes","stack","last","kind","scope","hasName","fields","vars","varsIndex","encodeOriginalScopes","writer","_encodeOriginalScopes","state","startLine","startColumn","endLine","endColumn","l","decodeGeneratedRanges","ranges","definitionSourcesIndex","definitionScopeIndex","callsiteSourcesIndex","callsiteLine","callsiteColumn","bindingLine","bindingColumn","semi","range","hasDefinition","hasCallsite","hasScope","callsite","bindings","defSourcesIndex","prevLine","sameSource","prevCsi","expressionRanges","expressionsCount","prevBl","expression","encodeGeneratedRanges","_encodeGeneratedRanges","isScope","catchupLine","scopesIndex","callLine","callColumn","binding","bindingStartLine","bindingStartColumn","expRange","lastLine","decode","sorted","lastCol","sort","sortComparator","a","b","resolve","resolveUri","stripFilename","maybeSort","owned","unsortedIndex","nextUnsortedSegmentLine","sortSegments","start","isSorted","found","binarySearch","haystack","needle","low","high","mid","cmp","upperBound","lowerBound","memoizedState","memoizedBinarySearch","lastKey","lastNeedle","lastIndex","buildBySources","memos","buildNullArray","sourceIndex","originalSource","originalLine","memo","AnyMap","mapUrl","parsed","parse","recurse","Infinity","presortedDecodedMap","lineOffset","columnOffset","stopLine","stopColumn","sections","offset","sl","sc","nextOffset","Math","addSection","arguments","sourcesOffset","namesOffset","contents","ignores","append","lineI","cOffset","arr","other","LINE_GTR_ZERO","COL_GTR_EQ_ZERO","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","isString","version","from","s","encodedMappings","traceSegmentInternal","bias","OMapping","generatedPositionFor","generatedPosition","allGeneratedPositionsFor","eachMapping","cb","generatedLine","generatedColumn","originalColumn","sourceContentFor","isIgnored","tracer","clone","decodedMap","encodedMap","GMapping","bsFound","sliceGeneratedPositions","min","matchedColumn","result","REV_GENERATED_LINE","REV_GENERATED_COLUMN","all","isDeepEqual","isDeepStrictEqual","_typeof","o","Symbol","_defineProperties","target","props","descriptor","Object","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","arg","_toPrimitive","hint","prim","res","TypeError","Number","_classCallCheck","instance","_require$codes","_require","require","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","inspect","_require2","_require$types","isPromise","isRegExp","objectAssign","objectIs","RegExpPrototypeTest","lazyLoadComparison","comparison","warned","assert","module","ok","NO_EXCEPTION_SENTINEL","innerFail","obj","fail","actual","expected","message","operator","stackStartFn","internalMessage","argsLen","warn","process","console","errArgs","err","innerOk","fn","argLen","generatedMessage","_len","args","_key","notDeepStrictEqual","equal","notEqual","deepEqual","notDeepEqual","deepStrictEqual","strictEqual","notStrictEqual","Comparison","keys","_this","compareExceptionKey","expectedException","msg","getActual","e","checkIsPromise","waitForActual","promiseFn","Promise","resultPromise","expectsError","error","details","fnType","expectsNoError","internalMatch","string","regexp","fnName","strict","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","doesNotMatch","ownKeys","r","t","_objectSpread","_defineProperty","_inherits","subClass","superClass","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","Reflect","_possibleConstructorReturn","self","call","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","_cache","Map","_isNativeFunction","Wrapper","_construct","Parent","Function","Proxy","Boolean","p","endsWith","str","search","this_len","repeat","count","maxCount","blue","green","red","white","kReadableOperator","kMaxShortLength","copyError","inspectValue","val","createErrDiff","lastPos","end","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","maxLines","_actualLines","printedLines","skippedMsg","cur","expectedLine","actualLine","divergingLines","_Error","_inspect$custom","_super","limit","_res","knownOperators","recurseTimes","util","codes","createErrorType","code","Base","getMessage","arg1","arg2","arg3","NodeError","_Base","oneOf","thing","startsWith","includes","determiner","reason","inspected","RangeError","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","n","arr2","u","f","regexFlagsSupported","arrayFromSet","arrayFromMap","objectGetOwnPropertySymbols","numberIsNaN","uncurryThis","hasOwnProperty","propertyIsEnumerable","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isSet","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","compare","x","y","ONLY_ENUMERABLE","kStrict","kLoose","kNoIterator","kIsArray","kIsSet","kIsMap","areSimilarRegExps","RegExp","areSimilarFloatArrays","areSimilarTypedArrays","areEqualArrayBuffers","buf1","buf2","isEqualBoxedPrimitive","val1","val2","BigInt","innerDeepEqual","val1Tag","keys1","keys2","keyCheck","Date","_keys","_keys2","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","objEquiv","setHasEqualElement","setValues","findLooseMatchingPrimitives","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","item","curB","setEquiv","aValues","Set","bValues","_i","_val","mapHasEqualEntry","key1","item1","key2","mapEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","keysA","exports","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","encodeChunk","uint8","output","extraBytes","parts","maxChunkLength","len2","BrowserslistError","noop","context","jsReleases","agents","e2c","jsEOL","env","parseWithoutCache","YEAR","ANDROID_EVERGREEN_FIRST","OP_MOB_BLINK_FIRST","isVersionsMatch","versionA","versionB","isEolReleased","browserslist","normalize","versions","normalizeElectron","versionToUse","nameMapper","getMajor","parseInt","getMajorVersions","released","number","majorVersions","uniq","minimum","selected","filtered","fillUsage","data","generateFilter","sign","parseFloat","parseLatestFloat","generateSemverFilter","parseSimpleInt","compareSemver","semverFilterLoose","compareSemverLoose","resolveVersion","normalizeVersion","resolved","filterByYear","since","byName","date","cloneData","desktop","normalizeAndroidData","cloned","normalizeAndroidVersions","androidVersions","chromeVersions","iFirstEvergreen","copyObject","copy","android","chrome","checkName","unknownQuery","filterJumps","list","nVersions","jump","isSupported","flags","withPartial","queries","parseQueries","node","QUERIES","filter","prepareOpts","prepareQueries","config","checkQueries","cache","parseCache","needsPath","stats","browser","cacheKey","name1","name2","version1","version2","nodeQuery","matched","sinceQuery","coverQuery","place","coverage","usage","coveraged","browsers","customStats","validVersions","popularity","percentage","features","iMax","checkDesktop","fromToUse","toToUse","to","alias","now","full","interval","release","AND_REGEXP","OR_REGEXP","flatten","find","predicate","matchQuery","matchBlock","qs","block","base64","ieee754","customInspectSymbol","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","encodingOrOffset","allocUnsafe","fromString","ArrayBuffer","fromArrayView","isInstance","SharedArrayBuffer","fromArrayBuffer","valueOf","fromObject","assertSize","size","alloc","fill","encoding","checked","fromArrayLike","arrayView","byteOffset","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","thisStart","thisEnd","thisCopy","targetCopy","isFinite","MAX_ARGUMENTS_LENGTH","codePoints","ret","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","lo","hi","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","mul","defineBigIntMethod","validateNumber","first","boundsError","maxBytes","sub","targetStart","errors","E","sym","addNumericalSeparator","checkBounds","received","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","BufferBigIntNotDefined","bind","$apply","$call","$reflectApply","actualApply","$TypeError","$actualApply","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","setFunctionLength","$defineProperty","callBindBasic","applyBind","originalFunction","func","adjustedLength","agentsData","unpackBrowserVersions","versionsData","entry","map2","decodeBase64","decodeBase64WithBufferFrom","decodeBase64WithNewBuffer","decodeBase64WithAtob","decodeURIComponent","escape","atob","stripComment","sm","readFromFileMap","filename","throwError","Converter","encodeBase64WithBufferFrom","json","encodeBase64WithNewBuffer","encodeBase64WithBtoa","btoa","unescape","encodeURIComponent","makeConverter","space","value1","uri","comment","fontRegex","unitMatch","numeric","parent","dpi","matches","op","generics","existing","collected","existingVal","family","useColors","window","navigator","document","formatArgs","lastC","save","namespaces","load","localstorage","localStorage","formatters","setup","selectColor","namespace","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","debug","curr","ms","format","formatter","logFn","extend","delimiter","newDebug","enable","ns","matchesTemplate","template","searchIndex","templateIndex","starIndex","matchIndex","disable","enabled","skip","coerce","destroy","$SyntaxError","gopd","property","nonEnumerable","nonWritable","nonConfigurable","loose","desc","hasSymbols","toStr","concat","defineDataProperty","isFunction","supportsDescriptors","defineProperty","object","defineProperties","predicates","hasProtoAccessor","gOPD","$Object","$getPrototypeOf","EvalError","SyntaxError","URIError","has","prefix","Events","EE","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","events","handlers","ee","listeners","a1","a2","a3","a4","a5","isCallable","forEachArray","iterator","receiver","forEachString","forEachObject","forEach","thisArg","ERROR_MESSAGE","funcType","concatty","slicy","arrLike","joiny","joiner","that","bound","binder","boundLength","boundArgs","Empty","implementation","GENSYNC_START","GENSYNC_SUSPEND","GENSYNC_EXPECTED_START","GENSYNC_EXPECTED_SUSPEND","GENSYNC_OPTIONS_ERROR","GENSYNC_RACE_NONEMPTY","GENSYNC_ERRBACK_NO_CALLBACK","makeFunctionAPI","genFn","evaluateSync","reject","evaluateAsync","makeError","assertTypeof","allowUndefined","newGenerator","param","arity","sync","async","errback","buildOperation","wrapGenerator","setFunctionMetadata","resume","assertStart","step","didSyncResume","assertSuspend","done","nameDesc","lengthDesc","optsOrFn","items","results","$Error","$EvalError","$RangeError","$ReferenceError","$URIError","abs","floor","pow","round","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","$ObjectGPO","$ReflectGPO","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","BigInt64Array","BigUint64Array","DataView","decodeURI","encodeURI","eval","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isNaN","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","quote","subString","getBaseIntrinsic","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","reflectGetProto","originalGetProto","getDunderProto","O","deinterlace","pixels","width","newPixels","rows","cpRow","toRow","fromRow","fromPixels","offsets","steps","pass","_gif","_interopRequireDefault","_jsBinarySchemaParser","_uint","_deinterlace","_lzw","parseGIF","arrayBuffer","byteData","generatePatch","image","totalPixels","patchData","colorIndex","color","decompressFrame","frame","gct","buildImagePatch","resultImage","decompressFrames","parsedGif","buildImagePatches","lzw","minCodeSize","pixelCount","available","clear","code_mask","code_size","end_of_information","in_code","old_code","data_size","datum","bits","top","pi","bi","MAX_STACK_SIZE","nullCode","npix","dstPixels","suffix","pixelStack","hasPropertyDescriptors","origSymbol","hasSymbolSham","symObj","symVal","_","syms","$hasOwn","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","NaN","rt","ctor","superCtor","TempCtor","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","objectClass","fnClass","genClass","ddaClass","ddaClass2","ddaClass3","isIE68","isDDA","strClass","GeneratorFunction","isFnRegex","safeRegexTest","getGeneratorFunc","generatorFunc","define","getPolyfill","shim","polyfill","isRegexMarker","throwRegexMarker","badStringifier","regexClass","whichTypedArray","stream","schema","partSchema","conditional","conditionFunc","loop","continueFunc","lastStreamPos","newParent","buildStream","uint8Data","readByte","peekByte","readBytes","peekBytes","readString","readUnsigned","readArray","byteSize","totalOrFunc","total","parser","subBitsTotal","startIndex","readBits","_byte","def","subBlocksSchema","terminator","chunks","streamSize","availableSize","gceSchema","imageSchema","textSchema","applicationSchema","commentSchema","_default","nextCode","token","forOwn","callback","destination","fourHexEscape","hex","hexadecimal","lowercase","toString","isArray","isBuffer","isObject","isNumber","isBigInt","singleEscapes","regexSingleEscape","regexDigit","regexWhitespace","escapeEverythingRegex","escapeNonAsciiRegex","jsesc","argument","increaseIndentation","oldIndent","indent","defaults","compact","lowercaseHex","inline1","inline2","newLine","isEmpty","useBinNumbers","useOctNumbers","useDecNumbers","useHexNumbers","regex","pair","lone","quoteChar","second","global","factory","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sourcePrototype","attr","getDescriptor","prop","createProxyFunction","prototype","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audio","rateValue","assetPath","createTypedArray","createRegularArray","createTypedArrayFactory","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","_shouldRoundValues","bmPow","bmSqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","tOfVal","absArr","defaultCurveSegments","degToRads","roundCorner","roundValues","bmRnd","styleDiv","element","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","g","q","RGBtoHSV","addSaturationToRGB","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","_workerSelf","createWorker","blob","Blob","Worker","URL","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","jLen","kLen","maskProps","convertPathsToAbsoluteValues","findCompLayers","completeShapes","completeText","completeChars","assets","findComp","id","comp","checkVersion","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","checkPathProperties","pathData","checkColors","iterateShapes","shapes","checkShapes","completeClosingShapes","completeData","moduleOb","formatResponse","xhr","contentTypeHeader","fullPath","errorCallback","response","XMLHttpRequest","animation","createProcess","onComplete","onError","processId","anim","ImagePreloader","proxyImage","canvas","imageLoaded","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","setInterval","box","clearInterval","createImageData","ob","createImgData","createFootageData","footageData","loadAssets","setPath","setAssetsPath","getAsset","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","eventName","callbacks","markerParser","parsePayloadLines","payload","lines","keysCount","_markers","markers","_marker","markerData","__","ProjectInterface","registerComposition","_thisProjectFunction","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","params","animType","RendererClass","wrapper","wrapperAttributes","autoplay","newLayers","segmentPath","animData","setTimeout","height","_width","_height","markerName","marker","isFrame","numValue","nextValue","_isComplete","init","pendingFrame","forceFlag","isLooping","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","setupAnimation","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","loadAnimation","setSpeed","setDirection","play","nowTime","elapsedTime","pause","goToAndStop","stop","togglePause","searchAnimations","standalone","renderer","animElements","body","div","resize","freeze","unfreeze","setVolume","mute","unmute","BezierFactory","getBezierEasing","beziers","nm","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","mY1","mY2","mSampleValues","intervalStart","currentSample","lastSample","guessForT","dist","initialSlope","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","bezierLengthPool","segmentsLengthPool","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","closed","pathV","pathO","pathI","lengths","totalLength","BezierData","PointData","partial","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","percents","initPos","lengthPos","lPerc","getPointInSegment","percent","t1","u1","bezierSegmentPoints","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","outX","outY","inX","inY","keyValue","offsetTime","newValue","iterationIndex","keyData","nextKeyData","keyframeMetadata","nextKeyTime","keyTime","ind","fnc","endValue","segmentPerc","distanceInLine","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","ax","ay","az","aw","bx","by","bz","bw","quat","qx","qy","qz","qw","heading","attitude","bank","values","c1","c2","c3","s1","s2","s3","w","getValueAtCurrentTime","endTime","renderResult","setVValue","multipliedValue","processEffectsSequence","finalValue","addEffect","effectFunction","ValueProperty","elem","mult","container","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","ti","arrLen","PropertyFactory","DynamicPropertyContainer","pointPool","ShapePath","replace","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePool","shape","shapePath","ShapeCollection","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","kf","keyPropS","isHold","keyPropE","vertexValue","interpolateShapeCurrentTime","lastFrame","resetShape","shapesEqual","shape1","shape2","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","v0","v1","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","_rnd","reset","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","sy","skew","skewFromAxis","scale","sz","setTransform","translate","tx","ty","tz","transform","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","queryString","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","shapeLength","totalModifierLength","segmentOb","shapeS","shapeSegments","pathsData","_isFirstFrame","_s","shapePaths","totalShapeLength","localShapeCollection","edges","shapeE","newShapesData","lastShapeInCollection","lastShape","newPaths","newShape","shapeSegment","currentLengthData","segmentCount","segmentLength","amount","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","_mdf","processKeys","forceRender","frameRate","v2","px","py","precalculateMatrix","autoOrient","addDynamicProperty","TransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","splitData","split","boxIntersect","intersectsImpl","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","ZigZagModifier","setPoint","outputBezier","direction","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","radius","tan","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","left","right","flex","OffsetPathModifier","getFontProperties","fontData","styles","fWeight","fStyle","pMatrix","rMatrix","sMatrix","inv","scaleX","scaleY","elemsData","elements","newElements","renderFlag","hasReloaded","itemsTransform","cont","copies","group","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","currentV","currentI","currentO","closerV","distance","newPosPerc","rd","denom","tcusp","square","root","p10","p11","p20","p21","bounds","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","maxWaitingTime","emptyChar","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","parentNode","checkLoadedFonts","loadedCount","createHelper","helper","engine","fontProps","tHelper","tCanvasHelper","OffscreenCanvas","text","addFonts","defs","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","addChars","getCharData","_char","style","measureText","_char2","fontName","doubleSize","singleSize","getFontByName","getCodePoint","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","fontPrototype","SlotManager","slotFactory","RenderableElement","component","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","effects","GroupEffect","BaseElement","FrameElement","FootageElement","globalData","AudioElement","BaseRenderer","eff","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","effectsInterface","blendModeValue","isVisible","FootageInterface","timeRemapped","totalVolume","volumeValue","layer","pInterface","parentName","hierarchy","pathValue","fontsContainer","effectTypes","TransformElement","MaskElement","properties","currentMasks","layerId","maskType","maskRef","rect","filterID","expansor","feMorph","mask","finalMat","localMat","lmat","localOp","transformEffects","ptNew","transforms","isFirstFrame","pathNodes","viewData","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","registeredEffects$1","idPrefix","SVGEffects","filterManager","registerEffect$1","effect","countsAsEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","ProcessedElement","position","IShapeElement","layerElementParent","gg","cp","clipId","cpGroup","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","SVGStyleData","DashProperty","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","SVGGradientFillStyleData","SVGGradientStrokeStyleData","ShapeGroupData","SVGTransformData","mProps","diff","pathElement","gradientId","gfill","stops","maskElement","opacityId","maskId","opFill","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","paths","iterations","lLen","lvl","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","LetterProps","sw","fc","TextProperty","tempShapes","areAnimated","elementData","transformProperty","ownTransformers","itemsData","prevViewData","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","animatedContent","updated","_finalValue","currentValue","currentIndex","textKeys","charactersArray","shouldCombine","shouldCombineNext","currentChars","fontManager","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidths","lineWidth","maxLineWidth","trackingOffset","newLineFlag","currentHeight","finalText","boxWidth","boxHeight","lastSpaceIndex","uncollapsedSpaces","currentChar","animators","animatorData","based","letterData","newInd","currentInd","newData","dData","_canResize","_fontValue","TextSelectorProp","TextSelectorPropFactory","easer","tot","smoothness","threshold","newCharsFlag","divisor","TextAnimatorDataProperty","animatorProps","defaultData","getProp","textAnimatorAnimatables","TextAnimatorProperty","textData","renderType","ITextElement","lettersChangedFlag","animatorSelector","letterValue","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","alignment","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","partialLength","yOff","firstLine","initPathPos","initSegmentInd","initPointInd","letterM","letterP","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","shapeStr","_fontSize","lineNumber","colorData","emptyShapeData","SVGTextLottieElement","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","SVGRenderer","animationItem","ariaLabel","titleElement","titleId","descElement","descId","ShapeTransformManager","textArray","textContents","currentTextContent","shapeItem","usesGlyphs","singleShape","cachedSpansLength","tSpan","childSpan","glyphElement","glyph","tElement","justify","textContent","textBox","renderedLetter","textSpan","renderedLetters","elementIndex","matteMask","matteElement","nextElement","newElement","sequence","lumaLoader","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","createCanvas","assetLoader","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","operationsMap","CVShapeData","transformsManager","styledShape","CVShapeElement","CVTextElement","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","CVContextData","canvasContext","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","HTextElement","HCameraElement","HImageElement","HybridRendererBase","HCompElement","HybridRenderer","bufferCanvas","bufferCanvas2","bufferCtx","forceRealStack","shouldRender","ownTransforms","parentTransform","groupTransform","nodes","currentStyle","isMain","shapeNodes","groupTransformMat","grd","opacity","commands","pathArr","hasFill","hasStroke","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","rule","actionFlag","containerStyle","origin","elementWidth","elementHeight","elementRel","animationRel","fillType","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","trProps","currentOpacity","transformedElementStyle","matrixValue","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","b2ac","widthProperty","kfw","tempBoundingBox","changed","shapeStyle","shapeTransform","innerElemStyle","textColor","tCont","tParent","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","textPath","translation","margin","svgTransform","perspectiveStyle","perspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","newDOMElement","nextDOMElement","nextLayer","tmpDOMElement","perspectiveElem","threeDContainerData","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_thisLayerFunction","_typeof$2","seedRandom","nodecrypto","digits","rngname","startdenom","significance","overflow","seedrandom","seed","shortseed","mixkey","tostring","autoseed","arc4","ARC4","prng","is_math_call","keylen","me","typ","smear","stringseed","plugins","initialize$2","propTypes","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","resetFrame","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","add","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value2","_tMin","random","rnd","rndm","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","noOp","_value","$bm_transform","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","valueAtTime","velocityAtTime","scoped_bm_rt","time","velocity","textIndex","textTotal","selectorValue","needsVelocity","_needsRandom","elemType","thisProperty","inPoint","outPoint","expression_function","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","duration","loopOutDuration","lookAt","elem1","elem2","fVec","pitch","easeOut","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fr","fps","timeToFrames","randSeed","sourceRectAtTime","substring","substr","posterizeTime","framesPerSecond","hasParent","executeExpression","Expressions","initExpressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","MaskManagerInterface","MaskInterface","maskManager","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_px","_py","_pz","_transformFactory","_thisFunction","getMatrix","toWorldMat","propMatrix","transformMat","toWorldVec","fromWorldVec","applyPoint","invertPoint","sampleImage","_registerMaskInterface","_registerEffectsInterface","transformInterface","anchorPointDescriptor","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","propertyGroup","createGroupInterface","groupInterface","effectElements","_propertyGroup","createValueInterface","expressionProperty","effectsData","ShapePathInterface","view","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","_dashPropertyGroup","dashOb","addPropertyToDashOb","_interfaceFunction","parentGroupWrapper","_sourceText","stringValue","outlineInterfaceFactory","currentPropertyName","currentProperty","searchProperty","propertyNameIndex","dataInterfaceFactory","getInterface","expressionHelpers","speed","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","currentFrame","keyframes","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","endFrame","sampleFrequency","getTransformValueAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","getTransformProperty","propertyGetProp","getShapeValueAtTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","accumulatedLength","initIndex","endIndex","vectorType","xLength","yLength","magnitude","propertyGetShapeProp","trims","initialize$1","addDecorator","searchExpressions","isKeyframed","hasExpressions","initialize","SVGComposableEffect","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","SVGFillFilter","SVGStrokeEffect","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","SVGDropShadowEffect","globalFilterSize","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","dasharrayValue","lineLength","color1","color2","color3","tableR","tableG","tableB","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","effectsManager","symbolId","nextChild","children","useElem","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","mL","trim","allowStale","mA","lC","hit","thisp","walker","forEachStep","next","isStale","maxAge","del","Entry","expiresAt","lc","doUse","$isNaN","fmtShort","msAbs","fmtLong","plural","isPlural","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","isArguments","theKeys","skipProto","skipConstructor","slice","origKeys","originalKeys","objectKeys","$push","$propIsEnumerable","originalGetSymbols","source1","getSymbols","nextKey","propValue","lacksProperEnumerationOrder","assignHasPendingExceptions","thrower","assertPath","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","_format","sep","pathObject","posix","cwd","resolvedPath","resolvedAbsolute","isAbsolute","trailingSeparator","joined","fromStart","fromEnd","fromLen","toStart","toLen","toEnd","lastCommonSep","fromCode","hasRoot","matchedSlash","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","create","cachedSetTimeout","cachedClearTimeout","currentQueue","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","clearTimeout","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","Item","xe","zj","Aj","Bj","Cj","Vk","aa","ca","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","MSApp","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","gc","hc","ic","jc","kc","mc","oc","nc","pc","qc","rc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","jd","kd","ld","md","nd","od","pd","qd","wd","xd","yd","sd","ud","vd","Ad","zd","Bd","Dd","Fd","Hd","Jd","Ld","Md","Nd","Od","Pd","Rd","Td","Vd","Xd","Zd","$d","ae","be","ce","de","fe","ge","he","ie","je","ke","le","ne","oe","pe","qe","re","se","te","ue","ve","we","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","D","of","pf","qf","rf","sf","J","F","tf","uf","vf","wf","$a","na","xa","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","queueMicrotask","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","G","Vf","H","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","K","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","L","Ch","Dh","Eh","Fh","Gh","Hh","M","N","Ih","Jh","Kh","Lh","P","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","ci","Q","di","ei","fi","gi","ii","ji","ki","li","mi","ni","oi","qi","ri","si","ui","vi","wi","xi","yi","zi","Ai","R","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","Dj","S","Ej","Fj","T","Gj","Hj","Ij","Jj","U","Kj","V","Lj","W","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","X","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Wk","Xk","Yk","$k","Zk","al","bl","cl","dl","el","fl","gl","hl","il","jl","kl","reportError","ll","ml","nl","ol","pl","ql","rl","tl","ul","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","checkDCE","isRegex","performance","setImmediate","MessageChannel","SemVer","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","safeRe","tok","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRe","tildeTrimReplace","caretTrimReplace","comparatorTrimReplace","er","valid","clean","inc","identifier","eq","defaultResult","compareIdentifiers","anum","bnum","rcompareIdentifiers","major","minor","patch","compareLoose","compareBuild","rcompare","rsort","gt","lt","neq","gte","lte","Comparator","ANY","Range","isSatisfiable","comparators","remainingComparators","testComparator","otherComparator","toComparators","parseComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","xp","anyX","hyphenReplace","$0","fM","fm","fp","fpr","tM","tm","tp","tpr","testSet","allowed","satisfies","maxSatisfying","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","comparator","compver","validRange","ltr","outside","gtr","hilo","gtfn","ltefn","ltfn","ecomp","prerelease","intersects","r1","r2","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","hr","compRe","thisComparators","rangeComparators","thisComparator","rangeComparator","hasDescriptors","$floor","functionLengthIsConfigurable","functionLengthIsWritable","simplify","simplifyFeature","feat","geom","simplifyFeatureCollection","geojson","dontClone","coordinates","Line","simplifyGeometry","dmax","results_one","results_two","slope","y_intercept","isArgumentsObject","isGeneratorFunction","isTypedArray","BigIntSupported","SymbolSupported","ObjectToString","numberValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isDataView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isMapToString","isSetToString","isWeakMapToString","isWeakMap","isWeakSetToString","isWeakSet","isArrayBufferToString","isArrayBuffer","isDataViewToString","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","method","getOwnPropertyDescriptors","descriptors","formatRegExp","objects","isNull","debugs","debugEnvRegex","debugEnv","stylizeNoColor","isBoolean","isUndefined","stylizeWithColor","formatValue","styleType","arrayToHash","primitive","formatPrimitive","visibleKeys","isError","formatError","braces","formatArray","formatProperty","reduceToSingleString","simple","numLinesEst","ar","isNullOrUndefined","isSymbol","isPrimitive","pad","pid","months","timestamp","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","callbackify","callbackified","maybeCb","rej","promiseResolve","promiseReject","promise","availableTypedArrays","globalThis","typedArrays","$slice","getPrototypeOf","typedArray","tryTypedArrays","getter","trySlices","tag","inserted","Node","push","unshift","head","tail","initial","acc","deleteCount","tokenize","isColorSupported","FORCE_COLOR","picocolors","compose","buildDefs","colors","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","magenta","gray","invalid","bgRed","bold","gutter","defsOn","createColors","defsOff","getDefs","sometimesKeywords","NEWLINE","BRACKET","JSX_TAG","getTokenType","isKeyword","isStrictReservedWord","test","toLowerCase","jsTokens","default","exec","matchToToken","highlight","highlighted","join","deprecationWarningShown","getMarkerLines","loc","startLoc","assign","endLoc","linesAbove","linesBelow","lineDiff","markerLines","sourceLength","codeFrameColumns","rawLines","shouldHighlight","forceColor","highlightCode","hasColumns","numberMaxWidth","highlightedLines","paddedNumber","hasMarker","lastMarkerLine","markerLine","markerSpacing","numberOfMarkers","colNumber","emitWarning","deprecationError","_gensync","_async","_util","synchronize","gensync","genTrue","makeWeakCache","handler","makeCachedFunction","makeWeakCacheSync","makeStrongCache","makeStrongCacheSync","CallCache","callCacheSync","callCacheAsync","futureCache","finishLock","asyncContext","isAsync","callCache","cached","getCachedValueOrWait","CacheConfigurator","handlerResult","isIterableIterator","onFirstPause","setupAsyncLocks","updateFunctionCache","delete","getCachedValue","cachedValue","waitFor","Lock","configured","forever","deactivate","validator","makeSimpleConfigurator","_never","_forever","_invalidate","_active","_configured","never","using","_data","maybeAsync","isThenable","then","_pairs","invalidate","pairs","constructor","cacheFn","assertSimpleType","_resolve","_path","_debug","_options","_patternToRegex","_printer","_rewriteStackTrace","_configError","_index","_caching","_configDescriptors","buildDebug","buildPresetChain","chain","buildPresetChainWalker","dedupDescriptors","presets","normalizeOptions","files","makeChainWalker","preset","loadPresetDescriptors","envName","loadPresetEnvDescriptors","overrides","loadPresetOverridesDescriptors","overridesEnv","loadPresetOverridesEnvDescriptors","createLogger","buildRootDescriptors","createUncachedDescriptors","buildEnvDescriptors","buildOverrideDescriptors","buildOverrideEnvDescriptors","buildRootChain","configReport","babelRcReport","configFile","ignoreFile","babelrcFile","programmaticLogger","ConfigPrinter","programmaticChain","loadProgrammaticChain","dirname","programmaticReport","loadConfig","caller","findRootConfig","babelrc","babelrcRoots","babelrcRootsDirectory","configFileChain","emptyChain","configFileLogger","validatedFile","validateConfigFile","loadFileChain","mergeChain","fileChain","pkgData","findPackageData","babelrcLoadEnabled","findRelativeConfig","filepath","shouldIgnore","validateBabelrcFile","babelrcLogger","showConfig","log","fileHandling","absoluteRoot","directories","babelrcPatterns","pat","some","pathPatternToRegex","directory","matchPattern","validate","validateExtendFile","createCachedDescriptors","baseLogger","buildProgrammaticLogger","loadFileChainWalker","loadFileDescriptors","loadFileEnvDescriptors","loadFileOverridesDescriptors","loadFileOverridesEnvDescriptors","buildFileLogger","configure","ChainFormatter","Config","_context$caller","Programmatic","callerName","_options$env","_options$overrides","_options$overrides2","_override$env","override","flattenedConfigs","rootOpts","configIsApplicable","envOpts","overrideOps","overrideEnvOpts","only","logger","mergeExtendsChain","mergeChainOpts","extends","passPerPreset","include","exclude","sourceMaps","fnKey","nameMap","ownPass","reduce","configName","configFieldIsApplicable","matchesPatterns","ignoreListReplacer","_context$filename","_context$filename2","stringify","patterns","pattern","pathToTest","endHiddenCallStack","ConfigError","_functional","_item","_resolveTargets","isEqualDescriptor","_a$file","_b$file","_a$file2","_b$file2","request","handlerOf","optionsWithResolvedBrowserslistConfigFile","browserslistConfigFile","resolveBrowserslistConfigFile","createCachedPluginDescriptors","createCachedPresetDescriptors","createPluginDescriptors","createPresetDescriptors","PRESET_DESCRIPTOR_CACHE","loadCachedDescriptor","PLUGIN_DESCRIPTOR_CACHE","DEFAULT_OPTIONS","cacheByOptions","possibilities","possibility","createDescriptors","createDescriptor","assertNoDuplicates","getItemDescriptor","resolver","loadPlugin","loadPreset","__esModule","conflicts","findConfigUpwards","rootDir","pkg","isPackage","resolveShowConfigPath","resolvePlugin","resolvePreset","_plugin","_configChain","_deepArray","_traverse","_plugins","_configApi","_partial","enhanceError","inputOpts","_opts$assumptions","loadPrivatePartialConfig","optionDefaults","presetContext","targets","toDescriptor","presetsDescriptors","initialPluginsDescriptors","pluginDescriptorsByPass","passes","externalDependencies","recursePresetDescriptors","rawPresets","pluginDescriptorsPass","loadPresetDescriptor","checkNoUnwrappedItemOptionPairs","splice","mergeOptions","pluginContext","assumptions","descs","loadPluginDescriptor","freezeDeepArray","makeDescriptorLoader","apiFactory","api","pluginDescriptorLoader","makePluginAPI","presetDescriptorLoader","makePresetAPI","instantiatePlugin","validatePluginObject","visitor","traverse","explode","inherits","inheritsDescriptor","forwardAsync","run","pre","chainMaybeAsync","post","manipulateOptions","visitors","merge","Plugin","needsFilename","validateIfOptionNeedsFilename","formattedPresetName","validatePreset","overrideOptions","instantiatePreset","apply","_semver","makeConfigAPI","coreVersion","assertVersion","addExternalDependency","ref","assumption","isInteger","semver","stackTraceLimit","finalize","deepArr","flattenToSet","getEnv","defaultValue","BABEL_ENV","_full","loadPartialConfigRunner","loadPartialConfigImpl","loadPartialConfigAsync","beginHiddenCallStack","loadPartialConfigSync","loadPartialConfig","loadOptionsImpl","_config$options","loadFullConfig","loadOptionsRunner","loadOptionsAsync","loadOptionsSync","loadOptions","createConfigItemRunner","createConfigItemImpl","createConfigItemAsync","createConfigItemSync","createConfigItem","createItemFromDescriptor","ConfigItem","CONFIG_ITEM_BRAND","for","_descriptor","enumerable","_environment","_excluded","_objectWithoutPropertiesLoose","resolveRootMode","rootMode","upwardRootDir","ROOT_CONFIG_FILENAMES","cloneInputAst","absoluteCwd","absoluteRootDir","showConfigPath","configChain","merged","resolveTargets","showIgnoredFiles","_opts","PartialConfig","hasFilesystemConfig","babelignore","endSep","substitution","starPat","starPatLast","starStarPat","starStarPatLast","escapeRegExp","pathToPattern","indexOf","parserOverride","generatorOverride","Formatter","title","optionsAndDescriptors","opt","pluginDescriptors","descriptorToConfig","presetDescriptors","_d$file","_stack","configs","_helperCompilationTargets","configFilePath","optTargets","esmodules","getTargets","ignoreBrowserslistConfig","browserslistEnv","parserOpts","mergeDefaultFields","access","assertRootMode","assertSourceMaps","assertCompact","assertSourceType","assertCallerMetadata","assertObject","propLoc","assertInputSourceMap","assertString","assertFunction","assertBoolean","assertArray","assertIgnoreList","assertIgnoreItem","assertConfigApplicableTest","checkValidTest","assertConfigFileSearch","assertBabelrcSearch","assertPluginList","assertPluginItem","assertPluginTarget","assertTargets","isBrowsersQueryValid","browsersLoc","esmodulesLoc","assertBrowsersList","subLoc","TargetNames","assertBrowserVersion","validTargets","assertAssumptions","inPreset","assumptionsNames","_removed","_optionAssertions","ROOT_VALIDATORS","filenameRelative","ast","BABELRC_VALIDATORS","NONPRESET_VALIDATORS","COMMON_VALIDATORS","inputSourceMap","assertEnvSet","assertOverridesList","retainLines","comments","shouldPrintComment","minified","auxiliaryCommentBefore","auxiliaryCommentAfter","sourceType","wrapPluginVisitorMethod","sourceFileName","generatorOpts","getModuleId","moduleRoot","moduleIds","moduleId","knownAssumptions","getSource","validateNested","configError","assertNoDuplicateSourcemap","optLoc","throwUnknownError","removed","unknownOptErr","entries","objLoc","lastItem","thisItem","VALIDATORS","assertVisitorMap","assertVisitorHandler","enter","exit","rootPath","invalidPluginPropertyError","auxiliaryComment","blacklist","breakConfig","experimental","externalHelpers","extra","jsxPragma","metadataUsedHelpers","modules","nonStandard","optional","sourceMapName","stage","whitelist","resolveModuleSource","metadata","sourceMapTarget","expectedError","injectVirtualStackFrame","ErrorToString","SUPPORTED","captureStackTrace","_Object$getOwnPropert","getOwnPropertyDescriptor","writable","START_HIDING","STOP_HIDING","expectedErrors","virtualFrames","CallSite","isNative","isConstructor","isToplevel","getFileName","getLineNumber","getColumnNumber","getFunctionName","getMethodName","getTypeName","setupPrepareStackTrace","prepareStackTrace","defaultPrepareStackTrace","MIN_STACK_TRACE_LIMIT","trace","newTrace","status","isExpected","asyncGeneratorStep","_asyncToGenerator","_next","_throw","runGenerator","withKind","_ref","_x","action","firstPause","completed","_ref2","_x2","resultP","promiseReferenced","_file","_buildExternalHelpers","resolvers","_types","_parser","_template","_index2","_transform","_transformFile","_transformAst","_parse","_normalizeOpts","parseRunner","parseSync","parseAsync","_codeFrame","_missingPluginHelper","pluginPasses","missingPlugin","codeFrame","generateMissingPluginMessage","pluginNameMap","asyncDoExpressions","syntax","decimal","decorators","doExpressions","exportDefaultFrom","flow","functionBind","functionSent","jsx","pipelineOperator","recordAndTuple","throwExpressions","typescript","asyncGenerators","classProperties","classPrivateProperties","classPrivateMethods","classStaticBlock","dynamicImport","exportNamespaceFrom","importAssertions","importAttributes","importMeta","logicalAssignment","moduleStringNames","numericSeparator","nullishCoalescingOperator","objectRestSpread","optionalCatchBinding","optionalChaining","privateIn","regexpUnicodeSets","getNameURLCombination","missingPluginName","helpMessage","pluginInfo","syntaxPlugin","transformPlugin","syntaxPluginInfo","transformPluginInfo","sectionType","msgFilename","helpers","_generator","_t","arrayExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","cloneNode","conditionalExpression","exportNamedDeclaration","exportSpecifier","expressionStatement","functionExpression","memberExpression","objectExpression","program","stringLiteral","unaryExpression","variableDeclaration","variableDeclarator","buildUmdWrapper","replacements","statement","buildGlobal","allowlist","buildHelpers","buildModule","refs","buildUmd","FACTORY_PARAMETERS","BROWSER_ARGUMENTS","COMMON_ARGUMENTS","AMD_ARGUMENTS","FACTORY_BODY","UMD_ROOT","buildVar","getHelperReference","exportName","mapExportBindingAssignments","outputType","umd","var","generator","transformFromAstRunner","transformFromAstSync","transformFromAstAsync","optsOrCallback","maybeCallback","transformFileSync","transformFileAsync","transformRunner","transformSync","transformAsync","LOADED_PLUGIN","blockHoistPlugin","Block","performHoisting","SwitchCase","consequent","hasChange","priority","stableSort","loadBlockHoistPlugin","bodyNode","_blockHoist","buckets","bucket","babel7","_interopRequireWildcard","_getRequireWildcardCache","__proto__","interpreterDirective","errorVisitor","File","shebang","interpreter","replaceWith","_map","availableHelper","versionRange","addHelper","declar","declarations","uid","generateUidIdentifier","dependencies","dep","getDependencies","globals","getAllBindings","hasBinding","rename","_compact","unshiftContainer","isVariableDeclaration","registerDeclaration","buildCodeFrameError","txt","inputMap","hub","getCode","getScope","buildError","NodePath","parentPath","setContext","addImport","addTemplateObject","getModuleName","_convertSourceMap","_mergeMap","generateCode","toObject","generate","outputCode","outputMap","__mergedMap","mergeSourceMap","convertSourceMap","toComment","_remapping","remapping","rootless","_pluginPass","_blockHoistPlugin","_normalizeFile","_generate","_opts$filename","_opts$filename2","normalizeFile","transformFile","pluginPairs","passPairs","PluginPass","_fs","_cloneDeep","traverseFast","INLINE_SOURCEMAP_REGEX","EXTERNAL_SOURCEMAP_REGEX","cloneDeep","lastComment","extractComments","fromComment","inputMapContent","fs","readFileSync","fromJSON","extractCommentsFromList","leadingComments","innerComments","trailingComments","basename","extname","deepClone","_allocQueue","_queue","identifierName","identifierNamePos","_pushQueue","cursor","_queueCursor","_popQueue","_flush","_buf","_str","trimRight","getDecoded","resultMap","rawMappings","getRawMappings","maybeNewline","_append","_sourcePosition","appendChar","_appendChar","sourcePosition","queueIndentation","queueCursor","sourcePos","_last","fastIndentation","_fastIndentations","_indentChar","fromCharCode","_mark","_position","_canMarkIdName","charCodeAt","_appendCount","_this$_map","mark","removeTrailingNewline","removeLastSemicolon","getLastChar","getNewlineCount","endsWithCharAndNewline","lastCp","hasContent","exactSource","_normalizePosition","sourceWithOffset","getCurrentColumn","getCurrentLine","indentChar","print","Program","_node$directives","_node$directives$trai","noIndentInnerCommentsHere","printInnerComments","directivesLen","directives","newline","printSequence","BlockStatement","_node$directives2","_node$directives$trai2","enterDelimited","rightBrace","Directive","unescapedSingleQuoteRE","unescapedDoubleQuoteRE","DirectiveLiteral","raw","getPossibleRaw","InterpreterDirective","Placeholder","expectedNode","isExportDefaultDeclaration","isExportNamedDeclaration","ClassDeclaration","_shouldPrintDecoratorsBeforeExport","printJoin","declare","word","abstract","typeParameters","superTypeParameters","implements","printList","ClassBody","separator","classBodyEmptySemicolonsPrinter","printer","tokenMap","getIndexes","occurrenceCount","nextLocIndex","advanceNextLocIndex","matchesOriginal","_tokens","ClassProperty","static","preserveFormat","_node$key$loc","catchUp","tsPrintClassMemberModifiers","computed","_variance","definite","typeAnnotation","ClassAccessorProperty","_node$key$loc2","ClassPrivateProperty","ClassMethod","_classMethodHead","ClassPrivateMethod","_node$key$loc3","_methodHead","StaticBlock","addDeprecatedGenerators","PrinterClass","deprecatedBabel7Generators","Noop","TSExpressionWithTypeArguments","DecimalLiteral","isCallExpression","isLiteral","isMemberExpression","isNewExpression","isPattern","UnaryExpression","DoExpression","ParenthesizedExpression","rightParens","UpdateExpression","ConditionalExpression","alternate","NewExpression","callee","typeArguments","endMatches","shouldPrintTrailingComma","SequenceExpression","expressions","ThisExpression","decoratorsBeforeExport","declaration","Decorator","OptionalMemberExpression","OptionalCallExpression","CallExpression","Import","AwaitExpression","printTerminatorless","YieldExpression","delegate","EmptyStatement","ExpressionStatement","tokenContext","TokenContext","AssignmentPattern","AssignmentExpression","_endsWithDiv","BindExpression","MemberExpression","MetaProperty","meta","PrivateName","V8IntrinsicIdentifier","ModuleExpression","dedent","_modules","_types2","isDeclareExportDeclaration","isStatement","AnyTypeAnnotation","ArrayTypeAnnotation","elementType","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","NullLiteralTypeAnnotation","DeclareClass","_interfaceish","DeclareFunction","InferredPredicate","DeclaredPredicate","DeclareInterface","InterfaceDeclaration","DeclareModule","DeclareModuleExports","DeclareTypeAlias","TypeAlias","DeclareOpaqueType","OpaqueType","DeclareVariable","DeclareExportDeclaration","FlowExportDeclaration","DeclareExportAllDeclaration","ExportAllDeclaration","EnumDeclaration","enumExplicitType","hasExplicitType","enumBody","members","member","hasUnknownMembers","EnumBooleanBody","explicitType","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumDefaultedMember","enumInitializedMember","EnumBooleanMember","EnumNumberMember","EnumStringMember","specifiers","ExistsTypeAnnotation","FunctionTypeAnnotation","this","rest","returnType","FunctionTypeParam","InterfaceExtends","_node$extends","_node$mixins","_node$implements","mixins","_node$variance","variance","andSeparator","InterfaceTypeAnnotation","_node$extends2","IntersectionTypeAnnotation","types","MixedTypeAnnotation","EmptyTypeAnnotation","NullableTypeAnnotation","NumberTypeAnnotation","StringTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","TypeAnnotation","arrowFlowReturnType","TypeParameterInstantiation","TypeParameter","supertype","impltype","ObjectTypeAnnotation","exact","callProperties","indexers","internalSlots","leading","inexact","ObjectTypeInternalSlot","ObjectTypeCallProperty","ObjectTypeIndexer","ObjectTypeProperty","ObjectTypeSpreadProperty","QualifiedTypeIdentifier","qualification","SymbolTypeAnnotation","orSeparator","UnionTypeAnnotation","TypeCastExpression","Variance","VoidTypeAnnotation","IndexedAccessType","objectType","indexType","OptionalIndexedAccessType","_templateLiterals","_expressions","_statements","_classes","_methods","_flow","_base","_jsx","_typescript","JSXAttribute","JSXIdentifier","JSXNamespacedName","JSXMemberExpression","JSXSpreadAttribute","JSXExpressionContainer","JSXSpreadChild","JSXText","JSXElement","open","openingElement","selfClosing","child","closingElement","spaceSeparator","JSXOpeningElement","attributes","JSXClosingElement","JSXEmptyExpression","JSXFragment","openingFragment","closingFragment","JSXOpeningFragment","JSXClosingFragment","isIdentifier","_params","idNode","nameInfo","_getFuncIdName","sourceIdentifierName","_parameters","noLineTerminator","_noLineTerminator","parameters","endToken","trailingComma","paramLength","_param","parameter","_predicate","noLineTerminatorAfter","_functionHead","_endsWithInnerRaw","FunctionExpression","ArrowFunctionExpression","_shouldPrintArrowParamsParens","arrowBody","_firstParam$leadingCo","_firstParam$trailingC","firstParam","findMatching","arrowToken","_id$loc","_id$loc2","_id$loc3","_id$loc4","parentType","isClassDeclaration","isExportDefaultSpecifier","isExportNamespaceSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","ImportSpecifier","importKind","imported","local","ImportDefaultSpecifier","ExportDefaultSpecifier","exported","ExportSpecifier","exportKind","ExportNamespaceSpecifier","warningShown","_printAttributes","hasPreviousBrace","importAttributesKeyword","assertions","useAssertKeyword","_node$attributes","_node$assertions","maybePrintDecoratorsBeforeExport","ExportNamedDeclaration","hasSpecial","hasBrace","_node$attributes2","_node$assertions2","ExportDefaultDeclaration","exportDefault","ImportDeclaration","_node$attributes3","_node$assertions3","isTypeKind","phase","hasSpecifiers","ImportAttribute","ImportNamespaceSpecifier","ImportExpression","isFor","isForStatement","isIfStatement","WithStatement","printBlock","IfStatement","needsBlock","getLastStatement","printAndIndentOnComments","ForStatement","enterForStatementInit","forHead","update","WhileStatement","ForXStatement","isForOf","await","forOfHead","forInHead","DoWhileStatement","printStatementAfterKeyword","BreakStatement","label","ContinueStatement","ReturnStatement","ThrowStatement","LabeledStatement","TryStatement","finalizer","CatchClause","SwitchStatement","discriminant","cases","cas","DebuggerStatement","VariableDeclaration","hasInits","VariableDeclarator","TaggedTemplateExpression","quasi","TemplateElement","TemplateLiteral","quasis","partRaw","_catchUpTo","_jsesc","isAssignmentPattern","lastRawIdentNode","lastRawIdentResult","_getRawIdentifier","_originalCode","Identifier","_node$loc","ArgumentPlaceholder","RestElement","ObjectExpression","ObjectMethod","ObjectProperty","shorthand","ArrayExpression","RecordExpression","startToken","recordAndTupleSyntaxType","TupleExpression","RegExpLiteral","BooleanLiteral","NullLiteral","NumericLiteral","jsescOption","numbers","StringLiteral","BigIntLiteral","validTopicTokenSet","TopicReference","topicToken","givenTopicTokenJSON","validTopics","PipelineTopicExpression","PipelineBareFunction","PipelinePrimaryTopicReference","TSTypeAnnotation","TSTypeParameterInstantiation","printTrailingSeparator","TSTypeParameter","in","constraint","TSParameterProperty","accessibility","readonly","TSDeclareFunction","TSDeclareMethod","TSQualifiedName","TSCallSignatureDeclaration","tsPrintSignatureDeclarationBase","maybePrintTrailingCommaOrSemicolon","TSConstructSignatureDeclaration","TSPropertySignature","tsPrintPropertyOrMethodName","TSMethodSignature","TSIndexSignature","isStatic","TSAnyKeyword","TSBigIntKeyword","TSUnknownKeyword","TSNumberKeyword","TSObjectKeyword","TSBooleanKeyword","TSStringKeyword","TSSymbolKeyword","TSVoidKeyword","TSUndefinedKeyword","TSNullKeyword","TSNeverKeyword","TSIntrinsicKeyword","TSThisType","TSFunctionType","tsPrintFunctionOrConstructorType","TSConstructorType","TSTypeReference","typeName","TSTypePredicate","asserts","parameterName","TSTypeQuery","exprName","TSTypeLiteral","printBraced","TSArrayType","TSTupleType","elementTypes","TSOptionalType","TSRestType","TSNamedTupleMember","TSUnionType","tsPrintUnionOrIntersectionType","TSIntersectionType","_printer$tokenMap","hasLeadingToken","startMatches","TSConditionalType","checkType","extendsType","trueType","falseType","TSInferType","typeParameter","TSParenthesizedType","TSTypeOperator","TSIndexedAccessType","TSMappedType","nameType","tokenIfPlusMinus","TSLiteralType","literal","TSClassImplements","TSInterfaceDeclaration","extendz","TSInterfaceBody","TSTypeAliasDeclaration","TSTypeExpression","TSTypeAssertion","TSInstantiationExpression","TSEnumDeclaration","const","isConst","TSEnumBody","_this$shouldPrintTrai","TSEnumMember","initializer","TSModuleDeclaration","TSModuleBlock","TSImportType","qualifier","TSImportEqualsDeclaration","isExport","moduleReference","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","isField","printModifiersList","_printer$tokenMap2","modifiersSet","_sourceMap","_opts$recordAndTupleS","experimental_preserveFormat","tokens","retainFunctionParens","concise","adjustMultilineComment","quotes","wrap","minimal","jsonCompatibleStrings","Printer","_ast","whitespace","parens","FLIPPED_ALIAS_KEYS","VISITOR_KEYS","isDecorator","isExpressionStatement","isParenthesizedExpression","expandAliases","inForInit","getRawIdentifier","_fn","aliases","expandedParens","expandedWhitespaceNodes","isOrHasCallExpression","needsWhitespace","_expandedWhitespaceNo","needsWhitespaceBefore","needsWhitespaceAfter","needsParens","_expandedParens$get","isDecoratorMemberExpression","isLastChild","visitorKeys","isArrayTypeAnnotation","isBinaryExpression","isForOfStatement","isIndexedAccessType","isObjectPattern","isOptionalMemberExpression","isYieldExpression","PRECEDENCE","getBinaryPrecedence","nodeType","isTSTypeExpression","isClassExtendsClause","hasPostfixPart","needsParenBeforeExpressionBrace","Binary","parentPos","nodePos","TSAsExpression","BinaryExpression","inForStatementInit","ClassExpression","UnaryLike","LogicalExpression","_inForInit","_node$extra","parenthesized","rightType","isArrayExpression","isAssignmentExpression","isBinary","isBlockStatement","isObjectExpression","isOptionalCallExpression","isStringLiteral","crawlInternal","hasCall","hasFunction","hasHelper","isHelper","crawl","isType","Literal","_parent$properties","_parent$properties2","_parent$callPropertie","_parent$properties3","_parent$callPropertie2","_parent$indexers","amounts","_buffer","_tokenMap","generatorFunctions","_deprecated","isExpression","isClassBody","isTSInterfaceBody","isTSEnumMember","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","commentIsNewline","oldInForStatementInit","oldNoLineTerminatorAfterNode","_noLineTerminatorAfterNode","TokenMap","_maybeAddAuxComment","_indent","force","_currentNode","_printSemicolonBeforeNextNode","_space","_maybePrintInnerComments","_catchUpToCurrentToken","_endsWithWord","isNonDecimalLiteral","secondChar","_endsWithInteger","lastChar","strFirst","tokenChar","_newline","_catchUp","_printSemicolonBeforeNextToken","_maybeIndent","firstChar","_getIndent","_shouldIndent","spacesCount","spaces","_indentRepeat","trailingCommentsLineOffset","_node$leadingComments","_node$leadingComments2","_node$trailingComment","oldInForStatementInitWasTrue","oldConcise","printMethod","oldInAux","_insideAux","shouldPrintParens","_boundGetRawIdentifier","indentParenthesized","_lastCommentLine","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","_printAuxAfterOnNextUserNode","_printComment","rawValue","addNewlines","_nodes$0$loc","_node$trailingComment2","_nextNode$loc","newlineOpts","nextNodeStartLine","boundSeparator","_printNewline","nextNode","_printComments","nextTokenStr","nextTokenOccurrenceCount","_this$tokenMap","_indentInnerComments","nextToken","hasSpace","printedCommentsCount","_printedComments","commaSeparator","listEnd","listEndIndex","findLastIndex","lastCommentLine","_shouldPrintComment","commentTok","skipNewLines","isBlockComment","printNewLines","lastCharCode","_comment$loc","newlineRegex","indentSize","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","singleLine","shouldSkipNewline","originalCode","_inputMap","_genMapping","_traceMapping","_rawMappings","_originalMapping","originalMapping","originalIdentifierMapping","_sourceFileName","_opts$sourceFileName","_this$_inputMap$sourc","_lastGenLine","_lastSourceLine","_lastSourceColumn","_nodesToTokenIndexes","condition","_nodesOccurrencesCountCache","_source","_getTokensIndexesOfNode","_findTokensOfNode","childrenIterator","childTok","_tokensCache","_findFirstTokenOfNode","_findLastTokenOfNode","_pretty","_utils","getInclusionReasons","targetVersions","minVersions","getLowestImplementedVersion","targetVersion","minIsUnreleased","isUnreleasedVersion","semverify","prettifyVersion","targetsSupported","support","targetEnvironments","unsupportedEnvironments","environment","lowestImplementedVersion","lowestTargetedVersion","isRequired","compatData","pluginsCompatData","excludes","filterItems","defaultIncludes","defaultExcludes","pluginSyntaxMap","shippedProposalsSyntax","_browserslist","_helperValidatorOption","_nativeModules","_lruCache","_targets","_filterItems","ESM_SUPPORT","browserModulesData","OptionValidator","validateTargetNames","formatMessage","findSuggestion","every","validateBrowsers","invariant","getLowestVersions","browserName","browserVersion","browserNameMap","splitVersion","isSplitUnreleased","isUnreleased","getLowestUnreleased","parsedBrowserVersion","semverMin","outputDecimalWarning","decimalTargets","semverifyTarget","nodeTargetParser","defaultTargetParser","generateTargets","inputTargets","mobileToDesktop","targetsCache","LruCache","resolveTargetsCached","_browsers","_browsers2","configPath","onBrowserslistConfigFound","hasTargets","shouldParseBrowsers","shouldSearchForConfig","BROWSERSLIST","BROWSERSLIST_CONFIG","findConfigFile","queryBrowsers","esmSupportVersion","getHighestUnreleased","decimalWarnings","parsedTarget","parsedValue","deno","opera","edge","firefox","safari","ios","electron","samsung","rhino","opera_mobile","prettifyTargets","unreleasedLabel","unreleasedLabels","and_chr","and_ff","ie_mob","ios_saf","op_mob","versionRegExp","_assert","importDeclaration","importDefaultSpecifier","importNamespaceSpecifier","importSpecifier","ImportBuilder","statements","resultName","_resultName","import","_importedSource","_scope","named","importName","defaultInterop","_interop","_hub","wildcardInterop","importedSource","_importBuilder","_isModule","numericLiteral","sequenceExpression","isImportDeclaration","ImportInjector","addDefault","importedSourceIn","addNamed","_generateImport","_applyDefaults","addNamespace","addSideEffect","newOpts","isInit","_defaultOpts","nameHint","blockHoist","isDefault","isNamed","isNamespace","importedType","importedInterop","importingInterop","ensureLiveReference","ensureNoContext","importPosition","isMod","isModule","_programPath","isModuleForNode","isModuleForBabel","_programScope","es6Default","_insertStatements","_insertStatementsAfter","_insertStatementsBefore","isValueImport","firstImportDecl","maybeAppendImportSpecifiers","targetPath","insertBefore","statementsSet","importDeclarations","lastImportPath","bodyStmt","newImports","decl","insertAfter","programPath","isProgram","hasNamespaceImport","hasDefaultImport","_importInjector","_core","buildDynamicImport","deferToThen","wrapWithPromise","specifier","isTemplateLiteral","specifierToString","templateLiteral","templateElement","originalGetModuleName","pluginOpts","_pluginOpts$moduleId","_pluginOpts$moduleIds","_pluginOpts$getModule","_pluginOpts$moduleRoo","moduleName","sourceRootReplacer","_helperModuleImports","_rewriteThis","_rewriteLiveReferences","_normalizeAndLoadMetadata","Lazy","_dynamicImport","_getModuleName","rewriteModuleStatementsAndPrepareHeader","allowTopLevelThis","strictMode","noInterop","importInterop","lazy","getWrapperPayload","toGetWrapperPayload","wrapReference","esNamespaceOnly","constantReexports","enumerableModuleMeta","noIncompleteNsImportDetection","validateImportInteropOption","normalizeModuleAndLoadMetadata","initializeReexports","rewriteThis","rewriteLiveReferences","directive","directiveLiteral","headers","hasExports","buildESModuleHeader","nameList","buildExportNameListDeclaration","exportNameListName","buildExportInitializationStatements","ensureStatementsHoisted","header","wrapInterop","expr","booleanLiteral","buildNamespaceInitStatements","sourceMetadata","_wrapReference","srcNamespaceId","localName","importsNamespace","NAME","SOURCE","srcNamespace","buildReexportsFromMeta","reexportNamespace","EXPORTS","NAMESPACE","reexportAll","buildNamespaceReexport","ReexportTemplate","constant","namespaceImport","constantComputed","spec","_wrapReference2","stringSpecifiers","reexports","interop","astNodes","VERIFY_NAME_LIST","EXPORTS_LIST","exportedVars","hasReexport","valueToNode","initStatements","buildInitStatement","reexportsStatements","initStatement","chunkSize","uninitializedExportNames","buildUndefinedNode","InitTemplate","exportNames","initExpr","isSideEffectImport","_helperValidatorIdentifier","imports","resolveImportInterop","nameAnonymousExports","getModuleMetadata","removeImportExportDeclarations","nameOfnamespace","resolvedInterop","getExportSpecifierName","isIdentifierName","assertExportSpecifier","isExportSpecifier","localData","getLocalExportMetadata","importNodes","sourceData","getData","sourceNode","referenced","reexport","isImportSpecifier","isExportAllDeclaration","needsDefault","needsNamed","bindingKindLookup","isFunctionDeclaration","getOuterBindingIdentifiers","localMetadata","getLocalMetadata","idPath","ids","getOuterBindingIdentifierPaths","_child$splitExportDec","splitExportDeclaration","isInType","requeueInParent","requeue","exportMeta","rewriteBindingInitVisitorState","rewriteBindingInitVisitor","rewriteReferencesVisitorState","seen","buildImportReference","identNode","rewriteReferencesVisitor","Scope","buildBindingExportAssignmentExpression","isVar","isArrowFunctionExpression","isFunctionExpression","isClassExpression","localExpr","exportsObjectName","currentScope","hasOwnBinding","buildImportThrow","ReferencedIdentifier","importData","localBinding","getBinding","rootBinding","isTaggedTemplateExpression","isJSXIdentifier","jsxMemberExpression","exportedNames","generateDeclaredUidIdentifier","newExpr","assignment","logicalExpression","programScopeIds","programScope","didTransformExport","importConstViolationName","loopBodyScope","ensureBlock","bodyPath","newLoopId","generateUidIdentifierBasedOnNode","rewriteThisVisitor","environmentVisitor","noScope","forbiddenNumericSeparatorSiblings","decBinOct","isAllowedNumericSeparatorSibling","bin","oct","dec","readStringContents","lineStart","curLine","initialPos","initialLineStart","initialCurLine","firstInvalidLoc","chunkStart","unterminated","isStringEnd","readEscapedChar","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","fromCodePoint","strictNumericEscape","startPos","octalStr","octal","forceLen","readInt","invalidEscapeSequence","radix","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","unexpectedNumericSeparator","numericSeparatorInEscapeSequence","_isDigit","invalidDigit","invalidCodePoint","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","isIdentifierStart","isIdentifierChar","isFirst","trail","_identifier","_keyword","keywords","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","inModule","isStrictBindOnlyReservedWord","isStrictBindReservedWord","levenshtein","distances","_validator","_findSuggestion","validateTopLevelOptions","TopLevelOptionShape","validOptionNames","option","validateBooleanOption","validateStringOption","preserveComments","OverloadYield","locals","_OverloadYield","exportBindingAssignments","applyDecoratedDescriptor","_applyDecoratedDescriptor","applyDecs2311","checkInRHS","setFunctionName","toPropertyKey","arrayLikeToArray","arrayWithHoles","arrayWithoutHoles","_arrayWithoutHoles","assertClassBrand","_assertClassBrand","assertThisInitialized","asyncGeneratorDelegate","_asyncGeneratorDelegate","asyncIterator","_asyncIterator","AsyncFromSyncIterator","asyncToGenerator","awaitAsyncGenerator","_awaitAsyncGenerator","callSuper","_callSuper","isNativeReflectConstruct","possibleConstructorReturn","_checkInRHS","checkPrivateRedeclaration","_checkPrivateRedeclaration","classCallCheck","classNameTDZError","_classNameTDZError","classPrivateFieldGet2","_classPrivateFieldGet2","classPrivateFieldInitSpec","_classPrivateFieldInitSpec","classPrivateFieldLooseBase","_classPrivateFieldBase","classPrivateFieldLooseKey","_classPrivateFieldKey","classPrivateFieldSet2","_classPrivateFieldSet2","classPrivateGetter","_classPrivateGetter","classPrivateMethodInitSpec","_classPrivateMethodInitSpec","classPrivateSetter","_classPrivateSetter","classStaticPrivateMethodGet","_classStaticPrivateMethodGet","construct","setPrototypeOf","createClass","createForOfIteratorHelper","_createForOfIteratorHelper","unsupportedIterableToArray","createForOfIteratorHelperLoose","_createForOfIteratorHelperLoose","createSuper","decorate","_decorate","_getDecoratorsApi","_createElementDescriptor","_coalesceGetterSetter","_coalesceClassElements","_hasDecorators","_isDataDescriptor","_optionalCallableProperty","toArray","_defaults","defineAccessor","_defineAccessor","_extends","_get","superPropBase","identity","_identity","importDeferProxy","_importDeferProxy","inheritsLoose","_inheritsLoose","initializerDefineProperty","_initializerDefineProperty","initializerWarningHelper","_initializerWarningHelper","instanceof","_instanceof","interopRequireDefault","interopRequireWildcard","isNativeFunction","iterableToArray","_iterableToArray","iterableToArrayLimit","REACT_ELEMENT_TYPE","_createRawReactElement","maybeArrayLike","_maybeArrayLike","newArrowCheck","_newArrowCheck","nonIterableRest","nonIterableSpread","_nonIterableSpread","nullishReceiverError","_nullishReceiverError","objectDestructuringEmpty","_objectDestructuringEmpty","objectSpread2","_objectSpread2","objectWithoutProperties","_objectWithoutProperties","objectWithoutPropertiesLoose","readOnlyError","_readOnlyError","regeneratorRuntime","_regeneratorRuntime","_set","skipFirstGeneratorNext","_skipFirstGeneratorNext","slicedToArray","_superPropBase","superPropGet","_superPropGet","superPropSet","_superPropSet","taggedTemplateLiteral","_taggedTemplateLiteral","taggedTemplateLiteralLoose","_taggedTemplateLiteralLoose","tdz","_tdzError","temporalRef","_temporalRef","temporalUndefined","_temporalUndefined","_toArray","toConsumableArray","_toConsumableArray","toPrimitive","toSetter","_toSetter","typeof","usingCtx","_usingCtx","wrapAsyncGenerator","_wrapAsyncGenerator","AsyncGenerator","wrapNativeSuper","wrapRegExp","_wrapRegExp","writeOnlyError","_writeOnlyError","AwaitValue","_AwaitValue","applyDecs","old_createMetadataMethodsForProperty","old_convertMetadataMapToFinal","old_createAddInitializerMethod","old_memberDec","old_assertNotFinished","old_assertMetadataKey","old_assertCallable","old_assertValidReturnValue","old_getInit","old_applyMemberDec","old_applyMemberDecs","old_pushInitializers","old_applyClassDecs","applyDecs2203","applyDecs2203Factory","applyDecs2203Impl","applyDecs2203R","applyDecs2203RFactory","applyDecs2301","applyDecs2301Factory","applyDecs2305","classApplyDescriptorDestructureSet","_classApplyDescriptorDestructureSet","classApplyDescriptorGet","_classApplyDescriptorGet","classApplyDescriptorSet","_classApplyDescriptorSet","classCheckPrivateStaticAccess","_classCheckPrivateStaticAccess","classCheckPrivateStaticFieldDescriptor","_classCheckPrivateStaticFieldDescriptor","classExtractFieldDescriptor","_classExtractFieldDescriptor","classPrivateFieldDestructureSet","_classPrivateFieldDestructureSet","classPrivateFieldGet","_classPrivateFieldGet","classPrivateFieldSet","_classPrivateFieldSet","classPrivateMethodGet","_classPrivateMethodGet","classPrivateMethodSet","_classPrivateMethodSet","classStaticPrivateFieldDestructureSet","_classStaticPrivateFieldDestructureSet","classStaticPrivateFieldSpecGet","_classStaticPrivateFieldSpecGet","classStaticPrivateFieldSpecSet","_classStaticPrivateFieldSpecSet","classStaticPrivateMethodSet","_classStaticPrivateMethodSet","defineEnumerableProperties","_defineEnumerableProperties","dispose","dispose_SuppressedError","_dispose","objectSpread","_using","_helpersGenerated","deep","permuteHelperAST","bindingName","localBindings","getDependency","adjustAst","newName","helperData","loadHelper","Position","SourceLocation","createPositionWithColumnOffset","ModuleErrors","ImportMetaOutsideModule","ImportOutsideModule","NodeDescriptions","ArrayPattern","ForOfStatement","ForInStatement","FormalParameters","ObjectPattern","true","false","toNodeDescription","StandardErrors","AccessorIsGenerator","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitUsingNotInAsyncContext","AwaitNotInAsyncContext","AwaitNotInAsyncFunction","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorsBeforeAfterExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeferImportRequiresNamespace","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","DuplicateProto","DuplicateRegExpFlags","DynamicImportPhaseRequiresImportExpressions","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportAttributesUseAssert","ImportBindingIsString","ImportCallArity","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidLhsOptionalChaining","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","ModuleExportNameHasLoneSurrogate","surrogateCharCode","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","SloppyFunctionAnnexB","SourcePhaseImportRequiresDefault","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationExport","UsingDeclarationHasBindingPattern","VarRedeclaration","YieldBindingIdentifier","YieldInParameter","ZeroDigitNumericSeparator","StrictModeErrors","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","UnparenthesizedPipeBodyDescriptions","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","defineHidden","configurable","toParseErrorConstructor","toMessage","reasonCode","hasMissingPlugin","oldReasonCodes","AccessorCannotDeclareThisParameter","AccessorCannotHaveTypeParameters","ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference","SetAccessorCannotHaveOptionalParameter","SetAccessorCannotHaveRestParameter","SetAccessorCannotHaveReturnType","_overrides$loc","ParseErrorEnum","parseErrorTemplates","ParseErrorConstructors","Errors","PipelineOperatorErrors","createDefaultOptions","sourceFilename","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","createImportExpressions","createParenthesizedExpressions","errorRecovery","attachComment","annexB","getOptions","toUnenumerable","toESTreeLocation","estree","ESTreeParserMixin","optionFlags","parseRegExpLiteral","estreeParseLiteral","parseBigIntLiteral","bigInt","_unused","bigint","parseDecimalLiteral","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","directiveToStmt","stmt","initFunction","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","isValidDirective","_stmt$expression$extr","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","isPrivateName","parseFunctionBody","allowExpression","isMethod","parseMethod","isGenerator","allowDirectSuper","inClassScope","funcNode","startNode","resetStartLocationFromNode","finishNode","nameIsConstructor","parseClassProperty","propertyNode","parseClassPrivateProperty","parseObjectMethod","isAccessor","parseObjectProperty","refExpressionErrors","isValidLVal","isUnparenthesizedInAssign","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","finishCallExpression","unfinished","toReferencedArguments","parseExport","exportStartLoc","lastTokStartLoc","_declaration$decorato","resetStartLocation","parseSubscript","noCalls","optionalChainMember","startNodeAtNode","hasPropertyAsPrivateName","isObjectMethod","finishNodeAt","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","conf","rightAssociative","binop","updateContext","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","_options$binop","_options$beforeExpr","_options$startsExpr","_options$prefix","createKeywordLike","_options$binop2","_options$beforeExpr2","_options$startsExpr2","_options$prefix2","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","at","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_break","_case","_catch","_continue","_debugger","_else","_finally","_function","_if","_return","_switch","_try","_var","_const","_with","_new","_class","_export","_import","_null","_true","_false","_void","_delete","_do","_for","_while","_as","_await","_defer","_from","_let","_meta","_of","_sent","_static","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","placeholder","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","isIteratorStart","next2","reservedWordLikeSet","canBeReservedWord","firstLexicalName","ScopeHandler","inTopLevel","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","scopeStack","ScopeFlag","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","declareName","bindingType","checkRedeclarationInScope","maybeExportDefined","undefinedExports","isRedeclaredInScope","checkLocalExport","topLevelScope","FlowScope","declareFunctions","FlowScopeHandler","BaseParser","sourceToOffsetPos","offsetToSourcePos","offsetPos","hasPlugin","pluginConfig","pluginName","pluginOptions","actualOptions","_this$plugins$get","sawUnambiguousESM","ambiguousScriptDifferentAst","setTrailingComments","setLeadingComments","setInnerComments","adjustInnerComments","commentWS","lastElement","CommentsParser","addComment","commentsLen","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","nodeStart","commentEnd","containingNode","finalizeComment","trailingNode","commentStart","finalizeRemainingComments","resetPreviousNodeTrailingComments","resetPreviousIdentifierLeadingComments","takeSurroundingComments","lineBreakG","lineBreak","hasNewLine","skipWhiteSpace","skipWhiteSpaceInLine","isWhitespace","State","maybeInArrowParameters","inType","noAnonFunctionType","hasFlowComment","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","soloAwait","inFSharpPipelineDirectBody","canStartJSXElement","containsEsc","hasTopLevelAwait","curPosition","potentialArrowAt","noArrowAt","noArrowParamsConversionAt","topicContext","labels","firstInvalidTemplateEscapePos","strictErrors","tokensLength","maxNumOfResolvableTopics","maxTopicIndex","ct","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","pushToken","checkKeywordEscapes","eat","createLookaheadState","curContext","lookahead","old","isLookahead","nextTokenStart","nextTokenStartSince","lookaheadCharCode","nextTokenInLineStart","nextTokenInLineStartSince","lookaheadInLineCharCode","codePointAtPos","setStrict","toParseError","skipSpace","finishToken","getTokenFromCode","skipBlockComment","skipLineComment","startSkip","spaceStart","commentWhitespace","prevType","replaceToken","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readWord1","finishOp","readToken_dot","readNumber","readToken_slash","readToken_mult_modulo","readToken_pipe_amp","readToken_caret","proposal","codePointAt","readToken_atSign","readToken_plus_min","readToken_lt","readToken_gt","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readWord","readRegexp","escaped","mods","errorHandlers_readInt","startsWithDot","isFloat","hasExponent","isOctal","hasLeadingZero","recordStrictModeErrors","underscorePos","isDecimal","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","readTemplateContinuation","opening","errorHandlers_readStringContents_template","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseOverwrite","expectOnePlugin","pluginNames","errorBuilder","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","oldClassScope","declarePrivateName","redefined","accessor","oldStatic","newStatic","oldKind","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","recordDeclarationError","ParsingErrorClass","declarationErrors","clearDeclarationError","iterateErrors","ExpressionScopeHandler","recordParameterInitializerError","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","UtilParser","addExtra","isContextual","isUnparsedContextual","nameStart","nameEnd","nextCh","isLookaheadContextual","eatContextual","expectContextual","canInsertSemicolon","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","allowAsi","expect","tryParse","oldState","abortSignal","failState","thrown","aborted","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","hasErrors","isLiteralPropertyName","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","getScopeHandler","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","checkDestructuringPrivate","ExpressionErrors","NodePrototype","clonePlaceholder","cloneIdentifier","cloneStringLiteral","__clone","newNode","NodeUtils","startNodeAt","locationNode","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitialized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","exportSuggestions","let","interface","partition","list1","list2","FLOW_PRAGMA_REGEX","FlowParserMixin","shouldParseTypes","flowPragma","flowParseTypeInitialiser","oldInType","flowParseType","flowParsePredicate","moduloLoc","parseExpression","flowParseTypeAndPredicateInitialiser","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","flowParseFunctionTypeParams","flowParseDeclare","insideModule","flowParseDeclareVariable","flowParseDeclareModuleExports","flowParseDeclareModule","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","parseImport","hasModuleExport","isLet","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","flowParseInterfaceExtends","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","flowParseTypeParameter","requireDefault","nodeStartLoc","flowParseVariance","ident","defaultRequired","flowInTopLevelContext","oldContext","flowParseTypeParameterInstantiationInExpression","reScan_lt","oldNoAnonFunctionType","reScan_lt_gt","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","endDelim","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","flowCheckGetterSetterParams","paramCount","_startLoc","node2","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","flowParsePrefixType","flowParseAnonFunctionWithoutParens","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","shouldParseExportDeclaration","parseExportDefaultExpression","parseConditional","setOptionalParametersError","originalNoArrowAt","failed","tryParseConditionalConsequent","getArrowLikeExpressions","parseMaybeAssign","parseMaybeAssignAllowIn","disallowInvalid","arrows","finishArrowValidation","toAssignableList","trailingCommaLoc","checkParams","parseParenItem","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","optionalId","parseClassMember","classBody","parseClassMemberFromModifier","isIterator","readIterator","fullWord","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassMethod","allowsDirectSuper","isThisParam","pushClassPrivateMethod","parseClassSuper","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","parseFunctionParamType","parseMaybeDefault","checkImportReflection","parseImportSpecifierLocal","finishImportSpecifier","isPotentialImportPhase","applyImportPhase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","specifierTypeKind","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","parseAsyncArrowFromCallExpression","shouldParseAsyncArrow","afterLeftParse","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","maybeUnwrapTypeCastExpression","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","subscriptState","isLookaheadToken_lt","parseNewCallee","targs","parseArrowExpression","parseTopLevel","fileNode","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitialized","flowEnumMemberInit","endOfInit","flowEnumMemberRaw","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","booleanMembers","numberMembers","stringMembers","defaultedMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","jsxParseOpeningElementAfterName","afterNext","entities","quot","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Omicron","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","omicron","rho","sigmaf","tau","upsilon","phi","chi","psi","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","exist","nabla","isin","notin","prod","minus","lowast","radic","infin","and","or","cap","cup","int","there4","sim","cong","asymp","equiv","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","JSXParserMixin","jsxReadToken","jsxReadEntity","jsxReadNewLine","normalizeCRLF","jsxReadString","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","jsxParseClosingElementAt","jsxParseElementAt","jsxParseElement","newContext","TypeScriptScope","tsNames","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","unwrapParenthesizedExpression","LValParser","_node$extra3","_node$extra2","checkToRestConversion","elt","toReferencedListDeep","parseSpread","parseRestBinding","parseBindingList","ParseBindingListFlags","parseObjectLike","closeCharCode","allowEmpty","elts","checkCommaAfterRest","parseDecorator","parseAssignableListItem","parseBindingRestProperty","parseBindingProperty","parsePropertyName","_left","checkLVal","_expression$extra","checkClashes","hasParenthesizedAncestor","checkIdentifier","validity","ParseErrorClass","nextAncestor","declareNameFromIdentifier","allowPattern","nonNull","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifer","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TupleOptionalAfterType","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","TypeScriptParserMixin","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenOnSameLineAndCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","allowedModifiers","stopOnStartOfClassStaticBlock","tsIsStartOfStaticBlocks","tsTryParse","tsParseModifiers","modified","disallowedModifiers","errorTemplate","enforceOrder","before","after","incompatible","mod1","mod2","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","tsParseEntityName","tsParseEntityNameFlags","tsParseTypeArguments","tsParseTypeReference","tsParseThisTypePredicate","lhs","tsParseTypeAnnotation","tsParseThisTypeNode","tsParseTypeQuery","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseConstModifier","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","nodeAny","firstParameter","tsParseTypeMember","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedType","tsExpectThenParseType","tsParseType","tsTryParseType","tsParseTupleType","tsParseTupleElementType","seenOptionalElement","elementNode","labeled","chAfterWord","isWord","wordName","typeOrLabel","tsParseNonArrayType","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","parseMaybeUnary","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","isTypeOperator","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","_unused2","tsInType","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","tsParseInOutConstModifiers","tsParseTypeAliasDeclaration","tsParseInOutModifiers","tsInTopLevelContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsParseEnumMember","tsParseEnumDeclaration","tsParseEnumBody","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","tsParseImportEqualsDeclaration","maybeDefaultIdentifier","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","tsTryParseAndCatch","tsTryParseDeclare","nany","startType","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","tsIsDeclarationStart","pp","isSimpleParameter","tsDisallowOptionalPattern","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","_callee$extra","parseExprOp","leftStartLoc","minPrec","isSatisfies","checkKeywords","checkDuplicateExports","importNode","parseMaybeImportPhase","parseImportSpecifiersAndAfter","nodeImportEquals","isAbstractClass","cls","allowMissingInitializer","isValidAmbientConstInitializer","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","parseClassPropertyAnnotation","parseClassAccessorProperty","declareClassPrivateMethodInScope","_typeCast","_typeCast2","typeCast","_typeParameters","reportReservedArrowTypeParam","sawUnary","toAssignableParenthesizedExpression","parseMaybeDecoratorArguments","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","hasContextParam","parseCatchClauseParam","oldIsAmbientContext","oldStrict","oldInAbstractClass","maybeTakeDecorators","methodFn","hasEstreePlugin","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","rightOfAs","leftOfAsKey","rightOfAsKey","leftOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","isPossiblyLiteralEnum","isUncomputedMemberExpressionChain","isNegativeNumber","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","PIPELINE_PROPOSALS","TOPIC_TOKENS","validatePlugins","pluginsMap","allowCallParenthesized","_pluginsMap$get","proposalList","tupleSyntaxIsHash","syntaxType","tokenList","moduleAttributesVersionPluginOption","deprecatedAssertSyntax","RECORD_AND_TUPLE_SYNTAX_TYPES","missingPlugins","mixinPlugins","v8intrinsic","V8IntrinsicMixin","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","placeholders","PlaceholdersParserMixin","parsePlaceholder","assertNoSpace","finishPlaceholder","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrSloppyAnnexBFunctionDeclaration","stmtPlaceholder","parseBlock","createNewLexicalScope","parseFunctionId","requireId","parseClassBody","maybeParseExportDefaultSpecifier","_specifiers","checkExport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","mixinPluginNames","ExpressionParser","checkProto","isRecord","protoRef","used","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","resultError","_resultError$loc","ownExpressionErrors","parseYield","parseMaybeConditional","parseExprOps","parseMaybeUnaryOrPrivate","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","withSoloAwaitPermittingContext","parseFSharpPipelineBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","_body$extra","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","recordAwaitIfAllowed","parseAwait","isDelete","parseUpdate","isAmbiguousAwait","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseMember","parseNoCallExpr","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","_call$extra","parseSuper","parseImportMetaProperty","parseImportCall","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","lookaheadCh","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","parseMetaProperty","parseFunction","isSource","spreadStartLoc","optionalCommaStartLoc","innerStartLoc","spreadNodeStartLoc","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","isTail","endOffset","elemEnd","cooked","curElt","substitutions","propHash","parsePropertyDefinition","maybeAsyncOrAccessorProp","keyName","finishedProp","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","reservedTest","isAwaitAllowed","delegating","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","ParamKind","revertScopes","parseProgram","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","templateValue","templateElementEnd","templateElementEndLoc","backquoteEnd","backquoteEndLoc","StatementParser","finishedProgram","parseInterpreterDirective","stmtToDirective","hasFollowingBindingAtom","endCh","chStartsBindingPattern","hasInLineFollowingBindingIdentifierOrBrace","startsUsingForOf","startsAwaitUsing","parseModuleItem","ParseStatementFlag","parseStatementListItem","allowLabeledFunction","parseStatement","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","_classNode$decorators","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithAwaitUsing","starsWithUsingDeclaration","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isHangingDeclaration","ParseFunctionFlag","sawDefault","isCase","clause","statementStart","parsedNonDirective","hangingDeclaration","isDeclaration","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","maybeContextualKw","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","_member$decorators","parseInitializer","hasDeclaration","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","maybeParseExportNamedSpecifiers","maybeParseExportDeclaration","_node2$declaration","_ref$specifiers","isTypeExport","nextType","hasFrom","nextAfterFrom","maybeParseImportAttributes","checkJSONModuleImport","checkNames","isFrom","_node$specifiers","_declaration$extra","surrogate","isJSONModuleImport","singleBindingType","nonDefaultNamedSpecifier","phaseIdentifier","isPrecedingIdImportPhase","parseImportSourceAndAttributes","parseNext","maybeParseDefaultImportSpecifier","_node$specifiers2","parseImportAttributes","attrs","attrNames","parseModuleAttributes","useWith","Parser","getParser","moduleError","tokTypes","generateExportedTokenTypes","internalTokenTypes","getParserClass","parserClassCache","pluginList","_string","_literal","NO_PLACEHOLDER","placeholderPattern","createTemplateBuilder","defaultOpts","templateFnCache","templateAstCache","cachedOpts","tpl","extendedTrace","stringTemplate","literalTemplate","rootStack","assertExpressionStatement","makeStatementFormatter","unwrap","_builder","smart","_populate","buildLiteralData","defaultReplacements","replacement","normalizeReplacements","populatePlaceholders","buildTemplateCode","parseAndBuildMetadata","placeholderWhitelist","syntacticPlaceholders","isPlaceholder","removePropertiesDeep","PATTERN","parseWithCodeFrame","syntactic","placeholderNames","legacy","placeholderVisitorHandler","ancestors","_state$placeholderWhi","hasSyntacticPlaceholders","resolveAncestors","isDuplicate","emptyStatement","placeholderName","reverse","applyReplacement","pathsCache","clearPath","clearScope","nullHub","getCachedPaths","_pathsCache$get","getOrCreateCachedPaths","_hub2","_hub3","parents","_context","TraversalContext","shouldVisit","listKey","maybeQueue","notPriority","priorityQueue","visitMultiple","visitQueue","visitSingle","visited","visitIndex","resync","contexts","pushContext","visit","popContext","Hub","_traverseNode","removeProperties","visitSelf","traverseNode","hasDenylistedType","verify","cheap","skipKeys","clearNode","hasType","denylistTypes","denylist","findParent","getFunctionParent","getStatementParent","isFile","getEarliestCommonAncestorFrom","getDeepestCommonAncestorFrom","deepest","ancestries","earliest","ancestry","parentKey","lastCommonIndex","lastCommon","minDepth","depthLoop","shouldMatch","getAncestry","isAncestor","maybeDescendant","isDescendant","maybeAncestor","candidateTypes","_addComment","addComments","_addComments","shareCommentsWithSiblings","trailing","getSibling","hasPrev","hasNext","removeIfExisting","toRemove","_removal","_call","_opts$this$node$type","fns","_traverseFlags","isDenylisted","_this$opts$denylist","restoreContext","_this$opts$shouldSkip","_this$opts","shouldSkip","shouldStop","skipKey","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","_path$opts","isSwitchStatement","_resyncParent","_resyncList","_resyncKey","setKey","inList","newContainer","_resyncRemoved","_markRemoved","_this$node","pathToQueue","requeueComputedKeyAndDecorators","decorator","_getQueueContexts","_visitors","arrowFunctionExpression","LOGICAL_OPERATORS","metaProperty","restElement","returnStatement","spreadElement","super","thisExpression","toExpression","toBindingIdentifierName","isRestElement","toComputedKey","isProperty","stringPath","unwrapFunctionEnvironment","hoistFunctionEnvironment","setType","arrowFunctionToExpression","_arguments$","allowInsertArrow","allowInsertArrowWithRest","noNewArrows","specCompliant","_self$ensureFunctionN","ensureFunctionName","thisBinding","fnPath","checkBinding","getSuperCallsVisitor","allSuperCalls","isSuper","arrowParent","thisEnvFn","_arrowParent","isClassPrivateProperty","inConstructor","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","superBinding","getSuperBinding","superCall","argumentsBinding","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","superProp","standardizeSuperProperty","superParentPath","isAssignment","isCall","isTaggedTemplate","getSuperPropBinding","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","assignmentPath","isLogicalAssignment","rightExpression","isUpdateExpression","updateExpr","computedKey","assignSuperThisVisitor","supers","replaceWithMultiple","argsBinding","propName","fnBody","argsList","valueIdent","setData","getScopeInformationVisitor","isJSXMemberExpression","isJSXOpeningElement","isReferencedIdentifier","isExportDeclaration","standaloneDeclaration","exportExpr","needBindingRegistration","updatedDeclaration","updatedExportDeclaration","aliasDeclar","refersOuterBindingVisitor","needsRename","supportUnicodeId","originalNode","getOwnBinding","hasGlobal","getProgramParent","references","getFunctionArity","findIndex","VALID_OBJECT_CALLEES","VALID_IDENTIFIER_CALLEES","INVALID_METHODS","isValidObjectCallee","isValidIdentifierCallee","isInvalidMethod","evaluateTruthy","evaluate","confident","deopt","deoptPath","Globals","evaluateCached","_evaluate","isSequenceExpression","exprs","isNumericLiteral","isBooleanLiteral","isNullLiteral","evaluateQuasis","isConditionalExpression","testResult","isExpressionWrapper","constantViolations","hasValue","isUnaryExpression","elemValue","isSpreadElement","keyPath","valuePath","isLogicalExpression","wasConfident","leftConfident","rightConfident","getAssignmentIdentifiers","_getAssignmentIdentifiers","getBindingIdentifiers","_getBindingIdentifiers","_getOuterBindingIdentifiers","NORMAL_COMPLETION","BREAK_COMPLETION","NormalCompletion","BreakCompletion","getOpposite","addCompletionRecords","records","_getCompletionRecords","completionRecordForSwitch","lastNormalCompletions","caseCompletions","normalCompletions","breakCompletions","normalCompletionToBreak","completions","replaceBreakStatementInBreakCompletion","reachable","isBreakStatement","getStatementListCompletion","canHaveBreak","inCaseClause","shouldPopulateBreak","statementCompletions","pathCompletions","isDoExpression","isWhile","isLabeledStatement","isTryStatement","isCatchClause","isSwitchCase","getCompletionRecords","getPrevSibling","getNextSibling","getAllNextSiblings","sibling","siblings","getAllPrevSiblings","_getKey","_getPattern","duplicates","getBindingIdentifierPaths","outerOnly","_ids","virtualTypes","NodePath_ancestry","NodePath_inference","NodePath_replacement","NodePath_evaluation","NodePath_conversion","NodePath_introspection","NodePath_context","NodePath_removal","NodePath_modification","NodePath_family","NodePath_comments","NodePath_virtual_types_validator","NodePath_Final","targetNode","hasNode","getPathLocation","methods","getTypeAnnotation","isBaseType","couldBeBaseType","baseTypeStrictlyMatches","isGenericType","replaceWithSourceString","replaceExpressionWithStatements","replaceInline","matchesPattern","isNodeType","canHaveVariableDeclarationOrExpression","canSwapBetweenExpressionAndStatement","isCompletionRecord","isStatementOrBlock","referencesImport","willIMaybeExecuteBefore","_guessExecutionStatusRelativeTo","isConstantExpression","isInStrictMode","pushContainer","arrowFunctionToShadowed","is","isnt","hoist","updateSiblingKeys","isBlacklisted","_guessExecutionStatusRelativeToDifferentFunctions","_getTypeAnnotation","_replaceWith","_removeFromScope","_callRemovalHooks","_remove","_assertUnremoved","_containerInsert","_containerInsertBefore","_containerInsertAfter","_verifyNodeList","TYPES","typeKey","inferers","anyTypeAnnotation","isAnyTypeAnnotation","isBooleanTypeAnnotation","isEmptyTypeAnnotation","isFlowBaseAnnotation","isGenericTypeAnnotation","isMixedTypeAnnotation","isNumberTypeAnnotation","isStringTypeAnnotation","isTSArrayType","isTSTypeAnnotation","isTSTypeReference","isTupleTypeAnnotation","isTypeAnnotation","isUnionTypeAnnotation","isVoidTypeAnnotation","stringTypeAnnotation","voidTypeAnnotation","typeAnnotationInferringNodes","isVariableDeclarator","declarParent","isForInStatement","_inferer","inferer","validParent","baseName","soft","_isBaseType","type2","rightArg","genericName","BOOLEAN_NUMBER_BINARY_OPERATORS","createTypeAnnotationBasedOnTypeof","numberTypeAnnotation","isReferenced","getTypeAnnotationBindingConstantViolations","functionConstantViolations","getConstantViolationsBefore","testType","getConditionalAnnotation","testConstantViolations","ifStatement","violation","createUnionType","functions","violations","inferAnnotationFromBinaryExpression","typeofPath","typePath","typeValue","getParentConditionalPath","_infererReference","BOOLEAN_BINARY_OPERATORS","BOOLEAN_UNARY_OPERATORS","NUMBER_BINARY_OPERATORS","NUMBER_UNARY_OPERATORS","STRING_UNARY_OPERATORS","arrayTypeAnnotation","booleanTypeAnnotation","buildMatchMemberExpression","genericTypeAnnotation","nullLiteralTypeAnnotation","tupleTypeAnnotation","unionTypeAnnotation","argumentTypes","Func","isArrayFrom","isObjectKeys","isObjectValues","isObjectEntries","resolveCall","createFlowUnionType","createTSUnionType","createUnionTypeAnnotation","isFlowType","isTSType","STATEMENT_OR_BLOCK_KEYS","_matchesPattern","allowPartial","allowInsideFunction","moduleSource","getOuterFunction","isExecutionUncertain","isExecutionUncertainInList","maxIndex","SYMBOL_CHECKING","_guessExecutionStatusRelativeToCached","commonPath","funcParent","_guessExecutionStatusRelativeToDifferentFunctionsCached","commonIndex","divergence","keyPosition","_guessExecutionStatusRelativeToDifferentFunctionsInternal","allStatus","referencePaths","nodeMap","dangerous","_resolved","isTypeCastExpression","targetKey","targetName","isRegExpLiteral","noGlobals","_t2","react","jsxExpressionContainer","referenceVisitor","isCompatTag","breakOnScopePaths","mutableBinding","PathHoister","isCompatibleScope","bindingIdentifierEquals","getCompatibleScopes","getAttachmentPath","_getAttachmentPath","targetScope","bindingParentPath","getAttachmentParentForPath","violationPath","attachAfter","hasOwnParamBindings","getNextScopeAttachmentParent","bodies","attachTo","declarator","attached","isJSXElement","isBlockScoped","nodeIsBlockScoped","nodeIsExpression","isFlow","nodeIsFlow","isForXStatement","nodeIsRestElement","nodeIsReferenced","nodeIsScope","nodeIsStatement","nodeIsVar","isReferencedMemberExpression","isBindingIdentifier","grandparent","isUser","isGenerated","isPure","constantsOnly","isRestProperty","_this$parentPath","isSpreadProperty","_this$parentPath2","isForAwaitStatement","_hoister","assertExpression","nodes_","shouldInsertCurrentNode","_this$context","isHiddenInSequenceExpression","isAlmostConstantAssignment","blockScope","getBlockParent","temp","fromIndex","incrementBy","verifiedNodes","hoister","_removalHooks","_replacement","_modification","removeBinding","hooks","REMOVED","FUNCTION_TYPES","awaitExpression","inheritLeadingComments","inheritTrailingComments","inheritsComments","isEmptyStatement","removeComments","yieldExpression","_getCachedPaths","expressionAST","replacementPath","nodePath","oldNode","_getCachedPaths2","declars","nodesAsSingleExpression","gatherSequenceExpressions","functionParent","isParentAsync","isParentGenerator","hoistVariables","newCallee","needToAwaitFunction","needToYieldFunction","ensureLastUndefined","Binding","deoptValue","clearValue","hasDeoptedValue","setValue","reassign","reference","dereference","isDeclaredInLoop","isFunctionParent","_renamer","_binding","_globals","NOT_LOCAL_BINDING","isModuleSpecifier","isPureish","isThisExpression","toIdentifier","isRecordExpression","isTupleExpression","isTopicReference","isMetaProperty","gatherNodeParts","collectorVisitor","parentScope","registerBinding","Declaration","isTSQualifiedName","isTSImportEqualsDeclaration","ExportDeclaration","assignments","BlockScoped","_parent","generateUid","hasLabel","hasReference","uids","generateUidBasedOnNode","defaultName","maybeGenerateMemoised","dontPush","checkBlockScopedCollisions","oldName","renamer","Renamer","dump","getLabel","registerLabel","isTypeDeclaration","isTypeSpecifier","registerConstantViolation","_this$getBinding","bindingPath","addGlobal","hasUid","_node$decorators","_node$decorators2","_node$decorators3","removeData","inited","crawling","programParent","isExplodedVisitor","typeVisitors","getPatternParent","unique","dataKey","declarPath","isBlockParent","getBindingIdentifier","previousPath","_previousPath","_this$getBinding2","getOwnBindingIdentifier","noUids","contextVariables","parentHasBinding","_this$parent","moveBindingTo","info","removeOwnBinding","_this$getBinding3","emit","firstId","_firstId","scopeCache","builtin","_renameFromMap","_generateUid","arrayLikeIsIterable","helperName","getAllBindingsOfKind","kinds","parentBlock","renameVisitor","maybeConvertFromExportDeclaration","parentDeclar","maybeExportDeclar","maybeConvertFromClassFunctionDeclaration","maybeConvertFromClassFunctionExpression","bindingIds","blockToTraverse","virtualTypesValidators","DEPRECATED_KEYS","DEPRECATED_ALIASES","__internal__deprecationWarning","deprecationWarning","isVirtualType","_exploded","explode$1","shouldIgnoreKey","verify$1","ensureEntranceObjects","ensureCallbackArrays","wrapCheck","mergePair","deprecatedKey","deprecatedAlias","_verified","validateVisitorMethods","visitorKey","states","mergedVisitor","topVisitor","wrapWithStateOrWrapper","typeVisitor","oldVisitor","newVisitor","newFn","dest","_environmentVisitor","FunctionParent","Property","_isNode","assertNode","isNode","_node$type","_deprecationWarning","assertArrayExpression","assertAssignmentExpression","assertBinaryExpression","assertInterpreterDirective","assertDirective","assertDirectiveLiteral","assertBlockStatement","assertBreakStatement","assertCallExpression","assertCatchClause","assertConditionalExpression","assertContinueStatement","assertDebuggerStatement","assertDoWhileStatement","assertEmptyStatement","assertFile","assertForInStatement","assertForStatement","assertFunctionDeclaration","assertFunctionExpression","assertIdentifier","assertIfStatement","assertLabeledStatement","assertStringLiteral","assertNumericLiteral","assertNullLiteral","assertBooleanLiteral","assertRegExpLiteral","assertLogicalExpression","assertMemberExpression","assertNewExpression","assertProgram","assertObjectExpression","assertObjectMethod","assertObjectProperty","assertRestElement","assertReturnStatement","assertSequenceExpression","assertParenthesizedExpression","assertSwitchCase","assertSwitchStatement","assertThisExpression","assertThrowStatement","assertTryStatement","assertUnaryExpression","assertUpdateExpression","assertVariableDeclaration","assertVariableDeclarator","assertWhileStatement","assertWithStatement","assertAssignmentPattern","assertArrayPattern","assertArrowFunctionExpression","assertClassBody","assertClassExpression","assertClassDeclaration","assertExportAllDeclaration","assertExportDefaultDeclaration","assertExportNamedDeclaration","assertForOfStatement","assertImportDeclaration","assertImportDefaultSpecifier","assertImportNamespaceSpecifier","assertImportSpecifier","assertImportExpression","assertMetaProperty","assertClassMethod","assertObjectPattern","assertSpreadElement","assertSuper","assertTaggedTemplateExpression","assertTemplateElement","assertTemplateLiteral","assertYieldExpression","assertAwaitExpression","assertImport","assertBigIntLiteral","assertExportNamespaceSpecifier","assertOptionalMemberExpression","assertOptionalCallExpression","assertClassProperty","assertClassAccessorProperty","assertClassPrivateProperty","assertClassPrivateMethod","assertPrivateName","assertStaticBlock","assertAnyTypeAnnotation","assertArrayTypeAnnotation","assertBooleanTypeAnnotation","assertBooleanLiteralTypeAnnotation","assertNullLiteralTypeAnnotation","assertClassImplements","assertDeclareClass","assertDeclareFunction","assertDeclareInterface","assertDeclareModule","assertDeclareModuleExports","assertDeclareTypeAlias","assertDeclareOpaqueType","assertDeclareVariable","assertDeclareExportDeclaration","assertDeclareExportAllDeclaration","assertDeclaredPredicate","assertExistsTypeAnnotation","assertFunctionTypeAnnotation","assertFunctionTypeParam","assertGenericTypeAnnotation","assertInferredPredicate","assertInterfaceExtends","assertInterfaceDeclaration","assertInterfaceTypeAnnotation","assertIntersectionTypeAnnotation","assertMixedTypeAnnotation","assertEmptyTypeAnnotation","assertNullableTypeAnnotation","assertNumberLiteralTypeAnnotation","assertNumberTypeAnnotation","assertObjectTypeAnnotation","assertObjectTypeInternalSlot","assertObjectTypeCallProperty","assertObjectTypeIndexer","assertObjectTypeProperty","assertObjectTypeSpreadProperty","assertOpaqueType","assertQualifiedTypeIdentifier","assertStringLiteralTypeAnnotation","assertStringTypeAnnotation","assertSymbolTypeAnnotation","assertThisTypeAnnotation","assertTupleTypeAnnotation","assertTypeofTypeAnnotation","assertTypeAlias","assertTypeAnnotation","assertTypeCastExpression","assertTypeParameter","assertTypeParameterDeclaration","assertTypeParameterInstantiation","assertUnionTypeAnnotation","assertVariance","assertVoidTypeAnnotation","assertEnumDeclaration","assertEnumBooleanBody","assertEnumNumberBody","assertEnumStringBody","assertEnumSymbolBody","assertEnumBooleanMember","assertEnumNumberMember","assertEnumStringMember","assertEnumDefaultedMember","assertIndexedAccessType","assertOptionalIndexedAccessType","assertJSXAttribute","assertJSXClosingElement","assertJSXElement","assertJSXEmptyExpression","assertJSXExpressionContainer","assertJSXSpreadChild","assertJSXIdentifier","assertJSXMemberExpression","assertJSXNamespacedName","assertJSXOpeningElement","assertJSXSpreadAttribute","assertJSXText","assertJSXFragment","assertJSXOpeningFragment","assertJSXClosingFragment","assertNoop","assertPlaceholder","assertV8IntrinsicIdentifier","assertArgumentPlaceholder","assertBindExpression","assertImportAttribute","assertDecorator","assertDoExpression","assertExportDefaultSpecifier","assertRecordExpression","assertTupleExpression","assertDecimalLiteral","assertModuleExpression","assertTopicReference","assertPipelineTopicExpression","assertPipelineBareFunction","assertPipelinePrimaryTopicReference","assertTSParameterProperty","assertTSDeclareFunction","assertTSDeclareMethod","assertTSQualifiedName","assertTSCallSignatureDeclaration","assertTSConstructSignatureDeclaration","assertTSPropertySignature","assertTSMethodSignature","assertTSIndexSignature","assertTSAnyKeyword","assertTSBooleanKeyword","assertTSBigIntKeyword","assertTSIntrinsicKeyword","assertTSNeverKeyword","assertTSNullKeyword","assertTSNumberKeyword","assertTSObjectKeyword","assertTSStringKeyword","assertTSSymbolKeyword","assertTSUndefinedKeyword","assertTSUnknownKeyword","assertTSVoidKeyword","assertTSThisType","assertTSFunctionType","assertTSConstructorType","assertTSTypeReference","assertTSTypePredicate","assertTSTypeQuery","assertTSTypeLiteral","assertTSArrayType","assertTSTupleType","assertTSOptionalType","assertTSRestType","assertTSNamedTupleMember","assertTSUnionType","assertTSIntersectionType","assertTSConditionalType","assertTSInferType","assertTSParenthesizedType","assertTSTypeOperator","assertTSIndexedAccessType","assertTSMappedType","assertTSLiteralType","assertTSExpressionWithTypeArguments","assertTSInterfaceDeclaration","assertTSInterfaceBody","assertTSTypeAliasDeclaration","assertTSInstantiationExpression","assertTSAsExpression","assertTSSatisfiesExpression","assertTSTypeAssertion","assertTSEnumBody","assertTSEnumDeclaration","assertTSEnumMember","assertTSModuleDeclaration","assertTSModuleBlock","assertTSImportType","assertTSImportEqualsDeclaration","assertTSExternalModuleReference","assertTSNonNullExpression","assertTSExportAssignment","assertTSNamespaceExportDeclaration","assertTSTypeAnnotation","assertTSTypeParameterInstantiation","assertTSTypeParameterDeclaration","assertTSTypeParameter","assertStandardized","assertBinary","assertScopable","assertBlockParent","assertBlock","assertStatement","assertTerminatorless","assertCompletionStatement","assertConditional","assertLoop","assertWhile","assertExpressionWrapper","assertFor","assertForXStatement","assertFunctionParent","assertPureish","assertDeclaration","assertPatternLike","assertLVal","assertTSEntityName","assertLiteral","assertImmutable","assertUserWhitespacable","assertMethod","assertObjectMember","assertProperty","assertUnaryLike","assertPattern","assertClass","assertImportOrExportDeclaration","assertExportDeclaration","assertModuleSpecifier","assertAccessor","assertPrivate","assertFlow","assertFlowType","assertFlowBaseAnnotation","assertFlowDeclaration","assertFlowPredicate","assertEnumBody","assertEnumMember","assertJSX","assertMiscellaneous","assertTypeScript","assertTSTypeElement","assertTSType","assertTSBaseType","assertNumberLiteral","assertRegexLiteral","assertRestProperty","assertSpreadProperty","assertModuleDeclaration","_removeTypeDuplicates","flattened","removeTypeDuplicates","_validate","utils","validateInternal","NODE_FIELDS","breakStatement","_arguments","catchClause","continueStatement","debuggerStatement","doWhileStatement","forInStatement","forStatement","functionDeclaration","FunctionDeclaration","labeledStatement","nullLiteral","regExpLiteral","newExpression","objectMethod","objectProperty","parenthesizedExpression","switchCase","switchStatement","throwStatement","tryStatement","updateExpression","whileStatement","withStatement","assignmentPattern","arrayPattern","classExpression","classDeclaration","exportAllDeclaration","exportDefaultDeclaration","forOfStatement","importExpression","classMethod","objectPattern","SpreadElement","taggedTemplateExpression","bigIntLiteral","exportNamespaceSpecifier","optionalMemberExpression","optionalCallExpression","classProperty","classAccessorProperty","classPrivateProperty","classPrivateMethod","staticBlock","booleanLiteralTypeAnnotation","classImplements","ClassImplements","declareClass","declareFunction","declareInterface","declareModule","declareModuleExports","declareTypeAlias","declareOpaqueType","declareVariable","declareExportDeclaration","declareExportAllDeclaration","declaredPredicate","existsTypeAnnotation","functionTypeAnnotation","functionTypeParam","GenericTypeAnnotation","inferredPredicate","interfaceExtends","interfaceDeclaration","interfaceTypeAnnotation","intersectionTypeAnnotation","mixedTypeAnnotation","emptyTypeAnnotation","nullableTypeAnnotation","numberLiteralTypeAnnotation","NumberLiteralTypeAnnotation","objectTypeAnnotation","objectTypeInternalSlot","objectTypeCallProperty","objectTypeIndexer","objectTypeProperty","objectTypeSpreadProperty","opaqueType","qualifiedTypeIdentifier","stringLiteralTypeAnnotation","StringLiteralTypeAnnotation","symbolTypeAnnotation","thisTypeAnnotation","typeofTypeAnnotation","typeAlias","typeCastExpression","typeParameterDeclaration","TypeParameterDeclaration","typeParameterInstantiation","enumDeclaration","enumBooleanBody","enumNumberBody","enumStringBody","enumSymbolBody","enumBooleanMember","enumNumberMember","enumStringMember","enumDefaultedMember","indexedAccessType","optionalIndexedAccessType","jsxAttribute","jsxClosingElement","jsxElement","jsxEmptyExpression","jsxSpreadChild","jsxNamespacedName","jsxOpeningElement","jsxSpreadAttribute","jsxFragment","jsxOpeningFragment","jsxClosingFragment","v8IntrinsicIdentifier","argumentPlaceholder","bindExpression","importAttribute","doExpression","exportDefaultSpecifier","recordExpression","tupleExpression","decimalLiteral","moduleExpression","topicReference","pipelineTopicExpression","pipelineBareFunction","pipelinePrimaryTopicReference","tsParameterProperty","tsDeclareFunction","tsDeclareMethod","tsQualifiedName","tsCallSignatureDeclaration","tsConstructSignatureDeclaration","tsPropertySignature","tsMethodSignature","tsIndexSignature","tsAnyKeyword","tsBooleanKeyword","tsBigIntKeyword","tsIntrinsicKeyword","tsNeverKeyword","tsNullKeyword","tsNumberKeyword","tsObjectKeyword","tsStringKeyword","tsSymbolKeyword","tsUndefinedKeyword","tsUnknownKeyword","tsVoidKeyword","tsThisType","tsFunctionType","tsConstructorType","tsTypeReference","tsTypePredicate","tsTypeQuery","tsTypeLiteral","tsArrayType","tsTupleType","tsOptionalType","tsRestType","tsNamedTupleMember","tsUnionType","tsIntersectionType","tsConditionalType","tsInferType","tsParenthesizedType","tsTypeOperator","tsIndexedAccessType","tsMappedType","tsLiteralType","tsExpressionWithTypeArguments","tsInterfaceDeclaration","tsInterfaceBody","tsTypeAliasDeclaration","tsInstantiationExpression","tsAsExpression","tsSatisfiesExpression","TSSatisfiesExpression","tsTypeAssertion","tsEnumBody","tsEnumDeclaration","tsEnumMember","tsModuleDeclaration","tsModuleBlock","tsImportType","tsImportEqualsDeclaration","tsExternalModuleReference","tsNonNullExpression","tsExportAssignment","tsNamespaceExportDeclaration","tsTypeAnnotation","tsTypeParameterInstantiation","tsTypeParameterDeclaration","TSTypeParameterDeclaration","tsTypeParameter","NumberLiteral","RegexLiteral","RestProperty","SpreadProperty","_cleanJSXElementLiteralChild","buildChildren","isJSXText","cleanJSXElementLiteralChild","isJSXExpressionContainer","isJSXEmptyExpression","typeAnnotations","_cloneNode","cloneDeepWithoutLoc","cloneIfNode","withoutLoc","commentsCache","cloneNodeInternal","cloneIfNodeOrArray","field","maybeCloneComments","cloneWithoutLoc","_inherit","inheritInnerComments","inherit","_inheritTrailingComments","_inheritLeadingComments","_inheritInnerComments","COMMENT_KEYS","IMPORTOREXPORTDECLARATION_TYPES","EQUALITY_BINARY_OPERATORS","COMPARISON_BINARY_OPERATORS","_toBlock","toBlock","_productions","_toIdentifier","blockNodes","_isValidIdentifier","isValidIdentifier","_removePropertiesDeep","toKeyAlias","increment","_gatherSequenceExpressions","toSequenceExpression","toStatement","newType","mustHaveId","isPlainObject","numerator","nodeKey","_helperStringParser","defineType","defineAliasedType","arrayOf","assertNodeOrValueType","BABEL_TYPES_8_BREAKING","assertOneOf","ASSIGNMENT_OPERATORS","assertValueType","assertNodeType","BINARY_OPERATORS","inOp","oneOfNodeTypes","arrayOfType","validateArrayOfType","assertEach","each","functionCommon","functionTypeAnnotationCommon","functionDeclarationCommon","patternLikeCommon","nonComp","normal","UNARY_OPERATORS","UPDATE_OPERATORS","withoutInit","deprecated","validateOptional","validateType","sourced","sourceless","lval","classMethodOrPropertyCommon","classMethodOrDeclareMethodCommon","assertShape","unterminatedCalled","assertOptionalChainStart","ModuleDeclaration","defineInterfaceishType","isDeclareClass","validateOptionalType","_placeholders","_deprecatedAliases","PLACEHOLDERS","PLACEHOLDERS_ALIAS","Pattern","ALIAS_KEYS","PLACEHOLDERS_FLIPPED_ALIAS","bool","tSFunctionTypeAnnotationCommon","signatureDeclarationCommon","callConstructSignatureDeclaration","namedTypeElementCommon","fnOrCtrBase","unionOrIntersection","unaryOperator","BUILDER_KEYS","NODE_PARENT_VALIDATIONS","getType","typeNames","childValidator","validateChild","subkey","oneOfNodeOrValueTypes","validateField","shapeOf","_current","chainOf","validTypeOpts","validFieldKeys","store","defined","_store$opts$inherits$","_defined","additional","getOwnPropertyNames","_isReactComponent","_isCompatTag","_buildChildren","_assertNode","_exportNames","_createTypeAnnotationBasedOnTypeof","_createFlowUnionType","_createTSUnionType","_uppercase","_clone","_cloneDeepWithoutLoc","_cloneWithoutLoc","_inheritsComments","_removeComments","_index3","_index4","_ensureBlock","_toBindingIdentifierName","_toComputedKey","_toExpression","_toKeyAlias","_toStatement","_valueToNode","_index5","_appendToMemberExpression","_prependToMemberExpression","_removeProperties","_getFunctionName","_traverseFast","_shallowEqual","_isBinding","_isBlockScoped","_isImmutable","_isLet","_isNodesEquivalent","_isPlaceholderType","_isReferenced","_isScope","_isSpecifierDefault","_isType","_isValidES3Identifier","_isVar","_buildMatchMemberExpression","_index6","isReactComponent","appendToMemberExpression","getQualifiedName","nodesIn","bases","typeGroups","INHERIT_KEYS","prependToMemberExpression","prepend","CLEAR_KEYS","CLEAR_KEYS_PLUS_COMMENTS","getOwnPropertySymbols","isTSAnyKeyword","isTSBaseType","isTSUnionType","typeArgumentsKey","existingTypeArguments","newBindingsOnly","getNameFromLiteralId","getObjectMemberKey","traverseSimpleImpl","subNode","warnings","internal","captureShortStackTrace","stackTrace","shortStackTrace","lastNonEmptyLine","isFirstLine","isLastLine","isLastNonEmptyLine","trimmedLine","shallowEqual","isInterpreterDirective","isDirective","isDirectiveLiteral","isContinueStatement","isDebuggerStatement","isDoWhileStatement","isReturnStatement","isThrowStatement","isWhileStatement","isWithStatement","isArrayPattern","isImportExpression","isTemplateElement","isAwaitExpression","isBigIntLiteral","isClassAccessorProperty","isClassPrivateMethod","isStaticBlock","isBooleanLiteralTypeAnnotation","isNullLiteralTypeAnnotation","isClassImplements","isDeclareFunction","isDeclareInterface","isDeclareModule","isDeclareModuleExports","isDeclareTypeAlias","isDeclareOpaqueType","isDeclareVariable","isDeclareExportAllDeclaration","isDeclaredPredicate","isExistsTypeAnnotation","isFunctionTypeAnnotation","isFunctionTypeParam","isInferredPredicate","isInterfaceExtends","isInterfaceDeclaration","isInterfaceTypeAnnotation","isIntersectionTypeAnnotation","isNullableTypeAnnotation","isNumberLiteralTypeAnnotation","isObjectTypeAnnotation","isObjectTypeInternalSlot","isObjectTypeCallProperty","isObjectTypeIndexer","isObjectTypeProperty","isObjectTypeSpreadProperty","isOpaqueType","isQualifiedTypeIdentifier","isStringLiteralTypeAnnotation","isSymbolTypeAnnotation","isThisTypeAnnotation","isTypeofTypeAnnotation","isTypeAlias","isTypeParameter","isTypeParameterDeclaration","isTypeParameterInstantiation","isVariance","isEnumDeclaration","isEnumBooleanBody","isEnumNumberBody","isEnumStringBody","isEnumSymbolBody","isEnumBooleanMember","isEnumNumberMember","isEnumStringMember","isEnumDefaultedMember","isOptionalIndexedAccessType","isJSXAttribute","isJSXClosingElement","isJSXSpreadChild","isJSXNamespacedName","isJSXSpreadAttribute","isJSXFragment","isJSXOpeningFragment","isJSXClosingFragment","isNoop","isV8IntrinsicIdentifier","isArgumentPlaceholder","isBindExpression","isImportAttribute","isDecimalLiteral","isModuleExpression","isPipelineTopicExpression","isPipelineBareFunction","isPipelinePrimaryTopicReference","isTSParameterProperty","isTSDeclareFunction","isTSDeclareMethod","isTSCallSignatureDeclaration","isTSConstructSignatureDeclaration","isTSPropertySignature","isTSMethodSignature","isTSIndexSignature","isTSBooleanKeyword","isTSBigIntKeyword","isTSIntrinsicKeyword","isTSNeverKeyword","isTSNullKeyword","isTSNumberKeyword","isTSObjectKeyword","isTSStringKeyword","isTSSymbolKeyword","isTSUndefinedKeyword","isTSUnknownKeyword","isTSVoidKeyword","isTSThisType","isTSFunctionType","isTSConstructorType","isTSTypePredicate","isTSTypeQuery","isTSTypeLiteral","isTSTupleType","isTSOptionalType","isTSRestType","isTSNamedTupleMember","isTSIntersectionType","isTSConditionalType","isTSInferType","isTSParenthesizedType","isTSTypeOperator","isTSIndexedAccessType","isTSMappedType","isTSLiteralType","isTSExpressionWithTypeArguments","isTSInterfaceDeclaration","isTSTypeAliasDeclaration","isTSInstantiationExpression","isTSAsExpression","isTSSatisfiesExpression","isTSTypeAssertion","isTSEnumBody","isTSEnumDeclaration","isTSModuleDeclaration","isTSModuleBlock","isTSImportType","isTSExternalModuleReference","isTSNonNullExpression","isTSExportAssignment","isTSNamespaceExportDeclaration","isTSTypeParameterInstantiation","isTSTypeParameterDeclaration","isTSTypeParameter","isStandardized","isScopable","isBlock","isTerminatorless","isCompletionStatement","isConditional","isPatternLike","isLVal","isTSEntityName","isImmutable","isUserWhitespacable","isObjectMember","isUnaryLike","isImportOrExportDeclaration","isFlowDeclaration","isFlowPredicate","isEnumBody","isEnumMember","isMiscellaneous","isTypeScript","isTSTypeElement","isNumberLiteral","isRegexLiteral","isModuleDeclaration","isPlaceholderType","BLOCK_SCOPED_SYMBOL","isNodesEquivalent","val_a","val_b","placeholderType","targetType","isSpecifierDefault","RESERVED_WORDS_ES3_ONLY","isValidES3Identifier","reserved","tagName","maybeNode","_NODE_PARENT_VALIDATI","_NODE_PARENT_VALIDATI2","possibleNames","freeSelf","freeGlobal","objectProto","nativeObjectToString","symToStringTag","unmasked","nullTag","undefinedTag","getRawTag","symbolTag","isObjectLike","baseGetTag","NAN","iteratee","INFINITY","symbolProto","symbolToString","baseToString","arrayMap","baseToNumber","createMathOperation","augend","addend","reWhitespace","reTrimStart","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","baseTrim","MAX_INTEGER","toNumber","toFinite","remainder","FUNC_ERROR_TEXT","toInteger","asyncTag","funcTag","genTag","proxyTag","maskSrcKey","coreJsData","funcToString","funcProto","reRegExpChar","reIsHostCtor","reIsNative","isMasked","toSource","getValue","baseIsNative","getNative","metaMap","objectCreate","Ctor","baseCreate","WRAP_BIND_FLAG","bitmask","isBind","createCtor","nativeMax","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","MAX_ARRAY_LENGTH","LazyWrapper","baseLodash","realNames","otherFunc","LodashWrapper","chainAll","copyArray","lodash","wrapperClone","funcName","getFuncName","HOT_COUNT","HOT_SPAN","nativeNow","lastCalled","stamp","shortOut","baseSetData","reWrapDetails","reSplitDetails","reWrapComment","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseIndexOf","wrapFlags","arrayEach","arrayIncludes","setToString","insertWrapDetails","updateWrapDetails","getWrapDetails","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","wrapFunc","argPos","ary","isCurry","newHolders","newHoldersRight","newPartials","newPartialsRight","isLaziable","setWrapToString","reIsUint","nativeMin","oldArray","isIndex","PLACEHOLDER","resIndex","WRAP_CURRY_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_FLIP_FLAG","createHybrid","partialsRight","holdersRight","isAry","isBindKey","isFlip","getHolder","holdersCount","countHolders","composeArgs","composeArgsRight","replaceHolders","createRecurry","reorder","WRAP_REARG_FLAG","srcBitmask","newBitmask","isCommon","isCombo","mergeData","createCurry","createPartial","createBind","setter","guard","createWrap","objValue","baseAssignValue","customizer","isNew","assignValue","otherArgs","overRest","isLength","isArrayLike","assigner","baseRest","isIterateeCall","argsTag","baseIsArguments","freeExports","freeModule","moduleExports","nativeIsBuffer","stubFalse","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","freeProcess","nodeIsTypedArray","nodeUtil","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isBuff","skipIndexes","baseTimes","overArg","isPrototype","nativeKeys","arrayLikeKeys","baseKeys","createAssigner","nativeKeysIn","isProto","baseKeysIn","keysIn","srcIndex","reIsDeepProp","reIsPlainProp","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","arrayProto","assocIndexOf","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","isKey","castPath","toKey","baseGet","spreadableSymbol","baseFlatten","isStrict","isFlattenable","arrayPush","flatRest","baseAt","objectCtorString","getPrototype","domExcTag","methodNames","bindKey","baseSlice","reHasUnicode","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsOptJoin","rsSeq","reUnicode","hasUnicode","unicodeToArray","asciiToArray","strSymbols","stringToArray","chr","castSlice","createCaseFirst","upperFirst","accumulator","initAccum","basePropertyOf","reLatin","reComboMark","deburrLetter","reAsciiWord","reHasUnicodeWord","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsOrdLower","rsOrdUpper","rsEmoji","reUnicodeWord","hasUnicodeWord","unicodeWords","asciiWords","reApos","arrayReduce","words","deburr","createCompounder","capitalize","nativeIsFinite","precision","createRound","nativeCeil","lower","upper","baseClamp","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","isDeep","nativeGetSymbols","arrayFilter","stubArray","getSymbolsIn","keysFunc","symbolsFunc","baseGetAllKeys","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","dataView","cloneArrayBuffer","reFlags","symbolValueOf","float32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","nodeIsMap","baseIsMap","nodeIsSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","SetCache","setCacheAdd","setCacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalFunc","isPartial","othLength","arrStacked","othStacked","othValue","compared","arraySome","othIndex","cacheHas","convert","mapToArray","setToArray","equalArrays","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","baseProperty","basePropertyDeep","baseMatchesProperty","baseMatches","toIteratee","baseIteratee","baseConformsTo","baseConforms","iterable","createBaseFor","baseFor","eachFunc","collection","createBaseEach","baseForOwn","baseEach","arrayAggregator","baseAggregator","createAggregator","curry","curryRight","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","propsIndex","propsLength","mergeFunc","safeGet","assignMergeValue","isTyped","isArrayLikeObject","toPlainObject","baseMerge","baseMergeDeep","customDefaultsMerge","mergeWith","baseDelay","valuesLength","arrayIncludesWith","outer","valuesIndex","baseDifference","dividend","isDrop","baseWhile","castFunction","baseForRight","baseForOwnRight","arrayEachRight","baseEachRight","setToPairs","baseToPairs","createToPairs","reUnescapedHtml","reHasUnescapedHtml","escapeHtmlChar","reHasRegExpChar","arrayEvery","baseEvery","toLength","baseFill","baseFilter","findIndexFunc","createFind","baseFindKey","baseMap","funcs","prereq","createFlow","baseFunctions","createRelationalOperation","baseGt","baseHas","baseInRange","baseValues","arrays","caches","maxLength","mapped","castArrayLikeObject","baseIntersection","baseInverter","createInverter","baseInvoke","nodeIsArrayBuffer","baseIsArrayBuffer","nodeIsDate","baseIsDate","CORE_ERROR_TEXT","isMaskable","nodeIsRegExp","baseIsRegExp","weakSetTag","nativeJoin","strictLastIndexOf","baseLt","baseExtremum","baseSum","baseMean","actions","multiplier","multiplicand","symIterator","iteratorToArray","baseNth","customOmitClone","baseUnset","baseSet","basePickBy","pickBy","negate","comparer","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","orders","objCriteria","othCriteria","ordersLength","compareAscending","order","iteratees","baseSortBy","compareMultiple","baseOrderBy","arrayFunc","createOver","castRest","funcsLength","nativeFloor","unicodeSize","asciiSize","charsLength","baseRepeat","stringSize","strLength","createPadding","nativeParseInt","partialRight","basePick","previous","baseIndexOfWith","basePullAll","pullAll","basePullAt","nativeRandom","freeParseFloat","floating","rand","baseRandom","baseRange","createRange","baseReduce","arrayReduceRight","nativeReverse","arraySample","baseSample","shuffleSelf","arraySampleSize","baseSampleSize","arrayShuffle","baseShuffle","baseSome","MAX_ARRAY_INDEX","retHighest","valIsNaN","valIsUndefined","setLow","HALF_MAX_ARRAY_LENGTH","baseSortedIndexBy","baseSortedIndex","baseSortedUniq","minuend","subtrahend","interceptor","stringEscapes","reInterpolate","INVALID_TEMPL_VAR_ERROR_TEXT","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reForbiddenIdentifierChars","reEsTemplate","reNoMatch","reUnescapedString","settings","templateSettings","assignInWith","customDefaultsAssignIn","isEscaping","isEvaluating","importsKeys","importsValues","interpolate","reDelimiters","sourceURL","escapeValue","esTemplateValue","evaluateValue","escapeStringChar","attempt","debounce","baseWrapperValue","isArrLike","chrSymbols","charsStartIndex","charsEndIndex","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","omission","newEnd","reEscapedHtml","reHasEscapedHtml","unescapeHtmlChar","createSet","seenIndex","baseUniq","idCounter","unzip","updater","baseUpdate","thru","wrapped","baseXor","assignFunc","valsLength","baseZipObject","unzipWith","chunk","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","flattenDeep","flattenDepth","fromPairs","intersectionBy","intersectionWith","lastIndexOf","nth","pull","pullAllBy","pullAllWith","pullAt","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniqBy","uniqWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","countBy","findLast","flatMap","flatMapDeep","flatMapDepth","forEachRight","groupBy","invokeMap","keyBy","orderBy","reduceRight","sample","sampleSize","shuffle","sortBy","defer","delay","flip","overArgs","rearg","spread","throttle","unary","castArray","cloneDeepWith","cloneWith","conformsTo","isElement","isEqual","isEqualWith","isMatch","isMatchWith","isNil","isSafeInteger","toSafeInteger","ceil","maxBy","mean","meanBy","minBy","subtract","sumBy","inRange","assignIn","assignWith","defaultsDeep","findKey","findLastKey","forIn","forInRight","forOwnRight","functionsIn","invert","invertBy","invoke","mapKeys","mapValues","omit","omitBy","pick","setWith","toPairs","toPairsIn","unset","updateWith","valuesIn","commit","plant","tap","toIterator","toJSON","wrapperChain","camelCase","kebabCase","lowerCase","lowerFirst","padEnd","padStart","snakeCase","startCase","toLower","toUpper","trimEnd","trimStart","truncate","upperCase","bindAll","cond","conforms","defaultTo","flowRight","matchesProperty","methodOf","nthArg","over","overEvery","overSome","propertyOf","rangeRight","stubObject","stubString","stubTrue","toPath","uniqueId","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","isRight","getView","iterLength","takeCount","iterIndex","VERSION","LAZY_WHILE_FLAG","mixin","isObj","_mixin","seq","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","lazyClone","lazyReverse","lazyValue","mapDataSet","AttributeUpdateType","animate","ratio","curve","rePathCommand","enumCommandMap","commandFuncs","Curve","cubicCalc","one","Point","curveType","startPoint","curveClass","slope2","genLinearClosedTypeSegments","aCP1x","aCP1y","aCP2x","aCP2y","aY","cmd","customPath","easing","dy","generatorPathEasingFunc","NAMED_TAG","exporter","metadataKey","annotationTarget","paramOrPropertyMetadata","indexOrPropertyDescriptor","injectBase","ContributionProvider","serviceIdentifier","Hook","EnvContribution","Application","getAST","fillStyle","tempWidth","compatible","metrics","ascent","textMeasure","getContextFont","fontSizeScale","BindingScopeEnum","constructorFunc","constructorArgsMetadata","namedConstraint","bindingToSyntax","setModuleId","CanvasFactory","disc","_v1","quadraticAt","x0","DEFAULT_ABSOLUTE_TOLERATE","isNumberClose","DEFAULT_RELATIVE_TOLERATE","absTol","relTol","windowWH","defaultThemeObj","breakTag","DefaultStateAnimateConfig","ColorType","ResourceLoader","_strokeVec4","isFullStroke","noRotateCharList","genNumberType","visible","TransformUtil","layerMode","IncrementalDrawContribution","updateBounds","graphic","pickerService","ShadowRootPickItemInterceptorContribution","bindContributionProvider","getContainerSize","defaultHeight","getComputedStyle","computedWidth","computedHeight","anchor3d","_anchor","AutoEnablePlugins","dpr","zIdxArray","childMap","defaultZIndex","dirtyBounds","background","strokeVisible","strokeOpacity","y32","innerRadius","ArcRenderContribution","disableStroke","defined0","drawConnect","lastCurve","attribute","defaultAttribute","lastDefined","bottomList","stroke","areaAttribute","preLoadAllModule","pluginKey","pluginClass","cross","lastIdx","calculateAnchorOfBounds","anchorType","nativeContainer","wrapContainer","unmount","lightDir","DefaultConfig","LRU","ConicalCanvas","conicalCanvas","ColorInterpolate","ConicalPatternStore","clockwise","MathPickerContribution","contributions","pickServiceInterceptorContributions","DefaultCanvasPickerService","baseWindow","BaseEnvContribution","clientX","nativeEvent","loadBrowserEnv","NodeCanvas","loadNodeEnv","updateBoundsOfCommonOuterBorder","theme","aabbBounds","shadowBlur","outerBorder","defaultOuterBorder","arcTheme","arcAttribute","arc","cornerRadiusEnd","limitedOcr","maxOuterCornerRadius","cornerRadiusStart","cy","canvasRenderer","DefaultCanvasArcPicker","CanvasPickerContribution","CanvasArcPicker","DefaultMathArcPicker","MathArcPicker","startAngle","GraphicRender","Arc3dRender","pickPoint","globalMatrix","pickContext","DefaultCanvasArc3dPicker","CanvasArc3dPicker","DefaultCanvasAreaPicker","CanvasAreaPicker","DefaultMathAreaPicker","MathAreaPicker","innerBorder","doInnerBorder","borderStyle","circleAttribute","circle","DefaultCanvasCirclePicker","CanvasCirclePicker","DefaultMathCirclePicker","MathCirclePicker","drawContext","GlyphRender","CanvasGlyphPicker","DefaultMathGlyphPicker","MathGlyphPicker","renderBorder","doStroke","ImageRender","CanvasImagePicker","DefaultMathImagePicker","MathImagePicker","LineRender","DefaultCanvasLinePicker","CanvasLinePicker","DefaultMathLinePicker","MathLinePicker","pathAttribute","DefaultCanvasPathPicker","CanvasPathPicker","DefaultMathPathPicker","MathPathPicker","polygonTheme","POLYGON_UPDATE_TAG_KEY","drawPolygon","PolygonRender","DefaultCanvasPolygonPicker","CanvasPolygonPicker","DefaultMathPolygonPicker","MathPolygonPicker","faces","pyramid3d","pyramidAttribute","Pyramid3dRender","DefaultCanvasPyramid3dPicker","CanvasPyramid3dPicker","tb2","RectRenderContribution","DefaultBaseInteractiveRenderContribution","rectAttribute","picked","CanvasRectPicker","MathRectPicker","Rect3DRender","DefaultCanvasRect3dPicker","CanvasRect3dPicker","leftInt","topInt","rightInt","bottom","bottomInt","paragraph","baseline","descent","fillVisible","fVisible","richtext","RichTextRender","CanvasRichTextPicker","halfS","transX","transY","triangleH","rectW","StrokeSymbol","BaseSymbol","Arrow2LeftSymbol","arrow2Left","Arrow2RightSymbol","arrow2Right","Arrow2UpSymbol","arrow2Up","Arrow2DownSymbol","arrow2Down","LineVSymbol","lineV","LineHSymbol","lineH","lastP","builtinSymbolsMap","getAllMatches","allmatches","tagname","childNode","prettify","compress","compressedObj","tagObj","newJpath","xml","boundStroke","symbolType","parsedPath","CanvasSymbolPicker","DefaultMathSymbolPicker","MathSymbolPicker","bbox","fontFamily","textTheme","doFill","sVisible","textAttribute","fillCb","strokeCb","transform3dMatrixToContextMatrix","drawText","offsetX","offsetY","_y","TextRender","CanvasTextPicker","MathTextPicker","clip","linesLayout","swingEase","deltaX","WILDCARD","clock","trackingData","normalizedEvents","TimeOutTickHandler","_e","ManualTickHandler","getLayoutFromWidget","character","classC","cId","st","actInfo","act","ProcessorRegistry","characterType","processor","characterId","actionName","actionSpec","globalTicker","defaultGlobalTimeline","arrayParser","idIndex","fieldInfo","sortInfo","VChartId","detail","newTokenToLegacyToken","palette","fold","EOL","EOF","QUOTE","RETURN","objectConverter","columns","customConverter","row","inferColumns","columnSet","formatYear","year","formatDate","hours","minutes","seconds","milliseconds","reFormat","DELIMITER","parseRows","eol","preformatBody","formatRow","csv","dsv","csvParse","tsv","tsvParse","series","ChartConstructor","regionType","colorScheme","seriesType","seriesMarkInfoMap","bar3d","circularProgress","getFunnelTheme","PREFIX","circlePath","axisBand","commonAxis","axisLinear","axisRadius","DataZoomHandlerSymbolType","getTextStyle","fontSizeKey","fillKey","discreteLegend","getCommonLabelTheme","markPoint","queryToken","tokenKey","ThemeManager","visitPoints","orient","targetDimensionInfo","ComposedEventMapper","eType","composedEvent","hasRaf","encoder","bubble","chart","listenerParams","streamGeometry","geometry","streamGeometryType","streamObjectType","streamLine","streamPolygon","geometries","coordinate","Adder","adder","bv","av","epsilon2","halfPi","quarterPi","degrees","radians","atan","atan2","cos","exp","sin","sqrt","acos","asin","x00","y00","y0","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","area","areaPointFirst","areaPoint","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","dx","centroidPointFirstRing","centroidPointRing","PathContext","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","projection","projectionStream","contextStream","pointRadius","pathArea","pathMeasure","pathBounds","pathCentroid","cloneFeature","cloneProperties","cloneGeometry","cloneFeatureCollection","feature","deepSlice","coords","coord","getCoords","booleanClockwise","ring","factors","earthRadius","featureCollection","lengthToRadians","factor","coordEach","excludeWrapCoord","stopG","geometryMaybeCollection","isGeometryCollection","wrapShrink","coordIndex","isFeatureCollection","isFeature","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","featureEach","geomEach","featureProperties","featureBBox","featureId","flattenEach","rewindFeature","rewindLineString","rewindPolygon","lineCoords","mutate","geoPathInstance","kx","ky","topology","transformPoint","arcs","polygon","registerDataSetInstanceTransform","dataSet","unregisterMapSource","geoSourceMap","_deep","existDataView","dependency","parseFunctionType","signal","datumOrGrammarInstance","grammar","grammarInstance","transformSpecValue","moveToHead","Heap","eventConfig","touchKey","touch","defineSrPosition","client","EVENT_SOURCE_WINDOW","SIGNAL_WIDTH","padding","commonAttributes","nextAttrs","storedAttrs","graphicAttributes","graphicItem","groupedData","currentData","prevData","fieldStr","fieldSingle","prevLength","initAttrs","groupKey","DEFAULT_PADDING","defaultMarkTheme","newGraphicItem","DefaultKey","prevChild","regionCombindInteractions","region","stateValue","USER_LAYOUT_RECT_LEVEL","DEFAULT_LAYOUT_RECT_LEVEL","LayoutLevel","CompilableBase","updateFunc","noRender","chartSpec","startItems","layout","singleLineItems","chartLayoutRect","relativeRegion","calculateTicksOfSingleValue","tickCount","noDecimals","hexToRgb","interpolateNumber","interpolateDate","aVal","clamper","untransformer","GradientType","MultiDatumMark","is3DMark","stateInfo","styleConverter","stateStyle","foregroundColorOrigin","foregroundColor","backgroundColor","alternativeColor","StateValue","indexEnd","animationConfig","quadrant","xGroupTexts","baseMarkGroup","labelComponentMap","vx","xDistance","cachedEvent","cachedEvents","_a","channel","toKeys","computePoints","animationParameters","custom","animationOptions","typeConfig","arranger","ExpressionFunction","actionSource","chartSpecInfo","globalInstance","DEFAULT_SHAPE_SIZE","itemKey","ElementSelectByGraphicName","ToggleStateMixin","newStatedElements","prevStatedElements","reverseState","initSVGDataSet","svgDataSet","unregisterSVGSource","svgSourceMap","morphConfig","_c","poptip","addVChartProperty","TimeUtil","_g","_seriesField","maxInArray","dataFieldInKey","invalidType","Appear_ClipIn","clipIn","clipDimension","scaleIn","attributeAngle","finalAngle","oneByOne","hasAnimation","DEFAULT_SMOOTH_INTERPOLATE","DEFAULT_CLOSE_STROKE_JOIN","lineLikeSeriesMark","isSeriesMark","userCurveType","areaCurveType","symbolMark","newIndices","lastY","regions","domain","domain1","s1Extendable_max","targetAxis","service","axis","labelOffset","getComponentThemeFromOption","chartTheme","componentSpec","itKey","oldEl","GroupFadeOut","ACustomAnimate","scaleParser","gridMark","autoRotate","vector1","DEFAULT_AXIS_THEME","parsedPadding","symbolPlaceWidth","richTextAttrs","richTextAttributeTransform","genNormalBounds","getCircleVerticalVector","inside","lastHover","getElMap","axisContainer","labelRotateAngle","overflowLimitLength","limitLength","alignAxisLabels","containerSize","align","axisVector","tickValue","axisBreakGroup","heightLimit","tickLength","labelHeight","textBaseline","lastScaleGrammar","axisTheme","axisPoints","alternateColor","gridType","gridAttribute","tickSegment","targetElement","setDomain","breaks","bins","scopeType","rangeSize","tick","newRange","_b","regionId","regionIdList","currentChartSpecInfo","pickKeys","DEFAULT_CHART_WIDTH","DEFAULT_CHART_HEIGHT","stackValue","isOverall","barBackgroundData","dimensionItems","valueInScaleRange","seriesSpec","visualSpec","sizeSpec","ScatterChart","Intersection","compareIntersection","startInside","subject","link","isSubject","spherical","cartesian","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","cartesianNormalizeInPlace","longitude","sinPhi","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","phiArc","ascendingComparator","ascending","ascendingBisect","bisector","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","lineEnd","pointRing","ringStart","ringEnd","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","circleStream","cosRadius","sinRadius","circleRadius","cr","smallRadius","notHemisphere","c0","v00","point2","two","n2n2","n1n2","n1xn2","uu","polar","meridian","q1","clipMax","clipMin","clipRectangle","corner","comparePoint","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","polygonStart","polygonEnd","polygonInside","a0","b0","cleanInside","linePoint","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","forward","transformer","TransformStream","fit","fitBounds","geoStream","boundsStream","fitExtent","extent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","project","delta2","resample","resampleNone","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","scaleTranslateRotate","cosAlpha","sinAlpha","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","clipCircle","conicProjection","cylindricalEqualAreaRaw","conicEqualAreaRaw","sy0","r0","r0y","conicEqualArea","multiplex","streams","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","azimuthalRaw","cx","azimuthalInvert","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","clipExtent","reclip","tany","conicConformalRaw","cy0","fy","equirectangularRaw","conicEquidistantRaw","gy","nx","A1","A2","A3","A4","equalEarthRaw","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","projectionType","projectionOptions","projectionProperties","lonValue","longitudeField","lon","DeskTopTrigger","MobileTrigger","eventObj","regionOrSeries","delayType","delayTime","specInfos","t_x","pathGroup","originalConfig","newSpec","startAngleFromSpec","endAngleFromSpec","getLayoutRect","getCenter","layoutRadius","registerPie3dSeries","registerPie3dAnimation","isArraySpec","componentName","textX","labelStyle","roseMark","animationType","RadarChart","relatedAxis","barMaxWidth","CommonChart","activeType","linkDotInfo","LinkSeries","dataToPosition","objFlat","dataCollect","DEFAULT_GRID_BACKGROUND","DotSeries","SCROLL_BAR_DEFAULT_SIZE","rowNum","BaseHistogramChartSpecTransformer","subTickData","angleAxis","pointerSpec","backgroundSeries","DEFAULT_ROTATE_ANGLES","wordCount","WordCloudScaleInAnimation","triangleForward","spirals","archimedeanSpiral","rectangularSpiral","imageData","cacheCanvas","prevWidth","fontWeight","fontSize","segmentationInput","layoutConfig","segmentationOutput","regionWords","placedFillingWords","fillingTimes","registerWordCloudSeries","register3DPlugin","viewDataTransform","funnelTransformMark","outerLabelMark","labelMark","progress","realCornerRadius","rangeColumnPresetAnimation","labelSpec","RangeColumn3dSeries","sunburstPresetAnimation","flattenNodes","hasMaxDepth","SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD","hierarchyData","DrillEnum","outerRadius","gap","viewBox","nodeValue","minValue","sumValue","upstreamData","indexData","dimensionTree","groupData","waterfallAnimationParams","outlierValues","outliersField","markName","animateAttributes","encodeValue","sankeyNodePresetAnimation","linkDatum","lowValue","highValue","relativeX","viewX","scrollContainer","loadScrollbar","scrollbarModule","userEncodeRes","sizeX","registerHeatmapAnimation","valueGetter","ripple","layerTickData","niceDomain","CartesianLogAxis","slience","CartesianSymlogAxis","isHorizontal","loadBaseLegend","disableTriggerEvent","legendItem","seriesField","eachSeries","seriesData","scaleSpec","statisticData","datumField","seriesMin","handlerText","getSizeHandlerPath","centerX","railWidth","continuousLegendFilter","continuousLegendDataMake","legendData","finalSpec","cacheData","tooltipData","LayoutType","triggerConfig","trigger","xCrossHairInfo","xAxisMap","relativeY","yAxisMap","vertical","updateAttrs","radiusCrossHairInfo","enableRemain","angleCrossHairInfo","cacheAngleCrossHairInfo","formatMethod","angleAxisMap","radiusAxisMap","axisMap","currValue","discrete","crosshairInfo","getNewDomain","newDomain","axisScale","simplifyRadialDist","sqTolerance","DEFAULT_HANDLER_PATH","yScale","DEFAULT_INDICATOR_THEME","titleStyle","AGGR_TYPE","domainNum","regionStartLayoutStartPoint","relativeSeries","registerImage","computeOffsetForlimit","forceUpdateTag","dispatchClickState","graphicFadeIn","markLabel","getInsertPoints","xField","markerFilter","transformState","markLineAttrs","tangAng","subTitleAlign","subTitleVerticalAlign","DEFAULT_STATES","doAngleProcess","iconPlay","defaultControllerAttributes","transformToGraphic","markSpec","dataLabels","hover","registerLabelMark","LabelMark","labelInfo","STACK_FIELD_TOTAL","deltaXYToAngle","itemPosition","newItemPosition","targetSymbol","DEFAULT_BRUSH_ATTRIBUTES","brush","componentIndex","operateMask","curPair","extraWH","relativeOverlapItems","overlapItems","xAxis","popTipWidth","poptipHeight","backgroundStyle","maxWH","deltaH","contentShape","interactiveLayer","TOOLTIP_PREFIX","registerComponentPlugin","createSymbol","shapeType","tooltipSpec","chilren","setStyleToDom","getRichTextAttribute","itemAttr","textLines","textConfig","shadow","commonSpaceRow","itemAttrs","itemHeight","layerCanvas","panel","formatDecimal","formatGroup","grouping","thousands","coefficient","formatTrim","registerChartPlugin","mergeChartOption","performanceHook","pushHookToTemp","chartStage","stageMatrix","vchartStage","nextP","pointInChart","chartTypes","chartModule","DEFAULTFONTSIZE","paddingOrigin","_table","axisRange","getRange","axisOption","titleAngle","titleTextStyle","indicatorKey","indicatorObj","checkHasCartesianChart","indicatorsDefine","isHasCartesianChart","columnObj","elm","getCellRange","cellRange","createArray","ingoreNoneValueMerge","timer","record","maybePromiseOrValue","fieldGet","isFieldAssessor","dataSourceObj","dataConfig","another","dataSourceEventIds","bodyStyle","headerStyle","checkboxThemeStyle","radioThemeStyle","columnStyle","Env","scrollStyle","TABLE_EVENT_TYPE","useRAF","newSize","windowSizeNotChange","frozenRowCount","getAxisStyle","axisStyle","getSingleAxisStyle","superTheme","defaultStyle","TableTheme","fillOpacity","dom","needRestore","customMerge","componentId","isHeaderCustomLayout","customRenderObj","themeIconsColor","calcKeepAspectRatioSize","maxWidth","maxHeight","calcStartPosition","contentWidth","contentHeight","paddingLeft","paddingRight","paddingTop","paddingBottom","moreThanMaxCharacters","icon","cellGroup","cellTheme","strokeArrayWidth","getCellBorderStrokeWidth","dealPromiseData","dataPromise","tabel","shadowRect","customElementsGroup","cellWidth","cellHeight","utilCheckBoxMark","suffixWidth","utilTextMark","rowStart","startCol","newHeights","getCellMergeRange","scene","mergeStartCol","cell","updateColunmWidth","rightBottomColumn","tableMenuInfo","highlightIndex","menuStyle","iconOption","columnMoverLineColor","getColX","isRightFrozen","componentGroup","labelFontSize","columnResizeLabelBack","rectAttributes","cornerRadius","chartInstance","formatResult","colStart","colEnd","groupAttribute","strokeArrayColor","isWidthNumber","widthInfo","distCol","bodyColGroup","moveColumnGroup","proxy","screenLeftX","distEndCol","colGroup","screenTopRow","syncBottomRow","columnGroup","cellPos","changedCells","defaultColWidth","totalBodyWidth","totalActualBodyColCount","totalActualBodyRowCount","moveHeaderPosition","updateColStart","updateColEnd","updateRowStart","updateRowEnd","moveType","columnWidth","columnHeaderGroup","selectComp","visibleCellRange","bodyClickBorderColor","moveSelectingRangeComponentsToSelectedRangeComponents","rangeComponent","deleteLastSelectedRangeComponents","rowUpdatePos","_getUpdateRowIndexUseCellNode","addRows","removeRows","_getUpdateRowIndex","internalProps","frozenBodyDomContainer","updateChartGraphicSize","cellNode","createContainerGroup","rightFrozenGroup","bottomFrozenGroup","updateContainerChildrenX","containerGroup","baseIcon","dealWithIcon","iconConfig","borderLineDash","dealWithAnimationAppear","temporarilyUpdateSelectRectStyle","selectedRangeComponents","updateRowHover","scenegraph","colOrigin","selectRanges","selectMode","singleStyle","highlightScope","cellPosContainHeader","dealFreeze","sortState","currentRange","extendSelectRange","updateDrill","drillDown","drillUp","headerType","adjustMoveHeaderTarget","sourceCellRange","targetCellRange","targetCell","getIconAndPositionFromTarget","updateResizeColumn","xInTable","yInTable","recordIndex","dataIndex","updateResizeRow","detaY","customSelectedRangeComponents","dimension","deltaY","cellGoup","eventManager","eventArgsSet","stateManager","targetCol","targetRow","cells","dimensionKey","titleShowIndex","iconResults","iconDefine","createElement","classNames","CLASSNAME","_showSort","sortIcon","headerC","frozen","absoluteX","startRow","startBottom","cellStyleKeys","customStyleIds","styleOption","customCellStyle","EventHandler","editCellTrigger","changedValue","fixUpdateRowRange","diffPositions","updateCells","rowEnd","generateAggregationForColumn","innerOffsetTop","tickWidth","labelWidth","iconHeight","spaceBetweenTextAndIcon","legend","BaseMenu","rootElement","Menu","dropDownMenuOptions","BaseTooltip","tooltipInstanceInfo","tooltipOptions","barHeight","barRectPosi","barRect","forceTickCountNice","registerListTreeStickCellPlugin","diffCellAddress","oldCellIds","newCellIds","oldRowHeaderCellPositons","columnHeaderStart","updateCellPositions","rowDimensionKeys","indicatorObject","flatRowKey","rowKey","strArr","joinChar","colKey","toComputeIndicatorKeys","cellDimensionPath","rowPath","layoutMap","vTable","vtableStage","animationAppear","SpecialValueType","repeatCount","isUTC","formattedDecimalPart","valueAbs","getContentValue","getLabelContent","formatConfig","enableMap","diffConfig","themeRuntimeKeyList","commonModelInfo","model","seriesId","markId","graphicPath","DeletedAttr","targetConfig","selector","seriesList","SMALL","innerPoints","polygonArea","midPoint","angleDiff","circleList","fromC","overlap","zerosM","zeros","areas","setOverlaps","weight","circles","a_high","maxIterations","solution","clusters","xOffset","setId","getOverlappingCircles","overlapMark","VennSeries","getShapes","shapesType","regionWidth","marginLeft","marginRight","common","centerY","WaveScatterCharacter","CharacterChart","subSelector","textStyle","textAlign","lineY","vchart","RankingBarRuntime","LineRuntime","rawAttribute","SeriesSpecRuntime","VCHART_DATA_INDEX","CommonLabelStyleMap","CommonMarkAttribute","seriesMatch","StroyAllDataGroup","dataGroupStyle","totalLabel","CellStyleRuntime","RowHeightRuntime","getTableTypeFromSpec","ColVisibleRuntime","RowVisibleRuntime","ColStyleRuntime","RowStyleRuntime","ContentColStyleRuntime","ContentRowStyleRuntime","getPayload","globalStartTime","totalStartTime","commonFade","opacityMap","shouldReverse","getCustomParams","delayPerTime","enterPerTime","disappear","checkArrayOrder","getCharacterParentGraphic","graphicStyle","isRun","appearTransformFunc","defaultPayload","vchartPlayer","canDoGraphicAnimation","animationParams","setInitAttributes","appear","toY","BaseVisibility","styleList","LOTTIE_NUMBER_TYPE","LottieRuntime","actionType","pathTarget","DragComponent","transformDeltaWithStage","subMatrix","out2","out1","TransformController","AbstractComponent","editSelection","actionInfo","getDefaultCharacterConfig","lineInfo","createStoreImpl","createState","setState","nextState","previousState","getState","getInitialState","initialState","subscribe","createStore","useStore","createImpl","useBoundStore","createSchemaSlice","createCodeSlice","useDsv","VStory","Chart","useRef","useEffect","arrayBar","ArrayBar","dsl","story","player","CodeEditor","setSchema","setCode","useState","handleExec","useCallback","ReactDOM","React","App"],"mappings":"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AAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,OAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,EAAE,QAAS,GAAG,QAAQ,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,K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AAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,QAAS,KAAK,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,QAAS,KAAK,QAAS,KAAK,QAAS,KAAK,QAAS,GAAG,QAAS,GAAG,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAQ,EAAE,QAAS,EAAE,QAAS,EAAE,OAAQ,EAAE,QAAS,EAAE,OAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,OAAQ,GAAG,QAAQ,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAS,GAAG,QAAQ,EAAE,QAAS,GAAG,QAAS,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,I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AAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAS,EAAE,QAAS,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAI,WAAW,EAAI,WAAW,EAAI,UAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAE,WAAW,KAAK,UAAW,KAAK,WAAW,KAAK,UAAW,KAAK,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,KAAK,WAAW,EAAE,WAAW,GAAG,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,UAAW,GAAG,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,UAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAW,GAAG,UAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,UAAW,KAAK,WAAW,KAAK,SAAW,KAAK,UAAW,KAAK,UAAW,KAAK,UAAW,GAAG,WAAW,GAAG,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,UAAW,GAAG,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,SAAW,EAAE,SAAW,EAAE,UAAW,EAAE,UAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAW,EAAE,WAAW,EAAE,UAAW,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,UAAW,KAAK,UAAW,KAAK,UAAW,KAAK,UAAW,GAAG,EAAE,GAAG,UAAW,GAAG,SAAU,GAAG,UAAW,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,UAAW,GAAG,QAAS,GAAG,UAAW,GAAG,SAAU,GAAG,UAAW,GAAG,SAAU,GAAG,OAAQ,GAAG,SAAU,GAAG,SAAU,GAAG,SAAU,GAAG,SAAU,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,QAAS,GAAG,SAAU,GAAG,SAAU,GAAG,QAAS,GAAG,QAAS,GAAG,QAAQ,GAAG,OAAQ,GAAG,QAAQ,GAAG,QAAS,GAAG,SAAU,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,WAAW,KAAK,UAAW,GAAG,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW,EAAE,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,UAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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AAK,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,SAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,Y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,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAE3jDC,EAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,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AAE,EACrCxJ,yBAA0B,EAAE,CAC5BpyC,WAAY,cACZgD,aAAc,CAAC,CACjB,GAGF64C,UAAWt2H,EACT,SACA,0oLACA,CACE49E,QAAS,CACP,SACA,MACA,SACA,QACA,QACA,YACA,UACD,CACD+uC,OAAQ,CACN4J,qCAAsC,CACpC,YACA,0EACA,wGACD,CACDC,8BAA+B,CAC7B,YACA,oDACA,oDACD,CACDC,+BAAgC,CAC9B,YACA,2DACA,2HACD,CACDC,cAAe,CACb,YACA,mEACA,8EACD,CACDC,sBAAuB,CACrB,YACA,6FACA,6FACA,0EACD,CACDC,sBAAuB,CACrB,YACA,6FACA,6FACD,CACDC,mBAAoB,CAClB,YACA,0EACA,6EACA,6EACA,6EACA,6EACD,CACDC,2BAA4B,CAC1B,YACA,sEACA,iFACA,0FACD,CACDC,YAAa,CACX,YACA,+GACA,0HACD,CACDC,mBAAoB,CAClB,YACA,sEACD,CACDC,oBAAqB,CACnB,aACA,oDACD,CACDC,qBAAsB,CACpB,aACA,sDACA,sDACD,CACDC,mBAAoB,CAClB,aACA,oDACD,CACDb,UAAW,CAAC,aAAY,AAC1B,EACAzJ,yBAA0B,EAAE,CAC5BpyC,WAAY,YACZgD,aAAc,CACZyvC,gBAAiB,CACf,kGACA,4FACD,CACDC,cAAe,CACb,6EAA4E,AAEhF,CACF,GAGFiK,cAAep3H,EACb,SACA,wwHACA,CACE49E,QAAS,CAAC,QAAS,YAAa,SAAU,MAAO,QAAQ,CACzD+uC,OAAQ,CACN0K,qBAAsB,CACpB,YACA,wDACD,CACDC,kBAAmB,CACjB,2BACA,gDACA,0CACD,CACDF,cAAe,CAAC,YAAW,AAC7B,EACAvK,yBAA0B,EAAE,CAC5BpyC,WAAY,gBACZgD,aAAc,CAAC,CACjB,GAGF85C,eAAgBv3H,EACd,SACA,i5HACA,CACE49E,QAAS,CAAC,QAAS,YAAa,SAAU,MAAO,QAAQ,CACzD+uC,OAAQ,CACN6K,sBAAuB,CACrB,YACA,kDACD,CACDD,eAAgB,CACd,YACA,0CAAyC,AAE7C,EACA1K,yBAA0B,CAAC,qCAAqC,CAC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AAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,CAE3jDC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,IAAI,CAK/0B,SAASC,GAAc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E,iECAI,GAAkC,C,OAElC,Q,SACA,S,QACD,Q,MACD,CACD,WACD,QAAS,EACP,UAAS,CACV,UACU,aACF,gBACT,EACA,Y,wtBCjCA,GAA6C,I,IAC3C,EAAO,CACP,MAAM,IACN,OAAO,E,MACL,CACD,MACD,eAEE,IAAY,iBACV,CACJ,C,SACK,2DACL,MAAK,CAAK,OAAK,eACf,KAAK,EACN,SAED,OAII,WAAO,SACL,UAAU,EACV,YAAY,CACZ,UAAa,EACX,SAAS,GACT,OAAQ,S,aAET,GACD,cAAc,EACd,cAAe,EACf,YAAa,CACb,eACD,iBAEH,CACF,CAEK,CACL,E,yCCxCWC,GAAuC,CAClD,OAAQ,SACR,SAAU,SACV,QAAS,CAAC,GAAI,GAAG,CACjB,MAAO,CACL,QAAS,GACT,QAAS,EACT,UAAW,CACT,SAAU,CACV,KAAU,QAEN,IAAI,YACR,EACD,YACM,KAAE,QACV,kBACM,EACL,KAAS,CACH,KAAI,UACT,sBACD,EACE,WAAO,Q,QAEN,E,yBAIE,CACF,eACF,kCACF,CACG,EACF,QAAS,CACT,MAAU,CACF,KAAG,CACD,eACE,qCACV,C,iBAGG,CACD,MACM,KAAI,UACT,4CACF,CACF,CACD,C,iBAII,G,SACA,G,SACD,E,QACI,E,WACH,C,qBAEa,CACZ,MACF,eACF,0BACM,CACL,EACA,gBAAO,CACD,KAAI,CACA,KAAI,UACZ,IAAY,sBAEZ,CACD,CACD,C,uBAIG,CACF,YACF,cACF,SACD,EACA,O,mUC5EA,GAA4C,I,IAC1C,EAAO,C,MACL,CACD,MACD,eACE,IAAY,iBACV,CACJ,C,SACK,2DACL,MAAK,QAAY,MAAC,SAClB,eAAe,CAChB,MAED,eAGQ,IAAI,oBAEV,C,eAGG,CAEC,KACJ,CACS,eACL,uBACA,IACA,C,kBAIC,C,MACD,CAOD,oBAEH,YACF,aAEW,UAA+B,EAC9B,YACF,QACV,e,mHChCQ,GAAE,CACV,QAAQ,CAAE,EACV,OAAO,GACP,SAAS,MACT,SACA,UAAU,CACR,QAAS,GACT,MAAO,CACP,aAAO,SACL,iBACA,aACA,SAAM,CACN,KAAQ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,UACT,cAAa,CACb,C,UAEK,C,QACH,G,OACA,G,MACA,E,OACD,EACF,OACK,YACJ,OAAS,UACT,cAAO,C,iBAIN,GACF,OACM,UAAE,EACT,OAAa,UACL,cAAa,CACrB,CACA,EACA,MAAM,EAAE,CACR,WAAI,EACJ,SAAI,UACJ,WAEF,YAAuD,EACrD,OAAO,CACL,IACD,GACD,EAEF,EAAM,EACJ,G,EA8aA,KA7aE,C,MACD,CACD,gBAEF,C,EA2aE,WA1aQ,CACR,MAAO,CACL,OAAO,S,GA0aT,eAxaa,C,OACT,W,aAEA,Q,MACD,GACF,WACK,YACJ,WAAY,OACZ,KAAU,SACV,C,iBAGI,G,SACA,G,MACD,CACD,MAAO,E,MACL,C,KACE,G,OACD,S,uBAGS,CACR,W,EAEH,YACF,eACM,iBACG,cACR,C,gBAIC,EACD,MAAO,CACL,Y,KACE,Q,OACD,S,uBAGY,CACZ,WACF,EACF,YACM,eACL,YAAiB,EACjB,C,qBAIC,GACD,MAAO,CACL,Y,KACE,O,OACD,S,uBAGA,CACF,WACF,EACD,WAAY,CACH,cACL,C,cAGA,C,cAEM,S,QAEN,C,cACa,CACX,YAAY,GACb,WACF,EACF,iBACW,eACZ,KAAgB,MACV,CACJ,C,QAED,GACD,eAAa,CACb,KAAS,GACP,KAAM,OACN,OAAQ,S,UAEH,G,QACN,CACF,MACO,OAAM,EACP,OACL,MAAS,CACT,C,2BAIE,G,QACD,CACF,OACU,OACH,EACR,MAAY,CACZ,CACA,E,MACE,G,OACE,G,WACI,W,iBACK,G,OACT,C,6BAIC,CACF,eACF,iBACD,mBAEI,CACJ,E,EAoTA,YAnTW,C,MACT,CACD,WACD,KAAU,EACV,EACA,SAAS,CACT,oBACA,UAAW,I,WACT,E,UACD,CACD,cAEF,C,aACS,C,MACL,CACA,QAAQ,GACT,OACD,E,WACQ,CACP,WACD,EACA,OAAO,aACP,eACA,UAAU,IACV,WAAM,EACN,IAAK,EACL,IAAK,EACL,WAEF,E,cAAmB,CACjB,MAAO,CACJ,EAAI,EACP,GAEF,EACE,IAAK,CACF,EAAI,EACP,G,iBAEY,C,MACX,CAC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UAAW,SACX,UAAO,QACP,mBACA,UAAU,SACV,MAAO,SACP,eAAc,QACd,SAAU,SACV,QAAQ,SACR,WACA,SAAU,IACV,SAAS,MACT,cAAU,SACV,SAAS,SACT,UAAW,MACX,kBACA,UAAU,SACV,YAAY,QACZ,eAAS,QACT,WAAY,SACZ,WAAY,SACZ,gBACA,oBACA,aAAa,QACb,cAAe,QACf,cAAY,QACZ,cAAU,QACV,cAAa,MACb,WAAS,QACT,SAAS,SACT,YAAY,MACZ,QAAS,QACT,gBACA,WAAW,QACX,UAAS,SACT,YAAW,SACX,YAAY,QACZ,QAAM,SACN,UAAW,SACX,WAAM,SACN,KAAK,SACL,UAAW,SACX,KAAM,QACN,YACA,YAAS,SACT,aACA,SAAQ,SACR,QAAO,SACP,UAAO,SACP,OAAQ,QACR,eACA,eACA,kBACA,cAAW,SACX,UAAU,QACV,aAAW,SACX,mBACA,WAAW,SACX,UAAU,SACV,qBAAmB,SACnB,UAAW,SACX,WAAW,QACX,mBACA,mBACA,qBACA,cAAc,QACd,aAAc,QACd,eAAa,QACb,eAAc,QACd,eAAW,SACX,YAAO,SACP,WACA,UAAQ,QACR,eACA,iBACA,eACA,iBAAc,QACd,eACA,sBACA,qBACA,eAAe,QACf,gBAAiB,QACjB,kBAAc,MACd,gBAAW,QACX,gBAAW,SACX,aAAU,QACV,UAAW,SACX,UAAM,SACN,SAAS,SACT,YAAO,SACP,SACA,QAAQ,SACR,cACA,UAAQ,QACR,gBACA,UAAW,SACX,gBACA,cAAe,SACf,UAAU,SACV,cAAW,SACX,cAAc,SACd,WAAM,SACN,UAAM,SACN,cACA,KAAM,SACN,cACA,WAAK,SACL,eACA,cAAW,QACX,aACA,UAAQ,SACR,UAAU,QACV,YAAU,QACV,OAAQ,SACR,WAAQ,SACR,SAAQ,QACR,SAAS,SACT,gBACA,gBACA,QAAS,QACT,UAAM,QACN,UAAW,QACX,UAAW,QACX,KAAK,SACL,YAAM,MACN,UAAS,QACT,aACA,WACA,QAAQ,SACR,OAAO,SACP,UAAO,QACP,gBACA,MAAM,SACN,eACA,oBAEF,OAAY,SACV,YAAa,Q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"} \ No newline at end of file